survey-react-ui 1.9.61 → 1.9.62
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/package.json +1 -1
- package/survey-react-ui.d.ts +1 -0
- package/survey-react-ui.js +18 -9
- package/survey-react-ui.min.js +2 -2
package/survey-react-ui.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*!
|
|
2
|
-
* surveyjs - Survey JavaScript library v1.9.
|
|
2
|
+
* surveyjs - Survey JavaScript library v1.9.62
|
|
3
3
|
* Copyright (c) 2015-2022 Devsoft Baltic OÜ - http://surveyjs.io/
|
|
4
4
|
* License: MIT (http://www.opensource.org/licenses/mit-license.php)
|
|
5
5
|
*/
|
|
@@ -1147,7 +1147,7 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
1147
1147
|
|
|
1148
1148
|
|
|
1149
1149
|
|
|
1150
|
-
Object(survey_core__WEBPACK_IMPORTED_MODULE_2__["checkLibraryVersion"])("".concat("1.9.
|
|
1150
|
+
Object(survey_core__WEBPACK_IMPORTED_MODULE_2__["checkLibraryVersion"])("".concat("1.9.62"), "survey-react-ui");
|
|
1151
1151
|
|
|
1152
1152
|
|
|
1153
1153
|
/***/ }),
|
|
@@ -2371,6 +2371,13 @@ var SurveyQuestionPanelDynamicAction = /** @class */ (function (_super) {
|
|
|
2371
2371
|
function SurveyQuestionPanelDynamicAction(props) {
|
|
2372
2372
|
return _super.call(this, props) || this;
|
|
2373
2373
|
}
|
|
2374
|
+
Object.defineProperty(SurveyQuestionPanelDynamicAction.prototype, "data", {
|
|
2375
|
+
get: function () {
|
|
2376
|
+
return (this.props.item && this.props.item.data) || this.props.data;
|
|
2377
|
+
},
|
|
2378
|
+
enumerable: false,
|
|
2379
|
+
configurable: true
|
|
2380
|
+
});
|
|
2374
2381
|
Object.defineProperty(SurveyQuestionPanelDynamicAction.prototype, "question", {
|
|
2375
2382
|
get: function () {
|
|
2376
2383
|
return (this.props.item && this.props.item.data.question) || this.props.data.question;
|
|
@@ -2607,7 +2614,7 @@ var SurveyQuestionPanelDynamicRemoveButton = /** @class */ (function (_super) {
|
|
|
2607
2614
|
function SurveyQuestionPanelDynamicRemoveButton() {
|
|
2608
2615
|
var _this = _super !== null && _super.apply(this, arguments) || this;
|
|
2609
2616
|
_this.handleClick = function (event) {
|
|
2610
|
-
_this.question.removePanelUI(_this.
|
|
2617
|
+
_this.question.removePanelUI(_this.data.panel);
|
|
2611
2618
|
};
|
|
2612
2619
|
return _this;
|
|
2613
2620
|
}
|
|
@@ -3644,7 +3651,7 @@ var SurveyQuestionDropdownBase = /** @class */ (function (_super) {
|
|
|
3644
3651
|
disabled: this.question.isInputReadOnly, required: this.question.isRequired, onKeyDown: this.keyhandler, onBlur: this.blur, role: this.question.ariaRole, "aria-required": this.question.ariaRequired, "aria-label": this.question.ariaLabel, "aria-invalid": this.question.ariaInvalid, "aria-describedby": this.question.ariaDescribedBy },
|
|
3645
3652
|
react__WEBPACK_IMPORTED_MODULE_0__["createElement"]("div", { className: this.question.cssClasses.controlValue },
|
|
3646
3653
|
valueElement,
|
|
3647
|
-
react__WEBPACK_IMPORTED_MODULE_0__["createElement"]("input", { type: "text", autoComplete: "off", id: this.question.getInputId(), ref: function (element) { return (_this.inputElement = element); }, className: this.question.cssClasses.filterStringInput, "aria-label": this.question.placeholder, placeholder: this.question.readOnlyText, readOnly: !dropdownListModel.searchEnabled ? true : undefined, tabIndex: dropdownListModel.inputReadOnly ? undefined : -1, disabled: this.question.isInputReadOnly, onChange: function (e) { onInputChange(e); }, onBlur: this.blur })),
|
|
3654
|
+
react__WEBPACK_IMPORTED_MODULE_0__["createElement"]("input", { type: "text", autoComplete: "off", id: this.question.getInputId(), ref: function (element) { return (_this.inputElement = element); }, className: this.question.cssClasses.filterStringInput, role: dropdownListModel.filterStringEnabled ? this.question.ariaRole : undefined, "aria-label": this.question.placeholder, placeholder: this.question.readOnlyText, readOnly: !dropdownListModel.searchEnabled ? true : undefined, tabIndex: dropdownListModel.inputReadOnly ? undefined : -1, disabled: this.question.isInputReadOnly, onChange: function (e) { onInputChange(e); }, onBlur: this.blur })),
|
|
3648
3655
|
this.createClearButton()));
|
|
3649
3656
|
};
|
|
3650
3657
|
SurveyQuestionDropdownBase.prototype.createClearButton = function () {
|
|
@@ -8404,12 +8411,13 @@ var SurveyQuestionPanelDynamicItem = /** @class */ (function (_super) {
|
|
|
8404
8411
|
separator));
|
|
8405
8412
|
};
|
|
8406
8413
|
SurveyQuestionPanelDynamicItem.prototype.renderButton = function () {
|
|
8407
|
-
if (
|
|
8414
|
+
if (this.question.panelRemoveButtonLocation !== "right" ||
|
|
8415
|
+
!this.question.canRemovePanel ||
|
|
8408
8416
|
(this.question.isRenderModeList && this.panel.isCollapsed)) {
|
|
8409
8417
|
return null;
|
|
8410
8418
|
}
|
|
8411
8419
|
return _element_factory__WEBPACK_IMPORTED_MODULE_8__["ReactElementFactory"].Instance.createElement("sv-paneldynamic-remove-btn", {
|
|
8412
|
-
data: { question: this.question,
|
|
8420
|
+
data: { question: this.question, panel: this.panel }
|
|
8413
8421
|
});
|
|
8414
8422
|
};
|
|
8415
8423
|
return SurveyQuestionPanelDynamicItem;
|
|
@@ -9211,9 +9219,10 @@ var SurveyTimerPanel = /** @class */ (function (_super) {
|
|
|
9211
9219
|
var result = react__WEBPACK_IMPORTED_MODULE_0__["createElement"]("div", { className: this.timerModel.survey.getCss().timerRoot }, this.timerModel.text);
|
|
9212
9220
|
if (this.timerModel.showTimerAsClock) {
|
|
9213
9221
|
var style = { strokeDasharray: this.circleLength, strokeDashoffset: this.progress };
|
|
9222
|
+
var progress = (this.timerModel.showProgress ? react__WEBPACK_IMPORTED_MODULE_0__["createElement"](_components_svg_icon_svg_icon__WEBPACK_IMPORTED_MODULE_1__["SvgIcon"], { className: this.timerModel.getProgressCss(), style: style, iconName: "icon-timercircle", size: "auto" }) : null);
|
|
9214
9223
|
result =
|
|
9215
9224
|
(react__WEBPACK_IMPORTED_MODULE_0__["createElement"]("div", { className: this.timerModel.rootCss },
|
|
9216
|
-
|
|
9225
|
+
progress,
|
|
9217
9226
|
react__WEBPACK_IMPORTED_MODULE_0__["createElement"]("div", { className: this.timerModel.textContainerCss },
|
|
9218
9227
|
react__WEBPACK_IMPORTED_MODULE_0__["createElement"]("span", { className: this.timerModel.majorTextCss }, this.timerModel.clockMajorText),
|
|
9219
9228
|
(this.timerModel.clockMinorText ? react__WEBPACK_IMPORTED_MODULE_0__["createElement"]("span", { className: this.timerModel.minorTextCss }, this.timerModel.clockMinorText) : null))));
|
|
@@ -9731,7 +9740,7 @@ var TagboxFilterString = /** @class */ (function (_super) {
|
|
|
9731
9740
|
};
|
|
9732
9741
|
TagboxFilterString.prototype.render = function () {
|
|
9733
9742
|
var _this = this;
|
|
9734
|
-
return (react__WEBPACK_IMPORTED_MODULE_0__["createElement"]("input", { type: "text", autoComplete: "off", id: this.question.getInputId(), ref: function (element) { return (_this.inputElement = element); }, className: this.question.cssClasses.filterStringInput, disabled: this.question.isInputReadOnly, readOnly: !this.model.searchEnabled ? true : undefined, size: !this.model.filterString ? 1 : undefined, "aria-label": this.question.placeholder, placeholder: this.model.filterStringPlaceholder, onKeyDown: function (e) { _this.keyhandler(e); }, onChange: function (e) { _this.onChange(e); }, onBlur: function (e) { _this.onBlur(e); } }));
|
|
9743
|
+
return (react__WEBPACK_IMPORTED_MODULE_0__["createElement"]("input", { type: "text", autoComplete: "off", id: this.question.getInputId(), ref: function (element) { return (_this.inputElement = element); }, className: this.question.cssClasses.filterStringInput, disabled: this.question.isInputReadOnly, readOnly: !this.model.searchEnabled ? true : undefined, size: !this.model.filterString ? 1 : undefined, role: this.model.filterStringEnabled ? this.question.ariaRole : undefined, "aria-label": this.question.placeholder, placeholder: this.model.filterStringPlaceholder, onKeyDown: function (e) { _this.keyhandler(e); }, onChange: function (e) { _this.onChange(e); }, onBlur: function (e) { _this.onBlur(e); } }));
|
|
9735
9744
|
};
|
|
9736
9745
|
return TagboxFilterString;
|
|
9737
9746
|
}(_reactquestion_element__WEBPACK_IMPORTED_MODULE_3__["SurveyElementBase"]));
|
|
@@ -10645,4 +10654,4 @@ module.exports = __WEBPACK_EXTERNAL_MODULE_survey_core__;
|
|
|
10645
10654
|
|
|
10646
10655
|
/******/ });
|
|
10647
10656
|
});
|
|
10648
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9TdXJ2ZXlSZWFjdC93ZWJwYWNrL3VuaXZlcnNhbE1vZHVsZURlZmluaXRpb24iLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3Qvd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9ub2RlX21vZHVsZXMvcHJvY2Vzcy9icm93c2VyLmpzIiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vbm9kZV9tb2R1bGVzL3NldGltbWVkaWF0ZS9zZXRJbW1lZGlhdGUuanMiLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9ub2RlX21vZHVsZXMvdGltZXJzLWJyb3dzZXJpZnkvbWFpbi5qcyIsIndlYnBhY2s6Ly9TdXJ2ZXlSZWFjdC8od2VicGFjaykvYnVpbGRpbi9nbG9iYWwuanMiLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvZW50cmllcy9jb3JlLWV4cG9ydC50cyIsIndlYnBhY2s6Ly9TdXJ2ZXlSZWFjdC8uL3NyYy9lbnRyaWVzL3JlYWN0LXVpLW1vZGVsLnRzIiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vc3JjL2VudHJpZXMvcmVhY3QtdWkudHMiLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvYm9vbGVhbi1jaGVja2JveC50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvYm9vbGVhbi1yYWRpby50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvYm9vbGVhbi50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvY29tcG9uZW50cy9hY3Rpb24tYmFyL2FjdGlvbi1iYXItaXRlbS1kcm9wZG93bi50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvY29tcG9uZW50cy9hY3Rpb24tYmFyL2FjdGlvbi1iYXItaXRlbS50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvY29tcG9uZW50cy9hY3Rpb24tYmFyL2FjdGlvbi1iYXItc2VwYXJhdG9yLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlSZWFjdC8uL3NyYy9yZWFjdC9jb21wb25lbnRzL2FjdGlvbi1iYXIvYWN0aW9uLWJhci50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvY29tcG9uZW50cy9icmFuZC1pbmZvLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlSZWFjdC8uL3NyYy9yZWFjdC9jb21wb25lbnRzL2xpc3QvbGlzdC1pdGVtLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlSZWFjdC8uL3NyYy9yZWFjdC9jb21wb25lbnRzL2xpc3QvbGlzdC50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvY29tcG9uZW50cy9tYXRyaXgtYWN0aW9ucy9kZXRhaWwtYnV0dG9uL2RldGFpbC1idXR0b24udHN4Iiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vc3JjL3JlYWN0L2NvbXBvbmVudHMvbWF0cml4LWFjdGlvbnMvZHJhZy1kcm9wLWljb24vZHJhZy1kcm9wLWljb24udHN4Iiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vc3JjL3JlYWN0L2NvbXBvbmVudHMvbWF0cml4LWFjdGlvbnMvcmVtb3ZlLWJ1dHRvbi9yZW1vdmUtYnV0dG9uLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlSZWFjdC8uL3NyYy9yZWFjdC9jb21wb25lbnRzL21hdHJpeC9yb3cudHN4Iiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vc3JjL3JlYWN0L2NvbXBvbmVudHMvcGFuZWxkeW5hbWljLWFjdGlvbnMvcGFuZWxkeW5hbWljLWFkZC1idG4udHN4Iiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vc3JjL3JlYWN0L2NvbXBvbmVudHMvcGFuZWxkeW5hbWljLWFjdGlvbnMvcGFuZWxkeW5hbWljLW5leHQtYnRuLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlSZWFjdC8uL3NyYy9yZWFjdC9jb21wb25lbnRzL3BhbmVsZHluYW1pYy1hY3Rpb25zL3BhbmVsZHluYW1pYy1wcmV2LWJ0bi50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvY29tcG9uZW50cy9wYW5lbGR5bmFtaWMtYWN0aW9ucy9wYW5lbGR5bmFtaWMtcHJvZ3Jlc3MtdGV4dC50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvY29tcG9uZW50cy9wYW5lbGR5bmFtaWMtYWN0aW9ucy9wYW5lbGR5bmFtaWMtcmVtb3ZlLWJ0bi50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvY29tcG9uZW50cy9wb3B1cC9wb3B1cC50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvY29tcG9uZW50cy9za2VsZXRvbi50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvY29tcG9uZW50cy9zdXJ2ZXktYWN0aW9ucy9zdXJ2ZXktbmF2LWJ1dHRvbi50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvY29tcG9uZW50cy9zdXJ2ZXktaGVhZGVyL2xvZ28taW1hZ2UudHN4Iiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vc3JjL3JlYWN0L2NvbXBvbmVudHMvc3VydmV5LWhlYWRlci9zdXJ2ZXktaGVhZGVyLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlSZWFjdC8uL3NyYy9yZWFjdC9jb21wb25lbnRzL3N2Zy1pY29uL3N2Zy1pY29uLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlSZWFjdC8uL3NyYy9yZWFjdC9jb21wb25lbnRzL3RpdGxlL3RpdGxlLWFjdGlvbnMudHN4Iiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vc3JjL3JlYWN0L2NvbXBvbmVudHMvdGl0bGUvdGl0bGUtY29udGVudC50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvY29tcG9uZW50cy90aXRsZS90aXRsZS1lbGVtZW50LnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlSZWFjdC8uL3NyYy9yZWFjdC9jdXN0b20td2lkZ2V0LnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlSZWFjdC8uL3NyYy9yZWFjdC9kcm9wZG93bi1iYXNlLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlSZWFjdC8uL3NyYy9yZWFjdC9kcm9wZG93bi1pdGVtLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlSZWFjdC8uL3NyYy9yZWFjdC9kcm9wZG93bi1zZWxlY3QudHN4Iiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vc3JjL3JlYWN0L2VsZW1lbnQtZmFjdG9yeS50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvZWxlbWVudC1oZWFkZXIudHN4Iiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vc3JjL3JlYWN0L2Zsb3ctcGFuZWwudHN4Iiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vc3JjL3JlYWN0L2ltYWdlLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlSZWFjdC8uL3NyYy9yZWFjdC9pbWFnZXBpY2tlci50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvcGFnZS50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvcGFuZWwtYmFzZS50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvcGFuZWwudHN4Iiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vc3JjL3JlYWN0L3JhdGluZy1kcm9wZG93bi50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvcmVhY3QtcG9wdXAtc3VydmV5LnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlSZWFjdC8uL3NyYy9yZWFjdC9yZWFjdFN1cnZleS50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvcmVhY3RTdXJ2ZXlOYXZpZ2F0aW9uQmFzZS50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvcmVhY3RTdXJ2ZXlQcm9ncmVzcy50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvcmVhY3RTdXJ2ZXlQcm9ncmVzc0J1dHRvbnMudHN4Iiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vc3JjL3JlYWN0L3JlYWN0cXVlc3Rpb24udHN4Iiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vc3JjL3JlYWN0L3JlYWN0cXVlc3Rpb25fYnV0dG9uZ3JvdXAudHN4Iiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vc3JjL3JlYWN0L3JlYWN0cXVlc3Rpb25fY2hlY2tib3gudHN4Iiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vc3JjL3JlYWN0L3JlYWN0cXVlc3Rpb25fY29tbWVudC50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvcmVhY3RxdWVzdGlvbl9jdXN0b20udHN4Iiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vc3JjL3JlYWN0L3JlYWN0cXVlc3Rpb25fZHJvcGRvd24udHN4Iiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vc3JjL3JlYWN0L3JlYWN0cXVlc3Rpb25fZWxlbWVudC50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvcmVhY3RxdWVzdGlvbl9lbXB0eS50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvcmVhY3RxdWVzdGlvbl9leHByZXNzaW9uLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlSZWFjdC8uL3NyYy9yZWFjdC9yZWFjdHF1ZXN0aW9uX2ZhY3RvcnkudHN4Iiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vc3JjL3JlYWN0L3JlYWN0cXVlc3Rpb25fZmlsZS50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvcmVhY3RxdWVzdGlvbl9odG1sLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlSZWFjdC8uL3NyYy9yZWFjdC9yZWFjdHF1ZXN0aW9uX21hdHJpeC50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvcmVhY3RxdWVzdGlvbl9tYXRyaXhkcm9wZG93bi50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvcmVhY3RxdWVzdGlvbl9tYXRyaXhkcm9wZG93bmJhc2UudHN4Iiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vc3JjL3JlYWN0L3JlYWN0cXVlc3Rpb25fbWF0cml4ZHluYW1pYy50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvcmVhY3RxdWVzdGlvbl9tdWx0aXBsZXRleHQudHN4Iiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vc3JjL3JlYWN0L3JlYWN0cXVlc3Rpb25fcGFuZWxkeW5hbWljLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlSZWFjdC8uL3NyYy9yZWFjdC9yZWFjdHF1ZXN0aW9uX3JhZGlvZ3JvdXAudHN4Iiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vc3JjL3JlYWN0L3JlYWN0cXVlc3Rpb25fcmFua2luZy50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvcmVhY3RxdWVzdGlvbl9yYXRpbmcudHN4Iiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vc3JjL3JlYWN0L3JlYWN0cXVlc3Rpb25fdGFnYm94LnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlSZWFjdC8uL3NyYy9yZWFjdC9yZWFjdHF1ZXN0aW9uX3RleHQudHN4Iiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vc3JjL3JlYWN0L3JlYWN0c3VydmV5bW9kZWwudHN4Iiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vc3JjL3JlYWN0L3JlYWN0dGltZXJwYW5lbC50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3Qvcm93LnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlSZWFjdC8uL3NyYy9yZWFjdC9zaWduYXR1cmVwYWQudHN4Iiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vc3JjL3JlYWN0L3N0cmluZy1lZGl0b3IudHN4Iiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vc3JjL3JlYWN0L3N0cmluZy12aWV3ZXIudHN4Iiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vc3JjL3JlYWN0L3RhZ2JveC1maWx0ZXIudHN4Iiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vc3JjL3JlYWN0L3RhZ2JveC1pdGVtLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlSZWFjdC8uL3NyYy9zZXR0aW5ncy50cyIsIndlYnBhY2s6Ly9TdXJ2ZXlSZWFjdC8uL3NyYy91dGlscy9yZXNwb25zaXZpdHktbWFuYWdlci50cyIsIndlYnBhY2s6Ly9TdXJ2ZXlSZWFjdC8uL3NyYy91dGlscy91dGlscy50cyIsIndlYnBhY2s6Ly9TdXJ2ZXlSZWFjdC9leHRlcm5hbCB7XCJyb290XCI6XCJSZWFjdFwiLFwiY29tbW9uanMyXCI6XCJyZWFjdFwiLFwiY29tbW9uanNcIjpcInJlYWN0XCIsXCJhbWRcIjpcInJlYWN0XCJ9Iiwid2VicGFjazovL1N1cnZleVJlYWN0L2V4dGVybmFsIHtcInJvb3RcIjpcIlJlYWN0RE9NXCIsXCJjb21tb25qczJcIjpcInJlYWN0LWRvbVwiLFwiY29tbW9uanNcIjpcInJlYWN0LWRvbVwiLFwiYW1kXCI6XCJyZWFjdC1kb21cIn0iLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvZXh0ZXJuYWwge1wicm9vdFwiOlwiU3VydmV5XCIsXCJjb21tb25qczJcIjpcInN1cnZleS1jb3JlXCIsXCJjb21tb25qc1wiOlwic3VydmV5LWNvcmVcIixcImFtZFwiOlwic3VydmV5LWNvcmVcIn0iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0QsTztRQ1ZBO1FBQ0E7O1FBRUE7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTs7UUFFQTtRQUNBOztRQUVBO1FBQ0E7O1FBRUE7UUFDQTtRQUNBOzs7UUFHQTtRQUNBOztRQUVBO1FBQ0E7O1FBRUE7UUFDQTtRQUNBO1FBQ0EsMENB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O0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EseUNBQXlDO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxVQUFVO0FBQ1Y7QUFDQTs7QUFFQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQSxLQUFLO0FBQ0w7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxDQUFDOzs7Ozs7Ozs7Ozs7O0FDekxEO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQSxtQkFBTyxDQUFDLGlFQUFjO0FBQ3RCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7OztBQzlEQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLDRDQUE0Qzs7QUFFNUM7Ozs7Ozs7Ozs7Ozs7QUNuQkE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBNkQ7QUFDdEI7QUFDeUI7Ozs7Ozs7Ozs7Ozs7QUNGaEU7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBQVE7QUFDdUQ7QUFDUTtBQUNHO0FBQ2Q7QUFDakI7QUFDRjtBQUNJO0FBQ1M7QUFNdEI7QUFLUTtBQUlBO0FBSUM7QUFJRDtBQUNvQjtBQUNNO0FBQ0U7QUFDSztBQUNUO0FBQ0s7QUFDRztBQUlqQztBQUMwQjtBQUNBO0FBQ2dCO0FBQ3FCO0FBQ3JDO0FBQ1I7QUFDaUI7QUFDTjtBQUNEO0FBQzREO0FBQzFDO0FBQ29DO0FBQ3hDO0FBQ25CO0FBQ2M7QUFDUDtBQUNHO0FBQ0s7QUFDTDtBQUNGO0FBQ1A7QUFDRTtBQUNaO0FBQ2M7QUFDWTtBQUNlO0FBRXRDO0FBQ0g7QUFDa0I7QUFDQTtBQUNLO0FBQ0g7QUFDTTtBQUNmO0FBQ3lEO0FBQ1A7QUFDUztBQUNQO0FBQ007QUFDSjtBQUNBO0FBQ087QUFDL0I7QUFFbkM7QUFDSDtBQUVPO0FBQ0E7QUFFL0QsZ0RBQWdEO0FBQ2hELG1GQUFtRjs7Ozs7Ozs7Ozs7OztBQy9GbkY7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQWlDO0FBQ0g7QUFDcUI7QUFFTDtBQUNOO0FBRVU7QUFFbEQsdUVBQW1CLENBQUMsVUFBRyxRQUFtQixDQUFFLEVBQUUsaUJBQWlCLENBQUMsQ0FBQzs7Ozs7Ozs7Ozs7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QVE7UUFBRSxPQUFPO0lBQ3JDLEtBQUssSUFBSSxHQUFHLElBQUksR0FBRyxFQUFFO1FBQ25CLElBQUksS0FBSyxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNyQixJQUFJLEtBQUssSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLEVBQUU7WUFDdEMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxRQUFRO2dCQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUM7WUFDaEUsV0FBVyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztTQUMvQjthQUFNO1lBQ0wsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQztTQUNuQjtLQUNGO0FBQ0gsQ0FBQztBQXNCQzs7Ozs7Ozs7Ozs7O0FDM1VGLG1EOzs7Ozs7Ozs7OztBQ0FBLHVEOzs7Ozs7Ozs7OztBQ0FBLHlEIiwiZmlsZSI6InN1cnZleS1yZWFjdC11aS5qcyIsInNvdXJjZXNDb250ZW50IjpbIihmdW5jdGlvbiB3ZWJwYWNrVW5pdmVyc2FsTW9kdWxlRGVmaW5pdGlvbihyb290LCBmYWN0b3J5KSB7XG5cdGlmKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlID09PSAnb2JqZWN0Jylcblx0XHRtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkocmVxdWlyZShcInJlYWN0XCIpLCByZXF1aXJlKFwicmVhY3QtZG9tXCIpLCByZXF1aXJlKFwic3VydmV5LWNvcmVcIikpO1xuXHRlbHNlIGlmKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZClcblx0XHRkZWZpbmUoXCJzdXJ2ZXktcmVhY3QtdWlcIiwgW1wicmVhY3RcIiwgXCJyZWFjdC1kb21cIiwgXCJzdXJ2ZXktY29yZVwiXSwgZmFjdG9yeSk7XG5cdGVsc2UgaWYodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnKVxuXHRcdGV4cG9ydHNbXCJzdXJ2ZXktcmVhY3QtdWlcIl0gPSBmYWN0b3J5KHJlcXVpcmUoXCJyZWFjdFwiKSwgcmVxdWlyZShcInJlYWN0LWRvbVwiKSwgcmVxdWlyZShcInN1cnZleS1jb3JlXCIpKTtcblx0ZWxzZVxuXHRcdHJvb3RbXCJTdXJ2ZXlSZWFjdFwiXSA9IGZhY3Rvcnkocm9vdFtcIlJlYWN0XCJdLCByb290W1wiUmVhY3RET01cIl0sIHJvb3RbXCJTdXJ2ZXlcIl0pO1xufSkodGhpcywgZnVuY3Rpb24oX19XRUJQQUNLX0VYVEVSTkFMX01PRFVMRV9yZWFjdF9fLCBfX1dFQlBBQ0tfRVhURVJOQUxfTU9EVUxFX3JlYWN0X2RvbV9fLCBfX1dFQlBBQ0tfRVhURVJOQUxfTU9EVUxFX3N1cnZleV9jb3JlX18pIHtcbnJldHVybiAiLCIgXHQvLyBUaGUgbW9kdWxlIGNhY2hlXG4gXHR2YXIgaW5zdGFsbGVkTW9kdWxlcyA9IHt9O1xuXG4gXHQvLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuIFx0ZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXG4gXHRcdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuIFx0XHRpZihpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSkge1xuIFx0XHRcdHJldHVybiBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXS5leHBvcnRzO1xuIFx0XHR9XG4gXHRcdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG4gXHRcdHZhciBtb2R1bGUgPSBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSA9IHtcbiBcdFx0XHRpOiBtb2R1bGVJZCxcbiBcdFx0XHRsOiBmYWxzZSxcbiBcdFx0XHRleHBvcnRzOiB7fVxuIFx0XHR9O1xuXG4gXHRcdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuIFx0XHRtb2R1bGVzW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuIFx0XHQvLyBGbGFnIHRoZSBtb2R1bGUgYXMgbG9hZGVkXG4gXHRcdG1vZHVsZS5sID0gdHJ1ZTtcblxuIFx0XHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuIFx0XHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG4gXHR9XG5cblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGVzIG9iamVjdCAoX193ZWJwYWNrX21vZHVsZXNfXylcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubSA9IG1vZHVsZXM7XG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlIGNhY2hlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmMgPSBpbnN0YWxsZWRNb2R1bGVzO1xuXG4gXHQvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9uIGZvciBoYXJtb255IGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uZCA9IGZ1bmN0aW9uKGV4cG9ydHMsIG5hbWUsIGdldHRlcikge1xuIFx0XHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIG5hbWUpKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIG5hbWUsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBnZXR0ZXIgfSk7XG4gXHRcdH1cbiBcdH07XG5cbiBcdC8vIGRlZmluZSBfX2VzTW9kdWxlIG9uIGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uciA9IGZ1bmN0aW9uKGV4cG9ydHMpIHtcbiBcdFx0aWYodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLnRvU3RyaW5nVGFnKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFN5bWJvbC50b1N0cmluZ1RhZywgeyB2YWx1ZTogJ01vZHVsZScgfSk7XG4gXHRcdH1cbiBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbiBcdH07XG5cbiBcdC8vIGNyZWF0ZSBhIGZha2UgbmFtZXNwYWNlIG9iamVjdFxuIFx0Ly8gbW9kZSAmIDE6IHZhbHVlIGlzIGEgbW9kdWxlIGlkLCByZXF1aXJlIGl0XG4gXHQvLyBtb2RlICYgMjogbWVyZ2UgYWxsIHByb3BlcnRpZXMgb2YgdmFsdWUgaW50byB0aGUgbnNcbiBcdC8vIG1vZGUgJiA0OiByZXR1cm4gdmFsdWUgd2hlbiBhbHJlYWR5IG5zIG9iamVjdFxuIFx0Ly8gbW9kZSAmIDh8MTogYmVoYXZlIGxpa2UgcmVxdWlyZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy50ID0gZnVuY3Rpb24odmFsdWUsIG1vZGUpIHtcbiBcdFx0aWYobW9kZSAmIDEpIHZhbHVlID0gX193ZWJwYWNrX3JlcXVpcmVfXyh2YWx1ZSk7XG4gXHRcdGlmKG1vZGUgJiA4KSByZXR1cm4gdmFsdWU7XG4gXHRcdGlmKChtb2RlICYgNCkgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAmJiB2YWx1ZS5fX2VzTW9kdWxlKSByZXR1cm4gdmFsdWU7XG4gXHRcdHZhciBucyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18ucihucyk7XG4gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShucywgJ2RlZmF1bHQnLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2YWx1ZSB9KTtcbiBcdFx0aWYobW9kZSAmIDIgJiYgdHlwZW9mIHZhbHVlICE9ICdzdHJpbmcnKSBmb3IodmFyIGtleSBpbiB2YWx1ZSkgX193ZWJwYWNrX3JlcXVpcmVfXy5kKG5zLCBrZXksIGZ1bmN0aW9uKGtleSkgeyByZXR1cm4gdmFsdWVba2V5XTsgfS5iaW5kKG51bGwsIGtleSkpO1xuIFx0XHRyZXR1cm4gbnM7XG4gXHR9O1xuXG4gXHQvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5uID0gZnVuY3Rpb24obW9kdWxlKSB7XG4gXHRcdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuIFx0XHRcdGZ1bmN0aW9uIGdldERlZmF1bHQoKSB7IHJldHVybiBtb2R1bGVbJ2RlZmF1bHQnXTsgfSA6XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0TW9kdWxlRXhwb3J0cygpIHsgcmV0dXJuIG1vZHVsZTsgfTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgJ2EnLCBnZXR0ZXIpO1xuIFx0XHRyZXR1cm4gZ2V0dGVyO1xuIFx0fTtcblxuIFx0Ly8gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSBmdW5jdGlvbihvYmplY3QsIHByb3BlcnR5KSB7IHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBwcm9wZXJ0eSk7IH07XG5cbiBcdC8vIF9fd2VicGFja19wdWJsaWNfcGF0aF9fXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnAgPSBcIlwiO1xuXG5cbiBcdC8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuIFx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oX193ZWJwYWNrX3JlcXVpcmVfXy5zID0gXCIuL3NyYy9lbnRyaWVzL3JlYWN0LXVpLnRzXCIpO1xuIiwiLy8gc2hpbSBmb3IgdXNpbmcgcHJvY2VzcyBpbiBicm93c2VyXG52YXIgcHJvY2VzcyA9IG1vZHVsZS5leHBvcnRzID0ge307XG5cbi8vIGNhY2hlZCBmcm9tIHdoYXRldmVyIGdsb2JhbCBpcyBwcmVzZW50IHNvIHRoYXQgdGVzdCBydW5uZXJzIHRoYXQgc3R1YiBpdFxuLy8gZG9uJ3QgYnJlYWsgdGhpbmdzLiAgQnV0IHdlIG5lZWQgdG8gd3JhcCBpdCBpbiBhIHRyeSBjYXRjaCBpbiBjYXNlIGl0IGlzXG4vLyB3cmFwcGVkIGluIHN0cmljdCBtb2RlIGNvZGUgd2hpY2ggZG9lc24ndCBkZWZpbmUgYW55IGdsb2JhbHMuICBJdCdzIGluc2lkZSBhXG4vLyBmdW5jdGlvbiBiZWNhdXNlIHRyeS9jYXRjaGVzIGRlb3B0aW1pemUgaW4gY2VydGFpbiBlbmdpbmVzLlxuXG52YXIgY2FjaGVkU2V0VGltZW91dDtcbnZhciBjYWNoZWRDbGVhclRpbWVvdXQ7XG5cbmZ1bmN0aW9uIGRlZmF1bHRTZXRUaW1vdXQoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdzZXRUaW1lb3V0IGhhcyBub3QgYmVlbiBkZWZpbmVkJyk7XG59XG5mdW5jdGlvbiBkZWZhdWx0Q2xlYXJUaW1lb3V0ICgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2NsZWFyVGltZW91dCBoYXMgbm90IGJlZW4gZGVmaW5lZCcpO1xufVxuKGZ1bmN0aW9uICgpIHtcbiAgICB0cnkge1xuICAgICAgICBpZiAodHlwZW9mIHNldFRpbWVvdXQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIGNhY2hlZFNldFRpbWVvdXQgPSBzZXRUaW1lb3V0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY2FjaGVkU2V0VGltZW91dCA9IGRlZmF1bHRTZXRUaW1vdXQ7XG4gICAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGNhY2hlZFNldFRpbWVvdXQgPSBkZWZhdWx0U2V0VGltb3V0O1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICBpZiAodHlwZW9mIGNsZWFyVGltZW91dCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgY2FjaGVkQ2xlYXJUaW1lb3V0ID0gY2xlYXJUaW1lb3V0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY2FjaGVkQ2xlYXJUaW1lb3V0ID0gZGVmYXVsdENsZWFyVGltZW91dDtcbiAgICAgICAgfVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgY2FjaGVkQ2xlYXJUaW1lb3V0ID0gZGVmYXVsdENsZWFyVGltZW91dDtcbiAgICB9XG59ICgpKVxuZnVuY3Rpb24gcnVuVGltZW91dChmdW4pIHtcbiAgICBpZiAoY2FjaGVkU2V0VGltZW91dCA9PT0gc2V0VGltZW91dCkge1xuICAgICAgICAvL25vcm1hbCBlbnZpcm9tZW50cyBpbiBzYW5lIHNpdHVhdGlvbnNcbiAgICAgICAgcmV0dXJuIHNldFRpbWVvdXQoZnVuLCAwKTtcbiAgICB9XG4gICAgLy8gaWYgc2V0VGltZW91dCB3YXNuJ3QgYXZhaWxhYmxlIGJ1dCB3YXMgbGF0dGVyIGRlZmluZWRcbiAgICBpZiAoKGNhY2hlZFNldFRpbWVvdXQgPT09IGRlZmF1bHRTZXRUaW1vdXQgfHwgIWNhY2hlZFNldFRpbWVvdXQpICYmIHNldFRpbWVvdXQpIHtcbiAgICAgICAgY2FjaGVkU2V0VGltZW91dCA9IHNldFRpbWVvdXQ7XG4gICAgICAgIHJldHVybiBzZXRUaW1lb3V0KGZ1biwgMCk7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIC8vIHdoZW4gd2hlbiBzb21lYm9keSBoYXMgc2NyZXdlZCB3aXRoIHNldFRpbWVvdXQgYnV0IG5vIEkuRS4gbWFkZG5lc3NcbiAgICAgICAgcmV0dXJuIGNhY2hlZFNldFRpbWVvdXQoZnVuLCAwKTtcbiAgICB9IGNhdGNoKGUpe1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgLy8gV2hlbiB3ZSBhcmUgaW4gSS5FLiBidXQgdGhlIHNjcmlwdCBoYXMgYmVlbiBldmFsZWQgc28gSS5FLiBkb2Vzbid0IHRydXN0IHRoZSBnbG9iYWwgb2JqZWN0IHdoZW4gY2FsbGVkIG5vcm1hbGx5XG4gICAgICAgICAgICByZXR1cm4gY2FjaGVkU2V0VGltZW91dC5jYWxsKG51bGwsIGZ1biwgMCk7XG4gICAgICAgIH0gY2F0Y2goZSl7XG4gICAgICAgICAgICAvLyBzYW1lIGFzIGFib3ZlIGJ1dCB3aGVuIGl0J3MgYSB2ZXJzaW9uIG9mIEkuRS4gdGhhdCBtdXN0IGhhdmUgdGhlIGdsb2JhbCBvYmplY3QgZm9yICd0aGlzJywgaG9wZnVsbHkgb3VyIGNvbnRleHQgY29ycmVjdCBvdGhlcndpc2UgaXQgd2lsbCB0aHJvdyBhIGdsb2JhbCBlcnJvclxuICAgICAgICAgICAgcmV0dXJuIGNhY2hlZFNldFRpbWVvdXQuY2FsbCh0aGlzLCBmdW4sIDApO1xuICAgICAgICB9XG4gICAgfVxuXG5cbn1cbmZ1bmN0aW9uIHJ1bkNsZWFyVGltZW91dChtYXJrZXIpIHtcbiAgICBpZiAoY2FjaGVkQ2xlYXJUaW1lb3V0ID09PSBjbGVhclRpbWVvdXQpIHtcbiAgICAgICAgLy9ub3JtYWwgZW52aXJvbWVudHMgaW4gc2FuZSBzaXR1YXRpb25zXG4gICAgICAgIHJldHVybiBjbGVhclRpbWVvdXQobWFya2VyKTtcbiAgICB9XG4gICAgLy8gaWYgY2xlYXJUaW1lb3V0IHdhc24ndCBhdmFpbGFibGUgYnV0IHdhcyBsYXR0ZXIgZGVmaW5lZFxuICAgIGlmICgoY2FjaGVkQ2xlYXJUaW1lb3V0ID09PSBkZWZhdWx0Q2xlYXJUaW1lb3V0IHx8ICFjYWNoZWRDbGVhclRpbWVvdXQpICYmIGNsZWFyVGltZW91dCkge1xuICAgICAgICBjYWNoZWRDbGVhclRpbWVvdXQgPSBjbGVhclRpbWVvdXQ7XG4gICAgICAgIHJldHVybiBjbGVhclRpbWVvdXQobWFya2VyKTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgLy8gd2hlbiB3aGVuIHNvbWVib2R5IGhhcyBzY3Jld2VkIHdpdGggc2V0VGltZW91dCBidXQgbm8gSS5FLiBtYWRkbmVzc1xuICAgICAgICByZXR1cm4gY2FjaGVkQ2xlYXJUaW1lb3V0KG1hcmtlcik7XG4gICAgfSBjYXRjaCAoZSl7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICAvLyBXaGVuIHdlIGFyZSBpbiBJLkUuIGJ1dCB0aGUgc2NyaXB0IGhhcyBiZWVuIGV2YWxlZCBzbyBJLkUuIGRvZXNuJ3QgIHRydXN0IHRoZSBnbG9iYWwgb2JqZWN0IHdoZW4gY2FsbGVkIG5vcm1hbGx5XG4gICAgICAgICAgICByZXR1cm4gY2FjaGVkQ2xlYXJUaW1lb3V0LmNhbGwobnVsbCwgbWFya2VyKTtcbiAgICAgICAgfSBjYXRjaCAoZSl7XG4gICAgICAgICAgICAvLyBzYW1lIGFzIGFib3ZlIGJ1dCB3aGVuIGl0J3MgYSB2ZXJzaW9uIG9mIEkuRS4gdGhhdCBtdXN0IGhhdmUgdGhlIGdsb2JhbCBvYmplY3QgZm9yICd0aGlzJywgaG9wZnVsbHkgb3VyIGNvbnRleHQgY29ycmVjdCBvdGhlcndpc2UgaXQgd2lsbCB0aHJvdyBhIGdsb2JhbCBlcnJvci5cbiAgICAgICAgICAgIC8vIFNvbWUgdmVyc2lvbnMgb2YgSS5FLiBoYXZlIGRpZmZlcmVudCBydWxlcyBmb3IgY2xlYXJUaW1lb3V0IHZzIHNldFRpbWVvdXRcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWRDbGVhclRpbWVvdXQuY2FsbCh0aGlzLCBtYXJrZXIpO1xuICAgICAgICB9XG4gICAgfVxuXG5cblxufVxudmFyIHF1ZXVlID0gW107XG52YXIgZHJhaW5pbmcgPSBmYWxzZTtcbnZhciBjdXJyZW50UXVldWU7XG52YXIgcXVldWVJbmRleCA9IC0xO1xuXG5mdW5jdGlvbiBjbGVhblVwTmV4dFRpY2soKSB7XG4gICAgaWYgKCFkcmFpbmluZyB8fCAhY3VycmVudFF1ZXVlKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZHJhaW5pbmcgPSBmYWxzZTtcbiAgICBpZiAoY3VycmVudFF1ZXVlLmxlbmd0aCkge1xuICAgICAgICBxdWV1ZSA9IGN1cnJlbnRRdWV1ZS5jb25jYXQocXVldWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHF1ZXVlSW5kZXggPSAtMTtcbiAgICB9XG4gICAgaWYgKHF1ZXVlLmxlbmd0aCkge1xuICAgICAgICBkcmFpblF1ZXVlKCk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBkcmFpblF1ZXVlKCkge1xuICAgIGlmIChkcmFpbmluZykge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIHZhciB0aW1lb3V0ID0gcnVuVGltZW91dChjbGVhblVwTmV4dFRpY2spO1xuICAgIGRyYWluaW5nID0gdHJ1ZTtcblxuICAgIHZhciBsZW4gPSBxdWV1ZS5sZW5ndGg7XG4gICAgd2hpbGUobGVuKSB7XG4gICAgICAgIGN1cnJlbnRRdWV1ZSA9IHF1ZXVlO1xuICAgICAgICBxdWV1ZSA9IFtdO1xuICAgICAgICB3aGlsZSAoKytxdWV1ZUluZGV4IDwgbGVuKSB7XG4gICAgICAgICAgICBpZiAoY3VycmVudFF1ZXVlKSB7XG4gICAgICAgICAgICAgICAgY3VycmVudFF1ZXVlW3F1ZXVlSW5kZXhdLnJ1bigpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHF1ZXVlSW5kZXggPSAtMTtcbiAgICAgICAgbGVuID0gcXVldWUubGVuZ3RoO1xuICAgIH1cbiAgICBjdXJyZW50UXVldWUgPSBudWxsO1xuICAgIGRyYWluaW5nID0gZmFsc2U7XG4gICAgcnVuQ2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xufVxuXG5wcm9jZXNzLm5leHRUaWNrID0gZnVuY3Rpb24gKGZ1bikge1xuICAgIHZhciBhcmdzID0gbmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGggLSAxKTtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGFyZ3NbaSAtIDFdID0gYXJndW1lbnRzW2ldO1xuICAgICAgICB9XG4gICAgfVxuICAgIHF1ZXVlLnB1c2gobmV3IEl0ZW0oZnVuLCBhcmdzKSk7XG4gICAgaWYgKHF1ZXVlLmxlbmd0aCA9PT0gMSAmJiAhZHJhaW5pbmcpIHtcbiAgICAgICAgcnVuVGltZW91dChkcmFpblF1ZXVlKTtcbiAgICB9XG59O1xuXG4vLyB2OCBsaWtlcyBwcmVkaWN0aWJsZSBvYmplY3RzXG5mdW5jdGlvbiBJdGVtKGZ1biwgYXJyYXkpIHtcbiAgICB0aGlzLmZ1biA9IGZ1bjtcbiAgICB0aGlzLmFycmF5ID0gYXJyYXk7XG59XG5JdGVtLnByb3RvdHlwZS5ydW4gPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5mdW4uYXBwbHkobnVsbCwgdGhpcy5hcnJheSk7XG59O1xucHJvY2Vzcy50aXRsZSA9ICdicm93c2VyJztcbnByb2Nlc3MuYnJvd3NlciA9IHRydWU7XG5wcm9jZXNzLmVudiA9IHt9O1xucHJvY2Vzcy5hcmd2ID0gW107XG5wcm9jZXNzLnZlcnNpb24gPSAnJzsgLy8gZW1wdHkgc3RyaW5nIHRvIGF2b2lkIHJlZ2V4cCBpc3N1ZXNcbnByb2Nlc3MudmVyc2lvbnMgPSB7fTtcblxuZnVuY3Rpb24gbm9vcCgpIHt9XG5cbnByb2Nlc3Mub24gPSBub29wO1xucHJvY2Vzcy5hZGRMaXN0ZW5lciA9IG5vb3A7XG5wcm9jZXNzLm9uY2UgPSBub29wO1xucHJvY2Vzcy5vZmYgPSBub29wO1xucHJvY2Vzcy5yZW1vdmVMaXN0ZW5lciA9IG5vb3A7XG5wcm9jZXNzLnJlbW92ZUFsbExpc3RlbmVycyA9IG5vb3A7XG5wcm9jZXNzLmVtaXQgPSBub29wO1xucHJvY2Vzcy5wcmVwZW5kTGlzdGVuZXIgPSBub29wO1xucHJvY2Vzcy5wcmVwZW5kT25jZUxpc3RlbmVyID0gbm9vcDtcblxucHJvY2Vzcy5saXN0ZW5lcnMgPSBmdW5jdGlvbiAobmFtZSkgeyByZXR1cm4gW10gfVxuXG5wcm9jZXNzLmJpbmRpbmcgPSBmdW5jdGlvbiAobmFtZSkge1xuICAgIHRocm93IG5ldyBFcnJvcigncHJvY2Vzcy5iaW5kaW5nIGlzIG5vdCBzdXBwb3J0ZWQnKTtcbn07XG5cbnByb2Nlc3MuY3dkID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gJy8nIH07XG5wcm9jZXNzLmNoZGlyID0gZnVuY3Rpb24gKGRpcikge1xuICAgIHRocm93IG5ldyBFcnJvcigncHJvY2Vzcy5jaGRpciBpcyBub3Qgc3VwcG9ydGVkJyk7XG59O1xucHJvY2Vzcy51bWFzayA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gMDsgfTtcbiIsIihmdW5jdGlvbiAoZ2xvYmFsLCB1bmRlZmluZWQpIHtcbiAgICBcInVzZSBzdHJpY3RcIjtcblxuICAgIGlmIChnbG9iYWwuc2V0SW1tZWRpYXRlKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgbmV4dEhhbmRsZSA9IDE7IC8vIFNwZWMgc2F5cyBncmVhdGVyIHRoYW4gemVyb1xuICAgIHZhciB0YXNrc0J5SGFuZGxlID0ge307XG4gICAgdmFyIGN1cnJlbnRseVJ1bm5pbmdBVGFzayA9IGZhbHNlO1xuICAgIHZhciBkb2MgPSBnbG9iYWwuZG9jdW1lbnQ7XG4gICAgdmFyIHJlZ2lzdGVySW1tZWRpYXRlO1xuXG4gICAgZnVuY3Rpb24gc2V0SW1tZWRpYXRlKGNhbGxiYWNrKSB7XG4gICAgICAvLyBDYWxsYmFjayBjYW4gZWl0aGVyIGJlIGEgZnVuY3Rpb24gb3IgYSBzdHJpbmdcbiAgICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgIT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICBjYWxsYmFjayA9IG5ldyBGdW5jdGlvbihcIlwiICsgY2FsbGJhY2spO1xuICAgICAgfVxuICAgICAgLy8gQ29weSBmdW5jdGlvbiBhcmd1bWVudHNcbiAgICAgIHZhciBhcmdzID0gbmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGggLSAxKTtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJncy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGFyZ3NbaV0gPSBhcmd1bWVudHNbaSArIDFdO1xuICAgICAgfVxuICAgICAgLy8gU3RvcmUgYW5kIHJlZ2lzdGVyIHRoZSB0YXNrXG4gICAgICB2YXIgdGFzayA9IHsgY2FsbGJhY2s6IGNhbGxiYWNrLCBhcmdzOiBhcmdzIH07XG4gICAgICB0YXNrc0J5SGFuZGxlW25leHRIYW5kbGVdID0gdGFzaztcbiAgICAgIHJlZ2lzdGVySW1tZWRpYXRlKG5leHRIYW5kbGUpO1xuICAgICAgcmV0dXJuIG5leHRIYW5kbGUrKztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjbGVhckltbWVkaWF0ZShoYW5kbGUpIHtcbiAgICAgICAgZGVsZXRlIHRhc2tzQnlIYW5kbGVbaGFuZGxlXTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBydW4odGFzaykge1xuICAgICAgICB2YXIgY2FsbGJhY2sgPSB0YXNrLmNhbGxiYWNrO1xuICAgICAgICB2YXIgYXJncyA9IHRhc2suYXJncztcbiAgICAgICAgc3dpdGNoIChhcmdzLmxlbmd0aCkge1xuICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgIGNhbGxiYWNrKGFyZ3NbMF0pO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgIGNhbGxiYWNrKGFyZ3NbMF0sIGFyZ3NbMV0pO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgIGNhbGxiYWNrKGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0pO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBjYWxsYmFjay5hcHBseSh1bmRlZmluZWQsIGFyZ3MpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBydW5JZlByZXNlbnQoaGFuZGxlKSB7XG4gICAgICAgIC8vIEZyb20gdGhlIHNwZWM6IFwiV2FpdCB1bnRpbCBhbnkgaW52b2NhdGlvbnMgb2YgdGhpcyBhbGdvcml0aG0gc3RhcnRlZCBiZWZvcmUgdGhpcyBvbmUgaGF2ZSBjb21wbGV0ZWQuXCJcbiAgICAgICAgLy8gU28gaWYgd2UncmUgY3VycmVudGx5IHJ1bm5pbmcgYSB0YXNrLCB3ZSdsbCBuZWVkIHRvIGRlbGF5IHRoaXMgaW52b2NhdGlvbi5cbiAgICAgICAgaWYgKGN1cnJlbnRseVJ1bm5pbmdBVGFzaykge1xuICAgICAgICAgICAgLy8gRGVsYXkgYnkgZG9pbmcgYSBzZXRUaW1lb3V0LiBzZXRJbW1lZGlhdGUgd2FzIHRyaWVkIGluc3RlYWQsIGJ1dCBpbiBGaXJlZm94IDcgaXQgZ2VuZXJhdGVkIGFcbiAgICAgICAgICAgIC8vIFwidG9vIG11Y2ggcmVjdXJzaW9uXCIgZXJyb3IuXG4gICAgICAgICAgICBzZXRUaW1lb3V0KHJ1bklmUHJlc2VudCwgMCwgaGFuZGxlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHZhciB0YXNrID0gdGFza3NCeUhhbmRsZVtoYW5kbGVdO1xuICAgICAgICAgICAgaWYgKHRhc2spIHtcbiAgICAgICAgICAgICAgICBjdXJyZW50bHlSdW5uaW5nQVRhc2sgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIHJ1bih0YXNrKTtcbiAgICAgICAgICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgICAgICAgICBjbGVhckltbWVkaWF0ZShoYW5kbGUpO1xuICAgICAgICAgICAgICAgICAgICBjdXJyZW50bHlSdW5uaW5nQVRhc2sgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpbnN0YWxsTmV4dFRpY2tJbXBsZW1lbnRhdGlvbigpIHtcbiAgICAgICAgcmVnaXN0ZXJJbW1lZGlhdGUgPSBmdW5jdGlvbihoYW5kbGUpIHtcbiAgICAgICAgICAgIHByb2Nlc3MubmV4dFRpY2soZnVuY3Rpb24gKCkgeyBydW5JZlByZXNlbnQoaGFuZGxlKTsgfSk7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY2FuVXNlUG9zdE1lc3NhZ2UoKSB7XG4gICAgICAgIC8vIFRoZSB0ZXN0IGFnYWluc3QgYGltcG9ydFNjcmlwdHNgIHByZXZlbnRzIHRoaXMgaW1wbGVtZW50YXRpb24gZnJvbSBiZWluZyBpbnN0YWxsZWQgaW5zaWRlIGEgd2ViIHdvcmtlcixcbiAgICAgICAgLy8gd2hlcmUgYGdsb2JhbC5wb3N0TWVzc2FnZWAgbWVhbnMgc29tZXRoaW5nIGNvbXBsZXRlbHkgZGlmZmVyZW50IGFuZCBjYW4ndCBiZSB1c2VkIGZvciB0aGlzIHB1cnBvc2UuXG4gICAgICAgIGlmIChnbG9iYWwucG9zdE1lc3NhZ2UgJiYgIWdsb2JhbC5pbXBvcnRTY3JpcHRzKSB7XG4gICAgICAgICAgICB2YXIgcG9zdE1lc3NhZ2VJc0FzeW5jaHJvbm91cyA9IHRydWU7XG4gICAgICAgICAgICB2YXIgb2xkT25NZXNzYWdlID0gZ2xvYmFsLm9ubWVzc2FnZTtcbiAgICAgICAgICAgIGdsb2JhbC5vbm1lc3NhZ2UgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICBwb3N0TWVzc2FnZUlzQXN5bmNocm9ub3VzID0gZmFsc2U7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgZ2xvYmFsLnBvc3RNZXNzYWdlKFwiXCIsIFwiKlwiKTtcbiAgICAgICAgICAgIGdsb2JhbC5vbm1lc3NhZ2UgPSBvbGRPbk1lc3NhZ2U7XG4gICAgICAgICAgICByZXR1cm4gcG9zdE1lc3NhZ2VJc0FzeW5jaHJvbm91cztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGluc3RhbGxQb3N0TWVzc2FnZUltcGxlbWVudGF0aW9uKCkge1xuICAgICAgICAvLyBJbnN0YWxscyBhbiBldmVudCBoYW5kbGVyIG9uIGBnbG9iYWxgIGZvciB0aGUgYG1lc3NhZ2VgIGV2ZW50OiBzZWVcbiAgICAgICAgLy8gKiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi9ET00vd2luZG93LnBvc3RNZXNzYWdlXG4gICAgICAgIC8vICogaHR0cDovL3d3dy53aGF0d2cub3JnL3NwZWNzL3dlYi1hcHBzL2N1cnJlbnQtd29yay9tdWx0aXBhZ2UvY29tbXMuaHRtbCNjcm9zc0RvY3VtZW50TWVzc2FnZXNcblxuICAgICAgICB2YXIgbWVzc2FnZVByZWZpeCA9IFwic2V0SW1tZWRpYXRlJFwiICsgTWF0aC5yYW5kb20oKSArIFwiJFwiO1xuICAgICAgICB2YXIgb25HbG9iYWxNZXNzYWdlID0gZnVuY3Rpb24oZXZlbnQpIHtcbiAgICAgICAgICAgIGlmIChldmVudC5zb3VyY2UgPT09IGdsb2JhbCAmJlxuICAgICAgICAgICAgICAgIHR5cGVvZiBldmVudC5kYXRhID09PSBcInN0cmluZ1wiICYmXG4gICAgICAgICAgICAgICAgZXZlbnQuZGF0YS5pbmRleE9mKG1lc3NhZ2VQcmVmaXgpID09PSAwKSB7XG4gICAgICAgICAgICAgICAgcnVuSWZQcmVzZW50KCtldmVudC5kYXRhLnNsaWNlKG1lc3NhZ2VQcmVmaXgubGVuZ3RoKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKGdsb2JhbC5hZGRFdmVudExpc3RlbmVyKSB7XG4gICAgICAgICAgICBnbG9iYWwuYWRkRXZlbnRMaXN0ZW5lcihcIm1lc3NhZ2VcIiwgb25HbG9iYWxNZXNzYWdlLCBmYWxzZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBnbG9iYWwuYXR0YWNoRXZlbnQoXCJvbm1lc3NhZ2VcIiwgb25HbG9iYWxNZXNzYWdlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJlZ2lzdGVySW1tZWRpYXRlID0gZnVuY3Rpb24oaGFuZGxlKSB7XG4gICAgICAgICAgICBnbG9iYWwucG9zdE1lc3NhZ2UobWVzc2FnZVByZWZpeCArIGhhbmRsZSwgXCIqXCIpO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGluc3RhbGxNZXNzYWdlQ2hhbm5lbEltcGxlbWVudGF0aW9uKCkge1xuICAgICAgICB2YXIgY2hhbm5lbCA9IG5ldyBNZXNzYWdlQ2hhbm5lbCgpO1xuICAgICAgICBjaGFubmVsLnBvcnQxLm9ubWVzc2FnZSA9IGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgICAgICAgICB2YXIgaGFuZGxlID0gZXZlbnQuZGF0YTtcbiAgICAgICAgICAgIHJ1bklmUHJlc2VudChoYW5kbGUpO1xuICAgICAgICB9O1xuXG4gICAgICAgIHJlZ2lzdGVySW1tZWRpYXRlID0gZnVuY3Rpb24oaGFuZGxlKSB7XG4gICAgICAgICAgICBjaGFubmVsLnBvcnQyLnBvc3RNZXNzYWdlKGhhbmRsZSk7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaW5zdGFsbFJlYWR5U3RhdGVDaGFuZ2VJbXBsZW1lbnRhdGlvbigpIHtcbiAgICAgICAgdmFyIGh0bWwgPSBkb2MuZG9jdW1lbnRFbGVtZW50O1xuICAgICAgICByZWdpc3RlckltbWVkaWF0ZSA9IGZ1bmN0aW9uKGhhbmRsZSkge1xuICAgICAgICAgICAgLy8gQ3JlYXRlIGEgPHNjcmlwdD4gZWxlbWVudDsgaXRzIHJlYWR5c3RhdGVjaGFuZ2UgZXZlbnQgd2lsbCBiZSBmaXJlZCBhc3luY2hyb25vdXNseSBvbmNlIGl0IGlzIGluc2VydGVkXG4gICAgICAgICAgICAvLyBpbnRvIHRoZSBkb2N1bWVudC4gRG8gc28sIHRodXMgcXVldWluZyB1cCB0aGUgdGFzay4gUmVtZW1iZXIgdG8gY2xlYW4gdXAgb25jZSBpdCdzIGJlZW4gY2FsbGVkLlxuICAgICAgICAgICAgdmFyIHNjcmlwdCA9IGRvYy5jcmVhdGVFbGVtZW50KFwic2NyaXB0XCIpO1xuICAgICAgICAgICAgc2NyaXB0Lm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBydW5JZlByZXNlbnQoaGFuZGxlKTtcbiAgICAgICAgICAgICAgICBzY3JpcHQub25yZWFkeXN0YXRlY2hhbmdlID0gbnVsbDtcbiAgICAgICAgICAgICAgICBodG1sLnJlbW92ZUNoaWxkKHNjcmlwdCk7XG4gICAgICAgICAgICAgICAgc2NyaXB0ID0gbnVsbDtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBodG1sLmFwcGVuZENoaWxkKHNjcmlwdCk7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaW5zdGFsbFNldFRpbWVvdXRJbXBsZW1lbnRhdGlvbigpIHtcbiAgICAgICAgcmVnaXN0ZXJJbW1lZGlhdGUgPSBmdW5jdGlvbihoYW5kbGUpIHtcbiAgICAgICAgICAgIHNldFRpbWVvdXQocnVuSWZQcmVzZW50LCAwLCBoYW5kbGUpO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIC8vIElmIHN1cHBvcnRlZCwgd2Ugc2hvdWxkIGF0dGFjaCB0byB0aGUgcHJvdG90eXBlIG9mIGdsb2JhbCwgc2luY2UgdGhhdCBpcyB3aGVyZSBzZXRUaW1lb3V0IGV0IGFsLiBsaXZlLlxuICAgIHZhciBhdHRhY2hUbyA9IE9iamVjdC5nZXRQcm90b3R5cGVPZiAmJiBPYmplY3QuZ2V0UHJvdG90eXBlT2YoZ2xvYmFsKTtcbiAgICBhdHRhY2hUbyA9IGF0dGFjaFRvICYmIGF0dGFjaFRvLnNldFRpbWVvdXQgPyBhdHRhY2hUbyA6IGdsb2JhbDtcblxuICAgIC8vIERvbid0IGdldCBmb29sZWQgYnkgZS5nLiBicm93c2VyaWZ5IGVudmlyb25tZW50cy5cbiAgICBpZiAoe30udG9TdHJpbmcuY2FsbChnbG9iYWwucHJvY2VzcykgPT09IFwiW29iamVjdCBwcm9jZXNzXVwiKSB7XG4gICAgICAgIC8vIEZvciBOb2RlLmpzIGJlZm9yZSAwLjlcbiAgICAgICAgaW5zdGFsbE5leHRUaWNrSW1wbGVtZW50YXRpb24oKTtcblxuICAgIH0gZWxzZSBpZiAoY2FuVXNlUG9zdE1lc3NhZ2UoKSkge1xuICAgICAgICAvLyBGb3Igbm9uLUlFMTAgbW9kZXJuIGJyb3dzZXJzXG4gICAgICAgIGluc3RhbGxQb3N0TWVzc2FnZUltcGxlbWVudGF0aW9uKCk7XG5cbiAgICB9IGVsc2UgaWYgKGdsb2JhbC5NZXNzYWdlQ2hhbm5lbCkge1xuICAgICAgICAvLyBGb3Igd2ViIHdvcmtlcnMsIHdoZXJlIHN1cHBvcnRlZFxuICAgICAgICBpbnN0YWxsTWVzc2FnZUNoYW5uZWxJbXBsZW1lbnRhdGlvbigpO1xuXG4gICAgfSBlbHNlIGlmIChkb2MgJiYgXCJvbnJlYWR5c3RhdGVjaGFuZ2VcIiBpbiBkb2MuY3JlYXRlRWxlbWVudChcInNjcmlwdFwiKSkge1xuICAgICAgICAvLyBGb3IgSUUgNuKAkzhcbiAgICAgICAgaW5zdGFsbFJlYWR5U3RhdGVDaGFuZ2VJbXBsZW1lbnRhdGlvbigpO1xuXG4gICAgfSBlbHNlIHtcbiAgICAgICAgLy8gRm9yIG9sZGVyIGJyb3dzZXJzXG4gICAgICAgIGluc3RhbGxTZXRUaW1lb3V0SW1wbGVtZW50YXRpb24oKTtcbiAgICB9XG5cbiAgICBhdHRhY2hUby5zZXRJbW1lZGlhdGUgPSBzZXRJbW1lZGlhdGU7XG4gICAgYXR0YWNoVG8uY2xlYXJJbW1lZGlhdGUgPSBjbGVhckltbWVkaWF0ZTtcbn0odHlwZW9mIHNlbGYgPT09IFwidW5kZWZpbmVkXCIgPyB0eXBlb2YgZ2xvYmFsID09PSBcInVuZGVmaW5lZFwiID8gdGhpcyA6IGdsb2JhbCA6IHNlbGYpKTtcbiIsInZhciBzY29wZSA9ICh0eXBlb2YgZ2xvYmFsICE9PSBcInVuZGVmaW5lZFwiICYmIGdsb2JhbCkgfHxcbiAgICAgICAgICAgICh0eXBlb2Ygc2VsZiAhPT0gXCJ1bmRlZmluZWRcIiAmJiBzZWxmKSB8fFxuICAgICAgICAgICAgd2luZG93O1xudmFyIGFwcGx5ID0gRnVuY3Rpb24ucHJvdG90eXBlLmFwcGx5O1xuXG4vLyBET00gQVBJcywgZm9yIGNvbXBsZXRlbmVzc1xuXG5leHBvcnRzLnNldFRpbWVvdXQgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIG5ldyBUaW1lb3V0KGFwcGx5LmNhbGwoc2V0VGltZW91dCwgc2NvcGUsIGFyZ3VtZW50cyksIGNsZWFyVGltZW91dCk7XG59O1xuZXhwb3J0cy5zZXRJbnRlcnZhbCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gbmV3IFRpbWVvdXQoYXBwbHkuY2FsbChzZXRJbnRlcnZhbCwgc2NvcGUsIGFyZ3VtZW50cyksIGNsZWFySW50ZXJ2YWwpO1xufTtcbmV4cG9ydHMuY2xlYXJUaW1lb3V0ID1cbmV4cG9ydHMuY2xlYXJJbnRlcnZhbCA9IGZ1bmN0aW9uKHRpbWVvdXQpIHtcbiAgaWYgKHRpbWVvdXQpIHtcbiAgICB0aW1lb3V0LmNsb3NlKCk7XG4gIH1cbn07XG5cbmZ1bmN0aW9uIFRpbWVvdXQoaWQsIGNsZWFyRm4pIHtcbiAgdGhpcy5faWQgPSBpZDtcbiAgdGhpcy5fY2xlYXJGbiA9IGNsZWFyRm47XG59XG5UaW1lb3V0LnByb3RvdHlwZS51bnJlZiA9IFRpbWVvdXQucHJvdG90eXBlLnJlZiA9IGZ1bmN0aW9uKCkge307XG5UaW1lb3V0LnByb3RvdHlwZS5jbG9zZSA9IGZ1bmN0aW9uKCkge1xuICB0aGlzLl9jbGVhckZuLmNhbGwoc2NvcGUsIHRoaXMuX2lkKTtcbn07XG5cbi8vIERvZXMgbm90IHN0YXJ0IHRoZSB0aW1lLCBqdXN0IHNldHMgdXAgdGhlIG1lbWJlcnMgbmVlZGVkLlxuZXhwb3J0cy5lbnJvbGwgPSBmdW5jdGlvbihpdGVtLCBtc2Vjcykge1xuICBjbGVhclRpbWVvdXQoaXRlbS5faWRsZVRpbWVvdXRJZCk7XG4gIGl0ZW0uX2lkbGVUaW1lb3V0ID0gbXNlY3M7XG59O1xuXG5leHBvcnRzLnVuZW5yb2xsID0gZnVuY3Rpb24oaXRlbSkge1xuICBjbGVhclRpbWVvdXQoaXRlbS5faWRsZVRpbWVvdXRJZCk7XG4gIGl0ZW0uX2lkbGVUaW1lb3V0ID0gLTE7XG59O1xuXG5leHBvcnRzLl91bnJlZkFjdGl2ZSA9IGV4cG9ydHMuYWN0aXZlID0gZnVuY3Rpb24oaXRlbSkge1xuICBjbGVhclRpbWVvdXQoaXRlbS5faWRsZVRpbWVvdXRJZCk7XG5cbiAgdmFyIG1zZWNzID0gaXRlbS5faWRsZVRpbWVvdXQ7XG4gIGlmIChtc2VjcyA+PSAwKSB7XG4gICAgaXRlbS5faWRsZVRpbWVvdXRJZCA9IHNldFRpbWVvdXQoZnVuY3Rpb24gb25UaW1lb3V0KCkge1xuICAgICAgaWYgKGl0ZW0uX29uVGltZW91dClcbiAgICAgICAgaXRlbS5fb25UaW1lb3V0KCk7XG4gICAgfSwgbXNlY3MpO1xuICB9XG59O1xuXG4vLyBzZXRpbW1lZGlhdGUgYXR0YWNoZXMgaXRzZWxmIHRvIHRoZSBnbG9iYWwgb2JqZWN0XG5yZXF1aXJlKFwic2V0aW1tZWRpYXRlXCIpO1xuLy8gT24gc29tZSBleG90aWMgZW52aXJvbm1lbnRzLCBpdCdzIG5vdCBjbGVhciB3aGljaCBvYmplY3QgYHNldGltbWVkaWF0ZWAgd2FzXG4vLyBhYmxlIHRvIGluc3RhbGwgb250by4gIFNlYXJjaCBlYWNoIHBvc3NpYmlsaXR5IGluIHRoZSBzYW1lIG9yZGVyIGFzIHRoZVxuLy8gYHNldGltbWVkaWF0ZWAgbGlicmFyeS5cbmV4cG9ydHMuc2V0SW1tZWRpYXRlID0gKHR5cGVvZiBzZWxmICE9PSBcInVuZGVmaW5lZFwiICYmIHNlbGYuc2V0SW1tZWRpYXRlKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAodHlwZW9mIGdsb2JhbCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBnbG9iYWwuc2V0SW1tZWRpYXRlKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAodGhpcyAmJiB0aGlzLnNldEltbWVkaWF0ZSk7XG5leHBvcnRzLmNsZWFySW1tZWRpYXRlID0gKHR5cGVvZiBzZWxmICE9PSBcInVuZGVmaW5lZFwiICYmIHNlbGYuY2xlYXJJbW1lZGlhdGUpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgKHR5cGVvZiBnbG9iYWwgIT09IFwidW5kZWZpbmVkXCIgJiYgZ2xvYmFsLmNsZWFySW1tZWRpYXRlKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICh0aGlzICYmIHRoaXMuY2xlYXJJbW1lZGlhdGUpO1xuIiwidmFyIGc7XG5cbi8vIFRoaXMgd29ya3MgaW4gbm9uLXN0cmljdCBtb2RlXG5nID0gKGZ1bmN0aW9uKCkge1xuXHRyZXR1cm4gdGhpcztcbn0pKCk7XG5cbnRyeSB7XG5cdC8vIFRoaXMgd29ya3MgaWYgZXZhbCBpcyBhbGxvd2VkIChzZWUgQ1NQKVxuXHRnID0gZyB8fCBuZXcgRnVuY3Rpb24oXCJyZXR1cm4gdGhpc1wiKSgpO1xufSBjYXRjaCAoZSkge1xuXHQvLyBUaGlzIHdvcmtzIGlmIHRoZSB3aW5kb3cgcmVmZXJlbmNlIGlzIGF2YWlsYWJsZVxuXHRpZiAodHlwZW9mIHdpbmRvdyA9PT0gXCJvYmplY3RcIikgZyA9IHdpbmRvdztcbn1cblxuLy8gZyBjYW4gc3RpbGwgYmUgdW5kZWZpbmVkLCBidXQgbm90aGluZyB0byBkbyBhYm91dCBpdC4uLlxuLy8gV2UgcmV0dXJuIHVuZGVmaW5lZCwgaW5zdGVhZCBvZiBub3RoaW5nIGhlcmUsIHNvIGl0J3Ncbi8vIGVhc2llciB0byBoYW5kbGUgdGhpcyBjYXNlLiBpZighZ2xvYmFsKSB7IC4uLn1cblxubW9kdWxlLmV4cG9ydHMgPSBnO1xuIiwiZXhwb3J0IHsgU3VydmV5TW9kZWwsIFN1cnZleVdpbmRvd01vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5leHBvcnQgeyBzZXR0aW5ncyB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuZXhwb3J0IHsgc3VydmV5TG9jYWxpemF0aW9uLCBzdXJ2ZXlTdHJpbmdzIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG4iLCIvLyByZWFjdFxuZXhwb3J0IHsgU3VydmV5LCBhdHRhY2hLZXkyY2xpY2sgfSBmcm9tIFwiLi4vcmVhY3QvcmVhY3RTdXJ2ZXlcIjtcbmV4cG9ydCB7IFJlYWN0U3VydmV5RWxlbWVudHNXcmFwcGVyIH0gZnJvbSBcIi4uL3JlYWN0L3JlYWN0c3VydmV5bW9kZWxcIjtcbmV4cG9ydCB7IFN1cnZleU5hdmlnYXRpb25CYXNlIH0gZnJvbSBcIi4uL3JlYWN0L3JlYWN0U3VydmV5TmF2aWdhdGlvbkJhc2VcIjtcbmV4cG9ydCB7IFN1cnZleVRpbWVyUGFuZWwgfSBmcm9tIFwiLi4vcmVhY3QvcmVhY3R0aW1lcnBhbmVsXCI7XG5leHBvcnQgeyBTdXJ2ZXlQYWdlIH0gZnJvbSBcIi4uL3JlYWN0L3BhZ2VcIjtcbmV4cG9ydCB7IFN1cnZleVJvdyB9IGZyb20gXCIuLi9yZWFjdC9yb3dcIjtcbmV4cG9ydCB7IFN1cnZleVBhbmVsIH0gZnJvbSBcIi4uL3JlYWN0L3BhbmVsXCI7XG5leHBvcnQgeyBTdXJ2ZXlGbG93UGFuZWwgfSBmcm9tIFwiLi4vcmVhY3QvZmxvdy1wYW5lbFwiO1xuZXhwb3J0IHtcbiAgU3VydmV5UXVlc3Rpb24sXG4gIFN1cnZleUVsZW1lbnRFcnJvcnMsXG4gIFN1cnZleVF1ZXN0aW9uQW5kRXJyb3JzQ2VsbCxcbiAgSVN1cnZleUNyZWF0b3Jcbn0gZnJvbSBcIi4uL3JlYWN0L3JlYWN0cXVlc3Rpb25cIjtcbmV4cG9ydCB7XG4gIFJlYWN0U3VydmV5RWxlbWVudCxcbiAgU3VydmV5RWxlbWVudEJhc2UsXG4gIFN1cnZleVF1ZXN0aW9uRWxlbWVudEJhc2UsXG59IGZyb20gXCIuLi9yZWFjdC9yZWFjdHF1ZXN0aW9uX2VsZW1lbnRcIjtcbmV4cG9ydCB7XG4gIFN1cnZleVF1ZXN0aW9uQ29tbWVudEl0ZW0sXG4gIFN1cnZleVF1ZXN0aW9uQ29tbWVudCxcbn0gZnJvbSBcIi4uL3JlYWN0L3JlYWN0cXVlc3Rpb25fY29tbWVudFwiO1xuZXhwb3J0IHtcbiAgU3VydmV5UXVlc3Rpb25DaGVja2JveCxcbiAgU3VydmV5UXVlc3Rpb25DaGVja2JveEl0ZW0sXG59IGZyb20gXCIuLi9yZWFjdC9yZWFjdHF1ZXN0aW9uX2NoZWNrYm94XCI7XG5leHBvcnQge1xuICBTdXJ2ZXlRdWVzdGlvblJhbmtpbmcsXG4gIFN1cnZleVF1ZXN0aW9uUmFua2luZ0l0ZW0sXG59IGZyb20gXCIuLi9yZWFjdC9yZWFjdHF1ZXN0aW9uX3JhbmtpbmdcIjtcbmV4cG9ydCB7IFRhZ2JveEZpbHRlclN0cmluZyB9IGZyb20gXCIuLi9yZWFjdC90YWdib3gtZmlsdGVyXCI7XG5leHBvcnQgeyBTdXJ2ZXlRdWVzdGlvbk9wdGlvbkl0ZW0gfSBmcm9tIFwiLi4vcmVhY3QvZHJvcGRvd24taXRlbVwiO1xuZXhwb3J0IHsgU3VydmV5UXVlc3Rpb25Ecm9wZG93bkJhc2UgfSBmcm9tIFwiLi4vcmVhY3QvZHJvcGRvd24tYmFzZVwiO1xuZXhwb3J0IHsgU3VydmV5UXVlc3Rpb25Ecm9wZG93biB9IGZyb20gXCIuLi9yZWFjdC9yZWFjdHF1ZXN0aW9uX2Ryb3Bkb3duXCI7XG5leHBvcnQgeyBTdXJ2ZXlRdWVzdGlvblRhZ2JveEl0ZW0gfSBmcm9tIFwiLi4vcmVhY3QvdGFnYm94LWl0ZW1cIjtcbmV4cG9ydCB7IFN1cnZleVF1ZXN0aW9uVGFnYm94IH0gZnJvbSBcIi4uL3JlYWN0L3JlYWN0cXVlc3Rpb25fdGFnYm94XCI7XG5leHBvcnQgeyBTdXJ2ZXlRdWVzdGlvbkRyb3Bkb3duU2VsZWN0IH0gZnJvbSBcIi4uL3JlYWN0L2Ryb3Bkb3duLXNlbGVjdFwiO1xuZXhwb3J0IHtcbiAgU3VydmV5UXVlc3Rpb25NYXRyaXgsXG4gIFN1cnZleVF1ZXN0aW9uTWF0cml4Um93LFxufSBmcm9tIFwiLi4vcmVhY3QvcmVhY3RxdWVzdGlvbl9tYXRyaXhcIjtcbmV4cG9ydCB7IFN1cnZleVF1ZXN0aW9uSHRtbCB9IGZyb20gXCIuLi9yZWFjdC9yZWFjdHF1ZXN0aW9uX2h0bWxcIjtcbmV4cG9ydCB7IFN1cnZleVF1ZXN0aW9uRmlsZSB9IGZyb20gXCIuLi9yZWFjdC9yZWFjdHF1ZXN0aW9uX2ZpbGVcIjtcbmV4cG9ydCB7IFN1cnZleVF1ZXN0aW9uTXVsdGlwbGVUZXh0IH0gZnJvbSBcIi4uL3JlYWN0L3JlYWN0cXVlc3Rpb25fbXVsdGlwbGV0ZXh0XCI7XG5leHBvcnQgeyBTdXJ2ZXlRdWVzdGlvblJhZGlvZ3JvdXAsIFN1cnZleVF1ZXN0aW9uUmFkaW9JdGVtIH0gZnJvbSBcIi4uL3JlYWN0L3JlYWN0cXVlc3Rpb25fcmFkaW9ncm91cFwiO1xuZXhwb3J0IHsgU3VydmV5UXVlc3Rpb25UZXh0IH0gZnJvbSBcIi4uL3JlYWN0L3JlYWN0cXVlc3Rpb25fdGV4dFwiO1xuZXhwb3J0IHsgU3VydmV5UXVlc3Rpb25Cb29sZWFuIH0gZnJvbSBcIi4uL3JlYWN0L2Jvb2xlYW5cIjtcbmV4cG9ydCB7IFN1cnZleVF1ZXN0aW9uQm9vbGVhbkNoZWNrYm94IH0gZnJvbSBcIi4uL3JlYWN0L2Jvb2xlYW4tY2hlY2tib3hcIjtcbmV4cG9ydCB7IFN1cnZleVF1ZXN0aW9uQm9vbGVhblJhZGlvIH0gZnJvbSBcIi4uL3JlYWN0L2Jvb2xlYW4tcmFkaW9cIjtcbmV4cG9ydCB7IFN1cnZleVF1ZXN0aW9uRW1wdHkgfSBmcm9tIFwiLi4vcmVhY3QvcmVhY3RxdWVzdGlvbl9lbXB0eVwiO1xuZXhwb3J0IHsgU3VydmV5UXVlc3Rpb25NYXRyaXhEcm9wZG93bkNlbGwsIFN1cnZleVF1ZXN0aW9uTWF0cml4RHJvcGRvd25CYXNlIH0gZnJvbSBcIi4uL3JlYWN0L3JlYWN0cXVlc3Rpb25fbWF0cml4ZHJvcGRvd25iYXNlXCI7XG5leHBvcnQgeyBTdXJ2ZXlRdWVzdGlvbk1hdHJpeERyb3Bkb3duIH0gZnJvbSBcIi4uL3JlYWN0L3JlYWN0cXVlc3Rpb25fbWF0cml4ZHJvcGRvd25cIjtcbmV4cG9ydCB7IFN1cnZleVF1ZXN0aW9uTWF0cml4RHluYW1pYywgU3VydmV5UXVlc3Rpb25NYXRyaXhEeW5hbWljQWRkQnV0dG9uIH0gZnJvbSBcIi4uL3JlYWN0L3JlYWN0cXVlc3Rpb25fbWF0cml4ZHluYW1pY1wiO1xuZXhwb3J0IHsgU3VydmV5UXVlc3Rpb25QYW5lbER5bmFtaWMgfSBmcm9tIFwiLi4vcmVhY3QvcmVhY3RxdWVzdGlvbl9wYW5lbGR5bmFtaWNcIjtcbmV4cG9ydCB7IFN1cnZleVByb2dyZXNzIH0gZnJvbSBcIi4uL3JlYWN0L3JlYWN0U3VydmV5UHJvZ3Jlc3NcIjtcbmV4cG9ydCB7IFN1cnZleVByb2dyZXNzQnV0dG9ucyB9IGZyb20gXCIuLi9yZWFjdC9yZWFjdFN1cnZleVByb2dyZXNzQnV0dG9uc1wiO1xuZXhwb3J0IHsgU3VydmV5UXVlc3Rpb25SYXRpbmcgfSBmcm9tIFwiLi4vcmVhY3QvcmVhY3RxdWVzdGlvbl9yYXRpbmdcIjtcbmV4cG9ydCB7IFN1cnZleVF1ZXN0aW9uUmF0aW5nRHJvcGRvd24gfSBmcm9tIFwiLi4vcmVhY3QvcmF0aW5nLWRyb3Bkb3duXCI7XG5leHBvcnQgeyBTdXJ2ZXlRdWVzdGlvbkV4cHJlc3Npb24gfSBmcm9tIFwiLi4vcmVhY3QvcmVhY3RxdWVzdGlvbl9leHByZXNzaW9uXCI7XG5leHBvcnQgeyBQb3B1cFN1cnZleSwgU3VydmV5V2luZG93IH0gZnJvbSBcIi4uL3JlYWN0L3JlYWN0LXBvcHVwLXN1cnZleVwiO1xuZXhwb3J0IHsgUmVhY3RRdWVzdGlvbkZhY3RvcnkgfSBmcm9tIFwiLi4vcmVhY3QvcmVhY3RxdWVzdGlvbl9mYWN0b3J5XCI7XG5leHBvcnQgeyBSZWFjdEVsZW1lbnRGYWN0b3J5IH0gZnJvbSBcIi4uL3JlYWN0L2VsZW1lbnQtZmFjdG9yeVwiO1xuZXhwb3J0IHsgU3VydmV5UXVlc3Rpb25JbWFnZVBpY2tlciB9IGZyb20gXCIuLi9yZWFjdC9pbWFnZXBpY2tlclwiO1xuZXhwb3J0IHsgU3VydmV5UXVlc3Rpb25JbWFnZSB9IGZyb20gXCIuLi9yZWFjdC9pbWFnZVwiO1xuZXhwb3J0IHsgU3VydmV5UXVlc3Rpb25TaWduYXR1cmVQYWQgfSBmcm9tIFwiLi4vcmVhY3Qvc2lnbmF0dXJlcGFkXCI7XG5leHBvcnQgeyBTdXJ2ZXlRdWVzdGlvbkJ1dHRvbkdyb3VwIH0gZnJvbSBcIi4uL3JlYWN0L3JlYWN0cXVlc3Rpb25fYnV0dG9uZ3JvdXBcIjtcbmV4cG9ydCB7IFN1cnZleVF1ZXN0aW9uQ3VzdG9tLCBTdXJ2ZXlRdWVzdGlvbkNvbXBvc2l0ZSB9IGZyb20gXCIuLi9yZWFjdC9yZWFjdHF1ZXN0aW9uX2N1c3RvbVwiO1xuXG5leHBvcnQgeyBQb3B1cCB9IGZyb20gXCIuLi9yZWFjdC9jb21wb25lbnRzL3BvcHVwL3BvcHVwXCI7XG5leHBvcnQgeyBMaXN0IH0gZnJvbSBcIi4uL3JlYWN0L2NvbXBvbmVudHMvbGlzdC9saXN0XCI7XG5leHBvcnQgeyBUaXRsZUFjdGlvbnMgfSBmcm9tIFwiLi4vcmVhY3QvY29tcG9uZW50cy90aXRsZS90aXRsZS1hY3Rpb25zXCI7XG5leHBvcnQgeyBUaXRsZUVsZW1lbnQgfSBmcm9tIFwiLi4vcmVhY3QvY29tcG9uZW50cy90aXRsZS90aXRsZS1lbGVtZW50XCI7XG5leHBvcnQgeyBTdXJ2ZXlBY3Rpb25CYXIgfSBmcm9tIFwiLi4vcmVhY3QvY29tcG9uZW50cy9hY3Rpb24tYmFyL2FjdGlvbi1iYXJcIjtcbmV4cG9ydCB7IExvZ29JbWFnZSB9IGZyb20gXCIuLi9yZWFjdC9jb21wb25lbnRzL3N1cnZleS1oZWFkZXIvbG9nby1pbWFnZVwiO1xuZXhwb3J0IHsgU3VydmV5SGVhZGVyIH0gZnJvbSBcIi4uL3JlYWN0L2NvbXBvbmVudHMvc3VydmV5LWhlYWRlci9zdXJ2ZXktaGVhZGVyXCI7XG5leHBvcnQgeyBTdmdJY29uIH0gZnJvbSBcIi4uL3JlYWN0L2NvbXBvbmVudHMvc3ZnLWljb24vc3ZnLWljb25cIjtcbmV4cG9ydCB7IFN1cnZleVF1ZXN0aW9uTWF0cml4RHluYW1pY1JlbW92ZUJ1dHRvbiB9IGZyb20gXCIuLi9yZWFjdC9jb21wb25lbnRzL21hdHJpeC1hY3Rpb25zL3JlbW92ZS1idXR0b24vcmVtb3ZlLWJ1dHRvblwiO1xuZXhwb3J0IHsgU3VydmV5UXVlc3Rpb25NYXRyaXhEZXRhaWxCdXR0b24gfSBmcm9tIFwiLi4vcmVhY3QvY29tcG9uZW50cy9tYXRyaXgtYWN0aW9ucy9kZXRhaWwtYnV0dG9uL2RldGFpbC1idXR0b25cIjtcbmV4cG9ydCB7IFN1cnZleVF1ZXN0aW9uTWF0cml4RHluYW1pY0RyYWdEcm9wSWNvbiB9IGZyb20gXCIuLi9yZWFjdC9jb21wb25lbnRzL21hdHJpeC1hY3Rpb25zL2RyYWctZHJvcC1pY29uL2RyYWctZHJvcC1pY29uXCI7XG5leHBvcnQgeyBTdXJ2ZXlRdWVzdGlvblBhbmVsRHluYW1pY0FkZEJ1dHRvbiB9IGZyb20gXCIuLi9yZWFjdC9jb21wb25lbnRzL3BhbmVsZHluYW1pYy1hY3Rpb25zL3BhbmVsZHluYW1pYy1hZGQtYnRuXCI7XG5leHBvcnQgeyBTdXJ2ZXlRdWVzdGlvblBhbmVsRHluYW1pY1JlbW92ZUJ1dHRvbiB9IGZyb20gXCIuLi9yZWFjdC9jb21wb25lbnRzL3BhbmVsZHluYW1pYy1hY3Rpb25zL3BhbmVsZHluYW1pYy1yZW1vdmUtYnRuXCI7XG5leHBvcnQgeyBTdXJ2ZXlRdWVzdGlvblBhbmVsRHluYW1pY1ByZXZCdXR0b24gfSBmcm9tIFwiLi4vcmVhY3QvY29tcG9uZW50cy9wYW5lbGR5bmFtaWMtYWN0aW9ucy9wYW5lbGR5bmFtaWMtcHJldi1idG5cIjtcbmV4cG9ydCB7IFN1cnZleVF1ZXN0aW9uUGFuZWxEeW5hbWljTmV4dEJ1dHRvbiB9IGZyb20gXCIuLi9yZWFjdC9jb21wb25lbnRzL3BhbmVsZHluYW1pYy1hY3Rpb25zL3BhbmVsZHluYW1pYy1uZXh0LWJ0blwiO1xuZXhwb3J0IHsgU3VydmV5UXVlc3Rpb25QYW5lbER5bmFtaWNQcm9ncmVzc1RleHQgfSBmcm9tIFwiLi4vcmVhY3QvY29tcG9uZW50cy9wYW5lbGR5bmFtaWMtYWN0aW9ucy9wYW5lbGR5bmFtaWMtcHJvZ3Jlc3MtdGV4dFwiO1xuZXhwb3J0IHsgU3VydmV5TmF2aWdhdGlvbkJ1dHRvbiB9IGZyb20gXCIuLi9yZWFjdC9jb21wb25lbnRzL3N1cnZleS1hY3Rpb25zL3N1cnZleS1uYXYtYnV0dG9uXCI7XG5cbmV4cG9ydCB7IE1hdHJpeFJvdyB9IGZyb20gXCIuLi9yZWFjdC9jb21wb25lbnRzL21hdHJpeC9yb3dcIjtcbmV4cG9ydCB7IFNrZWxldG9uIH0gZnJvbSBcIi4uL3JlYWN0L2NvbXBvbmVudHMvc2tlbGV0b25cIjtcblxuZXhwb3J0IHsgU3VydmV5TG9jU3RyaW5nVmlld2VyIH0gZnJvbSBcIi4uL3JlYWN0L3N0cmluZy12aWV3ZXJcIjtcbmV4cG9ydCB7IFN1cnZleUxvY1N0cmluZ0VkaXRvciB9IGZyb20gXCIuLi9yZWFjdC9zdHJpbmctZWRpdG9yXCI7XG5cbi8vVW5jb21tZW50IHRvIGluY2x1ZGUgdGhlIFwiZGF0ZVwiIHF1ZXN0aW9uIHR5cGUuXG4vL2V4cG9ydCB7ZGVmYXVsdCBhcyBTdXJ2ZXlRdWVzdGlvbkRhdGV9IGZyb20gXCIuLi9wbHVnaW5zL3JlYWN0L3JlYWN0cXVlc3Rpb25kYXRlXCI7XG4iLCJleHBvcnQgKiBmcm9tIFwiLi9yZWFjdC11aS1tb2RlbFwiO1xuZXhwb3J0ICogZnJvbSBcIi4vY29yZS1leHBvcnRcIjtcbmV4cG9ydCB7IFN1cnZleU1vZGVsIGFzIE1vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5cbmV4cG9ydCAqIGZyb20gXCIuLi91dGlscy9yZXNwb25zaXZpdHktbWFuYWdlclwiO1xuZXhwb3J0IHsgdW53cmFwIH0gZnJvbSBcIi4uL3V0aWxzL3V0aWxzXCI7XG5cbmltcG9ydCB7IGNoZWNrTGlicmFyeVZlcnNpb24gfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcblxuY2hlY2tMaWJyYXJ5VmVyc2lvbihgJHtwcm9jZXNzLmVudi5WRVJTSU9OfWAsIFwic3VydmV5LXJlYWN0LXVpXCIpOyIsImltcG9ydCAqIGFzIFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgUmVuZGVyZXJGYWN0b3J5IH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBSZWFjdFF1ZXN0aW9uRmFjdG9yeSB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fZmFjdG9yeVwiO1xuaW1wb3J0IHsgU3VydmV5UXVlc3Rpb25Cb29sZWFuIH0gZnJvbSBcIi4vYm9vbGVhblwiO1xuaW1wb3J0IHsgVGl0bGVBY3Rpb25zIH0gZnJvbSBcIi4vY29tcG9uZW50cy90aXRsZS90aXRsZS1hY3Rpb25zXCI7XG5pbXBvcnQgeyBTdXJ2ZXlFbGVtZW50QmFzZSB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fZWxlbWVudFwiO1xuXG5leHBvcnQgY2xhc3MgU3VydmV5UXVlc3Rpb25Cb29sZWFuQ2hlY2tib3ggZXh0ZW5kcyBTdXJ2ZXlRdWVzdGlvbkJvb2xlYW4ge1xuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICBjb25zdCBjc3NDbGFzc2VzID0gdGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzO1xuICAgIGNvbnN0IGl0ZW1DbGFzcyA9IHRoaXMucXVlc3Rpb24uZ2V0Q2hlY2tib3hJdGVtQ3NzKCk7XG4gICAgY29uc3QgZGVzY3JpcHRpb24gPSB0aGlzLnF1ZXN0aW9uLmNhblJlbmRlckxhYmVsRGVzY3JpcHRpb24gP1xuICAgICAgU3VydmV5RWxlbWVudEJhc2UucmVuZGVyUXVlc3Rpb25EZXNjcmlwdGlvbih0aGlzLnF1ZXN0aW9uKSA6IG51bGw7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtjc3NDbGFzc2VzLnJvb3RDaGVja2JveH0+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtpdGVtQ2xhc3N9PlxuICAgICAgICAgIDxsYWJlbCBjbGFzc05hbWU9e2Nzc0NsYXNzZXMuY2hlY2tib3hMYWJlbH0+XG4gICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgcmVmPXt0aGlzLmNoZWNrUmVmfVxuICAgICAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICAgICAgICBuYW1lPXt0aGlzLnF1ZXN0aW9uLm5hbWV9XG4gICAgICAgICAgICAgIHZhbHVlPXtcbiAgICAgICAgICAgICAgICB0aGlzLnF1ZXN0aW9uLmJvb2xlYW5WYWx1ZSA9PT0gbnVsbFxuICAgICAgICAgICAgICAgICAgPyBcIlwiXG4gICAgICAgICAgICAgICAgICA6IHRoaXMucXVlc3Rpb24uYm9vbGVhblZhbHVlXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgaWQ9e3RoaXMucXVlc3Rpb24uaW5wdXRJZH1cbiAgICAgICAgICAgICAgY2xhc3NOYW1lPXtjc3NDbGFzc2VzLmNvbnRyb2xDaGVja2JveH1cbiAgICAgICAgICAgICAgZGlzYWJsZWQ9e3RoaXMuaXNEaXNwbGF5TW9kZX1cbiAgICAgICAgICAgICAgY2hlY2tlZD17dGhpcy5xdWVzdGlvbi5ib29sZWFuVmFsdWUgfHwgZmFsc2V9XG4gICAgICAgICAgICAgIG9uQ2hhbmdlPXt0aGlzLmhhbmRsZU9uQ2hhbmdlfVxuICAgICAgICAgICAgICBhcmlhLXJlcXVpcmVkPXt0aGlzLnF1ZXN0aW9uLmFyaWFSZXF1aXJlZH1cbiAgICAgICAgICAgICAgYXJpYS1sYWJlbD17dGhpcy5xdWVzdGlvbi5hcmlhTGFiZWx9XG4gICAgICAgICAgICAgIGFyaWEtaW52YWxpZD17dGhpcy5xdWVzdGlvbi5hcmlhSW52YWxpZH1cbiAgICAgICAgICAgICAgYXJpYS1kZXNjcmliZWRieT17dGhpcy5xdWVzdGlvbi5hcmlhRGVzY3JpYmVkQnl9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPXtjc3NDbGFzc2VzLmNoZWNrYm94TWF0ZXJpYWxEZWNvcmF0b3J9PlxuICAgICAgICAgICAgICB7dGhpcy5xdWVzdGlvbi5zdmdJY29uID9cbiAgICAgICAgICAgICAgICA8c3ZnXG4gICAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2Nzc0NsYXNzZXMuY2hlY2tib3hJdGVtRGVjb3JhdG9yfVxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDx1c2UgeGxpbmtIcmVmPXt0aGlzLnF1ZXN0aW9uLnN2Z0ljb259PjwvdXNlPlxuICAgICAgICAgICAgICAgIDwvc3ZnPiA6IG51bGxcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJjaGVja1wiIC8+XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICB7dGhpcy5xdWVzdGlvbi5pc0xhYmVsUmVuZGVyZWQgJiYgKFxuICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9e2Nzc0NsYXNzZXMuY2hlY2tib3hDb250cm9sTGFiZWx9IGlkPXt0aGlzLnF1ZXN0aW9uLmxhYmVsUmVuZGVyZWRBcmlhSUR9PlxuICAgICAgICAgICAgICAgIDxUaXRsZUFjdGlvbnMgZWxlbWVudD17dGhpcy5xdWVzdGlvbn0gY3NzQ2xhc3Nlcz17dGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzfT48L1RpdGxlQWN0aW9ucz5cbiAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgIHtkZXNjcmlwdGlvbn1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG59XG5cblJlYWN0UXVlc3Rpb25GYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyUXVlc3Rpb24oXG4gIFwic3YtYm9vbGVhbi1jaGVja2JveFwiLFxuICAocHJvcHMpID0+IHtcbiAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTdXJ2ZXlRdWVzdGlvbkJvb2xlYW5DaGVja2JveCwgcHJvcHMpO1xuICB9XG4pO1xuXG5SZW5kZXJlckZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJSZW5kZXJlcihcbiAgXCJib29sZWFuXCIsXG4gIFwiY2hlY2tib3hcIixcbiAgXCJzdi1ib29sZWFuLWNoZWNrYm94XCJcbik7XG4iLCJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFJlbmRlcmVyRmFjdG9yeSB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgUmVhY3RRdWVzdGlvbkZhY3RvcnkgfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uX2ZhY3RvcnlcIjtcbmltcG9ydCB7IFN1cnZleVF1ZXN0aW9uQm9vbGVhbiB9IGZyb20gXCIuL2Jvb2xlYW5cIjtcblxuZXhwb3J0IGNsYXNzIFN1cnZleVF1ZXN0aW9uQm9vbGVhblJhZGlvIGV4dGVuZHMgU3VydmV5UXVlc3Rpb25Cb29sZWFuIHtcbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgfVxuICBwcml2YXRlIHJlbmRlclJhZGlvSXRlbSh2YWx1ZTogYW55LCBsb2NUZXh0OiBhbnkpOiBKU1guRWxlbWVudCB7XG4gICAgY29uc3QgY3NzQ2xhc3NlcyA9IHRoaXMucXVlc3Rpb24uY3NzQ2xhc3NlcztcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiByb2xlPVwicHJlc2VudGF0aW9uXCIgY2xhc3NOYW1lPXsgdGhpcy5xdWVzdGlvbi5nZXRSYWRpb0l0ZW1DbGFzcyhjc3NDbGFzc2VzLCB2YWx1ZSkgfT5cbiAgICAgICAgPGxhYmVsIGNsYXNzTmFtZT0geyBjc3NDbGFzc2VzLnJhZGlvTGFiZWwgfT5cbiAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgIHR5cGU9XCJyYWRpb1wiXG4gICAgICAgICAgICBuYW1lID0geyB0aGlzLnF1ZXN0aW9uLm5hbWUgfVxuICAgICAgICAgICAgdmFsdWUgPSB7IHZhbHVlIH1cbiAgICAgICAgICAgIGFyaWEtZGVzY3JpYmVkYnkgPSB7IHRoaXMucXVlc3Rpb24uYXJpYURlc2NyaWJlZEJ5IH1cbiAgICAgICAgICAgIGNoZWNrZWQgPSB7IHZhbHVlID09PSB0aGlzLnF1ZXN0aW9uLnZhbHVlIH1cbiAgICAgICAgICAgIGRpc2FibGVkID0geyB0aGlzLnF1ZXN0aW9uLmlzSW5wdXRSZWFkT25seSB9XG4gICAgICAgICAgICBjbGFzc05hbWUgPSB7IGNzc0NsYXNzZXMuaXRlbVJhZGlvQ29udHJvbCB9XG4gICAgICAgICAgICBvbkNoYW5nZT17IHRoaXMuaGFuZGxlT25DaGFuZ2UgfVxuICAgICAgICAgIC8+XG4gICAgICAgICAgeyB0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMubWF0ZXJpYWxSYWRpb0RlY29yYXRvcj9cbiAgICAgICAgICAgICg8c3BhbiBjbGFzc05hbWU9eyBjc3NDbGFzc2VzLm1hdGVyaWFsUmFkaW9EZWNvcmF0b3IgfT5cbiAgICAgICAgICAgICAgeyB0aGlzLnF1ZXN0aW9uLml0ZW1TdmdJY29uID9cbiAgICAgICAgICAgICAgICAoPHN2ZyBjbGFzc05hbWU9e2Nzc0NsYXNzZXMuaXRlbVJhZGlvRGVjb3JhdG9yfT5cbiAgICAgICAgICAgICAgICAgIDx1c2UgeGxpbmtIcmVmPXt0aGlzLnF1ZXN0aW9uLml0ZW1TdmdJY29ufT48L3VzZT5cbiAgICAgICAgICAgICAgICA8L3N2Zz4pOm51bGx9XG4gICAgICAgICAgICA8L3NwYW4+KTpudWxsfVxuICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT0geyBjc3NDbGFzc2VzLnJhZGlvQ29udHJvbExhYmVsIH0+XG4gICAgICAgICAgICB7IHRoaXMucmVuZGVyTG9jU3RyaW5nKGxvY1RleHQpIH1cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgIDwvbGFiZWw+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG4gIGhhbmRsZU9uQ2hhbmdlID0gKGV2ZW50OiBhbnkpID0+IHtcbiAgICB0aGlzLnF1ZXN0aW9uLnZhbHVlID0gZXZlbnQubmF0aXZlRXZlbnQudGFyZ2V0LnZhbHVlO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICBjb25zdCBjc3NDbGFzc2VzID0gdGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzO1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT17Y3NzQ2xhc3Nlcy5yb290UmFkaW99PlxuICAgICAgICA8ZmllbGRzZXQgcm9sZT1cInByZXNlbnRhdGlvblwiIGNsYXNzTmFtZT0geyBjc3NDbGFzc2VzLnJhZGlvRmllbGRzZXQgfT5cbiAgICAgICAgICB7IHRoaXMucmVuZGVyUmFkaW9JdGVtKGZhbHNlLCB0aGlzLnF1ZXN0aW9uLmxvY0xhYmVsRmFsc2UpIH1cbiAgICAgICAgICB7IHRoaXMucmVuZGVyUmFkaW9JdGVtKHRydWUsIHRoaXMucXVlc3Rpb24ubG9jTGFiZWxUcnVlKSB9XG4gICAgICAgIDwvZmllbGRzZXQ+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG59XG5cblJlYWN0UXVlc3Rpb25GYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyUXVlc3Rpb24oXG4gIFwic3YtYm9vbGVhbi1yYWRpb1wiLFxuICAocHJvcHMpID0+IHtcbiAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTdXJ2ZXlRdWVzdGlvbkJvb2xlYW5SYWRpbywgcHJvcHMpO1xuICB9XG4pO1xuXG5SZW5kZXJlckZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJSZW5kZXJlcihcbiAgXCJib29sZWFuXCIsXG4gIFwicmFkaW9cIixcbiAgXCJzdi1ib29sZWFuLXJhZGlvXCJcbik7XG4iLCJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFF1ZXN0aW9uQm9vbGVhbk1vZGVsLCBDc3NDbGFzc0J1aWxkZXIsIEJhc2UgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFN1cnZleVF1ZXN0aW9uRWxlbWVudEJhc2UgfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uX2VsZW1lbnRcIjtcbmltcG9ydCB7IFJlYWN0UXVlc3Rpb25GYWN0b3J5IH0gZnJvbSBcIi4vcmVhY3RxdWVzdGlvbl9mYWN0b3J5XCI7XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlRdWVzdGlvbkJvb2xlYW4gZXh0ZW5kcyBTdXJ2ZXlRdWVzdGlvbkVsZW1lbnRCYXNlIHtcbiAgcHJvdGVjdGVkIGNoZWNrUmVmOiBSZWFjdC5SZWZPYmplY3Q8SFRNTElucHV0RWxlbWVudD47XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgdGhpcy5oYW5kbGVPbkNoYW5nZSA9IHRoaXMuaGFuZGxlT25DaGFuZ2UuYmluZCh0aGlzKTtcbiAgICB0aGlzLmhhbmRsZU9uQ2xpY2sgPSB0aGlzLmhhbmRsZU9uQ2xpY2suYmluZCh0aGlzKTtcbiAgICB0aGlzLmhhbmRsZU9uTGFiZWxDbGljayA9IHRoaXMuaGFuZGxlT25MYWJlbENsaWNrLmJpbmQodGhpcyk7XG4gICAgdGhpcy5oYW5kbGVPblN3aXRjaENsaWNrID0gdGhpcy5oYW5kbGVPblN3aXRjaENsaWNrLmJpbmQodGhpcyk7XG4gICAgdGhpcy5oYW5kbGVPbktleURvd24gPSB0aGlzLmhhbmRsZU9uS2V5RG93bi5iaW5kKHRoaXMpO1xuICAgIHRoaXMuY2hlY2tSZWYgPSBSZWFjdC5jcmVhdGVSZWYoKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0U3RhdGVFbGVtZW50KCk6IEJhc2Uge1xuICAgIHJldHVybiB0aGlzLnF1ZXN0aW9uO1xuICB9XG4gIHByb3RlY3RlZCBnZXQgcXVlc3Rpb24oKTogUXVlc3Rpb25Cb29sZWFuTW9kZWwge1xuICAgIHJldHVybiB0aGlzLnF1ZXN0aW9uQmFzZSBhcyBRdWVzdGlvbkJvb2xlYW5Nb2RlbDtcbiAgfVxuICAvKlxuICBwcml2YXRlIGdldCBhbGxvd0NsaWNrKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnF1ZXN0aW9uLmlzSW5kZXRlcm1pbmF0ZSAmJiAhdGhpcy5pc0Rpc3BsYXlNb2RlO1xuICB9XG4gICovXG4gIHByaXZhdGUgZG9DaGVjayh2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMucXVlc3Rpb24uYm9vbGVhblZhbHVlID0gdmFsdWU7XG4gIH1cbiAgaGFuZGxlT25DaGFuZ2UoZXZlbnQ6IGFueSkge1xuICAgIHRoaXMuZG9DaGVjayhldmVudC50YXJnZXQuY2hlY2tlZCk7XG4gIH1cbiAgaGFuZGxlT25DbGljayhldmVudDogYW55KSB7XG4gICAgdGhpcy5xdWVzdGlvbi5vbkxhYmVsQ2xpY2soZXZlbnQsIHRydWUpO1xuICB9XG4gIGhhbmRsZU9uU3dpdGNoQ2xpY2soZXZlbnQ6IGFueSkge1xuICAgIHRoaXMucXVlc3Rpb24ub25Td2l0Y2hDbGlja01vZGVsKGV2ZW50Lm5hdGl2ZUV2ZW50KTtcbiAgfVxuICBoYW5kbGVPbkxhYmVsQ2xpY2soZXZlbnQ6IGFueSwgdmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnF1ZXN0aW9uLm9uTGFiZWxDbGljayhldmVudCwgdmFsdWUpO1xuICB9XG4gIGhhbmRsZU9uS2V5RG93bihldmVudDogYW55KSB7XG4gICAgdGhpcy5xdWVzdGlvbi5vbktleURvd25Db3JlKGV2ZW50KTtcbiAgfVxuXG4gIHByb3RlY3RlZCB1cGRhdGVEb21FbGVtZW50KCkge1xuICAgIGlmICghdGhpcy5xdWVzdGlvbikgcmV0dXJuO1xuICAgIGNvbnN0IGVsID0gdGhpcy5jaGVja1JlZi5jdXJyZW50O1xuICAgIGlmIChlbCkge1xuICAgICAgZWwuaW5kZXRlcm1pbmF0ZSA9IHRoaXMucXVlc3Rpb24uaXNJbmRldGVybWluYXRlO1xuICAgIH1cbiAgICB0aGlzLnNldENvbnRyb2woZWwpO1xuICAgIHN1cGVyLnVwZGF0ZURvbUVsZW1lbnQoKTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyRWxlbWVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgY29uc3QgY3NzQ2xhc3NlcyA9IHRoaXMucXVlc3Rpb24uY3NzQ2xhc3NlcztcbiAgICBjb25zdCBpdGVtQ2xhc3M6IHN0cmluZyA9IHRoaXMucXVlc3Rpb24uZ2V0SXRlbUNzcygpO1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT17Y3NzQ2xhc3Nlcy5yb290fSBvbktleURvd249e3RoaXMuaGFuZGxlT25LZXlEb3dufT5cbiAgICAgICAgPGxhYmVsIGNsYXNzTmFtZT17aXRlbUNsYXNzfSBvbkNsaWNrPXt0aGlzLmhhbmRsZU9uQ2xpY2t9PlxuICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgcmVmPXt0aGlzLmNoZWNrUmVmfVxuICAgICAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgICAgICAgIG5hbWU9e3RoaXMucXVlc3Rpb24ubmFtZX1cbiAgICAgICAgICAgIHZhbHVlPXtcbiAgICAgICAgICAgICAgdGhpcy5xdWVzdGlvbi5ib29sZWFuVmFsdWUgPT09IG51bGxcbiAgICAgICAgICAgICAgICA/IFwiXCJcbiAgICAgICAgICAgICAgICA6IHRoaXMucXVlc3Rpb24uYm9vbGVhblZhbHVlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZD17dGhpcy5xdWVzdGlvbi5pbnB1dElkfVxuICAgICAgICAgICAgY2xhc3NOYW1lPXtjc3NDbGFzc2VzLmNvbnRyb2x9XG4gICAgICAgICAgICBkaXNhYmxlZD17dGhpcy5pc0Rpc3BsYXlNb2RlfVxuICAgICAgICAgICAgY2hlY2tlZD17dGhpcy5xdWVzdGlvbi5ib29sZWFuVmFsdWUgfHwgZmFsc2V9XG4gICAgICAgICAgICBvbkNoYW5nZT17dGhpcy5oYW5kbGVPbkNoYW5nZX1cbiAgICAgICAgICAgIGFyaWEtcmVxdWlyZWQ9e3RoaXMucXVlc3Rpb24uYXJpYVJlcXVpcmVkfVxuICAgICAgICAgICAgYXJpYS1sYWJlbD17dGhpcy5xdWVzdGlvbi5hcmlhTGFiZWx9XG4gICAgICAgICAgICBhcmlhLWludmFsaWQ9e3RoaXMucXVlc3Rpb24uYXJpYUludmFsaWR9XG4gICAgICAgICAgICBhcmlhLWRlc2NyaWJlZGJ5PXt0aGlzLnF1ZXN0aW9uLmFyaWFEZXNjcmliZWRCeX1cbiAgICAgICAgICAvPlxuICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICBjbGFzc05hbWU9e3RoaXMucXVlc3Rpb24uZ2V0TGFiZWxDc3MoZmFsc2UpfVxuICAgICAgICAgICAgb25DbGljaz17KGV2ZW50KSA9PiB0aGlzLmhhbmRsZU9uTGFiZWxDbGljayhldmVudCwgZmFsc2UpfVxuICAgICAgICAgID5cbiAgICAgICAgICAgIHt0aGlzLnJlbmRlckxvY1N0cmluZyh0aGlzLnF1ZXN0aW9uLmxvY0xhYmVsRmFsc2UpfVxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17Y3NzQ2xhc3Nlcy5zd2l0Y2h9IG9uQ2xpY2s9e3RoaXMuaGFuZGxlT25Td2l0Y2hDbGlja30+XG4gICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9e2Nzc0NsYXNzZXMuc2xpZGVyfT5cbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMucXVlc3Rpb24uaXNEZXRlcm1pbmF0ZWQgJiYgY3NzQ2xhc3Nlcy5zbGlkZXJUZXh0ID9cbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT17Y3NzQ2xhc3Nlcy5zbGlkZXJUZXh0fT57IHRoaXMucmVuZGVyTG9jU3RyaW5nKHRoaXMucXVlc3Rpb24uZ2V0Q2hlY2tlZExhYmVsKCkpIH08L3NwYW4+XG4gICAgICAgICAgICAgICAgICA6IG51bGxcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICBjbGFzc05hbWU9e3RoaXMucXVlc3Rpb24uZ2V0TGFiZWxDc3ModHJ1ZSl9XG4gICAgICAgICAgICBvbkNsaWNrPXsoZXZlbnQpID0+IHRoaXMuaGFuZGxlT25MYWJlbENsaWNrKGV2ZW50LCB0cnVlKX1cbiAgICAgICAgICA+XG4gICAgICAgICAgICB7dGhpcy5yZW5kZXJMb2NTdHJpbmcodGhpcy5xdWVzdGlvbi5sb2NMYWJlbFRydWUpfVxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC9sYWJlbD5cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbn1cblxuUmVhY3RRdWVzdGlvbkZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJRdWVzdGlvbihcImJvb2xlYW5cIiwgKHByb3BzKSA9PiB7XG4gIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFN1cnZleVF1ZXN0aW9uQm9vbGVhbiwgcHJvcHMpO1xufSk7XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XHJcbmltcG9ydCB7IEFjdGlvbkRyb3Bkb3duVmlld01vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XHJcbmltcG9ydCB7IFJlYWN0RWxlbWVudEZhY3RvcnkgfSBmcm9tIFwiLi4vLi4vZWxlbWVudC1mYWN0b3J5XCI7XHJcbmltcG9ydCB7IFBvcHVwIH0gZnJvbSBcIi4uL3BvcHVwL3BvcHVwXCI7XHJcbmltcG9ydCB7IFN1cnZleUFjdGlvbkJhckl0ZW0gfSBmcm9tIFwiLi9hY3Rpb24tYmFyLWl0ZW1cIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBTdXJ2ZXlBY3Rpb25CYXJJdGVtRHJvcGRvd24gZXh0ZW5kcyBTdXJ2ZXlBY3Rpb25CYXJJdGVtIHtcclxuICBwcml2YXRlIHZpZXdNb2RlbDogQWN0aW9uRHJvcGRvd25WaWV3TW9kZWw7XHJcbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xyXG4gICAgc3VwZXIocHJvcHMpO1xyXG4gICAgdGhpcy52aWV3TW9kZWwgPSBuZXcgQWN0aW9uRHJvcGRvd25WaWV3TW9kZWwodGhpcy5pdGVtKTtcclxuICB9XHJcbiAgcmVuZGVyQnV0dG9uQ29udGVudCgpIHtcclxuICAgIGNvbnN0IGJ1dHRvbkNvbnRlbnQgPSBzdXBlci5yZW5kZXJCdXR0b25Db250ZW50KCk7XHJcbiAgICByZXR1cm4gKFxyXG4gICAgICA8PlxyXG4gICAgICAgIHtidXR0b25Db250ZW50fVxyXG4gICAgICAgIDxQb3B1cCBtb2RlbD17dGhpcy5pdGVtLnBvcHVwTW9kZWx9PjwvUG9wdXA+XHJcbiAgICAgIDwvPlxyXG4gICAgKTtcclxuICB9XHJcbiAgY29tcG9uZW50V2lsbFVubW91bnQoKTogdm9pZCB7XHJcbiAgICBzdXBlci5jb21wb25lbnRXaWxsVW5tb3VudCgpO1xyXG4gICAgdGhpcy52aWV3TW9kZWwuZGlzcG9zZSgpO1xyXG4gIH1cclxufVxyXG5cclxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXCJzdi1hY3Rpb24tYmFyLWl0ZW0tZHJvcGRvd25cIiwgKHByb3BzKSA9PiB7XHJcbiAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3VydmV5QWN0aW9uQmFySXRlbURyb3Bkb3duLCBwcm9wcyk7XHJcbn0pO1xyXG4iLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XHJcbmltcG9ydCB7IEJhc2UsIEFjdGlvbiB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xyXG5pbXBvcnQgeyBSZWFjdEVsZW1lbnRGYWN0b3J5IH0gZnJvbSBcIi4uLy4uL2VsZW1lbnQtZmFjdG9yeVwiO1xyXG5pbXBvcnQgeyBTdXJ2ZXlFbGVtZW50QmFzZSB9IGZyb20gXCIuLi8uLi9yZWFjdHF1ZXN0aW9uX2VsZW1lbnRcIjtcclxuaW1wb3J0IHsgYXR0YWNoS2V5MmNsaWNrIH0gZnJvbSBcIi4uLy4uL3JlYWN0U3VydmV5XCI7XHJcbmltcG9ydCB7IFN2Z0ljb24gfSBmcm9tIFwiLi4vc3ZnLWljb24vc3ZnLWljb25cIjtcclxuaW1wb3J0IHsgU3VydmV5QWN0aW9uQmFyU2VwYXJhdG9yIH0gZnJvbSBcIi4vYWN0aW9uLWJhci1zZXBhcmF0b3JcIjtcclxuXHJcbmludGVyZmFjZSBJQWN0aW9uQmFySXRlbVByb3BzIHtcclxuICBpdGVtOiBBY3Rpb247XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBTdXJ2ZXlBY3Rpb24gZXh0ZW5kcyBTdXJ2ZXlFbGVtZW50QmFzZTxJQWN0aW9uQmFySXRlbVByb3BzLCBhbnk+IHtcclxuICBnZXQgaXRlbSgpIHtcclxuICAgIHJldHVybiB0aGlzLnByb3BzLml0ZW07XHJcbiAgfVxyXG4gIHByb3RlY3RlZCBnZXRTdGF0ZUVsZW1lbnQoKTogQmFzZSB7XHJcbiAgICByZXR1cm4gdGhpcy5pdGVtO1xyXG4gIH1cclxuXHJcbiAgcmVuZGVyRWxlbWVudCgpIHtcclxuICAgIC8vcmVmYWN0b3JcclxuICAgIGNvbnN0IGl0ZW1DbGFzcyA9IHRoaXMuaXRlbS5nZXRBY3Rpb25Sb290Q3NzKCk7XHJcbiAgICBjb25zdCBzZXBhcmF0b3IgPSB0aGlzLml0ZW0ubmVlZFNlcGFyYXRvciA/IChcclxuICAgICAgPFN1cnZleUFjdGlvbkJhclNlcGFyYXRvcj48L1N1cnZleUFjdGlvbkJhclNlcGFyYXRvcj5cclxuICAgICkgOiBudWxsO1xyXG5cclxuICAgIGNvbnN0IGl0ZW1Db21wb25lbnQgPSBSZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgIHRoaXMuaXRlbS5jb21wb25lbnQgfHwgXCJzdi1hY3Rpb24tYmFyLWl0ZW1cIixcclxuICAgICAge1xyXG4gICAgICAgIGl0ZW06IHRoaXMuaXRlbSxcclxuICAgICAgfVxyXG4gICAgKTtcclxuICAgIHJldHVybiAoXHJcbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtpdGVtQ2xhc3N9IGlkPXt0aGlzLml0ZW0uaWR9PlxyXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3YtYWN0aW9uX19jb250ZW50XCI+XHJcbiAgICAgICAgICB7c2VwYXJhdG9yfVxyXG4gICAgICAgICAge2l0ZW1Db21wb25lbnR9XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgKTtcclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBTdXJ2ZXlBY3Rpb25CYXJJdGVtIGV4dGVuZHMgU3VydmV5RWxlbWVudEJhc2U8XHJcbiAgSUFjdGlvbkJhckl0ZW1Qcm9wcyxcclxuICBhbnlcclxuPiB7XHJcbiAgZ2V0IGl0ZW0oKTogQWN0aW9uIHtcclxuICAgIHJldHVybiB0aGlzLnByb3BzLml0ZW07XHJcbiAgfVxyXG4gIHByb3RlY3RlZCBnZXRTdGF0ZUVsZW1lbnQoKTogQmFzZSB7XHJcbiAgICByZXR1cm4gdGhpcy5pdGVtO1xyXG4gIH1cclxuXHJcbiAgcmVuZGVyRWxlbWVudCgpIHtcclxuICAgIHJldHVybiA8Pnt0aGlzLnJlbmRlcklubmVyQnV0dG9uKCl9PC8+O1xyXG4gIH1cclxuXHJcbiAgcmVuZGVyVGV4dCgpIHtcclxuICAgIGlmICghdGhpcy5pdGVtLmhhc1RpdGxlKSByZXR1cm4gbnVsbDtcclxuICAgIGNvbnN0IHRpdGxlQ2xhc3MgPSB0aGlzLml0ZW0uZ2V0QWN0aW9uQmFySXRlbVRpdGxlQ3NzKCk7XHJcbiAgICByZXR1cm4gPHNwYW4gY2xhc3NOYW1lPXt0aXRsZUNsYXNzfT57dGhpcy5pdGVtLnRpdGxlfTwvc3Bhbj47XHJcbiAgfVxyXG5cclxuICByZW5kZXJCdXR0b25Db250ZW50KCkge1xyXG4gICAgY29uc3QgdGV4dCA9IHRoaXMucmVuZGVyVGV4dCgpO1xyXG4gICAgY29uc3Qgc3ZnSWNvbiA9ICEhdGhpcy5pdGVtLmljb25OYW1lID8gKFxyXG4gICAgICA8U3ZnSWNvblxyXG4gICAgICAgIGNsYXNzTmFtZT17dGhpcy5pdGVtLmNzc0NsYXNzZXMuaXRlbUljb259XHJcbiAgICAgICAgc2l6ZT17dGhpcy5pdGVtLmljb25TaXplfVxyXG4gICAgICAgIGljb25OYW1lPXt0aGlzLml0ZW0uaWNvbk5hbWV9XHJcbiAgICAgICAgdGl0bGU9e3RoaXMuaXRlbS50b29sdGlwIHx8IHRoaXMuaXRlbS50aXRsZX1cclxuICAgICAgICBhcmlhLWNoZWNrZWQ9e3RoaXMuaXRlbS5hcmlhQ2hlY2tlZH1cclxuICAgICAgPjwvU3ZnSWNvbj5cclxuICAgICkgOiBudWxsO1xyXG4gICAgcmV0dXJuIChcclxuICAgICAgPD5cclxuICAgICAgICB7c3ZnSWNvbn1cclxuICAgICAgICB7dGV4dH1cclxuICAgICAgPC8+XHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgcmVuZGVySW5uZXJCdXR0b24oKSB7XHJcbiAgICBjb25zdCBjbGFzc05hbWUgPSB0aGlzLml0ZW0uZ2V0QWN0aW9uQmFySXRlbUNzcygpO1xyXG4gICAgY29uc3QgdGl0bGUgPSB0aGlzLml0ZW0udG9vbHRpcCB8fCB0aGlzLml0ZW0udGl0bGU7XHJcbiAgICBjb25zdCBidXR0b25Db250ZW50ID0gdGhpcy5yZW5kZXJCdXR0b25Db250ZW50KCk7XHJcbiAgICBjb25zdCB0YWJJbmRleCA9IHRoaXMuaXRlbS5kaXNhYmxlVGFiU3RvcCA/IC0xIDogdW5kZWZpbmVkO1xyXG4gICAgY29uc3QgYnV0dG9uID0gYXR0YWNoS2V5MmNsaWNrKFxyXG4gICAgICA8YnV0dG9uXHJcbiAgICAgICAgY2xhc3NOYW1lPXtjbGFzc05hbWV9XHJcbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgZGlzYWJsZWQ9e3RoaXMuaXRlbS5kaXNhYmxlZH1cclxuICAgICAgICBvbkNsaWNrPXsoKSA9PiB0aGlzLml0ZW0uYWN0aW9uKHRoaXMuaXRlbSl9XHJcbiAgICAgICAgdGl0bGU9e3RpdGxlfVxyXG4gICAgICAgIHRhYkluZGV4PXt0YWJJbmRleH1cclxuICAgICAgPlxyXG4gICAgICAgIHtidXR0b25Db250ZW50fVxyXG4gICAgICA8L2J1dHRvbj4sIG51bGwsIHsgcHJvY2Vzc0VzYzogZmFsc2UgfSk7XHJcblxyXG4gICAgcmV0dXJuIGJ1dHRvbjtcclxuICB9XHJcbn1cclxuXHJcblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFwic3YtYWN0aW9uLWJhci1pdGVtXCIsIChwcm9wcykgPT4ge1xyXG4gIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFN1cnZleUFjdGlvbkJhckl0ZW0sIHByb3BzKTtcclxufSk7XHJcbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFJlYWN0RWxlbWVudEZhY3RvcnkgfSBmcm9tIFwiLi4vLi4vZWxlbWVudC1mYWN0b3J5XCI7XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlBY3Rpb25CYXJTZXBhcmF0b3IgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQ8YW55LCBhbnk+IHtcbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgfVxuICByZW5kZXIoKSB7XG4gICAgdmFyIGNsYXNzTmFtZSA9IGBzdi1hY3Rpb24tYmFyLXNlcGFyYXRvciAke3RoaXMucHJvcHMuY3NzQ2xhc3Nlc31gO1xuICAgIHJldHVybiA8ZGl2IGNsYXNzTmFtZT17Y2xhc3NOYW1lfT48L2Rpdj47XG4gIH1cbn1cblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFxuICBcInN2LWFjdGlvbi1iYXItc2VwYXJhdG9yXCIsXG4gIChwcm9wcykgPT4ge1xuICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFN1cnZleUFjdGlvbkJhclNlcGFyYXRvciwgcHJvcHMpO1xuICB9XG4pO1xuIiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHtcbiAgQmFzZSxcbiAgQWN0aW9uLFxuICBBY3Rpb25Db250YWluZXJcbn0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBSZWFjdEVsZW1lbnRGYWN0b3J5IH0gZnJvbSBcIi4uLy4uL2VsZW1lbnQtZmFjdG9yeVwiO1xuaW1wb3J0IHsgU3VydmV5RWxlbWVudEJhc2UgfSBmcm9tIFwiLi4vLi4vcmVhY3RxdWVzdGlvbl9lbGVtZW50XCI7XG5pbXBvcnQgeyBTdXJ2ZXlBY3Rpb24gfSBmcm9tIFwiLi9hY3Rpb24tYmFyLWl0ZW1cIjtcblxuZXhwb3J0ICogZnJvbSBcIi4vYWN0aW9uLWJhci1pdGVtLWRyb3Bkb3duXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9hY3Rpb24tYmFyLXNlcGFyYXRvclwiO1xuXG5pbnRlcmZhY2UgSUFjdGlvbkJhclByb3BzIHtcbiAgbW9kZWw6IEFjdGlvbkNvbnRhaW5lcjxBY3Rpb24+O1xuICBoYW5kbGVDbGljaz86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlBY3Rpb25CYXIgZXh0ZW5kcyBTdXJ2ZXlFbGVtZW50QmFzZTxJQWN0aW9uQmFyUHJvcHMsIGFueT4ge1xuICBwcml2YXRlIHJvb3RSZWY6IFJlYWN0LlJlZk9iamVjdDxIVE1MRGl2RWxlbWVudD47XG5cbiAgY29uc3RydWN0b3IocHJvcHM6IElBY3Rpb25CYXJQcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLnJvb3RSZWYgPSBSZWFjdC5jcmVhdGVSZWYoKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0IGhhbmRsZUNsaWNrKCkge1xuICAgIHJldHVybiB0aGlzLnByb3BzLmhhbmRsZUNsaWNrICE9PSB1bmRlZmluZWQgPyB0aGlzLnByb3BzLmhhbmRsZUNsaWNrIDogdHJ1ZTtcbiAgfVxuXG4gIGdldCBtb2RlbCgpIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5tb2RlbDtcbiAgfVxuXG4gIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIHN1cGVyLmNvbXBvbmVudERpZE1vdW50KCk7XG4gICAgaWYgKCF0aGlzLm1vZGVsLmhhc0FjdGlvbnMpIHJldHVybjtcbiAgICBjb25zdCBjb250YWluZXI6IEhUTUxEaXZFbGVtZW50IHwgbnVsbCA9IHRoaXMucm9vdFJlZi5jdXJyZW50O1xuICAgIGlmKCEhY29udGFpbmVyKSB7XG4gICAgICB0aGlzLm1vZGVsLmluaXRSZXNwb25zaXZpdHlNYW5hZ2VyKGNvbnRhaW5lcik7XG4gICAgfVxuICB9XG4gIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgIHN1cGVyLmNvbXBvbmVudFdpbGxVbm1vdW50KCk7XG4gICAgaWYgKCEhdGhpcy5tb2RlbC5oYXNBY3Rpb25zKSB7XG4gICAgICB0aGlzLm1vZGVsLnJlc2V0UmVzcG9uc2l2aXR5TWFuYWdlcigpO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRTdGF0ZUVsZW1lbnQoKTogQmFzZSB7XG4gICAgcmV0dXJuIHRoaXMubW9kZWw7XG4gIH1cblxuICByZW5kZXJFbGVtZW50KCk6IGFueSB7XG4gICAgaWYgKCF0aGlzLm1vZGVsLmhhc0FjdGlvbnMpIHJldHVybiBudWxsO1xuICAgIGNvbnN0IGl0ZW1zID0gdGhpcy5yZW5kZXJJdGVtcygpO1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2XG4gICAgICAgIHJlZj17dGhpcy5yb290UmVmfVxuICAgICAgICBjbGFzc05hbWU9e3RoaXMubW9kZWwuZ2V0Um9vdENzcygpfVxuICAgICAgICBvbkNsaWNrPXt0aGlzLmhhbmRsZUNsaWNrID8gZnVuY3Rpb24oZXZlbnQpIHtcbiAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgfSA6IHVuZGVmaW5lZH1cbiAgICAgID5cbiAgICAgICAge2l0ZW1zfVxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxuXG4gIHJlbmRlckl0ZW1zKCkge1xuICAgIHJldHVybiB0aGlzLm1vZGVsLnJlbmRlcmVkQWN0aW9ucy5tYXAoXG4gICAgICAoaXRlbTogQWN0aW9uLCBpdGVtSW5kZXg6IG51bWJlcikgPT4ge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIDxTdXJ2ZXlBY3Rpb24gaXRlbT17aXRlbX0ga2V5PXtcIml0ZW1cIiArIGl0ZW1JbmRleH0+PC9TdXJ2ZXlBY3Rpb24+XG4gICAgICAgICk7XG4gICAgICB9XG4gICAgKTtcbiAgfVxufVxuXG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcInN2LWFjdGlvbi1iYXJcIiwgKHByb3BzKSA9PiB7XG4gIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFxuICAgIFN1cnZleUFjdGlvbkJhcixcbiAgICAocHJvcHMgYXMgYW55KSBhcyBJQWN0aW9uQmFyUHJvcHNcbiAgKTtcbn0pO1xuIiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuXG5leHBvcnQgY2xhc3MgQnJhbmRJbmZvIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50PGFueSwgYW55PiB7XG4gIHJlbmRlcigpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdi1icmFuZC1pbmZvXCI+XG4gICAgICAgIDxhIGNsYXNzTmFtZT1cInN2LWJyYW5kLWluZm9fX2xvZ29cIiBocmVmPVwiaHR0cHM6Ly9zdXJ2ZXlqcy5pby8/dXRtX3NvdXJjZT1idWlsdC1pbl9saW5rcyZ1dG1fbWVkaXVtPW9ubGluZV9zdXJ2ZXlfdG9vbCZ1dG1fY2FtcGFpZ249bGFuZGluZ19wYWdlXCI+PGltZyBzcmM9XCJodHRwczovL3N1cnZleWpzLmlvL0NvbnRlbnQvSW1hZ2VzL3Bvd2VyZWRieS5zdmdcIi8+PC9hPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2LWJyYW5kLWluZm9fX3RleHRcIj5UcnkgYW5kIHNlZSBob3cgZWFzeSBpdCBpcyB0byA8YSBocmVmPVwiaHR0cHM6Ly9zdXJ2ZXlqcy5pby9jcmVhdGUtc3VydmV5P3V0bV9zb3VyY2U9YnVpbHQtaW5fbGlua3MmdXRtX21lZGl1bT1vbmxpbmVfc3VydmV5X3Rvb2wmdXRtX2NhbXBhaWduPWNyZWF0ZV9zdXJ2ZXlcIj5jcmVhdGUgYSBzdXJ2ZXk8L2E+PC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3YtYnJhbmQtaW5mb19fdGVybXNcIj48YSBocmVmPVwiaHR0cHM6Ly9zdXJ2ZXlqcy5pby9UZXJtc09mVXNlXCI+VGVybXMgb2YgVXNlICYgUHJpdmFjeSBTdGF0ZW1lbnQ8L2E+PC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG59XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XHJcbmltcG9ydCB7IExpc3RNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xyXG5pbXBvcnQgeyBSZWFjdEVsZW1lbnRGYWN0b3J5IH0gZnJvbSBcIi4uLy4uL2VsZW1lbnQtZmFjdG9yeVwiO1xyXG5pbXBvcnQgeyBTdXJ2ZXlFbGVtZW50QmFzZSB9IGZyb20gXCIuLi8uLi9yZWFjdHF1ZXN0aW9uX2VsZW1lbnRcIjtcclxuaW1wb3J0IHsgYXR0YWNoS2V5MmNsaWNrIH0gZnJvbSBcIi4uLy4uL3JlYWN0U3VydmV5XCI7XHJcbmltcG9ydCB7IFN2Z0ljb24gfSBmcm9tIFwiLi4vc3ZnLWljb24vc3ZnLWljb25cIjtcclxuXHJcbmludGVyZmFjZSBJTGlzdEl0ZW1Qcm9wcyB7XHJcbiAgbW9kZWw6IExpc3RNb2RlbDtcclxuICBpdGVtOiBhbnk7XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBMaXN0SXRlbSBleHRlbmRzIFN1cnZleUVsZW1lbnRCYXNlPElMaXN0SXRlbVByb3BzLCBhbnk+IHtcclxuICBnZXQgbW9kZWwoKTogTGlzdE1vZGVsIHtcclxuICAgIHJldHVybiB0aGlzLnByb3BzLm1vZGVsO1xyXG4gIH1cclxuICBnZXQgaXRlbSgpOiBhbnkge1xyXG4gICAgcmV0dXJuIHRoaXMucHJvcHMuaXRlbTtcclxuICB9XHJcbiAgaGFuZGxlS2V5ZG93biA9IChldmVudDogYW55KSA9PiB7XHJcbiAgICB0aGlzLm1vZGVsLm9uS2V5RG93bihldmVudCk7XHJcbiAgfTtcclxuICBnZXRTdGF0ZUVsZW1lbnQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5pdGVtO1xyXG4gIH1cclxuICByZW5kZXIoKTogSlNYLkVsZW1lbnQgfCBudWxsIHtcclxuICAgIGlmICghdGhpcy5pdGVtKSByZXR1cm4gbnVsbDtcclxuICAgIGNvbnN0IGNvbnRlbnRXcmFwU3R5bGUgPSB7XHJcbiAgICAgIHBhZGRpbmdJbmxpbmVTdGFydDogdGhpcy5tb2RlbC5nZXRJdGVtSW5kZW50KHRoaXMuaXRlbSlcclxuICAgIH07XHJcbiAgICBjb25zdCBjbGFzc05hbWUgPSB0aGlzLm1vZGVsLmdldEl0ZW1DbGFzcyh0aGlzLml0ZW0pO1xyXG4gICAgY29uc3QgY29udGVudDogQXJyYXk8SlNYLkVsZW1lbnQ+ID0gW107XHJcbiAgICBpZiAoIXRoaXMuaXRlbS5jb21wb25lbnQpIHtcclxuICAgICAgY29uc3QgdGV4dCA9IHRoaXMucmVuZGVyTG9jU3RyaW5nKHRoaXMuaXRlbS5sb2NUaXRsZSwgdW5kZWZpbmVkLCBcImxvY1N0cmluZ1wiKTtcclxuICAgICAgaWYodGhpcy5pdGVtLmljb25OYW1lKSB7XHJcbiAgICAgICAgY29uc3QgaWNvbiA9IDxTdmdJY29uXHJcbiAgICAgICAgICBrZXk9ezF9XHJcbiAgICAgICAgICBjbGFzc05hbWU9e3RoaXMubW9kZWwuY3NzQ2xhc3Nlcy5pdGVtSWNvbn1cclxuICAgICAgICAgIGljb25OYW1lPXt0aGlzLml0ZW0uaWNvbk5hbWV9XHJcbiAgICAgICAgICBzaXplPXsyNH1cclxuICAgICAgICAgIGFyaWEtbGFiZWw9e3RoaXMuaXRlbS50aXRsZX1cclxuICAgICAgICA+PC9TdmdJY29uPjtcclxuICAgICAgICBjb250ZW50LnB1c2goaWNvbik7XHJcbiAgICAgICAgY29udGVudC5wdXNoKDxzcGFuIGtleT17Mn0+e3RleHR9PC9zcGFuPik7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgY29udGVudC5wdXNoKHRleHQpO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zdCBuZXdFbGVtZW50ID0gUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5jcmVhdGVFbGVtZW50KHRoaXMuaXRlbS5jb21wb25lbnQsIHsgaXRlbTogdGhpcy5pdGVtLCBrZXk6IHRoaXMuaXRlbS5pZCB9KTtcclxuICAgICAgaWYoISFuZXdFbGVtZW50KSB7XHJcbiAgICAgICAgY29udGVudC5wdXNoKG5ld0VsZW1lbnQpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgY29udGVudFdyYXAgPVxyXG4gICAgICAgIDxkaXZcclxuICAgICAgICAgIHN0eWxlPXtjb250ZW50V3JhcFN0eWxlfVxyXG4gICAgICAgICAgY2xhc3NOYW1lPXt0aGlzLm1vZGVsLmNzc0NsYXNzZXMuaXRlbUJvZHl9XHJcbiAgICAgICAgPlxyXG4gICAgICAgICAge2NvbnRlbnR9XHJcbiAgICAgICAgPC9kaXY+O1xyXG4gICAgY29uc3Qgc2VwYXJhdG9yID0gdGhpcy5pdGVtLm5lZWRTZXBhcmF0b3IgPyA8ZGl2IGNsYXNzTmFtZSA9IHt0aGlzLm1vZGVsLmNzc0NsYXNzZXMuaXRlbVNlcGFyYXRvcn0vPjpudWxsO1xyXG4gICAgY29uc3QgaXNWaXNpYmxlID0gdGhpcy5tb2RlbC5pc0l0ZW1WaXNpYmxlKHRoaXMuaXRlbSk7XHJcbiAgICBjb25zdCBzdHlsZSA9IHtcclxuICAgICAgZGlzcGxheTogaXNWaXNpYmxlID8gbnVsbCA6IFwibm9uZVwiXHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIGF0dGFjaEtleTJjbGljayhcclxuICAgICAgPGxpXHJcbiAgICAgICAgY2xhc3NOYW1lPXtjbGFzc05hbWV9XHJcbiAgICAgICAgcm9sZT1cIm9wdGlvblwiXHJcbiAgICAgICAgc3R5bGU9e3N0eWxlIGFzIGFueX1cclxuICAgICAgICBhcmlhLXNlbGVjdGVkPXt0aGlzLm1vZGVsLmlzSXRlbVNlbGVjdGVkKHRoaXMuaXRlbSl9XHJcbiAgICAgICAgb25DbGljaz17KGV2ZW50OiBhbnkpID0+IHtcclxuICAgICAgICAgIHRoaXMubW9kZWwub25JdGVtQ2xpY2sodGhpcy5pdGVtKTtcclxuICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgIH19XHJcbiAgICAgICAgb25Qb2ludGVyRG93bj17KGV2ZW50OiBhbnkpID0+IHRoaXMubW9kZWwub25Qb2ludGVyRG93bihldmVudCwgdGhpcy5pdGVtKX0+XHJcbiAgICAgICAge3NlcGFyYXRvcn1cclxuICAgICAgICB7Y29udGVudFdyYXB9XHJcbiAgICAgIDwvbGk+XHJcbiAgICApO1xyXG4gIH1cclxuICBjb21wb25lbnREaWRNb3VudCgpIHtcclxuICAgIHN1cGVyLmNvbXBvbmVudERpZE1vdW50KCk7XHJcblxyXG4gICAgdGhpcy5tb2RlbC5vbkxhc3RJdGVtUmVuZGVkKHRoaXMuaXRlbSk7XHJcbiAgfVxyXG59XHJcblxyXG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcInN2LWxpc3QtaXRlbVwiLCAocHJvcHMpID0+IHtcclxuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChMaXN0SXRlbSwgcHJvcHMpO1xyXG59KTtcclxuIiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xyXG5pbXBvcnQgeyBJQWN0aW9uLCBMaXN0TW9kZWwgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcclxuaW1wb3J0IHsgUmVhY3RFbGVtZW50RmFjdG9yeSB9IGZyb20gXCIuLi8uLi9lbGVtZW50LWZhY3RvcnlcIjtcclxuaW1wb3J0IHsgU3VydmV5RWxlbWVudEJhc2UgfSBmcm9tIFwiLi4vLi4vcmVhY3RxdWVzdGlvbl9lbGVtZW50XCI7XHJcbmltcG9ydCB7IFN2Z0ljb24gfSBmcm9tIFwiLi4vc3ZnLWljb24vc3ZnLWljb25cIjtcclxuaW1wb3J0IHsgTGlzdEl0ZW0gfSBmcm9tIFwiLi9saXN0LWl0ZW1cIjtcclxuXHJcbmludGVyZmFjZSBJTGlzdFByb3BzIHtcclxuICBtb2RlbDogTGlzdE1vZGVsO1xyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgTGlzdCBleHRlbmRzIFN1cnZleUVsZW1lbnRCYXNlPElMaXN0UHJvcHMsIGFueT4ge1xyXG4gIHByaXZhdGUgbGlzdENvbnRhaW5lclJlZjogUmVhY3QuUmVmT2JqZWN0PEhUTUxEaXZFbGVtZW50PjtcclxuXHJcbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xyXG4gICAgc3VwZXIocHJvcHMpO1xyXG4gICAgdGhpcy5zdGF0ZSA9IHtcclxuICAgICAgZmlsdGVyU3RyaW5nOiB0aGlzLm1vZGVsLmZpbHRlclN0cmluZyB8fCBcIlwiXHJcbiAgICB9O1xyXG4gICAgdGhpcy5saXN0Q29udGFpbmVyUmVmID0gUmVhY3QuY3JlYXRlUmVmKCk7XHJcbiAgfVxyXG4gIGdldCBtb2RlbCgpOiBMaXN0TW9kZWwge1xyXG4gICAgcmV0dXJuIHRoaXMucHJvcHMubW9kZWw7XHJcbiAgfVxyXG4gIGhhbmRsZUtleWRvd24gPSAoZXZlbnQ6IGFueSkgPT4ge1xyXG4gICAgdGhpcy5tb2RlbC5vbktleURvd24oZXZlbnQpO1xyXG4gIH07XHJcbiAgaGFuZGxlTW91c2VNb3ZlID0gKGV2ZW50OiBhbnkpID0+IHtcclxuICAgIHRoaXMubW9kZWwub25Nb3VzZU1vdmUoZXZlbnQpO1xyXG4gIH07XHJcbiAgZ2V0U3RhdGVFbGVtZW50KCkge1xyXG4gICAgcmV0dXJuIHRoaXMubW9kZWw7XHJcbiAgfVxyXG4gIGNvbXBvbmVudERpZE1vdW50KCk6IHZvaWQge1xyXG4gICAgc3VwZXIuY29tcG9uZW50RGlkTW91bnQoKTtcclxuICAgIGlmKCEhdGhpcy5saXN0Q29udGFpbmVyUmVmICYmICEhdGhpcy5saXN0Q29udGFpbmVyUmVmLmN1cnJlbnQpIHtcclxuICAgICAgdGhpcy5tb2RlbC5pbml0TGlzdENvbnRhaW5lckh0bWxFbGVtZW50KHRoaXMubGlzdENvbnRhaW5lclJlZi5jdXJyZW50KTtcclxuICAgIH1cclxuICB9XHJcbiAgcmVuZGVyRWxlbWVudCgpIHtcclxuICAgIGNvbnN0IGl0ZW1zID0gdGhpcy5yZW5kZXJJdGVtcygpO1xyXG4gICAgcmV0dXJuIChcclxuICAgICAgPGRpdiBjbGFzc05hbWU9e3RoaXMubW9kZWwuY3NzQ2xhc3Nlcy5yb290fSByZWY9e3RoaXMubGlzdENvbnRhaW5lclJlZn0+XHJcbiAgICAgICAge3RoaXMuc2VhcmNoRWxlbWVudENvbnRlbnQoKX1cclxuICAgICAgICB7dGhpcy5lbXB0eUNvbnRlbnQoKX1cclxuICAgICAgICA8dWxcclxuICAgICAgICAgIGNsYXNzTmFtZT17dGhpcy5tb2RlbC5jc3NDbGFzc2VzLml0ZW1zQ29udGFpbmVyfVxyXG4gICAgICAgICAgcm9sZT1cImxpc3Rib3hcIlxyXG4gICAgICAgICAgb25Nb3VzZURvd249eyhlKSA9PiB7XHJcbiAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgIH19XHJcbiAgICAgICAgICBvbktleURvd249e3RoaXMuaGFuZGxlS2V5ZG93bn1cclxuICAgICAgICAgIG9uTW91c2VNb3ZlPXt0aGlzLmhhbmRsZU1vdXNlTW92ZX1cclxuICAgICAgICA+XHJcbiAgICAgICAgICB7aXRlbXN9XHJcbiAgICAgICAgPC91bD5cclxuICAgICAgPC9kaXY+XHJcbiAgICApO1xyXG4gIH1cclxuICByZW5kZXJJdGVtcygpIHtcclxuICAgIGlmICghdGhpcy5tb2RlbCkge1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICAgIGNvbnN0IGl0ZW1zID0gdGhpcy5tb2RlbC5yZW5kZXJlZEFjdGlvbnM7XHJcbiAgICBpZiAoIWl0ZW1zKSB7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGl0ZW1zLm1hcCgoaXRlbTogSUFjdGlvbiwgaXRlbUluZGV4OiBudW1iZXIpID0+IHtcclxuICAgICAgcmV0dXJuIChcclxuICAgICAgICA8TGlzdEl0ZW0gbW9kZWw9e3RoaXMubW9kZWx9IGl0ZW09e2l0ZW19IGtleT17XCJpdGVtXCIgKyBpdGVtSW5kZXh9PjwvTGlzdEl0ZW0+XHJcbiAgICAgICk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHNlYXJjaEVsZW1lbnRDb250ZW50KCkge1xyXG4gICAgaWYgKCF0aGlzLm1vZGVsLnNob3dGaWx0ZXIpIHJldHVybiBudWxsO1xyXG4gICAgZWxzZSB7XHJcbiAgICAgIGNvbnN0IG9uQ2hhbmdlID0gKGU6IGFueSkgPT4ge1xyXG4gICAgICAgIGlmIChlLnRhcmdldCA9PT0gZG9jdW1lbnQuYWN0aXZlRWxlbWVudCkge1xyXG4gICAgICAgICAgdGhpcy5tb2RlbC5maWx0ZXJTdHJpbmcgPSBlLnRhcmdldC52YWx1ZTtcclxuICAgICAgICB9XHJcbiAgICAgIH07XHJcbiAgICAgIGNvbnN0IG9uS2V5VXAgPSAoZTogYW55KSA9PiB7XHJcbiAgICAgICAgdGhpcy5tb2RlbC5nb1RvSXRlbXMoZSk7XHJcbiAgICAgIH07XHJcbiAgICAgIHJldHVybiAoXHJcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3RoaXMubW9kZWwuY3NzQ2xhc3Nlcy5maWx0ZXJ9PlxyXG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3RoaXMubW9kZWwuY3NzQ2xhc3Nlcy5maWx0ZXJJY29ufT5cclxuICAgICAgICAgICAgPFN2Z0ljb25cclxuICAgICAgICAgICAgICBpY29uTmFtZT17XCJpY29uLXNlYXJjaFwifVxyXG4gICAgICAgICAgICAgIHNpemU9e1wiYXV0b1wifVxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgIDwvU3ZnSWNvbj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPGlucHV0XHJcbiAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcclxuICAgICAgICAgICAgY2xhc3NOYW1lPXt0aGlzLm1vZGVsLmNzc0NsYXNzZXMuZmlsdGVySW5wdXR9XHJcbiAgICAgICAgICAgIGFyaWEtbGFiZWw9e3RoaXMubW9kZWwuZmlsdGVyU3RyaW5nUGxhY2Vob2xkZXJ9XHJcbiAgICAgICAgICAgIHBsYWNlaG9sZGVyPXt0aGlzLm1vZGVsLmZpbHRlclN0cmluZ1BsYWNlaG9sZGVyfVxyXG4gICAgICAgICAgICB2YWx1ZT17dGhpcy5zdGF0ZS5maWx0ZXJTdHJpbmd9XHJcbiAgICAgICAgICAgIG9uS2V5VXA9e29uS2V5VXB9XHJcbiAgICAgICAgICAgIG9uQ2hhbmdlPXtvbkNoYW5nZX1cclxuICAgICAgICAgID48L2lucHV0PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gIH1cclxuICBlbXB0eUNvbnRlbnQoKSB7XHJcbiAgICBjb25zdCBzdHlsZSA9IHtcclxuICAgICAgZGlzcGxheTogdGhpcy5tb2RlbC5pc0VtcHR5ID8gbnVsbCA6IFwibm9uZVwiLFxyXG4gICAgfTtcclxuXHJcbiAgICByZXR1cm4gKDxkaXYgY2xhc3NOYW1lPXt0aGlzLm1vZGVsLmNzc0NsYXNzZXMuZW1wdHlDb250YWluZXJ9IHN0eWxlPXtzdHlsZSBhcyBhbnl9PlxyXG4gICAgICA8ZGl2IGNsYXNzTmFtZT17dGhpcy5tb2RlbC5jc3NDbGFzc2VzLmVtcHR5VGV4dH0gYXJpYS1sYWJlbD17dGhpcy5tb2RlbC5lbXB0eU1lc3NhZ2V9Pnt0aGlzLm1vZGVsLmVtcHR5TWVzc2FnZX08L2Rpdj5cclxuICAgIDwvZGl2Pik7XHJcbiAgfVxyXG59XHJcblxyXG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcInN2LWxpc3RcIiwgKHByb3BzKSA9PiB7XHJcbiAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoTGlzdCwgcHJvcHMpO1xyXG59KTtcclxuIiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgQWN0aW9uLCBNYXRyaXhEcm9wZG93blJvd01vZGVsQmFzZSwgUXVlc3Rpb25NYXRyaXhEcm9wZG93bk1vZGVsQmFzZSB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgUmVhY3RFbGVtZW50RmFjdG9yeSB9IGZyb20gXCIuLi8uLi8uLi9lbGVtZW50LWZhY3RvcnlcIjtcbmltcG9ydCB7IFJlYWN0U3VydmV5RWxlbWVudCB9IGZyb20gXCIuLi8uLi8uLi9yZWFjdHF1ZXN0aW9uX2VsZW1lbnRcIjtcbmltcG9ydCB7IFN2Z0ljb24gfSBmcm9tIFwiLi4vLi4vc3ZnLWljb24vc3ZnLWljb25cIjtcblxuZXhwb3J0IGNsYXNzIFN1cnZleVF1ZXN0aW9uTWF0cml4RGV0YWlsQnV0dG9uIGV4dGVuZHMgUmVhY3RTdXJ2ZXlFbGVtZW50IHtcbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLmhhbmRsZU9uU2hvd0hpZGVDbGljayA9IHRoaXMuaGFuZGxlT25TaG93SGlkZUNsaWNrLmJpbmQodGhpcyk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldFN0YXRlRWxlbWVudCgpIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5pdGVtO1xuICB9XG4gIGdldCBpdGVtKCk6IEFjdGlvbiB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuaXRlbTtcbiAgfVxuICBwcml2YXRlIGdldCBxdWVzdGlvbigpOiBRdWVzdGlvbk1hdHJpeERyb3Bkb3duTW9kZWxCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5pdGVtLmRhdGEucXVlc3Rpb247XG4gIH1cbiAgcHJpdmF0ZSBnZXQgcm93KCk6IE1hdHJpeERyb3Bkb3duUm93TW9kZWxCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5pdGVtLmRhdGEucm93O1xuICB9XG4gIGhhbmRsZU9uU2hvd0hpZGVDbGljayhldmVudDogYW55KSB7XG4gICAgdGhpcy5yb3cuc2hvd0hpZGVEZXRhaWxQYW5lbENsaWNrKCk7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIHZhciBpc0V4cGFuZGVkID0gdGhpcy5yb3cuaXNEZXRhaWxQYW5lbFNob3dpbmc7XG4gICAgdmFyIGFyaWFFeHBhbmRlZCA9IGlzRXhwYW5kZWQ7XG4gICAgdmFyIGFyaWFDb250cm9scyA9IGlzRXhwYW5kZWQgPyB0aGlzLnJvdy5kZXRhaWxQYW5lbElkIDogdW5kZWZpbmVkO1xuICAgIHJldHVybiAoXG4gICAgICA8YnV0dG9uXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICBvbkNsaWNrPXt0aGlzLmhhbmRsZU9uU2hvd0hpZGVDbGlja31cbiAgICAgICAgY2xhc3NOYW1lPXt0aGlzLnF1ZXN0aW9uLmdldERldGFpbFBhbmVsQnV0dG9uQ3NzKHRoaXMucm93KX1cbiAgICAgICAgYXJpYS1leHBhbmRlZD17YXJpYUV4cGFuZGVkfVxuICAgICAgICBhcmlhLWNvbnRyb2xzPXthcmlhQ29udHJvbHN9XG4gICAgICA+XG4gICAgICAgIDxTdmdJY29uXG4gICAgICAgICAgY2xhc3NOYW1lPXt0aGlzLnF1ZXN0aW9uLmdldERldGFpbFBhbmVsSWNvbkNzcyh0aGlzLnJvdyl9XG4gICAgICAgICAgaWNvbk5hbWU9e3RoaXMucXVlc3Rpb24uZ2V0RGV0YWlsUGFuZWxJY29uSWQodGhpcy5yb3cpfVxuICAgICAgICAgIHNpemU9e1wiYXV0b1wifVxuICAgICAgICA+XG4gICAgICAgIDwvU3ZnSWNvbj5cbiAgICAgIDwvYnV0dG9uPlxuICAgICk7XG4gIH1cbn1cblxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXG4gIFwic3YtbWF0cml4LWRldGFpbC1idXR0b25cIixcbiAgcHJvcHMgPT4ge1xuICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFN1cnZleVF1ZXN0aW9uTWF0cml4RGV0YWlsQnV0dG9uLCBwcm9wcyk7XG4gIH1cbik7XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBRdWVzdGlvbk1hdHJpeERyb3Bkb3duTW9kZWxCYXNlIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBSZWFjdEVsZW1lbnRGYWN0b3J5IH0gZnJvbSBcIi4uLy4uLy4uL2VsZW1lbnQtZmFjdG9yeVwiO1xuaW1wb3J0IHsgUmVhY3RTdXJ2ZXlFbGVtZW50IH0gZnJvbSBcIi4uLy4uLy4uL3JlYWN0cXVlc3Rpb25fZWxlbWVudFwiO1xuXG5leHBvcnQgY2xhc3MgU3VydmV5UXVlc3Rpb25NYXRyaXhEeW5hbWljRHJhZ0Ryb3BJY29uIGV4dGVuZHMgUmVhY3RTdXJ2ZXlFbGVtZW50IHtcbiAgcHJpdmF0ZSBnZXQgcXVlc3Rpb24oKTogUXVlc3Rpb25NYXRyaXhEcm9wZG93bk1vZGVsQmFzZSB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuaXRlbS5kYXRhLnF1ZXN0aW9uO1xuICB9XG5cbiAgcHJvdGVjdGVkIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIGlmKHRoaXMucXVlc3Rpb24uaWNvbkRyYWdFbGVtZW50KSB7XG4gICAgICByZXR1cm4gKDxzdmcgY2xhc3NOYW1lPXt0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMuZHJhZ0VsZW1lbnREZWNvcmF0b3J9ID5cbiAgICAgICAgPHVzZSB4bGlua0hyZWY9e3RoaXMucXVlc3Rpb24uaWNvbkRyYWdFbGVtZW50fT48L3VzZT5cbiAgICAgIDwvc3ZnPik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiAoPHNwYW4gY2xhc3NOYW1lPXt0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMuaWNvbkRyYWd9IC8+KTtcbiAgICB9XG4gIH1cbn1cblxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXG4gIFwic3YtbWF0cml4LWRyYWctZHJvcC1pY29uXCIsXG4gIChwcm9wcykgPT4ge1xuICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFN1cnZleVF1ZXN0aW9uTWF0cml4RHluYW1pY0RyYWdEcm9wSWNvbiwgcHJvcHMpO1xuICB9XG4pO1xuIiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHtcbiAgTWF0cml4RHJvcGRvd25Sb3dNb2RlbEJhc2UsXG4gIFF1ZXN0aW9uTWF0cml4RHJvcGRvd25Nb2RlbEJhc2UsXG59IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgUmVhY3RFbGVtZW50RmFjdG9yeSB9IGZyb20gXCIuLi8uLi8uLi9lbGVtZW50LWZhY3RvcnlcIjtcbmltcG9ydCB7IFJlYWN0U3VydmV5RWxlbWVudCB9IGZyb20gXCIuLi8uLi8uLi9yZWFjdHF1ZXN0aW9uX2VsZW1lbnRcIjtcblxuZXhwb3J0IGNsYXNzIFN1cnZleVF1ZXN0aW9uTWF0cml4RHluYW1pY1JlbW92ZUJ1dHRvbiBleHRlbmRzIFJlYWN0U3VydmV5RWxlbWVudCB7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgdGhpcy5oYW5kbGVPblJvd1JlbW92ZUNsaWNrID0gdGhpcy5oYW5kbGVPblJvd1JlbW92ZUNsaWNrLmJpbmQodGhpcyk7XG4gIH1cbiAgcHJpdmF0ZSBnZXQgcXVlc3Rpb24oKTogUXVlc3Rpb25NYXRyaXhEcm9wZG93bk1vZGVsQmFzZSB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuaXRlbS5kYXRhLnF1ZXN0aW9uO1xuICB9XG4gIHByaXZhdGUgZ2V0IHJvdygpOiBNYXRyaXhEcm9wZG93blJvd01vZGVsQmFzZSB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuaXRlbS5kYXRhLnJvdztcbiAgfVxuICBoYW5kbGVPblJvd1JlbW92ZUNsaWNrKGV2ZW50OiBhbnkpIHtcbiAgICB0aGlzLnF1ZXN0aW9uLnJlbW92ZVJvd1VJKHRoaXMucm93KTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyRWxlbWVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgdmFyIHJlbW92ZVJvd1RleHQgPSB0aGlzLnJlbmRlckxvY1N0cmluZyh0aGlzLnF1ZXN0aW9uLmxvY1JlbW92ZVJvd1RleHQpO1xuICAgIHJldHVybiAoXG4gICAgICA8YnV0dG9uXG4gICAgICAgIGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5nZXRSZW1vdmVSb3dCdXR0b25Dc3MoKX1cbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIG9uQ2xpY2s9e3RoaXMuaGFuZGxlT25Sb3dSZW1vdmVDbGlja31cbiAgICAgICAgZGlzYWJsZWQ9e3RoaXMucXVlc3Rpb24uaXNJbnB1dFJlYWRPbmx5fVxuICAgICAgPlxuICAgICAgICB7cmVtb3ZlUm93VGV4dH1cbiAgICAgICAgPHNwYW4gY2xhc3NOYW1lPXt0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMuaWNvblJlbW92ZX0gLz5cbiAgICAgIDwvYnV0dG9uPlxuICAgICk7XG4gIH1cbn1cblxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXG4gIFwic3YtbWF0cml4LXJlbW92ZS1idXR0b25cIixcbiAgKHByb3BzKSA9PiB7XG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3VydmV5UXVlc3Rpb25NYXRyaXhEeW5hbWljUmVtb3ZlQnV0dG9uLCBwcm9wcyk7XG4gIH1cbik7XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgUmVhY3RET00gZnJvbSBcInJlYWN0LWRvbVwiO1xuaW1wb3J0IHsgUXVlc3Rpb25NYXRyaXhEcm9wZG93blJlbmRlcmVkUm93LCBRdWVzdGlvbk1hdHJpeERyb3Bkb3duTW9kZWxCYXNlIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBSZWFjdEVsZW1lbnRGYWN0b3J5IH0gZnJvbSBcIi4uLy4uL2VsZW1lbnQtZmFjdG9yeVwiO1xuaW1wb3J0IHsgU3VydmV5RWxlbWVudEJhc2UgfSBmcm9tIFwiLi4vLi4vcmVhY3RxdWVzdGlvbl9lbGVtZW50XCI7XG5cbmludGVyZmFjZSBJTWF0cml4Um93UHJvcHMge1xuICBtb2RlbDogUXVlc3Rpb25NYXRyaXhEcm9wZG93blJlbmRlcmVkUm93O1xuICBwYXJlbnRNYXRyaXg6IFF1ZXN0aW9uTWF0cml4RHJvcGRvd25Nb2RlbEJhc2U7XG59XG5cbmV4cG9ydCBjbGFzcyBNYXRyaXhSb3cgZXh0ZW5kcyBTdXJ2ZXlFbGVtZW50QmFzZTxJTWF0cml4Um93UHJvcHMsIGFueT4ge1xuICBjb25zdHJ1Y3Rvcihwcm9wczogSU1hdHJpeFJvd1Byb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICB9XG4gIGdldCBtb2RlbCgpOiBRdWVzdGlvbk1hdHJpeERyb3Bkb3duUmVuZGVyZWRSb3cge1xuICAgIHJldHVybiB0aGlzLnByb3BzLm1vZGVsO1xuICB9XG4gIGdldCBwYXJlbnRNYXRyaXgoKTogUXVlc3Rpb25NYXRyaXhEcm9wZG93bk1vZGVsQmFzZSB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMucGFyZW50TWF0cml4O1xuICB9XG4gIHByb3RlY3RlZCBnZXRTdGF0ZUVsZW1lbnQoKSB7XG4gICAgcmV0dXJuIHRoaXMubW9kZWw7XG4gIH1cbiAgcHJvdGVjdGVkIG9uUG9pbnRlckRvd25IYW5kbGVyID0gKGV2ZW50OiBhbnkpID0+IHtcbiAgICB0aGlzLnBhcmVudE1hdHJpeC5vblBvaW50ZXJEb3duKGV2ZW50Lm5hdGl2ZUV2ZW50LCB0aGlzLm1vZGVsLnJvdyk7XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgY29uc3QgbW9kZWwgPSB0aGlzLm1vZGVsO1xuICAgIHJldHVybiAoXG4gICAgICA8dHJcbiAgICAgICAgY2xhc3NOYW1lPXttb2RlbC5jbGFzc05hbWV9XG4gICAgICAgIGRhdGEtc3YtZHJvcC10YXJnZXQtbWF0cml4LXJvdz17bW9kZWwucm93ICYmIG1vZGVsLnJvdy5pZH1cbiAgICAgICAgb25Qb2ludGVyRG93bj17KGV2ZW50OiBhbnkpID0+IHRoaXMub25Qb2ludGVyRG93bkhhbmRsZXIoZXZlbnQpfVxuICAgICAgPlxuICAgICAgICB7dGhpcy5wcm9wcy5jaGlsZHJlbn1cbiAgICAgIDwvdHI+XG4gICAgKTtcbiAgfVxufVxuXG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcbiAgXCJzdi1tYXRyaXgtcm93XCIsXG4gIChwcm9wczogSU1hdHJpeFJvd1Byb3BzKSA9PiB7XG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoTWF0cml4Um93LCBwcm9wcyk7XG4gIH1cbik7XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQge1xuICBRdWVzdGlvblBhbmVsRHluYW1pY01vZGVsXG59IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgUmVhY3RFbGVtZW50RmFjdG9yeSB9IGZyb20gXCIuLi8uLi9lbGVtZW50LWZhY3RvcnlcIjtcbmltcG9ydCB7IFJlYWN0U3VydmV5RWxlbWVudCB9IGZyb20gXCIuLi8uLi9yZWFjdHF1ZXN0aW9uX2VsZW1lbnRcIjtcbmltcG9ydCB7IFN1cnZleVF1ZXN0aW9uUGFuZWxEeW5hbWljIH0gZnJvbSBcIi4uLy4uL3JlYWN0cXVlc3Rpb25fcGFuZWxkeW5hbWljXCI7XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlRdWVzdGlvblBhbmVsRHluYW1pY0FjdGlvbiBleHRlbmRzIFJlYWN0U3VydmV5RWxlbWVudCB7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldCBxdWVzdGlvbigpOiBRdWVzdGlvblBhbmVsRHluYW1pY01vZGVsIHtcbiAgICByZXR1cm4gKHRoaXMucHJvcHMuaXRlbSAmJiB0aGlzLnByb3BzLml0ZW0uZGF0YS5xdWVzdGlvbikgfHwgdGhpcy5wcm9wcy5kYXRhLnF1ZXN0aW9uO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlRdWVzdGlvblBhbmVsRHluYW1pY0FkZEJ1dHRvbiBleHRlbmRzIFN1cnZleVF1ZXN0aW9uUGFuZWxEeW5hbWljQWN0aW9uIHtcbiAgcHJvdGVjdGVkIGhhbmRsZUNsaWNrID0gKGV2ZW50OiBhbnkpID0+IHtcbiAgICB0aGlzLnF1ZXN0aW9uLmFkZFBhbmVsVUkoKTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyRWxlbWVudCgpOiBKU1guRWxlbWVudCB8IG51bGwge1xuICAgIGlmICghdGhpcy5xdWVzdGlvbi5jYW5BZGRQYW5lbCkgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIChcbiAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5nZXRBZGRCdXR0b25Dc3MoKX0gb25DbGljaz17dGhpcy5oYW5kbGVDbGlja30gPlxuICAgICAgICA8c3BhbiBjbGFzc05hbWU9e3RoaXMucXVlc3Rpb24uY3NzQ2xhc3Nlcy5idXR0b25BZGRUZXh0fT57dGhpcy5xdWVzdGlvbi5wYW5lbEFkZFRleHR9PC9zcGFuPlxuICAgICAgPC9idXR0b24+XG4gICAgKTtcbiAgfVxufVxuXG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcbiAgXCJzdi1wYW5lbGR5bmFtaWMtYWRkLWJ0blwiLFxuICAocHJvcHMpID0+IHtcbiAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTdXJ2ZXlRdWVzdGlvblBhbmVsRHluYW1pY0FkZEJ1dHRvbiwgcHJvcHMpO1xuICB9XG4pO1xuIiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgUmVhY3RFbGVtZW50RmFjdG9yeSB9IGZyb20gXCIuLi8uLi9lbGVtZW50LWZhY3RvcnlcIjtcbmltcG9ydCB7IFN2Z0ljb24gfSBmcm9tIFwiLi4vc3ZnLWljb24vc3ZnLWljb25cIjtcbmltcG9ydCB7IFN1cnZleVF1ZXN0aW9uUGFuZWxEeW5hbWljQWN0aW9uIH0gZnJvbSBcIi4vcGFuZWxkeW5hbWljLWFkZC1idG5cIjtcblxuZXhwb3J0IGNsYXNzIFN1cnZleVF1ZXN0aW9uUGFuZWxEeW5hbWljTmV4dEJ1dHRvbiBleHRlbmRzIFN1cnZleVF1ZXN0aW9uUGFuZWxEeW5hbWljQWN0aW9uIHtcbiAgcHJvdGVjdGVkIGhhbmRsZUNsaWNrID0gKGV2ZW50OiBhbnkpID0+IHtcbiAgICB0aGlzLnF1ZXN0aW9uLmdvVG9OZXh0UGFuZWwoKTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyRWxlbWVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgdGl0bGU9e3RoaXMucXVlc3Rpb24ucGFuZWxOZXh0VGV4dH0gb25DbGljaz17dGhpcy5oYW5kbGVDbGlja30gY2xhc3NOYW1lPXt0aGlzLnF1ZXN0aW9uLmdldE5leHRCdXR0b25Dc3MoKX0+XG4gICAgICAgIDxTdmdJY29uXG4gICAgICAgICAgaWNvbk5hbWU9e3RoaXMucXVlc3Rpb24uY3NzQ2xhc3Nlcy5wcm9ncmVzc0J0bkljb259XG4gICAgICAgICAgc2l6ZT17XCJhdXRvXCJ9XG4gICAgICAgID5cbiAgICAgICAgPC9TdmdJY29uPlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxufVxuXG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcbiAgXCJzdi1wYW5lbGR5bmFtaWMtbmV4dC1idG5cIixcbiAgKHByb3BzKSA9PiB7XG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3VydmV5UXVlc3Rpb25QYW5lbER5bmFtaWNOZXh0QnV0dG9uLCBwcm9wcyk7XG4gIH1cbik7XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBSZWFjdEVsZW1lbnRGYWN0b3J5IH0gZnJvbSBcIi4uLy4uL2VsZW1lbnQtZmFjdG9yeVwiO1xuaW1wb3J0IHsgU3ZnSWNvbiB9IGZyb20gXCIuLi9zdmctaWNvbi9zdmctaWNvblwiO1xuaW1wb3J0IHsgU3VydmV5UXVlc3Rpb25QYW5lbER5bmFtaWNBY3Rpb24gfSBmcm9tIFwiLi9wYW5lbGR5bmFtaWMtYWRkLWJ0blwiO1xuXG5leHBvcnQgY2xhc3MgU3VydmV5UXVlc3Rpb25QYW5lbER5bmFtaWNQcmV2QnV0dG9uIGV4dGVuZHMgU3VydmV5UXVlc3Rpb25QYW5lbER5bmFtaWNBY3Rpb24ge1xuICBwcm90ZWN0ZWQgaGFuZGxlQ2xpY2sgPSAoZXZlbnQ6IGFueSkgPT4ge1xuICAgIHRoaXMucXVlc3Rpb24uZ29Ub1ByZXZQYW5lbCgpO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiB0aXRsZT17dGhpcy5xdWVzdGlvbi5wYW5lbFByZXZUZXh0fSBvbkNsaWNrPXt0aGlzLmhhbmRsZUNsaWNrfSBjbGFzc05hbWU9e3RoaXMucXVlc3Rpb24uZ2V0UHJldkJ1dHRvbkNzcygpfT5cbiAgICAgICAgPFN2Z0ljb25cbiAgICAgICAgICBpY29uTmFtZT17dGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLnByb2dyZXNzQnRuSWNvbn1cbiAgICAgICAgICBzaXplPXtcImF1dG9cIn1cbiAgICAgICAgPlxuICAgICAgICA8L1N2Z0ljb24+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG59XG5cblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFxuICBcInN2LXBhbmVsZHluYW1pYy1wcmV2LWJ0blwiLFxuICAocHJvcHMpID0+IHtcbiAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTdXJ2ZXlRdWVzdGlvblBhbmVsRHluYW1pY1ByZXZCdXR0b24sIHByb3BzKTtcbiAgfVxuKTtcbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFJlYWN0RWxlbWVudEZhY3RvcnkgfSBmcm9tIFwiLi4vLi4vZWxlbWVudC1mYWN0b3J5XCI7XG5pbXBvcnQgeyBTdXJ2ZXlRdWVzdGlvblBhbmVsRHluYW1pY0FjdGlvbiB9IGZyb20gXCIuL3BhbmVsZHluYW1pYy1hZGQtYnRuXCI7XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlRdWVzdGlvblBhbmVsRHluYW1pY1Byb2dyZXNzVGV4dCBleHRlbmRzIFN1cnZleVF1ZXN0aW9uUGFuZWxEeW5hbWljQWN0aW9uIHtcbiAgcHJvdGVjdGVkIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIHJldHVybiAoPGRpdiBjbGFzc05hbWU9e3RoaXMucXVlc3Rpb24uY3NzQ2xhc3Nlcy5wcm9ncmVzc1RleHR9PlxuICAgICAge3RoaXMucXVlc3Rpb24ucHJvZ3Jlc3NUZXh0fVxuICAgIDwvZGl2Pik7XG4gIH1cbn1cblxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXG4gIFwic3YtcGFuZWxkeW5hbWljLXByb2dyZXNzLXRleHRcIixcbiAgKHByb3BzKSA9PiB7XG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3VydmV5UXVlc3Rpb25QYW5lbER5bmFtaWNQcm9ncmVzc1RleHQsIHByb3BzKTtcbiAgfVxuKTsiLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBSZWFjdEVsZW1lbnRGYWN0b3J5IH0gZnJvbSBcIi4uLy4uL2VsZW1lbnQtZmFjdG9yeVwiO1xuaW1wb3J0IHsgUmVhY3RTdXJ2ZXlFbGVtZW50IH0gZnJvbSBcIi4uLy4uL3JlYWN0cXVlc3Rpb25fZWxlbWVudFwiO1xuaW1wb3J0IHsgU3VydmV5UXVlc3Rpb25QYW5lbER5bmFtaWMgfSBmcm9tIFwiLi4vLi4vcmVhY3RxdWVzdGlvbl9wYW5lbGR5bmFtaWNcIjtcbmltcG9ydCB7IFN1cnZleVF1ZXN0aW9uUGFuZWxEeW5hbWljQWN0aW9uIH0gZnJvbSBcIi4vcGFuZWxkeW5hbWljLWFkZC1idG5cIjtcblxuZXhwb3J0IGNsYXNzIFN1cnZleVF1ZXN0aW9uUGFuZWxEeW5hbWljUmVtb3ZlQnV0dG9uIGV4dGVuZHMgU3VydmV5UXVlc3Rpb25QYW5lbER5bmFtaWNBY3Rpb24ge1xuICBwcm90ZWN0ZWQgaGFuZGxlQ2xpY2sgPSAoZXZlbnQ6IGFueSkgPT4ge1xuICAgIHRoaXMucXVlc3Rpb24ucmVtb3ZlUGFuZWxVSSh0aGlzLnByb3BzLmRhdGEuaW5kZXgpO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICByZXR1cm4gKFxuICAgICAgPGJ1dHRvblxuICAgICAgICBjbGFzc05hbWU9e3RoaXMucXVlc3Rpb24uZ2V0UGFuZWxSZW1vdmVCdXR0b25Dc3MoKX1cbiAgICAgICAgb25DbGljaz17dGhpcy5oYW5kbGVDbGlja31cbiAgICAgICAgdHlwZT1cImJ1dHRvblwiPlxuICAgICAgICA8c3BhblxuICAgICAgICAgIGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLmJ1dHRvblJlbW92ZVRleHR9XG4gICAgICAgID57dGhpcy5xdWVzdGlvbi5wYW5lbFJlbW92ZVRleHR9PC9zcGFuPlxuICAgICAgICA8c3BhblxuICAgICAgICAgIGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLmljb25SZW1vdmV9XG4gICAgICAgID48L3NwYW4+XG4gICAgICA8L2J1dHRvbj5cbiAgICApO1xuICB9XG59XG5cblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFxuICBcInN2LXBhbmVsZHluYW1pYy1yZW1vdmUtYnRuXCIsXG4gIChwcm9wcykgPT4ge1xuICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFN1cnZleVF1ZXN0aW9uUGFuZWxEeW5hbWljUmVtb3ZlQnV0dG9uLCBwcm9wcyk7XG4gIH1cbik7XG4iLCJpbXBvcnQgUmVhY3RET00gZnJvbSBcInJlYWN0LWRvbVwiO1xuaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgQmFzZSwgUG9wdXBNb2RlbCwgUG9wdXBCYXNlVmlld01vZGVsLCBQb3B1cERyb3Bkb3duVmlld01vZGVsLCBJRGlhbG9nT3B0aW9ucywgY3JlYXRlRGlhbG9nT3B0aW9ucywgY3JlYXRlUG9wdXBNb2RhbFZpZXdNb2RlbCwgY3JlYXRlUG9wdXBWaWV3TW9kZWwsIENzc0NsYXNzQnVpbGRlciwgc2V0dGluZ3MgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFJlYWN0RWxlbWVudEZhY3RvcnkgfSBmcm9tIFwiLi4vLi4vZWxlbWVudC1mYWN0b3J5XCI7XG5pbXBvcnQgeyBTdXJ2ZXlFbGVtZW50QmFzZSB9IGZyb20gXCIuLi8uLi9yZWFjdHF1ZXN0aW9uX2VsZW1lbnRcIjtcbmltcG9ydCB7IFN1cnZleUFjdGlvbkJhciB9IGZyb20gXCIuLi9hY3Rpb24tYmFyL2FjdGlvbi1iYXJcIjtcblxuaW50ZXJmYWNlIElQb3B1cFByb3BzIHtcbiAgbW9kZWw6IFBvcHVwTW9kZWw7XG59XG5cbmV4cG9ydCBjbGFzcyBQb3B1cCBleHRlbmRzIFN1cnZleUVsZW1lbnRCYXNlPElQb3B1cFByb3BzLCBhbnk+IHtcbiAgcHJpdmF0ZSBwb3B1cDogUG9wdXBCYXNlVmlld01vZGVsO1xuICBwcml2YXRlIGNvbnRhaW5lclJlZjogUmVhY3QuUmVmT2JqZWN0PEhUTUxEaXZFbGVtZW50PjtcbiAgY29uc3RydWN0b3IocHJvcHM6IElQb3B1cFByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMuY29udGFpbmVyUmVmID0gUmVhY3QuY3JlYXRlUmVmKCk7XG4gICAgdGhpcy5jcmVhdGVNb2RlbCgpO1xuICB9XG4gIGdldCBtb2RlbCgpOiBQb3B1cE1vZGVsIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5tb2RlbDtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0U3RhdGVFbGVtZW50KCk6IEJhc2Uge1xuICAgIHJldHVybiB0aGlzLm1vZGVsO1xuICB9XG4gIHByaXZhdGUgY3JlYXRlTW9kZWwoKTogdm9pZCB7XG4gICAgdGhpcy5wb3B1cCA9IGNyZWF0ZVBvcHVwVmlld01vZGVsKHRoaXMucHJvcHMubW9kZWwsIHVuZGVmaW5lZCBhcyBhbnkpO1xuICAgIHRoaXMucG9wdXAuaW5pdGlhbGl6ZVBvcHVwQ29udGFpbmVyKCk7XG4gIH1cbiAgcHJpdmF0ZSBzZXRUYXJnZXRFbGVtZW50KCk6IHZvaWQge1xuICAgIGlmKCEhdGhpcy5jb250YWluZXJSZWYuY3VycmVudCAmJiAhdGhpcy5wb3B1cC5pc01vZGFsKSB7XG4gICAgICBjb25zdCBwb3B1cERyb3Bkb3duTW9kZWwgPSB0aGlzLnBvcHVwIGFzIFBvcHVwRHJvcGRvd25WaWV3TW9kZWw7XG4gICAgICBpZighcG9wdXBEcm9wZG93bk1vZGVsKSByZXR1cm47XG5cbiAgICAgIGlmKCEhdGhpcy5jb250YWluZXJSZWYuY3VycmVudC5wYXJlbnRFbGVtZW50KSB7XG4gICAgICAgIHBvcHVwRHJvcGRvd25Nb2RlbC50YXJnZXRFbGVtZW50ID0gdGhpcy5jb250YWluZXJSZWYuY3VycmVudC5wYXJlbnRFbGVtZW50O1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBjb21wb25lbnREaWRNb3VudCgpOiB2b2lkIHtcbiAgICBzdXBlci5jb21wb25lbnREaWRNb3VudCgpO1xuICAgIHRoaXMucG9wdXAuaW5pdGlhbGl6ZVBvcHVwQ29udGFpbmVyKCk7XG4gICAgdGhpcy5zZXRUYXJnZXRFbGVtZW50KCk7XG4gIH1cbiAgY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wczogYW55LCBwcmV2U3RhdGU6IGFueSkge1xuICAgIHN1cGVyLmNvbXBvbmVudERpZFVwZGF0ZShwcmV2UHJvcHMsIHByZXZTdGF0ZSk7XG4gICAgdGhpcy5zZXRUYXJnZXRFbGVtZW50KCk7XG4gIH1cbiAgY29tcG9uZW50V2lsbFVubW91bnQoKTogdm9pZCB7XG4gICAgdGhpcy5wb3B1cC51bm1vdW50UG9wdXBDb250YWluZXIoKTtcbiAgfVxuICBzaG91bGRDb21wb25lbnRVcGRhdGUobmV4dFByb3BzOiBJUG9wdXBQcm9wcywgbmV4dFN0YXRlOiBhbnkpIHtcbiAgICBpZiAoIXN1cGVyLnNob3VsZENvbXBvbmVudFVwZGF0ZShuZXh0UHJvcHMsIG5leHRTdGF0ZSkpIHJldHVybiBmYWxzZTtcbiAgICBjb25zdCBpc05lZWRVcGRhdGUgPSBuZXh0UHJvcHMubW9kZWwgIT09IHRoaXMucG9wdXAubW9kZWw7XG4gICAgaWYoaXNOZWVkVXBkYXRlKSB7XG4gICAgICB0aGlzLnBvcHVwPy5kaXNwb3NlKCk7XG4gICAgICB0aGlzLmNyZWF0ZU1vZGVsKCk7XG4gICAgfVxuICAgIHJldHVybiBpc05lZWRVcGRhdGU7XG4gIH1cbiAgcmVuZGVyKCk6IEpTWC5FbGVtZW50IHtcbiAgICB0aGlzLnBvcHVwLm1vZGVsID0gdGhpcy5tb2RlbDtcbiAgICBsZXQgcG9wdXBDb250YWluZXI7XG4gICAgaWYodGhpcy5tb2RlbC5pc01vZGFsKSB7XG4gICAgICBwb3B1cENvbnRhaW5lciA9IFJlYWN0RE9NLmNyZWF0ZVBvcnRhbCg8UG9wdXBDb250YWluZXIgbW9kZWw9e3RoaXMucG9wdXB9PjwvUG9wdXBDb250YWluZXI+LCB0aGlzLnBvcHVwLmNvbnRhaW5lcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHBvcHVwQ29udGFpbmVyID0gUmVhY3RET00uY3JlYXRlUG9ydGFsKDxQb3B1cERyb3Bkb3duQ29udGFpbmVyIG1vZGVsPXt0aGlzLnBvcHVwfT48L1BvcHVwRHJvcGRvd25Db250YWluZXI+LCB0aGlzLnBvcHVwLmNvbnRhaW5lcik7XG4gICAgfVxuICAgIHJldHVybiA8ZGl2IHJlZj17dGhpcy5jb250YWluZXJSZWZ9Pntwb3B1cENvbnRhaW5lcn08L2Rpdj47XG4gIH1cbn1cblxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXG4gIFwic3YtcG9wdXBcIixcbiAgKHByb3BzOiBJUG9wdXBQcm9wcykgPT4ge1xuICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFBvcHVwLCBwcm9wcyk7XG4gIH1cbik7XG5cbmV4cG9ydCBjbGFzcyBQb3B1cENvbnRhaW5lciBleHRlbmRzIFN1cnZleUVsZW1lbnRCYXNlPGFueSwgYW55PiB7XG4gIHB1YmxpYyBwcmV2SXNWaXNpYmxlOiBib29sZWFuID0gZmFsc2U7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gIH1cbiAgaGFuZGxlS2V5ZG93biA9IChldmVudDogYW55KSA9PiB7XG4gICAgdGhpcy5tb2RlbC5vbktleURvd24oZXZlbnQpO1xuICB9O1xuICBnZXQgbW9kZWwoKTogUG9wdXBCYXNlVmlld01vZGVsIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5tb2RlbDtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0U3RhdGVFbGVtZW50KCk6IEJhc2Uge1xuICAgIHJldHVybiB0aGlzLm1vZGVsO1xuICB9XG4gIGNsaWNrSW5zaWRlID0gKGV2OiBhbnkpID0+IHtcbiAgICBldi5zdG9wUHJvcGFnYXRpb24oKTtcbiAgfTtcbiAgY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wczogYW55LCBwcmV2U3RhdGU6IGFueSkge1xuICAgIHN1cGVyLmNvbXBvbmVudERpZFVwZGF0ZShwcmV2UHJvcHMsIHByZXZTdGF0ZSk7XG4gICAgaWYgKCF0aGlzLnByZXZJc1Zpc2libGUgJiYgdGhpcy5tb2RlbC5pc1Zpc2libGUpIHtcbiAgICAgIHRoaXMubW9kZWwudXBkYXRlT25TaG93aW5nKCk7XG4gICAgfVxuICAgIHRoaXMucHJldklzVmlzaWJsZSA9IHRoaXMubW9kZWwuaXNWaXNpYmxlO1xuICB9XG4gIHJlbmRlckNvbnRhaW5lcihQb3B1cEJhc2VWaWV3TW9kZWw6IFBvcHVwQmFzZVZpZXdNb2RlbCk6IEpTWC5FbGVtZW50IHtcbiAgICBjb25zdCBoZWFkZXJQb3B1cCA9IFBvcHVwQmFzZVZpZXdNb2RlbC5zaG93SGVhZGVyID8gdGhpcy5yZW5kZXJIZWFkZXJQb3B1cChQb3B1cEJhc2VWaWV3TW9kZWwpIDogbnVsbDtcbiAgICBjb25zdCBoZWFkZXJDb250ZW50ID0gISFQb3B1cEJhc2VWaWV3TW9kZWwudGl0bGUgPyB0aGlzLnJlbmRlckhlYWRlckNvbnRlbnQoKSA6IG51bGw7XG4gICAgY29uc3QgY29udGVudCA9IHRoaXMucmVuZGVyQ29udGVudCgpO1xuICAgIGNvbnN0IGZvb3RlckNvbnRlbnQgPSBQb3B1cEJhc2VWaWV3TW9kZWwuc2hvd0Zvb3RlciA/IHRoaXMucmVuZGVyRm9vdGVyKHRoaXMubW9kZWwpIDogbnVsbDtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdlxuICAgICAgICBjbGFzc05hbWU9XCJzdi1wb3B1cF9fY29udGFpbmVyXCJcbiAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICBsZWZ0OiBQb3B1cEJhc2VWaWV3TW9kZWwubGVmdCxcbiAgICAgICAgICB0b3A6IFBvcHVwQmFzZVZpZXdNb2RlbC50b3AsXG4gICAgICAgICAgaGVpZ2h0OiBQb3B1cEJhc2VWaWV3TW9kZWwuaGVpZ2h0LFxuICAgICAgICAgIHdpZHRoOiBQb3B1cEJhc2VWaWV3TW9kZWwud2lkdGgsXG4gICAgICAgICAgbWluV2lkdGg6IFBvcHVwQmFzZVZpZXdNb2RlbC5taW5XaWR0aCxcbiAgICAgICAgfX1cbiAgICAgICAgb25DbGljaz17KGV2OiBhbnkpID0+IHtcbiAgICAgICAgICB0aGlzLmNsaWNrSW5zaWRlKGV2KTtcbiAgICAgICAgfX1cbiAgICAgID5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdi1wb3B1cF9fc2hhZG93XCI+XG4gICAgICAgICAge2hlYWRlclBvcHVwfVxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3YtcG9wdXBfX2JvZHktY29udGVudFwiPlxuICAgICAgICAgICAge2hlYWRlckNvbnRlbnR9XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2LXBvcHVwX19zY3JvbGxpbmctY29udGVudFwiPlxuICAgICAgICAgICAgICB7Y29udGVudH1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAge2Zvb3RlckNvbnRlbnR9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxuICByZW5kZXJIZWFkZXJDb250ZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICByZXR1cm4gPGRpdiBjbGFzc05hbWU9XCJzdi1wb3B1cF9fYm9keS1oZWFkZXJcIj57dGhpcy5tb2RlbC50aXRsZX08L2Rpdj47XG4gIH1cbiAgcmVuZGVyQ29udGVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgY29uc3QgY29udGVudENvbXBvbmVudCA9IFJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UuY3JlYXRlRWxlbWVudChcbiAgICAgIHRoaXMubW9kZWwuY29udGVudENvbXBvbmVudE5hbWUsXG4gICAgICB0aGlzLm1vZGVsLmNvbnRlbnRDb21wb25lbnREYXRhXG4gICAgKTtcbiAgICByZXR1cm4gPGRpdiBjbGFzc05hbWU9XCJzdi1wb3B1cF9fY29udGVudFwiPntjb250ZW50Q29tcG9uZW50fTwvZGl2PjtcbiAgfVxuXG4gIHByb3RlY3RlZCByZW5kZXJIZWFkZXJQb3B1cChwb3B1cE1vZGVsOiBQb3B1cEJhc2VWaWV3TW9kZWwpOiBKU1guRWxlbWVudCB8IG51bGwge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJGb290ZXIocG9wdU1vZGVsOiBQb3B1cEJhc2VWaWV3TW9kZWwpOiBKU1guRWxlbWVudCB8IG51bGwge1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2LXBvcHVwX19ib2R5LWZvb3RlclwiPlxuICAgICAgICA8U3VydmV5QWN0aW9uQmFyIG1vZGVsPXtwb3B1TW9kZWwuZm9vdGVyVG9vbGJhcn0+PC9TdXJ2ZXlBY3Rpb25CYXI+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG4gIHJlbmRlcigpOiBKU1guRWxlbWVudCB7XG4gICAgY29uc3QgY29udGFpbmVyID0gdGhpcy5yZW5kZXJDb250YWluZXIodGhpcy5tb2RlbCk7XG4gICAgY29uc3QgY2xhc3NOYW1lID0gbmV3IENzc0NsYXNzQnVpbGRlcigpXG4gICAgICAuYXBwZW5kKFwic3YtcG9wdXBcIilcbiAgICAgIC5hcHBlbmQodGhpcy5tb2RlbC5zdHlsZUNsYXNzKVxuICAgICAgLnRvU3RyaW5nKCk7XG4gICAgY29uc3Qgc3R5bGUgPSB7IGRpc3BsYXk6IHRoaXMubW9kZWwuaXNWaXNpYmxlID8gXCJcIiA6IFwibm9uZVwiLCB9O1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2XG4gICAgICAgIHRhYkluZGV4PXstMX1cbiAgICAgICAgY2xhc3NOYW1lPXtjbGFzc05hbWV9XG4gICAgICAgIHN0eWxlPXtzdHlsZX1cbiAgICAgICAgb25DbGljaz17KGU6IGFueSkgPT4ge1xuICAgICAgICAgIHRoaXMubW9kZWwuY2xpY2tPdXRzaWRlKCk7XG4gICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgfX1cbiAgICAgICAgb25LZXlEb3duPXt0aGlzLmhhbmRsZUtleWRvd259XG4gICAgICA+XG4gICAgICAgIHtjb250YWluZXJ9XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG59XG5leHBvcnQgY2xhc3MgUG9wdXBEcm9wZG93bkNvbnRhaW5lciBleHRlbmRzIFBvcHVwQ29udGFpbmVyIHtcblxuICBwcm90ZWN0ZWQgcmVuZGVySGVhZGVyUG9wdXAocG9wdXBNb2RlbDogUG9wdXBCYXNlVmlld01vZGVsKTogSlNYLkVsZW1lbnQgfCBudWxsIHtcbiAgICBjb25zdCBwb3B1cERyb3Bkb3duTW9kZWwgPSBwb3B1cE1vZGVsIGFzIFBvcHVwRHJvcGRvd25WaWV3TW9kZWw7XG4gICAgaWYoIXBvcHVwRHJvcGRvd25Nb2RlbCkgcmV0dXJuIG51bGw7XG5cbiAgICByZXR1cm4gKFxuICAgICAgPHNwYW5cbiAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICBsZWZ0OiBwb3B1cERyb3Bkb3duTW9kZWwucG9pbnRlclRhcmdldC5sZWZ0LFxuICAgICAgICAgIHRvcDogcG9wdXBEcm9wZG93bk1vZGVsLnBvaW50ZXJUYXJnZXQudG9wLFxuICAgICAgICB9fVxuICAgICAgICBjbGFzc05hbWU9XCJzdi1wb3B1cF9fcG9pbnRlclwiXG4gICAgICA+PC9zcGFuPlxuICAgICk7XG4gIH1cbn1cblxuLy8gcmVwbGFjZSB0byBzaG93RGlhbG9nIHRoZW4gZGVsZXRlXG5leHBvcnQgZnVuY3Rpb24gc2hvd01vZGFsKFxuICBjb21wb25lbnROYW1lOiBzdHJpbmcsXG4gIGRhdGE6IGFueSxcbiAgb25BcHBseTogKCkgPT4gYm9vbGVhbixcbiAgb25DYW5jZWw/OiAoKSA9PiB2b2lkLFxuICBjc3NDbGFzcz86IHN0cmluZyxcbiAgdGl0bGU/OiBzdHJpbmcsXG4gIGRpc3BsYXlNb2RlOiBcInBvcHVwXCIgfCBcIm92ZXJsYXlcIiA9IFwicG9wdXBcIlxuKTogUG9wdXBCYXNlVmlld01vZGVsIHtcbiAgY29uc3Qgb3B0aW9ucyA9IGNyZWF0ZURpYWxvZ09wdGlvbnMoXG4gICAgY29tcG9uZW50TmFtZSxcbiAgICBkYXRhLFxuICAgIG9uQXBwbHksXG4gICAgb25DYW5jZWwsXG4gICAgdW5kZWZpbmVkLFxuICAgIHVuZGVmaW5lZCxcbiAgICBjc3NDbGFzcyxcbiAgICB0aXRsZSxcbiAgICBkaXNwbGF5TW9kZVxuICApO1xuICByZXR1cm4gc2hvd0RpYWxvZyhvcHRpb25zKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBzaG93RGlhbG9nKGRpYWxvZ09wdGlvbnM6IElEaWFsb2dPcHRpb25zKTogUG9wdXBCYXNlVmlld01vZGVsIHtcbiAgZGlhbG9nT3B0aW9ucy5vbkhpZGUgPSAoKSA9PiB7IHtcbiAgICBSZWFjdERPTS51bm1vdW50Q29tcG9uZW50QXROb2RlKHBvcHVwVmlld01vZGVsLmNvbnRhaW5lcik7XG4gICAgcG9wdXBWaWV3TW9kZWwudW5tb3VudFBvcHVwQ29udGFpbmVyKCk7XG4gIH0gfTtcbiAgY29uc3QgcG9wdXBWaWV3TW9kZWw6IFBvcHVwQmFzZVZpZXdNb2RlbCA9IGNyZWF0ZVBvcHVwTW9kYWxWaWV3TW9kZWwoZGlhbG9nT3B0aW9ucyk7XG4gIFJlYWN0RE9NLnJlbmRlcig8UG9wdXBDb250YWluZXIgbW9kZWw9e3BvcHVwVmlld01vZGVsfSAvPiwgcG9wdXBWaWV3TW9kZWwuY29udGFpbmVyKTtcblxuICBwb3B1cFZpZXdNb2RlbC5tb2RlbC5pc1Zpc2libGUgPSB0cnVlO1xuICByZXR1cm4gcG9wdXBWaWV3TW9kZWw7XG59XG5cbnNldHRpbmdzLnNob3dNb2RhbCA9IHNob3dNb2RhbDtcbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFJlYWN0RWxlbWVudEZhY3RvcnkgfSBmcm9tIFwiLi4vZWxlbWVudC1mYWN0b3J5XCI7XG5cbmV4cG9ydCBjbGFzcyBTa2VsZXRvbiBleHRlbmRzIFJlYWN0LkNvbXBvbmVudDxhbnksIGFueT4ge1xuICByZW5kZXIoKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3Ytc2tlbGV0b24tZWxlbWVudFwiIGlkPXt0aGlzLnByb3BzLmVsZW1lbnQ/LmlkfT5cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbn1cblxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXCJzdi1za2VsZXRvblwiLCAocHJvcHM6IGFueSkgPT4ge1xuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTa2VsZXRvbiwgcHJvcHMpO1xufSk7XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBBY3Rpb24gfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFJlYWN0RWxlbWVudEZhY3RvcnkgfSBmcm9tIFwiLi4vLi4vZWxlbWVudC1mYWN0b3J5XCI7XG5pbXBvcnQgeyBSZWFjdFN1cnZleUVsZW1lbnQgfSBmcm9tIFwiLi4vLi4vcmVhY3RxdWVzdGlvbl9lbGVtZW50XCI7XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlOYXZpZ2F0aW9uQnV0dG9uIGV4dGVuZHMgUmVhY3RTdXJ2ZXlFbGVtZW50IHtcbiAgcHJvdGVjdGVkIGdldCBpdGVtKCk6IEFjdGlvbiB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuaXRlbTtcbiAgfVxuICBwcm90ZWN0ZWQgY2FuUmVuZGVyKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLml0ZW0uaXNWaXNpYmxlO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICByZXR1cm4gKFxuICAgICAgPGlucHV0XG4gICAgICAgIGNsYXNzTmFtZT17dGhpcy5pdGVtLmlubmVyQ3NzfVxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgZGlzYWJsZWQ9e3RoaXMuaXRlbS5kaXNhYmxlZH1cbiAgICAgICAgb25Nb3VzZURvd249e3RoaXMuaXRlbS5kYXRhICYmIHRoaXMuaXRlbS5kYXRhLm1vdXNlRG93bn1cbiAgICAgICAgb25DbGljaz17dGhpcy5pdGVtLmFjdGlvbn1cbiAgICAgICAgdmFsdWU9e3RoaXMuaXRlbS50aXRsZX1cbiAgICAgIC8+XG4gICAgKTtcbiAgfVxufVxuXG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcbiAgXCJzdi1uYXYtYnRuXCIsXG4gIChwcm9wcykgPT4ge1xuICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFN1cnZleU5hdmlnYXRpb25CdXR0b24sIHByb3BzKTtcbiAgfVxuKTsiLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBTdXJ2ZXlNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgUmVhY3RFbGVtZW50RmFjdG9yeSB9IGZyb20gXCIuLi8uLi9lbGVtZW50LWZhY3RvcnlcIjtcblxuaW50ZXJmYWNlIElMb2dvSW1hZ2VQcm9wcyB7XG4gIGRhdGE6IFN1cnZleU1vZGVsO1xufVxuXG5leHBvcnQgY2xhc3MgTG9nb0ltYWdlIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50PElMb2dvSW1hZ2VQcm9wcywgYW55PiB7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBJTG9nb0ltYWdlUHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gIH1cbiAgcHJpdmF0ZSBnZXQgc3VydmV5KCk6IFN1cnZleU1vZGVsIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5kYXRhO1xuICB9XG4gIHB1YmxpYyByZW5kZXIoKSB7XG4gICAgY29uc3QgY29udGVudDogSlNYLkVsZW1lbnRbXSA9IFtdO1xuICAgIGNvbnRlbnQucHVzaChcbiAgICAgIDxkaXYga2V5PXtcImxvZ28taW1hZ2VcIn0gY2xhc3NOYW1lPXt0aGlzLnN1cnZleS5sb2dvQ2xhc3NOYW1lc30+XG4gICAgICAgIDxpbWdcbiAgICAgICAgICBjbGFzc05hbWU9e3RoaXMuc3VydmV5LmNzcy5sb2dvSW1hZ2V9XG4gICAgICAgICAgc3JjPXt0aGlzLnN1cnZleS5sb2NMb2dvLnJlbmRlcmVkSHRtbH1cbiAgICAgICAgICBhbHQ9e3RoaXMuc3VydmV5LmxvY1RpdGxlLnJlbmRlcmVkSHRtbH1cbiAgICAgICAgICB3aWR0aD17dGhpcy5zdXJ2ZXkubG9nb1dpZHRoID8gdGhpcy5zdXJ2ZXkubG9nb1dpZHRoIDogdW5kZWZpbmVkfVxuICAgICAgICAgIGhlaWdodD17dGhpcy5zdXJ2ZXkubG9nb0hlaWdodCA/IHRoaXMuc3VydmV5LmxvZ29IZWlnaHQgOiB1bmRlZmluZWR9XG4gICAgICAgICAgc3R5bGU9e3sgb2JqZWN0Rml0OiB0aGlzLnN1cnZleS5sb2dvRml0IGFzIGFueSB9fVxuICAgICAgICAvPlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgICByZXR1cm4gPD57Y29udGVudH08Lz47XG4gIH1cbn1cblxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXCJzdi1sb2dvLWltYWdlXCIsIChwcm9wczogSUxvZ29JbWFnZVByb3BzKSA9PiB7XG4gIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KExvZ29JbWFnZSwgcHJvcHMpO1xufSk7XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBTdXJ2ZXlNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgU3VydmV5RWxlbWVudEJhc2UgfSBmcm9tIFwiLi4vLi4vcmVhY3RxdWVzdGlvbl9lbGVtZW50XCI7XG5pbXBvcnQgeyBSZWFjdEVsZW1lbnRGYWN0b3J5IH0gZnJvbSBcIi4uLy4uL2VsZW1lbnQtZmFjdG9yeVwiO1xuaW1wb3J0IHsgVGl0bGVFbGVtZW50IH0gZnJvbSBcIi4uL3RpdGxlL3RpdGxlLWVsZW1lbnRcIjtcblxuaW50ZXJmYWNlIElTdXJ2ZXlIZWFkZXJQcm9wcyB7XG4gIHN1cnZleTogU3VydmV5TW9kZWw7XG59XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlIZWFkZXIgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQ8SVN1cnZleUhlYWRlclByb3BzLCBhbnk+IHtcbiAgY29uc3RydWN0b3IocHJvcHM6IElTdXJ2ZXlIZWFkZXJQcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLnN0YXRlID0geyBjaGFuZ2VkOiAwIH07XG4gIH1cblxuICBwcml2YXRlIGdldCBzdXJ2ZXkoKTogU3VydmV5TW9kZWwge1xuICAgIHJldHVybiB0aGlzLnByb3BzLnN1cnZleTtcbiAgfVxuICBwcml2YXRlIGdldCBjc3MoKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5zdXJ2ZXkuY3NzO1xuICB9XG5cbiAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgY29uc3Qgc2VsZjogU3VydmV5SGVhZGVyID0gdGhpcztcbiAgICB0aGlzLnN1cnZleS5sb2NMb2dvLm9uQ2hhbmdlZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHNlbGYuc2V0U3RhdGUoeyBjaGFuZ2VkOiBzZWxmLnN0YXRlLmNoYW5nZWQgKyAxIH0pO1xuICAgIH07XG4gIH1cbiAgY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgdGhpcy5zdXJ2ZXkubG9jTG9nby5vbkNoYW5nZWQgPSBmdW5jdGlvbiAoKSB7IH07XG4gIH1cblxuICBwcml2YXRlIHJlbmRlclRpdGxlKCk6IEpTWC5FbGVtZW50IHwgbnVsbCB7XG4gICAgaWYgKCF0aGlzLnN1cnZleS5yZW5kZXJlZEhhc1RpdGxlKSByZXR1cm4gbnVsbDtcbiAgICBjb25zdCBkZXNjcmlwdGlvbiA9IFN1cnZleUVsZW1lbnRCYXNlLnJlbmRlckxvY1N0cmluZyhcbiAgICAgIHRoaXMuc3VydmV5LmxvY0Rlc2NyaXB0aW9uXG4gICAgKTtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdlxuICAgICAgICBjbGFzc05hbWU9e3RoaXMuY3NzLmhlYWRlclRleHR9XG4gICAgICAgIHN0eWxlPXt7IG1heFdpZHRoOiB0aGlzLnN1cnZleS50aXRsZU1heFdpZHRoIH19XG4gICAgICA+XG4gICAgICAgIDxUaXRsZUVsZW1lbnQgZWxlbWVudD17dGhpcy5zdXJ2ZXl9PjwvVGl0bGVFbGVtZW50PlxuICAgICAgICB7IHRoaXMuc3VydmV5LnJlbmRlcmVkSGFzRGVzY3JpcHRpb24gPyA8aDUgY2xhc3NOYW1lPXt0aGlzLmNzcy5kZXNjcmlwdGlvbn0+e2Rlc2NyaXB0aW9ufTwvaDU+IDogbnVsbCB9XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSByZW5kZXJMb2dvSW1hZ2UoaXNSZW5kZXI6IGJvb2xlYW4pOiBKU1guRWxlbWVudCB8IG51bGwge1xuICAgIGlmICghaXNSZW5kZXIpIHJldHVybiBudWxsO1xuICAgIGNvbnN0IGNvbXBvbmVudE5hbWU6IHN0cmluZyA9IHRoaXMuc3VydmV5LmdldEVsZW1lbnRXcmFwcGVyQ29tcG9uZW50TmFtZShcbiAgICAgIHRoaXMuc3VydmV5LFxuICAgICAgXCJsb2dvLWltYWdlXCJcbiAgICApO1xuICAgIGNvbnN0IGNvbXBvbmVudERhdGE6IGFueSA9IHRoaXMuc3VydmV5LmdldEVsZW1lbnRXcmFwcGVyQ29tcG9uZW50RGF0YShcbiAgICAgIHRoaXMuc3VydmV5LFxuICAgICAgXCJsb2dvLWltYWdlXCJcbiAgICApO1xuICAgIHJldHVybiBSZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLmNyZWF0ZUVsZW1lbnQoY29tcG9uZW50TmFtZSwge1xuICAgICAgZGF0YTogY29tcG9uZW50RGF0YSxcbiAgICB9KTtcbiAgfVxuICBwdWJsaWMgcmVuZGVyKCk6IEpTWC5FbGVtZW50IHwgbnVsbCB7XG4gICAgaWYgKCF0aGlzLnN1cnZleS5yZW5kZXJlZEhhc0hlYWRlcikgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPXt0aGlzLmNzcy5oZWFkZXJ9PlxuICAgICAgICB7dGhpcy5yZW5kZXJMb2dvSW1hZ2UodGhpcy5zdXJ2ZXkuaXNMb2dvQmVmb3JlKX1cbiAgICAgICAge3RoaXMucmVuZGVyVGl0bGUoKX1cbiAgICAgICAge3RoaXMucmVuZGVyTG9nb0ltYWdlKHRoaXMuc3VydmV5LmlzTG9nb0FmdGVyKX1cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3RoaXMuY3NzLmhlYWRlckNsb3NlfT48L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbn1cblxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXG4gIFwic3VydmV5LWhlYWRlclwiLFxuICAocHJvcHM6IElTdXJ2ZXlIZWFkZXJQcm9wcykgPT4ge1xuICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFN1cnZleUhlYWRlciwgcHJvcHMpO1xuICB9XG4pO1xuIiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgUmVhY3RFbGVtZW50RmFjdG9yeSB9IGZyb20gXCIuLi8uLi9lbGVtZW50LWZhY3RvcnlcIjtcbmltcG9ydCB7IGNyZWF0ZVN2ZyB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuXG5leHBvcnQgY2xhc3MgU3ZnSWNvbiBleHRlbmRzIFJlYWN0LkNvbXBvbmVudDxhbnksIGFueT4ge1xuICBwcml2YXRlIHN2Z0ljb25SZWY6IGFueTtcbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLnN2Z0ljb25SZWYgPSBSZWFjdC5jcmVhdGVSZWYoKTtcbiAgfVxuXG4gIHVwZGF0ZVN2ZygpIHtcbiAgICBpZih0aGlzLnByb3BzLmljb25OYW1lKVxuICAgICAgY3JlYXRlU3ZnKFxuICAgICAgICB0aGlzLnByb3BzLnNpemUsXG4gICAgICAgIHRoaXMucHJvcHMud2lkdGgsXG4gICAgICAgIHRoaXMucHJvcHMuaGVpZ2h0LFxuICAgICAgICB0aGlzLnByb3BzLmljb25OYW1lLFxuICAgICAgICB0aGlzLnN2Z0ljb25SZWYuY3VycmVudCxcbiAgICAgICAgdGhpcy5wcm9wcy50aXRsZSxcbiAgICAgICk7XG4gIH1cbiAgY29tcG9uZW50RGlkVXBkYXRlKCkge1xuICAgIHRoaXMudXBkYXRlU3ZnKCk7XG4gIH1cbiAgcmVuZGVyKCkge1xuICAgIGxldCBjbGFzc05hbWUgPSBcInN2LXN2Zy1pY29uXCI7XG4gICAgaWYodGhpcy5wcm9wcy5jbGFzc05hbWUpIHtcbiAgICAgIGNsYXNzTmFtZSArPSBcIiBcIiArIHRoaXMucHJvcHMuY2xhc3NOYW1lO1xuICAgIH1cbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5wcm9wcy5pY29uTmFtZSA/XG4gICAgICAgIDxzdmcgY2xhc3NOYW1lPXsgY2xhc3NOYW1lIH0gc3R5bGU9e3RoaXMucHJvcHMuc3R5bGV9IG9uQ2xpY2s9e3RoaXMucHJvcHMub25DbGlja30gcmVmPXt0aGlzLnN2Z0ljb25SZWZ9IHJvbGU9XCJpbWdcIiBhcmlhLWxhYmVsPXt0aGlzLnByb3BzLnRpdGxlfT48dXNlPjwvdXNlPjwvc3ZnPlxuICAgICAgICA6IG51bGxcbiAgICApO1xuICB9XG4gIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIHRoaXMudXBkYXRlU3ZnKCk7XG4gIH1cbn1cblxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXCJzdi1zdmctaWNvblwiLCAocHJvcHMpID0+IHtcbiAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3ZnSWNvbiwgcHJvcHMpO1xufSk7XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBTdXJ2ZXlFbGVtZW50LCBSZW5kZXJlckZhY3RvcnkgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFJlYWN0RWxlbWVudEZhY3RvcnkgfSBmcm9tIFwiLi4vLi4vZWxlbWVudC1mYWN0b3J5XCI7XG5pbXBvcnQgeyBTdXJ2ZXlBY3Rpb25CYXIgfSBmcm9tIFwiLi4vYWN0aW9uLWJhci9hY3Rpb24tYmFyXCI7XG5pbXBvcnQgeyBUaXRsZUNvbnRlbnQgfSBmcm9tIFwiLi90aXRsZS1jb250ZW50XCI7XG5cbmV4cG9ydCBjbGFzcyBUaXRsZUFjdGlvbnMgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQ8YW55LCBhbnk+IHtcbiAgcHJvdGVjdGVkIGdldCBjc3NDbGFzc2VzKCkge1xuICAgIHJldHVybiB0aGlzLnByb3BzLmNzc0NsYXNzZXM7XG4gIH1cbiAgcHJvdGVjdGVkIGdldCBlbGVtZW50KCk6IFN1cnZleUVsZW1lbnQge1xuICAgIHJldHVybiB0aGlzLnByb3BzLmVsZW1lbnQ7XG4gIH1cblxuICByZW5kZXIoKTogSlNYLkVsZW1lbnQge1xuICAgIGNvbnN0IHRpdGxlQ29udGVudDogSlNYLkVsZW1lbnQgPSA8VGl0bGVDb250ZW50IGVsZW1lbnQ9e3RoaXMuZWxlbWVudH0gY3NzQ2xhc3Nlcz17dGhpcy5jc3NDbGFzc2VzfT48L1RpdGxlQ29udGVudD47XG4gICAgaWYoIXRoaXMuZWxlbWVudC5oYXNUaXRsZUFjdGlvbnMpIHJldHVybiB0aXRsZUNvbnRlbnQ7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3YtdGl0bGUtYWN0aW9uc1wiPlxuICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJzdi10aXRsZS1hY3Rpb25zX190aXRsZVwiPnt0aXRsZUNvbnRlbnR9PC9zcGFuPlxuICAgICAgICA8U3VydmV5QWN0aW9uQmFyIG1vZGVsPXt0aGlzLmVsZW1lbnQuZ2V0VGl0bGVUb29sYmFyKCl9PjwvU3VydmV5QWN0aW9uQmFyPlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxufVxuXG5SZW5kZXJlckZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJSZW5kZXJlcihcbiAgXCJlbGVtZW50XCIsXG4gIFwidGl0bGUtYWN0aW9uc1wiLFxuICBcInN2LXRpdGxlLWFjdGlvbnNcIlxuKTtcblxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXCJzdi10aXRsZS1hY3Rpb25zXCIsIChwcm9wcykgPT4ge1xuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChUaXRsZUFjdGlvbnMsIHByb3BzKTtcbn0pO1xuIiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgU3VydmV5RWxlbWVudENvcmUsIElUaXRsZU93bmVyIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBTdXJ2ZXlFbGVtZW50QmFzZSB9IGZyb20gXCIuLi8uLi9yZWFjdHF1ZXN0aW9uX2VsZW1lbnRcIjtcblxuZXhwb3J0IGNsYXNzIFRpdGxlQ29udGVudCBleHRlbmRzIFJlYWN0LkNvbXBvbmVudDxhbnksIGFueT4ge1xuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXQgY3NzQ2xhc3NlcygpIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5jc3NDbGFzc2VzO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXQgZWxlbWVudCgpOiBTdXJ2ZXlFbGVtZW50Q29yZSB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuZWxlbWVudDtcbiAgfVxuICByZW5kZXIoKTogSlNYLkVsZW1lbnQge1xuICAgIGlmKHRoaXMuZWxlbWVudC5pc1RpdGxlUmVuZGVyZWRBc1N0cmluZylcbiAgICAgIHJldHVybiBTdXJ2ZXlFbGVtZW50QmFzZS5yZW5kZXJMb2NTdHJpbmcodGhpcy5lbGVtZW50LmxvY1RpdGxlKTtcbiAgICB2YXIgc3BhbnMgPSB0aGlzLnJlbmRlclRpdGxlU3BhbnModGhpcy5lbGVtZW50LmdldFRpdGxlT3duZXIoKSwgdGhpcy5jc3NDbGFzc2VzKTtcbiAgICByZXR1cm4gPD57c3BhbnN9PC8+O1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJUaXRsZVNwYW5zKGVsZW1lbnQ6IElUaXRsZU93bmVyLCBjc3NDbGFzc2VzOiBhbnkpOiBBcnJheTxKU1guRWxlbWVudD4ge1xuICAgIHZhciBnZXRTcGFjZVNwYW4gPSAoa2V5OiBhbnkpID0+IHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxzcGFuIGRhdGEta2V5PXtrZXl9IGtleT17a2V5fT5cbiAgICAgICAgICAmbmJzcDtcbiAgICAgICAgPC9zcGFuPlxuICAgICAgKTtcbiAgICB9O1xuICAgIHZhciBzcGFuczogQXJyYXk8SlNYLkVsZW1lbnQ+ID0gW107XG4gICAgaWYgKGVsZW1lbnQuaXNSZXF1aXJlVGV4dE9uU3RhcnQpIHtcbiAgICAgIHNwYW5zLnB1c2godGhpcy5yZW5kZXJSZXF1aXJlVGV4dChlbGVtZW50LCBjc3NDbGFzc2VzKSk7XG4gICAgICBzcGFucy5wdXNoKGdldFNwYWNlU3BhbihcInJlcS1zcFwiKSk7XG4gICAgfVxuICAgIHZhciBxdWVzdGlvbk51bWJlciA9IGVsZW1lbnQubm87XG4gICAgaWYgKHF1ZXN0aW9uTnVtYmVyKSB7XG4gICAgICBzcGFucy5wdXNoKFxuICAgICAgICA8c3BhblxuICAgICAgICAgIGRhdGEta2V5PXtcInFfbnVtXCJ9XG4gICAgICAgICAga2V5PXtcInFfbnVtXCJ9XG4gICAgICAgICAgY2xhc3NOYW1lPXtjc3NDbGFzc2VzLm51bWJlcn1cbiAgICAgICAgICBzdHlsZT17eyBwb3NpdGlvbjogXCJzdGF0aWNcIiB9fVxuICAgICAgICAgIGFyaWEtaGlkZGVuPXt0cnVlfVxuICAgICAgICA+XG4gICAgICAgICAge3F1ZXN0aW9uTnVtYmVyfVxuICAgICAgICA8L3NwYW4+XG4gICAgICApO1xuICAgICAgc3BhbnMucHVzaChnZXRTcGFjZVNwYW4oXCJudW0tc3BcIikpO1xuICAgIH1cbiAgICBpZiAoZWxlbWVudC5pc1JlcXVpcmVUZXh0QmVmb3JlVGl0bGUpIHtcbiAgICAgIHNwYW5zLnB1c2godGhpcy5yZW5kZXJSZXF1aXJlVGV4dChlbGVtZW50LCBjc3NDbGFzc2VzKSk7XG4gICAgICBzcGFucy5wdXNoKGdldFNwYWNlU3BhbihcInJlcS1zcFwiKSk7XG4gICAgfVxuICAgIHNwYW5zLnB1c2goXG4gICAgICBTdXJ2ZXlFbGVtZW50QmFzZS5yZW5kZXJMb2NTdHJpbmcoZWxlbWVudC5sb2NUaXRsZSwgbnVsbCwgXCJxX3RpdGxlXCIpXG4gICAgKTtcbiAgICBpZiAoZWxlbWVudC5pc1JlcXVpcmVUZXh0QWZ0ZXJUaXRsZSkge1xuICAgICAgc3BhbnMucHVzaChnZXRTcGFjZVNwYW4oXCJyZXEtc3BcIikpO1xuICAgICAgc3BhbnMucHVzaCh0aGlzLnJlbmRlclJlcXVpcmVUZXh0KGVsZW1lbnQsIGNzc0NsYXNzZXMpKTtcbiAgICB9XG4gICAgcmV0dXJuIHNwYW5zO1xuICB9XG5cbiAgcHJpdmF0ZSByZW5kZXJSZXF1aXJlVGV4dChcbiAgICBlbGVtZW50OiBJVGl0bGVPd25lcixcbiAgICBjc3NDbGFzc2VzOiBhbnlcbiAgKTogSlNYLkVsZW1lbnQge1xuICAgIHJldHVybiAoXG4gICAgICA8c3BhblxuICAgICAgICBkYXRhLWtleT17XCJyZXEtdGV4dFwifVxuICAgICAgICBrZXk9e1wicmVxLXRleHRcIn1cbiAgICAgICAgY2xhc3NOYW1lPXtjc3NDbGFzc2VzLnJlcXVpcmVkVGV4dCB8fCBjc3NDbGFzc2VzLnBhbmVsLnJlcXVpcmVkVGV4dH1cbiAgICAgICAgYXJpYS1oaWRkZW49e3RydWV9XG4gICAgICA+XG4gICAgICAgIHtlbGVtZW50LnJlcXVpcmVkVGV4dH1cbiAgICAgIDwvc3Bhbj5cbiAgICApO1xuICB9XG59XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBTdXJ2ZXlFbGVtZW50Q29yZSwgZG9LZXkyQ2xpY2tVcCB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgVGl0bGVBY3Rpb25zIH0gZnJvbSBcIi4vdGl0bGUtYWN0aW9uc1wiO1xuXG5leHBvcnQgY2xhc3MgVGl0bGVFbGVtZW50IGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50PGFueSwgYW55PiB7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gIH1cbiAgcHJpdmF0ZSBnZXQgZWxlbWVudCgpOiBTdXJ2ZXlFbGVtZW50Q29yZSB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuZWxlbWVudDtcbiAgfVxuICByZW5kZXIoKTogSlNYLkVsZW1lbnQgfCBhbnkge1xuICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLmVsZW1lbnQ7XG4gICAgaWYgKCFlbGVtZW50IHx8ICFlbGVtZW50Lmhhc1RpdGxlKSByZXR1cm4gbnVsbDtcbiAgICBjb25zdCBhcmlhTGFiZWwgPSBlbGVtZW50LnRpdGxlQXJpYUxhYmVsIHx8IHVuZGVmaW5lZDtcbiAgICBjb25zdCB0aXRsZUNvbnRlbnQgPSAoXG4gICAgICA8VGl0bGVBY3Rpb25zXG4gICAgICAgIGVsZW1lbnQ9e2VsZW1lbnR9XG4gICAgICAgIGNzc0NsYXNzZXM9e2VsZW1lbnQuY3NzQ2xhc3Nlc31cbiAgICAgID48L1RpdGxlQWN0aW9ucz5cbiAgICApO1xuICAgIGxldCBvbkNsaWNrOiB1bmRlZmluZWQgfCAoKGU6IGFueSkgPT4gdm9pZCkgPSB1bmRlZmluZWQ7XG4gICAgbGV0IG9uS2V5VXA6IHVuZGVmaW5lZCB8ICgoZTogYW55KSA9PiB2b2lkKSA9IHVuZGVmaW5lZDtcbiAgICBpZiAoZWxlbWVudC5oYXNUaXRsZUV2ZW50cykge1xuICAgICAgb25LZXlVcCA9IChldnQ6IGFueSkgPT4ge1xuICAgICAgICBkb0tleTJDbGlja1VwKGV2dC5uYXRpdmVFdmVudCk7XG4gICAgICB9O1xuICAgIH1cblxuICAgIGNvbnN0IEN1c3RvbVRhZyA9IGVsZW1lbnQudGl0bGVUYWdOYW1lIGFzIGtleW9mIEpTWC5JbnRyaW5zaWNFbGVtZW50cztcbiAgICByZXR1cm4gKFxuICAgICAgPEN1c3RvbVRhZ1xuICAgICAgICBjbGFzc05hbWU9e2VsZW1lbnQuY3NzVGl0bGV9XG4gICAgICAgIGlkPXtlbGVtZW50LmFyaWFUaXRsZUlkfVxuICAgICAgICBhcmlhLWxhYmVsPXthcmlhTGFiZWx9XG4gICAgICAgIHRhYkluZGV4PXtlbGVtZW50LnRpdGxlVGFiSW5kZXh9XG4gICAgICAgIGFyaWEtZXhwYW5kZWQ9e2VsZW1lbnQudGl0bGVBcmlhRXhwYW5kZWR9XG4gICAgICAgIHJvbGU9XCJjb2x1bW5oZWFkZXJcIlxuICAgICAgICBvbkNsaWNrPXtvbkNsaWNrfVxuICAgICAgICBvbktleVVwPXtvbktleVVwfVxuICAgICAgPlxuICAgICAgICB7dGl0bGVDb250ZW50fVxuICAgICAgPC9DdXN0b21UYWc+XG4gICAgKTtcbiAgfVxufVxuIiwiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBTdXJ2ZXlRdWVzdGlvbkVsZW1lbnRCYXNlIH0gZnJvbSBcIi4vcmVhY3RxdWVzdGlvbl9lbGVtZW50XCI7XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlDdXN0b21XaWRnZXQgZXh0ZW5kcyBTdXJ2ZXlRdWVzdGlvbkVsZW1lbnRCYXNlIHtcbiAgcHJpdmF0ZSB3aWRnZXRSZWY6IFJlYWN0LlJlZk9iamVjdDxIVE1MRGl2RWxlbWVudD47XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgdGhpcy53aWRnZXRSZWYgPSBSZWFjdC5jcmVhdGVSZWYoKTtcbiAgfVxuICBwcml2YXRlIF9hZnRlclJlbmRlcigpIHtcbiAgICBpZiAodGhpcy5xdWVzdGlvbkJhc2UuY3VzdG9tV2lkZ2V0KSB7XG4gICAgICBsZXQgZWwgPSB0aGlzLndpZGdldFJlZi5jdXJyZW50O1xuICAgICAgaWYgKCEhZWwpIHtcbiAgICAgICAgdGhpcy5xdWVzdGlvbkJhc2UuY3VzdG9tV2lkZ2V0LmFmdGVyUmVuZGVyKHRoaXMucXVlc3Rpb25CYXNlLCBlbCk7XG4gICAgICAgIHRoaXMucXVlc3Rpb25CYXNlLmN1c3RvbVdpZGdldERhdGEuaXNOZWVkUmVuZGVyID0gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIHN1cGVyLmNvbXBvbmVudERpZE1vdW50KCk7XG4gICAgaWYgKHRoaXMucXVlc3Rpb25CYXNlKSB7XG4gICAgICB0aGlzLl9hZnRlclJlbmRlcigpO1xuICAgIH1cbiAgfVxuICBjb21wb25lbnREaWRVcGRhdGUocHJldlByb3BzOiBhbnksIHByZXZTdGF0ZTogYW55KSB7XG4gICAgc3VwZXIuY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wcywgcHJldlN0YXRlKTtcbiAgICB2YXIgaXNEZWZhdWx0UmVuZGVyID1cbiAgICAgICEhdGhpcy5xdWVzdGlvbkJhc2UuY3VzdG9tV2lkZ2V0ICYmXG4gICAgICB0aGlzLnF1ZXN0aW9uQmFzZS5jdXN0b21XaWRnZXQuaXNEZWZhdWx0UmVuZGVyO1xuICAgIGlmICh0aGlzLnF1ZXN0aW9uQmFzZSAmJiAhaXNEZWZhdWx0UmVuZGVyKSB7XG4gICAgICB0aGlzLl9hZnRlclJlbmRlcigpO1xuICAgIH1cbiAgfVxuICBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICBzdXBlci5jb21wb25lbnRXaWxsVW5tb3VudCgpO1xuICAgIGlmICh0aGlzLnF1ZXN0aW9uQmFzZS5jdXN0b21XaWRnZXQpIHtcbiAgICAgIGxldCBlbCA9IHRoaXMud2lkZ2V0UmVmLmN1cnJlbnQ7XG4gICAgICBpZiAoISFlbCkge1xuICAgICAgICB0aGlzLnF1ZXN0aW9uQmFzZS5jdXN0b21XaWRnZXQud2lsbFVubW91bnQodGhpcy5xdWVzdGlvbkJhc2UsIGVsKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcHJvdGVjdGVkIGNhblJlbmRlcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gc3VwZXIuY2FuUmVuZGVyKCkgJiYgdGhpcy5xdWVzdGlvbkJhc2UudmlzaWJsZTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyRWxlbWVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgbGV0IGN1c3RvbVdpZGdldCA9IHRoaXMucXVlc3Rpb25CYXNlLmN1c3RvbVdpZGdldDtcblxuICAgIGlmIChjdXN0b21XaWRnZXQuaXNEZWZhdWx0UmVuZGVyKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8ZGl2IHJlZj17dGhpcy53aWRnZXRSZWZ9PlxuICAgICAgICAgIHt0aGlzLmNyZWF0b3IuY3JlYXRlUXVlc3Rpb25FbGVtZW50KHRoaXMucXVlc3Rpb25CYXNlKX1cbiAgICAgICAgPC9kaXY+XG4gICAgICApO1xuICAgIH1cblxuICAgIGxldCB3aWRnZXQgPSBudWxsO1xuICAgIGlmIChjdXN0b21XaWRnZXQud2lkZ2V0SnNvbi5yZW5kZXIpIHtcbiAgICAgIHdpZGdldCA9IGN1c3RvbVdpZGdldC53aWRnZXRKc29uLnJlbmRlcih0aGlzLnF1ZXN0aW9uQmFzZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChjdXN0b21XaWRnZXQuaHRtbFRlbXBsYXRlKSB7XG4gICAgICAgIGxldCBodG1sVmFsdWUgPSB7IF9faHRtbDogY3VzdG9tV2lkZ2V0Lmh0bWxUZW1wbGF0ZSB9O1xuICAgICAgICByZXR1cm4gPGRpdiByZWY9e3RoaXMud2lkZ2V0UmVmfSBkYW5nZXJvdXNseVNldElubmVySFRNTD17aHRtbFZhbHVlfSAvPjtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIDxkaXYgcmVmPXt0aGlzLndpZGdldFJlZn0+e3dpZGdldH08L2Rpdj47XG4gIH1cbn1cbiIsImltcG9ydCAqIGFzIFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgSGVscGVycywgUXVlc3Rpb24sIERyb3Bkb3duTGlzdE1vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBQb3B1cCB9IGZyb20gXCIuL2NvbXBvbmVudHMvcG9wdXAvcG9wdXBcIjtcbmltcG9ydCB7IFN2Z0ljb24gfSBmcm9tIFwiLi9jb21wb25lbnRzL3N2Zy1pY29uL3N2Zy1pY29uXCI7XG5pbXBvcnQgeyBSZWFjdEVsZW1lbnRGYWN0b3J5IH0gZnJvbSBcIi4vZWxlbWVudC1mYWN0b3J5XCI7XG5pbXBvcnQgeyBTdXJ2ZXlRdWVzdGlvbkNvbW1lbnRJdGVtIH0gZnJvbSBcIi4vcmVhY3RxdWVzdGlvbl9jb21tZW50XCI7XG5pbXBvcnQgeyBTdXJ2ZXlRdWVzdGlvblVuY29udHJvbGxlZEVsZW1lbnQgfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uX2VsZW1lbnRcIjtcblxuZXhwb3J0IGNsYXNzIFN1cnZleVF1ZXN0aW9uRHJvcGRvd25CYXNlPFQgZXh0ZW5kcyBRdWVzdGlvbj4gZXh0ZW5kcyBTdXJ2ZXlRdWVzdGlvblVuY29udHJvbGxlZEVsZW1lbnQ8VD4ge1xuICBpbnB1dEVsZW1lbnQ6IEhUTUxJbnB1dEVsZW1lbnQgfCBudWxsO1xuXG4gICBjbGljayA9IChldmVudDogYW55KSA9PiB7XG4gICAgIHRoaXMucXVlc3Rpb24uZHJvcGRvd25MaXN0TW9kZWw/Lm9uQ2xpY2soZXZlbnQpO1xuICAgfTtcbiAgIGNsZWFyID0gKGV2ZW50OiBhbnkpID0+IHtcbiAgICAgdGhpcy5xdWVzdGlvbi5kcm9wZG93bkxpc3RNb2RlbD8ub25DbGVhcihldmVudCk7XG4gICB9O1xuICAga2V5aGFuZGxlciA9IChldmVudDogYW55KSA9PiB7XG4gICAgIHRoaXMucXVlc3Rpb24uZHJvcGRvd25MaXN0TW9kZWw/LmtleUhhbmRsZXIoZXZlbnQpO1xuICAgfTtcbiAgIGJsdXIgPSAoZXZlbnQ6IGFueSkgPT4ge1xuICAgICB0aGlzLnF1ZXN0aW9uLmRyb3Bkb3duTGlzdE1vZGVsPy5vbkJsdXIoZXZlbnQpO1xuICAgICB0aGlzLnVwZGF0ZUlucHV0RG9tRWxlbWVudCgpO1xuICAgfTtcblxuICAgcHJvdGVjdGVkIHNldFZhbHVlQ29yZShuZXdWYWx1ZTogYW55KSB7XG4gICAgIHRoaXMucXVlc3Rpb25CYXNlLnJlbmRlcmVkVmFsdWUgPSBuZXdWYWx1ZTtcbiAgIH1cbiAgIHByb3RlY3RlZCBnZXRWYWx1ZUNvcmUoKTogYW55IHtcbiAgICAgcmV0dXJuIHRoaXMucXVlc3Rpb25CYXNlLnJlbmRlcmVkVmFsdWU7XG4gICB9XG4gICBwcm90ZWN0ZWQgcmVuZGVyU2VsZWN0KGNzc0NsYXNzZXM6IGFueSk6IEpTWC5FbGVtZW50IHtcbiAgICAgbGV0IHNlbGVjdEVsZW1lbnQ6IEpTWC5FbGVtZW50IHwgbnVsbCA9IG51bGw7XG4gICAgIGlmICh0aGlzLnF1ZXN0aW9uLmlzUmVhZE9ubHkpIHtcbiAgICAgICBjb25zdCB0ZXh0ID0gKHRoaXMucXVlc3Rpb24uc2VsZWN0ZWRJdGVtTG9jVGV4dCkgPyB0aGlzLnJlbmRlckxvY1N0cmluZyh0aGlzLnF1ZXN0aW9uLnNlbGVjdGVkSXRlbUxvY1RleHQpIDogXCJcIjtcbiAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1jb21tZW50XG4gICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgIHNlbGVjdEVsZW1lbnQgPSA8ZGl2IGlkPXt0aGlzLnF1ZXN0aW9uLmlucHV0SWR9IGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5nZXRDb250cm9sQ2xhc3MoKX0gZGlzYWJsZWQ+XG4gICAgICAgICB7dGV4dH1cbiAgICAgICAgIDxkaXY+e3RoaXMucXVlc3Rpb24ucmVhZE9ubHlUZXh0fTwvZGl2PlxuICAgICAgIDwvZGl2PjtcbiAgICAgfSBlbHNlIHtcbiAgICAgICBpZiAoISh0aGlzLnF1ZXN0aW9uIGFzIGFueSkuaGFzT3duUHJvcGVydHkoXCJkcm9wZG93bkxpc3RNb2RlbFwiKSkge1xuICAgICAgICAgKHRoaXMucXVlc3Rpb24gYXMgYW55KVtcImRyb3Bkb3duTGlzdE1vZGVsXCJdID0gbmV3IERyb3Bkb3duTGlzdE1vZGVsKHRoaXMucXVlc3Rpb24pO1xuICAgICAgIH1cbiAgICAgICBzZWxlY3RFbGVtZW50ID0gPD5cbiAgICAgICAgIHt0aGlzLnJlbmRlcklucHV0KHRoaXMucXVlc3Rpb25bXCJkcm9wZG93bkxpc3RNb2RlbFwiXSl9XG4gICAgICAgICA8UG9wdXAgbW9kZWw9e3RoaXMucXVlc3Rpb24/LmRyb3Bkb3duTGlzdE1vZGVsPy5wb3B1cE1vZGVsfT48L1BvcHVwPlxuICAgICAgIDwvPjtcbiAgICAgfVxuXG4gICAgIHJldHVybiAoXG4gICAgICAgPGRpdiBjbGFzc05hbWU9e2Nzc0NsYXNzZXMuc2VsZWN0V3JhcHBlcn0+XG4gICAgICAgICB7c2VsZWN0RWxlbWVudH1cbiAgICAgICA8L2Rpdj5cbiAgICAgKTtcbiAgIH1cblxuICAgcmVuZGVyVmFsdWVFbGVtZW50KGRyb3Bkb3duTGlzdE1vZGVsOiBEcm9wZG93bkxpc3RNb2RlbCk6IEpTWC5FbGVtZW50IHwgbnVsbCB7XG4gICAgIGlmKHRoaXMucXVlc3Rpb24uc2hvd0lucHV0RmllbGRDb21wb25lbnQpIHtcbiAgICAgICByZXR1cm4gUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5jcmVhdGVFbGVtZW50KHRoaXMucXVlc3Rpb24uaW5wdXRGaWVsZENvbXBvbmVudE5hbWUsIHsgaXRlbTogZHJvcGRvd25MaXN0TW9kZWwuZ2V0U2VsZWN0ZWRBY3Rpb24oKSwgcXVlc3Rpb246IHRoaXMucXVlc3Rpb24gfSk7XG4gICAgIH0gZWxzZSBpZih0aGlzLnF1ZXN0aW9uLnNob3dTZWxlY3RlZEl0ZW1Mb2NUZXh0KSB7XG4gICAgICAgcmV0dXJuIHRoaXMucmVuZGVyTG9jU3RyaW5nKHRoaXMucXVlc3Rpb24uc2VsZWN0ZWRJdGVtTG9jVGV4dCk7XG4gICAgIH1cbiAgICAgcmV0dXJuIG51bGw7XG4gICB9XG5cbiAgIHByb3RlY3RlZCByZW5kZXJJbnB1dChkcm9wZG93bkxpc3RNb2RlbDogRHJvcGRvd25MaXN0TW9kZWwpOiBKU1guRWxlbWVudCB7XG4gICAgIGxldCB2YWx1ZUVsZW1lbnQ6IEpTWC5FbGVtZW50IHwgbnVsbCA9IHRoaXMucmVuZGVyVmFsdWVFbGVtZW50KGRyb3Bkb3duTGlzdE1vZGVsKTtcblxuICAgICBjb25zdCBvbklucHV0Q2hhbmdlID0gKGU6IGFueSkgPT4ge1xuICAgICAgIGlmIChlLnRhcmdldCA9PT0gZG9jdW1lbnQuYWN0aXZlRWxlbWVudCkge1xuICAgICAgICAgZHJvcGRvd25MaXN0TW9kZWwuZmlsdGVyU3RyaW5nID0gZS50YXJnZXQudmFsdWU7XG4gICAgICAgfVxuICAgICB9O1xuICAgICByZXR1cm4gKDxkaXZcbiAgICAgICBpZD17dGhpcy5xdWVzdGlvbi5pbnB1dElkfVxuICAgICAgIGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5nZXRDb250cm9sQ2xhc3MoKX1cbiAgICAgICB0YWJJbmRleD17IGRyb3Bkb3duTGlzdE1vZGVsLmlucHV0UmVhZE9ubHkgPyB1bmRlZmluZWQgOiAwfVxuICAgICAgIG9uQ2xpY2s9e3RoaXMuY2xpY2t9XG4gICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtY29tbWVudFxuICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICBkaXNhYmxlZD17dGhpcy5xdWVzdGlvbi5pc0lucHV0UmVhZE9ubHl9XG4gICAgICAgcmVxdWlyZWQ9e3RoaXMucXVlc3Rpb24uaXNSZXF1aXJlZH1cbiAgICAgICBvbktleURvd249e3RoaXMua2V5aGFuZGxlcn1cbiAgICAgICBvbkJsdXI9e3RoaXMuYmx1cn1cbiAgICAgICByb2xlPXt0aGlzLnF1ZXN0aW9uLmFyaWFSb2xlfVxuICAgICAgIGFyaWEtcmVxdWlyZWQ9e3RoaXMucXVlc3Rpb24uYXJpYVJlcXVpcmVkfVxuICAgICAgIGFyaWEtbGFiZWw9e3RoaXMucXVlc3Rpb24uYXJpYUxhYmVsfVxuICAgICAgIGFyaWEtaW52YWxpZD17dGhpcy5xdWVzdGlvbi5hcmlhSW52YWxpZH1cbiAgICAgICBhcmlhLWRlc2NyaWJlZGJ5PXt0aGlzLnF1ZXN0aW9uLmFyaWFEZXNjcmliZWRCeX1cbiAgICAgPlxuICAgICAgIDxkaXYgY2xhc3NOYW1lPXt0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMuY29udHJvbFZhbHVlfT5cbiAgICAgICAgIHt2YWx1ZUVsZW1lbnR9XG4gICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBhdXRvQ29tcGxldGU9XCJvZmZcIlxuICAgICAgICAgICBpZD17IHRoaXMucXVlc3Rpb24uZ2V0SW5wdXRJZCgpIH1cbiAgICAgICAgICAgcmVmPXsoZWxlbWVudCkgPT4gKHRoaXMuaW5wdXRFbGVtZW50ID0gZWxlbWVudCl9XG4gICAgICAgICAgIGNsYXNzTmFtZT17IHRoaXMucXVlc3Rpb24uY3NzQ2xhc3Nlcy5maWx0ZXJTdHJpbmdJbnB1dCB9XG4gICAgICAgICAgIGFyaWEtbGFiZWw9e3RoaXMucXVlc3Rpb24ucGxhY2Vob2xkZXJ9XG4gICAgICAgICAgIHBsYWNlaG9sZGVyPSB7IHRoaXMucXVlc3Rpb24ucmVhZE9ubHlUZXh0IH1cbiAgICAgICAgICAgcmVhZE9ubHk9IHsgIWRyb3Bkb3duTGlzdE1vZGVsLnNlYXJjaEVuYWJsZWQgPyB0cnVlIDogdW5kZWZpbmVkIH1cbiAgICAgICAgICAgdGFiSW5kZXg9eyBkcm9wZG93bkxpc3RNb2RlbC5pbnB1dFJlYWRPbmx5ID8gdW5kZWZpbmVkIDogLTEgfVxuICAgICAgICAgICBkaXNhYmxlZD17dGhpcy5xdWVzdGlvbi5pc0lucHV0UmVhZE9ubHl9XG4gICAgICAgICAgIG9uQ2hhbmdlPXsoZSkgPT4geyBvbklucHV0Q2hhbmdlKGUpOyB9fVxuICAgICAgICAgICBvbkJsdXI9e3RoaXMuYmx1cn1cbiAgICAgICAgID48L2lucHV0PlxuICAgICAgIDwvZGl2PlxuICAgICAgIHt0aGlzLmNyZWF0ZUNsZWFyQnV0dG9uKCl9XG4gICAgIDwvZGl2Pik7XG4gICB9XG5cbiAgIGNyZWF0ZUNsZWFyQnV0dG9uKCk6IEpTWC5FbGVtZW50IHwgbnVsbCB7XG4gICAgIGlmICghdGhpcy5xdWVzdGlvbi5hbGxvd0NsZWFyIHx8ICF0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMuY2xlYW5CdXR0b25JY29uSWQpIHJldHVybiBudWxsO1xuXG4gICAgIGNvbnN0IHN0eWxlID0geyBkaXNwbGF5OiB0aGlzLnF1ZXN0aW9uLmlzRW1wdHkoKSA/IFwibm9uZVwiIDogXCJcIiB9O1xuICAgICByZXR1cm4gKFxuICAgICAgIDxkaXZcbiAgICAgICAgIGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLmNsZWFuQnV0dG9ufVxuICAgICAgICAgc3R5bGU9e3N0eWxlfVxuICAgICAgICAgb25DbGljaz17dGhpcy5jbGVhcn1cbiAgICAgICA+XG4gICAgICAgICA8U3ZnSWNvblxuICAgICAgICAgICBjbGFzc05hbWU9e3RoaXMucXVlc3Rpb24uY3NzQ2xhc3Nlcy5jbGVhbkJ1dHRvblN2Z31cbiAgICAgICAgICAgaWNvbk5hbWU9e3RoaXMucXVlc3Rpb24uY3NzQ2xhc3Nlcy5jbGVhbkJ1dHRvbkljb25JZH1cbiAgICAgICAgICAgdGl0bGU9e3RoaXMucXVlc3Rpb24uY2xlYXJDYXB0aW9ufVxuICAgICAgICAgICBzaXplPXtcImF1dG9cIn1cbiAgICAgICAgID48L1N2Z0ljb24+XG4gICAgICAgPC9kaXY+XG4gICAgICk7XG4gICB9XG5cbiAgIHByb3RlY3RlZCByZW5kZXJPdGhlcihjc3NDbGFzc2VzOiBhbnkpOiBKU1guRWxlbWVudCB7XG4gICAgIHJldHVybiAoXG4gICAgICAgPGRpdiBjbGFzc05hbWU9XCJmb3JtLWdyb3VwXCI+XG4gICAgICAgICA8U3VydmV5UXVlc3Rpb25Db21tZW50SXRlbVxuICAgICAgICAgICBxdWVzdGlvbj17dGhpcy5xdWVzdGlvbn1cbiAgICAgICAgICAgb3RoZXJDc3M9e2Nzc0NsYXNzZXMub3RoZXJ9XG4gICAgICAgICAgIGNzc0NsYXNzZXM9e2Nzc0NsYXNzZXN9XG4gICAgICAgICAgIGlzRGlzcGxheU1vZGU9e3RoaXMuaXNEaXNwbGF5TW9kZX1cbiAgICAgICAgIC8+XG4gICAgICAgPC9kaXY+XG4gICAgICk7XG4gICB9XG5cbiAgIGNvbXBvbmVudERpZFVwZGF0ZShwcmV2UHJvcHM6IGFueSwgcHJldlN0YXRlOiBhbnkpIHtcbiAgICAgc3VwZXIuY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wcywgcHJldlN0YXRlKTtcbiAgICAgdGhpcy51cGRhdGVJbnB1dERvbUVsZW1lbnQoKTtcbiAgIH1cbiAgIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgICBzdXBlci5jb21wb25lbnREaWRNb3VudCgpO1xuICAgICB0aGlzLnVwZGF0ZUlucHV0RG9tRWxlbWVudCgpO1xuICAgfVxuICAgdXBkYXRlSW5wdXREb21FbGVtZW50KCkge1xuICAgICBpZiAoISF0aGlzLmlucHV0RWxlbWVudCkge1xuICAgICAgIGNvbnN0IGNvbnRyb2w6IGFueSA9IHRoaXMuaW5wdXRFbGVtZW50O1xuICAgICAgIGNvbnN0IG5ld1ZhbHVlID0gdGhpcy5xdWVzdGlvbi5kcm9wZG93bkxpc3RNb2RlbC5maWx0ZXJTdHJpbmc7XG4gICAgICAgaWYgKCFIZWxwZXJzLmlzVHdvVmFsdWVFcXVhbHMobmV3VmFsdWUsIGNvbnRyb2wudmFsdWUpKSB7XG4gICAgICAgICBjb250cm9sLnZhbHVlID0gdGhpcy5xdWVzdGlvbi5kcm9wZG93bkxpc3RNb2RlbC5maWx0ZXJTdHJpbmc7XG4gICAgICAgfVxuICAgICB9XG4gICB9XG59IiwiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBSZWFjdFN1cnZleUVsZW1lbnQgfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uX2VsZW1lbnRcIjtcbmltcG9ydCB7IEJhc2UsIEl0ZW1WYWx1ZSB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuXG5leHBvcnQgY2xhc3MgU3VydmV5UXVlc3Rpb25PcHRpb25JdGVtIGV4dGVuZHMgUmVhY3RTdXJ2ZXlFbGVtZW50IHtcbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLnN0YXRlID0geyBjaGFuZ2VkOiAwIH07XG4gICAgdGhpcy5zZXR1cE1vZGVsKCk7XG4gIH1cbiAgY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wczogYW55LCBwcmV2U3RhdGU6IGFueSk6IHZvaWQge1xuICAgIHN1cGVyLmNvbXBvbmVudERpZFVwZGF0ZShwcmV2UHJvcHMsIHByZXZTdGF0ZSk7XG4gICAgdGhpcy5zZXR1cE1vZGVsKCk7XG4gIH1cbiAgY29tcG9uZW50V2lsbFVubW91bnQoKTogdm9pZCB7XG4gICAgc3VwZXIuY29tcG9uZW50V2lsbFVubW91bnQoKTtcbiAgICBpZiAoISF0aGlzLml0ZW0pIHtcbiAgICAgIHRoaXMuaXRlbS5sb2NUZXh0Lm9uQ2hhbmdlZCA9ICgpID0+IHsgfTtcbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSBzZXR1cE1vZGVsKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5pdGVtLmxvY1RleHQpIHJldHVybjtcbiAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICB0aGlzLml0ZW0ubG9jVGV4dC5vbkNoYW5nZWQgPSAoKSA9PiB7XG4gICAgICBzZWxmLnNldFN0YXRlKHsgY2hhbmdlZDogc2VsZi5zdGF0ZS5jaGFuZ2VkICsgMSB9KTtcbiAgICB9O1xuICB9XG4gIHByb3RlY3RlZCBnZXRTdGF0ZUVsZW1lbnQoKTogQmFzZSB7XG4gICAgcmV0dXJuIHRoaXMuaXRlbTtcbiAgfVxuICBwcml2YXRlIGdldCBpdGVtKCk6IEl0ZW1WYWx1ZSB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuaXRlbTtcbiAgfVxuICBwcm90ZWN0ZWQgY2FuUmVuZGVyKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIXRoaXMuaXRlbTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyRWxlbWVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxvcHRpb24gdmFsdWU9e3RoaXMuaXRlbS52YWx1ZX0gZGlzYWJsZWQ9eyF0aGlzLml0ZW0uaXNFbmFibGVkfT5cbiAgICAgICAge3RoaXMuaXRlbS50ZXh0fVxuICAgICAgPC9vcHRpb24+XG4gICAgKTtcbiAgfVxufSIsImltcG9ydCAqIGFzIFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgUmVuZGVyZXJGYWN0b3J5LCBJdGVtVmFsdWUgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFJlYWN0UXVlc3Rpb25GYWN0b3J5IH0gZnJvbSBcIi4vcmVhY3RxdWVzdGlvbl9mYWN0b3J5XCI7XG5pbXBvcnQgeyBTdXJ2ZXlRdWVzdGlvbkRyb3Bkb3duIH0gZnJvbSBcIi4vcmVhY3RxdWVzdGlvbl9kcm9wZG93blwiO1xuaW1wb3J0IHsgU3VydmV5UXVlc3Rpb25PcHRpb25JdGVtIH0gZnJvbSBcIi4vZHJvcGRvd24taXRlbVwiO1xuXG5leHBvcnQgY2xhc3MgU3VydmV5UXVlc3Rpb25Ecm9wZG93blNlbGVjdCBleHRlbmRzIFN1cnZleVF1ZXN0aW9uRHJvcGRvd24ge1xuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHJlbmRlclNlbGVjdChjc3NDbGFzc2VzOiBhbnkpOiBKU1guRWxlbWVudCB7XG4gICAgY29uc3QgY2xpY2sgPSAoZXZlbnQ6IGFueSkgPT4ge1xuICAgICAgdGhpcy5xdWVzdGlvbi5vbkNsaWNrKGV2ZW50KTtcbiAgICB9O1xuICAgIGNvbnN0IGtleXVwID0gKGV2ZW50OiBhbnkpID0+IHtcbiAgICAgIHRoaXMucXVlc3Rpb24ub25LZXlVcChldmVudCk7XG4gICAgfTtcblxuICAgIGNvbnN0IHNlbGVjdEVsZW1lbnQgPSB0aGlzLmlzRGlzcGxheU1vZGUgPyAoXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1jb21tZW50XG4gICAgICAvLyBAdHMtaWdub3JlXG4gICAgICA8ZGl2IGlkPXt0aGlzLnF1ZXN0aW9uLmlucHV0SWR9IGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5nZXRDb250cm9sQ2xhc3MoKX0gZGlzYWJsZWQ+e3RoaXMucXVlc3Rpb24ucmVhZE9ubHlUZXh0fTwvZGl2PikgOlxuICAgICAgKDxzZWxlY3RcbiAgICAgICAgaWQ9e3RoaXMucXVlc3Rpb24uaW5wdXRJZH1cbiAgICAgICAgY2xhc3NOYW1lPXt0aGlzLnF1ZXN0aW9uLmdldENvbnRyb2xDbGFzcygpfVxuICAgICAgICByZWY9eyhzZWxlY3QpID0+ICh0aGlzLnNldENvbnRyb2woc2VsZWN0KSl9XG4gICAgICAgIGF1dG9Db21wbGV0ZT17dGhpcy5xdWVzdGlvbi5hdXRvY29tcGxldGV9XG4gICAgICAgIG9uQ2hhbmdlPXt0aGlzLnVwZGF0ZVZhbHVlT25FdmVudH1cbiAgICAgICAgb25JbnB1dD17dGhpcy51cGRhdGVWYWx1ZU9uRXZlbnR9XG4gICAgICAgIG9uQ2xpY2s9e2NsaWNrfVxuICAgICAgICBvbktleVVwPXtrZXl1cH1cbiAgICAgICAgYXJpYS1yZXF1aXJlZD17dGhpcy5xdWVzdGlvbi5hcmlhUmVxdWlyZWR9XG4gICAgICAgIGFyaWEtbGFiZWw9e3RoaXMucXVlc3Rpb24uYXJpYUxhYmVsfVxuICAgICAgICBhcmlhLWludmFsaWQ9e3RoaXMucXVlc3Rpb24uYXJpYUludmFsaWR9XG4gICAgICAgIGFyaWEtZGVzY3JpYmVkYnk9e3RoaXMucXVlc3Rpb24uYXJpYURlc2NyaWJlZEJ5fVxuICAgICAgICByZXF1aXJlZD17dGhpcy5xdWVzdGlvbi5pc1JlcXVpcmVkfT5cbiAgICAgICAge3RoaXMucXVlc3Rpb24uYWxsb3dDbGVhciA/ICg8b3B0aW9uIHZhbHVlPVwiXCI+e3RoaXMucXVlc3Rpb24ucGxhY2Vob2xkZXJ9PC9vcHRpb24+KSA6IG51bGx9XG4gICAgICAgIHt0aGlzLnF1ZXN0aW9uLnZpc2libGVDaG9pY2VzLm1hcCgoaXRlbTogSXRlbVZhbHVlLCBpOiBudW1iZXIpID0+IDxTdXJ2ZXlRdWVzdGlvbk9wdGlvbkl0ZW0ga2V5PXtcIml0ZW1cIiArIGl9IGl0ZW09e2l0ZW19IC8+KX1cbiAgICAgIDwvc2VsZWN0Pik7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtjc3NDbGFzc2VzLnNlbGVjdFdyYXBwZXJ9PlxuICAgICAgICB7c2VsZWN0RWxlbWVudH1cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbn1cblxuUmVhY3RRdWVzdGlvbkZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJRdWVzdGlvbihcInN2LWRyb3Bkb3duLXNlbGVjdFwiLCAocHJvcHMpID0+IHtcbiAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3VydmV5UXVlc3Rpb25Ecm9wZG93blNlbGVjdCwgcHJvcHMpO1xufSk7XG5cblJlbmRlcmVyRmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlclJlbmRlcmVyKFwiZHJvcGRvd25cIiwgXCJzZWxlY3RcIiwgXCJzdi1kcm9wZG93bi1zZWxlY3RcIik7IiwiaW1wb3J0IHsgSGFzaFRhYmxlIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5cbmV4cG9ydCBjbGFzcyBSZWFjdEVsZW1lbnRGYWN0b3J5IHtcbiAgcHVibGljIHN0YXRpYyBJbnN0YW5jZTogUmVhY3RFbGVtZW50RmFjdG9yeSA9IG5ldyBSZWFjdEVsZW1lbnRGYWN0b3J5KCk7XG4gIHByaXZhdGUgY3JlYXRvckhhc2g6IEhhc2hUYWJsZTwobmFtZTogc3RyaW5nKSA9PiBKU1guRWxlbWVudD4gPSB7fTtcblxuICBwdWJsaWMgcmVnaXN0ZXJFbGVtZW50KFxuICAgIGVsZW1lbnRUeXBlOiBzdHJpbmcsXG4gICAgZWxlbWVudENyZWF0b3I6IChwcm9wczogYW55KSA9PiBKU1guRWxlbWVudFxuICApIHtcbiAgICB0aGlzLmNyZWF0b3JIYXNoW2VsZW1lbnRUeXBlXSA9IGVsZW1lbnRDcmVhdG9yO1xuICB9XG4gIHB1YmxpYyBnZXRBbGxUeXBlcygpOiBBcnJheTxzdHJpbmc+IHtcbiAgICB2YXIgcmVzdWx0ID0gbmV3IEFycmF5PHN0cmluZz4oKTtcbiAgICBmb3IgKHZhciBrZXkgaW4gdGhpcy5jcmVhdG9ySGFzaCkge1xuICAgICAgcmVzdWx0LnB1c2goa2V5KTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdC5zb3J0KCk7XG4gIH1cbiAgcHVibGljIGlzRWxlbWVudFJlZ2lzdGVyZWQoZWxlbWVudFR5cGU6IHN0cmluZykge1xuICAgIHJldHVybiAhIXRoaXMuY3JlYXRvckhhc2hbZWxlbWVudFR5cGVdO1xuICB9XG4gIHB1YmxpYyBjcmVhdGVFbGVtZW50KGVsZW1lbnRUeXBlOiBzdHJpbmcsIHBhcmFtczogYW55KTogSlNYLkVsZW1lbnQgfCBhbnkge1xuICAgIHZhciBjcmVhdG9yID0gdGhpcy5jcmVhdG9ySGFzaFtlbGVtZW50VHlwZV07XG4gICAgaWYgKGNyZWF0b3IgPT0gbnVsbCkgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIGNyZWF0b3IocGFyYW1zKTtcbiAgfVxufVxuIiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgUXVlc3Rpb24sIFBhbmVsTW9kZWwgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFRpdGxlRWxlbWVudCB9IGZyb20gXCIuL2NvbXBvbmVudHMvdGl0bGUvdGl0bGUtZWxlbWVudFwiO1xuaW1wb3J0IHsgU3VydmV5RWxlbWVudEJhc2UgfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uX2VsZW1lbnRcIjtcblxuZXhwb3J0IGNsYXNzIFN1cnZleUVsZW1lbnRIZWFkZXIgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQ8YW55LCBhbnk+IHtcbiAgcHJpdmF0ZSBnZXQgZWxlbWVudCgpOiBRdWVzdGlvbiB8IFBhbmVsTW9kZWwge1xuICAgIHJldHVybiB0aGlzLnByb3BzLmVsZW1lbnQ7XG4gIH1cbiAgcHVibGljIHJlbmRlcigpOiBKU1guRWxlbWVudCB7XG4gICAgY29uc3QgZWxlbWVudCA9IHRoaXMuZWxlbWVudDtcbiAgICBjb25zdCB0aXRsZSA9IGVsZW1lbnQuaGFzVGl0bGUgPyAoXG4gICAgICA8VGl0bGVFbGVtZW50IGVsZW1lbnQ9e2VsZW1lbnR9PjwvVGl0bGVFbGVtZW50PlxuICAgICkgOiBudWxsO1xuICAgIGNvbnN0IGRlc2NyaXB0aW9uID0gZWxlbWVudC5oYXNEZXNjcmlwdGlvblVuZGVyVGl0bGVcbiAgICAgID8gU3VydmV5RWxlbWVudEJhc2UucmVuZGVyUXVlc3Rpb25EZXNjcmlwdGlvbih0aGlzLmVsZW1lbnQpXG4gICAgICA6IG51bGw7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtlbGVtZW50LmNzc0hlYWRlcn0gb25DbGljaz17ZWxlbWVudC5jbGlja1RpdGxlRnVuY3Rpb259PlxuICAgICAgICB7dGl0bGV9XG4gICAgICAgIHtkZXNjcmlwdGlvbn1cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbn0iLCJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IEZsb3dQYW5lbE1vZGVsLCBRdWVzdGlvbiB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgUmVhY3RFbGVtZW50RmFjdG9yeSB9IGZyb20gXCIuL2VsZW1lbnQtZmFjdG9yeVwiO1xuaW1wb3J0IHsgU3VydmV5UGFuZWwgfSBmcm9tIFwiLi9wYW5lbFwiO1xuaW1wb3J0IHsgU3VydmV5UXVlc3Rpb24gfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uXCI7XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlGbG93UGFuZWwgZXh0ZW5kcyBTdXJ2ZXlQYW5lbCB7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gIH1cbiAgcHVibGljIGdldCBmbG93UGFuZWwoKTogRmxvd1BhbmVsTW9kZWwge1xuICAgIHJldHVybiB0aGlzLnBhbmVsIGFzIEZsb3dQYW5lbE1vZGVsO1xuICB9XG4gIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIHN1cGVyLmNvbXBvbmVudERpZE1vdW50KCk7XG4gICAgaWYgKCEhdGhpcy5mbG93UGFuZWwpIHtcbiAgICAgIHRoaXMuZmxvd1BhbmVsLm9uQ3VzdG9tSHRtbFByb2R1Y2luZyA9IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gXCJcIjtcbiAgICAgIH07XG4gICAgICB0aGlzLmZsb3dQYW5lbC5vbkdldEh0bWxGb3JRdWVzdGlvbiA9IHRoaXMucmVuZGVyUXVlc3Rpb247XG4gICAgfVxuICB9XG4gIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgIHN1cGVyLmNvbXBvbmVudFdpbGxVbm1vdW50KCk7XG4gICAgaWYgKCEhdGhpcy5mbG93UGFuZWwpIHtcbiAgICAgIHRoaXMuZmxvd1BhbmVsLm9uQ3VzdG9tSHRtbFByb2R1Y2luZyA9IG51bGwgYXMgYW55O1xuICAgICAgdGhpcy5mbG93UGFuZWwub25HZXRIdG1sRm9yUXVlc3Rpb24gPSBudWxsIGFzIGFueTtcbiAgICB9XG4gIH1cbiAgcHJvdGVjdGVkIGdldFF1ZXN0aW9uKG5hbWU6IHN0cmluZyk6IFF1ZXN0aW9uIHtcbiAgICByZXR1cm4gdGhpcy5mbG93UGFuZWwuZ2V0UXVlc3Rpb25CeU5hbWUobmFtZSk7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlclF1ZXN0aW9uKHF1ZXN0aW9uOiBRdWVzdGlvbik6IHN0cmluZyB7XG4gICAgcmV0dXJuIFwiPHF1ZXN0aW9uPlwiICsgcXVlc3Rpb24ubmFtZSArIFwiPC9xdWVzdGlvbj5cIjtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyUm93cygpOiBBcnJheTxKU1guRWxlbWVudD4ge1xuICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMucmVuZGVySHRtbCgpO1xuICAgIGlmKCEhcmVzdWx0KSB7XG4gICAgICByZXR1cm4gW3Jlc3VsdF07XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSByZW5kZXJlZEluZGV4OiBudW1iZXI7XG4gIHByaXZhdGUgZ2V0Tm9kZUluZGV4KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMucmVuZGVyZWRJbmRleCsrO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJIdG1sKCk6IEpTWC5FbGVtZW50IHwgbnVsbCB7XG4gICAgaWYgKCF0aGlzLmZsb3dQYW5lbCkgcmV0dXJuIG51bGw7XG4gICAgY29uc3QgaHRtbCA9IFwiPHNwYW4+XCIgKyB0aGlzLmZsb3dQYW5lbC5wcm9kdWNlSHRtbCgpICsgXCI8L3NwYW4+XCI7XG4gICAgaWYgKCFET01QYXJzZXIpIHtcbiAgICAgIGNvbnN0IGh0bWxWYWx1ZSA9IHsgX19odG1sOiBodG1sIH07XG4gICAgICByZXR1cm4gPGRpdiBkYW5nZXJvdXNseVNldElubmVySFRNTD17aHRtbFZhbHVlfSAvPjtcbiAgICB9XG4gICAgY29uc3QgZG9jID0gbmV3IERPTVBhcnNlcigpLnBhcnNlRnJvbVN0cmluZyhodG1sLCBcInRleHQveG1sXCIpO1xuICAgIHRoaXMucmVuZGVyZWRJbmRleCA9IDA7XG4gICAgcmV0dXJuIHRoaXMucmVuZGVyUGFyZW50Tm9kZShkb2MpO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJOb2Rlcyhkb21Ob2RlczogQXJyYXk8Tm9kZT4pOiBBcnJheTxKU1guRWxlbWVudD4ge1xuICAgIGNvbnN0IG5vZGVzOiBBcnJheTxKU1guRWxlbWVudD4gPSBbXTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGRvbU5vZGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBub2RlID0gdGhpcy5yZW5kZXJOb2RlKGRvbU5vZGVzW2ldKTtcbiAgICAgIGlmKCEhbm9kZSkge1xuICAgICAgICBub2Rlcy5wdXNoKG5vZGUpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbm9kZXM7XG4gIH1cbiAgcHJpdmF0ZSBnZXRTdHlsZShub2RlVHlwZTogc3RyaW5nKSB7XG4gICAgY29uc3Qgc3R5bGU6IGFueSA9IHt9O1xuICAgIGlmIChub2RlVHlwZS50b0xvd2VyQ2FzZSgpID09PSBcImJcIikge1xuICAgICAgc3R5bGUuZm9udFdlaWdodCA9IFwiYm9sZFwiO1xuICAgIH1cbiAgICBpZiAobm9kZVR5cGUudG9Mb3dlckNhc2UoKSA9PT0gXCJpXCIpIHtcbiAgICAgIHN0eWxlLmZvbnRTdHlsZSA9IFwiaXRhbGljXCI7XG4gICAgfVxuICAgIGlmIChub2RlVHlwZS50b0xvd2VyQ2FzZSgpID09PSBcInVcIikge1xuICAgICAgc3R5bGUudGV4dERlY29yYXRpb24gPSBcInVuZGVybGluZVwiO1xuICAgIH1cbiAgICByZXR1cm4gc3R5bGU7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlclBhcmVudE5vZGUobm9kZTogTm9kZSk6IEpTWC5FbGVtZW50IHtcbiAgICBjb25zdCBub2RlVHlwZSA9IG5vZGUubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtcbiAgICBjb25zdCBjaGlsZHJlbiA9IHRoaXMucmVuZGVyTm9kZXModGhpcy5nZXRDaGlsZERvbU5vZGVzKG5vZGUpKTtcbiAgICBpZiAobm9kZVR5cGUgPT09IFwiZGl2XCIpXG4gICAgICByZXR1cm4gPGRpdiBrZXk9e3RoaXMuZ2V0Tm9kZUluZGV4KCl9PntjaGlsZHJlbn08L2Rpdj47XG4gICAgcmV0dXJuIChcbiAgICAgIDxzcGFuIGtleT17dGhpcy5nZXROb2RlSW5kZXgoKX0gc3R5bGU9e3RoaXMuZ2V0U3R5bGUobm9kZVR5cGUpfT5cbiAgICAgICAge2NoaWxkcmVufVxuICAgICAgPC9zcGFuPlxuICAgICk7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlck5vZGUobm9kZTogTm9kZSk6IEpTWC5FbGVtZW50IHwgbnVsbCB7XG4gICAgaWYgKCF0aGlzLmhhc1RleHRDaGlsZE5vZGVzT25seShub2RlKSkge1xuICAgICAgcmV0dXJuIHRoaXMucmVuZGVyUGFyZW50Tm9kZShub2RlKTtcbiAgICB9XG4gICAgY29uc3Qgbm9kZVR5cGUgPSBub2RlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgaWYgKG5vZGVUeXBlID09PSBcInF1ZXN0aW9uXCIpIHtcbiAgICAgIGNvbnN0IHF1ZXN0aW9uID0gdGhpcy5mbG93UGFuZWwuZ2V0UXVlc3Rpb25CeU5hbWUobm9kZS50ZXh0Q29udGVudCBhcyBhbnkpO1xuICAgICAgaWYgKCFxdWVzdGlvbikgcmV0dXJuIG51bGw7XG4gICAgICBjb25zdCBxdWVzdGlvbkJvZHkgPSAoXG4gICAgICAgIDxTdXJ2ZXlRdWVzdGlvblxuICAgICAgICAgIGtleT17cXVlc3Rpb24ubmFtZX1cbiAgICAgICAgICBlbGVtZW50PXtxdWVzdGlvbn1cbiAgICAgICAgICBjcmVhdG9yPXt0aGlzLmNyZWF0b3J9XG4gICAgICAgICAgY3NzPXt0aGlzLmNzc31cbiAgICAgICAgLz5cbiAgICAgICk7XG4gICAgICByZXR1cm4gPHNwYW4ga2V5PXt0aGlzLmdldE5vZGVJbmRleCgpfT57cXVlc3Rpb25Cb2R5fTwvc3Bhbj47XG4gICAgfVxuICAgIGlmIChub2RlVHlwZSA9PT0gXCJkaXZcIikge1xuICAgICAgcmV0dXJuIDxkaXYga2V5PXt0aGlzLmdldE5vZGVJbmRleCgpfT57bm9kZS50ZXh0Q29udGVudH08L2Rpdj47XG4gICAgfVxuICAgIHJldHVybiAoXG4gICAgICA8c3BhbiBrZXk9e3RoaXMuZ2V0Tm9kZUluZGV4KCl9IHN0eWxlPXt0aGlzLmdldFN0eWxlKG5vZGVUeXBlKX0+XG4gICAgICAgIHtub2RlLnRleHRDb250ZW50fVxuICAgICAgPC9zcGFuPlxuICAgICk7XG4gIH1cbiAgcHJpdmF0ZSBnZXRDaGlsZERvbU5vZGVzKG5vZGU6IE5vZGUpOiBBcnJheTxOb2RlPiB7XG4gICAgY29uc3QgZG9tTm9kZXM6IEFycmF5PE5vZGU+ID0gW107XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBub2RlLmNoaWxkTm9kZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGRvbU5vZGVzLnB1c2gobm9kZS5jaGlsZE5vZGVzW2ldKTtcbiAgICB9XG4gICAgcmV0dXJuIGRvbU5vZGVzO1xuICB9XG4gIHByaXZhdGUgaGFzVGV4dENoaWxkTm9kZXNPbmx5KG5vZGU6IE5vZGUpOiBib29sZWFuIHtcbiAgICBjb25zdCBub2RlcyA9IG5vZGUuY2hpbGROb2RlcztcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5vZGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAobm9kZXNbaV0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKSAhPT0gXCIjdGV4dFwiKSByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJDb250ZW50KHN0eWxlOiBhbnksIHJvd3M6IEpTWC5FbGVtZW50W10pOiBKU1guRWxlbWVudCB7XG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJmLXBhbmVsXCIsIHsgc3R5bGU6IHN0eWxlIH0sIHJvd3MpO1xuICB9XG59XG5cblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFwiZmxvd3BhbmVsXCIsIHByb3BzID0+IHtcbiAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3VydmV5Rmxvd1BhbmVsLCBwcm9wcyk7XG59KTtcbiIsImltcG9ydCAqIGFzIFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgU3VydmV5UXVlc3Rpb25FbGVtZW50QmFzZSB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fZWxlbWVudFwiO1xuaW1wb3J0IHsgUXVlc3Rpb25JbWFnZU1vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBSZWFjdFF1ZXN0aW9uRmFjdG9yeSB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fZmFjdG9yeVwiO1xuXG5leHBvcnQgY2xhc3MgU3VydmV5UXVlc3Rpb25JbWFnZSBleHRlbmRzIFN1cnZleVF1ZXN0aW9uRWxlbWVudEJhc2Uge1xuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICB9XG4gIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIHN1cGVyLmNvbXBvbmVudERpZE1vdW50KCk7XG4gICAgdGhpcy5xdWVzdGlvbi5sb2NJbWFnZUxpbmsub25DaGFuZ2VkID0gKCkgPT4ge1xuICAgICAgdGhpcy5mb3JjZVVwZGF0ZSgpO1xuICAgIH07XG4gIH1cbiAgY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgc3VwZXIuY29tcG9uZW50V2lsbFVubW91bnQoKTtcbiAgICB0aGlzLnF1ZXN0aW9uLmxvY0ltYWdlTGluay5vbkNoYW5nZWQgPSAoKSA9PiB7IH07XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0IHF1ZXN0aW9uKCk6IFF1ZXN0aW9uSW1hZ2VNb2RlbCB7XG4gICAgcmV0dXJuIHRoaXMucXVlc3Rpb25CYXNlIGFzIFF1ZXN0aW9uSW1hZ2VNb2RlbDtcbiAgfVxuICBwcm90ZWN0ZWQgY2FuUmVuZGVyKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBzdXBlci5jYW5SZW5kZXIoKSAmJiAhIXRoaXMucXVlc3Rpb24uaW1hZ2VMaW5rO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICB2YXIgY3NzQ2xhc3NlcyA9IHRoaXMucXVlc3Rpb24uZ2V0SW1hZ2VDc3MoKTtcbiAgICB2YXIgc3R5bGU6IGFueSA9IHsgb2JqZWN0Rml0OiB0aGlzLnF1ZXN0aW9uLmltYWdlRml0IH07XG4gICAgdmFyIGNvbnRyb2w6IEpTWC5FbGVtZW50IHwgbnVsbCA9IG51bGw7XG4gICAgaWYgKHRoaXMucXVlc3Rpb24ucmVuZGVyZWRNb2RlID09PSBcImltYWdlXCIpIHtcbiAgICAgIGNvbnRyb2wgPSAoXG4gICAgICAgIDxpbWdcbiAgICAgICAgICBjbGFzc05hbWU9e2Nzc0NsYXNzZXN9XG4gICAgICAgICAgc3JjPXt0aGlzLnF1ZXN0aW9uLmxvY0ltYWdlTGluay5yZW5kZXJlZEh0bWx9XG4gICAgICAgICAgYWx0PXt0aGlzLnF1ZXN0aW9uLmFsdFRleHQgfHwgdGhpcy5xdWVzdGlvbi50aXRsZX1cbiAgICAgICAgICB3aWR0aD17dGhpcy5xdWVzdGlvbi5yZW5kZXJlZFdpZHRofVxuICAgICAgICAgIGhlaWdodD17dGhpcy5xdWVzdGlvbi5yZW5kZXJlZEhlaWdodH1cbiAgICAgICAgICAvL2FsdD17aXRlbS50ZXh0IHx8IGl0ZW0udmFsdWV9XG4gICAgICAgICAgc3R5bGU9e3N0eWxlfVxuICAgICAgICAvPlxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKHRoaXMucXVlc3Rpb24ucmVuZGVyZWRNb2RlID09PSBcInZpZGVvXCIpIHtcbiAgICAgIGNvbnRyb2wgPSAoXG4gICAgICAgIDx2aWRlbyBjb250cm9sc1xuICAgICAgICAgIGNsYXNzTmFtZT17Y3NzQ2xhc3Nlc31cbiAgICAgICAgICBzcmM9e3RoaXMucXVlc3Rpb24ubG9jSW1hZ2VMaW5rLnJlbmRlcmVkSHRtbH1cbiAgICAgICAgICB3aWR0aD17dGhpcy5xdWVzdGlvbi5yZW5kZXJlZFdpZHRofVxuICAgICAgICAgIGhlaWdodD17dGhpcy5xdWVzdGlvbi5yZW5kZXJlZEhlaWdodH1cbiAgICAgICAgICBzdHlsZT17c3R5bGV9XG4gICAgICAgID48L3ZpZGVvPlxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKHRoaXMucXVlc3Rpb24ucmVuZGVyZWRNb2RlID09PSBcInlvdXR1YmVcIikge1xuICAgICAgY29udHJvbCA9IChcbiAgICAgICAgPGlmcmFtZVxuICAgICAgICAgIGNsYXNzTmFtZT17Y3NzQ2xhc3Nlc31cbiAgICAgICAgICBzcmM9e3RoaXMucXVlc3Rpb24ubG9jSW1hZ2VMaW5rLnJlbmRlcmVkSHRtbH1cbiAgICAgICAgICB3aWR0aD17dGhpcy5xdWVzdGlvbi5yZW5kZXJlZFdpZHRofVxuICAgICAgICAgIGhlaWdodD17dGhpcy5xdWVzdGlvbi5yZW5kZXJlZEhlaWdodH1cbiAgICAgICAgICBzdHlsZT17c3R5bGV9XG4gICAgICAgID48L2lmcmFtZT5cbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiA8ZGl2IGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLnJvb3R9Pntjb250cm9sfTwvZGl2PjtcbiAgfVxufVxuXG5SZWFjdFF1ZXN0aW9uRmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlclF1ZXN0aW9uKFwiaW1hZ2VcIiwgKHByb3BzKSA9PiB7XG4gIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFN1cnZleVF1ZXN0aW9uSW1hZ2UsIHByb3BzKTtcbn0pO1xuIiwiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBSZWFjdFN1cnZleUVsZW1lbnQsIFN1cnZleUVsZW1lbnRCYXNlLCBTdXJ2ZXlRdWVzdGlvbkVsZW1lbnRCYXNlIH0gZnJvbSBcIi4vcmVhY3RxdWVzdGlvbl9lbGVtZW50XCI7XG5pbXBvcnQgeyBRdWVzdGlvbkltYWdlUGlja2VyTW9kZWwsIEltYWdlSXRlbVZhbHVlLCBTdXJ2ZXlNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgUmVhY3RRdWVzdGlvbkZhY3RvcnkgfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uX2ZhY3RvcnlcIjtcbmltcG9ydCB7IFJlYWN0U3VydmV5RWxlbWVudHNXcmFwcGVyIH0gZnJvbSBcIi4vcmVhY3RzdXJ2ZXltb2RlbFwiO1xuXG5leHBvcnQgY2xhc3MgU3VydmV5UXVlc3Rpb25JbWFnZVBpY2tlciBleHRlbmRzIFN1cnZleVF1ZXN0aW9uRWxlbWVudEJhc2Uge1xuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICB9XG4gIHByb3RlY3RlZCBnZXQgcXVlc3Rpb24oKTogUXVlc3Rpb25JbWFnZVBpY2tlck1vZGVsIHtcbiAgICByZXR1cm4gdGhpcy5xdWVzdGlvbkJhc2UgYXMgUXVlc3Rpb25JbWFnZVBpY2tlck1vZGVsO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICB2YXIgY3NzQ2xhc3NlcyA9IHRoaXMucXVlc3Rpb24uY3NzQ2xhc3NlcztcbiAgICByZXR1cm4gKFxuICAgICAgPGZpZWxkc2V0IGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5nZXRTZWxlY3RCYXNlUm9vdENzcygpfT5cbiAgICAgICAgPGxlZ2VuZFxuICAgICAgICAgIHJvbGU9XCJyYWRpb1wiXG4gICAgICAgICAgYXJpYS1sYWJlbD17dGhpcy5xdWVzdGlvbi5sb2NUaXRsZS5yZW5kZXJlZEh0bWx9IC8+XG4gICAgICAgIHt0aGlzLnF1ZXN0aW9uLmhhc0NvbHVtbnMgPyB0aGlzLmdldENvbHVtbnMoY3NzQ2xhc3NlcykgOiB0aGlzLmdldEl0ZW1zKGNzc0NsYXNzZXMpfVxuICAgICAgPC9maWVsZHNldD5cbiAgICApO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldENvbHVtbnMoY3NzQ2xhc3NlczogYW55KSB7XG4gICAgcmV0dXJuIHRoaXMucXVlc3Rpb24uY29sdW1ucy5tYXAoKGNvbHVtbjogYW55LCBjaTogbnVtYmVyKSA9PiB7XG4gICAgICB2YXIgaXRlbXMgPSBjb2x1bW4ubWFwKChpdGVtOiBhbnksIGlpOiBudW1iZXIpID0+XG4gICAgICAgIHRoaXMucmVuZGVySXRlbShcbiAgICAgICAgICBcIml0ZW1cIiArIGlpLFxuICAgICAgICAgIGl0ZW0sXG4gICAgICAgICAgY3NzQ2xhc3Nlc1xuICAgICAgICApXG4gICAgICApO1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPGRpdiBrZXk9e1wiY29sdW1uXCIgKyBjaX0gY2xhc3NOYW1lPXt0aGlzLnF1ZXN0aW9uLmdldENvbHVtbkNsYXNzKCl9IHJvbGU9XCJwcmVzZW50YXRpb25cIj5cbiAgICAgICAgICB7aXRlbXN9XG4gICAgICAgIDwvZGl2PlxuICAgICAgKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRJdGVtcyhjc3NDbGFzc2VzOiBhbnkpOiBBcnJheTxhbnk+IHtcbiAgICB2YXIgaXRlbXM6QXJyYXk8SlNYLkVsZW1lbnQ+ID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnF1ZXN0aW9uLnZpc2libGVDaG9pY2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgaXRlbSA9IHRoaXMucXVlc3Rpb24udmlzaWJsZUNob2ljZXNbaV07XG4gICAgICB2YXIga2V5ID0gXCJpdGVtXCIgKyBpO1xuICAgICAgaXRlbXMucHVzaCh0aGlzLnJlbmRlckl0ZW0oa2V5LCBpdGVtIGFzIEltYWdlSXRlbVZhbHVlLCBjc3NDbGFzc2VzKSk7XG4gICAgfVxuICAgIHJldHVybiBpdGVtcztcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IHRleHRTdHlsZSgpOiBhbnkge1xuICAgIHJldHVybiB7IG1hcmdpbkxlZnQ6IFwiM3B4XCIsIGRpc3BsYXk6IFwiaW5saW5lXCIsIHBvc2l0aW9uOiBcInN0YXRpY1wiIH07XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckl0ZW0oXG4gICAga2V5OiBzdHJpbmcsXG4gICAgaXRlbTogSW1hZ2VJdGVtVmFsdWUsXG4gICAgY3NzQ2xhc3NlczogYW55XG4gICk6IEpTWC5FbGVtZW50IHtcbiAgICBjb25zdCByZW5kZXJlZEl0ZW0gPSA8U3VydmV5UXVlc3Rpb25JbWFnZVBpY2tlckl0ZW0ga2V5PXtrZXl9IHF1ZXN0aW9uPXt0aGlzLnF1ZXN0aW9ufSBpdGVtPXtpdGVtfSBjc3NDbGFzc2VzPXtjc3NDbGFzc2VzfT48L1N1cnZleVF1ZXN0aW9uSW1hZ2VQaWNrZXJJdGVtPjtcbiAgICBjb25zdCBzdXJ2ZXkgPSB0aGlzLnF1ZXN0aW9uLnN1cnZleSBhcyBTdXJ2ZXlNb2RlbDtcbiAgICBsZXQgd3JhcHBlZEl0ZW06IEpTWC5FbGVtZW50IHwgbnVsbCA9IG51bGw7XG4gICAgaWYoISFzdXJ2ZXkpIHtcbiAgICAgIHdyYXBwZWRJdGVtID0gUmVhY3RTdXJ2ZXlFbGVtZW50c1dyYXBwZXIud3JhcEl0ZW1WYWx1ZShzdXJ2ZXksIHJlbmRlcmVkSXRlbSwgdGhpcy5xdWVzdGlvbiwgaXRlbSk7XG4gICAgfVxuICAgIHJldHVybiB3cmFwcGVkSXRlbSA/PyByZW5kZXJlZEl0ZW07XG4gIH1cbn1cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlRdWVzdGlvbkltYWdlUGlja2VySXRlbSBleHRlbmRzIFJlYWN0U3VydmV5RWxlbWVudCB7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgdGhpcy5oYW5kbGVPbkNoYW5nZSA9IHRoaXMuaGFuZGxlT25DaGFuZ2UuYmluZCh0aGlzKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0U3RhdGVFbGVtZW50KCkge1xuICAgIHJldHVybiB0aGlzLml0ZW07XG4gIH1cbiAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgc3VwZXIuY29tcG9uZW50RGlkTW91bnQoKTtcbiAgICB0aGlzLnJlYWN0T25TdHJDaGFuZ2VkKCk7XG4gIH1cbiAgY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgc3VwZXIuY29tcG9uZW50V2lsbFVubW91bnQoKTtcbiAgICB0aGlzLml0ZW0ubG9jSW1hZ2VMaW5rLm9uQ2hhbmdlZCA9IGZ1bmN0aW9uICgpIHt9O1xuICB9XG4gIGNvbXBvbmVudERpZFVwZGF0ZShwcmV2UHJvcHM6IGFueSwgcHJldlN0YXRlOiBhbnkpIHtcbiAgICBzdXBlci5jb21wb25lbnREaWRVcGRhdGUocHJldlByb3BzLCBwcmV2U3RhdGUpO1xuICAgIHRoaXMucmVhY3RPblN0ckNoYW5nZWQoKTtcbiAgfVxuICBwcml2YXRlIHJlYWN0T25TdHJDaGFuZ2VkKCkge1xuICAgIHRoaXMuaXRlbS5sb2NJbWFnZUxpbmsub25DaGFuZ2VkID0gKCkgPT4ge1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7IGxvY0ltYWdlTGlua2NoYW5nZWQ6ICEhdGhpcy5zdGF0ZSAmJiB0aGlzLnN0YXRlLmxvY0ltYWdlTGluayA/IHRoaXMuc3RhdGUubG9jSW1hZ2VMaW5rICsgMSA6IDEgfSk7XG4gICAgfTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IGNzc0NsYXNzZXMoKSB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuY3NzQ2xhc3NlcztcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXQgaXRlbSgpIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5pdGVtO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldCBxdWVzdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5xdWVzdGlvbjtcbiAgfVxuXG4gIGhhbmRsZU9uQ2hhbmdlKGV2ZW50OiBhbnkpIHtcbiAgICBpZiAodGhpcy5xdWVzdGlvbi5tdWx0aVNlbGVjdCkge1xuICAgICAgaWYgKGV2ZW50LnRhcmdldC5jaGVja2VkKSB7XG4gICAgICAgIHRoaXMucXVlc3Rpb24udmFsdWUgPSB0aGlzLnF1ZXN0aW9uLnZhbHVlLmNvbmNhdChldmVudC50YXJnZXQudmFsdWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIGN1cnJWYWx1ZSA9IHRoaXMucXVlc3Rpb24udmFsdWU7XG4gICAgICAgIGN1cnJWYWx1ZS5zcGxpY2UodGhpcy5xdWVzdGlvbi52YWx1ZS5pbmRleE9mKGV2ZW50LnRhcmdldC52YWx1ZSksIDEpO1xuICAgICAgICB0aGlzLnF1ZXN0aW9uLnZhbHVlID0gY3VyclZhbHVlO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnF1ZXN0aW9uLnZhbHVlID0gZXZlbnQudGFyZ2V0LnZhbHVlO1xuICAgIH1cbiAgICB0aGlzLnNldFN0YXRlKHsgdmFsdWU6IHRoaXMucXVlc3Rpb24udmFsdWUgfSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgcmVuZGVyRWxlbWVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgY29uc3QgaXRlbSA9IHRoaXMuaXRlbTtcbiAgICBjb25zdCBxdWVzdGlvbiA9IHRoaXMucXVlc3Rpb247XG4gICAgY29uc3QgY3NzQ2xhc3NlcyA9IHRoaXMuY3NzQ2xhc3NlcztcbiAgICB2YXIgaXNDaGVja2VkID0gcXVlc3Rpb24uaXNJdGVtU2VsZWN0ZWQoaXRlbSk7XG4gICAgdmFyIGl0ZW1DbGFzcyA9IHF1ZXN0aW9uLmdldEl0ZW1DbGFzcyhpdGVtKTtcbiAgICB2YXIgdGV4dDogSlNYLkVsZW1lbnQgfCBudWxsID0gbnVsbDtcbiAgICBpZiAocXVlc3Rpb24uc2hvd0xhYmVsKSB7XG4gICAgICB0ZXh0ID0gKFxuICAgICAgICA8c3BhblxuICAgICAgICAgIGNsYXNzTmFtZT17cXVlc3Rpb24uY3NzQ2xhc3Nlcy5pdGVtVGV4dH1cbiAgICAgICAgPlxuICAgICAgICAgIHtpdGVtLnRleHQgPyBTdXJ2ZXlFbGVtZW50QmFzZS5yZW5kZXJMb2NTdHJpbmcoaXRlbS5sb2NUZXh0KSA6IGl0ZW0udmFsdWV9XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICk7XG4gICAgfVxuXG4gICAgdmFyIHN0eWxlOiBhbnkgPSB7IG9iamVjdEZpdDogdGhpcy5xdWVzdGlvbi5pbWFnZUZpdCB9O1xuXG4gICAgdmFyIGNvbnRyb2w6IEpTWC5FbGVtZW50IHwgbnVsbCA9IG51bGw7XG4gICAgaWYgKGl0ZW0ubG9jSW1hZ2VMaW5rLnJlbmRlcmVkSHRtbCAmJiB0aGlzLnF1ZXN0aW9uLmNvbnRlbnRNb2RlID09PSBcImltYWdlXCIpIHtcbiAgICAgIGNvbnRyb2wgPSAoXG4gICAgICAgIDxpbWdcbiAgICAgICAgICBjbGFzc05hbWU9e2Nzc0NsYXNzZXMuaW1hZ2V9XG4gICAgICAgICAgc3JjPXtpdGVtLmxvY0ltYWdlTGluay5yZW5kZXJlZEh0bWx9XG4gICAgICAgICAgd2lkdGg9eyB0aGlzLnF1ZXN0aW9uLnJlbmRlcmVkSW1hZ2VXaWR0aCB9XG4gICAgICAgICAgaGVpZ2h0PXsgdGhpcy5xdWVzdGlvbi5yZW5kZXJlZEltYWdlSGVpZ2h0IH1cbiAgICAgICAgICBhbHQ9e2l0ZW0ubG9jVGV4dC5yZW5kZXJlZEh0bWx9XG4gICAgICAgICAgc3R5bGU9e3N0eWxlfVxuICAgICAgICAgIG9uTG9hZD17KGV2ZW50OiBhbnkpID0+IHsgdGhpcy5xdWVzdGlvbltcIm9uQ29udGVudExvYWRlZFwiXShpdGVtLCBldmVudC5uYXRpdmVFdmVudCk7IH19XG4gICAgICAgIC8+XG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoaXRlbS5sb2NJbWFnZUxpbmsucmVuZGVyZWRIdG1sICYmIHRoaXMucXVlc3Rpb24uY29udGVudE1vZGUgPT09IFwidmlkZW9cIikge1xuICAgICAgY29udHJvbCA9IChcbiAgICAgICAgPHZpZGVvIGNvbnRyb2xzXG4gICAgICAgICAgY2xhc3NOYW1lPXtjc3NDbGFzc2VzLmltYWdlfVxuICAgICAgICAgIHNyYz17aXRlbS5sb2NJbWFnZUxpbmsucmVuZGVyZWRIdG1sfVxuICAgICAgICAgIHdpZHRoPXsgdGhpcy5xdWVzdGlvbi5yZW5kZXJlZEltYWdlV2lkdGggfVxuICAgICAgICAgIGhlaWdodD17IHRoaXMucXVlc3Rpb24ucmVuZGVyZWRJbWFnZUhlaWdodCB9XG4gICAgICAgICAgc3R5bGU9e3N0eWxlfVxuICAgICAgICAgIG9uTG9hZGVkTWV0YWRhdGE9eyhldmVudDogYW55KSA9PiB7IHRoaXMucXVlc3Rpb25bXCJvbkNvbnRlbnRMb2FkZWRcIl0oaXRlbSwgZXZlbnQubmF0aXZlRXZlbnQpOyB9fVxuICAgICAgICA+PC92aWRlbz5cbiAgICAgICk7XG4gICAgfVxuICAgIGlmICghaXRlbS5sb2NJbWFnZUxpbmsucmVuZGVyZWRIdG1sKSB7XG4gICAgICBsZXQgc3R5bGU6IGFueSA9IHtcbiAgICAgICAgd2lkdGg6IHRoaXMucXVlc3Rpb24ucmVuZGVyZWRJbWFnZVdpZHRoLFxuICAgICAgICBoZWlnaHQ6IHRoaXMucXVlc3Rpb24ucmVuZGVyZWRJbWFnZUhlaWdodCxcbiAgICAgICAgb2JqZWN0Rml0OiB0aGlzLnF1ZXN0aW9uLmltYWdlRml0XG4gICAgICB9O1xuICAgICAgY29udHJvbCA9IChcbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzTmFtZT17Y3NzQ2xhc3Nlcy5pdGVtTm9JbWFnZX1cbiAgICAgICAgICBzdHlsZT17c3R5bGV9XG4gICAgICAgID5cbiAgICAgICAgICB7XG4gICAgICAgICAgICBjc3NDbGFzc2VzLml0ZW1Ob0ltYWdlU3ZnSWNvbiA/XG4gICAgICAgICAgICAgIDxzdmcgY2xhc3NOYW1lPXtjc3NDbGFzc2VzLml0ZW1Ob0ltYWdlU3ZnSWNvbn0+XG4gICAgICAgICAgICAgICAgPHVzZSB4bGlua0hyZWY9e2Nzc0NsYXNzZXMuaXRlbU5vSW1hZ2VTdmdJY29uSWR9PjwvdXNlPlxuICAgICAgICAgICAgICA8L3N2Zz46XG4gICAgICAgICAgICAgIG51bGxcbiAgICAgICAgICB9XG4gICAgICAgIDwvZGl2PlxuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCByZW5kZXJlZEl0ZW0gPSAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT17aXRlbUNsYXNzfT5cbiAgICAgICAgPGxhYmVsIGNsYXNzTmFtZT17Y3NzQ2xhc3Nlcy5sYWJlbH0+XG4gICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICBjbGFzc05hbWU9e2Nzc0NsYXNzZXMuaXRlbUNvbnRyb2x9XG4gICAgICAgICAgICBpZD17dGhpcy5xdWVzdGlvbi5nZXRJdGVtSWQoaXRlbSl9XG4gICAgICAgICAgICB0eXBlPXt0aGlzLnF1ZXN0aW9uLmlucHV0VHlwZX1cbiAgICAgICAgICAgIG5hbWU9e3RoaXMucXVlc3Rpb24ucXVlc3Rpb25OYW1lfVxuICAgICAgICAgICAgY2hlY2tlZD17aXNDaGVja2VkfVxuICAgICAgICAgICAgdmFsdWU9e2l0ZW0udmFsdWV9XG4gICAgICAgICAgICBkaXNhYmxlZD17IXRoaXMucXVlc3Rpb24uZ2V0SXRlbUVuYWJsZWQoaXRlbSl9XG4gICAgICAgICAgICBvbkNoYW5nZT17dGhpcy5oYW5kbGVPbkNoYW5nZX1cbiAgICAgICAgICAgIGFyaWEtcmVxdWlyZWQ9e3RoaXMucXVlc3Rpb24uYXJpYVJlcXVpcmVkfVxuICAgICAgICAgICAgYXJpYS1sYWJlbD17dGhpcy5xdWVzdGlvbi5hcmlhTGFiZWx9XG4gICAgICAgICAgICBhcmlhLWludmFsaWQ9e3RoaXMucXVlc3Rpb24uYXJpYUludmFsaWR9XG4gICAgICAgICAgICBhcmlhLWRlc2NyaWJlZGJ5PXt0aGlzLnF1ZXN0aW9uLmFyaWFEZXNjcmliZWRCeX1cbiAgICAgICAgICAvPlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXt0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMuaXRlbURlY29yYXRvcn0+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLmltYWdlQ29udGFpbmVyfT5cbiAgICAgICAgICAgICAge2NvbnRyb2x9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIHt0ZXh0fVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2xhYmVsPlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgICByZXR1cm4gcmVuZGVyZWRJdGVtO1xuICB9XG59XG5cblJlYWN0UXVlc3Rpb25GYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyUXVlc3Rpb24oXCJpbWFnZXBpY2tlclwiLCAocHJvcHMpID0+IHtcbiAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3VydmV5UXVlc3Rpb25JbWFnZVBpY2tlciwgcHJvcHMpO1xufSk7XG4iLCJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFBhZ2VNb2RlbCwgUGFuZWxNb2RlbEJhc2UgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFN1cnZleUVsZW1lbnRCYXNlIH0gZnJvbSBcIi4vcmVhY3RxdWVzdGlvbl9lbGVtZW50XCI7XG5pbXBvcnQgeyBTdXJ2ZXlQYW5lbEJhc2UgfSBmcm9tIFwiLi9wYW5lbC1iYXNlXCI7XG5pbXBvcnQgeyBUaXRsZUVsZW1lbnQgfSBmcm9tIFwiLi9jb21wb25lbnRzL3RpdGxlL3RpdGxlLWVsZW1lbnRcIjtcblxuZXhwb3J0IGNsYXNzIFN1cnZleVBhZ2UgZXh0ZW5kcyBTdXJ2ZXlQYW5lbEJhc2Uge1xuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICB9XG4gIHByb3RlY3RlZCBnZXRQYW5lbEJhc2UoKTogUGFuZWxNb2RlbEJhc2Uge1xuICAgIHJldHVybiB0aGlzLnByb3BzLnBhZ2U7XG4gIH1cbiAgcHVibGljIGdldCBwYWdlKCk6IFBhZ2VNb2RlbCB7XG4gICAgcmV0dXJuIHRoaXMucGFuZWxCYXNlIGFzIFBhZ2VNb2RlbDtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyRWxlbWVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgdmFyIHRpdGxlID0gdGhpcy5yZW5kZXJUaXRsZSgpO1xuICAgIHZhciBkZXNjcmlwdGlvbiA9IHRoaXMucmVuZGVyRGVzY3JpcHRpb24oKTtcbiAgICB2YXIgcm93cyA9IHRoaXMucmVuZGVyUm93cyh0aGlzLnBhbmVsQmFzZS5jc3NDbGFzc2VzKTtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiByZWY9e3RoaXMucm9vdFJlZn0gY2xhc3NOYW1lPXt0aGlzLnBhZ2UuY3NzUm9vdH0+XG4gICAgICAgIHt0aXRsZX1cbiAgICAgICAge2Rlc2NyaXB0aW9ufVxuICAgICAgICB7cm93c31cbiAgICAgIDwvZGl2ID5cbiAgICApO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJUaXRsZSgpOiBKU1guRWxlbWVudCB7XG4gICAgcmV0dXJuIDxUaXRsZUVsZW1lbnQgZWxlbWVudD17dGhpcy5wYWdlfT48L1RpdGxlRWxlbWVudD47XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckRlc2NyaXB0aW9uKCk6IEpTWC5FbGVtZW50IHwgbnVsbCB7XG4gICAgaWYgKCF0aGlzLnBhZ2UuX3Nob3dEZXNjcmlwdGlvbikgcmV0dXJuIG51bGw7XG4gICAgdmFyIHRleHQgPSBTdXJ2ZXlFbGVtZW50QmFzZS5yZW5kZXJMb2NTdHJpbmcodGhpcy5wYWdlLmxvY0Rlc2NyaXB0aW9uKTtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9e3RoaXMucGFuZWxCYXNlLmNzc0NsYXNzZXMucGFnZS5kZXNjcmlwdGlvbn0+e3RleHR9PC9kaXY+XG4gICAgKTtcbiAgfVxufVxuIiwiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBJU3VydmV5Q3JlYXRvciB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25cIjtcbmltcG9ydCB7IEJhc2UsIFN1cnZleU1vZGVsLCBRdWVzdGlvblJvd01vZGVsLCBQYW5lbE1vZGVsLCBQYW5lbE1vZGVsQmFzZSB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgU3VydmV5RWxlbWVudEJhc2UgfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uX2VsZW1lbnRcIjtcbmltcG9ydCB7IFN1cnZleVJvdyB9IGZyb20gXCIuL3Jvd1wiO1xuXG5leHBvcnQgY2xhc3MgU3VydmV5UGFuZWxCYXNlIGV4dGVuZHMgU3VydmV5RWxlbWVudEJhc2U8YW55LCBhbnk+IHtcbiAgcHJvdGVjdGVkIHJvb3RSZWY6IFJlYWN0LlJlZk9iamVjdDxIVE1MRGl2RWxlbWVudD47XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgdGhpcy5yb290UmVmID0gUmVhY3QuY3JlYXRlUmVmKCk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldFN0YXRlRWxlbWVudCgpOiBCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5wYW5lbEJhc2U7XG4gIH1cbiAgcHJvdGVjdGVkIGNhblVzZVByb3BJblN0YXRlKGtleTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGtleSAhPT0gXCJlbGVtZW50c1wiICYmIHN1cGVyLmNhblVzZVByb3BJblN0YXRlKGtleSk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldCBzdXJ2ZXkoKTogU3VydmV5TW9kZWwgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5nZXRTdXJ2ZXkoKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IGNyZWF0b3IoKTogSVN1cnZleUNyZWF0b3Ige1xuICAgIHJldHVybiB0aGlzLnByb3BzLmNyZWF0b3I7XG4gIH1cbiAgcHJvdGVjdGVkIGdldCBjc3MoKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5nZXRDc3MoKTtcbiAgfVxuICBwdWJsaWMgZ2V0IHBhbmVsQmFzZSgpOiBQYW5lbE1vZGVsQmFzZSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UGFuZWxCYXNlKCk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldFBhbmVsQmFzZSgpOiBQYW5lbE1vZGVsQmFzZSB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuZWxlbWVudCB8fCB0aGlzLnByb3BzLnF1ZXN0aW9uO1xuICB9XG4gIHByb3RlY3RlZCBnZXRTdXJ2ZXkoKTogU3VydmV5TW9kZWwgfCBudWxsIHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5wcm9wcy5zdXJ2ZXkgfHwgKCEhdGhpcy5wYW5lbEJhc2UgPyB0aGlzLnBhbmVsQmFzZS5zdXJ2ZXkgOiBudWxsKVxuICAgICk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldENzcygpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLnByb3BzLmNzcztcbiAgfVxuICBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICBzdXBlci5jb21wb25lbnREaWRNb3VudCgpO1xuICAgIHRoaXMuZG9BZnRlclJlbmRlcigpO1xuICB9XG4gIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgIHN1cGVyLmNvbXBvbmVudFdpbGxVbm1vdW50KCk7XG4gICAgdmFyIGVsID0gdGhpcy5yb290UmVmLmN1cnJlbnQ7XG4gICAgaWYgKCEhZWwpIHtcbiAgICAgIGVsLnJlbW92ZUF0dHJpYnV0ZShcImRhdGEtcmVuZGVyZWRcIik7XG4gICAgfVxuICB9XG4gIGNvbXBvbmVudERpZFVwZGF0ZShwcmV2UHJvcHM6IGFueSwgcHJldlN0YXRlOiBhbnkpIHtcbiAgICBzdXBlci5jb21wb25lbnREaWRVcGRhdGUocHJldlByb3BzLCBwcmV2U3RhdGUpO1xuICAgIGlmIChcbiAgICAgICEhcHJldlByb3BzLnBhZ2UgJiZcbiAgICAgICEhdGhpcy5zdXJ2ZXkgJiZcbiAgICAgICEhdGhpcy5zdXJ2ZXkuY3VycmVudFBhZ2UgJiZcbiAgICAgIHByZXZQcm9wcy5wYWdlLm5hbWUgPT09IHRoaXMuc3VydmV5LmN1cnJlbnRQYWdlLm5hbWVcbiAgICApXG4gICAgICByZXR1cm47XG4gICAgdGhpcy5kb0FmdGVyUmVuZGVyKCk7XG4gIH1cbiAgcHJpdmF0ZSBkb0FmdGVyUmVuZGVyKCkge1xuICAgIHZhciBlbCA9IHRoaXMucm9vdFJlZi5jdXJyZW50O1xuICAgIGlmIChlbCAmJiB0aGlzLnN1cnZleSkge1xuICAgICAgaWYgKHRoaXMucGFuZWxCYXNlLmlzUGFuZWwpIHtcbiAgICAgICAgdGhpcy5zdXJ2ZXkuYWZ0ZXJSZW5kZXJQYW5lbCh0aGlzLnBhbmVsQmFzZSBhcyBQYW5lbE1vZGVsLCBlbCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnN1cnZleS5hZnRlclJlbmRlclBhZ2UoZWwpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBwcm90ZWN0ZWQgY2FuUmVuZGVyKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoXG4gICAgICBzdXBlci5jYW5SZW5kZXIoKSAmJiAhIXRoaXMuc3VydmV5ICYmICEhdGhpcy5wYW5lbEJhc2VcbiAgICAgICYmIHRoaXMucGFuZWxCYXNlLmlzVmlzaWJsZSAmJiAhIXRoaXMucGFuZWxCYXNlLnN1cnZleVxuICAgICk7XG4gIH1cbiAgcHJpdmF0ZSByZW5kZXJlZFJvd3NDYWNoZTogYW55ID0ge307XG4gIHByb3RlY3RlZCByZW5kZXJSb3dzKGNzczogYW55KTogQXJyYXk8SlNYLkVsZW1lbnQ+IHtcbiAgICBpZiAodGhpcy5jaGFuZ2VkU3RhdGVQcm9wTmFtZSAhPT0gXCJyb3dzXCIpIHtcbiAgICAgIHRoaXMucmVuZGVyZWRSb3dzQ2FjaGUgPSB7fTtcbiAgICB9XG4gICAgdmFyIHJvd3M6QXJyYXk8SlNYLkVsZW1lbnQ+ID0gW107XG4gICAgdmFyIHF1ZXN0aW9uUm93cyA9IHRoaXMucGFuZWxCYXNlLnJvd3M7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBxdWVzdGlvblJvd3MubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciByb3cgPSB0aGlzLnJlbmRlcmVkUm93c0NhY2hlW3F1ZXN0aW9uUm93c1tpXS5pZF07XG4gICAgICBpZiAoIXJvdykge1xuICAgICAgICByb3cgPSB0aGlzLmNyZWF0ZVJvdyhxdWVzdGlvblJvd3NbaV0sIGNzcyk7XG4gICAgICAgIHRoaXMucmVuZGVyZWRSb3dzQ2FjaGVbcXVlc3Rpb25Sb3dzW2ldLmlkXSA9IHJvdztcbiAgICAgIH1cbiAgICAgIHJvd3MucHVzaChyb3cpO1xuICAgIH1cbiAgICByZXR1cm4gcm93cztcbiAgfVxuICBwcm90ZWN0ZWQgY3JlYXRlUm93KHJvdzogUXVlc3Rpb25Sb3dNb2RlbCwgY3NzOiBhbnkpOiBKU1guRWxlbWVudCB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxTdXJ2ZXlSb3dcbiAgICAgICAga2V5PXtyb3cuaWR9XG4gICAgICAgIHJvdz17cm93fVxuICAgICAgICBzdXJ2ZXk9e3RoaXMuc3VydmV5fVxuICAgICAgICBjcmVhdG9yPXt0aGlzLmNyZWF0b3J9XG4gICAgICAgIGNzcz17Y3NzfVxuICAgICAgLz5cbiAgICApO1xuICB9XG59XG4iLCJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFN1cnZleUVsZW1lbnRFcnJvcnMgfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uXCI7XG5pbXBvcnQgeyBTdXJ2ZXlFbGVtZW50QmFzZSB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fZWxlbWVudFwiO1xuaW1wb3J0IHsgUmVhY3RFbGVtZW50RmFjdG9yeSB9IGZyb20gXCIuL2VsZW1lbnQtZmFjdG9yeVwiO1xuXG5pbXBvcnQgeyBTdXJ2ZXlQYW5lbEJhc2UgfSBmcm9tIFwiLi9wYW5lbC1iYXNlXCI7XG5pbXBvcnQgeyBQYW5lbE1vZGVsLCBkb0tleTJDbGlja1VwLCBTdXJ2ZXlNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgUmVhY3RTdXJ2ZXlFbGVtZW50c1dyYXBwZXIgfSBmcm9tIFwiLi9yZWFjdHN1cnZleW1vZGVsXCI7XG5pbXBvcnQgeyBTdXJ2ZXlBY3Rpb25CYXIgfSBmcm9tIFwiLi9jb21wb25lbnRzL2FjdGlvbi1iYXIvYWN0aW9uLWJhclwiO1xuaW1wb3J0IHsgVGl0bGVFbGVtZW50IH0gZnJvbSBcIi4vY29tcG9uZW50cy90aXRsZS90aXRsZS1lbGVtZW50XCI7XG5pbXBvcnQgeyBTdXJ2ZXlFbGVtZW50SGVhZGVyIH0gZnJvbSBcIi4vZWxlbWVudC1oZWFkZXJcIjtcblxuZXhwb3J0IGNsYXNzIFN1cnZleVBhbmVsIGV4dGVuZHMgU3VydmV5UGFuZWxCYXNlIHtcbiAgcHJpdmF0ZSBoYXNCZWVuRXhwYW5kZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgfVxuICBwdWJsaWMgZ2V0IHBhbmVsKCk6IFBhbmVsTW9kZWwge1xuICAgIHJldHVybiB0aGlzLnBhbmVsQmFzZSBhcyBQYW5lbE1vZGVsO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICBjb25zdCBoZWFkZXIgPSB0aGlzLnJlbmRlckhlYWRlcigpO1xuICAgIGNvbnN0IGVycm9ycyA9IChcbiAgICAgIDxTdXJ2ZXlFbGVtZW50RXJyb3JzXG4gICAgICAgIGVsZW1lbnQ9e3RoaXMucGFuZWxCYXNlfVxuICAgICAgICBjc3NDbGFzc2VzPXt0aGlzLnBhbmVsQmFzZS5jc3NDbGFzc2VzfVxuICAgICAgICBjcmVhdG9yPXt0aGlzLmNyZWF0b3J9XG4gICAgICAvPlxuICAgICk7XG4gICAgY29uc3Qgc3R5bGUgPSB7XG4gICAgICBwYWRkaW5nTGVmdDogdGhpcy5wYW5lbC5pbm5lclBhZGRpbmdMZWZ0LFxuICAgICAgZGlzcGxheTogIXRoaXMucGFuZWwuaXNDb2xsYXBzZWQgPyB1bmRlZmluZWQgOiBcIm5vbmVcIixcbiAgICB9O1xuICAgIGxldCBjb250ZW50OiBKU1guRWxlbWVudCB8IG51bGwgPSBudWxsO1xuICAgIGlmICghdGhpcy5wYW5lbC5pc0NvbGxhcHNlZCB8fCB0aGlzLmhhc0JlZW5FeHBhbmRlZCkge1xuICAgICAgdGhpcy5oYXNCZWVuRXhwYW5kZWQgPSB0cnVlO1xuICAgICAgY29uc3Qgcm93czogSlNYLkVsZW1lbnRbXSA9IHRoaXMucmVuZGVyUm93cyh0aGlzLnBhbmVsQmFzZS5jc3NDbGFzc2VzKTtcbiAgICAgIGNvbnN0IGNsYXNzTmFtZTogc3RyaW5nID0gdGhpcy5wYW5lbEJhc2UuY3NzQ2xhc3Nlcy5wYW5lbC5jb250ZW50O1xuICAgICAgY29udGVudCA9IHRoaXMucmVuZGVyQ29udGVudChzdHlsZSwgcm93cywgY2xhc3NOYW1lKTtcbiAgICB9XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXZcbiAgICAgICAgcmVmPXt0aGlzLnJvb3RSZWZ9XG4gICAgICAgIGNsYXNzTmFtZT17KHRoaXMucGFuZWxCYXNlIGFzIFBhbmVsTW9kZWwpLmdldENvbnRhaW5lckNzcygpfVxuICAgICAgICBvbkZvY3VzPXsodGhpcy5wYW5lbEJhc2UgYXMgUGFuZWxNb2RlbCkuZm9jdXNJbn1cbiAgICAgICAgaWQ9e3RoaXMucGFuZWxCYXNlLmlkfVxuXG4gICAgICA+XG4gICAgICAgIHtoZWFkZXJ9XG4gICAgICAgIHtlcnJvcnN9XG4gICAgICAgIHtjb250ZW50fVxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVySGVhZGVyKCkge1xuICAgIGlmICghdGhpcy5wYW5lbC5oYXNUaXRsZSAmJiAhdGhpcy5wYW5lbC5oYXNEZXNjcmlwdGlvbikge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiA8U3VydmV5RWxlbWVudEhlYWRlciBlbGVtZW50PXt0aGlzLnBhbmVsfT48L1N1cnZleUVsZW1lbnRIZWFkZXI+O1xuICB9XG4gIHByb3RlY3RlZCB3cmFwRWxlbWVudChlbGVtZW50OiBKU1guRWxlbWVudCk6IEpTWC5FbGVtZW50IHtcbiAgICBjb25zdCBzdXJ2ZXk6IFN1cnZleU1vZGVsID0gdGhpcy5wYW5lbC5zdXJ2ZXkgYXMgU3VydmV5TW9kZWw7XG4gICAgbGV0IHdyYXBwZXI6IEpTWC5FbGVtZW50IHwgbnVsbCA9IG51bGw7XG4gICAgaWYgKHN1cnZleSkge1xuICAgICAgd3JhcHBlciA9IFJlYWN0U3VydmV5RWxlbWVudHNXcmFwcGVyLndyYXBFbGVtZW50KHN1cnZleSwgZWxlbWVudCwgdGhpcy5wYW5lbCk7XG4gICAgfVxuICAgIHJldHVybiB3cmFwcGVyID8/IGVsZW1lbnQ7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckNvbnRlbnQoc3R5bGU6IGFueSwgcm93czogSlNYLkVsZW1lbnRbXSwgY2xhc3NOYW1lOiBzdHJpbmcpOiBKU1guRWxlbWVudCB7XG4gICAgY29uc3QgYm90dG9tOiBKU1guRWxlbWVudCB8IG51bGwgPSB0aGlzLnJlbmRlckJvdHRvbSgpO1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IHN0eWxlPXtzdHlsZX0gY2xhc3NOYW1lPXtjbGFzc05hbWV9IGlkPXt0aGlzLnBhbmVsLmNvbnRlbnRJZH0+XG4gICAgICAgIHtyb3dzfVxuICAgICAgICB7Ym90dG9tfVxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyVGl0bGUoKTogSlNYLkVsZW1lbnQgfCBudWxsIHtcbiAgICBpZiAoIXRoaXMucGFuZWxCYXNlLnRpdGxlKSByZXR1cm4gbnVsbDtcbiAgICByZXR1cm4gPFRpdGxlRWxlbWVudCBlbGVtZW50PXt0aGlzLnBhbmVsQmFzZX0+PC9UaXRsZUVsZW1lbnQ+O1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJEZXNjcmlwdGlvbigpOiBKU1guRWxlbWVudCB8IG51bGwge1xuICAgIGlmICghdGhpcy5wYW5lbEJhc2UuZGVzY3JpcHRpb24pIHJldHVybiBudWxsO1xuICAgIHZhciB0ZXh0ID0gU3VydmV5RWxlbWVudEJhc2UucmVuZGVyTG9jU3RyaW5nKHRoaXMucGFuZWxCYXNlLmxvY0Rlc2NyaXB0aW9uKTtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9e3RoaXMucGFuZWwuY3NzQ2xhc3Nlcy5wYW5lbC5kZXNjcmlwdGlvbn0+e3RleHR9PC9kaXY+XG4gICAgKTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyQm90dG9tKCk6IEpTWC5FbGVtZW50IHwgbnVsbCB7XG4gICAgY29uc3QgZm9vdGVyVG9vbGJhciA9IHRoaXMucGFuZWwuZ2V0Rm9vdGVyVG9vbGJhcigpO1xuICAgIGlmICghZm9vdGVyVG9vbGJhci5oYXNBY3Rpb25zKSByZXR1cm4gbnVsbDtcbiAgICByZXR1cm4gPFN1cnZleUFjdGlvbkJhciBtb2RlbD17Zm9vdGVyVG9vbGJhcn0+PC9TdXJ2ZXlBY3Rpb25CYXI+O1xuICB9XG59XG5cblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFwicGFuZWxcIiwgKHByb3BzKSA9PiB7XG4gIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFN1cnZleVBhbmVsLCBwcm9wcyk7XG59KTtcbiIsImltcG9ydCAqIGFzIFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgUXVlc3Rpb25SYXRpbmdNb2RlbCwgUmVuZGVyZXJGYWN0b3J5IH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBTdXJ2ZXlRdWVzdGlvbkRyb3Bkb3duQmFzZSB9IGZyb20gXCIuL2Ryb3Bkb3duLWJhc2VcIjtcbmltcG9ydCB7IFJlYWN0UXVlc3Rpb25GYWN0b3J5IH0gZnJvbSBcIi4vcmVhY3RxdWVzdGlvbl9mYWN0b3J5XCI7XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlRdWVzdGlvblJhdGluZ0Ryb3Bkb3duIGV4dGVuZHMgU3VydmV5UXVlc3Rpb25Ecm9wZG93bkJhc2U8UXVlc3Rpb25SYXRpbmdNb2RlbD4ge1xuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICB2YXIgY3NzQ2xhc3NlcyA9IHRoaXMucXVlc3Rpb24uY3NzQ2xhc3NlcztcbiAgICB2YXIgc2VsZWN0ID0gdGhpcy5yZW5kZXJTZWxlY3QoY3NzQ2xhc3Nlcyk7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPXt0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMucm9vdERyb3Bkb3dufT5cbiAgICAgICAge3NlbGVjdH1cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbn1cblJlYWN0UXVlc3Rpb25GYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyUXVlc3Rpb24oXG4gIFwic3YtcmF0aW5nLWRyb3Bkb3duXCIsXG4gIChwcm9wcykgPT4ge1xuICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFN1cnZleVF1ZXN0aW9uUmF0aW5nRHJvcGRvd24sIHByb3BzKTtcbiAgfVxuKTtcblxuUmVuZGVyZXJGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyUmVuZGVyZXIoXG4gIFwicmF0aW5nXCIsXG4gIFwiZHJvcGRvd25cIixcbiAgXCJzdi1yYXRpbmctZHJvcGRvd25cIlxuKTtcbiIsImltcG9ydCAqIGFzIFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgU3VydmV5IH0gZnJvbSBcIi4vcmVhY3RTdXJ2ZXlcIjtcbmltcG9ydCB7IFN1cnZleUVsZW1lbnRCYXNlIH0gZnJvbSBcIi4vcmVhY3RxdWVzdGlvbl9lbGVtZW50XCI7XG5pbXBvcnQgeyBCYXNlLCBQb3B1cFN1cnZleU1vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5cbmV4cG9ydCBjbGFzcyBQb3B1cFN1cnZleSBleHRlbmRzIFN1cnZleSB7XG4gIHByb3RlY3RlZCBwb3B1cDogUG9wdXBTdXJ2ZXlNb2RlbDtcbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLmhhbmRsZU9uRXhwYW5kZWQgPSB0aGlzLmhhbmRsZU9uRXhwYW5kZWQuYmluZCh0aGlzKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0U3RhdGVFbGVtZW50cygpOiBBcnJheTxCYXNlPiB7XG4gICAgcmV0dXJuIFt0aGlzLnBvcHVwLCB0aGlzLnBvcHVwLnN1cnZleV07XG4gIH1cbiAgaGFuZGxlT25FeHBhbmRlZChldmVudDogYW55KSB7XG4gICAgdGhpcy5wb3B1cC5jaGFuZ2VFeHBhbmRDb2xsYXBzZSgpO1xuICB9XG4gIHByb3RlY3RlZCBjYW5SZW5kZXIoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHN1cGVyLmNhblJlbmRlcigpICYmIHRoaXMucG9wdXAuaXNTaG93aW5nO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICB2YXIgaGVhZGVyID0gdGhpcy5yZW5kZXJXaW5kb3dIZWFkZXIoKTtcbiAgICB2YXIgYm9keSA9IHRoaXMucG9wdXAuaXNFeHBhbmRlZCA/IHRoaXMucmVuZGVyQm9keSgpIDogbnVsbDtcbiAgICBsZXQgc3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gICAgICBwb3NpdGlvbjogXCJmaXhlZFwiLFxuICAgICAgYm90dG9tOiAzLFxuICAgICAgcmlnaHQ6IDEwXG4gICAgfTtcbiAgICBpZiAoISF0aGlzLnBvcHVwLnJlbmRlcmVkV2lkdGgpIHtcbiAgICAgIHN0eWxlLndpZHRoID0gdGhpcy5wb3B1cC5yZW5kZXJlZFdpZHRoO1xuICAgICAgc3R5bGUubWF4V2lkdGggPSB0aGlzLnBvcHVwLnJlbmRlcmVkV2lkdGg7XG4gICAgfVxuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT17dGhpcy5wb3B1cC5jc3NSb290fSBzdHlsZT17c3R5bGV9PlxuICAgICAgICB7aGVhZGVyfVxuICAgICAgICB7Ym9keX1cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlcldpbmRvd0hlYWRlcigpOiBKU1guRWxlbWVudCB7XG4gICAgdmFyIHN0eWxlQSA9IHsgd2lkdGg6IFwiMTAwJVwiLCBjdXJzb3I6IFwicG9pbnRlclwiIH07XG4gICAgdmFyIHN0eWxlVGl0bGUgPSB7IHBhZGRpbmdSaWdodDogXCIxMHB4XCIgfTtcbiAgICB2YXIgZ2x5cGhDbGFzc05hbWUgPSB0aGlzLnBvcHVwLmNzc0J1dHRvbjtcbiAgICBnbHlwaENsYXNzTmFtZSA9IFwiZ2x5cGhpY29uIHB1bGwtcmlnaHQgXCIgKyBnbHlwaENsYXNzTmFtZTtcbiAgICB2YXIgdGl0bGUgPSBTdXJ2ZXlFbGVtZW50QmFzZS5yZW5kZXJMb2NTdHJpbmcodGhpcy5zdXJ2ZXkubG9jVGl0bGUpO1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT17dGhpcy5wb3B1cC5jc3NIZWFkZXJSb290fT5cbiAgICAgICAgPHNwYW4gb25DbGljaz17dGhpcy5oYW5kbGVPbkV4cGFuZGVkfSBzdHlsZT17c3R5bGVBfT5cbiAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9e3RoaXMucG9wdXAuY3NzSGVhZGVyVGl0bGV9IHN0eWxlPXtzdHlsZVRpdGxlfT5cbiAgICAgICAgICAgIHt0aXRsZX1cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPXtnbHlwaENsYXNzTmFtZX0gYXJpYS1oaWRkZW49XCJ0cnVlXCIgLz5cbiAgICAgICAgPC9zcGFuPlxuICAgICAgICB7dGhpcy5wb3B1cC5pc0V4cGFuZGVkID8gKFxuICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICBvbkNsaWNrPXt0aGlzLmhhbmRsZU9uRXhwYW5kZWR9XG4gICAgICAgICAgICBzdHlsZT17eyBmbG9hdDogXCJyaWdodFwiLCBjdXJzb3I6IFwicG9pbnRlclwiIH19XG4gICAgICAgICAgPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPXt0aGlzLnBvcHVwLmNzc0hlYWRlclRpdGxlfSBzdHlsZT17c3R5bGVUaXRsZX0+XG4gICAgICAgICAgICAgIFhcbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICkgOiBudWxsfVxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyQm9keSgpOiBKU1guRWxlbWVudCB7XG4gICAgcmV0dXJuIDxkaXYgY2xhc3NOYW1lPXt0aGlzLnBvcHVwLmNzc0JvZHl9Pnt0aGlzLmRvUmVuZGVyKCl9PC9kaXY+O1xuICB9XG4gIHByb3RlY3RlZCBjcmVhdGVTdXJ2ZXkobmV3UHJvcHM6IGFueSkge1xuICAgIGlmICghbmV3UHJvcHMpIG5ld1Byb3BzID0ge307XG4gICAgc3VwZXIuY3JlYXRlU3VydmV5KG5ld1Byb3BzKTtcbiAgICB0aGlzLnBvcHVwID0gbmV3IFBvcHVwU3VydmV5TW9kZWwobnVsbCwgdGhpcy5zdXJ2ZXkpO1xuICAgIGlmIChuZXdQcm9wcy5jbG9zZU9uQ29tcGxldGVUaW1lb3V0KSB7XG4gICAgICB0aGlzLnBvcHVwLmNsb3NlT25Db21wbGV0ZVRpbWVvdXQgPSBuZXdQcm9wcy5jbG9zZU9uQ29tcGxldGVUaW1lb3V0O1xuICAgIH1cbiAgICB0aGlzLnBvcHVwLmlzU2hvd2luZyA9IHRydWU7XG4gICAgaWYgKCF0aGlzLnBvcHVwLmlzRXhwYW5kZWQgJiYgKG5ld1Byb3BzLmV4cGFuZGVkIHx8IG5ld1Byb3BzLmlzRXhwYW5kZWQpKVxuICAgICAgdGhpcy5wb3B1cC5leHBhbmQoKTtcbiAgfVxufVxuLyoqXG4gKiBPYnNvbGV0ZS4gUGxlYXNlIHVzZSBQb3B1cFN1cnZleVxuICovXG5leHBvcnQgY2xhc3MgU3VydmV5V2luZG93IGV4dGVuZHMgUG9wdXBTdXJ2ZXkge31cbiIsImltcG9ydCAqIGFzIFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgQmFzZSwgUXVlc3Rpb24sIFBhZ2VNb2RlbCwgU3VydmV5RXJyb3IsIFN0eWxlc01hbmFnZXIsIHN1cnZleUNzcywgSGVscGVycywgZG9LZXkyQ2xpY2tVcCwgU3ZnUmVnaXN0cnksIFN1cnZleU1vZGVsLCBkb0tleTJDbGlja0JsdXIsIGRvS2V5MkNsaWNrRG93biwgSUF0dGFjaEtleTJjbGlja09wdGlvbnMgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFN1cnZleVBhZ2UgfSBmcm9tIFwiLi9wYWdlXCI7XG5pbXBvcnQgeyBJU3VydmV5Q3JlYXRvciB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25cIjtcbmltcG9ydCB7IFN1cnZleUVsZW1lbnRCYXNlIH0gZnJvbSBcIi4vcmVhY3RxdWVzdGlvbl9lbGVtZW50XCI7XG5pbXBvcnQgeyBTdXJ2ZXlMb2NTdHJpbmdWaWV3ZXIgfSBmcm9tIFwiLi9zdHJpbmctdmlld2VyXCI7XG5pbXBvcnQgeyBTdXJ2ZXlIZWFkZXIgfSBmcm9tIFwiLi9jb21wb25lbnRzL3N1cnZleS1oZWFkZXIvc3VydmV5LWhlYWRlclwiO1xuaW1wb3J0IHsgU3VydmV5VGltZXJQYW5lbCB9IGZyb20gXCIuL3JlYWN0dGltZXJwYW5lbFwiO1xuaW1wb3J0IHsgUmVhY3RRdWVzdGlvbkZhY3RvcnkgfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uX2ZhY3RvcnlcIjtcbmltcG9ydCB7IFJlYWN0RWxlbWVudEZhY3RvcnkgfSBmcm9tIFwiLi9lbGVtZW50LWZhY3RvcnlcIjtcbmltcG9ydCB7IFN1cnZleUFjdGlvbkJhciB9IGZyb20gXCIuL2NvbXBvbmVudHMvYWN0aW9uLWJhci9hY3Rpb24tYmFyXCI7XG5pbXBvcnQgeyBCcmFuZEluZm8gfSBmcm9tIFwiLi9jb21wb25lbnRzL2JyYW5kLWluZm9cIjtcblxuZXhwb3J0IGNsYXNzIFN1cnZleSBleHRlbmRzIFN1cnZleUVsZW1lbnRCYXNlPGFueSwgYW55PlxuICBpbXBsZW1lbnRzIElTdXJ2ZXlDcmVhdG9yIHtcbiAgcHJpdmF0ZSBwcmV2aW91c0pTT04gPSB7fTtcbiAgcHJpdmF0ZSByb290UmVmOiBSZWFjdC5SZWZPYmplY3Q8SFRNTERpdkVsZW1lbnQ+O1xuICBwdWJsaWMgc3RhdGljIGdldCBjc3NUeXBlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHN1cnZleUNzcy5jdXJyZW50VHlwZTtcbiAgfVxuICBwdWJsaWMgc3RhdGljIHNldCBjc3NUeXBlKHZhbHVlOiBzdHJpbmcpIHtcbiAgICBTdHlsZXNNYW5hZ2VyLmFwcGx5VGhlbWUodmFsdWUpO1xuICB9XG4gIHByb3RlY3RlZCBzdXJ2ZXk6IFN1cnZleU1vZGVsO1xuXG4gIHByaXZhdGUgcm9vdE5vZGVJZDogc3RyaW5nOyAvLyByb290IGRvbSBub2RlIElEIGF0dHJcbiAgcHJpdmF0ZSByb290Tm9kZUNsYXNzTmFtZTogc3RyaW5nOyAvLyByb290IGRvbSBub2RlIGNsYXNzXG5cbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLmhhbmRsZVRyeUFnYWluQ2xpY2sgPSB0aGlzLmhhbmRsZVRyeUFnYWluQ2xpY2suYmluZCh0aGlzKTtcbiAgICB0aGlzLmNyZWF0ZVN1cnZleShwcm9wcyk7XG4gICAgdGhpcy51cGRhdGVTdXJ2ZXkocHJvcHMsIHt9KTtcbiAgICB0aGlzLnJvb3RSZWYgPSBSZWFjdC5jcmVhdGVSZWYoKTtcbiAgICB0aGlzLnJvb3ROb2RlSWQgPSBwcm9wcy5pZCB8fCBudWxsO1xuICAgIHRoaXMucm9vdE5vZGVDbGFzc05hbWUgPSBwcm9wcy5jbGFzc05hbWUgfHwgXCJcIjtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0U3RhdGVFbGVtZW50KCk6IEJhc2Uge1xuICAgIHJldHVybiB0aGlzLnN1cnZleTtcbiAgfVxuICBzaG91bGRDb21wb25lbnRVcGRhdGUobmV4dFByb3BzOiBhbnksIG5leHRTdGF0ZTogYW55KSB7XG4gICAgaWYgKCFzdXBlci5zaG91bGRDb21wb25lbnRVcGRhdGUobmV4dFByb3BzLCBuZXh0U3RhdGUpKSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKHRoaXMuaXNNb2RlbEpTT05DaGFuZ2VkKG5leHRQcm9wcykpIHtcbiAgICAgIHRoaXMuY3JlYXRlU3VydmV5KG5leHRQcm9wcyk7XG4gICAgICB0aGlzLnVwZGF0ZVN1cnZleShuZXh0UHJvcHMsIHt9KTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wczogYW55LCBwcmV2U3RhdGU6IGFueSkge1xuICAgIHN1cGVyLmNvbXBvbmVudERpZFVwZGF0ZShwcmV2UHJvcHMsIHByZXZTdGF0ZSk7XG4gICAgdGhpcy51cGRhdGVTdXJ2ZXkodGhpcy5wcm9wcywgcHJldlByb3BzKTtcbiAgfVxuICBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICBzdXBlci5jb21wb25lbnREaWRNb3VudCgpO1xuICAgIHZhciBlbCA9IHRoaXMucm9vdFJlZi5jdXJyZW50O1xuICAgIGlmIChlbCAmJiB0aGlzLnN1cnZleSkgdGhpcy5zdXJ2ZXkuYWZ0ZXJSZW5kZXJTdXJ2ZXkoZWwpO1xuICAgIGlmICh0aGlzLnN1cnZleSkge1xuICAgICAgdGhpcy5zdXJ2ZXkuc3RhcnRUaW1lckZyb21VSSgpO1xuICAgIH1cbiAgfVxuICBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICBzdXBlci5jb21wb25lbnRXaWxsVW5tb3VudCgpO1xuICAgIGlmICh0aGlzLnN1cnZleSkge1xuICAgICAgdGhpcy5zdXJ2ZXkuc3RvcFRpbWVyKCk7XG4gICAgfVxuICB9XG4gIGRvUmVuZGVyKCk6IEpTWC5FbGVtZW50IHtcbiAgICBpZih0aGlzLnN1cnZleVtcIm5lZWRSZW5kZXJJY29uc1wiXSkge1xuICAgICAgU3ZnUmVnaXN0cnkucmVuZGVySWNvbnMoKTtcbiAgICB9XG4gICAgbGV0IHJlbmRlclJlc3VsdDogSlNYLkVsZW1lbnQgfCBudWxsO1xuICAgIGlmICh0aGlzLnN1cnZleS5zdGF0ZSA9PSBcImNvbXBsZXRlZFwiKSB7XG4gICAgICByZW5kZXJSZXN1bHQgPSB0aGlzLnJlbmRlckNvbXBsZXRlZCgpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5zdXJ2ZXkuc3RhdGUgPT0gXCJjb21wbGV0ZWRiZWZvcmVcIikge1xuICAgICAgcmVuZGVyUmVzdWx0ID0gdGhpcy5yZW5kZXJDb21wbGV0ZWRCZWZvcmUoKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuc3VydmV5LnN0YXRlID09IFwibG9hZGluZ1wiKSB7XG4gICAgICByZW5kZXJSZXN1bHQgPSB0aGlzLnJlbmRlckxvYWRpbmcoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVuZGVyUmVzdWx0ID0gdGhpcy5yZW5kZXJTdXJ2ZXkoKTtcbiAgICB9XG4gICAgY29uc3QgaGVhZGVyOiBKU1guRWxlbWVudCA9IDxTdXJ2ZXlIZWFkZXIgc3VydmV5PXt0aGlzLnN1cnZleX0+PC9TdXJ2ZXlIZWFkZXI+O1xuICAgIGNvbnN0IG9uU3VibWl0ID0gZnVuY3Rpb24gKGV2ZW50OiBSZWFjdC5Gb3JtRXZlbnQ8SFRNTEZvcm1FbGVtZW50Pikge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9O1xuICAgIGxldCBjdXN0b21IZWFkZXI6IEpTWC5FbGVtZW50IHwgbnVsbCA9IDxkaXYgY2xhc3NOYW1lPVwic3ZfY3VzdG9tX2hlYWRlclwiIC8+O1xuICAgIGlmICh0aGlzLnN1cnZleS5oYXNMb2dvKSB7XG4gICAgICBjdXN0b21IZWFkZXIgPSBudWxsO1xuICAgIH1cbiAgICBjb25zdCByb290Q3NzID0gdGhpcy5zdXJ2ZXkuZ2V0Um9vdENzcygpO1xuICAgIGNvbnN0IGNzc0NsYXNzZXMgPSB0aGlzLnJvb3ROb2RlQ2xhc3NOYW1lID8gdGhpcy5yb290Tm9kZUNsYXNzTmFtZSArIFwiIFwiICsgcm9vdENzcyA6IHJvb3RDc3M7XG5cbiAgICB2YXIgdG9wUHJvZ3Jlc3MgPSB0aGlzLnN1cnZleS5pc1Nob3dQcm9ncmVzc0Jhck9uVG9wICYmICF0aGlzLnN1cnZleS5pc1Nob3dTdGFydGluZ1BhZ2VcbiAgICAgID8gdGhpcy5yZW5kZXJQcm9ncmVzcyh0cnVlKVxuICAgICAgOiBudWxsO1xuXG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgaWQ9e3RoaXMucm9vdE5vZGVJZH0gcmVmPXt0aGlzLnJvb3RSZWZ9IGNsYXNzTmFtZT17Y3NzQ2xhc3Nlc30+XG4gICAgICAgIDxmb3JtIG9uU3VibWl0PXtvblN1Ym1pdH0+XG4gICAgICAgICAge2N1c3RvbUhlYWRlcn1cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17dGhpcy5jc3MuY29udGFpbmVyfT5cbiAgICAgICAgICAgIHtoZWFkZXJ9XG4gICAgICAgICAgICB7dGhpcy5yZW5kZXJUaW1lclBhbmVsKFwidG9wXCIpfVxuICAgICAgICAgICAge3RvcFByb2dyZXNzfVxuICAgICAgICAgICAge3JlbmRlclJlc3VsdH1cbiAgICAgICAgICAgIHt0aGlzLnJlbmRlclRpbWVyUGFuZWwoXCJib3R0b21cIil9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZm9ybT5cbiAgICAgICAgeyB0aGlzLnN1cnZleS5zaG93QnJhbmRJbmZvID8gPEJyYW5kSW5mby8+IDogbnVsbCB9XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICByZXR1cm4gdGhpcy5kb1JlbmRlcigpO1xuICB9XG4gIHB1YmxpYyBnZXQgY3NzKCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMuc3VydmV5LmNzcztcbiAgfVxuICBwdWJsaWMgc2V0IGNzcyh2YWx1ZTogYW55KSB7XG4gICAgdGhpcy5zdXJ2ZXkuY3NzID0gdmFsdWU7XG4gIH1cbiAgaGFuZGxlVHJ5QWdhaW5DbGljayhldmVudDogYW55KSB7XG4gICAgdGhpcy5zdXJ2ZXkuZG9Db21wbGV0ZSgpO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJDb21wbGV0ZWQoKTogSlNYLkVsZW1lbnQgfCBudWxsIHtcbiAgICBpZiAoIXRoaXMuc3VydmV5LnNob3dDb21wbGV0ZWRQYWdlKSByZXR1cm4gbnVsbDtcbiAgICB2YXIgY29tcGxldGVkU3RhdGU6IEpTWC5FbGVtZW50IHwgbnVsbCA9IG51bGw7XG4gICAgaWYgKHRoaXMuc3VydmV5LmNvbXBsZXRlZFN0YXRlKSB7XG4gICAgICB2YXIgdHJ5QWdhaW5CdXR0b246IEpTWC5FbGVtZW50IHwgbnVsbCA9IG51bGw7XG4gICAgICBpZiAodGhpcy5zdXJ2ZXkuY29tcGxldGVkU3RhdGUgPT0gXCJlcnJvclwiKSB7XG4gICAgICAgIHZhciBidG5UZXh0ID0gdGhpcy5zdXJ2ZXkuZ2V0TG9jYWxpemF0aW9uU3RyaW5nKFwic2F2ZUFnYWluQnV0dG9uXCIpO1xuICAgICAgICB0cnlBZ2FpbkJ1dHRvbiA9IChcbiAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgIHR5cGU9e1wiYnV0dG9uXCJ9XG4gICAgICAgICAgICB2YWx1ZT17YnRuVGV4dH1cbiAgICAgICAgICAgIGNsYXNzTmFtZT17dGhpcy5jc3Muc2F2ZURhdGEuc2F2ZUFnYWluQnV0dG9ufVxuICAgICAgICAgICAgb25DbGljaz17dGhpcy5oYW5kbGVUcnlBZ2FpbkNsaWNrfVxuICAgICAgICAgIC8+XG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICB2YXIgY3NzID0gdGhpcy5jc3Muc2F2ZURhdGFbdGhpcy5zdXJ2ZXkuY29tcGxldGVkU3RhdGVdO1xuICAgICAgY29tcGxldGVkU3RhdGUgPSAoXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXt0aGlzLmNzcy5zYXZlRGF0YS5yb290fT5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17Y3NzfT5cbiAgICAgICAgICAgIDxzcGFuPnt0aGlzLnN1cnZleS5jb21wbGV0ZWRTdGF0ZVRleHR9PC9zcGFuPlxuICAgICAgICAgICAge3RyeUFnYWluQnV0dG9ufVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICk7XG4gICAgfVxuICAgIHZhciBodG1sVmFsdWUgPSB7IF9faHRtbDogdGhpcy5zdXJ2ZXkucHJvY2Vzc2VkQ29tcGxldGVkSHRtbCB9O1xuICAgIHJldHVybiAoXG4gICAgICA8UmVhY3QuRnJhZ21lbnQ+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBkYW5nZXJvdXNseVNldElubmVySFRNTD17aHRtbFZhbHVlfVxuICAgICAgICAgIGNsYXNzTmFtZT17dGhpcy5zdXJ2ZXkuY29tcGxldGVkQ3NzfVxuICAgICAgICAvPlxuICAgICAgICB7Y29tcGxldGVkU3RhdGV9XG4gICAgICA8L1JlYWN0LkZyYWdtZW50PlxuICAgICk7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckNvbXBsZXRlZEJlZm9yZSgpOiBKU1guRWxlbWVudCB7XG4gICAgdmFyIGh0bWxWYWx1ZSA9IHsgX19odG1sOiB0aGlzLnN1cnZleS5wcm9jZXNzZWRDb21wbGV0ZWRCZWZvcmVIdG1sIH07XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUw9e2h0bWxWYWx1ZX0gY2xhc3NOYW1lPXt0aGlzLmNzcy5ib2R5fSAvPlxuICAgICk7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckxvYWRpbmcoKTogSlNYLkVsZW1lbnQge1xuICAgIHZhciBodG1sVmFsdWUgPSB7IF9faHRtbDogdGhpcy5zdXJ2ZXkucHJvY2Vzc2VkTG9hZGluZ0h0bWwgfTtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBkYW5nZXJvdXNseVNldElubmVySFRNTD17aHRtbFZhbHVlfSBjbGFzc05hbWU9e3RoaXMuY3NzLmJvZHl9IC8+XG4gICAgKTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyU3VydmV5KCk6IEpTWC5FbGVtZW50IHtcbiAgICB2YXIgYWN0aXZlUGFnZSA9IHRoaXMuc3VydmV5LmFjdGl2ZVBhZ2VcbiAgICAgID8gdGhpcy5yZW5kZXJQYWdlKHRoaXMuc3VydmV5LmFjdGl2ZVBhZ2UpXG4gICAgICA6IG51bGw7XG4gICAgY29uc3QgaXNTdGFyaW5nID0gdGhpcy5zdXJ2ZXkuaXNTaG93U3RhcnRpbmdQYWdlO1xuICAgIHZhciBwYWdlSWQgPSB0aGlzLnN1cnZleS5hY3RpdmVQYWdlID8gdGhpcy5zdXJ2ZXkuYWN0aXZlUGFnZS5pZCA6IFwiXCI7XG5cbiAgICB2YXIgYm90dG9tUHJvZ3Jlc3MgPSB0aGlzLnN1cnZleS5pc1Nob3dQcm9ncmVzc0Jhck9uQm90dG9tICYmICFpc1N0YXJpbmdcbiAgICAgID8gdGhpcy5yZW5kZXJQcm9ncmVzcyhmYWxzZSlcbiAgICAgIDogbnVsbDtcbiAgICBsZXQgY2xhc3NOYW1lID0gdGhpcy5zdXJ2ZXkuYm9keUNzcztcbiAgICBpZiAoIWFjdGl2ZVBhZ2UpIHtcbiAgICAgIGNsYXNzTmFtZSA9IHRoaXMuY3NzLmJvZHlFbXB0eTtcbiAgICAgIGFjdGl2ZVBhZ2UgPSB0aGlzLnJlbmRlckVtcHR5U3VydmV5KCk7XG4gICAgfVxuICAgIGNvbnN0IHN0eWxlOiBhbnkgPSB7fTtcbiAgICBpZighIXRoaXMuc3VydmV5LnJlbmRlcmVkV2lkdGgpIHtcbiAgICAgIHN0eWxlLm1heFdpZHRoID0gdGhpcy5zdXJ2ZXkucmVuZGVyZWRXaWR0aDtcbiAgICB9XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXZcbiAgICAgICAgaWQ9e3BhZ2VJZH1cbiAgICAgICAgY2xhc3NOYW1lPXtjbGFzc05hbWV9XG4gICAgICAgIHN0eWxlPXtzdHlsZX1cbiAgICAgID5cbiAgICAgICAge3RoaXMucmVuZGVyTmF2aWdhdGlvbihcInRvcFwiKX1cbiAgICAgICAge2FjdGl2ZVBhZ2V9XG4gICAgICAgIHtib3R0b21Qcm9ncmVzc31cbiAgICAgICAge3RoaXMucmVuZGVyTmF2aWdhdGlvbihcImJvdHRvbVwiKX1cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlclRpbWVyUGFuZWwobG9jYXRpb246IHN0cmluZykge1xuICAgIGlmKHRoaXMuc3VydmV5LmlzU2hvd1N0YXJ0aW5nUGFnZSkgcmV0dXJuIG51bGw7XG4gICAgaWYgKGxvY2F0aW9uID09PSBcInRvcFwiICYmICF0aGlzLnN1cnZleS5pc1RpbWVyUGFuZWxTaG93aW5nT25Ub3ApXG4gICAgICByZXR1cm4gbnVsbDtcbiAgICBpZiAobG9jYXRpb24gPT09IFwiYm90dG9tXCIgJiYgIXRoaXMuc3VydmV5LmlzVGltZXJQYW5lbFNob3dpbmdPbkJvdHRvbSlcbiAgICAgIHJldHVybiBudWxsO1xuICAgIHJldHVybiA8U3VydmV5VGltZXJQYW5lbCB0aW1lck1vZGVsPXt0aGlzLnN1cnZleS50aW1lck1vZGVsfSAvPjtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyUGFnZShwYWdlOiBQYWdlTW9kZWwpOiBKU1guRWxlbWVudCB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxTdXJ2ZXlQYWdlXG4gICAgICAgIHN1cnZleT17dGhpcy5zdXJ2ZXl9XG4gICAgICAgIHBhZ2U9e3BhZ2V9XG4gICAgICAgIGNzcz17dGhpcy5jc3N9XG4gICAgICAgIGNyZWF0b3I9e3RoaXN9XG4gICAgICAvPlxuICAgICk7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlclByb2dyZXNzKGlzVG9wOiBib29sZWFuKTogSlNYLkVsZW1lbnQgfCBudWxsIHtcbiAgICByZXR1cm4gUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5jcmVhdGVFbGVtZW50KFxuICAgICAgXCJzdi1wcm9ncmVzcy1cIiArIHRoaXMuc3VydmV5LnByb2dyZXNzQmFyVHlwZS50b0xvd2VyQ2FzZSgpLFxuICAgICAgeyBzdXJ2ZXk6IHRoaXMuc3VydmV5LCBjc3M6IHRoaXMuY3NzLCBpc1RvcDogaXNUb3AgfVxuICAgICk7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlck5hdmlnYXRpb24obmF2UG9zaXRpb246IHN0cmluZyk6IEpTWC5FbGVtZW50IHwgbnVsbCB7XG4gICAgaWYgKFxuICAgICAgdGhpcy5zdXJ2ZXkuaXNOYXZpZ2F0aW9uQnV0dG9uc1Nob3dpbmcgIT09IFwiYm90aFwiICYmXG4gICAgICAodGhpcy5zdXJ2ZXkuaXNOYXZpZ2F0aW9uQnV0dG9uc1Nob3dpbmcgPT09IFwibm9uZVwiIHx8XG4gICAgICAgIHRoaXMuc3VydmV5LmlzTmF2aWdhdGlvbkJ1dHRvbnNTaG93aW5nICE9PSBuYXZQb3NpdGlvbilcbiAgICApIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gPFN1cnZleUFjdGlvbkJhciBtb2RlbD17dGhpcy5zdXJ2ZXkubmF2aWdhdGlvbkJhcn0gLz47XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckVtcHR5U3VydmV5KCk6IEpTWC5FbGVtZW50IHtcbiAgICByZXR1cm4gPHNwYW4+e3RoaXMuc3VydmV5LmVtcHR5U3VydmV5VGV4dH08L3NwYW4+O1xuICB9XG4gIHByb3RlY3RlZCBjcmVhdGVTdXJ2ZXkobmV3UHJvcHM6IGFueSkge1xuICAgIGlmICghbmV3UHJvcHMpIG5ld1Byb3BzID0ge307XG4gICAgdGhpcy5wcmV2aW91c0pTT04gPSB7fTtcbiAgICBpZiAobmV3UHJvcHMpIHtcbiAgICAgIGlmIChuZXdQcm9wcy5tb2RlbCkge1xuICAgICAgICB0aGlzLnN1cnZleSA9IG5ld1Byb3BzLm1vZGVsO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKG5ld1Byb3BzLmpzb24pIHtcbiAgICAgICAgICB0aGlzLnByZXZpb3VzSlNPTiA9IG5ld1Byb3BzLmpzb247XG4gICAgICAgICAgdGhpcy5zdXJ2ZXkgPSBuZXcgU3VydmV5TW9kZWwobmV3UHJvcHMuanNvbik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zdXJ2ZXkgPSBuZXcgU3VydmV5TW9kZWwoKTtcbiAgICB9XG4gICAgaWYgKCEhbmV3UHJvcHMuY3NzKSB7XG4gICAgICB0aGlzLnN1cnZleS5jc3MgPSB0aGlzLmNzcztcbiAgICB9XG4gICAgdGhpcy5zZXRTdXJ2ZXlFdmVudHMoKTtcbiAgfVxuICBwcml2YXRlIGlzTW9kZWxKU09OQ2hhbmdlZChuZXdQcm9wczogYW55KTogYm9vbGVhbiB7XG4gICAgaWYgKCEhbmV3UHJvcHNbXCJtb2RlbFwiXSkge1xuICAgICAgcmV0dXJuIHRoaXMuc3VydmV5ICE9PSBuZXdQcm9wc1tcIm1vZGVsXCJdO1xuICAgIH1cbiAgICBpZiAoISFuZXdQcm9wc1tcImpzb25cIl0pIHtcbiAgICAgIHJldHVybiAhSGVscGVycy5pc1R3b1ZhbHVlRXF1YWxzKG5ld1Byb3BzW1wianNvblwiXSwgdGhpcy5wcmV2aW91c0pTT04pO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcHJvdGVjdGVkIHVwZGF0ZVN1cnZleShuZXdQcm9wczogYW55LCBvbGRQcm9wcz86IGFueSkge1xuICAgIGlmICghbmV3UHJvcHMpIHJldHVybjtcbiAgICBvbGRQcm9wcyA9IG9sZFByb3BzIHx8IHt9O1xuICAgIGZvciAodmFyIGtleSBpbiBuZXdQcm9wcykge1xuICAgICAgaWYgKGtleSA9PSBcIm1vZGVsXCIgfHwga2V5ID09IFwiY2hpbGRyZW5cIiB8fCBrZXkgPT0gXCJqc29uXCIpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBpZiAoa2V5ID09IFwiY3NzXCIpIHtcbiAgICAgICAgdGhpcy5zdXJ2ZXkubWVyZ2VWYWx1ZXMobmV3UHJvcHMuY3NzLCB0aGlzLnN1cnZleS5nZXRDc3MoKSk7XG4gICAgICAgIHRoaXMuc3VydmV5W1widXBkYXRlTmF2aWdhdGlvbkNzc1wiXSgpO1xuICAgICAgICB0aGlzLnN1cnZleVtcInVwZGF0ZUVsZW1lbnRDc3NcIl0oKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBpZiAobmV3UHJvcHNba2V5XSA9PT0gb2xkUHJvcHNba2V5XSkgY29udGludWU7XG4gICAgICBpZiAoa2V5LmluZGV4T2YoXCJvblwiKSA9PSAwICYmIHRoaXMuc3VydmV5W2tleV0gJiYgdGhpcy5zdXJ2ZXlba2V5XS5hZGQpIHtcbiAgICAgICAgaWYgKCEhb2xkUHJvcHNba2V5XSkge1xuICAgICAgICAgIHRoaXMuc3VydmV5W2tleV0ucmVtb3ZlKG9sZFByb3BzW2tleV0pO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc3VydmV5W2tleV0uYWRkKG5ld1Byb3BzW2tleV0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5zdXJ2ZXlba2V5XSA9IG5ld1Byb3BzW2tleV07XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHByb3RlY3RlZCBzZXRTdXJ2ZXlFdmVudHMoKSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gICAgdGhpcy5zdXJ2ZXkucmVuZGVyQ2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgY291bnRlciA9XG4gICAgICAgICEhc2VsZi5zdGF0ZSAmJiAhIXNlbGYuc3RhdGUubW9kZWxDaGFuZ2VkID8gc2VsZi5zdGF0ZS5tb2RlbENoYW5nZWQgOiAwO1xuICAgICAgc2VsZi5zZXRTdGF0ZSh7IG1vZGVsQ2hhbmdlZDogY291bnRlciArIDEgfSk7XG4gICAgfTtcbiAgICB0aGlzLnN1cnZleS5vblBhcnRpYWxTZW5kLmFkZCgoc2VuZGVyKSA9PiB7XG4gICAgICBpZiAoISFzZWxmLnN0YXRlKSB7XG4gICAgICAgIHNlbGYuc2V0U3RhdGUoc2VsZi5zdGF0ZSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvL0lTdXJ2ZXlDcmVhdG9yXG4gIHB1YmxpYyBjcmVhdGVRdWVzdGlvbkVsZW1lbnQocXVlc3Rpb246IFF1ZXN0aW9uKTogSlNYLkVsZW1lbnQgfCBudWxsIHtcbiAgICByZXR1cm4gUmVhY3RRdWVzdGlvbkZhY3RvcnkuSW5zdGFuY2UuY3JlYXRlUXVlc3Rpb24oXG4gICAgICAhcXVlc3Rpb24uaXNEZWZhdWx0UmVuZGVyaW5nIHx8IHF1ZXN0aW9uLmlzRGVmYXVsdFJlbmRlcmluZygpXG4gICAgICAgID8gcXVlc3Rpb24uZ2V0VGVtcGxhdGUoKVxuICAgICAgICA6IHF1ZXN0aW9uLmdldENvbXBvbmVudE5hbWUoKSxcbiAgICAgIHtcbiAgICAgICAgcXVlc3Rpb246IHF1ZXN0aW9uLFxuICAgICAgICBpc0Rpc3BsYXlNb2RlOiBxdWVzdGlvbi5pc0lucHV0UmVhZE9ubHksXG4gICAgICAgIGNyZWF0b3I6IHRoaXMsXG4gICAgICB9XG4gICAgKTtcbiAgfVxuICBwdWJsaWMgcmVuZGVyRXJyb3IoXG4gICAga2V5OiBzdHJpbmcsXG4gICAgZXJyb3I6IFN1cnZleUVycm9yLFxuICAgIGNzc0NsYXNzZXM6IGFueVxuICApOiBKU1guRWxlbWVudCB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYga2V5PXtrZXl9PlxuICAgICAgICA8c3BhbiBjbGFzc05hbWU9e2Nzc0NsYXNzZXMuZXJyb3IuaWNvbiB8fCB1bmRlZmluZWR9IGFyaWEtaGlkZGVuPVwidHJ1ZVwiIC8+XG4gICAgICAgIDxzcGFuIGNsYXNzTmFtZT17Y3NzQ2xhc3Nlcy5lcnJvci5pdGVtIHx8IHVuZGVmaW5lZH0+XG4gICAgICAgICAgPFN1cnZleUxvY1N0cmluZ1ZpZXdlciBsb2NTdHI9e2Vycm9yLmxvY1RleHR9IC8+XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbiAgcHVibGljIHF1ZXN0aW9uVGl0bGVMb2NhdGlvbigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnN1cnZleS5xdWVzdGlvblRpdGxlTG9jYXRpb247XG4gIH1cbiAgcHVibGljIHF1ZXN0aW9uRXJyb3JMb2NhdGlvbigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnN1cnZleS5xdWVzdGlvbkVycm9yTG9jYXRpb247XG4gIH1cbn1cblxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXCJzdXJ2ZXlcIiwgKHByb3BzKSA9PiB7XG4gIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFN1cnZleSwgcHJvcHMpO1xufSk7XG5cbmV4cG9ydCBmdW5jdGlvbiBhdHRhY2hLZXkyY2xpY2soZWxlbWVudDogSlNYLkVsZW1lbnQsIHZpZXdNb2RlbD86IGFueSwgb3B0aW9uczogSUF0dGFjaEtleTJjbGlja09wdGlvbnMgPSB7IHByb2Nlc3NFc2M6IHRydWUsIGRpc2FibGVUYWJTdG9wOiBmYWxzZSB9KTogSlNYLkVsZW1lbnQge1xuICBpZiAoKCEhdmlld01vZGVsICYmIHZpZXdNb2RlbC5kaXNhYmxlVGFiU3RvcCkgfHwgKCEhb3B0aW9ucyAmJiBvcHRpb25zLmRpc2FibGVUYWJTdG9wKSkge1xuICAgIHJldHVybiBSZWFjdC5jbG9uZUVsZW1lbnQoZWxlbWVudCwgeyB0YWJJbmRleDogLTEgfSk7XG4gIH1cbiAgcmV0dXJuIFJlYWN0LmNsb25lRWxlbWVudChcbiAgICBlbGVtZW50LFxuICAgIHtcbiAgICAgIHRhYkluZGV4OiAwLFxuICAgICAgb25LZXlVcDogKGV2dDogS2V5Ym9hcmRFdmVudCkgPT4ge1xuICAgICAgICBldnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgZXZ0LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICBkb0tleTJDbGlja1VwKGV2dCwgb3B0aW9ucyk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH0sXG4gICAgICBvbktleURvd246IChldnQ6IGFueSkgPT4gZG9LZXkyQ2xpY2tEb3duKGV2dCwgb3B0aW9ucyksXG4gICAgICBvbkJsdXI6IChldnQ6IGFueSkgPT4gZG9LZXkyQ2xpY2tCbHVyKGV2dClcbiAgICB9XG4gICk7XG59IiwiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBTdXJ2ZXlNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuXG5leHBvcnQgY2xhc3MgU3VydmV5TmF2aWdhdGlvbkJhc2UgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQ8YW55LCBhbnk+IHtcbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLnN0YXRlID0geyB1cGRhdGU6IDAgfTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IHN1cnZleSgpOiBTdXJ2ZXlNb2RlbCB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuc3VydmV5O1xuICB9XG4gIHByb3RlY3RlZCBnZXQgY3NzKCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuY3NzO1xuICB9XG4gIHByaXZhdGUgdXBkYXRlU3RhdGVGdW5jdGlvbjogYW55ID0gbnVsbDtcbiAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgaWYgKHRoaXMuc3VydmV5KSB7XG4gICAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgICB0aGlzLnVwZGF0ZVN0YXRlRnVuY3Rpb24gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHNlbGYuc2V0U3RhdGUoeyB1cGRhdGU6IHNlbGYuc3RhdGUudXBkYXRlICsgMSB9KTtcbiAgICAgIH07XG4gICAgICB0aGlzLnN1cnZleS5vblBhZ2VWaXNpYmxlQ2hhbmdlZC5hZGQodGhpcy51cGRhdGVTdGF0ZUZ1bmN0aW9uKTtcbiAgICB9XG4gIH1cbiAgY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgaWYgKHRoaXMuc3VydmV5ICYmIHRoaXMudXBkYXRlU3RhdGVGdW5jdGlvbikge1xuICAgICAgdGhpcy5zdXJ2ZXkub25QYWdlVmlzaWJsZUNoYW5nZWQucmVtb3ZlKHRoaXMudXBkYXRlU3RhdGVGdW5jdGlvbik7XG4gICAgICB0aGlzLnVwZGF0ZVN0YXRlRnVuY3Rpb24gPSBudWxsO1xuICAgIH1cbiAgfVxufVxuIiwiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBTdXJ2ZXlQcm9ncmVzc01vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBTdXJ2ZXlOYXZpZ2F0aW9uQmFzZSB9IGZyb20gXCIuL3JlYWN0U3VydmV5TmF2aWdhdGlvbkJhc2VcIjtcbmltcG9ydCB7IFJlYWN0RWxlbWVudEZhY3RvcnkgfSBmcm9tIFwiLi9lbGVtZW50LWZhY3RvcnlcIjtcblxuZXhwb3J0IGNsYXNzIFN1cnZleVByb2dyZXNzIGV4dGVuZHMgU3VydmV5TmF2aWdhdGlvbkJhc2Uge1xuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICB9XG4gIHByb3RlY3RlZCBnZXQgaXNUb3AoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuaXNUb3A7XG4gIH1cbiAgcHJvdGVjdGVkIGdldCBwcm9ncmVzcygpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnN1cnZleS5wcm9ncmVzc1ZhbHVlO1xuICB9XG4gIHByb3RlY3RlZCBnZXQgcHJvZ3Jlc3NUZXh0KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuc3VydmV5LnByb2dyZXNzVGV4dDtcbiAgfVxuICByZW5kZXIoKTogSlNYLkVsZW1lbnQge1xuICAgIHZhciBzdHlsZSA9IHRoaXMuaXNUb3AgPyB7fSA6IHsgbWFyZ2luVG9wOiBcIjFlbVwiIH07XG4gICAgdmFyIHByb2dyZXNzU3R5bGUgPSB7XG4gICAgICB3aWR0aDogdGhpcy5wcm9ncmVzcyArIFwiJVwiLFxuICAgIH07XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPXt0aGlzLmNzcy5wcm9ncmVzc30gc3R5bGU9e3N0eWxlfT5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIHN0eWxlPXtwcm9ncmVzc1N0eWxlfVxuICAgICAgICAgIGNsYXNzTmFtZT17dGhpcy5jc3MucHJvZ3Jlc3NCYXJ9XG4gICAgICAgICAgcm9sZT1cInByb2dyZXNzYmFyXCJcbiAgICAgICAgICBhcmlhLXZhbHVlbWluPXswfVxuICAgICAgICAgIGFyaWEtdmFsdWVtYXg9ezEwMH1cbiAgICAgICAgPlxuICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICBjbGFzc05hbWU9e1N1cnZleVByb2dyZXNzTW9kZWwuZ2V0UHJvZ3Jlc3NUZXh0SW5CYXJDc3ModGhpcy5jc3MpfVxuICAgICAgICAgID5cbiAgICAgICAgICAgIHt0aGlzLnByb2dyZXNzVGV4dH1cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8c3BhblxuICAgICAgICAgIGNsYXNzTmFtZT17U3VydmV5UHJvZ3Jlc3NNb2RlbC5nZXRQcm9ncmVzc1RleHRVbmRlckJhckNzcyh0aGlzLmNzcyl9XG4gICAgICAgID5cbiAgICAgICAgICB7dGhpcy5wcm9ncmVzc1RleHR9XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbn1cblxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXCJzdi1wcm9ncmVzcy1wYWdlc1wiLCBwcm9wcyA9PiB7XG4gIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFN1cnZleVByb2dyZXNzLCBwcm9wcyk7XG59KTtcblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFwic3YtcHJvZ3Jlc3MtcXVlc3Rpb25zXCIsIHByb3BzID0+IHtcbiAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3VydmV5UHJvZ3Jlc3MsIHByb3BzKTtcbn0pO1xuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXG4gIFwic3YtcHJvZ3Jlc3MtY29ycmVjdHF1ZXN0aW9uc1wiLFxuICBwcm9wcyA9PiB7XG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3VydmV5UHJvZ3Jlc3MsIHByb3BzKTtcbiAgfVxuKTtcblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFxuICBcInN2LXByb2dyZXNzLXJlcXVpcmVkcXVlc3Rpb25zXCIsXG4gIHByb3BzID0+IHtcbiAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTdXJ2ZXlQcm9ncmVzcywgcHJvcHMpO1xuICB9XG4pO1xuIiwiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBTdXJ2ZXlQcm9ncmVzc0J1dHRvbnNNb2RlbCwgUGFnZU1vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBTdXJ2ZXlOYXZpZ2F0aW9uQmFzZSB9IGZyb20gXCIuL3JlYWN0U3VydmV5TmF2aWdhdGlvbkJhc2VcIjtcbmltcG9ydCB7IFJlYWN0RWxlbWVudEZhY3RvcnkgfSBmcm9tIFwiLi9lbGVtZW50LWZhY3RvcnlcIjtcblxuZXhwb3J0IGNsYXNzIFN1cnZleVByb2dyZXNzQnV0dG9ucyBleHRlbmRzIFN1cnZleU5hdmlnYXRpb25CYXNlIHtcbiAgcHJpdmF0ZSBwcm9ncmVzc0J1dHRvbnNNb2RlbDogU3VydmV5UHJvZ3Jlc3NCdXR0b25zTW9kZWw7XG4gIHByaXZhdGUgdXBkYXRlU2Nyb2xsZXI6IGFueSA9IHVuZGVmaW5lZDtcbiAgcHJpdmF0ZSBsaXN0Q29udGFpbmVyUmVmOiBSZWFjdC5SZWZPYmplY3Q8SFRNTERpdkVsZW1lbnQ+O1xuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMucHJvZ3Jlc3NCdXR0b25zTW9kZWwgPSBuZXcgU3VydmV5UHJvZ3Jlc3NCdXR0b25zTW9kZWwodGhpcy5zdXJ2ZXkpO1xuICAgIHRoaXMubGlzdENvbnRhaW5lclJlZiA9IFJlYWN0LmNyZWF0ZVJlZigpO1xuICB9XG4gIHJlbmRlcigpOiBKU1guRWxlbWVudCB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPXt0aGlzLmNzcy5wcm9ncmVzc0J1dHRvbnNDb250YWluZXJDZW50ZXJ9PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17dGhpcy5jc3MucHJvZ3Jlc3NCdXR0b25zQ29udGFpbmVyfT5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzc05hbWU9e3RoaXMuZ2V0U2Nyb2xsQnV0dG9uQ3NzKHRydWUpfVxuICAgICAgICAgICAgcm9sZT1cImJ1dHRvblwiXG4gICAgICAgICAgICBvbkNsaWNrPXsoKSA9PlxuICAgICAgICAgICAgICB0aGlzLmNsaWNrU2Nyb2xsQnV0dG9uKHRoaXMubGlzdENvbnRhaW5lclJlZi5jdXJyZW50LCB0cnVlKVxuICAgICAgICAgICAgfVxuICAgICAgICAgID48L2Rpdj5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzc05hbWU9e3RoaXMuY3NzLnByb2dyZXNzQnV0dG9uc0xpc3RDb250YWluZXJ9XG4gICAgICAgICAgICByZWY9e3RoaXMubGlzdENvbnRhaW5lclJlZn1cbiAgICAgICAgICA+XG4gICAgICAgICAgICA8dWwgY2xhc3NOYW1lPXt0aGlzLmNzcy5wcm9ncmVzc0J1dHRvbnNMaXN0fT5cbiAgICAgICAgICAgICAge3RoaXMuZ2V0TGlzdEVsZW1lbnRzKCl9XG4gICAgICAgICAgICA8L3VsPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzTmFtZT17dGhpcy5nZXRTY3JvbGxCdXR0b25Dc3MoZmFsc2UpfVxuICAgICAgICAgICAgcm9sZT1cImJ1dHRvblwiXG4gICAgICAgICAgICBvbkNsaWNrPXsoKSA9PlxuICAgICAgICAgICAgICB0aGlzLmNsaWNrU2Nyb2xsQnV0dG9uKHRoaXMubGlzdENvbnRhaW5lclJlZi5jdXJyZW50LCBmYWxzZSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICA+PC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0TGlzdEVsZW1lbnRzKCk6IEpTWC5FbGVtZW50W10ge1xuICAgIGxldCBidXR0b25zOiBKU1guRWxlbWVudFtdID0gW107XG4gICAgdGhpcy5zdXJ2ZXkudmlzaWJsZVBhZ2VzLmZvckVhY2goKHBhZ2U6IFBhZ2VNb2RlbCwgaW5kZXg6IG51bWJlcikgPT4ge1xuICAgICAgYnV0dG9ucy5wdXNoKHRoaXMucmVuZGVyTGlzdEVsZW1lbnQocGFnZSwgaW5kZXgpKTtcbiAgICB9KTtcbiAgICByZXR1cm4gYnV0dG9ucztcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyTGlzdEVsZW1lbnQocGFnZTogUGFnZU1vZGVsLCBpbmRleDogbnVtYmVyKTogSlNYLkVsZW1lbnQge1xuICAgIHJldHVybiAoXG4gICAgICA8bGlcbiAgICAgICAga2V5PXtcImxpc3RlbGVtZW50XCIgKyBpbmRleH1cbiAgICAgICAgY2xhc3NOYW1lPXt0aGlzLmdldExpc3RFbGVtZW50Q3NzKGluZGV4KX1cbiAgICAgICAgb25DbGljaz17XG4gICAgICAgICAgdGhpcy5pc0xpc3RFbGVtZW50Q2xpY2thYmxlKGluZGV4KVxuICAgICAgICAgICAgPyAoKSA9PiB0aGlzLmNsaWNrTGlzdEVsZW1lbnQoaW5kZXgpXG4gICAgICAgICAgICA6IHVuZGVmaW5lZFxuICAgICAgICB9XG4gICAgICA+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzc05hbWU9e3RoaXMuY3NzLnByb2dyZXNzQnV0dG9uc1BhZ2VUaXRsZX1cbiAgICAgICAgICB0aXRsZT17cGFnZS5uYXZpZ2F0aW9uVGl0bGUgfHwgcGFnZS5uYW1lfVxuICAgICAgICA+XG4gICAgICAgICAge3BhZ2UubmF2aWdhdGlvblRpdGxlIHx8IHBhZ2UubmFtZX1cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzc05hbWU9e3RoaXMuY3NzLnByb2dyZXNzQnV0dG9uc1BhZ2VEZXNjcmlwdGlvbn1cbiAgICAgICAgICB0aXRsZT17cGFnZS5uYXZpZ2F0aW9uRGVzY3JpcHRpb259XG4gICAgICAgID5cbiAgICAgICAgICB7cGFnZS5uYXZpZ2F0aW9uRGVzY3JpcHRpb259XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9saT5cbiAgICApO1xuICB9XG4gIHByb3RlY3RlZCBpc0xpc3RFbGVtZW50Q2xpY2thYmxlKGluZGV4OiBudW1iZXIpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5wcm9ncmVzc0J1dHRvbnNNb2RlbC5pc0xpc3RFbGVtZW50Q2xpY2thYmxlKGluZGV4KTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0TGlzdEVsZW1lbnRDc3MoaW5kZXg6IG51bWJlcik6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucHJvZ3Jlc3NCdXR0b25zTW9kZWwuZ2V0TGlzdEVsZW1lbnRDc3MoaW5kZXgpO1xuICB9XG4gIHByb3RlY3RlZCBjbGlja0xpc3RFbGVtZW50KGluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLnByb2dyZXNzQnV0dG9uc01vZGVsLmNsaWNrTGlzdEVsZW1lbnQoaW5kZXgpO1xuICB9XG4gIHByb3RlY3RlZCBnZXRTY3JvbGxCdXR0b25Dc3MoaXNMZWZ0U2Nyb2xsOiBib29sZWFuKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5wcm9ncmVzc0J1dHRvbnNNb2RlbC5nZXRTY3JvbGxCdXR0b25Dc3ModGhpcy5zdGF0ZS5oYXNTY3JvbGxlciwgaXNMZWZ0U2Nyb2xsKTtcbiAgfVxuICBwcm90ZWN0ZWQgY2xpY2tTY3JvbGxCdXR0b24oXG4gICAgbGlzdENvbnRhaW5lckVsZW1lbnQ6IEVsZW1lbnQgfCBudWxsLFxuICAgIGlzTGVmdFNjcm9sbDogYm9vbGVhblxuICApOiB2b2lkIHtcbiAgICBpZighIWxpc3RDb250YWluZXJFbGVtZW50KSB7XG4gICAgICBsaXN0Q29udGFpbmVyRWxlbWVudC5zY3JvbGxMZWZ0ICs9IChpc0xlZnRTY3JvbGwgPyAtMSA6IDEpICogNzA7XG4gICAgfVxuICB9XG4gIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIHRoaXMudXBkYXRlU2Nyb2xsZXIgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAgICBpZighIXRoaXMubGlzdENvbnRhaW5lclJlZi5jdXJyZW50KSB7XG4gICAgICAgIHRoaXMuc2V0U3RhdGUoeyBoYXNTY3JvbGxlcjogdGhpcy5saXN0Q29udGFpbmVyUmVmLmN1cnJlbnQuc2Nyb2xsV2lkdGggPiB0aGlzLmxpc3RDb250YWluZXJSZWYuY3VycmVudC5vZmZzZXRXaWR0aCwgfSk7XG4gICAgICB9XG4gICAgfSwgMTAwKTtcbiAgfVxuICBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICBpZiAodHlwZW9mIHRoaXMudXBkYXRlU2Nyb2xsZXIgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgIGNsZWFySW50ZXJ2YWwodGhpcy51cGRhdGVTY3JvbGxlcik7XG4gICAgICB0aGlzLnVwZGF0ZVNjcm9sbGVyID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxufVxuXG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcInN2LXByb2dyZXNzLWJ1dHRvbnNcIiwgKHByb3BzKSA9PiB7XG4gIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFN1cnZleVByb2dyZXNzQnV0dG9ucywgcHJvcHMpO1xufSk7XG4iLCJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7XG4gIEJhc2UsXG4gIFN1cnZleUVsZW1lbnQsXG4gIFN1cnZleUVycm9yLFxuICBRdWVzdGlvbixcbiAgUXVlc3Rpb25NYXRyaXhEcm9wZG93blJlbmRlcmVkQ2VsbCxcbiAgVG9vbHRpcE1hbmFnZXIsXG4gIFN1cnZleU1vZGVsXG59IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgUmVhY3RTdXJ2ZXlFbGVtZW50c1dyYXBwZXIgfSBmcm9tIFwiLi9yZWFjdHN1cnZleW1vZGVsXCI7XG5pbXBvcnQgeyBSZWFjdEVsZW1lbnRGYWN0b3J5IH0gZnJvbSBcIi4vZWxlbWVudC1mYWN0b3J5XCI7XG5pbXBvcnQgeyBTdXJ2ZXlFbGVtZW50QmFzZSwgUmVhY3RTdXJ2ZXlFbGVtZW50IH0gZnJvbSBcIi4vcmVhY3RxdWVzdGlvbl9lbGVtZW50XCI7XG5pbXBvcnQgeyBTdXJ2ZXlRdWVzdGlvbkNvbW1lbnRJdGVtIH0gZnJvbSBcIi4vcmVhY3RxdWVzdGlvbl9jb21tZW50XCI7XG5pbXBvcnQgeyBTdXJ2ZXlDdXN0b21XaWRnZXQgfSBmcm9tIFwiLi9jdXN0b20td2lkZ2V0XCI7XG5pbXBvcnQgeyBTdXJ2ZXlFbGVtZW50SGVhZGVyIH0gZnJvbSBcIi4vZWxlbWVudC1oZWFkZXJcIjtcblxuZXhwb3J0IGludGVyZmFjZSBJU3VydmV5Q3JlYXRvciB7XG4gIGNyZWF0ZVF1ZXN0aW9uRWxlbWVudChxdWVzdGlvbjogUXVlc3Rpb24pOiBKU1guRWxlbWVudCB8IG51bGw7XG4gIHJlbmRlckVycm9yKGtleTogc3RyaW5nLCBlcnJvcjogU3VydmV5RXJyb3IsIGNzc0NsYXNzZXM6IGFueSk6IEpTWC5FbGVtZW50O1xuICBxdWVzdGlvblRpdGxlTG9jYXRpb24oKTogc3RyaW5nO1xuICBxdWVzdGlvbkVycm9yTG9jYXRpb24oKTogc3RyaW5nO1xufVxuXG5leHBvcnQgY2xhc3MgU3VydmV5UXVlc3Rpb24gZXh0ZW5kcyBTdXJ2ZXlFbGVtZW50QmFzZTxhbnksIGFueT4ge1xuICBwcml2YXRlIGlzTmVlZEZvY3VzID0gZmFsc2U7XG4gIHB1YmxpYyBzdGF0aWMgcmVuZGVyUXVlc3Rpb25Cb2R5KFxuICAgIGNyZWF0b3I6IElTdXJ2ZXlDcmVhdG9yLFxuICAgIHF1ZXN0aW9uOiBRdWVzdGlvblxuICApOiBKU1guRWxlbWVudCB8IGFueSB7XG4gICAgaWYgKCFxdWVzdGlvbi5pc1Zpc2libGUpIHJldHVybiBudWxsO1xuICAgIHZhciBjdXN0b21XaWRnZXQgPSBxdWVzdGlvbi5jdXN0b21XaWRnZXQ7XG4gICAgaWYgKCFjdXN0b21XaWRnZXQpIHtcbiAgICAgIHJldHVybiBjcmVhdG9yLmNyZWF0ZVF1ZXN0aW9uRWxlbWVudChxdWVzdGlvbik7XG4gICAgfVxuICAgIHJldHVybiA8U3VydmV5Q3VzdG9tV2lkZ2V0IGNyZWF0b3I9e2NyZWF0b3J9IHF1ZXN0aW9uPXtxdWVzdGlvbn0gLz47XG4gIH1cbiAgcHJpdmF0ZSByb290UmVmOiBSZWFjdC5SZWZPYmplY3Q8SFRNTERpdkVsZW1lbnQ+O1xuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMucm9vdFJlZiA9IFJlYWN0LmNyZWF0ZVJlZigpO1xuICB9XG4gIHByb3RlY3RlZCBnZXRTdGF0ZUVsZW1lbnQoKTogQmFzZSB7XG4gICAgcmV0dXJuIHRoaXMucXVlc3Rpb247XG4gIH1cbiAgcHJvdGVjdGVkIGdldCBxdWVzdGlvbigpOiBRdWVzdGlvbiB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuZWxlbWVudDtcbiAgfVxuICBwcml2YXRlIGdldCBjcmVhdG9yKCk6IElTdXJ2ZXlDcmVhdG9yIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5jcmVhdG9yO1xuICB9XG4gIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIHN1cGVyLmNvbXBvbmVudERpZE1vdW50KCk7XG4gICAgaWYgKCEhdGhpcy5xdWVzdGlvbikge1xuICAgICAgdGhpcy5xdWVzdGlvbltcInJlYWN0XCJdID0gdGhpcztcbiAgICB9XG4gICAgdGhpcy5kb0FmdGVyUmVuZGVyKCk7XG4gIH1cbiAgY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgc3VwZXIuY29tcG9uZW50V2lsbFVubW91bnQoKTtcbiAgICBpZiAoISF0aGlzLnF1ZXN0aW9uKSB7XG4gICAgICB0aGlzLnF1ZXN0aW9uW1wicmVhY3RcIl0gPSBudWxsO1xuICAgIH1cbiAgICBjb25zdCBlbCA9IHRoaXMucm9vdFJlZi5jdXJyZW50O1xuICAgIGlmICghIWVsKSB7XG4gICAgICBlbC5yZW1vdmVBdHRyaWJ1dGUoXCJkYXRhLXJlbmRlcmVkXCIpO1xuICAgIH1cbiAgfVxuICBjb21wb25lbnREaWRVcGRhdGUocHJldlByb3BzOiBhbnksIHByZXZTdGF0ZTogYW55KSB7XG4gICAgc3VwZXIuY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wcywgcHJldlN0YXRlKTtcbiAgICB0aGlzLmRvQWZ0ZXJSZW5kZXIoKTtcbiAgfVxuICBwcml2YXRlIGRvQWZ0ZXJSZW5kZXIoKSB7XG4gICAgaWYgKHRoaXMuaXNOZWVkRm9jdXMpIHtcbiAgICAgIGlmICghdGhpcy5xdWVzdGlvbi5pc0NvbGxhcHNlZCkge1xuICAgICAgICB0aGlzLnF1ZXN0aW9uLmNsaWNrVGl0bGVGdW5jdGlvbigpO1xuICAgICAgfVxuICAgICAgdGhpcy5pc05lZWRGb2N1cyA9IGZhbHNlO1xuICAgIH1cbiAgICBpZiAodGhpcy5xdWVzdGlvbikge1xuICAgICAgdmFyIGVsID0gdGhpcy5yb290UmVmLmN1cnJlbnQ7XG4gICAgICBpZiAoZWwgJiYgZWwuZ2V0QXR0cmlidXRlKFwiZGF0YS1yZW5kZXJlZFwiKSAhPT0gXCJyXCIpIHtcbiAgICAgICAgZWwuc2V0QXR0cmlidXRlKFwiZGF0YS1yZW5kZXJlZFwiLCBcInJcIik7XG4gICAgICAgIGVsLnNldEF0dHJpYnV0ZShcImRhdGEtbmFtZVwiLCB0aGlzLnF1ZXN0aW9uLm5hbWUpO1xuICAgICAgICBpZiAodGhpcy5xdWVzdGlvbi5hZnRlclJlbmRlcikge1xuICAgICAgICAgIHRoaXMucXVlc3Rpb24uYWZ0ZXJSZW5kZXIoZWwpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHByb3RlY3RlZCBjYW5SZW5kZXIoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgIHN1cGVyLmNhblJlbmRlcigpICYmXG4gICAgICAhIXRoaXMucXVlc3Rpb24gJiZcbiAgICAgICEhdGhpcy5jcmVhdG9yICYmXG4gICAgICB0aGlzLnF1ZXN0aW9uLmlzVmlzaWJsZVxuICAgICk7XG4gIH1cblxuICBwcm90ZWN0ZWQgcmVuZGVyUXVlc3Rpb25Db250ZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICBsZXQgcXVlc3Rpb24gPSB0aGlzLnF1ZXN0aW9uO1xuICAgIHZhciBjb250ZW50U3R5bGUgPSB7XG4gICAgICBkaXNwbGF5OiAhdGhpcy5xdWVzdGlvbi5pc0NvbGxhcHNlZCA/IFwiXCIgOiBcIm5vbmVcIixcbiAgICB9O1xuICAgIHZhciBjc3NDbGFzc2VzID0gcXVlc3Rpb24uY3NzQ2xhc3NlcztcbiAgICB2YXIgcXVlc3Rpb25SZW5kZXIgPSB0aGlzLnJlbmRlclF1ZXN0aW9uKCk7XG4gICAgdmFyIGVycm9yc1RvcCA9IHRoaXMucXVlc3Rpb24uc2hvd0Vycm9yT25Ub3BcbiAgICAgID8gdGhpcy5yZW5kZXJFcnJvcnMoY3NzQ2xhc3NlcywgXCJ0b3BcIilcbiAgICAgIDogbnVsbDtcbiAgICB2YXIgZXJyb3JzQm90dG9tID0gdGhpcy5xdWVzdGlvbi5zaG93RXJyb3JPbkJvdHRvbVxuICAgICAgPyB0aGlzLnJlbmRlckVycm9ycyhjc3NDbGFzc2VzLCBcImJvdHRvbVwiKVxuICAgICAgOiBudWxsO1xuICAgIHZhciBjb21tZW50ID1cbiAgICAgIHF1ZXN0aW9uICYmIHF1ZXN0aW9uLmhhc0NvbW1lbnQgPyB0aGlzLnJlbmRlckNvbW1lbnQoY3NzQ2xhc3NlcykgOiBudWxsO1xuICAgIGNvbnN0IGVycm9yc1Rvb2x0aXAgPVxuICAgICAgdGhpcy5xdWVzdGlvbi5pc0Vycm9yc01vZGVUb29sdGlwXG4gICAgICAgID8gdGhpcy5yZW5kZXJFcnJvcnMoY3NzQ2xhc3NlcywgXCJ0b29sdGlwXCIpXG4gICAgICAgIDogbnVsbDtcbiAgICB2YXIgZGVzY3JpcHRpb25VbmRlcklucHV0ID0gcXVlc3Rpb24uaGFzRGVzY3JpcHRpb25VbmRlcklucHV0XG4gICAgICA/IHRoaXMucmVuZGVyRGVzY3JpcHRpb24oKVxuICAgICAgOiBudWxsO1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzTmFtZT17cXVlc3Rpb24uY3NzQ29udGVudCB8fCB1bmRlZmluZWR9XG4gICAgICAgIHN0eWxlPXtjb250ZW50U3R5bGV9XG4gICAgICAgIHJvbGU9XCJwcmVzZW50YXRpb25cIlxuICAgICAgPlxuICAgICAgICB7ZXJyb3JzVG9wfVxuICAgICAgICB7cXVlc3Rpb25SZW5kZXJ9XG4gICAgICAgIHtjb21tZW50fVxuICAgICAgICB7ZXJyb3JzQm90dG9tfVxuICAgICAgICB7ZXJyb3JzVG9vbHRpcH1cbiAgICAgICAge2Rlc2NyaXB0aW9uVW5kZXJJbnB1dH1cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIHZhciBxdWVzdGlvbiA9IHRoaXMucXVlc3Rpb247XG4gICAgdmFyIGNzc0NsYXNzZXMgPSBxdWVzdGlvbi5jc3NDbGFzc2VzO1xuICAgIHZhciBoZWFkZXIgPSB0aGlzLnJlbmRlckhlYWRlcihxdWVzdGlvbik7XG4gICAgdmFyIGhlYWRlclRvcCA9IHF1ZXN0aW9uLmhhc1RpdGxlT25MZWZ0VG9wID8gaGVhZGVyIDogbnVsbDtcbiAgICB2YXIgaGVhZGVyQm90dG9tID0gcXVlc3Rpb24uaGFzVGl0bGVPbkJvdHRvbSA/IGhlYWRlciA6IG51bGw7XG5cbiAgICBjb25zdCBlcnJvcnNBYm92ZVF1ZXN0aW9uID0gdGhpcy5xdWVzdGlvbi5zaG93RXJyb3JzQWJvdmVRdWVzdGlvblxuICAgICAgPyB0aGlzLnJlbmRlckVycm9ycyhjc3NDbGFzc2VzLCBcIlwiKVxuICAgICAgOiBudWxsO1xuXG4gICAgY29uc3QgZXJyb3JzQmVsb3dRdWVzdGlvbiA9IHRoaXMucXVlc3Rpb24uc2hvd0Vycm9yc0JlbG93UXVlc3Rpb25cbiAgICAgID8gdGhpcy5yZW5kZXJFcnJvcnMoY3NzQ2xhc3NlcywgXCJcIilcbiAgICAgIDogbnVsbDtcblxuICAgIGxldCByb290U3R5bGU6IHsgW2luZGV4OiBzdHJpbmddOiBhbnkgfSA9IHt9O1xuICAgIGlmICghIXF1ZXN0aW9uLnBhZGRpbmdMZWZ0KSByb290U3R5bGVbXCJwYWRkaW5nTGVmdFwiXSA9IHF1ZXN0aW9uLnBhZGRpbmdMZWZ0O1xuICAgIGlmICghIXF1ZXN0aW9uLnBhZGRpbmdSaWdodClcbiAgICAgIHJvb3RTdHlsZVtcInBhZGRpbmdSaWdodFwiXSA9IHF1ZXN0aW9uLnBhZGRpbmdSaWdodDtcblxuICAgIGxldCBxdWVzdGlvbkNvbnRlbnQgPSB0aGlzLndyYXBRdWVzdGlvbkNvbnRlbnQodGhpcy5yZW5kZXJRdWVzdGlvbkNvbnRlbnQoKSk7XG4gICAgcmV0dXJuIChcbiAgICAgIDw+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICByZWY9e3RoaXMucm9vdFJlZn1cbiAgICAgICAgICBpZD17cXVlc3Rpb24uaWR9XG4gICAgICAgICAgY2xhc3NOYW1lPXtxdWVzdGlvbi5nZXRSb290Q3NzKCl9XG4gICAgICAgICAgc3R5bGU9e3Jvb3RTdHlsZX1cbiAgICAgICAgICByb2xlPXtxdWVzdGlvbi5hcmlhUm9sZX1cbiAgICAgICAgICBhcmlhLXJlcXVpcmVkPXt0aGlzLnF1ZXN0aW9uLmFyaWFSZXF1aXJlZH1cbiAgICAgICAgICBhcmlhLWludmFsaWQ9e3RoaXMucXVlc3Rpb24uYXJpYUludmFsaWR9XG4gICAgICAgICAgYXJpYS1sYWJlbGxlZGJ5PXtxdWVzdGlvbi5hcmlhTGFiZWxsZWRCeX1cbiAgICAgICAgPlxuICAgICAgICAgIHtlcnJvcnNBYm92ZVF1ZXN0aW9ufVxuICAgICAgICAgIHtoZWFkZXJUb3B9XG4gICAgICAgICAge3F1ZXN0aW9uQ29udGVudH1cbiAgICAgICAgICB7aGVhZGVyQm90dG9tfVxuICAgICAgICAgIHtlcnJvcnNCZWxvd1F1ZXN0aW9ufVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvPlxuICAgICk7XG4gIH1cbiAgcHJvdGVjdGVkIHdyYXBFbGVtZW50KGVsZW1lbnQ6IEpTWC5FbGVtZW50KTogSlNYLkVsZW1lbnQge1xuICAgIGNvbnN0IHN1cnZleTogU3VydmV5TW9kZWwgPSB0aGlzLnF1ZXN0aW9uLnN1cnZleSBhcyBTdXJ2ZXlNb2RlbDtcbiAgICBsZXQgd3JhcHBlcjogSlNYLkVsZW1lbnQgfCBudWxsID0gbnVsbDtcbiAgICBpZiAoc3VydmV5KSB7XG4gICAgICB3cmFwcGVyID0gUmVhY3RTdXJ2ZXlFbGVtZW50c1dyYXBwZXIud3JhcEVsZW1lbnQoc3VydmV5LCBlbGVtZW50LCB0aGlzLnF1ZXN0aW9uKTtcbiAgICB9XG4gICAgcmV0dXJuIHdyYXBwZXIgPz8gZWxlbWVudDtcbiAgfVxuICBwcm90ZWN0ZWQgd3JhcFF1ZXN0aW9uQ29udGVudChlbGVtZW50OiBKU1guRWxlbWVudCk6IEpTWC5FbGVtZW50IHtcbiAgICBjb25zdCBzdXJ2ZXk6IFN1cnZleU1vZGVsID0gdGhpcy5xdWVzdGlvbi5zdXJ2ZXkgYXMgU3VydmV5TW9kZWw7XG4gICAgbGV0IHdyYXBwZXI6IEpTWC5FbGVtZW50IHwgbnVsbCA9IG51bGw7XG4gICAgaWYgKHN1cnZleSkge1xuICAgICAgd3JhcHBlciA9IFJlYWN0U3VydmV5RWxlbWVudHNXcmFwcGVyLndyYXBRdWVzdGlvbkNvbnRlbnQoc3VydmV5LCBlbGVtZW50LCB0aGlzLnF1ZXN0aW9uKTtcbiAgICB9XG4gICAgcmV0dXJuIHdyYXBwZXIgPz8gZWxlbWVudDtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyUXVlc3Rpb24oKTogSlNYLkVsZW1lbnQge1xuICAgIHJldHVybiBTdXJ2ZXlRdWVzdGlvbi5yZW5kZXJRdWVzdGlvbkJvZHkodGhpcy5jcmVhdG9yLCB0aGlzLnF1ZXN0aW9uKTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyRGVzY3JpcHRpb24oKTogSlNYLkVsZW1lbnQge1xuICAgIHJldHVybiBTdXJ2ZXlFbGVtZW50QmFzZS5yZW5kZXJRdWVzdGlvbkRlc2NyaXB0aW9uKHRoaXMucXVlc3Rpb24pO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJDb21tZW50KGNzc0NsYXNzZXM6IGFueSk6IEpTWC5FbGVtZW50IHtcbiAgICB2YXIgY29tbWVudFRleHQgPSBTdXJ2ZXlFbGVtZW50QmFzZS5yZW5kZXJMb2NTdHJpbmcoXG4gICAgICB0aGlzLnF1ZXN0aW9uLmxvY0NvbW1lbnRUZXh0XG4gICAgKTtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9e3RoaXMucXVlc3Rpb24uY3NzQ2xhc3Nlcy5mb3JtR3JvdXB9PlxuICAgICAgICA8ZGl2Pntjb21tZW50VGV4dH08L2Rpdj5cbiAgICAgICAgPFN1cnZleVF1ZXN0aW9uQ29tbWVudEl0ZW1cbiAgICAgICAgICBxdWVzdGlvbj17dGhpcy5xdWVzdGlvbn1cbiAgICAgICAgICBjc3NDbGFzc2VzPXtjc3NDbGFzc2VzfVxuICAgICAgICAgIG90aGVyQ3NzPXtjc3NDbGFzc2VzLm90aGVyfVxuICAgICAgICAgIGlzRGlzcGxheU1vZGU9e3RoaXMucXVlc3Rpb24uaXNJbnB1dFJlYWRPbmx5fVxuICAgICAgICAvPlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVySGVhZGVyKHF1ZXN0aW9uOiBRdWVzdGlvbik6IEpTWC5FbGVtZW50IHtcbiAgICByZXR1cm4gPFN1cnZleUVsZW1lbnRIZWFkZXIgZWxlbWVudD17cXVlc3Rpb259PjwvU3VydmV5RWxlbWVudEhlYWRlcj47XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckVycm9ycyhjc3NDbGFzc2VzOiBhbnksIGxvY2F0aW9uOiBzdHJpbmcpOiBKU1guRWxlbWVudCB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxTdXJ2ZXlFbGVtZW50RXJyb3JzXG4gICAgICAgIGVsZW1lbnQ9e3RoaXMucXVlc3Rpb259XG4gICAgICAgIGNzc0NsYXNzZXM9e2Nzc0NsYXNzZXN9XG4gICAgICAgIGNyZWF0b3I9e3RoaXMuY3JlYXRvcn1cbiAgICAgICAgbG9jYXRpb249e2xvY2F0aW9ufVxuICAgICAgICBpZD17dGhpcy5xdWVzdGlvbi5pZCArIFwiX2Vycm9yc1wifVxuICAgICAgLz5cbiAgICApO1xuICB9XG59XG5cblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFwicXVlc3Rpb25cIiwgKHByb3BzKSA9PiB7XG4gIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFN1cnZleVF1ZXN0aW9uLCBwcm9wcyk7XG59KTtcblxuZXhwb3J0IGNsYXNzIFN1cnZleUVsZW1lbnRFcnJvcnMgZXh0ZW5kcyBSZWFjdFN1cnZleUVsZW1lbnQge1xuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMuc3RhdGUgPSB0aGlzLmdldFN0YXRlKCk7XG4gICAgdGhpcy50b29sdGlwUmVmID0gUmVhY3QuY3JlYXRlUmVmKCk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldCBpZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByb3BzLmlkO1xuICB9XG4gIHByb3RlY3RlZCBnZXQgZWxlbWVudCgpOiBTdXJ2ZXlFbGVtZW50IHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5lbGVtZW50O1xuICB9XG4gIHByaXZhdGUgZ2V0IGNyZWF0b3IoKTogSVN1cnZleUNyZWF0b3Ige1xuICAgIHJldHVybiB0aGlzLnByb3BzLmNyZWF0b3I7XG4gIH1cbiAgcHJvdGVjdGVkIGdldCBsb2NhdGlvbigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByb3BzLmxvY2F0aW9uO1xuICB9XG4gIHByaXZhdGUgZ2V0U3RhdGUocHJldlN0YXRlOiBhbnkgPSBudWxsKSB7XG4gICAgcmV0dXJuICFwcmV2U3RhdGUgPyB7IGVycm9yOiAwIH0gOiB7IGVycm9yOiBwcmV2U3RhdGUuZXJyb3IgKyAxIH07XG4gIH1cbiAgcHJvdGVjdGVkIGNhblJlbmRlcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISF0aGlzLmVsZW1lbnQgJiYgdGhpcy5lbGVtZW50Lmhhc1Zpc2libGVFcnJvcnM7XG4gIH1cbiAgcHJpdmF0ZSB0b29sdGlwTWFuYWdlcjogVG9vbHRpcE1hbmFnZXIgfCB1bmRlZmluZWQ7XG4gIHByaXZhdGUgdG9vbHRpcFJlZjogUmVhY3QuUmVmT2JqZWN0PEhUTUxEaXZFbGVtZW50PjtcbiAgY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wczogYW55LCBwcmV2U3RhdGU6IGFueSkge1xuICAgIHN1cGVyLmNvbXBvbmVudERpZFVwZGF0ZShwcmV2UHJvcHMsIHByZXZTdGF0ZSk7XG4gICAgaWYgKHRoaXMucHJvcHMubG9jYXRpb24gPT0gXCJ0b29sdGlwXCIpIHtcbiAgICAgIGlmICh0aGlzLnRvb2x0aXBSZWYuY3VycmVudCAmJiAhdGhpcy50b29sdGlwTWFuYWdlcikge1xuICAgICAgICB0aGlzLnRvb2x0aXBNYW5hZ2VyID0gbmV3IFRvb2x0aXBNYW5hZ2VyKHRoaXMudG9vbHRpcFJlZi5jdXJyZW50KTtcbiAgICAgIH1cbiAgICAgIGlmICghIXRoaXMudG9vbHRpcE1hbmFnZXIgJiYgIXRoaXMudG9vbHRpcFJlZi5jdXJyZW50KSB7XG4gICAgICAgIHRoaXMuZGlzcG9zZVRvb2x0aXBNYW5hZ2VyKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgIGlmICghIXRoaXMudG9vbHRpcE1hbmFnZXIpIHtcbiAgICAgIHRoaXMuZGlzcG9zZVRvb2x0aXBNYW5hZ2VyKCk7XG4gICAgfVxuICB9XG4gIHByaXZhdGUgZGlzcG9zZVRvb2x0aXBNYW5hZ2VyKCkge1xuICAgIHRoaXMudG9vbHRpcE1hbmFnZXI/LmRpc3Bvc2UoKTtcbiAgICB0aGlzLnRvb2x0aXBNYW5hZ2VyID0gdW5kZWZpbmVkO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICBjb25zdCBlcnJvcnM6QXJyYXk8SlNYLkVsZW1lbnQ+ID0gW107XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmVsZW1lbnQuZXJyb3JzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBrZXk6IHN0cmluZyA9IFwiZXJyb3JcIiArIGk7XG4gICAgICBlcnJvcnMucHVzaChcbiAgICAgICAgdGhpcy5jcmVhdG9yLnJlbmRlckVycm9yKGtleSwgdGhpcy5lbGVtZW50LmVycm9yc1tpXSwgdGhpcy5jc3NDbGFzc2VzKVxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gKFxuICAgICAgPGRpdlxuICAgICAgICByb2xlPVwiYWxlcnRcIlxuICAgICAgICBhcmlhLWxpdmU9XCJwb2xpdGVcIlxuICAgICAgICBjbGFzc05hbWU9e3RoaXMuZWxlbWVudC5jc3NFcnJvcn1cbiAgICAgICAgaWQ9e3RoaXMuaWR9XG4gICAgICAgIHJlZj17dGhpcy50b29sdGlwUmVmfVxuICAgICAgPlxuICAgICAgICB7ZXJyb3JzfVxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxufVxuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgU3VydmV5UXVlc3Rpb25BbmRFcnJvcnNXcmFwcGVkIGV4dGVuZHMgUmVhY3RTdXJ2ZXlFbGVtZW50IHtcbiAgW2luZGV4OiBzdHJpbmddOiBhbnk7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldFN0YXRlRWxlbWVudCgpOiBCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5xdWVzdGlvbjtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IHF1ZXN0aW9uKCk6IFF1ZXN0aW9uIHtcbiAgICByZXR1cm4gdGhpcy5nZXRRdWVzdGlvbigpO1xuICB9XG4gIHByb3RlY3RlZCBnZXQgY3JlYXRvcigpOiBJU3VydmV5Q3JlYXRvciB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuY3JlYXRvcjtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0UXVlc3Rpb24oKTogUXVlc3Rpb24ge1xuICAgIHJldHVybiB0aGlzLnByb3BzLnF1ZXN0aW9uO1xuICB9XG4gIHByb3RlY3RlZCBnZXQgaXRlbUNzcygpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByb3BzLml0ZW1Dc3M7XG4gIH1cbiAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgc3VwZXIuY29tcG9uZW50RGlkTW91bnQoKTtcbiAgICB0aGlzLmRvQWZ0ZXJSZW5kZXIoKTtcbiAgfVxuICBjb21wb25lbnREaWRVcGRhdGUocHJldlByb3BzOiBhbnksIHByZXZTdGF0ZTogYW55KSB7XG4gICAgc3VwZXIuY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wcywgcHJldlN0YXRlKTtcbiAgICB0aGlzLmRvQWZ0ZXJSZW5kZXIoKTtcbiAgfVxuICBwcm90ZWN0ZWQgZG9BZnRlclJlbmRlcigpIHsgfVxuICBwcm90ZWN0ZWQgY2FuUmVuZGVyKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIXRoaXMucXVlc3Rpb247XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckVycm9ycyhlcnJvcnNMb2NhdGlvbjogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0U2hvd0Vycm9ycygpID8gKFxuICAgICAgPFN1cnZleUVsZW1lbnRFcnJvcnNcbiAgICAgICAgZWxlbWVudD17dGhpcy5xdWVzdGlvbn1cbiAgICAgICAgY3NzQ2xhc3Nlcz17dGhpcy5jc3NDbGFzc2VzfVxuICAgICAgICBjcmVhdG9yPXt0aGlzLmNyZWF0b3J9XG4gICAgICAgIGxvY2F0aW9uPXtlcnJvcnNMb2NhdGlvbn1cbiAgICAgIC8+XG4gICAgKSA6IG51bGw7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckNvbnRlbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIHZhciBlcnJvcnNMb2NhdGlvbiA9IHRoaXMuY3JlYXRvci5xdWVzdGlvbkVycm9yTG9jYXRpb24oKTtcbiAgICB2YXIgZXJyb3JzID0gdGhpcy5yZW5kZXJFcnJvcnMoZXJyb3JzTG9jYXRpb24pO1xuICAgIHZhciBlcnJvcnNUb3AgPSB0aGlzLnF1ZXN0aW9uLnNob3dFcnJvck9uVG9wXG4gICAgICA/IGVycm9yc1xuICAgICAgOiBudWxsO1xuICAgIHZhciBlcnJvcnNCb3R0b20gPSB0aGlzLnF1ZXN0aW9uLnNob3dFcnJvck9uQm90dG9tXG4gICAgICA/IGVycm9yc1xuICAgICAgOiBudWxsO1xuICAgIHZhciByZW5kZXJlZFF1ZXN0aW9uID0gdGhpcy5yZW5kZXJRdWVzdGlvbigpO1xuICAgIHJldHVybiAoXG4gICAgICA8PlxuICAgICAgICB7ZXJyb3JzVG9wfVxuICAgICAgICB7cmVuZGVyZWRRdWVzdGlvbn1cbiAgICAgICAge2Vycm9yc0JvdHRvbX1cbiAgICAgIDwvPlxuICAgICk7XG4gIH1cbiAgcHJvdGVjdGVkIGFic3RyYWN0IHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQ7XG4gIHByb3RlY3RlZCBnZXRTaG93RXJyb3JzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnF1ZXN0aW9uLmlzVmlzaWJsZTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyUXVlc3Rpb24oKTogSlNYLkVsZW1lbnQge1xuICAgIHJldHVybiBTdXJ2ZXlRdWVzdGlvbi5yZW5kZXJRdWVzdGlvbkJvZHkodGhpcy5jcmVhdG9yLCB0aGlzLnF1ZXN0aW9uKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgU3VydmV5UXVlc3Rpb25BbmRFcnJvcnNDZWxsIGV4dGVuZHMgU3VydmV5UXVlc3Rpb25BbmRFcnJvcnNXcmFwcGVkIHtcbiAgW2luZGV4OiBzdHJpbmddOiBhbnk7XG4gIHByb3RlY3RlZCBjZWxsUmVmOiBSZWFjdC5SZWZPYmplY3Q8SFRNTFRhYmxlQ2VsbEVsZW1lbnQ+O1xuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMuY2VsbFJlZiA9IFJlYWN0LmNyZWF0ZVJlZigpO1xuICB9XG4gIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgIHN1cGVyLmNvbXBvbmVudFdpbGxVbm1vdW50KCk7XG4gICAgaWYgKHRoaXMucXVlc3Rpb24pIHtcbiAgICAgIHZhciBlbCA9IHRoaXMuY2VsbFJlZi5jdXJyZW50O1xuICAgICAgaWYgKCEhZWwpIHtcbiAgICAgICAgZWwucmVtb3ZlQXR0cmlidXRlKFwiZGF0YS1yZW5kZXJlZFwiKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIHZhciBzdHlsZSA9IHRoaXMuZ2V0Q2VsbFN0eWxlKCk7XG4gICAgdmFyIGVycm9yc1Rvb2x0aXAgPSB0aGlzLnF1ZXN0aW9uLmlzRXJyb3JzTW9kZVRvb2x0aXBcbiAgICAgID8gdGhpcy5yZW5kZXJFcnJvcnMoXCJ0b29sdGlwXCIpXG4gICAgICA6IG51bGw7XG4gICAgcmV0dXJuIChcbiAgICAgIDx0ZFxuICAgICAgICByZWY9e3RoaXMuY2VsbFJlZn1cbiAgICAgICAgY2xhc3NOYW1lPXt0aGlzLml0ZW1Dc3N9XG4gICAgICAgIGRhdGEtcmVzcG9uc2l2ZS10aXRsZT17dGhpcy5nZXRIZWFkZXJUZXh0KCl9XG4gICAgICAgIHRpdGxlPXt0aGlzLnByb3BzLmNlbGwuZ2V0VGl0bGUoKX1cbiAgICAgICAgc3R5bGU9e3N0eWxlfVxuICAgICAgPlxuICAgICAgICB7dGhpcy53cmFwQ2VsbCh0aGlzLnByb3BzLmNlbGwsXG4gICAgICAgICAgKFxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3RoaXMuY3NzQ2xhc3Nlcy5jZWxsUXVlc3Rpb25XcmFwcGVyfT5cbiAgICAgICAgICAgICAge3RoaXMucmVuZGVyQ29udGVudCgpfVxuICAgICAgICAgICAgICB7ZXJyb3JzVG9vbHRpcH1cbiAgICAgICAgICAgIDwvZGl2PilcbiAgICAgICAgKX1cbiAgICAgIDwvdGQ+XG4gICAgKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0Q2VsbFN0eWxlKCk6IGFueSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgcHJvdGVjdGVkIGdldEhlYWRlclRleHQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gXCJcIjtcbiAgfVxuICBwcm90ZWN0ZWQgd3JhcENlbGwoXG4gICAgY2VsbDogUXVlc3Rpb25NYXRyaXhEcm9wZG93blJlbmRlcmVkQ2VsbCxcbiAgICBlbGVtZW50OiBKU1guRWxlbWVudFxuICApOiBKU1guRWxlbWVudCB7XG4gICAgaWYgKCFjZWxsKSB7XG4gICAgICByZXR1cm4gZWxlbWVudDtcbiAgICB9XG4gICAgY29uc3Qgc3VydmV5OiBTdXJ2ZXlNb2RlbCA9IHRoaXMucXVlc3Rpb24uc3VydmV5IGFzIFN1cnZleU1vZGVsO1xuICAgIGxldCB3cmFwcGVyOiBKU1guRWxlbWVudCB8IG51bGwgPSBudWxsO1xuICAgIGlmIChzdXJ2ZXkpIHtcbiAgICAgIHdyYXBwZXIgPSBSZWFjdFN1cnZleUVsZW1lbnRzV3JhcHBlci53cmFwTWF0cml4Q2VsbChzdXJ2ZXksIGVsZW1lbnQsIGNlbGwpO1xuICAgIH1cbiAgICByZXR1cm4gd3JhcHBlciA/PyBlbGVtZW50O1xuICB9XG59XG4iLCJpbXBvcnQgeyBTdXJ2ZXlRdWVzdGlvbkVsZW1lbnRCYXNlIH0gZnJvbSBcIi4vcmVhY3RxdWVzdGlvbl9lbGVtZW50XCI7XG5pbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBSZWFjdEVsZW1lbnRGYWN0b3J5IH0gZnJvbSBcIi4vZWxlbWVudC1mYWN0b3J5XCI7XG5pbXBvcnQgeyBTdXJ2ZXlFbGVtZW50QmFzZSB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fZWxlbWVudFwiO1xuaW1wb3J0IHsgU3ZnSWNvbiB9IGZyb20gXCIuL2NvbXBvbmVudHMvc3ZnLWljb24vc3ZnLWljb25cIjtcbmltcG9ydCB7XG4gIFF1ZXN0aW9uQnV0dG9uR3JvdXBNb2RlbCxcbiAgQnV0dG9uR3JvdXBJdGVtVmFsdWUsXG4gIEJ1dHRvbkdyb3VwSXRlbU1vZGVsLFxufSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFJlYWN0UXVlc3Rpb25GYWN0b3J5IH0gZnJvbSBcIi4vcmVhY3RxdWVzdGlvbl9mYWN0b3J5XCI7XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlRdWVzdGlvbkJ1dHRvbkdyb3VwIGV4dGVuZHMgU3VydmV5UXVlc3Rpb25FbGVtZW50QmFzZSB7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldCBxdWVzdGlvbigpOiBRdWVzdGlvbkJ1dHRvbkdyb3VwTW9kZWwge1xuICAgIHJldHVybiB0aGlzLnF1ZXN0aW9uQmFzZSBhcyBRdWVzdGlvbkJ1dHRvbkdyb3VwTW9kZWw7XG4gIH1cbiAgZ2V0U3RhdGVFbGVtZW50KCkge1xuICAgIHJldHVybiB0aGlzLnF1ZXN0aW9uO1xuICB9XG4gIHJlbmRlckVsZW1lbnQoKSB7XG4gICAgY29uc3QgaXRlbXMgPSB0aGlzLnJlbmRlckl0ZW1zKCk7XG4gICAgcmV0dXJuIDxkaXYgY2xhc3NOYW1lPXt0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMucm9vdH0+e2l0ZW1zfTwvZGl2PjtcbiAgfVxuICByZW5kZXJJdGVtcygpIHtcbiAgICByZXR1cm4gdGhpcy5xdWVzdGlvbi52aXNpYmxlQ2hvaWNlcy5tYXAoXG4gICAgICAoaXRlbTogQnV0dG9uR3JvdXBJdGVtVmFsdWUsIGluZGV4OiBudW1iZXIpID0+IHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICA8U3VydmV5QnV0dG9uR3JvdXBJdGVtXG4gICAgICAgICAgICBrZXk9e3RoaXMucXVlc3Rpb24uaW5wdXRJZCArIFwiX1wiICsgaW5kZXh9XG4gICAgICAgICAgICBpdGVtPXtpdGVtfVxuICAgICAgICAgICAgcXVlc3Rpb249e3RoaXMucXVlc3Rpb259XG4gICAgICAgICAgICBpbmRleD17aW5kZXh9XG4gICAgICAgICAgPjwvU3VydmV5QnV0dG9uR3JvdXBJdGVtPlxuICAgICAgICApO1xuICAgICAgfVxuICAgICk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFN1cnZleUJ1dHRvbkdyb3VwSXRlbSBleHRlbmRzIFN1cnZleUVsZW1lbnRCYXNlPGFueSwgYW55PiB7XG4gIHB1YmxpYyBtb2RlbDogQnV0dG9uR3JvdXBJdGVtTW9kZWw7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gIH1cbiAgZ2V0IGluZGV4KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuaW5kZXg7XG4gIH1cbiAgZ2V0IHF1ZXN0aW9uKCk6IFF1ZXN0aW9uQnV0dG9uR3JvdXBNb2RlbCB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMucXVlc3Rpb247XG4gIH1cbiAgZ2V0IGl0ZW0oKTogQnV0dG9uR3JvdXBJdGVtVmFsdWUge1xuICAgIHJldHVybiB0aGlzLnByb3BzLml0ZW07XG4gIH1cbiAgZ2V0U3RhdGVFbGVtZW50KCkge1xuICAgIHJldHVybiB0aGlzLml0ZW07XG4gIH1cbiAgcHVibGljIHJlbmRlckVsZW1lbnQoKSB7XG4gICAgdGhpcy5tb2RlbCA9IG5ldyBCdXR0b25Hcm91cEl0ZW1Nb2RlbCh0aGlzLnF1ZXN0aW9uLCB0aGlzLml0ZW0sIHRoaXMuaW5kZXgpO1xuICAgIGNvbnN0IGljb24gPSB0aGlzLnJlbmRlckljb24oKTtcbiAgICBjb25zdCBpbnB1dCA9IHRoaXMucmVuZGVySW5wdXQoKTtcbiAgICBjb25zdCBjYXB0aW9uID0gdGhpcy5yZW5kZXJDYXB0aW9uKCk7XG4gICAgcmV0dXJuIChcbiAgICAgIDxsYWJlbFxuICAgICAgICByb2xlPVwicmFkaW9cIlxuICAgICAgICBjbGFzc05hbWU9e3RoaXMubW9kZWwuY3NzLmxhYmVsfVxuICAgICAgICB0aXRsZT17dGhpcy5tb2RlbC5jYXB0aW9uLnJlbmRlcmVkSHRtbH1cbiAgICAgID5cbiAgICAgICAge2lucHV0fVxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17dGhpcy5tb2RlbC5jc3MuZGVjb3JhdG9yfT5cbiAgICAgICAgICB7aWNvbn1cbiAgICAgICAgICB7Y2FwdGlvbn1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2xhYmVsPlxuICAgICk7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckljb24oKSB7XG4gICAgaWYgKCEhdGhpcy5tb2RlbC5pY29uTmFtZSkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPFN2Z0ljb25cbiAgICAgICAgICBjbGFzc05hbWU9e3RoaXMubW9kZWwuY3NzLmljb259XG4gICAgICAgICAgaWNvbk5hbWU9e3RoaXMubW9kZWwuaWNvbk5hbWV9XG4gICAgICAgICAgc2l6ZT17dGhpcy5tb2RlbC5pY29uU2l6ZSB8fCAyNH1cbiAgICAgICAgPjwvU3ZnSWNvbj5cbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJJbnB1dCgpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPGlucHV0XG4gICAgICAgIGNsYXNzTmFtZT17dGhpcy5tb2RlbC5jc3MuY29udHJvbH1cbiAgICAgICAgaWQ9e3RoaXMubW9kZWwuaWR9XG4gICAgICAgIHR5cGU9XCJyYWRpb1wiXG4gICAgICAgIG5hbWU9e3RoaXMubW9kZWwubmFtZX1cbiAgICAgICAgY2hlY2tlZD17dGhpcy5tb2RlbC5zZWxlY3RlZH1cbiAgICAgICAgdmFsdWU9e3RoaXMubW9kZWwudmFsdWV9XG4gICAgICAgIGRpc2FibGVkPXt0aGlzLm1vZGVsLnJlYWRPbmx5fVxuICAgICAgICBvbkNoYW5nZT17KCkgPT4ge1xuICAgICAgICAgIHRoaXMubW9kZWwub25DaGFuZ2UoKTtcbiAgICAgICAgfX1cbiAgICAgICAgYXJpYS1yZXF1aXJlZD17dGhpcy5tb2RlbC5pc1JlcXVpcmVkfVxuICAgICAgICBhcmlhLWxhYmVsPXt0aGlzLm1vZGVsLmNhcHRpb24ucmVuZGVyZWRIdG1sfVxuICAgICAgICBhcmlhLWludmFsaWQ9e3RoaXMubW9kZWwuaGFzRXJyb3JzfVxuICAgICAgICBhcmlhLWRlc2NyaWJlZGJ5PXt0aGlzLm1vZGVsLmRlc2NyaWJlZEJ5fVxuICAgICAgICByb2xlPVwicmFkaW9cIlxuICAgICAgLz5cbiAgICApO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJDYXB0aW9uKCkge1xuICAgIGlmICghdGhpcy5tb2RlbC5zaG93Q2FwdGlvbikgcmV0dXJuIG51bGw7XG4gICAgbGV0IGNhcHRpb24gPSB0aGlzLnJlbmRlckxvY1N0cmluZyh0aGlzLm1vZGVsLmNhcHRpb24pO1xuICAgIHJldHVybiAoXG4gICAgICA8c3BhblxuICAgICAgICBjbGFzc05hbWU9e3RoaXMubW9kZWwuY3NzLmNhcHRpb259XG4gICAgICAgIHRpdGxlPXt0aGlzLm1vZGVsLmNhcHRpb24ucmVuZGVyZWRIdG1sfVxuICAgICAgPlxuICAgICAgICB7Y2FwdGlvbn1cbiAgICAgIDwvc3Bhbj5cbiAgICApO1xuICB9XG59XG5cbi8vIFJlYWN0UXVlc3Rpb25GYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyUXVlc3Rpb24oXCJidXR0b25ncm91cFwiLCBwcm9wcyA9PiB7XG4vLyAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFN1cnZleVF1ZXN0aW9uQnV0dG9uR3JvdXAsIHByb3BzKTtcbi8vIH0pO1xuIiwiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQge1xuICBSZWFjdFN1cnZleUVsZW1lbnQsXG4gIFN1cnZleVF1ZXN0aW9uRWxlbWVudEJhc2UsXG59IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fZWxlbWVudFwiO1xuaW1wb3J0IHsgU3VydmV5UXVlc3Rpb25Db21tZW50SXRlbSB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fY29tbWVudFwiO1xuaW1wb3J0IHsgUmVhY3RRdWVzdGlvbkZhY3RvcnkgfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uX2ZhY3RvcnlcIjtcbmltcG9ydCB7IFJlYWN0U3VydmV5RWxlbWVudHNXcmFwcGVyIH0gZnJvbSBcIi4vcmVhY3RzdXJ2ZXltb2RlbFwiO1xuaW1wb3J0IHsgQmFzZSwgSXRlbVZhbHVlLCBTdXJ2ZXlNb2RlbCwgUXVlc3Rpb25DaGVja2JveE1vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBSZWFjdEVsZW1lbnRGYWN0b3J5IH0gZnJvbSBcIi4vZWxlbWVudC1mYWN0b3J5XCI7XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlRdWVzdGlvbkNoZWNrYm94IGV4dGVuZHMgU3VydmV5UXVlc3Rpb25FbGVtZW50QmFzZSB7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldCBxdWVzdGlvbigpOiBRdWVzdGlvbkNoZWNrYm94TW9kZWwge1xuICAgIHJldHVybiB0aGlzLnF1ZXN0aW9uQmFzZSBhcyBRdWVzdGlvbkNoZWNrYm94TW9kZWw7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIHZhciBjc3NDbGFzc2VzID0gdGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzO1xuICAgIHJldHVybiAoXG4gICAgICA8ZmllbGRzZXRcbiAgICAgICAgcm9sZT1cInByZXNlbnRhdGlvblwiXG4gICAgICAgIGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5nZXRTZWxlY3RCYXNlUm9vdENzcygpfVxuICAgICAgICByZWY9eyhmaWVsZHNldCkgPT4gKHRoaXMuc2V0Q29udHJvbChmaWVsZHNldCkpfVxuICAgICAgPlxuICAgICAgICA8bGVnZW5kIHJvbGU9XCJwcmVzZW50YXRpb25cIiBjbGFzc05hbWU9e1wic3YtaGlkZGVuXCJ9PjwvbGVnZW5kPlxuICAgICAgICB7dGhpcy5nZXRIZWFkZXIoKX1cbiAgICAgICAge3RoaXMucXVlc3Rpb24uaGFzQ29sdW1uc1xuICAgICAgICAgID8gdGhpcy5nZXRDb2x1bW5lZEJvZHkoY3NzQ2xhc3NlcylcbiAgICAgICAgICA6IHRoaXMuZ2V0Qm9keShjc3NDbGFzc2VzKX1cbiAgICAgICAge3RoaXMuZ2V0Rm9vdGVyKCl9XG4gICAgICAgIHt0aGlzLnF1ZXN0aW9uLmlzT3RoZXJTZWxlY3RlZCA/IHRoaXMucmVuZGVyT3RoZXIoKSA6IG51bGx9XG4gICAgICA8L2ZpZWxkc2V0PlxuICAgICk7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0SGVhZGVyKCkge1xuICAgIGlmICh0aGlzLnF1ZXN0aW9uLmhhc0hlYWRJdGVtcykge1xuICAgICAgcmV0dXJuIHRoaXMucXVlc3Rpb24uaGVhZEl0ZW1zLm1hcCgoaXRlbTogYW55LCBpaTogbnVtYmVyKSA9PlxuICAgICAgICB0aGlzLnJlbmRlckl0ZW0oXG4gICAgICAgICAgXCJpdGVtX2hcIiArIGlpLFxuICAgICAgICAgIGl0ZW0sXG4gICAgICAgICAgZmFsc2UsXG4gICAgICAgICAgdGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgfVxuICB9XG4gIHByb3RlY3RlZCBnZXRGb290ZXIoKSB7XG4gICAgaWYgKHRoaXMucXVlc3Rpb24uaGFzRm9vdEl0ZW1zKSB7XG4gICAgICByZXR1cm4gdGhpcy5xdWVzdGlvbi5mb290SXRlbXMubWFwKChpdGVtOiBhbnksIGlpOiBudW1iZXIpID0+XG4gICAgICAgIHRoaXMucmVuZGVySXRlbShcbiAgICAgICAgICBcIml0ZW1fZlwiICsgaWksXG4gICAgICAgICAgaXRlbSxcbiAgICAgICAgICBmYWxzZSxcbiAgICAgICAgICB0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXNcbiAgICAgICAgKVxuICAgICAgKTtcbiAgICB9XG4gIH1cbiAgcHJvdGVjdGVkIGdldENvbHVtbmVkQm9keShjc3NDbGFzc2VzOiBhbnkpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9e2Nzc0NsYXNzZXMucm9vdE11bHRpQ29sdW1ufT5cbiAgICAgICAge3RoaXMuZ2V0Q29sdW1ucyhjc3NDbGFzc2VzKX1cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldENvbHVtbnMoY3NzQ2xhc3NlczogYW55KSB7XG4gICAgcmV0dXJuIHRoaXMucXVlc3Rpb24uY29sdW1ucy5tYXAoKGNvbHVtbjogYW55LCBjaTogbnVtYmVyKSA9PiB7XG4gICAgICB2YXIgaXRlbXMgPSBjb2x1bW4ubWFwKChpdGVtOiBhbnksIGlpOiBudW1iZXIpID0+XG4gICAgICAgIHRoaXMucmVuZGVySXRlbShcbiAgICAgICAgICBcIml0ZW1cIiArIGlpLFxuICAgICAgICAgIGl0ZW0sXG4gICAgICAgICAgY2kgPT09IDAgJiYgaWkgPT09IDAsXG4gICAgICAgICAgY3NzQ2xhc3NlcyxcbiAgICAgICAgICBcIlwiICsgY2kgKyBpaVxuICAgICAgICApXG4gICAgICApO1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPGRpdiBrZXk9e1wiY29sdW1uXCIgKyBjaX0gY2xhc3NOYW1lPXt0aGlzLnF1ZXN0aW9uLmdldENvbHVtbkNsYXNzKCl9IHJvbGU9XCJwcmVzZW50YXRpb25cIj5cbiAgICAgICAgICB7aXRlbXN9XG4gICAgICAgIDwvZGl2PlxuICAgICAgKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRCb2R5KGNzc0NsYXNzZXM6IGFueSk6IEpTWC5FbGVtZW50IHtcbiAgICBpZiAodGhpcy5xdWVzdGlvbi5ibG9ja2VkUm93KSB7XG4gICAgICByZXR1cm4gPGRpdiBjbGFzc05hbWU9e2Nzc0NsYXNzZXMucm9vdFJvd30+e3RoaXMuZ2V0SXRlbXMoY3NzQ2xhc3NlcywgdGhpcy5xdWVzdGlvbi5kYXRhQ2hvaWNlcyl9PC9kaXY+O1xuICAgIH1cbiAgICBlbHNlIHJldHVybiA8Pnt0aGlzLmdldEl0ZW1zKGNzc0NsYXNzZXMsIHRoaXMucXVlc3Rpb24uYm9keUl0ZW1zKX08Lz47XG4gIH1cbiAgcHJvdGVjdGVkIGdldEl0ZW1zKGNzc0NsYXNzZXM6IGFueSwgY2hvaWNlczogQXJyYXk8SXRlbVZhbHVlPik6IEFycmF5PGFueT4ge1xuICAgIHZhciByZW5kZXJlZEl0ZW1zOkFycmF5PEpTWC5FbGVtZW50PiA9IFtdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2hvaWNlcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGl0ZW0gPSBjaG9pY2VzW2ldO1xuICAgICAgdmFyIGtleSA9IFwiaXRlbVwiICsgaTtcbiAgICAgIHZhciByZW5kZXJlZEl0ZW0gPSB0aGlzLnJlbmRlckl0ZW0oa2V5LCBpdGVtLCBpID09IDAsIGNzc0NsYXNzZXMsIFwiXCIgKyBpKTtcbiAgICAgIGlmKCEhcmVuZGVyZWRJdGVtKSB7XG4gICAgICAgIHJlbmRlcmVkSXRlbXMucHVzaChyZW5kZXJlZEl0ZW0pO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVuZGVyZWRJdGVtcztcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IHRleHRTdHlsZSgpOiBhbnkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJPdGhlcigpOiBKU1guRWxlbWVudCB7XG4gICAgbGV0IGNzc0NsYXNzZXMgPSB0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXM7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZm9ybS1ncm91cFwiPlxuICAgICAgICA8U3VydmV5UXVlc3Rpb25Db21tZW50SXRlbVxuICAgICAgICAgIHF1ZXN0aW9uPXt0aGlzLnF1ZXN0aW9ufVxuICAgICAgICAgIG90aGVyQ3NzPXtjc3NDbGFzc2VzLm90aGVyfVxuICAgICAgICAgIGNzc0NsYXNzZXM9e2Nzc0NsYXNzZXN9XG4gICAgICAgICAgaXNEaXNwbGF5TW9kZT17dGhpcy5pc0Rpc3BsYXlNb2RlfVxuICAgICAgICAvPlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVySXRlbShcbiAgICBrZXk6IHN0cmluZyxcbiAgICBpdGVtOiBhbnksXG4gICAgaXNGaXJzdDogYm9vbGVhbixcbiAgICBjc3NDbGFzc2VzOiBhbnksXG4gICAgaW5kZXg/OiBzdHJpbmdcbiAgKTogSlNYLkVsZW1lbnQge1xuICAgIGNvbnN0IHJlbmRlcmVkSXRlbSA9IFJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UuY3JlYXRlRWxlbWVudCh0aGlzLnF1ZXN0aW9uLml0ZW1Db21wb25lbnQsIHtcbiAgICAgIGtleToga2V5LFxuICAgICAgcXVlc3Rpb246IHRoaXMucXVlc3Rpb24sXG4gICAgICBjc3NDbGFzc2VzOiBjc3NDbGFzc2VzLFxuICAgICAgaXNEaXNwbGF5TW9kZTogdGhpcy5pc0Rpc3BsYXlNb2RlLFxuICAgICAgaXRlbTogaXRlbSxcbiAgICAgIHRleHRTdHlsZTogdGhpcy50ZXh0U3R5bGUsXG4gICAgICBpbmRleDogaW5kZXgsXG4gICAgICBpc0ZpcnN0OiBpc0ZpcnN0LFxuICAgIH0pO1xuICAgIGNvbnN0IHN1cnZleSA9IHRoaXMucXVlc3Rpb24uc3VydmV5IGFzIFN1cnZleU1vZGVsO1xuICAgIGxldCB3cmFwcGVkSXRlbTogSlNYLkVsZW1lbnQgfCBudWxsID0gbnVsbDtcbiAgICBpZiAoISFzdXJ2ZXkgJiYgISFyZW5kZXJlZEl0ZW0pIHtcbiAgICAgIHdyYXBwZWRJdGVtID0gUmVhY3RTdXJ2ZXlFbGVtZW50c1dyYXBwZXIud3JhcEl0ZW1WYWx1ZShzdXJ2ZXksIHJlbmRlcmVkSXRlbSwgdGhpcy5xdWVzdGlvbiwgaXRlbSk7XG4gICAgfVxuICAgIHJldHVybiB3cmFwcGVkSXRlbSA/PyByZW5kZXJlZEl0ZW07XG4gIH1cbn1cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlRdWVzdGlvbkNoZWNrYm94SXRlbSBleHRlbmRzIFJlYWN0U3VydmV5RWxlbWVudCB7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldFN0YXRlRWxlbWVudCgpOiBCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5pdGVtO1xuICB9XG4gIHByb3RlY3RlZCBnZXQgcXVlc3Rpb24oKTogUXVlc3Rpb25DaGVja2JveE1vZGVsIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5xdWVzdGlvbjtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IGl0ZW0oKTogSXRlbVZhbHVlIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5pdGVtO1xuICB9XG4gIHByb3RlY3RlZCBnZXQgdGV4dFN0eWxlKCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMudGV4dFN0eWxlO1xuICB9XG4gIHByb3RlY3RlZCBnZXQgaXNGaXJzdCgpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLnByb3BzLmlzRmlyc3Q7XG4gIH1cbiAgcHJvdGVjdGVkIGdldCBpbmRleCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnByb3BzLmluZGV4O1xuICB9XG4gIHByaXZhdGUgZ2V0IGhpZGVDYXB0aW9uKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnByb3BzLmhpZGVDYXB0aW9uID09PSB0cnVlO1xuICB9XG4gIHB1YmxpYyBzaG91bGRDb21wb25lbnRVcGRhdGUobmV4dFByb3BzOiBhbnksIG5leHRTdGF0ZTogYW55KTogYm9vbGVhbiB7XG4gICAgaWYgKCFzdXBlci5zaG91bGRDb21wb25lbnRVcGRhdGUobmV4dFByb3BzLCBuZXh0U3RhdGUpKSByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuIChcbiAgICAgICF0aGlzLnF1ZXN0aW9uLmN1c3RvbVdpZGdldCB8fFxuICAgICAgISF0aGlzLnF1ZXN0aW9uLmN1c3RvbVdpZGdldERhdGEuaXNOZWVkUmVuZGVyIHx8XG4gICAgICAhIXRoaXMucXVlc3Rpb24uY3VzdG9tV2lkZ2V0LndpZGdldEpzb24uaXNEZWZhdWx0UmVuZGVyIHx8XG4gICAgICAhIXRoaXMucXVlc3Rpb24uY3VzdG9tV2lkZ2V0LndpZGdldEpzb24ucmVuZGVyXG4gICAgKTtcbiAgfVxuICBoYW5kbGVPbkNoYW5nZSA9IChldmVudDogYW55KSA9PiB7XG4gICAgdmFyIG5ld1ZhbHVlOiBBcnJheTxhbnk+ID0gW10uY29uY2F0KHRoaXMucXVlc3Rpb24ucmVuZGVyZWRWYWx1ZSB8fCBbXSk7XG4gICAgdmFyIGluZGV4ID0gbmV3VmFsdWUuaW5kZXhPZih0aGlzLml0ZW0udmFsdWUpO1xuICAgIGlmIChldmVudC50YXJnZXQuY2hlY2tlZCkge1xuICAgICAgaWYgKGluZGV4IDwgMCkge1xuICAgICAgICBuZXdWYWx1ZS5wdXNoKHRoaXMuaXRlbS52YWx1ZSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChpbmRleCA+IC0xKSB7XG4gICAgICAgIG5ld1ZhbHVlLnNwbGljZShpbmRleCwgMSk7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMucXVlc3Rpb24ucmVuZGVyZWRWYWx1ZSA9IG5ld1ZhbHVlO1xuICB9XG4gIHNlbGVjdEFsbENoYW5nZWQgPSAoZXZlbnQ6IGFueSkgPT4ge1xuICAgIHRoaXMucXVlc3Rpb24udG9nZ2xlU2VsZWN0QWxsKCk7XG4gIH1cbiAgcHJvdGVjdGVkIGNhblJlbmRlcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISF0aGlzLml0ZW0gJiYgISF0aGlzLnF1ZXN0aW9uO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICB2YXIgaXNDaGVja2VkID0gdGhpcy5xdWVzdGlvbi5pc0l0ZW1TZWxlY3RlZCh0aGlzLml0ZW0pO1xuICAgIHJldHVybiB0aGlzLnJlbmRlckNoZWNrYm94KGlzQ2hlY2tlZCwgbnVsbCk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldCBpbnB1dFN0eWxlKCk6IGFueSB7XG4gICAgcmV0dXJuIG51bGw7Ly97IG1hcmdpblJpZ2h0OiBcIjNweFwiIH07XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckNoZWNrYm94KFxuICAgIGlzQ2hlY2tlZDogYm9vbGVhbixcbiAgICBvdGhlckl0ZW06IEpTWC5FbGVtZW50IHwgbnVsbFxuICApOiBKU1guRWxlbWVudCB7XG4gICAgdmFyIGlkID0gdGhpcy5xdWVzdGlvbi5nZXRJdGVtSWQodGhpcy5pdGVtKTtcbiAgICB2YXIgdGV4dCA9ICF0aGlzLmhpZGVDYXB0aW9uID8gdGhpcy5yZW5kZXJMb2NTdHJpbmcodGhpcy5pdGVtLmxvY1RleHQpIDogXCJcIjtcbiAgICBsZXQgaXRlbUNsYXNzID0gdGhpcy5xdWVzdGlvbi5nZXRJdGVtQ2xhc3ModGhpcy5pdGVtKTtcbiAgICBsZXQgbGFiZWxDbGFzcyA9IHRoaXMucXVlc3Rpb24uZ2V0TGFiZWxDbGFzcyh0aGlzLml0ZW0pO1xuICAgIHZhciBvbkl0ZW1DaGFuZ2VkID1cbiAgICAgIHRoaXMuaXRlbSA9PSB0aGlzLnF1ZXN0aW9uLnNlbGVjdEFsbEl0ZW1cbiAgICAgICAgPyB0aGlzLnNlbGVjdEFsbENoYW5nZWRcbiAgICAgICAgOiB0aGlzLmhhbmRsZU9uQ2hhbmdlO1xuXG4gICAgdmFyIGxvY1RleHQ6IGFueSA9IHRoaXMuaXRlbS5sb2NUZXh0O1xuXG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtpdGVtQ2xhc3N9IHJvbGU9XCJwcmVzZW50YXRpb25cIj5cbiAgICAgICAgPGxhYmVsIGNsYXNzTmFtZT17bGFiZWxDbGFzc30gYXJpYS1sYWJlbD17dGhpcy5xdWVzdGlvbi5nZXRBcmlhSXRlbUxhYmVsKHRoaXMuaXRlbSl9PlxuICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgY2xhc3NOYW1lPXt0aGlzLmNzc0NsYXNzZXMuaXRlbUNvbnRyb2x9XG4gICAgICAgICAgICByb2xlPVwib3B0aW9uXCJcbiAgICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgICAgICAgICBuYW1lPXt0aGlzLnF1ZXN0aW9uLm5hbWV9XG4gICAgICAgICAgICB2YWx1ZT17dGhpcy5pdGVtLnZhbHVlICE9IFwic2VsZWN0YWxsXCIgPyB0aGlzLml0ZW0udmFsdWUgOiB1bmRlZmluZWR9XG4gICAgICAgICAgICBpZD17aWR9XG4gICAgICAgICAgICBzdHlsZT17dGhpcy5pbnB1dFN0eWxlfVxuICAgICAgICAgICAgZGlzYWJsZWQ9eyF0aGlzLnF1ZXN0aW9uLmdldEl0ZW1FbmFibGVkKHRoaXMuaXRlbSl9XG4gICAgICAgICAgICBjaGVja2VkPXtpc0NoZWNrZWR9XG4gICAgICAgICAgICBvbkNoYW5nZT17b25JdGVtQ2hhbmdlZH1cbiAgICAgICAgICAgIGFyaWEtZGVzY3JpYmVkYnk9e3RoaXMucXVlc3Rpb24uYXJpYURlc2NyaWJlZEJ5fVxuICAgICAgICAgIC8+XG4gICAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5jc3NDbGFzc2VzLm1hdGVyaWFsRGVjb3JhdG9yID9cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPXt0aGlzLmNzc0NsYXNzZXMubWF0ZXJpYWxEZWNvcmF0b3J9PlxuICAgICAgICAgICAgICAgIHt0aGlzLnF1ZXN0aW9uLml0ZW1TdmdJY29uID9cbiAgICAgICAgICAgICAgICAgIDxzdmdcbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXt0aGlzLmNzc0NsYXNzZXMuaXRlbURlY29yYXRvcn1cbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPHVzZSB4bGlua0hyZWY9e3RoaXMucXVlc3Rpb24uaXRlbVN2Z0ljb259PjwvdXNlPlxuICAgICAgICAgICAgICAgICAgPC9zdmc+IDpcbiAgICAgICAgICAgICAgICAgIG51bGxcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIDwvc3Bhbj4gOlxuICAgICAgICAgICAgICBudWxsXG4gICAgICAgICAgfVxuICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT17dGhpcy5jc3NDbGFzc2VzLmNvbnRyb2xMYWJlbH0+XG4gICAgICAgICAgICB7dGV4dH1cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgIDwvbGFiZWw+XG4gICAgICAgIHtvdGhlckl0ZW19XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG59XG5cblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFwic3VydmV5LWNoZWNrYm94LWl0ZW1cIiwgKHByb3BzOiBhbnkpID0+IHtcbiAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3VydmV5UXVlc3Rpb25DaGVja2JveEl0ZW0sIHByb3BzKTtcbn0pO1xuXG5SZWFjdFF1ZXN0aW9uRmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlclF1ZXN0aW9uKFwiY2hlY2tib3hcIiwgKHByb3BzKSA9PiB7XG4gIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFN1cnZleVF1ZXN0aW9uQ2hlY2tib3gsIHByb3BzKTtcbn0pO1xuIiwiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBSZWFjdFN1cnZleUVsZW1lbnQsIFN1cnZleVF1ZXN0aW9uVW5jb250cm9sbGVkRWxlbWVudCB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fZWxlbWVudFwiO1xuaW1wb3J0IHsgUXVlc3Rpb25Db21tZW50TW9kZWwgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFJlYWN0UXVlc3Rpb25GYWN0b3J5IH0gZnJvbSBcIi4vcmVhY3RxdWVzdGlvbl9mYWN0b3J5XCI7XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlRdWVzdGlvbkNvbW1lbnQgZXh0ZW5kcyBTdXJ2ZXlRdWVzdGlvblVuY29udHJvbGxlZEVsZW1lbnQ8UXVlc3Rpb25Db21tZW50TW9kZWw+IHtcbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyRWxlbWVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgdmFyIG9uQmx1cjooKGU6IGFueSkgPT4gdm9pZCkgfCB1bmRlZmluZWQgPSAhdGhpcy5xdWVzdGlvbi5pc0lucHV0VGV4dFVwZGF0ZSA/IHRoaXMudXBkYXRlVmFsdWVPbkV2ZW50IDogdW5kZWZpbmVkO1xuICAgIHZhciBvbklucHV0ID0gKGV2ZW50OiBhbnkpID0+IHtcbiAgICAgIGlmICh0aGlzLnF1ZXN0aW9uLmlzSW5wdXRUZXh0VXBkYXRlKVxuICAgICAgICB0aGlzLnVwZGF0ZVZhbHVlT25FdmVudChldmVudCk7XG4gICAgICBlbHNlXG4gICAgICAgIHRoaXMucXVlc3Rpb24udXBkYXRlRWxlbWVudCgpO1xuICAgIH07XG4gICAgY29uc3QgcGxhY2Vob2xkZXIgPSB0aGlzLnF1ZXN0aW9uLnJlbmRlcmVkUGxhY2Vob2xkZXI7XG4gICAgaWYgKHRoaXMucXVlc3Rpb24uaXNSZWFkT25seVJlbmRlckRpdigpKSB7XG4gICAgICByZXR1cm4gPGRpdj57dGhpcy5xdWVzdGlvbi52YWx1ZX08L2Rpdj47XG4gICAgfVxuICAgIHJldHVybiAoXG4gICAgICA8dGV4dGFyZWFcbiAgICAgICAgaWQ9e3RoaXMucXVlc3Rpb24uaW5wdXRJZH1cbiAgICAgICAgY2xhc3NOYW1lPXt0aGlzLnF1ZXN0aW9uLmNsYXNzTmFtZX1cbiAgICAgICAgZGlzYWJsZWQ9eyB0aGlzLnF1ZXN0aW9uLmlzSW5wdXRSZWFkT25seSB9XG4gICAgICAgIHJlYWRPbmx5PXsgdGhpcy5xdWVzdGlvbi5pc0lucHV0UmVhZE9ubHkgfVxuICAgICAgICByZWY9eyh0ZXh0YXJlYSkgPT4gKHRoaXMuc2V0Q29udHJvbCh0ZXh0YXJlYSkpfVxuICAgICAgICBtYXhMZW5ndGg9e3RoaXMucXVlc3Rpb24uZ2V0TWF4TGVuZ3RoKCl9XG4gICAgICAgIHBsYWNlaG9sZGVyPXtwbGFjZWhvbGRlcn1cbiAgICAgICAgb25CbHVyPXtvbkJsdXJ9XG4gICAgICAgIG9uSW5wdXQ9e29uSW5wdXR9XG4gICAgICAgIG9uS2V5RG93bj17KGV2ZW50KSA9PiB7IHRoaXMucXVlc3Rpb24ub25LZXlEb3duKGV2ZW50KTsgfX1cbiAgICAgICAgY29scz17dGhpcy5xdWVzdGlvbi5jb2xzfVxuICAgICAgICByb3dzPXt0aGlzLnF1ZXN0aW9uLnJvd3N9XG4gICAgICAgIGFyaWEtcmVxdWlyZWQ9e3RoaXMucXVlc3Rpb24uYXJpYVJlcXVpcmVkfVxuICAgICAgICBhcmlhLWxhYmVsPXt0aGlzLnF1ZXN0aW9uLmFyaWFMYWJlbH1cbiAgICAgICAgYXJpYS1pbnZhbGlkPXt0aGlzLnF1ZXN0aW9uLmFyaWFJbnZhbGlkfVxuICAgICAgICBhcmlhLWRlc2NyaWJlZGJ5PXt0aGlzLnF1ZXN0aW9uLmFyaWFEZXNjcmliZWRCeX1cbiAgICAgICAgc3R5bGU9e3sgcmVzaXplOiB0aGlzLnF1ZXN0aW9uLnJlc2l6ZVN0eWxlIH19XG4gICAgICAvPlxuICAgICk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFN1cnZleVF1ZXN0aW9uQ29tbWVudEl0ZW0gZXh0ZW5kcyBSZWFjdFN1cnZleUVsZW1lbnQge1xuICBwcm90ZWN0ZWQgY2FuUmVuZGVyKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIXRoaXMucHJvcHMucXVlc3Rpb247XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIGxldCBxdWVzdGlvbiA9IHRoaXMucHJvcHMucXVlc3Rpb247XG4gICAgbGV0IGNsYXNzTmFtZSA9IHRoaXMucHJvcHMub3RoZXJDc3MgfHwgdGhpcy5jc3NDbGFzc2VzLmNvbW1lbnQ7XG4gICAgbGV0IGhhbmRsZU9uQ2hhbmdlID0gKGV2ZW50OiBhbnkpID0+IHtcbiAgICAgIHRoaXMuc2V0U3RhdGUoeyBjb21tZW50OiBldmVudC50YXJnZXQudmFsdWUgfSk7XG4gICAgICBxdWVzdGlvbi5vbkNvbW1lbnRDaGFuZ2UoZXZlbnQpO1xuICAgIH07XG4gICAgbGV0IHN0YXRlQ29tbWVudDogc3RyaW5nID0gISF0aGlzLnN0YXRlID8gdGhpcy5zdGF0ZS5jb21tZW50IDogdW5kZWZpbmVkO1xuICAgIGlmKHN0YXRlQ29tbWVudCAhPT0gdW5kZWZpbmVkICYmIHN0YXRlQ29tbWVudC50cmltKCkgIT09IHF1ZXN0aW9uLmNvbW1lbnQpIHtcbiAgICAgIHN0YXRlQ29tbWVudCA9IHF1ZXN0aW9uLmNvbW1lbnQ7XG4gICAgfVxuICAgIGxldCBjb21tZW50ID0gc3RhdGVDb21tZW50ICE9PSB1bmRlZmluZWQgPyBzdGF0ZUNvbW1lbnQgOiBxdWVzdGlvbi5jb21tZW50IHx8IFwiXCI7XG5cbiAgICBpZiAocXVlc3Rpb24uaXNSZWFkT25seVJlbmRlckRpdigpKSB7XG4gICAgICByZXR1cm4gPGRpdj57Y29tbWVudH08L2Rpdj47XG4gICAgfVxuICAgIHJldHVybiAoXG4gICAgICA8dGV4dGFyZWFcbiAgICAgICAgY2xhc3NOYW1lPXtjbGFzc05hbWV9XG4gICAgICAgIHZhbHVlPXtjb21tZW50fVxuICAgICAgICBkaXNhYmxlZD17dGhpcy5pc0Rpc3BsYXlNb2RlfVxuICAgICAgICBtYXhMZW5ndGg9e3F1ZXN0aW9uLmdldE90aGVyc01heExlbmd0aCgpfVxuICAgICAgICBwbGFjZWhvbGRlcj17cXVlc3Rpb24uY29tbWVudE9yT3RoZXJQbGFjZWhvbGRlcn1cbiAgICAgICAgb25DaGFuZ2U9e2hhbmRsZU9uQ2hhbmdlfVxuICAgICAgICBvbkJsdXI9eyhlKSA9PiB7IHF1ZXN0aW9uLm9uQ29tbWVudENoYW5nZShlKTsgaGFuZGxlT25DaGFuZ2UoZSk7IH0gfVxuICAgICAgICBvbklucHV0PXsoZSkgPT4gcXVlc3Rpb24ub25Db21tZW50SW5wdXQoZSl9XG4gICAgICAgIGFyaWEtcmVxdWlyZWQ9e3F1ZXN0aW9uLmlzUmVxdWlyZWR9XG4gICAgICAgIGFyaWEtbGFiZWw9e3F1ZXN0aW9uLmxvY1RpdGxlLnJlbmRlcmVkSHRtbH1cbiAgICAgICAgc3R5bGU9e3sgcmVzaXplOiBxdWVzdGlvbi5yZXNpemVTdHlsZSB9fVxuICAgICAgLz5cbiAgICApO1xuICB9XG59XG5cblJlYWN0UXVlc3Rpb25GYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyUXVlc3Rpb24oXCJjb21tZW50XCIsIChwcm9wcykgPT4ge1xuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTdXJ2ZXlRdWVzdGlvbkNvbW1lbnQsIHByb3BzKTtcbn0pO1xuIiwiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBTdXJ2ZXlRdWVzdGlvblVuY29udHJvbGxlZEVsZW1lbnQgfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uX2VsZW1lbnRcIjtcbmltcG9ydCB7IFN1cnZleVF1ZXN0aW9uIH0gZnJvbSBcIi4vcmVhY3RxdWVzdGlvblwiO1xuaW1wb3J0IHsgQmFzZSwgUXVlc3Rpb25DdXN0b21Nb2RlbCwgUXVlc3Rpb25Db21wb3NpdGVNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgUmVhY3RRdWVzdGlvbkZhY3RvcnkgfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uX2ZhY3RvcnlcIjtcbmltcG9ydCB7IFN1cnZleVBhbmVsIH0gZnJvbSBcIi4vcGFuZWxcIjtcblxuZXhwb3J0IGNsYXNzIFN1cnZleVF1ZXN0aW9uQ3VzdG9tIGV4dGVuZHMgU3VydmV5UXVlc3Rpb25VbmNvbnRyb2xsZWRFbGVtZW50PFF1ZXN0aW9uQ3VzdG9tTW9kZWw+IHtcbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0U3RhdGVFbGVtZW50cygpOiBBcnJheTxCYXNlPiB7XG4gICAgY29uc3QgcmVzID0gc3VwZXIuZ2V0U3RhdGVFbGVtZW50cygpO1xuICAgIGlmKCEhdGhpcy5xdWVzdGlvbi5jb250ZW50UXVlc3Rpb24pIHtcbiAgICAgIHJlcy5wdXNoKHRoaXMucXVlc3Rpb24uY29udGVudFF1ZXN0aW9uKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyRWxlbWVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgcmV0dXJuIFN1cnZleVF1ZXN0aW9uLnJlbmRlclF1ZXN0aW9uQm9keShcbiAgICAgIHRoaXMuY3JlYXRvcixcbiAgICAgIHRoaXMucXVlc3Rpb24uY29udGVudFF1ZXN0aW9uXG4gICAgKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgU3VydmV5UXVlc3Rpb25Db21wb3NpdGUgZXh0ZW5kcyBTdXJ2ZXlRdWVzdGlvblVuY29udHJvbGxlZEVsZW1lbnQ8UXVlc3Rpb25Db21wb3NpdGVNb2RlbD4ge1xuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICB9XG4gIHByb3RlY3RlZCBjYW5SZW5kZXIoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhdGhpcy5xdWVzdGlvbi5jb250ZW50UGFuZWw7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIHJldHVybiAoXG4gICAgICA8U3VydmV5UGFuZWxcbiAgICAgICAgZWxlbWVudD17dGhpcy5xdWVzdGlvbi5jb250ZW50UGFuZWx9XG4gICAgICAgIGNyZWF0b3I9e3RoaXMuY3JlYXRvcn1cbiAgICAgICAgc3VydmV5PXt0aGlzLnF1ZXN0aW9uLnN1cnZleX1cbiAgICAgID48L1N1cnZleVBhbmVsPlxuICAgICk7XG4gIH1cbn1cblxuUmVhY3RRdWVzdGlvbkZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJRdWVzdGlvbihcImN1c3RvbVwiLCAocHJvcHMpID0+IHtcbiAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3VydmV5UXVlc3Rpb25DdXN0b20sIHByb3BzKTtcbn0pO1xuUmVhY3RRdWVzdGlvbkZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJRdWVzdGlvbihcImNvbXBvc2l0ZVwiLCAocHJvcHMpID0+IHtcbiAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3VydmV5UXVlc3Rpb25Db21wb3NpdGUsIHByb3BzKTtcbn0pO1xuIiwiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBRdWVzdGlvbiB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgUmVhY3RRdWVzdGlvbkZhY3RvcnkgfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uX2ZhY3RvcnlcIjtcbmltcG9ydCB7IFN1cnZleVF1ZXN0aW9uRHJvcGRvd25CYXNlIH0gZnJvbSBcIi4vZHJvcGRvd24tYmFzZVwiO1xuaW1wb3J0IHsgU3VydmV5UXVlc3Rpb25Db21tZW50SXRlbSB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fY29tbWVudFwiO1xuXG5leHBvcnQgY2xhc3MgU3VydmV5UXVlc3Rpb25Ecm9wZG93biBleHRlbmRzIFN1cnZleVF1ZXN0aW9uRHJvcGRvd25CYXNlPFF1ZXN0aW9uPiB7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gIH1cblxuICBwcm90ZWN0ZWQgcmVuZGVyRWxlbWVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgY29uc3QgY3NzQ2xhc3NlcyA9IHRoaXMucXVlc3Rpb24uY3NzQ2xhc3NlcztcbiAgICBjb25zdCBjb21tZW50ID0gdGhpcy5xdWVzdGlvbi5pc090aGVyU2VsZWN0ZWQgPyB0aGlzLnJlbmRlck90aGVyKGNzc0NsYXNzZXMpIDogbnVsbDtcbiAgICBjb25zdCBzZWxlY3QgPSB0aGlzLnJlbmRlclNlbGVjdChjc3NDbGFzc2VzKTtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9e3RoaXMucXVlc3Rpb24ucmVuZGVyQ3NzUm9vdH0+XG4gICAgICAgIHtzZWxlY3R9XG4gICAgICAgIHtjb21tZW50fVxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxufVxuXG5SZWFjdFF1ZXN0aW9uRmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlclF1ZXN0aW9uKFwiZHJvcGRvd25cIiwgKHByb3BzKSA9PiB7XG4gIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFN1cnZleVF1ZXN0aW9uRHJvcGRvd24sIHByb3BzKTtcbn0pOyIsImltcG9ydCAqIGFzIFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgQmFzZSwgQXJyYXlDaGFuZ2VzLCBTdXJ2ZXlNb2RlbCwgSGVscGVycywgUGFuZWxNb2RlbCwgTG9jYWxpemFibGVTdHJpbmcsIFF1ZXN0aW9uIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBJU3VydmV5Q3JlYXRvciB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25cIjtcbmltcG9ydCB7IFJlYWN0RWxlbWVudEZhY3RvcnkgfSBmcm9tIFwiLi9lbGVtZW50LWZhY3RvcnlcIjtcbmltcG9ydCB7IFJlYWN0U3VydmV5RWxlbWVudHNXcmFwcGVyIH0gZnJvbSBcIi4vcmVhY3RzdXJ2ZXltb2RlbFwiO1xuXG5leHBvcnQgY2xhc3MgU3VydmV5RWxlbWVudEJhc2U8UCwgUz4gZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQ8UCwgUz4ge1xuICBwdWJsaWMgc3RhdGljIHJlbmRlckxvY1N0cmluZyhcbiAgICBsb2NTdHI6IExvY2FsaXphYmxlU3RyaW5nLFxuICAgIHN0eWxlOiBhbnkgPSBudWxsLFxuICAgIGtleT86IHN0cmluZ1xuICApOiBKU1guRWxlbWVudCB7XG4gICAgcmV0dXJuIFJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UuY3JlYXRlRWxlbWVudChsb2NTdHIucmVuZGVyQXMsIHtcbiAgICAgIGxvY1N0cjogbG9jU3RyLnJlbmRlckFzRGF0YSxcbiAgICAgIHN0eWxlOiBzdHlsZSxcbiAgICAgIGtleToga2V5LFxuICAgIH0pO1xuICB9XG4gIHB1YmxpYyBzdGF0aWMgcmVuZGVyUXVlc3Rpb25EZXNjcmlwdGlvbihxdWVzdGlvbjogUXVlc3Rpb24gfCBQYW5lbE1vZGVsKTogSlNYLkVsZW1lbnQge1xuICAgIHZhciBkZXNjcmlwdGlvblRleHQgPSBTdXJ2ZXlFbGVtZW50QmFzZS5yZW5kZXJMb2NTdHJpbmcocXVlc3Rpb24ubG9jRGVzY3JpcHRpb24pO1xuICAgIHJldHVybiA8ZGl2IGNsYXNzTmFtZT17cXVlc3Rpb24uY3NzRGVzY3JpcHRpb259PntkZXNjcmlwdGlvblRleHR9PC9kaXY+O1xuICB9XG4gIHByaXZhdGUgY2hhbmdlZFN0YXRlUHJvcE5hbWVWYWx1ZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICB9XG4gIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIHRoaXMubWFrZUJhc2VFbGVtZW50c1JlYWN0KCk7XG4gIH1cbiAgY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgdGhpcy51bk1ha2VCYXNlRWxlbWVudHNSZWFjdCgpO1xuICB9XG4gIGNvbXBvbmVudERpZFVwZGF0ZShwcmV2UHJvcHM6IGFueSwgcHJldlN0YXRlOiBhbnkpIHtcbiAgICB0aGlzLm1ha2VCYXNlRWxlbWVudHNSZWFjdCgpO1xuICB9XG4gIHByaXZhdGUgX2FsbG93Q29tcG9uZW50VXBkYXRlID0gdHJ1ZTtcbiAgcHJvdGVjdGVkIGFsbG93Q29tcG9uZW50VXBkYXRlKCkge1xuICAgIHRoaXMuX2FsbG93Q29tcG9uZW50VXBkYXRlID0gdHJ1ZTtcbiAgICB0aGlzLmZvcmNlVXBkYXRlKCk7XG4gIH1cbiAgcHJvdGVjdGVkIGRlbnlDb21wb25lbnRVcGRhdGUoKSB7XG4gICAgdGhpcy5fYWxsb3dDb21wb25lbnRVcGRhdGUgPSBmYWxzZTtcbiAgfVxuICBzaG91bGRDb21wb25lbnRVcGRhdGUobmV4dFByb3BzOmFueSwgbmV4dFN0YXRlOmFueSk6Ym9vbGVhbiB7XG4gICAgaWYodGhpcy5fYWxsb3dDb21wb25lbnRVcGRhdGUpIHtcbiAgICAgIHRoaXMudW5NYWtlQmFzZUVsZW1lbnRzUmVhY3QoKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX2FsbG93Q29tcG9uZW50VXBkYXRlO1xuICB9XG4gIHJlbmRlcigpOiBKU1guRWxlbWVudCB8IG51bGwge1xuICAgIGlmICghdGhpcy5jYW5SZW5kZXIoKSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgdGhpcy5zdGFydEVuZFJlbmRlcmluZygxKTtcbiAgICB2YXIgcmVzID0gdGhpcy5yZW5kZXJFbGVtZW50KCk7XG4gICAgdGhpcy5zdGFydEVuZFJlbmRlcmluZygtMSk7XG5cbiAgICBpZighIXJlcykge1xuICAgICAgcmVzID0gdGhpcy53cmFwRWxlbWVudChyZXMpO1xuICAgIH1cblxuICAgIHRoaXMuY2hhbmdlZFN0YXRlUHJvcE5hbWVWYWx1ZSA9IHVuZGVmaW5lZDtcbiAgICByZXR1cm4gcmVzO1xuICB9XG4gIHByb3RlY3RlZCB3cmFwRWxlbWVudChlbGVtZW50OiBKU1guRWxlbWVudCk6IEpTWC5FbGVtZW50IHtcbiAgICByZXR1cm4gZWxlbWVudDtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IGlzUmVuZGVyaW5nKCk6IGJvb2xlYW4ge1xuICAgIHZhciBzdGF0ZUVsczogQXJyYXk8YW55PiA9IHRoaXMuZ2V0UmVuZGVyZWRFbGVtZW50cygpO1xuICAgIGZvcihsZXQgc3RhdGVFbCBvZiBzdGF0ZUVscykge1xuICAgICAgaWYoc3RhdGVFbC5yZWFjdFJlbmRlcmluZyA+IDApIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcHJvdGVjdGVkIGdldFJlbmRlcmVkRWxlbWVudHMoKTogQmFzZVtdIHtcbiAgICByZXR1cm4gdGhpcy5nZXRTdGF0ZUVsZW1lbnRzKCk7XG4gIH1cbiAgcHJpdmF0ZSBzdGFydEVuZFJlbmRlcmluZyh2YWw6IG51bWJlcikge1xuICAgIHZhciBzdGF0ZUVsczogQXJyYXk8YW55PiA9IHRoaXMuZ2V0UmVuZGVyZWRFbGVtZW50cygpO1xuICAgIGZvcihsZXQgc3RhdGVFbCBvZiBzdGF0ZUVscykge1xuICAgICAgaWYgKCFzdGF0ZUVsLnJlYWN0UmVuZGVyaW5nKSBzdGF0ZUVsLnJlYWN0UmVuZGVyaW5nID0gMDtcbiAgICAgIHN0YXRlRWwucmVhY3RSZW5kZXJpbmcgKz0gdmFsO1xuICAgIH1cbiAgfVxuICBwcm90ZWN0ZWQgY2FuUmVuZGVyKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHwgbnVsbCB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgcHJvdGVjdGVkIGdldCBjaGFuZ2VkU3RhdGVQcm9wTmFtZSgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLmNoYW5nZWRTdGF0ZVByb3BOYW1lVmFsdWU7XG4gIH1cbiAgcHJpdmF0ZSBtYWtlQmFzZUVsZW1lbnRzUmVhY3QoKSB7XG4gICAgdmFyIGVscyA9IHRoaXMuZ2V0U3RhdGVFbGVtZW50cygpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZWxzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB0aGlzLm1ha2VCYXNlRWxlbWVudFJlYWN0KGVsc1tpXSk7XG4gICAgfVxuICB9XG4gIHByaXZhdGUgdW5NYWtlQmFzZUVsZW1lbnRzUmVhY3QoKSB7XG4gICAgdmFyIGVscyA9IHRoaXMuZ2V0U3RhdGVFbGVtZW50cygpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZWxzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB0aGlzLnVuTWFrZUJhc2VFbGVtZW50UmVhY3QoZWxzW2ldKTtcbiAgICB9XG4gIH1cbiAgcHJvdGVjdGVkIGdldFN0YXRlRWxlbWVudHMoKTogQXJyYXk8QmFzZT4ge1xuICAgIHZhciBlbCA9IHRoaXMuZ2V0U3RhdGVFbGVtZW50KCk7XG4gICAgcmV0dXJuICEhZWwgPyBbZWxdIDogW107XG4gIH1cbiAgcHJvdGVjdGVkIGdldFN0YXRlRWxlbWVudCgpOiBCYXNlIHwgbnVsbCB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgcHJvdGVjdGVkIGdldCBpc0Rpc3BsYXlNb2RlKCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHByb3BzOiBhbnkgPSB0aGlzLnByb3BzO1xuICAgIHJldHVybiBwcm9wcy5pc0Rpc3BsYXlNb2RlIHx8IGZhbHNlO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJMb2NTdHJpbmcoXG4gICAgbG9jU3RyOiBMb2NhbGl6YWJsZVN0cmluZyxcbiAgICBzdHlsZTogYW55ID0gbnVsbCxcbiAgICBrZXk/OiBzdHJpbmdcbiAgKTogSlNYLkVsZW1lbnQge1xuICAgIHJldHVybiBTdXJ2ZXlFbGVtZW50QmFzZS5yZW5kZXJMb2NTdHJpbmcobG9jU3RyLCBzdHlsZSwga2V5KTtcbiAgfVxuICBwcml2YXRlIGNhbk1ha2VSZWFjdChzdGF0ZUVsZW1lbnQ6IEJhc2UpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISFzdGF0ZUVsZW1lbnQgJiYgISFzdGF0ZUVsZW1lbnQuaXRlcmF0ZVByb3BlcnRpZXNIYXNoO1xuICB9XG4gIHByaXZhdGUgbWFrZUJhc2VFbGVtZW50UmVhY3Qoc3RhdGVFbGVtZW50OiBCYXNlKSB7XG4gICAgaWYgKCF0aGlzLmNhbk1ha2VSZWFjdChzdGF0ZUVsZW1lbnQpKSByZXR1cm47XG4gICAgc3RhdGVFbGVtZW50Lml0ZXJhdGVQcm9wZXJ0aWVzSGFzaCgoaGFzaCwga2V5KSA9PiB7XG4gICAgICBpZiAoIXRoaXMuY2FuVXNlUHJvcEluU3RhdGUoa2V5KSkgcmV0dXJuO1xuICAgICAgdmFyIHZhbDogYW55ID0gaGFzaFtrZXldO1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsKSkge1xuICAgICAgICB2YXIgdmFsOiBhbnkgPSB2YWw7XG4gICAgICAgIHZhbFtcIm9uQXJyYXlDaGFuZ2VkXCJdID0gKGFycmF5Q2hhbmdlczogQXJyYXlDaGFuZ2VzKSA9PiB7XG4gICAgICAgICAgaWYgKHRoaXMuaXNSZW5kZXJpbmcpIHJldHVybjtcbiAgICAgICAgICB0aGlzLmNoYW5nZWRTdGF0ZVByb3BOYW1lVmFsdWUgPSBrZXk7XG4gICAgICAgICAgdGhpcy5zZXRTdGF0ZSgoc3RhdGU6IGFueSkgPT4ge1xuICAgICAgICAgICAgdmFyIG5ld1N0YXRlOiB7IFtpbmRleDogc3RyaW5nXTogYW55IH0gPSB7fTtcbiAgICAgICAgICAgIG5ld1N0YXRlW2tleV0gPSB2YWw7XG4gICAgICAgICAgICByZXR1cm4gbmV3U3RhdGUgYXMgUztcbiAgICAgICAgICB9KTtcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBzdGF0ZUVsZW1lbnQuc2V0UHJvcGVydHlWYWx1ZUNvcmVIYW5kbGVyID0gKFxuICAgICAgaGFzaDogYW55LFxuICAgICAga2V5OiBzdHJpbmcsXG4gICAgICB2YWw6IGFueVxuICAgICkgPT4ge1xuICAgICAgaWYgKGhhc2hba2V5XSAhPT0gdmFsKSB7XG4gICAgICAgIGhhc2hba2V5XSA9IHZhbDtcbiAgICAgICAgaWYgKCF0aGlzLmNhblVzZVByb3BJblN0YXRlKGtleSkpIHJldHVybjtcbiAgICAgICAgaWYgKHRoaXMuaXNSZW5kZXJpbmcpIHJldHVybjtcbiAgICAgICAgdGhpcy5jaGFuZ2VkU3RhdGVQcm9wTmFtZVZhbHVlID0ga2V5O1xuICAgICAgICB0aGlzLnNldFN0YXRlKChzdGF0ZTogYW55KSA9PiB7XG4gICAgICAgICAgdmFyIG5ld1N0YXRlOiB7IFtpbmRleDogc3RyaW5nXTogYW55IH0gPSB7fTtcbiAgICAgICAgICBuZXdTdGF0ZVtrZXldID0gdmFsO1xuICAgICAgICAgIHJldHVybiBuZXdTdGF0ZSBhcyBTO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9O1xuICB9XG4gIHByb3RlY3RlZCBjYW5Vc2VQcm9wSW5TdGF0ZShrZXk6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHByaXZhdGUgdW5NYWtlQmFzZUVsZW1lbnRSZWFjdChzdGF0ZUVsZW1lbnQ6IEJhc2UpIHtcbiAgICBpZiAoIXRoaXMuY2FuTWFrZVJlYWN0KHN0YXRlRWxlbWVudCkpIHJldHVybjtcbiAgICBzdGF0ZUVsZW1lbnQuc2V0UHJvcGVydHlWYWx1ZUNvcmVIYW5kbGVyID0gdW5kZWZpbmVkIGFzIGFueTtcbiAgICBzdGF0ZUVsZW1lbnQuaXRlcmF0ZVByb3BlcnRpZXNIYXNoKChoYXNoLCBrZXkpID0+IHtcbiAgICAgIHZhciB2YWw6IGFueSA9IGhhc2hba2V5XTtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbCkpIHtcbiAgICAgICAgdmFyIHZhbDogYW55ID0gdmFsO1xuICAgICAgICB2YWxbXCJvbkFycmF5Q2hhbmdlZFwiXSA9ICgpID0+IHt9O1xuICAgICAgfVxuICAgIH0pO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBSZWFjdFN1cnZleUVsZW1lbnQgZXh0ZW5kcyBTdXJ2ZXlFbGVtZW50QmFzZTxhbnksIGFueT4ge1xuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICB9XG4gIHByb3RlY3RlZCBnZXQgY3NzQ2xhc3NlcygpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLnByb3BzLmNzc0NsYXNzZXM7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFN1cnZleVF1ZXN0aW9uRWxlbWVudEJhc2UgZXh0ZW5kcyBTdXJ2ZXlFbGVtZW50QmFzZTxhbnksIGFueT4ge1xuICBjb250cm9sOiBIVE1MRWxlbWVudDtcbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgfVxuICBjb21wb25lbnREaWRVcGRhdGUocHJldlByb3BzOiBhbnksIHByZXZTdGF0ZTogYW55KSB7XG4gICAgc3VwZXIuY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wcywgcHJldlN0YXRlKTtcbiAgICB0aGlzLnVwZGF0ZURvbUVsZW1lbnQoKTtcbiAgfVxuICBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICBzdXBlci5jb21wb25lbnREaWRNb3VudCgpO1xuICAgIHRoaXMudXBkYXRlRG9tRWxlbWVudCgpO1xuICB9XG4gIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgIHN1cGVyLmNvbXBvbmVudFdpbGxVbm1vdW50KCk7XG4gICAgaWYgKCEhdGhpcy5xdWVzdGlvbkJhc2UpIHtcbiAgICAgIGNvbnN0IGVsOiBIVE1MRWxlbWVudCA9IHRoaXMuY29udHJvbDtcbiAgICAgIHRoaXMucXVlc3Rpb25CYXNlLmJlZm9yZURlc3Ryb3lRdWVzdGlvbkVsZW1lbnQoZWwpO1xuICAgICAgaWYgKCEhZWwpIHtcbiAgICAgICAgZWwucmVtb3ZlQXR0cmlidXRlKFwiZGF0YS1yZW5kZXJlZFwiKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcHJvdGVjdGVkIHVwZGF0ZURvbUVsZW1lbnQoKSB7XG4gICAgY29uc3QgZWw6IEhUTUxFbGVtZW50ID0gdGhpcy5jb250cm9sO1xuICAgIGlmICghIWVsKSB7XG4gICAgICBpZiAoZWwuZ2V0QXR0cmlidXRlKFwiZGF0YS1yZW5kZXJlZFwiKSAhPT0gXCJyXCIpIHtcbiAgICAgICAgZWwuc2V0QXR0cmlidXRlKFwiZGF0YS1yZW5kZXJlZFwiLCBcInJcIik7XG4gICAgICAgIHRoaXMucXVlc3Rpb25CYXNlLmFmdGVyUmVuZGVyUXVlc3Rpb25FbGVtZW50KGVsKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcHJvdGVjdGVkIGdldCBxdWVzdGlvbkJhc2UoKTogUXVlc3Rpb24ge1xuICAgIHJldHVybiB0aGlzLnByb3BzLnF1ZXN0aW9uO1xuICB9XG4gIHByb3RlY3RlZCBnZXRSZW5kZXJlZEVsZW1lbnRzKCk6IEJhc2VbXSB7XG4gICAgcmV0dXJuIFt0aGlzLnF1ZXN0aW9uQmFzZV07XG4gIH1cbiAgcHJvdGVjdGVkIGdldCBjcmVhdG9yKCk6IElTdXJ2ZXlDcmVhdG9yIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5jcmVhdG9yO1xuICB9XG4gIHByb3RlY3RlZCBjYW5SZW5kZXIoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhdGhpcy5xdWVzdGlvbkJhc2UgJiYgISF0aGlzLmNyZWF0b3I7XG4gIH1cbiAgcHVibGljIHNob3VsZENvbXBvbmVudFVwZGF0ZShuZXh0UHJvcHM6IGFueSwgbmV4dFN0YXRlOiBhbnkpOiBib29sZWFuIHtcbiAgICBpZiAoIXN1cGVyLnNob3VsZENvbXBvbmVudFVwZGF0ZShuZXh0UHJvcHMsIG5leHRTdGF0ZSkpIHJldHVybiBmYWxzZTtcblxuICAgIHJldHVybiAoXG4gICAgICAhdGhpcy5xdWVzdGlvbkJhc2UuY3VzdG9tV2lkZ2V0IHx8XG4gICAgICAhIXRoaXMucXVlc3Rpb25CYXNlLmN1c3RvbVdpZGdldERhdGEuaXNOZWVkUmVuZGVyIHx8XG4gICAgICAhIXRoaXMucXVlc3Rpb25CYXNlLmN1c3RvbVdpZGdldC53aWRnZXRKc29uLmlzRGVmYXVsdFJlbmRlciB8fFxuICAgICAgISF0aGlzLnF1ZXN0aW9uQmFzZS5jdXN0b21XaWRnZXQud2lkZ2V0SnNvbi5yZW5kZXJcbiAgICApO1xuICB9XG4gIHByb3RlY3RlZCBnZXQgaXNEaXNwbGF5TW9kZSgpOiBib29sZWFuIHtcbiAgICBjb25zdCBwcm9wczogYW55ID0gdGhpcy5wcm9wcztcbiAgICByZXR1cm4gKFxuICAgICAgcHJvcHMuaXNEaXNwbGF5TW9kZSB8fFxuICAgICAgKCEhdGhpcy5xdWVzdGlvbkJhc2UgJiYgdGhpcy5xdWVzdGlvbkJhc2UuaXNJbnB1dFJlYWRPbmx5KSB8fCBmYWxzZVxuICAgICk7XG4gIH1cbiAgcHJvdGVjdGVkIHdyYXBDZWxsKFxuICAgIGNlbGw6IGFueSxcbiAgICBlbGVtZW50OiBKU1guRWxlbWVudCxcbiAgICByZWFzb246IHN0cmluZ1xuICApOiBKU1guRWxlbWVudCB7XG4gICAgaWYgKCFyZWFzb24pIHtcbiAgICAgIHJldHVybiBlbGVtZW50O1xuICAgIH1cbiAgICBjb25zdCBzdXJ2ZXk6IFN1cnZleU1vZGVsID0gdGhpcy5xdWVzdGlvbkJhc2VcbiAgICAgIC5zdXJ2ZXkgYXMgU3VydmV5TW9kZWw7XG4gICAgbGV0IHdyYXBwZXI6IEpTWC5FbGVtZW50IHwgbnVsbCA9IG51bGw7XG4gICAgaWYgKHN1cnZleSkge1xuICAgICAgd3JhcHBlciA9IFJlYWN0U3VydmV5RWxlbWVudHNXcmFwcGVyLndyYXBNYXRyaXhDZWxsKHN1cnZleSwgZWxlbWVudCwgY2VsbCwgcmVhc29uKTtcbiAgICB9XG4gICAgcmV0dXJuIHdyYXBwZXIgPz8gZWxlbWVudDtcbiAgfVxuICBwdWJsaWMgc2V0Q29udHJvbChlbGVtZW50OiBIVE1MRWxlbWVudCB8IG51bGwpOiB2b2lkIHtcbiAgICBpZighIWVsZW1lbnQpIHtcbiAgICAgIHRoaXMuY29udHJvbCA9IGVsZW1lbnQ7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlRdWVzdGlvblVuY29udHJvbGxlZEVsZW1lbnQ8XG4gIFQgZXh0ZW5kcyBRdWVzdGlvblxuPiBleHRlbmRzIFN1cnZleVF1ZXN0aW9uRWxlbWVudEJhc2Uge1xuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMudXBkYXRlVmFsdWVPbkV2ZW50ID0gdGhpcy51cGRhdGVWYWx1ZU9uRXZlbnQuYmluZCh0aGlzKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IHF1ZXN0aW9uKCk6IFQge1xuICAgIHJldHVybiB0aGlzLnF1ZXN0aW9uQmFzZSBhcyBUO1xuICB9XG4gIHVwZGF0ZVZhbHVlT25FdmVudCA9IChldmVudDogYW55KSA9PiB7XG4gICAgaWYgKFxuICAgICAgIUhlbHBlcnMuaXNUd29WYWx1ZUVxdWFscyh0aGlzLnF1ZXN0aW9uQmFzZS52YWx1ZSwgZXZlbnQudGFyZ2V0LnZhbHVlKVxuICAgICkge1xuICAgICAgdGhpcy5zZXRWYWx1ZUNvcmUoZXZlbnQudGFyZ2V0LnZhbHVlKTtcbiAgICB9XG4gIH07XG4gIHByb3RlY3RlZCBzZXRWYWx1ZUNvcmUobmV3VmFsdWU6IGFueSkge1xuICAgIHRoaXMucXVlc3Rpb25CYXNlLnZhbHVlID0gbmV3VmFsdWU7XG4gIH1cbiAgcHJvdGVjdGVkIGdldFZhbHVlQ29yZSgpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLnF1ZXN0aW9uQmFzZS52YWx1ZTtcbiAgfVxuICBwcm90ZWN0ZWQgdXBkYXRlRG9tRWxlbWVudCgpIHtcbiAgICBpZiAoISF0aGlzLmNvbnRyb2wpIHtcbiAgICAgIGNvbnN0IGNvbnRyb2w6IGFueSA9IHRoaXMuY29udHJvbDtcbiAgICAgIGNvbnN0IG5ld1ZhbHVlID0gdGhpcy5nZXRWYWx1ZUNvcmUoKTtcbiAgICAgIGlmICghSGVscGVycy5pc1R3b1ZhbHVlRXF1YWxzKG5ld1ZhbHVlLCBjb250cm9sLnZhbHVlKSkge1xuICAgICAgICBjb250cm9sLnZhbHVlID0gdGhpcy5nZXRWYWx1ZShuZXdWYWx1ZSk7XG4gICAgICB9XG4gICAgfVxuICAgIHN1cGVyLnVwZGF0ZURvbUVsZW1lbnQoKTtcbiAgfVxuICBwcml2YXRlIGdldFZhbHVlKHZhbDogYW55KTogYW55IHtcbiAgICBpZiAoSGVscGVycy5pc1ZhbHVlRW1wdHkodmFsKSkgcmV0dXJuIFwiXCI7XG4gICAgcmV0dXJuIHZhbDtcbiAgfVxufVxuIiwiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBTdXJ2ZXlRdWVzdGlvbkVsZW1lbnRCYXNlIH0gZnJvbSBcIi4vcmVhY3RxdWVzdGlvbl9lbGVtZW50XCI7XG5pbXBvcnQgeyBRdWVzdGlvbkVtcHR5TW9kZWwgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFJlYWN0UXVlc3Rpb25GYWN0b3J5IH0gZnJvbSBcIi4vcmVhY3RxdWVzdGlvbl9mYWN0b3J5XCI7XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlRdWVzdGlvbkVtcHR5IGV4dGVuZHMgU3VydmV5UXVlc3Rpb25FbGVtZW50QmFzZSB7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgdGhpcy5zdGF0ZSA9IHsgdmFsdWU6IHRoaXMucXVlc3Rpb24udmFsdWUgfTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IHF1ZXN0aW9uKCk6IFF1ZXN0aW9uRW1wdHlNb2RlbCB7XG4gICAgcmV0dXJuIHRoaXMucXVlc3Rpb25CYXNlIGFzIFF1ZXN0aW9uRW1wdHlNb2RlbDtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyRWxlbWVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgcmV0dXJuIDxkaXYgLz47XG4gIH1cbn1cblxuUmVhY3RRdWVzdGlvbkZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJRdWVzdGlvbihcImVtcHR5XCIsIChwcm9wcykgPT4ge1xuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTdXJ2ZXlRdWVzdGlvbkVtcHR5LCBwcm9wcyk7XG59KTtcbiIsImltcG9ydCAqIGFzIFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgU3VydmV5UXVlc3Rpb25FbGVtZW50QmFzZSB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fZWxlbWVudFwiO1xuaW1wb3J0IHsgUXVlc3Rpb25FeHByZXNzaW9uTW9kZWwgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFJlYWN0UXVlc3Rpb25GYWN0b3J5IH0gZnJvbSBcIi4vcmVhY3RxdWVzdGlvbl9mYWN0b3J5XCI7XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlRdWVzdGlvbkV4cHJlc3Npb24gZXh0ZW5kcyBTdXJ2ZXlRdWVzdGlvbkVsZW1lbnRCYXNlIHtcbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IHF1ZXN0aW9uKCk6IFF1ZXN0aW9uRXhwcmVzc2lvbk1vZGVsIHtcbiAgICByZXR1cm4gdGhpcy5xdWVzdGlvbkJhc2UgYXMgUXVlc3Rpb25FeHByZXNzaW9uTW9kZWw7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIHZhciBjc3NDbGFzc2VzID0gdGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzO1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2XG4gICAgICAgIGlkPXt0aGlzLnF1ZXN0aW9uLmlucHV0SWR9XG4gICAgICAgIGNsYXNzTmFtZT17Y3NzQ2xhc3Nlcy5yb290fVxuICAgICAgICByZWY9eyhkaXYpID0+ICh0aGlzLnNldENvbnRyb2woZGl2KSl9XG4gICAgICA+XG4gICAgICAgIHt0aGlzLnF1ZXN0aW9uLmZvcm1hdGVkVmFsdWV9XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG59XG5cblJlYWN0UXVlc3Rpb25GYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyUXVlc3Rpb24oXCJleHByZXNzaW9uXCIsIChwcm9wcykgPT4ge1xuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTdXJ2ZXlRdWVzdGlvbkV4cHJlc3Npb24sIHByb3BzKTtcbn0pO1xuIiwiaW1wb3J0IHsgSGFzaFRhYmxlIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5cbmV4cG9ydCBjbGFzcyBSZWFjdFF1ZXN0aW9uRmFjdG9yeSB7XG4gIHB1YmxpYyBzdGF0aWMgSW5zdGFuY2U6IFJlYWN0UXVlc3Rpb25GYWN0b3J5ID0gbmV3IFJlYWN0UXVlc3Rpb25GYWN0b3J5KCk7XG4gIHByaXZhdGUgY3JlYXRvckhhc2g6IEhhc2hUYWJsZTwobmFtZTogc3RyaW5nKSA9PiBKU1guRWxlbWVudD4gPSB7fTtcblxuICBwdWJsaWMgcmVnaXN0ZXJRdWVzdGlvbihcbiAgICBxdWVzdGlvblR5cGU6IHN0cmluZyxcbiAgICBxdWVzdGlvbkNyZWF0b3I6IChuYW1lOiBzdHJpbmcpID0+IEpTWC5FbGVtZW50XG4gICkge1xuICAgIHRoaXMuY3JlYXRvckhhc2hbcXVlc3Rpb25UeXBlXSA9IHF1ZXN0aW9uQ3JlYXRvcjtcbiAgfVxuICBwdWJsaWMgZ2V0QWxsVHlwZXMoKTogQXJyYXk8c3RyaW5nPiB7XG4gICAgdmFyIHJlc3VsdCA9IG5ldyBBcnJheTxzdHJpbmc+KCk7XG4gICAgZm9yICh2YXIga2V5IGluIHRoaXMuY3JlYXRvckhhc2gpIHtcbiAgICAgIHJlc3VsdC5wdXNoKGtleSk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQuc29ydCgpO1xuICB9XG4gIHB1YmxpYyBjcmVhdGVRdWVzdGlvbihxdWVzdGlvblR5cGU6IHN0cmluZywgcGFyYW1zOiBhbnkpOiBKU1guRWxlbWVudCB8IG51bGwge1xuICAgIHZhciBjcmVhdG9yID0gdGhpcy5jcmVhdG9ySGFzaFtxdWVzdGlvblR5cGVdO1xuICAgIGlmIChjcmVhdG9yID09IG51bGwpIHJldHVybiBudWxsO1xuICAgIHJldHVybiBjcmVhdG9yKHBhcmFtcyk7XG4gIH1cbn1cbiIsImltcG9ydCAqIGFzIFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgUXVlc3Rpb25GaWxlTW9kZWwgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFN1cnZleUFjdGlvbkJhciB9IGZyb20gXCIuL2NvbXBvbmVudHMvYWN0aW9uLWJhci9hY3Rpb24tYmFyXCI7XG5pbXBvcnQgeyBTdmdJY29uIH0gZnJvbSBcIi4vY29tcG9uZW50cy9zdmctaWNvbi9zdmctaWNvblwiO1xuaW1wb3J0IHsgU3VydmV5UXVlc3Rpb25FbGVtZW50QmFzZSB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fZWxlbWVudFwiO1xuaW1wb3J0IHsgUmVhY3RRdWVzdGlvbkZhY3RvcnkgfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uX2ZhY3RvcnlcIjtcblxuZXhwb3J0IGNsYXNzIFN1cnZleVF1ZXN0aW9uRmlsZSBleHRlbmRzIFN1cnZleVF1ZXN0aW9uRWxlbWVudEJhc2Uge1xuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICB9XG4gIHByb3RlY3RlZCBnZXQgcXVlc3Rpb24oKTogUXVlc3Rpb25GaWxlTW9kZWwge1xuICAgIHJldHVybiB0aGlzLnF1ZXN0aW9uQmFzZSBhcyBRdWVzdGlvbkZpbGVNb2RlbDtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyRWxlbWVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgdmFyIHByZXZpZXcgPSB0aGlzLnJlbmRlclByZXZpZXcoKTtcbiAgICB2YXIgZmlsZUlucHV0OiBKU1guRWxlbWVudCB8IG51bGwgPSBudWxsO1xuICAgIHZhciBmaWxlRGVjb3JhdG9yID0gdGhpcy5yZW5kZXJGaWxlRGVjb3JhdG9yKCk7XG4gICAgdmFyIGNsZWFyQnV0dG9uID0gdGhpcy5yZW5kZXJDbGVhckJ1dHRvbihcbiAgICAgIHRoaXMucXVlc3Rpb24uc2hvd1JlbW92ZUJ1dHRvblxuICAgICk7XG4gICAgdmFyIGNsZWFyQnV0dG9uQm90dG9tID0gdGhpcy5yZW5kZXJDbGVhckJ1dHRvbihcbiAgICAgIHRoaXMucXVlc3Rpb24uc2hvd1JlbW92ZUJ1dHRvbkJvdHRvbVxuICAgICk7XG5cbiAgICBsZXQgbW9iaWxlRmlsZU5hdmlnYXRvciA9IHRoaXMucXVlc3Rpb24ubW9iaWxlRmlsZU5hdmlnYXRvclZpc2libGU/KDxTdXJ2ZXlBY3Rpb25CYXIgbW9kZWwgPSB7dGhpcy5xdWVzdGlvbi5tb2JpbGVGaWxlTmF2aWdhdG9yfT48L1N1cnZleUFjdGlvbkJhcj4pOm51bGw7XG4gICAgZmlsZUlucHV0ID0gKFxuICAgICAgdGhpcy5pc0Rpc3BsYXlNb2RlID9cbiAgICAgICAgPGlucHV0XG4gICAgICAgICAgdHlwZT1cImZpbGVcIlxuICAgICAgICAgIGRpc2FibGVkPXt0aGlzLmlzRGlzcGxheU1vZGV9XG4gICAgICAgICAgY2xhc3NOYW1lPXshdGhpcy5pc0Rpc3BsYXlNb2RlID8gdGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLmZpbGVJbnB1dCA6IHRoaXMucXVlc3Rpb24uZ2V0UmVhZE9ubHlGaWxlQ3NzKCl9XG4gICAgICAgICAgaWQ9e3RoaXMucXVlc3Rpb24uaW5wdXRJZH1cbiAgICAgICAgICByZWY9e2lucHV0ID0+ICh0aGlzLnNldENvbnRyb2woaW5wdXQpKX1cbiAgICAgICAgICBzdHlsZT17IXRoaXMuaXNEaXNwbGF5TW9kZSA/IHt9IDogeyBjb2xvcjogXCJ0cmFuc3BhcmVudFwiIH19XG4gICAgICAgICAgb25DaGFuZ2U9eyF0aGlzLmlzRGlzcGxheU1vZGUgPyB0aGlzLnF1ZXN0aW9uLmRvQ2hhbmdlIDogKCgpID0+IHt9KX1cbiAgICAgICAgICBtdWx0aXBsZT17dGhpcy5xdWVzdGlvbi5hbGxvd011bHRpcGxlfVxuICAgICAgICAgIHBsYWNlaG9sZGVyPXt0aGlzLnF1ZXN0aW9uLnRpdGxlfVxuICAgICAgICAgIGFjY2VwdD17dGhpcy5xdWVzdGlvbi5hY2NlcHRlZFR5cGVzfVxuICAgICAgICAvPlxuICAgICAgICA6XG4gICAgICAgIDxpbnB1dFxuICAgICAgICAgIHR5cGU9XCJmaWxlXCJcbiAgICAgICAgICBkaXNhYmxlZD17dGhpcy5pc0Rpc3BsYXlNb2RlfVxuICAgICAgICAgIHRhYkluZGV4PXstMX1cbiAgICAgICAgICBjbGFzc05hbWU9eyF0aGlzLmlzRGlzcGxheU1vZGUgPyB0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMuZmlsZUlucHV0IDogdGhpcy5xdWVzdGlvbi5nZXRSZWFkT25seUZpbGVDc3MoKX1cbiAgICAgICAgICBpZD17dGhpcy5xdWVzdGlvbi5pbnB1dElkfVxuICAgICAgICAgIHJlZj17aW5wdXQgPT4gKHRoaXMuc2V0Q29udHJvbChpbnB1dCkpfVxuICAgICAgICAgIHN0eWxlPXshdGhpcy5pc0Rpc3BsYXlNb2RlID8ge30gOiB7IGNvbG9yOiBcInRyYW5zcGFyZW50XCIgfX1cbiAgICAgICAgICBvbkNoYW5nZT17IXRoaXMuaXNEaXNwbGF5TW9kZSA/IHRoaXMucXVlc3Rpb24uZG9DaGFuZ2UgOiAoKCkgPT4ge30pfVxuICAgICAgICAgIGFyaWEtcmVxdWlyZWQ9e3RoaXMucXVlc3Rpb24uYXJpYVJlcXVpcmVkfVxuICAgICAgICAgIGFyaWEtbGFiZWw9e3RoaXMucXVlc3Rpb24uYXJpYUxhYmVsfVxuICAgICAgICAgIGFyaWEtaW52YWxpZD17dGhpcy5xdWVzdGlvbi5hcmlhSW52YWxpZH1cbiAgICAgICAgICBhcmlhLWRlc2NyaWJlZGJ5PXt0aGlzLnF1ZXN0aW9uLmFyaWFEZXNjcmliZWRCeX1cbiAgICAgICAgICBtdWx0aXBsZT17dGhpcy5xdWVzdGlvbi5hbGxvd011bHRpcGxlfVxuICAgICAgICAgIHRpdGxlPXt0aGlzLnF1ZXN0aW9uLmlucHV0VGl0bGV9XG4gICAgICAgICAgYWNjZXB0PXt0aGlzLnF1ZXN0aW9uLmFjY2VwdGVkVHlwZXN9XG4gICAgICAgIC8+XG4gICAgKTtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9e3RoaXMucXVlc3Rpb24uZmlsZVJvb3RDc3N9PlxuICAgICAgICB7ZmlsZUlucHV0fVxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3NOYW1lPXt0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMuZHJhZ0FyZWF9XG4gICAgICAgICAgb25Ecm9wPXt0aGlzLnF1ZXN0aW9uLm9uRHJvcH1cbiAgICAgICAgICBvbkRyYWdPdmVyPXt0aGlzLnF1ZXN0aW9uLm9uRHJhZ092ZXJ9XG4gICAgICAgICAgb25EcmFnTGVhdmU9e3RoaXMucXVlc3Rpb24ub25EcmFnTGVhdmV9XG4gICAgICAgICAgb25EcmFnRW50ZXI9e3RoaXMucXVlc3Rpb24ub25EcmFnRW50ZXJ9XG4gICAgICAgID5cbiAgICAgICAgICB7ZmlsZURlY29yYXRvcn1cbiAgICAgICAgICB7Y2xlYXJCdXR0b259XG4gICAgICAgICAge3ByZXZpZXd9XG4gICAgICAgICAge2NsZWFyQnV0dG9uQm90dG9tfVxuICAgICAgICAgIHttb2JpbGVGaWxlTmF2aWdhdG9yfVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckZpbGVEZWNvcmF0b3IoKTogSlNYLkVsZW1lbnQge1xuICAgIGNvbnN0IHF1ZXN0aW9uQ3NzID0gdGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzO1xuICAgIGxldCBub0ZpbGVDaG9zZW46IEpTWC5FbGVtZW50IHwgbnVsbCA9IG51bGw7XG4gICAgbGV0IGNob29zZUZpbGU6IEpTWC5FbGVtZW50IHwgbnVsbCA9IG51bGw7XG4gICAgY2hvb3NlRmlsZSA9IChcbiAgICAgIDxsYWJlbFxuICAgICAgICByb2xlPVwiYnV0dG9uXCJcbiAgICAgICAgdGFiSW5kZXg9ezB9XG4gICAgICAgIGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5nZXRDaG9vc2VGaWxlQ3NzKCl9XG4gICAgICAgIGh0bWxGb3I9e3RoaXMucXVlc3Rpb24uaW5wdXRJZH1cbiAgICAgICAgYXJpYS1sYWJlbD17dGhpcy5xdWVzdGlvbi5jaG9vc2VCdXR0b25DYXB0aW9ufVxuICAgICAgPlxuICAgICAgICA8c3Bhbj57dGhpcy5xdWVzdGlvbi5jaG9vc2VCdXR0b25DYXB0aW9ufTwvc3Bhbj5cbiAgICAgICAgeyghIXRoaXMucXVlc3Rpb24uY3NzQ2xhc3Nlcy5jaG9vc2VGaWxlSWNvbklkKSA/IDxTdmdJY29uIHRpdGxlPXt0aGlzLnF1ZXN0aW9uLmNob29zZUJ1dHRvbkNhcHRpb259IGljb25OYW1lPXt0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMuY2hvb3NlRmlsZUljb25JZH0gc2l6ZT17XCJhdXRvXCJ9PjwvU3ZnSWNvbj46IG51bGwgfVxuICAgICAgPC9sYWJlbD5cbiAgICApO1xuICAgIGlmICh0aGlzLnF1ZXN0aW9uLmlzRW1wdHkoKSkge1xuICAgICAgbm9GaWxlQ2hvc2VuID0gKFxuICAgICAgICA8c3BhbiBjbGFzc05hbWU9e3RoaXMucXVlc3Rpb24uY3NzQ2xhc3Nlcy5ub0ZpbGVDaG9zZW59PlxuICAgICAgICAgIHt0aGlzLnF1ZXN0aW9uLm5vRmlsZUNob3NlbkNhcHRpb259XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiAoXG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5nZXRGaWxlRGVjb3JhdG9yQ3NzKCl9XG4gICAgICA+XG4gICAgICAgIDxzcGFuIGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLmRyYWdBcmVhUGxhY2Vob2xkZXJ9Pnt0aGlzLnF1ZXN0aW9uLmRyYWdBcmVhUGxhY2Vob2xkZXJ9PC9zcGFuPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLndyYXBwZXJ9PlxuICAgICAgICAgIHtjaG9vc2VGaWxlfVxuICAgICAgICAgIHtub0ZpbGVDaG9zZW59XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyQ2xlYXJCdXR0b24oY2xhc3NOYW1lOiBzdHJpbmcpOiBKU1guRWxlbWVudCB8IG51bGwge1xuICAgIHJldHVybiBjbGFzc05hbWUgPyAoXG4gICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBvbkNsaWNrPXt0aGlzLnF1ZXN0aW9uLmRvQ2xlYW59IGNsYXNzTmFtZT17Y2xhc3NOYW1lfT5cbiAgICAgICAgPHNwYW4+e3RoaXMucXVlc3Rpb24uY2xlYXJCdXR0b25DYXB0aW9ufTwvc3Bhbj5cbiAgICAgICAgeyghIXRoaXMucXVlc3Rpb24uY3NzQ2xhc3Nlcy5yZW1vdmVCdXR0b25JY29uSWQpID8gPFN2Z0ljb24gaWNvbk5hbWU9e3RoaXMucXVlc3Rpb24uY3NzQ2xhc3Nlcy5yZW1vdmVCdXR0b25JY29uSWR9IHNpemU9e1wiYXV0b1wifSB0aXRsZT17dGhpcy5xdWVzdGlvbi5jbGVhckJ1dHRvbkNhcHRpb259PjwvU3ZnSWNvbj46IG51bGwgfVxuICAgICAgPC9idXR0b24+XG4gICAgKSA6IG51bGw7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckZpbGVTaWduKGNsYXNzTmFtZTogc3RyaW5nLCB2YWw6IGFueSk6IEpTWC5FbGVtZW50IHwgbnVsbCB7XG4gICAgaWYoIWNsYXNzTmFtZSB8fCAhdmFsLm5hbWUpIHJldHVybiBudWxsO1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT17Y2xhc3NOYW1lfT5cbiAgICAgICAgPGFcbiAgICAgICAgICBocmVmPXt2YWwuY29udGVudH1cbiAgICAgICAgICBvbkNsaWNrPXtldmVudCA9PiB7XG4gICAgICAgICAgICB0aGlzLnF1ZXN0aW9uLmRvRG93bmxvYWRGaWxlKGV2ZW50LCB2YWwpO1xuICAgICAgICAgIH19XG4gICAgICAgICAgdGl0bGU9e3ZhbC5uYW1lfVxuICAgICAgICAgIGRvd25sb2FkPXt2YWwubmFtZX1cbiAgICAgICAgICBzdHlsZT17eyB3aWR0aDogdGhpcy5xdWVzdGlvbi5pbWFnZVdpZHRoIH19XG4gICAgICAgID5cbiAgICAgICAgICB7dmFsLm5hbWV9XG4gICAgICAgIDwvYT5cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlclByZXZpZXcoKTogSlNYLkVsZW1lbnQgfCBudWxsIHtcbiAgICBpZiAoIXRoaXMucXVlc3Rpb24ucHJldmlld1ZhbHVlIHx8ICF0aGlzLnF1ZXN0aW9uLnByZXZpZXdWYWx1ZS5sZW5ndGgpIHJldHVybiBudWxsO1xuICAgIHZhciBwcmV2aWV3cyA9IHRoaXMucXVlc3Rpb24ucHJldmlld1ZhbHVlLm1hcCgodmFsLCBpbmRleCkgPT4ge1xuICAgICAgaWYgKCF2YWwpIHJldHVybiBudWxsO1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPHNwYW5cbiAgICAgICAgICBrZXk9e3RoaXMucXVlc3Rpb24uaW5wdXRJZCArIFwiX1wiICsgaW5kZXh9XG4gICAgICAgICAgY2xhc3NOYW1lPXt0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMucHJldmlld31cbiAgICAgICAgICBzdHlsZT17eyBkaXNwbGF5OiB0aGlzLnF1ZXN0aW9uLmlzUHJldmlld1Zpc2libGUoaW5kZXgpID8gdW5kZWZpbmVkIDogXCJub25lXCIgfX1cbiAgICAgICAgPlxuICAgICAgICAgIHt0aGlzLnJlbmRlckZpbGVTaWduKHRoaXMucXVlc3Rpb24uY3NzQ2xhc3Nlcy5maWxlU2lnbiwgdmFsKX1cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLmltYWdlV3JhcHBlcn0+XG4gICAgICAgICAgICB7dGhpcy5xdWVzdGlvbi5jYW5QcmV2aWV3SW1hZ2UodmFsKSA/IChcbiAgICAgICAgICAgICAgPGltZ1xuICAgICAgICAgICAgICAgIHNyYz17dmFsLmNvbnRlbnR9XG4gICAgICAgICAgICAgICAgc3R5bGU9e3sgaGVpZ2h0OiB0aGlzLnF1ZXN0aW9uLmltYWdlSGVpZ2h0LCB3aWR0aDogdGhpcy5xdWVzdGlvbi5pbWFnZVdpZHRoIH19XG4gICAgICAgICAgICAgICAgYWx0PVwiRmlsZSBwcmV2aWV3XCJcbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICkgOiAodGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLmRlZmF1bHRJbWFnZT8oXG4gICAgICAgICAgICAgIDxTdmdJY29uIGljb25OYW1lPXt0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMuZGVmYXVsdEltYWdlSWNvbklkfSBzaXplPXtcImF1dG9cIn0gY2xhc3NOYW1lPXt0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMuZGVmYXVsdEltYWdlfT48L1N2Z0ljb24+XG4gICAgICAgICAgICApOm51bGwpfVxuICAgICAgICAgICAge3ZhbC5uYW1lICYmICF0aGlzLnF1ZXN0aW9uLmlzUmVhZE9ubHkgPyAoXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXt0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMucmVtb3ZlRmlsZUJ1dHRvbn0gb25DbGljaz17KCkgPT4gdGhpcy5xdWVzdGlvbi5kb1JlbW92ZUZpbGUodmFsKX0+XG4gICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLnJlbW92ZUZpbGV9XG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAge3RoaXMucXVlc3Rpb24ucmVtb3ZlRmlsZUNhcHRpb259XG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgIHsodGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLnJlbW92ZUZpbGVTdmdJY29uSWQpID9cbiAgICAgICAgICAgICAgICAgICg8U3ZnSWNvbiB0aXRsZT17dGhpcy5xdWVzdGlvbi5yZW1vdmVGaWxlQ2FwdGlvbn0gaWNvbk5hbWU9e3RoaXMucXVlc3Rpb24uY3NzQ2xhc3Nlcy5yZW1vdmVGaWxlU3ZnSWNvbklkfSBzaXplPXtcImF1dG9cIn0gY2xhc3NOYW1lPXt0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMucmVtb3ZlRmlsZVN2Z30+PC9TdmdJY29uPik6IG51bGwgfVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIHt0aGlzLnJlbmRlckZpbGVTaWduKHRoaXMucXVlc3Rpb24uY3NzQ2xhc3Nlcy5maWxlU2lnbkJvdHRvbSwgdmFsKX1cbiAgICAgICAgPC9zcGFuPlxuICAgICAgKTtcbiAgICB9KTtcbiAgICByZXR1cm4gPGRpdiBjbGFzc05hbWU9e3RoaXMucXVlc3Rpb24uY3NzQ2xhc3Nlcy5maWxlTGlzdCB8fCB1bmRlZmluZWR9PntwcmV2aWV3c308L2Rpdj47XG4gIH1cbn1cblxuUmVhY3RRdWVzdGlvbkZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJRdWVzdGlvbihcImZpbGVcIiwgcHJvcHMgPT4ge1xuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTdXJ2ZXlRdWVzdGlvbkZpbGUsIHByb3BzKTtcbn0pO1xuIiwiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBTdXJ2ZXlRdWVzdGlvbkVsZW1lbnRCYXNlIH0gZnJvbSBcIi4vcmVhY3RxdWVzdGlvbl9lbGVtZW50XCI7XG5pbXBvcnQgeyBRdWVzdGlvbkh0bWxNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgUmVhY3RRdWVzdGlvbkZhY3RvcnkgfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uX2ZhY3RvcnlcIjtcblxuZXhwb3J0IGNsYXNzIFN1cnZleVF1ZXN0aW9uSHRtbCBleHRlbmRzIFN1cnZleVF1ZXN0aW9uRWxlbWVudEJhc2Uge1xuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICB9XG4gIHByb3RlY3RlZCBnZXQgcXVlc3Rpb24oKTogUXVlc3Rpb25IdG1sTW9kZWwge1xuICAgIHJldHVybiB0aGlzLnF1ZXN0aW9uQmFzZSBhcyBRdWVzdGlvbkh0bWxNb2RlbDtcbiAgfVxuICBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICB0aGlzLnJlYWN0T25TdHJDaGFuZ2VkKCk7XG4gIH1cbiAgY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgdGhpcy5xdWVzdGlvbi5sb2NIdG1sLm9uQ2hhbmdlZCA9IGZ1bmN0aW9uICgpIHt9O1xuICB9XG4gIGNvbXBvbmVudERpZFVwZGF0ZShwcmV2UHJvcHM6IGFueSwgcHJldlN0YXRlOiBhbnkpIHtcbiAgICB0aGlzLnJlYWN0T25TdHJDaGFuZ2VkKCk7XG4gIH1cbiAgcHJpdmF0ZSByZWFjdE9uU3RyQ2hhbmdlZCgpIHtcbiAgICB0aGlzLnF1ZXN0aW9uLmxvY0h0bWwub25DaGFuZ2VkID0gKCkgPT4ge1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7IGNoYW5nZWQ6ICEhdGhpcy5zdGF0ZSAmJiB0aGlzLnN0YXRlLmNoYW5nZWQgPyB0aGlzLnN0YXRlLmNoYW5nZWQgKyAxIDogMSB9KTtcbiAgICB9O1xuICB9XG4gIHByb3RlY3RlZCBjYW5SZW5kZXIoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHN1cGVyLmNhblJlbmRlcigpICYmICEhdGhpcy5xdWVzdGlvbi5odG1sO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICB2YXIgaHRtbFZhbHVlID0geyBfX2h0bWw6IHRoaXMucXVlc3Rpb24ubG9jSHRtbC5yZW5kZXJlZEh0bWwgfTtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdlxuICAgICAgICBjbGFzc05hbWU9e3RoaXMucXVlc3Rpb24ucmVuZGVyQ3NzUm9vdH1cbiAgICAgICAgZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUw9e2h0bWxWYWx1ZX1cbiAgICAgIC8+XG4gICAgKTtcbiAgfVxufVxuXG5SZWFjdFF1ZXN0aW9uRmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlclF1ZXN0aW9uKFwiaHRtbFwiLCAocHJvcHMpID0+IHtcbiAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3VydmV5UXVlc3Rpb25IdG1sLCBwcm9wcyk7XG59KTtcbiIsImltcG9ydCAqIGFzIFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHtcbiAgUmVhY3RTdXJ2ZXlFbGVtZW50LFxuICBTdXJ2ZXlRdWVzdGlvbkVsZW1lbnRCYXNlLFxufSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uX2VsZW1lbnRcIjtcbmltcG9ydCB7IFF1ZXN0aW9uTWF0cml4TW9kZWwsIE1hdHJpeFJvd01vZGVsLCBTdXJ2ZXlNb2RlbCwgSGVscGVycyB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgUmVhY3RRdWVzdGlvbkZhY3RvcnkgfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uX2ZhY3RvcnlcIjtcbmltcG9ydCB7IFJlYWN0U3VydmV5RWxlbWVudHNXcmFwcGVyIH0gZnJvbSBcIi4vcmVhY3RzdXJ2ZXltb2RlbFwiO1xuXG5leHBvcnQgY2xhc3MgU3VydmV5UXVlc3Rpb25NYXRyaXggZXh0ZW5kcyBTdXJ2ZXlRdWVzdGlvbkVsZW1lbnRCYXNlIHtcbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLnN0YXRlID0geyByb3dzQ2hhbmdlZDogMCB9O1xuICB9XG4gIHByb3RlY3RlZCBnZXQgcXVlc3Rpb24oKTogUXVlc3Rpb25NYXRyaXhNb2RlbCB7XG4gICAgcmV0dXJuIHRoaXMucXVlc3Rpb25CYXNlIGFzIFF1ZXN0aW9uTWF0cml4TW9kZWw7XG4gIH1cbiAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgc3VwZXIuY29tcG9uZW50RGlkTW91bnQoKTtcbiAgICBpZiAodGhpcy5xdWVzdGlvbikge1xuICAgICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgICAgdGhpcy5xdWVzdGlvbi52aXNpYmxlUm93c0NoYW5nZWRDYWxsYmFjayA9IGZ1bmN0aW9uKCkge1xuICAgICAgICBzZWxmLnNldFN0YXRlKHsgcm93c0NoYW5nZWQ6IHNlbGYuc3RhdGUucm93c0NoYW5nZWQgKyAxIH0pO1xuICAgICAgfTtcbiAgICB9XG4gIH1cbiAgY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgc3VwZXIuY29tcG9uZW50V2lsbFVubW91bnQoKTtcbiAgICBpZiAodGhpcy5xdWVzdGlvbikge1xuICAgICAgdGhpcy5xdWVzdGlvbi52aXNpYmxlUm93c0NoYW5nZWRDYWxsYmFjayA9IG51bGwgYXMgYW55O1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICB2YXIgY3NzQ2xhc3NlcyA9IHRoaXMucXVlc3Rpb24uY3NzQ2xhc3NlcztcbiAgICB2YXIgcm93c1RIID0gdGhpcy5xdWVzdGlvbi5oYXNSb3dzID8gPHRkIC8+IDogbnVsbDtcbiAgICB2YXIgaGVhZGVyczpBcnJheTxKU1guRWxlbWVudD4gPSBbXTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMucXVlc3Rpb24udmlzaWJsZUNvbHVtbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBjb2x1bW4gPSB0aGlzLnF1ZXN0aW9uLnZpc2libGVDb2x1bW5zW2ldO1xuICAgICAgdmFyIGtleSA9IFwiY29sdW1uXCIgKyBpO1xuICAgICAgdmFyIGNvbHVtVGV4dCA9IHRoaXMucmVuZGVyTG9jU3RyaW5nKGNvbHVtbi5sb2NUZXh0KTtcbiAgICAgIGhlYWRlcnMucHVzaChcbiAgICAgICAgPHRoIGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLmhlYWRlckNlbGx9IGtleT17a2V5fT5cbiAgICAgICAgICB7dGhpcy53cmFwQ2VsbCh7IGNvbHVtbjogY29sdW1uIH0sIGNvbHVtVGV4dCwgXCJjb2x1bW4taGVhZGVyXCIpfVxuICAgICAgICA8L3RoPlxuICAgICAgKTtcbiAgICB9XG4gICAgdmFyIHJvd3M6QXJyYXk8SlNYLkVsZW1lbnQ+ID0gW107XG4gICAgdmFyIHZpc2libGVSb3dzID0gdGhpcy5xdWVzdGlvbi52aXNpYmxlUm93cztcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZpc2libGVSb3dzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgcm93ID0gdmlzaWJsZVJvd3NbaV07XG4gICAgICB2YXIga2V5ID0gXCJyb3ctXCIgKyByb3cubmFtZSArIFwiLVwiICsgaTtcbiAgICAgIHJvd3MucHVzaChcbiAgICAgICAgPFN1cnZleVF1ZXN0aW9uTWF0cml4Um93XG4gICAgICAgICAga2V5PXtrZXl9XG4gICAgICAgICAgcXVlc3Rpb249e3RoaXMucXVlc3Rpb259XG4gICAgICAgICAgY3NzQ2xhc3Nlcz17Y3NzQ2xhc3Nlc31cbiAgICAgICAgICBpc0Rpc3BsYXlNb2RlPXt0aGlzLmlzRGlzcGxheU1vZGV9XG4gICAgICAgICAgcm93PXtyb3d9XG4gICAgICAgICAgaXNGaXJzdD17aSA9PSAwfVxuICAgICAgICAvPlxuICAgICAgKTtcbiAgICB9XG4gICAgdmFyIGhlYWRlciA9ICF0aGlzLnF1ZXN0aW9uLnNob3dIZWFkZXIgPyBudWxsIDogKFxuICAgICAgPHRoZWFkPlxuICAgICAgICA8dHI+XG4gICAgICAgICAge3Jvd3NUSH1cbiAgICAgICAgICB7aGVhZGVyc31cbiAgICAgICAgPC90cj5cbiAgICAgIDwvdGhlYWQ+XG4gICAgKTtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdlxuICAgICAgICBjbGFzc05hbWU9e2Nzc0NsYXNzZXMudGFibGVXcmFwcGVyfVxuICAgICAgICByZWY9e3Jvb3QgPT4gKHRoaXMuc2V0Q29udHJvbChyb290KSl9XG4gICAgICA+XG4gICAgICAgIDxmaWVsZHNldD5cbiAgICAgICAgICA8bGVnZW5kIGFyaWEtbGFiZWw9e3RoaXMucXVlc3Rpb24ubG9jVGl0bGUucmVuZGVyZWRIdG1sfSAvPlxuICAgICAgICAgIDx0YWJsZSBjbGFzc05hbWU9e3RoaXMucXVlc3Rpb24uZ2V0VGFibGVDc3MoKX0+XG4gICAgICAgICAgICB7aGVhZGVyfVxuICAgICAgICAgICAgPHRib2R5Pntyb3dzfTwvdGJvZHk+XG4gICAgICAgICAgPC90YWJsZT5cbiAgICAgICAgPC9maWVsZHNldD5cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFN1cnZleVF1ZXN0aW9uTWF0cml4Um93IGV4dGVuZHMgUmVhY3RTdXJ2ZXlFbGVtZW50IHtcbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLmhhbmRsZU9uQ2hhbmdlID0gdGhpcy5oYW5kbGVPbkNoYW5nZS5iaW5kKHRoaXMpO1xuICB9XG4gIHByaXZhdGUgZ2V0IHF1ZXN0aW9uKCk6IFF1ZXN0aW9uTWF0cml4TW9kZWwge1xuICAgIHJldHVybiB0aGlzLnByb3BzLnF1ZXN0aW9uO1xuICB9XG4gIHByaXZhdGUgZ2V0IHJvdygpOiBNYXRyaXhSb3dNb2RlbCB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMucm93O1xuICB9XG4gIGhhbmRsZU9uQ2hhbmdlKGV2ZW50OiBhbnkpIHtcbiAgICB0aGlzLnJvdy52YWx1ZSA9IGV2ZW50LnRhcmdldC52YWx1ZTtcbiAgICB0aGlzLnNldFN0YXRlKHsgdmFsdWU6IHRoaXMucm93LnZhbHVlIH0pO1xuICB9XG4gIHByb3RlY3RlZCB3cmFwQ2VsbChjZWxsOiBhbnksIGVsZW1lbnQ6IEpTWC5FbGVtZW50LCByZWFzb246IHN0cmluZyk6IEpTWC5FbGVtZW50IHtcbiAgICBpZighcmVhc29uKSB7XG4gICAgICByZXR1cm4gZWxlbWVudDtcbiAgICB9XG4gICAgY29uc3Qgc3VydmV5OiBTdXJ2ZXlNb2RlbCA9IHRoaXMucXVlc3Rpb24uc3VydmV5IGFzIFN1cnZleU1vZGVsO1xuICAgIGxldCB3cmFwcGVyOiBKU1guRWxlbWVudCB8IG51bGwgPSBudWxsO1xuICAgIGlmIChzdXJ2ZXkpIHtcbiAgICAgIHdyYXBwZXIgPSBSZWFjdFN1cnZleUVsZW1lbnRzV3JhcHBlci53cmFwTWF0cml4Q2VsbChzdXJ2ZXksIGVsZW1lbnQsIGNlbGwsIHJlYXNvbik7XG4gICAgfVxuICAgIHJldHVybiB3cmFwcGVyID8/IGVsZW1lbnQ7XG4gIH1cbiAgcHJvdGVjdGVkIGNhblJlbmRlcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISF0aGlzLnJvdztcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyRWxlbWVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgdmFyIHJvd3NURDogSlNYLkVsZW1lbnQgfCBudWxsID0gbnVsbDtcblxuICAgIGlmICh0aGlzLnF1ZXN0aW9uLmhhc1Jvd3MpIHtcbiAgICAgIHZhciByb3dUZXh0ID0gdGhpcy5yZW5kZXJMb2NTdHJpbmcodGhpcy5yb3cubG9jVGV4dCk7XG4gICAgICByb3dzVEQgPSA8dGQgY2xhc3NOYW1lPXt0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMucm93VGV4dENlbGx9PlxuICAgICAgICB7dGhpcy53cmFwQ2VsbCh7IHJvdzogdGhpcy5yb3cgfSwgcm93VGV4dCwgXCJyb3ctaGVhZGVyXCIpfVxuICAgICAgPC90ZD47XG4gICAgfVxuXG4gICAgdmFyIHRkcyA9IHRoaXMuZ2VuZXJhdGVUZHMoKTtcbiAgICByZXR1cm4gKFxuICAgICAgPHRyIGNsYXNzTmFtZT17dGhpcy5yb3cucm93Q2xhc3NlcyB8fCB1bmRlZmluZWR9PlxuICAgICAgICB7cm93c1REfVxuICAgICAgICB7dGRzfVxuICAgICAgPC90cj5cbiAgICApO1xuICB9XG5cbiAgZ2VuZXJhdGVUZHMoKSB7XG4gICAgdmFyIHRkczpBcnJheTxKU1guRWxlbWVudD4gPSBbXTtcbiAgICB2YXIgcm93ID0gdGhpcy5yb3c7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMucXVlc3Rpb24udmlzaWJsZUNvbHVtbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciB0ZDogSlNYLkVsZW1lbnQgfCBudWxsID0gbnVsbDtcbiAgICAgIHZhciBjb2x1bW4gPSB0aGlzLnF1ZXN0aW9uLnZpc2libGVDb2x1bW5zW2ldO1xuICAgICAgdmFyIGtleSA9IFwidmFsdWVcIiArIGk7XG5cbiAgICAgIC8vdmFyIGlzQ2hlY2tlZCA9IEhlbHBlcnMuaXNUd29WYWx1ZUVxdWFscyhyb3cudmFsdWUsIGNvbHVtbi52YWx1ZSk7XG4gICAgICB2YXIgaXNDaGVja2VkID0gcm93LnZhbHVlID09IGNvbHVtbi52YWx1ZTtcbiAgICAgIGxldCBpdGVtQ2xhc3MgPSB0aGlzLnF1ZXN0aW9uLmdldEl0ZW1DbGFzcyhyb3csIGNvbHVtbik7XG4gICAgICB2YXIgaW5wdXRJZCA9IHRoaXMucXVlc3Rpb24uaW5wdXRJZCArIFwiX1wiICsgcm93Lm5hbWUgKyBcIl9cIiArIGk7XG4gICAgICBpZiAodGhpcy5xdWVzdGlvbi5oYXNDZWxsVGV4dCkge1xuICAgICAgICB2YXIgZ2V0SGFuZGxlciA9ICF0aGlzLnF1ZXN0aW9uLmlzSW5wdXRSZWFkT25seVxuICAgICAgICAgID8gKGNvbHVtbjogYW55KSA9PiAoKSA9PiB0aGlzLmNlbGxDbGljayhyb3csIGNvbHVtbilcbiAgICAgICAgICA6IG51bGw7XG4gICAgICAgIHRkID0gKFxuICAgICAgICAgIDx0ZFxuICAgICAgICAgICAga2V5PXtrZXl9XG4gICAgICAgICAgICBjbGFzc05hbWU9e2l0ZW1DbGFzc31cbiAgICAgICAgICAgIG9uQ2xpY2s9e2dldEhhbmRsZXIgPyBnZXRIYW5kbGVyKGNvbHVtbikgOiAoKSA9PiB7fX1cbiAgICAgICAgICA+XG4gICAgICAgICAgICB7dGhpcy5yZW5kZXJMb2NTdHJpbmcoXG4gICAgICAgICAgICAgIHRoaXMucXVlc3Rpb24uZ2V0Q2VsbERpc3BsYXlMb2NUZXh0KHJvdy5uYW1lLCBjb2x1bW4pXG4gICAgICAgICAgICApfVxuICAgICAgICAgIDwvdGQ+XG4gICAgICAgICk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0ZCA9IChcbiAgICAgICAgICA8dGRcbiAgICAgICAgICAgIGtleT17a2V5fVxuICAgICAgICAgICAgZGF0YS1yZXNwb25zaXZlLXRpdGxlPXtjb2x1bW4ubG9jVGV4dC5yZW5kZXJlZEh0bWx9XG4gICAgICAgICAgICBjbGFzc05hbWU9e3RoaXMucXVlc3Rpb24uY3NzQ2xhc3Nlcy5jZWxsfVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxsYWJlbCBjbGFzc05hbWU9e2l0ZW1DbGFzc30+XG4gICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgIGlkPXtpbnB1dElkfVxuICAgICAgICAgICAgICAgIHR5cGU9XCJyYWRpb1wiXG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPXt0aGlzLmNzc0NsYXNzZXMuaXRlbVZhbHVlfVxuICAgICAgICAgICAgICAgIG5hbWU9e3Jvdy5mdWxsTmFtZX1cbiAgICAgICAgICAgICAgICB2YWx1ZT17Y29sdW1uLnZhbHVlfVxuICAgICAgICAgICAgICAgIGRpc2FibGVkPXt0aGlzLmlzRGlzcGxheU1vZGV9XG4gICAgICAgICAgICAgICAgY2hlY2tlZD17aXNDaGVja2VkfVxuICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXt0aGlzLmhhbmRsZU9uQ2hhbmdlfVxuICAgICAgICAgICAgICAgIGFyaWEtcmVxdWlyZWQ9e3RoaXMucXVlc3Rpb24uYXJpYVJlcXVpcmVkfVxuICAgICAgICAgICAgICAgIGFyaWEtbGFiZWw9e2NvbHVtbi5sb2NUZXh0LnJlbmRlcmVkSHRtbH1cbiAgICAgICAgICAgICAgICBhcmlhLWludmFsaWQ9e3RoaXMucXVlc3Rpb24uYXJpYUludmFsaWR9XG4gICAgICAgICAgICAgICAgYXJpYS1kZXNjcmliZWRieT17dGhpcy5xdWVzdGlvbi5hcmlhRGVzY3JpYmVkQnl9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLm1hdGVyaWFsRGVjb3JhdG9yfT5cbiAgICAgICAgICAgICAgICB7dGhpcy5xdWVzdGlvbi5pdGVtU3ZnSWNvbiA/XG4gICAgICAgICAgICAgICAgICA8c3ZnXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17dGhpcy5jc3NDbGFzc2VzLml0ZW1EZWNvcmF0b3J9XG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDx1c2UgeGxpbmtIcmVmPXt0aGlzLnF1ZXN0aW9uLml0ZW1TdmdJY29ufT48L3VzZT5cbiAgICAgICAgICAgICAgICAgIDwvc3ZnPiA6XG4gICAgICAgICAgICAgICAgICBudWxsXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgIDxzcGFuIHN0eWxlPXshdGhpcy5xdWVzdGlvbi5pc01vYmlsZSA/IHsgZGlzcGxheTogXCJub25lXCIgfSA6IHVuZGVmaW5lZCB9IGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLmNlbGxSZXNwb25zaXZlVGl0bGV9PlxuICAgICAgICAgICAgICAgIHt0aGlzLnJlbmRlckxvY1N0cmluZyhjb2x1bW4ubG9jVGV4dCl9XG4gICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgPC90ZD5cbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHRkcy5wdXNoKHRkKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGRzO1xuICB9XG4gIGNlbGxDbGljayhyb3c6IGFueSwgY29sdW1uOiBhbnkpIHtcbiAgICByb3cudmFsdWUgPSBjb2x1bW4udmFsdWU7XG4gICAgdGhpcy5zZXRTdGF0ZSh7IHZhbHVlOiB0aGlzLnJvdy52YWx1ZSB9KTtcbiAgfVxufVxuXG5SZWFjdFF1ZXN0aW9uRmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlclF1ZXN0aW9uKFwibWF0cml4XCIsIHByb3BzID0+IHtcbiAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3VydmV5UXVlc3Rpb25NYXRyaXgsIHByb3BzKTtcbn0pO1xuIiwiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBTdXJ2ZXlRdWVzdGlvbk1hdHJpeERyb3Bkb3duQmFzZSB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fbWF0cml4ZHJvcGRvd25iYXNlXCI7XG5pbXBvcnQgeyBSZWFjdFF1ZXN0aW9uRmFjdG9yeSB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fZmFjdG9yeVwiO1xuXG5leHBvcnQgY2xhc3MgU3VydmV5UXVlc3Rpb25NYXRyaXhEcm9wZG93biBleHRlbmRzIFN1cnZleVF1ZXN0aW9uTWF0cml4RHJvcGRvd25CYXNlIHtcbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgfVxufVxuXG5SZWFjdFF1ZXN0aW9uRmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlclF1ZXN0aW9uKFwibWF0cml4ZHJvcGRvd25cIiwgcHJvcHMgPT4ge1xuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTdXJ2ZXlRdWVzdGlvbk1hdHJpeERyb3Bkb3duLCBwcm9wcyk7XG59KTtcbiIsImltcG9ydCAqIGFzIFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHtcbiAgUmVhY3RTdXJ2ZXlFbGVtZW50LFxuICBTdXJ2ZXlRdWVzdGlvbkVsZW1lbnRCYXNlXG59IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fZWxlbWVudFwiO1xuaW1wb3J0IHsgU3VydmV5UXVlc3Rpb24sIFN1cnZleVF1ZXN0aW9uQW5kRXJyb3JzQ2VsbCB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25cIjtcbmltcG9ydCB7XG4gIFF1ZXN0aW9uTWF0cml4RHJvcGRvd25Nb2RlbEJhc2UsXG4gIFF1ZXN0aW9uTWF0cml4RHJvcGRvd25SZW5kZXJlZFJvdyxcbiAgUXVlc3Rpb25NYXRyaXhEcm9wZG93blJlbmRlcmVkQ2VsbCxcbiAgTWF0cml4RHJvcGRvd25Db2x1bW4sXG4gIEFkYXB0aXZlQWN0aW9uQ29udGFpbmVyLFxuICBRdWVzdGlvbixcbiAgQmFzZVxufSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFN1cnZleVF1ZXN0aW9uQ2hlY2tib3hJdGVtIH0gZnJvbSBcIi4vcmVhY3RxdWVzdGlvbl9jaGVja2JveFwiO1xuaW1wb3J0IHsgU3VydmV5UXVlc3Rpb25SYWRpb0l0ZW0gfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uX3JhZGlvZ3JvdXBcIjtcbmltcG9ydCB7IFN1cnZleVBhbmVsIH0gZnJvbSBcIi4vcGFuZWxcIjtcbmltcG9ydCB7IFN1cnZleUFjdGlvbkJhciB9IGZyb20gXCIuL2NvbXBvbmVudHMvYWN0aW9uLWJhci9hY3Rpb24tYmFyXCI7XG5pbXBvcnQgeyBNYXRyaXhSb3cgfSBmcm9tIFwiLi9jb21wb25lbnRzL21hdHJpeC9yb3dcIjtcbmltcG9ydCB7IFN1cnZleVF1ZXN0aW9uTWF0cml4RHluYW1pY0RyYWdEcm9wSWNvbiB9IGZyb20gXCIuL2NvbXBvbmVudHMvbWF0cml4LWFjdGlvbnMvZHJhZy1kcm9wLWljb24vZHJhZy1kcm9wLWljb25cIjtcbmltcG9ydCB7IFN1cnZleVF1ZXN0aW9uQ29tbWVudEl0ZW0gfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uX2NvbW1lbnRcIjtcbmltcG9ydCB7IFJlYWN0RWxlbWVudEZhY3RvcnkgfSBmcm9tIFwiLi9lbGVtZW50LWZhY3RvcnlcIjtcblxuZXhwb3J0IGNsYXNzIFN1cnZleVF1ZXN0aW9uTWF0cml4RHJvcGRvd25CYXNlIGV4dGVuZHMgU3VydmV5UXVlc3Rpb25FbGVtZW50QmFzZSB7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgLy9DcmVhdGUgcmVuZGVyZWQgdGFibGUgaW4gY29udHJ1Y3RvciBhbmQgbm90IG9uIHJlbmRlcmluZ1xuICAgIGNvbnN0IHRhYmxlID0gdGhpcy5xdWVzdGlvbi5yZW5kZXJlZFRhYmxlO1xuICAgIHRoaXMuc3RhdGUgPSB0aGlzLmdldFN0YXRlKCk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldCBxdWVzdGlvbigpOiBRdWVzdGlvbk1hdHJpeERyb3Bkb3duTW9kZWxCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5xdWVzdGlvbkJhc2UgYXMgUXVlc3Rpb25NYXRyaXhEcm9wZG93bk1vZGVsQmFzZTtcbiAgfVxuICBwcml2YXRlIGdldFN0YXRlKHByZXZTdGF0ZTogYW55ID0gbnVsbCkge1xuICAgIHJldHVybiB7IHJvd0NvdW50ZXI6ICFwcmV2U3RhdGUgPyAwIDogcHJldlN0YXRlLnJvd0NvdW50ZXIgKyAxIH07XG4gIH1cbiAgcHJpdmF0ZSB1cGRhdGVTdGF0ZU9uQ2FsbGJhY2soKSB7XG4gICAgaWYgKHRoaXMuaXNSZW5kZXJpbmcpIHJldHVybjtcbiAgICB0aGlzLnNldFN0YXRlKHRoaXMuZ2V0U3RhdGUodGhpcy5zdGF0ZSkpO1xuICB9XG4gIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIHN1cGVyLmNvbXBvbmVudERpZE1vdW50KCk7XG4gICAgdGhpcy5xdWVzdGlvbi52aXNpYmxlUm93c0NoYW5nZWRDYWxsYmFjayA9ICgpID0+IHtcbiAgICAgIHRoaXMudXBkYXRlU3RhdGVPbkNhbGxiYWNrKCk7XG4gICAgfTtcbiAgICB0aGlzLnF1ZXN0aW9uLm9uUmVuZGVyZWRUYWJsZVJlc2V0Q2FsbGJhY2sgPSAoKSA9PiB7XG4gICAgICB0aGlzLnF1ZXN0aW9uLnJlbmRlcmVkVGFibGUucmVuZGVyZWRSb3dzQ2hhbmdlZENhbGxiYWNrID0gKCkgPT4ge1xuICAgICAgICB0aGlzLnVwZGF0ZVN0YXRlT25DYWxsYmFjaygpO1xuICAgICAgfTtcbiAgICAgIHRoaXMudXBkYXRlU3RhdGVPbkNhbGxiYWNrKCk7XG4gICAgfTtcbiAgICB0aGlzLnF1ZXN0aW9uLnJlbmRlcmVkVGFibGUucmVuZGVyZWRSb3dzQ2hhbmdlZENhbGxiYWNrID0gKCkgPT4ge1xuICAgICAgdGhpcy51cGRhdGVTdGF0ZU9uQ2FsbGJhY2soKTtcbiAgICB9O1xuICB9XG4gIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgIHN1cGVyLmNvbXBvbmVudFdpbGxVbm1vdW50KCk7XG4gICAgdGhpcy5xdWVzdGlvbi52aXNpYmxlUm93c0NoYW5nZWRDYWxsYmFjayA9ICgpID0+IHt9O1xuICAgIHRoaXMucXVlc3Rpb24ub25SZW5kZXJlZFRhYmxlUmVzZXRDYWxsYmFjayA9ICgpID0+IHt9O1xuICAgIHRoaXMucXVlc3Rpb24ucmVuZGVyZWRUYWJsZS5yZW5kZXJlZFJvd3NDaGFuZ2VkQ2FsbGJhY2sgPSAoKSA9PiB7fTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyRWxlbWVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgcmV0dXJuIHRoaXMucmVuZGVyVGFibGVEaXYoKTtcbiAgfVxuICByZW5kZXJUYWJsZURpdigpOiBKU1guRWxlbWVudCB7XG4gICAgdmFyIGhlYWRlciA9IHRoaXMucmVuZGVySGVhZGVyKCk7XG4gICAgdmFyIGZvb3RlcnMgPSB0aGlzLnJlbmRlckZvb3RlcigpO1xuICAgIHZhciByb3dzID0gdGhpcy5yZW5kZXJSb3dzKCk7XG4gICAgdmFyIGRpdlN0eWxlID0gdGhpcy5xdWVzdGlvbi5zaG93SG9yaXpvbnRhbFNjcm9sbFxuICAgICAgPyAoeyBvdmVyZmxvd1g6IFwic2Nyb2xsXCIgfSBhcyBSZWFjdC5DU1NQcm9wZXJ0aWVzKVxuICAgICAgOiAoe30gYXMgUmVhY3QuQ1NTUHJvcGVydGllcyk7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgc3R5bGU9e2RpdlN0eWxlfSByZWY9eyhyb290KSA9PiAodGhpcy5zZXRDb250cm9sKHJvb3QpKX0+XG4gICAgICAgIDx0YWJsZSBjbGFzc05hbWU9e3RoaXMucXVlc3Rpb24uZ2V0VGFibGVDc3MoKX0+XG4gICAgICAgICAge2hlYWRlcn1cbiAgICAgICAgICB7cm93c31cbiAgICAgICAgICB7Zm9vdGVyc31cbiAgICAgICAgPC90YWJsZT5cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbiAgcmVuZGVySGVhZGVyKCk6IEpTWC5FbGVtZW50IHwgbnVsbCB7XG4gICAgdmFyIHRhYmxlID0gdGhpcy5xdWVzdGlvbi5yZW5kZXJlZFRhYmxlO1xuICAgIGlmICghdGFibGUuc2hvd0hlYWRlcikgcmV0dXJuIG51bGw7XG4gICAgdmFyIGhlYWRlcnM6IGFueVtdID0gW107XG4gICAgdmFyIGNlbGxzID0gdGFibGUuaGVhZGVyUm93LmNlbGxzO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2VsbHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBjZWxsID0gY2VsbHNbaV07XG4gICAgICB2YXIga2V5ID0gXCJjb2x1bW5cIiArIGk7XG4gICAgICB2YXIgY29sdW1uU3R5bGU6IGFueSA9IHt9O1xuICAgICAgaWYgKCEhY2VsbC53aWR0aCkge1xuICAgICAgICBjb2x1bW5TdHlsZS53aWR0aCA9IGNlbGwud2lkdGg7XG4gICAgICB9XG4gICAgICBpZiAoISFjZWxsLm1pbldpZHRoKSB7XG4gICAgICAgIGNvbHVtblN0eWxlLm1pbldpZHRoID0gY2VsbC5taW5XaWR0aDtcbiAgICAgIH1cbiAgICAgIHZhciBjZWxsQ29udGVudCA9IHRoaXMucmVuZGVyQ2VsbENvbnRlbnQoY2VsbCwgXCJjb2x1bW4taGVhZGVyXCIsIHt9KTtcbiAgICAgIGNvbnN0IGhlYWRlciA9IGNlbGwuaGFzVGl0bGUgP1xuICAgICAgICA8dGggY2xhc3NOYW1lPXtjZWxsLmNsYXNzTmFtZX0ga2V5PXtrZXl9IHN0eWxlPXtjb2x1bW5TdHlsZX0+IHtjZWxsQ29udGVudH0gPC90aD5cbiAgICAgICAgOiA8dGQgY2xhc3NOYW1lPXtjZWxsLmNsYXNzTmFtZX0ga2V5PXtrZXl9IHN0eWxlPXtjb2x1bW5TdHlsZX0+PC90ZD47XG4gICAgICBoZWFkZXJzLnB1c2goaGVhZGVyKTtcbiAgICB9XG4gICAgcmV0dXJuIChcbiAgICAgIDx0aGVhZD5cbiAgICAgICAgPHRyPntoZWFkZXJzfTwvdHI+XG4gICAgICA8L3RoZWFkPlxuICAgICk7XG4gIH1cbiAgcmVuZGVyRm9vdGVyKCk6IEpTWC5FbGVtZW50IHwgbnVsbCB7XG4gICAgdmFyIHRhYmxlID0gdGhpcy5xdWVzdGlvbi5yZW5kZXJlZFRhYmxlO1xuICAgIGlmICghdGFibGUuc2hvd0Zvb3RlcikgcmV0dXJuIG51bGw7XG4gICAgdmFyIHJvdyA9IHRoaXMucmVuZGVyUm93KFxuICAgICAgXCJmb290ZXJcIixcbiAgICAgIHRhYmxlLmZvb3RlclJvdyxcbiAgICAgIHRoaXMucXVlc3Rpb24uY3NzQ2xhc3Nlc1xuICAgICk7XG4gICAgcmV0dXJuIDx0Zm9vdD57cm93fTwvdGZvb3Q+O1xuICB9XG4gIHJlbmRlclJvd3MoKTogSlNYLkVsZW1lbnQge1xuICAgIHZhciBjc3NDbGFzc2VzID0gdGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzO1xuICAgIHZhciByb3dzOkFycmF5PEpTWC5FbGVtZW50PiA9IFtdO1xuICAgIHZhciByZW5kZXJlZFJvd3MgPSB0aGlzLnF1ZXN0aW9uLnJlbmRlcmVkVGFibGUucm93cztcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJlbmRlcmVkUm93cy5sZW5ndGg7IGkrKykge1xuICAgICAgcm93cy5wdXNoKFxuICAgICAgICB0aGlzLnJlbmRlclJvdyhyZW5kZXJlZFJvd3NbaV0uaWQsIHJlbmRlcmVkUm93c1tpXSwgY3NzQ2xhc3NlcylcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiA8dGJvZHk+e3Jvd3N9PC90Ym9keT47XG4gIH1cbiAgcmVuZGVyUm93KFxuICAgIGtleVZhbHVlOiBhbnksXG4gICAgcm93OiBRdWVzdGlvbk1hdHJpeERyb3Bkb3duUmVuZGVyZWRSb3csXG4gICAgY3NzQ2xhc3NlczogYW55XG4gICk6IEpTWC5FbGVtZW50IHtcbiAgICB2YXIgbWF0cml4cm93OkFycmF5PEpTWC5FbGVtZW50PiA9IFtdO1xuICAgIHZhciBjZWxscyA9IHJvdy5jZWxscztcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2VsbHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIG1hdHJpeHJvdy5wdXNoKHRoaXMucmVuZGVyQ2VsbChjZWxsc1tpXSwgaSwgY3NzQ2xhc3NlcykpO1xuICAgIH1cbiAgICB2YXIga2V5ID0gXCJyb3dcIiArIGtleVZhbHVlO1xuXG4gICAgcmV0dXJuIChcbiAgICAgIDxSZWFjdC5GcmFnbWVudCBrZXk9e2tleX0+XG4gICAgICAgIDxNYXRyaXhSb3cgbW9kZWw9e3Jvd30gcGFyZW50TWF0cml4PXt0aGlzLnF1ZXN0aW9ufT57bWF0cml4cm93fTwvTWF0cml4Um93PlxuICAgICAgPC9SZWFjdC5GcmFnbWVudD5cbiAgICApO1xuICB9XG5cbiAgcmVuZGVyQ2VsbChcbiAgICBjZWxsOiBRdWVzdGlvbk1hdHJpeERyb3Bkb3duUmVuZGVyZWRDZWxsLFxuICAgIGluZGV4OiBudW1iZXIsXG4gICAgY3NzQ2xhc3NlczogYW55XG4gICk6IEpTWC5FbGVtZW50IHtcbiAgICB2YXIga2V5ID0gXCJjZWxsXCIgKyBpbmRleDtcbiAgICBpZiAoY2VsbC5oYXNRdWVzdGlvbikge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPFN1cnZleVF1ZXN0aW9uTWF0cml4RHJvcGRvd25DZWxsXG4gICAgICAgICAga2V5PXtrZXl9XG4gICAgICAgICAgY3NzQ2xhc3Nlcz17Y3NzQ2xhc3Nlc31cbiAgICAgICAgICBjZWxsPXtjZWxsfVxuICAgICAgICAgIGNyZWF0b3I9e3RoaXMuY3JlYXRvcn1cbiAgICAgICAgLz5cbiAgICAgICk7XG4gICAgfVxuICAgIGxldCByZWFzb24gPSBjZWxsLmhhc1RpdGxlID8gXCJyb3ctaGVhZGVyXCIgOiBcIlwiO1xuICAgIHZhciBjZWxsQ29udGVudCA9IHRoaXMucmVuZGVyQ2VsbENvbnRlbnQoY2VsbCwgcmVhc29uLCBjc3NDbGFzc2VzKTtcbiAgICB2YXIgY2VsbFN0eWxlOiBhbnkgPSBudWxsO1xuICAgIGlmICghIWNlbGwud2lkdGggfHwgISFjZWxsLm1pbldpZHRoKSB7XG4gICAgICBjZWxsU3R5bGUgPSB7fTtcbiAgICAgIGlmICghIWNlbGwud2lkdGgpIGNlbGxTdHlsZS53aWR0aCA9IGNlbGwud2lkdGg7XG4gICAgICBpZiAoISFjZWxsLm1pbldpZHRoKSBjZWxsU3R5bGUubWluV2lkdGggPSBjZWxsLm1pbldpZHRoO1xuICAgIH1cblxuICAgIHJldHVybiAoXG4gICAgICA8dGRcbiAgICAgICAgY2xhc3NOYW1lPXtjZWxsLmNsYXNzTmFtZX1cbiAgICAgICAga2V5PXtrZXl9XG4gICAgICAgIHN0eWxlPXtjZWxsU3R5bGV9XG4gICAgICAgIGNvbFNwYW49e2NlbGwuY29sU3BhbnN9XG4gICAgICA+XG4gICAgICAgIHtjZWxsQ29udGVudH1cbiAgICAgIDwvdGQ+XG4gICAgKTtcbiAgfVxuICBwcml2YXRlIHJlbmRlckNlbGxDb250ZW50KFxuICAgIGNlbGw6IFF1ZXN0aW9uTWF0cml4RHJvcGRvd25SZW5kZXJlZENlbGwsXG4gICAgcmVhc29uOiBzdHJpbmcsXG4gICAgY3NzQ2xhc3NlczogYW55XG4gICk6IEpTWC5FbGVtZW50IHwgbnVsbCB7XG4gICAgdmFyIGNlbGxDb250ZW50OiBKU1guRWxlbWVudCB8IG51bGwgPSBudWxsO1xuICAgIHZhciBjZWxsU3R5bGU6IGFueSA9IG51bGw7XG4gICAgaWYgKCEhY2VsbC53aWR0aCB8fCAhIWNlbGwubWluV2lkdGgpIHtcbiAgICAgIGNlbGxTdHlsZSA9IHt9O1xuICAgICAgaWYgKCEhY2VsbC53aWR0aCkgY2VsbFN0eWxlLndpZHRoID0gY2VsbC53aWR0aDtcbiAgICAgIGlmICghIWNlbGwubWluV2lkdGgpIGNlbGxTdHlsZS5taW5XaWR0aCA9IGNlbGwubWluV2lkdGg7XG4gICAgfVxuICAgIGlmIChjZWxsLmhhc1RpdGxlKSB7XG4gICAgICByZWFzb24gPSBcInJvdy1oZWFkZXJcIjtcbiAgICAgIGNvbnN0IHN0ciA9IHRoaXMucmVuZGVyTG9jU3RyaW5nKGNlbGwubG9jVGl0bGUpO1xuICAgICAgY29uc3QgcmVxdWlyZSA9ICEhY2VsbC5jb2x1bW4gPyA8U3VydmV5UXVlc3Rpb25NYXRyaXhIZWFkZXJSZXF1aXJlZCBjb2x1bW49e2NlbGwuY29sdW1ufSBxdWVzdGlvbj17dGhpcy5xdWVzdGlvbn0vPiA6IG51bGw7XG4gICAgICBjZWxsQ29udGVudCA9ICg8PntzdHJ9e3JlcXVpcmV9PC8+KTtcbiAgICB9XG4gICAgaWYgKGNlbGwuaXNEcmFnSGFuZGxlckNlbGwpIHtcbiAgICAgIGNlbGxDb250ZW50ID0gKDw+XG4gICAgICAgIDxTdXJ2ZXlRdWVzdGlvbk1hdHJpeER5bmFtaWNEcmFnRHJvcEljb24gaXRlbT17eyBkYXRhOiB7IHJvdzogY2VsbC5yb3csIHF1ZXN0aW9uOiB0aGlzLnF1ZXN0aW9uIH0gfX0vPlxuICAgICAgPC8+KTtcbiAgICB9XG4gICAgaWYgKGNlbGwuaXNBY3Rpb25zQ2VsbCkge1xuICAgICAgY2VsbENvbnRlbnQgPSAoXG4gICAgICAgIFJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UuY3JlYXRlRWxlbWVudChcInN2LW1hdHJpeGR5bmFtaWMtYWN0aW9ucy1jZWxsXCIsIHtcbiAgICAgICAgICBxdWVzdGlvbjogdGhpcy5xdWVzdGlvbiwgY3NzQ2xhc3NlcywgY2VsbCwgbW9kZWw6IGNlbGwuaXRlbS5nZXREYXRhKClcbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChjZWxsLmhhc1BhbmVsKSB7XG4gICAgICBjZWxsQ29udGVudCA9IChcbiAgICAgICAgPFN1cnZleVBhbmVsXG4gICAgICAgICAga2V5PXtjZWxsLnBhbmVsLmlkfVxuICAgICAgICAgIGVsZW1lbnQ9e2NlbGwucGFuZWx9XG4gICAgICAgICAgc3VydmV5PXt0aGlzLnF1ZXN0aW9uLnN1cnZleX1cbiAgICAgICAgICBjc3NDbGFzc2VzPXtjc3NDbGFzc2VzfVxuICAgICAgICAgIGlzRGlzcGxheU1vZGU9e3RoaXMuaXNEaXNwbGF5TW9kZX1cbiAgICAgICAgICBjcmVhdG9yPXt0aGlzLmNyZWF0b3J9XG4gICAgICAgIC8+XG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoIWNlbGxDb250ZW50KSByZXR1cm4gbnVsbDtcblxuICAgIGNvbnN0IHJlYWR5Q2VsbCA9IChcbiAgICAgIDw+XG4gICAgICAgIHtjZWxsQ29udGVudH1cbiAgICAgIDwvPlxuICAgICk7XG4gICAgcmV0dXJuIHRoaXMud3JhcENlbGwoY2VsbCwgcmVhZHlDZWxsLCByZWFzb24pO1xuICB9XG59XG5cbmNsYXNzIFN1cnZleVF1ZXN0aW9uTWF0cml4QWN0aW9uc0NlbGwgZXh0ZW5kcyBSZWFjdFN1cnZleUVsZW1lbnQge1xuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICB9XG4gIGdldCBtb2RlbCgpOiBBZGFwdGl2ZUFjdGlvbkNvbnRhaW5lciB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMubW9kZWw7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIHJldHVybiAoXG4gICAgICA8U3VydmV5QWN0aW9uQmFyIG1vZGVsPXt0aGlzLm1vZGVsfSBoYW5kbGVDbGljaz17ZmFsc2V9PjwvU3VydmV5QWN0aW9uQmFyPlxuICAgICk7XG4gIH1cbn1cblxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXG4gIFwic3YtbWF0cml4ZHluYW1pYy1hY3Rpb25zLWNlbGxcIixcbiAgKHByb3BzKSA9PiB7XG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3VydmV5UXVlc3Rpb25NYXRyaXhBY3Rpb25zQ2VsbCwgcHJvcHMpO1xuICB9XG4pO1xuY2xhc3MgU3VydmV5UXVlc3Rpb25NYXRyaXhIZWFkZXJSZXF1aXJlZCBleHRlbmRzIFJlYWN0U3VydmV5RWxlbWVudCB7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gIH1cbiAgZ2V0IGNvbHVtbigpOiBNYXRyaXhEcm9wZG93bkNvbHVtbiB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuY29sdW1uO1xuICB9XG4gIGdldCBxdWVzdGlvbigpOiBRdWVzdGlvbiB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMucXVlc3Rpb247XG4gIH1cbiAgcHJvdGVjdGVkIGdldFN0YXRlRWxlbWVudCgpOiBCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5jb2x1bW47XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQgfCBudWxsIHtcbiAgICBpZighdGhpcy5jb2x1bW4uaXNSZW5kZXJlZFJlcXVpcmVkKSByZXR1cm4gbnVsbDtcbiAgICByZXR1cm4gKFxuICAgICAgPD5cbiAgICAgICAgPHNwYW4gY2xhc3NOYW1lPXt0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMuY2VsbFJlcXVpcmVkVGV4dH0+e3RoaXMuY29sdW1uLnJlcXVpcmVkVGV4dH08L3NwYW4+XG4gICAgICA8Lz5cbiAgICApO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlRdWVzdGlvbk1hdHJpeERyb3Bkb3duQ2VsbCBleHRlbmRzIFN1cnZleVF1ZXN0aW9uQW5kRXJyb3JzQ2VsbCB7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gIH1cbiAgcHJpdmF0ZSBnZXQgY2VsbCgpOiBRdWVzdGlvbk1hdHJpeERyb3Bkb3duUmVuZGVyZWRDZWxsIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5jZWxsO1xuICB9XG4gIHByb3RlY3RlZCBnZXQgaXRlbUNzcygpOiBzdHJpbmcge1xuICAgIHJldHVybiAhIXRoaXMuY2VsbCA/IHRoaXMuY2VsbC5jbGFzc05hbWUgOiBcIlwiO1xuICB9XG4gIHByb3RlY3RlZCBnZXRRdWVzdGlvbigpOiBRdWVzdGlvbiB8IGFueSB7XG4gICAgdmFyIHEgPSBzdXBlci5nZXRRdWVzdGlvbigpO1xuICAgIGlmICghIXEpIHJldHVybiBxO1xuICAgIHJldHVybiAhIXRoaXMuY2VsbCA/IHRoaXMuY2VsbC5xdWVzdGlvbiA6IG51bGw7XG4gIH1cbiAgcHJvdGVjdGVkIGRvQWZ0ZXJSZW5kZXIoKSB7XG4gICAgdmFyIGVsID0gdGhpcy5jZWxsUmVmLmN1cnJlbnQ7XG4gICAgaWYgKFxuICAgICAgZWwgJiZcbiAgICAgIHRoaXMuY2VsbCAmJlxuICAgICAgdGhpcy5xdWVzdGlvbiAmJlxuICAgICAgdGhpcy5xdWVzdGlvbi5zdXJ2ZXkgJiZcbiAgICAgIGVsLmdldEF0dHJpYnV0ZShcImRhdGEtcmVuZGVyZWRcIikgIT09IFwiclwiXG4gICAgKSB7XG4gICAgICBlbC5zZXRBdHRyaWJ1dGUoXCJkYXRhLXJlbmRlcmVkXCIsIFwiclwiKTtcbiAgICAgIHZhciBvcHRpb25zID0ge1xuICAgICAgICBjZWxsOiB0aGlzLmNlbGwsXG4gICAgICAgIGNlbGxRdWVzdGlvbjogdGhpcy5xdWVzdGlvbixcbiAgICAgICAgaHRtbEVsZW1lbnQ6IGVsLFxuICAgICAgICByb3c6IHRoaXMuY2VsbC5yb3csXG4gICAgICAgIGNvbHVtbjogdGhpcy5jZWxsLmNlbGwuY29sdW1uLFxuICAgICAgfTtcbiAgICAgIHRoaXMucXVlc3Rpb24uc3VydmV5Lm1hdHJpeEFmdGVyQ2VsbFJlbmRlcih0aGlzLnF1ZXN0aW9uLCBvcHRpb25zKTtcbiAgICB9XG4gIH1cbiAgcHJvdGVjdGVkIGdldFNob3dFcnJvcnMoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMucXVlc3Rpb24uaXNWaXNpYmxlICYmXG4gICAgICAoIXRoaXMuY2VsbC5pc0Nob2ljZSB8fCB0aGlzLmNlbGwuaXNGaXJzdENob2ljZSlcbiAgICApO1xuICB9XG4gIHByb3RlY3RlZCBnZXRDZWxsU3R5bGUoKTogYW55IHtcbiAgICB2YXIgcmVzOiBhbnkgPSBzdXBlci5nZXRDZWxsU3R5bGUoKTtcbiAgICBpZiAoISF0aGlzLmNlbGwud2lkdGggfHwgISF0aGlzLmNlbGwubWluV2lkdGgpIHtcbiAgICAgIGlmICghcmVzKSByZXMgPSB7fTtcbiAgICAgIGlmICghIXRoaXMuY2VsbC53aWR0aCkgcmVzLndpZHRoID0gdGhpcy5jZWxsLndpZHRoO1xuICAgICAgaWYgKCEhdGhpcy5jZWxsLm1pbldpZHRoKSByZXMubWluV2lkdGggPSB0aGlzLmNlbGwubWluV2lkdGg7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlcztcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRIZWFkZXJUZXh0KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuY2VsbC5oZWFkZXJzO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJRdWVzdGlvbigpOiBKU1guRWxlbWVudCB7XG4gICAgaWYgKCF0aGlzLmNlbGwuaXNDaG9pY2UpXG4gICAgICByZXR1cm4gU3VydmV5UXVlc3Rpb24ucmVuZGVyUXVlc3Rpb25Cb2R5KHRoaXMuY3JlYXRvciwgdGhpcy5xdWVzdGlvbik7XG4gICAgaWYgKHRoaXMuY2VsbC5pc090aGVyQ2hvaWNlKSByZXR1cm4gdGhpcy5yZW5kZXJPdGhlckNvbW1lbnQoKTtcbiAgICBpZiAodGhpcy5jZWxsLmlzQ2hlY2tib3gpIHJldHVybiB0aGlzLnJlbmRlckNlbGxDaGVja2JveEJ1dHRvbigpO1xuICAgIHJldHVybiB0aGlzLnJlbmRlckNlbGxSYWRpb2dyb3VwQnV0dG9uKCk7XG4gIH1cbiAgcHJpdmF0ZSByZW5kZXJPdGhlckNvbW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIGNvbnN0IHF1ZXN0aW9uID0gdGhpcy5jZWxsLnF1ZXN0aW9uO1xuICAgIGNvbnN0IGNzc0NsYXNzZXMgPSBxdWVzdGlvbi5jc3NDbGFzc2VzIHx8IHt9O1xuICAgIHJldHVybiA8U3VydmV5UXVlc3Rpb25Db21tZW50SXRlbSBxdWVzdGlvbj17cXVlc3Rpb259IGNzc0NsYXNzZXM9e2Nzc0NsYXNzZXN9IG90aGVyQ3NzPXtjc3NDbGFzc2VzLm90aGVyfSBpc0Rpc3BsYXlNb2RlPXtxdWVzdGlvbi5pc0lucHV0UmVhZE9ubHl9IC8+O1xuICB9XG4gIHByaXZhdGUgcmVuZGVyQ2VsbENoZWNrYm94QnV0dG9uKCk6IEpTWC5FbGVtZW50IHtcbiAgICB2YXIga2V5ID0gdGhpcy5jZWxsLnF1ZXN0aW9uLmlkICsgXCJpdGVtXCIgKyB0aGlzLmNlbGwuY2hvaWNlSW5kZXg7XG4gICAgcmV0dXJuIChcbiAgICAgIDxTdXJ2ZXlRdWVzdGlvbkNoZWNrYm94SXRlbVxuICAgICAgICBrZXk9e2tleX1cbiAgICAgICAgcXVlc3Rpb249e3RoaXMuY2VsbC5xdWVzdGlvbn1cbiAgICAgICAgY3NzQ2xhc3Nlcz17dGhpcy5jZWxsLnF1ZXN0aW9uLmNzc0NsYXNzZXN9XG4gICAgICAgIGlzRGlzcGxheU1vZGU9e3RoaXMuY2VsbC5xdWVzdGlvbi5pc0lucHV0UmVhZE9ubHl9XG4gICAgICAgIGl0ZW09e3RoaXMuY2VsbC5pdGVtfVxuICAgICAgICBpc0ZpcnN0PXt0aGlzLmNlbGwuaXNGaXJzdENob2ljZX1cbiAgICAgICAgaW5kZXg9e3RoaXMuY2VsbC5jaG9pY2VJbmRleC50b1N0cmluZygpfVxuICAgICAgICBoaWRlQ2FwdGlvbj17dHJ1ZX1cbiAgICAgIC8+XG4gICAgKTtcbiAgfVxuICBwcml2YXRlIHJlbmRlckNlbGxSYWRpb2dyb3VwQnV0dG9uKCk6IEpTWC5FbGVtZW50IHtcbiAgICB2YXIga2V5ID0gdGhpcy5jZWxsLnF1ZXN0aW9uLmlkICsgXCJpdGVtXCIgKyB0aGlzLmNlbGwuY2hvaWNlSW5kZXg7XG4gICAgcmV0dXJuIChcbiAgICAgIDxTdXJ2ZXlRdWVzdGlvblJhZGlvSXRlbVxuICAgICAgICBrZXk9e2tleX1cbiAgICAgICAgcXVlc3Rpb249e3RoaXMuY2VsbC5xdWVzdGlvbn1cbiAgICAgICAgY3NzQ2xhc3Nlcz17dGhpcy5jZWxsLnF1ZXN0aW9uLmNzc0NsYXNzZXN9XG4gICAgICAgIGlzRGlzcGxheU1vZGU9e3RoaXMuY2VsbC5xdWVzdGlvbi5pc0lucHV0UmVhZE9ubHl9XG4gICAgICAgIGl0ZW09e3RoaXMuY2VsbC5pdGVtfVxuICAgICAgICBpbmRleD17dGhpcy5jZWxsLmNob2ljZUluZGV4LnRvU3RyaW5nKCl9XG4gICAgICAgIGlzQ2hlY2tlZD17dGhpcy5jZWxsLnF1ZXN0aW9uLnZhbHVlID09PSB0aGlzLmNlbGwuaXRlbS52YWx1ZX1cbiAgICAgICAgaXNEaXNhYmxlZD17dGhpcy5jZWxsLnF1ZXN0aW9uLmlzUmVhZE9ubHkgfHwgIXRoaXMuY2VsbC5pdGVtLmlzRW5hYmxlZH1cbiAgICAgICAgaGlkZUNhcHRpb249e3RydWV9XG4gICAgICAvPlxuICAgICk7XG4gIH1cbn1cbiIsImltcG9ydCAqIGFzIFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgUmVhY3RRdWVzdGlvbkZhY3RvcnkgfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uX2ZhY3RvcnlcIjtcbmltcG9ydCB7IFN1cnZleVF1ZXN0aW9uTWF0cml4RHJvcGRvd25CYXNlIH0gZnJvbSBcIi4vcmVhY3RxdWVzdGlvbl9tYXRyaXhkcm9wZG93bmJhc2VcIjtcbmltcG9ydCB7IFF1ZXN0aW9uTWF0cml4RHluYW1pY01vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBSZWFjdEVsZW1lbnRGYWN0b3J5IH0gZnJvbSBcIi4vZWxlbWVudC1mYWN0b3J5XCI7XG5pbXBvcnQgeyBSZWFjdFN1cnZleUVsZW1lbnQgfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uX2VsZW1lbnRcIjtcblxuZXhwb3J0IGNsYXNzIFN1cnZleVF1ZXN0aW9uTWF0cml4RHluYW1pYyBleHRlbmRzIFN1cnZleVF1ZXN0aW9uTWF0cml4RHJvcGRvd25CYXNlIHtcbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLmhhbmRsZU9uUm93QWRkQ2xpY2sgPSB0aGlzLmhhbmRsZU9uUm93QWRkQ2xpY2suYmluZCh0aGlzKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IG1hdHJpeCgpOiBRdWVzdGlvbk1hdHJpeER5bmFtaWNNb2RlbCB7XG4gICAgcmV0dXJuIHRoaXMucXVlc3Rpb25CYXNlIGFzIFF1ZXN0aW9uTWF0cml4RHluYW1pY01vZGVsO1xuICB9XG4gIGhhbmRsZU9uUm93QWRkQ2xpY2soZXZlbnQ6IGFueSkge1xuICAgIHRoaXMubWF0cml4LmFkZFJvd1VJKCk7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIHZhciBjc3NDbGFzc2VzID0gdGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzO1xuICAgIHZhciBzaG93VGFibGUgPSB0aGlzLnF1ZXN0aW9uLnJlbmRlcmVkVGFibGUuc2hvd1RhYmxlO1xuICAgIHZhciBtYWluRGl2ID0gc2hvd1RhYmxlXG4gICAgICA/IHRoaXMucmVuZGVyVGFibGVEaXYoKVxuICAgICAgOiB0aGlzLnJlbmRlck5vUm93c0NvbnRlbnQoY3NzQ2xhc3Nlcyk7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXY+XG4gICAgICAgIHt0aGlzLnJlbmRlckFkZFJvd0J1dHRvbk9uVG9wKGNzc0NsYXNzZXMpfVxuICAgICAgICB7bWFpbkRpdn1cbiAgICAgICAge3RoaXMucmVuZGVyQWRkUm93QnV0dG9uT25Cb3R0b20oY3NzQ2xhc3Nlcyl9XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJBZGRSb3dCdXR0b25PblRvcChjc3NDbGFzc2VzOiBhbnkpOiBKU1guRWxlbWVudCB8IG51bGwge1xuICAgIGlmICghdGhpcy5tYXRyaXgucmVuZGVyZWRUYWJsZS5zaG93QWRkUm93T25Ub3ApIHJldHVybiBudWxsO1xuICAgIHJldHVybiB0aGlzLnJlbmRlckFkZFJvd0J1dHRvbihjc3NDbGFzc2VzKTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyQWRkUm93QnV0dG9uT25Cb3R0b20oY3NzQ2xhc3NlczogYW55KTogSlNYLkVsZW1lbnQgfCBudWxsIHtcbiAgICBpZiAoIXRoaXMubWF0cml4LnJlbmRlcmVkVGFibGUuc2hvd0FkZFJvd09uQm90dG9tKSByZXR1cm4gbnVsbDtcbiAgICByZXR1cm4gdGhpcy5yZW5kZXJBZGRSb3dCdXR0b24oY3NzQ2xhc3Nlcyk7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlck5vUm93c0NvbnRlbnQoY3NzQ2xhc3NlczogYW55KTogSlNYLkVsZW1lbnQge1xuICAgIGNvbnN0IHRleHQ6IEpTWC5FbGVtZW50ID0gdGhpcy5yZW5kZXJMb2NTdHJpbmcodGhpcy5tYXRyaXgubG9jRW1wdHlSb3dzVGV4dCk7XG4gICAgY29uc3QgdGV4dERpdjogSlNYLkVsZW1lbnQgPSA8ZGl2IGNsYXNzTmFtZT17Y3NzQ2xhc3Nlcy5lbXB0eVJvd3NUZXh0fT57dGV4dH08L2Rpdj47XG4gICAgY29uc3QgYnRuOiBKU1guRWxlbWVudCA9IHRoaXMucmVuZGVyQWRkUm93QnV0dG9uKGNzc0NsYXNzZXMsIHRydWUpO1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT17Y3NzQ2xhc3Nlcy5lbXB0eVJvd3NTZWN0aW9ufT5cbiAgICAgICAge3RleHREaXZ9XG4gICAgICAgIHtidG59XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJBZGRSb3dCdXR0b24oXG4gICAgY3NzQ2xhc3NlczogYW55LFxuICAgIGlzRW1wdHlTZWN0aW9uOiBib29sZWFuID0gZmFsc2VcbiAgKTogSlNYLkVsZW1lbnQge1xuICAgIHJldHVybiBSZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLmNyZWF0ZUVsZW1lbnQoXCJzdi1tYXRyaXhkeW5hbWljLWFkZC1idG5cIiwge1xuICAgICAgcXVlc3Rpb246IHRoaXMucXVlc3Rpb24sIGNzc0NsYXNzZXMsIGlzRW1wdHlTZWN0aW9uXG4gICAgfSk7XG4gIH1cbn1cblxuUmVhY3RRdWVzdGlvbkZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJRdWVzdGlvbihcIm1hdHJpeGR5bmFtaWNcIiwgKHByb3BzKSA9PiB7XG4gIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFN1cnZleVF1ZXN0aW9uTWF0cml4RHluYW1pYywgcHJvcHMpO1xufSk7XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlRdWVzdGlvbk1hdHJpeER5bmFtaWNBZGRCdXR0b24gZXh0ZW5kcyBSZWFjdFN1cnZleUVsZW1lbnQge1xuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMuaGFuZGxlT25Sb3dBZGRDbGljayA9IHRoaXMuaGFuZGxlT25Sb3dBZGRDbGljay5iaW5kKHRoaXMpO1xuICB9XG4gIHByb3RlY3RlZCBnZXQgbWF0cml4KCk6IFF1ZXN0aW9uTWF0cml4RHluYW1pY01vZGVsIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5xdWVzdGlvbiBhcyBRdWVzdGlvbk1hdHJpeER5bmFtaWNNb2RlbDtcbiAgfVxuICBoYW5kbGVPblJvd0FkZENsaWNrKGV2ZW50OiBhbnkpIHtcbiAgICB0aGlzLm1hdHJpeC5hZGRSb3dVSSgpO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICBjb25zdCBhZGRSb3dUZXh0OiBKU1guRWxlbWVudCA9IHRoaXMucmVuZGVyTG9jU3RyaW5nKHRoaXMubWF0cml4LmxvY0FkZFJvd1RleHQpO1xuICAgIGNvbnN0IGFkZEJ1dHRvbiA9ICg8YnV0dG9uXG4gICAgICBjbGFzc05hbWU9e3RoaXMubWF0cml4LmdldEFkZFJvd0J1dHRvbkNzcyh0aGlzLnByb3BzLmlzRW1wdHlTZWN0aW9uKX1cbiAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgZGlzYWJsZWQ9e3RoaXMubWF0cml4LmlzSW5wdXRSZWFkT25seX1cbiAgICAgIG9uQ2xpY2s9e1xuICAgICAgICB0aGlzLm1hdHJpeC5pc0Rlc2lnbk1vZGUgPyB1bmRlZmluZWQgOiB0aGlzLmhhbmRsZU9uUm93QWRkQ2xpY2tcbiAgICAgIH1cbiAgICA+XG4gICAgICB7YWRkUm93VGV4dH1cbiAgICAgIDxzcGFuIGNsYXNzTmFtZT17dGhpcy5wcm9wcy5jc3NDbGFzc2VzLmljb25BZGR9IC8+XG4gICAgPC9idXR0b24+KTtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5wcm9wcy5pc0VtcHR5U2VjdGlvbiA/IGFkZEJ1dHRvbiA6IDxkaXYgY2xhc3NOYW1lPXt0aGlzLnByb3BzLmNzc0NsYXNzZXMuZm9vdGVyfT57YWRkQnV0dG9ufTwvZGl2PlxuICAgICk7XG4gIH1cbn1cblxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXG4gIFwic3YtbWF0cml4ZHluYW1pYy1hZGQtYnRuXCIsXG4gIChwcm9wcykgPT4ge1xuICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFN1cnZleVF1ZXN0aW9uTWF0cml4RHluYW1pY0FkZEJ1dHRvbiwgcHJvcHMpO1xuICB9XG4pO1xuIiwiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBTdXJ2ZXlRdWVzdGlvbkVsZW1lbnRCYXNlIH0gZnJvbSBcIi4vcmVhY3RxdWVzdGlvbl9lbGVtZW50XCI7XG5pbXBvcnQgeyBJU3VydmV5Q3JlYXRvciwgU3VydmV5RWxlbWVudEVycm9ycywgU3VydmV5UXVlc3Rpb25BbmRFcnJvcnNXcmFwcGVkIH0gZnJvbSBcIi4vcmVhY3RxdWVzdGlvblwiO1xuaW1wb3J0IHsgUXVlc3Rpb25NdWx0aXBsZVRleHRNb2RlbCwgTXVsdGlwbGVUZXh0SXRlbU1vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBSZWFjdFF1ZXN0aW9uRmFjdG9yeSB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fZmFjdG9yeVwiO1xuaW1wb3J0IHsgUmVhY3RTdXJ2ZXlFbGVtZW50IH0gZnJvbSBcIi4vcmVhY3RxdWVzdGlvbl9lbGVtZW50XCI7XG5pbXBvcnQgeyBUaXRsZUNvbnRlbnQgfSBmcm9tIFwiLi9jb21wb25lbnRzL3RpdGxlL3RpdGxlLWNvbnRlbnRcIjtcblxuZXhwb3J0IGNsYXNzIFN1cnZleVF1ZXN0aW9uTXVsdGlwbGVUZXh0IGV4dGVuZHMgU3VydmV5UXVlc3Rpb25FbGVtZW50QmFzZSB7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldCBxdWVzdGlvbigpOiBRdWVzdGlvbk11bHRpcGxlVGV4dE1vZGVsIHtcbiAgICByZXR1cm4gdGhpcy5xdWVzdGlvbkJhc2UgYXMgUXVlc3Rpb25NdWx0aXBsZVRleHRNb2RlbDtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyRWxlbWVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgdmFyIGNzc0NsYXNzZXMgPSB0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXM7XG4gICAgdmFyIHRhYmxlUm93cyA9IHRoaXMucXVlc3Rpb24uZ2V0Um93cygpO1xuICAgIHZhciByb3dzOkFycmF5PEpTWC5FbGVtZW50PiA9IFtdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGFibGVSb3dzLmxlbmd0aDsgaSsrKSB7XG4gICAgICByb3dzLnB1c2godGhpcy5yZW5kZXJSb3coaSwgdGFibGVSb3dzW2ldLCBjc3NDbGFzc2VzKSk7XG4gICAgfVxuICAgIHJldHVybiAoXG4gICAgICA8dGFibGUgY2xhc3NOYW1lPXtjc3NDbGFzc2VzLnJvb3R9PlxuICAgICAgICA8dGJvZHk+e3Jvd3N9PC90Ym9keT5cbiAgICAgIDwvdGFibGU+XG4gICAgKTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyUm93KFxuICAgIHJvd0luZGV4OiBudW1iZXIsXG4gICAgaXRlbXM6IEFycmF5PE11bHRpcGxlVGV4dEl0ZW1Nb2RlbD4sXG4gICAgY3NzQ2xhc3NlczogYW55XG4gICkge1xuICAgIHZhciBrZXk6IHN0cmluZyA9IFwiaXRlbVwiICsgcm93SW5kZXg7XG4gICAgdmFyIHRkczpBcnJheTxKU1guRWxlbWVudD4gPSBbXTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGl0ZW1zLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgaXRlbSA9IGl0ZW1zW2ldO1xuICAgICAgdGRzLnB1c2goXG4gICAgICAgIDx0ZCBrZXk9e1wiaXRlbVwiICsgaX0gY2xhc3NOYW1lPXt0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMuY2VsbH0+XG4gICAgICAgICAgPFN1cnZleU11bHRpcGxlVGV4dEl0ZW0gcXVlc3Rpb249e3RoaXMucXVlc3Rpb259IGl0ZW09e2l0ZW19IGNyZWF0b3I9e3RoaXMuY3JlYXRvcn0gY3NzQ2xhc3Nlcz17Y3NzQ2xhc3Nlc30+PC9TdXJ2ZXlNdWx0aXBsZVRleHRJdGVtPlxuICAgICAgICA8L3RkPlxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIChcbiAgICAgIDx0ciBrZXk9e2tleX0gY2xhc3NOYW1lPXtjc3NDbGFzc2VzLnJvd30+XG4gICAgICAgIHt0ZHN9XG4gICAgICA8L3RyPlxuICAgICk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFN1cnZleU11bHRpcGxlVGV4dEl0ZW0gZXh0ZW5kcyBSZWFjdFN1cnZleUVsZW1lbnQge1xuICBwcml2YXRlIGdldCBxdWVzdGlvbigpOiBRdWVzdGlvbk11bHRpcGxlVGV4dE1vZGVsIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5xdWVzdGlvbjtcbiAgfVxuICBwcml2YXRlIGdldCBpdGVtKCk6IE11bHRpcGxlVGV4dEl0ZW1Nb2RlbCB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuaXRlbTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0U3RhdGVFbGVtZW50cygpIHtcbiAgICByZXR1cm4gW3RoaXMuaXRlbSwgdGhpcy5pdGVtLmVkaXRvcl07XG4gIH1cbiAgcHJpdmF0ZSBnZXQgY3JlYXRvcigpOiBJU3VydmV5Q3JlYXRvciB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuY3JlYXRvcjtcbiAgfVxuXG4gIHByb3RlY3RlZCByZW5kZXJFbGVtZW50KCkge1xuICAgIGNvbnN0IGl0ZW0gPSB0aGlzLml0ZW07XG4gICAgY29uc3QgY3NzQ2xhc3NlcyA9IHRoaXMuY3NzQ2xhc3NlcztcbiAgICByZXR1cm4gKDxsYWJlbCBjbGFzc05hbWU9e3RoaXMucXVlc3Rpb24uZ2V0SXRlbUxhYmVsQ3NzKGl0ZW0pfT5cbiAgICAgIDxzcGFuIGNsYXNzTmFtZT17Y3NzQ2xhc3Nlcy5pdGVtVGl0bGV9PlxuICAgICAgICA8VGl0bGVDb250ZW50IGVsZW1lbnQ9e2l0ZW0uZWRpdG9yfSBjc3NDbGFzc2VzPXtpdGVtLmVkaXRvci5jc3NDbGFzc2VzfT48L1RpdGxlQ29udGVudD5cbiAgICAgIDwvc3Bhbj5cbiAgICAgIDxTdXJ2ZXlNdWx0aXBsZVRleHRJdGVtRWRpdG9yXG4gICAgICAgIGNzc0NsYXNzZXM9e2Nzc0NsYXNzZXN9XG4gICAgICAgIGl0ZW1Dc3M9e3RoaXMucXVlc3Rpb24uZ2V0SXRlbUNzcygpfVxuICAgICAgICBxdWVzdGlvbj17aXRlbS5lZGl0b3J9XG4gICAgICAgIGNyZWF0b3I9e3RoaXMuY3JlYXRvcn1cbiAgICAgIC8+XG4gICAgICB7dGhpcy5yZW5kZXJJdGVtVG9vbHRpcEVycm9yKGl0ZW0sIGNzc0NsYXNzZXMpfVxuICAgIDwvbGFiZWw+KTtcbiAgfVxuXG4gIHByb3RlY3RlZCByZW5kZXJJdGVtVG9vbHRpcEVycm9yKGl0ZW06IE11bHRpcGxlVGV4dEl0ZW1Nb2RlbCwgY3NzQ2xhc3NlczogYW55KTogSlNYLkVsZW1lbnQgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5pdGVtLmVkaXRvci5pc0Vycm9yc01vZGVUb29sdGlwID8gKFxuICAgICAgPFN1cnZleUVsZW1lbnRFcnJvcnNcbiAgICAgICAgZWxlbWVudD17aXRlbS5lZGl0b3J9XG4gICAgICAgIGNzc0NsYXNzZXM9e2Nzc0NsYXNzZXN9XG4gICAgICAgIGNyZWF0b3I9e3RoaXMuY3JlYXRvcn1cbiAgICAgICAgbG9jYXRpb249e1widG9vbHRpcFwifVxuICAgICAgICBpZD17aXRlbS5lZGl0b3IuaWQgKyBcIl9lcnJvcnNcIn1cbiAgICAgIC8+XG4gICAgKTogbnVsbDtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgU3VydmV5TXVsdGlwbGVUZXh0SXRlbUVkaXRvciBleHRlbmRzIFN1cnZleVF1ZXN0aW9uQW5kRXJyb3JzV3JhcHBlZCB7XG4gIHByb3RlY3RlZCByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICByZXR1cm4gPGRpdiBjbGFzc05hbWU9e3RoaXMuaXRlbUNzc30+e3RoaXMucmVuZGVyQ29udGVudCgpfTwvZGl2PjtcbiAgfVxufVxuXG5SZWFjdFF1ZXN0aW9uRmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlclF1ZXN0aW9uKFwibXVsdGlwbGV0ZXh0XCIsIChwcm9wcykgPT4ge1xuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTdXJ2ZXlRdWVzdGlvbk11bHRpcGxlVGV4dCwgcHJvcHMpO1xufSk7XG4iLCJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFN1cnZleVF1ZXN0aW9uRWxlbWVudEJhc2UgfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uX2VsZW1lbnRcIjtcbmltcG9ydCB7IFN1cnZleU1vZGVsLCBRdWVzdGlvblBhbmVsRHluYW1pY01vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBTdXJ2ZXlQYW5lbCB9IGZyb20gXCIuL3BhbmVsXCI7XG5pbXBvcnQgeyBSZWFjdFF1ZXN0aW9uRmFjdG9yeSB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fZmFjdG9yeVwiO1xuaW1wb3J0IHsgU3ZnSWNvbiB9IGZyb20gXCIuL2NvbXBvbmVudHMvc3ZnLWljb24vc3ZnLWljb25cIjtcbmltcG9ydCB7IFN1cnZleUFjdGlvbkJhciB9IGZyb20gXCIuL2NvbXBvbmVudHMvYWN0aW9uLWJhci9hY3Rpb24tYmFyXCI7XG5pbXBvcnQgeyBTdXJ2ZXlRdWVzdGlvblBhbmVsRHluYW1pY05leHRCdXR0b24gfSBmcm9tIFwiLi9jb21wb25lbnRzL3BhbmVsZHluYW1pYy1hY3Rpb25zL3BhbmVsZHluYW1pYy1uZXh0LWJ0blwiO1xuaW1wb3J0IHsgU3VydmV5UXVlc3Rpb25QYW5lbER5bmFtaWNQcmV2QnV0dG9uIH0gZnJvbSBcIi4vY29tcG9uZW50cy9wYW5lbGR5bmFtaWMtYWN0aW9ucy9wYW5lbGR5bmFtaWMtcHJldi1idG5cIjtcbmltcG9ydCB7IFN1cnZleVF1ZXN0aW9uUGFuZWxEeW5hbWljUHJvZ3Jlc3NUZXh0IH0gZnJvbSBcIi4vY29tcG9uZW50cy9wYW5lbGR5bmFtaWMtYWN0aW9ucy9wYW5lbGR5bmFtaWMtcHJvZ3Jlc3MtdGV4dFwiO1xuaW1wb3J0IHsgU3VydmV5UXVlc3Rpb25QYW5lbER5bmFtaWNBZGRCdXR0b24gfSBmcm9tIFwiLi9jb21wb25lbnRzL3BhbmVsZHluYW1pYy1hY3Rpb25zL3BhbmVsZHluYW1pYy1hZGQtYnRuXCI7XG5pbXBvcnQgeyBTdXJ2ZXlRdWVzdGlvblBhbmVsRHluYW1pY1JlbW92ZUJ1dHRvbiB9IGZyb20gXCIuL2NvbXBvbmVudHMvcGFuZWxkeW5hbWljLWFjdGlvbnMvcGFuZWxkeW5hbWljLXJlbW92ZS1idG5cIjtcbmltcG9ydCB7IFJlYWN0RWxlbWVudEZhY3RvcnkgfSBmcm9tIFwiLi9lbGVtZW50LWZhY3RvcnlcIjtcblxuZXhwb3J0IGNsYXNzIFN1cnZleVF1ZXN0aW9uUGFuZWxEeW5hbWljIGV4dGVuZHMgU3VydmV5UXVlc3Rpb25FbGVtZW50QmFzZSB7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldCBxdWVzdGlvbigpOiBRdWVzdGlvblBhbmVsRHluYW1pY01vZGVsIHtcbiAgICByZXR1cm4gdGhpcy5xdWVzdGlvbkJhc2UgYXMgUXVlc3Rpb25QYW5lbER5bmFtaWNNb2RlbDtcbiAgfVxuICBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICBzdXBlci5jb21wb25lbnREaWRNb3VudCgpO1xuICAgIHRoaXMuc2V0U3RhdGUoeyBwYW5lbENvdW50ZXI6IDAgfSk7XG4gICAgY29uc3Qgc2VsZjogU3VydmV5UXVlc3Rpb25QYW5lbER5bmFtaWMgPSB0aGlzO1xuICAgIHRoaXMucXVlc3Rpb24ucGFuZWxDb3VudENoYW5nZWRDYWxsYmFjayA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHNlbGYudXBkYXRlUXVlc3Rpb25SZW5kZXJpbmcoKTtcbiAgICB9O1xuICAgIHRoaXMucXVlc3Rpb24uY3VycmVudEluZGV4Q2hhbmdlZENhbGxiYWNrID0gZnVuY3Rpb24gKCkge1xuICAgICAgc2VsZi51cGRhdGVRdWVzdGlvblJlbmRlcmluZygpO1xuICAgIH07XG4gICAgdGhpcy5xdWVzdGlvbi5yZW5kZXJNb2RlQ2hhbmdlZENhbGxiYWNrID0gZnVuY3Rpb24gKCkge1xuICAgICAgc2VsZi51cGRhdGVRdWVzdGlvblJlbmRlcmluZygpO1xuICAgIH07XG4gIH1cbiAgY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgc3VwZXIuY29tcG9uZW50V2lsbFVubW91bnQoKTtcbiAgICB0aGlzLnF1ZXN0aW9uLnBhbmVsQ291bnRDaGFuZ2VkQ2FsbGJhY2sgPSAoKSA9PiB7fTtcbiAgICB0aGlzLnF1ZXN0aW9uLmN1cnJlbnRJbmRleENoYW5nZWRDYWxsYmFjayA9ICgpID0+IHt9O1xuICAgIHRoaXMucXVlc3Rpb24ucmVuZGVyTW9kZUNoYW5nZWRDYWxsYmFjayA9ICgpID0+IHt9O1xuICB9XG4gIHByaXZhdGUgdXBkYXRlUXVlc3Rpb25SZW5kZXJpbmcoKSB7XG4gICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICBwYW5lbENvdW50ZXI6IHRoaXMuc3RhdGUgPyB0aGlzLnN0YXRlLnBhbmVsQ291bnRlciArIDEgOiAxLFxuICAgIH0pO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICBjb25zdCBwYW5lbHM6QXJyYXk8SlNYLkVsZW1lbnQ+ID0gW107XG4gICAgaWYgKHRoaXMucXVlc3Rpb24uaXNSZW5kZXJNb2RlTGlzdCkge1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnF1ZXN0aW9uLnBhbmVscy5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCBwYW5lbCA9IHRoaXMucXVlc3Rpb24ucGFuZWxzW2ldO1xuICAgICAgICBwYW5lbHMucHVzaChcbiAgICAgICAgICA8U3VydmV5UXVlc3Rpb25QYW5lbER5bmFtaWNJdGVtXG4gICAgICAgICAgICBrZXk9e3BhbmVsLmlkfVxuICAgICAgICAgICAgZWxlbWVudD17cGFuZWx9XG4gICAgICAgICAgICBxdWVzdGlvbj17dGhpcy5xdWVzdGlvbn1cbiAgICAgICAgICAgIGluZGV4PXtpfVxuICAgICAgICAgICAgY3NzQ2xhc3Nlcz17dGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzfVxuICAgICAgICAgICAgaXNEaXNwbGF5TW9kZT17dGhpcy5pc0Rpc3BsYXlNb2RlfVxuICAgICAgICAgICAgY3JlYXRvcj17dGhpcy5jcmVhdG9yfVxuICAgICAgICAgIC8+XG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh0aGlzLnF1ZXN0aW9uLmN1cnJlbnRQYW5lbCAhPSBudWxsKSB7XG4gICAgICAgIGNvbnN0IHBhbmVsID0gdGhpcy5xdWVzdGlvbi5jdXJyZW50UGFuZWw7XG4gICAgICAgIHBhbmVscy5wdXNoKFxuICAgICAgICAgIDxTdXJ2ZXlRdWVzdGlvblBhbmVsRHluYW1pY0l0ZW1cbiAgICAgICAgICAgIGtleT17dGhpcy5xdWVzdGlvbi5jdXJyZW50SW5kZXh9XG4gICAgICAgICAgICBlbGVtZW50PXtwYW5lbH1cbiAgICAgICAgICAgIHF1ZXN0aW9uPXt0aGlzLnF1ZXN0aW9ufVxuICAgICAgICAgICAgaW5kZXg9e3RoaXMucXVlc3Rpb24uY3VycmVudEluZGV4fVxuICAgICAgICAgICAgY3NzQ2xhc3Nlcz17dGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzfVxuICAgICAgICAgICAgaXNEaXNwbGF5TW9kZT17dGhpcy5pc0Rpc3BsYXlNb2RlfVxuICAgICAgICAgICAgY3JlYXRvcj17dGhpcy5jcmVhdG9yfVxuICAgICAgICAgIC8+XG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IGJ0bkFkZDogSlNYLkVsZW1lbnQgfCBudWxsID0gdGhpcy5xdWVzdGlvbi5pc1JlbmRlck1vZGVMaXN0ICYmIHRoaXMucXVlc3Rpb25bXCJzaG93TGVnYWN5TmF2aWdhdGlvblwiXVxuICAgICAgPyB0aGlzLnJlbmRlckFkZFJvd0J1dHRvbigpXG4gICAgICA6IG51bGw7XG4gICAgY29uc3QgbmF2VG9wOiBKU1guRWxlbWVudCB8IG51bGwgPSB0aGlzLnF1ZXN0aW9uLmlzUHJvZ3Jlc3NUb3BTaG93aW5nXG4gICAgICA/IHRoaXMucmVuZGVyTmF2aWdhdG9yKClcbiAgICAgIDogbnVsbDtcbiAgICBjb25zdCBuYXZCb3R0b206IEpTWC5FbGVtZW50IHwgbnVsbCA9IHRoaXMucXVlc3Rpb24uaXNQcm9ncmVzc0JvdHRvbVNob3dpbmdcbiAgICAgID8gdGhpcy5yZW5kZXJOYXZpZ2F0b3IoKVxuICAgICAgOiBudWxsO1xuXG4gICAgY29uc3Qgc3R5bGU6IGFueSA9IHt9O1xuICAgIGNvbnN0IG5hdlYyID0gdGhpcy5yZW5kZXJOYXZpZ2F0b3JWMigpO1xuICAgIGNvbnN0IG5vRW50cmllc1BsYWNlaG9sZGVyID0gdGhpcy5yZW5kZXJQbGFjZWhvbGRlcigpO1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLnJvb3R9PlxuICAgICAgICB7bm9FbnRyaWVzUGxhY2Vob2xkZXJ9XG4gICAgICAgIHtuYXZUb3B9XG4gICAgICAgIHtwYW5lbHN9XG4gICAgICAgIHtuYXZCb3R0b219XG4gICAgICAgIHtidG5BZGR9XG4gICAgICAgIHtuYXZWMn1cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlck5hdmlnYXRvcigpOiBKU1guRWxlbWVudCB8IG51bGwge1xuICAgIGlmKCF0aGlzLnF1ZXN0aW9uW1wic2hvd0xlZ2FjeU5hdmlnYXRpb25cIl0pIHtcbiAgICAgIGlmKHRoaXMucXVlc3Rpb24uaXNSYW5nZVNob3dpbmcgJiYgdGhpcy5xdWVzdGlvbi5pc1Byb2dyZXNzVG9wU2hvd2luZykge1xuICAgICAgICByZXR1cm4gdGhpcy5yZW5kZXJSYW5nZSgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IHJhbmdlOiBKU1guRWxlbWVudCB8IG51bGwgPSB0aGlzLnF1ZXN0aW9uLmlzUmFuZ2VTaG93aW5nID8gdGhpcy5yZW5kZXJSYW5nZSgpIDogbnVsbDtcbiAgICBjb25zdCBidG5QcmV2OiBKU1guRWxlbWVudCA9IHRoaXMucmVuZHJlclByZXZCdXR0b24oKTtcbiAgICBjb25zdCBidG5OZXh0OiBKU1guRWxlbWVudCA9IHRoaXMucmVuZHJlck5leHRCdXR0b24oKTtcbiAgICBjb25zdCBidG5BZGQ6IEpTWC5FbGVtZW50IHwgbnVsbCA9IHRoaXMucmVuZGVyQWRkUm93QnV0dG9uKCk7XG4gICAgY29uc3QgcHJvZ3Jlc3NDbGFzczogc3RyaW5nID0gdGhpcy5xdWVzdGlvbi5pc1Byb2dyZXNzVG9wU2hvd2luZ1xuICAgICAgPyB0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMucHJvZ3Jlc3NUb3BcbiAgICAgIDogdGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLnByb2dyZXNzQm90dG9tO1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT17cHJvZ3Jlc3NDbGFzc30+XG4gICAgICAgIDxkaXYgc3R5bGU9e3sgY2xlYXI6IFwiYm90aFwiIH19PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXt0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMucHJvZ3Jlc3NDb250YWluZXJ9PlxuICAgICAgICAgICAge2J0blByZXZ9XG4gICAgICAgICAgICB7cmFuZ2V9XG4gICAgICAgICAgICB7YnRuTmV4dH1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICB7YnRuQWRkfVxuICAgICAgICAgIHt0aGlzLnJlbmRlclByb2dyZXNzVGV4dCgpfVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbiAgcHJpdmF0ZSByZW5kZXJQcm9ncmVzc1RleHQoKTogSlNYLkVsZW1lbnQge1xuICAgIHJldHVybiAoXG4gICAgICA8U3VydmV5UXVlc3Rpb25QYW5lbER5bmFtaWNQcm9ncmVzc1RleHQgZGF0YT17IHsgcXVlc3Rpb246IHRoaXMucXVlc3Rpb24gfX0+PC9TdXJ2ZXlRdWVzdGlvblBhbmVsRHluYW1pY1Byb2dyZXNzVGV4dD5cbiAgICApO1xuICB9XG5cbiAgcHJvdGVjdGVkIHJlbmRyZXJQcmV2QnV0dG9uKCkge1xuICAgIHJldHVybiAoXG4gICAgICA8U3VydmV5UXVlc3Rpb25QYW5lbER5bmFtaWNQcmV2QnV0dG9uIGRhdGE9eyB7IHF1ZXN0aW9uOiB0aGlzLnF1ZXN0aW9uIH19PjwvU3VydmV5UXVlc3Rpb25QYW5lbER5bmFtaWNQcmV2QnV0dG9uPlxuICAgICk7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRyZXJOZXh0QnV0dG9uKCkge1xuICAgIHJldHVybiAoXG4gICAgICA8U3VydmV5UXVlc3Rpb25QYW5lbER5bmFtaWNOZXh0QnV0dG9uIGRhdGE9eyB7IHF1ZXN0aW9uOiB0aGlzLnF1ZXN0aW9uIH19PjwvU3VydmV5UXVlc3Rpb25QYW5lbER5bmFtaWNOZXh0QnV0dG9uPlxuICAgICk7XG4gIH1cblxuICBwcm90ZWN0ZWQgcmVuZGVyUmFuZ2UoKTogSlNYLkVsZW1lbnQge1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLnByb2dyZXNzfT5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLnByb2dyZXNzQmFyfVxuICAgICAgICAgIHN0eWxlPXt7IHdpZHRoOiB0aGlzLnF1ZXN0aW9uLnByb2dyZXNzIH19XG4gICAgICAgICAgcm9sZT1cInByb2dyZXNzYmFyXCJcbiAgICAgICAgLz5cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckFkZFJvd0J1dHRvbigpOiBKU1guRWxlbWVudCB8IG51bGwge1xuICAgIHJldHVybiBSZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLmNyZWF0ZUVsZW1lbnQoXCJzdi1wYW5lbGR5bmFtaWMtYWRkLWJ0blwiLCB7XG4gICAgICBkYXRhOiB7IHF1ZXN0aW9uOiB0aGlzLnF1ZXN0aW9uIH1cbiAgICB9KTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyTmF2aWdhdG9yVjIoKTogSlNYLkVsZW1lbnQgfCBudWxsIHtcbiAgICBpZiAodGhpcy5xdWVzdGlvbi5wYW5lbENvdW50ID09PSAwIHx8IHRoaXMucXVlc3Rpb25bXCJzaG93TGVnYWN5TmF2aWdhdGlvblwiXSkgcmV0dXJuIG51bGw7XG4gICAgY29uc3QgcmFuZ2U6IEpTWC5FbGVtZW50IHwgbnVsbCA9IHRoaXMucXVlc3Rpb24uaXNSYW5nZVNob3dpbmcgJiYgIXRoaXMucXVlc3Rpb24uaXNQcm9ncmVzc1RvcFNob3dpbmcgPyB0aGlzLnJlbmRlclJhbmdlKCkgOiBudWxsO1xuICAgIGlmICghdGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLmZvb3Rlcikge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiAoPGRpdiBjbGFzc05hbWU9e3RoaXMucXVlc3Rpb24uY3NzQ2xhc3Nlcy5mb290ZXJ9PlxuICAgICAgPGhyIGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLnNlcGFyYXRvcn0gLz5cbiAgICAgIHtyYW5nZX1cbiAgICAgIDxkaXYgY2xhc3NOYW1lPXt0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMuZm9vdGVyQnV0dG9uc0NvbnRhaW5lcn0+XG4gICAgICAgIDxTdXJ2ZXlBY3Rpb25CYXIgbW9kZWw9e3RoaXMucXVlc3Rpb24uZm9vdGVyVG9vbGJhcn0+PC9TdXJ2ZXlBY3Rpb25CYXI+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj4pO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJQbGFjZWhvbGRlcigpOiBKU1guRWxlbWVudCB8IG51bGwge1xuICAgIGlmICh0aGlzLnF1ZXN0aW9uLmdldFNob3dOb0VudHJpZXNQbGFjZWhvbGRlcigpKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLm5vRW50cmllc1BsYWNlaG9sZGVyfT5cbiAgICAgICAgICA8c3Bhbj57dGhpcy5yZW5kZXJMb2NTdHJpbmcodGhpcy5xdWVzdGlvbi5sb2NOb0VudHJpZXNUZXh0KX08L3NwYW4+XG4gICAgICAgICAge3RoaXMucmVuZGVyQWRkUm93QnV0dG9uKCl9XG4gICAgICAgIDwvZGl2PlxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFN1cnZleVF1ZXN0aW9uUGFuZWxEeW5hbWljSXRlbSBleHRlbmRzIFN1cnZleVBhbmVsIHtcbiAgcHJpdmF0ZSBnZXQgcXVlc3Rpb24oKTogUXVlc3Rpb25QYW5lbER5bmFtaWNNb2RlbCB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMucXVlc3Rpb247XG4gIH1cbiAgcHJpdmF0ZSBnZXQgaW5kZXgoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5pbmRleDtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0U3VydmV5KCk6IFN1cnZleU1vZGVsIHwgbnVsbCB7XG4gICAgcmV0dXJuICEhdGhpcy5xdWVzdGlvbiA/ICh0aGlzLnF1ZXN0aW9uLnN1cnZleSBhcyBTdXJ2ZXlNb2RlbCkgOiBudWxsO1xuICB9XG4gIHByb3RlY3RlZCBnZXRDc3MoKTogYW55IHtcbiAgICBjb25zdCBzdXJ2ZXkgPSB0aGlzLmdldFN1cnZleSgpO1xuICAgIHJldHVybiAhIXN1cnZleSA/IHN1cnZleS5nZXRDc3MoKSA6IHt9O1xuICB9XG4gIHB1YmxpYyByZW5kZXIoKSB7XG4gICAgY29uc3QgcGFuZWwgPSBzdXBlci5yZW5kZXIoKTtcbiAgICBjb25zdCByZW1vdmVCdXR0b24gPSB0aGlzLnJlbmRlckJ1dHRvbigpO1xuICAgIGNvbnN0IHNlcGFyYXRvcjogSlNYLkVsZW1lbnQgfCBudWxsID0gdGhpcy5xdWVzdGlvbi5pc1JlbmRlck1vZGVMaXN0ICYmIHRoaXMuaW5kZXggPCB0aGlzLnF1ZXN0aW9uLnBhbmVsQ291bnQgLSAxID9cbiAgICAgICg8aHIgY2xhc3NOYW1lPXt0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMuc2VwYXJhdG9yfSAvPikgOiBudWxsO1xuICAgIHJldHVybiAoXG4gICAgICA8PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5nZXRQYW5lbFdyYXBwZXJDc3MoKX0+XG4gICAgICAgICAge3BhbmVsfVxuICAgICAgICAgIHtyZW1vdmVCdXR0b259XG4gICAgICAgIDwvZGl2PlxuICAgICAgICB7c2VwYXJhdG9yfVxuICAgICAgPC8+XG4gICAgKTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyQnV0dG9uKCk6IEpTWC5FbGVtZW50IHwgbnVsbCB7XG4gICAgaWYgKFxuICAgICAgIXRoaXMucXVlc3Rpb24uY2FuUmVtb3ZlUGFuZWwgfHxcbiAgICAgICh0aGlzLnF1ZXN0aW9uLmlzUmVuZGVyTW9kZUxpc3QgJiYgdGhpcy5wYW5lbC5pc0NvbGxhcHNlZClcbiAgICApIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5jcmVhdGVFbGVtZW50KFwic3YtcGFuZWxkeW5hbWljLXJlbW92ZS1idG5cIiwge1xuICAgICAgZGF0YTogeyBxdWVzdGlvbjogdGhpcy5xdWVzdGlvbiwgaW5kZXg6IHRoaXMuaW5kZXggfVxuICAgIH0pO1xuICB9XG59XG5cblJlYWN0UXVlc3Rpb25GYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyUXVlc3Rpb24oXCJwYW5lbGR5bmFtaWNcIiwgcHJvcHMgPT4ge1xuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTdXJ2ZXlRdWVzdGlvblBhbmVsRHluYW1pYywgcHJvcHMpO1xufSk7XG4iLCJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFN1cnZleVF1ZXN0aW9uRWxlbWVudEJhc2UsIFJlYWN0U3VydmV5RWxlbWVudCB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fZWxlbWVudFwiO1xuaW1wb3J0IHsgUXVlc3Rpb25SYWRpb2dyb3VwTW9kZWwsIEl0ZW1WYWx1ZSwgQmFzZSwgU3VydmV5TW9kZWwgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFN1cnZleVF1ZXN0aW9uQ29tbWVudEl0ZW0gfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uX2NvbW1lbnRcIjtcbmltcG9ydCB7IFJlYWN0UXVlc3Rpb25GYWN0b3J5IH0gZnJvbSBcIi4vcmVhY3RxdWVzdGlvbl9mYWN0b3J5XCI7XG5pbXBvcnQgeyBSZWFjdFN1cnZleUVsZW1lbnRzV3JhcHBlciB9IGZyb20gXCIuL3JlYWN0c3VydmV5bW9kZWxcIjtcbmltcG9ydCB7IFJlYWN0RWxlbWVudEZhY3RvcnkgfSBmcm9tIFwiLi9lbGVtZW50LWZhY3RvcnlcIjtcblxuZXhwb3J0IGNsYXNzIFN1cnZleVF1ZXN0aW9uUmFkaW9ncm91cCBleHRlbmRzIFN1cnZleVF1ZXN0aW9uRWxlbWVudEJhc2Uge1xuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICB9XG4gIHByb3RlY3RlZCBnZXQgcXVlc3Rpb24oKTogUXVlc3Rpb25SYWRpb2dyb3VwTW9kZWwge1xuICAgIHJldHVybiB0aGlzLnF1ZXN0aW9uQmFzZSBhcyBRdWVzdGlvblJhZGlvZ3JvdXBNb2RlbDtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyRWxlbWVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgdmFyIGNzc0NsYXNzZXMgPSB0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXM7XG4gICAgdmFyIGNsZWFyQnV0dG9uOiBKU1guRWxlbWVudCB8IG51bGwgPSBudWxsO1xuICAgIGlmICh0aGlzLnF1ZXN0aW9uLnNob3dDbGVhckJ1dHRvbkluQ29udGVudCkge1xuICAgICAgY2xlYXJCdXR0b24gPSAoXG4gICAgICAgIDxkaXY+XG4gICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLmNsZWFyQnV0dG9ufVxuICAgICAgICAgICAgb25DbGljaz17KCkgPT4gdGhpcy5xdWVzdGlvbi5jbGVhclZhbHVlKCl9XG4gICAgICAgICAgICB2YWx1ZT17dGhpcy5xdWVzdGlvbi5jbGVhckJ1dHRvbkNhcHRpb259XG4gICAgICAgICAgLz5cbiAgICAgICAgPC9kaXY+XG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gKFxuICAgICAgPGZpZWxkc2V0XG4gICAgICAgIGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5nZXRTZWxlY3RCYXNlUm9vdENzcygpfVxuICAgICAgICByb2xlPVwicHJlc2VudGF0aW9uXCJcbiAgICAgICAgcmVmPXsoZmllbGRzZXQpID0+ICh0aGlzLnNldENvbnRyb2woZmllbGRzZXQpKX1cbiAgICAgID5cbiAgICAgICAge3RoaXMucXVlc3Rpb24uaGFzQ29sdW1uc1xuICAgICAgICAgID8gdGhpcy5nZXRDb2x1bW5lZEJvZHkoY3NzQ2xhc3NlcylcbiAgICAgICAgICA6IHRoaXMuZ2V0Qm9keShjc3NDbGFzc2VzKX1cbiAgICAgICAge3RoaXMuZ2V0Rm9vdGVyKCl9XG4gICAgICAgIHt0aGlzLnF1ZXN0aW9uLmlzT3RoZXJTZWxlY3RlZCA/IHRoaXMucmVuZGVyT3RoZXIoY3NzQ2xhc3NlcykgOiBudWxsfVxuICAgICAgICB7Y2xlYXJCdXR0b259XG4gICAgICA8L2ZpZWxkc2V0PlxuICAgICk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldEZvb3RlcigpIHtcbiAgICBpZiAodGhpcy5xdWVzdGlvbi5oYXNGb290SXRlbXMpIHtcbiAgICAgIHJldHVybiB0aGlzLnF1ZXN0aW9uLmZvb3RJdGVtcy5tYXAoKGl0ZW06IGFueSwgaWk6IG51bWJlcikgPT5cbiAgICAgICAgdGhpcy5yZW5kZXJJdGVtKFxuICAgICAgICAgIFwiaXRlbV9mXCIgKyBpaSxcbiAgICAgICAgICBpdGVtLFxuICAgICAgICAgIGZhbHNlLFxuICAgICAgICAgIHRoaXMucXVlc3Rpb24uY3NzQ2xhc3Nlc1xuICAgICAgICApXG4gICAgICApO1xuICAgIH1cbiAgfVxuICBwcm90ZWN0ZWQgZ2V0Q29sdW1uZWRCb2R5KGNzc0NsYXNzZXM6IGFueSkge1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT17Y3NzQ2xhc3Nlcy5yb290TXVsdGlDb2x1bW59PlxuICAgICAgICB7dGhpcy5nZXRDb2x1bW5zKGNzc0NsYXNzZXMpfVxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0Q29sdW1ucyhjc3NDbGFzc2VzOiBhbnkpIHtcbiAgICB2YXIgdmFsdWUgPSB0aGlzLmdldFN0YXRlVmFsdWUoKTtcbiAgICByZXR1cm4gdGhpcy5xdWVzdGlvbi5jb2x1bW5zLm1hcCgoY29sdW1uOiBhbnksIGNpOiBudW1iZXIpID0+IHtcbiAgICAgIHZhciBpdGVtcyA9IGNvbHVtbi5tYXAoKGl0ZW06IGFueSwgaWk6IG51bWJlcikgPT5cbiAgICAgICAgdGhpcy5yZW5kZXJJdGVtKFwiaXRlbVwiICsgY2kgKyBpaSwgaXRlbSwgdmFsdWUsIGNzc0NsYXNzZXMsIFwiXCIgKyBjaSArIGlpKVxuICAgICAgKTtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxkaXYga2V5PXtcImNvbHVtblwiICsgY2l9IGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5nZXRDb2x1bW5DbGFzcygpfSByb2xlPVwicHJlc2VudGF0aW9uXCI+XG4gICAgICAgICAge2l0ZW1zfVxuICAgICAgICA8L2Rpdj5cbiAgICAgICk7XG4gICAgfSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0Qm9keShjc3NDbGFzc2VzOiBhbnkpOiBKU1guRWxlbWVudCB7XG4gICAgaWYodGhpcy5xdWVzdGlvbi5ibG9ja2VkUm93KSB7XG4gICAgICByZXR1cm4gPGRpdiBjbGFzc05hbWU9e2Nzc0NsYXNzZXMucm9vdFJvd30+e3RoaXMuZ2V0SXRlbXMoY3NzQ2xhc3NlcywgdGhpcy5xdWVzdGlvbi5kYXRhQ2hvaWNlcyl9PC9kaXY+O1xuICAgIH1cbiAgICBlbHNlIHJldHVybiA8Pnt0aGlzLmdldEl0ZW1zKGNzc0NsYXNzZXMsIHRoaXMucXVlc3Rpb24uYm9keUl0ZW1zKX08Lz47XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0SXRlbXMoY3NzQ2xhc3NlczogYW55LCBjaG9pY2VzOiBBcnJheSA8SXRlbVZhbHVlPik6IEFycmF5PGFueT4ge1xuICAgIHZhciBpdGVtczpBcnJheTxKU1guRWxlbWVudD4gPSBbXTtcbiAgICB2YXIgdmFsdWUgPSB0aGlzLmdldFN0YXRlVmFsdWUoKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNob2ljZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBpdGVtID0gY2hvaWNlc1tpXTtcbiAgICAgIHZhciByZW5kZXJlZEl0ZW0gPSB0aGlzLnJlbmRlckl0ZW0oXCJpdGVtXCIgKyBpLCBpdGVtLCB2YWx1ZSwgY3NzQ2xhc3NlcywgXCJcIiArIGkpO1xuICAgICAgaXRlbXMucHVzaChyZW5kZXJlZEl0ZW0pO1xuICAgIH1cbiAgICByZXR1cm4gaXRlbXM7XG4gIH1cbiAgcHJvdGVjdGVkIGdldCB0ZXh0U3R5bGUoKTogYW55IHtcbiAgICByZXR1cm4gbnVsbDsvL3sgZGlzcGxheTogXCJpbmxpbmVcIiwgcG9zaXRpb246IFwic3RhdGljXCIgfTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyT3RoZXIoY3NzQ2xhc3NlczogYW55KTogSlNYLkVsZW1lbnQge1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cImZvcm0tZ3JvdXBcIj5cbiAgICAgICAgPFN1cnZleVF1ZXN0aW9uQ29tbWVudEl0ZW1cbiAgICAgICAgICBxdWVzdGlvbj17dGhpcy5xdWVzdGlvbn1cbiAgICAgICAgICBvdGhlckNzcz17Y3NzQ2xhc3Nlcy5vdGhlcn1cbiAgICAgICAgICBjc3NDbGFzc2VzPXtjc3NDbGFzc2VzfVxuICAgICAgICAgIGlzRGlzcGxheU1vZGU9e3RoaXMuaXNEaXNwbGF5TW9kZX1cbiAgICAgICAgLz5cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbiAgcHJpdmF0ZSByZW5kZXJJdGVtKFxuICAgIGtleTogc3RyaW5nLFxuICAgIGl0ZW06IEl0ZW1WYWx1ZSxcbiAgICB2YWx1ZTogYW55LFxuICAgIGNzc0NsYXNzZXM6IGFueSxcbiAgICBpbmRleD86IHN0cmluZ1xuICApOiBKU1guRWxlbWVudCB7XG4gICAgY29uc3QgcmVuZGVyZWRJdGVtID0gUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5jcmVhdGVFbGVtZW50KHRoaXMucXVlc3Rpb24uaXRlbUNvbXBvbmVudCwge1xuICAgICAga2V5OiBrZXksXG4gICAgICBxdWVzdGlvbjogdGhpcy5xdWVzdGlvbixcbiAgICAgIGNzc0NsYXNzZXM6IGNzc0NsYXNzZXMsXG4gICAgICBpc0Rpc3BsYXlNb2RlOiB0aGlzLmlzRGlzcGxheU1vZGUsXG4gICAgICBpdGVtOiBpdGVtLFxuICAgICAgdGV4dFN0eWxlOiB0aGlzLnRleHRTdHlsZSxcbiAgICAgIGluZGV4OiBpbmRleCxcbiAgICAgIGlzQ2hlY2tlZDogdmFsdWUgPT09IGl0ZW0udmFsdWUsXG4gICAgfSk7XG4gICAgY29uc3Qgc3VydmV5ID0gdGhpcy5xdWVzdGlvbi5zdXJ2ZXkgYXMgU3VydmV5TW9kZWw7XG4gICAgbGV0IHdyYXBwZWRJdGVtOiBKU1guRWxlbWVudCB8IG51bGwgPSBudWxsO1xuICAgIGlmICghIXN1cnZleSkge1xuICAgICAgd3JhcHBlZEl0ZW0gPSBSZWFjdFN1cnZleUVsZW1lbnRzV3JhcHBlci53cmFwSXRlbVZhbHVlKHN1cnZleSwgcmVuZGVyZWRJdGVtLCB0aGlzLnF1ZXN0aW9uLCBpdGVtKTtcbiAgICB9XG4gICAgcmV0dXJuIHdyYXBwZWRJdGVtID8/IHJlbmRlcmVkSXRlbTtcbiAgfVxuICBwcml2YXRlIGdldFN0YXRlVmFsdWUoKTogYW55IHtcbiAgICByZXR1cm4gIXRoaXMucXVlc3Rpb24uaXNFbXB0eSgpID8gdGhpcy5xdWVzdGlvbi5yZW5kZXJlZFZhbHVlIDogXCJcIjtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgU3VydmV5UXVlc3Rpb25SYWRpb0l0ZW0gZXh0ZW5kcyBSZWFjdFN1cnZleUVsZW1lbnQge1xuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMuaGFuZGxlT25DaGFuZ2UgPSB0aGlzLmhhbmRsZU9uQ2hhbmdlLmJpbmQodGhpcyk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldFN0YXRlRWxlbWVudCgpOiBCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5pdGVtO1xuICB9XG4gIHByb3RlY3RlZCBnZXQgcXVlc3Rpb24oKTogUXVlc3Rpb25SYWRpb2dyb3VwTW9kZWwge1xuICAgIHJldHVybiB0aGlzLnByb3BzLnF1ZXN0aW9uO1xuICB9XG4gIHByb3RlY3RlZCBnZXQgaXRlbSgpOiBJdGVtVmFsdWUge1xuICAgIHJldHVybiB0aGlzLnByb3BzLml0ZW07XG4gIH1cbiAgcHJvdGVjdGVkIGdldCB0ZXh0U3R5bGUoKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy50ZXh0U3R5bGU7XG4gIH1cbiAgcHJvdGVjdGVkIGdldCBpbmRleCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnByb3BzLmluZGV4O1xuICB9XG4gIHByb3RlY3RlZCBnZXQgaXNDaGVja2VkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnByb3BzLmlzQ2hlY2tlZDtcbiAgfVxuICBwcml2YXRlIGdldCBoaWRlQ2FwdGlvbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5oaWRlQ2FwdGlvbiA9PT0gdHJ1ZTtcbiAgfVxuICBwdWJsaWMgc2hvdWxkQ29tcG9uZW50VXBkYXRlKG5leHRQcm9wczogYW55LCBuZXh0U3RhdGU6IGFueSk6IGJvb2xlYW4ge1xuICAgIGlmICghc3VwZXIuc2hvdWxkQ29tcG9uZW50VXBkYXRlKG5leHRQcm9wcywgbmV4dFN0YXRlKSkgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiAoXG4gICAgICAhdGhpcy5xdWVzdGlvbi5jdXN0b21XaWRnZXQgfHxcbiAgICAgICEhdGhpcy5xdWVzdGlvbi5jdXN0b21XaWRnZXREYXRhLmlzTmVlZFJlbmRlciB8fFxuICAgICAgISF0aGlzLnF1ZXN0aW9uLmN1c3RvbVdpZGdldC53aWRnZXRKc29uLmlzRGVmYXVsdFJlbmRlciB8fFxuICAgICAgISF0aGlzLnF1ZXN0aW9uLmN1c3RvbVdpZGdldC53aWRnZXRKc29uLnJlbmRlclxuICAgICk7XG4gIH1cbiAgaGFuZGxlT25DaGFuZ2UoZXZlbnQ6IGFueSkge1xuICAgIHRoaXMucXVlc3Rpb24ucmVuZGVyZWRWYWx1ZSA9IHRoaXMuaXRlbS52YWx1ZTtcbiAgfVxuICBwcm90ZWN0ZWQgY2FuUmVuZGVyKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIXRoaXMucXVlc3Rpb24gJiYgISF0aGlzLml0ZW07XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIHZhciBpdGVtVGV4dCA9ICF0aGlzLmhpZGVDYXB0aW9uXG4gICAgICA/IHRoaXMucmVuZGVyTG9jU3RyaW5nKHRoaXMuaXRlbS5sb2NUZXh0LCB0aGlzLnRleHRTdHlsZSlcbiAgICAgIDogXCJcIjtcbiAgICB2YXIgaXRlbUNsYXNzID0gdGhpcy5xdWVzdGlvbi5nZXRJdGVtQ2xhc3ModGhpcy5pdGVtKTtcbiAgICB2YXIgbGFiZWxDbGFzcyA9IHRoaXMucXVlc3Rpb24uZ2V0TGFiZWxDbGFzcyh0aGlzLml0ZW0pO1xuICAgIHZhciBsb2NUZXh0OiBhbnkgPSB0aGlzLml0ZW0ubG9jVGV4dDtcbiAgICB2YXIgY29udHJvbExhYmVsQ2xhc3MgPSB0aGlzLnF1ZXN0aW9uLmdldENvbnRyb2xMYWJlbENsYXNzKHRoaXMuaXRlbSk7XG5cbiAgICByZXR1cm4gKFxuICAgICAgPGRpdlxuICAgICAgICBjbGFzc05hbWU9e2l0ZW1DbGFzc31cbiAgICAgICAgcm9sZT1cInByZXNlbnRhdGlvblwiXG4gICAgICA+XG4gICAgICAgIDxsYWJlbCBjbGFzc05hbWU9e2xhYmVsQ2xhc3N9IGFyaWEtbGFiZWw9e3RoaXMucXVlc3Rpb24uZ2V0QXJpYUl0ZW1MYWJlbCh0aGlzLml0ZW0pfT5cbiAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgIGFyaWEtZGVzY3JpYmVkYnk9e3RoaXMucXVlc3Rpb24uYXJpYURlc2NyaWJlZEJ5fVxuICAgICAgICAgICAgY2xhc3NOYW1lPXt0aGlzLmNzc0NsYXNzZXMuaXRlbUNvbnRyb2x9XG4gICAgICAgICAgICBpZD17dGhpcy5xdWVzdGlvbi5nZXRJdGVtSWQodGhpcy5pdGVtKX1cbiAgICAgICAgICAgIHR5cGU9XCJyYWRpb1wiXG4gICAgICAgICAgICBuYW1lPXt0aGlzLnF1ZXN0aW9uLnF1ZXN0aW9uTmFtZX1cbiAgICAgICAgICAgIGNoZWNrZWQ9e3RoaXMuaXNDaGVja2VkfVxuICAgICAgICAgICAgdmFsdWU9e3RoaXMuaXRlbS52YWx1ZX1cbiAgICAgICAgICAgIGRpc2FibGVkPXshdGhpcy5xdWVzdGlvbi5nZXRJdGVtRW5hYmxlZCh0aGlzLml0ZW0pfVxuICAgICAgICAgICAgb25DaGFuZ2U9e3RoaXMuaGFuZGxlT25DaGFuZ2V9XG4gICAgICAgICAgLz5cbiAgICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmNzc0NsYXNzZXMubWF0ZXJpYWxEZWNvcmF0b3IgP1xuICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9e3RoaXMuY3NzQ2xhc3Nlcy5tYXRlcmlhbERlY29yYXRvcn0+XG4gICAgICAgICAgICAgICAge3RoaXMucXVlc3Rpb24uaXRlbVN2Z0ljb24gP1xuICAgICAgICAgICAgICAgICAgPHN2Z1xuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9e3RoaXMuY3NzQ2xhc3Nlcy5pdGVtRGVjb3JhdG9yfVxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8dXNlIHhsaW5rSHJlZj17dGhpcy5xdWVzdGlvbi5pdGVtU3ZnSWNvbn0+PC91c2U+XG4gICAgICAgICAgICAgICAgICA8L3N2Zz4gOlxuICAgICAgICAgICAgICAgICAgbnVsbFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgPC9zcGFuPiA6XG4gICAgICAgICAgICAgIG51bGxcbiAgICAgICAgICB9XG4gICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPXtjb250cm9sTGFiZWxDbGFzc30+XG4gICAgICAgICAgICB7aXRlbVRleHR9XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L2xhYmVsPlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxufVxuXG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcInN1cnZleS1yYWRpb2dyb3VwLWl0ZW1cIiwgKHByb3BzOiBhbnkpID0+IHtcbiAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3VydmV5UXVlc3Rpb25SYWRpb0l0ZW0sIHByb3BzKTtcbn0pO1xuXG5SZWFjdFF1ZXN0aW9uRmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlclF1ZXN0aW9uKFwicmFkaW9ncm91cFwiLCAocHJvcHMpID0+IHtcbiAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3VydmV5UXVlc3Rpb25SYWRpb2dyb3VwLCBwcm9wcyk7XG59KTtcbiIsImltcG9ydCAqIGFzIFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHtcbiAgUmVhY3RTdXJ2ZXlFbGVtZW50LFxuICBTdXJ2ZXlRdWVzdGlvbkVsZW1lbnRCYXNlLFxufSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uX2VsZW1lbnRcIjtcbmltcG9ydCB7IFF1ZXN0aW9uUmFua2luZ01vZGVsLCBTdXJ2ZXlNb2RlbCwgSXRlbVZhbHVlIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBSZWFjdFF1ZXN0aW9uRmFjdG9yeSB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fZmFjdG9yeVwiO1xuaW1wb3J0IHsgUmVhY3RTdXJ2ZXlFbGVtZW50c1dyYXBwZXIgfSBmcm9tIFwiLi9yZWFjdHN1cnZleW1vZGVsXCI7XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlRdWVzdGlvblJhbmtpbmcgZXh0ZW5kcyBTdXJ2ZXlRdWVzdGlvbkVsZW1lbnRCYXNlIHtcbiAgcHJvdGVjdGVkIGdldCBxdWVzdGlvbigpOiBRdWVzdGlvblJhbmtpbmdNb2RlbCB7XG4gICAgcmV0dXJuIHRoaXMucXVlc3Rpb25CYXNlIGFzIFF1ZXN0aW9uUmFua2luZ01vZGVsO1xuICB9XG5cbiAgcHJvdGVjdGVkIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5yb290Q2xhc3N9XG4gICAgICAgIHJlZj17KHJvb3QpID0+ICh0aGlzLnNldENvbnRyb2wocm9vdCkpfVxuICAgICAgPlxuICAgICAgICB7dGhpcy5nZXRJdGVtcygpfVxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRJdGVtcygpOiBBcnJheTxhbnk+IHtcbiAgICBjb25zdCBpdGVtczogQXJyYXk8SlNYLkVsZW1lbnQ+ID0gW107XG4gICAgY29uc3QgcmFua2luZ0Nob2ljZXMgPSB0aGlzLnF1ZXN0aW9uLnJhbmtpbmdDaG9pY2VzO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcmFua2luZ0Nob2ljZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IGl0ZW0gPSByYW5raW5nQ2hvaWNlc1tpXTtcbiAgICAgIGl0ZW1zLnB1c2goXG4gICAgICAgIHRoaXMucmVuZGVySXRlbShcbiAgICAgICAgICBpdGVtLFxuICAgICAgICAgIGksXG4gICAgICAgICAgKGV2ZW50OiBQb2ludGVyRXZlbnQpID0+IHtcbiAgICAgICAgICAgIHRoaXMucXVlc3Rpb24uaGFuZGxlS2V5ZG93bi5jYWxsKHRoaXMucXVlc3Rpb24sIGV2ZW50LCBpdGVtKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIChldmVudDogYW55KSA9PiB7XG4gICAgICAgICAgICBldmVudC5wZXJzaXN0KCk7XG4gICAgICAgICAgICAvL2V2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICB0aGlzLnF1ZXN0aW9uLmhhbmRsZVBvaW50ZXJEb3duLmNhbGwoXG4gICAgICAgICAgICAgIHRoaXMucXVlc3Rpb24sXG4gICAgICAgICAgICAgIGV2ZW50LFxuICAgICAgICAgICAgICBpdGVtLFxuICAgICAgICAgICAgICBldmVudC5jdXJyZW50VGFyZ2V0XG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgdGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLFxuICAgICAgICAgIHRoaXMucXVlc3Rpb24uZ2V0SXRlbUNsYXNzKGl0ZW0pLFxuICAgICAgICAgIHRoaXMucXVlc3Rpb25cbiAgICAgICAgKVxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIGl0ZW1zO1xuICB9XG5cbiAgcHJvdGVjdGVkIHJlbmRlckl0ZW0oXG4gICAgaXRlbTogSXRlbVZhbHVlLFxuICAgIGk6IG51bWJlcixcbiAgICBoYW5kbGVLZXlkb3duOiAoZXZlbnQ6IGFueSkgPT4gdm9pZCxcbiAgICBoYW5kbGVQb2ludGVyRG93bjogKGV2ZW50OiBQb2ludGVyRXZlbnQpID0+IHZvaWQsXG4gICAgY3NzQ2xhc3NlczogYW55LFxuICAgIGl0ZW1DbGFzczogc3RyaW5nLFxuICAgIHF1ZXN0aW9uOiBRdWVzdGlvblJhbmtpbmdNb2RlbFxuICApOiBKU1guRWxlbWVudCB7XG4gICAgY29uc3Qga2V5OiBzdHJpbmcgPSBpdGVtLnZhbHVlICsgXCItXCIgKyBpICsgXCItaXRlbVwiO1xuICAgIGNvbnN0IHRleHQ6IEpTWC5FbGVtZW50ID0gdGhpcy5yZW5kZXJMb2NTdHJpbmcoaXRlbS5sb2NUZXh0KTtcbiAgICBjb25zdCBpbmRleCA9IGk7XG4gICAgY29uc3QgaW5kZXhUZXh0OiBzdHJpbmcgPSB0aGlzLnF1ZXN0aW9uLmdldE51bWJlckJ5SW5kZXgoaSk7XG4gICAgY29uc3QgdGFiSW5kZXg6IG51bWJlciA9IHRoaXMucXVlc3Rpb24uZ2V0SXRlbVRhYkluZGV4KGl0ZW0pO1xuICAgIGNvbnN0IHJlbmRlcmVkSXRlbSA9IChcbiAgICAgIDxTdXJ2ZXlRdWVzdGlvblJhbmtpbmdJdGVtXG4gICAgICAgIGtleT17a2V5fVxuICAgICAgICB0ZXh0PXt0ZXh0fVxuICAgICAgICBpbmRleD17aW5kZXh9XG4gICAgICAgIGluZGV4VGV4dD17aW5kZXhUZXh0fVxuICAgICAgICBpdGVtVGFiSW5kZXg9e3RhYkluZGV4fVxuICAgICAgICBoYW5kbGVLZXlkb3duPXtoYW5kbGVLZXlkb3dufVxuICAgICAgICBoYW5kbGVQb2ludGVyRG93bj17aGFuZGxlUG9pbnRlckRvd259XG4gICAgICAgIGNzc0NsYXNzZXM9e2Nzc0NsYXNzZXN9XG4gICAgICAgIGl0ZW1DbGFzcz17aXRlbUNsYXNzfVxuICAgICAgICBxdWVzdGlvbj17cXVlc3Rpb259XG4gICAgICAvPlxuICAgICk7XG4gICAgY29uc3Qgc3VydmV5ID0gdGhpcy5xdWVzdGlvbi5zdXJ2ZXkgYXMgU3VydmV5TW9kZWw7XG4gICAgbGV0IHdyYXBwZWRJdGVtOiBKU1guRWxlbWVudCB8IG51bGwgPSBudWxsO1xuICAgIGlmICghIXN1cnZleSkge1xuICAgICAgd3JhcHBlZEl0ZW0gPSBSZWFjdFN1cnZleUVsZW1lbnRzV3JhcHBlci53cmFwSXRlbVZhbHVlKHN1cnZleSwgcmVuZGVyZWRJdGVtLCB0aGlzLnF1ZXN0aW9uLCBpdGVtKTtcbiAgICB9XG4gICAgcmV0dXJuIHdyYXBwZWRJdGVtID8/IHJlbmRlcmVkSXRlbTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgU3VydmV5UXVlc3Rpb25SYW5raW5nSXRlbSBleHRlbmRzIFJlYWN0U3VydmV5RWxlbWVudCB7XG4gIHByb3RlY3RlZCBnZXQgdGV4dCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByb3BzLnRleHQ7XG4gIH1cbiAgcHJvdGVjdGVkIGdldCBpbmRleCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByb3BzLmluZGV4O1xuICB9XG4gIHByb3RlY3RlZCBnZXQgaW5kZXhUZXh0KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuaW5kZXhUZXh0O1xuICB9XG4gIHByb3RlY3RlZCBnZXQgaGFuZGxlS2V5ZG93bigpOiAoZXZlbnQ6IGFueSkgPT4gdm9pZCB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuaGFuZGxlS2V5ZG93bjtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IGhhbmRsZVBvaW50ZXJEb3duKCk6IChldmVudDogYW55KSA9PiB2b2lkIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5oYW5kbGVQb2ludGVyRG93bjtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IGNzc0NsYXNzZXMoKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5jc3NDbGFzc2VzO1xuICB9XG4gIHByb3RlY3RlZCBnZXQgaXRlbUNsYXNzKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuaXRlbUNsYXNzO1xuICB9XG4gIHByb3RlY3RlZCBnZXQgaXRlbVRhYkluZGV4KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuaXRlbVRhYkluZGV4O1xuICB9XG4gIHByb3RlY3RlZCBnZXQgcXVlc3Rpb24oKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5xdWVzdGlvbjtcbiAgfVxuXG4gIHByb3RlY3RlZCByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdlxuICAgICAgICB0YWJJbmRleD17dGhpcy5pdGVtVGFiSW5kZXh9XG4gICAgICAgIGNsYXNzTmFtZT17dGhpcy5pdGVtQ2xhc3N9XG4gICAgICAgIG9uS2V5RG93bj17dGhpcy5oYW5kbGVLZXlkb3dufVxuICAgICAgICBvblBvaW50ZXJEb3duPXt0aGlzLmhhbmRsZVBvaW50ZXJEb3dufVxuICAgICAgICBkYXRhLXN2LWRyb3AtdGFyZ2V0LXJhbmtpbmctaXRlbT17dGhpcy5pbmRleH1cbiAgICAgID5cbiAgICAgICAgPGRpdiB0YWJJbmRleD17LTF9IHN0eWxlPXt7IG91dGxpbmU6IFwibm9uZVwiIH19PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXt0aGlzLmNzc0NsYXNzZXMuaXRlbUdob3N0Tm9kZX0gLz5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17dGhpcy5jc3NDbGFzc2VzLml0ZW1Db250ZW50fT5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXt0aGlzLmNzc0NsYXNzZXMuaXRlbUljb25Db250YWluZXJ9PlxuICAgICAgICAgICAgICA8c3ZnXG4gICAgICAgICAgICAgICAgd2lkdGg9XCIxMFwiXG4gICAgICAgICAgICAgICAgaGVpZ2h0PVwiMTZcIlxuICAgICAgICAgICAgICAgIHZpZXdCb3g9XCIwIDAgMTAgMTZcIlxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5nZXRJY29uSG92ZXJDc3MoKX1cbiAgICAgICAgICAgICAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNNiAyQzYgMC45IDYuOSAwIDggMEM5LjEgMCAxMCAwLjkgMTAgMkMxMCAzLjEgOS4xIDQgOCA0QzYuOSA0IDYgMy4xIDYgMlpNMiAwQzAuOSAwIDAgMC45IDAgMkMwIDMuMSAwLjkgNCAyIDRDMy4xIDQgNCAzLjEgNCAyQzQgMC45IDMuMSAwIDIgMFpNOCA2QzYuOSA2IDYgNi45IDYgOEM2IDkuMSA2LjkgMTAgOCAxMEM5LjEgMTAgMTAgOS4xIDEwIDhDMTAgNi45IDkuMSA2IDggNlpNMiA2QzAuOSA2IDAgNi45IDAgOEMwIDkuMSAwLjkgMTAgMiAxMEMzLjEgMTAgNCA5LjEgNCA4QzQgNi45IDMuMSA2IDIgNlpNOCAxMkM2LjkgMTIgNiAxMi45IDYgMTRDNiAxNS4xIDYuOSAxNiA4IDE2QzkuMSAxNiAxMCAxNS4xIDEwIDE0QzEwIDEyLjkgOS4xIDEyIDggMTJaTTIgMTJDMC45IDEyIDAgMTIuOSAwIDE0QzAgMTUuMSAwLjkgMTYgMiAxNkMzLjEgMTYgNCAxNS4xIDQgMTRDNCAxMi45IDMuMSAxMiAyIDEyWlwiIC8+XG4gICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgICA8c3ZnXG4gICAgICAgICAgICAgICAgd2lkdGg9XCIxMFwiXG4gICAgICAgICAgICAgICAgaGVpZ2h0PVwiMjRcIlxuICAgICAgICAgICAgICAgIHZpZXdCb3g9XCIwIDAgMTAgMjRcIlxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5nZXRJY29uRm9jdXNDc3MoKX1cbiAgICAgICAgICAgICAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMTAgNUw1IDBMMCA1SDRWOUg2VjVIMTBaXCIgLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTYgMTlWMTVINFYxOUgwTDUgMjRMMTAgMTlINlpcIiAvPlxuICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17dGhpcy5jc3NDbGFzc2VzLml0ZW1JbmRleH0+e3RoaXMuaW5kZXhUZXh0fTwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3RoaXMuY3NzQ2xhc3Nlcy5jb250cm9sTGFiZWx9Pnt0aGlzLnRleHR9PC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxufVxuXG5SZWFjdFF1ZXN0aW9uRmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlclF1ZXN0aW9uKFwicmFua2luZ1wiLCAocHJvcHMpID0+IHtcbiAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3VydmV5UXVlc3Rpb25SYW5raW5nLCBwcm9wcyk7XG59KTtcbiIsImltcG9ydCAqIGFzIFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgU3VydmV5UXVlc3Rpb25FbGVtZW50QmFzZSB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fZWxlbWVudFwiO1xuaW1wb3J0IHsgU3VydmV5UXVlc3Rpb25Db21tZW50SXRlbSB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fY29tbWVudFwiO1xuaW1wb3J0IHsgUXVlc3Rpb25SYXRpbmdNb2RlbCwgUmVuZGVyZWRSYXRpbmdJdGVtIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBSZWFjdFF1ZXN0aW9uRmFjdG9yeSB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fZmFjdG9yeVwiO1xuXG5leHBvcnQgY2xhc3MgU3VydmV5UXVlc3Rpb25SYXRpbmcgZXh0ZW5kcyBTdXJ2ZXlRdWVzdGlvbkVsZW1lbnRCYXNlIHtcbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLmhhbmRsZU9uQ2xpY2sgPSB0aGlzLmhhbmRsZU9uQ2xpY2suYmluZCh0aGlzKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IHF1ZXN0aW9uKCk6IFF1ZXN0aW9uUmF0aW5nTW9kZWwge1xuICAgIHJldHVybiB0aGlzLnF1ZXN0aW9uQmFzZSBhcyBRdWVzdGlvblJhdGluZ01vZGVsO1xuICB9XG4gIGhhbmRsZU9uQ2xpY2soZXZlbnQ6IGFueSkge1xuICAgIHRoaXMucXVlc3Rpb24uc2V0VmFsdWVGcm9tQ2xpY2soZXZlbnQudGFyZ2V0LnZhbHVlKTtcbiAgICB0aGlzLnNldFN0YXRlKHsgdmFsdWU6IHRoaXMucXVlc3Rpb24udmFsdWUgfSk7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIHZhciBjc3NDbGFzc2VzID0gdGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzO1xuICAgIHZhciBtaW5UZXh0ID0gdGhpcy5xdWVzdGlvbi5taW5SYXRlRGVzY3JpcHRpb25cbiAgICAgID8gdGhpcy5yZW5kZXJMb2NTdHJpbmcodGhpcy5xdWVzdGlvbi5sb2NNaW5SYXRlRGVzY3JpcHRpb24pXG4gICAgICA6IG51bGw7XG4gICAgdmFyIG1heFRleHQgPSB0aGlzLnF1ZXN0aW9uLm1heFJhdGVEZXNjcmlwdGlvblxuICAgICAgPyB0aGlzLnJlbmRlckxvY1N0cmluZyh0aGlzLnF1ZXN0aW9uLmxvY01heFJhdGVEZXNjcmlwdGlvbilcbiAgICAgIDogbnVsbDtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9e3RoaXMucXVlc3Rpb24ucmF0aW5nUm9vdENzc30gcmVmPXsoZGl2KSA9PiAodGhpcy5zZXRDb250cm9sKGRpdikpfT5cbiAgICAgICAgPGZpZWxkc2V0IHJvbGU9XCJyYWRpb2dyb3VwXCI+XG4gICAgICAgICAgPGxlZ2VuZCByb2xlPVwicHJlc2VudGF0aW9uXCIgY2xhc3NOYW1lPXtcInN2LWhpZGRlblwifT48L2xlZ2VuZD5cbiAgICAgICAgICB7ISF0aGlzLnF1ZXN0aW9uLmhhc01pbkxhYmVsID8gPHNwYW4gY2xhc3NOYW1lPXtjc3NDbGFzc2VzLm1pblRleHR9PnttaW5UZXh0fTwvc3Bhbj46IG51bGx9XG4gICAgICAgICAge3RoaXMucXVlc3Rpb24ucmVuZGVyZWRSYXRlSXRlbXMubWFwKChpdGVtLCBpKSA9PiB0aGlzLnJlbmRlckl0ZW0oXCJ2YWx1ZVwiICsgaSwgaXRlbSwgaSwgY3NzQ2xhc3NlcykpfVxuICAgICAgICAgIHshIXRoaXMucXVlc3Rpb24uaGFzTWF4TGFiZWwgPyA8c3BhbiBjbGFzc05hbWU9e2Nzc0NsYXNzZXMubWF4VGV4dH0+e21heFRleHR9PC9zcGFuPjogbnVsbH1cbiAgICAgICAgPC9maWVsZHNldD5cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckl0ZW0oXG4gICAga2V5OiBzdHJpbmcsXG4gICAgaXRlbTogUmVuZGVyZWRSYXRpbmdJdGVtLFxuICAgIGluZGV4OiBudW1iZXIsXG4gICAgY3NzQ2xhc3NlczogYW55XG4gICk6IEpTWC5FbGVtZW50IHtcbiAgICB2YXIgaXRlbVRleHQgPSB0aGlzLnJlbmRlckxvY1N0cmluZyhpdGVtLmxvY1RleHQpO1xuICAgIHJldHVybiAoXG4gICAgICA8bGFiZWwga2V5PXtrZXl9IGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5nZXRJdGVtQ2xhc3MoaXRlbS5pdGVtVmFsdWUpfT5cbiAgICAgICAgPGlucHV0XG4gICAgICAgICAgdHlwZT1cInJhZGlvXCJcbiAgICAgICAgICBjbGFzc05hbWU9XCJzdi12aXN1YWxseWhpZGRlblwiXG4gICAgICAgICAgbmFtZT17dGhpcy5xdWVzdGlvbi5uYW1lfVxuICAgICAgICAgIGlkPXt0aGlzLnF1ZXN0aW9uLmdldElucHV0SWQoaW5kZXgpfVxuICAgICAgICAgIHZhbHVlPXtpdGVtLnZhbHVlfVxuICAgICAgICAgIGRpc2FibGVkPXt0aGlzLmlzRGlzcGxheU1vZGV9XG4gICAgICAgICAgY2hlY2tlZD17dGhpcy5xdWVzdGlvbi52YWx1ZSA9PSBpdGVtLnZhbHVlfVxuICAgICAgICAgIG9uQ2xpY2s9e3RoaXMuaGFuZGxlT25DbGlja31cbiAgICAgICAgICBvbkNoYW5nZT17KCk9Pnt9fVxuICAgICAgICAgIGFyaWEtcmVxdWlyZWQ9e3RoaXMucXVlc3Rpb24uYXJpYVJlcXVpcmVkfVxuICAgICAgICAgIGFyaWEtbGFiZWw9e3RoaXMucXVlc3Rpb24uYXJpYUxhYmVsfVxuICAgICAgICAgIGFyaWEtaW52YWxpZD17dGhpcy5xdWVzdGlvbi5hcmlhSW52YWxpZH1cbiAgICAgICAgICBhcmlhLWRlc2NyaWJlZGJ5PXt0aGlzLnF1ZXN0aW9uLmFyaWFEZXNjcmliZWRCeX1cbiAgICAgICAgLz5cbiAgICAgICAgPHNwYW4gY2xhc3NOYW1lPXtjc3NDbGFzc2VzLml0ZW1UZXh0fT57aXRlbVRleHR9PC9zcGFuPlxuICAgICAgPC9sYWJlbD5cbiAgICApO1xuICB9XG59XG5SZWFjdFF1ZXN0aW9uRmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlclF1ZXN0aW9uKFwicmF0aW5nXCIsIChwcm9wcykgPT4ge1xuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTdXJ2ZXlRdWVzdGlvblJhdGluZywgcHJvcHMpO1xufSk7XG4iLCJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFF1ZXN0aW9uVGFnYm94TW9kZWwsIERyb3Bkb3duTGlzdE1vZGVsLCBEcm9wZG93bk11bHRpU2VsZWN0TGlzdE1vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBSZWFjdFF1ZXN0aW9uRmFjdG9yeSB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fZmFjdG9yeVwiO1xuaW1wb3J0IHsgU3VydmV5UXVlc3Rpb25Ecm9wZG93bkJhc2UgfSBmcm9tIFwiLi9kcm9wZG93bi1iYXNlXCI7XG5pbXBvcnQgeyBTdXJ2ZXlRdWVzdGlvblRhZ2JveEl0ZW0gfSBmcm9tIFwiLi90YWdib3gtaXRlbVwiO1xuaW1wb3J0IHsgVGFnYm94RmlsdGVyU3RyaW5nIH0gZnJvbSBcIi4vdGFnYm94LWZpbHRlclwiO1xuXG5leHBvcnQgY2xhc3MgU3VydmV5UXVlc3Rpb25UYWdib3ggZXh0ZW5kcyBTdXJ2ZXlRdWVzdGlvbkRyb3Bkb3duQmFzZTxRdWVzdGlvblRhZ2JveE1vZGVsPiB7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gIH1cblxuICBwcm90ZWN0ZWQgcmVuZGVySXRlbShrZXk6IHN0cmluZywgaXRlbTogYW55KTogSlNYLkVsZW1lbnQge1xuICAgIGNvbnN0IHJlbmRlcmVkSXRlbSA9IChcbiAgICAgIDxTdXJ2ZXlRdWVzdGlvblRhZ2JveEl0ZW1cbiAgICAgICAga2V5PXtrZXl9XG4gICAgICAgIHF1ZXN0aW9uPXt0aGlzLnF1ZXN0aW9ufVxuICAgICAgICBpdGVtPXtpdGVtfVxuICAgICAgLz5cbiAgICApO1xuICAgIHJldHVybiByZW5kZXJlZEl0ZW07XG4gIH1cblxuICBwcm90ZWN0ZWQgcmVuZGVySW5wdXQoZHJvcGRvd25MaXN0TW9kZWw6IERyb3Bkb3duTGlzdE1vZGVsKTogSlNYLkVsZW1lbnQge1xuICAgIGNvbnN0IGRyb3Bkb3duTXVsdGlTZWxlY3RMaXN0TW9kZWwgPSBkcm9wZG93bkxpc3RNb2RlbCBhcyBEcm9wZG93bk11bHRpU2VsZWN0TGlzdE1vZGVsO1xuICAgIGNvbnN0IGl0ZW1zID0gdGhpcy5xdWVzdGlvbi5zZWxlY3RlZENob2ljZXMubWFwKChjaG9pY2UsIGluZGV4KSA9PiB7IHJldHVybiB0aGlzLnJlbmRlckl0ZW0oXCJpdGVtXCIgKyBpbmRleCwgY2hvaWNlKTsgfSk7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXZcbiAgICAgICAgaWQ9e3RoaXMucXVlc3Rpb24uaW5wdXRJZH1cbiAgICAgICAgY2xhc3NOYW1lPXt0aGlzLnF1ZXN0aW9uLmdldENvbnRyb2xDbGFzcygpfVxuICAgICAgICB0YWJJbmRleD17IGRyb3Bkb3duTGlzdE1vZGVsLmlucHV0UmVhZE9ubHkgPyB1bmRlZmluZWQgOiAwfVxuICAgICAgICBvbkNsaWNrPXt0aGlzLmNsaWNrfVxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1jb21tZW50XG4gICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgZGlzYWJsZWQ9e3RoaXMucXVlc3Rpb24uaXNJbnB1dFJlYWRPbmx5fVxuICAgICAgICByZXF1aXJlZD17dGhpcy5xdWVzdGlvbi5pc1JlcXVpcmVkfVxuICAgICAgICBvbktleURvd249e3RoaXMua2V5aGFuZGxlcn1cbiAgICAgICAgb25CbHVyPXt0aGlzLmJsdXJ9XG4gICAgICAgIHJvbGU9e3RoaXMucXVlc3Rpb24uYXJpYVJvbGV9XG4gICAgICAgIGFyaWEtcmVxdWlyZWQ9e3RoaXMucXVlc3Rpb24uYXJpYVJlcXVpcmVkfVxuICAgICAgICBhcmlhLWxhYmVsPXt0aGlzLnF1ZXN0aW9uLmFyaWFMYWJlbH1cbiAgICAgICAgYXJpYS1pbnZhbGlkPXt0aGlzLnF1ZXN0aW9uLmFyaWFJbnZhbGlkfVxuICAgICAgICBhcmlhLWRlc2NyaWJlZGJ5PXt0aGlzLnF1ZXN0aW9uLmFyaWFEZXNjcmliZWRCeX1cbiAgICAgID5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3RoaXMucXVlc3Rpb24uY3NzQ2xhc3Nlcy5jb250cm9sVmFsdWV9PlxuICAgICAgICAgIHtpdGVtc31cbiAgICAgICAgICA8VGFnYm94RmlsdGVyU3RyaW5nIG1vZGVsPXtkcm9wZG93bk11bHRpU2VsZWN0TGlzdE1vZGVsfSBxdWVzdGlvbj17dGhpcy5xdWVzdGlvbn0+PC9UYWdib3hGaWx0ZXJTdHJpbmc+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICB7dGhpcy5jcmVhdGVDbGVhckJ1dHRvbigpfVxuICAgICAgPC9kaXY+KTtcbiAgfVxuXG4gIHByb3RlY3RlZCByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICBjb25zdCBjc3NDbGFzc2VzID0gdGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzO1xuICAgIGNvbnN0IGNvbW1lbnQgPSB0aGlzLnF1ZXN0aW9uLmlzT3RoZXJTZWxlY3RlZCA/IHRoaXMucmVuZGVyT3RoZXIoY3NzQ2xhc3NlcykgOiBudWxsO1xuICAgIGNvbnN0IHNlbGVjdCA9IHRoaXMucmVuZGVyU2VsZWN0KGNzc0NsYXNzZXMpO1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5yZW5kZXJDc3NSb290fT5cbiAgICAgICAge3NlbGVjdH1cbiAgICAgICAge2NvbW1lbnR9XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG59XG5cblJlYWN0UXVlc3Rpb25GYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyUXVlc3Rpb24oXCJ0YWdib3hcIiwgKHByb3BzKSA9PiB7XG4gIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFN1cnZleVF1ZXN0aW9uVGFnYm94LCBwcm9wcyk7XG59KTsiLCJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFN1cnZleVF1ZXN0aW9uVW5jb250cm9sbGVkRWxlbWVudCB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fZWxlbWVudFwiO1xuaW1wb3J0IHsgUXVlc3Rpb25UZXh0TW9kZWwgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFJlYWN0UXVlc3Rpb25GYWN0b3J5IH0gZnJvbSBcIi4vcmVhY3RxdWVzdGlvbl9mYWN0b3J5XCI7XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlRdWVzdGlvblRleHQgZXh0ZW5kcyBTdXJ2ZXlRdWVzdGlvblVuY29udHJvbGxlZEVsZW1lbnQ8XG4gIFF1ZXN0aW9uVGV4dE1vZGVsXG4+IHtcbiAgLy9jb250cm9sUmVmOiBSZWFjdC5SZWZPYmplY3Q8SFRNTElucHV0RWxlbWVudD47XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgLy90aGlzLmNvbnRyb2xSZWYgPSBSZWFjdC5jcmVhdGVSZWYoKTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVySW5wdXQoKSB7XG4gICAgY29uc3QgaW5wdXRDbGFzcyA9ICh0aGlzLnF1ZXN0aW9uIGFzIFF1ZXN0aW9uVGV4dE1vZGVsKS5nZXRDb250cm9sQ2xhc3MoKTtcblxuICAgIGNvbnN0IHBsYWNlaG9sZGVyID0gdGhpcy5xdWVzdGlvbi5yZW5kZXJlZFBsYWNlaG9sZGVyO1xuICAgIGlmICh0aGlzLnF1ZXN0aW9uLmlzUmVhZE9ubHlSZW5kZXJEaXYoKSkge1xuICAgICAgcmV0dXJuIDxkaXY+e3RoaXMucXVlc3Rpb24udmFsdWV9PC9kaXY+O1xuICAgIH1cbiAgICByZXR1cm4gKFxuICAgICAgPGlucHV0XG4gICAgICAgIGlkPXt0aGlzLnF1ZXN0aW9uLmlucHV0SWR9XG4gICAgICAgIGRpc2FibGVkPXt0aGlzLmlzRGlzcGxheU1vZGV9XG4gICAgICAgIGNsYXNzTmFtZT17aW5wdXRDbGFzc31cbiAgICAgICAgdHlwZT17dGhpcy5xdWVzdGlvbi5pbnB1dFR5cGV9XG4gICAgICAgIC8vcmVmPXt0aGlzLmNvbnRyb2xSZWZ9XG4gICAgICAgIHJlZj17KGlucHV0KSA9PiAodGhpcy5zZXRDb250cm9sKGlucHV0KSl9XG4gICAgICAgIHN0eWxlPXt0aGlzLnF1ZXN0aW9uLmlucHV0U3R5bGV9XG4gICAgICAgIG1heExlbmd0aD17dGhpcy5xdWVzdGlvbi5nZXRNYXhMZW5ndGgoKX1cbiAgICAgICAgbWluPXt0aGlzLnF1ZXN0aW9uLnJlbmRlcmVkTWlufVxuICAgICAgICBtYXg9e3RoaXMucXVlc3Rpb24ucmVuZGVyZWRNYXh9XG4gICAgICAgIHN0ZXA9e3RoaXMucXVlc3Rpb24ucmVuZGVyZWRTdGVwfVxuICAgICAgICBzaXplPXt0aGlzLnF1ZXN0aW9uLmlucHV0U2l6ZX1cbiAgICAgICAgcGxhY2Vob2xkZXI9e3BsYWNlaG9sZGVyfVxuICAgICAgICBsaXN0PXt0aGlzLnF1ZXN0aW9uLmRhdGFMaXN0SWR9XG4gICAgICAgIGF1dG9Db21wbGV0ZT17dGhpcy5xdWVzdGlvbi5hdXRvY29tcGxldGV9XG4gICAgICAgIG9uQmx1cj17dGhpcy5xdWVzdGlvbi5vbkJsdXJ9XG4gICAgICAgIG9uQ2hhbmdlPXt0aGlzLnF1ZXN0aW9uLm9uQ2hhbmdlfVxuICAgICAgICBvbktleVVwPXt0aGlzLnF1ZXN0aW9uLm9uS2V5VXB9XG4gICAgICAgIG9uS2V5RG93bj17dGhpcy5xdWVzdGlvbi5vbktleURvd259XG4gICAgICAgIG9uQ29tcG9zaXRpb25VcGRhdGU9e3RoaXMucXVlc3Rpb24ub25Db21wb3NpdGlvblVwZGF0ZX1cbiAgICAgICAgYXJpYS1yZXF1aXJlZD17dGhpcy5xdWVzdGlvbi5hcmlhUmVxdWlyZWR9XG4gICAgICAgIGFyaWEtbGFiZWw9e3RoaXMucXVlc3Rpb24uYXJpYUxhYmVsfVxuICAgICAgICBhcmlhLWludmFsaWQ9e3RoaXMucXVlc3Rpb24uYXJpYUludmFsaWR9XG4gICAgICAgIGFyaWEtZGVzY3JpYmVkYnk9e3RoaXMucXVlc3Rpb24uYXJpYURlc2NyaWJlZEJ5fVxuICAgICAgLz5cbiAgICApO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5xdWVzdGlvbi5kYXRhTGlzdElkID9cbiAgICAgICAgPGRpdj5cbiAgICAgICAgICB7IHRoaXMucmVuZGVySW5wdXQoKSB9XG4gICAgICAgICAgeyB0aGlzLnJlbmRlckRhdGFMaXN0KCkgfVxuICAgICAgICA8L2Rpdj46XG4gICAgICAgIHRoaXMucmVuZGVySW5wdXQoKVxuICAgICk7XG4gIH1cbiAgcHJpdmF0ZSByZW5kZXJEYXRhTGlzdCgpOiBKU1guRWxlbWVudCB8IG51bGwge1xuICAgIGlmICghdGhpcy5xdWVzdGlvbi5kYXRhTGlzdElkKSByZXR1cm4gbnVsbDtcbiAgICB2YXIgaXRlbXMgPSB0aGlzLnF1ZXN0aW9uLmRhdGFMaXN0O1xuICAgIGlmIChpdGVtcy5sZW5ndGggPT0gMCkgcmV0dXJuIG51bGw7XG4gICAgdmFyIG9wdGlvbnM6QXJyYXk8SlNYLkVsZW1lbnQ+ID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpdGVtcy5sZW5ndGg7IGkrKykge1xuICAgICAgb3B0aW9ucy5wdXNoKDxvcHRpb24ga2V5PXtcIml0ZW1cIitpfSB2YWx1ZT17aXRlbXNbaV19Pjwvb3B0aW9uPik7XG4gICAgfVxuICAgIHJldHVybiA8ZGF0YWxpc3QgaWQ9e3RoaXMucXVlc3Rpb24uZGF0YUxpc3RJZH0+e29wdGlvbnN9PC9kYXRhbGlzdD47XG4gIH1cbiAgLy8gcHJvdGVjdGVkIHVwZGF0ZURvbUVsZW1lbnQoKSB7XG4gIC8vICAgdGhpcy5jb250cm9sID0gdGhpcy5jb250cm9sUmVmLmN1cnJlbnQ7XG4gIC8vICAgc3VwZXIudXBkYXRlRG9tRWxlbWVudCgpO1xuICAvLyB9XG59XG5cblJlYWN0UXVlc3Rpb25GYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyUXVlc3Rpb24oXCJ0ZXh0XCIsIChwcm9wcykgPT4ge1xuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTdXJ2ZXlRdWVzdGlvblRleHQsIHByb3BzKTtcbn0pO1xuIiwiaW1wb3J0IHsgU3VydmV5TW9kZWwsIFF1ZXN0aW9uTWF0cml4RHJvcGRvd25SZW5kZXJlZENlbGwsIFN1cnZleUVsZW1lbnQsIFF1ZXN0aW9uUm93TW9kZWwsIEl0ZW1WYWx1ZSwgUXVlc3Rpb25TZWxlY3RCYXNlIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBSZWFjdEVsZW1lbnRGYWN0b3J5IH0gZnJvbSBcIi4vZWxlbWVudC1mYWN0b3J5XCI7XG5cbmV4cG9ydCBjbGFzcyBSZWFjdFN1cnZleUVsZW1lbnRzV3JhcHBlciB7XG4gIHB1YmxpYyBzdGF0aWMgd3JhcFJvdyhzdXJ2ZXk6IFN1cnZleU1vZGVsLCBlbGVtZW50OiBKU1guRWxlbWVudCwgcm93OiBRdWVzdGlvblJvd01vZGVsKTogSlNYLkVsZW1lbnQge1xuICAgIGNvbnN0IGNvbXBvbmVudE5hbWUgPSBzdXJ2ZXkuZ2V0Um93V3JhcHBlckNvbXBvbmVudE5hbWUocm93KTtcbiAgICBjb25zdCBjb21wb25lbnREYXRhID0gc3VydmV5LmdldFJvd1dyYXBwZXJDb21wb25lbnREYXRhKHJvdyk7XG4gICAgcmV0dXJuIFJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UuY3JlYXRlRWxlbWVudChjb21wb25lbnROYW1lLCB7XG4gICAgICBlbGVtZW50LFxuICAgICAgcm93LFxuICAgICAgY29tcG9uZW50RGF0YSxcbiAgICB9KTtcbiAgfVxuICBwdWJsaWMgc3RhdGljIHdyYXBFbGVtZW50KHN1cnZleTogU3VydmV5TW9kZWwsIGVsZW1lbnQ6IEpTWC5FbGVtZW50LCBxdWVzdGlvbjogU3VydmV5RWxlbWVudCk6IEpTWC5FbGVtZW50IHtcbiAgICBjb25zdCBjb21wb25lbnROYW1lID0gc3VydmV5LmdldEVsZW1lbnRXcmFwcGVyQ29tcG9uZW50TmFtZShxdWVzdGlvbik7XG4gICAgY29uc3QgY29tcG9uZW50RGF0YSA9IHN1cnZleS5nZXRFbGVtZW50V3JhcHBlckNvbXBvbmVudERhdGEocXVlc3Rpb24pO1xuICAgIHJldHVybiBSZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLmNyZWF0ZUVsZW1lbnQoY29tcG9uZW50TmFtZSwge1xuICAgICAgZWxlbWVudCxcbiAgICAgIHF1ZXN0aW9uLFxuICAgICAgY29tcG9uZW50RGF0YSxcbiAgICB9KTtcbiAgfVxuICBwdWJsaWMgc3RhdGljIHdyYXBRdWVzdGlvbkNvbnRlbnQoc3VydmV5OiBTdXJ2ZXlNb2RlbCwgZWxlbWVudDogSlNYLkVsZW1lbnQsIHF1ZXN0aW9uOiBTdXJ2ZXlFbGVtZW50KTogSlNYLkVsZW1lbnQge1xuICAgIGNvbnN0IGNvbXBvbmVudE5hbWUgPSBzdXJ2ZXkuZ2V0UXVlc3Rpb25Db250ZW50V3JhcHBlckNvbXBvbmVudE5hbWUocXVlc3Rpb24pO1xuICAgIGNvbnN0IGNvbXBvbmVudERhdGEgPSBzdXJ2ZXkuZ2V0RWxlbWVudFdyYXBwZXJDb21wb25lbnREYXRhKHF1ZXN0aW9uKTtcbiAgICByZXR1cm4gUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5jcmVhdGVFbGVtZW50KGNvbXBvbmVudE5hbWUsIHtcbiAgICAgIGVsZW1lbnQsXG4gICAgICBxdWVzdGlvbixcbiAgICAgIGNvbXBvbmVudERhdGEsXG4gICAgfSk7XG4gIH1cbiAgcHVibGljIHN0YXRpYyB3cmFwSXRlbVZhbHVlKHN1cnZleTogU3VydmV5TW9kZWwsIGVsZW1lbnQ6IEpTWC5FbGVtZW50LCBxdWVzdGlvbjogUXVlc3Rpb25TZWxlY3RCYXNlLCBpdGVtOiBJdGVtVmFsdWUpOiBKU1guRWxlbWVudCB7XG4gICAgY29uc3QgY29tcG9uZW50TmFtZSA9IHN1cnZleS5nZXRJdGVtVmFsdWVXcmFwcGVyQ29tcG9uZW50TmFtZShpdGVtLCBxdWVzdGlvbik7XG4gICAgY29uc3QgY29tcG9uZW50RGF0YSA9IHN1cnZleS5nZXRJdGVtVmFsdWVXcmFwcGVyQ29tcG9uZW50RGF0YShpdGVtLCBxdWVzdGlvbik7XG4gICAgcmV0dXJuIFJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UuY3JlYXRlRWxlbWVudChjb21wb25lbnROYW1lLCB7XG4gICAgICBrZXk6IGVsZW1lbnQ/LmtleSxcbiAgICAgIGVsZW1lbnQsXG4gICAgICBxdWVzdGlvbixcbiAgICAgIGl0ZW0sXG4gICAgICBjb21wb25lbnREYXRhLFxuICAgIH0pO1xuICB9XG4gIHB1YmxpYyBzdGF0aWMgd3JhcE1hdHJpeENlbGwoc3VydmV5OiBTdXJ2ZXlNb2RlbCwgZWxlbWVudDogSlNYLkVsZW1lbnQsIGNlbGw6IFF1ZXN0aW9uTWF0cml4RHJvcGRvd25SZW5kZXJlZENlbGwsIHJlYXNvbjogc3RyaW5nID0gXCJjZWxsXCIpOiBKU1guRWxlbWVudCB7XG4gICAgY29uc3QgY29tcG9uZW50TmFtZSA9IHN1cnZleS5nZXRFbGVtZW50V3JhcHBlckNvbXBvbmVudE5hbWUoY2VsbCwgcmVhc29uKTtcbiAgICBjb25zdCBjb21wb25lbnREYXRhID0gc3VydmV5LmdldEVsZW1lbnRXcmFwcGVyQ29tcG9uZW50RGF0YShjZWxsLCByZWFzb24pO1xuICAgIHJldHVybiBSZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLmNyZWF0ZUVsZW1lbnQoY29tcG9uZW50TmFtZSwge1xuICAgICAgZWxlbWVudCxcbiAgICAgIGNlbGwsXG4gICAgICBjb21wb25lbnREYXRhLFxuICAgIH0pO1xuICB9XG59XG5cblN1cnZleU1vZGVsLnBsYXRmb3JtID0gXCJyZWFjdFwiO1xuIiwiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBCYXNlLCBTdXJ2ZXlUaW1lck1vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBTdmdJY29uIH0gZnJvbSBcIi4vY29tcG9uZW50cy9zdmctaWNvbi9zdmctaWNvblwiO1xuaW1wb3J0IHsgUmVhY3RTdXJ2ZXlFbGVtZW50IH0gZnJvbSBcIi4vcmVhY3RxdWVzdGlvbl9lbGVtZW50XCI7XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlUaW1lclBhbmVsIGV4dGVuZHMgUmVhY3RTdXJ2ZXlFbGVtZW50IHtcbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0U3RhdGVFbGVtZW50KCk6IEJhc2Uge1xuICAgIHJldHVybiB0aGlzLnRpbWVyTW9kZWw7XG4gIH1cbiAgcHJvdGVjdGVkIGdldCB0aW1lck1vZGVsKCk6IFN1cnZleVRpbWVyTW9kZWwge1xuICAgIHJldHVybiB0aGlzLnByb3BzLnRpbWVyTW9kZWw7XG4gIH1cbiAgcHJpdmF0ZSByZWFkb25seSBjaXJjbGVMZW5ndGggPSA0NDA7XG4gIHByaXZhdGUgZ2V0IHByb2dyZXNzKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIC10aGlzLnRpbWVyTW9kZWwucHJvZ3Jlc3MgKiB0aGlzLmNpcmNsZUxlbmd0aDtcbiAgfVxuICByZW5kZXIoKTogSlNYLkVsZW1lbnQge1xuICAgIGxldCByZXN1bHQgPSA8ZGl2IGNsYXNzTmFtZT17dGhpcy50aW1lck1vZGVsLnN1cnZleS5nZXRDc3MoKS50aW1lclJvb3R9Pnt0aGlzLnRpbWVyTW9kZWwudGV4dH08L2Rpdj47XG4gICAgaWYodGhpcy50aW1lck1vZGVsLnNob3dUaW1lckFzQ2xvY2spIHtcbiAgICAgIGxldCBzdHlsZSA9IHsgc3Ryb2tlRGFzaGFycmF5OiB0aGlzLmNpcmNsZUxlbmd0aCwgc3Ryb2tlRGFzaG9mZnNldDogdGhpcy5wcm9ncmVzcyB9O1xuICAgICAgcmVzdWx0ID1cbiAgICAgICg8ZGl2IGNsYXNzTmFtZT17dGhpcy50aW1lck1vZGVsLnJvb3RDc3N9PlxuICAgICAgICA8U3ZnSWNvbiBjbGFzc05hbWU9e3RoaXMudGltZXJNb2RlbC5nZXRQcm9ncmVzc0NzcygpfSBzdHlsZT17c3R5bGV9IGljb25OYW1lPXtcImljb24tdGltZXJjaXJjbGVcIn0gc2l6ZT17XCJhdXRvXCJ9PjwvU3ZnSWNvbj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3RoaXMudGltZXJNb2RlbC50ZXh0Q29udGFpbmVyQ3NzfT5cbiAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9e3RoaXMudGltZXJNb2RlbC5tYWpvclRleHRDc3N9Pnt0aGlzLnRpbWVyTW9kZWwuY2xvY2tNYWpvclRleHQgfTwvc3Bhbj5cbiAgICAgICAgICB7KHRoaXMudGltZXJNb2RlbC5jbG9ja01pbm9yVGV4dCA/IDxzcGFuIGNsYXNzTmFtZT17dGhpcy50aW1lck1vZGVsLm1pbm9yVGV4dENzc30+e3RoaXMudGltZXJNb2RlbC5jbG9ja01pbm9yVGV4dCB9PC9zcGFuPiA6IG51bGwpfVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2Pik7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbn1cbiIsImltcG9ydCAqIGFzIFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgSVN1cnZleUNyZWF0b3IgfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uXCI7XG5pbXBvcnQgeyBTdXJ2ZXlNb2RlbCwgUXVlc3Rpb24sIFF1ZXN0aW9uUm93TW9kZWwsIElFbGVtZW50LCBCYXNlIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBTdXJ2ZXlFbGVtZW50QmFzZSB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fZWxlbWVudFwiO1xuaW1wb3J0IHsgUmVhY3RFbGVtZW50RmFjdG9yeSB9IGZyb20gXCIuL2VsZW1lbnQtZmFjdG9yeVwiO1xuaW1wb3J0IHsgUmVhY3RTdXJ2ZXlFbGVtZW50c1dyYXBwZXIgfSBmcm9tIFwiLi9yZWFjdHN1cnZleW1vZGVsXCI7XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlSb3cgZXh0ZW5kcyBTdXJ2ZXlFbGVtZW50QmFzZTxhbnksIGFueT4ge1xuICBwcml2YXRlIHJvb3RSZWY6IFJlYWN0LlJlZk9iamVjdDxIVE1MRGl2RWxlbWVudD47XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgdGhpcy5yb290UmVmID0gUmVhY3QuY3JlYXRlUmVmKCk7XG4gICAgdGhpcy5yZWNhbGN1bGF0ZUNzcygpO1xuICB9XG4gIHByaXZhdGUgcmVjYWxjdWxhdGVDc3MoKSB7XG4gICAgdGhpcy5yb3cudmlzaWJsZUVsZW1lbnRzLm1hcChlbGVtZW50ID0+IChlbGVtZW50IGFzIFF1ZXN0aW9uKS5jc3NDbGFzc2VzKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0U3RhdGVFbGVtZW50KCk6IEJhc2Uge1xuICAgIHJldHVybiB0aGlzLnJvdztcbiAgfVxuICBwcml2YXRlIGdldCByb3coKTogUXVlc3Rpb25Sb3dNb2RlbCB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMucm93O1xuICB9XG4gIHByaXZhdGUgZ2V0IHN1cnZleSgpOiBTdXJ2ZXlNb2RlbCB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuc3VydmV5O1xuICB9XG4gIHByaXZhdGUgZ2V0IGNyZWF0b3IoKTogSVN1cnZleUNyZWF0b3Ige1xuICAgIHJldHVybiB0aGlzLnByb3BzLmNyZWF0b3I7XG4gIH1cbiAgcHJvdGVjdGVkIGdldCBjc3MoKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5jc3M7XG4gIH1cbiAgcHJvdGVjdGVkIGNhblJlbmRlcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISF0aGlzLnJvdyAmJiAhIXRoaXMuc3VydmV5ICYmICEhdGhpcy5jcmVhdG9yICYmIHRoaXMucm93LnZpc2libGU7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckVsZW1lbnRDb250ZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICBjb25zdCBlbGVtZW50cyA9IHRoaXMucm93LnZpc2libGVFbGVtZW50cy5tYXAoKGVsZW1lbnQsIGluZGV4KSA9PiB7XG4gICAgICBjb25zdCBpbm5lckVsZW1lbnQgPSB0aGlzLmNyZWF0ZUVsZW1lbnQoZWxlbWVudCwgaW5kZXgpO1xuICAgICAgY29uc3QgY3NzID0gKGVsZW1lbnQgYXMgUXVlc3Rpb24pLmNzc0NsYXNzZXNWYWx1ZTtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzc05hbWU9e2Nzcy5xdWVzdGlvbldyYXBwZXJ9XG4gICAgICAgICAgc3R5bGU9eyhlbGVtZW50IGFzIGFueSkucm9vdFN0eWxlfVxuICAgICAgICAgIGRhdGEta2V5PXtpbm5lckVsZW1lbnQua2V5fVxuICAgICAgICAgIGtleT17aW5uZXJFbGVtZW50LmtleX1cbiAgICAgICAgICBvbkZvY3VzPXsoZWxlbWVudCBhcyBRdWVzdGlvbikuZm9jdXNJbn1cbiAgICAgICAgPlxuICAgICAgICAgIHt0aGlzLnJvdy5pc05lZWRSZW5kZXIgPyBpbm5lckVsZW1lbnQgOiBSZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLmNyZWF0ZUVsZW1lbnQoZWxlbWVudC5za2VsZXRvbkNvbXBvbmVudE5hbWUsIHsgZWxlbWVudDogZWxlbWVudCwgY3NzOiB0aGlzLmNzcywgfSl9XG4gICAgICAgIDwvZGl2PlxuICAgICAgKTtcbiAgICB9KTtcblxuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IHJlZj17dGhpcy5yb290UmVmfSBjbGFzc05hbWU9e3RoaXMucm93LmdldFJvd0NzcygpfSA+XG4gICAgICAgIHtlbGVtZW50c31cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIGNvbnN0IHN1cnZleTogU3VydmV5TW9kZWwgPSB0aGlzLnN1cnZleSBhcyBTdXJ2ZXlNb2RlbDtcbiAgICBjb25zdCBjb250ZW50ID0gdGhpcy5yZW5kZXJFbGVtZW50Q29udGVudCgpO1xuICAgIGNvbnN0IHdyYXBwZXIgPSBSZWFjdFN1cnZleUVsZW1lbnRzV3JhcHBlci53cmFwUm93KHN1cnZleSwgY29udGVudCwgdGhpcy5yb3cpO1xuICAgIHJldHVybiB3cmFwcGVyIHx8IGNvbnRlbnQ7XG4gIH1cbiAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgc3VwZXIuY29tcG9uZW50RGlkTW91bnQoKTtcbiAgICB2YXIgZWwgPSB0aGlzLnJvb3RSZWYuY3VycmVudDtcbiAgICBpZiAoISFlbCAmJiAhdGhpcy5yb3cuaXNOZWVkUmVuZGVyKSB7XG4gICAgICB2YXIgcm93Q29udGFpbmVyRGl2ID0gZWw7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5yb3cuc3RhcnRMYXp5UmVuZGVyaW5nKHJvd0NvbnRhaW5lckRpdik7XG4gICAgICB9LCAxMCk7XG4gICAgfVxuICB9XG4gIHB1YmxpYyBzaG91bGRDb21wb25lbnRVcGRhdGUobmV4dFByb3BzOiBhbnksIG5leHRTdGF0ZTogYW55KTogYm9vbGVhbiB7XG4gICAgaWYgKCFzdXBlci5zaG91bGRDb21wb25lbnRVcGRhdGUobmV4dFByb3BzLCBuZXh0U3RhdGUpKSByZXR1cm4gZmFsc2U7XG5cbiAgICBpZiAobmV4dFByb3BzLnJvdyAhPT0gdGhpcy5yb3cpIHtcbiAgICAgIG5leHRQcm9wcy5yb3cuaXNOZWVkUmVuZGVyID0gdGhpcy5yb3cuaXNOZWVkUmVuZGVyO1xuICAgICAgdGhpcy5zdG9wTGF6eVJlbmRlcmluZygpO1xuICAgIH1cbiAgICB0aGlzLnJlY2FsY3VsYXRlQ3NzKCk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcHJpdmF0ZSBzdG9wTGF6eVJlbmRlcmluZygpIHtcbiAgICB0aGlzLnJvdy5zdG9wTGF6eVJlbmRlcmluZygpO1xuICAgIHRoaXMucm93LmlzTmVlZFJlbmRlciA9ICF0aGlzLnJvdy5pc0xhenlSZW5kZXJpbmcoKTtcbiAgfVxuICBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICBzdXBlci5jb21wb25lbnRXaWxsVW5tb3VudCgpO1xuICAgIHRoaXMuc3RvcExhenlSZW5kZXJpbmcoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBjcmVhdGVFbGVtZW50KGVsZW1lbnQ6IElFbGVtZW50LCBlbGVtZW50SW5kZXg/OiBudW1iZXIpOiBKU1guRWxlbWVudCB7XG4gICAgY29uc3QgaW5kZXggPSBlbGVtZW50SW5kZXggPyBcIi1cIiArIGVsZW1lbnRJbmRleCA6IDA7XG4gICAgdmFyIGVsZW1lbnRUeXBlID0gZWxlbWVudC5nZXRUeXBlKCk7XG4gICAgaWYgKCFSZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLmlzRWxlbWVudFJlZ2lzdGVyZWQoZWxlbWVudFR5cGUpKSB7XG4gICAgICBlbGVtZW50VHlwZSA9IFwicXVlc3Rpb25cIjtcbiAgICB9XG4gICAgcmV0dXJuIFJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UuY3JlYXRlRWxlbWVudChlbGVtZW50VHlwZSwge1xuICAgICAga2V5OiBlbGVtZW50Lm5hbWUgKyBpbmRleCxcbiAgICAgIGVsZW1lbnQ6IGVsZW1lbnQsXG4gICAgICBjcmVhdG9yOiB0aGlzLmNyZWF0b3IsXG4gICAgICBzdXJ2ZXk6IHRoaXMuc3VydmV5LFxuICAgICAgY3NzOiB0aGlzLmNzcyxcbiAgICB9KTtcbiAgfVxufVxuIiwiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBTdXJ2ZXlRdWVzdGlvbkVsZW1lbnRCYXNlIH0gZnJvbSBcIi4vcmVhY3RxdWVzdGlvbl9lbGVtZW50XCI7XG5pbXBvcnQgeyBRdWVzdGlvblNpZ25hdHVyZVBhZE1vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBSZWFjdFF1ZXN0aW9uRmFjdG9yeSB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fZmFjdG9yeVwiO1xuaW1wb3J0IHsgU3ZnSWNvbiB9IGZyb20gXCIuL2NvbXBvbmVudHMvc3ZnLWljb24vc3ZnLWljb25cIjtcblxuZXhwb3J0IGNsYXNzIFN1cnZleVF1ZXN0aW9uU2lnbmF0dXJlUGFkIGV4dGVuZHMgU3VydmV5UXVlc3Rpb25FbGVtZW50QmFzZSB7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgdGhpcy5zdGF0ZSA9IHsgdmFsdWU6IHRoaXMucXVlc3Rpb24udmFsdWUgfTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IHF1ZXN0aW9uKCk6IFF1ZXN0aW9uU2lnbmF0dXJlUGFkTW9kZWwge1xuICAgIHJldHVybiB0aGlzLnF1ZXN0aW9uQmFzZSBhcyBRdWVzdGlvblNpZ25hdHVyZVBhZE1vZGVsO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICB2YXIgY3NzQ2xhc3NlcyA9IHRoaXMucXVlc3Rpb24uY3NzQ2xhc3NlcztcbiAgICB2YXIgY2xlYXJCdXR0b24gPSB0aGlzLnJlbmRlckNsZWFuQnV0dG9uKCk7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtjc3NDbGFzc2VzLnJvb3R9IHJlZj17KHJvb3QpID0+ICh0aGlzLnNldENvbnRyb2wocm9vdCkpfSBzdHlsZT17eyBoZWlnaHQ6IHRoaXMucXVlc3Rpb24uc2lnbmF0dXJlSGVpZ2h0LCB3aWR0aDogdGhpcy5xdWVzdGlvbi5zaWduYXR1cmVXaWR0aCB9fT5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzTmFtZT17Y3NzQ2xhc3Nlcy5wbGFjZWhvbGRlcn1cbiAgICAgICAgICBzdHlsZT17eyBkaXNwbGF5OiB0aGlzLnF1ZXN0aW9uLm5lZWRTaG93UGxhY2Vob2xkZXIoKSA/IFwiXCIgOiBcIm5vbmVcIiB9fVxuICAgICAgICA+XG4gICAgICAgICAge3RoaXMucXVlc3Rpb24ucGxhY2VIb2xkZXJUZXh0fVxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdj5cbiAgICAgICAgICA8Y2FudmFzIHRhYkluZGV4PXswfT48L2NhbnZhcz5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIHtjbGVhckJ1dHRvbn1cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cblxuICByZW5kZXJDbGVhbkJ1dHRvbigpOiBKU1guRWxlbWVudCB8IG51bGwge1xuICAgIGlmKCF0aGlzLnF1ZXN0aW9uLmNhblNob3dDbGVhckJ1dHRvbikgcmV0dXJuIG51bGw7XG5cbiAgICB2YXIgY3NzQ2xhc3NlcyA9IHRoaXMucXVlc3Rpb24uY3NzQ2xhc3NlcztcbiAgICByZXR1cm4gPGRpdiBjbGFzc05hbWU9e2Nzc0NsYXNzZXMuY29udHJvbHN9PlxuICAgICAgPGJ1dHRvblxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgY2xhc3NOYW1lPXtjc3NDbGFzc2VzLmNsZWFyQnV0dG9ufVxuICAgICAgICB0aXRsZT17dGhpcy5xdWVzdGlvbi5jbGVhckJ1dHRvbkNhcHRpb259XG4gICAgICAgIG9uQ2xpY2s9eygpID0+IHRoaXMucXVlc3Rpb24uY2xlYXJWYWx1ZSgpfVxuICAgICAgPlxuICAgICAgICB7dGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLmNsZWFyQnV0dG9uSWNvbklkID8gPFN2Z0ljb24gaWNvbk5hbWU9e3RoaXMucXVlc3Rpb24uY3NzQ2xhc3Nlcy5jbGVhckJ1dHRvbkljb25JZH0gc2l6ZT17XCJhdXRvXCJ9PjwvU3ZnSWNvbj4gOiA8c3Bhbj7inJY8L3NwYW4+fVxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+O1xuICB9XG59XG5cblJlYWN0UXVlc3Rpb25GYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyUXVlc3Rpb24oXCJzaWduYXR1cmVwYWRcIiwgKHByb3BzKSA9PiB7XG4gIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFN1cnZleVF1ZXN0aW9uU2lnbmF0dXJlUGFkLCBwcm9wcyk7XG59KTtcbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcclxuaW1wb3J0IHsgTG9jYWxpemFibGVTdHJpbmcgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcclxuaW1wb3J0IHsgUmVhY3RFbGVtZW50RmFjdG9yeSB9IGZyb20gXCIuL2VsZW1lbnQtZmFjdG9yeVwiO1xyXG5cclxuZXhwb3J0IGNsYXNzIFN1cnZleUxvY1N0cmluZ0VkaXRvciBleHRlbmRzIFJlYWN0LkNvbXBvbmVudDxhbnksIGFueT4ge1xyXG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcclxuICAgIHN1cGVyKHByb3BzKTtcclxuICAgIHRoaXMuc3RhdGUgPSB7IGNoYW5nZWQ6IDAgfTtcclxuICB9XHJcbiAgcHJpdmF0ZSBnZXQgbG9jU3RyKCk6IExvY2FsaXphYmxlU3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLnByb3BzLmxvY1N0cjtcclxuICB9XHJcbiAgcHJpdmF0ZSBnZXQgc3R5bGUoKTogYW55IHtcclxuICAgIHJldHVybiB0aGlzLnByb3BzLnN0eWxlO1xyXG4gIH1cclxuICBjb21wb25lbnREaWRNb3VudCgpIHtcclxuICAgIGlmICghdGhpcy5sb2NTdHIpIHJldHVybjtcclxuICAgIHZhciBzZWxmID0gdGhpcztcclxuICAgIHRoaXMubG9jU3RyLm9uQ2hhbmdlZCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgc2VsZi5zZXRTdGF0ZSh7IGNoYW5nZWQ6IHNlbGYuc3RhdGUuY2hhbmdlZCArIDEgfSk7XHJcbiAgICB9O1xyXG4gIH1cclxuICBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcclxuICAgIGlmICghdGhpcy5sb2NTdHIpIHJldHVybjtcclxuICAgIHRoaXMubG9jU3RyLm9uQ2hhbmdlZCA9IGZ1bmN0aW9uICgpIHt9O1xyXG4gIH1cclxuICBvbklucHV0ID0gKGV2ZW50OiBhbnkpID0+IHtcclxuICAgIHRoaXMubG9jU3RyLnRleHQgPSBldmVudC50YXJnZXQuaW5uZXJUZXh0O1xyXG4gIH07XHJcbiAgb25DbGljayA9IChldmVudDogYW55KSA9PiB7XHJcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgfTtcclxuICByZW5kZXIoKTogSlNYLkVsZW1lbnQgfCBudWxsIHtcclxuICAgIGlmICghdGhpcy5sb2NTdHIpIHtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5sb2NTdHIuaGFzSHRtbCkge1xyXG4gICAgICBjb25zdCBodG1sVmFsdWUgPSB7IF9faHRtbDogdGhpcy5sb2NTdHIucmVuZGVyZWRIdG1sIH07XHJcbiAgICAgIHJldHVybiAoXHJcbiAgICAgICAgPHNwYW5cclxuICAgICAgICAgIGNsYXNzTmFtZT1cInN2LXN0cmluZy1lZGl0b3JcIlxyXG4gICAgICAgICAgY29udGVudEVkaXRhYmxlPVwidHJ1ZVwiXHJcbiAgICAgICAgICBzdXBwcmVzc0NvbnRlbnRFZGl0YWJsZVdhcm5pbmc9e3RydWV9XHJcbiAgICAgICAgICBzdHlsZT17dGhpcy5zdHlsZX1cclxuICAgICAgICAgIGRhbmdlcm91c2x5U2V0SW5uZXJIVE1MPXtodG1sVmFsdWV9XHJcbiAgICAgICAgICBvbkJsdXI9e3RoaXMub25JbnB1dH1cclxuICAgICAgICAgIG9uQ2xpY2s9e3RoaXMub25DbGlja31cclxuICAgICAgICAvPlxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIChcclxuICAgICAgPHNwYW5cclxuICAgICAgICBjbGFzc05hbWU9XCJzdi1zdHJpbmctZWRpdG9yXCJcclxuICAgICAgICBjb250ZW50RWRpdGFibGU9XCJ0cnVlXCJcclxuICAgICAgICBzdXBwcmVzc0NvbnRlbnRFZGl0YWJsZVdhcm5pbmc9e3RydWV9XHJcbiAgICAgICAgc3R5bGU9e3RoaXMuc3R5bGV9XHJcbiAgICAgICAgb25CbHVyPXt0aGlzLm9uSW5wdXR9XHJcbiAgICAgICAgb25DbGljaz17dGhpcy5vbkNsaWNrfVxyXG4gICAgICA+XHJcbiAgICAgICAge3RoaXMubG9jU3RyLnJlbmRlcmVkSHRtbH1cclxuICAgICAgPC9zcGFuPlxyXG4gICAgKTtcclxuICB9XHJcbn1cclxuXHJcblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFxyXG4gIExvY2FsaXphYmxlU3RyaW5nLmVkaXRhYmxlUmVuZGVyZXIsXHJcbiAgKHByb3BzKSA9PiB7XHJcbiAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTdXJ2ZXlMb2NTdHJpbmdFZGl0b3IsIHByb3BzKTtcclxuICB9XHJcbik7XHJcbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcclxuaW1wb3J0IHsgTG9jYWxpemFibGVTdHJpbmcgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcclxuaW1wb3J0IHsgUmVhY3RFbGVtZW50RmFjdG9yeSB9IGZyb20gXCIuL2VsZW1lbnQtZmFjdG9yeVwiO1xyXG5cclxuZXhwb3J0IGNsYXNzIFN1cnZleUxvY1N0cmluZ1ZpZXdlciBleHRlbmRzIFJlYWN0LkNvbXBvbmVudDxhbnksIGFueT4ge1xyXG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcclxuICAgIHN1cGVyKHByb3BzKTtcclxuICAgIHRoaXMucm9vdFJlZiA9IFJlYWN0LmNyZWF0ZVJlZigpO1xyXG4gIH1cclxuICBwcml2YXRlIHJvb3RSZWY6IFJlYWN0LlJlZk9iamVjdDxIVE1MU3BhbkVsZW1lbnQ+O1xyXG4gIHByaXZhdGUgZ2V0IGxvY1N0cigpOiBMb2NhbGl6YWJsZVN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5sb2NTdHI7XHJcbiAgfVxyXG4gIHByaXZhdGUgZ2V0IHN0eWxlKCk6IGFueSB7XHJcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5zdHlsZTtcclxuICB9XHJcbiAgY29tcG9uZW50RGlkTW91bnQoKSB7XHJcbiAgICB0aGlzLnJlYWN0T25TdHJDaGFuZ2VkKCk7XHJcbiAgfVxyXG4gIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xyXG4gICAgaWYgKCF0aGlzLmxvY1N0cikgcmV0dXJuO1xyXG4gICAgdGhpcy5sb2NTdHIub25TdHJpbmdDaGFuZ2VkLnJlbW92ZSh0aGlzLm9uQ2hhbmdlZEhhbmRsZXIpO1xyXG4gIH1cclxuICBjb21wb25lbnREaWRVcGRhdGUocHJldlByb3BzOiBhbnksIHByZXZTdGF0ZTogYW55KSB7XHJcbiAgICBpZighIXByZXZQcm9wcy5sb2NTdHIpIHtcclxuICAgICAgdGhpcy5sb2NTdHIub25TdHJpbmdDaGFuZ2VkLnJlbW92ZSh0aGlzLm9uQ2hhbmdlZEhhbmRsZXIpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5yZWFjdE9uU3RyQ2hhbmdlZCgpO1xyXG4gIH1cclxuICBwcml2YXRlIGlzUmVuZGVyaW5nOiBib29sZWFuO1xyXG4gIHByaXZhdGUgb25DaGFuZ2VkSGFuZGxlciA9IChzZW5kZXI6IGFueSwgb3B0aW9uczogYW55KSA9PiB7XHJcbiAgICBpZih0aGlzLmlzUmVuZGVyaW5nKSByZXR1cm47XHJcbiAgICB0aGlzLnNldFN0YXRlKHsgY2hhbmdlZDogISF0aGlzLnN0YXRlICYmIHRoaXMuc3RhdGUuY2hhbmdlZCA/IHRoaXMuc3RhdGUuY2hhbmdlZCArIDEgOiAxIH0pO1xyXG4gIH1cclxuICBwcml2YXRlIHJlYWN0T25TdHJDaGFuZ2VkKCkge1xyXG4gICAgaWYgKCF0aGlzLmxvY1N0cikgcmV0dXJuO1xyXG4gICAgdGhpcy5sb2NTdHIub25TdHJpbmdDaGFuZ2VkLmFkZCh0aGlzLm9uQ2hhbmdlZEhhbmRsZXIpO1xyXG4gIH1cclxuICByZW5kZXIoKTogSlNYLkVsZW1lbnQgfCBudWxsIHtcclxuICAgIGlmICghdGhpcy5sb2NTdHIpIHJldHVybiBudWxsO1xyXG4gICAgdGhpcy5pc1JlbmRlcmluZyA9IHRydWU7XHJcbiAgICBjb25zdCBzdHJFbCA9IHRoaXMucmVuZGVyU3RyaW5nKCk7XHJcbiAgICB0aGlzLmlzUmVuZGVyaW5nID0gZmFsc2U7XHJcbiAgICByZXR1cm4gc3RyRWw7XHJcbiAgfVxyXG4gIHByb3RlY3RlZCByZW5kZXJTdHJpbmcoKTogSlNYLkVsZW1lbnQge1xyXG4gICAgaWYgKHRoaXMubG9jU3RyLmhhc0h0bWwpIHtcclxuICAgICAgbGV0IGh0bWxWYWx1ZSA9IHsgX19odG1sOiB0aGlzLmxvY1N0ci5yZW5kZXJlZEh0bWwgfTtcclxuICAgICAgcmV0dXJuIDxzcGFuIHJlZj17dGhpcy5yb290UmVmfSBjbGFzc05hbWU9XCJzdi1zdHJpbmctdmlld2VyXCIgc3R5bGU9e3RoaXMuc3R5bGV9IGRhbmdlcm91c2x5U2V0SW5uZXJIVE1MPXtodG1sVmFsdWV9IC8+O1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIDxzcGFuIHJlZj17dGhpcy5yb290UmVmfSBjbGFzc05hbWU9XCJzdi1zdHJpbmctdmlld2VyXCIgc3R5bGU9e3RoaXMuc3R5bGV9Pnt0aGlzLmxvY1N0ci5yZW5kZXJlZEh0bWx9PC9zcGFuPjtcclxuICB9XHJcbn1cclxuXHJcblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFxyXG4gIExvY2FsaXphYmxlU3RyaW5nLmRlZmF1bHRSZW5kZXJlcixcclxuICAocHJvcHMpID0+IHtcclxuICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFN1cnZleUxvY1N0cmluZ1ZpZXdlciwgcHJvcHMpO1xyXG4gIH1cclxuKTtcclxuIiwiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBEcm9wZG93bk11bHRpU2VsZWN0TGlzdE1vZGVsLCBRdWVzdGlvblRhZ2JveE1vZGVsLCBIZWxwZXJzIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBSZWFjdFF1ZXN0aW9uRmFjdG9yeSB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fZmFjdG9yeVwiO1xuaW1wb3J0IHsgU3VydmV5RWxlbWVudEJhc2UgfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uX2VsZW1lbnRcIjtcblxuaW50ZXJmYWNlIElUYWdib3hGaWx0ZXJQcm9wcyB7XG4gIG1vZGVsOiBEcm9wZG93bk11bHRpU2VsZWN0TGlzdE1vZGVsO1xuICBxdWVzdGlvbjogUXVlc3Rpb25UYWdib3hNb2RlbDtcbn1cblxuZXhwb3J0IGNsYXNzIFRhZ2JveEZpbHRlclN0cmluZyBleHRlbmRzIFN1cnZleUVsZW1lbnRCYXNlPElUYWdib3hGaWx0ZXJQcm9wcywgYW55PiB7XG4gIGlucHV0RWxlbWVudDogSFRNTElucHV0RWxlbWVudCB8IG51bGw7XG5cbiAgZ2V0IG1vZGVsKCk6IERyb3Bkb3duTXVsdGlTZWxlY3RMaXN0TW9kZWwge1xuICAgIHJldHVybiB0aGlzLnByb3BzLm1vZGVsO1xuICB9XG4gIGdldCBxdWVzdGlvbigpOiBRdWVzdGlvblRhZ2JveE1vZGVsIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5xdWVzdGlvbjtcbiAgfVxuICBjb21wb25lbnREaWRVcGRhdGUocHJldlByb3BzOiBhbnksIHByZXZTdGF0ZTogYW55KSB7XG4gICAgc3VwZXIuY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wcywgcHJldlN0YXRlKTtcbiAgICB0aGlzLnVwZGF0ZURvbUVsZW1lbnQoKTtcbiAgfVxuICBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICBzdXBlci5jb21wb25lbnREaWRNb3VudCgpO1xuICAgIHRoaXMudXBkYXRlRG9tRWxlbWVudCgpO1xuICB9XG4gIHVwZGF0ZURvbUVsZW1lbnQoKSB7XG4gICAgaWYgKCEhdGhpcy5pbnB1dEVsZW1lbnQpIHtcbiAgICAgIGNvbnN0IGNvbnRyb2w6IGFueSA9IHRoaXMuaW5wdXRFbGVtZW50O1xuICAgICAgY29uc3QgbmV3VmFsdWUgPSB0aGlzLm1vZGVsLmZpbHRlclN0cmluZztcbiAgICAgIGlmICghSGVscGVycy5pc1R3b1ZhbHVlRXF1YWxzKG5ld1ZhbHVlLCBjb250cm9sLnZhbHVlKSkge1xuICAgICAgICBjb250cm9sLnZhbHVlID0gdGhpcy5tb2RlbC5maWx0ZXJTdHJpbmc7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIG9uQ2hhbmdlKGU6IGFueSkge1xuICAgIGlmIChlLnRhcmdldCA9PT0gZG9jdW1lbnQuYWN0aXZlRWxlbWVudCkge1xuICAgICAgdGhpcy5tb2RlbC5maWx0ZXJTdHJpbmcgPSBlLnRhcmdldC52YWx1ZTtcbiAgICB9XG4gIH1cbiAga2V5aGFuZGxlcihlOiBhbnkpIHtcbiAgICB0aGlzLm1vZGVsLmlucHV0S2V5SGFuZGxlcihlKTtcbiAgfVxuICBvbkJsdXIoZTogYW55KSB7XG4gICAgdGhpcy5tb2RlbC5vbkJsdXIoZSk7XG4gIH1cblxuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICB9XG4gIGdldFN0YXRlRWxlbWVudCgpIHtcbiAgICByZXR1cm4gdGhpcy5tb2RlbDtcbiAgfVxuICByZW5kZXIoKTogSlNYLkVsZW1lbnQge1xuICAgIHJldHVybiAoPGlucHV0IHR5cGU9XCJ0ZXh0XCIgYXV0b0NvbXBsZXRlPVwib2ZmXCJcbiAgICAgIGlkPXt0aGlzLnF1ZXN0aW9uLmdldElucHV0SWQoKX1cbiAgICAgIHJlZj17KGVsZW1lbnQpID0+ICh0aGlzLmlucHV0RWxlbWVudCA9IGVsZW1lbnQpfVxuICAgICAgY2xhc3NOYW1lPXt0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMuZmlsdGVyU3RyaW5nSW5wdXR9XG4gICAgICBkaXNhYmxlZD17dGhpcy5xdWVzdGlvbi5pc0lucHV0UmVhZE9ubHl9XG4gICAgICByZWFkT25seT17IXRoaXMubW9kZWwuc2VhcmNoRW5hYmxlZCA/IHRydWUgOiB1bmRlZmluZWR9XG4gICAgICBzaXplPXshdGhpcy5tb2RlbC5maWx0ZXJTdHJpbmcgPyAxIDogdW5kZWZpbmVkfVxuICAgICAgYXJpYS1sYWJlbD17dGhpcy5xdWVzdGlvbi5wbGFjZWhvbGRlcn1cbiAgICAgIHBsYWNlaG9sZGVyPXt0aGlzLm1vZGVsLmZpbHRlclN0cmluZ1BsYWNlaG9sZGVyfVxuICAgICAgb25LZXlEb3duPXsoZSkgPT4geyB0aGlzLmtleWhhbmRsZXIoZSk7IH19XG4gICAgICBvbkNoYW5nZT17KGUpID0+IHsgdGhpcy5vbkNoYW5nZShlKTsgfX1cbiAgICAgIG9uQmx1cj17KGUpID0+IHsgdGhpcy5vbkJsdXIoZSk7IH19XG4gICAgPjwvaW5wdXQ+KTtcbiAgfVxufVxuXG5SZWFjdFF1ZXN0aW9uRmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlclF1ZXN0aW9uKFwic3YtdGFnYm94LWZpbHRlclwiLCAocHJvcHMpID0+IHtcbiAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoVGFnYm94RmlsdGVyU3RyaW5nLCBwcm9wcyk7XG59KTsiLCJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFJlYWN0U3VydmV5RWxlbWVudCB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fZWxlbWVudFwiO1xuaW1wb3J0IHsgQmFzZSwgUXVlc3Rpb25UYWdib3hNb2RlbCwgSXRlbVZhbHVlIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBTdmdJY29uIH0gZnJvbSBcIi4vY29tcG9uZW50cy9zdmctaWNvbi9zdmctaWNvblwiO1xuXG5leHBvcnQgY2xhc3MgU3VydmV5UXVlc3Rpb25UYWdib3hJdGVtIGV4dGVuZHMgUmVhY3RTdXJ2ZXlFbGVtZW50IHtcbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0U3RhdGVFbGVtZW50KCk6IEJhc2Uge1xuICAgIHJldHVybiB0aGlzLml0ZW07XG4gIH1cbiAgcHJvdGVjdGVkIGdldCBxdWVzdGlvbigpOiBRdWVzdGlvblRhZ2JveE1vZGVsIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5xdWVzdGlvbjtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IGl0ZW0oKTogSXRlbVZhbHVlIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5pdGVtO1xuICB9XG4gIHByb3RlY3RlZCBjYW5SZW5kZXIoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhdGhpcy5pdGVtICYmICEhdGhpcy5xdWVzdGlvbjtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyRWxlbWVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgY29uc3QgdGV4dCA9IHRoaXMucmVuZGVyTG9jU3RyaW5nKHRoaXMuaXRlbS5sb2NUZXh0KTtcblxuICAgIGNvbnN0IHJlbW92ZUl0ZW0gPSAoZXZlbnQ6IGFueSkgPT4ge1xuICAgICAgdGhpcy5xdWVzdGlvbi5kcm9wZG93bkxpc3RNb2RlbC5kZXNlbGVjdEl0ZW0odGhpcy5pdGVtLnZhbHVlKTtcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIH07XG5cbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdi10YWdib3hfX2l0ZW1cIj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdi10YWdib3hfX2l0ZW0tdGV4dFwiPnt0ZXh0fTwvZGl2PlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3NOYW1lPXsgdGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLmNsZWFuSXRlbUJ1dHRvbn1cbiAgICAgICAgICBvbkNsaWNrPXtyZW1vdmVJdGVtfVxuICAgICAgICA+XG4gICAgICAgICAgPFN2Z0ljb25cbiAgICAgICAgICAgIGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLmNsZWFuSXRlbUJ1dHRvblN2Z31cbiAgICAgICAgICAgIGljb25OYW1lPXt0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMuY2xlYW5JdGVtQnV0dG9uSWNvbklkfVxuICAgICAgICAgICAgc2l6ZT17MTZ9XG4gICAgICAgICAgPjwvU3ZnSWNvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG59IiwiLyoqXG4gKiBHbG9iYWwgc3VydmV5IHNldHRpbmdzXG4gKi9cbmV4cG9ydCB2YXIgc2V0dGluZ3MgPSB7XG4gIC8qKlxuICAgKiBPcHRpb25zIGZvciBTdXJ2ZXlKUyBjb21wYXJhdG9yLiBCeSBkZWZhdWx0IHdlIHRyaW0gc3RyaW5ncyBhbmQgY29tcGFyZSB0aGVtIGFzIGNhc2UgaW5zZW5zaXRpdmUuIFRvIGNoYW5nZSB0aGUgYmVoYXZpb3IgeW91IGNhbiB1c2UgZm9sbG93aW5nIGNvZGU6XG4gICAqIHNldHRpbmdzLmNvbXBhcmF0b3IudHJpbVN0cmluZ3MgPSBmYWxzZTsgLy9cImFiYyBcIiB3aWxsIG5vdCBlcXVhbCB0byBcImFiY1wiLiBUaGV5IGFyZSBlcXVhbCBieSBkZWZhdWx0LlxuICAgKiBzZXR0aW5ncy5jb21wYXJhdG9yLmNhc2VTZW5zaXRpdmUgPSB0cnVlOyAvL1wiYWJjIFwiIHdpbGwgbm90IGVxdWFsIHRvIFwiQWJjXCIuIFRoZXkgYXJlIGVxdWFsIGJ5IGRlZmF1bHQuXG4gICAqL1xuICBjb21wYXJhdG9yOiB7XG4gICAgdHJpbVN0cmluZ3M6IHRydWUsXG4gICAgY2FzZVNlbnNpdGl2ZTogZmFsc2VcbiAgfSxcbiAgZXhwcmVzc2lvbkRpc2FibGVDb252ZXJzaW9uQ2hhcjogXCIjXCIsXG4gIC8qKlxuICAgKiBTZXQgdGhpcyB2YWx1ZSB0byBmYWxzZSwgaWYgeW91IHdhbnQgdG8gaGF2ZSBVVEMgZnVjdGlvbnMsIGZvciBleGFtcGxlIHNldFVUQ0hvdXJzIGluc2lkZSBvdXIgZnVuY3Rpb25zLCBsaWtlIHRvZGF5LlxuICAgKiBCeSBkZWZhdWx0IGl0IHVzZXMgc2V0SG91cnMgZnVuY3Rpb24sIHdpdGggbG9jYWwgZGF0ZVxuICAgKi9cbiAgdXNlTG9jYWxUaW1lWm9uZTogdHJ1ZSxcbiAgLyoqXG4gICAqIFRoZSBwcmVmaXggdGhhdCB1c2VzIHRvIHN0b3JlIHRoZSBxdWVzdGlvbiBjb21tZW50LCBhcyBcInF1ZXN0aW9uTmFtZSArIGNvbW1lbnRQcmVmaXhcIi5cbiAgICogVGhlIGRlZmF1bHQgdmFsdWUgaXMgXCItQ29tbWVudFwiXG4gICAqL1xuICBjb21tZW50UHJlZml4OiBcIi1Db21tZW50XCIsXG4gIC8qKlxuICAgKiBFbmNvZGUgcGFyYW1ldGVyIG9uIGNhbGxpbmcgcmVzdGZ1bCB3ZWIgQVBJXG4gICAqL1xuICB3ZWJzZXJ2aWNlRW5jb2RlUGFyYW1ldGVyczogdHJ1ZSxcbiAgLyoqXG4gICAqIENhY2hlIHRoZSByZXN1bHQgZm9yIGNob2ljZXMgZ2V0dGluZyBmcm9tIHdlYiBzZXJ2aWNlcy4gU2V0IHRoaXMgcHJvcGVydHkgdG8gZmFsc2UsIHRvIGRpc2FibGUgdGhlIGNhY2hpbmcuXG4gICAqL1xuICB1c2VDYWNoaW5nRm9yQ2hvaWNlc1Jlc3RmdWw6IHRydWUsXG4gIGdldCB1c2VDYWNoaW5nRm9yQ2hvaWNlc1Jlc3RmdWxsKCkge1xuICAgIHJldHVybiBzZXR0aW5ncy51c2VDYWNoaW5nRm9yQ2hvaWNlc1Jlc3RmdWw7XG4gIH0sXG4gIHNldCB1c2VDYWNoaW5nRm9yQ2hvaWNlc1Jlc3RmdWxsKHZhbDogYm9vbGVhbikge1xuICAgIHNldHRpbmdzLnVzZUNhY2hpbmdGb3JDaG9pY2VzUmVzdGZ1bCA9IHZhbDtcbiAgfSxcbiAgLyoqXG4gICAqIFN1cnZleUpTIHdlYiBzZXJ2aWNlIEFQSSB1cmxcbiAgICovXG4gIHN1cnZleVNlcnZpY2VVcmw6IFwiaHR0cHM6Ly9hcGkuc3VydmV5anMuaW8vcHVibGljL3YxL1N1cnZleVwiLFxuICAvKipcbiAgICogc2VwYXJhdG9yIHRoYXQgY2FuIGFsbG93IHRvIHNldCB2YWx1ZSBhbmQgdGV4dCBvZiBJdGVtVmFsdWUgb2JqZWN0IGluIG9uZSBzdHJpbmcgYXM6IFwidmFsdWV8dGV4dFwiXG4gICAqL1xuICBpdGVtVmFsdWVTZXBhcmF0b3I6IFwifFwiLFxuICAvKipcbiAgICogU2V0IGl0IHRvIHRydWUgdG8gc2VyaWFsaXplIGl0ZW12YWx1ZSBpbnN0YW5jZSBhbHdheXMgYXMgb2JqZWN0IGV2ZW4gaWYgdGV4dCBwcm9wZXJ0eSBpcyBlbXB0eVxuICAgKiBjb25zdCBpdGVtID0gbmV3IFN1cnZleS5JdGVtVmFsdWUoNSk7XG4gICAqIGl0ZW0udG9KU09OKCk7IC8vd2lsbCByZXR1cm4ge3ZhbHVlOiA1fSwgaW5zdGVhZCBvZiA1IGJ5IGRlZmF1bHQuXG4gICAqL1xuICBpdGVtVmFsdWVBbHdheXNTZXJpYWxpemVBc09iamVjdDogZmFsc2UsXG4gIC8qKlxuICAgKiBTZXQgaXQgdG8gdHJ1ZSB0byBzZXJpYWxpemUgaXRlbXZhbHVlIHRleHQgcHJvcGVydHksIGV2ZW4gaWYgaXQgaXMgZW1wdHkgb3IgZXF1YWxzIHRvIHZhbHVlXG4gICAqIGNvbnN0IGl0ZW0gPSBuZXcgU3VydmV5Lkl0ZW1WYWx1ZShcIml0ZW0xXCIpO1xuICAgKiBpdGVtLnRvSlNPTigpOyAvL3dpbGwgcmV0dXJuIHt2YWx1ZTogaXRlbTEsIHRleHQ6IFwiaXRlbTFcIn0sIGluc3RlYWQgb2YgXCJpdGVtMVwiIGJ5IGRlZmF1bHQuXG4gICAqL1xuICBpdGVtVmFsdWVBbHdheXNTZXJpYWxpemVUZXh0OiBmYWxzZSxcbiAgLyoqXG4gICAqIGRlZmF1bHQgbG9jYWxlIG5hbWUgZm9yIGxvY2FsaXphYmxlIHN0cmluZ3MgdGhhdCB1c2VzIGR1cmluZyBzZXJpYWxpemF0aW9uLCB7XCJkZWZhdWx0XCI6IFwiTXkgdGV4dFwiLCBcImRlXCI6IFwiTWVpbiBUZXh0XCJ9XG4gICAqL1xuICBkZWZhdWx0TG9jYWxlTmFtZTogXCJkZWZhdWx0XCIsXG4gIC8qKlxuICAgKiBCeSBkZWZhdWx0IHdlIGRvIG5vdCBzdG9yZSBhIHZhbHVlIGZvciBhIGxvY2FsZSBpZiBpdCBlcXVhbHMgdG8gXCJkZWZhdWx0XCIgbG9jYWxlIHZhbHVlXG4gICAqL1xuICBzdG9yZUR1cGxpY2F0ZWRUcmFuc2xhdGlvbnM6IGZhbHNlLFxuICAvKipcbiAgICogRGVmYXVsdCByb3cgbmFtZSBmb3IgbWF0cml4IChzaW5nbGUgY2hvaWNlKVxuICAgKi9cbiAgbWF0cml4RGVmYXVsdFJvd05hbWU6IFwiZGVmYXVsdFwiLFxuICAvKipcbiAgICogRGVmYXVsdCBjZWxsIHR5cGUgZm9yIGRyb3Bkb3duIGFuZCBkeW5hbWljIG1hdHJpY2VzXG4gICAqL1xuICBtYXRyaXhEZWZhdWx0Q2VsbFR5cGU6IFwiZHJvcGRvd25cIixcbiAgLyoqXG4gICAqIFRvdGFsIHZhbHVlIHBvc3RmaXggZm9yIGRyb3Bkb3duIGFuZCBkeW5hbWljIG1hdHJpY2VzLiBUaGUgdG90YWwgdmFsdWUgc3RvcmVzIGFzOiB7bWF0cml4TmFtZX0gKyB7cG9zdGZpeH1cbiAgICovXG4gIG1hdHJpeFRvdGFsVmFsdWVQb3N0Rml4OiBcIi10b3RhbFwiLFxuICAvKipcbiAgICogTWF4aW11bSByb3cgY291bnQgaW4gZHluYW1pYyBtYXRyaXhcbiAgICovXG4gIG1hdHJpeE1heGltdW1Sb3dDb3VudDogMTAwMCxcbiAgLyoqXG4gICAqIE1heGltdW0gcm93Q291bnQgdGhhdCByZXR1cm5zIGluIGFkZENvbmRpdGlvbk9iamVjdHNCeUNvbnRleHQgZnVuY3Rpb25cbiAgICovXG4gIG1hdHJpeE1heFJvd0NvdW50SW5Db25kaXRpb246IDEsXG4gIC8qKlxuICAgKiBTZXQgdGhpcyBwcm9wZXJ0eSB0byBmYWxzZSwgdG8gcmVuZGVyIG1hdHJpeCBkeW5hbWljIHJlbW92ZSBhY3Rpb24gYXMgYnV0dG9uLlxuICAgKiBJdCBpcyByZW5kZXJlZCBhcyBpY29uIGluIG5ldyB0aGVtZXMgKFwiZGVmYXVsdFYyXCIpIGJ5IGRlZmF1bHQuXG4gICAqL1xuICBtYXRyaXhSZW5kZXJSZW1vdmVBc0ljb246IHRydWUsXG4gIC8qKlxuICAgKiBNYXhpbXVtIHBhbmVsIGNvdW50IGluIGR5bmFtaWMgcGFuZWxcbiAgICovXG4gIHBhbmVsTWF4aW11bVBhbmVsQ291bnQ6IDEwMCxcbiAgLyoqXG4gICAqIE1heGltdW0gcmF0ZSB2YWx1ZSBjb3VudCBpbiByYXRpbmcgcXVlc3Rpb25cbiAgICovXG4gIHJhdGluZ01heGltdW1SYXRlVmFsdWVDb3VudDogMjAsXG4gIC8qKlxuICAgKiBEaXNhYmxlIHRoZSBxdWVzdGlvbiB3aGlsZSBjaG9pY2VzIGFyZSBnZXR0aW5nIGZyb20gdGhlIHdlYiBzZXJ2aWNlXG4gICAqL1xuICBkaXNhYmxlT25HZXR0aW5nQ2hvaWNlc0Zyb21XZWI6IGZhbHNlLFxuICAvKipcbiAgICogU2V0IHRvIHRydWUgdG8gYWx3YXlzIHNlcmlhbGl6ZSB0aGUgbG9jYWxpemF0aW9uIHN0cmluZyBhcyBvYmplY3QgZXZlbiBpZiB0aGVyZSBpcyBvbmx5IG9uZSB2YWx1ZSBmb3IgZGVmYXVsdCBsb2NhbGUuIEluc3RlYWQgb2Ygc3RyaW5nIFwiTXlTdHJcIiBzZXJpYWxpemUgYXMge2RlZmF1bHQ6IFwiTXlTdHJcIn1cbiAgICovXG4gIHNlcmlhbGl6ZUxvY2FsaXphYmxlU3RyaW5nQXNPYmplY3Q6IGZhbHNlLFxuICAvKipcbiAgICogU2V0IHRvIGZhbHNlIHRvIGhpZGUgZW1wdHkgcGFnZSB0aXRsZSBhbmQgZGVzY3JpcHRpb24gaW4gZGVzaWduIG1vZGVcbiAgICovXG4gIGFsbG93U2hvd0VtcHR5VGl0bGVJbkRlc2lnbk1vZGU6IHRydWUsXG4gIC8qKlxuICAgKiBTZXQgdG8gZmFsc2UgdG8gaGlkZSBlbXB0eSBwYWdlIGRlc2NyaXB0aW9uIGluIGRlc2lnbiBtb2RlXG4gICAqL1xuICBhbGxvd1Nob3dFbXB0eURlc2NyaXB0aW9uSW5EZXNpZ25Nb2RlOiB0cnVlLFxuICAvKipcbiAgICogU2V0IHRoaXMgcHJvcGVydHkgdG8gdHJ1ZSB0byBleGVjdXRlIHRoZSBjb21wbGV0ZSB0cmlnZ2VyIG9uIHZhbHVlIGNoYW5nZSBpbnN0ZWFkIG9mIG9uIG5leHQgcGFnZS5cbiAgICovXG4gIGV4ZWN1dGVDb21wbGV0ZVRyaWdnZXJPblZhbHVlQ2hhbmdlZDogZmFsc2UsXG4gIC8qKlxuICAgKiBTZXQgdGhpcyBwcm9wZXJ0eSB0byBmYWxzZSB0byBzdG9wIHNob3dpbmcgXCJDb21wZXRlXCIgYnV0dG9uIHdoZW4gdGhlIGNvbXBsZXRlIHRyaWdnZXIgaXMgZ29pbmcgdG8gYmUgZXhlY3V0ZWQuXG4gICAqL1xuICBjaGFuZ2VOYXZpZ2F0aW9uQnV0dG9uc09uQ29tcGxldGVUcmlnZ2VyOiB0cnVlLFxuICAvKipcbiAgICogU2V0IHRoaXMgcHJvcGVydHkgdG8gZmFsc2UgdG8gZXhlY3V0ZSB0aGUgc2tpcCB0cmlnZ2VyIG9uIG5leHQgcGFnZSBpbnN0ZWFkIG9mIG9uIHZhbHVlIGNoYW5nZS5cbiAgICovXG4gIGV4ZWN1dGVTa2lwVHJpZ2dlck9uVmFsdWVDaGFuZ2VkOiB0cnVlLFxuICAvKipcbiAgICogU3BlY2lmaWVzIGhvdyB0aGUgaW5wdXQgZmllbGQgb2YgW0NvbW1lbnRdKGh0dHBzOi8vc3VydmV5anMuaW8vRG9jdW1lbnRhdGlvbi9MaWJyYXJ5P2lkPXF1ZXN0aW9uY29tbWVudG1vZGVsKSBxdWVzdGlvbnMgaXMgcmVuZGVyZWQgaW4gdGhlIHJlYWQtb25seSBtb2RlLlxuICAgKiBBdmFpbGFibGUgdmFsdWVzOlxuICAgKiBcInRleHRhcmVhXCIgKGRlZmF1bHQpIC0gQSAndGV4dGFyZWEnIGVsZW1lbnQgaXMgdXNlZCB0byByZW5kZXIgYSBDb21tZW50IHF1ZXN0aW9uJ3MgaW5wdXQgZmllbGQuXG4gICAqIFwiZGl2XCIgLSBBICdkaXYnIGVsZW1lbnQgaXMgdXNlZCB0byByZW5kZXIgYSBDb21tZW50IHF1ZXN0aW9uJ3MgaW5wdXQgZmllbGQuXG4gICAqL1xuICByZWFkT25seUNvbW1lbnRSZW5kZXJNb2RlOiBcInRleHRhcmVhXCIsXG4gIC8qKlxuICAgKiBTcGVjaWZpZXMgaG93IHRoZSBpbnB1dCBmaWVsZCBvZiBbVGV4dF0oaHR0cHM6Ly9zdXJ2ZXlqcy5pby9Eb2N1bWVudGF0aW9uL0xpYnJhcnk/aWQ9cXVlc3Rpb250ZXh0bW9kZWwpIHF1ZXN0aW9ucyBpcyByZW5kZXJlZCBpbiB0aGUgcmVhZC1vbmx5IG1vZGUuXG4gICAqIEF2YWlsYWJsZSB2YWx1ZXM6XG4gICAqIFwiaW5wdXRcIiAoZGVmYXVsdCkgLSBBbiAnaW5wdXQnIGVsZW1lbnQgaXMgdXNlZCB0byByZW5kZXIgYSBUZXh0IHF1ZXN0aW9uJ3MgaW5wdXQgZmllbGQuXG4gICAqIFwiZGl2XCIgLSBBICdkaXYnIGVsZW1lbnQgaXMgdXNlZCB0byByZW5kZXIgYSBUZXh0IHF1ZXN0aW9uJ3MgaW5wdXQgZmllbGQuXG4gICAqL1xuICByZWFkT25seVRleHRSZW5kZXJNb2RlOiBcImlucHV0XCIsXG4gIC8qKlxuICAgKiBPdmVycmlkZSB0aGlzIGZ1bmN0aW9uLCBzZXQgeW91ciBmdW5jdGlvbiwgaWYgeW91IHdhbnQgdG8gc2hvdyB5b3VyIG93biBkaWFsb2cgY29uZmlybSB3aW5kb3cgaW5zdGVhZCBvZiBzdGFuZGFyZCBicm93c2VyIHdpbmRvdy5cbiAgICogQHBhcmFtIG1lc3NhZ2VcbiAgICovXG4gIGNvbmZpcm1BY3Rpb25GdW5jOiBmdW5jdGlvbiAobWVzc2FnZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGNvbmZpcm0obWVzc2FnZSk7XG4gIH0sXG4gIC8qKlxuICAgKiBTZXQgdGhpcyBwcm9wZXJ0eSB0byBjaGFuZ2UgdGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlIG1pbldpZHRoIGNvbnN0cmFpbnRcbiAgICovXG4gIG1pbldpZHRoOiBcIjMwMHB4XCIsXG4gIC8qKlxuICAgKiBTZXQgdGhpcyBwcm9wZXJ0eSB0byBjaGFuZ2UgdGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlIG1heFdpZHRoIGNvbnN0cmFpbnRcbiAgICovXG4gIG1heFdpZHRoOiBcIjEwMCVcIixcbiAgLyoqXG4gICAqIFRoaXMgcHJvcGVydHkgdGVsbHMgaG93IG1hbnkgdGltZXMgc3VydmV5IHJlLXJ1biBleHByZXNzaW9ucyBvbiB2YWx1ZSBjaGFuZ2VzIGR1cmluZyBjb25kaXRpb24gcnVubmluZy4gV2UgbmVlZCBpdCB0byBhdm9pZCByZWN1cnNpb25zIGluIHRoZSBleHByZXNzaW9uc1xuICAgKi9cbiAgbWF4aW11bUNvbmRpdGlvblJ1bkNvdW50T25WYWx1ZUNoYW5nZWQ6IDEwLFxuICAvKipcbiAgICogQnkgZGVmYXVsdCB2aXNpYmxlSW5kZXggZm9yIHF1ZXN0aW9uIHdpdGggdGl0bGVMb2NhdGlvbiA9IFwiaGlkZGVuXCIgaXMgLTEsIGFuZCBzdXJ2ZXkgZG9lc24ndCBjb3VudCB0aGVzZSBxdWVzdGlvbnMgd2hlbiBzZXQgcXVlc3Rpb25zIG51bWJlcnMuXG4gICAqIFNldCBpdCB0cnVlLCBhbmQgYSBxdWVzdGlvbiBuZXh0IHRvIGEgcXVlc3Rpb24gd2l0aCBoaWRkZW4gdGl0bGUgd2lsbCBpbmNyZWFzZSBpdCdzIG51bWJlci5cbiAgICovXG4gIHNldFF1ZXN0aW9uVmlzaWJsZUluZGV4Rm9ySGlkZGVuVGl0bGU6IGZhbHNlLFxuICAvKipcbiAgICogQnkgZGVmYXVsdCB2aXNpYmxlSW5kZXggZm9yIHF1ZXN0aW9uIHdpdGggaGlkZU51bWJlciA9IHRydWUgaXMgLTEsIGFuZCBzdXJ2ZXkgZG9lc24ndCBjb3VudCB0aGVzZSBxdWVzdGlvbnMgd2hlbiBzZXQgcXVlc3Rpb25zIG51bWJlcnMuXG4gICAqIFNldCBpdCB0cnVlLCBhbmQgYSBxdWVzdGlvbiBuZXh0IHRvIGEgcXVlc3Rpb24gd2l0aCBoaWRkZW4gdGl0bGUgbnVtYmVyIHdpbGwgaW5jcmVhc2UgaXQncyBudW1iZXIuXG4gICAqL1xuICBzZXRRdWVzdGlvblZpc2libGVJbmRleEZvckhpZGRlbk51bWJlcjogZmFsc2UsXG4gIC8qKlxuICAgKiBCeSBkZWZhdWx0IGFsbCByb3dzIGFyZSByZW5kZXJlZCBubyBtYXR0ZXJzIHdod3RoZXIgdGhleSBhcmUgdmlzaWJsZS5cbiAgICogU2V0IGl0IHRydWUsIGFuZCBzdXJ2ZXkgbWFya3VwIHJvd3Mgd2lsbCBiZSByZW5kZXJlZCBvbmx5IGlmIHRoZXkgYXJlIHZpc2libGUgaW4gdmlld3BvcnQuXG4gICAqIFRoaXMgZmVhdHVyZSBpcyBleHBlcmltYW50YWwgYW5kIG1pZ2h0IGRvIG5vdCBzdXBwb3J0IGFsbCB0aGUgdXNlIGNhc2VzLlxuICAgKi9cbiAgbGF6eVJvd3NSZW5kZXJpbmc6IGZhbHNlLFxuICBsYXp5Um93c1JlbmRlcmluZ1N0YXJ0Um93OiAzLFxuICAvKipcbiAgICogQnkgZGVmYXVsdCBjaGVja2JveCBhbmQgcmFkaW9ncm91cCBpdGVtcyBhcmUgb3JkZXJlZCBpbiByb3dzLlxuICAgKiBTZXQgaXQgXCJjb2x1bW5cIiwgYW5kIGl0ZW1zIHdpbGwgYmUgb3JkZXJlZCBpbiBjb2x1bW5zLlxuICAgKi9cbiAgc2hvd0l0ZW1zSW5PcmRlcjogXCJkZWZhdWx0XCIsXG4gIC8qKlxuICAgKiBTdXBwb3J0ZWQgdmFsaWRhdG9ycyBieSBxdWVzdGlvbiB0eXBlcy4gWW91IGNhbiBtb2RpZnkgdGhpcyB2YXJpYWJsZSB0byBhZGQgdmFsaWRhdG9ycyBmb3IgbmV3IHF1ZXN0aW9uIHR5cGVzIG9yIGFkZC9yZW1vdmUgZm9yIGV4aXN0aW5nIHF1ZXN0aW9uIHR5cGVzLlxuICAgKi9cbiAgc3VwcG9ydGVkVmFsaWRhdG9yczoge1xuICAgIHF1ZXN0aW9uOiBbXCJleHByZXNzaW9uXCJdLFxuICAgIGNvbW1lbnQ6IFtcInRleHRcIiwgXCJyZWdleFwiXSxcbiAgICB0ZXh0OiBbXCJudW1lcmljXCIsIFwidGV4dFwiLCBcInJlZ2V4XCIsIFwiZW1haWxcIl0sXG4gICAgY2hlY2tib3g6IFtcImFuc3dlcmNvdW50XCJdLFxuICAgIGltYWdlcGlja2VyOiBbXCJhbnN3ZXJjb3VudFwiXSxcbiAgfSxcbiAgLyoqXG4gICAqIFNldCB0aGUgdmFsdWUgYXMgc3RyaW5nIFwieXl5eS1tbS1kZFwiLiB0ZXh0IHF1ZXN0aW9ucyB3aXRoIGlucHV0VHlwZSBcImRhdGVcIiB3aWxsIG5vdCBhbGxvdyB0byBzZXQgdG8gc3VydmV5IGRhdGUgdGhhdCBsZXNzIHRoYW4gdGhpcyB2YWx1ZVxuICAgKi9cbiAgbWluRGF0ZTogXCJcIixcbiAgLyoqXG4gICAqIFNldCB0aGUgdmFsdWUgYXMgc3RyaW5nIFwieXl5eS1tbS1kZFwiLiB0ZXh0IHF1ZXN0aW9ucyB3aXRoIGlucHV0VHlwZSBcImRhdGVcIiB3aWxsIG5vdCBhbGxvdyB0byBzZXQgdG8gc3VydmV5IGRhdGUgdGhhdCBncmVhdGVyIHRoYW4gdGhpcyB2YWx1ZVxuICAgKi9cbiAgbWF4RGF0ZTogXCJcIixcbiAgc2hvd01vZGFsOiA8XG4gICAgKFxuICAgICAgY29tcG9uZW50TmFtZTogc3RyaW5nLFxuICAgICAgZGF0YTogYW55LFxuICAgICAgb25BcHBseTogKCkgPT4gYm9vbGVhbixcbiAgICAgIG9uQ2FuY2VsPzogKCkgPT4gdm9pZCxcbiAgICAgIGNzc0NsYXNzPzogc3RyaW5nLFxuICAgICAgdGl0bGU/OiBzdHJpbmcsXG4gICAgICBkaXNwbGF5TW9kZT86IFwicG9wdXBcIiB8IFwib3ZlcmxheVwiXG4gICAgKSA9PiBhbnlcbiAgICA+dW5kZWZpbmVkLFxuICBzdXBwb3J0Q3JlYXRvclYyOiBmYWxzZSxcbiAgc2hvd0RlZmF1bHRJdGVtc0luQ3JlYXRvclYyOiB0cnVlLFxuICAvKipcbiAgICogU3BlY2lmaWVzIGEgbGlzdCBvZiBjdXN0b20gaWNvbnMuXG4gICAqIFVzZSB0aGlzIHByb3BlcnR5IHRvIHJlcGxhY2UgU3VydmV5SlMgZGVmYXVsdCBpY29ucyAoZGlzcGxheWVkIGluIFVJIGVsZW1lbnRzIG9mIFN1cnZleUpTIExpYnJhcnkgb3IgQ3JlYXRvcikgd2l0aCB5b3VyIGN1c3RvbSBpY29ucy5cbiAgICogRm9yIGV2ZXJ5IGRlZmF1bHQgaWNvbiB0byByZXBsYWNlLCBhZGQgYSBrZXkvdmFsdWUgb2JqZWN0IHdpdGggdGhlIGRlZmF1bHQgaWNvbidzIG5hbWUgYXMgYSBrZXkgYW5kIHRoZSBuYW1lIG9mIHlvdXIgY3VzdG9tIGljb24gYXMgYSB2YWx1ZS5cbiAgICogRm9yIGV4YW1wbGU6IFN1cnZleS5zZXR0aW5ncy5jdXN0b21JY29uc1tcImljb24tcmVkb1wiXSA9IFwibXktb3duLXJlZG8taWNvblwiXG4gICAqL1xuICBjdXN0b21JY29uczoge30sXG4gIHRpdGxlVGFnczoge1xuICAgIHN1cnZleTogXCJoM1wiLFxuICAgIHBhZ2U6IFwiaDRcIixcbiAgICBwYW5lbDogXCJoNFwiLFxuICAgIHF1ZXN0aW9uOiBcImg1XCIsXG4gIH0sXG4gIHF1ZXN0aW9uczoge1xuICAgIGlucHV0VHlwZXM6IFtcbiAgICAgIFwiY29sb3JcIixcbiAgICAgIFwiZGF0ZVwiLFxuICAgICAgXCJkYXRldGltZVwiLFxuICAgICAgXCJkYXRldGltZS1sb2NhbFwiLFxuICAgICAgXCJlbWFpbFwiLFxuICAgICAgXCJtb250aFwiLFxuICAgICAgXCJudW1iZXJcIixcbiAgICAgIFwicGFzc3dvcmRcIixcbiAgICAgIFwicmFuZ2VcIixcbiAgICAgIFwidGVsXCIsXG4gICAgICBcInRleHRcIixcbiAgICAgIFwidGltZVwiLFxuICAgICAgXCJ1cmxcIixcbiAgICAgIFwid2Vla1wiLFxuICAgIF0sXG4gICAgZGF0YUxpc3Q6IFtcbiAgICAgIFwibmFtZVwiLFxuICAgICAgXCJob25vcmlmaWMtcHJlZml4XCIsXG4gICAgICBcImdpdmVuLW5hbWVcIixcbiAgICAgIFwiYWRkaXRpb25hbC1uYW1lXCIsXG4gICAgICBcImZhbWlseS1uYW1lXCIsXG4gICAgICBcImhvbm9yaWZpYy1zdWZmaXhcIixcbiAgICAgIFwibmlja25hbWVcIixcbiAgICAgIFwib3JnYW5pemF0aW9uLXRpdGxlXCIsXG4gICAgICBcInVzZXJuYW1lXCIsXG4gICAgICBcIm5ldy1wYXNzd29yZFwiLFxuICAgICAgXCJjdXJyZW50LXBhc3N3b3JkXCIsXG4gICAgICBcIm9yZ2FuaXphdGlvblwiLFxuICAgICAgXCJzdHJlZXQtYWRkcmVzc1wiLFxuICAgICAgXCJhZGRyZXNzLWxpbmUxXCIsXG4gICAgICBcImFkZHJlc3MtbGluZTJcIixcbiAgICAgIFwiYWRkcmVzcy1saW5lM1wiLFxuICAgICAgXCJhZGRyZXNzLWxldmVsNFwiLFxuICAgICAgXCJhZGRyZXNzLWxldmVsM1wiLFxuICAgICAgXCJhZGRyZXNzLWxldmVsMlwiLFxuICAgICAgXCJhZGRyZXNzLWxldmVsMVwiLFxuICAgICAgXCJjb3VudHJ5XCIsXG4gICAgICBcImNvdW50cnktbmFtZVwiLFxuICAgICAgXCJwb3N0YWwtY29kZVwiLFxuICAgICAgXCJjYy1uYW1lXCIsXG4gICAgICBcImNjLWdpdmVuLW5hbWVcIixcbiAgICAgIFwiY2MtYWRkaXRpb25hbC1uYW1lXCIsXG4gICAgICBcImNjLWZhbWlseS1uYW1lXCIsXG4gICAgICBcImNjLW51bWJlclwiLFxuICAgICAgXCJjYy1leHBcIixcbiAgICAgIFwiY2MtZXhwLW1vbnRoXCIsXG4gICAgICBcImNjLWV4cC15ZWFyXCIsXG4gICAgICBcImNjLWNzY1wiLFxuICAgICAgXCJjYy10eXBlXCIsXG4gICAgICBcInRyYW5zYWN0aW9uLWN1cnJlbmN5XCIsXG4gICAgICBcInRyYW5zYWN0aW9uLWFtb3VudFwiLFxuICAgICAgXCJsYW5ndWFnZVwiLFxuICAgICAgXCJiZGF5XCIsXG4gICAgICBcImJkYXktZGF5XCIsXG4gICAgICBcImJkYXktbW9udGhcIixcbiAgICAgIFwiYmRheS15ZWFyXCIsXG4gICAgICBcInNleFwiLFxuICAgICAgXCJ1cmxcIixcbiAgICAgIFwicGhvdG9cIixcbiAgICAgIFwidGVsXCIsXG4gICAgICBcInRlbC1jb3VudHJ5LWNvZGVcIixcbiAgICAgIFwidGVsLW5hdGlvbmFsXCIsXG4gICAgICBcInRlbC1hcmVhLWNvZGVcIixcbiAgICAgIFwidGVsLWxvY2FsXCIsXG4gICAgICBcInRlbC1sb2NhbC1wcmVmaXhcIixcbiAgICAgIFwidGVsLWxvY2FsLXN1ZmZpeFwiLFxuICAgICAgXCJ0ZWwtZXh0ZW5zaW9uXCIsXG4gICAgICBcImVtYWlsXCIsXG4gICAgICBcImltcHBcIixcbiAgICBdXG4gIH1cbn07XG4iLCJpbXBvcnQgeyBzZXRUaW1lb3V0IH0gZnJvbSBcInRpbWVyc1wiO1xuaW1wb3J0IHsgQWN0aW9uIH0gZnJvbSBcIi4uL2FjdGlvbnMvYWN0aW9uXCI7XG5pbXBvcnQgeyBBZGFwdGl2ZUFjdGlvbkNvbnRhaW5lciB9IGZyb20gXCIuLi9hY3Rpb25zL2FkYXB0aXZlLWNvbnRhaW5lclwiO1xuaW1wb3J0IHsgaXNDb250YWluZXJWaXNpYmxlIH0gZnJvbSBcIi4vdXRpbHNcIjtcblxuaW50ZXJmYWNlIElEaW1lbnNpb25zIHtcbiAgc2Nyb2xsOiBudW1iZXI7XG4gIG9mZnNldDogbnVtYmVyO1xufVxuXG5leHBvcnQgY2xhc3MgUmVzcG9uc2l2aXR5TWFuYWdlciB7XG4gIHByaXZhdGUgcmVzaXplT2JzZXJ2ZXI6IFJlc2l6ZU9ic2VydmVyID0gdW5kZWZpbmVkO1xuICBwcml2YXRlIGlzSW5pdGlhbGl6ZWQgPSBmYWxzZTtcbiAgcHJvdGVjdGVkIG1pbkRpbWVuc2lvbkNvbnN0ID0gNTY7XG4gIHByaXZhdGUgc2VwYXJhdG9yU2l6ZSA9IDE3O1xuICBwcml2YXRlIHNlcGFyYXRvckFkZENvbnN0ID0gMTtcbiAgcHJpdmF0ZSBwYWRkaW5nU2l6ZUNvbnN0ID0gODtcbiAgcHJpdmF0ZSBkb3RzU2l6ZUNvbnN0ID0gNDg7XG4gIHByb3RlY3RlZCByZWNhbGNNaW5EaW1lbnNpb25Db25zdCA9IHRydWU7XG5cbiAgcHVibGljIGdldENvbXB1dGVkU3R5bGU6IChcbiAgICBlbHQ6IEVsZW1lbnRcbiAgKSA9PiBDU1NTdHlsZURlY2xhcmF0aW9uID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUuYmluZCh3aW5kb3cpO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByb3RlY3RlZCBjb250YWluZXI6IEhUTUxEaXZFbGVtZW50LFxuICAgIHByaXZhdGUgbW9kZWw6IEFkYXB0aXZlQWN0aW9uQ29udGFpbmVyLFxuICAgIHByaXZhdGUgaXRlbXNTZWxlY3Rvcjogc3RyaW5nLFxuICAgIHByaXZhdGUgZG90c0l0ZW1TaXplOiBudW1iZXIgPSBudWxsLFxuICApIHtcbiAgICB0aGlzLm1vZGVsLnVwZGF0ZUNhbGxiYWNrID0gKGlzUmVzZXRJbml0aWFsaXplZDogYm9vbGVhbikgPT4ge1xuICAgICAgaWYoaXNSZXNldEluaXRpYWxpemVkKVxuICAgICAgICB0aGlzLmlzSW5pdGlhbGl6ZWQgPSBmYWxzZTtcbiAgICAgIGVsc2VcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7IHRoaXMucHJvY2VzcygpOyB9LCAxKTtcbiAgICB9O1xuICAgIGlmICh0eXBlb2YgUmVzaXplT2JzZXJ2ZXIgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgIHRoaXMucmVzaXplT2JzZXJ2ZXIgPSBuZXcgUmVzaXplT2JzZXJ2ZXIoKF8pID0+IHRoaXMucHJvY2VzcygpKTtcbiAgICAgIHRoaXMucmVzaXplT2JzZXJ2ZXIub2JzZXJ2ZSh0aGlzLmNvbnRhaW5lci5wYXJlbnRFbGVtZW50KTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0RGltZW5zaW9ucyhlbGVtZW50OiBIVE1MRWxlbWVudCk6IElEaW1lbnNpb25zIHtcbiAgICByZXR1cm4ge1xuICAgICAgc2Nyb2xsOiBlbGVtZW50LnNjcm9sbFdpZHRoLFxuICAgICAgb2Zmc2V0OiBlbGVtZW50Lm9mZnNldFdpZHRoLFxuICAgIH07XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0QXZhaWxhYmxlU3BhY2UoKTogbnVtYmVyIHtcbiAgICBjb25zdCBzdHlsZTogQ1NTU3R5bGVEZWNsYXJhdGlvbiA9IHRoaXMuZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzLmNvbnRhaW5lcik7XG4gICAgbGV0IHNwYWNlID0gdGhpcy5jb250YWluZXIub2Zmc2V0V2lkdGg7XG4gICAgaWYgKHN0eWxlLmJveFNpemluZyA9PT0gXCJib3JkZXItYm94XCIpIHtcbiAgICAgIHNwYWNlIC09IHBhcnNlRmxvYXQoc3R5bGUucGFkZGluZ0xlZnQpICsgcGFyc2VGbG9hdChzdHlsZS5wYWRkaW5nUmlnaHQpO1xuICAgIH1cbiAgICByZXR1cm4gc3BhY2U7XG4gIH1cblxuICBwcm90ZWN0ZWQgY2FsY0l0ZW1TaXplKGl0ZW06IEhUTUxEaXZFbGVtZW50KTogbnVtYmVyIHtcbiAgICByZXR1cm4gaXRlbS5vZmZzZXRXaWR0aDtcbiAgfVxuXG4gIHByaXZhdGUgY2FsY01pbkRpbWVuc2lvbihjdXJyZW50QWN0aW9uOiBBY3Rpb24pIHtcbiAgICBsZXQgbWluRGltZW5zaW9uQ29uc3QgPSB0aGlzLm1pbkRpbWVuc2lvbkNvbnN0O1xuICAgIGlmKGN1cnJlbnRBY3Rpb24uaWNvblNpemUgJiYgdGhpcy5yZWNhbGNNaW5EaW1lbnNpb25Db25zdCkge1xuICAgICAgbWluRGltZW5zaW9uQ29uc3QgPSAyICogY3VycmVudEFjdGlvbi5pY29uU2l6ZSArIHRoaXMucGFkZGluZ1NpemVDb25zdDtcbiAgICB9XG4gICAgcmV0dXJuIGN1cnJlbnRBY3Rpb24uY2FuU2hyaW5rXG4gICAgICA/IG1pbkRpbWVuc2lvbkNvbnN0ICtcbiAgICAgIChjdXJyZW50QWN0aW9uLm5lZWRTZXBhcmF0b3IgPyB0aGlzLnNlcGFyYXRvclNpemUgOiAwKVxuICAgICAgOiBjdXJyZW50QWN0aW9uLm1heERpbWVuc2lvbjtcbiAgfVxuXG4gIHByaXZhdGUgY2FsY0l0ZW1zU2l6ZXMoKSB7XG4gICAgY29uc3QgYWN0aW9ucyA9IHRoaXMubW9kZWwuYWN0aW9ucztcbiAgICB0aGlzLmNvbnRhaW5lclxuICAgICAgLnF1ZXJ5U2VsZWN0b3JBbGwodGhpcy5pdGVtc1NlbGVjdG9yKVxuICAgICAgLmZvckVhY2goKGl0ZW06IEhUTUxEaXZFbGVtZW50LCBpbmRleDogbnVtYmVyKSA9PiB7XG4gICAgICAgIGxldCBjdXJyZW50QWN0aW9uID0gYWN0aW9uc1tpbmRleF07XG4gICAgICAgIHRoaXMuY2FsY0FjdGlvbkRpbWVuc2lvbnMoY3VycmVudEFjdGlvbiwgaXRlbSk7XG4gICAgICB9KTtcbiAgfVxuICBwcm90ZWN0ZWQgY2FsY0FjdGlvbkRpbWVuc2lvbnMoY3VycmVudEFjdGlvbjogQWN0aW9uLCBpdGVtOiBIVE1MRGl2RWxlbWVudCkge1xuICAgIGN1cnJlbnRBY3Rpb24ubWF4RGltZW5zaW9uID0gdGhpcy5jYWxjSXRlbVNpemUoaXRlbSk7XG4gICAgY3VycmVudEFjdGlvbi5taW5EaW1lbnNpb24gPSB0aGlzLmNhbGNNaW5EaW1lbnNpb24oY3VycmVudEFjdGlvbik7XG4gIH1cbiAgcHJpdmF0ZSBnZXQgaXNDb250YWluZXJWaXNpYmxlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBpc0NvbnRhaW5lclZpc2libGUodGhpcy5jb250YWluZXIpO1xuICB9XG4gIHByaXZhdGUgcHJvY2VzcygpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pc0NvbnRhaW5lclZpc2libGUgJiYgIXRoaXMubW9kZWwuaXNSZXNwb25zaXZlbmVzc0Rpc2FibGVkKSB7XG4gICAgICBpZiAoIXRoaXMuaXNJbml0aWFsaXplZCkge1xuICAgICAgICB0aGlzLm1vZGVsLnNldEFjdGlvbnNNb2RlKFwibGFyZ2VcIik7XG4gICAgICAgIHRoaXMuY2FsY0l0ZW1zU2l6ZXMoKTtcbiAgICAgICAgdGhpcy5pc0luaXRpYWxpemVkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGxldCBkb3RzSXRlbVNpemUgPSB0aGlzLmRvdHNJdGVtU2l6ZTtcbiAgICAgIGlmICghdGhpcy5kb3RzSXRlbVNpemUpIHtcbiAgICAgICAgY29uc3QgZG90c0l0ZW1FbGVtZW50OiBIVE1MRGl2RWxlbWVudCA9IHRoaXMuY29udGFpbmVyPy5xdWVyeVNlbGVjdG9yKFwiLnN2LWRvdHNcIik7XG4gICAgICAgIGRvdHNJdGVtU2l6ZSA9IGRvdHNJdGVtRWxlbWVudCAmJiB0aGlzLmNhbGNJdGVtU2l6ZShkb3RzSXRlbUVsZW1lbnQpIHx8IHRoaXMuZG90c1NpemVDb25zdDtcbiAgICAgIH1cbiAgICAgIHRoaXMubW9kZWwuZml0KHRoaXMuZ2V0QXZhaWxhYmxlU3BhY2UoKSwgZG90c0l0ZW1TaXplKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZGlzcG9zZSgpOiB2b2lkIHtcbiAgICB0aGlzLm1vZGVsLnVwZGF0ZUNhbGxiYWNrID0gdW5kZWZpbmVkO1xuICAgIGlmICghIXRoaXMucmVzaXplT2JzZXJ2ZXIpIHtcbiAgICAgIHRoaXMucmVzaXplT2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgVmVydGljYWxSZXNwb25zaXZpdHlNYW5hZ2VyIGV4dGVuZHMgUmVzcG9uc2l2aXR5TWFuYWdlciB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIGNvbnRhaW5lcjogSFRNTERpdkVsZW1lbnQsXG4gICAgbW9kZWw6IEFkYXB0aXZlQWN0aW9uQ29udGFpbmVyLFxuICAgIGl0ZW1zU2VsZWN0b3I6IHN0cmluZyxcbiAgICBkb3RzSXRlbVNpemU/OiBudW1iZXIsXG4gICAgbWluRGltZW5zaW9uID0gNDBcbiAgKSB7XG4gICAgc3VwZXIoY29udGFpbmVyLCBtb2RlbCwgaXRlbXNTZWxlY3RvciwgZG90c0l0ZW1TaXplKTtcbiAgICB0aGlzLm1pbkRpbWVuc2lvbkNvbnN0ID0gbWluRGltZW5zaW9uO1xuICAgIHRoaXMucmVjYWxjTWluRGltZW5zaW9uQ29uc3QgPSBmYWxzZTtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXREaW1lbnNpb25zKCk6IElEaW1lbnNpb25zIHtcbiAgICByZXR1cm4ge1xuICAgICAgc2Nyb2xsOiB0aGlzLmNvbnRhaW5lci5zY3JvbGxIZWlnaHQsXG4gICAgICBvZmZzZXQ6IHRoaXMuY29udGFpbmVyLm9mZnNldEhlaWdodCxcbiAgICB9O1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldEF2YWlsYWJsZVNwYWNlKCk6IG51bWJlciB7XG4gICAgY29uc3Qgc3R5bGU6IENTU1N0eWxlRGVjbGFyYXRpb24gPSB0aGlzLmdldENvbXB1dGVkU3R5bGUodGhpcy5jb250YWluZXIpO1xuICAgIGxldCBzcGFjZTogbnVtYmVyID0gdGhpcy5jb250YWluZXIub2Zmc2V0SGVpZ2h0O1xuICAgIGlmIChzdHlsZS5ib3hTaXppbmcgPT09IFwiYm9yZGVyLWJveFwiKSB7XG4gICAgICBzcGFjZSAtPSBwYXJzZUZsb2F0KHN0eWxlLnBhZGRpbmdUb3ApICsgcGFyc2VGbG9hdChzdHlsZS5wYWRkaW5nQm90dG9tKTtcbiAgICB9XG4gICAgcmV0dXJuIHNwYWNlO1xuICB9XG5cbiAgcHJvdGVjdGVkIGNhbGNJdGVtU2l6ZShpdGVtOiBIVE1MRGl2RWxlbWVudCk6IG51bWJlciB7XG4gICAgcmV0dXJuIGl0ZW0ub2Zmc2V0SGVpZ2h0O1xuICB9XG4gIHByb3RlY3RlZCBjYWxjQWN0aW9uRGltZW5zaW9ucyhjdXJyZW50QWN0aW9uOiBBY3Rpb24sIGl0ZW06IEhUTUxEaXZFbGVtZW50KSB7XG4gICAgY3VycmVudEFjdGlvbi5tYXhEaW1lbnNpb24gPSB0aGlzLmNhbGNJdGVtU2l6ZShpdGVtKTtcbiAgICBjdXJyZW50QWN0aW9uLm1pbkRpbWVuc2lvbiA9IHRoaXMuY2FsY0l0ZW1TaXplKGl0ZW0pO1xuICB9XG59XG4iLCJpbXBvcnQgeyBzZXR0aW5ncyB9IGZyb20gXCIuLy4uL3NldHRpbmdzXCI7XG5pbXBvcnQgeyBTZXJpYWxpemVyIH0gZnJvbSBcIi4uL2pzb25vYmplY3RcIjtcbmltcG9ydCB7IEJhc2UgfSBmcm9tIFwic3JjL2Jhc2VcIjtcbmZ1bmN0aW9uIGNvbXBhcmVWZXJzaW9ucyhhOiBhbnksIGI6IGFueSkge1xuICBjb25zdCByZWdFeFN0cmlwMDogUmVnRXhwID0gLyhcXC4wKykrJC87XG4gIGNvbnN0IHNlZ21lbnRzQTogc3RyaW5nW10gPSBhLnJlcGxhY2UocmVnRXhTdHJpcDAsIFwiXCIpLnNwbGl0KFwiLlwiKTtcbiAgY29uc3Qgc2VnbWVudHNCOiBzdHJpbmdbXSA9IGIucmVwbGFjZShyZWdFeFN0cmlwMCwgXCJcIikuc3BsaXQoXCIuXCIpO1xuICBjb25zdCBsZW46IG51bWJlciA9IE1hdGgubWluKHNlZ21lbnRzQS5sZW5ndGgsIHNlZ21lbnRzQi5sZW5ndGgpO1xuICBmb3IgKGxldCBpOiBudW1iZXIgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICBjb25zdCBkaWZmOiBudW1iZXIgPVxuICAgICAgcGFyc2VJbnQoc2VnbWVudHNBW2ldLCAxMCkgLSBwYXJzZUludChzZWdtZW50c0JbaV0sIDEwKTtcbiAgICBpZiAoZGlmZikge1xuICAgICAgcmV0dXJuIGRpZmY7XG4gICAgfVxuICB9XG4gIHJldHVybiBzZWdtZW50c0EubGVuZ3RoIC0gc2VnbWVudHNCLmxlbmd0aDtcbn1cbmZ1bmN0aW9uIGNvbmZpcm1BY3Rpb24obWVzc2FnZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gIGlmICghIXNldHRpbmdzICYmICEhc2V0dGluZ3MuY29uZmlybUFjdGlvbkZ1bmMpXG4gICAgcmV0dXJuIHNldHRpbmdzLmNvbmZpcm1BY3Rpb25GdW5jKG1lc3NhZ2UpO1xuICByZXR1cm4gY29uZmlybShtZXNzYWdlKTtcbn1cbmZ1bmN0aW9uIGRldGVjdElFQnJvd3NlcigpIHtcbiAgaWYgKHR5cGVvZiB3aW5kb3cgPT09IFwidW5kZWZpbmVkXCIpIHJldHVybiBmYWxzZTtcbiAgY29uc3QgdWE6IHN0cmluZyA9IHdpbmRvdy5uYXZpZ2F0b3IudXNlckFnZW50O1xuICBjb25zdCBvbGRJZTogbnVtYmVyID0gdWEuaW5kZXhPZihcIk1TSUUgXCIpO1xuICBjb25zdCBlbGV2ZW5JZTogbnVtYmVyID0gdWEuaW5kZXhPZihcIlRyaWRlbnQvXCIpO1xuICByZXR1cm4gb2xkSWUgPiAtMSB8fCBlbGV2ZW5JZSA+IC0xO1xufVxuZnVuY3Rpb24gZGV0ZWN0SUVPckVkZ2UoKSB7XG4gIGlmICh0eXBlb2Ygd2luZG93ID09PSBcInVuZGVmaW5lZFwiKSByZXR1cm4gZmFsc2U7XG4gIGlmICh0eXBlb2YgKDxhbnk+ZGV0ZWN0SUVPckVkZ2UpLmlzSUVPckVkZ2UgPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICBjb25zdCB1YTogc3RyaW5nID0gd2luZG93Lm5hdmlnYXRvci51c2VyQWdlbnQ7XG4gICAgY29uc3QgbXNpZTogbnVtYmVyID0gdWEuaW5kZXhPZihcIk1TSUUgXCIpO1xuICAgIGNvbnN0IHRyaWRlbnQ6IG51bWJlciA9IHVhLmluZGV4T2YoXCJUcmlkZW50L1wiKTtcbiAgICBjb25zdCBlZGdlOiBudW1iZXIgPSB1YS5pbmRleE9mKFwiRWRnZS9cIik7XG4gICAgKDxhbnk+ZGV0ZWN0SUVPckVkZ2UpLmlzSUVPckVkZ2UgPSBlZGdlID4gMCB8fCB0cmlkZW50ID4gMCB8fCBtc2llID4gMDtcbiAgfVxuICByZXR1cm4gKDxhbnk+ZGV0ZWN0SUVPckVkZ2UpLmlzSUVPckVkZ2U7XG59XG5mdW5jdGlvbiBsb2FkRmlsZUZyb21CYXNlNjQoYjY0RGF0YTogc3RyaW5nLCBmaWxlTmFtZTogc3RyaW5nKSB7XG4gIHRyeSB7XG4gICAgY29uc3QgYnl0ZVN0cmluZzogc3RyaW5nID0gYXRvYihiNjREYXRhLnNwbGl0KFwiLFwiKVsxXSk7XG5cbiAgICAvLyBzZXBhcmF0ZSBvdXQgdGhlIG1pbWUgY29tcG9uZW50XG4gICAgY29uc3QgbWltZVN0cmluZzogc3RyaW5nID0gYjY0RGF0YVxuICAgICAgLnNwbGl0KFwiLFwiKVswXVxuICAgICAgLnNwbGl0KFwiOlwiKVsxXVxuICAgICAgLnNwbGl0KFwiO1wiKVswXTtcblxuICAgIC8vIHdyaXRlIHRoZSBieXRlcyBvZiB0aGUgc3RyaW5nIHRvIGFuIEFycmF5QnVmZmVyXG4gICAgY29uc3QgYWI6IEFycmF5QnVmZmVyID0gbmV3IEFycmF5QnVmZmVyKGJ5dGVTdHJpbmcubGVuZ3RoKTtcbiAgICBjb25zdCBpYTogVWludDhBcnJheSA9IG5ldyBVaW50OEFycmF5KGFiKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGJ5dGVTdHJpbmcubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlhW2ldID0gYnl0ZVN0cmluZy5jaGFyQ29kZUF0KGkpO1xuICAgIH1cbiAgICAvLyB3cml0ZSB0aGUgQXJyYXlCdWZmZXIgdG8gYSBibG9iLCBhbmQgeW91J3JlIGRvbmVcbiAgICBjb25zdCBiYjogQmxvYiA9IG5ldyBCbG9iKFthYl0sIHsgdHlwZTogbWltZVN0cmluZyB9KTtcbiAgICBpZiAoXG4gICAgICB0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiICYmXG4gICAgICB3aW5kb3cubmF2aWdhdG9yICYmXG4gICAgICAoPGFueT53aW5kb3cubmF2aWdhdG9yKVtcIm1zU2F2ZUJsb2JcIl1cbiAgICApIHtcbiAgICAgICg8YW55PndpbmRvdy5uYXZpZ2F0b3IpW1wibXNTYXZlT3JPcGVuQmxvYlwiXShiYiwgZmlsZU5hbWUpO1xuICAgIH1cbiAgfSBjYXRjaCAoZXJyKSB7IH1cbn1cbmZ1bmN0aW9uIGlzTW9iaWxlKCkge1xuICByZXR1cm4gKFxuICAgIHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgJiYgdHlwZW9mIHdpbmRvdy5vcmllbnRhdGlvbiAhPT0gXCJ1bmRlZmluZWRcIlxuICApO1xufVxuXG5mdW5jdGlvbiBpc0VsZW1lbnRWaXNpYmxlKFxuICBlbGVtZW50OiBIVE1MRWxlbWVudCxcbiAgdGhyZXNob2xkOiBudW1iZXIgPSAwXG4pOiBib29sZWFuIHtcbiAgaWYgKHR5cGVvZiBkb2N1bWVudCA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBjb25zdCBlbGVtZW50UmVjdDogRE9NUmVjdCA9IGVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gIGNvbnN0IHZpZXdIZWlnaHQ6IG51bWJlciA9IE1hdGgubWF4KFxuICAgIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQsXG4gICAgd2luZG93LmlubmVySGVpZ2h0XG4gICk7XG4gIGNvbnN0IHRvcFdpbjogbnVtYmVyID0gLXRocmVzaG9sZDtcbiAgY29uc3QgYm90dG9tV2luOiBudW1iZXIgPSB2aWV3SGVpZ2h0ICsgdGhyZXNob2xkO1xuICBjb25zdCB0b3BFbDogbnVtYmVyID0gZWxlbWVudFJlY3QudG9wO1xuICBjb25zdCBib3R0b21FbDogbnVtYmVyID0gZWxlbWVudFJlY3QuYm90dG9tO1xuXG4gIGNvbnN0IG1heFRvcDogbnVtYmVyID0gTWF0aC5tYXgodG9wV2luLCB0b3BFbCk7XG4gIGNvbnN0IG1pbkJvdHRvbTogbnVtYmVyID0gTWF0aC5taW4oYm90dG9tV2luLCBib3R0b21FbCk7XG4gIHJldHVybiBtYXhUb3AgPD0gbWluQm90dG9tO1xufVxuXG5mdW5jdGlvbiBmaW5kU2Nyb2xsYWJsZVBhcmVudChlbGVtZW50OiBIVE1MRWxlbWVudCk6IEhUTUxFbGVtZW50IHtcbiAgaWYgKCFlbGVtZW50KSB7XG4gICAgcmV0dXJuIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcbiAgfVxuICBpZiAoXG4gICAgZWxlbWVudC5zY3JvbGxIZWlnaHQgPiBlbGVtZW50LmNsaWVudEhlaWdodCAmJlxuICAgIChnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpLm92ZXJmbG93WSA9PT0gXCJzY3JvbGxcIiB8fFxuICAgICAgZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KS5vdmVyZmxvd1kgPT09IFwiYXV0b1wiKVxuICApIHtcbiAgICByZXR1cm4gZWxlbWVudDtcbiAgfVxuXG4gIGlmIChcbiAgICBlbGVtZW50LnNjcm9sbFdpZHRoID4gZWxlbWVudC5jbGllbnRXaWR0aCAmJlxuICAgIChnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpLm92ZXJmbG93WCA9PT0gXCJzY3JvbGxcIiB8fFxuICAgICAgZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KS5vdmVyZmxvd1ggPT09IFwiYXV0b1wiKVxuICApIHtcbiAgICByZXR1cm4gZWxlbWVudDtcbiAgfVxuXG4gIHJldHVybiBmaW5kU2Nyb2xsYWJsZVBhcmVudChlbGVtZW50LnBhcmVudEVsZW1lbnQpO1xufVxuXG5mdW5jdGlvbiBzY3JvbGxFbGVtZW50QnlDaGlsZElkKGlkOiBzdHJpbmcpIHtcbiAgaWYgKCFkb2N1bWVudCkgcmV0dXJuO1xuICBjb25zdCBlbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKTtcbiAgaWYgKCFlbCkgcmV0dXJuO1xuICBjb25zdCBzY3JvbGxhYmxlRWwgPSBmaW5kU2Nyb2xsYWJsZVBhcmVudChlbCk7XG4gIGlmICghIXNjcm9sbGFibGVFbCkge1xuICAgIHNjcm9sbGFibGVFbC5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudChcInNjcm9sbFwiKSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0SWNvbk5hbWVGcm9tUHJveHkoaWNvbk5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gIGlmICghaWNvbk5hbWUpIHJldHVybiBpY29uTmFtZTtcbiAgdmFyIHByb3h5TmFtZSA9ICg8YW55PnNldHRpbmdzLmN1c3RvbUljb25zKVtpY29uTmFtZV07XG4gIHJldHVybiAhIXByb3h5TmFtZSA/IHByb3h5TmFtZSA6IGljb25OYW1lO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVTdmcoXG4gIHNpemU6IG51bWJlciB8IHN0cmluZyxcbiAgd2lkdGg6IG51bWJlcixcbiAgaGVpZ2h0OiBudW1iZXIsXG4gIGljb25OYW1lOiBzdHJpbmcsXG4gIHN2Z0VsZW06IGFueSxcbiAgdGl0bGU6IHN0cmluZ1xuKTogdm9pZCB7XG4gIGlmICghc3ZnRWxlbSkgcmV0dXJuO1xuICBpZiAoc2l6ZSAhPT0gXCJhdXRvXCIpIHtcbiAgICBzdmdFbGVtLnN0eWxlLndpZHRoID0gKHNpemUgfHwgd2lkdGggfHwgMTYpICsgXCJweFwiO1xuICAgIHN2Z0VsZW0uc3R5bGUuaGVpZ2h0ID0gKHNpemUgfHwgaGVpZ2h0IHx8IDE2KSArIFwicHhcIjtcbiAgfVxuICBjb25zdCBub2RlOiBhbnkgPSBzdmdFbGVtLmNoaWxkTm9kZXNbMF07XG4gIGNvbnN0IHJlYWxJY29uTmFtZSA9IGdldEljb25OYW1lRnJvbVByb3h5KGljb25OYW1lKTtcbiAgbm9kZS5zZXRBdHRyaWJ1dGVOUyhcbiAgICBcImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmtcIixcbiAgICBcInhsaW5rOmhyZWZcIixcbiAgICBcIiNcIiArIHJlYWxJY29uTmFtZVxuICApO1xuXG4gIGxldCB0aXRsZUVsZW1lbnQgPSBzdmdFbGVtLmdldEVsZW1lbnRzQnlUYWdOYW1lKFwidGl0bGVcIilbMF07XG4gIGlmKCF0aXRsZSkge1xuICAgIGlmKCEhdGl0bGVFbGVtZW50KSB7XG4gICAgICBzdmdFbGVtLnJlbW92ZUNoaWxkKHRpdGxlRWxlbWVudCk7XG4gICAgfVxuICAgIHJldHVybjtcbiAgfSBlbHNlIHtcbiAgICBpZiAoIXRpdGxlRWxlbWVudCkge1xuICAgICAgdGl0bGVFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiwgXCJ0aXRsZVwiKTtcbiAgICAgIHN2Z0VsZW0uYXBwZW5kQ2hpbGQodGl0bGVFbGVtZW50KTtcbiAgICB9XG4gIH1cbiAgdGl0bGVFbGVtZW50LnRleHRDb250ZW50ID0gdGl0bGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1bndyYXA8VD4odmFsdWU6IFQgfCAoKCkgPT4gVCkpOiBUIHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiAoPCgpID0+IFQ+dmFsdWUpKCk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFNpemUodmFsdWU6IGFueSkge1xuICBpZiAodHlwZW9mIHZhbHVlID09PSBcIm51bWJlclwiKSB7XG4gICAgcmV0dXJuIFwiXCIgKyB2YWx1ZSArIFwicHhcIjtcbiAgfVxuICBpZiAoISF2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIgJiYgdmFsdWUubGVuZ3RoID4gMCkge1xuICAgIGNvbnN0IGxhc3RTeW1ib2w6IHN0cmluZyA9IHZhbHVlW3ZhbHVlLmxlbmd0aCAtIDFdO1xuICAgIGlmICgobGFzdFN5bWJvbCA+PSBcIjBcIiAmJiBsYXN0U3ltYm9sIDw9IFwiOVwiKSB8fCBsYXN0U3ltYm9sID09IFwiLlwiKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBudW06IG51bWJlciA9IHBhcnNlRmxvYXQodmFsdWUpO1xuICAgICAgICByZXR1cm4gXCJcIiArIG51bSArIFwicHhcIjtcbiAgICAgIH0gY2F0Y2ggeyB9XG4gICAgfVxuICB9XG4gIHJldHVybiB2YWx1ZTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJQXR0YWNoS2V5MmNsaWNrT3B0aW9ucyB7XG4gIHByb2Nlc3NFc2M/OiBib29sZWFuO1xuICBkaXNhYmxlVGFiU3RvcD86IGJvb2xlYW47XG59XG5cbmNvbnN0IGtleUZvY3VzZWRDbGFzc05hbWUgPSBcInN2LWZvY3VzZWQtLWJ5LWtleVwiO1xuZXhwb3J0IGZ1bmN0aW9uIGRvS2V5MkNsaWNrQmx1cihldnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgY29uc3QgZWxlbWVudDogYW55ID0gZXZ0LnRhcmdldDtcbiAgaWYgKCFlbGVtZW50IHx8ICFlbGVtZW50LmNsYXNzTGlzdCkgcmV0dXJuO1xuICBlbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoa2V5Rm9jdXNlZENsYXNzTmFtZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkb0tleTJDbGlja1VwKGV2dDogS2V5Ym9hcmRFdmVudCwgb3B0aW9ucz86IElBdHRhY2hLZXkyY2xpY2tPcHRpb25zKTogdm9pZCB7XG4gIGlmICghIWV2dC50YXJnZXQgJiYgKDxhbnk+ZXZ0LnRhcmdldClbXCJjb250ZW50RWRpdGFibGVcIl0gPT09IFwidHJ1ZVwiKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGNvbnN0IGVsZW1lbnQ6IGFueSA9IGV2dC50YXJnZXQ7XG4gIGlmICghZWxlbWVudCkgcmV0dXJuO1xuICBjb25zdCBjaGFyOiBudW1iZXIgPSBldnQud2hpY2ggfHwgZXZ0LmtleUNvZGU7XG4gIGlmIChjaGFyID09PSA5KSB7XG4gICAgaWYgKCEhZWxlbWVudC5jbGFzc0xpc3QgJiYgIWVsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKGtleUZvY3VzZWRDbGFzc05hbWUpKSB7XG4gICAgICBlbGVtZW50LmNsYXNzTGlzdC5hZGQoa2V5Rm9jdXNlZENsYXNzTmFtZSk7XG4gICAgfVxuICB9IGVsc2UgaWYgKGNoYXIgPT09IDEzIHx8IGNoYXIgPT09IDMyKSB7XG4gICAgaWYgKGVsZW1lbnQuY2xpY2spIGVsZW1lbnQuY2xpY2soKTtcbiAgfSBlbHNlIGlmICgoIW9wdGlvbnMgfHwgb3B0aW9ucy5wcm9jZXNzRXNjKSAmJiBjaGFyID09PSAyNykge1xuICAgIGlmIChlbGVtZW50LmJsdXIpIGVsZW1lbnQuYmx1cigpO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkb0tleTJDbGlja0Rvd24oZXZ0OiBLZXlib2FyZEV2ZW50LCBvcHRpb25zOiBJQXR0YWNoS2V5MmNsaWNrT3B0aW9ucyA9IHsgcHJvY2Vzc0VzYzogdHJ1ZSB9KTogdm9pZCB7XG4gIGlmICghIWV2dC50YXJnZXQgJiYgKDxhbnk+ZXZ0LnRhcmdldClbXCJjb250ZW50RWRpdGFibGVcIl0gPT09IFwidHJ1ZVwiKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIHZhciBjaGFyID0gZXZ0LndoaWNoIHx8IGV2dC5rZXlDb2RlO1xuICBjb25zdCBzdXBwb3J0ZWRDb2RlcyA9IFsxMywgMzJdO1xuICBpZiAob3B0aW9ucy5wcm9jZXNzRXNjKSB7XG4gICAgc3VwcG9ydGVkQ29kZXMucHVzaCgyNyk7XG4gIH1cbiAgaWYgKHN1cHBvcnRlZENvZGVzLmluZGV4T2YoY2hhcikgIT09IC0xKSB7XG4gICAgZXZ0LnByZXZlbnREZWZhdWx0KCk7XG4gIH1cbn1cbmZ1bmN0aW9uIGluY3JlYXNlSGVpZ2h0QnlDb250ZW50KGVsZW1lbnQ6IEhUTUxFbGVtZW50LCBnZXRDb21wdXRlZFN0eWxlPzogKGVsdDogRWxlbWVudCkgPT4gYW55KSB7XG4gIGlmICghZWxlbWVudCkgcmV0dXJuO1xuICBpZiAoIWdldENvbXB1dGVkU3R5bGUpIGdldENvbXB1dGVkU3R5bGUgPSAoZWx0OiBFbGVtZW50KSA9PiB7IHJldHVybiB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShlbHQpOyB9O1xuXG4gIGNvbnN0IHN0eWxlID0gZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KTtcbiAgZWxlbWVudC5zdHlsZS5oZWlnaHQgPSBcImF1dG9cIjtcbiAgZWxlbWVudC5zdHlsZS5oZWlnaHQgPSAoZWxlbWVudC5zY3JvbGxIZWlnaHQgKyBwYXJzZUZsb2F0KHN0eWxlLmJvcmRlclRvcFdpZHRoKSArIHBhcnNlRmxvYXQoc3R5bGUuYm9yZGVyQm90dG9tV2lkdGgpKSArIFwicHhcIjtcbn1cbmZ1bmN0aW9uIGdldE9yaWdpbmFsRXZlbnQoZXZlbnQ6IGFueSkge1xuICByZXR1cm4gZXZlbnQub3JpZ2luYWxFdmVudCB8fCBldmVudDtcbn1cbmZ1bmN0aW9uIHByZXZlbnREZWZhdWx0cyhldmVudDogYW55KSB7XG4gIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xufVxuZnVuY3Rpb24gY2xhc3Nlc1RvU2VsZWN0b3Ioc3RyOiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCByZSA9IC9cXHMqPyhbXFx3LV0rKVxccyo/L2c7XG4gIHJldHVybiBzdHIucmVwbGFjZShyZSwgXCIuJDFcIik7XG59XG5cbmZ1bmN0aW9uIGdldEVsZW1lbnRXaWR0aChlbDogSFRNTEVsZW1lbnQpIHtcbiAgcmV0dXJuICEhZ2V0Q29tcHV0ZWRTdHlsZSA/IE51bWJlci5wYXJzZUZsb2F0KGdldENvbXB1dGVkU3R5bGUoZWwpLndpZHRoKSA6IGVsLm9mZnNldFdpZHRoO1xufVxuXG5mdW5jdGlvbiBpc0NvbnRhaW5lclZpc2libGUoZWw6IEhUTUxFbGVtZW50KSB7XG4gIHJldHVybiAhIShcbiAgICBlbC5vZmZzZXRXaWR0aCB8fFxuICAgIGVsLm9mZnNldEhlaWdodCB8fFxuICAgIGVsLmdldENsaWVudFJlY3RzKCkubGVuZ3RoXG4gICk7XG59XG5cbmZ1bmN0aW9uIGZpbmRQYXJlbnRCeUNsYXNzTmFtZXMoZWxlbWVudDogSFRNTEVsZW1lbnQsIGNsYXNzTmFtZXM6IEFycmF5PHN0cmluZz4pOiBFbGVtZW50IHtcbiAgaWYgKCEhZWxlbWVudCkge1xuICAgIGlmIChjbGFzc05hbWVzLmV2ZXJ5KGNsYXNzTmFtZSA9PiAhY2xhc3NOYW1lIHx8IGVsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKGNsYXNzTmFtZSkpKSB7XG4gICAgICByZXR1cm4gZWxlbWVudDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGZpbmRQYXJlbnRCeUNsYXNzTmFtZXMoZWxlbWVudC5wYXJlbnRFbGVtZW50LCBjbGFzc05hbWVzKTtcbiAgICB9XG4gIH1cbn1cbmV4cG9ydCBmdW5jdGlvbiBzYW5pdGl6ZUVkaXRhYmxlQ29udGVudChlbGVtZW50OiBhbnkpIHtcbiAgaWYgKHdpbmRvdy5nZXRTZWxlY3Rpb24gJiYgZG9jdW1lbnQuY3JlYXRlUmFuZ2UgJiYgZWxlbWVudC5jaGlsZE5vZGVzLmxlbmd0aCA+IDApIHtcbiAgICBjb25zdCBzZWxlY3Rpb24gPSBkb2N1bWVudC5nZXRTZWxlY3Rpb24oKTtcblxuICAgIGxldCByYW5nZSA9IHNlbGVjdGlvbi5nZXRSYW5nZUF0KDApO1xuICAgIHJhbmdlLnNldFN0YXJ0KHJhbmdlLmVuZENvbnRhaW5lciwgcmFuZ2UuZW5kT2Zmc2V0KTtcbiAgICByYW5nZS5zZXRFbmRBZnRlcihlbGVtZW50Lmxhc3RDaGlsZCk7XG4gICAgc2VsZWN0aW9uLnJlbW92ZUFsbFJhbmdlcygpO1xuICAgIHNlbGVjdGlvbi5hZGRSYW5nZShyYW5nZSk7XG4gICAgY29uc3QgdGFpbF9sZW4gPSBzZWxlY3Rpb24udG9TdHJpbmcoKS5yZXBsYWNlKC9cXG4vZywgXCJcIikubGVuZ3RoO1xuXG4gICAgZWxlbWVudC5pbm5lclRleHQgPSBlbGVtZW50LmlubmVyVGV4dC5yZXBsYWNlKC9cXG4vZywgXCJcIik7XG4gICAgcmFuZ2UgPSBkb2N1bWVudC5jcmVhdGVSYW5nZSgpO1xuICAgIHJhbmdlLnNldFN0YXJ0KGVsZW1lbnQuY2hpbGROb2Rlc1swXSwgZWxlbWVudC5pbm5lclRleHQubGVuZ3RoIC0gdGFpbF9sZW4pO1xuICAgIHJhbmdlLmNvbGxhcHNlKHRydWUpO1xuICAgIHNlbGVjdGlvbi5yZW1vdmVBbGxSYW5nZXMoKTtcbiAgICBzZWxlY3Rpb24uYWRkUmFuZ2UocmFuZ2UpO1xuICB9XG59XG5mdW5jdGlvbiBtZXJnZVZhbHVlcyhzcmM6IGFueSwgZGVzdDogYW55KSB7XG4gIGlmICghZGVzdCB8fCAhc3JjKSByZXR1cm47XG4gIGlmICh0eXBlb2YgZGVzdCAhPT0gXCJvYmplY3RcIikgcmV0dXJuO1xuICBmb3IgKHZhciBrZXkgaW4gc3JjKSB7XG4gICAgdmFyIHZhbHVlID0gc3JjW2tleV07XG4gICAgaWYgKHZhbHVlICYmIHR5cGVvZiB2YWx1ZSA9PT0gXCJvYmplY3RcIikge1xuICAgICAgaWYgKCFkZXN0W2tleV0gfHwgdHlwZW9mIGRlc3Rba2V5XSAhPT0gXCJvYmplY3RcIikgZGVzdFtrZXldID0ge307XG4gICAgICBtZXJnZVZhbHVlcyh2YWx1ZSwgZGVzdFtrZXldKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZGVzdFtrZXldID0gdmFsdWU7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCB7XG4gIG1lcmdlVmFsdWVzLFxuICBnZXRFbGVtZW50V2lkdGgsXG4gIGlzQ29udGFpbmVyVmlzaWJsZSxcbiAgY2xhc3Nlc1RvU2VsZWN0b3IsXG4gIGNvbXBhcmVWZXJzaW9ucyxcbiAgY29uZmlybUFjdGlvbixcbiAgZGV0ZWN0SUVPckVkZ2UsXG4gIGRldGVjdElFQnJvd3NlcixcbiAgbG9hZEZpbGVGcm9tQmFzZTY0LFxuICBpc01vYmlsZSxcbiAgaXNFbGVtZW50VmlzaWJsZSxcbiAgZmluZFNjcm9sbGFibGVQYXJlbnQsXG4gIHNjcm9sbEVsZW1lbnRCeUNoaWxkSWQsXG4gIGNyZWF0ZVN2ZyxcbiAgZ2V0SWNvbk5hbWVGcm9tUHJveHksXG4gIGluY3JlYXNlSGVpZ2h0QnlDb250ZW50LFxuICBnZXRPcmlnaW5hbEV2ZW50LFxuICBwcmV2ZW50RGVmYXVsdHMsXG4gIGZpbmRQYXJlbnRCeUNsYXNzTmFtZXNcbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IF9fV0VCUEFDS19FWFRFUk5BTF9NT0RVTEVfcmVhY3RfXzsiLCJtb2R1bGUuZXhwb3J0cyA9IF9fV0VCUEFDS19FWFRFUk5BTF9NT0RVTEVfcmVhY3RfZG9tX187IiwibW9kdWxlLmV4cG9ydHMgPSBfX1dFQlBBQ0tfRVhURVJOQUxfTU9EVUxFX3N1cnZleV9jb3JlX187Il0sInNvdXJjZVJvb3QiOiIifQ==
|
|
10657
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9TdXJ2ZXlSZWFjdC93ZWJwYWNrL3VuaXZlcnNhbE1vZHVsZURlZmluaXRpb24iLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3Qvd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9ub2RlX21vZHVsZXMvcHJvY2Vzcy9icm93c2VyLmpzIiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vbm9kZV9tb2R1bGVzL3NldGltbWVkaWF0ZS9zZXRJbW1lZGlhdGUuanMiLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9ub2RlX21vZHVsZXMvdGltZXJzLWJyb3dzZXJpZnkvbWFpbi5qcyIsIndlYnBhY2s6Ly9TdXJ2ZXlSZWFjdC8od2VicGFjaykvYnVpbGRpbi9nbG9iYWwuanMiLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvZW50cmllcy9jb3JlLWV4cG9ydC50cyIsIndlYnBhY2s6Ly9TdXJ2ZXlSZWFjdC8uL3NyYy9lbnRyaWVzL3JlYWN0LXVpLW1vZGVsLnRzIiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vc3JjL2VudHJpZXMvcmVhY3QtdWkudHMiLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvYm9vbGVhbi1jaGVja2JveC50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvYm9vbGVhbi1yYWRpby50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvYm9vbGVhbi50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvY29tcG9uZW50cy9hY3Rpb24tYmFyL2FjdGlvbi1iYXItaXRlbS1kcm9wZG93bi50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvY29tcG9uZW50cy9hY3Rpb24tYmFyL2FjdGlvbi1iYXItaXRlbS50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvY29tcG9uZW50cy9hY3Rpb24tYmFyL2FjdGlvbi1iYXItc2VwYXJhdG9yLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlSZWFjdC8uL3NyYy9yZWFjdC9jb21wb25lbnRzL2FjdGlvbi1iYXIvYWN0aW9uLWJhci50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvY29tcG9uZW50cy9icmFuZC1pbmZvLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlSZWFjdC8uL3NyYy9yZWFjdC9jb21wb25lbnRzL2xpc3QvbGlzdC1pdGVtLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlSZWFjdC8uL3NyYy9yZWFjdC9jb21wb25lbnRzL2xpc3QvbGlzdC50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvY29tcG9uZW50cy9tYXRyaXgtYWN0aW9ucy9kZXRhaWwtYnV0dG9uL2RldGFpbC1idXR0b24udHN4Iiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vc3JjL3JlYWN0L2NvbXBvbmVudHMvbWF0cml4LWFjdGlvbnMvZHJhZy1kcm9wLWljb24vZHJhZy1kcm9wLWljb24udHN4Iiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vc3JjL3JlYWN0L2NvbXBvbmVudHMvbWF0cml4LWFjdGlvbnMvcmVtb3ZlLWJ1dHRvbi9yZW1vdmUtYnV0dG9uLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlSZWFjdC8uL3NyYy9yZWFjdC9jb21wb25lbnRzL21hdHJpeC9yb3cudHN4Iiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vc3JjL3JlYWN0L2NvbXBvbmVudHMvcGFuZWxkeW5hbWljLWFjdGlvbnMvcGFuZWxkeW5hbWljLWFkZC1idG4udHN4Iiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vc3JjL3JlYWN0L2NvbXBvbmVudHMvcGFuZWxkeW5hbWljLWFjdGlvbnMvcGFuZWxkeW5hbWljLW5leHQtYnRuLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlSZWFjdC8uL3NyYy9yZWFjdC9jb21wb25lbnRzL3BhbmVsZHluYW1pYy1hY3Rpb25zL3BhbmVsZHluYW1pYy1wcmV2LWJ0bi50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvY29tcG9uZW50cy9wYW5lbGR5bmFtaWMtYWN0aW9ucy9wYW5lbGR5bmFtaWMtcHJvZ3Jlc3MtdGV4dC50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvY29tcG9uZW50cy9wYW5lbGR5bmFtaWMtYWN0aW9ucy9wYW5lbGR5bmFtaWMtcmVtb3ZlLWJ0bi50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvY29tcG9uZW50cy9wb3B1cC9wb3B1cC50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvY29tcG9uZW50cy9za2VsZXRvbi50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvY29tcG9uZW50cy9zdXJ2ZXktYWN0aW9ucy9zdXJ2ZXktbmF2LWJ1dHRvbi50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvY29tcG9uZW50cy9zdXJ2ZXktaGVhZGVyL2xvZ28taW1hZ2UudHN4Iiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vc3JjL3JlYWN0L2NvbXBvbmVudHMvc3VydmV5LWhlYWRlci9zdXJ2ZXktaGVhZGVyLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlSZWFjdC8uL3NyYy9yZWFjdC9jb21wb25lbnRzL3N2Zy1pY29uL3N2Zy1pY29uLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlSZWFjdC8uL3NyYy9yZWFjdC9jb21wb25lbnRzL3RpdGxlL3RpdGxlLWFjdGlvbnMudHN4Iiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vc3JjL3JlYWN0L2NvbXBvbmVudHMvdGl0bGUvdGl0bGUtY29udGVudC50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvY29tcG9uZW50cy90aXRsZS90aXRsZS1lbGVtZW50LnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlSZWFjdC8uL3NyYy9yZWFjdC9jdXN0b20td2lkZ2V0LnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlSZWFjdC8uL3NyYy9yZWFjdC9kcm9wZG93bi1iYXNlLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlSZWFjdC8uL3NyYy9yZWFjdC9kcm9wZG93bi1pdGVtLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlSZWFjdC8uL3NyYy9yZWFjdC9kcm9wZG93bi1zZWxlY3QudHN4Iiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vc3JjL3JlYWN0L2VsZW1lbnQtZmFjdG9yeS50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvZWxlbWVudC1oZWFkZXIudHN4Iiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vc3JjL3JlYWN0L2Zsb3ctcGFuZWwudHN4Iiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vc3JjL3JlYWN0L2ltYWdlLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlSZWFjdC8uL3NyYy9yZWFjdC9pbWFnZXBpY2tlci50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvcGFnZS50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvcGFuZWwtYmFzZS50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvcGFuZWwudHN4Iiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vc3JjL3JlYWN0L3JhdGluZy1kcm9wZG93bi50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvcmVhY3QtcG9wdXAtc3VydmV5LnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlSZWFjdC8uL3NyYy9yZWFjdC9yZWFjdFN1cnZleS50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvcmVhY3RTdXJ2ZXlOYXZpZ2F0aW9uQmFzZS50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvcmVhY3RTdXJ2ZXlQcm9ncmVzcy50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvcmVhY3RTdXJ2ZXlQcm9ncmVzc0J1dHRvbnMudHN4Iiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vc3JjL3JlYWN0L3JlYWN0cXVlc3Rpb24udHN4Iiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vc3JjL3JlYWN0L3JlYWN0cXVlc3Rpb25fYnV0dG9uZ3JvdXAudHN4Iiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vc3JjL3JlYWN0L3JlYWN0cXVlc3Rpb25fY2hlY2tib3gudHN4Iiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vc3JjL3JlYWN0L3JlYWN0cXVlc3Rpb25fY29tbWVudC50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvcmVhY3RxdWVzdGlvbl9jdXN0b20udHN4Iiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vc3JjL3JlYWN0L3JlYWN0cXVlc3Rpb25fZHJvcGRvd24udHN4Iiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vc3JjL3JlYWN0L3JlYWN0cXVlc3Rpb25fZWxlbWVudC50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvcmVhY3RxdWVzdGlvbl9lbXB0eS50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvcmVhY3RxdWVzdGlvbl9leHByZXNzaW9uLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlSZWFjdC8uL3NyYy9yZWFjdC9yZWFjdHF1ZXN0aW9uX2ZhY3RvcnkudHN4Iiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vc3JjL3JlYWN0L3JlYWN0cXVlc3Rpb25fZmlsZS50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvcmVhY3RxdWVzdGlvbl9odG1sLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlSZWFjdC8uL3NyYy9yZWFjdC9yZWFjdHF1ZXN0aW9uX21hdHJpeC50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvcmVhY3RxdWVzdGlvbl9tYXRyaXhkcm9wZG93bi50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvcmVhY3RxdWVzdGlvbl9tYXRyaXhkcm9wZG93bmJhc2UudHN4Iiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vc3JjL3JlYWN0L3JlYWN0cXVlc3Rpb25fbWF0cml4ZHluYW1pYy50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvcmVhY3RxdWVzdGlvbl9tdWx0aXBsZXRleHQudHN4Iiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vc3JjL3JlYWN0L3JlYWN0cXVlc3Rpb25fcGFuZWxkeW5hbWljLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlSZWFjdC8uL3NyYy9yZWFjdC9yZWFjdHF1ZXN0aW9uX3JhZGlvZ3JvdXAudHN4Iiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vc3JjL3JlYWN0L3JlYWN0cXVlc3Rpb25fcmFua2luZy50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3QvcmVhY3RxdWVzdGlvbl9yYXRpbmcudHN4Iiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vc3JjL3JlYWN0L3JlYWN0cXVlc3Rpb25fdGFnYm94LnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlSZWFjdC8uL3NyYy9yZWFjdC9yZWFjdHF1ZXN0aW9uX3RleHQudHN4Iiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vc3JjL3JlYWN0L3JlYWN0c3VydmV5bW9kZWwudHN4Iiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vc3JjL3JlYWN0L3JlYWN0dGltZXJwYW5lbC50c3giLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvLi9zcmMvcmVhY3Qvcm93LnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlSZWFjdC8uL3NyYy9yZWFjdC9zaWduYXR1cmVwYWQudHN4Iiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vc3JjL3JlYWN0L3N0cmluZy1lZGl0b3IudHN4Iiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vc3JjL3JlYWN0L3N0cmluZy12aWV3ZXIudHN4Iiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vc3JjL3JlYWN0L3RhZ2JveC1maWx0ZXIudHN4Iiwid2VicGFjazovL1N1cnZleVJlYWN0Ly4vc3JjL3JlYWN0L3RhZ2JveC1pdGVtLnRzeCIsIndlYnBhY2s6Ly9TdXJ2ZXlSZWFjdC8uL3NyYy9zZXR0aW5ncy50cyIsIndlYnBhY2s6Ly9TdXJ2ZXlSZWFjdC8uL3NyYy91dGlscy9yZXNwb25zaXZpdHktbWFuYWdlci50cyIsIndlYnBhY2s6Ly9TdXJ2ZXlSZWFjdC8uL3NyYy91dGlscy91dGlscy50cyIsIndlYnBhY2s6Ly9TdXJ2ZXlSZWFjdC9leHRlcm5hbCB7XCJyb290XCI6XCJSZWFjdFwiLFwiY29tbW9uanMyXCI6XCJyZWFjdFwiLFwiY29tbW9uanNcIjpcInJlYWN0XCIsXCJhbWRcIjpcInJlYWN0XCJ9Iiwid2VicGFjazovL1N1cnZleVJlYWN0L2V4dGVybmFsIHtcInJvb3RcIjpcIlJlYWN0RE9NXCIsXCJjb21tb25qczJcIjpcInJlYWN0LWRvbVwiLFwiY29tbW9uanNcIjpcInJlYWN0LWRvbVwiLFwiYW1kXCI6XCJyZWFjdC1kb21cIn0iLCJ3ZWJwYWNrOi8vU3VydmV5UmVhY3QvZXh0ZXJuYWwge1wicm9vdFwiOlwiU3VydmV5XCIsXCJjb21tb25qczJcIjpcInN1cnZleS1jb3JlXCIsXCJjb21tb25qc1wiOlwic3VydmV5LWNvcmVcIixcImFtZFwiOlwic3VydmV5LWNvcmVcIn0iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0QsTztRQ1ZBO1FBQ0E7O1FBRUE7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTs7UUFFQTtRQUNBOztRQUVBO1FBQ0E7O1FBRUE7UUFDQTtRQUNBOzs7UUFHQTtRQUNBOztRQUVBO1FBQ0E7O1FBRUE7UUFDQTtRQUNBO1FBQ0EsMENB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O0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EseUNBQXlDO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxVQUFVO0FBQ1Y7QUFDQTs7QUFFQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQSxLQUFLO0FBQ0w7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxDQUFDOzs7Ozs7Ozs7Ozs7O0FDekxEO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQSxtQkFBTyxDQUFDLGlFQUFjO0FBQ3RCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7OztBQzlEQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLDRDQUE0Qzs7QUFFNUM7Ozs7Ozs7Ozs7Ozs7QUNuQkE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBNkQ7QUFDdEI7QUFDeUI7Ozs7Ozs7Ozs7Ozs7QUNGaEU7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBQVE7QUFDdUQ7QUFDUTtBQUNHO0FBQ2Q7QUFDakI7QUFDRjtBQUNJO0FBQ1M7QUFNdEI7QUFLUTtBQUlBO0FBSUM7QUFJRDtBQUNvQjtBQUNNO0FBQ0U7QUFDSztBQUNUO0FBQ0s7QUFDRztBQUlqQztBQUMwQjtBQUNBO0FBQ2dCO0FBQ3FCO0FBQ3JDO0FBQ1I7QUFDaUI7QUFDTjtBQUNEO0FBQzREO0FBQzFDO0FBQ29DO0FBQ3hDO0FBQ25CO0FBQ2M7QUFDUDtBQUNHO0FBQ0s7QUFDTDtBQUNGO0FBQ1A7QUFDRTtBQUNaO0FBQ2M7QUFDWTtBQUNlO0FBRXRDO0FBQ0g7QUFDa0I7QUFDQTtBQUNLO0FBQ0g7QUFDTTtBQUNmO0FBQ3lEO0FBQ1A7QUFDUztBQUNQO0FBQ007QUFDSjtBQUNBO0FBQ087QUFDL0I7QUFFbkM7QUFDSDtBQUVPO0FBQ0E7QUFFL0QsZ0RBQWdEO0FBQ2hELG1GQUFtRjs7Ozs7Ozs7Ozs7OztBQy9GbkY7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQWlDO0FBQ0g7QUFDcUI7QUFFTDtBQUNOO0FBRVU7QUFFbEQsdUVBQW1CLENBQUMsVUFBRyxRQUFtQixDQUFFLEVBQUUsaUJBQWlCLENBQUMsQ0FBQzs7Ozs7Ozs7Ozs7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Ozs7Ozs7Ozs7QUNBQSx1RDs7Ozs7Ozs7Ozs7QUNBQSx5RCIsImZpbGUiOiJzdXJ2ZXktcmVhY3QtdWkuanMiLCJzb3VyY2VzQ29udGVudCI6WyIoZnVuY3Rpb24gd2VicGFja1VuaXZlcnNhbE1vZHVsZURlZmluaXRpb24ocm9vdCwgZmFjdG9yeSkge1xuXHRpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSA9PT0gJ29iamVjdCcpXG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KHJlcXVpcmUoXCJyZWFjdFwiKSwgcmVxdWlyZShcInJlYWN0LWRvbVwiKSwgcmVxdWlyZShcInN1cnZleS1jb3JlXCIpKTtcblx0ZWxzZSBpZih0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpXG5cdFx0ZGVmaW5lKFwic3VydmV5LXJlYWN0LXVpXCIsIFtcInJlYWN0XCIsIFwicmVhY3QtZG9tXCIsIFwic3VydmV5LWNvcmVcIl0sIGZhY3RvcnkpO1xuXHRlbHNlIGlmKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0Jylcblx0XHRleHBvcnRzW1wic3VydmV5LXJlYWN0LXVpXCJdID0gZmFjdG9yeShyZXF1aXJlKFwicmVhY3RcIiksIHJlcXVpcmUoXCJyZWFjdC1kb21cIiksIHJlcXVpcmUoXCJzdXJ2ZXktY29yZVwiKSk7XG5cdGVsc2Vcblx0XHRyb290W1wiU3VydmV5UmVhY3RcIl0gPSBmYWN0b3J5KHJvb3RbXCJSZWFjdFwiXSwgcm9vdFtcIlJlYWN0RE9NXCJdLCByb290W1wiU3VydmV5XCJdKTtcbn0pKHRoaXMsIGZ1bmN0aW9uKF9fV0VCUEFDS19FWFRFUk5BTF9NT0RVTEVfcmVhY3RfXywgX19XRUJQQUNLX0VYVEVSTkFMX01PRFVMRV9yZWFjdF9kb21fXywgX19XRUJQQUNLX0VYVEVSTkFMX01PRFVMRV9zdXJ2ZXlfY29yZV9fKSB7XG5yZXR1cm4gIiwiIFx0Ly8gVGhlIG1vZHVsZSBjYWNoZVxuIFx0dmFyIGluc3RhbGxlZE1vZHVsZXMgPSB7fTtcblxuIFx0Ly8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbiBcdGZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblxuIFx0XHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcbiBcdFx0aWYoaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0pIHtcbiBcdFx0XHRyZXR1cm4gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0uZXhwb3J0cztcbiBcdFx0fVxuIFx0XHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuIFx0XHR2YXIgbW9kdWxlID0gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0gPSB7XG4gXHRcdFx0aTogbW9kdWxlSWQsXG4gXHRcdFx0bDogZmFsc2UsXG4gXHRcdFx0ZXhwb3J0czoge31cbiBcdFx0fTtcblxuIFx0XHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cbiBcdFx0bW9kdWxlc1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cbiBcdFx0Ly8gRmxhZyB0aGUgbW9kdWxlIGFzIGxvYWRlZFxuIFx0XHRtb2R1bGUubCA9IHRydWU7XG5cbiBcdFx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcbiBcdFx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xuIFx0fVxuXG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlcyBvYmplY3QgKF9fd2VicGFja19tb2R1bGVzX18pXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm0gPSBtb2R1bGVzO1xuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZSBjYWNoZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5jID0gaW5zdGFsbGVkTW9kdWxlcztcblxuIFx0Ly8gZGVmaW5lIGdldHRlciBmdW5jdGlvbiBmb3IgaGFybW9ueSBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSBmdW5jdGlvbihleHBvcnRzLCBuYW1lLCBnZXR0ZXIpIHtcbiBcdFx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBuYW1lKSkge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBuYW1lLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZ2V0dGVyIH0pO1xuIFx0XHR9XG4gXHR9O1xuXG4gXHQvLyBkZWZpbmUgX19lc01vZHVsZSBvbiBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIgPSBmdW5jdGlvbihleHBvcnRzKSB7XG4gXHRcdGlmKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC50b1N0cmluZ1RhZykge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBTeW1ib2wudG9TdHJpbmdUYWcsIHsgdmFsdWU6ICdNb2R1bGUnIH0pO1xuIFx0XHR9XG4gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4gXHR9O1xuXG4gXHQvLyBjcmVhdGUgYSBmYWtlIG5hbWVzcGFjZSBvYmplY3RcbiBcdC8vIG1vZGUgJiAxOiB2YWx1ZSBpcyBhIG1vZHVsZSBpZCwgcmVxdWlyZSBpdFxuIFx0Ly8gbW9kZSAmIDI6IG1lcmdlIGFsbCBwcm9wZXJ0aWVzIG9mIHZhbHVlIGludG8gdGhlIG5zXG4gXHQvLyBtb2RlICYgNDogcmV0dXJuIHZhbHVlIHdoZW4gYWxyZWFkeSBucyBvYmplY3RcbiBcdC8vIG1vZGUgJiA4fDE6IGJlaGF2ZSBsaWtlIHJlcXVpcmVcbiBcdF9fd2VicGFja19yZXF1aXJlX18udCA9IGZ1bmN0aW9uKHZhbHVlLCBtb2RlKSB7XG4gXHRcdGlmKG1vZGUgJiAxKSB2YWx1ZSA9IF9fd2VicGFja19yZXF1aXJlX18odmFsdWUpO1xuIFx0XHRpZihtb2RlICYgOCkgcmV0dXJuIHZhbHVlO1xuIFx0XHRpZigobW9kZSAmIDQpICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgJiYgdmFsdWUuX19lc01vZHVsZSkgcmV0dXJuIHZhbHVlO1xuIFx0XHR2YXIgbnMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIobnMpO1xuIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkobnMsICdkZWZhdWx0JywgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdmFsdWUgfSk7XG4gXHRcdGlmKG1vZGUgJiAyICYmIHR5cGVvZiB2YWx1ZSAhPSAnc3RyaW5nJykgZm9yKHZhciBrZXkgaW4gdmFsdWUpIF9fd2VicGFja19yZXF1aXJlX18uZChucywga2V5LCBmdW5jdGlvbihrZXkpIHsgcmV0dXJuIHZhbHVlW2tleV07IH0uYmluZChudWxsLCBrZXkpKTtcbiBcdFx0cmV0dXJuIG5zO1xuIFx0fTtcblxuIFx0Ly8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubiA9IGZ1bmN0aW9uKG1vZHVsZSkge1xuIFx0XHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cbiBcdFx0XHRmdW5jdGlvbiBnZXREZWZhdWx0KCkgeyByZXR1cm4gbW9kdWxlWydkZWZhdWx0J107IH0gOlxuIFx0XHRcdGZ1bmN0aW9uIGdldE1vZHVsZUV4cG9ydHMoKSB7IHJldHVybiBtb2R1bGU7IH07XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18uZChnZXR0ZXIsICdhJywgZ2V0dGVyKTtcbiBcdFx0cmV0dXJuIGdldHRlcjtcbiBcdH07XG5cbiBcdC8vIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbFxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5vID0gZnVuY3Rpb24ob2JqZWN0LCBwcm9wZXJ0eSkgeyByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpOyB9O1xuXG4gXHQvLyBfX3dlYnBhY2tfcHVibGljX3BhdGhfX1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5wID0gXCJcIjtcblxuXG4gXHQvLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbiBcdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKF9fd2VicGFja19yZXF1aXJlX18ucyA9IFwiLi9zcmMvZW50cmllcy9yZWFjdC11aS50c1wiKTtcbiIsIi8vIHNoaW0gZm9yIHVzaW5nIHByb2Nlc3MgaW4gYnJvd3NlclxudmFyIHByb2Nlc3MgPSBtb2R1bGUuZXhwb3J0cyA9IHt9O1xuXG4vLyBjYWNoZWQgZnJvbSB3aGF0ZXZlciBnbG9iYWwgaXMgcHJlc2VudCBzbyB0aGF0IHRlc3QgcnVubmVycyB0aGF0IHN0dWIgaXRcbi8vIGRvbid0IGJyZWFrIHRoaW5ncy4gIEJ1dCB3ZSBuZWVkIHRvIHdyYXAgaXQgaW4gYSB0cnkgY2F0Y2ggaW4gY2FzZSBpdCBpc1xuLy8gd3JhcHBlZCBpbiBzdHJpY3QgbW9kZSBjb2RlIHdoaWNoIGRvZXNuJ3QgZGVmaW5lIGFueSBnbG9iYWxzLiAgSXQncyBpbnNpZGUgYVxuLy8gZnVuY3Rpb24gYmVjYXVzZSB0cnkvY2F0Y2hlcyBkZW9wdGltaXplIGluIGNlcnRhaW4gZW5naW5lcy5cblxudmFyIGNhY2hlZFNldFRpbWVvdXQ7XG52YXIgY2FjaGVkQ2xlYXJUaW1lb3V0O1xuXG5mdW5jdGlvbiBkZWZhdWx0U2V0VGltb3V0KCkge1xuICAgIHRocm93IG5ldyBFcnJvcignc2V0VGltZW91dCBoYXMgbm90IGJlZW4gZGVmaW5lZCcpO1xufVxuZnVuY3Rpb24gZGVmYXVsdENsZWFyVGltZW91dCAoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdjbGVhclRpbWVvdXQgaGFzIG5vdCBiZWVuIGRlZmluZWQnKTtcbn1cbihmdW5jdGlvbiAoKSB7XG4gICAgdHJ5IHtcbiAgICAgICAgaWYgKHR5cGVvZiBzZXRUaW1lb3V0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBjYWNoZWRTZXRUaW1lb3V0ID0gc2V0VGltZW91dDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNhY2hlZFNldFRpbWVvdXQgPSBkZWZhdWx0U2V0VGltb3V0O1xuICAgICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBjYWNoZWRTZXRUaW1lb3V0ID0gZGVmYXVsdFNldFRpbW91dDtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgaWYgKHR5cGVvZiBjbGVhclRpbWVvdXQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIGNhY2hlZENsZWFyVGltZW91dCA9IGNsZWFyVGltZW91dDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNhY2hlZENsZWFyVGltZW91dCA9IGRlZmF1bHRDbGVhclRpbWVvdXQ7XG4gICAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGNhY2hlZENsZWFyVGltZW91dCA9IGRlZmF1bHRDbGVhclRpbWVvdXQ7XG4gICAgfVxufSAoKSlcbmZ1bmN0aW9uIHJ1blRpbWVvdXQoZnVuKSB7XG4gICAgaWYgKGNhY2hlZFNldFRpbWVvdXQgPT09IHNldFRpbWVvdXQpIHtcbiAgICAgICAgLy9ub3JtYWwgZW52aXJvbWVudHMgaW4gc2FuZSBzaXR1YXRpb25zXG4gICAgICAgIHJldHVybiBzZXRUaW1lb3V0KGZ1biwgMCk7XG4gICAgfVxuICAgIC8vIGlmIHNldFRpbWVvdXQgd2Fzbid0IGF2YWlsYWJsZSBidXQgd2FzIGxhdHRlciBkZWZpbmVkXG4gICAgaWYgKChjYWNoZWRTZXRUaW1lb3V0ID09PSBkZWZhdWx0U2V0VGltb3V0IHx8ICFjYWNoZWRTZXRUaW1lb3V0KSAmJiBzZXRUaW1lb3V0KSB7XG4gICAgICAgIGNhY2hlZFNldFRpbWVvdXQgPSBzZXRUaW1lb3V0O1xuICAgICAgICByZXR1cm4gc2V0VGltZW91dChmdW4sIDApO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICAvLyB3aGVuIHdoZW4gc29tZWJvZHkgaGFzIHNjcmV3ZWQgd2l0aCBzZXRUaW1lb3V0IGJ1dCBubyBJLkUuIG1hZGRuZXNzXG4gICAgICAgIHJldHVybiBjYWNoZWRTZXRUaW1lb3V0KGZ1biwgMCk7XG4gICAgfSBjYXRjaChlKXtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIC8vIFdoZW4gd2UgYXJlIGluIEkuRS4gYnV0IHRoZSBzY3JpcHQgaGFzIGJlZW4gZXZhbGVkIHNvIEkuRS4gZG9lc24ndCB0cnVzdCB0aGUgZ2xvYmFsIG9iamVjdCB3aGVuIGNhbGxlZCBub3JtYWxseVxuICAgICAgICAgICAgcmV0dXJuIGNhY2hlZFNldFRpbWVvdXQuY2FsbChudWxsLCBmdW4sIDApO1xuICAgICAgICB9IGNhdGNoKGUpe1xuICAgICAgICAgICAgLy8gc2FtZSBhcyBhYm92ZSBidXQgd2hlbiBpdCdzIGEgdmVyc2lvbiBvZiBJLkUuIHRoYXQgbXVzdCBoYXZlIHRoZSBnbG9iYWwgb2JqZWN0IGZvciAndGhpcycsIGhvcGZ1bGx5IG91ciBjb250ZXh0IGNvcnJlY3Qgb3RoZXJ3aXNlIGl0IHdpbGwgdGhyb3cgYSBnbG9iYWwgZXJyb3JcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWRTZXRUaW1lb3V0LmNhbGwodGhpcywgZnVuLCAwKTtcbiAgICAgICAgfVxuICAgIH1cblxuXG59XG5mdW5jdGlvbiBydW5DbGVhclRpbWVvdXQobWFya2VyKSB7XG4gICAgaWYgKGNhY2hlZENsZWFyVGltZW91dCA9PT0gY2xlYXJUaW1lb3V0KSB7XG4gICAgICAgIC8vbm9ybWFsIGVudmlyb21lbnRzIGluIHNhbmUgc2l0dWF0aW9uc1xuICAgICAgICByZXR1cm4gY2xlYXJUaW1lb3V0KG1hcmtlcik7XG4gICAgfVxuICAgIC8vIGlmIGNsZWFyVGltZW91dCB3YXNuJ3QgYXZhaWxhYmxlIGJ1dCB3YXMgbGF0dGVyIGRlZmluZWRcbiAgICBpZiAoKGNhY2hlZENsZWFyVGltZW91dCA9PT0gZGVmYXVsdENsZWFyVGltZW91dCB8fCAhY2FjaGVkQ2xlYXJUaW1lb3V0KSAmJiBjbGVhclRpbWVvdXQpIHtcbiAgICAgICAgY2FjaGVkQ2xlYXJUaW1lb3V0ID0gY2xlYXJUaW1lb3V0O1xuICAgICAgICByZXR1cm4gY2xlYXJUaW1lb3V0KG1hcmtlcik7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIC8vIHdoZW4gd2hlbiBzb21lYm9keSBoYXMgc2NyZXdlZCB3aXRoIHNldFRpbWVvdXQgYnV0IG5vIEkuRS4gbWFkZG5lc3NcbiAgICAgICAgcmV0dXJuIGNhY2hlZENsZWFyVGltZW91dChtYXJrZXIpO1xuICAgIH0gY2F0Y2ggKGUpe1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgLy8gV2hlbiB3ZSBhcmUgaW4gSS5FLiBidXQgdGhlIHNjcmlwdCBoYXMgYmVlbiBldmFsZWQgc28gSS5FLiBkb2Vzbid0ICB0cnVzdCB0aGUgZ2xvYmFsIG9iamVjdCB3aGVuIGNhbGxlZCBub3JtYWxseVxuICAgICAgICAgICAgcmV0dXJuIGNhY2hlZENsZWFyVGltZW91dC5jYWxsKG51bGwsIG1hcmtlcik7XG4gICAgICAgIH0gY2F0Y2ggKGUpe1xuICAgICAgICAgICAgLy8gc2FtZSBhcyBhYm92ZSBidXQgd2hlbiBpdCdzIGEgdmVyc2lvbiBvZiBJLkUuIHRoYXQgbXVzdCBoYXZlIHRoZSBnbG9iYWwgb2JqZWN0IGZvciAndGhpcycsIGhvcGZ1bGx5IG91ciBjb250ZXh0IGNvcnJlY3Qgb3RoZXJ3aXNlIGl0IHdpbGwgdGhyb3cgYSBnbG9iYWwgZXJyb3IuXG4gICAgICAgICAgICAvLyBTb21lIHZlcnNpb25zIG9mIEkuRS4gaGF2ZSBkaWZmZXJlbnQgcnVsZXMgZm9yIGNsZWFyVGltZW91dCB2cyBzZXRUaW1lb3V0XG4gICAgICAgICAgICByZXR1cm4gY2FjaGVkQ2xlYXJUaW1lb3V0LmNhbGwodGhpcywgbWFya2VyKTtcbiAgICAgICAgfVxuICAgIH1cblxuXG5cbn1cbnZhciBxdWV1ZSA9IFtdO1xudmFyIGRyYWluaW5nID0gZmFsc2U7XG52YXIgY3VycmVudFF1ZXVlO1xudmFyIHF1ZXVlSW5kZXggPSAtMTtcblxuZnVuY3Rpb24gY2xlYW5VcE5leHRUaWNrKCkge1xuICAgIGlmICghZHJhaW5pbmcgfHwgIWN1cnJlbnRRdWV1ZSkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGRyYWluaW5nID0gZmFsc2U7XG4gICAgaWYgKGN1cnJlbnRRdWV1ZS5sZW5ndGgpIHtcbiAgICAgICAgcXVldWUgPSBjdXJyZW50UXVldWUuY29uY2F0KHF1ZXVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBxdWV1ZUluZGV4ID0gLTE7XG4gICAgfVxuICAgIGlmIChxdWV1ZS5sZW5ndGgpIHtcbiAgICAgICAgZHJhaW5RdWV1ZSgpO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gZHJhaW5RdWV1ZSgpIHtcbiAgICBpZiAoZHJhaW5pbmcpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2YXIgdGltZW91dCA9IHJ1blRpbWVvdXQoY2xlYW5VcE5leHRUaWNrKTtcbiAgICBkcmFpbmluZyA9IHRydWU7XG5cbiAgICB2YXIgbGVuID0gcXVldWUubGVuZ3RoO1xuICAgIHdoaWxlKGxlbikge1xuICAgICAgICBjdXJyZW50UXVldWUgPSBxdWV1ZTtcbiAgICAgICAgcXVldWUgPSBbXTtcbiAgICAgICAgd2hpbGUgKCsrcXVldWVJbmRleCA8IGxlbikge1xuICAgICAgICAgICAgaWYgKGN1cnJlbnRRdWV1ZSkge1xuICAgICAgICAgICAgICAgIGN1cnJlbnRRdWV1ZVtxdWV1ZUluZGV4XS5ydW4oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBxdWV1ZUluZGV4ID0gLTE7XG4gICAgICAgIGxlbiA9IHF1ZXVlLmxlbmd0aDtcbiAgICB9XG4gICAgY3VycmVudFF1ZXVlID0gbnVsbDtcbiAgICBkcmFpbmluZyA9IGZhbHNlO1xuICAgIHJ1bkNsZWFyVGltZW91dCh0aW1lb3V0KTtcbn1cblxucHJvY2Vzcy5uZXh0VGljayA9IGZ1bmN0aW9uIChmdW4pIHtcbiAgICB2YXIgYXJncyA9IG5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoIC0gMSk7XG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBhcmdzW2kgLSAxXSA9IGFyZ3VtZW50c1tpXTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBxdWV1ZS5wdXNoKG5ldyBJdGVtKGZ1biwgYXJncykpO1xuICAgIGlmIChxdWV1ZS5sZW5ndGggPT09IDEgJiYgIWRyYWluaW5nKSB7XG4gICAgICAgIHJ1blRpbWVvdXQoZHJhaW5RdWV1ZSk7XG4gICAgfVxufTtcblxuLy8gdjggbGlrZXMgcHJlZGljdGlibGUgb2JqZWN0c1xuZnVuY3Rpb24gSXRlbShmdW4sIGFycmF5KSB7XG4gICAgdGhpcy5mdW4gPSBmdW47XG4gICAgdGhpcy5hcnJheSA9IGFycmF5O1xufVxuSXRlbS5wcm90b3R5cGUucnVuID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuZnVuLmFwcGx5KG51bGwsIHRoaXMuYXJyYXkpO1xufTtcbnByb2Nlc3MudGl0bGUgPSAnYnJvd3Nlcic7XG5wcm9jZXNzLmJyb3dzZXIgPSB0cnVlO1xucHJvY2Vzcy5lbnYgPSB7fTtcbnByb2Nlc3MuYXJndiA9IFtdO1xucHJvY2Vzcy52ZXJzaW9uID0gJyc7IC8vIGVtcHR5IHN0cmluZyB0byBhdm9pZCByZWdleHAgaXNzdWVzXG5wcm9jZXNzLnZlcnNpb25zID0ge307XG5cbmZ1bmN0aW9uIG5vb3AoKSB7fVxuXG5wcm9jZXNzLm9uID0gbm9vcDtcbnByb2Nlc3MuYWRkTGlzdGVuZXIgPSBub29wO1xucHJvY2Vzcy5vbmNlID0gbm9vcDtcbnByb2Nlc3Mub2ZmID0gbm9vcDtcbnByb2Nlc3MucmVtb3ZlTGlzdGVuZXIgPSBub29wO1xucHJvY2Vzcy5yZW1vdmVBbGxMaXN0ZW5lcnMgPSBub29wO1xucHJvY2Vzcy5lbWl0ID0gbm9vcDtcbnByb2Nlc3MucHJlcGVuZExpc3RlbmVyID0gbm9vcDtcbnByb2Nlc3MucHJlcGVuZE9uY2VMaXN0ZW5lciA9IG5vb3A7XG5cbnByb2Nlc3MubGlzdGVuZXJzID0gZnVuY3Rpb24gKG5hbWUpIHsgcmV0dXJuIFtdIH1cblxucHJvY2Vzcy5iaW5kaW5nID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3Byb2Nlc3MuYmluZGluZyBpcyBub3Qgc3VwcG9ydGVkJyk7XG59O1xuXG5wcm9jZXNzLmN3ZCA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuICcvJyB9O1xucHJvY2Vzcy5jaGRpciA9IGZ1bmN0aW9uIChkaXIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3Byb2Nlc3MuY2hkaXIgaXMgbm90IHN1cHBvcnRlZCcpO1xufTtcbnByb2Nlc3MudW1hc2sgPSBmdW5jdGlvbigpIHsgcmV0dXJuIDA7IH07XG4iLCIoZnVuY3Rpb24gKGdsb2JhbCwgdW5kZWZpbmVkKSB7XG4gICAgXCJ1c2Ugc3RyaWN0XCI7XG5cbiAgICBpZiAoZ2xvYmFsLnNldEltbWVkaWF0ZSkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIG5leHRIYW5kbGUgPSAxOyAvLyBTcGVjIHNheXMgZ3JlYXRlciB0aGFuIHplcm9cbiAgICB2YXIgdGFza3NCeUhhbmRsZSA9IHt9O1xuICAgIHZhciBjdXJyZW50bHlSdW5uaW5nQVRhc2sgPSBmYWxzZTtcbiAgICB2YXIgZG9jID0gZ2xvYmFsLmRvY3VtZW50O1xuICAgIHZhciByZWdpc3RlckltbWVkaWF0ZTtcblxuICAgIGZ1bmN0aW9uIHNldEltbWVkaWF0ZShjYWxsYmFjaykge1xuICAgICAgLy8gQ2FsbGJhY2sgY2FuIGVpdGhlciBiZSBhIGZ1bmN0aW9uIG9yIGEgc3RyaW5nXG4gICAgICBpZiAodHlwZW9mIGNhbGxiYWNrICE9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgY2FsbGJhY2sgPSBuZXcgRnVuY3Rpb24oXCJcIiArIGNhbGxiYWNrKTtcbiAgICAgIH1cbiAgICAgIC8vIENvcHkgZnVuY3Rpb24gYXJndW1lbnRzXG4gICAgICB2YXIgYXJncyA9IG5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoIC0gMSk7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyZ3MubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBhcmdzW2ldID0gYXJndW1lbnRzW2kgKyAxXTtcbiAgICAgIH1cbiAgICAgIC8vIFN0b3JlIGFuZCByZWdpc3RlciB0aGUgdGFza1xuICAgICAgdmFyIHRhc2sgPSB7IGNhbGxiYWNrOiBjYWxsYmFjaywgYXJnczogYXJncyB9O1xuICAgICAgdGFza3NCeUhhbmRsZVtuZXh0SGFuZGxlXSA9IHRhc2s7XG4gICAgICByZWdpc3RlckltbWVkaWF0ZShuZXh0SGFuZGxlKTtcbiAgICAgIHJldHVybiBuZXh0SGFuZGxlKys7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY2xlYXJJbW1lZGlhdGUoaGFuZGxlKSB7XG4gICAgICAgIGRlbGV0ZSB0YXNrc0J5SGFuZGxlW2hhbmRsZV07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcnVuKHRhc2spIHtcbiAgICAgICAgdmFyIGNhbGxiYWNrID0gdGFzay5jYWxsYmFjaztcbiAgICAgICAgdmFyIGFyZ3MgPSB0YXNrLmFyZ3M7XG4gICAgICAgIHN3aXRjaCAoYXJncy5sZW5ndGgpIHtcbiAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICBjYWxsYmFjayhhcmdzWzBdKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICBjYWxsYmFjayhhcmdzWzBdLCBhcmdzWzFdKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICBjYWxsYmFjayhhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgY2FsbGJhY2suYXBwbHkodW5kZWZpbmVkLCBhcmdzKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcnVuSWZQcmVzZW50KGhhbmRsZSkge1xuICAgICAgICAvLyBGcm9tIHRoZSBzcGVjOiBcIldhaXQgdW50aWwgYW55IGludm9jYXRpb25zIG9mIHRoaXMgYWxnb3JpdGhtIHN0YXJ0ZWQgYmVmb3JlIHRoaXMgb25lIGhhdmUgY29tcGxldGVkLlwiXG4gICAgICAgIC8vIFNvIGlmIHdlJ3JlIGN1cnJlbnRseSBydW5uaW5nIGEgdGFzaywgd2UnbGwgbmVlZCB0byBkZWxheSB0aGlzIGludm9jYXRpb24uXG4gICAgICAgIGlmIChjdXJyZW50bHlSdW5uaW5nQVRhc2spIHtcbiAgICAgICAgICAgIC8vIERlbGF5IGJ5IGRvaW5nIGEgc2V0VGltZW91dC4gc2V0SW1tZWRpYXRlIHdhcyB0cmllZCBpbnN0ZWFkLCBidXQgaW4gRmlyZWZveCA3IGl0IGdlbmVyYXRlZCBhXG4gICAgICAgICAgICAvLyBcInRvbyBtdWNoIHJlY3Vyc2lvblwiIGVycm9yLlxuICAgICAgICAgICAgc2V0VGltZW91dChydW5JZlByZXNlbnQsIDAsIGhhbmRsZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YXIgdGFzayA9IHRhc2tzQnlIYW5kbGVbaGFuZGxlXTtcbiAgICAgICAgICAgIGlmICh0YXNrKSB7XG4gICAgICAgICAgICAgICAgY3VycmVudGx5UnVubmluZ0FUYXNrID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBydW4odGFzayk7XG4gICAgICAgICAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgICAgICAgY2xlYXJJbW1lZGlhdGUoaGFuZGxlKTtcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudGx5UnVubmluZ0FUYXNrID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaW5zdGFsbE5leHRUaWNrSW1wbGVtZW50YXRpb24oKSB7XG4gICAgICAgIHJlZ2lzdGVySW1tZWRpYXRlID0gZnVuY3Rpb24oaGFuZGxlKSB7XG4gICAgICAgICAgICBwcm9jZXNzLm5leHRUaWNrKGZ1bmN0aW9uICgpIHsgcnVuSWZQcmVzZW50KGhhbmRsZSk7IH0pO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNhblVzZVBvc3RNZXNzYWdlKCkge1xuICAgICAgICAvLyBUaGUgdGVzdCBhZ2FpbnN0IGBpbXBvcnRTY3JpcHRzYCBwcmV2ZW50cyB0aGlzIGltcGxlbWVudGF0aW9uIGZyb20gYmVpbmcgaW5zdGFsbGVkIGluc2lkZSBhIHdlYiB3b3JrZXIsXG4gICAgICAgIC8vIHdoZXJlIGBnbG9iYWwucG9zdE1lc3NhZ2VgIG1lYW5zIHNvbWV0aGluZyBjb21wbGV0ZWx5IGRpZmZlcmVudCBhbmQgY2FuJ3QgYmUgdXNlZCBmb3IgdGhpcyBwdXJwb3NlLlxuICAgICAgICBpZiAoZ2xvYmFsLnBvc3RNZXNzYWdlICYmICFnbG9iYWwuaW1wb3J0U2NyaXB0cykge1xuICAgICAgICAgICAgdmFyIHBvc3RNZXNzYWdlSXNBc3luY2hyb25vdXMgPSB0cnVlO1xuICAgICAgICAgICAgdmFyIG9sZE9uTWVzc2FnZSA9IGdsb2JhbC5vbm1lc3NhZ2U7XG4gICAgICAgICAgICBnbG9iYWwub25tZXNzYWdlID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgcG9zdE1lc3NhZ2VJc0FzeW5jaHJvbm91cyA9IGZhbHNlO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGdsb2JhbC5wb3N0TWVzc2FnZShcIlwiLCBcIipcIik7XG4gICAgICAgICAgICBnbG9iYWwub25tZXNzYWdlID0gb2xkT25NZXNzYWdlO1xuICAgICAgICAgICAgcmV0dXJuIHBvc3RNZXNzYWdlSXNBc3luY2hyb25vdXM7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpbnN0YWxsUG9zdE1lc3NhZ2VJbXBsZW1lbnRhdGlvbigpIHtcbiAgICAgICAgLy8gSW5zdGFsbHMgYW4gZXZlbnQgaGFuZGxlciBvbiBgZ2xvYmFsYCBmb3IgdGhlIGBtZXNzYWdlYCBldmVudDogc2VlXG4gICAgICAgIC8vICogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4vRE9NL3dpbmRvdy5wb3N0TWVzc2FnZVxuICAgICAgICAvLyAqIGh0dHA6Ly93d3cud2hhdHdnLm9yZy9zcGVjcy93ZWItYXBwcy9jdXJyZW50LXdvcmsvbXVsdGlwYWdlL2NvbW1zLmh0bWwjY3Jvc3NEb2N1bWVudE1lc3NhZ2VzXG5cbiAgICAgICAgdmFyIG1lc3NhZ2VQcmVmaXggPSBcInNldEltbWVkaWF0ZSRcIiArIE1hdGgucmFuZG9tKCkgKyBcIiRcIjtcbiAgICAgICAgdmFyIG9uR2xvYmFsTWVzc2FnZSA9IGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgICAgICAgICBpZiAoZXZlbnQuc291cmNlID09PSBnbG9iYWwgJiZcbiAgICAgICAgICAgICAgICB0eXBlb2YgZXZlbnQuZGF0YSA9PT0gXCJzdHJpbmdcIiAmJlxuICAgICAgICAgICAgICAgIGV2ZW50LmRhdGEuaW5kZXhPZihtZXNzYWdlUHJlZml4KSA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHJ1bklmUHJlc2VudCgrZXZlbnQuZGF0YS5zbGljZShtZXNzYWdlUHJlZml4Lmxlbmd0aCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICAgIGlmIChnbG9iYWwuYWRkRXZlbnRMaXN0ZW5lcikge1xuICAgICAgICAgICAgZ2xvYmFsLmFkZEV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlXCIsIG9uR2xvYmFsTWVzc2FnZSwgZmFsc2UpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZ2xvYmFsLmF0dGFjaEV2ZW50KFwib25tZXNzYWdlXCIsIG9uR2xvYmFsTWVzc2FnZSk7XG4gICAgICAgIH1cblxuICAgICAgICByZWdpc3RlckltbWVkaWF0ZSA9IGZ1bmN0aW9uKGhhbmRsZSkge1xuICAgICAgICAgICAgZ2xvYmFsLnBvc3RNZXNzYWdlKG1lc3NhZ2VQcmVmaXggKyBoYW5kbGUsIFwiKlwiKTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpbnN0YWxsTWVzc2FnZUNoYW5uZWxJbXBsZW1lbnRhdGlvbigpIHtcbiAgICAgICAgdmFyIGNoYW5uZWwgPSBuZXcgTWVzc2FnZUNoYW5uZWwoKTtcbiAgICAgICAgY2hhbm5lbC5wb3J0MS5vbm1lc3NhZ2UgPSBmdW5jdGlvbihldmVudCkge1xuICAgICAgICAgICAgdmFyIGhhbmRsZSA9IGV2ZW50LmRhdGE7XG4gICAgICAgICAgICBydW5JZlByZXNlbnQoaGFuZGxlKTtcbiAgICAgICAgfTtcblxuICAgICAgICByZWdpc3RlckltbWVkaWF0ZSA9IGZ1bmN0aW9uKGhhbmRsZSkge1xuICAgICAgICAgICAgY2hhbm5lbC5wb3J0Mi5wb3N0TWVzc2FnZShoYW5kbGUpO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGluc3RhbGxSZWFkeVN0YXRlQ2hhbmdlSW1wbGVtZW50YXRpb24oKSB7XG4gICAgICAgIHZhciBodG1sID0gZG9jLmRvY3VtZW50RWxlbWVudDtcbiAgICAgICAgcmVnaXN0ZXJJbW1lZGlhdGUgPSBmdW5jdGlvbihoYW5kbGUpIHtcbiAgICAgICAgICAgIC8vIENyZWF0ZSBhIDxzY3JpcHQ+IGVsZW1lbnQ7IGl0cyByZWFkeXN0YXRlY2hhbmdlIGV2ZW50IHdpbGwgYmUgZmlyZWQgYXN5bmNocm9ub3VzbHkgb25jZSBpdCBpcyBpbnNlcnRlZFxuICAgICAgICAgICAgLy8gaW50byB0aGUgZG9jdW1lbnQuIERvIHNvLCB0aHVzIHF1ZXVpbmcgdXAgdGhlIHRhc2suIFJlbWVtYmVyIHRvIGNsZWFuIHVwIG9uY2UgaXQncyBiZWVuIGNhbGxlZC5cbiAgICAgICAgICAgIHZhciBzY3JpcHQgPSBkb2MuY3JlYXRlRWxlbWVudChcInNjcmlwdFwiKTtcbiAgICAgICAgICAgIHNjcmlwdC5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcnVuSWZQcmVzZW50KGhhbmRsZSk7XG4gICAgICAgICAgICAgICAgc2NyaXB0Lm9ucmVhZHlzdGF0ZWNoYW5nZSA9IG51bGw7XG4gICAgICAgICAgICAgICAgaHRtbC5yZW1vdmVDaGlsZChzY3JpcHQpO1xuICAgICAgICAgICAgICAgIHNjcmlwdCA9IG51bGw7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaHRtbC5hcHBlbmRDaGlsZChzY3JpcHQpO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGluc3RhbGxTZXRUaW1lb3V0SW1wbGVtZW50YXRpb24oKSB7XG4gICAgICAgIHJlZ2lzdGVySW1tZWRpYXRlID0gZnVuY3Rpb24oaGFuZGxlKSB7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KHJ1bklmUHJlc2VudCwgMCwgaGFuZGxlKTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvLyBJZiBzdXBwb3J0ZWQsIHdlIHNob3VsZCBhdHRhY2ggdG8gdGhlIHByb3RvdHlwZSBvZiBnbG9iYWwsIHNpbmNlIHRoYXQgaXMgd2hlcmUgc2V0VGltZW91dCBldCBhbC4gbGl2ZS5cbiAgICB2YXIgYXR0YWNoVG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YgJiYgT2JqZWN0LmdldFByb3RvdHlwZU9mKGdsb2JhbCk7XG4gICAgYXR0YWNoVG8gPSBhdHRhY2hUbyAmJiBhdHRhY2hUby5zZXRUaW1lb3V0ID8gYXR0YWNoVG8gOiBnbG9iYWw7XG5cbiAgICAvLyBEb24ndCBnZXQgZm9vbGVkIGJ5IGUuZy4gYnJvd3NlcmlmeSBlbnZpcm9ubWVudHMuXG4gICAgaWYgKHt9LnRvU3RyaW5nLmNhbGwoZ2xvYmFsLnByb2Nlc3MpID09PSBcIltvYmplY3QgcHJvY2Vzc11cIikge1xuICAgICAgICAvLyBGb3IgTm9kZS5qcyBiZWZvcmUgMC45XG4gICAgICAgIGluc3RhbGxOZXh0VGlja0ltcGxlbWVudGF0aW9uKCk7XG5cbiAgICB9IGVsc2UgaWYgKGNhblVzZVBvc3RNZXNzYWdlKCkpIHtcbiAgICAgICAgLy8gRm9yIG5vbi1JRTEwIG1vZGVybiBicm93c2Vyc1xuICAgICAgICBpbnN0YWxsUG9zdE1lc3NhZ2VJbXBsZW1lbnRhdGlvbigpO1xuXG4gICAgfSBlbHNlIGlmIChnbG9iYWwuTWVzc2FnZUNoYW5uZWwpIHtcbiAgICAgICAgLy8gRm9yIHdlYiB3b3JrZXJzLCB3aGVyZSBzdXBwb3J0ZWRcbiAgICAgICAgaW5zdGFsbE1lc3NhZ2VDaGFubmVsSW1wbGVtZW50YXRpb24oKTtcblxuICAgIH0gZWxzZSBpZiAoZG9jICYmIFwib25yZWFkeXN0YXRlY2hhbmdlXCIgaW4gZG9jLmNyZWF0ZUVsZW1lbnQoXCJzY3JpcHRcIikpIHtcbiAgICAgICAgLy8gRm9yIElFIDbigJM4XG4gICAgICAgIGluc3RhbGxSZWFkeVN0YXRlQ2hhbmdlSW1wbGVtZW50YXRpb24oKTtcblxuICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIEZvciBvbGRlciBicm93c2Vyc1xuICAgICAgICBpbnN0YWxsU2V0VGltZW91dEltcGxlbWVudGF0aW9uKCk7XG4gICAgfVxuXG4gICAgYXR0YWNoVG8uc2V0SW1tZWRpYXRlID0gc2V0SW1tZWRpYXRlO1xuICAgIGF0dGFjaFRvLmNsZWFySW1tZWRpYXRlID0gY2xlYXJJbW1lZGlhdGU7XG59KHR5cGVvZiBzZWxmID09PSBcInVuZGVmaW5lZFwiID8gdHlwZW9mIGdsb2JhbCA9PT0gXCJ1bmRlZmluZWRcIiA/IHRoaXMgOiBnbG9iYWwgOiBzZWxmKSk7XG4iLCJ2YXIgc2NvcGUgPSAodHlwZW9mIGdsb2JhbCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBnbG9iYWwpIHx8XG4gICAgICAgICAgICAodHlwZW9mIHNlbGYgIT09IFwidW5kZWZpbmVkXCIgJiYgc2VsZikgfHxcbiAgICAgICAgICAgIHdpbmRvdztcbnZhciBhcHBseSA9IEZ1bmN0aW9uLnByb3RvdHlwZS5hcHBseTtcblxuLy8gRE9NIEFQSXMsIGZvciBjb21wbGV0ZW5lc3NcblxuZXhwb3J0cy5zZXRUaW1lb3V0ID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBuZXcgVGltZW91dChhcHBseS5jYWxsKHNldFRpbWVvdXQsIHNjb3BlLCBhcmd1bWVudHMpLCBjbGVhclRpbWVvdXQpO1xufTtcbmV4cG9ydHMuc2V0SW50ZXJ2YWwgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIG5ldyBUaW1lb3V0KGFwcGx5LmNhbGwoc2V0SW50ZXJ2YWwsIHNjb3BlLCBhcmd1bWVudHMpLCBjbGVhckludGVydmFsKTtcbn07XG5leHBvcnRzLmNsZWFyVGltZW91dCA9XG5leHBvcnRzLmNsZWFySW50ZXJ2YWwgPSBmdW5jdGlvbih0aW1lb3V0KSB7XG4gIGlmICh0aW1lb3V0KSB7XG4gICAgdGltZW91dC5jbG9zZSgpO1xuICB9XG59O1xuXG5mdW5jdGlvbiBUaW1lb3V0KGlkLCBjbGVhckZuKSB7XG4gIHRoaXMuX2lkID0gaWQ7XG4gIHRoaXMuX2NsZWFyRm4gPSBjbGVhckZuO1xufVxuVGltZW91dC5wcm90b3R5cGUudW5yZWYgPSBUaW1lb3V0LnByb3RvdHlwZS5yZWYgPSBmdW5jdGlvbigpIHt9O1xuVGltZW91dC5wcm90b3R5cGUuY2xvc2UgPSBmdW5jdGlvbigpIHtcbiAgdGhpcy5fY2xlYXJGbi5jYWxsKHNjb3BlLCB0aGlzLl9pZCk7XG59O1xuXG4vLyBEb2VzIG5vdCBzdGFydCB0aGUgdGltZSwganVzdCBzZXRzIHVwIHRoZSBtZW1iZXJzIG5lZWRlZC5cbmV4cG9ydHMuZW5yb2xsID0gZnVuY3Rpb24oaXRlbSwgbXNlY3MpIHtcbiAgY2xlYXJUaW1lb3V0KGl0ZW0uX2lkbGVUaW1lb3V0SWQpO1xuICBpdGVtLl9pZGxlVGltZW91dCA9IG1zZWNzO1xufTtcblxuZXhwb3J0cy51bmVucm9sbCA9IGZ1bmN0aW9uKGl0ZW0pIHtcbiAgY2xlYXJUaW1lb3V0KGl0ZW0uX2lkbGVUaW1lb3V0SWQpO1xuICBpdGVtLl9pZGxlVGltZW91dCA9IC0xO1xufTtcblxuZXhwb3J0cy5fdW5yZWZBY3RpdmUgPSBleHBvcnRzLmFjdGl2ZSA9IGZ1bmN0aW9uKGl0ZW0pIHtcbiAgY2xlYXJUaW1lb3V0KGl0ZW0uX2lkbGVUaW1lb3V0SWQpO1xuXG4gIHZhciBtc2VjcyA9IGl0ZW0uX2lkbGVUaW1lb3V0O1xuICBpZiAobXNlY3MgPj0gMCkge1xuICAgIGl0ZW0uX2lkbGVUaW1lb3V0SWQgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uIG9uVGltZW91dCgpIHtcbiAgICAgIGlmIChpdGVtLl9vblRpbWVvdXQpXG4gICAgICAgIGl0ZW0uX29uVGltZW91dCgpO1xuICAgIH0sIG1zZWNzKTtcbiAgfVxufTtcblxuLy8gc2V0aW1tZWRpYXRlIGF0dGFjaGVzIGl0c2VsZiB0byB0aGUgZ2xvYmFsIG9iamVjdFxucmVxdWlyZShcInNldGltbWVkaWF0ZVwiKTtcbi8vIE9uIHNvbWUgZXhvdGljIGVudmlyb25tZW50cywgaXQncyBub3QgY2xlYXIgd2hpY2ggb2JqZWN0IGBzZXRpbW1lZGlhdGVgIHdhc1xuLy8gYWJsZSB0byBpbnN0YWxsIG9udG8uICBTZWFyY2ggZWFjaCBwb3NzaWJpbGl0eSBpbiB0aGUgc2FtZSBvcmRlciBhcyB0aGVcbi8vIGBzZXRpbW1lZGlhdGVgIGxpYnJhcnkuXG5leHBvcnRzLnNldEltbWVkaWF0ZSA9ICh0eXBlb2Ygc2VsZiAhPT0gXCJ1bmRlZmluZWRcIiAmJiBzZWxmLnNldEltbWVkaWF0ZSkgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgKHR5cGVvZiBnbG9iYWwgIT09IFwidW5kZWZpbmVkXCIgJiYgZ2xvYmFsLnNldEltbWVkaWF0ZSkgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgKHRoaXMgJiYgdGhpcy5zZXRJbW1lZGlhdGUpO1xuZXhwb3J0cy5jbGVhckltbWVkaWF0ZSA9ICh0eXBlb2Ygc2VsZiAhPT0gXCJ1bmRlZmluZWRcIiAmJiBzZWxmLmNsZWFySW1tZWRpYXRlKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICh0eXBlb2YgZ2xvYmFsICE9PSBcInVuZGVmaW5lZFwiICYmIGdsb2JhbC5jbGVhckltbWVkaWF0ZSkgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAodGhpcyAmJiB0aGlzLmNsZWFySW1tZWRpYXRlKTtcbiIsInZhciBnO1xuXG4vLyBUaGlzIHdvcmtzIGluIG5vbi1zdHJpY3QgbW9kZVxuZyA9IChmdW5jdGlvbigpIHtcblx0cmV0dXJuIHRoaXM7XG59KSgpO1xuXG50cnkge1xuXHQvLyBUaGlzIHdvcmtzIGlmIGV2YWwgaXMgYWxsb3dlZCAoc2VlIENTUClcblx0ZyA9IGcgfHwgbmV3IEZ1bmN0aW9uKFwicmV0dXJuIHRoaXNcIikoKTtcbn0gY2F0Y2ggKGUpIHtcblx0Ly8gVGhpcyB3b3JrcyBpZiB0aGUgd2luZG93IHJlZmVyZW5jZSBpcyBhdmFpbGFibGVcblx0aWYgKHR5cGVvZiB3aW5kb3cgPT09IFwib2JqZWN0XCIpIGcgPSB3aW5kb3c7XG59XG5cbi8vIGcgY2FuIHN0aWxsIGJlIHVuZGVmaW5lZCwgYnV0IG5vdGhpbmcgdG8gZG8gYWJvdXQgaXQuLi5cbi8vIFdlIHJldHVybiB1bmRlZmluZWQsIGluc3RlYWQgb2Ygbm90aGluZyBoZXJlLCBzbyBpdCdzXG4vLyBlYXNpZXIgdG8gaGFuZGxlIHRoaXMgY2FzZS4gaWYoIWdsb2JhbCkgeyAuLi59XG5cbm1vZHVsZS5leHBvcnRzID0gZztcbiIsImV4cG9ydCB7IFN1cnZleU1vZGVsLCBTdXJ2ZXlXaW5kb3dNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuZXhwb3J0IHsgc2V0dGluZ3MgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmV4cG9ydCB7IHN1cnZleUxvY2FsaXphdGlvbiwgc3VydmV5U3RyaW5ncyB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuIiwiLy8gcmVhY3RcbmV4cG9ydCB7IFN1cnZleSwgYXR0YWNoS2V5MmNsaWNrIH0gZnJvbSBcIi4uL3JlYWN0L3JlYWN0U3VydmV5XCI7XG5leHBvcnQgeyBSZWFjdFN1cnZleUVsZW1lbnRzV3JhcHBlciB9IGZyb20gXCIuLi9yZWFjdC9yZWFjdHN1cnZleW1vZGVsXCI7XG5leHBvcnQgeyBTdXJ2ZXlOYXZpZ2F0aW9uQmFzZSB9IGZyb20gXCIuLi9yZWFjdC9yZWFjdFN1cnZleU5hdmlnYXRpb25CYXNlXCI7XG5leHBvcnQgeyBTdXJ2ZXlUaW1lclBhbmVsIH0gZnJvbSBcIi4uL3JlYWN0L3JlYWN0dGltZXJwYW5lbFwiO1xuZXhwb3J0IHsgU3VydmV5UGFnZSB9IGZyb20gXCIuLi9yZWFjdC9wYWdlXCI7XG5leHBvcnQgeyBTdXJ2ZXlSb3cgfSBmcm9tIFwiLi4vcmVhY3Qvcm93XCI7XG5leHBvcnQgeyBTdXJ2ZXlQYW5lbCB9IGZyb20gXCIuLi9yZWFjdC9wYW5lbFwiO1xuZXhwb3J0IHsgU3VydmV5Rmxvd1BhbmVsIH0gZnJvbSBcIi4uL3JlYWN0L2Zsb3ctcGFuZWxcIjtcbmV4cG9ydCB7XG4gIFN1cnZleVF1ZXN0aW9uLFxuICBTdXJ2ZXlFbGVtZW50RXJyb3JzLFxuICBTdXJ2ZXlRdWVzdGlvbkFuZEVycm9yc0NlbGwsXG4gIElTdXJ2ZXlDcmVhdG9yXG59IGZyb20gXCIuLi9yZWFjdC9yZWFjdHF1ZXN0aW9uXCI7XG5leHBvcnQge1xuICBSZWFjdFN1cnZleUVsZW1lbnQsXG4gIFN1cnZleUVsZW1lbnRCYXNlLFxuICBTdXJ2ZXlRdWVzdGlvbkVsZW1lbnRCYXNlLFxufSBmcm9tIFwiLi4vcmVhY3QvcmVhY3RxdWVzdGlvbl9lbGVtZW50XCI7XG5leHBvcnQge1xuICBTdXJ2ZXlRdWVzdGlvbkNvbW1lbnRJdGVtLFxuICBTdXJ2ZXlRdWVzdGlvbkNvbW1lbnQsXG59IGZyb20gXCIuLi9yZWFjdC9yZWFjdHF1ZXN0aW9uX2NvbW1lbnRcIjtcbmV4cG9ydCB7XG4gIFN1cnZleVF1ZXN0aW9uQ2hlY2tib3gsXG4gIFN1cnZleVF1ZXN0aW9uQ2hlY2tib3hJdGVtLFxufSBmcm9tIFwiLi4vcmVhY3QvcmVhY3RxdWVzdGlvbl9jaGVja2JveFwiO1xuZXhwb3J0IHtcbiAgU3VydmV5UXVlc3Rpb25SYW5raW5nLFxuICBTdXJ2ZXlRdWVzdGlvblJhbmtpbmdJdGVtLFxufSBmcm9tIFwiLi4vcmVhY3QvcmVhY3RxdWVzdGlvbl9yYW5raW5nXCI7XG5leHBvcnQgeyBUYWdib3hGaWx0ZXJTdHJpbmcgfSBmcm9tIFwiLi4vcmVhY3QvdGFnYm94LWZpbHRlclwiO1xuZXhwb3J0IHsgU3VydmV5UXVlc3Rpb25PcHRpb25JdGVtIH0gZnJvbSBcIi4uL3JlYWN0L2Ryb3Bkb3duLWl0ZW1cIjtcbmV4cG9ydCB7IFN1cnZleVF1ZXN0aW9uRHJvcGRvd25CYXNlIH0gZnJvbSBcIi4uL3JlYWN0L2Ryb3Bkb3duLWJhc2VcIjtcbmV4cG9ydCB7IFN1cnZleVF1ZXN0aW9uRHJvcGRvd24gfSBmcm9tIFwiLi4vcmVhY3QvcmVhY3RxdWVzdGlvbl9kcm9wZG93blwiO1xuZXhwb3J0IHsgU3VydmV5UXVlc3Rpb25UYWdib3hJdGVtIH0gZnJvbSBcIi4uL3JlYWN0L3RhZ2JveC1pdGVtXCI7XG5leHBvcnQgeyBTdXJ2ZXlRdWVzdGlvblRhZ2JveCB9IGZyb20gXCIuLi9yZWFjdC9yZWFjdHF1ZXN0aW9uX3RhZ2JveFwiO1xuZXhwb3J0IHsgU3VydmV5UXVlc3Rpb25Ecm9wZG93blNlbGVjdCB9IGZyb20gXCIuLi9yZWFjdC9kcm9wZG93bi1zZWxlY3RcIjtcbmV4cG9ydCB7XG4gIFN1cnZleVF1ZXN0aW9uTWF0cml4LFxuICBTdXJ2ZXlRdWVzdGlvbk1hdHJpeFJvdyxcbn0gZnJvbSBcIi4uL3JlYWN0L3JlYWN0cXVlc3Rpb25fbWF0cml4XCI7XG5leHBvcnQgeyBTdXJ2ZXlRdWVzdGlvbkh0bWwgfSBmcm9tIFwiLi4vcmVhY3QvcmVhY3RxdWVzdGlvbl9odG1sXCI7XG5leHBvcnQgeyBTdXJ2ZXlRdWVzdGlvbkZpbGUgfSBmcm9tIFwiLi4vcmVhY3QvcmVhY3RxdWVzdGlvbl9maWxlXCI7XG5leHBvcnQgeyBTdXJ2ZXlRdWVzdGlvbk11bHRpcGxlVGV4dCB9IGZyb20gXCIuLi9yZWFjdC9yZWFjdHF1ZXN0aW9uX211bHRpcGxldGV4dFwiO1xuZXhwb3J0IHsgU3VydmV5UXVlc3Rpb25SYWRpb2dyb3VwLCBTdXJ2ZXlRdWVzdGlvblJhZGlvSXRlbSB9IGZyb20gXCIuLi9yZWFjdC9yZWFjdHF1ZXN0aW9uX3JhZGlvZ3JvdXBcIjtcbmV4cG9ydCB7IFN1cnZleVF1ZXN0aW9uVGV4dCB9IGZyb20gXCIuLi9yZWFjdC9yZWFjdHF1ZXN0aW9uX3RleHRcIjtcbmV4cG9ydCB7IFN1cnZleVF1ZXN0aW9uQm9vbGVhbiB9IGZyb20gXCIuLi9yZWFjdC9ib29sZWFuXCI7XG5leHBvcnQgeyBTdXJ2ZXlRdWVzdGlvbkJvb2xlYW5DaGVja2JveCB9IGZyb20gXCIuLi9yZWFjdC9ib29sZWFuLWNoZWNrYm94XCI7XG5leHBvcnQgeyBTdXJ2ZXlRdWVzdGlvbkJvb2xlYW5SYWRpbyB9IGZyb20gXCIuLi9yZWFjdC9ib29sZWFuLXJhZGlvXCI7XG5leHBvcnQgeyBTdXJ2ZXlRdWVzdGlvbkVtcHR5IH0gZnJvbSBcIi4uL3JlYWN0L3JlYWN0cXVlc3Rpb25fZW1wdHlcIjtcbmV4cG9ydCB7IFN1cnZleVF1ZXN0aW9uTWF0cml4RHJvcGRvd25DZWxsLCBTdXJ2ZXlRdWVzdGlvbk1hdHJpeERyb3Bkb3duQmFzZSB9IGZyb20gXCIuLi9yZWFjdC9yZWFjdHF1ZXN0aW9uX21hdHJpeGRyb3Bkb3duYmFzZVwiO1xuZXhwb3J0IHsgU3VydmV5UXVlc3Rpb25NYXRyaXhEcm9wZG93biB9IGZyb20gXCIuLi9yZWFjdC9yZWFjdHF1ZXN0aW9uX21hdHJpeGRyb3Bkb3duXCI7XG5leHBvcnQgeyBTdXJ2ZXlRdWVzdGlvbk1hdHJpeER5bmFtaWMsIFN1cnZleVF1ZXN0aW9uTWF0cml4RHluYW1pY0FkZEJ1dHRvbiB9IGZyb20gXCIuLi9yZWFjdC9yZWFjdHF1ZXN0aW9uX21hdHJpeGR5bmFtaWNcIjtcbmV4cG9ydCB7IFN1cnZleVF1ZXN0aW9uUGFuZWxEeW5hbWljIH0gZnJvbSBcIi4uL3JlYWN0L3JlYWN0cXVlc3Rpb25fcGFuZWxkeW5hbWljXCI7XG5leHBvcnQgeyBTdXJ2ZXlQcm9ncmVzcyB9IGZyb20gXCIuLi9yZWFjdC9yZWFjdFN1cnZleVByb2dyZXNzXCI7XG5leHBvcnQgeyBTdXJ2ZXlQcm9ncmVzc0J1dHRvbnMgfSBmcm9tIFwiLi4vcmVhY3QvcmVhY3RTdXJ2ZXlQcm9ncmVzc0J1dHRvbnNcIjtcbmV4cG9ydCB7IFN1cnZleVF1ZXN0aW9uUmF0aW5nIH0gZnJvbSBcIi4uL3JlYWN0L3JlYWN0cXVlc3Rpb25fcmF0aW5nXCI7XG5leHBvcnQgeyBTdXJ2ZXlRdWVzdGlvblJhdGluZ0Ryb3Bkb3duIH0gZnJvbSBcIi4uL3JlYWN0L3JhdGluZy1kcm9wZG93blwiO1xuZXhwb3J0IHsgU3VydmV5UXVlc3Rpb25FeHByZXNzaW9uIH0gZnJvbSBcIi4uL3JlYWN0L3JlYWN0cXVlc3Rpb25fZXhwcmVzc2lvblwiO1xuZXhwb3J0IHsgUG9wdXBTdXJ2ZXksIFN1cnZleVdpbmRvdyB9IGZyb20gXCIuLi9yZWFjdC9yZWFjdC1wb3B1cC1zdXJ2ZXlcIjtcbmV4cG9ydCB7IFJlYWN0UXVlc3Rpb25GYWN0b3J5IH0gZnJvbSBcIi4uL3JlYWN0L3JlYWN0cXVlc3Rpb25fZmFjdG9yeVwiO1xuZXhwb3J0IHsgUmVhY3RFbGVtZW50RmFjdG9yeSB9IGZyb20gXCIuLi9yZWFjdC9lbGVtZW50LWZhY3RvcnlcIjtcbmV4cG9ydCB7IFN1cnZleVF1ZXN0aW9uSW1hZ2VQaWNrZXIgfSBmcm9tIFwiLi4vcmVhY3QvaW1hZ2VwaWNrZXJcIjtcbmV4cG9ydCB7IFN1cnZleVF1ZXN0aW9uSW1hZ2UgfSBmcm9tIFwiLi4vcmVhY3QvaW1hZ2VcIjtcbmV4cG9ydCB7IFN1cnZleVF1ZXN0aW9uU2lnbmF0dXJlUGFkIH0gZnJvbSBcIi4uL3JlYWN0L3NpZ25hdHVyZXBhZFwiO1xuZXhwb3J0IHsgU3VydmV5UXVlc3Rpb25CdXR0b25Hcm91cCB9IGZyb20gXCIuLi9yZWFjdC9yZWFjdHF1ZXN0aW9uX2J1dHRvbmdyb3VwXCI7XG5leHBvcnQgeyBTdXJ2ZXlRdWVzdGlvbkN1c3RvbSwgU3VydmV5UXVlc3Rpb25Db21wb3NpdGUgfSBmcm9tIFwiLi4vcmVhY3QvcmVhY3RxdWVzdGlvbl9jdXN0b21cIjtcblxuZXhwb3J0IHsgUG9wdXAgfSBmcm9tIFwiLi4vcmVhY3QvY29tcG9uZW50cy9wb3B1cC9wb3B1cFwiO1xuZXhwb3J0IHsgTGlzdCB9IGZyb20gXCIuLi9yZWFjdC9jb21wb25lbnRzL2xpc3QvbGlzdFwiO1xuZXhwb3J0IHsgVGl0bGVBY3Rpb25zIH0gZnJvbSBcIi4uL3JlYWN0L2NvbXBvbmVudHMvdGl0bGUvdGl0bGUtYWN0aW9uc1wiO1xuZXhwb3J0IHsgVGl0bGVFbGVtZW50IH0gZnJvbSBcIi4uL3JlYWN0L2NvbXBvbmVudHMvdGl0bGUvdGl0bGUtZWxlbWVudFwiO1xuZXhwb3J0IHsgU3VydmV5QWN0aW9uQmFyIH0gZnJvbSBcIi4uL3JlYWN0L2NvbXBvbmVudHMvYWN0aW9uLWJhci9hY3Rpb24tYmFyXCI7XG5leHBvcnQgeyBMb2dvSW1hZ2UgfSBmcm9tIFwiLi4vcmVhY3QvY29tcG9uZW50cy9zdXJ2ZXktaGVhZGVyL2xvZ28taW1hZ2VcIjtcbmV4cG9ydCB7IFN1cnZleUhlYWRlciB9IGZyb20gXCIuLi9yZWFjdC9jb21wb25lbnRzL3N1cnZleS1oZWFkZXIvc3VydmV5LWhlYWRlclwiO1xuZXhwb3J0IHsgU3ZnSWNvbiB9IGZyb20gXCIuLi9yZWFjdC9jb21wb25lbnRzL3N2Zy1pY29uL3N2Zy1pY29uXCI7XG5leHBvcnQgeyBTdXJ2ZXlRdWVzdGlvbk1hdHJpeER5bmFtaWNSZW1vdmVCdXR0b24gfSBmcm9tIFwiLi4vcmVhY3QvY29tcG9uZW50cy9tYXRyaXgtYWN0aW9ucy9yZW1vdmUtYnV0dG9uL3JlbW92ZS1idXR0b25cIjtcbmV4cG9ydCB7IFN1cnZleVF1ZXN0aW9uTWF0cml4RGV0YWlsQnV0dG9uIH0gZnJvbSBcIi4uL3JlYWN0L2NvbXBvbmVudHMvbWF0cml4LWFjdGlvbnMvZGV0YWlsLWJ1dHRvbi9kZXRhaWwtYnV0dG9uXCI7XG5leHBvcnQgeyBTdXJ2ZXlRdWVzdGlvbk1hdHJpeER5bmFtaWNEcmFnRHJvcEljb24gfSBmcm9tIFwiLi4vcmVhY3QvY29tcG9uZW50cy9tYXRyaXgtYWN0aW9ucy9kcmFnLWRyb3AtaWNvbi9kcmFnLWRyb3AtaWNvblwiO1xuZXhwb3J0IHsgU3VydmV5UXVlc3Rpb25QYW5lbER5bmFtaWNBZGRCdXR0b24gfSBmcm9tIFwiLi4vcmVhY3QvY29tcG9uZW50cy9wYW5lbGR5bmFtaWMtYWN0aW9ucy9wYW5lbGR5bmFtaWMtYWRkLWJ0blwiO1xuZXhwb3J0IHsgU3VydmV5UXVlc3Rpb25QYW5lbER5bmFtaWNSZW1vdmVCdXR0b24gfSBmcm9tIFwiLi4vcmVhY3QvY29tcG9uZW50cy9wYW5lbGR5bmFtaWMtYWN0aW9ucy9wYW5lbGR5bmFtaWMtcmVtb3ZlLWJ0blwiO1xuZXhwb3J0IHsgU3VydmV5UXVlc3Rpb25QYW5lbER5bmFtaWNQcmV2QnV0dG9uIH0gZnJvbSBcIi4uL3JlYWN0L2NvbXBvbmVudHMvcGFuZWxkeW5hbWljLWFjdGlvbnMvcGFuZWxkeW5hbWljLXByZXYtYnRuXCI7XG5leHBvcnQgeyBTdXJ2ZXlRdWVzdGlvblBhbmVsRHluYW1pY05leHRCdXR0b24gfSBmcm9tIFwiLi4vcmVhY3QvY29tcG9uZW50cy9wYW5lbGR5bmFtaWMtYWN0aW9ucy9wYW5lbGR5bmFtaWMtbmV4dC1idG5cIjtcbmV4cG9ydCB7IFN1cnZleVF1ZXN0aW9uUGFuZWxEeW5hbWljUHJvZ3Jlc3NUZXh0IH0gZnJvbSBcIi4uL3JlYWN0L2NvbXBvbmVudHMvcGFuZWxkeW5hbWljLWFjdGlvbnMvcGFuZWxkeW5hbWljLXByb2dyZXNzLXRleHRcIjtcbmV4cG9ydCB7IFN1cnZleU5hdmlnYXRpb25CdXR0b24gfSBmcm9tIFwiLi4vcmVhY3QvY29tcG9uZW50cy9zdXJ2ZXktYWN0aW9ucy9zdXJ2ZXktbmF2LWJ1dHRvblwiO1xuXG5leHBvcnQgeyBNYXRyaXhSb3cgfSBmcm9tIFwiLi4vcmVhY3QvY29tcG9uZW50cy9tYXRyaXgvcm93XCI7XG5leHBvcnQgeyBTa2VsZXRvbiB9IGZyb20gXCIuLi9yZWFjdC9jb21wb25lbnRzL3NrZWxldG9uXCI7XG5cbmV4cG9ydCB7IFN1cnZleUxvY1N0cmluZ1ZpZXdlciB9IGZyb20gXCIuLi9yZWFjdC9zdHJpbmctdmlld2VyXCI7XG5leHBvcnQgeyBTdXJ2ZXlMb2NTdHJpbmdFZGl0b3IgfSBmcm9tIFwiLi4vcmVhY3Qvc3RyaW5nLWVkaXRvclwiO1xuXG4vL1VuY29tbWVudCB0byBpbmNsdWRlIHRoZSBcImRhdGVcIiBxdWVzdGlvbiB0eXBlLlxuLy9leHBvcnQge2RlZmF1bHQgYXMgU3VydmV5UXVlc3Rpb25EYXRlfSBmcm9tIFwiLi4vcGx1Z2lucy9yZWFjdC9yZWFjdHF1ZXN0aW9uZGF0ZVwiO1xuIiwiZXhwb3J0ICogZnJvbSBcIi4vcmVhY3QtdWktbW9kZWxcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2NvcmUtZXhwb3J0XCI7XG5leHBvcnQgeyBTdXJ2ZXlNb2RlbCBhcyBNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuXG5leHBvcnQgKiBmcm9tIFwiLi4vdXRpbHMvcmVzcG9uc2l2aXR5LW1hbmFnZXJcIjtcbmV4cG9ydCB7IHVud3JhcCB9IGZyb20gXCIuLi91dGlscy91dGlsc1wiO1xuXG5pbXBvcnQgeyBjaGVja0xpYnJhcnlWZXJzaW9uIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5cbmNoZWNrTGlicmFyeVZlcnNpb24oYCR7cHJvY2Vzcy5lbnYuVkVSU0lPTn1gLCBcInN1cnZleS1yZWFjdC11aVwiKTsiLCJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFJlbmRlcmVyRmFjdG9yeSB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgUmVhY3RRdWVzdGlvbkZhY3RvcnkgfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uX2ZhY3RvcnlcIjtcbmltcG9ydCB7IFN1cnZleVF1ZXN0aW9uQm9vbGVhbiB9IGZyb20gXCIuL2Jvb2xlYW5cIjtcbmltcG9ydCB7IFRpdGxlQWN0aW9ucyB9IGZyb20gXCIuL2NvbXBvbmVudHMvdGl0bGUvdGl0bGUtYWN0aW9uc1wiO1xuaW1wb3J0IHsgU3VydmV5RWxlbWVudEJhc2UgfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uX2VsZW1lbnRcIjtcblxuZXhwb3J0IGNsYXNzIFN1cnZleVF1ZXN0aW9uQm9vbGVhbkNoZWNrYm94IGV4dGVuZHMgU3VydmV5UXVlc3Rpb25Cb29sZWFuIHtcbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyRWxlbWVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgY29uc3QgY3NzQ2xhc3NlcyA9IHRoaXMucXVlc3Rpb24uY3NzQ2xhc3NlcztcbiAgICBjb25zdCBpdGVtQ2xhc3MgPSB0aGlzLnF1ZXN0aW9uLmdldENoZWNrYm94SXRlbUNzcygpO1xuICAgIGNvbnN0IGRlc2NyaXB0aW9uID0gdGhpcy5xdWVzdGlvbi5jYW5SZW5kZXJMYWJlbERlc2NyaXB0aW9uID9cbiAgICAgIFN1cnZleUVsZW1lbnRCYXNlLnJlbmRlclF1ZXN0aW9uRGVzY3JpcHRpb24odGhpcy5xdWVzdGlvbikgOiBudWxsO1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT17Y3NzQ2xhc3Nlcy5yb290Q2hlY2tib3h9PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17aXRlbUNsYXNzfT5cbiAgICAgICAgICA8bGFiZWwgY2xhc3NOYW1lPXtjc3NDbGFzc2VzLmNoZWNrYm94TGFiZWx9PlxuICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgIHJlZj17dGhpcy5jaGVja1JlZn1cbiAgICAgICAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgICAgICAgICAgbmFtZT17dGhpcy5xdWVzdGlvbi5uYW1lfVxuICAgICAgICAgICAgICB2YWx1ZT17XG4gICAgICAgICAgICAgICAgdGhpcy5xdWVzdGlvbi5ib29sZWFuVmFsdWUgPT09IG51bGxcbiAgICAgICAgICAgICAgICAgID8gXCJcIlxuICAgICAgICAgICAgICAgICAgOiB0aGlzLnF1ZXN0aW9uLmJvb2xlYW5WYWx1ZVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlkPXt0aGlzLnF1ZXN0aW9uLmlucHV0SWR9XG4gICAgICAgICAgICAgIGNsYXNzTmFtZT17Y3NzQ2xhc3Nlcy5jb250cm9sQ2hlY2tib3h9XG4gICAgICAgICAgICAgIGRpc2FibGVkPXt0aGlzLmlzRGlzcGxheU1vZGV9XG4gICAgICAgICAgICAgIGNoZWNrZWQ9e3RoaXMucXVlc3Rpb24uYm9vbGVhblZhbHVlIHx8IGZhbHNlfVxuICAgICAgICAgICAgICBvbkNoYW5nZT17dGhpcy5oYW5kbGVPbkNoYW5nZX1cbiAgICAgICAgICAgICAgYXJpYS1yZXF1aXJlZD17dGhpcy5xdWVzdGlvbi5hcmlhUmVxdWlyZWR9XG4gICAgICAgICAgICAgIGFyaWEtbGFiZWw9e3RoaXMucXVlc3Rpb24uYXJpYUxhYmVsfVxuICAgICAgICAgICAgICBhcmlhLWludmFsaWQ9e3RoaXMucXVlc3Rpb24uYXJpYUludmFsaWR9XG4gICAgICAgICAgICAgIGFyaWEtZGVzY3JpYmVkYnk9e3RoaXMucXVlc3Rpb24uYXJpYURlc2NyaWJlZEJ5fVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT17Y3NzQ2xhc3Nlcy5jaGVja2JveE1hdGVyaWFsRGVjb3JhdG9yfT5cbiAgICAgICAgICAgICAge3RoaXMucXVlc3Rpb24uc3ZnSWNvbiA/XG4gICAgICAgICAgICAgICAgPHN2Z1xuICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtjc3NDbGFzc2VzLmNoZWNrYm94SXRlbURlY29yYXRvcn1cbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8dXNlIHhsaW5rSHJlZj17dGhpcy5xdWVzdGlvbi5zdmdJY29ufT48L3VzZT5cbiAgICAgICAgICAgICAgICA8L3N2Zz4gOiBudWxsXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwiY2hlY2tcIiAvPlxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAge3RoaXMucXVlc3Rpb24uaXNMYWJlbFJlbmRlcmVkICYmIChcbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPXtjc3NDbGFzc2VzLmNoZWNrYm94Q29udHJvbExhYmVsfSBpZD17dGhpcy5xdWVzdGlvbi5sYWJlbFJlbmRlcmVkQXJpYUlEfT5cbiAgICAgICAgICAgICAgICA8VGl0bGVBY3Rpb25zIGVsZW1lbnQ9e3RoaXMucXVlc3Rpb259IGNzc0NsYXNzZXM9e3RoaXMucXVlc3Rpb24uY3NzQ2xhc3Nlc30+PC9UaXRsZUFjdGlvbnM+XG4gICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICB7ZGVzY3JpcHRpb259XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxufVxuXG5SZWFjdFF1ZXN0aW9uRmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlclF1ZXN0aW9uKFxuICBcInN2LWJvb2xlYW4tY2hlY2tib3hcIixcbiAgKHByb3BzKSA9PiB7XG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3VydmV5UXVlc3Rpb25Cb29sZWFuQ2hlY2tib3gsIHByb3BzKTtcbiAgfVxuKTtcblxuUmVuZGVyZXJGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyUmVuZGVyZXIoXG4gIFwiYm9vbGVhblwiLFxuICBcImNoZWNrYm94XCIsXG4gIFwic3YtYm9vbGVhbi1jaGVja2JveFwiXG4pO1xuIiwiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBSZW5kZXJlckZhY3RvcnkgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFJlYWN0UXVlc3Rpb25GYWN0b3J5IH0gZnJvbSBcIi4vcmVhY3RxdWVzdGlvbl9mYWN0b3J5XCI7XG5pbXBvcnQgeyBTdXJ2ZXlRdWVzdGlvbkJvb2xlYW4gfSBmcm9tIFwiLi9ib29sZWFuXCI7XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlRdWVzdGlvbkJvb2xlYW5SYWRpbyBleHRlbmRzIFN1cnZleVF1ZXN0aW9uQm9vbGVhbiB7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gIH1cbiAgcHJpdmF0ZSByZW5kZXJSYWRpb0l0ZW0odmFsdWU6IGFueSwgbG9jVGV4dDogYW55KTogSlNYLkVsZW1lbnQge1xuICAgIGNvbnN0IGNzc0NsYXNzZXMgPSB0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXM7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgcm9sZT1cInByZXNlbnRhdGlvblwiIGNsYXNzTmFtZT17IHRoaXMucXVlc3Rpb24uZ2V0UmFkaW9JdGVtQ2xhc3MoY3NzQ2xhc3NlcywgdmFsdWUpIH0+XG4gICAgICAgIDxsYWJlbCBjbGFzc05hbWU9IHsgY3NzQ2xhc3Nlcy5yYWRpb0xhYmVsIH0+XG4gICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICB0eXBlPVwicmFkaW9cIlxuICAgICAgICAgICAgbmFtZSA9IHsgdGhpcy5xdWVzdGlvbi5uYW1lIH1cbiAgICAgICAgICAgIHZhbHVlID0geyB2YWx1ZSB9XG4gICAgICAgICAgICBhcmlhLWRlc2NyaWJlZGJ5ID0geyB0aGlzLnF1ZXN0aW9uLmFyaWFEZXNjcmliZWRCeSB9XG4gICAgICAgICAgICBjaGVja2VkID0geyB2YWx1ZSA9PT0gdGhpcy5xdWVzdGlvbi52YWx1ZSB9XG4gICAgICAgICAgICBkaXNhYmxlZCA9IHsgdGhpcy5xdWVzdGlvbi5pc0lucHV0UmVhZE9ubHkgfVxuICAgICAgICAgICAgY2xhc3NOYW1lID0geyBjc3NDbGFzc2VzLml0ZW1SYWRpb0NvbnRyb2wgfVxuICAgICAgICAgICAgb25DaGFuZ2U9eyB0aGlzLmhhbmRsZU9uQ2hhbmdlIH1cbiAgICAgICAgICAvPlxuICAgICAgICAgIHsgdGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLm1hdGVyaWFsUmFkaW9EZWNvcmF0b3I/XG4gICAgICAgICAgICAoPHNwYW4gY2xhc3NOYW1lPXsgY3NzQ2xhc3Nlcy5tYXRlcmlhbFJhZGlvRGVjb3JhdG9yIH0+XG4gICAgICAgICAgICAgIHsgdGhpcy5xdWVzdGlvbi5pdGVtU3ZnSWNvbiA/XG4gICAgICAgICAgICAgICAgKDxzdmcgY2xhc3NOYW1lPXtjc3NDbGFzc2VzLml0ZW1SYWRpb0RlY29yYXRvcn0+XG4gICAgICAgICAgICAgICAgICA8dXNlIHhsaW5rSHJlZj17dGhpcy5xdWVzdGlvbi5pdGVtU3ZnSWNvbn0+PC91c2U+XG4gICAgICAgICAgICAgICAgPC9zdmc+KTpudWxsfVxuICAgICAgICAgICAgPC9zcGFuPik6bnVsbH1cbiAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9IHsgY3NzQ2xhc3Nlcy5yYWRpb0NvbnRyb2xMYWJlbCB9PlxuICAgICAgICAgICAgeyB0aGlzLnJlbmRlckxvY1N0cmluZyhsb2NUZXh0KSB9XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L2xhYmVsPlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxuICBoYW5kbGVPbkNoYW5nZSA9IChldmVudDogYW55KSA9PiB7XG4gICAgdGhpcy5xdWVzdGlvbi52YWx1ZSA9IGV2ZW50Lm5hdGl2ZUV2ZW50LnRhcmdldC52YWx1ZTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyRWxlbWVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgY29uc3QgY3NzQ2xhc3NlcyA9IHRoaXMucXVlc3Rpb24uY3NzQ2xhc3NlcztcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9e2Nzc0NsYXNzZXMucm9vdFJhZGlvfT5cbiAgICAgICAgPGZpZWxkc2V0IHJvbGU9XCJwcmVzZW50YXRpb25cIiBjbGFzc05hbWU9IHsgY3NzQ2xhc3Nlcy5yYWRpb0ZpZWxkc2V0IH0+XG4gICAgICAgICAgeyB0aGlzLnJlbmRlclJhZGlvSXRlbShmYWxzZSwgdGhpcy5xdWVzdGlvbi5sb2NMYWJlbEZhbHNlKSB9XG4gICAgICAgICAgeyB0aGlzLnJlbmRlclJhZGlvSXRlbSh0cnVlLCB0aGlzLnF1ZXN0aW9uLmxvY0xhYmVsVHJ1ZSkgfVxuICAgICAgICA8L2ZpZWxkc2V0PlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxufVxuXG5SZWFjdFF1ZXN0aW9uRmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlclF1ZXN0aW9uKFxuICBcInN2LWJvb2xlYW4tcmFkaW9cIixcbiAgKHByb3BzKSA9PiB7XG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3VydmV5UXVlc3Rpb25Cb29sZWFuUmFkaW8sIHByb3BzKTtcbiAgfVxuKTtcblxuUmVuZGVyZXJGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyUmVuZGVyZXIoXG4gIFwiYm9vbGVhblwiLFxuICBcInJhZGlvXCIsXG4gIFwic3YtYm9vbGVhbi1yYWRpb1wiXG4pO1xuIiwiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBRdWVzdGlvbkJvb2xlYW5Nb2RlbCwgQ3NzQ2xhc3NCdWlsZGVyLCBCYXNlIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBTdXJ2ZXlRdWVzdGlvbkVsZW1lbnRCYXNlIH0gZnJvbSBcIi4vcmVhY3RxdWVzdGlvbl9lbGVtZW50XCI7XG5pbXBvcnQgeyBSZWFjdFF1ZXN0aW9uRmFjdG9yeSB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fZmFjdG9yeVwiO1xuXG5leHBvcnQgY2xhc3MgU3VydmV5UXVlc3Rpb25Cb29sZWFuIGV4dGVuZHMgU3VydmV5UXVlc3Rpb25FbGVtZW50QmFzZSB7XG4gIHByb3RlY3RlZCBjaGVja1JlZjogUmVhY3QuUmVmT2JqZWN0PEhUTUxJbnB1dEVsZW1lbnQ+O1xuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMuaGFuZGxlT25DaGFuZ2UgPSB0aGlzLmhhbmRsZU9uQ2hhbmdlLmJpbmQodGhpcyk7XG4gICAgdGhpcy5oYW5kbGVPbkNsaWNrID0gdGhpcy5oYW5kbGVPbkNsaWNrLmJpbmQodGhpcyk7XG4gICAgdGhpcy5oYW5kbGVPbkxhYmVsQ2xpY2sgPSB0aGlzLmhhbmRsZU9uTGFiZWxDbGljay5iaW5kKHRoaXMpO1xuICAgIHRoaXMuaGFuZGxlT25Td2l0Y2hDbGljayA9IHRoaXMuaGFuZGxlT25Td2l0Y2hDbGljay5iaW5kKHRoaXMpO1xuICAgIHRoaXMuaGFuZGxlT25LZXlEb3duID0gdGhpcy5oYW5kbGVPbktleURvd24uYmluZCh0aGlzKTtcbiAgICB0aGlzLmNoZWNrUmVmID0gUmVhY3QuY3JlYXRlUmVmKCk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldFN0YXRlRWxlbWVudCgpOiBCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5xdWVzdGlvbjtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IHF1ZXN0aW9uKCk6IFF1ZXN0aW9uQm9vbGVhbk1vZGVsIHtcbiAgICByZXR1cm4gdGhpcy5xdWVzdGlvbkJhc2UgYXMgUXVlc3Rpb25Cb29sZWFuTW9kZWw7XG4gIH1cbiAgLypcbiAgcHJpdmF0ZSBnZXQgYWxsb3dDbGljaygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5xdWVzdGlvbi5pc0luZGV0ZXJtaW5hdGUgJiYgIXRoaXMuaXNEaXNwbGF5TW9kZTtcbiAgfVxuICAqL1xuICBwcml2YXRlIGRvQ2hlY2sodmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnF1ZXN0aW9uLmJvb2xlYW5WYWx1ZSA9IHZhbHVlO1xuICB9XG4gIGhhbmRsZU9uQ2hhbmdlKGV2ZW50OiBhbnkpIHtcbiAgICB0aGlzLmRvQ2hlY2soZXZlbnQudGFyZ2V0LmNoZWNrZWQpO1xuICB9XG4gIGhhbmRsZU9uQ2xpY2soZXZlbnQ6IGFueSkge1xuICAgIHRoaXMucXVlc3Rpb24ub25MYWJlbENsaWNrKGV2ZW50LCB0cnVlKTtcbiAgfVxuICBoYW5kbGVPblN3aXRjaENsaWNrKGV2ZW50OiBhbnkpIHtcbiAgICB0aGlzLnF1ZXN0aW9uLm9uU3dpdGNoQ2xpY2tNb2RlbChldmVudC5uYXRpdmVFdmVudCk7XG4gIH1cbiAgaGFuZGxlT25MYWJlbENsaWNrKGV2ZW50OiBhbnksIHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5xdWVzdGlvbi5vbkxhYmVsQ2xpY2soZXZlbnQsIHZhbHVlKTtcbiAgfVxuICBoYW5kbGVPbktleURvd24oZXZlbnQ6IGFueSkge1xuICAgIHRoaXMucXVlc3Rpb24ub25LZXlEb3duQ29yZShldmVudCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgdXBkYXRlRG9tRWxlbWVudCgpIHtcbiAgICBpZiAoIXRoaXMucXVlc3Rpb24pIHJldHVybjtcbiAgICBjb25zdCBlbCA9IHRoaXMuY2hlY2tSZWYuY3VycmVudDtcbiAgICBpZiAoZWwpIHtcbiAgICAgIGVsLmluZGV0ZXJtaW5hdGUgPSB0aGlzLnF1ZXN0aW9uLmlzSW5kZXRlcm1pbmF0ZTtcbiAgICB9XG4gICAgdGhpcy5zZXRDb250cm9sKGVsKTtcbiAgICBzdXBlci51cGRhdGVEb21FbGVtZW50KCk7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIGNvbnN0IGNzc0NsYXNzZXMgPSB0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXM7XG4gICAgY29uc3QgaXRlbUNsYXNzOiBzdHJpbmcgPSB0aGlzLnF1ZXN0aW9uLmdldEl0ZW1Dc3MoKTtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9e2Nzc0NsYXNzZXMucm9vdH0gb25LZXlEb3duPXt0aGlzLmhhbmRsZU9uS2V5RG93bn0+XG4gICAgICAgIDxsYWJlbCBjbGFzc05hbWU9e2l0ZW1DbGFzc30gb25DbGljaz17dGhpcy5oYW5kbGVPbkNsaWNrfT5cbiAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgIHJlZj17dGhpcy5jaGVja1JlZn1cbiAgICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgICAgICAgICBuYW1lPXt0aGlzLnF1ZXN0aW9uLm5hbWV9XG4gICAgICAgICAgICB2YWx1ZT17XG4gICAgICAgICAgICAgIHRoaXMucXVlc3Rpb24uYm9vbGVhblZhbHVlID09PSBudWxsXG4gICAgICAgICAgICAgICAgPyBcIlwiXG4gICAgICAgICAgICAgICAgOiB0aGlzLnF1ZXN0aW9uLmJvb2xlYW5WYWx1ZVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWQ9e3RoaXMucXVlc3Rpb24uaW5wdXRJZH1cbiAgICAgICAgICAgIGNsYXNzTmFtZT17Y3NzQ2xhc3Nlcy5jb250cm9sfVxuICAgICAgICAgICAgZGlzYWJsZWQ9e3RoaXMuaXNEaXNwbGF5TW9kZX1cbiAgICAgICAgICAgIGNoZWNrZWQ9e3RoaXMucXVlc3Rpb24uYm9vbGVhblZhbHVlIHx8IGZhbHNlfVxuICAgICAgICAgICAgb25DaGFuZ2U9e3RoaXMuaGFuZGxlT25DaGFuZ2V9XG4gICAgICAgICAgICBhcmlhLXJlcXVpcmVkPXt0aGlzLnF1ZXN0aW9uLmFyaWFSZXF1aXJlZH1cbiAgICAgICAgICAgIGFyaWEtbGFiZWw9e3RoaXMucXVlc3Rpb24uYXJpYUxhYmVsfVxuICAgICAgICAgICAgYXJpYS1pbnZhbGlkPXt0aGlzLnF1ZXN0aW9uLmFyaWFJbnZhbGlkfVxuICAgICAgICAgICAgYXJpYS1kZXNjcmliZWRieT17dGhpcy5xdWVzdGlvbi5hcmlhRGVzY3JpYmVkQnl9XG4gICAgICAgICAgLz5cbiAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgY2xhc3NOYW1lPXt0aGlzLnF1ZXN0aW9uLmdldExhYmVsQ3NzKGZhbHNlKX1cbiAgICAgICAgICAgIG9uQ2xpY2s9eyhldmVudCkgPT4gdGhpcy5oYW5kbGVPbkxhYmVsQ2xpY2soZXZlbnQsIGZhbHNlKX1cbiAgICAgICAgICA+XG4gICAgICAgICAgICB7dGhpcy5yZW5kZXJMb2NTdHJpbmcodGhpcy5xdWVzdGlvbi5sb2NMYWJlbEZhbHNlKX1cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e2Nzc0NsYXNzZXMuc3dpdGNofSBvbkNsaWNrPXt0aGlzLmhhbmRsZU9uU3dpdGNoQ2xpY2t9PlxuICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPXtjc3NDbGFzc2VzLnNsaWRlcn0+XG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aGlzLnF1ZXN0aW9uLmlzRGV0ZXJtaW5hdGVkICYmIGNzc0NsYXNzZXMuc2xpZGVyVGV4dCA/XG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9e2Nzc0NsYXNzZXMuc2xpZGVyVGV4dH0+eyB0aGlzLnJlbmRlckxvY1N0cmluZyh0aGlzLnF1ZXN0aW9uLmdldENoZWNrZWRMYWJlbCgpKSB9PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgOiBudWxsXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgY2xhc3NOYW1lPXt0aGlzLnF1ZXN0aW9uLmdldExhYmVsQ3NzKHRydWUpfVxuICAgICAgICAgICAgb25DbGljaz17KGV2ZW50KSA9PiB0aGlzLmhhbmRsZU9uTGFiZWxDbGljayhldmVudCwgdHJ1ZSl9XG4gICAgICAgICAgPlxuICAgICAgICAgICAge3RoaXMucmVuZGVyTG9jU3RyaW5nKHRoaXMucXVlc3Rpb24ubG9jTGFiZWxUcnVlKX1cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgIDwvbGFiZWw+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG59XG5cblJlYWN0UXVlc3Rpb25GYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyUXVlc3Rpb24oXCJib29sZWFuXCIsIChwcm9wcykgPT4ge1xuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTdXJ2ZXlRdWVzdGlvbkJvb2xlYW4sIHByb3BzKTtcbn0pO1xuIiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xyXG5pbXBvcnQgeyBBY3Rpb25Ecm9wZG93blZpZXdNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xyXG5pbXBvcnQgeyBSZWFjdEVsZW1lbnRGYWN0b3J5IH0gZnJvbSBcIi4uLy4uL2VsZW1lbnQtZmFjdG9yeVwiO1xyXG5pbXBvcnQgeyBQb3B1cCB9IGZyb20gXCIuLi9wb3B1cC9wb3B1cFwiO1xyXG5pbXBvcnQgeyBTdXJ2ZXlBY3Rpb25CYXJJdGVtIH0gZnJvbSBcIi4vYWN0aW9uLWJhci1pdGVtXCI7XHJcblxyXG5leHBvcnQgY2xhc3MgU3VydmV5QWN0aW9uQmFySXRlbURyb3Bkb3duIGV4dGVuZHMgU3VydmV5QWN0aW9uQmFySXRlbSB7XHJcbiAgcHJpdmF0ZSB2aWV3TW9kZWw6IEFjdGlvbkRyb3Bkb3duVmlld01vZGVsO1xyXG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcclxuICAgIHN1cGVyKHByb3BzKTtcclxuICAgIHRoaXMudmlld01vZGVsID0gbmV3IEFjdGlvbkRyb3Bkb3duVmlld01vZGVsKHRoaXMuaXRlbSk7XHJcbiAgfVxyXG4gIHJlbmRlckJ1dHRvbkNvbnRlbnQoKSB7XHJcbiAgICBjb25zdCBidXR0b25Db250ZW50ID0gc3VwZXIucmVuZGVyQnV0dG9uQ29udGVudCgpO1xyXG4gICAgcmV0dXJuIChcclxuICAgICAgPD5cclxuICAgICAgICB7YnV0dG9uQ29udGVudH1cclxuICAgICAgICA8UG9wdXAgbW9kZWw9e3RoaXMuaXRlbS5wb3B1cE1vZGVsfT48L1BvcHVwPlxyXG4gICAgICA8Lz5cclxuICAgICk7XHJcbiAgfVxyXG4gIGNvbXBvbmVudFdpbGxVbm1vdW50KCk6IHZvaWQge1xyXG4gICAgc3VwZXIuY29tcG9uZW50V2lsbFVubW91bnQoKTtcclxuICAgIHRoaXMudmlld01vZGVsLmRpc3Bvc2UoKTtcclxuICB9XHJcbn1cclxuXHJcblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFwic3YtYWN0aW9uLWJhci1pdGVtLWRyb3Bkb3duXCIsIChwcm9wcykgPT4ge1xyXG4gIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFN1cnZleUFjdGlvbkJhckl0ZW1Ecm9wZG93biwgcHJvcHMpO1xyXG59KTtcclxuIiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xyXG5pbXBvcnQgeyBCYXNlLCBBY3Rpb24gfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcclxuaW1wb3J0IHsgUmVhY3RFbGVtZW50RmFjdG9yeSB9IGZyb20gXCIuLi8uLi9lbGVtZW50LWZhY3RvcnlcIjtcclxuaW1wb3J0IHsgU3VydmV5RWxlbWVudEJhc2UgfSBmcm9tIFwiLi4vLi4vcmVhY3RxdWVzdGlvbl9lbGVtZW50XCI7XHJcbmltcG9ydCB7IGF0dGFjaEtleTJjbGljayB9IGZyb20gXCIuLi8uLi9yZWFjdFN1cnZleVwiO1xyXG5pbXBvcnQgeyBTdmdJY29uIH0gZnJvbSBcIi4uL3N2Zy1pY29uL3N2Zy1pY29uXCI7XHJcbmltcG9ydCB7IFN1cnZleUFjdGlvbkJhclNlcGFyYXRvciB9IGZyb20gXCIuL2FjdGlvbi1iYXItc2VwYXJhdG9yXCI7XHJcblxyXG5pbnRlcmZhY2UgSUFjdGlvbkJhckl0ZW1Qcm9wcyB7XHJcbiAgaXRlbTogQWN0aW9uO1xyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgU3VydmV5QWN0aW9uIGV4dGVuZHMgU3VydmV5RWxlbWVudEJhc2U8SUFjdGlvbkJhckl0ZW1Qcm9wcywgYW55PiB7XHJcbiAgZ2V0IGl0ZW0oKSB7XHJcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5pdGVtO1xyXG4gIH1cclxuICBwcm90ZWN0ZWQgZ2V0U3RhdGVFbGVtZW50KCk6IEJhc2Uge1xyXG4gICAgcmV0dXJuIHRoaXMuaXRlbTtcclxuICB9XHJcblxyXG4gIHJlbmRlckVsZW1lbnQoKSB7XHJcbiAgICAvL3JlZmFjdG9yXHJcbiAgICBjb25zdCBpdGVtQ2xhc3MgPSB0aGlzLml0ZW0uZ2V0QWN0aW9uUm9vdENzcygpO1xyXG4gICAgY29uc3Qgc2VwYXJhdG9yID0gdGhpcy5pdGVtLm5lZWRTZXBhcmF0b3IgPyAoXHJcbiAgICAgIDxTdXJ2ZXlBY3Rpb25CYXJTZXBhcmF0b3I+PC9TdXJ2ZXlBY3Rpb25CYXJTZXBhcmF0b3I+XHJcbiAgICApIDogbnVsbDtcclxuXHJcbiAgICBjb25zdCBpdGVtQ29tcG9uZW50ID0gUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5jcmVhdGVFbGVtZW50KFxyXG4gICAgICB0aGlzLml0ZW0uY29tcG9uZW50IHx8IFwic3YtYWN0aW9uLWJhci1pdGVtXCIsXHJcbiAgICAgIHtcclxuICAgICAgICBpdGVtOiB0aGlzLml0ZW0sXHJcbiAgICAgIH1cclxuICAgICk7XHJcbiAgICByZXR1cm4gKFxyXG4gICAgICA8ZGl2IGNsYXNzTmFtZT17aXRlbUNsYXNzfSBpZD17dGhpcy5pdGVtLmlkfT5cclxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2LWFjdGlvbl9fY29udGVudFwiPlxyXG4gICAgICAgICAge3NlcGFyYXRvcn1cclxuICAgICAgICAgIHtpdGVtQ29tcG9uZW50fVxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgICk7XHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgU3VydmV5QWN0aW9uQmFySXRlbSBleHRlbmRzIFN1cnZleUVsZW1lbnRCYXNlPFxyXG4gIElBY3Rpb25CYXJJdGVtUHJvcHMsXHJcbiAgYW55XHJcbj4ge1xyXG4gIGdldCBpdGVtKCk6IEFjdGlvbiB7XHJcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5pdGVtO1xyXG4gIH1cclxuICBwcm90ZWN0ZWQgZ2V0U3RhdGVFbGVtZW50KCk6IEJhc2Uge1xyXG4gICAgcmV0dXJuIHRoaXMuaXRlbTtcclxuICB9XHJcblxyXG4gIHJlbmRlckVsZW1lbnQoKSB7XHJcbiAgICByZXR1cm4gPD57dGhpcy5yZW5kZXJJbm5lckJ1dHRvbigpfTwvPjtcclxuICB9XHJcblxyXG4gIHJlbmRlclRleHQoKSB7XHJcbiAgICBpZiAoIXRoaXMuaXRlbS5oYXNUaXRsZSkgcmV0dXJuIG51bGw7XHJcbiAgICBjb25zdCB0aXRsZUNsYXNzID0gdGhpcy5pdGVtLmdldEFjdGlvbkJhckl0ZW1UaXRsZUNzcygpO1xyXG4gICAgcmV0dXJuIDxzcGFuIGNsYXNzTmFtZT17dGl0bGVDbGFzc30+e3RoaXMuaXRlbS50aXRsZX08L3NwYW4+O1xyXG4gIH1cclxuXHJcbiAgcmVuZGVyQnV0dG9uQ29udGVudCgpIHtcclxuICAgIGNvbnN0IHRleHQgPSB0aGlzLnJlbmRlclRleHQoKTtcclxuICAgIGNvbnN0IHN2Z0ljb24gPSAhIXRoaXMuaXRlbS5pY29uTmFtZSA/IChcclxuICAgICAgPFN2Z0ljb25cclxuICAgICAgICBjbGFzc05hbWU9e3RoaXMuaXRlbS5jc3NDbGFzc2VzLml0ZW1JY29ufVxyXG4gICAgICAgIHNpemU9e3RoaXMuaXRlbS5pY29uU2l6ZX1cclxuICAgICAgICBpY29uTmFtZT17dGhpcy5pdGVtLmljb25OYW1lfVxyXG4gICAgICAgIHRpdGxlPXt0aGlzLml0ZW0udG9vbHRpcCB8fCB0aGlzLml0ZW0udGl0bGV9XHJcbiAgICAgICAgYXJpYS1jaGVja2VkPXt0aGlzLml0ZW0uYXJpYUNoZWNrZWR9XHJcbiAgICAgID48L1N2Z0ljb24+XHJcbiAgICApIDogbnVsbDtcclxuICAgIHJldHVybiAoXHJcbiAgICAgIDw+XHJcbiAgICAgICAge3N2Z0ljb259XHJcbiAgICAgICAge3RleHR9XHJcbiAgICAgIDwvPlxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHJlbmRlcklubmVyQnV0dG9uKCkge1xyXG4gICAgY29uc3QgY2xhc3NOYW1lID0gdGhpcy5pdGVtLmdldEFjdGlvbkJhckl0ZW1Dc3MoKTtcclxuICAgIGNvbnN0IHRpdGxlID0gdGhpcy5pdGVtLnRvb2x0aXAgfHwgdGhpcy5pdGVtLnRpdGxlO1xyXG4gICAgY29uc3QgYnV0dG9uQ29udGVudCA9IHRoaXMucmVuZGVyQnV0dG9uQ29udGVudCgpO1xyXG4gICAgY29uc3QgdGFiSW5kZXggPSB0aGlzLml0ZW0uZGlzYWJsZVRhYlN0b3AgPyAtMSA6IHVuZGVmaW5lZDtcclxuICAgIGNvbnN0IGJ1dHRvbiA9IGF0dGFjaEtleTJjbGljayhcclxuICAgICAgPGJ1dHRvblxyXG4gICAgICAgIGNsYXNzTmFtZT17Y2xhc3NOYW1lfVxyXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgIGRpc2FibGVkPXt0aGlzLml0ZW0uZGlzYWJsZWR9XHJcbiAgICAgICAgb25DbGljaz17KCkgPT4gdGhpcy5pdGVtLmFjdGlvbih0aGlzLml0ZW0pfVxyXG4gICAgICAgIHRpdGxlPXt0aXRsZX1cclxuICAgICAgICB0YWJJbmRleD17dGFiSW5kZXh9XHJcbiAgICAgID5cclxuICAgICAgICB7YnV0dG9uQ29udGVudH1cclxuICAgICAgPC9idXR0b24+LCBudWxsLCB7IHByb2Nlc3NFc2M6IGZhbHNlIH0pO1xyXG5cclxuICAgIHJldHVybiBidXR0b247XHJcbiAgfVxyXG59XHJcblxyXG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcInN2LWFjdGlvbi1iYXItaXRlbVwiLCAocHJvcHMpID0+IHtcclxuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTdXJ2ZXlBY3Rpb25CYXJJdGVtLCBwcm9wcyk7XHJcbn0pO1xyXG4iLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBSZWFjdEVsZW1lbnRGYWN0b3J5IH0gZnJvbSBcIi4uLy4uL2VsZW1lbnQtZmFjdG9yeVwiO1xuXG5leHBvcnQgY2xhc3MgU3VydmV5QWN0aW9uQmFyU2VwYXJhdG9yIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50PGFueSwgYW55PiB7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gIH1cbiAgcmVuZGVyKCkge1xuICAgIHZhciBjbGFzc05hbWUgPSBgc3YtYWN0aW9uLWJhci1zZXBhcmF0b3IgJHt0aGlzLnByb3BzLmNzc0NsYXNzZXN9YDtcbiAgICByZXR1cm4gPGRpdiBjbGFzc05hbWU9e2NsYXNzTmFtZX0+PC9kaXY+O1xuICB9XG59XG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcbiAgXCJzdi1hY3Rpb24tYmFyLXNlcGFyYXRvclwiLFxuICAocHJvcHMpID0+IHtcbiAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTdXJ2ZXlBY3Rpb25CYXJTZXBhcmF0b3IsIHByb3BzKTtcbiAgfVxuKTtcbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7XG4gIEJhc2UsXG4gIEFjdGlvbixcbiAgQWN0aW9uQ29udGFpbmVyXG59IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgUmVhY3RFbGVtZW50RmFjdG9yeSB9IGZyb20gXCIuLi8uLi9lbGVtZW50LWZhY3RvcnlcIjtcbmltcG9ydCB7IFN1cnZleUVsZW1lbnRCYXNlIH0gZnJvbSBcIi4uLy4uL3JlYWN0cXVlc3Rpb25fZWxlbWVudFwiO1xuaW1wb3J0IHsgU3VydmV5QWN0aW9uIH0gZnJvbSBcIi4vYWN0aW9uLWJhci1pdGVtXCI7XG5cbmV4cG9ydCAqIGZyb20gXCIuL2FjdGlvbi1iYXItaXRlbS1kcm9wZG93blwiO1xuZXhwb3J0ICogZnJvbSBcIi4vYWN0aW9uLWJhci1zZXBhcmF0b3JcIjtcblxuaW50ZXJmYWNlIElBY3Rpb25CYXJQcm9wcyB7XG4gIG1vZGVsOiBBY3Rpb25Db250YWluZXI8QWN0aW9uPjtcbiAgaGFuZGxlQ2xpY2s/OiBib29sZWFuO1xufVxuXG5leHBvcnQgY2xhc3MgU3VydmV5QWN0aW9uQmFyIGV4dGVuZHMgU3VydmV5RWxlbWVudEJhc2U8SUFjdGlvbkJhclByb3BzLCBhbnk+IHtcbiAgcHJpdmF0ZSByb290UmVmOiBSZWFjdC5SZWZPYmplY3Q8SFRNTERpdkVsZW1lbnQ+O1xuXG4gIGNvbnN0cnVjdG9yKHByb3BzOiBJQWN0aW9uQmFyUHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgdGhpcy5yb290UmVmID0gUmVhY3QuY3JlYXRlUmVmKCk7XG4gIH1cblxuICBwcml2YXRlIGdldCBoYW5kbGVDbGljaygpIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5oYW5kbGVDbGljayAhPT0gdW5kZWZpbmVkID8gdGhpcy5wcm9wcy5oYW5kbGVDbGljayA6IHRydWU7XG4gIH1cblxuICBnZXQgbW9kZWwoKSB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMubW9kZWw7XG4gIH1cblxuICBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICBzdXBlci5jb21wb25lbnREaWRNb3VudCgpO1xuICAgIGlmICghdGhpcy5tb2RlbC5oYXNBY3Rpb25zKSByZXR1cm47XG4gICAgY29uc3QgY29udGFpbmVyOiBIVE1MRGl2RWxlbWVudCB8IG51bGwgPSB0aGlzLnJvb3RSZWYuY3VycmVudDtcbiAgICBpZighIWNvbnRhaW5lcikge1xuICAgICAgdGhpcy5tb2RlbC5pbml0UmVzcG9uc2l2aXR5TWFuYWdlcihjb250YWluZXIpO1xuICAgIH1cbiAgfVxuICBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICBzdXBlci5jb21wb25lbnRXaWxsVW5tb3VudCgpO1xuICAgIGlmICghIXRoaXMubW9kZWwuaGFzQWN0aW9ucykge1xuICAgICAgdGhpcy5tb2RlbC5yZXNldFJlc3BvbnNpdml0eU1hbmFnZXIoKTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0U3RhdGVFbGVtZW50KCk6IEJhc2Uge1xuICAgIHJldHVybiB0aGlzLm1vZGVsO1xuICB9XG5cbiAgcmVuZGVyRWxlbWVudCgpOiBhbnkge1xuICAgIGlmICghdGhpcy5tb2RlbC5oYXNBY3Rpb25zKSByZXR1cm4gbnVsbDtcbiAgICBjb25zdCBpdGVtcyA9IHRoaXMucmVuZGVySXRlbXMoKTtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdlxuICAgICAgICByZWY9e3RoaXMucm9vdFJlZn1cbiAgICAgICAgY2xhc3NOYW1lPXt0aGlzLm1vZGVsLmdldFJvb3RDc3MoKX1cbiAgICAgICAgb25DbGljaz17dGhpcy5oYW5kbGVDbGljayA/IGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIH0gOiB1bmRlZmluZWR9XG4gICAgICA+XG4gICAgICAgIHtpdGVtc31cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cblxuICByZW5kZXJJdGVtcygpIHtcbiAgICByZXR1cm4gdGhpcy5tb2RlbC5yZW5kZXJlZEFjdGlvbnMubWFwKFxuICAgICAgKGl0ZW06IEFjdGlvbiwgaXRlbUluZGV4OiBudW1iZXIpID0+IHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICA8U3VydmV5QWN0aW9uIGl0ZW09e2l0ZW19IGtleT17XCJpdGVtXCIgKyBpdGVtSW5kZXh9PjwvU3VydmV5QWN0aW9uPlxuICAgICAgICApO1xuICAgICAgfVxuICAgICk7XG4gIH1cbn1cblxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXCJzdi1hY3Rpb24tYmFyXCIsIChwcm9wcykgPT4ge1xuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChcbiAgICBTdXJ2ZXlBY3Rpb25CYXIsXG4gICAgKHByb3BzIGFzIGFueSkgYXMgSUFjdGlvbkJhclByb3BzXG4gICk7XG59KTtcbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcblxuZXhwb3J0IGNsYXNzIEJyYW5kSW5mbyBleHRlbmRzIFJlYWN0LkNvbXBvbmVudDxhbnksIGFueT4ge1xuICByZW5kZXIoKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3YtYnJhbmQtaW5mb1wiPlxuICAgICAgICA8YSBjbGFzc05hbWU9XCJzdi1icmFuZC1pbmZvX19sb2dvXCIgaHJlZj1cImh0dHBzOi8vc3VydmV5anMuaW8vP3V0bV9zb3VyY2U9YnVpbHQtaW5fbGlua3MmdXRtX21lZGl1bT1vbmxpbmVfc3VydmV5X3Rvb2wmdXRtX2NhbXBhaWduPWxhbmRpbmdfcGFnZVwiPjxpbWcgc3JjPVwiaHR0cHM6Ly9zdXJ2ZXlqcy5pby9Db250ZW50L0ltYWdlcy9wb3dlcmVkYnkuc3ZnXCIvPjwvYT5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdi1icmFuZC1pbmZvX190ZXh0XCI+VHJ5IGFuZCBzZWUgaG93IGVhc3kgaXQgaXMgdG8gPGEgaHJlZj1cImh0dHBzOi8vc3VydmV5anMuaW8vY3JlYXRlLXN1cnZleT91dG1fc291cmNlPWJ1aWx0LWluX2xpbmtzJnV0bV9tZWRpdW09b25saW5lX3N1cnZleV90b29sJnV0bV9jYW1wYWlnbj1jcmVhdGVfc3VydmV5XCI+Y3JlYXRlIGEgc3VydmV5PC9hPjwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2LWJyYW5kLWluZm9fX3Rlcm1zXCI+PGEgaHJlZj1cImh0dHBzOi8vc3VydmV5anMuaW8vVGVybXNPZlVzZVwiPlRlcm1zIG9mIFVzZSAmIFByaXZhY3kgU3RhdGVtZW50PC9hPjwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxufVxuIiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xyXG5pbXBvcnQgeyBMaXN0TW9kZWwgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcclxuaW1wb3J0IHsgUmVhY3RFbGVtZW50RmFjdG9yeSB9IGZyb20gXCIuLi8uLi9lbGVtZW50LWZhY3RvcnlcIjtcclxuaW1wb3J0IHsgU3VydmV5RWxlbWVudEJhc2UgfSBmcm9tIFwiLi4vLi4vcmVhY3RxdWVzdGlvbl9lbGVtZW50XCI7XHJcbmltcG9ydCB7IGF0dGFjaEtleTJjbGljayB9IGZyb20gXCIuLi8uLi9yZWFjdFN1cnZleVwiO1xyXG5pbXBvcnQgeyBTdmdJY29uIH0gZnJvbSBcIi4uL3N2Zy1pY29uL3N2Zy1pY29uXCI7XHJcblxyXG5pbnRlcmZhY2UgSUxpc3RJdGVtUHJvcHMge1xyXG4gIG1vZGVsOiBMaXN0TW9kZWw7XHJcbiAgaXRlbTogYW55O1xyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgTGlzdEl0ZW0gZXh0ZW5kcyBTdXJ2ZXlFbGVtZW50QmFzZTxJTGlzdEl0ZW1Qcm9wcywgYW55PiB7XHJcbiAgZ2V0IG1vZGVsKCk6IExpc3RNb2RlbCB7XHJcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5tb2RlbDtcclxuICB9XHJcbiAgZ2V0IGl0ZW0oKTogYW55IHtcclxuICAgIHJldHVybiB0aGlzLnByb3BzLml0ZW07XHJcbiAgfVxyXG4gIGhhbmRsZUtleWRvd24gPSAoZXZlbnQ6IGFueSkgPT4ge1xyXG4gICAgdGhpcy5tb2RlbC5vbktleURvd24oZXZlbnQpO1xyXG4gIH07XHJcbiAgZ2V0U3RhdGVFbGVtZW50KCkge1xyXG4gICAgcmV0dXJuIHRoaXMuaXRlbTtcclxuICB9XHJcbiAgcmVuZGVyKCk6IEpTWC5FbGVtZW50IHwgbnVsbCB7XHJcbiAgICBpZiAoIXRoaXMuaXRlbSkgcmV0dXJuIG51bGw7XHJcbiAgICBjb25zdCBjb250ZW50V3JhcFN0eWxlID0ge1xyXG4gICAgICBwYWRkaW5nSW5saW5lU3RhcnQ6IHRoaXMubW9kZWwuZ2V0SXRlbUluZGVudCh0aGlzLml0ZW0pXHJcbiAgICB9O1xyXG4gICAgY29uc3QgY2xhc3NOYW1lID0gdGhpcy5tb2RlbC5nZXRJdGVtQ2xhc3ModGhpcy5pdGVtKTtcclxuICAgIGNvbnN0IGNvbnRlbnQ6IEFycmF5PEpTWC5FbGVtZW50PiA9IFtdO1xyXG4gICAgaWYgKCF0aGlzLml0ZW0uY29tcG9uZW50KSB7XHJcbiAgICAgIGNvbnN0IHRleHQgPSB0aGlzLnJlbmRlckxvY1N0cmluZyh0aGlzLml0ZW0ubG9jVGl0bGUsIHVuZGVmaW5lZCwgXCJsb2NTdHJpbmdcIik7XHJcbiAgICAgIGlmKHRoaXMuaXRlbS5pY29uTmFtZSkge1xyXG4gICAgICAgIGNvbnN0IGljb24gPSA8U3ZnSWNvblxyXG4gICAgICAgICAga2V5PXsxfVxyXG4gICAgICAgICAgY2xhc3NOYW1lPXt0aGlzLm1vZGVsLmNzc0NsYXNzZXMuaXRlbUljb259XHJcbiAgICAgICAgICBpY29uTmFtZT17dGhpcy5pdGVtLmljb25OYW1lfVxyXG4gICAgICAgICAgc2l6ZT17MjR9XHJcbiAgICAgICAgICBhcmlhLWxhYmVsPXt0aGlzLml0ZW0udGl0bGV9XHJcbiAgICAgICAgPjwvU3ZnSWNvbj47XHJcbiAgICAgICAgY29udGVudC5wdXNoKGljb24pO1xyXG4gICAgICAgIGNvbnRlbnQucHVzaCg8c3BhbiBrZXk9ezJ9Pnt0ZXh0fTwvc3Bhbj4pO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGNvbnRlbnQucHVzaCh0ZXh0KTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc3QgbmV3RWxlbWVudCA9IFJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UuY3JlYXRlRWxlbWVudCh0aGlzLml0ZW0uY29tcG9uZW50LCB7IGl0ZW06IHRoaXMuaXRlbSwga2V5OiB0aGlzLml0ZW0uaWQgfSk7XHJcbiAgICAgIGlmKCEhbmV3RWxlbWVudCkge1xyXG4gICAgICAgIGNvbnRlbnQucHVzaChuZXdFbGVtZW50KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGNvbnRlbnRXcmFwID1cclxuICAgICAgICA8ZGl2XHJcbiAgICAgICAgICBzdHlsZT17Y29udGVudFdyYXBTdHlsZX1cclxuICAgICAgICAgIGNsYXNzTmFtZT17dGhpcy5tb2RlbC5jc3NDbGFzc2VzLml0ZW1Cb2R5fVxyXG4gICAgICAgID5cclxuICAgICAgICAgIHtjb250ZW50fVxyXG4gICAgICAgIDwvZGl2PjtcclxuICAgIGNvbnN0IHNlcGFyYXRvciA9IHRoaXMuaXRlbS5uZWVkU2VwYXJhdG9yID8gPGRpdiBjbGFzc05hbWUgPSB7dGhpcy5tb2RlbC5jc3NDbGFzc2VzLml0ZW1TZXBhcmF0b3J9Lz46bnVsbDtcclxuICAgIGNvbnN0IGlzVmlzaWJsZSA9IHRoaXMubW9kZWwuaXNJdGVtVmlzaWJsZSh0aGlzLml0ZW0pO1xyXG4gICAgY29uc3Qgc3R5bGUgPSB7XHJcbiAgICAgIGRpc3BsYXk6IGlzVmlzaWJsZSA/IG51bGwgOiBcIm5vbmVcIlxyXG4gICAgfTtcclxuICAgIHJldHVybiBhdHRhY2hLZXkyY2xpY2soXHJcbiAgICAgIDxsaVxyXG4gICAgICAgIGNsYXNzTmFtZT17Y2xhc3NOYW1lfVxyXG4gICAgICAgIHJvbGU9XCJvcHRpb25cIlxyXG4gICAgICAgIHN0eWxlPXtzdHlsZSBhcyBhbnl9XHJcbiAgICAgICAgYXJpYS1zZWxlY3RlZD17dGhpcy5tb2RlbC5pc0l0ZW1TZWxlY3RlZCh0aGlzLml0ZW0pfVxyXG4gICAgICAgIG9uQ2xpY2s9eyhldmVudDogYW55KSA9PiB7XHJcbiAgICAgICAgICB0aGlzLm1vZGVsLm9uSXRlbUNsaWNrKHRoaXMuaXRlbSk7XHJcbiAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgICB9fVxyXG4gICAgICAgIG9uUG9pbnRlckRvd249eyhldmVudDogYW55KSA9PiB0aGlzLm1vZGVsLm9uUG9pbnRlckRvd24oZXZlbnQsIHRoaXMuaXRlbSl9PlxyXG4gICAgICAgIHtzZXBhcmF0b3J9XHJcbiAgICAgICAge2NvbnRlbnRXcmFwfVxyXG4gICAgICA8L2xpPlxyXG4gICAgKTtcclxuICB9XHJcbiAgY29tcG9uZW50RGlkTW91bnQoKSB7XHJcbiAgICBzdXBlci5jb21wb25lbnREaWRNb3VudCgpO1xyXG5cclxuICAgIHRoaXMubW9kZWwub25MYXN0SXRlbVJlbmRlZCh0aGlzLml0ZW0pO1xyXG4gIH1cclxufVxyXG5cclxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXCJzdi1saXN0LWl0ZW1cIiwgKHByb3BzKSA9PiB7XHJcbiAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoTGlzdEl0ZW0sIHByb3BzKTtcclxufSk7XHJcbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcclxuaW1wb3J0IHsgSUFjdGlvbiwgTGlzdE1vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XHJcbmltcG9ydCB7IFJlYWN0RWxlbWVudEZhY3RvcnkgfSBmcm9tIFwiLi4vLi4vZWxlbWVudC1mYWN0b3J5XCI7XHJcbmltcG9ydCB7IFN1cnZleUVsZW1lbnRCYXNlIH0gZnJvbSBcIi4uLy4uL3JlYWN0cXVlc3Rpb25fZWxlbWVudFwiO1xyXG5pbXBvcnQgeyBTdmdJY29uIH0gZnJvbSBcIi4uL3N2Zy1pY29uL3N2Zy1pY29uXCI7XHJcbmltcG9ydCB7IExpc3RJdGVtIH0gZnJvbSBcIi4vbGlzdC1pdGVtXCI7XHJcblxyXG5pbnRlcmZhY2UgSUxpc3RQcm9wcyB7XHJcbiAgbW9kZWw6IExpc3RNb2RlbDtcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIExpc3QgZXh0ZW5kcyBTdXJ2ZXlFbGVtZW50QmFzZTxJTGlzdFByb3BzLCBhbnk+IHtcclxuICBwcml2YXRlIGxpc3RDb250YWluZXJSZWY6IFJlYWN0LlJlZk9iamVjdDxIVE1MRGl2RWxlbWVudD47XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcclxuICAgIHN1cGVyKHByb3BzKTtcclxuICAgIHRoaXMuc3RhdGUgPSB7XHJcbiAgICAgIGZpbHRlclN0cmluZzogdGhpcy5tb2RlbC5maWx0ZXJTdHJpbmcgfHwgXCJcIlxyXG4gICAgfTtcclxuICAgIHRoaXMubGlzdENvbnRhaW5lclJlZiA9IFJlYWN0LmNyZWF0ZVJlZigpO1xyXG4gIH1cclxuICBnZXQgbW9kZWwoKTogTGlzdE1vZGVsIHtcclxuICAgIHJldHVybiB0aGlzLnByb3BzLm1vZGVsO1xyXG4gIH1cclxuICBoYW5kbGVLZXlkb3duID0gKGV2ZW50OiBhbnkpID0+IHtcclxuICAgIHRoaXMubW9kZWwub25LZXlEb3duKGV2ZW50KTtcclxuICB9O1xyXG4gIGhhbmRsZU1vdXNlTW92ZSA9IChldmVudDogYW55KSA9PiB7XHJcbiAgICB0aGlzLm1vZGVsLm9uTW91c2VNb3ZlKGV2ZW50KTtcclxuICB9O1xyXG4gIGdldFN0YXRlRWxlbWVudCgpIHtcclxuICAgIHJldHVybiB0aGlzLm1vZGVsO1xyXG4gIH1cclxuICBjb21wb25lbnREaWRNb3VudCgpOiB2b2lkIHtcclxuICAgIHN1cGVyLmNvbXBvbmVudERpZE1vdW50KCk7XHJcbiAgICBpZighIXRoaXMubGlzdENvbnRhaW5lclJlZiAmJiAhIXRoaXMubGlzdENvbnRhaW5lclJlZi5jdXJyZW50KSB7XHJcbiAgICAgIHRoaXMubW9kZWwuaW5pdExpc3RDb250YWluZXJIdG1sRWxlbWVudCh0aGlzLmxpc3RDb250YWluZXJSZWYuY3VycmVudCk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIHJlbmRlckVsZW1lbnQoKSB7XHJcbiAgICBjb25zdCBpdGVtcyA9IHRoaXMucmVuZGVySXRlbXMoKTtcclxuICAgIHJldHVybiAoXHJcbiAgICAgIDxkaXYgY2xhc3NOYW1lPXt0aGlzLm1vZGVsLmNzc0NsYXNzZXMucm9vdH0gcmVmPXt0aGlzLmxpc3RDb250YWluZXJSZWZ9PlxyXG4gICAgICAgIHt0aGlzLnNlYXJjaEVsZW1lbnRDb250ZW50KCl9XHJcbiAgICAgICAge3RoaXMuZW1wdHlDb250ZW50KCl9XHJcbiAgICAgICAgPHVsXHJcbiAgICAgICAgICBjbGFzc05hbWU9e3RoaXMubW9kZWwuY3NzQ2xhc3Nlcy5pdGVtc0NvbnRhaW5lcn1cclxuICAgICAgICAgIHJvbGU9XCJsaXN0Ym94XCJcclxuICAgICAgICAgIG9uTW91c2VEb3duPXsoZSkgPT4ge1xyXG4gICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICB9fVxyXG4gICAgICAgICAgb25LZXlEb3duPXt0aGlzLmhhbmRsZUtleWRvd259XHJcbiAgICAgICAgICBvbk1vdXNlTW92ZT17dGhpcy5oYW5kbGVNb3VzZU1vdmV9XHJcbiAgICAgICAgPlxyXG4gICAgICAgICAge2l0ZW1zfVxyXG4gICAgICAgIDwvdWw+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgKTtcclxuICB9XHJcbiAgcmVuZGVySXRlbXMoKSB7XHJcbiAgICBpZiAoIXRoaXMubW9kZWwpIHtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgICBjb25zdCBpdGVtcyA9IHRoaXMubW9kZWwucmVuZGVyZWRBY3Rpb25zO1xyXG4gICAgaWYgKCFpdGVtcykge1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICAgIHJldHVybiBpdGVtcy5tYXAoKGl0ZW06IElBY3Rpb24sIGl0ZW1JbmRleDogbnVtYmVyKSA9PiB7XHJcbiAgICAgIHJldHVybiAoXHJcbiAgICAgICAgPExpc3RJdGVtIG1vZGVsPXt0aGlzLm1vZGVsfSBpdGVtPXtpdGVtfSBrZXk9e1wiaXRlbVwiICsgaXRlbUluZGV4fT48L0xpc3RJdGVtPlxyXG4gICAgICApO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBzZWFyY2hFbGVtZW50Q29udGVudCgpIHtcclxuICAgIGlmICghdGhpcy5tb2RlbC5zaG93RmlsdGVyKSByZXR1cm4gbnVsbDtcclxuICAgIGVsc2Uge1xyXG4gICAgICBjb25zdCBvbkNoYW5nZSA9IChlOiBhbnkpID0+IHtcclxuICAgICAgICBpZiAoZS50YXJnZXQgPT09IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpIHtcclxuICAgICAgICAgIHRoaXMubW9kZWwuZmlsdGVyU3RyaW5nID0gZS50YXJnZXQudmFsdWU7XHJcbiAgICAgICAgfVxyXG4gICAgICB9O1xyXG4gICAgICBjb25zdCBvbktleVVwID0gKGU6IGFueSkgPT4ge1xyXG4gICAgICAgIHRoaXMubW9kZWwuZ29Ub0l0ZW1zKGUpO1xyXG4gICAgICB9O1xyXG4gICAgICByZXR1cm4gKFxyXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXt0aGlzLm1vZGVsLmNzc0NsYXNzZXMuZmlsdGVyfT5cclxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXt0aGlzLm1vZGVsLmNzc0NsYXNzZXMuZmlsdGVySWNvbn0+XHJcbiAgICAgICAgICAgIDxTdmdJY29uXHJcbiAgICAgICAgICAgICAgaWNvbk5hbWU9e1wiaWNvbi1zZWFyY2hcIn1cclxuICAgICAgICAgICAgICBzaXplPXtcImF1dG9cIn1cclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICA8L1N2Z0ljb24+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgICB0eXBlPVwidGV4dFwiXHJcbiAgICAgICAgICAgIGNsYXNzTmFtZT17dGhpcy5tb2RlbC5jc3NDbGFzc2VzLmZpbHRlcklucHV0fVxyXG4gICAgICAgICAgICBhcmlhLWxhYmVsPXt0aGlzLm1vZGVsLmZpbHRlclN0cmluZ1BsYWNlaG9sZGVyfVxyXG4gICAgICAgICAgICBwbGFjZWhvbGRlcj17dGhpcy5tb2RlbC5maWx0ZXJTdHJpbmdQbGFjZWhvbGRlcn1cclxuICAgICAgICAgICAgdmFsdWU9e3RoaXMuc3RhdGUuZmlsdGVyU3RyaW5nfVxyXG4gICAgICAgICAgICBvbktleVVwPXtvbktleVVwfVxyXG4gICAgICAgICAgICBvbkNoYW5nZT17b25DaGFuZ2V9XHJcbiAgICAgICAgICA+PC9pbnB1dD5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgKTtcclxuICAgIH1cclxuICB9XHJcbiAgZW1wdHlDb250ZW50KCkge1xyXG4gICAgY29uc3Qgc3R5bGUgPSB7XHJcbiAgICAgIGRpc3BsYXk6IHRoaXMubW9kZWwuaXNFbXB0eSA/IG51bGwgOiBcIm5vbmVcIixcclxuICAgIH07XHJcblxyXG4gICAgcmV0dXJuICg8ZGl2IGNsYXNzTmFtZT17dGhpcy5tb2RlbC5jc3NDbGFzc2VzLmVtcHR5Q29udGFpbmVyfSBzdHlsZT17c3R5bGUgYXMgYW55fT5cclxuICAgICAgPGRpdiBjbGFzc05hbWU9e3RoaXMubW9kZWwuY3NzQ2xhc3Nlcy5lbXB0eVRleHR9IGFyaWEtbGFiZWw9e3RoaXMubW9kZWwuZW1wdHlNZXNzYWdlfT57dGhpcy5tb2RlbC5lbXB0eU1lc3NhZ2V9PC9kaXY+XHJcbiAgICA8L2Rpdj4pO1xyXG4gIH1cclxufVxyXG5cclxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXCJzdi1saXN0XCIsIChwcm9wcykgPT4ge1xyXG4gIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KExpc3QsIHByb3BzKTtcclxufSk7XHJcbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IEFjdGlvbiwgTWF0cml4RHJvcGRvd25Sb3dNb2RlbEJhc2UsIFF1ZXN0aW9uTWF0cml4RHJvcGRvd25Nb2RlbEJhc2UgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFJlYWN0RWxlbWVudEZhY3RvcnkgfSBmcm9tIFwiLi4vLi4vLi4vZWxlbWVudC1mYWN0b3J5XCI7XG5pbXBvcnQgeyBSZWFjdFN1cnZleUVsZW1lbnQgfSBmcm9tIFwiLi4vLi4vLi4vcmVhY3RxdWVzdGlvbl9lbGVtZW50XCI7XG5pbXBvcnQgeyBTdmdJY29uIH0gZnJvbSBcIi4uLy4uL3N2Zy1pY29uL3N2Zy1pY29uXCI7XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlRdWVzdGlvbk1hdHJpeERldGFpbEJ1dHRvbiBleHRlbmRzIFJlYWN0U3VydmV5RWxlbWVudCB7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgdGhpcy5oYW5kbGVPblNob3dIaWRlQ2xpY2sgPSB0aGlzLmhhbmRsZU9uU2hvd0hpZGVDbGljay5iaW5kKHRoaXMpO1xuICB9XG4gIHByb3RlY3RlZCBnZXRTdGF0ZUVsZW1lbnQoKSB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuaXRlbTtcbiAgfVxuICBnZXQgaXRlbSgpOiBBY3Rpb24ge1xuICAgIHJldHVybiB0aGlzLnByb3BzLml0ZW07XG4gIH1cbiAgcHJpdmF0ZSBnZXQgcXVlc3Rpb24oKTogUXVlc3Rpb25NYXRyaXhEcm9wZG93bk1vZGVsQmFzZSB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuaXRlbS5kYXRhLnF1ZXN0aW9uO1xuICB9XG4gIHByaXZhdGUgZ2V0IHJvdygpOiBNYXRyaXhEcm9wZG93blJvd01vZGVsQmFzZSB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuaXRlbS5kYXRhLnJvdztcbiAgfVxuICBoYW5kbGVPblNob3dIaWRlQ2xpY2soZXZlbnQ6IGFueSkge1xuICAgIHRoaXMucm93LnNob3dIaWRlRGV0YWlsUGFuZWxDbGljaygpO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICB2YXIgaXNFeHBhbmRlZCA9IHRoaXMucm93LmlzRGV0YWlsUGFuZWxTaG93aW5nO1xuICAgIHZhciBhcmlhRXhwYW5kZWQgPSBpc0V4cGFuZGVkO1xuICAgIHZhciBhcmlhQ29udHJvbHMgPSBpc0V4cGFuZGVkID8gdGhpcy5yb3cuZGV0YWlsUGFuZWxJZCA6IHVuZGVmaW5lZDtcbiAgICByZXR1cm4gKFxuICAgICAgPGJ1dHRvblxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgb25DbGljaz17dGhpcy5oYW5kbGVPblNob3dIaWRlQ2xpY2t9XG4gICAgICAgIGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5nZXREZXRhaWxQYW5lbEJ1dHRvbkNzcyh0aGlzLnJvdyl9XG4gICAgICAgIGFyaWEtZXhwYW5kZWQ9e2FyaWFFeHBhbmRlZH1cbiAgICAgICAgYXJpYS1jb250cm9scz17YXJpYUNvbnRyb2xzfVxuICAgICAgPlxuICAgICAgICA8U3ZnSWNvblxuICAgICAgICAgIGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5nZXREZXRhaWxQYW5lbEljb25Dc3ModGhpcy5yb3cpfVxuICAgICAgICAgIGljb25OYW1lPXt0aGlzLnF1ZXN0aW9uLmdldERldGFpbFBhbmVsSWNvbklkKHRoaXMucm93KX1cbiAgICAgICAgICBzaXplPXtcImF1dG9cIn1cbiAgICAgICAgPlxuICAgICAgICA8L1N2Z0ljb24+XG4gICAgICA8L2J1dHRvbj5cbiAgICApO1xuICB9XG59XG5cblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFxuICBcInN2LW1hdHJpeC1kZXRhaWwtYnV0dG9uXCIsXG4gIHByb3BzID0+IHtcbiAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTdXJ2ZXlRdWVzdGlvbk1hdHJpeERldGFpbEJ1dHRvbiwgcHJvcHMpO1xuICB9XG4pO1xuIiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgUXVlc3Rpb25NYXRyaXhEcm9wZG93bk1vZGVsQmFzZSB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgUmVhY3RFbGVtZW50RmFjdG9yeSB9IGZyb20gXCIuLi8uLi8uLi9lbGVtZW50LWZhY3RvcnlcIjtcbmltcG9ydCB7IFJlYWN0U3VydmV5RWxlbWVudCB9IGZyb20gXCIuLi8uLi8uLi9yZWFjdHF1ZXN0aW9uX2VsZW1lbnRcIjtcblxuZXhwb3J0IGNsYXNzIFN1cnZleVF1ZXN0aW9uTWF0cml4RHluYW1pY0RyYWdEcm9wSWNvbiBleHRlbmRzIFJlYWN0U3VydmV5RWxlbWVudCB7XG4gIHByaXZhdGUgZ2V0IHF1ZXN0aW9uKCk6IFF1ZXN0aW9uTWF0cml4RHJvcGRvd25Nb2RlbEJhc2Uge1xuICAgIHJldHVybiB0aGlzLnByb3BzLml0ZW0uZGF0YS5xdWVzdGlvbjtcbiAgfVxuXG4gIHByb3RlY3RlZCByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICBpZih0aGlzLnF1ZXN0aW9uLmljb25EcmFnRWxlbWVudCkge1xuICAgICAgcmV0dXJuICg8c3ZnIGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLmRyYWdFbGVtZW50RGVjb3JhdG9yfSA+XG4gICAgICAgIDx1c2UgeGxpbmtIcmVmPXt0aGlzLnF1ZXN0aW9uLmljb25EcmFnRWxlbWVudH0+PC91c2U+XG4gICAgICA8L3N2Zz4pO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gKDxzcGFuIGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLmljb25EcmFnfSAvPik7XG4gICAgfVxuICB9XG59XG5cblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFxuICBcInN2LW1hdHJpeC1kcmFnLWRyb3AtaWNvblwiLFxuICAocHJvcHMpID0+IHtcbiAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTdXJ2ZXlRdWVzdGlvbk1hdHJpeER5bmFtaWNEcmFnRHJvcEljb24sIHByb3BzKTtcbiAgfVxuKTtcbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7XG4gIE1hdHJpeERyb3Bkb3duUm93TW9kZWxCYXNlLFxuICBRdWVzdGlvbk1hdHJpeERyb3Bkb3duTW9kZWxCYXNlLFxufSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFJlYWN0RWxlbWVudEZhY3RvcnkgfSBmcm9tIFwiLi4vLi4vLi4vZWxlbWVudC1mYWN0b3J5XCI7XG5pbXBvcnQgeyBSZWFjdFN1cnZleUVsZW1lbnQgfSBmcm9tIFwiLi4vLi4vLi4vcmVhY3RxdWVzdGlvbl9lbGVtZW50XCI7XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlRdWVzdGlvbk1hdHJpeER5bmFtaWNSZW1vdmVCdXR0b24gZXh0ZW5kcyBSZWFjdFN1cnZleUVsZW1lbnQge1xuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMuaGFuZGxlT25Sb3dSZW1vdmVDbGljayA9IHRoaXMuaGFuZGxlT25Sb3dSZW1vdmVDbGljay5iaW5kKHRoaXMpO1xuICB9XG4gIHByaXZhdGUgZ2V0IHF1ZXN0aW9uKCk6IFF1ZXN0aW9uTWF0cml4RHJvcGRvd25Nb2RlbEJhc2Uge1xuICAgIHJldHVybiB0aGlzLnByb3BzLml0ZW0uZGF0YS5xdWVzdGlvbjtcbiAgfVxuICBwcml2YXRlIGdldCByb3coKTogTWF0cml4RHJvcGRvd25Sb3dNb2RlbEJhc2Uge1xuICAgIHJldHVybiB0aGlzLnByb3BzLml0ZW0uZGF0YS5yb3c7XG4gIH1cbiAgaGFuZGxlT25Sb3dSZW1vdmVDbGljayhldmVudDogYW55KSB7XG4gICAgdGhpcy5xdWVzdGlvbi5yZW1vdmVSb3dVSSh0aGlzLnJvdyk7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIHZhciByZW1vdmVSb3dUZXh0ID0gdGhpcy5yZW5kZXJMb2NTdHJpbmcodGhpcy5xdWVzdGlvbi5sb2NSZW1vdmVSb3dUZXh0KTtcbiAgICByZXR1cm4gKFxuICAgICAgPGJ1dHRvblxuICAgICAgICBjbGFzc05hbWU9e3RoaXMucXVlc3Rpb24uZ2V0UmVtb3ZlUm93QnV0dG9uQ3NzKCl9XG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICBvbkNsaWNrPXt0aGlzLmhhbmRsZU9uUm93UmVtb3ZlQ2xpY2t9XG4gICAgICAgIGRpc2FibGVkPXt0aGlzLnF1ZXN0aW9uLmlzSW5wdXRSZWFkT25seX1cbiAgICAgID5cbiAgICAgICAge3JlbW92ZVJvd1RleHR9XG4gICAgICAgIDxzcGFuIGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLmljb25SZW1vdmV9IC8+XG4gICAgICA8L2J1dHRvbj5cbiAgICApO1xuICB9XG59XG5cblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFxuICBcInN2LW1hdHJpeC1yZW1vdmUtYnV0dG9uXCIsXG4gIChwcm9wcykgPT4ge1xuICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFN1cnZleVF1ZXN0aW9uTWF0cml4RHluYW1pY1JlbW92ZUJ1dHRvbiwgcHJvcHMpO1xuICB9XG4pO1xuIiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IFJlYWN0RE9NIGZyb20gXCJyZWFjdC1kb21cIjtcbmltcG9ydCB7IFF1ZXN0aW9uTWF0cml4RHJvcGRvd25SZW5kZXJlZFJvdywgUXVlc3Rpb25NYXRyaXhEcm9wZG93bk1vZGVsQmFzZSB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgUmVhY3RFbGVtZW50RmFjdG9yeSB9IGZyb20gXCIuLi8uLi9lbGVtZW50LWZhY3RvcnlcIjtcbmltcG9ydCB7IFN1cnZleUVsZW1lbnRCYXNlIH0gZnJvbSBcIi4uLy4uL3JlYWN0cXVlc3Rpb25fZWxlbWVudFwiO1xuXG5pbnRlcmZhY2UgSU1hdHJpeFJvd1Byb3BzIHtcbiAgbW9kZWw6IFF1ZXN0aW9uTWF0cml4RHJvcGRvd25SZW5kZXJlZFJvdztcbiAgcGFyZW50TWF0cml4OiBRdWVzdGlvbk1hdHJpeERyb3Bkb3duTW9kZWxCYXNlO1xufVxuXG5leHBvcnQgY2xhc3MgTWF0cml4Um93IGV4dGVuZHMgU3VydmV5RWxlbWVudEJhc2U8SU1hdHJpeFJvd1Byb3BzLCBhbnk+IHtcbiAgY29uc3RydWN0b3IocHJvcHM6IElNYXRyaXhSb3dQcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgfVxuICBnZXQgbW9kZWwoKTogUXVlc3Rpb25NYXRyaXhEcm9wZG93blJlbmRlcmVkUm93IHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5tb2RlbDtcbiAgfVxuICBnZXQgcGFyZW50TWF0cml4KCk6IFF1ZXN0aW9uTWF0cml4RHJvcGRvd25Nb2RlbEJhc2Uge1xuICAgIHJldHVybiB0aGlzLnByb3BzLnBhcmVudE1hdHJpeDtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0U3RhdGVFbGVtZW50KCkge1xuICAgIHJldHVybiB0aGlzLm1vZGVsO1xuICB9XG4gIHByb3RlY3RlZCBvblBvaW50ZXJEb3duSGFuZGxlciA9IChldmVudDogYW55KSA9PiB7XG4gICAgdGhpcy5wYXJlbnRNYXRyaXgub25Qb2ludGVyRG93bihldmVudC5uYXRpdmVFdmVudCwgdGhpcy5tb2RlbC5yb3cpO1xuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IG1vZGVsID0gdGhpcy5tb2RlbDtcbiAgICByZXR1cm4gKFxuICAgICAgPHRyXG4gICAgICAgIGNsYXNzTmFtZT17bW9kZWwuY2xhc3NOYW1lfVxuICAgICAgICBkYXRhLXN2LWRyb3AtdGFyZ2V0LW1hdHJpeC1yb3c9e21vZGVsLnJvdyAmJiBtb2RlbC5yb3cuaWR9XG4gICAgICAgIG9uUG9pbnRlckRvd249eyhldmVudDogYW55KSA9PiB0aGlzLm9uUG9pbnRlckRvd25IYW5kbGVyKGV2ZW50KX1cbiAgICAgID5cbiAgICAgICAge3RoaXMucHJvcHMuY2hpbGRyZW59XG4gICAgICA8L3RyPlxuICAgICk7XG4gIH1cbn1cblxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXG4gIFwic3YtbWF0cml4LXJvd1wiLFxuICAocHJvcHM6IElNYXRyaXhSb3dQcm9wcykgPT4ge1xuICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KE1hdHJpeFJvdywgcHJvcHMpO1xuICB9XG4pO1xuIiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHtcbiAgUXVlc3Rpb25QYW5lbER5bmFtaWNNb2RlbFxufSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFJlYWN0RWxlbWVudEZhY3RvcnkgfSBmcm9tIFwiLi4vLi4vZWxlbWVudC1mYWN0b3J5XCI7XG5pbXBvcnQgeyBSZWFjdFN1cnZleUVsZW1lbnQgfSBmcm9tIFwiLi4vLi4vcmVhY3RxdWVzdGlvbl9lbGVtZW50XCI7XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlRdWVzdGlvblBhbmVsRHluYW1pY0FjdGlvbiBleHRlbmRzIFJlYWN0U3VydmV5RWxlbWVudCB7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldCBkYXRhKCk6IGFueSB7XG4gICAgcmV0dXJuICh0aGlzLnByb3BzLml0ZW0gJiYgdGhpcy5wcm9wcy5pdGVtLmRhdGEpIHx8IHRoaXMucHJvcHMuZGF0YTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IHF1ZXN0aW9uKCk6IFF1ZXN0aW9uUGFuZWxEeW5hbWljTW9kZWwge1xuICAgIHJldHVybiAodGhpcy5wcm9wcy5pdGVtICYmIHRoaXMucHJvcHMuaXRlbS5kYXRhLnF1ZXN0aW9uKSB8fCB0aGlzLnByb3BzLmRhdGEucXVlc3Rpb247XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFN1cnZleVF1ZXN0aW9uUGFuZWxEeW5hbWljQWRkQnV0dG9uIGV4dGVuZHMgU3VydmV5UXVlc3Rpb25QYW5lbER5bmFtaWNBY3Rpb24ge1xuICBwcm90ZWN0ZWQgaGFuZGxlQ2xpY2sgPSAoZXZlbnQ6IGFueSkgPT4ge1xuICAgIHRoaXMucXVlc3Rpb24uYWRkUGFuZWxVSSgpO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHwgbnVsbCB7XG4gICAgaWYgKCF0aGlzLnF1ZXN0aW9uLmNhbkFkZFBhbmVsKSByZXR1cm4gbnVsbDtcbiAgICByZXR1cm4gKFxuICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3NOYW1lPXt0aGlzLnF1ZXN0aW9uLmdldEFkZEJ1dHRvbkNzcygpfSBvbkNsaWNrPXt0aGlzLmhhbmRsZUNsaWNrfSA+XG4gICAgICAgIDxzcGFuIGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLmJ1dHRvbkFkZFRleHR9Pnt0aGlzLnF1ZXN0aW9uLnBhbmVsQWRkVGV4dH08L3NwYW4+XG4gICAgICA8L2J1dHRvbj5cbiAgICApO1xuICB9XG59XG5cblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFxuICBcInN2LXBhbmVsZHluYW1pYy1hZGQtYnRuXCIsXG4gIChwcm9wcykgPT4ge1xuICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFN1cnZleVF1ZXN0aW9uUGFuZWxEeW5hbWljQWRkQnV0dG9uLCBwcm9wcyk7XG4gIH1cbik7XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBSZWFjdEVsZW1lbnRGYWN0b3J5IH0gZnJvbSBcIi4uLy4uL2VsZW1lbnQtZmFjdG9yeVwiO1xuaW1wb3J0IHsgU3ZnSWNvbiB9IGZyb20gXCIuLi9zdmctaWNvbi9zdmctaWNvblwiO1xuaW1wb3J0IHsgU3VydmV5UXVlc3Rpb25QYW5lbER5bmFtaWNBY3Rpb24gfSBmcm9tIFwiLi9wYW5lbGR5bmFtaWMtYWRkLWJ0blwiO1xuXG5leHBvcnQgY2xhc3MgU3VydmV5UXVlc3Rpb25QYW5lbER5bmFtaWNOZXh0QnV0dG9uIGV4dGVuZHMgU3VydmV5UXVlc3Rpb25QYW5lbER5bmFtaWNBY3Rpb24ge1xuICBwcm90ZWN0ZWQgaGFuZGxlQ2xpY2sgPSAoZXZlbnQ6IGFueSkgPT4ge1xuICAgIHRoaXMucXVlc3Rpb24uZ29Ub05leHRQYW5lbCgpO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiB0aXRsZT17dGhpcy5xdWVzdGlvbi5wYW5lbE5leHRUZXh0fSBvbkNsaWNrPXt0aGlzLmhhbmRsZUNsaWNrfSBjbGFzc05hbWU9e3RoaXMucXVlc3Rpb24uZ2V0TmV4dEJ1dHRvbkNzcygpfT5cbiAgICAgICAgPFN2Z0ljb25cbiAgICAgICAgICBpY29uTmFtZT17dGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLnByb2dyZXNzQnRuSWNvbn1cbiAgICAgICAgICBzaXplPXtcImF1dG9cIn1cbiAgICAgICAgPlxuICAgICAgICA8L1N2Z0ljb24+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG59XG5cblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFxuICBcInN2LXBhbmVsZHluYW1pYy1uZXh0LWJ0blwiLFxuICAocHJvcHMpID0+IHtcbiAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTdXJ2ZXlRdWVzdGlvblBhbmVsRHluYW1pY05leHRCdXR0b24sIHByb3BzKTtcbiAgfVxuKTtcbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFJlYWN0RWxlbWVudEZhY3RvcnkgfSBmcm9tIFwiLi4vLi4vZWxlbWVudC1mYWN0b3J5XCI7XG5pbXBvcnQgeyBTdmdJY29uIH0gZnJvbSBcIi4uL3N2Zy1pY29uL3N2Zy1pY29uXCI7XG5pbXBvcnQgeyBTdXJ2ZXlRdWVzdGlvblBhbmVsRHluYW1pY0FjdGlvbiB9IGZyb20gXCIuL3BhbmVsZHluYW1pYy1hZGQtYnRuXCI7XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlRdWVzdGlvblBhbmVsRHluYW1pY1ByZXZCdXR0b24gZXh0ZW5kcyBTdXJ2ZXlRdWVzdGlvblBhbmVsRHluYW1pY0FjdGlvbiB7XG4gIHByb3RlY3RlZCBoYW5kbGVDbGljayA9IChldmVudDogYW55KSA9PiB7XG4gICAgdGhpcy5xdWVzdGlvbi5nb1RvUHJldlBhbmVsKCk7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IHRpdGxlPXt0aGlzLnF1ZXN0aW9uLnBhbmVsUHJldlRleHR9IG9uQ2xpY2s9e3RoaXMuaGFuZGxlQ2xpY2t9IGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5nZXRQcmV2QnV0dG9uQ3NzKCl9PlxuICAgICAgICA8U3ZnSWNvblxuICAgICAgICAgIGljb25OYW1lPXt0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMucHJvZ3Jlc3NCdG5JY29ufVxuICAgICAgICAgIHNpemU9e1wiYXV0b1wifVxuICAgICAgICA+XG4gICAgICAgIDwvU3ZnSWNvbj5cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbn1cblxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXG4gIFwic3YtcGFuZWxkeW5hbWljLXByZXYtYnRuXCIsXG4gIChwcm9wcykgPT4ge1xuICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFN1cnZleVF1ZXN0aW9uUGFuZWxEeW5hbWljUHJldkJ1dHRvbiwgcHJvcHMpO1xuICB9XG4pO1xuIiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgUmVhY3RFbGVtZW50RmFjdG9yeSB9IGZyb20gXCIuLi8uLi9lbGVtZW50LWZhY3RvcnlcIjtcbmltcG9ydCB7IFN1cnZleVF1ZXN0aW9uUGFuZWxEeW5hbWljQWN0aW9uIH0gZnJvbSBcIi4vcGFuZWxkeW5hbWljLWFkZC1idG5cIjtcblxuZXhwb3J0IGNsYXNzIFN1cnZleVF1ZXN0aW9uUGFuZWxEeW5hbWljUHJvZ3Jlc3NUZXh0IGV4dGVuZHMgU3VydmV5UXVlc3Rpb25QYW5lbER5bmFtaWNBY3Rpb24ge1xuICBwcm90ZWN0ZWQgcmVuZGVyRWxlbWVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgcmV0dXJuICg8ZGl2IGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLnByb2dyZXNzVGV4dH0+XG4gICAgICB7dGhpcy5xdWVzdGlvbi5wcm9ncmVzc1RleHR9XG4gICAgPC9kaXY+KTtcbiAgfVxufVxuXG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcbiAgXCJzdi1wYW5lbGR5bmFtaWMtcHJvZ3Jlc3MtdGV4dFwiLFxuICAocHJvcHMpID0+IHtcbiAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTdXJ2ZXlRdWVzdGlvblBhbmVsRHluYW1pY1Byb2dyZXNzVGV4dCwgcHJvcHMpO1xuICB9XG4pOyIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFJlYWN0RWxlbWVudEZhY3RvcnkgfSBmcm9tIFwiLi4vLi4vZWxlbWVudC1mYWN0b3J5XCI7XG5pbXBvcnQgeyBSZWFjdFN1cnZleUVsZW1lbnQgfSBmcm9tIFwiLi4vLi4vcmVhY3RxdWVzdGlvbl9lbGVtZW50XCI7XG5pbXBvcnQgeyBTdXJ2ZXlRdWVzdGlvblBhbmVsRHluYW1pYyB9IGZyb20gXCIuLi8uLi9yZWFjdHF1ZXN0aW9uX3BhbmVsZHluYW1pY1wiO1xuaW1wb3J0IHsgU3VydmV5UXVlc3Rpb25QYW5lbER5bmFtaWNBY3Rpb24gfSBmcm9tIFwiLi9wYW5lbGR5bmFtaWMtYWRkLWJ0blwiO1xuXG5leHBvcnQgY2xhc3MgU3VydmV5UXVlc3Rpb25QYW5lbER5bmFtaWNSZW1vdmVCdXR0b24gZXh0ZW5kcyBTdXJ2ZXlRdWVzdGlvblBhbmVsRHluYW1pY0FjdGlvbiB7XG4gIHByb3RlY3RlZCBoYW5kbGVDbGljayA9IChldmVudDogYW55KSA9PiB7XG4gICAgdGhpcy5xdWVzdGlvbi5yZW1vdmVQYW5lbFVJKHRoaXMuZGF0YS5wYW5lbCk7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIHJldHVybiAoXG4gICAgICA8YnV0dG9uXG4gICAgICAgIGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5nZXRQYW5lbFJlbW92ZUJ1dHRvbkNzcygpfVxuICAgICAgICBvbkNsaWNrPXt0aGlzLmhhbmRsZUNsaWNrfVxuICAgICAgICB0eXBlPVwiYnV0dG9uXCI+XG4gICAgICAgIDxzcGFuXG4gICAgICAgICAgY2xhc3NOYW1lPXt0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMuYnV0dG9uUmVtb3ZlVGV4dH1cbiAgICAgICAgPnt0aGlzLnF1ZXN0aW9uLnBhbmVsUmVtb3ZlVGV4dH08L3NwYW4+XG4gICAgICAgIDxzcGFuXG4gICAgICAgICAgY2xhc3NOYW1lPXt0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMuaWNvblJlbW92ZX1cbiAgICAgICAgPjwvc3Bhbj5cbiAgICAgIDwvYnV0dG9uPlxuICAgICk7XG4gIH1cbn1cblxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXG4gIFwic3YtcGFuZWxkeW5hbWljLXJlbW92ZS1idG5cIixcbiAgKHByb3BzKSA9PiB7XG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3VydmV5UXVlc3Rpb25QYW5lbER5bmFtaWNSZW1vdmVCdXR0b24sIHByb3BzKTtcbiAgfVxuKTtcbiIsImltcG9ydCBSZWFjdERPTSBmcm9tIFwicmVhY3QtZG9tXCI7XG5pbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBCYXNlLCBQb3B1cE1vZGVsLCBQb3B1cEJhc2VWaWV3TW9kZWwsIFBvcHVwRHJvcGRvd25WaWV3TW9kZWwsIElEaWFsb2dPcHRpb25zLCBjcmVhdGVEaWFsb2dPcHRpb25zLCBjcmVhdGVQb3B1cE1vZGFsVmlld01vZGVsLCBjcmVhdGVQb3B1cFZpZXdNb2RlbCwgQ3NzQ2xhc3NCdWlsZGVyLCBzZXR0aW5ncyB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgUmVhY3RFbGVtZW50RmFjdG9yeSB9IGZyb20gXCIuLi8uLi9lbGVtZW50LWZhY3RvcnlcIjtcbmltcG9ydCB7IFN1cnZleUVsZW1lbnRCYXNlIH0gZnJvbSBcIi4uLy4uL3JlYWN0cXVlc3Rpb25fZWxlbWVudFwiO1xuaW1wb3J0IHsgU3VydmV5QWN0aW9uQmFyIH0gZnJvbSBcIi4uL2FjdGlvbi1iYXIvYWN0aW9uLWJhclwiO1xuXG5pbnRlcmZhY2UgSVBvcHVwUHJvcHMge1xuICBtb2RlbDogUG9wdXBNb2RlbDtcbn1cblxuZXhwb3J0IGNsYXNzIFBvcHVwIGV4dGVuZHMgU3VydmV5RWxlbWVudEJhc2U8SVBvcHVwUHJvcHMsIGFueT4ge1xuICBwcml2YXRlIHBvcHVwOiBQb3B1cEJhc2VWaWV3TW9kZWw7XG4gIHByaXZhdGUgY29udGFpbmVyUmVmOiBSZWFjdC5SZWZPYmplY3Q8SFRNTERpdkVsZW1lbnQ+O1xuICBjb25zdHJ1Y3Rvcihwcm9wczogSVBvcHVwUHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgdGhpcy5jb250YWluZXJSZWYgPSBSZWFjdC5jcmVhdGVSZWYoKTtcbiAgICB0aGlzLmNyZWF0ZU1vZGVsKCk7XG4gIH1cbiAgZ2V0IG1vZGVsKCk6IFBvcHVwTW9kZWwge1xuICAgIHJldHVybiB0aGlzLnByb3BzLm1vZGVsO1xuICB9XG4gIHByb3RlY3RlZCBnZXRTdGF0ZUVsZW1lbnQoKTogQmFzZSB7XG4gICAgcmV0dXJuIHRoaXMubW9kZWw7XG4gIH1cbiAgcHJpdmF0ZSBjcmVhdGVNb2RlbCgpOiB2b2lkIHtcbiAgICB0aGlzLnBvcHVwID0gY3JlYXRlUG9wdXBWaWV3TW9kZWwodGhpcy5wcm9wcy5tb2RlbCwgdW5kZWZpbmVkIGFzIGFueSk7XG4gICAgdGhpcy5wb3B1cC5pbml0aWFsaXplUG9wdXBDb250YWluZXIoKTtcbiAgfVxuICBwcml2YXRlIHNldFRhcmdldEVsZW1lbnQoKTogdm9pZCB7XG4gICAgaWYoISF0aGlzLmNvbnRhaW5lclJlZi5jdXJyZW50ICYmICF0aGlzLnBvcHVwLmlzTW9kYWwpIHtcbiAgICAgIGNvbnN0IHBvcHVwRHJvcGRvd25Nb2RlbCA9IHRoaXMucG9wdXAgYXMgUG9wdXBEcm9wZG93blZpZXdNb2RlbDtcbiAgICAgIGlmKCFwb3B1cERyb3Bkb3duTW9kZWwpIHJldHVybjtcblxuICAgICAgaWYoISF0aGlzLmNvbnRhaW5lclJlZi5jdXJyZW50LnBhcmVudEVsZW1lbnQpIHtcbiAgICAgICAgcG9wdXBEcm9wZG93bk1vZGVsLnRhcmdldEVsZW1lbnQgPSB0aGlzLmNvbnRhaW5lclJlZi5jdXJyZW50LnBhcmVudEVsZW1lbnQ7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGNvbXBvbmVudERpZE1vdW50KCk6IHZvaWQge1xuICAgIHN1cGVyLmNvbXBvbmVudERpZE1vdW50KCk7XG4gICAgdGhpcy5wb3B1cC5pbml0aWFsaXplUG9wdXBDb250YWluZXIoKTtcbiAgICB0aGlzLnNldFRhcmdldEVsZW1lbnQoKTtcbiAgfVxuICBjb21wb25lbnREaWRVcGRhdGUocHJldlByb3BzOiBhbnksIHByZXZTdGF0ZTogYW55KSB7XG4gICAgc3VwZXIuY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wcywgcHJldlN0YXRlKTtcbiAgICB0aGlzLnNldFRhcmdldEVsZW1lbnQoKTtcbiAgfVxuICBjb21wb25lbnRXaWxsVW5tb3VudCgpOiB2b2lkIHtcbiAgICB0aGlzLnBvcHVwLnVubW91bnRQb3B1cENvbnRhaW5lcigpO1xuICB9XG4gIHNob3VsZENvbXBvbmVudFVwZGF0ZShuZXh0UHJvcHM6IElQb3B1cFByb3BzLCBuZXh0U3RhdGU6IGFueSkge1xuICAgIGlmICghc3VwZXIuc2hvdWxkQ29tcG9uZW50VXBkYXRlKG5leHRQcm9wcywgbmV4dFN0YXRlKSkgcmV0dXJuIGZhbHNlO1xuICAgIGNvbnN0IGlzTmVlZFVwZGF0ZSA9IG5leHRQcm9wcy5tb2RlbCAhPT0gdGhpcy5wb3B1cC5tb2RlbDtcbiAgICBpZihpc05lZWRVcGRhdGUpIHtcbiAgICAgIHRoaXMucG9wdXA/LmRpc3Bvc2UoKTtcbiAgICAgIHRoaXMuY3JlYXRlTW9kZWwoKTtcbiAgICB9XG4gICAgcmV0dXJuIGlzTmVlZFVwZGF0ZTtcbiAgfVxuICByZW5kZXIoKTogSlNYLkVsZW1lbnQge1xuICAgIHRoaXMucG9wdXAubW9kZWwgPSB0aGlzLm1vZGVsO1xuICAgIGxldCBwb3B1cENvbnRhaW5lcjtcbiAgICBpZih0aGlzLm1vZGVsLmlzTW9kYWwpIHtcbiAgICAgIHBvcHVwQ29udGFpbmVyID0gUmVhY3RET00uY3JlYXRlUG9ydGFsKDxQb3B1cENvbnRhaW5lciBtb2RlbD17dGhpcy5wb3B1cH0+PC9Qb3B1cENvbnRhaW5lcj4sIHRoaXMucG9wdXAuY29udGFpbmVyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcG9wdXBDb250YWluZXIgPSBSZWFjdERPTS5jcmVhdGVQb3J0YWwoPFBvcHVwRHJvcGRvd25Db250YWluZXIgbW9kZWw9e3RoaXMucG9wdXB9PjwvUG9wdXBEcm9wZG93bkNvbnRhaW5lcj4sIHRoaXMucG9wdXAuY29udGFpbmVyKTtcbiAgICB9XG4gICAgcmV0dXJuIDxkaXYgcmVmPXt0aGlzLmNvbnRhaW5lclJlZn0+e3BvcHVwQ29udGFpbmVyfTwvZGl2PjtcbiAgfVxufVxuXG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcbiAgXCJzdi1wb3B1cFwiLFxuICAocHJvcHM6IElQb3B1cFByb3BzKSA9PiB7XG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoUG9wdXAsIHByb3BzKTtcbiAgfVxuKTtcblxuZXhwb3J0IGNsYXNzIFBvcHVwQ29udGFpbmVyIGV4dGVuZHMgU3VydmV5RWxlbWVudEJhc2U8YW55LCBhbnk+IHtcbiAgcHVibGljIHByZXZJc1Zpc2libGU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgfVxuICBoYW5kbGVLZXlkb3duID0gKGV2ZW50OiBhbnkpID0+IHtcbiAgICB0aGlzLm1vZGVsLm9uS2V5RG93bihldmVudCk7XG4gIH07XG4gIGdldCBtb2RlbCgpOiBQb3B1cEJhc2VWaWV3TW9kZWwge1xuICAgIHJldHVybiB0aGlzLnByb3BzLm1vZGVsO1xuICB9XG4gIHByb3RlY3RlZCBnZXRTdGF0ZUVsZW1lbnQoKTogQmFzZSB7XG4gICAgcmV0dXJuIHRoaXMubW9kZWw7XG4gIH1cbiAgY2xpY2tJbnNpZGUgPSAoZXY6IGFueSkgPT4ge1xuICAgIGV2LnN0b3BQcm9wYWdhdGlvbigpO1xuICB9O1xuICBjb21wb25lbnREaWRVcGRhdGUocHJldlByb3BzOiBhbnksIHByZXZTdGF0ZTogYW55KSB7XG4gICAgc3VwZXIuY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wcywgcHJldlN0YXRlKTtcbiAgICBpZiAoIXRoaXMucHJldklzVmlzaWJsZSAmJiB0aGlzLm1vZGVsLmlzVmlzaWJsZSkge1xuICAgICAgdGhpcy5tb2RlbC51cGRhdGVPblNob3dpbmcoKTtcbiAgICB9XG4gICAgdGhpcy5wcmV2SXNWaXNpYmxlID0gdGhpcy5tb2RlbC5pc1Zpc2libGU7XG4gIH1cbiAgcmVuZGVyQ29udGFpbmVyKFBvcHVwQmFzZVZpZXdNb2RlbDogUG9wdXBCYXNlVmlld01vZGVsKTogSlNYLkVsZW1lbnQge1xuICAgIGNvbnN0IGhlYWRlclBvcHVwID0gUG9wdXBCYXNlVmlld01vZGVsLnNob3dIZWFkZXIgPyB0aGlzLnJlbmRlckhlYWRlclBvcHVwKFBvcHVwQmFzZVZpZXdNb2RlbCkgOiBudWxsO1xuICAgIGNvbnN0IGhlYWRlckNvbnRlbnQgPSAhIVBvcHVwQmFzZVZpZXdNb2RlbC50aXRsZSA/IHRoaXMucmVuZGVySGVhZGVyQ29udGVudCgpIDogbnVsbDtcbiAgICBjb25zdCBjb250ZW50ID0gdGhpcy5yZW5kZXJDb250ZW50KCk7XG4gICAgY29uc3QgZm9vdGVyQ29udGVudCA9IFBvcHVwQmFzZVZpZXdNb2RlbC5zaG93Rm9vdGVyID8gdGhpcy5yZW5kZXJGb290ZXIodGhpcy5tb2RlbCkgOiBudWxsO1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzTmFtZT1cInN2LXBvcHVwX19jb250YWluZXJcIlxuICAgICAgICBzdHlsZT17e1xuICAgICAgICAgIGxlZnQ6IFBvcHVwQmFzZVZpZXdNb2RlbC5sZWZ0LFxuICAgICAgICAgIHRvcDogUG9wdXBCYXNlVmlld01vZGVsLnRvcCxcbiAgICAgICAgICBoZWlnaHQ6IFBvcHVwQmFzZVZpZXdNb2RlbC5oZWlnaHQsXG4gICAgICAgICAgd2lkdGg6IFBvcHVwQmFzZVZpZXdNb2RlbC53aWR0aCxcbiAgICAgICAgICBtaW5XaWR0aDogUG9wdXBCYXNlVmlld01vZGVsLm1pbldpZHRoLFxuICAgICAgICB9fVxuICAgICAgICBvbkNsaWNrPXsoZXY6IGFueSkgPT4ge1xuICAgICAgICAgIHRoaXMuY2xpY2tJbnNpZGUoZXYpO1xuICAgICAgICB9fVxuICAgICAgPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInN2LXBvcHVwX19zaGFkb3dcIj5cbiAgICAgICAgICB7aGVhZGVyUG9wdXB9XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdi1wb3B1cF9fYm9keS1jb250ZW50XCI+XG4gICAgICAgICAgICB7aGVhZGVyQ29udGVudH1cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3YtcG9wdXBfX3Njcm9sbGluZy1jb250ZW50XCI+XG4gICAgICAgICAgICAgIHtjb250ZW50fVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICB7Zm9vdGVyQ29udGVudH1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG4gIHJlbmRlckhlYWRlckNvbnRlbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIHJldHVybiA8ZGl2IGNsYXNzTmFtZT1cInN2LXBvcHVwX19ib2R5LWhlYWRlclwiPnt0aGlzLm1vZGVsLnRpdGxlfTwvZGl2PjtcbiAgfVxuICByZW5kZXJDb250ZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICBjb25zdCBjb250ZW50Q29tcG9uZW50ID0gUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5jcmVhdGVFbGVtZW50KFxuICAgICAgdGhpcy5tb2RlbC5jb250ZW50Q29tcG9uZW50TmFtZSxcbiAgICAgIHRoaXMubW9kZWwuY29udGVudENvbXBvbmVudERhdGFcbiAgICApO1xuICAgIHJldHVybiA8ZGl2IGNsYXNzTmFtZT1cInN2LXBvcHVwX19jb250ZW50XCI+e2NvbnRlbnRDb21wb25lbnR9PC9kaXY+O1xuICB9XG5cbiAgcHJvdGVjdGVkIHJlbmRlckhlYWRlclBvcHVwKHBvcHVwTW9kZWw6IFBvcHVwQmFzZVZpZXdNb2RlbCk6IEpTWC5FbGVtZW50IHwgbnVsbCB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckZvb3Rlcihwb3B1TW9kZWw6IFBvcHVwQmFzZVZpZXdNb2RlbCk6IEpTWC5FbGVtZW50IHwgbnVsbCB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3YtcG9wdXBfX2JvZHktZm9vdGVyXCI+XG4gICAgICAgIDxTdXJ2ZXlBY3Rpb25CYXIgbW9kZWw9e3BvcHVNb2RlbC5mb290ZXJUb29sYmFyfT48L1N1cnZleUFjdGlvbkJhcj5cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbiAgcmVuZGVyKCk6IEpTWC5FbGVtZW50IHtcbiAgICBjb25zdCBjb250YWluZXIgPSB0aGlzLnJlbmRlckNvbnRhaW5lcih0aGlzLm1vZGVsKTtcbiAgICBjb25zdCBjbGFzc05hbWUgPSBuZXcgQ3NzQ2xhc3NCdWlsZGVyKClcbiAgICAgIC5hcHBlbmQoXCJzdi1wb3B1cFwiKVxuICAgICAgLmFwcGVuZCh0aGlzLm1vZGVsLnN0eWxlQ2xhc3MpXG4gICAgICAudG9TdHJpbmcoKTtcbiAgICBjb25zdCBzdHlsZSA9IHsgZGlzcGxheTogdGhpcy5tb2RlbC5pc1Zpc2libGUgPyBcIlwiIDogXCJub25lXCIsIH07XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXZcbiAgICAgICAgdGFiSW5kZXg9ey0xfVxuICAgICAgICBjbGFzc05hbWU9e2NsYXNzTmFtZX1cbiAgICAgICAgc3R5bGU9e3N0eWxlfVxuICAgICAgICBvbkNsaWNrPXsoZTogYW55KSA9PiB7XG4gICAgICAgICAgdGhpcy5tb2RlbC5jbGlja091dHNpZGUoKTtcbiAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICB9fVxuICAgICAgICBvbktleURvd249e3RoaXMuaGFuZGxlS2V5ZG93bn1cbiAgICAgID5cbiAgICAgICAge2NvbnRhaW5lcn1cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbn1cbmV4cG9ydCBjbGFzcyBQb3B1cERyb3Bkb3duQ29udGFpbmVyIGV4dGVuZHMgUG9wdXBDb250YWluZXIge1xuXG4gIHByb3RlY3RlZCByZW5kZXJIZWFkZXJQb3B1cChwb3B1cE1vZGVsOiBQb3B1cEJhc2VWaWV3TW9kZWwpOiBKU1guRWxlbWVudCB8IG51bGwge1xuICAgIGNvbnN0IHBvcHVwRHJvcGRvd25Nb2RlbCA9IHBvcHVwTW9kZWwgYXMgUG9wdXBEcm9wZG93blZpZXdNb2RlbDtcbiAgICBpZighcG9wdXBEcm9wZG93bk1vZGVsKSByZXR1cm4gbnVsbDtcblxuICAgIHJldHVybiAoXG4gICAgICA8c3BhblxuICAgICAgICBzdHlsZT17e1xuICAgICAgICAgIGxlZnQ6IHBvcHVwRHJvcGRvd25Nb2RlbC5wb2ludGVyVGFyZ2V0LmxlZnQsXG4gICAgICAgICAgdG9wOiBwb3B1cERyb3Bkb3duTW9kZWwucG9pbnRlclRhcmdldC50b3AsXG4gICAgICAgIH19XG4gICAgICAgIGNsYXNzTmFtZT1cInN2LXBvcHVwX19wb2ludGVyXCJcbiAgICAgID48L3NwYW4+XG4gICAgKTtcbiAgfVxufVxuXG4vLyByZXBsYWNlIHRvIHNob3dEaWFsb2cgdGhlbiBkZWxldGVcbmV4cG9ydCBmdW5jdGlvbiBzaG93TW9kYWwoXG4gIGNvbXBvbmVudE5hbWU6IHN0cmluZyxcbiAgZGF0YTogYW55LFxuICBvbkFwcGx5OiAoKSA9PiBib29sZWFuLFxuICBvbkNhbmNlbD86ICgpID0+IHZvaWQsXG4gIGNzc0NsYXNzPzogc3RyaW5nLFxuICB0aXRsZT86IHN0cmluZyxcbiAgZGlzcGxheU1vZGU6IFwicG9wdXBcIiB8IFwib3ZlcmxheVwiID0gXCJwb3B1cFwiXG4pOiBQb3B1cEJhc2VWaWV3TW9kZWwge1xuICBjb25zdCBvcHRpb25zID0gY3JlYXRlRGlhbG9nT3B0aW9ucyhcbiAgICBjb21wb25lbnROYW1lLFxuICAgIGRhdGEsXG4gICAgb25BcHBseSxcbiAgICBvbkNhbmNlbCxcbiAgICB1bmRlZmluZWQsXG4gICAgdW5kZWZpbmVkLFxuICAgIGNzc0NsYXNzLFxuICAgIHRpdGxlLFxuICAgIGRpc3BsYXlNb2RlXG4gICk7XG4gIHJldHVybiBzaG93RGlhbG9nKG9wdGlvbnMpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHNob3dEaWFsb2coZGlhbG9nT3B0aW9uczogSURpYWxvZ09wdGlvbnMpOiBQb3B1cEJhc2VWaWV3TW9kZWwge1xuICBkaWFsb2dPcHRpb25zLm9uSGlkZSA9ICgpID0+IHsge1xuICAgIFJlYWN0RE9NLnVubW91bnRDb21wb25lbnRBdE5vZGUocG9wdXBWaWV3TW9kZWwuY29udGFpbmVyKTtcbiAgICBwb3B1cFZpZXdNb2RlbC51bm1vdW50UG9wdXBDb250YWluZXIoKTtcbiAgfSB9O1xuICBjb25zdCBwb3B1cFZpZXdNb2RlbDogUG9wdXBCYXNlVmlld01vZGVsID0gY3JlYXRlUG9wdXBNb2RhbFZpZXdNb2RlbChkaWFsb2dPcHRpb25zKTtcbiAgUmVhY3RET00ucmVuZGVyKDxQb3B1cENvbnRhaW5lciBtb2RlbD17cG9wdXBWaWV3TW9kZWx9IC8+LCBwb3B1cFZpZXdNb2RlbC5jb250YWluZXIpO1xuXG4gIHBvcHVwVmlld01vZGVsLm1vZGVsLmlzVmlzaWJsZSA9IHRydWU7XG4gIHJldHVybiBwb3B1cFZpZXdNb2RlbDtcbn1cblxuc2V0dGluZ3Muc2hvd01vZGFsID0gc2hvd01vZGFsO1xuIiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgUmVhY3RFbGVtZW50RmFjdG9yeSB9IGZyb20gXCIuLi9lbGVtZW50LWZhY3RvcnlcIjtcblxuZXhwb3J0IGNsYXNzIFNrZWxldG9uIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50PGFueSwgYW55PiB7XG4gIHJlbmRlcigpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdi1za2VsZXRvbi1lbGVtZW50XCIgaWQ9e3RoaXMucHJvcHMuZWxlbWVudD8uaWR9PlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxufVxuXG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcInN2LXNrZWxldG9uXCIsIChwcm9wczogYW55KSA9PiB7XG4gIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFNrZWxldG9uLCBwcm9wcyk7XG59KTtcbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IEFjdGlvbiB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgUmVhY3RFbGVtZW50RmFjdG9yeSB9IGZyb20gXCIuLi8uLi9lbGVtZW50LWZhY3RvcnlcIjtcbmltcG9ydCB7IFJlYWN0U3VydmV5RWxlbWVudCB9IGZyb20gXCIuLi8uLi9yZWFjdHF1ZXN0aW9uX2VsZW1lbnRcIjtcblxuZXhwb3J0IGNsYXNzIFN1cnZleU5hdmlnYXRpb25CdXR0b24gZXh0ZW5kcyBSZWFjdFN1cnZleUVsZW1lbnQge1xuICBwcm90ZWN0ZWQgZ2V0IGl0ZW0oKTogQWN0aW9uIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5pdGVtO1xuICB9XG4gIHByb3RlY3RlZCBjYW5SZW5kZXIoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaXRlbS5pc1Zpc2libGU7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIHJldHVybiAoXG4gICAgICA8aW5wdXRcbiAgICAgICAgY2xhc3NOYW1lPXt0aGlzLml0ZW0uaW5uZXJDc3N9XG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICBkaXNhYmxlZD17dGhpcy5pdGVtLmRpc2FibGVkfVxuICAgICAgICBvbk1vdXNlRG93bj17dGhpcy5pdGVtLmRhdGEgJiYgdGhpcy5pdGVtLmRhdGEubW91c2VEb3dufVxuICAgICAgICBvbkNsaWNrPXt0aGlzLml0ZW0uYWN0aW9ufVxuICAgICAgICB2YWx1ZT17dGhpcy5pdGVtLnRpdGxlfVxuICAgICAgLz5cbiAgICApO1xuICB9XG59XG5cblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFxuICBcInN2LW5hdi1idG5cIixcbiAgKHByb3BzKSA9PiB7XG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3VydmV5TmF2aWdhdGlvbkJ1dHRvbiwgcHJvcHMpO1xuICB9XG4pOyIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFN1cnZleU1vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBSZWFjdEVsZW1lbnRGYWN0b3J5IH0gZnJvbSBcIi4uLy4uL2VsZW1lbnQtZmFjdG9yeVwiO1xuXG5pbnRlcmZhY2UgSUxvZ29JbWFnZVByb3BzIHtcbiAgZGF0YTogU3VydmV5TW9kZWw7XG59XG5cbmV4cG9ydCBjbGFzcyBMb2dvSW1hZ2UgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQ8SUxvZ29JbWFnZVByb3BzLCBhbnk+IHtcbiAgY29uc3RydWN0b3IocHJvcHM6IElMb2dvSW1hZ2VQcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgfVxuICBwcml2YXRlIGdldCBzdXJ2ZXkoKTogU3VydmV5TW9kZWwge1xuICAgIHJldHVybiB0aGlzLnByb3BzLmRhdGE7XG4gIH1cbiAgcHVibGljIHJlbmRlcigpIHtcbiAgICBjb25zdCBjb250ZW50OiBKU1guRWxlbWVudFtdID0gW107XG4gICAgY29udGVudC5wdXNoKFxuICAgICAgPGRpdiBrZXk9e1wibG9nby1pbWFnZVwifSBjbGFzc05hbWU9e3RoaXMuc3VydmV5LmxvZ29DbGFzc05hbWVzfT5cbiAgICAgICAgPGltZ1xuICAgICAgICAgIGNsYXNzTmFtZT17dGhpcy5zdXJ2ZXkuY3NzLmxvZ29JbWFnZX1cbiAgICAgICAgICBzcmM9e3RoaXMuc3VydmV5LmxvY0xvZ28ucmVuZGVyZWRIdG1sfVxuICAgICAgICAgIGFsdD17dGhpcy5zdXJ2ZXkubG9jVGl0bGUucmVuZGVyZWRIdG1sfVxuICAgICAgICAgIHdpZHRoPXt0aGlzLnN1cnZleS5sb2dvV2lkdGggPyB0aGlzLnN1cnZleS5sb2dvV2lkdGggOiB1bmRlZmluZWR9XG4gICAgICAgICAgaGVpZ2h0PXt0aGlzLnN1cnZleS5sb2dvSGVpZ2h0ID8gdGhpcy5zdXJ2ZXkubG9nb0hlaWdodCA6IHVuZGVmaW5lZH1cbiAgICAgICAgICBzdHlsZT17eyBvYmplY3RGaXQ6IHRoaXMuc3VydmV5LmxvZ29GaXQgYXMgYW55IH19XG4gICAgICAgIC8+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICAgIHJldHVybiA8Pntjb250ZW50fTwvPjtcbiAgfVxufVxuXG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcInN2LWxvZ28taW1hZ2VcIiwgKHByb3BzOiBJTG9nb0ltYWdlUHJvcHMpID0+IHtcbiAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoTG9nb0ltYWdlLCBwcm9wcyk7XG59KTtcbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFN1cnZleU1vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBTdXJ2ZXlFbGVtZW50QmFzZSB9IGZyb20gXCIuLi8uLi9yZWFjdHF1ZXN0aW9uX2VsZW1lbnRcIjtcbmltcG9ydCB7IFJlYWN0RWxlbWVudEZhY3RvcnkgfSBmcm9tIFwiLi4vLi4vZWxlbWVudC1mYWN0b3J5XCI7XG5pbXBvcnQgeyBUaXRsZUVsZW1lbnQgfSBmcm9tIFwiLi4vdGl0bGUvdGl0bGUtZWxlbWVudFwiO1xuXG5pbnRlcmZhY2UgSVN1cnZleUhlYWRlclByb3BzIHtcbiAgc3VydmV5OiBTdXJ2ZXlNb2RlbDtcbn1cblxuZXhwb3J0IGNsYXNzIFN1cnZleUhlYWRlciBleHRlbmRzIFJlYWN0LkNvbXBvbmVudDxJU3VydmV5SGVhZGVyUHJvcHMsIGFueT4ge1xuICBjb25zdHJ1Y3Rvcihwcm9wczogSVN1cnZleUhlYWRlclByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMuc3RhdGUgPSB7IGNoYW5nZWQ6IDAgfTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0IHN1cnZleSgpOiBTdXJ2ZXlNb2RlbCB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuc3VydmV5O1xuICB9XG4gIHByaXZhdGUgZ2V0IGNzcygpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLnN1cnZleS5jc3M7XG4gIH1cblxuICBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICBjb25zdCBzZWxmOiBTdXJ2ZXlIZWFkZXIgPSB0aGlzO1xuICAgIHRoaXMuc3VydmV5LmxvY0xvZ28ub25DaGFuZ2VkID0gZnVuY3Rpb24gKCkge1xuICAgICAgc2VsZi5zZXRTdGF0ZSh7IGNoYW5nZWQ6IHNlbGYuc3RhdGUuY2hhbmdlZCArIDEgfSk7XG4gICAgfTtcbiAgfVxuICBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICB0aGlzLnN1cnZleS5sb2NMb2dvLm9uQ2hhbmdlZCA9IGZ1bmN0aW9uICgpIHsgfTtcbiAgfVxuXG4gIHByaXZhdGUgcmVuZGVyVGl0bGUoKTogSlNYLkVsZW1lbnQgfCBudWxsIHtcbiAgICBpZiAoIXRoaXMuc3VydmV5LnJlbmRlcmVkSGFzVGl0bGUpIHJldHVybiBudWxsO1xuICAgIGNvbnN0IGRlc2NyaXB0aW9uID0gU3VydmV5RWxlbWVudEJhc2UucmVuZGVyTG9jU3RyaW5nKFxuICAgICAgdGhpcy5zdXJ2ZXkubG9jRGVzY3JpcHRpb25cbiAgICApO1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzTmFtZT17dGhpcy5jc3MuaGVhZGVyVGV4dH1cbiAgICAgICAgc3R5bGU9e3sgbWF4V2lkdGg6IHRoaXMuc3VydmV5LnRpdGxlTWF4V2lkdGggfX1cbiAgICAgID5cbiAgICAgICAgPFRpdGxlRWxlbWVudCBlbGVtZW50PXt0aGlzLnN1cnZleX0+PC9UaXRsZUVsZW1lbnQ+XG4gICAgICAgIHsgdGhpcy5zdXJ2ZXkucmVuZGVyZWRIYXNEZXNjcmlwdGlvbiA/IDxoNSBjbGFzc05hbWU9e3RoaXMuY3NzLmRlc2NyaXB0aW9ufT57ZGVzY3JpcHRpb259PC9oNT4gOiBudWxsIH1cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIHJlbmRlckxvZ29JbWFnZShpc1JlbmRlcjogYm9vbGVhbik6IEpTWC5FbGVtZW50IHwgbnVsbCB7XG4gICAgaWYgKCFpc1JlbmRlcikgcmV0dXJuIG51bGw7XG4gICAgY29uc3QgY29tcG9uZW50TmFtZTogc3RyaW5nID0gdGhpcy5zdXJ2ZXkuZ2V0RWxlbWVudFdyYXBwZXJDb21wb25lbnROYW1lKFxuICAgICAgdGhpcy5zdXJ2ZXksXG4gICAgICBcImxvZ28taW1hZ2VcIlxuICAgICk7XG4gICAgY29uc3QgY29tcG9uZW50RGF0YTogYW55ID0gdGhpcy5zdXJ2ZXkuZ2V0RWxlbWVudFdyYXBwZXJDb21wb25lbnREYXRhKFxuICAgICAgdGhpcy5zdXJ2ZXksXG4gICAgICBcImxvZ28taW1hZ2VcIlxuICAgICk7XG4gICAgcmV0dXJuIFJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UuY3JlYXRlRWxlbWVudChjb21wb25lbnROYW1lLCB7XG4gICAgICBkYXRhOiBjb21wb25lbnREYXRhLFxuICAgIH0pO1xuICB9XG4gIHB1YmxpYyByZW5kZXIoKTogSlNYLkVsZW1lbnQgfCBudWxsIHtcbiAgICBpZiAoIXRoaXMuc3VydmV5LnJlbmRlcmVkSGFzSGVhZGVyKSByZXR1cm4gbnVsbDtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9e3RoaXMuY3NzLmhlYWRlcn0+XG4gICAgICAgIHt0aGlzLnJlbmRlckxvZ29JbWFnZSh0aGlzLnN1cnZleS5pc0xvZ29CZWZvcmUpfVxuICAgICAgICB7dGhpcy5yZW5kZXJUaXRsZSgpfVxuICAgICAgICB7dGhpcy5yZW5kZXJMb2dvSW1hZ2UodGhpcy5zdXJ2ZXkuaXNMb2dvQWZ0ZXIpfVxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17dGhpcy5jc3MuaGVhZGVyQ2xvc2V9PjwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxufVxuXG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcbiAgXCJzdXJ2ZXktaGVhZGVyXCIsXG4gIChwcm9wczogSVN1cnZleUhlYWRlclByb3BzKSA9PiB7XG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3VydmV5SGVhZGVyLCBwcm9wcyk7XG4gIH1cbik7XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBSZWFjdEVsZW1lbnRGYWN0b3J5IH0gZnJvbSBcIi4uLy4uL2VsZW1lbnQtZmFjdG9yeVwiO1xuaW1wb3J0IHsgY3JlYXRlU3ZnIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5cbmV4cG9ydCBjbGFzcyBTdmdJY29uIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50PGFueSwgYW55PiB7XG4gIHByaXZhdGUgc3ZnSWNvblJlZjogYW55O1xuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMuc3ZnSWNvblJlZiA9IFJlYWN0LmNyZWF0ZVJlZigpO1xuICB9XG5cbiAgdXBkYXRlU3ZnKCkge1xuICAgIGlmKHRoaXMucHJvcHMuaWNvbk5hbWUpXG4gICAgICBjcmVhdGVTdmcoXG4gICAgICAgIHRoaXMucHJvcHMuc2l6ZSxcbiAgICAgICAgdGhpcy5wcm9wcy53aWR0aCxcbiAgICAgICAgdGhpcy5wcm9wcy5oZWlnaHQsXG4gICAgICAgIHRoaXMucHJvcHMuaWNvbk5hbWUsXG4gICAgICAgIHRoaXMuc3ZnSWNvblJlZi5jdXJyZW50LFxuICAgICAgICB0aGlzLnByb3BzLnRpdGxlLFxuICAgICAgKTtcbiAgfVxuICBjb21wb25lbnREaWRVcGRhdGUoKSB7XG4gICAgdGhpcy51cGRhdGVTdmcoKTtcbiAgfVxuICByZW5kZXIoKSB7XG4gICAgbGV0IGNsYXNzTmFtZSA9IFwic3Ytc3ZnLWljb25cIjtcbiAgICBpZih0aGlzLnByb3BzLmNsYXNzTmFtZSkge1xuICAgICAgY2xhc3NOYW1lICs9IFwiIFwiICsgdGhpcy5wcm9wcy5jbGFzc05hbWU7XG4gICAgfVxuICAgIHJldHVybiAoXG4gICAgICB0aGlzLnByb3BzLmljb25OYW1lID9cbiAgICAgICAgPHN2ZyBjbGFzc05hbWU9eyBjbGFzc05hbWUgfSBzdHlsZT17dGhpcy5wcm9wcy5zdHlsZX0gb25DbGljaz17dGhpcy5wcm9wcy5vbkNsaWNrfSByZWY9e3RoaXMuc3ZnSWNvblJlZn0gcm9sZT1cImltZ1wiIGFyaWEtbGFiZWw9e3RoaXMucHJvcHMudGl0bGV9Pjx1c2U+PC91c2U+PC9zdmc+XG4gICAgICAgIDogbnVsbFxuICAgICk7XG4gIH1cbiAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgdGhpcy51cGRhdGVTdmcoKTtcbiAgfVxufVxuXG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcInN2LXN2Zy1pY29uXCIsIChwcm9wcykgPT4ge1xuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTdmdJY29uLCBwcm9wcyk7XG59KTtcbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFN1cnZleUVsZW1lbnQsIFJlbmRlcmVyRmFjdG9yeSB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgUmVhY3RFbGVtZW50RmFjdG9yeSB9IGZyb20gXCIuLi8uLi9lbGVtZW50LWZhY3RvcnlcIjtcbmltcG9ydCB7IFN1cnZleUFjdGlvbkJhciB9IGZyb20gXCIuLi9hY3Rpb24tYmFyL2FjdGlvbi1iYXJcIjtcbmltcG9ydCB7IFRpdGxlQ29udGVudCB9IGZyb20gXCIuL3RpdGxlLWNvbnRlbnRcIjtcblxuZXhwb3J0IGNsYXNzIFRpdGxlQWN0aW9ucyBleHRlbmRzIFJlYWN0LkNvbXBvbmVudDxhbnksIGFueT4ge1xuICBwcm90ZWN0ZWQgZ2V0IGNzc0NsYXNzZXMoKSB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuY3NzQ2xhc3NlcztcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IGVsZW1lbnQoKTogU3VydmV5RWxlbWVudCB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuZWxlbWVudDtcbiAgfVxuXG4gIHJlbmRlcigpOiBKU1guRWxlbWVudCB7XG4gICAgY29uc3QgdGl0bGVDb250ZW50OiBKU1guRWxlbWVudCA9IDxUaXRsZUNvbnRlbnQgZWxlbWVudD17dGhpcy5lbGVtZW50fSBjc3NDbGFzc2VzPXt0aGlzLmNzc0NsYXNzZXN9PjwvVGl0bGVDb250ZW50PjtcbiAgICBpZighdGhpcy5lbGVtZW50Lmhhc1RpdGxlQWN0aW9ucykgcmV0dXJuIHRpdGxlQ29udGVudDtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdi10aXRsZS1hY3Rpb25zXCI+XG4gICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInN2LXRpdGxlLWFjdGlvbnNfX3RpdGxlXCI+e3RpdGxlQ29udGVudH08L3NwYW4+XG4gICAgICAgIDxTdXJ2ZXlBY3Rpb25CYXIgbW9kZWw9e3RoaXMuZWxlbWVudC5nZXRUaXRsZVRvb2xiYXIoKX0+PC9TdXJ2ZXlBY3Rpb25CYXI+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG59XG5cblJlbmRlcmVyRmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlclJlbmRlcmVyKFxuICBcImVsZW1lbnRcIixcbiAgXCJ0aXRsZS1hY3Rpb25zXCIsXG4gIFwic3YtdGl0bGUtYWN0aW9uc1wiXG4pO1xuXG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcInN2LXRpdGxlLWFjdGlvbnNcIiwgKHByb3BzKSA9PiB7XG4gIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFRpdGxlQWN0aW9ucywgcHJvcHMpO1xufSk7XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBTdXJ2ZXlFbGVtZW50Q29yZSwgSVRpdGxlT3duZXIgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFN1cnZleUVsZW1lbnRCYXNlIH0gZnJvbSBcIi4uLy4uL3JlYWN0cXVlc3Rpb25fZWxlbWVudFwiO1xuXG5leHBvcnQgY2xhc3MgVGl0bGVDb250ZW50IGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50PGFueSwgYW55PiB7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gIH1cblxuICBwcml2YXRlIGdldCBjc3NDbGFzc2VzKCkge1xuICAgIHJldHVybiB0aGlzLnByb3BzLmNzc0NsYXNzZXM7XG4gIH1cblxuICBwcml2YXRlIGdldCBlbGVtZW50KCk6IFN1cnZleUVsZW1lbnRDb3JlIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5lbGVtZW50O1xuICB9XG4gIHJlbmRlcigpOiBKU1guRWxlbWVudCB7XG4gICAgaWYodGhpcy5lbGVtZW50LmlzVGl0bGVSZW5kZXJlZEFzU3RyaW5nKVxuICAgICAgcmV0dXJuIFN1cnZleUVsZW1lbnRCYXNlLnJlbmRlckxvY1N0cmluZyh0aGlzLmVsZW1lbnQubG9jVGl0bGUpO1xuICAgIHZhciBzcGFucyA9IHRoaXMucmVuZGVyVGl0bGVTcGFucyh0aGlzLmVsZW1lbnQuZ2V0VGl0bGVPd25lcigpLCB0aGlzLmNzc0NsYXNzZXMpO1xuICAgIHJldHVybiA8PntzcGFuc308Lz47XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlclRpdGxlU3BhbnMoZWxlbWVudDogSVRpdGxlT3duZXIsIGNzc0NsYXNzZXM6IGFueSk6IEFycmF5PEpTWC5FbGVtZW50PiB7XG4gICAgdmFyIGdldFNwYWNlU3BhbiA9IChrZXk6IGFueSkgPT4ge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPHNwYW4gZGF0YS1rZXk9e2tleX0ga2V5PXtrZXl9PlxuICAgICAgICAgICZuYnNwO1xuICAgICAgICA8L3NwYW4+XG4gICAgICApO1xuICAgIH07XG4gICAgdmFyIHNwYW5zOiBBcnJheTxKU1guRWxlbWVudD4gPSBbXTtcbiAgICBpZiAoZWxlbWVudC5pc1JlcXVpcmVUZXh0T25TdGFydCkge1xuICAgICAgc3BhbnMucHVzaCh0aGlzLnJlbmRlclJlcXVpcmVUZXh0KGVsZW1lbnQsIGNzc0NsYXNzZXMpKTtcbiAgICAgIHNwYW5zLnB1c2goZ2V0U3BhY2VTcGFuKFwicmVxLXNwXCIpKTtcbiAgICB9XG4gICAgdmFyIHF1ZXN0aW9uTnVtYmVyID0gZWxlbWVudC5ubztcbiAgICBpZiAocXVlc3Rpb25OdW1iZXIpIHtcbiAgICAgIHNwYW5zLnB1c2goXG4gICAgICAgIDxzcGFuXG4gICAgICAgICAgZGF0YS1rZXk9e1wicV9udW1cIn1cbiAgICAgICAgICBrZXk9e1wicV9udW1cIn1cbiAgICAgICAgICBjbGFzc05hbWU9e2Nzc0NsYXNzZXMubnVtYmVyfVxuICAgICAgICAgIHN0eWxlPXt7IHBvc2l0aW9uOiBcInN0YXRpY1wiIH19XG4gICAgICAgICAgYXJpYS1oaWRkZW49e3RydWV9XG4gICAgICAgID5cbiAgICAgICAgICB7cXVlc3Rpb25OdW1iZXJ9XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICk7XG4gICAgICBzcGFucy5wdXNoKGdldFNwYWNlU3BhbihcIm51bS1zcFwiKSk7XG4gICAgfVxuICAgIGlmIChlbGVtZW50LmlzUmVxdWlyZVRleHRCZWZvcmVUaXRsZSkge1xuICAgICAgc3BhbnMucHVzaCh0aGlzLnJlbmRlclJlcXVpcmVUZXh0KGVsZW1lbnQsIGNzc0NsYXNzZXMpKTtcbiAgICAgIHNwYW5zLnB1c2goZ2V0U3BhY2VTcGFuKFwicmVxLXNwXCIpKTtcbiAgICB9XG4gICAgc3BhbnMucHVzaChcbiAgICAgIFN1cnZleUVsZW1lbnRCYXNlLnJlbmRlckxvY1N0cmluZyhlbGVtZW50LmxvY1RpdGxlLCBudWxsLCBcInFfdGl0bGVcIilcbiAgICApO1xuICAgIGlmIChlbGVtZW50LmlzUmVxdWlyZVRleHRBZnRlclRpdGxlKSB7XG4gICAgICBzcGFucy5wdXNoKGdldFNwYWNlU3BhbihcInJlcS1zcFwiKSk7XG4gICAgICBzcGFucy5wdXNoKHRoaXMucmVuZGVyUmVxdWlyZVRleHQoZWxlbWVudCwgY3NzQ2xhc3NlcykpO1xuICAgIH1cbiAgICByZXR1cm4gc3BhbnM7XG4gIH1cblxuICBwcml2YXRlIHJlbmRlclJlcXVpcmVUZXh0KFxuICAgIGVsZW1lbnQ6IElUaXRsZU93bmVyLFxuICAgIGNzc0NsYXNzZXM6IGFueVxuICApOiBKU1guRWxlbWVudCB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxzcGFuXG4gICAgICAgIGRhdGEta2V5PXtcInJlcS10ZXh0XCJ9XG4gICAgICAgIGtleT17XCJyZXEtdGV4dFwifVxuICAgICAgICBjbGFzc05hbWU9e2Nzc0NsYXNzZXMucmVxdWlyZWRUZXh0IHx8IGNzc0NsYXNzZXMucGFuZWwucmVxdWlyZWRUZXh0fVxuICAgICAgICBhcmlhLWhpZGRlbj17dHJ1ZX1cbiAgICAgID5cbiAgICAgICAge2VsZW1lbnQucmVxdWlyZWRUZXh0fVxuICAgICAgPC9zcGFuPlxuICAgICk7XG4gIH1cbn1cbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFN1cnZleUVsZW1lbnRDb3JlLCBkb0tleTJDbGlja1VwIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBUaXRsZUFjdGlvbnMgfSBmcm9tIFwiLi90aXRsZS1hY3Rpb25zXCI7XG5cbmV4cG9ydCBjbGFzcyBUaXRsZUVsZW1lbnQgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQ8YW55LCBhbnk+IHtcbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgfVxuICBwcml2YXRlIGdldCBlbGVtZW50KCk6IFN1cnZleUVsZW1lbnRDb3JlIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5lbGVtZW50O1xuICB9XG4gIHJlbmRlcigpOiBKU1guRWxlbWVudCB8IGFueSB7XG4gICAgY29uc3QgZWxlbWVudCA9IHRoaXMuZWxlbWVudDtcbiAgICBpZiAoIWVsZW1lbnQgfHwgIWVsZW1lbnQuaGFzVGl0bGUpIHJldHVybiBudWxsO1xuICAgIGNvbnN0IGFyaWFMYWJlbCA9IGVsZW1lbnQudGl0bGVBcmlhTGFiZWwgfHwgdW5kZWZpbmVkO1xuICAgIGNvbnN0IHRpdGxlQ29udGVudCA9IChcbiAgICAgIDxUaXRsZUFjdGlvbnNcbiAgICAgICAgZWxlbWVudD17ZWxlbWVudH1cbiAgICAgICAgY3NzQ2xhc3Nlcz17ZWxlbWVudC5jc3NDbGFzc2VzfVxuICAgICAgPjwvVGl0bGVBY3Rpb25zPlxuICAgICk7XG4gICAgbGV0IG9uQ2xpY2s6IHVuZGVmaW5lZCB8ICgoZTogYW55KSA9PiB2b2lkKSA9IHVuZGVmaW5lZDtcbiAgICBsZXQgb25LZXlVcDogdW5kZWZpbmVkIHwgKChlOiBhbnkpID0+IHZvaWQpID0gdW5kZWZpbmVkO1xuICAgIGlmIChlbGVtZW50Lmhhc1RpdGxlRXZlbnRzKSB7XG4gICAgICBvbktleVVwID0gKGV2dDogYW55KSA9PiB7XG4gICAgICAgIGRvS2V5MkNsaWNrVXAoZXZ0Lm5hdGl2ZUV2ZW50KTtcbiAgICAgIH07XG4gICAgfVxuXG4gICAgY29uc3QgQ3VzdG9tVGFnID0gZWxlbWVudC50aXRsZVRhZ05hbWUgYXMga2V5b2YgSlNYLkludHJpbnNpY0VsZW1lbnRzO1xuICAgIHJldHVybiAoXG4gICAgICA8Q3VzdG9tVGFnXG4gICAgICAgIGNsYXNzTmFtZT17ZWxlbWVudC5jc3NUaXRsZX1cbiAgICAgICAgaWQ9e2VsZW1lbnQuYXJpYVRpdGxlSWR9XG4gICAgICAgIGFyaWEtbGFiZWw9e2FyaWFMYWJlbH1cbiAgICAgICAgdGFiSW5kZXg9e2VsZW1lbnQudGl0bGVUYWJJbmRleH1cbiAgICAgICAgYXJpYS1leHBhbmRlZD17ZWxlbWVudC50aXRsZUFyaWFFeHBhbmRlZH1cbiAgICAgICAgcm9sZT1cImNvbHVtbmhlYWRlclwiXG4gICAgICAgIG9uQ2xpY2s9e29uQ2xpY2t9XG4gICAgICAgIG9uS2V5VXA9e29uS2V5VXB9XG4gICAgICA+XG4gICAgICAgIHt0aXRsZUNvbnRlbnR9XG4gICAgICA8L0N1c3RvbVRhZz5cbiAgICApO1xuICB9XG59XG4iLCJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFN1cnZleVF1ZXN0aW9uRWxlbWVudEJhc2UgfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uX2VsZW1lbnRcIjtcblxuZXhwb3J0IGNsYXNzIFN1cnZleUN1c3RvbVdpZGdldCBleHRlbmRzIFN1cnZleVF1ZXN0aW9uRWxlbWVudEJhc2Uge1xuICBwcml2YXRlIHdpZGdldFJlZjogUmVhY3QuUmVmT2JqZWN0PEhUTUxEaXZFbGVtZW50PjtcbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLndpZGdldFJlZiA9IFJlYWN0LmNyZWF0ZVJlZigpO1xuICB9XG4gIHByaXZhdGUgX2FmdGVyUmVuZGVyKCkge1xuICAgIGlmICh0aGlzLnF1ZXN0aW9uQmFzZS5jdXN0b21XaWRnZXQpIHtcbiAgICAgIGxldCBlbCA9IHRoaXMud2lkZ2V0UmVmLmN1cnJlbnQ7XG4gICAgICBpZiAoISFlbCkge1xuICAgICAgICB0aGlzLnF1ZXN0aW9uQmFzZS5jdXN0b21XaWRnZXQuYWZ0ZXJSZW5kZXIodGhpcy5xdWVzdGlvbkJhc2UsIGVsKTtcbiAgICAgICAgdGhpcy5xdWVzdGlvbkJhc2UuY3VzdG9tV2lkZ2V0RGF0YS5pc05lZWRSZW5kZXIgPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgc3VwZXIuY29tcG9uZW50RGlkTW91bnQoKTtcbiAgICBpZiAodGhpcy5xdWVzdGlvbkJhc2UpIHtcbiAgICAgIHRoaXMuX2FmdGVyUmVuZGVyKCk7XG4gICAgfVxuICB9XG4gIGNvbXBvbmVudERpZFVwZGF0ZShwcmV2UHJvcHM6IGFueSwgcHJldlN0YXRlOiBhbnkpIHtcbiAgICBzdXBlci5jb21wb25lbnREaWRVcGRhdGUocHJldlByb3BzLCBwcmV2U3RhdGUpO1xuICAgIHZhciBpc0RlZmF1bHRSZW5kZXIgPVxuICAgICAgISF0aGlzLnF1ZXN0aW9uQmFzZS5jdXN0b21XaWRnZXQgJiZcbiAgICAgIHRoaXMucXVlc3Rpb25CYXNlLmN1c3RvbVdpZGdldC5pc0RlZmF1bHRSZW5kZXI7XG4gICAgaWYgKHRoaXMucXVlc3Rpb25CYXNlICYmICFpc0RlZmF1bHRSZW5kZXIpIHtcbiAgICAgIHRoaXMuX2FmdGVyUmVuZGVyKCk7XG4gICAgfVxuICB9XG4gIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgIHN1cGVyLmNvbXBvbmVudFdpbGxVbm1vdW50KCk7XG4gICAgaWYgKHRoaXMucXVlc3Rpb25CYXNlLmN1c3RvbVdpZGdldCkge1xuICAgICAgbGV0IGVsID0gdGhpcy53aWRnZXRSZWYuY3VycmVudDtcbiAgICAgIGlmICghIWVsKSB7XG4gICAgICAgIHRoaXMucXVlc3Rpb25CYXNlLmN1c3RvbVdpZGdldC53aWxsVW5tb3VudCh0aGlzLnF1ZXN0aW9uQmFzZSwgZWwpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBwcm90ZWN0ZWQgY2FuUmVuZGVyKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBzdXBlci5jYW5SZW5kZXIoKSAmJiB0aGlzLnF1ZXN0aW9uQmFzZS52aXNpYmxlO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICBsZXQgY3VzdG9tV2lkZ2V0ID0gdGhpcy5xdWVzdGlvbkJhc2UuY3VzdG9tV2lkZ2V0O1xuXG4gICAgaWYgKGN1c3RvbVdpZGdldC5pc0RlZmF1bHRSZW5kZXIpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxkaXYgcmVmPXt0aGlzLndpZGdldFJlZn0+XG4gICAgICAgICAge3RoaXMuY3JlYXRvci5jcmVhdGVRdWVzdGlvbkVsZW1lbnQodGhpcy5xdWVzdGlvbkJhc2UpfVxuICAgICAgICA8L2Rpdj5cbiAgICAgICk7XG4gICAgfVxuXG4gICAgbGV0IHdpZGdldCA9IG51bGw7XG4gICAgaWYgKGN1c3RvbVdpZGdldC53aWRnZXRKc29uLnJlbmRlcikge1xuICAgICAgd2lkZ2V0ID0gY3VzdG9tV2lkZ2V0LndpZGdldEpzb24ucmVuZGVyKHRoaXMucXVlc3Rpb25CYXNlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKGN1c3RvbVdpZGdldC5odG1sVGVtcGxhdGUpIHtcbiAgICAgICAgbGV0IGh0bWxWYWx1ZSA9IHsgX19odG1sOiBjdXN0b21XaWRnZXQuaHRtbFRlbXBsYXRlIH07XG4gICAgICAgIHJldHVybiA8ZGl2IHJlZj17dGhpcy53aWRnZXRSZWZ9IGRhbmdlcm91c2x5U2V0SW5uZXJIVE1MPXtodG1sVmFsdWV9IC8+O1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gPGRpdiByZWY9e3RoaXMud2lkZ2V0UmVmfT57d2lkZ2V0fTwvZGl2PjtcbiAgfVxufVxuIiwiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBIZWxwZXJzLCBRdWVzdGlvbiwgRHJvcGRvd25MaXN0TW9kZWwgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFBvcHVwIH0gZnJvbSBcIi4vY29tcG9uZW50cy9wb3B1cC9wb3B1cFwiO1xuaW1wb3J0IHsgU3ZnSWNvbiB9IGZyb20gXCIuL2NvbXBvbmVudHMvc3ZnLWljb24vc3ZnLWljb25cIjtcbmltcG9ydCB7IFJlYWN0RWxlbWVudEZhY3RvcnkgfSBmcm9tIFwiLi9lbGVtZW50LWZhY3RvcnlcIjtcbmltcG9ydCB7IFN1cnZleVF1ZXN0aW9uQ29tbWVudEl0ZW0gfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uX2NvbW1lbnRcIjtcbmltcG9ydCB7IFN1cnZleVF1ZXN0aW9uVW5jb250cm9sbGVkRWxlbWVudCB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fZWxlbWVudFwiO1xuXG5leHBvcnQgY2xhc3MgU3VydmV5UXVlc3Rpb25Ecm9wZG93bkJhc2U8VCBleHRlbmRzIFF1ZXN0aW9uPiBleHRlbmRzIFN1cnZleVF1ZXN0aW9uVW5jb250cm9sbGVkRWxlbWVudDxUPiB7XG4gIGlucHV0RWxlbWVudDogSFRNTElucHV0RWxlbWVudCB8IG51bGw7XG5cbiAgIGNsaWNrID0gKGV2ZW50OiBhbnkpID0+IHtcbiAgICAgdGhpcy5xdWVzdGlvbi5kcm9wZG93bkxpc3RNb2RlbD8ub25DbGljayhldmVudCk7XG4gICB9O1xuICAgY2xlYXIgPSAoZXZlbnQ6IGFueSkgPT4ge1xuICAgICB0aGlzLnF1ZXN0aW9uLmRyb3Bkb3duTGlzdE1vZGVsPy5vbkNsZWFyKGV2ZW50KTtcbiAgIH07XG4gICBrZXloYW5kbGVyID0gKGV2ZW50OiBhbnkpID0+IHtcbiAgICAgdGhpcy5xdWVzdGlvbi5kcm9wZG93bkxpc3RNb2RlbD8ua2V5SGFuZGxlcihldmVudCk7XG4gICB9O1xuICAgYmx1ciA9IChldmVudDogYW55KSA9PiB7XG4gICAgIHRoaXMucXVlc3Rpb24uZHJvcGRvd25MaXN0TW9kZWw/Lm9uQmx1cihldmVudCk7XG4gICAgIHRoaXMudXBkYXRlSW5wdXREb21FbGVtZW50KCk7XG4gICB9O1xuXG4gICBwcm90ZWN0ZWQgc2V0VmFsdWVDb3JlKG5ld1ZhbHVlOiBhbnkpIHtcbiAgICAgdGhpcy5xdWVzdGlvbkJhc2UucmVuZGVyZWRWYWx1ZSA9IG5ld1ZhbHVlO1xuICAgfVxuICAgcHJvdGVjdGVkIGdldFZhbHVlQ29yZSgpOiBhbnkge1xuICAgICByZXR1cm4gdGhpcy5xdWVzdGlvbkJhc2UucmVuZGVyZWRWYWx1ZTtcbiAgIH1cbiAgIHByb3RlY3RlZCByZW5kZXJTZWxlY3QoY3NzQ2xhc3NlczogYW55KTogSlNYLkVsZW1lbnQge1xuICAgICBsZXQgc2VsZWN0RWxlbWVudDogSlNYLkVsZW1lbnQgfCBudWxsID0gbnVsbDtcbiAgICAgaWYgKHRoaXMucXVlc3Rpb24uaXNSZWFkT25seSkge1xuICAgICAgIGNvbnN0IHRleHQgPSAodGhpcy5xdWVzdGlvbi5zZWxlY3RlZEl0ZW1Mb2NUZXh0KSA/IHRoaXMucmVuZGVyTG9jU3RyaW5nKHRoaXMucXVlc3Rpb24uc2VsZWN0ZWRJdGVtTG9jVGV4dCkgOiBcIlwiO1xuICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXRzLWNvbW1lbnRcbiAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgc2VsZWN0RWxlbWVudCA9IDxkaXYgaWQ9e3RoaXMucXVlc3Rpb24uaW5wdXRJZH0gY2xhc3NOYW1lPXt0aGlzLnF1ZXN0aW9uLmdldENvbnRyb2xDbGFzcygpfSBkaXNhYmxlZD5cbiAgICAgICAgIHt0ZXh0fVxuICAgICAgICAgPGRpdj57dGhpcy5xdWVzdGlvbi5yZWFkT25seVRleHR9PC9kaXY+XG4gICAgICAgPC9kaXY+O1xuICAgICB9IGVsc2Uge1xuICAgICAgIGlmICghKHRoaXMucXVlc3Rpb24gYXMgYW55KS5oYXNPd25Qcm9wZXJ0eShcImRyb3Bkb3duTGlzdE1vZGVsXCIpKSB7XG4gICAgICAgICAodGhpcy5xdWVzdGlvbiBhcyBhbnkpW1wiZHJvcGRvd25MaXN0TW9kZWxcIl0gPSBuZXcgRHJvcGRvd25MaXN0TW9kZWwodGhpcy5xdWVzdGlvbik7XG4gICAgICAgfVxuICAgICAgIHNlbGVjdEVsZW1lbnQgPSA8PlxuICAgICAgICAge3RoaXMucmVuZGVySW5wdXQodGhpcy5xdWVzdGlvbltcImRyb3Bkb3duTGlzdE1vZGVsXCJdKX1cbiAgICAgICAgIDxQb3B1cCBtb2RlbD17dGhpcy5xdWVzdGlvbj8uZHJvcGRvd25MaXN0TW9kZWw/LnBvcHVwTW9kZWx9PjwvUG9wdXA+XG4gICAgICAgPC8+O1xuICAgICB9XG5cbiAgICAgcmV0dXJuIChcbiAgICAgICA8ZGl2IGNsYXNzTmFtZT17Y3NzQ2xhc3Nlcy5zZWxlY3RXcmFwcGVyfT5cbiAgICAgICAgIHtzZWxlY3RFbGVtZW50fVxuICAgICAgIDwvZGl2PlxuICAgICApO1xuICAgfVxuXG4gICByZW5kZXJWYWx1ZUVsZW1lbnQoZHJvcGRvd25MaXN0TW9kZWw6IERyb3Bkb3duTGlzdE1vZGVsKTogSlNYLkVsZW1lbnQgfCBudWxsIHtcbiAgICAgaWYodGhpcy5xdWVzdGlvbi5zaG93SW5wdXRGaWVsZENvbXBvbmVudCkge1xuICAgICAgIHJldHVybiBSZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLmNyZWF0ZUVsZW1lbnQodGhpcy5xdWVzdGlvbi5pbnB1dEZpZWxkQ29tcG9uZW50TmFtZSwgeyBpdGVtOiBkcm9wZG93bkxpc3RNb2RlbC5nZXRTZWxlY3RlZEFjdGlvbigpLCBxdWVzdGlvbjogdGhpcy5xdWVzdGlvbiB9KTtcbiAgICAgfSBlbHNlIGlmKHRoaXMucXVlc3Rpb24uc2hvd1NlbGVjdGVkSXRlbUxvY1RleHQpIHtcbiAgICAgICByZXR1cm4gdGhpcy5yZW5kZXJMb2NTdHJpbmcodGhpcy5xdWVzdGlvbi5zZWxlY3RlZEl0ZW1Mb2NUZXh0KTtcbiAgICAgfVxuICAgICByZXR1cm4gbnVsbDtcbiAgIH1cblxuICAgcHJvdGVjdGVkIHJlbmRlcklucHV0KGRyb3Bkb3duTGlzdE1vZGVsOiBEcm9wZG93bkxpc3RNb2RlbCk6IEpTWC5FbGVtZW50IHtcbiAgICAgbGV0IHZhbHVlRWxlbWVudDogSlNYLkVsZW1lbnQgfCBudWxsID0gdGhpcy5yZW5kZXJWYWx1ZUVsZW1lbnQoZHJvcGRvd25MaXN0TW9kZWwpO1xuXG4gICAgIGNvbnN0IG9uSW5wdXRDaGFuZ2UgPSAoZTogYW55KSA9PiB7XG4gICAgICAgaWYgKGUudGFyZ2V0ID09PSBkb2N1bWVudC5hY3RpdmVFbGVtZW50KSB7XG4gICAgICAgICBkcm9wZG93bkxpc3RNb2RlbC5maWx0ZXJTdHJpbmcgPSBlLnRhcmdldC52YWx1ZTtcbiAgICAgICB9XG4gICAgIH07XG4gICAgIHJldHVybiAoPGRpdlxuICAgICAgIGlkPXt0aGlzLnF1ZXN0aW9uLmlucHV0SWR9XG4gICAgICAgY2xhc3NOYW1lPXt0aGlzLnF1ZXN0aW9uLmdldENvbnRyb2xDbGFzcygpfVxuICAgICAgIHRhYkluZGV4PXsgZHJvcGRvd25MaXN0TW9kZWwuaW5wdXRSZWFkT25seSA/IHVuZGVmaW5lZCA6IDB9XG4gICAgICAgb25DbGljaz17dGhpcy5jbGlja31cbiAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1jb21tZW50XG4gICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgIGRpc2FibGVkPXt0aGlzLnF1ZXN0aW9uLmlzSW5wdXRSZWFkT25seX1cbiAgICAgICByZXF1aXJlZD17dGhpcy5xdWVzdGlvbi5pc1JlcXVpcmVkfVxuICAgICAgIG9uS2V5RG93bj17dGhpcy5rZXloYW5kbGVyfVxuICAgICAgIG9uQmx1cj17dGhpcy5ibHVyfVxuICAgICAgIHJvbGU9e3RoaXMucXVlc3Rpb24uYXJpYVJvbGV9XG4gICAgICAgYXJpYS1yZXF1aXJlZD17dGhpcy5xdWVzdGlvbi5hcmlhUmVxdWlyZWR9XG4gICAgICAgYXJpYS1sYWJlbD17dGhpcy5xdWVzdGlvbi5hcmlhTGFiZWx9XG4gICAgICAgYXJpYS1pbnZhbGlkPXt0aGlzLnF1ZXN0aW9uLmFyaWFJbnZhbGlkfVxuICAgICAgIGFyaWEtZGVzY3JpYmVkYnk9e3RoaXMucXVlc3Rpb24uYXJpYURlc2NyaWJlZEJ5fVxuICAgICA+XG4gICAgICAgPGRpdiBjbGFzc05hbWU9e3RoaXMucXVlc3Rpb24uY3NzQ2xhc3Nlcy5jb250cm9sVmFsdWV9PlxuICAgICAgICAge3ZhbHVlRWxlbWVudH1cbiAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGF1dG9Db21wbGV0ZT1cIm9mZlwiXG4gICAgICAgICAgIGlkPXsgdGhpcy5xdWVzdGlvbi5nZXRJbnB1dElkKCkgfVxuICAgICAgICAgICByZWY9eyhlbGVtZW50KSA9PiAodGhpcy5pbnB1dEVsZW1lbnQgPSBlbGVtZW50KX1cbiAgICAgICAgICAgY2xhc3NOYW1lPXsgdGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLmZpbHRlclN0cmluZ0lucHV0IH1cbiAgICAgICAgICAgcm9sZT17IGRyb3Bkb3duTGlzdE1vZGVsLmZpbHRlclN0cmluZ0VuYWJsZWQgPyB0aGlzLnF1ZXN0aW9uLmFyaWFSb2xlIDogdW5kZWZpbmVkIH1cbiAgICAgICAgICAgYXJpYS1sYWJlbD17dGhpcy5xdWVzdGlvbi5wbGFjZWhvbGRlcn1cbiAgICAgICAgICAgcGxhY2Vob2xkZXI9IHsgdGhpcy5xdWVzdGlvbi5yZWFkT25seVRleHQgfVxuICAgICAgICAgICByZWFkT25seT0geyAhZHJvcGRvd25MaXN0TW9kZWwuc2VhcmNoRW5hYmxlZCA/IHRydWUgOiB1bmRlZmluZWQgfVxuICAgICAgICAgICB0YWJJbmRleD17IGRyb3Bkb3duTGlzdE1vZGVsLmlucHV0UmVhZE9ubHkgPyB1bmRlZmluZWQgOiAtMSB9XG4gICAgICAgICAgIGRpc2FibGVkPXt0aGlzLnF1ZXN0aW9uLmlzSW5wdXRSZWFkT25seX1cbiAgICAgICAgICAgb25DaGFuZ2U9eyhlKSA9PiB7IG9uSW5wdXRDaGFuZ2UoZSk7IH19XG4gICAgICAgICAgIG9uQmx1cj17dGhpcy5ibHVyfVxuICAgICAgICAgPjwvaW5wdXQ+XG4gICAgICAgPC9kaXY+XG4gICAgICAge3RoaXMuY3JlYXRlQ2xlYXJCdXR0b24oKX1cbiAgICAgPC9kaXY+KTtcbiAgIH1cblxuICAgY3JlYXRlQ2xlYXJCdXR0b24oKTogSlNYLkVsZW1lbnQgfCBudWxsIHtcbiAgICAgaWYgKCF0aGlzLnF1ZXN0aW9uLmFsbG93Q2xlYXIgfHwgIXRoaXMucXVlc3Rpb24uY3NzQ2xhc3Nlcy5jbGVhbkJ1dHRvbkljb25JZCkgcmV0dXJuIG51bGw7XG5cbiAgICAgY29uc3Qgc3R5bGUgPSB7IGRpc3BsYXk6IHRoaXMucXVlc3Rpb24uaXNFbXB0eSgpID8gXCJub25lXCIgOiBcIlwiIH07XG4gICAgIHJldHVybiAoXG4gICAgICAgPGRpdlxuICAgICAgICAgY2xhc3NOYW1lPXt0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMuY2xlYW5CdXR0b259XG4gICAgICAgICBzdHlsZT17c3R5bGV9XG4gICAgICAgICBvbkNsaWNrPXt0aGlzLmNsZWFyfVxuICAgICAgID5cbiAgICAgICAgIDxTdmdJY29uXG4gICAgICAgICAgIGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLmNsZWFuQnV0dG9uU3ZnfVxuICAgICAgICAgICBpY29uTmFtZT17dGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLmNsZWFuQnV0dG9uSWNvbklkfVxuICAgICAgICAgICB0aXRsZT17dGhpcy5xdWVzdGlvbi5jbGVhckNhcHRpb259XG4gICAgICAgICAgIHNpemU9e1wiYXV0b1wifVxuICAgICAgICAgPjwvU3ZnSWNvbj5cbiAgICAgICA8L2Rpdj5cbiAgICAgKTtcbiAgIH1cblxuICAgcHJvdGVjdGVkIHJlbmRlck90aGVyKGNzc0NsYXNzZXM6IGFueSk6IEpTWC5FbGVtZW50IHtcbiAgICAgcmV0dXJuIChcbiAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZvcm0tZ3JvdXBcIj5cbiAgICAgICAgIDxTdXJ2ZXlRdWVzdGlvbkNvbW1lbnRJdGVtXG4gICAgICAgICAgIHF1ZXN0aW9uPXt0aGlzLnF1ZXN0aW9ufVxuICAgICAgICAgICBvdGhlckNzcz17Y3NzQ2xhc3Nlcy5vdGhlcn1cbiAgICAgICAgICAgY3NzQ2xhc3Nlcz17Y3NzQ2xhc3Nlc31cbiAgICAgICAgICAgaXNEaXNwbGF5TW9kZT17dGhpcy5pc0Rpc3BsYXlNb2RlfVxuICAgICAgICAgLz5cbiAgICAgICA8L2Rpdj5cbiAgICAgKTtcbiAgIH1cblxuICAgY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wczogYW55LCBwcmV2U3RhdGU6IGFueSkge1xuICAgICBzdXBlci5jb21wb25lbnREaWRVcGRhdGUocHJldlByb3BzLCBwcmV2U3RhdGUpO1xuICAgICB0aGlzLnVwZGF0ZUlucHV0RG9tRWxlbWVudCgpO1xuICAgfVxuICAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgIHN1cGVyLmNvbXBvbmVudERpZE1vdW50KCk7XG4gICAgIHRoaXMudXBkYXRlSW5wdXREb21FbGVtZW50KCk7XG4gICB9XG4gICB1cGRhdGVJbnB1dERvbUVsZW1lbnQoKSB7XG4gICAgIGlmICghIXRoaXMuaW5wdXRFbGVtZW50KSB7XG4gICAgICAgY29uc3QgY29udHJvbDogYW55ID0gdGhpcy5pbnB1dEVsZW1lbnQ7XG4gICAgICAgY29uc3QgbmV3VmFsdWUgPSB0aGlzLnF1ZXN0aW9uLmRyb3Bkb3duTGlzdE1vZGVsLmZpbHRlclN0cmluZztcbiAgICAgICBpZiAoIUhlbHBlcnMuaXNUd29WYWx1ZUVxdWFscyhuZXdWYWx1ZSwgY29udHJvbC52YWx1ZSkpIHtcbiAgICAgICAgIGNvbnRyb2wudmFsdWUgPSB0aGlzLnF1ZXN0aW9uLmRyb3Bkb3duTGlzdE1vZGVsLmZpbHRlclN0cmluZztcbiAgICAgICB9XG4gICAgIH1cbiAgIH1cbn0iLCJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFJlYWN0U3VydmV5RWxlbWVudCB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fZWxlbWVudFwiO1xuaW1wb3J0IHsgQmFzZSwgSXRlbVZhbHVlIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlRdWVzdGlvbk9wdGlvbkl0ZW0gZXh0ZW5kcyBSZWFjdFN1cnZleUVsZW1lbnQge1xuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMuc3RhdGUgPSB7IGNoYW5nZWQ6IDAgfTtcbiAgICB0aGlzLnNldHVwTW9kZWwoKTtcbiAgfVxuICBjb21wb25lbnREaWRVcGRhdGUocHJldlByb3BzOiBhbnksIHByZXZTdGF0ZTogYW55KTogdm9pZCB7XG4gICAgc3VwZXIuY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wcywgcHJldlN0YXRlKTtcbiAgICB0aGlzLnNldHVwTW9kZWwoKTtcbiAgfVxuICBjb21wb25lbnRXaWxsVW5tb3VudCgpOiB2b2lkIHtcbiAgICBzdXBlci5jb21wb25lbnRXaWxsVW5tb3VudCgpO1xuICAgIGlmICghIXRoaXMuaXRlbSkge1xuICAgICAgdGhpcy5pdGVtLmxvY1RleHQub25DaGFuZ2VkID0gKCkgPT4geyB9O1xuICAgIH1cbiAgfVxuICBwcml2YXRlIHNldHVwTW9kZWwoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLml0ZW0ubG9jVGV4dCkgcmV0dXJuO1xuICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAgIHRoaXMuaXRlbS5sb2NUZXh0Lm9uQ2hhbmdlZCA9ICgpID0+IHtcbiAgICAgIHNlbGYuc2V0U3RhdGUoeyBjaGFuZ2VkOiBzZWxmLnN0YXRlLmNoYW5nZWQgKyAxIH0pO1xuICAgIH07XG4gIH1cbiAgcHJvdGVjdGVkIGdldFN0YXRlRWxlbWVudCgpOiBCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5pdGVtO1xuICB9XG4gIHByaXZhdGUgZ2V0IGl0ZW0oKTogSXRlbVZhbHVlIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5pdGVtO1xuICB9XG4gIHByb3RlY3RlZCBjYW5SZW5kZXIoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhdGhpcy5pdGVtO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICByZXR1cm4gKFxuICAgICAgPG9wdGlvbiB2YWx1ZT17dGhpcy5pdGVtLnZhbHVlfSBkaXNhYmxlZD17IXRoaXMuaXRlbS5pc0VuYWJsZWR9PlxuICAgICAgICB7dGhpcy5pdGVtLnRleHR9XG4gICAgICA8L29wdGlvbj5cbiAgICApO1xuICB9XG59IiwiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBSZW5kZXJlckZhY3RvcnksIEl0ZW1WYWx1ZSB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgUmVhY3RRdWVzdGlvbkZhY3RvcnkgfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uX2ZhY3RvcnlcIjtcbmltcG9ydCB7IFN1cnZleVF1ZXN0aW9uRHJvcGRvd24gfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uX2Ryb3Bkb3duXCI7XG5pbXBvcnQgeyBTdXJ2ZXlRdWVzdGlvbk9wdGlvbkl0ZW0gfSBmcm9tIFwiLi9kcm9wZG93bi1pdGVtXCI7XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlRdWVzdGlvbkRyb3Bkb3duU2VsZWN0IGV4dGVuZHMgU3VydmV5UXVlc3Rpb25Ecm9wZG93biB7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gIH1cblxuICBwcm90ZWN0ZWQgcmVuZGVyU2VsZWN0KGNzc0NsYXNzZXM6IGFueSk6IEpTWC5FbGVtZW50IHtcbiAgICBjb25zdCBjbGljayA9IChldmVudDogYW55KSA9PiB7XG4gICAgICB0aGlzLnF1ZXN0aW9uLm9uQ2xpY2soZXZlbnQpO1xuICAgIH07XG4gICAgY29uc3Qga2V5dXAgPSAoZXZlbnQ6IGFueSkgPT4ge1xuICAgICAgdGhpcy5xdWVzdGlvbi5vbktleVVwKGV2ZW50KTtcbiAgICB9O1xuXG4gICAgY29uc3Qgc2VsZWN0RWxlbWVudCA9IHRoaXMuaXNEaXNwbGF5TW9kZSA/IChcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXRzLWNvbW1lbnRcbiAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgIDxkaXYgaWQ9e3RoaXMucXVlc3Rpb24uaW5wdXRJZH0gY2xhc3NOYW1lPXt0aGlzLnF1ZXN0aW9uLmdldENvbnRyb2xDbGFzcygpfSBkaXNhYmxlZD57dGhpcy5xdWVzdGlvbi5yZWFkT25seVRleHR9PC9kaXY+KSA6XG4gICAgICAoPHNlbGVjdFxuICAgICAgICBpZD17dGhpcy5xdWVzdGlvbi5pbnB1dElkfVxuICAgICAgICBjbGFzc05hbWU9e3RoaXMucXVlc3Rpb24uZ2V0Q29udHJvbENsYXNzKCl9XG4gICAgICAgIHJlZj17KHNlbGVjdCkgPT4gKHRoaXMuc2V0Q29udHJvbChzZWxlY3QpKX1cbiAgICAgICAgYXV0b0NvbXBsZXRlPXt0aGlzLnF1ZXN0aW9uLmF1dG9jb21wbGV0ZX1cbiAgICAgICAgb25DaGFuZ2U9e3RoaXMudXBkYXRlVmFsdWVPbkV2ZW50fVxuICAgICAgICBvbklucHV0PXt0aGlzLnVwZGF0ZVZhbHVlT25FdmVudH1cbiAgICAgICAgb25DbGljaz17Y2xpY2t9XG4gICAgICAgIG9uS2V5VXA9e2tleXVwfVxuICAgICAgICBhcmlhLXJlcXVpcmVkPXt0aGlzLnF1ZXN0aW9uLmFyaWFSZXF1aXJlZH1cbiAgICAgICAgYXJpYS1sYWJlbD17dGhpcy5xdWVzdGlvbi5hcmlhTGFiZWx9XG4gICAgICAgIGFyaWEtaW52YWxpZD17dGhpcy5xdWVzdGlvbi5hcmlhSW52YWxpZH1cbiAgICAgICAgYXJpYS1kZXNjcmliZWRieT17dGhpcy5xdWVzdGlvbi5hcmlhRGVzY3JpYmVkQnl9XG4gICAgICAgIHJlcXVpcmVkPXt0aGlzLnF1ZXN0aW9uLmlzUmVxdWlyZWR9PlxuICAgICAgICB7dGhpcy5xdWVzdGlvbi5hbGxvd0NsZWFyID8gKDxvcHRpb24gdmFsdWU9XCJcIj57dGhpcy5xdWVzdGlvbi5wbGFjZWhvbGRlcn08L29wdGlvbj4pIDogbnVsbH1cbiAgICAgICAge3RoaXMucXVlc3Rpb24udmlzaWJsZUNob2ljZXMubWFwKChpdGVtOiBJdGVtVmFsdWUsIGk6IG51bWJlcikgPT4gPFN1cnZleVF1ZXN0aW9uT3B0aW9uSXRlbSBrZXk9e1wiaXRlbVwiICsgaX0gaXRlbT17aXRlbX0gLz4pfVxuICAgICAgPC9zZWxlY3Q+KTtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9e2Nzc0NsYXNzZXMuc2VsZWN0V3JhcHBlcn0+XG4gICAgICAgIHtzZWxlY3RFbGVtZW50fVxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxufVxuXG5SZWFjdFF1ZXN0aW9uRmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlclF1ZXN0aW9uKFwic3YtZHJvcGRvd24tc2VsZWN0XCIsIChwcm9wcykgPT4ge1xuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTdXJ2ZXlRdWVzdGlvbkRyb3Bkb3duU2VsZWN0LCBwcm9wcyk7XG59KTtcblxuUmVuZGVyZXJGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyUmVuZGVyZXIoXCJkcm9wZG93blwiLCBcInNlbGVjdFwiLCBcInN2LWRyb3Bkb3duLXNlbGVjdFwiKTsiLCJpbXBvcnQgeyBIYXNoVGFibGUgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcblxuZXhwb3J0IGNsYXNzIFJlYWN0RWxlbWVudEZhY3Rvcnkge1xuICBwdWJsaWMgc3RhdGljIEluc3RhbmNlOiBSZWFjdEVsZW1lbnRGYWN0b3J5ID0gbmV3IFJlYWN0RWxlbWVudEZhY3RvcnkoKTtcbiAgcHJpdmF0ZSBjcmVhdG9ySGFzaDogSGFzaFRhYmxlPChuYW1lOiBzdHJpbmcpID0+IEpTWC5FbGVtZW50PiA9IHt9O1xuXG4gIHB1YmxpYyByZWdpc3RlckVsZW1lbnQoXG4gICAgZWxlbWVudFR5cGU6IHN0cmluZyxcbiAgICBlbGVtZW50Q3JlYXRvcjogKHByb3BzOiBhbnkpID0+IEpTWC5FbGVtZW50XG4gICkge1xuICAgIHRoaXMuY3JlYXRvckhhc2hbZWxlbWVudFR5cGVdID0gZWxlbWVudENyZWF0b3I7XG4gIH1cbiAgcHVibGljIGdldEFsbFR5cGVzKCk6IEFycmF5PHN0cmluZz4ge1xuICAgIHZhciByZXN1bHQgPSBuZXcgQXJyYXk8c3RyaW5nPigpO1xuICAgIGZvciAodmFyIGtleSBpbiB0aGlzLmNyZWF0b3JIYXNoKSB7XG4gICAgICByZXN1bHQucHVzaChrZXkpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0LnNvcnQoKTtcbiAgfVxuICBwdWJsaWMgaXNFbGVtZW50UmVnaXN0ZXJlZChlbGVtZW50VHlwZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuICEhdGhpcy5jcmVhdG9ySGFzaFtlbGVtZW50VHlwZV07XG4gIH1cbiAgcHVibGljIGNyZWF0ZUVsZW1lbnQoZWxlbWVudFR5cGU6IHN0cmluZywgcGFyYW1zOiBhbnkpOiBKU1guRWxlbWVudCB8IGFueSB7XG4gICAgdmFyIGNyZWF0b3IgPSB0aGlzLmNyZWF0b3JIYXNoW2VsZW1lbnRUeXBlXTtcbiAgICBpZiAoY3JlYXRvciA9PSBudWxsKSByZXR1cm4gbnVsbDtcbiAgICByZXR1cm4gY3JlYXRvcihwYXJhbXMpO1xuICB9XG59XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBRdWVzdGlvbiwgUGFuZWxNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgVGl0bGVFbGVtZW50IH0gZnJvbSBcIi4vY29tcG9uZW50cy90aXRsZS90aXRsZS1lbGVtZW50XCI7XG5pbXBvcnQgeyBTdXJ2ZXlFbGVtZW50QmFzZSB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fZWxlbWVudFwiO1xuXG5leHBvcnQgY2xhc3MgU3VydmV5RWxlbWVudEhlYWRlciBleHRlbmRzIFJlYWN0LkNvbXBvbmVudDxhbnksIGFueT4ge1xuICBwcml2YXRlIGdldCBlbGVtZW50KCk6IFF1ZXN0aW9uIHwgUGFuZWxNb2RlbCB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuZWxlbWVudDtcbiAgfVxuICBwdWJsaWMgcmVuZGVyKCk6IEpTWC5FbGVtZW50IHtcbiAgICBjb25zdCBlbGVtZW50ID0gdGhpcy5lbGVtZW50O1xuICAgIGNvbnN0IHRpdGxlID0gZWxlbWVudC5oYXNUaXRsZSA/IChcbiAgICAgIDxUaXRsZUVsZW1lbnQgZWxlbWVudD17ZWxlbWVudH0+PC9UaXRsZUVsZW1lbnQ+XG4gICAgKSA6IG51bGw7XG4gICAgY29uc3QgZGVzY3JpcHRpb24gPSBlbGVtZW50Lmhhc0Rlc2NyaXB0aW9uVW5kZXJUaXRsZVxuICAgICAgPyBTdXJ2ZXlFbGVtZW50QmFzZS5yZW5kZXJRdWVzdGlvbkRlc2NyaXB0aW9uKHRoaXMuZWxlbWVudClcbiAgICAgIDogbnVsbDtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9e2VsZW1lbnQuY3NzSGVhZGVyfSBvbkNsaWNrPXtlbGVtZW50LmNsaWNrVGl0bGVGdW5jdGlvbn0+XG4gICAgICAgIHt0aXRsZX1cbiAgICAgICAge2Rlc2NyaXB0aW9ufVxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxufSIsImltcG9ydCAqIGFzIFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgRmxvd1BhbmVsTW9kZWwsIFF1ZXN0aW9uIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBSZWFjdEVsZW1lbnRGYWN0b3J5IH0gZnJvbSBcIi4vZWxlbWVudC1mYWN0b3J5XCI7XG5pbXBvcnQgeyBTdXJ2ZXlQYW5lbCB9IGZyb20gXCIuL3BhbmVsXCI7XG5pbXBvcnQgeyBTdXJ2ZXlRdWVzdGlvbiB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25cIjtcblxuZXhwb3J0IGNsYXNzIFN1cnZleUZsb3dQYW5lbCBleHRlbmRzIFN1cnZleVBhbmVsIHtcbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgfVxuICBwdWJsaWMgZ2V0IGZsb3dQYW5lbCgpOiBGbG93UGFuZWxNb2RlbCB7XG4gICAgcmV0dXJuIHRoaXMucGFuZWwgYXMgRmxvd1BhbmVsTW9kZWw7XG4gIH1cbiAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgc3VwZXIuY29tcG9uZW50RGlkTW91bnQoKTtcbiAgICBpZiAoISF0aGlzLmZsb3dQYW5lbCkge1xuICAgICAgdGhpcy5mbG93UGFuZWwub25DdXN0b21IdG1sUHJvZHVjaW5nID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBcIlwiO1xuICAgICAgfTtcbiAgICAgIHRoaXMuZmxvd1BhbmVsLm9uR2V0SHRtbEZvclF1ZXN0aW9uID0gdGhpcy5yZW5kZXJRdWVzdGlvbjtcbiAgICB9XG4gIH1cbiAgY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgc3VwZXIuY29tcG9uZW50V2lsbFVubW91bnQoKTtcbiAgICBpZiAoISF0aGlzLmZsb3dQYW5lbCkge1xuICAgICAgdGhpcy5mbG93UGFuZWwub25DdXN0b21IdG1sUHJvZHVjaW5nID0gbnVsbCBhcyBhbnk7XG4gICAgICB0aGlzLmZsb3dQYW5lbC5vbkdldEh0bWxGb3JRdWVzdGlvbiA9IG51bGwgYXMgYW55O1xuICAgIH1cbiAgfVxuICBwcm90ZWN0ZWQgZ2V0UXVlc3Rpb24obmFtZTogc3RyaW5nKTogUXVlc3Rpb24ge1xuICAgIHJldHVybiB0aGlzLmZsb3dQYW5lbC5nZXRRdWVzdGlvbkJ5TmFtZShuYW1lKTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyUXVlc3Rpb24ocXVlc3Rpb246IFF1ZXN0aW9uKTogc3RyaW5nIHtcbiAgICByZXR1cm4gXCI8cXVlc3Rpb24+XCIgKyBxdWVzdGlvbi5uYW1lICsgXCI8L3F1ZXN0aW9uPlwiO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJSb3dzKCk6IEFycmF5PEpTWC5FbGVtZW50PiB7XG4gICAgY29uc3QgcmVzdWx0ID0gdGhpcy5yZW5kZXJIdG1sKCk7XG4gICAgaWYoISFyZXN1bHQpIHtcbiAgICAgIHJldHVybiBbcmVzdWx0XTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgfVxuICBwcml2YXRlIHJlbmRlcmVkSW5kZXg6IG51bWJlcjtcbiAgcHJpdmF0ZSBnZXROb2RlSW5kZXgoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5yZW5kZXJlZEluZGV4Kys7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckh0bWwoKTogSlNYLkVsZW1lbnQgfCBudWxsIHtcbiAgICBpZiAoIXRoaXMuZmxvd1BhbmVsKSByZXR1cm4gbnVsbDtcbiAgICBjb25zdCBodG1sID0gXCI8c3Bhbj5cIiArIHRoaXMuZmxvd1BhbmVsLnByb2R1Y2VIdG1sKCkgKyBcIjwvc3Bhbj5cIjtcbiAgICBpZiAoIURPTVBhcnNlcikge1xuICAgICAgY29uc3QgaHRtbFZhbHVlID0geyBfX2h0bWw6IGh0bWwgfTtcbiAgICAgIHJldHVybiA8ZGl2IGRhbmdlcm91c2x5U2V0SW5uZXJIVE1MPXtodG1sVmFsdWV9IC8+O1xuICAgIH1cbiAgICBjb25zdCBkb2MgPSBuZXcgRE9NUGFyc2VyKCkucGFyc2VGcm9tU3RyaW5nKGh0bWwsIFwidGV4dC94bWxcIik7XG4gICAgdGhpcy5yZW5kZXJlZEluZGV4ID0gMDtcbiAgICByZXR1cm4gdGhpcy5yZW5kZXJQYXJlbnROb2RlKGRvYyk7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlck5vZGVzKGRvbU5vZGVzOiBBcnJheTxOb2RlPik6IEFycmF5PEpTWC5FbGVtZW50PiB7XG4gICAgY29uc3Qgbm9kZXM6IEFycmF5PEpTWC5FbGVtZW50PiA9IFtdO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZG9tTm9kZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IG5vZGUgPSB0aGlzLnJlbmRlck5vZGUoZG9tTm9kZXNbaV0pO1xuICAgICAgaWYoISFub2RlKSB7XG4gICAgICAgIG5vZGVzLnB1c2gobm9kZSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBub2RlcztcbiAgfVxuICBwcml2YXRlIGdldFN0eWxlKG5vZGVUeXBlOiBzdHJpbmcpIHtcbiAgICBjb25zdCBzdHlsZTogYW55ID0ge307XG4gICAgaWYgKG5vZGVUeXBlLnRvTG93ZXJDYXNlKCkgPT09IFwiYlwiKSB7XG4gICAgICBzdHlsZS5mb250V2VpZ2h0ID0gXCJib2xkXCI7XG4gICAgfVxuICAgIGlmIChub2RlVHlwZS50b0xvd2VyQ2FzZSgpID09PSBcImlcIikge1xuICAgICAgc3R5bGUuZm9udFN0eWxlID0gXCJpdGFsaWNcIjtcbiAgICB9XG4gICAgaWYgKG5vZGVUeXBlLnRvTG93ZXJDYXNlKCkgPT09IFwidVwiKSB7XG4gICAgICBzdHlsZS50ZXh0RGVjb3JhdGlvbiA9IFwidW5kZXJsaW5lXCI7XG4gICAgfVxuICAgIHJldHVybiBzdHlsZTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyUGFyZW50Tm9kZShub2RlOiBOb2RlKTogSlNYLkVsZW1lbnQge1xuICAgIGNvbnN0IG5vZGVUeXBlID0gbm9kZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgIGNvbnN0IGNoaWxkcmVuID0gdGhpcy5yZW5kZXJOb2Rlcyh0aGlzLmdldENoaWxkRG9tTm9kZXMobm9kZSkpO1xuICAgIGlmIChub2RlVHlwZSA9PT0gXCJkaXZcIilcbiAgICAgIHJldHVybiA8ZGl2IGtleT17dGhpcy5nZXROb2RlSW5kZXgoKX0+e2NoaWxkcmVufTwvZGl2PjtcbiAgICByZXR1cm4gKFxuICAgICAgPHNwYW4ga2V5PXt0aGlzLmdldE5vZGVJbmRleCgpfSBzdHlsZT17dGhpcy5nZXRTdHlsZShub2RlVHlwZSl9PlxuICAgICAgICB7Y2hpbGRyZW59XG4gICAgICA8L3NwYW4+XG4gICAgKTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyTm9kZShub2RlOiBOb2RlKTogSlNYLkVsZW1lbnQgfCBudWxsIHtcbiAgICBpZiAoIXRoaXMuaGFzVGV4dENoaWxkTm9kZXNPbmx5KG5vZGUpKSB7XG4gICAgICByZXR1cm4gdGhpcy5yZW5kZXJQYXJlbnROb2RlKG5vZGUpO1xuICAgIH1cbiAgICBjb25zdCBub2RlVHlwZSA9IG5vZGUubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtcbiAgICBpZiAobm9kZVR5cGUgPT09IFwicXVlc3Rpb25cIikge1xuICAgICAgY29uc3QgcXVlc3Rpb24gPSB0aGlzLmZsb3dQYW5lbC5nZXRRdWVzdGlvbkJ5TmFtZShub2RlLnRleHRDb250ZW50IGFzIGFueSk7XG4gICAgICBpZiAoIXF1ZXN0aW9uKSByZXR1cm4gbnVsbDtcbiAgICAgIGNvbnN0IHF1ZXN0aW9uQm9keSA9IChcbiAgICAgICAgPFN1cnZleVF1ZXN0aW9uXG4gICAgICAgICAga2V5PXtxdWVzdGlvbi5uYW1lfVxuICAgICAgICAgIGVsZW1lbnQ9e3F1ZXN0aW9ufVxuICAgICAgICAgIGNyZWF0b3I9e3RoaXMuY3JlYXRvcn1cbiAgICAgICAgICBjc3M9e3RoaXMuY3NzfVxuICAgICAgICAvPlxuICAgICAgKTtcbiAgICAgIHJldHVybiA8c3BhbiBrZXk9e3RoaXMuZ2V0Tm9kZUluZGV4KCl9PntxdWVzdGlvbkJvZHl9PC9zcGFuPjtcbiAgICB9XG4gICAgaWYgKG5vZGVUeXBlID09PSBcImRpdlwiKSB7XG4gICAgICByZXR1cm4gPGRpdiBrZXk9e3RoaXMuZ2V0Tm9kZUluZGV4KCl9Pntub2RlLnRleHRDb250ZW50fTwvZGl2PjtcbiAgICB9XG4gICAgcmV0dXJuIChcbiAgICAgIDxzcGFuIGtleT17dGhpcy5nZXROb2RlSW5kZXgoKX0gc3R5bGU9e3RoaXMuZ2V0U3R5bGUobm9kZVR5cGUpfT5cbiAgICAgICAge25vZGUudGV4dENvbnRlbnR9XG4gICAgICA8L3NwYW4+XG4gICAgKTtcbiAgfVxuICBwcml2YXRlIGdldENoaWxkRG9tTm9kZXMobm9kZTogTm9kZSk6IEFycmF5PE5vZGU+IHtcbiAgICBjb25zdCBkb21Ob2RlczogQXJyYXk8Tm9kZT4gPSBbXTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5vZGUuY2hpbGROb2Rlcy5sZW5ndGg7IGkrKykge1xuICAgICAgZG9tTm9kZXMucHVzaChub2RlLmNoaWxkTm9kZXNbaV0pO1xuICAgIH1cbiAgICByZXR1cm4gZG9tTm9kZXM7XG4gIH1cbiAgcHJpdmF0ZSBoYXNUZXh0Q2hpbGROb2Rlc09ubHkobm9kZTogTm9kZSk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IG5vZGVzID0gbm9kZS5jaGlsZE5vZGVzO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbm9kZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChub2Rlc1tpXS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpICE9PSBcIiN0ZXh0XCIpIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckNvbnRlbnQoc3R5bGU6IGFueSwgcm93czogSlNYLkVsZW1lbnRbXSk6IEpTWC5FbGVtZW50IHtcbiAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChcImYtcGFuZWxcIiwgeyBzdHlsZTogc3R5bGUgfSwgcm93cyk7XG4gIH1cbn1cblxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXCJmbG93cGFuZWxcIiwgcHJvcHMgPT4ge1xuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTdXJ2ZXlGbG93UGFuZWwsIHByb3BzKTtcbn0pO1xuIiwiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBTdXJ2ZXlRdWVzdGlvbkVsZW1lbnRCYXNlIH0gZnJvbSBcIi4vcmVhY3RxdWVzdGlvbl9lbGVtZW50XCI7XG5pbXBvcnQgeyBRdWVzdGlvbkltYWdlTW9kZWwgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFJlYWN0UXVlc3Rpb25GYWN0b3J5IH0gZnJvbSBcIi4vcmVhY3RxdWVzdGlvbl9mYWN0b3J5XCI7XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlRdWVzdGlvbkltYWdlIGV4dGVuZHMgU3VydmV5UXVlc3Rpb25FbGVtZW50QmFzZSB7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gIH1cbiAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgc3VwZXIuY29tcG9uZW50RGlkTW91bnQoKTtcbiAgICB0aGlzLnF1ZXN0aW9uLmxvY0ltYWdlTGluay5vbkNoYW5nZWQgPSAoKSA9PiB7XG4gICAgICB0aGlzLmZvcmNlVXBkYXRlKCk7XG4gICAgfTtcbiAgfVxuICBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICBzdXBlci5jb21wb25lbnRXaWxsVW5tb3VudCgpO1xuICAgIHRoaXMucXVlc3Rpb24ubG9jSW1hZ2VMaW5rLm9uQ2hhbmdlZCA9ICgpID0+IHsgfTtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXQgcXVlc3Rpb24oKTogUXVlc3Rpb25JbWFnZU1vZGVsIHtcbiAgICByZXR1cm4gdGhpcy5xdWVzdGlvbkJhc2UgYXMgUXVlc3Rpb25JbWFnZU1vZGVsO1xuICB9XG4gIHByb3RlY3RlZCBjYW5SZW5kZXIoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHN1cGVyLmNhblJlbmRlcigpICYmICEhdGhpcy5xdWVzdGlvbi5pbWFnZUxpbms7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIHZhciBjc3NDbGFzc2VzID0gdGhpcy5xdWVzdGlvbi5nZXRJbWFnZUNzcygpO1xuICAgIHZhciBzdHlsZTogYW55ID0geyBvYmplY3RGaXQ6IHRoaXMucXVlc3Rpb24uaW1hZ2VGaXQgfTtcbiAgICB2YXIgY29udHJvbDogSlNYLkVsZW1lbnQgfCBudWxsID0gbnVsbDtcbiAgICBpZiAodGhpcy5xdWVzdGlvbi5yZW5kZXJlZE1vZGUgPT09IFwiaW1hZ2VcIikge1xuICAgICAgY29udHJvbCA9IChcbiAgICAgICAgPGltZ1xuICAgICAgICAgIGNsYXNzTmFtZT17Y3NzQ2xhc3Nlc31cbiAgICAgICAgICBzcmM9e3RoaXMucXVlc3Rpb24ubG9jSW1hZ2VMaW5rLnJlbmRlcmVkSHRtbH1cbiAgICAgICAgICBhbHQ9e3RoaXMucXVlc3Rpb24uYWx0VGV4dCB8fCB0aGlzLnF1ZXN0aW9uLnRpdGxlfVxuICAgICAgICAgIHdpZHRoPXt0aGlzLnF1ZXN0aW9uLnJlbmRlcmVkV2lkdGh9XG4gICAgICAgICAgaGVpZ2h0PXt0aGlzLnF1ZXN0aW9uLnJlbmRlcmVkSGVpZ2h0fVxuICAgICAgICAgIC8vYWx0PXtpdGVtLnRleHQgfHwgaXRlbS52YWx1ZX1cbiAgICAgICAgICBzdHlsZT17c3R5bGV9XG4gICAgICAgIC8+XG4gICAgICApO1xuICAgIH1cbiAgICBpZiAodGhpcy5xdWVzdGlvbi5yZW5kZXJlZE1vZGUgPT09IFwidmlkZW9cIikge1xuICAgICAgY29udHJvbCA9IChcbiAgICAgICAgPHZpZGVvIGNvbnRyb2xzXG4gICAgICAgICAgY2xhc3NOYW1lPXtjc3NDbGFzc2VzfVxuICAgICAgICAgIHNyYz17dGhpcy5xdWVzdGlvbi5sb2NJbWFnZUxpbmsucmVuZGVyZWRIdG1sfVxuICAgICAgICAgIHdpZHRoPXt0aGlzLnF1ZXN0aW9uLnJlbmRlcmVkV2lkdGh9XG4gICAgICAgICAgaGVpZ2h0PXt0aGlzLnF1ZXN0aW9uLnJlbmRlcmVkSGVpZ2h0fVxuICAgICAgICAgIHN0eWxlPXtzdHlsZX1cbiAgICAgICAgPjwvdmlkZW8+XG4gICAgICApO1xuICAgIH1cbiAgICBpZiAodGhpcy5xdWVzdGlvbi5yZW5kZXJlZE1vZGUgPT09IFwieW91dHViZVwiKSB7XG4gICAgICBjb250cm9sID0gKFxuICAgICAgICA8aWZyYW1lXG4gICAgICAgICAgY2xhc3NOYW1lPXtjc3NDbGFzc2VzfVxuICAgICAgICAgIHNyYz17dGhpcy5xdWVzdGlvbi5sb2NJbWFnZUxpbmsucmVuZGVyZWRIdG1sfVxuICAgICAgICAgIHdpZHRoPXt0aGlzLnF1ZXN0aW9uLnJlbmRlcmVkV2lkdGh9XG4gICAgICAgICAgaGVpZ2h0PXt0aGlzLnF1ZXN0aW9uLnJlbmRlcmVkSGVpZ2h0fVxuICAgICAgICAgIHN0eWxlPXtzdHlsZX1cbiAgICAgICAgPjwvaWZyYW1lPlxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIDxkaXYgY2xhc3NOYW1lPXt0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMucm9vdH0+e2NvbnRyb2x9PC9kaXY+O1xuICB9XG59XG5cblJlYWN0UXVlc3Rpb25GYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyUXVlc3Rpb24oXCJpbWFnZVwiLCAocHJvcHMpID0+IHtcbiAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3VydmV5UXVlc3Rpb25JbWFnZSwgcHJvcHMpO1xufSk7XG4iLCJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFJlYWN0U3VydmV5RWxlbWVudCwgU3VydmV5RWxlbWVudEJhc2UsIFN1cnZleVF1ZXN0aW9uRWxlbWVudEJhc2UgfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uX2VsZW1lbnRcIjtcbmltcG9ydCB7IFF1ZXN0aW9uSW1hZ2VQaWNrZXJNb2RlbCwgSW1hZ2VJdGVtVmFsdWUsIFN1cnZleU1vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBSZWFjdFF1ZXN0aW9uRmFjdG9yeSB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fZmFjdG9yeVwiO1xuaW1wb3J0IHsgUmVhY3RTdXJ2ZXlFbGVtZW50c1dyYXBwZXIgfSBmcm9tIFwiLi9yZWFjdHN1cnZleW1vZGVsXCI7XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlRdWVzdGlvbkltYWdlUGlja2VyIGV4dGVuZHMgU3VydmV5UXVlc3Rpb25FbGVtZW50QmFzZSB7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldCBxdWVzdGlvbigpOiBRdWVzdGlvbkltYWdlUGlja2VyTW9kZWwge1xuICAgIHJldHVybiB0aGlzLnF1ZXN0aW9uQmFzZSBhcyBRdWVzdGlvbkltYWdlUGlja2VyTW9kZWw7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIHZhciBjc3NDbGFzc2VzID0gdGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzO1xuICAgIHJldHVybiAoXG4gICAgICA8ZmllbGRzZXQgY2xhc3NOYW1lPXt0aGlzLnF1ZXN0aW9uLmdldFNlbGVjdEJhc2VSb290Q3NzKCl9PlxuICAgICAgICA8bGVnZW5kXG4gICAgICAgICAgcm9sZT1cInJhZGlvXCJcbiAgICAgICAgICBhcmlhLWxhYmVsPXt0aGlzLnF1ZXN0aW9uLmxvY1RpdGxlLnJlbmRlcmVkSHRtbH0gLz5cbiAgICAgICAge3RoaXMucXVlc3Rpb24uaGFzQ29sdW1ucyA/IHRoaXMuZ2V0Q29sdW1ucyhjc3NDbGFzc2VzKSA6IHRoaXMuZ2V0SXRlbXMoY3NzQ2xhc3Nlcyl9XG4gICAgICA8L2ZpZWxkc2V0PlxuICAgICk7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0Q29sdW1ucyhjc3NDbGFzc2VzOiBhbnkpIHtcbiAgICByZXR1cm4gdGhpcy5xdWVzdGlvbi5jb2x1bW5zLm1hcCgoY29sdW1uOiBhbnksIGNpOiBudW1iZXIpID0+IHtcbiAgICAgIHZhciBpdGVtcyA9IGNvbHVtbi5tYXAoKGl0ZW06IGFueSwgaWk6IG51bWJlcikgPT5cbiAgICAgICAgdGhpcy5yZW5kZXJJdGVtKFxuICAgICAgICAgIFwiaXRlbVwiICsgaWksXG4gICAgICAgICAgaXRlbSxcbiAgICAgICAgICBjc3NDbGFzc2VzXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8ZGl2IGtleT17XCJjb2x1bW5cIiArIGNpfSBjbGFzc05hbWU9e3RoaXMucXVlc3Rpb24uZ2V0Q29sdW1uQ2xhc3MoKX0gcm9sZT1cInByZXNlbnRhdGlvblwiPlxuICAgICAgICAgIHtpdGVtc31cbiAgICAgICAgPC9kaXY+XG4gICAgICApO1xuICAgIH0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldEl0ZW1zKGNzc0NsYXNzZXM6IGFueSk6IEFycmF5PGFueT4ge1xuICAgIHZhciBpdGVtczpBcnJheTxKU1guRWxlbWVudD4gPSBbXTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMucXVlc3Rpb24udmlzaWJsZUNob2ljZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBpdGVtID0gdGhpcy5xdWVzdGlvbi52aXNpYmxlQ2hvaWNlc1tpXTtcbiAgICAgIHZhciBrZXkgPSBcIml0ZW1cIiArIGk7XG4gICAgICBpdGVtcy5wdXNoKHRoaXMucmVuZGVySXRlbShrZXksIGl0ZW0gYXMgSW1hZ2VJdGVtVmFsdWUsIGNzc0NsYXNzZXMpKTtcbiAgICB9XG4gICAgcmV0dXJuIGl0ZW1zO1xuICB9XG4gIHByb3RlY3RlZCBnZXQgdGV4dFN0eWxlKCk6IGFueSB7XG4gICAgcmV0dXJuIHsgbWFyZ2luTGVmdDogXCIzcHhcIiwgZGlzcGxheTogXCJpbmxpbmVcIiwgcG9zaXRpb246IFwic3RhdGljXCIgfTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVySXRlbShcbiAgICBrZXk6IHN0cmluZyxcbiAgICBpdGVtOiBJbWFnZUl0ZW1WYWx1ZSxcbiAgICBjc3NDbGFzc2VzOiBhbnlcbiAgKTogSlNYLkVsZW1lbnQge1xuICAgIGNvbnN0IHJlbmRlcmVkSXRlbSA9IDxTdXJ2ZXlRdWVzdGlvbkltYWdlUGlja2VySXRlbSBrZXk9e2tleX0gcXVlc3Rpb249e3RoaXMucXVlc3Rpb259IGl0ZW09e2l0ZW19IGNzc0NsYXNzZXM9e2Nzc0NsYXNzZXN9PjwvU3VydmV5UXVlc3Rpb25JbWFnZVBpY2tlckl0ZW0+O1xuICAgIGNvbnN0IHN1cnZleSA9IHRoaXMucXVlc3Rpb24uc3VydmV5IGFzIFN1cnZleU1vZGVsO1xuICAgIGxldCB3cmFwcGVkSXRlbTogSlNYLkVsZW1lbnQgfCBudWxsID0gbnVsbDtcbiAgICBpZighIXN1cnZleSkge1xuICAgICAgd3JhcHBlZEl0ZW0gPSBSZWFjdFN1cnZleUVsZW1lbnRzV3JhcHBlci53cmFwSXRlbVZhbHVlKHN1cnZleSwgcmVuZGVyZWRJdGVtLCB0aGlzLnF1ZXN0aW9uLCBpdGVtKTtcbiAgICB9XG4gICAgcmV0dXJuIHdyYXBwZWRJdGVtID8/IHJlbmRlcmVkSXRlbTtcbiAgfVxufVxuZXhwb3J0IGNsYXNzIFN1cnZleVF1ZXN0aW9uSW1hZ2VQaWNrZXJJdGVtIGV4dGVuZHMgUmVhY3RTdXJ2ZXlFbGVtZW50IHtcbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLmhhbmRsZU9uQ2hhbmdlID0gdGhpcy5oYW5kbGVPbkNoYW5nZS5iaW5kKHRoaXMpO1xuICB9XG4gIHByb3RlY3RlZCBnZXRTdGF0ZUVsZW1lbnQoKSB7XG4gICAgcmV0dXJuIHRoaXMuaXRlbTtcbiAgfVxuICBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICBzdXBlci5jb21wb25lbnREaWRNb3VudCgpO1xuICAgIHRoaXMucmVhY3RPblN0ckNoYW5nZWQoKTtcbiAgfVxuICBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICBzdXBlci5jb21wb25lbnRXaWxsVW5tb3VudCgpO1xuICAgIHRoaXMuaXRlbS5sb2NJbWFnZUxpbmsub25DaGFuZ2VkID0gZnVuY3Rpb24gKCkge307XG4gIH1cbiAgY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wczogYW55LCBwcmV2U3RhdGU6IGFueSkge1xuICAgIHN1cGVyLmNvbXBvbmVudERpZFVwZGF0ZShwcmV2UHJvcHMsIHByZXZTdGF0ZSk7XG4gICAgdGhpcy5yZWFjdE9uU3RyQ2hhbmdlZCgpO1xuICB9XG4gIHByaXZhdGUgcmVhY3RPblN0ckNoYW5nZWQoKSB7XG4gICAgdGhpcy5pdGVtLmxvY0ltYWdlTGluay5vbkNoYW5nZWQgPSAoKSA9PiB7XG4gICAgICB0aGlzLnNldFN0YXRlKHsgbG9jSW1hZ2VMaW5rY2hhbmdlZDogISF0aGlzLnN0YXRlICYmIHRoaXMuc3RhdGUubG9jSW1hZ2VMaW5rID8gdGhpcy5zdGF0ZS5sb2NJbWFnZUxpbmsgKyAxIDogMSB9KTtcbiAgICB9O1xuICB9XG4gIHByb3RlY3RlZCBnZXQgY3NzQ2xhc3NlcygpIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5jc3NDbGFzc2VzO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldCBpdGVtKCkge1xuICAgIHJldHVybiB0aGlzLnByb3BzLml0ZW07XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0IHF1ZXN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLnByb3BzLnF1ZXN0aW9uO1xuICB9XG5cbiAgaGFuZGxlT25DaGFuZ2UoZXZlbnQ6IGFueSkge1xuICAgIGlmICh0aGlzLnF1ZXN0aW9uLm11bHRpU2VsZWN0KSB7XG4gICAgICBpZiAoZXZlbnQudGFyZ2V0LmNoZWNrZWQpIHtcbiAgICAgICAgdGhpcy5xdWVzdGlvbi52YWx1ZSA9IHRoaXMucXVlc3Rpb24udmFsdWUuY29uY2F0KGV2ZW50LnRhcmdldC52YWx1ZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgY3VyclZhbHVlID0gdGhpcy5xdWVzdGlvbi52YWx1ZTtcbiAgICAgICAgY3VyclZhbHVlLnNwbGljZSh0aGlzLnF1ZXN0aW9uLnZhbHVlLmluZGV4T2YoZXZlbnQudGFyZ2V0LnZhbHVlKSwgMSk7XG4gICAgICAgIHRoaXMucXVlc3Rpb24udmFsdWUgPSBjdXJyVmFsdWU7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucXVlc3Rpb24udmFsdWUgPSBldmVudC50YXJnZXQudmFsdWU7XG4gICAgfVxuICAgIHRoaXMuc2V0U3RhdGUoeyB2YWx1ZTogdGhpcy5xdWVzdGlvbi52YWx1ZSB9KTtcbiAgfVxuXG4gIHByb3RlY3RlZCByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICBjb25zdCBpdGVtID0gdGhpcy5pdGVtO1xuICAgIGNvbnN0IHF1ZXN0aW9uID0gdGhpcy5xdWVzdGlvbjtcbiAgICBjb25zdCBjc3NDbGFzc2VzID0gdGhpcy5jc3NDbGFzc2VzO1xuICAgIHZhciBpc0NoZWNrZWQgPSBxdWVzdGlvbi5pc0l0ZW1TZWxlY3RlZChpdGVtKTtcbiAgICB2YXIgaXRlbUNsYXNzID0gcXVlc3Rpb24uZ2V0SXRlbUNsYXNzKGl0ZW0pO1xuICAgIHZhciB0ZXh0OiBKU1guRWxlbWVudCB8IG51bGwgPSBudWxsO1xuICAgIGlmIChxdWVzdGlvbi5zaG93TGFiZWwpIHtcbiAgICAgIHRleHQgPSAoXG4gICAgICAgIDxzcGFuXG4gICAgICAgICAgY2xhc3NOYW1lPXtxdWVzdGlvbi5jc3NDbGFzc2VzLml0ZW1UZXh0fVxuICAgICAgICA+XG4gICAgICAgICAge2l0ZW0udGV4dCA/IFN1cnZleUVsZW1lbnRCYXNlLnJlbmRlckxvY1N0cmluZyhpdGVtLmxvY1RleHQpIDogaXRlbS52YWx1ZX1cbiAgICAgICAgPC9zcGFuPlxuICAgICAgKTtcbiAgICB9XG5cbiAgICB2YXIgc3R5bGU6IGFueSA9IHsgb2JqZWN0Rml0OiB0aGlzLnF1ZXN0aW9uLmltYWdlRml0IH07XG5cbiAgICB2YXIgY29udHJvbDogSlNYLkVsZW1lbnQgfCBudWxsID0gbnVsbDtcbiAgICBpZiAoaXRlbS5sb2NJbWFnZUxpbmsucmVuZGVyZWRIdG1sICYmIHRoaXMucXVlc3Rpb24uY29udGVudE1vZGUgPT09IFwiaW1hZ2VcIikge1xuICAgICAgY29udHJvbCA9IChcbiAgICAgICAgPGltZ1xuICAgICAgICAgIGNsYXNzTmFtZT17Y3NzQ2xhc3Nlcy5pbWFnZX1cbiAgICAgICAgICBzcmM9e2l0ZW0ubG9jSW1hZ2VMaW5rLnJlbmRlcmVkSHRtbH1cbiAgICAgICAgICB3aWR0aD17IHRoaXMucXVlc3Rpb24ucmVuZGVyZWRJbWFnZVdpZHRoIH1cbiAgICAgICAgICBoZWlnaHQ9eyB0aGlzLnF1ZXN0aW9uLnJlbmRlcmVkSW1hZ2VIZWlnaHQgfVxuICAgICAgICAgIGFsdD17aXRlbS5sb2NUZXh0LnJlbmRlcmVkSHRtbH1cbiAgICAgICAgICBzdHlsZT17c3R5bGV9XG4gICAgICAgICAgb25Mb2FkPXsoZXZlbnQ6IGFueSkgPT4geyB0aGlzLnF1ZXN0aW9uW1wib25Db250ZW50TG9hZGVkXCJdKGl0ZW0sIGV2ZW50Lm5hdGl2ZUV2ZW50KTsgfX1cbiAgICAgICAgLz5cbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChpdGVtLmxvY0ltYWdlTGluay5yZW5kZXJlZEh0bWwgJiYgdGhpcy5xdWVzdGlvbi5jb250ZW50TW9kZSA9PT0gXCJ2aWRlb1wiKSB7XG4gICAgICBjb250cm9sID0gKFxuICAgICAgICA8dmlkZW8gY29udHJvbHNcbiAgICAgICAgICBjbGFzc05hbWU9e2Nzc0NsYXNzZXMuaW1hZ2V9XG4gICAgICAgICAgc3JjPXtpdGVtLmxvY0ltYWdlTGluay5yZW5kZXJlZEh0bWx9XG4gICAgICAgICAgd2lkdGg9eyB0aGlzLnF1ZXN0aW9uLnJlbmRlcmVkSW1hZ2VXaWR0aCB9XG4gICAgICAgICAgaGVpZ2h0PXsgdGhpcy5xdWVzdGlvbi5yZW5kZXJlZEltYWdlSGVpZ2h0IH1cbiAgICAgICAgICBzdHlsZT17c3R5bGV9XG4gICAgICAgICAgb25Mb2FkZWRNZXRhZGF0YT17KGV2ZW50OiBhbnkpID0+IHsgdGhpcy5xdWVzdGlvbltcIm9uQ29udGVudExvYWRlZFwiXShpdGVtLCBldmVudC5uYXRpdmVFdmVudCk7IH19XG4gICAgICAgID48L3ZpZGVvPlxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKCFpdGVtLmxvY0ltYWdlTGluay5yZW5kZXJlZEh0bWwpIHtcbiAgICAgIGxldCBzdHlsZTogYW55ID0ge1xuICAgICAgICB3aWR0aDogdGhpcy5xdWVzdGlvbi5yZW5kZXJlZEltYWdlV2lkdGgsXG4gICAgICAgIGhlaWdodDogdGhpcy5xdWVzdGlvbi5yZW5kZXJlZEltYWdlSGVpZ2h0LFxuICAgICAgICBvYmplY3RGaXQ6IHRoaXMucXVlc3Rpb24uaW1hZ2VGaXRcbiAgICAgIH07XG4gICAgICBjb250cm9sID0gKFxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3NOYW1lPXtjc3NDbGFzc2VzLml0ZW1Ob0ltYWdlfVxuICAgICAgICAgIHN0eWxlPXtzdHlsZX1cbiAgICAgICAgPlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNzc0NsYXNzZXMuaXRlbU5vSW1hZ2VTdmdJY29uID9cbiAgICAgICAgICAgICAgPHN2ZyBjbGFzc05hbWU9e2Nzc0NsYXNzZXMuaXRlbU5vSW1hZ2VTdmdJY29ufT5cbiAgICAgICAgICAgICAgICA8dXNlIHhsaW5rSHJlZj17Y3NzQ2xhc3Nlcy5pdGVtTm9JbWFnZVN2Z0ljb25JZH0+PC91c2U+XG4gICAgICAgICAgICAgIDwvc3ZnPjpcbiAgICAgICAgICAgICAgbnVsbFxuICAgICAgICAgIH1cbiAgICAgICAgPC9kaXY+XG4gICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0IHJlbmRlcmVkSXRlbSA9IChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtpdGVtQ2xhc3N9PlxuICAgICAgICA8bGFiZWwgY2xhc3NOYW1lPXtjc3NDbGFzc2VzLmxhYmVsfT5cbiAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgIGNsYXNzTmFtZT17Y3NzQ2xhc3Nlcy5pdGVtQ29udHJvbH1cbiAgICAgICAgICAgIGlkPXt0aGlzLnF1ZXN0aW9uLmdldEl0ZW1JZChpdGVtKX1cbiAgICAgICAgICAgIHR5cGU9e3RoaXMucXVlc3Rpb24uaW5wdXRUeXBlfVxuICAgICAgICAgICAgbmFtZT17dGhpcy5xdWVzdGlvbi5xdWVzdGlvbk5hbWV9XG4gICAgICAgICAgICBjaGVja2VkPXtpc0NoZWNrZWR9XG4gICAgICAgICAgICB2YWx1ZT17aXRlbS52YWx1ZX1cbiAgICAgICAgICAgIGRpc2FibGVkPXshdGhpcy5xdWVzdGlvbi5nZXRJdGVtRW5hYmxlZChpdGVtKX1cbiAgICAgICAgICAgIG9uQ2hhbmdlPXt0aGlzLmhhbmRsZU9uQ2hhbmdlfVxuICAgICAgICAgICAgYXJpYS1yZXF1aXJlZD17dGhpcy5xdWVzdGlvbi5hcmlhUmVxdWlyZWR9XG4gICAgICAgICAgICBhcmlhLWxhYmVsPXt0aGlzLnF1ZXN0aW9uLmFyaWFMYWJlbH1cbiAgICAgICAgICAgIGFyaWEtaW52YWxpZD17dGhpcy5xdWVzdGlvbi5hcmlhSW52YWxpZH1cbiAgICAgICAgICAgIGFyaWEtZGVzY3JpYmVkYnk9e3RoaXMucXVlc3Rpb24uYXJpYURlc2NyaWJlZEJ5fVxuICAgICAgICAgIC8+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3RoaXMucXVlc3Rpb24uY3NzQ2xhc3Nlcy5pdGVtRGVjb3JhdG9yfT5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXt0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMuaW1hZ2VDb250YWluZXJ9PlxuICAgICAgICAgICAgICB7Y29udHJvbH1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAge3RleHR9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbGFiZWw+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICAgIHJldHVybiByZW5kZXJlZEl0ZW07XG4gIH1cbn1cblxuUmVhY3RRdWVzdGlvbkZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJRdWVzdGlvbihcImltYWdlcGlja2VyXCIsIChwcm9wcykgPT4ge1xuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTdXJ2ZXlRdWVzdGlvbkltYWdlUGlja2VyLCBwcm9wcyk7XG59KTtcbiIsImltcG9ydCAqIGFzIFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgUGFnZU1vZGVsLCBQYW5lbE1vZGVsQmFzZSB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgU3VydmV5RWxlbWVudEJhc2UgfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uX2VsZW1lbnRcIjtcbmltcG9ydCB7IFN1cnZleVBhbmVsQmFzZSB9IGZyb20gXCIuL3BhbmVsLWJhc2VcIjtcbmltcG9ydCB7IFRpdGxlRWxlbWVudCB9IGZyb20gXCIuL2NvbXBvbmVudHMvdGl0bGUvdGl0bGUtZWxlbWVudFwiO1xuXG5leHBvcnQgY2xhc3MgU3VydmV5UGFnZSBleHRlbmRzIFN1cnZleVBhbmVsQmFzZSB7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldFBhbmVsQmFzZSgpOiBQYW5lbE1vZGVsQmFzZSB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMucGFnZTtcbiAgfVxuICBwdWJsaWMgZ2V0IHBhZ2UoKTogUGFnZU1vZGVsIHtcbiAgICByZXR1cm4gdGhpcy5wYW5lbEJhc2UgYXMgUGFnZU1vZGVsO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICB2YXIgdGl0bGUgPSB0aGlzLnJlbmRlclRpdGxlKCk7XG4gICAgdmFyIGRlc2NyaXB0aW9uID0gdGhpcy5yZW5kZXJEZXNjcmlwdGlvbigpO1xuICAgIHZhciByb3dzID0gdGhpcy5yZW5kZXJSb3dzKHRoaXMucGFuZWxCYXNlLmNzc0NsYXNzZXMpO1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IHJlZj17dGhpcy5yb290UmVmfSBjbGFzc05hbWU9e3RoaXMucGFnZS5jc3NSb290fT5cbiAgICAgICAge3RpdGxlfVxuICAgICAgICB7ZGVzY3JpcHRpb259XG4gICAgICAgIHtyb3dzfVxuICAgICAgPC9kaXYgPlxuICAgICk7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlclRpdGxlKCk6IEpTWC5FbGVtZW50IHtcbiAgICByZXR1cm4gPFRpdGxlRWxlbWVudCBlbGVtZW50PXt0aGlzLnBhZ2V9PjwvVGl0bGVFbGVtZW50PjtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyRGVzY3JpcHRpb24oKTogSlNYLkVsZW1lbnQgfCBudWxsIHtcbiAgICBpZiAoIXRoaXMucGFnZS5fc2hvd0Rlc2NyaXB0aW9uKSByZXR1cm4gbnVsbDtcbiAgICB2YXIgdGV4dCA9IFN1cnZleUVsZW1lbnRCYXNlLnJlbmRlckxvY1N0cmluZyh0aGlzLnBhZ2UubG9jRGVzY3JpcHRpb24pO1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT17dGhpcy5wYW5lbEJhc2UuY3NzQ2xhc3Nlcy5wYWdlLmRlc2NyaXB0aW9ufT57dGV4dH08L2Rpdj5cbiAgICApO1xuICB9XG59XG4iLCJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IElTdXJ2ZXlDcmVhdG9yIH0gZnJvbSBcIi4vcmVhY3RxdWVzdGlvblwiO1xuaW1wb3J0IHsgQmFzZSwgU3VydmV5TW9kZWwsIFF1ZXN0aW9uUm93TW9kZWwsIFBhbmVsTW9kZWwsIFBhbmVsTW9kZWxCYXNlIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBTdXJ2ZXlFbGVtZW50QmFzZSB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fZWxlbWVudFwiO1xuaW1wb3J0IHsgU3VydmV5Um93IH0gZnJvbSBcIi4vcm93XCI7XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlQYW5lbEJhc2UgZXh0ZW5kcyBTdXJ2ZXlFbGVtZW50QmFzZTxhbnksIGFueT4ge1xuICBwcm90ZWN0ZWQgcm9vdFJlZjogUmVhY3QuUmVmT2JqZWN0PEhUTUxEaXZFbGVtZW50PjtcbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLnJvb3RSZWYgPSBSZWFjdC5jcmVhdGVSZWYoKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0U3RhdGVFbGVtZW50KCk6IEJhc2Uge1xuICAgIHJldHVybiB0aGlzLnBhbmVsQmFzZTtcbiAgfVxuICBwcm90ZWN0ZWQgY2FuVXNlUHJvcEluU3RhdGUoa2V5OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4ga2V5ICE9PSBcImVsZW1lbnRzXCIgJiYgc3VwZXIuY2FuVXNlUHJvcEluU3RhdGUoa2V5KTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IHN1cnZleSgpOiBTdXJ2ZXlNb2RlbCB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLmdldFN1cnZleSgpO1xuICB9XG4gIHByb3RlY3RlZCBnZXQgY3JlYXRvcigpOiBJU3VydmV5Q3JlYXRvciB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuY3JlYXRvcjtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IGNzcygpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLmdldENzcygpO1xuICB9XG4gIHB1YmxpYyBnZXQgcGFuZWxCYXNlKCk6IFBhbmVsTW9kZWxCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQYW5lbEJhc2UoKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0UGFuZWxCYXNlKCk6IFBhbmVsTW9kZWxCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5lbGVtZW50IHx8IHRoaXMucHJvcHMucXVlc3Rpb247XG4gIH1cbiAgcHJvdGVjdGVkIGdldFN1cnZleSgpOiBTdXJ2ZXlNb2RlbCB8IG51bGwge1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLnByb3BzLnN1cnZleSB8fCAoISF0aGlzLnBhbmVsQmFzZSA/IHRoaXMucGFuZWxCYXNlLnN1cnZleSA6IG51bGwpXG4gICAgKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0Q3NzKCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuY3NzO1xuICB9XG4gIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIHN1cGVyLmNvbXBvbmVudERpZE1vdW50KCk7XG4gICAgdGhpcy5kb0FmdGVyUmVuZGVyKCk7XG4gIH1cbiAgY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgc3VwZXIuY29tcG9uZW50V2lsbFVubW91bnQoKTtcbiAgICB2YXIgZWwgPSB0aGlzLnJvb3RSZWYuY3VycmVudDtcbiAgICBpZiAoISFlbCkge1xuICAgICAgZWwucmVtb3ZlQXR0cmlidXRlKFwiZGF0YS1yZW5kZXJlZFwiKTtcbiAgICB9XG4gIH1cbiAgY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wczogYW55LCBwcmV2U3RhdGU6IGFueSkge1xuICAgIHN1cGVyLmNvbXBvbmVudERpZFVwZGF0ZShwcmV2UHJvcHMsIHByZXZTdGF0ZSk7XG4gICAgaWYgKFxuICAgICAgISFwcmV2UHJvcHMucGFnZSAmJlxuICAgICAgISF0aGlzLnN1cnZleSAmJlxuICAgICAgISF0aGlzLnN1cnZleS5jdXJyZW50UGFnZSAmJlxuICAgICAgcHJldlByb3BzLnBhZ2UubmFtZSA9PT0gdGhpcy5zdXJ2ZXkuY3VycmVudFBhZ2UubmFtZVxuICAgIClcbiAgICAgIHJldHVybjtcbiAgICB0aGlzLmRvQWZ0ZXJSZW5kZXIoKTtcbiAgfVxuICBwcml2YXRlIGRvQWZ0ZXJSZW5kZXIoKSB7XG4gICAgdmFyIGVsID0gdGhpcy5yb290UmVmLmN1cnJlbnQ7XG4gICAgaWYgKGVsICYmIHRoaXMuc3VydmV5KSB7XG4gICAgICBpZiAodGhpcy5wYW5lbEJhc2UuaXNQYW5lbCkge1xuICAgICAgICB0aGlzLnN1cnZleS5hZnRlclJlbmRlclBhbmVsKHRoaXMucGFuZWxCYXNlIGFzIFBhbmVsTW9kZWwsIGVsKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuc3VydmV5LmFmdGVyUmVuZGVyUGFnZShlbCk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHByb3RlY3RlZCBjYW5SZW5kZXIoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgIHN1cGVyLmNhblJlbmRlcigpICYmICEhdGhpcy5zdXJ2ZXkgJiYgISF0aGlzLnBhbmVsQmFzZVxuICAgICAgJiYgdGhpcy5wYW5lbEJhc2UuaXNWaXNpYmxlICYmICEhdGhpcy5wYW5lbEJhc2Uuc3VydmV5XG4gICAgKTtcbiAgfVxuICBwcml2YXRlIHJlbmRlcmVkUm93c0NhY2hlOiBhbnkgPSB7fTtcbiAgcHJvdGVjdGVkIHJlbmRlclJvd3MoY3NzOiBhbnkpOiBBcnJheTxKU1guRWxlbWVudD4ge1xuICAgIGlmICh0aGlzLmNoYW5nZWRTdGF0ZVByb3BOYW1lICE9PSBcInJvd3NcIikge1xuICAgICAgdGhpcy5yZW5kZXJlZFJvd3NDYWNoZSA9IHt9O1xuICAgIH1cbiAgICB2YXIgcm93czpBcnJheTxKU1guRWxlbWVudD4gPSBbXTtcbiAgICB2YXIgcXVlc3Rpb25Sb3dzID0gdGhpcy5wYW5lbEJhc2Uucm93cztcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHF1ZXN0aW9uUm93cy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHJvdyA9IHRoaXMucmVuZGVyZWRSb3dzQ2FjaGVbcXVlc3Rpb25Sb3dzW2ldLmlkXTtcbiAgICAgIGlmICghcm93KSB7XG4gICAgICAgIHJvdyA9IHRoaXMuY3JlYXRlUm93KHF1ZXN0aW9uUm93c1tpXSwgY3NzKTtcbiAgICAgICAgdGhpcy5yZW5kZXJlZFJvd3NDYWNoZVtxdWVzdGlvblJvd3NbaV0uaWRdID0gcm93O1xuICAgICAgfVxuICAgICAgcm93cy5wdXNoKHJvdyk7XG4gICAgfVxuICAgIHJldHVybiByb3dzO1xuICB9XG4gIHByb3RlY3RlZCBjcmVhdGVSb3cocm93OiBRdWVzdGlvblJvd01vZGVsLCBjc3M6IGFueSk6IEpTWC5FbGVtZW50IHtcbiAgICByZXR1cm4gKFxuICAgICAgPFN1cnZleVJvd1xuICAgICAgICBrZXk9e3Jvdy5pZH1cbiAgICAgICAgcm93PXtyb3d9XG4gICAgICAgIHN1cnZleT17dGhpcy5zdXJ2ZXl9XG4gICAgICAgIGNyZWF0b3I9e3RoaXMuY3JlYXRvcn1cbiAgICAgICAgY3NzPXtjc3N9XG4gICAgICAvPlxuICAgICk7XG4gIH1cbn1cbiIsImltcG9ydCAqIGFzIFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgU3VydmV5RWxlbWVudEVycm9ycyB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25cIjtcbmltcG9ydCB7IFN1cnZleUVsZW1lbnRCYXNlIH0gZnJvbSBcIi4vcmVhY3RxdWVzdGlvbl9lbGVtZW50XCI7XG5pbXBvcnQgeyBSZWFjdEVsZW1lbnRGYWN0b3J5IH0gZnJvbSBcIi4vZWxlbWVudC1mYWN0b3J5XCI7XG5cbmltcG9ydCB7IFN1cnZleVBhbmVsQmFzZSB9IGZyb20gXCIuL3BhbmVsLWJhc2VcIjtcbmltcG9ydCB7IFBhbmVsTW9kZWwsIGRvS2V5MkNsaWNrVXAsIFN1cnZleU1vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBSZWFjdFN1cnZleUVsZW1lbnRzV3JhcHBlciB9IGZyb20gXCIuL3JlYWN0c3VydmV5bW9kZWxcIjtcbmltcG9ydCB7IFN1cnZleUFjdGlvbkJhciB9IGZyb20gXCIuL2NvbXBvbmVudHMvYWN0aW9uLWJhci9hY3Rpb24tYmFyXCI7XG5pbXBvcnQgeyBUaXRsZUVsZW1lbnQgfSBmcm9tIFwiLi9jb21wb25lbnRzL3RpdGxlL3RpdGxlLWVsZW1lbnRcIjtcbmltcG9ydCB7IFN1cnZleUVsZW1lbnRIZWFkZXIgfSBmcm9tIFwiLi9lbGVtZW50LWhlYWRlclwiO1xuXG5leHBvcnQgY2xhc3MgU3VydmV5UGFuZWwgZXh0ZW5kcyBTdXJ2ZXlQYW5lbEJhc2Uge1xuICBwcml2YXRlIGhhc0JlZW5FeHBhbmRlZDogYm9vbGVhbiA9IGZhbHNlO1xuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICB9XG4gIHB1YmxpYyBnZXQgcGFuZWwoKTogUGFuZWxNb2RlbCB7XG4gICAgcmV0dXJuIHRoaXMucGFuZWxCYXNlIGFzIFBhbmVsTW9kZWw7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIGNvbnN0IGhlYWRlciA9IHRoaXMucmVuZGVySGVhZGVyKCk7XG4gICAgY29uc3QgZXJyb3JzID0gKFxuICAgICAgPFN1cnZleUVsZW1lbnRFcnJvcnNcbiAgICAgICAgZWxlbWVudD17dGhpcy5wYW5lbEJhc2V9XG4gICAgICAgIGNzc0NsYXNzZXM9e3RoaXMucGFuZWxCYXNlLmNzc0NsYXNzZXN9XG4gICAgICAgIGNyZWF0b3I9e3RoaXMuY3JlYXRvcn1cbiAgICAgIC8+XG4gICAgKTtcbiAgICBjb25zdCBzdHlsZSA9IHtcbiAgICAgIHBhZGRpbmdMZWZ0OiB0aGlzLnBhbmVsLmlubmVyUGFkZGluZ0xlZnQsXG4gICAgICBkaXNwbGF5OiAhdGhpcy5wYW5lbC5pc0NvbGxhcHNlZCA/IHVuZGVmaW5lZCA6IFwibm9uZVwiLFxuICAgIH07XG4gICAgbGV0IGNvbnRlbnQ6IEpTWC5FbGVtZW50IHwgbnVsbCA9IG51bGw7XG4gICAgaWYgKCF0aGlzLnBhbmVsLmlzQ29sbGFwc2VkIHx8IHRoaXMuaGFzQmVlbkV4cGFuZGVkKSB7XG4gICAgICB0aGlzLmhhc0JlZW5FeHBhbmRlZCA9IHRydWU7XG4gICAgICBjb25zdCByb3dzOiBKU1guRWxlbWVudFtdID0gdGhpcy5yZW5kZXJSb3dzKHRoaXMucGFuZWxCYXNlLmNzc0NsYXNzZXMpO1xuICAgICAgY29uc3QgY2xhc3NOYW1lOiBzdHJpbmcgPSB0aGlzLnBhbmVsQmFzZS5jc3NDbGFzc2VzLnBhbmVsLmNvbnRlbnQ7XG4gICAgICBjb250ZW50ID0gdGhpcy5yZW5kZXJDb250ZW50KHN0eWxlLCByb3dzLCBjbGFzc05hbWUpO1xuICAgIH1cbiAgICByZXR1cm4gKFxuICAgICAgPGRpdlxuICAgICAgICByZWY9e3RoaXMucm9vdFJlZn1cbiAgICAgICAgY2xhc3NOYW1lPXsodGhpcy5wYW5lbEJhc2UgYXMgUGFuZWxNb2RlbCkuZ2V0Q29udGFpbmVyQ3NzKCl9XG4gICAgICAgIG9uRm9jdXM9eyh0aGlzLnBhbmVsQmFzZSBhcyBQYW5lbE1vZGVsKS5mb2N1c0lufVxuICAgICAgICBpZD17dGhpcy5wYW5lbEJhc2UuaWR9XG5cbiAgICAgID5cbiAgICAgICAge2hlYWRlcn1cbiAgICAgICAge2Vycm9yc31cbiAgICAgICAge2NvbnRlbnR9XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJIZWFkZXIoKSB7XG4gICAgaWYgKCF0aGlzLnBhbmVsLmhhc1RpdGxlICYmICF0aGlzLnBhbmVsLmhhc0Rlc2NyaXB0aW9uKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIDxTdXJ2ZXlFbGVtZW50SGVhZGVyIGVsZW1lbnQ9e3RoaXMucGFuZWx9PjwvU3VydmV5RWxlbWVudEhlYWRlcj47XG4gIH1cbiAgcHJvdGVjdGVkIHdyYXBFbGVtZW50KGVsZW1lbnQ6IEpTWC5FbGVtZW50KTogSlNYLkVsZW1lbnQge1xuICAgIGNvbnN0IHN1cnZleTogU3VydmV5TW9kZWwgPSB0aGlzLnBhbmVsLnN1cnZleSBhcyBTdXJ2ZXlNb2RlbDtcbiAgICBsZXQgd3JhcHBlcjogSlNYLkVsZW1lbnQgfCBudWxsID0gbnVsbDtcbiAgICBpZiAoc3VydmV5KSB7XG4gICAgICB3cmFwcGVyID0gUmVhY3RTdXJ2ZXlFbGVtZW50c1dyYXBwZXIud3JhcEVsZW1lbnQoc3VydmV5LCBlbGVtZW50LCB0aGlzLnBhbmVsKTtcbiAgICB9XG4gICAgcmV0dXJuIHdyYXBwZXIgPz8gZWxlbWVudDtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyQ29udGVudChzdHlsZTogYW55LCByb3dzOiBKU1guRWxlbWVudFtdLCBjbGFzc05hbWU6IHN0cmluZyk6IEpTWC5FbGVtZW50IHtcbiAgICBjb25zdCBib3R0b206IEpTWC5FbGVtZW50IHwgbnVsbCA9IHRoaXMucmVuZGVyQm90dG9tKCk7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgc3R5bGU9e3N0eWxlfSBjbGFzc05hbWU9e2NsYXNzTmFtZX0gaWQ9e3RoaXMucGFuZWwuY29udGVudElkfT5cbiAgICAgICAge3Jvd3N9XG4gICAgICAgIHtib3R0b219XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJUaXRsZSgpOiBKU1guRWxlbWVudCB8IG51bGwge1xuICAgIGlmICghdGhpcy5wYW5lbEJhc2UudGl0bGUpIHJldHVybiBudWxsO1xuICAgIHJldHVybiA8VGl0bGVFbGVtZW50IGVsZW1lbnQ9e3RoaXMucGFuZWxCYXNlfT48L1RpdGxlRWxlbWVudD47XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckRlc2NyaXB0aW9uKCk6IEpTWC5FbGVtZW50IHwgbnVsbCB7XG4gICAgaWYgKCF0aGlzLnBhbmVsQmFzZS5kZXNjcmlwdGlvbikgcmV0dXJuIG51bGw7XG4gICAgdmFyIHRleHQgPSBTdXJ2ZXlFbGVtZW50QmFzZS5yZW5kZXJMb2NTdHJpbmcodGhpcy5wYW5lbEJhc2UubG9jRGVzY3JpcHRpb24pO1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT17dGhpcy5wYW5lbC5jc3NDbGFzc2VzLnBhbmVsLmRlc2NyaXB0aW9ufT57dGV4dH08L2Rpdj5cbiAgICApO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJCb3R0b20oKTogSlNYLkVsZW1lbnQgfCBudWxsIHtcbiAgICBjb25zdCBmb290ZXJUb29sYmFyID0gdGhpcy5wYW5lbC5nZXRGb290ZXJUb29sYmFyKCk7XG4gICAgaWYgKCFmb290ZXJUb29sYmFyLmhhc0FjdGlvbnMpIHJldHVybiBudWxsO1xuICAgIHJldHVybiA8U3VydmV5QWN0aW9uQmFyIG1vZGVsPXtmb290ZXJUb29sYmFyfT48L1N1cnZleUFjdGlvbkJhcj47XG4gIH1cbn1cblxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXCJwYW5lbFwiLCAocHJvcHMpID0+IHtcbiAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3VydmV5UGFuZWwsIHByb3BzKTtcbn0pO1xuIiwiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBRdWVzdGlvblJhdGluZ01vZGVsLCBSZW5kZXJlckZhY3RvcnkgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFN1cnZleVF1ZXN0aW9uRHJvcGRvd25CYXNlIH0gZnJvbSBcIi4vZHJvcGRvd24tYmFzZVwiO1xuaW1wb3J0IHsgUmVhY3RRdWVzdGlvbkZhY3RvcnkgfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uX2ZhY3RvcnlcIjtcblxuZXhwb3J0IGNsYXNzIFN1cnZleVF1ZXN0aW9uUmF0aW5nRHJvcGRvd24gZXh0ZW5kcyBTdXJ2ZXlRdWVzdGlvbkRyb3Bkb3duQmFzZTxRdWVzdGlvblJhdGluZ01vZGVsPiB7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIHZhciBjc3NDbGFzc2VzID0gdGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzO1xuICAgIHZhciBzZWxlY3QgPSB0aGlzLnJlbmRlclNlbGVjdChjc3NDbGFzc2VzKTtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9e3RoaXMucXVlc3Rpb24uY3NzQ2xhc3Nlcy5yb290RHJvcGRvd259PlxuICAgICAgICB7c2VsZWN0fVxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxufVxuUmVhY3RRdWVzdGlvbkZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJRdWVzdGlvbihcbiAgXCJzdi1yYXRpbmctZHJvcGRvd25cIixcbiAgKHByb3BzKSA9PiB7XG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3VydmV5UXVlc3Rpb25SYXRpbmdEcm9wZG93biwgcHJvcHMpO1xuICB9XG4pO1xuXG5SZW5kZXJlckZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJSZW5kZXJlcihcbiAgXCJyYXRpbmdcIixcbiAgXCJkcm9wZG93blwiLFxuICBcInN2LXJhdGluZy1kcm9wZG93blwiXG4pO1xuIiwiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBTdXJ2ZXkgfSBmcm9tIFwiLi9yZWFjdFN1cnZleVwiO1xuaW1wb3J0IHsgU3VydmV5RWxlbWVudEJhc2UgfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uX2VsZW1lbnRcIjtcbmltcG9ydCB7IEJhc2UsIFBvcHVwU3VydmV5TW9kZWwgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcblxuZXhwb3J0IGNsYXNzIFBvcHVwU3VydmV5IGV4dGVuZHMgU3VydmV5IHtcbiAgcHJvdGVjdGVkIHBvcHVwOiBQb3B1cFN1cnZleU1vZGVsO1xuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMuaGFuZGxlT25FeHBhbmRlZCA9IHRoaXMuaGFuZGxlT25FeHBhbmRlZC5iaW5kKHRoaXMpO1xuICB9XG4gIHByb3RlY3RlZCBnZXRTdGF0ZUVsZW1lbnRzKCk6IEFycmF5PEJhc2U+IHtcbiAgICByZXR1cm4gW3RoaXMucG9wdXAsIHRoaXMucG9wdXAuc3VydmV5XTtcbiAgfVxuICBoYW5kbGVPbkV4cGFuZGVkKGV2ZW50OiBhbnkpIHtcbiAgICB0aGlzLnBvcHVwLmNoYW5nZUV4cGFuZENvbGxhcHNlKCk7XG4gIH1cbiAgcHJvdGVjdGVkIGNhblJlbmRlcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gc3VwZXIuY2FuUmVuZGVyKCkgJiYgdGhpcy5wb3B1cC5pc1Nob3dpbmc7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIHZhciBoZWFkZXIgPSB0aGlzLnJlbmRlcldpbmRvd0hlYWRlcigpO1xuICAgIHZhciBib2R5ID0gdGhpcy5wb3B1cC5pc0V4cGFuZGVkID8gdGhpcy5yZW5kZXJCb2R5KCkgOiBudWxsO1xuICAgIGxldCBzdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHtcbiAgICAgIHBvc2l0aW9uOiBcImZpeGVkXCIsXG4gICAgICBib3R0b206IDMsXG4gICAgICByaWdodDogMTBcbiAgICB9O1xuICAgIGlmICghIXRoaXMucG9wdXAucmVuZGVyZWRXaWR0aCkge1xuICAgICAgc3R5bGUud2lkdGggPSB0aGlzLnBvcHVwLnJlbmRlcmVkV2lkdGg7XG4gICAgICBzdHlsZS5tYXhXaWR0aCA9IHRoaXMucG9wdXAucmVuZGVyZWRXaWR0aDtcbiAgICB9XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPXt0aGlzLnBvcHVwLmNzc1Jvb3R9IHN0eWxlPXtzdHlsZX0+XG4gICAgICAgIHtoZWFkZXJ9XG4gICAgICAgIHtib2R5fVxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyV2luZG93SGVhZGVyKCk6IEpTWC5FbGVtZW50IHtcbiAgICB2YXIgc3R5bGVBID0geyB3aWR0aDogXCIxMDAlXCIsIGN1cnNvcjogXCJwb2ludGVyXCIgfTtcbiAgICB2YXIgc3R5bGVUaXRsZSA9IHsgcGFkZGluZ1JpZ2h0OiBcIjEwcHhcIiB9O1xuICAgIHZhciBnbHlwaENsYXNzTmFtZSA9IHRoaXMucG9wdXAuY3NzQnV0dG9uO1xuICAgIGdseXBoQ2xhc3NOYW1lID0gXCJnbHlwaGljb24gcHVsbC1yaWdodCBcIiArIGdseXBoQ2xhc3NOYW1lO1xuICAgIHZhciB0aXRsZSA9IFN1cnZleUVsZW1lbnRCYXNlLnJlbmRlckxvY1N0cmluZyh0aGlzLnN1cnZleS5sb2NUaXRsZSk7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPXt0aGlzLnBvcHVwLmNzc0hlYWRlclJvb3R9PlxuICAgICAgICA8c3BhbiBvbkNsaWNrPXt0aGlzLmhhbmRsZU9uRXhwYW5kZWR9IHN0eWxlPXtzdHlsZUF9PlxuICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT17dGhpcy5wb3B1cC5jc3NIZWFkZXJUaXRsZX0gc3R5bGU9e3N0eWxlVGl0bGV9PlxuICAgICAgICAgICAge3RpdGxlfVxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9e2dseXBoQ2xhc3NOYW1lfSBhcmlhLWhpZGRlbj1cInRydWVcIiAvPlxuICAgICAgICA8L3NwYW4+XG4gICAgICAgIHt0aGlzLnBvcHVwLmlzRXhwYW5kZWQgPyAoXG4gICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgIG9uQ2xpY2s9e3RoaXMuaGFuZGxlT25FeHBhbmRlZH1cbiAgICAgICAgICAgIHN0eWxlPXt7IGZsb2F0OiBcInJpZ2h0XCIsIGN1cnNvcjogXCJwb2ludGVyXCIgfX1cbiAgICAgICAgICA+XG4gICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9e3RoaXMucG9wdXAuY3NzSGVhZGVyVGl0bGV9IHN0eWxlPXtzdHlsZVRpdGxlfT5cbiAgICAgICAgICAgICAgWFxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgKSA6IG51bGx9XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJCb2R5KCk6IEpTWC5FbGVtZW50IHtcbiAgICByZXR1cm4gPGRpdiBjbGFzc05hbWU9e3RoaXMucG9wdXAuY3NzQm9keX0+e3RoaXMuZG9SZW5kZXIoKX08L2Rpdj47XG4gIH1cbiAgcHJvdGVjdGVkIGNyZWF0ZVN1cnZleShuZXdQcm9wczogYW55KSB7XG4gICAgaWYgKCFuZXdQcm9wcykgbmV3UHJvcHMgPSB7fTtcbiAgICBzdXBlci5jcmVhdGVTdXJ2ZXkobmV3UHJvcHMpO1xuICAgIHRoaXMucG9wdXAgPSBuZXcgUG9wdXBTdXJ2ZXlNb2RlbChudWxsLCB0aGlzLnN1cnZleSk7XG4gICAgaWYgKG5ld1Byb3BzLmNsb3NlT25Db21wbGV0ZVRpbWVvdXQpIHtcbiAgICAgIHRoaXMucG9wdXAuY2xvc2VPbkNvbXBsZXRlVGltZW91dCA9IG5ld1Byb3BzLmNsb3NlT25Db21wbGV0ZVRpbWVvdXQ7XG4gICAgfVxuICAgIHRoaXMucG9wdXAuaXNTaG93aW5nID0gdHJ1ZTtcbiAgICBpZiAoIXRoaXMucG9wdXAuaXNFeHBhbmRlZCAmJiAobmV3UHJvcHMuZXhwYW5kZWQgfHwgbmV3UHJvcHMuaXNFeHBhbmRlZCkpXG4gICAgICB0aGlzLnBvcHVwLmV4cGFuZCgpO1xuICB9XG59XG4vKipcbiAqIE9ic29sZXRlLiBQbGVhc2UgdXNlIFBvcHVwU3VydmV5XG4gKi9cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlXaW5kb3cgZXh0ZW5kcyBQb3B1cFN1cnZleSB7fVxuIiwiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBCYXNlLCBRdWVzdGlvbiwgUGFnZU1vZGVsLCBTdXJ2ZXlFcnJvciwgU3R5bGVzTWFuYWdlciwgc3VydmV5Q3NzLCBIZWxwZXJzLCBkb0tleTJDbGlja1VwLCBTdmdSZWdpc3RyeSwgU3VydmV5TW9kZWwsIGRvS2V5MkNsaWNrQmx1ciwgZG9LZXkyQ2xpY2tEb3duLCBJQXR0YWNoS2V5MmNsaWNrT3B0aW9ucyB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgU3VydmV5UGFnZSB9IGZyb20gXCIuL3BhZ2VcIjtcbmltcG9ydCB7IElTdXJ2ZXlDcmVhdG9yIH0gZnJvbSBcIi4vcmVhY3RxdWVzdGlvblwiO1xuaW1wb3J0IHsgU3VydmV5RWxlbWVudEJhc2UgfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uX2VsZW1lbnRcIjtcbmltcG9ydCB7IFN1cnZleUxvY1N0cmluZ1ZpZXdlciB9IGZyb20gXCIuL3N0cmluZy12aWV3ZXJcIjtcbmltcG9ydCB7IFN1cnZleUhlYWRlciB9IGZyb20gXCIuL2NvbXBvbmVudHMvc3VydmV5LWhlYWRlci9zdXJ2ZXktaGVhZGVyXCI7XG5pbXBvcnQgeyBTdXJ2ZXlUaW1lclBhbmVsIH0gZnJvbSBcIi4vcmVhY3R0aW1lcnBhbmVsXCI7XG5pbXBvcnQgeyBSZWFjdFF1ZXN0aW9uRmFjdG9yeSB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fZmFjdG9yeVwiO1xuaW1wb3J0IHsgUmVhY3RFbGVtZW50RmFjdG9yeSB9IGZyb20gXCIuL2VsZW1lbnQtZmFjdG9yeVwiO1xuaW1wb3J0IHsgU3VydmV5QWN0aW9uQmFyIH0gZnJvbSBcIi4vY29tcG9uZW50cy9hY3Rpb24tYmFyL2FjdGlvbi1iYXJcIjtcbmltcG9ydCB7IEJyYW5kSW5mbyB9IGZyb20gXCIuL2NvbXBvbmVudHMvYnJhbmQtaW5mb1wiO1xuXG5leHBvcnQgY2xhc3MgU3VydmV5IGV4dGVuZHMgU3VydmV5RWxlbWVudEJhc2U8YW55LCBhbnk+XG4gIGltcGxlbWVudHMgSVN1cnZleUNyZWF0b3Ige1xuICBwcml2YXRlIHByZXZpb3VzSlNPTiA9IHt9O1xuICBwcml2YXRlIHJvb3RSZWY6IFJlYWN0LlJlZk9iamVjdDxIVE1MRGl2RWxlbWVudD47XG4gIHB1YmxpYyBzdGF0aWMgZ2V0IGNzc1R5cGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gc3VydmV5Q3NzLmN1cnJlbnRUeXBlO1xuICB9XG4gIHB1YmxpYyBzdGF0aWMgc2V0IGNzc1R5cGUodmFsdWU6IHN0cmluZykge1xuICAgIFN0eWxlc01hbmFnZXIuYXBwbHlUaGVtZSh2YWx1ZSk7XG4gIH1cbiAgcHJvdGVjdGVkIHN1cnZleTogU3VydmV5TW9kZWw7XG5cbiAgcHJpdmF0ZSByb290Tm9kZUlkOiBzdHJpbmc7IC8vIHJvb3QgZG9tIG5vZGUgSUQgYXR0clxuICBwcml2YXRlIHJvb3ROb2RlQ2xhc3NOYW1lOiBzdHJpbmc7IC8vIHJvb3QgZG9tIG5vZGUgY2xhc3NcblxuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMuaGFuZGxlVHJ5QWdhaW5DbGljayA9IHRoaXMuaGFuZGxlVHJ5QWdhaW5DbGljay5iaW5kKHRoaXMpO1xuICAgIHRoaXMuY3JlYXRlU3VydmV5KHByb3BzKTtcbiAgICB0aGlzLnVwZGF0ZVN1cnZleShwcm9wcywge30pO1xuICAgIHRoaXMucm9vdFJlZiA9IFJlYWN0LmNyZWF0ZVJlZigpO1xuICAgIHRoaXMucm9vdE5vZGVJZCA9IHByb3BzLmlkIHx8IG51bGw7XG4gICAgdGhpcy5yb290Tm9kZUNsYXNzTmFtZSA9IHByb3BzLmNsYXNzTmFtZSB8fCBcIlwiO1xuICB9XG4gIHByb3RlY3RlZCBnZXRTdGF0ZUVsZW1lbnQoKTogQmFzZSB7XG4gICAgcmV0dXJuIHRoaXMuc3VydmV5O1xuICB9XG4gIHNob3VsZENvbXBvbmVudFVwZGF0ZShuZXh0UHJvcHM6IGFueSwgbmV4dFN0YXRlOiBhbnkpIHtcbiAgICBpZiAoIXN1cGVyLnNob3VsZENvbXBvbmVudFVwZGF0ZShuZXh0UHJvcHMsIG5leHRTdGF0ZSkpIHJldHVybiBmYWxzZTtcbiAgICBpZiAodGhpcy5pc01vZGVsSlNPTkNoYW5nZWQobmV4dFByb3BzKSkge1xuICAgICAgdGhpcy5jcmVhdGVTdXJ2ZXkobmV4dFByb3BzKTtcbiAgICAgIHRoaXMudXBkYXRlU3VydmV5KG5leHRQcm9wcywge30pO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBjb21wb25lbnREaWRVcGRhdGUocHJldlByb3BzOiBhbnksIHByZXZTdGF0ZTogYW55KSB7XG4gICAgc3VwZXIuY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wcywgcHJldlN0YXRlKTtcbiAgICB0aGlzLnVwZGF0ZVN1cnZleSh0aGlzLnByb3BzLCBwcmV2UHJvcHMpO1xuICB9XG4gIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIHN1cGVyLmNvbXBvbmVudERpZE1vdW50KCk7XG4gICAgdmFyIGVsID0gdGhpcy5yb290UmVmLmN1cnJlbnQ7XG4gICAgaWYgKGVsICYmIHRoaXMuc3VydmV5KSB0aGlzLnN1cnZleS5hZnRlclJlbmRlclN1cnZleShlbCk7XG4gICAgaWYgKHRoaXMuc3VydmV5KSB7XG4gICAgICB0aGlzLnN1cnZleS5zdGFydFRpbWVyRnJvbVVJKCk7XG4gICAgfVxuICB9XG4gIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgIHN1cGVyLmNvbXBvbmVudFdpbGxVbm1vdW50KCk7XG4gICAgaWYgKHRoaXMuc3VydmV5KSB7XG4gICAgICB0aGlzLnN1cnZleS5zdG9wVGltZXIoKTtcbiAgICB9XG4gIH1cbiAgZG9SZW5kZXIoKTogSlNYLkVsZW1lbnQge1xuICAgIGlmKHRoaXMuc3VydmV5W1wibmVlZFJlbmRlckljb25zXCJdKSB7XG4gICAgICBTdmdSZWdpc3RyeS5yZW5kZXJJY29ucygpO1xuICAgIH1cbiAgICBsZXQgcmVuZGVyUmVzdWx0OiBKU1guRWxlbWVudCB8IG51bGw7XG4gICAgaWYgKHRoaXMuc3VydmV5LnN0YXRlID09IFwiY29tcGxldGVkXCIpIHtcbiAgICAgIHJlbmRlclJlc3VsdCA9IHRoaXMucmVuZGVyQ29tcGxldGVkKCk7XG4gICAgfSBlbHNlIGlmICh0aGlzLnN1cnZleS5zdGF0ZSA9PSBcImNvbXBsZXRlZGJlZm9yZVwiKSB7XG4gICAgICByZW5kZXJSZXN1bHQgPSB0aGlzLnJlbmRlckNvbXBsZXRlZEJlZm9yZSgpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5zdXJ2ZXkuc3RhdGUgPT0gXCJsb2FkaW5nXCIpIHtcbiAgICAgIHJlbmRlclJlc3VsdCA9IHRoaXMucmVuZGVyTG9hZGluZygpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZW5kZXJSZXN1bHQgPSB0aGlzLnJlbmRlclN1cnZleSgpO1xuICAgIH1cbiAgICBjb25zdCBoZWFkZXI6IEpTWC5FbGVtZW50ID0gPFN1cnZleUhlYWRlciBzdXJ2ZXk9e3RoaXMuc3VydmV5fT48L1N1cnZleUhlYWRlcj47XG4gICAgY29uc3Qgb25TdWJtaXQgPSBmdW5jdGlvbiAoZXZlbnQ6IFJlYWN0LkZvcm1FdmVudDxIVE1MRm9ybUVsZW1lbnQ+KSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH07XG4gICAgbGV0IGN1c3RvbUhlYWRlcjogSlNYLkVsZW1lbnQgfCBudWxsID0gPGRpdiBjbGFzc05hbWU9XCJzdl9jdXN0b21faGVhZGVyXCIgLz47XG4gICAgaWYgKHRoaXMuc3VydmV5Lmhhc0xvZ28pIHtcbiAgICAgIGN1c3RvbUhlYWRlciA9IG51bGw7XG4gICAgfVxuICAgIGNvbnN0IHJvb3RDc3MgPSB0aGlzLnN1cnZleS5nZXRSb290Q3NzKCk7XG4gICAgY29uc3QgY3NzQ2xhc3NlcyA9IHRoaXMucm9vdE5vZGVDbGFzc05hbWUgPyB0aGlzLnJvb3ROb2RlQ2xhc3NOYW1lICsgXCIgXCIgKyByb290Q3NzIDogcm9vdENzcztcblxuICAgIHZhciB0b3BQcm9ncmVzcyA9IHRoaXMuc3VydmV5LmlzU2hvd1Byb2dyZXNzQmFyT25Ub3AgJiYgIXRoaXMuc3VydmV5LmlzU2hvd1N0YXJ0aW5nUGFnZVxuICAgICAgPyB0aGlzLnJlbmRlclByb2dyZXNzKHRydWUpXG4gICAgICA6IG51bGw7XG5cbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBpZD17dGhpcy5yb290Tm9kZUlkfSByZWY9e3RoaXMucm9vdFJlZn0gY2xhc3NOYW1lPXtjc3NDbGFzc2VzfT5cbiAgICAgICAgPGZvcm0gb25TdWJtaXQ9e29uU3VibWl0fT5cbiAgICAgICAgICB7Y3VzdG9tSGVhZGVyfVxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXt0aGlzLmNzcy5jb250YWluZXJ9PlxuICAgICAgICAgICAge2hlYWRlcn1cbiAgICAgICAgICAgIHt0aGlzLnJlbmRlclRpbWVyUGFuZWwoXCJ0b3BcIil9XG4gICAgICAgICAgICB7dG9wUHJvZ3Jlc3N9XG4gICAgICAgICAgICB7cmVuZGVyUmVzdWx0fVxuICAgICAgICAgICAge3RoaXMucmVuZGVyVGltZXJQYW5lbChcImJvdHRvbVwiKX1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9mb3JtPlxuICAgICAgICB7IHRoaXMuc3VydmV5LnNob3dCcmFuZEluZm8gPyA8QnJhbmRJbmZvLz4gOiBudWxsIH1cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIHJldHVybiB0aGlzLmRvUmVuZGVyKCk7XG4gIH1cbiAgcHVibGljIGdldCBjc3MoKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5zdXJ2ZXkuY3NzO1xuICB9XG4gIHB1YmxpYyBzZXQgY3NzKHZhbHVlOiBhbnkpIHtcbiAgICB0aGlzLnN1cnZleS5jc3MgPSB2YWx1ZTtcbiAgfVxuICBoYW5kbGVUcnlBZ2FpbkNsaWNrKGV2ZW50OiBhbnkpIHtcbiAgICB0aGlzLnN1cnZleS5kb0NvbXBsZXRlKCk7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckNvbXBsZXRlZCgpOiBKU1guRWxlbWVudCB8IG51bGwge1xuICAgIGlmICghdGhpcy5zdXJ2ZXkuc2hvd0NvbXBsZXRlZFBhZ2UpIHJldHVybiBudWxsO1xuICAgIHZhciBjb21wbGV0ZWRTdGF0ZTogSlNYLkVsZW1lbnQgfCBudWxsID0gbnVsbDtcbiAgICBpZiAodGhpcy5zdXJ2ZXkuY29tcGxldGVkU3RhdGUpIHtcbiAgICAgIHZhciB0cnlBZ2FpbkJ1dHRvbjogSlNYLkVsZW1lbnQgfCBudWxsID0gbnVsbDtcbiAgICAgIGlmICh0aGlzLnN1cnZleS5jb21wbGV0ZWRTdGF0ZSA9PSBcImVycm9yXCIpIHtcbiAgICAgICAgdmFyIGJ0blRleHQgPSB0aGlzLnN1cnZleS5nZXRMb2NhbGl6YXRpb25TdHJpbmcoXCJzYXZlQWdhaW5CdXR0b25cIik7XG4gICAgICAgIHRyeUFnYWluQnV0dG9uID0gKFxuICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgdHlwZT17XCJidXR0b25cIn1cbiAgICAgICAgICAgIHZhbHVlPXtidG5UZXh0fVxuICAgICAgICAgICAgY2xhc3NOYW1lPXt0aGlzLmNzcy5zYXZlRGF0YS5zYXZlQWdhaW5CdXR0b259XG4gICAgICAgICAgICBvbkNsaWNrPXt0aGlzLmhhbmRsZVRyeUFnYWluQ2xpY2t9XG4gICAgICAgICAgLz5cbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHZhciBjc3MgPSB0aGlzLmNzcy5zYXZlRGF0YVt0aGlzLnN1cnZleS5jb21wbGV0ZWRTdGF0ZV07XG4gICAgICBjb21wbGV0ZWRTdGF0ZSA9IChcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3RoaXMuY3NzLnNhdmVEYXRhLnJvb3R9PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtjc3N9PlxuICAgICAgICAgICAgPHNwYW4+e3RoaXMuc3VydmV5LmNvbXBsZXRlZFN0YXRlVGV4dH08L3NwYW4+XG4gICAgICAgICAgICB7dHJ5QWdhaW5CdXR0b259XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgKTtcbiAgICB9XG4gICAgdmFyIGh0bWxWYWx1ZSA9IHsgX19odG1sOiB0aGlzLnN1cnZleS5wcm9jZXNzZWRDb21wbGV0ZWRIdG1sIH07XG4gICAgcmV0dXJuIChcbiAgICAgIDxSZWFjdC5GcmFnbWVudD5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGRhbmdlcm91c2x5U2V0SW5uZXJIVE1MPXtodG1sVmFsdWV9XG4gICAgICAgICAgY2xhc3NOYW1lPXt0aGlzLnN1cnZleS5jb21wbGV0ZWRDc3N9XG4gICAgICAgIC8+XG4gICAgICAgIHtjb21wbGV0ZWRTdGF0ZX1cbiAgICAgIDwvUmVhY3QuRnJhZ21lbnQ+XG4gICAgKTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyQ29tcGxldGVkQmVmb3JlKCk6IEpTWC5FbGVtZW50IHtcbiAgICB2YXIgaHRtbFZhbHVlID0geyBfX2h0bWw6IHRoaXMuc3VydmV5LnByb2Nlc3NlZENvbXBsZXRlZEJlZm9yZUh0bWwgfTtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBkYW5nZXJvdXNseVNldElubmVySFRNTD17aHRtbFZhbHVlfSBjbGFzc05hbWU9e3RoaXMuY3NzLmJvZHl9IC8+XG4gICAgKTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyTG9hZGluZygpOiBKU1guRWxlbWVudCB7XG4gICAgdmFyIGh0bWxWYWx1ZSA9IHsgX19odG1sOiB0aGlzLnN1cnZleS5wcm9jZXNzZWRMb2FkaW5nSHRtbCB9O1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGRhbmdlcm91c2x5U2V0SW5uZXJIVE1MPXtodG1sVmFsdWV9IGNsYXNzTmFtZT17dGhpcy5jc3MuYm9keX0gLz5cbiAgICApO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJTdXJ2ZXkoKTogSlNYLkVsZW1lbnQge1xuICAgIHZhciBhY3RpdmVQYWdlID0gdGhpcy5zdXJ2ZXkuYWN0aXZlUGFnZVxuICAgICAgPyB0aGlzLnJlbmRlclBhZ2UodGhpcy5zdXJ2ZXkuYWN0aXZlUGFnZSlcbiAgICAgIDogbnVsbDtcbiAgICBjb25zdCBpc1N0YXJpbmcgPSB0aGlzLnN1cnZleS5pc1Nob3dTdGFydGluZ1BhZ2U7XG4gICAgdmFyIHBhZ2VJZCA9IHRoaXMuc3VydmV5LmFjdGl2ZVBhZ2UgPyB0aGlzLnN1cnZleS5hY3RpdmVQYWdlLmlkIDogXCJcIjtcblxuICAgIHZhciBib3R0b21Qcm9ncmVzcyA9IHRoaXMuc3VydmV5LmlzU2hvd1Byb2dyZXNzQmFyT25Cb3R0b20gJiYgIWlzU3RhcmluZ1xuICAgICAgPyB0aGlzLnJlbmRlclByb2dyZXNzKGZhbHNlKVxuICAgICAgOiBudWxsO1xuICAgIGxldCBjbGFzc05hbWUgPSB0aGlzLnN1cnZleS5ib2R5Q3NzO1xuICAgIGlmICghYWN0aXZlUGFnZSkge1xuICAgICAgY2xhc3NOYW1lID0gdGhpcy5jc3MuYm9keUVtcHR5O1xuICAgICAgYWN0aXZlUGFnZSA9IHRoaXMucmVuZGVyRW1wdHlTdXJ2ZXkoKTtcbiAgICB9XG4gICAgY29uc3Qgc3R5bGU6IGFueSA9IHt9O1xuICAgIGlmKCEhdGhpcy5zdXJ2ZXkucmVuZGVyZWRXaWR0aCkge1xuICAgICAgc3R5bGUubWF4V2lkdGggPSB0aGlzLnN1cnZleS5yZW5kZXJlZFdpZHRoO1xuICAgIH1cbiAgICByZXR1cm4gKFxuICAgICAgPGRpdlxuICAgICAgICBpZD17cGFnZUlkfVxuICAgICAgICBjbGFzc05hbWU9e2NsYXNzTmFtZX1cbiAgICAgICAgc3R5bGU9e3N0eWxlfVxuICAgICAgPlxuICAgICAgICB7dGhpcy5yZW5kZXJOYXZpZ2F0aW9uKFwidG9wXCIpfVxuICAgICAgICB7YWN0aXZlUGFnZX1cbiAgICAgICAge2JvdHRvbVByb2dyZXNzfVxuICAgICAgICB7dGhpcy5yZW5kZXJOYXZpZ2F0aW9uKFwiYm90dG9tXCIpfVxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyVGltZXJQYW5lbChsb2NhdGlvbjogc3RyaW5nKSB7XG4gICAgaWYodGhpcy5zdXJ2ZXkuaXNTaG93U3RhcnRpbmdQYWdlKSByZXR1cm4gbnVsbDtcbiAgICBpZiAobG9jYXRpb24gPT09IFwidG9wXCIgJiYgIXRoaXMuc3VydmV5LmlzVGltZXJQYW5lbFNob3dpbmdPblRvcClcbiAgICAgIHJldHVybiBudWxsO1xuICAgIGlmIChsb2NhdGlvbiA9PT0gXCJib3R0b21cIiAmJiAhdGhpcy5zdXJ2ZXkuaXNUaW1lclBhbmVsU2hvd2luZ09uQm90dG9tKVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIDxTdXJ2ZXlUaW1lclBhbmVsIHRpbWVyTW9kZWw9e3RoaXMuc3VydmV5LnRpbWVyTW9kZWx9IC8+O1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJQYWdlKHBhZ2U6IFBhZ2VNb2RlbCk6IEpTWC5FbGVtZW50IHtcbiAgICByZXR1cm4gKFxuICAgICAgPFN1cnZleVBhZ2VcbiAgICAgICAgc3VydmV5PXt0aGlzLnN1cnZleX1cbiAgICAgICAgcGFnZT17cGFnZX1cbiAgICAgICAgY3NzPXt0aGlzLmNzc31cbiAgICAgICAgY3JlYXRvcj17dGhpc31cbiAgICAgIC8+XG4gICAgKTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyUHJvZ3Jlc3MoaXNUb3A6IGJvb2xlYW4pOiBKU1guRWxlbWVudCB8IG51bGwge1xuICAgIHJldHVybiBSZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLmNyZWF0ZUVsZW1lbnQoXG4gICAgICBcInN2LXByb2dyZXNzLVwiICsgdGhpcy5zdXJ2ZXkucHJvZ3Jlc3NCYXJUeXBlLnRvTG93ZXJDYXNlKCksXG4gICAgICB7IHN1cnZleTogdGhpcy5zdXJ2ZXksIGNzczogdGhpcy5jc3MsIGlzVG9wOiBpc1RvcCB9XG4gICAgKTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyTmF2aWdhdGlvbihuYXZQb3NpdGlvbjogc3RyaW5nKTogSlNYLkVsZW1lbnQgfCBudWxsIHtcbiAgICBpZiAoXG4gICAgICB0aGlzLnN1cnZleS5pc05hdmlnYXRpb25CdXR0b25zU2hvd2luZyAhPT0gXCJib3RoXCIgJiZcbiAgICAgICh0aGlzLnN1cnZleS5pc05hdmlnYXRpb25CdXR0b25zU2hvd2luZyA9PT0gXCJub25lXCIgfHxcbiAgICAgICAgdGhpcy5zdXJ2ZXkuaXNOYXZpZ2F0aW9uQnV0dG9uc1Nob3dpbmcgIT09IG5hdlBvc2l0aW9uKVxuICAgICkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiA8U3VydmV5QWN0aW9uQmFyIG1vZGVsPXt0aGlzLnN1cnZleS5uYXZpZ2F0aW9uQmFyfSAvPjtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyRW1wdHlTdXJ2ZXkoKTogSlNYLkVsZW1lbnQge1xuICAgIHJldHVybiA8c3Bhbj57dGhpcy5zdXJ2ZXkuZW1wdHlTdXJ2ZXlUZXh0fTwvc3Bhbj47XG4gIH1cbiAgcHJvdGVjdGVkIGNyZWF0ZVN1cnZleShuZXdQcm9wczogYW55KSB7XG4gICAgaWYgKCFuZXdQcm9wcykgbmV3UHJvcHMgPSB7fTtcbiAgICB0aGlzLnByZXZpb3VzSlNPTiA9IHt9O1xuICAgIGlmIChuZXdQcm9wcykge1xuICAgICAgaWYgKG5ld1Byb3BzLm1vZGVsKSB7XG4gICAgICAgIHRoaXMuc3VydmV5ID0gbmV3UHJvcHMubW9kZWw7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAobmV3UHJvcHMuanNvbikge1xuICAgICAgICAgIHRoaXMucHJldmlvdXNKU09OID0gbmV3UHJvcHMuanNvbjtcbiAgICAgICAgICB0aGlzLnN1cnZleSA9IG5ldyBTdXJ2ZXlNb2RlbChuZXdQcm9wcy5qc29uKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnN1cnZleSA9IG5ldyBTdXJ2ZXlNb2RlbCgpO1xuICAgIH1cbiAgICBpZiAoISFuZXdQcm9wcy5jc3MpIHtcbiAgICAgIHRoaXMuc3VydmV5LmNzcyA9IHRoaXMuY3NzO1xuICAgIH1cbiAgICB0aGlzLnNldFN1cnZleUV2ZW50cygpO1xuICB9XG4gIHByaXZhdGUgaXNNb2RlbEpTT05DaGFuZ2VkKG5ld1Byb3BzOiBhbnkpOiBib29sZWFuIHtcbiAgICBpZiAoISFuZXdQcm9wc1tcIm1vZGVsXCJdKSB7XG4gICAgICByZXR1cm4gdGhpcy5zdXJ2ZXkgIT09IG5ld1Byb3BzW1wibW9kZWxcIl07XG4gICAgfVxuICAgIGlmICghIW5ld1Byb3BzW1wianNvblwiXSkge1xuICAgICAgcmV0dXJuICFIZWxwZXJzLmlzVHdvVmFsdWVFcXVhbHMobmV3UHJvcHNbXCJqc29uXCJdLCB0aGlzLnByZXZpb3VzSlNPTik7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBwcm90ZWN0ZWQgdXBkYXRlU3VydmV5KG5ld1Byb3BzOiBhbnksIG9sZFByb3BzPzogYW55KSB7XG4gICAgaWYgKCFuZXdQcm9wcykgcmV0dXJuO1xuICAgIG9sZFByb3BzID0gb2xkUHJvcHMgfHwge307XG4gICAgZm9yICh2YXIga2V5IGluIG5ld1Byb3BzKSB7XG4gICAgICBpZiAoa2V5ID09IFwibW9kZWxcIiB8fCBrZXkgPT0gXCJjaGlsZHJlblwiIHx8IGtleSA9PSBcImpzb25cIikge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlmIChrZXkgPT0gXCJjc3NcIikge1xuICAgICAgICB0aGlzLnN1cnZleS5tZXJnZVZhbHVlcyhuZXdQcm9wcy5jc3MsIHRoaXMuc3VydmV5LmdldENzcygpKTtcbiAgICAgICAgdGhpcy5zdXJ2ZXlbXCJ1cGRhdGVOYXZpZ2F0aW9uQ3NzXCJdKCk7XG4gICAgICAgIHRoaXMuc3VydmV5W1widXBkYXRlRWxlbWVudENzc1wiXSgpO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlmIChuZXdQcm9wc1trZXldID09PSBvbGRQcm9wc1trZXldKSBjb250aW51ZTtcbiAgICAgIGlmIChrZXkuaW5kZXhPZihcIm9uXCIpID09IDAgJiYgdGhpcy5zdXJ2ZXlba2V5XSAmJiB0aGlzLnN1cnZleVtrZXldLmFkZCkge1xuICAgICAgICBpZiAoISFvbGRQcm9wc1trZXldKSB7XG4gICAgICAgICAgdGhpcy5zdXJ2ZXlba2V5XS5yZW1vdmUob2xkUHJvcHNba2V5XSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zdXJ2ZXlba2V5XS5hZGQobmV3UHJvcHNba2V5XSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnN1cnZleVtrZXldID0gbmV3UHJvcHNba2V5XTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcHJvdGVjdGVkIHNldFN1cnZleUV2ZW50cygpIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgICB0aGlzLnN1cnZleS5yZW5kZXJDYWxsYmFjayA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBjb3VudGVyID1cbiAgICAgICAgISFzZWxmLnN0YXRlICYmICEhc2VsZi5zdGF0ZS5tb2RlbENoYW5nZWQgPyBzZWxmLnN0YXRlLm1vZGVsQ2hhbmdlZCA6IDA7XG4gICAgICBzZWxmLnNldFN0YXRlKHsgbW9kZWxDaGFuZ2VkOiBjb3VudGVyICsgMSB9KTtcbiAgICB9O1xuICAgIHRoaXMuc3VydmV5Lm9uUGFydGlhbFNlbmQuYWRkKChzZW5kZXIpID0+IHtcbiAgICAgIGlmICghIXNlbGYuc3RhdGUpIHtcbiAgICAgICAgc2VsZi5zZXRTdGF0ZShzZWxmLnN0YXRlKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8vSVN1cnZleUNyZWF0b3JcbiAgcHVibGljIGNyZWF0ZVF1ZXN0aW9uRWxlbWVudChxdWVzdGlvbjogUXVlc3Rpb24pOiBKU1guRWxlbWVudCB8IG51bGwge1xuICAgIHJldHVybiBSZWFjdFF1ZXN0aW9uRmFjdG9yeS5JbnN0YW5jZS5jcmVhdGVRdWVzdGlvbihcbiAgICAgICFxdWVzdGlvbi5pc0RlZmF1bHRSZW5kZXJpbmcgfHwgcXVlc3Rpb24uaXNEZWZhdWx0UmVuZGVyaW5nKClcbiAgICAgICAgPyBxdWVzdGlvbi5nZXRUZW1wbGF0ZSgpXG4gICAgICAgIDogcXVlc3Rpb24uZ2V0Q29tcG9uZW50TmFtZSgpLFxuICAgICAge1xuICAgICAgICBxdWVzdGlvbjogcXVlc3Rpb24sXG4gICAgICAgIGlzRGlzcGxheU1vZGU6IHF1ZXN0aW9uLmlzSW5wdXRSZWFkT25seSxcbiAgICAgICAgY3JlYXRvcjogdGhpcyxcbiAgICAgIH1cbiAgICApO1xuICB9XG4gIHB1YmxpYyByZW5kZXJFcnJvcihcbiAgICBrZXk6IHN0cmluZyxcbiAgICBlcnJvcjogU3VydmV5RXJyb3IsXG4gICAgY3NzQ2xhc3NlczogYW55XG4gICk6IEpTWC5FbGVtZW50IHtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBrZXk9e2tleX0+XG4gICAgICAgIDxzcGFuIGNsYXNzTmFtZT17Y3NzQ2xhc3Nlcy5lcnJvci5pY29uIHx8IHVuZGVmaW5lZH0gYXJpYS1oaWRkZW49XCJ0cnVlXCIgLz5cbiAgICAgICAgPHNwYW4gY2xhc3NOYW1lPXtjc3NDbGFzc2VzLmVycm9yLml0ZW0gfHwgdW5kZWZpbmVkfT5cbiAgICAgICAgICA8U3VydmV5TG9jU3RyaW5nVmlld2VyIGxvY1N0cj17ZXJyb3IubG9jVGV4dH0gLz5cbiAgICAgICAgPC9zcGFuPlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxuICBwdWJsaWMgcXVlc3Rpb25UaXRsZUxvY2F0aW9uKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuc3VydmV5LnF1ZXN0aW9uVGl0bGVMb2NhdGlvbjtcbiAgfVxuICBwdWJsaWMgcXVlc3Rpb25FcnJvckxvY2F0aW9uKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuc3VydmV5LnF1ZXN0aW9uRXJyb3JMb2NhdGlvbjtcbiAgfVxufVxuXG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcInN1cnZleVwiLCAocHJvcHMpID0+IHtcbiAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3VydmV5LCBwcm9wcyk7XG59KTtcblxuZXhwb3J0IGZ1bmN0aW9uIGF0dGFjaEtleTJjbGljayhlbGVtZW50OiBKU1guRWxlbWVudCwgdmlld01vZGVsPzogYW55LCBvcHRpb25zOiBJQXR0YWNoS2V5MmNsaWNrT3B0aW9ucyA9IHsgcHJvY2Vzc0VzYzogdHJ1ZSwgZGlzYWJsZVRhYlN0b3A6IGZhbHNlIH0pOiBKU1guRWxlbWVudCB7XG4gIGlmICgoISF2aWV3TW9kZWwgJiYgdmlld01vZGVsLmRpc2FibGVUYWJTdG9wKSB8fCAoISFvcHRpb25zICYmIG9wdGlvbnMuZGlzYWJsZVRhYlN0b3ApKSB7XG4gICAgcmV0dXJuIFJlYWN0LmNsb25lRWxlbWVudChlbGVtZW50LCB7IHRhYkluZGV4OiAtMSB9KTtcbiAgfVxuICByZXR1cm4gUmVhY3QuY2xvbmVFbGVtZW50KFxuICAgIGVsZW1lbnQsXG4gICAge1xuICAgICAgdGFiSW5kZXg6IDAsXG4gICAgICBvbktleVVwOiAoZXZ0OiBLZXlib2FyZEV2ZW50KSA9PiB7XG4gICAgICAgIGV2dC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBldnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIGRvS2V5MkNsaWNrVXAoZXZ0LCBvcHRpb25zKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfSxcbiAgICAgIG9uS2V5RG93bjogKGV2dDogYW55KSA9PiBkb0tleTJDbGlja0Rvd24oZXZ0LCBvcHRpb25zKSxcbiAgICAgIG9uQmx1cjogKGV2dDogYW55KSA9PiBkb0tleTJDbGlja0JsdXIoZXZ0KVxuICAgIH1cbiAgKTtcbn0iLCJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFN1cnZleU1vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlOYXZpZ2F0aW9uQmFzZSBleHRlbmRzIFJlYWN0LkNvbXBvbmVudDxhbnksIGFueT4ge1xuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMuc3RhdGUgPSB7IHVwZGF0ZTogMCB9O1xuICB9XG4gIHByb3RlY3RlZCBnZXQgc3VydmV5KCk6IFN1cnZleU1vZGVsIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5zdXJ2ZXk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldCBjc3MoKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5jc3M7XG4gIH1cbiAgcHJpdmF0ZSB1cGRhdGVTdGF0ZUZ1bmN0aW9uOiBhbnkgPSBudWxsO1xuICBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICBpZiAodGhpcy5zdXJ2ZXkpIHtcbiAgICAgIHZhciBzZWxmID0gdGhpcztcbiAgICAgIHRoaXMudXBkYXRlU3RhdGVGdW5jdGlvbiA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgc2VsZi5zZXRTdGF0ZSh7IHVwZGF0ZTogc2VsZi5zdGF0ZS51cGRhdGUgKyAxIH0pO1xuICAgICAgfTtcbiAgICAgIHRoaXMuc3VydmV5Lm9uUGFnZVZpc2libGVDaGFuZ2VkLmFkZCh0aGlzLnVwZGF0ZVN0YXRlRnVuY3Rpb24pO1xuICAgIH1cbiAgfVxuICBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICBpZiAodGhpcy5zdXJ2ZXkgJiYgdGhpcy51cGRhdGVTdGF0ZUZ1bmN0aW9uKSB7XG4gICAgICB0aGlzLnN1cnZleS5vblBhZ2VWaXNpYmxlQ2hhbmdlZC5yZW1vdmUodGhpcy51cGRhdGVTdGF0ZUZ1bmN0aW9uKTtcbiAgICAgIHRoaXMudXBkYXRlU3RhdGVGdW5jdGlvbiA9IG51bGw7XG4gICAgfVxuICB9XG59XG4iLCJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFN1cnZleVByb2dyZXNzTW9kZWwgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFN1cnZleU5hdmlnYXRpb25CYXNlIH0gZnJvbSBcIi4vcmVhY3RTdXJ2ZXlOYXZpZ2F0aW9uQmFzZVwiO1xuaW1wb3J0IHsgUmVhY3RFbGVtZW50RmFjdG9yeSB9IGZyb20gXCIuL2VsZW1lbnQtZmFjdG9yeVwiO1xuXG5leHBvcnQgY2xhc3MgU3VydmV5UHJvZ3Jlc3MgZXh0ZW5kcyBTdXJ2ZXlOYXZpZ2F0aW9uQmFzZSB7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldCBpc1RvcCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5pc1RvcDtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IHByb2dyZXNzKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuc3VydmV5LnByb2dyZXNzVmFsdWU7XG4gIH1cbiAgcHJvdGVjdGVkIGdldCBwcm9ncmVzc1RleHQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5zdXJ2ZXkucHJvZ3Jlc3NUZXh0O1xuICB9XG4gIHJlbmRlcigpOiBKU1guRWxlbWVudCB7XG4gICAgdmFyIHN0eWxlID0gdGhpcy5pc1RvcCA/IHt9IDogeyBtYXJnaW5Ub3A6IFwiMWVtXCIgfTtcbiAgICB2YXIgcHJvZ3Jlc3NTdHlsZSA9IHtcbiAgICAgIHdpZHRoOiB0aGlzLnByb2dyZXNzICsgXCIlXCIsXG4gICAgfTtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9e3RoaXMuY3NzLnByb2dyZXNzfSBzdHlsZT17c3R5bGV9PlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgc3R5bGU9e3Byb2dyZXNzU3R5bGV9XG4gICAgICAgICAgY2xhc3NOYW1lPXt0aGlzLmNzcy5wcm9ncmVzc0Jhcn1cbiAgICAgICAgICByb2xlPVwicHJvZ3Jlc3NiYXJcIlxuICAgICAgICAgIGFyaWEtdmFsdWVtaW49ezB9XG4gICAgICAgICAgYXJpYS12YWx1ZW1heD17MTAwfVxuICAgICAgICA+XG4gICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgIGNsYXNzTmFtZT17U3VydmV5UHJvZ3Jlc3NNb2RlbC5nZXRQcm9ncmVzc1RleHRJbkJhckNzcyh0aGlzLmNzcyl9XG4gICAgICAgICAgPlxuICAgICAgICAgICAge3RoaXMucHJvZ3Jlc3NUZXh0fVxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxzcGFuXG4gICAgICAgICAgY2xhc3NOYW1lPXtTdXJ2ZXlQcm9ncmVzc01vZGVsLmdldFByb2dyZXNzVGV4dFVuZGVyQmFyQ3NzKHRoaXMuY3NzKX1cbiAgICAgICAgPlxuICAgICAgICAgIHt0aGlzLnByb2dyZXNzVGV4dH1cbiAgICAgICAgPC9zcGFuPlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxufVxuXG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcInN2LXByb2dyZXNzLXBhZ2VzXCIsIHByb3BzID0+IHtcbiAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3VydmV5UHJvZ3Jlc3MsIHByb3BzKTtcbn0pO1xuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXCJzdi1wcm9ncmVzcy1xdWVzdGlvbnNcIiwgcHJvcHMgPT4ge1xuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTdXJ2ZXlQcm9ncmVzcywgcHJvcHMpO1xufSk7XG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcbiAgXCJzdi1wcm9ncmVzcy1jb3JyZWN0cXVlc3Rpb25zXCIsXG4gIHByb3BzID0+IHtcbiAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTdXJ2ZXlQcm9ncmVzcywgcHJvcHMpO1xuICB9XG4pO1xuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXG4gIFwic3YtcHJvZ3Jlc3MtcmVxdWlyZWRxdWVzdGlvbnNcIixcbiAgcHJvcHMgPT4ge1xuICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFN1cnZleVByb2dyZXNzLCBwcm9wcyk7XG4gIH1cbik7XG4iLCJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFN1cnZleVByb2dyZXNzQnV0dG9uc01vZGVsLCBQYWdlTW9kZWwgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFN1cnZleU5hdmlnYXRpb25CYXNlIH0gZnJvbSBcIi4vcmVhY3RTdXJ2ZXlOYXZpZ2F0aW9uQmFzZVwiO1xuaW1wb3J0IHsgUmVhY3RFbGVtZW50RmFjdG9yeSB9IGZyb20gXCIuL2VsZW1lbnQtZmFjdG9yeVwiO1xuXG5leHBvcnQgY2xhc3MgU3VydmV5UHJvZ3Jlc3NCdXR0b25zIGV4dGVuZHMgU3VydmV5TmF2aWdhdGlvbkJhc2Uge1xuICBwcml2YXRlIHByb2dyZXNzQnV0dG9uc01vZGVsOiBTdXJ2ZXlQcm9ncmVzc0J1dHRvbnNNb2RlbDtcbiAgcHJpdmF0ZSB1cGRhdGVTY3JvbGxlcjogYW55ID0gdW5kZWZpbmVkO1xuICBwcml2YXRlIGxpc3RDb250YWluZXJSZWY6IFJlYWN0LlJlZk9iamVjdDxIVE1MRGl2RWxlbWVudD47XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgdGhpcy5wcm9ncmVzc0J1dHRvbnNNb2RlbCA9IG5ldyBTdXJ2ZXlQcm9ncmVzc0J1dHRvbnNNb2RlbCh0aGlzLnN1cnZleSk7XG4gICAgdGhpcy5saXN0Q29udGFpbmVyUmVmID0gUmVhY3QuY3JlYXRlUmVmKCk7XG4gIH1cbiAgcmVuZGVyKCk6IEpTWC5FbGVtZW50IHtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9e3RoaXMuY3NzLnByb2dyZXNzQnV0dG9uc0NvbnRhaW5lckNlbnRlcn0+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXt0aGlzLmNzcy5wcm9ncmVzc0J1dHRvbnNDb250YWluZXJ9PlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzTmFtZT17dGhpcy5nZXRTY3JvbGxCdXR0b25Dc3ModHJ1ZSl9XG4gICAgICAgICAgICByb2xlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+XG4gICAgICAgICAgICAgIHRoaXMuY2xpY2tTY3JvbGxCdXR0b24odGhpcy5saXN0Q29udGFpbmVyUmVmLmN1cnJlbnQsIHRydWUpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgPjwvZGl2PlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzTmFtZT17dGhpcy5jc3MucHJvZ3Jlc3NCdXR0b25zTGlzdENvbnRhaW5lcn1cbiAgICAgICAgICAgIHJlZj17dGhpcy5saXN0Q29udGFpbmVyUmVmfVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDx1bCBjbGFzc05hbWU9e3RoaXMuY3NzLnByb2dyZXNzQnV0dG9uc0xpc3R9PlxuICAgICAgICAgICAgICB7dGhpcy5nZXRMaXN0RWxlbWVudHMoKX1cbiAgICAgICAgICAgIDwvdWw+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3NOYW1lPXt0aGlzLmdldFNjcm9sbEJ1dHRvbkNzcyhmYWxzZSl9XG4gICAgICAgICAgICByb2xlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+XG4gICAgICAgICAgICAgIHRoaXMuY2xpY2tTY3JvbGxCdXR0b24odGhpcy5saXN0Q29udGFpbmVyUmVmLmN1cnJlbnQsIGZhbHNlKVxuICAgICAgICAgICAgfVxuICAgICAgICAgID48L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG4gIHByb3RlY3RlZCBnZXRMaXN0RWxlbWVudHMoKTogSlNYLkVsZW1lbnRbXSB7XG4gICAgbGV0IGJ1dHRvbnM6IEpTWC5FbGVtZW50W10gPSBbXTtcbiAgICB0aGlzLnN1cnZleS52aXNpYmxlUGFnZXMuZm9yRWFjaCgocGFnZTogUGFnZU1vZGVsLCBpbmRleDogbnVtYmVyKSA9PiB7XG4gICAgICBidXR0b25zLnB1c2godGhpcy5yZW5kZXJMaXN0RWxlbWVudChwYWdlLCBpbmRleCkpO1xuICAgIH0pO1xuICAgIHJldHVybiBidXR0b25zO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJMaXN0RWxlbWVudChwYWdlOiBQYWdlTW9kZWwsIGluZGV4OiBudW1iZXIpOiBKU1guRWxlbWVudCB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxsaVxuICAgICAgICBrZXk9e1wibGlzdGVsZW1lbnRcIiArIGluZGV4fVxuICAgICAgICBjbGFzc05hbWU9e3RoaXMuZ2V0TGlzdEVsZW1lbnRDc3MoaW5kZXgpfVxuICAgICAgICBvbkNsaWNrPXtcbiAgICAgICAgICB0aGlzLmlzTGlzdEVsZW1lbnRDbGlja2FibGUoaW5kZXgpXG4gICAgICAgICAgICA/ICgpID0+IHRoaXMuY2xpY2tMaXN0RWxlbWVudChpbmRleClcbiAgICAgICAgICAgIDogdW5kZWZpbmVkXG4gICAgICAgIH1cbiAgICAgID5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzTmFtZT17dGhpcy5jc3MucHJvZ3Jlc3NCdXR0b25zUGFnZVRpdGxlfVxuICAgICAgICAgIHRpdGxlPXtwYWdlLm5hdmlnYXRpb25UaXRsZSB8fCBwYWdlLm5hbWV9XG4gICAgICAgID5cbiAgICAgICAgICB7cGFnZS5uYXZpZ2F0aW9uVGl0bGUgfHwgcGFnZS5uYW1lfVxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzTmFtZT17dGhpcy5jc3MucHJvZ3Jlc3NCdXR0b25zUGFnZURlc2NyaXB0aW9ufVxuICAgICAgICAgIHRpdGxlPXtwYWdlLm5hdmlnYXRpb25EZXNjcmlwdGlvbn1cbiAgICAgICAgPlxuICAgICAgICAgIHtwYWdlLm5hdmlnYXRpb25EZXNjcmlwdGlvbn1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2xpPlxuICAgICk7XG4gIH1cbiAgcHJvdGVjdGVkIGlzTGlzdEVsZW1lbnRDbGlja2FibGUoaW5kZXg6IG51bWJlcik6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnByb2dyZXNzQnV0dG9uc01vZGVsLmlzTGlzdEVsZW1lbnRDbGlja2FibGUoaW5kZXgpO1xuICB9XG4gIHByb3RlY3RlZCBnZXRMaXN0RWxlbWVudENzcyhpbmRleDogbnVtYmVyKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5wcm9ncmVzc0J1dHRvbnNNb2RlbC5nZXRMaXN0RWxlbWVudENzcyhpbmRleCk7XG4gIH1cbiAgcHJvdGVjdGVkIGNsaWNrTGlzdEVsZW1lbnQoaW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMucHJvZ3Jlc3NCdXR0b25zTW9kZWwuY2xpY2tMaXN0RWxlbWVudChpbmRleCk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldFNjcm9sbEJ1dHRvbkNzcyhpc0xlZnRTY3JvbGw6IGJvb2xlYW4pOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByb2dyZXNzQnV0dG9uc01vZGVsLmdldFNjcm9sbEJ1dHRvbkNzcyh0aGlzLnN0YXRlLmhhc1Njcm9sbGVyLCBpc0xlZnRTY3JvbGwpO1xuICB9XG4gIHByb3RlY3RlZCBjbGlja1Njcm9sbEJ1dHRvbihcbiAgICBsaXN0Q29udGFpbmVyRWxlbWVudDogRWxlbWVudCB8IG51bGwsXG4gICAgaXNMZWZ0U2Nyb2xsOiBib29sZWFuXG4gICk6IHZvaWQge1xuICAgIGlmKCEhbGlzdENvbnRhaW5lckVsZW1lbnQpIHtcbiAgICAgIGxpc3RDb250YWluZXJFbGVtZW50LnNjcm9sbExlZnQgKz0gKGlzTGVmdFNjcm9sbCA/IC0xIDogMSkgKiA3MDtcbiAgICB9XG4gIH1cbiAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgdGhpcy51cGRhdGVTY3JvbGxlciA9IHNldEludGVydmFsKCgpID0+IHtcbiAgICAgIGlmKCEhdGhpcy5saXN0Q29udGFpbmVyUmVmLmN1cnJlbnQpIHtcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7IGhhc1Njcm9sbGVyOiB0aGlzLmxpc3RDb250YWluZXJSZWYuY3VycmVudC5zY3JvbGxXaWR0aCA+IHRoaXMubGlzdENvbnRhaW5lclJlZi5jdXJyZW50Lm9mZnNldFdpZHRoLCB9KTtcbiAgICAgIH1cbiAgICB9LCAxMDApO1xuICB9XG4gIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgIGlmICh0eXBlb2YgdGhpcy51cGRhdGVTY3JvbGxlciAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgY2xlYXJJbnRlcnZhbCh0aGlzLnVwZGF0ZVNjcm9sbGVyKTtcbiAgICAgIHRoaXMudXBkYXRlU2Nyb2xsZXIgPSB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG59XG5cblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFwic3YtcHJvZ3Jlc3MtYnV0dG9uc1wiLCAocHJvcHMpID0+IHtcbiAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3VydmV5UHJvZ3Jlc3NCdXR0b25zLCBwcm9wcyk7XG59KTtcbiIsImltcG9ydCAqIGFzIFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHtcbiAgQmFzZSxcbiAgU3VydmV5RWxlbWVudCxcbiAgU3VydmV5RXJyb3IsXG4gIFF1ZXN0aW9uLFxuICBRdWVzdGlvbk1hdHJpeERyb3Bkb3duUmVuZGVyZWRDZWxsLFxuICBUb29sdGlwTWFuYWdlcixcbiAgU3VydmV5TW9kZWxcbn0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBSZWFjdFN1cnZleUVsZW1lbnRzV3JhcHBlciB9IGZyb20gXCIuL3JlYWN0c3VydmV5bW9kZWxcIjtcbmltcG9ydCB7IFJlYWN0RWxlbWVudEZhY3RvcnkgfSBmcm9tIFwiLi9lbGVtZW50LWZhY3RvcnlcIjtcbmltcG9ydCB7IFN1cnZleUVsZW1lbnRCYXNlLCBSZWFjdFN1cnZleUVsZW1lbnQgfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uX2VsZW1lbnRcIjtcbmltcG9ydCB7IFN1cnZleVF1ZXN0aW9uQ29tbWVudEl0ZW0gfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uX2NvbW1lbnRcIjtcbmltcG9ydCB7IFN1cnZleUN1c3RvbVdpZGdldCB9IGZyb20gXCIuL2N1c3RvbS13aWRnZXRcIjtcbmltcG9ydCB7IFN1cnZleUVsZW1lbnRIZWFkZXIgfSBmcm9tIFwiLi9lbGVtZW50LWhlYWRlclwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIElTdXJ2ZXlDcmVhdG9yIHtcbiAgY3JlYXRlUXVlc3Rpb25FbGVtZW50KHF1ZXN0aW9uOiBRdWVzdGlvbik6IEpTWC5FbGVtZW50IHwgbnVsbDtcbiAgcmVuZGVyRXJyb3Ioa2V5OiBzdHJpbmcsIGVycm9yOiBTdXJ2ZXlFcnJvciwgY3NzQ2xhc3NlczogYW55KTogSlNYLkVsZW1lbnQ7XG4gIHF1ZXN0aW9uVGl0bGVMb2NhdGlvbigpOiBzdHJpbmc7XG4gIHF1ZXN0aW9uRXJyb3JMb2NhdGlvbigpOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlRdWVzdGlvbiBleHRlbmRzIFN1cnZleUVsZW1lbnRCYXNlPGFueSwgYW55PiB7XG4gIHByaXZhdGUgaXNOZWVkRm9jdXMgPSBmYWxzZTtcbiAgcHVibGljIHN0YXRpYyByZW5kZXJRdWVzdGlvbkJvZHkoXG4gICAgY3JlYXRvcjogSVN1cnZleUNyZWF0b3IsXG4gICAgcXVlc3Rpb246IFF1ZXN0aW9uXG4gICk6IEpTWC5FbGVtZW50IHwgYW55IHtcbiAgICBpZiAoIXF1ZXN0aW9uLmlzVmlzaWJsZSkgcmV0dXJuIG51bGw7XG4gICAgdmFyIGN1c3RvbVdpZGdldCA9IHF1ZXN0aW9uLmN1c3RvbVdpZGdldDtcbiAgICBpZiAoIWN1c3RvbVdpZGdldCkge1xuICAgICAgcmV0dXJuIGNyZWF0b3IuY3JlYXRlUXVlc3Rpb25FbGVtZW50KHF1ZXN0aW9uKTtcbiAgICB9XG4gICAgcmV0dXJuIDxTdXJ2ZXlDdXN0b21XaWRnZXQgY3JlYXRvcj17Y3JlYXRvcn0gcXVlc3Rpb249e3F1ZXN0aW9ufSAvPjtcbiAgfVxuICBwcml2YXRlIHJvb3RSZWY6IFJlYWN0LlJlZk9iamVjdDxIVE1MRGl2RWxlbWVudD47XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgdGhpcy5yb290UmVmID0gUmVhY3QuY3JlYXRlUmVmKCk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldFN0YXRlRWxlbWVudCgpOiBCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5xdWVzdGlvbjtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IHF1ZXN0aW9uKCk6IFF1ZXN0aW9uIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5lbGVtZW50O1xuICB9XG4gIHByaXZhdGUgZ2V0IGNyZWF0b3IoKTogSVN1cnZleUNyZWF0b3Ige1xuICAgIHJldHVybiB0aGlzLnByb3BzLmNyZWF0b3I7XG4gIH1cbiAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgc3VwZXIuY29tcG9uZW50RGlkTW91bnQoKTtcbiAgICBpZiAoISF0aGlzLnF1ZXN0aW9uKSB7XG4gICAgICB0aGlzLnF1ZXN0aW9uW1wicmVhY3RcIl0gPSB0aGlzO1xuICAgIH1cbiAgICB0aGlzLmRvQWZ0ZXJSZW5kZXIoKTtcbiAgfVxuICBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICBzdXBlci5jb21wb25lbnRXaWxsVW5tb3VudCgpO1xuICAgIGlmICghIXRoaXMucXVlc3Rpb24pIHtcbiAgICAgIHRoaXMucXVlc3Rpb25bXCJyZWFjdFwiXSA9IG51bGw7XG4gICAgfVxuICAgIGNvbnN0IGVsID0gdGhpcy5yb290UmVmLmN1cnJlbnQ7XG4gICAgaWYgKCEhZWwpIHtcbiAgICAgIGVsLnJlbW92ZUF0dHJpYnV0ZShcImRhdGEtcmVuZGVyZWRcIik7XG4gICAgfVxuICB9XG4gIGNvbXBvbmVudERpZFVwZGF0ZShwcmV2UHJvcHM6IGFueSwgcHJldlN0YXRlOiBhbnkpIHtcbiAgICBzdXBlci5jb21wb25lbnREaWRVcGRhdGUocHJldlByb3BzLCBwcmV2U3RhdGUpO1xuICAgIHRoaXMuZG9BZnRlclJlbmRlcigpO1xuICB9XG4gIHByaXZhdGUgZG9BZnRlclJlbmRlcigpIHtcbiAgICBpZiAodGhpcy5pc05lZWRGb2N1cykge1xuICAgICAgaWYgKCF0aGlzLnF1ZXN0aW9uLmlzQ29sbGFwc2VkKSB7XG4gICAgICAgIHRoaXMucXVlc3Rpb24uY2xpY2tUaXRsZUZ1bmN0aW9uKCk7XG4gICAgICB9XG4gICAgICB0aGlzLmlzTmVlZEZvY3VzID0gZmFsc2U7XG4gICAgfVxuICAgIGlmICh0aGlzLnF1ZXN0aW9uKSB7XG4gICAgICB2YXIgZWwgPSB0aGlzLnJvb3RSZWYuY3VycmVudDtcbiAgICAgIGlmIChlbCAmJiBlbC5nZXRBdHRyaWJ1dGUoXCJkYXRhLXJlbmRlcmVkXCIpICE9PSBcInJcIikge1xuICAgICAgICBlbC5zZXRBdHRyaWJ1dGUoXCJkYXRhLXJlbmRlcmVkXCIsIFwiclwiKTtcbiAgICAgICAgZWwuc2V0QXR0cmlidXRlKFwiZGF0YS1uYW1lXCIsIHRoaXMucXVlc3Rpb24ubmFtZSk7XG4gICAgICAgIGlmICh0aGlzLnF1ZXN0aW9uLmFmdGVyUmVuZGVyKSB7XG4gICAgICAgICAgdGhpcy5xdWVzdGlvbi5hZnRlclJlbmRlcihlbCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcHJvdGVjdGVkIGNhblJlbmRlcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgc3VwZXIuY2FuUmVuZGVyKCkgJiZcbiAgICAgICEhdGhpcy5xdWVzdGlvbiAmJlxuICAgICAgISF0aGlzLmNyZWF0b3IgJiZcbiAgICAgIHRoaXMucXVlc3Rpb24uaXNWaXNpYmxlXG4gICAgKTtcbiAgfVxuXG4gIHByb3RlY3RlZCByZW5kZXJRdWVzdGlvbkNvbnRlbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIGxldCBxdWVzdGlvbiA9IHRoaXMucXVlc3Rpb247XG4gICAgdmFyIGNvbnRlbnRTdHlsZSA9IHtcbiAgICAgIGRpc3BsYXk6ICF0aGlzLnF1ZXN0aW9uLmlzQ29sbGFwc2VkID8gXCJcIiA6IFwibm9uZVwiLFxuICAgIH07XG4gICAgdmFyIGNzc0NsYXNzZXMgPSBxdWVzdGlvbi5jc3NDbGFzc2VzO1xuICAgIHZhciBxdWVzdGlvblJlbmRlciA9IHRoaXMucmVuZGVyUXVlc3Rpb24oKTtcbiAgICB2YXIgZXJyb3JzVG9wID0gdGhpcy5xdWVzdGlvbi5zaG93RXJyb3JPblRvcFxuICAgICAgPyB0aGlzLnJlbmRlckVycm9ycyhjc3NDbGFzc2VzLCBcInRvcFwiKVxuICAgICAgOiBudWxsO1xuICAgIHZhciBlcnJvcnNCb3R0b20gPSB0aGlzLnF1ZXN0aW9uLnNob3dFcnJvck9uQm90dG9tXG4gICAgICA/IHRoaXMucmVuZGVyRXJyb3JzKGNzc0NsYXNzZXMsIFwiYm90dG9tXCIpXG4gICAgICA6IG51bGw7XG4gICAgdmFyIGNvbW1lbnQgPVxuICAgICAgcXVlc3Rpb24gJiYgcXVlc3Rpb24uaGFzQ29tbWVudCA/IHRoaXMucmVuZGVyQ29tbWVudChjc3NDbGFzc2VzKSA6IG51bGw7XG4gICAgY29uc3QgZXJyb3JzVG9vbHRpcCA9XG4gICAgICB0aGlzLnF1ZXN0aW9uLmlzRXJyb3JzTW9kZVRvb2x0aXBcbiAgICAgICAgPyB0aGlzLnJlbmRlckVycm9ycyhjc3NDbGFzc2VzLCBcInRvb2x0aXBcIilcbiAgICAgICAgOiBudWxsO1xuICAgIHZhciBkZXNjcmlwdGlvblVuZGVySW5wdXQgPSBxdWVzdGlvbi5oYXNEZXNjcmlwdGlvblVuZGVySW5wdXRcbiAgICAgID8gdGhpcy5yZW5kZXJEZXNjcmlwdGlvbigpXG4gICAgICA6IG51bGw7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3NOYW1lPXtxdWVzdGlvbi5jc3NDb250ZW50IHx8IHVuZGVmaW5lZH1cbiAgICAgICAgc3R5bGU9e2NvbnRlbnRTdHlsZX1cbiAgICAgICAgcm9sZT1cInByZXNlbnRhdGlvblwiXG4gICAgICA+XG4gICAgICAgIHtlcnJvcnNUb3B9XG4gICAgICAgIHtxdWVzdGlvblJlbmRlcn1cbiAgICAgICAge2NvbW1lbnR9XG4gICAgICAgIHtlcnJvcnNCb3R0b219XG4gICAgICAgIHtlcnJvcnNUb29sdGlwfVxuICAgICAgICB7ZGVzY3JpcHRpb25VbmRlcklucHV0fVxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyRWxlbWVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgdmFyIHF1ZXN0aW9uID0gdGhpcy5xdWVzdGlvbjtcbiAgICB2YXIgY3NzQ2xhc3NlcyA9IHF1ZXN0aW9uLmNzc0NsYXNzZXM7XG4gICAgdmFyIGhlYWRlciA9IHRoaXMucmVuZGVySGVhZGVyKHF1ZXN0aW9uKTtcbiAgICB2YXIgaGVhZGVyVG9wID0gcXVlc3Rpb24uaGFzVGl0bGVPbkxlZnRUb3AgPyBoZWFkZXIgOiBudWxsO1xuICAgIHZhciBoZWFkZXJCb3R0b20gPSBxdWVzdGlvbi5oYXNUaXRsZU9uQm90dG9tID8gaGVhZGVyIDogbnVsbDtcblxuICAgIGNvbnN0IGVycm9yc0Fib3ZlUXVlc3Rpb24gPSB0aGlzLnF1ZXN0aW9uLnNob3dFcnJvcnNBYm92ZVF1ZXN0aW9uXG4gICAgICA/IHRoaXMucmVuZGVyRXJyb3JzKGNzc0NsYXNzZXMsIFwiXCIpXG4gICAgICA6IG51bGw7XG5cbiAgICBjb25zdCBlcnJvcnNCZWxvd1F1ZXN0aW9uID0gdGhpcy5xdWVzdGlvbi5zaG93RXJyb3JzQmVsb3dRdWVzdGlvblxuICAgICAgPyB0aGlzLnJlbmRlckVycm9ycyhjc3NDbGFzc2VzLCBcIlwiKVxuICAgICAgOiBudWxsO1xuXG4gICAgbGV0IHJvb3RTdHlsZTogeyBbaW5kZXg6IHN0cmluZ106IGFueSB9ID0ge307XG4gICAgaWYgKCEhcXVlc3Rpb24ucGFkZGluZ0xlZnQpIHJvb3RTdHlsZVtcInBhZGRpbmdMZWZ0XCJdID0gcXVlc3Rpb24ucGFkZGluZ0xlZnQ7XG4gICAgaWYgKCEhcXVlc3Rpb24ucGFkZGluZ1JpZ2h0KVxuICAgICAgcm9vdFN0eWxlW1wicGFkZGluZ1JpZ2h0XCJdID0gcXVlc3Rpb24ucGFkZGluZ1JpZ2h0O1xuXG4gICAgbGV0IHF1ZXN0aW9uQ29udGVudCA9IHRoaXMud3JhcFF1ZXN0aW9uQ29udGVudCh0aGlzLnJlbmRlclF1ZXN0aW9uQ29udGVudCgpKTtcbiAgICByZXR1cm4gKFxuICAgICAgPD5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIHJlZj17dGhpcy5yb290UmVmfVxuICAgICAgICAgIGlkPXtxdWVzdGlvbi5pZH1cbiAgICAgICAgICBjbGFzc05hbWU9e3F1ZXN0aW9uLmdldFJvb3RDc3MoKX1cbiAgICAgICAgICBzdHlsZT17cm9vdFN0eWxlfVxuICAgICAgICAgIHJvbGU9e3F1ZXN0aW9uLmFyaWFSb2xlfVxuICAgICAgICAgIGFyaWEtcmVxdWlyZWQ9e3RoaXMucXVlc3Rpb24uYXJpYVJlcXVpcmVkfVxuICAgICAgICAgIGFyaWEtaW52YWxpZD17dGhpcy5xdWVzdGlvbi5hcmlhSW52YWxpZH1cbiAgICAgICAgICBhcmlhLWxhYmVsbGVkYnk9e3F1ZXN0aW9uLmFyaWFMYWJlbGxlZEJ5fVxuICAgICAgICA+XG4gICAgICAgICAge2Vycm9yc0Fib3ZlUXVlc3Rpb259XG4gICAgICAgICAge2hlYWRlclRvcH1cbiAgICAgICAgICB7cXVlc3Rpb25Db250ZW50fVxuICAgICAgICAgIHtoZWFkZXJCb3R0b219XG4gICAgICAgICAge2Vycm9yc0JlbG93UXVlc3Rpb259XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC8+XG4gICAgKTtcbiAgfVxuICBwcm90ZWN0ZWQgd3JhcEVsZW1lbnQoZWxlbWVudDogSlNYLkVsZW1lbnQpOiBKU1guRWxlbWVudCB7XG4gICAgY29uc3Qgc3VydmV5OiBTdXJ2ZXlNb2RlbCA9IHRoaXMucXVlc3Rpb24uc3VydmV5IGFzIFN1cnZleU1vZGVsO1xuICAgIGxldCB3cmFwcGVyOiBKU1guRWxlbWVudCB8IG51bGwgPSBudWxsO1xuICAgIGlmIChzdXJ2ZXkpIHtcbiAgICAgIHdyYXBwZXIgPSBSZWFjdFN1cnZleUVsZW1lbnRzV3JhcHBlci53cmFwRWxlbWVudChzdXJ2ZXksIGVsZW1lbnQsIHRoaXMucXVlc3Rpb24pO1xuICAgIH1cbiAgICByZXR1cm4gd3JhcHBlciA/PyBlbGVtZW50O1xuICB9XG4gIHByb3RlY3RlZCB3cmFwUXVlc3Rpb25Db250ZW50KGVsZW1lbnQ6IEpTWC5FbGVtZW50KTogSlNYLkVsZW1lbnQge1xuICAgIGNvbnN0IHN1cnZleTogU3VydmV5TW9kZWwgPSB0aGlzLnF1ZXN0aW9uLnN1cnZleSBhcyBTdXJ2ZXlNb2RlbDtcbiAgICBsZXQgd3JhcHBlcjogSlNYLkVsZW1lbnQgfCBudWxsID0gbnVsbDtcbiAgICBpZiAoc3VydmV5KSB7XG4gICAgICB3cmFwcGVyID0gUmVhY3RTdXJ2ZXlFbGVtZW50c1dyYXBwZXIud3JhcFF1ZXN0aW9uQ29udGVudChzdXJ2ZXksIGVsZW1lbnQsIHRoaXMucXVlc3Rpb24pO1xuICAgIH1cbiAgICByZXR1cm4gd3JhcHBlciA/PyBlbGVtZW50O1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJRdWVzdGlvbigpOiBKU1guRWxlbWVudCB7XG4gICAgcmV0dXJuIFN1cnZleVF1ZXN0aW9uLnJlbmRlclF1ZXN0aW9uQm9keSh0aGlzLmNyZWF0b3IsIHRoaXMucXVlc3Rpb24pO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJEZXNjcmlwdGlvbigpOiBKU1guRWxlbWVudCB7XG4gICAgcmV0dXJuIFN1cnZleUVsZW1lbnRCYXNlLnJlbmRlclF1ZXN0aW9uRGVzY3JpcHRpb24odGhpcy5xdWVzdGlvbik7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckNvbW1lbnQoY3NzQ2xhc3NlczogYW55KTogSlNYLkVsZW1lbnQge1xuICAgIHZhciBjb21tZW50VGV4dCA9IFN1cnZleUVsZW1lbnRCYXNlLnJlbmRlckxvY1N0cmluZyhcbiAgICAgIHRoaXMucXVlc3Rpb24ubG9jQ29tbWVudFRleHRcbiAgICApO1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLmZvcm1Hcm91cH0+XG4gICAgICAgIDxkaXY+e2NvbW1lbnRUZXh0fTwvZGl2PlxuICAgICAgICA8U3VydmV5UXVlc3Rpb25Db21tZW50SXRlbVxuICAgICAgICAgIHF1ZXN0aW9uPXt0aGlzLnF1ZXN0aW9ufVxuICAgICAgICAgIGNzc0NsYXNzZXM9e2Nzc0NsYXNzZXN9XG4gICAgICAgICAgb3RoZXJDc3M9e2Nzc0NsYXNzZXMub3RoZXJ9XG4gICAgICAgICAgaXNEaXNwbGF5TW9kZT17dGhpcy5xdWVzdGlvbi5pc0lucHV0UmVhZE9ubHl9XG4gICAgICAgIC8+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJIZWFkZXIocXVlc3Rpb246IFF1ZXN0aW9uKTogSlNYLkVsZW1lbnQge1xuICAgIHJldHVybiA8U3VydmV5RWxlbWVudEhlYWRlciBlbGVtZW50PXtxdWVzdGlvbn0+PC9TdXJ2ZXlFbGVtZW50SGVhZGVyPjtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyRXJyb3JzKGNzc0NsYXNzZXM6IGFueSwgbG9jYXRpb246IHN0cmluZyk6IEpTWC5FbGVtZW50IHtcbiAgICByZXR1cm4gKFxuICAgICAgPFN1cnZleUVsZW1lbnRFcnJvcnNcbiAgICAgICAgZWxlbWVudD17dGhpcy5xdWVzdGlvbn1cbiAgICAgICAgY3NzQ2xhc3Nlcz17Y3NzQ2xhc3Nlc31cbiAgICAgICAgY3JlYXRvcj17dGhpcy5jcmVhdG9yfVxuICAgICAgICBsb2NhdGlvbj17bG9jYXRpb259XG4gICAgICAgIGlkPXt0aGlzLnF1ZXN0aW9uLmlkICsgXCJfZXJyb3JzXCJ9XG4gICAgICAvPlxuICAgICk7XG4gIH1cbn1cblxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXCJxdWVzdGlvblwiLCAocHJvcHMpID0+IHtcbiAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3VydmV5UXVlc3Rpb24sIHByb3BzKTtcbn0pO1xuXG5leHBvcnQgY2xhc3MgU3VydmV5RWxlbWVudEVycm9ycyBleHRlbmRzIFJlYWN0U3VydmV5RWxlbWVudCB7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgdGhpcy5zdGF0ZSA9IHRoaXMuZ2V0U3RhdGUoKTtcbiAgICB0aGlzLnRvb2x0aXBSZWYgPSBSZWFjdC5jcmVhdGVSZWYoKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IGlkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuaWQ7XG4gIH1cbiAgcHJvdGVjdGVkIGdldCBlbGVtZW50KCk6IFN1cnZleUVsZW1lbnQge1xuICAgIHJldHVybiB0aGlzLnByb3BzLmVsZW1lbnQ7XG4gIH1cbiAgcHJpdmF0ZSBnZXQgY3JlYXRvcigpOiBJU3VydmV5Q3JlYXRvciB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuY3JlYXRvcjtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IGxvY2F0aW9uKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMubG9jYXRpb247XG4gIH1cbiAgcHJpdmF0ZSBnZXRTdGF0ZShwcmV2U3RhdGU6IGFueSA9IG51bGwpIHtcbiAgICByZXR1cm4gIXByZXZTdGF0ZSA/IHsgZXJyb3I6IDAgfSA6IHsgZXJyb3I6IHByZXZTdGF0ZS5lcnJvciArIDEgfTtcbiAgfVxuICBwcm90ZWN0ZWQgY2FuUmVuZGVyKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIXRoaXMuZWxlbWVudCAmJiB0aGlzLmVsZW1lbnQuaGFzVmlzaWJsZUVycm9ycztcbiAgfVxuICBwcml2YXRlIHRvb2x0aXBNYW5hZ2VyOiBUb29sdGlwTWFuYWdlciB8IHVuZGVmaW5lZDtcbiAgcHJpdmF0ZSB0b29sdGlwUmVmOiBSZWFjdC5SZWZPYmplY3Q8SFRNTERpdkVsZW1lbnQ+O1xuICBjb21wb25lbnREaWRVcGRhdGUocHJldlByb3BzOiBhbnksIHByZXZTdGF0ZTogYW55KSB7XG4gICAgc3VwZXIuY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wcywgcHJldlN0YXRlKTtcbiAgICBpZiAodGhpcy5wcm9wcy5sb2NhdGlvbiA9PSBcInRvb2x0aXBcIikge1xuICAgICAgaWYgKHRoaXMudG9vbHRpcFJlZi5jdXJyZW50ICYmICF0aGlzLnRvb2x0aXBNYW5hZ2VyKSB7XG4gICAgICAgIHRoaXMudG9vbHRpcE1hbmFnZXIgPSBuZXcgVG9vbHRpcE1hbmFnZXIodGhpcy50b29sdGlwUmVmLmN1cnJlbnQpO1xuICAgICAgfVxuICAgICAgaWYgKCEhdGhpcy50b29sdGlwTWFuYWdlciAmJiAhdGhpcy50b29sdGlwUmVmLmN1cnJlbnQpIHtcbiAgICAgICAgdGhpcy5kaXNwb3NlVG9vbHRpcE1hbmFnZXIoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgaWYgKCEhdGhpcy50b29sdGlwTWFuYWdlcikge1xuICAgICAgdGhpcy5kaXNwb3NlVG9vbHRpcE1hbmFnZXIoKTtcbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSBkaXNwb3NlVG9vbHRpcE1hbmFnZXIoKSB7XG4gICAgdGhpcy50b29sdGlwTWFuYWdlcj8uZGlzcG9zZSgpO1xuICAgIHRoaXMudG9vbHRpcE1hbmFnZXIgPSB1bmRlZmluZWQ7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIGNvbnN0IGVycm9yczpBcnJheTxKU1guRWxlbWVudD4gPSBbXTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuZWxlbWVudC5lcnJvcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IGtleTogc3RyaW5nID0gXCJlcnJvclwiICsgaTtcbiAgICAgIGVycm9ycy5wdXNoKFxuICAgICAgICB0aGlzLmNyZWF0b3IucmVuZGVyRXJyb3Ioa2V5LCB0aGlzLmVsZW1lbnQuZXJyb3JzW2ldLCB0aGlzLmNzc0NsYXNzZXMpXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiAoXG4gICAgICA8ZGl2XG4gICAgICAgIHJvbGU9XCJhbGVydFwiXG4gICAgICAgIGFyaWEtbGl2ZT1cInBvbGl0ZVwiXG4gICAgICAgIGNsYXNzTmFtZT17dGhpcy5lbGVtZW50LmNzc0Vycm9yfVxuICAgICAgICBpZD17dGhpcy5pZH1cbiAgICAgICAgcmVmPXt0aGlzLnRvb2x0aXBSZWZ9XG4gICAgICA+XG4gICAgICAgIHtlcnJvcnN9XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG59XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBTdXJ2ZXlRdWVzdGlvbkFuZEVycm9yc1dyYXBwZWQgZXh0ZW5kcyBSZWFjdFN1cnZleUVsZW1lbnQge1xuICBbaW5kZXg6IHN0cmluZ106IGFueTtcbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0U3RhdGVFbGVtZW50KCk6IEJhc2Uge1xuICAgIHJldHVybiB0aGlzLnF1ZXN0aW9uO1xuICB9XG4gIHByb3RlY3RlZCBnZXQgcXVlc3Rpb24oKTogUXVlc3Rpb24ge1xuICAgIHJldHVybiB0aGlzLmdldFF1ZXN0aW9uKCk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldCBjcmVhdG9yKCk6IElTdXJ2ZXlDcmVhdG9yIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5jcmVhdG9yO1xuICB9XG4gIHByb3RlY3RlZCBnZXRRdWVzdGlvbigpOiBRdWVzdGlvbiB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMucXVlc3Rpb247XG4gIH1cbiAgcHJvdGVjdGVkIGdldCBpdGVtQ3NzKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuaXRlbUNzcztcbiAgfVxuICBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICBzdXBlci5jb21wb25lbnREaWRNb3VudCgpO1xuICAgIHRoaXMuZG9BZnRlclJlbmRlcigpO1xuICB9XG4gIGNvbXBvbmVudERpZFVwZGF0ZShwcmV2UHJvcHM6IGFueSwgcHJldlN0YXRlOiBhbnkpIHtcbiAgICBzdXBlci5jb21wb25lbnREaWRVcGRhdGUocHJldlByb3BzLCBwcmV2U3RhdGUpO1xuICAgIHRoaXMuZG9BZnRlclJlbmRlcigpO1xuICB9XG4gIHByb3RlY3RlZCBkb0FmdGVyUmVuZGVyKCkgeyB9XG4gIHByb3RlY3RlZCBjYW5SZW5kZXIoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhdGhpcy5xdWVzdGlvbjtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyRXJyb3JzKGVycm9yc0xvY2F0aW9uOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRTaG93RXJyb3JzKCkgPyAoXG4gICAgICA8U3VydmV5RWxlbWVudEVycm9yc1xuICAgICAgICBlbGVtZW50PXt0aGlzLnF1ZXN0aW9ufVxuICAgICAgICBjc3NDbGFzc2VzPXt0aGlzLmNzc0NsYXNzZXN9XG4gICAgICAgIGNyZWF0b3I9e3RoaXMuY3JlYXRvcn1cbiAgICAgICAgbG9jYXRpb249e2Vycm9yc0xvY2F0aW9ufVxuICAgICAgLz5cbiAgICApIDogbnVsbDtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyQ29udGVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgdmFyIGVycm9yc0xvY2F0aW9uID0gdGhpcy5jcmVhdG9yLnF1ZXN0aW9uRXJyb3JMb2NhdGlvbigpO1xuICAgIHZhciBlcnJvcnMgPSB0aGlzLnJlbmRlckVycm9ycyhlcnJvcnNMb2NhdGlvbik7XG4gICAgdmFyIGVycm9yc1RvcCA9IHRoaXMucXVlc3Rpb24uc2hvd0Vycm9yT25Ub3BcbiAgICAgID8gZXJyb3JzXG4gICAgICA6IG51bGw7XG4gICAgdmFyIGVycm9yc0JvdHRvbSA9IHRoaXMucXVlc3Rpb24uc2hvd0Vycm9yT25Cb3R0b21cbiAgICAgID8gZXJyb3JzXG4gICAgICA6IG51bGw7XG4gICAgdmFyIHJlbmRlcmVkUXVlc3Rpb24gPSB0aGlzLnJlbmRlclF1ZXN0aW9uKCk7XG4gICAgcmV0dXJuIChcbiAgICAgIDw+XG4gICAgICAgIHtlcnJvcnNUb3B9XG4gICAgICAgIHtyZW5kZXJlZFF1ZXN0aW9ufVxuICAgICAgICB7ZXJyb3JzQm90dG9tfVxuICAgICAgPC8+XG4gICAgKTtcbiAgfVxuICBwcm90ZWN0ZWQgYWJzdHJhY3QgcmVuZGVyRWxlbWVudCgpOiBKU1guRWxlbWVudDtcbiAgcHJvdGVjdGVkIGdldFNob3dFcnJvcnMoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMucXVlc3Rpb24uaXNWaXNpYmxlO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJRdWVzdGlvbigpOiBKU1guRWxlbWVudCB7XG4gICAgcmV0dXJuIFN1cnZleVF1ZXN0aW9uLnJlbmRlclF1ZXN0aW9uQm9keSh0aGlzLmNyZWF0b3IsIHRoaXMucXVlc3Rpb24pO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlRdWVzdGlvbkFuZEVycm9yc0NlbGwgZXh0ZW5kcyBTdXJ2ZXlRdWVzdGlvbkFuZEVycm9yc1dyYXBwZWQge1xuICBbaW5kZXg6IHN0cmluZ106IGFueTtcbiAgcHJvdGVjdGVkIGNlbGxSZWY6IFJlYWN0LlJlZk9iamVjdDxIVE1MVGFibGVDZWxsRWxlbWVudD47XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgdGhpcy5jZWxsUmVmID0gUmVhY3QuY3JlYXRlUmVmKCk7XG4gIH1cbiAgY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgc3VwZXIuY29tcG9uZW50V2lsbFVubW91bnQoKTtcbiAgICBpZiAodGhpcy5xdWVzdGlvbikge1xuICAgICAgdmFyIGVsID0gdGhpcy5jZWxsUmVmLmN1cnJlbnQ7XG4gICAgICBpZiAoISFlbCkge1xuICAgICAgICBlbC5yZW1vdmVBdHRyaWJ1dGUoXCJkYXRhLXJlbmRlcmVkXCIpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyRWxlbWVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgdmFyIHN0eWxlID0gdGhpcy5nZXRDZWxsU3R5bGUoKTtcbiAgICB2YXIgZXJyb3JzVG9vbHRpcCA9IHRoaXMucXVlc3Rpb24uaXNFcnJvcnNNb2RlVG9vbHRpcFxuICAgICAgPyB0aGlzLnJlbmRlckVycm9ycyhcInRvb2x0aXBcIilcbiAgICAgIDogbnVsbDtcbiAgICByZXR1cm4gKFxuICAgICAgPHRkXG4gICAgICAgIHJlZj17dGhpcy5jZWxsUmVmfVxuICAgICAgICBjbGFzc05hbWU9e3RoaXMuaXRlbUNzc31cbiAgICAgICAgZGF0YS1yZXNwb25zaXZlLXRpdGxlPXt0aGlzLmdldEhlYWRlclRleHQoKX1cbiAgICAgICAgdGl0bGU9e3RoaXMucHJvcHMuY2VsbC5nZXRUaXRsZSgpfVxuICAgICAgICBzdHlsZT17c3R5bGV9XG4gICAgICA+XG4gICAgICAgIHt0aGlzLndyYXBDZWxsKHRoaXMucHJvcHMuY2VsbCxcbiAgICAgICAgICAoXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17dGhpcy5jc3NDbGFzc2VzLmNlbGxRdWVzdGlvbldyYXBwZXJ9PlxuICAgICAgICAgICAgICB7dGhpcy5yZW5kZXJDb250ZW50KCl9XG4gICAgICAgICAgICAgIHtlcnJvcnNUb29sdGlwfVxuICAgICAgICAgICAgPC9kaXY+KVxuICAgICAgICApfVxuICAgICAgPC90ZD5cbiAgICApO1xuICB9XG4gIHByb3RlY3RlZCBnZXRDZWxsU3R5bGUoKTogYW55IHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0SGVhZGVyVGV4dCgpOiBzdHJpbmcge1xuICAgIHJldHVybiBcIlwiO1xuICB9XG4gIHByb3RlY3RlZCB3cmFwQ2VsbChcbiAgICBjZWxsOiBRdWVzdGlvbk1hdHJpeERyb3Bkb3duUmVuZGVyZWRDZWxsLFxuICAgIGVsZW1lbnQ6IEpTWC5FbGVtZW50XG4gICk6IEpTWC5FbGVtZW50IHtcbiAgICBpZiAoIWNlbGwpIHtcbiAgICAgIHJldHVybiBlbGVtZW50O1xuICAgIH1cbiAgICBjb25zdCBzdXJ2ZXk6IFN1cnZleU1vZGVsID0gdGhpcy5xdWVzdGlvbi5zdXJ2ZXkgYXMgU3VydmV5TW9kZWw7XG4gICAgbGV0IHdyYXBwZXI6IEpTWC5FbGVtZW50IHwgbnVsbCA9IG51bGw7XG4gICAgaWYgKHN1cnZleSkge1xuICAgICAgd3JhcHBlciA9IFJlYWN0U3VydmV5RWxlbWVudHNXcmFwcGVyLndyYXBNYXRyaXhDZWxsKHN1cnZleSwgZWxlbWVudCwgY2VsbCk7XG4gICAgfVxuICAgIHJldHVybiB3cmFwcGVyID8/IGVsZW1lbnQ7XG4gIH1cbn1cbiIsImltcG9ydCB7IFN1cnZleVF1ZXN0aW9uRWxlbWVudEJhc2UgfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uX2VsZW1lbnRcIjtcbmltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFJlYWN0RWxlbWVudEZhY3RvcnkgfSBmcm9tIFwiLi9lbGVtZW50LWZhY3RvcnlcIjtcbmltcG9ydCB7IFN1cnZleUVsZW1lbnRCYXNlIH0gZnJvbSBcIi4vcmVhY3RxdWVzdGlvbl9lbGVtZW50XCI7XG5pbXBvcnQgeyBTdmdJY29uIH0gZnJvbSBcIi4vY29tcG9uZW50cy9zdmctaWNvbi9zdmctaWNvblwiO1xuaW1wb3J0IHtcbiAgUXVlc3Rpb25CdXR0b25Hcm91cE1vZGVsLFxuICBCdXR0b25Hcm91cEl0ZW1WYWx1ZSxcbiAgQnV0dG9uR3JvdXBJdGVtTW9kZWwsXG59IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgUmVhY3RRdWVzdGlvbkZhY3RvcnkgfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uX2ZhY3RvcnlcIjtcblxuZXhwb3J0IGNsYXNzIFN1cnZleVF1ZXN0aW9uQnV0dG9uR3JvdXAgZXh0ZW5kcyBTdXJ2ZXlRdWVzdGlvbkVsZW1lbnRCYXNlIHtcbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IHF1ZXN0aW9uKCk6IFF1ZXN0aW9uQnV0dG9uR3JvdXBNb2RlbCB7XG4gICAgcmV0dXJuIHRoaXMucXVlc3Rpb25CYXNlIGFzIFF1ZXN0aW9uQnV0dG9uR3JvdXBNb2RlbDtcbiAgfVxuICBnZXRTdGF0ZUVsZW1lbnQoKSB7XG4gICAgcmV0dXJuIHRoaXMucXVlc3Rpb247XG4gIH1cbiAgcmVuZGVyRWxlbWVudCgpIHtcbiAgICBjb25zdCBpdGVtcyA9IHRoaXMucmVuZGVySXRlbXMoKTtcbiAgICByZXR1cm4gPGRpdiBjbGFzc05hbWU9e3RoaXMucXVlc3Rpb24uY3NzQ2xhc3Nlcy5yb290fT57aXRlbXN9PC9kaXY+O1xuICB9XG4gIHJlbmRlckl0ZW1zKCkge1xuICAgIHJldHVybiB0aGlzLnF1ZXN0aW9uLnZpc2libGVDaG9pY2VzLm1hcChcbiAgICAgIChpdGVtOiBCdXR0b25Hcm91cEl0ZW1WYWx1ZSwgaW5kZXg6IG51bWJlcikgPT4ge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIDxTdXJ2ZXlCdXR0b25Hcm91cEl0ZW1cbiAgICAgICAgICAgIGtleT17dGhpcy5xdWVzdGlvbi5pbnB1dElkICsgXCJfXCIgKyBpbmRleH1cbiAgICAgICAgICAgIGl0ZW09e2l0ZW19XG4gICAgICAgICAgICBxdWVzdGlvbj17dGhpcy5xdWVzdGlvbn1cbiAgICAgICAgICAgIGluZGV4PXtpbmRleH1cbiAgICAgICAgICA+PC9TdXJ2ZXlCdXR0b25Hcm91cEl0ZW0+XG4gICAgICAgICk7XG4gICAgICB9XG4gICAgKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgU3VydmV5QnV0dG9uR3JvdXBJdGVtIGV4dGVuZHMgU3VydmV5RWxlbWVudEJhc2U8YW55LCBhbnk+IHtcbiAgcHVibGljIG1vZGVsOiBCdXR0b25Hcm91cEl0ZW1Nb2RlbDtcbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgfVxuICBnZXQgaW5kZXgoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5pbmRleDtcbiAgfVxuICBnZXQgcXVlc3Rpb24oKTogUXVlc3Rpb25CdXR0b25Hcm91cE1vZGVsIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5xdWVzdGlvbjtcbiAgfVxuICBnZXQgaXRlbSgpOiBCdXR0b25Hcm91cEl0ZW1WYWx1ZSB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuaXRlbTtcbiAgfVxuICBnZXRTdGF0ZUVsZW1lbnQoKSB7XG4gICAgcmV0dXJuIHRoaXMuaXRlbTtcbiAgfVxuICBwdWJsaWMgcmVuZGVyRWxlbWVudCgpIHtcbiAgICB0aGlzLm1vZGVsID0gbmV3IEJ1dHRvbkdyb3VwSXRlbU1vZGVsKHRoaXMucXVlc3Rpb24sIHRoaXMuaXRlbSwgdGhpcy5pbmRleCk7XG4gICAgY29uc3QgaWNvbiA9IHRoaXMucmVuZGVySWNvbigpO1xuICAgIGNvbnN0IGlucHV0ID0gdGhpcy5yZW5kZXJJbnB1dCgpO1xuICAgIGNvbnN0IGNhcHRpb24gPSB0aGlzLnJlbmRlckNhcHRpb24oKTtcbiAgICByZXR1cm4gKFxuICAgICAgPGxhYmVsXG4gICAgICAgIHJvbGU9XCJyYWRpb1wiXG4gICAgICAgIGNsYXNzTmFtZT17dGhpcy5tb2RlbC5jc3MubGFiZWx9XG4gICAgICAgIHRpdGxlPXt0aGlzLm1vZGVsLmNhcHRpb24ucmVuZGVyZWRIdG1sfVxuICAgICAgPlxuICAgICAgICB7aW5wdXR9XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXt0aGlzLm1vZGVsLmNzcy5kZWNvcmF0b3J9PlxuICAgICAgICAgIHtpY29ufVxuICAgICAgICAgIHtjYXB0aW9ufVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvbGFiZWw+XG4gICAgKTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVySWNvbigpIHtcbiAgICBpZiAoISF0aGlzLm1vZGVsLmljb25OYW1lKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8U3ZnSWNvblxuICAgICAgICAgIGNsYXNzTmFtZT17dGhpcy5tb2RlbC5jc3MuaWNvbn1cbiAgICAgICAgICBpY29uTmFtZT17dGhpcy5tb2RlbC5pY29uTmFtZX1cbiAgICAgICAgICBzaXplPXt0aGlzLm1vZGVsLmljb25TaXplIHx8IDI0fVxuICAgICAgICA+PC9TdmdJY29uPlxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlcklucHV0KCkge1xuICAgIHJldHVybiAoXG4gICAgICA8aW5wdXRcbiAgICAgICAgY2xhc3NOYW1lPXt0aGlzLm1vZGVsLmNzcy5jb250cm9sfVxuICAgICAgICBpZD17dGhpcy5tb2RlbC5pZH1cbiAgICAgICAgdHlwZT1cInJhZGlvXCJcbiAgICAgICAgbmFtZT17dGhpcy5tb2RlbC5uYW1lfVxuICAgICAgICBjaGVja2VkPXt0aGlzLm1vZGVsLnNlbGVjdGVkfVxuICAgICAgICB2YWx1ZT17dGhpcy5tb2RlbC52YWx1ZX1cbiAgICAgICAgZGlzYWJsZWQ9e3RoaXMubW9kZWwucmVhZE9ubHl9XG4gICAgICAgIG9uQ2hhbmdlPXsoKSA9PiB7XG4gICAgICAgICAgdGhpcy5tb2RlbC5vbkNoYW5nZSgpO1xuICAgICAgICB9fVxuICAgICAgICBhcmlhLXJlcXVpcmVkPXt0aGlzLm1vZGVsLmlzUmVxdWlyZWR9XG4gICAgICAgIGFyaWEtbGFiZWw9e3RoaXMubW9kZWwuY2FwdGlvbi5yZW5kZXJlZEh0bWx9XG4gICAgICAgIGFyaWEtaW52YWxpZD17dGhpcy5tb2RlbC5oYXNFcnJvcnN9XG4gICAgICAgIGFyaWEtZGVzY3JpYmVkYnk9e3RoaXMubW9kZWwuZGVzY3JpYmVkQnl9XG4gICAgICAgIHJvbGU9XCJyYWRpb1wiXG4gICAgICAvPlxuICAgICk7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckNhcHRpb24oKSB7XG4gICAgaWYgKCF0aGlzLm1vZGVsLnNob3dDYXB0aW9uKSByZXR1cm4gbnVsbDtcbiAgICBsZXQgY2FwdGlvbiA9IHRoaXMucmVuZGVyTG9jU3RyaW5nKHRoaXMubW9kZWwuY2FwdGlvbik7XG4gICAgcmV0dXJuIChcbiAgICAgIDxzcGFuXG4gICAgICAgIGNsYXNzTmFtZT17dGhpcy5tb2RlbC5jc3MuY2FwdGlvbn1cbiAgICAgICAgdGl0bGU9e3RoaXMubW9kZWwuY2FwdGlvbi5yZW5kZXJlZEh0bWx9XG4gICAgICA+XG4gICAgICAgIHtjYXB0aW9ufVxuICAgICAgPC9zcGFuPlxuICAgICk7XG4gIH1cbn1cblxuLy8gUmVhY3RRdWVzdGlvbkZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJRdWVzdGlvbihcImJ1dHRvbmdyb3VwXCIsIHByb3BzID0+IHtcbi8vICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3VydmV5UXVlc3Rpb25CdXR0b25Hcm91cCwgcHJvcHMpO1xuLy8gfSk7XG4iLCJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7XG4gIFJlYWN0U3VydmV5RWxlbWVudCxcbiAgU3VydmV5UXVlc3Rpb25FbGVtZW50QmFzZSxcbn0gZnJvbSBcIi4vcmVhY3RxdWVzdGlvbl9lbGVtZW50XCI7XG5pbXBvcnQgeyBTdXJ2ZXlRdWVzdGlvbkNvbW1lbnRJdGVtIH0gZnJvbSBcIi4vcmVhY3RxdWVzdGlvbl9jb21tZW50XCI7XG5pbXBvcnQgeyBSZWFjdFF1ZXN0aW9uRmFjdG9yeSB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fZmFjdG9yeVwiO1xuaW1wb3J0IHsgUmVhY3RTdXJ2ZXlFbGVtZW50c1dyYXBwZXIgfSBmcm9tIFwiLi9yZWFjdHN1cnZleW1vZGVsXCI7XG5pbXBvcnQgeyBCYXNlLCBJdGVtVmFsdWUsIFN1cnZleU1vZGVsLCBRdWVzdGlvbkNoZWNrYm94TW9kZWwgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFJlYWN0RWxlbWVudEZhY3RvcnkgfSBmcm9tIFwiLi9lbGVtZW50LWZhY3RvcnlcIjtcblxuZXhwb3J0IGNsYXNzIFN1cnZleVF1ZXN0aW9uQ2hlY2tib3ggZXh0ZW5kcyBTdXJ2ZXlRdWVzdGlvbkVsZW1lbnRCYXNlIHtcbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IHF1ZXN0aW9uKCk6IFF1ZXN0aW9uQ2hlY2tib3hNb2RlbCB7XG4gICAgcmV0dXJuIHRoaXMucXVlc3Rpb25CYXNlIGFzIFF1ZXN0aW9uQ2hlY2tib3hNb2RlbDtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyRWxlbWVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgdmFyIGNzc0NsYXNzZXMgPSB0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXM7XG4gICAgcmV0dXJuIChcbiAgICAgIDxmaWVsZHNldFxuICAgICAgICByb2xlPVwicHJlc2VudGF0aW9uXCJcbiAgICAgICAgY2xhc3NOYW1lPXt0aGlzLnF1ZXN0aW9uLmdldFNlbGVjdEJhc2VSb290Q3NzKCl9XG4gICAgICAgIHJlZj17KGZpZWxkc2V0KSA9PiAodGhpcy5zZXRDb250cm9sKGZpZWxkc2V0KSl9XG4gICAgICA+XG4gICAgICAgIDxsZWdlbmQgcm9sZT1cInByZXNlbnRhdGlvblwiIGNsYXNzTmFtZT17XCJzdi1oaWRkZW5cIn0+PC9sZWdlbmQ+XG4gICAgICAgIHt0aGlzLmdldEhlYWRlcigpfVxuICAgICAgICB7dGhpcy5xdWVzdGlvbi5oYXNDb2x1bW5zXG4gICAgICAgICAgPyB0aGlzLmdldENvbHVtbmVkQm9keShjc3NDbGFzc2VzKVxuICAgICAgICAgIDogdGhpcy5nZXRCb2R5KGNzc0NsYXNzZXMpfVxuICAgICAgICB7dGhpcy5nZXRGb290ZXIoKX1cbiAgICAgICAge3RoaXMucXVlc3Rpb24uaXNPdGhlclNlbGVjdGVkID8gdGhpcy5yZW5kZXJPdGhlcigpIDogbnVsbH1cbiAgICAgIDwvZmllbGRzZXQ+XG4gICAgKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRIZWFkZXIoKSB7XG4gICAgaWYgKHRoaXMucXVlc3Rpb24uaGFzSGVhZEl0ZW1zKSB7XG4gICAgICByZXR1cm4gdGhpcy5xdWVzdGlvbi5oZWFkSXRlbXMubWFwKChpdGVtOiBhbnksIGlpOiBudW1iZXIpID0+XG4gICAgICAgIHRoaXMucmVuZGVySXRlbShcbiAgICAgICAgICBcIml0ZW1faFwiICsgaWksXG4gICAgICAgICAgaXRlbSxcbiAgICAgICAgICBmYWxzZSxcbiAgICAgICAgICB0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXNcbiAgICAgICAgKVxuICAgICAgKTtcbiAgICB9XG4gIH1cbiAgcHJvdGVjdGVkIGdldEZvb3RlcigpIHtcbiAgICBpZiAodGhpcy5xdWVzdGlvbi5oYXNGb290SXRlbXMpIHtcbiAgICAgIHJldHVybiB0aGlzLnF1ZXN0aW9uLmZvb3RJdGVtcy5tYXAoKGl0ZW06IGFueSwgaWk6IG51bWJlcikgPT5cbiAgICAgICAgdGhpcy5yZW5kZXJJdGVtKFxuICAgICAgICAgIFwiaXRlbV9mXCIgKyBpaSxcbiAgICAgICAgICBpdGVtLFxuICAgICAgICAgIGZhbHNlLFxuICAgICAgICAgIHRoaXMucXVlc3Rpb24uY3NzQ2xhc3Nlc1xuICAgICAgICApXG4gICAgICApO1xuICAgIH1cbiAgfVxuICBwcm90ZWN0ZWQgZ2V0Q29sdW1uZWRCb2R5KGNzc0NsYXNzZXM6IGFueSkge1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT17Y3NzQ2xhc3Nlcy5yb290TXVsdGlDb2x1bW59PlxuICAgICAgICB7dGhpcy5nZXRDb2x1bW5zKGNzc0NsYXNzZXMpfVxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0Q29sdW1ucyhjc3NDbGFzc2VzOiBhbnkpIHtcbiAgICByZXR1cm4gdGhpcy5xdWVzdGlvbi5jb2x1bW5zLm1hcCgoY29sdW1uOiBhbnksIGNpOiBudW1iZXIpID0+IHtcbiAgICAgIHZhciBpdGVtcyA9IGNvbHVtbi5tYXAoKGl0ZW06IGFueSwgaWk6IG51bWJlcikgPT5cbiAgICAgICAgdGhpcy5yZW5kZXJJdGVtKFxuICAgICAgICAgIFwiaXRlbVwiICsgaWksXG4gICAgICAgICAgaXRlbSxcbiAgICAgICAgICBjaSA9PT0gMCAmJiBpaSA9PT0gMCxcbiAgICAgICAgICBjc3NDbGFzc2VzLFxuICAgICAgICAgIFwiXCIgKyBjaSArIGlpXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8ZGl2IGtleT17XCJjb2x1bW5cIiArIGNpfSBjbGFzc05hbWU9e3RoaXMucXVlc3Rpb24uZ2V0Q29sdW1uQ2xhc3MoKX0gcm9sZT1cInByZXNlbnRhdGlvblwiPlxuICAgICAgICAgIHtpdGVtc31cbiAgICAgICAgPC9kaXY+XG4gICAgICApO1xuICAgIH0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldEJvZHkoY3NzQ2xhc3NlczogYW55KTogSlNYLkVsZW1lbnQge1xuICAgIGlmICh0aGlzLnF1ZXN0aW9uLmJsb2NrZWRSb3cpIHtcbiAgICAgIHJldHVybiA8ZGl2IGNsYXNzTmFtZT17Y3NzQ2xhc3Nlcy5yb290Um93fT57dGhpcy5nZXRJdGVtcyhjc3NDbGFzc2VzLCB0aGlzLnF1ZXN0aW9uLmRhdGFDaG9pY2VzKX08L2Rpdj47XG4gICAgfVxuICAgIGVsc2UgcmV0dXJuIDw+e3RoaXMuZ2V0SXRlbXMoY3NzQ2xhc3NlcywgdGhpcy5xdWVzdGlvbi5ib2R5SXRlbXMpfTwvPjtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0SXRlbXMoY3NzQ2xhc3NlczogYW55LCBjaG9pY2VzOiBBcnJheTxJdGVtVmFsdWU+KTogQXJyYXk8YW55PiB7XG4gICAgdmFyIHJlbmRlcmVkSXRlbXM6QXJyYXk8SlNYLkVsZW1lbnQ+ID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaG9pY2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgaXRlbSA9IGNob2ljZXNbaV07XG4gICAgICB2YXIga2V5ID0gXCJpdGVtXCIgKyBpO1xuICAgICAgdmFyIHJlbmRlcmVkSXRlbSA9IHRoaXMucmVuZGVySXRlbShrZXksIGl0ZW0sIGkgPT0gMCwgY3NzQ2xhc3NlcywgXCJcIiArIGkpO1xuICAgICAgaWYoISFyZW5kZXJlZEl0ZW0pIHtcbiAgICAgICAgcmVuZGVyZWRJdGVtcy5wdXNoKHJlbmRlcmVkSXRlbSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZW5kZXJlZEl0ZW1zO1xuICB9XG4gIHByb3RlY3RlZCBnZXQgdGV4dFN0eWxlKCk6IGFueSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlck90aGVyKCk6IEpTWC5FbGVtZW50IHtcbiAgICBsZXQgY3NzQ2xhc3NlcyA9IHRoaXMucXVlc3Rpb24uY3NzQ2xhc3NlcztcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJmb3JtLWdyb3VwXCI+XG4gICAgICAgIDxTdXJ2ZXlRdWVzdGlvbkNvbW1lbnRJdGVtXG4gICAgICAgICAgcXVlc3Rpb249e3RoaXMucXVlc3Rpb259XG4gICAgICAgICAgb3RoZXJDc3M9e2Nzc0NsYXNzZXMub3RoZXJ9XG4gICAgICAgICAgY3NzQ2xhc3Nlcz17Y3NzQ2xhc3Nlc31cbiAgICAgICAgICBpc0Rpc3BsYXlNb2RlPXt0aGlzLmlzRGlzcGxheU1vZGV9XG4gICAgICAgIC8+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJJdGVtKFxuICAgIGtleTogc3RyaW5nLFxuICAgIGl0ZW06IGFueSxcbiAgICBpc0ZpcnN0OiBib29sZWFuLFxuICAgIGNzc0NsYXNzZXM6IGFueSxcbiAgICBpbmRleD86IHN0cmluZ1xuICApOiBKU1guRWxlbWVudCB7XG4gICAgY29uc3QgcmVuZGVyZWRJdGVtID0gUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5jcmVhdGVFbGVtZW50KHRoaXMucXVlc3Rpb24uaXRlbUNvbXBvbmVudCwge1xuICAgICAga2V5OiBrZXksXG4gICAgICBxdWVzdGlvbjogdGhpcy5xdWVzdGlvbixcbiAgICAgIGNzc0NsYXNzZXM6IGNzc0NsYXNzZXMsXG4gICAgICBpc0Rpc3BsYXlNb2RlOiB0aGlzLmlzRGlzcGxheU1vZGUsXG4gICAgICBpdGVtOiBpdGVtLFxuICAgICAgdGV4dFN0eWxlOiB0aGlzLnRleHRTdHlsZSxcbiAgICAgIGluZGV4OiBpbmRleCxcbiAgICAgIGlzRmlyc3Q6IGlzRmlyc3QsXG4gICAgfSk7XG4gICAgY29uc3Qgc3VydmV5ID0gdGhpcy5xdWVzdGlvbi5zdXJ2ZXkgYXMgU3VydmV5TW9kZWw7XG4gICAgbGV0IHdyYXBwZWRJdGVtOiBKU1guRWxlbWVudCB8IG51bGwgPSBudWxsO1xuICAgIGlmICghIXN1cnZleSAmJiAhIXJlbmRlcmVkSXRlbSkge1xuICAgICAgd3JhcHBlZEl0ZW0gPSBSZWFjdFN1cnZleUVsZW1lbnRzV3JhcHBlci53cmFwSXRlbVZhbHVlKHN1cnZleSwgcmVuZGVyZWRJdGVtLCB0aGlzLnF1ZXN0aW9uLCBpdGVtKTtcbiAgICB9XG4gICAgcmV0dXJuIHdyYXBwZWRJdGVtID8/IHJlbmRlcmVkSXRlbTtcbiAgfVxufVxuZXhwb3J0IGNsYXNzIFN1cnZleVF1ZXN0aW9uQ2hlY2tib3hJdGVtIGV4dGVuZHMgUmVhY3RTdXJ2ZXlFbGVtZW50IHtcbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0U3RhdGVFbGVtZW50KCk6IEJhc2Uge1xuICAgIHJldHVybiB0aGlzLml0ZW07XG4gIH1cbiAgcHJvdGVjdGVkIGdldCBxdWVzdGlvbigpOiBRdWVzdGlvbkNoZWNrYm94TW9kZWwge1xuICAgIHJldHVybiB0aGlzLnByb3BzLnF1ZXN0aW9uO1xuICB9XG4gIHByb3RlY3RlZCBnZXQgaXRlbSgpOiBJdGVtVmFsdWUge1xuICAgIHJldHVybiB0aGlzLnByb3BzLml0ZW07XG4gIH1cbiAgcHJvdGVjdGVkIGdldCB0ZXh0U3R5bGUoKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy50ZXh0U3R5bGU7XG4gIH1cbiAgcHJvdGVjdGVkIGdldCBpc0ZpcnN0KCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuaXNGaXJzdDtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IGluZGV4KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuaW5kZXg7XG4gIH1cbiAgcHJpdmF0ZSBnZXQgaGlkZUNhcHRpb24oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuaGlkZUNhcHRpb24gPT09IHRydWU7XG4gIH1cbiAgcHVibGljIHNob3VsZENvbXBvbmVudFVwZGF0ZShuZXh0UHJvcHM6IGFueSwgbmV4dFN0YXRlOiBhbnkpOiBib29sZWFuIHtcbiAgICBpZiAoIXN1cGVyLnNob3VsZENvbXBvbmVudFVwZGF0ZShuZXh0UHJvcHMsIG5leHRTdGF0ZSkpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gKFxuICAgICAgIXRoaXMucXVlc3Rpb24uY3VzdG9tV2lkZ2V0IHx8XG4gICAgICAhIXRoaXMucXVlc3Rpb24uY3VzdG9tV2lkZ2V0RGF0YS5pc05lZWRSZW5kZXIgfHxcbiAgICAgICEhdGhpcy5xdWVzdGlvbi5jdXN0b21XaWRnZXQud2lkZ2V0SnNvbi5pc0RlZmF1bHRSZW5kZXIgfHxcbiAgICAgICEhdGhpcy5xdWVzdGlvbi5jdXN0b21XaWRnZXQud2lkZ2V0SnNvbi5yZW5kZXJcbiAgICApO1xuICB9XG4gIGhhbmRsZU9uQ2hhbmdlID0gKGV2ZW50OiBhbnkpID0+IHtcbiAgICB2YXIgbmV3VmFsdWU6IEFycmF5PGFueT4gPSBbXS5jb25jYXQodGhpcy5xdWVzdGlvbi5yZW5kZXJlZFZhbHVlIHx8IFtdKTtcbiAgICB2YXIgaW5kZXggPSBuZXdWYWx1ZS5pbmRleE9mKHRoaXMuaXRlbS52YWx1ZSk7XG4gICAgaWYgKGV2ZW50LnRhcmdldC5jaGVja2VkKSB7XG4gICAgICBpZiAoaW5kZXggPCAwKSB7XG4gICAgICAgIG5ld1ZhbHVlLnB1c2godGhpcy5pdGVtLnZhbHVlKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKGluZGV4ID4gLTEpIHtcbiAgICAgICAgbmV3VmFsdWUuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5xdWVzdGlvbi5yZW5kZXJlZFZhbHVlID0gbmV3VmFsdWU7XG4gIH1cbiAgc2VsZWN0QWxsQ2hhbmdlZCA9IChldmVudDogYW55KSA9PiB7XG4gICAgdGhpcy5xdWVzdGlvbi50b2dnbGVTZWxlY3RBbGwoKTtcbiAgfVxuICBwcm90ZWN0ZWQgY2FuUmVuZGVyKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIXRoaXMuaXRlbSAmJiAhIXRoaXMucXVlc3Rpb247XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIHZhciBpc0NoZWNrZWQgPSB0aGlzLnF1ZXN0aW9uLmlzSXRlbVNlbGVjdGVkKHRoaXMuaXRlbSk7XG4gICAgcmV0dXJuIHRoaXMucmVuZGVyQ2hlY2tib3goaXNDaGVja2VkLCBudWxsKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IGlucHV0U3R5bGUoKTogYW55IHtcbiAgICByZXR1cm4gbnVsbDsvL3sgbWFyZ2luUmlnaHQ6IFwiM3B4XCIgfTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyQ2hlY2tib3goXG4gICAgaXNDaGVja2VkOiBib29sZWFuLFxuICAgIG90aGVySXRlbTogSlNYLkVsZW1lbnQgfCBudWxsXG4gICk6IEpTWC5FbGVtZW50IHtcbiAgICB2YXIgaWQgPSB0aGlzLnF1ZXN0aW9uLmdldEl0ZW1JZCh0aGlzLml0ZW0pO1xuICAgIHZhciB0ZXh0ID0gIXRoaXMuaGlkZUNhcHRpb24gPyB0aGlzLnJlbmRlckxvY1N0cmluZyh0aGlzLml0ZW0ubG9jVGV4dCkgOiBcIlwiO1xuICAgIGxldCBpdGVtQ2xhc3MgPSB0aGlzLnF1ZXN0aW9uLmdldEl0ZW1DbGFzcyh0aGlzLml0ZW0pO1xuICAgIGxldCBsYWJlbENsYXNzID0gdGhpcy5xdWVzdGlvbi5nZXRMYWJlbENsYXNzKHRoaXMuaXRlbSk7XG4gICAgdmFyIG9uSXRlbUNoYW5nZWQgPVxuICAgICAgdGhpcy5pdGVtID09IHRoaXMucXVlc3Rpb24uc2VsZWN0QWxsSXRlbVxuICAgICAgICA/IHRoaXMuc2VsZWN0QWxsQ2hhbmdlZFxuICAgICAgICA6IHRoaXMuaGFuZGxlT25DaGFuZ2U7XG5cbiAgICB2YXIgbG9jVGV4dDogYW55ID0gdGhpcy5pdGVtLmxvY1RleHQ7XG5cbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9e2l0ZW1DbGFzc30gcm9sZT1cInByZXNlbnRhdGlvblwiPlxuICAgICAgICA8bGFiZWwgY2xhc3NOYW1lPXtsYWJlbENsYXNzfSBhcmlhLWxhYmVsPXt0aGlzLnF1ZXN0aW9uLmdldEFyaWFJdGVtTGFiZWwodGhpcy5pdGVtKX0+XG4gICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICBjbGFzc05hbWU9e3RoaXMuY3NzQ2xhc3Nlcy5pdGVtQ29udHJvbH1cbiAgICAgICAgICAgIHJvbGU9XCJvcHRpb25cIlxuICAgICAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgICAgICAgIG5hbWU9e3RoaXMucXVlc3Rpb24ubmFtZX1cbiAgICAgICAgICAgIHZhbHVlPXt0aGlzLml0ZW0udmFsdWUgIT0gXCJzZWxlY3RhbGxcIiA/IHRoaXMuaXRlbS52YWx1ZSA6IHVuZGVmaW5lZH1cbiAgICAgICAgICAgIGlkPXtpZH1cbiAgICAgICAgICAgIHN0eWxlPXt0aGlzLmlucHV0U3R5bGV9XG4gICAgICAgICAgICBkaXNhYmxlZD17IXRoaXMucXVlc3Rpb24uZ2V0SXRlbUVuYWJsZWQodGhpcy5pdGVtKX1cbiAgICAgICAgICAgIGNoZWNrZWQ9e2lzQ2hlY2tlZH1cbiAgICAgICAgICAgIG9uQ2hhbmdlPXtvbkl0ZW1DaGFuZ2VkfVxuICAgICAgICAgICAgYXJpYS1kZXNjcmliZWRieT17dGhpcy5xdWVzdGlvbi5hcmlhRGVzY3JpYmVkQnl9XG4gICAgICAgICAgLz5cbiAgICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmNzc0NsYXNzZXMubWF0ZXJpYWxEZWNvcmF0b3IgP1xuICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9e3RoaXMuY3NzQ2xhc3Nlcy5tYXRlcmlhbERlY29yYXRvcn0+XG4gICAgICAgICAgICAgICAge3RoaXMucXVlc3Rpb24uaXRlbVN2Z0ljb24gP1xuICAgICAgICAgICAgICAgICAgPHN2Z1xuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9e3RoaXMuY3NzQ2xhc3Nlcy5pdGVtRGVjb3JhdG9yfVxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8dXNlIHhsaW5rSHJlZj17dGhpcy5xdWVzdGlvbi5pdGVtU3ZnSWNvbn0+PC91c2U+XG4gICAgICAgICAgICAgICAgICA8L3N2Zz4gOlxuICAgICAgICAgICAgICAgICAgbnVsbFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgPC9zcGFuPiA6XG4gICAgICAgICAgICAgIG51bGxcbiAgICAgICAgICB9XG4gICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPXt0aGlzLmNzc0NsYXNzZXMuY29udHJvbExhYmVsfT5cbiAgICAgICAgICAgIHt0ZXh0fVxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC9sYWJlbD5cbiAgICAgICAge290aGVySXRlbX1cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbn1cblxuUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckVsZW1lbnQoXCJzdXJ2ZXktY2hlY2tib3gtaXRlbVwiLCAocHJvcHM6IGFueSkgPT4ge1xuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTdXJ2ZXlRdWVzdGlvbkNoZWNrYm94SXRlbSwgcHJvcHMpO1xufSk7XG5cblJlYWN0UXVlc3Rpb25GYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyUXVlc3Rpb24oXCJjaGVja2JveFwiLCAocHJvcHMpID0+IHtcbiAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3VydmV5UXVlc3Rpb25DaGVja2JveCwgcHJvcHMpO1xufSk7XG4iLCJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFJlYWN0U3VydmV5RWxlbWVudCwgU3VydmV5UXVlc3Rpb25VbmNvbnRyb2xsZWRFbGVtZW50IH0gZnJvbSBcIi4vcmVhY3RxdWVzdGlvbl9lbGVtZW50XCI7XG5pbXBvcnQgeyBRdWVzdGlvbkNvbW1lbnRNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgUmVhY3RRdWVzdGlvbkZhY3RvcnkgfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uX2ZhY3RvcnlcIjtcblxuZXhwb3J0IGNsYXNzIFN1cnZleVF1ZXN0aW9uQ29tbWVudCBleHRlbmRzIFN1cnZleVF1ZXN0aW9uVW5jb250cm9sbGVkRWxlbWVudDxRdWVzdGlvbkNvbW1lbnRNb2RlbD4ge1xuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICB2YXIgb25CbHVyOigoZTogYW55KSA9PiB2b2lkKSB8IHVuZGVmaW5lZCA9ICF0aGlzLnF1ZXN0aW9uLmlzSW5wdXRUZXh0VXBkYXRlID8gdGhpcy51cGRhdGVWYWx1ZU9uRXZlbnQgOiB1bmRlZmluZWQ7XG4gICAgdmFyIG9uSW5wdXQgPSAoZXZlbnQ6IGFueSkgPT4ge1xuICAgICAgaWYgKHRoaXMucXVlc3Rpb24uaXNJbnB1dFRleHRVcGRhdGUpXG4gICAgICAgIHRoaXMudXBkYXRlVmFsdWVPbkV2ZW50KGV2ZW50KTtcbiAgICAgIGVsc2VcbiAgICAgICAgdGhpcy5xdWVzdGlvbi51cGRhdGVFbGVtZW50KCk7XG4gICAgfTtcbiAgICBjb25zdCBwbGFjZWhvbGRlciA9IHRoaXMucXVlc3Rpb24ucmVuZGVyZWRQbGFjZWhvbGRlcjtcbiAgICBpZiAodGhpcy5xdWVzdGlvbi5pc1JlYWRPbmx5UmVuZGVyRGl2KCkpIHtcbiAgICAgIHJldHVybiA8ZGl2Pnt0aGlzLnF1ZXN0aW9uLnZhbHVlfTwvZGl2PjtcbiAgICB9XG4gICAgcmV0dXJuIChcbiAgICAgIDx0ZXh0YXJlYVxuICAgICAgICBpZD17dGhpcy5xdWVzdGlvbi5pbnB1dElkfVxuICAgICAgICBjbGFzc05hbWU9e3RoaXMucXVlc3Rpb24uY2xhc3NOYW1lfVxuICAgICAgICBkaXNhYmxlZD17IHRoaXMucXVlc3Rpb24uaXNJbnB1dFJlYWRPbmx5IH1cbiAgICAgICAgcmVhZE9ubHk9eyB0aGlzLnF1ZXN0aW9uLmlzSW5wdXRSZWFkT25seSB9XG4gICAgICAgIHJlZj17KHRleHRhcmVhKSA9PiAodGhpcy5zZXRDb250cm9sKHRleHRhcmVhKSl9XG4gICAgICAgIG1heExlbmd0aD17dGhpcy5xdWVzdGlvbi5nZXRNYXhMZW5ndGgoKX1cbiAgICAgICAgcGxhY2Vob2xkZXI9e3BsYWNlaG9sZGVyfVxuICAgICAgICBvbkJsdXI9e29uQmx1cn1cbiAgICAgICAgb25JbnB1dD17b25JbnB1dH1cbiAgICAgICAgb25LZXlEb3duPXsoZXZlbnQpID0+IHsgdGhpcy5xdWVzdGlvbi5vbktleURvd24oZXZlbnQpOyB9fVxuICAgICAgICBjb2xzPXt0aGlzLnF1ZXN0aW9uLmNvbHN9XG4gICAgICAgIHJvd3M9e3RoaXMucXVlc3Rpb24ucm93c31cbiAgICAgICAgYXJpYS1yZXF1aXJlZD17dGhpcy5xdWVzdGlvbi5hcmlhUmVxdWlyZWR9XG4gICAgICAgIGFyaWEtbGFiZWw9e3RoaXMucXVlc3Rpb24uYXJpYUxhYmVsfVxuICAgICAgICBhcmlhLWludmFsaWQ9e3RoaXMucXVlc3Rpb24uYXJpYUludmFsaWR9XG4gICAgICAgIGFyaWEtZGVzY3JpYmVkYnk9e3RoaXMucXVlc3Rpb24uYXJpYURlc2NyaWJlZEJ5fVxuICAgICAgICBzdHlsZT17eyByZXNpemU6IHRoaXMucXVlc3Rpb24ucmVzaXplU3R5bGUgfX1cbiAgICAgIC8+XG4gICAgKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgU3VydmV5UXVlc3Rpb25Db21tZW50SXRlbSBleHRlbmRzIFJlYWN0U3VydmV5RWxlbWVudCB7XG4gIHByb3RlY3RlZCBjYW5SZW5kZXIoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhdGhpcy5wcm9wcy5xdWVzdGlvbjtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyRWxlbWVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgbGV0IHF1ZXN0aW9uID0gdGhpcy5wcm9wcy5xdWVzdGlvbjtcbiAgICBsZXQgY2xhc3NOYW1lID0gdGhpcy5wcm9wcy5vdGhlckNzcyB8fCB0aGlzLmNzc0NsYXNzZXMuY29tbWVudDtcbiAgICBsZXQgaGFuZGxlT25DaGFuZ2UgPSAoZXZlbnQ6IGFueSkgPT4ge1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7IGNvbW1lbnQ6IGV2ZW50LnRhcmdldC52YWx1ZSB9KTtcbiAgICAgIHF1ZXN0aW9uLm9uQ29tbWVudENoYW5nZShldmVudCk7XG4gICAgfTtcbiAgICBsZXQgc3RhdGVDb21tZW50OiBzdHJpbmcgPSAhIXRoaXMuc3RhdGUgPyB0aGlzLnN0YXRlLmNvbW1lbnQgOiB1bmRlZmluZWQ7XG4gICAgaWYoc3RhdGVDb21tZW50ICE9PSB1bmRlZmluZWQgJiYgc3RhdGVDb21tZW50LnRyaW0oKSAhPT0gcXVlc3Rpb24uY29tbWVudCkge1xuICAgICAgc3RhdGVDb21tZW50ID0gcXVlc3Rpb24uY29tbWVudDtcbiAgICB9XG4gICAgbGV0IGNvbW1lbnQgPSBzdGF0ZUNvbW1lbnQgIT09IHVuZGVmaW5lZCA/IHN0YXRlQ29tbWVudCA6IHF1ZXN0aW9uLmNvbW1lbnQgfHwgXCJcIjtcblxuICAgIGlmIChxdWVzdGlvbi5pc1JlYWRPbmx5UmVuZGVyRGl2KCkpIHtcbiAgICAgIHJldHVybiA8ZGl2Pntjb21tZW50fTwvZGl2PjtcbiAgICB9XG4gICAgcmV0dXJuIChcbiAgICAgIDx0ZXh0YXJlYVxuICAgICAgICBjbGFzc05hbWU9e2NsYXNzTmFtZX1cbiAgICAgICAgdmFsdWU9e2NvbW1lbnR9XG4gICAgICAgIGRpc2FibGVkPXt0aGlzLmlzRGlzcGxheU1vZGV9XG4gICAgICAgIG1heExlbmd0aD17cXVlc3Rpb24uZ2V0T3RoZXJzTWF4TGVuZ3RoKCl9XG4gICAgICAgIHBsYWNlaG9sZGVyPXtxdWVzdGlvbi5jb21tZW50T3JPdGhlclBsYWNlaG9sZGVyfVxuICAgICAgICBvbkNoYW5nZT17aGFuZGxlT25DaGFuZ2V9XG4gICAgICAgIG9uQmx1cj17KGUpID0+IHsgcXVlc3Rpb24ub25Db21tZW50Q2hhbmdlKGUpOyBoYW5kbGVPbkNoYW5nZShlKTsgfSB9XG4gICAgICAgIG9uSW5wdXQ9eyhlKSA9PiBxdWVzdGlvbi5vbkNvbW1lbnRJbnB1dChlKX1cbiAgICAgICAgYXJpYS1yZXF1aXJlZD17cXVlc3Rpb24uaXNSZXF1aXJlZH1cbiAgICAgICAgYXJpYS1sYWJlbD17cXVlc3Rpb24ubG9jVGl0bGUucmVuZGVyZWRIdG1sfVxuICAgICAgICBzdHlsZT17eyByZXNpemU6IHF1ZXN0aW9uLnJlc2l6ZVN0eWxlIH19XG4gICAgICAvPlxuICAgICk7XG4gIH1cbn1cblxuUmVhY3RRdWVzdGlvbkZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJRdWVzdGlvbihcImNvbW1lbnRcIiwgKHByb3BzKSA9PiB7XG4gIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFN1cnZleVF1ZXN0aW9uQ29tbWVudCwgcHJvcHMpO1xufSk7XG4iLCJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFN1cnZleVF1ZXN0aW9uVW5jb250cm9sbGVkRWxlbWVudCB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fZWxlbWVudFwiO1xuaW1wb3J0IHsgU3VydmV5UXVlc3Rpb24gfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uXCI7XG5pbXBvcnQgeyBCYXNlLCBRdWVzdGlvbkN1c3RvbU1vZGVsLCBRdWVzdGlvbkNvbXBvc2l0ZU1vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBSZWFjdFF1ZXN0aW9uRmFjdG9yeSB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fZmFjdG9yeVwiO1xuaW1wb3J0IHsgU3VydmV5UGFuZWwgfSBmcm9tIFwiLi9wYW5lbFwiO1xuXG5leHBvcnQgY2xhc3MgU3VydmV5UXVlc3Rpb25DdXN0b20gZXh0ZW5kcyBTdXJ2ZXlRdWVzdGlvblVuY29udHJvbGxlZEVsZW1lbnQ8UXVlc3Rpb25DdXN0b21Nb2RlbD4ge1xuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICB9XG4gIHByb3RlY3RlZCBnZXRTdGF0ZUVsZW1lbnRzKCk6IEFycmF5PEJhc2U+IHtcbiAgICBjb25zdCByZXMgPSBzdXBlci5nZXRTdGF0ZUVsZW1lbnRzKCk7XG4gICAgaWYoISF0aGlzLnF1ZXN0aW9uLmNvbnRlbnRRdWVzdGlvbikge1xuICAgICAgcmVzLnB1c2godGhpcy5xdWVzdGlvbi5jb250ZW50UXVlc3Rpb24pO1xuICAgIH1cbiAgICByZXR1cm4gcmVzO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICByZXR1cm4gU3VydmV5UXVlc3Rpb24ucmVuZGVyUXVlc3Rpb25Cb2R5KFxuICAgICAgdGhpcy5jcmVhdG9yLFxuICAgICAgdGhpcy5xdWVzdGlvbi5jb250ZW50UXVlc3Rpb25cbiAgICApO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlRdWVzdGlvbkNvbXBvc2l0ZSBleHRlbmRzIFN1cnZleVF1ZXN0aW9uVW5jb250cm9sbGVkRWxlbWVudDxRdWVzdGlvbkNvbXBvc2l0ZU1vZGVsPiB7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gIH1cbiAgcHJvdGVjdGVkIGNhblJlbmRlcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISF0aGlzLnF1ZXN0aW9uLmNvbnRlbnRQYW5lbDtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyRWxlbWVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxTdXJ2ZXlQYW5lbFxuICAgICAgICBlbGVtZW50PXt0aGlzLnF1ZXN0aW9uLmNvbnRlbnRQYW5lbH1cbiAgICAgICAgY3JlYXRvcj17dGhpcy5jcmVhdG9yfVxuICAgICAgICBzdXJ2ZXk9e3RoaXMucXVlc3Rpb24uc3VydmV5fVxuICAgICAgPjwvU3VydmV5UGFuZWw+XG4gICAgKTtcbiAgfVxufVxuXG5SZWFjdFF1ZXN0aW9uRmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlclF1ZXN0aW9uKFwiY3VzdG9tXCIsIChwcm9wcykgPT4ge1xuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTdXJ2ZXlRdWVzdGlvbkN1c3RvbSwgcHJvcHMpO1xufSk7XG5SZWFjdFF1ZXN0aW9uRmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlclF1ZXN0aW9uKFwiY29tcG9zaXRlXCIsIChwcm9wcykgPT4ge1xuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTdXJ2ZXlRdWVzdGlvbkNvbXBvc2l0ZSwgcHJvcHMpO1xufSk7XG4iLCJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFF1ZXN0aW9uIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBSZWFjdFF1ZXN0aW9uRmFjdG9yeSB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fZmFjdG9yeVwiO1xuaW1wb3J0IHsgU3VydmV5UXVlc3Rpb25Ecm9wZG93bkJhc2UgfSBmcm9tIFwiLi9kcm9wZG93bi1iYXNlXCI7XG5pbXBvcnQgeyBTdXJ2ZXlRdWVzdGlvbkNvbW1lbnRJdGVtIH0gZnJvbSBcIi4vcmVhY3RxdWVzdGlvbl9jb21tZW50XCI7XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlRdWVzdGlvbkRyb3Bkb3duIGV4dGVuZHMgU3VydmV5UXVlc3Rpb25Ecm9wZG93bkJhc2U8UXVlc3Rpb24+IHtcbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgfVxuXG4gIHByb3RlY3RlZCByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICBjb25zdCBjc3NDbGFzc2VzID0gdGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzO1xuICAgIGNvbnN0IGNvbW1lbnQgPSB0aGlzLnF1ZXN0aW9uLmlzT3RoZXJTZWxlY3RlZCA/IHRoaXMucmVuZGVyT3RoZXIoY3NzQ2xhc3NlcykgOiBudWxsO1xuICAgIGNvbnN0IHNlbGVjdCA9IHRoaXMucmVuZGVyU2VsZWN0KGNzc0NsYXNzZXMpO1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5yZW5kZXJDc3NSb290fT5cbiAgICAgICAge3NlbGVjdH1cbiAgICAgICAge2NvbW1lbnR9XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG59XG5cblJlYWN0UXVlc3Rpb25GYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyUXVlc3Rpb24oXCJkcm9wZG93blwiLCAocHJvcHMpID0+IHtcbiAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3VydmV5UXVlc3Rpb25Ecm9wZG93biwgcHJvcHMpO1xufSk7IiwiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBCYXNlLCBBcnJheUNoYW5nZXMsIFN1cnZleU1vZGVsLCBIZWxwZXJzLCBQYW5lbE1vZGVsLCBMb2NhbGl6YWJsZVN0cmluZywgUXVlc3Rpb24gfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IElTdXJ2ZXlDcmVhdG9yIH0gZnJvbSBcIi4vcmVhY3RxdWVzdGlvblwiO1xuaW1wb3J0IHsgUmVhY3RFbGVtZW50RmFjdG9yeSB9IGZyb20gXCIuL2VsZW1lbnQtZmFjdG9yeVwiO1xuaW1wb3J0IHsgUmVhY3RTdXJ2ZXlFbGVtZW50c1dyYXBwZXIgfSBmcm9tIFwiLi9yZWFjdHN1cnZleW1vZGVsXCI7XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlFbGVtZW50QmFzZTxQLCBTPiBleHRlbmRzIFJlYWN0LkNvbXBvbmVudDxQLCBTPiB7XG4gIHB1YmxpYyBzdGF0aWMgcmVuZGVyTG9jU3RyaW5nKFxuICAgIGxvY1N0cjogTG9jYWxpemFibGVTdHJpbmcsXG4gICAgc3R5bGU6IGFueSA9IG51bGwsXG4gICAga2V5Pzogc3RyaW5nXG4gICk6IEpTWC5FbGVtZW50IHtcbiAgICByZXR1cm4gUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5jcmVhdGVFbGVtZW50KGxvY1N0ci5yZW5kZXJBcywge1xuICAgICAgbG9jU3RyOiBsb2NTdHIucmVuZGVyQXNEYXRhLFxuICAgICAgc3R5bGU6IHN0eWxlLFxuICAgICAga2V5OiBrZXksXG4gICAgfSk7XG4gIH1cbiAgcHVibGljIHN0YXRpYyByZW5kZXJRdWVzdGlvbkRlc2NyaXB0aW9uKHF1ZXN0aW9uOiBRdWVzdGlvbiB8IFBhbmVsTW9kZWwpOiBKU1guRWxlbWVudCB7XG4gICAgdmFyIGRlc2NyaXB0aW9uVGV4dCA9IFN1cnZleUVsZW1lbnRCYXNlLnJlbmRlckxvY1N0cmluZyhxdWVzdGlvbi5sb2NEZXNjcmlwdGlvbik7XG4gICAgcmV0dXJuIDxkaXYgY2xhc3NOYW1lPXtxdWVzdGlvbi5jc3NEZXNjcmlwdGlvbn0+e2Rlc2NyaXB0aW9uVGV4dH08L2Rpdj47XG4gIH1cbiAgcHJpdmF0ZSBjaGFuZ2VkU3RhdGVQcm9wTmFtZVZhbHVlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gIH1cbiAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgdGhpcy5tYWtlQmFzZUVsZW1lbnRzUmVhY3QoKTtcbiAgfVxuICBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICB0aGlzLnVuTWFrZUJhc2VFbGVtZW50c1JlYWN0KCk7XG4gIH1cbiAgY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wczogYW55LCBwcmV2U3RhdGU6IGFueSkge1xuICAgIHRoaXMubWFrZUJhc2VFbGVtZW50c1JlYWN0KCk7XG4gIH1cbiAgcHJpdmF0ZSBfYWxsb3dDb21wb25lbnRVcGRhdGUgPSB0cnVlO1xuICBwcm90ZWN0ZWQgYWxsb3dDb21wb25lbnRVcGRhdGUoKSB7XG4gICAgdGhpcy5fYWxsb3dDb21wb25lbnRVcGRhdGUgPSB0cnVlO1xuICAgIHRoaXMuZm9yY2VVcGRhdGUoKTtcbiAgfVxuICBwcm90ZWN0ZWQgZGVueUNvbXBvbmVudFVwZGF0ZSgpIHtcbiAgICB0aGlzLl9hbGxvd0NvbXBvbmVudFVwZGF0ZSA9IGZhbHNlO1xuICB9XG4gIHNob3VsZENvbXBvbmVudFVwZGF0ZShuZXh0UHJvcHM6YW55LCBuZXh0U3RhdGU6YW55KTpib29sZWFuIHtcbiAgICBpZih0aGlzLl9hbGxvd0NvbXBvbmVudFVwZGF0ZSkge1xuICAgICAgdGhpcy51bk1ha2VCYXNlRWxlbWVudHNSZWFjdCgpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fYWxsb3dDb21wb25lbnRVcGRhdGU7XG4gIH1cbiAgcmVuZGVyKCk6IEpTWC5FbGVtZW50IHwgbnVsbCB7XG4gICAgaWYgKCF0aGlzLmNhblJlbmRlcigpKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICB0aGlzLnN0YXJ0RW5kUmVuZGVyaW5nKDEpO1xuICAgIHZhciByZXMgPSB0aGlzLnJlbmRlckVsZW1lbnQoKTtcbiAgICB0aGlzLnN0YXJ0RW5kUmVuZGVyaW5nKC0xKTtcblxuICAgIGlmKCEhcmVzKSB7XG4gICAgICByZXMgPSB0aGlzLndyYXBFbGVtZW50KHJlcyk7XG4gICAgfVxuXG4gICAgdGhpcy5jaGFuZ2VkU3RhdGVQcm9wTmFtZVZhbHVlID0gdW5kZWZpbmVkO1xuICAgIHJldHVybiByZXM7XG4gIH1cbiAgcHJvdGVjdGVkIHdyYXBFbGVtZW50KGVsZW1lbnQ6IEpTWC5FbGVtZW50KTogSlNYLkVsZW1lbnQge1xuICAgIHJldHVybiBlbGVtZW50O1xuICB9XG4gIHByb3RlY3RlZCBnZXQgaXNSZW5kZXJpbmcoKTogYm9vbGVhbiB7XG4gICAgdmFyIHN0YXRlRWxzOiBBcnJheTxhbnk+ID0gdGhpcy5nZXRSZW5kZXJlZEVsZW1lbnRzKCk7XG4gICAgZm9yKGxldCBzdGF0ZUVsIG9mIHN0YXRlRWxzKSB7XG4gICAgICBpZihzdGF0ZUVsLnJlYWN0UmVuZGVyaW5nID4gMCkgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0UmVuZGVyZWRFbGVtZW50cygpOiBCYXNlW10ge1xuICAgIHJldHVybiB0aGlzLmdldFN0YXRlRWxlbWVudHMoKTtcbiAgfVxuICBwcml2YXRlIHN0YXJ0RW5kUmVuZGVyaW5nKHZhbDogbnVtYmVyKSB7XG4gICAgdmFyIHN0YXRlRWxzOiBBcnJheTxhbnk+ID0gdGhpcy5nZXRSZW5kZXJlZEVsZW1lbnRzKCk7XG4gICAgZm9yKGxldCBzdGF0ZUVsIG9mIHN0YXRlRWxzKSB7XG4gICAgICBpZiAoIXN0YXRlRWwucmVhY3RSZW5kZXJpbmcpIHN0YXRlRWwucmVhY3RSZW5kZXJpbmcgPSAwO1xuICAgICAgc3RhdGVFbC5yZWFjdFJlbmRlcmluZyArPSB2YWw7XG4gICAgfVxuICB9XG4gIHByb3RlY3RlZCBjYW5SZW5kZXIoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQgfCBudWxsIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IGNoYW5nZWRTdGF0ZVByb3BOYW1lKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuY2hhbmdlZFN0YXRlUHJvcE5hbWVWYWx1ZTtcbiAgfVxuICBwcml2YXRlIG1ha2VCYXNlRWxlbWVudHNSZWFjdCgpIHtcbiAgICB2YXIgZWxzID0gdGhpcy5nZXRTdGF0ZUVsZW1lbnRzKCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBlbHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHRoaXMubWFrZUJhc2VFbGVtZW50UmVhY3QoZWxzW2ldKTtcbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSB1bk1ha2VCYXNlRWxlbWVudHNSZWFjdCgpIHtcbiAgICB2YXIgZWxzID0gdGhpcy5nZXRTdGF0ZUVsZW1lbnRzKCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBlbHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHRoaXMudW5NYWtlQmFzZUVsZW1lbnRSZWFjdChlbHNbaV0pO1xuICAgIH1cbiAgfVxuICBwcm90ZWN0ZWQgZ2V0U3RhdGVFbGVtZW50cygpOiBBcnJheTxCYXNlPiB7XG4gICAgdmFyIGVsID0gdGhpcy5nZXRTdGF0ZUVsZW1lbnQoKTtcbiAgICByZXR1cm4gISFlbCA/IFtlbF0gOiBbXTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0U3RhdGVFbGVtZW50KCk6IEJhc2UgfCBudWxsIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IGlzRGlzcGxheU1vZGUoKTogYm9vbGVhbiB7XG4gICAgY29uc3QgcHJvcHM6IGFueSA9IHRoaXMucHJvcHM7XG4gICAgcmV0dXJuIHByb3BzLmlzRGlzcGxheU1vZGUgfHwgZmFsc2U7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckxvY1N0cmluZyhcbiAgICBsb2NTdHI6IExvY2FsaXphYmxlU3RyaW5nLFxuICAgIHN0eWxlOiBhbnkgPSBudWxsLFxuICAgIGtleT86IHN0cmluZ1xuICApOiBKU1guRWxlbWVudCB7XG4gICAgcmV0dXJuIFN1cnZleUVsZW1lbnRCYXNlLnJlbmRlckxvY1N0cmluZyhsb2NTdHIsIHN0eWxlLCBrZXkpO1xuICB9XG4gIHByaXZhdGUgY2FuTWFrZVJlYWN0KHN0YXRlRWxlbWVudDogQmFzZSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIXN0YXRlRWxlbWVudCAmJiAhIXN0YXRlRWxlbWVudC5pdGVyYXRlUHJvcGVydGllc0hhc2g7XG4gIH1cbiAgcHJpdmF0ZSBtYWtlQmFzZUVsZW1lbnRSZWFjdChzdGF0ZUVsZW1lbnQ6IEJhc2UpIHtcbiAgICBpZiAoIXRoaXMuY2FuTWFrZVJlYWN0KHN0YXRlRWxlbWVudCkpIHJldHVybjtcbiAgICBzdGF0ZUVsZW1lbnQuaXRlcmF0ZVByb3BlcnRpZXNIYXNoKChoYXNoLCBrZXkpID0+IHtcbiAgICAgIGlmICghdGhpcy5jYW5Vc2VQcm9wSW5TdGF0ZShrZXkpKSByZXR1cm47XG4gICAgICB2YXIgdmFsOiBhbnkgPSBoYXNoW2tleV07XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWwpKSB7XG4gICAgICAgIHZhciB2YWw6IGFueSA9IHZhbDtcbiAgICAgICAgdmFsW1wib25BcnJheUNoYW5nZWRcIl0gPSAoYXJyYXlDaGFuZ2VzOiBBcnJheUNoYW5nZXMpID0+IHtcbiAgICAgICAgICBpZiAodGhpcy5pc1JlbmRlcmluZykgcmV0dXJuO1xuICAgICAgICAgIHRoaXMuY2hhbmdlZFN0YXRlUHJvcE5hbWVWYWx1ZSA9IGtleTtcbiAgICAgICAgICB0aGlzLnNldFN0YXRlKChzdGF0ZTogYW55KSA9PiB7XG4gICAgICAgICAgICB2YXIgbmV3U3RhdGU6IHsgW2luZGV4OiBzdHJpbmddOiBhbnkgfSA9IHt9O1xuICAgICAgICAgICAgbmV3U3RhdGVba2V5XSA9IHZhbDtcbiAgICAgICAgICAgIHJldHVybiBuZXdTdGF0ZSBhcyBTO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9O1xuICAgICAgfVxuICAgIH0pO1xuICAgIHN0YXRlRWxlbWVudC5zZXRQcm9wZXJ0eVZhbHVlQ29yZUhhbmRsZXIgPSAoXG4gICAgICBoYXNoOiBhbnksXG4gICAgICBrZXk6IHN0cmluZyxcbiAgICAgIHZhbDogYW55XG4gICAgKSA9PiB7XG4gICAgICBpZiAoaGFzaFtrZXldICE9PSB2YWwpIHtcbiAgICAgICAgaGFzaFtrZXldID0gdmFsO1xuICAgICAgICBpZiAoIXRoaXMuY2FuVXNlUHJvcEluU3RhdGUoa2V5KSkgcmV0dXJuO1xuICAgICAgICBpZiAodGhpcy5pc1JlbmRlcmluZykgcmV0dXJuO1xuICAgICAgICB0aGlzLmNoYW5nZWRTdGF0ZVByb3BOYW1lVmFsdWUgPSBrZXk7XG4gICAgICAgIHRoaXMuc2V0U3RhdGUoKHN0YXRlOiBhbnkpID0+IHtcbiAgICAgICAgICB2YXIgbmV3U3RhdGU6IHsgW2luZGV4OiBzdHJpbmddOiBhbnkgfSA9IHt9O1xuICAgICAgICAgIG5ld1N0YXRlW2tleV0gPSB2YWw7XG4gICAgICAgICAgcmV0dXJuIG5ld1N0YXRlIGFzIFM7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH07XG4gIH1cbiAgcHJvdGVjdGVkIGNhblVzZVByb3BJblN0YXRlKGtleTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcHJpdmF0ZSB1bk1ha2VCYXNlRWxlbWVudFJlYWN0KHN0YXRlRWxlbWVudDogQmFzZSkge1xuICAgIGlmICghdGhpcy5jYW5NYWtlUmVhY3Qoc3RhdGVFbGVtZW50KSkgcmV0dXJuO1xuICAgIHN0YXRlRWxlbWVudC5zZXRQcm9wZXJ0eVZhbHVlQ29yZUhhbmRsZXIgPSB1bmRlZmluZWQgYXMgYW55O1xuICAgIHN0YXRlRWxlbWVudC5pdGVyYXRlUHJvcGVydGllc0hhc2goKGhhc2gsIGtleSkgPT4ge1xuICAgICAgdmFyIHZhbDogYW55ID0gaGFzaFtrZXldO1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsKSkge1xuICAgICAgICB2YXIgdmFsOiBhbnkgPSB2YWw7XG4gICAgICAgIHZhbFtcIm9uQXJyYXlDaGFuZ2VkXCJdID0gKCkgPT4ge307XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFJlYWN0U3VydmV5RWxlbWVudCBleHRlbmRzIFN1cnZleUVsZW1lbnRCYXNlPGFueSwgYW55PiB7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldCBjc3NDbGFzc2VzKCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuY3NzQ2xhc3NlcztcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgU3VydmV5UXVlc3Rpb25FbGVtZW50QmFzZSBleHRlbmRzIFN1cnZleUVsZW1lbnRCYXNlPGFueSwgYW55PiB7XG4gIGNvbnRyb2w6IEhUTUxFbGVtZW50O1xuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICB9XG4gIGNvbXBvbmVudERpZFVwZGF0ZShwcmV2UHJvcHM6IGFueSwgcHJldlN0YXRlOiBhbnkpIHtcbiAgICBzdXBlci5jb21wb25lbnREaWRVcGRhdGUocHJldlByb3BzLCBwcmV2U3RhdGUpO1xuICAgIHRoaXMudXBkYXRlRG9tRWxlbWVudCgpO1xuICB9XG4gIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIHN1cGVyLmNvbXBvbmVudERpZE1vdW50KCk7XG4gICAgdGhpcy51cGRhdGVEb21FbGVtZW50KCk7XG4gIH1cbiAgY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgc3VwZXIuY29tcG9uZW50V2lsbFVubW91bnQoKTtcbiAgICBpZiAoISF0aGlzLnF1ZXN0aW9uQmFzZSkge1xuICAgICAgY29uc3QgZWw6IEhUTUxFbGVtZW50ID0gdGhpcy5jb250cm9sO1xuICAgICAgdGhpcy5xdWVzdGlvbkJhc2UuYmVmb3JlRGVzdHJveVF1ZXN0aW9uRWxlbWVudChlbCk7XG4gICAgICBpZiAoISFlbCkge1xuICAgICAgICBlbC5yZW1vdmVBdHRyaWJ1dGUoXCJkYXRhLXJlbmRlcmVkXCIpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBwcm90ZWN0ZWQgdXBkYXRlRG9tRWxlbWVudCgpIHtcbiAgICBjb25zdCBlbDogSFRNTEVsZW1lbnQgPSB0aGlzLmNvbnRyb2w7XG4gICAgaWYgKCEhZWwpIHtcbiAgICAgIGlmIChlbC5nZXRBdHRyaWJ1dGUoXCJkYXRhLXJlbmRlcmVkXCIpICE9PSBcInJcIikge1xuICAgICAgICBlbC5zZXRBdHRyaWJ1dGUoXCJkYXRhLXJlbmRlcmVkXCIsIFwiclwiKTtcbiAgICAgICAgdGhpcy5xdWVzdGlvbkJhc2UuYWZ0ZXJSZW5kZXJRdWVzdGlvbkVsZW1lbnQoZWwpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IHF1ZXN0aW9uQmFzZSgpOiBRdWVzdGlvbiB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMucXVlc3Rpb247XG4gIH1cbiAgcHJvdGVjdGVkIGdldFJlbmRlcmVkRWxlbWVudHMoKTogQmFzZVtdIHtcbiAgICByZXR1cm4gW3RoaXMucXVlc3Rpb25CYXNlXTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IGNyZWF0b3IoKTogSVN1cnZleUNyZWF0b3Ige1xuICAgIHJldHVybiB0aGlzLnByb3BzLmNyZWF0b3I7XG4gIH1cbiAgcHJvdGVjdGVkIGNhblJlbmRlcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISF0aGlzLnF1ZXN0aW9uQmFzZSAmJiAhIXRoaXMuY3JlYXRvcjtcbiAgfVxuICBwdWJsaWMgc2hvdWxkQ29tcG9uZW50VXBkYXRlKG5leHRQcm9wczogYW55LCBuZXh0U3RhdGU6IGFueSk6IGJvb2xlYW4ge1xuICAgIGlmICghc3VwZXIuc2hvdWxkQ29tcG9uZW50VXBkYXRlKG5leHRQcm9wcywgbmV4dFN0YXRlKSkgcmV0dXJuIGZhbHNlO1xuXG4gICAgcmV0dXJuIChcbiAgICAgICF0aGlzLnF1ZXN0aW9uQmFzZS5jdXN0b21XaWRnZXQgfHxcbiAgICAgICEhdGhpcy5xdWVzdGlvbkJhc2UuY3VzdG9tV2lkZ2V0RGF0YS5pc05lZWRSZW5kZXIgfHxcbiAgICAgICEhdGhpcy5xdWVzdGlvbkJhc2UuY3VzdG9tV2lkZ2V0LndpZGdldEpzb24uaXNEZWZhdWx0UmVuZGVyIHx8XG4gICAgICAhIXRoaXMucXVlc3Rpb25CYXNlLmN1c3RvbVdpZGdldC53aWRnZXRKc29uLnJlbmRlclxuICAgICk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldCBpc0Rpc3BsYXlNb2RlKCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHByb3BzOiBhbnkgPSB0aGlzLnByb3BzO1xuICAgIHJldHVybiAoXG4gICAgICBwcm9wcy5pc0Rpc3BsYXlNb2RlIHx8XG4gICAgICAoISF0aGlzLnF1ZXN0aW9uQmFzZSAmJiB0aGlzLnF1ZXN0aW9uQmFzZS5pc0lucHV0UmVhZE9ubHkpIHx8IGZhbHNlXG4gICAgKTtcbiAgfVxuICBwcm90ZWN0ZWQgd3JhcENlbGwoXG4gICAgY2VsbDogYW55LFxuICAgIGVsZW1lbnQ6IEpTWC5FbGVtZW50LFxuICAgIHJlYXNvbjogc3RyaW5nXG4gICk6IEpTWC5FbGVtZW50IHtcbiAgICBpZiAoIXJlYXNvbikge1xuICAgICAgcmV0dXJuIGVsZW1lbnQ7XG4gICAgfVxuICAgIGNvbnN0IHN1cnZleTogU3VydmV5TW9kZWwgPSB0aGlzLnF1ZXN0aW9uQmFzZVxuICAgICAgLnN1cnZleSBhcyBTdXJ2ZXlNb2RlbDtcbiAgICBsZXQgd3JhcHBlcjogSlNYLkVsZW1lbnQgfCBudWxsID0gbnVsbDtcbiAgICBpZiAoc3VydmV5KSB7XG4gICAgICB3cmFwcGVyID0gUmVhY3RTdXJ2ZXlFbGVtZW50c1dyYXBwZXIud3JhcE1hdHJpeENlbGwoc3VydmV5LCBlbGVtZW50LCBjZWxsLCByZWFzb24pO1xuICAgIH1cbiAgICByZXR1cm4gd3JhcHBlciA/PyBlbGVtZW50O1xuICB9XG4gIHB1YmxpYyBzZXRDb250cm9sKGVsZW1lbnQ6IEhUTUxFbGVtZW50IHwgbnVsbCk6IHZvaWQge1xuICAgIGlmKCEhZWxlbWVudCkge1xuICAgICAgdGhpcy5jb250cm9sID0gZWxlbWVudDtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFN1cnZleVF1ZXN0aW9uVW5jb250cm9sbGVkRWxlbWVudDxcbiAgVCBleHRlbmRzIFF1ZXN0aW9uXG4+IGV4dGVuZHMgU3VydmV5UXVlc3Rpb25FbGVtZW50QmFzZSB7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgdGhpcy51cGRhdGVWYWx1ZU9uRXZlbnQgPSB0aGlzLnVwZGF0ZVZhbHVlT25FdmVudC5iaW5kKHRoaXMpO1xuICB9XG4gIHByb3RlY3RlZCBnZXQgcXVlc3Rpb24oKTogVCB7XG4gICAgcmV0dXJuIHRoaXMucXVlc3Rpb25CYXNlIGFzIFQ7XG4gIH1cbiAgdXBkYXRlVmFsdWVPbkV2ZW50ID0gKGV2ZW50OiBhbnkpID0+IHtcbiAgICBpZiAoXG4gICAgICAhSGVscGVycy5pc1R3b1ZhbHVlRXF1YWxzKHRoaXMucXVlc3Rpb25CYXNlLnZhbHVlLCBldmVudC50YXJnZXQudmFsdWUpXG4gICAgKSB7XG4gICAgICB0aGlzLnNldFZhbHVlQ29yZShldmVudC50YXJnZXQudmFsdWUpO1xuICAgIH1cbiAgfTtcbiAgcHJvdGVjdGVkIHNldFZhbHVlQ29yZShuZXdWYWx1ZTogYW55KSB7XG4gICAgdGhpcy5xdWVzdGlvbkJhc2UudmFsdWUgPSBuZXdWYWx1ZTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0VmFsdWVDb3JlKCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMucXVlc3Rpb25CYXNlLnZhbHVlO1xuICB9XG4gIHByb3RlY3RlZCB1cGRhdGVEb21FbGVtZW50KCkge1xuICAgIGlmICghIXRoaXMuY29udHJvbCkge1xuICAgICAgY29uc3QgY29udHJvbDogYW55ID0gdGhpcy5jb250cm9sO1xuICAgICAgY29uc3QgbmV3VmFsdWUgPSB0aGlzLmdldFZhbHVlQ29yZSgpO1xuICAgICAgaWYgKCFIZWxwZXJzLmlzVHdvVmFsdWVFcXVhbHMobmV3VmFsdWUsIGNvbnRyb2wudmFsdWUpKSB7XG4gICAgICAgIGNvbnRyb2wudmFsdWUgPSB0aGlzLmdldFZhbHVlKG5ld1ZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgc3VwZXIudXBkYXRlRG9tRWxlbWVudCgpO1xuICB9XG4gIHByaXZhdGUgZ2V0VmFsdWUodmFsOiBhbnkpOiBhbnkge1xuICAgIGlmIChIZWxwZXJzLmlzVmFsdWVFbXB0eSh2YWwpKSByZXR1cm4gXCJcIjtcbiAgICByZXR1cm4gdmFsO1xuICB9XG59XG4iLCJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFN1cnZleVF1ZXN0aW9uRWxlbWVudEJhc2UgfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uX2VsZW1lbnRcIjtcbmltcG9ydCB7IFF1ZXN0aW9uRW1wdHlNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgUmVhY3RRdWVzdGlvbkZhY3RvcnkgfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uX2ZhY3RvcnlcIjtcblxuZXhwb3J0IGNsYXNzIFN1cnZleVF1ZXN0aW9uRW1wdHkgZXh0ZW5kcyBTdXJ2ZXlRdWVzdGlvbkVsZW1lbnRCYXNlIHtcbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLnN0YXRlID0geyB2YWx1ZTogdGhpcy5xdWVzdGlvbi52YWx1ZSB9O1xuICB9XG4gIHByb3RlY3RlZCBnZXQgcXVlc3Rpb24oKTogUXVlc3Rpb25FbXB0eU1vZGVsIHtcbiAgICByZXR1cm4gdGhpcy5xdWVzdGlvbkJhc2UgYXMgUXVlc3Rpb25FbXB0eU1vZGVsO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICByZXR1cm4gPGRpdiAvPjtcbiAgfVxufVxuXG5SZWFjdFF1ZXN0aW9uRmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlclF1ZXN0aW9uKFwiZW1wdHlcIiwgKHByb3BzKSA9PiB7XG4gIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFN1cnZleVF1ZXN0aW9uRW1wdHksIHByb3BzKTtcbn0pO1xuIiwiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBTdXJ2ZXlRdWVzdGlvbkVsZW1lbnRCYXNlIH0gZnJvbSBcIi4vcmVhY3RxdWVzdGlvbl9lbGVtZW50XCI7XG5pbXBvcnQgeyBRdWVzdGlvbkV4cHJlc3Npb25Nb2RlbCB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgUmVhY3RRdWVzdGlvbkZhY3RvcnkgfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uX2ZhY3RvcnlcIjtcblxuZXhwb3J0IGNsYXNzIFN1cnZleVF1ZXN0aW9uRXhwcmVzc2lvbiBleHRlbmRzIFN1cnZleVF1ZXN0aW9uRWxlbWVudEJhc2Uge1xuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICB9XG4gIHByb3RlY3RlZCBnZXQgcXVlc3Rpb24oKTogUXVlc3Rpb25FeHByZXNzaW9uTW9kZWwge1xuICAgIHJldHVybiB0aGlzLnF1ZXN0aW9uQmFzZSBhcyBRdWVzdGlvbkV4cHJlc3Npb25Nb2RlbDtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyRWxlbWVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgdmFyIGNzc0NsYXNzZXMgPSB0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXM7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXZcbiAgICAgICAgaWQ9e3RoaXMucXVlc3Rpb24uaW5wdXRJZH1cbiAgICAgICAgY2xhc3NOYW1lPXtjc3NDbGFzc2VzLnJvb3R9XG4gICAgICAgIHJlZj17KGRpdikgPT4gKHRoaXMuc2V0Q29udHJvbChkaXYpKX1cbiAgICAgID5cbiAgICAgICAge3RoaXMucXVlc3Rpb24uZm9ybWF0ZWRWYWx1ZX1cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbn1cblxuUmVhY3RRdWVzdGlvbkZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJRdWVzdGlvbihcImV4cHJlc3Npb25cIiwgKHByb3BzKSA9PiB7XG4gIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFN1cnZleVF1ZXN0aW9uRXhwcmVzc2lvbiwgcHJvcHMpO1xufSk7XG4iLCJpbXBvcnQgeyBIYXNoVGFibGUgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcblxuZXhwb3J0IGNsYXNzIFJlYWN0UXVlc3Rpb25GYWN0b3J5IHtcbiAgcHVibGljIHN0YXRpYyBJbnN0YW5jZTogUmVhY3RRdWVzdGlvbkZhY3RvcnkgPSBuZXcgUmVhY3RRdWVzdGlvbkZhY3RvcnkoKTtcbiAgcHJpdmF0ZSBjcmVhdG9ySGFzaDogSGFzaFRhYmxlPChuYW1lOiBzdHJpbmcpID0+IEpTWC5FbGVtZW50PiA9IHt9O1xuXG4gIHB1YmxpYyByZWdpc3RlclF1ZXN0aW9uKFxuICAgIHF1ZXN0aW9uVHlwZTogc3RyaW5nLFxuICAgIHF1ZXN0aW9uQ3JlYXRvcjogKG5hbWU6IHN0cmluZykgPT4gSlNYLkVsZW1lbnRcbiAgKSB7XG4gICAgdGhpcy5jcmVhdG9ySGFzaFtxdWVzdGlvblR5cGVdID0gcXVlc3Rpb25DcmVhdG9yO1xuICB9XG4gIHB1YmxpYyBnZXRBbGxUeXBlcygpOiBBcnJheTxzdHJpbmc+IHtcbiAgICB2YXIgcmVzdWx0ID0gbmV3IEFycmF5PHN0cmluZz4oKTtcbiAgICBmb3IgKHZhciBrZXkgaW4gdGhpcy5jcmVhdG9ySGFzaCkge1xuICAgICAgcmVzdWx0LnB1c2goa2V5KTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdC5zb3J0KCk7XG4gIH1cbiAgcHVibGljIGNyZWF0ZVF1ZXN0aW9uKHF1ZXN0aW9uVHlwZTogc3RyaW5nLCBwYXJhbXM6IGFueSk6IEpTWC5FbGVtZW50IHwgbnVsbCB7XG4gICAgdmFyIGNyZWF0b3IgPSB0aGlzLmNyZWF0b3JIYXNoW3F1ZXN0aW9uVHlwZV07XG4gICAgaWYgKGNyZWF0b3IgPT0gbnVsbCkgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIGNyZWF0b3IocGFyYW1zKTtcbiAgfVxufVxuIiwiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBRdWVzdGlvbkZpbGVNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgU3VydmV5QWN0aW9uQmFyIH0gZnJvbSBcIi4vY29tcG9uZW50cy9hY3Rpb24tYmFyL2FjdGlvbi1iYXJcIjtcbmltcG9ydCB7IFN2Z0ljb24gfSBmcm9tIFwiLi9jb21wb25lbnRzL3N2Zy1pY29uL3N2Zy1pY29uXCI7XG5pbXBvcnQgeyBTdXJ2ZXlRdWVzdGlvbkVsZW1lbnRCYXNlIH0gZnJvbSBcIi4vcmVhY3RxdWVzdGlvbl9lbGVtZW50XCI7XG5pbXBvcnQgeyBSZWFjdFF1ZXN0aW9uRmFjdG9yeSB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fZmFjdG9yeVwiO1xuXG5leHBvcnQgY2xhc3MgU3VydmV5UXVlc3Rpb25GaWxlIGV4dGVuZHMgU3VydmV5UXVlc3Rpb25FbGVtZW50QmFzZSB7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldCBxdWVzdGlvbigpOiBRdWVzdGlvbkZpbGVNb2RlbCB7XG4gICAgcmV0dXJuIHRoaXMucXVlc3Rpb25CYXNlIGFzIFF1ZXN0aW9uRmlsZU1vZGVsO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICB2YXIgcHJldmlldyA9IHRoaXMucmVuZGVyUHJldmlldygpO1xuICAgIHZhciBmaWxlSW5wdXQ6IEpTWC5FbGVtZW50IHwgbnVsbCA9IG51bGw7XG4gICAgdmFyIGZpbGVEZWNvcmF0b3IgPSB0aGlzLnJlbmRlckZpbGVEZWNvcmF0b3IoKTtcbiAgICB2YXIgY2xlYXJCdXR0b24gPSB0aGlzLnJlbmRlckNsZWFyQnV0dG9uKFxuICAgICAgdGhpcy5xdWVzdGlvbi5zaG93UmVtb3ZlQnV0dG9uXG4gICAgKTtcbiAgICB2YXIgY2xlYXJCdXR0b25Cb3R0b20gPSB0aGlzLnJlbmRlckNsZWFyQnV0dG9uKFxuICAgICAgdGhpcy5xdWVzdGlvbi5zaG93UmVtb3ZlQnV0dG9uQm90dG9tXG4gICAgKTtcblxuICAgIGxldCBtb2JpbGVGaWxlTmF2aWdhdG9yID0gdGhpcy5xdWVzdGlvbi5tb2JpbGVGaWxlTmF2aWdhdG9yVmlzaWJsZT8oPFN1cnZleUFjdGlvbkJhciBtb2RlbCA9IHt0aGlzLnF1ZXN0aW9uLm1vYmlsZUZpbGVOYXZpZ2F0b3J9PjwvU3VydmV5QWN0aW9uQmFyPik6bnVsbDtcbiAgICBmaWxlSW5wdXQgPSAoXG4gICAgICB0aGlzLmlzRGlzcGxheU1vZGUgP1xuICAgICAgICA8aW5wdXRcbiAgICAgICAgICB0eXBlPVwiZmlsZVwiXG4gICAgICAgICAgZGlzYWJsZWQ9e3RoaXMuaXNEaXNwbGF5TW9kZX1cbiAgICAgICAgICBjbGFzc05hbWU9eyF0aGlzLmlzRGlzcGxheU1vZGUgPyB0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMuZmlsZUlucHV0IDogdGhpcy5xdWVzdGlvbi5nZXRSZWFkT25seUZpbGVDc3MoKX1cbiAgICAgICAgICBpZD17dGhpcy5xdWVzdGlvbi5pbnB1dElkfVxuICAgICAgICAgIHJlZj17aW5wdXQgPT4gKHRoaXMuc2V0Q29udHJvbChpbnB1dCkpfVxuICAgICAgICAgIHN0eWxlPXshdGhpcy5pc0Rpc3BsYXlNb2RlID8ge30gOiB7IGNvbG9yOiBcInRyYW5zcGFyZW50XCIgfX1cbiAgICAgICAgICBvbkNoYW5nZT17IXRoaXMuaXNEaXNwbGF5TW9kZSA/IHRoaXMucXVlc3Rpb24uZG9DaGFuZ2UgOiAoKCkgPT4ge30pfVxuICAgICAgICAgIG11bHRpcGxlPXt0aGlzLnF1ZXN0aW9uLmFsbG93TXVsdGlwbGV9XG4gICAgICAgICAgcGxhY2Vob2xkZXI9e3RoaXMucXVlc3Rpb24udGl0bGV9XG4gICAgICAgICAgYWNjZXB0PXt0aGlzLnF1ZXN0aW9uLmFjY2VwdGVkVHlwZXN9XG4gICAgICAgIC8+XG4gICAgICAgIDpcbiAgICAgICAgPGlucHV0XG4gICAgICAgICAgdHlwZT1cImZpbGVcIlxuICAgICAgICAgIGRpc2FibGVkPXt0aGlzLmlzRGlzcGxheU1vZGV9XG4gICAgICAgICAgdGFiSW5kZXg9ey0xfVxuICAgICAgICAgIGNsYXNzTmFtZT17IXRoaXMuaXNEaXNwbGF5TW9kZSA/IHRoaXMucXVlc3Rpb24uY3NzQ2xhc3Nlcy5maWxlSW5wdXQgOiB0aGlzLnF1ZXN0aW9uLmdldFJlYWRPbmx5RmlsZUNzcygpfVxuICAgICAgICAgIGlkPXt0aGlzLnF1ZXN0aW9uLmlucHV0SWR9XG4gICAgICAgICAgcmVmPXtpbnB1dCA9PiAodGhpcy5zZXRDb250cm9sKGlucHV0KSl9XG4gICAgICAgICAgc3R5bGU9eyF0aGlzLmlzRGlzcGxheU1vZGUgPyB7fSA6IHsgY29sb3I6IFwidHJhbnNwYXJlbnRcIiB9fVxuICAgICAgICAgIG9uQ2hhbmdlPXshdGhpcy5pc0Rpc3BsYXlNb2RlID8gdGhpcy5xdWVzdGlvbi5kb0NoYW5nZSA6ICgoKSA9PiB7fSl9XG4gICAgICAgICAgYXJpYS1yZXF1aXJlZD17dGhpcy5xdWVzdGlvbi5hcmlhUmVxdWlyZWR9XG4gICAgICAgICAgYXJpYS1sYWJlbD17dGhpcy5xdWVzdGlvbi5hcmlhTGFiZWx9XG4gICAgICAgICAgYXJpYS1pbnZhbGlkPXt0aGlzLnF1ZXN0aW9uLmFyaWFJbnZhbGlkfVxuICAgICAgICAgIGFyaWEtZGVzY3JpYmVkYnk9e3RoaXMucXVlc3Rpb24uYXJpYURlc2NyaWJlZEJ5fVxuICAgICAgICAgIG11bHRpcGxlPXt0aGlzLnF1ZXN0aW9uLmFsbG93TXVsdGlwbGV9XG4gICAgICAgICAgdGl0bGU9e3RoaXMucXVlc3Rpb24uaW5wdXRUaXRsZX1cbiAgICAgICAgICBhY2NlcHQ9e3RoaXMucXVlc3Rpb24uYWNjZXB0ZWRUeXBlc31cbiAgICAgICAgLz5cbiAgICApO1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5maWxlUm9vdENzc30+XG4gICAgICAgIHtmaWxlSW5wdXR9XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzc05hbWU9e3RoaXMucXVlc3Rpb24uY3NzQ2xhc3Nlcy5kcmFnQXJlYX1cbiAgICAgICAgICBvbkRyb3A9e3RoaXMucXVlc3Rpb24ub25Ecm9wfVxuICAgICAgICAgIG9uRHJhZ092ZXI9e3RoaXMucXVlc3Rpb24ub25EcmFnT3Zlcn1cbiAgICAgICAgICBvbkRyYWdMZWF2ZT17dGhpcy5xdWVzdGlvbi5vbkRyYWdMZWF2ZX1cbiAgICAgICAgICBvbkRyYWdFbnRlcj17dGhpcy5xdWVzdGlvbi5vbkRyYWdFbnRlcn1cbiAgICAgICAgPlxuICAgICAgICAgIHtmaWxlRGVjb3JhdG9yfVxuICAgICAgICAgIHtjbGVhckJ1dHRvbn1cbiAgICAgICAgICB7cHJldmlld31cbiAgICAgICAgICB7Y2xlYXJCdXR0b25Cb3R0b219XG4gICAgICAgICAge21vYmlsZUZpbGVOYXZpZ2F0b3J9XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyRmlsZURlY29yYXRvcigpOiBKU1guRWxlbWVudCB7XG4gICAgY29uc3QgcXVlc3Rpb25Dc3MgPSB0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXM7XG4gICAgbGV0IG5vRmlsZUNob3NlbjogSlNYLkVsZW1lbnQgfCBudWxsID0gbnVsbDtcbiAgICBsZXQgY2hvb3NlRmlsZTogSlNYLkVsZW1lbnQgfCBudWxsID0gbnVsbDtcbiAgICBjaG9vc2VGaWxlID0gKFxuICAgICAgPGxhYmVsXG4gICAgICAgIHJvbGU9XCJidXR0b25cIlxuICAgICAgICB0YWJJbmRleD17MH1cbiAgICAgICAgY2xhc3NOYW1lPXt0aGlzLnF1ZXN0aW9uLmdldENob29zZUZpbGVDc3MoKX1cbiAgICAgICAgaHRtbEZvcj17dGhpcy5xdWVzdGlvbi5pbnB1dElkfVxuICAgICAgICBhcmlhLWxhYmVsPXt0aGlzLnF1ZXN0aW9uLmNob29zZUJ1dHRvbkNhcHRpb259XG4gICAgICA+XG4gICAgICAgIDxzcGFuPnt0aGlzLnF1ZXN0aW9uLmNob29zZUJ1dHRvbkNhcHRpb259PC9zcGFuPlxuICAgICAgICB7KCEhdGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLmNob29zZUZpbGVJY29uSWQpID8gPFN2Z0ljb24gdGl0bGU9e3RoaXMucXVlc3Rpb24uY2hvb3NlQnV0dG9uQ2FwdGlvbn0gaWNvbk5hbWU9e3RoaXMucXVlc3Rpb24uY3NzQ2xhc3Nlcy5jaG9vc2VGaWxlSWNvbklkfSBzaXplPXtcImF1dG9cIn0+PC9TdmdJY29uPjogbnVsbCB9XG4gICAgICA8L2xhYmVsPlxuICAgICk7XG4gICAgaWYgKHRoaXMucXVlc3Rpb24uaXNFbXB0eSgpKSB7XG4gICAgICBub0ZpbGVDaG9zZW4gPSAoXG4gICAgICAgIDxzcGFuIGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLm5vRmlsZUNob3Nlbn0+XG4gICAgICAgICAge3RoaXMucXVlc3Rpb24ubm9GaWxlQ2hvc2VuQ2FwdGlvbn1cbiAgICAgICAgPC9zcGFuPlxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3NOYW1lPXt0aGlzLnF1ZXN0aW9uLmdldEZpbGVEZWNvcmF0b3JDc3MoKX1cbiAgICAgID5cbiAgICAgICAgPHNwYW4gY2xhc3NOYW1lPXt0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMuZHJhZ0FyZWFQbGFjZWhvbGRlcn0+e3RoaXMucXVlc3Rpb24uZHJhZ0FyZWFQbGFjZWhvbGRlcn08L3NwYW4+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXt0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMud3JhcHBlcn0+XG4gICAgICAgICAge2Nob29zZUZpbGV9XG4gICAgICAgICAge25vRmlsZUNob3Nlbn1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJDbGVhckJ1dHRvbihjbGFzc05hbWU6IHN0cmluZyk6IEpTWC5FbGVtZW50IHwgbnVsbCB7XG4gICAgcmV0dXJuIGNsYXNzTmFtZSA/IChcbiAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIG9uQ2xpY2s9e3RoaXMucXVlc3Rpb24uZG9DbGVhbn0gY2xhc3NOYW1lPXtjbGFzc05hbWV9PlxuICAgICAgICA8c3Bhbj57dGhpcy5xdWVzdGlvbi5jbGVhckJ1dHRvbkNhcHRpb259PC9zcGFuPlxuICAgICAgICB7KCEhdGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLnJlbW92ZUJ1dHRvbkljb25JZCkgPyA8U3ZnSWNvbiBpY29uTmFtZT17dGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLnJlbW92ZUJ1dHRvbkljb25JZH0gc2l6ZT17XCJhdXRvXCJ9IHRpdGxlPXt0aGlzLnF1ZXN0aW9uLmNsZWFyQnV0dG9uQ2FwdGlvbn0+PC9TdmdJY29uPjogbnVsbCB9XG4gICAgICA8L2J1dHRvbj5cbiAgICApIDogbnVsbDtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyRmlsZVNpZ24oY2xhc3NOYW1lOiBzdHJpbmcsIHZhbDogYW55KTogSlNYLkVsZW1lbnQgfCBudWxsIHtcbiAgICBpZighY2xhc3NOYW1lIHx8ICF2YWwubmFtZSkgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtjbGFzc05hbWV9PlxuICAgICAgICA8YVxuICAgICAgICAgIGhyZWY9e3ZhbC5jb250ZW50fVxuICAgICAgICAgIG9uQ2xpY2s9e2V2ZW50ID0+IHtcbiAgICAgICAgICAgIHRoaXMucXVlc3Rpb24uZG9Eb3dubG9hZEZpbGUoZXZlbnQsIHZhbCk7XG4gICAgICAgICAgfX1cbiAgICAgICAgICB0aXRsZT17dmFsLm5hbWV9XG4gICAgICAgICAgZG93bmxvYWQ9e3ZhbC5uYW1lfVxuICAgICAgICAgIHN0eWxlPXt7IHdpZHRoOiB0aGlzLnF1ZXN0aW9uLmltYWdlV2lkdGggfX1cbiAgICAgICAgPlxuICAgICAgICAgIHt2YWwubmFtZX1cbiAgICAgICAgPC9hPlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyUHJldmlldygpOiBKU1guRWxlbWVudCB8IG51bGwge1xuICAgIGlmICghdGhpcy5xdWVzdGlvbi5wcmV2aWV3VmFsdWUgfHwgIXRoaXMucXVlc3Rpb24ucHJldmlld1ZhbHVlLmxlbmd0aCkgcmV0dXJuIG51bGw7XG4gICAgdmFyIHByZXZpZXdzID0gdGhpcy5xdWVzdGlvbi5wcmV2aWV3VmFsdWUubWFwKCh2YWwsIGluZGV4KSA9PiB7XG4gICAgICBpZiAoIXZhbCkgcmV0dXJuIG51bGw7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8c3BhblxuICAgICAgICAgIGtleT17dGhpcy5xdWVzdGlvbi5pbnB1dElkICsgXCJfXCIgKyBpbmRleH1cbiAgICAgICAgICBjbGFzc05hbWU9e3RoaXMucXVlc3Rpb24uY3NzQ2xhc3Nlcy5wcmV2aWV3fVxuICAgICAgICAgIHN0eWxlPXt7IGRpc3BsYXk6IHRoaXMucXVlc3Rpb24uaXNQcmV2aWV3VmlzaWJsZShpbmRleCkgPyB1bmRlZmluZWQgOiBcIm5vbmVcIiB9fVxuICAgICAgICA+XG4gICAgICAgICAge3RoaXMucmVuZGVyRmlsZVNpZ24odGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLmZpbGVTaWduLCB2YWwpfVxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXt0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMuaW1hZ2VXcmFwcGVyfT5cbiAgICAgICAgICAgIHt0aGlzLnF1ZXN0aW9uLmNhblByZXZpZXdJbWFnZSh2YWwpID8gKFxuICAgICAgICAgICAgICA8aW1nXG4gICAgICAgICAgICAgICAgc3JjPXt2YWwuY29udGVudH1cbiAgICAgICAgICAgICAgICBzdHlsZT17eyBoZWlnaHQ6IHRoaXMucXVlc3Rpb24uaW1hZ2VIZWlnaHQsIHdpZHRoOiB0aGlzLnF1ZXN0aW9uLmltYWdlV2lkdGggfX1cbiAgICAgICAgICAgICAgICBhbHQ9XCJGaWxlIHByZXZpZXdcIlxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgKSA6ICh0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMuZGVmYXVsdEltYWdlPyhcbiAgICAgICAgICAgICAgPFN2Z0ljb24gaWNvbk5hbWU9e3RoaXMucXVlc3Rpb24uY3NzQ2xhc3Nlcy5kZWZhdWx0SW1hZ2VJY29uSWR9IHNpemU9e1wiYXV0b1wifSBjbGFzc05hbWU9e3RoaXMucXVlc3Rpb24uY3NzQ2xhc3Nlcy5kZWZhdWx0SW1hZ2V9PjwvU3ZnSWNvbj5cbiAgICAgICAgICAgICk6bnVsbCl9XG4gICAgICAgICAgICB7dmFsLm5hbWUgJiYgIXRoaXMucXVlc3Rpb24uaXNSZWFkT25seSA/IChcbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3RoaXMucXVlc3Rpb24uY3NzQ2xhc3Nlcy5yZW1vdmVGaWxlQnV0dG9ufSBvbkNsaWNrPXsoKSA9PiB0aGlzLnF1ZXN0aW9uLmRvUmVtb3ZlRmlsZSh2YWwpfT5cbiAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXt0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMucmVtb3ZlRmlsZX1cbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICB7dGhpcy5xdWVzdGlvbi5yZW1vdmVGaWxlQ2FwdGlvbn1cbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgeyh0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMucmVtb3ZlRmlsZVN2Z0ljb25JZCkgP1xuICAgICAgICAgICAgICAgICAgKDxTdmdJY29uIHRpdGxlPXt0aGlzLnF1ZXN0aW9uLnJlbW92ZUZpbGVDYXB0aW9ufSBpY29uTmFtZT17dGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLnJlbW92ZUZpbGVTdmdJY29uSWR9IHNpemU9e1wiYXV0b1wifSBjbGFzc05hbWU9e3RoaXMucXVlc3Rpb24uY3NzQ2xhc3Nlcy5yZW1vdmVGaWxlU3ZnfT48L1N2Z0ljb24+KTogbnVsbCB9XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAge3RoaXMucmVuZGVyRmlsZVNpZ24odGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLmZpbGVTaWduQm90dG9tLCB2YWwpfVxuICAgICAgICA8L3NwYW4+XG4gICAgICApO1xuICAgIH0pO1xuICAgIHJldHVybiA8ZGl2IGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLmZpbGVMaXN0IHx8IHVuZGVmaW5lZH0+e3ByZXZpZXdzfTwvZGl2PjtcbiAgfVxufVxuXG5SZWFjdFF1ZXN0aW9uRmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlclF1ZXN0aW9uKFwiZmlsZVwiLCBwcm9wcyA9PiB7XG4gIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFN1cnZleVF1ZXN0aW9uRmlsZSwgcHJvcHMpO1xufSk7XG4iLCJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFN1cnZleVF1ZXN0aW9uRWxlbWVudEJhc2UgfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uX2VsZW1lbnRcIjtcbmltcG9ydCB7IFF1ZXN0aW9uSHRtbE1vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBSZWFjdFF1ZXN0aW9uRmFjdG9yeSB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fZmFjdG9yeVwiO1xuXG5leHBvcnQgY2xhc3MgU3VydmV5UXVlc3Rpb25IdG1sIGV4dGVuZHMgU3VydmV5UXVlc3Rpb25FbGVtZW50QmFzZSB7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldCBxdWVzdGlvbigpOiBRdWVzdGlvbkh0bWxNb2RlbCB7XG4gICAgcmV0dXJuIHRoaXMucXVlc3Rpb25CYXNlIGFzIFF1ZXN0aW9uSHRtbE1vZGVsO1xuICB9XG4gIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIHRoaXMucmVhY3RPblN0ckNoYW5nZWQoKTtcbiAgfVxuICBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICB0aGlzLnF1ZXN0aW9uLmxvY0h0bWwub25DaGFuZ2VkID0gZnVuY3Rpb24gKCkge307XG4gIH1cbiAgY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wczogYW55LCBwcmV2U3RhdGU6IGFueSkge1xuICAgIHRoaXMucmVhY3RPblN0ckNoYW5nZWQoKTtcbiAgfVxuICBwcml2YXRlIHJlYWN0T25TdHJDaGFuZ2VkKCkge1xuICAgIHRoaXMucXVlc3Rpb24ubG9jSHRtbC5vbkNoYW5nZWQgPSAoKSA9PiB7XG4gICAgICB0aGlzLnNldFN0YXRlKHsgY2hhbmdlZDogISF0aGlzLnN0YXRlICYmIHRoaXMuc3RhdGUuY2hhbmdlZCA/IHRoaXMuc3RhdGUuY2hhbmdlZCArIDEgOiAxIH0pO1xuICAgIH07XG4gIH1cbiAgcHJvdGVjdGVkIGNhblJlbmRlcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gc3VwZXIuY2FuUmVuZGVyKCkgJiYgISF0aGlzLnF1ZXN0aW9uLmh0bWw7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIHZhciBodG1sVmFsdWUgPSB7IF9faHRtbDogdGhpcy5xdWVzdGlvbi5sb2NIdG1sLnJlbmRlcmVkSHRtbCB9O1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5yZW5kZXJDc3NSb290fVxuICAgICAgICBkYW5nZXJvdXNseVNldElubmVySFRNTD17aHRtbFZhbHVlfVxuICAgICAgLz5cbiAgICApO1xuICB9XG59XG5cblJlYWN0UXVlc3Rpb25GYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyUXVlc3Rpb24oXCJodG1sXCIsIChwcm9wcykgPT4ge1xuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTdXJ2ZXlRdWVzdGlvbkh0bWwsIHByb3BzKTtcbn0pO1xuIiwiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQge1xuICBSZWFjdFN1cnZleUVsZW1lbnQsXG4gIFN1cnZleVF1ZXN0aW9uRWxlbWVudEJhc2UsXG59IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fZWxlbWVudFwiO1xuaW1wb3J0IHsgUXVlc3Rpb25NYXRyaXhNb2RlbCwgTWF0cml4Um93TW9kZWwsIFN1cnZleU1vZGVsLCBIZWxwZXJzIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBSZWFjdFF1ZXN0aW9uRmFjdG9yeSB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fZmFjdG9yeVwiO1xuaW1wb3J0IHsgUmVhY3RTdXJ2ZXlFbGVtZW50c1dyYXBwZXIgfSBmcm9tIFwiLi9yZWFjdHN1cnZleW1vZGVsXCI7XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlRdWVzdGlvbk1hdHJpeCBleHRlbmRzIFN1cnZleVF1ZXN0aW9uRWxlbWVudEJhc2Uge1xuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMuc3RhdGUgPSB7IHJvd3NDaGFuZ2VkOiAwIH07XG4gIH1cbiAgcHJvdGVjdGVkIGdldCBxdWVzdGlvbigpOiBRdWVzdGlvbk1hdHJpeE1vZGVsIHtcbiAgICByZXR1cm4gdGhpcy5xdWVzdGlvbkJhc2UgYXMgUXVlc3Rpb25NYXRyaXhNb2RlbDtcbiAgfVxuICBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICBzdXBlci5jb21wb25lbnREaWRNb3VudCgpO1xuICAgIGlmICh0aGlzLnF1ZXN0aW9uKSB7XG4gICAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgICB0aGlzLnF1ZXN0aW9uLnZpc2libGVSb3dzQ2hhbmdlZENhbGxiYWNrID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHNlbGYuc2V0U3RhdGUoeyByb3dzQ2hhbmdlZDogc2VsZi5zdGF0ZS5yb3dzQ2hhbmdlZCArIDEgfSk7XG4gICAgICB9O1xuICAgIH1cbiAgfVxuICBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICBzdXBlci5jb21wb25lbnRXaWxsVW5tb3VudCgpO1xuICAgIGlmICh0aGlzLnF1ZXN0aW9uKSB7XG4gICAgICB0aGlzLnF1ZXN0aW9uLnZpc2libGVSb3dzQ2hhbmdlZENhbGxiYWNrID0gbnVsbCBhcyBhbnk7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIHZhciBjc3NDbGFzc2VzID0gdGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzO1xuICAgIHZhciByb3dzVEggPSB0aGlzLnF1ZXN0aW9uLmhhc1Jvd3MgPyA8dGQgLz4gOiBudWxsO1xuICAgIHZhciBoZWFkZXJzOkFycmF5PEpTWC5FbGVtZW50PiA9IFtdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5xdWVzdGlvbi52aXNpYmxlQ29sdW1ucy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGNvbHVtbiA9IHRoaXMucXVlc3Rpb24udmlzaWJsZUNvbHVtbnNbaV07XG4gICAgICB2YXIga2V5ID0gXCJjb2x1bW5cIiArIGk7XG4gICAgICB2YXIgY29sdW1UZXh0ID0gdGhpcy5yZW5kZXJMb2NTdHJpbmcoY29sdW1uLmxvY1RleHQpO1xuICAgICAgaGVhZGVycy5wdXNoKFxuICAgICAgICA8dGggY2xhc3NOYW1lPXt0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMuaGVhZGVyQ2VsbH0ga2V5PXtrZXl9PlxuICAgICAgICAgIHt0aGlzLndyYXBDZWxsKHsgY29sdW1uOiBjb2x1bW4gfSwgY29sdW1UZXh0LCBcImNvbHVtbi1oZWFkZXJcIil9XG4gICAgICAgIDwvdGg+XG4gICAgICApO1xuICAgIH1cbiAgICB2YXIgcm93czpBcnJheTxKU1guRWxlbWVudD4gPSBbXTtcbiAgICB2YXIgdmlzaWJsZVJvd3MgPSB0aGlzLnF1ZXN0aW9uLnZpc2libGVSb3dzO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdmlzaWJsZVJvd3MubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciByb3cgPSB2aXNpYmxlUm93c1tpXTtcbiAgICAgIHZhciBrZXkgPSBcInJvdy1cIiArIHJvdy5uYW1lICsgXCItXCIgKyBpO1xuICAgICAgcm93cy5wdXNoKFxuICAgICAgICA8U3VydmV5UXVlc3Rpb25NYXRyaXhSb3dcbiAgICAgICAgICBrZXk9e2tleX1cbiAgICAgICAgICBxdWVzdGlvbj17dGhpcy5xdWVzdGlvbn1cbiAgICAgICAgICBjc3NDbGFzc2VzPXtjc3NDbGFzc2VzfVxuICAgICAgICAgIGlzRGlzcGxheU1vZGU9e3RoaXMuaXNEaXNwbGF5TW9kZX1cbiAgICAgICAgICByb3c9e3Jvd31cbiAgICAgICAgICBpc0ZpcnN0PXtpID09IDB9XG4gICAgICAgIC8+XG4gICAgICApO1xuICAgIH1cbiAgICB2YXIgaGVhZGVyID0gIXRoaXMucXVlc3Rpb24uc2hvd0hlYWRlciA/IG51bGwgOiAoXG4gICAgICA8dGhlYWQ+XG4gICAgICAgIDx0cj5cbiAgICAgICAgICB7cm93c1RIfVxuICAgICAgICAgIHtoZWFkZXJzfVxuICAgICAgICA8L3RyPlxuICAgICAgPC90aGVhZD5cbiAgICApO1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzTmFtZT17Y3NzQ2xhc3Nlcy50YWJsZVdyYXBwZXJ9XG4gICAgICAgIHJlZj17cm9vdCA9PiAodGhpcy5zZXRDb250cm9sKHJvb3QpKX1cbiAgICAgID5cbiAgICAgICAgPGZpZWxkc2V0PlxuICAgICAgICAgIDxsZWdlbmQgYXJpYS1sYWJlbD17dGhpcy5xdWVzdGlvbi5sb2NUaXRsZS5yZW5kZXJlZEh0bWx9IC8+XG4gICAgICAgICAgPHRhYmxlIGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5nZXRUYWJsZUNzcygpfT5cbiAgICAgICAgICAgIHtoZWFkZXJ9XG4gICAgICAgICAgICA8dGJvZHk+e3Jvd3N9PC90Ym9keT5cbiAgICAgICAgICA8L3RhYmxlPlxuICAgICAgICA8L2ZpZWxkc2V0PlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgU3VydmV5UXVlc3Rpb25NYXRyaXhSb3cgZXh0ZW5kcyBSZWFjdFN1cnZleUVsZW1lbnQge1xuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMuaGFuZGxlT25DaGFuZ2UgPSB0aGlzLmhhbmRsZU9uQ2hhbmdlLmJpbmQodGhpcyk7XG4gIH1cbiAgcHJpdmF0ZSBnZXQgcXVlc3Rpb24oKTogUXVlc3Rpb25NYXRyaXhNb2RlbCB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMucXVlc3Rpb247XG4gIH1cbiAgcHJpdmF0ZSBnZXQgcm93KCk6IE1hdHJpeFJvd01vZGVsIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5yb3c7XG4gIH1cbiAgaGFuZGxlT25DaGFuZ2UoZXZlbnQ6IGFueSkge1xuICAgIHRoaXMucm93LnZhbHVlID0gZXZlbnQudGFyZ2V0LnZhbHVlO1xuICAgIHRoaXMuc2V0U3RhdGUoeyB2YWx1ZTogdGhpcy5yb3cudmFsdWUgfSk7XG4gIH1cbiAgcHJvdGVjdGVkIHdyYXBDZWxsKGNlbGw6IGFueSwgZWxlbWVudDogSlNYLkVsZW1lbnQsIHJlYXNvbjogc3RyaW5nKTogSlNYLkVsZW1lbnQge1xuICAgIGlmKCFyZWFzb24pIHtcbiAgICAgIHJldHVybiBlbGVtZW50O1xuICAgIH1cbiAgICBjb25zdCBzdXJ2ZXk6IFN1cnZleU1vZGVsID0gdGhpcy5xdWVzdGlvbi5zdXJ2ZXkgYXMgU3VydmV5TW9kZWw7XG4gICAgbGV0IHdyYXBwZXI6IEpTWC5FbGVtZW50IHwgbnVsbCA9IG51bGw7XG4gICAgaWYgKHN1cnZleSkge1xuICAgICAgd3JhcHBlciA9IFJlYWN0U3VydmV5RWxlbWVudHNXcmFwcGVyLndyYXBNYXRyaXhDZWxsKHN1cnZleSwgZWxlbWVudCwgY2VsbCwgcmVhc29uKTtcbiAgICB9XG4gICAgcmV0dXJuIHdyYXBwZXIgPz8gZWxlbWVudDtcbiAgfVxuICBwcm90ZWN0ZWQgY2FuUmVuZGVyKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIXRoaXMucm93O1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICB2YXIgcm93c1REOiBKU1guRWxlbWVudCB8IG51bGwgPSBudWxsO1xuXG4gICAgaWYgKHRoaXMucXVlc3Rpb24uaGFzUm93cykge1xuICAgICAgdmFyIHJvd1RleHQgPSB0aGlzLnJlbmRlckxvY1N0cmluZyh0aGlzLnJvdy5sb2NUZXh0KTtcbiAgICAgIHJvd3NURCA9IDx0ZCBjbGFzc05hbWU9e3RoaXMucXVlc3Rpb24uY3NzQ2xhc3Nlcy5yb3dUZXh0Q2VsbH0+XG4gICAgICAgIHt0aGlzLndyYXBDZWxsKHsgcm93OiB0aGlzLnJvdyB9LCByb3dUZXh0LCBcInJvdy1oZWFkZXJcIil9XG4gICAgICA8L3RkPjtcbiAgICB9XG5cbiAgICB2YXIgdGRzID0gdGhpcy5nZW5lcmF0ZVRkcygpO1xuICAgIHJldHVybiAoXG4gICAgICA8dHIgY2xhc3NOYW1lPXt0aGlzLnJvdy5yb3dDbGFzc2VzIHx8IHVuZGVmaW5lZH0+XG4gICAgICAgIHtyb3dzVER9XG4gICAgICAgIHt0ZHN9XG4gICAgICA8L3RyPlxuICAgICk7XG4gIH1cblxuICBnZW5lcmF0ZVRkcygpIHtcbiAgICB2YXIgdGRzOkFycmF5PEpTWC5FbGVtZW50PiA9IFtdO1xuICAgIHZhciByb3cgPSB0aGlzLnJvdztcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5xdWVzdGlvbi52aXNpYmxlQ29sdW1ucy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHRkOiBKU1guRWxlbWVudCB8IG51bGwgPSBudWxsO1xuICAgICAgdmFyIGNvbHVtbiA9IHRoaXMucXVlc3Rpb24udmlzaWJsZUNvbHVtbnNbaV07XG4gICAgICB2YXIga2V5ID0gXCJ2YWx1ZVwiICsgaTtcblxuICAgICAgLy92YXIgaXNDaGVja2VkID0gSGVscGVycy5pc1R3b1ZhbHVlRXF1YWxzKHJvdy52YWx1ZSwgY29sdW1uLnZhbHVlKTtcbiAgICAgIHZhciBpc0NoZWNrZWQgPSByb3cudmFsdWUgPT0gY29sdW1uLnZhbHVlO1xuICAgICAgbGV0IGl0ZW1DbGFzcyA9IHRoaXMucXVlc3Rpb24uZ2V0SXRlbUNsYXNzKHJvdywgY29sdW1uKTtcbiAgICAgIHZhciBpbnB1dElkID0gdGhpcy5xdWVzdGlvbi5pbnB1dElkICsgXCJfXCIgKyByb3cubmFtZSArIFwiX1wiICsgaTtcbiAgICAgIGlmICh0aGlzLnF1ZXN0aW9uLmhhc0NlbGxUZXh0KSB7XG4gICAgICAgIHZhciBnZXRIYW5kbGVyID0gIXRoaXMucXVlc3Rpb24uaXNJbnB1dFJlYWRPbmx5XG4gICAgICAgICAgPyAoY29sdW1uOiBhbnkpID0+ICgpID0+IHRoaXMuY2VsbENsaWNrKHJvdywgY29sdW1uKVxuICAgICAgICAgIDogbnVsbDtcbiAgICAgICAgdGQgPSAoXG4gICAgICAgICAgPHRkXG4gICAgICAgICAgICBrZXk9e2tleX1cbiAgICAgICAgICAgIGNsYXNzTmFtZT17aXRlbUNsYXNzfVxuICAgICAgICAgICAgb25DbGljaz17Z2V0SGFuZGxlciA/IGdldEhhbmRsZXIoY29sdW1uKSA6ICgpID0+IHt9fVxuICAgICAgICAgID5cbiAgICAgICAgICAgIHt0aGlzLnJlbmRlckxvY1N0cmluZyhcbiAgICAgICAgICAgICAgdGhpcy5xdWVzdGlvbi5nZXRDZWxsRGlzcGxheUxvY1RleHQocm93Lm5hbWUsIGNvbHVtbilcbiAgICAgICAgICAgICl9XG4gICAgICAgICAgPC90ZD5cbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRkID0gKFxuICAgICAgICAgIDx0ZFxuICAgICAgICAgICAga2V5PXtrZXl9XG4gICAgICAgICAgICBkYXRhLXJlc3BvbnNpdmUtdGl0bGU9e2NvbHVtbi5sb2NUZXh0LnJlbmRlcmVkSHRtbH1cbiAgICAgICAgICAgIGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLmNlbGx9XG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGxhYmVsIGNsYXNzTmFtZT17aXRlbUNsYXNzfT5cbiAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgaWQ9e2lucHV0SWR9XG4gICAgICAgICAgICAgICAgdHlwZT1cInJhZGlvXCJcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9e3RoaXMuY3NzQ2xhc3Nlcy5pdGVtVmFsdWV9XG4gICAgICAgICAgICAgICAgbmFtZT17cm93LmZ1bGxOYW1lfVxuICAgICAgICAgICAgICAgIHZhbHVlPXtjb2x1bW4udmFsdWV9XG4gICAgICAgICAgICAgICAgZGlzYWJsZWQ9e3RoaXMuaXNEaXNwbGF5TW9kZX1cbiAgICAgICAgICAgICAgICBjaGVja2VkPXtpc0NoZWNrZWR9XG4gICAgICAgICAgICAgICAgb25DaGFuZ2U9e3RoaXMuaGFuZGxlT25DaGFuZ2V9XG4gICAgICAgICAgICAgICAgYXJpYS1yZXF1aXJlZD17dGhpcy5xdWVzdGlvbi5hcmlhUmVxdWlyZWR9XG4gICAgICAgICAgICAgICAgYXJpYS1sYWJlbD17Y29sdW1uLmxvY1RleHQucmVuZGVyZWRIdG1sfVxuICAgICAgICAgICAgICAgIGFyaWEtaW52YWxpZD17dGhpcy5xdWVzdGlvbi5hcmlhSW52YWxpZH1cbiAgICAgICAgICAgICAgICBhcmlhLWRlc2NyaWJlZGJ5PXt0aGlzLnF1ZXN0aW9uLmFyaWFEZXNjcmliZWRCeX1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPXt0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMubWF0ZXJpYWxEZWNvcmF0b3J9PlxuICAgICAgICAgICAgICAgIHt0aGlzLnF1ZXN0aW9uLml0ZW1TdmdJY29uID9cbiAgICAgICAgICAgICAgICAgIDxzdmdcbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXt0aGlzLmNzc0NsYXNzZXMuaXRlbURlY29yYXRvcn1cbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPHVzZSB4bGlua0hyZWY9e3RoaXMucXVlc3Rpb24uaXRlbVN2Z0ljb259PjwvdXNlPlxuICAgICAgICAgICAgICAgICAgPC9zdmc+IDpcbiAgICAgICAgICAgICAgICAgIG51bGxcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9eyF0aGlzLnF1ZXN0aW9uLmlzTW9iaWxlID8geyBkaXNwbGF5OiBcIm5vbmVcIiB9IDogdW5kZWZpbmVkIH0gY2xhc3NOYW1lPXt0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMuY2VsbFJlc3BvbnNpdmVUaXRsZX0+XG4gICAgICAgICAgICAgICAge3RoaXMucmVuZGVyTG9jU3RyaW5nKGNvbHVtbi5sb2NUZXh0KX1cbiAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICA8L3RkPlxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgdGRzLnB1c2godGQpO1xuICAgIH1cblxuICAgIHJldHVybiB0ZHM7XG4gIH1cbiAgY2VsbENsaWNrKHJvdzogYW55LCBjb2x1bW46IGFueSkge1xuICAgIHJvdy52YWx1ZSA9IGNvbHVtbi52YWx1ZTtcbiAgICB0aGlzLnNldFN0YXRlKHsgdmFsdWU6IHRoaXMucm93LnZhbHVlIH0pO1xuICB9XG59XG5cblJlYWN0UXVlc3Rpb25GYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyUXVlc3Rpb24oXCJtYXRyaXhcIiwgcHJvcHMgPT4ge1xuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTdXJ2ZXlRdWVzdGlvbk1hdHJpeCwgcHJvcHMpO1xufSk7XG4iLCJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFN1cnZleVF1ZXN0aW9uTWF0cml4RHJvcGRvd25CYXNlIH0gZnJvbSBcIi4vcmVhY3RxdWVzdGlvbl9tYXRyaXhkcm9wZG93bmJhc2VcIjtcbmltcG9ydCB7IFJlYWN0UXVlc3Rpb25GYWN0b3J5IH0gZnJvbSBcIi4vcmVhY3RxdWVzdGlvbl9mYWN0b3J5XCI7XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlRdWVzdGlvbk1hdHJpeERyb3Bkb3duIGV4dGVuZHMgU3VydmV5UXVlc3Rpb25NYXRyaXhEcm9wZG93bkJhc2Uge1xuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICB9XG59XG5cblJlYWN0UXVlc3Rpb25GYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyUXVlc3Rpb24oXCJtYXRyaXhkcm9wZG93blwiLCBwcm9wcyA9PiB7XG4gIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFN1cnZleVF1ZXN0aW9uTWF0cml4RHJvcGRvd24sIHByb3BzKTtcbn0pO1xuIiwiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQge1xuICBSZWFjdFN1cnZleUVsZW1lbnQsXG4gIFN1cnZleVF1ZXN0aW9uRWxlbWVudEJhc2Vcbn0gZnJvbSBcIi4vcmVhY3RxdWVzdGlvbl9lbGVtZW50XCI7XG5pbXBvcnQgeyBTdXJ2ZXlRdWVzdGlvbiwgU3VydmV5UXVlc3Rpb25BbmRFcnJvcnNDZWxsIH0gZnJvbSBcIi4vcmVhY3RxdWVzdGlvblwiO1xuaW1wb3J0IHtcbiAgUXVlc3Rpb25NYXRyaXhEcm9wZG93bk1vZGVsQmFzZSxcbiAgUXVlc3Rpb25NYXRyaXhEcm9wZG93blJlbmRlcmVkUm93LFxuICBRdWVzdGlvbk1hdHJpeERyb3Bkb3duUmVuZGVyZWRDZWxsLFxuICBNYXRyaXhEcm9wZG93bkNvbHVtbixcbiAgQWRhcHRpdmVBY3Rpb25Db250YWluZXIsXG4gIFF1ZXN0aW9uLFxuICBCYXNlXG59IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgU3VydmV5UXVlc3Rpb25DaGVja2JveEl0ZW0gfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uX2NoZWNrYm94XCI7XG5pbXBvcnQgeyBTdXJ2ZXlRdWVzdGlvblJhZGlvSXRlbSB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fcmFkaW9ncm91cFwiO1xuaW1wb3J0IHsgU3VydmV5UGFuZWwgfSBmcm9tIFwiLi9wYW5lbFwiO1xuaW1wb3J0IHsgU3VydmV5QWN0aW9uQmFyIH0gZnJvbSBcIi4vY29tcG9uZW50cy9hY3Rpb24tYmFyL2FjdGlvbi1iYXJcIjtcbmltcG9ydCB7IE1hdHJpeFJvdyB9IGZyb20gXCIuL2NvbXBvbmVudHMvbWF0cml4L3Jvd1wiO1xuaW1wb3J0IHsgU3VydmV5UXVlc3Rpb25NYXRyaXhEeW5hbWljRHJhZ0Ryb3BJY29uIH0gZnJvbSBcIi4vY29tcG9uZW50cy9tYXRyaXgtYWN0aW9ucy9kcmFnLWRyb3AtaWNvbi9kcmFnLWRyb3AtaWNvblwiO1xuaW1wb3J0IHsgU3VydmV5UXVlc3Rpb25Db21tZW50SXRlbSB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fY29tbWVudFwiO1xuaW1wb3J0IHsgUmVhY3RFbGVtZW50RmFjdG9yeSB9IGZyb20gXCIuL2VsZW1lbnQtZmFjdG9yeVwiO1xuXG5leHBvcnQgY2xhc3MgU3VydmV5UXVlc3Rpb25NYXRyaXhEcm9wZG93bkJhc2UgZXh0ZW5kcyBTdXJ2ZXlRdWVzdGlvbkVsZW1lbnRCYXNlIHtcbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICAvL0NyZWF0ZSByZW5kZXJlZCB0YWJsZSBpbiBjb250cnVjdG9yIGFuZCBub3Qgb24gcmVuZGVyaW5nXG4gICAgY29uc3QgdGFibGUgPSB0aGlzLnF1ZXN0aW9uLnJlbmRlcmVkVGFibGU7XG4gICAgdGhpcy5zdGF0ZSA9IHRoaXMuZ2V0U3RhdGUoKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IHF1ZXN0aW9uKCk6IFF1ZXN0aW9uTWF0cml4RHJvcGRvd25Nb2RlbEJhc2Uge1xuICAgIHJldHVybiB0aGlzLnF1ZXN0aW9uQmFzZSBhcyBRdWVzdGlvbk1hdHJpeERyb3Bkb3duTW9kZWxCYXNlO1xuICB9XG4gIHByaXZhdGUgZ2V0U3RhdGUocHJldlN0YXRlOiBhbnkgPSBudWxsKSB7XG4gICAgcmV0dXJuIHsgcm93Q291bnRlcjogIXByZXZTdGF0ZSA/IDAgOiBwcmV2U3RhdGUucm93Q291bnRlciArIDEgfTtcbiAgfVxuICBwcml2YXRlIHVwZGF0ZVN0YXRlT25DYWxsYmFjaygpIHtcbiAgICBpZiAodGhpcy5pc1JlbmRlcmluZykgcmV0dXJuO1xuICAgIHRoaXMuc2V0U3RhdGUodGhpcy5nZXRTdGF0ZSh0aGlzLnN0YXRlKSk7XG4gIH1cbiAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgc3VwZXIuY29tcG9uZW50RGlkTW91bnQoKTtcbiAgICB0aGlzLnF1ZXN0aW9uLnZpc2libGVSb3dzQ2hhbmdlZENhbGxiYWNrID0gKCkgPT4ge1xuICAgICAgdGhpcy51cGRhdGVTdGF0ZU9uQ2FsbGJhY2soKTtcbiAgICB9O1xuICAgIHRoaXMucXVlc3Rpb24ub25SZW5kZXJlZFRhYmxlUmVzZXRDYWxsYmFjayA9ICgpID0+IHtcbiAgICAgIHRoaXMucXVlc3Rpb24ucmVuZGVyZWRUYWJsZS5yZW5kZXJlZFJvd3NDaGFuZ2VkQ2FsbGJhY2sgPSAoKSA9PiB7XG4gICAgICAgIHRoaXMudXBkYXRlU3RhdGVPbkNhbGxiYWNrKCk7XG4gICAgICB9O1xuICAgICAgdGhpcy51cGRhdGVTdGF0ZU9uQ2FsbGJhY2soKTtcbiAgICB9O1xuICAgIHRoaXMucXVlc3Rpb24ucmVuZGVyZWRUYWJsZS5yZW5kZXJlZFJvd3NDaGFuZ2VkQ2FsbGJhY2sgPSAoKSA9PiB7XG4gICAgICB0aGlzLnVwZGF0ZVN0YXRlT25DYWxsYmFjaygpO1xuICAgIH07XG4gIH1cbiAgY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgc3VwZXIuY29tcG9uZW50V2lsbFVubW91bnQoKTtcbiAgICB0aGlzLnF1ZXN0aW9uLnZpc2libGVSb3dzQ2hhbmdlZENhbGxiYWNrID0gKCkgPT4ge307XG4gICAgdGhpcy5xdWVzdGlvbi5vblJlbmRlcmVkVGFibGVSZXNldENhbGxiYWNrID0gKCkgPT4ge307XG4gICAgdGhpcy5xdWVzdGlvbi5yZW5kZXJlZFRhYmxlLnJlbmRlcmVkUm93c0NoYW5nZWRDYWxsYmFjayA9ICgpID0+IHt9O1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICByZXR1cm4gdGhpcy5yZW5kZXJUYWJsZURpdigpO1xuICB9XG4gIHJlbmRlclRhYmxlRGl2KCk6IEpTWC5FbGVtZW50IHtcbiAgICB2YXIgaGVhZGVyID0gdGhpcy5yZW5kZXJIZWFkZXIoKTtcbiAgICB2YXIgZm9vdGVycyA9IHRoaXMucmVuZGVyRm9vdGVyKCk7XG4gICAgdmFyIHJvd3MgPSB0aGlzLnJlbmRlclJvd3MoKTtcbiAgICB2YXIgZGl2U3R5bGUgPSB0aGlzLnF1ZXN0aW9uLnNob3dIb3Jpem9udGFsU2Nyb2xsXG4gICAgICA/ICh7IG92ZXJmbG93WDogXCJzY3JvbGxcIiB9IGFzIFJlYWN0LkNTU1Byb3BlcnRpZXMpXG4gICAgICA6ICh7fSBhcyBSZWFjdC5DU1NQcm9wZXJ0aWVzKTtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBzdHlsZT17ZGl2U3R5bGV9IHJlZj17KHJvb3QpID0+ICh0aGlzLnNldENvbnRyb2wocm9vdCkpfT5cbiAgICAgICAgPHRhYmxlIGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5nZXRUYWJsZUNzcygpfT5cbiAgICAgICAgICB7aGVhZGVyfVxuICAgICAgICAgIHtyb3dzfVxuICAgICAgICAgIHtmb290ZXJzfVxuICAgICAgICA8L3RhYmxlPlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxuICByZW5kZXJIZWFkZXIoKTogSlNYLkVsZW1lbnQgfCBudWxsIHtcbiAgICB2YXIgdGFibGUgPSB0aGlzLnF1ZXN0aW9uLnJlbmRlcmVkVGFibGU7XG4gICAgaWYgKCF0YWJsZS5zaG93SGVhZGVyKSByZXR1cm4gbnVsbDtcbiAgICB2YXIgaGVhZGVyczogYW55W10gPSBbXTtcbiAgICB2YXIgY2VsbHMgPSB0YWJsZS5oZWFkZXJSb3cuY2VsbHM7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjZWxscy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGNlbGwgPSBjZWxsc1tpXTtcbiAgICAgIHZhciBrZXkgPSBcImNvbHVtblwiICsgaTtcbiAgICAgIHZhciBjb2x1bW5TdHlsZTogYW55ID0ge307XG4gICAgICBpZiAoISFjZWxsLndpZHRoKSB7XG4gICAgICAgIGNvbHVtblN0eWxlLndpZHRoID0gY2VsbC53aWR0aDtcbiAgICAgIH1cbiAgICAgIGlmICghIWNlbGwubWluV2lkdGgpIHtcbiAgICAgICAgY29sdW1uU3R5bGUubWluV2lkdGggPSBjZWxsLm1pbldpZHRoO1xuICAgICAgfVxuICAgICAgdmFyIGNlbGxDb250ZW50ID0gdGhpcy5yZW5kZXJDZWxsQ29udGVudChjZWxsLCBcImNvbHVtbi1oZWFkZXJcIiwge30pO1xuICAgICAgY29uc3QgaGVhZGVyID0gY2VsbC5oYXNUaXRsZSA/XG4gICAgICAgIDx0aCBjbGFzc05hbWU9e2NlbGwuY2xhc3NOYW1lfSBrZXk9e2tleX0gc3R5bGU9e2NvbHVtblN0eWxlfT4ge2NlbGxDb250ZW50fSA8L3RoPlxuICAgICAgICA6IDx0ZCBjbGFzc05hbWU9e2NlbGwuY2xhc3NOYW1lfSBrZXk9e2tleX0gc3R5bGU9e2NvbHVtblN0eWxlfT48L3RkPjtcbiAgICAgIGhlYWRlcnMucHVzaChoZWFkZXIpO1xuICAgIH1cbiAgICByZXR1cm4gKFxuICAgICAgPHRoZWFkPlxuICAgICAgICA8dHI+e2hlYWRlcnN9PC90cj5cbiAgICAgIDwvdGhlYWQ+XG4gICAgKTtcbiAgfVxuICByZW5kZXJGb290ZXIoKTogSlNYLkVsZW1lbnQgfCBudWxsIHtcbiAgICB2YXIgdGFibGUgPSB0aGlzLnF1ZXN0aW9uLnJlbmRlcmVkVGFibGU7XG4gICAgaWYgKCF0YWJsZS5zaG93Rm9vdGVyKSByZXR1cm4gbnVsbDtcbiAgICB2YXIgcm93ID0gdGhpcy5yZW5kZXJSb3coXG4gICAgICBcImZvb3RlclwiLFxuICAgICAgdGFibGUuZm9vdGVyUm93LFxuICAgICAgdGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzXG4gICAgKTtcbiAgICByZXR1cm4gPHRmb290Pntyb3d9PC90Zm9vdD47XG4gIH1cbiAgcmVuZGVyUm93cygpOiBKU1guRWxlbWVudCB7XG4gICAgdmFyIGNzc0NsYXNzZXMgPSB0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXM7XG4gICAgdmFyIHJvd3M6QXJyYXk8SlNYLkVsZW1lbnQ+ID0gW107XG4gICAgdmFyIHJlbmRlcmVkUm93cyA9IHRoaXMucXVlc3Rpb24ucmVuZGVyZWRUYWJsZS5yb3dzO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmVuZGVyZWRSb3dzLmxlbmd0aDsgaSsrKSB7XG4gICAgICByb3dzLnB1c2goXG4gICAgICAgIHRoaXMucmVuZGVyUm93KHJlbmRlcmVkUm93c1tpXS5pZCwgcmVuZGVyZWRSb3dzW2ldLCBjc3NDbGFzc2VzKVxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIDx0Ym9keT57cm93c308L3Rib2R5PjtcbiAgfVxuICByZW5kZXJSb3coXG4gICAga2V5VmFsdWU6IGFueSxcbiAgICByb3c6IFF1ZXN0aW9uTWF0cml4RHJvcGRvd25SZW5kZXJlZFJvdyxcbiAgICBjc3NDbGFzc2VzOiBhbnlcbiAgKTogSlNYLkVsZW1lbnQge1xuICAgIHZhciBtYXRyaXhyb3c6QXJyYXk8SlNYLkVsZW1lbnQ+ID0gW107XG4gICAgdmFyIGNlbGxzID0gcm93LmNlbGxzO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjZWxscy5sZW5ndGg7IGkrKykge1xuICAgICAgbWF0cml4cm93LnB1c2godGhpcy5yZW5kZXJDZWxsKGNlbGxzW2ldLCBpLCBjc3NDbGFzc2VzKSk7XG4gICAgfVxuICAgIHZhciBrZXkgPSBcInJvd1wiICsga2V5VmFsdWU7XG5cbiAgICByZXR1cm4gKFxuICAgICAgPFJlYWN0LkZyYWdtZW50IGtleT17a2V5fT5cbiAgICAgICAgPE1hdHJpeFJvdyBtb2RlbD17cm93fSBwYXJlbnRNYXRyaXg9e3RoaXMucXVlc3Rpb259PnttYXRyaXhyb3d9PC9NYXRyaXhSb3c+XG4gICAgICA8L1JlYWN0LkZyYWdtZW50PlxuICAgICk7XG4gIH1cblxuICByZW5kZXJDZWxsKFxuICAgIGNlbGw6IFF1ZXN0aW9uTWF0cml4RHJvcGRvd25SZW5kZXJlZENlbGwsXG4gICAgaW5kZXg6IG51bWJlcixcbiAgICBjc3NDbGFzc2VzOiBhbnlcbiAgKTogSlNYLkVsZW1lbnQge1xuICAgIHZhciBrZXkgPSBcImNlbGxcIiArIGluZGV4O1xuICAgIGlmIChjZWxsLmhhc1F1ZXN0aW9uKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8U3VydmV5UXVlc3Rpb25NYXRyaXhEcm9wZG93bkNlbGxcbiAgICAgICAgICBrZXk9e2tleX1cbiAgICAgICAgICBjc3NDbGFzc2VzPXtjc3NDbGFzc2VzfVxuICAgICAgICAgIGNlbGw9e2NlbGx9XG4gICAgICAgICAgY3JlYXRvcj17dGhpcy5jcmVhdG9yfVxuICAgICAgICAvPlxuICAgICAgKTtcbiAgICB9XG4gICAgbGV0IHJlYXNvbiA9IGNlbGwuaGFzVGl0bGUgPyBcInJvdy1oZWFkZXJcIiA6IFwiXCI7XG4gICAgdmFyIGNlbGxDb250ZW50ID0gdGhpcy5yZW5kZXJDZWxsQ29udGVudChjZWxsLCByZWFzb24sIGNzc0NsYXNzZXMpO1xuICAgIHZhciBjZWxsU3R5bGU6IGFueSA9IG51bGw7XG4gICAgaWYgKCEhY2VsbC53aWR0aCB8fCAhIWNlbGwubWluV2lkdGgpIHtcbiAgICAgIGNlbGxTdHlsZSA9IHt9O1xuICAgICAgaWYgKCEhY2VsbC53aWR0aCkgY2VsbFN0eWxlLndpZHRoID0gY2VsbC53aWR0aDtcbiAgICAgIGlmICghIWNlbGwubWluV2lkdGgpIGNlbGxTdHlsZS5taW5XaWR0aCA9IGNlbGwubWluV2lkdGg7XG4gICAgfVxuXG4gICAgcmV0dXJuIChcbiAgICAgIDx0ZFxuICAgICAgICBjbGFzc05hbWU9e2NlbGwuY2xhc3NOYW1lfVxuICAgICAgICBrZXk9e2tleX1cbiAgICAgICAgc3R5bGU9e2NlbGxTdHlsZX1cbiAgICAgICAgY29sU3Bhbj17Y2VsbC5jb2xTcGFuc31cbiAgICAgID5cbiAgICAgICAge2NlbGxDb250ZW50fVxuICAgICAgPC90ZD5cbiAgICApO1xuICB9XG4gIHByaXZhdGUgcmVuZGVyQ2VsbENvbnRlbnQoXG4gICAgY2VsbDogUXVlc3Rpb25NYXRyaXhEcm9wZG93blJlbmRlcmVkQ2VsbCxcbiAgICByZWFzb246IHN0cmluZyxcbiAgICBjc3NDbGFzc2VzOiBhbnlcbiAgKTogSlNYLkVsZW1lbnQgfCBudWxsIHtcbiAgICB2YXIgY2VsbENvbnRlbnQ6IEpTWC5FbGVtZW50IHwgbnVsbCA9IG51bGw7XG4gICAgdmFyIGNlbGxTdHlsZTogYW55ID0gbnVsbDtcbiAgICBpZiAoISFjZWxsLndpZHRoIHx8ICEhY2VsbC5taW5XaWR0aCkge1xuICAgICAgY2VsbFN0eWxlID0ge307XG4gICAgICBpZiAoISFjZWxsLndpZHRoKSBjZWxsU3R5bGUud2lkdGggPSBjZWxsLndpZHRoO1xuICAgICAgaWYgKCEhY2VsbC5taW5XaWR0aCkgY2VsbFN0eWxlLm1pbldpZHRoID0gY2VsbC5taW5XaWR0aDtcbiAgICB9XG4gICAgaWYgKGNlbGwuaGFzVGl0bGUpIHtcbiAgICAgIHJlYXNvbiA9IFwicm93LWhlYWRlclwiO1xuICAgICAgY29uc3Qgc3RyID0gdGhpcy5yZW5kZXJMb2NTdHJpbmcoY2VsbC5sb2NUaXRsZSk7XG4gICAgICBjb25zdCByZXF1aXJlID0gISFjZWxsLmNvbHVtbiA/IDxTdXJ2ZXlRdWVzdGlvbk1hdHJpeEhlYWRlclJlcXVpcmVkIGNvbHVtbj17Y2VsbC5jb2x1bW59IHF1ZXN0aW9uPXt0aGlzLnF1ZXN0aW9ufS8+IDogbnVsbDtcbiAgICAgIGNlbGxDb250ZW50ID0gKDw+e3N0cn17cmVxdWlyZX08Lz4pO1xuICAgIH1cbiAgICBpZiAoY2VsbC5pc0RyYWdIYW5kbGVyQ2VsbCkge1xuICAgICAgY2VsbENvbnRlbnQgPSAoPD5cbiAgICAgICAgPFN1cnZleVF1ZXN0aW9uTWF0cml4RHluYW1pY0RyYWdEcm9wSWNvbiBpdGVtPXt7IGRhdGE6IHsgcm93OiBjZWxsLnJvdywgcXVlc3Rpb246IHRoaXMucXVlc3Rpb24gfSB9fS8+XG4gICAgICA8Lz4pO1xuICAgIH1cbiAgICBpZiAoY2VsbC5pc0FjdGlvbnNDZWxsKSB7XG4gICAgICBjZWxsQ29udGVudCA9IChcbiAgICAgICAgUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5jcmVhdGVFbGVtZW50KFwic3YtbWF0cml4ZHluYW1pYy1hY3Rpb25zLWNlbGxcIiwge1xuICAgICAgICAgIHF1ZXN0aW9uOiB0aGlzLnF1ZXN0aW9uLCBjc3NDbGFzc2VzLCBjZWxsLCBtb2RlbDogY2VsbC5pdGVtLmdldERhdGEoKVxuICAgICAgICB9KVxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKGNlbGwuaGFzUGFuZWwpIHtcbiAgICAgIGNlbGxDb250ZW50ID0gKFxuICAgICAgICA8U3VydmV5UGFuZWxcbiAgICAgICAgICBrZXk9e2NlbGwucGFuZWwuaWR9XG4gICAgICAgICAgZWxlbWVudD17Y2VsbC5wYW5lbH1cbiAgICAgICAgICBzdXJ2ZXk9e3RoaXMucXVlc3Rpb24uc3VydmV5fVxuICAgICAgICAgIGNzc0NsYXNzZXM9e2Nzc0NsYXNzZXN9XG4gICAgICAgICAgaXNEaXNwbGF5TW9kZT17dGhpcy5pc0Rpc3BsYXlNb2RlfVxuICAgICAgICAgIGNyZWF0b3I9e3RoaXMuY3JlYXRvcn1cbiAgICAgICAgLz5cbiAgICAgICk7XG4gICAgfVxuICAgIGlmICghY2VsbENvbnRlbnQpIHJldHVybiBudWxsO1xuXG4gICAgY29uc3QgcmVhZHlDZWxsID0gKFxuICAgICAgPD5cbiAgICAgICAge2NlbGxDb250ZW50fVxuICAgICAgPC8+XG4gICAgKTtcbiAgICByZXR1cm4gdGhpcy53cmFwQ2VsbChjZWxsLCByZWFkeUNlbGwsIHJlYXNvbik7XG4gIH1cbn1cblxuY2xhc3MgU3VydmV5UXVlc3Rpb25NYXRyaXhBY3Rpb25zQ2VsbCBleHRlbmRzIFJlYWN0U3VydmV5RWxlbWVudCB7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gIH1cbiAgZ2V0IG1vZGVsKCk6IEFkYXB0aXZlQWN0aW9uQ29udGFpbmVyIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5tb2RlbDtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyRWxlbWVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxTdXJ2ZXlBY3Rpb25CYXIgbW9kZWw9e3RoaXMubW9kZWx9IGhhbmRsZUNsaWNrPXtmYWxzZX0+PC9TdXJ2ZXlBY3Rpb25CYXI+XG4gICAgKTtcbiAgfVxufVxuXG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcbiAgXCJzdi1tYXRyaXhkeW5hbWljLWFjdGlvbnMtY2VsbFwiLFxuICAocHJvcHMpID0+IHtcbiAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTdXJ2ZXlRdWVzdGlvbk1hdHJpeEFjdGlvbnNDZWxsLCBwcm9wcyk7XG4gIH1cbik7XG5jbGFzcyBTdXJ2ZXlRdWVzdGlvbk1hdHJpeEhlYWRlclJlcXVpcmVkIGV4dGVuZHMgUmVhY3RTdXJ2ZXlFbGVtZW50IHtcbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgfVxuICBnZXQgY29sdW1uKCk6IE1hdHJpeERyb3Bkb3duQ29sdW1uIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5jb2x1bW47XG4gIH1cbiAgZ2V0IHF1ZXN0aW9uKCk6IFF1ZXN0aW9uIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5xdWVzdGlvbjtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0U3RhdGVFbGVtZW50KCk6IEJhc2Uge1xuICAgIHJldHVybiB0aGlzLmNvbHVtbjtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyRWxlbWVudCgpOiBKU1guRWxlbWVudCB8IG51bGwge1xuICAgIGlmKCF0aGlzLmNvbHVtbi5pc1JlbmRlcmVkUmVxdWlyZWQpIHJldHVybiBudWxsO1xuICAgIHJldHVybiAoXG4gICAgICA8PlxuICAgICAgICA8c3BhbiBjbGFzc05hbWU9e3RoaXMucXVlc3Rpb24uY3NzQ2xhc3Nlcy5jZWxsUmVxdWlyZWRUZXh0fT57dGhpcy5jb2x1bW4ucmVxdWlyZWRUZXh0fTwvc3Bhbj5cbiAgICAgIDwvPlxuICAgICk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFN1cnZleVF1ZXN0aW9uTWF0cml4RHJvcGRvd25DZWxsIGV4dGVuZHMgU3VydmV5UXVlc3Rpb25BbmRFcnJvcnNDZWxsIHtcbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgfVxuICBwcml2YXRlIGdldCBjZWxsKCk6IFF1ZXN0aW9uTWF0cml4RHJvcGRvd25SZW5kZXJlZENlbGwge1xuICAgIHJldHVybiB0aGlzLnByb3BzLmNlbGw7XG4gIH1cbiAgcHJvdGVjdGVkIGdldCBpdGVtQ3NzKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuICEhdGhpcy5jZWxsID8gdGhpcy5jZWxsLmNsYXNzTmFtZSA6IFwiXCI7XG4gIH1cbiAgcHJvdGVjdGVkIGdldFF1ZXN0aW9uKCk6IFF1ZXN0aW9uIHwgYW55IHtcbiAgICB2YXIgcSA9IHN1cGVyLmdldFF1ZXN0aW9uKCk7XG4gICAgaWYgKCEhcSkgcmV0dXJuIHE7XG4gICAgcmV0dXJuICEhdGhpcy5jZWxsID8gdGhpcy5jZWxsLnF1ZXN0aW9uIDogbnVsbDtcbiAgfVxuICBwcm90ZWN0ZWQgZG9BZnRlclJlbmRlcigpIHtcbiAgICB2YXIgZWwgPSB0aGlzLmNlbGxSZWYuY3VycmVudDtcbiAgICBpZiAoXG4gICAgICBlbCAmJlxuICAgICAgdGhpcy5jZWxsICYmXG4gICAgICB0aGlzLnF1ZXN0aW9uICYmXG4gICAgICB0aGlzLnF1ZXN0aW9uLnN1cnZleSAmJlxuICAgICAgZWwuZ2V0QXR0cmlidXRlKFwiZGF0YS1yZW5kZXJlZFwiKSAhPT0gXCJyXCJcbiAgICApIHtcbiAgICAgIGVsLnNldEF0dHJpYnV0ZShcImRhdGEtcmVuZGVyZWRcIiwgXCJyXCIpO1xuICAgICAgdmFyIG9wdGlvbnMgPSB7XG4gICAgICAgIGNlbGw6IHRoaXMuY2VsbCxcbiAgICAgICAgY2VsbFF1ZXN0aW9uOiB0aGlzLnF1ZXN0aW9uLFxuICAgICAgICBodG1sRWxlbWVudDogZWwsXG4gICAgICAgIHJvdzogdGhpcy5jZWxsLnJvdyxcbiAgICAgICAgY29sdW1uOiB0aGlzLmNlbGwuY2VsbC5jb2x1bW4sXG4gICAgICB9O1xuICAgICAgdGhpcy5xdWVzdGlvbi5zdXJ2ZXkubWF0cml4QWZ0ZXJDZWxsUmVuZGVyKHRoaXMucXVlc3Rpb24sIG9wdGlvbnMpO1xuICAgIH1cbiAgfVxuICBwcm90ZWN0ZWQgZ2V0U2hvd0Vycm9ycygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5xdWVzdGlvbi5pc1Zpc2libGUgJiZcbiAgICAgICghdGhpcy5jZWxsLmlzQ2hvaWNlIHx8IHRoaXMuY2VsbC5pc0ZpcnN0Q2hvaWNlKVxuICAgICk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldENlbGxTdHlsZSgpOiBhbnkge1xuICAgIHZhciByZXM6IGFueSA9IHN1cGVyLmdldENlbGxTdHlsZSgpO1xuICAgIGlmICghIXRoaXMuY2VsbC53aWR0aCB8fCAhIXRoaXMuY2VsbC5taW5XaWR0aCkge1xuICAgICAgaWYgKCFyZXMpIHJlcyA9IHt9O1xuICAgICAgaWYgKCEhdGhpcy5jZWxsLndpZHRoKSByZXMud2lkdGggPSB0aGlzLmNlbGwud2lkdGg7XG4gICAgICBpZiAoISF0aGlzLmNlbGwubWluV2lkdGgpIHJlcy5taW5XaWR0aCA9IHRoaXMuY2VsbC5taW5XaWR0aDtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldEhlYWRlclRleHQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5jZWxsLmhlYWRlcnM7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlclF1ZXN0aW9uKCk6IEpTWC5FbGVtZW50IHtcbiAgICBpZiAoIXRoaXMuY2VsbC5pc0Nob2ljZSlcbiAgICAgIHJldHVybiBTdXJ2ZXlRdWVzdGlvbi5yZW5kZXJRdWVzdGlvbkJvZHkodGhpcy5jcmVhdG9yLCB0aGlzLnF1ZXN0aW9uKTtcbiAgICBpZiAodGhpcy5jZWxsLmlzT3RoZXJDaG9pY2UpIHJldHVybiB0aGlzLnJlbmRlck90aGVyQ29tbWVudCgpO1xuICAgIGlmICh0aGlzLmNlbGwuaXNDaGVja2JveCkgcmV0dXJuIHRoaXMucmVuZGVyQ2VsbENoZWNrYm94QnV0dG9uKCk7XG4gICAgcmV0dXJuIHRoaXMucmVuZGVyQ2VsbFJhZGlvZ3JvdXBCdXR0b24oKTtcbiAgfVxuICBwcml2YXRlIHJlbmRlck90aGVyQ29tbWVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgY29uc3QgcXVlc3Rpb24gPSB0aGlzLmNlbGwucXVlc3Rpb247XG4gICAgY29uc3QgY3NzQ2xhc3NlcyA9IHF1ZXN0aW9uLmNzc0NsYXNzZXMgfHwge307XG4gICAgcmV0dXJuIDxTdXJ2ZXlRdWVzdGlvbkNvbW1lbnRJdGVtIHF1ZXN0aW9uPXtxdWVzdGlvbn0gY3NzQ2xhc3Nlcz17Y3NzQ2xhc3Nlc30gb3RoZXJDc3M9e2Nzc0NsYXNzZXMub3RoZXJ9IGlzRGlzcGxheU1vZGU9e3F1ZXN0aW9uLmlzSW5wdXRSZWFkT25seX0gLz47XG4gIH1cbiAgcHJpdmF0ZSByZW5kZXJDZWxsQ2hlY2tib3hCdXR0b24oKTogSlNYLkVsZW1lbnQge1xuICAgIHZhciBrZXkgPSB0aGlzLmNlbGwucXVlc3Rpb24uaWQgKyBcIml0ZW1cIiArIHRoaXMuY2VsbC5jaG9pY2VJbmRleDtcbiAgICByZXR1cm4gKFxuICAgICAgPFN1cnZleVF1ZXN0aW9uQ2hlY2tib3hJdGVtXG4gICAgICAgIGtleT17a2V5fVxuICAgICAgICBxdWVzdGlvbj17dGhpcy5jZWxsLnF1ZXN0aW9ufVxuICAgICAgICBjc3NDbGFzc2VzPXt0aGlzLmNlbGwucXVlc3Rpb24uY3NzQ2xhc3Nlc31cbiAgICAgICAgaXNEaXNwbGF5TW9kZT17dGhpcy5jZWxsLnF1ZXN0aW9uLmlzSW5wdXRSZWFkT25seX1cbiAgICAgICAgaXRlbT17dGhpcy5jZWxsLml0ZW19XG4gICAgICAgIGlzRmlyc3Q9e3RoaXMuY2VsbC5pc0ZpcnN0Q2hvaWNlfVxuICAgICAgICBpbmRleD17dGhpcy5jZWxsLmNob2ljZUluZGV4LnRvU3RyaW5nKCl9XG4gICAgICAgIGhpZGVDYXB0aW9uPXt0cnVlfVxuICAgICAgLz5cbiAgICApO1xuICB9XG4gIHByaXZhdGUgcmVuZGVyQ2VsbFJhZGlvZ3JvdXBCdXR0b24oKTogSlNYLkVsZW1lbnQge1xuICAgIHZhciBrZXkgPSB0aGlzLmNlbGwucXVlc3Rpb24uaWQgKyBcIml0ZW1cIiArIHRoaXMuY2VsbC5jaG9pY2VJbmRleDtcbiAgICByZXR1cm4gKFxuICAgICAgPFN1cnZleVF1ZXN0aW9uUmFkaW9JdGVtXG4gICAgICAgIGtleT17a2V5fVxuICAgICAgICBxdWVzdGlvbj17dGhpcy5jZWxsLnF1ZXN0aW9ufVxuICAgICAgICBjc3NDbGFzc2VzPXt0aGlzLmNlbGwucXVlc3Rpb24uY3NzQ2xhc3Nlc31cbiAgICAgICAgaXNEaXNwbGF5TW9kZT17dGhpcy5jZWxsLnF1ZXN0aW9uLmlzSW5wdXRSZWFkT25seX1cbiAgICAgICAgaXRlbT17dGhpcy5jZWxsLml0ZW19XG4gICAgICAgIGluZGV4PXt0aGlzLmNlbGwuY2hvaWNlSW5kZXgudG9TdHJpbmcoKX1cbiAgICAgICAgaXNDaGVja2VkPXt0aGlzLmNlbGwucXVlc3Rpb24udmFsdWUgPT09IHRoaXMuY2VsbC5pdGVtLnZhbHVlfVxuICAgICAgICBpc0Rpc2FibGVkPXt0aGlzLmNlbGwucXVlc3Rpb24uaXNSZWFkT25seSB8fCAhdGhpcy5jZWxsLml0ZW0uaXNFbmFibGVkfVxuICAgICAgICBoaWRlQ2FwdGlvbj17dHJ1ZX1cbiAgICAgIC8+XG4gICAgKTtcbiAgfVxufVxuIiwiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBSZWFjdFF1ZXN0aW9uRmFjdG9yeSB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fZmFjdG9yeVwiO1xuaW1wb3J0IHsgU3VydmV5UXVlc3Rpb25NYXRyaXhEcm9wZG93bkJhc2UgfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uX21hdHJpeGRyb3Bkb3duYmFzZVwiO1xuaW1wb3J0IHsgUXVlc3Rpb25NYXRyaXhEeW5hbWljTW9kZWwgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFJlYWN0RWxlbWVudEZhY3RvcnkgfSBmcm9tIFwiLi9lbGVtZW50LWZhY3RvcnlcIjtcbmltcG9ydCB7IFJlYWN0U3VydmV5RWxlbWVudCB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fZWxlbWVudFwiO1xuXG5leHBvcnQgY2xhc3MgU3VydmV5UXVlc3Rpb25NYXRyaXhEeW5hbWljIGV4dGVuZHMgU3VydmV5UXVlc3Rpb25NYXRyaXhEcm9wZG93bkJhc2Uge1xuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMuaGFuZGxlT25Sb3dBZGRDbGljayA9IHRoaXMuaGFuZGxlT25Sb3dBZGRDbGljay5iaW5kKHRoaXMpO1xuICB9XG4gIHByb3RlY3RlZCBnZXQgbWF0cml4KCk6IFF1ZXN0aW9uTWF0cml4RHluYW1pY01vZGVsIHtcbiAgICByZXR1cm4gdGhpcy5xdWVzdGlvbkJhc2UgYXMgUXVlc3Rpb25NYXRyaXhEeW5hbWljTW9kZWw7XG4gIH1cbiAgaGFuZGxlT25Sb3dBZGRDbGljayhldmVudDogYW55KSB7XG4gICAgdGhpcy5tYXRyaXguYWRkUm93VUkoKTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyRWxlbWVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgdmFyIGNzc0NsYXNzZXMgPSB0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXM7XG4gICAgdmFyIHNob3dUYWJsZSA9IHRoaXMucXVlc3Rpb24ucmVuZGVyZWRUYWJsZS5zaG93VGFibGU7XG4gICAgdmFyIG1haW5EaXYgPSBzaG93VGFibGVcbiAgICAgID8gdGhpcy5yZW5kZXJUYWJsZURpdigpXG4gICAgICA6IHRoaXMucmVuZGVyTm9Sb3dzQ29udGVudChjc3NDbGFzc2VzKTtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdj5cbiAgICAgICAge3RoaXMucmVuZGVyQWRkUm93QnV0dG9uT25Ub3AoY3NzQ2xhc3Nlcyl9XG4gICAgICAgIHttYWluRGl2fVxuICAgICAgICB7dGhpcy5yZW5kZXJBZGRSb3dCdXR0b25PbkJvdHRvbShjc3NDbGFzc2VzKX1cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckFkZFJvd0J1dHRvbk9uVG9wKGNzc0NsYXNzZXM6IGFueSk6IEpTWC5FbGVtZW50IHwgbnVsbCB7XG4gICAgaWYgKCF0aGlzLm1hdHJpeC5yZW5kZXJlZFRhYmxlLnNob3dBZGRSb3dPblRvcCkgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIHRoaXMucmVuZGVyQWRkUm93QnV0dG9uKGNzc0NsYXNzZXMpO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJBZGRSb3dCdXR0b25PbkJvdHRvbShjc3NDbGFzc2VzOiBhbnkpOiBKU1guRWxlbWVudCB8IG51bGwge1xuICAgIGlmICghdGhpcy5tYXRyaXgucmVuZGVyZWRUYWJsZS5zaG93QWRkUm93T25Cb3R0b20pIHJldHVybiBudWxsO1xuICAgIHJldHVybiB0aGlzLnJlbmRlckFkZFJvd0J1dHRvbihjc3NDbGFzc2VzKTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyTm9Sb3dzQ29udGVudChjc3NDbGFzc2VzOiBhbnkpOiBKU1guRWxlbWVudCB7XG4gICAgY29uc3QgdGV4dDogSlNYLkVsZW1lbnQgPSB0aGlzLnJlbmRlckxvY1N0cmluZyh0aGlzLm1hdHJpeC5sb2NFbXB0eVJvd3NUZXh0KTtcbiAgICBjb25zdCB0ZXh0RGl2OiBKU1guRWxlbWVudCA9IDxkaXYgY2xhc3NOYW1lPXtjc3NDbGFzc2VzLmVtcHR5Um93c1RleHR9Pnt0ZXh0fTwvZGl2PjtcbiAgICBjb25zdCBidG46IEpTWC5FbGVtZW50ID0gdGhpcy5yZW5kZXJBZGRSb3dCdXR0b24oY3NzQ2xhc3NlcywgdHJ1ZSk7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtjc3NDbGFzc2VzLmVtcHR5Um93c1NlY3Rpb259PlxuICAgICAgICB7dGV4dERpdn1cbiAgICAgICAge2J0bn1cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckFkZFJvd0J1dHRvbihcbiAgICBjc3NDbGFzc2VzOiBhbnksXG4gICAgaXNFbXB0eVNlY3Rpb246IGJvb2xlYW4gPSBmYWxzZVxuICApOiBKU1guRWxlbWVudCB7XG4gICAgcmV0dXJuIFJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UuY3JlYXRlRWxlbWVudChcInN2LW1hdHJpeGR5bmFtaWMtYWRkLWJ0blwiLCB7XG4gICAgICBxdWVzdGlvbjogdGhpcy5xdWVzdGlvbiwgY3NzQ2xhc3NlcywgaXNFbXB0eVNlY3Rpb25cbiAgICB9KTtcbiAgfVxufVxuXG5SZWFjdFF1ZXN0aW9uRmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlclF1ZXN0aW9uKFwibWF0cml4ZHluYW1pY1wiLCAocHJvcHMpID0+IHtcbiAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3VydmV5UXVlc3Rpb25NYXRyaXhEeW5hbWljLCBwcm9wcyk7XG59KTtcblxuZXhwb3J0IGNsYXNzIFN1cnZleVF1ZXN0aW9uTWF0cml4RHluYW1pY0FkZEJ1dHRvbiBleHRlbmRzIFJlYWN0U3VydmV5RWxlbWVudCB7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgdGhpcy5oYW5kbGVPblJvd0FkZENsaWNrID0gdGhpcy5oYW5kbGVPblJvd0FkZENsaWNrLmJpbmQodGhpcyk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldCBtYXRyaXgoKTogUXVlc3Rpb25NYXRyaXhEeW5hbWljTW9kZWwge1xuICAgIHJldHVybiB0aGlzLnByb3BzLnF1ZXN0aW9uIGFzIFF1ZXN0aW9uTWF0cml4RHluYW1pY01vZGVsO1xuICB9XG4gIGhhbmRsZU9uUm93QWRkQ2xpY2soZXZlbnQ6IGFueSkge1xuICAgIHRoaXMubWF0cml4LmFkZFJvd1VJKCk7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIGNvbnN0IGFkZFJvd1RleHQ6IEpTWC5FbGVtZW50ID0gdGhpcy5yZW5kZXJMb2NTdHJpbmcodGhpcy5tYXRyaXgubG9jQWRkUm93VGV4dCk7XG4gICAgY29uc3QgYWRkQnV0dG9uID0gKDxidXR0b25cbiAgICAgIGNsYXNzTmFtZT17dGhpcy5tYXRyaXguZ2V0QWRkUm93QnV0dG9uQ3NzKHRoaXMucHJvcHMuaXNFbXB0eVNlY3Rpb24pfVxuICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICBkaXNhYmxlZD17dGhpcy5tYXRyaXguaXNJbnB1dFJlYWRPbmx5fVxuICAgICAgb25DbGljaz17XG4gICAgICAgIHRoaXMubWF0cml4LmlzRGVzaWduTW9kZSA/IHVuZGVmaW5lZCA6IHRoaXMuaGFuZGxlT25Sb3dBZGRDbGlja1xuICAgICAgfVxuICAgID5cbiAgICAgIHthZGRSb3dUZXh0fVxuICAgICAgPHNwYW4gY2xhc3NOYW1lPXt0aGlzLnByb3BzLmNzc0NsYXNzZXMuaWNvbkFkZH0gLz5cbiAgICA8L2J1dHRvbj4pO1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLnByb3BzLmlzRW1wdHlTZWN0aW9uID8gYWRkQnV0dG9uIDogPGRpdiBjbGFzc05hbWU9e3RoaXMucHJvcHMuY3NzQ2xhc3Nlcy5mb290ZXJ9PnthZGRCdXR0b259PC9kaXY+XG4gICAgKTtcbiAgfVxufVxuXG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcbiAgXCJzdi1tYXRyaXhkeW5hbWljLWFkZC1idG5cIixcbiAgKHByb3BzKSA9PiB7XG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3VydmV5UXVlc3Rpb25NYXRyaXhEeW5hbWljQWRkQnV0dG9uLCBwcm9wcyk7XG4gIH1cbik7XG4iLCJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFN1cnZleVF1ZXN0aW9uRWxlbWVudEJhc2UgfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uX2VsZW1lbnRcIjtcbmltcG9ydCB7IElTdXJ2ZXlDcmVhdG9yLCBTdXJ2ZXlFbGVtZW50RXJyb3JzLCBTdXJ2ZXlRdWVzdGlvbkFuZEVycm9yc1dyYXBwZWQgfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uXCI7XG5pbXBvcnQgeyBRdWVzdGlvbk11bHRpcGxlVGV4dE1vZGVsLCBNdWx0aXBsZVRleHRJdGVtTW9kZWwgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFJlYWN0UXVlc3Rpb25GYWN0b3J5IH0gZnJvbSBcIi4vcmVhY3RxdWVzdGlvbl9mYWN0b3J5XCI7XG5pbXBvcnQgeyBSZWFjdFN1cnZleUVsZW1lbnQgfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uX2VsZW1lbnRcIjtcbmltcG9ydCB7IFRpdGxlQ29udGVudCB9IGZyb20gXCIuL2NvbXBvbmVudHMvdGl0bGUvdGl0bGUtY29udGVudFwiO1xuXG5leHBvcnQgY2xhc3MgU3VydmV5UXVlc3Rpb25NdWx0aXBsZVRleHQgZXh0ZW5kcyBTdXJ2ZXlRdWVzdGlvbkVsZW1lbnRCYXNlIHtcbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IHF1ZXN0aW9uKCk6IFF1ZXN0aW9uTXVsdGlwbGVUZXh0TW9kZWwge1xuICAgIHJldHVybiB0aGlzLnF1ZXN0aW9uQmFzZSBhcyBRdWVzdGlvbk11bHRpcGxlVGV4dE1vZGVsO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICB2YXIgY3NzQ2xhc3NlcyA9IHRoaXMucXVlc3Rpb24uY3NzQ2xhc3NlcztcbiAgICB2YXIgdGFibGVSb3dzID0gdGhpcy5xdWVzdGlvbi5nZXRSb3dzKCk7XG4gICAgdmFyIHJvd3M6QXJyYXk8SlNYLkVsZW1lbnQ+ID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0YWJsZVJvd3MubGVuZ3RoOyBpKyspIHtcbiAgICAgIHJvd3MucHVzaCh0aGlzLnJlbmRlclJvdyhpLCB0YWJsZVJvd3NbaV0sIGNzc0NsYXNzZXMpKTtcbiAgICB9XG4gICAgcmV0dXJuIChcbiAgICAgIDx0YWJsZSBjbGFzc05hbWU9e2Nzc0NsYXNzZXMucm9vdH0+XG4gICAgICAgIDx0Ym9keT57cm93c308L3Rib2R5PlxuICAgICAgPC90YWJsZT5cbiAgICApO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJSb3coXG4gICAgcm93SW5kZXg6IG51bWJlcixcbiAgICBpdGVtczogQXJyYXk8TXVsdGlwbGVUZXh0SXRlbU1vZGVsPixcbiAgICBjc3NDbGFzc2VzOiBhbnlcbiAgKSB7XG4gICAgdmFyIGtleTogc3RyaW5nID0gXCJpdGVtXCIgKyByb3dJbmRleDtcbiAgICB2YXIgdGRzOkFycmF5PEpTWC5FbGVtZW50PiA9IFtdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaXRlbXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBpdGVtID0gaXRlbXNbaV07XG4gICAgICB0ZHMucHVzaChcbiAgICAgICAgPHRkIGtleT17XCJpdGVtXCIgKyBpfSBjbGFzc05hbWU9e3RoaXMucXVlc3Rpb24uY3NzQ2xhc3Nlcy5jZWxsfT5cbiAgICAgICAgICA8U3VydmV5TXVsdGlwbGVUZXh0SXRlbSBxdWVzdGlvbj17dGhpcy5xdWVzdGlvbn0gaXRlbT17aXRlbX0gY3JlYXRvcj17dGhpcy5jcmVhdG9yfSBjc3NDbGFzc2VzPXtjc3NDbGFzc2VzfT48L1N1cnZleU11bHRpcGxlVGV4dEl0ZW0+XG4gICAgICAgIDwvdGQ+XG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gKFxuICAgICAgPHRyIGtleT17a2V5fSBjbGFzc05hbWU9e2Nzc0NsYXNzZXMucm93fT5cbiAgICAgICAge3Rkc31cbiAgICAgIDwvdHI+XG4gICAgKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgU3VydmV5TXVsdGlwbGVUZXh0SXRlbSBleHRlbmRzIFJlYWN0U3VydmV5RWxlbWVudCB7XG4gIHByaXZhdGUgZ2V0IHF1ZXN0aW9uKCk6IFF1ZXN0aW9uTXVsdGlwbGVUZXh0TW9kZWwge1xuICAgIHJldHVybiB0aGlzLnByb3BzLnF1ZXN0aW9uO1xuICB9XG4gIHByaXZhdGUgZ2V0IGl0ZW0oKTogTXVsdGlwbGVUZXh0SXRlbU1vZGVsIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5pdGVtO1xuICB9XG4gIHByb3RlY3RlZCBnZXRTdGF0ZUVsZW1lbnRzKCkge1xuICAgIHJldHVybiBbdGhpcy5pdGVtLCB0aGlzLml0ZW0uZWRpdG9yXTtcbiAgfVxuICBwcml2YXRlIGdldCBjcmVhdG9yKCk6IElTdXJ2ZXlDcmVhdG9yIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5jcmVhdG9yO1xuICB9XG5cbiAgcHJvdGVjdGVkIHJlbmRlckVsZW1lbnQoKSB7XG4gICAgY29uc3QgaXRlbSA9IHRoaXMuaXRlbTtcbiAgICBjb25zdCBjc3NDbGFzc2VzID0gdGhpcy5jc3NDbGFzc2VzO1xuICAgIHJldHVybiAoPGxhYmVsIGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5nZXRJdGVtTGFiZWxDc3MoaXRlbSl9PlxuICAgICAgPHNwYW4gY2xhc3NOYW1lPXtjc3NDbGFzc2VzLml0ZW1UaXRsZX0+XG4gICAgICAgIDxUaXRsZUNvbnRlbnQgZWxlbWVudD17aXRlbS5lZGl0b3J9IGNzc0NsYXNzZXM9e2l0ZW0uZWRpdG9yLmNzc0NsYXNzZXN9PjwvVGl0bGVDb250ZW50PlxuICAgICAgPC9zcGFuPlxuICAgICAgPFN1cnZleU11bHRpcGxlVGV4dEl0ZW1FZGl0b3JcbiAgICAgICAgY3NzQ2xhc3Nlcz17Y3NzQ2xhc3Nlc31cbiAgICAgICAgaXRlbUNzcz17dGhpcy5xdWVzdGlvbi5nZXRJdGVtQ3NzKCl9XG4gICAgICAgIHF1ZXN0aW9uPXtpdGVtLmVkaXRvcn1cbiAgICAgICAgY3JlYXRvcj17dGhpcy5jcmVhdG9yfVxuICAgICAgLz5cbiAgICAgIHt0aGlzLnJlbmRlckl0ZW1Ub29sdGlwRXJyb3IoaXRlbSwgY3NzQ2xhc3Nlcyl9XG4gICAgPC9sYWJlbD4pO1xuICB9XG5cbiAgcHJvdGVjdGVkIHJlbmRlckl0ZW1Ub29sdGlwRXJyb3IoaXRlbTogTXVsdGlwbGVUZXh0SXRlbU1vZGVsLCBjc3NDbGFzc2VzOiBhbnkpOiBKU1guRWxlbWVudCB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLml0ZW0uZWRpdG9yLmlzRXJyb3JzTW9kZVRvb2x0aXAgPyAoXG4gICAgICA8U3VydmV5RWxlbWVudEVycm9yc1xuICAgICAgICBlbGVtZW50PXtpdGVtLmVkaXRvcn1cbiAgICAgICAgY3NzQ2xhc3Nlcz17Y3NzQ2xhc3Nlc31cbiAgICAgICAgY3JlYXRvcj17dGhpcy5jcmVhdG9yfVxuICAgICAgICBsb2NhdGlvbj17XCJ0b29sdGlwXCJ9XG4gICAgICAgIGlkPXtpdGVtLmVkaXRvci5pZCArIFwiX2Vycm9yc1wifVxuICAgICAgLz5cbiAgICApOiBudWxsO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlNdWx0aXBsZVRleHRJdGVtRWRpdG9yIGV4dGVuZHMgU3VydmV5UXVlc3Rpb25BbmRFcnJvcnNXcmFwcGVkIHtcbiAgcHJvdGVjdGVkIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIHJldHVybiA8ZGl2IGNsYXNzTmFtZT17dGhpcy5pdGVtQ3NzfT57dGhpcy5yZW5kZXJDb250ZW50KCl9PC9kaXY+O1xuICB9XG59XG5cblJlYWN0UXVlc3Rpb25GYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyUXVlc3Rpb24oXCJtdWx0aXBsZXRleHRcIiwgKHByb3BzKSA9PiB7XG4gIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFN1cnZleVF1ZXN0aW9uTXVsdGlwbGVUZXh0LCBwcm9wcyk7XG59KTtcbiIsImltcG9ydCAqIGFzIFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgU3VydmV5UXVlc3Rpb25FbGVtZW50QmFzZSB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fZWxlbWVudFwiO1xuaW1wb3J0IHsgU3VydmV5TW9kZWwsIFF1ZXN0aW9uUGFuZWxEeW5hbWljTW9kZWwgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFN1cnZleVBhbmVsIH0gZnJvbSBcIi4vcGFuZWxcIjtcbmltcG9ydCB7IFJlYWN0UXVlc3Rpb25GYWN0b3J5IH0gZnJvbSBcIi4vcmVhY3RxdWVzdGlvbl9mYWN0b3J5XCI7XG5pbXBvcnQgeyBTdmdJY29uIH0gZnJvbSBcIi4vY29tcG9uZW50cy9zdmctaWNvbi9zdmctaWNvblwiO1xuaW1wb3J0IHsgU3VydmV5QWN0aW9uQmFyIH0gZnJvbSBcIi4vY29tcG9uZW50cy9hY3Rpb24tYmFyL2FjdGlvbi1iYXJcIjtcbmltcG9ydCB7IFN1cnZleVF1ZXN0aW9uUGFuZWxEeW5hbWljTmV4dEJ1dHRvbiB9IGZyb20gXCIuL2NvbXBvbmVudHMvcGFuZWxkeW5hbWljLWFjdGlvbnMvcGFuZWxkeW5hbWljLW5leHQtYnRuXCI7XG5pbXBvcnQgeyBTdXJ2ZXlRdWVzdGlvblBhbmVsRHluYW1pY1ByZXZCdXR0b24gfSBmcm9tIFwiLi9jb21wb25lbnRzL3BhbmVsZHluYW1pYy1hY3Rpb25zL3BhbmVsZHluYW1pYy1wcmV2LWJ0blwiO1xuaW1wb3J0IHsgU3VydmV5UXVlc3Rpb25QYW5lbER5bmFtaWNQcm9ncmVzc1RleHQgfSBmcm9tIFwiLi9jb21wb25lbnRzL3BhbmVsZHluYW1pYy1hY3Rpb25zL3BhbmVsZHluYW1pYy1wcm9ncmVzcy10ZXh0XCI7XG5pbXBvcnQgeyBTdXJ2ZXlRdWVzdGlvblBhbmVsRHluYW1pY0FkZEJ1dHRvbiB9IGZyb20gXCIuL2NvbXBvbmVudHMvcGFuZWxkeW5hbWljLWFjdGlvbnMvcGFuZWxkeW5hbWljLWFkZC1idG5cIjtcbmltcG9ydCB7IFN1cnZleVF1ZXN0aW9uUGFuZWxEeW5hbWljUmVtb3ZlQnV0dG9uIH0gZnJvbSBcIi4vY29tcG9uZW50cy9wYW5lbGR5bmFtaWMtYWN0aW9ucy9wYW5lbGR5bmFtaWMtcmVtb3ZlLWJ0blwiO1xuaW1wb3J0IHsgUmVhY3RFbGVtZW50RmFjdG9yeSB9IGZyb20gXCIuL2VsZW1lbnQtZmFjdG9yeVwiO1xuXG5leHBvcnQgY2xhc3MgU3VydmV5UXVlc3Rpb25QYW5lbER5bmFtaWMgZXh0ZW5kcyBTdXJ2ZXlRdWVzdGlvbkVsZW1lbnRCYXNlIHtcbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IHF1ZXN0aW9uKCk6IFF1ZXN0aW9uUGFuZWxEeW5hbWljTW9kZWwge1xuICAgIHJldHVybiB0aGlzLnF1ZXN0aW9uQmFzZSBhcyBRdWVzdGlvblBhbmVsRHluYW1pY01vZGVsO1xuICB9XG4gIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIHN1cGVyLmNvbXBvbmVudERpZE1vdW50KCk7XG4gICAgdGhpcy5zZXRTdGF0ZSh7IHBhbmVsQ291bnRlcjogMCB9KTtcbiAgICBjb25zdCBzZWxmOiBTdXJ2ZXlRdWVzdGlvblBhbmVsRHluYW1pYyA9IHRoaXM7XG4gICAgdGhpcy5xdWVzdGlvbi5wYW5lbENvdW50Q2hhbmdlZENhbGxiYWNrID0gZnVuY3Rpb24gKCkge1xuICAgICAgc2VsZi51cGRhdGVRdWVzdGlvblJlbmRlcmluZygpO1xuICAgIH07XG4gICAgdGhpcy5xdWVzdGlvbi5jdXJyZW50SW5kZXhDaGFuZ2VkQ2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBzZWxmLnVwZGF0ZVF1ZXN0aW9uUmVuZGVyaW5nKCk7XG4gICAgfTtcbiAgICB0aGlzLnF1ZXN0aW9uLnJlbmRlck1vZGVDaGFuZ2VkQ2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBzZWxmLnVwZGF0ZVF1ZXN0aW9uUmVuZGVyaW5nKCk7XG4gICAgfTtcbiAgfVxuICBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICBzdXBlci5jb21wb25lbnRXaWxsVW5tb3VudCgpO1xuICAgIHRoaXMucXVlc3Rpb24ucGFuZWxDb3VudENoYW5nZWRDYWxsYmFjayA9ICgpID0+IHt9O1xuICAgIHRoaXMucXVlc3Rpb24uY3VycmVudEluZGV4Q2hhbmdlZENhbGxiYWNrID0gKCkgPT4ge307XG4gICAgdGhpcy5xdWVzdGlvbi5yZW5kZXJNb2RlQ2hhbmdlZENhbGxiYWNrID0gKCkgPT4ge307XG4gIH1cbiAgcHJpdmF0ZSB1cGRhdGVRdWVzdGlvblJlbmRlcmluZygpIHtcbiAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgIHBhbmVsQ291bnRlcjogdGhpcy5zdGF0ZSA/IHRoaXMuc3RhdGUucGFuZWxDb3VudGVyICsgMSA6IDEsXG4gICAgfSk7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIGNvbnN0IHBhbmVsczpBcnJheTxKU1guRWxlbWVudD4gPSBbXTtcbiAgICBpZiAodGhpcy5xdWVzdGlvbi5pc1JlbmRlck1vZGVMaXN0KSB7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucXVlc3Rpb24ucGFuZWxzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IHBhbmVsID0gdGhpcy5xdWVzdGlvbi5wYW5lbHNbaV07XG4gICAgICAgIHBhbmVscy5wdXNoKFxuICAgICAgICAgIDxTdXJ2ZXlRdWVzdGlvblBhbmVsRHluYW1pY0l0ZW1cbiAgICAgICAgICAgIGtleT17cGFuZWwuaWR9XG4gICAgICAgICAgICBlbGVtZW50PXtwYW5lbH1cbiAgICAgICAgICAgIHF1ZXN0aW9uPXt0aGlzLnF1ZXN0aW9ufVxuICAgICAgICAgICAgaW5kZXg9e2l9XG4gICAgICAgICAgICBjc3NDbGFzc2VzPXt0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXN9XG4gICAgICAgICAgICBpc0Rpc3BsYXlNb2RlPXt0aGlzLmlzRGlzcGxheU1vZGV9XG4gICAgICAgICAgICBjcmVhdG9yPXt0aGlzLmNyZWF0b3J9XG4gICAgICAgICAgLz5cbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHRoaXMucXVlc3Rpb24uY3VycmVudFBhbmVsICE9IG51bGwpIHtcbiAgICAgICAgY29uc3QgcGFuZWwgPSB0aGlzLnF1ZXN0aW9uLmN1cnJlbnRQYW5lbDtcbiAgICAgICAgcGFuZWxzLnB1c2goXG4gICAgICAgICAgPFN1cnZleVF1ZXN0aW9uUGFuZWxEeW5hbWljSXRlbVxuICAgICAgICAgICAga2V5PXt0aGlzLnF1ZXN0aW9uLmN1cnJlbnRJbmRleH1cbiAgICAgICAgICAgIGVsZW1lbnQ9e3BhbmVsfVxuICAgICAgICAgICAgcXVlc3Rpb249e3RoaXMucXVlc3Rpb259XG4gICAgICAgICAgICBpbmRleD17dGhpcy5xdWVzdGlvbi5jdXJyZW50SW5kZXh9XG4gICAgICAgICAgICBjc3NDbGFzc2VzPXt0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXN9XG4gICAgICAgICAgICBpc0Rpc3BsYXlNb2RlPXt0aGlzLmlzRGlzcGxheU1vZGV9XG4gICAgICAgICAgICBjcmVhdG9yPXt0aGlzLmNyZWF0b3J9XG4gICAgICAgICAgLz5cbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgYnRuQWRkOiBKU1guRWxlbWVudCB8IG51bGwgPSB0aGlzLnF1ZXN0aW9uLmlzUmVuZGVyTW9kZUxpc3QgJiYgdGhpcy5xdWVzdGlvbltcInNob3dMZWdhY3lOYXZpZ2F0aW9uXCJdXG4gICAgICA/IHRoaXMucmVuZGVyQWRkUm93QnV0dG9uKClcbiAgICAgIDogbnVsbDtcbiAgICBjb25zdCBuYXZUb3A6IEpTWC5FbGVtZW50IHwgbnVsbCA9IHRoaXMucXVlc3Rpb24uaXNQcm9ncmVzc1RvcFNob3dpbmdcbiAgICAgID8gdGhpcy5yZW5kZXJOYXZpZ2F0b3IoKVxuICAgICAgOiBudWxsO1xuICAgIGNvbnN0IG5hdkJvdHRvbTogSlNYLkVsZW1lbnQgfCBudWxsID0gdGhpcy5xdWVzdGlvbi5pc1Byb2dyZXNzQm90dG9tU2hvd2luZ1xuICAgICAgPyB0aGlzLnJlbmRlck5hdmlnYXRvcigpXG4gICAgICA6IG51bGw7XG5cbiAgICBjb25zdCBzdHlsZTogYW55ID0ge307XG4gICAgY29uc3QgbmF2VjIgPSB0aGlzLnJlbmRlck5hdmlnYXRvclYyKCk7XG4gICAgY29uc3Qgbm9FbnRyaWVzUGxhY2Vob2xkZXIgPSB0aGlzLnJlbmRlclBsYWNlaG9sZGVyKCk7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPXt0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMucm9vdH0+XG4gICAgICAgIHtub0VudHJpZXNQbGFjZWhvbGRlcn1cbiAgICAgICAge25hdlRvcH1cbiAgICAgICAge3BhbmVsc31cbiAgICAgICAge25hdkJvdHRvbX1cbiAgICAgICAge2J0bkFkZH1cbiAgICAgICAge25hdlYyfVxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyTmF2aWdhdG9yKCk6IEpTWC5FbGVtZW50IHwgbnVsbCB7XG4gICAgaWYoIXRoaXMucXVlc3Rpb25bXCJzaG93TGVnYWN5TmF2aWdhdGlvblwiXSkge1xuICAgICAgaWYodGhpcy5xdWVzdGlvbi5pc1JhbmdlU2hvd2luZyAmJiB0aGlzLnF1ZXN0aW9uLmlzUHJvZ3Jlc3NUb3BTaG93aW5nKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlbmRlclJhbmdlKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgcmFuZ2U6IEpTWC5FbGVtZW50IHwgbnVsbCA9IHRoaXMucXVlc3Rpb24uaXNSYW5nZVNob3dpbmcgPyB0aGlzLnJlbmRlclJhbmdlKCkgOiBudWxsO1xuICAgIGNvbnN0IGJ0blByZXY6IEpTWC5FbGVtZW50ID0gdGhpcy5yZW5kcmVyUHJldkJ1dHRvbigpO1xuICAgIGNvbnN0IGJ0bk5leHQ6IEpTWC5FbGVtZW50ID0gdGhpcy5yZW5kcmVyTmV4dEJ1dHRvbigpO1xuICAgIGNvbnN0IGJ0bkFkZDogSlNYLkVsZW1lbnQgfCBudWxsID0gdGhpcy5yZW5kZXJBZGRSb3dCdXR0b24oKTtcbiAgICBjb25zdCBwcm9ncmVzc0NsYXNzOiBzdHJpbmcgPSB0aGlzLnF1ZXN0aW9uLmlzUHJvZ3Jlc3NUb3BTaG93aW5nXG4gICAgICA/IHRoaXMucXVlc3Rpb24uY3NzQ2xhc3Nlcy5wcm9ncmVzc1RvcFxuICAgICAgOiB0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMucHJvZ3Jlc3NCb3R0b207XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtwcm9ncmVzc0NsYXNzfT5cbiAgICAgICAgPGRpdiBzdHlsZT17eyBjbGVhcjogXCJib3RoXCIgfX0+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3RoaXMucXVlc3Rpb24uY3NzQ2xhc3Nlcy5wcm9ncmVzc0NvbnRhaW5lcn0+XG4gICAgICAgICAgICB7YnRuUHJldn1cbiAgICAgICAgICAgIHtyYW5nZX1cbiAgICAgICAgICAgIHtidG5OZXh0fVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIHtidG5BZGR9XG4gICAgICAgICAge3RoaXMucmVuZGVyUHJvZ3Jlc3NUZXh0KCl9XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxuICBwcml2YXRlIHJlbmRlclByb2dyZXNzVGV4dCgpOiBKU1guRWxlbWVudCB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxTdXJ2ZXlRdWVzdGlvblBhbmVsRHluYW1pY1Byb2dyZXNzVGV4dCBkYXRhPXsgeyBxdWVzdGlvbjogdGhpcy5xdWVzdGlvbiB9fT48L1N1cnZleVF1ZXN0aW9uUGFuZWxEeW5hbWljUHJvZ3Jlc3NUZXh0PlxuICAgICk7XG4gIH1cblxuICBwcm90ZWN0ZWQgcmVuZHJlclByZXZCdXR0b24oKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxTdXJ2ZXlRdWVzdGlvblBhbmVsRHluYW1pY1ByZXZCdXR0b24gZGF0YT17IHsgcXVlc3Rpb246IHRoaXMucXVlc3Rpb24gfX0+PC9TdXJ2ZXlRdWVzdGlvblBhbmVsRHluYW1pY1ByZXZCdXR0b24+XG4gICAgKTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZHJlck5leHRCdXR0b24oKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxTdXJ2ZXlRdWVzdGlvblBhbmVsRHluYW1pY05leHRCdXR0b24gZGF0YT17IHsgcXVlc3Rpb246IHRoaXMucXVlc3Rpb24gfX0+PC9TdXJ2ZXlRdWVzdGlvblBhbmVsRHluYW1pY05leHRCdXR0b24+XG4gICAgKTtcbiAgfVxuXG4gIHByb3RlY3RlZCByZW5kZXJSYW5nZSgpOiBKU1guRWxlbWVudCB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPXt0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMucHJvZ3Jlc3N9PlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3NOYW1lPXt0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMucHJvZ3Jlc3NCYXJ9XG4gICAgICAgICAgc3R5bGU9e3sgd2lkdGg6IHRoaXMucXVlc3Rpb24ucHJvZ3Jlc3MgfX1cbiAgICAgICAgICByb2xlPVwicHJvZ3Jlc3NiYXJcIlxuICAgICAgICAvPlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyQWRkUm93QnV0dG9uKCk6IEpTWC5FbGVtZW50IHwgbnVsbCB7XG4gICAgcmV0dXJuIFJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UuY3JlYXRlRWxlbWVudChcInN2LXBhbmVsZHluYW1pYy1hZGQtYnRuXCIsIHtcbiAgICAgIGRhdGE6IHsgcXVlc3Rpb246IHRoaXMucXVlc3Rpb24gfVxuICAgIH0pO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJOYXZpZ2F0b3JWMigpOiBKU1guRWxlbWVudCB8IG51bGwge1xuICAgIGlmICh0aGlzLnF1ZXN0aW9uLnBhbmVsQ291bnQgPT09IDAgfHwgdGhpcy5xdWVzdGlvbltcInNob3dMZWdhY3lOYXZpZ2F0aW9uXCJdKSByZXR1cm4gbnVsbDtcbiAgICBjb25zdCByYW5nZTogSlNYLkVsZW1lbnQgfCBudWxsID0gdGhpcy5xdWVzdGlvbi5pc1JhbmdlU2hvd2luZyAmJiAhdGhpcy5xdWVzdGlvbi5pc1Byb2dyZXNzVG9wU2hvd2luZyA/IHRoaXMucmVuZGVyUmFuZ2UoKSA6IG51bGw7XG4gICAgaWYgKCF0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMuZm9vdGVyKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuICg8ZGl2IGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLmZvb3Rlcn0+XG4gICAgICA8aHIgY2xhc3NOYW1lPXt0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMuc2VwYXJhdG9yfSAvPlxuICAgICAge3JhbmdlfVxuICAgICAgPGRpdiBjbGFzc05hbWU9e3RoaXMucXVlc3Rpb24uY3NzQ2xhc3Nlcy5mb290ZXJCdXR0b25zQ29udGFpbmVyfT5cbiAgICAgICAgPFN1cnZleUFjdGlvbkJhciBtb2RlbD17dGhpcy5xdWVzdGlvbi5mb290ZXJUb29sYmFyfT48L1N1cnZleUFjdGlvbkJhcj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2Pik7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlclBsYWNlaG9sZGVyKCk6IEpTWC5FbGVtZW50IHwgbnVsbCB7XG4gICAgaWYgKHRoaXMucXVlc3Rpb24uZ2V0U2hvd05vRW50cmllc1BsYWNlaG9sZGVyKCkpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXt0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMubm9FbnRyaWVzUGxhY2Vob2xkZXJ9PlxuICAgICAgICAgIDxzcGFuPnt0aGlzLnJlbmRlckxvY1N0cmluZyh0aGlzLnF1ZXN0aW9uLmxvY05vRW50cmllc1RleHQpfTwvc3Bhbj5cbiAgICAgICAgICB7dGhpcy5yZW5kZXJBZGRSb3dCdXR0b24oKX1cbiAgICAgICAgPC9kaXY+XG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgU3VydmV5UXVlc3Rpb25QYW5lbER5bmFtaWNJdGVtIGV4dGVuZHMgU3VydmV5UGFuZWwge1xuICBwcml2YXRlIGdldCBxdWVzdGlvbigpOiBRdWVzdGlvblBhbmVsRHluYW1pY01vZGVsIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5xdWVzdGlvbjtcbiAgfVxuICBwcml2YXRlIGdldCBpbmRleCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnByb3BzLmluZGV4O1xuICB9XG4gIHByb3RlY3RlZCBnZXRTdXJ2ZXkoKTogU3VydmV5TW9kZWwgfCBudWxsIHtcbiAgICByZXR1cm4gISF0aGlzLnF1ZXN0aW9uID8gKHRoaXMucXVlc3Rpb24uc3VydmV5IGFzIFN1cnZleU1vZGVsKSA6IG51bGw7XG4gIH1cbiAgcHJvdGVjdGVkIGdldENzcygpOiBhbnkge1xuICAgIGNvbnN0IHN1cnZleSA9IHRoaXMuZ2V0U3VydmV5KCk7XG4gICAgcmV0dXJuICEhc3VydmV5ID8gc3VydmV5LmdldENzcygpIDoge307XG4gIH1cbiAgcHVibGljIHJlbmRlcigpIHtcbiAgICBjb25zdCBwYW5lbCA9IHN1cGVyLnJlbmRlcigpO1xuICAgIGNvbnN0IHJlbW92ZUJ1dHRvbiA9IHRoaXMucmVuZGVyQnV0dG9uKCk7XG4gICAgY29uc3Qgc2VwYXJhdG9yOiBKU1guRWxlbWVudCB8IG51bGwgPSB0aGlzLnF1ZXN0aW9uLmlzUmVuZGVyTW9kZUxpc3QgJiYgdGhpcy5pbmRleCA8IHRoaXMucXVlc3Rpb24ucGFuZWxDb3VudCAtIDEgP1xuICAgICAgKDxociBjbGFzc05hbWU9e3RoaXMucXVlc3Rpb24uY3NzQ2xhc3Nlcy5zZXBhcmF0b3J9IC8+KSA6IG51bGw7XG4gICAgcmV0dXJuIChcbiAgICAgIDw+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXt0aGlzLnF1ZXN0aW9uLmdldFBhbmVsV3JhcHBlckNzcygpfT5cbiAgICAgICAgICB7cGFuZWx9XG4gICAgICAgICAge3JlbW92ZUJ1dHRvbn1cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIHtzZXBhcmF0b3J9XG4gICAgICA8Lz5cbiAgICApO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJCdXR0b24oKTogSlNYLkVsZW1lbnQgfCBudWxsIHtcbiAgICBpZiAoXG4gICAgICB0aGlzLnF1ZXN0aW9uLnBhbmVsUmVtb3ZlQnV0dG9uTG9jYXRpb24gIT09IFwicmlnaHRcIiB8fFxuICAgICAgIXRoaXMucXVlc3Rpb24uY2FuUmVtb3ZlUGFuZWwgfHxcbiAgICAgICh0aGlzLnF1ZXN0aW9uLmlzUmVuZGVyTW9kZUxpc3QgJiYgdGhpcy5wYW5lbC5pc0NvbGxhcHNlZClcbiAgICApIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5jcmVhdGVFbGVtZW50KFwic3YtcGFuZWxkeW5hbWljLXJlbW92ZS1idG5cIiwge1xuICAgICAgZGF0YTogeyBxdWVzdGlvbjogdGhpcy5xdWVzdGlvbiwgcGFuZWw6IHRoaXMucGFuZWwgfVxuICAgIH0pO1xuICB9XG59XG5cblJlYWN0UXVlc3Rpb25GYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyUXVlc3Rpb24oXCJwYW5lbGR5bmFtaWNcIiwgcHJvcHMgPT4ge1xuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTdXJ2ZXlRdWVzdGlvblBhbmVsRHluYW1pYywgcHJvcHMpO1xufSk7XG4iLCJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFN1cnZleVF1ZXN0aW9uRWxlbWVudEJhc2UsIFJlYWN0U3VydmV5RWxlbWVudCB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fZWxlbWVudFwiO1xuaW1wb3J0IHsgUXVlc3Rpb25SYWRpb2dyb3VwTW9kZWwsIEl0ZW1WYWx1ZSwgQmFzZSwgU3VydmV5TW9kZWwgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFN1cnZleVF1ZXN0aW9uQ29tbWVudEl0ZW0gfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uX2NvbW1lbnRcIjtcbmltcG9ydCB7IFJlYWN0UXVlc3Rpb25GYWN0b3J5IH0gZnJvbSBcIi4vcmVhY3RxdWVzdGlvbl9mYWN0b3J5XCI7XG5pbXBvcnQgeyBSZWFjdFN1cnZleUVsZW1lbnRzV3JhcHBlciB9IGZyb20gXCIuL3JlYWN0c3VydmV5bW9kZWxcIjtcbmltcG9ydCB7IFJlYWN0RWxlbWVudEZhY3RvcnkgfSBmcm9tIFwiLi9lbGVtZW50LWZhY3RvcnlcIjtcblxuZXhwb3J0IGNsYXNzIFN1cnZleVF1ZXN0aW9uUmFkaW9ncm91cCBleHRlbmRzIFN1cnZleVF1ZXN0aW9uRWxlbWVudEJhc2Uge1xuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICB9XG4gIHByb3RlY3RlZCBnZXQgcXVlc3Rpb24oKTogUXVlc3Rpb25SYWRpb2dyb3VwTW9kZWwge1xuICAgIHJldHVybiB0aGlzLnF1ZXN0aW9uQmFzZSBhcyBRdWVzdGlvblJhZGlvZ3JvdXBNb2RlbDtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyRWxlbWVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgdmFyIGNzc0NsYXNzZXMgPSB0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXM7XG4gICAgdmFyIGNsZWFyQnV0dG9uOiBKU1guRWxlbWVudCB8IG51bGwgPSBudWxsO1xuICAgIGlmICh0aGlzLnF1ZXN0aW9uLnNob3dDbGVhckJ1dHRvbkluQ29udGVudCkge1xuICAgICAgY2xlYXJCdXR0b24gPSAoXG4gICAgICAgIDxkaXY+XG4gICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLmNsZWFyQnV0dG9ufVxuICAgICAgICAgICAgb25DbGljaz17KCkgPT4gdGhpcy5xdWVzdGlvbi5jbGVhclZhbHVlKCl9XG4gICAgICAgICAgICB2YWx1ZT17dGhpcy5xdWVzdGlvbi5jbGVhckJ1dHRvbkNhcHRpb259XG4gICAgICAgICAgLz5cbiAgICAgICAgPC9kaXY+XG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gKFxuICAgICAgPGZpZWxkc2V0XG4gICAgICAgIGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5nZXRTZWxlY3RCYXNlUm9vdENzcygpfVxuICAgICAgICByb2xlPVwicHJlc2VudGF0aW9uXCJcbiAgICAgICAgcmVmPXsoZmllbGRzZXQpID0+ICh0aGlzLnNldENvbnRyb2woZmllbGRzZXQpKX1cbiAgICAgID5cbiAgICAgICAge3RoaXMucXVlc3Rpb24uaGFzQ29sdW1uc1xuICAgICAgICAgID8gdGhpcy5nZXRDb2x1bW5lZEJvZHkoY3NzQ2xhc3NlcylcbiAgICAgICAgICA6IHRoaXMuZ2V0Qm9keShjc3NDbGFzc2VzKX1cbiAgICAgICAge3RoaXMuZ2V0Rm9vdGVyKCl9XG4gICAgICAgIHt0aGlzLnF1ZXN0aW9uLmlzT3RoZXJTZWxlY3RlZCA/IHRoaXMucmVuZGVyT3RoZXIoY3NzQ2xhc3NlcykgOiBudWxsfVxuICAgICAgICB7Y2xlYXJCdXR0b259XG4gICAgICA8L2ZpZWxkc2V0PlxuICAgICk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldEZvb3RlcigpIHtcbiAgICBpZiAodGhpcy5xdWVzdGlvbi5oYXNGb290SXRlbXMpIHtcbiAgICAgIHJldHVybiB0aGlzLnF1ZXN0aW9uLmZvb3RJdGVtcy5tYXAoKGl0ZW06IGFueSwgaWk6IG51bWJlcikgPT5cbiAgICAgICAgdGhpcy5yZW5kZXJJdGVtKFxuICAgICAgICAgIFwiaXRlbV9mXCIgKyBpaSxcbiAgICAgICAgICBpdGVtLFxuICAgICAgICAgIGZhbHNlLFxuICAgICAgICAgIHRoaXMucXVlc3Rpb24uY3NzQ2xhc3Nlc1xuICAgICAgICApXG4gICAgICApO1xuICAgIH1cbiAgfVxuICBwcm90ZWN0ZWQgZ2V0Q29sdW1uZWRCb2R5KGNzc0NsYXNzZXM6IGFueSkge1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT17Y3NzQ2xhc3Nlcy5yb290TXVsdGlDb2x1bW59PlxuICAgICAgICB7dGhpcy5nZXRDb2x1bW5zKGNzc0NsYXNzZXMpfVxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0Q29sdW1ucyhjc3NDbGFzc2VzOiBhbnkpIHtcbiAgICB2YXIgdmFsdWUgPSB0aGlzLmdldFN0YXRlVmFsdWUoKTtcbiAgICByZXR1cm4gdGhpcy5xdWVzdGlvbi5jb2x1bW5zLm1hcCgoY29sdW1uOiBhbnksIGNpOiBudW1iZXIpID0+IHtcbiAgICAgIHZhciBpdGVtcyA9IGNvbHVtbi5tYXAoKGl0ZW06IGFueSwgaWk6IG51bWJlcikgPT5cbiAgICAgICAgdGhpcy5yZW5kZXJJdGVtKFwiaXRlbVwiICsgY2kgKyBpaSwgaXRlbSwgdmFsdWUsIGNzc0NsYXNzZXMsIFwiXCIgKyBjaSArIGlpKVxuICAgICAgKTtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxkaXYga2V5PXtcImNvbHVtblwiICsgY2l9IGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5nZXRDb2x1bW5DbGFzcygpfSByb2xlPVwicHJlc2VudGF0aW9uXCI+XG4gICAgICAgICAge2l0ZW1zfVxuICAgICAgICA8L2Rpdj5cbiAgICAgICk7XG4gICAgfSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0Qm9keShjc3NDbGFzc2VzOiBhbnkpOiBKU1guRWxlbWVudCB7XG4gICAgaWYodGhpcy5xdWVzdGlvbi5ibG9ja2VkUm93KSB7XG4gICAgICByZXR1cm4gPGRpdiBjbGFzc05hbWU9e2Nzc0NsYXNzZXMucm9vdFJvd30+e3RoaXMuZ2V0SXRlbXMoY3NzQ2xhc3NlcywgdGhpcy5xdWVzdGlvbi5kYXRhQ2hvaWNlcyl9PC9kaXY+O1xuICAgIH1cbiAgICBlbHNlIHJldHVybiA8Pnt0aGlzLmdldEl0ZW1zKGNzc0NsYXNzZXMsIHRoaXMucXVlc3Rpb24uYm9keUl0ZW1zKX08Lz47XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0SXRlbXMoY3NzQ2xhc3NlczogYW55LCBjaG9pY2VzOiBBcnJheSA8SXRlbVZhbHVlPik6IEFycmF5PGFueT4ge1xuICAgIHZhciBpdGVtczpBcnJheTxKU1guRWxlbWVudD4gPSBbXTtcbiAgICB2YXIgdmFsdWUgPSB0aGlzLmdldFN0YXRlVmFsdWUoKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNob2ljZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBpdGVtID0gY2hvaWNlc1tpXTtcbiAgICAgIHZhciByZW5kZXJlZEl0ZW0gPSB0aGlzLnJlbmRlckl0ZW0oXCJpdGVtXCIgKyBpLCBpdGVtLCB2YWx1ZSwgY3NzQ2xhc3NlcywgXCJcIiArIGkpO1xuICAgICAgaXRlbXMucHVzaChyZW5kZXJlZEl0ZW0pO1xuICAgIH1cbiAgICByZXR1cm4gaXRlbXM7XG4gIH1cbiAgcHJvdGVjdGVkIGdldCB0ZXh0U3R5bGUoKTogYW55IHtcbiAgICByZXR1cm4gbnVsbDsvL3sgZGlzcGxheTogXCJpbmxpbmVcIiwgcG9zaXRpb246IFwic3RhdGljXCIgfTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyT3RoZXIoY3NzQ2xhc3NlczogYW55KTogSlNYLkVsZW1lbnQge1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cImZvcm0tZ3JvdXBcIj5cbiAgICAgICAgPFN1cnZleVF1ZXN0aW9uQ29tbWVudEl0ZW1cbiAgICAgICAgICBxdWVzdGlvbj17dGhpcy5xdWVzdGlvbn1cbiAgICAgICAgICBvdGhlckNzcz17Y3NzQ2xhc3Nlcy5vdGhlcn1cbiAgICAgICAgICBjc3NDbGFzc2VzPXtjc3NDbGFzc2VzfVxuICAgICAgICAgIGlzRGlzcGxheU1vZGU9e3RoaXMuaXNEaXNwbGF5TW9kZX1cbiAgICAgICAgLz5cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbiAgcHJpdmF0ZSByZW5kZXJJdGVtKFxuICAgIGtleTogc3RyaW5nLFxuICAgIGl0ZW06IEl0ZW1WYWx1ZSxcbiAgICB2YWx1ZTogYW55LFxuICAgIGNzc0NsYXNzZXM6IGFueSxcbiAgICBpbmRleD86IHN0cmluZ1xuICApOiBKU1guRWxlbWVudCB7XG4gICAgY29uc3QgcmVuZGVyZWRJdGVtID0gUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5jcmVhdGVFbGVtZW50KHRoaXMucXVlc3Rpb24uaXRlbUNvbXBvbmVudCwge1xuICAgICAga2V5OiBrZXksXG4gICAgICBxdWVzdGlvbjogdGhpcy5xdWVzdGlvbixcbiAgICAgIGNzc0NsYXNzZXM6IGNzc0NsYXNzZXMsXG4gICAgICBpc0Rpc3BsYXlNb2RlOiB0aGlzLmlzRGlzcGxheU1vZGUsXG4gICAgICBpdGVtOiBpdGVtLFxuICAgICAgdGV4dFN0eWxlOiB0aGlzLnRleHRTdHlsZSxcbiAgICAgIGluZGV4OiBpbmRleCxcbiAgICAgIGlzQ2hlY2tlZDogdmFsdWUgPT09IGl0ZW0udmFsdWUsXG4gICAgfSk7XG4gICAgY29uc3Qgc3VydmV5ID0gdGhpcy5xdWVzdGlvbi5zdXJ2ZXkgYXMgU3VydmV5TW9kZWw7XG4gICAgbGV0IHdyYXBwZWRJdGVtOiBKU1guRWxlbWVudCB8IG51bGwgPSBudWxsO1xuICAgIGlmICghIXN1cnZleSkge1xuICAgICAgd3JhcHBlZEl0ZW0gPSBSZWFjdFN1cnZleUVsZW1lbnRzV3JhcHBlci53cmFwSXRlbVZhbHVlKHN1cnZleSwgcmVuZGVyZWRJdGVtLCB0aGlzLnF1ZXN0aW9uLCBpdGVtKTtcbiAgICB9XG4gICAgcmV0dXJuIHdyYXBwZWRJdGVtID8/IHJlbmRlcmVkSXRlbTtcbiAgfVxuICBwcml2YXRlIGdldFN0YXRlVmFsdWUoKTogYW55IHtcbiAgICByZXR1cm4gIXRoaXMucXVlc3Rpb24uaXNFbXB0eSgpID8gdGhpcy5xdWVzdGlvbi5yZW5kZXJlZFZhbHVlIDogXCJcIjtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgU3VydmV5UXVlc3Rpb25SYWRpb0l0ZW0gZXh0ZW5kcyBSZWFjdFN1cnZleUVsZW1lbnQge1xuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMuaGFuZGxlT25DaGFuZ2UgPSB0aGlzLmhhbmRsZU9uQ2hhbmdlLmJpbmQodGhpcyk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldFN0YXRlRWxlbWVudCgpOiBCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5pdGVtO1xuICB9XG4gIHByb3RlY3RlZCBnZXQgcXVlc3Rpb24oKTogUXVlc3Rpb25SYWRpb2dyb3VwTW9kZWwge1xuICAgIHJldHVybiB0aGlzLnByb3BzLnF1ZXN0aW9uO1xuICB9XG4gIHByb3RlY3RlZCBnZXQgaXRlbSgpOiBJdGVtVmFsdWUge1xuICAgIHJldHVybiB0aGlzLnByb3BzLml0ZW07XG4gIH1cbiAgcHJvdGVjdGVkIGdldCB0ZXh0U3R5bGUoKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy50ZXh0U3R5bGU7XG4gIH1cbiAgcHJvdGVjdGVkIGdldCBpbmRleCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnByb3BzLmluZGV4O1xuICB9XG4gIHByb3RlY3RlZCBnZXQgaXNDaGVja2VkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnByb3BzLmlzQ2hlY2tlZDtcbiAgfVxuICBwcml2YXRlIGdldCBoaWRlQ2FwdGlvbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5oaWRlQ2FwdGlvbiA9PT0gdHJ1ZTtcbiAgfVxuICBwdWJsaWMgc2hvdWxkQ29tcG9uZW50VXBkYXRlKG5leHRQcm9wczogYW55LCBuZXh0U3RhdGU6IGFueSk6IGJvb2xlYW4ge1xuICAgIGlmICghc3VwZXIuc2hvdWxkQ29tcG9uZW50VXBkYXRlKG5leHRQcm9wcywgbmV4dFN0YXRlKSkgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiAoXG4gICAgICAhdGhpcy5xdWVzdGlvbi5jdXN0b21XaWRnZXQgfHxcbiAgICAgICEhdGhpcy5xdWVzdGlvbi5jdXN0b21XaWRnZXREYXRhLmlzTmVlZFJlbmRlciB8fFxuICAgICAgISF0aGlzLnF1ZXN0aW9uLmN1c3RvbVdpZGdldC53aWRnZXRKc29uLmlzRGVmYXVsdFJlbmRlciB8fFxuICAgICAgISF0aGlzLnF1ZXN0aW9uLmN1c3RvbVdpZGdldC53aWRnZXRKc29uLnJlbmRlclxuICAgICk7XG4gIH1cbiAgaGFuZGxlT25DaGFuZ2UoZXZlbnQ6IGFueSkge1xuICAgIHRoaXMucXVlc3Rpb24ucmVuZGVyZWRWYWx1ZSA9IHRoaXMuaXRlbS52YWx1ZTtcbiAgfVxuICBwcm90ZWN0ZWQgY2FuUmVuZGVyKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIXRoaXMucXVlc3Rpb24gJiYgISF0aGlzLml0ZW07XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIHZhciBpdGVtVGV4dCA9ICF0aGlzLmhpZGVDYXB0aW9uXG4gICAgICA/IHRoaXMucmVuZGVyTG9jU3RyaW5nKHRoaXMuaXRlbS5sb2NUZXh0LCB0aGlzLnRleHRTdHlsZSlcbiAgICAgIDogXCJcIjtcbiAgICB2YXIgaXRlbUNsYXNzID0gdGhpcy5xdWVzdGlvbi5nZXRJdGVtQ2xhc3ModGhpcy5pdGVtKTtcbiAgICB2YXIgbGFiZWxDbGFzcyA9IHRoaXMucXVlc3Rpb24uZ2V0TGFiZWxDbGFzcyh0aGlzLml0ZW0pO1xuICAgIHZhciBsb2NUZXh0OiBhbnkgPSB0aGlzLml0ZW0ubG9jVGV4dDtcbiAgICB2YXIgY29udHJvbExhYmVsQ2xhc3MgPSB0aGlzLnF1ZXN0aW9uLmdldENvbnRyb2xMYWJlbENsYXNzKHRoaXMuaXRlbSk7XG5cbiAgICByZXR1cm4gKFxuICAgICAgPGRpdlxuICAgICAgICBjbGFzc05hbWU9e2l0ZW1DbGFzc31cbiAgICAgICAgcm9sZT1cInByZXNlbnRhdGlvblwiXG4gICAgICA+XG4gICAgICAgIDxsYWJlbCBjbGFzc05hbWU9e2xhYmVsQ2xhc3N9IGFyaWEtbGFiZWw9e3RoaXMucXVlc3Rpb24uZ2V0QXJpYUl0ZW1MYWJlbCh0aGlzLml0ZW0pfT5cbiAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgIGFyaWEtZGVzY3JpYmVkYnk9e3RoaXMucXVlc3Rpb24uYXJpYURlc2NyaWJlZEJ5fVxuICAgICAgICAgICAgY2xhc3NOYW1lPXt0aGlzLmNzc0NsYXNzZXMuaXRlbUNvbnRyb2x9XG4gICAgICAgICAgICBpZD17dGhpcy5xdWVzdGlvbi5nZXRJdGVtSWQodGhpcy5pdGVtKX1cbiAgICAgICAgICAgIHR5cGU9XCJyYWRpb1wiXG4gICAgICAgICAgICBuYW1lPXt0aGlzLnF1ZXN0aW9uLnF1ZXN0aW9uTmFtZX1cbiAgICAgICAgICAgIGNoZWNrZWQ9e3RoaXMuaXNDaGVja2VkfVxuICAgICAgICAgICAgdmFsdWU9e3RoaXMuaXRlbS52YWx1ZX1cbiAgICAgICAgICAgIGRpc2FibGVkPXshdGhpcy5xdWVzdGlvbi5nZXRJdGVtRW5hYmxlZCh0aGlzLml0ZW0pfVxuICAgICAgICAgICAgb25DaGFuZ2U9e3RoaXMuaGFuZGxlT25DaGFuZ2V9XG4gICAgICAgICAgLz5cbiAgICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmNzc0NsYXNzZXMubWF0ZXJpYWxEZWNvcmF0b3IgP1xuICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9e3RoaXMuY3NzQ2xhc3Nlcy5tYXRlcmlhbERlY29yYXRvcn0+XG4gICAgICAgICAgICAgICAge3RoaXMucXVlc3Rpb24uaXRlbVN2Z0ljb24gP1xuICAgICAgICAgICAgICAgICAgPHN2Z1xuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9e3RoaXMuY3NzQ2xhc3Nlcy5pdGVtRGVjb3JhdG9yfVxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8dXNlIHhsaW5rSHJlZj17dGhpcy5xdWVzdGlvbi5pdGVtU3ZnSWNvbn0+PC91c2U+XG4gICAgICAgICAgICAgICAgICA8L3N2Zz4gOlxuICAgICAgICAgICAgICAgICAgbnVsbFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgPC9zcGFuPiA6XG4gICAgICAgICAgICAgIG51bGxcbiAgICAgICAgICB9XG4gICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPXtjb250cm9sTGFiZWxDbGFzc30+XG4gICAgICAgICAgICB7aXRlbVRleHR9XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L2xhYmVsPlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxufVxuXG5SZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyRWxlbWVudChcInN1cnZleS1yYWRpb2dyb3VwLWl0ZW1cIiwgKHByb3BzOiBhbnkpID0+IHtcbiAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3VydmV5UXVlc3Rpb25SYWRpb0l0ZW0sIHByb3BzKTtcbn0pO1xuXG5SZWFjdFF1ZXN0aW9uRmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlclF1ZXN0aW9uKFwicmFkaW9ncm91cFwiLCAocHJvcHMpID0+IHtcbiAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3VydmV5UXVlc3Rpb25SYWRpb2dyb3VwLCBwcm9wcyk7XG59KTtcbiIsImltcG9ydCAqIGFzIFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHtcbiAgUmVhY3RTdXJ2ZXlFbGVtZW50LFxuICBTdXJ2ZXlRdWVzdGlvbkVsZW1lbnRCYXNlLFxufSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uX2VsZW1lbnRcIjtcbmltcG9ydCB7IFF1ZXN0aW9uUmFua2luZ01vZGVsLCBTdXJ2ZXlNb2RlbCwgSXRlbVZhbHVlIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBSZWFjdFF1ZXN0aW9uRmFjdG9yeSB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fZmFjdG9yeVwiO1xuaW1wb3J0IHsgUmVhY3RTdXJ2ZXlFbGVtZW50c1dyYXBwZXIgfSBmcm9tIFwiLi9yZWFjdHN1cnZleW1vZGVsXCI7XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlRdWVzdGlvblJhbmtpbmcgZXh0ZW5kcyBTdXJ2ZXlRdWVzdGlvbkVsZW1lbnRCYXNlIHtcbiAgcHJvdGVjdGVkIGdldCBxdWVzdGlvbigpOiBRdWVzdGlvblJhbmtpbmdNb2RlbCB7XG4gICAgcmV0dXJuIHRoaXMucXVlc3Rpb25CYXNlIGFzIFF1ZXN0aW9uUmFua2luZ01vZGVsO1xuICB9XG5cbiAgcHJvdGVjdGVkIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5yb290Q2xhc3N9XG4gICAgICAgIHJlZj17KHJvb3QpID0+ICh0aGlzLnNldENvbnRyb2wocm9vdCkpfVxuICAgICAgPlxuICAgICAgICB7dGhpcy5nZXRJdGVtcygpfVxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRJdGVtcygpOiBBcnJheTxhbnk+IHtcbiAgICBjb25zdCBpdGVtczogQXJyYXk8SlNYLkVsZW1lbnQ+ID0gW107XG4gICAgY29uc3QgcmFua2luZ0Nob2ljZXMgPSB0aGlzLnF1ZXN0aW9uLnJhbmtpbmdDaG9pY2VzO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcmFua2luZ0Nob2ljZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IGl0ZW0gPSByYW5raW5nQ2hvaWNlc1tpXTtcbiAgICAgIGl0ZW1zLnB1c2goXG4gICAgICAgIHRoaXMucmVuZGVySXRlbShcbiAgICAgICAgICBpdGVtLFxuICAgICAgICAgIGksXG4gICAgICAgICAgKGV2ZW50OiBQb2ludGVyRXZlbnQpID0+IHtcbiAgICAgICAgICAgIHRoaXMucXVlc3Rpb24uaGFuZGxlS2V5ZG93bi5jYWxsKHRoaXMucXVlc3Rpb24sIGV2ZW50LCBpdGVtKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIChldmVudDogYW55KSA9PiB7XG4gICAgICAgICAgICBldmVudC5wZXJzaXN0KCk7XG4gICAgICAgICAgICAvL2V2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICB0aGlzLnF1ZXN0aW9uLmhhbmRsZVBvaW50ZXJEb3duLmNhbGwoXG4gICAgICAgICAgICAgIHRoaXMucXVlc3Rpb24sXG4gICAgICAgICAgICAgIGV2ZW50LFxuICAgICAgICAgICAgICBpdGVtLFxuICAgICAgICAgICAgICBldmVudC5jdXJyZW50VGFyZ2V0XG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgdGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLFxuICAgICAgICAgIHRoaXMucXVlc3Rpb24uZ2V0SXRlbUNsYXNzKGl0ZW0pLFxuICAgICAgICAgIHRoaXMucXVlc3Rpb25cbiAgICAgICAgKVxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIGl0ZW1zO1xuICB9XG5cbiAgcHJvdGVjdGVkIHJlbmRlckl0ZW0oXG4gICAgaXRlbTogSXRlbVZhbHVlLFxuICAgIGk6IG51bWJlcixcbiAgICBoYW5kbGVLZXlkb3duOiAoZXZlbnQ6IGFueSkgPT4gdm9pZCxcbiAgICBoYW5kbGVQb2ludGVyRG93bjogKGV2ZW50OiBQb2ludGVyRXZlbnQpID0+IHZvaWQsXG4gICAgY3NzQ2xhc3NlczogYW55LFxuICAgIGl0ZW1DbGFzczogc3RyaW5nLFxuICAgIHF1ZXN0aW9uOiBRdWVzdGlvblJhbmtpbmdNb2RlbFxuICApOiBKU1guRWxlbWVudCB7XG4gICAgY29uc3Qga2V5OiBzdHJpbmcgPSBpdGVtLnZhbHVlICsgXCItXCIgKyBpICsgXCItaXRlbVwiO1xuICAgIGNvbnN0IHRleHQ6IEpTWC5FbGVtZW50ID0gdGhpcy5yZW5kZXJMb2NTdHJpbmcoaXRlbS5sb2NUZXh0KTtcbiAgICBjb25zdCBpbmRleCA9IGk7XG4gICAgY29uc3QgaW5kZXhUZXh0OiBzdHJpbmcgPSB0aGlzLnF1ZXN0aW9uLmdldE51bWJlckJ5SW5kZXgoaSk7XG4gICAgY29uc3QgdGFiSW5kZXg6IG51bWJlciA9IHRoaXMucXVlc3Rpb24uZ2V0SXRlbVRhYkluZGV4KGl0ZW0pO1xuICAgIGNvbnN0IHJlbmRlcmVkSXRlbSA9IChcbiAgICAgIDxTdXJ2ZXlRdWVzdGlvblJhbmtpbmdJdGVtXG4gICAgICAgIGtleT17a2V5fVxuICAgICAgICB0ZXh0PXt0ZXh0fVxuICAgICAgICBpbmRleD17aW5kZXh9XG4gICAgICAgIGluZGV4VGV4dD17aW5kZXhUZXh0fVxuICAgICAgICBpdGVtVGFiSW5kZXg9e3RhYkluZGV4fVxuICAgICAgICBoYW5kbGVLZXlkb3duPXtoYW5kbGVLZXlkb3dufVxuICAgICAgICBoYW5kbGVQb2ludGVyRG93bj17aGFuZGxlUG9pbnRlckRvd259XG4gICAgICAgIGNzc0NsYXNzZXM9e2Nzc0NsYXNzZXN9XG4gICAgICAgIGl0ZW1DbGFzcz17aXRlbUNsYXNzfVxuICAgICAgICBxdWVzdGlvbj17cXVlc3Rpb259XG4gICAgICAvPlxuICAgICk7XG4gICAgY29uc3Qgc3VydmV5ID0gdGhpcy5xdWVzdGlvbi5zdXJ2ZXkgYXMgU3VydmV5TW9kZWw7XG4gICAgbGV0IHdyYXBwZWRJdGVtOiBKU1guRWxlbWVudCB8IG51bGwgPSBudWxsO1xuICAgIGlmICghIXN1cnZleSkge1xuICAgICAgd3JhcHBlZEl0ZW0gPSBSZWFjdFN1cnZleUVsZW1lbnRzV3JhcHBlci53cmFwSXRlbVZhbHVlKHN1cnZleSwgcmVuZGVyZWRJdGVtLCB0aGlzLnF1ZXN0aW9uLCBpdGVtKTtcbiAgICB9XG4gICAgcmV0dXJuIHdyYXBwZWRJdGVtID8/IHJlbmRlcmVkSXRlbTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgU3VydmV5UXVlc3Rpb25SYW5raW5nSXRlbSBleHRlbmRzIFJlYWN0U3VydmV5RWxlbWVudCB7XG4gIHByb3RlY3RlZCBnZXQgdGV4dCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByb3BzLnRleHQ7XG4gIH1cbiAgcHJvdGVjdGVkIGdldCBpbmRleCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByb3BzLmluZGV4O1xuICB9XG4gIHByb3RlY3RlZCBnZXQgaW5kZXhUZXh0KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuaW5kZXhUZXh0O1xuICB9XG4gIHByb3RlY3RlZCBnZXQgaGFuZGxlS2V5ZG93bigpOiAoZXZlbnQ6IGFueSkgPT4gdm9pZCB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuaGFuZGxlS2V5ZG93bjtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IGhhbmRsZVBvaW50ZXJEb3duKCk6IChldmVudDogYW55KSA9PiB2b2lkIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5oYW5kbGVQb2ludGVyRG93bjtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IGNzc0NsYXNzZXMoKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5jc3NDbGFzc2VzO1xuICB9XG4gIHByb3RlY3RlZCBnZXQgaXRlbUNsYXNzKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuaXRlbUNsYXNzO1xuICB9XG4gIHByb3RlY3RlZCBnZXQgaXRlbVRhYkluZGV4KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuaXRlbVRhYkluZGV4O1xuICB9XG4gIHByb3RlY3RlZCBnZXQgcXVlc3Rpb24oKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5xdWVzdGlvbjtcbiAgfVxuXG4gIHByb3RlY3RlZCByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdlxuICAgICAgICB0YWJJbmRleD17dGhpcy5pdGVtVGFiSW5kZXh9XG4gICAgICAgIGNsYXNzTmFtZT17dGhpcy5pdGVtQ2xhc3N9XG4gICAgICAgIG9uS2V5RG93bj17dGhpcy5oYW5kbGVLZXlkb3dufVxuICAgICAgICBvblBvaW50ZXJEb3duPXt0aGlzLmhhbmRsZVBvaW50ZXJEb3dufVxuICAgICAgICBkYXRhLXN2LWRyb3AtdGFyZ2V0LXJhbmtpbmctaXRlbT17dGhpcy5pbmRleH1cbiAgICAgID5cbiAgICAgICAgPGRpdiB0YWJJbmRleD17LTF9IHN0eWxlPXt7IG91dGxpbmU6IFwibm9uZVwiIH19PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXt0aGlzLmNzc0NsYXNzZXMuaXRlbUdob3N0Tm9kZX0gLz5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17dGhpcy5jc3NDbGFzc2VzLml0ZW1Db250ZW50fT5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXt0aGlzLmNzc0NsYXNzZXMuaXRlbUljb25Db250YWluZXJ9PlxuICAgICAgICAgICAgICA8c3ZnXG4gICAgICAgICAgICAgICAgd2lkdGg9XCIxMFwiXG4gICAgICAgICAgICAgICAgaGVpZ2h0PVwiMTZcIlxuICAgICAgICAgICAgICAgIHZpZXdCb3g9XCIwIDAgMTAgMTZcIlxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5nZXRJY29uSG92ZXJDc3MoKX1cbiAgICAgICAgICAgICAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNNiAyQzYgMC45IDYuOSAwIDggMEM5LjEgMCAxMCAwLjkgMTAgMkMxMCAzLjEgOS4xIDQgOCA0QzYuOSA0IDYgMy4xIDYgMlpNMiAwQzAuOSAwIDAgMC45IDAgMkMwIDMuMSAwLjkgNCAyIDRDMy4xIDQgNCAzLjEgNCAyQzQgMC45IDMuMSAwIDIgMFpNOCA2QzYuOSA2IDYgNi45IDYgOEM2IDkuMSA2LjkgMTAgOCAxMEM5LjEgMTAgMTAgOS4xIDEwIDhDMTAgNi45IDkuMSA2IDggNlpNMiA2QzAuOSA2IDAgNi45IDAgOEMwIDkuMSAwLjkgMTAgMiAxMEMzLjEgMTAgNCA5LjEgNCA4QzQgNi45IDMuMSA2IDIgNlpNOCAxMkM2LjkgMTIgNiAxMi45IDYgMTRDNiAxNS4xIDYuOSAxNiA4IDE2QzkuMSAxNiAxMCAxNS4xIDEwIDE0QzEwIDEyLjkgOS4xIDEyIDggMTJaTTIgMTJDMC45IDEyIDAgMTIuOSAwIDE0QzAgMTUuMSAwLjkgMTYgMiAxNkMzLjEgMTYgNCAxNS4xIDQgMTRDNCAxMi45IDMuMSAxMiAyIDEyWlwiIC8+XG4gICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgICA8c3ZnXG4gICAgICAgICAgICAgICAgd2lkdGg9XCIxMFwiXG4gICAgICAgICAgICAgICAgaGVpZ2h0PVwiMjRcIlxuICAgICAgICAgICAgICAgIHZpZXdCb3g9XCIwIDAgMTAgMjRcIlxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5nZXRJY29uRm9jdXNDc3MoKX1cbiAgICAgICAgICAgICAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMTAgNUw1IDBMMCA1SDRWOUg2VjVIMTBaXCIgLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTYgMTlWMTVINFYxOUgwTDUgMjRMMTAgMTlINlpcIiAvPlxuICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17dGhpcy5jc3NDbGFzc2VzLml0ZW1JbmRleH0+e3RoaXMuaW5kZXhUZXh0fTwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3RoaXMuY3NzQ2xhc3Nlcy5jb250cm9sTGFiZWx9Pnt0aGlzLnRleHR9PC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxufVxuXG5SZWFjdFF1ZXN0aW9uRmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlclF1ZXN0aW9uKFwicmFua2luZ1wiLCAocHJvcHMpID0+IHtcbiAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3VydmV5UXVlc3Rpb25SYW5raW5nLCBwcm9wcyk7XG59KTtcbiIsImltcG9ydCAqIGFzIFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgU3VydmV5UXVlc3Rpb25FbGVtZW50QmFzZSB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fZWxlbWVudFwiO1xuaW1wb3J0IHsgU3VydmV5UXVlc3Rpb25Db21tZW50SXRlbSB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fY29tbWVudFwiO1xuaW1wb3J0IHsgUXVlc3Rpb25SYXRpbmdNb2RlbCwgUmVuZGVyZWRSYXRpbmdJdGVtIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBSZWFjdFF1ZXN0aW9uRmFjdG9yeSB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fZmFjdG9yeVwiO1xuXG5leHBvcnQgY2xhc3MgU3VydmV5UXVlc3Rpb25SYXRpbmcgZXh0ZW5kcyBTdXJ2ZXlRdWVzdGlvbkVsZW1lbnRCYXNlIHtcbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLmhhbmRsZU9uQ2xpY2sgPSB0aGlzLmhhbmRsZU9uQ2xpY2suYmluZCh0aGlzKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IHF1ZXN0aW9uKCk6IFF1ZXN0aW9uUmF0aW5nTW9kZWwge1xuICAgIHJldHVybiB0aGlzLnF1ZXN0aW9uQmFzZSBhcyBRdWVzdGlvblJhdGluZ01vZGVsO1xuICB9XG4gIGhhbmRsZU9uQ2xpY2soZXZlbnQ6IGFueSkge1xuICAgIHRoaXMucXVlc3Rpb24uc2V0VmFsdWVGcm9tQ2xpY2soZXZlbnQudGFyZ2V0LnZhbHVlKTtcbiAgICB0aGlzLnNldFN0YXRlKHsgdmFsdWU6IHRoaXMucXVlc3Rpb24udmFsdWUgfSk7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIHZhciBjc3NDbGFzc2VzID0gdGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzO1xuICAgIHZhciBtaW5UZXh0ID0gdGhpcy5xdWVzdGlvbi5taW5SYXRlRGVzY3JpcHRpb25cbiAgICAgID8gdGhpcy5yZW5kZXJMb2NTdHJpbmcodGhpcy5xdWVzdGlvbi5sb2NNaW5SYXRlRGVzY3JpcHRpb24pXG4gICAgICA6IG51bGw7XG4gICAgdmFyIG1heFRleHQgPSB0aGlzLnF1ZXN0aW9uLm1heFJhdGVEZXNjcmlwdGlvblxuICAgICAgPyB0aGlzLnJlbmRlckxvY1N0cmluZyh0aGlzLnF1ZXN0aW9uLmxvY01heFJhdGVEZXNjcmlwdGlvbilcbiAgICAgIDogbnVsbDtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9e3RoaXMucXVlc3Rpb24ucmF0aW5nUm9vdENzc30gcmVmPXsoZGl2KSA9PiAodGhpcy5zZXRDb250cm9sKGRpdikpfT5cbiAgICAgICAgPGZpZWxkc2V0IHJvbGU9XCJyYWRpb2dyb3VwXCI+XG4gICAgICAgICAgPGxlZ2VuZCByb2xlPVwicHJlc2VudGF0aW9uXCIgY2xhc3NOYW1lPXtcInN2LWhpZGRlblwifT48L2xlZ2VuZD5cbiAgICAgICAgICB7ISF0aGlzLnF1ZXN0aW9uLmhhc01pbkxhYmVsID8gPHNwYW4gY2xhc3NOYW1lPXtjc3NDbGFzc2VzLm1pblRleHR9PnttaW5UZXh0fTwvc3Bhbj46IG51bGx9XG4gICAgICAgICAge3RoaXMucXVlc3Rpb24ucmVuZGVyZWRSYXRlSXRlbXMubWFwKChpdGVtLCBpKSA9PiB0aGlzLnJlbmRlckl0ZW0oXCJ2YWx1ZVwiICsgaSwgaXRlbSwgaSwgY3NzQ2xhc3NlcykpfVxuICAgICAgICAgIHshIXRoaXMucXVlc3Rpb24uaGFzTWF4TGFiZWwgPyA8c3BhbiBjbGFzc05hbWU9e2Nzc0NsYXNzZXMubWF4VGV4dH0+e21heFRleHR9PC9zcGFuPjogbnVsbH1cbiAgICAgICAgPC9maWVsZHNldD5cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckl0ZW0oXG4gICAga2V5OiBzdHJpbmcsXG4gICAgaXRlbTogUmVuZGVyZWRSYXRpbmdJdGVtLFxuICAgIGluZGV4OiBudW1iZXIsXG4gICAgY3NzQ2xhc3NlczogYW55XG4gICk6IEpTWC5FbGVtZW50IHtcbiAgICB2YXIgaXRlbVRleHQgPSB0aGlzLnJlbmRlckxvY1N0cmluZyhpdGVtLmxvY1RleHQpO1xuICAgIHJldHVybiAoXG4gICAgICA8bGFiZWwga2V5PXtrZXl9IGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5nZXRJdGVtQ2xhc3MoaXRlbS5pdGVtVmFsdWUpfT5cbiAgICAgICAgPGlucHV0XG4gICAgICAgICAgdHlwZT1cInJhZGlvXCJcbiAgICAgICAgICBjbGFzc05hbWU9XCJzdi12aXN1YWxseWhpZGRlblwiXG4gICAgICAgICAgbmFtZT17dGhpcy5xdWVzdGlvbi5uYW1lfVxuICAgICAgICAgIGlkPXt0aGlzLnF1ZXN0aW9uLmdldElucHV0SWQoaW5kZXgpfVxuICAgICAgICAgIHZhbHVlPXtpdGVtLnZhbHVlfVxuICAgICAgICAgIGRpc2FibGVkPXt0aGlzLmlzRGlzcGxheU1vZGV9XG4gICAgICAgICAgY2hlY2tlZD17dGhpcy5xdWVzdGlvbi52YWx1ZSA9PSBpdGVtLnZhbHVlfVxuICAgICAgICAgIG9uQ2xpY2s9e3RoaXMuaGFuZGxlT25DbGlja31cbiAgICAgICAgICBvbkNoYW5nZT17KCk9Pnt9fVxuICAgICAgICAgIGFyaWEtcmVxdWlyZWQ9e3RoaXMucXVlc3Rpb24uYXJpYVJlcXVpcmVkfVxuICAgICAgICAgIGFyaWEtbGFiZWw9e3RoaXMucXVlc3Rpb24uYXJpYUxhYmVsfVxuICAgICAgICAgIGFyaWEtaW52YWxpZD17dGhpcy5xdWVzdGlvbi5hcmlhSW52YWxpZH1cbiAgICAgICAgICBhcmlhLWRlc2NyaWJlZGJ5PXt0aGlzLnF1ZXN0aW9uLmFyaWFEZXNjcmliZWRCeX1cbiAgICAgICAgLz5cbiAgICAgICAgPHNwYW4gY2xhc3NOYW1lPXtjc3NDbGFzc2VzLml0ZW1UZXh0fT57aXRlbVRleHR9PC9zcGFuPlxuICAgICAgPC9sYWJlbD5cbiAgICApO1xuICB9XG59XG5SZWFjdFF1ZXN0aW9uRmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlclF1ZXN0aW9uKFwicmF0aW5nXCIsIChwcm9wcykgPT4ge1xuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTdXJ2ZXlRdWVzdGlvblJhdGluZywgcHJvcHMpO1xufSk7XG4iLCJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFF1ZXN0aW9uVGFnYm94TW9kZWwsIERyb3Bkb3duTGlzdE1vZGVsLCBEcm9wZG93bk11bHRpU2VsZWN0TGlzdE1vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBSZWFjdFF1ZXN0aW9uRmFjdG9yeSB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fZmFjdG9yeVwiO1xuaW1wb3J0IHsgU3VydmV5UXVlc3Rpb25Ecm9wZG93bkJhc2UgfSBmcm9tIFwiLi9kcm9wZG93bi1iYXNlXCI7XG5pbXBvcnQgeyBTdXJ2ZXlRdWVzdGlvblRhZ2JveEl0ZW0gfSBmcm9tIFwiLi90YWdib3gtaXRlbVwiO1xuaW1wb3J0IHsgVGFnYm94RmlsdGVyU3RyaW5nIH0gZnJvbSBcIi4vdGFnYm94LWZpbHRlclwiO1xuXG5leHBvcnQgY2xhc3MgU3VydmV5UXVlc3Rpb25UYWdib3ggZXh0ZW5kcyBTdXJ2ZXlRdWVzdGlvbkRyb3Bkb3duQmFzZTxRdWVzdGlvblRhZ2JveE1vZGVsPiB7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gIH1cblxuICBwcm90ZWN0ZWQgcmVuZGVySXRlbShrZXk6IHN0cmluZywgaXRlbTogYW55KTogSlNYLkVsZW1lbnQge1xuICAgIGNvbnN0IHJlbmRlcmVkSXRlbSA9IChcbiAgICAgIDxTdXJ2ZXlRdWVzdGlvblRhZ2JveEl0ZW1cbiAgICAgICAga2V5PXtrZXl9XG4gICAgICAgIHF1ZXN0aW9uPXt0aGlzLnF1ZXN0aW9ufVxuICAgICAgICBpdGVtPXtpdGVtfVxuICAgICAgLz5cbiAgICApO1xuICAgIHJldHVybiByZW5kZXJlZEl0ZW07XG4gIH1cblxuICBwcm90ZWN0ZWQgcmVuZGVySW5wdXQoZHJvcGRvd25MaXN0TW9kZWw6IERyb3Bkb3duTGlzdE1vZGVsKTogSlNYLkVsZW1lbnQge1xuICAgIGNvbnN0IGRyb3Bkb3duTXVsdGlTZWxlY3RMaXN0TW9kZWwgPSBkcm9wZG93bkxpc3RNb2RlbCBhcyBEcm9wZG93bk11bHRpU2VsZWN0TGlzdE1vZGVsO1xuICAgIGNvbnN0IGl0ZW1zID0gdGhpcy5xdWVzdGlvbi5zZWxlY3RlZENob2ljZXMubWFwKChjaG9pY2UsIGluZGV4KSA9PiB7IHJldHVybiB0aGlzLnJlbmRlckl0ZW0oXCJpdGVtXCIgKyBpbmRleCwgY2hvaWNlKTsgfSk7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXZcbiAgICAgICAgaWQ9e3RoaXMucXVlc3Rpb24uaW5wdXRJZH1cbiAgICAgICAgY2xhc3NOYW1lPXt0aGlzLnF1ZXN0aW9uLmdldENvbnRyb2xDbGFzcygpfVxuICAgICAgICB0YWJJbmRleD17IGRyb3Bkb3duTGlzdE1vZGVsLmlucHV0UmVhZE9ubHkgPyB1bmRlZmluZWQgOiAwfVxuICAgICAgICBvbkNsaWNrPXt0aGlzLmNsaWNrfVxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1jb21tZW50XG4gICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgZGlzYWJsZWQ9e3RoaXMucXVlc3Rpb24uaXNJbnB1dFJlYWRPbmx5fVxuICAgICAgICByZXF1aXJlZD17dGhpcy5xdWVzdGlvbi5pc1JlcXVpcmVkfVxuICAgICAgICBvbktleURvd249e3RoaXMua2V5aGFuZGxlcn1cbiAgICAgICAgb25CbHVyPXt0aGlzLmJsdXJ9XG4gICAgICAgIHJvbGU9e3RoaXMucXVlc3Rpb24uYXJpYVJvbGV9XG4gICAgICAgIGFyaWEtcmVxdWlyZWQ9e3RoaXMucXVlc3Rpb24uYXJpYVJlcXVpcmVkfVxuICAgICAgICBhcmlhLWxhYmVsPXt0aGlzLnF1ZXN0aW9uLmFyaWFMYWJlbH1cbiAgICAgICAgYXJpYS1pbnZhbGlkPXt0aGlzLnF1ZXN0aW9uLmFyaWFJbnZhbGlkfVxuICAgICAgICBhcmlhLWRlc2NyaWJlZGJ5PXt0aGlzLnF1ZXN0aW9uLmFyaWFEZXNjcmliZWRCeX1cbiAgICAgID5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3RoaXMucXVlc3Rpb24uY3NzQ2xhc3Nlcy5jb250cm9sVmFsdWV9PlxuICAgICAgICAgIHtpdGVtc31cbiAgICAgICAgICA8VGFnYm94RmlsdGVyU3RyaW5nIG1vZGVsPXtkcm9wZG93bk11bHRpU2VsZWN0TGlzdE1vZGVsfSBxdWVzdGlvbj17dGhpcy5xdWVzdGlvbn0+PC9UYWdib3hGaWx0ZXJTdHJpbmc+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICB7dGhpcy5jcmVhdGVDbGVhckJ1dHRvbigpfVxuICAgICAgPC9kaXY+KTtcbiAgfVxuXG4gIHByb3RlY3RlZCByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICBjb25zdCBjc3NDbGFzc2VzID0gdGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzO1xuICAgIGNvbnN0IGNvbW1lbnQgPSB0aGlzLnF1ZXN0aW9uLmlzT3RoZXJTZWxlY3RlZCA/IHRoaXMucmVuZGVyT3RoZXIoY3NzQ2xhc3NlcykgOiBudWxsO1xuICAgIGNvbnN0IHNlbGVjdCA9IHRoaXMucmVuZGVyU2VsZWN0KGNzc0NsYXNzZXMpO1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5yZW5kZXJDc3NSb290fT5cbiAgICAgICAge3NlbGVjdH1cbiAgICAgICAge2NvbW1lbnR9XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG59XG5cblJlYWN0UXVlc3Rpb25GYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyUXVlc3Rpb24oXCJ0YWdib3hcIiwgKHByb3BzKSA9PiB7XG4gIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFN1cnZleVF1ZXN0aW9uVGFnYm94LCBwcm9wcyk7XG59KTsiLCJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFN1cnZleVF1ZXN0aW9uVW5jb250cm9sbGVkRWxlbWVudCB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fZWxlbWVudFwiO1xuaW1wb3J0IHsgUXVlc3Rpb25UZXh0TW9kZWwgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFJlYWN0UXVlc3Rpb25GYWN0b3J5IH0gZnJvbSBcIi4vcmVhY3RxdWVzdGlvbl9mYWN0b3J5XCI7XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlRdWVzdGlvblRleHQgZXh0ZW5kcyBTdXJ2ZXlRdWVzdGlvblVuY29udHJvbGxlZEVsZW1lbnQ8XG4gIFF1ZXN0aW9uVGV4dE1vZGVsXG4+IHtcbiAgLy9jb250cm9sUmVmOiBSZWFjdC5SZWZPYmplY3Q8SFRNTElucHV0RWxlbWVudD47XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgLy90aGlzLmNvbnRyb2xSZWYgPSBSZWFjdC5jcmVhdGVSZWYoKTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVySW5wdXQoKSB7XG4gICAgY29uc3QgaW5wdXRDbGFzcyA9ICh0aGlzLnF1ZXN0aW9uIGFzIFF1ZXN0aW9uVGV4dE1vZGVsKS5nZXRDb250cm9sQ2xhc3MoKTtcblxuICAgIGNvbnN0IHBsYWNlaG9sZGVyID0gdGhpcy5xdWVzdGlvbi5yZW5kZXJlZFBsYWNlaG9sZGVyO1xuICAgIGlmICh0aGlzLnF1ZXN0aW9uLmlzUmVhZE9ubHlSZW5kZXJEaXYoKSkge1xuICAgICAgcmV0dXJuIDxkaXY+e3RoaXMucXVlc3Rpb24udmFsdWV9PC9kaXY+O1xuICAgIH1cbiAgICByZXR1cm4gKFxuICAgICAgPGlucHV0XG4gICAgICAgIGlkPXt0aGlzLnF1ZXN0aW9uLmlucHV0SWR9XG4gICAgICAgIGRpc2FibGVkPXt0aGlzLmlzRGlzcGxheU1vZGV9XG4gICAgICAgIGNsYXNzTmFtZT17aW5wdXRDbGFzc31cbiAgICAgICAgdHlwZT17dGhpcy5xdWVzdGlvbi5pbnB1dFR5cGV9XG4gICAgICAgIC8vcmVmPXt0aGlzLmNvbnRyb2xSZWZ9XG4gICAgICAgIHJlZj17KGlucHV0KSA9PiAodGhpcy5zZXRDb250cm9sKGlucHV0KSl9XG4gICAgICAgIHN0eWxlPXt0aGlzLnF1ZXN0aW9uLmlucHV0U3R5bGV9XG4gICAgICAgIG1heExlbmd0aD17dGhpcy5xdWVzdGlvbi5nZXRNYXhMZW5ndGgoKX1cbiAgICAgICAgbWluPXt0aGlzLnF1ZXN0aW9uLnJlbmRlcmVkTWlufVxuICAgICAgICBtYXg9e3RoaXMucXVlc3Rpb24ucmVuZGVyZWRNYXh9XG4gICAgICAgIHN0ZXA9e3RoaXMucXVlc3Rpb24ucmVuZGVyZWRTdGVwfVxuICAgICAgICBzaXplPXt0aGlzLnF1ZXN0aW9uLmlucHV0U2l6ZX1cbiAgICAgICAgcGxhY2Vob2xkZXI9e3BsYWNlaG9sZGVyfVxuICAgICAgICBsaXN0PXt0aGlzLnF1ZXN0aW9uLmRhdGFMaXN0SWR9XG4gICAgICAgIGF1dG9Db21wbGV0ZT17dGhpcy5xdWVzdGlvbi5hdXRvY29tcGxldGV9XG4gICAgICAgIG9uQmx1cj17dGhpcy5xdWVzdGlvbi5vbkJsdXJ9XG4gICAgICAgIG9uQ2hhbmdlPXt0aGlzLnF1ZXN0aW9uLm9uQ2hhbmdlfVxuICAgICAgICBvbktleVVwPXt0aGlzLnF1ZXN0aW9uLm9uS2V5VXB9XG4gICAgICAgIG9uS2V5RG93bj17dGhpcy5xdWVzdGlvbi5vbktleURvd259XG4gICAgICAgIG9uQ29tcG9zaXRpb25VcGRhdGU9e3RoaXMucXVlc3Rpb24ub25Db21wb3NpdGlvblVwZGF0ZX1cbiAgICAgICAgYXJpYS1yZXF1aXJlZD17dGhpcy5xdWVzdGlvbi5hcmlhUmVxdWlyZWR9XG4gICAgICAgIGFyaWEtbGFiZWw9e3RoaXMucXVlc3Rpb24uYXJpYUxhYmVsfVxuICAgICAgICBhcmlhLWludmFsaWQ9e3RoaXMucXVlc3Rpb24uYXJpYUludmFsaWR9XG4gICAgICAgIGFyaWEtZGVzY3JpYmVkYnk9e3RoaXMucXVlc3Rpb24uYXJpYURlc2NyaWJlZEJ5fVxuICAgICAgLz5cbiAgICApO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5xdWVzdGlvbi5kYXRhTGlzdElkID9cbiAgICAgICAgPGRpdj5cbiAgICAgICAgICB7IHRoaXMucmVuZGVySW5wdXQoKSB9XG4gICAgICAgICAgeyB0aGlzLnJlbmRlckRhdGFMaXN0KCkgfVxuICAgICAgICA8L2Rpdj46XG4gICAgICAgIHRoaXMucmVuZGVySW5wdXQoKVxuICAgICk7XG4gIH1cbiAgcHJpdmF0ZSByZW5kZXJEYXRhTGlzdCgpOiBKU1guRWxlbWVudCB8IG51bGwge1xuICAgIGlmICghdGhpcy5xdWVzdGlvbi5kYXRhTGlzdElkKSByZXR1cm4gbnVsbDtcbiAgICB2YXIgaXRlbXMgPSB0aGlzLnF1ZXN0aW9uLmRhdGFMaXN0O1xuICAgIGlmIChpdGVtcy5sZW5ndGggPT0gMCkgcmV0dXJuIG51bGw7XG4gICAgdmFyIG9wdGlvbnM6QXJyYXk8SlNYLkVsZW1lbnQ+ID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpdGVtcy5sZW5ndGg7IGkrKykge1xuICAgICAgb3B0aW9ucy5wdXNoKDxvcHRpb24ga2V5PXtcIml0ZW1cIitpfSB2YWx1ZT17aXRlbXNbaV19Pjwvb3B0aW9uPik7XG4gICAgfVxuICAgIHJldHVybiA8ZGF0YWxpc3QgaWQ9e3RoaXMucXVlc3Rpb24uZGF0YUxpc3RJZH0+e29wdGlvbnN9PC9kYXRhbGlzdD47XG4gIH1cbiAgLy8gcHJvdGVjdGVkIHVwZGF0ZURvbUVsZW1lbnQoKSB7XG4gIC8vICAgdGhpcy5jb250cm9sID0gdGhpcy5jb250cm9sUmVmLmN1cnJlbnQ7XG4gIC8vICAgc3VwZXIudXBkYXRlRG9tRWxlbWVudCgpO1xuICAvLyB9XG59XG5cblJlYWN0UXVlc3Rpb25GYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyUXVlc3Rpb24oXCJ0ZXh0XCIsIChwcm9wcykgPT4ge1xuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTdXJ2ZXlRdWVzdGlvblRleHQsIHByb3BzKTtcbn0pO1xuIiwiaW1wb3J0IHsgU3VydmV5TW9kZWwsIFF1ZXN0aW9uTWF0cml4RHJvcGRvd25SZW5kZXJlZENlbGwsIFN1cnZleUVsZW1lbnQsIFF1ZXN0aW9uUm93TW9kZWwsIEl0ZW1WYWx1ZSwgUXVlc3Rpb25TZWxlY3RCYXNlIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBSZWFjdEVsZW1lbnRGYWN0b3J5IH0gZnJvbSBcIi4vZWxlbWVudC1mYWN0b3J5XCI7XG5cbmV4cG9ydCBjbGFzcyBSZWFjdFN1cnZleUVsZW1lbnRzV3JhcHBlciB7XG4gIHB1YmxpYyBzdGF0aWMgd3JhcFJvdyhzdXJ2ZXk6IFN1cnZleU1vZGVsLCBlbGVtZW50OiBKU1guRWxlbWVudCwgcm93OiBRdWVzdGlvblJvd01vZGVsKTogSlNYLkVsZW1lbnQge1xuICAgIGNvbnN0IGNvbXBvbmVudE5hbWUgPSBzdXJ2ZXkuZ2V0Um93V3JhcHBlckNvbXBvbmVudE5hbWUocm93KTtcbiAgICBjb25zdCBjb21wb25lbnREYXRhID0gc3VydmV5LmdldFJvd1dyYXBwZXJDb21wb25lbnREYXRhKHJvdyk7XG4gICAgcmV0dXJuIFJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UuY3JlYXRlRWxlbWVudChjb21wb25lbnROYW1lLCB7XG4gICAgICBlbGVtZW50LFxuICAgICAgcm93LFxuICAgICAgY29tcG9uZW50RGF0YSxcbiAgICB9KTtcbiAgfVxuICBwdWJsaWMgc3RhdGljIHdyYXBFbGVtZW50KHN1cnZleTogU3VydmV5TW9kZWwsIGVsZW1lbnQ6IEpTWC5FbGVtZW50LCBxdWVzdGlvbjogU3VydmV5RWxlbWVudCk6IEpTWC5FbGVtZW50IHtcbiAgICBjb25zdCBjb21wb25lbnROYW1lID0gc3VydmV5LmdldEVsZW1lbnRXcmFwcGVyQ29tcG9uZW50TmFtZShxdWVzdGlvbik7XG4gICAgY29uc3QgY29tcG9uZW50RGF0YSA9IHN1cnZleS5nZXRFbGVtZW50V3JhcHBlckNvbXBvbmVudERhdGEocXVlc3Rpb24pO1xuICAgIHJldHVybiBSZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLmNyZWF0ZUVsZW1lbnQoY29tcG9uZW50TmFtZSwge1xuICAgICAgZWxlbWVudCxcbiAgICAgIHF1ZXN0aW9uLFxuICAgICAgY29tcG9uZW50RGF0YSxcbiAgICB9KTtcbiAgfVxuICBwdWJsaWMgc3RhdGljIHdyYXBRdWVzdGlvbkNvbnRlbnQoc3VydmV5OiBTdXJ2ZXlNb2RlbCwgZWxlbWVudDogSlNYLkVsZW1lbnQsIHF1ZXN0aW9uOiBTdXJ2ZXlFbGVtZW50KTogSlNYLkVsZW1lbnQge1xuICAgIGNvbnN0IGNvbXBvbmVudE5hbWUgPSBzdXJ2ZXkuZ2V0UXVlc3Rpb25Db250ZW50V3JhcHBlckNvbXBvbmVudE5hbWUocXVlc3Rpb24pO1xuICAgIGNvbnN0IGNvbXBvbmVudERhdGEgPSBzdXJ2ZXkuZ2V0RWxlbWVudFdyYXBwZXJDb21wb25lbnREYXRhKHF1ZXN0aW9uKTtcbiAgICByZXR1cm4gUmVhY3RFbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5jcmVhdGVFbGVtZW50KGNvbXBvbmVudE5hbWUsIHtcbiAgICAgIGVsZW1lbnQsXG4gICAgICBxdWVzdGlvbixcbiAgICAgIGNvbXBvbmVudERhdGEsXG4gICAgfSk7XG4gIH1cbiAgcHVibGljIHN0YXRpYyB3cmFwSXRlbVZhbHVlKHN1cnZleTogU3VydmV5TW9kZWwsIGVsZW1lbnQ6IEpTWC5FbGVtZW50LCBxdWVzdGlvbjogUXVlc3Rpb25TZWxlY3RCYXNlLCBpdGVtOiBJdGVtVmFsdWUpOiBKU1guRWxlbWVudCB7XG4gICAgY29uc3QgY29tcG9uZW50TmFtZSA9IHN1cnZleS5nZXRJdGVtVmFsdWVXcmFwcGVyQ29tcG9uZW50TmFtZShpdGVtLCBxdWVzdGlvbik7XG4gICAgY29uc3QgY29tcG9uZW50RGF0YSA9IHN1cnZleS5nZXRJdGVtVmFsdWVXcmFwcGVyQ29tcG9uZW50RGF0YShpdGVtLCBxdWVzdGlvbik7XG4gICAgcmV0dXJuIFJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UuY3JlYXRlRWxlbWVudChjb21wb25lbnROYW1lLCB7XG4gICAgICBrZXk6IGVsZW1lbnQ/LmtleSxcbiAgICAgIGVsZW1lbnQsXG4gICAgICBxdWVzdGlvbixcbiAgICAgIGl0ZW0sXG4gICAgICBjb21wb25lbnREYXRhLFxuICAgIH0pO1xuICB9XG4gIHB1YmxpYyBzdGF0aWMgd3JhcE1hdHJpeENlbGwoc3VydmV5OiBTdXJ2ZXlNb2RlbCwgZWxlbWVudDogSlNYLkVsZW1lbnQsIGNlbGw6IFF1ZXN0aW9uTWF0cml4RHJvcGRvd25SZW5kZXJlZENlbGwsIHJlYXNvbjogc3RyaW5nID0gXCJjZWxsXCIpOiBKU1guRWxlbWVudCB7XG4gICAgY29uc3QgY29tcG9uZW50TmFtZSA9IHN1cnZleS5nZXRFbGVtZW50V3JhcHBlckNvbXBvbmVudE5hbWUoY2VsbCwgcmVhc29uKTtcbiAgICBjb25zdCBjb21wb25lbnREYXRhID0gc3VydmV5LmdldEVsZW1lbnRXcmFwcGVyQ29tcG9uZW50RGF0YShjZWxsLCByZWFzb24pO1xuICAgIHJldHVybiBSZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLmNyZWF0ZUVsZW1lbnQoY29tcG9uZW50TmFtZSwge1xuICAgICAgZWxlbWVudCxcbiAgICAgIGNlbGwsXG4gICAgICBjb21wb25lbnREYXRhLFxuICAgIH0pO1xuICB9XG59XG5cblN1cnZleU1vZGVsLnBsYXRmb3JtID0gXCJyZWFjdFwiO1xuIiwiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBCYXNlLCBTdXJ2ZXlUaW1lck1vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBTdmdJY29uIH0gZnJvbSBcIi4vY29tcG9uZW50cy9zdmctaWNvbi9zdmctaWNvblwiO1xuaW1wb3J0IHsgUmVhY3RTdXJ2ZXlFbGVtZW50IH0gZnJvbSBcIi4vcmVhY3RxdWVzdGlvbl9lbGVtZW50XCI7XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlUaW1lclBhbmVsIGV4dGVuZHMgUmVhY3RTdXJ2ZXlFbGVtZW50IHtcbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0U3RhdGVFbGVtZW50KCk6IEJhc2Uge1xuICAgIHJldHVybiB0aGlzLnRpbWVyTW9kZWw7XG4gIH1cbiAgcHJvdGVjdGVkIGdldCB0aW1lck1vZGVsKCk6IFN1cnZleVRpbWVyTW9kZWwge1xuICAgIHJldHVybiB0aGlzLnByb3BzLnRpbWVyTW9kZWw7XG4gIH1cbiAgcHJpdmF0ZSByZWFkb25seSBjaXJjbGVMZW5ndGggPSA0NDA7XG4gIHByaXZhdGUgZ2V0IHByb2dyZXNzKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIC10aGlzLnRpbWVyTW9kZWwucHJvZ3Jlc3MgKiB0aGlzLmNpcmNsZUxlbmd0aDtcbiAgfVxuICByZW5kZXIoKTogSlNYLkVsZW1lbnQge1xuICAgIGxldCByZXN1bHQgPSA8ZGl2IGNsYXNzTmFtZT17dGhpcy50aW1lck1vZGVsLnN1cnZleS5nZXRDc3MoKS50aW1lclJvb3R9Pnt0aGlzLnRpbWVyTW9kZWwudGV4dH08L2Rpdj47XG4gICAgaWYodGhpcy50aW1lck1vZGVsLnNob3dUaW1lckFzQ2xvY2spIHtcbiAgICAgIGxldCBzdHlsZSA9IHsgc3Ryb2tlRGFzaGFycmF5OiB0aGlzLmNpcmNsZUxlbmd0aCwgc3Ryb2tlRGFzaG9mZnNldDogdGhpcy5wcm9ncmVzcyB9O1xuICAgICAgY29uc3QgcHJvZ3Jlc3MgPSAodGhpcy50aW1lck1vZGVsLnNob3dQcm9ncmVzcyA/IDxTdmdJY29uIGNsYXNzTmFtZT17dGhpcy50aW1lck1vZGVsLmdldFByb2dyZXNzQ3NzKCl9IHN0eWxlPXtzdHlsZX0gaWNvbk5hbWU9e1wiaWNvbi10aW1lcmNpcmNsZVwifSBzaXplPXtcImF1dG9cIn0+PC9TdmdJY29uPjogbnVsbCk7XG4gICAgICByZXN1bHQgPVxuICAgICAgKDxkaXYgY2xhc3NOYW1lPXt0aGlzLnRpbWVyTW9kZWwucm9vdENzc30+XG4gICAgICAgIHtwcm9ncmVzc31cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3RoaXMudGltZXJNb2RlbC50ZXh0Q29udGFpbmVyQ3NzfT5cbiAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9e3RoaXMudGltZXJNb2RlbC5tYWpvclRleHRDc3N9Pnt0aGlzLnRpbWVyTW9kZWwuY2xvY2tNYWpvclRleHQgfTwvc3Bhbj5cbiAgICAgICAgICB7KHRoaXMudGltZXJNb2RlbC5jbG9ja01pbm9yVGV4dCA/IDxzcGFuIGNsYXNzTmFtZT17dGhpcy50aW1lck1vZGVsLm1pbm9yVGV4dENzc30+e3RoaXMudGltZXJNb2RlbC5jbG9ja01pbm9yVGV4dCB9PC9zcGFuPiA6IG51bGwpfVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2Pik7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbn1cbiIsImltcG9ydCAqIGFzIFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgSVN1cnZleUNyZWF0b3IgfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uXCI7XG5pbXBvcnQgeyBTdXJ2ZXlNb2RlbCwgUXVlc3Rpb24sIFF1ZXN0aW9uUm93TW9kZWwsIElFbGVtZW50LCBCYXNlIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBTdXJ2ZXlFbGVtZW50QmFzZSB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fZWxlbWVudFwiO1xuaW1wb3J0IHsgUmVhY3RFbGVtZW50RmFjdG9yeSB9IGZyb20gXCIuL2VsZW1lbnQtZmFjdG9yeVwiO1xuaW1wb3J0IHsgUmVhY3RTdXJ2ZXlFbGVtZW50c1dyYXBwZXIgfSBmcm9tIFwiLi9yZWFjdHN1cnZleW1vZGVsXCI7XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlSb3cgZXh0ZW5kcyBTdXJ2ZXlFbGVtZW50QmFzZTxhbnksIGFueT4ge1xuICBwcml2YXRlIHJvb3RSZWY6IFJlYWN0LlJlZk9iamVjdDxIVE1MRGl2RWxlbWVudD47XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgdGhpcy5yb290UmVmID0gUmVhY3QuY3JlYXRlUmVmKCk7XG4gICAgdGhpcy5yZWNhbGN1bGF0ZUNzcygpO1xuICB9XG4gIHByaXZhdGUgcmVjYWxjdWxhdGVDc3MoKSB7XG4gICAgdGhpcy5yb3cudmlzaWJsZUVsZW1lbnRzLm1hcChlbGVtZW50ID0+IChlbGVtZW50IGFzIFF1ZXN0aW9uKS5jc3NDbGFzc2VzKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0U3RhdGVFbGVtZW50KCk6IEJhc2Uge1xuICAgIHJldHVybiB0aGlzLnJvdztcbiAgfVxuICBwcml2YXRlIGdldCByb3coKTogUXVlc3Rpb25Sb3dNb2RlbCB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMucm93O1xuICB9XG4gIHByaXZhdGUgZ2V0IHN1cnZleSgpOiBTdXJ2ZXlNb2RlbCB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuc3VydmV5O1xuICB9XG4gIHByaXZhdGUgZ2V0IGNyZWF0b3IoKTogSVN1cnZleUNyZWF0b3Ige1xuICAgIHJldHVybiB0aGlzLnByb3BzLmNyZWF0b3I7XG4gIH1cbiAgcHJvdGVjdGVkIGdldCBjc3MoKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5jc3M7XG4gIH1cbiAgcHJvdGVjdGVkIGNhblJlbmRlcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISF0aGlzLnJvdyAmJiAhIXRoaXMuc3VydmV5ICYmICEhdGhpcy5jcmVhdG9yICYmIHRoaXMucm93LnZpc2libGU7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckVsZW1lbnRDb250ZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICBjb25zdCBlbGVtZW50cyA9IHRoaXMucm93LnZpc2libGVFbGVtZW50cy5tYXAoKGVsZW1lbnQsIGluZGV4KSA9PiB7XG4gICAgICBjb25zdCBpbm5lckVsZW1lbnQgPSB0aGlzLmNyZWF0ZUVsZW1lbnQoZWxlbWVudCwgaW5kZXgpO1xuICAgICAgY29uc3QgY3NzID0gKGVsZW1lbnQgYXMgUXVlc3Rpb24pLmNzc0NsYXNzZXNWYWx1ZTtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzc05hbWU9e2Nzcy5xdWVzdGlvbldyYXBwZXJ9XG4gICAgICAgICAgc3R5bGU9eyhlbGVtZW50IGFzIGFueSkucm9vdFN0eWxlfVxuICAgICAgICAgIGRhdGEta2V5PXtpbm5lckVsZW1lbnQua2V5fVxuICAgICAgICAgIGtleT17aW5uZXJFbGVtZW50LmtleX1cbiAgICAgICAgICBvbkZvY3VzPXsoZWxlbWVudCBhcyBRdWVzdGlvbikuZm9jdXNJbn1cbiAgICAgICAgPlxuICAgICAgICAgIHt0aGlzLnJvdy5pc05lZWRSZW5kZXIgPyBpbm5lckVsZW1lbnQgOiBSZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLmNyZWF0ZUVsZW1lbnQoZWxlbWVudC5za2VsZXRvbkNvbXBvbmVudE5hbWUsIHsgZWxlbWVudDogZWxlbWVudCwgY3NzOiB0aGlzLmNzcywgfSl9XG4gICAgICAgIDwvZGl2PlxuICAgICAgKTtcbiAgICB9KTtcblxuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IHJlZj17dGhpcy5yb290UmVmfSBjbGFzc05hbWU9e3RoaXMucm93LmdldFJvd0NzcygpfSA+XG4gICAgICAgIHtlbGVtZW50c31cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlckVsZW1lbnQoKTogSlNYLkVsZW1lbnQge1xuICAgIGNvbnN0IHN1cnZleTogU3VydmV5TW9kZWwgPSB0aGlzLnN1cnZleSBhcyBTdXJ2ZXlNb2RlbDtcbiAgICBjb25zdCBjb250ZW50ID0gdGhpcy5yZW5kZXJFbGVtZW50Q29udGVudCgpO1xuICAgIGNvbnN0IHdyYXBwZXIgPSBSZWFjdFN1cnZleUVsZW1lbnRzV3JhcHBlci53cmFwUm93KHN1cnZleSwgY29udGVudCwgdGhpcy5yb3cpO1xuICAgIHJldHVybiB3cmFwcGVyIHx8IGNvbnRlbnQ7XG4gIH1cbiAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgc3VwZXIuY29tcG9uZW50RGlkTW91bnQoKTtcbiAgICB2YXIgZWwgPSB0aGlzLnJvb3RSZWYuY3VycmVudDtcbiAgICBpZiAoISFlbCAmJiAhdGhpcy5yb3cuaXNOZWVkUmVuZGVyKSB7XG4gICAgICB2YXIgcm93Q29udGFpbmVyRGl2ID0gZWw7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5yb3cuc3RhcnRMYXp5UmVuZGVyaW5nKHJvd0NvbnRhaW5lckRpdik7XG4gICAgICB9LCAxMCk7XG4gICAgfVxuICB9XG4gIHB1YmxpYyBzaG91bGRDb21wb25lbnRVcGRhdGUobmV4dFByb3BzOiBhbnksIG5leHRTdGF0ZTogYW55KTogYm9vbGVhbiB7XG4gICAgaWYgKCFzdXBlci5zaG91bGRDb21wb25lbnRVcGRhdGUobmV4dFByb3BzLCBuZXh0U3RhdGUpKSByZXR1cm4gZmFsc2U7XG5cbiAgICBpZiAobmV4dFByb3BzLnJvdyAhPT0gdGhpcy5yb3cpIHtcbiAgICAgIG5leHRQcm9wcy5yb3cuaXNOZWVkUmVuZGVyID0gdGhpcy5yb3cuaXNOZWVkUmVuZGVyO1xuICAgICAgdGhpcy5zdG9wTGF6eVJlbmRlcmluZygpO1xuICAgIH1cbiAgICB0aGlzLnJlY2FsY3VsYXRlQ3NzKCk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcHJpdmF0ZSBzdG9wTGF6eVJlbmRlcmluZygpIHtcbiAgICB0aGlzLnJvdy5zdG9wTGF6eVJlbmRlcmluZygpO1xuICAgIHRoaXMucm93LmlzTmVlZFJlbmRlciA9ICF0aGlzLnJvdy5pc0xhenlSZW5kZXJpbmcoKTtcbiAgfVxuICBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICBzdXBlci5jb21wb25lbnRXaWxsVW5tb3VudCgpO1xuICAgIHRoaXMuc3RvcExhenlSZW5kZXJpbmcoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBjcmVhdGVFbGVtZW50KGVsZW1lbnQ6IElFbGVtZW50LCBlbGVtZW50SW5kZXg/OiBudW1iZXIpOiBKU1guRWxlbWVudCB7XG4gICAgY29uc3QgaW5kZXggPSBlbGVtZW50SW5kZXggPyBcIi1cIiArIGVsZW1lbnRJbmRleCA6IDA7XG4gICAgdmFyIGVsZW1lbnRUeXBlID0gZWxlbWVudC5nZXRUeXBlKCk7XG4gICAgaWYgKCFSZWFjdEVsZW1lbnRGYWN0b3J5Lkluc3RhbmNlLmlzRWxlbWVudFJlZ2lzdGVyZWQoZWxlbWVudFR5cGUpKSB7XG4gICAgICBlbGVtZW50VHlwZSA9IFwicXVlc3Rpb25cIjtcbiAgICB9XG4gICAgcmV0dXJuIFJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UuY3JlYXRlRWxlbWVudChlbGVtZW50VHlwZSwge1xuICAgICAga2V5OiBlbGVtZW50Lm5hbWUgKyBpbmRleCxcbiAgICAgIGVsZW1lbnQ6IGVsZW1lbnQsXG4gICAgICBjcmVhdG9yOiB0aGlzLmNyZWF0b3IsXG4gICAgICBzdXJ2ZXk6IHRoaXMuc3VydmV5LFxuICAgICAgY3NzOiB0aGlzLmNzcyxcbiAgICB9KTtcbiAgfVxufVxuIiwiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBTdXJ2ZXlRdWVzdGlvbkVsZW1lbnRCYXNlIH0gZnJvbSBcIi4vcmVhY3RxdWVzdGlvbl9lbGVtZW50XCI7XG5pbXBvcnQgeyBRdWVzdGlvblNpZ25hdHVyZVBhZE1vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBSZWFjdFF1ZXN0aW9uRmFjdG9yeSB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fZmFjdG9yeVwiO1xuaW1wb3J0IHsgU3ZnSWNvbiB9IGZyb20gXCIuL2NvbXBvbmVudHMvc3ZnLWljb24vc3ZnLWljb25cIjtcblxuZXhwb3J0IGNsYXNzIFN1cnZleVF1ZXN0aW9uU2lnbmF0dXJlUGFkIGV4dGVuZHMgU3VydmV5UXVlc3Rpb25FbGVtZW50QmFzZSB7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgdGhpcy5zdGF0ZSA9IHsgdmFsdWU6IHRoaXMucXVlc3Rpb24udmFsdWUgfTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IHF1ZXN0aW9uKCk6IFF1ZXN0aW9uU2lnbmF0dXJlUGFkTW9kZWwge1xuICAgIHJldHVybiB0aGlzLnF1ZXN0aW9uQmFzZSBhcyBRdWVzdGlvblNpZ25hdHVyZVBhZE1vZGVsO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJFbGVtZW50KCk6IEpTWC5FbGVtZW50IHtcbiAgICB2YXIgY3NzQ2xhc3NlcyA9IHRoaXMucXVlc3Rpb24uY3NzQ2xhc3NlcztcbiAgICB2YXIgY2xlYXJCdXR0b24gPSB0aGlzLnJlbmRlckNsZWFuQnV0dG9uKCk7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtjc3NDbGFzc2VzLnJvb3R9IHJlZj17KHJvb3QpID0+ICh0aGlzLnNldENvbnRyb2wocm9vdCkpfSBzdHlsZT17eyBoZWlnaHQ6IHRoaXMucXVlc3Rpb24uc2lnbmF0dXJlSGVpZ2h0LCB3aWR0aDogdGhpcy5xdWVzdGlvbi5zaWduYXR1cmVXaWR0aCB9fT5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzTmFtZT17Y3NzQ2xhc3Nlcy5wbGFjZWhvbGRlcn1cbiAgICAgICAgICBzdHlsZT17eyBkaXNwbGF5OiB0aGlzLnF1ZXN0aW9uLm5lZWRTaG93UGxhY2Vob2xkZXIoKSA/IFwiXCIgOiBcIm5vbmVcIiB9fVxuICAgICAgICA+XG4gICAgICAgICAge3RoaXMucXVlc3Rpb24ucGxhY2VIb2xkZXJUZXh0fVxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdj5cbiAgICAgICAgICA8Y2FudmFzIHRhYkluZGV4PXswfT48L2NhbnZhcz5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIHtjbGVhckJ1dHRvbn1cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cblxuICByZW5kZXJDbGVhbkJ1dHRvbigpOiBKU1guRWxlbWVudCB8IG51bGwge1xuICAgIGlmKCF0aGlzLnF1ZXN0aW9uLmNhblNob3dDbGVhckJ1dHRvbikgcmV0dXJuIG51bGw7XG5cbiAgICB2YXIgY3NzQ2xhc3NlcyA9IHRoaXMucXVlc3Rpb24uY3NzQ2xhc3NlcztcbiAgICByZXR1cm4gPGRpdiBjbGFzc05hbWU9e2Nzc0NsYXNzZXMuY29udHJvbHN9PlxuICAgICAgPGJ1dHRvblxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgY2xhc3NOYW1lPXtjc3NDbGFzc2VzLmNsZWFyQnV0dG9ufVxuICAgICAgICB0aXRsZT17dGhpcy5xdWVzdGlvbi5jbGVhckJ1dHRvbkNhcHRpb259XG4gICAgICAgIG9uQ2xpY2s9eygpID0+IHRoaXMucXVlc3Rpb24uY2xlYXJWYWx1ZSgpfVxuICAgICAgPlxuICAgICAgICB7dGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLmNsZWFyQnV0dG9uSWNvbklkID8gPFN2Z0ljb24gaWNvbk5hbWU9e3RoaXMucXVlc3Rpb24uY3NzQ2xhc3Nlcy5jbGVhckJ1dHRvbkljb25JZH0gc2l6ZT17XCJhdXRvXCJ9PjwvU3ZnSWNvbj4gOiA8c3Bhbj7inJY8L3NwYW4+fVxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+O1xuICB9XG59XG5cblJlYWN0UXVlc3Rpb25GYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyUXVlc3Rpb24oXCJzaWduYXR1cmVwYWRcIiwgKHByb3BzKSA9PiB7XG4gIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFN1cnZleVF1ZXN0aW9uU2lnbmF0dXJlUGFkLCBwcm9wcyk7XG59KTtcbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcclxuaW1wb3J0IHsgTG9jYWxpemFibGVTdHJpbmcgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcclxuaW1wb3J0IHsgUmVhY3RFbGVtZW50RmFjdG9yeSB9IGZyb20gXCIuL2VsZW1lbnQtZmFjdG9yeVwiO1xyXG5cclxuZXhwb3J0IGNsYXNzIFN1cnZleUxvY1N0cmluZ0VkaXRvciBleHRlbmRzIFJlYWN0LkNvbXBvbmVudDxhbnksIGFueT4ge1xyXG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcclxuICAgIHN1cGVyKHByb3BzKTtcclxuICAgIHRoaXMuc3RhdGUgPSB7IGNoYW5nZWQ6IDAgfTtcclxuICB9XHJcbiAgcHJpdmF0ZSBnZXQgbG9jU3RyKCk6IExvY2FsaXphYmxlU3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLnByb3BzLmxvY1N0cjtcclxuICB9XHJcbiAgcHJpdmF0ZSBnZXQgc3R5bGUoKTogYW55IHtcclxuICAgIHJldHVybiB0aGlzLnByb3BzLnN0eWxlO1xyXG4gIH1cclxuICBjb21wb25lbnREaWRNb3VudCgpIHtcclxuICAgIGlmICghdGhpcy5sb2NTdHIpIHJldHVybjtcclxuICAgIHZhciBzZWxmID0gdGhpcztcclxuICAgIHRoaXMubG9jU3RyLm9uQ2hhbmdlZCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgc2VsZi5zZXRTdGF0ZSh7IGNoYW5nZWQ6IHNlbGYuc3RhdGUuY2hhbmdlZCArIDEgfSk7XHJcbiAgICB9O1xyXG4gIH1cclxuICBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcclxuICAgIGlmICghdGhpcy5sb2NTdHIpIHJldHVybjtcclxuICAgIHRoaXMubG9jU3RyLm9uQ2hhbmdlZCA9IGZ1bmN0aW9uICgpIHt9O1xyXG4gIH1cclxuICBvbklucHV0ID0gKGV2ZW50OiBhbnkpID0+IHtcclxuICAgIHRoaXMubG9jU3RyLnRleHQgPSBldmVudC50YXJnZXQuaW5uZXJUZXh0O1xyXG4gIH07XHJcbiAgb25DbGljayA9IChldmVudDogYW55KSA9PiB7XHJcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgfTtcclxuICByZW5kZXIoKTogSlNYLkVsZW1lbnQgfCBudWxsIHtcclxuICAgIGlmICghdGhpcy5sb2NTdHIpIHtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5sb2NTdHIuaGFzSHRtbCkge1xyXG4gICAgICBjb25zdCBodG1sVmFsdWUgPSB7IF9faHRtbDogdGhpcy5sb2NTdHIucmVuZGVyZWRIdG1sIH07XHJcbiAgICAgIHJldHVybiAoXHJcbiAgICAgICAgPHNwYW5cclxuICAgICAgICAgIGNsYXNzTmFtZT1cInN2LXN0cmluZy1lZGl0b3JcIlxyXG4gICAgICAgICAgY29udGVudEVkaXRhYmxlPVwidHJ1ZVwiXHJcbiAgICAgICAgICBzdXBwcmVzc0NvbnRlbnRFZGl0YWJsZVdhcm5pbmc9e3RydWV9XHJcbiAgICAgICAgICBzdHlsZT17dGhpcy5zdHlsZX1cclxuICAgICAgICAgIGRhbmdlcm91c2x5U2V0SW5uZXJIVE1MPXtodG1sVmFsdWV9XHJcbiAgICAgICAgICBvbkJsdXI9e3RoaXMub25JbnB1dH1cclxuICAgICAgICAgIG9uQ2xpY2s9e3RoaXMub25DbGlja31cclxuICAgICAgICAvPlxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIChcclxuICAgICAgPHNwYW5cclxuICAgICAgICBjbGFzc05hbWU9XCJzdi1zdHJpbmctZWRpdG9yXCJcclxuICAgICAgICBjb250ZW50RWRpdGFibGU9XCJ0cnVlXCJcclxuICAgICAgICBzdXBwcmVzc0NvbnRlbnRFZGl0YWJsZVdhcm5pbmc9e3RydWV9XHJcbiAgICAgICAgc3R5bGU9e3RoaXMuc3R5bGV9XHJcbiAgICAgICAgb25CbHVyPXt0aGlzLm9uSW5wdXR9XHJcbiAgICAgICAgb25DbGljaz17dGhpcy5vbkNsaWNrfVxyXG4gICAgICA+XHJcbiAgICAgICAge3RoaXMubG9jU3RyLnJlbmRlcmVkSHRtbH1cclxuICAgICAgPC9zcGFuPlxyXG4gICAgKTtcclxuICB9XHJcbn1cclxuXHJcblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFxyXG4gIExvY2FsaXphYmxlU3RyaW5nLmVkaXRhYmxlUmVuZGVyZXIsXHJcbiAgKHByb3BzKSA9PiB7XHJcbiAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTdXJ2ZXlMb2NTdHJpbmdFZGl0b3IsIHByb3BzKTtcclxuICB9XHJcbik7XHJcbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcclxuaW1wb3J0IHsgTG9jYWxpemFibGVTdHJpbmcgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcclxuaW1wb3J0IHsgUmVhY3RFbGVtZW50RmFjdG9yeSB9IGZyb20gXCIuL2VsZW1lbnQtZmFjdG9yeVwiO1xyXG5cclxuZXhwb3J0IGNsYXNzIFN1cnZleUxvY1N0cmluZ1ZpZXdlciBleHRlbmRzIFJlYWN0LkNvbXBvbmVudDxhbnksIGFueT4ge1xyXG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcclxuICAgIHN1cGVyKHByb3BzKTtcclxuICAgIHRoaXMucm9vdFJlZiA9IFJlYWN0LmNyZWF0ZVJlZigpO1xyXG4gIH1cclxuICBwcml2YXRlIHJvb3RSZWY6IFJlYWN0LlJlZk9iamVjdDxIVE1MU3BhbkVsZW1lbnQ+O1xyXG4gIHByaXZhdGUgZ2V0IGxvY1N0cigpOiBMb2NhbGl6YWJsZVN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5sb2NTdHI7XHJcbiAgfVxyXG4gIHByaXZhdGUgZ2V0IHN0eWxlKCk6IGFueSB7XHJcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5zdHlsZTtcclxuICB9XHJcbiAgY29tcG9uZW50RGlkTW91bnQoKSB7XHJcbiAgICB0aGlzLnJlYWN0T25TdHJDaGFuZ2VkKCk7XHJcbiAgfVxyXG4gIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xyXG4gICAgaWYgKCF0aGlzLmxvY1N0cikgcmV0dXJuO1xyXG4gICAgdGhpcy5sb2NTdHIub25TdHJpbmdDaGFuZ2VkLnJlbW92ZSh0aGlzLm9uQ2hhbmdlZEhhbmRsZXIpO1xyXG4gIH1cclxuICBjb21wb25lbnREaWRVcGRhdGUocHJldlByb3BzOiBhbnksIHByZXZTdGF0ZTogYW55KSB7XHJcbiAgICBpZighIXByZXZQcm9wcy5sb2NTdHIpIHtcclxuICAgICAgdGhpcy5sb2NTdHIub25TdHJpbmdDaGFuZ2VkLnJlbW92ZSh0aGlzLm9uQ2hhbmdlZEhhbmRsZXIpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5yZWFjdE9uU3RyQ2hhbmdlZCgpO1xyXG4gIH1cclxuICBwcml2YXRlIGlzUmVuZGVyaW5nOiBib29sZWFuO1xyXG4gIHByaXZhdGUgb25DaGFuZ2VkSGFuZGxlciA9IChzZW5kZXI6IGFueSwgb3B0aW9uczogYW55KSA9PiB7XHJcbiAgICBpZih0aGlzLmlzUmVuZGVyaW5nKSByZXR1cm47XHJcbiAgICB0aGlzLnNldFN0YXRlKHsgY2hhbmdlZDogISF0aGlzLnN0YXRlICYmIHRoaXMuc3RhdGUuY2hhbmdlZCA/IHRoaXMuc3RhdGUuY2hhbmdlZCArIDEgOiAxIH0pO1xyXG4gIH1cclxuICBwcml2YXRlIHJlYWN0T25TdHJDaGFuZ2VkKCkge1xyXG4gICAgaWYgKCF0aGlzLmxvY1N0cikgcmV0dXJuO1xyXG4gICAgdGhpcy5sb2NTdHIub25TdHJpbmdDaGFuZ2VkLmFkZCh0aGlzLm9uQ2hhbmdlZEhhbmRsZXIpO1xyXG4gIH1cclxuICByZW5kZXIoKTogSlNYLkVsZW1lbnQgfCBudWxsIHtcclxuICAgIGlmICghdGhpcy5sb2NTdHIpIHJldHVybiBudWxsO1xyXG4gICAgdGhpcy5pc1JlbmRlcmluZyA9IHRydWU7XHJcbiAgICBjb25zdCBzdHJFbCA9IHRoaXMucmVuZGVyU3RyaW5nKCk7XHJcbiAgICB0aGlzLmlzUmVuZGVyaW5nID0gZmFsc2U7XHJcbiAgICByZXR1cm4gc3RyRWw7XHJcbiAgfVxyXG4gIHByb3RlY3RlZCByZW5kZXJTdHJpbmcoKTogSlNYLkVsZW1lbnQge1xyXG4gICAgaWYgKHRoaXMubG9jU3RyLmhhc0h0bWwpIHtcclxuICAgICAgbGV0IGh0bWxWYWx1ZSA9IHsgX19odG1sOiB0aGlzLmxvY1N0ci5yZW5kZXJlZEh0bWwgfTtcclxuICAgICAgcmV0dXJuIDxzcGFuIHJlZj17dGhpcy5yb290UmVmfSBjbGFzc05hbWU9XCJzdi1zdHJpbmctdmlld2VyXCIgc3R5bGU9e3RoaXMuc3R5bGV9IGRhbmdlcm91c2x5U2V0SW5uZXJIVE1MPXtodG1sVmFsdWV9IC8+O1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIDxzcGFuIHJlZj17dGhpcy5yb290UmVmfSBjbGFzc05hbWU9XCJzdi1zdHJpbmctdmlld2VyXCIgc3R5bGU9e3RoaXMuc3R5bGV9Pnt0aGlzLmxvY1N0ci5yZW5kZXJlZEh0bWx9PC9zcGFuPjtcclxuICB9XHJcbn1cclxuXHJcblJlYWN0RWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFxyXG4gIExvY2FsaXphYmxlU3RyaW5nLmRlZmF1bHRSZW5kZXJlcixcclxuICAocHJvcHMpID0+IHtcclxuICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFN1cnZleUxvY1N0cmluZ1ZpZXdlciwgcHJvcHMpO1xyXG4gIH1cclxuKTtcclxuIiwiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBEcm9wZG93bk11bHRpU2VsZWN0TGlzdE1vZGVsLCBRdWVzdGlvblRhZ2JveE1vZGVsLCBIZWxwZXJzIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBSZWFjdFF1ZXN0aW9uRmFjdG9yeSB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fZmFjdG9yeVwiO1xuaW1wb3J0IHsgU3VydmV5RWxlbWVudEJhc2UgfSBmcm9tIFwiLi9yZWFjdHF1ZXN0aW9uX2VsZW1lbnRcIjtcblxuaW50ZXJmYWNlIElUYWdib3hGaWx0ZXJQcm9wcyB7XG4gIG1vZGVsOiBEcm9wZG93bk11bHRpU2VsZWN0TGlzdE1vZGVsO1xuICBxdWVzdGlvbjogUXVlc3Rpb25UYWdib3hNb2RlbDtcbn1cblxuZXhwb3J0IGNsYXNzIFRhZ2JveEZpbHRlclN0cmluZyBleHRlbmRzIFN1cnZleUVsZW1lbnRCYXNlPElUYWdib3hGaWx0ZXJQcm9wcywgYW55PiB7XG4gIGlucHV0RWxlbWVudDogSFRNTElucHV0RWxlbWVudCB8IG51bGw7XG5cbiAgZ2V0IG1vZGVsKCk6IERyb3Bkb3duTXVsdGlTZWxlY3RMaXN0TW9kZWwge1xuICAgIHJldHVybiB0aGlzLnByb3BzLm1vZGVsO1xuICB9XG4gIGdldCBxdWVzdGlvbigpOiBRdWVzdGlvblRhZ2JveE1vZGVsIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5xdWVzdGlvbjtcbiAgfVxuICBjb21wb25lbnREaWRVcGRhdGUocHJldlByb3BzOiBhbnksIHByZXZTdGF0ZTogYW55KSB7XG4gICAgc3VwZXIuY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wcywgcHJldlN0YXRlKTtcbiAgICB0aGlzLnVwZGF0ZURvbUVsZW1lbnQoKTtcbiAgfVxuICBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICBzdXBlci5jb21wb25lbnREaWRNb3VudCgpO1xuICAgIHRoaXMudXBkYXRlRG9tRWxlbWVudCgpO1xuICB9XG4gIHVwZGF0ZURvbUVsZW1lbnQoKSB7XG4gICAgaWYgKCEhdGhpcy5pbnB1dEVsZW1lbnQpIHtcbiAgICAgIGNvbnN0IGNvbnRyb2w6IGFueSA9IHRoaXMuaW5wdXRFbGVtZW50O1xuICAgICAgY29uc3QgbmV3VmFsdWUgPSB0aGlzLm1vZGVsLmZpbHRlclN0cmluZztcbiAgICAgIGlmICghSGVscGVycy5pc1R3b1ZhbHVlRXF1YWxzKG5ld1ZhbHVlLCBjb250cm9sLnZhbHVlKSkge1xuICAgICAgICBjb250cm9sLnZhbHVlID0gdGhpcy5tb2RlbC5maWx0ZXJTdHJpbmc7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIG9uQ2hhbmdlKGU6IGFueSkge1xuICAgIGlmIChlLnRhcmdldCA9PT0gZG9jdW1lbnQuYWN0aXZlRWxlbWVudCkge1xuICAgICAgdGhpcy5tb2RlbC5maWx0ZXJTdHJpbmcgPSBlLnRhcmdldC52YWx1ZTtcbiAgICB9XG4gIH1cbiAga2V5aGFuZGxlcihlOiBhbnkpIHtcbiAgICB0aGlzLm1vZGVsLmlucHV0S2V5SGFuZGxlcihlKTtcbiAgfVxuICBvbkJsdXIoZTogYW55KSB7XG4gICAgdGhpcy5tb2RlbC5vbkJsdXIoZSk7XG4gIH1cblxuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICB9XG4gIGdldFN0YXRlRWxlbWVudCgpIHtcbiAgICByZXR1cm4gdGhpcy5tb2RlbDtcbiAgfVxuICByZW5kZXIoKTogSlNYLkVsZW1lbnQge1xuICAgIHJldHVybiAoPGlucHV0IHR5cGU9XCJ0ZXh0XCIgYXV0b0NvbXBsZXRlPVwib2ZmXCJcbiAgICAgIGlkPXt0aGlzLnF1ZXN0aW9uLmdldElucHV0SWQoKX1cbiAgICAgIHJlZj17KGVsZW1lbnQpID0+ICh0aGlzLmlucHV0RWxlbWVudCA9IGVsZW1lbnQpfVxuICAgICAgY2xhc3NOYW1lPXt0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMuZmlsdGVyU3RyaW5nSW5wdXR9XG4gICAgICBkaXNhYmxlZD17dGhpcy5xdWVzdGlvbi5pc0lucHV0UmVhZE9ubHl9XG4gICAgICByZWFkT25seT17IXRoaXMubW9kZWwuc2VhcmNoRW5hYmxlZCA/IHRydWUgOiB1bmRlZmluZWR9XG4gICAgICBzaXplPXshdGhpcy5tb2RlbC5maWx0ZXJTdHJpbmcgPyAxIDogdW5kZWZpbmVkfVxuICAgICAgcm9sZT17IHRoaXMubW9kZWwuZmlsdGVyU3RyaW5nRW5hYmxlZCA/IHRoaXMucXVlc3Rpb24uYXJpYVJvbGUgOiB1bmRlZmluZWQgfVxuICAgICAgYXJpYS1sYWJlbD17dGhpcy5xdWVzdGlvbi5wbGFjZWhvbGRlcn1cbiAgICAgIHBsYWNlaG9sZGVyPXt0aGlzLm1vZGVsLmZpbHRlclN0cmluZ1BsYWNlaG9sZGVyfVxuICAgICAgb25LZXlEb3duPXsoZSkgPT4geyB0aGlzLmtleWhhbmRsZXIoZSk7IH19XG4gICAgICBvbkNoYW5nZT17KGUpID0+IHsgdGhpcy5vbkNoYW5nZShlKTsgfX1cbiAgICAgIG9uQmx1cj17KGUpID0+IHsgdGhpcy5vbkJsdXIoZSk7IH19XG4gICAgPjwvaW5wdXQ+KTtcbiAgfVxufVxuXG5SZWFjdFF1ZXN0aW9uRmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlclF1ZXN0aW9uKFwic3YtdGFnYm94LWZpbHRlclwiLCAocHJvcHMpID0+IHtcbiAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoVGFnYm94RmlsdGVyU3RyaW5nLCBwcm9wcyk7XG59KTsiLCJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFJlYWN0U3VydmV5RWxlbWVudCB9IGZyb20gXCIuL3JlYWN0cXVlc3Rpb25fZWxlbWVudFwiO1xuaW1wb3J0IHsgQmFzZSwgUXVlc3Rpb25UYWdib3hNb2RlbCwgSXRlbVZhbHVlIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBTdmdJY29uIH0gZnJvbSBcIi4vY29tcG9uZW50cy9zdmctaWNvbi9zdmctaWNvblwiO1xuXG5leHBvcnQgY2xhc3MgU3VydmV5UXVlc3Rpb25UYWdib3hJdGVtIGV4dGVuZHMgUmVhY3RTdXJ2ZXlFbGVtZW50IHtcbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0U3RhdGVFbGVtZW50KCk6IEJhc2Uge1xuICAgIHJldHVybiB0aGlzLml0ZW07XG4gIH1cbiAgcHJvdGVjdGVkIGdldCBxdWVzdGlvbigpOiBRdWVzdGlvblRhZ2JveE1vZGVsIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5xdWVzdGlvbjtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IGl0ZW0oKTogSXRlbVZhbHVlIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5pdGVtO1xuICB9XG4gIHByb3RlY3RlZCBjYW5SZW5kZXIoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhdGhpcy5pdGVtICYmICEhdGhpcy5xdWVzdGlvbjtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZGVyRWxlbWVudCgpOiBKU1guRWxlbWVudCB7XG4gICAgY29uc3QgdGV4dCA9IHRoaXMucmVuZGVyTG9jU3RyaW5nKHRoaXMuaXRlbS5sb2NUZXh0KTtcblxuICAgIGNvbnN0IHJlbW92ZUl0ZW0gPSAoZXZlbnQ6IGFueSkgPT4ge1xuICAgICAgdGhpcy5xdWVzdGlvbi5kcm9wZG93bkxpc3RNb2RlbC5kZXNlbGVjdEl0ZW0odGhpcy5pdGVtLnZhbHVlKTtcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIH07XG5cbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdi10YWdib3hfX2l0ZW1cIj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdi10YWdib3hfX2l0ZW0tdGV4dFwiPnt0ZXh0fTwvZGl2PlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3NOYW1lPXsgdGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLmNsZWFuSXRlbUJ1dHRvbn1cbiAgICAgICAgICBvbkNsaWNrPXtyZW1vdmVJdGVtfVxuICAgICAgICA+XG4gICAgICAgICAgPFN2Z0ljb25cbiAgICAgICAgICAgIGNsYXNzTmFtZT17dGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLmNsZWFuSXRlbUJ1dHRvblN2Z31cbiAgICAgICAgICAgIGljb25OYW1lPXt0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMuY2xlYW5JdGVtQnV0dG9uSWNvbklkfVxuICAgICAgICAgICAgc2l6ZT17MTZ9XG4gICAgICAgICAgPjwvU3ZnSWNvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG59IiwiLyoqXG4gKiBHbG9iYWwgc3VydmV5IHNldHRpbmdzXG4gKi9cbmV4cG9ydCB2YXIgc2V0dGluZ3MgPSB7XG4gIC8qKlxuICAgKiBPcHRpb25zIGZvciBTdXJ2ZXlKUyBjb21wYXJhdG9yLiBCeSBkZWZhdWx0IHdlIHRyaW0gc3RyaW5ncyBhbmQgY29tcGFyZSB0aGVtIGFzIGNhc2UgaW5zZW5zaXRpdmUuIFRvIGNoYW5nZSB0aGUgYmVoYXZpb3IgeW91IGNhbiB1c2UgZm9sbG93aW5nIGNvZGU6XG4gICAqIHNldHRpbmdzLmNvbXBhcmF0b3IudHJpbVN0cmluZ3MgPSBmYWxzZTsgLy9cImFiYyBcIiB3aWxsIG5vdCBlcXVhbCB0byBcImFiY1wiLiBUaGV5IGFyZSBlcXVhbCBieSBkZWZhdWx0LlxuICAgKiBzZXR0aW5ncy5jb21wYXJhdG9yLmNhc2VTZW5zaXRpdmUgPSB0cnVlOyAvL1wiYWJjIFwiIHdpbGwgbm90IGVxdWFsIHRvIFwiQWJjXCIuIFRoZXkgYXJlIGVxdWFsIGJ5IGRlZmF1bHQuXG4gICAqL1xuICBjb21wYXJhdG9yOiB7XG4gICAgdHJpbVN0cmluZ3M6IHRydWUsXG4gICAgY2FzZVNlbnNpdGl2ZTogZmFsc2VcbiAgfSxcbiAgZXhwcmVzc2lvbkRpc2FibGVDb252ZXJzaW9uQ2hhcjogXCIjXCIsXG4gIC8qKlxuICAgKiBTZXQgdGhpcyB2YWx1ZSB0byBmYWxzZSwgaWYgeW91IHdhbnQgdG8gaGF2ZSBVVEMgZnVjdGlvbnMsIGZvciBleGFtcGxlIHNldFVUQ0hvdXJzIGluc2lkZSBvdXIgZnVuY3Rpb25zLCBsaWtlIHRvZGF5LlxuICAgKiBCeSBkZWZhdWx0IGl0IHVzZXMgc2V0SG91cnMgZnVuY3Rpb24sIHdpdGggbG9jYWwgZGF0ZVxuICAgKi9cbiAgdXNlTG9jYWxUaW1lWm9uZTogdHJ1ZSxcbiAgLyoqXG4gICAqIFRoZSBwcmVmaXggdGhhdCB1c2VzIHRvIHN0b3JlIHRoZSBxdWVzdGlvbiBjb21tZW50LCBhcyBcInF1ZXN0aW9uTmFtZSArIGNvbW1lbnRQcmVmaXhcIi5cbiAgICogVGhlIGRlZmF1bHQgdmFsdWUgaXMgXCItQ29tbWVudFwiXG4gICAqL1xuICBjb21tZW50UHJlZml4OiBcIi1Db21tZW50XCIsXG4gIC8qKlxuICAgKiBFbmNvZGUgcGFyYW1ldGVyIG9uIGNhbGxpbmcgcmVzdGZ1bCB3ZWIgQVBJXG4gICAqL1xuICB3ZWJzZXJ2aWNlRW5jb2RlUGFyYW1ldGVyczogdHJ1ZSxcbiAgLyoqXG4gICAqIENhY2hlIHRoZSByZXN1bHQgZm9yIGNob2ljZXMgZ2V0dGluZyBmcm9tIHdlYiBzZXJ2aWNlcy4gU2V0IHRoaXMgcHJvcGVydHkgdG8gZmFsc2UsIHRvIGRpc2FibGUgdGhlIGNhY2hpbmcuXG4gICAqL1xuICB1c2VDYWNoaW5nRm9yQ2hvaWNlc1Jlc3RmdWw6IHRydWUsXG4gIGdldCB1c2VDYWNoaW5nRm9yQ2hvaWNlc1Jlc3RmdWxsKCkge1xuICAgIHJldHVybiBzZXR0aW5ncy51c2VDYWNoaW5nRm9yQ2hvaWNlc1Jlc3RmdWw7XG4gIH0sXG4gIHNldCB1c2VDYWNoaW5nRm9yQ2hvaWNlc1Jlc3RmdWxsKHZhbDogYm9vbGVhbikge1xuICAgIHNldHRpbmdzLnVzZUNhY2hpbmdGb3JDaG9pY2VzUmVzdGZ1bCA9IHZhbDtcbiAgfSxcbiAgLyoqXG4gICAqIFN1cnZleUpTIHdlYiBzZXJ2aWNlIEFQSSB1cmxcbiAgICovXG4gIHN1cnZleVNlcnZpY2VVcmw6IFwiaHR0cHM6Ly9hcGkuc3VydmV5anMuaW8vcHVibGljL3YxL1N1cnZleVwiLFxuICAvKipcbiAgICogc2VwYXJhdG9yIHRoYXQgY2FuIGFsbG93IHRvIHNldCB2YWx1ZSBhbmQgdGV4dCBvZiBJdGVtVmFsdWUgb2JqZWN0IGluIG9uZSBzdHJpbmcgYXM6IFwidmFsdWV8dGV4dFwiXG4gICAqL1xuICBpdGVtVmFsdWVTZXBhcmF0b3I6IFwifFwiLFxuICAvKipcbiAgICogU2V0IGl0IHRvIHRydWUgdG8gc2VyaWFsaXplIGl0ZW12YWx1ZSBpbnN0YW5jZSBhbHdheXMgYXMgb2JqZWN0IGV2ZW4gaWYgdGV4dCBwcm9wZXJ0eSBpcyBlbXB0eVxuICAgKiBjb25zdCBpdGVtID0gbmV3IFN1cnZleS5JdGVtVmFsdWUoNSk7XG4gICAqIGl0ZW0udG9KU09OKCk7IC8vd2lsbCByZXR1cm4ge3ZhbHVlOiA1fSwgaW5zdGVhZCBvZiA1IGJ5IGRlZmF1bHQuXG4gICAqL1xuICBpdGVtVmFsdWVBbHdheXNTZXJpYWxpemVBc09iamVjdDogZmFsc2UsXG4gIC8qKlxuICAgKiBTZXQgaXQgdG8gdHJ1ZSB0byBzZXJpYWxpemUgaXRlbXZhbHVlIHRleHQgcHJvcGVydHksIGV2ZW4gaWYgaXQgaXMgZW1wdHkgb3IgZXF1YWxzIHRvIHZhbHVlXG4gICAqIGNvbnN0IGl0ZW0gPSBuZXcgU3VydmV5Lkl0ZW1WYWx1ZShcIml0ZW0xXCIpO1xuICAgKiBpdGVtLnRvSlNPTigpOyAvL3dpbGwgcmV0dXJuIHt2YWx1ZTogaXRlbTEsIHRleHQ6IFwiaXRlbTFcIn0sIGluc3RlYWQgb2YgXCJpdGVtMVwiIGJ5IGRlZmF1bHQuXG4gICAqL1xuICBpdGVtVmFsdWVBbHdheXNTZXJpYWxpemVUZXh0OiBmYWxzZSxcbiAgLyoqXG4gICAqIGRlZmF1bHQgbG9jYWxlIG5hbWUgZm9yIGxvY2FsaXphYmxlIHN0cmluZ3MgdGhhdCB1c2VzIGR1cmluZyBzZXJpYWxpemF0aW9uLCB7XCJkZWZhdWx0XCI6IFwiTXkgdGV4dFwiLCBcImRlXCI6IFwiTWVpbiBUZXh0XCJ9XG4gICAqL1xuICBkZWZhdWx0TG9jYWxlTmFtZTogXCJkZWZhdWx0XCIsXG4gIC8qKlxuICAgKiBCeSBkZWZhdWx0IHdlIGRvIG5vdCBzdG9yZSBhIHZhbHVlIGZvciBhIGxvY2FsZSBpZiBpdCBlcXVhbHMgdG8gXCJkZWZhdWx0XCIgbG9jYWxlIHZhbHVlXG4gICAqL1xuICBzdG9yZUR1cGxpY2F0ZWRUcmFuc2xhdGlvbnM6IGZhbHNlLFxuICAvKipcbiAgICogRGVmYXVsdCByb3cgbmFtZSBmb3IgbWF0cml4IChzaW5nbGUgY2hvaWNlKVxuICAgKi9cbiAgbWF0cml4RGVmYXVsdFJvd05hbWU6IFwiZGVmYXVsdFwiLFxuICAvKipcbiAgICogRGVmYXVsdCBjZWxsIHR5cGUgZm9yIGRyb3Bkb3duIGFuZCBkeW5hbWljIG1hdHJpY2VzXG4gICAqL1xuICBtYXRyaXhEZWZhdWx0Q2VsbFR5cGU6IFwiZHJvcGRvd25cIixcbiAgLyoqXG4gICAqIFRvdGFsIHZhbHVlIHBvc3RmaXggZm9yIGRyb3Bkb3duIGFuZCBkeW5hbWljIG1hdHJpY2VzLiBUaGUgdG90YWwgdmFsdWUgc3RvcmVzIGFzOiB7bWF0cml4TmFtZX0gKyB7cG9zdGZpeH1cbiAgICovXG4gIG1hdHJpeFRvdGFsVmFsdWVQb3N0Rml4OiBcIi10b3RhbFwiLFxuICAvKipcbiAgICogTWF4aW11bSByb3cgY291bnQgaW4gZHluYW1pYyBtYXRyaXhcbiAgICovXG4gIG1hdHJpeE1heGltdW1Sb3dDb3VudDogMTAwMCxcbiAgLyoqXG4gICAqIE1heGltdW0gcm93Q291bnQgdGhhdCByZXR1cm5zIGluIGFkZENvbmRpdGlvbk9iamVjdHNCeUNvbnRleHQgZnVuY3Rpb25cbiAgICovXG4gIG1hdHJpeE1heFJvd0NvdW50SW5Db25kaXRpb246IDEsXG4gIC8qKlxuICAgKiBTZXQgdGhpcyBwcm9wZXJ0eSB0byBmYWxzZSwgdG8gcmVuZGVyIG1hdHJpeCBkeW5hbWljIHJlbW92ZSBhY3Rpb24gYXMgYnV0dG9uLlxuICAgKiBJdCBpcyByZW5kZXJlZCBhcyBpY29uIGluIG5ldyB0aGVtZXMgKFwiZGVmYXVsdFYyXCIpIGJ5IGRlZmF1bHQuXG4gICAqL1xuICBtYXRyaXhSZW5kZXJSZW1vdmVBc0ljb246IHRydWUsXG4gIC8qKlxuICAgKiBNYXhpbXVtIHBhbmVsIGNvdW50IGluIGR5bmFtaWMgcGFuZWxcbiAgICovXG4gIHBhbmVsTWF4aW11bVBhbmVsQ291bnQ6IDEwMCxcbiAgLyoqXG4gICAqIE1heGltdW0gcmF0ZSB2YWx1ZSBjb3VudCBpbiByYXRpbmcgcXVlc3Rpb25cbiAgICovXG4gIHJhdGluZ01heGltdW1SYXRlVmFsdWVDb3VudDogMjAsXG4gIC8qKlxuICAgKiBEaXNhYmxlIHRoZSBxdWVzdGlvbiB3aGlsZSBjaG9pY2VzIGFyZSBnZXR0aW5nIGZyb20gdGhlIHdlYiBzZXJ2aWNlXG4gICAqL1xuICBkaXNhYmxlT25HZXR0aW5nQ2hvaWNlc0Zyb21XZWI6IGZhbHNlLFxuICAvKipcbiAgICogU2V0IHRvIHRydWUgdG8gYWx3YXlzIHNlcmlhbGl6ZSB0aGUgbG9jYWxpemF0aW9uIHN0cmluZyBhcyBvYmplY3QgZXZlbiBpZiB0aGVyZSBpcyBvbmx5IG9uZSB2YWx1ZSBmb3IgZGVmYXVsdCBsb2NhbGUuIEluc3RlYWQgb2Ygc3RyaW5nIFwiTXlTdHJcIiBzZXJpYWxpemUgYXMge2RlZmF1bHQ6IFwiTXlTdHJcIn1cbiAgICovXG4gIHNlcmlhbGl6ZUxvY2FsaXphYmxlU3RyaW5nQXNPYmplY3Q6IGZhbHNlLFxuICAvKipcbiAgICogU2V0IHRvIGZhbHNlIHRvIGhpZGUgZW1wdHkgcGFnZSB0aXRsZSBhbmQgZGVzY3JpcHRpb24gaW4gZGVzaWduIG1vZGVcbiAgICovXG4gIGFsbG93U2hvd0VtcHR5VGl0bGVJbkRlc2lnbk1vZGU6IHRydWUsXG4gIC8qKlxuICAgKiBTZXQgdG8gZmFsc2UgdG8gaGlkZSBlbXB0eSBwYWdlIGRlc2NyaXB0aW9uIGluIGRlc2lnbiBtb2RlXG4gICAqL1xuICBhbGxvd1Nob3dFbXB0eURlc2NyaXB0aW9uSW5EZXNpZ25Nb2RlOiB0cnVlLFxuICAvKipcbiAgICogU2V0IHRoaXMgcHJvcGVydHkgdG8gdHJ1ZSB0byBleGVjdXRlIHRoZSBjb21wbGV0ZSB0cmlnZ2VyIG9uIHZhbHVlIGNoYW5nZSBpbnN0ZWFkIG9mIG9uIG5leHQgcGFnZS5cbiAgICovXG4gIGV4ZWN1dGVDb21wbGV0ZVRyaWdnZXJPblZhbHVlQ2hhbmdlZDogZmFsc2UsXG4gIC8qKlxuICAgKiBTZXQgdGhpcyBwcm9wZXJ0eSB0byBmYWxzZSB0byBzdG9wIHNob3dpbmcgXCJDb21wZXRlXCIgYnV0dG9uIHdoZW4gdGhlIGNvbXBsZXRlIHRyaWdnZXIgaXMgZ29pbmcgdG8gYmUgZXhlY3V0ZWQuXG4gICAqL1xuICBjaGFuZ2VOYXZpZ2F0aW9uQnV0dG9uc09uQ29tcGxldGVUcmlnZ2VyOiB0cnVlLFxuICAvKipcbiAgICogU2V0IHRoaXMgcHJvcGVydHkgdG8gZmFsc2UgdG8gZXhlY3V0ZSB0aGUgc2tpcCB0cmlnZ2VyIG9uIG5leHQgcGFnZSBpbnN0ZWFkIG9mIG9uIHZhbHVlIGNoYW5nZS5cbiAgICovXG4gIGV4ZWN1dGVTa2lwVHJpZ2dlck9uVmFsdWVDaGFuZ2VkOiB0cnVlLFxuICAvKipcbiAgICogU3BlY2lmaWVzIGhvdyB0aGUgaW5wdXQgZmllbGQgb2YgW0NvbW1lbnRdKGh0dHBzOi8vc3VydmV5anMuaW8vRG9jdW1lbnRhdGlvbi9MaWJyYXJ5P2lkPXF1ZXN0aW9uY29tbWVudG1vZGVsKSBxdWVzdGlvbnMgaXMgcmVuZGVyZWQgaW4gdGhlIHJlYWQtb25seSBtb2RlLlxuICAgKiBBdmFpbGFibGUgdmFsdWVzOlxuICAgKiBcInRleHRhcmVhXCIgKGRlZmF1bHQpIC0gQSAndGV4dGFyZWEnIGVsZW1lbnQgaXMgdXNlZCB0byByZW5kZXIgYSBDb21tZW50IHF1ZXN0aW9uJ3MgaW5wdXQgZmllbGQuXG4gICAqIFwiZGl2XCIgLSBBICdkaXYnIGVsZW1lbnQgaXMgdXNlZCB0byByZW5kZXIgYSBDb21tZW50IHF1ZXN0aW9uJ3MgaW5wdXQgZmllbGQuXG4gICAqL1xuICByZWFkT25seUNvbW1lbnRSZW5kZXJNb2RlOiBcInRleHRhcmVhXCIsXG4gIC8qKlxuICAgKiBTcGVjaWZpZXMgaG93IHRoZSBpbnB1dCBmaWVsZCBvZiBbVGV4dF0oaHR0cHM6Ly9zdXJ2ZXlqcy5pby9Eb2N1bWVudGF0aW9uL0xpYnJhcnk/aWQ9cXVlc3Rpb250ZXh0bW9kZWwpIHF1ZXN0aW9ucyBpcyByZW5kZXJlZCBpbiB0aGUgcmVhZC1vbmx5IG1vZGUuXG4gICAqIEF2YWlsYWJsZSB2YWx1ZXM6XG4gICAqIFwiaW5wdXRcIiAoZGVmYXVsdCkgLSBBbiAnaW5wdXQnIGVsZW1lbnQgaXMgdXNlZCB0byByZW5kZXIgYSBUZXh0IHF1ZXN0aW9uJ3MgaW5wdXQgZmllbGQuXG4gICAqIFwiZGl2XCIgLSBBICdkaXYnIGVsZW1lbnQgaXMgdXNlZCB0byByZW5kZXIgYSBUZXh0IHF1ZXN0aW9uJ3MgaW5wdXQgZmllbGQuXG4gICAqL1xuICByZWFkT25seVRleHRSZW5kZXJNb2RlOiBcImlucHV0XCIsXG4gIC8qKlxuICAgKiBPdmVycmlkZSB0aGlzIGZ1bmN0aW9uLCBzZXQgeW91ciBmdW5jdGlvbiwgaWYgeW91IHdhbnQgdG8gc2hvdyB5b3VyIG93biBkaWFsb2cgY29uZmlybSB3aW5kb3cgaW5zdGVhZCBvZiBzdGFuZGFyZCBicm93c2VyIHdpbmRvdy5cbiAgICogQHBhcmFtIG1lc3NhZ2VcbiAgICovXG4gIGNvbmZpcm1BY3Rpb25GdW5jOiBmdW5jdGlvbiAobWVzc2FnZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGNvbmZpcm0obWVzc2FnZSk7XG4gIH0sXG4gIC8qKlxuICAgKiBTZXQgdGhpcyBwcm9wZXJ0eSB0byBjaGFuZ2UgdGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlIG1pbldpZHRoIGNvbnN0cmFpbnRcbiAgICovXG4gIG1pbldpZHRoOiBcIjMwMHB4XCIsXG4gIC8qKlxuICAgKiBTZXQgdGhpcyBwcm9wZXJ0eSB0byBjaGFuZ2UgdGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlIG1heFdpZHRoIGNvbnN0cmFpbnRcbiAgICovXG4gIG1heFdpZHRoOiBcIjEwMCVcIixcbiAgLyoqXG4gICAqIFRoaXMgcHJvcGVydHkgdGVsbHMgaG93IG1hbnkgdGltZXMgc3VydmV5IHJlLXJ1biBleHByZXNzaW9ucyBvbiB2YWx1ZSBjaGFuZ2VzIGR1cmluZyBjb25kaXRpb24gcnVubmluZy4gV2UgbmVlZCBpdCB0byBhdm9pZCByZWN1cnNpb25zIGluIHRoZSBleHByZXNzaW9uc1xuICAgKi9cbiAgbWF4aW11bUNvbmRpdGlvblJ1bkNvdW50T25WYWx1ZUNoYW5nZWQ6IDEwLFxuICAvKipcbiAgICogQnkgZGVmYXVsdCB2aXNpYmxlSW5kZXggZm9yIHF1ZXN0aW9uIHdpdGggdGl0bGVMb2NhdGlvbiA9IFwiaGlkZGVuXCIgaXMgLTEsIGFuZCBzdXJ2ZXkgZG9lc24ndCBjb3VudCB0aGVzZSBxdWVzdGlvbnMgd2hlbiBzZXQgcXVlc3Rpb25zIG51bWJlcnMuXG4gICAqIFNldCBpdCB0cnVlLCBhbmQgYSBxdWVzdGlvbiBuZXh0IHRvIGEgcXVlc3Rpb24gd2l0aCBoaWRkZW4gdGl0bGUgd2lsbCBpbmNyZWFzZSBpdCdzIG51bWJlci5cbiAgICovXG4gIHNldFF1ZXN0aW9uVmlzaWJsZUluZGV4Rm9ySGlkZGVuVGl0bGU6IGZhbHNlLFxuICAvKipcbiAgICogQnkgZGVmYXVsdCB2aXNpYmxlSW5kZXggZm9yIHF1ZXN0aW9uIHdpdGggaGlkZU51bWJlciA9IHRydWUgaXMgLTEsIGFuZCBzdXJ2ZXkgZG9lc24ndCBjb3VudCB0aGVzZSBxdWVzdGlvbnMgd2hlbiBzZXQgcXVlc3Rpb25zIG51bWJlcnMuXG4gICAqIFNldCBpdCB0cnVlLCBhbmQgYSBxdWVzdGlvbiBuZXh0IHRvIGEgcXVlc3Rpb24gd2l0aCBoaWRkZW4gdGl0bGUgbnVtYmVyIHdpbGwgaW5jcmVhc2UgaXQncyBudW1iZXIuXG4gICAqL1xuICBzZXRRdWVzdGlvblZpc2libGVJbmRleEZvckhpZGRlbk51bWJlcjogZmFsc2UsXG4gIC8qKlxuICAgKiBCeSBkZWZhdWx0IGFsbCByb3dzIGFyZSByZW5kZXJlZCBubyBtYXR0ZXJzIHdod3RoZXIgdGhleSBhcmUgdmlzaWJsZS5cbiAgICogU2V0IGl0IHRydWUsIGFuZCBzdXJ2ZXkgbWFya3VwIHJvd3Mgd2lsbCBiZSByZW5kZXJlZCBvbmx5IGlmIHRoZXkgYXJlIHZpc2libGUgaW4gdmlld3BvcnQuXG4gICAqIFRoaXMgZmVhdHVyZSBpcyBleHBlcmltYW50YWwgYW5kIG1pZ2h0IGRvIG5vdCBzdXBwb3J0IGFsbCB0aGUgdXNlIGNhc2VzLlxuICAgKi9cbiAgbGF6eVJvd3NSZW5kZXJpbmc6IGZhbHNlLFxuICBsYXp5Um93c1JlbmRlcmluZ1N0YXJ0Um93OiAzLFxuICAvKipcbiAgICogQnkgZGVmYXVsdCBjaGVja2JveCBhbmQgcmFkaW9ncm91cCBpdGVtcyBhcmUgb3JkZXJlZCBpbiByb3dzLlxuICAgKiBTZXQgaXQgXCJjb2x1bW5cIiwgYW5kIGl0ZW1zIHdpbGwgYmUgb3JkZXJlZCBpbiBjb2x1bW5zLlxuICAgKi9cbiAgc2hvd0l0ZW1zSW5PcmRlcjogXCJkZWZhdWx0XCIsXG4gIC8qKlxuICAgKiBTdXBwb3J0ZWQgdmFsaWRhdG9ycyBieSBxdWVzdGlvbiB0eXBlcy4gWW91IGNhbiBtb2RpZnkgdGhpcyB2YXJpYWJsZSB0byBhZGQgdmFsaWRhdG9ycyBmb3IgbmV3IHF1ZXN0aW9uIHR5cGVzIG9yIGFkZC9yZW1vdmUgZm9yIGV4aXN0aW5nIHF1ZXN0aW9uIHR5cGVzLlxuICAgKi9cbiAgc3VwcG9ydGVkVmFsaWRhdG9yczoge1xuICAgIHF1ZXN0aW9uOiBbXCJleHByZXNzaW9uXCJdLFxuICAgIGNvbW1lbnQ6IFtcInRleHRcIiwgXCJyZWdleFwiXSxcbiAgICB0ZXh0OiBbXCJudW1lcmljXCIsIFwidGV4dFwiLCBcInJlZ2V4XCIsIFwiZW1haWxcIl0sXG4gICAgY2hlY2tib3g6IFtcImFuc3dlcmNvdW50XCJdLFxuICAgIGltYWdlcGlja2VyOiBbXCJhbnN3ZXJjb3VudFwiXSxcbiAgfSxcbiAgLyoqXG4gICAqIFNldCB0aGUgdmFsdWUgYXMgc3RyaW5nIFwieXl5eS1tbS1kZFwiLiB0ZXh0IHF1ZXN0aW9ucyB3aXRoIGlucHV0VHlwZSBcImRhdGVcIiB3aWxsIG5vdCBhbGxvdyB0byBzZXQgdG8gc3VydmV5IGRhdGUgdGhhdCBsZXNzIHRoYW4gdGhpcyB2YWx1ZVxuICAgKi9cbiAgbWluRGF0ZTogXCJcIixcbiAgLyoqXG4gICAqIFNldCB0aGUgdmFsdWUgYXMgc3RyaW5nIFwieXl5eS1tbS1kZFwiLiB0ZXh0IHF1ZXN0aW9ucyB3aXRoIGlucHV0VHlwZSBcImRhdGVcIiB3aWxsIG5vdCBhbGxvdyB0byBzZXQgdG8gc3VydmV5IGRhdGUgdGhhdCBncmVhdGVyIHRoYW4gdGhpcyB2YWx1ZVxuICAgKi9cbiAgbWF4RGF0ZTogXCJcIixcbiAgc2hvd01vZGFsOiA8XG4gICAgKFxuICAgICAgY29tcG9uZW50TmFtZTogc3RyaW5nLFxuICAgICAgZGF0YTogYW55LFxuICAgICAgb25BcHBseTogKCkgPT4gYm9vbGVhbixcbiAgICAgIG9uQ2FuY2VsPzogKCkgPT4gdm9pZCxcbiAgICAgIGNzc0NsYXNzPzogc3RyaW5nLFxuICAgICAgdGl0bGU/OiBzdHJpbmcsXG4gICAgICBkaXNwbGF5TW9kZT86IFwicG9wdXBcIiB8IFwib3ZlcmxheVwiXG4gICAgKSA9PiBhbnlcbiAgICA+dW5kZWZpbmVkLFxuICBzdXBwb3J0Q3JlYXRvclYyOiBmYWxzZSxcbiAgc2hvd0RlZmF1bHRJdGVtc0luQ3JlYXRvclYyOiB0cnVlLFxuICAvKipcbiAgICogU3BlY2lmaWVzIGEgbGlzdCBvZiBjdXN0b20gaWNvbnMuXG4gICAqIFVzZSB0aGlzIHByb3BlcnR5IHRvIHJlcGxhY2UgU3VydmV5SlMgZGVmYXVsdCBpY29ucyAoZGlzcGxheWVkIGluIFVJIGVsZW1lbnRzIG9mIFN1cnZleUpTIExpYnJhcnkgb3IgQ3JlYXRvcikgd2l0aCB5b3VyIGN1c3RvbSBpY29ucy5cbiAgICogRm9yIGV2ZXJ5IGRlZmF1bHQgaWNvbiB0byByZXBsYWNlLCBhZGQgYSBrZXkvdmFsdWUgb2JqZWN0IHdpdGggdGhlIGRlZmF1bHQgaWNvbidzIG5hbWUgYXMgYSBrZXkgYW5kIHRoZSBuYW1lIG9mIHlvdXIgY3VzdG9tIGljb24gYXMgYSB2YWx1ZS5cbiAgICogRm9yIGV4YW1wbGU6IFN1cnZleS5zZXR0aW5ncy5jdXN0b21JY29uc1tcImljb24tcmVkb1wiXSA9IFwibXktb3duLXJlZG8taWNvblwiXG4gICAqL1xuICBjdXN0b21JY29uczoge30sXG4gIHRpdGxlVGFnczoge1xuICAgIHN1cnZleTogXCJoM1wiLFxuICAgIHBhZ2U6IFwiaDRcIixcbiAgICBwYW5lbDogXCJoNFwiLFxuICAgIHF1ZXN0aW9uOiBcImg1XCIsXG4gIH0sXG4gIHF1ZXN0aW9uczoge1xuICAgIGlucHV0VHlwZXM6IFtcbiAgICAgIFwiY29sb3JcIixcbiAgICAgIFwiZGF0ZVwiLFxuICAgICAgXCJkYXRldGltZVwiLFxuICAgICAgXCJkYXRldGltZS1sb2NhbFwiLFxuICAgICAgXCJlbWFpbFwiLFxuICAgICAgXCJtb250aFwiLFxuICAgICAgXCJudW1iZXJcIixcbiAgICAgIFwicGFzc3dvcmRcIixcbiAgICAgIFwicmFuZ2VcIixcbiAgICAgIFwidGVsXCIsXG4gICAgICBcInRleHRcIixcbiAgICAgIFwidGltZVwiLFxuICAgICAgXCJ1cmxcIixcbiAgICAgIFwid2Vla1wiLFxuICAgIF0sXG4gICAgZGF0YUxpc3Q6IFtcbiAgICAgIFwibmFtZVwiLFxuICAgICAgXCJob25vcmlmaWMtcHJlZml4XCIsXG4gICAgICBcImdpdmVuLW5hbWVcIixcbiAgICAgIFwiYWRkaXRpb25hbC1uYW1lXCIsXG4gICAgICBcImZhbWlseS1uYW1lXCIsXG4gICAgICBcImhvbm9yaWZpYy1zdWZmaXhcIixcbiAgICAgIFwibmlja25hbWVcIixcbiAgICAgIFwib3JnYW5pemF0aW9uLXRpdGxlXCIsXG4gICAgICBcInVzZXJuYW1lXCIsXG4gICAgICBcIm5ldy1wYXNzd29yZFwiLFxuICAgICAgXCJjdXJyZW50LXBhc3N3b3JkXCIsXG4gICAgICBcIm9yZ2FuaXphdGlvblwiLFxuICAgICAgXCJzdHJlZXQtYWRkcmVzc1wiLFxuICAgICAgXCJhZGRyZXNzLWxpbmUxXCIsXG4gICAgICBcImFkZHJlc3MtbGluZTJcIixcbiAgICAgIFwiYWRkcmVzcy1saW5lM1wiLFxuICAgICAgXCJhZGRyZXNzLWxldmVsNFwiLFxuICAgICAgXCJhZGRyZXNzLWxldmVsM1wiLFxuICAgICAgXCJhZGRyZXNzLWxldmVsMlwiLFxuICAgICAgXCJhZGRyZXNzLWxldmVsMVwiLFxuICAgICAgXCJjb3VudHJ5XCIsXG4gICAgICBcImNvdW50cnktbmFtZVwiLFxuICAgICAgXCJwb3N0YWwtY29kZVwiLFxuICAgICAgXCJjYy1uYW1lXCIsXG4gICAgICBcImNjLWdpdmVuLW5hbWVcIixcbiAgICAgIFwiY2MtYWRkaXRpb25hbC1uYW1lXCIsXG4gICAgICBcImNjLWZhbWlseS1uYW1lXCIsXG4gICAgICBcImNjLW51bWJlclwiLFxuICAgICAgXCJjYy1leHBcIixcbiAgICAgIFwiY2MtZXhwLW1vbnRoXCIsXG4gICAgICBcImNjLWV4cC15ZWFyXCIsXG4gICAgICBcImNjLWNzY1wiLFxuICAgICAgXCJjYy10eXBlXCIsXG4gICAgICBcInRyYW5zYWN0aW9uLWN1cnJlbmN5XCIsXG4gICAgICBcInRyYW5zYWN0aW9uLWFtb3VudFwiLFxuICAgICAgXCJsYW5ndWFnZVwiLFxuICAgICAgXCJiZGF5XCIsXG4gICAgICBcImJkYXktZGF5XCIsXG4gICAgICBcImJkYXktbW9udGhcIixcbiAgICAgIFwiYmRheS15ZWFyXCIsXG4gICAgICBcInNleFwiLFxuICAgICAgXCJ1cmxcIixcbiAgICAgIFwicGhvdG9cIixcbiAgICAgIFwidGVsXCIsXG4gICAgICBcInRlbC1jb3VudHJ5LWNvZGVcIixcbiAgICAgIFwidGVsLW5hdGlvbmFsXCIsXG4gICAgICBcInRlbC1hcmVhLWNvZGVcIixcbiAgICAgIFwidGVsLWxvY2FsXCIsXG4gICAgICBcInRlbC1sb2NhbC1wcmVmaXhcIixcbiAgICAgIFwidGVsLWxvY2FsLXN1ZmZpeFwiLFxuICAgICAgXCJ0ZWwtZXh0ZW5zaW9uXCIsXG4gICAgICBcImVtYWlsXCIsXG4gICAgICBcImltcHBcIixcbiAgICBdXG4gIH1cbn07XG4iLCJpbXBvcnQgeyBzZXRUaW1lb3V0IH0gZnJvbSBcInRpbWVyc1wiO1xuaW1wb3J0IHsgQWN0aW9uIH0gZnJvbSBcIi4uL2FjdGlvbnMvYWN0aW9uXCI7XG5pbXBvcnQgeyBBZGFwdGl2ZUFjdGlvbkNvbnRhaW5lciB9IGZyb20gXCIuLi9hY3Rpb25zL2FkYXB0aXZlLWNvbnRhaW5lclwiO1xuaW1wb3J0IHsgaXNDb250YWluZXJWaXNpYmxlIH0gZnJvbSBcIi4vdXRpbHNcIjtcblxuaW50ZXJmYWNlIElEaW1lbnNpb25zIHtcbiAgc2Nyb2xsOiBudW1iZXI7XG4gIG9mZnNldDogbnVtYmVyO1xufVxuXG5leHBvcnQgY2xhc3MgUmVzcG9uc2l2aXR5TWFuYWdlciB7XG4gIHByaXZhdGUgcmVzaXplT2JzZXJ2ZXI6IFJlc2l6ZU9ic2VydmVyID0gdW5kZWZpbmVkO1xuICBwcml2YXRlIGlzSW5pdGlhbGl6ZWQgPSBmYWxzZTtcbiAgcHJvdGVjdGVkIG1pbkRpbWVuc2lvbkNvbnN0ID0gNTY7XG4gIHByaXZhdGUgc2VwYXJhdG9yU2l6ZSA9IDE3O1xuICBwcml2YXRlIHNlcGFyYXRvckFkZENvbnN0ID0gMTtcbiAgcHJpdmF0ZSBwYWRkaW5nU2l6ZUNvbnN0ID0gODtcbiAgcHJpdmF0ZSBkb3RzU2l6ZUNvbnN0ID0gNDg7XG4gIHByb3RlY3RlZCByZWNhbGNNaW5EaW1lbnNpb25Db25zdCA9IHRydWU7XG5cbiAgcHVibGljIGdldENvbXB1dGVkU3R5bGU6IChcbiAgICBlbHQ6IEVsZW1lbnRcbiAgKSA9PiBDU1NTdHlsZURlY2xhcmF0aW9uID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUuYmluZCh3aW5kb3cpO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByb3RlY3RlZCBjb250YWluZXI6IEhUTUxEaXZFbGVtZW50LFxuICAgIHByaXZhdGUgbW9kZWw6IEFkYXB0aXZlQWN0aW9uQ29udGFpbmVyLFxuICAgIHByaXZhdGUgaXRlbXNTZWxlY3Rvcjogc3RyaW5nLFxuICAgIHByaXZhdGUgZG90c0l0ZW1TaXplOiBudW1iZXIgPSBudWxsLFxuICApIHtcbiAgICB0aGlzLm1vZGVsLnVwZGF0ZUNhbGxiYWNrID0gKGlzUmVzZXRJbml0aWFsaXplZDogYm9vbGVhbikgPT4ge1xuICAgICAgaWYoaXNSZXNldEluaXRpYWxpemVkKVxuICAgICAgICB0aGlzLmlzSW5pdGlhbGl6ZWQgPSBmYWxzZTtcbiAgICAgIGVsc2VcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7IHRoaXMucHJvY2VzcygpOyB9LCAxKTtcbiAgICB9O1xuICAgIGlmICh0eXBlb2YgUmVzaXplT2JzZXJ2ZXIgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgIHRoaXMucmVzaXplT2JzZXJ2ZXIgPSBuZXcgUmVzaXplT2JzZXJ2ZXIoKF8pID0+IHRoaXMucHJvY2VzcygpKTtcbiAgICAgIHRoaXMucmVzaXplT2JzZXJ2ZXIub2JzZXJ2ZSh0aGlzLmNvbnRhaW5lci5wYXJlbnRFbGVtZW50KTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0RGltZW5zaW9ucyhlbGVtZW50OiBIVE1MRWxlbWVudCk6IElEaW1lbnNpb25zIHtcbiAgICByZXR1cm4ge1xuICAgICAgc2Nyb2xsOiBlbGVtZW50LnNjcm9sbFdpZHRoLFxuICAgICAgb2Zmc2V0OiBlbGVtZW50Lm9mZnNldFdpZHRoLFxuICAgIH07XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0QXZhaWxhYmxlU3BhY2UoKTogbnVtYmVyIHtcbiAgICBjb25zdCBzdHlsZTogQ1NTU3R5bGVEZWNsYXJhdGlvbiA9IHRoaXMuZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzLmNvbnRhaW5lcik7XG4gICAgbGV0IHNwYWNlID0gdGhpcy5jb250YWluZXIub2Zmc2V0V2lkdGg7XG4gICAgaWYgKHN0eWxlLmJveFNpemluZyA9PT0gXCJib3JkZXItYm94XCIpIHtcbiAgICAgIHNwYWNlIC09IHBhcnNlRmxvYXQoc3R5bGUucGFkZGluZ0xlZnQpICsgcGFyc2VGbG9hdChzdHlsZS5wYWRkaW5nUmlnaHQpO1xuICAgIH1cbiAgICByZXR1cm4gc3BhY2U7XG4gIH1cblxuICBwcm90ZWN0ZWQgY2FsY0l0ZW1TaXplKGl0ZW06IEhUTUxEaXZFbGVtZW50KTogbnVtYmVyIHtcbiAgICByZXR1cm4gaXRlbS5vZmZzZXRXaWR0aDtcbiAgfVxuXG4gIHByaXZhdGUgY2FsY01pbkRpbWVuc2lvbihjdXJyZW50QWN0aW9uOiBBY3Rpb24pIHtcbiAgICBsZXQgbWluRGltZW5zaW9uQ29uc3QgPSB0aGlzLm1pbkRpbWVuc2lvbkNvbnN0O1xuICAgIGlmKGN1cnJlbnRBY3Rpb24uaWNvblNpemUgJiYgdGhpcy5yZWNhbGNNaW5EaW1lbnNpb25Db25zdCkge1xuICAgICAgbWluRGltZW5zaW9uQ29uc3QgPSAyICogY3VycmVudEFjdGlvbi5pY29uU2l6ZSArIHRoaXMucGFkZGluZ1NpemVDb25zdDtcbiAgICB9XG4gICAgcmV0dXJuIGN1cnJlbnRBY3Rpb24uY2FuU2hyaW5rXG4gICAgICA/IG1pbkRpbWVuc2lvbkNvbnN0ICtcbiAgICAgIChjdXJyZW50QWN0aW9uLm5lZWRTZXBhcmF0b3IgPyB0aGlzLnNlcGFyYXRvclNpemUgOiAwKVxuICAgICAgOiBjdXJyZW50QWN0aW9uLm1heERpbWVuc2lvbjtcbiAgfVxuXG4gIHByaXZhdGUgY2FsY0l0ZW1zU2l6ZXMoKSB7XG4gICAgY29uc3QgYWN0aW9ucyA9IHRoaXMubW9kZWwuYWN0aW9ucztcbiAgICB0aGlzLmNvbnRhaW5lclxuICAgICAgLnF1ZXJ5U2VsZWN0b3JBbGwodGhpcy5pdGVtc1NlbGVjdG9yKVxuICAgICAgLmZvckVhY2goKGl0ZW06IEhUTUxEaXZFbGVtZW50LCBpbmRleDogbnVtYmVyKSA9PiB7XG4gICAgICAgIGxldCBjdXJyZW50QWN0aW9uID0gYWN0aW9uc1tpbmRleF07XG4gICAgICAgIHRoaXMuY2FsY0FjdGlvbkRpbWVuc2lvbnMoY3VycmVudEFjdGlvbiwgaXRlbSk7XG4gICAgICB9KTtcbiAgfVxuICBwcm90ZWN0ZWQgY2FsY0FjdGlvbkRpbWVuc2lvbnMoY3VycmVudEFjdGlvbjogQWN0aW9uLCBpdGVtOiBIVE1MRGl2RWxlbWVudCkge1xuICAgIGN1cnJlbnRBY3Rpb24ubWF4RGltZW5zaW9uID0gdGhpcy5jYWxjSXRlbVNpemUoaXRlbSk7XG4gICAgY3VycmVudEFjdGlvbi5taW5EaW1lbnNpb24gPSB0aGlzLmNhbGNNaW5EaW1lbnNpb24oY3VycmVudEFjdGlvbik7XG4gIH1cbiAgcHJpdmF0ZSBnZXQgaXNDb250YWluZXJWaXNpYmxlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBpc0NvbnRhaW5lclZpc2libGUodGhpcy5jb250YWluZXIpO1xuICB9XG4gIHByaXZhdGUgcHJvY2VzcygpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pc0NvbnRhaW5lclZpc2libGUgJiYgIXRoaXMubW9kZWwuaXNSZXNwb25zaXZlbmVzc0Rpc2FibGVkKSB7XG4gICAgICBpZiAoIXRoaXMuaXNJbml0aWFsaXplZCkge1xuICAgICAgICB0aGlzLm1vZGVsLnNldEFjdGlvbnNNb2RlKFwibGFyZ2VcIik7XG4gICAgICAgIHRoaXMuY2FsY0l0ZW1zU2l6ZXMoKTtcbiAgICAgICAgdGhpcy5pc0luaXRpYWxpemVkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGxldCBkb3RzSXRlbVNpemUgPSB0aGlzLmRvdHNJdGVtU2l6ZTtcbiAgICAgIGlmICghdGhpcy5kb3RzSXRlbVNpemUpIHtcbiAgICAgICAgY29uc3QgZG90c0l0ZW1FbGVtZW50OiBIVE1MRGl2RWxlbWVudCA9IHRoaXMuY29udGFpbmVyPy5xdWVyeVNlbGVjdG9yKFwiLnN2LWRvdHNcIik7XG4gICAgICAgIGRvdHNJdGVtU2l6ZSA9IGRvdHNJdGVtRWxlbWVudCAmJiB0aGlzLmNhbGNJdGVtU2l6ZShkb3RzSXRlbUVsZW1lbnQpIHx8IHRoaXMuZG90c1NpemVDb25zdDtcbiAgICAgIH1cbiAgICAgIHRoaXMubW9kZWwuZml0KHRoaXMuZ2V0QXZhaWxhYmxlU3BhY2UoKSwgZG90c0l0ZW1TaXplKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZGlzcG9zZSgpOiB2b2lkIHtcbiAgICB0aGlzLm1vZGVsLnVwZGF0ZUNhbGxiYWNrID0gdW5kZWZpbmVkO1xuICAgIGlmICghIXRoaXMucmVzaXplT2JzZXJ2ZXIpIHtcbiAgICAgIHRoaXMucmVzaXplT2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgVmVydGljYWxSZXNwb25zaXZpdHlNYW5hZ2VyIGV4dGVuZHMgUmVzcG9uc2l2aXR5TWFuYWdlciB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIGNvbnRhaW5lcjogSFRNTERpdkVsZW1lbnQsXG4gICAgbW9kZWw6IEFkYXB0aXZlQWN0aW9uQ29udGFpbmVyLFxuICAgIGl0ZW1zU2VsZWN0b3I6IHN0cmluZyxcbiAgICBkb3RzSXRlbVNpemU/OiBudW1iZXIsXG4gICAgbWluRGltZW5zaW9uID0gNDBcbiAgKSB7XG4gICAgc3VwZXIoY29udGFpbmVyLCBtb2RlbCwgaXRlbXNTZWxlY3RvciwgZG90c0l0ZW1TaXplKTtcbiAgICB0aGlzLm1pbkRpbWVuc2lvbkNvbnN0ID0gbWluRGltZW5zaW9uO1xuICAgIHRoaXMucmVjYWxjTWluRGltZW5zaW9uQ29uc3QgPSBmYWxzZTtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXREaW1lbnNpb25zKCk6IElEaW1lbnNpb25zIHtcbiAgICByZXR1cm4ge1xuICAgICAgc2Nyb2xsOiB0aGlzLmNvbnRhaW5lci5zY3JvbGxIZWlnaHQsXG4gICAgICBvZmZzZXQ6IHRoaXMuY29udGFpbmVyLm9mZnNldEhlaWdodCxcbiAgICB9O1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldEF2YWlsYWJsZVNwYWNlKCk6IG51bWJlciB7XG4gICAgY29uc3Qgc3R5bGU6IENTU1N0eWxlRGVjbGFyYXRpb24gPSB0aGlzLmdldENvbXB1dGVkU3R5bGUodGhpcy5jb250YWluZXIpO1xuICAgIGxldCBzcGFjZTogbnVtYmVyID0gdGhpcy5jb250YWluZXIub2Zmc2V0SGVpZ2h0O1xuICAgIGlmIChzdHlsZS5ib3hTaXppbmcgPT09IFwiYm9yZGVyLWJveFwiKSB7XG4gICAgICBzcGFjZSAtPSBwYXJzZUZsb2F0KHN0eWxlLnBhZGRpbmdUb3ApICsgcGFyc2VGbG9hdChzdHlsZS5wYWRkaW5nQm90dG9tKTtcbiAgICB9XG4gICAgcmV0dXJuIHNwYWNlO1xuICB9XG5cbiAgcHJvdGVjdGVkIGNhbGNJdGVtU2l6ZShpdGVtOiBIVE1MRGl2RWxlbWVudCk6IG51bWJlciB7XG4gICAgcmV0dXJuIGl0ZW0ub2Zmc2V0SGVpZ2h0O1xuICB9XG4gIHByb3RlY3RlZCBjYWxjQWN0aW9uRGltZW5zaW9ucyhjdXJyZW50QWN0aW9uOiBBY3Rpb24sIGl0ZW06IEhUTUxEaXZFbGVtZW50KSB7XG4gICAgY3VycmVudEFjdGlvbi5tYXhEaW1lbnNpb24gPSB0aGlzLmNhbGNJdGVtU2l6ZShpdGVtKTtcbiAgICBjdXJyZW50QWN0aW9uLm1pbkRpbWVuc2lvbiA9IHRoaXMuY2FsY0l0ZW1TaXplKGl0ZW0pO1xuICB9XG59XG4iLCJpbXBvcnQgeyBzZXR0aW5ncyB9IGZyb20gXCIuLy4uL3NldHRpbmdzXCI7XG5pbXBvcnQgeyBTZXJpYWxpemVyIH0gZnJvbSBcIi4uL2pzb25vYmplY3RcIjtcbmltcG9ydCB7IEJhc2UgfSBmcm9tIFwic3JjL2Jhc2VcIjtcbmZ1bmN0aW9uIGNvbXBhcmVWZXJzaW9ucyhhOiBhbnksIGI6IGFueSkge1xuICBjb25zdCByZWdFeFN0cmlwMDogUmVnRXhwID0gLyhcXC4wKykrJC87XG4gIGNvbnN0IHNlZ21lbnRzQTogc3RyaW5nW10gPSBhLnJlcGxhY2UocmVnRXhTdHJpcDAsIFwiXCIpLnNwbGl0KFwiLlwiKTtcbiAgY29uc3Qgc2VnbWVudHNCOiBzdHJpbmdbXSA9IGIucmVwbGFjZShyZWdFeFN0cmlwMCwgXCJcIikuc3BsaXQoXCIuXCIpO1xuICBjb25zdCBsZW46IG51bWJlciA9IE1hdGgubWluKHNlZ21lbnRzQS5sZW5ndGgsIHNlZ21lbnRzQi5sZW5ndGgpO1xuICBmb3IgKGxldCBpOiBudW1iZXIgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICBjb25zdCBkaWZmOiBudW1iZXIgPVxuICAgICAgcGFyc2VJbnQoc2VnbWVudHNBW2ldLCAxMCkgLSBwYXJzZUludChzZWdtZW50c0JbaV0sIDEwKTtcbiAgICBpZiAoZGlmZikge1xuICAgICAgcmV0dXJuIGRpZmY7XG4gICAgfVxuICB9XG4gIHJldHVybiBzZWdtZW50c0EubGVuZ3RoIC0gc2VnbWVudHNCLmxlbmd0aDtcbn1cbmZ1bmN0aW9uIGNvbmZpcm1BY3Rpb24obWVzc2FnZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gIGlmICghIXNldHRpbmdzICYmICEhc2V0dGluZ3MuY29uZmlybUFjdGlvbkZ1bmMpXG4gICAgcmV0dXJuIHNldHRpbmdzLmNvbmZpcm1BY3Rpb25GdW5jKG1lc3NhZ2UpO1xuICByZXR1cm4gY29uZmlybShtZXNzYWdlKTtcbn1cbmZ1bmN0aW9uIGRldGVjdElFQnJvd3NlcigpIHtcbiAgaWYgKHR5cGVvZiB3aW5kb3cgPT09IFwidW5kZWZpbmVkXCIpIHJldHVybiBmYWxzZTtcbiAgY29uc3QgdWE6IHN0cmluZyA9IHdpbmRvdy5uYXZpZ2F0b3IudXNlckFnZW50O1xuICBjb25zdCBvbGRJZTogbnVtYmVyID0gdWEuaW5kZXhPZihcIk1TSUUgXCIpO1xuICBjb25zdCBlbGV2ZW5JZTogbnVtYmVyID0gdWEuaW5kZXhPZihcIlRyaWRlbnQvXCIpO1xuICByZXR1cm4gb2xkSWUgPiAtMSB8fCBlbGV2ZW5JZSA+IC0xO1xufVxuZnVuY3Rpb24gZGV0ZWN0SUVPckVkZ2UoKSB7XG4gIGlmICh0eXBlb2Ygd2luZG93ID09PSBcInVuZGVmaW5lZFwiKSByZXR1cm4gZmFsc2U7XG4gIGlmICh0eXBlb2YgKDxhbnk+ZGV0ZWN0SUVPckVkZ2UpLmlzSUVPckVkZ2UgPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICBjb25zdCB1YTogc3RyaW5nID0gd2luZG93Lm5hdmlnYXRvci51c2VyQWdlbnQ7XG4gICAgY29uc3QgbXNpZTogbnVtYmVyID0gdWEuaW5kZXhPZihcIk1TSUUgXCIpO1xuICAgIGNvbnN0IHRyaWRlbnQ6IG51bWJlciA9IHVhLmluZGV4T2YoXCJUcmlkZW50L1wiKTtcbiAgICBjb25zdCBlZGdlOiBudW1iZXIgPSB1YS5pbmRleE9mKFwiRWRnZS9cIik7XG4gICAgKDxhbnk+ZGV0ZWN0SUVPckVkZ2UpLmlzSUVPckVkZ2UgPSBlZGdlID4gMCB8fCB0cmlkZW50ID4gMCB8fCBtc2llID4gMDtcbiAgfVxuICByZXR1cm4gKDxhbnk+ZGV0ZWN0SUVPckVkZ2UpLmlzSUVPckVkZ2U7XG59XG5mdW5jdGlvbiBsb2FkRmlsZUZyb21CYXNlNjQoYjY0RGF0YTogc3RyaW5nLCBmaWxlTmFtZTogc3RyaW5nKSB7XG4gIHRyeSB7XG4gICAgY29uc3QgYnl0ZVN0cmluZzogc3RyaW5nID0gYXRvYihiNjREYXRhLnNwbGl0KFwiLFwiKVsxXSk7XG5cbiAgICAvLyBzZXBhcmF0ZSBvdXQgdGhlIG1pbWUgY29tcG9uZW50XG4gICAgY29uc3QgbWltZVN0cmluZzogc3RyaW5nID0gYjY0RGF0YVxuICAgICAgLnNwbGl0KFwiLFwiKVswXVxuICAgICAgLnNwbGl0KFwiOlwiKVsxXVxuICAgICAgLnNwbGl0KFwiO1wiKVswXTtcblxuICAgIC8vIHdyaXRlIHRoZSBieXRlcyBvZiB0aGUgc3RyaW5nIHRvIGFuIEFycmF5QnVmZmVyXG4gICAgY29uc3QgYWI6IEFycmF5QnVmZmVyID0gbmV3IEFycmF5QnVmZmVyKGJ5dGVTdHJpbmcubGVuZ3RoKTtcbiAgICBjb25zdCBpYTogVWludDhBcnJheSA9IG5ldyBVaW50OEFycmF5KGFiKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGJ5dGVTdHJpbmcubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlhW2ldID0gYnl0ZVN0cmluZy5jaGFyQ29kZUF0KGkpO1xuICAgIH1cbiAgICAvLyB3cml0ZSB0aGUgQXJyYXlCdWZmZXIgdG8gYSBibG9iLCBhbmQgeW91J3JlIGRvbmVcbiAgICBjb25zdCBiYjogQmxvYiA9IG5ldyBCbG9iKFthYl0sIHsgdHlwZTogbWltZVN0cmluZyB9KTtcbiAgICBpZiAoXG4gICAgICB0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiICYmXG4gICAgICB3aW5kb3cubmF2aWdhdG9yICYmXG4gICAgICAoPGFueT53aW5kb3cubmF2aWdhdG9yKVtcIm1zU2F2ZUJsb2JcIl1cbiAgICApIHtcbiAgICAgICg8YW55PndpbmRvdy5uYXZpZ2F0b3IpW1wibXNTYXZlT3JPcGVuQmxvYlwiXShiYiwgZmlsZU5hbWUpO1xuICAgIH1cbiAgfSBjYXRjaCAoZXJyKSB7IH1cbn1cbmZ1bmN0aW9uIGlzTW9iaWxlKCkge1xuICByZXR1cm4gKFxuICAgIHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgJiYgdHlwZW9mIHdpbmRvdy5vcmllbnRhdGlvbiAhPT0gXCJ1bmRlZmluZWRcIlxuICApO1xufVxuXG5mdW5jdGlvbiBpc0VsZW1lbnRWaXNpYmxlKFxuICBlbGVtZW50OiBIVE1MRWxlbWVudCxcbiAgdGhyZXNob2xkOiBudW1iZXIgPSAwXG4pOiBib29sZWFuIHtcbiAgaWYgKHR5cGVvZiBkb2N1bWVudCA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBjb25zdCBlbGVtZW50UmVjdDogRE9NUmVjdCA9IGVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gIGNvbnN0IHZpZXdIZWlnaHQ6IG51bWJlciA9IE1hdGgubWF4KFxuICAgIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQsXG4gICAgd2luZG93LmlubmVySGVpZ2h0XG4gICk7XG4gIGNvbnN0IHRvcFdpbjogbnVtYmVyID0gLXRocmVzaG9sZDtcbiAgY29uc3QgYm90dG9tV2luOiBudW1iZXIgPSB2aWV3SGVpZ2h0ICsgdGhyZXNob2xkO1xuICBjb25zdCB0b3BFbDogbnVtYmVyID0gZWxlbWVudFJlY3QudG9wO1xuICBjb25zdCBib3R0b21FbDogbnVtYmVyID0gZWxlbWVudFJlY3QuYm90dG9tO1xuXG4gIGNvbnN0IG1heFRvcDogbnVtYmVyID0gTWF0aC5tYXgodG9wV2luLCB0b3BFbCk7XG4gIGNvbnN0IG1pbkJvdHRvbTogbnVtYmVyID0gTWF0aC5taW4oYm90dG9tV2luLCBib3R0b21FbCk7XG4gIHJldHVybiBtYXhUb3AgPD0gbWluQm90dG9tO1xufVxuXG5mdW5jdGlvbiBmaW5kU2Nyb2xsYWJsZVBhcmVudChlbGVtZW50OiBIVE1MRWxlbWVudCk6IEhUTUxFbGVtZW50IHtcbiAgaWYgKCFlbGVtZW50KSB7XG4gICAgcmV0dXJuIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcbiAgfVxuICBpZiAoXG4gICAgZWxlbWVudC5zY3JvbGxIZWlnaHQgPiBlbGVtZW50LmNsaWVudEhlaWdodCAmJlxuICAgIChnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpLm92ZXJmbG93WSA9PT0gXCJzY3JvbGxcIiB8fFxuICAgICAgZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KS5vdmVyZmxvd1kgPT09IFwiYXV0b1wiKVxuICApIHtcbiAgICByZXR1cm4gZWxlbWVudDtcbiAgfVxuXG4gIGlmIChcbiAgICBlbGVtZW50LnNjcm9sbFdpZHRoID4gZWxlbWVudC5jbGllbnRXaWR0aCAmJlxuICAgIChnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpLm92ZXJmbG93WCA9PT0gXCJzY3JvbGxcIiB8fFxuICAgICAgZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KS5vdmVyZmxvd1ggPT09IFwiYXV0b1wiKVxuICApIHtcbiAgICByZXR1cm4gZWxlbWVudDtcbiAgfVxuXG4gIHJldHVybiBmaW5kU2Nyb2xsYWJsZVBhcmVudChlbGVtZW50LnBhcmVudEVsZW1lbnQpO1xufVxuXG5mdW5jdGlvbiBzY3JvbGxFbGVtZW50QnlDaGlsZElkKGlkOiBzdHJpbmcpIHtcbiAgaWYgKCFkb2N1bWVudCkgcmV0dXJuO1xuICBjb25zdCBlbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKTtcbiAgaWYgKCFlbCkgcmV0dXJuO1xuICBjb25zdCBzY3JvbGxhYmxlRWwgPSBmaW5kU2Nyb2xsYWJsZVBhcmVudChlbCk7XG4gIGlmICghIXNjcm9sbGFibGVFbCkge1xuICAgIHNjcm9sbGFibGVFbC5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudChcInNjcm9sbFwiKSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0SWNvbk5hbWVGcm9tUHJveHkoaWNvbk5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gIGlmICghaWNvbk5hbWUpIHJldHVybiBpY29uTmFtZTtcbiAgdmFyIHByb3h5TmFtZSA9ICg8YW55PnNldHRpbmdzLmN1c3RvbUljb25zKVtpY29uTmFtZV07XG4gIHJldHVybiAhIXByb3h5TmFtZSA/IHByb3h5TmFtZSA6IGljb25OYW1lO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVTdmcoXG4gIHNpemU6IG51bWJlciB8IHN0cmluZyxcbiAgd2lkdGg6IG51bWJlcixcbiAgaGVpZ2h0OiBudW1iZXIsXG4gIGljb25OYW1lOiBzdHJpbmcsXG4gIHN2Z0VsZW06IGFueSxcbiAgdGl0bGU6IHN0cmluZ1xuKTogdm9pZCB7XG4gIGlmICghc3ZnRWxlbSkgcmV0dXJuO1xuICBpZiAoc2l6ZSAhPT0gXCJhdXRvXCIpIHtcbiAgICBzdmdFbGVtLnN0eWxlLndpZHRoID0gKHNpemUgfHwgd2lkdGggfHwgMTYpICsgXCJweFwiO1xuICAgIHN2Z0VsZW0uc3R5bGUuaGVpZ2h0ID0gKHNpemUgfHwgaGVpZ2h0IHx8IDE2KSArIFwicHhcIjtcbiAgfVxuICBjb25zdCBub2RlOiBhbnkgPSBzdmdFbGVtLmNoaWxkTm9kZXNbMF07XG4gIGNvbnN0IHJlYWxJY29uTmFtZSA9IGdldEljb25OYW1lRnJvbVByb3h5KGljb25OYW1lKTtcbiAgbm9kZS5zZXRBdHRyaWJ1dGVOUyhcbiAgICBcImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmtcIixcbiAgICBcInhsaW5rOmhyZWZcIixcbiAgICBcIiNcIiArIHJlYWxJY29uTmFtZVxuICApO1xuXG4gIGxldCB0aXRsZUVsZW1lbnQgPSBzdmdFbGVtLmdldEVsZW1lbnRzQnlUYWdOYW1lKFwidGl0bGVcIilbMF07XG4gIGlmKCF0aXRsZSkge1xuICAgIGlmKCEhdGl0bGVFbGVtZW50KSB7XG4gICAgICBzdmdFbGVtLnJlbW92ZUNoaWxkKHRpdGxlRWxlbWVudCk7XG4gICAgfVxuICAgIHJldHVybjtcbiAgfSBlbHNlIHtcbiAgICBpZiAoIXRpdGxlRWxlbWVudCkge1xuICAgICAgdGl0bGVFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiwgXCJ0aXRsZVwiKTtcbiAgICAgIHN2Z0VsZW0uYXBwZW5kQ2hpbGQodGl0bGVFbGVtZW50KTtcbiAgICB9XG4gIH1cbiAgdGl0bGVFbGVtZW50LnRleHRDb250ZW50ID0gdGl0bGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1bndyYXA8VD4odmFsdWU6IFQgfCAoKCkgPT4gVCkpOiBUIHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiAoPCgpID0+IFQ+dmFsdWUpKCk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFNpemUodmFsdWU6IGFueSkge1xuICBpZiAodHlwZW9mIHZhbHVlID09PSBcIm51bWJlclwiKSB7XG4gICAgcmV0dXJuIFwiXCIgKyB2YWx1ZSArIFwicHhcIjtcbiAgfVxuICBpZiAoISF2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIgJiYgdmFsdWUubGVuZ3RoID4gMCkge1xuICAgIGNvbnN0IGxhc3RTeW1ib2w6IHN0cmluZyA9IHZhbHVlW3ZhbHVlLmxlbmd0aCAtIDFdO1xuICAgIGlmICgobGFzdFN5bWJvbCA+PSBcIjBcIiAmJiBsYXN0U3ltYm9sIDw9IFwiOVwiKSB8fCBsYXN0U3ltYm9sID09IFwiLlwiKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBudW06IG51bWJlciA9IHBhcnNlRmxvYXQodmFsdWUpO1xuICAgICAgICByZXR1cm4gXCJcIiArIG51bSArIFwicHhcIjtcbiAgICAgIH0gY2F0Y2ggeyB9XG4gICAgfVxuICB9XG4gIHJldHVybiB2YWx1ZTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJQXR0YWNoS2V5MmNsaWNrT3B0aW9ucyB7XG4gIHByb2Nlc3NFc2M/OiBib29sZWFuO1xuICBkaXNhYmxlVGFiU3RvcD86IGJvb2xlYW47XG59XG5cbmNvbnN0IGtleUZvY3VzZWRDbGFzc05hbWUgPSBcInN2LWZvY3VzZWQtLWJ5LWtleVwiO1xuZXhwb3J0IGZ1bmN0aW9uIGRvS2V5MkNsaWNrQmx1cihldnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgY29uc3QgZWxlbWVudDogYW55ID0gZXZ0LnRhcmdldDtcbiAgaWYgKCFlbGVtZW50IHx8ICFlbGVtZW50LmNsYXNzTGlzdCkgcmV0dXJuO1xuICBlbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoa2V5Rm9jdXNlZENsYXNzTmFtZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkb0tleTJDbGlja1VwKGV2dDogS2V5Ym9hcmRFdmVudCwgb3B0aW9ucz86IElBdHRhY2hLZXkyY2xpY2tPcHRpb25zKTogdm9pZCB7XG4gIGlmICghIWV2dC50YXJnZXQgJiYgKDxhbnk+ZXZ0LnRhcmdldClbXCJjb250ZW50RWRpdGFibGVcIl0gPT09IFwidHJ1ZVwiKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGNvbnN0IGVsZW1lbnQ6IGFueSA9IGV2dC50YXJnZXQ7XG4gIGlmICghZWxlbWVudCkgcmV0dXJuO1xuICBjb25zdCBjaGFyOiBudW1iZXIgPSBldnQud2hpY2ggfHwgZXZ0LmtleUNvZGU7XG4gIGlmIChjaGFyID09PSA5KSB7XG4gICAgaWYgKCEhZWxlbWVudC5jbGFzc0xpc3QgJiYgIWVsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKGtleUZvY3VzZWRDbGFzc05hbWUpKSB7XG4gICAgICBlbGVtZW50LmNsYXNzTGlzdC5hZGQoa2V5Rm9jdXNlZENsYXNzTmFtZSk7XG4gICAgfVxuICB9IGVsc2UgaWYgKGNoYXIgPT09IDEzIHx8IGNoYXIgPT09IDMyKSB7XG4gICAgaWYgKGVsZW1lbnQuY2xpY2spIGVsZW1lbnQuY2xpY2soKTtcbiAgfSBlbHNlIGlmICgoIW9wdGlvbnMgfHwgb3B0aW9ucy5wcm9jZXNzRXNjKSAmJiBjaGFyID09PSAyNykge1xuICAgIGlmIChlbGVtZW50LmJsdXIpIGVsZW1lbnQuYmx1cigpO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkb0tleTJDbGlja0Rvd24oZXZ0OiBLZXlib2FyZEV2ZW50LCBvcHRpb25zOiBJQXR0YWNoS2V5MmNsaWNrT3B0aW9ucyA9IHsgcHJvY2Vzc0VzYzogdHJ1ZSB9KTogdm9pZCB7XG4gIGlmICghIWV2dC50YXJnZXQgJiYgKDxhbnk+ZXZ0LnRhcmdldClbXCJjb250ZW50RWRpdGFibGVcIl0gPT09IFwidHJ1ZVwiKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIHZhciBjaGFyID0gZXZ0LndoaWNoIHx8IGV2dC5rZXlDb2RlO1xuICBjb25zdCBzdXBwb3J0ZWRDb2RlcyA9IFsxMywgMzJdO1xuICBpZiAob3B0aW9ucy5wcm9jZXNzRXNjKSB7XG4gICAgc3VwcG9ydGVkQ29kZXMucHVzaCgyNyk7XG4gIH1cbiAgaWYgKHN1cHBvcnRlZENvZGVzLmluZGV4T2YoY2hhcikgIT09IC0xKSB7XG4gICAgZXZ0LnByZXZlbnREZWZhdWx0KCk7XG4gIH1cbn1cbmZ1bmN0aW9uIGluY3JlYXNlSGVpZ2h0QnlDb250ZW50KGVsZW1lbnQ6IEhUTUxFbGVtZW50LCBnZXRDb21wdXRlZFN0eWxlPzogKGVsdDogRWxlbWVudCkgPT4gYW55KSB7XG4gIGlmICghZWxlbWVudCkgcmV0dXJuO1xuICBpZiAoIWdldENvbXB1dGVkU3R5bGUpIGdldENvbXB1dGVkU3R5bGUgPSAoZWx0OiBFbGVtZW50KSA9PiB7IHJldHVybiB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShlbHQpOyB9O1xuXG4gIGNvbnN0IHN0eWxlID0gZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KTtcbiAgZWxlbWVudC5zdHlsZS5oZWlnaHQgPSBcImF1dG9cIjtcbiAgZWxlbWVudC5zdHlsZS5oZWlnaHQgPSAoZWxlbWVudC5zY3JvbGxIZWlnaHQgKyBwYXJzZUZsb2F0KHN0eWxlLmJvcmRlclRvcFdpZHRoKSArIHBhcnNlRmxvYXQoc3R5bGUuYm9yZGVyQm90dG9tV2lkdGgpKSArIFwicHhcIjtcbn1cbmZ1bmN0aW9uIGdldE9yaWdpbmFsRXZlbnQoZXZlbnQ6IGFueSkge1xuICByZXR1cm4gZXZlbnQub3JpZ2luYWxFdmVudCB8fCBldmVudDtcbn1cbmZ1bmN0aW9uIHByZXZlbnREZWZhdWx0cyhldmVudDogYW55KSB7XG4gIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xufVxuZnVuY3Rpb24gY2xhc3Nlc1RvU2VsZWN0b3Ioc3RyOiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCByZSA9IC9cXHMqPyhbXFx3LV0rKVxccyo/L2c7XG4gIHJldHVybiBzdHIucmVwbGFjZShyZSwgXCIuJDFcIik7XG59XG5cbmZ1bmN0aW9uIGdldEVsZW1lbnRXaWR0aChlbDogSFRNTEVsZW1lbnQpIHtcbiAgcmV0dXJuICEhZ2V0Q29tcHV0ZWRTdHlsZSA/IE51bWJlci5wYXJzZUZsb2F0KGdldENvbXB1dGVkU3R5bGUoZWwpLndpZHRoKSA6IGVsLm9mZnNldFdpZHRoO1xufVxuXG5mdW5jdGlvbiBpc0NvbnRhaW5lclZpc2libGUoZWw6IEhUTUxFbGVtZW50KSB7XG4gIHJldHVybiAhIShcbiAgICBlbC5vZmZzZXRXaWR0aCB8fFxuICAgIGVsLm9mZnNldEhlaWdodCB8fFxuICAgIGVsLmdldENsaWVudFJlY3RzKCkubGVuZ3RoXG4gICk7XG59XG5cbmZ1bmN0aW9uIGZpbmRQYXJlbnRCeUNsYXNzTmFtZXMoZWxlbWVudDogSFRNTEVsZW1lbnQsIGNsYXNzTmFtZXM6IEFycmF5PHN0cmluZz4pOiBFbGVtZW50IHtcbiAgaWYgKCEhZWxlbWVudCkge1xuICAgIGlmIChjbGFzc05hbWVzLmV2ZXJ5KGNsYXNzTmFtZSA9PiAhY2xhc3NOYW1lIHx8IGVsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKGNsYXNzTmFtZSkpKSB7XG4gICAgICByZXR1cm4gZWxlbWVudDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGZpbmRQYXJlbnRCeUNsYXNzTmFtZXMoZWxlbWVudC5wYXJlbnRFbGVtZW50LCBjbGFzc05hbWVzKTtcbiAgICB9XG4gIH1cbn1cbmV4cG9ydCBmdW5jdGlvbiBzYW5pdGl6ZUVkaXRhYmxlQ29udGVudChlbGVtZW50OiBhbnkpIHtcbiAgaWYgKHdpbmRvdy5nZXRTZWxlY3Rpb24gJiYgZG9jdW1lbnQuY3JlYXRlUmFuZ2UgJiYgZWxlbWVudC5jaGlsZE5vZGVzLmxlbmd0aCA+IDApIHtcbiAgICBjb25zdCBzZWxlY3Rpb24gPSBkb2N1bWVudC5nZXRTZWxlY3Rpb24oKTtcblxuICAgIGxldCByYW5nZSA9IHNlbGVjdGlvbi5nZXRSYW5nZUF0KDApO1xuICAgIHJhbmdlLnNldFN0YXJ0KHJhbmdlLmVuZENvbnRhaW5lciwgcmFuZ2UuZW5kT2Zmc2V0KTtcbiAgICByYW5nZS5zZXRFbmRBZnRlcihlbGVtZW50Lmxhc3RDaGlsZCk7XG4gICAgc2VsZWN0aW9uLnJlbW92ZUFsbFJhbmdlcygpO1xuICAgIHNlbGVjdGlvbi5hZGRSYW5nZShyYW5nZSk7XG4gICAgY29uc3QgdGFpbF9sZW4gPSBzZWxlY3Rpb24udG9TdHJpbmcoKS5yZXBsYWNlKC9cXG4vZywgXCJcIikubGVuZ3RoO1xuXG4gICAgZWxlbWVudC5pbm5lclRleHQgPSBlbGVtZW50LmlubmVyVGV4dC5yZXBsYWNlKC9cXG4vZywgXCJcIik7XG4gICAgcmFuZ2UgPSBkb2N1bWVudC5jcmVhdGVSYW5nZSgpO1xuICAgIHJhbmdlLnNldFN0YXJ0KGVsZW1lbnQuY2hpbGROb2Rlc1swXSwgZWxlbWVudC5pbm5lclRleHQubGVuZ3RoIC0gdGFpbF9sZW4pO1xuICAgIHJhbmdlLmNvbGxhcHNlKHRydWUpO1xuICAgIHNlbGVjdGlvbi5yZW1vdmVBbGxSYW5nZXMoKTtcbiAgICBzZWxlY3Rpb24uYWRkUmFuZ2UocmFuZ2UpO1xuICB9XG59XG5mdW5jdGlvbiBtZXJnZVZhbHVlcyhzcmM6IGFueSwgZGVzdDogYW55KSB7XG4gIGlmICghZGVzdCB8fCAhc3JjKSByZXR1cm47XG4gIGlmICh0eXBlb2YgZGVzdCAhPT0gXCJvYmplY3RcIikgcmV0dXJuO1xuICBmb3IgKHZhciBrZXkgaW4gc3JjKSB7XG4gICAgdmFyIHZhbHVlID0gc3JjW2tleV07XG4gICAgaWYgKHZhbHVlICYmIHR5cGVvZiB2YWx1ZSA9PT0gXCJvYmplY3RcIikge1xuICAgICAgaWYgKCFkZXN0W2tleV0gfHwgdHlwZW9mIGRlc3Rba2V5XSAhPT0gXCJvYmplY3RcIikgZGVzdFtrZXldID0ge307XG4gICAgICBtZXJnZVZhbHVlcyh2YWx1ZSwgZGVzdFtrZXldKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZGVzdFtrZXldID0gdmFsdWU7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCB7XG4gIG1lcmdlVmFsdWVzLFxuICBnZXRFbGVtZW50V2lkdGgsXG4gIGlzQ29udGFpbmVyVmlzaWJsZSxcbiAgY2xhc3Nlc1RvU2VsZWN0b3IsXG4gIGNvbXBhcmVWZXJzaW9ucyxcbiAgY29uZmlybUFjdGlvbixcbiAgZGV0ZWN0SUVPckVkZ2UsXG4gIGRldGVjdElFQnJvd3NlcixcbiAgbG9hZEZpbGVGcm9tQmFzZTY0LFxuICBpc01vYmlsZSxcbiAgaXNFbGVtZW50VmlzaWJsZSxcbiAgZmluZFNjcm9sbGFibGVQYXJlbnQsXG4gIHNjcm9sbEVsZW1lbnRCeUNoaWxkSWQsXG4gIGNyZWF0ZVN2ZyxcbiAgZ2V0SWNvbk5hbWVGcm9tUHJveHksXG4gIGluY3JlYXNlSGVpZ2h0QnlDb250ZW50LFxuICBnZXRPcmlnaW5hbEV2ZW50LFxuICBwcmV2ZW50RGVmYXVsdHMsXG4gIGZpbmRQYXJlbnRCeUNsYXNzTmFtZXNcbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IF9fV0VCUEFDS19FWFRFUk5BTF9NT0RVTEVfcmVhY3RfXzsiLCJtb2R1bGUuZXhwb3J0cyA9IF9fV0VCUEFDS19FWFRFUk5BTF9NT0RVTEVfcmVhY3RfZG9tX187IiwibW9kdWxlLmV4cG9ydHMgPSBfX1dFQlBBQ0tfRVhURVJOQUxfTU9EVUxFX3N1cnZleV9jb3JlX187Il0sInNvdXJjZVJvb3QiOiIifQ==
|