survey-creator-react 1.9.59 → 1.9.60
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/survey-creator-react.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*!
|
|
2
|
-
* SurveyJS Creator React v1.9.
|
|
2
|
+
* SurveyJS Creator React v1.9.60
|
|
3
3
|
* (c) 2015-2022 Devsoft Baltic OÜ - http://surveyjs.io/
|
|
4
4
|
* Github: https://github.com/surveyjs/survey-creator
|
|
5
5
|
* License: https://surveyjs.io/Licenses#SurveyCreator
|
|
@@ -2872,7 +2872,7 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
2872
2872
|
/* harmony import */ var survey_core__WEBPACK_IMPORTED_MODULE_45__ = __webpack_require__(/*! survey-core */ "survey-core");
|
|
2873
2873
|
/* harmony import */ var survey_core__WEBPACK_IMPORTED_MODULE_45___default = /*#__PURE__*/__webpack_require__.n(survey_core__WEBPACK_IMPORTED_MODULE_45__);
|
|
2874
2874
|
var Version;
|
|
2875
|
-
Version = "".concat("1.9.
|
|
2875
|
+
Version = "".concat("1.9.60");
|
|
2876
2876
|
// import "@survey/creator/survey-creator-core.css";
|
|
2877
2877
|
|
|
2878
2878
|
|
|
@@ -2926,7 +2926,7 @@ Version = "".concat("1.9.59");
|
|
|
2926
2926
|
|
|
2927
2927
|
|
|
2928
2928
|
|
|
2929
|
-
Object(survey_core__WEBPACK_IMPORTED_MODULE_45__["checkLibraryVersion"])("".concat("1.9.
|
|
2929
|
+
Object(survey_core__WEBPACK_IMPORTED_MODULE_45__["checkLibraryVersion"])("".concat("1.9.60"), "survey-creator-react");
|
|
2930
2930
|
|
|
2931
2931
|
|
|
2932
2932
|
/***/ }),
|
|
@@ -3588,13 +3588,12 @@ var SurveySimulator = /** @class */ (function (_super) {
|
|
|
3588
3588
|
};
|
|
3589
3589
|
SurveySimulator.prototype.renderElement = function () {
|
|
3590
3590
|
var _this = this;
|
|
3591
|
-
var mainSimulatorClass =
|
|
3592
|
-
(this.model.device === "desktop" ? " svd-simulator-main--desktop" : "");
|
|
3591
|
+
var mainSimulatorClass = this.model.getRootCss();
|
|
3593
3592
|
if (!this.model.survey) {
|
|
3594
3593
|
return react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("div", { className: mainSimulatorClass });
|
|
3595
3594
|
}
|
|
3596
3595
|
if (this.model.hasFrame) {
|
|
3597
|
-
return (react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("div", { className: mainSimulatorClass
|
|
3596
|
+
return (react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("div", { className: mainSimulatorClass, onKeyDown: function (e) { return _this.model.tryToZoom(e, e); }, onMouseEnter: this.model.device === "desktop" ? null : this.model.activateZoom, onMouseLeave: this.model.device === "desktop" ? null : this.model.deactivateZoom },
|
|
3598
3597
|
react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement("div", { className: "svd-simulator-wrapper", id: "svd-simulator-wrapper", style: {
|
|
3599
3598
|
width: this.model.simulatorFrame.frameWidth + "px",
|
|
3600
3599
|
height: this.model.simulatorFrame.frameHeight + "px"
|
|
@@ -4200,4 +4199,4 @@ module.exports = __WEBPACK_EXTERNAL_MODULE_survey_react_ui__;
|
|
|
4200
4199
|
|
|
4201
4200
|
/******/ });
|
|
4202
4201
|
});
|
|
4203
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9TdXJ2ZXlDcmVhdG9yL3dlYnBhY2svdW5pdmVyc2FsTW9kdWxlRGVmaW5pdGlvbiIsIndlYnBhY2s6Ly9TdXJ2ZXlDcmVhdG9yL3dlYnBhY2svYm9vdHN0cmFwIiwid2VicGFjazovL1N1cnZleUNyZWF0b3IvLi9zcmMvQWN0aW9uQnV0dG9uLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlDcmVhdG9yLy4vc3JjL0ltYWdlSXRlbVZhbHVlV3JhcHBlci50c3giLCJ3ZWJwYWNrOi8vU3VydmV5Q3JlYXRvci8uL3NyYy9JdGVtVmFsdWVXcmFwcGVyLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlDcmVhdG9yLy4vc3JjL0xvZ29JbWFnZS50c3giLCJ3ZWJwYWNrOi8vU3VydmV5Q3JlYXRvci8uL3NyYy9NYXRyaXhDZWxsV3JhcHBlci50c3giLCJ3ZWJwYWNrOi8vU3VydmV5Q3JlYXRvci8uL3NyYy9Nb2RlbEVsZW1lbnQudHN4Iiwid2VicGFjazovL1N1cnZleUNyZWF0b3IvLi9zcmMvTmF2aWdhdGlvbi50c3giLCJ3ZWJwYWNrOi8vU3VydmV5Q3JlYXRvci8uL3NyYy9Ob3RpZmllci50c3giLCJ3ZWJwYWNrOi8vU3VydmV5Q3JlYXRvci8uL3NyYy9PYmplY3RTZWxlY3Rvci50c3giLCJ3ZWJwYWNrOi8vU3VydmV5Q3JlYXRvci8uL3NyYy9QYWdlTmF2aWdhdG9yLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlDcmVhdG9yLy4vc3JjL1Byb3BlcnR5R3JpZC50c3giLCJ3ZWJwYWNrOi8vU3VydmV5Q3JlYXRvci8uL3NyYy9RdWVzdGlvbkVkaXRvckNvbnRlbnQudHN4Iiwid2VicGFjazovL1N1cnZleUNyZWF0b3IvLi9zcmMvUXVlc3Rpb25FbWJlZGRlZFN1cnZleS50c3giLCJ3ZWJwYWNrOi8vU3VydmV5Q3JlYXRvci8uL3NyYy9RdWVzdGlvbkxpbmtWYWx1ZS50c3giLCJ3ZWJwYWNrOi8vU3VydmV5Q3JlYXRvci8uL3NyYy9SZXN1bHRzLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlDcmVhdG9yLy4vc3JjL1NpZGVCYXIudHN4Iiwid2VicGFjazovL1N1cnZleUNyZWF0b3IvLi9zcmMvU3RyaW5nRWRpdG9yLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlDcmVhdG9yLy4vc3JjL1N1cnZleUNyZWF0b3IudHN4Iiwid2VicGFjazovL1N1cnZleUNyZWF0b3IvLi9zcmMvU3ZnQnVuZGxlLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlDcmVhdG9yLy4vc3JjL1RhYmJlZE1lbnUudHN4Iiwid2VicGFjazovL1N1cnZleUNyZWF0b3IvLi9zcmMvYWRvcm5lcnMvQ2VsbFF1ZXN0aW9uLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlDcmVhdG9yLy4vc3JjL2Fkb3JuZXJzL0NlbGxRdWVzdGlvbkRyb3Bkb3duLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlDcmVhdG9yLy4vc3JjL2Fkb3JuZXJzL1BhZ2UudHN4Iiwid2VicGFjazovL1N1cnZleUNyZWF0b3IvLi9zcmMvYWRvcm5lcnMvUGFuZWwudHN4Iiwid2VicGFjazovL1N1cnZleUNyZWF0b3IvLi9zcmMvYWRvcm5lcnMvUXVlc3Rpb24udHN4Iiwid2VicGFjazovL1N1cnZleUNyZWF0b3IvLi9zcmMvYWRvcm5lcnMvUXVlc3Rpb25Ecm9wZG93bi50c3giLCJ3ZWJwYWNrOi8vU3VydmV5Q3JlYXRvci8uL3NyYy9hZG9ybmVycy9RdWVzdGlvbkZvb3Rlci50c3giLCJ3ZWJwYWNrOi8vU3VydmV5Q3JlYXRvci8uL3NyYy9hZG9ybmVycy9RdWVzdGlvbkhlYWRlci50c3giLCJ3ZWJwYWNrOi8vU3VydmV5Q3JlYXRvci8uL3NyYy9hZG9ybmVycy9RdWVzdGlvbkltYWdlLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlDcmVhdG9yLy4vc3JjL2Fkb3JuZXJzL1F1ZXN0aW9uUmF0aW5nLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlDcmVhdG9yLy4vc3JjL2Fkb3JuZXJzL1F1ZXN0aW9uV2lkZ2V0LnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlDcmVhdG9yLy4vc3JjL2Fkb3JuZXJzL1Jvdy50c3giLCJ3ZWJwYWNrOi8vU3VydmV5Q3JlYXRvci8uL3NyYy9lbnRyaWVzL2hlbHBlcnMudHMiLCJ3ZWJwYWNrOi8vU3VydmV5Q3JlYXRvci8uL3NyYy9lbnRyaWVzL2luZGV4LnRzIiwid2VicGFjazovL1N1cnZleUNyZWF0b3IvLi9zcmMvZXZlbnRzLnRzIiwid2VicGFjazovL1N1cnZleUNyZWF0b3IvLi9zcmMvdGFicy9EZXNpZ25lci50c3giLCJ3ZWJwYWNrOi8vU3VydmV5Q3JlYXRvci8uL3NyYy90YWJzL0VtYmVkLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlDcmVhdG9yLy4vc3JjL3RhYnMvSnNvbkVkaXRvckFjZS50c3giLCJ3ZWJwYWNrOi8vU3VydmV5Q3JlYXRvci8uL3NyYy90YWJzL0pzb25FZGl0b3JUZXh0YXJlYS50c3giLCJ3ZWJwYWNrOi8vU3VydmV5Q3JlYXRvci8uL3NyYy90YWJzL0xvZ2ljLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlDcmVhdG9yLy4vc3JjL3RhYnMvUHJldmlldy50c3giLCJ3ZWJwYWNrOi8vU3VydmV5Q3JlYXRvci8uL3NyYy90YWJzL1N1cnZleVNpbXVsYXRvci50c3giLCJ3ZWJwYWNrOi8vU3VydmV5Q3JlYXRvci8uL3NyYy90YWJzL1RyYW5zbGF0aW9uLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlDcmVhdG9yLy4vc3JjL3RhYnMvVHJhbnNsYXRpb25MaW5lU2tlbGV0b24udHN4Iiwid2VicGFjazovL1N1cnZleUNyZWF0b3IvLi9zcmMvdGFicy9sb2dpYy1vcGVyYXRvci50c3giLCJ3ZWJwYWNrOi8vU3VydmV5Q3JlYXRvci8uL3NyYy90b29sYm94L0FkYXB0aXZlVG9vbGJveC50c3giLCJ3ZWJwYWNrOi8vU3VydmV5Q3JlYXRvci8uL3NyYy90b29sYm94L1Rvb2xib3gudHN4Iiwid2VicGFjazovL1N1cnZleUNyZWF0b3IvLi9zcmMvdG9vbGJveC9Ub29sYm94Q2F0ZWdvcnkudHN4Iiwid2VicGFjazovL1N1cnZleUNyZWF0b3IvLi9zcmMvdG9vbGJveC9Ub29sYm94SXRlbS50c3giLCJ3ZWJwYWNrOi8vU3VydmV5Q3JlYXRvci9leHRlcm5hbCB7XCJyb290XCI6XCJSZWFjdFwiLFwiY29tbW9uanMyXCI6XCJyZWFjdFwiLFwiY29tbW9uanNcIjpcInJlYWN0XCIsXCJhbWRcIjpcInJlYWN0XCJ9Iiwid2VicGFjazovL1N1cnZleUNyZWF0b3IvZXh0ZXJuYWwge1wicm9vdFwiOlwiUmVhY3RET01cIixcImNvbW1vbmpzMlwiOlwicmVhY3QtZG9tXCIsXCJjb21tb25qc1wiOlwicmVhY3QtZG9tXCIsXCJhbWRcIjpcInJlYWN0LWRvbVwifSIsIndlYnBhY2s6Ly9TdXJ2ZXlDcmVhdG9yL2V4dGVybmFsIHtcInJvb3RcIjpcIlN1cnZleVwiLFwiY29tbW9uanMyXCI6XCJzdXJ2ZXktY29yZVwiLFwiY29tbW9uanNcIjpcInN1cnZleS1jb3JlXCIsXCJhbWRcIjpcInN1cnZleS1jb3JlXCJ9Iiwid2VicGFjazovL1N1cnZleUNyZWF0b3IvZXh0ZXJuYWwge1wicm9vdFwiOlwiU3VydmV5Q3JlYXRvckNvcmVcIixcImNvbW1vbmpzMlwiOlwic3VydmV5LWNyZWF0b3ItY29yZVwiLFwiY29tbW9uanNcIjpcInN1cnZleS1jcmVhdG9yLWNvcmVcIixcImFtZFwiOlwic3VydmV5LWNyZWF0b3ItY29yZVwifSIsIndlYnBhY2s6Ly9TdXJ2ZXlDcmVhdG9yL2V4dGVybmFsIHtcInJvb3RcIjpcIlN1cnZleVJlYWN0XCIsXCJjb21tb25qczJcIjpcInN1cnZleS1yZWFjdC11aVwiLFwiY29tbW9uanNcIjpcInN1cnZleS1yZWFjdC11aVwiLFwiYW1kXCI6XCJzdXJ2ZXktcmVhY3QtdWlcIn0iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNELE87UUNWQTtRQUNBOztRQUVBO1FBQ0E7O1FBRUE7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNB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QUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUU7WUFDL0QsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNoQixPQUFPLENBQUMsQ0FBQztBQUNYLENBQUMsQ0FBQzs7Ozs7Ozs7Ozs7OztBQ3RERjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FB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QUMsS0FBSyxFQUFFLFNBQVMsR0FBWTtvQkFDaEgscUVBQU0sU0FBUyxFQUFDLHlCQUF5QixJQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFRLENBQzdEO2dCQUNQLENBQUM7b0JBQ0QscUVBQU0sU0FBUyxFQUFDLHlCQUF5QixJQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFRLENBQ25FLENBQ0csQ0FDUCxDQUFDO0lBQ0osQ0FBQztJQUNILCtCQUFDO0FBQUQsQ0FBQyxDQXJENkMsaUVBQW1CLEdBcURoRTs7QUFFRCxtRUFBbUIsQ0FBQyxRQUFRLENBQUMsZUFBZSxDQUFDLGtCQUFrQixFQUFFLFVBQUMsS0FBSztJQUNyRSxPQUFPLDRDQUFLLENBQUMsYUFBYSxDQUFDLHdCQUF3QixFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQzlELENBQUMsQ0FBQyxDQUFDOzs7Ozs7Ozs7Ozs7QUM1SUgsbUQ7Ozs7Ozs7Ozs7O0FDQUEsdUQ7Ozs7Ozs7Ozs7O0FDQUEseUQ7Ozs7Ozs7Ozs7O0FDQUEsaUU7Ozs7Ozs7Ozs7O0FDQUEsNkQiLCJmaWxlIjoic3VydmV5LWNyZWF0b3ItcmVhY3QuanMiLCJzb3VyY2VzQ29udGVudCI6WyIoZnVuY3Rpb24gd2VicGFja1VuaXZlcnNhbE1vZHVsZURlZmluaXRpb24ocm9vdCwgZmFjdG9yeSkge1xuXHRpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSA9PT0gJ29iamVjdCcpXG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KHJlcXVpcmUoXCJyZWFjdFwiKSwgcmVxdWlyZShcInJlYWN0LWRvbVwiKSwgcmVxdWlyZShcInN1cnZleS1jb3JlXCIpLCByZXF1aXJlKFwic3VydmV5LWNyZWF0b3ItY29yZVwiKSwgcmVxdWlyZShcInN1cnZleS1yZWFjdC11aVwiKSk7XG5cdGVsc2UgaWYodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKVxuXHRcdGRlZmluZShcIlN1cnZleUNyZWF0b3JcIiwgW1wicmVhY3RcIiwgXCJyZWFjdC1kb21cIiwgXCJzdXJ2ZXktY29yZVwiLCBcInN1cnZleS1jcmVhdG9yLWNvcmVcIiwgXCJzdXJ2ZXktcmVhY3QtdWlcIl0sIGZhY3RvcnkpO1xuXHRlbHNlIGlmKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0Jylcblx0XHRleHBvcnRzW1wiU3VydmV5Q3JlYXRvclwiXSA9IGZhY3RvcnkocmVxdWlyZShcInJlYWN0XCIpLCByZXF1aXJlKFwicmVhY3QtZG9tXCIpLCByZXF1aXJlKFwic3VydmV5LWNvcmVcIiksIHJlcXVpcmUoXCJzdXJ2ZXktY3JlYXRvci1jb3JlXCIpLCByZXF1aXJlKFwic3VydmV5LXJlYWN0LXVpXCIpKTtcblx0ZWxzZVxuXHRcdHJvb3RbXCJTdXJ2ZXlDcmVhdG9yXCJdID0gZmFjdG9yeShyb290W1wiUmVhY3RcIl0sIHJvb3RbXCJSZWFjdERPTVwiXSwgcm9vdFtcIlN1cnZleVwiXSwgcm9vdFtcIlN1cnZleUNyZWF0b3JDb3JlXCJdLCByb290W1wiU3VydmV5UmVhY3RcIl0pO1xufSkodGhpcywgZnVuY3Rpb24oX19XRUJQQUNLX0VYVEVSTkFMX01PRFVMRV9yZWFjdF9fLCBfX1dFQlBBQ0tfRVhURVJOQUxfTU9EVUxFX3JlYWN0X2RvbV9fLCBfX1dFQlBBQ0tfRVhURVJOQUxfTU9EVUxFX3N1cnZleV9jb3JlX18sIF9fV0VCUEFDS19FWFRFUk5BTF9NT0RVTEVfc3VydmV5X2NyZWF0b3JfY29yZV9fLCBfX1dFQlBBQ0tfRVhURVJOQUxfTU9EVUxFX3N1cnZleV9yZWFjdF91aV9fKSB7XG5yZXR1cm4gIiwiIFx0Ly8gVGhlIG1vZHVsZSBjYWNoZVxuIFx0dmFyIGluc3RhbGxlZE1vZHVsZXMgPSB7fTtcblxuIFx0Ly8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbiBcdGZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblxuIFx0XHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcbiBcdFx0aWYoaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0pIHtcbiBcdFx0XHRyZXR1cm4gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0uZXhwb3J0cztcbiBcdFx0fVxuIFx0XHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuIFx0XHR2YXIgbW9kdWxlID0gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0gPSB7XG4gXHRcdFx0aTogbW9kdWxlSWQsXG4gXHRcdFx0bDogZmFsc2UsXG4gXHRcdFx0ZXhwb3J0czoge31cbiBcdFx0fTtcblxuIFx0XHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cbiBcdFx0bW9kdWxlc1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cbiBcdFx0Ly8gRmxhZyB0aGUgbW9kdWxlIGFzIGxvYWRlZFxuIFx0XHRtb2R1bGUubCA9IHRydWU7XG5cbiBcdFx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcbiBcdFx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xuIFx0fVxuXG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlcyBvYmplY3QgKF9fd2VicGFja19tb2R1bGVzX18pXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm0gPSBtb2R1bGVzO1xuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZSBjYWNoZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5jID0gaW5zdGFsbGVkTW9kdWxlcztcblxuIFx0Ly8gZGVmaW5lIGdldHRlciBmdW5jdGlvbiBmb3IgaGFybW9ueSBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSBmdW5jdGlvbihleHBvcnRzLCBuYW1lLCBnZXR0ZXIpIHtcbiBcdFx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBuYW1lKSkge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBuYW1lLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZ2V0dGVyIH0pO1xuIFx0XHR9XG4gXHR9O1xuXG4gXHQvLyBkZWZpbmUgX19lc01vZHVsZSBvbiBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIgPSBmdW5jdGlvbihleHBvcnRzKSB7XG4gXHRcdGlmKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC50b1N0cmluZ1RhZykge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBTeW1ib2wudG9TdHJpbmdUYWcsIHsgdmFsdWU6ICdNb2R1bGUnIH0pO1xuIFx0XHR9XG4gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4gXHR9O1xuXG4gXHQvLyBjcmVhdGUgYSBmYWtlIG5hbWVzcGFjZSBvYmplY3RcbiBcdC8vIG1vZGUgJiAxOiB2YWx1ZSBpcyBhIG1vZHVsZSBpZCwgcmVxdWlyZSBpdFxuIFx0Ly8gbW9kZSAmIDI6IG1lcmdlIGFsbCBwcm9wZXJ0aWVzIG9mIHZhbHVlIGludG8gdGhlIG5zXG4gXHQvLyBtb2RlICYgNDogcmV0dXJuIHZhbHVlIHdoZW4gYWxyZWFkeSBucyBvYmplY3RcbiBcdC8vIG1vZGUgJiA4fDE6IGJlaGF2ZSBsaWtlIHJlcXVpcmVcbiBcdF9fd2VicGFja19yZXF1aXJlX18udCA9IGZ1bmN0aW9uKHZhbHVlLCBtb2RlKSB7XG4gXHRcdGlmKG1vZGUgJiAxKSB2YWx1ZSA9IF9fd2VicGFja19yZXF1aXJlX18odmFsdWUpO1xuIFx0XHRpZihtb2RlICYgOCkgcmV0dXJuIHZhbHVlO1xuIFx0XHRpZigobW9kZSAmIDQpICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgJiYgdmFsdWUuX19lc01vZHVsZSkgcmV0dXJuIHZhbHVlO1xuIFx0XHR2YXIgbnMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIobnMpO1xuIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkobnMsICdkZWZhdWx0JywgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdmFsdWUgfSk7XG4gXHRcdGlmKG1vZGUgJiAyICYmIHR5cGVvZiB2YWx1ZSAhPSAnc3RyaW5nJykgZm9yKHZhciBrZXkgaW4gdmFsdWUpIF9fd2VicGFja19yZXF1aXJlX18uZChucywga2V5LCBmdW5jdGlvbihrZXkpIHsgcmV0dXJuIHZhbHVlW2tleV07IH0uYmluZChudWxsLCBrZXkpKTtcbiBcdFx0cmV0dXJuIG5zO1xuIFx0fTtcblxuIFx0Ly8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubiA9IGZ1bmN0aW9uKG1vZHVsZSkge1xuIFx0XHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cbiBcdFx0XHRmdW5jdGlvbiBnZXREZWZhdWx0KCkgeyByZXR1cm4gbW9kdWxlWydkZWZhdWx0J107IH0gOlxuIFx0XHRcdGZ1bmN0aW9uIGdldE1vZHVsZUV4cG9ydHMoKSB7IHJldHVybiBtb2R1bGU7IH07XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18uZChnZXR0ZXIsICdhJywgZ2V0dGVyKTtcbiBcdFx0cmV0dXJuIGdldHRlcjtcbiBcdH07XG5cbiBcdC8vIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbFxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5vID0gZnVuY3Rpb24ob2JqZWN0LCBwcm9wZXJ0eSkgeyByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpOyB9O1xuXG4gXHQvLyBfX3dlYnBhY2tfcHVibGljX3BhdGhfX1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5wID0gXCJcIjtcblxuXG4gXHQvLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbiBcdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKF9fd2VicGFja19yZXF1aXJlX18ucyA9IFwiLi9zcmMvZW50cmllcy9pbmRleC50c1wiKTtcbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IGF0dGFjaEtleTJjbGljaywgU3VydmV5RWxlbWVudEJhc2UsIH0gZnJvbSBcInN1cnZleS1yZWFjdC11aVwiO1xuXG5leHBvcnQgY2xhc3MgQWN0aW9uQnV0dG9uIGV4dGVuZHMgU3VydmV5RWxlbWVudEJhc2U8YW55LCBhbnk+IHtcbiAgcmVuZGVyRWxlbWVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgbGV0IGNsYXNzZXMgPSB0aGlzLnByb3BzLmNsYXNzZXMgKyBcIiBzdmMtYWN0aW9uLWJ1dHRvblwiO1xuICAgIGlmICh0aGlzLnByb3BzLnNlbGVjdGVkKSB7XG4gICAgICBjbGFzc2VzICs9IFwiIHN2Yy1hY3Rpb24tYnV0dG9uLS1zZWxlY3RlZFwiO1xuICAgIH1cbiAgICBpZiAodGhpcy5wcm9wcy5kaXNhYmxlZCkge1xuICAgICAgY2xhc3NlcyArPSBcIiBzdmMtYWN0aW9uLWJ1dHRvbi0tZGlzYWJsZWRcIjtcbiAgICAgIHJldHVybiA8c3BhbiBjbGFzc05hbWU9e2NsYXNzZXN9Pnt0aGlzLnByb3BzLnRleHR9PC9zcGFuPjtcbiAgICB9XG4gICAgcmV0dXJuIChcbiAgICAgIDw+XG4gICAgICAgIHthdHRhY2hLZXkyY2xpY2soXG4gICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgIHJvbGU9XCJidXR0b25cIlxuICAgICAgICAgICAgY2xhc3NOYW1lPXtjbGFzc2VzfVxuICAgICAgICAgICAgb25DbGljaz17KGUpID0+IHtcbiAgICAgICAgICAgICAgaWYgKCF0aGlzLnByb3BzLmFsbG93QnViYmxlKSB7XG4gICAgICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB0aGlzLnByb3BzLmNsaWNrKCk7XG4gICAgICAgICAgICB9fVxuICAgICAgICAgICAgdGl0bGU9e3RoaXMucHJvcHMudGl0bGV9XG4gICAgICAgICAgPlxuICAgICAgICAgICAge3RoaXMucHJvcHMudGV4dH1cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICl9XG4gICAgICA8Lz5cbiAgICApO1xuICB9XG59XG4iLCJpbXBvcnQgeyBJbWFnZUl0ZW1WYWx1ZVdyYXBwZXJWaWV3TW9kZWwgfSBmcm9tIFwic3VydmV5LWNyZWF0b3ItY29yZVwiO1xuaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgUXVlc3Rpb25TZWxlY3RCYXNlLCBCYXNlLCBJbWFnZUl0ZW1WYWx1ZSwgUXVlc3Rpb25JbWFnZVBpY2tlck1vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBSZWFjdEVsZW1lbnRGYWN0b3J5LCBTdmdJY29uIH0gZnJvbSBcInN1cnZleS1yZWFjdC11aVwiO1xuaW1wb3J0IHtcbiAgYXR0YWNoS2V5MmNsaWNrLFxufSBmcm9tIFwic3VydmV5LXJlYWN0LXVpXCI7XG5pbXBvcnQgeyBDcmVhdG9yTW9kZWxFbGVtZW50IH0gZnJvbSBcIi4vTW9kZWxFbGVtZW50XCI7XG5cbmludGVyZmFjZSBJbWFnZUl0ZW1WYWx1ZUFkb3JuZXJDb21wb25lbnRQcm9wcyB7XG4gIGVsZW1lbnQ6IEpTWC5FbGVtZW50O1xuICBjb21wb25lbnREYXRhOiBhbnk7XG4gIHF1ZXN0aW9uOiBRdWVzdGlvblNlbGVjdEJhc2U7XG4gIGl0ZW06IEltYWdlSXRlbVZhbHVlO1xufVxuXG5leHBvcnQgY2xhc3MgSW1hZ2VJdGVtVmFsdWVBZG9ybmVyQ29tcG9uZW50IGV4dGVuZHMgQ3JlYXRvck1vZGVsRWxlbWVudDxcbiAgSW1hZ2VJdGVtVmFsdWVBZG9ybmVyQ29tcG9uZW50UHJvcHMsXG4gIGFueVxuPiB7XG4gIG1vZGVsOiBJbWFnZUl0ZW1WYWx1ZVdyYXBwZXJWaWV3TW9kZWw7XG4gIHByaXZhdGUgcm9vdFJlZjogUmVhY3QuUmVmT2JqZWN0PEhUTUxEaXZFbGVtZW50PjtcblxuICBjb25zdHJ1Y3Rvcihwcm9wczogSW1hZ2VJdGVtVmFsdWVBZG9ybmVyQ29tcG9uZW50UHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgdGhpcy5yb290UmVmID0gUmVhY3QuY3JlYXRlUmVmKCk7XG4gIH1cbiAgcHJvdGVjdGVkIGNyZWF0ZU1vZGVsKCk6IHZvaWQge1xuICAgIHRoaXMubW9kZWwgPSBuZXcgSW1hZ2VJdGVtVmFsdWVXcmFwcGVyVmlld01vZGVsKFxuICAgICAgdGhpcy5wcm9wcy5jb21wb25lbnREYXRhLmNyZWF0b3IsXG4gICAgICB0aGlzLnByb3BzLnF1ZXN0aW9uLFxuICAgICAgdGhpcy5wcm9wcy5pdGVtLFxuICAgICAgbnVsbCxcbiAgICAgIG51bGxcbiAgICApO1xuICB9XG4gIHByb3RlY3RlZCBnZXRVcGRhdGVkTW9kZWxQcm9wcygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIFtcInF1ZXN0aW9uXCIsIFwiaXRlbVwiXTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0U3RhdGVFbGVtZW50KCk6IEJhc2Uge1xuICAgIHJldHVybiB0aGlzLm1vZGVsO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldCBxdWVzdGlvbigpOiBRdWVzdGlvbkltYWdlUGlja2VyTW9kZWwge1xuICAgIHJldHVybiB0aGlzLnByb3BzLnF1ZXN0aW9uIGFzIFF1ZXN0aW9uSW1hZ2VQaWNrZXJNb2RlbDtcbiAgfVxuXG4gIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIHN1cGVyLmNvbXBvbmVudERpZE1vdW50KCk7XG4gICAgdGhpcy5tb2RlbC5pdGVtc1Jvb3QgPSB0aGlzLnJvb3RSZWYuY3VycmVudDtcbiAgfVxuXG4gIGNvbXBvbmVudERpZFVwZGF0ZShwcmV2UHJvcHMsIHByZXZTdGF0ZSkge1xuICAgIHN1cGVyLmNvbXBvbmVudERpZFVwZGF0ZShwcmV2UHJvcHMsIHByZXZTdGF0ZSk7XG4gICAgdGhpcy5tb2RlbC5pdGVtc1Jvb3QgPSB0aGlzLnJvb3RSZWYuY3VycmVudDtcbiAgfVxuXG4gIHByZXZlbnREcmFnSGFuZGxlciA9IChlKSA9PiB7XG4gICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICB9XG5cbiAgcmVuZGVyKCk6IEpTWC5FbGVtZW50IHtcbiAgICAvLyBpZiAodGhpcy5tb2RlbC5xdWVzdGlvbi5pc0RyYWdnZWQpIHtcbiAgICAvLyAgIHJldHVybiBudWxsO1xuICAgIC8vIH1cbiAgICB0aGlzLm1vZGVsLml0ZW0gPSB0aGlzLnByb3BzLml0ZW07XG4gICAgY29uc3QgaXNOZXcgPSAhdGhpcy5wcm9wcy5xdWVzdGlvbi5pc0l0ZW1Jbkxpc3QodGhpcy5wcm9wcy5pdGVtKTtcbiAgICB0aGlzLm1vZGVsLmlzTmV3ID0gaXNOZXc7XG4gICAgY29uc3QgaW1hZ2VTdHlsZSA9ICF0aGlzLm1vZGVsLmdldElzTmV3SXRlbVNpbmdsZSgpID8geyB3aWR0aDogdGhpcy5xdWVzdGlvbi5yZW5kZXJlZEltYWdlV2lkdGgsIGhlaWdodDogdGhpcy5xdWVzdGlvbi5yZW5kZXJlZEltYWdlSGVpZ2h0IH0gOiBudWxsO1xuXG4gICAgbGV0IGNvbnRlbnQgPSBudWxsO1xuICAgIGlmIChpc05ldykge1xuICAgICAgY29udGVudCA9ICg8PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2Yy1pbWFnZS1pdGVtLXZhbHVlX19pdGVtXCJcbiAgICAgICAgICBvbkRyb3A9e3RoaXMubW9kZWwub25Ecm9wfSBvbkRyYWdPdmVyPXt0aGlzLm1vZGVsLm9uRHJhZ092ZXJ9IG9uRHJhZ0xlYXZlPXt0aGlzLm1vZGVsLm9uRHJhZ0xlYXZlfT5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInNkLWltYWdlcGlja2VyX19pdGVtIHNkLWltYWdlcGlja2VyX19pdGVtLS1pbmxpbmVcIj5cbiAgICAgICAgICAgIDxsYWJlbCBjbGFzc05hbWU9XCJzZC1pbWFnZXBpY2tlcl9fbGFiZWxcIj5cbiAgICAgICAgICAgICAgPGRpdiBzdHlsZT17aW1hZ2VTdHlsZX0gY2xhc3NOYW1lPVwic2QtaW1hZ2VwaWNrZXJfX2ltYWdlXCI+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmMtaW1hZ2UtaXRlbS12YWx1ZS1jb250cm9sc1wiPlxuICAgICAgICAgIHt0aGlzLm1vZGVsLmFsbG93QWRkID8gYXR0YWNoS2V5MmNsaWNrKDxzcGFuIGNsYXNzTmFtZT1cInN2Yy1pbWFnZS1pdGVtLXZhbHVlLWNvbnRyb2xzX19idXR0b24gc3ZjLWltYWdlLWl0ZW0tdmFsdWUtY29udHJvbHNfX2FkZFwiIG9uQ2xpY2s9eygpID0+IHRoaXMubW9kZWwuY2hvb3NlTmV3RmlsZSh0aGlzLm1vZGVsKX0+XG4gICAgICAgICAgICA8U3ZnSWNvbiBzaXplPXsyNH0gaWNvbk5hbWU9e1wiaWNvbi1hZGQtbGdcIn0+PC9TdmdJY29uPlxuICAgICAgICAgIDwvc3Bhbj4pIDogbnVsbH1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8Lz4pO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb250ZW50ID0gKFxuICAgICAgICA8PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtcInN2Yy1pbWFnZS1pdGVtLXZhbHVlX19pdGVtXCJ9PlxuICAgICAgICAgICAge3RoaXMucHJvcHMuZWxlbWVudH1cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInN2Yy1pbWFnZS1pdGVtLXZhbHVlLWNvbnRyb2xzX19idXR0b24gc3ZjLWltYWdlLWl0ZW0tdmFsdWUtY29udHJvbHNfX2RyYWctYXJlYS1pbmRpY2F0b3JcIlxuICAgICAgICAgICAgb25Qb2ludGVyRG93bj17KGV2ZW50OiBhbnkpID0+IHRoaXMubW9kZWwub25Qb2ludGVyRG93bihldmVudCl9XG4gICAgICAgICAgPlxuICAgICAgICAgICAgPFN2Z0ljb24gc2l6ZT17MjR9IGljb25OYW1lPXtcImljb24tZHJhZy1hcmVhLWluZGljYXRvclwifT48L1N2Z0ljb24+XG4gICAgICAgICAgPC9zcGFuPlxuXG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmMtaW1hZ2UtaXRlbS12YWx1ZS1jb250cm9sc1wiPlxuICAgICAgICAgICAge3RoaXMubW9kZWwuYWxsb3dSZW1vdmUgPyBhdHRhY2hLZXkyY2xpY2soPHNwYW5cbiAgICAgICAgICAgICAgY2xhc3NOYW1lPVwic3ZjLWltYWdlLWl0ZW0tdmFsdWUtY29udHJvbHNfX2J1dHRvbiBzdmMtaW1hZ2UtaXRlbS12YWx1ZS1jb250cm9sc19fY2hvb3NlLWZpbGVcIlxuICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB0aGlzLm1vZGVsLmNob29zZUZpbGUodGhpcy5tb2RlbCl9XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxTdmdJY29uIHNpemU9ezI0fSBpY29uTmFtZT17XCJpY29uLWZpbGVcIn0+PC9TdmdJY29uPlxuICAgICAgICAgICAgPC9zcGFuPikgOiBudWxsfVxuICAgICAgICAgICAge3RoaXMubW9kZWwuYWxsb3dSZW1vdmUgPyBhdHRhY2hLZXkyY2xpY2soPHNwYW5cbiAgICAgICAgICAgICAgY2xhc3NOYW1lPVwic3ZjLWltYWdlLWl0ZW0tdmFsdWUtY29udHJvbHNfX2J1dHRvbiBzdmMtaW1hZ2UtaXRlbS12YWx1ZS1jb250cm9sc19fcmVtb3ZlIGRkZFwiXG4gICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHRoaXMubW9kZWwucmVtb3ZlKHRoaXMubW9kZWwpfVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8U3ZnSWNvbiBzaXplPXsyNH0gaWNvbk5hbWU9e1wiaWNvbi1kZWxldGVcIn0+PC9TdmdJY29uPlxuICAgICAgICAgICAgPC9zcGFuPikgOiBudWxsfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8Lz5cbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXZcbiAgICAgICAgcmVmPXt0aGlzLnJvb3RSZWZ9XG4gICAgICAgIGNsYXNzTmFtZT17dGhpcy5tb2RlbC5nZXRSb290Q3NzKCl9XG4gICAgICAgIGtleT17dGhpcy5wcm9wcy5lbGVtZW50LmtleX1cbiAgICAgICAgZGF0YS1zdi1kcm9wLXRhcmdldC1pdGVtLXZhbHVlPXtcbiAgICAgICAgICB0aGlzLm1vZGVsLmlzRHJhZ2dhYmxlID8gdGhpcy5tb2RlbC5pdGVtLnZhbHVlIDogdW5kZWZpbmVkXG4gICAgICAgIH1cbiAgICAgICAgb25Qb2ludGVyRG93bj17KGV2ZW50OiBhbnkpID0+IHRoaXMubW9kZWwub25Qb2ludGVyRG93bihldmVudCl9XG4gICAgICAgIG9uRHJhZ1N0YXJ0PXt0aGlzLnByZXZlbnREcmFnSGFuZGxlcn1cbiAgICAgID5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e1wic3ZjLWltYWdlLWl0ZW0tdmFsdWUtd3JhcHBlcl9fZ2hvc3RcIn0gc3R5bGU9e2ltYWdlU3R5bGV9PjwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17XCJzdmMtaW1hZ2UtaXRlbS12YWx1ZS13cmFwcGVyX19jb250ZW50XCJ9PlxuICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgdHlwZT1cImZpbGVcIlxuICAgICAgICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCJcbiAgICAgICAgICAgIHRhYkluZGV4PXstMX1cbiAgICAgICAgICAgIGFjY2VwdD1cImltYWdlLypcIlxuICAgICAgICAgICAgY2xhc3NOYW1lPVwic3ZjLWNob29zZS1maWxlLWlucHV0XCJcbiAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgIHBvc2l0aW9uOiBcImFic29sdXRlXCIsXG4gICAgICAgICAgICAgIG9wYWNpdHk6IDAsXG4gICAgICAgICAgICAgIHdpZHRoOiBcIjFweFwiLFxuICAgICAgICAgICAgICBoZWlnaHQ6IFwiMXB4XCIsXG4gICAgICAgICAgICAgIG92ZXJmbG93OiBcImhpZGRlblwiXG4gICAgICAgICAgICB9fVxuICAgICAgICAgIC8+XG4gICAgICAgICAge2NvbnRlbnR9XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxufVxuXG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcbiAgXCJzdmMtaW1hZ2UtaXRlbS12YWx1ZVwiLFxuICAocHJvcHM6IEltYWdlSXRlbVZhbHVlQWRvcm5lckNvbXBvbmVudFByb3BzKSA9PiB7XG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoSW1hZ2VJdGVtVmFsdWVBZG9ybmVyQ29tcG9uZW50LCBwcm9wcyk7XG4gIH1cbik7XG4iLCJpbXBvcnQgeyBnZXRMb2NTdHJpbmcsIEl0ZW1WYWx1ZVdyYXBwZXJWaWV3TW9kZWwgfSBmcm9tIFwic3VydmV5LWNyZWF0b3ItY29yZVwiO1xuaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgUmVhY3REcmFnRXZlbnQgfSBmcm9tIFwic3JjL2V2ZW50c1wiO1xuaW1wb3J0IHsgUXVlc3Rpb25TZWxlY3RCYXNlLCBCYXNlLCBJdGVtVmFsdWUgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7XG4gIGF0dGFjaEtleTJjbGljayxcbiAgUmVhY3RFbGVtZW50RmFjdG9yeSxcbiAgU3ZnSWNvblxufSBmcm9tIFwic3VydmV5LXJlYWN0LXVpXCI7XG5pbXBvcnQgeyBDcmVhdG9yTW9kZWxFbGVtZW50IH0gZnJvbSBcIi4vTW9kZWxFbGVtZW50XCI7XG5cbmludGVyZmFjZSBJdGVtVmFsdWVBZG9ybmVyQ29tcG9uZW50UHJvcHMge1xuICBlbGVtZW50OiBKU1guRWxlbWVudDtcbiAgY29tcG9uZW50RGF0YTogYW55O1xuICBxdWVzdGlvbjogUXVlc3Rpb25TZWxlY3RCYXNlO1xuICBpdGVtOiBJdGVtVmFsdWU7XG59XG5cbmV4cG9ydCBjbGFzcyBJdGVtVmFsdWVBZG9ybmVyQ29tcG9uZW50IGV4dGVuZHMgQ3JlYXRvck1vZGVsRWxlbWVudDxcbiAgSXRlbVZhbHVlQWRvcm5lckNvbXBvbmVudFByb3BzLFxuICBhbnlcbj4ge1xuICBtb2RlbDogSXRlbVZhbHVlV3JhcHBlclZpZXdNb2RlbDtcbiAgcHJvdGVjdGVkIGNyZWF0ZU1vZGVsKCk6IHZvaWQge1xuICAgIHRoaXMubW9kZWwgPSBuZXcgSXRlbVZhbHVlV3JhcHBlclZpZXdNb2RlbChcbiAgICAgIHRoaXMucHJvcHMuY29tcG9uZW50RGF0YS5jcmVhdG9yLFxuICAgICAgdGhpcy5wcm9wcy5xdWVzdGlvbixcbiAgICAgIHRoaXMucHJvcHMuaXRlbVxuICAgICk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldFVwZGF0ZWRNb2RlbFByb3BzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gW1wicXVlc3Rpb25cIiwgXCJpdGVtXCJdO1xuICB9XG4gIHByb3RlY3RlZCBnZXRTdGF0ZUVsZW1lbnQoKTogQmFzZSB7XG4gICAgcmV0dXJuIHRoaXMubW9kZWw7XG4gIH1cbiAgcHJpdmF0ZSBvbkJsdXIgPSAoZXZlbnQ6IGFueSkgPT4ge1xuICAgIHRoaXMubW9kZWwub25Gb2N1c091dChldmVudC5uYXRpdmVFdmVudCk7XG4gIH07XG5cbiAgcmVuZGVyKCk6IEpTWC5FbGVtZW50IHtcbiAgICAvLyBpZiAodGhpcy5tb2RlbC5xdWVzdGlvbi5pc0RyYWdnZWQpIHtcbiAgICAvLyAgIHJldHVybiBudWxsO1xuICAgIC8vIH1cbiAgICB0aGlzLm1vZGVsLml0ZW0gPSB0aGlzLnByb3BzLml0ZW07XG4gICAgY29uc3QgYnV0dG9uID0gdGhpcy5tb2RlbC5hbGxvd0FkZCA/IChcbiAgICAgIGF0dGFjaEtleTJjbGljayg8c3BhblxuICAgICAgICBjbGFzc05hbWU9XCJzdmMtaXRlbS12YWx1ZS1jb250cm9sc19fYnV0dG9uIHN2Yy1pdGVtLXZhbHVlLWNvbnRyb2xzX19hZGRcIlxuICAgICAgICBhcmlhLWxhYmVsPXt0aGlzLm1vZGVsLnRvb2x0aXB9XG4gICAgICAgIG9uQ2xpY2s9eygpID0+IHtcbiAgICAgICAgICB0aGlzLm1vZGVsLmFkZCh0aGlzLm1vZGVsKTtcbiAgICAgICAgICB0aGlzLm1vZGVsLmlzTmV3ID0gZmFsc2U7XG4gICAgICAgIH19XG4gICAgICA+XG4gICAgICAgIDxTdmdJY29uIHNpemU9ezE2fSBpY29uTmFtZT17XCJpY29uLWFkZF8xNngxNlwifSB0aXRsZT17dGhpcy5tb2RlbC50b29sdGlwfT48L1N2Z0ljb24+XG4gICAgICA8L3NwYW4+KVxuICAgICkgOiAoXG4gICAgICA8PlxuICAgICAgICB7XCIgXCJ9XG4gICAgICAgIHt0aGlzLm1vZGVsLmlzRHJhZ2dhYmxlID8gKFxuICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICBjbGFzc05hbWU9XCJzdmMtaXRlbS12YWx1ZS1jb250cm9sc19fYnV0dG9uIHN2Yy1pdGVtLXZhbHVlLWNvbnRyb2xzX19kcmFnXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8U3ZnSWNvbiBjbGFzc05hbWU9XCJzdmMtaXRlbS12YWx1ZS1jb250cm9sc19fZHJhZy1pY29uXCIgc2l6ZT17MjR9IGljb25OYW1lPXtcImljb24tZHJhZy1hcmVhLWluZGljYXRvclwifSB0aXRsZT17dGhpcy5tb2RlbC5kcmFnVG9vbHRpcH0+PC9TdmdJY29uPlxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgKSA6IG51bGx9XG4gICAgICAgIHt0aGlzLm1vZGVsLmFsbG93UmVtb3ZlID8gYXR0YWNoS2V5MmNsaWNrKDxzcGFuXG4gICAgICAgICAgY2xhc3NOYW1lPVwic3ZjLWl0ZW0tdmFsdWUtY29udHJvbHNfX2J1dHRvbiBzdmMtaXRlbS12YWx1ZS1jb250cm9sc19fcmVtb3ZlXCJcbiAgICAgICAgICBhcmlhLWxhYmVsPXt0aGlzLm1vZGVsLnRvb2x0aXB9XG4gICAgICAgICAgb25DbGljaz17KCkgPT4gdGhpcy5tb2RlbC5yZW1vdmUodGhpcy5tb2RlbCl9XG4gICAgICAgID5cbiAgICAgICAgICA8U3ZnSWNvbiBzaXplPXsxNn0gaWNvbk5hbWU9e1wiaWNvbi1yZW1vdmVfMTZ4MTZcIn0gdGl0bGU9e3RoaXMubW9kZWwudG9vbHRpcH0+PC9TdmdJY29uPlxuICAgICAgICA8L3NwYW4+KSA6IG51bGx9XG4gICAgICA8Lz5cbiAgICApO1xuXG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3NOYW1lPXtcbiAgICAgICAgICBcInN2Yy1pdGVtLXZhbHVlLXdyYXBwZXJcIiArXG4gICAgICAgICAgKHRoaXMubW9kZWwuYWxsb3dBZGQgPyBcIiBzdmMtaXRlbS12YWx1ZS0tbmV3XCIgOiBcIlwiKSArXG4gICAgICAgICAgKHRoaXMubW9kZWwuaXNEcmFnZ2luZyA/IFwiIHN2Yy1pdGVtLXZhbHVlLS1kcmFnZ2luZ1wiIDogXCJcIikgK1xuICAgICAgICAgICh0aGlzLm1vZGVsLmlzRHJhZ0Ryb3BHaG9zdCA/IFwiIHN2Yy1pdGVtLXZhbHVlLS1naG9zdFwiIDogXCJcIikgK1xuICAgICAgICAgICh0aGlzLm1vZGVsLmlzRHJhZ0Ryb3BNb3ZlRG93biA/IFwiIHN2Yy1pdGVtLXZhbHVlLS1tb3ZlZG93blwiIDogXCJcIikgK1xuICAgICAgICAgICh0aGlzLm1vZGVsLmlzRHJhZ0Ryb3BNb3ZlVXAgPyBcIiBzdmMtaXRlbS12YWx1ZS0tbW92ZXVwXCIgOiBcIlwiKVxuICAgICAgICB9XG4gICAgICAgIGtleT17dGhpcy5wcm9wcy5lbGVtZW50LmtleX1cbiAgICAgICAgZGF0YS1zdi1kcm9wLXRhcmdldC1pdGVtLXZhbHVlPXtcbiAgICAgICAgICB0aGlzLm1vZGVsLmlzRHJhZ2dhYmxlID8gdGhpcy5tb2RlbC5pdGVtLnZhbHVlIDogdW5kZWZpbmVkXG4gICAgICAgIH1cbiAgICAgICAgb25Qb2ludGVyRG93bj17KGV2ZW50OiBhbnkpID0+IHRoaXMubW9kZWwub25Qb2ludGVyRG93bihldmVudCl9XG4gICAgICA+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3ZjLWl0ZW0tdmFsdWVfX2dob3N0XCI+PC9kaXY+XG5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmMtaXRlbS12YWx1ZS1jb250cm9sc1wiIG9uQmx1cj17dGhpcy5vbkJsdXJ9PntidXR0b259PC9kaXY+XG5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e1wic3ZjLWl0ZW0tdmFsdWVfX2l0ZW1cIn0gb25DbGljaz17KGV2ZW50KSA9PiB0aGlzLm1vZGVsLnNlbGVjdCh0aGlzLm1vZGVsLCBldmVudCl9Pnt0aGlzLnByb3BzLmVsZW1lbnR9PC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG59XG5cblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFxuICBcInN2Yy1pdGVtLXZhbHVlXCIsXG4gIChwcm9wczogSXRlbVZhbHVlQWRvcm5lckNvbXBvbmVudFByb3BzKSA9PiB7XG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoSXRlbVZhbHVlQWRvcm5lckNvbXBvbmVudCwgcHJvcHMpO1xuICB9XG4pO1xuIiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgQmFzZSwgU3VydmV5TW9kZWwgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFJlYWN0RWxlbWVudEZhY3RvcnksIExvZ29JbWFnZSwgU3ZnSWNvbiwgYXR0YWNoS2V5MmNsaWNrIH0gZnJvbSBcInN1cnZleS1yZWFjdC11aVwiO1xuaW1wb3J0IHsgQ3JlYXRvckJhc2UsIExvZ29JbWFnZVZpZXdNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY3JlYXRvci1jb3JlXCI7XG5pbXBvcnQgeyBDcmVhdG9yTW9kZWxFbGVtZW50IH0gZnJvbSBcIi4vTW9kZWxFbGVtZW50XCI7XG5cbmludGVyZmFjZSBJTG9nb0ltYWdlQ29tcG9uZW50UHJvcHMge1xuICBkYXRhOiBDcmVhdG9yQmFzZTtcbn1cblxuZXhwb3J0IGNsYXNzIExvZ29JbWFnZUNvbXBvbmVudCBleHRlbmRzIENyZWF0b3JNb2RlbEVsZW1lbnQ8SUxvZ29JbWFnZUNvbXBvbmVudFByb3BzLCBhbnk+IHtcbiAgcHJpdmF0ZSBtb2RlbDogTG9nb0ltYWdlVmlld01vZGVsO1xuICBwcml2YXRlIHJvb3RSZWY6IFJlYWN0LlJlZk9iamVjdDxIVE1MRGl2RWxlbWVudD47XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBJTG9nb0ltYWdlQ29tcG9uZW50UHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgdGhpcy5yb290UmVmID0gUmVhY3QuY3JlYXRlUmVmKCk7XG4gIH1cbiAgcHJvdGVjdGVkIGNyZWF0ZU1vZGVsKCk6IHZvaWQge1xuICAgIHRoaXMubW9kZWwgPSBuZXcgTG9nb0ltYWdlVmlld01vZGVsKHRoaXMucHJvcHMuZGF0YSwgbnVsbCk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldFVwZGF0ZWRNb2RlbFByb3BzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gW1wiZGF0YVwiXTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0U3RhdGVFbGVtZW50KCk6IEJhc2Uge1xuICAgIHJldHVybiB0aGlzLm1vZGVsO1xuICB9XG4gIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIHN1cGVyLmNvbXBvbmVudERpZE1vdW50KCk7XG4gICAgdGhpcy5tb2RlbC5yb290ID0gdGhpcy5yb290UmVmLmN1cnJlbnQ7XG4gIH1cbiAgcmVuZGVyKCk6IEpTWC5FbGVtZW50IHtcbiAgICBsZXQgY29udGVudDogSlNYLkVsZW1lbnQgPSBudWxsO1xuICAgIGlmICh0aGlzLm1vZGVsLnN1cnZleS5sb2NMb2dvLnJlbmRlcmVkSHRtbCkge1xuICAgICAgY29udGVudCA9IGF0dGFjaEtleTJjbGljayg8ZGl2IGNsYXNzTmFtZT17IHRoaXMubW9kZWwuY29udGFpbmVyQ3NzIH0gb25DbGljaz17KCkgPT4gdGhpcy5tb2RlbC5jaG9vc2VGaWxlKHRoaXMubW9kZWwpfT5cbiAgICAgICAgPExvZ29JbWFnZSBkYXRhPXt0aGlzLnByb3BzLmRhdGEuc3VydmV5fT48L0xvZ29JbWFnZT5cbiAgICAgIDwvZGl2Pik7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgY29udGVudCA9IHRoaXMubW9kZWwuYWxsb3dFZGl0ID8gYXR0YWNoS2V5MmNsaWNrKDxkaXYgY2xhc3NOYW1lPVwic3ZjLWxvZ28taW1hZ2UtcGxhY2Vob2xkZXJcIiBvbkNsaWNrPXsoKSA9PiB0aGlzLm1vZGVsLmNob29zZUZpbGUodGhpcy5tb2RlbCl9Pjxzdmc+PHVzZSB4bGlua0hyZWY9XCIjaWNvbi1sb2dvXCI+PC91c2U+PC9zdmc+PC9kaXY+KSA6IG51bGw7XG4gICAgfVxuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IHJlZj17dGhpcy5yb290UmVmfSBjbGFzc05hbWU9XCJzdmMtbG9nby1pbWFnZVwiPlxuICAgICAgICA8aW5wdXQgYXJpYS1oaWRkZW49XCJ0cnVlXCIgdHlwZT1cImZpbGVcIiB0YWJJbmRleD17LTF9IGFjY2VwdD1cImltYWdlLypcIiBjbGFzc05hbWU9XCJzdmMtY2hvb3NlLWZpbGUtaW5wdXRcIiAvPlxuICAgICAgICB7Y29udGVudH1cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbn1cblxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXCJzdmMtbG9nby1pbWFnZVwiLFxuICAocHJvcHM6IElMb2dvSW1hZ2VDb21wb25lbnRQcm9wcykgPT4ge1xuICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KExvZ29JbWFnZUNvbXBvbmVudCwgcHJvcHMpO1xuICB9XG4pOyIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFF1ZXN0aW9uU2VsZWN0QmFzZSwgQmFzZSwgSXRlbVZhbHVlLCBTdXJ2ZXlNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgTWF0cml4Q2VsbFdyYXBwZXJWaWV3TW9kZWwsIHRvZ2dsZUhvdmVyZWQgfSBmcm9tIFwic3VydmV5LWNyZWF0b3ItY29yZVwiO1xuaW1wb3J0IHtcbiAgYXR0YWNoS2V5MmNsaWNrLFxuICBSZWFjdEVsZW1lbnRGYWN0b3J5LFxuICBTdmdJY29uXG59IGZyb20gXCJzdXJ2ZXktcmVhY3QtdWlcIjtcbmltcG9ydCB7IENyZWF0b3JNb2RlbEVsZW1lbnQgfSBmcm9tIFwiLi9Nb2RlbEVsZW1lbnRcIjtcblxuaW50ZXJmYWNlIE1hdHJpeENlbGxBZG9ybmVyQ29tcG9uZW50UHJvcHMge1xuICBlbGVtZW50OiBKU1guRWxlbWVudDtcbiAgY29tcG9uZW50RGF0YTogYW55O1xuICBxdWVzdGlvbjogUXVlc3Rpb25TZWxlY3RCYXNlO1xuICBjZWxsOiBhbnk7XG59XG5cbmV4cG9ydCBjbGFzcyBNYXRyaXhDZWxsQWRvcm5lckNvbXBvbmVudCBleHRlbmRzIENyZWF0b3JNb2RlbEVsZW1lbnQ8XG4gIE1hdHJpeENlbGxBZG9ybmVyQ29tcG9uZW50UHJvcHMsXG4gIGFueVxuPiB7XG4gIG1vZGVsOiBNYXRyaXhDZWxsV3JhcHBlclZpZXdNb2RlbDtcbiAgcHJvdGVjdGVkIGNyZWF0ZU1vZGVsKCk6IHZvaWQge1xuICAgIGNvbnN0IGRhdGEgPSB0aGlzLnByb3BzLmNvbXBvbmVudERhdGE7XG4gICAgdGhpcy5tb2RlbCA9IG5ldyBNYXRyaXhDZWxsV3JhcHBlclZpZXdNb2RlbChcbiAgICAgIGRhdGEuY3JlYXRvcixcbiAgICAgIGRhdGEuZWxlbWVudCxcbiAgICAgIGRhdGEucXVlc3Rpb24sXG4gICAgICBkYXRhLnJvdyxcbiAgICAgIGRhdGEuY29sdW1uLFxuICAgICk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldFVwZGF0ZWRNb2RlbFByb3BzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gW1wiY29tcG9uZW50RGF0YVwiXTtcbiAgfVxuICBjb21wb25lbnREaWRVcGRhdGUocHJldlByb3BzOiBhbnksIHByZXZTdGF0ZTogYW55KSB7XG4gICAgc3VwZXIuY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wcywgcHJldlN0YXRlKTtcbiAgICBjb25zdCBkYXRhID0gdGhpcy5wcm9wcy5jb21wb25lbnREYXRhO1xuICAgIHRoaXMubW9kZWwudGVtcGxhdGVEYXRhID0gZGF0YS5lbGVtZW50O1xuICAgIHRoaXMubW9kZWwucm93ID0gZGF0YS5yb3c7XG4gICAgdGhpcy5tb2RlbC5jb2x1bW4gPSBkYXRhLmNvbHVtbjtcbiAgICB0aGlzLm1vZGVsLnF1ZXN0aW9uID0gZGF0YS5xdWVzdGlvbjtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0U3RhdGVFbGVtZW50KCk6IEJhc2Uge1xuICAgIHJldHVybiB0aGlzLm1vZGVsO1xuICB9XG5cbiAgcmVuZGVyKCk6IEpTWC5FbGVtZW50IHtcbiAgICBsZXQgY29udHJvbHMgPSBudWxsO1xuICAgIGlmICghIXRoaXMubW9kZWwucXVlc3Rpb24pIHtcbiAgICAgIGNvbnRyb2xzID0gPGRpdiBjbGFzc05hbWU9XCJzdmMtbWF0cml4LWNlbGxfX3F1ZXN0aW9uLWNvbnRyb2xzXCI+XG4gICAgICAgIHthdHRhY2hLZXkyY2xpY2soPHNwYW4gY2xhc3NOYW1lPVwic3ZjLW1hdHJpeC1jZWxsX19xdWVzdGlvbi1jb250cm9scy1idXR0b25cIiBvbkNsaWNrPXsoKSA9PiB0aGlzLm1vZGVsLmVkaXRRdWVzdGlvbih0aGlzLm1vZGVsKX0+XG4gICAgICAgICAgPFN2Z0ljb24gc2l6ZT17MjR9IGljb25OYW1lPXtcImljb24tZWRpdFwifT48L1N2Z0ljb24+XG4gICAgICAgIDwvc3Bhbj4pfVxuICAgICAgPC9kaXY+O1xuICAgIH1cblxuICAgIHJldHVybiAoXG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzTmFtZT17XCJzdmMtbWF0cml4LWNlbGxcIn1cbiAgICAgICAgdGFiSW5kZXg9ey0xfVxuICAgICAgICBrZXk9e3RoaXMucHJvcHMuZWxlbWVudC5rZXl9XG4gICAgICAgIG9uQ2xpY2s9eyhlOiBhbnkpID0+ICF0aGlzLnByb3BzLnF1ZXN0aW9uICYmIHRoaXMubW9kZWwuc2VsZWN0Q29udGV4dCh0aGlzLm1vZGVsLCBlKX1cbiAgICAgICAgb25Nb3VzZU91dD17ZSA9PiB0aGlzLm1vZGVsLmhvdmVyKGUubmF0aXZlRXZlbnQsIGUuY3VycmVudFRhcmdldCl9XG4gICAgICAgIG9uTW91c2VPdmVyPXtlID0+IHRoaXMubW9kZWwuaG92ZXIoZS5uYXRpdmVFdmVudCwgZS5jdXJyZW50VGFyZ2V0KX1cbiAgICAgID5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e1wic3ZjLW1hdHJpeC1jZWxsLS1zZWxlY3RlZFwiICsgKHRoaXMubW9kZWwuaXNTZWxlY3RlZCA/IFwiIHN2Yy12aXNpYmxlXCIgOiBcIlwiKX0+PC9kaXY+XG5cbiAgICAgICAge3RoaXMucHJvcHMuZWxlbWVudH1cblxuICAgICAgICB7Y29udHJvbHN9XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG59XG5cblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFxuICBcInN2Yy1tYXRyaXgtY2VsbFwiLFxuICAocHJvcHM6IE1hdHJpeENlbGxBZG9ybmVyQ29tcG9uZW50UHJvcHMpID0+IHtcbiAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChNYXRyaXhDZWxsQWRvcm5lckNvbXBvbmVudCwgcHJvcHMpO1xuICB9XG4pO1xuIiwiaW1wb3J0IHsgU3VydmV5RWxlbWVudEJhc2UgfSBmcm9tIFwic3VydmV5LXJlYWN0LXVpXCI7XG5cbmV4cG9ydCBjbGFzcyBDcmVhdG9yTW9kZWxFbGVtZW50PFAsIFM+IGV4dGVuZHMgU3VydmV5RWxlbWVudEJhc2U8UCwgUz4ge1xuICBjb25zdHJ1Y3Rvcihwcm9wczogUCkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLmNyZWF0ZU1vZGVsKCk7XG4gIH1cbiAgY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wczogYW55LCBwcmV2U3RhdGU6IGFueSk6IHZvaWQge1xuICAgIHN1cGVyLmNvbXBvbmVudERpZFVwZGF0ZShwcmV2UHJvcHMsIHByZXZTdGF0ZSk7XG4gICAgaWYodGhpcy5uZWVkVXBkYXRlTW9kZWwocHJldlByb3BzKSkge1xuICAgICAgdGhpcy5jcmVhdGVNb2RlbCgpO1xuICAgIH1cbiAgfVxuICBwcm90ZWN0ZWQgY3JlYXRlTW9kZWwoKTogdm9pZCB7fVxuICBwcm90ZWN0ZWQgbmVlZFVwZGF0ZU1vZGVsKHByZXZQcm9wczogYW55KTogYm9vbGVhbiB7XG4gICAgY29uc3QgbmFtZXMgPSB0aGlzLmdldFVwZGF0ZWRNb2RlbFByb3BzKCk7XG4gICAgaWYoIUFycmF5LmlzQXJyYXkobmFtZXMpKSByZXR1cm4gdHJ1ZTtcbiAgICBmb3IodmFyIGkgPSAwOyBpIDwgbmFtZXMubGVuZ3RoOyBpICsrKSB7XG4gICAgICBjb25zdCBrZXkgPSBuYW1lc1tpXTtcbiAgICAgIGlmKHRoaXMucHJvcHNba2V5XSAhPT0gcHJldlByb3BzW2tleV0pIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcHJvdGVjdGVkIGdldFVwZGF0ZWRNb2RlbFByb3BzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG59IiwiaW1wb3J0IHsgU3VydmV5TW9kZWwgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFJlYWN0RWxlbWVudEZhY3RvcnksIFN1cnZleUVsZW1lbnRCYXNlIH0gZnJvbSBcInN1cnZleS1yZWFjdC11aVwiO1xuXG5leHBvcnQgY2xhc3MgU3VydmV5TmF2aWdhdGlvbiBleHRlbmRzIFN1cnZleUVsZW1lbnRCYXNlPGFueSwgYW55PiB7XG4gIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIHN1cGVyLmNvbXBvbmVudERpZE1vdW50KCk7XG4gICAgdGhpcy5zZXRIYW5kbGVyKCk7XG4gIH1cbiAgY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wczogYW55LCBwcmV2U3RhdGU6IGFueSkge1xuICAgIHN1cGVyLmNvbXBvbmVudERpZFVwZGF0ZShwcmV2UHJvcHMsIHByZXZTdGF0ZSk7XG4gICAgdGhpcy5zZXRIYW5kbGVyKCk7XG4gIH1cbiAgcHJpdmF0ZSBzZXRIYW5kbGVyKCkge1xuICAgIGlmIChcbiAgICAgICF0aGlzLnN1cnZleSB8fFxuICAgICAgICB0aGlzLnN1cnZleS5vblByb3BlcnR5Q2hhbmdlZC5oYXNGdW5jKHRoaXMub25Qcm9wQ2hhbmdlZEhhbmRsZXIpXG4gICAgKVxuICAgICAgcmV0dXJuO1xuICAgIHRoaXMuc3VydmV5Lm9uUHJvcGVydHlDaGFuZ2VkLmFkZCh0aGlzLm9uUHJvcENoYW5nZWRIYW5kbGVyKTtcbiAgfVxuICAgIHByaXZhdGUgb25Qcm9wQ2hhbmdlZEhhbmRsZXIgPSAoc2VuZGVyOiBhbnksIG9wdGlvbnM6IGFueSk6IGFueSA9PiB7XG4gICAgICBpZiAodGhpcy5pc1JlbmRlcmluZykgcmV0dXJuO1xuICAgICAgY29uc3QgcmVhY3RpdmVQcm9wcyA9IFtcbiAgICAgICAgXCJzaG93UHJvZ3Jlc3NCYXJcIixcbiAgICAgICAgXCJwcm9ncmVzc0JhclR5cGVcIixcbiAgICAgICAgXCJjdXJyZW50UGFnZVZhbHVlXCJcbiAgICAgIF07XG4gICAgICBpZiAocmVhY3RpdmVQcm9wcy5pbmRleE9mKG9wdGlvbnMubmFtZSkgPCAwKSByZXR1cm47XG4gICAgICB2YXIgdmFsOiBhbnkgPSB7fTtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmVhY3RpdmVQcm9wcy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgcHJvcE5hbWUgPSByZWFjdGl2ZVByb3BzW2ldO1xuICAgICAgICB2YWxbcHJvcE5hbWVdID0gdGhpcy5zdXJ2ZXlbcHJvcE5hbWVdO1xuICAgICAgfVxuICAgICAgdGhpcy5zZXRTdGF0ZSh2YWwpO1xuICAgIH07XG4gICAgY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgICBzdXBlci5jb21wb25lbnRXaWxsVW5tb3VudCgpO1xuICAgICAgaWYgKHRoaXMuc3VydmV5KSB7XG4gICAgICAgIHRoaXMuc3VydmV5Lm9uUHJvcGVydHlDaGFuZ2VkLnJlbW92ZSh0aGlzLm9uUHJvcENoYW5nZWRIYW5kbGVyKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgZ2V0IHN1cnZleSgpOiBTdXJ2ZXlNb2RlbCB7XG4gICAgICByZXR1cm4gdGhpcy5wcm9wcy5zdXJ2ZXk7XG4gICAgfVxuICAgIHByb3RlY3RlZCBnZXQgbG9jYXRpb24oKTogc3RyaW5nIHtcbiAgICAgIHJldHVybiB0aGlzLnByb3BzLmxvY2F0aW9uO1xuICAgIH1cbiAgICBwcm90ZWN0ZWQgZ2V0IGlzVG9wKCk6IGJvb2xlYW4ge1xuICAgICAgcmV0dXJuIHRoaXMubG9jYXRpb24gPT0gXCJ0b3BcIjtcbiAgICB9XG4gICAgcHJvdGVjdGVkIGNhblJlbmRlcigpOiBib29sZWFuIHtcbiAgICAgIHJldHVybiB0aGlzLmlzVG9wXG4gICAgICAgID8gdGhpcy5zdXJ2ZXkuaXNTaG93UHJvZ3Jlc3NCYXJPblRvcFxuICAgICAgICA6IHRoaXMuc3VydmV5LmlzU2hvd1Byb2dyZXNzQmFyT25Cb3R0b207XG4gICAgfVxuICAgIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgICAgcmV0dXJuIFJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UuY3JlYXRlRWxlbWVudChcbiAgICAgICAgXCJzdi1wcm9ncmVzcy1cIiArIHRoaXMuc3VydmV5LnByb2dyZXNzQmFyVHlwZS50b0xvd2VyQ2FzZSgpLFxuICAgICAgICB7IHN1cnZleTogdGhpcy5zdXJ2ZXksIGNzczogdGhpcy5zdXJ2ZXkuY3NzLCBpc1RvcDogdGhpcy5pc1RvcCB9XG4gICAgICApO1xuICAgIH1cbn1cbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IEJhc2UsIFN1cnZleU1vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBTdXJ2ZXlFbGVtZW50QmFzZSwgfSBmcm9tIFwic3VydmV5LXJlYWN0LXVpXCI7XG5pbXBvcnQgeyBDcmVhdG9yQmFzZSwgTm90aWZpZXIgfSBmcm9tIFwic3VydmV5LWNyZWF0b3ItY29yZVwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIE5vdGlmaWVyQ29tcG9uZW50UHJvcHMge1xuICBjcmVhdG9yOiBDcmVhdG9yQmFzZTtcbiAgbm90aWZpZXI6IE5vdGlmaWVyO1xufVxuXG5leHBvcnQgY2xhc3MgTm90aWZpZXJDb21wb25lbnQgZXh0ZW5kcyBTdXJ2ZXlFbGVtZW50QmFzZTxOb3RpZmllckNvbXBvbmVudFByb3BzLCBhbnk+IHtcbiAgZ2V0IG5vdGlmaWVyKCkge1xuICAgIHJldHVybiB0aGlzLnByb3BzLm5vdGlmaWVyO1xuICB9XG4gIHByb3RlY3RlZCBnZXRTdGF0ZUVsZW1lbnQoKTogQmFzZSB7XG4gICAgcmV0dXJuIHRoaXMubm90aWZpZXI7XG4gIH1cbiAgcmVuZGVyRWxlbWVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgaWYgKCF0aGlzLm5vdGlmaWVyLmFjdGl2ZSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT17dGhpcy5ub3RpZmllci5jc3N9PlxuICAgICAgICA8c3Bhbj57dGhpcy5ub3RpZmllci5tZXNzYWdlfTwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbn1cbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IE9iamVjdFNlbGVjdG9yTW9kZWwgfSBmcm9tIFwic3VydmV5LWNyZWF0b3ItY29yZVwiO1xuaW1wb3J0IHsgQmFzZSB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgUmVhY3RFbGVtZW50RmFjdG9yeSwgU3VydmV5RWxlbWVudEJhc2UsIExpc3QgfSBmcm9tIFwic3VydmV5LXJlYWN0LXVpXCI7XG5cbmludGVyZmFjZSBJT2JqZWN0U2VsZWN0b3JDb21wb25lbnRQcm9wcyB7XG4gIG1vZGVsOiBPYmplY3RTZWxlY3Rvck1vZGVsO1xufVxuY2xhc3MgT2JqZWN0U2VsZWN0b3JDb21wb25lbnQgZXh0ZW5kcyBTdXJ2ZXlFbGVtZW50QmFzZTxJT2JqZWN0U2VsZWN0b3JDb21wb25lbnRQcm9wcywgYW55PiB7XG4gIHByb3RlY3RlZCBnZXQgbW9kZWwoKTogT2JqZWN0U2VsZWN0b3JNb2RlbCB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMubW9kZWw7XG4gIH1cbiAgcHJvdGVjdGVkIGdldFN0YXRlRWxlbWVudCgpOiBCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5tb2RlbDtcbiAgfVxuICByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICBpZiAoIXRoaXMubW9kZWwuaXNWaXNpYmxlKSByZXR1cm4gbnVsbDtcblxuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2Yy1vYmplY3Qtc2VsZWN0b3JcIj5cbiAgICAgICAgPExpc3QgbW9kZWw9e3RoaXMubW9kZWwubGlzdH0+PC9MaXN0PlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxufVxuXG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcInN2Yy1vYmplY3Qtc2VsZWN0b3JcIiwgKHByb3BzKSA9PiB7XG4gIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFxuICAgIE9iamVjdFNlbGVjdG9yQ29tcG9uZW50LFxuICAgIHByb3BzIGFzIElPYmplY3RTZWxlY3RvckNvbXBvbmVudFByb3BzXG4gICk7XG59KTtcbiIsImltcG9ydCB7XG4gIEJhc2UsXG4gIElBY3Rpb24sXG4gIHVud3JhcFxufSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7XG4gIFN2Z0ljb24sXG4gIFBvcHVwLFxuICBhdHRhY2hLZXkyY2xpY2tcbn0gZnJvbSBcInN1cnZleS1yZWFjdC11aVwiO1xuaW1wb3J0IHsgUGFnZU5hdmlnYXRvclZpZXdNb2RlbCwgUGFnZXNDb250cm9sbGVyIH0gZnJvbSBcInN1cnZleS1jcmVhdG9yLWNvcmVcIjtcbmltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IENyZWF0b3JNb2RlbEVsZW1lbnQgfSBmcm9tIFwiLi9Nb2RlbEVsZW1lbnRcIjtcblxuaW50ZXJmYWNlIElTdXJ2ZXlQYWdlTmF2aWdhdG9yUHJvcHMge1xuICBwYWdlc0NvbnRyb2xsZXI6IFBhZ2VzQ29udHJvbGxlcjtcbiAgcGFnZUVkaXRNb2RlOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlQYWdlTmF2aWdhdG9yIGV4dGVuZHMgQ3JlYXRvck1vZGVsRWxlbWVudDxcbiAgSVN1cnZleVBhZ2VOYXZpZ2F0b3JQcm9wcyxcbiAgYW55XG4+IHtcbiAgcHJpdmF0ZSBtb2RlbDogUGFnZU5hdmlnYXRvclZpZXdNb2RlbDtcbiAgcHJpdmF0ZSBjb250YWluZXJSZWY6IFJlYWN0LlJlZk9iamVjdDxIVE1MRGl2RWxlbWVudD47XG5cbiAgY29uc3RydWN0b3IocHJvcHM6IElTdXJ2ZXlQYWdlTmF2aWdhdG9yUHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgdGhpcy5jb250YWluZXJSZWYgPSBSZWFjdC5jcmVhdGVSZWYoKTtcbiAgfVxuICBwcm90ZWN0ZWQgY3JlYXRlTW9kZWwoKTogdm9pZCB7XG4gICAgdGhpcy5tb2RlbCA9IG5ldyBQYWdlTmF2aWdhdG9yVmlld01vZGVsKFxuICAgICAgdGhpcy5wcm9wcy5wYWdlc0NvbnRyb2xsZXIsXG4gICAgICB0aGlzLnByb3BzLnBhZ2VFZGl0TW9kZVxuICAgICk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldFVwZGF0ZWRNb2RlbFByb3BzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gW1wicGFnZXNDb250cm9sbGVyXCIsIFwicGFnZUVkaXRNb2RlXCJdO1xuICB9XG4gIHByb3RlY3RlZCBnZXRTdGF0ZUVsZW1lbnQoKTogQmFzZSB7XG4gICAgcmV0dXJuIHRoaXMubW9kZWw7XG4gIH1cbiAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgc3VwZXIuY29tcG9uZW50RGlkTW91bnQoKTtcbiAgICBpZiAodGhpcy5wcm9wcy5wYWdlRWRpdE1vZGUgIT09IFwiYnlwYWdlXCIpIHtcbiAgICAgIGNvbnN0IGVsID0gdGhpcy5jb250YWluZXJSZWYuY3VycmVudCBhcyBIVE1MRGl2RWxlbWVudDtcbiAgICAgIGlmICghIWVsKSB7XG4gICAgICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAgICAgICBlbC5wYXJlbnRFbGVtZW50LnBhcmVudEVsZW1lbnQucGFyZW50RWxlbWVudC5vbnNjcm9sbCA9IGZ1bmN0aW9uICh0aGlzOiBHbG9iYWxFdmVudEhhbmRsZXJzLCBldjogRXZlbnQpIHtcbiAgICAgICAgICByZXR1cm4gc2VsZi5tb2RlbC5vbkNvbnRhaW5lclNjcm9sbChldi5jdXJyZW50VGFyZ2V0IGFzIEhUTUxEaXZFbGVtZW50KTtcbiAgICAgICAgfTtcbiAgICAgICAgc2VsZi5tb2RlbC5zZXRJdGVtc0NvbnRhaW5lcihlbC5wYXJlbnRFbGVtZW50KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgc3VwZXIuY29tcG9uZW50V2lsbFVubW91bnQoKTtcbiAgICBjb25zdCBlbCA9IHRoaXMuY29udGFpbmVyUmVmLmN1cnJlbnQ7XG4gICAgaWYgKCEhZWwpIHtcbiAgICAgIGVsLnBhcmVudEVsZW1lbnQucGFyZW50RWxlbWVudC5wYXJlbnRFbGVtZW50Lm9uc2Nyb2xsID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy5tb2RlbC5zdG9wSXRlbXNDb250YWluZXJIZWlnaHRPYnNlcnZlcigpO1xuICAgIH1cbiAgICB0aGlzLm1vZGVsLmRpc3Bvc2UoKTtcbiAgfVxuICByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICBsZXQgY2xhc3NOYW1lID0gXCJzdmMtcGFnZS1uYXZpZ2F0b3JfX3NlbGVjdG9yXCI7XG4gICAgaWYgKHRoaXMubW9kZWwuaXNQb3B1cE9wZW5lZClcbiAgICAgIGNsYXNzTmFtZSArPSBcIiBzdmMtcGFnZS1uYXZpZ2F0b3JfX3NlbGVjdG9yLS1vcGVuZWRcIjtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmMtcGFnZS1uYXZpZ2F0b3JcIiByZWY9e3RoaXMuY29udGFpbmVyUmVmfSBzdHlsZT17eyBkaXNwbGF5OiB0aGlzLm1vZGVsLnZpc2libGUgPyBcImZsZXhcIiA6IFwibm9uZVwiIH19PlxuICAgICAgICB7YXR0YWNoS2V5MmNsaWNrKDxkaXZcbiAgICAgICAgICBjbGFzc05hbWU9e2NsYXNzTmFtZX1cbiAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB0aGlzLm1vZGVsLnRvZ2dsZVBhZ2VTZWxlY3RvcigpfVxuICAgICAgICAgIHRpdGxlPXt0aGlzLm1vZGVsLnBhZ2VTZWxlY3RvckNhcHRpb259XG4gICAgICAgID5cbiAgICAgICAgICA8U3ZnSWNvblxuICAgICAgICAgICAgY2xhc3NOYW1lPVwic3ZjLXBhZ2UtbmF2aWdhdG9yX19uYXZpZ2F0b3ItaWNvblwiXG4gICAgICAgICAgICBpY29uTmFtZT17dGhpcy5tb2RlbC5pY29ufVxuICAgICAgICAgICAgc2l6ZT17MjR9XG4gICAgICAgICAgICB0aXRsZT17dGhpcy5tb2RlbC5wYWdlU2VsZWN0b3JDYXB0aW9ufVxuICAgICAgICAgID48L1N2Z0ljb24+XG5cbiAgICAgICAgICA8UG9wdXBcbiAgICAgICAgICAgIG1vZGVsPXt0aGlzLm1vZGVsLnBvcHVwTW9kZWx9XG4gICAgICAgICAgLy9jbGFzc05hbWU9XCJzdmMtcGFnZS1uYXZpZ2F0b3JfX3BvcHVwXCJcbiAgICAgICAgICA+PC9Qb3B1cD5cbiAgICAgICAgPC9kaXY+KX1cbiAgICAgICAgPGRpdj5cbiAgICAgICAgICB7dGhpcy5tb2RlbC52aXNpYmxlSXRlbXMubWFwKChpdGVtKSA9PiAoXG4gICAgICAgICAgICA8U3VydmV5UGFnZU5hdmlnYXRvckl0ZW1cbiAgICAgICAgICAgICAga2V5PXtpdGVtLmlkfVxuICAgICAgICAgICAgICBpdGVtPXtpdGVtfVxuICAgICAgICAgICAgPjwvU3VydmV5UGFnZU5hdmlnYXRvckl0ZW0+XG4gICAgICAgICAgKSl9XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxufVxuZXhwb3J0IGNsYXNzIFN1cnZleVBhZ2VOYXZpZ2F0b3JJdGVtIGV4dGVuZHMgQ3JlYXRvck1vZGVsRWxlbWVudDxhbnksIGFueT4ge1xuICBwcm90ZWN0ZWQgZ2V0U3RhdGVFbGVtZW50KCk6IEJhc2Uge1xuICAgIHJldHVybiB0aGlzLnByb3BzLml0ZW0gYXMgQmFzZTtcbiAgfVxuICByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICBjb25zdCBpdGVtID0gdGhpcy5wcm9wcy5pdGVtO1xuICAgIGxldCBjbGFzc05hbWU6IHN0cmluZyA9IFwic3ZjLXBhZ2UtbmF2aWdhdG9yLWl0ZW0tY29udGVudFwiO1xuICAgIGlmICh1bndyYXAoaXRlbS5hY3RpdmUpKSB7XG4gICAgICBjbGFzc05hbWUgKz0gXCIgc3ZjLXBhZ2UtbmF2aWdhdG9yLWl0ZW0tLXNlbGVjdGVkXCI7XG4gICAgfVxuICAgIGlmICh1bndyYXAoaXRlbS5kaXNhYmxlZCkpIHtcbiAgICAgIGNsYXNzTmFtZSArPSBcIiBzdmMtcGFnZS1uYXZpZ2F0b3ItaXRlbS0tZGlzYWJsZWRcIjtcbiAgICB9XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3ZjLXBhZ2UtbmF2aWdhdG9yLWl0ZW1cIj5cbiAgICAgICAge2F0dGFjaEtleTJjbGljayg8ZGl2XG4gICAgICAgICAgY2xhc3NOYW1lPXtjbGFzc05hbWV9XG4gICAgICAgICAgb25DbGljaz17KGUpID0+IHtcbiAgICAgICAgICAgIGl0ZW0uYWN0aW9uKGl0ZW0pO1xuICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICB9fVxuICAgICAgICA+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmMtcGFnZS1uYXZpZ2F0b3ItaXRlbV9fZG90XCIgdGl0bGU9e2l0ZW0udGl0bGV9PjwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3ZjLXBhZ2UtbmF2aWdhdG9yLWl0ZW1fX2Jhbm5lciBzdmMtaXRlbV9fYmFubmVyXCI+XG4gICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJzdmMtdGV4dCBzdmMtdGV4dC0tc21hbGwgc3ZjLXRleHQtLWJvbGRcIj57aXRlbS50aXRsZX08L3NwYW4+XG4gICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJzdmMtcGFnZS1uYXZpZ2F0b3ItaXRlbV9fZG90XCI+PC9zcGFuPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj4pfVxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxufVxuIiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgUHJvcGVydHlHcmlkVmlld01vZGVsIH0gZnJvbSBcInN1cnZleS1jcmVhdG9yLWNvcmVcIjtcbmltcG9ydCB7IEJhc2UsIFN1cnZleU1vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBTdXJ2ZXksIFN1cnZleUVsZW1lbnRCYXNlLCBSZWFjdFF1ZXN0aW9uRmFjdG9yeSwgU3VydmV5UXVlc3Rpb25CdXR0b25Hcm91cCwgUmVhY3RFbGVtZW50RmFjdG9yeSB9IGZyb20gXCJzdXJ2ZXktcmVhY3QtdWlcIjtcblxuaW50ZXJmYWNlIElQcm9wZXJ0eUdyaWRDb21wb25lbnRQcm9wcyB7XG4gIG1vZGVsOiBQcm9wZXJ0eUdyaWRWaWV3TW9kZWw7XG59XG5cbmV4cG9ydCBjbGFzcyBQcm9wZXJ0eUdyaWRDb21wb25lbnQgZXh0ZW5kcyBTdXJ2ZXlFbGVtZW50QmFzZTxJUHJvcGVydHlHcmlkQ29tcG9uZW50UHJvcHMsIGFueT4ge1xuXG4gIGdldCBtb2RlbCgpOiBQcm9wZXJ0eUdyaWRWaWV3TW9kZWwge1xuICAgIHJldHVybiB0aGlzLnByb3BzLm1vZGVsO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldFN0YXRlRWxlbWVudCgpOiBCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5tb2RlbDtcbiAgfVxuXG4gIHB1YmxpYyBjYW5SZW5kZXIoKTogYm9vbGVhbiB7XG4gICAgaWYgKCF0aGlzLm1vZGVsKSByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuIHN1cGVyLmNhblJlbmRlcigpO1xuICB9XG5cbiAgcmVuZGVyRWxlbWVudCgpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPFN1cnZleSBtb2RlbD17dGhpcy5tb2RlbC5zdXJ2ZXl9PjwvU3VydmV5PlxuICAgICk7XG4gIH1cbn1cblxuUmVhY3RRdWVzdGlvbkZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJRdWVzdGlvbihcImJ1dHRvbmdyb3VwXCIsIChwcm9wcykgPT4ge1xuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTdXJ2ZXlRdWVzdGlvbkJ1dHRvbkdyb3VwLCBwcm9wcyk7XG59KTtcblxuZXhwb3J0IGRlZmF1bHQgUHJvcGVydHlHcmlkQ29tcG9uZW50O1xuXG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcInN2Yy1wcm9wZXJ0eS1ncmlkXCIsIChwcm9wcykgPT4ge1xuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChQcm9wZXJ0eUdyaWRDb21wb25lbnQsIHByb3BzKTtcbn0pO1xuIiwiaW1wb3J0IHsgQmFzZSwgUXVlc3Rpb24sIFN1cnZleUVycm9yLCBTdXJ2ZXlNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgSVN1cnZleUNyZWF0b3IsIFJlYWN0RWxlbWVudEZhY3RvcnksIFJlYWN0UXVlc3Rpb25GYWN0b3J5LCBTdXJ2ZXlRdWVzdGlvbiB9IGZyb20gXCJzdXJ2ZXktcmVhY3QtdWlcIjtcbmltcG9ydCB7IENyZWF0b3JCYXNlIH0gZnJvbSBcInN1cnZleS1jcmVhdG9yLWNvcmVcIjtcbmltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcblxuaW50ZXJmYWNlIElRdWVzdGlvbkVkaXRvckNvbnRlbnRDb21wb25lbnRQcm9wcyB7XG4gIGNyZWF0b3I6IENyZWF0b3JCYXNlO1xuICBzdXJ2ZXk6IFN1cnZleU1vZGVsO1xufVxuXG5leHBvcnQgY2xhc3MgUXVlc3Rpb25FZGl0b3JDb250ZW50Q29tcG9uZW50IGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50PFxuICBJUXVlc3Rpb25FZGl0b3JDb250ZW50Q29tcG9uZW50UHJvcHMsXG4gIGFueVxuPiBpbXBsZW1lbnRzIElTdXJ2ZXlDcmVhdG9yIHtcbiAgZ2V0IHN1cnZleSgpIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5zdXJ2ZXk7XG4gIH1cbiAgcHVibGljIGNyZWF0ZVF1ZXN0aW9uRWxlbWVudChxdWVzdGlvbjogUXVlc3Rpb24pOiBKU1guRWxlbWVudCB7XG4gICAgcmV0dXJuIFJlYWN0UXVlc3Rpb25GYWN0b3J5Lkluc3RhbmNlLmNyZWF0ZVF1ZXN0aW9uKFxuICAgICAgIXF1ZXN0aW9uLmlzRGVmYXVsdFJlbmRlcmluZyB8fCBxdWVzdGlvbi5pc0RlZmF1bHRSZW5kZXJpbmcoKVxuICAgICAgICA/IHF1ZXN0aW9uLmdldFRlbXBsYXRlKClcbiAgICAgICAgOiBxdWVzdGlvbi5nZXRDb21wb25lbnROYW1lKCksXG4gICAgICB7XG4gICAgICAgIHF1ZXN0aW9uOiBxdWVzdGlvbixcbiAgICAgICAgaXNEaXNwbGF5TW9kZTogcXVlc3Rpb24uaXNJbnB1dFJlYWRPbmx5LFxuICAgICAgICBjcmVhdG9yOiB0aGlzLFxuICAgICAgfVxuICAgICk7XG4gIH1cbiAgcHVibGljIHF1ZXN0aW9uVGl0bGVMb2NhdGlvbigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnN1cnZleS5xdWVzdGlvblRpdGxlTG9jYXRpb247XG4gIH1cbiAgcHVibGljIHF1ZXN0aW9uRXJyb3JMb2NhdGlvbigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnN1cnZleS5xdWVzdGlvbkVycm9yTG9jYXRpb247XG4gIH1cbiAgcmVuZGVyRXJyb3Ioa2V5OiBzdHJpbmcsIGVycm9yOiBTdXJ2ZXlFcnJvciwgY3NzQ2xhc3NlczogYW55KTogSlNYLkVsZW1lbnQge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcmVuZGVyKCk6IEpTWC5FbGVtZW50IHtcbiAgICBjb25zdCBxdWVzdGlvbiA9IHRoaXMuc3VydmV5LmdldEFsbFF1ZXN0aW9ucygpWzBdO1xuICAgIHJldHVybiAoXG4gICAgICA8PlxuICAgICAgICA8U3VydmV5UXVlc3Rpb24gY3JlYXRvcj17dGhpc30gZWxlbWVudD17cXVlc3Rpb259PjwvU3VydmV5UXVlc3Rpb24+XG4gICAgICA8Lz5cbiAgICApO1xuICB9XG59XG5cblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFxuICBcInN2Yy1xdWVzdGlvbi1lZGl0b3ItY29udGVudFwiLFxuICAocHJvcHM6IElRdWVzdGlvbkVkaXRvckNvbnRlbnRDb21wb25lbnRQcm9wcykgPT4ge1xuICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFF1ZXN0aW9uRWRpdG9yQ29udGVudENvbXBvbmVudCwgcHJvcHMpO1xuICB9XG4pO1xuIiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgUmVhY3RRdWVzdGlvbkZhY3RvcnksIFN1cnZleVBhZ2UsIElTdXJ2ZXlDcmVhdG9yLCBTdXJ2ZXlRdWVzdGlvbkVsZW1lbnRCYXNlIH0gZnJvbSBcInN1cnZleS1yZWFjdC11aVwiO1xuaW1wb3J0IHsgUXVlc3Rpb25FbWJlZGRlZFN1cnZleU1vZGVsIH0gZnJvbSBcInN1cnZleS1jcmVhdG9yLWNvcmVcIjtcblxuZXhwb3J0IGNsYXNzIFN1cnZleUVsZW1lbnRFbWJlZGRlZFN1cnZleSBleHRlbmRzIFN1cnZleVF1ZXN0aW9uRWxlbWVudEJhc2Uge1xuICBwcm90ZWN0ZWQgZ2V0IGVtYmVkZGVkU3VydmV5KCk6IFF1ZXN0aW9uRW1iZWRkZWRTdXJ2ZXlNb2RlbCB7XG4gICAgcmV0dXJuICh0aGlzLnByb3BzLmVsZW1lbnQgfHwgdGhpcy5wcm9wcy5xdWVzdGlvbikgYXMgUXVlc3Rpb25FbWJlZGRlZFN1cnZleU1vZGVsO1xuICB9XG4gIHByb3RlY3RlZCBnZXQgY3JlYXRvcigpOiBJU3VydmV5Q3JlYXRvciB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuY3JlYXRvcjtcbiAgfVxuICBwdWJsaWMgcmVuZGVyKCk6IEpTWC5FbGVtZW50IHtcbiAgICBpZiAoIXRoaXMuZW1iZWRkZWRTdXJ2ZXkpIHJldHVybiBudWxsO1xuICAgIGNvbnN0IHN1cnZleSA9IHRoaXMuZW1iZWRkZWRTdXJ2ZXkuZW1iZWRkZWRTdXJ2ZXk7XG4gICAgaWYgKCFzdXJ2ZXkgfHwgIXN1cnZleS5jdXJyZW50UGFnZSkgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIDxTdXJ2ZXlQYWdlXG4gICAgICBzdXJ2ZXk9e3N1cnZleX1cbiAgICAgIHBhZ2U9e3N1cnZleS5jdXJyZW50UGFnZX1cbiAgICAgIGNzcz17c3VydmV5LmNzc31cbiAgICAgIGNyZWF0b3I9e3RoaXMuY3JlYXRvcn1cbiAgICAvPjtcblxuICB9XG59XG5cblJlYWN0UXVlc3Rpb25GYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyUXVlc3Rpb24oXCJlbWJlZGRlZHN1cnZleVwiLCAocHJvcHMpID0+IHtcbiAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3VydmV5RWxlbWVudEVtYmVkZGVkU3VydmV5LCBwcm9wcyk7XG59KTtcbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7XG4gIFJlYWN0UXVlc3Rpb25GYWN0b3J5LFxuICBTdXJ2ZXlRdWVzdGlvbkVsZW1lbnRCYXNlXG59IGZyb20gXCJzdXJ2ZXktcmVhY3QtdWlcIjtcbmltcG9ydCB7IGVkaXRvckxvY2FsaXphdGlvbiwgUXVlc3Rpb25MaW5rVmFsdWVNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY3JlYXRvci1jb3JlXCI7XG5pbXBvcnQgeyBBY3Rpb25CdXR0b24gfSBmcm9tIFwiLi9BY3Rpb25CdXR0b25cIjtcblxuZXhwb3J0IGNsYXNzIFN1cnZleVF1ZXN0aW9uTGlua1ZhbHVlIGV4dGVuZHMgU3VydmV5UXVlc3Rpb25FbGVtZW50QmFzZSB7XG4gIHByb3RlY3RlZCBnZXQgcXVlc3Rpb24oKTogUXVlc3Rpb25MaW5rVmFsdWVNb2RlbCB7XG4gICAgcmV0dXJuIHRoaXMucXVlc3Rpb25CYXNlIGFzIFF1ZXN0aW9uTGlua1ZhbHVlTW9kZWw7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckNsZWFyKCk6IEpTWC5FbGVtZW50IHtcbiAgICBjb25zdCBzaG93Q2xlYXIgPSAodGhpcy5xdWVzdGlvbkJhc2UgYXMgYW55KS5zaG93Q2xlYXI7XG4gICAgaWYgKCF0aGlzLnF1ZXN0aW9uQmFzZS5pc1JlYWRPbmx5ICYmIHNob3dDbGVhcikge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPEFjdGlvbkJ1dHRvblxuICAgICAgICAgIGNsYXNzZXM9e3RoaXMucXVlc3Rpb24ubGlua0NsZWFyQnV0dG9uQ3NzQ2xhc3Nlc31cbiAgICAgICAgICBjbGljaz17KCkgPT4gdGhpcy5xdWVzdGlvbi5kb0NsZWFyQ2xpY2soKX1cbiAgICAgICAgICBzZWxlY3RlZD17dGhpcy5xdWVzdGlvbi5pc1NlbGVjdGVkfVxuICAgICAgICAgIHRleHQ9e2VkaXRvckxvY2FsaXphdGlvbi5nZXRTdHJpbmcoXCJwZS5jbGVhclwiKX1cbiAgICAgICAgPjwvQWN0aW9uQnV0dG9uPlxuICAgICAgKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIHJldHVybiAoXG4gICAgICA8PlxuICAgICAgICA8QWN0aW9uQnV0dG9uXG4gICAgICAgICAgY2xhc3Nlcz17dGhpcy5xdWVzdGlvbi5saW5rU2V0QnV0dG9uQ3NzQ2xhc3Nlc31cbiAgICAgICAgICBjbGljaz17KCkgPT4gdGhpcy5xdWVzdGlvbi5kb0xpbmtDbGljaygpfVxuICAgICAgICAgIHNlbGVjdGVkPXt0aGlzLnF1ZXN0aW9uLmlzU2VsZWN0ZWR9XG4gICAgICAgICAgZGlzYWJsZWQ9e3RoaXMucXVlc3Rpb24uaXNSZWFkT25seX1cbiAgICAgICAgICB0ZXh0PXt0aGlzLnF1ZXN0aW9uLmxpbmtWYWx1ZVRleHR9XG4gICAgICAgICAgdGl0bGU9e3RoaXMucXVlc3Rpb24udG9vbHRpcH1cbiAgICAgICAgPjwvQWN0aW9uQnV0dG9uPlxuICAgICAgICB7dGhpcy5yZW5kZXJDbGVhcigpfVxuICAgICAgPC8+XG4gICAgKTtcbiAgfVxufVxuXG5SZWFjdFF1ZXN0aW9uRmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlclF1ZXN0aW9uKFwibGlua3ZhbHVlXCIsIChwcm9wcykgPT4ge1xuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTdXJ2ZXlRdWVzdGlvbkxpbmtWYWx1ZSwgcHJvcHMpO1xufSk7XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBCYXNlLCBTdXJ2ZXlNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgU3VydmV5UmVzdWx0c0l0ZW1Nb2RlbCwgU3VydmV5UmVzdWx0c01vZGVsIH0gZnJvbSBcInN1cnZleS1jcmVhdG9yLWNvcmVcIjtcbmltcG9ydCB7IGF0dGFjaEtleTJjbGljaywgU3ZnSWNvbiB9IGZyb20gXCJzdXJ2ZXktcmVhY3QtdWlcIjtcbmltcG9ydCB7IEFjdGlvbkJ1dHRvbiB9IGZyb20gXCIuL0FjdGlvbkJ1dHRvblwiO1xuaW1wb3J0IHsgQ3JlYXRvck1vZGVsRWxlbWVudCB9IGZyb20gXCIuL01vZGVsRWxlbWVudFwiO1xuXG5pbnRlcmZhY2UgSVN1cnZleVJlc3VsdHNQcm9wcyB7XG4gIHN1cnZleTogU3VydmV5TW9kZWw7XG59XG5leHBvcnQgY2xhc3MgU3VydmV5UmVzdWx0cyBleHRlbmRzIENyZWF0b3JNb2RlbEVsZW1lbnQ8XG4gIElTdXJ2ZXlSZXN1bHRzUHJvcHMsXG4gIGFueVxuPiB7XG4gIG1vZGVsOiBTdXJ2ZXlSZXN1bHRzTW9kZWw7XG4gIHByb3RlY3RlZCBjcmVhdGVNb2RlbCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5wcm9wcy5zdXJ2ZXkpIHtcbiAgICAgIHRoaXMubW9kZWwgPSBuZXcgU3VydmV5UmVzdWx0c01vZGVsKHRoaXMucHJvcHMuc3VydmV5KTtcbiAgICB9XG4gIH1cbiAgcHJvdGVjdGVkIGdldFVwZGF0ZWRNb2RlbFByb3BzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gW1wic3VydmV5XCJdO1xuICB9XG4gIHByb3RlY3RlZCBnZXRTdGF0ZUVsZW1lbnQoKTogQmFzZSB7XG4gICAgcmV0dXJuIHRoaXMubW9kZWw7XG4gIH1cbiAgcmVuZGVyKCk6IEpTWC5FbGVtZW50IHtcbiAgICBpZiAoIXRoaXMubW9kZWwpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmQtdGVzdC1yZXN1bHRzXCI+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3ZkLXRlc3QtcmVzdWx0c19faGVhZGVyXCI+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmQtdGVzdC1yZXN1bHRzX19oZWFkZXItdGV4dFwiPnt0aGlzLm1vZGVsLnN1cnZleVJlc3VsdHNUZXh0fTwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3ZkLXRlc3QtcmVzdWx0c19faGVhZGVyLXR5cGVzXCI+XG4gICAgICAgICAgICA8QWN0aW9uQnV0dG9uXG4gICAgICAgICAgICAgIGNsaWNrPXsoKSA9PiB0aGlzLm1vZGVsLnNlbGVjdFRhYmxlQ2xpY2soKX1cbiAgICAgICAgICAgICAgdGV4dD17dGhpcy5tb2RlbC5zdXJ2ZXlSZXN1bHRzVGFibGVUZXh0fVxuICAgICAgICAgICAgICBzZWxlY3RlZD17dGhpcy5tb2RlbC5pc1RhYmxlU2VsZWN0ZWR9XG4gICAgICAgICAgICAgIGRpc2FibGVkPXtmYWxzZX1cbiAgICAgICAgICAgID48L0FjdGlvbkJ1dHRvbj5cbiAgICAgICAgICAgIDxBY3Rpb25CdXR0b25cbiAgICAgICAgICAgICAgY2xpY2s9eygpID0+IHRoaXMubW9kZWwuc2VsZWN0SnNvbkNsaWNrKCl9XG4gICAgICAgICAgICAgIHRleHQ9e3RoaXMubW9kZWwuc3VydmV5UmVzdWx0c0pzb25UZXh0fVxuICAgICAgICAgICAgICBzZWxlY3RlZD17dGhpcy5tb2RlbC5pc0pzb25TZWxlY3RlZH1cbiAgICAgICAgICAgICAgZGlzYWJsZWQ9e2ZhbHNlfVxuICAgICAgICAgICAgPjwvQWN0aW9uQnV0dG9uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAge3RoaXMucmVuZGVyUmVzdWx0QXNUZXh0KCl9XG4gICAgICAgIHt0aGlzLnJlbmRlclJlc3VsdEFzVGFibGUoKX1cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbiAgcmVuZGVyUmVzdWx0QXNUZXh0KCk6IEpTWC5FbGVtZW50IHtcbiAgICBpZiAodGhpcy5tb2RlbC5yZXN1bHRWaWV3VHlwZSAhPT0gXCJ0ZXh0XCIpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmQtdGVzdC1yZXN1bHRzX190ZXh0IHN2ZC1saWdodC1iZy1jb2xvclwiPlxuICAgICAgICA8ZGl2Pnt0aGlzLm1vZGVsLnJlc3VsdFRleHR9PC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG4gIHJlbmRlclJlc3VsdEFzVGFibGUoKTogSlNYLkVsZW1lbnQge1xuICAgIGlmICh0aGlzLm1vZGVsLnJlc3VsdFZpZXdUeXBlICE9PSBcInRhYmxlXCIpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmQtdGVzdC1yZXN1bHRzX190YWJsZSBzdmQtbGlnaHQtYmctY29sb3JcIj5cbiAgICAgICAgPHRhYmxlPlxuICAgICAgICAgIDx0aGVhZD5cbiAgICAgICAgICAgIDx0ciBjbGFzc05hbWU9XCJzdmQtbGlnaHQtYmFja2dyb3VuZC1jb2xvclwiPlxuICAgICAgICAgICAgICA8dGgga2V5PXsxfSBjbGFzc05hbWU9XCJzdmQtZGFyay1ib3JkZXItY29sb3JcIj5cbiAgICAgICAgICAgICAgICB7dGhpcy5tb2RlbC5yZXN1bHRzVGl0bGV9XG4gICAgICAgICAgICAgIDwvdGg+XG4gICAgICAgICAgICAgIDx0aCBrZXk9ezJ9IGNsYXNzTmFtZT1cInN2ZC1kYXJrLWJvcmRlci1jb2xvclwiPlxuICAgICAgICAgICAgICAgIHt0aGlzLm1vZGVsLnJlc3VsdHNEaXNwbGF5VmFsdWV9XG4gICAgICAgICAgICAgIDwvdGg+XG4gICAgICAgICAgICA8L3RyPlxuICAgICAgICAgIDwvdGhlYWQ+XG4gICAgICAgICAgPHRib2R5PntTdXJ2ZXlSZXN1bHRzLnJlbmRlclJvd3ModGhpcy5tb2RlbC5yZXN1bHREYXRhKX08L3Rib2R5PlxuICAgICAgICA8L3RhYmxlPlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxuICBzdGF0aWMgcmVuZGVyUm93cyhkYXRhOiBBcnJheTxhbnk+KTogQXJyYXk8SlNYLkVsZW1lbnQ+IHtcbiAgICBjb25zdCByb3dzID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBkYXRhLmxlbmd0aDsgaSsrKSB7XG4gICAgICByb3dzLnB1c2goPFN1cnZleVJlc3VsdHNCeVJvdyBrZXk9e2kgKyAxfSByb3c9e2RhdGFbaV19IC8+KTtcbiAgICB9XG4gICAgcmV0dXJuIHJvd3M7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFN1cnZleVJlc3VsdHNCeVJvdyBleHRlbmRzIENyZWF0b3JNb2RlbEVsZW1lbnQ8YW55LCBhbnk+IHtcbiAgcHJpdmF0ZSBnZXQgcm93KCk6IFN1cnZleVJlc3VsdHNJdGVtTW9kZWwge1xuICAgIHJldHVybiB0aGlzLnByb3BzLnJvdztcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRTdGF0ZUVsZW1lbnQoKTogQmFzZSB7XG4gICAgcmV0dXJuIHRoaXMucm93O1xuICB9XG5cbiAgcmVuZGVyKCk6IEpTWC5FbGVtZW50IHtcbiAgICByZXR1cm4gKFxuICAgICAgPD5cbiAgICAgICAge2F0dGFjaEtleTJjbGljayg8dHIgb25DbGljaz17KCkgPT4gdGhpcy5yb3cudG9nZ2xlKCl9PlxuICAgICAgICAgIDx0ZCBrZXk9ezF9XG4gICAgICAgICAgICBzdHlsZT17eyBwYWRkaW5nTGVmdDogdGhpcy5yb3cudGV4dE1hcmdpbiB9fVxuICAgICAgICAgICAgY2xhc3NOYW1lPVwic3ZkLWRhcmstYm9yZGVyLWNvbG9yXCI+XG5cbiAgICAgICAgICAgIHt0aGlzLnJvdy5pc05vZGUgPyAoXG4gICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgc3R5bGU9e3sgbGVmdDogdGhpcy5yb3cubWFya2VyTWFyZ2luIH19XG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtcInN2ZC10ZXN0LXJlc3VsdHNfX21hcmtlciBcIiArICh0aGlzLnJvdy5jb2xsYXBzZWQgPyBcIlwiIDogXCJzdmQtdGVzdC1yZXN1bHRzX19tYXJrZXItLWV4cGFuZGVkXCIpfT5cbiAgICAgICAgICAgICAgICA8U3ZnSWNvblxuICAgICAgICAgICAgICAgICAgaWNvbk5hbWU9e1wiaWNvbi1leHBhbmRfMTZ4MTZcIn1cbiAgICAgICAgICAgICAgICAgIHNpemU9ezE2fVxuICAgICAgICAgICAgICAgID48L1N2Z0ljb24+XG4gICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICkgOiBudWxsfVxuXG4gICAgICAgICAgICA8c3Bhbj57dGhpcy5yb3cudGl0bGV9PC9zcGFuPlxuICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgPHRkIGtleT17Mn0gY2xhc3NOYW1lPXt0aGlzLnJvdy5pc05vZGUgPyBcInN2ZC10ZXN0LXJlc3VsdHNfX25vZGUtdmFsdWVcIiA6IFwic3ZkLWRhcmstYm9yZGVyLWNvbG9yXCJ9PlxuICAgICAgICAgICAge3RoaXMucm93LmdldFN0cmluZyh0aGlzLnJvdy5kaXNwbGF5VmFsdWUpfVxuICAgICAgICAgIDwvdGQ+XG4gICAgICAgIDwvdHI+KX1cbiAgICAgICAge3RoaXMucm93LmlzTm9kZSAmJiAhdGhpcy5yb3cuY29sbGFwc2VkID8gU3VydmV5UmVzdWx0cy5yZW5kZXJSb3dzKHRoaXMucm93LmRhdGEpIDogbnVsbH1cbiAgICAgIDwvPlxuICAgICk7XG4gIH1cbn1cbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFNpZGViYXJUYWJNb2RlbCwgU2lkZWJhck1vZGVsIH0gZnJvbSBcInN1cnZleS1jcmVhdG9yLWNvcmVcIjtcbmltcG9ydCB7IEJhc2UgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFN1cnZleUVsZW1lbnRCYXNlLCBTdXJ2ZXlBY3Rpb25CYXIsIFJlYWN0UXVlc3Rpb25GYWN0b3J5LCBSZWFjdEVsZW1lbnRGYWN0b3J5IH0gZnJvbSBcInN1cnZleS1yZWFjdC11aVwiO1xuXG5pbnRlcmZhY2UgSVNpZGViYXJDb21wb25lbnRQcm9wcyB7XG4gIG1vZGVsOiBTaWRlYmFyTW9kZWw7XG59XG5cbmV4cG9ydCBjbGFzcyBTaWRlYmFyQ29tcG9uZW50IGV4dGVuZHMgU3VydmV5RWxlbWVudEJhc2U8SVNpZGViYXJDb21wb25lbnRQcm9wcywgYW55PiB7XG4gIHByaXZhdGUgY29udGFpbmVyUmVmOiBSZWFjdC5SZWZPYmplY3Q8SFRNTERpdkVsZW1lbnQ+O1xuXG4gIGdldCBtb2RlbCgpOiBTaWRlYmFyTW9kZWwge1xuICAgIHJldHVybiB0aGlzLnByb3BzLm1vZGVsO1xuICB9XG5cbiAgY29uc3RydWN0b3IocHJvcHM6IElTaWRlYmFyQ29tcG9uZW50UHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgdGhpcy5jb250YWluZXJSZWYgPSBSZWFjdC5jcmVhdGVSZWYoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRTdGF0ZUVsZW1lbnQoKTogQmFzZSB7XG4gICAgcmV0dXJuIHRoaXMubW9kZWw7XG4gIH1cblxuICBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICBzdXBlci5jb21wb25lbnREaWRNb3VudCgpO1xuICAgIHRoaXMubW9kZWwuaW5pdFJlc2l6ZU1hbmFnZXIodGhpcy5jb250YWluZXJSZWYuY3VycmVudCk7XG4gIH1cbiAgY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgc3VwZXIuY29tcG9uZW50V2lsbFVubW91bnQoKTtcbiAgICB0aGlzLm1vZGVsLnJlc2V0UmVzaXplTWFuYWdlcigpO1xuICB9XG4gIHB1YmxpYyBjYW5SZW5kZXIoKTogYm9vbGVhbiB7XG4gICAgaWYgKCF0aGlzLm1vZGVsKSByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuIHN1cGVyLmNhblJlbmRlcigpO1xuICB9XG4gIHJlbmRlckVsZW1lbnQoKSB7XG4gICAgY29uc3Qgc3R5bGUgPSB7IGRpc3BsYXk6ICF0aGlzLm1vZGVsLnZpc2libGUgPyBcIm5vbmVcIiA6IFwiXCIgfTtcbiAgICBjb25zdCBjbGFzc05hbWUgPSBcInN2Yy1zaWRlLWJhclwiICsgKHRoaXMubW9kZWwuZmx5b3V0UGFuZWxNb2RlID8gXCIgc3ZjLWZseW91dC1zaWRlLWJhclwiIDogXCJcIik7XG4gICAgY29uc3QgaXRlbXMgPSB0aGlzLm1vZGVsLnRhYnMubWFwKChpdGVtKSA9PiA8U2lkZWJhclRhYiBpdGVtPXtpdGVtfSBrZXk9e2l0ZW0uaWR9IC8+KTtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9e2NsYXNzTmFtZX0gc3R5bGU9e3sgZGlzcGxheTogIXRoaXMubW9kZWwuaGFzVmlzaWJsZVRhYnMgPyBcIm5vbmVcIiA6IFwiXCIgfX0+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3ZjLXNpZGUtYmFyX19zaGFkb3dcIiBvbkNsaWNrPXsoKSA9PiB0aGlzLm1vZGVsLmNvbGxhcHNlU2lkZWJhcigpfT48L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmMtZmxleC1jb2x1bW4gc3ZjLXNpZGUtYmFyX193cmFwcGVyXCI+XG4gICAgICAgICAgPGRpdiByZWY9e3RoaXMuY29udGFpbmVyUmVmfSBzdHlsZT17c3R5bGV9IGNsYXNzTmFtZT1cInN2Yy1zaWRlLWJhcl9fY29udGFpbmVyXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2Yy1zaWRlLWJhcl9fY29udGFpbmVyLWhlYWRlclwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2Yy1zaWRlLWJhcl9fY29udGFpbmVyLWFjdGlvbnNcIj5cbiAgICAgICAgICAgICAgICA8U3VydmV5QWN0aW9uQmFyIG1vZGVsPXt0aGlzLm1vZGVsLnRvb2xiYXJ9PjwvU3VydmV5QWN0aW9uQmFyPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgeyghIXRoaXMubW9kZWwuaGVhZGVyVGV4dCA/XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmMtc2lkZS1iYXJfX2NvbnRhaW5lci10aXRsZVwiPlxuICAgICAgICAgICAgICAgICAge3RoaXMubW9kZWwuaGVhZGVyVGV4dH1cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA6IG51bGwpfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2Yy1zaWRlLWJhcl9fY29udGFpbmVyLWNvbnRlbnRcIj5cbiAgICAgICAgICAgICAge2l0ZW1zfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2Yy1zaWRlLWJhcl9fY29udGFpbmVyLWNsb3NlXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic2QtYnRuIHNkLWJ0bi0tYWN0aW9uIHN2Yy1zaWRlLWJhcl9fY29udGFpbmVyLWNsb3NlLWJ1dHRvblwiIG9uQ2xpY2s9eygpID0+IHRoaXMubW9kZWwuY29sbGFwc2VTaWRlYmFyKCl9PiB7dGhpcy5tb2RlbC5jbG9zZVRleHR9IDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxufVxuXG5jbGFzcyBTaWRlYmFyVGFiIGV4dGVuZHMgU3VydmV5RWxlbWVudEJhc2U8YW55LCBhbnk+IHtcbiAgcHJpdmF0ZSBnZXQgaXRlbSgpOiBTaWRlYmFyVGFiTW9kZWwge1xuICAgIHJldHVybiB0aGlzLnByb3BzLml0ZW07XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0U3RhdGVFbGVtZW50KCk6IEJhc2Uge1xuICAgIHJldHVybiB0aGlzLml0ZW07XG4gIH1cblxuICByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICBpZiAoIXRoaXMuaXRlbS52aXNpYmxlKSByZXR1cm4gbnVsbDtcblxuICAgIGNvbnN0IGNvbXBvbmVudCA9IFJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UuY3JlYXRlRWxlbWVudCh0aGlzLml0ZW0uY29tcG9uZW50TmFtZSwgeyBtb2RlbDogdGhpcy5pdGVtLm1vZGVsIH0pO1xuXG4gICAgcmV0dXJuIGNvbXBvbmVudDtcbiAgfVxufVxuXG5SZWFjdFF1ZXN0aW9uRmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlclF1ZXN0aW9uKFwic3ZjLXNpZGUtYmFyLXRhYlwiLCAocHJvcHMpID0+IHtcbiAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU2lkZWJhclRhYiwgcHJvcHMpO1xufSk7XG5cbmV4cG9ydCBkZWZhdWx0IFNpZGViYXJDb21wb25lbnQ7XG5cblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFwic3ZjLXNpZGUtYmFyXCIsIChwcm9wcykgPT4ge1xuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTaWRlYmFyQ29tcG9uZW50LCBwcm9wcyk7XG59KTsiLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBMb2NhbGl6YWJsZVN0cmluZywgU2VyaWFsaXplciwgSnNvbk9iamVjdFByb3BlcnR5LCBCYXNlIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBSZWFjdEVsZW1lbnRGYWN0b3J5LCBTdXJ2ZXlFbGVtZW50QmFzZSwgU3ZnSWNvbiB9IGZyb20gXCJzdXJ2ZXktcmVhY3QtdWlcIjtcbmltcG9ydCB7IENyZWF0b3JCYXNlLCBTdHJpbmdFZGl0b3JWaWV3TW9kZWxCYXNlLCBlZGl0YWJsZVN0cmluZ1JlbmRlcmVyTmFtZSB9IGZyb20gXCJzdXJ2ZXktY3JlYXRvci1jb3JlXCI7XG5pbXBvcnQgeyBDcmVhdG9yTW9kZWxFbGVtZW50IH0gZnJvbSBcIi4vTW9kZWxFbGVtZW50XCI7XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlMb2NTdHJpbmdFZGl0b3IgZXh0ZW5kcyBDcmVhdG9yTW9kZWxFbGVtZW50PGFueSwgYW55PiB7XG4gIHByaXZhdGUgYmFzZU1vZGVsOiBTdHJpbmdFZGl0b3JWaWV3TW9kZWxCYXNlO1xuICBwcml2YXRlIHN2U3RyaW5nRWRpdG9yUmVmOiBSZWFjdC5SZWZPYmplY3Q8SFRNTERpdkVsZW1lbnQ+O1xuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMuc3RhdGUgPSB7IGNoYW5nZWQ6IDAgfTtcbiAgICB0aGlzLnN2U3RyaW5nRWRpdG9yUmVmID0gUmVhY3QuY3JlYXRlUmVmKCk7XG4gICAgdGhpcy5iYXNlTW9kZWwuZ2V0RWRpdG9yRWxlbWVudCA9ICgpID0+IHRoaXMuc3ZTdHJpbmdFZGl0b3JSZWYuY3VycmVudDtcbiAgfVxuICBwcm90ZWN0ZWQgY3JlYXRlTW9kZWwoKTogdm9pZCB7XG4gICAgdGhpcy5iYXNlTW9kZWwgPSBuZXcgU3RyaW5nRWRpdG9yVmlld01vZGVsQmFzZSh0aGlzLmxvY1N0cmluZywgdGhpcy5jcmVhdG9yKTtcbiAgICB0aGlzLmJhc2VNb2RlbC5ibHVyRWRpdG9yID0gKCkgPT4ge1xuICAgICAgdGhpcy5zdlN0cmluZ0VkaXRvclJlZi5jdXJyZW50LmJsdXIoKTtcbiAgICAgIHRoaXMuc3ZTdHJpbmdFZGl0b3JSZWYuY3VycmVudC5zcGVsbGNoZWNrID0gZmFsc2U7XG4gICAgfTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0VXBkYXRlZE1vZGVsUHJvcHMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBbXCJjcmVhdG9yXCIsIFwibG9jU3RyaW5nXCJdO1xuICB9XG4gIHByaXZhdGUgZ2V0IGxvY1N0cmluZygpOiBMb2NhbGl6YWJsZVN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMubG9jU3RyLmxvY1N0cjtcbiAgfVxuICBwcml2YXRlIGdldCBjcmVhdG9yKCk6IENyZWF0b3JCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5sb2NTdHIuY3JlYXRvcjtcbiAgfVxuICBwcml2YXRlIGdldCBzdHlsZSgpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLnByb3BzLnN0eWxlO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldFN0YXRlRWxlbWVudCgpOiBCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5iYXNlTW9kZWw7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGVycm9yVGV4dCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmJhc2VNb2RlbC5lcnJvclRleHQ7XG4gIH1cbiAgcHJpdmF0ZSBvbkNoYW5nZWRIYW5kbGVyID0gKHNlbmRlcjogYW55LCBvcHRpb25zOiBhbnkpID0+IHtcbiAgICB0aGlzLnNldFN0YXRlKHsgY2hhbmdlZDogISF0aGlzLnN0YXRlICYmIHRoaXMuc3RhdGUuY2hhbmdlZCA/IHRoaXMuc3RhdGUuY2hhbmdlZCArIDEgOiAxIH0pO1xuICB9XG4gIHB1YmxpYyBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICBzdXBlci5jb21wb25lbnREaWRNb3VudCgpO1xuICAgIGlmICghdGhpcy5sb2NTdHJpbmcpIHJldHVybjtcbiAgICBjb25zdCBzZWxmOiBTdXJ2ZXlMb2NTdHJpbmdFZGl0b3IgPSB0aGlzO1xuICAgIHRoaXMuYmFzZU1vZGVsLmFmdGVyUmVuZGVyKCk7XG4gICAgdGhpcy5sb2NTdHJpbmcub25TdHJpbmdDaGFuZ2VkLmFkZCh0aGlzLm9uQ2hhbmdlZEhhbmRsZXIpO1xuICAgIGlmICh0aGlzLmxvY1N0cmluZ1tcIl9faXNFZGl0aW5nXCJdKSB7XG4gICAgICB0aGlzLnN2U3RyaW5nRWRpdG9yUmVmLmN1cnJlbnQuZm9jdXMoKTtcbiAgICAgIC8vIGRvY3VtZW50LmV4ZWNDb21tYW5kKCdzZWxlY3RBbGwnLCBmYWxzZSwgbnVsbCk7XG4gICAgfVxuICB9XG4gIHB1YmxpYyBjb21wb25lbnREaWRVcGRhdGUocHJldlByb3BzOiBhbnksIHByZXZTdGF0ZTogYW55KTogdm9pZCB7XG4gICAgc3VwZXIuY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wcywgcHJldlN0YXRlKTtcbiAgICB0aGlzLmJhc2VNb2RlbC5hZnRlclJlbmRlcigpO1xuICB9XG4gIHB1YmxpYyBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICBzdXBlci5jb21wb25lbnRXaWxsVW5tb3VudCgpO1xuICAgIGlmICghdGhpcy5sb2NTdHJpbmcpIHJldHVybjtcbiAgICB0aGlzLmxvY1N0cmluZy5vblN0cmluZ0NoYW5nZWQucmVtb3ZlKHRoaXMub25DaGFuZ2VkSGFuZGxlcik7XG4gIH1cbiAgcHJpdmF0ZSBnZXQgcGxhY2Vob2xkZXIoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5iYXNlTW9kZWwucGxhY2Vob2xkZXI7XG4gIH1cbiAgcHJpdmF0ZSBnZXQgY29udGVudEVkaXRhYmxlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmJhc2VNb2RlbC5jb250ZW50RWRpdGFibGU7XG4gIH1cbiAgcHJpdmF0ZSBvbkJsdXIgPSAoZXZlbnQ6IGFueSkgPT4ge1xuICAgIHRoaXMuc3ZTdHJpbmdFZGl0b3JSZWYuY3VycmVudC5zcGVsbGNoZWNrID0gZmFsc2U7XG4gICAgdGhpcy5sb2NTdHJpbmdbXCJfX2lzRWRpdGluZ1wiXSA9IGZhbHNlO1xuICAgIHRoaXMuanVzdEZvY3VzZWQgPSBmYWxzZTtcbiAgICB0aGlzLmJhc2VNb2RlbC5vbkJsdXIoZXZlbnQubmF0aXZlRXZlbnQpO1xuICAgIHJldHVybiB0aGlzLmJhc2VNb2RlbC5lcnJvclRleHQ7XG4gIH07XG4gIHByaXZhdGUgb25Db21wb3NpdGlvblN0YXJ0ID0gKGV2ZW50OiBhbnkpID0+IHtcbiAgICB0aGlzLmJhc2VNb2RlbC5vbkNvbXBvc2l0aW9uU3RhcnQoZXZlbnQubmF0aXZlRXZlbnQpO1xuICB9O1xuICBwcml2YXRlIG9uQ29tcG9zaXRpb25FbmQgPSAoZXZlbnQ6IGFueSkgPT4ge1xuICAgIHRoaXMuYmFzZU1vZGVsLm9uQ29tcG9zaXRpb25FbmQoZXZlbnQubmF0aXZlRXZlbnQpO1xuICB9O1xuICBwcml2YXRlIG9uSW5wdXQgPSAoZXZlbnQ6IGFueSkgPT4ge1xuICAgIHRoaXMuYmFzZU1vZGVsLm9uSW5wdXQoZXZlbnQubmF0aXZlRXZlbnQpO1xuICB9O1xuICBwcml2YXRlIGp1c3RGb2N1c2VkID0gZmFsc2U7XG4gIHByaXZhdGUgb25Gb2N1cyA9IChldmVudDogYW55KSA9PiB7XG4gICAgdGhpcy5iYXNlTW9kZWwub25Gb2N1cyhldmVudC5uYXRpdmVFdmVudCk7XG4gICAgdGhpcy5qdXN0Rm9jdXNlZCA9IHRydWU7XG4gIH07XG4gIHByaXZhdGUgb25LZXlEb3duID0gKGV2ZW50OiBSZWFjdC5LZXlib2FyZEV2ZW50PEhUTUxTcGFuRWxlbWVudD4pID0+IHtcbiAgICByZXR1cm4gdGhpcy5iYXNlTW9kZWwub25LZXlEb3duKGV2ZW50Lm5hdGl2ZUV2ZW50KTtcbiAgfTtcbiAgcHJpdmF0ZSBvbktleVVwID0gKGV2ZW50OiBSZWFjdC5LZXlib2FyZEV2ZW50PEhUTUxTcGFuRWxlbWVudD4pID0+IHtcbiAgICByZXR1cm4gdGhpcy5iYXNlTW9kZWwub25LZXlVcChldmVudC5uYXRpdmVFdmVudCk7XG4gIH07XG4gIHByaXZhdGUgb25Nb3VzZVVwID0gKGV2ZW50OiBSZWFjdC5Nb3VzZUV2ZW50PEhUTUxTcGFuRWxlbWVudD4pOiBib29sZWFuID0+IHtcbiAgICByZXR1cm4gdGhpcy5iYXNlTW9kZWwub25Nb3VzZVVwKGV2ZW50Lm5hdGl2ZUV2ZW50KTtcbiAgfTtcbiAgcHJpdmF0ZSBkb25lID0gKGV2ZW50OiBhbnkpID0+IHtcbiAgICB0aGlzLmJhc2VNb2RlbC5kb25lKGV2ZW50KTtcbiAgICB0aGlzLmxvY1N0cmluZ1tcIl9faXNFZGl0aW5nXCJdID0gZmFsc2U7XG4gIH07XG4gIHByaXZhdGUgZWRpdCA9IChldmVudDogYW55KSA9PiB7XG4gICAgdGhpcy5zdlN0cmluZ0VkaXRvclJlZi5jdXJyZW50LmZvY3VzKCk7XG4gICAgLy8gZG9jdW1lbnQuZXhlY0NvbW1hbmQoJ3NlbGVjdEFsbCcsIGZhbHNlLCBudWxsKTtcbiAgICB0aGlzLmxvY1N0cmluZ1tcIl9faXNFZGl0aW5nXCJdID0gdHJ1ZTtcbiAgICB0aGlzLmJhc2VNb2RlbC5vbkNsaWNrKGV2ZW50KTtcbiAgfTtcbiAgcHJpdmF0ZSBnZXQgY2xhc3NOYW1lKCkge1xuICAgIHJldHVybiB0aGlzLmJhc2VNb2RlbC5jbGFzc05hbWUodGhpcy5sb2NTdHJpbmcucmVuZGVyZWRIdG1sKTtcbiAgfVxuICBwdWJsaWMgcmVuZGVyKCk6IEpTWC5FbGVtZW50IHtcbiAgICBpZiAoIXRoaXMubG9jU3RyaW5nKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICB0aGlzLmJhc2VNb2RlbC5zZXRMb2NTdHJpbmcodGhpcy5sb2NTdHJpbmcpO1xuICAgIH1cbiAgICBsZXQgY29udHJvbCA9IG51bGw7XG4gICAgaWYgKHRoaXMubG9jU3RyaW5nLmhhc0h0bWwpIHtcbiAgICAgIGNvbnN0IGh0bWxWYWx1ZSA9IHsgX19odG1sOiB0aGlzLmJhc2VNb2RlbC5mb2N1c2VkICYmIHRoaXMuYmFzZU1vZGVsLmVkaXRBc1RleHQgJiYgdGhpcy5sb2NTdHJpbmcudGV4dCB8fCB0aGlzLmxvY1N0cmluZy5yZW5kZXJlZEh0bWwgfTtcbiAgICAgIGNvbnRyb2wgPSAoXG4gICAgICAgIDxzcGFuXG4gICAgICAgICAgcm9sZT1cInRleHRib3hcIlxuICAgICAgICAgIHJlZj17dGhpcy5zdlN0cmluZ0VkaXRvclJlZn1cbiAgICAgICAgICBjbGFzc05hbWU9XCJzdi1zdHJpbmctZWRpdG9yXCJcbiAgICAgICAgICBjb250ZW50RWRpdGFibGU9e3RoaXMuY29udGVudEVkaXRhYmxlfVxuICAgICAgICAgIHNwZWxsQ2hlY2s9e2ZhbHNlfVxuICAgICAgICAgIGFyaWEtcGxhY2Vob2xkZXI9e3RoaXMucGxhY2Vob2xkZXJ9XG4gICAgICAgICAgYXJpYS1sYWJlbD17dGhpcy5wbGFjZWhvbGRlciB8fCBcImNvbnRlbnQgZWRpdGFibGVcIn1cbiAgICAgICAgICBzdXBwcmVzc0NvbnRlbnRFZGl0YWJsZVdhcm5pbmc9e3RydWV9XG4gICAgICAgICAgLy8gc3R5bGU9e3RoaXMuc3R5bGV9XG4gICAgICAgICAgZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUw9e2h0bWxWYWx1ZX1cbiAgICAgICAgICBvbkJsdXI9e3RoaXMub25CbHVyfVxuICAgICAgICAgIG9uRm9jdXM9e3RoaXMub25Gb2N1c31cbiAgICAgICAgICBvbktleURvd249e3RoaXMub25LZXlEb3dufVxuICAgICAgICAgIG9uTW91c2VVcD17dGhpcy5vbk1vdXNlVXB9XG4gICAgICAgICAgb25DbGljaz17dGhpcy5lZGl0fVxuICAgICAgICAvPlxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29udHJvbCA9IChcbiAgICAgICAgPHNwYW5cbiAgICAgICAgICByb2xlPVwidGV4dGJveFwiXG4gICAgICAgICAgcmVmPXt0aGlzLnN2U3RyaW5nRWRpdG9yUmVmfVxuICAgICAgICAgIGNsYXNzTmFtZT1cInN2LXN0cmluZy1lZGl0b3JcIlxuICAgICAgICAgIGNvbnRlbnRFZGl0YWJsZT17dGhpcy5jb250ZW50RWRpdGFibGV9XG4gICAgICAgICAgc3BlbGxDaGVjaz17ZmFsc2V9XG4gICAgICAgICAgYXJpYS1wbGFjZWhvbGRlcj17dGhpcy5wbGFjZWhvbGRlcn1cbiAgICAgICAgICBhcmlhLWxhYmVsPXt0aGlzLnBsYWNlaG9sZGVyIHx8IFwiY29udGVudCBlZGl0YWJsZVwifVxuICAgICAgICAgIHN1cHByZXNzQ29udGVudEVkaXRhYmxlV2FybmluZz17dHJ1ZX1cbiAgICAgICAgICAvLyBzdHlsZT17dGhpcy5zdHlsZX1cbiAgICAgICAgICBvbkJsdXI9e3RoaXMub25CbHVyfVxuICAgICAgICAgIG9uSW5wdXQ9e3RoaXMub25JbnB1dH1cbiAgICAgICAgICBvbkNvbXBvc2l0aW9uU3RhcnQ9e3RoaXMub25Db21wb3NpdGlvblN0YXJ0fVxuICAgICAgICAgIG9uQ29tcG9zaXRpb25FbmQ9e3RoaXMub25Db21wb3NpdGlvbkVuZH1cbiAgICAgICAgICBvbkZvY3VzPXt0aGlzLm9uRm9jdXN9XG4gICAgICAgICAgb25LZXlEb3duPXt0aGlzLm9uS2V5RG93bn1cbiAgICAgICAgICBvbktleVVwPXt0aGlzLm9uS2V5VXB9XG4gICAgICAgICAgb25Nb3VzZVVwPXt0aGlzLm9uTW91c2VVcH1cbiAgICAgICAgICBvbkNsaWNrPXt0aGlzLmVkaXR9XG4gICAgICAgID5cbiAgICAgICAgICB7dGhpcy5sb2NTdHJpbmcucmVuZGVyZWRIdG1sfVxuICAgICAgICA8L3NwYW4+XG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gKFxuICAgICAgPHNwYW4gY2xhc3NOYW1lPXt0aGlzLmNsYXNzTmFtZX0+XG4gICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInN2Yy1zdHJpbmctZWRpdG9yX19jb250ZW50XCI+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmMtc3RyaW5nLWVkaXRvcl9fYm9yZGVyXCJcbiAgICAgICAgICAgIG9uQ2xpY2s9e3RoaXMuZWRpdH1cbiAgICAgICAgICA+XG4gICAgICAgICAgICA8U3ZnSWNvblxuICAgICAgICAgICAgICBjbGFzc05hbWU9XCJzdmMtc3RyaW5nLWVkaXRvcl9fYnV0dG9uIHN2Yy1zdHJpbmctZWRpdG9yX19idXR0b24tLWVkaXRcIlxuICAgICAgICAgICAgICBzaXplPXsxNn1cbiAgICAgICAgICAgICAgaWNvbk5hbWU9e1wiaWNvbi1lZGl0XCJ9XG4gICAgICAgICAgICA+PC9TdmdJY29uPlxuXG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAge2NvbnRyb2x9XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmMtc3RyaW5nLWVkaXRvcl9fY29udHJvbHNcIlxuICAgICAgICAgICAgb25DbGljaz17dGhpcy5lZGl0fT5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9zcGFuPlxuICAgICAgICB7dGhpcy5lcnJvclRleHQgPyA8c3BhbiBjbGFzc05hbWU9XCJzdmMtc3RyaW5nLWVkaXRvcl9fZXJyb3JcIj57dGhpcy5lcnJvclRleHR9PC9zcGFuPiA6IFwiXCJ9XG4gICAgICA8L3NwYW4+XG4gICAgKTtcbiAgfVxufVxuXG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcbiAgZWRpdGFibGVTdHJpbmdSZW5kZXJlck5hbWUsXG4gIChwcm9wcykgPT4ge1xuICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFN1cnZleUxvY1N0cmluZ0VkaXRvciwgcHJvcHMpO1xuICB9XG4pO1xuIiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IFJlYWN0RE9NIGZyb20gXCJyZWFjdC1kb21cIjtcblxuaW1wb3J0IHtcbiAgQmFzZSxcbiAgUXVlc3Rpb24sXG4gIFN1cnZleUVycm9yLFxuICBTdXJ2ZXlNb2RlbFxufSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7XG4gIFN1cnZleUFjdGlvbkJhcixcbiAgUmVhY3RFbGVtZW50RmFjdG9yeSxcbiAgUmVhY3RRdWVzdGlvbkZhY3RvcnksXG4gIFN1cnZleUVsZW1lbnRCYXNlLFxuICBTdXJ2ZXlMb2NTdHJpbmdWaWV3ZXIsXG4gIFN1cnZleVxufSBmcm9tIFwic3VydmV5LXJlYWN0LXVpXCI7XG5pbXBvcnQge1xuICBJQ3JlYXRvck9wdGlvbnMsXG4gIENyZWF0b3JCYXNlLFxuICBJVGFiYmVkTWVudUl0ZW1cbn0gZnJvbSBcInN1cnZleS1jcmVhdG9yLWNvcmVcIjtcbmltcG9ydCB7IFRhYmJlZE1lbnVDb21wb25lbnQgfSBmcm9tIFwiLi9UYWJiZWRNZW51XCI7XG5pbXBvcnQgeyBOb3RpZmllckNvbXBvbmVudCB9IGZyb20gXCIuL05vdGlmaWVyXCI7XG5pbXBvcnQgeyBTdmdCdW5kbGVDb21wb25lbnQgfSBmcm9tIFwiLi9TdmdCdW5kbGVcIjtcblxuaW50ZXJmYWNlIElTdXJ2ZXlDcmVhdG9yQ29tcG9uZW50UHJvcHMge1xuICBjcmVhdG9yOiBTdXJ2ZXlDcmVhdG9yO1xuICBzdHlsZT86IGFueTtcbn1cblxuZXhwb3J0IGNsYXNzIFN1cnZleUNyZWF0b3JDb21wb25lbnQgZXh0ZW5kcyBTdXJ2ZXlFbGVtZW50QmFzZTxcbiAgSVN1cnZleUNyZWF0b3JDb21wb25lbnRQcm9wcyxcbiAgYW55XG4+IHtcbiAgY29uc3RydWN0b3IocHJvcHM6IElTdXJ2ZXlDcmVhdG9yQ29tcG9uZW50UHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgdGhpcy5yb290Tm9kZSA9IFJlYWN0LmNyZWF0ZVJlZigpO1xuICB9XG4gIGdldCBjcmVhdG9yKCk6IENyZWF0b3JCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5jcmVhdG9yO1xuICB9XG4gIHByb3RlY3RlZCBnZXRTdGF0ZUVsZW1lbnQoKTogQmFzZSB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuY3JlYXRvcjtcbiAgfVxuICBnZXQgc3R5bGUoKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5zdHlsZTtcbiAgfVxuICBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICBzdXBlci5jb21wb25lbnREaWRNb3VudCgpO1xuICAgIHRoaXMuY3JlYXRvci5pbml0S2V5Ym9hcmRTaG9ydGN1dHModGhpcy5yb290Tm9kZS5jdXJyZW50KTtcbiAgICB0aGlzLmNyZWF0b3IuaW5pdFJlc3BvbnNpdml0eU1hbmFnZXIodGhpcy5yb290Tm9kZS5jdXJyZW50KTtcbiAgfVxuICBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICBzdXBlci5jb21wb25lbnRXaWxsVW5tb3VudCgpO1xuICAgIHRoaXMuY3JlYXRvci5yZW1vdmVLZXlib2FyZFNob3J0Y3V0cyh0aGlzLnJvb3ROb2RlLmN1cnJlbnQpO1xuICAgIHRoaXMuY3JlYXRvci5yZXNldFJlc3BvbnNpdml0eU1hbmFnZXIoKTtcbiAgfVxuICBwcml2YXRlIHJvb3ROb2RlOiBSZWFjdC5SZWZPYmplY3Q8SFRNTERpdkVsZW1lbnQ+O1xuXG4gIHJlbmRlckVsZW1lbnQoKSB7XG4gICAgY29uc3QgY3JlYXRvcjogQ3JlYXRvckJhc2UgPSB0aGlzLnByb3BzLmNyZWF0b3I7XG4gICAgaWYgKGNyZWF0b3IuaXNDcmVhdG9yRGlzcG9zZWQpIHJldHVybiBudWxsO1xuICAgIGNvbnN0IGNyZWF0b3JDbGFzc05hbWUgPSBcInN2Yy1jcmVhdG9yXCIgKyAodGhpcy5wcm9wcy5jcmVhdG9yLmlzTW9iaWxlVmlldyA/IFwiIHN2Yy1jcmVhdG9yLS1tb2JpbGVcIiA6IFwiXCIpO1xuICAgIGNvbnN0IGFyZWFDbGFzc05hbWUgPSBcInN2Yy1mdWxsLWNvbnRhaW5lciBzdmMtY3JlYXRvcl9fYXJlYSBzdmMtZmxleC1jb2x1bW5cIiArICh0aGlzLnByb3BzLmNyZWF0b3IuaGF2ZUNvbW1lcmNpYWxMaWNlbnNlID8gXCJcIiA6IFwiIHN2Yy1jcmVhdG9yX19hcmVhLS13aXRoLWJhbm5lclwiKTtcbiAgICBjb25zdCBjb250ZW50V3JhcHBlckNsYXNzTmFtZSA9IFwic3ZjLWNyZWF0b3JfX2NvbnRlbnQtd3JhcHBlciBzdmMtZmxleC1yb3dcIiArICh0aGlzLnByb3BzLmNyZWF0b3IuaXNNb2JpbGVWaWV3ID8gXCIgc3ZjLWNyZWF0b3JfX2NvbnRlbnQtd3JhcHBlci0tZm9vdGVyLXRvb2xiYXJcIiA6IFwiXCIpO1xuICAgIGNvbnN0IGZ1bGxDb250YWluZXJDbGFzc05hbWUgPSBcInN2Yy1mbGV4LXJvdyBzdmMtZnVsbC1jb250YWluZXJcIiArIChcIiBzdmMtY3JlYXRvcl9fc2lkZS1iYXItLVwiICsgdGhpcy5jcmVhdG9yLnNpZGViYXJMb2NhdGlvbik7XG4gICAgbGV0IGxpY2Vuc2VCYW5uZXIgPSBudWxsO1xuICAgIGlmICghdGhpcy5wcm9wcy5jcmVhdG9yLmhhdmVDb21tZXJjaWFsTGljZW5zZSkge1xuICAgICAgbGljZW5zZUJhbm5lciA9IChcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmMtY3JlYXRvcl9fYmFubmVyXCI+XG4gICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwic3ZjLWNyZWF0b3JfX25vbi1jb21tZXJjaWFsLXRleHRcIj5cbiAgICAgICAgICAgIDxhIGhyZWY9XCJodHRwczovL3N1cnZleWpzLmlvL2J1eVwiPlxuICAgICAgICAgICAgICB7dGhpcy5wcm9wcy5jcmVhdG9yLmxpY2Vuc2VUZXh0fVxuICAgICAgICAgICAgPC9hPlxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICApO1xuICAgIH1cbiAgICAvL0FNOiB3aWR0aCB1bnJlY29nbml6ZWQgYnkgcmVhY3RcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9e2NyZWF0b3JDbGFzc05hbWV9IHJlZj17dGhpcy5yb290Tm9kZX0gc3R5bGU9e3RoaXMuc3R5bGV9PlxuICAgICAgICA8U3ZnQnVuZGxlQ29tcG9uZW50PjwvU3ZnQnVuZGxlQ29tcG9uZW50PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17YXJlYUNsYXNzTmFtZX0+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e2Z1bGxDb250YWluZXJDbGFzc05hbWV9PlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmMtZmxleC1jb2x1bW4gc3ZjLWZsZXgtcm93X19lbGVtZW50IHN2Yy1mbGV4LXJvd19fZWxlbWVudC0tZ3Jvd2luZ1wiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2Yy10b3AtYmFyXCI+XG4gICAgICAgICAgICAgICAgeyhjcmVhdG9yLnNob3dUYWJzID9cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3ZjLXRhYmJlZC1tZW51LXdyYXBwZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgPFRhYmJlZE1lbnVDb21wb25lbnQgbW9kZWw9e2NyZWF0b3IudGFiYmVkTWVudX0+PC9UYWJiZWRNZW51Q29tcG9uZW50PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+IDogbnVsbCl9XG4gICAgICAgICAgICAgICAgeyhjcmVhdG9yLnNob3dUb29sYmFyID9cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3ZjLXRvb2xiYXItd3JhcHBlclwiPlxuICAgICAgICAgICAgICAgICAgICA8U3VydmV5QWN0aW9uQmFyIG1vZGVsPXtjcmVhdG9yLnRvb2xiYXJ9PjwvU3VydmV5QWN0aW9uQmFyPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA6IG51bGwpfVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e2NvbnRlbnRXcmFwcGVyQ2xhc3NOYW1lfT5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2Yy1jcmVhdG9yX19jb250ZW50LWhvbGRlciBzdmMtZmxleC1jb2x1bW5cIj5cbiAgICAgICAgICAgICAgICAgIHt0aGlzLnJlbmRlckFjdGl2ZVRhYigpfVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmMtZm9vdGVyLWJhclwiPlxuICAgICAgICAgICAgICAgIHsoY3JlYXRvci5pc01vYmlsZVZpZXcgP1xuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmMtdG9vbGJhci13cmFwcGVyXCI+XG4gICAgICAgICAgICAgICAgICAgIDxTdXJ2ZXlBY3Rpb25CYXIgbW9kZWw9e2NyZWF0b3IuZm9vdGVyVG9vbGJhcn0+PC9TdXJ2ZXlBY3Rpb25CYXI+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDogbnVsbCl9XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICB7dGhpcy5yZW5kZXJTaWRlYmFyKCl9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAge2xpY2Vuc2VCYW5uZXJ9XG4gICAgICAgICAgPE5vdGlmaWVyQ29tcG9uZW50XG4gICAgICAgICAgICBjcmVhdG9yPXtjcmVhdG9yfVxuICAgICAgICAgICAgbm90aWZpZXI9e2NyZWF0b3Iubm90aWZpZXJ9XG4gICAgICAgICAgPjwvTm90aWZpZXJDb21wb25lbnQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxuICByZW5kZXJBY3RpdmVUYWIoKSB7XG4gICAgY29uc3QgY3JlYXRvcjogQ3JlYXRvckJhc2UgPSB0aGlzLnByb3BzLmNyZWF0b3I7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjcmVhdG9yLnRhYnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChjcmVhdG9yLnRhYnNbaV0uaWQgPT09IGNyZWF0b3IuYWN0aXZlVGFiKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlbmRlckNyZWF0b3JUYWIoY3JlYXRvci50YWJzW2ldKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgcmVuZGVyQ3JlYXRvclRhYih0YWI6IElUYWJiZWRNZW51SXRlbSkge1xuICAgIGlmICh0YWIudmlzaWJsZSA9PT0gZmFsc2UpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBjb25zdCBjcmVhdG9yOiBDcmVhdG9yQmFzZSA9IHRoaXMucHJvcHMuY3JlYXRvcjtcbiAgICBjb25zdCBjb21wb25lbnQgPSAhIXRhYi5yZW5kZXJUYWJcbiAgICAgID8gdGFiLnJlbmRlclRhYigpXG4gICAgICA6IFJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UuY3JlYXRlRWxlbWVudCh0YWIuY29tcG9uZW50Q29udGVudCwge1xuICAgICAgICBjcmVhdG9yOiBjcmVhdG9yLFxuICAgICAgICBzdXJ2ZXk6IGNyZWF0b3Iuc3VydmV5LFxuICAgICAgICBkYXRhOiB0YWIuZGF0YS5tb2RlbFxuICAgICAgfSk7XG4gICAgY29uc3QgY2xhc3NOYW1lID0gXCJzdmMtY3JlYXRvci10YWJcIiArIChjcmVhdG9yLnRvb2xib3hMb2NhdGlvbiA9PSBcInJpZ2h0XCIgPyBcIiBzdmMtY3JlYXRvcl9fdG9vbGJveC0tcmlnaHRcIiA6IFwiXCIpO1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2XG4gICAgICAgIGtleT17dGFiLmlkfVxuICAgICAgICBpZD17XCJzY3JvbGxhYmxlRGl2LVwiICsgdGFiLmlkfVxuICAgICAgICBjbGFzc05hbWU9e2NsYXNzTmFtZX1cbiAgICAgID5cbiAgICAgICAge2NvbXBvbmVudH1cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbiAgcmVuZGVyU2lkZWJhcigpIHtcbiAgICBpZiAoISF0aGlzLmNyZWF0b3Iuc2lkZWJhcikge1xuICAgICAgY29uc3QgY2xhc3NOYW1lID0gdGhpcy5jcmVhdG9yLmlzTW9iaWxlVmlldyA/IFwic3YtbW9iaWxlLXNpZGUtYmFyXCIgOiBcIlwiO1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e2NsYXNzTmFtZX0+XG4gICAgICAgICAge1JlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UuY3JlYXRlRWxlbWVudChcInN2Yy1zaWRlLWJhclwiLCB7IG1vZGVsOiB0aGlzLmNyZWF0b3Iuc2lkZWJhciB9KX1cbiAgICAgICAgPC9kaXY+KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlDcmVhdG9yIGV4dGVuZHMgQ3JlYXRvckJhc2Uge1xuICBjb25zdHJ1Y3RvcihvcHRpb25zOiBJQ3JlYXRvck9wdGlvbnMgPSB7fSwgb3B0aW9uczI/OiBJQ3JlYXRvck9wdGlvbnMpIHtcbiAgICBzdXBlcihvcHRpb25zLCBvcHRpb25zMik7XG4gIH1cbiAgcHVibGljIHJlbmRlcih0YXJnZXQ6IHN0cmluZyB8IEhUTUxFbGVtZW50KSB7XG4gICAgbGV0IG5vZGU6IEhUTUxFbGVtZW50ID0gdGFyZ2V0IGFzIEhUTUxFbGVtZW50O1xuICAgIGlmICh0eXBlb2YgdGFyZ2V0ID09PSBcInN0cmluZ1wiKSB7XG4gICAgICBub2RlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGFyZ2V0KTtcbiAgICB9XG4gICAgUmVhY3RET00udW5tb3VudENvbXBvbmVudEF0Tm9kZShub2RlKTtcbiAgICBSZWFjdERPTS5yZW5kZXIoXG4gICAgICA8UmVhY3QuU3RyaWN0TW9kZT5cbiAgICAgICAgPFN1cnZleUNyZWF0b3JDb21wb25lbnQgY3JlYXRvcj17dGhpc30gLz5cbiAgICAgIDwvUmVhY3QuU3RyaWN0TW9kZT4sXG4gICAgICBub2RlXG4gICAgKTtcbiAgfVxuXG4gIC8vSVN1cnZleUNyZWF0b3JcbiAgcHVibGljIGNyZWF0ZVF1ZXN0aW9uRWxlbWVudChxdWVzdGlvbjogUXVlc3Rpb24pOiBKU1guRWxlbWVudCB7XG4gICAgcmV0dXJuIFJlYWN0UXVlc3Rpb25GYWN0b3J5Lkluc3RhbmNlLmNyZWF0ZVF1ZXN0aW9uKFxuICAgICAgcXVlc3Rpb24uaXNEZWZhdWx0UmVuZGVyaW5nKClcbiAgICAgICAgPyBxdWVzdGlvbi5nZXRUZW1wbGF0ZSgpXG4gICAgICAgIDogcXVlc3Rpb24uZ2V0Q29tcG9uZW50TmFtZSgpLFxuICAgICAge1xuICAgICAgICBxdWVzdGlvbjogcXVlc3Rpb24sXG4gICAgICAgIGlzRGlzcGxheU1vZGU6IHF1ZXN0aW9uLmlzUmVhZE9ubHksXG4gICAgICAgIGNyZWF0b3I6IHRoaXNcbiAgICAgIH1cbiAgICApO1xuICB9XG4gIHB1YmxpYyByZW5kZXJFcnJvcihcbiAgICBrZXk6IHN0cmluZyxcbiAgICBlcnJvcjogU3VydmV5RXJyb3IsXG4gICAgY3NzQ2xhc3NlczogYW55XG4gICk6IEpTWC5FbGVtZW50IHtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBrZXk9e2tleX0+XG4gICAgICAgIDxzcGFuIGNsYXNzTmFtZT17Y3NzQ2xhc3Nlcy5lcnJvci5pY29ufSBhcmlhLWhpZGRlbj1cInRydWVcIiAvPlxuICAgICAgICA8c3BhbiBjbGFzc05hbWU9e2Nzc0NsYXNzZXMuZXJyb3IuaXRlbX0+XG4gICAgICAgICAgPFN1cnZleUxvY1N0cmluZ1ZpZXdlciBsb2NTdHI9e2Vycm9yLmxvY1RleHR9IC8+XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbiAgcHVibGljIHF1ZXN0aW9uVGl0bGVMb2NhdGlvbigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnN1cnZleS5xdWVzdGlvblRpdGxlTG9jYXRpb247XG4gIH1cbiAgcHVibGljIHF1ZXN0aW9uRXJyb3JMb2NhdGlvbigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnN1cnZleS5xdWVzdGlvbkVycm9yTG9jYXRpb247XG4gIH1cbn1cblxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXCJzdXJ2ZXktd2lkZ2V0XCIsIChwcm9wcykgPT4ge1xuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTdXJ2ZXksIHByb3BzKTtcbn0pO1xuIiwiXG5pbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBTdmdSZWdpc3RyeSB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgc3ZnQnVuZGxlIH0gZnJvbSBcInN1cnZleS1jcmVhdG9yLWNvcmVcIjtcbmltcG9ydCB7IFJlYWN0RWxlbWVudEZhY3RvcnkgfSBmcm9tIFwic3VydmV5LXJlYWN0LXVpXCI7XG5cbmV4cG9ydCBjbGFzcyBTdmdCdW5kbGVDb21wb25lbnQgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuICBwcml2YXRlIGNvbnRhaW5lclJlZjogUmVhY3QuUmVmT2JqZWN0PFNWR1NWR0VsZW1lbnQ+O1xuXG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgdGhpcy5jb250YWluZXJSZWYgPSBSZWFjdC5jcmVhdGVSZWYoKTtcbiAgfVxuICBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICBpZiAoISF0aGlzLmNvbnRhaW5lclJlZi5jdXJyZW50KSB7XG4gICAgICB0aGlzLmNvbnRhaW5lclJlZi5jdXJyZW50LmlubmVySFRNTCA9IFN2Z1JlZ2lzdHJ5Lmljb25zUmVuZGVyZWRIdG1sKCk7XG4gICAgfVxuICB9XG4gIHJlbmRlcigpIHtcbiAgICBjb25zdCBzdmdTdHlsZSA9IHtcbiAgICAgIGRpc3BsYXk6IFwibm9uZVwiXG4gICAgfTtcbiAgICByZXR1cm4gPHN2ZyBzdHlsZT17c3ZnU3R5bGV9IGlkPVwic3YtaWNvbi1ob2xkZXItZ2xvYmFsLWNvbnRhaW5lclwiIHJlZj17dGhpcy5jb250YWluZXJSZWZ9Pjwvc3ZnPjtcbiAgfVxufVxuXG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcInN2Yy1zdmctYnVuZGxlXCIsIChwcm9wcykgPT4ge1xuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTdmdCdW5kbGVDb21wb25lbnQsIHByb3BzKTtcbn0pOyIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IENTU1Byb3BlcnRpZXMgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IElUYWJiZWRNZW51SXRlbSwgVGFiYmVkTWVudUl0ZW0sIFRhYmJlZE1lbnVDb250YWluZXIgfSBmcm9tIFwic3VydmV5LWNyZWF0b3ItY29yZVwiO1xuaW1wb3J0IHtcbiAgQmFzZSxcbiAgSUFjdGlvbixcbiAgQWN0aW9uLFxuICBSZXNwb25zaXZpdHlNYW5hZ2VyLFxuICBBZGFwdGl2ZUFjdGlvbkNvbnRhaW5lclxufSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IGF0dGFjaEtleTJjbGljaywgUmVhY3RFbGVtZW50RmFjdG9yeSwgU3VydmV5RWxlbWVudEJhc2UgfSBmcm9tIFwic3VydmV5LXJlYWN0LXVpXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVRhYmJlZE1lbnVDb21wb25lbnRQcm9wcyB7XG4gIG1vZGVsOiBUYWJiZWRNZW51Q29udGFpbmVyO1xufVxuXG5leHBvcnQgY2xhc3MgVGFiYmVkTWVudUNvbXBvbmVudCBleHRlbmRzIFN1cnZleUVsZW1lbnRCYXNlPFxuICBJVGFiYmVkTWVudUNvbXBvbmVudFByb3BzLFxuICBhbnlcbj4ge1xuICBwcml2YXRlIG1hbmFnZXI6IFJlc3BvbnNpdml0eU1hbmFnZXI7XG4gIHByaXZhdGUgcm9vdFJlZjogUmVhY3QuUmVmT2JqZWN0PEhUTUxEaXZFbGVtZW50PjtcblxuICBwcml2YXRlIGdldCBtb2RlbCgpIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5tb2RlbDtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRTdGF0ZUVsZW1lbnQoKTogQmFzZSB7XG4gICAgcmV0dXJuIHRoaXMubW9kZWw7XG4gIH1cblxuICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLnJvb3RSZWYgPSBSZWFjdC5jcmVhdGVSZWYoKTtcbiAgfVxuXG4gIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIGNvbnN0IGl0ZW1zID0gdGhpcy5tb2RlbC5yZW5kZXJlZEFjdGlvbnMubWFwKChpdGVtKSA9PiA8VGFiYmVkTWVudUl0ZW1XcmFwcGVyIGl0ZW09e2l0ZW19IGtleT17aXRlbS5pZH0gLz4pO1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IHJlZj17dGhpcy5yb290UmVmfSBjbGFzc05hbWU9XCJzdmMtdGFiYmVkLW1lbnVcIj5cbiAgICAgICAge2l0ZW1zfVxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxuXG4gIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIHN1cGVyLmNvbXBvbmVudERpZE1vdW50KCk7XG4gICAgY29uc3QgY29udGFpbmVyOiBIVE1MRGl2RWxlbWVudCA9IHRoaXMucm9vdFJlZi5jdXJyZW50O1xuICAgIGlmICghY29udGFpbmVyKSByZXR1cm47XG4gICAgdGhpcy5tYW5hZ2VyID0gbmV3IFJlc3BvbnNpdml0eU1hbmFnZXIoXG4gICAgICBjb250YWluZXIsXG4gICAgICB0aGlzLm1vZGVsLFxuICAgICAgXCIuc3ZjLXRhYmJlZC1tZW51LWl0ZW0tY29udGFpbmVyOm5vdCguc3YtZG90cyk+LnN2LWFjdGlvbl9fY29udGVudFwiXG4gICAgKTtcbiAgfVxuICBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICB0aGlzLm1hbmFnZXIgJiYgKHRoaXMubWFuYWdlci5kaXNwb3NlKCkpO1xuICAgIHN1cGVyLmNvbXBvbmVudFdpbGxVbm1vdW50KCk7XG4gIH1cbn1cblxuY2xhc3MgVGFiYmVkTWVudUl0ZW1XcmFwcGVyIGV4dGVuZHMgU3VydmV5RWxlbWVudEJhc2U8XG4gIGFueSxcbiAgYW55XG4+IHtcblxuICBwcml2YXRlIGdldCBpdGVtKCkge1xuICAgIHJldHVybiB0aGlzLnByb3BzLml0ZW07XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0U3RhdGVFbGVtZW50KCk6IEJhc2Uge1xuICAgIHJldHVybiB0aGlzLml0ZW07XG4gIH1cblxuICByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICBsZXQgY3NzOiBzdHJpbmcgPSBcInN2Yy10YWJiZWQtbWVudS1pdGVtLWNvbnRhaW5lclwiO1xuICAgIGlmICh0aGlzLml0ZW0uY3NzKSB7XG4gICAgICBjc3MgKz0gXCIgXCIgKyB0aGlzLml0ZW0uY3NzO1xuICAgIH1cbiAgICBjc3MgKz0gKCF0aGlzLml0ZW0uaXNWaXNpYmxlID8gXCIgc3YtYWN0aW9uLS1oaWRkZW5cIiA6IFwiXCIpO1xuXG4gICAgY29uc3QgY29tcG9uZW50ID0gUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5jcmVhdGVFbGVtZW50KFxuICAgICAgdGhpcy5pdGVtLmNvbXBvbmVudCB8fCBcInN2Yy10YWJiZWQtbWVudS1pdGVtXCIsXG4gICAgICB7IGl0ZW06IHRoaXMuaXRlbSB9XG4gICAgKTtcblxuICAgIHJldHVybiAoXG4gICAgICA8c3BhbiBrZXk9e3RoaXMuaXRlbS5pZH0gY2xhc3NOYW1lPXtjc3N9PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2LWFjdGlvbl9fY29udGVudFwiPlxuICAgICAgICAgIHtjb21wb25lbnR9XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9zcGFuPlxuICAgICk7XG4gIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBJVGFiYmVkTWVudUl0ZW1Db21wb25lbnRQcm9wcyB7XG4gIGl0ZW06IEFjdGlvbjtcbn1cbmV4cG9ydCBjbGFzcyBUYWJiZWRNZW51SXRlbUNvbXBvbmVudCBleHRlbmRzIFN1cnZleUVsZW1lbnRCYXNlPFxuICBJVGFiYmVkTWVudUl0ZW1Db21wb25lbnRQcm9wcyxcbiAgYW55XG4+IHtcbiAgZ2V0IGl0ZW0oKTogQWN0aW9uIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5pdGVtO1xuICB9XG4gIHByb3RlY3RlZCBnZXRTdGF0ZUVsZW1lbnQoKTogQmFzZSB7XG4gICAgcmV0dXJuIHRoaXMuaXRlbTtcbiAgfVxuXG4gIHJlbmRlcigpOiBKU1guRWxlbWVudCB7XG4gICAgY29uc3QgaXRlbSA9IHRoaXMuaXRlbTtcbiAgICBsZXQgY2xhc3NOYW1lOiBzdHJpbmcgPSBcInN2Yy10YWJiZWQtbWVudS1pdGVtXCI7XG4gICAgaWYgKGl0ZW0uYWN0aXZlKSBjbGFzc05hbWUgKz0gXCIgc3ZjLXRhYmJlZC1tZW51LWl0ZW0tLXNlbGVjdGVkXCI7XG4gICAgaWYgKGl0ZW0uZW5hYmxlZCAhPT0gdW5kZWZpbmVkICYmICFpdGVtLmVuYWJsZWQpXG4gICAgICBjbGFzc05hbWUgKz0gXCIgc3ZjLXRhYmJlZC1tZW51LWl0ZW0tLWRpc2FibGVkXCI7XG4gICAgbGV0IHRpdGxlQ2xhc3NOYW1lOiBzdHJpbmcgPVxuICAgICAgXCJzdmMtdGV4dCBzdmMtdGFiYmVkLW1lbnUtaXRlbV9fdGV4dCBzdmMtdGV4dC0tbm9ybWFsXCI7XG4gICAgaWYgKGl0ZW0uYWN0aXZlKSB0aXRsZUNsYXNzTmFtZSArPSBcIiBzdmMtdGV4dC0tYm9sZFwiO1xuXG4gICAgcmV0dXJuIChhdHRhY2hLZXkyY2xpY2soXG4gICAgICA8ZGl2IGNsYXNzTmFtZT17Y2xhc3NOYW1lfSBvbkNsaWNrPXsoKSA9PiBpdGVtLmFjdGlvbihpdGVtKX0+XG4gICAgICAgIDxzcGFuIGNsYXNzTmFtZT17dGl0bGVDbGFzc05hbWV9PntpdGVtLnRpdGxlfTwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuICAgIClcbiAgICApO1xuICB9XG59XG5cblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFxuICBcInN2Yy10YWJiZWQtbWVudS1pdGVtXCIsXG4gIChwcm9wcykgPT4ge1xuICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFRhYmJlZE1lbnVJdGVtQ29tcG9uZW50LCBwcm9wcyk7XG4gIH1cbik7XG5leHBvcnQgZGVmYXVsdCBUYWJiZWRNZW51Q29tcG9uZW50O1xuIiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgQmFzZSwgUXVlc3Rpb24gfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7XG4gIGF0dGFjaEtleTJjbGljayxcbiAgUmVhY3RFbGVtZW50RmFjdG9yeVxufSBmcm9tIFwic3VydmV5LXJlYWN0LXVpXCI7XG5pbXBvcnQgeyBDcmVhdG9yTW9kZWxFbGVtZW50IH0gZnJvbSBcIi4uL01vZGVsRWxlbWVudFwiO1xuaW1wb3J0IHsgUXVlc3Rpb25BZG9ybmVyVmlld01vZGVsLCB0b2dnbGVIb3ZlcmVkIH0gZnJvbSBcInN1cnZleS1jcmVhdG9yLWNvcmVcIjtcbmltcG9ydCB7IFJlYWN0RHJhZ0V2ZW50LCBSZWFjdE1vdXNlRXZlbnQgfSBmcm9tIFwiLi4vZXZlbnRzXCI7XG5pbXBvcnQgeyBRdWVzdGlvbkFkb3JuZXJDb21wb25lbnRQcm9wcyB9IGZyb20gXCIuL1F1ZXN0aW9uXCI7XG5cbmV4cG9ydCBjbGFzcyBDZWxsUXVlc3Rpb25BZG9ybmVyQ29tcG9uZW50IGV4dGVuZHMgQ3JlYXRvck1vZGVsRWxlbWVudDxcbiAgUXVlc3Rpb25BZG9ybmVyQ29tcG9uZW50UHJvcHMsXG4gIGFueVxuPiB7XG4gIG1vZGVsOiBRdWVzdGlvbkFkb3JuZXJWaWV3TW9kZWw7XG4gIHByb3RlY3RlZCBjcmVhdGVNb2RlbCgpOiB2b2lkIHtcbiAgICB0aGlzLm1vZGVsID0gbmV3IFF1ZXN0aW9uQWRvcm5lclZpZXdNb2RlbChcbiAgICAgIHRoaXMucHJvcHMuY29tcG9uZW50RGF0YSxcbiAgICAgIHRoaXMucHJvcHMucXVlc3Rpb24sXG4gICAgICBudWxsXG4gICAgKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0U3RhdGVFbGVtZW50KCk6IEJhc2Uge1xuICAgIHJldHVybiB0aGlzLm1vZGVsO1xuICB9XG4gIHByb3RlY3RlZCBnZXRVcGRhdGVkTW9kZWxQcm9wcygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIFtcInF1ZXN0aW9uXCIsIFwiY29tcG9uZW50RGF0YVwiXTtcbiAgfVxuICByZW5kZXIoKTogSlNYLkVsZW1lbnQge1xuICAgIGlmICh0aGlzLm1vZGVsLmlzRHJhZ2dlZCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIChcbiAgICAgIDxSZWFjdC5GcmFnbWVudD5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGRhdGEtc3YtZHJvcC10YXJnZXQtc3VydmV5LWVsZW1lbnQ9e3RoaXMubW9kZWwuZWxlbWVudC5uYW1lfVxuICAgICAgICAgIGNsYXNzTmFtZT17XCJzdmMtcXVlc3Rpb25fX2Fkb3JuZXJcIn1cbiAgICAgICAgPlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtcIiBzdmMtcXVlc3Rpb25fX2NvbnRlbnQtLXNlbGVjdGVkLW5vLWJvcmRlciBzdmMtcXVlc3Rpb25fX2NvbnRlbnRcIn0+XG4gICAgICAgICAgICB7dGhpcy5wcm9wcy5lbGVtZW50fVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvUmVhY3QuRnJhZ21lbnQ+XG4gICAgKTtcbiAgfVxufVxuXG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcbiAgXCJzdmMtY2VsbC1xdWVzdGlvblwiLFxuICAocHJvcHM6IFF1ZXN0aW9uQWRvcm5lckNvbXBvbmVudFByb3BzKSA9PiB7XG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoQ2VsbFF1ZXN0aW9uQWRvcm5lckNvbXBvbmVudCwgcHJvcHMpO1xuICB9XG4pO1xuIiwiaW1wb3J0IHsgUXVlc3Rpb25BZG9ybmVyVmlld01vZGVsLCB0b2dnbGVIb3ZlcmVkIH0gZnJvbSBcInN1cnZleS1jcmVhdG9yLWNvcmVcIjtcbmltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFJlYWN0RHJhZ0V2ZW50LCBSZWFjdE1vdXNlRXZlbnQgfSBmcm9tIFwiLi4vZXZlbnRzXCI7XG5pbXBvcnQgeyBCYXNlLCBJdGVtVmFsdWUsIFF1ZXN0aW9uU2VsZWN0QmFzZSwgU3VydmV5TW9kZWwgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFJlYWN0RWxlbWVudEZhY3RvcnksIFJlYWN0U3VydmV5RWxlbWVudHNXcmFwcGVyIH0gZnJvbSBcInN1cnZleS1yZWFjdC11aVwiO1xuaW1wb3J0IHsgUXVlc3Rpb25BZG9ybmVyQ29tcG9uZW50UHJvcHMgfSBmcm9tIFwiLi9RdWVzdGlvblwiO1xuaW1wb3J0IHsgQ3JlYXRvck1vZGVsRWxlbWVudCB9IGZyb20gXCIuLi9Nb2RlbEVsZW1lbnRcIjtcbmltcG9ydCB7IGF0dGFjaEtleTJjbGljayB9IGZyb20gXCJzdXJ2ZXktcmVhY3QtdWlcIjtcblxuZXhwb3J0IGNsYXNzIENlbGxRdWVzdGlvbkRyb3Bkb3duQWRvcm5lckNvbXBvbmVudCBleHRlbmRzIENyZWF0b3JNb2RlbEVsZW1lbnQ8XG4gIFF1ZXN0aW9uQWRvcm5lckNvbXBvbmVudFByb3BzLFxuICBhbnlcbj4ge1xuICBtb2RlbDogUXVlc3Rpb25BZG9ybmVyVmlld01vZGVsO1xuICBwcm90ZWN0ZWQgY3JlYXRlTW9kZWwoKTogdm9pZCB7XG4gICAgdGhpcy5tb2RlbCA9IG5ldyBRdWVzdGlvbkFkb3JuZXJWaWV3TW9kZWwoXG4gICAgICB0aGlzLnByb3BzLmNvbXBvbmVudERhdGEsXG4gICAgICB0aGlzLnByb3BzLnF1ZXN0aW9uLFxuICAgICAgbnVsbFxuICAgICk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldFVwZGF0ZWRNb2RlbFByb3BzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gW1wicXVlc3Rpb25cIiwgXCJjb21wb25lbnREYXRhXCJdO1xuICB9XG4gIHByb3RlY3RlZCBnZXRTdGF0ZUVsZW1lbnQoKTogQmFzZSB7XG4gICAgcmV0dXJuIHRoaXMubW9kZWw7XG4gIH1cbiAgcmVuZGVyKCk6IEpTWC5FbGVtZW50IHtcbiAgICBpZiAodGhpcy5tb2RlbC5pc0RyYWdnZWQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBjb25zdCBxdWVzdGlvbiA9IHRoaXMucHJvcHMucXVlc3Rpb24gYXMgUXVlc3Rpb25TZWxlY3RCYXNlO1xuICAgIGNvbnN0IHRleHRTdHlsZSA9ICh0aGlzLnByb3BzLnF1ZXN0aW9uIGFzIGFueSkudGV4dFN0eWxlO1xuICAgIHJldHVybiAoXG4gICAgICA8UmVhY3QuRnJhZ21lbnQ+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBkYXRhLXN2LWRyb3AtdGFyZ2V0LXN1cnZleS1lbGVtZW50PXt0aGlzLm1vZGVsLmVsZW1lbnQubmFtZX1cbiAgICAgICAgICBjbGFzc05hbWU9e1wic3ZjLXF1ZXN0aW9uX19hZG9ybmVyXCJ9XG4gICAgICAgID5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17XCIgc3ZjLXF1ZXN0aW9uX19jb250ZW50LS1zZWxlY3RlZC1uby1ib3JkZXIgc3ZjLXF1ZXN0aW9uX19jb250ZW50XCJ9PlxuICAgICAgICAgICAge3RoaXMucHJvcHMuZWxlbWVudH1cblxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmMtcXVlc3Rpb25fX2Ryb3Bkb3duLWNob2ljZXNcIj5cbiAgICAgICAgICAgICAge3F1ZXN0aW9uLnZpc2libGVDaG9pY2VzLm1hcChcbiAgICAgICAgICAgICAgICAoaXRlbTogSXRlbVZhbHVlLCBpbmRleDogbnVtYmVyKSA9PiAoXG4gICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInN2Yy1xdWVzdGlvbl9fZHJvcGRvd24tY2hvaWNlXCJcbiAgICAgICAgICAgICAgICAgICAga2V5PXtgZWRpdGFibGVfY2hvaWNlXyR7aW5kZXh9YH1cbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAge1JlYWN0U3VydmV5RWxlbWVudHNXcmFwcGVyLndyYXBJdGVtVmFsdWUocXVlc3Rpb24uc3VydmV5IGFzIFN1cnZleU1vZGVsLFxuICAgICAgICAgICAgICAgICAgICAgIFJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UuY3JlYXRlRWxlbWVudChcbiAgICAgICAgICAgICAgICAgICAgICAgIFwic3VydmV5LXJhZGlvZ3JvdXAtaXRlbVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBxdWVzdGlvbjogcXVlc3Rpb24sXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNzc0NsYXNzZXM6IHF1ZXN0aW9uLmNzc0NsYXNzZXMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGlzRGlzcGxheU1vZGU6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW06IGl0ZW0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHRleHRTdHlsZTogdGV4dFN0eWxlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleDogaW5kZXgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGlzQ2hlY2tlZDogcXVlc3Rpb24udmFsdWUgPT09IGl0ZW0udmFsdWVcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgIHF1ZXN0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgIGl0ZW1cbiAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvUmVhY3QuRnJhZ21lbnQ+XG4gICAgKTtcbiAgfVxufVxuXG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcbiAgXCJzdmMtY2VsbC1kcm9wZG93bi1xdWVzdGlvblwiLFxuICAocHJvcHM6IFF1ZXN0aW9uQWRvcm5lckNvbXBvbmVudFByb3BzKSA9PiB7XG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoQ2VsbFF1ZXN0aW9uRHJvcGRvd25BZG9ybmVyQ29tcG9uZW50LCBwcm9wcyk7XG4gIH1cbik7XG4iLCJpbXBvcnQgeyBCYXNlLCBQYWdlTW9kZWwsIFN1cnZleU1vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQge1xuICBhdHRhY2hLZXkyY2xpY2ssXG4gIFBvcHVwLFxuICBTdXJ2ZXlBY3Rpb25CYXIsXG4gIFJlYWN0RWxlbWVudEZhY3RvcnksXG4gIFN1cnZleVBhZ2UsXG4gIFN2Z0ljb25cbn0gZnJvbSBcInN1cnZleS1yZWFjdC11aVwiO1xuaW1wb3J0IHsgQ3JlYXRvck1vZGVsRWxlbWVudCB9IGZyb20gXCIuLi9Nb2RlbEVsZW1lbnRcIjtcbmltcG9ydCB7XG4gIENyZWF0b3JCYXNlLFxuICBQYWdlQWRvcm5lcixcbiAgU3VydmV5SGVscGVyLFxuICB0b2dnbGVIb3ZlcmVkXG59IGZyb20gXCJzdXJ2ZXktY3JlYXRvci1jb3JlXCI7XG5pbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBSZWFjdE1vdXNlRXZlbnQgfSBmcm9tIFwiLi4vZXZlbnRzXCI7XG5cbmludGVyZmFjZSBJQ3JlYXRvclN1cnZleVBhZ2VDb21wb25lbnRQcm9wcyB7XG4gIGNyZWF0b3I6IENyZWF0b3JCYXNlO1xuICBzdXJ2ZXk6IFN1cnZleU1vZGVsO1xuICBwYWdlOiBQYWdlTW9kZWw7XG59XG5cbmV4cG9ydCBjbGFzcyBDcmVhdG9yU3VydmV5UGFnZUNvbXBvbmVudCBleHRlbmRzIENyZWF0b3JNb2RlbEVsZW1lbnQ8XG4gIElDcmVhdG9yU3VydmV5UGFnZUNvbXBvbmVudFByb3BzLFxuICBhbnlcbj4ge1xuICBwcml2YXRlIG1vZGVsOiBQYWdlQWRvcm5lcjtcbiAgcHJpdmF0ZSByb290UmVmOiBSZWFjdC5SZWZPYmplY3Q8SFRNTERpdkVsZW1lbnQ+O1xuICBjb25zdHJ1Y3Rvcihwcm9wczogSUNyZWF0b3JTdXJ2ZXlQYWdlQ29tcG9uZW50UHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgdGhpcy5yb290UmVmID0gUmVhY3QuY3JlYXRlUmVmKCk7XG4gIH1cbiAgcHJvdGVjdGVkIGNyZWF0ZU1vZGVsKCk6IHZvaWQge1xuICAgIHRoaXMubW9kZWwgPSBuZXcgUGFnZUFkb3JuZXIoXG4gICAgICB0aGlzLnByb3BzLmNyZWF0b3IsXG4gICAgICB0aGlzLnByb3BzLnBhZ2VcbiAgICApO1xuICB9XG4gIHByb3RlY3RlZCBnZXRVcGRhdGVkTW9kZWxQcm9wcygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIFtcImNyZWF0b3JcIiwgXCJwYWdlXCJdO1xuICB9XG4gIHByb3RlY3RlZCBnZXRTdGF0ZUVsZW1lbnQoKTogQmFzZSB7XG4gICAgcmV0dXJuIHRoaXMubW9kZWw7XG4gIH1cbiAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgc3VwZXIuY29tcG9uZW50RGlkTW91bnQoKTtcbiAgICB0aGlzLm1vZGVsLm9uUGFnZVNlbGVjdGVkQ2FsbGJhY2sgPSAoKSA9PiB7XG4gICAgICBpZiAoISF0aGlzLnJvb3RSZWYuY3VycmVudCkge1xuICAgICAgICBTdXJ2ZXlIZWxwZXIuc2Nyb2xsSW50b1ZpZXdJZk5lZWRlZCh0aGlzLnJvb3RSZWYuY3VycmVudCk7XG4gICAgICB9XG4gICAgfTtcbiAgfVxuICBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICBzdXBlci5jb21wb25lbnRXaWxsVW5tb3VudCgpO1xuICAgIHRoaXMubW9kZWwuZGlzcG9zZSgpO1xuICB9XG4gIHByb3RlY3RlZCBjYW5SZW5kZXIoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgICEhdGhpcy5tb2RlbCAmJlxuICAgICAgdGhpcy5tb2RlbC5pc1BhZ2VMaXZlICYmXG4gICAgICAhIXRoaXMubW9kZWwucGFnZSAmJlxuICAgICAgISF0aGlzLm1vZGVsLnBhZ2Uuc3VydmV5XG4gICAgKTtcbiAgfVxuICByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICBpZiAoIXRoaXMucHJvcHMucGFnZSkgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIChcbiAgICAgIGF0dGFjaEtleTJjbGljayg8ZGl2XG4gICAgICAgIHJlZj17dGhpcy5yb290UmVmfVxuICAgICAgICBjbGFzc05hbWU9e1wic3ZjLXBhZ2VfX2NvbnRlbnQgXCIgKyB0aGlzLm1vZGVsLmNzc31cbiAgICAgICAgaWQ9e3RoaXMucHJvcHMucGFnZS5pZH1cbiAgICAgICAgb25DbGljaz17KGUpID0+IHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5tb2RlbC5zZWxlY3QodGhpcy5tb2RlbCwgbmV3IFJlYWN0TW91c2VFdmVudChlKSk7XG4gICAgICAgIH19XG4gICAgICAgIG9uTW91c2VMZWF2ZT17KGUpID0+IHRoaXMubW9kZWwuaG92ZXIoZS5uYXRpdmVFdmVudCwgZS5jdXJyZW50VGFyZ2V0KX1cbiAgICAgICAgb25Nb3VzZU92ZXI9eyhlKSA9PiB0aGlzLm1vZGVsLmhvdmVyKGUubmF0aXZlRXZlbnQsIGUuY3VycmVudFRhcmdldCl9XG4gICAgICA+XG4gICAgICAgIHt0aGlzLnJlbmRlckhlYWRlcigpfVxuICAgICAgICB7dGhpcy5yZW5kZXJDb250ZW50KCl9XG4gICAgICAgIHt0aGlzLnJlbmRlckZvb3RlcigpfVxuICAgICAgPC9kaXY+KVxuICAgICk7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckNvbnRlbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIHJldHVybiAoPFN1cnZleVBhZ2UgcGFnZT17dGhpcy5wcm9wcy5wYWdlfSBzdXJ2ZXk9e3RoaXMucHJvcHMuc3VydmV5fSBjcmVhdG9yPXt0aGlzLnByb3BzLmNyZWF0b3J9IGNzcz17dGhpcy5tb2RlbC5jc3N9PjwvU3VydmV5UGFnZT4pO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJIZWFkZXIoKTogSlNYLkVsZW1lbnQge1xuICAgIHJldHVybiAoPGRpdiBjbGFzc05hbWU9XCJzdmMtcGFnZV9fY29udGVudC1hY3Rpb25zXCI+XG4gICAgICA8U3VydmV5QWN0aW9uQmFyIG1vZGVsPXt0aGlzLm1vZGVsLmFjdGlvbkNvbnRhaW5lcn0+PC9TdXJ2ZXlBY3Rpb25CYXI+XG4gICAgPC9kaXY+KTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyRm9vdGVyKCk6IEpTWC5FbGVtZW50IHtcbiAgICBpZiAoIXRoaXMubW9kZWwuc2hvd0FkZFF1ZXN0aW9uQnV0dG9uKSByZXR1cm4gbnVsbDtcbiAgICBjb25zdCBxdWVzdGlvblR5cGVTZWxlY3Rvck1vZGVsID0gdGhpcy5tb2RlbC5xdWVzdGlvblR5cGVTZWxlY3Rvck1vZGVsO1xuICAgIHJldHVybiBhdHRhY2hLZXkyY2xpY2soPGRpdlxuICAgICAgY2xhc3NOYW1lPVwic3ZjLXBhZ2VfX2FkZC1uZXctcXVlc3Rpb24gc3ZjLWJ0blwiXG4gICAgICBvbkNsaWNrPXsoZSkgPT4ge1xuICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICB0aGlzLm1vZGVsLmFkZE5ld1F1ZXN0aW9uKHRoaXMubW9kZWwsIG5ldyBSZWFjdE1vdXNlRXZlbnQoZSkpO1xuICAgICAgfX1cbiAgICAgIG9uTW91c2VPdmVyPXsoZSkgPT4gdGhpcy5tb2RlbC5ob3ZlclN0b3BwZXIoZS5uYXRpdmVFdmVudCwgZS5jdXJyZW50VGFyZ2V0KX1cbiAgICA+XG4gICAgICA8c3BhbiBjbGFzc05hbWU9XCJzdmMtdGV4dCBzdmMtdGV4dC0tbm9ybWFsIHN2Yy10ZXh0LS1ib2xkXCI+XG4gICAgICAgIHt0aGlzLm1vZGVsLmFkZE5ld1F1ZXN0aW9uVGV4dH1cbiAgICAgIDwvc3Bhbj5cblxuICAgICAge2F0dGFjaEtleTJjbGljayg8YnV0dG9uXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICBvbkNsaWNrPXsoZSkgPT4ge1xuICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgcXVlc3Rpb25UeXBlU2VsZWN0b3JNb2RlbC5hY3Rpb24oKTtcbiAgICAgICAgfX1cbiAgICAgICAgY2xhc3NOYW1lPVwic3ZjLXBhZ2VfX3F1ZXN0aW9uLXR5cGUtc2VsZWN0b3JcIlxuICAgICAgICB0aXRsZT17dGhpcy5tb2RlbC5hZGROZXdRdWVzdGlvblRleHR9XG4gICAgICA+XG4gICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInN2Yy1wYWdlX19xdWVzdGlvbi10eXBlLXNlbGVjdG9yLWljb25cIj5cbiAgICAgICAgICA8U3ZnSWNvblxuICAgICAgICAgICAgaWNvbk5hbWU9e3F1ZXN0aW9uVHlwZVNlbGVjdG9yTW9kZWwuaWNvbk5hbWV9XG4gICAgICAgICAgICBzaXplPXsyNH1cbiAgICAgICAgICAgIHRpdGxlPXt0aGlzLm1vZGVsLmFkZE5ld1F1ZXN0aW9uVGV4dH1cbiAgICAgICAgICA+PC9TdmdJY29uPlxuICAgICAgICA8L3NwYW4+XG4gICAgICAgIDxQb3B1cCBtb2RlbD17cXVlc3Rpb25UeXBlU2VsZWN0b3JNb2RlbC5wb3B1cE1vZGVsfT48L1BvcHVwPlxuICAgICAgPC9idXR0b24+KX1cbiAgICA8L2Rpdj4pO1xuICB9XG59XG5cblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFwic3ZjLXBhZ2VcIiwgKHByb3BzKSA9PiB7XG4gIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KENyZWF0b3JTdXJ2ZXlQYWdlQ29tcG9uZW50LCBwcm9wcyk7XG59KTtcbiIsImltcG9ydCB7IFF1ZXN0aW9uQWRvcm5lclZpZXdNb2RlbCwgdG9nZ2xlSG92ZXJlZCB9IGZyb20gXCJzdXJ2ZXktY3JlYXRvci1jb3JlXCI7XG5pbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBSZWFjdERyYWdFdmVudCwgUmVhY3RNb3VzZUV2ZW50IH0gZnJvbSBcIi4uL2V2ZW50c1wiO1xuaW1wb3J0IHsgQmFzZSwgUXVlc3Rpb24gfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7XG4gIFN1cnZleUFjdGlvbkJhcixcbiAgUmVhY3RFbGVtZW50RmFjdG9yeSxcbiAgU3VydmV5RWxlbWVudEJhc2UsXG4gIFN1cnZleVF1ZXN0aW9uLFxuICBhdHRhY2hLZXkyY2xpY2ssXG4gIFN2Z0ljb24sXG4gIFBvcHVwXG59IGZyb20gXCJzdXJ2ZXktcmVhY3QtdWlcIjtcbmltcG9ydCB7IFF1ZXN0aW9uQWRvcm5lckNvbXBvbmVudCwgUXVlc3Rpb25BZG9ybmVyQ29tcG9uZW50UHJvcHMgfSBmcm9tIFwiLi9RdWVzdGlvblwiO1xuXG5leHBvcnQgY2xhc3MgUGFuZWxBZG9ybmVyQ29tcG9uZW50IGV4dGVuZHMgUXVlc3Rpb25BZG9ybmVyQ29tcG9uZW50IHtcbiAgcmVuZGVyRWxlbWVudFBsYWNlaG9sZGVyKCk6IEpTWC5FbGVtZW50IHtcbiAgICBpZiAoIXRoaXMubW9kZWwuaXNFbXB0eUVsZW1lbnQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmMtcGFuZWxfX3BsYWNlaG9sZGVyX2ZyYW1lXCI+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3ZjLXBhbmVsX19wbGFjZWhvbGRlclwiPlxuICAgICAgICAgIHt0aGlzLm1vZGVsLnBsYWNlaG9sZGVyVGV4dH1cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIHt0aGlzLm1vZGVsLnNob3dBZGRRdWVzdGlvbkJ1dHRvbiA/IGF0dGFjaEtleTJjbGljayg8ZGl2XG4gICAgICAgICAgY2xhc3NOYW1lPVwic3ZjLXBhbmVsX19hZGQtbmV3LXF1ZXN0aW9uIHN2Yy1hY3Rpb24tYnV0dG9uXCJcbiAgICAgICAgICBvbkNsaWNrPXsoZSkgPT4ge1xuICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgIHRoaXMubW9kZWwuYWRkTmV3UXVlc3Rpb24oKTtcbiAgICAgICAgICB9fVxuICAgICAgICA+XG4gICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwic3ZjLXRleHQgc3ZjLXRleHQtLW5vcm1hbCBzdmMtdGV4dC0tYm9sZFwiPlxuICAgICAgICAgICAge3RoaXMubW9kZWwuYWRkTmV3UXVlc3Rpb25UZXh0fVxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC9kaXY+KSA6IG51bGx9XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJGb290ZXIoKTogSlNYLkVsZW1lbnQge1xuICAgIHJldHVybiAoPFJlYWN0LkZyYWdtZW50PlxuICAgICAgeyF0aGlzLm1vZGVsLmlzRW1wdHlFbGVtZW50ICYmIHRoaXMubW9kZWwuZWxlbWVudC5pc1BhbmVsICYmIHRoaXMubW9kZWwuc2hvd0FkZFF1ZXN0aW9uQnV0dG9uID8gYXR0YWNoS2V5MmNsaWNrKFxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2Yy1wYW5lbF9fYWRkLW5ldy1xdWVzdGlvbi1jb250YWluZXJcIj5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzc05hbWU9XCJzdmMtcGFuZWxfX2FkZC1uZXctcXVlc3Rpb24gc3ZjLWFjdGlvbi1idXR0b25cIlxuICAgICAgICAgICAgb25DbGljaz17KGUpID0+IHtcbiAgICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgICAgdGhpcy5tb2RlbC5hZGROZXdRdWVzdGlvbigpO1xuICAgICAgICAgICAgfX1cbiAgICAgICAgICA+XG4gICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJzdmMtdGV4dCBzdmMtdGV4dC0tbm9ybWFsIHN2Yy10ZXh0LS1ib2xkXCI+XG4gICAgICAgICAgICAgIHt0aGlzLm1vZGVsLmFkZE5ld1F1ZXN0aW9uVGV4dH1cbiAgICAgICAgICAgIDwvc3Bhbj5cblxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIHthdHRhY2hLZXkyY2xpY2soPGJ1dHRvblxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICBvbkNsaWNrPXsoZSkgPT4ge1xuICAgICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgICB0aGlzLm1vZGVsLnF1ZXN0aW9uVHlwZVNlbGVjdG9yTW9kZWwuYWN0aW9uKCk7XG4gICAgICAgICAgICB9fVxuICAgICAgICAgICAgY2xhc3NOYW1lPVwic3ZjLXBhbmVsX19xdWVzdGlvbi10eXBlLXNlbGVjdG9yXCJcbiAgICAgICAgICAgIHRpdGxlPXt0aGlzLm1vZGVsLmFkZE5ld1F1ZXN0aW9uVGV4dH1cbiAgICAgICAgICA+XG4gICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJzdmMtcGFuZWxfX3F1ZXN0aW9uLXR5cGUtc2VsZWN0b3ItaWNvblwiPlxuICAgICAgICAgICAgICA8U3ZnSWNvblxuICAgICAgICAgICAgICAgIGljb25OYW1lPXt0aGlzLm1vZGVsLnF1ZXN0aW9uVHlwZVNlbGVjdG9yTW9kZWwuaWNvbk5hbWV9XG4gICAgICAgICAgICAgICAgc2l6ZT17MjR9XG4gICAgICAgICAgICAgID48L1N2Z0ljb24+XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICA8UG9wdXAgbW9kZWw9e3RoaXMubW9kZWwucXVlc3Rpb25UeXBlU2VsZWN0b3JNb2RlbC5wb3B1cE1vZGVsfT48L1BvcHVwPlxuICAgICAgICAgIDwvYnV0dG9uPil9XG4gICAgICAgIDwvZGl2PikgOiBudWxsfVxuXG4gICAgICB7c3VwZXIucmVuZGVyRm9vdGVyKCl9XG4gICAgPC9SZWFjdC5GcmFnbWVudD4pO1xuICB9XG59XG5cblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFxuICBcInN2Yy1wYW5lbFwiLFxuICAocHJvcHM6IFF1ZXN0aW9uQWRvcm5lckNvbXBvbmVudFByb3BzKSA9PiB7XG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoUGFuZWxBZG9ybmVyQ29tcG9uZW50LCBwcm9wcyk7XG4gIH1cbik7XG4iLCJpbXBvcnQgeyBRdWVzdGlvbkFkb3JuZXJWaWV3TW9kZWwsIHRvZ2dsZUhvdmVyZWQgfSBmcm9tIFwic3VydmV5LWNyZWF0b3ItY29yZVwiO1xuaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgUmVhY3REcmFnRXZlbnQsIFJlYWN0TW91c2VFdmVudCB9IGZyb20gXCIuLi9ldmVudHNcIjtcbmltcG9ydCB7IEJhc2UsIFF1ZXN0aW9uIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQge1xuICBTdXJ2ZXlBY3Rpb25CYXIsXG4gIFJlYWN0RWxlbWVudEZhY3RvcnksXG4gIFN1cnZleVF1ZXN0aW9uLFxuICBhdHRhY2hLZXkyY2xpY2ssXG4gIFN2Z0ljb24sXG4gIFBvcHVwXG59IGZyb20gXCJzdXJ2ZXktcmVhY3QtdWlcIjtcbmltcG9ydCB7IENyZWF0b3JNb2RlbEVsZW1lbnQgfSBmcm9tIFwiLi4vTW9kZWxFbGVtZW50XCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUXVlc3Rpb25BZG9ybmVyQ29tcG9uZW50UHJvcHMge1xuICBlbGVtZW50OiBKU1guRWxlbWVudDtcbiAgcXVlc3Rpb246IFF1ZXN0aW9uO1xuICBjb21wb25lbnREYXRhOiBhbnk7XG59XG5cbmV4cG9ydCBjbGFzcyBRdWVzdGlvbkFkb3JuZXJDb21wb25lbnQgZXh0ZW5kcyBDcmVhdG9yTW9kZWxFbGVtZW50PFxuICBRdWVzdGlvbkFkb3JuZXJDb21wb25lbnRQcm9wcyxcbiAgYW55XG4+IHtcbiAgcHJpdmF0ZSBtb2RlbFZhbHVlOiBRdWVzdGlvbkFkb3JuZXJWaWV3TW9kZWw7XG4gIHByb3RlY3RlZCByb290UmVmOiBSZWFjdC5SZWZPYmplY3Q8SFRNTERpdkVsZW1lbnQ+O1xuXG4gIHByb3RlY3RlZCBjcmVhdGVNb2RlbCgpOiB2b2lkIHtcbiAgICB0aGlzLm1vZGVsVmFsdWUgPSB0aGlzLmNyZWF0ZVF1ZXN0aW9uVmlld01vZGVsKCk7XG4gIH1cbiAgcHJvdGVjdGVkIGNyZWF0ZVF1ZXN0aW9uVmlld01vZGVsKCk6IFF1ZXN0aW9uQWRvcm5lclZpZXdNb2RlbCB7XG4gICAgcmV0dXJuIG5ldyBRdWVzdGlvbkFkb3JuZXJWaWV3TW9kZWwoXG4gICAgICB0aGlzLnByb3BzLmNvbXBvbmVudERhdGEsXG4gICAgICB0aGlzLnByb3BzLnF1ZXN0aW9uLFxuICAgICAgbnVsbFxuICAgICk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldFVwZGF0ZWRNb2RlbFByb3BzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gW1wicXVlc3Rpb25cIiwgXCJjb21wb25lbnREYXRhXCJdO1xuICB9XG4gIHB1YmxpYyBnZXQgbW9kZWwoKTogUXVlc3Rpb25BZG9ybmVyVmlld01vZGVsIHtcbiAgICByZXR1cm4gdGhpcy5tb2RlbFZhbHVlO1xuICB9XG4gIHByb3RlY3RlZCBnZXRTdGF0ZUVsZW1lbnQoKTogQmFzZSB7XG4gICAgcmV0dXJuIHRoaXMubW9kZWw7XG4gIH1cbiAgcHJvdGVjdGVkIGNhblJlbmRlcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gc3VwZXIuY2FuUmVuZGVyKCkgJiYgIXRoaXMubW9kZWwuaXNEcmFnZ2VkO1xuICB9XG5cbiAgcmVuZGVyRWxlbWVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgY29uc3QgYWxsb3dJbnRlcmFjdGlvbnMgPSB0aGlzLm1vZGVsLmVsZW1lbnRcbiAgICAgIC5pc0ludGVyYWN0aXZlRGVzaWduRWxlbWVudDtcbiAgICBjb25zdCBjb250ZW50ID0gdGhpcy5yZW5kZXJDb250ZW50KGFsbG93SW50ZXJhY3Rpb25zKTtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdlxuICAgICAgICByZWY9e3RoaXMucm9vdFJlZn1cbiAgICAgICAgZGF0YS1zdi1kcm9wLXRhcmdldC1zdXJ2ZXktZWxlbWVudD17dGhpcy5tb2RlbC5lbGVtZW50Lm5hbWUgfHwgbnVsbH1cbiAgICAgICAgY2xhc3NOYW1lPXtcInN2Yy1xdWVzdGlvbl9fYWRvcm5lclwiICsgdGhpcy5tb2RlbC5yb290Q3NzKCl9XG4gICAgICAgIG9uTW91c2VPdXQ9e2UgPT4gYWxsb3dJbnRlcmFjdGlvbnMgJiYgdGhpcy5tb2RlbC5ob3ZlcihlLm5hdGl2ZUV2ZW50LCBlLmN1cnJlbnRUYXJnZXQpfVxuICAgICAgICBvbk1vdXNlT3Zlcj17ZSA9PiBhbGxvd0ludGVyYWN0aW9ucyAmJiB0aGlzLm1vZGVsLmhvdmVyKGUubmF0aXZlRXZlbnQsIGUuY3VycmVudFRhcmdldCl9XG4gICAgICA+XG4gICAgICAgIHtjb250ZW50fVxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyQ29udGVudChhbGxvd0ludGVyYWN0aW9uczogYm9vbGVhbik6IEpTWC5FbGVtZW50IHtcbiAgICB2YXIgY29udGVudCA9IHRoaXMucmVuZGVyRWxlbWVudENvbnRlbnQoKTtcbiAgICBpZiAoIWFsbG93SW50ZXJhY3Rpb25zKSByZXR1cm4gPD57IGNvbnRlbnQgfXt0aGlzLnJlbmRlckZvb3RlcigpfTwvPjtcbiAgICByZXR1cm4gYXR0YWNoS2V5MmNsaWNrKFxuICAgICAgPGRpdlxuICAgICAgICBjbGFzc05hbWU9e1wic3ZjLXF1ZXN0aW9uX19jb250ZW50IFwiICsgdGhpcy5tb2RlbC5jc3MoKX1cbiAgICAgICAgb25DbGljaz17KGUpID0+IHRoaXMubW9kZWwuc2VsZWN0KHRoaXMubW9kZWwsIG5ldyBSZWFjdE1vdXNlRXZlbnQoZSkpfVxuICAgICAgPlxuICAgICAgICB7dGhpcy5yZW5kZXJIZWFkZXIoKX1cbiAgICAgICAge2NvbnRlbnR9XG4gICAgICAgIHt0aGlzLnJlbmRlckZvb3RlcigpfVxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVySGVhZGVyKCk6IEpTWC5FbGVtZW50IHtcbiAgICByZXR1cm4gUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5jcmVhdGVFbGVtZW50KFwic3ZjLXF1ZXN0aW9uLWhlYWRlclwiLCB7IG1vZGVsOiB0aGlzLm1vZGVsIH0pO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJGb290ZXIoKTogSlNYLkVsZW1lbnQge1xuICAgIHJldHVybiBSZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLmNyZWF0ZUVsZW1lbnQoXCJzdmMtcXVlc3Rpb24tZm9vdGVyXCIsIHsgY2xhc3NOYW1lOiBcInN2Yy1xdWVzdGlvbl9fY29udGVudC1hY3Rpb25zXCIsIG1vZGVsOiB0aGlzLm1vZGVsIH0pO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJFbGVtZW50Q29udGVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgcmV0dXJuIChcbiAgICAgIDw+XG4gICAgICAgIHt0aGlzLnByb3BzLmVsZW1lbnR9XG4gICAgICAgIHt0aGlzLnJlbmRlckVsZW1lbnRQbGFjZWhvbGRlcigpfVxuICAgICAgPC8+XG4gICAgKTtcbiAgfVxuICByZW5kZXJFbGVtZW50UGxhY2Vob2xkZXIoKTogSlNYLkVsZW1lbnQge1xuICAgIGlmICghdGhpcy5tb2RlbC5pc0VtcHR5RWxlbWVudCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2Yy1wYW5lbF9fcGxhY2Vob2xkZXJfZnJhbWVcIj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmMtcGFuZWxfX3BsYWNlaG9sZGVyXCI+XG4gICAgICAgICAge3RoaXMubW9kZWwucGxhY2Vob2xkZXJUZXh0fVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbn1cblxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXG4gIFwic3ZjLXF1ZXN0aW9uXCIsXG4gIChwcm9wczogUXVlc3Rpb25BZG9ybmVyQ29tcG9uZW50UHJvcHMpID0+IHtcbiAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChRdWVzdGlvbkFkb3JuZXJDb21wb25lbnQsIHByb3BzKTtcbiAgfVxuKTtcbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFF1ZXN0aW9uRHJvcGRvd25BZG9ybmVyVmlld01vZGVsIH0gZnJvbSBcInN1cnZleS1jcmVhdG9yLWNvcmVcIjtcbmltcG9ydCB7IEl0ZW1WYWx1ZSwgUXVlc3Rpb25Ecm9wZG93bk1vZGVsLCBRdWVzdGlvblNlbGVjdEJhc2UsIFN1cnZleU1vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBSZWFjdEVsZW1lbnRGYWN0b3J5LCBSZWFjdFN1cnZleUVsZW1lbnRzV3JhcHBlciB9IGZyb20gXCJzdXJ2ZXktcmVhY3QtdWlcIjtcbmltcG9ydCB7XG4gIFF1ZXN0aW9uQWRvcm5lckNvbXBvbmVudCxcbiAgUXVlc3Rpb25BZG9ybmVyQ29tcG9uZW50UHJvcHNcbn0gZnJvbSBcIi4vUXVlc3Rpb25cIjtcbmltcG9ydCB7IEFjdGlvbkJ1dHRvbiB9IGZyb20gXCIuLi9BY3Rpb25CdXR0b25cIjtcblxuZXhwb3J0IGNsYXNzIFF1ZXN0aW9uRHJvcGRvd25BZG9ybmVyQ29tcG9uZW50IGV4dGVuZHMgUXVlc3Rpb25BZG9ybmVyQ29tcG9uZW50IHtcbiAgY29uc3RydWN0b3IocHJvcHM6IFF1ZXN0aW9uQWRvcm5lckNvbXBvbmVudFByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICB9XG4gIHByb3RlY3RlZCBjcmVhdGVRdWVzdGlvblZpZXdNb2RlbCgpOiBRdWVzdGlvbkRyb3Bkb3duQWRvcm5lclZpZXdNb2RlbCB7XG4gICAgcmV0dXJuIG5ldyBRdWVzdGlvbkRyb3Bkb3duQWRvcm5lclZpZXdNb2RlbChcbiAgICAgIHRoaXMucHJvcHMuY29tcG9uZW50RGF0YSxcbiAgICAgIHRoaXMucHJvcHMucXVlc3Rpb24gYXMgUXVlc3Rpb25Ecm9wZG93bk1vZGVsLFxuICAgICAgbnVsbFxuICAgICk7XG4gIH1cbiAgcHVibGljIGdldCBkcm9wZG93bk1vZGVsKCk6IFF1ZXN0aW9uRHJvcGRvd25BZG9ybmVyVmlld01vZGVsIHtcbiAgICByZXR1cm4gdGhpcy5tb2RlbCBhcyBRdWVzdGlvbkRyb3Bkb3duQWRvcm5lclZpZXdNb2RlbDtcbiAgfVxuICBwdWJsaWMgZ2V0IHF1ZXN0aW9uKCk6IFF1ZXN0aW9uU2VsZWN0QmFzZSB7XG4gICAgcmV0dXJuIHRoaXMuZHJvcGRvd25Nb2RlbC5xdWVzdGlvbiBhcyBRdWVzdGlvblNlbGVjdEJhc2U7XG4gIH1cblxuICByZW5kZXJFbGVtZW50UGxhY2Vob2xkZXIoKTogSlNYLkVsZW1lbnQge1xuICAgIGNvbnN0IHRleHRTdHlsZSA9ICh0aGlzLnF1ZXN0aW9uIGFzIGFueSkudGV4dFN0eWxlO1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzTmFtZT1cInN2Yy1xdWVzdGlvbl9fZHJvcGRvd24tY2hvaWNlcy0td3JhcHBlclwiPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2Yy1xdWVzdGlvbl9fZHJvcGRvd24tY2hvaWNlc1wiPlxuICAgICAgICAgIHsodGhpcy5kcm9wZG93bk1vZGVsLmdldFJlbmRlcmVkSXRlbXMoKSB8fCBbXSkubWFwKFxuICAgICAgICAgICAgKGl0ZW06IEl0ZW1WYWx1ZSwgaW5kZXg6IG51bWJlcikgPT4gKFxuICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPXt0aGlzLmRyb3Bkb3duTW9kZWwuZ2V0Q2hvaWNlQ3NzKCl9XG4gICAgICAgICAgICAgICAga2V5PXtgZWRpdGFibGVfY2hvaWNlXyR7aW5kZXh9YH1cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIHtSZWFjdFN1cnZleUVsZW1lbnRzV3JhcHBlci53cmFwSXRlbVZhbHVlKHRoaXMucXVlc3Rpb24uc3VydmV5IGFzIFN1cnZleU1vZGVsLFxuICAgICAgICAgICAgICAgICAgUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5jcmVhdGVFbGVtZW50KFxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRyb3Bkb3duTW9kZWwuaXRlbUNvbXBvbmVudCxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgIHF1ZXN0aW9uOiB0aGlzLnF1ZXN0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgIGNzc0NsYXNzZXM6IHRoaXMucXVlc3Rpb24uY3NzQ2xhc3NlcyxcbiAgICAgICAgICAgICAgICAgICAgICBpc0Rpc3BsYXlNb2RlOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgIGl0ZW06IGl0ZW0sXG4gICAgICAgICAgICAgICAgICAgICAgdGV4dFN0eWxlOiB0ZXh0U3R5bGUsXG4gICAgICAgICAgICAgICAgICAgICAgaW5kZXg6IGluZGV4LFxuICAgICAgICAgICAgICAgICAgICAgIGlzQ2hlY2tlZDogdGhpcy5xdWVzdGlvbi52YWx1ZSA9PT0gaXRlbS52YWx1ZVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgdGhpcy5xdWVzdGlvbixcbiAgICAgICAgICAgICAgICAgIGl0ZW1cbiAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIClcbiAgICAgICAgICApfVxuICAgICAgICA8L2Rpdj5cbiAgICAgICAge3RoaXMuZHJvcGRvd25Nb2RlbC5uZWVkVG9Db2xsYXBzZSA/XG4gICAgICAgICAgPEFjdGlvbkJ1dHRvblxuICAgICAgICAgICAgY2xpY2s9e3RoaXMuZHJvcGRvd25Nb2RlbC5zd2l0Y2hDb2xsYXBzZX1cbiAgICAgICAgICAgIHRleHQ9e3RoaXMuZHJvcGRvd25Nb2RlbC5nZXRCdXR0b25UZXh0KCl9XG4gICAgICAgICAgICBhbGxvd0J1YmJsZT17dHJ1ZX1cbiAgICAgICAgICA+PC9BY3Rpb25CdXR0b24+IDpcbiAgICAgICAgICBudWxsXG4gICAgICAgIH1cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbn1cblxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXG4gIFwic3ZjLWRyb3Bkb3duLXF1ZXN0aW9uXCIsXG4gIChwcm9wczogUXVlc3Rpb25BZG9ybmVyQ29tcG9uZW50UHJvcHMpID0+IHtcbiAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChRdWVzdGlvbkRyb3Bkb3duQWRvcm5lckNvbXBvbmVudCwgcHJvcHMpO1xuICB9XG4pO1xuIiwiaW1wb3J0IHsgUXVlc3Rpb25BZG9ybmVyVmlld01vZGVsLCB0b2dnbGVIb3ZlcmVkIH0gZnJvbSBcInN1cnZleS1jcmVhdG9yLWNvcmVcIjtcbmltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFJlYWN0RHJhZ0V2ZW50LCBSZWFjdE1vdXNlRXZlbnQgfSBmcm9tIFwiLi4vZXZlbnRzXCI7XG5pbXBvcnQgeyBCYXNlLCBRdWVzdGlvbiB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHtcbiAgU3VydmV5QWN0aW9uQmFyLFxuICBSZWFjdEVsZW1lbnRGYWN0b3J5LFxuICBTdXJ2ZXlFbGVtZW50QmFzZSxcbiAgU3VydmV5UXVlc3Rpb24sXG4gIGF0dGFjaEtleTJjbGljayxcbiAgU3ZnSWNvbixcbiAgUG9wdXBcbn0gZnJvbSBcInN1cnZleS1yZWFjdC11aVwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIFF1ZXN0aW9uV3JhcHBlckZvb3RlclByb3BzIHtcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xuICBtb2RlbDogUXVlc3Rpb25BZG9ybmVyVmlld01vZGVsO1xufVxuZXhwb3J0IGNsYXNzIFF1ZXN0aW9uV3JhcHBlckZvb3RlciBleHRlbmRzIFJlYWN0LkNvbXBvbmVudDxRdWVzdGlvbldyYXBwZXJGb290ZXJQcm9wcywgYW55PiB7XG4gIHJlbmRlcigpOiBKU1guRWxlbWVudCB7XG4gICAgcmV0dXJuICg8ZGl2IGNsYXNzTmFtZT17dGhpcy5wcm9wcy5jbGFzc05hbWV9PlxuICAgICAgPFN1cnZleUFjdGlvbkJhciBtb2RlbD17dGhpcy5wcm9wcy5tb2RlbC5hY3Rpb25Db250YWluZXJ9IGhhbmRsZUNsaWNrPXtmYWxzZX0+PC9TdXJ2ZXlBY3Rpb25CYXI+XG4gICAgPC9kaXY+KTtcbiAgfVxufVxuXG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcbiAgXCJzdmMtcXVlc3Rpb24tZm9vdGVyXCIsXG4gIChwcm9wczogUXVlc3Rpb25XcmFwcGVyRm9vdGVyUHJvcHMpID0+IHtcbiAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChRdWVzdGlvbldyYXBwZXJGb290ZXIsIHByb3BzKTtcbiAgfVxuKTtcblxuIiwiaW1wb3J0IHsgUXVlc3Rpb25BZG9ybmVyVmlld01vZGVsLCB0b2dnbGVIb3ZlcmVkIH0gZnJvbSBcInN1cnZleS1jcmVhdG9yLWNvcmVcIjtcbmltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFJlYWN0RHJhZ0V2ZW50LCBSZWFjdE1vdXNlRXZlbnQgfSBmcm9tIFwiLi4vZXZlbnRzXCI7XG5pbXBvcnQgeyBCYXNlLCBRdWVzdGlvbiB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHtcbiAgU3VydmV5QWN0aW9uQmFyLFxuICBSZWFjdEVsZW1lbnRGYWN0b3J5LFxuICBTdXJ2ZXlFbGVtZW50QmFzZSxcbiAgU3VydmV5UXVlc3Rpb24sXG4gIGF0dGFjaEtleTJjbGljayxcbiAgU3ZnSWNvbixcbiAgUG9wdXBcbn0gZnJvbSBcInN1cnZleS1yZWFjdC11aVwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIFF1ZXN0aW9uV3JhcHBlckhlYWRlclByb3BzIHtcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xuICBtb2RlbDogUXVlc3Rpb25BZG9ybmVyVmlld01vZGVsO1xufVxuXG5leHBvcnQgY2xhc3MgUXVlc3Rpb25XcmFwcGVySGVhZGVyIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50PFF1ZXN0aW9uV3JhcHBlckhlYWRlclByb3BzLCBhbnk+IHtcbiAgcmVuZGVyKCk6IEpTWC5FbGVtZW50IHtcbiAgICBpZiAoIXRoaXMucHJvcHMubW9kZWwuYWxsb3dEcmFnZ2luZykgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtcInN2Yy1xdWVzdGlvbl9fZHJhZy1hcmVhXCJ9XG4gICAgICAgIG9uUG9pbnRlckRvd249eyhldmVudDogYW55KSA9PlxuICAgICAgICAgIHRoaXMucHJvcHMubW9kZWwub25Qb2ludGVyRG93bihldmVudClcbiAgICAgICAgfVxuICAgICAgPlxuICAgICAgICA8U3ZnSWNvbiBjbGFzc05hbWU9XCJzdmMtcXVlc3Rpb25fX2RyYWctZWxlbWVudFwiIHNpemU9ezI0fSBpY29uTmFtZT17XCJpY29uLWRyYWctYXJlYS1pbmRpY2F0b3JfMjR4MTZcIn0+PC9TdmdJY29uPlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxufVxuXG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcbiAgXCJzdmMtcXVlc3Rpb24taGVhZGVyXCIsXG4gIChwcm9wczogUXVlc3Rpb25XcmFwcGVySGVhZGVyUHJvcHMpID0+IHtcbiAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChRdWVzdGlvbldyYXBwZXJIZWFkZXIsIHByb3BzKTtcbiAgfVxuKTtcbiIsImltcG9ydCB7XG4gIFF1ZXN0aW9uSW1hZ2VBZG9ybmVyVmlld01vZGVsLFxuICBRdWVzdGlvbkFkb3JuZXJWaWV3TW9kZWxcbn0gZnJvbSBcInN1cnZleS1jcmVhdG9yLWNvcmVcIjtcbmltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IGF0dGFjaEtleTJjbGljaywgUmVhY3RFbGVtZW50RmFjdG9yeSwgU3ZnSWNvbiB9IGZyb20gXCJzdXJ2ZXktcmVhY3QtdWlcIjtcbmltcG9ydCB7XG4gIFF1ZXN0aW9uQWRvcm5lckNvbXBvbmVudCxcbiAgUXVlc3Rpb25BZG9ybmVyQ29tcG9uZW50UHJvcHNcbn0gZnJvbSBcIi4vUXVlc3Rpb25cIjtcblxuZXhwb3J0IGNsYXNzIFF1ZXN0aW9uSW1hZ2VBZG9ybmVyQ29tcG9uZW50IGV4dGVuZHMgUXVlc3Rpb25BZG9ybmVyQ29tcG9uZW50IHtcbiAgY29uc3RydWN0b3IocHJvcHM6IFF1ZXN0aW9uQWRvcm5lckNvbXBvbmVudFByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMucm9vdFJlZiA9IFJlYWN0LmNyZWF0ZVJlZigpO1xuICB9XG4gIHByb3RlY3RlZCBjcmVhdGVRdWVzdGlvblZpZXdNb2RlbCgpOiBRdWVzdGlvbkFkb3JuZXJWaWV3TW9kZWwge1xuICAgIHJldHVybiBuZXcgUXVlc3Rpb25JbWFnZUFkb3JuZXJWaWV3TW9kZWwoXG4gICAgICB0aGlzLnByb3BzLmNvbXBvbmVudERhdGEsXG4gICAgICB0aGlzLnByb3BzLnF1ZXN0aW9uIGFzIGFueSxcbiAgICAgIG51bGwsXG4gICAgICBudWxsXG4gICAgKTtcbiAgfVxuICBwdWJsaWMgZ2V0IGltYWdlTW9kZWwoKTogUXVlc3Rpb25JbWFnZUFkb3JuZXJWaWV3TW9kZWwge1xuICAgIHJldHVybiB0aGlzLm1vZGVsIGFzIFF1ZXN0aW9uSW1hZ2VBZG9ybmVyVmlld01vZGVsO1xuICB9XG4gIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIHN1cGVyLmNvbXBvbmVudERpZE1vdW50KCk7XG4gICAgdGhpcy5pbWFnZU1vZGVsLnF1ZXN0aW9uUm9vdCA9IHRoaXMucm9vdFJlZi5jdXJyZW50O1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJIZWFkZXIoKTogSlNYLkVsZW1lbnQge1xuICAgIHJldHVybiAoPFJlYWN0LkZyYWdtZW50PlxuICAgICAgPGlucHV0XG4gICAgICAgIHR5cGU9XCJmaWxlXCJcbiAgICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCJcbiAgICAgICAgdGFiSW5kZXg9ey0xfVxuICAgICAgICBhY2NlcHQ9XCJpbWFnZS8qXCJcbiAgICAgICAgY2xhc3NOYW1lPVwic3ZjLWNob29zZS1maWxlLWlucHV0XCJcbiAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICBwb3NpdGlvbjogXCJhYnNvbHV0ZVwiLFxuICAgICAgICAgIG9wYWNpdHk6IDAsXG4gICAgICAgICAgd2lkdGg6IFwiMXB4XCIsXG4gICAgICAgICAgaGVpZ2h0OiBcIjFweFwiLFxuICAgICAgICAgIG92ZXJmbG93OiBcImhpZGRlblwiXG4gICAgICAgIH19XG4gICAgICAvPlxuXG4gICAgICB7c3VwZXIucmVuZGVySGVhZGVyKCl9XG4gICAgPC9SZWFjdC5GcmFnbWVudD4pO1xuICB9XG4gIHJlbmRlckVsZW1lbnRQbGFjZWhvbGRlcigpOiBKU1guRWxlbWVudCB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3ZjLWltYWdlLXF1ZXN0aW9uLWNvbnRyb2xzXCI+XG4gICAgICAgIHt0aGlzLm1vZGVsLmFsbG93RWRpdCA/IGF0dGFjaEtleTJjbGljayg8c3BhblxuICAgICAgICAgIGNsYXNzTmFtZT1cInN2Yy1pbWFnZS1xdWVzdGlvbi1jb250cm9sc19fYnV0dG9uIHN2Yy1pbWFnZS1xdWVzdGlvbi1jb250cm9sc19fY2hvb3NlLWZpbGVcIlxuICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHRoaXMuaW1hZ2VNb2RlbC5jaG9vc2VGaWxlKHRoaXMuaW1hZ2VNb2RlbCl9XG4gICAgICAgID5cbiAgICAgICAgICA8U3ZnSWNvbiBzaXplPXsyNH0gaWNvbk5hbWU9e1wiaWNvbi1maWxlXCJ9PjwvU3ZnSWNvbj5cbiAgICAgICAgPC9zcGFuPikgOiBudWxsfVxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxufVxuXG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcbiAgXCJzdmMtaW1hZ2UtcXVlc3Rpb25cIixcbiAgKHByb3BzOiBRdWVzdGlvbkFkb3JuZXJDb21wb25lbnRQcm9wcykgPT4ge1xuICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFF1ZXN0aW9uSW1hZ2VBZG9ybmVyQ29tcG9uZW50LCBwcm9wcyk7XG4gIH1cbik7XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBCYXNlIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBRdWVzdGlvblJhdGluZ0Fkb3JuZXJWaWV3TW9kZWwgfSBmcm9tIFwic3VydmV5LWNyZWF0b3ItY29yZVwiO1xuaW1wb3J0IHsgYXR0YWNoS2V5MmNsaWNrLCBSZWFjdEVsZW1lbnRGYWN0b3J5LCBTdmdJY29uIH0gZnJvbSBcInN1cnZleS1yZWFjdC11aVwiO1xuaW1wb3J0IHsgUXVlc3Rpb25BZG9ybmVyQ29tcG9uZW50UHJvcHMgfSBmcm9tIFwiLi9RdWVzdGlvblwiO1xuaW1wb3J0IHsgQ3JlYXRvck1vZGVsRWxlbWVudCB9IGZyb20gXCIuLi9Nb2RlbEVsZW1lbnRcIjtcblxuZXhwb3J0IGNsYXNzIFF1ZXN0aW9uUmF0aW5nQWRvcm5lckNvbXBvbmVudCBleHRlbmRzIENyZWF0b3JNb2RlbEVsZW1lbnQ8UXVlc3Rpb25BZG9ybmVyQ29tcG9uZW50UHJvcHMsIGFueT4ge1xuICBwcml2YXRlIG1vZGVsVmFsdWU6IFF1ZXN0aW9uUmF0aW5nQWRvcm5lclZpZXdNb2RlbDtcblxuICBwcm90ZWN0ZWQgY3JlYXRlTW9kZWwoKTogdm9pZCB7XG4gICAgdGhpcy5tb2RlbFZhbHVlID0gdGhpcy5jcmVhdGVRdWVzdGlvblZpZXdNb2RlbCgpO1xuICB9XG4gIHByb3RlY3RlZCBjcmVhdGVRdWVzdGlvblZpZXdNb2RlbCgpOiBRdWVzdGlvblJhdGluZ0Fkb3JuZXJWaWV3TW9kZWwge1xuICAgIHJldHVybiBuZXcgUXVlc3Rpb25SYXRpbmdBZG9ybmVyVmlld01vZGVsKFxuICAgICAgdGhpcy5wcm9wcy5jb21wb25lbnREYXRhLFxuICAgICAgdGhpcy5wcm9wcy5xdWVzdGlvbiBhcyBhbnksXG4gICAgICBudWxsXG4gICAgKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0VXBkYXRlZE1vZGVsUHJvcHMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBbXCJxdWVzdGlvblwiLCBcImNvbXBvbmVudERhdGFcIl07XG4gIH1cbiAgcHVibGljIGdldCByYXRpbmdNb2RlbCgpOiBRdWVzdGlvblJhdGluZ0Fkb3JuZXJWaWV3TW9kZWwge1xuICAgIHJldHVybiB0aGlzLm1vZGVsIGFzIFF1ZXN0aW9uUmF0aW5nQWRvcm5lclZpZXdNb2RlbDtcbiAgfVxuICBwdWJsaWMgZ2V0IG1vZGVsKCk6IFF1ZXN0aW9uUmF0aW5nQWRvcm5lclZpZXdNb2RlbCB7XG4gICAgcmV0dXJuIHRoaXMubW9kZWxWYWx1ZTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0U3RhdGVFbGVtZW50KCk6IEJhc2Uge1xuICAgIHJldHVybiB0aGlzLm1vZGVsO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICBjb25zdCBtb2RlbCA9IHRoaXMucmF0aW5nTW9kZWw7XG4gICAgcmV0dXJuICg8PlxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmMtcmF0aW5nLXF1ZXN0aW9uLWNvbnRlbnRcIj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmMtcmF0aW5nLXF1ZXN0aW9uLWNvbnRyb2xzIHN2Yy1pdGVtLXZhbHVlLWNvbnRyb2xzXCI+XG4gICAgICAgICAge21vZGVsLmFsbG93UmVtb3ZlID8gYXR0YWNoS2V5MmNsaWNrKDxzcGFuXG4gICAgICAgICAgICBjbGFzc05hbWU9XCJzdmMtaXRlbS12YWx1ZS1jb250cm9sc19fYnV0dG9uIHN2Yy1pdGVtLXZhbHVlLWNvbnRyb2xzX19yZW1vdmVcIlxuICAgICAgICAgICAgYXJpYS1sYWJlbD17bW9kZWwucmVtb3ZlVG9vbHRpcH1cbiAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IG1vZGVsLnJlbW92ZUl0ZW0obW9kZWwpfVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxTdmdJY29uIHNpemU9ezE2fSBpY29uTmFtZT17XCJpY29uLXJlbW92ZV8xNngxNlwifSB0aXRsZT17bW9kZWwucmVtb3ZlVG9vbHRpcH0+PC9TdmdJY29uPlxuICAgICAgICAgIDwvc3Bhbj4pIDogbnVsbH1cbiAgICAgICAgICB7bW9kZWwuYWxsb3dBZGQgPyBhdHRhY2hLZXkyY2xpY2soPHNwYW5cbiAgICAgICAgICAgIGNsYXNzTmFtZT1cInN2Yy1pdGVtLXZhbHVlLWNvbnRyb2xzX19idXR0b24gc3ZjLWl0ZW0tdmFsdWUtY29udHJvbHNfX2FkZFwiXG4gICAgICAgICAgICBhcmlhLWxhYmVsPXttb2RlbC5hZGRUb29sdGlwfVxuICAgICAgICAgICAgb25DbGljaz17KCkgPT4gbW9kZWwuYWRkSXRlbShtb2RlbCl9XG4gICAgICAgICAgPlxuICAgICAgICAgICAgPFN2Z0ljb24gc2l6ZT17MTZ9IGljb25OYW1lPXtcImljb24tYWRkXzE2eDE2XCJ9IHRpdGxlPXttb2RlbC5hZGRUb29sdGlwfT48L1N2Z0ljb24+XG4gICAgICAgICAgPC9zcGFuPikgOiBudWxsfVxuICAgICAgICA8L2Rpdj5cbiAgICAgICAge3RoaXMucHJvcHMuZWxlbWVudH1cbiAgICAgIDwvZGl2PlxuICAgIDwvPik7XG4gIH1cbn1cblxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXG4gIFwic3ZjLXJhdGluZy1xdWVzdGlvblwiLFxuICAocHJvcHM6IFF1ZXN0aW9uQWRvcm5lckNvbXBvbmVudFByb3BzKSA9PiB7XG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoUXVlc3Rpb25SYXRpbmdBZG9ybmVyQ29tcG9uZW50LCBwcm9wcyk7XG4gIH1cbik7XG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcbiAgXCJzdmMtcmF0aW5nLXF1ZXN0aW9uLWNvbnRlbnRcIixcbiAgKHByb3BzOiBRdWVzdGlvbkFkb3JuZXJDb21wb25lbnRQcm9wcykgPT4ge1xuICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFF1ZXN0aW9uUmF0aW5nQWRvcm5lckNvbXBvbmVudCwgcHJvcHMpO1xuICB9XG4pO1xuIiwiaW1wb3J0IHtcbiAgUXVlc3Rpb25BZG9ybmVyVmlld01vZGVsXG59IGZyb20gXCJzdXJ2ZXktY3JlYXRvci1jb3JlXCI7XG5pbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQge1xuICBRdWVzdGlvbkFkb3JuZXJDb21wb25lbnQsXG4gIFF1ZXN0aW9uQWRvcm5lckNvbXBvbmVudFByb3BzXG59IGZyb20gXCIuL1F1ZXN0aW9uXCI7XG5pbXBvcnQgeyBhdHRhY2hLZXkyY2xpY2ssIFJlYWN0RWxlbWVudEZhY3RvcnksIFN2Z0ljb24gfSBmcm9tIFwic3VydmV5LXJlYWN0LXVpXCI7XG5cbmV4cG9ydCBjbGFzcyBRdWVzdGlvbldpZGdldEFkb3JuZXJDb21wb25lbnQgZXh0ZW5kcyBRdWVzdGlvbkFkb3JuZXJDb21wb25lbnQge1xuICBwcm90ZWN0ZWQgY3JlYXRlUXVlc3Rpb25WaWV3TW9kZWwoKTogUXVlc3Rpb25BZG9ybmVyVmlld01vZGVsIHtcbiAgICByZXR1cm4gbmV3IFF1ZXN0aW9uQWRvcm5lclZpZXdNb2RlbChcbiAgICAgIHRoaXMucHJvcHMuY29tcG9uZW50RGF0YSxcbiAgICAgIHRoaXMucHJvcHMucXVlc3Rpb24gYXMgYW55LFxuICAgICAgbnVsbFxuICAgICk7XG4gIH1cbiAgcHVibGljIGdldCB3aWRnZXRNb2RlbCgpOiBRdWVzdGlvbkFkb3JuZXJWaWV3TW9kZWwge1xuICAgIHJldHVybiB0aGlzLm1vZGVsIGFzIFF1ZXN0aW9uQWRvcm5lclZpZXdNb2RlbDtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyRWxlbWVudENvbnRlbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzTmFtZT17XCJzdmMtd2lkZ2V0X19jb250ZW50XCJ9XG4gICAgICA+XG4gICAgICAgIHt0aGlzLnByb3BzLmVsZW1lbnR9XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG59XG5cblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFxuICBcInN2Yy13aWRnZXQtcXVlc3Rpb25cIixcbiAgKHByb3BzOiBRdWVzdGlvbkFkb3JuZXJDb21wb25lbnRQcm9wcykgPT4ge1xuICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFF1ZXN0aW9uV2lkZ2V0QWRvcm5lckNvbXBvbmVudCwgcHJvcHMpO1xuICB9XG4pO1xuIiwiaW1wb3J0IHsgUm93Vmlld01vZGVsIH0gZnJvbSBcInN1cnZleS1jcmVhdG9yLWNvcmVcIjtcbmltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IEJhc2UsIFF1ZXN0aW9uUm93TW9kZWwgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFJlYWN0RWxlbWVudEZhY3RvcnkgfSBmcm9tIFwic3VydmV5LXJlYWN0LXVpXCI7XG5pbXBvcnQgeyBDcmVhdG9yTW9kZWxFbGVtZW50IH0gZnJvbSBcIi4uL01vZGVsRWxlbWVudFwiO1xuXG5pbnRlcmZhY2UgUm93V3JhcHBlckNvbXBvbmVudFByb3BzIHtcbiAgZWxlbWVudDogSlNYLkVsZW1lbnQ7XG4gIGNvbXBvbmVudERhdGE6IGFueTtcbiAgcm93OiBRdWVzdGlvblJvd01vZGVsO1xufVxuXG5leHBvcnQgY2xhc3MgUm93V3JhcHBlciBleHRlbmRzIENyZWF0b3JNb2RlbEVsZW1lbnQ8XG4gIFJvd1dyYXBwZXJDb21wb25lbnRQcm9wcyxcbiAgYW55XG4+IHtcbiAgbW9kZWw6IFJvd1ZpZXdNb2RlbDtcbiAgY29uc3RydWN0b3IocHJvcHM6IFJvd1dyYXBwZXJDb21wb25lbnRQcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgfVxuICBwcm90ZWN0ZWQgY3JlYXRlTW9kZWwoKTogdm9pZCB7XG4gICAgdGhpcy5tb2RlbCA9IG5ldyBSb3dWaWV3TW9kZWwoXG4gICAgICB0aGlzLnByb3BzLmNvbXBvbmVudERhdGEuY3JlYXRvcixcbiAgICAgIHRoaXMucHJvcHMucm93LFxuICAgICAgbnVsbFxuICAgICk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldFVwZGF0ZWRNb2RlbFByb3BzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gW1wicm93XCIsIFwiY29tcG9uZW50RGF0YVwiXTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0U3RhdGVFbGVtZW50KCk6IEJhc2Uge1xuICAgIHJldHVybiB0aGlzLm1vZGVsO1xuICB9XG5cbiAgcmVuZGVyKCk6IEpTWC5FbGVtZW50IHtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdlxuICAgICAgICBrZXk9e1wic3ZjLXJvdy1cIiArIHRoaXMucHJvcHMucm93LmlkfVxuICAgICAgICBjbGFzc05hbWU9e3RoaXMubW9kZWwuY3NzQ2xhc3Nlc31cbiAgICAgID5cbiAgICAgICAge3RoaXMucHJvcHMuZWxlbWVudH1cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbn1cblxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXG4gIFwic3ZjLXJvd1wiLFxuICAocHJvcHM6IFJvd1dyYXBwZXJDb21wb25lbnRQcm9wcykgPT4ge1xuICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFJvd1dyYXBwZXIsIHByb3BzKTtcbiAgfVxuKTtcbiIsImRlY2xhcmUgdmFyIFJlZmxlY3Q6YW55O1xuXG5leHBvcnQgdmFyIF9fZGVjb3JhdGUgPSBmdW5jdGlvbihcbiAgZGVjb3JhdG9yczogYW55LFxuICB0YXJnZXQ6IGFueSxcbiAga2V5OiBhbnksXG4gIGRlc2M6IGFueVxuKSB7XG4gIHZhciBjID0gYXJndW1lbnRzLmxlbmd0aCxcbiAgICByID1cbiAgICAgIGMgPCAzXG4gICAgICAgID8gdGFyZ2V0XG4gICAgICAgIDogZGVzYyA9PT0gbnVsbFxuICAgICAgICAgID8gKGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwga2V5KSlcbiAgICAgICAgICA6IGRlc2MsXG4gICAgZDtcbiAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0LmRlY29yYXRlID09PSBcImZ1bmN0aW9uXCIpXG4gICAgciA9IFJlZmxlY3QuZGVjb3JhdGUoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpO1xuICBlbHNlXG4gICAgZm9yICh2YXIgaSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pXG4gICAgICBpZiAoKGQgPSBkZWNvcmF0b3JzW2ldKSlcbiAgICAgICAgciA9IChjIDwgMyA/IGQocikgOiBjID4gMyA/IGQodGFyZ2V0LCBrZXksIHIpIDogZCh0YXJnZXQsIGtleSkpIHx8IHI7XG4gIHJldHVybiBjID4gMyAmJiByICYmIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgciksIHI7XG59O1xuXG5leHBvcnQgdmFyIF9fYXNzaWduID1cbiAgT2JqZWN0W1wiYXNzaWduXCJdIHx8XG4gIGZ1bmN0aW9uKHRhcmdldCkge1xuICAgIGZvciAodmFyIHMsIGkgPSAxLCBuID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IG47IGkrKykge1xuICAgICAgcyA9IGFyZ3VtZW50c1tpXTtcbiAgICAgIGZvciAodmFyIHAgaW4gcylcbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSkgdGFyZ2V0W3BdID0gc1twXTtcbiAgICB9XG4gICAgcmV0dXJuIHRhcmdldDtcbiAgfTtcblxuZXhwb3J0IGZ1bmN0aW9uIF9fZXh0ZW5kcyh0aGlzQ2xhc3MsIGJhc2VDbGFzcykge1xuICBmb3IgKHZhciBwIGluIGJhc2VDbGFzcylcbiAgICBpZiAoYmFzZUNsYXNzLmhhc093blByb3BlcnR5KHApKSB0aGlzQ2xhc3NbcF0gPSBiYXNlQ2xhc3NbcF07XG4gIGZ1bmN0aW9uIF9fKCkge1xuICAgIHRoaXMuY29uc3RydWN0b3IgPSB0aGlzQ2xhc3M7XG4gIH1cbiAgdGhpc0NsYXNzLnByb3RvdHlwZSA9XG4gICAgYmFzZUNsYXNzID09PSBudWxsXG4gICAgICA/IE9iamVjdC5jcmVhdGUoYmFzZUNsYXNzKVxuICAgICAgOiAoKF9fLnByb3RvdHlwZSA9IGJhc2VDbGFzcy5wcm90b3R5cGUpLCBuZXcgX18oKSk7XG59XG5cbmV4cG9ydCB2YXIgX19zcHJlYWRBcnJheXMgPSBmdW5jdGlvbiAoKSB7XG4gIGZvciAodmFyIHMgPSAwLCBpID0gMCwgaWwgPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgaWw7IGkrKykgcyArPSBhcmd1bWVudHNbaV0ubGVuZ3RoO1xuICBmb3IgKHZhciByID0gQXJyYXkocyksIGsgPSAwLCBpID0gMDsgaSA8IGlsOyBpKyspXG4gICAgZm9yICh2YXIgYSA9IGFyZ3VtZW50c1tpXSwgaiA9IDAsIGpsID0gYS5sZW5ndGg7IGogPCBqbDsgaisrLCBrKyspXG4gICAgICByW2tdID0gYVtqXTtcbiAgcmV0dXJuIHI7XG59O1xuIiwiZXhwb3J0IGxldCBWZXJzaW9uOiBzdHJpbmc7XG5WZXJzaW9uID0gYCR7cHJvY2Vzcy5lbnYuVkVSU0lPTn1gO1xuXG4vLyBpbXBvcnQgXCJAc3VydmV5L2NyZWF0b3Ivc3VydmV5LWNyZWF0b3ItY29yZS5jc3NcIjtcblxuZXhwb3J0ICogZnJvbSBcIi4uL1N1cnZleUNyZWF0b3JcIjtcblxuZXhwb3J0ICogZnJvbSBcIi4uL2Fkb3JuZXJzL1Jvd1wiO1xuZXhwb3J0ICogZnJvbSBcIi4uL2Fkb3JuZXJzL1F1ZXN0aW9uXCI7XG5leHBvcnQgKiBmcm9tIFwiLi4vYWRvcm5lcnMvUXVlc3Rpb25IZWFkZXJcIjtcbmV4cG9ydCAqIGZyb20gXCIuLi9hZG9ybmVycy9RdWVzdGlvbkZvb3RlclwiO1xuZXhwb3J0ICogZnJvbSBcIi4uL2Fkb3JuZXJzL1F1ZXN0aW9uRHJvcGRvd25cIjtcbmV4cG9ydCAqIGZyb20gXCIuLi9hZG9ybmVycy9RdWVzdGlvbkltYWdlXCI7XG5leHBvcnQgKiBmcm9tIFwiLi4vYWRvcm5lcnMvUXVlc3Rpb25SYXRpbmdcIjtcbmV4cG9ydCAqIGZyb20gXCIuLi9hZG9ybmVycy9RdWVzdGlvbldpZGdldFwiO1xuZXhwb3J0ICogZnJvbSBcIi4uL2Fkb3JuZXJzL0NlbGxRdWVzdGlvblwiO1xuZXhwb3J0ICogZnJvbSBcIi4uL2Fkb3JuZXJzL0NlbGxRdWVzdGlvbkRyb3Bkb3duXCI7XG5leHBvcnQgKiBmcm9tIFwiLi4vYWRvcm5lcnMvUGFnZVwiO1xuZXhwb3J0ICogZnJvbSBcIi4uL2Fkb3JuZXJzL1BhbmVsXCI7XG5cbmV4cG9ydCAqIGZyb20gXCIuLi9Mb2dvSW1hZ2VcIjtcbmV4cG9ydCAqIGZyb20gXCIuLi9RdWVzdGlvbkxpbmtWYWx1ZVwiO1xuZXhwb3J0ICogZnJvbSBcIi4uL1F1ZXN0aW9uRW1iZWRkZWRTdXJ2ZXlcIjtcbmV4cG9ydCAqIGZyb20gXCIuLi9RdWVzdGlvbkVkaXRvckNvbnRlbnRcIjtcbmV4cG9ydCAqIGZyb20gXCIuLi9JdGVtVmFsdWVXcmFwcGVyXCI7XG5leHBvcnQgKiBmcm9tIFwiLi4vSW1hZ2VJdGVtVmFsdWVXcmFwcGVyXCI7XG5leHBvcnQgKiBmcm9tIFwiLi4vTWF0cml4Q2VsbFdyYXBwZXJcIjtcbmV4cG9ydCAqIGZyb20gXCIuLi9SZXN1bHRzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi4vdG9vbGJveC9Ub29sYm94SXRlbVwiO1xuZXhwb3J0ICogZnJvbSBcIi4uL3Rvb2xib3gvVG9vbGJveENhdGVnb3J5XCI7XG5leHBvcnQgKiBmcm9tIFwiLi4vdG9vbGJveC9Ub29sYm94XCI7XG5leHBvcnQgKiBmcm9tIFwiLi4vdG9vbGJveC9BZGFwdGl2ZVRvb2xib3hcIjtcbmV4cG9ydCAqIGZyb20gXCIuLi9UYWJiZWRNZW51XCI7XG5leHBvcnQgKiBmcm9tIFwiLi4vTm90aWZpZXJcIjtcbmV4cG9ydCAqIGZyb20gXCIuLi9OYXZpZ2F0aW9uXCI7XG5leHBvcnQgKiBmcm9tIFwiLi4vU2lkZUJhclwiO1xuZXhwb3J0ICogZnJvbSBcIi4uL3RhYnMvVHJhbnNsYXRpb25MaW5lU2tlbGV0b25cIjtcbmV4cG9ydCAqIGZyb20gXCIuLi9BY3Rpb25CdXR0b25cIjtcbmV4cG9ydCAqIGZyb20gXCIuLi9TdHJpbmdFZGl0b3JcIjtcblxuZXhwb3J0ICogZnJvbSBcIi4uL3RhYnMvbG9naWMtb3BlcmF0b3JcIjtcbmV4cG9ydCAqIGZyb20gXCIuLi90YWJzL0Rlc2lnbmVyXCI7XG5leHBvcnQgKiBmcm9tIFwiLi4vdGFicy9FbWJlZFwiO1xuZXhwb3J0ICogZnJvbSBcIi4uL3RhYnMvSnNvbkVkaXRvckFjZVwiO1xuZXhwb3J0ICogZnJvbSBcIi4uL3RhYnMvSnNvbkVkaXRvclRleHRhcmVhXCI7XG5leHBvcnQgKiBmcm9tIFwiLi4vdGFicy9Mb2dpY1wiO1xuZXhwb3J0ICogZnJvbSBcIi4uL3RhYnMvUHJldmlld1wiO1xuZXhwb3J0ICogZnJvbSBcIi4uL3RhYnMvVHJhbnNsYXRpb25cIjtcbmV4cG9ydCAqIGZyb20gXCIuLi90YWJzL1N1cnZleVNpbXVsYXRvclwiO1xuXG5leHBvcnQgKiBmcm9tIFwiLi4vZXZlbnRzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi4vT2JqZWN0U2VsZWN0b3JcIjtcbmV4cG9ydCAqIGZyb20gXCIuLi9Qcm9wZXJ0eUdyaWRcIjtcblxuZXhwb3J0IHsgZWRpdG9yTG9jYWxpemF0aW9uLCBsb2NhbGl6YXRpb24gfSBmcm9tIFwic3VydmV5LWNyZWF0b3ItY29yZVwiO1xuZXhwb3J0IHsgc2V0dGluZ3MgfSBmcm9tIFwic3VydmV5LWNyZWF0b3ItY29yZVwiO1xuZXhwb3J0IHsgc3ZnQnVuZGxlIH0gZnJvbSBcInN1cnZleS1jcmVhdG9yLWNvcmVcIjtcbmV4cG9ydCB7IFN1cnZleUxvZ2ljLCBTdXJ2ZXlMb2dpY1VJIH0gZnJvbSBcInN1cnZleS1jcmVhdG9yLWNvcmVcIjtcbmV4cG9ydCB7IFN1cnZleVF1ZXN0aW9uRWRpdG9yRGVmaW5pdGlvbiB9IGZyb20gXCJzdXJ2ZXktY3JlYXRvci1jb3JlXCI7XG5leHBvcnQgeyBJU3VydmV5Q3JlYXRvck9wdGlvbnMsIElQcm9wZXJ0eUdyaWRFZGl0b3IgfSBmcm9tIFwic3VydmV5LWNyZWF0b3ItY29yZVwiO1xuZXhwb3J0IHsgVG9vbGJveFRvb2xWaWV3TW9kZWwsIFByb3BlcnR5R3JpZEVkaXRvckNvbGxlY3Rpb24gfSBmcm9tIFwic3VydmV5LWNyZWF0b3ItY29yZVwiO1xuZXhwb3J0IHsgU3R5bGVzTWFuYWdlciB9IGZyb20gXCJzdXJ2ZXktY3JlYXRvci1jb3JlXCI7XG5cbmltcG9ydCB7IGNoZWNrTGlicmFyeVZlcnNpb24gfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmNoZWNrTGlicmFyeVZlcnNpb24oYCR7cHJvY2Vzcy5lbnYuVkVSU0lPTn1gLCBcInN1cnZleS1jcmVhdG9yLXJlYWN0XCIpOyIsImltcG9ydCB7IElQb3J0YWJsZURyYWdFdmVudCwgSVBvcnRhYmxlTW91c2VFdmVudCB9IGZyb20gXCJzdXJ2ZXktY3JlYXRvci1jb3JlXCI7XG5cbmV4cG9ydCBjbGFzcyBSZWFjdE1vdXNlRXZlbnQgaW1wbGVtZW50cyBJUG9ydGFibGVNb3VzZUV2ZW50IHtcbiAgY29uc3RydWN0b3IocHVibGljIGV2ZW50OiBSZWFjdC5Nb3VzZUV2ZW50PEhUTUxEaXZFbGVtZW50LCBNb3VzZUV2ZW50Pikge31cbiAgc3RvcFByb3BhZ2F0aW9uKCkge1xuICAgIHRoaXMuZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgLy90aGlzLmV2ZW50Lm5hdGl2ZUV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIC8vdGhpcy5ldmVudC5uYXRpdmVFdmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcbiAgfVxuICBwcmV2ZW50RGVmYXVsdCgpIHtcbiAgICB0aGlzLmV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgLy90aGlzLmV2ZW50Lm5hdGl2ZUV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gIH1cbiAgZ2V0IGNhbmNlbEJ1YmJsZSgpOiBib29sZWFuIHtcbiAgICAvL3JldHVybiB0aGlzLmV2ZW50LmNhbmNlbEJ1YmJsZTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgc2V0IGNhbmNlbEJ1YmJsZSh2YWx1ZTogYm9vbGVhbikge1xuICAgIC8vdGhpcy5ldmVudC5jYW5jZWxCdWJibGUgPSB2YWx1ZTtcbiAgfVxuICBnZXQgdGFyZ2V0KCk6IEV2ZW50VGFyZ2V0IHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuZXZlbnQudGFyZ2V0O1xuICB9XG4gIGdldCBjdXJyZW50VGFyZ2V0KCk6IEV2ZW50VGFyZ2V0IHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuZXZlbnQuY3VycmVudFRhcmdldDtcbiAgfVxuICBnZXQgY2xpZW50WCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmV2ZW50LmNsaWVudFg7XG4gIH1cbiAgZ2V0IGNsaWVudFkoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5ldmVudC5jbGllbnRZO1xuICB9XG4gIGdldCBvZmZzZXRYKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuZXZlbnQubmF0aXZlRXZlbnQub2Zmc2V0WDtcbiAgfVxuICBnZXQgb2Zmc2V0WSgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmV2ZW50Lm5hdGl2ZUV2ZW50Lm9mZnNldFk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFJlYWN0RHJhZ0V2ZW50IGV4dGVuZHMgUmVhY3RNb3VzZUV2ZW50XG4gIGltcGxlbWVudHMgSVBvcnRhYmxlRHJhZ0V2ZW50IHtcbiAgY29uc3RydWN0b3IocHVibGljIGV2ZW50OiBSZWFjdC5EcmFnRXZlbnQ8SFRNTERpdkVsZW1lbnQ+KSB7XG4gICAgc3VwZXIoZXZlbnQpO1xuICB9XG5cbiAgZ2V0IGRhdGFUcmFuc2ZlcigpOiBEYXRhVHJhbnNmZXIge1xuICAgIHJldHVybiB0aGlzLmV2ZW50LmRhdGFUcmFuc2ZlcjtcbiAgfVxufVxuIiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgQmFzZSwgU3VydmV5TW9kZWwsIFBhZ2VNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHtcbiAgUmVhY3RFbGVtZW50RmFjdG9yeSxcbiAgU3VydmV5RWxlbWVudEJhc2UsXG4gIFN1cnZleUhlYWRlclxufSBmcm9tIFwic3VydmV5LXJlYWN0LXVpXCI7XG5pbXBvcnQgeyBDcmVhdG9yQmFzZSwgVGFiRGVzaWduZXJWaWV3TW9kZWwgfSBmcm9tIFwic3VydmV5LWNyZWF0b3ItY29yZVwiO1xuaW1wb3J0IHsgU3VydmV5UGFnZU5hdmlnYXRvciB9IGZyb20gXCIuLi9QYWdlTmF2aWdhdG9yXCI7XG5pbXBvcnQgeyBTdXJ2ZXlOYXZpZ2F0aW9uIH0gZnJvbSBcIi4uL05hdmlnYXRpb25cIjtcblxuaW50ZXJmYWNlIElUYWJEZXNpZ25lckNvbXBvbmVudFByb3BzIHtcbiAgZGF0YTogVGFiRGVzaWduZXJWaWV3TW9kZWw7XG59XG5cbmV4cG9ydCBjbGFzcyBUYWJEZXNpZ25lckNvbXBvbmVudCBleHRlbmRzIFN1cnZleUVsZW1lbnRCYXNlPElUYWJEZXNpZ25lckNvbXBvbmVudFByb3BzLCBhbnk+IHtcbiAgcHJpdmF0ZSBnZXQgbW9kZWwoKTogVGFiRGVzaWduZXJWaWV3TW9kZWwge1xuICAgIHJldHVybiB0aGlzLnByb3BzLmRhdGE7XG4gIH1cbiAgcHJvdGVjdGVkIGdldCBjcmVhdG9yKCk6IENyZWF0b3JCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5tb2RlbC5jcmVhdG9yO1xuICB9XG5cbiAgcHJpdmF0ZSBkZW55VXBkYXRlID0gKCkgPT4ge1xuICAgIHRoaXMuZGVueUNvbXBvbmVudFVwZGF0ZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBhbGxvd1VwZGF0ZSA9ICgpID0+IHtcbiAgICB0aGlzLmFsbG93Q29tcG9uZW50VXBkYXRlKCk7XG4gIH1cblxuICBwcml2YXRlIGFkZERyYWdEcm9wRXZlbnRzID0gKCkgPT4ge1xuICAgIHRoaXMuY3JlYXRvci5vbkJlZm9yZURyb3AuYWRkKHRoaXMuZGVueVVwZGF0ZSk7XG4gICAgdGhpcy5jcmVhdG9yLm9uQWZ0ZXJEcm9wLmFkZCh0aGlzLmFsbG93VXBkYXRlKTtcbiAgfVxuXG4gIHByaXZhdGUgY2xlYXJEcmFnRHJvcEV2ZW50cyA9ICgpID0+IHtcbiAgICB0aGlzLmNyZWF0b3Iub25CZWZvcmVEcm9wLnJlbW92ZSh0aGlzLmRlbnlVcGRhdGUpO1xuICAgIHRoaXMuY3JlYXRvci5vbkFmdGVyRHJvcC5yZW1vdmUodGhpcy5hbGxvd1VwZGF0ZSk7XG4gIH1cblxuICBjb21wb25lbnREaWRNb3VudCgpOiB2b2lkIHtcbiAgICBzdXBlci5jb21wb25lbnREaWRNb3VudCgpO1xuICAgIHRoaXMuYWRkRHJhZ0Ryb3BFdmVudHMoKTtcbiAgfVxuXG4gIGNvbXBvbmVudFdpbGxVbm1vdW50KCk6IHZvaWQge1xuICAgIHN1cGVyLmNvbXBvbmVudFdpbGxVbm1vdW50KCk7XG4gICAgdGhpcy5jbGVhckRyYWdEcm9wRXZlbnRzKCk7XG4gICAgc3VwZXIuY29tcG9uZW50V2lsbFVubW91bnQoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRTdGF0ZUVsZW1lbnRzKCk6IEFycmF5PEJhc2U+IHtcbiAgICByZXR1cm4gW3RoaXMubW9kZWwsIHRoaXMubW9kZWwuc3VydmV5LCB0aGlzLm1vZGVsLnBhZ2VzQ29udHJvbGxlcl07XG4gIH1cblxuICBwcml2YXRlIHJlbmRlcmVkUGFnZXNDYWNoZTogYW55ID0ge307XG4gIHByb3RlY3RlZCBnZXRSZW5kZXJlZFBhZ2VzKCk6IEpTWC5FbGVtZW50W10ge1xuICAgIGlmICh0aGlzLmNoYW5nZWRTdGF0ZVByb3BOYW1lICE9PSBcInBhZ2VzXCIpIHtcbiAgICAgIHRoaXMucmVuZGVyZWRQYWdlc0NhY2hlID0ge307XG4gICAgfVxuICAgIGNvbnN0IHJlbmRlcmVkUGFnZXMgPSBbXTtcblxuICAgIGlmICh0aGlzLmNyZWF0b3IucGFnZUVkaXRNb2RlICE9PSBcImJ5cGFnZVwiKSB7XG4gICAgICBjb25zdCBwYWdlcyA9IHRoaXMuY3JlYXRvci5zdXJ2ZXkucGFnZXM7XG5cbiAgICAgIHBhZ2VzLmZvckVhY2goKHBhZ2UsIGluZGV4KSA9PiB7XG4gICAgICAgIGxldCBjYWNoZWRQYWdlID0gdGhpcy5yZW5kZXJlZFBhZ2VzQ2FjaGVbcGFnZS5pZF07XG4gICAgICAgIGlmICghY2FjaGVkUGFnZSkge1xuICAgICAgICAgIGNhY2hlZFBhZ2UgPSB0aGlzLmNyZWF0ZVJlbmRlcmVkUGFnZShwYWdlLCBpbmRleCk7XG4gICAgICAgICAgdGhpcy5yZW5kZXJlZFBhZ2VzQ2FjaGVbcGFnZS5pZF0gPSBjYWNoZWRQYWdlO1xuICAgICAgICB9XG4gICAgICAgIHJlbmRlcmVkUGFnZXMucHVzaChjYWNoZWRQYWdlKTtcbiAgICAgIH0pO1xuXG4gICAgICBpZiAodGhpcy5tb2RlbC5zaG93TmV3UGFnZSkge1xuICAgICAgICByZW5kZXJlZFBhZ2VzLnB1c2godGhpcy5yZW5kZXJOZXdQYWdlKFwic3ZjLXBhZ2VcIiwgdGhpcy5tb2RlbC5uZXdQYWdlLmlkICsgXCItZ2hvc3QtbmV3LXBhZ2VcIikpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBwYWdlMkRpc3BsYXkgPSB0aGlzLm1vZGVsLnBhZ2VzQ29udHJvbGxlci5wYWdlMkRpc3BsYXk7XG4gICAgICBpZiAoISFwYWdlMkRpc3BsYXkpIHtcbiAgICAgICAgbGV0IGNhY2hlZFBhZ2UgPSB0aGlzLnJlbmRlcmVkUGFnZXNDYWNoZVtwYWdlMkRpc3BsYXkuaWRdO1xuICAgICAgICBpZiAoIWNhY2hlZFBhZ2UpIHtcbiAgICAgICAgICBjYWNoZWRQYWdlID0gdGhpcy5jcmVhdGVSZW5kZXJlZFBhZ2UocGFnZTJEaXNwbGF5LCAwLCB0cnVlKTtcbiAgICAgICAgICB0aGlzLnJlbmRlcmVkUGFnZXNDYWNoZVtwYWdlMkRpc3BsYXkuaWRdID0gY2FjaGVkUGFnZTtcbiAgICAgICAgfVxuICAgICAgICByZW5kZXJlZFBhZ2VzLnB1c2goY2FjaGVkUGFnZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlbmRlcmVkUGFnZXM7XG4gIH1cbiAgcHJvdGVjdGVkIGNyZWF0ZVJlbmRlcmVkUGFnZShwYWdlOiBQYWdlTW9kZWwsIGluZGV4OiBudW1iZXIsIGlzR2hvc3RQYWdlPzogYm9vbGVhbik6IGFueSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3NOYW1lPXtcInN2Yy1wYWdlXCJ9XG4gICAgICAgIGRhdGEtc3YtZHJvcC10YXJnZXQtcGFnZT17cGFnZS5uYW1lfVxuICAgICAgICBkYXRhLXN2LWRyb3AtdGFyZ2V0LXN1cnZleS1lbGVtZW50PXtpc0dob3N0UGFnZSA/IFwibmV3R2hvc3RQYWdlXCIgOiBwYWdlLm5hbWV9XG4gICAgICAgIGtleT17cGFnZS5pZCArIFwiLVwiICsgaW5kZXh9XG4gICAgICA+XG4gICAgICAgIHt0aGlzLnJlbmRlclBhZ2UocGFnZSl9XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG4gIHByaXZhdGUgcmVuZGVyTmV3UGFnZShjbGFzc05hbWU6IHN0cmluZywga2V5OiBzdHJpbmcgPSBcIlwiKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxSZWFjdC5GcmFnbWVudCBrZXk9e2tleX0+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzc05hbWU9e2NsYXNzTmFtZX1cbiAgICAgICAgICBkYXRhLXN2LWRyb3AtdGFyZ2V0LXN1cnZleS1lbGVtZW50PXtcIm5ld0dob3N0UGFnZVwifVxuICAgICAgICA+XG4gICAgICAgICAgeyEhdGhpcy5tb2RlbC5uZXdQYWdlID8gdGhpcy5yZW5kZXJQYWdlKHRoaXMubW9kZWwubmV3UGFnZSkgOiBudWxsfVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvUmVhY3QuRnJhZ21lbnQ+KTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyUGFnZShwYWdlVjogUGFnZU1vZGVsKTogSlNYLkVsZW1lbnQge1xuICAgIHJldHVybiBSZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLmNyZWF0ZUVsZW1lbnQoXCJzdmMtcGFnZVwiLCB7IHN1cnZleTogdGhpcy5jcmVhdG9yLnN1cnZleSwgcGFnZTogcGFnZVYsIGNyZWF0b3I6IHRoaXMuY3JlYXRvciB9KTtcbiAgfVxuICByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICBjb25zdCBkZXNpZ25lclRhYkNsYXNzTmFtZSA9IFwic3ZjLXRhYi1kZXNpZ25lciBcIiArIHRoaXMubW9kZWwuZ2V0Um9vdENzcygpO1xuXG4gICAgcmV0dXJuIChcbiAgICAgIDxSZWFjdC5GcmFnbWVudD5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmMtZmxleC1jb2x1bW5cIj5cbiAgICAgICAgICB7dGhpcy5tb2RlbC5pc1Rvb2xib3hWaXNpYmxlID8gUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5jcmVhdGVFbGVtZW50KFwic3ZjLWFkYXB0aXZlLXRvb2xib3hcIiwgeyBtb2RlbDogdGhpcy5jcmVhdG9yIH0pIDogbnVsbH1cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtkZXNpZ25lclRhYkNsYXNzTmFtZX0gb25DbGljaz17KCkgPT4gdGhpcy5tb2RlbC5jbGlja0Rlc2lnbmVyKCl9PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3ZjLXRhYi1kZXNpZ25lcl9jb250ZW50XCI+XG4gICAgICAgICAgICB7dGhpcy5tb2RlbC5zaG93UGxhY2Vob2xkZXIgPyB0aGlzLnJlbmRlclBsYWNlSG9sZGVyKCkgOiB0aGlzLnJlbmRlclRhYkNvbnRlbnQoKX1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L1JlYWN0LkZyYWdtZW50PlxuICAgICk7XG4gIH1cblxuICByZW5kZXJIZWFkZXIoY29uZGl0aW9uOiBib29sZWFuKTogSlNYLkVsZW1lbnQge1xuICAgIGlmICghY29uZGl0aW9uKSByZXR1cm4gbnVsbDtcblxuICAgIGNvbnN0IHN1cnZleTogU3VydmV5TW9kZWwgPSB0aGlzLmNyZWF0b3Iuc3VydmV5O1xuICAgIHJldHVybiAoPFJlYWN0LkZyYWdtZW50PlxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmMtZGVzaWduZXItaGVhZGVyXCI+XG4gICAgICAgIDxTdXJ2ZXlIZWFkZXIgc3VydmV5PXtzdXJ2ZXl9PjwvU3VydmV5SGVhZGVyPlxuICAgICAgPC9kaXY+XG4gICAgPC9SZWFjdC5GcmFnbWVudD4pO1xuICB9XG4gIHJlbmRlclBsYWNlSG9sZGVyKCk6IEpTWC5FbGVtZW50IHtcbiAgICBjb25zdCBzdXJ2ZXlIZWFkZXIgPSB0aGlzLnJlbmRlckhlYWRlcih0aGlzLmNyZWF0b3IuYWxsb3dFZGl0U3VydmV5VGl0bGUgJiYgdGhpcy5jcmVhdG9yLnNob3dIZWFkZXJJbkVtcHR5U3VydmV5KTtcblxuICAgIHJldHVybiAoPFJlYWN0LkZyYWdtZW50PlxuICAgICAge3N1cnZleUhlYWRlcn1cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3ZjLWRlc2lnbmVyX19wbGFjZWhvbGRlci1jb250YWluZXJcIiBkYXRhLXN2LWRyb3AtdGFyZ2V0LXN1cnZleS1lbGVtZW50PXtcIm5ld0dob3N0UGFnZVwifT5cbiAgICAgICAge3RoaXMucmVuZGVyUGxhY2VIb2xkZXJDb250ZW50KCl9XG4gICAgICAgIHt0aGlzLnJlbmRlck5ld1BhZ2UoXCJzdmMtZGVzaWduZXItcGxhY2Vob2xkZXItcGFnZVwiKX1cbiAgICAgIDwvZGl2PlxuICAgIDwvUmVhY3QuRnJhZ21lbnQ+KTtcbiAgfVxuICByZW5kZXJQbGFjZUhvbGRlckNvbnRlbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIHJldHVybiA8c3BhbiBjbGFzc05hbWU9XCJzdmMtZGVzaWduZXItcGxhY2Vob2xkZXItdGV4dCBzdmMtdGV4dCBzdmMtdGV4dC0tbm9ybWFsXCI+e3RoaXMubW9kZWwucGxhY2Vob2xkZXJUZXh0fTwvc3Bhbj47XG4gIH1cbiAgcmVuZGVyVGFiQ29udGVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgY29uc3Qgc3VydmV5OiBTdXJ2ZXlNb2RlbCA9IHRoaXMuY3JlYXRvci5zdXJ2ZXk7XG4gICAgY29uc3Qgc3VydmV5SGVhZGVyID0gdGhpcy5yZW5kZXJIZWFkZXIodGhpcy5jcmVhdG9yLmFsbG93RWRpdFN1cnZleVRpdGxlKTtcbiAgICBjb25zdCBzdHlsZTogYW55ID0ge307XG4gICAgaWYgKCEhc3VydmV5LndpZHRoKSB7XG4gICAgICBzdHlsZS5tYXhXaWR0aCA9IHN1cnZleS5yZW5kZXJlZFdpZHRoO1xuICAgIH1cblxuICAgIHJldHVybiAoPFJlYWN0LkZyYWdtZW50PlxuICAgICAgPGRpdiBjbGFzc05hbWU9e3RoaXMubW9kZWwuZGVzaWduZXJDc3N9IHN0eWxlPXtzdHlsZX0+XG4gICAgICAgIHtzdXJ2ZXlIZWFkZXJ9XG4gICAgICAgIDxTdXJ2ZXlOYXZpZ2F0aW9uIHN1cnZleT17c3VydmV5fSBsb2NhdGlvbj1cInRvcFwiIC8+XG4gICAgICAgIHt0aGlzLmdldFJlbmRlcmVkUGFnZXMoKX1cbiAgICAgICAgPFN1cnZleU5hdmlnYXRpb25cbiAgICAgICAgICBzdXJ2ZXk9e3N1cnZleX1cbiAgICAgICAgICBsb2NhdGlvbj1cImJvdHRvbVwiXG4gICAgICAgICAgY3NzPXtzdXJ2ZXkuY3NzfVxuICAgICAgICAvPlxuICAgICAgPC9kaXY+XG4gICAgICB7dGhpcy5jcmVhdG9yLnNob3dQYWdlTmF2aWdhdG9yID9cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmMtdGFiLWRlc2lnbmVyX19wYWdlLW5hdmlnYXRvclwiPjxTdXJ2ZXlQYWdlTmF2aWdhdG9yXG4gICAgICAgICAgcGFnZXNDb250cm9sbGVyPXt0aGlzLm1vZGVsLnBhZ2VzQ29udHJvbGxlcn0gcGFnZUVkaXRNb2RlPXt0aGlzLm1vZGVsLmNyZWF0b3IucGFnZUVkaXRNb2RlfVxuICAgICAgICA+PC9TdXJ2ZXlQYWdlTmF2aWdhdG9yPjwvZGl2PlxuICAgICAgICA6IG51bGxcbiAgICAgIH1cbiAgICA8L1JlYWN0LkZyYWdtZW50Pik7XG4gIH1cbn1cblxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXCJzdmMtdGFiLWRlc2lnbmVyXCIsIChwcm9wcykgPT4ge1xuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChcbiAgICBUYWJEZXNpZ25lckNvbXBvbmVudCxcbiAgICBwcm9wcyBhcyBJVGFiRGVzaWduZXJDb21wb25lbnRQcm9wc1xuICApO1xufSk7XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBCYXNlIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQge1xuICBSZWFjdEVsZW1lbnRGYWN0b3J5LFxuICBTdXJ2ZXksXG4gIFN1cnZleUVsZW1lbnRCYXNlXG59IGZyb20gXCJzdXJ2ZXktcmVhY3QtdWlcIjtcbmltcG9ydCB7IEVtYmVkTW9kZWwgfSBmcm9tIFwic3VydmV5LWNyZWF0b3ItY29yZVwiO1xuXG5pbnRlcmZhY2UgSVRhYkVtYmVkQ29tcG9uZW50UHJvcHMge1xuICBkYXRhOiBFbWJlZE1vZGVsO1xufVxuXG5leHBvcnQgY2xhc3MgVGFiRW1iZWRDb21wb25lbnQgZXh0ZW5kcyBTdXJ2ZXlFbGVtZW50QmFzZTxcbiAgSVRhYkVtYmVkQ29tcG9uZW50UHJvcHMsXG4gIGFueVxuPiB7XG4gIHByaXZhdGUgZ2V0IG1vZGVsKCk6IEVtYmVkTW9kZWwge1xuICAgIHJldHVybiB0aGlzLnByb3BzLmRhdGE7XG4gIH1cbiAgcHJvdGVjdGVkIGdldFN0YXRlRWxlbWVudCgpOiBCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5tb2RlbDtcbiAgfVxuICByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmMtY3JlYXRvci10YWJfX2NvbnRlbnQgc3ZjLWVtYmVkLXRhYl9fY29udGVudFwiPlxuICAgICAgICB7dGhpcy5tb2RlbC5zdXJ2ZXkgPyA8U3VydmV5IG1vZGVsPXt0aGlzLm1vZGVsLnN1cnZleX0+PC9TdXJ2ZXk+IDogbnVsbH1cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbn1cblxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXG4gIFwic3ZjLXRhYi1lbWJlZFwiLFxuICAocHJvcHM6IElUYWJFbWJlZENvbXBvbmVudFByb3BzKSA9PiB7XG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoVGFiRW1iZWRDb21wb25lbnQsIHByb3BzKTtcbiAgfVxuKTtcbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IEJhc2UgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFJlYWN0RWxlbWVudEZhY3RvcnksIFN1cnZleUVsZW1lbnRCYXNlIH0gZnJvbSBcInN1cnZleS1yZWFjdC11aVwiO1xuaW1wb3J0IHsgQWNlSnNvbkVkaXRvck1vZGVsIH0gZnJvbSBcInN1cnZleS1jcmVhdG9yLWNvcmVcIjtcblxuaW50ZXJmYWNlIElUYWJKc29uRWRpdG9yQWNlQ29tcG9uZW50UHJvcHMge1xuICBkYXRhOiBBY2VKc29uRWRpdG9yTW9kZWw7XG59XG5cbmV4cG9ydCBjbGFzcyBUYWJKc29uRWRpdG9yQWNlQ29tcG9uZW50IGV4dGVuZHMgU3VydmV5RWxlbWVudEJhc2U8XG4gIElUYWJKc29uRWRpdG9yQWNlQ29tcG9uZW50UHJvcHMsXG4gIGFueVxuPiB7XG4gIHByaXZhdGUgYWNlRWRpdG9yclJlZjogUmVhY3QuUmVmT2JqZWN0PEhUTUxEaXZFbGVtZW50PjtcbiAgY29uc3RydWN0b3IocHJvcHM6IElUYWJKc29uRWRpdG9yQWNlQ29tcG9uZW50UHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgdGhpcy5hY2VFZGl0b3JyUmVmID0gUmVhY3QuY3JlYXRlUmVmKCk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldFN0YXRlRWxlbWVudCgpOiBCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5tb2RlbDtcbiAgfVxuICBwcml2YXRlIGdldCBtb2RlbCgpOiBBY2VKc29uRWRpdG9yTW9kZWwge1xuICAgIHJldHVybiB0aGlzLnByb3BzLmRhdGE7XG4gIH1cbiAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgdGhpcy5tb2RlbC5pbml0KGFjZS5lZGl0KHRoaXMuYWNlRWRpdG9yclJlZi5jdXJyZW50IGFzIEhUTUxFbGVtZW50KSk7XG4gIH1cbiAgcmVuZGVyRWxlbWVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3ZjLWNyZWF0b3ItdGFiX19jb250ZW50XCI+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3ZjLWpzb24tZWRpdG9yLXRhYl9fY29udGVudFwiPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzTmFtZT1cInN2Yy1qc29uLWVkaXRvci10YWJfX2FjZS1lZGl0b3JcIlxuICAgICAgICAgICAgcmVmPXt0aGlzLmFjZUVkaXRvcnJSZWZ9XG4gICAgICAgICAgPjwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbn1cblxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXG4gIFwic3ZjLXRhYi1qc29uLWVkaXRvci1hY2VcIixcbiAgKHByb3BzOiBJVGFiSnNvbkVkaXRvckFjZUNvbXBvbmVudFByb3BzKSA9PiB7XG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoVGFiSnNvbkVkaXRvckFjZUNvbXBvbmVudCwgcHJvcHMpO1xuICB9XG4pO1xuIiwiaW1wb3J0IFJlYWN0LCB7IENoYW5nZUV2ZW50IH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBCYXNlIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBSZWFjdEVsZW1lbnRGYWN0b3J5LCBTdXJ2ZXlFbGVtZW50QmFzZSB9IGZyb20gXCJzdXJ2ZXktcmVhY3QtdWlcIjtcbmltcG9ydCB7IFRleHRhcmVhSnNvbkVkaXRvck1vZGVsIH0gZnJvbSBcInN1cnZleS1jcmVhdG9yLWNvcmVcIjtcblxuaW50ZXJmYWNlIElUYWJKc29uRWRpdG9yVGV4dGFyZWFDb21wb25lbnRQcm9wcyB7XG4gIGRhdGE6IFRleHRhcmVhSnNvbkVkaXRvck1vZGVsO1xufVxuXG5leHBvcnQgY2xhc3MgVGFiSnNvbkVkaXRvclRleHRhcmVhQ29tcG9uZW50IGV4dGVuZHMgU3VydmV5RWxlbWVudEJhc2U8XG4gIElUYWJKc29uRWRpdG9yVGV4dGFyZWFDb21wb25lbnRQcm9wcyxcbiAgYW55XG4+IHtcbiAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgdGhpcy5tb2RlbC5jYW5TaG93RXJyb3JzID0gZmFsc2U7XG4gIH1cbiAgcHJvdGVjdGVkIGdldFN0YXRlRWxlbWVudCgpOiBCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5tb2RlbDtcbiAgfVxuICBwcml2YXRlIGdldCBtb2RlbCgpOiBUZXh0YXJlYUpzb25FZGl0b3JNb2RlbCB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuZGF0YTtcbiAgfVxuICByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICBjb25zdCBlcnJvcnM6IEpTWC5FbGVtZW50W10gPSBbXTtcbiAgICB2YXIga2V5ID0gMTtcbiAgICBjb25zdCB1c2VyRnJpZW5kbHlFcnJvcnM6IGFueVtdID0gdGhpcy5tb2RlbC51c2VyRnJpZW5kbHlFcnJvcnM7XG4gICAgZm9yIChsZXQgaTogbnVtYmVyID0gMDsgaSA8IHVzZXJGcmllbmRseUVycm9ycy5sZW5ndGg7IGkrKykge1xuICAgICAgZXJyb3JzLnB1c2goPHNwYW4ga2V5PXtrZXl9PjxiPkVycm9yOiA8L2I+PC9zcGFuPik7XG4gICAgICBrZXkrKztcbiAgICAgIGVycm9ycy5wdXNoKDxzcGFuIGtleT17a2V5fT57dXNlckZyaWVuZGx5RXJyb3JzW2ldfTwvc3Bhbj4pO1xuICAgICAga2V5Kys7XG4gICAgfVxuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2Yy1jcmVhdG9yLXRhYl9fY29udGVudFwiPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2Yy1qc29uLWVkaXRvci10YWJfX2NvbnRlbnRcIj5cbiAgICAgICAgICA8dGV4dGFyZWFcbiAgICAgICAgICAgIGNsYXNzTmFtZT1cInN2Yy1qc29uLWVkaXRvci10YWJfX2NvbnRlbnQtYXJlYVwiXG4gICAgICAgICAgICB2YWx1ZT17dGhpcy5tb2RlbC50ZXh0fVxuICAgICAgICAgICAgb25DaGFuZ2U9eyhlOiBDaGFuZ2VFdmVudDxIVE1MVGV4dEFyZWFFbGVtZW50PikgPT5cbiAgICAgICAgICAgICAgKHRoaXMubW9kZWwudGV4dCA9IGUudGFyZ2V0LnZhbHVlKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgb25LZXlEb3duPXsoZSkgPT4gdGhpcy5tb2RlbC5jaGVja0tleShlLCBlKX1cbiAgICAgICAgICAgIGRpc2FibGVkPXt0aGlzLm1vZGVsLnJlYWRPbmx5fVxuICAgICAgICAgICAgYXJpYS1sYWJlbD17dGhpcy5tb2RlbC5hcmlhTGFiZWx9XG4gICAgICAgICAgPjwvdGV4dGFyZWE+XG4gICAgICAgICAge2Vycm9ycy5sZW5ndGggPiAwICYmXG4gICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzc05hbWU9XCJzdmMtanNvbi1lZGl0b3ItdGFiX19lcnJyb3NfYnV0dG9uXCIgb25DbGljaz17KCkgPT4gdGhpcy5tb2RlbC50b2dnbGVFcnJvcnMoKX0+XG4gICAgICAgICAgICAgIHt0aGlzLm1vZGVsLmVycm9yQnV0dG9uVGV4dH1cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIH1cbiAgICAgICAgICB7dGhpcy5tb2RlbC5jYW5TaG93RXJyb3JzICYmIDxkaXYgY2xhc3NOYW1lPVwic3ZjLWpzb24tZWRpdG9yLXRhYl9fY29udGVudC1lcnJvcnNcIj57ZXJyb3JzfTwvZGl2PlxuICAgICAgICAgIH1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG59XG5cblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFxuICBcInN2Yy10YWItanNvbi1lZGl0b3ItdGV4dGFyZWFcIixcbiAgKHByb3BzOiBJVGFiSnNvbkVkaXRvclRleHRhcmVhQ29tcG9uZW50UHJvcHMpID0+IHtcbiAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChUYWJKc29uRWRpdG9yVGV4dGFyZWFDb21wb25lbnQsIHByb3BzKTtcbiAgfVxuKTtcbiIsImltcG9ydCBSZWFjdCwgeyBGcmFnbWVudCB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgQWN0aW9uLCBCYXNlIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBSZWFjdEVsZW1lbnRGYWN0b3J5LCBTdXJ2ZXlFbGVtZW50QmFzZSwgU3VydmV5LCBhdHRhY2hLZXkyY2xpY2sgfSBmcm9tIFwic3VydmV5LXJlYWN0LXVpXCI7XG5pbXBvcnQgeyBTdXJ2ZXlMb2dpY1VJIH0gZnJvbSBcInN1cnZleS1jcmVhdG9yLWNvcmVcIjtcblxuZXhwb3J0IGNsYXNzIFRhYkxvZ2ljQWRkQnV0dG9uQ29tcG9uZW50IGV4dGVuZHMgU3VydmV5RWxlbWVudEJhc2U8YW55LCBhbnk+IHtcbiAgcHJpdmF0ZSBnZXQgbW9kZWwoKTogQWN0aW9uIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5idXR0b247XG4gIH1cbiAgcHJvdGVjdGVkIGdldFN0YXRlRWxlbWVudCgpOiBCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5tb2RlbDtcbiAgfVxuXG4gIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIGNvbnN0IGJ1dHRvbkNsYXNzTmFtZSA9IFwic3ZjLWxvZ2ljLXRhYl9fY29udGVudC1hY3Rpb24gc3ZjLWJ0blwiICsgKCh0aGlzLm1vZGVsLmVuYWJsZWQgIT09IHVuZGVmaW5lZCAmJiAhdGhpcy5tb2RlbC5lbmFibGVkKSA/IFwiIHN2Yy1sb2dpYy10YWJfX2NvbnRlbnQtYWN0aW9uLS1kaXNhYmxlZFwiIDogXCJcIik7XG4gICAgcmV0dXJuIGF0dGFjaEtleTJjbGljayg8ZGl2XG4gICAgICByb2xlPVwiYnV0dG9uXCJcbiAgICAgIG9uQ2xpY2s9eyhlKSA9PiB7XG4gICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIHRoaXMubW9kZWwuYWN0aW9uKCk7XG4gICAgICB9fVxuICAgICAgY2xhc3NOYW1lPXtidXR0b25DbGFzc05hbWV9XG4gICAgICB0aXRsZT17dGhpcy5tb2RlbC50aXRsZX1cbiAgICA+XG4gICAgICA8c3BhbiBjbGFzc05hbWU9XCJzdmMtdGV4dCBzdmMtdGV4dC0tbm9ybWFsIHN2Yy10ZXh0LS1ib2xkXCI+XG4gICAgICAgIHt0aGlzLm1vZGVsLnRpdGxlfVxuICAgICAgPC9zcGFuPlxuICAgIDwvZGl2Pik7XG4gIH1cbn1cblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFwic3ZjLXRhYi1sb2dpYy1hZGQtYnV0dG9uXCIsIChwcm9wcykgPT4ge1xuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChUYWJMb2dpY0FkZEJ1dHRvbkNvbXBvbmVudCwgcHJvcHMpO1xufSk7XG5cbmV4cG9ydCBjbGFzcyBUYWJMb2dpY0NvbXBvbmVudCBleHRlbmRzIFN1cnZleUVsZW1lbnRCYXNlPGFueSwgYW55PiB7XG4gIHByaXZhdGUgZ2V0IG1vZGVsKCk6IFN1cnZleUxvZ2ljVUkge1xuICAgIHJldHVybiB0aGlzLnByb3BzLmRhdGE7XG4gIH1cbiAgcHJvdGVjdGVkIGdldFN0YXRlRWxlbWVudCgpOiBCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5tb2RlbDtcbiAgfVxuXG4gIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIHZhciBsb2dpYyA9IHRoaXMubW9kZWw7XG4gICAgdmFyIHJvb3RDbGFzcyA9IFwic3ZjLWNyZWF0b3ItdGFiX19jb250ZW50XCI7XG4gICAgdmFyIGNvbnRlbnQgPSB0aGlzLnJlbmRlclZpZXdDb250ZW50KCk7XG4gICAgcmV0dXJuIDxkaXYgY2xhc3NOYW1lPXtyb290Q2xhc3N9Pntjb250ZW50fTwvZGl2PjtcbiAgfVxuICBwcml2YXRlIHJlbmRlclZpZXdDb250ZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICBjb25zdCBsb2dpY1RhYkNsYXNzTmFtZSA9IFwic3ZjLXBsdWdpbi10YWJfX2NvbnRlbnQgc3ZjLWxvZ2ljLXRhYl9fY29udGVudCBcIiArICh0aGlzLm1vZGVsLmhhc0l0ZW1zID8gXCJcIiA6IFwic3ZjLWxvZ2ljLXRhYl9fZW1wdHlcIik7XG4gICAgY29uc3QgYWRkTG9naWMgPSAhdGhpcy5tb2RlbC5yZWFkT25seSA/IDxUYWJMb2dpY0FkZEJ1dHRvbkNvbXBvbmVudCBidXR0b249e3RoaXMubW9kZWwuYWRkTmV3QnV0dG9ufSAvPiA6IHVuZGVmaW5lZDtcbiAgICByZXR1cm4gKFxuICAgICAgPEZyYWdtZW50PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17bG9naWNUYWJDbGFzc05hbWV9PlxuICAgICAgICAgIDxTdXJ2ZXkgbW9kZWw9e3RoaXMubW9kZWwuaXRlbXNTdXJ2ZXl9PjwvU3VydmV5PlxuICAgICAgICAgIHt0aGlzLm1vZGVsLmhhc0l0ZW1zID8gbnVsbCA6IChcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3ZjLWxvZ2ljLXRhYl9fY29udGVudC1lbXB0eVwiID5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwic3ZjLXRleHRcIj57dGhpcy5tb2RlbC5lbXB0eVRhYlBsYWNlaG9sZGVyfTwvc3Bhbj5cbiAgICAgICAgICAgIDwvZGl2Pil9XG4gICAgICAgICAge2FkZExvZ2ljfVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvRnJhZ21lbnQ+XG4gICAgKTtcbiAgfVxufVxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXCJzdmMtdGFiLWxvZ2ljXCIsIChwcm9wcykgPT4ge1xuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChUYWJMb2dpY0NvbXBvbmVudCwgcHJvcHMpO1xufSk7XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBBY3Rpb24sIEJhc2UgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7XG4gIFN1cnZleUFjdGlvbkJhcixcbiAgUmVhY3RFbGVtZW50RmFjdG9yeSxcbiAgU3VydmV5RWxlbWVudEJhc2UsXG4gIGF0dGFjaEtleTJjbGlja1xufSBmcm9tIFwic3VydmV5LXJlYWN0LXVpXCI7XG5pbXBvcnQgeyBUZXN0U3VydmV5VGFiVmlld01vZGVsIH0gZnJvbSBcInN1cnZleS1jcmVhdG9yLWNvcmVcIjtcbmltcG9ydCB7IFN1cnZleVNpbXVsYXRvciB9IGZyb20gXCIuL1N1cnZleVNpbXVsYXRvclwiO1xuaW1wb3J0IHsgU3VydmV5UmVzdWx0cyB9IGZyb20gXCIuLi9SZXN1bHRzXCI7XG5cbmV4cG9ydCBjbGFzcyBUYWJQcmV2aWV3VGVzdFN1cnZleUFnYWluQ29tcG9uZW50IGV4dGVuZHMgU3VydmV5RWxlbWVudEJhc2U8YW55LCBhbnk+IHtcbiAgcHJpdmF0ZSBnZXQgbW9kZWwoKTogQWN0aW9uIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5idXR0b247XG4gIH1cbiAgcHJvdGVjdGVkIGdldFN0YXRlRWxlbWVudCgpOiBCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5tb2RlbDtcbiAgfVxuXG4gIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIGNvbnN0IGJ1dHRvbkNsYXNzTmFtZSA9IFwic3ZjLXByZXZpZXdfX3Rlc3QtYWdhaW4gc3ZjLWJ0blwiO1xuICAgIHJldHVybiBhdHRhY2hLZXkyY2xpY2soPGRpdlxuICAgICAgcm9sZT1cImJ1dHRvblwiXG4gICAgICBvbkNsaWNrPXsoZSkgPT4ge1xuICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICB0aGlzLm1vZGVsLmFjdGlvbigpO1xuICAgICAgfX1cbiAgICAgIGNsYXNzTmFtZT17YnV0dG9uQ2xhc3NOYW1lfVxuICAgICAgdGl0bGU9e3RoaXMubW9kZWwudGl0bGV9XG4gICAgPlxuICAgICAgPHNwYW4gY2xhc3NOYW1lPVwic3ZjLXRleHQgc3ZjLXRleHQtLW5vcm1hbCBzdmMtdGV4dC0tYm9sZFwiPlxuICAgICAgICB7dGhpcy5tb2RlbC50aXRsZX1cbiAgICAgIDwvc3Bhbj5cbiAgICA8L2Rpdj4pO1xuICB9XG59XG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcInN2Yy10YWItcHJldmlldy10ZXN0LWFnYWluXCIsIChwcm9wcykgPT4ge1xuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChUYWJQcmV2aWV3VGVzdFN1cnZleUFnYWluQ29tcG9uZW50LCBwcm9wcyk7XG59KTtcblxuZXhwb3J0IGNsYXNzIFRhYlByZXZpZXdTdXJ2ZXlDb21wb25lbnQgZXh0ZW5kcyBTdXJ2ZXlFbGVtZW50QmFzZTxhbnksIGFueT4ge1xuICBwcml2YXRlIGdldCBtb2RlbCgpOiBUZXN0U3VydmV5VGFiVmlld01vZGVsIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5kYXRhO1xuICB9XG4gIHByb3RlY3RlZCBnZXRTdGF0ZUVsZW1lbnQoKTogQmFzZSB7XG4gICAgcmV0dXJuIHRoaXMubW9kZWw7XG4gIH1cblxuICByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICBjb25zdCB0YWJDb250ZW50Q2xhc3NOYW1lID0gXCJzdmMtY3JlYXRvci10YWJfX2NvbnRlbnQgc3ZjLXRlc3QtdGFiX19jb250ZW50XCIgKyAodGhpcy5tb2RlbC5pc1BhZ2VUb29sYmFyVmlzaWJsZSA/IFwiIHN2Yy1jcmVhdG9yLXRhYl9fY29udGVudC0td2l0aC10b29sYmFyXCIgOiBcIlwiKTtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9e3RhYkNvbnRlbnRDbGFzc05hbWV9PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2Yy1wbHVnaW4tdGFiX19jb250ZW50XCI+XG4gICAgICAgICAgPFN1cnZleVNpbXVsYXRvciBtb2RlbD17dGhpcy5tb2RlbC5zaW11bGF0b3J9PjwvU3VydmV5U2ltdWxhdG9yPlxuICAgICAgICAgIHshdGhpcy5tb2RlbC5pc1J1bm5pbmcgPyA8VGFiUHJldmlld1Rlc3RTdXJ2ZXlBZ2FpbkNvbXBvbmVudCBidXR0b249e3RoaXMubW9kZWwudGVzdEFnYWluQWN0aW9ufSAvPiA6IG51bGx9XG4gICAgICAgICAgeyF0aGlzLm1vZGVsLmlzUnVubmluZyA/IDxTdXJ2ZXlSZXN1bHRzIHN1cnZleT17dGhpcy5tb2RlbC5zaW11bGF0b3Iuc3VydmV5fSAvPiA6IG51bGx9XG4gICAgICAgIDwvZGl2PlxuICAgICAgICB7dGhpcy5nZXRCb3R0b21Ub29sYmFyKCl9XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG4gIGdldEJvdHRvbVRvb2xiYXIoKTogSlNYLkVsZW1lbnQge1xuICAgIGlmICh0aGlzLm1vZGVsLmlzUGFnZVRvb2xiYXJWaXNpYmxlKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2Yy10ZXN0LXRhYl9fY29udGVudC1hY3Rpb25zXCI+XG4gICAgICAgICAgPFN1cnZleUFjdGlvbkJhciBtb2RlbD17dGhpcy5tb2RlbC5wYWdlc30+PC9TdXJ2ZXlBY3Rpb25CYXI+XG4gICAgICAgIDwvZGl2PlxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG59XG5cblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFwic3ZjLXRhYi10ZXN0XCIsIChwcm9wcykgPT4ge1xuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChUYWJQcmV2aWV3U3VydmV5Q29tcG9uZW50LCBwcm9wcyk7XG59KTtcbiIsImltcG9ydCB7IEJhc2UgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFN1cnZleSwgU3VydmV5RWxlbWVudEJhc2UgfSBmcm9tIFwic3VydmV5LXJlYWN0LXVpXCI7XG5pbXBvcnQgeyBTdXJ2ZXlTaW11bGF0b3JNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY3JlYXRvci1jb3JlXCI7XG5pbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlTaW11bGF0b3IgZXh0ZW5kcyBTdXJ2ZXlFbGVtZW50QmFzZTxhbnksIGFueT4ge1xuICBwcml2YXRlIGdldCBtb2RlbCgpOiBTdXJ2ZXlTaW11bGF0b3JNb2RlbCB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMubW9kZWw7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0U3RhdGVFbGVtZW50KCk6IEJhc2Uge1xuICAgIHJldHVybiB0aGlzLm1vZGVsO1xuICB9XG5cbiAgcmVuZGVyRWxlbWVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgY29uc3QgbWFpblNpbXVsYXRvckNsYXNzID0gXCJzdmQtc2ltdWxhdG9yLW1haW5cIiArXG4gICAgICAodGhpcy5tb2RlbC5kZXZpY2UgPT09IFwiZGVza3RvcFwiID8gXCIgc3ZkLXNpbXVsYXRvci1tYWluLS1kZXNrdG9wXCIgOiBcIlwiKTtcbiAgICBpZiAoIXRoaXMubW9kZWwuc3VydmV5KSB7XG4gICAgICByZXR1cm4gPGRpdiBjbGFzc05hbWU9e21haW5TaW11bGF0b3JDbGFzc30+PC9kaXY+O1xuICAgIH1cbiAgICBpZiAodGhpcy5tb2RlbC5oYXNGcmFtZSkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzTmFtZT17bWFpblNpbXVsYXRvckNsYXNzICsgXCIgXCIgKyB0aGlzLm1vZGVsLnNpbXVsYXRvck1haW5Dc3NDbGFzc31cbiAgICAgICAgICBvbktleURvd249e2UgPT4gdGhpcy5tb2RlbC50cnlUb1pvb20oZSwgZSl9XG4gICAgICAgICAgb25Nb3VzZUVudGVyPXt0aGlzLm1vZGVsLmRldmljZSA9PT0gXCJkZXNrdG9wXCIgPyBudWxsIDogdGhpcy5tb2RlbC5hY3RpdmF0ZVpvb219XG4gICAgICAgICAgb25Nb3VzZUxlYXZlPXt0aGlzLm1vZGVsLmRldmljZSA9PT0gXCJkZXNrdG9wXCIgPyBudWxsIDogdGhpcy5tb2RlbC5kZWFjdGl2YXRlWm9vbX1cbiAgICAgICAgPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzTmFtZT1cInN2ZC1zaW11bGF0b3Itd3JhcHBlclwiXG4gICAgICAgICAgICBpZD1cInN2ZC1zaW11bGF0b3Itd3JhcHBlclwiXG4gICAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgICB3aWR0aDogdGhpcy5tb2RlbC5zaW11bGF0b3JGcmFtZS5mcmFtZVdpZHRoICsgXCJweFwiLFxuICAgICAgICAgICAgICBoZWlnaHQ6IHRoaXMubW9kZWwuc2ltdWxhdG9yRnJhbWUuZnJhbWVIZWlnaHQgKyBcInB4XCJcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBjbGFzc05hbWU9e1xuICAgICAgICAgICAgICAgIFwic3ZkLXNpbXVsYXRvci1mcmFtZSBcIiArIHRoaXMubW9kZWwuc2ltdWxhdG9yRnJhbWUuY3NzQ2xhc3NcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgICAgIHdpZHRoOlxuICAgICAgICAgICAgICAgICAgdGhpcy5tb2RlbC5zaW11bGF0b3JGcmFtZS5sYW5kc2NhcGVkRnJhbWVXaWR0aCArIFwicHhcIixcbiAgICAgICAgICAgICAgICBoZWlnaHQ6XG4gICAgICAgICAgICAgICAgICB0aGlzLm1vZGVsLnNpbXVsYXRvckZyYW1lLmxhbmRzY2FwZWRGcmFtZUhlaWdodCArIFwicHhcIlxuICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgPjwvZGl2PlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBjbGFzc05hbWU9XCJzdmQtc2ltdWxhdG9yXCJcbiAgICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgICB3aWR0aDpcbiAgICAgICAgICAgICAgICAgIHRoaXMubW9kZWwuc2ltdWxhdG9yRnJhbWUuZGV2aWNlV2lkdGggKyBcInB4XCIsXG4gICAgICAgICAgICAgICAgaGVpZ2h0OlxuICAgICAgICAgICAgICAgICAgdGhpcy5tb2RlbC5zaW11bGF0b3JGcmFtZS5kZXZpY2VIZWlnaHQgKyBcInB4XCIsXG4gICAgICAgICAgICAgICAgdHJhbnNmb3JtOlxuICAgICAgICAgICAgICAgICAgXCJzY2FsZShcIiArXG4gICAgICAgICAgICAgICAgICB0aGlzLm1vZGVsLnNpbXVsYXRvckZyYW1lLnNjYWxlICtcbiAgICAgICAgICAgICAgICAgIFwiKSB0cmFuc2xhdGUoLTUwJSwgLTUwJSlcIlxuICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2ZC1zaW11bGF0b3ItY29udGVudFwiPlxuICAgICAgICAgICAgICAgIDxTdXJ2ZXkgbW9kZWw9e3RoaXMubW9kZWwuc3VydmV5fT48L1N1cnZleT5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3NOYW1lPXttYWluU2ltdWxhdG9yQ2xhc3N9PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3ZkLXNpbXVsYXRvci1jb250ZW50XCI+XG4gICAgICAgICAgICA8U3VydmV5IG1vZGVsPXt0aGlzLm1vZGVsLnN1cnZleX0+PC9TdXJ2ZXk+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgKTtcbiAgICB9XG4gIH1cbn1cbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IEJhc2UgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7XG4gIFJlYWN0RWxlbWVudEZhY3RvcnksXG4gIFN1cnZleUVsZW1lbnRCYXNlLFxuICBTdXJ2ZXlcbn0gZnJvbSBcInN1cnZleS1yZWFjdC11aVwiO1xuaW1wb3J0IHsgVHJhbnNsYXRpb24gfSBmcm9tIFwic3VydmV5LWNyZWF0b3ItY29yZVwiO1xuXG5leHBvcnQgY2xhc3MgVGFiVHJhbnNsYXRpb25Db21wb25lbnQgZXh0ZW5kcyBTdXJ2ZXlFbGVtZW50QmFzZTxhbnksIGFueT4ge1xuICBwcml2YXRlIGdldCBtb2RlbCgpOiBUcmFuc2xhdGlvbiB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuZGF0YTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0U3RhdGVFbGVtZW50KCk6IEJhc2Uge1xuICAgIHJldHVybiB0aGlzLm1vZGVsO1xuICB9XG4gIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIGlmICghdGhpcy5tb2RlbCkgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3ZjLWNyZWF0b3ItdGFiX19jb250ZW50IHN2Yy10cmFuc2xhdGlvbi10YWJcIj5cbiAgICAgICAge3RoaXMucmVuZGVyRWxlbWVudENvbnRlbnQoKX1cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbiAgcmVuZGVyRWxlbWVudENvbnRlbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIGlmICh0aGlzLm1vZGVsLmlzRW1wdHkpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3Qtbm8tc3RyaW5nc1wiPlxuICAgICAgICAgIDxzcGFuPnt0aGlzLm1vZGVsLm5vU3RyaW5nc1RleHR9PC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3QtY29udGVudFwiPlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3ZjLWZsZXgtY29sdW1uIHN0LXN0cmluZ3Mtd3JhcHBlclwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmMtZmxleC1yb3cgc3Qtc3RyaW5ncy1oZWFkZXJcIj5cbiAgICAgICAgICAgICAgPFN1cnZleSBtb2RlbD17dGhpcy5tb2RlbC5zdHJpbmdzSGVhZGVyU3VydmV5fT48L1N1cnZleT5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmMtZmxleC1yb3cgc3ZjLXBsdWdpbi10YWJfX2NvbnRlbnQgc3Qtc3RyaW5nc1wiPlxuICAgICAgICAgICAgICA8U3VydmV5IG1vZGVsPXt0aGlzLm1vZGVsLnN0cmluZ3NTdXJ2ZXl9PjwvU3VydmV5PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgKTtcbiAgICB9XG4gIH1cbn1cblxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXCJzdmMtdGFiLXRyYW5zbGF0aW9uXCIsIChwcm9wcykgPT4ge1xuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChUYWJUcmFuc2xhdGlvbkNvbXBvbmVudCwgcHJvcHMpO1xufSk7XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBSZWFjdEVsZW1lbnRGYWN0b3J5IH0gZnJvbSBcInN1cnZleS1yZWFjdC11aVwiO1xuXG5leHBvcnQgY2xhc3MgVHJhbnNsYXRpb25MaW5lU2tlbGV0b24gZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQ8YW55LCBhbnk+IHtcbiAgcmVuZGVyKCkge1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cInNkLXRyYW5zbGF0aW9uLWxpbmUtc2tlbGV0b25cIj5cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbn1cblxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXCJzZC10cmFuc2xhdGlvbi1saW5lLXNrZWxldG9uXCIsIChwcm9wczogYW55KSA9PiB7XG4gIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFRyYW5zbGF0aW9uTGluZVNrZWxldG9uLCBwcm9wcyk7XG59KTtcbiIsImltcG9ydCAqIGFzIFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgUXVlc3Rpb25Ecm9wZG93bk1vZGVsLCBSZW5kZXJlckZhY3RvcnkgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IGluaXRMb2dpY09wZXJhdG9yIH0gZnJvbSBcInN1cnZleS1jcmVhdG9yLWNvcmVcIjtcbmltcG9ydCB7IFN1cnZleVF1ZXN0aW9uRHJvcGRvd24sIFJlYWN0UXVlc3Rpb25GYWN0b3J5IH0gZnJvbSBcInN1cnZleS1yZWFjdC11aVwiO1xuXG5leHBvcnQgY2xhc3MgU3VydmV5TG9naWNPcGVydG9yIGV4dGVuZHMgU3VydmV5UXVlc3Rpb25Ecm9wZG93biB7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gIH1cblxuICBwcm90ZWN0ZWQgcmVuZGVySW5wdXQoKTogSlNYLkVsZW1lbnQge1xuICAgIGNvbnN0IHEgPSB0aGlzLnF1ZXN0aW9uIGFzIFF1ZXN0aW9uRHJvcGRvd25Nb2RlbDtcbiAgICBpbml0TG9naWNPcGVyYXRvcihxKTtcbiAgICBjb25zdCB0ZXh0ID0gKHEuc2VsZWN0ZWRJdGVtTG9jVGV4dCkgPyB0aGlzLnJlbmRlckxvY1N0cmluZyhxLnNlbGVjdGVkSXRlbUxvY1RleHQpIDogXCJcIjtcblxuICAgIHJldHVybiAoPGRpdlxuICAgICAgaWQ9e3RoaXMucXVlc3Rpb24uaW5wdXRJZH1cbiAgICAgIGNsYXNzTmFtZT17cS5nZXRDb250cm9sQ2xhc3MoKX1cbiAgICAgIHRhYkluZGV4PXt0aGlzLnF1ZXN0aW9uLmlzSW5wdXRSZWFkT25seSA/IHVuZGVmaW5lZCA6IDB9XG4gICAgICBvbkNsaWNrPXt0aGlzLmNsaWNrfVxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtY29tbWVudFxuICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgZGlzYWJsZWQ9e3RoaXMucXVlc3Rpb24uaXNJbnB1dFJlYWRPbmx5fVxuICAgICAgcmVxdWlyZWQ9e3RoaXMucXVlc3Rpb24uaXNSZXF1aXJlZH1cbiAgICAgIG9uQ2hhbmdlPXt0aGlzLnVwZGF0ZVZhbHVlT25FdmVudH1cbiAgICAgIG9uSW5wdXQ9e3RoaXMudXBkYXRlVmFsdWVPbkV2ZW50fVxuICAgICAgb25LZXlVcD17dGhpcy5rZXloYW5kbGVyfVxuICAgICAgcm9sZT17dGhpcy5xdWVzdGlvbi5hcmlhUm9sZX1cbiAgICAgIGFyaWEtcmVxdWlyZWQ9e3RoaXMucXVlc3Rpb24uYXJpYVJlcXVpcmVkfVxuICAgICAgYXJpYS1sYWJlbD17dGhpcy5xdWVzdGlvbi5hcmlhTGFiZWx9XG4gICAgICBhcmlhLWludmFsaWQ9e3RoaXMucXVlc3Rpb24uYXJpYUludmFsaWR9XG4gICAgICBhcmlhLWRlc2NyaWJlZGJ5PXt0aGlzLnF1ZXN0aW9uLmFyaWFEZXNjcmliZWRCeX1cbiAgICA+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLmNvbnRyb2xWYWx1ZX0+XG4gICAgICAgIHt0ZXh0fVxuICAgICAgICA8ZGl2PntxLnJlYWRPbmx5VGV4dH08L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAge3RoaXMuY3JlYXRlQ2xlYXJCdXR0b24oKX1cbiAgICA8L2Rpdj4pO1xuICB9XG59XG5cblJlYWN0UXVlc3Rpb25GYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyUXVlc3Rpb24oXCJzdi1sb2dpYy1vcGVyYXRvclwiLCAocHJvcHMpID0+IHtcbiAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3VydmV5TG9naWNPcGVydG9yLCBwcm9wcyk7XG59KTtcblxuUmVuZGVyZXJGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyUmVuZGVyZXIoXCJkcm9wZG93blwiLCBcImxvZ2ljb3BlcmF0b3JcIiwgXCJzdi1sb2dpYy1vcGVyYXRvclwiKTsiLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBWZXJ0aWNhbFJlc3BvbnNpdml0eU1hbmFnZXIgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFJlYWN0RWxlbWVudEZhY3RvcnkgfSBmcm9tIFwic3VydmV5LXJlYWN0LXVpXCI7XG5pbXBvcnQgeyBJU3VydmV5Q3JlYXRvclRvb2xib3hQcm9wcywgVG9vbGJveCB9IGZyb20gXCIuL1Rvb2xib3hcIjtcblxuZXhwb3J0IGNsYXNzIEFkYXB0aXZlVG9vbGJveCBleHRlbmRzIFRvb2xib3gge1xuICBwcml2YXRlIG1hbmFnZXI6IFZlcnRpY2FsUmVzcG9uc2l2aXR5TWFuYWdlcjtcbiAgcHJpdmF0ZSByb290UmVmOiBSZWFjdC5SZWZPYmplY3Q8SFRNTERpdkVsZW1lbnQ+O1xuXG4gIGNvbnN0cnVjdG9yKHByb3BzOiBJU3VydmV5Q3JlYXRvclRvb2xib3hQcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLnJvb3RSZWYgPSBSZWFjdC5jcmVhdGVSZWYoKTtcbiAgfVxuXG4gIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIHN1cGVyLmNvbXBvbmVudERpZE1vdW50KCk7XG4gICAgY29uc3QgY29udGFpbmVyID0gdGhpcy5yb290UmVmLmN1cnJlbnQ7XG4gICAgaWYgKCFjb250YWluZXIpIHJldHVybjtcbiAgICB0aGlzLm1hbmFnZXIgPSBuZXcgVmVydGljYWxSZXNwb25zaXZpdHlNYW5hZ2VyKFxuICAgICAgY29udGFpbmVyLFxuICAgICAgdGhpcy50b29sYm94LFxuICAgICAgXCIuc3ZjLXRvb2xib3hfX3Rvb2w6bm90KC5zdi1kb3RzKVwiXG4gICAgKTtcbiAgfVxuICBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICB0aGlzLm1hbmFnZXIgJiYgKHRoaXMubWFuYWdlci5kaXNwb3NlKCkpO1xuICAgIHN1cGVyLmNvbXBvbmVudFdpbGxVbm1vdW50KCk7XG4gIH1cbiAgcmVuZGVyKCk6IEpTWC5FbGVtZW50IHtcbiAgICBpZiAoIXRoaXMudG9vbGJveC5oYXNBY3Rpb25zKSByZXR1cm4gbnVsbDtcblxuICAgIGNvbnN0IGNsYXNzTmFtZSA9IFwic3ZjLXRvb2xib3hcIiArICh0aGlzLnRvb2xib3guaXNDb21wYWN0ID8gXCIgc3ZjLXRvb2xib3gtLWNvbXBhY3RcIiA6IFwiXCIpO1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IHJlZj17dGhpcy5yb290UmVmfSBjbGFzc05hbWU9e2NsYXNzTmFtZX0+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3ZjLXRvb2xib3hfX2NvbnRhaW5lclwiPlxuICAgICAgICAgIHsodGhpcy50b29sYm94LmlzQ29tcGFjdCB8fCB0aGlzLnRvb2xib3guY2F0ZWdvcmllcy5sZW5ndGggPT0gMSB8fCAhdGhpcy50b29sYm94LnNob3dDYXRlZ29yeVRpdGxlcykgP1xuICAgICAgICAgICAgKDxkaXYgY2xhc3NOYW1lPVwic3ZjLXRvb2xib3hfX2NhdGVnb3J5XCI+XG4gICAgICAgICAgICAgIHt0aGlzLnJlbmRlckl0ZW1zKHRoaXMudG9vbGJveC5yZW5kZXJlZEFjdGlvbnMsIHRoaXMudG9vbGJveC5pc0NvbXBhY3QpfVxuICAgICAgICAgICAgPC9kaXY+KVxuICAgICAgICAgICAgOiB0aGlzLnJlbmRlckNhdGVnb3JpZXMoKVxuICAgICAgICAgIH1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG59XG5cblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFwic3ZjLWFkYXB0aXZlLXRvb2xib3hcIiwgKHByb3BzKSA9PiB7XG4gIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KEFkYXB0aXZlVG9vbGJveCwgcHJvcHMpO1xufSk7XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBCYXNlIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBSZWFjdEVsZW1lbnRGYWN0b3J5LCBTdXJ2ZXlFbGVtZW50QmFzZSB9IGZyb20gXCJzdXJ2ZXktcmVhY3QtdWlcIjtcbmltcG9ydCB7IENyZWF0b3JCYXNlIH0gZnJvbSBcInN1cnZleS1jcmVhdG9yLWNvcmVcIjtcbmltcG9ydCB7IFN1cnZleUNyZWF0b3JUb29sYm94VG9vbCB9IGZyb20gXCIuL1Rvb2xib3hJdGVtXCI7XG5pbXBvcnQgeyBTdXJ2ZXlDcmVhdG9yVG9vbGJveENhdGVnb3J5IH0gZnJvbSBcIi4vVG9vbGJveENhdGVnb3J5XCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVN1cnZleUNyZWF0b3JUb29sYm94UHJvcHMge1xuICBtb2RlbDogQ3JlYXRvckJhc2U7XG59XG5cbmV4cG9ydCBjbGFzcyBUb29sYm94IGV4dGVuZHMgU3VydmV5RWxlbWVudEJhc2U8SVN1cnZleUNyZWF0b3JUb29sYm94UHJvcHMsIGFueT4ge1xuICBwdWJsaWMgZ2V0IGNyZWF0b3IoKSB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMubW9kZWw7XG4gIH1cbiAgcHVibGljIGdldCB0b29sYm94KCkge1xuICAgIHJldHVybiB0aGlzLmNyZWF0b3IudG9vbGJveDtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0U3RhdGVFbGVtZW50KCk6IEJhc2Uge1xuICAgIHJldHVybiB0aGlzLnRvb2xib3g7XG4gIH1cblxuICByZW5kZXIoKTogSlNYLkVsZW1lbnQge1xuICAgIGlmICghdGhpcy50b29sYm94Lmhhc0FjdGlvbnMpIHJldHVybiBudWxsO1xuXG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3ZjLXRvb2xib3hcIj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmMtdG9vbGJveF9fY29udGFpbmVyXCI+XG4gICAgICAgICAgeyh0aGlzLnRvb2xib3guY2F0ZWdvcmllcy5sZW5ndGggPT0gMSB8fCAhdGhpcy50b29sYm94LnNob3dDYXRlZ29yeVRpdGxlcykgP1xuICAgICAgICAgICAgKDxkaXYgY2xhc3NOYW1lPVwic3ZjLXRvb2xib3hfX2NhdGVnb3J5XCI+XG4gICAgICAgICAgICAgIHt0aGlzLnJlbmRlckl0ZW1zKHRoaXMudG9vbGJveC52aXNpYmxlQWN0aW9ucyl9XG4gICAgICAgICAgICA8L2Rpdj4pXG4gICAgICAgICAgICA6IHRoaXMucmVuZGVyQ2F0ZWdvcmllcygpXG4gICAgICAgICAgfVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cblxuICByZW5kZXJJdGVtcyhpdGVtczogQXJyYXk8YW55PiwgaXNDb21wYWN0ID0gZmFsc2UpIHtcbiAgICByZXR1cm4gaXRlbXMubWFwKChpdGVtLCBpdGVtSW5kZXgpID0+XG4gICAgICA8U3VydmV5Q3JlYXRvclRvb2xib3hUb29sIGl0ZW09eyhpdGVtIGFzIGFueSl9IGNyZWF0b3I9e3RoaXMuY3JlYXRvcn0gaXNDb21wYWN0PXtpc0NvbXBhY3R9IGtleT17XCJpdGVtXCIgKyBpdGVtSW5kZXh9ID48L1N1cnZleUNyZWF0b3JUb29sYm94VG9vbD5cbiAgICApO1xuICB9XG5cbiAgcmVuZGVyQ2F0ZWdvcmllcygpIHtcbiAgICByZXR1cm4gdGhpcy50b29sYm94LmNhdGVnb3JpZXMubWFwKChjYXRlZ29yeSwgaW5kZXgpID0+IHtcbiAgICAgIHJldHVybiA8U3VydmV5Q3JlYXRvclRvb2xib3hDYXRlZ29yeSBjYXRlZ29yeT17Y2F0ZWdvcnl9IHRvb2xib3g9e3RoaXMudG9vbGJveH0ga2V5PXtcIml0ZW1cIiArIGluZGV4fSA+PC9TdXJ2ZXlDcmVhdG9yVG9vbGJveENhdGVnb3J5PjtcbiAgICB9KTtcbiAgfVxufVxuXG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcInN2Yy10b29sYm94XCIsIChwcm9wcykgPT4ge1xuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChUb29sYm94LCBwcm9wcyk7XG59KTtcbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IEJhc2UgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IGF0dGFjaEtleTJjbGljaywgUmVhY3RFbGVtZW50RmFjdG9yeSwgU3VydmV5RWxlbWVudEJhc2UsIFN2Z0ljb24gfSBmcm9tIFwic3VydmV5LXJlYWN0LXVpXCI7XG5pbXBvcnQgeyBRdWVzdGlvblRvb2xib3gsIFF1ZXN0aW9uVG9vbGJveENhdGVnb3J5IH0gZnJvbSBcInN1cnZleS1jcmVhdG9yLWNvcmVcIjtcbmltcG9ydCB7IFN1cnZleUNyZWF0b3JUb29sYm94VG9vbCB9IGZyb20gXCIuL1Rvb2xib3hJdGVtXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVN1cnZleUNyZWF0b3JUb29sYm94Q2F0ZWdvcnlQcm9wcyB7XG4gIGNhdGVnb3J5OiBRdWVzdGlvblRvb2xib3hDYXRlZ29yeTtcbiAgdG9vbGJveDogUXVlc3Rpb25Ub29sYm94O1xufVxuXG5leHBvcnQgY2xhc3MgU3VydmV5Q3JlYXRvclRvb2xib3hDYXRlZ29yeSBleHRlbmRzIFN1cnZleUVsZW1lbnRCYXNlPElTdXJ2ZXlDcmVhdG9yVG9vbGJveENhdGVnb3J5UHJvcHMsIGFueT4ge1xuXG4gIHB1YmxpYyBnZXQgY2F0ZWdvcnkoKSB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuY2F0ZWdvcnk7XG4gIH1cbiAgcHVibGljIGdldCB0b29sYm94KCkge1xuICAgIHJldHVybiB0aGlzLnByb3BzLnRvb2xib3g7XG4gIH1cbiAgcHVibGljIGdldCBjbGFzcygpIHtcbiAgICByZXR1cm4gXCJzdmMtdG9vbGJveF9fY2F0ZWdvcnlcIiArICh0aGlzLmNhdGVnb3J5LmNvbGxhcHNlZCA/IFwiIHN2Yy10b29sYm94X19jYXRlZ29yeS0tY29sbGFwc2VkXCIgOiBcIlwiKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRTdGF0ZUVsZW1lbnQoKTogQmFzZSB7XG4gICAgcmV0dXJuICh0aGlzLmNhdGVnb3J5IGFzIGFueSk7XG4gIH1cblxuICByZW5kZXIoKTogSlNYLkVsZW1lbnQge1xuICAgIGNvbnN0IGhlYWRlciA9IHRoaXMucmVuZGVyQ2F0ZWdvcnlIZWFkZXIoKTtcbiAgICBjb25zdCBpdGVtcyA9IHRoaXMucmVuZGVyQ2F0ZWdvcnlDb250ZW50KCk7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPXt0aGlzLmNsYXNzfSBrZXk9e3RoaXMuY2F0ZWdvcnkubmFtZX0+XG4gICAgICAgIHtoZWFkZXJ9XG4gICAgICAgIHtpdGVtc31cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cblxuICByZW5kZXJDYXRlZ29yeUhlYWRlcigpOiBKU1guRWxlbWVudCB7XG4gICAgbGV0IGNsYXNzTmFtZSA9IFwic3ZjLXRvb2xib3hfX2NhdGVnb3J5LWhlYWRlclwiO1xuICAgIGlmICh0aGlzLnRvb2xib3guY2FuQ29sbGFwc2VDYXRlZ29yaWVzKSB7XG4gICAgICBjbGFzc05hbWUgKz0gXCIgc3ZjLXRvb2xib3hfX2NhdGVnb3J5LWhlYWRlci0tY29sbGFwc2VkXCI7XG4gICAgfVxuICAgIHJldHVybiBhdHRhY2hLZXkyY2xpY2soXG4gICAgICA8ZGl2IGNsYXNzTmFtZT17Y2xhc3NOYW1lfSBvbkNsaWNrPXtlID0+IHRoaXMuY2F0ZWdvcnkudG9nZ2xlU3RhdGUoKX0+XG4gICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInN2Yy10b29sYm94X19jYXRlZ29yeS10aXRsZVwiPnt0aGlzLmNhdGVnb3J5Lm5hbWV9PC9zcGFuPlxuICAgICAgICB7dGhpcy5yZW5kZXJCdXR0b24oKX1cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cblxuICByZW5kZXJCdXR0b24oKTogSlNYLkVsZW1lbnQge1xuICAgIGlmICghdGhpcy50b29sYm94LmNhbkNvbGxhcHNlQ2F0ZWdvcmllcykgcmV0dXJuIG51bGw7XG5cbiAgICBjb25zdCBpY29uTmFtZSA9IHRoaXMuY2F0ZWdvcnkuY29sbGFwc2VkID8gXCJhcnJvdy1kb3duXCIgOiBcImFycm93LXVwXCI7XG4gICAgY29uc3Qgc3VmZml4TmFtZSA9IHRoaXMuY2F0ZWdvcnkuY29sbGFwc2VkID8gXCJleHBhbmRcIiA6IFwiY29sbGFwc2VcIjtcbiAgICBjb25zdCBzdmdJY29uQ2xhc3NOYW1lID0gXCJzdmMtdG9vbGJveF9fY2F0ZWdvcnktaGVhZGVyX19idXR0b24gc3ZjLXN0cmluZy1lZGl0b3JfX2J1dHRvbi0tXCIgKyBzdWZmaXhOYW1lO1xuICAgIHJldHVybiAoPGRpdiBjbGFzc05hbWU9XCJzdmMtdG9vbGJveF9fY2F0ZWdvcnktaGVhZGVyX19jb250cm9sc1wiPlxuICAgICAgPFN2Z0ljb24gY2xhc3NOYW1lPXtzdmdJY29uQ2xhc3NOYW1lfSBpY29uTmFtZT17XCJpY29uLVwiICsgaWNvbk5hbWV9IHNpemU9ezI0fT48L1N2Z0ljb24+XG4gICAgPC9kaXY+KTtcbiAgfVxuXG4gIHByb3RlY3RlZCByZW5kZXJDYXRlZ29yeUNvbnRlbnQoKTogQXJyYXk8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMucmVuZGVySXRlbXModGhpcy5jYXRlZ29yeS5pdGVtcyk7XG4gIH1cblxuICByZW5kZXJJdGVtcyhpdGVtczogQXJyYXk8YW55PiwgaXNDb21wYWN0ID0gZmFsc2UpIHtcbiAgICByZXR1cm4gaXRlbXMubWFwKChpdGVtLCBpdGVtSW5kZXgpID0+XG4gICAgICA8U3VydmV5Q3JlYXRvclRvb2xib3hUb29sIGl0ZW09eyhpdGVtIGFzIGFueSl9IGNyZWF0b3I9e3RoaXMudG9vbGJveC5jcmVhdG9yfSBpc0NvbXBhY3Q9e2lzQ29tcGFjdH0ga2V5PXtcIml0ZW1cIiArIGl0ZW1JbmRleH0gPjwvU3VydmV5Q3JlYXRvclRvb2xib3hUb29sPlxuICAgICk7XG4gIH1cbn1cblxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXCJzdmMtdG9vbGJveC1jYXRlZ29yeVwiLCAocHJvcHMpID0+IHtcbiAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3VydmV5Q3JlYXRvclRvb2xib3hDYXRlZ29yeSwgcHJvcHMpO1xufSk7IiwiaW1wb3J0IHtcbiAgQ3JlYXRvckJhc2UsXG4gIGVkaXRvckxvY2FsaXphdGlvbixcbiAgSVF1ZXN0aW9uVG9vbGJveEl0ZW1cbn0gZnJvbSBcInN1cnZleS1jcmVhdG9yLWNvcmVcIjtcbmltcG9ydCBSZWFjdCwgeyBDU1NQcm9wZXJ0aWVzIH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBUb29sYm94VG9vbFZpZXdNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY3JlYXRvci1jb3JlXCI7XG5pbXBvcnQge1xuICBBY3Rpb24sXG4gIEJhc2UsXG4gIFN1cnZleU1vZGVsXG59IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHtcbiAgYXR0YWNoS2V5MmNsaWNrLFxuICBSZWFjdEVsZW1lbnRGYWN0b3J5LFxuICBTdmdJY29uXG59IGZyb20gXCJzdXJ2ZXktcmVhY3QtdWlcIjtcbmltcG9ydCB7IENyZWF0b3JNb2RlbEVsZW1lbnQgfSBmcm9tIFwiLi4vTW9kZWxFbGVtZW50XCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVN1cnZleUNyZWF0b3JUb29sYm94SXRlbVByb3BzIHtcbiAgaXRlbTogSVF1ZXN0aW9uVG9vbGJveEl0ZW07XG4gIGNyZWF0b3I6IENyZWF0b3JCYXNlO1xuICBpc0NvbXBhY3Q6IGJvb2xlYW47XG59XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlDcmVhdG9yVG9vbGJveFRvb2wgZXh0ZW5kcyBDcmVhdG9yTW9kZWxFbGVtZW50PFxuICBJU3VydmV5Q3JlYXRvclRvb2xib3hJdGVtUHJvcHMsXG4gIGFueVxuPiB7XG4gIG1vZGVsOiBUb29sYm94VG9vbFZpZXdNb2RlbDtcblxuICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgfVxuICBwcm90ZWN0ZWQgY3JlYXRlTW9kZWwoKTogdm9pZCB7XG4gICAgdGhpcy5tb2RlbCA9IG5ldyBUb29sYm94VG9vbFZpZXdNb2RlbCh0aGlzLml0ZW0sIHRoaXMucHJvcHMuY3JlYXRvcik7XG4gIH1cbiAgcHJvdGVjdGVkIGdldFVwZGF0ZWRNb2RlbFByb3BzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gW1wiY3JlYXRvclwiLCBcIml0ZW1cIl07XG4gIH1cbiAgcHVibGljIGdldCBpdGVtKCkge1xuICAgIHJldHVybiB0aGlzLnByb3BzLml0ZW07XG4gIH1cbiAgcHVibGljIGdldCBjcmVhdG9yKCkge1xuICAgIHJldHVybiB0aGlzLnByb3BzLmNyZWF0b3I7XG4gIH1cbiAgcHVibGljIGdldCBpc0NvbXBhY3QoKSB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuaXNDb21wYWN0O1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldFN0YXRlRWxlbWVudCgpOiBCYXNlIHtcbiAgICByZXR1cm4gKHRoaXMuaXRlbSBhcyBhbnkpO1xuICB9XG5cbiAgcmVuZGVyKCk6IEpTWC5FbGVtZW50IHtcbiAgICBjb25zdCBpdGVtID0gKCh0aGlzLml0ZW0gYXMgYW55KSBhcyBBY3Rpb24pO1xuICAgIGNvbnN0IGNsYXNzTmFtZSA9IFwic3ZjLXRvb2xib3hfX3Rvb2wgXCIgKyBpdGVtLmNzcyArIChpdGVtLmlzVmlzaWJsZSA/IFwiXCIgOiBcIiBzdi1hY3Rpb24tLWhpZGRlblwiKTtcbiAgICBjb25zdCBpdGVtQ29tcG9uZW50ID0gUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5jcmVhdGVFbGVtZW50KFxuICAgICAgdGhpcy5pdGVtLmNvbXBvbmVudCB8fCBcInN2Yy10b29sYm94LWl0ZW1cIixcbiAgICAgIHtcbiAgICAgICAgaXRlbTogdGhpcy5pdGVtLFxuICAgICAgICBjcmVhdG9yOiB0aGlzLmNyZWF0b3IsXG4gICAgICAgIGlzQ29tcGFjdDogdGhpcy5pc0NvbXBhY3RcbiAgICAgIH1cbiAgICApO1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT17Y2xhc3NOYW1lfSBrZXk9e2l0ZW0uaWR9XG4gICAgICAgIG9uUG9pbnRlckRvd249eyhldmVudDogYW55KSA9PiB7XG4gICAgICAgICAgZXZlbnQucGVyc2lzdCgpO1xuICAgICAgICAgIHRoaXMubW9kZWwub25Qb2ludGVyRG93bihldmVudCk7XG4gICAgICAgIH19XG4gICAgICA+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3YtYWN0aW9uX19jb250ZW50XCI+XG4gICAgICAgICAgeyhpdGVtLm5lZWRTZXBhcmF0b3IgJiYgIXRoaXMuY3JlYXRvci50b29sYm94LnNob3dDYXRlZ29yeVRpdGxlcykgPyAoXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2Yy10b29sYm94X19jYXRlZ29yeS1zZXBhcmF0b3JcIj48L2Rpdj5cbiAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICB7aXRlbUNvbXBvbmVudH1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlDcmVhdG9yVG9vbGJveEl0ZW0gZXh0ZW5kcyBDcmVhdG9yTW9kZWxFbGVtZW50PFxuICBJU3VydmV5Q3JlYXRvclRvb2xib3hJdGVtUHJvcHMsXG4gIGFueVxuPiB7XG4gIG1vZGVsOiBUb29sYm94VG9vbFZpZXdNb2RlbDtcbiAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gIH1cbiAgcHJvdGVjdGVkIGNyZWF0ZU1vZGVsKCk6IHZvaWQge1xuICAgIGNvbnN0IHRvb2xib3hJdGVtOiBJUXVlc3Rpb25Ub29sYm94SXRlbSA9IHRoaXMucHJvcHMuaXRlbTtcbiAgICB0aGlzLm1vZGVsID0gbmV3IFRvb2xib3hUb29sVmlld01vZGVsKHRvb2xib3hJdGVtLCB0aGlzLnByb3BzLmNyZWF0b3IpO1xuICB9XG4gIHByb3RlY3RlZCBnZXRVcGRhdGVkTW9kZWxQcm9wcygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIFtcImNyZWF0b3JcIiwgXCJpdGVtXCJdO1xuICB9XG4gIHB1YmxpYyBnZXQgaXRlbSgpIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5pdGVtO1xuICB9XG4gIHB1YmxpYyBnZXQgY3JlYXRvcigpIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5jcmVhdG9yO1xuICB9XG4gIHByb3RlY3RlZCBnZXRTdGF0ZUVsZW1lbnQoKTogQmFzZSB7XG4gICAgcmV0dXJuIHRoaXMubW9kZWw7XG4gIH1cbiAgcmVuZGVyKCk6IEpTWC5FbGVtZW50IHtcbiAgICBjb25zdCBjbGFzc05hbWUgPVxuICAgICAgXCJzdmMtdG9vbGJveF9faXRlbSBzdmMtdG9vbGJveF9faXRlbS0tXCIgKyB0aGlzLml0ZW0uaWNvbk5hbWU7XG4gICAgY29uc3QgYXJpYUxhYmVsID0gdGhpcy5pdGVtLnRvb2x0aXAgKyBcIiBcIiArIGVkaXRvckxvY2FsaXphdGlvbi5nZXRTdHJpbmcoXCJ0b29sYm94XCIpICsgXCIgaXRlbVwiO1xuICAgIHJldHVybiBhdHRhY2hLZXkyY2xpY2soXG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzTmFtZT17Y2xhc3NOYW1lfVxuICAgICAgICB0YWJJbmRleD17MH1cbiAgICAgICAgcm9sZT1cImJ1dHRvblwiXG4gICAgICAgIGFyaWEtbGFiZWw9e2FyaWFMYWJlbH1cbiAgICAgICAgb25DbGljaz17KGV2ZW50OiBhbnkpID0+IHtcbiAgICAgICAgICBldmVudC5wZXJzaXN0KCk7XG4gICAgICAgICAgdGhpcy5tb2RlbC5jbGljayhldmVudCk7XG4gICAgICAgIH19XG4gICAgICA+XG4gICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInN2Yy10b29sYm94X19pdGVtLWNvbnRhaW5lclwiPlxuICAgICAgICAgIDxTdmdJY29uIHNpemU9ezI0fSBpY29uTmFtZT17dGhpcy5pdGVtLmljb25OYW1lfSB0aXRsZT17YXJpYUxhYmVsfT48L1N2Z0ljb24+XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICAgeyh0aGlzLnByb3BzLmlzQ29tcGFjdCA/XG4gICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwic3ZjLXRvb2xib3hfX2l0ZW0tYmFubmVyIHN2Yy1pdGVtX19iYW5uZXJcIj5cbiAgICAgICAgICAgIDxTdmdJY29uIHNpemU9ezI0fSBpY29uTmFtZT17dGhpcy5pdGVtLmljb25OYW1lfSBjbGFzc05hbWU9XCJzdmMtdG9vbGJveF9faXRlbS1pY29uXCIgdGl0bGU9e2FyaWFMYWJlbH0+PC9TdmdJY29uPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwic3ZjLXRvb2xib3hfX2l0ZW0tdGl0bGVcIj57dGhpcy5pdGVtLnRpdGxlfTwvc3Bhbj5cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgOlxuICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInN2Yy10b29sYm94X19pdGVtLXRpdGxlXCI+e3RoaXMuaXRlbS50aXRsZX08L3NwYW4+XG4gICAgICAgICl9XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG59XG5cblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFwic3ZjLXRvb2xib3gtaXRlbVwiLCAocHJvcHMpID0+IHtcbiAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3VydmV5Q3JlYXRvclRvb2xib3hJdGVtLCBwcm9wcyk7XG59KTtcbiIsIm1vZHVsZS5leHBvcnRzID0gX19XRUJQQUNLX0VYVEVSTkFMX01PRFVMRV9yZWFjdF9fOyIsIm1vZHVsZS5leHBvcnRzID0gX19XRUJQQUNLX0VYVEVSTkFMX01PRFVMRV9yZWFjdF9kb21fXzsiLCJtb2R1bGUuZXhwb3J0cyA9IF9fV0VCUEFDS19FWFRFUk5BTF9NT0RVTEVfc3VydmV5X2NvcmVfXzsiLCJtb2R1bGUuZXhwb3J0cyA9IF9fV0VCUEFDS19FWFRFUk5BTF9NT0RVTEVfc3VydmV5X2NyZWF0b3JfY29yZV9fOyIsIm1vZHVsZS5leHBvcnRzID0gX19XRUJQQUNLX0VYVEVSTkFMX01PRFVMRV9zdXJ2ZXlfcmVhY3RfdWlfXzsiXSwic291cmNlUm9vdCI6IiJ9
|
|
4202
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9TdXJ2ZXlDcmVhdG9yL3dlYnBhY2svdW5pdmVyc2FsTW9kdWxlRGVmaW5pdGlvbiIsIndlYnBhY2s6Ly9TdXJ2ZXlDcmVhdG9yL3dlYnBhY2svYm9vdHN0cmFwIiwid2VicGFjazovL1N1cnZleUNyZWF0b3IvLi9zcmMvQWN0aW9uQnV0dG9uLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlDcmVhdG9yLy4vc3JjL0ltYWdlSXRlbVZhbHVlV3JhcHBlci50c3giLCJ3ZWJwYWNrOi8vU3VydmV5Q3JlYXRvci8uL3NyYy9JdGVtVmFsdWVXcmFwcGVyLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlDcmVhdG9yLy4vc3JjL0xvZ29JbWFnZS50c3giLCJ3ZWJwYWNrOi8vU3VydmV5Q3JlYXRvci8uL3NyYy9NYXRyaXhDZWxsV3JhcHBlci50c3giLCJ3ZWJwYWNrOi8vU3VydmV5Q3JlYXRvci8uL3NyYy9Nb2RlbEVsZW1lbnQudHN4Iiwid2VicGFjazovL1N1cnZleUNyZWF0b3IvLi9zcmMvTmF2aWdhdGlvbi50c3giLCJ3ZWJwYWNrOi8vU3VydmV5Q3JlYXRvci8uL3NyYy9Ob3RpZmllci50c3giLCJ3ZWJwYWNrOi8vU3VydmV5Q3JlYXRvci8uL3NyYy9PYmplY3RTZWxlY3Rvci50c3giLCJ3ZWJwYWNrOi8vU3VydmV5Q3JlYXRvci8uL3NyYy9QYWdlTmF2aWdhdG9yLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlDcmVhdG9yLy4vc3JjL1Byb3BlcnR5R3JpZC50c3giLCJ3ZWJwYWNrOi8vU3VydmV5Q3JlYXRvci8uL3NyYy9RdWVzdGlvbkVkaXRvckNvbnRlbnQudHN4Iiwid2VicGFjazovL1N1cnZleUNyZWF0b3IvLi9zcmMvUXVlc3Rpb25FbWJlZGRlZFN1cnZleS50c3giLCJ3ZWJwYWNrOi8vU3VydmV5Q3JlYXRvci8uL3NyYy9RdWVzdGlvbkxpbmtWYWx1ZS50c3giLCJ3ZWJwYWNrOi8vU3VydmV5Q3JlYXRvci8uL3NyYy9SZXN1bHRzLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlDcmVhdG9yLy4vc3JjL1NpZGVCYXIudHN4Iiwid2VicGFjazovL1N1cnZleUNyZWF0b3IvLi9zcmMvU3RyaW5nRWRpdG9yLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlDcmVhdG9yLy4vc3JjL1N1cnZleUNyZWF0b3IudHN4Iiwid2VicGFjazovL1N1cnZleUNyZWF0b3IvLi9zcmMvU3ZnQnVuZGxlLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlDcmVhdG9yLy4vc3JjL1RhYmJlZE1lbnUudHN4Iiwid2VicGFjazovL1N1cnZleUNyZWF0b3IvLi9zcmMvYWRvcm5lcnMvQ2VsbFF1ZXN0aW9uLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlDcmVhdG9yLy4vc3JjL2Fkb3JuZXJzL0NlbGxRdWVzdGlvbkRyb3Bkb3duLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlDcmVhdG9yLy4vc3JjL2Fkb3JuZXJzL1BhZ2UudHN4Iiwid2VicGFjazovL1N1cnZleUNyZWF0b3IvLi9zcmMvYWRvcm5lcnMvUGFuZWwudHN4Iiwid2VicGFjazovL1N1cnZleUNyZWF0b3IvLi9zcmMvYWRvcm5lcnMvUXVlc3Rpb24udHN4Iiwid2VicGFjazovL1N1cnZleUNyZWF0b3IvLi9zcmMvYWRvcm5lcnMvUXVlc3Rpb25Ecm9wZG93bi50c3giLCJ3ZWJwYWNrOi8vU3VydmV5Q3JlYXRvci8uL3NyYy9hZG9ybmVycy9RdWVzdGlvbkZvb3Rlci50c3giLCJ3ZWJwYWNrOi8vU3VydmV5Q3JlYXRvci8uL3NyYy9hZG9ybmVycy9RdWVzdGlvbkhlYWRlci50c3giLCJ3ZWJwYWNrOi8vU3VydmV5Q3JlYXRvci8uL3NyYy9hZG9ybmVycy9RdWVzdGlvbkltYWdlLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlDcmVhdG9yLy4vc3JjL2Fkb3JuZXJzL1F1ZXN0aW9uUmF0aW5nLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlDcmVhdG9yLy4vc3JjL2Fkb3JuZXJzL1F1ZXN0aW9uV2lkZ2V0LnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlDcmVhdG9yLy4vc3JjL2Fkb3JuZXJzL1Jvdy50c3giLCJ3ZWJwYWNrOi8vU3VydmV5Q3JlYXRvci8uL3NyYy9lbnRyaWVzL2hlbHBlcnMudHMiLCJ3ZWJwYWNrOi8vU3VydmV5Q3JlYXRvci8uL3NyYy9lbnRyaWVzL2luZGV4LnRzIiwid2VicGFjazovL1N1cnZleUNyZWF0b3IvLi9zcmMvZXZlbnRzLnRzIiwid2VicGFjazovL1N1cnZleUNyZWF0b3IvLi9zcmMvdGFicy9EZXNpZ25lci50c3giLCJ3ZWJwYWNrOi8vU3VydmV5Q3JlYXRvci8uL3NyYy90YWJzL0VtYmVkLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlDcmVhdG9yLy4vc3JjL3RhYnMvSnNvbkVkaXRvckFjZS50c3giLCJ3ZWJwYWNrOi8vU3VydmV5Q3JlYXRvci8uL3NyYy90YWJzL0pzb25FZGl0b3JUZXh0YXJlYS50c3giLCJ3ZWJwYWNrOi8vU3VydmV5Q3JlYXRvci8uL3NyYy90YWJzL0xvZ2ljLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlDcmVhdG9yLy4vc3JjL3RhYnMvUHJldmlldy50c3giLCJ3ZWJwYWNrOi8vU3VydmV5Q3JlYXRvci8uL3NyYy90YWJzL1N1cnZleVNpbXVsYXRvci50c3giLCJ3ZWJwYWNrOi8vU3VydmV5Q3JlYXRvci8uL3NyYy90YWJzL1RyYW5zbGF0aW9uLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlDcmVhdG9yLy4vc3JjL3RhYnMvVHJhbnNsYXRpb25MaW5lU2tlbGV0b24udHN4Iiwid2VicGFjazovL1N1cnZleUNyZWF0b3IvLi9zcmMvdGFicy9sb2dpYy1vcGVyYXRvci50c3giLCJ3ZWJwYWNrOi8vU3VydmV5Q3JlYXRvci8uL3NyYy90b29sYm94L0FkYXB0aXZlVG9vbGJveC50c3giLCJ3ZWJwYWNrOi8vU3VydmV5Q3JlYXRvci8uL3NyYy90b29sYm94L1Rvb2xib3gudHN4Iiwid2VicGFjazovL1N1cnZleUNyZWF0b3IvLi9zcmMvdG9vbGJveC9Ub29sYm94Q2F0ZWdvcnkudHN4Iiwid2VicGFjazovL1N1cnZleUNyZWF0b3IvLi9zcmMvdG9vbGJveC9Ub29sYm94SXRlbS50c3giLCJ3ZWJwYWNrOi8vU3VydmV5Q3JlYXRvci9leHRlcm5hbCB7XCJyb290XCI6XCJSZWFjdFwiLFwiY29tbW9uanMyXCI6XCJyZWFjdFwiLFwiY29tbW9uanNcIjpcInJlYWN0XCIsXCJhbWRcIjpcInJlYWN0XCJ9Iiwid2VicGFjazovL1N1cnZleUNyZWF0b3IvZXh0ZXJuYWwge1wicm9vdFwiOlwiUmVhY3RET01cIixcImNvbW1vbmpzMlwiOlwicmVhY3QtZG9tXCIsXCJjb21tb25qc1wiOlwicmVhY3QtZG9tXCIsXCJhbWRcIjpcInJlYWN0LWRvbVwifSIsIndlYnBhY2s6Ly9TdXJ2ZXlDcmVhdG9yL2V4dGVybmFsIHtcInJvb3RcIjpcIlN1cnZleVwiLFwiY29tbW9uanMyXCI6XCJzdXJ2ZXktY29yZVwiLFwiY29tbW9uanNcIjpcInN1cnZleS1jb3JlXCIsXCJhbWRcIjpcInN1cnZleS1jb3JlXCJ9Iiwid2VicGFjazovL1N1cnZleUNyZWF0b3IvZXh0ZXJuYWwge1wicm9vdFwiOlwiU3VydmV5Q3JlYXRvckNvcmVcIixcImNvbW1vbmpzMlwiOlwic3VydmV5LWNyZWF0b3ItY29yZVwiLFwiY29tbW9uanNcIjpcInN1cnZleS1jcmVhdG9yLWNvcmVcIixcImFtZFwiOlwic3VydmV5LWNyZWF0b3ItY29yZVwifSIsIndlYnBhY2s6Ly9TdXJ2ZXlDcmVhdG9yL2V4dGVybmFsIHtcInJvb3RcIjpcIlN1cnZleVJlYWN0XCIsXCJjb21tb25qczJcIjpcInN1cnZleS1yZWFjdC11aVwiLFwiY29tbW9uanNcIjpcInN1cnZleS1yZWFjdC11aVwiLFwiYW1kXCI6XCJzdXJ2ZXktcmVhY3QtdWlcIn0iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNELE87UUNWQTtRQUNBOztRQUVBO1FBQ0E7O1FBRUE7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNB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QUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUU7WUFDL0QsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNoQixPQUFPLENBQUMsQ0FBQztBQUNYLENBQUMsQ0FBQzs7Ozs7Ozs7Ozs7OztBQ3RERjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FB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RUFBTSxTQUFTLEVBQUMseUJBQXlCLElBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQVEsQ0FDbkUsQ0FDRyxDQUNQLENBQUM7SUFDSixDQUFDO0lBQ0gsK0JBQUM7QUFBRCxDQUFDLENBckQ2QyxpRUFBbUIsR0FxRGhFOztBQUVELG1FQUFtQixDQUFDLFFBQVEsQ0FBQyxlQUFlLENBQUMsa0JBQWtCLEVBQUUsVUFBQyxLQUFLO0lBQ3JFLE9BQU8sNENBQUssQ0FBQyxhQUFhLENBQUMsd0JBQXdCLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDOUQsQ0FBQyxDQUFDLENBQUM7Ozs7Ozs7Ozs7OztBQzVJSCxtRDs7Ozs7Ozs7Ozs7QUNBQSx1RDs7Ozs7Ozs7Ozs7QUNBQSx5RDs7Ozs7Ozs7Ozs7QUNBQSxpRTs7Ozs7Ozs7Ozs7QUNBQSw2RCIsImZpbGUiOiJzdXJ2ZXktY3JlYXRvci1yZWFjdC5qcyIsInNvdXJjZXNDb250ZW50IjpbIihmdW5jdGlvbiB3ZWJwYWNrVW5pdmVyc2FsTW9kdWxlRGVmaW5pdGlvbihyb290LCBmYWN0b3J5KSB7XG5cdGlmKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlID09PSAnb2JqZWN0Jylcblx0XHRtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkocmVxdWlyZShcInJlYWN0XCIpLCByZXF1aXJlKFwicmVhY3QtZG9tXCIpLCByZXF1aXJlKFwic3VydmV5LWNvcmVcIiksIHJlcXVpcmUoXCJzdXJ2ZXktY3JlYXRvci1jb3JlXCIpLCByZXF1aXJlKFwic3VydmV5LXJlYWN0LXVpXCIpKTtcblx0ZWxzZSBpZih0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpXG5cdFx0ZGVmaW5lKFwiU3VydmV5Q3JlYXRvclwiLCBbXCJyZWFjdFwiLCBcInJlYWN0LWRvbVwiLCBcInN1cnZleS1jb3JlXCIsIFwic3VydmV5LWNyZWF0b3ItY29yZVwiLCBcInN1cnZleS1yZWFjdC11aVwiXSwgZmFjdG9yeSk7XG5cdGVsc2UgaWYodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnKVxuXHRcdGV4cG9ydHNbXCJTdXJ2ZXlDcmVhdG9yXCJdID0gZmFjdG9yeShyZXF1aXJlKFwicmVhY3RcIiksIHJlcXVpcmUoXCJyZWFjdC1kb21cIiksIHJlcXVpcmUoXCJzdXJ2ZXktY29yZVwiKSwgcmVxdWlyZShcInN1cnZleS1jcmVhdG9yLWNvcmVcIiksIHJlcXVpcmUoXCJzdXJ2ZXktcmVhY3QtdWlcIikpO1xuXHRlbHNlXG5cdFx0cm9vdFtcIlN1cnZleUNyZWF0b3JcIl0gPSBmYWN0b3J5KHJvb3RbXCJSZWFjdFwiXSwgcm9vdFtcIlJlYWN0RE9NXCJdLCByb290W1wiU3VydmV5XCJdLCByb290W1wiU3VydmV5Q3JlYXRvckNvcmVcIl0sIHJvb3RbXCJTdXJ2ZXlSZWFjdFwiXSk7XG59KSh0aGlzLCBmdW5jdGlvbihfX1dFQlBBQ0tfRVhURVJOQUxfTU9EVUxFX3JlYWN0X18sIF9fV0VCUEFDS19FWFRFUk5BTF9NT0RVTEVfcmVhY3RfZG9tX18sIF9fV0VCUEFDS19FWFRFUk5BTF9NT0RVTEVfc3VydmV5X2NvcmVfXywgX19XRUJQQUNLX0VYVEVSTkFMX01PRFVMRV9zdXJ2ZXlfY3JlYXRvcl9jb3JlX18sIF9fV0VCUEFDS19FWFRFUk5BTF9NT0RVTEVfc3VydmV5X3JlYWN0X3VpX18pIHtcbnJldHVybiAiLCIgXHQvLyBUaGUgbW9kdWxlIGNhY2hlXG4gXHR2YXIgaW5zdGFsbGVkTW9kdWxlcyA9IHt9O1xuXG4gXHQvLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuIFx0ZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXG4gXHRcdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuIFx0XHRpZihpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSkge1xuIFx0XHRcdHJldHVybiBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXS5leHBvcnRzO1xuIFx0XHR9XG4gXHRcdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG4gXHRcdHZhciBtb2R1bGUgPSBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSA9IHtcbiBcdFx0XHRpOiBtb2R1bGVJZCxcbiBcdFx0XHRsOiBmYWxzZSxcbiBcdFx0XHRleHBvcnRzOiB7fVxuIFx0XHR9O1xuXG4gXHRcdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuIFx0XHRtb2R1bGVzW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuIFx0XHQvLyBGbGFnIHRoZSBtb2R1bGUgYXMgbG9hZGVkXG4gXHRcdG1vZHVsZS5sID0gdHJ1ZTtcblxuIFx0XHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuIFx0XHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG4gXHR9XG5cblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGVzIG9iamVjdCAoX193ZWJwYWNrX21vZHVsZXNfXylcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubSA9IG1vZHVsZXM7XG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlIGNhY2hlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmMgPSBpbnN0YWxsZWRNb2R1bGVzO1xuXG4gXHQvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9uIGZvciBoYXJtb255IGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uZCA9IGZ1bmN0aW9uKGV4cG9ydHMsIG5hbWUsIGdldHRlcikge1xuIFx0XHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIG5hbWUpKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIG5hbWUsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBnZXR0ZXIgfSk7XG4gXHRcdH1cbiBcdH07XG5cbiBcdC8vIGRlZmluZSBfX2VzTW9kdWxlIG9uIGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uciA9IGZ1bmN0aW9uKGV4cG9ydHMpIHtcbiBcdFx0aWYodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLnRvU3RyaW5nVGFnKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFN5bWJvbC50b1N0cmluZ1RhZywgeyB2YWx1ZTogJ01vZHVsZScgfSk7XG4gXHRcdH1cbiBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbiBcdH07XG5cbiBcdC8vIGNyZWF0ZSBhIGZha2UgbmFtZXNwYWNlIG9iamVjdFxuIFx0Ly8gbW9kZSAmIDE6IHZhbHVlIGlzIGEgbW9kdWxlIGlkLCByZXF1aXJlIGl0XG4gXHQvLyBtb2RlICYgMjogbWVyZ2UgYWxsIHByb3BlcnRpZXMgb2YgdmFsdWUgaW50byB0aGUgbnNcbiBcdC8vIG1vZGUgJiA0OiByZXR1cm4gdmFsdWUgd2hlbiBhbHJlYWR5IG5zIG9iamVjdFxuIFx0Ly8gbW9kZSAmIDh8MTogYmVoYXZlIGxpa2UgcmVxdWlyZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy50ID0gZnVuY3Rpb24odmFsdWUsIG1vZGUpIHtcbiBcdFx0aWYobW9kZSAmIDEpIHZhbHVlID0gX193ZWJwYWNrX3JlcXVpcmVfXyh2YWx1ZSk7XG4gXHRcdGlmKG1vZGUgJiA4KSByZXR1cm4gdmFsdWU7XG4gXHRcdGlmKChtb2RlICYgNCkgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAmJiB2YWx1ZS5fX2VzTW9kdWxlKSByZXR1cm4gdmFsdWU7XG4gXHRcdHZhciBucyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18ucihucyk7XG4gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShucywgJ2RlZmF1bHQnLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2YWx1ZSB9KTtcbiBcdFx0aWYobW9kZSAmIDIgJiYgdHlwZW9mIHZhbHVlICE9ICdzdHJpbmcnKSBmb3IodmFyIGtleSBpbiB2YWx1ZSkgX193ZWJwYWNrX3JlcXVpcmVfXy5kKG5zLCBrZXksIGZ1bmN0aW9uKGtleSkgeyByZXR1cm4gdmFsdWVba2V5XTsgfS5iaW5kKG51bGwsIGtleSkpO1xuIFx0XHRyZXR1cm4gbnM7XG4gXHR9O1xuXG4gXHQvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5uID0gZnVuY3Rpb24obW9kdWxlKSB7XG4gXHRcdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuIFx0XHRcdGZ1bmN0aW9uIGdldERlZmF1bHQoKSB7IHJldHVybiBtb2R1bGVbJ2RlZmF1bHQnXTsgfSA6XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0TW9kdWxlRXhwb3J0cygpIHsgcmV0dXJuIG1vZHVsZTsgfTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgJ2EnLCBnZXR0ZXIpO1xuIFx0XHRyZXR1cm4gZ2V0dGVyO1xuIFx0fTtcblxuIFx0Ly8gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSBmdW5jdGlvbihvYmplY3QsIHByb3BlcnR5KSB7IHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBwcm9wZXJ0eSk7IH07XG5cbiBcdC8vIF9fd2VicGFja19wdWJsaWNfcGF0aF9fXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnAgPSBcIlwiO1xuXG5cbiBcdC8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuIFx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oX193ZWJwYWNrX3JlcXVpcmVfXy5zID0gXCIuL3NyYy9lbnRyaWVzL2luZGV4LnRzXCIpO1xuIiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgYXR0YWNoS2V5MmNsaWNrLCBTdXJ2ZXlFbGVtZW50QmFzZSwgfSBmcm9tIFwic3VydmV5LXJlYWN0LXVpXCI7XG5cbmV4cG9ydCBjbGFzcyBBY3Rpb25CdXR0b24gZXh0ZW5kcyBTdXJ2ZXlFbGVtZW50QmFzZTxhbnksIGFueT4ge1xuICByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICBsZXQgY2xhc3NlcyA9IHRoaXMucHJvcHMuY2xhc3NlcyArIFwiIHN2Yy1hY3Rpb24tYnV0dG9uXCI7XG4gICAgaWYgKHRoaXMucHJvcHMuc2VsZWN0ZWQpIHtcbiAgICAgIGNsYXNzZXMgKz0gXCIgc3ZjLWFjdGlvbi1idXR0b24tLXNlbGVjdGVkXCI7XG4gICAgfVxuICAgIGlmICh0aGlzLnByb3BzLmRpc2FibGVkKSB7XG4gICAgICBjbGFzc2VzICs9IFwiIHN2Yy1hY3Rpb24tYnV0dG9uLS1kaXNhYmxlZFwiO1xuICAgICAgcmV0dXJuIDxzcGFuIGNsYXNzTmFtZT17Y2xhc3Nlc30+e3RoaXMucHJvcHMudGV4dH08L3NwYW4+O1xuICAgIH1cbiAgICByZXR1cm4gKFxuICAgICAgPD5cbiAgICAgICAge2F0dGFjaEtleTJjbGljayhcbiAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgcm9sZT1cImJ1dHRvblwiXG4gICAgICAgICAgICBjbGFzc05hbWU9e2NsYXNzZXN9XG4gICAgICAgICAgICBvbkNsaWNrPXsoZSkgPT4ge1xuICAgICAgICAgICAgICBpZiAoIXRoaXMucHJvcHMuYWxsb3dCdWJibGUpIHtcbiAgICAgICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHRoaXMucHJvcHMuY2xpY2soKTtcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgICB0aXRsZT17dGhpcy5wcm9wcy50aXRsZX1cbiAgICAgICAgICA+XG4gICAgICAgICAgICB7dGhpcy5wcm9wcy50ZXh0fVxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgKX1cbiAgICAgIDwvPlxuICAgICk7XG4gIH1cbn1cbiIsImltcG9ydCB7IEltYWdlSXRlbVZhbHVlV3JhcHBlclZpZXdNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY3JlYXRvci1jb3JlXCI7XG5pbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBRdWVzdGlvblNlbGVjdEJhc2UsIEJhc2UsIEltYWdlSXRlbVZhbHVlLCBRdWVzdGlvbkltYWdlUGlja2VyTW9kZWwgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFJlYWN0RWxlbWVudEZhY3RvcnksIFN2Z0ljb24gfSBmcm9tIFwic3VydmV5LXJlYWN0LXVpXCI7XG5pbXBvcnQge1xuICBhdHRhY2hLZXkyY2xpY2ssXG59IGZyb20gXCJzdXJ2ZXktcmVhY3QtdWlcIjtcbmltcG9ydCB7IENyZWF0b3JNb2RlbEVsZW1lbnQgfSBmcm9tIFwiLi9Nb2RlbEVsZW1lbnRcIjtcblxuaW50ZXJmYWNlIEltYWdlSXRlbVZhbHVlQWRvcm5lckNvbXBvbmVudFByb3BzIHtcbiAgZWxlbWVudDogSlNYLkVsZW1lbnQ7XG4gIGNvbXBvbmVudERhdGE6IGFueTtcbiAgcXVlc3Rpb246IFF1ZXN0aW9uU2VsZWN0QmFzZTtcbiAgaXRlbTogSW1hZ2VJdGVtVmFsdWU7XG59XG5cbmV4cG9ydCBjbGFzcyBJbWFnZUl0ZW1WYWx1ZUFkb3JuZXJDb21wb25lbnQgZXh0ZW5kcyBDcmVhdG9yTW9kZWxFbGVtZW50PFxuICBJbWFnZUl0ZW1WYWx1ZUFkb3JuZXJDb21wb25lbnRQcm9wcyxcbiAgYW55XG4+IHtcbiAgbW9kZWw6IEltYWdlSXRlbVZhbHVlV3JhcHBlclZpZXdNb2RlbDtcbiAgcHJpdmF0ZSByb290UmVmOiBSZWFjdC5SZWZPYmplY3Q8SFRNTERpdkVsZW1lbnQ+O1xuXG4gIGNvbnN0cnVjdG9yKHByb3BzOiBJbWFnZUl0ZW1WYWx1ZUFkb3JuZXJDb21wb25lbnRQcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLnJvb3RSZWYgPSBSZWFjdC5jcmVhdGVSZWYoKTtcbiAgfVxuICBwcm90ZWN0ZWQgY3JlYXRlTW9kZWwoKTogdm9pZCB7XG4gICAgdGhpcy5tb2RlbCA9IG5ldyBJbWFnZUl0ZW1WYWx1ZVdyYXBwZXJWaWV3TW9kZWwoXG4gICAgICB0aGlzLnByb3BzLmNvbXBvbmVudERhdGEuY3JlYXRvcixcbiAgICAgIHRoaXMucHJvcHMucXVlc3Rpb24sXG4gICAgICB0aGlzLnByb3BzLml0ZW0sXG4gICAgICBudWxsLFxuICAgICAgbnVsbFxuICAgICk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldFVwZGF0ZWRNb2RlbFByb3BzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gW1wicXVlc3Rpb25cIiwgXCJpdGVtXCJdO1xuICB9XG4gIHByb3RlY3RlZCBnZXRTdGF0ZUVsZW1lbnQoKTogQmFzZSB7XG4gICAgcmV0dXJuIHRoaXMubW9kZWw7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0IHF1ZXN0aW9uKCk6IFF1ZXN0aW9uSW1hZ2VQaWNrZXJNb2RlbCB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMucXVlc3Rpb24gYXMgUXVlc3Rpb25JbWFnZVBpY2tlck1vZGVsO1xuICB9XG5cbiAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgc3VwZXIuY29tcG9uZW50RGlkTW91bnQoKTtcbiAgICB0aGlzLm1vZGVsLml0ZW1zUm9vdCA9IHRoaXMucm9vdFJlZi5jdXJyZW50O1xuICB9XG5cbiAgY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wcywgcHJldlN0YXRlKSB7XG4gICAgc3VwZXIuY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wcywgcHJldlN0YXRlKTtcbiAgICB0aGlzLm1vZGVsLml0ZW1zUm9vdCA9IHRoaXMucm9vdFJlZi5jdXJyZW50O1xuICB9XG5cbiAgcHJldmVudERyYWdIYW5kbGVyID0gKGUpID0+IHtcbiAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gIH1cblxuICByZW5kZXIoKTogSlNYLkVsZW1lbnQge1xuICAgIC8vIGlmICh0aGlzLm1vZGVsLnF1ZXN0aW9uLmlzRHJhZ2dlZCkge1xuICAgIC8vICAgcmV0dXJuIG51bGw7XG4gICAgLy8gfVxuICAgIHRoaXMubW9kZWwuaXRlbSA9IHRoaXMucHJvcHMuaXRlbTtcbiAgICBjb25zdCBpc05ldyA9ICF0aGlzLnByb3BzLnF1ZXN0aW9uLmlzSXRlbUluTGlzdCh0aGlzLnByb3BzLml0ZW0pO1xuICAgIHRoaXMubW9kZWwuaXNOZXcgPSBpc05ldztcbiAgICBjb25zdCBpbWFnZVN0eWxlID0gIXRoaXMubW9kZWwuZ2V0SXNOZXdJdGVtU2luZ2xlKCkgPyB7IHdpZHRoOiB0aGlzLnF1ZXN0aW9uLnJlbmRlcmVkSW1hZ2VXaWR0aCwgaGVpZ2h0OiB0aGlzLnF1ZXN0aW9uLnJlbmRlcmVkSW1hZ2VIZWlnaHQgfSA6IG51bGw7XG5cbiAgICBsZXQgY29udGVudCA9IG51bGw7XG4gICAgaWYgKGlzTmV3KSB7XG4gICAgICBjb250ZW50ID0gKDw+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3ZjLWltYWdlLWl0ZW0tdmFsdWVfX2l0ZW1cIlxuICAgICAgICAgIG9uRHJvcD17dGhpcy5tb2RlbC5vbkRyb3B9IG9uRHJhZ092ZXI9e3RoaXMubW9kZWwub25EcmFnT3Zlcn0gb25EcmFnTGVhdmU9e3RoaXMubW9kZWwub25EcmFnTGVhdmV9PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic2QtaW1hZ2VwaWNrZXJfX2l0ZW0gc2QtaW1hZ2VwaWNrZXJfX2l0ZW0tLWlubGluZVwiPlxuICAgICAgICAgICAgPGxhYmVsIGNsYXNzTmFtZT1cInNkLWltYWdlcGlja2VyX19sYWJlbFwiPlxuICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXtpbWFnZVN0eWxlfSBjbGFzc05hbWU9XCJzZC1pbWFnZXBpY2tlcl9faW1hZ2VcIj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2Yy1pbWFnZS1pdGVtLXZhbHVlLWNvbnRyb2xzXCI+XG4gICAgICAgICAge3RoaXMubW9kZWwuYWxsb3dBZGQgPyBhdHRhY2hLZXkyY2xpY2soPHNwYW4gY2xhc3NOYW1lPVwic3ZjLWltYWdlLWl0ZW0tdmFsdWUtY29udHJvbHNfX2J1dHRvbiBzdmMtaW1hZ2UtaXRlbS12YWx1ZS1jb250cm9sc19fYWRkXCIgb25DbGljaz17KCkgPT4gdGhpcy5tb2RlbC5jaG9vc2VOZXdGaWxlKHRoaXMubW9kZWwpfT5cbiAgICAgICAgICAgIDxTdmdJY29uIHNpemU9ezI0fSBpY29uTmFtZT17XCJpY29uLWFkZC1sZ1wifT48L1N2Z0ljb24+XG4gICAgICAgICAgPC9zcGFuPikgOiBudWxsfVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvPik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnRlbnQgPSAoXG4gICAgICAgIDw+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e1wic3ZjLWltYWdlLWl0ZW0tdmFsdWVfX2l0ZW1cIn0+XG4gICAgICAgICAgICB7dGhpcy5wcm9wcy5lbGVtZW50fVxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwic3ZjLWltYWdlLWl0ZW0tdmFsdWUtY29udHJvbHNfX2J1dHRvbiBzdmMtaW1hZ2UtaXRlbS12YWx1ZS1jb250cm9sc19fZHJhZy1hcmVhLWluZGljYXRvclwiXG4gICAgICAgICAgICBvblBvaW50ZXJEb3duPXsoZXZlbnQ6IGFueSkgPT4gdGhpcy5tb2RlbC5vblBvaW50ZXJEb3duKGV2ZW50KX1cbiAgICAgICAgICA+XG4gICAgICAgICAgICA8U3ZnSWNvbiBzaXplPXsyNH0gaWNvbk5hbWU9e1wiaWNvbi1kcmFnLWFyZWEtaW5kaWNhdG9yXCJ9PjwvU3ZnSWNvbj5cbiAgICAgICAgICA8L3NwYW4+XG5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2Yy1pbWFnZS1pdGVtLXZhbHVlLWNvbnRyb2xzXCI+XG4gICAgICAgICAgICB7dGhpcy5tb2RlbC5hbGxvd1JlbW92ZSA/IGF0dGFjaEtleTJjbGljayg8c3BhblxuICAgICAgICAgICAgICBjbGFzc05hbWU9XCJzdmMtaW1hZ2UtaXRlbS12YWx1ZS1jb250cm9sc19fYnV0dG9uIHN2Yy1pbWFnZS1pdGVtLXZhbHVlLWNvbnRyb2xzX19jaG9vc2UtZmlsZVwiXG4gICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHRoaXMubW9kZWwuY2hvb3NlRmlsZSh0aGlzLm1vZGVsKX1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPFN2Z0ljb24gc2l6ZT17MjR9IGljb25OYW1lPXtcImljb24tZmlsZVwifT48L1N2Z0ljb24+XG4gICAgICAgICAgICA8L3NwYW4+KSA6IG51bGx9XG4gICAgICAgICAgICB7dGhpcy5tb2RlbC5hbGxvd1JlbW92ZSA/IGF0dGFjaEtleTJjbGljayg8c3BhblxuICAgICAgICAgICAgICBjbGFzc05hbWU9XCJzdmMtaW1hZ2UtaXRlbS12YWx1ZS1jb250cm9sc19fYnV0dG9uIHN2Yy1pbWFnZS1pdGVtLXZhbHVlLWNvbnRyb2xzX19yZW1vdmUgZGRkXCJcbiAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gdGhpcy5tb2RlbC5yZW1vdmUodGhpcy5tb2RlbCl9XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxTdmdJY29uIHNpemU9ezI0fSBpY29uTmFtZT17XCJpY29uLWRlbGV0ZVwifT48L1N2Z0ljb24+XG4gICAgICAgICAgICA8L3NwYW4+KSA6IG51bGx9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvPlxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gKFxuICAgICAgPGRpdlxuICAgICAgICByZWY9e3RoaXMucm9vdFJlZn1cbiAgICAgICAgY2xhc3NOYW1lPXt0aGlzLm1vZGVsLmdldFJvb3RDc3MoKX1cbiAgICAgICAga2V5PXt0aGlzLnByb3BzLmVsZW1lbnQua2V5fVxuICAgICAgICBkYXRhLXN2LWRyb3AtdGFyZ2V0LWl0ZW0tdmFsdWU9e1xuICAgICAgICAgIHRoaXMubW9kZWwuaXNEcmFnZ2FibGUgPyB0aGlzLm1vZGVsLml0ZW0udmFsdWUgOiB1bmRlZmluZWRcbiAgICAgICAgfVxuICAgICAgICBvblBvaW50ZXJEb3duPXsoZXZlbnQ6IGFueSkgPT4gdGhpcy5tb2RlbC5vblBvaW50ZXJEb3duKGV2ZW50KX1cbiAgICAgICAgb25EcmFnU3RhcnQ9e3RoaXMucHJldmVudERyYWdIYW5kbGVyfVxuICAgICAgPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17XCJzdmMtaW1hZ2UtaXRlbS12YWx1ZS13cmFwcGVyX19naG9zdFwifSBzdHlsZT17aW1hZ2VTdHlsZX0+PC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtcInN2Yy1pbWFnZS1pdGVtLXZhbHVlLXdyYXBwZXJfX2NvbnRlbnRcIn0+XG4gICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICB0eXBlPVwiZmlsZVwiXG4gICAgICAgICAgICBhcmlhLWhpZGRlbj1cInRydWVcIlxuICAgICAgICAgICAgdGFiSW5kZXg9ey0xfVxuICAgICAgICAgICAgYWNjZXB0PVwiaW1hZ2UvKlwiXG4gICAgICAgICAgICBjbGFzc05hbWU9XCJzdmMtY2hvb3NlLWZpbGUtaW5wdXRcIlxuICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgcG9zaXRpb246IFwiYWJzb2x1dGVcIixcbiAgICAgICAgICAgICAgb3BhY2l0eTogMCxcbiAgICAgICAgICAgICAgd2lkdGg6IFwiMXB4XCIsXG4gICAgICAgICAgICAgIGhlaWdodDogXCIxcHhcIixcbiAgICAgICAgICAgICAgb3ZlcmZsb3c6IFwiaGlkZGVuXCJcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgLz5cbiAgICAgICAgICB7Y29udGVudH1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG59XG5cblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFxuICBcInN2Yy1pbWFnZS1pdGVtLXZhbHVlXCIsXG4gIChwcm9wczogSW1hZ2VJdGVtVmFsdWVBZG9ybmVyQ29tcG9uZW50UHJvcHMpID0+IHtcbiAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChJbWFnZUl0ZW1WYWx1ZUFkb3JuZXJDb21wb25lbnQsIHByb3BzKTtcbiAgfVxuKTtcbiIsImltcG9ydCB7IGdldExvY1N0cmluZywgSXRlbVZhbHVlV3JhcHBlclZpZXdNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY3JlYXRvci1jb3JlXCI7XG5pbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBSZWFjdERyYWdFdmVudCB9IGZyb20gXCJzcmMvZXZlbnRzXCI7XG5pbXBvcnQgeyBRdWVzdGlvblNlbGVjdEJhc2UsIEJhc2UsIEl0ZW1WYWx1ZSB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHtcbiAgYXR0YWNoS2V5MmNsaWNrLFxuICBSZWFjdEVsZW1lbnRGYWN0b3J5LFxuICBTdmdJY29uXG59IGZyb20gXCJzdXJ2ZXktcmVhY3QtdWlcIjtcbmltcG9ydCB7IENyZWF0b3JNb2RlbEVsZW1lbnQgfSBmcm9tIFwiLi9Nb2RlbEVsZW1lbnRcIjtcblxuaW50ZXJmYWNlIEl0ZW1WYWx1ZUFkb3JuZXJDb21wb25lbnRQcm9wcyB7XG4gIGVsZW1lbnQ6IEpTWC5FbGVtZW50O1xuICBjb21wb25lbnREYXRhOiBhbnk7XG4gIHF1ZXN0aW9uOiBRdWVzdGlvblNlbGVjdEJhc2U7XG4gIGl0ZW06IEl0ZW1WYWx1ZTtcbn1cblxuZXhwb3J0IGNsYXNzIEl0ZW1WYWx1ZUFkb3JuZXJDb21wb25lbnQgZXh0ZW5kcyBDcmVhdG9yTW9kZWxFbGVtZW50PFxuICBJdGVtVmFsdWVBZG9ybmVyQ29tcG9uZW50UHJvcHMsXG4gIGFueVxuPiB7XG4gIG1vZGVsOiBJdGVtVmFsdWVXcmFwcGVyVmlld01vZGVsO1xuICBwcm90ZWN0ZWQgY3JlYXRlTW9kZWwoKTogdm9pZCB7XG4gICAgdGhpcy5tb2RlbCA9IG5ldyBJdGVtVmFsdWVXcmFwcGVyVmlld01vZGVsKFxuICAgICAgdGhpcy5wcm9wcy5jb21wb25lbnREYXRhLmNyZWF0b3IsXG4gICAgICB0aGlzLnByb3BzLnF1ZXN0aW9uLFxuICAgICAgdGhpcy5wcm9wcy5pdGVtXG4gICAgKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0VXBkYXRlZE1vZGVsUHJvcHMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBbXCJxdWVzdGlvblwiLCBcIml0ZW1cIl07XG4gIH1cbiAgcHJvdGVjdGVkIGdldFN0YXRlRWxlbWVudCgpOiBCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5tb2RlbDtcbiAgfVxuICBwcml2YXRlIG9uQmx1ciA9IChldmVudDogYW55KSA9PiB7XG4gICAgdGhpcy5tb2RlbC5vbkZvY3VzT3V0KGV2ZW50Lm5hdGl2ZUV2ZW50KTtcbiAgfTtcblxuICByZW5kZXIoKTogSlNYLkVsZW1lbnQge1xuICAgIC8vIGlmICh0aGlzLm1vZGVsLnF1ZXN0aW9uLmlzRHJhZ2dlZCkge1xuICAgIC8vICAgcmV0dXJuIG51bGw7XG4gICAgLy8gfVxuICAgIHRoaXMubW9kZWwuaXRlbSA9IHRoaXMucHJvcHMuaXRlbTtcbiAgICBjb25zdCBidXR0b24gPSB0aGlzLm1vZGVsLmFsbG93QWRkID8gKFxuICAgICAgYXR0YWNoS2V5MmNsaWNrKDxzcGFuXG4gICAgICAgIGNsYXNzTmFtZT1cInN2Yy1pdGVtLXZhbHVlLWNvbnRyb2xzX19idXR0b24gc3ZjLWl0ZW0tdmFsdWUtY29udHJvbHNfX2FkZFwiXG4gICAgICAgIGFyaWEtbGFiZWw9e3RoaXMubW9kZWwudG9vbHRpcH1cbiAgICAgICAgb25DbGljaz17KCkgPT4ge1xuICAgICAgICAgIHRoaXMubW9kZWwuYWRkKHRoaXMubW9kZWwpO1xuICAgICAgICAgIHRoaXMubW9kZWwuaXNOZXcgPSBmYWxzZTtcbiAgICAgICAgfX1cbiAgICAgID5cbiAgICAgICAgPFN2Z0ljb24gc2l6ZT17MTZ9IGljb25OYW1lPXtcImljb24tYWRkXzE2eDE2XCJ9IHRpdGxlPXt0aGlzLm1vZGVsLnRvb2x0aXB9PjwvU3ZnSWNvbj5cbiAgICAgIDwvc3Bhbj4pXG4gICAgKSA6IChcbiAgICAgIDw+XG4gICAgICAgIHtcIiBcIn1cbiAgICAgICAge3RoaXMubW9kZWwuaXNEcmFnZ2FibGUgPyAoXG4gICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgIGNsYXNzTmFtZT1cInN2Yy1pdGVtLXZhbHVlLWNvbnRyb2xzX19idXR0b24gc3ZjLWl0ZW0tdmFsdWUtY29udHJvbHNfX2RyYWdcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxTdmdJY29uIGNsYXNzTmFtZT1cInN2Yy1pdGVtLXZhbHVlLWNvbnRyb2xzX19kcmFnLWljb25cIiBzaXplPXsyNH0gaWNvbk5hbWU9e1wiaWNvbi1kcmFnLWFyZWEtaW5kaWNhdG9yXCJ9IHRpdGxlPXt0aGlzLm1vZGVsLmRyYWdUb29sdGlwfT48L1N2Z0ljb24+XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICApIDogbnVsbH1cbiAgICAgICAge3RoaXMubW9kZWwuYWxsb3dSZW1vdmUgPyBhdHRhY2hLZXkyY2xpY2soPHNwYW5cbiAgICAgICAgICBjbGFzc05hbWU9XCJzdmMtaXRlbS12YWx1ZS1jb250cm9sc19fYnV0dG9uIHN2Yy1pdGVtLXZhbHVlLWNvbnRyb2xzX19yZW1vdmVcIlxuICAgICAgICAgIGFyaWEtbGFiZWw9e3RoaXMubW9kZWwudG9vbHRpcH1cbiAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB0aGlzLm1vZGVsLnJlbW92ZSh0aGlzLm1vZGVsKX1cbiAgICAgICAgPlxuICAgICAgICAgIDxTdmdJY29uIHNpemU9ezE2fSBpY29uTmFtZT17XCJpY29uLXJlbW92ZV8xNngxNlwifSB0aXRsZT17dGhpcy5tb2RlbC50b29sdGlwfT48L1N2Z0ljb24+XG4gICAgICAgIDwvc3Bhbj4pIDogbnVsbH1cbiAgICAgIDwvPlxuICAgICk7XG5cbiAgICByZXR1cm4gKFxuICAgICAgPGRpdlxuICAgICAgICBjbGFzc05hbWU9e1xuICAgICAgICAgIFwic3ZjLWl0ZW0tdmFsdWUtd3JhcHBlclwiICtcbiAgICAgICAgICAodGhpcy5tb2RlbC5hbGxvd0FkZCA/IFwiIHN2Yy1pdGVtLXZhbHVlLS1uZXdcIiA6IFwiXCIpICtcbiAgICAgICAgICAodGhpcy5tb2RlbC5pc0RyYWdnaW5nID8gXCIgc3ZjLWl0ZW0tdmFsdWUtLWRyYWdnaW5nXCIgOiBcIlwiKSArXG4gICAgICAgICAgKHRoaXMubW9kZWwuaXNEcmFnRHJvcEdob3N0ID8gXCIgc3ZjLWl0ZW0tdmFsdWUtLWdob3N0XCIgOiBcIlwiKSArXG4gICAgICAgICAgKHRoaXMubW9kZWwuaXNEcmFnRHJvcE1vdmVEb3duID8gXCIgc3ZjLWl0ZW0tdmFsdWUtLW1vdmVkb3duXCIgOiBcIlwiKSArXG4gICAgICAgICAgKHRoaXMubW9kZWwuaXNEcmFnRHJvcE1vdmVVcCA/IFwiIHN2Yy1pdGVtLXZhbHVlLS1tb3ZldXBcIiA6IFwiXCIpXG4gICAgICAgIH1cbiAgICAgICAga2V5PXt0aGlzLnByb3BzLmVsZW1lbnQua2V5fVxuICAgICAgICBkYXRhLXN2LWRyb3AtdGFyZ2V0LWl0ZW0tdmFsdWU9e1xuICAgICAgICAgIHRoaXMubW9kZWwuaXNEcmFnZ2FibGUgPyB0aGlzLm1vZGVsLml0ZW0udmFsdWUgOiB1bmRlZmluZWRcbiAgICAgICAgfVxuICAgICAgICBvblBvaW50ZXJEb3duPXsoZXZlbnQ6IGFueSkgPT4gdGhpcy5tb2RlbC5vblBvaW50ZXJEb3duKGV2ZW50KX1cbiAgICAgID5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmMtaXRlbS12YWx1ZV9fZ2hvc3RcIj48L2Rpdj5cblxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2Yy1pdGVtLXZhbHVlLWNvbnRyb2xzXCIgb25CbHVyPXt0aGlzLm9uQmx1cn0+e2J1dHRvbn08L2Rpdj5cblxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17XCJzdmMtaXRlbS12YWx1ZV9faXRlbVwifSBvbkNsaWNrPXsoZXZlbnQpID0+IHRoaXMubW9kZWwuc2VsZWN0KHRoaXMubW9kZWwsIGV2ZW50KX0+e3RoaXMucHJvcHMuZWxlbWVudH08L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbn1cblxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXG4gIFwic3ZjLWl0ZW0tdmFsdWVcIixcbiAgKHByb3BzOiBJdGVtVmFsdWVBZG9ybmVyQ29tcG9uZW50UHJvcHMpID0+IHtcbiAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChJdGVtVmFsdWVBZG9ybmVyQ29tcG9uZW50LCBwcm9wcyk7XG4gIH1cbik7XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBCYXNlLCBTdXJ2ZXlNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgUmVhY3RFbGVtZW50RmFjdG9yeSwgTG9nb0ltYWdlLCBTdmdJY29uLCBhdHRhY2hLZXkyY2xpY2sgfSBmcm9tIFwic3VydmV5LXJlYWN0LXVpXCI7XG5pbXBvcnQgeyBDcmVhdG9yQmFzZSwgTG9nb0ltYWdlVmlld01vZGVsIH0gZnJvbSBcInN1cnZleS1jcmVhdG9yLWNvcmVcIjtcbmltcG9ydCB7IENyZWF0b3JNb2RlbEVsZW1lbnQgfSBmcm9tIFwiLi9Nb2RlbEVsZW1lbnRcIjtcblxuaW50ZXJmYWNlIElMb2dvSW1hZ2VDb21wb25lbnRQcm9wcyB7XG4gIGRhdGE6IENyZWF0b3JCYXNlO1xufVxuXG5leHBvcnQgY2xhc3MgTG9nb0ltYWdlQ29tcG9uZW50IGV4dGVuZHMgQ3JlYXRvck1vZGVsRWxlbWVudDxJTG9nb0ltYWdlQ29tcG9uZW50UHJvcHMsIGFueT4ge1xuICBwcml2YXRlIG1vZGVsOiBMb2dvSW1hZ2VWaWV3TW9kZWw7XG4gIHByaXZhdGUgcm9vdFJlZjogUmVhY3QuUmVmT2JqZWN0PEhUTUxEaXZFbGVtZW50PjtcbiAgY29uc3RydWN0b3IocHJvcHM6IElMb2dvSW1hZ2VDb21wb25lbnRQcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLnJvb3RSZWYgPSBSZWFjdC5jcmVhdGVSZWYoKTtcbiAgfVxuICBwcm90ZWN0ZWQgY3JlYXRlTW9kZWwoKTogdm9pZCB7XG4gICAgdGhpcy5tb2RlbCA9IG5ldyBMb2dvSW1hZ2VWaWV3TW9kZWwodGhpcy5wcm9wcy5kYXRhLCBudWxsKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0VXBkYXRlZE1vZGVsUHJvcHMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBbXCJkYXRhXCJdO1xuICB9XG4gIHByb3RlY3RlZCBnZXRTdGF0ZUVsZW1lbnQoKTogQmFzZSB7XG4gICAgcmV0dXJuIHRoaXMubW9kZWw7XG4gIH1cbiAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgc3VwZXIuY29tcG9uZW50RGlkTW91bnQoKTtcbiAgICB0aGlzLm1vZGVsLnJvb3QgPSB0aGlzLnJvb3RSZWYuY3VycmVudDtcbiAgfVxuICByZW5kZXIoKTogSlNYLkVsZW1lbnQge1xuICAgIGxldCBjb250ZW50OiBKU1guRWxlbWVudCA9IG51bGw7XG4gICAgaWYgKHRoaXMubW9kZWwuc3VydmV5LmxvY0xvZ28ucmVuZGVyZWRIdG1sKSB7XG4gICAgICBjb250ZW50ID0gYXR0YWNoS2V5MmNsaWNrKDxkaXYgY2xhc3NOYW1lPXsgdGhpcy5tb2RlbC5jb250YWluZXJDc3MgfSBvbkNsaWNrPXsoKSA9PiB0aGlzLm1vZGVsLmNob29zZUZpbGUodGhpcy5tb2RlbCl9PlxuICAgICAgICA8TG9nb0ltYWdlIGRhdGE9e3RoaXMucHJvcHMuZGF0YS5zdXJ2ZXl9PjwvTG9nb0ltYWdlPlxuICAgICAgPC9kaXY+KTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBjb250ZW50ID0gdGhpcy5tb2RlbC5hbGxvd0VkaXQgPyBhdHRhY2hLZXkyY2xpY2soPGRpdiBjbGFzc05hbWU9XCJzdmMtbG9nby1pbWFnZS1wbGFjZWhvbGRlclwiIG9uQ2xpY2s9eygpID0+IHRoaXMubW9kZWwuY2hvb3NlRmlsZSh0aGlzLm1vZGVsKX0+PHN2Zz48dXNlIHhsaW5rSHJlZj1cIiNpY29uLWxvZ29cIj48L3VzZT48L3N2Zz48L2Rpdj4pIDogbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgcmVmPXt0aGlzLnJvb3RSZWZ9IGNsYXNzTmFtZT1cInN2Yy1sb2dvLWltYWdlXCI+XG4gICAgICAgIDxpbnB1dCBhcmlhLWhpZGRlbj1cInRydWVcIiB0eXBlPVwiZmlsZVwiIHRhYkluZGV4PXstMX0gYWNjZXB0PVwiaW1hZ2UvKlwiIGNsYXNzTmFtZT1cInN2Yy1jaG9vc2UtZmlsZS1pbnB1dFwiIC8+XG4gICAgICAgIHtjb250ZW50fVxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxufVxuXG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcInN2Yy1sb2dvLWltYWdlXCIsXG4gIChwcm9wczogSUxvZ29JbWFnZUNvbXBvbmVudFByb3BzKSA9PiB7XG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoTG9nb0ltYWdlQ29tcG9uZW50LCBwcm9wcyk7XG4gIH1cbik7IiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgUXVlc3Rpb25TZWxlY3RCYXNlLCBCYXNlLCBJdGVtVmFsdWUsIFN1cnZleU1vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBNYXRyaXhDZWxsV3JhcHBlclZpZXdNb2RlbCwgdG9nZ2xlSG92ZXJlZCB9IGZyb20gXCJzdXJ2ZXktY3JlYXRvci1jb3JlXCI7XG5pbXBvcnQge1xuICBhdHRhY2hLZXkyY2xpY2ssXG4gIFJlYWN0RWxlbWVudEZhY3RvcnksXG4gIFN2Z0ljb25cbn0gZnJvbSBcInN1cnZleS1yZWFjdC11aVwiO1xuaW1wb3J0IHsgQ3JlYXRvck1vZGVsRWxlbWVudCB9IGZyb20gXCIuL01vZGVsRWxlbWVudFwiO1xuXG5pbnRlcmZhY2UgTWF0cml4Q2VsbEFkb3JuZXJDb21wb25lbnRQcm9wcyB7XG4gIGVsZW1lbnQ6IEpTWC5FbGVtZW50O1xuICBjb21wb25lbnREYXRhOiBhbnk7XG4gIHF1ZXN0aW9uOiBRdWVzdGlvblNlbGVjdEJhc2U7XG4gIGNlbGw6IGFueTtcbn1cblxuZXhwb3J0IGNsYXNzIE1hdHJpeENlbGxBZG9ybmVyQ29tcG9uZW50IGV4dGVuZHMgQ3JlYXRvck1vZGVsRWxlbWVudDxcbiAgTWF0cml4Q2VsbEFkb3JuZXJDb21wb25lbnRQcm9wcyxcbiAgYW55XG4+IHtcbiAgbW9kZWw6IE1hdHJpeENlbGxXcmFwcGVyVmlld01vZGVsO1xuICBwcm90ZWN0ZWQgY3JlYXRlTW9kZWwoKTogdm9pZCB7XG4gICAgY29uc3QgZGF0YSA9IHRoaXMucHJvcHMuY29tcG9uZW50RGF0YTtcbiAgICB0aGlzLm1vZGVsID0gbmV3IE1hdHJpeENlbGxXcmFwcGVyVmlld01vZGVsKFxuICAgICAgZGF0YS5jcmVhdG9yLFxuICAgICAgZGF0YS5lbGVtZW50LFxuICAgICAgZGF0YS5xdWVzdGlvbixcbiAgICAgIGRhdGEucm93LFxuICAgICAgZGF0YS5jb2x1bW4sXG4gICAgKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0VXBkYXRlZE1vZGVsUHJvcHMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBbXCJjb21wb25lbnREYXRhXCJdO1xuICB9XG4gIGNvbXBvbmVudERpZFVwZGF0ZShwcmV2UHJvcHM6IGFueSwgcHJldlN0YXRlOiBhbnkpIHtcbiAgICBzdXBlci5jb21wb25lbnREaWRVcGRhdGUocHJldlByb3BzLCBwcmV2U3RhdGUpO1xuICAgIGNvbnN0IGRhdGEgPSB0aGlzLnByb3BzLmNvbXBvbmVudERhdGE7XG4gICAgdGhpcy5tb2RlbC50ZW1wbGF0ZURhdGEgPSBkYXRhLmVsZW1lbnQ7XG4gICAgdGhpcy5tb2RlbC5yb3cgPSBkYXRhLnJvdztcbiAgICB0aGlzLm1vZGVsLmNvbHVtbiA9IGRhdGEuY29sdW1uO1xuICAgIHRoaXMubW9kZWwucXVlc3Rpb24gPSBkYXRhLnF1ZXN0aW9uO1xuICB9XG4gIHByb3RlY3RlZCBnZXRTdGF0ZUVsZW1lbnQoKTogQmFzZSB7XG4gICAgcmV0dXJuIHRoaXMubW9kZWw7XG4gIH1cblxuICByZW5kZXIoKTogSlNYLkVsZW1lbnQge1xuICAgIGxldCBjb250cm9scyA9IG51bGw7XG4gICAgaWYgKCEhdGhpcy5tb2RlbC5xdWVzdGlvbikge1xuICAgICAgY29udHJvbHMgPSA8ZGl2IGNsYXNzTmFtZT1cInN2Yy1tYXRyaXgtY2VsbF9fcXVlc3Rpb24tY29udHJvbHNcIj5cbiAgICAgICAge2F0dGFjaEtleTJjbGljayg8c3BhbiBjbGFzc05hbWU9XCJzdmMtbWF0cml4LWNlbGxfX3F1ZXN0aW9uLWNvbnRyb2xzLWJ1dHRvblwiIG9uQ2xpY2s9eygpID0+IHRoaXMubW9kZWwuZWRpdFF1ZXN0aW9uKHRoaXMubW9kZWwpfT5cbiAgICAgICAgICA8U3ZnSWNvbiBzaXplPXsyNH0gaWNvbk5hbWU9e1wiaWNvbi1lZGl0XCJ9PjwvU3ZnSWNvbj5cbiAgICAgICAgPC9zcGFuPil9XG4gICAgICA8L2Rpdj47XG4gICAgfVxuXG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3NOYW1lPXtcInN2Yy1tYXRyaXgtY2VsbFwifVxuICAgICAgICB0YWJJbmRleD17LTF9XG4gICAgICAgIGtleT17dGhpcy5wcm9wcy5lbGVtZW50LmtleX1cbiAgICAgICAgb25DbGljaz17KGU6IGFueSkgPT4gIXRoaXMucHJvcHMucXVlc3Rpb24gJiYgdGhpcy5tb2RlbC5zZWxlY3RDb250ZXh0KHRoaXMubW9kZWwsIGUpfVxuICAgICAgICBvbk1vdXNlT3V0PXtlID0+IHRoaXMubW9kZWwuaG92ZXIoZS5uYXRpdmVFdmVudCwgZS5jdXJyZW50VGFyZ2V0KX1cbiAgICAgICAgb25Nb3VzZU92ZXI9e2UgPT4gdGhpcy5tb2RlbC5ob3ZlcihlLm5hdGl2ZUV2ZW50LCBlLmN1cnJlbnRUYXJnZXQpfVxuICAgICAgPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17XCJzdmMtbWF0cml4LWNlbGwtLXNlbGVjdGVkXCIgKyAodGhpcy5tb2RlbC5pc1NlbGVjdGVkID8gXCIgc3ZjLXZpc2libGVcIiA6IFwiXCIpfT48L2Rpdj5cblxuICAgICAgICB7dGhpcy5wcm9wcy5lbGVtZW50fVxuXG4gICAgICAgIHtjb250cm9sc31cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbn1cblxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXG4gIFwic3ZjLW1hdHJpeC1jZWxsXCIsXG4gIChwcm9wczogTWF0cml4Q2VsbEFkb3JuZXJDb21wb25lbnRQcm9wcykgPT4ge1xuICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KE1hdHJpeENlbGxBZG9ybmVyQ29tcG9uZW50LCBwcm9wcyk7XG4gIH1cbik7XG4iLCJpbXBvcnQgeyBTdXJ2ZXlFbGVtZW50QmFzZSB9IGZyb20gXCJzdXJ2ZXktcmVhY3QtdWlcIjtcblxuZXhwb3J0IGNsYXNzIENyZWF0b3JNb2RlbEVsZW1lbnQ8UCwgUz4gZXh0ZW5kcyBTdXJ2ZXlFbGVtZW50QmFzZTxQLCBTPiB7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBQKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMuY3JlYXRlTW9kZWwoKTtcbiAgfVxuICBjb21wb25lbnREaWRVcGRhdGUocHJldlByb3BzOiBhbnksIHByZXZTdGF0ZTogYW55KTogdm9pZCB7XG4gICAgc3VwZXIuY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wcywgcHJldlN0YXRlKTtcbiAgICBpZih0aGlzLm5lZWRVcGRhdGVNb2RlbChwcmV2UHJvcHMpKSB7XG4gICAgICB0aGlzLmNyZWF0ZU1vZGVsKCk7XG4gICAgfVxuICB9XG4gIHByb3RlY3RlZCBjcmVhdGVNb2RlbCgpOiB2b2lkIHt9XG4gIHByb3RlY3RlZCBuZWVkVXBkYXRlTW9kZWwocHJldlByb3BzOiBhbnkpOiBib29sZWFuIHtcbiAgICBjb25zdCBuYW1lcyA9IHRoaXMuZ2V0VXBkYXRlZE1vZGVsUHJvcHMoKTtcbiAgICBpZighQXJyYXkuaXNBcnJheShuYW1lcykpIHJldHVybiB0cnVlO1xuICAgIGZvcih2YXIgaSA9IDA7IGkgPCBuYW1lcy5sZW5ndGg7IGkgKyspIHtcbiAgICAgIGNvbnN0IGtleSA9IG5hbWVzW2ldO1xuICAgICAgaWYodGhpcy5wcm9wc1trZXldICE9PSBwcmV2UHJvcHNba2V5XSkgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0VXBkYXRlZE1vZGVsUHJvcHMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbn0iLCJpbXBvcnQgeyBTdXJ2ZXlNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgUmVhY3RFbGVtZW50RmFjdG9yeSwgU3VydmV5RWxlbWVudEJhc2UgfSBmcm9tIFwic3VydmV5LXJlYWN0LXVpXCI7XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlOYXZpZ2F0aW9uIGV4dGVuZHMgU3VydmV5RWxlbWVudEJhc2U8YW55LCBhbnk+IHtcbiAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgc3VwZXIuY29tcG9uZW50RGlkTW91bnQoKTtcbiAgICB0aGlzLnNldEhhbmRsZXIoKTtcbiAgfVxuICBjb21wb25lbnREaWRVcGRhdGUocHJldlByb3BzOiBhbnksIHByZXZTdGF0ZTogYW55KSB7XG4gICAgc3VwZXIuY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wcywgcHJldlN0YXRlKTtcbiAgICB0aGlzLnNldEhhbmRsZXIoKTtcbiAgfVxuICBwcml2YXRlIHNldEhhbmRsZXIoKSB7XG4gICAgaWYgKFxuICAgICAgIXRoaXMuc3VydmV5IHx8XG4gICAgICAgIHRoaXMuc3VydmV5Lm9uUHJvcGVydHlDaGFuZ2VkLmhhc0Z1bmModGhpcy5vblByb3BDaGFuZ2VkSGFuZGxlcilcbiAgICApXG4gICAgICByZXR1cm47XG4gICAgdGhpcy5zdXJ2ZXkub25Qcm9wZXJ0eUNoYW5nZWQuYWRkKHRoaXMub25Qcm9wQ2hhbmdlZEhhbmRsZXIpO1xuICB9XG4gICAgcHJpdmF0ZSBvblByb3BDaGFuZ2VkSGFuZGxlciA9IChzZW5kZXI6IGFueSwgb3B0aW9uczogYW55KTogYW55ID0+IHtcbiAgICAgIGlmICh0aGlzLmlzUmVuZGVyaW5nKSByZXR1cm47XG4gICAgICBjb25zdCByZWFjdGl2ZVByb3BzID0gW1xuICAgICAgICBcInNob3dQcm9ncmVzc0JhclwiLFxuICAgICAgICBcInByb2dyZXNzQmFyVHlwZVwiLFxuICAgICAgICBcImN1cnJlbnRQYWdlVmFsdWVcIlxuICAgICAgXTtcbiAgICAgIGlmIChyZWFjdGl2ZVByb3BzLmluZGV4T2Yob3B0aW9ucy5uYW1lKSA8IDApIHJldHVybjtcbiAgICAgIHZhciB2YWw6IGFueSA9IHt9O1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCByZWFjdGl2ZVByb3BzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBwcm9wTmFtZSA9IHJlYWN0aXZlUHJvcHNbaV07XG4gICAgICAgIHZhbFtwcm9wTmFtZV0gPSB0aGlzLnN1cnZleVtwcm9wTmFtZV07XG4gICAgICB9XG4gICAgICB0aGlzLnNldFN0YXRlKHZhbCk7XG4gICAgfTtcbiAgICBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICAgIHN1cGVyLmNvbXBvbmVudFdpbGxVbm1vdW50KCk7XG4gICAgICBpZiAodGhpcy5zdXJ2ZXkpIHtcbiAgICAgICAgdGhpcy5zdXJ2ZXkub25Qcm9wZXJ0eUNoYW5nZWQucmVtb3ZlKHRoaXMub25Qcm9wQ2hhbmdlZEhhbmRsZXIpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHByb3RlY3RlZCBnZXQgc3VydmV5KCk6IFN1cnZleU1vZGVsIHtcbiAgICAgIHJldHVybiB0aGlzLnByb3BzLnN1cnZleTtcbiAgICB9XG4gICAgcHJvdGVjdGVkIGdldCBsb2NhdGlvbigpOiBzdHJpbmcge1xuICAgICAgcmV0dXJuIHRoaXMucHJvcHMubG9jYXRpb247XG4gICAgfVxuICAgIHByb3RlY3RlZCBnZXQgaXNUb3AoKTogYm9vbGVhbiB7XG4gICAgICByZXR1cm4gdGhpcy5sb2NhdGlvbiA9PSBcInRvcFwiO1xuICAgIH1cbiAgICBwcm90ZWN0ZWQgY2FuUmVuZGVyKCk6IGJvb2xlYW4ge1xuICAgICAgcmV0dXJuIHRoaXMuaXNUb3BcbiAgICAgICAgPyB0aGlzLnN1cnZleS5pc1Nob3dQcm9ncmVzc0Jhck9uVG9wXG4gICAgICAgIDogdGhpcy5zdXJ2ZXkuaXNTaG93UHJvZ3Jlc3NCYXJPbkJvdHRvbTtcbiAgICB9XG4gICAgcmVuZGVyRWxlbWVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgICByZXR1cm4gUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5jcmVhdGVFbGVtZW50KFxuICAgICAgICBcInN2LXByb2dyZXNzLVwiICsgdGhpcy5zdXJ2ZXkucHJvZ3Jlc3NCYXJUeXBlLnRvTG93ZXJDYXNlKCksXG4gICAgICAgIHsgc3VydmV5OiB0aGlzLnN1cnZleSwgY3NzOiB0aGlzLnN1cnZleS5jc3MsIGlzVG9wOiB0aGlzLmlzVG9wIH1cbiAgICAgICk7XG4gICAgfVxufVxuIiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgQmFzZSwgU3VydmV5TW9kZWwgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFN1cnZleUVsZW1lbnRCYXNlLCB9IGZyb20gXCJzdXJ2ZXktcmVhY3QtdWlcIjtcbmltcG9ydCB7IENyZWF0b3JCYXNlLCBOb3RpZmllciB9IGZyb20gXCJzdXJ2ZXktY3JlYXRvci1jb3JlXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTm90aWZpZXJDb21wb25lbnRQcm9wcyB7XG4gIGNyZWF0b3I6IENyZWF0b3JCYXNlO1xuICBub3RpZmllcjogTm90aWZpZXI7XG59XG5cbmV4cG9ydCBjbGFzcyBOb3RpZmllckNvbXBvbmVudCBleHRlbmRzIFN1cnZleUVsZW1lbnRCYXNlPE5vdGlmaWVyQ29tcG9uZW50UHJvcHMsIGFueT4ge1xuICBnZXQgbm90aWZpZXIoKSB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMubm90aWZpZXI7XG4gIH1cbiAgcHJvdGVjdGVkIGdldFN0YXRlRWxlbWVudCgpOiBCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5ub3RpZmllcjtcbiAgfVxuICByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICBpZiAoIXRoaXMubm90aWZpZXIuYWN0aXZlKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPXt0aGlzLm5vdGlmaWVyLmNzc30+XG4gICAgICAgIDxzcGFuPnt0aGlzLm5vdGlmaWVyLm1lc3NhZ2V9PC9zcGFuPlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxufVxuIiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgT2JqZWN0U2VsZWN0b3JNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY3JlYXRvci1jb3JlXCI7XG5pbXBvcnQgeyBCYXNlIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBSZWFjdEVsZW1lbnRGYWN0b3J5LCBTdXJ2ZXlFbGVtZW50QmFzZSwgTGlzdCB9IGZyb20gXCJzdXJ2ZXktcmVhY3QtdWlcIjtcblxuaW50ZXJmYWNlIElPYmplY3RTZWxlY3RvckNvbXBvbmVudFByb3BzIHtcbiAgbW9kZWw6IE9iamVjdFNlbGVjdG9yTW9kZWw7XG59XG5jbGFzcyBPYmplY3RTZWxlY3RvckNvbXBvbmVudCBleHRlbmRzIFN1cnZleUVsZW1lbnRCYXNlPElPYmplY3RTZWxlY3RvckNvbXBvbmVudFByb3BzLCBhbnk+IHtcbiAgcHJvdGVjdGVkIGdldCBtb2RlbCgpOiBPYmplY3RTZWxlY3Rvck1vZGVsIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5tb2RlbDtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0U3RhdGVFbGVtZW50KCk6IEJhc2Uge1xuICAgIHJldHVybiB0aGlzLm1vZGVsO1xuICB9XG4gIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIGlmICghdGhpcy5tb2RlbC5pc1Zpc2libGUpIHJldHVybiBudWxsO1xuXG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3ZjLW9iamVjdC1zZWxlY3RvclwiPlxuICAgICAgICA8TGlzdCBtb2RlbD17dGhpcy5tb2RlbC5saXN0fT48L0xpc3Q+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG59XG5cblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFwic3ZjLW9iamVjdC1zZWxlY3RvclwiLCAocHJvcHMpID0+IHtcbiAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXG4gICAgT2JqZWN0U2VsZWN0b3JDb21wb25lbnQsXG4gICAgcHJvcHMgYXMgSU9iamVjdFNlbGVjdG9yQ29tcG9uZW50UHJvcHNcbiAgKTtcbn0pO1xuIiwiaW1wb3J0IHtcbiAgQmFzZSxcbiAgSUFjdGlvbixcbiAgdW53cmFwXG59IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHtcbiAgU3ZnSWNvbixcbiAgUG9wdXAsXG4gIGF0dGFjaEtleTJjbGlja1xufSBmcm9tIFwic3VydmV5LXJlYWN0LXVpXCI7XG5pbXBvcnQgeyBQYWdlTmF2aWdhdG9yVmlld01vZGVsLCBQYWdlc0NvbnRyb2xsZXIgfSBmcm9tIFwic3VydmV5LWNyZWF0b3ItY29yZVwiO1xuaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgQ3JlYXRvck1vZGVsRWxlbWVudCB9IGZyb20gXCIuL01vZGVsRWxlbWVudFwiO1xuXG5pbnRlcmZhY2UgSVN1cnZleVBhZ2VOYXZpZ2F0b3JQcm9wcyB7XG4gIHBhZ2VzQ29udHJvbGxlcjogUGFnZXNDb250cm9sbGVyO1xuICBwYWdlRWRpdE1vZGU6IHN0cmluZztcbn1cblxuZXhwb3J0IGNsYXNzIFN1cnZleVBhZ2VOYXZpZ2F0b3IgZXh0ZW5kcyBDcmVhdG9yTW9kZWxFbGVtZW50PFxuICBJU3VydmV5UGFnZU5hdmlnYXRvclByb3BzLFxuICBhbnlcbj4ge1xuICBwcml2YXRlIG1vZGVsOiBQYWdlTmF2aWdhdG9yVmlld01vZGVsO1xuICBwcml2YXRlIGNvbnRhaW5lclJlZjogUmVhY3QuUmVmT2JqZWN0PEhUTUxEaXZFbGVtZW50PjtcblxuICBjb25zdHJ1Y3Rvcihwcm9wczogSVN1cnZleVBhZ2VOYXZpZ2F0b3JQcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLmNvbnRhaW5lclJlZiA9IFJlYWN0LmNyZWF0ZVJlZigpO1xuICB9XG4gIHByb3RlY3RlZCBjcmVhdGVNb2RlbCgpOiB2b2lkIHtcbiAgICB0aGlzLm1vZGVsID0gbmV3IFBhZ2VOYXZpZ2F0b3JWaWV3TW9kZWwoXG4gICAgICB0aGlzLnByb3BzLnBhZ2VzQ29udHJvbGxlcixcbiAgICAgIHRoaXMucHJvcHMucGFnZUVkaXRNb2RlXG4gICAgKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0VXBkYXRlZE1vZGVsUHJvcHMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBbXCJwYWdlc0NvbnRyb2xsZXJcIiwgXCJwYWdlRWRpdE1vZGVcIl07XG4gIH1cbiAgcHJvdGVjdGVkIGdldFN0YXRlRWxlbWVudCgpOiBCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5tb2RlbDtcbiAgfVxuICBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICBzdXBlci5jb21wb25lbnREaWRNb3VudCgpO1xuICAgIGlmICh0aGlzLnByb3BzLnBhZ2VFZGl0TW9kZSAhPT0gXCJieXBhZ2VcIikge1xuICAgICAgY29uc3QgZWwgPSB0aGlzLmNvbnRhaW5lclJlZi5jdXJyZW50IGFzIEhUTUxEaXZFbGVtZW50O1xuICAgICAgaWYgKCEhZWwpIHtcbiAgICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgICAgIGVsLnBhcmVudEVsZW1lbnQucGFyZW50RWxlbWVudC5wYXJlbnRFbGVtZW50Lm9uc2Nyb2xsID0gZnVuY3Rpb24gKHRoaXM6IEdsb2JhbEV2ZW50SGFuZGxlcnMsIGV2OiBFdmVudCkge1xuICAgICAgICAgIHJldHVybiBzZWxmLm1vZGVsLm9uQ29udGFpbmVyU2Nyb2xsKGV2LmN1cnJlbnRUYXJnZXQgYXMgSFRNTERpdkVsZW1lbnQpO1xuICAgICAgICB9O1xuICAgICAgICBzZWxmLm1vZGVsLnNldEl0ZW1zQ29udGFpbmVyKGVsLnBhcmVudEVsZW1lbnQpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICBzdXBlci5jb21wb25lbnRXaWxsVW5tb3VudCgpO1xuICAgIGNvbnN0IGVsID0gdGhpcy5jb250YWluZXJSZWYuY3VycmVudDtcbiAgICBpZiAoISFlbCkge1xuICAgICAgZWwucGFyZW50RWxlbWVudC5wYXJlbnRFbGVtZW50LnBhcmVudEVsZW1lbnQub25zY3JvbGwgPSB1bmRlZmluZWQ7XG4gICAgICB0aGlzLm1vZGVsLnN0b3BJdGVtc0NvbnRhaW5lckhlaWdodE9ic2VydmVyKCk7XG4gICAgfVxuICAgIHRoaXMubW9kZWwuZGlzcG9zZSgpO1xuICB9XG4gIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIGxldCBjbGFzc05hbWUgPSBcInN2Yy1wYWdlLW5hdmlnYXRvcl9fc2VsZWN0b3JcIjtcbiAgICBpZiAodGhpcy5tb2RlbC5pc1BvcHVwT3BlbmVkKVxuICAgICAgY2xhc3NOYW1lICs9IFwiIHN2Yy1wYWdlLW5hdmlnYXRvcl9fc2VsZWN0b3ItLW9wZW5lZFwiO1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2Yy1wYWdlLW5hdmlnYXRvclwiIHJlZj17dGhpcy5jb250YWluZXJSZWZ9IHN0eWxlPXt7IGRpc3BsYXk6IHRoaXMubW9kZWwudmlzaWJsZSA/IFwiZmxleFwiIDogXCJub25lXCIgfX0+XG4gICAgICAgIHthdHRhY2hLZXkyY2xpY2soPGRpdlxuICAgICAgICAgIGNsYXNzTmFtZT17Y2xhc3NOYW1lfVxuICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHRoaXMubW9kZWwudG9nZ2xlUGFnZVNlbGVjdG9yKCl9XG4gICAgICAgICAgdGl0bGU9e3RoaXMubW9kZWwucGFnZVNlbGVjdG9yQ2FwdGlvbn1cbiAgICAgICAgPlxuICAgICAgICAgIDxTdmdJY29uXG4gICAgICAgICAgICBjbGFzc05hbWU9XCJzdmMtcGFnZS1uYXZpZ2F0b3JfX25hdmlnYXRvci1pY29uXCJcbiAgICAgICAgICAgIGljb25OYW1lPXt0aGlzLm1vZGVsLmljb259XG4gICAgICAgICAgICBzaXplPXsyNH1cbiAgICAgICAgICAgIHRpdGxlPXt0aGlzLm1vZGVsLnBhZ2VTZWxlY3RvckNhcHRpb259XG4gICAgICAgICAgPjwvU3ZnSWNvbj5cblxuICAgICAgICAgIDxQb3B1cFxuICAgICAgICAgICAgbW9kZWw9e3RoaXMubW9kZWwucG9wdXBNb2RlbH1cbiAgICAgICAgICAvL2NsYXNzTmFtZT1cInN2Yy1wYWdlLW5hdmlnYXRvcl9fcG9wdXBcIlxuICAgICAgICAgID48L1BvcHVwPlxuICAgICAgICA8L2Rpdj4pfVxuICAgICAgICA8ZGl2PlxuICAgICAgICAgIHt0aGlzLm1vZGVsLnZpc2libGVJdGVtcy5tYXAoKGl0ZW0pID0+IChcbiAgICAgICAgICAgIDxTdXJ2ZXlQYWdlTmF2aWdhdG9ySXRlbVxuICAgICAgICAgICAgICBrZXk9e2l0ZW0uaWR9XG4gICAgICAgICAgICAgIGl0ZW09e2l0ZW19XG4gICAgICAgICAgICA+PC9TdXJ2ZXlQYWdlTmF2aWdhdG9ySXRlbT5cbiAgICAgICAgICApKX1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG59XG5leHBvcnQgY2xhc3MgU3VydmV5UGFnZU5hdmlnYXRvckl0ZW0gZXh0ZW5kcyBDcmVhdG9yTW9kZWxFbGVtZW50PGFueSwgYW55PiB7XG4gIHByb3RlY3RlZCBnZXRTdGF0ZUVsZW1lbnQoKTogQmFzZSB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuaXRlbSBhcyBCYXNlO1xuICB9XG4gIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIGNvbnN0IGl0ZW0gPSB0aGlzLnByb3BzLml0ZW07XG4gICAgbGV0IGNsYXNzTmFtZTogc3RyaW5nID0gXCJzdmMtcGFnZS1uYXZpZ2F0b3ItaXRlbS1jb250ZW50XCI7XG4gICAgaWYgKHVud3JhcChpdGVtLmFjdGl2ZSkpIHtcbiAgICAgIGNsYXNzTmFtZSArPSBcIiBzdmMtcGFnZS1uYXZpZ2F0b3ItaXRlbS0tc2VsZWN0ZWRcIjtcbiAgICB9XG4gICAgaWYgKHVud3JhcChpdGVtLmRpc2FibGVkKSkge1xuICAgICAgY2xhc3NOYW1lICs9IFwiIHN2Yy1wYWdlLW5hdmlnYXRvci1pdGVtLS1kaXNhYmxlZFwiO1xuICAgIH1cbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmMtcGFnZS1uYXZpZ2F0b3ItaXRlbVwiPlxuICAgICAgICB7YXR0YWNoS2V5MmNsaWNrKDxkaXZcbiAgICAgICAgICBjbGFzc05hbWU9e2NsYXNzTmFtZX1cbiAgICAgICAgICBvbkNsaWNrPXsoZSkgPT4ge1xuICAgICAgICAgICAgaXRlbS5hY3Rpb24oaXRlbSk7XG4gICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgIH19XG4gICAgICAgID5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2Yy1wYWdlLW5hdmlnYXRvci1pdGVtX19kb3RcIiB0aXRsZT17aXRlbS50aXRsZX0+PC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmMtcGFnZS1uYXZpZ2F0b3ItaXRlbV9fYmFubmVyIHN2Yy1pdGVtX19iYW5uZXJcIj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInN2Yy10ZXh0IHN2Yy10ZXh0LS1zbWFsbCBzdmMtdGV4dC0tYm9sZFwiPntpdGVtLnRpdGxlfTwvc3Bhbj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInN2Yy1wYWdlLW5hdmlnYXRvci1pdGVtX19kb3RcIj48L3NwYW4+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2Pil9XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG59XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBQcm9wZXJ0eUdyaWRWaWV3TW9kZWwgfSBmcm9tIFwic3VydmV5LWNyZWF0b3ItY29yZVwiO1xuaW1wb3J0IHsgQmFzZSwgU3VydmV5TW9kZWwgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFN1cnZleSwgU3VydmV5RWxlbWVudEJhc2UsIFJlYWN0UXVlc3Rpb25GYWN0b3J5LCBTdXJ2ZXlRdWVzdGlvbkJ1dHRvbkdyb3VwLCBSZWFjdEVsZW1lbnRGYWN0b3J5IH0gZnJvbSBcInN1cnZleS1yZWFjdC11aVwiO1xuXG5pbnRlcmZhY2UgSVByb3BlcnR5R3JpZENvbXBvbmVudFByb3BzIHtcbiAgbW9kZWw6IFByb3BlcnR5R3JpZFZpZXdNb2RlbDtcbn1cblxuZXhwb3J0IGNsYXNzIFByb3BlcnR5R3JpZENvbXBvbmVudCBleHRlbmRzIFN1cnZleUVsZW1lbnRCYXNlPElQcm9wZXJ0eUdyaWRDb21wb25lbnRQcm9wcywgYW55PiB7XG5cbiAgZ2V0IG1vZGVsKCk6IFByb3BlcnR5R3JpZFZpZXdNb2RlbCB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMubW9kZWw7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0U3RhdGVFbGVtZW50KCk6IEJhc2Uge1xuICAgIHJldHVybiB0aGlzLm1vZGVsO1xuICB9XG5cbiAgcHVibGljIGNhblJlbmRlcigpOiBib29sZWFuIHtcbiAgICBpZiAoIXRoaXMubW9kZWwpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gc3VwZXIuY2FuUmVuZGVyKCk7XG4gIH1cblxuICByZW5kZXJFbGVtZW50KCkge1xuICAgIHJldHVybiAoXG4gICAgICA8U3VydmV5IG1vZGVsPXt0aGlzLm1vZGVsLnN1cnZleX0+PC9TdXJ2ZXk+XG4gICAgKTtcbiAgfVxufVxuXG5SZWFjdFF1ZXN0aW9uRmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlclF1ZXN0aW9uKFwiYnV0dG9uZ3JvdXBcIiwgKHByb3BzKSA9PiB7XG4gIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFN1cnZleVF1ZXN0aW9uQnV0dG9uR3JvdXAsIHByb3BzKTtcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBQcm9wZXJ0eUdyaWRDb21wb25lbnQ7XG5cblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFwic3ZjLXByb3BlcnR5LWdyaWRcIiwgKHByb3BzKSA9PiB7XG4gIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFByb3BlcnR5R3JpZENvbXBvbmVudCwgcHJvcHMpO1xufSk7XG4iLCJpbXBvcnQgeyBCYXNlLCBRdWVzdGlvbiwgU3VydmV5RXJyb3IsIFN1cnZleU1vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBJU3VydmV5Q3JlYXRvciwgUmVhY3RFbGVtZW50RmFjdG9yeSwgUmVhY3RRdWVzdGlvbkZhY3RvcnksIFN1cnZleVF1ZXN0aW9uIH0gZnJvbSBcInN1cnZleS1yZWFjdC11aVwiO1xuaW1wb3J0IHsgQ3JlYXRvckJhc2UgfSBmcm9tIFwic3VydmV5LWNyZWF0b3ItY29yZVwiO1xuaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuXG5pbnRlcmZhY2UgSVF1ZXN0aW9uRWRpdG9yQ29udGVudENvbXBvbmVudFByb3BzIHtcbiAgY3JlYXRvcjogQ3JlYXRvckJhc2U7XG4gIHN1cnZleTogU3VydmV5TW9kZWw7XG59XG5cbmV4cG9ydCBjbGFzcyBRdWVzdGlvbkVkaXRvckNvbnRlbnRDb21wb25lbnQgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQ8XG4gIElRdWVzdGlvbkVkaXRvckNvbnRlbnRDb21wb25lbnRQcm9wcyxcbiAgYW55XG4+IGltcGxlbWVudHMgSVN1cnZleUNyZWF0b3Ige1xuICBnZXQgc3VydmV5KCkge1xuICAgIHJldHVybiB0aGlzLnByb3BzLnN1cnZleTtcbiAgfVxuICBwdWJsaWMgY3JlYXRlUXVlc3Rpb25FbGVtZW50KHF1ZXN0aW9uOiBRdWVzdGlvbik6IEpTWC5FbGVtZW50IHtcbiAgICByZXR1cm4gUmVhY3RRdWVzdGlvbkZhY3RvcnkuSW5zdGFuY2UuY3JlYXRlUXVlc3Rpb24oXG4gICAgICAhcXVlc3Rpb24uaXNEZWZhdWx0UmVuZGVyaW5nIHx8IHF1ZXN0aW9uLmlzRGVmYXVsdFJlbmRlcmluZygpXG4gICAgICAgID8gcXVlc3Rpb24uZ2V0VGVtcGxhdGUoKVxuICAgICAgICA6IHF1ZXN0aW9uLmdldENvbXBvbmVudE5hbWUoKSxcbiAgICAgIHtcbiAgICAgICAgcXVlc3Rpb246IHF1ZXN0aW9uLFxuICAgICAgICBpc0Rpc3BsYXlNb2RlOiBxdWVzdGlvbi5pc0lucHV0UmVhZE9ubHksXG4gICAgICAgIGNyZWF0b3I6IHRoaXMsXG4gICAgICB9XG4gICAgKTtcbiAgfVxuICBwdWJsaWMgcXVlc3Rpb25UaXRsZUxvY2F0aW9uKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuc3VydmV5LnF1ZXN0aW9uVGl0bGVMb2NhdGlvbjtcbiAgfVxuICBwdWJsaWMgcXVlc3Rpb25FcnJvckxvY2F0aW9uKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuc3VydmV5LnF1ZXN0aW9uRXJyb3JMb2NhdGlvbjtcbiAgfVxuICByZW5kZXJFcnJvcihrZXk6IHN0cmluZywgZXJyb3I6IFN1cnZleUVycm9yLCBjc3NDbGFzc2VzOiBhbnkpOiBKU1guRWxlbWVudCB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICByZW5kZXIoKTogSlNYLkVsZW1lbnQge1xuICAgIGNvbnN0IHF1ZXN0aW9uID0gdGhpcy5zdXJ2ZXkuZ2V0QWxsUXVlc3Rpb25zKClbMF07XG4gICAgcmV0dXJuIChcbiAgICAgIDw+XG4gICAgICAgIDxTdXJ2ZXlRdWVzdGlvbiBjcmVhdG9yPXt0aGlzfSBlbGVtZW50PXtxdWVzdGlvbn0+PC9TdXJ2ZXlRdWVzdGlvbj5cbiAgICAgIDwvPlxuICAgICk7XG4gIH1cbn1cblxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXG4gIFwic3ZjLXF1ZXN0aW9uLWVkaXRvci1jb250ZW50XCIsXG4gIChwcm9wczogSVF1ZXN0aW9uRWRpdG9yQ29udGVudENvbXBvbmVudFByb3BzKSA9PiB7XG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoUXVlc3Rpb25FZGl0b3JDb250ZW50Q29tcG9uZW50LCBwcm9wcyk7XG4gIH1cbik7XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBSZWFjdFF1ZXN0aW9uRmFjdG9yeSwgU3VydmV5UGFnZSwgSVN1cnZleUNyZWF0b3IsIFN1cnZleVF1ZXN0aW9uRWxlbWVudEJhc2UgfSBmcm9tIFwic3VydmV5LXJlYWN0LXVpXCI7XG5pbXBvcnQgeyBRdWVzdGlvbkVtYmVkZGVkU3VydmV5TW9kZWwgfSBmcm9tIFwic3VydmV5LWNyZWF0b3ItY29yZVwiO1xuXG5leHBvcnQgY2xhc3MgU3VydmV5RWxlbWVudEVtYmVkZGVkU3VydmV5IGV4dGVuZHMgU3VydmV5UXVlc3Rpb25FbGVtZW50QmFzZSB7XG4gIHByb3RlY3RlZCBnZXQgZW1iZWRkZWRTdXJ2ZXkoKTogUXVlc3Rpb25FbWJlZGRlZFN1cnZleU1vZGVsIHtcbiAgICByZXR1cm4gKHRoaXMucHJvcHMuZWxlbWVudCB8fCB0aGlzLnByb3BzLnF1ZXN0aW9uKSBhcyBRdWVzdGlvbkVtYmVkZGVkU3VydmV5TW9kZWw7XG4gIH1cbiAgcHJvdGVjdGVkIGdldCBjcmVhdG9yKCk6IElTdXJ2ZXlDcmVhdG9yIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5jcmVhdG9yO1xuICB9XG4gIHB1YmxpYyByZW5kZXIoKTogSlNYLkVsZW1lbnQge1xuICAgIGlmICghdGhpcy5lbWJlZGRlZFN1cnZleSkgcmV0dXJuIG51bGw7XG4gICAgY29uc3Qgc3VydmV5ID0gdGhpcy5lbWJlZGRlZFN1cnZleS5lbWJlZGRlZFN1cnZleTtcbiAgICBpZiAoIXN1cnZleSB8fCAhc3VydmV5LmN1cnJlbnRQYWdlKSByZXR1cm4gbnVsbDtcbiAgICByZXR1cm4gPFN1cnZleVBhZ2VcbiAgICAgIHN1cnZleT17c3VydmV5fVxuICAgICAgcGFnZT17c3VydmV5LmN1cnJlbnRQYWdlfVxuICAgICAgY3NzPXtzdXJ2ZXkuY3NzfVxuICAgICAgY3JlYXRvcj17dGhpcy5jcmVhdG9yfVxuICAgIC8+O1xuXG4gIH1cbn1cblxuUmVhY3RRdWVzdGlvbkZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJRdWVzdGlvbihcImVtYmVkZGVkc3VydmV5XCIsIChwcm9wcykgPT4ge1xuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTdXJ2ZXlFbGVtZW50RW1iZWRkZWRTdXJ2ZXksIHByb3BzKTtcbn0pO1xuIiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHtcbiAgUmVhY3RRdWVzdGlvbkZhY3RvcnksXG4gIFN1cnZleVF1ZXN0aW9uRWxlbWVudEJhc2Vcbn0gZnJvbSBcInN1cnZleS1yZWFjdC11aVwiO1xuaW1wb3J0IHsgZWRpdG9yTG9jYWxpemF0aW9uLCBRdWVzdGlvbkxpbmtWYWx1ZU1vZGVsIH0gZnJvbSBcInN1cnZleS1jcmVhdG9yLWNvcmVcIjtcbmltcG9ydCB7IEFjdGlvbkJ1dHRvbiB9IGZyb20gXCIuL0FjdGlvbkJ1dHRvblwiO1xuXG5leHBvcnQgY2xhc3MgU3VydmV5UXVlc3Rpb25MaW5rVmFsdWUgZXh0ZW5kcyBTdXJ2ZXlRdWVzdGlvbkVsZW1lbnRCYXNlIHtcbiAgcHJvdGVjdGVkIGdldCBxdWVzdGlvbigpOiBRdWVzdGlvbkxpbmtWYWx1ZU1vZGVsIHtcbiAgICByZXR1cm4gdGhpcy5xdWVzdGlvbkJhc2UgYXMgUXVlc3Rpb25MaW5rVmFsdWVNb2RlbDtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyQ2xlYXIoKTogSlNYLkVsZW1lbnQge1xuICAgIGNvbnN0IHNob3dDbGVhciA9ICh0aGlzLnF1ZXN0aW9uQmFzZSBhcyBhbnkpLnNob3dDbGVhcjtcbiAgICBpZiAoIXRoaXMucXVlc3Rpb25CYXNlLmlzUmVhZE9ubHkgJiYgc2hvd0NsZWFyKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8QWN0aW9uQnV0dG9uXG4gICAgICAgICAgY2xhc3Nlcz17dGhpcy5xdWVzdGlvbi5saW5rQ2xlYXJCdXR0b25Dc3NDbGFzc2VzfVxuICAgICAgICAgIGNsaWNrPXsoKSA9PiB0aGlzLnF1ZXN0aW9uLmRvQ2xlYXJDbGljaygpfVxuICAgICAgICAgIHNlbGVjdGVkPXt0aGlzLnF1ZXN0aW9uLmlzU2VsZWN0ZWR9XG4gICAgICAgICAgdGV4dD17ZWRpdG9yTG9jYWxpemF0aW9uLmdldFN0cmluZyhcInBlLmNsZWFyXCIpfVxuICAgICAgICA+PC9BY3Rpb25CdXR0b24+XG4gICAgICApO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyRWxlbWVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgcmV0dXJuIChcbiAgICAgIDw+XG4gICAgICAgIDxBY3Rpb25CdXR0b25cbiAgICAgICAgICBjbGFzc2VzPXt0aGlzLnF1ZXN0aW9uLmxpbmtTZXRCdXR0b25Dc3NDbGFzc2VzfVxuICAgICAgICAgIGNsaWNrPXsoKSA9PiB0aGlzLnF1ZXN0aW9uLmRvTGlua0NsaWNrKCl9XG4gICAgICAgICAgc2VsZWN0ZWQ9e3RoaXMucXVlc3Rpb24uaXNTZWxlY3RlZH1cbiAgICAgICAgICBkaXNhYmxlZD17dGhpcy5xdWVzdGlvbi5pc1JlYWRPbmx5fVxuICAgICAgICAgIHRleHQ9e3RoaXMucXVlc3Rpb24ubGlua1ZhbHVlVGV4dH1cbiAgICAgICAgICB0aXRsZT17dGhpcy5xdWVzdGlvbi50b29sdGlwfVxuICAgICAgICA+PC9BY3Rpb25CdXR0b24+XG4gICAgICAgIHt0aGlzLnJlbmRlckNsZWFyKCl9XG4gICAgICA8Lz5cbiAgICApO1xuICB9XG59XG5cblJlYWN0UXVlc3Rpb25GYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyUXVlc3Rpb24oXCJsaW5rdmFsdWVcIiwgKHByb3BzKSA9PiB7XG4gIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFN1cnZleVF1ZXN0aW9uTGlua1ZhbHVlLCBwcm9wcyk7XG59KTtcbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IEJhc2UsIFN1cnZleU1vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBTdXJ2ZXlSZXN1bHRzSXRlbU1vZGVsLCBTdXJ2ZXlSZXN1bHRzTW9kZWwgfSBmcm9tIFwic3VydmV5LWNyZWF0b3ItY29yZVwiO1xuaW1wb3J0IHsgYXR0YWNoS2V5MmNsaWNrLCBTdmdJY29uIH0gZnJvbSBcInN1cnZleS1yZWFjdC11aVwiO1xuaW1wb3J0IHsgQWN0aW9uQnV0dG9uIH0gZnJvbSBcIi4vQWN0aW9uQnV0dG9uXCI7XG5pbXBvcnQgeyBDcmVhdG9yTW9kZWxFbGVtZW50IH0gZnJvbSBcIi4vTW9kZWxFbGVtZW50XCI7XG5cbmludGVyZmFjZSBJU3VydmV5UmVzdWx0c1Byb3BzIHtcbiAgc3VydmV5OiBTdXJ2ZXlNb2RlbDtcbn1cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlSZXN1bHRzIGV4dGVuZHMgQ3JlYXRvck1vZGVsRWxlbWVudDxcbiAgSVN1cnZleVJlc3VsdHNQcm9wcyxcbiAgYW55XG4+IHtcbiAgbW9kZWw6IFN1cnZleVJlc3VsdHNNb2RlbDtcbiAgcHJvdGVjdGVkIGNyZWF0ZU1vZGVsKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnByb3BzLnN1cnZleSkge1xuICAgICAgdGhpcy5tb2RlbCA9IG5ldyBTdXJ2ZXlSZXN1bHRzTW9kZWwodGhpcy5wcm9wcy5zdXJ2ZXkpO1xuICAgIH1cbiAgfVxuICBwcm90ZWN0ZWQgZ2V0VXBkYXRlZE1vZGVsUHJvcHMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBbXCJzdXJ2ZXlcIl07XG4gIH1cbiAgcHJvdGVjdGVkIGdldFN0YXRlRWxlbWVudCgpOiBCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5tb2RlbDtcbiAgfVxuICByZW5kZXIoKTogSlNYLkVsZW1lbnQge1xuICAgIGlmICghdGhpcy5tb2RlbCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2ZC10ZXN0LXJlc3VsdHNcIj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmQtdGVzdC1yZXN1bHRzX19oZWFkZXJcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2ZC10ZXN0LXJlc3VsdHNfX2hlYWRlci10ZXh0XCI+e3RoaXMubW9kZWwuc3VydmV5UmVzdWx0c1RleHR9PC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmQtdGVzdC1yZXN1bHRzX19oZWFkZXItdHlwZXNcIj5cbiAgICAgICAgICAgIDxBY3Rpb25CdXR0b25cbiAgICAgICAgICAgICAgY2xpY2s9eygpID0+IHRoaXMubW9kZWwuc2VsZWN0VGFibGVDbGljaygpfVxuICAgICAgICAgICAgICB0ZXh0PXt0aGlzLm1vZGVsLnN1cnZleVJlc3VsdHNUYWJsZVRleHR9XG4gICAgICAgICAgICAgIHNlbGVjdGVkPXt0aGlzLm1vZGVsLmlzVGFibGVTZWxlY3RlZH1cbiAgICAgICAgICAgICAgZGlzYWJsZWQ9e2ZhbHNlfVxuICAgICAgICAgICAgPjwvQWN0aW9uQnV0dG9uPlxuICAgICAgICAgICAgPEFjdGlvbkJ1dHRvblxuICAgICAgICAgICAgICBjbGljaz17KCkgPT4gdGhpcy5tb2RlbC5zZWxlY3RKc29uQ2xpY2soKX1cbiAgICAgICAgICAgICAgdGV4dD17dGhpcy5tb2RlbC5zdXJ2ZXlSZXN1bHRzSnNvblRleHR9XG4gICAgICAgICAgICAgIHNlbGVjdGVkPXt0aGlzLm1vZGVsLmlzSnNvblNlbGVjdGVkfVxuICAgICAgICAgICAgICBkaXNhYmxlZD17ZmFsc2V9XG4gICAgICAgICAgICA+PC9BY3Rpb25CdXR0b24+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICB7dGhpcy5yZW5kZXJSZXN1bHRBc1RleHQoKX1cbiAgICAgICAge3RoaXMucmVuZGVyUmVzdWx0QXNUYWJsZSgpfVxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxuICByZW5kZXJSZXN1bHRBc1RleHQoKTogSlNYLkVsZW1lbnQge1xuICAgIGlmICh0aGlzLm1vZGVsLnJlc3VsdFZpZXdUeXBlICE9PSBcInRleHRcIikge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2ZC10ZXN0LXJlc3VsdHNfX3RleHQgc3ZkLWxpZ2h0LWJnLWNvbG9yXCI+XG4gICAgICAgIDxkaXY+e3RoaXMubW9kZWwucmVzdWx0VGV4dH08L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbiAgcmVuZGVyUmVzdWx0QXNUYWJsZSgpOiBKU1guRWxlbWVudCB7XG4gICAgaWYgKHRoaXMubW9kZWwucmVzdWx0Vmlld1R5cGUgIT09IFwidGFibGVcIikge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2ZC10ZXN0LXJlc3VsdHNfX3RhYmxlIHN2ZC1saWdodC1iZy1jb2xvclwiPlxuICAgICAgICA8dGFibGU+XG4gICAgICAgICAgPHRoZWFkPlxuICAgICAgICAgICAgPHRyIGNsYXNzTmFtZT1cInN2ZC1saWdodC1iYWNrZ3JvdW5kLWNvbG9yXCI+XG4gICAgICAgICAgICAgIDx0aCBrZXk9ezF9IGNsYXNzTmFtZT1cInN2ZC1kYXJrLWJvcmRlci1jb2xvclwiPlxuICAgICAgICAgICAgICAgIHt0aGlzLm1vZGVsLnJlc3VsdHNUaXRsZX1cbiAgICAgICAgICAgICAgPC90aD5cbiAgICAgICAgICAgICAgPHRoIGtleT17Mn0gY2xhc3NOYW1lPVwic3ZkLWRhcmstYm9yZGVyLWNvbG9yXCI+XG4gICAgICAgICAgICAgICAge3RoaXMubW9kZWwucmVzdWx0c0Rpc3BsYXlWYWx1ZX1cbiAgICAgICAgICAgICAgPC90aD5cbiAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgPC90aGVhZD5cbiAgICAgICAgICA8dGJvZHk+e1N1cnZleVJlc3VsdHMucmVuZGVyUm93cyh0aGlzLm1vZGVsLnJlc3VsdERhdGEpfTwvdGJvZHk+XG4gICAgICAgIDwvdGFibGU+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG4gIHN0YXRpYyByZW5kZXJSb3dzKGRhdGE6IEFycmF5PGFueT4pOiBBcnJheTxKU1guRWxlbWVudD4ge1xuICAgIGNvbnN0IHJvd3MgPSBbXTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRhdGEubGVuZ3RoOyBpKyspIHtcbiAgICAgIHJvd3MucHVzaCg8U3VydmV5UmVzdWx0c0J5Um93IGtleT17aSArIDF9IHJvdz17ZGF0YVtpXX0gLz4pO1xuICAgIH1cbiAgICByZXR1cm4gcm93cztcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgU3VydmV5UmVzdWx0c0J5Um93IGV4dGVuZHMgQ3JlYXRvck1vZGVsRWxlbWVudDxhbnksIGFueT4ge1xuICBwcml2YXRlIGdldCByb3coKTogU3VydmV5UmVzdWx0c0l0ZW1Nb2RlbCB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMucm93O1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldFN0YXRlRWxlbWVudCgpOiBCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5yb3c7XG4gIH1cblxuICByZW5kZXIoKTogSlNYLkVsZW1lbnQge1xuICAgIHJldHVybiAoXG4gICAgICA8PlxuICAgICAgICB7YXR0YWNoS2V5MmNsaWNrKDx0ciBvbkNsaWNrPXsoKSA9PiB0aGlzLnJvdy50b2dnbGUoKX0+XG4gICAgICAgICAgPHRkIGtleT17MX1cbiAgICAgICAgICAgIHN0eWxlPXt7IHBhZGRpbmdMZWZ0OiB0aGlzLnJvdy50ZXh0TWFyZ2luIH19XG4gICAgICAgICAgICBjbGFzc05hbWU9XCJzdmQtZGFyay1ib3JkZXItY29sb3JcIj5cblxuICAgICAgICAgICAge3RoaXMucm93LmlzTm9kZSA/IChcbiAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICBzdHlsZT17eyBsZWZ0OiB0aGlzLnJvdy5tYXJrZXJNYXJnaW4gfX1cbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9e1wic3ZkLXRlc3QtcmVzdWx0c19fbWFya2VyIFwiICsgKHRoaXMucm93LmNvbGxhcHNlZCA/IFwiXCIgOiBcInN2ZC10ZXN0LXJlc3VsdHNfX21hcmtlci0tZXhwYW5kZWRcIil9PlxuICAgICAgICAgICAgICAgIDxTdmdJY29uXG4gICAgICAgICAgICAgICAgICBpY29uTmFtZT17XCJpY29uLWV4cGFuZF8xNngxNlwifVxuICAgICAgICAgICAgICAgICAgc2l6ZT17MTZ9XG4gICAgICAgICAgICAgICAgPjwvU3ZnSWNvbj5cbiAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgKSA6IG51bGx9XG5cbiAgICAgICAgICAgIDxzcGFuPnt0aGlzLnJvdy50aXRsZX08L3NwYW4+XG4gICAgICAgICAgPC90ZD5cbiAgICAgICAgICA8dGQga2V5PXsyfSBjbGFzc05hbWU9e3RoaXMucm93LmlzTm9kZSA/IFwic3ZkLXRlc3QtcmVzdWx0c19fbm9kZS12YWx1ZVwiIDogXCJzdmQtZGFyay1ib3JkZXItY29sb3JcIn0+XG4gICAgICAgICAgICB7dGhpcy5yb3cuZ2V0U3RyaW5nKHRoaXMucm93LmRpc3BsYXlWYWx1ZSl9XG4gICAgICAgICAgPC90ZD5cbiAgICAgICAgPC90cj4pfVxuICAgICAgICB7dGhpcy5yb3cuaXNOb2RlICYmICF0aGlzLnJvdy5jb2xsYXBzZWQgPyBTdXJ2ZXlSZXN1bHRzLnJlbmRlclJvd3ModGhpcy5yb3cuZGF0YSkgOiBudWxsfVxuICAgICAgPC8+XG4gICAgKTtcbiAgfVxufVxuIiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgU2lkZWJhclRhYk1vZGVsLCBTaWRlYmFyTW9kZWwgfSBmcm9tIFwic3VydmV5LWNyZWF0b3ItY29yZVwiO1xuaW1wb3J0IHsgQmFzZSB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgU3VydmV5RWxlbWVudEJhc2UsIFN1cnZleUFjdGlvbkJhciwgUmVhY3RRdWVzdGlvbkZhY3RvcnksIFJlYWN0RWxlbWVudEZhY3RvcnkgfSBmcm9tIFwic3VydmV5LXJlYWN0LXVpXCI7XG5cbmludGVyZmFjZSBJU2lkZWJhckNvbXBvbmVudFByb3BzIHtcbiAgbW9kZWw6IFNpZGViYXJNb2RlbDtcbn1cblxuZXhwb3J0IGNsYXNzIFNpZGViYXJDb21wb25lbnQgZXh0ZW5kcyBTdXJ2ZXlFbGVtZW50QmFzZTxJU2lkZWJhckNvbXBvbmVudFByb3BzLCBhbnk+IHtcbiAgcHJpdmF0ZSBjb250YWluZXJSZWY6IFJlYWN0LlJlZk9iamVjdDxIVE1MRGl2RWxlbWVudD47XG5cbiAgZ2V0IG1vZGVsKCk6IFNpZGViYXJNb2RlbCB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMubW9kZWw7XG4gIH1cblxuICBjb25zdHJ1Y3Rvcihwcm9wczogSVNpZGViYXJDb21wb25lbnRQcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLmNvbnRhaW5lclJlZiA9IFJlYWN0LmNyZWF0ZVJlZigpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldFN0YXRlRWxlbWVudCgpOiBCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5tb2RlbDtcbiAgfVxuXG4gIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIHN1cGVyLmNvbXBvbmVudERpZE1vdW50KCk7XG4gICAgdGhpcy5tb2RlbC5pbml0UmVzaXplTWFuYWdlcih0aGlzLmNvbnRhaW5lclJlZi5jdXJyZW50KTtcbiAgfVxuICBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICBzdXBlci5jb21wb25lbnRXaWxsVW5tb3VudCgpO1xuICAgIHRoaXMubW9kZWwucmVzZXRSZXNpemVNYW5hZ2VyKCk7XG4gIH1cbiAgcHVibGljIGNhblJlbmRlcigpOiBib29sZWFuIHtcbiAgICBpZiAoIXRoaXMubW9kZWwpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gc3VwZXIuY2FuUmVuZGVyKCk7XG4gIH1cbiAgcmVuZGVyRWxlbWVudCgpIHtcbiAgICBjb25zdCBzdHlsZSA9IHsgZGlzcGxheTogIXRoaXMubW9kZWwudmlzaWJsZSA/IFwibm9uZVwiIDogXCJcIiB9O1xuICAgIGNvbnN0IGNsYXNzTmFtZSA9IFwic3ZjLXNpZGUtYmFyXCIgKyAodGhpcy5tb2RlbC5mbHlvdXRQYW5lbE1vZGUgPyBcIiBzdmMtZmx5b3V0LXNpZGUtYmFyXCIgOiBcIlwiKTtcbiAgICBjb25zdCBpdGVtcyA9IHRoaXMubW9kZWwudGFicy5tYXAoKGl0ZW0pID0+IDxTaWRlYmFyVGFiIGl0ZW09e2l0ZW19IGtleT17aXRlbS5pZH0gLz4pO1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT17Y2xhc3NOYW1lfSBzdHlsZT17eyBkaXNwbGF5OiAhdGhpcy5tb2RlbC5oYXNWaXNpYmxlVGFicyA/IFwibm9uZVwiIDogXCJcIiB9fT5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmMtc2lkZS1iYXJfX3NoYWRvd1wiIG9uQ2xpY2s9eygpID0+IHRoaXMubW9kZWwuY29sbGFwc2VTaWRlYmFyKCl9PjwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2Yy1mbGV4LWNvbHVtbiBzdmMtc2lkZS1iYXJfX3dyYXBwZXJcIj5cbiAgICAgICAgICA8ZGl2IHJlZj17dGhpcy5jb250YWluZXJSZWZ9IHN0eWxlPXtzdHlsZX0gY2xhc3NOYW1lPVwic3ZjLXNpZGUtYmFyX19jb250YWluZXJcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3ZjLXNpZGUtYmFyX19jb250YWluZXItaGVhZGVyXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3ZjLXNpZGUtYmFyX19jb250YWluZXItYWN0aW9uc1wiPlxuICAgICAgICAgICAgICAgIDxTdXJ2ZXlBY3Rpb25CYXIgbW9kZWw9e3RoaXMubW9kZWwudG9vbGJhcn0+PC9TdXJ2ZXlBY3Rpb25CYXI+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICB7KCEhdGhpcy5tb2RlbC5oZWFkZXJUZXh0ID9cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2Yy1zaWRlLWJhcl9fY29udGFpbmVyLXRpdGxlXCI+XG4gICAgICAgICAgICAgICAgICB7dGhpcy5tb2RlbC5oZWFkZXJUZXh0fVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDogbnVsbCl9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3ZjLXNpZGUtYmFyX19jb250YWluZXItY29udGVudFwiPlxuICAgICAgICAgICAgICB7aXRlbXN9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3ZjLXNpZGUtYmFyX19jb250YWluZXItY2xvc2VcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzZC1idG4gc2QtYnRuLS1hY3Rpb24gc3ZjLXNpZGUtYmFyX19jb250YWluZXItY2xvc2UtYnV0dG9uXCIgb25DbGljaz17KCkgPT4gdGhpcy5tb2RlbC5jb2xsYXBzZVNpZGViYXIoKX0+IHt0aGlzLm1vZGVsLmNsb3NlVGV4dH0gPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG59XG5cbmNsYXNzIFNpZGViYXJUYWIgZXh0ZW5kcyBTdXJ2ZXlFbGVtZW50QmFzZTxhbnksIGFueT4ge1xuICBwcml2YXRlIGdldCBpdGVtKCk6IFNpZGViYXJUYWJNb2RlbCB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuaXRlbTtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRTdGF0ZUVsZW1lbnQoKTogQmFzZSB7XG4gICAgcmV0dXJuIHRoaXMuaXRlbTtcbiAgfVxuXG4gIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIGlmICghdGhpcy5pdGVtLnZpc2libGUpIHJldHVybiBudWxsO1xuXG4gICAgY29uc3QgY29tcG9uZW50ID0gUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5jcmVhdGVFbGVtZW50KHRoaXMuaXRlbS5jb21wb25lbnROYW1lLCB7IG1vZGVsOiB0aGlzLml0ZW0ubW9kZWwgfSk7XG5cbiAgICByZXR1cm4gY29tcG9uZW50O1xuICB9XG59XG5cblJlYWN0UXVlc3Rpb25GYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyUXVlc3Rpb24oXCJzdmMtc2lkZS1iYXItdGFiXCIsIChwcm9wcykgPT4ge1xuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTaWRlYmFyVGFiLCBwcm9wcyk7XG59KTtcblxuZXhwb3J0IGRlZmF1bHQgU2lkZWJhckNvbXBvbmVudDtcblxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXCJzdmMtc2lkZS1iYXJcIiwgKHByb3BzKSA9PiB7XG4gIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFNpZGViYXJDb21wb25lbnQsIHByb3BzKTtcbn0pOyIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IExvY2FsaXphYmxlU3RyaW5nLCBTZXJpYWxpemVyLCBKc29uT2JqZWN0UHJvcGVydHksIEJhc2UgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFJlYWN0RWxlbWVudEZhY3RvcnksIFN1cnZleUVsZW1lbnRCYXNlLCBTdmdJY29uIH0gZnJvbSBcInN1cnZleS1yZWFjdC11aVwiO1xuaW1wb3J0IHsgQ3JlYXRvckJhc2UsIFN0cmluZ0VkaXRvclZpZXdNb2RlbEJhc2UsIGVkaXRhYmxlU3RyaW5nUmVuZGVyZXJOYW1lIH0gZnJvbSBcInN1cnZleS1jcmVhdG9yLWNvcmVcIjtcbmltcG9ydCB7IENyZWF0b3JNb2RlbEVsZW1lbnQgfSBmcm9tIFwiLi9Nb2RlbEVsZW1lbnRcIjtcblxuZXhwb3J0IGNsYXNzIFN1cnZleUxvY1N0cmluZ0VkaXRvciBleHRlbmRzIENyZWF0b3JNb2RlbEVsZW1lbnQ8YW55LCBhbnk+IHtcbiAgcHJpdmF0ZSBiYXNlTW9kZWw6IFN0cmluZ0VkaXRvclZpZXdNb2RlbEJhc2U7XG4gIHByaXZhdGUgc3ZTdHJpbmdFZGl0b3JSZWY6IFJlYWN0LlJlZk9iamVjdDxIVE1MRGl2RWxlbWVudD47XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgdGhpcy5zdGF0ZSA9IHsgY2hhbmdlZDogMCB9O1xuICAgIHRoaXMuc3ZTdHJpbmdFZGl0b3JSZWYgPSBSZWFjdC5jcmVhdGVSZWYoKTtcbiAgICB0aGlzLmJhc2VNb2RlbC5nZXRFZGl0b3JFbGVtZW50ID0gKCkgPT4gdGhpcy5zdlN0cmluZ0VkaXRvclJlZi5jdXJyZW50O1xuICB9XG4gIHByb3RlY3RlZCBjcmVhdGVNb2RlbCgpOiB2b2lkIHtcbiAgICB0aGlzLmJhc2VNb2RlbCA9IG5ldyBTdHJpbmdFZGl0b3JWaWV3TW9kZWxCYXNlKHRoaXMubG9jU3RyaW5nLCB0aGlzLmNyZWF0b3IpO1xuICAgIHRoaXMuYmFzZU1vZGVsLmJsdXJFZGl0b3IgPSAoKSA9PiB7XG4gICAgICB0aGlzLnN2U3RyaW5nRWRpdG9yUmVmLmN1cnJlbnQuYmx1cigpO1xuICAgICAgdGhpcy5zdlN0cmluZ0VkaXRvclJlZi5jdXJyZW50LnNwZWxsY2hlY2sgPSBmYWxzZTtcbiAgICB9O1xuICB9XG4gIHByb3RlY3RlZCBnZXRVcGRhdGVkTW9kZWxQcm9wcygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIFtcImNyZWF0b3JcIiwgXCJsb2NTdHJpbmdcIl07XG4gIH1cbiAgcHJpdmF0ZSBnZXQgbG9jU3RyaW5nKCk6IExvY2FsaXphYmxlU3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5sb2NTdHIubG9jU3RyO1xuICB9XG4gIHByaXZhdGUgZ2V0IGNyZWF0b3IoKTogQ3JlYXRvckJhc2Uge1xuICAgIHJldHVybiB0aGlzLnByb3BzLmxvY1N0ci5jcmVhdG9yO1xuICB9XG4gIHByaXZhdGUgZ2V0IHN0eWxlKCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuc3R5bGU7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0U3RhdGVFbGVtZW50KCk6IEJhc2Uge1xuICAgIHJldHVybiB0aGlzLmJhc2VNb2RlbDtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgZXJyb3JUZXh0KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuYmFzZU1vZGVsLmVycm9yVGV4dDtcbiAgfVxuICBwcml2YXRlIG9uQ2hhbmdlZEhhbmRsZXIgPSAoc2VuZGVyOiBhbnksIG9wdGlvbnM6IGFueSkgPT4ge1xuICAgIHRoaXMuc2V0U3RhdGUoeyBjaGFuZ2VkOiAhIXRoaXMuc3RhdGUgJiYgdGhpcy5zdGF0ZS5jaGFuZ2VkID8gdGhpcy5zdGF0ZS5jaGFuZ2VkICsgMSA6IDEgfSk7XG4gIH1cbiAgcHVibGljIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIHN1cGVyLmNvbXBvbmVudERpZE1vdW50KCk7XG4gICAgaWYgKCF0aGlzLmxvY1N0cmluZykgcmV0dXJuO1xuICAgIGNvbnN0IHNlbGY6IFN1cnZleUxvY1N0cmluZ0VkaXRvciA9IHRoaXM7XG4gICAgdGhpcy5iYXNlTW9kZWwuYWZ0ZXJSZW5kZXIoKTtcbiAgICB0aGlzLmxvY1N0cmluZy5vblN0cmluZ0NoYW5nZWQuYWRkKHRoaXMub25DaGFuZ2VkSGFuZGxlcik7XG4gICAgaWYgKHRoaXMubG9jU3RyaW5nW1wiX19pc0VkaXRpbmdcIl0pIHtcbiAgICAgIHRoaXMuc3ZTdHJpbmdFZGl0b3JSZWYuY3VycmVudC5mb2N1cygpO1xuICAgICAgLy8gZG9jdW1lbnQuZXhlY0NvbW1hbmQoJ3NlbGVjdEFsbCcsIGZhbHNlLCBudWxsKTtcbiAgICB9XG4gIH1cbiAgcHVibGljIGNvbXBvbmVudERpZFVwZGF0ZShwcmV2UHJvcHM6IGFueSwgcHJldlN0YXRlOiBhbnkpOiB2b2lkIHtcbiAgICBzdXBlci5jb21wb25lbnREaWRVcGRhdGUocHJldlByb3BzLCBwcmV2U3RhdGUpO1xuICAgIHRoaXMuYmFzZU1vZGVsLmFmdGVyUmVuZGVyKCk7XG4gIH1cbiAgcHVibGljIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgIHN1cGVyLmNvbXBvbmVudFdpbGxVbm1vdW50KCk7XG4gICAgaWYgKCF0aGlzLmxvY1N0cmluZykgcmV0dXJuO1xuICAgIHRoaXMubG9jU3RyaW5nLm9uU3RyaW5nQ2hhbmdlZC5yZW1vdmUodGhpcy5vbkNoYW5nZWRIYW5kbGVyKTtcbiAgfVxuICBwcml2YXRlIGdldCBwbGFjZWhvbGRlcigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmJhc2VNb2RlbC5wbGFjZWhvbGRlcjtcbiAgfVxuICBwcml2YXRlIGdldCBjb250ZW50RWRpdGFibGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuYmFzZU1vZGVsLmNvbnRlbnRFZGl0YWJsZTtcbiAgfVxuICBwcml2YXRlIG9uQmx1ciA9IChldmVudDogYW55KSA9PiB7XG4gICAgdGhpcy5zdlN0cmluZ0VkaXRvclJlZi5jdXJyZW50LnNwZWxsY2hlY2sgPSBmYWxzZTtcbiAgICB0aGlzLmxvY1N0cmluZ1tcIl9faXNFZGl0aW5nXCJdID0gZmFsc2U7XG4gICAgdGhpcy5qdXN0Rm9jdXNlZCA9IGZhbHNlO1xuICAgIHRoaXMuYmFzZU1vZGVsLm9uQmx1cihldmVudC5uYXRpdmVFdmVudCk7XG4gICAgcmV0dXJuIHRoaXMuYmFzZU1vZGVsLmVycm9yVGV4dDtcbiAgfTtcbiAgcHJpdmF0ZSBvbkNvbXBvc2l0aW9uU3RhcnQgPSAoZXZlbnQ6IGFueSkgPT4ge1xuICAgIHRoaXMuYmFzZU1vZGVsLm9uQ29tcG9zaXRpb25TdGFydChldmVudC5uYXRpdmVFdmVudCk7XG4gIH07XG4gIHByaXZhdGUgb25Db21wb3NpdGlvbkVuZCA9IChldmVudDogYW55KSA9PiB7XG4gICAgdGhpcy5iYXNlTW9kZWwub25Db21wb3NpdGlvbkVuZChldmVudC5uYXRpdmVFdmVudCk7XG4gIH07XG4gIHByaXZhdGUgb25JbnB1dCA9IChldmVudDogYW55KSA9PiB7XG4gICAgdGhpcy5iYXNlTW9kZWwub25JbnB1dChldmVudC5uYXRpdmVFdmVudCk7XG4gIH07XG4gIHByaXZhdGUganVzdEZvY3VzZWQgPSBmYWxzZTtcbiAgcHJpdmF0ZSBvbkZvY3VzID0gKGV2ZW50OiBhbnkpID0+IHtcbiAgICB0aGlzLmJhc2VNb2RlbC5vbkZvY3VzKGV2ZW50Lm5hdGl2ZUV2ZW50KTtcbiAgICB0aGlzLmp1c3RGb2N1c2VkID0gdHJ1ZTtcbiAgfTtcbiAgcHJpdmF0ZSBvbktleURvd24gPSAoZXZlbnQ6IFJlYWN0LktleWJvYXJkRXZlbnQ8SFRNTFNwYW5FbGVtZW50PikgPT4ge1xuICAgIHJldHVybiB0aGlzLmJhc2VNb2RlbC5vbktleURvd24oZXZlbnQubmF0aXZlRXZlbnQpO1xuICB9O1xuICBwcml2YXRlIG9uS2V5VXAgPSAoZXZlbnQ6IFJlYWN0LktleWJvYXJkRXZlbnQ8SFRNTFNwYW5FbGVtZW50PikgPT4ge1xuICAgIHJldHVybiB0aGlzLmJhc2VNb2RlbC5vbktleVVwKGV2ZW50Lm5hdGl2ZUV2ZW50KTtcbiAgfTtcbiAgcHJpdmF0ZSBvbk1vdXNlVXAgPSAoZXZlbnQ6IFJlYWN0Lk1vdXNlRXZlbnQ8SFRNTFNwYW5FbGVtZW50Pik6IGJvb2xlYW4gPT4ge1xuICAgIHJldHVybiB0aGlzLmJhc2VNb2RlbC5vbk1vdXNlVXAoZXZlbnQubmF0aXZlRXZlbnQpO1xuICB9O1xuICBwcml2YXRlIGRvbmUgPSAoZXZlbnQ6IGFueSkgPT4ge1xuICAgIHRoaXMuYmFzZU1vZGVsLmRvbmUoZXZlbnQpO1xuICAgIHRoaXMubG9jU3RyaW5nW1wiX19pc0VkaXRpbmdcIl0gPSBmYWxzZTtcbiAgfTtcbiAgcHJpdmF0ZSBlZGl0ID0gKGV2ZW50OiBhbnkpID0+IHtcbiAgICB0aGlzLnN2U3RyaW5nRWRpdG9yUmVmLmN1cnJlbnQuZm9jdXMoKTtcbiAgICAvLyBkb2N1bWVudC5leGVjQ29tbWFuZCgnc2VsZWN0QWxsJywgZmFsc2UsIG51bGwpO1xuICAgIHRoaXMubG9jU3RyaW5nW1wiX19pc0VkaXRpbmdcIl0gPSB0cnVlO1xuICAgIHRoaXMuYmFzZU1vZGVsLm9uQ2xpY2soZXZlbnQpO1xuICB9O1xuICBwcml2YXRlIGdldCBjbGFzc05hbWUoKSB7XG4gICAgcmV0dXJuIHRoaXMuYmFzZU1vZGVsLmNsYXNzTmFtZSh0aGlzLmxvY1N0cmluZy5yZW5kZXJlZEh0bWwpO1xuICB9XG4gIHB1YmxpYyByZW5kZXIoKTogSlNYLkVsZW1lbnQge1xuICAgIGlmICghdGhpcy5sb2NTdHJpbmcpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIHRoaXMuYmFzZU1vZGVsLnNldExvY1N0cmluZyh0aGlzLmxvY1N0cmluZyk7XG4gICAgfVxuICAgIGxldCBjb250cm9sID0gbnVsbDtcbiAgICBpZiAodGhpcy5sb2NTdHJpbmcuaGFzSHRtbCkge1xuICAgICAgY29uc3QgaHRtbFZhbHVlID0geyBfX2h0bWw6IHRoaXMuYmFzZU1vZGVsLmZvY3VzZWQgJiYgdGhpcy5iYXNlTW9kZWwuZWRpdEFzVGV4dCAmJiB0aGlzLmxvY1N0cmluZy50ZXh0IHx8IHRoaXMubG9jU3RyaW5nLnJlbmRlcmVkSHRtbCB9O1xuICAgICAgY29udHJvbCA9IChcbiAgICAgICAgPHNwYW5cbiAgICAgICAgICByb2xlPVwidGV4dGJveFwiXG4gICAgICAgICAgcmVmPXt0aGlzLnN2U3RyaW5nRWRpdG9yUmVmfVxuICAgICAgICAgIGNsYXNzTmFtZT1cInN2LXN0cmluZy1lZGl0b3JcIlxuICAgICAgICAgIGNvbnRlbnRFZGl0YWJsZT17dGhpcy5jb250ZW50RWRpdGFibGV9XG4gICAgICAgICAgc3BlbGxDaGVjaz17ZmFsc2V9XG4gICAgICAgICAgYXJpYS1wbGFjZWhvbGRlcj17dGhpcy5wbGFjZWhvbGRlcn1cbiAgICAgICAgICBhcmlhLWxhYmVsPXt0aGlzLnBsYWNlaG9sZGVyIHx8IFwiY29udGVudCBlZGl0YWJsZVwifVxuICAgICAgICAgIHN1cHByZXNzQ29udGVudEVkaXRhYmxlV2FybmluZz17dHJ1ZX1cbiAgICAgICAgICAvLyBzdHlsZT17dGhpcy5zdHlsZX1cbiAgICAgICAgICBkYW5nZXJvdXNseVNldElubmVySFRNTD17aHRtbFZhbHVlfVxuICAgICAgICAgIG9uQmx1cj17dGhpcy5vbkJsdXJ9XG4gICAgICAgICAgb25Gb2N1cz17dGhpcy5vbkZvY3VzfVxuICAgICAgICAgIG9uS2V5RG93bj17dGhpcy5vbktleURvd259XG4gICAgICAgICAgb25Nb3VzZVVwPXt0aGlzLm9uTW91c2VVcH1cbiAgICAgICAgICBvbkNsaWNrPXt0aGlzLmVkaXR9XG4gICAgICAgIC8+XG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb250cm9sID0gKFxuICAgICAgICA8c3BhblxuICAgICAgICAgIHJvbGU9XCJ0ZXh0Ym94XCJcbiAgICAgICAgICByZWY9e3RoaXMuc3ZTdHJpbmdFZGl0b3JSZWZ9XG4gICAgICAgICAgY2xhc3NOYW1lPVwic3Ytc3RyaW5nLWVkaXRvclwiXG4gICAgICAgICAgY29udGVudEVkaXRhYmxlPXt0aGlzLmNvbnRlbnRFZGl0YWJsZX1cbiAgICAgICAgICBzcGVsbENoZWNrPXtmYWxzZX1cbiAgICAgICAgICBhcmlhLXBsYWNlaG9sZGVyPXt0aGlzLnBsYWNlaG9sZGVyfVxuICAgICAgICAgIGFyaWEtbGFiZWw9e3RoaXMucGxhY2Vob2xkZXIgfHwgXCJjb250ZW50IGVkaXRhYmxlXCJ9XG4gICAgICAgICAgc3VwcHJlc3NDb250ZW50RWRpdGFibGVXYXJuaW5nPXt0cnVlfVxuICAgICAgICAgIC8vIHN0eWxlPXt0aGlzLnN0eWxlfVxuICAgICAgICAgIG9uQmx1cj17dGhpcy5vbkJsdXJ9XG4gICAgICAgICAgb25JbnB1dD17dGhpcy5vbklucHV0fVxuICAgICAgICAgIG9uQ29tcG9zaXRpb25TdGFydD17dGhpcy5vbkNvbXBvc2l0aW9uU3RhcnR9XG4gICAgICAgICAgb25Db21wb3NpdGlvbkVuZD17dGhpcy5vbkNvbXBvc2l0aW9uRW5kfVxuICAgICAgICAgIG9uRm9jdXM9e3RoaXMub25Gb2N1c31cbiAgICAgICAgICBvbktleURvd249e3RoaXMub25LZXlEb3dufVxuICAgICAgICAgIG9uS2V5VXA9e3RoaXMub25LZXlVcH1cbiAgICAgICAgICBvbk1vdXNlVXA9e3RoaXMub25Nb3VzZVVwfVxuICAgICAgICAgIG9uQ2xpY2s9e3RoaXMuZWRpdH1cbiAgICAgICAgPlxuICAgICAgICAgIHt0aGlzLmxvY1N0cmluZy5yZW5kZXJlZEh0bWx9XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiAoXG4gICAgICA8c3BhbiBjbGFzc05hbWU9e3RoaXMuY2xhc3NOYW1lfT5cbiAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwic3ZjLXN0cmluZy1lZGl0b3JfX2NvbnRlbnRcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2Yy1zdHJpbmctZWRpdG9yX19ib3JkZXJcIlxuICAgICAgICAgICAgb25DbGljaz17dGhpcy5lZGl0fVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxTdmdJY29uXG4gICAgICAgICAgICAgIGNsYXNzTmFtZT1cInN2Yy1zdHJpbmctZWRpdG9yX19idXR0b24gc3ZjLXN0cmluZy1lZGl0b3JfX2J1dHRvbi0tZWRpdFwiXG4gICAgICAgICAgICAgIHNpemU9ezE2fVxuICAgICAgICAgICAgICBpY29uTmFtZT17XCJpY29uLWVkaXRcIn1cbiAgICAgICAgICAgID48L1N2Z0ljb24+XG5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICB7Y29udHJvbH1cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2Yy1zdHJpbmctZWRpdG9yX19jb250cm9sc1wiXG4gICAgICAgICAgICBvbkNsaWNrPXt0aGlzLmVkaXR9PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L3NwYW4+XG4gICAgICAgIHt0aGlzLmVycm9yVGV4dCA/IDxzcGFuIGNsYXNzTmFtZT1cInN2Yy1zdHJpbmctZWRpdG9yX19lcnJvclwiPnt0aGlzLmVycm9yVGV4dH08L3NwYW4+IDogXCJcIn1cbiAgICAgIDwvc3Bhbj5cbiAgICApO1xuICB9XG59XG5cblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFxuICBlZGl0YWJsZVN0cmluZ1JlbmRlcmVyTmFtZSxcbiAgKHByb3BzKSA9PiB7XG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3VydmV5TG9jU3RyaW5nRWRpdG9yLCBwcm9wcyk7XG4gIH1cbik7XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgUmVhY3RET00gZnJvbSBcInJlYWN0LWRvbVwiO1xuXG5pbXBvcnQge1xuICBCYXNlLFxuICBRdWVzdGlvbixcbiAgU3VydmV5RXJyb3IsXG4gIFN1cnZleU1vZGVsXG59IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHtcbiAgU3VydmV5QWN0aW9uQmFyLFxuICBSZWFjdEVsZW1lbnRGYWN0b3J5LFxuICBSZWFjdFF1ZXN0aW9uRmFjdG9yeSxcbiAgU3VydmV5RWxlbWVudEJhc2UsXG4gIFN1cnZleUxvY1N0cmluZ1ZpZXdlcixcbiAgU3VydmV5XG59IGZyb20gXCJzdXJ2ZXktcmVhY3QtdWlcIjtcbmltcG9ydCB7XG4gIElDcmVhdG9yT3B0aW9ucyxcbiAgQ3JlYXRvckJhc2UsXG4gIElUYWJiZWRNZW51SXRlbVxufSBmcm9tIFwic3VydmV5LWNyZWF0b3ItY29yZVwiO1xuaW1wb3J0IHsgVGFiYmVkTWVudUNvbXBvbmVudCB9IGZyb20gXCIuL1RhYmJlZE1lbnVcIjtcbmltcG9ydCB7IE5vdGlmaWVyQ29tcG9uZW50IH0gZnJvbSBcIi4vTm90aWZpZXJcIjtcbmltcG9ydCB7IFN2Z0J1bmRsZUNvbXBvbmVudCB9IGZyb20gXCIuL1N2Z0J1bmRsZVwiO1xuXG5pbnRlcmZhY2UgSVN1cnZleUNyZWF0b3JDb21wb25lbnRQcm9wcyB7XG4gIGNyZWF0b3I6IFN1cnZleUNyZWF0b3I7XG4gIHN0eWxlPzogYW55O1xufVxuXG5leHBvcnQgY2xhc3MgU3VydmV5Q3JlYXRvckNvbXBvbmVudCBleHRlbmRzIFN1cnZleUVsZW1lbnRCYXNlPFxuICBJU3VydmV5Q3JlYXRvckNvbXBvbmVudFByb3BzLFxuICBhbnlcbj4ge1xuICBjb25zdHJ1Y3Rvcihwcm9wczogSVN1cnZleUNyZWF0b3JDb21wb25lbnRQcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLnJvb3ROb2RlID0gUmVhY3QuY3JlYXRlUmVmKCk7XG4gIH1cbiAgZ2V0IGNyZWF0b3IoKTogQ3JlYXRvckJhc2Uge1xuICAgIHJldHVybiB0aGlzLnByb3BzLmNyZWF0b3I7XG4gIH1cbiAgcHJvdGVjdGVkIGdldFN0YXRlRWxlbWVudCgpOiBCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5jcmVhdG9yO1xuICB9XG4gIGdldCBzdHlsZSgpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLnByb3BzLnN0eWxlO1xuICB9XG4gIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIHN1cGVyLmNvbXBvbmVudERpZE1vdW50KCk7XG4gICAgdGhpcy5jcmVhdG9yLmluaXRLZXlib2FyZFNob3J0Y3V0cyh0aGlzLnJvb3ROb2RlLmN1cnJlbnQpO1xuICAgIHRoaXMuY3JlYXRvci5pbml0UmVzcG9uc2l2aXR5TWFuYWdlcih0aGlzLnJvb3ROb2RlLmN1cnJlbnQpO1xuICB9XG4gIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgIHN1cGVyLmNvbXBvbmVudFdpbGxVbm1vdW50KCk7XG4gICAgdGhpcy5jcmVhdG9yLnJlbW92ZUtleWJvYXJkU2hvcnRjdXRzKHRoaXMucm9vdE5vZGUuY3VycmVudCk7XG4gICAgdGhpcy5jcmVhdG9yLnJlc2V0UmVzcG9uc2l2aXR5TWFuYWdlcigpO1xuICB9XG4gIHByaXZhdGUgcm9vdE5vZGU6IFJlYWN0LlJlZk9iamVjdDxIVE1MRGl2RWxlbWVudD47XG5cbiAgcmVuZGVyRWxlbWVudCgpIHtcbiAgICBjb25zdCBjcmVhdG9yOiBDcmVhdG9yQmFzZSA9IHRoaXMucHJvcHMuY3JlYXRvcjtcbiAgICBpZiAoY3JlYXRvci5pc0NyZWF0b3JEaXNwb3NlZCkgcmV0dXJuIG51bGw7XG4gICAgY29uc3QgY3JlYXRvckNsYXNzTmFtZSA9IFwic3ZjLWNyZWF0b3JcIiArICh0aGlzLnByb3BzLmNyZWF0b3IuaXNNb2JpbGVWaWV3ID8gXCIgc3ZjLWNyZWF0b3ItLW1vYmlsZVwiIDogXCJcIik7XG4gICAgY29uc3QgYXJlYUNsYXNzTmFtZSA9IFwic3ZjLWZ1bGwtY29udGFpbmVyIHN2Yy1jcmVhdG9yX19hcmVhIHN2Yy1mbGV4LWNvbHVtblwiICsgKHRoaXMucHJvcHMuY3JlYXRvci5oYXZlQ29tbWVyY2lhbExpY2Vuc2UgPyBcIlwiIDogXCIgc3ZjLWNyZWF0b3JfX2FyZWEtLXdpdGgtYmFubmVyXCIpO1xuICAgIGNvbnN0IGNvbnRlbnRXcmFwcGVyQ2xhc3NOYW1lID0gXCJzdmMtY3JlYXRvcl9fY29udGVudC13cmFwcGVyIHN2Yy1mbGV4LXJvd1wiICsgKHRoaXMucHJvcHMuY3JlYXRvci5pc01vYmlsZVZpZXcgPyBcIiBzdmMtY3JlYXRvcl9fY29udGVudC13cmFwcGVyLS1mb290ZXItdG9vbGJhclwiIDogXCJcIik7XG4gICAgY29uc3QgZnVsbENvbnRhaW5lckNsYXNzTmFtZSA9IFwic3ZjLWZsZXgtcm93IHN2Yy1mdWxsLWNvbnRhaW5lclwiICsgKFwiIHN2Yy1jcmVhdG9yX19zaWRlLWJhci0tXCIgKyB0aGlzLmNyZWF0b3Iuc2lkZWJhckxvY2F0aW9uKTtcbiAgICBsZXQgbGljZW5zZUJhbm5lciA9IG51bGw7XG4gICAgaWYgKCF0aGlzLnByb3BzLmNyZWF0b3IuaGF2ZUNvbW1lcmNpYWxMaWNlbnNlKSB7XG4gICAgICBsaWNlbnNlQmFubmVyID0gKFxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2Yy1jcmVhdG9yX19iYW5uZXJcIj5cbiAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJzdmMtY3JlYXRvcl9fbm9uLWNvbW1lcmNpYWwtdGV4dFwiPlxuICAgICAgICAgICAgPGEgaHJlZj1cImh0dHBzOi8vc3VydmV5anMuaW8vYnV5XCI+XG4gICAgICAgICAgICAgIHt0aGlzLnByb3BzLmNyZWF0b3IubGljZW5zZVRleHR9XG4gICAgICAgICAgICA8L2E+XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICk7XG4gICAgfVxuICAgIC8vQU06IHdpZHRoIHVucmVjb2duaXplZCBieSByZWFjdFxuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT17Y3JlYXRvckNsYXNzTmFtZX0gcmVmPXt0aGlzLnJvb3ROb2RlfSBzdHlsZT17dGhpcy5zdHlsZX0+XG4gICAgICAgIDxTdmdCdW5kbGVDb21wb25lbnQ+PC9TdmdCdW5kbGVDb21wb25lbnQ+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXthcmVhQ2xhc3NOYW1lfT5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17ZnVsbENvbnRhaW5lckNsYXNzTmFtZX0+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2Yy1mbGV4LWNvbHVtbiBzdmMtZmxleC1yb3dfX2VsZW1lbnQgc3ZjLWZsZXgtcm93X19lbGVtZW50LS1ncm93aW5nXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3ZjLXRvcC1iYXJcIj5cbiAgICAgICAgICAgICAgICB7KGNyZWF0b3Iuc2hvd1RhYnMgP1xuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmMtdGFiYmVkLW1lbnUtd3JhcHBlclwiPlxuICAgICAgICAgICAgICAgICAgICA8VGFiYmVkTWVudUNvbXBvbmVudCBtb2RlbD17Y3JlYXRvci50YWJiZWRNZW51fT48L1RhYmJlZE1lbnVDb21wb25lbnQ+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj4gOiBudWxsKX1cbiAgICAgICAgICAgICAgICB7KGNyZWF0b3Iuc2hvd1Rvb2xiYXIgP1xuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmMtdG9vbGJhci13cmFwcGVyXCI+XG4gICAgICAgICAgICAgICAgICAgIDxTdXJ2ZXlBY3Rpb25CYXIgbW9kZWw9e2NyZWF0b3IudG9vbGJhcn0+PC9TdXJ2ZXlBY3Rpb25CYXI+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDogbnVsbCl9XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17Y29udGVudFdyYXBwZXJDbGFzc05hbWV9PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3ZjLWNyZWF0b3JfX2NvbnRlbnQtaG9sZGVyIHN2Yy1mbGV4LWNvbHVtblwiPlxuICAgICAgICAgICAgICAgICAge3RoaXMucmVuZGVyQWN0aXZlVGFiKCl9XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2Yy1mb290ZXItYmFyXCI+XG4gICAgICAgICAgICAgICAgeyhjcmVhdG9yLmlzTW9iaWxlVmlldyA/XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2Yy10b29sYmFyLXdyYXBwZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgPFN1cnZleUFjdGlvbkJhciBtb2RlbD17Y3JlYXRvci5mb290ZXJUb29sYmFyfT48L1N1cnZleUFjdGlvbkJhcj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgOiBudWxsKX1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIHt0aGlzLnJlbmRlclNpZGViYXIoKX1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICB7bGljZW5zZUJhbm5lcn1cbiAgICAgICAgICA8Tm90aWZpZXJDb21wb25lbnRcbiAgICAgICAgICAgIGNyZWF0b3I9e2NyZWF0b3J9XG4gICAgICAgICAgICBub3RpZmllcj17Y3JlYXRvci5ub3RpZmllcn1cbiAgICAgICAgICA+PC9Ob3RpZmllckNvbXBvbmVudD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG4gIHJlbmRlckFjdGl2ZVRhYigpIHtcbiAgICBjb25zdCBjcmVhdG9yOiBDcmVhdG9yQmFzZSA9IHRoaXMucHJvcHMuY3JlYXRvcjtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNyZWF0b3IudGFicy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKGNyZWF0b3IudGFic1tpXS5pZCA9PT0gY3JlYXRvci5hY3RpdmVUYWIpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVuZGVyQ3JlYXRvclRhYihjcmVhdG9yLnRhYnNbaV0pO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICByZW5kZXJDcmVhdG9yVGFiKHRhYjogSVRhYmJlZE1lbnVJdGVtKSB7XG4gICAgaWYgKHRhYi52aXNpYmxlID09PSBmYWxzZSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGNvbnN0IGNyZWF0b3I6IENyZWF0b3JCYXNlID0gdGhpcy5wcm9wcy5jcmVhdG9yO1xuICAgIGNvbnN0IGNvbXBvbmVudCA9ICEhdGFiLnJlbmRlclRhYlxuICAgICAgPyB0YWIucmVuZGVyVGFiKClcbiAgICAgIDogUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5jcmVhdGVFbGVtZW50KHRhYi5jb21wb25lbnRDb250ZW50LCB7XG4gICAgICAgIGNyZWF0b3I6IGNyZWF0b3IsXG4gICAgICAgIHN1cnZleTogY3JlYXRvci5zdXJ2ZXksXG4gICAgICAgIGRhdGE6IHRhYi5kYXRhLm1vZGVsXG4gICAgICB9KTtcbiAgICBjb25zdCBjbGFzc05hbWUgPSBcInN2Yy1jcmVhdG9yLXRhYlwiICsgKGNyZWF0b3IudG9vbGJveExvY2F0aW9uID09IFwicmlnaHRcIiA/IFwiIHN2Yy1jcmVhdG9yX190b29sYm94LS1yaWdodFwiIDogXCJcIik7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXZcbiAgICAgICAga2V5PXt0YWIuaWR9XG4gICAgICAgIGlkPXtcInNjcm9sbGFibGVEaXYtXCIgKyB0YWIuaWR9XG4gICAgICAgIGNsYXNzTmFtZT17Y2xhc3NOYW1lfVxuICAgICAgPlxuICAgICAgICB7Y29tcG9uZW50fVxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxuICByZW5kZXJTaWRlYmFyKCkge1xuICAgIGlmICghIXRoaXMuY3JlYXRvci5zaWRlYmFyKSB7XG4gICAgICBjb25zdCBjbGFzc05hbWUgPSB0aGlzLmNyZWF0b3IuaXNNb2JpbGVWaWV3ID8gXCJzdi1tb2JpbGUtc2lkZS1iYXJcIiA6IFwiXCI7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17Y2xhc3NOYW1lfT5cbiAgICAgICAgICB7UmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5jcmVhdGVFbGVtZW50KFwic3ZjLXNpZGUtYmFyXCIsIHsgbW9kZWw6IHRoaXMuY3JlYXRvci5zaWRlYmFyIH0pfVxuICAgICAgICA8L2Rpdj4pO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFN1cnZleUNyZWF0b3IgZXh0ZW5kcyBDcmVhdG9yQmFzZSB7XG4gIGNvbnN0cnVjdG9yKG9wdGlvbnM6IElDcmVhdG9yT3B0aW9ucyA9IHt9LCBvcHRpb25zMj86IElDcmVhdG9yT3B0aW9ucykge1xuICAgIHN1cGVyKG9wdGlvbnMsIG9wdGlvbnMyKTtcbiAgfVxuICBwdWJsaWMgcmVuZGVyKHRhcmdldDogc3RyaW5nIHwgSFRNTEVsZW1lbnQpIHtcbiAgICBsZXQgbm9kZTogSFRNTEVsZW1lbnQgPSB0YXJnZXQgYXMgSFRNTEVsZW1lbnQ7XG4gICAgaWYgKHR5cGVvZiB0YXJnZXQgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgIG5vZGUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0YXJnZXQpO1xuICAgIH1cbiAgICBSZWFjdERPTS51bm1vdW50Q29tcG9uZW50QXROb2RlKG5vZGUpO1xuICAgIFJlYWN0RE9NLnJlbmRlcihcbiAgICAgIDxSZWFjdC5TdHJpY3RNb2RlPlxuICAgICAgICA8U3VydmV5Q3JlYXRvckNvbXBvbmVudCBjcmVhdG9yPXt0aGlzfSAvPlxuICAgICAgPC9SZWFjdC5TdHJpY3RNb2RlPixcbiAgICAgIG5vZGVcbiAgICApO1xuICB9XG5cbiAgLy9JU3VydmV5Q3JlYXRvclxuICBwdWJsaWMgY3JlYXRlUXVlc3Rpb25FbGVtZW50KHF1ZXN0aW9uOiBRdWVzdGlvbik6IEpTWC5FbGVtZW50IHtcbiAgICByZXR1cm4gUmVhY3RRdWVzdGlvbkZhY3RvcnkuSW5zdGFuY2UuY3JlYXRlUXVlc3Rpb24oXG4gICAgICBxdWVzdGlvbi5pc0RlZmF1bHRSZW5kZXJpbmcoKVxuICAgICAgICA/IHF1ZXN0aW9uLmdldFRlbXBsYXRlKClcbiAgICAgICAgOiBxdWVzdGlvbi5nZXRDb21wb25lbnROYW1lKCksXG4gICAgICB7XG4gICAgICAgIHF1ZXN0aW9uOiBxdWVzdGlvbixcbiAgICAgICAgaXNEaXNwbGF5TW9kZTogcXVlc3Rpb24uaXNSZWFkT25seSxcbiAgICAgICAgY3JlYXRvcjogdGhpc1xuICAgICAgfVxuICAgICk7XG4gIH1cbiAgcHVibGljIHJlbmRlckVycm9yKFxuICAgIGtleTogc3RyaW5nLFxuICAgIGVycm9yOiBTdXJ2ZXlFcnJvcixcbiAgICBjc3NDbGFzc2VzOiBhbnlcbiAgKTogSlNYLkVsZW1lbnQge1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGtleT17a2V5fT5cbiAgICAgICAgPHNwYW4gY2xhc3NOYW1lPXtjc3NDbGFzc2VzLmVycm9yLmljb259IGFyaWEtaGlkZGVuPVwidHJ1ZVwiIC8+XG4gICAgICAgIDxzcGFuIGNsYXNzTmFtZT17Y3NzQ2xhc3Nlcy5lcnJvci5pdGVtfT5cbiAgICAgICAgICA8U3VydmV5TG9jU3RyaW5nVmlld2VyIGxvY1N0cj17ZXJyb3IubG9jVGV4dH0gLz5cbiAgICAgICAgPC9zcGFuPlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxuICBwdWJsaWMgcXVlc3Rpb25UaXRsZUxvY2F0aW9uKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuc3VydmV5LnF1ZXN0aW9uVGl0bGVMb2NhdGlvbjtcbiAgfVxuICBwdWJsaWMgcXVlc3Rpb25FcnJvckxvY2F0aW9uKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuc3VydmV5LnF1ZXN0aW9uRXJyb3JMb2NhdGlvbjtcbiAgfVxufVxuXG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcInN1cnZleS13aWRnZXRcIiwgKHByb3BzKSA9PiB7XG4gIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFN1cnZleSwgcHJvcHMpO1xufSk7XG4iLCJcbmltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFN2Z1JlZ2lzdHJ5IH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBzdmdCdW5kbGUgfSBmcm9tIFwic3VydmV5LWNyZWF0b3ItY29yZVwiO1xuaW1wb3J0IHsgUmVhY3RFbGVtZW50RmFjdG9yeSB9IGZyb20gXCJzdXJ2ZXktcmVhY3QtdWlcIjtcblxuZXhwb3J0IGNsYXNzIFN2Z0J1bmRsZUNvbXBvbmVudCBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG4gIHByaXZhdGUgY29udGFpbmVyUmVmOiBSZWFjdC5SZWZPYmplY3Q8U1ZHU1ZHRWxlbWVudD47XG5cbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLmNvbnRhaW5lclJlZiA9IFJlYWN0LmNyZWF0ZVJlZigpO1xuICB9XG4gIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIGlmICghIXRoaXMuY29udGFpbmVyUmVmLmN1cnJlbnQpIHtcbiAgICAgIHRoaXMuY29udGFpbmVyUmVmLmN1cnJlbnQuaW5uZXJIVE1MID0gU3ZnUmVnaXN0cnkuaWNvbnNSZW5kZXJlZEh0bWwoKTtcbiAgICB9XG4gIH1cbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IHN2Z1N0eWxlID0ge1xuICAgICAgZGlzcGxheTogXCJub25lXCJcbiAgICB9O1xuICAgIHJldHVybiA8c3ZnIHN0eWxlPXtzdmdTdHlsZX0gaWQ9XCJzdi1pY29uLWhvbGRlci1nbG9iYWwtY29udGFpbmVyXCIgcmVmPXt0aGlzLmNvbnRhaW5lclJlZn0+PC9zdmc+O1xuICB9XG59XG5cblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFwic3ZjLXN2Zy1idW5kbGVcIiwgKHByb3BzKSA9PiB7XG4gIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFN2Z0J1bmRsZUNvbXBvbmVudCwgcHJvcHMpO1xufSk7IiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgQ1NTUHJvcGVydGllcyB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgSVRhYmJlZE1lbnVJdGVtLCBUYWJiZWRNZW51SXRlbSwgVGFiYmVkTWVudUNvbnRhaW5lciB9IGZyb20gXCJzdXJ2ZXktY3JlYXRvci1jb3JlXCI7XG5pbXBvcnQge1xuICBCYXNlLFxuICBJQWN0aW9uLFxuICBBY3Rpb24sXG4gIFJlc3BvbnNpdml0eU1hbmFnZXIsXG4gIEFkYXB0aXZlQWN0aW9uQ29udGFpbmVyXG59IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgYXR0YWNoS2V5MmNsaWNrLCBSZWFjdEVsZW1lbnRGYWN0b3J5LCBTdXJ2ZXlFbGVtZW50QmFzZSB9IGZyb20gXCJzdXJ2ZXktcmVhY3QtdWlcIjtcblxuZXhwb3J0IGludGVyZmFjZSBJVGFiYmVkTWVudUNvbXBvbmVudFByb3BzIHtcbiAgbW9kZWw6IFRhYmJlZE1lbnVDb250YWluZXI7XG59XG5cbmV4cG9ydCBjbGFzcyBUYWJiZWRNZW51Q29tcG9uZW50IGV4dGVuZHMgU3VydmV5RWxlbWVudEJhc2U8XG4gIElUYWJiZWRNZW51Q29tcG9uZW50UHJvcHMsXG4gIGFueVxuPiB7XG4gIHByaXZhdGUgbWFuYWdlcjogUmVzcG9uc2l2aXR5TWFuYWdlcjtcbiAgcHJpdmF0ZSByb290UmVmOiBSZWFjdC5SZWZPYmplY3Q8SFRNTERpdkVsZW1lbnQ+O1xuXG4gIHByaXZhdGUgZ2V0IG1vZGVsKCkge1xuICAgIHJldHVybiB0aGlzLnByb3BzLm1vZGVsO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldFN0YXRlRWxlbWVudCgpOiBCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5tb2RlbDtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMucm9vdFJlZiA9IFJlYWN0LmNyZWF0ZVJlZigpO1xuICB9XG5cbiAgcmVuZGVyRWxlbWVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgY29uc3QgaXRlbXMgPSB0aGlzLm1vZGVsLnJlbmRlcmVkQWN0aW9ucy5tYXAoKGl0ZW0pID0+IDxUYWJiZWRNZW51SXRlbVdyYXBwZXIgaXRlbT17aXRlbX0ga2V5PXtpdGVtLmlkfSAvPik7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgcmVmPXt0aGlzLnJvb3RSZWZ9IGNsYXNzTmFtZT1cInN2Yy10YWJiZWQtbWVudVwiPlxuICAgICAgICB7aXRlbXN9XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG5cbiAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgc3VwZXIuY29tcG9uZW50RGlkTW91bnQoKTtcbiAgICBjb25zdCBjb250YWluZXI6IEhUTUxEaXZFbGVtZW50ID0gdGhpcy5yb290UmVmLmN1cnJlbnQ7XG4gICAgaWYgKCFjb250YWluZXIpIHJldHVybjtcbiAgICB0aGlzLm1hbmFnZXIgPSBuZXcgUmVzcG9uc2l2aXR5TWFuYWdlcihcbiAgICAgIGNvbnRhaW5lcixcbiAgICAgIHRoaXMubW9kZWwsXG4gICAgICBcIi5zdmMtdGFiYmVkLW1lbnUtaXRlbS1jb250YWluZXI6bm90KC5zdi1kb3RzKT4uc3YtYWN0aW9uX19jb250ZW50XCJcbiAgICApO1xuICB9XG4gIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgIHRoaXMubWFuYWdlciAmJiAodGhpcy5tYW5hZ2VyLmRpc3Bvc2UoKSk7XG4gICAgc3VwZXIuY29tcG9uZW50V2lsbFVubW91bnQoKTtcbiAgfVxufVxuXG5jbGFzcyBUYWJiZWRNZW51SXRlbVdyYXBwZXIgZXh0ZW5kcyBTdXJ2ZXlFbGVtZW50QmFzZTxcbiAgYW55LFxuICBhbnlcbj4ge1xuXG4gIHByaXZhdGUgZ2V0IGl0ZW0oKSB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuaXRlbTtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRTdGF0ZUVsZW1lbnQoKTogQmFzZSB7XG4gICAgcmV0dXJuIHRoaXMuaXRlbTtcbiAgfVxuXG4gIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIGxldCBjc3M6IHN0cmluZyA9IFwic3ZjLXRhYmJlZC1tZW51LWl0ZW0tY29udGFpbmVyXCI7XG4gICAgaWYgKHRoaXMuaXRlbS5jc3MpIHtcbiAgICAgIGNzcyArPSBcIiBcIiArIHRoaXMuaXRlbS5jc3M7XG4gICAgfVxuICAgIGNzcyArPSAoIXRoaXMuaXRlbS5pc1Zpc2libGUgPyBcIiBzdi1hY3Rpb24tLWhpZGRlblwiIDogXCJcIik7XG5cbiAgICBjb25zdCBjb21wb25lbnQgPSBSZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLmNyZWF0ZUVsZW1lbnQoXG4gICAgICB0aGlzLml0ZW0uY29tcG9uZW50IHx8IFwic3ZjLXRhYmJlZC1tZW51LWl0ZW1cIixcbiAgICAgIHsgaXRlbTogdGhpcy5pdGVtIH1cbiAgICApO1xuXG4gICAgcmV0dXJuIChcbiAgICAgIDxzcGFuIGtleT17dGhpcy5pdGVtLmlkfSBjbGFzc05hbWU9e2Nzc30+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3YtYWN0aW9uX19jb250ZW50XCI+XG4gICAgICAgICAge2NvbXBvbmVudH1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L3NwYW4+XG4gICAgKTtcbiAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIElUYWJiZWRNZW51SXRlbUNvbXBvbmVudFByb3BzIHtcbiAgaXRlbTogQWN0aW9uO1xufVxuZXhwb3J0IGNsYXNzIFRhYmJlZE1lbnVJdGVtQ29tcG9uZW50IGV4dGVuZHMgU3VydmV5RWxlbWVudEJhc2U8XG4gIElUYWJiZWRNZW51SXRlbUNvbXBvbmVudFByb3BzLFxuICBhbnlcbj4ge1xuICBnZXQgaXRlbSgpOiBBY3Rpb24ge1xuICAgIHJldHVybiB0aGlzLnByb3BzLml0ZW07XG4gIH1cbiAgcHJvdGVjdGVkIGdldFN0YXRlRWxlbWVudCgpOiBCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5pdGVtO1xuICB9XG5cbiAgcmVuZGVyKCk6IEpTWC5FbGVtZW50IHtcbiAgICBjb25zdCBpdGVtID0gdGhpcy5pdGVtO1xuICAgIGxldCBjbGFzc05hbWU6IHN0cmluZyA9IFwic3ZjLXRhYmJlZC1tZW51LWl0ZW1cIjtcbiAgICBpZiAoaXRlbS5hY3RpdmUpIGNsYXNzTmFtZSArPSBcIiBzdmMtdGFiYmVkLW1lbnUtaXRlbS0tc2VsZWN0ZWRcIjtcbiAgICBpZiAoaXRlbS5lbmFibGVkICE9PSB1bmRlZmluZWQgJiYgIWl0ZW0uZW5hYmxlZClcbiAgICAgIGNsYXNzTmFtZSArPSBcIiBzdmMtdGFiYmVkLW1lbnUtaXRlbS0tZGlzYWJsZWRcIjtcbiAgICBsZXQgdGl0bGVDbGFzc05hbWU6IHN0cmluZyA9XG4gICAgICBcInN2Yy10ZXh0IHN2Yy10YWJiZWQtbWVudS1pdGVtX190ZXh0IHN2Yy10ZXh0LS1ub3JtYWxcIjtcbiAgICBpZiAoaXRlbS5hY3RpdmUpIHRpdGxlQ2xhc3NOYW1lICs9IFwiIHN2Yy10ZXh0LS1ib2xkXCI7XG5cbiAgICByZXR1cm4gKGF0dGFjaEtleTJjbGljayhcbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtjbGFzc05hbWV9IG9uQ2xpY2s9eygpID0+IGl0ZW0uYWN0aW9uKGl0ZW0pfT5cbiAgICAgICAgPHNwYW4gY2xhc3NOYW1lPXt0aXRsZUNsYXNzTmFtZX0+e2l0ZW0udGl0bGV9PC9zcGFuPlxuICAgICAgPC9kaXY+XG4gICAgKVxuICAgICk7XG4gIH1cbn1cblxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXG4gIFwic3ZjLXRhYmJlZC1tZW51LWl0ZW1cIixcbiAgKHByb3BzKSA9PiB7XG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoVGFiYmVkTWVudUl0ZW1Db21wb25lbnQsIHByb3BzKTtcbiAgfVxuKTtcbmV4cG9ydCBkZWZhdWx0IFRhYmJlZE1lbnVDb21wb25lbnQ7XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBCYXNlLCBRdWVzdGlvbiB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHtcbiAgYXR0YWNoS2V5MmNsaWNrLFxuICBSZWFjdEVsZW1lbnRGYWN0b3J5XG59IGZyb20gXCJzdXJ2ZXktcmVhY3QtdWlcIjtcbmltcG9ydCB7IENyZWF0b3JNb2RlbEVsZW1lbnQgfSBmcm9tIFwiLi4vTW9kZWxFbGVtZW50XCI7XG5pbXBvcnQgeyBRdWVzdGlvbkFkb3JuZXJWaWV3TW9kZWwsIHRvZ2dsZUhvdmVyZWQgfSBmcm9tIFwic3VydmV5LWNyZWF0b3ItY29yZVwiO1xuaW1wb3J0IHsgUmVhY3REcmFnRXZlbnQsIFJlYWN0TW91c2VFdmVudCB9IGZyb20gXCIuLi9ldmVudHNcIjtcbmltcG9ydCB7IFF1ZXN0aW9uQWRvcm5lckNvbXBvbmVudFByb3BzIH0gZnJvbSBcIi4vUXVlc3Rpb25cIjtcblxuZXhwb3J0IGNsYXNzIENlbGxRdWVzdGlvbkFkb3JuZXJDb21wb25lbnQgZXh0ZW5kcyBDcmVhdG9yTW9kZWxFbGVtZW50PFxuICBRdWVzdGlvbkFkb3JuZXJDb21wb25lbnRQcm9wcyxcbiAgYW55XG4+IHtcbiAgbW9kZWw6IFF1ZXN0aW9uQWRvcm5lclZpZXdNb2RlbDtcbiAgcHJvdGVjdGVkIGNyZWF0ZU1vZGVsKCk6IHZvaWQge1xuICAgIHRoaXMubW9kZWwgPSBuZXcgUXVlc3Rpb25BZG9ybmVyVmlld01vZGVsKFxuICAgICAgdGhpcy5wcm9wcy5jb21wb25lbnREYXRhLFxuICAgICAgdGhpcy5wcm9wcy5xdWVzdGlvbixcbiAgICAgIG51bGxcbiAgICApO1xuICB9XG4gIHByb3RlY3RlZCBnZXRTdGF0ZUVsZW1lbnQoKTogQmFzZSB7XG4gICAgcmV0dXJuIHRoaXMubW9kZWw7XG4gIH1cbiAgcHJvdGVjdGVkIGdldFVwZGF0ZWRNb2RlbFByb3BzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gW1wicXVlc3Rpb25cIiwgXCJjb21wb25lbnREYXRhXCJdO1xuICB9XG4gIHJlbmRlcigpOiBKU1guRWxlbWVudCB7XG4gICAgaWYgKHRoaXMubW9kZWwuaXNEcmFnZ2VkKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gKFxuICAgICAgPFJlYWN0LkZyYWdtZW50PlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgZGF0YS1zdi1kcm9wLXRhcmdldC1zdXJ2ZXktZWxlbWVudD17dGhpcy5tb2RlbC5lbGVtZW50Lm5hbWV9XG4gICAgICAgICAgY2xhc3NOYW1lPXtcInN2Yy1xdWVzdGlvbl9fYWRvcm5lclwifVxuICAgICAgICA+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e1wiIHN2Yy1xdWVzdGlvbl9fY29udGVudC0tc2VsZWN0ZWQtbm8tYm9yZGVyIHN2Yy1xdWVzdGlvbl9fY29udGVudFwifT5cbiAgICAgICAgICAgIHt0aGlzLnByb3BzLmVsZW1lbnR9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9SZWFjdC5GcmFnbWVudD5cbiAgICApO1xuICB9XG59XG5cblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFxuICBcInN2Yy1jZWxsLXF1ZXN0aW9uXCIsXG4gIChwcm9wczogUXVlc3Rpb25BZG9ybmVyQ29tcG9uZW50UHJvcHMpID0+IHtcbiAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChDZWxsUXVlc3Rpb25BZG9ybmVyQ29tcG9uZW50LCBwcm9wcyk7XG4gIH1cbik7XG4iLCJpbXBvcnQgeyBRdWVzdGlvbkFkb3JuZXJWaWV3TW9kZWwsIHRvZ2dsZUhvdmVyZWQgfSBmcm9tIFwic3VydmV5LWNyZWF0b3ItY29yZVwiO1xuaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgUmVhY3REcmFnRXZlbnQsIFJlYWN0TW91c2VFdmVudCB9IGZyb20gXCIuLi9ldmVudHNcIjtcbmltcG9ydCB7IEJhc2UsIEl0ZW1WYWx1ZSwgUXVlc3Rpb25TZWxlY3RCYXNlLCBTdXJ2ZXlNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgUmVhY3RFbGVtZW50RmFjdG9yeSwgUmVhY3RTdXJ2ZXlFbGVtZW50c1dyYXBwZXIgfSBmcm9tIFwic3VydmV5LXJlYWN0LXVpXCI7XG5pbXBvcnQgeyBRdWVzdGlvbkFkb3JuZXJDb21wb25lbnRQcm9wcyB9IGZyb20gXCIuL1F1ZXN0aW9uXCI7XG5pbXBvcnQgeyBDcmVhdG9yTW9kZWxFbGVtZW50IH0gZnJvbSBcIi4uL01vZGVsRWxlbWVudFwiO1xuaW1wb3J0IHsgYXR0YWNoS2V5MmNsaWNrIH0gZnJvbSBcInN1cnZleS1yZWFjdC11aVwiO1xuXG5leHBvcnQgY2xhc3MgQ2VsbFF1ZXN0aW9uRHJvcGRvd25BZG9ybmVyQ29tcG9uZW50IGV4dGVuZHMgQ3JlYXRvck1vZGVsRWxlbWVudDxcbiAgUXVlc3Rpb25BZG9ybmVyQ29tcG9uZW50UHJvcHMsXG4gIGFueVxuPiB7XG4gIG1vZGVsOiBRdWVzdGlvbkFkb3JuZXJWaWV3TW9kZWw7XG4gIHByb3RlY3RlZCBjcmVhdGVNb2RlbCgpOiB2b2lkIHtcbiAgICB0aGlzLm1vZGVsID0gbmV3IFF1ZXN0aW9uQWRvcm5lclZpZXdNb2RlbChcbiAgICAgIHRoaXMucHJvcHMuY29tcG9uZW50RGF0YSxcbiAgICAgIHRoaXMucHJvcHMucXVlc3Rpb24sXG4gICAgICBudWxsXG4gICAgKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0VXBkYXRlZE1vZGVsUHJvcHMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBbXCJxdWVzdGlvblwiLCBcImNvbXBvbmVudERhdGFcIl07XG4gIH1cbiAgcHJvdGVjdGVkIGdldFN0YXRlRWxlbWVudCgpOiBCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5tb2RlbDtcbiAgfVxuICByZW5kZXIoKTogSlNYLkVsZW1lbnQge1xuICAgIGlmICh0aGlzLm1vZGVsLmlzRHJhZ2dlZCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGNvbnN0IHF1ZXN0aW9uID0gdGhpcy5wcm9wcy5xdWVzdGlvbiBhcyBRdWVzdGlvblNlbGVjdEJhc2U7XG4gICAgY29uc3QgdGV4dFN0eWxlID0gKHRoaXMucHJvcHMucXVlc3Rpb24gYXMgYW55KS50ZXh0U3R5bGU7XG4gICAgcmV0dXJuIChcbiAgICAgIDxSZWFjdC5GcmFnbWVudD5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGRhdGEtc3YtZHJvcC10YXJnZXQtc3VydmV5LWVsZW1lbnQ9e3RoaXMubW9kZWwuZWxlbWVudC5uYW1lfVxuICAgICAgICAgIGNsYXNzTmFtZT17XCJzdmMtcXVlc3Rpb25fX2Fkb3JuZXJcIn1cbiAgICAgICAgPlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtcIiBzdmMtcXVlc3Rpb25fX2NvbnRlbnQtLXNlbGVjdGVkLW5vLWJvcmRlciBzdmMtcXVlc3Rpb25fX2NvbnRlbnRcIn0+XG4gICAgICAgICAgICB7dGhpcy5wcm9wcy5lbGVtZW50fVxuXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2Yy1xdWVzdGlvbl9fZHJvcGRvd24tY2hvaWNlc1wiPlxuICAgICAgICAgICAgICB7cXVlc3Rpb24udmlzaWJsZUNob2ljZXMubWFwKFxuICAgICAgICAgICAgICAgIChpdGVtOiBJdGVtVmFsdWUsIGluZGV4OiBudW1iZXIpID0+IChcbiAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwic3ZjLXF1ZXN0aW9uX19kcm9wZG93bi1jaG9pY2VcIlxuICAgICAgICAgICAgICAgICAgICBrZXk9e2BlZGl0YWJsZV9jaG9pY2VfJHtpbmRleH1gfVxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICB7UmVhY3RTdXJ2ZXlFbGVtZW50c1dyYXBwZXIud3JhcEl0ZW1WYWx1ZShxdWVzdGlvbi5zdXJ2ZXkgYXMgU3VydmV5TW9kZWwsXG4gICAgICAgICAgICAgICAgICAgICAgUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5jcmVhdGVFbGVtZW50KFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJzdXJ2ZXktcmFkaW9ncm91cC1pdGVtXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXN0aW9uOiBxdWVzdGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY3NzQ2xhc3NlczogcXVlc3Rpb24uY3NzQ2xhc3NlcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaXNEaXNwbGF5TW9kZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbTogaXRlbSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dFN0eWxlOiB0ZXh0U3R5bGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4OiBpbmRleCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaXNDaGVja2VkOiBxdWVzdGlvbi52YWx1ZSA9PT0gaXRlbS52YWx1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgcXVlc3Rpb24sXG4gICAgICAgICAgICAgICAgICAgICAgaXRlbVxuICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9SZWFjdC5GcmFnbWVudD5cbiAgICApO1xuICB9XG59XG5cblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFxuICBcInN2Yy1jZWxsLWRyb3Bkb3duLXF1ZXN0aW9uXCIsXG4gIChwcm9wczogUXVlc3Rpb25BZG9ybmVyQ29tcG9uZW50UHJvcHMpID0+IHtcbiAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChDZWxsUXVlc3Rpb25Ecm9wZG93bkFkb3JuZXJDb21wb25lbnQsIHByb3BzKTtcbiAgfVxuKTtcbiIsImltcG9ydCB7IEJhc2UsIFBhZ2VNb2RlbCwgU3VydmV5TW9kZWwgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7XG4gIGF0dGFjaEtleTJjbGljayxcbiAgUG9wdXAsXG4gIFN1cnZleUFjdGlvbkJhcixcbiAgUmVhY3RFbGVtZW50RmFjdG9yeSxcbiAgU3VydmV5UGFnZSxcbiAgU3ZnSWNvblxufSBmcm9tIFwic3VydmV5LXJlYWN0LXVpXCI7XG5pbXBvcnQgeyBDcmVhdG9yTW9kZWxFbGVtZW50IH0gZnJvbSBcIi4uL01vZGVsRWxlbWVudFwiO1xuaW1wb3J0IHtcbiAgQ3JlYXRvckJhc2UsXG4gIFBhZ2VBZG9ybmVyLFxuICBTdXJ2ZXlIZWxwZXIsXG4gIHRvZ2dsZUhvdmVyZWRcbn0gZnJvbSBcInN1cnZleS1jcmVhdG9yLWNvcmVcIjtcbmltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFJlYWN0TW91c2VFdmVudCB9IGZyb20gXCIuLi9ldmVudHNcIjtcblxuaW50ZXJmYWNlIElDcmVhdG9yU3VydmV5UGFnZUNvbXBvbmVudFByb3BzIHtcbiAgY3JlYXRvcjogQ3JlYXRvckJhc2U7XG4gIHN1cnZleTogU3VydmV5TW9kZWw7XG4gIHBhZ2U6IFBhZ2VNb2RlbDtcbn1cblxuZXhwb3J0IGNsYXNzIENyZWF0b3JTdXJ2ZXlQYWdlQ29tcG9uZW50IGV4dGVuZHMgQ3JlYXRvck1vZGVsRWxlbWVudDxcbiAgSUNyZWF0b3JTdXJ2ZXlQYWdlQ29tcG9uZW50UHJvcHMsXG4gIGFueVxuPiB7XG4gIHByaXZhdGUgbW9kZWw6IFBhZ2VBZG9ybmVyO1xuICBwcml2YXRlIHJvb3RSZWY6IFJlYWN0LlJlZk9iamVjdDxIVE1MRGl2RWxlbWVudD47XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBJQ3JlYXRvclN1cnZleVBhZ2VDb21wb25lbnRQcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLnJvb3RSZWYgPSBSZWFjdC5jcmVhdGVSZWYoKTtcbiAgfVxuICBwcm90ZWN0ZWQgY3JlYXRlTW9kZWwoKTogdm9pZCB7XG4gICAgdGhpcy5tb2RlbCA9IG5ldyBQYWdlQWRvcm5lcihcbiAgICAgIHRoaXMucHJvcHMuY3JlYXRvcixcbiAgICAgIHRoaXMucHJvcHMucGFnZVxuICAgICk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldFVwZGF0ZWRNb2RlbFByb3BzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gW1wiY3JlYXRvclwiLCBcInBhZ2VcIl07XG4gIH1cbiAgcHJvdGVjdGVkIGdldFN0YXRlRWxlbWVudCgpOiBCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5tb2RlbDtcbiAgfVxuICBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICBzdXBlci5jb21wb25lbnREaWRNb3VudCgpO1xuICAgIHRoaXMubW9kZWwub25QYWdlU2VsZWN0ZWRDYWxsYmFjayA9ICgpID0+IHtcbiAgICAgIGlmICghIXRoaXMucm9vdFJlZi5jdXJyZW50KSB7XG4gICAgICAgIFN1cnZleUhlbHBlci5zY3JvbGxJbnRvVmlld0lmTmVlZGVkKHRoaXMucm9vdFJlZi5jdXJyZW50KTtcbiAgICAgIH1cbiAgICB9O1xuICB9XG4gIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgIHN1cGVyLmNvbXBvbmVudFdpbGxVbm1vdW50KCk7XG4gICAgdGhpcy5tb2RlbC5kaXNwb3NlKCk7XG4gIH1cbiAgcHJvdGVjdGVkIGNhblJlbmRlcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgISF0aGlzLm1vZGVsICYmXG4gICAgICB0aGlzLm1vZGVsLmlzUGFnZUxpdmUgJiZcbiAgICAgICEhdGhpcy5tb2RlbC5wYWdlICYmXG4gICAgICAhIXRoaXMubW9kZWwucGFnZS5zdXJ2ZXlcbiAgICApO1xuICB9XG4gIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIGlmICghdGhpcy5wcm9wcy5wYWdlKSByZXR1cm4gbnVsbDtcbiAgICByZXR1cm4gKFxuICAgICAgYXR0YWNoS2V5MmNsaWNrKDxkaXZcbiAgICAgICAgcmVmPXt0aGlzLnJvb3RSZWZ9XG4gICAgICAgIGNsYXNzTmFtZT17XCJzdmMtcGFnZV9fY29udGVudCBcIiArIHRoaXMubW9kZWwuY3NzfVxuICAgICAgICBpZD17dGhpcy5wcm9wcy5wYWdlLmlkfVxuICAgICAgICBvbkNsaWNrPXsoZSkgPT4ge1xuICAgICAgICAgIHJldHVybiB0aGlzLm1vZGVsLnNlbGVjdCh0aGlzLm1vZGVsLCBuZXcgUmVhY3RNb3VzZUV2ZW50KGUpKTtcbiAgICAgICAgfX1cbiAgICAgICAgb25Nb3VzZUxlYXZlPXsoZSkgPT4gdGhpcy5tb2RlbC5ob3ZlcihlLm5hdGl2ZUV2ZW50LCBlLmN1cnJlbnRUYXJnZXQpfVxuICAgICAgICBvbk1vdXNlT3Zlcj17KGUpID0+IHRoaXMubW9kZWwuaG92ZXIoZS5uYXRpdmVFdmVudCwgZS5jdXJyZW50VGFyZ2V0KX1cbiAgICAgID5cbiAgICAgICAge3RoaXMucmVuZGVySGVhZGVyKCl9XG4gICAgICAgIHt0aGlzLnJlbmRlckNvbnRlbnQoKX1cbiAgICAgICAge3RoaXMucmVuZGVyRm9vdGVyKCl9XG4gICAgICA8L2Rpdj4pXG4gICAgKTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyQ29udGVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgcmV0dXJuICg8U3VydmV5UGFnZSBwYWdlPXt0aGlzLnByb3BzLnBhZ2V9IHN1cnZleT17dGhpcy5wcm9wcy5zdXJ2ZXl9IGNyZWF0b3I9e3RoaXMucHJvcHMuY3JlYXRvcn0gY3NzPXt0aGlzLm1vZGVsLmNzc30+PC9TdXJ2ZXlQYWdlPik7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckhlYWRlcigpOiBKU1guRWxlbWVudCB7XG4gICAgcmV0dXJuICg8ZGl2IGNsYXNzTmFtZT1cInN2Yy1wYWdlX19jb250ZW50LWFjdGlvbnNcIj5cbiAgICAgIDxTdXJ2ZXlBY3Rpb25CYXIgbW9kZWw9e3RoaXMubW9kZWwuYWN0aW9uQ29udGFpbmVyfT48L1N1cnZleUFjdGlvbkJhcj5cbiAgICA8L2Rpdj4pO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJGb290ZXIoKTogSlNYLkVsZW1lbnQge1xuICAgIGlmICghdGhpcy5tb2RlbC5zaG93QWRkUXVlc3Rpb25CdXR0b24pIHJldHVybiBudWxsO1xuICAgIGNvbnN0IHF1ZXN0aW9uVHlwZVNlbGVjdG9yTW9kZWwgPSB0aGlzLm1vZGVsLnF1ZXN0aW9uVHlwZVNlbGVjdG9yTW9kZWw7XG4gICAgcmV0dXJuIGF0dGFjaEtleTJjbGljayg8ZGl2XG4gICAgICBjbGFzc05hbWU9XCJzdmMtcGFnZV9fYWRkLW5ldy1xdWVzdGlvbiBzdmMtYnRuXCJcbiAgICAgIG9uQ2xpY2s9eyhlKSA9PiB7XG4gICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIHRoaXMubW9kZWwuYWRkTmV3UXVlc3Rpb24odGhpcy5tb2RlbCwgbmV3IFJlYWN0TW91c2VFdmVudChlKSk7XG4gICAgICB9fVxuICAgICAgb25Nb3VzZU92ZXI9eyhlKSA9PiB0aGlzLm1vZGVsLmhvdmVyU3RvcHBlcihlLm5hdGl2ZUV2ZW50LCBlLmN1cnJlbnRUYXJnZXQpfVxuICAgID5cbiAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInN2Yy10ZXh0IHN2Yy10ZXh0LS1ub3JtYWwgc3ZjLXRleHQtLWJvbGRcIj5cbiAgICAgICAge3RoaXMubW9kZWwuYWRkTmV3UXVlc3Rpb25UZXh0fVxuICAgICAgPC9zcGFuPlxuXG4gICAgICB7YXR0YWNoS2V5MmNsaWNrKDxidXR0b25cbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIG9uQ2xpY2s9eyhlKSA9PiB7XG4gICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICBxdWVzdGlvblR5cGVTZWxlY3Rvck1vZGVsLmFjdGlvbigpO1xuICAgICAgICB9fVxuICAgICAgICBjbGFzc05hbWU9XCJzdmMtcGFnZV9fcXVlc3Rpb24tdHlwZS1zZWxlY3RvclwiXG4gICAgICAgIHRpdGxlPXt0aGlzLm1vZGVsLmFkZE5ld1F1ZXN0aW9uVGV4dH1cbiAgICAgID5cbiAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwic3ZjLXBhZ2VfX3F1ZXN0aW9uLXR5cGUtc2VsZWN0b3ItaWNvblwiPlxuICAgICAgICAgIDxTdmdJY29uXG4gICAgICAgICAgICBpY29uTmFtZT17cXVlc3Rpb25UeXBlU2VsZWN0b3JNb2RlbC5pY29uTmFtZX1cbiAgICAgICAgICAgIHNpemU9ezI0fVxuICAgICAgICAgICAgdGl0bGU9e3RoaXMubW9kZWwuYWRkTmV3UXVlc3Rpb25UZXh0fVxuICAgICAgICAgID48L1N2Z0ljb24+XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPFBvcHVwIG1vZGVsPXtxdWVzdGlvblR5cGVTZWxlY3Rvck1vZGVsLnBvcHVwTW9kZWx9PjwvUG9wdXA+XG4gICAgICA8L2J1dHRvbj4pfVxuICAgIDwvZGl2Pik7XG4gIH1cbn1cblxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXCJzdmMtcGFnZVwiLCAocHJvcHMpID0+IHtcbiAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoQ3JlYXRvclN1cnZleVBhZ2VDb21wb25lbnQsIHByb3BzKTtcbn0pO1xuIiwiaW1wb3J0IHsgUXVlc3Rpb25BZG9ybmVyVmlld01vZGVsLCB0b2dnbGVIb3ZlcmVkIH0gZnJvbSBcInN1cnZleS1jcmVhdG9yLWNvcmVcIjtcbmltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFJlYWN0RHJhZ0V2ZW50LCBSZWFjdE1vdXNlRXZlbnQgfSBmcm9tIFwiLi4vZXZlbnRzXCI7XG5pbXBvcnQgeyBCYXNlLCBRdWVzdGlvbiB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHtcbiAgU3VydmV5QWN0aW9uQmFyLFxuICBSZWFjdEVsZW1lbnRGYWN0b3J5LFxuICBTdXJ2ZXlFbGVtZW50QmFzZSxcbiAgU3VydmV5UXVlc3Rpb24sXG4gIGF0dGFjaEtleTJjbGljayxcbiAgU3ZnSWNvbixcbiAgUG9wdXBcbn0gZnJvbSBcInN1cnZleS1yZWFjdC11aVwiO1xuaW1wb3J0IHsgUXVlc3Rpb25BZG9ybmVyQ29tcG9uZW50LCBRdWVzdGlvbkFkb3JuZXJDb21wb25lbnRQcm9wcyB9IGZyb20gXCIuL1F1ZXN0aW9uXCI7XG5cbmV4cG9ydCBjbGFzcyBQYW5lbEFkb3JuZXJDb21wb25lbnQgZXh0ZW5kcyBRdWVzdGlvbkFkb3JuZXJDb21wb25lbnQge1xuICByZW5kZXJFbGVtZW50UGxhY2Vob2xkZXIoKTogSlNYLkVsZW1lbnQge1xuICAgIGlmICghdGhpcy5tb2RlbC5pc0VtcHR5RWxlbWVudCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2Yy1wYW5lbF9fcGxhY2Vob2xkZXJfZnJhbWVcIj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmMtcGFuZWxfX3BsYWNlaG9sZGVyXCI+XG4gICAgICAgICAge3RoaXMubW9kZWwucGxhY2Vob2xkZXJUZXh0fVxuICAgICAgICA8L2Rpdj5cbiAgICAgICAge3RoaXMubW9kZWwuc2hvd0FkZFF1ZXN0aW9uQnV0dG9uID8gYXR0YWNoS2V5MmNsaWNrKDxkaXZcbiAgICAgICAgICBjbGFzc05hbWU9XCJzdmMtcGFuZWxfX2FkZC1uZXctcXVlc3Rpb24gc3ZjLWFjdGlvbi1idXR0b25cIlxuICAgICAgICAgIG9uQ2xpY2s9eyhlKSA9PiB7XG4gICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgdGhpcy5tb2RlbC5hZGROZXdRdWVzdGlvbigpO1xuICAgICAgICAgIH19XG4gICAgICAgID5cbiAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJzdmMtdGV4dCBzdmMtdGV4dC0tbm9ybWFsIHN2Yy10ZXh0LS1ib2xkXCI+XG4gICAgICAgICAgICB7dGhpcy5tb2RlbC5hZGROZXdRdWVzdGlvblRleHR9XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L2Rpdj4pIDogbnVsbH1cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckZvb3RlcigpOiBKU1guRWxlbWVudCB7XG4gICAgcmV0dXJuICg8UmVhY3QuRnJhZ21lbnQ+XG4gICAgICB7IXRoaXMubW9kZWwuaXNFbXB0eUVsZW1lbnQgJiYgdGhpcy5tb2RlbC5lbGVtZW50LmlzUGFuZWwgJiYgdGhpcy5tb2RlbC5zaG93QWRkUXVlc3Rpb25CdXR0b24gPyBhdHRhY2hLZXkyY2xpY2soXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3ZjLXBhbmVsX19hZGQtbmV3LXF1ZXN0aW9uLWNvbnRhaW5lclwiPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzTmFtZT1cInN2Yy1wYW5lbF9fYWRkLW5ldy1xdWVzdGlvbiBzdmMtYWN0aW9uLWJ1dHRvblwiXG4gICAgICAgICAgICBvbkNsaWNrPXsoZSkgPT4ge1xuICAgICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgICB0aGlzLm1vZGVsLmFkZE5ld1F1ZXN0aW9uKCk7XG4gICAgICAgICAgICB9fVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInN2Yy10ZXh0IHN2Yy10ZXh0LS1ub3JtYWwgc3ZjLXRleHQtLWJvbGRcIj5cbiAgICAgICAgICAgICAge3RoaXMubW9kZWwuYWRkTmV3UXVlc3Rpb25UZXh0fVxuICAgICAgICAgICAgPC9zcGFuPlxuXG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAge2F0dGFjaEtleTJjbGljayg8YnV0dG9uXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIG9uQ2xpY2s9eyhlKSA9PiB7XG4gICAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgICAgIHRoaXMubW9kZWwucXVlc3Rpb25UeXBlU2VsZWN0b3JNb2RlbC5hY3Rpb24oKTtcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgICBjbGFzc05hbWU9XCJzdmMtcGFuZWxfX3F1ZXN0aW9uLXR5cGUtc2VsZWN0b3JcIlxuICAgICAgICAgICAgdGl0bGU9e3RoaXMubW9kZWwuYWRkTmV3UXVlc3Rpb25UZXh0fVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInN2Yy1wYW5lbF9fcXVlc3Rpb24tdHlwZS1zZWxlY3Rvci1pY29uXCI+XG4gICAgICAgICAgICAgIDxTdmdJY29uXG4gICAgICAgICAgICAgICAgaWNvbk5hbWU9e3RoaXMubW9kZWwucXVlc3Rpb25UeXBlU2VsZWN0b3JNb2RlbC5pY29uTmFtZX1cbiAgICAgICAgICAgICAgICBzaXplPXsyNH1cbiAgICAgICAgICAgICAgPjwvU3ZnSWNvbj5cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDxQb3B1cCBtb2RlbD17dGhpcy5tb2RlbC5xdWVzdGlvblR5cGVTZWxlY3Rvck1vZGVsLnBvcHVwTW9kZWx9PjwvUG9wdXA+XG4gICAgICAgICAgPC9idXR0b24+KX1cbiAgICAgICAgPC9kaXY+KSA6IG51bGx9XG5cbiAgICAgIHtzdXBlci5yZW5kZXJGb290ZXIoKX1cbiAgICA8L1JlYWN0LkZyYWdtZW50Pik7XG4gIH1cbn1cblxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXG4gIFwic3ZjLXBhbmVsXCIsXG4gIChwcm9wczogUXVlc3Rpb25BZG9ybmVyQ29tcG9uZW50UHJvcHMpID0+IHtcbiAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChQYW5lbEFkb3JuZXJDb21wb25lbnQsIHByb3BzKTtcbiAgfVxuKTtcbiIsImltcG9ydCB7IFF1ZXN0aW9uQWRvcm5lclZpZXdNb2RlbCwgdG9nZ2xlSG92ZXJlZCB9IGZyb20gXCJzdXJ2ZXktY3JlYXRvci1jb3JlXCI7XG5pbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBSZWFjdERyYWdFdmVudCwgUmVhY3RNb3VzZUV2ZW50IH0gZnJvbSBcIi4uL2V2ZW50c1wiO1xuaW1wb3J0IHsgQmFzZSwgUXVlc3Rpb24gfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7XG4gIFN1cnZleUFjdGlvbkJhcixcbiAgUmVhY3RFbGVtZW50RmFjdG9yeSxcbiAgU3VydmV5UXVlc3Rpb24sXG4gIGF0dGFjaEtleTJjbGljayxcbiAgU3ZnSWNvbixcbiAgUG9wdXBcbn0gZnJvbSBcInN1cnZleS1yZWFjdC11aVwiO1xuaW1wb3J0IHsgQ3JlYXRvck1vZGVsRWxlbWVudCB9IGZyb20gXCIuLi9Nb2RlbEVsZW1lbnRcIjtcblxuZXhwb3J0IGludGVyZmFjZSBRdWVzdGlvbkFkb3JuZXJDb21wb25lbnRQcm9wcyB7XG4gIGVsZW1lbnQ6IEpTWC5FbGVtZW50O1xuICBxdWVzdGlvbjogUXVlc3Rpb247XG4gIGNvbXBvbmVudERhdGE6IGFueTtcbn1cblxuZXhwb3J0IGNsYXNzIFF1ZXN0aW9uQWRvcm5lckNvbXBvbmVudCBleHRlbmRzIENyZWF0b3JNb2RlbEVsZW1lbnQ8XG4gIFF1ZXN0aW9uQWRvcm5lckNvbXBvbmVudFByb3BzLFxuICBhbnlcbj4ge1xuICBwcml2YXRlIG1vZGVsVmFsdWU6IFF1ZXN0aW9uQWRvcm5lclZpZXdNb2RlbDtcbiAgcHJvdGVjdGVkIHJvb3RSZWY6IFJlYWN0LlJlZk9iamVjdDxIVE1MRGl2RWxlbWVudD47XG5cbiAgcHJvdGVjdGVkIGNyZWF0ZU1vZGVsKCk6IHZvaWQge1xuICAgIHRoaXMubW9kZWxWYWx1ZSA9IHRoaXMuY3JlYXRlUXVlc3Rpb25WaWV3TW9kZWwoKTtcbiAgfVxuICBwcm90ZWN0ZWQgY3JlYXRlUXVlc3Rpb25WaWV3TW9kZWwoKTogUXVlc3Rpb25BZG9ybmVyVmlld01vZGVsIHtcbiAgICByZXR1cm4gbmV3IFF1ZXN0aW9uQWRvcm5lclZpZXdNb2RlbChcbiAgICAgIHRoaXMucHJvcHMuY29tcG9uZW50RGF0YSxcbiAgICAgIHRoaXMucHJvcHMucXVlc3Rpb24sXG4gICAgICBudWxsXG4gICAgKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0VXBkYXRlZE1vZGVsUHJvcHMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBbXCJxdWVzdGlvblwiLCBcImNvbXBvbmVudERhdGFcIl07XG4gIH1cbiAgcHVibGljIGdldCBtb2RlbCgpOiBRdWVzdGlvbkFkb3JuZXJWaWV3TW9kZWwge1xuICAgIHJldHVybiB0aGlzLm1vZGVsVmFsdWU7XG4gIH1cbiAgcHJvdGVjdGVkIGdldFN0YXRlRWxlbWVudCgpOiBCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5tb2RlbDtcbiAgfVxuICBwcm90ZWN0ZWQgY2FuUmVuZGVyKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBzdXBlci5jYW5SZW5kZXIoKSAmJiAhdGhpcy5tb2RlbC5pc0RyYWdnZWQ7XG4gIH1cblxuICByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICBjb25zdCBhbGxvd0ludGVyYWN0aW9ucyA9IHRoaXMubW9kZWwuZWxlbWVudFxuICAgICAgLmlzSW50ZXJhY3RpdmVEZXNpZ25FbGVtZW50O1xuICAgIGNvbnN0IGNvbnRlbnQgPSB0aGlzLnJlbmRlckNvbnRlbnQoYWxsb3dJbnRlcmFjdGlvbnMpO1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2XG4gICAgICAgIHJlZj17dGhpcy5yb290UmVmfVxuICAgICAgICBkYXRhLXN2LWRyb3AtdGFyZ2V0LXN1cnZleS1lbGVtZW50PXt0aGlzLm1vZGVsLmVsZW1lbnQubmFtZSB8fCBudWxsfVxuICAgICAgICBjbGFzc05hbWU9e1wic3ZjLXF1ZXN0aW9uX19hZG9ybmVyXCIgKyB0aGlzLm1vZGVsLnJvb3RDc3MoKX1cbiAgICAgICAgb25Nb3VzZU91dD17ZSA9PiBhbGxvd0ludGVyYWN0aW9ucyAmJiB0aGlzLm1vZGVsLmhvdmVyKGUubmF0aXZlRXZlbnQsIGUuY3VycmVudFRhcmdldCl9XG4gICAgICAgIG9uTW91c2VPdmVyPXtlID0+IGFsbG93SW50ZXJhY3Rpb25zICYmIHRoaXMubW9kZWwuaG92ZXIoZS5uYXRpdmVFdmVudCwgZS5jdXJyZW50VGFyZ2V0KX1cbiAgICAgID5cbiAgICAgICAge2NvbnRlbnR9XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJDb250ZW50KGFsbG93SW50ZXJhY3Rpb25zOiBib29sZWFuKTogSlNYLkVsZW1lbnQge1xuICAgIHZhciBjb250ZW50ID0gdGhpcy5yZW5kZXJFbGVtZW50Q29udGVudCgpO1xuICAgIGlmICghYWxsb3dJbnRlcmFjdGlvbnMpIHJldHVybiA8PnsgY29udGVudCB9e3RoaXMucmVuZGVyRm9vdGVyKCl9PC8+O1xuICAgIHJldHVybiBhdHRhY2hLZXkyY2xpY2soXG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzTmFtZT17XCJzdmMtcXVlc3Rpb25fX2NvbnRlbnQgXCIgKyB0aGlzLm1vZGVsLmNzcygpfVxuICAgICAgICBvbkNsaWNrPXsoZSkgPT4gdGhpcy5tb2RlbC5zZWxlY3QodGhpcy5tb2RlbCwgbmV3IFJlYWN0TW91c2VFdmVudChlKSl9XG4gICAgICA+XG4gICAgICAgIHt0aGlzLnJlbmRlckhlYWRlcigpfVxuICAgICAgICB7Y29udGVudH1cbiAgICAgICAge3RoaXMucmVuZGVyRm9vdGVyKCl9XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJIZWFkZXIoKTogSlNYLkVsZW1lbnQge1xuICAgIHJldHVybiBSZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLmNyZWF0ZUVsZW1lbnQoXCJzdmMtcXVlc3Rpb24taGVhZGVyXCIsIHsgbW9kZWw6IHRoaXMubW9kZWwgfSk7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckZvb3RlcigpOiBKU1guRWxlbWVudCB7XG4gICAgcmV0dXJuIFJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UuY3JlYXRlRWxlbWVudChcInN2Yy1xdWVzdGlvbi1mb290ZXJcIiwgeyBjbGFzc05hbWU6IFwic3ZjLXF1ZXN0aW9uX19jb250ZW50LWFjdGlvbnNcIiwgbW9kZWw6IHRoaXMubW9kZWwgfSk7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckVsZW1lbnRDb250ZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICByZXR1cm4gKFxuICAgICAgPD5cbiAgICAgICAge3RoaXMucHJvcHMuZWxlbWVudH1cbiAgICAgICAge3RoaXMucmVuZGVyRWxlbWVudFBsYWNlaG9sZGVyKCl9XG4gICAgICA8Lz5cbiAgICApO1xuICB9XG4gIHJlbmRlckVsZW1lbnRQbGFjZWhvbGRlcigpOiBKU1guRWxlbWVudCB7XG4gICAgaWYgKCF0aGlzLm1vZGVsLmlzRW1wdHlFbGVtZW50KSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3ZjLXBhbmVsX19wbGFjZWhvbGRlcl9mcmFtZVwiPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2Yy1wYW5lbF9fcGxhY2Vob2xkZXJcIj5cbiAgICAgICAgICB7dGhpcy5tb2RlbC5wbGFjZWhvbGRlclRleHR9XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxufVxuXG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcbiAgXCJzdmMtcXVlc3Rpb25cIixcbiAgKHByb3BzOiBRdWVzdGlvbkFkb3JuZXJDb21wb25lbnRQcm9wcykgPT4ge1xuICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFF1ZXN0aW9uQWRvcm5lckNvbXBvbmVudCwgcHJvcHMpO1xuICB9XG4pO1xuIiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgUXVlc3Rpb25Ecm9wZG93bkFkb3JuZXJWaWV3TW9kZWwgfSBmcm9tIFwic3VydmV5LWNyZWF0b3ItY29yZVwiO1xuaW1wb3J0IHsgSXRlbVZhbHVlLCBRdWVzdGlvbkRyb3Bkb3duTW9kZWwsIFF1ZXN0aW9uU2VsZWN0QmFzZSwgU3VydmV5TW9kZWwgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFJlYWN0RWxlbWVudEZhY3RvcnksIFJlYWN0U3VydmV5RWxlbWVudHNXcmFwcGVyIH0gZnJvbSBcInN1cnZleS1yZWFjdC11aVwiO1xuaW1wb3J0IHtcbiAgUXVlc3Rpb25BZG9ybmVyQ29tcG9uZW50LFxuICBRdWVzdGlvbkFkb3JuZXJDb21wb25lbnRQcm9wc1xufSBmcm9tIFwiLi9RdWVzdGlvblwiO1xuaW1wb3J0IHsgQWN0aW9uQnV0dG9uIH0gZnJvbSBcIi4uL0FjdGlvbkJ1dHRvblwiO1xuXG5leHBvcnQgY2xhc3MgUXVlc3Rpb25Ecm9wZG93bkFkb3JuZXJDb21wb25lbnQgZXh0ZW5kcyBRdWVzdGlvbkFkb3JuZXJDb21wb25lbnQge1xuICBjb25zdHJ1Y3Rvcihwcm9wczogUXVlc3Rpb25BZG9ybmVyQ29tcG9uZW50UHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gIH1cbiAgcHJvdGVjdGVkIGNyZWF0ZVF1ZXN0aW9uVmlld01vZGVsKCk6IFF1ZXN0aW9uRHJvcGRvd25BZG9ybmVyVmlld01vZGVsIHtcbiAgICByZXR1cm4gbmV3IFF1ZXN0aW9uRHJvcGRvd25BZG9ybmVyVmlld01vZGVsKFxuICAgICAgdGhpcy5wcm9wcy5jb21wb25lbnREYXRhLFxuICAgICAgdGhpcy5wcm9wcy5xdWVzdGlvbiBhcyBRdWVzdGlvbkRyb3Bkb3duTW9kZWwsXG4gICAgICBudWxsXG4gICAgKTtcbiAgfVxuICBwdWJsaWMgZ2V0IGRyb3Bkb3duTW9kZWwoKTogUXVlc3Rpb25Ecm9wZG93bkFkb3JuZXJWaWV3TW9kZWwge1xuICAgIHJldHVybiB0aGlzLm1vZGVsIGFzIFF1ZXN0aW9uRHJvcGRvd25BZG9ybmVyVmlld01vZGVsO1xuICB9XG4gIHB1YmxpYyBnZXQgcXVlc3Rpb24oKTogUXVlc3Rpb25TZWxlY3RCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5kcm9wZG93bk1vZGVsLnF1ZXN0aW9uIGFzIFF1ZXN0aW9uU2VsZWN0QmFzZTtcbiAgfVxuXG4gIHJlbmRlckVsZW1lbnRQbGFjZWhvbGRlcigpOiBKU1guRWxlbWVudCB7XG4gICAgY29uc3QgdGV4dFN0eWxlID0gKHRoaXMucXVlc3Rpb24gYXMgYW55KS50ZXh0U3R5bGU7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3NOYW1lPVwic3ZjLXF1ZXN0aW9uX19kcm9wZG93bi1jaG9pY2VzLS13cmFwcGVyXCI+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3ZjLXF1ZXN0aW9uX19kcm9wZG93bi1jaG9pY2VzXCI+XG4gICAgICAgICAgeyh0aGlzLmRyb3Bkb3duTW9kZWwuZ2V0UmVuZGVyZWRJdGVtcygpIHx8IFtdKS5tYXAoXG4gICAgICAgICAgICAoaXRlbTogSXRlbVZhbHVlLCBpbmRleDogbnVtYmVyKSA9PiAoXG4gICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9e3RoaXMuZHJvcGRvd25Nb2RlbC5nZXRDaG9pY2VDc3MoKX1cbiAgICAgICAgICAgICAgICBrZXk9e2BlZGl0YWJsZV9jaG9pY2VfJHtpbmRleH1gfVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAge1JlYWN0U3VydmV5RWxlbWVudHNXcmFwcGVyLndyYXBJdGVtVmFsdWUodGhpcy5xdWVzdGlvbi5zdXJ2ZXkgYXMgU3VydmV5TW9kZWwsXG4gICAgICAgICAgICAgICAgICBSZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLmNyZWF0ZUVsZW1lbnQoXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZHJvcGRvd25Nb2RlbC5pdGVtQ29tcG9uZW50LFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgcXVlc3Rpb246IHRoaXMucXVlc3Rpb24sXG4gICAgICAgICAgICAgICAgICAgICAgY3NzQ2xhc3NlczogdGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLFxuICAgICAgICAgICAgICAgICAgICAgIGlzRGlzcGxheU1vZGU6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgaXRlbTogaXRlbSxcbiAgICAgICAgICAgICAgICAgICAgICB0ZXh0U3R5bGU6IHRleHRTdHlsZSxcbiAgICAgICAgICAgICAgICAgICAgICBpbmRleDogaW5kZXgsXG4gICAgICAgICAgICAgICAgICAgICAgaXNDaGVja2VkOiB0aGlzLnF1ZXN0aW9uLnZhbHVlID09PSBpdGVtLnZhbHVlXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICB0aGlzLnF1ZXN0aW9uLFxuICAgICAgICAgICAgICAgICAgaXRlbVxuICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgKVxuICAgICAgICAgICl9XG4gICAgICAgIDwvZGl2PlxuICAgICAgICB7dGhpcy5kcm9wZG93bk1vZGVsLm5lZWRUb0NvbGxhcHNlID9cbiAgICAgICAgICA8QWN0aW9uQnV0dG9uXG4gICAgICAgICAgICBjbGljaz17dGhpcy5kcm9wZG93bk1vZGVsLnN3aXRjaENvbGxhcHNlfVxuICAgICAgICAgICAgdGV4dD17dGhpcy5kcm9wZG93bk1vZGVsLmdldEJ1dHRvblRleHQoKX1cbiAgICAgICAgICAgIGFsbG93QnViYmxlPXt0cnVlfVxuICAgICAgICAgID48L0FjdGlvbkJ1dHRvbj4gOlxuICAgICAgICAgIG51bGxcbiAgICAgICAgfVxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxufVxuXG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcbiAgXCJzdmMtZHJvcGRvd24tcXVlc3Rpb25cIixcbiAgKHByb3BzOiBRdWVzdGlvbkFkb3JuZXJDb21wb25lbnRQcm9wcykgPT4ge1xuICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFF1ZXN0aW9uRHJvcGRvd25BZG9ybmVyQ29tcG9uZW50LCBwcm9wcyk7XG4gIH1cbik7XG4iLCJpbXBvcnQgeyBRdWVzdGlvbkFkb3JuZXJWaWV3TW9kZWwsIHRvZ2dsZUhvdmVyZWQgfSBmcm9tIFwic3VydmV5LWNyZWF0b3ItY29yZVwiO1xuaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgUmVhY3REcmFnRXZlbnQsIFJlYWN0TW91c2VFdmVudCB9IGZyb20gXCIuLi9ldmVudHNcIjtcbmltcG9ydCB7IEJhc2UsIFF1ZXN0aW9uIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQge1xuICBTdXJ2ZXlBY3Rpb25CYXIsXG4gIFJlYWN0RWxlbWVudEZhY3RvcnksXG4gIFN1cnZleUVsZW1lbnRCYXNlLFxuICBTdXJ2ZXlRdWVzdGlvbixcbiAgYXR0YWNoS2V5MmNsaWNrLFxuICBTdmdJY29uLFxuICBQb3B1cFxufSBmcm9tIFwic3VydmV5LXJlYWN0LXVpXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUXVlc3Rpb25XcmFwcGVyRm9vdGVyUHJvcHMge1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG4gIG1vZGVsOiBRdWVzdGlvbkFkb3JuZXJWaWV3TW9kZWw7XG59XG5leHBvcnQgY2xhc3MgUXVlc3Rpb25XcmFwcGVyRm9vdGVyIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50PFF1ZXN0aW9uV3JhcHBlckZvb3RlclByb3BzLCBhbnk+IHtcbiAgcmVuZGVyKCk6IEpTWC5FbGVtZW50IHtcbiAgICByZXR1cm4gKDxkaXYgY2xhc3NOYW1lPXt0aGlzLnByb3BzLmNsYXNzTmFtZX0+XG4gICAgICA8U3VydmV5QWN0aW9uQmFyIG1vZGVsPXt0aGlzLnByb3BzLm1vZGVsLmFjdGlvbkNvbnRhaW5lcn0gaGFuZGxlQ2xpY2s9e2ZhbHNlfT48L1N1cnZleUFjdGlvbkJhcj5cbiAgICA8L2Rpdj4pO1xuICB9XG59XG5cblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFxuICBcInN2Yy1xdWVzdGlvbi1mb290ZXJcIixcbiAgKHByb3BzOiBRdWVzdGlvbldyYXBwZXJGb290ZXJQcm9wcykgPT4ge1xuICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFF1ZXN0aW9uV3JhcHBlckZvb3RlciwgcHJvcHMpO1xuICB9XG4pO1xuXG4iLCJpbXBvcnQgeyBRdWVzdGlvbkFkb3JuZXJWaWV3TW9kZWwsIHRvZ2dsZUhvdmVyZWQgfSBmcm9tIFwic3VydmV5LWNyZWF0b3ItY29yZVwiO1xuaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgUmVhY3REcmFnRXZlbnQsIFJlYWN0TW91c2VFdmVudCB9IGZyb20gXCIuLi9ldmVudHNcIjtcbmltcG9ydCB7IEJhc2UsIFF1ZXN0aW9uIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQge1xuICBTdXJ2ZXlBY3Rpb25CYXIsXG4gIFJlYWN0RWxlbWVudEZhY3RvcnksXG4gIFN1cnZleUVsZW1lbnRCYXNlLFxuICBTdXJ2ZXlRdWVzdGlvbixcbiAgYXR0YWNoS2V5MmNsaWNrLFxuICBTdmdJY29uLFxuICBQb3B1cFxufSBmcm9tIFwic3VydmV5LXJlYWN0LXVpXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUXVlc3Rpb25XcmFwcGVySGVhZGVyUHJvcHMge1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG4gIG1vZGVsOiBRdWVzdGlvbkFkb3JuZXJWaWV3TW9kZWw7XG59XG5cbmV4cG9ydCBjbGFzcyBRdWVzdGlvbldyYXBwZXJIZWFkZXIgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQ8UXVlc3Rpb25XcmFwcGVySGVhZGVyUHJvcHMsIGFueT4ge1xuICByZW5kZXIoKTogSlNYLkVsZW1lbnQge1xuICAgIGlmICghdGhpcy5wcm9wcy5tb2RlbC5hbGxvd0RyYWdnaW5nKSByZXR1cm4gbnVsbDtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9e1wic3ZjLXF1ZXN0aW9uX19kcmFnLWFyZWFcIn1cbiAgICAgICAgb25Qb2ludGVyRG93bj17KGV2ZW50OiBhbnkpID0+XG4gICAgICAgICAgdGhpcy5wcm9wcy5tb2RlbC5vblBvaW50ZXJEb3duKGV2ZW50KVxuICAgICAgICB9XG4gICAgICA+XG4gICAgICAgIDxTdmdJY29uIGNsYXNzTmFtZT1cInN2Yy1xdWVzdGlvbl9fZHJhZy1lbGVtZW50XCIgc2l6ZT17MjR9IGljb25OYW1lPXtcImljb24tZHJhZy1hcmVhLWluZGljYXRvcl8yNHgxNlwifT48L1N2Z0ljb24+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG59XG5cblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFxuICBcInN2Yy1xdWVzdGlvbi1oZWFkZXJcIixcbiAgKHByb3BzOiBRdWVzdGlvbldyYXBwZXJIZWFkZXJQcm9wcykgPT4ge1xuICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFF1ZXN0aW9uV3JhcHBlckhlYWRlciwgcHJvcHMpO1xuICB9XG4pO1xuIiwiaW1wb3J0IHtcbiAgUXVlc3Rpb25JbWFnZUFkb3JuZXJWaWV3TW9kZWwsXG4gIFF1ZXN0aW9uQWRvcm5lclZpZXdNb2RlbFxufSBmcm9tIFwic3VydmV5LWNyZWF0b3ItY29yZVwiO1xuaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgYXR0YWNoS2V5MmNsaWNrLCBSZWFjdEVsZW1lbnRGYWN0b3J5LCBTdmdJY29uIH0gZnJvbSBcInN1cnZleS1yZWFjdC11aVwiO1xuaW1wb3J0IHtcbiAgUXVlc3Rpb25BZG9ybmVyQ29tcG9uZW50LFxuICBRdWVzdGlvbkFkb3JuZXJDb21wb25lbnRQcm9wc1xufSBmcm9tIFwiLi9RdWVzdGlvblwiO1xuXG5leHBvcnQgY2xhc3MgUXVlc3Rpb25JbWFnZUFkb3JuZXJDb21wb25lbnQgZXh0ZW5kcyBRdWVzdGlvbkFkb3JuZXJDb21wb25lbnQge1xuICBjb25zdHJ1Y3Rvcihwcm9wczogUXVlc3Rpb25BZG9ybmVyQ29tcG9uZW50UHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgdGhpcy5yb290UmVmID0gUmVhY3QuY3JlYXRlUmVmKCk7XG4gIH1cbiAgcHJvdGVjdGVkIGNyZWF0ZVF1ZXN0aW9uVmlld01vZGVsKCk6IFF1ZXN0aW9uQWRvcm5lclZpZXdNb2RlbCB7XG4gICAgcmV0dXJuIG5ldyBRdWVzdGlvbkltYWdlQWRvcm5lclZpZXdNb2RlbChcbiAgICAgIHRoaXMucHJvcHMuY29tcG9uZW50RGF0YSxcbiAgICAgIHRoaXMucHJvcHMucXVlc3Rpb24gYXMgYW55LFxuICAgICAgbnVsbCxcbiAgICAgIG51bGxcbiAgICApO1xuICB9XG4gIHB1YmxpYyBnZXQgaW1hZ2VNb2RlbCgpOiBRdWVzdGlvbkltYWdlQWRvcm5lclZpZXdNb2RlbCB7XG4gICAgcmV0dXJuIHRoaXMubW9kZWwgYXMgUXVlc3Rpb25JbWFnZUFkb3JuZXJWaWV3TW9kZWw7XG4gIH1cbiAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgc3VwZXIuY29tcG9uZW50RGlkTW91bnQoKTtcbiAgICB0aGlzLmltYWdlTW9kZWwucXVlc3Rpb25Sb290ID0gdGhpcy5yb290UmVmLmN1cnJlbnQ7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckhlYWRlcigpOiBKU1guRWxlbWVudCB7XG4gICAgcmV0dXJuICg8UmVhY3QuRnJhZ21lbnQ+XG4gICAgICA8aW5wdXRcbiAgICAgICAgdHlwZT1cImZpbGVcIlxuICAgICAgICBhcmlhLWhpZGRlbj1cInRydWVcIlxuICAgICAgICB0YWJJbmRleD17LTF9XG4gICAgICAgIGFjY2VwdD1cImltYWdlLypcIlxuICAgICAgICBjbGFzc05hbWU9XCJzdmMtY2hvb3NlLWZpbGUtaW5wdXRcIlxuICAgICAgICBzdHlsZT17e1xuICAgICAgICAgIHBvc2l0aW9uOiBcImFic29sdXRlXCIsXG4gICAgICAgICAgb3BhY2l0eTogMCxcbiAgICAgICAgICB3aWR0aDogXCIxcHhcIixcbiAgICAgICAgICBoZWlnaHQ6IFwiMXB4XCIsXG4gICAgICAgICAgb3ZlcmZsb3c6IFwiaGlkZGVuXCJcbiAgICAgICAgfX1cbiAgICAgIC8+XG5cbiAgICAgIHtzdXBlci5yZW5kZXJIZWFkZXIoKX1cbiAgICA8L1JlYWN0LkZyYWdtZW50Pik7XG4gIH1cbiAgcmVuZGVyRWxlbWVudFBsYWNlaG9sZGVyKCk6IEpTWC5FbGVtZW50IHtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmMtaW1hZ2UtcXVlc3Rpb24tY29udHJvbHNcIj5cbiAgICAgICAge3RoaXMubW9kZWwuYWxsb3dFZGl0ID8gYXR0YWNoS2V5MmNsaWNrKDxzcGFuXG4gICAgICAgICAgY2xhc3NOYW1lPVwic3ZjLWltYWdlLXF1ZXN0aW9uLWNvbnRyb2xzX19idXR0b24gc3ZjLWltYWdlLXF1ZXN0aW9uLWNvbnRyb2xzX19jaG9vc2UtZmlsZVwiXG4gICAgICAgICAgb25DbGljaz17KCkgPT4gdGhpcy5pbWFnZU1vZGVsLmNob29zZUZpbGUodGhpcy5pbWFnZU1vZGVsKX1cbiAgICAgICAgPlxuICAgICAgICAgIDxTdmdJY29uIHNpemU9ezI0fSBpY29uTmFtZT17XCJpY29uLWZpbGVcIn0+PC9TdmdJY29uPlxuICAgICAgICA8L3NwYW4+KSA6IG51bGx9XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG59XG5cblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFxuICBcInN2Yy1pbWFnZS1xdWVzdGlvblwiLFxuICAocHJvcHM6IFF1ZXN0aW9uQWRvcm5lckNvbXBvbmVudFByb3BzKSA9PiB7XG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoUXVlc3Rpb25JbWFnZUFkb3JuZXJDb21wb25lbnQsIHByb3BzKTtcbiAgfVxuKTtcbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IEJhc2UgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFF1ZXN0aW9uUmF0aW5nQWRvcm5lclZpZXdNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY3JlYXRvci1jb3JlXCI7XG5pbXBvcnQgeyBhdHRhY2hLZXkyY2xpY2ssIFJlYWN0RWxlbWVudEZhY3RvcnksIFN2Z0ljb24gfSBmcm9tIFwic3VydmV5LXJlYWN0LXVpXCI7XG5pbXBvcnQgeyBRdWVzdGlvbkFkb3JuZXJDb21wb25lbnRQcm9wcyB9IGZyb20gXCIuL1F1ZXN0aW9uXCI7XG5pbXBvcnQgeyBDcmVhdG9yTW9kZWxFbGVtZW50IH0gZnJvbSBcIi4uL01vZGVsRWxlbWVudFwiO1xuXG5leHBvcnQgY2xhc3MgUXVlc3Rpb25SYXRpbmdBZG9ybmVyQ29tcG9uZW50IGV4dGVuZHMgQ3JlYXRvck1vZGVsRWxlbWVudDxRdWVzdGlvbkFkb3JuZXJDb21wb25lbnRQcm9wcywgYW55PiB7XG4gIHByaXZhdGUgbW9kZWxWYWx1ZTogUXVlc3Rpb25SYXRpbmdBZG9ybmVyVmlld01vZGVsO1xuXG4gIHByb3RlY3RlZCBjcmVhdGVNb2RlbCgpOiB2b2lkIHtcbiAgICB0aGlzLm1vZGVsVmFsdWUgPSB0aGlzLmNyZWF0ZVF1ZXN0aW9uVmlld01vZGVsKCk7XG4gIH1cbiAgcHJvdGVjdGVkIGNyZWF0ZVF1ZXN0aW9uVmlld01vZGVsKCk6IFF1ZXN0aW9uUmF0aW5nQWRvcm5lclZpZXdNb2RlbCB7XG4gICAgcmV0dXJuIG5ldyBRdWVzdGlvblJhdGluZ0Fkb3JuZXJWaWV3TW9kZWwoXG4gICAgICB0aGlzLnByb3BzLmNvbXBvbmVudERhdGEsXG4gICAgICB0aGlzLnByb3BzLnF1ZXN0aW9uIGFzIGFueSxcbiAgICAgIG51bGxcbiAgICApO1xuICB9XG4gIHByb3RlY3RlZCBnZXRVcGRhdGVkTW9kZWxQcm9wcygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIFtcInF1ZXN0aW9uXCIsIFwiY29tcG9uZW50RGF0YVwiXTtcbiAgfVxuICBwdWJsaWMgZ2V0IHJhdGluZ01vZGVsKCk6IFF1ZXN0aW9uUmF0aW5nQWRvcm5lclZpZXdNb2RlbCB7XG4gICAgcmV0dXJuIHRoaXMubW9kZWwgYXMgUXVlc3Rpb25SYXRpbmdBZG9ybmVyVmlld01vZGVsO1xuICB9XG4gIHB1YmxpYyBnZXQgbW9kZWwoKTogUXVlc3Rpb25SYXRpbmdBZG9ybmVyVmlld01vZGVsIHtcbiAgICByZXR1cm4gdGhpcy5tb2RlbFZhbHVlO1xuICB9XG4gIHByb3RlY3RlZCBnZXRTdGF0ZUVsZW1lbnQoKTogQmFzZSB7XG4gICAgcmV0dXJuIHRoaXMubW9kZWw7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIGNvbnN0IG1vZGVsID0gdGhpcy5yYXRpbmdNb2RlbDtcbiAgICByZXR1cm4gKDw+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2Yy1yYXRpbmctcXVlc3Rpb24tY29udGVudFwiPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2Yy1yYXRpbmctcXVlc3Rpb24tY29udHJvbHMgc3ZjLWl0ZW0tdmFsdWUtY29udHJvbHNcIj5cbiAgICAgICAgICB7bW9kZWwuYWxsb3dSZW1vdmUgPyBhdHRhY2hLZXkyY2xpY2soPHNwYW5cbiAgICAgICAgICAgIGNsYXNzTmFtZT1cInN2Yy1pdGVtLXZhbHVlLWNvbnRyb2xzX19idXR0b24gc3ZjLWl0ZW0tdmFsdWUtY29udHJvbHNfX3JlbW92ZVwiXG4gICAgICAgICAgICBhcmlhLWxhYmVsPXttb2RlbC5yZW1vdmVUb29sdGlwfVxuICAgICAgICAgICAgb25DbGljaz17KCkgPT4gbW9kZWwucmVtb3ZlSXRlbShtb2RlbCl9XG4gICAgICAgICAgPlxuICAgICAgICAgICAgPFN2Z0ljb24gc2l6ZT17MTZ9IGljb25OYW1lPXtcImljb24tcmVtb3ZlXzE2eDE2XCJ9IHRpdGxlPXttb2RlbC5yZW1vdmVUb29sdGlwfT48L1N2Z0ljb24+XG4gICAgICAgICAgPC9zcGFuPikgOiBudWxsfVxuICAgICAgICAgIHttb2RlbC5hbGxvd0FkZCA/IGF0dGFjaEtleTJjbGljayg8c3BhblxuICAgICAgICAgICAgY2xhc3NOYW1lPVwic3ZjLWl0ZW0tdmFsdWUtY29udHJvbHNfX2J1dHRvbiBzdmMtaXRlbS12YWx1ZS1jb250cm9sc19fYWRkXCJcbiAgICAgICAgICAgIGFyaWEtbGFiZWw9e21vZGVsLmFkZFRvb2x0aXB9XG4gICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBtb2RlbC5hZGRJdGVtKG1vZGVsKX1cbiAgICAgICAgICA+XG4gICAgICAgICAgICA8U3ZnSWNvbiBzaXplPXsxNn0gaWNvbk5hbWU9e1wiaWNvbi1hZGRfMTZ4MTZcIn0gdGl0bGU9e21vZGVsLmFkZFRvb2x0aXB9PjwvU3ZnSWNvbj5cbiAgICAgICAgICA8L3NwYW4+KSA6IG51bGx9XG4gICAgICAgIDwvZGl2PlxuICAgICAgICB7dGhpcy5wcm9wcy5lbGVtZW50fVxuICAgICAgPC9kaXY+XG4gICAgPC8+KTtcbiAgfVxufVxuXG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcbiAgXCJzdmMtcmF0aW5nLXF1ZXN0aW9uXCIsXG4gIChwcm9wczogUXVlc3Rpb25BZG9ybmVyQ29tcG9uZW50UHJvcHMpID0+IHtcbiAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChRdWVzdGlvblJhdGluZ0Fkb3JuZXJDb21wb25lbnQsIHByb3BzKTtcbiAgfVxuKTtcblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFxuICBcInN2Yy1yYXRpbmctcXVlc3Rpb24tY29udGVudFwiLFxuICAocHJvcHM6IFF1ZXN0aW9uQWRvcm5lckNvbXBvbmVudFByb3BzKSA9PiB7XG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoUXVlc3Rpb25SYXRpbmdBZG9ybmVyQ29tcG9uZW50LCBwcm9wcyk7XG4gIH1cbik7XG4iLCJpbXBvcnQge1xuICBRdWVzdGlvbkFkb3JuZXJWaWV3TW9kZWxcbn0gZnJvbSBcInN1cnZleS1jcmVhdG9yLWNvcmVcIjtcbmltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7XG4gIFF1ZXN0aW9uQWRvcm5lckNvbXBvbmVudCxcbiAgUXVlc3Rpb25BZG9ybmVyQ29tcG9uZW50UHJvcHNcbn0gZnJvbSBcIi4vUXVlc3Rpb25cIjtcbmltcG9ydCB7IGF0dGFjaEtleTJjbGljaywgUmVhY3RFbGVtZW50RmFjdG9yeSwgU3ZnSWNvbiB9IGZyb20gXCJzdXJ2ZXktcmVhY3QtdWlcIjtcblxuZXhwb3J0IGNsYXNzIFF1ZXN0aW9uV2lkZ2V0QWRvcm5lckNvbXBvbmVudCBleHRlbmRzIFF1ZXN0aW9uQWRvcm5lckNvbXBvbmVudCB7XG4gIHByb3RlY3RlZCBjcmVhdGVRdWVzdGlvblZpZXdNb2RlbCgpOiBRdWVzdGlvbkFkb3JuZXJWaWV3TW9kZWwge1xuICAgIHJldHVybiBuZXcgUXVlc3Rpb25BZG9ybmVyVmlld01vZGVsKFxuICAgICAgdGhpcy5wcm9wcy5jb21wb25lbnREYXRhLFxuICAgICAgdGhpcy5wcm9wcy5xdWVzdGlvbiBhcyBhbnksXG4gICAgICBudWxsXG4gICAgKTtcbiAgfVxuICBwdWJsaWMgZ2V0IHdpZGdldE1vZGVsKCk6IFF1ZXN0aW9uQWRvcm5lclZpZXdNb2RlbCB7XG4gICAgcmV0dXJuIHRoaXMubW9kZWwgYXMgUXVlc3Rpb25BZG9ybmVyVmlld01vZGVsO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJFbGVtZW50Q29udGVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3NOYW1lPXtcInN2Yy13aWRnZXRfX2NvbnRlbnRcIn1cbiAgICAgID5cbiAgICAgICAge3RoaXMucHJvcHMuZWxlbWVudH1cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbn1cblxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXG4gIFwic3ZjLXdpZGdldC1xdWVzdGlvblwiLFxuICAocHJvcHM6IFF1ZXN0aW9uQWRvcm5lckNvbXBvbmVudFByb3BzKSA9PiB7XG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoUXVlc3Rpb25XaWRnZXRBZG9ybmVyQ29tcG9uZW50LCBwcm9wcyk7XG4gIH1cbik7XG4iLCJpbXBvcnQgeyBSb3dWaWV3TW9kZWwgfSBmcm9tIFwic3VydmV5LWNyZWF0b3ItY29yZVwiO1xuaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgQmFzZSwgUXVlc3Rpb25Sb3dNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgUmVhY3RFbGVtZW50RmFjdG9yeSB9IGZyb20gXCJzdXJ2ZXktcmVhY3QtdWlcIjtcbmltcG9ydCB7IENyZWF0b3JNb2RlbEVsZW1lbnQgfSBmcm9tIFwiLi4vTW9kZWxFbGVtZW50XCI7XG5cbmludGVyZmFjZSBSb3dXcmFwcGVyQ29tcG9uZW50UHJvcHMge1xuICBlbGVtZW50OiBKU1guRWxlbWVudDtcbiAgY29tcG9uZW50RGF0YTogYW55O1xuICByb3c6IFF1ZXN0aW9uUm93TW9kZWw7XG59XG5cbmV4cG9ydCBjbGFzcyBSb3dXcmFwcGVyIGV4dGVuZHMgQ3JlYXRvck1vZGVsRWxlbWVudDxcbiAgUm93V3JhcHBlckNvbXBvbmVudFByb3BzLFxuICBhbnlcbj4ge1xuICBtb2RlbDogUm93Vmlld01vZGVsO1xuICBjb25zdHJ1Y3Rvcihwcm9wczogUm93V3JhcHBlckNvbXBvbmVudFByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICB9XG4gIHByb3RlY3RlZCBjcmVhdGVNb2RlbCgpOiB2b2lkIHtcbiAgICB0aGlzLm1vZGVsID0gbmV3IFJvd1ZpZXdNb2RlbChcbiAgICAgIHRoaXMucHJvcHMuY29tcG9uZW50RGF0YS5jcmVhdG9yLFxuICAgICAgdGhpcy5wcm9wcy5yb3csXG4gICAgICBudWxsXG4gICAgKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0VXBkYXRlZE1vZGVsUHJvcHMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBbXCJyb3dcIiwgXCJjb21wb25lbnREYXRhXCJdO1xuICB9XG4gIHByb3RlY3RlZCBnZXRTdGF0ZUVsZW1lbnQoKTogQmFzZSB7XG4gICAgcmV0dXJuIHRoaXMubW9kZWw7XG4gIH1cblxuICByZW5kZXIoKTogSlNYLkVsZW1lbnQge1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2XG4gICAgICAgIGtleT17XCJzdmMtcm93LVwiICsgdGhpcy5wcm9wcy5yb3cuaWR9XG4gICAgICAgIGNsYXNzTmFtZT17dGhpcy5tb2RlbC5jc3NDbGFzc2VzfVxuICAgICAgPlxuICAgICAgICB7dGhpcy5wcm9wcy5lbGVtZW50fVxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxufVxuXG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcbiAgXCJzdmMtcm93XCIsXG4gIChwcm9wczogUm93V3JhcHBlckNvbXBvbmVudFByb3BzKSA9PiB7XG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoUm93V3JhcHBlciwgcHJvcHMpO1xuICB9XG4pO1xuIiwiZGVjbGFyZSB2YXIgUmVmbGVjdDphbnk7XG5cbmV4cG9ydCB2YXIgX19kZWNvcmF0ZSA9IGZ1bmN0aW9uKFxuICBkZWNvcmF0b3JzOiBhbnksXG4gIHRhcmdldDogYW55LFxuICBrZXk6IGFueSxcbiAgZGVzYzogYW55XG4pIHtcbiAgdmFyIGMgPSBhcmd1bWVudHMubGVuZ3RoLFxuICAgIHIgPVxuICAgICAgYyA8IDNcbiAgICAgICAgPyB0YXJnZXRcbiAgICAgICAgOiBkZXNjID09PSBudWxsXG4gICAgICAgICAgPyAoZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBrZXkpKVxuICAgICAgICAgIDogZGVzYyxcbiAgICBkO1xuICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QuZGVjb3JhdGUgPT09IFwiZnVuY3Rpb25cIilcbiAgICByID0gUmVmbGVjdC5kZWNvcmF0ZShkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYyk7XG4gIGVsc2VcbiAgICBmb3IgKHZhciBpID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSlcbiAgICAgIGlmICgoZCA9IGRlY29yYXRvcnNbaV0pKVxuICAgICAgICByID0gKGMgPCAzID8gZChyKSA6IGMgPiAzID8gZCh0YXJnZXQsIGtleSwgcikgOiBkKHRhcmdldCwga2V5KSkgfHwgcjtcbiAgcmV0dXJuIGMgPiAzICYmIHIgJiYgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCByKSwgcjtcbn07XG5cbmV4cG9ydCB2YXIgX19hc3NpZ24gPVxuICBPYmplY3RbXCJhc3NpZ25cIl0gfHxcbiAgZnVuY3Rpb24odGFyZ2V0KSB7XG4gICAgZm9yICh2YXIgcywgaSA9IDEsIG4gPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbjsgaSsrKSB7XG4gICAgICBzID0gYXJndW1lbnRzW2ldO1xuICAgICAgZm9yICh2YXIgcCBpbiBzKVxuICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApKSB0YXJnZXRbcF0gPSBzW3BdO1xuICAgIH1cbiAgICByZXR1cm4gdGFyZ2V0O1xuICB9O1xuXG5leHBvcnQgZnVuY3Rpb24gX19leHRlbmRzKHRoaXNDbGFzcywgYmFzZUNsYXNzKSB7XG4gIGZvciAodmFyIHAgaW4gYmFzZUNsYXNzKVxuICAgIGlmIChiYXNlQ2xhc3MuaGFzT3duUHJvcGVydHkocCkpIHRoaXNDbGFzc1twXSA9IGJhc2VDbGFzc1twXTtcbiAgZnVuY3Rpb24gX18oKSB7XG4gICAgdGhpcy5jb25zdHJ1Y3RvciA9IHRoaXNDbGFzcztcbiAgfVxuICB0aGlzQ2xhc3MucHJvdG90eXBlID1cbiAgICBiYXNlQ2xhc3MgPT09IG51bGxcbiAgICAgID8gT2JqZWN0LmNyZWF0ZShiYXNlQ2xhc3MpXG4gICAgICA6ICgoX18ucHJvdG90eXBlID0gYmFzZUNsYXNzLnByb3RvdHlwZSksIG5ldyBfXygpKTtcbn1cblxuZXhwb3J0IHZhciBfX3NwcmVhZEFycmF5cyA9IGZ1bmN0aW9uICgpIHtcbiAgZm9yICh2YXIgcyA9IDAsIGkgPSAwLCBpbCA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBpbDsgaSsrKSBzICs9IGFyZ3VtZW50c1tpXS5sZW5ndGg7XG4gIGZvciAodmFyIHIgPSBBcnJheShzKSwgayA9IDAsIGkgPSAwOyBpIDwgaWw7IGkrKylcbiAgICBmb3IgKHZhciBhID0gYXJndW1lbnRzW2ldLCBqID0gMCwgamwgPSBhLmxlbmd0aDsgaiA8IGpsOyBqKyssIGsrKylcbiAgICAgIHJba10gPSBhW2pdO1xuICByZXR1cm4gcjtcbn07XG4iLCJleHBvcnQgbGV0IFZlcnNpb246IHN0cmluZztcblZlcnNpb24gPSBgJHtwcm9jZXNzLmVudi5WRVJTSU9OfWA7XG5cbi8vIGltcG9ydCBcIkBzdXJ2ZXkvY3JlYXRvci9zdXJ2ZXktY3JlYXRvci1jb3JlLmNzc1wiO1xuXG5leHBvcnQgKiBmcm9tIFwiLi4vU3VydmV5Q3JlYXRvclwiO1xuXG5leHBvcnQgKiBmcm9tIFwiLi4vYWRvcm5lcnMvUm93XCI7XG5leHBvcnQgKiBmcm9tIFwiLi4vYWRvcm5lcnMvUXVlc3Rpb25cIjtcbmV4cG9ydCAqIGZyb20gXCIuLi9hZG9ybmVycy9RdWVzdGlvbkhlYWRlclwiO1xuZXhwb3J0ICogZnJvbSBcIi4uL2Fkb3JuZXJzL1F1ZXN0aW9uRm9vdGVyXCI7XG5leHBvcnQgKiBmcm9tIFwiLi4vYWRvcm5lcnMvUXVlc3Rpb25Ecm9wZG93blwiO1xuZXhwb3J0ICogZnJvbSBcIi4uL2Fkb3JuZXJzL1F1ZXN0aW9uSW1hZ2VcIjtcbmV4cG9ydCAqIGZyb20gXCIuLi9hZG9ybmVycy9RdWVzdGlvblJhdGluZ1wiO1xuZXhwb3J0ICogZnJvbSBcIi4uL2Fkb3JuZXJzL1F1ZXN0aW9uV2lkZ2V0XCI7XG5leHBvcnQgKiBmcm9tIFwiLi4vYWRvcm5lcnMvQ2VsbFF1ZXN0aW9uXCI7XG5leHBvcnQgKiBmcm9tIFwiLi4vYWRvcm5lcnMvQ2VsbFF1ZXN0aW9uRHJvcGRvd25cIjtcbmV4cG9ydCAqIGZyb20gXCIuLi9hZG9ybmVycy9QYWdlXCI7XG5leHBvcnQgKiBmcm9tIFwiLi4vYWRvcm5lcnMvUGFuZWxcIjtcblxuZXhwb3J0ICogZnJvbSBcIi4uL0xvZ29JbWFnZVwiO1xuZXhwb3J0ICogZnJvbSBcIi4uL1F1ZXN0aW9uTGlua1ZhbHVlXCI7XG5leHBvcnQgKiBmcm9tIFwiLi4vUXVlc3Rpb25FbWJlZGRlZFN1cnZleVwiO1xuZXhwb3J0ICogZnJvbSBcIi4uL1F1ZXN0aW9uRWRpdG9yQ29udGVudFwiO1xuZXhwb3J0ICogZnJvbSBcIi4uL0l0ZW1WYWx1ZVdyYXBwZXJcIjtcbmV4cG9ydCAqIGZyb20gXCIuLi9JbWFnZUl0ZW1WYWx1ZVdyYXBwZXJcIjtcbmV4cG9ydCAqIGZyb20gXCIuLi9NYXRyaXhDZWxsV3JhcHBlclwiO1xuZXhwb3J0ICogZnJvbSBcIi4uL1Jlc3VsdHNcIjtcbmV4cG9ydCAqIGZyb20gXCIuLi90b29sYm94L1Rvb2xib3hJdGVtXCI7XG5leHBvcnQgKiBmcm9tIFwiLi4vdG9vbGJveC9Ub29sYm94Q2F0ZWdvcnlcIjtcbmV4cG9ydCAqIGZyb20gXCIuLi90b29sYm94L1Rvb2xib3hcIjtcbmV4cG9ydCAqIGZyb20gXCIuLi90b29sYm94L0FkYXB0aXZlVG9vbGJveFwiO1xuZXhwb3J0ICogZnJvbSBcIi4uL1RhYmJlZE1lbnVcIjtcbmV4cG9ydCAqIGZyb20gXCIuLi9Ob3RpZmllclwiO1xuZXhwb3J0ICogZnJvbSBcIi4uL05hdmlnYXRpb25cIjtcbmV4cG9ydCAqIGZyb20gXCIuLi9TaWRlQmFyXCI7XG5leHBvcnQgKiBmcm9tIFwiLi4vdGFicy9UcmFuc2xhdGlvbkxpbmVTa2VsZXRvblwiO1xuZXhwb3J0ICogZnJvbSBcIi4uL0FjdGlvbkJ1dHRvblwiO1xuZXhwb3J0ICogZnJvbSBcIi4uL1N0cmluZ0VkaXRvclwiO1xuXG5leHBvcnQgKiBmcm9tIFwiLi4vdGFicy9sb2dpYy1vcGVyYXRvclwiO1xuZXhwb3J0ICogZnJvbSBcIi4uL3RhYnMvRGVzaWduZXJcIjtcbmV4cG9ydCAqIGZyb20gXCIuLi90YWJzL0VtYmVkXCI7XG5leHBvcnQgKiBmcm9tIFwiLi4vdGFicy9Kc29uRWRpdG9yQWNlXCI7XG5leHBvcnQgKiBmcm9tIFwiLi4vdGFicy9Kc29uRWRpdG9yVGV4dGFyZWFcIjtcbmV4cG9ydCAqIGZyb20gXCIuLi90YWJzL0xvZ2ljXCI7XG5leHBvcnQgKiBmcm9tIFwiLi4vdGFicy9QcmV2aWV3XCI7XG5leHBvcnQgKiBmcm9tIFwiLi4vdGFicy9UcmFuc2xhdGlvblwiO1xuZXhwb3J0ICogZnJvbSBcIi4uL3RhYnMvU3VydmV5U2ltdWxhdG9yXCI7XG5cbmV4cG9ydCAqIGZyb20gXCIuLi9ldmVudHNcIjtcbmV4cG9ydCAqIGZyb20gXCIuLi9PYmplY3RTZWxlY3RvclwiO1xuZXhwb3J0ICogZnJvbSBcIi4uL1Byb3BlcnR5R3JpZFwiO1xuXG5leHBvcnQgeyBlZGl0b3JMb2NhbGl6YXRpb24sIGxvY2FsaXphdGlvbiB9IGZyb20gXCJzdXJ2ZXktY3JlYXRvci1jb3JlXCI7XG5leHBvcnQgeyBzZXR0aW5ncyB9IGZyb20gXCJzdXJ2ZXktY3JlYXRvci1jb3JlXCI7XG5leHBvcnQgeyBzdmdCdW5kbGUgfSBmcm9tIFwic3VydmV5LWNyZWF0b3ItY29yZVwiO1xuZXhwb3J0IHsgU3VydmV5TG9naWMsIFN1cnZleUxvZ2ljVUkgfSBmcm9tIFwic3VydmV5LWNyZWF0b3ItY29yZVwiO1xuZXhwb3J0IHsgU3VydmV5UXVlc3Rpb25FZGl0b3JEZWZpbml0aW9uIH0gZnJvbSBcInN1cnZleS1jcmVhdG9yLWNvcmVcIjtcbmV4cG9ydCB7IElTdXJ2ZXlDcmVhdG9yT3B0aW9ucywgSVByb3BlcnR5R3JpZEVkaXRvciB9IGZyb20gXCJzdXJ2ZXktY3JlYXRvci1jb3JlXCI7XG5leHBvcnQgeyBUb29sYm94VG9vbFZpZXdNb2RlbCwgUHJvcGVydHlHcmlkRWRpdG9yQ29sbGVjdGlvbiB9IGZyb20gXCJzdXJ2ZXktY3JlYXRvci1jb3JlXCI7XG5leHBvcnQgeyBTdHlsZXNNYW5hZ2VyIH0gZnJvbSBcInN1cnZleS1jcmVhdG9yLWNvcmVcIjtcblxuaW1wb3J0IHsgY2hlY2tMaWJyYXJ5VmVyc2lvbiB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuY2hlY2tMaWJyYXJ5VmVyc2lvbihgJHtwcm9jZXNzLmVudi5WRVJTSU9OfWAsIFwic3VydmV5LWNyZWF0b3ItcmVhY3RcIik7IiwiaW1wb3J0IHsgSVBvcnRhYmxlRHJhZ0V2ZW50LCBJUG9ydGFibGVNb3VzZUV2ZW50IH0gZnJvbSBcInN1cnZleS1jcmVhdG9yLWNvcmVcIjtcblxuZXhwb3J0IGNsYXNzIFJlYWN0TW91c2VFdmVudCBpbXBsZW1lbnRzIElQb3J0YWJsZU1vdXNlRXZlbnQge1xuICBjb25zdHJ1Y3RvcihwdWJsaWMgZXZlbnQ6IFJlYWN0Lk1vdXNlRXZlbnQ8SFRNTERpdkVsZW1lbnQsIE1vdXNlRXZlbnQ+KSB7fVxuICBzdG9wUHJvcGFnYXRpb24oKSB7XG4gICAgdGhpcy5ldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAvL3RoaXMuZXZlbnQubmF0aXZlRXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgLy90aGlzLmV2ZW50Lm5hdGl2ZUV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xuICB9XG4gIHByZXZlbnREZWZhdWx0KCkge1xuICAgIHRoaXMuZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAvL3RoaXMuZXZlbnQubmF0aXZlRXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgfVxuICBnZXQgY2FuY2VsQnViYmxlKCk6IGJvb2xlYW4ge1xuICAgIC8vcmV0dXJuIHRoaXMuZXZlbnQuY2FuY2VsQnViYmxlO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBzZXQgY2FuY2VsQnViYmxlKHZhbHVlOiBib29sZWFuKSB7XG4gICAgLy90aGlzLmV2ZW50LmNhbmNlbEJ1YmJsZSA9IHZhbHVlO1xuICB9XG4gIGdldCB0YXJnZXQoKTogRXZlbnRUYXJnZXQgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5ldmVudC50YXJnZXQ7XG4gIH1cbiAgZ2V0IGN1cnJlbnRUYXJnZXQoKTogRXZlbnRUYXJnZXQgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5ldmVudC5jdXJyZW50VGFyZ2V0O1xuICB9XG4gIGdldCBjbGllbnRYKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuZXZlbnQuY2xpZW50WDtcbiAgfVxuICBnZXQgY2xpZW50WSgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmV2ZW50LmNsaWVudFk7XG4gIH1cbiAgZ2V0IG9mZnNldFgoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5ldmVudC5uYXRpdmVFdmVudC5vZmZzZXRYO1xuICB9XG4gIGdldCBvZmZzZXRZKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuZXZlbnQubmF0aXZlRXZlbnQub2Zmc2V0WTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgUmVhY3REcmFnRXZlbnQgZXh0ZW5kcyBSZWFjdE1vdXNlRXZlbnRcbiAgaW1wbGVtZW50cyBJUG9ydGFibGVEcmFnRXZlbnQge1xuICBjb25zdHJ1Y3RvcihwdWJsaWMgZXZlbnQ6IFJlYWN0LkRyYWdFdmVudDxIVE1MRGl2RWxlbWVudD4pIHtcbiAgICBzdXBlcihldmVudCk7XG4gIH1cblxuICBnZXQgZGF0YVRyYW5zZmVyKCk6IERhdGFUcmFuc2ZlciB7XG4gICAgcmV0dXJuIHRoaXMuZXZlbnQuZGF0YVRyYW5zZmVyO1xuICB9XG59XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBCYXNlLCBTdXJ2ZXlNb2RlbCwgUGFnZU1vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQge1xuICBSZWFjdEVsZW1lbnRGYWN0b3J5LFxuICBTdXJ2ZXlFbGVtZW50QmFzZSxcbiAgU3VydmV5SGVhZGVyXG59IGZyb20gXCJzdXJ2ZXktcmVhY3QtdWlcIjtcbmltcG9ydCB7IENyZWF0b3JCYXNlLCBUYWJEZXNpZ25lclZpZXdNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY3JlYXRvci1jb3JlXCI7XG5pbXBvcnQgeyBTdXJ2ZXlQYWdlTmF2aWdhdG9yIH0gZnJvbSBcIi4uL1BhZ2VOYXZpZ2F0b3JcIjtcbmltcG9ydCB7IFN1cnZleU5hdmlnYXRpb24gfSBmcm9tIFwiLi4vTmF2aWdhdGlvblwiO1xuXG5pbnRlcmZhY2UgSVRhYkRlc2lnbmVyQ29tcG9uZW50UHJvcHMge1xuICBkYXRhOiBUYWJEZXNpZ25lclZpZXdNb2RlbDtcbn1cblxuZXhwb3J0IGNsYXNzIFRhYkRlc2lnbmVyQ29tcG9uZW50IGV4dGVuZHMgU3VydmV5RWxlbWVudEJhc2U8SVRhYkRlc2lnbmVyQ29tcG9uZW50UHJvcHMsIGFueT4ge1xuICBwcml2YXRlIGdldCBtb2RlbCgpOiBUYWJEZXNpZ25lclZpZXdNb2RlbCB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuZGF0YTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IGNyZWF0b3IoKTogQ3JlYXRvckJhc2Uge1xuICAgIHJldHVybiB0aGlzLm1vZGVsLmNyZWF0b3I7XG4gIH1cblxuICBwcml2YXRlIGRlbnlVcGRhdGUgPSAoKSA9PiB7XG4gICAgdGhpcy5kZW55Q29tcG9uZW50VXBkYXRlKCk7XG4gIH1cblxuICBwcml2YXRlIGFsbG93VXBkYXRlID0gKCkgPT4ge1xuICAgIHRoaXMuYWxsb3dDb21wb25lbnRVcGRhdGUoKTtcbiAgfVxuXG4gIHByaXZhdGUgYWRkRHJhZ0Ryb3BFdmVudHMgPSAoKSA9PiB7XG4gICAgdGhpcy5jcmVhdG9yLm9uQmVmb3JlRHJvcC5hZGQodGhpcy5kZW55VXBkYXRlKTtcbiAgICB0aGlzLmNyZWF0b3Iub25BZnRlckRyb3AuYWRkKHRoaXMuYWxsb3dVcGRhdGUpO1xuICB9XG5cbiAgcHJpdmF0ZSBjbGVhckRyYWdEcm9wRXZlbnRzID0gKCkgPT4ge1xuICAgIHRoaXMuY3JlYXRvci5vbkJlZm9yZURyb3AucmVtb3ZlKHRoaXMuZGVueVVwZGF0ZSk7XG4gICAgdGhpcy5jcmVhdG9yLm9uQWZ0ZXJEcm9wLnJlbW92ZSh0aGlzLmFsbG93VXBkYXRlKTtcbiAgfVxuXG4gIGNvbXBvbmVudERpZE1vdW50KCk6IHZvaWQge1xuICAgIHN1cGVyLmNvbXBvbmVudERpZE1vdW50KCk7XG4gICAgdGhpcy5hZGREcmFnRHJvcEV2ZW50cygpO1xuICB9XG5cbiAgY29tcG9uZW50V2lsbFVubW91bnQoKTogdm9pZCB7XG4gICAgc3VwZXIuY29tcG9uZW50V2lsbFVubW91bnQoKTtcbiAgICB0aGlzLmNsZWFyRHJhZ0Ryb3BFdmVudHMoKTtcbiAgICBzdXBlci5jb21wb25lbnRXaWxsVW5tb3VudCgpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldFN0YXRlRWxlbWVudHMoKTogQXJyYXk8QmFzZT4ge1xuICAgIHJldHVybiBbdGhpcy5tb2RlbCwgdGhpcy5tb2RlbC5zdXJ2ZXksIHRoaXMubW9kZWwucGFnZXNDb250cm9sbGVyXTtcbiAgfVxuXG4gIHByaXZhdGUgcmVuZGVyZWRQYWdlc0NhY2hlOiBhbnkgPSB7fTtcbiAgcHJvdGVjdGVkIGdldFJlbmRlcmVkUGFnZXMoKTogSlNYLkVsZW1lbnRbXSB7XG4gICAgaWYgKHRoaXMuY2hhbmdlZFN0YXRlUHJvcE5hbWUgIT09IFwicGFnZXNcIikge1xuICAgICAgdGhpcy5yZW5kZXJlZFBhZ2VzQ2FjaGUgPSB7fTtcbiAgICB9XG4gICAgY29uc3QgcmVuZGVyZWRQYWdlcyA9IFtdO1xuXG4gICAgaWYgKHRoaXMuY3JlYXRvci5wYWdlRWRpdE1vZGUgIT09IFwiYnlwYWdlXCIpIHtcbiAgICAgIGNvbnN0IHBhZ2VzID0gdGhpcy5jcmVhdG9yLnN1cnZleS5wYWdlcztcblxuICAgICAgcGFnZXMuZm9yRWFjaCgocGFnZSwgaW5kZXgpID0+IHtcbiAgICAgICAgbGV0IGNhY2hlZFBhZ2UgPSB0aGlzLnJlbmRlcmVkUGFnZXNDYWNoZVtwYWdlLmlkXTtcbiAgICAgICAgaWYgKCFjYWNoZWRQYWdlKSB7XG4gICAgICAgICAgY2FjaGVkUGFnZSA9IHRoaXMuY3JlYXRlUmVuZGVyZWRQYWdlKHBhZ2UsIGluZGV4KTtcbiAgICAgICAgICB0aGlzLnJlbmRlcmVkUGFnZXNDYWNoZVtwYWdlLmlkXSA9IGNhY2hlZFBhZ2U7XG4gICAgICAgIH1cbiAgICAgICAgcmVuZGVyZWRQYWdlcy5wdXNoKGNhY2hlZFBhZ2UpO1xuICAgICAgfSk7XG5cbiAgICAgIGlmICh0aGlzLm1vZGVsLnNob3dOZXdQYWdlKSB7XG4gICAgICAgIHJlbmRlcmVkUGFnZXMucHVzaCh0aGlzLnJlbmRlck5ld1BhZ2UoXCJzdmMtcGFnZVwiLCB0aGlzLm1vZGVsLm5ld1BhZ2UuaWQgKyBcIi1naG9zdC1uZXctcGFnZVwiKSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHBhZ2UyRGlzcGxheSA9IHRoaXMubW9kZWwucGFnZXNDb250cm9sbGVyLnBhZ2UyRGlzcGxheTtcbiAgICAgIGlmICghIXBhZ2UyRGlzcGxheSkge1xuICAgICAgICBsZXQgY2FjaGVkUGFnZSA9IHRoaXMucmVuZGVyZWRQYWdlc0NhY2hlW3BhZ2UyRGlzcGxheS5pZF07XG4gICAgICAgIGlmICghY2FjaGVkUGFnZSkge1xuICAgICAgICAgIGNhY2hlZFBhZ2UgPSB0aGlzLmNyZWF0ZVJlbmRlcmVkUGFnZShwYWdlMkRpc3BsYXksIDAsIHRydWUpO1xuICAgICAgICAgIHRoaXMucmVuZGVyZWRQYWdlc0NhY2hlW3BhZ2UyRGlzcGxheS5pZF0gPSBjYWNoZWRQYWdlO1xuICAgICAgICB9XG4gICAgICAgIHJlbmRlcmVkUGFnZXMucHVzaChjYWNoZWRQYWdlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcmVuZGVyZWRQYWdlcztcbiAgfVxuICBwcm90ZWN0ZWQgY3JlYXRlUmVuZGVyZWRQYWdlKHBhZ2U6IFBhZ2VNb2RlbCwgaW5kZXg6IG51bWJlciwgaXNHaG9zdFBhZ2U/OiBib29sZWFuKTogYW55IHtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdlxuICAgICAgICBjbGFzc05hbWU9e1wic3ZjLXBhZ2VcIn1cbiAgICAgICAgZGF0YS1zdi1kcm9wLXRhcmdldC1wYWdlPXtwYWdlLm5hbWV9XG4gICAgICAgIGRhdGEtc3YtZHJvcC10YXJnZXQtc3VydmV5LWVsZW1lbnQ9e2lzR2hvc3RQYWdlID8gXCJuZXdHaG9zdFBhZ2VcIiA6IHBhZ2UubmFtZX1cbiAgICAgICAga2V5PXtwYWdlLmlkICsgXCItXCIgKyBpbmRleH1cbiAgICAgID5cbiAgICAgICAge3RoaXMucmVuZGVyUGFnZShwYWdlKX1cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbiAgcHJpdmF0ZSByZW5kZXJOZXdQYWdlKGNsYXNzTmFtZTogc3RyaW5nLCBrZXk6IHN0cmluZyA9IFwiXCIpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPFJlYWN0LkZyYWdtZW50IGtleT17a2V5fT5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzTmFtZT17Y2xhc3NOYW1lfVxuICAgICAgICAgIGRhdGEtc3YtZHJvcC10YXJnZXQtc3VydmV5LWVsZW1lbnQ9e1wibmV3R2hvc3RQYWdlXCJ9XG4gICAgICAgID5cbiAgICAgICAgICB7ISF0aGlzLm1vZGVsLm5ld1BhZ2UgPyB0aGlzLnJlbmRlclBhZ2UodGhpcy5tb2RlbC5uZXdQYWdlKSA6IG51bGx9XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9SZWFjdC5GcmFnbWVudD4pO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJQYWdlKHBhZ2VWOiBQYWdlTW9kZWwpOiBKU1guRWxlbWVudCB7XG4gICAgcmV0dXJuIFJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UuY3JlYXRlRWxlbWVudChcInN2Yy1wYWdlXCIsIHsgc3VydmV5OiB0aGlzLmNyZWF0b3Iuc3VydmV5LCBwYWdlOiBwYWdlViwgY3JlYXRvcjogdGhpcy5jcmVhdG9yIH0pO1xuICB9XG4gIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIGNvbnN0IGRlc2lnbmVyVGFiQ2xhc3NOYW1lID0gXCJzdmMtdGFiLWRlc2lnbmVyIFwiICsgdGhpcy5tb2RlbC5nZXRSb290Q3NzKCk7XG5cbiAgICByZXR1cm4gKFxuICAgICAgPFJlYWN0LkZyYWdtZW50PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2Yy1mbGV4LWNvbHVtblwiPlxuICAgICAgICAgIHt0aGlzLm1vZGVsLmlzVG9vbGJveFZpc2libGUgPyBSZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLmNyZWF0ZUVsZW1lbnQoXCJzdmMtYWRhcHRpdmUtdG9vbGJveFwiLCB7IG1vZGVsOiB0aGlzLmNyZWF0b3IgfSkgOiBudWxsfVxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e2Rlc2lnbmVyVGFiQ2xhc3NOYW1lfSBvbkNsaWNrPXsoKSA9PiB0aGlzLm1vZGVsLmNsaWNrRGVzaWduZXIoKX0+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmMtdGFiLWRlc2lnbmVyX2NvbnRlbnRcIj5cbiAgICAgICAgICAgIHt0aGlzLm1vZGVsLnNob3dQbGFjZWhvbGRlciA/IHRoaXMucmVuZGVyUGxhY2VIb2xkZXIoKSA6IHRoaXMucmVuZGVyVGFiQ29udGVudCgpfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvUmVhY3QuRnJhZ21lbnQ+XG4gICAgKTtcbiAgfVxuXG4gIHJlbmRlckhlYWRlcihjb25kaXRpb246IGJvb2xlYW4pOiBKU1guRWxlbWVudCB7XG4gICAgaWYgKCFjb25kaXRpb24pIHJldHVybiBudWxsO1xuXG4gICAgY29uc3Qgc3VydmV5OiBTdXJ2ZXlNb2RlbCA9IHRoaXMuY3JlYXRvci5zdXJ2ZXk7XG4gICAgcmV0dXJuICg8UmVhY3QuRnJhZ21lbnQ+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2Yy1kZXNpZ25lci1oZWFkZXJcIj5cbiAgICAgICAgPFN1cnZleUhlYWRlciBzdXJ2ZXk9e3N1cnZleX0+PC9TdXJ2ZXlIZWFkZXI+XG4gICAgICA8L2Rpdj5cbiAgICA8L1JlYWN0LkZyYWdtZW50Pik7XG4gIH1cbiAgcmVuZGVyUGxhY2VIb2xkZXIoKTogSlNYLkVsZW1lbnQge1xuICAgIGNvbnN0IHN1cnZleUhlYWRlciA9IHRoaXMucmVuZGVySGVhZGVyKHRoaXMuY3JlYXRvci5hbGxvd0VkaXRTdXJ2ZXlUaXRsZSAmJiB0aGlzLmNyZWF0b3Iuc2hvd0hlYWRlckluRW1wdHlTdXJ2ZXkpO1xuXG4gICAgcmV0dXJuICg8UmVhY3QuRnJhZ21lbnQ+XG4gICAgICB7c3VydmV5SGVhZGVyfVxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmMtZGVzaWduZXJfX3BsYWNlaG9sZGVyLWNvbnRhaW5lclwiIGRhdGEtc3YtZHJvcC10YXJnZXQtc3VydmV5LWVsZW1lbnQ9e1wibmV3R2hvc3RQYWdlXCJ9PlxuICAgICAgICB7dGhpcy5yZW5kZXJQbGFjZUhvbGRlckNvbnRlbnQoKX1cbiAgICAgICAge3RoaXMucmVuZGVyTmV3UGFnZShcInN2Yy1kZXNpZ25lci1wbGFjZWhvbGRlci1wYWdlXCIpfVxuICAgICAgPC9kaXY+XG4gICAgPC9SZWFjdC5GcmFnbWVudD4pO1xuICB9XG4gIHJlbmRlclBsYWNlSG9sZGVyQ29udGVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgcmV0dXJuIDxzcGFuIGNsYXNzTmFtZT1cInN2Yy1kZXNpZ25lci1wbGFjZWhvbGRlci10ZXh0IHN2Yy10ZXh0IHN2Yy10ZXh0LS1ub3JtYWxcIj57dGhpcy5tb2RlbC5wbGFjZWhvbGRlclRleHR9PC9zcGFuPjtcbiAgfVxuICByZW5kZXJUYWJDb250ZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICBjb25zdCBzdXJ2ZXk6IFN1cnZleU1vZGVsID0gdGhpcy5jcmVhdG9yLnN1cnZleTtcbiAgICBjb25zdCBzdXJ2ZXlIZWFkZXIgPSB0aGlzLnJlbmRlckhlYWRlcih0aGlzLmNyZWF0b3IuYWxsb3dFZGl0U3VydmV5VGl0bGUpO1xuICAgIGNvbnN0IHN0eWxlOiBhbnkgPSB7fTtcbiAgICBpZiAoISFzdXJ2ZXkud2lkdGgpIHtcbiAgICAgIHN0eWxlLm1heFdpZHRoID0gc3VydmV5LnJlbmRlcmVkV2lkdGg7XG4gICAgfVxuXG4gICAgcmV0dXJuICg8UmVhY3QuRnJhZ21lbnQ+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT17dGhpcy5tb2RlbC5kZXNpZ25lckNzc30gc3R5bGU9e3N0eWxlfT5cbiAgICAgICAge3N1cnZleUhlYWRlcn1cbiAgICAgICAgPFN1cnZleU5hdmlnYXRpb24gc3VydmV5PXtzdXJ2ZXl9IGxvY2F0aW9uPVwidG9wXCIgLz5cbiAgICAgICAge3RoaXMuZ2V0UmVuZGVyZWRQYWdlcygpfVxuICAgICAgICA8U3VydmV5TmF2aWdhdGlvblxuICAgICAgICAgIHN1cnZleT17c3VydmV5fVxuICAgICAgICAgIGxvY2F0aW9uPVwiYm90dG9tXCJcbiAgICAgICAgICBjc3M9e3N1cnZleS5jc3N9XG4gICAgICAgIC8+XG4gICAgICA8L2Rpdj5cbiAgICAgIHt0aGlzLmNyZWF0b3Iuc2hvd1BhZ2VOYXZpZ2F0b3IgP1xuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2Yy10YWItZGVzaWduZXJfX3BhZ2UtbmF2aWdhdG9yXCI+PFN1cnZleVBhZ2VOYXZpZ2F0b3JcbiAgICAgICAgICBwYWdlc0NvbnRyb2xsZXI9e3RoaXMubW9kZWwucGFnZXNDb250cm9sbGVyfSBwYWdlRWRpdE1vZGU9e3RoaXMubW9kZWwuY3JlYXRvci5wYWdlRWRpdE1vZGV9XG4gICAgICAgID48L1N1cnZleVBhZ2VOYXZpZ2F0b3I+PC9kaXY+XG4gICAgICAgIDogbnVsbFxuICAgICAgfVxuICAgIDwvUmVhY3QuRnJhZ21lbnQ+KTtcbiAgfVxufVxuXG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcInN2Yy10YWItZGVzaWduZXJcIiwgKHByb3BzKSA9PiB7XG4gIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFxuICAgIFRhYkRlc2lnbmVyQ29tcG9uZW50LFxuICAgIHByb3BzIGFzIElUYWJEZXNpZ25lckNvbXBvbmVudFByb3BzXG4gICk7XG59KTtcbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IEJhc2UgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7XG4gIFJlYWN0RWxlbWVudEZhY3RvcnksXG4gIFN1cnZleSxcbiAgU3VydmV5RWxlbWVudEJhc2Vcbn0gZnJvbSBcInN1cnZleS1yZWFjdC11aVwiO1xuaW1wb3J0IHsgRW1iZWRNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY3JlYXRvci1jb3JlXCI7XG5cbmludGVyZmFjZSBJVGFiRW1iZWRDb21wb25lbnRQcm9wcyB7XG4gIGRhdGE6IEVtYmVkTW9kZWw7XG59XG5cbmV4cG9ydCBjbGFzcyBUYWJFbWJlZENvbXBvbmVudCBleHRlbmRzIFN1cnZleUVsZW1lbnRCYXNlPFxuICBJVGFiRW1iZWRDb21wb25lbnRQcm9wcyxcbiAgYW55XG4+IHtcbiAgcHJpdmF0ZSBnZXQgbW9kZWwoKTogRW1iZWRNb2RlbCB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuZGF0YTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0U3RhdGVFbGVtZW50KCk6IEJhc2Uge1xuICAgIHJldHVybiB0aGlzLm1vZGVsO1xuICB9XG4gIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2Yy1jcmVhdG9yLXRhYl9fY29udGVudCBzdmMtZW1iZWQtdGFiX19jb250ZW50XCI+XG4gICAgICAgIHt0aGlzLm1vZGVsLnN1cnZleSA/IDxTdXJ2ZXkgbW9kZWw9e3RoaXMubW9kZWwuc3VydmV5fT48L1N1cnZleT4gOiBudWxsfVxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxufVxuXG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcbiAgXCJzdmMtdGFiLWVtYmVkXCIsXG4gIChwcm9wczogSVRhYkVtYmVkQ29tcG9uZW50UHJvcHMpID0+IHtcbiAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChUYWJFbWJlZENvbXBvbmVudCwgcHJvcHMpO1xuICB9XG4pO1xuIiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgQmFzZSB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgUmVhY3RFbGVtZW50RmFjdG9yeSwgU3VydmV5RWxlbWVudEJhc2UgfSBmcm9tIFwic3VydmV5LXJlYWN0LXVpXCI7XG5pbXBvcnQgeyBBY2VKc29uRWRpdG9yTW9kZWwgfSBmcm9tIFwic3VydmV5LWNyZWF0b3ItY29yZVwiO1xuXG5pbnRlcmZhY2UgSVRhYkpzb25FZGl0b3JBY2VDb21wb25lbnRQcm9wcyB7XG4gIGRhdGE6IEFjZUpzb25FZGl0b3JNb2RlbDtcbn1cblxuZXhwb3J0IGNsYXNzIFRhYkpzb25FZGl0b3JBY2VDb21wb25lbnQgZXh0ZW5kcyBTdXJ2ZXlFbGVtZW50QmFzZTxcbiAgSVRhYkpzb25FZGl0b3JBY2VDb21wb25lbnRQcm9wcyxcbiAgYW55XG4+IHtcbiAgcHJpdmF0ZSBhY2VFZGl0b3JyUmVmOiBSZWFjdC5SZWZPYmplY3Q8SFRNTERpdkVsZW1lbnQ+O1xuICBjb25zdHJ1Y3Rvcihwcm9wczogSVRhYkpzb25FZGl0b3JBY2VDb21wb25lbnRQcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLmFjZUVkaXRvcnJSZWYgPSBSZWFjdC5jcmVhdGVSZWYoKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0U3RhdGVFbGVtZW50KCk6IEJhc2Uge1xuICAgIHJldHVybiB0aGlzLm1vZGVsO1xuICB9XG4gIHByaXZhdGUgZ2V0IG1vZGVsKCk6IEFjZUpzb25FZGl0b3JNb2RlbCB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuZGF0YTtcbiAgfVxuICBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICB0aGlzLm1vZGVsLmluaXQoYWNlLmVkaXQodGhpcy5hY2VFZGl0b3JyUmVmLmN1cnJlbnQgYXMgSFRNTEVsZW1lbnQpKTtcbiAgfVxuICByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmMtY3JlYXRvci10YWJfX2NvbnRlbnRcIj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmMtanNvbi1lZGl0b3ItdGFiX19jb250ZW50XCI+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3NOYW1lPVwic3ZjLWpzb24tZWRpdG9yLXRhYl9fYWNlLWVkaXRvclwiXG4gICAgICAgICAgICByZWY9e3RoaXMuYWNlRWRpdG9yclJlZn1cbiAgICAgICAgICA+PC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxufVxuXG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcbiAgXCJzdmMtdGFiLWpzb24tZWRpdG9yLWFjZVwiLFxuICAocHJvcHM6IElUYWJKc29uRWRpdG9yQWNlQ29tcG9uZW50UHJvcHMpID0+IHtcbiAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChUYWJKc29uRWRpdG9yQWNlQ29tcG9uZW50LCBwcm9wcyk7XG4gIH1cbik7XG4iLCJpbXBvcnQgUmVhY3QsIHsgQ2hhbmdlRXZlbnQgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IEJhc2UgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFJlYWN0RWxlbWVudEZhY3RvcnksIFN1cnZleUVsZW1lbnRCYXNlIH0gZnJvbSBcInN1cnZleS1yZWFjdC11aVwiO1xuaW1wb3J0IHsgVGV4dGFyZWFKc29uRWRpdG9yTW9kZWwgfSBmcm9tIFwic3VydmV5LWNyZWF0b3ItY29yZVwiO1xuXG5pbnRlcmZhY2UgSVRhYkpzb25FZGl0b3JUZXh0YXJlYUNvbXBvbmVudFByb3BzIHtcbiAgZGF0YTogVGV4dGFyZWFKc29uRWRpdG9yTW9kZWw7XG59XG5cbmV4cG9ydCBjbGFzcyBUYWJKc29uRWRpdG9yVGV4dGFyZWFDb21wb25lbnQgZXh0ZW5kcyBTdXJ2ZXlFbGVtZW50QmFzZTxcbiAgSVRhYkpzb25FZGl0b3JUZXh0YXJlYUNvbXBvbmVudFByb3BzLFxuICBhbnlcbj4ge1xuICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLm1vZGVsLmNhblNob3dFcnJvcnMgPSBmYWxzZTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0U3RhdGVFbGVtZW50KCk6IEJhc2Uge1xuICAgIHJldHVybiB0aGlzLm1vZGVsO1xuICB9XG4gIHByaXZhdGUgZ2V0IG1vZGVsKCk6IFRleHRhcmVhSnNvbkVkaXRvck1vZGVsIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5kYXRhO1xuICB9XG4gIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIGNvbnN0IGVycm9yczogSlNYLkVsZW1lbnRbXSA9IFtdO1xuICAgIHZhciBrZXkgPSAxO1xuICAgIGNvbnN0IHVzZXJGcmllbmRseUVycm9yczogYW55W10gPSB0aGlzLm1vZGVsLnVzZXJGcmllbmRseUVycm9ycztcbiAgICBmb3IgKGxldCBpOiBudW1iZXIgPSAwOyBpIDwgdXNlckZyaWVuZGx5RXJyb3JzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBlcnJvcnMucHVzaCg8c3BhbiBrZXk9e2tleX0+PGI+RXJyb3I6IDwvYj48L3NwYW4+KTtcbiAgICAgIGtleSsrO1xuICAgICAgZXJyb3JzLnB1c2goPHNwYW4ga2V5PXtrZXl9Pnt1c2VyRnJpZW5kbHlFcnJvcnNbaV19PC9zcGFuPik7XG4gICAgICBrZXkrKztcbiAgICB9XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3ZjLWNyZWF0b3ItdGFiX19jb250ZW50XCI+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3ZjLWpzb24tZWRpdG9yLXRhYl9fY29udGVudFwiPlxuICAgICAgICAgIDx0ZXh0YXJlYVxuICAgICAgICAgICAgY2xhc3NOYW1lPVwic3ZjLWpzb24tZWRpdG9yLXRhYl9fY29udGVudC1hcmVhXCJcbiAgICAgICAgICAgIHZhbHVlPXt0aGlzLm1vZGVsLnRleHR9XG4gICAgICAgICAgICBvbkNoYW5nZT17KGU6IENoYW5nZUV2ZW50PEhUTUxUZXh0QXJlYUVsZW1lbnQ+KSA9PlxuICAgICAgICAgICAgICAodGhpcy5tb2RlbC50ZXh0ID0gZS50YXJnZXQudmFsdWUpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBvbktleURvd249eyhlKSA9PiB0aGlzLm1vZGVsLmNoZWNrS2V5KGUsIGUpfVxuICAgICAgICAgICAgZGlzYWJsZWQ9e3RoaXMubW9kZWwucmVhZE9ubHl9XG4gICAgICAgICAgICBhcmlhLWxhYmVsPXt0aGlzLm1vZGVsLmFyaWFMYWJlbH1cbiAgICAgICAgICA+PC90ZXh0YXJlYT5cbiAgICAgICAgICB7ZXJyb3JzLmxlbmd0aCA+IDAgJiZcbiAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzTmFtZT1cInN2Yy1qc29uLWVkaXRvci10YWJfX2VycnJvc19idXR0b25cIiBvbkNsaWNrPXsoKSA9PiB0aGlzLm1vZGVsLnRvZ2dsZUVycm9ycygpfT5cbiAgICAgICAgICAgICAge3RoaXMubW9kZWwuZXJyb3JCdXR0b25UZXh0fVxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgfVxuICAgICAgICAgIHt0aGlzLm1vZGVsLmNhblNob3dFcnJvcnMgJiYgPGRpdiBjbGFzc05hbWU9XCJzdmMtanNvbi1lZGl0b3ItdGFiX19jb250ZW50LWVycm9yc1wiPntlcnJvcnN9PC9kaXY+XG4gICAgICAgICAgfVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbn1cblxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXG4gIFwic3ZjLXRhYi1qc29uLWVkaXRvci10ZXh0YXJlYVwiLFxuICAocHJvcHM6IElUYWJKc29uRWRpdG9yVGV4dGFyZWFDb21wb25lbnRQcm9wcykgPT4ge1xuICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFRhYkpzb25FZGl0b3JUZXh0YXJlYUNvbXBvbmVudCwgcHJvcHMpO1xuICB9XG4pO1xuIiwiaW1wb3J0IFJlYWN0LCB7IEZyYWdtZW50IH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBBY3Rpb24sIEJhc2UgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFJlYWN0RWxlbWVudEZhY3RvcnksIFN1cnZleUVsZW1lbnRCYXNlLCBTdXJ2ZXksIGF0dGFjaEtleTJjbGljayB9IGZyb20gXCJzdXJ2ZXktcmVhY3QtdWlcIjtcbmltcG9ydCB7IFN1cnZleUxvZ2ljVUkgfSBmcm9tIFwic3VydmV5LWNyZWF0b3ItY29yZVwiO1xuXG5leHBvcnQgY2xhc3MgVGFiTG9naWNBZGRCdXR0b25Db21wb25lbnQgZXh0ZW5kcyBTdXJ2ZXlFbGVtZW50QmFzZTxhbnksIGFueT4ge1xuICBwcml2YXRlIGdldCBtb2RlbCgpOiBBY3Rpb24ge1xuICAgIHJldHVybiB0aGlzLnByb3BzLmJ1dHRvbjtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0U3RhdGVFbGVtZW50KCk6IEJhc2Uge1xuICAgIHJldHVybiB0aGlzLm1vZGVsO1xuICB9XG5cbiAgcmVuZGVyRWxlbWVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgY29uc3QgYnV0dG9uQ2xhc3NOYW1lID0gXCJzdmMtbG9naWMtdGFiX19jb250ZW50LWFjdGlvbiBzdmMtYnRuXCIgKyAoKHRoaXMubW9kZWwuZW5hYmxlZCAhPT0gdW5kZWZpbmVkICYmICF0aGlzLm1vZGVsLmVuYWJsZWQpID8gXCIgc3ZjLWxvZ2ljLXRhYl9fY29udGVudC1hY3Rpb24tLWRpc2FibGVkXCIgOiBcIlwiKTtcbiAgICByZXR1cm4gYXR0YWNoS2V5MmNsaWNrKDxkaXZcbiAgICAgIHJvbGU9XCJidXR0b25cIlxuICAgICAgb25DbGljaz17KGUpID0+IHtcbiAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgdGhpcy5tb2RlbC5hY3Rpb24oKTtcbiAgICAgIH19XG4gICAgICBjbGFzc05hbWU9e2J1dHRvbkNsYXNzTmFtZX1cbiAgICAgIHRpdGxlPXt0aGlzLm1vZGVsLnRpdGxlfVxuICAgID5cbiAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInN2Yy10ZXh0IHN2Yy10ZXh0LS1ub3JtYWwgc3ZjLXRleHQtLWJvbGRcIj5cbiAgICAgICAge3RoaXMubW9kZWwudGl0bGV9XG4gICAgICA8L3NwYW4+XG4gICAgPC9kaXY+KTtcbiAgfVxufVxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXCJzdmMtdGFiLWxvZ2ljLWFkZC1idXR0b25cIiwgKHByb3BzKSA9PiB7XG4gIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFRhYkxvZ2ljQWRkQnV0dG9uQ29tcG9uZW50LCBwcm9wcyk7XG59KTtcblxuZXhwb3J0IGNsYXNzIFRhYkxvZ2ljQ29tcG9uZW50IGV4dGVuZHMgU3VydmV5RWxlbWVudEJhc2U8YW55LCBhbnk+IHtcbiAgcHJpdmF0ZSBnZXQgbW9kZWwoKTogU3VydmV5TG9naWNVSSB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuZGF0YTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0U3RhdGVFbGVtZW50KCk6IEJhc2Uge1xuICAgIHJldHVybiB0aGlzLm1vZGVsO1xuICB9XG5cbiAgcmVuZGVyRWxlbWVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgdmFyIGxvZ2ljID0gdGhpcy5tb2RlbDtcbiAgICB2YXIgcm9vdENsYXNzID0gXCJzdmMtY3JlYXRvci10YWJfX2NvbnRlbnRcIjtcbiAgICB2YXIgY29udGVudCA9IHRoaXMucmVuZGVyVmlld0NvbnRlbnQoKTtcbiAgICByZXR1cm4gPGRpdiBjbGFzc05hbWU9e3Jvb3RDbGFzc30+e2NvbnRlbnR9PC9kaXY+O1xuICB9XG4gIHByaXZhdGUgcmVuZGVyVmlld0NvbnRlbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIGNvbnN0IGxvZ2ljVGFiQ2xhc3NOYW1lID0gXCJzdmMtcGx1Z2luLXRhYl9fY29udGVudCBzdmMtbG9naWMtdGFiX19jb250ZW50IFwiICsgKHRoaXMubW9kZWwuaGFzSXRlbXMgPyBcIlwiIDogXCJzdmMtbG9naWMtdGFiX19lbXB0eVwiKTtcbiAgICBjb25zdCBhZGRMb2dpYyA9ICF0aGlzLm1vZGVsLnJlYWRPbmx5ID8gPFRhYkxvZ2ljQWRkQnV0dG9uQ29tcG9uZW50IGJ1dHRvbj17dGhpcy5tb2RlbC5hZGROZXdCdXR0b259IC8+IDogdW5kZWZpbmVkO1xuICAgIHJldHVybiAoXG4gICAgICA8RnJhZ21lbnQ+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtsb2dpY1RhYkNsYXNzTmFtZX0+XG4gICAgICAgICAgPFN1cnZleSBtb2RlbD17dGhpcy5tb2RlbC5pdGVtc1N1cnZleX0+PC9TdXJ2ZXk+XG4gICAgICAgICAge3RoaXMubW9kZWwuaGFzSXRlbXMgPyBudWxsIDogKFxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmMtbG9naWMtdGFiX19jb250ZW50LWVtcHR5XCIgPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJzdmMtdGV4dFwiPnt0aGlzLm1vZGVsLmVtcHR5VGFiUGxhY2Vob2xkZXJ9PC9zcGFuPlxuICAgICAgICAgICAgPC9kaXY+KX1cbiAgICAgICAgICB7YWRkTG9naWN9XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9GcmFnbWVudD5cbiAgICApO1xuICB9XG59XG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcInN2Yy10YWItbG9naWNcIiwgKHByb3BzKSA9PiB7XG4gIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFRhYkxvZ2ljQ29tcG9uZW50LCBwcm9wcyk7XG59KTtcbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IEFjdGlvbiwgQmFzZSB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHtcbiAgU3VydmV5QWN0aW9uQmFyLFxuICBSZWFjdEVsZW1lbnRGYWN0b3J5LFxuICBTdXJ2ZXlFbGVtZW50QmFzZSxcbiAgYXR0YWNoS2V5MmNsaWNrXG59IGZyb20gXCJzdXJ2ZXktcmVhY3QtdWlcIjtcbmltcG9ydCB7IFRlc3RTdXJ2ZXlUYWJWaWV3TW9kZWwgfSBmcm9tIFwic3VydmV5LWNyZWF0b3ItY29yZVwiO1xuaW1wb3J0IHsgU3VydmV5U2ltdWxhdG9yIH0gZnJvbSBcIi4vU3VydmV5U2ltdWxhdG9yXCI7XG5pbXBvcnQgeyBTdXJ2ZXlSZXN1bHRzIH0gZnJvbSBcIi4uL1Jlc3VsdHNcIjtcblxuZXhwb3J0IGNsYXNzIFRhYlByZXZpZXdUZXN0U3VydmV5QWdhaW5Db21wb25lbnQgZXh0ZW5kcyBTdXJ2ZXlFbGVtZW50QmFzZTxhbnksIGFueT4ge1xuICBwcml2YXRlIGdldCBtb2RlbCgpOiBBY3Rpb24ge1xuICAgIHJldHVybiB0aGlzLnByb3BzLmJ1dHRvbjtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0U3RhdGVFbGVtZW50KCk6IEJhc2Uge1xuICAgIHJldHVybiB0aGlzLm1vZGVsO1xuICB9XG5cbiAgcmVuZGVyRWxlbWVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgY29uc3QgYnV0dG9uQ2xhc3NOYW1lID0gXCJzdmMtcHJldmlld19fdGVzdC1hZ2FpbiBzdmMtYnRuXCI7XG4gICAgcmV0dXJuIGF0dGFjaEtleTJjbGljayg8ZGl2XG4gICAgICByb2xlPVwiYnV0dG9uXCJcbiAgICAgIG9uQ2xpY2s9eyhlKSA9PiB7XG4gICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIHRoaXMubW9kZWwuYWN0aW9uKCk7XG4gICAgICB9fVxuICAgICAgY2xhc3NOYW1lPXtidXR0b25DbGFzc05hbWV9XG4gICAgICB0aXRsZT17dGhpcy5tb2RlbC50aXRsZX1cbiAgICA+XG4gICAgICA8c3BhbiBjbGFzc05hbWU9XCJzdmMtdGV4dCBzdmMtdGV4dC0tbm9ybWFsIHN2Yy10ZXh0LS1ib2xkXCI+XG4gICAgICAgIHt0aGlzLm1vZGVsLnRpdGxlfVxuICAgICAgPC9zcGFuPlxuICAgIDwvZGl2Pik7XG4gIH1cbn1cblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFwic3ZjLXRhYi1wcmV2aWV3LXRlc3QtYWdhaW5cIiwgKHByb3BzKSA9PiB7XG4gIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFRhYlByZXZpZXdUZXN0U3VydmV5QWdhaW5Db21wb25lbnQsIHByb3BzKTtcbn0pO1xuXG5leHBvcnQgY2xhc3MgVGFiUHJldmlld1N1cnZleUNvbXBvbmVudCBleHRlbmRzIFN1cnZleUVsZW1lbnRCYXNlPGFueSwgYW55PiB7XG4gIHByaXZhdGUgZ2V0IG1vZGVsKCk6IFRlc3RTdXJ2ZXlUYWJWaWV3TW9kZWwge1xuICAgIHJldHVybiB0aGlzLnByb3BzLmRhdGE7XG4gIH1cbiAgcHJvdGVjdGVkIGdldFN0YXRlRWxlbWVudCgpOiBCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5tb2RlbDtcbiAgfVxuXG4gIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIGNvbnN0IHRhYkNvbnRlbnRDbGFzc05hbWUgPSBcInN2Yy1jcmVhdG9yLXRhYl9fY29udGVudCBzdmMtdGVzdC10YWJfX2NvbnRlbnRcIiArICh0aGlzLm1vZGVsLmlzUGFnZVRvb2xiYXJWaXNpYmxlID8gXCIgc3ZjLWNyZWF0b3ItdGFiX19jb250ZW50LS13aXRoLXRvb2xiYXJcIiA6IFwiXCIpO1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT17dGFiQ29udGVudENsYXNzTmFtZX0+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3ZjLXBsdWdpbi10YWJfX2NvbnRlbnRcIj5cbiAgICAgICAgICA8U3VydmV5U2ltdWxhdG9yIG1vZGVsPXt0aGlzLm1vZGVsLnNpbXVsYXRvcn0+PC9TdXJ2ZXlTaW11bGF0b3I+XG4gICAgICAgICAgeyF0aGlzLm1vZGVsLmlzUnVubmluZyA/IDxUYWJQcmV2aWV3VGVzdFN1cnZleUFnYWluQ29tcG9uZW50IGJ1dHRvbj17dGhpcy5tb2RlbC50ZXN0QWdhaW5BY3Rpb259IC8+IDogbnVsbH1cbiAgICAgICAgICB7IXRoaXMubW9kZWwuaXNSdW5uaW5nID8gPFN1cnZleVJlc3VsdHMgc3VydmV5PXt0aGlzLm1vZGVsLnNpbXVsYXRvci5zdXJ2ZXl9IC8+IDogbnVsbH1cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIHt0aGlzLmdldEJvdHRvbVRvb2xiYXIoKX1cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbiAgZ2V0Qm90dG9tVG9vbGJhcigpOiBKU1guRWxlbWVudCB7XG4gICAgaWYgKHRoaXMubW9kZWwuaXNQYWdlVG9vbGJhclZpc2libGUpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3ZjLXRlc3QtdGFiX19jb250ZW50LWFjdGlvbnNcIj5cbiAgICAgICAgICA8U3VydmV5QWN0aW9uQmFyIG1vZGVsPXt0aGlzLm1vZGVsLnBhZ2VzfT48L1N1cnZleUFjdGlvbkJhcj5cbiAgICAgICAgPC9kaXY+XG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cbn1cblxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXCJzdmMtdGFiLXRlc3RcIiwgKHByb3BzKSA9PiB7XG4gIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFRhYlByZXZpZXdTdXJ2ZXlDb21wb25lbnQsIHByb3BzKTtcbn0pO1xuIiwiaW1wb3J0IHsgQmFzZSB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgU3VydmV5LCBTdXJ2ZXlFbGVtZW50QmFzZSB9IGZyb20gXCJzdXJ2ZXktcmVhY3QtdWlcIjtcbmltcG9ydCB7IFN1cnZleVNpbXVsYXRvck1vZGVsIH0gZnJvbSBcInN1cnZleS1jcmVhdG9yLWNvcmVcIjtcbmltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcblxuZXhwb3J0IGNsYXNzIFN1cnZleVNpbXVsYXRvciBleHRlbmRzIFN1cnZleUVsZW1lbnRCYXNlPGFueSwgYW55PiB7XG4gIHByaXZhdGUgZ2V0IG1vZGVsKCk6IFN1cnZleVNpbXVsYXRvck1vZGVsIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5tb2RlbDtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRTdGF0ZUVsZW1lbnQoKTogQmFzZSB7XG4gICAgcmV0dXJuIHRoaXMubW9kZWw7XG4gIH1cblxuICByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICBjb25zdCBtYWluU2ltdWxhdG9yQ2xhc3MgPSB0aGlzLm1vZGVsLmdldFJvb3RDc3MoKTtcbiAgICBpZiAoIXRoaXMubW9kZWwuc3VydmV5KSB7XG4gICAgICByZXR1cm4gPGRpdiBjbGFzc05hbWU9e21haW5TaW11bGF0b3JDbGFzc30+PC9kaXY+O1xuICAgIH1cbiAgICBpZiAodGhpcy5tb2RlbC5oYXNGcmFtZSkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzTmFtZT17bWFpblNpbXVsYXRvckNsYXNzfVxuICAgICAgICAgIG9uS2V5RG93bj17ZSA9PiB0aGlzLm1vZGVsLnRyeVRvWm9vbShlLCBlKX1cbiAgICAgICAgICBvbk1vdXNlRW50ZXI9e3RoaXMubW9kZWwuZGV2aWNlID09PSBcImRlc2t0b3BcIiA/IG51bGwgOiB0aGlzLm1vZGVsLmFjdGl2YXRlWm9vbX1cbiAgICAgICAgICBvbk1vdXNlTGVhdmU9e3RoaXMubW9kZWwuZGV2aWNlID09PSBcImRlc2t0b3BcIiA/IG51bGwgOiB0aGlzLm1vZGVsLmRlYWN0aXZhdGVab29tfVxuICAgICAgICA+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3NOYW1lPVwic3ZkLXNpbXVsYXRvci13cmFwcGVyXCJcbiAgICAgICAgICAgIGlkPVwic3ZkLXNpbXVsYXRvci13cmFwcGVyXCJcbiAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgIHdpZHRoOiB0aGlzLm1vZGVsLnNpbXVsYXRvckZyYW1lLmZyYW1lV2lkdGggKyBcInB4XCIsXG4gICAgICAgICAgICAgIGhlaWdodDogdGhpcy5tb2RlbC5zaW11bGF0b3JGcmFtZS5mcmFtZUhlaWdodCArIFwicHhcIlxuICAgICAgICAgICAgfX1cbiAgICAgICAgICA+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGNsYXNzTmFtZT17XG4gICAgICAgICAgICAgICAgXCJzdmQtc2ltdWxhdG9yLWZyYW1lIFwiICsgdGhpcy5tb2RlbC5zaW11bGF0b3JGcmFtZS5jc3NDbGFzc1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgd2lkdGg6XG4gICAgICAgICAgICAgICAgICB0aGlzLm1vZGVsLnNpbXVsYXRvckZyYW1lLmxhbmRzY2FwZWRGcmFtZVdpZHRoICsgXCJweFwiLFxuICAgICAgICAgICAgICAgIGhlaWdodDpcbiAgICAgICAgICAgICAgICAgIHRoaXMubW9kZWwuc2ltdWxhdG9yRnJhbWUubGFuZHNjYXBlZEZyYW1lSGVpZ2h0ICsgXCJweFwiXG4gICAgICAgICAgICAgIH19XG4gICAgICAgICAgICA+PC9kaXY+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGNsYXNzTmFtZT1cInN2ZC1zaW11bGF0b3JcIlxuICAgICAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgICAgIHdpZHRoOlxuICAgICAgICAgICAgICAgICAgdGhpcy5tb2RlbC5zaW11bGF0b3JGcmFtZS5kZXZpY2VXaWR0aCArIFwicHhcIixcbiAgICAgICAgICAgICAgICBoZWlnaHQ6XG4gICAgICAgICAgICAgICAgICB0aGlzLm1vZGVsLnNpbXVsYXRvckZyYW1lLmRldmljZUhlaWdodCArIFwicHhcIixcbiAgICAgICAgICAgICAgICB0cmFuc2Zvcm06XG4gICAgICAgICAgICAgICAgICBcInNjYWxlKFwiICtcbiAgICAgICAgICAgICAgICAgIHRoaXMubW9kZWwuc2ltdWxhdG9yRnJhbWUuc2NhbGUgK1xuICAgICAgICAgICAgICAgICAgXCIpIHRyYW5zbGF0ZSgtNTAlLCAtNTAlKVwiXG4gICAgICAgICAgICAgIH19XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3ZkLXNpbXVsYXRvci1jb250ZW50XCI+XG4gICAgICAgICAgICAgICAgPFN1cnZleSBtb2RlbD17dGhpcy5tb2RlbC5zdXJ2ZXl9PjwvU3VydmV5PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzc05hbWU9e21haW5TaW11bGF0b3JDbGFzc30+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmQtc2ltdWxhdG9yLWNvbnRlbnRcIj5cbiAgICAgICAgICAgIDxTdXJ2ZXkgbW9kZWw9e3RoaXMubW9kZWwuc3VydmV5fT48L1N1cnZleT5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICApO1xuICAgIH1cbiAgfVxufVxuIiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgQmFzZSB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHtcbiAgUmVhY3RFbGVtZW50RmFjdG9yeSxcbiAgU3VydmV5RWxlbWVudEJhc2UsXG4gIFN1cnZleVxufSBmcm9tIFwic3VydmV5LXJlYWN0LXVpXCI7XG5pbXBvcnQgeyBUcmFuc2xhdGlvbiB9IGZyb20gXCJzdXJ2ZXktY3JlYXRvci1jb3JlXCI7XG5cbmV4cG9ydCBjbGFzcyBUYWJUcmFuc2xhdGlvbkNvbXBvbmVudCBleHRlbmRzIFN1cnZleUVsZW1lbnRCYXNlPGFueSwgYW55PiB7XG4gIHByaXZhdGUgZ2V0IG1vZGVsKCk6IFRyYW5zbGF0aW9uIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5kYXRhO1xuICB9XG4gIHByb3RlY3RlZCBnZXRTdGF0ZUVsZW1lbnQoKTogQmFzZSB7XG4gICAgcmV0dXJuIHRoaXMubW9kZWw7XG4gIH1cbiAgcmVuZGVyRWxlbWVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgaWYgKCF0aGlzLm1vZGVsKSByZXR1cm4gbnVsbDtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmMtY3JlYXRvci10YWJfX2NvbnRlbnQgc3ZjLXRyYW5zbGF0aW9uLXRhYlwiPlxuICAgICAgICB7dGhpcy5yZW5kZXJFbGVtZW50Q29udGVudCgpfVxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxuICByZW5kZXJFbGVtZW50Q29udGVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgaWYgKHRoaXMubW9kZWwuaXNFbXB0eSkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdC1uby1zdHJpbmdzXCI+XG4gICAgICAgICAgPHNwYW4+e3RoaXMubW9kZWwubm9TdHJpbmdzVGV4dH08L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdC1jb250ZW50XCI+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmMtZmxleC1jb2x1bW4gc3Qtc3RyaW5ncy13cmFwcGVyXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2Yy1mbGV4LXJvdyBzdC1zdHJpbmdzLWhlYWRlclwiPlxuICAgICAgICAgICAgICA8U3VydmV5IG1vZGVsPXt0aGlzLm1vZGVsLnN0cmluZ3NIZWFkZXJTdXJ2ZXl9PjwvU3VydmV5PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2Yy1mbGV4LXJvdyBzdmMtcGx1Z2luLXRhYl9fY29udGVudCBzdC1zdHJpbmdzXCI+XG4gICAgICAgICAgICAgIDxTdXJ2ZXkgbW9kZWw9e3RoaXMubW9kZWwuc3RyaW5nc1N1cnZleX0+PC9TdXJ2ZXk+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICApO1xuICAgIH1cbiAgfVxufVxuXG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcInN2Yy10YWItdHJhbnNsYXRpb25cIiwgKHByb3BzKSA9PiB7XG4gIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFRhYlRyYW5zbGF0aW9uQ29tcG9uZW50LCBwcm9wcyk7XG59KTtcbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFJlYWN0RWxlbWVudEZhY3RvcnkgfSBmcm9tIFwic3VydmV5LXJlYWN0LXVpXCI7XG5cbmV4cG9ydCBjbGFzcyBUcmFuc2xhdGlvbkxpbmVTa2VsZXRvbiBleHRlbmRzIFJlYWN0LkNvbXBvbmVudDxhbnksIGFueT4ge1xuICByZW5kZXIoKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwic2QtdHJhbnNsYXRpb24tbGluZS1za2VsZXRvblwiPlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxufVxuXG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcInNkLXRyYW5zbGF0aW9uLWxpbmUtc2tlbGV0b25cIiwgKHByb3BzOiBhbnkpID0+IHtcbiAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoVHJhbnNsYXRpb25MaW5lU2tlbGV0b24sIHByb3BzKTtcbn0pO1xuIiwiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBRdWVzdGlvbkRyb3Bkb3duTW9kZWwsIFJlbmRlcmVyRmFjdG9yeSB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgaW5pdExvZ2ljT3BlcmF0b3IgfSBmcm9tIFwic3VydmV5LWNyZWF0b3ItY29yZVwiO1xuaW1wb3J0IHsgU3VydmV5UXVlc3Rpb25Ecm9wZG93biwgUmVhY3RRdWVzdGlvbkZhY3RvcnkgfSBmcm9tIFwic3VydmV5LXJlYWN0LXVpXCI7XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlMb2dpY09wZXJ0b3IgZXh0ZW5kcyBTdXJ2ZXlRdWVzdGlvbkRyb3Bkb3duIHtcbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgfVxuXG4gIHByb3RlY3RlZCByZW5kZXJJbnB1dCgpOiBKU1guRWxlbWVudCB7XG4gICAgY29uc3QgcSA9IHRoaXMucXVlc3Rpb24gYXMgUXVlc3Rpb25Ecm9wZG93bk1vZGVsO1xuICAgIGluaXRMb2dpY09wZXJhdG9yKHEpO1xuICAgIGNvbnN0IHRleHQgPSAocS5zZWxlY3RlZEl0ZW1Mb2NUZXh0KSA/IHRoaXMucmVuZGVyTG9jU3RyaW5nKHEuc2VsZWN0ZWRJdGVtTG9jVGV4dCkgOiBcIlwiO1xuXG4gICAgcmV0dXJuICg8ZGl2XG4gICAgICBpZD17dGhpcy5xdWVzdGlvbi5pbnB1dElkfVxuICAgICAgY2xhc3NOYW1lPXtxLmdldENvbnRyb2xDbGFzcygpfVxuICAgICAgdGFiSW5kZXg9e3RoaXMucXVlc3Rpb24uaXNJbnB1dFJlYWRPbmx5ID8gdW5kZWZpbmVkIDogMH1cbiAgICAgIG9uQ2xpY2s9e3RoaXMuY2xpY2t9XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1jb21tZW50XG4gICAgICAvLyBAdHMtaWdub3JlXG4gICAgICBkaXNhYmxlZD17dGhpcy5xdWVzdGlvbi5pc0lucHV0UmVhZE9ubHl9XG4gICAgICByZXF1aXJlZD17dGhpcy5xdWVzdGlvbi5pc1JlcXVpcmVkfVxuICAgICAgb25DaGFuZ2U9e3RoaXMudXBkYXRlVmFsdWVPbkV2ZW50fVxuICAgICAgb25JbnB1dD17dGhpcy51cGRhdGVWYWx1ZU9uRXZlbnR9XG4gICAgICBvbktleVVwPXt0aGlzLmtleWhhbmRsZXJ9XG4gICAgICByb2xlPXt0aGlzLnF1ZXN0aW9uLmFyaWFSb2xlfVxuICAgICAgYXJpYS1yZXF1aXJlZD17dGhpcy5xdWVzdGlvbi5hcmlhUmVxdWlyZWR9XG4gICAgICBhcmlhLWxhYmVsPXt0aGlzLnF1ZXN0aW9uLmFyaWFMYWJlbH1cbiAgICAgIGFyaWEtaW52YWxpZD17dGhpcy5xdWVzdGlvbi5hcmlhSW52YWxpZH1cbiAgICAgIGFyaWEtZGVzY3JpYmVkYnk9e3RoaXMucXVlc3Rpb24uYXJpYURlc2NyaWJlZEJ5fVxuICAgID5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPXt0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMuY29udHJvbFZhbHVlfT5cbiAgICAgICAge3RleHR9XG4gICAgICAgIDxkaXY+e3EucmVhZE9ubHlUZXh0fTwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICB7dGhpcy5jcmVhdGVDbGVhckJ1dHRvbigpfVxuICAgIDwvZGl2Pik7XG4gIH1cbn1cblxuUmVhY3RRdWVzdGlvbkZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJRdWVzdGlvbihcInN2LWxvZ2ljLW9wZXJhdG9yXCIsIChwcm9wcykgPT4ge1xuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTdXJ2ZXlMb2dpY09wZXJ0b3IsIHByb3BzKTtcbn0pO1xuXG5SZW5kZXJlckZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJSZW5kZXJlcihcImRyb3Bkb3duXCIsIFwibG9naWNvcGVyYXRvclwiLCBcInN2LWxvZ2ljLW9wZXJhdG9yXCIpOyIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFZlcnRpY2FsUmVzcG9uc2l2aXR5TWFuYWdlciB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgUmVhY3RFbGVtZW50RmFjdG9yeSB9IGZyb20gXCJzdXJ2ZXktcmVhY3QtdWlcIjtcbmltcG9ydCB7IElTdXJ2ZXlDcmVhdG9yVG9vbGJveFByb3BzLCBUb29sYm94IH0gZnJvbSBcIi4vVG9vbGJveFwiO1xuXG5leHBvcnQgY2xhc3MgQWRhcHRpdmVUb29sYm94IGV4dGVuZHMgVG9vbGJveCB7XG4gIHByaXZhdGUgbWFuYWdlcjogVmVydGljYWxSZXNwb25zaXZpdHlNYW5hZ2VyO1xuICBwcml2YXRlIHJvb3RSZWY6IFJlYWN0LlJlZk9iamVjdDxIVE1MRGl2RWxlbWVudD47XG5cbiAgY29uc3RydWN0b3IocHJvcHM6IElTdXJ2ZXlDcmVhdG9yVG9vbGJveFByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMucm9vdFJlZiA9IFJlYWN0LmNyZWF0ZVJlZigpO1xuICB9XG5cbiAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgc3VwZXIuY29tcG9uZW50RGlkTW91bnQoKTtcbiAgICBjb25zdCBjb250YWluZXIgPSB0aGlzLnJvb3RSZWYuY3VycmVudDtcbiAgICBpZiAoIWNvbnRhaW5lcikgcmV0dXJuO1xuICAgIHRoaXMubWFuYWdlciA9IG5ldyBWZXJ0aWNhbFJlc3BvbnNpdml0eU1hbmFnZXIoXG4gICAgICBjb250YWluZXIsXG4gICAgICB0aGlzLnRvb2xib3gsXG4gICAgICBcIi5zdmMtdG9vbGJveF9fdG9vbDpub3QoLnN2LWRvdHMpXCJcbiAgICApO1xuICB9XG4gIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgIHRoaXMubWFuYWdlciAmJiAodGhpcy5tYW5hZ2VyLmRpc3Bvc2UoKSk7XG4gICAgc3VwZXIuY29tcG9uZW50V2lsbFVubW91bnQoKTtcbiAgfVxuICByZW5kZXIoKTogSlNYLkVsZW1lbnQge1xuICAgIGlmICghdGhpcy50b29sYm94Lmhhc0FjdGlvbnMpIHJldHVybiBudWxsO1xuXG4gICAgY29uc3QgY2xhc3NOYW1lID0gXCJzdmMtdG9vbGJveFwiICsgKHRoaXMudG9vbGJveC5pc0NvbXBhY3QgPyBcIiBzdmMtdG9vbGJveC0tY29tcGFjdFwiIDogXCJcIik7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgcmVmPXt0aGlzLnJvb3RSZWZ9IGNsYXNzTmFtZT17Y2xhc3NOYW1lfT5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmMtdG9vbGJveF9fY29udGFpbmVyXCI+XG4gICAgICAgICAgeyh0aGlzLnRvb2xib3guaXNDb21wYWN0IHx8IHRoaXMudG9vbGJveC5jYXRlZ29yaWVzLmxlbmd0aCA9PSAxIHx8ICF0aGlzLnRvb2xib3guc2hvd0NhdGVnb3J5VGl0bGVzKSA/XG4gICAgICAgICAgICAoPGRpdiBjbGFzc05hbWU9XCJzdmMtdG9vbGJveF9fY2F0ZWdvcnlcIj5cbiAgICAgICAgICAgICAge3RoaXMucmVuZGVySXRlbXModGhpcy50b29sYm94LnJlbmRlcmVkQWN0aW9ucywgdGhpcy50b29sYm94LmlzQ29tcGFjdCl9XG4gICAgICAgICAgICA8L2Rpdj4pXG4gICAgICAgICAgICA6IHRoaXMucmVuZGVyQ2F0ZWdvcmllcygpXG4gICAgICAgICAgfVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbn1cblxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXCJzdmMtYWRhcHRpdmUtdG9vbGJveFwiLCAocHJvcHMpID0+IHtcbiAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoQWRhcHRpdmVUb29sYm94LCBwcm9wcyk7XG59KTtcbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IEJhc2UgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFJlYWN0RWxlbWVudEZhY3RvcnksIFN1cnZleUVsZW1lbnRCYXNlIH0gZnJvbSBcInN1cnZleS1yZWFjdC11aVwiO1xuaW1wb3J0IHsgQ3JlYXRvckJhc2UgfSBmcm9tIFwic3VydmV5LWNyZWF0b3ItY29yZVwiO1xuaW1wb3J0IHsgU3VydmV5Q3JlYXRvclRvb2xib3hUb29sIH0gZnJvbSBcIi4vVG9vbGJveEl0ZW1cIjtcbmltcG9ydCB7IFN1cnZleUNyZWF0b3JUb29sYm94Q2F0ZWdvcnkgfSBmcm9tIFwiLi9Ub29sYm94Q2F0ZWdvcnlcIjtcblxuZXhwb3J0IGludGVyZmFjZSBJU3VydmV5Q3JlYXRvclRvb2xib3hQcm9wcyB7XG4gIG1vZGVsOiBDcmVhdG9yQmFzZTtcbn1cblxuZXhwb3J0IGNsYXNzIFRvb2xib3ggZXh0ZW5kcyBTdXJ2ZXlFbGVtZW50QmFzZTxJU3VydmV5Q3JlYXRvclRvb2xib3hQcm9wcywgYW55PiB7XG4gIHB1YmxpYyBnZXQgY3JlYXRvcigpIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5tb2RlbDtcbiAgfVxuICBwdWJsaWMgZ2V0IHRvb2xib3goKSB7XG4gICAgcmV0dXJuIHRoaXMuY3JlYXRvci50b29sYm94O1xuICB9XG4gIHByb3RlY3RlZCBnZXRTdGF0ZUVsZW1lbnQoKTogQmFzZSB7XG4gICAgcmV0dXJuIHRoaXMudG9vbGJveDtcbiAgfVxuXG4gIHJlbmRlcigpOiBKU1guRWxlbWVudCB7XG4gICAgaWYgKCF0aGlzLnRvb2xib3guaGFzQWN0aW9ucykgcmV0dXJuIG51bGw7XG5cbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdmMtdG9vbGJveFwiPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2Yy10b29sYm94X19jb250YWluZXJcIj5cbiAgICAgICAgICB7KHRoaXMudG9vbGJveC5jYXRlZ29yaWVzLmxlbmd0aCA9PSAxIHx8ICF0aGlzLnRvb2xib3guc2hvd0NhdGVnb3J5VGl0bGVzKSA/XG4gICAgICAgICAgICAoPGRpdiBjbGFzc05hbWU9XCJzdmMtdG9vbGJveF9fY2F0ZWdvcnlcIj5cbiAgICAgICAgICAgICAge3RoaXMucmVuZGVySXRlbXModGhpcy50b29sYm94LnZpc2libGVBY3Rpb25zKX1cbiAgICAgICAgICAgIDwvZGl2PilcbiAgICAgICAgICAgIDogdGhpcy5yZW5kZXJDYXRlZ29yaWVzKClcbiAgICAgICAgICB9XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxuXG4gIHJlbmRlckl0ZW1zKGl0ZW1zOiBBcnJheTxhbnk+LCBpc0NvbXBhY3QgPSBmYWxzZSkge1xuICAgIHJldHVybiBpdGVtcy5tYXAoKGl0ZW0sIGl0ZW1JbmRleCkgPT5cbiAgICAgIDxTdXJ2ZXlDcmVhdG9yVG9vbGJveFRvb2wgaXRlbT17KGl0ZW0gYXMgYW55KX0gY3JlYXRvcj17dGhpcy5jcmVhdG9yfSBpc0NvbXBhY3Q9e2lzQ29tcGFjdH0ga2V5PXtcIml0ZW1cIiArIGl0ZW1JbmRleH0gPjwvU3VydmV5Q3JlYXRvclRvb2xib3hUb29sPlxuICAgICk7XG4gIH1cblxuICByZW5kZXJDYXRlZ29yaWVzKCkge1xuICAgIHJldHVybiB0aGlzLnRvb2xib3guY2F0ZWdvcmllcy5tYXAoKGNhdGVnb3J5LCBpbmRleCkgPT4ge1xuICAgICAgcmV0dXJuIDxTdXJ2ZXlDcmVhdG9yVG9vbGJveENhdGVnb3J5IGNhdGVnb3J5PXtjYXRlZ29yeX0gdG9vbGJveD17dGhpcy50b29sYm94fSBrZXk9e1wiaXRlbVwiICsgaW5kZXh9ID48L1N1cnZleUNyZWF0b3JUb29sYm94Q2F0ZWdvcnk+O1xuICAgIH0pO1xuICB9XG59XG5cblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFwic3ZjLXRvb2xib3hcIiwgKHByb3BzKSA9PiB7XG4gIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFRvb2xib3gsIHByb3BzKTtcbn0pO1xuIiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgQmFzZSB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgYXR0YWNoS2V5MmNsaWNrLCBSZWFjdEVsZW1lbnRGYWN0b3J5LCBTdXJ2ZXlFbGVtZW50QmFzZSwgU3ZnSWNvbiB9IGZyb20gXCJzdXJ2ZXktcmVhY3QtdWlcIjtcbmltcG9ydCB7IFF1ZXN0aW9uVG9vbGJveCwgUXVlc3Rpb25Ub29sYm94Q2F0ZWdvcnkgfSBmcm9tIFwic3VydmV5LWNyZWF0b3ItY29yZVwiO1xuaW1wb3J0IHsgU3VydmV5Q3JlYXRvclRvb2xib3hUb29sIH0gZnJvbSBcIi4vVG9vbGJveEl0ZW1cIjtcblxuZXhwb3J0IGludGVyZmFjZSBJU3VydmV5Q3JlYXRvclRvb2xib3hDYXRlZ29yeVByb3BzIHtcbiAgY2F0ZWdvcnk6IFF1ZXN0aW9uVG9vbGJveENhdGVnb3J5O1xuICB0b29sYm94OiBRdWVzdGlvblRvb2xib3g7XG59XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlDcmVhdG9yVG9vbGJveENhdGVnb3J5IGV4dGVuZHMgU3VydmV5RWxlbWVudEJhc2U8SVN1cnZleUNyZWF0b3JUb29sYm94Q2F0ZWdvcnlQcm9wcywgYW55PiB7XG5cbiAgcHVibGljIGdldCBjYXRlZ29yeSgpIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5jYXRlZ29yeTtcbiAgfVxuICBwdWJsaWMgZ2V0IHRvb2xib3goKSB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMudG9vbGJveDtcbiAgfVxuICBwdWJsaWMgZ2V0IGNsYXNzKCkge1xuICAgIHJldHVybiBcInN2Yy10b29sYm94X19jYXRlZ29yeVwiICsgKHRoaXMuY2F0ZWdvcnkuY29sbGFwc2VkID8gXCIgc3ZjLXRvb2xib3hfX2NhdGVnb3J5LS1jb2xsYXBzZWRcIiA6IFwiXCIpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldFN0YXRlRWxlbWVudCgpOiBCYXNlIHtcbiAgICByZXR1cm4gKHRoaXMuY2F0ZWdvcnkgYXMgYW55KTtcbiAgfVxuXG4gIHJlbmRlcigpOiBKU1guRWxlbWVudCB7XG4gICAgY29uc3QgaGVhZGVyID0gdGhpcy5yZW5kZXJDYXRlZ29yeUhlYWRlcigpO1xuICAgIGNvbnN0IGl0ZW1zID0gdGhpcy5yZW5kZXJDYXRlZ29yeUNvbnRlbnQoKTtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9e3RoaXMuY2xhc3N9IGtleT17dGhpcy5jYXRlZ29yeS5uYW1lfT5cbiAgICAgICAge2hlYWRlcn1cbiAgICAgICAge2l0ZW1zfVxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxuXG4gIHJlbmRlckNhdGVnb3J5SGVhZGVyKCk6IEpTWC5FbGVtZW50IHtcbiAgICBsZXQgY2xhc3NOYW1lID0gXCJzdmMtdG9vbGJveF9fY2F0ZWdvcnktaGVhZGVyXCI7XG4gICAgaWYgKHRoaXMudG9vbGJveC5jYW5Db2xsYXBzZUNhdGVnb3JpZXMpIHtcbiAgICAgIGNsYXNzTmFtZSArPSBcIiBzdmMtdG9vbGJveF9fY2F0ZWdvcnktaGVhZGVyLS1jb2xsYXBzZWRcIjtcbiAgICB9XG4gICAgcmV0dXJuIGF0dGFjaEtleTJjbGljayhcbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtjbGFzc05hbWV9IG9uQ2xpY2s9e2UgPT4gdGhpcy5jYXRlZ29yeS50b2dnbGVTdGF0ZSgpfT5cbiAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwic3ZjLXRvb2xib3hfX2NhdGVnb3J5LXRpdGxlXCI+e3RoaXMuY2F0ZWdvcnkubmFtZX08L3NwYW4+XG4gICAgICAgIHt0aGlzLnJlbmRlckJ1dHRvbigpfVxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxuXG4gIHJlbmRlckJ1dHRvbigpOiBKU1guRWxlbWVudCB7XG4gICAgaWYgKCF0aGlzLnRvb2xib3guY2FuQ29sbGFwc2VDYXRlZ29yaWVzKSByZXR1cm4gbnVsbDtcblxuICAgIGNvbnN0IGljb25OYW1lID0gdGhpcy5jYXRlZ29yeS5jb2xsYXBzZWQgPyBcImFycm93LWRvd25cIiA6IFwiYXJyb3ctdXBcIjtcbiAgICBjb25zdCBzdWZmaXhOYW1lID0gdGhpcy5jYXRlZ29yeS5jb2xsYXBzZWQgPyBcImV4cGFuZFwiIDogXCJjb2xsYXBzZVwiO1xuICAgIGNvbnN0IHN2Z0ljb25DbGFzc05hbWUgPSBcInN2Yy10b29sYm94X19jYXRlZ29yeS1oZWFkZXJfX2J1dHRvbiBzdmMtc3RyaW5nLWVkaXRvcl9fYnV0dG9uLS1cIiArIHN1ZmZpeE5hbWU7XG4gICAgcmV0dXJuICg8ZGl2IGNsYXNzTmFtZT1cInN2Yy10b29sYm94X19jYXRlZ29yeS1oZWFkZXJfX2NvbnRyb2xzXCI+XG4gICAgICA8U3ZnSWNvbiBjbGFzc05hbWU9e3N2Z0ljb25DbGFzc05hbWV9IGljb25OYW1lPXtcImljb24tXCIgKyBpY29uTmFtZX0gc2l6ZT17MjR9PjwvU3ZnSWNvbj5cbiAgICA8L2Rpdj4pO1xuICB9XG5cbiAgcHJvdGVjdGVkIHJlbmRlckNhdGVnb3J5Q29udGVudCgpOiBBcnJheTxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5yZW5kZXJJdGVtcyh0aGlzLmNhdGVnb3J5Lml0ZW1zKTtcbiAgfVxuXG4gIHJlbmRlckl0ZW1zKGl0ZW1zOiBBcnJheTxhbnk+LCBpc0NvbXBhY3QgPSBmYWxzZSkge1xuICAgIHJldHVybiBpdGVtcy5tYXAoKGl0ZW0sIGl0ZW1JbmRleCkgPT5cbiAgICAgIDxTdXJ2ZXlDcmVhdG9yVG9vbGJveFRvb2wgaXRlbT17KGl0ZW0gYXMgYW55KX0gY3JlYXRvcj17dGhpcy50b29sYm94LmNyZWF0b3J9IGlzQ29tcGFjdD17aXNDb21wYWN0fSBrZXk9e1wiaXRlbVwiICsgaXRlbUluZGV4fSA+PC9TdXJ2ZXlDcmVhdG9yVG9vbGJveFRvb2w+XG4gICAgKTtcbiAgfVxufVxuXG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcInN2Yy10b29sYm94LWNhdGVnb3J5XCIsIChwcm9wcykgPT4ge1xuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTdXJ2ZXlDcmVhdG9yVG9vbGJveENhdGVnb3J5LCBwcm9wcyk7XG59KTsiLCJpbXBvcnQge1xuICBDcmVhdG9yQmFzZSxcbiAgZWRpdG9yTG9jYWxpemF0aW9uLFxuICBJUXVlc3Rpb25Ub29sYm94SXRlbVxufSBmcm9tIFwic3VydmV5LWNyZWF0b3ItY29yZVwiO1xuaW1wb3J0IFJlYWN0LCB7IENTU1Byb3BlcnRpZXMgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFRvb2xib3hUb29sVmlld01vZGVsIH0gZnJvbSBcInN1cnZleS1jcmVhdG9yLWNvcmVcIjtcbmltcG9ydCB7XG4gIEFjdGlvbixcbiAgQmFzZSxcbiAgU3VydmV5TW9kZWxcbn0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQge1xuICBhdHRhY2hLZXkyY2xpY2ssXG4gIFJlYWN0RWxlbWVudEZhY3RvcnksXG4gIFN2Z0ljb25cbn0gZnJvbSBcInN1cnZleS1yZWFjdC11aVwiO1xuaW1wb3J0IHsgQ3JlYXRvck1vZGVsRWxlbWVudCB9IGZyb20gXCIuLi9Nb2RlbEVsZW1lbnRcIjtcblxuZXhwb3J0IGludGVyZmFjZSBJU3VydmV5Q3JlYXRvclRvb2xib3hJdGVtUHJvcHMge1xuICBpdGVtOiBJUXVlc3Rpb25Ub29sYm94SXRlbTtcbiAgY3JlYXRvcjogQ3JlYXRvckJhc2U7XG4gIGlzQ29tcGFjdDogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGNsYXNzIFN1cnZleUNyZWF0b3JUb29sYm94VG9vbCBleHRlbmRzIENyZWF0b3JNb2RlbEVsZW1lbnQ8XG4gIElTdXJ2ZXlDcmVhdG9yVG9vbGJveEl0ZW1Qcm9wcyxcbiAgYW55XG4+IHtcbiAgbW9kZWw6IFRvb2xib3hUb29sVmlld01vZGVsO1xuXG4gIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICB9XG4gIHByb3RlY3RlZCBjcmVhdGVNb2RlbCgpOiB2b2lkIHtcbiAgICB0aGlzLm1vZGVsID0gbmV3IFRvb2xib3hUb29sVmlld01vZGVsKHRoaXMuaXRlbSwgdGhpcy5wcm9wcy5jcmVhdG9yKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0VXBkYXRlZE1vZGVsUHJvcHMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBbXCJjcmVhdG9yXCIsIFwiaXRlbVwiXTtcbiAgfVxuICBwdWJsaWMgZ2V0IGl0ZW0oKSB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuaXRlbTtcbiAgfVxuICBwdWJsaWMgZ2V0IGNyZWF0b3IoKSB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuY3JlYXRvcjtcbiAgfVxuICBwdWJsaWMgZ2V0IGlzQ29tcGFjdCgpIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5pc0NvbXBhY3Q7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0U3RhdGVFbGVtZW50KCk6IEJhc2Uge1xuICAgIHJldHVybiAodGhpcy5pdGVtIGFzIGFueSk7XG4gIH1cblxuICByZW5kZXIoKTogSlNYLkVsZW1lbnQge1xuICAgIGNvbnN0IGl0ZW0gPSAoKHRoaXMuaXRlbSBhcyBhbnkpIGFzIEFjdGlvbik7XG4gICAgY29uc3QgY2xhc3NOYW1lID0gXCJzdmMtdG9vbGJveF9fdG9vbCBcIiArIGl0ZW0uY3NzICsgKGl0ZW0uaXNWaXNpYmxlID8gXCJcIiA6IFwiIHN2LWFjdGlvbi0taGlkZGVuXCIpO1xuICAgIGNvbnN0IGl0ZW1Db21wb25lbnQgPSBSZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLmNyZWF0ZUVsZW1lbnQoXG4gICAgICB0aGlzLml0ZW0uY29tcG9uZW50IHx8IFwic3ZjLXRvb2xib3gtaXRlbVwiLFxuICAgICAge1xuICAgICAgICBpdGVtOiB0aGlzLml0ZW0sXG4gICAgICAgIGNyZWF0b3I6IHRoaXMuY3JlYXRvcixcbiAgICAgICAgaXNDb21wYWN0OiB0aGlzLmlzQ29tcGFjdFxuICAgICAgfVxuICAgICk7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtjbGFzc05hbWV9IGtleT17aXRlbS5pZH1cbiAgICAgICAgb25Qb2ludGVyRG93bj17KGV2ZW50OiBhbnkpID0+IHtcbiAgICAgICAgICBldmVudC5wZXJzaXN0KCk7XG4gICAgICAgICAgdGhpcy5tb2RlbC5vblBvaW50ZXJEb3duKGV2ZW50KTtcbiAgICAgICAgfX1cbiAgICAgID5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdi1hY3Rpb25fX2NvbnRlbnRcIj5cbiAgICAgICAgICB7KGl0ZW0ubmVlZFNlcGFyYXRvciAmJiAhdGhpcy5jcmVhdG9yLnRvb2xib3guc2hvd0NhdGVnb3J5VGl0bGVzKSA/IChcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3ZjLXRvb2xib3hfX2NhdGVnb3J5LXNlcGFyYXRvclwiPjwvZGl2PlxuICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICAgIHtpdGVtQ29tcG9uZW50fVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFN1cnZleUNyZWF0b3JUb29sYm94SXRlbSBleHRlbmRzIENyZWF0b3JNb2RlbEVsZW1lbnQ8XG4gIElTdXJ2ZXlDcmVhdG9yVG9vbGJveEl0ZW1Qcm9wcyxcbiAgYW55XG4+IHtcbiAgbW9kZWw6IFRvb2xib3hUb29sVmlld01vZGVsO1xuICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgfVxuICBwcm90ZWN0ZWQgY3JlYXRlTW9kZWwoKTogdm9pZCB7XG4gICAgY29uc3QgdG9vbGJveEl0ZW06IElRdWVzdGlvblRvb2xib3hJdGVtID0gdGhpcy5wcm9wcy5pdGVtO1xuICAgIHRoaXMubW9kZWwgPSBuZXcgVG9vbGJveFRvb2xWaWV3TW9kZWwodG9vbGJveEl0ZW0sIHRoaXMucHJvcHMuY3JlYXRvcik7XG4gIH1cbiAgcHJvdGVjdGVkIGdldFVwZGF0ZWRNb2RlbFByb3BzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gW1wiY3JlYXRvclwiLCBcIml0ZW1cIl07XG4gIH1cbiAgcHVibGljIGdldCBpdGVtKCkge1xuICAgIHJldHVybiB0aGlzLnByb3BzLml0ZW07XG4gIH1cbiAgcHVibGljIGdldCBjcmVhdG9yKCkge1xuICAgIHJldHVybiB0aGlzLnByb3BzLmNyZWF0b3I7XG4gIH1cbiAgcHJvdGVjdGVkIGdldFN0YXRlRWxlbWVudCgpOiBCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5tb2RlbDtcbiAgfVxuICByZW5kZXIoKTogSlNYLkVsZW1lbnQge1xuICAgIGNvbnN0IGNsYXNzTmFtZSA9XG4gICAgICBcInN2Yy10b29sYm94X19pdGVtIHN2Yy10b29sYm94X19pdGVtLS1cIiArIHRoaXMuaXRlbS5pY29uTmFtZTtcbiAgICBjb25zdCBhcmlhTGFiZWwgPSB0aGlzLml0ZW0udG9vbHRpcCArIFwiIFwiICsgZWRpdG9yTG9jYWxpemF0aW9uLmdldFN0cmluZyhcInRvb2xib3hcIikgKyBcIiBpdGVtXCI7XG4gICAgcmV0dXJuIGF0dGFjaEtleTJjbGljayhcbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3NOYW1lPXtjbGFzc05hbWV9XG4gICAgICAgIHRhYkluZGV4PXswfVxuICAgICAgICByb2xlPVwiYnV0dG9uXCJcbiAgICAgICAgYXJpYS1sYWJlbD17YXJpYUxhYmVsfVxuICAgICAgICBvbkNsaWNrPXsoZXZlbnQ6IGFueSkgPT4ge1xuICAgICAgICAgIGV2ZW50LnBlcnNpc3QoKTtcbiAgICAgICAgICB0aGlzLm1vZGVsLmNsaWNrKGV2ZW50KTtcbiAgICAgICAgfX1cbiAgICAgID5cbiAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwic3ZjLXRvb2xib3hfX2l0ZW0tY29udGFpbmVyXCI+XG4gICAgICAgICAgPFN2Z0ljb24gc2l6ZT17MjR9IGljb25OYW1lPXt0aGlzLml0ZW0uaWNvbk5hbWV9IHRpdGxlPXthcmlhTGFiZWx9PjwvU3ZnSWNvbj5cbiAgICAgICAgPC9zcGFuPlxuICAgICAgICB7KHRoaXMucHJvcHMuaXNDb21wYWN0ID9cbiAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJzdmMtdG9vbGJveF9faXRlbS1iYW5uZXIgc3ZjLWl0ZW1fX2Jhbm5lclwiPlxuICAgICAgICAgICAgPFN2Z0ljb24gc2l6ZT17MjR9IGljb25OYW1lPXt0aGlzLml0ZW0uaWNvbk5hbWV9IGNsYXNzTmFtZT1cInN2Yy10b29sYm94X19pdGVtLWljb25cIiB0aXRsZT17YXJpYUxhYmVsfT48L1N2Z0ljb24+XG4gICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJzdmMtdG9vbGJveF9faXRlbS10aXRsZVwiPnt0aGlzLml0ZW0udGl0bGV9PC9zcGFuPlxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICA6XG4gICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwic3ZjLXRvb2xib3hfX2l0ZW0tdGl0bGVcIj57dGhpcy5pdGVtLnRpdGxlfTwvc3Bhbj5cbiAgICAgICAgKX1cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbn1cblxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXCJzdmMtdG9vbGJveC1pdGVtXCIsIChwcm9wcykgPT4ge1xuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTdXJ2ZXlDcmVhdG9yVG9vbGJveEl0ZW0sIHByb3BzKTtcbn0pO1xuIiwibW9kdWxlLmV4cG9ydHMgPSBfX1dFQlBBQ0tfRVhURVJOQUxfTU9EVUxFX3JlYWN0X187IiwibW9kdWxlLmV4cG9ydHMgPSBfX1dFQlBBQ0tfRVhURVJOQUxfTU9EVUxFX3JlYWN0X2RvbV9fOyIsIm1vZHVsZS5leHBvcnRzID0gX19XRUJQQUNLX0VYVEVSTkFMX01PRFVMRV9zdXJ2ZXlfY29yZV9fOyIsIm1vZHVsZS5leHBvcnRzID0gX19XRUJQQUNLX0VYVEVSTkFMX01PRFVMRV9zdXJ2ZXlfY3JlYXRvcl9jb3JlX187IiwibW9kdWxlLmV4cG9ydHMgPSBfX1dFQlBBQ0tfRVhURVJOQUxfTU9EVUxFX3N1cnZleV9yZWFjdF91aV9fOyJdLCJzb3VyY2VSb290IjoiIn0=
|