openstack-uicore-foundation 3.0.83 → 3.0.84
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/lib/components.js +8 -6
- package/lib/utils/questions-set.js +4 -4
- package/package.json +1 -1
package/lib/components.js
CHANGED
|
@@ -1128,7 +1128,8 @@ const ExtraQuestionsForm = ({
|
|
|
1128
1128
|
}, q.mandatory ? (_q$label4 = q.label) !== null && _q$label4 !== void 0 && _q$label4.endsWith('</p>') ? q.label.replace(/<\/p>$/g, " <b>*</b></p>") : `${q.label} <b>*</b>` : q.label), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
|
|
1129
1129
|
className: questionControlContainerClassName
|
|
1130
1130
|
}, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_final_form__WEBPACK_IMPORTED_MODULE_8__["Field"], {
|
|
1131
|
-
name: q.name
|
|
1131
|
+
name: q.name,
|
|
1132
|
+
type: "radio"
|
|
1132
1133
|
}, props => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_inputs_radio_list__WEBPACK_IMPORTED_MODULE_5__["default"], {
|
|
1133
1134
|
name: q.name,
|
|
1134
1135
|
id: `${q.id}`,
|
|
@@ -1192,7 +1193,8 @@ const ExtraQuestionsForm = ({
|
|
|
1192
1193
|
className: questionLabelContainerClassName
|
|
1193
1194
|
}, q.mandatory ? (_q$label6 = q.label) !== null && _q$label6 !== void 0 && _q$label6.endsWith('</p>') ? q.label.replace(/<\/p>$/g, " <b>*</b></p>") : `${q.label} <b>*</b>` : q.label), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_final_form__WEBPACK_IMPORTED_MODULE_8__["Field"], {
|
|
1194
1195
|
name: q.name,
|
|
1195
|
-
className: questionControlContainerClassName
|
|
1196
|
+
className: questionControlContainerClassName,
|
|
1197
|
+
type: "radio"
|
|
1196
1198
|
}, props => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_inputs_checkbox_list__WEBPACK_IMPORTED_MODULE_6__["default"], {
|
|
1197
1199
|
id: `${q.id}`,
|
|
1198
1200
|
name: q.name,
|
|
@@ -10691,9 +10693,9 @@ class QuestionsSet {
|
|
|
10691
10693
|
let userAnswer = (_this$originalAnswers = this.originalAnswers.find(a => a.question_id === question.id)) === null || _this$originalAnswers === void 0 ? void 0 : _this$originalAnswers.value;
|
|
10692
10694
|
|
|
10693
10695
|
if (userAnswer) {
|
|
10694
|
-
if (question.type === CheckBoxQuestionType) userAnswer = userAnswer === 'false' ? false : !!userAnswer;
|
|
10695
|
-
|
|
10696
|
-
if (question.type === CheckBoxListQuestionType) userAnswer = userAnswer.split(',').map(ansVal =>
|
|
10696
|
+
if (question.type === CheckBoxQuestionType) userAnswer = userAnswer === 'false' ? false : !!userAnswer; //if (question.type === RadioButtonListQuestionType || question.type === ComboBoxQuestionType) userAnswer = userAnswer;
|
|
10697
|
+
|
|
10698
|
+
if (question.type === CheckBoxListQuestionType) userAnswer = userAnswer.split(',').map(ansVal => ansVal) || [];
|
|
10697
10699
|
}
|
|
10698
10700
|
|
|
10699
10701
|
res[question.name] = userAnswer || '';
|
|
@@ -11139,4 +11141,4 @@ module.exports = require("video.js/dist/video-js.css");
|
|
|
11139
11141
|
|
|
11140
11142
|
/******/ });
|
|
11141
11143
|
});
|
|
11142
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vd2VicGFjay91bml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi93ZWJwYWNrL2Jvb3RzdHJhcCIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vLi9zcmMvY29tcG9uZW50cy5qcyIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vLi9zcmMvY29tcG9uZW50cy9hamF4bG9hZGVyL2luZGV4LmpzIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi8uL3NyYy9jb21wb25lbnRzL2F0dGVuZGFuY2UtdHJhY2tlci5qcyIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vLi9zcmMvY29tcG9uZW50cy9jaXJjbGUtYnV0dG9uL2luZGV4LmpzIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi8uL3NyYy9jb21wb25lbnRzL2NpcmNsZS1idXR0b24vaW5kZXgubW9kdWxlLnNjc3M/NGMyNiIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vLi9zcmMvY29tcG9uZW50cy9jbG9jay5qcyIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vLi9zcmMvY29tcG9uZW50cy9leGNsdXNpdmUtd3JhcHBlci5qcyIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vLi9zcmMvY29tcG9uZW50cy9leHRyYS1xdWVzdGlvbnMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uLy4vc3JjL2NvbXBvbmVudHMvZm9ybXMvcnN2cC1mb3JtLmpzIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi8uL3NyYy9jb21wb25lbnRzL2Zvcm1zL3NpbXBsZS1mb3JtLmpzIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi8uL3NyYy9jb21wb25lbnRzL2ZyYWdtZW4tcGFyc2VyLmpzIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi8uL3NyYy9jb21wb25lbnRzL2ZyZWUtdGV4dC1zZWFyY2gvaW5kZXguanMiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uLy4vc3JjL2NvbXBvbmVudHMvZ29vZ2xlLW1hcC9pbmRleC5qcyIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vLi9zcmMvY29tcG9uZW50cy9pbnB1dHMvYWNjZXNzLWxldmVscy1pbnB1dC5qcyIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vLi9zcmMvY29tcG9uZW50cy9pbnB1dHMvYWN0aW9uLWRyb3Bkb3duL2FjdGlvbi1kcm9wZG93bi5sZXNzP2Q3NDMiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uLy4vc3JjL2NvbXBvbmVudHMvaW5wdXRzL2FjdGlvbi1kcm9wZG93bi9pbmRleC5qcyIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vLi9zcmMvY29tcG9uZW50cy9pbnB1dHMvY2hlY2tib3gtbGlzdC5qcyIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vLi9zcmMvY29tcG9uZW50cy9pbnB1dHMvY29tcGFueS1pbnB1dC5qcyIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vLi9zcmMvY29tcG9uZW50cy9pbnB1dHMvY291bnRyeS1kcm9wZG93bi5qcyIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vLi9zcmMvY29tcG9uZW50cy9pbnB1dHMvY291bnRyeS1pbnB1dC5qcyIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vLi9zcmMvY29tcG9uZW50cy9pbnB1dHMvZGF0ZXRpbWVwaWNrZXIvZGF0ZXRpbWVwaWNrZXIubGVzcz84Y2Q1Iiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi8uL3NyYy9jb21wb25lbnRzL2lucHV0cy9kYXRldGltZXBpY2tlci9pbmRleC5qcyIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vLi9zcmMvY29tcG9uZW50cy9pbnB1dHMvZHJvcGRvd24uanMiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uLy4vc3JjL2NvbXBvbmVudHMvaW5wdXRzL2VkaXRvci1pbnB1dC5qcyIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vLi9zcmMvY29tcG9uZW50cy9pbnB1dHMvZXZlbnQtaW5wdXQuanMiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uLy4vc3JjL2NvbXBvbmVudHMvaW5wdXRzL2ZyZWUtbXVsdGktdGV4dC1pbnB1dC5qcyIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vLi9zcmMvY29tcG9uZW50cy9pbnB1dHMvZ3JvdXAtaW5wdXQuanMiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uLy4vc3JjL2NvbXBvbmVudHMvaW5wdXRzL2dyb3VwZWQtZHJvcGRvd24vT3B0aW9uR3JvdXAuanMiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uLy4vc3JjL2NvbXBvbmVudHMvaW5wdXRzL2dyb3VwZWQtZHJvcGRvd24vaW5kZXguanMiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uLy4vc3JjL2NvbXBvbmVudHMvaW5wdXRzL2dyb3VwZWQtZHJvcGRvd24vb3B0aW9uZ3JvdXAubGVzcz9hNDAxIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi8uL3NyYy9jb21wb25lbnRzL2lucHV0cy9sYW5ndWFnZS1pbnB1dC5qcyIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vLi9zcmMvY29tcG9uZW50cy9pbnB1dHMvbWVtYmVyLWlucHV0LmpzIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi8uL3NyYy9jb21wb25lbnRzL2lucHV0cy9vcmdhbml6YXRpb24taW5wdXQuanMiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uLy4vc3JjL2NvbXBvbmVudHMvaW5wdXRzL3JhZGlvLWxpc3QuanMiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uLy4vc3JjL2NvbXBvbmVudHMvaW5wdXRzL3JlZ2lzdHJhdGlvbi1jb21wYW55LWlucHV0LmpzIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi8uL3NyYy9jb21wb25lbnRzL2lucHV0cy9zcGVha2VyLWlucHV0LmpzIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi8uL3NyYy9jb21wb25lbnRzL2lucHV0cy9zcG9uc29yLWlucHV0LmpzIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi8uL3NyYy9jb21wb25lbnRzL2lucHV0cy9zdW1taXQtaW5wdXQuanMiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uLy4vc3JjL2NvbXBvbmVudHMvaW5wdXRzL3RhZy1pbnB1dC5qcyIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vLi9zcmMvY29tcG9uZW50cy9pbnB1dHMvdGV4dC1pbnB1dC5qcyIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vLi9zcmMvY29tcG9uZW50cy9pbnB1dHMvdGV4dGFyZWEtaW5wdXQuanMiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uLy4vc3JjL2NvbXBvbmVudHMvaW5wdXRzL3RpY2tldC10eXBlcy1pbnB1dC5qcyIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vLi9zcmMvY29tcG9uZW50cy9pbnB1dHMvdXBsb2FkLWlucHV0LXYyL2Ryb3B6b25lLmpzIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi8uL3NyYy9jb21wb25lbnRzL2lucHV0cy91cGxvYWQtaW5wdXQtdjIvaWNvbi5qcyIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vLi9zcmMvY29tcG9uZW50cy9pbnB1dHMvdXBsb2FkLWlucHV0LXYyL2luZGV4LmpzIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi8uL3NyYy9jb21wb25lbnRzL2lucHV0cy91cGxvYWQtaW5wdXQtdjIvaW5kZXgubGVzcz9hZDBlIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi8uL3NyYy9jb21wb25lbnRzL2lucHV0cy91cGxvYWQtaW5wdXQvZmlsZS5wbmciLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uLy4vc3JjL2NvbXBvbmVudHMvaW5wdXRzL3VwbG9hZC1pbnB1dC9pbmRleC5qcyIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vLi9zcmMvY29tcG9uZW50cy9pbnB1dHMvdXBsb2FkLWlucHV0L2pwZy5wbmciLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uLy4vc3JjL2NvbXBvbmVudHMvaW5wdXRzL3VwbG9hZC1pbnB1dC9tb3YucG5nIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi8uL3NyYy9jb21wb25lbnRzL2lucHV0cy91cGxvYWQtaW5wdXQvbXA0LnBuZyIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vLi9zcmMvY29tcG9uZW50cy9pbnB1dHMvdXBsb2FkLWlucHV0L3BkZi5wbmciLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uLy4vc3JjL2NvbXBvbmVudHMvaW5wdXRzL3VwbG9hZC1pbnB1dC91cGxvYWQubGVzcz80NjNmIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi8uL3NyYy9jb21wb25lbnRzL3Jhdy1odG1sL2luZGV4LmpzIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi8uL3NyYy9jb21wb25lbnRzL3NlY3Rpb25zL3BhbmVsLmpzIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi8uL3NyYy9jb21wb25lbnRzL3NlY3VyaXR5L2Fic3RyYWN0LWF1dGgtY2FsbGJhY2stcm91dGUuanMiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uLy4vc3JjL2NvbXBvbmVudHMvc2VjdXJpdHkvYWN0aW9ucy5qcyIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vLi9zcmMvY29tcG9uZW50cy9zZWN1cml0eS9tZXRob2RzLmpzIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi8uL3NyYy9jb21wb25lbnRzL3NlY3VyaXR5L3Nlc3Npb24tY2hlY2tlci9vcC1zZXNzaW9uLWNoZWNrZXIuanMiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uLy4vc3JjL2NvbXBvbmVudHMvc2ltcGxlLWxpbmstbGlzdC9pbmRleC5qcyIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vLi9zcmMvY29tcG9uZW50cy9zaW1wbGUtbGluay1saXN0L3NpbXBsZS1saW5rLWxpc3QubGVzcz8xYzlkIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi8uL3NyYy9jb21wb25lbnRzL3N1bW1pdC1kcm9wZG93bi9pbmRleC5qcyIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vLi9zcmMvY29tcG9uZW50cy9zdW1taXQtZHJvcGRvd24vc3VtbWl0LWRyb3Bkb3duLmxlc3M/ZThiNSIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vLi9zcmMvY29tcG9uZW50cy90YWJsZS1lZGl0YWJsZS9FZGl0YWJsZUFjdGlvbnNUYWJsZUNlbGwuanMiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uLy4vc3JjL2NvbXBvbmVudHMvdGFibGUtZWRpdGFibGUvRWRpdGFibGVUYWJsZS5qcyIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vLi9zcmMvY29tcG9uZW50cy90YWJsZS1lZGl0YWJsZS9FZGl0YWJsZVRhYmxlQ2VsbC5qcyIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vLi9zcmMvY29tcG9uZW50cy90YWJsZS1lZGl0YWJsZS9FZGl0YWJsZVRhYmxlSGVhZGluZy5qcyIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vLi9zcmMvY29tcG9uZW50cy90YWJsZS1lZGl0YWJsZS9FZGl0YWJsZVRhYmxlUm93LmpzIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi8uL3NyYy9jb21wb25lbnRzL3RhYmxlLWVkaXRhYmxlL2VkaXRhYmxlLXRhYmxlLmNzcz83ZTBjIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi8uL3NyYy9jb21wb25lbnRzL3RhYmxlLXNlbGVjdGFibGUvU2VsZWN0YWJsZUFjdGlvbnNUYWJsZUNlbGwuanMiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uLy4vc3JjL2NvbXBvbmVudHMvdGFibGUtc2VsZWN0YWJsZS9TZWxlY3RhYmxlVGFibGUuanMiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uLy4vc3JjL2NvbXBvbmVudHMvdGFibGUtc2VsZWN0YWJsZS9TZWxlY3RhYmxlVGFibGVDZWxsLmpzIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi8uL3NyYy9jb21wb25lbnRzL3RhYmxlLXNlbGVjdGFibGUvU2VsZWN0YWJsZVRhYmxlSGVhZGluZy5qcyIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vLi9zcmMvY29tcG9uZW50cy90YWJsZS1zZWxlY3RhYmxlL1NlbGVjdGFibGVUYWJsZVJvdy5qcyIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vLi9zcmMvY29tcG9uZW50cy90YWJsZS1zZWxlY3RhYmxlL3NlbGVjdGFibGUtdGFibGUuY3NzPzVlM2QiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uLy4vc3JjL2NvbXBvbmVudHMvdGFibGUtc29ydGFibGUvU29ydGFibGVBY3Rpb25zVGFibGVDZWxsLmpzIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi8uL3NyYy9jb21wb25lbnRzL3RhYmxlLXNvcnRhYmxlL1NvcnRhYmxlVGFibGUuanMiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uLy4vc3JjL2NvbXBvbmVudHMvdGFibGUtc29ydGFibGUvU29ydGFibGVUYWJsZUNlbGwuanMiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uLy4vc3JjL2NvbXBvbmVudHMvdGFibGUtc29ydGFibGUvU29ydGFibGVUYWJsZUhlYWRpbmcuanMiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uLy4vc3JjL2NvbXBvbmVudHMvdGFibGUtc29ydGFibGUvU29ydGFibGVUYWJsZVJvdy5qcyIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vLi9zcmMvY29tcG9uZW50cy90YWJsZS1zb3J0YWJsZS90YWJsZS1zb3J0YWJsZS5jc3M/ZjhmMiIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vLi9zcmMvY29tcG9uZW50cy90YWJsZS9BY3Rpb25zVGFibGVDZWxsLmpzIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi8uL3NyYy9jb21wb25lbnRzL3RhYmxlL1RhYmxlLmpzIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi8uL3NyYy9jb21wb25lbnRzL3RhYmxlL1RhYmxlQ2VsbC5qcyIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vLi9zcmMvY29tcG9uZW50cy90YWJsZS9UYWJsZUhlYWRpbmcuanMiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uLy4vc3JjL2NvbXBvbmVudHMvdGFibGUvVGFibGVSb3cuanMiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uLy4vc3JjL2NvbXBvbmVudHMvdGFibGUvdGFibGUuY3NzPzM3OTMiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uLy4vc3JjL2NvbXBvbmVudHMvdXNlLWZpdC10ZXh0LmpzIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi8uL3NyYy9jb21wb25lbnRzL3ZpZGVvLXN0cmVhbS5qcyIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vLi9zcmMvaTE4biBzeW5jIF5cXC5cXC8uKlxcLmpzb24kIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi8uL3NyYy91dGlscy9hY3Rpb25zLmpzIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi8uL3NyYy91dGlscy9tZXRob2RzLmpzIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi8uL3NyYy91dGlscy9xdWVyeS1hY3Rpb25zLmpzIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi8uL3NyYy91dGlscy9xdWVzdGlvbnMtc2V0LmpzIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi9leHRlcm5hbCBcImF3ZXNvbWUtYm9vdHN0cmFwLWNoZWNrYm94L2F3ZXNvbWUtYm9vdHN0cmFwLWNoZWNrYm94LmNzc1wiIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi9leHRlcm5hbCBcImJyb3dzZXItdGFicy1sb2NrXCIiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uL2V4dGVybmFsIFwiY3J5cHRvXCIiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uL2V4dGVybmFsIFwiZHJvcHpvbmVcIiIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vZXh0ZXJuYWwgXCJkcm9wem9uZS9kaXN0L2Ryb3B6b25lLmNzc1wiIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi9leHRlcm5hbCBcImV4dGVuZFwiIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi9leHRlcm5hbCBcImkxOG4tcmVhY3RcIiIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vZXh0ZXJuYWwgXCJpMThuLXJlYWN0L2Rpc3QvaTE4bi1yZWFjdFwiIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi9leHRlcm5hbCBcImlkdG9rZW4tdmVyaWZpZXJcIiIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vZXh0ZXJuYWwgXCJpbW11dGFiaWxpdHktaGVscGVyXCIiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uL2V4dGVybmFsIFwibG9kYXNoXCIiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uL2V4dGVybmFsIFwibW9tZW50LXRpbWV6b25lXCIiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uL2V4dGVybmFsIFwicHJvcC10eXBlc1wiIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi9leHRlcm5hbCBcInJlYWN0XCIiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uL2V4dGVybmFsIFwicmVhY3QtZGF0ZXRpbWVcIiIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vZXh0ZXJuYWwgXCJyZWFjdC1kbmRcIiIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vZXh0ZXJuYWwgXCJyZWFjdC1kbmQtaHRtbDUtYmFja2VuZFwiIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi9leHRlcm5hbCBcInJlYWN0LWRvbVwiIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi9leHRlcm5hbCBcInJlYWN0LWRyb3B6b25lXCIiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uL2V4dGVybmFsIFwicmVhY3QtZmluYWwtZm9ybVwiIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi9leHRlcm5hbCBcInJlYWN0LWdvb2dsZS1tYXBzXCIiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uL2V4dGVybmFsIFwicmVhY3QtZ29vZ2xlLW1hcHMvbGliL2NvbXBvbmVudHMvYWRkb25zL01hcmtlckNsdXN0ZXJlclwiIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi9leHRlcm5hbCBcInJlYWN0LXJlZHV4XCIiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uL2V4dGVybmFsIFwicmVhY3QtcnRlXCIiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uL2V4dGVybmFsIFwicmVhY3Qtc2VsZWN0XCIiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uL2V4dGVybmFsIFwicmVhY3Qtc2VsZWN0L2xpYi9Bc3luY1wiIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi9leHRlcm5hbCBcInJlYWN0LXNlbGVjdC9saWIvQXN5bmNDcmVhdGFibGVcIiIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vZXh0ZXJuYWwgXCJyZWFjdC1zZWxlY3QvbGliL0NyZWF0YWJsZVwiIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi9leHRlcm5hbCBcInJlYWN0LXNlbGVjdC9saWIvY29tcG9uZW50c1wiIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi9leHRlcm5hbCBcInJlYWN0LXRvb2x0aXBcIiIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vZXh0ZXJuYWwgXCJzdXBlcmFnZW50XCIiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uL2V4dGVybmFsIFwic3dlZXRhbGVydDJcIiIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vZXh0ZXJuYWwgXCJ1cmlqc1wiIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi9leHRlcm5hbCBcInZpZGVvLmpzXCIiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uL2V4dGVybmFsIFwidmlkZW8uanMvZGlzdC92aWRlby1qcy5jc3NcIiJdLCJuYW1lcyI6WyJsYW5ndWFnZSIsImdldEN1cnJlbnRVc2VyTGFuZ3VhZ2UiLCJsZW5ndGgiLCJzcGxpdCIsIlQiLCJzZXRUZXh0cyIsInJlcXVpcmUiLCJlIiwiQWpheExvYWRlciIsInNob3ciLCJyZWxhdGl2ZSIsImNvbG9yIiwic2l6ZSIsImNoaWxkcmVuIiwic3R5bGVzIiwiZGlzcGxheSIsIndpZHRoIiwiaGVpZ2h0IiwicG9zaXRpb24iLCJ6SW5kZXgiLCJtYXJnaW4iLCJjdXJzb3IiLCJiYWNrZ3JvdW5kQ29sb3IiLCJ0b3AiLCJsZWZ0Iiwic3R5bGVTcGlubmVyIiwiZm9udFNpemUiLCJzdHlsZVNwaW5uZXJDb250YWluZXIiLCJ0ZXh0QWxpZ24iLCJyaWdodCIsImJvdHRvbSIsInN0eWxlQmFja2dyb3VuZCIsImJhY2tncm91bmQiLCJvcGFjaXR5IiwiQXR0ZW5kYW5jZVRyYWNrZXIiLCJSZWFjdCIsIkNvbXBvbmVudCIsImFwaUJhc2VVcmwiLCJzdW1taXRJZCIsInNvdXJjZUlkIiwic291cmNlTmFtZSIsInByb3BzIiwibG9jYXRpb24iLCJnZXRMb2NhdGlvbiIsImFjY2Vzc1Rva2VuIiwiZ2V0QWNjZXNzVG9rZW4iLCJodHRwIiwicHV0Iiwic2VuZCIsImFjY2Vzc190b2tlbiIsInR5cGUiLCJzb3VyY2VfaWQiLCJlbmQiLCJjb25zb2xlIiwibG9nIiwicG9zdCIsIm5hdmlnYXRvciIsInNlbmRCZWFjb24iLCJ1bmRlZmluZWQiLCJ3aW5kb3ciLCJlbmNvZGVVUklDb21wb25lbnQiLCJocmVmIiwiY29tcG9uZW50RGlkTW91bnQiLCJ0cmFja0VudGVyIiwib25CZWZvcmVVbmxvYWQiLCJhZGRFdmVudExpc3RlbmVyIiwiY29tcG9uZW50V2lsbFVubW91bnQiLCJ0cmFja0xlYXZlIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsInJlbmRlciIsInByb3BUeXBlcyIsIlByb3BUeXBlcyIsInN0cmluZyIsIm51bWJlciIsImlzUmVxdWlyZWQiLCJkZWZhdWx0UHJvcHMiLCJpc0xpdmUiLCJldmVudCIsIm5vd1V0YyIsImhhc0VuZGVkIiwiZW5kX2RhdGUiLCJoYXNTdGFydGVkIiwic3RhcnRfZGF0ZSIsIkNpcmNsZUJ1dHRvbiIsImlzU2NoZWR1bGVkIiwiYWRkVG9TY2hlZHVsZSIsInJlbW92ZUZyb21TY2hlZHVsZSIsImVudGVyQ2xpY2siLCJhbHdheXNTaG93RW50ZXIiLCJpc0xpdmVOb3ciLCJidXR0b25DbGFzcyIsImljb25DbGFzcyIsIm9uQ2xpY2siLCJoYW5kbGVDbGljayIsImV2IiwiYWN0aW9uIiwicHJldmVudERlZmF1bHQiLCJzdG9wUHJvcGFnYXRpb24iLCJlbnRlciIsImFkZGVkIiwiYWRkIiwiY2lyY2xlQnV0dG9uIiwib2JqZWN0IiwiYm9vbCIsImZ1bmMiLCJDbG9jayIsImNvbnN0cnVjdG9yIiwicmVzcG9uc2UiLCJmZXRjaCIsImNhdGNoIiwiZXJyIiwianNvbiIsInRpbWVzdGFtcCIsInN0YXRlIiwib25UaWNrIiwic2V0U3RhdGUiLCJmcmFnbWVudFBhcnNlciIsIkZyYWdtZW50UGFyc2VyIiwiaW50ZXJ2YWwiLCJ0aW1lem9uZSIsIm5vdyIsIm5vd1FTIiwiZ2V0UGFyYW0iLCJtb21lbnRRUyIsIm1vbWVudCIsInR6IiwiaXNWYWxpZCIsInZhbHVlT2YiLCJsb2NhbCIsInVuaXgiLCJzZXJ2ZXJUaW1lIiwiZ2V0U2VydmVyVGltZSIsImxvY2FsQWZ0ZXIiLCJzZXRJbnRlcnZhbCIsInRpY2siLCJjbGVhckludGVydmFsIiwibWFyZ2luVG9wIiwiZm9ybWF0IiwiRXhjbHVzaXZlIiwic2hvd0ZpZWxkIiwiYmluZCIsIm5hbWUiLCJleGNsdXNpdmVTZWN0aW9ucyIsIkVYQ0xVU0lWRV9TRUNUSU9OUyIsImluY2x1ZGVzIiwiRXh0cmFRdWVzdGlvbnNGb3JtIiwiZXh0cmFRdWVzdGlvbnMiLCJ1c2VyQW5zd2VycyIsIm9uQW5zd2VyQ2hhbmdlcyIsImNsYXNzTmFtZSIsInF1ZXN0aW9uQ29udGFpbmVyQ2xhc3NOYW1lIiwicXVlc3Rpb25MYWJlbENvbnRhaW5lckNsYXNzTmFtZSIsInF1ZXN0aW9uQ29udHJvbENvbnRhaW5lckNsYXNzTmFtZSIsImZvcm1SZWYiLCJyZWFkT25seSIsImRlYnVnIiwiYnV0dG9uVGV4dCIsIlJlcXVpcmVkRXJyb3JNZXNzYWdlIiwiVmFsaWRhdGlvbkVycm9yQ2xhc3NOYW1lIiwic3VibWl0IiwicXVlc3Rpb25SZWYiLCJ1c2VSZWYiLCJhbnN3ZXJzIiwic2V0QW5zd2VycyIsInVzZVN0YXRlIiwidXNlRWZmZWN0IiwiZm9ybWF0VXNlckFuc3dlcnMiLCJxcyIsIlF1ZXN0aW9uc1NldCIsImZvcm1hdEFuc3dlcnMiLCJDb25kaXRpb24iLCJ3aGVuIiwicnVsZSIsInZhbHVlIiwiaW5wdXQiLCJjaGVja1Zpc2liaWxpdHkiLCJjaGVja1J1bGUiLCJFcnJvciIsImVycm9yIiwidG91Y2hlZCIsIm1ldGEiLCJ2YWx1ZXMiLCJhbnN3ZXJfdmFsdWVzIiwiQXJyYXkiLCJpc0FycmF5IiwicmVzIiwiYW53ZXJfdmFsdWVzX29wZXJhdG9yIiwiZm9yRWFjaCIsInYiLCJwYXJzZUludCIsInRvU3RyaW5nIiwicnVsZVJlc3VsdCIsInZpc2liaWxpdHkiLCJ2aXNpYmlsaXR5X2NvbmRpdGlvbiIsImN1cnJlbnQiLCJzdWJfcXVlc3Rpb24iLCJpZCIsInJlbmRlclF1ZXN0aW9uIiwicSIsInF1ZXN0aW9uVmFsdWVzIiwiZWwiLCJtYW5kYXRvcnkiLCJsYWJlbCIsImVuZHNXaXRoIiwicmVwbGFjZSIsIm9uQ2hhbmdlIiwicGxhY2Vob2xkZXIiLCJzdWJfcXVlc3Rpb25fcnVsZXMiLCJtYXAiLCJyIiwidmFsIiwiaXNWaXNpYmxlIiwidmFsaWRhdGVRdWVzdGlvbiIsImVycm9ycyIsImhhc093blByb3BlcnR5Iiwib25TdWJtaXQiLCJ2YWxpZGF0ZSIsImhhbmRsZVN1Ym1pdCIsImZvcm0iLCJzdWJtaXR0aW5nIiwicHJpc3RpbmUiLCJKU09OIiwic3RyaW5naWZ5IiwiYXJyYXkiLCJvbmVPZlR5cGUiLCJzaGFwZSIsImFueSIsIlJzdnBGb3JtIiwicXVlc3Rpb25zIiwicXVlc3Rpb25faWQiLCJoYW5kbGVDaGFuZ2UiLCJoYXNFcnJvcnMiLCJmaW5kIiwiYSIsImNsYXNzX25hbWUiLCJpc19jb3VudHJ5X3NlbGVjdG9yIiwiaXNfbXVsdGlzZWxlY3QiLCJlbXB0eV9zdHJpbmciLCJ0YXJnZXQiLCJhbnN3ZXIiLCJmaWVsZCIsImlzX21hbmRhdG9yeSIsIlNpbXBsZUZvcm0iLCJlbnRpdHkiLCJjb21wb25lbnREaWRVcGRhdGUiLCJwcmV2UHJvcHMiLCJwcmV2U3RhdGUiLCJzbmFwc2hvdCIsInNjcm9sbFRvRXJyb3IiLCJzaGFsbG93RXF1YWwiLCJpc0VtcHR5IiwiY2hlY2tlZCIsImNyZWF0ZUZpZWxkIiwiZmllbGRzIiwiZiIsInRyYW5zbGF0ZSIsIm9yaWdpbmFsSGFzaCIsImhhc2giLCJjb252ZXJ0VG9IYXNoIiwic3RySGFzaCIsInN1YnN0ciIsInRvTG93ZXJDYXNlIiwicGFyYW1zIiwicGFyYW0iLCJ0cmltIiwiY2xlYXJQYXJhbXMiLCJrZXkiLCJnZXRQYXJhbXMiLCJkZWxldGVQYXJhbSIsImRlbGV0ZVBhcmFtcyIsInNldFBhcmFtIiwic2VyaWFsaXplIiwiRnJlZVRleHRTZWFyY2giLCJvblNlYXJjaENsaWNrIiwib25DbGVhckNsaWNrIiwib25LZXlQcmVzc2VkIiwiZG9GaWx0ZXJpbmciLCJ0ZXJtIiwib25TZWFyY2giLCJjb2RlIiwia2V5Q29kZSIsIndoaWNoIiwiTUFQIiwiZGVmYXVsdFpvb20iLCJkZWZhdWx0Q2VudGVyIiwibGF0IiwibG5nIiwib3B0aW9ucyIsIm1pblpvb20iLCJtYXhab29tIiwiR29vZ2xlTWFwV3JhcHBlciIsIndpdGhHb29nbGVNYXAiLCJvbk1hcExvYWQiLCJ6b29tIiwiY2VudGVyIiwib25NYXBDaGFuZ2UiLCJvbk1hcENsaWNrIiwic2hvd01hcmtlcnMiLCJtYXJrZXJzIiwibWFya2VyIiwib25Ub2dnbGVJbmZvV2luZG93Iiwib25NYXJrZXJEcmFnIiwiZHJhZ2dhYmxlIiwiaXNJbmZvV2luZG93T3BlbiIsIkdNYXAiLCJoYW5kbGVNYXBMb2FkIiwiaGFuZGxlTWFwQ2hhbmdlIiwiaGFuZGxlTWFya2VyRHJhZyIsImhhbmRsZU1hcENsaWNrIiwibmV3X21hcmtlcnMiLCJhcnJheXNFcXVhbCIsIm9sZF9tYXJrZXJzX3N0ciIsIm0iLCJzb3J0Iiwiam9pbiIsIm5ld19tYXJrZXJzX3N0ciIsIm1hcmtlckJvdW5kcyIsImdvb2dsZSIsIm1hcHMiLCJMYXRMbmdCb3VuZHMiLCJtYXJrZXJfbG9jIiwiTGF0TG5nIiwiZXh0ZW5kIiwiX21hcENvbXBvbmVudCIsImZpdEJvdW5kcyIsInZpc2libGVfbWFya2VycyIsImZpbHRlciIsImdldEJvdW5kcyIsImNvbnRhaW5zIiwib25DaGFuZ2VDYWxsYmFjayIsImhhbmRsZU1hcmtlckNsaWNrIiwibWFya2VyX2lkIiwiaXNfb3BlbiIsIm9uTWFya2VyRHJhZ2dlZCIsImxhdExuZyIsIkFjY2Vzc0xldmVsc0lucHV0IiwiZ2V0QWNjZXNzTGV2ZWxzIiwiZ2V0T3B0aW9uVmFsdWUiLCJnZXRPcHRpb25MYWJlbCIsImFjY2Vzc0xldmVsIiwiY2FsbGJhY2siLCJQcm9taXNlIiwicmVzb2x2ZSIsInF1ZXJ5QWNjZXNzTGV2ZWxzIiwibXVsdGkiLCJyZXN0IiwiaXNNdWx0aSIsImhhc19lcnJvciIsIkFjdGlvbkRyb3Bkb3duIiwiYWN0aW9uTGFiZWwiLCJzbWFsbERkbCIsInNtYWxsQnRuIiwidGhlVmFsdWUiLCJPYmplY3QiLCJvcHQiLCJDaGVja2JveExpc3QiLCJvdGhlclZhbHVlIiwib3AiLCJvdGhlckNoZWNrZWQiLCJoYW5kbGVPdGhlckNCQ2hhbmdlIiwib3B0aW9uVmFsdWVzIiwidGhlVmFsIiwiaXNOYU4iLCJwdXNoIiwiZGlzYWJsZWQiLCJpbmxpbmUiLCJodG1sIiwiYWxsb3dPdGhlciIsImlzRGlzYWJsZWQiLCJzdHlsZSIsInBhZGRpbmdMZWZ0IiwibWFyZ2luTGVmdCIsImZsb2F0IiwiQ29tcGFueUlucHV0IiwiaGFuZGxlTmV3IiwiZ2V0Q29tcGFuaWVzIiwidHJhbnNsYXRlVmFsdWUiLCJuZXdWYWx1ZSIsIm9uQ3JlYXRlIiwidHJhbnNsYXRlT3B0aW9ucyIsIm5ld09wdGlvbnMiLCJjIiwicXVlcnlDb21wYW5pZXMiLCJhbGxvd0NyZWF0ZSIsIkFzeW5jQ29tcG9uZW50IiwiQXN5bmNDcmVhdGFibGVTZWxlY3QiLCJBc3luY1NlbGVjdCIsIkNvdW50cnlEcm9wZG93biIsInNldE9wdGlvbnMiLCJhYm9ydENvbnRyb2xsZXIiLCJBYm9ydENvbnRyb2xsZXIiLCJnZXRDb3VudHJ5TGlzdCIsInNpZ25hbCIsImFib3J0IiwiY291bnRyeUxpc3QiLCJpc29fY29kZSIsIkNvdW50cnlJbnB1dCIsIkRhdGVUaW1lUGlja2VyIiwiaXNWYWxpZERhdGUiLCJkYXRlIiwiaXNNb21lbnQiLCJjdXJyZW50RGF0ZSIsInNlbGVjdGVkRGF0ZSIsInZhbGlkYXRpb24iLCJhZnRlciIsImJlZm9yZSIsImlzQmVmb3JlIiwiaXNBZnRlciIsImFmdGVyRGF0ZSIsInN1YnRyYWN0IiwiYmVmb3JlRGF0ZSIsImlucHV0UHJvcHMiLCJpbnB1dERpc2FibGVkIiwidGltZSIsImF1dG9Db21wbGV0ZSIsIkRyb3Bkb3duIiwic2VsZWN0aW9uIiwiY2xlYXJhYmxlIiwib3ZlcnJpZGVDU1MiLCJpc0NsZWFyYWJsZSIsInNlbGVjdENsYXNzTmFtZSIsInNlbGVjdFN0eWxlcyIsIm1lbnUiLCJUZXh0RWRpdG9yIiwiUmljaFRleHRFZGl0b3IiLCJkZWZhdWx0IiwiZWRpdG9yVmFsdWUiLCJjcmVhdGVFbXB0eVZhbHVlIiwiY3VycmVudFZhbHVlIiwiZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzIiwic2V0Q29udGVudEZyb21TdHJpbmciLCJvbGRFZGl0b3JWYWx1ZSIsIm9sZENvbnRlbnRTdGF0ZSIsImdldEVkaXRvclN0YXRlIiwiZ2V0Q3VycmVudENvbnRlbnQiLCJuZXdDb250ZW50U3RhdGUiLCJzdHJpbmdWYWx1ZSIsIkV2ZW50SW5wdXQiLCJnZXRFdmVudHMiLCJzdW1taXQiLCJvbmx5UHVibGlzaGVkIiwicXVlcnlFdmVudHMiLCJvcHRpb24iLCJ0aXRsZSIsIkZyZWVNdWx0aVRleHRJbnB1dCIsImlucHV0VmFsdWUiLCJoYW5kbGVJbnB1dENoYW5nZSIsImhhbmRsZUtleURvd24iLCJsaW1pdCIsIkRyb3Bkb3duSW5kaWNhdG9yIiwiR3JvdXBJbnB1dCIsImdldEdyb3VwcyIsInF1ZXJ5R3JvdXBzIiwiT3B0aW9uR3JvdXAiLCJpIiwiR3JvdXBlZERyb3Bkb3duIiwiTGFuZ3VhZ2VJbnB1dCIsInNob3VsZFVzZUlkIiwiZ2V0TGFuZ3VhZ2VMaXN0IiwibGFuZ3VhZ2VMaXN0IiwibCIsIk1lbWJlcklucHV0IiwiZ2V0TWVtYmVycyIsIm1lbWJlciIsImZpcnN0X25hbWUiLCJsYXN0X25hbWUiLCJxdWVyeU1lbWJlcnMiLCJPcmdhbml6YXRpb25JbnB1dCIsImdldE9yZ2FuaXphdGlvbnMiLCJvcmciLCJxdWVyeU9yZ2FuaXphdGlvbnMiLCJSYWRpb0xpc3QiLCJnZXRMYWJlbCIsInNpbXBsZSIsImRlc2NyaXB0aW9uIiwiUmVnaXN0cmF0aW9uQ29tcGFueUlucHV0Iiwib25FcnJvciIsInNldFRoZVZhbHVlIiwiZnJlZUlucHV0Iiwic2V0RnJlZUlucHV0Iiwic2V0SW5wdXRWYWx1ZSIsImlzTXVsdGlPcHRpb25hbCIsInNldElzTXVsdGlPcHRpb25hbCIsImhhc0Vycm9yIiwic2V0SGFzRXJyb3IiLCJldmVudFZhbHVlIiwibmV3VmFsdWVTdGF0ZSIsImhhbmRsZUlucHV0Q2xlYXIiLCJldnQiLCJvdGhlck9wdGlvbiIsInF1ZXJ5UmVnaXN0cmF0aW9uQ29tcGFuaWVzIiwicGFkZGluZ1JpZ2h0IiwiU3BlYWtlcklucHV0IiwiZ2V0U3BlYWtlcnMiLCJzcGVha2VySWQiLCJoaXN0b3J5IiwicXVlcnlTcGVha2VycyIsInNwZWFrZXIiLCJNdWx0aVZhbHVlTGFiZWwiLCJkYXRhIiwicyIsIlNwb25zb3JJbnB1dCIsImdldFNwb25zb3JzIiwicXVlcnlTcG9uc29ycyIsImNvbXBhbnkiLCJzcG9uc29yc2hpcCIsIlN1bW1pdElucHV0IiwiZ2V0U3VtbWl0cyIsInF1ZXJ5U3VtbWl0cyIsIlRhZ0lucHV0IiwidCIsInRhZyIsImdldFRhZ3MiLCJuZXh0VmFsdWUiLCJxdWVyeVRhZ3MiLCJvcmRlcmVkVGFncyIsImIiLCJJbnB1dCIsIlRleHRBcmVhIiwiVGlja2V0VHlwZXNJbnB1dCIsImdldFRpY2tldFR5cGVzIiwidGlja2V0VHlwZSIsInF1ZXJ5VGlja2V0VHlwZXMiLCJEcm9wem9uZSIsIkRyb3B6b25lSlMiLCJmaWxlcyIsIm9uVXBsb2FkQ29tcGxldGUiLCJnZXREanNDb25maWciLCJkZWZhdWx0cyIsInVybCIsImNvbmZpZyIsInBvc3RVcmwiLCJkanNDb25maWciLCJhY2NlcHQiLCJmaWxlIiwiZG9uZSIsIm1heEZpbGVzIiwidXBsb2FkQ291bnQiLCJhdXRvRGlzY292ZXIiLCJldmVudEhhbmRsZXJzIiwiZHJvcCIsImluZm8iLCJkcm9wem9uZU5vZGUiLCJkcm9wem9uZVNlbGVjdG9yIiwiUmVhY3RET00iLCJmaW5kRE9NTm9kZSIsImRyb3B6b25lIiwic2V0dXBFdmVudHMiLCJnZXRBY3RpdmVGaWxlcyIsInF1ZXVlRGVzdHJveSIsImRlc3Ryb3lJbnRlcnZhbCIsImRlc3Ryb3kiLCJkanNDb25maWdPYmoiLCJwb3N0VXJsQ29uZmlnT2JqIiwiaWNvbnMiLCJzaG93RmlsZXR5cGVJY29uIiwiaWNvbkZpbGV0eXBlcyIsImV2ZW50SGFuZGxlciIsInByb3RvdHlwZSIsImNhbGwiLCJvbiIsImZpbGVJbkZpbGVzIiwic3BsaWNlIiwicHJvZ3Jlc3MiLCJieXRlc1NlbnQiLCJwcmV2aWV3RWxlbWVudCIsImVsZW0iLCJxdWVyeVNlbGVjdG9yQWxsIiwieGhyIiwiZm9ybURhdGEiLCJhcHBlbmQiLCJfdGhpcyIsImRyb3B6b25lT25Mb2FkIiwib25sb2FkIiwidXBsb2FkUmVzcG9uc2UiLCJwYXJzZSIsInJlc3BvbnNlVGV4dCIsIm9mZiIsIkljb24iLCJmaWxldHlwZSIsIlVwbG9hZElucHV0VjIiLCJvblJlbW92ZSIsIm1lZGlhVHlwZSIsInRpbWVPdXQiLCJhbGxvd2VkRXh0IiwiYWxsb3dlZF9leHRlbnNpb25zIiwiZXh0IiwibWF4U2l6ZSIsIm1heF9zaXplIiwiY2FuVXBsb2FkIiwiZGpzQ29uZmlnU2V0IiwicGFyYW1OYW1lIiwibWF4RmlsZXNpemUiLCJ0aW1lb3V0IiwiY2h1bmtpbmciLCJyZXRyeUNodW5rcyIsInBhcmFsbGVsQ2h1bmtVcGxvYWRzIiwiYWRkUmVtb3ZlTGlua3MiLCJhY2NlcHRlZEZpbGVzIiwiY29tcG9uZW50Q29uZmlnIiwibWVkaWFfdHlwZSIsIm1lZGlhX3VwbG9hZCIsInJlbW92ZWRmaWxlIiwicHJpdmF0ZV91cmwiLCJwdWJsaWNfdXJsIiwiZmlsZW5hbWUiLCJVcGxvYWRJbnB1dCIsInNob3dfcmVtb3ZlIiwibG9nb19wcmV2aWV3IiwicHJldmlldyIsImZpbGVIYXNQcmV2aWV3Iiwib25Ecm9wIiwiZmlsZVJlamVjdGlvbnMiLCJoYW5kbGVVcGxvYWQiLCJoYW5kbGVFcnJvciIsImhhbmRsZVJlbW92ZSIsInNob3dWZWlsIiwiaGlkZVZlaWwiLCJmaWxlTmFtZSIsInBhdHRlcm4iLCJ0ZXN0IiwiaWNvbiIsImZpbGVfaWNvbiIsInNsaWNlIiwibGFzdEluZGV4T2YiLCJwZGZfaWNvbiIsIm1vdl9pY29uIiwibXA0X2ljb24iLCJSYXdIVE1MIiwiX19odG1sIiwiUGFuZWwiLCJ0aGVJZCIsInRoZUNsYXNzIiwiQWJzdHJhY3RBdXRob3JpemF0aW9uQ2FsbGJhY2tSb3V0ZSIsImlzc3VlciIsImF1ZGllbmNlIiwiaWRfdG9rZW5faXNfdmFsaWQiLCJlcnJvcl9kZXNjcmlwdGlvbiIsImZsb3ciLCJnZXRPQXV0aDJGbG93IiwiX2ltcGxpY2l0RmxvdyIsImlkX3Rva2VuIiwic2Vzc2lvbl9zdGF0ZSIsImV4cGlyZXNfaW4iLCJleHRyYWN0SGFzaFBhcmFtcyIsImRvTG9naW4iLCJnZXRDdXJyZW50UGF0aE5hbWUiLCJ2YWxpZGF0ZUlkVG9rZW4iLCJvblVzZXJBdXRoIiwicGFyZW50IiwicG9zdE1lc3NhZ2UiLCJvcmlnaW4iLCJfY29kZUZsb3ciLCJVUkkiLCJnZXRDdXJyZW50SHJlZiIsInF1ZXJ5Iiwic2VhcmNoIiwiYmFja1VybCIsImVtaXRBY2Nlc3NUb2tlbiIsInRoZW4iLCJyZWZyZXNoX3Rva2VuIiwiZXJyb3IyIiwiZXJyb3JfZGVzY3JpcHRpb24yIiwiUkVTUE9OU0VfVFlQRV9JTVBMSUNJVCIsIlJFU1BPTlNFX1RZUEVfQ09ERSIsInBhcnNlUXVlcnkiLCJzaG91bGRDb21wb25lbnRVcGRhdGUiLCJuZXh0UHJvcHMiLCJuZXh0U3RhdGUiLCJuZXh0Q29udGV4dCIsImZyYWdtZW50IiwibGVuZ2h0IiwiYnVpbGRRdWVyeSIsIl9jYWxsYmFjayIsIl9yZWRpcmVjdDJFcnJvciIsIlNFVF9MT0dHRURfVVNFUiIsIkxPR09VVF9VU0VSIiwiUkVRVUVTVF9VU0VSX0lORk8iLCJSRUNFSVZFX1VTRVJfSU5GTyIsIkNMRUFSX1NFU1NJT05fU1RBVEUiLCJVUERBVEVfU0VTU0lPTl9TVEFURV9TVEFUVVMiLCJTRVNTSU9OX1NUQVRFX1NUQVRVU19VTkNIQU5HRUQiLCJTRVNTSU9OX1NUQVRFX1NUQVRVU19DSEFOR0VEIiwiU0VTU0lPTl9TVEFURV9TVEFUVVNfRVJST1IiLCJVUERBVEVfVVNFUl9JTkZPIiwiaWRUb2tlbiIsInNlc3Npb25TdGF0ZSIsImV4cGlyZXNJbiIsInJlZnJlc2hUb2tlbiIsImRpc3BhdGNoIiwic3RvcmVBdXRoSW5mbyIsInBheWxvYWQiLCJkb0xvZ291dCIsImdldFN0YXRlIiwiZ2V0VXNlckluZm8iLCJleHBhbmQiLCJlcnJvckhhbmRsZXIiLCJBbGxvd2VkVXNlckdyb3VwcyIsImdldEFsbG93ZWRVc2VyR3JvdXBzIiwibG9nZ2VkVXNlclN0YXRlIiwiYXV0aEVycm9ySGFuZGxlciIsInN0YXJ0TG9hZGluZyIsImdldFJlcXVlc3QiLCJjcmVhdGVBY3Rpb24iLCJidWlsZEFQSUJhc2VVcmwiLCJzdG9wTG9hZGluZyIsImVycm9yX21lc3NhZ2UiLCJzaG93TWVzc2FnZSIsImluaXRMb2dPdXQiLCJhbGxvd2VkR3JvdXBzIiwiZ3JvdXBzIiwiZ3JvdXAiLCJpZHgiLCJ1cGRhdGVVc2VySW5mbyIsInVwZGF0ZWRNZW1iZXIiLCJ1cGRhdGVTZXNzaW9uU3RhdGVTdGF0dXMiLCJuZXdTdGF0dXMiLCJzZXNzaW9uU3RhdGVTdGF0dXMiLCJyZXF1ZXN0IiwibG9jayIsIkxvY2siLCJHRVRfVE9LRU5fU0lMRU5UTFlfTE9DS19LRVkiLCJOT05DRV9MRU4iLCJBQ0NFU1NfVE9LRU5fU0tFV19USU1FIiwiQVVUSF9JTkZPIiwiTk9OQ0UiLCJQS0NFIiwiZ2V0QXV0aFVybCIsInByb21wdCIsInRva2VuSWRIaW50IiwicHJvdmlkZXIiLCJvYXV0aDJDbGllbnRJZCIsImdldE9BdXRoMkNsaWVudElkIiwicmVkaXJlY3RVcmkiLCJnZXRBdXRoQ2FsbGJhY2siLCJiYXNlVXJsIiwiZ2V0T0F1dGgySURQQmFzZVVybCIsInNjb3BlcyIsImdldE9BdXRoMlNjb3BlcyIsImVuY29kZVVSSSIsIm5vbmNlIiwiY3JlYXRlTm9uY2UiLCJwdXRPbkxvY2FsU3RvcmFnZSIsInBrY2UiLCJjcmVhdGVQS0NFQ29kZXMiLCJjb2RlQ2hhbGxlbmdlIiwiZ2V0TG9nb3V0VXJsIiwicG9zdExvZ091dFVyaSIsImdldE9yaWdpbiIsImxlbiIsInBvc3NpYmxlIiwiY2hhckF0IiwiTWF0aCIsImZsb29yIiwicmFuZG9tIiwiZ2V0Q3VycmVudExvY2F0aW9uIiwiZG9Mb2dpbkJhc2ljTG9naW4iLCJjb2RlVmVyaWZpZXIiLCJiYXNlNjRVUkxFbmNvZGUiLCJyYW5kb21CeXRlcyIsInNoYTI1NiIsIkJ1ZmZlciIsImZyb20iLCJjcmVhdGVkQXQiLCJEYXRlIiwiY29kZVBhaXIiLCJnZXRGcm9tTG9jYWxTdG9yYWdlIiwibWV0aG9kIiwiaGVhZGVycyIsImJvZHkiLCJtZXNzYWdlIiwiY2xlYXJBY2Nlc3NUb2tlbiIsInJldHJ5UHJvbWlzZSIsImFjcXVpcmVMb2NrIiwiYXV0aEluZm8iLCJnZXRBdXRoSW5mbyIsImFjY2Vzc1Rva2VuVXBkYXRlZEF0IiwicmVsZWFzZUxvY2siLCJ0aW1lRWxhcHNlZFNlY3MiLCJ1c2VPQXV0aDJSZWZyZXNoVG9rZW4iLCJjbGVhckF1dGhJbmZvIiwicmVmcmVzaEFjY2Vzc1Rva2VuIiwic3RhdHVzIiwiY3VycmVudExvY2F0aW9uIiwic2V0U2Vzc2lvbkNsZWFyaW5nU3RhdGUiLCJzdGF0dXNUZXh0IiwiZm9ybWVyQXV0aEluZm8iLCJyZW1vdmVGcm9tTG9jYWxTdG9yYWdlIiwiZ2V0SWRUb2tlbiIsIk9BVVRIMl9DTElFTlRfSUQiLCJPQVVUSDJfRkxPVyIsIkJvb2xlYW4iLCJPQVVUSDJfVVNFX1JFRlJFU0hfVE9LRU4iLCJJRFBfQkFTRV9VUkwiLCJTQ09QRVMiLCJ2ZXJpZmllciIsIklkVG9rZW5WZXJpZmllciIsInN0b3JlZE5vbmNlIiwiand0IiwiZGVjb2RlIiwiYWxnIiwiaGVhZGVyIiwia2lkIiwiYXVkIiwiaXNzIiwiZXhwIiwibmJmIiwidG5vbmNlIiwicGFzc3dvcmRsZXNzU3RhcnQiLCJjb25uZWN0aW9uIiwiZW1haWwiLCJwaG9uZV9udW1iZXIiLCJyZXEiLCJyZWplY3QiLCJwYXNzd29yZGxlc3NMb2dpbiIsIm90cCIsIkNIRUNLX1NFU1NJT05fSU5URVJWQUwiLCJPUFNlc3Npb25DaGVja2VyIiwib3BGcmFtZV9zcmMiLCJycENoZWNrU2Vzc2lvblN0YXRlRnJhbWVfc3JjIiwicmVjZWl2ZU1lc3NhZ2UiLCJyZWNlaXZlTWVzc2FnZUZyb21DaGlsZCIsInNldFRpbWVyIiwiY2hlY2tTZXNzaW9uIiwib25TZXR1cENoZWNrU2Vzc2lvblJQIiwicnBDaGVja1Nlc3Npb25TdGF0ZUZyYW1lT25Mb2FkIiwib3BGcmFtZSIsInJwQ2hlY2tTZXNzaW9uU3RhdGVGcmFtZSIsInNldE9QRnJhbWVSZWYiLCJlbGVtZW50Iiwic2V0Q2hlY2tTZXNzaW9uU3RhdGVGcmFtZVJlZiIsImlzTG9nZ2VkVXNlciIsImZyYW1lIiwiY29udGVudERvY3VtZW50IiwicmVzdWx0VXJsIiwiVVJMIiwidG9Mb2NhbGVTdHJpbmciLCJjbGllbnRJZCIsInRhcmdldE9yaWdpbiIsImlkcEJhc2VVcmwiLCJjb250ZW50V2luZG93Iiwic2Vzc2lvbkNoZWNrRW5kcG9pbnQiLCJTdHJpbmciLCJib3JkZXIiLCJtYXBTdGF0ZVRvUHJvcHMiLCJjb25uZWN0IiwiU2ltcGxlTGlua0xpc3QiLCJnZXRPcHRpb25zIiwiaGFuZGxlTGluayIsImZpbHRlck9wdGlvbiIsImdldE5ld09wdGlvbkRhdGEiLCJpc1ZhbGlkTmV3T3B0aW9uIiwiZGVmYXVsdE9wdGlvbnMiLCJhY3Rpb25zIiwib3B0aW9uTGFiZWwiLCJzZWxlY3RWYWx1ZSIsInNlbGVjdE9wdGlvbnMiLCJsYWJlbEtleSIsIm9wdGlvbkZvdW5kIiwib25DcmVhdGVUYWciLCJjYW5kaWRhdGUiLCJhbGxvd0R1cGxpY2F0ZXMiLCJjb2x1bW5zIiwiZGlzYWJsZWRBZGQiLCJ2YWx1ZUtleSIsInRhYmxlT3B0aW9ucyIsImRlbGV0ZSIsImVkaXQiLCJjdXN0b20iLCJpdGVtQSIsInNvcnRDb2wiLCJpdGVtQiIsIlN1bW1pdERyb3Bkb3duIiwic3VtbWl0VmFsdWUiLCJzdW1taXRzIiwiYWN0aW9uQ2xhc3MiLCJzdW1taXRPcHRpb25zIiwiYmlnQ2xhc3MiLCJFZGl0YWJsZUFjdGlvbnNUYWJsZUNlbGwiLCJpc19lZGl0aW5nIiwib25EZWxldGUiLCJvblNhdmUiLCJzYXZlIiwib25FZGl0Iiwib25DYW5jZWwiLCJjYW5jZWwiLCJjb2xXaWR0aCIsImNyZWF0ZVJvdyIsInJvdyIsInNob3VsZFVzZVRleHRBcmVhIiwiYWN0aW9uX2J1dHRvbnMiLCJjZWxscyIsImNvbCIsImNvbHVtbktleSIsImlzX2VkaXQiLCJjcmVhdGVOZXdSb3ciLCJuZXdfcm93IiwiYWRkTmV3IiwiY2VsbF92YWx1ZSIsIkVkaXRhYmxlVGFibGUiLCJyb3dzIiwiZWRpdFJvdyIsInNhdmVSb3ciLCJkZWxldGVDbGljayIsIm9uQ2hhbmdlQ2VsbCIsImVkaXRSb3dDYW5jZWwiLCJzYXZlTmV3Um93IiwiaGFuZGxlTmV3Q2hhbmdlIiwib25DaGFuZ2VOZXdDZWxsIiwiZWRpdGluZ19yb3ciLCJub0FsZXJ0IiwiU3dhbCIsImZpcmUiLCJ0ZXh0Iiwic2hvd0NhbmNlbEJ1dHRvbiIsImNvbmZpcm1CdXR0b25Db2xvciIsImNvbmZpcm1CdXR0b25UZXh0IiwicmVzdWx0Iiwicm93SWR4IiwiZmluZEluZGV4IiwidGFibGVDbGFzcyIsInRleHRBcmVhIiwid2FybiIsIkVkaXRhYmxlVGFibGVDZWxsIiwiRWRpdGFibGVUYWJsZUhlYWRpbmciLCJFZGl0YWJsZVRhYmxlUm93IiwiZXZlbiIsIlNlbGVjdGFibGVBY3Rpb25zVGFibGVDZWxsIiwiaGFuZGxlQWN0aW9uIiwic2hvdWxkRGlzcGxheUFjdGlvbiIsInRvb2x0aXAiLCJzb3J0RnVuYyIsInNvcnRhYmxlIiwic29ydERpciIsImdldFNvcnREaXIiLCJjb2x1bW5JbmRleCIsIlNlbGVjdGFibGVUYWJsZSIsInNlbGVjdGVkSWRzIiwib25TZWxlY3RlZEFsbCIsInNlbGVjdGVkQWxsIiwib25Tb3J0IiwiYWN0aW9uc0hlYWRlciIsIlNlbGVjdGFibGVUYWJsZUNlbGwiLCJpc1ZhbGlkRWxlbWVudCIsIlNlbGVjdGFibGVUYWJsZUhlYWRpbmciLCJoYW5kbGVTb3J0IiwiZ2V0U29ydENsYXNzIiwiU2VsZWN0YWJsZVRhYmxlUm93IiwiaGFuZGxlRWRpdCIsImhhbmRsZVNlbGVjdCIsIm9uU2VsZWN0ZWQiLCJjYW5FZGl0Iiwicm93Q2xhc3MiLCJTb3J0YWJsZUFjdGlvbnNUYWJsZUNlbGwiLCJTb3J0YWJsZVRhYmxlIiwibW92ZVJvdyIsImRyb3BSb3ciLCJkcmFnSW5kZXgiLCJob3ZlckluZGV4IiwiZHJhZ1JvdyIsInVwZGF0ZSIsIiRzcGxpY2UiLCJpbmRleCIsIm9yZGVyRmllbGQiLCJuZXdPcmRlciIsIiRzZXQiLCJkcm9wQ2FsbGJhY2siLCJhcnJheU9mIiwiRHJhZ0Ryb3BDb250ZXh0IiwiSFRNTDVCYWNrZW5kIiwiU29ydGFibGVUYWJsZUNlbGwiLCJTb3J0YWJsZVRhYmxlSGVhZGluZyIsInBhZGRpbmciLCJtYXJnaW5Cb3R0b20iLCJyb3dTb3VyY2UiLCJiZWdpbkRyYWciLCJlbmREcmFnIiwibW9uaXRvciIsImRpZERyb3AiLCJkcm9wQ2FyZCIsInJvd1RhcmdldCIsImhvdmVyIiwiY29tcG9uZW50IiwiZ2V0SXRlbSIsImhvdmVyQm91bmRpbmdSZWN0IiwiZ2V0Qm91bmRpbmdDbGllbnRSZWN0IiwiaG92ZXJNaWRkbGVZIiwiY2xpZW50T2Zmc2V0IiwiZ2V0Q2xpZW50T2Zmc2V0IiwiaG92ZXJDbGllbnRZIiwieSIsIm1vdmVDYXJkIiwiU29ydGFibGVUYWJsZVJvdyIsImlzRHJhZ2dpbmciLCJjb25uZWN0RHJhZ1NvdXJjZSIsImNvbm5lY3REcm9wVGFyZ2V0IiwiRHJhZ1NvdXJjZSIsImRyYWdTb3VyY2UiLCJEcm9wVGFyZ2V0IiwiZHJvcFRhcmdldCIsIkFjdGlvbnNUYWJsZUNlbGwiLCJUYWJsZSIsIlRhYmxlQ2VsbCIsIlRhYmxlSGVhZGluZyIsIlRhYmxlUm93IiwidXNlRml0VGV4dCIsIm1pblNpemUiLCJNSU5fRk9OVF9TSVpFIiwiTUFYX0ZPTlRfU0laRSIsIlJFU09MVVRJT04iLCJyZWYiLCJmb250U2l6ZVByZXYiLCJmb250U2l6ZU1heCIsImZvbnRTaXplTWluIiwiaXNEb25lIiwiYWJzIiwiaXNPdmVyZmxvdyIsInNjcm9sbEhlaWdodCIsIm9mZnNldEhlaWdodCIsInNjcm9sbFdpZHRoIiwib2Zmc2V0V2lkdGgiLCJpc0FzYyIsImZvbnRTaXplTmV3IiwiZGVsdGEiLCJuZXdNYXgiLCJuZXdNaW4iLCJtaW4iLCJtYXgiLCJsaW5lSGVpZ2h0IiwiWW91dHViZVZpZGVvQ29tcG9uZW50IiwidmlkZW9TcmNVUkwiLCJ2aWRlb1RpdGxlIiwiTGl2ZVZpZGVvUGxheWVyIiwicGxheWVyIiwidmlkZW9qcyIsInZpZGVvTm9kZSIsImRpc3Bvc2UiLCJub2RlIiwiVmlkZW9TdHJlYW0iLCJsYXlvdXQiLCJjaGVja0xpdmVWaWRlbyIsImlzTGl2ZVZpZGVvIiwibWF0Y2giLCJ2aWRlb0pzT3B0aW9ucyIsImF1dG9wbGF5IiwiY29udHJvbHMiLCJmbHVpZCIsInNvdXJjZXMiLCJzcmMiLCJHRU5FUklDX0VSUk9SIiwiUkVTRVRfTE9BRElORyIsIlNUQVJUX0xPQURJTkciLCJTVE9QX0xPQURJTkciLCJWQUxJREFURSIsIkNMRUFSX01FU1NBR0UiLCJTSE9XX01FU1NBR0UiLCJyZXNldExvYWRpbmciLCJ4aHJzIiwic2NoZWR1bGUiLCJpc09iamVjdEVtcHR5Iiwib2JqIiwia2V5cyIsIm1zZyIsImNsZWFyaW5nX3Nlc3Npb25fc3RhdGUiLCJpc0NsZWFyaW5nU2Vzc2lvblN0YXRlIiwiZW50cmllcyIsInJlcXVlc3RBY3Rpb25DcmVhdG9yIiwicmVjZWl2ZUFjdGlvbkNyZWF0b3IiLCJlbmRwb2ludCIsImRlZmF1bHRFcnJvckhhbmRsZXIiLCJyZXF1ZXN0QWN0aW9uUGF5bG9hZCIsImdldCIsImRlYWRsaW5lIiwicmVzcG9uc2VIYW5kbGVyIiwicHV0UmVxdWVzdCIsImRlbGV0ZVJlcXVlc3QiLCJwb3N0UmVxdWVzdCIsInNldCIsInBvc3RGaWxlIiwiZmlsZU1ldGFkYXRhIiwiYXR0YWNoIiwicHV0RmlsZSIsIm9rIiwiZmV0Y2hFcnJvckhhbmRsZXIiLCJmZXRjaFJlc3BvbnNlSGFuZGxlciIsInNldHRpbmdzIiwic2hvd1N1Y2Nlc3NNZXNzYWdlIiwiZG93bmxvYWRGaWxlQnlDb250ZW50IiwiY29udGVudCIsIm1pbWUiLCJsaW5rIiwiZG9jdW1lbnQiLCJjcmVhdGVFbGVtZW50IiwidGV4dENvbnRlbnQiLCJkb3dubG9hZCIsImFwcGVuZENoaWxkIiwiY2xpY2siLCJyZW1vdmVDaGlsZCIsImdldENTViIsImNzdiIsImdldFJhd0NTViIsImVzY2FwZUZpbHRlclZhbHVlIiwiZmluZEVsZW1lbnRQb3MiLCJjdXJ0b3AiLCJvZmZzZXRQYXJlbnQiLCJvZmZzZXRUb3AiLCJlcG9jaFRvTW9tZW50IiwiYXRpbWUiLCJlcG9jaFRvTW9tZW50VGltZVpvbmUiLCJ0aW1lX3pvbmUiLCJmb3JtYXRFcG9jaCIsIm9iamVjdFRvUXVlcnlTdHJpbmciLCJzdHIiLCJnZXRCYWNrVVJMIiwicGF0aG5hbWUiLCJBTExPV0VEX1VTRVJfR1JPVVBTIiwicmVsYXRpdmVVcmwiLCJBUElfQkFTRV9VUkwiLCJsb2NhbFN0b3JhZ2UiLCJzZXRJdGVtIiwicmVtb3ZlSXQiLCJyZW1vdmVJdGVtIiwibGFuZ3VhZ2VzIiwidXNlckxhbmd1YWdlIiwiZmlyc3RFcnJvciIsImZpcnN0Tm9kZSIsImdldEVsZW1lbnRCeUlkIiwic2Nyb2xsVG8iLCJvYmplY3QxIiwib2JqZWN0MiIsImtleXMxIiwia2V5czIiLCJhMSIsImEyIiwiZXZlcnkiLCJvIiwiYnVmZmVyIiwiY3JlYXRlSGFzaCIsImRpZ2VzdCIsImNiIiwibWF4TnVtYmVyT2ZSZXRyaWVzIiwiUkVDRUlWRV9DT1VOVFJJRVMiLCJjYWxsRGVsYXkiLCJfIiwiZGVib3VuY2UiLCJmaWx0ZXJzIiwiYXBpVXJsIiwicXVlcnlUcmFja3MiLCJxdWVyeVRyYWNrR3JvdXBzIiwiYWRkUXVlcnkiLCJnZW9jb2RlciIsImdlb0NvZGVBZGRyZXNzIiwiYWRkcmVzcyIsIkdlb2NvZGVyIiwiZ2VvY29kZSIsInJlc3VsdHMiLCJHZW9jb2RlclN0YXR1cyIsIk9LIiwiZ2VvQ29kZUxhdExuZyIsImxhdGxuZyIsInBhcnNlRmxvYXQiLCJDaGVja0JveFF1ZXN0aW9uVHlwZSIsIkNvbWJvQm94UXVlc3Rpb25UeXBlIiwiQ2hlY2tCb3hMaXN0UXVlc3Rpb25UeXBlIiwiUmFkaW9CdXR0b25MaXN0UXVlc3Rpb25UeXBlIiwiQWxsb3dlZE11bHRpcGxlVmFsdWVRdWVzdGlvblR5cGUiLCJBbnN3ZXJWYWx1ZXNPcGVyYXRvcl9BbmQiLCJBbnN3ZXJWYWx1ZXNPcGVyYXRvcl9PciIsIlZpc2liaWxpdHlDb25kaXRpb25fRXF1YWwiLCJWaXNpYmlsaXR5Q29uZGl0aW9uX05vdEVxdWFsIiwiVmlzaWJpbGl0eV9WaXNpYmxlIiwiTWFpblF1ZXN0aW9uQ2xhc3NUeXBlIiwicXVlc3Rpb25CeU5hbWUiLCJxdWVzdGlvbkJ5SWQiLCJydWxlcyIsIl9wYXJzZVF1ZXN0aW9uIiwiYXYiLCJOdW1iZXIiLCJpc0ludGVnZXIiLCJpbml0aWFsQ29uZGl0aW9uIiwiYW5zd2VyX3ZhbHVlc19vcGVyYXRvciIsInBhcmVudFF1ZXN0aW9uQW5zd2VyIiwiX2dldEFuc3dlckZvciIsInBhcmVudF9xdWVzdGlvbl9pZCIsImFuc3dlclZhbHVlIiwiX2Fuc3dlckNvbnRhaW5zIiwiY2xhc3MiLCJfaGFzVmFsdWUiLCJfYWxsb3dzVmFsdWVzIiwiX2FsbG93c1ZhbHVlIiwicnVsZUlkIiwicGFyZW50X3J1bGVzIiwiX2lzU3ViUXVlc3Rpb25WaXNpYmxlIiwiX2lzQW5zd2VyZWQiLCJfY2hlY2tRdWVzdGlvbiIsInF1ZXN0aW9uIiwidXNlckFuc3dlciIsIm9yaWdpbmFsQW5zd2VycyIsImFuc1ZhbCIsInJlczEiLCJfZm9ybWF0UXVlc3Rpb25BbnN3ZXIiLCJfcGFyc2VRdWVzdGlvbnMiXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRCxPO1FDVkE7UUFDQTs7UUFFQTtRQUNBOztRQUVBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBOztRQUVBO1FBQ0E7O1FBRUE7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7OztRQUdBO1FBQ0E7O1FBRUE7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7UUFDQSwwQ0FBMEMsZ0NBQWdDO1FBQzFFO1FBQ0E7O1FBRUE7UUFDQTtRQUNBO1FBQ0Esd0RBQXdELGtCQUFrQjtRQUMxRTtRQUNBLGlEQUFpRCxjQUFjO1FBQy9EOztRQUVBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQSx5Q0FBeUMsaUNBQWlDO1FBQzFFLGdIQUFnSCxtQkFBbUIsRUFBRTtRQUNySTtRQUNBOztRQUVBO1FBQ0E7UUFDQTtRQUNBLDJCQUEyQiwwQkFBMEIsRUFBRTtRQUN2RCxpQ0FBaUMsZUFBZTtRQUNoRDtRQUNBO1FBQ0E7O1FBRUE7UUFDQSxzREFBc0QsK0RBQStEOztRQUVySDtRQUNBOzs7UUFHQTtRQUNBOzs7Ozs7Ozs7Ozs7O0FDbEZBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtB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Q0FBQyxDQUFDSixXQUFmLElBQThCSSxDQUE5Qjs7SUFDSixLQUFLMjZCLGNBQUwsR0FBc0IsRUFBdEI7SUFDQSxLQUFLQyxZQUFMLEdBQW9CLEVBQXBCLENBUmlDLENBU2pDOztJQUNBLEtBQUtDLEtBQUwsR0FBYSxFQUFiOztJQUNBLEtBQUsyQixlQUFMO0VBQ0g7O0FBZDZCLEM7Ozs7Ozs7Ozs7O0FDWmxDLHNGOzs7Ozs7Ozs7OztBQ0FBLDhDOzs7Ozs7Ozs7OztBQ0FBLG1DOzs7Ozs7Ozs7OztBQ0FBLHFDOzs7Ozs7Ozs7OztBQ0FBLHVEOzs7Ozs7Ozs7OztBQ0FBLG1DOzs7Ozs7Ozs7OztBQ0FBLHVDOzs7Ozs7Ozs7OztBQ0FBLHVEOzs7Ozs7Ozs7OztBQ0FBLDZDOzs7Ozs7Ozs7OztBQ0FBLGdEOzs7Ozs7Ozs7OztBQ0FBLG1DOzs7Ozs7Ozs7OztBQ0FBLDRDOzs7Ozs7Ozs7OztBQ0FBLHVDOzs7Ozs7Ozs7OztBQ0FBLGtDOzs7Ozs7Ozs7OztBQ0FBLDJDOzs7Ozs7Ozs7OztBQ0FBLHNDOzs7Ozs7Ozs7OztBQ0FBLG9EOzs7Ozs7Ozs7OztBQ0FBLHNDOzs7Ozs7Ozs7OztBQ0FBLDJDOzs7Ozs7Ozs7OztBQ0FBLDZDOzs7Ozs7Ozs7OztBQ0FBLDhDOzs7Ozs7Ozs7OztBQ0FBLG9GOzs7Ozs7Ozs7OztBQ0FBLHdDOzs7Ozs7Ozs7OztBQ0FBLHNDOzs7Ozs7Ozs7OztBQ0FBLHlDOzs7Ozs7Ozs7OztBQ0FBLG1EOzs7Ozs7Ozs7OztBQ0FBLDREOzs7Ozs7Ozs7OztBQ0FBLHVEOzs7Ozs7Ozs7OztBQ0FBLHdEOzs7Ozs7Ozs7OztBQ0FBLDBDOzs7Ozs7Ozs7OztBQ0FBLHVDOzs7Ozs7Ozs7OztBQ0FBLHdDOzs7Ozs7Ozs7OztBQ0FBLGtDOzs7Ozs7Ozs7OztBQ0FBLHFDOzs7Ozs7Ozs7OztBQ0FBLHVEIiwiZmlsZSI6ImNvbXBvbmVudHMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIoZnVuY3Rpb24gd2VicGFja1VuaXZlcnNhbE1vZHVsZURlZmluaXRpb24ocm9vdCwgZmFjdG9yeSkge1xuXHRpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSA9PT0gJ29iamVjdCcpXG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KCk7XG5cdGVsc2UgaWYodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKVxuXHRcdGRlZmluZShcIm9wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvblwiLCBbXSwgZmFjdG9yeSk7XG5cdGVsc2UgaWYodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnKVxuXHRcdGV4cG9ydHNbXCJvcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb25cIl0gPSBmYWN0b3J5KCk7XG5cdGVsc2Vcblx0XHRyb290W1wib3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uXCJdID0gZmFjdG9yeSgpO1xufSkodGhpcywgZnVuY3Rpb24oKSB7XG5yZXR1cm4gIiwiIFx0Ly8gVGhlIG1vZHVsZSBjYWNoZVxuIFx0dmFyIGluc3RhbGxlZE1vZHVsZXMgPSB7fTtcblxuIFx0Ly8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbiBcdGZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblxuIFx0XHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcbiBcdFx0aWYoaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0pIHtcbiBcdFx0XHRyZXR1cm4gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0uZXhwb3J0cztcbiBcdFx0fVxuIFx0XHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuIFx0XHR2YXIgbW9kdWxlID0gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0gPSB7XG4gXHRcdFx0aTogbW9kdWxlSWQsXG4gXHRcdFx0bDogZmFsc2UsXG4gXHRcdFx0ZXhwb3J0czoge31cbiBcdFx0fTtcblxuIFx0XHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cbiBcdFx0bW9kdWxlc1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cbiBcdFx0Ly8gRmxhZyB0aGUgbW9kdWxlIGFzIGxvYWRlZFxuIFx0XHRtb2R1bGUubCA9IHRydWU7XG5cbiBcdFx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcbiBcdFx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xuIFx0fVxuXG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlcyBvYmplY3QgKF9fd2VicGFja19tb2R1bGVzX18pXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm0gPSBtb2R1bGVzO1xuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZSBjYWNoZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5jID0gaW5zdGFsbGVkTW9kdWxlcztcblxuIFx0Ly8gZGVmaW5lIGdldHRlciBmdW5jdGlvbiBmb3IgaGFybW9ueSBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSBmdW5jdGlvbihleHBvcnRzLCBuYW1lLCBnZXR0ZXIpIHtcbiBcdFx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBuYW1lKSkge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBuYW1lLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZ2V0dGVyIH0pO1xuIFx0XHR9XG4gXHR9O1xuXG4gXHQvLyBkZWZpbmUgX19lc01vZHVsZSBvbiBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIgPSBmdW5jdGlvbihleHBvcnRzKSB7XG4gXHRcdGlmKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC50b1N0cmluZ1RhZykge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBTeW1ib2wudG9TdHJpbmdUYWcsIHsgdmFsdWU6ICdNb2R1bGUnIH0pO1xuIFx0XHR9XG4gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4gXHR9O1xuXG4gXHQvLyBjcmVhdGUgYSBmYWtlIG5hbWVzcGFjZSBvYmplY3RcbiBcdC8vIG1vZGUgJiAxOiB2YWx1ZSBpcyBhIG1vZHVsZSBpZCwgcmVxdWlyZSBpdFxuIFx0Ly8gbW9kZSAmIDI6IG1lcmdlIGFsbCBwcm9wZXJ0aWVzIG9mIHZhbHVlIGludG8gdGhlIG5zXG4gXHQvLyBtb2RlICYgNDogcmV0dXJuIHZhbHVlIHdoZW4gYWxyZWFkeSBucyBvYmplY3RcbiBcdC8vIG1vZGUgJiA4fDE6IGJlaGF2ZSBsaWtlIHJlcXVpcmVcbiBcdF9fd2VicGFja19yZXF1aXJlX18udCA9IGZ1bmN0aW9uKHZhbHVlLCBtb2RlKSB7XG4gXHRcdGlmKG1vZGUgJiAxKSB2YWx1ZSA9IF9fd2VicGFja19yZXF1aXJlX18odmFsdWUpO1xuIFx0XHRpZihtb2RlICYgOCkgcmV0dXJuIHZhbHVlO1xuIFx0XHRpZigobW9kZSAmIDQpICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgJiYgdmFsdWUuX19lc01vZHVsZSkgcmV0dXJuIHZhbHVlO1xuIFx0XHR2YXIgbnMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIobnMpO1xuIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkobnMsICdkZWZhdWx0JywgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdmFsdWUgfSk7XG4gXHRcdGlmKG1vZGUgJiAyICYmIHR5cGVvZiB2YWx1ZSAhPSAnc3RyaW5nJykgZm9yKHZhciBrZXkgaW4gdmFsdWUpIF9fd2VicGFja19yZXF1aXJlX18uZChucywga2V5LCBmdW5jdGlvbihrZXkpIHsgcmV0dXJuIHZhbHVlW2tleV07IH0uYmluZChudWxsLCBrZXkpKTtcbiBcdFx0cmV0dXJuIG5zO1xuIFx0fTtcblxuIFx0Ly8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubiA9IGZ1bmN0aW9uKG1vZHVsZSkge1xuIFx0XHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cbiBcdFx0XHRmdW5jdGlvbiBnZXREZWZhdWx0KCkgeyByZXR1cm4gbW9kdWxlWydkZWZhdWx0J107IH0gOlxuIFx0XHRcdGZ1bmN0aW9uIGdldE1vZHVsZUV4cG9ydHMoKSB7IHJldHVybiBtb2R1bGU7IH07XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18uZChnZXR0ZXIsICdhJywgZ2V0dGVyKTtcbiBcdFx0cmV0dXJuIGdldHRlcjtcbiBcdH07XG5cbiBcdC8vIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbFxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5vID0gZnVuY3Rpb24ob2JqZWN0LCBwcm9wZXJ0eSkgeyByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpOyB9O1xuXG4gXHQvLyBfX3dlYnBhY2tfcHVibGljX3BhdGhfX1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5wID0gXCJcIjtcblxuXG4gXHQvLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbiBcdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKF9fd2VicGFja19yZXF1aXJlX18ucyA9IFwiLi9zcmMvY29tcG9uZW50cy5qc1wiKTtcbiIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgVCBmcm9tICdpMThuLXJlYWN0JztcblxuaW1wb3J0IHsgQWpheExvYWRlciB9IGZyb20gJy4vY29tcG9uZW50cy9hamF4bG9hZGVyJztcbmltcG9ydCBSYXdIVE1MIGZyb20gJy4vY29tcG9uZW50cy9yYXctaHRtbC9pbmRleCc7XG5pbXBvcnQgRnJlZVRleHRTZWFyY2ggZnJvbSAnLi9jb21wb25lbnRzL2ZyZWUtdGV4dC1zZWFyY2gvaW5kZXgnO1xuaW1wb3J0IEdNYXAgZnJvbSAnLi9jb21wb25lbnRzL2dvb2dsZS1tYXAvaW5kZXgnO1xuaW1wb3J0IERhdGVUaW1lUGlja2VyIGZyb20gJy4vY29tcG9uZW50cy9pbnB1dHMvZGF0ZXRpbWVwaWNrZXIvaW5kZXgnXG5pbXBvcnQgR3JvdXBlZERyb3Bkb3duIGZyb20gJy4vY29tcG9uZW50cy9pbnB1dHMvZ3JvdXBlZC1kcm9wZG93bi9pbmRleCdcbmltcG9ydCBVcGxvYWRJbnB1dCBmcm9tICcuL2NvbXBvbmVudHMvaW5wdXRzL3VwbG9hZC1pbnB1dC9pbmRleCdcbmltcG9ydCBVcGxvYWRJbnB1dFYyIGZyb20gJy4vY29tcG9uZW50cy9pbnB1dHMvdXBsb2FkLWlucHV0LXYyL2luZGV4J1xuaW1wb3J0IENvbXBhbnlJbnB1dCBmcm9tICcuL2NvbXBvbmVudHMvaW5wdXRzL2NvbXBhbnktaW5wdXQnXG5pbXBvcnQgU3BvbnNvcklucHV0IGZyb20gJy4vY29tcG9uZW50cy9pbnB1dHMvc3BvbnNvci1pbnB1dCdcbmltcG9ydCBPcmdhbml6YXRpb25JbnB1dCBmcm9tICcuL2NvbXBvbmVudHMvaW5wdXRzL29yZ2FuaXphdGlvbi1pbnB1dCdcbmltcG9ydCBDb3VudHJ5RHJvcGRvd24gZnJvbSAnLi9jb21wb25lbnRzL2lucHV0cy9jb3VudHJ5LWRyb3Bkb3duJ1xuaW1wb3J0IERyb3Bkb3duIGZyb20gJy4vY29tcG9uZW50cy9pbnB1dHMvZHJvcGRvd24nXG5pbXBvcnQgVGV4dEVkaXRvciBmcm9tICcuL2NvbXBvbmVudHMvaW5wdXRzL2VkaXRvci1pbnB1dCdcbmltcG9ydCBUZXh0QXJlYSBmcm9tICcuL2NvbXBvbmVudHMvaW5wdXRzL3RleHRhcmVhLWlucHV0J1xuaW1wb3J0IEV2ZW50SW5wdXQgZnJvbSAnLi9jb21wb25lbnRzL2lucHV0cy9ldmVudC1pbnB1dCdcbmltcG9ydCBHcm91cElucHV0IGZyb20gJy4vY29tcG9uZW50cy9pbnB1dHMvZ3JvdXAtaW5wdXQnXG5pbXBvcnQgTWVtYmVySW5wdXQgZnJvbSAnLi9jb21wb25lbnRzL2lucHV0cy9tZW1iZXItaW5wdXQnXG5pbXBvcnQgU3VtbWl0SW5wdXQgZnJvbSAnLi9jb21wb25lbnRzL2lucHV0cy9zdW1taXQtaW5wdXQnXG5pbXBvcnQgU3BlYWtlcklucHV0IGZyb20gJy4vY29tcG9uZW50cy9pbnB1dHMvc3BlYWtlci1pbnB1dCdcbmltcG9ydCBUYWdJbnB1dCBmcm9tICcuL2NvbXBvbmVudHMvaW5wdXRzL3RhZy1pbnB1dCdcbmltcG9ydCBJbnB1dCBmcm9tICcuL2NvbXBvbmVudHMvaW5wdXRzL3RleHQtaW5wdXQnXG5pbXBvcnQgUGFuZWwgZnJvbSAnLi9jb21wb25lbnRzL3NlY3Rpb25zL3BhbmVsJ1xuaW1wb3J0IFNpbXBsZUxpbmtMaXN0IGZyb20gJy4vY29tcG9uZW50cy9zaW1wbGUtbGluay1saXN0L2luZGV4J1xuaW1wb3J0IFN1bW1pdERyb3Bkb3duIGZyb20gJy4vY29tcG9uZW50cy9zdW1taXQtZHJvcGRvd24vaW5kZXgnXG5pbXBvcnQgVGFibGUgZnJvbSAnLi9jb21wb25lbnRzL3RhYmxlL1RhYmxlJ1xuaW1wb3J0IFNvcnRhYmxlVGFibGUgZnJvbSAnLi9jb21wb25lbnRzL3RhYmxlLXNvcnRhYmxlL1NvcnRhYmxlVGFibGUnXG5pbXBvcnQgRWRpdGFibGVUYWJsZSBmcm9tICcuL2NvbXBvbmVudHMvdGFibGUtZWRpdGFibGUvRWRpdGFibGVUYWJsZSdcbmltcG9ydCBTZWxlY3RhYmxlVGFibGUgZnJvbSAnLi9jb21wb25lbnRzL3RhYmxlLXNlbGVjdGFibGUvU2VsZWN0YWJsZVRhYmxlJ1xuaW1wb3J0IFNpbXBsZUZvcm0gZnJvbSAnLi9jb21wb25lbnRzL2Zvcm1zL3NpbXBsZS1mb3JtJ1xuaW1wb3J0IFJzdnBGb3JtIGZyb20gJy4vY29tcG9uZW50cy9mb3Jtcy9yc3ZwLWZvcm0nO1xuaW1wb3J0IFJhZGlvTGlzdCBmcm9tICcuL2NvbXBvbmVudHMvaW5wdXRzL3JhZGlvLWxpc3QnXG5pbXBvcnQgQ2hlY2tib3hMaXN0IGZyb20gJy4vY29tcG9uZW50cy9pbnB1dHMvY2hlY2tib3gtbGlzdCdcbmltcG9ydCBBY3Rpb25Ecm9wZG93biBmcm9tICcuL2NvbXBvbmVudHMvaW5wdXRzL2FjdGlvbi1kcm9wZG93bidcbmltcG9ydCBDb3VudHJ5SW5wdXQgZnJvbSAnLi9jb21wb25lbnRzL2lucHV0cy9jb3VudHJ5LWlucHV0J1xuaW1wb3J0IExhbmd1YWdlSW5wdXQgZnJvbSAnLi9jb21wb25lbnRzL2lucHV0cy9sYW5ndWFnZS1pbnB1dCdcbmltcG9ydCBGcmVlTXVsdGlUZXh0SW5wdXQgZnJvbSBcIi4vY29tcG9uZW50cy9pbnB1dHMvZnJlZS1tdWx0aS10ZXh0LWlucHV0XCI7XG5pbXBvcnQgT1BTZXNzaW9uQ2hlY2tlciBmcm9tIFwiLi9jb21wb25lbnRzL3NlY3VyaXR5L3Nlc3Npb24tY2hlY2tlci9vcC1zZXNzaW9uLWNoZWNrZXJcIjtcbmltcG9ydCBBYnN0cmFjdEF1dGhvcml6YXRpb25DYWxsYmFja1JvdXRlIGZyb20gIFwiLi9jb21wb25lbnRzL3NlY3VyaXR5L2Fic3RyYWN0LWF1dGgtY2FsbGJhY2stcm91dGVcIjtcbmltcG9ydCBFeGNsdXNpdmUgZnJvbSBcIi4vY29tcG9uZW50cy9leGNsdXNpdmUtd3JhcHBlclwiO1xuaW1wb3J0IEZyYWdtZW50UGFyc2VyIGZyb20gXCIuL2NvbXBvbmVudHMvZnJhZ21lbi1wYXJzZXJcIjtcbmltcG9ydCBDbG9jayBmcm9tIFwiLi9jb21wb25lbnRzL2Nsb2NrXCI7XG5pbXBvcnQgQ2lyY2xlQnV0dG9uIGZyb20gXCIuL2NvbXBvbmVudHMvY2lyY2xlLWJ1dHRvblwiO1xuaW1wb3J0IFZpZGVvU3RyZWFtIGZyb20gXCIuL2NvbXBvbmVudHMvdmlkZW8tc3RyZWFtXCI7XG5pbXBvcnQgQXR0ZW5kYW5jZVRyYWNrZXIgZnJvbSBcIi4vY29tcG9uZW50cy9hdHRlbmRhbmNlLXRyYWNrZXJcIjtcbmltcG9ydCB7Z2V0Q3VycmVudFVzZXJMYW5ndWFnZX0gZnJvbSAnLi91dGlscy9tZXRob2RzJztcbmltcG9ydCB1c2VGaXRUZXh0IGZyb20gJy4vY29tcG9uZW50cy91c2UtZml0LXRleHQnO1xuaW1wb3J0IEFjY2Vzc0xldmVsc0lucHV0IGZyb20gJy4vY29tcG9uZW50cy9pbnB1dHMvYWNjZXNzLWxldmVscy1pbnB1dCc7XG5pbXBvcnQgUmVnaXN0cmF0aW9uQ29tcGFueUlucHV0IGZyb20gJy4vY29tcG9uZW50cy9pbnB1dHMvcmVnaXN0cmF0aW9uLWNvbXBhbnktaW5wdXQnO1xuaW1wb3J0IFRpY2tldFR5cGVzSW5wdXQgZnJvbSAnLi9jb21wb25lbnRzL2lucHV0cy90aWNrZXQtdHlwZXMtaW5wdXQnO1xuaW1wb3J0IEV4dHJhUXVlc3Rpb25zRm9ybSBmcm9tICcuL2NvbXBvbmVudHMvZXh0cmEtcXVlc3Rpb25zJztcblxubGV0IGxhbmd1YWdlID0gZ2V0Q3VycmVudFVzZXJMYW5ndWFnZSgpO1xuXG4vLyBsYW5ndWFnZSB3b3VsZCBiZSBzb21ldGhpbmcgbGlrZSBlcy1FUyBvciBlc19FU1xuLy8gSG93ZXZlciB3ZSBzdG9yZSBvdXIgZmlsZXMgd2l0aCBmb3JtYXQgZXMuanNvbiBvciBlbi5qc29uXG4vLyB0aGVyZWZvcmUgcmV0cmlldmUgb25seSB0aGUgZmlyc3QgMiBkaWdpdHNcblxuaWYgKGxhbmd1YWdlLmxlbmd0aCA+IDIpIHtcbiAgICBsYW5ndWFnZSA9IGxhbmd1YWdlLnNwbGl0KFwiLVwiKVswXTtcbiAgICBsYW5ndWFnZSA9IGxhbmd1YWdlLnNwbGl0KFwiX1wiKVswXTtcbn1cblxudHJ5IHtcbiAgICBULnNldFRleHRzKHJlcXVpcmUoYC4vaTE4bi8ke2xhbmd1YWdlfS5qc29uYCkpO1xufSBjYXRjaCAoZSkge1xuICAgIFQuc2V0VGV4dHMocmVxdWlyZShgLi9pMThuL2VuLmpzb25gKSk7XG59XG5cbmV4cG9ydCB7XG4gICAgQWpheExvYWRlcixcbiAgICBSYXdIVE1MLFxuICAgIEZyZWVUZXh0U2VhcmNoLFxuICAgIEdNYXAsXG4gICAgRGF0ZVRpbWVQaWNrZXIsXG4gICAgR3JvdXBlZERyb3Bkb3duLFxuICAgIFVwbG9hZElucHV0LFxuICAgIFVwbG9hZElucHV0VjIsXG4gICAgQ29tcGFueUlucHV0LFxuICAgIFNwb25zb3JJbnB1dCxcbiAgICBDb3VudHJ5SW5wdXQsXG4gICAgTGFuZ3VhZ2VJbnB1dCxcbiAgICBPcmdhbml6YXRpb25JbnB1dCxcbiAgICBDb3VudHJ5RHJvcGRvd24sXG4gICAgRHJvcGRvd24sXG4gICAgRXZlbnRJbnB1dCxcbiAgICBHcm91cElucHV0LFxuICAgIFN1bW1pdElucHV0LFxuICAgIE1lbWJlcklucHV0LFxuICAgIFNwZWFrZXJJbnB1dCxcbiAgICBUYWdJbnB1dCxcbiAgICBUZXh0RWRpdG9yLFxuICAgIFRleHRBcmVhLFxuICAgIElucHV0LFxuICAgIFBhbmVsLFxuICAgIFNpbXBsZUxpbmtMaXN0LFxuICAgIFN1bW1pdERyb3Bkb3duLFxuICAgIFRhYmxlLFxuICAgIFNvcnRhYmxlVGFibGUsXG4gICAgRWRpdGFibGVUYWJsZSxcbiAgICBTaW1wbGVGb3JtLFxuICAgIFJzdnBGb3JtLFxuICAgIFJhZGlvTGlzdCxcbiAgICBDaGVja2JveExpc3QsXG4gICAgQWN0aW9uRHJvcGRvd24sXG4gICAgRnJlZU11bHRpVGV4dElucHV0LFxuICAgIE9QU2Vzc2lvbkNoZWNrZXIsXG4gICAgQWJzdHJhY3RBdXRob3JpemF0aW9uQ2FsbGJhY2tSb3V0ZSxcbiAgICBFeGNsdXNpdmUsXG4gICAgRnJhZ21lbnRQYXJzZXIsXG4gICAgQ2xvY2ssXG4gICAgQ2lyY2xlQnV0dG9uLFxuICAgIFZpZGVvU3RyZWFtLFxuICAgIEF0dGVuZGFuY2VUcmFja2VyLFxuICAgIFNlbGVjdGFibGVUYWJsZSxcbiAgICB1c2VGaXRUZXh0LFxuICAgIEFjY2Vzc0xldmVsc0lucHV0LFxuICAgIFJlZ2lzdHJhdGlvbkNvbXBhbnlJbnB1dCxcbiAgICBUaWNrZXRUeXBlc0lucHV0LFxuICAgIEV4dHJhUXVlc3Rpb25zRm9ybSxcbn07XG4iLCIvKipcbiAqIENvcHlyaWdodCAyMDE3IE9wZW5TdGFjayBGb3VuZGF0aW9uXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiovXG5cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5cbmV4cG9ydCBjb25zdCBBamF4TG9hZGVyID0gICh7XG4gICAgc2hvdyxcbiAgICByZWxhdGl2ZSxcbiAgICBjb2xvcixcbiAgICBzaXplLFxuICAgIGNoaWxkcmVuLFxufSkgPT4ge1xuXG4gICAgbGV0IHN0eWxlcyA9IHtcbiAgICAgICAgZGlzcGxheSA6IHNob3cgPyAnYmxvY2snOiAnbm9uZScsXG4gICAgICAgIHdpZHRoOicxMDAlJyxcbiAgICAgICAgaGVpZ2h0OicxMDAlJyxcbiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlID8gJ2Fic29sdXRlJyA6ICdmaXhlZCcsXG4gICAgICAgIHpJbmRleDoxMDAwMDAwMCxcbiAgICAgICAgbWFyZ2luOidhdXRvJyxcbiAgICAgICAgY3Vyc29yOiAnd2FpdCcsXG4gICAgICAgIGJhY2tncm91bmRDb2xvcjogJ3JnYmEoMCwwLDAsMC4yKScsXG4gICAgICAgIHRvcDogMCxcbiAgICAgICAgbGVmdDogMFxuICAgIH07XG5cbiAgICBsZXQgc3R5bGVTcGlubmVyID0ge1xuICAgICAgICBmb250U2l6ZTogc2l6ZSArICdweCcsXG4gICAgICAgIGNvbG9yOiAnYmxhY2snLFxuICAgIH07XG5cbiAgICBsZXQgc3R5bGVTcGlubmVyQ29udGFpbmVyID0ge1xuICAgICAgICB3aWR0aDogJzI1MHB4JyxcbiAgICAgICAgaGVpZ2h0Oic3NXB4JyxcbiAgICAgICAgdGV4dEFsaWduOiAnY2VudGVyJyxcbiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlID8gJ3JlbGF0aXZlJyA6ICdmaXhlZCcsXG4gICAgICAgIHRvcDogcmVsYXRpdmUgPyAnNTAlJyA6ICcwJyxcbiAgICAgICAgbGVmdDogcmVsYXRpdmUgPyAnJyA6ICcwJyxcbiAgICAgICAgcmlnaHQ6JzAnLFxuICAgICAgICBib3R0b206JzAnLFxuICAgICAgICBtYXJnaW46J2F1dG8nLFxuICAgICAgICB6SW5kZXg6MTAsXG4gICAgICAgIGNvbG9yOicjZmZmZmZmJ1xuICAgIH07XG5cbiAgICBsZXQgc3R5bGVCYWNrZ3JvdW5kID0ge1xuICAgICAgICBiYWNrZ3JvdW5kOiBjb2xvcixcbiAgICAgICAgb3BhY2l0eTonMC44JyxcbiAgICAgICAgd2lkdGg6JzEwMCUnLFxuICAgICAgICBoZWlnaHQ6JzEwMCUnLFxuICAgICAgICBwb3NpdGlvbjonYWJzb2x1dGUnLFxuICAgICAgICB0b3A6MFxuICAgIH07XG5cbiAgICByZXR1cm4gKFxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImFqYXgtbG9hZGVyLWNvbnRhaW5lclwiIHN0eWxlPXtzdHlsZXN9PlxuICAgICAgICAgICAgPGRpdiBzdHlsZT17c3R5bGVTcGlubmVyQ29udGFpbmVyfT5cbiAgICAgICAgICAgICAgICA8aSBjbGFzc05hbWU9XCJmYSBmYS1zcGlubmVyIGZhLXNwaW5cIiBzdHlsZT17c3R5bGVTcGlubmVyfT48L2k+XG4gICAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICB7Y2hpbGRyZW59XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgc3R5bGU9e3N0eWxlQmFja2dyb3VuZH0gY2xhc3NOYW1lPVwibG9hZGVyLWJhY2tncm91bmRcIj48L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4pO1xufTtcbiIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjAgT3BlblN0YWNrIEZvdW5kYXRpb25cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqKi9cblxuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgaHR0cCBmcm9tICdzdXBlcmFnZW50JztcbmltcG9ydCB7Z2V0QWNjZXNzVG9rZW59IGZyb20gJy4vc2VjdXJpdHkvbWV0aG9kcyc7XG5cbi8vIFNDT1BFUyBORUVERURcbi8vICVzL21lL3N1bW1pdHMvZXZlbnRzL2xlYXZlXG4vLyAlcy9tZS9zdW1taXRzL2V2ZW50cy9lbnRlclxuXG5jbGFzcyBBdHRlbmRhbmNlVHJhY2tlciBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG5cbiAgICBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICAgICAgY29uc3Qge3RyYWNrRW50ZXIsIG9uQmVmb3JlVW5sb2FkfSA9IHRoaXM7XG5cbiAgICAgICAgLy8gdHJhY2sgZW50ZXJcbiAgICAgICAgdHJhY2tFbnRlcigpO1xuXG4gICAgICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJiZWZvcmV1bmxvYWRcIiwgb25CZWZvcmVVbmxvYWQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgICAgIGNvbnN0IHt0cmFja0xlYXZlLCBvbkJlZm9yZVVubG9hZH0gPSB0aGlzO1xuXG4gICAgICAgIC8vIHRyYWNrIGxlYXZlXG4gICAgICAgIHRyYWNrTGVhdmUoKTtcblxuICAgICAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwiYmVmb3JldW5sb2FkXCIsIG9uQmVmb3JlVW5sb2FkKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHRyYWNrRW50ZXIgPSBhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHthcGlCYXNlVXJsLCBzdW1taXRJZCwgc291cmNlSWQsIHNvdXJjZU5hbWV9ID0gdGhpcy5wcm9wcztcbiAgICAgICAgY29uc3QgbG9jYXRpb24gPSB0aGlzLmdldExvY2F0aW9uKCk7XG4gICAgICAgIHRyeXtcbiAgICAgICAgICAgIGNvbnN0IGFjY2Vzc1Rva2VuID0gYXdhaXQgZ2V0QWNjZXNzVG9rZW4oKTtcbiAgICAgICAgICAgIGh0dHAucHV0KGAke2FwaUJhc2VVcmx9L2FwaS92MS9zdW1taXRzLyR7c3VtbWl0SWR9L21ldHJpY3MvZW50ZXJgKVxuICAgICAgICAgICAgICAgIC5zZW5kKHthY2Nlc3NfdG9rZW46IGFjY2Vzc1Rva2VuLCB0eXBlOiBzb3VyY2VOYW1lLCBzb3VyY2VfaWQ6IHNvdXJjZUlkLCBsb2NhdGlvbjogbG9jYXRpb259KVxuICAgICAgICAgICAgICAgIC5lbmQoKCkgPT4gY29uc29sZS5sb2coJ0VOVEVSIFBBR0UnKSk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGUpe1xuICAgICAgICAgICAgY29uc29sZS5sb2coZSk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgdHJhY2tMZWF2ZSA9IGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3Qge2FwaUJhc2VVcmwsIHN1bW1pdElkLCBzb3VyY2VJZCwgc291cmNlTmFtZX0gPSB0aGlzLnByb3BzO1xuICAgICAgICBjb25zdCBsb2NhdGlvbiA9IHRoaXMuZ2V0TG9jYXRpb24oKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IGFjY2Vzc1Rva2VuID0gYXdhaXQgZ2V0QWNjZXNzVG9rZW4oKTtcblxuICAgICAgICAgICAgaHR0cC5wb3N0KGAke2FwaUJhc2VVcmx9L2FwaS92MS9zdW1taXRzLyR7c3VtbWl0SWR9L21ldHJpY3MvbGVhdmVgKVxuICAgICAgICAgICAgICAgIC5zZW5kKHthY2Nlc3NfdG9rZW46IGFjY2Vzc1Rva2VuLCB0eXBlOiBzb3VyY2VOYW1lLCBzb3VyY2VfaWQ6IHNvdXJjZUlkLCBsb2NhdGlvbjogbG9jYXRpb259KVxuICAgICAgICAgICAgICAgIC5lbmQoKCkgPT4gY29uc29sZS5sb2coJ0xFRlQgUEFHRScpKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZSl7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhlKTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBvbkJlZm9yZVVubG9hZCA9IGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3Qge2FwaUJhc2VVcmwsIHN1bW1pdElkLCBzb3VyY2VJZCwgc291cmNlTmFtZX0gPSB0aGlzLnByb3BzO1xuICAgICAgICBjb25zdCBsb2NhdGlvbiA9IHRoaXMuZ2V0TG9jYXRpb24oKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IGFjY2Vzc1Rva2VuID0gYXdhaXQgZ2V0QWNjZXNzVG9rZW4oKTtcbiAgICAgICAgICAgIG5hdmlnYXRvci5zZW5kQmVhY29uKFxuICAgICAgICAgICAgICAgIGAke2FwaUJhc2VVcmx9L2FwaS92MS9zdW1taXRzLyR7c3VtbWl0SWR9L21ldHJpY3MvbGVhdmU/YWNjZXNzX3Rva2VuPSR7YWNjZXNzVG9rZW59JnR5cGU9JHtzb3VyY2VOYW1lfSZzb3VyY2VfaWQ9JHtzb3VyY2VJZH0mbG9jYXRpb249JHtsb2NhdGlvbn1gLCB7fSk7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlKXtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGUpO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIGdldExvY2F0aW9uID0gKCkgPT4ge1xuICAgICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgcmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudCh3aW5kb3cubG9jYXRpb24uaHJlZik7XG4gICAgICB9XG4gICAgICByZXR1cm4gJyc7XG4gICAgfTtcblxuICAgIHJlbmRlcigpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxufVxuXG5BdHRlbmRhbmNlVHJhY2tlci5wcm9wVHlwZXMgPSB7XG4gICAgc291cmNlTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBzb3VyY2VJZDogUHJvcFR5cGVzLm51bWJlcixcbiAgICBzdW1taXRJZDogUHJvcFR5cGVzLm51bWJlci5pc1JlcXVpcmVkLFxuICAgIGFwaUJhc2VVcmw6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZFxufTtcblxuQXR0ZW5kYW5jZVRyYWNrZXIuZGVmYXVsdFByb3BzID0ge1xuICAgIHNvdXJjZUlkOiAwLFxuICAgIHNvdXJjZU5hbWU6ICdHRU5FUkFMJ1xufTtcblxuZXhwb3J0IGRlZmF1bHQgQXR0ZW5kYW5jZVRyYWNrZXI7XG5cbiIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjAgT3BlblN0YWNrIEZvdW5kYXRpb25cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqKi9cblxuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5cbmltcG9ydCBzdHlsZXMgZnJvbSAnLi9pbmRleC5tb2R1bGUuc2Nzcyc7XG5cbmNvbnN0IGlzTGl2ZSA9IChldmVudCwgbm93VXRjKSA9PiB7XG4gICAgY29uc3QgaGFzRW5kZWQgPSBub3dVdGMgPiBldmVudC5lbmRfZGF0ZTtcbiAgICBjb25zdCBoYXNTdGFydGVkID0gKGV2ZW50LnN0YXJ0X2RhdGUgLSBub3dVdGMpIDwgMTtcbiAgICByZXR1cm4gaGFzU3RhcnRlZCAmJiAhaGFzRW5kZWQ7XG59O1xuXG5jb25zdCBDaXJjbGVCdXR0b24gPSAoe2V2ZW50LCBpc1NjaGVkdWxlZCwgbm93VXRjLCBhZGRUb1NjaGVkdWxlLCByZW1vdmVGcm9tU2NoZWR1bGUsIGVudGVyQ2xpY2ssIGFsd2F5c1Nob3dFbnRlcn0pID0+IHtcblxuICAgIGNvbnN0IGlzTGl2ZU5vdyA9IGlzTGl2ZShldmVudCwgbm93VXRjKTtcbiAgICBsZXQgYnV0dG9uQ2xhc3MgPSBudWxsO1xuICAgIGxldCBpY29uQ2xhc3MgPSBudWxsO1xuICAgIGxldCBvbkNsaWNrID0gbnVsbDtcbiAgICBjb25zdCBoYW5kbGVDbGljayA9IChldiwgYWN0aW9uKSA9PiB7XG4gICAgICAgIGV2LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGV2LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICBhY3Rpb24oZXZlbnQpO1xuICAgIH07XG5cblxuICAgIGlmIChpc0xpdmVOb3cgfHwgYWx3YXlzU2hvd0VudGVyKSB7XG4gICAgICAgIGJ1dHRvbkNsYXNzID0gYCR7c3R5bGVzLmVudGVyfSBlbnRlcmA7XG4gICAgICAgIGljb25DbGFzcyA9ICdmYS1zaWduLWluJztcbiAgICAgICAgb25DbGljayA9IGV2ID0+IGhhbmRsZUNsaWNrKGV2LCBlbnRlckNsaWNrKTtcbiAgICB9IGVsc2UgaWYgKHJlbW92ZUZyb21TY2hlZHVsZSAmJiBhZGRUb1NjaGVkdWxlICYmIGlzU2NoZWR1bGVkKSB7XG4gICAgICAgIGJ1dHRvbkNsYXNzID0gYCR7c3R5bGVzLmFkZGVkfSBhZGRlZGA7XG4gICAgICAgIGljb25DbGFzcyA9ICdmYS1jaGVjayc7XG4gICAgICAgIG9uQ2xpY2sgPSBldiA9PiBoYW5kbGVDbGljayhldiwgcmVtb3ZlRnJvbVNjaGVkdWxlKTtcbiAgICB9IGVsc2UgaWYgKHJlbW92ZUZyb21TY2hlZHVsZSAmJiBhZGRUb1NjaGVkdWxlKSB7XG4gICAgICAgIGJ1dHRvbkNsYXNzID0gYCR7c3R5bGVzLmFkZH0gYWRkYDtcbiAgICAgICAgaWNvbkNsYXNzID0gJ2ZhLXBsdXMnO1xuICAgICAgICBvbkNsaWNrID0gZXYgPT4gaGFuZGxlQ2xpY2soZXYsIGFkZFRvU2NoZWR1bGUpO1xuICAgIH1cblxuICAgIGlmICghb25DbGljaykgcmV0dXJuIG51bGw7XG5cblxuICAgIHJldHVybiAoXG4gICAgICAgIDxidXR0b24gY2xhc3NOYW1lPXtgJHtzdHlsZXMuY2lyY2xlQnV0dG9ufSAke2J1dHRvbkNsYXNzfWB9IG9uQ2xpY2s9e29uQ2xpY2t9PlxuICAgICAgICAgICAgPGkgY2xhc3NOYW1lPXtgZmEgJHtpY29uQ2xhc3N9YH0gYXJpYS1oaWRkZW49XCJ0cnVlXCIgLz5cbiAgICAgICAgPC9idXR0b24+XG4gICAgKTtcbn07XG5cbkNpcmNsZUJ1dHRvbi5wcm9wVHlwZXMgPSB7XG4gICAgZXZlbnQ6IFByb3BUeXBlcy5vYmplY3QuaXNSZXF1aXJlZCxcbiAgICBub3dVdGM6IFByb3BUeXBlcy5udW1iZXIuaXNSZXF1aXJlZCxcbiAgICBpc1NjaGVkdWxlZDogUHJvcFR5cGVzLmJvb2wuaXNSZXF1aXJlZCxcbiAgICBlbnRlckNsaWNrOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgIGFkZFRvU2NoZWR1bGU6IFByb3BUeXBlcy5mdW5jLFxuICAgIHJlbW92ZUZyb21TY2hlZHVsZTogUHJvcFR5cGVzLmZ1bmMsXG4gICAgYWx3YXlzU2hvd0VudGVyOiBQcm9wVHlwZXMuYm9vbCxcbn07XG5cbkNpcmNsZUJ1dHRvbi5kZWZhdWx0UHJvcHMgPSB7XG4gICAgYWRkVG9TY2hlZHVsZTogbnVsbCxcbiAgICByZW1vdmVGcm9tU2NoZWR1bGU6IG51bGwsXG4gICAgYWx3YXlzU2hvd0VudGVyOiBmYWxzZVxufTtcblxuZXhwb3J0IGRlZmF1bHQgQ2lyY2xlQnV0dG9uO1xuIiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5tb2R1bGUuZXhwb3J0cyA9IHtcImNpcmNsZUJ1dHRvblwiOlwiXzM0bDJXbVlqc2VaR3RZWXdFQzI2WlJcIixcImFkZFwiOlwiXzEtcGMxbFlOWjI1alZSSmNDaVNFQnRcIixcImFkZGVkXCI6XCJfMkJMc193VHpyMkdfUEhHR0t1V3ZDdFwiLFwiZW50ZXJcIjpcIl8xdmJzZzZ4ZjVPV0YzaUdEUHlxXzAzXCJ9OyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjAgT3BlblN0YWNrIEZvdW5kYXRpb25cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqKi9cblxuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBtb21lbnQgZnJvbSBcIm1vbWVudC10aW1lem9uZVwiO1xuaW1wb3J0IEZyYWdtZW50UGFyc2VyIGZyb20gXCIuL2ZyYWdtZW4tcGFyc2VyXCI7XG5cbmNsYXNzIENsb2NrIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcblxuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgICAgIHN1cGVyKHByb3BzKTtcbiAgICAgICAgdGhpcy5mcmFnbWVudFBhcnNlciA9IG5ldyBGcmFnbWVudFBhcnNlcigpO1xuICAgICAgICB0aGlzLmludGVydmFsID0gbnVsbDtcbiAgICAgICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgICAgICAgIHRpbWVzdGFtcDogbnVsbFxuICAgICAgICB9XG4gICAgfVxuXG4gICAgYXN5bmMgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgICAgIGNvbnN0IHt0aW1lem9uZSA9ICdVVEMnLCBub3d9ID0gdGhpcy5wcm9wcztcbiAgICAgICAgY29uc3Qgbm93UVMgPSB0aGlzLmZyYWdtZW50UGFyc2VyLmdldFBhcmFtKCdub3cnKTtcbiAgICAgICAgY29uc3QgbW9tZW50UVMgPSBtb21lbnQudHoobm93UVMsICdZWVlZLU1NLURELGhoOm1tOnNzJywgdGltZXpvbmUpO1xuICAgICAgICBsZXQgdGltZXN0YW1wO1xuXG4gICAgICAgIGlmIChtb21lbnRRUy5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIHRpbWVzdGFtcCA9IG1vbWVudFFTLnZhbHVlT2YoKSAvIDEwMDA7XG4gICAgICAgIH0gZWxzZSBpZiAobm93KSB7XG4gICAgICAgICAgICB0aW1lc3RhbXAgPSBub3dcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IGxvY2FsID0gbW9tZW50KCkudW5peCgpO1xuICAgICAgICAgICAgY29uc3Qgc2VydmVyVGltZSA9ICBhd2FpdCB0aGlzLmdldFNlcnZlclRpbWUoKTtcbiAgICAgICAgICAgIGNvbnN0IGxvY2FsQWZ0ZXIgPSBtb21lbnQoKS51bml4KCk7XG5cbiAgICAgICAgICAgIGlmIChzZXJ2ZXJUaW1lKSB7XG4gICAgICAgICAgICAgICAgdGltZXN0YW1wID0gc2VydmVyVGltZS50aW1lc3RhbXAgKyAobG9jYWxBZnRlciAtIGxvY2FsKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGltZXN0YW1wID0gbG9jYWxBZnRlcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe3RpbWVzdGFtcH0pO1xuICAgICAgICB0aGlzLnByb3BzLm9uVGljayh0aW1lc3RhbXApO1xuXG4gICAgICAgIHRoaXMuaW50ZXJ2YWwgPSBzZXRJbnRlcnZhbCh0aGlzLnRpY2ssIDEwMDApO1xuICAgIH1cblxuICAgIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgICAgICBjbGVhckludGVydmFsKHRoaXMuaW50ZXJ2YWwpO1xuICAgIH1cblxuICAgIGdldFNlcnZlclRpbWUgPSBhc3luYyAoKSA9PiB7XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IGZldGNoKGBodHRwczovL3RpbWVpbnRlcnZhbHNpbmNlMTk3MC5hcHBzcG90LmNvbS9gKVxuICAgICAgICAgICAgLmNhdGNoKGVyciA9PiB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coZXJyKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiBhd2FpdCByZXNwb25zZS5qc29uKCk7XG4gICAgfTtcblxuICAgIHRpY2sgPSAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHt0aW1lc3RhbXB9ID0gdGhpcy5zdGF0ZTtcbiAgICAgICAgaWYgKHRpbWVzdGFtcCAhPT0gbnVsbCkgeyAgIFxuICAgICAgICAgICAgdGhpcy5wcm9wcy5vblRpY2sodGltZXN0YW1wICsgMSk7XG4gICAgICAgICAgICB0aGlzLnNldFN0YXRlKHt0aW1lc3RhbXA6IHRpbWVzdGFtcCArIDF9KVxuICAgICAgICB9XG4gICAgfTtcblxuICAgIC8vIGVwb2NoIHV0YyB0aW1lIGluIHNlY29uZHNcbiAgICBub3cgPSAoKSA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLnN0YXRlLnRpbWVzdGFtcDtcbiAgICB9O1xuXG4gICAgcmVuZGVyKCkge1xuICAgICAgICBjb25zdCB7ZGlzcGxheSwgdGltZXpvbmUgPSAnVVRDJ30gPSB0aGlzLnByb3BzO1xuICAgICAgICBjb25zdCB7dGltZXN0YW1wfSA9IHRoaXMuc3RhdGU7XG5cbiAgICAgICAgaWYgKCFkaXNwbGF5IHx8ICF0aW1lc3RhbXApIHJldHVybiBudWxsO1xuXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8ZGl2IHN0eWxlPXt7bWFyZ2luVG9wOiAnNTBweCcsIHRleHRBbGlnbjogJ2NlbnRlcicsIGZvbnRTaXplOiAnMjBweCd9fT5cbiAgICAgICAgICAgICAgICB7bW9tZW50LnR6KHRpbWVzdGFtcCoxMDAwLCB0aW1lem9uZSkuZm9ybWF0KCdZWVlZLU1NLUREIGhoOm1tOnNzJyl9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKTtcbiAgICB9XG5cbn1cblxuZXhwb3J0IGRlZmF1bHQgQ2xvY2s7XG4iLCIvKipcbiAqIENvcHlyaWdodCAyMDE5IE9wZW5TdGFjayBGb3VuZGF0aW9uXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiovXG5cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCdcblxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFeGNsdXNpdmUgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICAgICAgc3VwZXIocHJvcHMpO1xuXG4gICAgICAgIHRoaXMuc2hvd0ZpZWxkID0gdGhpcy5zaG93RmllbGQuYmluZCh0aGlzKTtcbiAgICB9XG5cbiAgICBzaG93RmllbGQoKSB7XG4gICAgICAgIGxldCB7bmFtZX0gPSB0aGlzLnByb3BzO1xuICAgICAgICBsZXQgZXhjbHVzaXZlU2VjdGlvbnMgPSB3aW5kb3cuRVhDTFVTSVZFX1NFQ1RJT05TO1xuXG4gICAgICAgIHJldHVybiBleGNsdXNpdmVTZWN0aW9ucyA/IGV4Y2x1c2l2ZVNlY3Rpb25zLmluY2x1ZGVzKG5hbWUpIDogZmFsc2U7XG4gICAgfVxuXG4gICAgcmVuZGVyKCkge1xuICAgICAgICBsZXQge2NoaWxkcmVufSA9IHRoaXMucHJvcHM7XG5cbiAgICAgICAgaWYgKHRoaXMuc2hvd0ZpZWxkKCkpIHtcbiAgICAgICAgICAgIHJldHVybiBjaGlsZHJlbjtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBudWxsO1xuXG4gICAgfVxufVxuIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxNyBPcGVuU3RhY2sgRm91bmRhdGlvblxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICoqL1xuXG5pbXBvcnQgUmVhY3QsIHt1c2VFZmZlY3QsIHVzZVJlZiwgdXNlU3RhdGV9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5cbmltcG9ydCBSYXdIVE1MIGZyb20gJy4uL3Jhdy1odG1sJ1xuaW1wb3J0IElucHV0IGZyb20gJy4uL2lucHV0cy90ZXh0LWlucHV0J1xuaW1wb3J0IERyb3Bkb3duIGZyb20gJy4uL2lucHV0cy9kcm9wZG93bidcbmltcG9ydCBSYWRpb0xpc3QgZnJvbSAnLi4vaW5wdXRzL3JhZGlvLWxpc3QnXG5pbXBvcnQgQ2hlY2tib3hMaXN0IGZyb20gJy4uL2lucHV0cy9jaGVja2JveC1saXN0J1xuaW1wb3J0IFF1ZXN0aW9uc1NldCBmcm9tICcuLi8uLi91dGlscy9xdWVzdGlvbnMtc2V0JztcbmltcG9ydCB7RmllbGQsIEZvcm19IGZyb20gXCJyZWFjdC1maW5hbC1mb3JtXCI7XG5cbmNvbnN0IEV4dHJhUXVlc3Rpb25zRm9ybSA9ICh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhUXVlc3Rpb25zLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VyQW5zd2VycyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25BbnN3ZXJDaGFuZ2VzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWUgPSAncXVlc3Rpb25zLWZvcm0nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxdWVzdGlvbkNvbnRhaW5lckNsYXNzTmFtZSA9ICdxdWVzdGlvbi1jb250YWluZXInLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxdWVzdGlvbkxhYmVsQ29udGFpbmVyQ2xhc3NOYW1lID0gJ3F1ZXN0aW9uLWxhYmVsLWNvbnRhaW5lcicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXN0aW9uQ29udHJvbENvbnRhaW5lckNsYXNzTmFtZT0gJ3F1ZXN0aW9uLWNvbnRyb2wtY29udGFpbmVyJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybVJlZiA9IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRPbmx5ID0gZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlYnVnID0gZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1dHRvblRleHQgPSAnU3VibWl0JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVxdWlyZWRFcnJvck1lc3NhZ2UgPSAnUmVxdWlyZWQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWYWxpZGF0aW9uRXJyb3JDbGFzc05hbWUgPSAnZXh0cmEtcXVlc3Rpb24tZXJyb3InXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkgPT4ge1xuXG4gICAgbGV0IHN1Ym1pdCA9IG51bGw7XG5cbiAgICBjb25zdCBxdWVzdGlvblJlZiA9IHVzZVJlZih7fSk7XG5cbiAgICBjb25zdCBbYW5zd2Vycywgc2V0QW5zd2Vyc10gPSB1c2VTdGF0ZSh7fSk7XG5cbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICBmb3JtYXRVc2VyQW5zd2VycygpO1xuICAgIH0sIFtleHRyYVF1ZXN0aW9uc10pXG5cbiAgICBjb25zdCBmb3JtYXRVc2VyQW5zd2VycyA9ICgpID0+IHtcbiAgICAgICAgY29uc3QgcXMgPSBuZXcgUXVlc3Rpb25zU2V0KGV4dHJhUXVlc3Rpb25zLCB1c2VyQW5zd2Vycyk7XG4gICAgICAgIHNldEFuc3dlcnMocXMuZm9ybWF0QW5zd2VycygpKTtcbiAgICB9XG5cbiAgICBjb25zdCBDb25kaXRpb24gPSAoe3doZW4sIHJ1bGUsIGNoaWxkcmVufSkgPT4gKFxuICAgICAgICA8RmllbGQgbmFtZT17d2hlbn0gc3Vic2NyaXB0aW9uPXt7dmFsdWU6IHRydWV9fT5cbiAgICAgICAgICAgIHsoe2lucHV0OiB7dmFsdWV9fSkgPT5cbiAgICAgICAgICAgICAgICBjaGVja1Zpc2liaWxpdHkocnVsZSwgY2hlY2tSdWxlKHZhbHVlLCBydWxlKSwgY2hpbGRyZW4pXG4gICAgICAgICAgICB9XG4gICAgICAgIDwvRmllbGQ+XG4gICAgKTtcblxuICAgIGNvbnN0IEVycm9yID0gKHsgbmFtZSB9KSA9PiAoXG4gICAgICAgIDxGaWVsZCBuYW1lPXtuYW1lfSBzdWJzY3JpcHRpb249e3sgZXJyb3I6IHRydWUsIHRvdWNoZWQ6IHRydWUgfX0+XG4gICAgICAgICAgICB7KHsgbWV0YTogeyBlcnJvciwgdG91Y2hlZCB9IH0pID0+XG4gICAgICAgICAgICAgICAgZXJyb3IgJiYgdG91Y2hlZCA/IDxzcGFuIGNsYXNzTmFtZT17VmFsaWRhdGlvbkVycm9yQ2xhc3NOYW1lfT57ZXJyb3J9PC9zcGFuPiA6IG51bGxcbiAgICAgICAgICAgIH1cbiAgICAgICAgPC9GaWVsZD5cbiAgICApXG5cbiAgICBjb25zdCBjaGVja1J1bGUgPSAodmFsdWUsIHJ1bGUpID0+IHtcbiAgICAgICAgbGV0IHZhbHVlcyA9IHJ1bGUuYW5zd2VyX3ZhbHVlcztcblxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICAgIGlmICghdmFsdWUubGVuZ3RoKSByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICBsZXQgcmVzID0gcnVsZS5hbndlcl92YWx1ZXNfb3BlcmF0b3IgPT09IFwiQW5kXCI7XG4gICAgICAgICAgICB2YWx1ZXMuZm9yRWFjaCgodikgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChydWxlLmFud2VyX3ZhbHVlc19vcGVyYXRvciA9PT0gXCJBbmRcIikge1xuICAgICAgICAgICAgICAgICAgICByZXMgPSByZXMgJiYgdmFsdWUuaW5jbHVkZXMocGFyc2VJbnQodikpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIE9yXG4gICAgICAgICAgICAgICAgICAgIHJlcyA9IHJlcyB8fCB2YWx1ZS5pbmNsdWRlcyhwYXJzZUludCh2KSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YWx1ZXMuaW5jbHVkZXModmFsdWUudG9TdHJpbmcoKSk7XG4gICAgfTtcblxuICAgIGNvbnN0IGNoZWNrVmlzaWJpbGl0eSA9IChydWxlLCBydWxlUmVzdWx0LCBjaGlsZHJlbikgPT4ge1xuICAgICAgICBpZiAocnVsZS52aXNpYmlsaXR5ID09PSBcIlZpc2libGVcIikge1xuICAgICAgICAgICAgaWYgKHJ1bGUudmlzaWJpbGl0eV9jb25kaXRpb24gPT09IFwiRXF1YWxcIikge1xuICAgICAgICAgICAgICAgIGlmKHJ1bGVSZXN1bHQpIHJldHVybiBjaGlsZHJlbjtcbiAgICAgICAgICAgICAgICBkZWxldGUgcXVlc3Rpb25SZWYuY3VycmVudFtydWxlLnN1Yl9xdWVzdGlvbi5pZF1cbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIE5vbiBFcXVhbFxuICAgICAgICAgICAgaWYoIXJ1bGVSZXN1bHQpe1xuICAgICAgICAgICAgICByZXR1cm4gY2hpbGRyZW47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkZWxldGUgcXVlc3Rpb25SZWYuY3VycmVudFtydWxlLnN1Yl9xdWVzdGlvbi5pZF1cbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIC8vIG5vdCB2aXNpYmxlXG4gICAgICAgIGlmIChydWxlLnZpc2liaWxpdHlfY29uZGl0aW9uID09PSBcIkVxdWFsXCIpIHtcbiAgICAgICAgICAgIGlmKCFydWxlUmVzdWx0KSByZXR1cm4gY2hpbGRyZW47XG4gICAgICAgICAgICBkZWxldGUgcXVlc3Rpb25SZWYuY3VycmVudFtydWxlLnN1Yl9xdWVzdGlvbi5pZF1cbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGlmKHJ1bGVSZXN1bHQpIHJldHVybiBjaGlsZHJlbjtcbiAgICAgICAgZGVsZXRlIHF1ZXN0aW9uUmVmLmN1cnJlbnRbcnVsZS5zdWJfcXVlc3Rpb24uaWRdXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH07XG5cbiAgICBjb25zdCByZW5kZXJRdWVzdGlvbiA9IChxKSA9PiB7XG4gICAgICAgIGxldCBxdWVzdGlvblZhbHVlcyA9IHEudmFsdWVzO1xuICAgICAgICAvLyBAc2VlIGh0dHBzOi8vY29kZXNhbmRib3guaW8vcy92ZzA1eT9maWxlPS9pbmRleC5qc1xuICAgICAgICBpZiAocS50eXBlID09PSBcIlRleHRcIikge1xuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGtleT17cS5uYW1lfSByZWY9e2VsID0+IHF1ZXN0aW9uUmVmLmN1cnJlbnRbcS5pZF0gPSBlbH0gY2xhc3NOYW1lPXtxdWVzdGlvbkNvbnRhaW5lckNsYXNzTmFtZX0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8UmF3SFRNTCBjbGFzc05hbWU9e3F1ZXN0aW9uTGFiZWxDb250YWluZXJDbGFzc05hbWV9PntxLm1hbmRhdG9yeSA/IHEubGFiZWw/LmVuZHNXaXRoKCc8L3A+JykgPyBxLmxhYmVsLnJlcGxhY2UoLzxcXC9wPiQvZywgXCIgPGI+KjwvYj48L3A+XCIpIDogYCR7cS5sYWJlbH0gPGI+KjwvYj5gIDogcS5sYWJlbH08L1Jhd0hUTUw+XG4gICAgICAgICAgICAgICAgICAgICAgICA8RmllbGQgbmFtZT17cS5uYW1lfSBjbGFzc05hbWU9e3F1ZXN0aW9uQ29udHJvbENvbnRhaW5lckNsYXNzTmFtZX0gdHlwZT1cInRleHRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7cHJvcHMgPT4gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8SW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9e3EubmFtZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkPXtgJHtxLmlkfWB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT17cHJvcHMuaW5wdXQudmFsdWV9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17cHJvcHMuaW5wdXQub25DaGFuZ2V9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj17cS5wbGFjZWhvbGRlcn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9GaWVsZD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxFcnJvciBuYW1lPXtxLm5hbWV9Lz5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIHtxLnN1Yl9xdWVzdGlvbl9ydWxlcz8ubGVuZ3RoID4gMCAmJlxuICAgICAgICAgICAgICAgICAgICBxLnN1Yl9xdWVzdGlvbl9ydWxlcy5tYXAoKHIpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPENvbmRpdGlvbiB3aGVuPXtxLm5hbWV9IHJ1bGU9e3J9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7cmVuZGVyUXVlc3Rpb24oci5zdWJfcXVlc3Rpb24pfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvQ29uZGl0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGlmIChxLnR5cGUgPT09IFwiVGV4dEFyZWFcIikge1xuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGtleT17cS5uYW1lfSByZWY9e2VsID0+IHF1ZXN0aW9uUmVmLmN1cnJlbnRbcS5pZF0gPSBlbH0gY2xhc3NOYW1lPXtxdWVzdGlvbkNvbnRhaW5lckNsYXNzTmFtZX0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8UmF3SFRNTCBjbGFzc05hbWU9e3F1ZXN0aW9uTGFiZWxDb250YWluZXJDbGFzc05hbWV9PntxLm1hbmRhdG9yeSA/IHEubGFiZWw/LmVuZHNXaXRoKCc8L3A+JykgPyBxLmxhYmVsLnJlcGxhY2UoLzxcXC9wPiQvZywgXCIgPGI+KjwvYj48L3A+XCIpIDogYCR7cS5sYWJlbH0gPGI+KjwvYj5gIDogcS5sYWJlbH08L1Jhd0hUTUw+XG4gICAgICAgICAgICAgICAgICAgICAgICA8RmllbGQgY2xhc3NOYW1lPXtxdWVzdGlvbkNvbnRyb2xDb250YWluZXJDbGFzc05hbWV9IG5hbWU9e3EubmFtZX0gaWQ9e2Ake3EuaWR9YH0gY29tcG9uZW50PVwidGV4dGFyZWFcIi8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8RXJyb3IgbmFtZT17cS5uYW1lfS8+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICB7cS5zdWJfcXVlc3Rpb25fcnVsZXM/Lmxlbmd0aCA+IDAgJiZcbiAgICAgICAgICAgICAgICAgICAgcS5zdWJfcXVlc3Rpb25fcnVsZXMubWFwKChyKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxDb25kaXRpb24gd2hlbj17cS5uYW1lfSBydWxlPXtyfT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3JlbmRlclF1ZXN0aW9uKHIuc3ViX3F1ZXN0aW9uKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0NvbmRpdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIH0pfVxuICAgICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocS50eXBlID09PSBcIkNoZWNrQm94XCIpIHtcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBrZXk9e3EubmFtZX0gcmVmPXtlbCA9PiBxdWVzdGlvblJlZi5jdXJyZW50W3EuaWRdID0gZWx9IHN0eWxlPXt7ZGlzcGxheTogJ2ZsZXgnfX0gY2xhc3NOYW1lPXtxdWVzdGlvbkNvbnRhaW5lckNsYXNzTmFtZX0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8RmllbGQgY2xhc3NOYW1lPXtxdWVzdGlvbkNvbnRyb2xDb250YWluZXJDbGFzc05hbWV9IG5hbWU9e3EubmFtZX0gaWQ9e2Ake3EuaWR9YH0gdHlwZT1cImNoZWNrYm94XCIgY29tcG9uZW50PVwiaW5wdXRcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPFJhd0hUTUwgY2xhc3NOYW1lPXtgZXEtY2hlY2tib3gtbGFiZWwgJHtxdWVzdGlvbkxhYmVsQ29udGFpbmVyQ2xhc3NOYW1lfWB9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtxLm1hbmRhdG9yeSA/IHEubGFiZWw/LmVuZHNXaXRoKCc8L3A+JykgPyBxLmxhYmVsLnJlcGxhY2UoLzxcXC9wPiQvZywgXCIgPGI+KjwvYj48L3A+XCIpIDogYCR7cS5sYWJlbH0gPGI+KjwvYj5gIDogcS5sYWJlbH1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvUmF3SFRNTD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxFcnJvciBuYW1lPXtxLm5hbWV9Lz5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIHtxLnN1Yl9xdWVzdGlvbl9ydWxlcz8ubGVuZ3RoID4gMCAmJlxuICAgICAgICAgICAgICAgICAgICBxLnN1Yl9xdWVzdGlvbl9ydWxlcy5tYXAoKHIpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPENvbmRpdGlvbiB3aGVuPXtxLm5hbWV9IHJ1bGU9e3J9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7cmVuZGVyUXVlc3Rpb24oci5zdWJfcXVlc3Rpb24pfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvQ29uZGl0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGlmIChxLnR5cGUgPT09IFwiUmFkaW9CdXR0b25MaXN0XCIpIHtcbiAgICAgICAgICAgIHF1ZXN0aW9uVmFsdWVzID0gcXVlc3Rpb25WYWx1ZXMubWFwKHZhbCA9PiAoey4uLnZhbCwgdmFsdWU6IHZhbC5pZH0pKTtcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBrZXk9e3EubmFtZX0gcmVmPXtlbCA9PiBxdWVzdGlvblJlZi5jdXJyZW50W3EuaWRdID0gZWx9IGNsYXNzTmFtZT17cXVlc3Rpb25Db250YWluZXJDbGFzc05hbWV9PlxuICAgICAgICAgICAgICAgICAgICAgICAgPFJhd0hUTUwgY2xhc3NOYW1lPXtxdWVzdGlvbkxhYmVsQ29udGFpbmVyQ2xhc3NOYW1lfT57cS5tYW5kYXRvcnkgPyBxLmxhYmVsPy5lbmRzV2l0aCgnPC9wPicpID8gcS5sYWJlbC5yZXBsYWNlKC88XFwvcD4kL2csIFwiIDxiPio8L2I+PC9wPlwiKSA6IGAke3EubGFiZWx9IDxiPio8L2I+YCA6IHEubGFiZWx9PC9SYXdIVE1MPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3F1ZXN0aW9uQ29udHJvbENvbnRhaW5lckNsYXNzTmFtZX0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZpZWxkIG5hbWU9e3EubmFtZX0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtwcm9wcyA9PiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8UmFkaW9MaXN0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT17cS5uYW1lfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkPXtgJHtxLmlkfWB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3ZlcnJpZGVDU1M9e3RydWV9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e3Byb3BzLmlucHV0LnZhbHVlfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnM9e3F1ZXN0aW9uVmFsdWVzfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXtwcm9wcy5pbnB1dC5vbkNoYW5nZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9GaWVsZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8RXJyb3IgbmFtZT17cS5uYW1lfS8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIHtxLnN1Yl9xdWVzdGlvbl9ydWxlcz8ubGVuZ3RoID4gMCAmJlxuICAgICAgICAgICAgICAgICAgICBxLnN1Yl9xdWVzdGlvbl9ydWxlcy5tYXAoKHIpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPENvbmRpdGlvbiB3aGVuPXtxLm5hbWV9IHJ1bGU9e3J9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7cmVuZGVyUXVlc3Rpb24oci5zdWJfcXVlc3Rpb24pfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvQ29uZGl0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGlmIChxLnR5cGUgPT09IFwiQ29tYm9Cb3hcIikge1xuICAgICAgICAgICAgcXVlc3Rpb25WYWx1ZXMgPSBxdWVzdGlvblZhbHVlcy5tYXAodmFsID0+ICh7Li4udmFsLCB2YWx1ZTogdmFsLmlkfSkpO1xuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGtleT17cS5uYW1lfSByZWY9e2VsID0+IHF1ZXN0aW9uUmVmLmN1cnJlbnRbcS5pZF0gPSBlbH0gY2xhc3NOYW1lPXtxdWVzdGlvbkNvbnRhaW5lckNsYXNzTmFtZX0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8UmF3SFRNTCBjbGFzc05hbWU9e3F1ZXN0aW9uTGFiZWxDb250YWluZXJDbGFzc05hbWV9PntxLm1hbmRhdG9yeSA/IHEubGFiZWw/LmVuZHNXaXRoKCc8L3A+JykgPyBxLmxhYmVsLnJlcGxhY2UoLzxcXC9wPiQvZywgXCIgPGI+KjwvYj48L3A+XCIpIDogYCR7cS5sYWJlbH0gPGI+KjwvYj5gIDogcS5sYWJlbH08L1Jhd0hUTUw+XG4gICAgICAgICAgICAgICAgICAgICAgICA8RmllbGQgbmFtZT17cS5uYW1lfSBjbGFzc05hbWU9e3F1ZXN0aW9uQ29udHJvbENvbnRhaW5lckNsYXNzTmFtZX0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3Byb3BzID0+IChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPERyb3Bkb3duXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lPXtxLm5hbWV9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZD17YCR7cS5pZH1gfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3ZlcnJpZGVDU1M9e3RydWV9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT17cHJvcHMuaW5wdXQudmFsdWV9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zPXtxdWVzdGlvblZhbHVlc31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXtwcm9wcy5pbnB1dC5vbkNoYW5nZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9GaWVsZD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxFcnJvciBuYW1lPXtxLm5hbWV9Lz5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIHtxLnN1Yl9xdWVzdGlvbl9ydWxlcz8ubGVuZ3RoID4gMCAmJlxuICAgICAgICAgICAgICAgICAgICBxLnN1Yl9xdWVzdGlvbl9ydWxlcy5tYXAoKHIpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPENvbmRpdGlvbiB3aGVuPXtxLm5hbWV9IHJ1bGU9e3J9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7cmVuZGVyUXVlc3Rpb24oci5zdWJfcXVlc3Rpb24pfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvQ29uZGl0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGlmIChxLnR5cGUgPT09IFwiQ2hlY2tCb3hMaXN0XCIpIHtcbiAgICAgICAgICAgIHF1ZXN0aW9uVmFsdWVzID0gcXVlc3Rpb25WYWx1ZXMubWFwKHZhbCA9PiAoey4uLnZhbCwgdmFsdWU6IHZhbC5pZH0pKTtcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBrZXk9e3EubmFtZX0gcmVmPXtlbCA9PiBxdWVzdGlvblJlZi5jdXJyZW50W3EuaWRdID0gZWx9IGNsYXNzTmFtZT17cXVlc3Rpb25Db250YWluZXJDbGFzc05hbWV9PlxuICAgICAgICAgICAgICAgICAgICAgICAgPFJhd0hUTUwgY2xhc3NOYW1lPXtxdWVzdGlvbkxhYmVsQ29udGFpbmVyQ2xhc3NOYW1lfT57cS5tYW5kYXRvcnkgPyBxLmxhYmVsPy5lbmRzV2l0aCgnPC9wPicpID8gcS5sYWJlbC5yZXBsYWNlKC88XFwvcD4kL2csIFwiIDxiPio8L2I+PC9wPlwiKSA6IGAke3EubGFiZWx9IDxiPio8L2I+YCA6IHEubGFiZWx9PC9SYXdIVE1MPlxuICAgICAgICAgICAgICAgICAgICAgICAgPEZpZWxkIG5hbWU9e3EubmFtZX0gY2xhc3NOYW1lPXtxdWVzdGlvbkNvbnRyb2xDb250YWluZXJDbGFzc05hbWV9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtwcm9wcyA9PiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxDaGVja2JveExpc3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkPXtgJHtxLmlkfWB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lPXtxLm5hbWV9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT17cHJvcHMuaW5wdXQudmFsdWV9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zPXtxdWVzdGlvblZhbHVlc31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXtwcm9wcy5pbnB1dC5vbkNoYW5nZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9GaWVsZD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxFcnJvciBuYW1lPXtxLm5hbWV9Lz5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIHtxLnN1Yl9xdWVzdGlvbl9ydWxlcz8ubGVuZ3RoID4gMCAmJlxuICAgICAgICAgICAgICAgICAgICBxLnN1Yl9xdWVzdGlvbl9ydWxlcy5tYXAoKHIpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPENvbmRpdGlvbiB3aGVuPXtxLm5hbWV9IHJ1bGU9e3J9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7cmVuZGVyUXVlc3Rpb24oci5zdWJfcXVlc3Rpb24pfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvQ29uZGl0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH07XG5cbiAgICBjb25zdCBpc1Zpc2libGUgPSAocSkgPT4ge1xuICAgICAgICByZXR1cm4gISFxdWVzdGlvblJlZi5jdXJyZW50W3EuaWRdO1xuICAgIH07XG5cbiAgICBjb25zdCB2YWxpZGF0ZVF1ZXN0aW9uID0gKHEsIHZhbHVlcywgZXJyb3JzKSA9PiB7XG4gICAgICAgIGlmIChxLm1hbmRhdG9yeSAmJiBpc1Zpc2libGUocSkpIHtcbiAgICAgICAgICAgIGlmICghdmFsdWVzLmhhc093blByb3BlcnR5KHEubmFtZSkgfHwgdmFsdWVzW3EubmFtZV0gPT09IFwiXCIgfHwgdmFsdWVzW3EubmFtZV0ubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgZXJyb3JzW3EubmFtZV0gPSBSZXF1aXJlZEVycm9yTWVzc2FnZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyB2YWxpZGF0ZSBzdWIgcnVsZXNcbiAgICAgICAgcS5zdWJfcXVlc3Rpb25fcnVsZXM/LmZvckVhY2goKHIpID0+IHtcbiAgICAgICAgICAgIHZhbGlkYXRlUXVlc3Rpb24oci5zdWJfcXVlc3Rpb24sIHZhbHVlcywgZXJyb3JzKTtcbiAgICAgICAgfSk7XG4gICAgfTtcblxuICAgIGNvbnN0IG9uU3VibWl0ID0gKHZhbHVlcykgPT4ge1xuICAgICAgICAgIG9uQW5zd2VyQ2hhbmdlcyh2YWx1ZXMpXG4gICAgfTtcblxuICAgIGNvbnN0IHZhbGlkYXRlID0gKHZhbHVlcykgPT4ge1xuICAgICAgICBjb25zdCBlcnJvcnMgPSB7fTtcbiAgICAgICAgZXh0cmFRdWVzdGlvbnMuZm9yRWFjaCggcSA9PiB7XG4gICAgICAgICAgICB2YWxpZGF0ZVF1ZXN0aW9uKHEsIHZhbHVlcywgZXJyb3JzKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBlcnJvcnM7XG4gICAgfVxuXG4gICAgcmV0dXJuIChcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e2NsYXNzTmFtZX0+XG4gICAgICAgICAgICA8Rm9ybVxuICAgICAgICAgICAgICAgIHZhbGlkYXRlPXt2YWxpZGF0ZX1cbiAgICAgICAgICAgICAgICBvblN1Ym1pdD17b25TdWJtaXR9XG4gICAgICAgICAgICAgICAgaW5pdGlhbFZhbHVlcz17YW5zd2Vyc30+XG5cbiAgICAgICAgICAgICAgICB7KHtoYW5kbGVTdWJtaXQsIGZvcm0sIHN1Ym1pdHRpbmcsIHByaXN0aW5lLCB2YWx1ZXN9KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHN1Ym1pdCA9IGhhbmRsZVN1Ym1pdDtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgICAgIDxmb3JtIG9uU3VibWl0PXtoYW5kbGVTdWJtaXR9IHJlZj17Zm9ybVJlZn0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3JlYWRPbmx5ID9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpZWxkc2V0IGRpc2FibGVkPVwiZGlzYWJsZWRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtleHRyYVF1ZXN0aW9ucy5tYXAoKHEpID0+IHJlbmRlclF1ZXN0aW9uKHEpKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9maWVsZHNldD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYVF1ZXN0aW9ucy5tYXAoKHEpID0+IHJlbmRlclF1ZXN0aW9uKHEpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7ZGVidWcgJiYgPHByZT57SlNPTi5zdHJpbmdpZnkodmFsdWVzLCAwLCAyKX08L3ByZT59XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Zvcm0+XG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgIDwvRm9ybT5cbiAgICAgICAgICAgIHshZm9ybVJlZiAmJlxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIHR5cGU9XCJzdWJtaXRcIlxuICAgICAgICAgICAgICAgIG9uQ2xpY2s9eyhldmVudCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBzdWJtaXQoZXZlbnQpO1xuICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgc3R5bGU9e3ttYXJnaW5Ub3A6IDEwfX1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICB7YnV0dG9uVGV4dH1cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgfVxuICAgICAgICA8L2Rpdj5cbiAgICApXG59XG5cbkV4dHJhUXVlc3Rpb25zRm9ybS5wcm9wVHlwZXMgPSB7XG4gICAgZXh0cmFRdWVzdGlvbnM6IFByb3BUeXBlcy5hcnJheS5pc1JlcXVpcmVkLFxuICAgIHVzZXJBbnN3ZXJzOiBQcm9wVHlwZXMuYXJyYXkuaXNSZXF1aXJlZCxcbiAgICBvbkFuc3dlckNoYW5nZXM6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIGZvcm1SZWY6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1xuICAgICAgICBQcm9wVHlwZXMuZnVuYyxcbiAgICAgICAgUHJvcFR5cGVzLnNoYXBlKHtjdXJyZW50OiBQcm9wVHlwZXMuYW55fSlcbiAgICBdKSxcbiAgICBkZWJ1ZzogUHJvcFR5cGVzLmJvb2wsXG4gICAgYnV0dG9uVGV4dDogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBxdWVzdGlvbkNvbnRhaW5lckNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBxdWVzdGlvbkxhYmVsQ29udGFpbmVyQ2xhc3NOYW1lIDogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBxdWVzdGlvbkNvbnRyb2xDb250YWluZXJDbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgUmVxdWlyZWRFcnJvck1lc3NhZ2U6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgVmFsaWRhdGlvbkVycm9yQ2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxufTtcblxuZXhwb3J0IGRlZmF1bHQgRXh0cmFRdWVzdGlvbnNGb3JtOyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTggT3BlblN0YWNrIEZvdW5kYXRpb25cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqKi9cblxuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0ICdhd2Vzb21lLWJvb3RzdHJhcC1jaGVja2JveC9hd2Vzb21lLWJvb3RzdHJhcC1jaGVja2JveC5jc3MnXG5pbXBvcnQgSW5wdXQgZnJvbSAnLi4vaW5wdXRzL3RleHQtaW5wdXQnXG5pbXBvcnQgRHJvcGRvd24gZnJvbSAnLi4vaW5wdXRzL2Ryb3Bkb3duJ1xuaW1wb3J0IFJhd0hUTUwgZnJvbSAnLi4vcmF3LWh0bWwnXG5pbXBvcnQgQ2hlY2tib3hMaXN0IGZyb20gJy4uL2lucHV0cy9jaGVja2JveC1saXN0J1xuaW1wb3J0IFJhZGlvTGlzdCBmcm9tICcuLi9pbnB1dHMvcmFkaW8tbGlzdCdcblxuXG5jbGFzcyBSc3ZwRm9ybSBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICAgICAgc3VwZXIocHJvcHMpO1xuXG4gICAgICAgIHRoaXMuc3RhdGUgPSB7XG4gICAgICAgICAgICBhbnN3ZXJzOiBwcm9wcy5xdWVzdGlvbnMubWFwKHEgPT4gKHtxdWVzdGlvbl9pZDogcS5pZCwgdmFsdWU6IG51bGx9KSksXG4gICAgICAgICAgICBlcnJvcnM6IHByb3BzLmVycm9yc1xuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMuaGFuZGxlQ2hhbmdlID0gdGhpcy5oYW5kbGVDaGFuZ2UuYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5oYXNFcnJvcnMgPSB0aGlzLmhhc0Vycm9ycy5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLmhhbmRsZVN1Ym1pdCA9IHRoaXMuaGFuZGxlU3VibWl0LmJpbmQodGhpcyk7XG4gICAgfVxuXG4gICAgcmVuZGVyUXVlc3Rpb24ocSkge1xuICAgICAgICBjb25zdCB7YW5zd2Vyc30gPSB0aGlzLnN0YXRlO1xuICAgICAgICBjb25zdCB2YWx1ZSA9IGFuc3dlcnMuZmluZChhID0+IGEucXVlc3Rpb25faWQgPT09IHEuaWQpLnZhbHVlO1xuXG4gICAgICAgIHN3aXRjaChxLmNsYXNzX25hbWUpIHtcbiAgICAgICAgICAgIGNhc2UgJ1JTVlBNZW1iZXJFbWFpbFF1ZXN0aW9uVGVtcGxhdGUnOlxuICAgICAgICAgICAgY2FzZSAnUlNWUE1lbWJlckZpcnN0TmFtZVF1ZXN0aW9uVGVtcGxhdGUnOlxuICAgICAgICAgICAgY2FzZSAnUlNWUE1lbWJlckxhc3ROYW1lUXVlc3Rpb25UZW1wbGF0ZSc6XG4gICAgICAgICAgICBjYXNlICdSU1ZQVGV4dEJveFF1ZXN0aW9uVGVtcGxhdGUnOlxuICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgIDxJbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgaWQ9e3EuaWR9XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT17dmFsdWUgfHwgJyd9XG4gICAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17dGhpcy5oYW5kbGVDaGFuZ2V9XG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJmb3JtLWNvbnRyb2xcIlxuICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3I9e3RoaXMuaGFzRXJyb3JzKHEuaWQpfVxuICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdSU1ZQVGV4dEFyZWFRdWVzdGlvblRlbXBsYXRlJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICA8dGV4dGFyZWFcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkPXtxLmlkfVxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e3ZhbHVlIHx8ICcnfVxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiZm9ybS1jb250cm9sXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXt0aGlzLmhhbmRsZUNoYW5nZX1cbiAgICAgICAgICAgICAgICAgICAgLz4pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnUlNWUExpdGVyYWxDb250ZW50UXVlc3Rpb25UZW1wbGF0ZSc6XG4gICAgICAgICAgICAgICAgcmV0dXJuICg8ZGl2PjxSYXdIVE1MPntxLnZhbHVlfTwvUmF3SFRNTD48L2Rpdj4pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnUlNWUENoZWNrQm94TGlzdFF1ZXN0aW9uVGVtcGxhdGUnOlxuICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgIDxDaGVja2JveExpc3RcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkPXtxLmlkfVxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e3ZhbHVlfVxuICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucz17cS52YWx1ZXMubWFwKHYgPT4gKHt2YWx1ZTogYCR7di5pZH1gLCBsYWJlbDogdi5sYWJlbH0pKX1cbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXt0aGlzLmhhbmRsZUNoYW5nZX1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yPXt0aGlzLmhhc0Vycm9ycyhxLmlkKX1cbiAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnUlNWUFJhZGlvQnV0dG9uTGlzdFF1ZXN0aW9uVGVtcGxhdGUnOlxuICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgIDxSYWRpb0xpc3RcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkPXtxLmlkfVxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e3ZhbHVlfVxuICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9e3RoaXMuaGFuZGxlQ2hhbmdlfVxuICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucz17cS52YWx1ZXMubWFwKHYgPT4gKHt2YWx1ZTogYCR7di5pZH1gLCBsYWJlbDogdi5sYWJlbH0pKX1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yPXt0aGlzLmhhc0Vycm9ycyhxLmlkKX1cbiAgICAgICAgICAgICAgICAgICAgICAgIHNpbXBsZVxuICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdSU1ZQRHJvcERvd25RdWVzdGlvblRlbXBsYXRlJzpcbiAgICAgICAgICAgICAgICBsZXQgdmFsdWVzID0gKHEuaXNfY291bnRyeV9zZWxlY3RvcikgPyBxLnZhbHVlcy5tYXAodiA9PiAoe3ZhbHVlOnYuaWQsIGxhYmVsOiB2LnZhbHVlfSkpIDogcS52YWx1ZXM7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICA8RHJvcGRvd25cbiAgICAgICAgICAgICAgICAgICAgICAgIGlkPXtxLmlkfVxuICAgICAgICAgICAgICAgICAgICAgICAgaXNNdWx0aT17cS5pc19tdWx0aXNlbGVjdH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPXt2YWx1ZX1cbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXt0aGlzLmhhbmRsZUNoYW5nZX1cbiAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPXtxLmVtcHR5X3N0cmluZ31cbiAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnM9e3ZhbHVlc31cbiAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaGFuZGxlQ2hhbmdlKGV2KSB7XG4gICAgICAgIGxldCBhbnN3ZXJzID0gWy4uLnRoaXMuc3RhdGUuYW5zd2Vyc107XG4gICAgICAgIGxldCB7dmFsdWUsIGlkfSA9IGV2LnRhcmdldDtcblxuICAgICAgICBpZiAoZXYudGFyZ2V0LnR5cGUgPT09ICdkYXRldGltZScpIHtcbiAgICAgICAgICAgIHZhbHVlID0gdmFsdWUudmFsdWVPZigpIC8gMTAwMDtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBhbnN3ZXIgPSBhbnN3ZXJzLmZpbmQoYSA9PiBhLnF1ZXN0aW9uX2lkID09PSBwYXJzZUludChpZCkpO1xuICAgICAgICBhbnN3ZXIudmFsdWUgPSB2YWx1ZTtcblxuICAgICAgICB0aGlzLnNldFN0YXRlKHthbnN3ZXJzfSk7XG4gICAgfVxuXG4gICAgaGFzRXJyb3JzKGZpZWxkKSB7XG4gICAgICAgIGxldCB7ZXJyb3JzfSA9IHRoaXMuc3RhdGU7XG4gICAgICAgIGlmKGZpZWxkIGluIGVycm9ycykge1xuICAgICAgICAgICAgcmV0dXJuIGVycm9yc1tmaWVsZF07XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gJyc7XG4gICAgfVxuXG4gICAgaGFuZGxlU3VibWl0KGV2KSB7XG4gICAgICAgIGV2LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAgICAgbGV0IHsgb25TdWJtaXQgfSA9IHRoaXMucHJvcHM7XG4gICAgICAgIGxldCB7YW5zd2Vyc30gPSB0aGlzLnN0YXRlO1xuXG4gICAgICAgIG9uU3VibWl0KGFuc3dlcnMpO1xuICAgIH1cblxuICAgIHJlbmRlcigpIHtcbiAgICAgICAgbGV0IHsgcXVlc3Rpb25zLCBvblN1Ym1pdCB9ID0gdGhpcy5wcm9wcztcblxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPGZvcm0gY2xhc3NOYW1lPVwicnN2cC1mb3JtXCI+XG4gICAgICAgICAgICAgICAge3F1ZXN0aW9ucy5tYXAocSA9PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGtleT17J3F1ZXN0aW9uXycrcS5pZH0gY2xhc3NOYW1lPVwicm93IGZvcm0tZ3JvdXBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiY29sLW1kLTEyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8UmF3SFRNTD57cS5sYWJlbH08L1Jhd0hUTUw+IHtxLmlzX21hbmRhdG9yeSAmJiAnKid9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7dGhpcy5yZW5kZXJRdWVzdGlvbihxKX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgIHtvblN1Ym1pdCAmJlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInJvd1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJjb2wtbWQtMTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzTmFtZT1cImJ0biBidG4tcHJpbWFyeVwiIG9uQ2xpY2s9e3RoaXMuaGFuZGxlU3VibWl0fT5TdWJtaXQ8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L2Zvcm0+XG4gICAgICAgICk7XG4gICAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBSc3ZwRm9ybTtcbiIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTggT3BlblN0YWNrIEZvdW5kYXRpb25cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqKi9cblxuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IFQgZnJvbSAnaTE4bi1yZWFjdC9kaXN0L2kxOG4tcmVhY3QnXG5pbXBvcnQgJ2F3ZXNvbWUtYm9vdHN0cmFwLWNoZWNrYm94L2F3ZXNvbWUtYm9vdHN0cmFwLWNoZWNrYm94LmNzcydcbmltcG9ydCBJbnB1dCBmcm9tICcuLi9pbnB1dHMvdGV4dC1pbnB1dCdcbmltcG9ydCB7IHNjcm9sbFRvRXJyb3IsIGlzRW1wdHksIHNoYWxsb3dFcXVhbCwgaGFzRXJyb3JzIH0gZnJvbSAnLi4vLi4vdXRpbHMvbWV0aG9kcydcblxuXG5jbGFzcyBTaW1wbGVGb3JtIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgICAgICBzdXBlcihwcm9wcyk7XG5cbiAgICAgICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgICAgICAgIGVudGl0eTogey4uLnByb3BzLmVudGl0eX0sXG4gICAgICAgICAgICBlcnJvcnM6IHByb3BzLmVycm9yc1xuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMuaGFuZGxlQ2hhbmdlID0gdGhpcy5oYW5kbGVDaGFuZ2UuYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5oYW5kbGVTdWJtaXQgPSB0aGlzLmhhbmRsZVN1Ym1pdC5iaW5kKHRoaXMpO1xuICAgIH1cblxuICAgIGNvbXBvbmVudERpZFVwZGF0ZShwcmV2UHJvcHMsIHByZXZTdGF0ZSwgc25hcHNob3QpIHtcbiAgICAgICAgY29uc3Qgc3RhdGUgPSB7fTtcbiAgICAgICAgc2Nyb2xsVG9FcnJvcih0aGlzLnByb3BzLmVycm9ycyk7XG5cbiAgICAgICAgaWYocHJldlByb3BzLmVudGl0eS5pZCAhPT0gdGhpcy5wcm9wcy5lbnRpdHkuaWQpIHtcbiAgICAgICAgICAgIHN0YXRlLmVudGl0eSA9IHsuLi50aGlzLnByb3BzLmVudGl0eX07XG4gICAgICAgICAgICBzdGF0ZS5lcnJvcnMgPSB7fTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghc2hhbGxvd0VxdWFsKHByZXZQcm9wcy5lcnJvcnMsIHRoaXMucHJvcHMuZXJyb3JzKSkge1xuICAgICAgICAgICAgc3RhdGUuZXJyb3JzID0gey4uLnRoaXMucHJvcHMuZXJyb3JzfTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghaXNFbXB0eShzdGF0ZSkpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0U3RhdGUoey4uLnRoaXMuc3RhdGUsIC4uLnN0YXRlfSlcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGhhbmRsZUNoYW5nZShldikge1xuICAgICAgICBsZXQgZW50aXR5ID0gey4uLnRoaXMuc3RhdGUuZW50aXR5fTtcbiAgICAgICAgbGV0IGVycm9ycyA9IHsuLi50aGlzLnN0YXRlLmVycm9yc307XG4gICAgICAgIGxldCB7dmFsdWUsIGlkfSA9IGV2LnRhcmdldDtcblxuICAgICAgICBpZiAoZXYudGFyZ2V0LnR5cGUgPT09ICdjaGVja2JveCcpIHtcbiAgICAgICAgICAgIHZhbHVlID0gZXYudGFyZ2V0LmNoZWNrZWQ7XG4gICAgICAgIH1cblxuICAgICAgICBlcnJvcnNbaWRdID0gJyc7XG4gICAgICAgIGVudGl0eVtpZF0gPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7ZW50aXR5OiBlbnRpdHksIGVycm9yczogZXJyb3JzfSk7XG4gICAgfVxuXG4gICAgaGFuZGxlU3VibWl0KGV2KSB7XG4gICAgICAgIGxldCBlbnRpdHkgPSB7Li4udGhpcy5zdGF0ZS5lbnRpdHl9O1xuICAgICAgICBldi5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgICAgIHRoaXMucHJvcHMub25TdWJtaXQodGhpcy5zdGF0ZS5lbnRpdHkpO1xuICAgIH1cblxuICAgIGNyZWF0ZUZpZWxkKGZpZWxkKSB7XG4gICAgICAgIGxldCB7ZW50aXR5LCBlcnJvcnN9ID0gdGhpcy5zdGF0ZTtcblxuICAgICAgICBzd2l0Y2ggKGZpZWxkLnR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgJ3RleHQnOlxuICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgIDxkaXYga2V5PXtcImZpZWxkX1wiK2ZpZWxkLm5hbWV9IGNsYXNzTmFtZT1cInJvdyBmb3JtLWdyb3VwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImNvbC1tZC02XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPiB7ZmllbGQubGFiZWx9IDwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPElucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkPXtmaWVsZC5uYW1lfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT17ZW50aXR5W2ZpZWxkLm5hbWVdfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17dGhpcy5oYW5kbGVDaGFuZ2V9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImZvcm0tY29udHJvbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yPXtoYXNFcnJvcnMoZmllbGQubmFtZSwgZXJyb3JzKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ3RleHRhcmVhJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGtleT17XCJmaWVsZF9cIitmaWVsZC5uYW1lfSBjbGFzc05hbWU9XCJyb3cgZm9ybS1ncm91cFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJjb2wtbWQtNlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbD4ge2ZpZWxkLmxhYmVsfSA8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZXh0YXJlYVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZD17ZmllbGQubmFtZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e2VudGl0eVtmaWVsZC5uYW1lXX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9e3RoaXMuaGFuZGxlQ2hhbmdlfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJmb3JtLWNvbnRyb2xcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnY2hlY2tib3gnOlxuICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgIDxkaXYga2V5PXtcImZpZWxkX1wiK2ZpZWxkLm5hbWV9IGNsYXNzTmFtZT1cInJvdyBmb3JtLWdyb3VwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImNvbC1tZC02XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmb3JtLWNoZWNrIGFiYy1jaGVja2JveFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgaWQ9e2ZpZWxkLm5hbWV9IGNoZWNrZWQ9e2VudGl0eVtmaWVsZC5uYW1lXX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXt0aGlzLmhhbmRsZUNoYW5nZX0gY2xhc3NOYW1lPVwiZm9ybS1jaGVjay1pbnB1dFwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzc05hbWU9XCJmb3JtLWNoZWNrLWxhYmVsXCIgaHRtbEZvcj17ZmllbGQubmFtZX0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7ZmllbGQubGFiZWx9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZW5kZXIoKSB7XG4gICAgICAgIGxldCB7ZW50aXR5fSA9IHRoaXMuc3RhdGU7XG4gICAgICAgIGxldCB7ZmllbGRzfSA9IHRoaXMucHJvcHM7XG5cbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxmb3JtIGNsYXNzTmFtZT1cInNpbXBsZS1mb3JtXCI+XG4gICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBpZD1cImlkXCIgdmFsdWU9e2VudGl0eS5pZH0gLz5cblxuICAgICAgICAgICAgICAgIHtmaWVsZHMubWFwKGYgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jcmVhdGVGaWVsZChmKTtcbiAgICAgICAgICAgICAgICB9KX1cblxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwicm93XCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiY29sLW1kLTEyIHN1Ym1pdC1idXR0b25zXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImJ1dHRvblwiIG9uQ2xpY2s9e3RoaXMuaGFuZGxlU3VibWl0fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImJ0biBidG4tcHJpbWFyeSBwdWxsLXJpZ2h0XCIgdmFsdWU9e1QudHJhbnNsYXRlKFwiZ2VuZXJhbC5zYXZlXCIpfS8+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9mb3JtPlxuICAgICAgICApO1xuICAgIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgU2ltcGxlRm9ybTtcbiIsIlxuY2xhc3MgRnJhZ21lbnRQYXJzZXIge1xuXG4gICAgY29uc3RydWN0b3IoKXtcbiAgICAgICAgdGhpcy5vcmlnaW5hbEhhc2ggPSAnJztcbiAgICAgICAgdGhpcy5oYXNoICAgICAgICAgPSB7fTtcbiAgICB9XG5cbiAgICBjb252ZXJ0VG9IYXNoKHN0ckhhc2gpXG4gICAge1xuICAgICAgICBzdHJIYXNoICAgID0gc3RySGFzaC5zdWJzdHIoMSkudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgbGV0IHBhcmFtcyA9IHN0ckhhc2guc3BsaXQoJyYnKTtcbiAgICAgICAgbGV0IHJlcyA9IHt9O1xuICAgICAgICBmb3IobGV0IHBhcmFtIG9mIHBhcmFtcylcbiAgICAgICAge1xuICAgICAgICAgICAgcGFyYW0gPSBwYXJhbS5zcGxpdCgnPScpO1xuICAgICAgICAgICAgaWYocGFyYW0ubGVuZ3RoICE9PSAgMikgY29udGludWU7XG4gICAgICAgICAgICBsZXQgdmFsID0gcGFyYW1bMV0udHJpbSgpO1xuICAgICAgICAgICAgaWYodmFsID09PSAnJykgY29udGludWU7XG5cbiAgICAgICAgICAgIGlmICh2YWwgPT09ICd0cnVlJyB8fCB2YWwgPT09ICdmYWxzZScpXG4gICAgICAgICAgICAgICAgcGFyYW1bMV0gPSB2YWwgPT0gJ3RydWUnO1xuXG4gICAgICAgICAgICByZXNbcGFyYW1bMF1dID0gcGFyYW1bMV07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG5cbiAgICBjbGVhclBhcmFtcygpe1xuICAgICAgICB0aGlzLm9yaWdpbmFsSGFzaCA9ICcnO1xuICAgICAgICB0aGlzLmhhc2ggICAgICAgICA9IHt9O1xuICAgIH1cblxuICAgIGdldFBhcmFtKGtleSl7XG4gICAgICAgIGlmKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHRoaXMub3JpZ2luYWxIYXNoICE9PSB3aW5kb3cubG9jYXRpb24uaGFzaCl7XG4gICAgICAgICAgICB0aGlzLm9yaWdpbmFsSGFzaCA9IHdpbmRvdy5sb2NhdGlvbi5oYXNoO1xuICAgICAgICAgICAgdGhpcy5oYXNoID0gdGhpcy5jb252ZXJ0VG9IYXNoKHRoaXMub3JpZ2luYWxIYXNoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmKCF0aGlzLmhhc2guaGFzT3duUHJvcGVydHkoa2V5KSApIHJldHVybiBudWxsO1xuICAgICAgICByZXR1cm4gdGhpcy5oYXNoW2tleV07XG4gICAgfVxuXG4gICAgZ2V0UGFyYW1zKCl7XG4gICAgICAgIGlmKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHRoaXMub3JpZ2luYWxIYXNoICE9PSAgd2luZG93LmxvY2F0aW9uLmhhc2gpe1xuICAgICAgICAgICAgdGhpcy5vcmlnaW5hbEhhc2ggPSB3aW5kb3cubG9jYXRpb24uaGFzaDtcbiAgICAgICAgICAgIHRoaXMuaGFzaCA9IHRoaXMuY29udmVydFRvSGFzaCh0aGlzLm9yaWdpbmFsSGFzaCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4geyAuLi4gdGhpcy5oYXNoIH07XG4gICAgfVxuXG4gICAgZGVsZXRlUGFyYW0ocGFyYW0pe1xuICAgICAgICB2YXIgaGFzaCAgICA9IHRoaXMuZ2V0UGFyYW1zKCk7XG4gICAgICAgIHRoaXMuY2xlYXJQYXJhbXMoKTtcbiAgICAgICAgZm9yKGxldCBrZXkgaW4gaGFzaCkge1xuICAgICAgICAgICAgaWYoa2V5ID09IHBhcmFtKSBjb250aW51ZTtcbiAgICAgICAgICAgIHRoaXMuaGFzaFtrZXldID0gaGFzaFtrZXldO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZGVsZXRlUGFyYW1zKHBhcmFtcyl7XG4gICAgICAgIHZhciBoYXNoICAgID0gdGhpcy5nZXRQYXJhbXMoKTtcbiAgICAgICAgdGhpcy5jbGVhclBhcmFtcygpO1xuICAgICAgICBmb3IobGV0IGtleSBpbiBoYXNoKSB7XG4gICAgICAgICAgICBpZihwYXJhbXMuaW5jbHVkZXMoa2V5KSkgY29udGludWU7XG4gICAgICAgICAgICB0aGlzLmhhc2hba2V5XSA9IGhhc2hba2V5XTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHNldFBhcmFtKGtleSwgdmFsdWUpe1xuICAgICAgICBpZih0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLm9yaWdpbmFsSGFzaCAhPT0gIHdpbmRvdy5sb2NhdGlvbi5oYXNoKXtcbiAgICAgICAgICAgIHRoaXMub3JpZ2luYWxIYXNoID0gd2luZG93LmxvY2F0aW9uLmhhc2g7XG4gICAgICAgICAgICB0aGlzLmhhc2ggPSB0aGlzLmNvbnZlcnRUb0hhc2godGhpcy5vcmlnaW5hbEhhc2gpO1xuICAgICAgICB9XG4gICAgICAgIGlmKHZhbHVlICE9PSBudWxsICYmIHZhbHVlICE9PSAnJylcbiAgICAgICAgICAgIHRoaXMuaGFzaFtrZXldID0gdmFsdWU7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLmhhc2hba2V5XTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgc2VyaWFsaXplKCl7XG4gICAgICAgIGxldCByZXMgPSAnJztcbiAgICAgICAgZm9yKGxldCBrZXkgaW4gdGhpcy5oYXNoKVxuICAgICAgICB7XG4gICAgICAgICAgICBsZXQgdmFsID0gdGhpcy5oYXNoW2tleV07XG4gICAgICAgICAgICBpZihyZXMgIT09ICcnKSByZXMgKz0gJyYnO1xuICAgICAgICAgICAgcmVzICs9IGtleSsnPScrdmFsO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBGcmFnbWVudFBhcnNlcjtcbiIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTcgT3BlblN0YWNrIEZvdW5kYXRpb25cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqKi9cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgVCBmcm9tIFwiaTE4bi1yZWFjdC9kaXN0L2kxOG4tcmVhY3RcIjtcblxuY2xhc3MgRnJlZVRleHRTZWFyY2ggZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuXG4gICAgY29uc3RydWN0b3IocHJvcHMpe1xuICAgICAgICBzdXBlcihwcm9wcyk7XG4gICAgICAgIHRoaXMub25TZWFyY2hDbGljayAgPSB0aGlzLm9uU2VhcmNoQ2xpY2suYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5vbkNsZWFyQ2xpY2sgICA9IHRoaXMub25DbGVhckNsaWNrLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMub25LZXlQcmVzc2VkICAgPSB0aGlzLm9uS2V5UHJlc3NlZC5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLm9uQ2hhbmdlICAgICAgID0gdGhpcy5vbkNoYW5nZS5iaW5kKHRoaXMpO1xuXG4gICAgICAgIHRoaXMuc3RhdGUgPSB7XG4gICAgICAgICAgICB2YWx1ZTogcHJvcHMudmFsdWUsXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgb25TZWFyY2hDbGljaygpe1xuICAgICAgICB0aGlzLmRvRmlsdGVyaW5nKHRoaXMuc3RhdGUudmFsdWUpO1xuICAgIH1cblxuICAgIG9uQ2xlYXJDbGljaygpe1xuICAgICAgICB0aGlzLmRvRmlsdGVyaW5nKCcnKTtcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7dmFsdWU6ICcnfSk7XG4gICAgfVxuXG4gICAgZG9GaWx0ZXJpbmcodGVybSl7XG4gICAgICAgIHRoaXMucHJvcHMub25TZWFyY2godGVybS50cmltKCkpO1xuICAgIH1cblxuICAgIG9uS2V5UHJlc3NlZChldmVudCl7XG4gICAgICAgIHZhciBjb2RlID0gZXZlbnQua2V5Q29kZSB8fCBldmVudC53aGljaDtcbiAgICAgICAgaWYoY29kZSA9PT0gMTMpIHtcbiAgICAgICAgICAgIHRoaXMuZG9GaWx0ZXJpbmcodGhpcy5zdGF0ZS52YWx1ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvbkNoYW5nZShldmVudCl7XG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgICAgdmFsdWU6IGV2ZW50LnRhcmdldC52YWx1ZVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICByZW5kZXIoKXtcbiAgICAgICAgbGV0IHt2YWx1ZX0gPSB0aGlzLnN0YXRlO1xuXG4gICAgICAgIHJldHVybihcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwicm93IHNlYXJjaC1jb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImNvbC1tZC0xMlwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImlucHV0LWdyb3VwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPXt2YWx1ZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJmb3JtLWNvbnRyb2xcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPXt0aGlzLnByb3BzLnBsYWNlaG9sZGVyfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uS2V5UHJlc3M9e3RoaXMub25LZXlQcmVzc2VkfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXt0aGlzLm9uQ2hhbmdlfVxuICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cImlucHV0LWdyb3VwLWJ0blwiIHN0eWxlPXt7d2lkdGg6IDUgKyclJ319PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gb25DbGljaz17dGhpcy5vblNlYXJjaENsaWNrfSBjbGFzc05hbWU9XCJidG4gYnRuLWRlZmF1bHRcIiB0aXRsZT17VC50cmFuc2xhdGUoXCJnZW5lcmFsLnNlYXJjaFwiKX0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzTmFtZT1cImZhIGZhLXNlYXJjaFwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBvbkNsaWNrPXt0aGlzLm9uQ2xlYXJDbGlja30gY2xhc3NOYW1lPVwiYnRuIGJ0bi1kZWZhdWx0XCIgdGl0bGU9e1QudHJhbnNsYXRlKFwiZ2VuZXJhbC5jbGVhclwiKX0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzTmFtZT1cImZhIGZhLXRpbWVzXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKVxuICAgIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgRnJlZVRleHRTZWFyY2g7IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxNyBPcGVuU3RhY2sgRm91bmRhdGlvblxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICoqL1xuXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgd2l0aFNjcmlwdGpzLCB3aXRoR29vZ2xlTWFwLCBHb29nbGVNYXAsIE1hcmtlciwgSW5mb1dpbmRvdyB9IGZyb20gXCJyZWFjdC1nb29nbGUtbWFwc1wiO1xuaW1wb3J0IE1hcmtlckNsdXN0ZXJlciBmcm9tIFwicmVhY3QtZ29vZ2xlLW1hcHMvbGliL2NvbXBvbmVudHMvYWRkb25zL01hcmtlckNsdXN0ZXJlclwiO1xuaW1wb3J0IHthcnJheXNFcXVhbH0gZnJvbSBcIi4uLy4uL3V0aWxzL21ldGhvZHNcIjtcblxuY29uc3QgTUFQID0ge1xuICAgIGRlZmF1bHRab29tOiAyLFxuICAgIGRlZmF1bHRDZW50ZXI6IHsgbGF0OiAzMC4yNzAxNjYsIGxuZzogLTk3LjczMTI3MSB9LFxuICAgIG9wdGlvbnM6IHtcbiAgICAgICAgbWluWm9vbTogMSxcbiAgICAgICAgbWF4Wm9vbTogMTlcbiAgICB9XG59O1xuXG5jb25zdCBHb29nbGVNYXBXcmFwcGVyID0gd2l0aEdvb2dsZU1hcCgocHJvcHMpID0+IHtcbiAgICAgICAgcmV0dXJuICA8R29vZ2xlTWFwXG4gICAgICAgICAgICByZWY9e3Byb3BzLm9uTWFwTG9hZH1cbiAgICAgICAgICAgIHpvb209eyBwcm9wcy56b29tIH1cbiAgICAgICAgICAgIGNlbnRlcj17IHByb3BzLmNlbnRlciB9XG4gICAgICAgICAgICBvbkJvdW5kc0NoYW5nZWQ9e3Byb3BzLm9uTWFwQ2hhbmdlfVxuICAgICAgICAgICAgb25DbGljaz17cHJvcHMub25NYXBDbGlja31cbiAgICAgICAgPlxuICAgICAgICAgICAge3Byb3BzLnNob3dNYXJrZXJzICYmXG4gICAgICAgICAgICA8TWFya2VyQ2x1c3RlcmVyXG4gICAgICAgICAgICAgICAgYXZlcmFnZUNlbnRlclxuICAgICAgICAgICAgICAgIGVuYWJsZVJldGluYUljb25zXG4gICAgICAgICAgICAgICAgZ3JpZFNpemU9ezYwfVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIHtwcm9wcy5tYXJrZXJzLm1hcChtYXJrZXIgPT4gKFxuICAgICAgICAgICAgICAgICAgICA8TWFya2VyXG4gICAgICAgICAgICAgICAgICAgICAgICBrZXk9e21hcmtlci5pZH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uPXt7IGxhdDogbWFya2VyLmxhdCwgbG5nOiBtYXJrZXIubG5nIH19XG4gICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBwcm9wcy5vblRvZ2dsZUluZm9XaW5kb3cobWFya2VyLmlkKX1cbiAgICAgICAgICAgICAgICAgICAgICAgIG9uRHJhZ0VuZD17cHJvcHMub25NYXJrZXJEcmFnfVxuICAgICAgICAgICAgICAgICAgICAgICAgZHJhZ2dhYmxlPXtwcm9wcy5kcmFnZ2FibGV9XG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIHttYXJrZXIuaXNJbmZvV2luZG93T3BlbiAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgPEluZm9XaW5kb3cgb25DbG9zZUNsaWNrPXsoKSA9PiBwcm9wcy5vblRvZ2dsZUluZm9XaW5kb3cobWFya2VyLmlkKX0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj57bWFya2VyLm5hbWV9PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L0luZm9XaW5kb3c+XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIDwvTWFya2VyPlxuICAgICAgICAgICAgICAgICkpfVxuICAgICAgICAgICAgPC9NYXJrZXJDbHVzdGVyZXI+XG4gICAgICAgICAgICB9XG4gICAgICAgIDwvR29vZ2xlTWFwPlxuICAgIH1cbik7XG5cbmV4cG9ydCBjbGFzcyBHTWFwIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcblxuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgICAgIHN1cGVyKHByb3BzKTtcblxuICAgICAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgICAgICAgbWFya2VyczogcHJvcHMubWFya2Vyc1xuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMuaGFuZGxlTWFwTG9hZCA9IHRoaXMuaGFuZGxlTWFwTG9hZC5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLmhhbmRsZU1hcENoYW5nZSA9IHRoaXMuaGFuZGxlTWFwQ2hhbmdlLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuaGFuZGxlTWFya2VyRHJhZyA9IHRoaXMuaGFuZGxlTWFya2VyRHJhZy5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLmhhbmRsZU1hcENsaWNrID0gdGhpcy5oYW5kbGVNYXBDbGljay5iaW5kKHRoaXMpO1xuICAgIH1cblxuICAgIGNvbXBvbmVudERpZFVwZGF0ZShwcmV2UHJvcHMsIHByZXZTdGF0ZSwgc25hcHNob3QpIHtcbiAgICAgICAgY29uc3QgbmV3X21hcmtlcnMgPSB0aGlzLnByb3BzLm1hcmtlcnM7XG5cbiAgICAgICAgaWYgKCFhcnJheXNFcXVhbChuZXdfbWFya2VycywgcHJldlByb3BzLm1hcmtlcnMpKSB7XG4gICAgICAgICAgICB0aGlzLnNldFN0YXRlKHsgbWFya2VyczogbmV3X21hcmtlcnMgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgb2xkX21hcmtlcnNfc3RyID0gcHJldlByb3BzLm1hcmtlcnMubWFwKCBtID0+IG0uaWQgKS5zb3J0KCkuam9pbigpO1xuICAgICAgICBsZXQgbmV3X21hcmtlcnNfc3RyID0gbmV3X21hcmtlcnMubWFwKCBtID0+IG0uaWQgKS5zb3J0KCkuam9pbigpO1xuXG4gICAgICAgIGlmIChuZXdfbWFya2Vycy5sZW5ndGggPiAxICYmIG9sZF9tYXJrZXJzX3N0ciAhPT0gbmV3X21hcmtlcnNfc3RyKSB7XG4gICAgICAgICAgICBjb25zdCBtYXJrZXJCb3VuZHMgPSBuZXcgZ29vZ2xlLm1hcHMuTGF0TG5nQm91bmRzKCk7XG4gICAgICAgICAgICBmb3IgKGxldCBtYXJrZXIgb2YgbmV3X21hcmtlcnMpIHtcbiAgICAgICAgICAgICAgICBsZXQgbWFya2VyX2xvYyA9IG5ldyBnb29nbGUubWFwcy5MYXRMbmcobWFya2VyLmxhdCwgbWFya2VyLmxuZyk7XG4gICAgICAgICAgICAgICAgbWFya2VyQm91bmRzLmV4dGVuZChtYXJrZXJfbG9jKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuX21hcENvbXBvbmVudC5maXRCb3VuZHMobWFya2VyQm91bmRzKTtcbiAgICAgICAgfVxuXG5cbiAgICB9XG5cbiAgICBoYW5kbGVNYXBMb2FkKG1hcCkge1xuICAgICAgICB0aGlzLl9tYXBDb21wb25lbnQgPSBtYXA7XG4gICAgfVxuXG4gICAgaGFuZGxlTWFwQ2hhbmdlKCkge1xuICAgICAgICBsZXQgdmlzaWJsZV9tYXJrZXJzID0gdGhpcy5wcm9wcy5tYXJrZXJzLmZpbHRlcihtID0+IHtcbiAgICAgICAgICAgIGxldCBtYXJrZXJfbG9jID0gbmV3IGdvb2dsZS5tYXBzLkxhdExuZyhtLmxhdCwgbS5sbmcpO1xuICAgICAgICAgICAgcmV0dXJuICh0aGlzLl9tYXBDb21wb25lbnQuZ2V0Qm91bmRzKCkuY29udGFpbnMobWFya2VyX2xvYykpIDtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKHRoaXMucHJvcHMuaGFzT3duUHJvcGVydHkoJ29uQ2hhbmdlQ2FsbGJhY2snKSlcbiAgICAgICAgICAgIHRoaXMucHJvcHMub25DaGFuZ2VDYWxsYmFjayh2aXNpYmxlX21hcmtlcnMpO1xuICAgIH07XG5cbiAgICBoYW5kbGVNYXJrZXJDbGljayhtYXJrZXJfaWQpIHtcbiAgICAgICAgbGV0IG1hcmtlcnMgPSB0aGlzLnN0YXRlLm1hcmtlcnM7XG4gICAgICAgIGxldCBpc19vcGVuID0gbWFya2Vycy5maW5kKG0gPT4gbS5pZCA9PSBtYXJrZXJfaWQpLmlzSW5mb1dpbmRvd09wZW47XG4gICAgICAgIG1hcmtlcnMuZmluZChtID0+IG0uaWQgPT0gbWFya2VyX2lkKS5pc0luZm9XaW5kb3dPcGVuID0gIWlzX29wZW47XG5cbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7IG1hcmtlcnM6IG1hcmtlcnMgfSk7XG4gICAgfTtcblxuICAgIGhhbmRsZU1hcmtlckRyYWcoZXYpIHtcbiAgICAgICAgdGhpcy5wcm9wcy5vbk1hcmtlckRyYWdnZWQoZXYubGF0TG5nLmxhdCgpLCBldi5sYXRMbmcubG5nKCkpO1xuICAgIH07XG5cbiAgICBoYW5kbGVNYXBDbGljayhldikge1xuICAgICAgICB0aGlzLnByb3BzLm9uTWFwQ2xpY2soZXYubGF0TG5nLmxhdCgpLCBldi5sYXRMbmcubG5nKCkpO1xuICAgIH07XG5cbiAgICByZW5kZXIoKSB7XG4gICAgICAgIGxldCB7bWFya2Vyc30gPSB0aGlzLnN0YXRlO1xuICAgICAgICBsZXQge3pvb20sIGNlbnRlcn0gPSB0aGlzLnByb3BzO1xuICAgICAgICBsZXQgZHJhZ2dhYmxlID0gdGhpcy5wcm9wcy5oYXNPd25Qcm9wZXJ0eSgnZHJhZ2dhYmxlJyk7XG5cbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxHb29nbGVNYXBXcmFwcGVyXG4gICAgICAgICAgICAgICAgc2hvd01hcmtlcnM9e21hcmtlcnMubGVuZ3RoID4gMH1cbiAgICAgICAgICAgICAgICBtYXJrZXJzPXttYXJrZXJzfVxuICAgICAgICAgICAgICAgIHpvb209eyB6b29tID8gem9vbSA6IE1BUC5kZWZhdWx0Wm9vbSB9XG4gICAgICAgICAgICAgICAgY2VudGVyPXsgY2VudGVyLmxhdCA/IGNlbnRlciA6IE1BUC5kZWZhdWx0Q2VudGVyIH1cbiAgICAgICAgICAgICAgICBsb2FkaW5nRWxlbWVudD17PGRpdiBzdHlsZT17eyBoZWlnaHQ6IGAxMDAlYCB9fSAvPn1cbiAgICAgICAgICAgICAgICBjb250YWluZXJFbGVtZW50PXs8ZGl2IHN0eWxlPXt7IGhlaWdodDogYDQwMHB4YCB9fSAvPn1cbiAgICAgICAgICAgICAgICBtYXBFbGVtZW50PXs8ZGl2IHN0eWxlPXt7IGhlaWdodDogYDEwMCVgIH19IC8+fVxuICAgICAgICAgICAgICAgIG9uTWFwTG9hZD17dGhpcy5oYW5kbGVNYXBMb2FkfVxuICAgICAgICAgICAgICAgIG9uTWFwQ2hhbmdlPXt0aGlzLmhhbmRsZU1hcENoYW5nZX1cbiAgICAgICAgICAgICAgICBvblRvZ2dsZUluZm9XaW5kb3c9e3RoaXMuaGFuZGxlTWFya2VyQ2xpY2t9XG4gICAgICAgICAgICAgICAgb25NYXJrZXJEcmFnPXt0aGlzLmhhbmRsZU1hcmtlckRyYWd9XG4gICAgICAgICAgICAgICAgZHJhZ2dhYmxlPXtkcmFnZ2FibGV9XG4gICAgICAgICAgICAgICAgb25NYXBDbGljaz17dGhpcy5oYW5kbGVNYXBDbGlja31cbiAgICAgICAgICAgIC8+XG4gICAgICAgICk7XG4gICAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBHTWFwO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxNyBPcGVuU3RhY2sgRm91bmRhdGlvblxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICoqL1xuXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IEFzeW5jU2VsZWN0IGZyb20gJ3JlYWN0LXNlbGVjdC9saWIvQXN5bmMnO1xuaW1wb3J0IHtxdWVyeUFjY2Vzc0xldmVsc30gZnJvbSAnLi4vLi4vdXRpbHMvcXVlcnktYWN0aW9ucyc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEFjY2Vzc0xldmVsc0lucHV0IGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcblxuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgICAgIHN1cGVyKHByb3BzKTtcblxuICAgICAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgICAgICAgdmFsdWU6IHByb3BzLnZhbHVlXG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5oYW5kbGVDaGFuZ2UgPSB0aGlzLmhhbmRsZUNoYW5nZS5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLmdldEFjY2Vzc0xldmVscyA9IHRoaXMuZ2V0QWNjZXNzTGV2ZWxzLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuZ2V0T3B0aW9uVmFsdWUgPSB0aGlzLmdldE9wdGlvblZhbHVlLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuZ2V0T3B0aW9uTGFiZWwgPSB0aGlzLmdldE9wdGlvbkxhYmVsLmJpbmQodGhpcyk7XG4gICAgfVxuXG4gICAgZ2V0T3B0aW9uVmFsdWUoYWNjZXNzTGV2ZWwpe1xuICAgICAgICBpZih0aGlzLnByb3BzLmhhc093blByb3BlcnR5KFwiZ2V0T3B0aW9uVmFsdWVcIikpe1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucHJvcHMuZ2V0T3B0aW9uVmFsdWUoYWNjZXNzTGV2ZWwpO1xuICAgICAgICB9XG4gICAgICAgIC8vZGVmYXVsdFxuICAgICAgICByZXR1cm4gYWNjZXNzTGV2ZWwuaWQ7XG4gICAgfVxuXG4gICAgZ2V0T3B0aW9uTGFiZWwoYWNjZXNzTGV2ZWwpe1xuICAgICAgICBpZih0aGlzLnByb3BzLmhhc093blByb3BlcnR5KFwiZ2V0T3B0aW9uTGFiZWxcIikpe1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucHJvcHMuZ2V0T3B0aW9uTGFiZWwoYWNjZXNzTGV2ZWwpO1xuICAgICAgICB9XG4gICAgICAgIC8vZGVmYXVsdFxuICAgICAgICByZXR1cm4gYCR7YWNjZXNzTGV2ZWwubmFtZX1gO1xuICAgIH1cblxuICAgIGhhbmRsZUNoYW5nZSh2YWx1ZSkge1xuICAgICAgICBsZXQgZXYgPSB7dGFyZ2V0OiB7XG4gICAgICAgICAgICAgICAgaWQ6IHRoaXMucHJvcHMuaWQsXG4gICAgICAgICAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdhY2Nlc3NsZXZlbGlucHV0J1xuICAgICAgICAgICAgfX07XG5cbiAgICAgICAgdGhpcy5wcm9wcy5vbkNoYW5nZShldik7XG4gICAgfVxuXG4gICAgZ2V0QWNjZXNzTGV2ZWxzIChpbnB1dCwgY2FsbGJhY2spIHtcbiAgICAgICAgbGV0IHtzdW1taXRJZH0gPSB0aGlzLnByb3BzO1xuXG4gICAgICAgIGlmICghaW5wdXQpIHtcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoeyBvcHRpb25zOiBbXSB9KTtcbiAgICAgICAgfVxuICAgICAgICBxdWVyeUFjY2Vzc0xldmVscyhzdW1taXRJZCxpbnB1dCwgY2FsbGJhY2spO1xuICAgIH1cblxuICAgIHJlbmRlcigpIHtcbiAgICAgICAgbGV0IHt2YWx1ZSwgZXJyb3IsIG9uQ2hhbmdlLCBpZCwgbXVsdGksIC4uLnJlc3R9ID0gdGhpcy5wcm9wcztcbiAgICAgICAgbGV0IGlzTXVsdGkgPSAodGhpcy5wcm9wcy5oYXNPd25Qcm9wZXJ0eSgnbXVsdGknKSk7XG4gICAgICAgIGxldCBoYXNfZXJyb3IgPSAoIHRoaXMucHJvcHMuaGFzT3duUHJvcGVydHkoJ2Vycm9yJykgJiYgZXJyb3IgIT0gJycgKTtcblxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICA8QXN5bmNTZWxlY3RcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU9e3ZhbHVlfVxuICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17dGhpcy5oYW5kbGVDaGFuZ2V9XG4gICAgICAgICAgICAgICAgICAgIGxvYWRPcHRpb25zPXt0aGlzLmdldEFjY2Vzc0xldmVsc31cbiAgICAgICAgICAgICAgICAgICAgZ2V0T3B0aW9uVmFsdWU9e20gPT4gdGhpcy5nZXRPcHRpb25WYWx1ZShtKX1cbiAgICAgICAgICAgICAgICAgICAgZ2V0T3B0aW9uTGFiZWw9e20gPT4gdGhpcy5nZXRPcHRpb25MYWJlbChtKX1cbiAgICAgICAgICAgICAgICAgICAgaXNNdWx0aT17aXNNdWx0aX1cbiAgICAgICAgICAgICAgICAgICAgey4uLnJlc3R9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICB7aGFzX2Vycm9yICYmXG4gICAgICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwiZXJyb3ItbGFiZWxcIj57ZXJyb3J9PC9wPlxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICk7XG5cbiAgICB9XG59XG5cbiIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpbiIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTcgT3BlblN0YWNrIEZvdW5kYXRpb25cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqKi9cblxuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCAnLi9hY3Rpb24tZHJvcGRvd24ubGVzcyc7XG5pbXBvcnQgU2VsZWN0IGZyb20gJ3JlYWN0LXNlbGVjdCc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEFjdGlvbkRyb3Bkb3duIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcblxuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgICAgIHN1cGVyKHByb3BzKTtcblxuICAgICAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgICAgICAgdmFsdWU6IG51bGwsXG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5oYW5kbGVDaGFuZ2UgPSB0aGlzLmhhbmRsZUNoYW5nZS5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLmhhbmRsZUNsaWNrID0gdGhpcy5oYW5kbGVDbGljay5iaW5kKHRoaXMpO1xuICAgIH1cblxuICAgIGhhbmRsZUNoYW5nZSh2YWx1ZSkge1xuICAgICAgICB0aGlzLnNldFN0YXRlKHt2YWx1ZTogdmFsdWV9KTtcbiAgICB9XG5cbiAgICBoYW5kbGVDbGljayhldikge1xuICAgICAgICBldi5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB0aGlzLnByb3BzLm9uQ2xpY2sodGhpcy5zdGF0ZS52YWx1ZS52YWx1ZSk7XG4gICAgfVxuXG4gICAgcmVuZGVyKCkge1xuXG4gICAgICAgIGxldCB7b3B0aW9ucywgYWN0aW9uTGFiZWwsIHBsYWNlaG9sZGVyLCAuLi5yZXN0fSA9IHRoaXMucHJvcHM7XG4gICAgICAgIGxldCB7dmFsdWV9ID0gdGhpcy5zdGF0ZTtcblxuICAgICAgICBsZXQgc21hbGxEZGwgPSB0aGlzLnByb3BzLmhhc093blByb3BlcnR5KCdzbWFsbCcpID8gJ3NtYWxsJyA6ICcnO1xuICAgICAgICBsZXQgc21hbGxCdG4gPSB0aGlzLnByb3BzLmhhc093blByb3BlcnR5KCdzbWFsbCcpID8gJ2J0bi1ncm91cC1zbScgOiAnbm9ybWFsJztcblxuICAgICAgICBsZXQgdGhlVmFsdWUgPSAodmFsdWUgaW5zdGFuY2VvZiBPYmplY3QgfHwgdmFsdWUgPT0gbnVsbCkgPyB2YWx1ZSA6IG9wdGlvbnMuZmluZChvcHQgPT4gb3B0LnZhbHVlID09IHZhbHVlKTtcblxuXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17XCJhY3Rpb24tZHJvcGRvd24gYnRuLWdyb3VwIFwiICsgc21hbGxCdG59PlxuICAgICAgICAgICAgICAgIDxTZWxlY3RcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU9e3RoZVZhbHVlfVxuICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17dGhpcy5oYW5kbGVDaGFuZ2V9XG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbnM9e29wdGlvbnN9XG4gICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPXtwbGFjZWhvbGRlcn1cbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtcImJ0bi1ncm91cCBhY3Rpb24tc2VsZWN0IHRleHQtbGVmdFwiICsgc21hbGxEZGx9XG4gICAgICAgICAgICAgICAgICAgIGlzQ2xlYXJhYmxlPXtmYWxzZX1cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzTmFtZT1cImJ0biBidG4tZGVmYXVsdCBhY3Rpb24tYnV0dG9uXCIgb25DbGljaz17dGhpcy5oYW5kbGVDbGlja30+XG4gICAgICAgICAgICAgICAgICAgIHthY3Rpb25MYWJlbH1cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICApO1xuXG4gICAgfVxufVxuIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxOCBPcGVuU3RhY2sgRm91bmRhdGlvblxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICoqL1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJ1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBUIGZyb20gJ2kxOG4tcmVhY3QvZGlzdC9pMThuLXJlYWN0JztcbmltcG9ydCBSYXdIVE1MIGZyb20gJy4uL3Jhdy1odG1sJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ2hlY2tib3hMaXN0IGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcblxuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgICAgIHN1cGVyKHByb3BzKTtcblxuICAgICAgICBsZXQgb3RoZXJWYWx1ZSA9IHByb3BzLnZhbHVlID8gcHJvcHMudmFsdWUuZmluZCggdiA9PiAhcHJvcHMub3B0aW9ucy5tYXAob3AgPT4gb3AudmFsdWUpLmluY2x1ZGVzKHYpICkgOiBmYWxzZTtcblxuICAgICAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgICAgICAgb3RoZXJDaGVja2VkOiAhIW90aGVyVmFsdWVcbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLmhhbmRsZUNoYW5nZSA9IHRoaXMuaGFuZGxlQ2hhbmdlLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuaGFuZGxlT3RoZXJDQkNoYW5nZSA9IHRoaXMuaGFuZGxlT3RoZXJDQkNoYW5nZS5iaW5kKHRoaXMpO1xuICAgIH1cblxuICAgIGhhbmRsZUNoYW5nZShldmVudCkge1xuICAgICAgICBsZXQgb3B0aW9uVmFsdWVzID0gdGhpcy5wcm9wcy5vcHRpb25zLm1hcChvcCA9PiBvcC52YWx1ZSk7XG4gICAgICAgIGxldCB2YWx1ZSA9IHRoaXMucHJvcHMudmFsdWUgPyBbLi4udGhpcy5wcm9wcy52YWx1ZV0gOiBbXTtcblxuICAgICAgICBpZiAoZXZlbnQudGFyZ2V0LnR5cGUgPT09ICdjaGVja2JveCcpIHtcbiAgICAgICAgICAgIGlmIChldmVudC50YXJnZXQuY2hlY2tlZCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHRoZVZhbCA9IGlzTmFOKGV2ZW50LnRhcmdldC52YWx1ZSkgPyBldmVudC50YXJnZXQudmFsdWUgOiBwYXJzZUludChldmVudC50YXJnZXQudmFsdWUpO1xuICAgICAgICAgICAgICAgIHZhbHVlLnB1c2godGhlVmFsKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZS5maWx0ZXIoIHYgPT4gdiAhPSBldmVudC50YXJnZXQudmFsdWUgKVxuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZS5maWx0ZXIodiA9PiBvcHRpb25WYWx1ZXMuaW5jbHVkZXModikpO1xuICAgICAgICAgICAgdmFsdWUucHVzaChldmVudC50YXJnZXQudmFsdWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGV2ID0ge3RhcmdldDoge1xuICAgICAgICAgICAgICAgIGlkOiB0aGlzLnByb3BzLmlkLFxuICAgICAgICAgICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgICAgICAgICAgICB0eXBlOiAnY2hlY2tib3hsaXN0J1xuICAgICAgICAgICAgfX07XG5cbiAgICAgICAgdGhpcy5wcm9wcy5vbkNoYW5nZShldik7XG4gICAgfVxuXG4gICAgaGFuZGxlT3RoZXJDQkNoYW5nZShldmVudCkge1xuICAgICAgICB0aGlzLnNldFN0YXRlKHtvdGhlckNoZWNrZWQ6IGV2ZW50LnRhcmdldC5jaGVja2VkfSk7XG4gICAgfVxuXG4gICAgcmVuZGVyKCkge1xuXG4gICAgICAgIGxldCB7b25DaGFuZ2UsIHZhbHVlLCBjbGFzc05hbWUsIG9wdGlvbnMsIGlkLCBjaGlsZHJlbiwgZXJyb3IsIGRpc2FibGVkLG5hbWUsIC4uLnJlc3R9ID0gdGhpcy5wcm9wcztcbiAgICAgICAgbGV0IHsgb3RoZXJDaGVja2VkIH0gPSB0aGlzLnN0YXRlO1xuXG4gICAgICAgIGxldCBpbmxpbmUgPSAoIHRoaXMucHJvcHMuaGFzT3duUHJvcGVydHkoJ2lubGluZScpICk7XG4gICAgICAgIGxldCBodG1sID0gKCB0aGlzLnByb3BzLmhhc093blByb3BlcnR5KCdodG1sJykgKTtcbiAgICAgICAgbGV0IGFsbG93T3RoZXIgPSAoIHRoaXMucHJvcHMuaGFzT3duUHJvcGVydHkoJ2FsbG93T3RoZXInKSApO1xuICAgICAgICBsZXQgb3RoZXJWYWx1ZSA9IHZhbHVlID8gdmFsdWUuZmluZCggdiA9PiAhb3B0aW9ucy5tYXAob3AgPT4gb3AudmFsdWUpLmluY2x1ZGVzKHYpICkgOiBmYWxzZSA7XG4gICAgICAgIGxldCBoYXNfZXJyb3IgPSAoIHRoaXMucHJvcHMuaGFzT3duUHJvcGVydHkoJ2Vycm9yJykgJiYgZXJyb3IgIT09ICcnICk7XG4gICAgICAgIGxldCBpc0Rpc2FibGVkID0gKHRoaXMucHJvcHMuaGFzT3duUHJvcGVydHkoJ2Rpc2FibGVkJykgJiYgZGlzYWJsZWQgPT0gdHJ1ZSk7XG5cblxuICAgICAgICBsZXQgc3R5bGUsIGxhYmVsO1xuXG4gICAgICAgIGlmIChpbmxpbmUpIHtcbiAgICAgICAgICAgIHN0eWxlID0ge1xuICAgICAgICAgICAgICAgIHBhZGRpbmdMZWZ0OiAnMjJweCcsXG4gICAgICAgICAgICAgICAgbWFyZ2luTGVmdDogJzIwcHgnLFxuICAgICAgICAgICAgICAgIGZsb2F0OiAnbGVmdCdcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzdHlsZSA9IHtcbiAgICAgICAgICAgICAgICBwYWRkaW5nTGVmdDogJzIycHgnLFxuICAgICAgICAgICAgICAgIG1hcmdpblRvcDogJzdweCdcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8ZGl2IGlkPXtgY2hsX3dyYXBwZXJfJHtpZH1gfT5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17XCJjaGVja2JveGVzLWRpdlwiICsgKGhhc19lcnJvciA/ICcgZXJyb3InIDogJycpIH0+XG4gICAgICAgICAgICAgICAgICAgIHsgb3B0aW9ucy5tYXAob3AgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGNoZWNrZWQgPSB2YWx1ZSA/IHZhbHVlLmluY2x1ZGVzKG9wLnZhbHVlKSA6IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZvcm0tY2hlY2sgYWJjLWNoZWNrYm94XCIga2V5PXtcInJhZGlvX2tleV9cIiArIG9wLnZhbHVlfSBzdHlsZT17c3R5bGV9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkPXtgY2JfJHtpZH1fJHtvcC52YWx1ZX1gfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT17bmFtZT8gbmFtZSA6IGlkIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrZWQ9e2NoZWNrZWR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZD17aXNEaXNhYmxlZH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXt0aGlzLmhhbmRsZUNoYW5nZX0gY2xhc3NOYW1lPVwiZm9ybS1jaGVjay1pbnB1dFwiIHZhbHVlPXtvcC52YWx1ZX0gLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzTmFtZT1cImZvcm0tY2hlY2stbGFiZWxcIiBodG1sRm9yPXtgY2JfJHtpZH1fJHtvcC52YWx1ZX1gICB9ID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtodG1sICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFJhd0hUTUw+e29wLmxhYmVsfTwvUmF3SFRNTD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHshaHRtbCAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wLmxhYmVsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIH0pfVxuXG4gICAgICAgICAgICAgICAgICAgIHthbGxvd090aGVyICYmXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZm9ybS1jaGVjayBhYmMtY2hlY2tib3hcIiBzdHlsZT17c3R5bGV9PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIGlkPXtcImNiX290aGVyXCIgKyBpZH0gY2hlY2tlZD17b3RoZXJDaGVja2VkfSBkaXNhYmxlZD17aXNEaXNhYmxlZH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17dGhpcy5oYW5kbGVPdGhlckNCQ2hhbmdlfSBjbGFzc05hbWU9XCJmb3JtLWNoZWNrLWlucHV0XCIgdmFsdWU9XCJvdGhlclwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3NOYW1lPVwiZm9ybS1jaGVjay1sYWJlbFwiIGh0bWxGb3I9e1wiY2Jfb3RoZXJcIiArIGlkfT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7VC50cmFuc2xhdGUoXCJnZW5lcmFsLm90aGVyXCIpfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICB7YWxsb3dPdGhlciAmJiBvdGhlckNoZWNrZWQgJiZcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT17e3BhZGRpbmdMZWZ0OiAnMjJweCcsIHdpZHRoOiAnNTAlJ319PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzTmFtZT1cImZvcm0tY29udHJvbFwiIGRpc2FibGVkPXtpc0Rpc2FibGVkfSBvbkNoYW5nZT17dGhpcy5oYW5kbGVDaGFuZ2V9IHZhbHVlPXtvdGhlclZhbHVlfSAvPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAge2hhc19lcnJvciAmJlxuICAgICAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cImVycm9yLWxhYmVsXCI+e2Vycm9yfTwvcD5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKTtcblxuICAgIH1cbn1cblxuXG5DaGVja2JveExpc3QucHJvcFR5cGVzID0ge1xuICAgIGlkOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWRcbn07IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxNyBPcGVuU3RhY2sgRm91bmRhdGlvblxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICoqL1xuXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IEFzeW5jU2VsZWN0IGZyb20gJ3JlYWN0LXNlbGVjdC9saWIvQXN5bmMnO1xuaW1wb3J0IHtxdWVyeUNvbXBhbmllc30gZnJvbSAnLi4vLi4vdXRpbHMvcXVlcnktYWN0aW9ucyc7XG5pbXBvcnQgQXN5bmNDcmVhdGFibGVTZWxlY3QgZnJvbSBcInJlYWN0LXNlbGVjdC9saWIvQXN5bmNDcmVhdGFibGVcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ29tcGFueUlucHV0IGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcblxuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgICAgIHN1cGVyKHByb3BzKTtcblxuICAgICAgICB0aGlzLmhhbmRsZUNoYW5nZSA9IHRoaXMuaGFuZGxlQ2hhbmdlLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuaGFuZGxlTmV3ID0gdGhpcy5oYW5kbGVOZXcuYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5nZXRDb21wYW5pZXMgPSB0aGlzLmdldENvbXBhbmllcy5iaW5kKHRoaXMpO1xuICAgIH1cblxuICAgIGhhbmRsZUNoYW5nZSh2YWx1ZSkge1xuICAgICAgICBjb25zdCBpc011bHRpID0gKHRoaXMucHJvcHMuaGFzT3duUHJvcGVydHkoJ211bHRpJykgfHwgdGhpcy5wcm9wcy5oYXNPd25Qcm9wZXJ0eSgnaXNNdWx0aScpKTtcbiAgICAgICAgY29uc3QgdGhlVmFsdWUgPSBpc011bHRpID8gdmFsdWUubWFwKHYgPT4gKHtpZDogdi52YWx1ZSwgbmFtZTogdi5sYWJlbH0pKSA6IHtpZDogdmFsdWUudmFsdWUsIG5hbWU6IHZhbHVlLmxhYmVsfTtcblxuICAgICAgICBsZXQgZXYgPSB7dGFyZ2V0OiB7XG4gICAgICAgICAgICAgICAgaWQ6IHRoaXMucHJvcHMuaWQsXG4gICAgICAgICAgICAgICAgdmFsdWU6IHRoZVZhbHVlLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdjb21wYW55aW5wdXQnXG4gICAgICAgICAgICB9fTtcblxuICAgICAgICB0aGlzLnByb3BzLm9uQ2hhbmdlKGV2KTtcbiAgICB9XG5cbiAgICBoYW5kbGVOZXcodmFsdWUpIHtcbiAgICAgICAgLy8gd2UgbmVlZCB0byBtYXAgaW50byB2YWx1ZS9sYWJlbCBiZWNhdXNlIG9mIGEgYnVnIGluIHJlYWN0LXNlbGVjdCAyXG4gICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9KZWRXYXRzb24vcmVhY3Qtc2VsZWN0L2lzc3Vlcy8yOTk4XG5cbiAgICAgICAgY29uc3QgdHJhbnNsYXRlVmFsdWUgPSAobmV3VmFsdWUpID0+IHtcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlQ2hhbmdlKHt2YWx1ZTogbmV3VmFsdWUuaWQsIGxhYmVsOiBuZXdWYWx1ZS5uYW1lfSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnByb3BzLm9uQ3JlYXRlKHZhbHVlLCB0cmFuc2xhdGVWYWx1ZSk7XG4gICAgfVxuXG4gICAgZ2V0Q29tcGFuaWVzIChpbnB1dCwgY2FsbGJhY2spIHtcbiAgICAgICAgaWYgKCFpbnB1dCkge1xuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh7IG9wdGlvbnM6IFtdIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gd2UgbmVlZCB0byBtYXAgaW50byB2YWx1ZS9sYWJlbCBiZWNhdXNlIG9mIGEgYnVnIGluIHJlYWN0LXNlbGVjdCAyXG4gICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9KZWRXYXRzb24vcmVhY3Qtc2VsZWN0L2lzc3Vlcy8yOTk4XG5cbiAgICAgICAgY29uc3QgdHJhbnNsYXRlT3B0aW9ucyA9IChvcHRpb25zKSA9PiB7XG4gICAgICAgICAgICBsZXQgbmV3T3B0aW9ucyA9IG9wdGlvbnMubWFwKGMgPT4gKHt2YWx1ZTogYy5pZC50b1N0cmluZygpLCBsYWJlbDogYy5uYW1lfSkpO1xuICAgICAgICAgICAgY2FsbGJhY2sobmV3T3B0aW9ucyk7XG4gICAgICAgIH07XG5cbiAgICAgICAgcXVlcnlDb21wYW5pZXMoaW5wdXQsIHRyYW5zbGF0ZU9wdGlvbnMpO1xuICAgIH1cblxuICAgIHJlbmRlcigpIHtcbiAgICAgICAgbGV0IHtlcnJvciwgdmFsdWUsIG9uQ2hhbmdlLCBpZCwgbXVsdGksIC4uLnJlc3R9ID0gdGhpcy5wcm9wcztcbiAgICAgICAgbGV0IGhhc19lcnJvciA9ICggdGhpcy5wcm9wcy5oYXNPd25Qcm9wZXJ0eSgnZXJyb3InKSAmJiBlcnJvciAhPSAnJyApO1xuICAgICAgICBsZXQgaXNNdWx0aSA9ICh0aGlzLnByb3BzLmhhc093blByb3BlcnR5KCdtdWx0aScpIHx8IHRoaXMucHJvcHMuaGFzT3duUHJvcGVydHkoJ2lzTXVsdGknKSk7XG4gICAgICAgIGxldCBhbGxvd0NyZWF0ZSA9IHRoaXMucHJvcHMuaGFzT3duUHJvcGVydHkoJ2FsbG93Q3JlYXRlJyk7XG5cbiAgICAgICAgLy8gd2UgbmVlZCB0byBtYXAgaW50byB2YWx1ZS9sYWJlbCBiZWNhdXNlIG9mIGEgYnVnIGluIHJlYWN0LXNlbGVjdCAyXG4gICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9KZWRXYXRzb24vcmVhY3Qtc2VsZWN0L2lzc3Vlcy8yOTk4XG5cbiAgICAgICAgbGV0IHRoZVZhbHVlID0gbnVsbDtcblxuICAgICAgICBpZiAoaXNNdWx0aSAmJiB2YWx1ZS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB0aGVWYWx1ZSA9IHZhbHVlLm1hcCh2ID0+ICh7dmFsdWU6IHYuaWQudG9TdHJpbmcoKSwgbGFiZWw6IHYubmFtZX0gKSk7XG4gICAgICAgIH0gZWxzZSBpZiAoIWlzTXVsdGkgJiYgdmFsdWUpIHtcbiAgICAgICAgICAgIHRoZVZhbHVlID0ge3ZhbHVlOiB2YWx1ZS5pZC50b1N0cmluZygpLCBsYWJlbDogdmFsdWUubmFtZX07XG4gICAgICAgIH1cblxuXG4gICAgICAgIGNvbnN0IEFzeW5jQ29tcG9uZW50ID0gYWxsb3dDcmVhdGVcbiAgICAgICAgICAgID8gQXN5bmNDcmVhdGFibGVTZWxlY3RcbiAgICAgICAgICAgIDogQXN5bmNTZWxlY3Q7XG5cbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgPEFzeW5jQ29tcG9uZW50XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlPXt0aGVWYWx1ZX1cbiAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9e3RoaXMuaGFuZGxlQ2hhbmdlfVxuICAgICAgICAgICAgICAgICAgICBsb2FkT3B0aW9ucz17dGhpcy5nZXRDb21wYW5pZXN9XG4gICAgICAgICAgICAgICAgICAgIG9uQ3JlYXRlT3B0aW9uPXt0aGlzLmhhbmRsZU5ld31cbiAgICAgICAgICAgICAgICAgICAgaXNNdWx0aT17aXNNdWx0aX1cbiAgICAgICAgICAgICAgICAgICAgey4uLnJlc3R9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICB7aGFzX2Vycm9yICYmXG4gICAgICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwiZXJyb3ItbGFiZWxcIj57ZXJyb3J9PC9wPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICApO1xuXG4gICAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTcgT3BlblN0YWNrIEZvdW5kYXRpb25cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqKi9cblxuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBEcm9wZG93biBmcm9tICcuL2Ryb3Bkb3duJztcbmltcG9ydCB7Z2V0Q291bnRyeUxpc3R9IGZyb20gJy4uLy4uL3V0aWxzL3F1ZXJ5LWFjdGlvbnMnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDb3VudHJ5RHJvcGRvd24gZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICAgICAgc3VwZXIocHJvcHMpO1xuXG4gICAgICAgIHRoaXMuc3RhdGUgPSB7XG4gICAgICAgICAgICBvcHRpb25zOiBbXVxuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMuaGFuZGxlQ2hhbmdlID0gdGhpcy5oYW5kbGVDaGFuZ2UuYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5zZXRPcHRpb25zID0gdGhpcy5zZXRPcHRpb25zLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuYWJvcnRDb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuICAgIH1cblxuICAgIGNvbXBvbmVudERpZE1vdW50ICgpIHtcbiAgICAgICAgbGV0IHtvcHRpb25zfSA9IHRoaXMuc3RhdGU7XG5cbiAgICAgICAgaWYob3B0aW9ucy5sZW5ndGggPT0gMCl7XG4gICAgICAgICAgICBnZXRDb3VudHJ5TGlzdCh0aGlzLnNldE9wdGlvbnMsIHRoaXMuYWJvcnRDb250cm9sbGVyLnNpZ25hbCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjb21wb25lbnRXaWxsVW5tb3VudCgpe1xuICAgICAgICB0aGlzLmFib3J0Q29udHJvbGxlci5hYm9ydCgpO1xuICAgIH1cblxuICAgIGhhbmRsZUNoYW5nZSh2YWx1ZSkge1xuXG4gICAgICAgIGxldCBldiA9IHt0YXJnZXQ6IHtcbiAgICAgICAgICAgICAgICBpZDogdGhpcy5wcm9wcy5pZCxcbiAgICAgICAgICAgICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICAgICAgICAgICAgdHlwZTogJ2NvdW50cnlkZGwnXG4gICAgICAgICAgICB9fTtcblxuICAgICAgICB0aGlzLnByb3BzLm9uQ2hhbmdlKGV2KTtcbiAgICB9XG5cbiAgICBzZXRPcHRpb25zKHJlc3BvbnNlKSB7XG4gICAgICAgIGxldCBjb3VudHJ5TGlzdCA9IHJlc3BvbnNlLm1hcChjID0+ICh7bGFiZWw6IGMubmFtZSwgdmFsdWU6IGMuaXNvX2NvZGV9KSk7XG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe29wdGlvbnM6IGNvdW50cnlMaXN0fSk7XG4gICAgfVxuXG4gICAgcmVuZGVyKCkge1xuXG4gICAgICAgIGxldCB7b3B0aW9uc30gPSB0aGlzLnN0YXRlO1xuXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8RHJvcGRvd24gb3B0aW9ucz17b3B0aW9uc30gey4uLnRoaXMucHJvcHN9IC8+XG4gICAgICAgICk7XG5cbiAgICB9XG59XG4iLCIvKipcbiAqIENvcHlyaWdodCAyMDE4IE9wZW5TdGFjayBGb3VuZGF0aW9uXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiovXG5cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgU2VsZWN0IGZyb20gJ3JlYWN0LXNlbGVjdCc7XG5pbXBvcnQge2dldENvdW50cnlMaXN0fSBmcm9tICcuLi8uLi91dGlscy9xdWVyeS1hY3Rpb25zJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ291bnRyeUlucHV0IGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcblxuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgICAgIHN1cGVyKHByb3BzKTtcblxuICAgICAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgICAgICAgb3B0aW9uczogW11cbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLmhhbmRsZUNoYW5nZSA9IHRoaXMuaGFuZGxlQ2hhbmdlLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuc2V0T3B0aW9ucyA9IHRoaXMuc2V0T3B0aW9ucy5iaW5kKHRoaXMpO1xuXG4gICAgICAgIGdldENvdW50cnlMaXN0KHRoaXMuc2V0T3B0aW9ucyk7XG4gICAgfVxuXG4gICAgc2V0T3B0aW9ucyhyZXNwb25zZSkge1xuICAgICAgICBsZXQgY291bnRyeUxpc3QgPSByZXNwb25zZS5tYXAoYyA9PiAoe2xhYmVsOiBjLm5hbWUsIHZhbHVlOiBjLmlzb19jb2RlfSkpO1xuICAgICAgICB0aGlzLnNldFN0YXRlKHtvcHRpb25zOiBjb3VudHJ5TGlzdH0pO1xuICAgIH1cblxuICAgIGhhbmRsZUNoYW5nZSh2YWx1ZSkge1xuICAgICAgICBsZXQgaXNNdWx0aSA9ICh0aGlzLnByb3BzLmhhc093blByb3BlcnR5KCdtdWx0aScpKTtcbiAgICAgICAgbGV0IHRoZVZhbHVlID0gbnVsbDtcblxuICAgICAgICBpZiAoaXNNdWx0aSkge1xuICAgICAgICAgICAgdGhlVmFsdWUgPSB2YWx1ZS5tYXAodiA9PiB2LnZhbHVlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoZVZhbHVlID0gdmFsdWUudmFsdWU7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgZXYgPSB7dGFyZ2V0OiB7XG4gICAgICAgICAgICAgICAgaWQ6IHRoaXMucHJvcHMuaWQsXG4gICAgICAgICAgICAgICAgdmFsdWU6IHRoZVZhbHVlLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdjb3VudHJ5aW5wdXQnXG4gICAgICAgICAgICB9fTtcblxuICAgICAgICB0aGlzLnByb3BzLm9uQ2hhbmdlKGV2KTtcbiAgICB9XG5cbiAgICByZW5kZXIoKSB7XG4gICAgICAgIGxldCB7dmFsdWUsIG9uQ2hhbmdlLCBpZCwgbXVsdGksIGVycm9yLCAuLi5yZXN0fSA9IHRoaXMucHJvcHM7XG4gICAgICAgIGxldCB7b3B0aW9uc30gPSB0aGlzLnN0YXRlO1xuICAgICAgICBsZXQgaXNNdWx0aSA9ICh0aGlzLnByb3BzLmhhc093blByb3BlcnR5KCdtdWx0aScpKTtcbiAgICAgICAgbGV0IHRoZVZhbHVlID0gbnVsbDtcbiAgICAgICAgbGV0IGhhc19lcnJvciA9ICggdGhpcy5wcm9wcy5oYXNPd25Qcm9wZXJ0eSgnZXJyb3InKSAmJiBlcnJvciAhPSAnJyApO1xuXG4gICAgICAgIGlmIChpc011bHRpKSB7XG4gICAgICAgICAgICB0aGVWYWx1ZSA9IG9wdGlvbnMuZmlsdGVyKG9wID0+IHZhbHVlLmluY2x1ZGVzKG9wLnZhbHVlKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGVWYWx1ZSA9ICh2YWx1ZSBpbnN0YW5jZW9mIE9iamVjdCB8fCB2YWx1ZSA9PSBudWxsKSA/IHZhbHVlIDogb3B0aW9ucy5maW5kKG9wdCA9PiBvcHQudmFsdWUgPT0gdmFsdWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgPFNlbGVjdFxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9e1wiZHJvcGRvd25cIiArIChoYXNfZXJyb3IgPyAnIGVycm9yJyA6ICcnKX1cbiAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9e3RoaXMuaGFuZGxlQ2hhbmdlfVxuICAgICAgICAgICAgICAgICAgICBvcHRpb25zPXtvcHRpb25zfVxuICAgICAgICAgICAgICAgICAgICB2YWx1ZT17dGhlVmFsdWV9XG4gICAgICAgICAgICAgICAgICAgIGlzTXVsdGk9e2lzTXVsdGl9XG4gICAgICAgICAgICAgICAgICAgIHsuLi5yZXN0fVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAge2hhc19lcnJvciAmJlxuICAgICAgICAgICAgICAgICAgICA8cCBjbGFzc05hbWU9XCJlcnJvci1sYWJlbFwiPntlcnJvcn08L3A+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICk7XG4gICAgfVxufVxuIiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxNyBPcGVuU3RhY2sgRm91bmRhdGlvblxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICoqL1xuXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0ICcuL2RhdGV0aW1lcGlja2VyLmxlc3MnO1xuaW1wb3J0IERhdGV0aW1lIGZyb20gJ3JlYWN0LWRhdGV0aW1lJztcbmltcG9ydCBtb21lbnQgZnJvbSAnbW9tZW50LXRpbWV6b25lJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGF0ZVRpbWVQaWNrZXIgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICAgICAgc3VwZXIocHJvcHMpO1xuXG4gICAgICAgIHRoaXMuc3RhdGUgPSB7XG4gICAgICAgICAgICB2YWx1ZTogcHJvcHMudmFsdWVcbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLmhhbmRsZUNoYW5nZSA9IHRoaXMuaGFuZGxlQ2hhbmdlLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuaXNWYWxpZERhdGUgPSB0aGlzLmlzVmFsaWREYXRlLmJpbmQodGhpcyk7XG4gICAgfVxuXG4gICAgY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wcywgcHJldlN0YXRlLCBzbmFwc2hvdCkge1xuICAgICAgICBpZiAodGhpcy5wcm9wcy52YWx1ZSAhPT0gcHJldlByb3BzLnZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLnNldFN0YXRlKHt2YWx1ZTogdGhpcy5wcm9wcy52YWx1ZX0pXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBoYW5kbGVDaGFuZ2UoZGF0ZSkge1xuXG4gICAgICAgIGxldCB7IHRpbWV6b25lIH0gPSB0aGlzLnByb3BzO1xuXG4gICAgICAgIGlmIChkYXRlICYmIG1vbWVudC5pc01vbWVudChkYXRlKSkge1xuICAgICAgICAgICAgZGF0ZSA9IG1vbWVudC50eihkYXRlLmZvcm1hdCgnWVlZWS1NTS1ERCBISDptbTpzcycpLCB0aW1lem9uZSlcbiAgICAgICAgfSBlbHNlIGlmIChkYXRlID09PSAnJykge1xuICAgICAgICAgICAgZGF0ZSA9IG1vbWVudCgwKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBldiA9IHt0YXJnZXQ6IHtcbiAgICAgICAgICAgICAgICBpZDogdGhpcy5wcm9wcy5pZCxcbiAgICAgICAgICAgICAgICB2YWx1ZTogZGF0ZSxcbiAgICAgICAgICAgICAgICB0eXBlOiAnZGF0ZXRpbWUnXG4gICAgICAgICAgICB9fTtcblxuICAgICAgICBpZiAoZGF0ZSAmJiBtb21lbnQuaXNNb21lbnQoZGF0ZSkpIHtcbiAgICAgICAgICAgIHRoaXMucHJvcHMub25DaGFuZ2UoZXYpO1xuICAgICAgICB9XG5cbiAgICB9XG5cbiAgICBpc1ZhbGlkRGF0ZShjdXJyZW50RGF0ZSwgc2VsZWN0ZWREYXRlKSB7XG4gICAgICAgIGxldCB7IHRpbWV6b25lLCB2YWxpZGF0aW9uIH0gPSB0aGlzLnByb3BzO1xuICAgICAgICBsZXQge2FmdGVyLCBiZWZvcmV9ID0gdmFsaWRhdGlvbjtcblxuICAgICAgICBpZiAoYWZ0ZXIgPT0gJzwnKVxuICAgICAgICAgICAgcmV0dXJuIChjdXJyZW50RGF0ZS5pc0JlZm9yZShtb21lbnQudHooYmVmb3JlICogMTAwMCwgdGltZXpvbmUpKSk7XG4gICAgICAgIGVsc2UgaWYoYWZ0ZXIgPT0gJz4nKVxuICAgICAgICAgICAgcmV0dXJuIChjdXJyZW50RGF0ZS5pc0FmdGVyKG1vbWVudC50eihiZWZvcmUgKiAxMDAwLCB0aW1lem9uZSkpKTtcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBsZXQgYWZ0ZXJEYXRlID0gbW9tZW50LnR6KGFmdGVyICogMTAwMCwgdGltZXpvbmUpLnN1YnRyYWN0KDEsICdkYXknKTtcbiAgICAgICAgICAgIGxldCBiZWZvcmVEYXRlID0gbW9tZW50LnR6KGJlZm9yZSAqIDEwMDAsIHRpbWV6b25lKTtcbiAgICAgICAgICAgIHJldHVybiBjdXJyZW50RGF0ZS5pc0FmdGVyKGFmdGVyRGF0ZSkgJiYgY3VycmVudERhdGUuaXNCZWZvcmUoYmVmb3JlRGF0ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZW5kZXIoKSB7XG4gICAgICAgIGxldCB2YWxpZGF0ZSA9ICh0eXBlb2YgdGhpcy5wcm9wcy52YWxpZGF0aW9uICE9ICd1bmRlZmluZWQnKTtcbiAgICAgICAgbGV0IHtvbkNoYW5nZSwgaWQsIHZhbHVlLCBmb3JtYXQsIGVycm9yLCBpbnB1dFByb3BzLCBkaXNhYmxlZCwgLi4ucmVzdH0gPSB0aGlzLnByb3BzO1xuICAgICAgICBsZXQgaGFzX2Vycm9yID0gKCB0aGlzLnByb3BzLmhhc093blByb3BlcnR5KCdlcnJvcicpICYmIGVycm9yICE9ICcnICk7XG4gICAgICAgIGxldCBjbGFzc05hbWUgPSAnZm9ybS1jb250cm9sICcgKyAoaGFzX2Vycm9yID8gJ2Vycm9yJyA6ICcnKTtcbiAgICAgICAgbGV0IGlucHV0RGlzYWJsZWQgPSAodGhpcy5wcm9wcy5oYXNPd25Qcm9wZXJ0eSgnZGlzYWJsZWQnKSkgPyBkaXNhYmxlZCA6IGZhbHNlO1xuXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgIHt2YWxpZGF0ZSA/IChcbiAgICAgICAgICAgICAgICAgICAgPERhdGV0aW1lXG4gICAgICAgICAgICAgICAgICAgICAgICBpc1ZhbGlkRGF0ZT17dGhpcy5pc1ZhbGlkRGF0ZX1cbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXt0aGlzLmhhbmRsZUNoYW5nZX1cbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGVGb3JtYXQ9e2Zvcm1hdC5kYXRlfVxuICAgICAgICAgICAgICAgICAgICAgICAgdGltZUZvcm1hdD17Zm9ybWF0LnRpbWV9XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT17dGhpcy5zdGF0ZS52YWx1ZX1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0UHJvcHM9e3suLi5pbnB1dFByb3BzLCBpZDogaWQsIGNsYXNzTmFtZTogY2xhc3NOYW1lLCBkaXNhYmxlZDogaW5wdXREaXNhYmxlZCwgYXV0b0NvbXBsZXRlOiAnb2ZmJ319XG4gICAgICAgICAgICAgICAgICAgICAgICB7Li4ucmVzdH1cbiAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICAgICAgICA8RGF0ZXRpbWVcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXt0aGlzLmhhbmRsZUNoYW5nZX1cbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGVGb3JtYXQ9e2Zvcm1hdC5kYXRlfVxuICAgICAgICAgICAgICAgICAgICAgICAgdGltZUZvcm1hdD17Zm9ybWF0LnRpbWV9XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT17dGhpcy5zdGF0ZS52YWx1ZX1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0UHJvcHM9e3suLi5pbnB1dFByb3BzLCBpZDogaWQsIGNsYXNzTmFtZTogY2xhc3NOYW1lLCBkaXNhYmxlZDogaW5wdXREaXNhYmxlZCwgYXV0b0NvbXBsZXRlOiAnb2ZmJ319XG4gICAgICAgICAgICAgICAgICAgICAgICB7Li4ucmVzdH1cbiAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICApfVxuXG4gICAgICAgICAgICAgICAge2hhc19lcnJvciAmJlxuICAgICAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cImVycm9yLWxhYmVsXCI+e2Vycm9yfTwvcD5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKTtcbiAgICB9XG59XG4iLCIvKipcbiAqIENvcHlyaWdodCAyMDE3IE9wZW5TdGFjayBGb3VuZGF0aW9uXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiovXG5cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgU2VsZWN0IGZyb20gJ3JlYWN0LXNlbGVjdCc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERyb3Bkb3duIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcblxuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgICAgIHN1cGVyKHByb3BzKTtcblxuICAgICAgICB0aGlzLmhhbmRsZUNoYW5nZSA9IHRoaXMuaGFuZGxlQ2hhbmdlLmJpbmQodGhpcyk7XG4gICAgfVxuXG4gICAgaGFuZGxlQ2hhbmdlKHNlbGVjdGlvbikge1xuXG4gICAgICAgIGxldCB2YWx1ZSA9IG51bGw7XG4gICAgICAgIGlmICh0aGlzLnByb3BzLmlzTXVsdGkpIHtcbiAgICAgICAgICAgIHZhbHVlID0gc2VsZWN0aW9uID8gc2VsZWN0aW9uLm1hcCh2YWwgPT4gdmFsLnZhbHVlKSA6IG51bGw7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YWx1ZSA9IHNlbGVjdGlvbiA/IHNlbGVjdGlvbi52YWx1ZSA6IG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgZXYgPSB7dGFyZ2V0OiB7XG4gICAgICAgICAgICAgICAgaWQ6IHRoaXMucHJvcHMuaWQsXG4gICAgICAgICAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdkcm9wZG93bidcbiAgICAgICAgICAgIH19O1xuXG4gICAgICAgIHRoaXMucHJvcHMub25DaGFuZ2UoZXYpO1xuICAgIH1cblxuICAgIHJlbmRlcigpIHtcblxuICAgICAgICBsZXQge29uQ2hhbmdlLCB2YWx1ZSwgY2xhc3NOYW1lLCBlcnJvciwgY2xlYXJhYmxlLCBkaXNhYmxlZCwgb3ZlcnJpZGVDU1MsIC4uLnJlc3R9ID0gdGhpcy5wcm9wcztcbiAgICAgICAgbGV0IGhhc19lcnJvciA9ICggdGhpcy5wcm9wcy5oYXNPd25Qcm9wZXJ0eSgnZXJyb3InKSAmJiBlcnJvciAhPSAnJyApO1xuICAgICAgICBsZXQgaXNDbGVhcmFibGUgPSAodGhpcy5wcm9wcy5oYXNPd25Qcm9wZXJ0eSgnY2xlYXJhYmxlJykpO1xuICAgICAgICBsZXQgaXNEaXNhYmxlZCA9ICh0aGlzLnByb3BzLmhhc093blByb3BlcnR5KCdkaXNhYmxlZCcpICYmIGRpc2FibGVkID09IHRydWUpO1xuICAgICAgICBsZXQgdGhlVmFsdWUgPSBudWxsO1xuXG4gICAgICAgIGxldCBzZWxlY3RDbGFzc05hbWUgPSBjbGFzc05hbWU7XG5cbiAgICAgICAgaWYgKCF0aGlzLnByb3BzLmhhc093blByb3BlcnR5KCdvdmVycmlkZUNTUycpIHx8IG92ZXJyaWRlQ1NTID09IGZhbHNlKSB7XG4gICAgICAgICAgICBzZWxlY3RDbGFzc05hbWUgPSAnZHJvcGRvd24gJyArIGNsYXNzTmFtZSArICcgJyArIChoYXNfZXJyb3IgPyAnZXJyb3InIDogJycpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMucHJvcHMuaXNNdWx0aSkge1xuICAgICAgICAgICAgdGhlVmFsdWUgPSB0aGlzLnByb3BzLm9wdGlvbnMuZmlsdGVyKG9wID0+IHZhbHVlLmluY2x1ZGVzKG9wLnZhbHVlKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGVWYWx1ZSA9ICh2YWx1ZSBpbnN0YW5jZW9mIE9iamVjdCB8fCB2YWx1ZSA9PSBudWxsKSA/IHZhbHVlIDogdGhpcy5wcm9wcy5vcHRpb25zLmZpbmQob3B0ID0+IG9wdC52YWx1ZSA9PSB2YWx1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBzZWxlY3RTdHlsZXMgPSB7IG1lbnU6IHN0eWxlcyA9PiAoeyAuLi5zdHlsZXMsIHpJbmRleDogOTk5IH0pIH07XG5cbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgPFNlbGVjdFxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9e3NlbGVjdENsYXNzTmFtZX1cbiAgICAgICAgICAgICAgICAgICAgdmFsdWU9e3RoZVZhbHVlfVxuICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17dGhpcy5oYW5kbGVDaGFuZ2V9XG4gICAgICAgICAgICAgICAgICAgIGlzQ2xlYXJhYmxlPXtpc0NsZWFyYWJsZX1cbiAgICAgICAgICAgICAgICAgICAgaXNEaXNhYmxlZD17aXNEaXNhYmxlZH1cbiAgICAgICAgICAgICAgICAgICAgc3R5bGVzPXtzZWxlY3RTdHlsZXN9XG4gICAgICAgICAgICAgICAgICAgIHsuLi5yZXN0fVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAge2hhc19lcnJvciAmJlxuICAgICAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cImVycm9yLWxhYmVsXCI+e2Vycm9yfTwvcD5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKTtcblxuICAgIH1cbn1cbiIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTcgT3BlblN0YWNrIEZvdW5kYXRpb25cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqKi9cblxuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcblxuXG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRleHRFZGl0b3IgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICAgICAgc3VwZXIocHJvcHMpO1xuICAgICAgICB0aGlzLlJpY2hUZXh0RWRpdG9yID0gbnVsbDtcblxuICAgICAgICAvLyB0aGlzIGlzIGRvbmUgYmMgZHVlIFNTUiBpc3N1ZXNcbiAgICAgICAgLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3N0dXIvcmVhY3QtcnRlL2lzc3Vlcy8zNzNcbiAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICB0aGlzLlJpY2hUZXh0RWRpdG9yID0gcmVxdWlyZSgncmVhY3QtcnRlJykuZGVmYXVsdDtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc3RhdGUgPSB7XG4gICAgICAgICAgICBlZGl0b3JWYWx1ZTogdGhpcy5SaWNoVGV4dEVkaXRvcj8uY3JlYXRlRW1wdHlWYWx1ZSgpLFxuICAgICAgICAgICAgY3VycmVudFZhbHVlOiBudWxsXG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5oYW5kbGVDaGFuZ2UgPSB0aGlzLmhhbmRsZUNoYW5nZS5iaW5kKHRoaXMpO1xuICAgIH1cblxuICAgIHN0YXRpYyBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMocHJvcHMsIHN0YXRlKSB7XG4gICAgICAgIGNvbnN0IHt2YWx1ZX0gPSBwcm9wcztcbiAgICAgICAgY29uc3Qge2VkaXRvclZhbHVlLCBjdXJyZW50VmFsdWV9ID0gc3RhdGU7XG5cbiAgICAgICAgaWYgKGN1cnJlbnRWYWx1ZSAhPSBudWxsKSB7XG4gICAgICAgICAgICBpZiAodmFsdWUgPT09IGN1cnJlbnRWYWx1ZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBzdGF0ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB7Li4uc3RhdGUsIGVkaXRvclZhbHVlOiBlZGl0b3JWYWx1ZS5zZXRDb250ZW50RnJvbVN0cmluZyh2YWx1ZSwgJ2h0bWwnKSwgY3VycmVudFZhbHVlOiB2YWx1ZX1cbiAgICB9XG5cbiAgICBoYW5kbGVDaGFuZ2UoZWRpdG9yVmFsdWUpIHtcblxuICAgICAgICBsZXQgb2xkRWRpdG9yVmFsdWUgPSB0aGlzLnN0YXRlLmVkaXRvclZhbHVlO1xuICAgICAgICB0aGlzLnNldFN0YXRlKHtlZGl0b3JWYWx1ZX0pO1xuXG4gICAgICAgIGxldCBvbGRDb250ZW50U3RhdGUgPSBvbGRFZGl0b3JWYWx1ZSA/IG9sZEVkaXRvclZhbHVlLmdldEVkaXRvclN0YXRlKCkuZ2V0Q3VycmVudENvbnRlbnQoKSA6IG51bGw7XG4gICAgICAgIGxldCBuZXdDb250ZW50U3RhdGUgPSBlZGl0b3JWYWx1ZS5nZXRFZGl0b3JTdGF0ZSgpLmdldEN1cnJlbnRDb250ZW50KCk7XG5cbiAgICAgICAgaWYgKG9sZENvbnRlbnRTdGF0ZSAhPT0gbmV3Q29udGVudFN0YXRlKSB7XG4gICAgICAgICAgICBsZXQgc3RyaW5nVmFsdWUgPSBlZGl0b3JWYWx1ZS50b1N0cmluZygnaHRtbCcpO1xuICAgICAgICAgICAgc3RyaW5nVmFsdWUgPSBzdHJpbmdWYWx1ZSA9PT0gJzxwPjxicj48L3A+JyA/ICcnIDogc3RyaW5nVmFsdWU7XG5cbiAgICAgICAgICAgIHRoaXMuc2V0U3RhdGUoe2N1cnJlbnRWYWx1ZTogc3RyaW5nVmFsdWV9KTtcblxuICAgICAgICAgICAgaWYgKHN0cmluZ1ZhbHVlICE9PSB0aGlzLnByb3BzLnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgbGV0IGV2ID0ge3RhcmdldDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IHRoaXMucHJvcHMuaWQsXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogc3RyaW5nVmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAndGV4dGVkaXRvcidcbiAgICAgICAgICAgICAgICAgICAgfX07XG5cbiAgICAgICAgICAgICAgICB0aGlzLnByb3BzLm9uQ2hhbmdlKGV2KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJlbmRlcigpIHtcblxuICAgICAgICBsZXQge29uQ2hhbmdlLCB2YWx1ZSwgZXJyb3IsIGNsYXNzTmFtZSwgaWQsIC4uLnJlc3R9ID0gdGhpcy5wcm9wcztcbiAgICAgICAgbGV0IGhhc19lcnJvciA9ICggdGhpcy5wcm9wcy5oYXNPd25Qcm9wZXJ0eSgnZXJyb3InKSAmJiBlcnJvciAhPT0gJycgKTtcblxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICB7dGhpcy5SaWNoVGV4dEVkaXRvciAmJlxuICAgICAgICAgICAgICAgICAgICA8dGhpcy5SaWNoVGV4dEVkaXRvclxuICAgICAgICAgICAgICAgICAgICAgICAgaWQ9e2lkfVxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtjbGFzc05hbWUgKyAnICcgKyAoaGFzX2Vycm9yID8gJ2Vycm9yJyA6ICcnKX1cbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPXt0aGlzLnN0YXRlLmVkaXRvclZhbHVlfVxuICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9e3RoaXMuaGFuZGxlQ2hhbmdlfVxuICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB7aGFzX2Vycm9yICYmXG4gICAgICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwiZXJyb3ItbGFiZWxcIj57ZXJyb3J9PC9wPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICApO1xuXG4gICAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTcgT3BlblN0YWNrIEZvdW5kYXRpb25cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqKi9cblxuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBBc3luY1NlbGVjdCBmcm9tICdyZWFjdC1zZWxlY3QvbGliL0FzeW5jJztcbmltcG9ydCB7cXVlcnlFdmVudHN9IGZyb20gJy4uLy4uL3V0aWxzL3F1ZXJ5LWFjdGlvbnMnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFdmVudElucHV0IGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcblxuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgICAgIHN1cGVyKHByb3BzKTtcblxuICAgICAgICB0aGlzLmhhbmRsZUNoYW5nZSA9IHRoaXMuaGFuZGxlQ2hhbmdlLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuZ2V0RXZlbnRzID0gdGhpcy5nZXRFdmVudHMuYmluZCh0aGlzKTtcbiAgICB9XG5cbiAgICBoYW5kbGVDaGFuZ2UodmFsdWUpIHtcblxuICAgICAgICBsZXQgZXYgPSB7dGFyZ2V0OiB7XG4gICAgICAgICAgICBpZDogdGhpcy5wcm9wcy5pZCxcbiAgICAgICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgICAgICAgIHR5cGU6ICdldmVudGlucHV0J1xuICAgICAgICB9fTtcblxuICAgICAgICB0aGlzLnByb3BzLm9uQ2hhbmdlKGV2KTtcbiAgICB9XG5cbiAgICBnZXRFdmVudHMgKGlucHV0LCBjYWxsYmFjaykge1xuICAgICAgICBsZXQge3N1bW1pdCwgb25seVB1Ymxpc2hlZH0gPSB0aGlzLnByb3BzO1xuXG4gICAgICAgIGlmICghaW5wdXQpIHtcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoeyBvcHRpb25zOiBbXSB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHF1ZXJ5RXZlbnRzKHN1bW1pdC5pZCwgaW5wdXQsIG9ubHlQdWJsaXNoZWQsIGNhbGxiYWNrKTtcbiAgICB9XG5cbiAgICByZW5kZXIoKSB7XG4gICAgICAgIGxldCB7dmFsdWUsIG9uQ2hhbmdlLCBpZCwgbXVsdGksIC4uLnJlc3R9ID0gdGhpcy5wcm9wcztcbiAgICAgICAgbGV0IGlzTXVsdGkgPSAodGhpcy5wcm9wcy5oYXNPd25Qcm9wZXJ0eSgnbXVsdGknKSk7XG5cbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxBc3luY1NlbGVjdFxuICAgICAgICAgICAgICAgIHZhbHVlPXt2YWx1ZX1cbiAgICAgICAgICAgICAgICBvbkNoYW5nZT17dGhpcy5oYW5kbGVDaGFuZ2V9XG4gICAgICAgICAgICAgICAgbG9hZE9wdGlvbnM9e3RoaXMuZ2V0RXZlbnRzfVxuICAgICAgICAgICAgICAgIGdldE9wdGlvblZhbHVlPXtvcHRpb24gPT4gb3B0aW9uLmlkfVxuICAgICAgICAgICAgICAgIGdldE9wdGlvbkxhYmVsPXtvcHRpb24gPT4gb3B0aW9uLnRpdGxlfVxuICAgICAgICAgICAgICAgIGlzTXVsdGk9e2lzTXVsdGl9XG4gICAgICAgICAgICAgICAgey4uLnJlc3R9XG4gICAgICAgICAgICAvPlxuICAgICAgICApO1xuXG4gICAgfVxufVxuXG4iLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IENyZWF0YWJsZVNlbGVjdCBmcm9tICdyZWFjdC1zZWxlY3QvbGliL0NyZWF0YWJsZSc7XG5pbXBvcnQgVCBmcm9tICdpMThuLXJlYWN0L2Rpc3QvaTE4bi1yZWFjdCc7XG5cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRnJlZU11bHRpVGV4dElucHV0IGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcblxuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgICAgIHN1cGVyKHByb3BzKTtcblxuICAgICAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgICAgICAgaW5wdXRWYWx1ZTogJydcbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLmhhbmRsZUNoYW5nZSA9IHRoaXMuaGFuZGxlQ2hhbmdlLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuaGFuZGxlSW5wdXRDaGFuZ2UgPSB0aGlzLmhhbmRsZUlucHV0Q2hhbmdlLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuaGFuZGxlS2V5RG93biA9IHRoaXMuaGFuZGxlS2V5RG93bi5iaW5kKHRoaXMpO1xuICAgIH1cblxuICAgIGhhbmRsZUNoYW5nZSh2YWx1ZSkge1xuICAgICAgICBsZXQgbGltaXQgPSB0aGlzLnByb3BzLmhhc093blByb3BlcnR5KCdsaW1pdCcpID8gdGhpcy5wcm9wcy5saW1pdCA6IGZhbHNlO1xuXG4gICAgICAgIGlmICghbGltaXQgfHwgbGltaXQgPj0gdmFsdWUubGVuZ3RoICkge1xuICAgICAgICAgICAgbGV0IGV2ID0ge3RhcmdldDoge1xuICAgICAgICAgICAgICAgICAgICBpZDogdGhpcy5wcm9wcy5pZCxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICAgICAgICAgICAgICB0eXBlOiAnZnJlZXRleHRsaXN0J1xuICAgICAgICAgICAgICAgIH19O1xuXG4gICAgICAgICAgICB0aGlzLnByb3BzLm9uQ2hhbmdlKGV2KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGhhbmRsZUlucHV0Q2hhbmdlKGlucHV0VmFsdWUpIHtcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7IGlucHV0VmFsdWUgfSk7XG4gICAgfVxuXG4gICAgaGFuZGxlS2V5RG93bihldmVudCkge1xuICAgICAgICBjb25zdCB7IGlucHV0VmFsdWUgfSA9IHRoaXMuc3RhdGU7XG4gICAgICAgIGxldCB7IHZhbHVlIH0gPSB0aGlzLnByb3BzO1xuXG4gICAgICAgIGlmICghaW5wdXRWYWx1ZSkgcmV0dXJuO1xuXG4gICAgICAgIHN3aXRjaCAoZXZlbnQua2V5KSB7XG4gICAgICAgICAgICBjYXNlICdFbnRlcic6XG4gICAgICAgICAgICBjYXNlICdUYWInOlxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgICAgICAgICAgICBpbnB1dFZhbHVlOiAnJyxcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlQ2hhbmdlKFsuLi52YWx1ZSwge2xhYmVsOiBpbnB1dFZhbHVlLCB2YWx1ZTogaW5wdXRWYWx1ZX1dKVxuXG4gICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgfVxuICAgIH1cblxuXG4gICAgcmVuZGVyKCkge1xuICAgICAgICBjb25zdCB7IGlucHV0VmFsdWUgfSA9IHRoaXMuc3RhdGU7XG4gICAgICAgIGxldCB7aWQsIHZhbHVlLCBvbkNoYW5nZSwgLi4ucmVzdH0gPSB0aGlzLnByb3BzO1xuXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8Q3JlYXRhYmxlU2VsZWN0XG4gICAgICAgICAgICAgICAgY29tcG9uZW50cz17e0Ryb3Bkb3duSW5kaWNhdG9yOiBudWxsfX1cbiAgICAgICAgICAgICAgICBpbnB1dFZhbHVlPXtpbnB1dFZhbHVlfVxuICAgICAgICAgICAgICAgIGNsZWFyYWJsZVxuICAgICAgICAgICAgICAgIGlzTXVsdGlcbiAgICAgICAgICAgICAgICBtZW51Q29udGFpbmVyU3R5bGU9e3tkaXNwbGF5OiAnbm9uZSd9fVxuICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXt0aGlzLmhhbmRsZUNoYW5nZX1cbiAgICAgICAgICAgICAgICBvbklucHV0Q2hhbmdlPXt0aGlzLmhhbmRsZUlucHV0Q2hhbmdlfVxuICAgICAgICAgICAgICAgIG9uSW5wdXRLZXlEb3duPXt0aGlzLmhhbmRsZUtleURvd259XG4gICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9e1QudHJhbnNsYXRlKFwiZ2VuZXJhbC50eXBlX3NvbWV0aGluZ1wiKX1cbiAgICAgICAgICAgICAgICB2YWx1ZT17dmFsdWV9XG4gICAgICAgICAgICAgICAgey4uLnJlc3R9XG4gICAgICAgICAgICAvPlxuICAgICAgICApO1xuICAgIH1cbn1cbiIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTcgT3BlblN0YWNrIEZvdW5kYXRpb25cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqKi9cblxuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBBc3luY1NlbGVjdCBmcm9tICdyZWFjdC1zZWxlY3QvbGliL0FzeW5jJztcbmltcG9ydCB7cXVlcnlHcm91cHN9IGZyb20gJy4uLy4uL3V0aWxzL3F1ZXJ5LWFjdGlvbnMnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBHcm91cElucHV0IGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcblxuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgICAgIHN1cGVyKHByb3BzKTtcblxuICAgICAgICB0aGlzLmhhbmRsZUNoYW5nZSA9IHRoaXMuaGFuZGxlQ2hhbmdlLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuZ2V0R3JvdXBzID0gdGhpcy5nZXRHcm91cHMuYmluZCh0aGlzKTtcbiAgICB9XG5cbiAgICBoYW5kbGVDaGFuZ2UodmFsdWUpIHtcblxuICAgICAgICBsZXQgZXYgPSB7dGFyZ2V0OiB7XG4gICAgICAgICAgICBpZDogdGhpcy5wcm9wcy5pZCxcbiAgICAgICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgICAgICAgIHR5cGU6ICdncm91cGlucHV0J1xuICAgICAgICB9fTtcblxuICAgICAgICB0aGlzLnByb3BzLm9uQ2hhbmdlKGV2KTtcbiAgICB9XG5cbiAgICBnZXRHcm91cHMgKGlucHV0LCBjYWxsYmFjaykge1xuICAgICAgICBpZiAoIWlucHV0KSB7XG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHsgb3B0aW9uczogW10gfSk7XG4gICAgICAgIH1cblxuICAgICAgICBxdWVyeUdyb3VwcyhpbnB1dCwgY2FsbGJhY2spO1xuICAgIH1cblxuICAgIHJlbmRlcigpIHtcbiAgICAgICAgbGV0IHt2YWx1ZSwgb25DaGFuZ2UsIGlkLCBtdWx0aSwgLi4ucmVzdH0gPSB0aGlzLnByb3BzO1xuICAgICAgICBsZXQgaXNNdWx0aSA9ICh0aGlzLnByb3BzLmhhc093blByb3BlcnR5KCdtdWx0aScpKTtcblxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPEFzeW5jU2VsZWN0XG4gICAgICAgICAgICAgICAgdmFsdWU9e3ZhbHVlfVxuICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXt0aGlzLmhhbmRsZUNoYW5nZX1cbiAgICAgICAgICAgICAgICBsb2FkT3B0aW9ucz17dGhpcy5nZXRHcm91cHN9XG4gICAgICAgICAgICAgICAgZ2V0T3B0aW9uVmFsdWU9e29wdGlvbiA9PiBvcHRpb24uaWR9XG4gICAgICAgICAgICAgICAgZ2V0T3B0aW9uTGFiZWw9e29wdGlvbiA9PiBvcHRpb24udGl0bGV9XG4gICAgICAgICAgICAgICAgaXNNdWx0aT17aXNNdWx0aX1cbiAgICAgICAgICAgICAgICB7Li4ucmVzdH1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICk7XG5cbiAgICB9XG59XG5cbiIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTcgT3BlblN0YWNrIEZvdW5kYXRpb25cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqKi9cblxuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcblxuZXhwb3J0IGNvbnN0IE9wdGlvbkdyb3VwID0gICh7XG4gICAgdmFsdWUsXG4gICAgbGFiZWwsXG4gICAgb3B0aW9uc1xufSkgPT4ge1xuICAgIHJldHVybiAoW1xuICAgICAgICA8b3B0aW9uIGtleT17XCJncm91cFwiICsgdmFsdWV9IGNsYXNzTmFtZT1cIm9wdGlvbi1ncm91cFwiIHZhbHVlPXt2YWx1ZX0+e2xhYmVsfTwvb3B0aW9uPixcbiAgICAgICAgb3B0aW9ucy5tYXAoKG9wdCxpKSA9PiAoXG4gICAgICAgICAgICA8b3B0aW9uIGNsYXNzTmFtZT1cIm9wdGlvbi1jaGlsZFwiIGtleT17b3B0LnZhbHVlfSB2YWx1ZT17b3B0LnZhbHVlfT4gLSB7b3B0LmxhYmVsfTwvb3B0aW9uPlxuICAgICAgICApKVxuICAgIF0pO1xufTsiLCIvKipcbiAqIENvcHlyaWdodCAyMDE3IE9wZW5TdGFjayBGb3VuZGF0aW9uXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiovXG5cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBPcHRpb25Hcm91cCB9IGZyb20gJy4vT3B0aW9uR3JvdXAnO1xuaW1wb3J0ICcuL29wdGlvbmdyb3VwLmxlc3MnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBHcm91cGVkRHJvcGRvd24gZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICAgICAgc3VwZXIocHJvcHMpO1xuXG4gICAgICAgIHRoaXMuc3RhdGUgPSB7XG4gICAgICAgICAgICB2YWx1ZTogcHJvcHMudmFsdWVcbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLmhhbmRsZUNoYW5nZSA9IHRoaXMuaGFuZGxlQ2hhbmdlLmJpbmQodGhpcyk7XG4gICAgfVxuXG4gICAgY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wcywgcHJldlN0YXRlLCBzbmFwc2hvdCkge1xuICAgICAgICBpZiAodGhpcy5wcm9wcy52YWx1ZSAhPT0gcHJldlByb3BzLnZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLnNldFN0YXRlKHt2YWx1ZTogdGhpcy5wcm9wcy52YWx1ZX0pXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBoYW5kbGVDaGFuZ2UoZXYpIHtcbiAgICAgICAgdGhpcy5wcm9wcy5vbkNoYW5nZShldik7XG4gICAgfVxuXG4gICAgcmVuZGVyKCkge1xuICAgICAgICBsZXQge2lkLCBvcHRpb25zLCBwbGFjZWhvbGRlciwgY2xhc3NOYW1lLCBlcnJvcn0gPSB0aGlzLnByb3BzO1xuICAgICAgICBsZXQgaGFzX2Vycm9yID0gKCB0aGlzLnByb3BzLmhhc093blByb3BlcnR5KCdlcnJvcicpICYmIGVycm9yICE9ICcnICk7XG4gICAgICAgIGxldCB7dmFsdWV9ID0gdGhpcy5zdGF0ZTtcblxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICA8c2VsZWN0XG4gICAgICAgICAgICAgICAgICAgIGlkPXtpZH1cbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtjbGFzc05hbWUgKyAnIGZvcm0tY29udHJvbCAnICsgKGhhc19lcnJvciA/ICdlcnJvcicgOiAnJyl9XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlPXt2YWx1ZX1cbiAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9e3RoaXMuaGFuZGxlQ2hhbmdlfT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJcIiBkaXNhYmxlZD57cGxhY2Vob2xkZXJ9PC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICB7b3B0aW9ucy5tYXAoKG9wdCxpKSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBvcHQub3B0aW9ucyAhPSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8T3B0aW9uR3JvdXAga2V5PXsnZ3JvdXBfb3B0XycraX0gbGFiZWw9e29wdC5sYWJlbH0gdmFsdWU9e29wdC52YWx1ZX0gb3B0aW9ucz17b3B0Lm9wdGlvbnN9Lz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24ga2V5PXtvcHQudmFsdWV9IHZhbHVlPXtvcHQudmFsdWV9PntvcHQubGFiZWx9PC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICA8L3NlbGVjdD5cbiAgICAgICAgICAgICAgICB7aGFzX2Vycm9yICYmXG4gICAgICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwiZXJyb3ItbGFiZWxcIj57ZXJyb3J9PC9wPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICApO1xuICAgIH1cbn0iLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW4iLCIvKipcbiAqIENvcHlyaWdodCAyMDE4IE9wZW5TdGFjayBGb3VuZGF0aW9uXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiovXG5cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgU2VsZWN0IGZyb20gJ3JlYWN0LXNlbGVjdCc7XG5pbXBvcnQge2dldExhbmd1YWdlTGlzdH0gZnJvbSAnLi4vLi4vdXRpbHMvcXVlcnktYWN0aW9ucyc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIExhbmd1YWdlSW5wdXQgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICAgICAgc3VwZXIocHJvcHMpO1xuXG4gICAgICAgIHRoaXMuc3RhdGUgPSB7XG4gICAgICAgICAgICBvcHRpb25zOiBbXSxcbiAgICAgICAgICAgIHNob3VsZFVzZUlkOiBwcm9wcy5oYXNPd25Qcm9wZXJ0eSgnc2hvdWxkVXNlSWQnKSA/IHByb3BzLnNob3VsZFVzZUlkIDogZmFsc2UsXG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5oYW5kbGVDaGFuZ2UgPSB0aGlzLmhhbmRsZUNoYW5nZS5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLnNldE9wdGlvbnMgPSB0aGlzLnNldE9wdGlvbnMuYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5hYm9ydENvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG5cbiAgICAgICAgZ2V0TGFuZ3VhZ2VMaXN0KHRoaXMuc2V0T3B0aW9ucywgdGhpcy5hYm9ydENvbnRyb2xsZXIuc2lnbmFsKTtcbiAgICB9XG5cbiAgICBjb21wb25lbnRXaWxsVW5tb3VudCgpe1xuICAgICAgICB0aGlzLmFib3J0Q29udHJvbGxlci5hYm9ydCgpO1xuICAgIH1cblxuICAgIHNldE9wdGlvbnMocmVzcG9uc2UpIHtcbiAgICAgICAgbGV0IGxhbmd1YWdlTGlzdCA9ICh0aGlzLnN0YXRlLnNob3VsZFVzZUlkKSA/XG4gICAgICAgICAgICByZXNwb25zZS5tYXAobCA9PiAoe2xhYmVsOiBsLm5hbWUsIHZhbHVlOiBsLmlkfSkpOlxuICAgICAgICAgICAgcmVzcG9uc2UubWFwKGwgPT4gKHtsYWJlbDogbC5uYW1lLCB2YWx1ZTogbC5pc29fY29kZX0pKTtcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7b3B0aW9uczogbGFuZ3VhZ2VMaXN0fSk7XG4gICAgfVxuXG4gICAgaGFuZGxlQ2hhbmdlKHZhbHVlKSB7XG4gICAgICAgIGxldCBpc011bHRpID0gKHRoaXMucHJvcHMuaGFzT3duUHJvcGVydHkoJ211bHRpJykpO1xuICAgICAgICBsZXQgdGhlVmFsdWUgPSBudWxsO1xuXG4gICAgICAgIGlmIChpc011bHRpKSB7XG4gICAgICAgICAgICB0aGVWYWx1ZSA9IHZhbHVlLm1hcCh2ID0+IHYudmFsdWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhlVmFsdWUgPSB2YWx1ZS52YWx1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBldiA9IHt0YXJnZXQ6IHtcbiAgICAgICAgICAgICAgICBpZDogdGhpcy5wcm9wcy5pZCxcbiAgICAgICAgICAgICAgICB2YWx1ZTogdGhlVmFsdWUsXG4gICAgICAgICAgICAgICAgdHlwZTogJ2xhZ3VhZ2VpbnB1dCdcbiAgICAgICAgICAgIH19O1xuXG4gICAgICAgIHRoaXMucHJvcHMub25DaGFuZ2UoZXYpO1xuICAgIH1cblxuICAgIHJlbmRlcigpIHtcbiAgICAgICAgbGV0IHt2YWx1ZSwgb25DaGFuZ2UsIGlkLCBtdWx0aSwgLi4ucmVzdH0gPSB0aGlzLnByb3BzO1xuICAgICAgICBsZXQge29wdGlvbnN9ID0gdGhpcy5zdGF0ZTtcbiAgICAgICAgbGV0IGlzTXVsdGkgPSAodGhpcy5wcm9wcy5oYXNPd25Qcm9wZXJ0eSgnbXVsdGknKSk7XG4gICAgICAgIGxldCB0aGVWYWx1ZSA9IG51bGw7XG5cbiAgICAgICAgaWYgKGlzTXVsdGkpIHtcbiAgICAgICAgICAgIHRoZVZhbHVlID0gb3B0aW9ucy5maWx0ZXIob3AgPT4gdmFsdWUuaW5jbHVkZXMob3AudmFsdWUpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoZVZhbHVlID0gKHZhbHVlIGluc3RhbmNlb2YgT2JqZWN0IHx8IHZhbHVlID09IG51bGwpID8gdmFsdWUgOiBvcHRpb25zLmZpbmQob3B0ID0+IG9wdC52YWx1ZSA9PSB2YWx1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPFNlbGVjdFxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImRyb3Bkb3duXCJcbiAgICAgICAgICAgICAgICBvbkNoYW5nZT17dGhpcy5oYW5kbGVDaGFuZ2V9XG4gICAgICAgICAgICAgICAgb3B0aW9ucz17b3B0aW9uc31cbiAgICAgICAgICAgICAgICB2YWx1ZT17dGhlVmFsdWV9XG4gICAgICAgICAgICAgICAgaXNNdWx0aT17aXNNdWx0aX1cbiAgICAgICAgICAgICAgICB7Li4ucmVzdH1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICk7XG5cbiAgICB9XG59XG4iLCIvKipcbiAqIENvcHlyaWdodCAyMDE3IE9wZW5TdGFjayBGb3VuZGF0aW9uXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiovXG5cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgQXN5bmNTZWxlY3QgZnJvbSAncmVhY3Qtc2VsZWN0L2xpYi9Bc3luYyc7XG5pbXBvcnQge3F1ZXJ5TWVtYmVyc30gZnJvbSAnLi4vLi4vdXRpbHMvcXVlcnktYWN0aW9ucyc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE1lbWJlcklucHV0IGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcblxuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgICAgIHN1cGVyKHByb3BzKTtcblxuICAgICAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgICAgICAgdmFsdWU6IHByb3BzLnZhbHVlXG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5oYW5kbGVDaGFuZ2UgPSB0aGlzLmhhbmRsZUNoYW5nZS5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLmdldE1lbWJlcnMgPSB0aGlzLmdldE1lbWJlcnMuYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5nZXRPcHRpb25WYWx1ZSA9IHRoaXMuZ2V0T3B0aW9uVmFsdWUuYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5nZXRPcHRpb25MYWJlbCA9IHRoaXMuZ2V0T3B0aW9uTGFiZWwuYmluZCh0aGlzKTtcbiAgICB9XG5cbiAgICBnZXRPcHRpb25WYWx1ZShtZW1iZXIpe1xuICAgICAgICBpZih0aGlzLnByb3BzLmhhc093blByb3BlcnR5KFwiZ2V0T3B0aW9uVmFsdWVcIikpe1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucHJvcHMuZ2V0T3B0aW9uVmFsdWUobWVtYmVyKTtcbiAgICAgICAgfVxuICAgICAgICAvL2RlZmF1bHRcbiAgICAgICAgcmV0dXJuIG1lbWJlci5pZDtcbiAgICB9XG5cbiAgICBnZXRPcHRpb25MYWJlbChtZW1iZXIpe1xuICAgICAgICBpZih0aGlzLnByb3BzLmhhc093blByb3BlcnR5KFwiZ2V0T3B0aW9uTGFiZWxcIikpe1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucHJvcHMuZ2V0T3B0aW9uTGFiZWwobWVtYmVyKTtcbiAgICAgICAgfVxuICAgICAgICAvL2RlZmF1bHRcbiAgICAgICAgcmV0dXJuIGAke21lbWJlci5maXJzdF9uYW1lfSAke21lbWJlci5sYXN0X25hbWV9ICgke21lbWJlci5pZH0pYDtcbiAgICB9XG5cbiAgICBoYW5kbGVDaGFuZ2UodmFsdWUpIHtcbiAgICAgICAgbGV0IGV2ID0ge3RhcmdldDoge1xuICAgICAgICAgICAgaWQ6IHRoaXMucHJvcHMuaWQsXG4gICAgICAgICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICAgICAgICB0eXBlOiAnbWVtYmVyaW5wdXQnXG4gICAgICAgIH19O1xuXG4gICAgICAgIHRoaXMucHJvcHMub25DaGFuZ2UoZXYpO1xuICAgIH1cblxuICAgIGdldE1lbWJlcnMgKGlucHV0LCBjYWxsYmFjaykge1xuICAgICAgICBpZiAoIWlucHV0KSB7XG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHsgb3B0aW9uczogW10gfSk7XG4gICAgICAgIH1cbiAgICAgICAgcXVlcnlNZW1iZXJzKGlucHV0LCBjYWxsYmFjayk7XG4gICAgfVxuXG4gICAgcmVuZGVyKCkge1xuICAgICAgICBsZXQge3ZhbHVlLCBlcnJvciwgb25DaGFuZ2UsIGlkLCBtdWx0aSwgLi4ucmVzdH0gPSB0aGlzLnByb3BzO1xuICAgICAgICBsZXQgaXNNdWx0aSA9ICh0aGlzLnByb3BzLmhhc093blByb3BlcnR5KCdtdWx0aScpKTtcbiAgICAgICAgbGV0IGhhc19lcnJvciA9ICggdGhpcy5wcm9wcy5oYXNPd25Qcm9wZXJ0eSgnZXJyb3InKSAmJiBlcnJvciAhPSAnJyApO1xuXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgIDxBc3luY1NlbGVjdFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZT17dmFsdWV9XG4gICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXt0aGlzLmhhbmRsZUNoYW5nZX1cbiAgICAgICAgICAgICAgICAgICAgbG9hZE9wdGlvbnM9e3RoaXMuZ2V0TWVtYmVyc31cbiAgICAgICAgICAgICAgICAgICAgZ2V0T3B0aW9uVmFsdWU9e20gPT4gdGhpcy5nZXRPcHRpb25WYWx1ZShtKX1cbiAgICAgICAgICAgICAgICAgICAgZ2V0T3B0aW9uTGFiZWw9e20gPT4gdGhpcy5nZXRPcHRpb25MYWJlbChtKX1cbiAgICAgICAgICAgICAgICAgICAgaXNNdWx0aT17aXNNdWx0aX1cbiAgICAgICAgICAgICAgICAgICAgey4uLnJlc3R9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICB7aGFzX2Vycm9yICYmXG4gICAgICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwiZXJyb3ItbGFiZWxcIj57ZXJyb3J9PC9wPlxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICk7XG5cbiAgICB9XG59XG5cbiIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTcgT3BlblN0YWNrIEZvdW5kYXRpb25cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqKi9cblxuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBBc3luY1NlbGVjdCBmcm9tICdyZWFjdC1zZWxlY3QvbGliL0FzeW5jJztcbmltcG9ydCBBc3luY0NyZWF0YWJsZVNlbGVjdCBmcm9tICdyZWFjdC1zZWxlY3QvbGliL0FzeW5jQ3JlYXRhYmxlJztcbmltcG9ydCB7cXVlcnlPcmdhbml6YXRpb25zfSBmcm9tICcuLi8uLi91dGlscy9xdWVyeS1hY3Rpb25zJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgT3JnYW5pemF0aW9uSW5wdXQgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICAgICAgc3VwZXIocHJvcHMpO1xuXG4gICAgICAgIHRoaXMuaGFuZGxlQ2hhbmdlID0gdGhpcy5oYW5kbGVDaGFuZ2UuYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5oYW5kbGVOZXcgPSB0aGlzLmhhbmRsZU5ldy5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLmdldE9yZ2FuaXphdGlvbnMgPSB0aGlzLmdldE9yZ2FuaXphdGlvbnMuYmluZCh0aGlzKTtcbiAgICB9XG5cbiAgICBoYW5kbGVDaGFuZ2UodmFsdWUpIHtcbiAgICAgICAgLy8gd2UgbmVlZCB0byBtYXAgaW50byB2YWx1ZS9sYWJlbCBiZWNhdXNlIG9mIGEgYnVnIGluIHJlYWN0LXNlbGVjdCAyXG4gICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9KZWRXYXRzb24vcmVhY3Qtc2VsZWN0L2lzc3Vlcy8yOTk4XG5cbiAgICAgICAgbGV0IGV2ID0ge3RhcmdldDoge1xuICAgICAgICAgICAgICAgIGlkOiB0aGlzLnByb3BzLmlkLFxuICAgICAgICAgICAgICAgIHZhbHVlOiB7aWQ6IHZhbHVlLnZhbHVlLCBuYW1lOiB2YWx1ZS5sYWJlbH0sXG4gICAgICAgICAgICAgICAgdHlwZTogJ29yZ2FuaXphdGlvbmlucHV0J1xuICAgICAgICAgICAgfX07XG5cbiAgICAgICAgdGhpcy5wcm9wcy5vbkNoYW5nZShldik7XG4gICAgfVxuXG4gICAgaGFuZGxlTmV3KHZhbHVlKSB7XG4gICAgICAgIC8vIHdlIG5lZWQgdG8gbWFwIGludG8gdmFsdWUvbGFiZWwgYmVjYXVzZSBvZiBhIGJ1ZyBpbiByZWFjdC1zZWxlY3QgMlxuICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vSmVkV2F0c29uL3JlYWN0LXNlbGVjdC9pc3N1ZXMvMjk5OFxuXG4gICAgICAgIGNvbnN0IHRyYW5zbGF0ZVZhbHVlID0gKG5ld1ZhbHVlKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmhhbmRsZUNoYW5nZSh7dmFsdWU6IG5ld1ZhbHVlLmlkLCBsYWJlbDogbmV3VmFsdWUubmFtZX0pO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5wcm9wcy5vbkNyZWF0ZSh2YWx1ZSwgdHJhbnNsYXRlVmFsdWUpO1xuICAgIH1cblxuICAgIGdldE9yZ2FuaXphdGlvbnMgKGlucHV0LCBjYWxsYmFjaykge1xuICAgICAgICBpZiAoIWlucHV0KSB7XG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHsgb3B0aW9uczogW10gfSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyB3ZSBuZWVkIHRvIG1hcCBpbnRvIHZhbHVlL2xhYmVsIGJlY2F1c2Ugb2YgYSBidWcgaW4gcmVhY3Qtc2VsZWN0IDJcbiAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL0plZFdhdHNvbi9yZWFjdC1zZWxlY3QvaXNzdWVzLzI5OThcblxuICAgICAgICBjb25zdCB0cmFuc2xhdGVPcHRpb25zID0gKG9wdGlvbnMpID0+IHtcbiAgICAgICAgICAgIGxldCBuZXdPcHRpb25zID0gb3B0aW9ucy5tYXAob3JnID0+ICh7dmFsdWU6IG9yZy5pZC50b1N0cmluZygpLCBsYWJlbDogb3JnLm5hbWV9KSk7XG4gICAgICAgICAgICBjYWxsYmFjayhuZXdPcHRpb25zKTtcbiAgICAgICAgfTtcblxuICAgICAgICBxdWVyeU9yZ2FuaXphdGlvbnMoaW5wdXQsIHRyYW5zbGF0ZU9wdGlvbnMpO1xuICAgIH1cblxuICAgIHJlbmRlcigpIHtcbiAgICAgICAgbGV0IHtlcnJvciwgdmFsdWUsIGlkLCBvbkNoYW5nZSwgLi4ucmVzdH0gPSB0aGlzLnByb3BzO1xuICAgICAgICBsZXQgaGFzX2Vycm9yID0gKCB0aGlzLnByb3BzLmhhc093blByb3BlcnR5KCdlcnJvcicpICYmIGVycm9yICE9ICcnICk7XG4gICAgICAgIGxldCBhbGxvd0NyZWF0ZSA9IHRoaXMucHJvcHMuaGFzT3duUHJvcGVydHkoJ2FsbG93Q3JlYXRlJyk7XG5cbiAgICAgICAgLy8gd2UgbmVlZCB0byBtYXAgaW50byB2YWx1ZS9sYWJlbCBiZWNhdXNlIG9mIGEgYnVnIGluIHJlYWN0LXNlbGVjdCAyXG4gICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9KZWRXYXRzb24vcmVhY3Qtc2VsZWN0L2lzc3Vlcy8yOTk4XG4gICAgICAgIGxldCB0aGVWYWx1ZSA9IHZhbHVlID8ge3ZhbHVlOiB2YWx1ZS5pZC50b1N0cmluZygpLCBsYWJlbDogdmFsdWUubmFtZX0gOiBudWxsO1xuXG4gICAgICAgIGNvbnN0IEFzeW5jQ29tcG9uZW50ID0gYWxsb3dDcmVhdGVcbiAgICAgICAgICAgID8gQXN5bmNDcmVhdGFibGVTZWxlY3RcbiAgICAgICAgICAgIDogQXN5bmNTZWxlY3Q7XG5cbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgPEFzeW5jQ29tcG9uZW50XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlPXt0aGVWYWx1ZX1cbiAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9e3RoaXMuaGFuZGxlQ2hhbmdlfVxuICAgICAgICAgICAgICAgICAgICBsb2FkT3B0aW9ucz17dGhpcy5nZXRPcmdhbml6YXRpb25zfVxuICAgICAgICAgICAgICAgICAgICBvbkNyZWF0ZU9wdGlvbj17dGhpcy5oYW5kbGVOZXd9XG4gICAgICAgICAgICAgICAgICAgIHsuLi5yZXN0fVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAge2hhc19lcnJvciAmJlxuICAgICAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cImVycm9yLWxhYmVsXCI+e2Vycm9yfTwvcD5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKTtcblxuICAgIH1cbn1cblxuXG5cbiIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTggT3BlblN0YWNrIEZvdW5kYXRpb25cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqKi9cblxuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBSYXdIVE1MIGZyb20gJy4uL3Jhdy1odG1sJztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcydcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUmFkaW9MaXN0IGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcblxuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgICAgIHN1cGVyKHByb3BzKTtcblxuICAgICAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgICAgICAgdmFsdWU6IHByb3BzLnZhbHVlLFxuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMuaGFuZGxlQ2hhbmdlID0gdGhpcy5oYW5kbGVDaGFuZ2UuYmluZCh0aGlzKTtcbiAgICB9XG5cbiAgICBoYW5kbGVDaGFuZ2Uoc2VsZWN0aW9uKSB7XG5cbiAgICAgICAgbGV0IGV2ID0ge3RhcmdldDoge1xuICAgICAgICAgICAgaWQ6IHRoaXMucHJvcHMuaWQsXG4gICAgICAgICAgICB2YWx1ZTogc2VsZWN0aW9uLnRhcmdldC52YWx1ZSxcbiAgICAgICAgICAgIHR5cGU6ICdyYWRpbydcbiAgICAgICAgfX07XG5cbiAgICAgICAgdGhpcy5wcm9wcy5vbkNoYW5nZShldik7XG4gICAgfVxuXG4gICAgZ2V0TGFiZWwob3B0aW9uLCBpZCwgaW5saW5lLCBzaW1wbGUsIGh0bWwpIHtcbiAgICAgICAgaWYgKGlubGluZSkge1xuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3NOYW1lPVwiZm9ybS1jaGVjay1sYWJlbFwiIGh0bWxGb3I9e2ByYWRpb18ke2lkfV8ke29wdGlvbi52YWx1ZX1gfSBzdHlsZT17e2Rpc3BsYXk6ICdpbmxpbmUtYmxvY2snfX0+XG4gICAgICAgICAgICAgICAgICAgIHtodG1sICYmXG4gICAgICAgICAgICAgICAgICAgICAgICA8UmF3SFRNTD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7b3B0aW9uLmxhYmVsfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9SYXdIVE1MPlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHshaHRtbCAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uLmxhYmVsXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIGlmIChzaW1wbGUpIHtcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzTmFtZT1cImZvcm0tY2hlY2stbGFiZWxcIiBodG1sRm9yPXtgcmFkaW9fJHtpZH1fJHtvcHRpb24udmFsdWV9YH0gPlxuICAgICAgICAgICAgICAgICAgICB7b3B0aW9uLmxhYmVsfVxuICAgICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3NOYW1lPVwiZm9ybS1jaGVjay1sYWJlbFwiIGh0bWxGb3I9e2ByYWRpb18ke2lkfV8ke29wdGlvbi52YWx1ZX1gfSBzdHlsZT17e2Rpc3BsYXk6ICdpbmxpbmUtYmxvY2snfX0+XG4gICAgICAgICAgICAgICAgICAgIDxoNCBzdHlsZT17e21hcmdpblRvcDogJzBweCd9fT57b3B0aW9uLmxhYmVsfTwvaDQ+XG4gICAgICAgICAgICAgICAgICAgIDxSYXdIVE1MPntvcHRpb24uZGVzY3JpcHRpb259PC9SYXdIVE1MPlxuICAgICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmVuZGVyKCkge1xuXG4gICAgICAgIGxldCB7b25DaGFuZ2UsIHZhbHVlLCBjbGFzc05hbWUsIGVycm9yLCBkaXNhYmxlZCwgb3B0aW9ucyxpZCwgbmFtZSwuLi5yZXN0fSA9IHRoaXMucHJvcHM7XG4gICAgICAgIGxldCBoYXNfZXJyb3IgPSAoIHRoaXMucHJvcHMuaGFzT3duUHJvcGVydHkoJ2Vycm9yJykgJiYgZXJyb3IgIT0gJycgKTtcbiAgICAgICAgbGV0IGlubGluZSA9ICggdGhpcy5wcm9wcy5oYXNPd25Qcm9wZXJ0eSgnaW5saW5lJykgKTtcbiAgICAgICAgbGV0IHNpbXBsZSA9ICggdGhpcy5wcm9wcy5oYXNPd25Qcm9wZXJ0eSgnc2ltcGxlJykgKTtcbiAgICAgICAgbGV0IGh0bWwgPSAoIHRoaXMucHJvcHMuaGFzT3duUHJvcGVydHkoJ2h0bWwnKSApO1xuICAgICAgICBsZXQgaXNEaXNhYmxlZCA9ICh0aGlzLnByb3BzLmhhc093blByb3BlcnR5KCdkaXNhYmxlZCcpICYmIGRpc2FibGVkID09IHRydWUpO1xuXG4gICAgICAgIGxldCBzdHlsZSwgbGFiZWw7XG5cbiAgICAgICAgaWYgKGlubGluZSkge1xuICAgICAgICAgICAgc3R5bGUgPSB7XG4gICAgICAgICAgICAgICAgcGFkZGluZ0xlZnQ6ICcyMnB4JyxcbiAgICAgICAgICAgICAgICBtYXJnaW5MZWZ0OiAnMjBweCcsXG4gICAgICAgICAgICAgICAgZmxvYXQ6ICdsZWZ0J1xuICAgICAgICAgICAgfTtcblxuXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzdHlsZSA9IHtcbiAgICAgICAgICAgICAgICBwYWRkaW5nTGVmdDogJzIycHgnXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPGRpdiBpZD17YHJsX3dyYXBwZXJfJHtpZH1gfT5cbiAgICAgICAgICAgICAgICB7IG9wdGlvbnMubWFwKG9wID0+IHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGNoZWNrZWQgPSAob3AudmFsdWUgPT0gdmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmb3JtLWNoZWNrIGFiYy1yYWRpb1wiIGtleT17YHJhZGlvX2tleV8ke2lkfV8ke29wLnZhbHVlfWB9IHN0eWxlPXtzdHlsZX0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImZvcm0tY2hlY2staW5wdXRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwicmFkaW9cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZD17YHJhZGlvXyR7aWR9XyR7b3AudmFsdWV9YH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e29wLnZhbHVlfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVja2VkPXtjaGVja2VkfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17dGhpcy5oYW5kbGVDaGFuZ2V9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXtpc0Rpc2FibGVkfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lPXtuYW1lID8gbmFtZSA6IGByYWRpb18ke2lkfWB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7dGhpcy5nZXRMYWJlbChvcCwgaWQsIGlubGluZSwgc2ltcGxlLCBodG1sKX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgfSl9XG5cbiAgICAgICAgICAgICAgICB7aGFzX2Vycm9yICYmXG4gICAgICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwiZXJyb3ItbGFiZWxcIj57ZXJyb3J9PC9wPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICApO1xuXG4gICAgfVxufVxuXG5SYWRpb0xpc3QucHJvcFR5cGVzID0ge1xuICAgIGlkOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWRcbn07IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxNyBPcGVuU3RhY2sgRm91bmRhdGlvblxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICoqL1xuXG5pbXBvcnQgUmVhY3QsIHsgdXNlU3RhdGUsIHVzZUVmZmVjdCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcydcbmltcG9ydCBBc3luY1NlbGVjdCBmcm9tICdyZWFjdC1zZWxlY3QvbGliL0FzeW5jJztcbmltcG9ydCB7IHF1ZXJ5UmVnaXN0cmF0aW9uQ29tcGFuaWVzIH0gZnJvbSAnLi4vLi4vdXRpbHMvcXVlcnktYWN0aW9ucyc7XG5cbmNvbnN0IFJlZ2lzdHJhdGlvbkNvbXBhbnlJbnB1dCA9ICh7IGVycm9yLCB2YWx1ZSwgb25DaGFuZ2UsIGlkLCBtdWx0aSwgaXNNdWx0aSwgY2xhc3NOYW1lLCBzdW1taXRJZCwgb25FcnJvciwgLi4ucmVzdCB9KSA9PiB7XG5cbiAgICBjb25zdCBbdGhlVmFsdWUsIHNldFRoZVZhbHVlXSA9IHVzZVN0YXRlKHsgdmFsdWU6IG51bGwsIGxhYmVsOiAnJyB9KTtcbiAgICBjb25zdCBbZnJlZUlucHV0LCBzZXRGcmVlSW5wdXRdID0gdXNlU3RhdGUoZmFsc2UpO1xuICAgIGNvbnN0IFtpbnB1dFZhbHVlLCBzZXRJbnB1dFZhbHVlXSA9IHVzZVN0YXRlKCcnKTtcbiAgICBjb25zdCBbaXNNdWx0aU9wdGlvbmFsLCBzZXRJc011bHRpT3B0aW9uYWxdID0gdXNlU3RhdGUobXVsdGkgfHwgaXNNdWx0aSk7XG4gICAgY29uc3QgW2hhc0Vycm9yLCBzZXRIYXNFcnJvcl0gPSB1c2VTdGF0ZShlcnJvcik7XG5cbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIH0sIFtdKTtcblxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIGlmICghdmFsdWUuaWQgJiYgdmFsdWUubmFtZSkgeyAgICAgICAgICAgIFxuICAgICAgICAgICAgc2V0RnJlZUlucHV0KHRydWUpO1xuICAgICAgICAgICAgc2V0SW5wdXRWYWx1ZSh2YWx1ZS5uYW1lKTtcbiAgICAgICAgICAgIHNldFRoZVZhbHVlKHsgdmFsdWU6IG51bGwsIGxhYmVsOiB2YWx1ZS5uYW1lIH0pXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoaXNNdWx0aSAmJiB2YWx1ZS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgc2V0VGhlVmFsdWUodmFsdWUubWFwKHYgPT4gKHsgdmFsdWU6IHYuaWQsIGxhYmVsOiB2Lm5hbWUgfSkpKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoIWlzTXVsdGkgJiYgdmFsdWUuaWQpIHtcbiAgICAgICAgICAgICAgICBzZXRUaGVWYWx1ZSh7IHZhbHVlOiB2YWx1ZS5pZCwgbGFiZWw6IHZhbHVlLm5hbWUgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9LCBbdmFsdWVdKVxuXG4gICAgY29uc3QgaGFuZGxlQ2hhbmdlID0gKGV2ZW50VmFsdWUpID0+IHtcbiAgICAgICAgaWYgKGV2ZW50VmFsdWUudmFsdWUgPT09IG51bGwpIHtcbiAgICAgICAgICAgIHNldEZyZWVJbnB1dCh0cnVlKTtcbiAgICAgICAgICAgIGNvbnN0IG5ld1ZhbHVlU3RhdGUgPSBpc011bHRpT3B0aW9uYWwgPyBldmVudFZhbHVlLm1hcCh2ID0+ICh7IHZhbHVlOiB2LnZhbHVlLCBsYWJlbDogJycgfSkpIDogeyB2YWx1ZTogZXZlbnRWYWx1ZS52YWx1ZSwgbGFiZWw6ICcnIH07XG4gICAgICAgICAgICBzZXRUaGVWYWx1ZShuZXdWYWx1ZVN0YXRlKTtcbiAgICAgICAgICAgIGxldCBldiA9IHtcbiAgICAgICAgICAgICAgICB0YXJnZXQ6IHtcbiAgICAgICAgICAgICAgICAgICAgaWQ6IGlkLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogbmV3VmFsdWVTdGF0ZSxcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogJ2NvbXBhbnlpbnB1dCdcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgb25DaGFuZ2UoZXYpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgbmV3VmFsdWUgPSBpc011bHRpT3B0aW9uYWwgPyBldmVudFZhbHVlLm1hcCh2ID0+ICh7IGlkOiB2LnZhbHVlLCBuYW1lOiB2LmxhYmVsIH0pKSA6IHsgaWQ6IGV2ZW50VmFsdWUudmFsdWUsIG5hbWU6IGV2ZW50VmFsdWUubGFiZWwgfTtcbiAgICAgICAgY29uc3QgbmV3VmFsdWVTdGF0ZSA9IGlzTXVsdGlPcHRpb25hbCA/IGV2ZW50VmFsdWUubWFwKHYgPT4gKHsgdmFsdWU6IHYudmFsdWUsIGxhYmVsOiB2LmxhYmVsIH0pKSA6IHsgdmFsdWU6IGV2ZW50VmFsdWUudmFsdWUsIGxhYmVsOiBldmVudFZhbHVlLmxhYmVsIH07XG4gICAgICAgIHNldFRoZVZhbHVlKG5ld1ZhbHVlU3RhdGUpO1xuXG5cbiAgICAgICAgbGV0IGV2ID0ge1xuICAgICAgICAgICAgdGFyZ2V0OiB7XG4gICAgICAgICAgICAgICAgaWQ6IGlkLFxuICAgICAgICAgICAgICAgIHZhbHVlOiBuZXdWYWx1ZSxcbiAgICAgICAgICAgICAgICB0eXBlOiAnY29tcGFueWlucHV0J1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBvbkNoYW5nZShldik7XG4gICAgfVxuXG4gICAgY29uc3QgaGFuZGxlSW5wdXRDbGVhciA9ICgpID0+IHtcbiAgICAgICAgc2V0RnJlZUlucHV0KCFmcmVlSW5wdXQpO1xuICAgICAgICBzZXRJbnB1dFZhbHVlKCcnKTtcbiAgICAgICAgc2V0VGhlVmFsdWUoeyB2YWx1ZTogbnVsbCwgbGFiZWw6ICcnIH0pO1xuICAgICAgICBsZXQgZXYgPSB7XG4gICAgICAgICAgICB0YXJnZXQ6IHtcbiAgICAgICAgICAgICAgICBpZDogaWQsXG4gICAgICAgICAgICAgICAgdmFsdWU6IHsgaWQ6IG51bGwsIG5hbWU6ICcnIH0sXG4gICAgICAgICAgICAgICAgdHlwZTogJ2NvbXBhbnlpbnB1dCdcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgb25DaGFuZ2UoZXYpO1xuICAgIH1cblxuICAgIGNvbnN0IGhhbmRsZUlucHV0Q2hhbmdlID0gKGV2dCkgPT4ge1xuICAgICAgICBzZXRJbnB1dFZhbHVlKGV2dC50YXJnZXQudmFsdWUpO1xuICAgICAgICBsZXQgZXYgPSB7XG4gICAgICAgICAgICB0YXJnZXQ6IHtcbiAgICAgICAgICAgICAgICBpZDogaWQsXG4gICAgICAgICAgICAgICAgdmFsdWU6IHsgaWQ6IG51bGwsIG5hbWU6IGV2dC50YXJnZXQudmFsdWUgfSxcbiAgICAgICAgICAgICAgICB0eXBlOiAnY29tcGFueWlucHV0J1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBvbkNoYW5nZShldik7XG4gICAgfVxuXG4gICAgY29uc3QgZ2V0Q29tcGFuaWVzID0gKGlucHV0LCBjYWxsYmFjaykgPT4ge1xuXG4gICAgICAgIGNvbnN0IHRyYW5zbGF0ZU9wdGlvbnMgPSAob3B0aW9ucykgPT4ge1xuXG4gICAgICAgICAgICBpZiAob3B0aW9ucyBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAgICAgICAgICAgb25FcnJvcihvcHRpb25zKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChvcHRpb25zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKFtdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIHdlIG5lZWQgdG8gbWFwIGludG8gdmFsdWUvbGFiZWwgYmVjYXVzZSBvZiBhIGJ1ZyBpbiByZWFjdC1zZWxlY3QgMlxuICAgICAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL0plZFdhdHNvbi9yZWFjdC1zZWxlY3QvaXNzdWVzLzI5OThcbiAgICAgICAgICAgIGNvbnN0IG90aGVyT3B0aW9uID0geyB2YWx1ZTogbnVsbCwgbGFiZWw6ICdPdGhlcicgfTtcbiAgICAgICAgICAgIGxldCBuZXdPcHRpb25zID0gWy4uLm9wdGlvbnMubWFwKGMgPT4gKHsgdmFsdWU6IGMuaWQudG9TdHJpbmcoKSwgbGFiZWw6IGMubmFtZSB9KSksIG90aGVyT3B0aW9uXTtcbiAgICAgICAgICAgIGNhbGxiYWNrKG5ld09wdGlvbnMpO1xuICAgICAgICB9O1xuXG4gICAgICAgIHF1ZXJ5UmVnaXN0cmF0aW9uQ29tcGFuaWVzKHN1bW1pdElkLCBpbnB1dCwgdHJhbnNsYXRlT3B0aW9ucyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIChcbiAgICAgICAgPGRpdj5cbiAgICAgICAgICAgIHtmcmVlSW5wdXQgP1xuICAgICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e2lucHV0VmFsdWV9XG4gICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIkVudGVyIHlvdXIgY29tcGFueVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17aGFuZGxlSW5wdXRDaGFuZ2V9XG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJmb3JtLWNvbnRyb2xcIlxuICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9e3sgcGFkZGluZ1JpZ2h0OiAyNSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgey4uLnJlc3R9XG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgIDxpIGFyaWEtbGFiZWw9J0NsZWFyJyBzdHlsZT17eyBwb3NpdGlvbjogJ2Fic29sdXRlJywgYm90dG9tOiAxMCwgcmlnaHQ6IDI1LCBjdXJzb3I6ICdwb2ludGVyJywgb3BhY2l0eTogJzY1JScgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9e2hhbmRsZUlucHV0Q2xlYXJ9IGNsYXNzTmFtZT0nZmEgZmEtY2xvc2UnPjwvaT5cbiAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICAgICAgOlxuICAgICAgICAgICAgICAgIDxBc3luY1NlbGVjdFxuICAgICAgICAgICAgICAgICAgICAvLyBQYXNzaW5nIG51bGwgaWYgbm8gbGFiZWwgYW5kIHZhbHVlIHRvIHNob3cgdGhlIHBsYWNlaG9sZGVyXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlPXt0aGVWYWx1ZS5sYWJlbCAmJiB0aGVWYWx1ZS52YWx1ZSA/IHRoZVZhbHVlIDogbnVsbH1cbiAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9J1NlbGVjdCBhIGNvbXBhbnknXG4gICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXtoYW5kbGVDaGFuZ2V9XG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHRPcHRpb25zPXt0cnVlfVxuICAgICAgICAgICAgICAgICAgICBsb2FkT3B0aW9ucz17Z2V0Q29tcGFuaWVzfVxuICAgICAgICAgICAgICAgICAgICBpc011bHRpPXtpc011bHRpT3B0aW9uYWx9XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17Y2xhc3NOYW1lfVxuICAgICAgICAgICAgICAgICAgICB7Li4ucmVzdH1cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgfVxuICAgICAgICAgICAge2hhc0Vycm9yICYmXG4gICAgICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwiZXJyb3ItbGFiZWxcIj57ZXJyb3J9PC9wPlxuICAgICAgICAgICAgfVxuICAgICAgICA8L2Rpdj5cbiAgICApO1xuXG59XG5cbmV4cG9ydCBkZWZhdWx0IFJlZ2lzdHJhdGlvbkNvbXBhbnlJbnB1dDtcblxuUmVnaXN0cmF0aW9uQ29tcGFueUlucHV0LnByb3BUeXBlcyA9IHtcbiAgICBvbkVycm9yOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkXG59OyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTcgT3BlblN0YWNrIEZvdW5kYXRpb25cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqKi9cblxuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBBc3luY1NlbGVjdCBmcm9tICdyZWFjdC1zZWxlY3QvbGliL0FzeW5jJztcbmltcG9ydCB7IGNvbXBvbmVudHMgfSBmcm9tICdyZWFjdC1zZWxlY3QvbGliL2NvbXBvbmVudHMnXG5pbXBvcnQgeyBxdWVyeVNwZWFrZXJzIH0gZnJvbSAnLi4vLi4vdXRpbHMvcXVlcnktYWN0aW9ucyc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNwZWFrZXJJbnB1dCBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgICAgICBzdXBlcihwcm9wcyk7XG5cbiAgICAgICAgdGhpcy5oYW5kbGVDaGFuZ2UgPSB0aGlzLmhhbmRsZUNoYW5nZS5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLmdldFNwZWFrZXJzID0gdGhpcy5nZXRTcGVha2Vycy5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLmhhbmRsZUNsaWNrID0gdGhpcy5oYW5kbGVDbGljay5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLmdldE9wdGlvblZhbHVlID0gdGhpcy5nZXRPcHRpb25WYWx1ZS5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLmdldE9wdGlvbkxhYmVsID0gdGhpcy5nZXRPcHRpb25MYWJlbC5iaW5kKHRoaXMpO1xuICAgIH1cblxuICAgIGhhbmRsZUNoYW5nZSh2YWx1ZSkge1xuICAgICAgICBsZXQgZXYgPSB7dGFyZ2V0OiB7XG4gICAgICAgICAgICAgICAgaWQ6IHRoaXMucHJvcHMuaWQsXG4gICAgICAgICAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdzcGVha2VyaW5wdXQnXG4gICAgICAgICAgICB9fTtcblxuICAgICAgICB0aGlzLnByb3BzLm9uQ2hhbmdlKGV2KTtcbiAgICB9XG5cbiAgICBoYW5kbGVDbGljayhzcGVha2VySWQpIHtcbiAgICAgICAgbGV0IHtoaXN0b3J5fSA9IHRoaXMucHJvcHM7XG5cbiAgICAgICAgaGlzdG9yeS5wdXNoKGAvYXBwL3NwZWFrZXJzLyR7c3BlYWtlcklkfWApO1xuICAgIH1cblxuICAgIGdldFNwZWFrZXJzIChpbnB1dCwgY2FsbGJhY2spIHtcbiAgICAgICAgaWYgKCFpbnB1dCkge1xuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh7IG9wdGlvbnM6IFtdIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHN1bW1pdElkID0gKHRoaXMucHJvcHMuaGFzT3duUHJvcGVydHkoJ3N1bW1pdElkJykpID8gdGhpcy5wcm9wcy5zdW1taXRJZCA6IG51bGw7XG5cbiAgICAgICAgcXVlcnlTcGVha2VycyhzdW1taXRJZCwgaW5wdXQsIGNhbGxiYWNrKTtcbiAgICB9XG5cbiAgICBnZXRPcHRpb25WYWx1ZShzcGVha2VyKXtcbiAgICAgICAgaWYodGhpcy5wcm9wcy5oYXNPd25Qcm9wZXJ0eShcImdldE9wdGlvblZhbHVlXCIpKXtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnByb3BzLmdldE9wdGlvblZhbHVlKHNwZWFrZXIpO1xuICAgICAgICB9XG4gICAgICAgIC8vZGVmYXVsdFxuICAgICAgICByZXR1cm4gc3BlYWtlci5pZDtcbiAgICB9XG5cbiAgICBnZXRPcHRpb25MYWJlbChzcGVha2VyKXtcbiAgICAgICAgaWYodGhpcy5wcm9wcy5oYXNPd25Qcm9wZXJ0eShcImdldE9wdGlvbkxhYmVsXCIpKXtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnByb3BzLmdldE9wdGlvbkxhYmVsKHNwZWFrZXIpO1xuICAgICAgICB9XG4gICAgICAgIC8vZGVmYXVsdFxuICAgICAgICByZXR1cm4gYCR7c3BlYWtlci5maXJzdF9uYW1lfSAke3NwZWFrZXIubGFzdF9uYW1lfSAoJHtzcGVha2VyLmlkfSlgO1xuICAgIH1cblxuICAgIHJlbmRlcigpIHtcbiAgICAgICAgbGV0IHt2YWx1ZSwgb25DaGFuZ2UsIGhpc3RvcnksIHN1bW1pdElkLCBlcnJvciwgaWQsIG11bHRpLCAuLi5yZXN0fSA9IHRoaXMucHJvcHM7XG4gICAgICAgIGxldCBoYXNfZXJyb3IgPSAoIHRoaXMucHJvcHMuaGFzT3duUHJvcGVydHkoJ2Vycm9yJykgJiYgZXJyb3IgIT0gJycgKTtcbiAgICAgICAgbGV0IGlzTXVsdGkgPSAodGhpcy5wcm9wcy5oYXNPd25Qcm9wZXJ0eSgnbXVsdGknKSk7XG5cbiAgICAgICAgY29uc3QgTXVsdGlWYWx1ZUxhYmVsID0gKHByb3BzKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgIDxhIG9uQ2xpY2s9eygpID0+IHRoaXMuaGFuZGxlQ2xpY2socHJvcHMuZGF0YS5pZCl9IHN0eWxlPXt7Y3Vyc29yOiAncG9pbnRlcid9fT5cbiAgICAgICAgICAgICAgICAgICAgPGNvbXBvbmVudHMuTXVsdGlWYWx1ZUxhYmVsIHsuLi5wcm9wc30gLz5cbiAgICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICApO1xuICAgICAgICB9O1xuXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgIDxBc3luY1NlbGVjdFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZT17dmFsdWV9XG4gICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXt0aGlzLmhhbmRsZUNoYW5nZX1cbiAgICAgICAgICAgICAgICAgICAgbG9hZE9wdGlvbnM9e3RoaXMuZ2V0U3BlYWtlcnN9XG4gICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudHM9e3sgTXVsdGlWYWx1ZUxhYmVsIH19XG4gICAgICAgICAgICAgICAgICAgIGdldE9wdGlvblZhbHVlPXtzID0+IHRoaXMuZ2V0T3B0aW9uVmFsdWUocyl9XG4gICAgICAgICAgICAgICAgICAgIGdldE9wdGlvbkxhYmVsPXtzID0+IHRoaXMuZ2V0T3B0aW9uTGFiZWwocyl9XG4gICAgICAgICAgICAgICAgICAgIGlzTXVsdGk9e2lzTXVsdGl9XG4gICAgICAgICAgICAgICAgICAgIHsuLi5yZXN0fVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAge2hhc19lcnJvciAmJlxuICAgICAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cImVycm9yLWxhYmVsXCI+e2Vycm9yfTwvcD5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKTtcblxuICAgIH1cbn1cblxuIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxNyBPcGVuU3RhY2sgRm91bmRhdGlvblxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICoqL1xuXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IEFzeW5jU2VsZWN0IGZyb20gJ3JlYWN0LXNlbGVjdC9saWIvQXN5bmMnO1xuaW1wb3J0IHtxdWVyeVNwb25zb3JzfSBmcm9tICcuLi8uLi91dGlscy9xdWVyeS1hY3Rpb25zJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU3BvbnNvcklucHV0IGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcblxuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgICAgIHN1cGVyKHByb3BzKTtcblxuICAgICAgICB0aGlzLmhhbmRsZUNoYW5nZSA9IHRoaXMuaGFuZGxlQ2hhbmdlLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuZ2V0U3BvbnNvcnMgPSB0aGlzLmdldFNwb25zb3JzLmJpbmQodGhpcyk7XG4gICAgfVxuXG4gICAgaGFuZGxlQ2hhbmdlKHZhbHVlKSB7XG4gICAgICAgIGxldCBldiA9IHt0YXJnZXQ6IHtcbiAgICAgICAgICAgIGlkOiB0aGlzLnByb3BzLmlkLFxuICAgICAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICAgICAgdHlwZTogJ3Nwb25zb3JpbnB1dCdcbiAgICAgICAgfX07XG5cbiAgICAgICAgdGhpcy5wcm9wcy5vbkNoYW5nZShldik7XG4gICAgfVxuXG4gICAgZ2V0U3BvbnNvcnMgKGlucHV0LCBjYWxsYmFjaykge1xuICAgICAgICBsZXQge3N1bW1pdElkfSA9IHRoaXMucHJvcHM7XG5cbiAgICAgICAgaWYgKCFpbnB1dCkge1xuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh7IG9wdGlvbnM6IFtdIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcXVlcnlTcG9uc29ycyhzdW1taXRJZCwgaW5wdXQsIGNhbGxiYWNrKTtcbiAgICB9XG5cbiAgICByZW5kZXIoKSB7XG4gICAgICAgIGxldCB7ZXJyb3IsIHZhbHVlLCBvbkNoYW5nZSwgaWQsIG11bHRpLCBzdW1taXRJZCwgLi4ucmVzdH0gPSB0aGlzLnByb3BzO1xuICAgICAgICBsZXQgaGFzX2Vycm9yID0gKCB0aGlzLnByb3BzLmhhc093blByb3BlcnR5KCdlcnJvcicpICYmIGVycm9yICE9ICcnICk7XG4gICAgICAgIGxldCBpc011bHRpID0gKHRoaXMucHJvcHMuaGFzT3duUHJvcGVydHkoJ211bHRpJykpO1xuXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgIDxBc3luY1NlbGVjdFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZT17dmFsdWV9XG4gICAgICAgICAgICAgICAgICAgIGdldE9wdGlvblZhbHVlPXtvcHRpb24gPT4gb3B0aW9uLmlkfVxuICAgICAgICAgICAgICAgICAgICBnZXRPcHRpb25MYWJlbD17b3B0aW9uID0+IGAke29wdGlvbi5jb21wYW55Lm5hbWV9ICgke29wdGlvbi5zcG9uc29yc2hpcC5sYWJlbH0pYH1cbiAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9e3RoaXMuaGFuZGxlQ2hhbmdlfVxuICAgICAgICAgICAgICAgICAgICBsb2FkT3B0aW9ucz17dGhpcy5nZXRTcG9uc29yc31cbiAgICAgICAgICAgICAgICAgICAgaXNNdWx0aT17aXNNdWx0aX1cbiAgICAgICAgICAgICAgICAgICAgey4uLnJlc3R9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICB7aGFzX2Vycm9yICYmXG4gICAgICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwiZXJyb3ItbGFiZWxcIj57ZXJyb3J9PC9wPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICApO1xuXG4gICAgfVxufVxuXG4iLCIvKipcbiAqIENvcHlyaWdodCAyMDE3IE9wZW5TdGFjayBGb3VuZGF0aW9uXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiovXG5cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgQXN5bmNTZWxlY3QgZnJvbSAncmVhY3Qtc2VsZWN0L2xpYi9Bc3luYyc7XG5pbXBvcnQge3F1ZXJ5U3VtbWl0c30gZnJvbSAnLi4vLi4vdXRpbHMvcXVlcnktYWN0aW9ucyc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFN1bW1pdElucHV0IGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcblxuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgICAgIHN1cGVyKHByb3BzKTtcblxuICAgICAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgICAgICAgdmFsdWU6IHByb3BzLnZhbHVlXG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5oYW5kbGVDaGFuZ2UgPSB0aGlzLmhhbmRsZUNoYW5nZS5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLmdldFN1bW1pdHMgPSB0aGlzLmdldFN1bW1pdHMuYmluZCh0aGlzKTtcbiAgICB9XG5cbiAgICBoYW5kbGVDaGFuZ2UodmFsdWUpIHtcbiAgICAgICAgbGV0IGV2ID0ge3RhcmdldDoge1xuICAgICAgICAgICAgaWQ6IHRoaXMucHJvcHMuaWQsXG4gICAgICAgICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICAgICAgICB0eXBlOiAnc3VtbWl0aW5wdXQnXG4gICAgICAgIH19O1xuXG4gICAgICAgIHRoaXMucHJvcHMub25DaGFuZ2UoZXYpO1xuICAgIH1cblxuICAgIGdldFN1bW1pdHMgKGlucHV0LCBjYWxsYmFjaykge1xuICAgICAgICBpZiAoIWlucHV0KSB7XG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHsgb3B0aW9uczogW10gfSk7XG4gICAgICAgIH1cblxuICAgICAgICBxdWVyeVN1bW1pdHMoaW5wdXQsIGNhbGxiYWNrKTtcbiAgICB9XG5cblxuICAgIHJlbmRlcigpIHtcbiAgICAgICAgbGV0IHt2YWx1ZSwgZXJyb3IsIG9uQ2hhbmdlLCBpZCwgbXVsdGksIC4uLnJlc3R9ID0gdGhpcy5wcm9wcztcbiAgICAgICAgbGV0IGlzTXVsdGkgPSAodGhpcy5wcm9wcy5oYXNPd25Qcm9wZXJ0eSgnbXVsdGknKSk7XG4gICAgICAgIGxldCBoYXNfZXJyb3IgPSAoIHRoaXMucHJvcHMuaGFzT3duUHJvcGVydHkoJ2Vycm9yJykgJiYgZXJyb3IgIT0gJycgKTtcblxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICA8QXN5bmNTZWxlY3RcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU9e3ZhbHVlfVxuICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17dGhpcy5oYW5kbGVDaGFuZ2V9XG4gICAgICAgICAgICAgICAgICAgIGxvYWRPcHRpb25zPXt0aGlzLmdldFN1bW1pdHN9XG4gICAgICAgICAgICAgICAgICAgIGdldE9wdGlvblZhbHVlPXtvcCA9PiBvcC5pZH1cbiAgICAgICAgICAgICAgICAgICAgZ2V0T3B0aW9uTGFiZWw9e29wID0+IChgJHtvcC5uYW1lfSAoJHtvcC5pZH0pYCl9XG4gICAgICAgICAgICAgICAgICAgIGlzTXVsdGk9e2lzTXVsdGl9XG4gICAgICAgICAgICAgICAgICAgIHsuLi5yZXN0fVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAge2hhc19lcnJvciAmJlxuICAgICAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cImVycm9yLWxhYmVsXCI+e2Vycm9yfTwvcD5cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICApO1xuXG4gICAgfVxufVxuXG4iLCIvKipcbiAqIENvcHlyaWdodCAyMDE3IE9wZW5TdGFjayBGb3VuZGF0aW9uXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiovXG5cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgQXN5bmNTZWxlY3QgZnJvbSAncmVhY3Qtc2VsZWN0L2xpYi9Bc3luYyc7XG5pbXBvcnQge3F1ZXJ5VGFnc30gZnJvbSAnLi4vLi4vdXRpbHMvcXVlcnktYWN0aW9ucyc7XG5pbXBvcnQge3NoYWxsb3dFcXVhbH0gZnJvbSBcIi4uLy4uL3V0aWxzL21ldGhvZHNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVGFnSW5wdXQgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICAgICAgc3VwZXIocHJvcHMpO1xuXG4gICAgICAgIHRoaXMuc3RhdGUgPSB7XG4gICAgICAgICAgICB2YWx1ZTogcHJvcHMudmFsdWUubWFwKCh0KSA9PiAoe3RhZzogdC50YWd9KSlcbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLmhhbmRsZUNoYW5nZSA9IHRoaXMuaGFuZGxlQ2hhbmdlLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuZ2V0VGFncyA9IHRoaXMuZ2V0VGFncy5iaW5kKHRoaXMpO1xuICAgIH1cblxuICAgIGNvbXBvbmVudERpZFVwZGF0ZShwcmV2UHJvcHMsIHByZXZTdGF0ZSwgc25hcHNob3QpIHtcbiAgICAgICAgaWYoIXNoYWxsb3dFcXVhbCh0aGlzLnByb3BzLnZhbHVlLCBwcmV2UHJvcHMudmFsdWUpKSB7XG4gICAgICAgICAgICBsZXQgbmV4dFZhbHVlID0gdGhpcy5wcm9wcy52YWx1ZS5tYXAoKHQpID0+ICh7dGFnOiB0LnRhZ30pKTtcblxuICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7dmFsdWU6IG5leHRWYWx1ZX0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaGFuZGxlQ2hhbmdlKHZhbHVlKSB7XG4gICAgICAgIGxldCBldiA9IHt0YXJnZXQ6IHtcbiAgICAgICAgICAgICAgICBpZDogdGhpcy5wcm9wcy5pZCxcbiAgICAgICAgICAgICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICAgICAgICAgICAgdHlwZTogJ3RhZ2lucHV0J1xuICAgICAgICAgICAgfX07XG5cbiAgICAgICAgdGhpcy5wcm9wcy5vbkNoYW5nZShldik7XG4gICAgfVxuXG4gICAgZ2V0VGFncyAoaW5wdXQsIGNhbGxiYWNrKSB7XG4gICAgICAgIGlmICghaW5wdXQpIHtcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoeyBvcHRpb25zOiBbXSB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBzdW1taXRJZCA9ICh0aGlzLnByb3BzLmhhc093blByb3BlcnR5KCdzdW1taXRJZCcpKSA/IHRoaXMucHJvcHMuc3VtbWl0SWQgOiBudWxsO1xuXG4gICAgICAgIHF1ZXJ5VGFncyhzdW1taXRJZCwgaW5wdXQsIGNhbGxiYWNrKTtcbiAgICB9XG5cbiAgICByZW5kZXIoKSB7XG4gICAgICAgIGxldCB7Y2xhc3NOYW1lLCBlcnJvciwgLi4ucmVzdH0gPSB0aGlzLnByb3BzO1xuICAgICAgICBsZXQgaGFzX2Vycm9yID0gKCB0aGlzLnByb3BzLmhhc093blByb3BlcnR5KCdlcnJvcicpICYmIGVycm9yICE9ICcnICk7XG5cbiAgICAgICAgbGV0IG9yZGVyZWRUYWdzID0gdGhpcy5zdGF0ZS52YWx1ZS5zb3J0KChhLCBiKSA9PiAoYS50YWcudG9Mb3dlckNhc2UoKSA+IGIudGFnLnRvTG93ZXJDYXNlKCkgPyAxIDogKGEudGFnLnRvTG93ZXJDYXNlKCkgPCBiLnRhZy50b0xvd2VyQ2FzZSgpID8gLTEgOiAwKSkpO1xuXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgIDxBc3luY1NlbGVjdFxuICAgICAgICAgICAgICAgICAgICB7Li4ucmVzdH1cbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtjbGFzc05hbWUgKyAnICcgKyAoaGFzX2Vycm9yID8gJ2Vycm9yJyA6ICcnKX1cbiAgICAgICAgICAgICAgICAgICAgaXNNdWx0aVxuICAgICAgICAgICAgICAgICAgICB2YWx1ZT17b3JkZXJlZFRhZ3N9XG4gICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXt0aGlzLmhhbmRsZUNoYW5nZX1cbiAgICAgICAgICAgICAgICAgICAgbG9hZE9wdGlvbnM9e3RoaXMuZ2V0VGFnc31cbiAgICAgICAgICAgICAgICAgICAgZ2V0T3B0aW9uTGFiZWw9e29wdGlvbiA9PiBvcHRpb24udGFnfVxuICAgICAgICAgICAgICAgICAgICBnZXRPcHRpb25WYWx1ZT17b3B0aW9uID0+IG9wdGlvbi50YWd9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICB7aGFzX2Vycm9yICYmXG4gICAgICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwiZXJyb3ItbGFiZWxcIj57ZXJyb3J9PC9wPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICApO1xuXG4gICAgfVxufVxuIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxNyBPcGVuU3RhY2sgRm91bmRhdGlvblxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICoqL1xuXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBJbnB1dCBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgICAgICBzdXBlcihwcm9wcyk7XG5cbiAgICAgICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgICAgICAgIHZhbHVlOiBwcm9wcy52YWx1ZSxcbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLmhhbmRsZUNoYW5nZSA9IHRoaXMuaGFuZGxlQ2hhbmdlLmJpbmQodGhpcyk7XG4gICAgfVxuXG4gICAgY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wcywgcHJldlN0YXRlLCBzbmFwc2hvdCkge1xuICAgICAgICBpZiAodGhpcy5wcm9wcy52YWx1ZSAhPT0gcHJldlByb3BzLnZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLnNldFN0YXRlKHt2YWx1ZTogdGhpcy5wcm9wcy52YWx1ZX0pXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBoYW5kbGVDaGFuZ2UoZXYpIHtcbiAgICAgICAgdGhpcy5wcm9wcy5vbkNoYW5nZShldik7XG4gICAgfVxuXG4gICAgcmVuZGVyKCkge1xuXG4gICAgICAgIGxldCB7b25DaGFuZ2UsIHZhbHVlLCBjbGFzc05hbWUsIGVycm9yLCAuLi5yZXN0fSA9IHRoaXMucHJvcHM7XG4gICAgICAgIGxldCBoYXNfZXJyb3IgPSAoIHRoaXMucHJvcHMuaGFzT3duUHJvcGVydHkoJ2Vycm9yJykgJiYgZXJyb3IgIT09ICcnICk7XG4gICAgICAgIGxldCBjbGFzc19uYW1lID0gdGhpcy5wcm9wcy5oYXNPd25Qcm9wZXJ0eSgnY2xhc3NOYW1lJykgPyBjbGFzc05hbWUgOiAnZm9ybS1jb250cm9sJztcblxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtjbGFzc19uYW1lICsgJyAnICsgKGhhc19lcnJvciA/ICdlcnJvcicgOiAnJyl9XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlPXt0aGlzLnN0YXRlLnZhbHVlfVxuICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17dGhpcy5oYW5kbGVDaGFuZ2V9XG4gICAgICAgICAgICAgICAgICAgIHsuLi5yZXN0fVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAge2hhc19lcnJvciAmJlxuICAgICAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cImVycm9yLWxhYmVsXCI+e2Vycm9yfTwvcD5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKTtcblxuICAgIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDE3IE9wZW5TdGFjayBGb3VuZGF0aW9uXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiovXG5cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRleHRBcmVhIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcblxuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgICAgIHN1cGVyKHByb3BzKTtcblxuICAgICAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgICAgICAgdmFsdWU6IHByb3BzLnZhbHVlLFxuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMuaGFuZGxlQ2hhbmdlID0gdGhpcy5oYW5kbGVDaGFuZ2UuYmluZCh0aGlzKTtcbiAgICB9XG5cbiAgICBjb21wb25lbnREaWRVcGRhdGUocHJldlByb3BzLCBwcmV2U3RhdGUsIHNuYXBzaG90KSB7XG4gICAgICAgIGlmICh0aGlzLnByb3BzLnZhbHVlICE9PSBwcmV2UHJvcHMudmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0U3RhdGUoe3ZhbHVlOiB0aGlzLnByb3BzLnZhbHVlfSlcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGhhbmRsZUNoYW5nZShldikge1xuICAgICAgICB0aGlzLnByb3BzLm9uQ2hhbmdlKGV2KTtcbiAgICB9XG5cbiAgICByZW5kZXIoKSB7XG5cbiAgICAgICAgbGV0IHtvbkNoYW5nZSwgdmFsdWUsIGNsYXNzTmFtZSwgZXJyb3IsIC4uLnJlc3R9ID0gdGhpcy5wcm9wcztcbiAgICAgICAgbGV0IGhhc19lcnJvciA9ICggdGhpcy5wcm9wcy5oYXNPd25Qcm9wZXJ0eSgnZXJyb3InKSAmJiBlcnJvciAhPSAnJyApO1xuICAgICAgICBsZXQgY2xhc3NfbmFtZSA9IHRoaXMucHJvcHMuaGFzT3duUHJvcGVydHkoJ2NsYXNzTmFtZScpID8gY2xhc3NOYW1lIDogJ2Zvcm0tY29udHJvbCc7XG5cbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgPHRleHRhcmVhXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17Y2xhc3NfbmFtZSArICcgJyArIChoYXNfZXJyb3IgPyAnZXJyb3InIDogJycpfVxuICAgICAgICAgICAgICAgICAgICB2YWx1ZT17dGhpcy5zdGF0ZS52YWx1ZX1cbiAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9e3RoaXMuaGFuZGxlQ2hhbmdlfVxuICAgICAgICAgICAgICAgICAgICB7Li4ucmVzdH1cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIHtoYXNfZXJyb3IgJiZcbiAgICAgICAgICAgICAgICA8cCBjbGFzc05hbWU9XCJlcnJvci1sYWJlbFwiPntlcnJvcn08L3A+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICk7XG5cbiAgICB9XG59XG4iLCIvKipcbiAqIENvcHlyaWdodCAyMDE3IE9wZW5TdGFjayBGb3VuZGF0aW9uXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiovXG5cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgQXN5bmNTZWxlY3QgZnJvbSAncmVhY3Qtc2VsZWN0L2xpYi9Bc3luYyc7XG5pbXBvcnQge3F1ZXJ5VGlja2V0VHlwZXN9IGZyb20gJy4uLy4uL3V0aWxzL3F1ZXJ5LWFjdGlvbnMnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUaWNrZXRUeXBlc0lucHV0IGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcblxuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgICAgIHN1cGVyKHByb3BzKTtcblxuICAgICAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgICAgICAgdmFsdWU6IHByb3BzLnZhbHVlXG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5oYW5kbGVDaGFuZ2UgPSB0aGlzLmhhbmRsZUNoYW5nZS5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLmdldFRpY2tldFR5cGVzID0gdGhpcy5nZXRUaWNrZXRUeXBlcy5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLmdldE9wdGlvblZhbHVlID0gdGhpcy5nZXRPcHRpb25WYWx1ZS5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLmdldE9wdGlvbkxhYmVsID0gdGhpcy5nZXRPcHRpb25MYWJlbC5iaW5kKHRoaXMpO1xuICAgIH1cblxuICAgIGdldE9wdGlvblZhbHVlKHRpY2tldFR5cGUpe1xuICAgICAgICBpZih0aGlzLnByb3BzLmhhc093blByb3BlcnR5KFwiZ2V0T3B0aW9uVmFsdWVcIikpe1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucHJvcHMuZ2V0T3B0aW9uVmFsdWUodGlja2V0VHlwZSk7XG4gICAgICAgIH1cbiAgICAgICAgLy9kZWZhdWx0XG4gICAgICAgIHJldHVybiB0aWNrZXRUeXBlLmlkO1xuICAgIH1cblxuICAgIGdldE9wdGlvbkxhYmVsKHRpY2tldFR5cGUpe1xuICAgICAgICBpZih0aGlzLnByb3BzLmhhc093blByb3BlcnR5KFwiZ2V0T3B0aW9uTGFiZWxcIikpe1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucHJvcHMuZ2V0T3B0aW9uTGFiZWwodGlja2V0VHlwZSk7XG4gICAgICAgIH1cbiAgICAgICAgLy9kZWZhdWx0XG4gICAgICAgIHJldHVybiBgJHt0aWNrZXRUeXBlLm5hbWV9YDtcbiAgICB9XG5cbiAgICBoYW5kbGVDaGFuZ2UodmFsdWUpIHtcbiAgICAgICAgbGV0IGV2ID0ge3RhcmdldDoge1xuICAgICAgICAgICAgICAgIGlkOiB0aGlzLnByb3BzLmlkLFxuICAgICAgICAgICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgICAgICAgICAgICB0eXBlOiAndGlja2V0dHlwZWlucHV0J1xuICAgICAgICAgICAgfX07XG5cbiAgICAgICAgdGhpcy5wcm9wcy5vbkNoYW5nZShldik7XG4gICAgfVxuXG4gICAgZ2V0VGlja2V0VHlwZXMgKGlucHV0LCBjYWxsYmFjaykge1xuICAgICAgICBsZXQge3N1bW1pdElkfSA9IHRoaXMucHJvcHM7XG5cbiAgICAgICAgaWYgKCFpbnB1dCkge1xuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh7IG9wdGlvbnM6IFtdIH0pO1xuICAgICAgICB9XG4gICAgICAgIHF1ZXJ5VGlja2V0VHlwZXMoc3VtbWl0SWQsaW5wdXQsIGNhbGxiYWNrKTtcbiAgICB9XG5cbiAgICByZW5kZXIoKSB7XG5cbiAgICAgICAgbGV0IHt2YWx1ZSwgZXJyb3IsIG9uQ2hhbmdlLCBpZCwgbXVsdGksIC4uLnJlc3R9ID0gdGhpcy5wcm9wcztcbiAgICAgICAgbGV0IGlzTXVsdGkgPSAodGhpcy5wcm9wcy5oYXNPd25Qcm9wZXJ0eSgnbXVsdGknKSk7XG4gICAgICAgIGxldCBoYXNfZXJyb3IgPSAoIHRoaXMucHJvcHMuaGFzT3duUHJvcGVydHkoJ2Vycm9yJykgJiYgZXJyb3IgIT0gJycgKTtcblxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICA8QXN5bmNTZWxlY3RcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU9e3ZhbHVlfVxuICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17dGhpcy5oYW5kbGVDaGFuZ2V9XG4gICAgICAgICAgICAgICAgICAgIGxvYWRPcHRpb25zPXt0aGlzLmdldFRpY2tldFR5cGVzfVxuICAgICAgICAgICAgICAgICAgICBnZXRPcHRpb25WYWx1ZT17bSA9PiB0aGlzLmdldE9wdGlvblZhbHVlKG0pfVxuICAgICAgICAgICAgICAgICAgICBnZXRPcHRpb25MYWJlbD17bSA9PiB0aGlzLmdldE9wdGlvbkxhYmVsKG0pfVxuICAgICAgICAgICAgICAgICAgICBpc011bHRpPXtpc011bHRpfVxuICAgICAgICAgICAgICAgICAgICB7Li4ucmVzdH1cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIHtoYXNfZXJyb3IgJiZcbiAgICAgICAgICAgICAgICA8cCBjbGFzc05hbWU9XCJlcnJvci1sYWJlbFwiPntlcnJvcn08L3A+XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKTtcblxuICAgIH1cbn1cblxuIiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IFJlYWN0RE9NIGZyb20gJ3JlYWN0LWRvbSdcbmltcG9ydCBleHRlbmQgZnJvbSAnZXh0ZW5kJ1xuaW1wb3J0ICdkcm9wem9uZS9kaXN0L2Ryb3B6b25lLmNzcyc7XG5pbXBvcnQgeyBJY29uIH0gZnJvbSAnLi9pY29uJ1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcblxubGV0IERyb3B6b25lID0gbnVsbDtcbi8qKlxuICogY2xhc3MgRHJvcHpvbmVKU1xuICovXG5leHBvcnQgY2xhc3MgRHJvcHpvbmVKUyBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgICAgICBzdXBlcihwcm9wcyk7XG4gICAgICAgIHRoaXMuc3RhdGUgPSB7ZmlsZXM6IFtdfTtcbiAgICAgICAgdGhpcy5vblVwbG9hZENvbXBsZXRlID0gdGhpcy5vblVwbG9hZENvbXBsZXRlLmJpbmQodGhpcyk7XG4gICAgfVxuXG4gICAgb25VcGxvYWRDb21wbGV0ZShyZXNwb25zZSl7XG4gICAgICAgIGlmKHRoaXMucHJvcHMub25VcGxvYWRDb21wbGV0ZSlcbiAgICAgICAgICAgIHRoaXMucHJvcHMub25VcGxvYWRDb21wbGV0ZShyZXNwb25zZSwgdGhpcy5wcm9wcy5pZCwgdGhpcy5wcm9wcy5kYXRhKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDb25maWd1cmF0aW9uIG9mIERyb3B6b25lLmpzLiBEZWZhdWx0cyBhcmVcbiAgICAgKiBvdmVycmlkZW4gYnkgdGhlICdkanNDb25maWcnIHByb3BlcnR5XG4gICAgICogRm9yIGEgZnVsbCBsaXN0IG9mIHBvc3NpYmxlIGNvbmZpZ3VyYXRpb25zLFxuICAgICAqIHBsZWFzZSBjb25zdWx0XG4gICAgICogaHR0cDovL3d3dy5kcm9wem9uZWpzLmNvbS8jY29uZmlndXJhdGlvblxuICAgICAqL1xuICAgIGdldERqc0NvbmZpZyAoKSB7XG4gICAgICAgIGxldCBvcHRpb25zID0gbnVsbDtcbiAgICAgICAgY29uc3QgZGVmYXVsdHMgPSB7XG4gICAgICAgICAgICB1cmw6IHRoaXMucHJvcHMuY29uZmlnLnBvc3RVcmwgPyB0aGlzLnByb3BzLmNvbmZpZy5wb3N0VXJsIDogbnVsbFxuICAgICAgICB9O1xuXG4gICAgICAgIGlmICh0aGlzLnByb3BzLmRqc0NvbmZpZykge1xuICAgICAgICAgICAgb3B0aW9ucyA9IGV4dGVuZCh0cnVlLCB7fSwgZGVmYXVsdHMsIHRoaXMucHJvcHMuZGpzQ29uZmlnKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgb3B0aW9ucyA9IGRlZmF1bHRzXG4gICAgICAgIH1cblxuICAgICAgICBvcHRpb25zLmFjY2VwdCA9IChmaWxlLCBkb25lKSA9PiB7XG4gICAgICAgICAgICBpZiAob3B0aW9ucy5tYXhGaWxlcyA8ICh0aGlzLnN0YXRlLmZpbGVzLmxlbmd0aCArIHRoaXMucHJvcHMudXBsb2FkQ291bnQpKSB7XG4gICAgICAgICAgICAgICAgZG9uZSgnTWF4IGZpbGVzIHJlYWNoZWQnKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZG9uZSgpO1xuICAgICAgICB9O1xuXG4gICAgICAgIHJldHVybiBvcHRpb25zXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVhY3QgJ2NvbXBvbmVudERpZE1vdW50JyBtZXRob2RcbiAgICAgKiBTZXRzIHVwIGRyb3B6b25lLmpzIHdpdGggdGhlIGNvbXBvbmVudC5cbiAgICAgKi9cbiAgICBjb21wb25lbnREaWRNb3VudCAoKSB7XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSB0aGlzLmdldERqc0NvbmZpZygpO1xuXG4gICAgICAgIERyb3B6b25lID0gRHJvcHpvbmUgfHwgcmVxdWlyZSgnZHJvcHpvbmUnKTtcbiAgICAgICAgRHJvcHpvbmUuYXV0b0Rpc2NvdmVyID0gZmFsc2U7XG5cbiAgICAgICAgaWYgKCF0aGlzLnByb3BzLmNvbmZpZy5wb3N0VXJsICYmICF0aGlzLnByb3BzLmV2ZW50SGFuZGxlcnMuZHJvcCkge1xuICAgICAgICAgICAgY29uc29sZS5pbmZvKCdOZWl0aGVyIHBvc3RVcmwgbm9yIGEgXCJkcm9wXCIgZXZlbnRIYW5kbGVyIHNwZWNpZmllZCwgdGhlIFJlYWN0LURyb3B6b25lIGNvbXBvbmVudCBtaWdodCBtaXNiZWhhdmUuJylcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBkcm9wem9uZU5vZGUgPSB0aGlzLnByb3BzLmNvbmZpZy5kcm9wem9uZVNlbGVjdG9yIHx8IFJlYWN0RE9NLmZpbmRET01Ob2RlKHRoaXMpO1xuICAgICAgICB0aGlzLmRyb3B6b25lID0gbmV3IERyb3B6b25lKGRyb3B6b25lTm9kZSwgb3B0aW9ucyk7XG5cbiAgICAgICAgdGhpcy5zZXR1cEV2ZW50cygpXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVhY3QgJ2NvbXBvbmVudFdpbGxVbm1vdW50J1xuICAgICAqIFJlbW92ZXMgZHJvcHpvbmUuanMgKGFuZCBhbGwgaXRzIGdsb2JhbHMpIGlmIHRoZSBjb21wb25lbnQgaXMgYmVpbmcgdW5tb3VudGVkXG4gICAgICovXG4gICAgY29tcG9uZW50V2lsbFVubW91bnQgKCkge1xuICAgICAgICBpZiAodGhpcy5kcm9wem9uZSkge1xuICAgICAgICAgICAgY29uc3QgZmlsZXMgPSB0aGlzLmRyb3B6b25lLmdldEFjdGl2ZUZpbGVzKCk7XG5cbiAgICAgICAgICAgIGlmIChmaWxlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgLy8gV2VsbCwgc2VlbXMgbGlrZSB3ZSBzdGlsbCBoYXZlIHN0dWZmIHVwbG9hZGluZy5cbiAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIGRpcnR5LCBidXQgbGV0J3Mga2VlcCB0cnlpbmcgdG8gZ2V0IHJpZFxuICAgICAgICAgICAgICAgIC8vIG9mIHRoZSBkcm9wem9uZSB1bnRpbCB3ZSdyZSBkb25lIGhlcmUuXG4gICAgICAgICAgICAgICAgdGhpcy5xdWV1ZURlc3Ryb3kgPSB0cnVlO1xuXG4gICAgICAgICAgICAgICAgY29uc3QgZGVzdHJveUludGVydmFsID0gd2luZG93LnNldEludGVydmFsKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMucXVldWVEZXN0cm95ID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHdpbmRvdy5jbGVhckludGVydmFsKGRlc3Ryb3lJbnRlcnZhbClcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmRyb3B6b25lLmdldEFjdGl2ZUZpbGVzKCkubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRyb3B6b25lID0gdGhpcy5kZXN0cm95KHRoaXMuZHJvcHpvbmUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHdpbmRvdy5jbGVhckludGVydmFsKGRlc3Ryb3lJbnRlcnZhbClcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0sIDUwMClcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kcm9wem9uZSA9IHRoaXMuZGVzdHJveSh0aGlzLmRyb3B6b25lKVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVhY3QgJ2NvbXBvbmVudERpZFVwZGF0ZSdcbiAgICAgKiBJZiB0aGUgRHJvcHpvbmUgaGFzbid0IGJlZW4gY3JlYXRlZCwgY3JlYXRlIGl0XG4gICAgICovXG4gICAgY29tcG9uZW50RGlkVXBkYXRlICgpIHtcbiAgICAgICAgY29uc3Qge2NvbmZpZywgZGpzQ29uZmlnfSA9IHRoaXMucHJvcHM7XG4gICAgICAgIGNvbnN0IGRqc0NvbmZpZ09iaiA9IGRqc0NvbmZpZyA/IGRqc0NvbmZpZyA6IHt9O1xuICAgICAgICBjb25zdCBwb3N0VXJsQ29uZmlnT2JqID0gY29uZmlnICYmIGNvbmZpZy5wb3N0VXJsID8geyB1cmw6IGNvbmZpZy5wb3N0VXJsIH0gOiB7fTtcbiAgICAgICAgdGhpcy5xdWV1ZURlc3Ryb3kgPSBmYWxzZTtcblxuICAgICAgICBpZiAoIXRoaXMuZHJvcHpvbmUpIHtcbiAgICAgICAgICAgIGNvbnN0IGRyb3B6b25lTm9kZSA9IHRoaXMucHJvcHMuY29uZmlnLmRyb3B6b25lU2VsZWN0b3IgfHwgUmVhY3RET00uZmluZERPTU5vZGUodGhpcyk7XG4gICAgICAgICAgICB0aGlzLmRyb3B6b25lID0gbmV3IERyb3B6b25lKGRyb3B6b25lTm9kZSwgdGhpcy5nZXREanNDb25maWcoKSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmRyb3B6b25lLm9wdGlvbnMgPSBleHRlbmQodHJ1ZSwge30sIHRoaXMuZHJvcHpvbmUub3B0aW9ucywgZGpzQ29uZmlnT2JqLCBwb3N0VXJsQ29uZmlnT2JqKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZWFjdCAncmVuZGVyJ1xuICAgICAqL1xuICAgIHJlbmRlciAoKSB7XG4gICAgICAgIGNvbnN0IGljb25zID0gW107XG4gICAgICAgIGNvbnN0IHsgZmlsZXMgfSA9IHRoaXMuc3RhdGU7XG4gICAgICAgIGNvbnN0IHsgY29uZmlnIH0gPSB0aGlzLnByb3BzO1xuICAgICAgICBjb25zdCBjbGFzc05hbWUgPSAodGhpcy5wcm9wcy5jbGFzc05hbWUpID8gJ2ZpbGVwaWNrZXIgZHJvcHpvbmUgJyArIHRoaXMucHJvcHMuY2xhc3NOYW1lIDogJ2ZpbGVwaWNrZXIgZHJvcHpvbmUnO1xuXG4gICAgICAgIGlmIChjb25maWcuc2hvd0ZpbGV0eXBlSWNvbiAmJiBjb25maWcuaWNvbkZpbGV0eXBlcyAmJiAoIWZpbGVzIHx8IGZpbGVzLmxlbmd0aCA8IDEpKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMucHJvcHMuY29uZmlnLmljb25GaWxldHlwZXMubGVuZ3RoOyBpID0gaSArIDEpIHtcbiAgICAgICAgICAgICAgICBpY29ucy5wdXNoKDxJY29uIGZpbGV0eXBlPXtjb25maWcuaWNvbkZpbGV0eXBlc1tpXX0ga2V5PXsnaWNvbi1jb21wb25lbnQnICsgaX0gLz4pXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXRoaXMucHJvcHMuY29uZmlnLnBvc3RVcmwgJiYgdGhpcy5wcm9wcy5hY3Rpb24pIHtcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgPGZvcm0gYWN0aW9uPXt0aGlzLnByb3BzLmFjdGlvbn0gY2xhc3NOYW1lPXtjbGFzc05hbWV9PlxuICAgICAgICAgICAgICAgICAgICB7aWNvbnN9XG4gICAgICAgICAgICAgICAgICAgIHt0aGlzLnByb3BzLmNoaWxkcmVufVxuICAgICAgICAgICAgICAgIDwvZm9ybT5cbiAgICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgIDxkaXYgaWQ9e3RoaXMucHJvcHMuaWR9IGNsYXNzTmFtZT17Y2xhc3NOYW1lfT4ge2ljb25zfSB7dGhpcy5wcm9wcy5jaGlsZHJlbn0gPC9kaXY+XG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGFrZXMgZXZlbnQgaGFuZGxlcnMgaW4gdGhpcy5wcm9wcy5ldmVudEhhbmRsZXJzXG4gICAgICogYW5kIGJpbmRzIHRoZW0gdG8gZHJvcHpvbmUuanMgZXZlbnRzXG4gICAgICovXG4gICAgc2V0dXBFdmVudHMgKCkge1xuICAgICAgICBjb25zdCBldmVudEhhbmRsZXJzID0gdGhpcy5wcm9wcy5ldmVudEhhbmRsZXJzO1xuXG4gICAgICAgIGlmICghdGhpcy5kcm9wem9uZSB8fCAhZXZlbnRIYW5kbGVycykgcmV0dXJuO1xuXG4gICAgICAgIGZvciAodmFyIGV2ZW50SGFuZGxlciBpbiBldmVudEhhbmRsZXJzKSB7XG4gICAgICAgICAgICBpZiAoZXZlbnRIYW5kbGVycy5oYXNPd25Qcm9wZXJ0eShldmVudEhhbmRsZXIpICYmIGV2ZW50SGFuZGxlcnNbZXZlbnRIYW5kbGVyXSkge1xuICAgICAgICAgICAgICAgIC8vIENoZWNrIGlmIHRoZXJlJ3MgYW4gYXJyYXkgb2YgZXZlbnQgaGFuZGxlcnNcbiAgICAgICAgICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGV2ZW50SGFuZGxlcnNbZXZlbnRIYW5kbGVyXSkgPT09ICdbb2JqZWN0IEFycmF5XScpIHtcbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBldmVudEhhbmRsZXJzW2V2ZW50SGFuZGxlcl0ubGVuZ3RoOyBpID0gaSArIDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIENoZWNrIGlmIGl0J3MgYW4gaW5pdCBoYW5kbGVyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXZlbnRIYW5kbGVyID09PSAnaW5pdCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudEhhbmRsZXJzW2V2ZW50SGFuZGxlcl1baV0odGhpcy5kcm9wem9uZSlcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kcm9wem9uZS5vbihldmVudEhhbmRsZXIsIGV2ZW50SGFuZGxlcnNbZXZlbnRIYW5kbGVyXVtpXSlcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChldmVudEhhbmRsZXIgPT09ICdpbml0Jykge1xuICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnRIYW5kbGVyc1tldmVudEhhbmRsZXJdKHRoaXMuZHJvcHpvbmUpXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRyb3B6b25lLm9uKGV2ZW50SGFuZGxlciwgZXZlbnRIYW5kbGVyc1tldmVudEhhbmRsZXJdKVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5kcm9wem9uZS5vbignYWRkZWRmaWxlJywgKGZpbGUpID0+IHtcbiAgICAgICAgICAgIGlmICghZmlsZSkgcmV0dXJuO1xuXG4gICAgICAgICAgICBjb25zdCBmaWxlcyA9IHRoaXMuc3RhdGUuZmlsZXMgfHwgW107XG5cbiAgICAgICAgICAgIGZpbGVzLnB1c2goZmlsZSk7XG4gICAgICAgICAgICB0aGlzLnNldFN0YXRlKHsgZmlsZXMgfSlcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5kcm9wem9uZS5vbigncmVtb3ZlZGZpbGUnLCAoZmlsZSkgPT4ge1xuICAgICAgICAgICAgaWYgKCFmaWxlKSByZXR1cm47XG5cbiAgICAgICAgICAgIGNvbnN0IGZpbGVzID0gdGhpcy5zdGF0ZS5maWxlcyB8fCBbXTtcbiAgICAgICAgICAgIGZpbGVzLmZvckVhY2goKGZpbGVJbkZpbGVzLCBpKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGZpbGVJbkZpbGVzLm5hbWUgPT09IGZpbGUubmFtZSAmJiBmaWxlSW5GaWxlcy5zaXplID09PSBmaWxlLnNpemUpIHtcbiAgICAgICAgICAgICAgICAgICAgZmlsZXMuc3BsaWNlKGksIDEpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHRoaXMuc2V0U3RhdGUoeyBmaWxlcyB9KVxuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLmRyb3B6b25lLm9uKCd1cGxvYWRwcm9ncmVzcycsIChmaWxlLCBwcm9ncmVzcywgYnl0ZXNTZW50KSA9PiB7XG4gICAgICAgICAgICBwcm9ncmVzcyA9IGJ5dGVzU2VudCAvIGZpbGUuc2l6ZSAqIDEwMDtcbiAgICAgICAgICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VzL2RvY3MvV2ViL0FQSS9Eb2N1bWVudC9xdWVyeVNlbGVjdG9yXG4gICAgICAgICAgICAvL2xldCBlbGVtID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgIyR7dGhpcy5wcm9wcy5pZH0gLmR6LXVwbG9hZGApO1xuICAgICAgICAgICAgaWYoZmlsZS5wcmV2aWV3RWxlbWVudCkge1xuICAgICAgICAgICAgICAgIGxldCBlbGVtID0gZmlsZS5wcmV2aWV3RWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKFwiW2RhdGEtZHotdXBsb2FkcHJvZ3Jlc3NdXCIpO1xuXG4gICAgICAgICAgICAgICAgaWYoZWxlbS5sZW5ndGggPiAwKVxuICAgICAgICAgICAgICAgICAgICBlbGVtID0gZWxlbVswXTtcblxuICAgICAgICAgICAgICAgIGlmIChlbGVtKVxuICAgICAgICAgICAgICAgICAgICBlbGVtLnN0eWxlLndpZHRoID0gcHJvZ3Jlc3MgKyBcIiVcIjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5kcm9wem9uZS5vbignc2VuZGluZycgLCAoZmlsZSwgeGhyLCBmb3JtRGF0YSkgPT4ge1xuICAgICAgICAgICAgaWYodGhpcy5wcm9wcy5oYXNPd25Qcm9wZXJ0eSgnYWNjZXNzX3Rva2VuJykpIHtcbiAgICAgICAgICAgICAgICAvLyBvYXV0aDIgdG9rZW5cbiAgICAgICAgICAgICAgICBmb3JtRGF0YS5hcHBlbmQoXCJhY2Nlc3NfdG9rZW5cIiwgdGhpcy5wcm9wcy5hY2Nlc3NfdG9rZW4pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGV0IF90aGlzID0gdGhpcztcbiAgICAgICAgICAgIC8vIFRoaXMgd2lsbCB0cmFjayBhbGwgcmVxdWVzdCBzbyB3ZSBjYW4gZ2V0IHRoZSBjb3JyZWN0IHJlcXVlc3QgdGhhdCByZXR1cm5zIGZpbmFsIHJlc3BvbnNlOlxuICAgICAgICAgICAgLy8gV2Ugd2lsbCBjaGFuZ2UgdGhlIGxvYWQgY2FsbGJhY2sgYnV0IHdlIG5lZWQgdG8gZW5zdXJlIHRoYXQgd2Ugd2lsbCBjYWxsIG9yaWdpbmFsXG4gICAgICAgICAgICAvLyBsb2FkIGNhbGxiYWNrIGZyb20gZHJvcHpvbmVcbiAgICAgICAgICAgIGxldCBkcm9wem9uZU9uTG9hZCA9IHhoci5vbmxvYWQ7XG4gICAgICAgICAgICB4aHIub25sb2FkID0gZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgICAgICAgICBkcm9wem9uZU9uTG9hZChlKTtcbiAgICAgICAgICAgICAgICAvLyBDaGVjayBmb3IgZmluYWwgY2h1bmsgYW5kIGdldCB0aGUgcmVzcG9uc2VcbiAgICAgICAgICAgICAgICBsZXQgdXBsb2FkUmVzcG9uc2UgPSBKU09OLnBhcnNlKHhoci5yZXNwb25zZVRleHQpO1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdXBsb2FkUmVzcG9uc2UubmFtZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICAgICAgX3RoaXMub25VcGxvYWRDb21wbGV0ZSh1cGxvYWRSZXNwb25zZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlbW92ZXMgQUxMIGxpc3RlbmVycyBhbmQgRGVzdHJveXMgZHJvcHpvbmUuIHNlZSBodHRwczovL2dpdGh1Yi5jb20vZW55by9kcm9wem9uZS9pc3N1ZXMvMTE3NVxuICAgICAqL1xuICAgIGRlc3Ryb3kgKGRyb3B6b25lKSB7XG4gICAgICAgIGRyb3B6b25lLm9mZigpO1xuICAgICAgICByZXR1cm4gZHJvcHpvbmUuZGVzdHJveSgpXG4gICAgfVxufVxuXG5Ecm9wem9uZUpTLmRlZmF1bHRQcm9wcyA9IHtcbiAgICBkanNDb25maWc6IHt9LFxuICAgIGNvbmZpZzoge30sXG4gICAgZXZlbnRIYW5kbGVyczoge30sXG4gICAgZGF0YToge30sXG59O1xuXG5Ecm9wem9uZUpTLnByb3BUeXBlcyA9IHtcbiAgICBpZDogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkXG59O1xuXG5leHBvcnQgZGVmYXVsdCBEcm9wem9uZUpTOyIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCdcblxuZXhwb3J0IGNvbnN0IEljb24gPSAocHJvcHMpID0+IHtcbiAgICByZXR1cm4gKDxkaXYgZGF0YS1maWxldHlwZT17cHJvcHMuZmlsZXR5cGV9IGNsYXNzTmFtZT0nZmlsZXBpY2tlci1maWxlLWljb24nIC8+KVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTggT3BlblN0YWNrIEZvdW5kYXRpb25cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqKi9cblxuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IERyb3B6b25lSlMgZnJvbSAnLi9kcm9wem9uZSdcbmltcG9ydCAnLi9pbmRleC5sZXNzJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVXBsb2FkSW5wdXRWMiBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgICAgICBzdXBlcihwcm9wcyk7XG5cbiAgICB9XG5cbiAgICByZW5kZXIoKSB7XG4gICAgICAgIGxldCB7dmFsdWUsIG9uUmVtb3ZlLCBlcnJvciwgbWVkaWFUeXBlLCBwb3N0VXJsLCBtYXhGaWxlcyA9IDEsIHRpbWVPdXQsIG9uVXBsb2FkQ29tcGxldGUsIGRqc0NvbmZpZywgaWQgfSA9IHRoaXMucHJvcHM7XG4gICAgICAgIGxldCBoYXNfZXJyb3IgPSAoIHRoaXMucHJvcHMuaGFzT3duUHJvcGVydHkoJ2Vycm9yJykgJiYgZXJyb3IgIT09ICcnICk7XG4gICAgICAgIGNvbnN0IGFsbG93ZWRFeHQgPSBtZWRpYVR5cGUgJiYgbWVkaWFUeXBlLnR5cGUgPyBtZWRpYVR5cGUudHlwZS5hbGxvd2VkX2V4dGVuc2lvbnMubWFwKChleHQpID0+IGAuJHtleHQudG9Mb3dlckNhc2UoKX1gKS5qb2luKFwiLFwiKSA6ICcnO1xuICAgICAgICBjb25zdCBtYXhTaXplID0gbWVkaWFUeXBlID8gbWVkaWFUeXBlLm1heF9zaXplIC8gMTAyNCA6IDEwMDtcbiAgICAgICAgY29uc3QgY2FuVXBsb2FkID0gdmFsdWUubGVuZ3RoIDwgbWF4RmlsZXM7XG5cbiAgICAgICAgY29uc3QgZGpzQ29uZmlnU2V0ID0ge1xuICAgICAgICAgICAgcGFyYW1OYW1lOiBcImZpbGVcIiwgLy8gVGhlIG5hbWUgdGhhdCB3aWxsIGJlIHVzZWQgdG8gdHJhbnNmZXIgdGhlIGZpbGUsXG4gICAgICAgICAgICBtYXhGaWxlc2l6ZTogbWF4U2l6ZSwgLy8gTUIsXG4gICAgICAgICAgICB0aW1lb3V0OiB0aW1lT3V0IHx8ICgxMDAwICogNjAgKiAxMCksXG4gICAgICAgICAgICBjaHVua2luZzogdHJ1ZSxcbiAgICAgICAgICAgIHJldHJ5Q2h1bmtzOiB0cnVlLFxuICAgICAgICAgICAgcGFyYWxsZWxDaHVua1VwbG9hZHM6IGZhbHNlLFxuICAgICAgICAgICAgYWRkUmVtb3ZlTGlua3M6IHRydWUsXG4gICAgICAgICAgICBtYXhGaWxlczogbWF4RmlsZXMsXG4gICAgICAgICAgICBhY2NlcHRlZEZpbGVzOiBhbGxvd2VkRXh0LFxuICAgICAgICAgICAgZHJvcHpvbmVTZWxlY3RvcjogYG1lZGlhX3VwbG9hZF8ke21lZGlhVHlwZS5pZH1gLFxuICAgICAgICAgICAgLi4uZGpzQ29uZmlnXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IGNvbXBvbmVudENvbmZpZyA9IHtcbiAgICAgICAgICAgIHNob3dGaWxldHlwZUljb246IGZhbHNlLFxuICAgICAgICAgICAgcG9zdFVybDogcG9zdFVybFxuICAgICAgICB9O1xuICAgICAgICBjb25zdCBkYXRhID0ge1xuICAgICAgICAgICAgbWVkaWFfdHlwZTogbWVkaWFUeXBlLFxuICAgICAgICAgICAgbWVkaWFfdXBsb2FkOiB2YWx1ZSxcbiAgICAgICAgfTtcblxuICAgICAgICBsZXQgZXZlbnRIYW5kbGVycyA9IHt9O1xuICAgICAgICBpZiAob25SZW1vdmUpIHtcbiAgICAgICAgICAgIGV2ZW50SGFuZGxlcnMgPSB7cmVtb3ZlZGZpbGU6IG9uUmVtb3ZlfTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInJvd1wiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiY29sLW1kLTZcIiAgc3R5bGU9e3toZWlnaHQ6IDE4MH19PlxuICAgICAgICAgICAgICAgICAgICB7Y2FuVXBsb2FkID8gKFxuICAgICAgICAgICAgICAgICAgICAgICAgPERyb3B6b25lSlNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZD17aWR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGpzQ29uZmlnPXtkanNDb25maWdTZXR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlnPXtjb21wb25lbnRDb25maWd9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnRIYW5kbGVycz17ZXZlbnRIYW5kbGVyc31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhPXtkYXRhfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVwbG9hZENvdW50PXt2YWx1ZS5sZW5ndGh9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb25VcGxvYWRDb21wbGV0ZT17b25VcGxvYWRDb21wbGV0ZX1cbiAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZpbGVwaWNrZXIgZGlzYWJsZWRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYXggbnVtYmVyIG9mIGZpbGVzIHVwbG9hZGVkIGZvciB0aGlzIHR5cGUgLSBSZW1vdmUgdXBsb2FkZWQgZmlsZSB0byBhZGQgbmV3IGZpbGUuXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgKX1cblxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiY29sLW1kLTZcIj5cbiAgICAgICAgICAgICAgICAgICAge2hhc19lcnJvciAmJlxuICAgICAgICAgICAgICAgICAgICA8cCBjbGFzc05hbWU9XCJlcnJvci1sYWJlbFwiPntlcnJvcn08L3A+XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAge3ZhbHVlLmxlbmd0aCA+IDAgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPlVwbG9hZGVkPC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7dmFsdWUubWFwKCh2LGkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYga2V5PXtgdXBsb2FkZWQtJHtpfWB9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9e3YucHJpdmF0ZV91cmwgfHwgdi5wdWJsaWNfdXJsfSB0YXJnZXQ9XCJfYmxhbmtcIj57di5maWxlbmFtZX08L2E+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge29uUmVtb3ZlICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPiAtIDxhIG9uQ2xpY2s9e2V2ID0+IG9uUmVtb3ZlKHYpfT5SZW1vdmU8L2E+PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICk7XG4gICAgfVxufVxuIiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luIiwibW9kdWxlLmV4cG9ydHMgPSBcImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBZ0FBQUFJQUNBWUFBQUQwZU5UNkFBQUFCSE5DU1ZRSUNBZ0lmQWhraUFBQUFBbHdTRmx6QUFBTEV3QUFDeE1CQUpxY0dBQUFFSDFKUkVGVWVKenQzWC9zN1hWQngvSFg1ZkpMdUFoTUt4Q0hQOWdVUkNPVmlING9pV1UxeUxKMGhJaFVxN2h0cnZWcklXNVJ0R3B1NWNwcGxPV3ZqRkxLaXNJZnVibmxLbTNWSDlYTVpXa2tXS05pbVpJL0lIN2MvamhnbU5FOTU5N3pPZS9QT2EvSFkvdit4WWZQZVYyK1g4NzNlYytQejBrQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBSUIxMmpONkFJZmxqQ1FYSmprM3lST1RQQzdKaVVuMkpkazdjQmN3RDg5TGN1TkJqdm5lSks5UGN0ZjBjNWlUSTBjUFlHV25KN2tpeVl1U1BHSHdGbUQ3WFpEa0dVa3VTM0pnOEJZMlNBQnNqek9UdkN6SnBmRjlBOWJyMGlTM0pubnA2Q0ZzemhHakIzQlErNUs4SXNuN2sxd2V2L3lCYVZ5VlpQL29FV3lPWHliemRsNlNHNUk4ZHZBT29NT3JrM3cweWR0SEQyRjZIZ0dZcnl1VC9Fbjg4Z2MyWjI4V2YrbDQrdWdoVEU4QXpOTzFTWDRweVZHamh3QjFqcy9pRVlESER0N0J4QVRBL1B4NGttdEdqd0NxZlZHU2R5UTVlZlFRcGlNQTV1WEtKRDgyZWdSQWtyT3l1SWJBTWFPSE1BMEJNQi9uSlhuVjZCRUFEL0xNSkcrSWk4YnRKTzhDbUlkOVdienc1bkNlOC85b2tqOUxjbk9TTzVMY3U0WmR3UHpzeWZKL0svL2dHbTd2MGlTM0pMbDZEZWNDL3BkWFpIRUZybFcvUHBuazU1TThaZk9UZ1IzeGxpeDNmM1BscUlHd3E4NU1jbmRXLytWL2ZSWXYxQUU0SE1zR3dEMUpMaHEwRVhiU203TGFMLzY3a3J4NHlGSmdGeTBiQUE4ODZ1Z2FBYkFHcDJlMXYvM2ZsZVRyaGl3RmR0VXFBWEFneVcxSkhqTmtLV3ZsWFFCalhaSFZYb2o1M1VuZU5kRVdnR1dja3VTZFNVNGFQUVMyMmQ5bHRlZjhBZFp0MVVjQUh2aDZUNUtqTno4WHR0OFpXZTE1TnkvNEE2WndxQUZ3SU1sdnhEVUN0cGFuQU1hNWNJVmpYNXZrWDZjYUFuQ0lMazN5MDZOSHdMWjVUWmF2Yk8vekI2WnlPSThBUFBEbEdnR3dndmRrdWYreGJobTBEK2l3amdCd2pZQXQ1Q21BY1I2MzVIRi9QdWtLZ01PM040dkxtYnRHd0JZUkFPT2N1T1J4TjArNkFtQTlqay95dHJoR3dOWVFBT1BzVy9LNE95WmRBYkErcmhHd1JRVEFPSHVYUE02bitnSGI1S3drTjhZMUFtWlBBQUN3Ymhja2VVTmNJMkRXQkFBQVUzaGhrcDhhUFlLSEpnQUFtTXJWV1h5R0NUTWtBQUNZMG5WSnZtSDBDRDZmQUFCZ1NrY20rYzBrVHgwOWhNOGxBQUNZMnI0a2IwOXkrdWdoL0E4QkFNQW1uSnJrSFZuK0ltaE1UQUFBc0NsbkovbWRKRWVOSG9JQUFHQ3pMa3p5dXRFakVBQUFiTjdsU1g1aTlJaDJBZ0NBRVg0MHlYZU9IdEZNQUFBd3ltdVNQR2YwaUZZQ0FJQlJqa3p5MWlUbmpCN1NTQUFBTU5JSldWd2o0TkdqaDdRUkFBQ01kbG9XRWZEdzBVT2FDQUFBNXVDTHMzZzY0TWpSUTFvSUFBRG00bXVUL1BMb0VTMEVBQUJ6OGgxSnJoazlvb0VBQUdCdXJrM3k0dEVqZHAwQUFHQ09YcHZGWllPWmlBQUFZSTZPeXVLRGc4NGVQV1JYQ1FBQTV1ckVMRDVDK05UUlEzYVJBQUJnems1UDhyWWt4NDhlc21zRUFBQno5N1FrTnlUWk8zcklMaEVBQUd5RGk1SzhldlNJWFNJQUFOZ1crNVA4eU9nUnUwSUFBTEJOWHA3a2t0RWpkb0VBQUdDYjdFbnlxMG0rYXZTUWJTY0FBTmcyeHlTNU1ja1RSZy9aWmdJQWdHMzBpQ3l1RWZBRm80ZHNLd0VBd0xZNkk4bE5TUjQyZXNnMkVnQUFiTE12UzNKOS9ENWJtZjlnQUd5N2IwbnlzNk5IYkJzQkFNQXUrSUVrTHhrOVlwc0lBQUIyeFN1VFBIZjBpRzBoQUFEWUZVY2tlWE9TYzBjUDJRWUNBSUJkY2x3Vzd3eDR6T2doY3ljQUFOZzFwMlJ4allDVFJnK1pNd0VBd0M1NlVwTGZUbkxVNkNGekpRQUEyRlVYSnZtVjBTUG1TZ0FBc011dVNITE42QkZ6SkFBQTJIWFhKbm5SNkJGekl3QUFhUEM2SkJlTUhqRW5BZ0NBQmtjbitkMGtUeHc5WkM3MmpCNndJdzZNSGdBbGJranliYU5IN0ppM0pMbGs5SWdOdWpuSitVbHVIejFrTkk4QUFORGs4VWwrUDhteG80ZU1KZ0FBYUhOK2tqZWwvRkZ3QVFCQW94Y2srY25SSTBZU0FBQzBlbG1TYng4OVlwUWpSdzhBWUtqM2pSNHcyTE95ZUUzQXgwWVAyYlRxNXovV3lMc0FZRE84Q3dEV3hGTUFBRkJJQUFCQUlRRUFBSVVFQUFBVUVnQUFVTWpiQUxmWGZVbHVHejNpSWV4TGN1SkJqdmxVa28rdmNNN1REbjNPVnBuejkvWEJqa255eU5FamdFTW5BTGJYN1VrZVBYckVRL2poSkQ5emtHT3VUN0oveWZNZG0rUXpLOXorOTJYNUQvcDRmcEp2WGVIY1UvdVB6UGY3K21CZm4rU2RvMGNBaDA0QXNJdHVTdktSSlk4OU0vTUtBR0E5amtoeTNKTEgzcG5rbmdtM3pKTFhBQUN3aTU2VTVEK1gvSHIrb0kxRENRQUFLQ1FBQUtDUUFBQ0FRZ0lBQUFvSkFBQW9KQUFBb0pEckFQVFluK1RKRzdxdEw5blE3YkRaNyt1RG5UN2dOb0UxRWdBOUxrNXkwZWdSckozdkszQklQQVVBQUlVRUFBQzc2TzdSQStaT0FBQ3dpKzRkUFdEdUJBQUFGQklBQUZCSUFBQkFJUUVBQUlVRUFBQVVFZ0FBVUVnQUFFQWhsd0tHN2ZhSkpQKyt3ZHM3TnNueEc3dzlZQ0lDb01jSGtwdzAwYm1QUy9MVWljN04vKyt5RGQvZS9pUy91T0hiQkNZZ0FIcGNOZUc1bjV6ay9ST2VINEExOHhvQUFDZ2tBQUNna0FBQWdFSUNBQUFLQ1FBQUtDUUFBS0NRQUFDQVFxNERBTnR0ZnhiWFlkaVVzemQ0VzhDRUJFQ1BhNUtjTjlHNVQ1am92QnpjeFVrdUdqMEMyRDRDb01kNThZc0NnUHQ1RFFBQUZCSUFBRkJJQUFCQUlRRUFBSVVFQUFBVUVnQUFVRWdBQUVBaEFRQUFoUVFBQUJRU0FBQlFTQUFBUUNFQkFBQ0ZmQmdRN1c1Tjh0NE4zdDYrSk9lczhYd2ZTSExTR3MrM2luWC9XWUFORWdDMGUvMzlYNXR5YnBLL1dPUDVybHJqdVZhMTdqOExzRUdlQWdDQVFnSUFBQW9KQUFBb0pBQUFvSkFBQUlCQ0FnQUFDZ2tBQUNna0FBQ2drQXNCYmErVGs3eDdoZVBuZHNXMmk3UDgvbFZEOWZva2Q2NzQ3MnpLQ1FmNTV3L1BhdC9Ya1E3Mlp3Rm1UQUJzcjZPVFBIdjBpTU53MnYxZlUvaktpYzY3Q1VkbHU3K3Z3SmJ3RkFBQUZCSUFBRkJJQUFCQUlRRUFBSVVFQUFBVUVnQUFVRWdBQUVBaEFRQUFoUVFBQUJRU0FBQlFTQUFBUUNHZkJiQWVldzdoM3ptdzVIRlhKM241SVp3ZkFCNlNSd0FBb0pBQUFJQkNBZ0FBQ2drQUFDZ2tBQUNna0FBQWdFSUNBQUFLQ1FBQUtDUUFBS0NRQUFDQVFnSUFBQW9KQUFBb0pBQUFvSkFBQUlCQ0FnQUFDZ2tBQUNna0FBQ2drQUFBZ0VJQ0FBQUtDUUFBS0NRQUFLQ1FBQUNBUWdJQUFBb0pBQUFvSkFBQW9KQUFBSUJDQWdBQUNna0FBQ2drQUFDZ2tBQUFnRUlDQUFBS0NRQUFLQ1FBQUtDUUFBQ0FRZ0lBQUFvSkFBQW9KQUFBb0pBQUFJQkNBZ0FBQ2drQUFDZ2tBQUNna0FBQWdFSUNBQUFLQ1FBQUtDUUFBS0NRQUFDQVFnSUFBQW9KQUFBb0pBQUFvSkFBQUlCQ0FnQUFDZ2tBQUNna0FBQ2drQUFBZ0VJQ0FBQUtDUUFBS0NRQUFLQ1FBQUNBUWdJQUFBb0pBQUFvSkFBQW9KQUFBSUJDQWdBQUNna0FBQ2drQUFDZ2tBQUFnRUlDQUFBS0NRQUFLQ1FBQUtDUUFBQ0FRZ0lBQUFvSkFBQW9KQUFBb0pBQUFJQkNBZ0FBQ2drQUFDZ2tBQUNna0FBQWdFSUNBQUFLQ1FBQUtDUUFBS0NRQUFDQVFnSUFBQW9KQUFBb0pBQUFvSkFBQUlCQ0FnQUFDZ2tBQUNna0FBQ2drQUFBZ0VJQ0FBQUtDUUFBS0NRQUFLQ1FBQUNBUWdJQUFBb0pBQUFvSkFBQW9KQUFBSUJDQWdBQUNna0FBQ2drQUFDZ2tBQUFnRUlDQUFBS0NRQUFLQ1FBQUtDUUFBQ0FRZ0lBQUFvSkFBQW9KQUFBb0pBQUFJQkNBZ0FBQ2drQUFDZ2tBQUNna0FBQWdFSUNBQUFLQ1FBQUtDUUFBS0NRQUFDQVFnSUFBQW9KQUFBb0pBQUFvSkFBQUlCQ0FnQUFDZ2tBQUNna0FBQ2drQUFBZ0VJQ0FBQUtDUUFBS0NRQUFLQ1FBQUNBUWdJQUFBb0pBQUFvSkFBQW9KQUFBSUJDQWdBQUNna0FBQ2drQUFDZ2tBQUFnRUlDQUFBS0NRQUFLQ1FBQUtDUUFBQ0FRZ0lBQUFvSkFBQW9KQUFBb0pBQUFJQkNBZ0FBQ2drQUFDZ2tBQUNna0FBQWdFSUNBQUFLQ1FBQUtDUUFBS0NRQUFDQVFnSUFBQW9KQUFBb0pBQUFvSkFBQUlCQ0FnQUFDZ2tBQUNna0FBQ2drQUFBZ0VJQ0FBQUtDUUFBS0NRQUFLQ1FBQUNBUWdJQUFBb0pBQUFvSkFBQW9KQUFBSUJDQWdBQUNna0FBQ2drQUFDZ2tBQUFnRUlDQUFBS0NRQUFLQ1FBQUtDUUFBQ0FRZ0lBQUFvSkFBQW9KQUFBb0pBQUFJQkNBZ0FBQ2drQUFDZ2tBQUNna0FBQWdFSUNBQUFLQ1FBQUtDUUFBS0NRQUFDQVFnSUFBQW9KQUFBb0pBQUFvSkFBQUlCQ0FnQUFDZ2tBQUNna0FBQ2drQUFBZ0VJQ0FBQUtDUUFBS0NRQUFLQ1FBQUNBUWdJQUFBb0pBQUFvSkFBQW9KQUFBSUJDQWdBQUNna0FBQ2drQUFDZ2tBQUFnRUlDQUFBS0NRQUFLQ1FBQUtDUUFBQ0FRZ0lBQUFvSkFBQW9KQUFBb0pBQUFJQkNBZ0FBQ2drQUFDZ2tBQUNna0FBQWdFSUNBQUFLQ1FBQUtDUUFBS0NRQUFDQVFnSUFBQW9KQUFBb0pBQUFvSkFBQUlCQ0FnQUFDZ2tBQUNna0FBQ2drQUFBZ0VJQ0FBQUtDUUFBS0NRQUFLQ1FBQUNBUWdJQUFBb0pBQUFvSkFBQW9KQUFBSUJDQWdBQUNna0FBQ2drQUFDZ2tBQUFnRUlDQUFBS0NRQUFLQ1FBQUtDUUFBQ0FRZ0lBQUFvSkFBQW9KQUFBb0pBQUFJQkNBZ0FBQ2drQUFDZ2tBQUNna0FBQWdFSUNBQUFLQ1FBQUtDUUFBS0NRQUFDQVFnSUFBQW9KQUFBb0pBQUFvSkFBQUlCQ0FnQUFDZ2tBQUNna0FBQ2drQUFBZ0VJQ0FBQUtDUUFBS0NRQUFLQ1FBQUNBUWdJQUFBb0pBQUFvSkFBQW9KQUFBSUJDQWdBQUNna0FBQ2drQUFDZ2tBQUFnRUlDQUFBS0NRQUFLQ1FBQUtDUUFBQ0FRZ0lBQUFvSkFBQW9KQUFBb0pBQUFJQkNBZ0FBQ2drQUFDZ2tBQUNna0FBQWdFSUNBQUFLQ1FBQUtDUUFBS0NRQUFDQVFnSUFBQW9KQUFBb0pBQUFvSkFBQUlCQ0FnQUFDZ2tBQUNna0FBQ2drQUFBZ0VJQ0FBQUtDUUFBS0NRQUFLQ1FBQUNBUWdJQUFBb0pBQUFvSkFBQW9KQUFBSUJDQWdDQWRnZEdEeGhCQUl4eno1TEhIVFhwQ29EZGRNd0t4OTQ5MllvWkV3RGpmSExKNDA2WmRBWEFianAxaFdQdm1HekZqQW1BY1c1YjhyaW5UTG9DWURldGN0LzVMNU90bURFQk1NNC9MSG5jZVVtT24zSUl3QTU2MXBMSDNaZms1aW1IekpVQUdPZXZsanp1bUNUZk5PVVFnQjF6Y3BMbkxIbnNoNU44ZXNJdHN5VUF4bm5mQ3NkKy8yUXJBSGJQL2l6L0lzRDNUamtFL2kvSEpia3ppN2VmTFBQMWdqRXpBYmJLSTVOOExNdmZ0MTR5WmlidGJzenlQNlMzSmZuQ01UTUJ0c1p2WmZuNzFjOGtPV0hNVE5wOWM1Yi9RVDJRNUkrU0hEdGtLY0Q4dlRTcjNhZisrcGlaa094TjhvOVo3UWYyWFVuMmpSZ0xNR00vbE5YdVN3OGtPWC9JVXJqZmxWbjloL1p2NHZvQUFNbmlJZnczWnZYNzBYY1AyQXFmNDhna2Y1dlZmM2ovSzhuUFpiV3JYUUhzaXFPVGZGZVNmODdxOTUvM0pubjY1aWZENTN0V1Z2OEJmbkFJL0Y2UzcwbHlUcnlnQmRoTlJ5ZDVmSkxuSmJrdXliL2wwTzgzZjJIRDIyZHB6K2dCZk5hcmtyeGtUZWU2TDRzZmNvQmRzWGRONS9sUWtxZGwrYzlqMlZrQ1lENk9TZkxIU2I1MDlCQ0FIZlhwSkYrUjVLOUhENWtEVndLY2o3dXl1T1R2TGFPSEFPeWdlNU5jRnIvOFAwc0F6TXR0U2I0bXlUK05IZ0t3USs3TDRnV0RONDRlTWljQ1lINCtuT1FaU1Q0NGVnakFEcmd6aTh2OXZuSHdqdGtSQVBQMGtTUmZudVNtd1RzQXR0bXRTWjZaNUsyamg4elJ1bDVWeWZyZG1lVE5TVzVQY2tFV2I0RUJZRG5YSjNsdWtwdEhENWtyandETTMzVkp6a3J5YTFrOGp3WEFRL3ZMSk05T2NubVNqdy9lTW12ZUJyaGR6a3p5ZzBsZW1PVDR3VnNBNXVKQWtqOU04c29zbmpwMUhaUWxDSUR0dEMvSnhVbStNY2xYSjNuVTBEVUFtL2VwSkgrYTVBK3llSTdmVzZoWEpBQjJ3Nk95ZUpyZzlDU1BTUEt3ZUgwSHNEc09aSEd0bEU5a2NlMy9EeVg1K3l6ZTJ3OEFBQUFBQUFBQUFBQUFBQUFBQUFBQUFMQjkvaHQ4eG1YeFNnTmUrUUFBQUFCSlJVNUVya0pnZ2c9PVwiIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxNyBPcGVuU3RhY2sgRm91bmRhdGlvblxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICoqL1xuXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IERyb3B6b25lIGZyb20gJ3JlYWN0LWRyb3B6b25lJztcbmltcG9ydCBUIGZyb20gJ2kxOG4tcmVhY3QvZGlzdC9pMThuLXJlYWN0JztcbmltcG9ydCAnLi91cGxvYWQubGVzcyc7XG5cbmltcG9ydCBmaWxlX2ljb24gZnJvbSAnLi9maWxlLnBuZyc7XG5pbXBvcnQgcGRmX2ljb24gZnJvbSAnLi9wZGYucG5nJztcbmltcG9ydCBtb3ZfaWNvbiBmcm9tICcuL21vdi5wbmcnO1xuaW1wb3J0IG1wNF9pY29uIGZyb20gJy4vbXA0LnBuZyc7XG5pbXBvcnQganBnX2ljb24gZnJvbSAnLi9qcGcucG5nJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVXBsb2FkSW5wdXQgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICAgICAgc3VwZXIocHJvcHMpO1xuXG4gICAgICAgIHRoaXMuc3RhdGUgPSB7XG4gICAgICAgICAgICBzaG93X3JlbW92ZTogZmFsc2UsXG4gICAgICAgICAgICBsb2dvX3ByZXZpZXc6IHtcbiAgICAgICAgICAgICAgICBwcmV2aWV3OiBudWxsLFxuICAgICAgICAgICAgICAgIG5hbWU6ICcnLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZmlsZUhhc1ByZXZpZXcgPSB0aGlzLmZpbGVIYXNQcmV2aWV3LmJpbmQodGhpcyk7XG4gICAgfVxuXG4gICAgb25Ecm9wKGFjY2VwdGVkRmlsZXMsIGZpbGVSZWplY3Rpb25zLCBldnQpIHsgICAgICAgIFxuICAgICAgICBpZihhY2NlcHRlZEZpbGVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGxldCBmaWxlID0gYWNjZXB0ZWRGaWxlc1swXTtcbiAgICAgICAgICAgIHRoaXMucHJvcHMuaGFuZGxlVXBsb2FkKGZpbGUsIHRoaXMucHJvcHMpO1xuICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgICAgICAgICAgIC4uLnRoaXMuc3RhdGUsXG4gICAgICAgICAgICAgICAgICAgIGxvZ29fcHJldmlldzpcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgcHJldmlldzogZmlsZS5wcmV2aWV3LFxuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogZmlsZS5uYW1lXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICAgIGlmKGZpbGVSZWplY3Rpb25zLmxlbmd0aCA+IDAgJiYgdGhpcy5wcm9wcy5oYXNPd25Qcm9wZXJ0eShcImhhbmRsZUVycm9yXCIpKVxuICAgICAgICAgICAgdGhpcy5wcm9wcy5oYW5kbGVFcnJvcihmaWxlUmVqZWN0aW9ucywgdGhpcy5wcm9wcylcbiAgICB9XG5cbiAgICBvblJlbW92ZShldil7XG4gICAgICAgIHRoaXMucHJvcHMuaGFuZGxlUmVtb3ZlKGV2LCB0aGlzLnByb3BzKTtcbiAgICB9XG5cbiAgICBzaG93VmVpbCgpIHtcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7Li4udGhpcy5zdGF0ZSwgc2hvd19yZW1vdmU6dHJ1ZX0pO1xuICAgIH1cblxuICAgIGhpZGVWZWlsKCkge1xuICAgICAgICB0aGlzLnNldFN0YXRlKHsuLi50aGlzLnN0YXRlLCBzaG93X3JlbW92ZTpmYWxzZX0pO1xuICAgIH1cblxuICAgIGZpbGVIYXNQcmV2aWV3KGZpbGVOYW1lKXtcbiAgICAgICAgaWYoIWZpbGVOYW1lKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIGxldCBwYXR0ZXJuID0gLyguKilcXC4oZ2lmfGJtcHxzdmd8anBlP2d8cG5nKS9nXG4gICAgICAgIHJldHVybiBwYXR0ZXJuLnRlc3QoZmlsZU5hbWUpO1xuICAgIH1cblxuXG4gICAgcmVuZGVyKCkge1xuICAgICAgICBsZXQge3ZhbHVlLCBmaWxlLCBoYW5kbGVSZW1vdmUsIGhhbmRsZVVwbG9hZCwgaGFuZGxlRXJyb3IsIGZpbGVOYW1lLCBlcnJvciwgLi4ucmVzdH0gPSB0aGlzLnByb3BzO1xuICAgICAgICBsZXQge2xvZ29fcHJldmlldywgc2hvd19yZW1vdmV9ID0gdGhpcy5zdGF0ZTtcbiAgICAgICAgbGV0IGhhc19lcnJvciA9ICggdGhpcy5wcm9wcy5oYXNPd25Qcm9wZXJ0eSgnZXJyb3InKSAmJiBlcnJvciAhPT0gJycgKTtcbiAgICAgICAgLy8gZGVmYXVsdCB2YWx1ZSAoIHJlc291cmNlIClcbiAgICAgICAgbGV0IGljb24gPSBmaWxlX2ljb247XG5cbiAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgICBpZighZmlsZU5hbWUpIGZpbGVOYW1lID0gdmFsdWUuc2xpY2UodmFsdWUubGFzdEluZGV4T2YoXCIvXCIpICsgMSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZmlsZSAmJiBmaWxlLmhhc093blByb3BlcnR5KFwibmFtZVwiKSAmJiBmaWxlLm5hbWUpIHtcbiAgICAgICAgICAgIGZpbGVOYW1lID0gZmlsZS5uYW1lO1xuICAgICAgICB9XG4gICAgICAgICAvLyBmaWxlcyB3aXRob3V0IHByZXZpZXdcbiAgICAgICAgaWNvbiA9ICAoZmlsZU5hbWUgJiYgZmlsZU5hbWUuZW5kc1dpdGgoJ3BkZicpID8gcGRmX2ljb246IGljb24pO1xuICAgICAgICBpY29uID0gIChmaWxlTmFtZSAmJiBmaWxlTmFtZS5lbmRzV2l0aCgnbW92JykgPyBtb3ZfaWNvbjogaWNvbik7XG4gICAgICAgIGljb24gPSAgKGZpbGVOYW1lICYmIGZpbGVOYW1lLmVuZHNXaXRoKCdtcDQnKSA/IG1wNF9pY29uOiBpY29uKTtcblxuICAgICAgICAvLyBpZiBmaWxlIGhhcyBwcmV2aWV3ICggYWxyZWFkeSBvbiBkYXRhIG1vZGVsKVxuICAgICAgICBpZih0aGlzLmZpbGVIYXNQcmV2aWV3KGZpbGVOYW1lKSAmJiB2YWx1ZSl7XG4gICAgICAgICAgICBpY29uID0gdmFsdWVcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChsb2dvX3ByZXZpZXcucHJldmlldyAmJiBsb2dvX3ByZXZpZXcubmFtZSkge1xuICAgICAgICAgICAgaWNvbiA9IGxvZ29fcHJldmlldy5wcmV2aWV3O1xuICAgICAgICAgICAgZmlsZU5hbWUgPSBsb2dvX3ByZXZpZXcubmFtZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZpbGUtdXBsb2FkXCI+XG4gICAgICAgICAgICAgICAgPERyb3B6b25lXG4gICAgICAgICAgICAgICAgICAgIG9uRHJvcD17dGhpcy5vbkRyb3AuYmluZCh0aGlzKX1cbiAgICAgICAgICAgICAgICAgICAgey4uLnJlc3R9XG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxkaXY+e1QudHJhbnNsYXRlKFwiZ2VuZXJhbC5kcm9wX2ZpbGVzXCIpfTwvZGl2PlxuICAgICAgICAgICAgICAgIDwvRHJvcHpvbmU+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzZWxlY3RlZC1maWxlcy1ib3ggY29sLW1kLTZcIj5cbiAgICAgICAgICAgICAgICAgICAgPHA+U2VsZWN0ZWQgRmlsZXM8L3A+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic2VsZWN0ZWQtZmlsZXNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt2YWx1ZSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmaWxlLWJveFwiIG9uTW91c2VFbnRlcj17dGhpcy5zaG93VmVpbC5iaW5kKHRoaXMpfSBvbk1vdXNlTGVhdmU9e3RoaXMuaGlkZVZlaWwuYmluZCh0aGlzKX0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9e2ljb259IC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj17dmFsdWV9IHRhcmdldD1cIl9ibGFua1wiPntmaWxlTmFtZX08L2E+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3Nob3dfcmVtb3ZlICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJyZW1vdmVcIiBvbkNsaWNrPXt0aGlzLm9uUmVtb3ZlLmJpbmQodGhpcyl9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzc05hbWU9XCJmYSBmYS10aW1lc1wiPjwvaT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHtoYXNfZXJyb3IgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cImVycm9yLWxhYmVsXCI+e2Vycm9yfTwvcD5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKVxuICAgIH1cbn1cbiIsIm1vZHVsZS5leHBvcnRzID0gXCJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQWdBQUFBSUFDQU1BQUFERHBpVElBQUFBQTNOQ1NWUUlDQWpiNFUvZ0FBQUFDWEJJV1hNQUFBemVBQUFNM2dFVFVCQjZBQUFBR1hSRldIUlRiMlowZDJGeVpRQjNkM2N1YVc1cmMyTmhjR1V1YjNKbm0rNDhHZ0FBQXZwUVRGUkYvLy8vQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVdzQWM5d0FBQVAxMFVrNVRBQUVDQXdRRkJnY0lDUW9MREEwT0R4QVJFaE1VRlJZWEdCa2FHeHdkSGg4Z0lTSWpKQ1VtSnlncEtpc3NMUzR2TURFeU16UTFOamM0T1RvN1BEMCtQMEJCUWtORVJVWkhTRWxLUzB4TlRrOVFVVkpUVkZWV1YxaFpXbHRjWFY1ZllHRmlZMlJsWm1kb2FXcHJiRzF1YjNCeGNuTjBkWFozZUhsNmUzeDlmbitBZ1lLRGhJV0doNGlKaW91TWpZNlBrSkdTazVTVmxwZVltWnFibkoyZW42Q2hvcU9rcGFhb3FhcXJySzJ1c0xHeXM3UzF0cmU0dWJxN3ZMMit2OERCd3NQRXhjYkh5TW5LeTh6TnpzL1EwZExUMU5YVzE5aloydHZjM2Q3ZjRPSGk0K1RsNXVmbzZlcnI3TzN1Ny9EeDh2UDA5ZmIzK1BuNisvejkvbzlhSEpjQUFCVTdTVVJCVkhqYTdkMTVmRTFuR2dmd2M3T0prSVJJQ2JGRWE2SkNoZHFteHI2MjJnbHRVRVFzZzZGMFVZVFd0SmhZeXBTbVJhdkRsSXlsb1liYUl2WmxXbHBiMGdpcHBWS3Q2SkNJV0VLMiszdytROWRvN3IzbnZmY3NlZCs4djkvZjNuUGU4enhmTi9lK1oxTVVBK0xiZittMjVDdFdraTQ1SitJN0tyTEhQWHJyWFpJNHFaM2s3bjlFR2ttZW9yRVN0ei9rSUNFMFg5citkN3lLN3QvUFpFbjdQN29BdmY4eDF1ZWw3UDhnZFA2WDNHMHZZZjliNUtIeHYrYmFvOUwxdi9wRnRMMUVMdFNRRFVBOG12NUFqbFNTcS8vaHhlajVnOW5zTGhXQUpIVDg5MWtpVS85Ym85K2xNMFVpQUhQUmJodkxBUVBrQVhBYTdiYTFITkJCbHY2SG90bTJsd01hU1FJZ0NyMjJzeHdRSkFlQUdMVGFUbzdLc1J3UWgwN2J5eFlwbGdNUzBHaTcrVkFHQUlrMkRueDBrQng1VEUzQWF4SUEyRzdqdUdYNUVSeWt1aHd3RUFDa0JrRDVIUUZBYWdDVTB3Z0FwQVpBR1VFQUlEVUFPbFlKQUtRR1FGdmRBVUJxQVBSUEFKQWJBTDBPQUhJRHNBNENBS2tCVUg0bkFKQWFBT1dFQVlEVUFDaWpKZ0JJRFlDT1ZRWUFxUUhRTmc4QWtCb0FMUVVBdVFIUVZBQ1FHNEExQ2dDa0JrRDVuUUZBYWdDVTB4Z0FwQVpBMzlZRUFLa0IwUEhLQUNBMUFFcjBBQUNwQWRBeUFKQWJBUDBOQU9RR1FJTUJRRzRBK1YwQVFHb0FkTDB4QUVnTmdDN1dBZ0NwQWRBSlh3Q1FHZ0J0OXdBQXFRSFF2d0JBYmdEMEJnRElEWUNpQVVCdUFBVmRBVUJxQUhTOUNRQklEYUI4TEFjQWdJWWsrd0tBMUFBb3lRTUFwQVpBSHdHQTNBQm9HZ0RJRFlDR0FJRGNBRVJmRGdBQXJjbDlEQUNrQmtEZkJRT0ExQURFWGc0QUFCMnl3d01BcEFaQXl3RkFiZ0EwSFFEa0JrQkRBVUJ1QUFYZEFFQnFBSlRiRkFDa0JpRHFjZ0FBNkpZVVB3Q1FHZ0R0OEFRQXFRSFFDZ0NRR3dETkFBQzVBZEJ3QUpBYlFFRjNBSkFhZ0hqTEFRQ2djNzZ2RFFCU0E2Q3YvQUJBYWdDMDB4TUFwQVpBOFFBZ053RDZPd0RJRFlEK0FnQnlBeWpzQVFCU0E2QWI0UUFnTlFDNlZBY0FwQVpBcWY0QUlEVUEydVVKQUZJRG9IOERnTndBS0JZQTVBWkFJd0JBYmdDRlBRRkFhZ0Iwb3hrQVNBMUFnT1VBQURBMjNDOEhBSURCMmUwSkFGSURvSlVBSURjQW1na0FjZ09na1FBZ040RENKd0ZBYWdCMHN6a0FTQTJBTXVzQ2dOUUE2S1EvQUVnTmdQWjRBWURVQUdnVkFNZ05nR1lCZ053QWFCUUF5QTJnOENrQWtCb0FuOHNCQUdCaWVGd09BQUF6azFZRkFLUUdRSHU5QUVCcUFMVGFBZ0JTQTZDWEFFQnVBRG1CQUNBMUFQb1FBT1FHVUJ3QUFGSURvSTRBSURlQWNRREFTV3FVRFlBUEFJQ1RXSExMQk1CR0FPQWxlOG9Fd0hZQTRDVnpBVUJ1QUJFQUlEY0F5MTRBa0JxQUVuSVRBS1FHb0l3Q0FMa0JLSDJ2QW9EVUFKVHFHd0JBYWdDS0VqcHcvdDUwZzNMSlJua1RBVUNlRE1BbkFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQWdOUUFBbnVQbmJVaUtUV2pSTzdZbU9HbGRNVEFWOGJjS1ZuLzFLUVZzOGIyRGpTaiszK1lkS0NZRUM1VHRHOThpTEhkcnpEeEZNck1kMDZNOHpTcy9XN1IzNkxBL09mOFFJc3gvZTl4QXNVVkk4ZTZHOUIrcjJVb3JEaFo1cVYzL3g4NmdLcUtsQU1QNmR2L3BobW9xVmpKYUtycm4vOWJxS2hvdWRWRHYvNkg1YUtlNGlVM1RLLytCNXhETlVYTXVRQjkrdSt4RzdVVU03czlkQUd3RUpVVU5ZdjA2SDhyS3dvcGFxeXRkQUN3RjNVVU4zdTE5LzlwVkZIa1BLMzVCRkFxaWloeVV0MDBBaGlDR29xZElSb0I3RUFKeGM0T2JmMzNLMEFKeFU2Qm55WUF6Nk9Db3VkNVRRRFdvSUNpWjQybVZlQWNGRkQwNUdoWkQyNk0rcG1WT3ptWjMrVVVHckhseGhvQWRCZXhsTVc1MzUwNnZPTS9LeGJPZjJ2bXRLbVRYMzFwek1paFVmMmY2L2VYOFcvK1k4bnFUWHVQZnAxNWs0dmw3WnVudGk5N2Mxalh4eG9FQjFUOCtUcE83OEQ2anozUjQ3a2g0NmJNaXYvc2lqNjcwWEtCNERDRFN6Qm52RW9tTVhmOTBxRzFiNy9jcDNYRFdwVlpyb2wxcS9MSHY3NS84SHBadGY3R2dYZUhOS3VpT2t2L2xnT25yVHlVcFhGbnd6UUFtR3B3SVI1Vm00QzMyaFp5VTdjdW1UcTRRNGhyRjhPSFJMenh5ZGZtM3VkeWErZThBYUhPWGJkZDlZbVlyUm91eVptcUFjQmlyZ0c4M2F1SnZ3NW51M3hhVFRoUVpFNzNUNy9UcllKcmszUnZOV21MaXdnV2E2ak5CcTRCZE5MeGRzZmhHL01NUHRiYm0xL1FlTitXZTh0Smgxelk4UWFkYi9vdGx3RHV4WGRzbW9GZlRKUDZWZEJsbG1FTG5QNXF1QjBBV05QcEUwTitoMUhHOUxyNlRkSXpjbHNSQUJnRDRONjN3dFc2LzBETVg5dkRUZWRaOWdVQW93QW9Tdk9kdWg1aFhseVEvbk9jRFFER0FWQ1VudWYxYS84N1FVYk04REFBR0FsQThWMnUwL2YrQlRVTW1aOC92Z01ZQzBCUklyTzBIMXZSZTlVTm1sMEVmZ1VZRFVDcGRWVHJvUjFyWWRqazNnTUF3d0VvbFpPMExmaSs2bTdjM0U0Q2dQRUFGTTlWR281cmMxMERaeGFFaFNBekFDaVdEMXc5cXF5K2hrNXNFQUNZQWtCeFcrL2lYLzk2eHM3ckl3QXdCNERpN2RKamNlSzlEWjVXQmdDWUJFQ3A0dnpwb1lLeFJrL3FFWndNTWcyQTBzalpjOFNaYlEyZjAxOEJ3RHdBeW92T0hVOUtUZU9udEJZQVRBU2dKRHB6T0VjRGpKK1FCZGNEbUFvZ0tKdjlhQTc1bXpDaGNBSUFNd0VvcnpBZnpBRmZNK1l6QVFETUJlREZlbko0ZHlVenBxTnNBUURYQUxqNUJRZTZkSlBVQUxaRDJlbHRTdjg5YmdLQU13Q3F0aHV6YU12KzQyY3YvL1NvMDl5TTQ3c1dSdjNCdVc5ZFRDY0cwLzFONmIvU2xnQ0FIVURvSmRzRHM3ZS9YSlc5Q0pFTUI1SVRxbjNsT2NDZjRSUHFUUUJ3QWtBeisyUHZyR3JQL0ttYnFYN3h4NU91VnJqbXMyUGZpRnU1OWRDWjdQczNLT1ZuWHp4MVpOK1d0Y3ZuREd0cit3VkErd0JBSHdEM2tzcTZhaGVyZWh3VFhWdlVIYjc4cklPTlhqdTg4bzMralI0YzRwTVBBTG9Cb09JRkZabXFVRWZ0R3J4L08xL1pwaSt1eldRcVVlYXFvYlYvRzlhREFFQS9BRVJmdDlUanA5Y3haMi82OFJxUzdGU1owaGYzcWZ6VHlIa0FvQ3NBeW1VU01NcmhOZ3JEblN0cXdPdVhuSy9VcmZpTzkyOHBQZ29BK2dLZ3JDWU1aUWgydUluWlRwVzB3ZnUzWFN6VytXbjFxaFlEZ000QTZISURoanFrT1BwOGR1WVBRSXVOV3A1R1lIWHA5bFVBVUZuQ1o2akRXdzZhMHM2Sm4vcXZGNUw1QVFDVjlGT3ZReGY3bzk5bnIyYXRzbm56QmdDbzVJTDZaM2lnM2NFWDJVOEJQbk9WQUlCSEFCU2pYZ2k3VjJFTVpTMWxoVEo3OFFvQXFDVkZ2UkQ3N1F3OXkzb0RVS01VQWdCZUFaRDZoZnhMN0l4a2ZSaDd5eko3SWgwQU1HU2NxOWNGbldIOEFHaCtqUUNBWXdCSnFvV0lzajB3bW5IaFA0c0FnR2NBVjlXL3dkcytsY0QyQVJEOFB3SUFyZ0ZZVmEvRWFHOXozR0NtSW5wK1RnREFOd0JTdloranFhMVJWOWllVDF2V0w5NEVBUFdvbnMrcloydFVIRk1OeS95bEt3Q2dIdFUzclQ5c2ExUXpsaElHWmdFQS93QzZxRzNwanpZR0pUT1ZjRGtCQVA4QXd0UzJaT3ZCWE9OWkt0ak9DZ0FDQUtpbXRxV1JwY2NVc2p3RnpwMkRGNjhDZ0dvS1ZGL2dZT1BOR1oreUZIQWdBWUFBQUw1WExjUzdwUWYxWnlsZ01nQ0lBR0MvYWlFK0xyMTRGTWhRdjZjSUFFUUFNRW0xRUx0S2pmbUtwWDc3QUVBSUFPclhoWDVWYXN4Q2h2THg4ZHBGQUZCTHFub2hMcGNhOUN4RCtXWUNnQkFBWXRYUDU1UzZPY3hhamFGOFp3QkFCQUQ1ajZqV29aTkx5NENQRXdDSUFHQ2VlaDFLM3hmd0xrUDE1Z0dBQ0FBeUdTN3NQbDVxVktUaXlpZ0E0QkFBdzRYZE5Vb3Y2RGRTSCtWYkJBQUNBRWhrZUkvdjRGS2ppcnpVUi9IeTZuVUFjSlFEUGd4bEtQM3VpUE1NbzJZQUFQOEF2bVM1czh0UytxTE9iUXpEZGdFQTl3Q1NtUjRXWnVQbkhNdVBBTVpyZ2EvUGNDMnJBVUFyQU90Q0g2WXF2RjU2S01OYkFTb3gxaUREeGQ0OENRQWFBWnhsZlZDY2pYTzZYZFZITlFFQXJnSGNudS9EV0lTdU5rYlhVUi8yWndEZ0dNREpGOWtmN1dycmxRRU10d1M5REFDOEFyaTAwb25IdXRqOEtNOWpHTGNBQU1vY1FOQ0h1eTQ4K0ZDbXZNOFc5S3ZqWEExc2ZkditIOE80cFFCUTVnRHV4eXUwVmZ0dXowUkdEZXJWdGxITmlzNlhvSTJ0NjdwWjFvSFdBQUFYQURURzhvV3RQVE04VTBUWkNBRGxBY0F3bTN2K2pHSGtUZ0FvQndBQ2ZuQzVwcDhEUURrQXNNbjJudGN6REQzQ1dJTUxBTUF2Z0ZmdDdEbWVZV3dTUGdHRUI5QzZ3TTZlbDduNDh4RUFoQUlRL0syOVBhOWlHUDB1QUFnT0lQQ1UzVDJ6ZkFmNEd3Q0lEY0RQd2NzWnRqS01IdzBBUWdQdzNlOWd6M3NZTmhBSkFDSURxSC9TMFo0UE1XeWhBd0FJREtDRDQwZTduMkRZUkJnQWlBdGdaSUhqZWFjemJLTTZBSWdLb05JSGF2Tyt6TEFWZHlzQWlBbWdaNGJxdkswc0w0cjZIZ0JFQkZCdEpjdkVXVjVBdmdvQXhBUGdOdVFLMDhTN01XeHJLQUNJQnNBOU9wMXg0aU5aVnBJQlFDd0FuaVBPTVU5OEZzc0dUek50Nm1JVjJ3RUFjd0hVaXNsd1l1SXNaNE0wUGlmZUd3RE1BK0FUbGVUY3pmd0hXYllhQVFCQ0FQQjlac1ZOWnlkK2xXWERma1VBb0pLR1pRM0E0MDh6L3V2UyszeFpmZ2NxbndPQVN1cXFmalliQjhDcmFkVGN4QnV1enB6cGhZR3hBS0FTMWR2enEyb0NVS2wxdzVvUDNnSnE4YXNiM3FuUDhBa3pQejVab0dubVMxaktGMllGQU1kUmZWdFhrQ1lBUDk0YldKaDlJZm5BNWpYL1dyZmp5TGtzM1o3YmxNSlV2MDhBd0dIdXFFNGdSRHNBWTFMTTlOYndwbFlBY0pRcnFoTm95Q3NBbGtkRUtPejNoMGtLNEp6NmZ5RnVBVXhqS21BTEFIQVU5UXRyV25FTDRCaGJCYmNBZ0lPb3Y2bWpQYmNBNkdHbUNyWUJBQWRSdjhHbUQ3OEFKck9WTUFrQTdPY2wxUW1NNVJmQUViWVN0aWtDQUx2cG9EcUJXZndDb1Bwc05ad0lBSGFqZXM3YjhZdFh5eGhBREdNUkV3REFUcjdWK0JlMGpBRXcvZzFRS3FVQ2dPMXNVcDlBS3NjQXFBVmpGUnZrQUlDcjM2T3plUWF3aHJXTVQxc0J3RWFLYXFudXZ4cnhES0N3Tm1zZHB3T0FqVERjWTkyWmF3QXNyNXY2K1N4MEFnQ1VUbC8xL2IvQ040Q2N5c3dDL200RmdOOGxpK0cxT3gveERZQmVaaTlsMzFzQThHRG1NT3ovQ09jQXZ2RmtyMlY0QmdDVVREckRjM3ZkOGpnSHdQRGU4ZC95MEg0QStDM0ZUekRzWHVXbEd4d0F1QkhrUkRVOVB3U0FYL00yeSs0bmNBK0FWamhWejRoa0FQZ3ArNzFaZHAvRVB3QnJHNmNLYW5rdUJRRHU1V09XQnl3b0ZlL3dENEMrc0RoWFVrdmZWQUNZelZhMG5pUUFBQnJ1YkZFdC9kUEtPNEM3RGxjOVV2b3c3ajFPQ0FEWEgzYTZyRzQ5NDA2V2F3RC9yTlo3L3BkMmJyazcvR2ZXejB6TGVTRUEwRkV2VjBvYlBPeGpCdzhqdWI1cGdwdkFBSDQ4elZlNWUrenVNdytlQ0wzOG40bXQySGZlbWNRQVFJdGNySzZsK1pSUHY3ancreFZDYS9iV1NTMFpYa3ZITTRESUVyOTlhNFYzRy9US3JMY21qK3JicGI1ek8xOGxDb0NTeCt0Q2ZPcTE2alVzWnVia01RTjcvYWxKSFgvV0QwaWVBWVFyT3NRL1R4Z0FMbndOMEI2ZUFWVFc0d0RIa0RBQTZHZ2xBQ2lSSDNRNXdCTUNBYUJkRlFEZ3QzeW14L0U5UnlJQm9FMGVBUEJyVnVwd2VHNXBZZ0dnQkRjQStDWFRkRGk4YUJJTUFIMWtBWUNmRTZYOTZEeS9FUTRBTGJJQXdFOXBvLzNvcHBCNEFHaXROd0Q4bUVETkI5Zmtyb2dBNlBOQUFMaS9MS0w5RDhBSkVoSUFuUXNGQU9ablp6aklMQklVQUdWM0FBQmFwL1hRdWhRSkM0RHl4MXFrQnpCSDQ1RTF5eVZ4QVJEdHFDTTdnQkhhRGl3a2s0UUdRTmVIU1E2Z2s2YmpDdnlhQkFkQXRDbElhZ0MxdFJ4V3ZaTWtQZ0RLR3VFdUw0QTdXcjRGdGJ4TTVRRUFVWHAvaTZ3QTBqVHNyL2R0S2ljQWlJNzNraFRBSnBmMzVqMjNtTW9QQUtLRFJpNEtORi9HSzRBNFYzZldOdDNKUGZFTzRONm53QXYrUmpUZnU5ZVM3OWtuWVRhQWNhN3Rxdkk3eFZUdUFCRGRqbStuYy9kcmpOam8xQjlLMHdFODZjcU9mR0t1R3ZCN2t3TUE5M0o2WXJCZXpROTY5dTB2bkg3VWlOa0FHamkvbTRxdi9tRElnZ01mQU80bFpXNUhUNDI5ZDI4K2J2VTNMdTNjWkFCRlRoOXBxMFZacnBWVkhBRDNrcnRobE1zTEpBRlB6OTV6eStVOW13eWdjTVhBNnV3N3NEUjg3WlRMUnlZVWdQdkoyRGlqVDRoVC8rMGY2VFYreVo1TDJ2WnEvZ1VoMWhQL2VLcW0rc2FyOUp5K0xWdkxrZTFKVU1sMjRqRFg5Nzgzb250anRjY2tWMnM3Zk82R3RIdzlkbGhHdDRkbjdYMXZaSnRnT3hkSnVUY2JFMy9hU2pMbjlwbTlxK2U5TW56Z3MwOTFmcUo1by9xMUhubThVOFRnc2EvTldienEwNzNIemw3VGNVOWwrM3lBdk8rU2Q2OWJNbnZDMEdmYTllZzNLbWJXNHRXYkQ2WmV2RU9JYWRFQ1lEM0tKMzdXYXdDd0VPVVRQd3MxQUppQzhvbWZLUm9BUktOODRpZGFBNEN1S0ovNDZhb0J3S01vbi9oNVZBTUF0eXVvbitpNW91bTI1ZVVvb09oWnJ1a2NWRzhVVVBUMDFnVEFKdzhWRkR0NVB0cE9RMjlDQ2NYT0ptMzlWeUpSUXJFVHFSR0FjaGcxRkRtSE5WK0cxZ0ZGRkRrNlhKbU9id0VTZndPNG43QWkxRkhVRklYcGNTM3lkQlJTMUV6WDVXSjB5enBVVXN5czAra0dWWjlqcUtXSU9lYWo2SlRhbDFGTjhYSzV0cUpiSG9jQThmci91SjUzSk5ZNWpvcUtsZU02UDZ2S0J4Y0lDNVgxUG9yT3NjUmFVVlpSWW8wMTRnRTE0WW1vckJoSkRGZU1TZWN2VVZ6KzgyVm5BNTlNRTVtWWp3cnpuUHpFU01YWStEMmZrSXM2ODVuY2hBRitpZ254YXQzbmhkaGxXL2FWaUsyN1dVL3RRM1NLcldjb1hDdjVEN1lzaTMyaFQyc3ZwY3hpNnpiaUFRcWlVd2JZS085MnJtWUlBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUNBeGdFQUFnQUlBQ0FBZ0FBQUFnQUlBQ0FBZ0FBQUFnQUlBQ0FBZ0FBQUFnQUlBQ0FBZ0FBQUFnQUlBQ0FBZ0FBQUFnQUlBQ0FBZ0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFLQnhBSUJJREdEOURFU25yQmNTQUdKb0FBQUFBQUFBQUFBQXVFZ2lHbUoyRXJrQ2tJQ0dtSjBFcmdERW9TRm1KNDRyQURGb2lObUo0UXBBRkJwaWRxSzRBaENLaHBpZFVMNVdxMCtqSStibU5HZW5LK2FpSmVabUxtY0FXcU1sNXFZMWIyY3NrOUFUTTVQRTNTbnI4R0oweGJ3VWgvTjMwVUk4Mm1KZTRqbThhcVg2UmZURnJGeXN6dU4xU3kzeTBCbHprdGVDenl2WEJxRTE1bVFRcjljdWppNUFjNHhQd1doK3IxN3RlQlg5TVRwWE8vSjgvWExJUVhUSTJCd000ZndTOW9nME5NbTRwRVh3ZnhPRGUvVFd1K2lVRWJtN05kcGRqQnRaZlBzdjNaWjh4WXFXNlJYcmxlUnRTL3Y3R3RHci93TUl3amxpVEdCdjF3QUFBQUJKUlU1RXJrSmdnZz09XCIiLCJtb2R1bGUuZXhwb3J0cyA9IFwiZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFnQUFBQUlBQ0FNQUFBRERwaVRJQUFBQUEzTkNTVlFJQ0FqYjRVL2dBQUFBQ1hCSVdYTUFBQXplQUFBTTNnRVRVQkI2QUFBQUdYUkZXSFJUYjJaMGQyRnlaUUIzZDNjdWFXNXJjMk5oY0dVdWIzSm5tKzQ4R2dBQUF3QlFURlJGLy8vL0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUN5TzM0UUFBQVA5MFVrNVRBQUVDQXdRRkJnY0lDUW9MREEwT0R4QVJFaE1VRlJZWEdCa2FHeHdkSGg4Z0lTSWpKQ1VtSnlncEtpc3NMUzR2TURFeU16UTFOamM0T1RvN1BEMCtQMEJCUWtORVJVWkhTRWxLUzB4TlRrOVFVVkpUVkZWV1YxaFpXbHRjWFY1ZllHRmlZMlJsWm1kb2FXcHJiRzF1YjNCeGNuTjBkWFozZUhsNmUzeDlmbitBZ1lLRGhJV0doNGlKaW91TWpZNlBrSkdTazVTVmxwZVltWnFibkoyZW42Q2hvcU9rcGFhbnFLbXFxNnl0cnErd3NiS3p0TFcydDdpNXVydTh2YjYvd01IQ3c4VEZ4c2ZJeWNyTHpNM096OURSMHRQVTFkYlgyTm5hMjl6ZDN0L2c0ZUxqNU9YbTUranA2dXZzN2U3djhQSHk4L1QxOXZmNCtmcjcvUDMrNndqWk5RQUFKakJKUkVGVWVOcnRuWGVBMVVUWHhyUGNaWmUyaXl4dDZVdVZSUkJXQkY1QVdCQUVWSXErSWxMMVU2cUlLQjFVVkVTS0lxS2cxQmRCQVFVVWxGNVVxZ3BJVllvZ1NKVzZkTGEzZkhUMkp1Y2tNOG5rM3R6a1BIL3VuVGt6eWZsdE1qbHpaa2FTTEZCWW02bkxkNTNMbEYyblN6dG54a3B1bDZmVHNtVFp4ZHJkME4zK2I3bFhkcm5TZTd2WS9WRWJaWkk4enJYK2o0MGo3OS9RUUpmNnYzc3ErZjZtTXA5enBmL2JrK2Z2S0xtZUMvMWZQWkVjZjFjWEs3ck8vNFdPazl1ejZIQmh0d0V3azV6dXBhMjUzZVgvcWhua2MyOHQ4YmdLZ0ZYa2NhVW11c24vTmNuZjdnNEhqQ1ozQStHQXR1NEI0Qzl5TnhRT3FPOFcvMWNnWjdzN0hOQ0JmQTNyaUV2Q0FRUEkxZTRPQjR3alQ3czdIRENYSEkxcWtoc0FXQUZjZVBkSWQ2aUtIZ0dEWEFEQVN1QzYzZklSSEVuaEFBTEE5ZUVBQXNEbDRRQUN3T1hoQUFKQVI5dHlFd0N1QmtCZTZpRUFYQTJBdzhNQkJJQytCaEVBN2dZZ3N4MEI0R29BSEIwT0lBQ1lzZ09pQ1FCWEF5QWZpU1FBWEEyQWM4TUJCQUNqbkJvT0lBQllOWmtBY0RjQThtQUN3TjBBT0RNY1FBQ3dLeVdXQUhBMUFJNE1CeEFBUERvYVNRQzRHZ0FIaGdNSUFENHQ4eEFBcmdiQWNlRUFBb0JYZ3drQWR3T1EyWjRBY0RVQURnc0hFQUQ4dWhSTkFMZ2FBRWVGQXdnQUk5cWVtd0J3TlFBT0NnY1FBTVkwaFFCd053RHlFQUxBM1FBNEpSeEFBQmhWU2dNQ3dOVUF5SmNxRVFDdUJzQVo0UUFDd0lTMjV5RUFYQTJBRThJQkJJQXBUU0VBM0EyQS9BWUI0RzRBTWpzUUFLNEdJT0REQVFTQVdRVjRPSUFBTUsxalJRZ0FWd01nNzhoREFMZ2FBSGw1TUFIZ2FnRGtxUVNBdXdFSTRIQUFBU0JFZ1JzT0lBREVLS1VoQWVCcUFPUkxEeEFBcmdZZ1VNTUJCSUF3QldZNGdBQVFwNEFNQnhBQUFqV1ZBSEEzQVBLYkJJQzdBWkE3RWdEdUJpRHd3Z0VFZ0ZoZGZvQUFjRFVBQVJjT0lBQkVLOERDQVFTQWNLMElKZ0JjRFlBOGpRQndOd0FCRlE0Z0FLeFFSd0xBM1FBRVVEaUFBTEJFZ1JNT0lBQ3MwYkdpQklDckFaQjM1aUVBWEExQW9JUURDQURMTkkwQWNEY0E4bHNFZ0xzQmtEc1JBTzRHSVBWUkFzRFZBTWlYS3hNQXJnWkFQbDZVQUhBMUFQTE9NQUxBMVFESUs0TUpBRmNESVArUEFIQTNBRFlQQndRbUFKNjh4YU9qaStmMUJBUUE5ZzRIQkJBQXdlV2U3RE41NmZvZEI4OGszT2xwd3BtRE85WXZuZHpueVhMQk5nYkExdUdBZ0FBZ3BFN1hNWXYycDJyZTVQMkx4blN0RTJKTEFHd2REckE5QUo1YWcxY25zTjdwaE5XRGEzbnNCNENkd3dHMkJpQ29XcDhsVjNodjlwVWxmYW9GMlF3QUc0Y0RiQXhBN1lseFJ1OTMzTVRhOWdMQXZ1RUF1d0lRTmZSdmMzZjg3NkZSZGdMQXR1RUFXd0tRdDh1R1RQTzNQSE5EbDd6MkFVQWVTZ0F3S3VickpGRTNQZW5yR05zQUlEOVBBREM5K1plSnZlM0xhdHNGZ05SR0JJQ3VHcTBSZitQWE5MSUhBUFlNQjlnS2dPYWJyTG56bTVyYkFnQmJoZ05zQkVEVFhkYmQrbDFON1FDQXZDdU1BTUJVL0Z0cjcvMjN4VzBBZ0x3cW1BQ0FKM3I2WDdQNjNsL3JIK3gvQU9UcEJBQ2tlcnM1NzJQQ2xqWExGODc1Yms4S1Q2WGQ5ZndQZ055TkFGQ3AwSmQ4LzhyTEJ2MG4rNTBueC8xUFRiaklYdlhMUW40SDRId0VBYUJRMjBzOE4vQmtmK1ZBS2tlN241ampocGZhK2hzQWVTSUI0S1hRU1R4M2IvOUw0SlIvTkh2NFlGS29ud0hJaUNBQXNxamNUcDdvL2tkb3hzZno1NWhuWnN2NUZ3QTVsZ0M0cCtldWN0eTUwMDAwTEVWOHcycm02blArQmVBVkF1RHU0MzhpejQzN3VhQ21zYUJQMlYvRHQxNERoV1VhQlBnVmdMSTdlTzdiaGx4NjlvWXoyOXBSOWlZeVYvd0N3QThFd0MzVjRFcjQyUmF1YjNFZ2U4cFF6UnZsMS9nRmdKVUV3RTAxNFlyOTdjM1BZbk1XczczNFp0ZUxqeVlBL0FkQXUxU2VtNVpTa2NsbzJEL3NzL01kSmFrbEFlQTNBRjdqeS9rYXhtajJQMm5zMzVUOXBhQzFCSUNmQUJqSmQ4LzJoN0lhSHNaaDlhT2dxR3NFZ0Q4QThFeTNMSGFTbDJka1B5dDdWd0xBRHdBRXplYThaZXM1akgvSVkzaCt0dFp4QklEUEFSakhlOHRlNERCZWxHdUcrRE9wMEVJQ3dNY0FET0pPNWNqTlkvNExMdHR2U1ZLRmRoK3QzVytSVGdKTnJuQTVBQzlhbkVYVGdzOTRGMHN2dGkwOUFWVCtTZU1Hb0FsWEEva3l1SXludHlJQWZBbEEzVVQrbDJaaHZpWTRrNHNUSHlFQWZBZkFBeGY1L1grZXM0M3huUFl2UGtBQStBcUE4RU1HUnMzck9SdnB5TnZBb1hBQ3dFY0F6UGZGL0hrTDdoYm1Fd0MrQWFDbm9lOW0zbTNXR3ZFMzBaTUE4QVVBTWNtR0FIaWZzNWs2L0Uwa3h4QUExZ01RZnRCWTVPeGp6bmFxR1dqallEZ0JZRGtBY3cyR1RpZnpQbWlNTkRLWEFMQWFnQjVHWStkZmNqYlV6bEFyUFFnQWF3R0lOcnp2eTFyT2x0NDMxRXBTTkFGZ0tRREdFekFUK2ZiL2xMNzNEV2NFQUpmYW01Zy9yY3ZYbE5IOTVUb1FBTllCRUg3YUJBQnZjRFZWTk1OZ00yZnlFZ0NXQWZDcENmL0xxN21hZXNOd081OFJBRllCVUMzZERBQVpaVG1hQ2pwa3ZKM3FCSUExQUFTWjNQMXJFa2RiRFV5MDgzczJBc0FTQUxxWXpLSkxLc1RlMWpkbUducVpBTEFDZ0xEelp2TW8yYWNESGpHMXlmREZjQUxBQWdBR212Vy9ISDgvWTFQWjk1aHJhQWdCSUI2QW5HZk1wMUp2Wnd3R0RUSFp6cmxjQklCd0FGNFZrVXovRVZ1OE9kRnNPNjhSQUtJQnlINWNCQUNaVFJtYUtuWENkRHNuUWdnQXdRQjBGck9lSnFHWmJrdVJCd1cwMDVVQUVBdUE1NkFZQU9SVXZXNUY3QmJSekNFUEFTQVVnUGF5S0dWb2Y2WFgra2RNTSswSkFLRUE3SmJGYVg0azJreTJOOU1FTmJLYkFCQUpRRjFacEM1MVJVNEVyTEJPWENOMUNRQ0I5cWZJWXJXaE9mQ09ydmxkaHNBbXBoQUE0c3pudUNTTDFxbFI1YjJheU45NnJkZ0dMdVVnQUlUcFdka0svVEhuemY5V3pGK3M3QVBWbi90OGQ2Wnc4ODhTQU1LMFJBNUFMU0VBUktsUVdpQUNrRmFJQUJDazErV0ExT3NFZ0NEdENFd0FkaEFBWWxSSkRsQlZJZ0NFcUUrZ0F0Q0hBQkNpeGRxeC9UOVdMcHd6N2JPbFJ6SnRCOEJpQWtESVJPQmxmSHAveTRmTjc3dFRMbmVON2h2dEJjQmxEd0VnUURYUW1kMlpxbjJaS254d3hrNEUxQ0FBQkFqWkVqUmhiSEdvZEhDZmEvWUJZQkFCWUpIdDY5OVlhSVp2aVI5c0E4QktBc0M4c3NkREwvK3hXa2wzclM3WkJJRDQ3QVNBYVVHcEFGZDFjanVybmJVSkFYVUpBTk1hcXJhY1dGK3YwdjBuTFBOcDZ0a2plN2YrY295dDhGQUN3TFRVTzNXa1BxNWZxOVJoSzV4L1plV2JzVGx2TlJCVzY2WHgrcnNWZkU4QW1OWStwZDMwMWl6VnFxY0tkLy9PZHNHS0w0N21DM1JhMlVjQW1BNERxVzR4NDRaL0F3UzcvMmR3dS9tQ24yaW1rYVY2Q0FDVEtxODBlendQVzhXZ24wUzYvOEpUV0RzUGF4NWNYcDRBTUtubVNyUE1Kek1VdVNyTy8ydUthVHlqK211Y0w5U2NBRENwZmdxckhHY21qeFhsL3N3aDJudCtORTFBcS9ZakFFeHFtdkh3ZW5IOWNXRGFhWmFOSjEvUmEra1I5SmpCYVFTQVNXMVFaUEx5MUoyaDZkWXpVNXNYdWY2Zm5iL2VoenJyRGhtMmUzZ0lPemR3QXdGZ1VvcVlYbStldWxxcFJKbWYzenRGTHRzQXJSM29SN0UwMVJENUdEaExBSmhUbUxmTjVBaXUydmkvOXZIRzNxaHNRMHN5bnM4M0Fxa2VSZ0NZVWdsdm0wdjVhdjhQOCtvYzVYYWV3ZThpSlJOTHN6VVZqT3hoVjRJQU1DWEZVM3drWCszbkVhOXVEVmFYUlk0S0hjemFWdWw0NnhKRFhReEFMVytibkRzeFI4Rk9UWVpPZUFzSDk2RFp3ejZoQzU5bFhJc0FNS1hHM2phcmNWYVA0L2l2Ymd4bGxiWm1iNnNFdUg2cE1RRmdTazk3WndEenJyZzlBdm5rZHlSQVAxRmROSTVuczZldm9NYWVKZ0JNeWZzdEhzZGJmUi9raytmWVh4aGNKMDFWaGhwN25nQXdwVmU4VTZ4NHEwT0x5bExDMkV2ekhRZTcxMGdVa1FEUTFHRHZWd0J2OWQrQWZxMURTNDlXWlFEd3RUYkp6RmNFQWNBU1grRWRBL3dPOUdzMldycVhzdWgwdnRhZ2c4WkdFQUNtOUpHM3pRak82dENNTUw1ZGJHdGwwYjU4clJYamFvMEFZTkV3YjV1Y1o3T1drTTBCMEpTenQwQW9ZUmdCWUVyOXZXMXlic0xjVERiM0Npak8yVnNnT2FnL0FXQkszYjF0THVDcjNROENBRC9aYjVReS9aUzN0NytxVyt0T0FKaVNZb3ZZdUNDdTJ1REM4aVEwcVZBMUpjaWIwdm1qdXJYMkJJQXB0VkFZcmN4VHVUQzh1UlMyZjF0SjAzTzVpOVNOdFNBQVRFbDVlaGZYb1h6OTRibWczNUFNUC9XcGhMejdmQzFVTjlhQUFEQ2w2c3JwK1FJbUkzTjRwbWFzZWpJb2lyTzN3SmJXMVFrQVU2cGc0clBxRVN3ZEpBbGFXcDRIV0V4V202K3p3VUIrZUFVQ3dKU0txRlpvNUdhdDZzRjNsOXNFdkFRbUErVUc4SFUyR2pCUmhBQXdwVkJWc3VXbnByNEJiMnVHOGt2QUF4NFV4cG1CMWxwdElTT1VBREFuOVFFZVQ3QlZMQld2bGVwOXBLRlg0WXFid1ZLWCtBNkJCVmFpL0NNUkFPYTBYSjFwWFpqcEJiQktaN1hQaEN4cDRmMnc1U0Zjb2VkZ1lJT3E1UVNBU1FHWmRxc1k0ak5CTTNUWCs1eVoyQ1QvOVpKaE5VZitqWllaejlQVlZvQ0JjUVNBU2ZVQUxDOE1OY0lOcEpSVENacS9KK1EzRndhU2V4QUFKdFVROHN1UGVwOEM3NGhhRi9vT2UwK0xRbkhIaGdTQTZPL0FXOTl4bW9rQllWOEpXeGNleDM0SzhHelpxcTlBZDI4UkE2L3lQL2tNWGtQVTBYOThHVDFOb2RwWEpRTEFyTFlpbmxtTUxMcktOVlRvK1NJWnNXemR6QVZtb0c4bEFFeHJGdWFhYThOS3Frc1hHSFplRnFzVCtZeCtyVnpYTEFMQXRIcHEvSGV1Zk5acjRVYm9JeE1TWk9GaVNrSjVHYTdia3dBd3JXaE43MXo4ZVh6M1J3b1hLVnVsWnJQMzFpWEpsbWlpZmhaS1cyUjdnR2dDd0x4T3lmN1dyR0NkTGo2T2JFWnpTaUlBekd1TzN3R1F2OWVPUEhWUHhMWWhJQUFFcUxQL0FaQzNhVXdLUkN4RXEzVW1BQVNvakEwQWtOTS93b0tQamY3RmE1VWhBRVRvcUIwSWtJKzBoZDREajJzZE9IOVVJZ0JFNkF2Wkhyb3dRZkVpQ092NHAyYUZMd2dBSWVvbzIwWi9UdXJWOEVhcWNIQjR5ZGFmYmsvWEtkMlJBQkNpQXFteXJYVDVNbHVIVWdzUUFHSzBTQTVJTFpJSUFERjZKakFCZUlZQUVLVFFpNEhvLzR1aEJJQW9UUmJ1bldzbkQvNjVlY3NWS3dHWUpCRUFvbFJIcUdkT2Z0MmowdTM1bmVKTiszNmZaaEVBZFFnQWNUb29McVEzVDNuaVFPRUJmMW5oLzRNU0FTQk9id3Z5U3Z4NGNPL24ySjNpQVhpYkFCQm92MHltRUtkc3dQYnU5dlNORit6L3pESUVnTWdHRm90NCtyK3RzYUtreERLeEFDeVdDQUNSRGRRU01QYlRQc2czMjFTaEFOUWlBSVFDSUprK0JUQk9OejNySTRIKy8wa2lBTVFDME1Da1I2NHdiTlh4dGpnQUdoQUFnZ0dBdG1EamtQNkI0emMwUTVUL2Y1VUlBTkVBUEdIS0kyekpXYmtQQ0FMZ0NRSkFPQURTRGhNT1djdllSa3lLRVAvdmtBZ0E4UUNZbUJOTVl0NnFxWi9ONWdFSmdDemZhYnNNTytSTjVrWkNUZ3J3LzY1c0JJQUZBRWgxaklZREwzQk16UFlYRUFTc0l4RUFWZ0FnVFRmb0VaNk5Yc0l1bXdaZ3VrUUFXQU5BZ1F2R1BNSjEyTndvMDhuREJRZ0Fpd0NRdWhueXlIYXVOcXFhQmFDYlJBQllCVURRWmlNZTZjTTMxalQ1RHRnY1JBQllCb0FVazI3QUpiRjhiU3czTitVWUl4RUExZ0VnVFREZ0U4NU4zOTh3QmNBRWlRQ3dFb0M4L0FzRnozTTIwZENNLzQvbUpRQXNCVUNxeGIxTWFDTm5DMlpHZ2FtMUpBTEFXZ0Q0ZzdXek9Sc29id0tBZmhJQllEVUEzTmxoOHpqdEY3TkpIaGdCZ0NqaUdKOVhlSmZvNVRQcy8yTVJCSUFQQUpCcTh5M2xXTVZwUHR5by85TnFTd1NBTHdDUUJuRDVaVDJuOVllTUFqQkFJZ0I4QTBEUUVoNi9IT0MwM3NtZy81Y0VFUUErQWtES3M4M0NRTkJvWS83ZmxrY2lBSHdGZ0ZUd2IrdnljNVlZOHYvZkJTVUN3SGNBU0ZFYys0ZCt5bVU1MjJrai9qOFZKUkVBdmdSQWVwQjkwbTRubCtGbVJ2eC8rVUdKQVBBdEFGSjk5cTJocS9MWW5XY2s2YlMrUkFENEdnRHBLZWFwWVo0dGV5T1NEVXdCUHlVUkFMNEhRT3Fjd1JxaEtjVnV0RGUvL3pNNlN3U0FQd0NRMnJBdTQyRFBDbzA0eSszL2xEWVNBZUFmQUtSR1Z4bFhCaklmM01DZmVIeTFrVVFBK0FzQUtlWU1tNWYrWUZ3WkVNdTk5T0JNakVRQStBOEFxZXdoa1MrQm5QdDUvWCtvckVRQStCTUFxZEIyTmsrMVlMQVZzb0k3NDd5UVJBRDRGd0FwN0VjbVY4VTMxclhrK1piWC96K0dTUVNBdndHUVBDT1pYdHpKclhUc01CdzRybGdET01JakVRRCtCMENTbXNVeFJRTTZhQnJKOXgybi84ODE4ZGtGRWdBNktyYVJLV0F6WHVPSlhmODRwLy9YRlpVSUFMc0FJSGxHTWIwR1RtQ3ZnWkQzTS9qY256SGNJeEVBOWdGQWtoNW5lZzNJQzZIUDl2Q0J2TnRDbkgzTXB4ZEhBRENvT09OV256dDc1L2V1V0dZMDkzTFFSVVVrQXNCdUFFalMwNHo1NGluTFIzV015WG05UW81OFZWLzU1bC91NE8rUkZyNitNZ0tBVGJsSHM2OGJ5emdmbnlFYlVjcUluQklCWUU4QUpDbDZyV3l4ZnE3b2g4c2lBTmpWNGJTVjdqL2QzaThYUlFCd0tPOHd5NDZZdWpnc3IwUUEyQjBBU1FvYmROWUs5NThkSE9hdkt5SUFPSld6OXduUjdqL1JPNmYvcm9jQTRGWkkxME1pM1grb2E0Zy9yNFlBTUJJZGJyTThYWXozMDVlMzhmajNXZ2dBWTRyc0srQTBzSjE5SS8xK0lRU0FZVlVaWTJyMzU1TmpxdGpoS2dnQU02K0NKdE9QR3ZQKzBlbE5QUGE0QmdMQXBFcDNubk9Lei9tbjVuUXViWi8rRXdBQ1ZMSG5kK2NZVTMyKzYxblJYbjBuQUFTcFlMMHVZeFlmUUxjWVNqdXdlRXlYZWdYdDEyOENRS2l5VjJ6VmE4aklDVE1Yck42MDU5aXhQWnRXTDVnNVllU1FYcTBxWnJkcmp3a0FsNHNBSUFBSUFBS0FBQ0FBQ0FBQ2dBQWdBQWdBQW9BQUlBQUlBQUtBQUNBQUNBQUNnQUFnQUFnQUFvQUFJQUFJQUFLQUFDQUFDQUFDZ0FBZ0FBZ0FBb0FBSUFBSUFBS0FBQ0FBQ0FBQ2dBQWdBQWdBQW9BQUlBQUlBQUtBQUNBQUNBQUNnQUFnQUFnQUFvQUFJQUFJQUFLQUFDQUFDQUFDZ0FBZ0FBZ0FBb0FBSUFBSUFBS0FBQ0FBQ0FBQ2dBQWdBQWdBQW9BQUlBQUlBQUtBSDREdWtTUkI2aDZRQUpBc0ZRRkFBQkFBQkFBQlFBQVFBQVFBQVVBQUVBQUVBQUZBQUJBQUJBQUJRQUFRQUFRQUFVQUFFQUFFQUFGQUFCQUFCQUFCUUFBUUFBUUFBVUFBRUFBRUFBRkFBQkFBQkFBQlFBQVFBQVFBQWVDdGpNTXJwbjM4YnI5dUhUcS85dFlIbjgvZGRvVUFjQTBBS1J2ZmU3cFNxUEtpSXV0MS9mSTRBU0FNZ0NQYUpucXlYZmRDVFNQVkROekozU01hNThJdGx1czJMNEhGU2p2TXdCaU9aMUFCeE1ZRVJ3Q3dVOXRFS2JhYjFGSFRTQmxlNzU4ZEY2TjdjZUZkZnRFMzlDMVd1eUY3WjM1RlRHUTc1UWdBMXVyWTJNTnlqMUx2MDdSUmdNLzlHNXNIczExZitiR0pPcWJpY3lCVnMxOWw3czRReEVTc00xNEJDM1ZzakJidzVndmhjbjlqaml1TS9DUkoyMW9yck9aQzVnNVZRU3g4N2d3QXZ0Q3hVWS9sSG5YVE1aTE1mTGQzTk9hOHhxS1RNclRzZlluVjY4TGFvNk9JQWM4Wlp3RHdzWTROejBXR1lWSmhIU1BuR0c5MjBxQmcvcXVzdTEvRDRrWE1ZREZXQUQ3akdrVUVIZ0JEOVl4OG8yOWpnNTZOUTJ6M2VtMTVRNWVaNDhOMDNPWmpXSzFkakFBMFErcFBjZ2dBcitvWjZhaHY0M1U5R3p0WTduUjYveUNqRjFybk5HcDFFbFpuRkp2LzQwT1JKK001aHdEUVNjOUkvZ3hkR3lYMWJLeGo2RWpjb3lhdXREaUsyT2xzWmdZM3N2dzlVcjJ4VXdKQnpYV3QvS3BuWXB1dWljWDYvZGhhMHRTbDVwcVBHYTZMMUFpK3hBUkFaNlQ2VktjQThJaXVsVGYwVEx5aGEySzIvb2RrRHBQWEd2UXBZbmtzVm1NK2kvOHpJeEY4empzRmdNcTZWcXJxbWJoZjE4UkV5LzJQZlpkcnhMci9qd1dBMzVIS1RSd3pGMUJNMzh3SmJRdDc5UzJNOW9IL3BhQXBzSEVzcWh5WnlYQjcza1lxLzg4eEFPVFdOek5GMjhKd3lleGJaRjBPSVpjYjlBMWYvN1l6M0o2SGtFanlCYWNBa01wZ3BxVzJDZjE1RzZtWHBvRnpSUVJkYjloaHJpZlVjUDNiOHk5UzlYSEhUQWVmWXhsaEo1bVlUNzZwNXpYSFdjMkVYWENkZEo0eFNtMzkyek1GcVRyRE1RRDh6V0puaFphRnNRd0dudEl5OEtGdTlaQXlEVi80djlpU0h2MkczdU9aenN0Mlh2ZjJ0RUE2ZE1reEFQek9Za2Z6Q1Y2WHdjQ2pHdlczWk5lc212T0ZuMDdlRGtXbC9yT2lZNmgyUThGYm9CQURWdnBydmJ1VGlPU2tQT21jaktCVkxIWktheGhBSTIxWjlUQmUvM0pwcllwVkppaisxODZQS2FmWlV2bDRqa2lsYnBSN0tWTHhTK2NBTUkvSjBENlpQOWFlVlJYdytzOXFWQ3UwREJveUxDcWsxVlJYb01wclNObUNlbEh1SG5DOTBNdk9BUUFhNWFnZnMyTTRadHVnNzhwSTdsSFd6UmZIS2JqT1NjM281US9xQ3V1eHNsdDA3azV4N3MraWdBTmdORkJ0b09vdnNleno3VVdnTVYwdXJQcUpuR2puUGNQUi84KzBBUnJ6aHNWUzFma0syRFBqSFdQNWtyTWRCTUJnb05weTlkZ0tmZWJOVkwxWFA0RjZrb1pVNzRNUDU1WnBkWHVCUnVMSUxQYU1wUnFHUWx3NXJqb0lBT2d0ZDBnZG1KbUgxVytwR2g5OUR2VUVTU3U2bUljM3NxK1hwM05kTWV4dUNkSk9WYXJGLzFFYmNBQThCMVE3M1lvNWtxUE91ajA1RGVySkViajZlMmpYWDlYcmVFLzhzdFhaQjZsNWthSmZhU2FuQi9GL1BRWWNBRTJCYWxmZlp4NHZ6MWNXakZhL0ZHN29EL2d6dXlEVzgyYnBlaDFQYTh3VHVzYldMYlExa0MrYjg1cVRBSUNlY2hsQWNHQXpYRjExQkZWditXdW9KeHZCMmhPd2pwZGdXQUY0cVF4V085dmZ6TW52RVZxZy9SZXU4MS9aU1FCVUFNWTQ4Z1gxSDk4Q2F5ZUhLY3N0aGhmamdDTzZ0Q2pKeUpOWno2blFlcllFYkptWlJycFRDakpBbWVjb0FJQVBwUHl5WEpabFpBVkZ5b0t2eWo5QVBRRW5hbWRqL1g2SVphWmVsdXVnczFjWFdmK2JwVGU1ZzZTNTRoMEZRSWk2Vmlud2NNR1RVTzJYVk5OeHNyd2M2Z21ZVW9BdHVaRitac3ZYL0JXOThGSE1zTVZ3NTBzL0t6c0pnQVNnVmlWd3RjZzBLSkU3UHhCWitSSHFDUlJLWElkMSswbkdqSDM1YWN4Q1RmV1VRd2p5SVhnS3RZNU1VbnpyS0FCT3d0R1JqV3dmdjJ1Z3dSN28xNkZBN1RleGJyTXUyWkFQWUJOUndlcUJPcFowOEFWbnBsdnVSRWNCQUYxbGcrc1BCdlhVZXg1Z2ZWOHZWYUZVV2Y0TjZzbHJISy93QjJWbXhXSlh2a3BWZENwU3NqVlBrUHk2bnBNZEJjQXZ5Qk80Q3NzOVZTZVVOc2RtMzE5VVY3NkdSWE5Ic2dNd0VidHlkUkxpV2VScGtUZU5MMTkrZ2JNQWdDYTgyMENqTzBrYW9LcjhwNnJNSjlmLytnZlVrMmZVVFMvSGVuMllIWUJ6V0pKUVhYWFora2pSOWJEcDg3RHBQRW5PQW1BMjh0OEt6UEpYVjFWV0R4VnY3Q2F4RCtySlkrcW0reU9kcmlWenFBbGlKRVQ5cHY0RUtUb0l0andMTHQxZWRoWUFVQ3p1UmdMWWRpQytwc3FEZTBKWnBNaU52eDVrOUdwMXBOT2Y4QUF3SGJ2ME5hcWl4NUNTVmRnblNTUXcyeUNnQVJpTy9FdWtodXBmZTZvcVV0WUp2ZEhSNm9uQWJPYmZBTmV0WUlrQndFei93MGhSY04xTEdyenBUWGl5d3dEb0I5UjZENWtqVUk3azFkK0tOMVBsVGtFOVVXL0hnSzI2elNkekNjc1FiS0F1T2hJcENpN3pSTFpPMHMwaUREUUFnTUdlTkJiOHdsTS9LOStCbzRWeFVFL0NXT05zR3NsSG9OcGcwV0IxMGYxSVVYQjZ2eTljZHJIVEFJQkM1Sk52L0FEc3JSTVVwNU1QWHVubW42K0FBVGZWZERLeTVncU1HSENtdE4wVWtMVlRDUzRabHNJMlNYYmptekhGYVFCQW16TGNUS21DRm94NHI2ZStxdnFPNzM5cmtoL3NpbXArRjFzT05vTVBBRFN0SFVoQmVZdDk2Z0ZaTC9PQzdEUUFvSFY5QzdHRTJKZTlxaTZCNHNBM0pnallSbHJZY3BBZGZBREVZZGUrVlYxMkIxSzBuN29vc3R4cG1lTUFLSTJHVVlHdFl5cHFKOXZmeVJvQ0IrWjdsZWtjV0JRL2hROEFkSG43U3ZicG5jcHNUOGJyQTlSVXh3R1FENmgxYXdmV0djQXZYak5uRDJEaFhuRGViUlBiTS9aV0tJRkgyTWZkYk1adm5ydURWNjlVUjNqdThFWFphUUJrUWgvak85RzR5WndzVlUraGNZSThMTE16MkZ4K05DOEFqUkJEbjNJa0VLakdIVXZnY2lzY0I4QmxxTmJ0akRvZzVhNnpWcWcwWjRMR1UwVTFpLzREMHVYYXZBQThneGlDSnFBemtaRm5POTFwenB1S1NITWNBRWNsL0VIZlJmMUwxbDIvWDFEKzJGSWp5MHk5cGNvMHBNdk5lQUY0Q1RFRTduUC9NbHkyWUNaVGVJbGxkOWtBQTJDbnhoY2JsTjE3VkdQd05mM09MK0NDdW84WnczSnRlUUZBSWpZMzV6UlYraEVwck5nczVoKzQxR3JuQVFBR1BHOW5TcC9XZkZuK3Bab3JPcXM1MW41WDBUSzJKcXdITHdEREVFT1BnUkgrZkhCaFJRNGh1TGhKS3BEbVBBQ2dnSHpvblIrajFiODlqMDhqM3B1QkIzZGs2YXRvR1Z1cE1aZ1hnREU4QVY3MWkrdVdGQnMvdHdRTGRaT2RCd0MwOWlYaXpvK3ZxSDhyZnJlbWF2WFloM2QvcXN6eS9td2hDZ0JzSHpmNGhiMElMaHdTcnozTmVWTS9PUkFBYUsvNEVuZCsvRTVqRUpDdVdteTNYek82cUhvbGR4VDFDc0EyZjREelBKS1F4UjVMOVdjQ0M2VTdFQURvMytkdXZPODhFTks3c3lwbWsvS0grKzhacmNVeXVuOWQxQ0FRZWFoamUxb2dHNUwwemxwbWtBazBBd3dBYUU3Mlh1cFhOZldQZmJCRWtvRTYyWlIxRkMyL2ozVDVjVjRBc0ROaGtIVHZiK0RTWGxIdWFtQ1J0VTRFQU5vcnZyN1dTTDBPbG8rZFpZMWRRNVo0K3lSUmdTQXNNeHladWIrS2JET1c1U1RDMCtCa1JtU0dFd0Zvb2ZrL0NBUkVjOXlhRGtsUXhzb0xaN2s5MElwenFhU2k1VzlGaFlLcklZWitROG8vQ1JmUEVxaUNqeGw2UlhZaUFQV0FTdmRXU2x3Qk1xTnZ6Ykt1MEFvU2d5Y1EzTWVXY2lVVjVRVUEyY2RKT3NDWFJwcGxrTm9lTExEZWtRQkFYMnhaa2g1cXFuK2RBRStyTGRiSk1wSThpcFozSTEzT3pqa2RmQm03ZG13MzV6ZzQzei9pN2lNTVBpaTBTSVlqQVNpdUhVUUhkcEM2bFJWWlZmSFhYSW02Q2RXS1JkV25zVDV2NHdNQU82OHFHK3F3aG5DRnV6dkd3ZnVLdmlvN0VnRG9xempMQ3FEVjZsL0wzZmo3dVNDdHNCdjhpYTlZaFl2dVVqNkZENER4aUJuOHNGSmtXNUwzdFRMbHNTMU9BaDJBTkoyb2ZSS3dpOStORFpibkt2ODRVMzkrVG5tNFh6alM1KzU4QUdCSCtsUkdhL3dMTHlWb292bUVLSmJwU0FEaTlDSW93SUIrR1RCVDdQSGFkcnM3MkpmZkZXM1hSdnI4TUI4QTJQcWlUbmdWZVBPM3ZMZmZHV25nWmpLdnk0NEVBRnpGTlVrN1ZQejI5VDlIS2Y0V3l6RFJwNHlrWTN1NGg2YnkrRDhOTzJ0a1BGN25BN2pHN2x1L2J1SDZxQXh3QU1DOTRyTnV0TGtIZkZRZVV2NXRuSmRWZU9PSGhheDNhanNQQUw5Z1ZqWnhZbjkzOEFIbUE1ZklkQ1lBcTZGSzMydm4zTjZYS1U5Vy9zMTdPZDhJc0M4ekZXMmoyd084d1FNQU5oV1VYV3NWOTROZ2xkdUhpSUhienZTVm5RbkFmS2pTanpvRHVyL2sxb3EvS0xiMEdNZjJURWIyWVpXaU10bjluNGtsaFQra1ZldGRzRW9GallTMnpRNEZZSXJ1dzNPdSt2Y1pHUkhBc0VEUDZyM1ByRHNhaVBYNkYzWUFObUkyQm1yVitoT3VjM01rZXdENnBaVHNVQUErMEJnTTNkSUZkZDU0RDlWSnNZckZQTFBZWExJTTZ6VkhTa0J2WXhEQk9aOUwwRWp4QUtjQ0FJN0VqM2dWVVVlRHE0M1dtZWRad09iV0s5ajJMdm1adndNeWlpSW1kSTRDR1lnUFBsNkVmdG5xVkFEQUUxRzgxd0NyRjFRRzVkU0prcTRBKzZMZVd3VmIwNk85RjJ0V3pjRXM2SndLdXhtc2RITkxnZkxBRDJWa3B3TFFGcXFVeFBhV3ZTZmw0bHI0Z0pZblplWkJRRm5HQ2FHVUtNekNRaU5qeDl4cHNud1crbUdRWXdHQU5rOE1Wa1Jhd3ZVYXlhZk1sb1pQazYrbi9oNUh6eHNidzNhejBSTUxJM1MyOGtKVy9teEhYbC9iSFFzQTlDV1dWMUhtS2IxR1ZMdW1nTnVFUVdlUW82YnpubU81MTVjaXNQcjk5YXF1QWF0TmdLT1k1V1RIQWdCbDhCZGp6TjI2cSsrVVZvK0N4VXF6VCtVeXpnZ053R3BuKzBldmFub0JaSmhTdzJ4a0tyQUFLQXpVcWFnb2MxaW5qUnlxYlhuaDQ0anpBKzNYd0l4Nk51amY2alhvaWFOUDZGY0daeXlqNUhnb1BMbkx1UUNFc016R2FaL1VDUXp1NHVIZ0xORCtYTlJxeEY5NmQzcC9QclR5Y24wL3dVZUNudm9aanhBNkVZQkU5R01vcTE3UmJrTzlqWHdHWEJBWW1LV1hRczFHbmRidSszbWN5Lzh3K0VsOTFNa05MWUFXR3I3bFhBREFIZjJhSzBzdDFtd2kyeG0xWFhpSzlpelFnNDl4d3c5ZDAvd0NySS9YWkVyZkJMK0ErejBHL1BGUDV3SUE3b2l2V3BwelRmTjA3enFBWFhoMGZoQW9lVlhqSTdQQkdiem5aeHZ6dkpPWTU4RnlCZXVQaVp3RUFMaGppbnBSWmF4V0V4OHlaMnFEWDlORE5Vd1hYSVNPL3lJMUhrbHMvN0h4T1JqdjRkc09CZ0NjamxFblA0M1VhZ0pLdjRjM1dWd0xQc3BqdEl4M0JjOW55bmhINjhSNnhnVWN5Qkp3dGZZNkdBRHdJQ1gxbUdlYlJndmdRaDdZcWZELzg3NmNXaGRRYnBKcWkvTEVMeC9XcWxFMm50RlRNOWx1NFFPeWd3RUF6OThkclk2Y0Y4UmJHQUxaclFzV25RVjNZcUpPbUtIZDZxd3plM3Q2NTlNZWsyNWc5ZFRGWUtaYk9NekpBSUFyZEQ5VGwydVB0N0FGc3ZzWVdCUTdEYnE1M2xVVWJkWnR4T3dOMnhaKzNMdGxKYjJ5ZmRoZDFaanBGdjdsWkFEQWZSTm44and0aTRMcFcvQ0s3VkhZaUw2d3VBdXVtY1R1cW9rc0JxdklUZ2FnTTFOb0g0a1gzQlNjdk5PTy9XMmhtUnJFcmFpekhLNDZIY1JnY2JpakFYaUd0YzZEZkExMDVoeWU5eEowdWZmdDQvSlZYUWFUQnh3TkFMZ2pNcFJOaDUzdkZBNW5ic0JuUWVCcmRaS2JDTG5ha0ovNWZEVlczMlExMmRFQWdHYzJRSE5mMlA2S3lDR0s4QjQ3clRRbUpSNFZjTEU1VjNMNjZyQyt6WkhPQnFBTVZPY1E5QytLSEw3K0RXd1gzcnV4b1VaUEVtSk5YMnY0Qm01bnhlZ2FQZVJzQU1CUDZqT3N1V09TbFAweWJCZmV1N0c2VmxldW1YMEw1Ti9HN1N0a0lYaldDU25aMFFDQWU4VkxZQ1FOWHV6VGhPc0RxN3gyanM1cnBxNDA1aUMvcjdEam9iV0NZbzRDQUQ3ZENmeXloOVA4Sm5KRldRdnIzTHBwSWNZdnRFZXliRVQzNjVnOTdHd0Fqa0pWOHNCbFMwQ3MvTXN6MVNybDBMdDN2NVl6ZUpsaGMyVmpHcUp0dDRic2JBQjJRVlVpMldOR05manlyU1RkQlQrSi9UMUdyckxkU1lQK1I3WUR1cXN4RGdkZ0hUai94djVQUFlJdjZWbzZyMy83ZnEvQ2ZZMlYxOG5HVlZMVDlGR0hBL0E5UitnRE91bDNEMlo0cy9FM2F2cFhmTytCTXBQU1RQaGYxaHg1MXBJZERnQjBMaGl3Z09lV2FyRStLMlIwK1RWYmVuWGFGNldacjYvNnZIVFpsTlpyV1IvcmRBREFienRzcytiSkRaUWFoeG8rQlBlR05WS1R0dWdabGcrQ3FKZlh5R2FWVVFpM0gzVGM2UUNBUnkwOEs1c1hNbnU0bE4zQ2hjL3JhdVpyaERZZXUwOFdvYTU0RzdWbHB3UHcyMlJBYXdUYzFlVEpvUDdoTW5KMXlXdVZzWC85eGZHeUlPMmZqR3F6NHdHd3Z5NXYvWHBZeHpxVlN0em5rWUlpb21QYjlCbys1WWZmanRxNnl3U0FOVXBNRFpDT3JpQUEzQzE2QWhBQUJBQUJRQUFRQUFRQUFVQUFFQUFFQUFGQUFCQUFCQUFCUUFBUUFBUUFBVUFBRUFBRUFBRkFBQkFBQkFBQlFBQVFBQVFBQVVBQUVBQUVBQUZBQUJBQUJBQUJJRjRyeUNHK2xyMnlndWVTUTN5dHViWUNZQnc1eE5jYVp5c0FCcEJEZkswQnRnS2dBem5FMStwZ0t3QXFrRU44clFxMkFvQjdzM09TU2YxbEwvOGIyZWlPWkVhamJRWkFUWEtKYjFYVFpnQklxOGdudnRRcXUvbGZxcHBCWHZHZE1xcmFEZ0RvQkJpU1ZacHBQLzlMaFk2VFgzeWw0NFZzQ0lCVVBaRTg0eHNsVnBkc3FmYmtHdCtvdldSVGRVOGw1MWl2MU82U2JSVWJSLzZ4V25HeGtvMFZ0WkU4WkswMlJrbjJWc3U5NUNUcnRMZWxaSHQ1T2kxTEprOVpvZVJsblR4U1FDaXN6ZFRsdTg1bGtzdEVLZlBjcnVWVDI0Ulo0YXYvQndSTmRRaXlhYmx4QUFBQUFFbEZUa1N1UW1DQ1wiIiwibW9kdWxlLmV4cG9ydHMgPSBcImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBZ0FBQUFJQUNBTUFBQUREcGlUSUFBQUFBM05DU1ZRSUNBamI0VS9nQUFBQUNYQklXWE1BQUF6ZUFBQU0zZ0VUVUJCNkFBQUFHWFJGV0hSVGIyWjBkMkZ5WlFCM2QzY3VhVzVyYzJOaGNHVXViM0pubSs0OEdnQUFBd0JRVEZSRi8vLy9BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFDeU8zNFFBQUFQOTBVazVUQUFFQ0F3UUZCZ2NJQ1FvTERBME9EeEFSRWhNVUZSWVhHQmthR3h3ZEhoOGdJU0lqSkNVbUp5Z3BLaXNzTFM0dk1ERXlNelExTmpjNE9UbzdQRDArUDBCQlFrTkVSVVpIU0VsS1MweE5UazlRVVZKVFZGVldWMWhaV2x0Y1hWNWZZR0ZpWTJSbFptZG9hV3ByYkcxdWIzQnhjbk4wZFhaM2VIbDZlM3g5Zm4rQWdZS0RoSVdHaDRpSmlvdU1qWTZQa0pHU2s1U1ZscGVZbVpxYm5KMmVuNkNob3FPa3BhYW5xS21xcTZ5dHJxK3dzYkt6dExXMnQ3aTV1cnU4dmI2L3dNSEN3OFRGeHNmSXljckx6TTNPejlEUjB0UFUxZGJYMk5uYTI5emQzdC9nNGVMajVPWG01K2pwNnV2czdlN3Y4UEh5OC9UMTl2ZjQrZnI3L1AzKzZ3alpOUUFBRm45SlJFRlVlTnJ0blFkNFZGVVd4KytraHlRbUtCQlNLTExVQUNrUWxCWUpoRUFBTjdEQ2duUkVJQUZFbWtJRXBPcUNJRVZFT2l1S0xOSUZTYWpTVllwQ2tHcFFRYnFoaEVDb0labUZCREU0NTg2OG1jeTh2TXo1Lzc1dnY1VjczcndwOXpmbjNIZmVteGNIWVFPODJzNU5TazdOMXJNajdlRENCcUp3NFdEMVBUcDJUcnk4dEdlemtPSTZ3UTZmMEs3YkQwZnlGaUQycDgrYnV3ckdWTnZTaDdFQVpYZXRDUkxNY2Z6a1E3WUNOTmhmWHdBeGVBaFRBZUkyRjhQc1AySkNPNVlDZEpqdGpMblBRZmRaQkVNQmFzN0h6UCtKNjVySzdBUW9zZG9kRS8rRW91dDl1UWt3c1JTbVBlL3gwRG9QWGdLRWRNYWtQMFg0bDQ2c0JKam9nRGwvbXBkbmNCTGdoU2FZOGI4VFA1U1JBSzlndmcwWi95b2ZBVnBpdW9sMndNS1h1QWhRc1RLbW0yb0hmRldGaVFDMU1ObDBPeUNwSkE4Qi9ESFhoYlFkQUFGc1RNMmxqaHdFOE1OTXkyanhDUWNCdktuRFlEOGVWREx4MmNRbE1CQ0F1djR2L1JJUFVrMTlPUDlwejZBUEFJeTFBeHBBQU5hNGFMZ2RBQUhVd0dkOVNRakFtaktKSGhDQU5UV1dPVUlBMWpTZkNRRjQwK3NkQ01DYjl6dEFBTjd0Z0U4aklRRHZkc0RxSUFqQXV4MlE1QWNCZUxjRDFubENBT2J0QUNjSXdKcG1NeUVBYjNvT2d3QzhlYThqQk9EZER2aHZRd2pBdXgyd3Fpb0VRRHNBQWpDbWRLSW5CR0JOMkhJbkNNQ2FtRmtRZ0RjOWhrTUE1dTJBVGhDQU53c2FRUUMwQXlBQVk3elgrME1BMXBSSzlJSUFyQW5WUURzQUFoUWtUV2REQU42OFBnSUM4R1pjWndqQXZCMFFCUUZZNDd5eUdnVGczUTVJOG9jQXZOc0JTVjRRZ0RVaEs1d2dBR3VheklFQXZPaytFZ0x3Wmt3WENNQ2IrVkVRZ0hjN1lGVjFDTUNhWjVJQ0lBQnJBZ3ZtNmdBSW9KMTJ3RW9uQ01DYTZMa1FnRGV2allJQXZCbmRGUUx3Wmw1akNNQzdIYkF5R0FMd2JnY2tCa0FBM3UyQXBHY2dBR3VDVnpoREFMUURJQUJqdW8yR0FMd1o5Um9FNE0yY2FBakF1eDJ3SWhnQzhHNEhKQVZDQU5ZRXFOVU9nQUFhcGZwS1p3akFtc2J6SUFCdnVvNkJBTHdaMlIwQ01HOEhOSUVBckhGYUVRSUJXT09WVkFvQ3NNWS95UnNDc0thYXJkc0JFRURqUk0ySEFMenBNaFlDOE9iZDF5RUFiMlkzaFFDODJ3SExReUVBNzNaQVlpa0lnSFlBQk9EY0RsamxEQUZZMDJnQkJPQk41M0VRZ0RjamVrQUEzc3lLZ1FETTJ3RmhFSUExbm9tbElRQnIvR3pRRG9BQWhZbXFxMTBnQUdzYUxvQUF2T24wSGdUZ3pmQ2VFSUEzTTV0QkFON3RnR1ZoRUFEdEFBakF1UjJ3M2djQ3NDYklpdTBBQ0ZBWWlmeXZEZ0t3cHVNYkVJQTNZNHRCQU5iNHZBY0JlTlB6V1FqQUdvZnFFSUEzMVNDQVJ0QVh6Tk5XaFFBYUlmMXFnVHl0UHdUUUNqOFd5TE82UVFEZUF1QXdVRFBzZ1FDOCtYbzdCRkNES2RlMVNRZjlheGtRUUFXS2VHc1RGM0Y2RUFUZ3pieC9YNEVBYXJDbG1kWTRsL3ZDVmxSZERRRlU0UHdHclhIcjhTdExmYVZTaDhuYmY3WVJGNGpQUXM5UkFDMlRzdVN0aHBWdHhHRGkrWFFRQURBVklEaVNvSDV1akFwRlZzNEpsU1ZqdVIzVmNDb1VEZ0cweWNSdEJPdHlZMVJvVzBKT3FCc1pLNWtUbTArRkh0K21PZXcwUlVjSXdBWFhNaFJlRUFCQUFBQUJBQVFBRUFCQUFBQUJWQ0lqblNJM1JvWnU1NFR1a3JIc25OaE5LblFUQW1pVE5qNEVaWEpqVk1pblQwNW9BaGs3a3hPTG9FSVJ1YnM4VHA0R1RJUUFYRWduVHdPZWhRQUFBZ0FJQUNDQWVyUzdwRFhLUXdBMWNmTzluYXdoenZuNk9rSUFkVmtXb3lGR29BU295ZnoyRDdud3BZYUllUFNLMnUrQUFPcnd3NlBQdkVnN0RWRXpSNE5URUFCQUFBQUJBQVFBRUFCQUFBQUJBQVFBRUFCQUFBQUJBQVFBRUFCQUFBQUJBQVFBRUFCQUFEVzVoV2xtTGNBbXorSno5WmhwdmdKTUYxZmlJbi9HVkxNVklPdmgvM2FHdkplSnllYThDTHozYm8yOW1HM1dSd0ZINnI2Wmdmbm1mQmlZL1hGUUlpYWNkUi9nN011dnBtTEtHUXNneE5JcW4yTE9PUXNncm5XUCtnV3p6bGdBSWJZR2YvQUE4ODVZQUhFbm9kWVBtSGpHQWdpUlhIdndiVXc5WXdGRTFwU3FHekgzakFVUTRuUk01eXVZZmNINWVvQXZxbnlCNldkOVFjaVZ6azFQUVFEV1Z3UnRxallsQ3dKdzV2YmdGNU1oQUd0K3JKVndCd0p3NXNFSDFiK0JBS3o1dFhIM2F4Q0FOWjlXK1JJQ3NDYTEvY3RuSUFCckVxdE96NFlBbk1ub1gvY3dCR0ROM3BvajdrRUF6bVMrSDd3VEFyQW1KYkxYZFFqQUdmMjhvSlVRZ0RVWDI3UTZEd0ZZc3lab0ZnUmd6WTArbXlFQWI5SWhBR2VjaHJ3Q0FSaFRZOThIRGhDQUxVVW03UXZEVVFCZm9nKy81U2dnQUZlZSsyeFRPV1p2R1FMa29jUHhMdXplTXdSNFFwbWt4Y1VGQk9DS1EvK2p6VmkrYjB4OUR0Vy9uK1loSUFCWDNONy84UVd1bVErekwwU0RROE9jQlFUZ2lzL2NiUlVacjMzWXozL3JZejExQWdKd0plQ3JGWDY4ajM1WXYzdGQ3Mk10dVIvK2NuN3pWWGJOZkVaQUFLNjRqRXl1aHlVd1h3SHFIQnpqZ3Zsbks0RFhqTjFCbUgyK0F2enpXRjhjQVBNVndIZnAya0JNUFY4QnVoOXZpNG5uSzBENXJRdUtZdDdaQ3VDVWNMZ2hacDJ2QU9FL2pIZkRwTE1Wd0dQeW5oQk1PVjhCbWg0WjVJZ1paeXRBc1VVYnltSysrUXJRNlhnbnpEWmZBY3B1V0ZRTWs4MVVnUGJDY2VDUnBwaHF0Z0owV1hsaWltMHUrZFpEZ0VMQksrVnR0R01kQkFBUUFFQUFBQUVBQkFBUUFFQUFBQUVBQkFBUUFFQUFBQUVBQkFBUUFFQUFBQUVBQkFBUXdHSUNReDl5OTVDR09QUG9GWVUrQ3dIVVljVEJoNVFNMVJDckhyMmlnN0VRUUVXaXBtbUlPSlFBMVFudnJ5RmFRUUNWV1ZKVWE1eUVBR3B5LzdyV3lJWUFBQUlBQ0tBbVlRTW9jdi9lVHhzcTFETzNqMEErTFBkdWdmWElXSkhjNS9QMklmQ0FBQVZHZzZrVUFUbXhONmpRdUp4UWVmSmh1WDhwNUo5azdQR05oSDlQSTFnTUFRQUVBQkFBUUFBQUFRQUVBQkFBUUFBMU9MZURJaU1ubGt5RnZzc0pYU2NmZGlrbjloc1p1dzhCTk1tS1NJcGZjbUlEcU5BcnVXNlFEOXVRRTV0THhxN2xQbDlGUDRKdUVJQU5xWmNJcmtNQUFBRUFCRkFWejdKYXd4a0NxRW5yVTFxakhBUUFFQUJBQUJVWTRxZE5sa0lBZGJoeFNadmNnUUFBQWdBSUFDQUFnQUFBQWdBSUFDQUFnQUFBQWdBSUFDQUFnQUFBQWdBSUFDQUFnQUFBQWdBSUFDQUFnQUFBQWdBSUFDQUFnQUFBQWdBSUFDQUFnQUFBQWdBSUFDQUFnQUFBQWdBSUFDQUFnQUFBQWdBSUFDQUFnQUFBQWdBSUFDQUFnQUFBQWdBSUFDQUFnQUFBQWdBSUFDQUFnQUFBQWdBSUFDQUFVRnNBNzVMQVNuZ1hTZ0ZtWHdSV1lqWktBSUFBQUFJQUNBQWdBSUFBQUFJQUNBQWdBSUFBQUFJQUNBQWdBSUFBQUFJQUNBQWdBSUFBQUFJQUNBQWdBTkNDQUxmU1RaRmgzZDFsSzl2UmphTzdOcTlkOXRuc2FlTkhEdW5YczFQckZvM3FobFV1RzFncHZHRnN4L2kzeDA2ZHYvSjRGZ1N3QXMxOVRGSGFuQTg2Mk9UdURodDlmT2JwblYrTTc5MGkyTWU3Mmt0TldyYnIxbnZnc0hHVFpzeGZ2Q3BwMi9mSlAvOStQdVhIN1YvL2I4Nkhvd2IxYkJQa1diUDd0SzFYSVVEK3VHNXlpN1R2bE84dCtUZlRYMjFwNUxPMmRRTGNubS9RZWRqc3BNUHBDcDdzN29GUEIwWVZDMmcyOVJJRXNLVUFJbEg1M2xhSmZBaXdZZm1lQzlsbXY0RUxHd1lGeGl5K0RRRXNKRTA3QWxoTTFzWk92bDAyWjBNQVN6NjdtNmEzT1hKRzZkNVNqcHJlSnQwbTd5TmpVWk5TOC9SVzJGRjdkK1Bzc3pNQkZFMUhvaFVUZ0MweXdPTmEwQ3ZpV0w1M3N2N0x1OGJSMjVrQWFmWWpnQkRmaG82NG03ODkzT25MclFSY1Y3TFIxanZLZG5aMmY4RUtJRExmcjc0bFh6c1lld29DVU4rTGJkWkxBRFlWUUloZm92dm5JMGtmbmN4dUVhaW9CQ2l0QVJvUVFJanBmUzAyUUIrWEtaQUJMQmNnZGJjV0JCQ3pMRFpnd2JjQ0FwRDhma1RKVm11eU5TR0F4UVpjSHNxd0Q2Q3NCQ2hMQVlvcWdBb0NXR3JBNEdzQ0dTQWZBcVJ2MVlvQVl0WllDeDYwZFpHQUFESytVNUFwMXQzWGpBRGlQOGZOZnNpOTNvS2pBQXBMUU5aR2ExVUFjVXVOMC9qMzQ4d3VBaE5TQkRKQWZtckE3UTBLZDNWVGpmZTFhNEdaRDBnWkx5Q0FFVGFZWE9GdlVIcEdWcFVhSUlha21yZDk3M3M4QlZCWUFzU1Z2VmFxQUJZTDRGbXlRbGhFc3pZdDZsVUxkRlh5eGdhWnRmY3Z0Z3BrZ0h6VmdQdnJiQ2hBdjltN3J0MjhtSEpnWjlMeWRic1BuODA0TU9mMWY1aDZ6R0p6dWpwcGd3VlBBZTdkdFpZQVc5TnRLTUQwdVBwRjgvelRLYXpYL0pOYjJqZ2JmOURuWmp6QjBGU21BcVFwM2pMNXZKVXFnSlhXQUxxbzViKzNOYnJGeWdlS2QvYnRmTUZVZ092S056V2VBckxYcUN6QVEveVdyaWhoSkh4Vjhabmh6SGc5QkhqcTIxWFZiQUYyRytiUVlrRTJQd3BvZmJDY2tlaFNwYnVaWW5pcXc3VUM1eExnM3BVWS9PYWVtUlhnNVRxMlB3ejAzK0l2RDM2bHJEVXBUaE9ONC9pK25ET0F4d3ZFNEszdFpnclEyRkdGUHNEem05emxiMjZqc24zME5leGd1QTI1eFZxQW1nNW0xb0Q5Wnd0SUFGSDFiWGxzdWFJOXJFZ3lIT3ZoZjV1SEFIUUo4UENzWXFZQVJBS283cXVLQUdKb29EU2s2Q3FHRy8wTngxd1RCTzhNSUtnYThOc0pzd1NJRms2cUNGRGtYV25vckpMSEQ3OWdPUFo2Z0xqTlc0QmE1aDBJSGlYT3BEVVc2bVFBOFMvcFozVkZRWnZyaDVtR1l5NEpna3NHU0RNakF4Z1JnRWdBTGkrcEpVRHhGNldoY3lZZm5CVkhuT1hxWGtwd3p3REIxUG1XM1RmTUVLQ09oMW9DaUJiNXFBRWZIekFjYzM1SENONXJnQ0xDT1l3WXp0d2syY3R2eWRRU1FLVTFnQkFWTFJmZzNFaGlzRnRwd1NZRHlFb0F2UWlRbmZCYkxhZ2xnQ3dEM0xSMjM5WFhjZ0hlSks1T2NSNG11R2VBaHdLUWk0RDFrcWxiYVRqa0V5NFZJTnZhbjIxSmFjVEVDU3p4TmFWdWw3SkNzRjhEMEFLazByLzl1N2pIY0t5aG8xUUFxLzlBdktnMFl1TEtrVnY5aUVHbllZSlBCcmlaSlJPZ2dvL3k0NERWZW5JSklGc0RXSDBSY00yQzRwREQ2TitKd2M2NTU1ZDRaQURKMmVDSEF1akNsUXV3aWw0Q1NET0F0UVg0UXhvcFlmUnhQMDBqQmgySEMwWVpRQzRBWFFNT1hLYm1jNGZoV0prS0tncHd5YklNb0kranJoanBtSHV0V2RZOUZnS2ttU21BZmpzeHVQVUJuUUJVRStDOFpRTE0yVU1sZ0JGQ0V4V2c0RE1BZVJ3b3FHdG5xWk91MFVMRk5jQVdpd1Q0NHgxcXRIMEZDSkFyZ0g4QUZkbW1UQUJkbElvWklPTWJpOVlBQTZrMzd6QkNhR01KVVBBbGdLNEJQeHVlT2p0SjNGVWx0SmlLQW15UWxtdHZJNGVCbTVkUW82OVdFc2dBandXZ2E4QTJSUldnc1ZCUmdNK2trVnJ5QjkzdEk0d2xBQzRaNExxNUdVQ2hBTkZDdlRYQUp2a3ZVcHJLSC9YK0w5Um9weWNYd3R6bElZQ3hFaEN1VTdRS3ZFOHNDMXpycTVjQk12c0xDd1E0TVpFYTlaa2tORVBCWndEdnlsVG8xTitiWjk4U3liS0J1M29DVEpCZnArUmZYUnFLSnk4WUhsOENBanpDSlRkM1J5cXFBVlFGaUJXcUNUQnZwRHpXUkJwWnVJTWFmYUdYNENaQW1qd0JDTkZRVVNlQUVxQmw3djg1MjE2QS84VUxDeXJBVmZKS1lzZlpEZ0laSUk4QWtUb0ZHZURTSWNOTmFqeStUdGZOMWdKa1RlaHE1TFlGRHRHeXlOdFhxTkcrWVFJQzVCV2dlRFVxZU83cDVmTW12VFFCMkZ5QVkzWGZNZmI3ejVqbkpJR2RDNmxSdjNHQ25RQ1NlOFUvRmtCUkRUQlNBWVM3VFFYNDlhMGF4bS9kUGtZeWZwLytLZWpVWi9nSmtLNDNLa0FqMDZ0QS9XYkREY3FFbU1nQUQrN2srNVhmWHhOVFliTHhFM1l0d3lXQlNlUWR4S0xiQ1g0Q0dEc0tmSFEwNTJCU0FPcjhjS3d3SVlENUtlRGo5U2Yvdkl0djFwWGpTd2JVZWFiVlJoTlhGdXBrQ2VEWDk2aFIxMDhFUXdIU2pBdmdRNjZLL2ppbXNBSllVWUEzbTFkMDkvWXRVeW00bkk5ejhhQU9IKzB4ZmJhK1RZZ2swSWRzOGlWVUVNZ0FmeGRBc2dqWVpsd0Fud2JXRitEUk4vOUc2cG1VdzZmU0ZWNVM3REJhRXZpU3ZMYTlmSUpBQmxBcVFKNVY0TTN2RGNQTm41d0NjTGVtQUdiU1RYSjNpdlNCNVBBTU40RU1ZQ2hBQkhrNlo4ZGZYOEt0bVVZcWdIVXpnSG1FejVBRTNpR3ZIMnZiVkVDQXZ5ank1Mzk0a1F2cHF6LzkxUVV3akxyRVBQbFBSNmVDRWlCZ2pTVDc3SjFEalhwTkZUd0ZNRlVDSkRYZ2UvcUlJSmZJUElmVGJnVWtRSkcxa2h2SFBJZ2pPNGZqL0FVeUFDa0EzUWw0Y2pIbEg4ZU5WWUFDRTBEM2VRMUo1S05EMUdqb0d3SUMwQUxVY3pFcXdIWmhwQXNnYk4wS2xES3V0U1J3WmhUcHkyeEhyZ0tZTEFIdXRhbDRTcHBjZ0pxQkJaMEJIQ1lNbDRYNmtSZDY5WHBSSUFOSUJLQVhBZnA5Y2dIeVZvQUNFY0J6dGZRdi8zeTFsaG90UGw1QUFQTUUrTE1HWERxaFBRSEtmaGNyQzJYMEk0Y25GZVVyZ01rU0lHcTdHeEdBU0FCbGd3dFVBRjJmUS9MTHdFYVNONHg1cWF0QUJwQUw0RnFYMm1DZlhuWVErUFRYVHlaQXVvM2VUOUR1VCtUbmRBOU9wMGFkWndtK0FzanVGWjlIQUxvR1hEdXBhQW1nOGxGQThZa0g2OHFqMlhIa1QrRUhCVEVXUUhhditMd0NSTWtYQVJjTTd3MVg5Q1ZGR2NBV0F2aCtlT3B0RnlQeFdlVE5MWnliN0tXUi9pSDZJM20zT2wrNEJiaXVRSUJhNUJKcHJ5UUJ0SEFxSUFGQ3BwOGE3R0ZzZzR2RHlPSE1xTm8wZldRNzZwRjNxL2wyS1lCRDNubHpqSkptQUVLQVZrS1JBUGZ1Vy9mTFB6QTV1Wis3OFcwR3FQT25xdXlpQkR6OVRTSXZydi9wRHJrR2RJdDUrdDlGaE0xVFFFRHJTYnZPVFFreHRWbktNZ0VCbEdZQXo2ZitSWjRvZmZDREVPY05mMTNYMkVOTkFkenFEbHAyNXR5S3QrbzdtZDcyam9BQUZncFF1cEprRVdEeUdNQ0tBc1IzYUJFUlhMYW80OFAwRkZndElyWnIvOUVmZmI3L3hyZVQvMTFLMkNzRldBS2VGb0JPQVh1b0N1RHc5eWFjMVM0Sm1yVjQzYzVEcDY0OXVIVS80K3pobldzV1RodjFadWR3WjJIUGFDWUQwSXVBUFZRR3FGUENWaG5neVE3dGU5SzFLVUFrZFhSOS92elpYMDBkQTZpeUNJUUFOaThCSHZYSUZLQmdDUUFCN0NJRFNCWUJoZ0lFVllBQWRpa0F1UWlZczhSMEJZQUFkbEVDUkNoMTM0eWJkeFFJNEE0QjdDRUQ2S0lWN1MwZ0hCbkFQZ1VReW40MUVhdURBSVZMQU1tOTRnMEZpTllwMlYwckFRRUtsd0N5czhFR0FwUU1WckEzNzRZUXdGNEZNSEs3cmI5bzdnd0JDcGtBYVlvRlVMSUlJQ3FBY0hhQ0FIYVJBZW9YTWJremwyYlVxRHNFc0FzQlhCdVkzRmtqTDJwVUpzNnRMSlUvemtySlppSzkyT3Z6dkZ2RjIyVUpJSzZ0TTcwSWFDWE1FVURjVkZrQXR4QXpLUy9iVThXOFcva3l5UUNtRndHNldQTUVRQTBvWEFKVUNUU3hyeGY4SUlDOWxBQTM2c2ZTcGxJQVhRRWdRR0hNQUo3VVlCUExCTURaSUhzUm9MSHgxMU9wTWpLQTNaUUFVb0Jud3kxSkFCREFiaktBaVVWQVN3aGc3d0lZWFFTVXJHMnVBT21ZNFFJWFFIS3ZlSWtBdFkzZFREMVdod3hRK0FTUTNYV1hGc0Nwa1FWTEFBaWdaUUhNNkFPWldBUjRTZVhBWWFDR0JVZ3pUd0FqaTRBWVYyUUErODhBNWNxYlh3RWdnQjBKSUU4QnppMGdBSU1TSUY4RVJIcERBQTRab0tHejJSVUFBdGlUQUY1MTZIRmRyUHc1cEVjQkdYcE1jV0VyQWJKRlFNMUFDekpBZGdhbVdLc1pRSHEzdGFabVZ3QzVBS2dCaGE4RWlCclBRUURXSllEK1k4emxxMElBSmhtQVhnUzBGQkNBaXdBeHJ4SjBNdlljMHA4R1FRRE5sZ0JIK1o5UTlGdENFR3IwU1hBMlNMTUM2QWNra0F5MzZyTU1TWkJBWFVUWVpyUU05VC8vMHJJWDdtOHZBdWpHMDR5eDZyT01rRHpMZUtxcjFIcVVEUFVGZUY3Mndrdlppd0NBK3hvQVFBQUFBUUFFQUJBQVFBQUFBUUFFQUJBQVFBQmdOd0xnMmt2VjBXdEtBUHdNVzNYU05TWEFSVXlJMmx6VWxBQVhNQ0ZxY3dFQ1FBRHRDTEFmRTZJMit6VWxRTW9KeklpNm5FalJWaDlnRGFaRVhhejFnVnRMZ0ZXWUVuVlpwVEVCOW0zR25Lako1bjBhRTBBTVJUTlFSZlJEaGRZRU9MZ1kwNkllaXc5cVRnQXhCTDBBOVhvQVE0VDJCTGpZNmk1bVJoM3V0cnFvUVFIRS9oNllHblhvWWNXK216V3ZCMWdjbjRuSnNUMlo4ZFpjYmxuMWdwQTUwVmN3UDdibVN2UWNvVlVCeEk1YXV6RkR0bVYzclIxQ3V3S0kweEV0ajJHU2JNZXhsaEduaFpZRkVHSnRjSmVrZTVncFczQXZxVXZ3V212djFQb1hoV1l0YWxHODNiejFoeTZqTldnMTlKY1ByWi9Ycm5pTFJkYi9VN2ovQjkydkZveFdKekZsQUFBQUFFbEZUa1N1UW1DQ1wiIiwibW9kdWxlLmV4cG9ydHMgPSBcImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBZ0FBQUFJQUNBTUFBQUREcGlUSUFBQURBRkJNVkVVQUFBRC9BQUQvQUFEL0FBRC9BRC8vTXpQL0tpcitKQ1RmSHgvaUhCemxHUm5uRnk3cEZTcnJFeWZzSkNUdUlpTHZIeC93SGg3d0hDcnhHaWp5R1NieUdDVG5GeUxvSVNIcEh4L3FIaWpySFNmc0hDWHNHeVR0R2lQdUdTTHVHQ0R2SHlmdkhpYndIaVh3SFNUcEhDUHFHeUxxR2lIckdpZnJHU2JzSHlYc0hpVHRIU1B0SENMdEhDSHVHeUh1R3lYdkdpWHZHaVRxR1NQckhpUHJIU0xySENIc0hDWHNHeVhzR3lUdEdpUHRHaVB0R1NMdUhTTHVIU1h1SENYdUhDVHJHeVByR3lQckd5THJHaUxzR2lYc0hTVHNIU1R0SENQdEhDUHRHeUx0R3lMdEd5WHVHaVR1R2lUckhTUHJIU1BySENQc0hDTHNHeVhzR3lUc0d5VHRHeVR0R2lQdEhTUHRIQ0x0SENYdEhDVHVIQ1R1R3lUckd5UHNHeVBzR2lMc0hTWHNIQ1RzSENUc0hDVHRIQ1B0R3lQdEd5UHRHeVh0R2lUdEhTVHVIQ1RySENQc0hDUHNIQ1BzR3lYc0d5VHNHeVRzR3lUdEhTUHRIQ1B0SENQdEhDWHRIQ1R0R3lUdUd5VHNHeVBzR3lQc0hTUHNIQ1hzSENUc0hDVHNIQ1R0R3lQdEd5UHRHeVB0R3lQdEd5VHRIQ1R0SENUc0hDUHNIQ1BzR3lQc0d5UHNHeVRzR3lUckd5VHRIQ0x0SENQdEhDUHRIQ1B0R2lUdEd5VHRHeVRzR3lMc0d5UHNIQ1BzSENQc0hDVHNIQ1RyR2lUdEd5THRHeVB0R3lQdEd5UHRIQ1R0SENUdEhDVHNIQ0xzR2lQc0dpUHNHeVBzR3lUckd5VHJIQ1R0SENUdEhDTHRIQ1B0SENQdEdpVHRHeVR0R3lUdEd5VHNIQ0xzSENQc0hDUHNIQ1RySENUckdpVHJHaVR0R3lMdEd5UHRIQ1B0SENUdEhDVHRIQ1R0SENUc0dpTHNHaUxzR3lQckd5VHJIQ1RySENUckhDVHRIQ0x0SENMdEdpUHRHaVR0R2lUdEd5VHRIQ1RzSENMc0hDTHJIQ1BySENUckdpVHJHaVRyR2lUdEd5THRHeUx0SENQdEhDUHRIQ1R0SENUdEdpVHNHaUxzR2lMckd5THJHeVBySENUckhDVHJIQ1R0SENMdEdpTHRHaUx0R2lQdEdpVHRHeVR0SENUc0hDTHJIQ0xySENMckdpUHJHaVRyR2lUckdpVHRHeUx0SENMdEhDTHRIQ0x0SENUdEdpVHRHaVRzR2lMckdpTHJHaUxySENMckhDVHJIQ1RySENUdEhDVEN6SEc5QUFBQS8zUlNUbE1BQVFJREJBVUdCd2dKQ2dzTURRNFBFQkVTRXhRVkZoY1lHUm9iSEIwZUh5QWhJaU1rSlNZbktDa3FLeXd0TGk4d01USXpORFUyTnpnNU9qczhQVDQvUUVGQ1EwUkZSa2RJU1VwTFRFMU9UMUJSVWxOVVZWWlhXRmxhVzF4ZFhsOWdZV0pqWkdWbVoyaHBhbXRzYlc1dmNIRnljM1IxZG5kNGVYcDdmSDErZjRDQmdvT0VoWWFIaUltS2k0eU5qbytRa1pLVGxKV1dsNWlabXB1Y25aNmZvS0dpbzZTbHBxZW9xYXFycksydXI3Q3hzck8wdGJhM3VMbTZ1N3k5dnIvQXdjTER4TVhHeDhqSnlzdk16YzdQME5IUzA5VFYxdGZZMmRyYjNOM2UzK0RoNHVQazVlYm42T25xNit6dDd1L3c4Zkx6OVBYMjkvajUrdnY4L2Y3ckNOazFBQUFVL1VsRVFWUjQydTNkZDV3VVpaN0g4V2Z5d0JDR0hJYTRZRVFCQStiRUtpaUtoRDB6aUxxTGlpSzZvdWlKQjRJSjVGdzhYVkVFeE1DS3NJcWdJaWhoUlJCWUVCVVVFRUhKT1E3RERBT1Q2bUIzNzdhNnE1NmU2YXB1bnFmcitYei83dGRUditmNXZXZTZLd3RCQ0NHRUVFSUlJU2N1OVgvYjk5WFBGcXhZdi9lb0ZhZ1VMQnZTa081R1Rzb0ZnK1lkc0lLYnc0L1FZM2xxM1RzbHlNMy9aOTVJb3RHdVNlNDQrYWhsUXNZbjAyeG42ZzdaWkptU2R4QVFudG9qQ2l5RDhwY1VXbTVQemVjUFdXWmxVaXBkLy9kMy93TUhMZVB5QVFMK0w2Y3Zza3pNUjJtMC9ualNoeDYxek16SDZYUmZpQllyTEdNelBZUCtYM3ZBTWpnek13MXZmOUxnVXN2b3pLcGtkUDhyZjJ5Wm5ybVZEZTUvMWZrV21aZGxiUDlyTEtIOXg3S2dpcUg5cjdPYzV2OGpDNnVaK2ZlL3NrS3JVN2g3YTZKbVIwVUYvTDI2aVlkL3ZpcG5WVFpQZnVxbU0yc204c0d5UnVGVHl0MGdtZXZTYlBNQS9DVlM4NHVtOXpzMThhZm9BTEMxeWErU0NYOWIwN1QrRDQzUS90V1AxQTNFSEowQVJPTjFramwvWDh1cy92ZVF0MzkrKzZCTTBnV0F5UGxaTXUwVmRVenFmMHZweWY5RlZ3Vm5sbTRBUklPZkpETmZXZGVjL3FmS0RnRHMvMzJRcHVrS1FOUmJKZnZtcTI4TWdHZGtsMGdFYXduY0FZaTZQMHFtdjhhVUd3WXVMbkdkLzVFL0JHeWVFZ0NpdHV3RStMcEdaaHdCY1A4bHZMbWRNQVNBcVBXZFJNQ3ZUVXdBOEpqcjNKY0U3MWV3RklDb3NVd2lZRU96NFBlL1hwN3J6bDlWWVJBQWtiMVVJbURqYndJUDRFMjNlYzhKNGxueENBQkU5Y1d5SStBdEE5Ny9jOXd1QWZwN0lLK0xpUVJBVkYwb0ViRDE1R0FEbU9reTUvWEJQQVlTRVlDb0lyc2FadnVwUWU3L21XNkhmd0k2NDhnQVJOWThpWUNkcHdjWXdEc3VFKzRpakFRZ0tzK1ZDTmg5Wm1EN24xUGtuTzVvWVNnQVVXbVdSTUNlTmtGZGt4RXVCMEFyR3d0QVpINHVFYkR2ckdBdVNZYkxYU0FYQ1hNQmlJelBaS2ZGemcza2tuUjN6dlE5WVRJQWtmNkpSRUR1K1VGY2tyODY1bG5ReUd3QUltMnFSTURCQzRPM0lsVVBPNlk1UkJnT1FLUjlLQkdRZDBuZ1ZxU25ZNUtIYWhnUFFLUk9sZ2pJdnp4b0t6TGRNY2VYQlFCRXlrU0pnSUxmQm10QjBoeFBnU3BwQm9EakFpWklCQnp1RUtnRnVjQXh3YWtDQU1lVC9MYnN2cWlyZzdRZ3ppdEJiZ1RBdndTTWt3ZzRjbTJBRnNSeDBDT3ZFZ0QrbGFRM0pBS09YaCtZOVVqT0RaL2NCQUdBL3hmd211dzJ1VzVCV1k4ekhITzdHUUMydkNJUlVIeERRTmJqQnNmVTZnUEFucGRrQWdMeWgvSkUrTVRXQ2dDRTVFV0pnSkxiQXJFZTQ4UG5OUllBWVJrdUVWRGFLd2pyc1NCOFd2Y0JJRHpQeWdUY0ZZRDEyQmsrcTZzQTRJanN1UWxsdlJOK09USWNrMm9LQUdjR3l3VGNtK2pMVWNkeGtDc1pBQzRaS0JQUU44R1hvN25qYmdBQkFMYzhKbnQ0eGtPSnZSeU9Pd0orQUlCNytzc0U5RS9vNWJqUThUUVlBRWp5a0V6QVk0bThIQjBkRDhvR2dDeDl5eVFDQmlid2NuUU5uOHcwQUVqVFJ5WmdjT0l1UnpjQVZCeUF1RnNtNEdrQUdBRkEzQ1Y3azhaekFEQUNnT2dsRS9BQ0FJd0FJSHFVU0FUOENRQkdBQkMzeUFTOERBQWpBSWdiaXlVQ1JpVUJ3QVFBNG5kRkVnR2prd0JnQWdEUlZmWlMxWEhKQURBQmdPaDhSQ0xncldRQW1BQkFkSklKbUpBQ0FNMlRFd3NBb21PaFJNREVGQURvblhyaE05N2xhWmlyRGtzRVRFNEZnTmJKRHAveEFXL2p0QytRQ0ppU0JnQ2RVOGx4ZmIvSEgyNlh5ZDZ3TXkwZEFEckhzUS9uOWVWd2wrUkpCSHlhQVFDTnN6MTh5bWQ0SGVtaWd4SUJNeklCb0c5K0NKK3k5MXU5ejgrVkNQZ2lFd0RheHZGazlFZThqOVh1Z0VUQW5Fb0EwRFd2aDAvNVhSK0RuYjFQSXVCdldRRFFOSTRyL0ZmNkdhM3RYb21BcjZvQVFNOTBjZHpkaysxbnVOYTdKUUsrcmdvQUxlTzRHY3J5OThDZlZyc2tBaFpYQTRDT1NYTHN2TDNtYjhEVGRrZ0VMTWtHZ0k1eHZCSmtzODhCVDlrbUViQ3NCZ0EwalBNbHlYNGZBWDdTVm9tQTcyb0JRTDljNCtqVHEzNkhiTEZaSW1CRmJRQm9seXpIMVJ3SGZCKzJhYjVSSXVESHVnRFFMck1kYmZML2l2U202eVVDVnRVRGdHNXgzdXEveXYvMXZFMStsUWo0cVFFQXREOFNZSFh6UDJxamRSSUJQK2NBUUxNNDN4TCtRd3d1NTIzNHMwVEFMNDBCb1B0M2dIVkhESWF0djFvaVlIMVRBR2lWdXM1N2U3Ykg0c2g5dlpVU0FSdWJBMENyZkJDbmV6dnIvQ0FSc0trRkFIVEtsUzdQZmIwNEZnUFhYaTRSc09Va0FPZ1Vsejc5R3BPVGR6Vy9rd2pZZGdvQU5Fb3ZseGE5SDVPUmF5eVRDTmh4R2dEMFNacmJnYnVIWXpKMDloS0pnRjJ0QUtCUDduSjdCVVNubUF4ZGJaRkV3TzdXQU5BbUtXdmRYZ3NibTlmRFYvMWFJbUJ2V3dEb08vTi9kT2pNbUl4ZFpiNUV3UDV6QUtCTjVycCtUN2VKeWRoWlgwb0VIR2dIQUYxeWh1dWpmZzdFNUhDQXFEeEhJaUQzQWdEb0V2ZFhBUlhlRXBQQks4MlNDTWk3R0FDYUpHT04rMHRBWG9qSlF6NHlaMG9FSExvVUFKcWtuZVNKZi9NYXhjVFhkSW1BL0NzQW9FbWVsUDFVNnhtTDBkTS9sZ3hmY0NVQTlFaXk3S2VhOVVYTEdBeWZObFV5K3VHT0FOQWpkV1NYYzF0SC8xVFQvL0NwSDBoR0wrd0VBRTErQnNnZTkyWlpCNS94ZjAxLzZpVEo0RWM2QTBDUDNGQW1GV0FkSHUzN3NGREtlN0wvTUYwQm9FY2V0U0psMmNNK0wraE1lVmN5Y3RIdkFLQkhoa1VVWUpWOVA2eURuK3NGazkrU0RGemNIUUI2NU05V2VTbGROV25RN1plZVdpZkx5MU5BazhiSzlnWlBCb0FXU1hyWlVwTlBBYUJKbmxjRG9LdzVBRFRKZzZWS0JEd0FBRjNTcFVBRmdERUEwQ2F0ZjFFQTRDTUE2SlBzVDA4OGdHa0EwQ245Q2dGZ05BRFI2aHNBR0ExQXBQUXZBSUF3T2swbUFjRHdYTElJQUlibjJtVUFNRHhYemdTQTRUbmx4VDBBTUR2cDNkN1BCNERacWRSNTFIb0FHSjdHdDc2Nk1BOEFaaWVwV1lkN25oLy95YUlmZnQ2d1phdVA3QVdBMmVrR0FBQUFBQUFBQUFBQUFBQUFBQUFBQU5RRUFHb0NBRFVCZ0pvQVFFMEFvQ1lBVUJNQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQXNOZ0FZTEVCd0dJRGdNVUdBSXNOQUJZYkFDdzJBQUFBQUFBQUFBQUFBQUFBQUFBQUFOQW5BQkFBRUFBUUFCQUFFQUFRQUJBQUVBQVFBQkFBRUFBUUFCQUFFQUFRQUJBQUVBQVFBQkFBRUFBUUFCQUFFQUFRQUJBQUVBQVFBQkFBRUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFDb0NRRFVCQUJxQWdBMUFZQ2FBRUJOQUtBbUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFHQ3hBY0JpQTRERkJnQ0xEUUFXR3dBc05nQlliQUFBQUFBQUFBQUFBQUFBQUFBQUFBQ2dUd0FnQUNBQUlJRlo3RTU5cEhrOXZLYmxmUkkyOS82K3h3MGR6MnFVQm9Ed1RMZE1TdW5HMmFQdU9Uc05BS1lDK0dlT0xCaDZlVG9BekFWd1BBY24zbEFaQUFZRE9KYThjUmNEd0dRQXg3THE3a3dBbUozZGc2b0J3T3pzRzFnRkFHWm4rNTFKQURBN1M4OEZnTmtwZWJFU0FNek91Z3NBWUhhS24wd0dnTm41V3gwQW1KMU5ad1BBN0JUZUJBQ3pVOVlmQUlabkpBQU16K2drQUppZDhja0FNUHgvQUFBTXp6QUFHSjcrQURBN3BWMEJZSGJ5endLQTJkbFlFd0JtWjBZU0FNek9md0hBN0JTZkJ3Q3pzN1l5QU16T3F3QXdPMlVYQWNEc3JFd0RnTmw1QWdCbTUxQjlBSmlkOFFBdy9LeFFHd0E0czc5M3BOelRiK0RJU1V2enloOW1xR3lFdSs4Zk1QenRlVHNxWGxEdktCUEZYRDhHZ0ROYkt6QnVVb3VlYisyS1BFemJjb2FvM1duNDl4VXJLTnBKUnpQWmN3SGdDY0R4SkYvMWZyRVBBTWZUYk9BNnhRQ21BOEF6Z0dOcE1xYkVGNEJqLzBxdVc2Z1VnTlVLQUQ0QUNORjZxVDhBeDNMdEdwVUEzZ0tBTHdBaWRiaGZBQ0o5U0pFNkFFY2JBc0FYQUNGNkZQa0VJRVM3OWNvQVdJTUI0Qk9BNkZMa0Y0Q29NVnNaZ00wcEFQQUpRUFQwRFVDa3Zhc0tnTlVaQUg0QmlCRytBWWlrc2FvQWZBaUFDQUM2REFuTGt3OTBQOFZ4UVdYcTBzZ0FUcldQTVBqUk82K283WEpZNGYyS0FPZ3lydnhFT2QvQ2FnQ1FBM0JkelQxdlhSSytOMWdTRVVBMzV3VlpyMXpvMkJsWVVBRUFRK0p3UnVBT0FFUUo0Rmptbmh5Nm9URlJBamlXYjd1RUZWdHZoeG9BTXdBUVBRQXIvL3FRRFRVdGpocUFaYzNNQ2EyMlk1a1NBRWV5QUJBOUFLdjRtcEF0ZmVBQmdMWG5zdEJ5eHlvQllIVUhnQWNBVm00eit3Yzdld0ZnSFFuZEI2dTFYd21BOFFEd0FzQ2FhZjlnUnI0WEFOYVJTMFBxSGFBRXdHWUFlQUpnWFdILzVBeFBBS3pkamV5RFZONmpBb0RWQWdDZUFJUWNRaG5rRFlBMU4rU293dE5LQVBRR2dDY0FoZlpuY0hmM0NNQzYwNzY5UnFVcUFMd0xBRThBclBhMlQ3YnhDbUI3eUtQYzU2Z0E4Qk1BdkFIb1p6K000eFdBOWFCOWcvZXBBRkJhRlFDZUFMeGcrMlNtWndCcjdSdHNwZ0pBNk05WkFGUVl3Q2o3NlR6UEFLeVFGL3h0VkFIZ1FRQjRBdkNLL1l5Z2R3RC9iZC9pSkJVQVhnT0FKd0JQMlQ2WjdSM0FjdnNXSDFjQjRFc0FlQUxRMC9iSkZ0NEJsTnBmN2RkVkJZQWRBUEFFd0g1T3VMMTNBSmI5alU2dFZRQW95d0NBQndDLzJEL1p4d2VBMiswbmhGUUFpUGZCNElBQ2VETFNKNk1COEovMnZZbFNGUUN1QUVEMEFQYlhzSDl5clE4QUkrd0RIVlFCNERZQVJBL2dIdnNIVzFvK0FJUThzR3UzQ2dBUEFDQnFBSDhOMmRLVGZnQzhiaDlwcHdvQWd3QVFMWURQUTg3aHBLejNBMkIwaFFHYzNEbFMvdWdad0VnQVJBZWdaSGhxeUladXRVNE1nTWc1MXpPQXNRQ0lCa0RSNUROQ3Q1TytMc0VCdkFPQUNnTEkzemgvMUcyT3ArMFBzaEljd1BzQWNBZFFzYlFyU25RQVV3RGdBMEQ5elZhaUEvZ1FBTjRCMUZodUpUeUFpUUR3REtDK2EvOFRETURiQVBBSzRMd3RWZ0FBdkFFQWJ3RFNCc2tlOEpSWUFFWUF3Qk9BenF1bHc4VG5VUERsRVI4Tk1jMHpnQ2NBRUQyQWpOdVdSUmpHODhtZ1BaRUE5SW5UdVlBK0FJZ1NRTlhyeCs2UE9FdzBBSWJiUjg1WEFlQkdBTGdEU0U0TlMyWjJrM082UER6dXUrTHlob2tHd0dQMjAwcVdDZ0FYQWNETE5ZR3hBbUMvSEtPK0VnQ05BYUFTd0hrUmY4bWZBQUFsS1FCUUNLREUvZzdIbTFVQTJDZ0FvQkRBdC9ZdFBxMEN3RXdBcUFRUXNoUHdtUW9BTHdGQUpZRHo3YnNkKzFVQXVBY0FDZ0g4Vk03UjNCTUE0RHdBS0FSd3YzMkRRMVFBS01vQWdEb0FXekx0RzF5dEFzQzNBZ0RxQU5odk1SYnRMQlVBWGdPQU9nQmZoQlQ4amhJQU53TkFHWUNkRGV5YmExeWtCRUE5QUtnQ2NEajBMTXdZU3dXQVZRSUFpZ0FVWGgxU2J1c1NKUUJHQWtBUmdGMGh6d2NUeWU1dkVZMDdnUFlBVUFQZzR3YWgxVDVxS1FHUW13b0FGUUNXZGdvcjl2d2lOUUFtQ2dDY2NBQ3JSN1lMcnpWbm02VUdRQmNBeEJ0QXlHdmpCdlh2ZFZsTlo2blpLeXcxQVBhbkF5RGVBQ3FRNm9zdFJRREdDZ0NvQjlEZ2Uwc1ZnQXNBb0I3QTJac3RWUUJXQ0FBb0IzQi9vYVVNd1AwQVVBM2dON01panhSWEFMbFZBYUFXUVBhd1Frc2hnQmNFQUZRQ3lIayt0OXlSNGduZ2FFTUFxQU5RdmNlbnhSVVlLWjRBeGdrQUtBR1EzTHpyYzE4WFYyeWtPQUlvYWdvQVJ3cnNkOXl2OGJ5Mkg4bHU0bjl6d3RTdjFoWkc4MWRxeTlleEJmQzZBSURKS2NnQmdORVpLZ0JnY3JabEFjRG85QlFBTURtekJRQk16dUVXQURBNkF3UUFUTTVYeVFBd09RZWJDZ0NZbkZzRUFFek9ud1VBVE03aWRBQ1luQzMxQlFBTVRuNWJBUUNEVTN5OUFJREJLYnRkQU1EazlCTUFNRGwvRkFBdytmLy9mUUlBQnFlb2x3Q0F3Y25ySUFCZ2NEYTFGUUF3T0YvV0VRQXcrT2ZmeUZRQkFIT3o4eG9oQUdCdXB0VVRBREEzdTI0U0FnREdwdVMxV2dJQTVtYnVtVUlBd05nc3VsSUlBQmliT2RjSUFRQlRVekMrdFJBQU1QVzR6OExlVllVQWdKbmRQenEzYjQ3UUtRQTRnZi80RjQ2NHVyTFFMQUE0QVRtOGFjbDdRM3EwU2hFYVJobUE1bTJsZWRoeHNxeHR3cWJOYWMwYlZoRWFSeG1BQktzcHNBRUFBQUFBQUFBQUFBQUFBQUFBQUFBQWFnSUFOUUdBbWdCQVRRQ2dKZ0FvU0ZjQUtBUXdWWDFOMTRYWE5KMCt4UzAzaFMvMlpQVTFkUWl2YVJaOWlsdHVEMS9zQ2VwcnVpeThwcVgwS1c3cEY3N1k0OVRYMURxOHBsL29VOXp5VlBoaXY2aStwaHpISlZYMEtXNFpFNzdZQTlYWGxPbTRxSzRPallwWHZnaGY2M3MxS0dwdmVGRVgwNmg0WlVQNFdsK3JRVkhmNnFneW1Na3FDMS9yVmhwVU5TVzhxRGZvVkp4eWllUHJWb2RybUo4Tkwyb0ZuWXBUSGcxZjZpMDZWSFZyZUZXbE5XbFZmT0s0UCtkekhhcHE1ZmkvZENPdGlrdlNEbWw0R0VDSTVMendzdDZsVjNGSkIwMy8xT2FHbDdVL2pXYkZJNjg3QURUV29xNm5IWFYxcFZueCtBWndISEhackVkaGp0TkJPcHlsRG1BY0Z3Tlk0M1g5YlZMY21IYkZQck1kQUc3VHBMS3Bqc3FHMGE0VHNMZFZvc3RabDE2TzBnNW0wN0JZNXozSEtzL1RwYlRzSWtkdFEyaFlqSE5LaVdPUkg5U211RThjdFIycVI4dGltMm5PYjRBRzJoVFgzZm1rblRkcFdVelQzcm5FTXpUYVE5M3RmTDRlVndYRU11bXJuUUJ1MXFpKzU1emxyY21rYmJITHM4NEYzcTdUOGRhY1ltZUIvMFBiWXBiem5iOEFyY0dhNzZOWVZoY2FGNnZkckEwdWp6T3NxOWRSaWpKbmlRZE9wblV4U2ZJTWx6K3ZselVyOGtPWEd0ZHdaVWhNOHFMYlk0eHpOQ3Z5OUJLM3R5eFVvbnYrODVEYkEyMWYwcTdNc1c1bHptSlh3SGZ1ZHZsMnRYSnJhVmRuZ3p3M0FiT3IwRUYvNmV2V2YydUFocFUrN1ByczdhVjE2YUdQSkQzanVxcXJkTHptS21XNWE2MmIydEJHejZrMDJmMlI5dTIxclBhc0l2Zm43L2Vta1I1ejZvL3UvZGYxMXB1bkpLOWdtTUx0b3A3Ky9UOVE0TDZlRzNUOVlaVzZTQ0pnengrUzZHZTBPV08rN0EybWwycGJjNU45c3Zld2ZOT2Vqa2FWK3FPTFpXczVVT095cnl1VnZvcm55dzUwdGNKcC9QSmg2VUxPMFBxLzZlTVIzc2EwK2lGMkNTdjBUWHJkMUJMNUt2NVVYZS9xMzRuMFFxN2lXZjFhMHVDSXFkN3R6ZDJSbG5EZlNacFBJTzN6Y3Q3S3R1M0RRZi9SdGs0eXJRNVB0WllkKzQ3OXJyU2N0eGxlcVAwOHNoWlg1T1Y4cFlmMjdpVC96cTdjb3hWWnRxTE9pZkJQYklsRjRwT2k3b254TmJhWVZzWG5WY2JkRStUYkxHc216WXBEOHE1TW1OOHphVy9UcnBobjJ6bUo5Sk4yUUNrZGkyMithWmhZT3pWWDc2Rm5zY3liQ1hkMVhjNTh1aGF6NVBkS3dBTWJ5UU9PMExuWVpINkx4RHkyZGZvQ2VoZURISHd3WVkrYkp0MjVpLzc1emNRR0lvRlRkV2crTGZTVGVlY2wram1PZWkvazBVYXYrYXBqRUU1ejFYaDhBNjMwY3VSL2NtQ2VzWkRjK1lOQ0docGRWZzFzSUlLVTZuZE1PVVJYSzVydm4ya2J3Q3NlTWk0ZlBPY0F6UzBuSlN2SDlNZ1J3VTN6cm8rTW1yNWsvYjc4RW5wdFMxbGg3cllWY3lZTTdkV08yMmtKSVlRUVFnZ2hzYzcvQW54UGErbTMyakxPQUFBQUFFbEZUa1N1UW1DQ1wiIiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luIiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcblxuY29uc3QgUmF3SFRNTCA9ICh7Y2hpbGRyZW4sIGNsYXNzTmFtZSA9IFwiXCJ9KSA9PlxuICAgIDxzcGFuIGNsYXNzTmFtZT17Y2xhc3NOYW1lfVxuICAgICAgICAgIGRhbmdlcm91c2x5U2V0SW5uZXJIVE1MPXt7IF9faHRtbDogY2hpbGRyZW4/LnJlcGxhY2UoL1xcbi9nLCAnPGJyIC8+Jyl9fSAvPlxuXG5leHBvcnQgZGVmYXVsdCBSYXdIVE1MOyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTcgT3BlblN0YWNrIEZvdW5kYXRpb25cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqKi9cblxuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcblxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBQYW5lbCBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG5cbiAgICByZW5kZXIoKSB7XG5cbiAgICAgICAgbGV0IHtjaGlsZHJlbiwgc2hvdywgdGl0bGUsIGhhbmRsZUNsaWNrLCBjbGFzc05hbWUsIGlkfSA9IHRoaXMucHJvcHM7XG4gICAgICAgIGxldCB0aGVJZCA9IHRoaXMucHJvcHMuaGFzT3duUHJvcGVydHkoJ2lkJykgPyBpZCA6IGBpZF8ke3RpdGxlfWA7XG4gICAgICAgIGxldCB0aGVDbGFzcyA9IHRoaXMucHJvcHMuaGFzT3duUHJvcGVydHkoJ2NsYXNzTmFtZScpID8gY2xhc3NOYW1lIDogJyc7XG5cbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtcInBhbmVsLWdyb3VwIFwiICsgdGhlQ2xhc3N9IGlkPXt0aGVJZH0gPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwicGFuZWwgcGFuZWwtZGVmYXVsdFwiPlxuICAgICAgICAgICAgICAgICAgICA8YSBjbGFzc05hbWU9e3Nob3cgPyAnY29sbGFwc2VkJyA6ICcnfSBvbkNsaWNrPXtoYW5kbGVDbGlja30+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInBhbmVsLWhlYWRpbmdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQgY2xhc3NOYW1lPVwicGFuZWwtdGl0bGVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3RpdGxlfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInBhbmVsLWNvbGxhcHNlIGNvbGxhcHNlIGluXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICB7c2hvdyAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJwYW5lbC1ib2R5XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge2NoaWxkcmVufVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICk7XG5cbiAgICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxOCBPcGVuU3RhY2sgRm91bmRhdGlvblxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICoqL1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBVUkkgZnJvbSBcInVyaWpzXCI7XG5pbXBvcnQge1xuICAgIGRvTG9naW4sXG4gICAgZW1pdEFjY2Vzc1Rva2VuLFxuICAgIGdldE9BdXRoMkZsb3csXG4gICAgUkVTUE9OU0VfVFlQRV9JTVBMSUNJVCxcbiAgICBSRVNQT05TRV9UWVBFX0NPREUsXG4gICAgdmFsaWRhdGVJZFRva2VuXG59IGZyb20gXCIuL21ldGhvZHNcIjtcbmltcG9ydCB7Z2V0Q3VycmVudFBhdGhOYW1lLCBnZXRDdXJyZW50SHJlZn0gZnJvbSAnLi4vLi4vdXRpbHMvbWV0aG9kcyc7XG5cbmNsYXNzIEFic3RyYWN0QXV0aG9yaXphdGlvbkNhbGxiYWNrUm91dGUgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuXG4gICAgY29uc3RydWN0b3IoaXNzdWVyLCBhdWRpZW5jZSwgcHJvcHMpIHtcbiAgICAgICAgLy8gY29uc29sZS5sb2coJ0Fic3RyYWN0QXV0aG9yaXphdGlvbkNhbGxiYWNrUm91dGU6OmNvbnN0cnVjdG9yIGluaXQnKTtcbiAgICAgICAgc3VwZXIocHJvcHMpO1xuXG4gICAgICAgIC8vIGluaXRpYWwgc3RhdGVcbiAgICAgICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgICAgICAgIGlkX3Rva2VuX2lzX3ZhbGlkOiB0cnVlLFxuICAgICAgICAgICAgZXJyb3I6IG51bGwsXG4gICAgICAgICAgICBlcnJvcl9kZXNjcmlwdGlvbjogbnVsbCxcbiAgICAgICAgICAgIGlzc3VlcjogaXNzdWVyLFxuICAgICAgICAgICAgYXVkaWVuY2U6IGF1ZGllbmNlLFxuICAgICAgICAgICAgYWNjZXNzVG9rZW46IG51bGwsXG4gICAgICAgICAgICBmbG93OiBnZXRPQXV0aDJGbG93KCksXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgX2ltcGxpY2l0RmxvdygpIHtcbiAgICAgICAgLy8gZ2V0IGRhdGEgZnJvbSB1cmwgaGFzaFxuICAgICAgICBjb25zdCB7YWNjZXNzX3Rva2VuLCBpZF90b2tlbiwgc2Vzc2lvbl9zdGF0ZSwgZXJyb3IsIGVycm9yX2Rlc2NyaXB0aW9uLCBleHBpcmVzX2lufSA9IHRoaXMuZXh0cmFjdEhhc2hQYXJhbXMoKTtcblxuICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICAgIC8vIGlmIGVycm9yIGNvbmRpdGlvbiBzaG9ydCBjdXQuLi5cbiAgICAgICAgICAgIHRoaXMuc2V0U3RhdGUoey4uLnRoaXMuc3RhdGUsIGVycm9yOiBlcnJvciwgZXJyb3JfZGVzY3JpcHRpb246IGVycm9yX2Rlc2NyaXB0aW9ufSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghYWNjZXNzX3Rva2VuKSB7XG4gICAgICAgICAgICAvLyByZSBzdGFydCBmbG93XG4gICAgICAgICAgICBkb0xvZ2luKGdldEN1cnJlbnRQYXRoTmFtZSgpKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGlkX3Rva2VuX2lzX3ZhbGlkID0gaWRfdG9rZW4gPyB2YWxpZGF0ZUlkVG9rZW5cbiAgICAgICAgKFxuICAgICAgICAgICAgaWRfdG9rZW4sXG4gICAgICAgICAgICB0aGlzLnN0YXRlLmlzc3VlcixcbiAgICAgICAgICAgIHRoaXMuc3RhdGUuYXVkaWVuY2VcbiAgICAgICAgKSA6IGZhbHNlO1xuXG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgICAgLi4udGhpcy5zdGF0ZSxcbiAgICAgICAgICAgIGlkX3Rva2VuX2lzX3ZhbGlkOiBpZF90b2tlbl9pc192YWxpZCxcbiAgICAgICAgICAgIGVycm9yOiAhaWRfdG9rZW5faXNfdmFsaWQgPyBcIkludmFsaWQgVG9rZW5cIiA6IG51bGwsXG4gICAgICAgICAgICBlcnJvcl9kZXNjcmlwdGlvbjogIWlkX3Rva2VuX2lzX3ZhbGlkID8gXCJJbnZhbGlkIFRva2VuXCIgOiBudWxsLFxuICAgICAgICAgICAgYWNjZXNzVG9rZW46IGFjY2Vzc190b2tlbixcbiAgICAgICAgfSlcblxuICAgICAgICBpZiAoYWNjZXNzX3Rva2VuICYmIGlkX3Rva2VuX2lzX3ZhbGlkKSB7XG4gICAgICAgICAgICB0aGlzLnByb3BzLm9uVXNlckF1dGgoYWNjZXNzX3Rva2VuLCBpZF90b2tlbiwgc2Vzc2lvbl9zdGF0ZSwgZXhwaXJlc19pbik7XG5cbiAgICAgICAgICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgIGlmICh3aW5kb3cubG9jYXRpb24gIT09IHdpbmRvdy5wYXJlbnQubG9jYXRpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJBYnN0cmFjdEF1dGhvcml6YXRpb25DYWxsYmFja1JvdXRlOjpfaW1wbGljaXRGbG93IHJ1bm5pbmcgaW5zaWRlIGlmcmFtZSwgc2VuZGluZyBhdXRoIHN0YXRlIHRvIHBhcmVudFwiKTtcbiAgICAgICAgICAgICAgICAgICAgd2luZG93LnBhcmVudC5wb3N0TWVzc2FnZShKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb246ICdTRVRfQVVUSF9JTkZPX1NJTEVOVExZJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGFjY2Vzc190b2tlbjogYWNjZXNzX3Rva2VuLFxuICAgICAgICAgICAgICAgICAgICAgICAgaWRfdG9rZW46IGlkX3Rva2VuLFxuICAgICAgICAgICAgICAgICAgICAgICAgc2Vzc2lvbl9zdGF0ZTogc2Vzc2lvbl9zdGF0ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4cGlyZXNfaW46IGV4cGlyZXNfaW4sXG4gICAgICAgICAgICAgICAgICAgIH0pLCB3aW5kb3cubG9jYXRpb24ub3JpZ2luKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBfY29kZUZsb3coKSB7XG5cbiAgICAgICAgY29uc3Qge2NvZGUsIHNlc3Npb25fc3RhdGUsIGVycm9yLCBlcnJvcl9kZXNjcmlwdGlvbn0gPSB0aGlzLmV4dHJhY3RIYXNoUGFyYW1zKCk7XG5cbiAgICAgICAgaWYgKGVycm9yKSB7XG4gICAgICAgICAgICAvLyBpZiBlcnJvciBjb25kaXRpb24gc2hvcnQgY3V0Li4uXG4gICAgICAgICAgICAvLyB3ZSBzZXQgaGVyZSBkaXJlY3RseSBiYyB3ZSBhcmUgYXQgY29uc3RydWN0aW9uIHRpbWVcbiAgICAgICAgICAgIHRoaXMuc2V0U3RhdGUoey4uLnRoaXMuc3RhdGUsIGVycm9yOiBlcnJvciwgZXJyb3JfZGVzY3JpcHRpb246IGVycm9yX2Rlc2NyaXB0aW9ufSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghY29kZSkge1xuICAgICAgICAgICAgLy8gcmUgc3RhcnQgZmxvd1xuICAgICAgICAgICAgZG9Mb2dpbihnZXRDdXJyZW50UGF0aE5hbWUoKSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgdXJsID0gVVJJKGdldEN1cnJlbnRIcmVmKCkpO1xuICAgICAgICBsZXQgcXVlcnkgPSB1cmwuc2VhcmNoKHRydWUpO1xuICAgICAgICBsZXQgYmFja1VybCA9IHF1ZXJ5Lmhhc093blByb3BlcnR5KCdCYWNrVXJsJykgPyBxdWVyeVsnQmFja1VybCddIDogbnVsbDtcbiAgICAgICAgLy8gYXN5bmMgY29kZVxuICAgICAgICAvLyBjb25zb2xlLmxvZyhgQWJzdHJhY3RBdXRob3JpemF0aW9uQ2FsbGJhY2tSb3V0ZTo6X2NvZGVGbG93IGdldHRpbmcgYWNjZXNzIHRva2VuIHdpdGggY29kZSAke2NvZGV9YClcblxuICAgICAgICBlbWl0QWNjZXNzVG9rZW4oY29kZSwgYmFja1VybCkudGhlbihyZXNwb25zZSA9PiB7XG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhgQWJzdHJhY3RBdXRob3JpemF0aW9uQ2FsbGJhY2tSb3V0ZTo6X2NvZGVGbG93IFtBU1lOQ10gZ290IHJlc3BvbnNlICR7SlNPTi5zdHJpbmdpZnkocmVzcG9uc2UpfWApO1xuICAgICAgICAgICAgbGV0IHtpZF90b2tlbiwgYWNjZXNzX3Rva2VuLCByZWZyZXNoX3Rva2VuLCBleHBpcmVzX2luLCBlcnJvcjogZXJyb3IyLCBlcnJvcl9kZXNjcmlwdGlvbjogZXJyb3JfZGVzY3JpcHRpb24yfSA9IHJlc3BvbnNlO1xuXG4gICAgICAgICAgICBpZiAoZXJyb3IyKSB7XG4gICAgICAgICAgICAgICAgLy8gc2V0IHdpdGhcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICAgICAgICAgICAgLi4udGhpcy5zdGF0ZSxcbiAgICAgICAgICAgICAgICAgICAgZXJyb3I6IGVycm9yMixcbiAgICAgICAgICAgICAgICAgICAgZXJyb3JfZGVzY3JpcHRpb246IGVycm9yX2Rlc2NyaXB0aW9uMlxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgaWRfdG9rZW5faXNfdmFsaWQgPSBpZF90b2tlbiA/IHZhbGlkYXRlSWRUb2tlblxuICAgICAgICAgICAgKFxuICAgICAgICAgICAgICAgIGlkX3Rva2VuLFxuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUuaXNzdWVyLFxuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUuYXVkaWVuY2VcbiAgICAgICAgICAgICkgOiBmYWxzZTtcblxuICAgICAgICAgICAgLy8gdGhpcy5zdGF0ZS5pZF90b2tlbl9pc192YWxpZCA9IGlkX3Rva2VuX2lzX3ZhbGlkO1xuICAgICAgICAgICAgLy90aGlzLnN0YXRlLmVycm9yID0gIWlkX3Rva2VuX2lzX3ZhbGlkID8gXCJJbnZhbGlkIFRva2VuXCIgOiBlcnJvcjtcbiAgICAgICAgICAgIC8vdGhpcy5zdGF0ZS5lcnJvcl9kZXNjcmlwdGlvbiA9ICFpZF90b2tlbl9pc192YWxpZCA/IFwiSW52YWxpZCBUb2tlblwiIDogZXJyb3JfZGVzY3JpcHRpb247XG5cbiAgICAgICAgICAgIC8vIHNldCB3aXRoXG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhgQWJzdHJhY3RBdXRob3JpemF0aW9uQ2FsbGJhY2tSb3V0ZTo6X2NvZGVGbG93IFtBU1lOQ10gc2V0dGluZyBzdGF0ZWApO1xuICAgICAgICAgICAgLy8gc2V0IHRoZSBzdGF0ZSBhc3luY2hyb251c2x5IGJjIHdlIGFyZSBub3QgIG9uIGNvbnN0cnVjdG9yIGNvbnRleHRcbiAgICAgICAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgICAgICAgIC4uLnRoaXMuc3RhdGUsXG4gICAgICAgICAgICAgICAgaWRfdG9rZW5faXNfdmFsaWQ6IGlkX3Rva2VuX2lzX3ZhbGlkLFxuICAgICAgICAgICAgICAgIGFjY2Vzc1Rva2VuOiBhY2Nlc3NfdG9rZW4sXG4gICAgICAgICAgICAgICAgZXJyb3I6ICFpZF90b2tlbl9pc192YWxpZCA/IFwiSW52YWxpZCBUb2tlblwiIDogZXJyb3IsXG4gICAgICAgICAgICAgICAgZXJyb3JfZGVzY3JpcHRpb246ICFpZF90b2tlbl9pc192YWxpZCA/IFwiSW52YWxpZCBUb2tlblwiIDogZXJyb3JfZGVzY3JpcHRpb24sXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaWYgKGFjY2Vzc190b2tlbiAmJiBpZF90b2tlbl9pc192YWxpZCkge1xuICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKGBBYnN0cmFjdEF1dGhvcml6YXRpb25DYWxsYmFja1JvdXRlOjpfY29kZUZsb3cgW0FTWU5DXSBvblVzZXJBdXRoYCk7XG4gICAgICAgICAgICAgICAgdGhpcy5wcm9wcy5vblVzZXJBdXRoKGFjY2Vzc190b2tlbiwgaWRfdG9rZW4sIHNlc3Npb25fc3RhdGUsIGV4cGlyZXNfaW4sIHJlZnJlc2hfdG9rZW4pO1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgICAgICBpZiAod2luZG93LmxvY2F0aW9uICE9PSB3aW5kb3cucGFyZW50LmxvY2F0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIkFic3RyYWN0QXV0aG9yaXphdGlvbkNhbGxiYWNrUm91dGU6Ol9jb2RlRmxvdyBydW5uaW5nIGluc2lkZSBpZnJhbWUsIHNlbmRpbmcgYXV0aCBzdGF0ZSB0byBwYXJlbnRcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cucGFyZW50LnBvc3RNZXNzYWdlKEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb246ICdTRVRfQVVUSF9JTkZPX1NJTEVOVExZJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY2Nlc3NfdG9rZW46IGFjY2Vzc190b2tlbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZF90b2tlbjogaWRfdG9rZW4sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vzc2lvbl9zdGF0ZTogc2Vzc2lvbl9zdGF0ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBpcmVzX2luOiBleHBpcmVzX2luLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZnJlc2hfdG9rZW46IHJlZnJlc2hfdG9rZW5cbiAgICAgICAgICAgICAgICAgICAgICAgIH0pLCB3aW5kb3cubG9jYXRpb24ub3JpZ2luKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgY29tcG9uZW50RGlkTW91bnQoKSB7XG5cbiAgICAgICAgbGV0IHtmbG93fSA9IHRoaXMuc3RhdGU7XG5cbiAgICAgICAgaWYgKGZsb3cgPT09IFJFU1BPTlNFX1RZUEVfSU1QTElDSVQpIHtcbiAgICAgICAgICAgIHRoaXMuX2ltcGxpY2l0RmxvdygpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGZsb3cgPT09IFJFU1BPTlNFX1RZUEVfQ09ERSkge1xuICAgICAgICAgICAgdGhpcy5fY29kZUZsb3coKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGV4dHJhY3RIYXNoUGFyYW1zKCkge1xuICAgICAgICByZXR1cm4gVVJJLnBhcnNlUXVlcnkodGhpcy5wcm9wcy5sb2NhdGlvbi5oYXNoLnN1YnN0cigxKSk7XG4gICAgfVxuXG4gICAgc2hvdWxkQ29tcG9uZW50VXBkYXRlKG5leHRQcm9wcywgbmV4dFN0YXRlLCBuZXh0Q29udGV4dCkge1xuXG4gICAgICAgIGlmIChuZXh0U3RhdGUuYWNjZXNzVG9rZW4gIT09IHRoaXMuc3RhdGUuYWNjZXNzVG9rZW4pIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChuZXh0U3RhdGUuZXJyb3IgIT09IHRoaXMuc3RhdGUuZXJyb3IpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG5leHRTdGF0ZS5pZF90b2tlbl9pc192YWxpZCAhPT0gdGhpcy5zdGF0ZS5pZF90b2tlbl9pc192YWxpZCkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wcywgcHJldlN0YXRlLCBzbmFwc2hvdCkge1xuICAgICAgICAvLyBpZiB3ZSBoYXZlIGFuIGFjY2VzcyB0b2tlbiByZWZyZXNoIC4uLlxuICAgICAgICBpZiAocHJldlN0YXRlLmFjY2Vzc1Rva2VuICE9PSB0aGlzLnN0YXRlLmFjY2Vzc1Rva2VuKSB7XG5cbiAgICAgICAgICAgIGxldCB1cmwgPSBVUkkoZ2V0Q3VycmVudEhyZWYoKSk7XG4gICAgICAgICAgICBsZXQgcXVlcnkgPSB1cmwuc2VhcmNoKHRydWUpO1xuICAgICAgICAgICAgbGV0IGZyYWdtZW50ID0gVVJJLnBhcnNlUXVlcnkodXJsLmZyYWdtZW50KCkpO1xuXG4gICAgICAgICAgICAvLyBwdXJnZSBmcmFnbWVudFxuICAgICAgICAgICAgZGVsZXRlIGZyYWdtZW50Wydjb2RlJ107XG4gICAgICAgICAgICBkZWxldGUgZnJhZ21lbnRbJ2FjY2Vzc190b2tlbiddO1xuICAgICAgICAgICAgZGVsZXRlIGZyYWdtZW50WydleHBpcmVzX2luJ107XG4gICAgICAgICAgICBkZWxldGUgZnJhZ21lbnRbJ3Rva2VuX3R5cGUnXTtcbiAgICAgICAgICAgIGRlbGV0ZSBmcmFnbWVudFsnc2NvcGUnXTtcbiAgICAgICAgICAgIGRlbGV0ZSBmcmFnbWVudFsnaWRfdG9rZW4nXTtcbiAgICAgICAgICAgIGRlbGV0ZSBmcmFnbWVudFsnc2Vzc2lvbl9zdGF0ZSddO1xuXG4gICAgICAgICAgICBsZXQgYmFja1VybCA9IHF1ZXJ5Lmhhc093blByb3BlcnR5KCdCYWNrVXJsJykgPyBxdWVyeVsnQmFja1VybCddIDogJy9hcHAnO1xuXG4gICAgICAgICAgICBpZiAoZnJhZ21lbnQubGVuZ2h0ID4gMCkge1xuICAgICAgICAgICAgICAgIGJhY2tVcmwgKz0gYCMke1VSSS5idWlsZFF1ZXJ5KGZyYWdtZW50KX1gO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLl9jYWxsYmFjayhiYWNrVXJsKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFic3RyYWN0XG4gICAgICogQHBhcmFtIGVycm9yXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBfY2FsbGJhY2soYmFja1VybCkge1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFic3RyYWN0XG4gICAgICogQHBhcmFtIGVycm9yXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBfcmVkaXJlY3QyRXJyb3IoZXJyb3IpIHtcbiAgICB9XG5cbiAgICByZW5kZXIoKSB7XG5cbiAgICAgICAgbGV0IHtpZF90b2tlbl9pc192YWxpZCwgZXJyb3IsIGVycm9yX2Rlc2NyaXB0aW9ufSA9IHRoaXMuc3RhdGU7XG5cbiAgICAgICAgaWYgKGVycm9yICE9IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9yZWRpcmVjdDJFcnJvcihgJHtlcnJvcn0gLSAke2Vycm9yX2Rlc2NyaXB0aW9ufS5gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghaWRfdG9rZW5faXNfdmFsaWQpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9yZWRpcmVjdDJFcnJvcihcIlRva2VuIFZhbGlkYXRpb24gRXJyb3IgLSBUb2tlbiBpcyBpbnZhbGlkLlwiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgQWJzdHJhY3RBdXRob3JpemF0aW9uQ2FsbGJhY2tSb3V0ZTtcblxuIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxOCBPcGVuU3RhY2sgRm91bmRhdGlvblxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICoqL1xuXG5pbXBvcnQgVCBmcm9tIFwiaTE4bi1yZWFjdC9kaXN0L2kxOG4tcmVhY3RcIjtcbmltcG9ydCB7YXV0aEVycm9ySGFuZGxlciwgY3JlYXRlQWN0aW9uLCBnZXRSZXF1ZXN0LCBzaG93TWVzc2FnZSwgc3RhcnRMb2FkaW5nLCBzdG9wTG9hZGluZ30gZnJvbSBcIi4uLy4uL3V0aWxzL2FjdGlvbnNcIjtcbmltcG9ydCB7YnVpbGRBUElCYXNlVXJsLCBnZXRBbGxvd2VkVXNlckdyb3Vwc30gZnJvbSAnLi4vLi4vdXRpbHMvbWV0aG9kcyc7XG5pbXBvcnQgeyBnZXRBY2Nlc3NUb2tlbiwgc3RvcmVBdXRoSW5mbywgaW5pdExvZ091dH0gZnJvbSAnLi9tZXRob2RzJztcblxuLyoqXG4gKiBAaWdub3JlXG4gKi9cbmV4cG9ydCBjb25zdCBTRVRfTE9HR0VEX1VTRVIgPSAnU0VUX0xPR0dFRF9VU0VSJztcbmV4cG9ydCBjb25zdCBMT0dPVVRfVVNFUiA9ICdMT0dPVVRfVVNFUic7XG5leHBvcnQgY29uc3QgUkVRVUVTVF9VU0VSX0lORk8gPSAnUkVRVUVTVF9VU0VSX0lORk8nO1xuZXhwb3J0IGNvbnN0IFJFQ0VJVkVfVVNFUl9JTkZPID0gJ1JFQ0VJVkVfVVNFUl9JTkZPJztcbmV4cG9ydCBjb25zdCBDTEVBUl9TRVNTSU9OX1NUQVRFID0gJ0NMRUFSX1NFU1NJT05fU1RBVEUnO1xuZXhwb3J0IGNvbnN0IFVQREFURV9TRVNTSU9OX1NUQVRFX1NUQVRVUyA9ICdVUERBVEVfU0VTU0lPTl9TVEFURV9TVEFUVVMnO1xuZXhwb3J0IGNvbnN0IFNFU1NJT05fU1RBVEVfU1RBVFVTX1VOQ0hBTkdFRCA9ICd1bmNoYW5nZWQnO1xuZXhwb3J0IGNvbnN0IFNFU1NJT05fU1RBVEVfU1RBVFVTX0NIQU5HRUQgPSAnY2hhbmdlZCc7XG5leHBvcnQgY29uc3QgU0VTU0lPTl9TVEFURV9TVEFUVVNfRVJST1IgPSAnZXJyb3InO1xuZXhwb3J0IGNvbnN0IFVQREFURV9VU0VSX0lORk8gPSAnVVBEQVRFX1VTRVJfSU5GTyc7XG5cbmV4cG9ydCBjb25zdCBvblVzZXJBdXRoID0gKGFjY2Vzc1Rva2VuLCBpZFRva2VuLCBzZXNzaW9uU3RhdGUsIGV4cGlyZXNJbiA9IDAsIHJlZnJlc2hUb2tlbiA9IG51bGwpID0+IChkaXNwYXRjaCkgPT4ge1xuXG4gICAgc3RvcmVBdXRoSW5mbyhhY2Nlc3NUb2tlbiwgZXhwaXJlc0luLCByZWZyZXNoVG9rZW4sIGlkVG9rZW4pO1xuXG4gICAgZGlzcGF0Y2goe1xuICAgICAgICB0eXBlOiBTRVRfTE9HR0VEX1VTRVIsXG4gICAgICAgIHBheWxvYWQ6IHsgc2Vzc2lvblN0YXRlIH1cbiAgICB9KTtcbn1cblxuZXhwb3J0IGNvbnN0IGRvTG9nb3V0ID0gKGJhY2tVcmwpID0+IChkaXNwYXRjaCwgZ2V0U3RhdGUpID0+IHtcbiAgICBkaXNwYXRjaCh7XG4gICAgICAgIHR5cGU6IExPR09VVF9VU0VSLFxuICAgICAgICBwYXlsb2FkOiB7YmFja1VybDogYmFja1VybH1cbiAgICB9KTtcbn1cblxuZXhwb3J0IGNvbnN0IGdldFVzZXJJbmZvID0gKGV4cGFuZCA9ICdncm91cHMnLCBmaWVsZHM9JycsIGJhY2tVcmwgPSBudWxsLCBoaXN0b3J5ID0gbnVsbCwgZXJyb3JIYW5kbGVyID0gbnVsbCApID0+XG4gICAgYXN5bmMgKGRpc3BhdGNoLCBnZXRTdGF0ZSkgPT4ge1xuXG4gICAgbGV0IEFsbG93ZWRVc2VyR3JvdXBzID0gZ2V0QWxsb3dlZFVzZXJHcm91cHMoKTtcbiAgICBBbGxvd2VkVXNlckdyb3VwcyA9IEFsbG93ZWRVc2VyR3JvdXBzICE9PSAnJyA/IEFsbG93ZWRVc2VyR3JvdXBzLnNwbGl0KCcgJykgOiBbXTtcbiAgICBsZXQge2xvZ2dlZFVzZXJTdGF0ZX0gPSBnZXRTdGF0ZSgpO1xuICAgIGxldCB7bWVtYmVyfSA9IGxvZ2dlZFVzZXJTdGF0ZTtcblxuICAgIGxldCBhY2Nlc3NUb2tlbiA9IGF3YWl0IGdldEFjY2Vzc1Rva2VuKCk7XG5cbiAgICBpZiAobWVtYmVyICE9IG51bGwpIHtcbiAgICAgICAgaWYoaGlzdG9yeSAhPSBudWxsICYmIGJhY2tVcmwgIT0gbnVsbClcbiAgICAgICAgICAgIGhpc3RvcnkucHVzaChiYWNrVXJsKTtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICAgIH1cblxuICAgIGlmKGVycm9ySGFuZGxlciA9PSBudWxsKVxuICAgICAgICBlcnJvckhhbmRsZXIgPSBhdXRoRXJyb3JIYW5kbGVyO1xuXG4gICAgZGlzcGF0Y2goc3RhcnRMb2FkaW5nKCkpO1xuXG4gICAgbGV0IHBhcmFtcyA9IHtcbiAgICAgICAgYWNjZXNzX3Rva2VuOiBhY2Nlc3NUb2tlbixcbiAgICAgICAgZXhwYW5kIDogZXhwYW5kLFxuICAgIH1cblxuICAgIGlmKGZpZWxkcyl7XG4gICAgICAgIHBhcmFtc1snZmllbGRzJ10gPSBmaWVsZHM7XG4gICAgfVxuXG4gICAgcmV0dXJuIGdldFJlcXVlc3QoXG4gICAgICAgIGNyZWF0ZUFjdGlvbihSRVFVRVNUX1VTRVJfSU5GTyksXG4gICAgICAgIGNyZWF0ZUFjdGlvbihSRUNFSVZFX1VTRVJfSU5GTyksXG4gICAgICAgIGJ1aWxkQVBJQmFzZVVybChgL2FwaS92MS9tZW1iZXJzL21lYCksXG4gICAgICAgIGVycm9ySGFuZGxlclxuICAgICkocGFyYW1zKShkaXNwYXRjaCwgZ2V0U3RhdGUpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgZGlzcGF0Y2goc3RvcExvYWRpbmcoKSk7XG5cbiAgICAgICAgICAgIGxldCB7bWVtYmVyfSA9IGdldFN0YXRlKCkubG9nZ2VkVXNlclN0YXRlO1xuICAgICAgICAgICAgaWYgKG1lbWJlciA9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgbGV0IGVycm9yX21lc3NhZ2UgPSB7XG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiAnRVJST1InLFxuICAgICAgICAgICAgICAgICAgICBodG1sOiBULnRyYW5zbGF0ZShcImVycm9ycy51c2VyX25vdF9zZXRcIiksXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6ICdlcnJvcidcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIGRpc3BhdGNoKHNob3dNZXNzYWdlKGVycm9yX21lc3NhZ2UsIGluaXRMb2dPdXQpKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gY2hlY2sgdXNlciBncm91cHMgKCBpZiBkZWZpbmVkIClcbiAgICAgICAgICAgIGlmIChBbGxvd2VkVXNlckdyb3Vwcy5sZW5ndGggPiAwKSB7XG5cbiAgICAgICAgICAgICAgICBsZXQgYWxsb3dlZEdyb3VwcyA9IG1lbWJlci5ncm91cHMuZmlsdGVyKChncm91cCwgaWR4KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBBbGxvd2VkVXNlckdyb3Vwcy5pbmNsdWRlcyhncm91cC5jb2RlKTtcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIGlmIChhbGxvd2VkR3JvdXBzLmxlbmd0aCA9PT0gMCkge1xuXG4gICAgICAgICAgICAgICAgICAgIGxldCBlcnJvcl9tZXNzYWdlID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6ICdFUlJPUicsXG4gICAgICAgICAgICAgICAgICAgICAgICBodG1sOiBULnRyYW5zbGF0ZShcImVycm9ycy51c2VyX25vdF9hdXRoelwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICdlcnJvcidcbiAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICBkaXNwYXRjaChzaG93TWVzc2FnZShlcnJvcl9tZXNzYWdlLCBpbml0TG9nT3V0KSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmKGhpc3RvcnkgIT0gbnVsbCAmJiBiYWNrVXJsICE9IG51bGwpXG4gICAgICAgICAgICAgICAgaGlzdG9yeS5wdXNoKGJhY2tVcmwpO1xuICAgICAgICB9XG4gICAgKTtcbn07XG5cbmV4cG9ydCBjb25zdCB1cGRhdGVVc2VySW5mbyA9ICh1cGRhdGVkTWVtYmVyKSA9PiAoZGlzcGF0Y2gsIGdldFN0YXRlKSA9PiB7XG4gICAgbGV0IHtsb2dnZWRVc2VyU3RhdGV9ID0gZ2V0U3RhdGUoKTtcbiAgICBsZXQge21lbWJlcn0gPSBsb2dnZWRVc2VyU3RhdGU7XG4gICAgaWYobWVtYmVyID09IG51bGwpe1xuICAgICAgICB0aHJvdyBFcnJvcihcIk1lbWJlciBpcyBub3Qgc2V0LlwiKTtcbiAgICB9XG4gICAgaWYodXBkYXRlZE1lbWJlci5pZCAhPSBtZW1iZXIuaWQpe1xuICAgICAgICB0aHJvdyBFcnJvcihcIk1lbWJlciBpcyBub3QgdGhlIHNhbWUuXCIpO1xuICAgIH1cbiAgICBkaXNwYXRjaCh7XG4gICAgICAgIHR5cGU6IFVQREFURV9VU0VSX0lORk8sXG4gICAgICAgIHBheWxvYWQ6IHsuLi51cGRhdGVkTWVtYmVyfVxuICAgIH0pO1xuXG59XG5cbmV4cG9ydCBjb25zdCB1cGRhdGVTZXNzaW9uU3RhdGVTdGF0dXMgPSAobmV3U3RhdHVzKSA9PiAoZGlzcGF0Y2gsIGdldFN0YXRlKSA9PiB7XG4gICAgZGlzcGF0Y2goe1xuICAgICAgICB0eXBlOiBVUERBVEVfU0VTU0lPTl9TVEFURV9TVEFUVVMsXG4gICAgICAgIHBheWxvYWQ6IHtzZXNzaW9uU3RhdGVTdGF0dXM6IG5ld1N0YXR1c31cbiAgICB9KTtcbn0iLCJpbXBvcnQge1xuICAgIGJhc2U2NFVSTEVuY29kZSxcbiAgICBnZXRBdXRoQ2FsbGJhY2ssXG4gICAgZ2V0Q3VycmVudExvY2F0aW9uLFxuICAgIGdldEN1cnJlbnRQYXRoTmFtZSxcbiAgICBnZXRGcm9tTG9jYWxTdG9yYWdlLFxuICAgIHJlbW92ZUZyb21Mb2NhbFN0b3JhZ2UsXG4gICAgZ2V0T3JpZ2luLFxuICAgIHB1dE9uTG9jYWxTdG9yYWdlLFxuICAgIHJldHJ5UHJvbWlzZSxcbiAgICBzZXRTZXNzaW9uQ2xlYXJpbmdTdGF0ZSxcbiAgICBzaGEyNTZcbn0gZnJvbSBcIi4uLy4uL3V0aWxzL21ldGhvZHNcIjtcbmltcG9ydCByZXF1ZXN0IGZyb20gJ3N1cGVyYWdlbnQnO1xuaW1wb3J0IHtyYW5kb21CeXRlc30gZnJvbSBcImNyeXB0b1wiO1xuaW1wb3J0IExvY2sgZnJvbSAnYnJvd3Nlci10YWJzLWxvY2snO1xubGV0IGh0dHAgPSByZXF1ZXN0O1xuXG4vKipcbiAqIEBpZ25vcmVcbiAqL1xuY29uc3QgbG9jayA9IG5ldyBMb2NrKCk7XG5cbmNvbnN0IEdFVF9UT0tFTl9TSUxFTlRMWV9MT0NLX0tFWSA9ICdvcGVuc3RhY2t1aWNvcmUubG9jay5nZXRUb2tlblNpbGVudGx5JztcbmNvbnN0IE5PTkNFX0xFTiA9IDE2O1xuZXhwb3J0IGNvbnN0IEFDQ0VTU19UT0tFTl9TS0VXX1RJTUUgPSAyMDtcbmV4cG9ydCBjb25zdCBSRVNQT05TRV9UWVBFX0lNUExJQ0lUID0gXCJ0b2tlbiBpZF90b2tlblwiO1xuZXhwb3J0IGNvbnN0IFJFU1BPTlNFX1RZUEVfQ09ERSA9ICdjb2RlJztcbmNvbnN0IEFVVEhfSU5GTyA9ICdhdXRoSW5mbyc7XG5jb25zdCBOT05DRSA9ICdub25jZSc7XG5jb25zdCBQS0NFID0gJ3BrY2UnO1xuXG5pbXBvcnQgVVJJIGZyb20gXCJ1cmlqc1wiO1xuaW1wb3J0IElkVG9rZW5WZXJpZmllciBmcm9tIFwiaWR0b2tlbi12ZXJpZmllclwiO1xuaW1wb3J0IHtTRVRfTE9HR0VEX1VTRVJ9IGZyb20gXCIuL2FjdGlvbnNcIjtcblxuZXhwb3J0IGNvbnN0IGdldEF1dGhVcmwgPSAoYmFja1VybCA9IG51bGwsIHByb21wdCA9IG51bGwsIHRva2VuSWRIaW50ID0gbnVsbCwgcHJvdmlkZXIgPSBudWxsKSA9PiB7XG5cbiAgICBsZXQgb2F1dGgyQ2xpZW50SWQgPSBnZXRPQXV0aDJDbGllbnRJZCgpO1xuICAgIGxldCByZWRpcmVjdFVyaSA9IGdldEF1dGhDYWxsYmFjaygpO1xuICAgIGxldCBiYXNlVXJsID0gZ2V0T0F1dGgySURQQmFzZVVybCgpO1xuICAgIGxldCBzY29wZXMgPSBnZXRPQXV0aDJTY29wZXMoKTtcbiAgICBsZXQgZmxvdyA9IGdldE9BdXRoMkZsb3coKTtcblxuICAgIGlmIChiYWNrVXJsICE9IG51bGwpXG4gICAgICAgIHJlZGlyZWN0VXJpICs9IGA/QmFja1VybD0ke2VuY29kZVVSSShiYWNrVXJsKX1gO1xuXG4gICAgbGV0IG5vbmNlID0gY3JlYXRlTm9uY2UoTk9OQ0VfTEVOKTtcblxuICAgIC8vIHN0b3JlIG5vbmNlIHRvIGNoZWNrIGl0IGxhdGVyXG4gICAgcHV0T25Mb2NhbFN0b3JhZ2UoTk9OQ0UsIG5vbmNlKTtcbiAgICBsZXQgdXJsID0gVVJJKGAke2Jhc2VVcmx9L29hdXRoMi9hdXRoYCk7XG5cbiAgICBsZXQgcXVlcnkgPSB7XG4gICAgICAgIFwicmVzcG9uc2VfdHlwZVwiOiBlbmNvZGVVUkkoZmxvdyksXG4gICAgICAgIFwic2NvcGVcIjogZW5jb2RlVVJJKHNjb3BlcyksXG4gICAgICAgIFwibm9uY2VcIjogbm9uY2UsXG4gICAgICAgIFwicmVzcG9uc2VfbW9kZVwiIDogJ2ZyYWdtZW50JyxcbiAgICAgICAgXCJjbGllbnRfaWRcIjogZW5jb2RlVVJJKG9hdXRoMkNsaWVudElkKSxcbiAgICAgICAgXCJyZWRpcmVjdF91cmlcIjogZW5jb2RlVVJJKHJlZGlyZWN0VXJpKVxuICAgIH07XG5cbiAgICBpZihmbG93ID09PSBSRVNQT05TRV9UWVBFX0NPREUpe1xuICAgICAgICBjb25zdCBwa2NlID0gY3JlYXRlUEtDRUNvZGVzKClcbiAgICAgICAgcHV0T25Mb2NhbFN0b3JhZ2UoUEtDRSwgSlNPTi5zdHJpbmdpZnkocGtjZSkpO1xuICAgICAgICBxdWVyeVsnY29kZV9jaGFsbGVuZ2UnXSA9IHBrY2UuY29kZUNoYWxsZW5nZTtcbiAgICAgICAgcXVlcnlbJ2NvZGVfY2hhbGxlbmdlX21ldGhvZCddID0gJ1MyNTYnO1xuICAgICAgICBxdWVyeVsnYXBwcm92YWxfcHJvbXB0J10gPSAnZm9yY2UnO1xuICAgIH1cblxuICAgIGlmIChwcm9tcHQpIHtcbiAgICAgICAgcXVlcnlbJ3Byb21wdCddID0gcHJvbXB0O1xuICAgIH1cblxuICAgIGlmICh0b2tlbklkSGludCkge1xuICAgICAgICBxdWVyeVsnaWRfdG9rZW5faGludCddID0gdG9rZW5JZEhpbnQ7XG4gICAgfVxuXG4gICAgaWYgKHByb3ZpZGVyKSB7XG4gICAgICAgIHF1ZXJ5Wydwcm92aWRlciddID0gcHJvdmlkZXI7XG4gICAgfVxuXG4gICAgdXJsID0gdXJsLnF1ZXJ5KHF1ZXJ5KTtcbiAgICAvL2NvbnNvbGUubG9nKGBnZXRBdXRoVXJsICR7dXJsLnRvU3RyaW5nKCl9YCk7XG4gICAgcmV0dXJuIHVybDtcbn1cblxuZXhwb3J0IGNvbnN0IGdldExvZ291dFVybCA9IChpZFRva2VuKSA9PiB7XG4gICAgbGV0IGJhc2VVcmwgPSBnZXRPQXV0aDJJRFBCYXNlVXJsKCk7XG4gICAgbGV0IG9hdXRoMkNsaWVudElkID0gZ2V0T0F1dGgyQ2xpZW50SWQoKTtcbiAgICBsZXQgdXJsID0gVVJJKGAke2Jhc2VVcmx9L29hdXRoMi9lbmQtc2Vzc2lvbmApO1xuICAgIGxldCBzdGF0ZSA9IGNyZWF0ZU5vbmNlKE5PTkNFX0xFTik7XG4gICAgbGV0IHBvc3RMb2dPdXRVcmkgPSBnZXRPcmlnaW4oKSArICcvYXV0aC9sb2dvdXQnO1xuICAgIC8vIHN0b3JlIG5vbmNlIHRvIGNoZWNrIGl0IGxhdGVyXG4gICAgcHV0T25Mb2NhbFN0b3JhZ2UoJ3Bvc3RfbG9nb3V0X3N0YXRlJywgc3RhdGUpO1xuICAgIC8qKlxuICAgICAqIHBvc3RfbG9nb3V0X3JlZGlyZWN0X3VyaSBzaG91bGQgYmUgbGlzdGVkIG9uIG9hdXRoMiBjbGllbnQgc2V0dGluZ3NcbiAgICAgKiBvbiBJRFBcbiAgICAgKiBcIlNlY3VyaXR5IFNldHRpbmdzXCIgVGFiIC0+IExvZ291dCBPcHRpb25zIC0+IFBvc3QgTG9nb3V0IFVyaXNcbiAgICAgKi9cbiAgICByZXR1cm4gdXJsLnF1ZXJ5KHtcbiAgICAgICAgXCJpZF90b2tlbl9oaW50XCI6IGlkVG9rZW4sXG4gICAgICAgIFwicG9zdF9sb2dvdXRfcmVkaXJlY3RfdXJpXCI6IGVuY29kZVVSSShwb3N0TG9nT3V0VXJpKSxcbiAgICAgICAgXCJjbGllbnRfaWRcIjogZW5jb2RlVVJJKG9hdXRoMkNsaWVudElkKSxcbiAgICAgICAgXCJzdGF0ZVwiOiBzdGF0ZSxcbiAgICB9KTtcbn1cblxuY29uc3QgY3JlYXRlTm9uY2UgPSAobGVuKSA9PiB7XG4gICAgbGV0IHBvc3NpYmxlID0gXCJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OVwiO1xuICAgIGxldCBub25jZSA9ICcnO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgbm9uY2UgKz0gcG9zc2libGUuY2hhckF0KE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIHBvc3NpYmxlLmxlbmd0aCkpO1xuICAgIH1cbiAgICByZXR1cm4gbm9uY2U7XG59XG5cbmV4cG9ydCBjb25zdCBkb0xvZ2luID0gKGJhY2tVcmwgPSBudWxsLCBwcm92aWRlciA9IG51bGwsIHByb21wdCA9ICdjb25zZW50JykgPT4ge1xuICAgIGxldCB1cmwgPSBnZXRBdXRoVXJsKGJhY2tVcmwsIHByb21wdCAsbnVsbCwgcHJvdmlkZXIpO1xuICAgIGxldCBsb2NhdGlvbiA9IGdldEN1cnJlbnRMb2NhdGlvbigpXG4gICAgbG9jYXRpb24ucmVwbGFjZSh1cmwudG9TdHJpbmcoKSk7XG59XG5cbmV4cG9ydCBjb25zdCBkb0xvZ2luQmFzaWNMb2dpbiA9IChiYWNrVXJsID0gbnVsbCkgPT4ge1xuICAgIGRvTG9naW4oYmFja1VybCwgbnVsbCwgbnVsbCk7XG59XG5cbmNvbnN0IGNyZWF0ZVBLQ0VDb2RlcyA9ICgpID0+IHtcbiAgICBjb25zdCBjb2RlVmVyaWZpZXIgPSBiYXNlNjRVUkxFbmNvZGUocmFuZG9tQnl0ZXMoNjQpKVxuICAgIGNvbnN0IGNvZGVDaGFsbGVuZ2UgPSBiYXNlNjRVUkxFbmNvZGUoc2hhMjU2KEJ1ZmZlci5mcm9tKGNvZGVWZXJpZmllcikpKVxuICAgIGNvbnN0IGNyZWF0ZWRBdCA9IG5ldyBEYXRlKClcbiAgICBjb25zdCBjb2RlUGFpciA9IHtcbiAgICAgICAgY29kZVZlcmlmaWVyLFxuICAgICAgICBjb2RlQ2hhbGxlbmdlLFxuICAgICAgICBjcmVhdGVkQXRcbiAgICB9XG4gICAgcmV0dXJuIGNvZGVQYWlyXG59XG5cbmV4cG9ydCBjb25zdCBlbWl0QWNjZXNzVG9rZW4gPSBhc3luYyAoY29kZSwgYmFja1VybCA9IG51bGwpID0+IHtcblxuICAgIGxldCBiYXNlVXJsID0gZ2V0T0F1dGgySURQQmFzZVVybCgpO1xuICAgIGxldCBvYXV0aDJDbGllbnRJZCA9IGdldE9BdXRoMkNsaWVudElkKCk7XG4gICAgbGV0IHJlZGlyZWN0VXJpID0gZ2V0QXV0aENhbGxiYWNrKCk7XG4gICAgbGV0IHBrY2UgPSBKU09OLnBhcnNlKGdldEZyb21Mb2NhbFN0b3JhZ2UoUEtDRSwgdHJ1ZSkpO1xuXG4gICAgaWYgKGJhY2tVcmwgIT0gbnVsbClcbiAgICAgICAgcmVkaXJlY3RVcmkgKz0gYD9CYWNrVXJsPSR7ZW5jb2RlVVJJKGJhY2tVcmwpfWA7XG5cbiAgICBjb25zdCBwYXlsb2FkID0ge1xuICAgICAgICAnY29kZScgOiAgY29kZSxcbiAgICAgICAgJ2dyYW50X3R5cGUnIDogJ2F1dGhvcml6YXRpb25fY29kZScsXG4gICAgICAgICdjb2RlX3ZlcmlmaWVyJyA6IHBrY2UuY29kZVZlcmlmaWVyLFxuICAgICAgICBcImNsaWVudF9pZFwiOiBlbmNvZGVVUkkob2F1dGgyQ2xpZW50SWQpLFxuICAgICAgICBcInJlZGlyZWN0X3VyaVwiOiBlbmNvZGVVUkkocmVkaXJlY3RVcmkpXG4gICAgfTtcblxuICAgIHRyeSB7XG4gICAgICAgIC8vY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBodHRwLnBvc3QoYCR7YmFzZVVybH0vb2F1dGgyL3Rva2VuYCwgcGF5bG9hZCk7XG4gICAgICAgIC8vY29uc3Qge2JvZHk6IHthY2Nlc3NfdG9rZW4sIHJlZnJlc2hfdG9rZW4sIGlkX3Rva2VuLCBleHBpcmVzX2lufX0gPSByZXNwb25zZTtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaChgJHtiYXNlVXJsfS9vYXV0aDIvdG9rZW5gLCB7XG4gICAgICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICAgICAnQWNjZXB0JzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbidcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBib2R5OiBKU09OLnN0cmluZ2lmeShwYXlsb2FkKVxuICAgICAgICB9KS5jYXRjaChmdW5jdGlvbihlcnJvcikge1xuICAgICAgICAgICAgY29uc29sZS5sb2coJ1JlcXVlc3QgZmFpbGVkOicsIGVycm9yLm1lc3NhZ2UpO1xuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QganNvbiA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKTtcbiAgICAgICAgbGV0IHthY2Nlc3NfdG9rZW4sIHJlZnJlc2hfdG9rZW4sIGlkX3Rva2VuLCBleHBpcmVzX2luLCBlcnJvciwgZXJyb3JfZGVzY3JpcHRpb259ID0ganNvbjtcbiAgICAgICAgcmV0dXJuIHthY2Nlc3NfdG9rZW4sIHJlZnJlc2hfdG9rZW4sIGlkX3Rva2VuLCBleHBpcmVzX2luLCBlcnJvciwgZXJyb3JfZGVzY3JpcHRpb259XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGVycik7XG4gICAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGNsZWFyQWNjZXNzVG9rZW4gPSBhc3luYyAoKSA9PiB7XG4gICAgaWYgKFxuICAgICAgICBhd2FpdCByZXRyeVByb21pc2UoXG4gICAgICAgICAgICAoKSA9PiBsb2NrLmFjcXVpcmVMb2NrKEdFVF9UT0tFTl9TSUxFTlRMWV9MT0NLX0tFWSwgNTAwMCksXG4gICAgICAgICAgICAxMFxuICAgICAgICApXG4gICAgKSB7XG4gICAgICAgIHRyeSB7XG5cbiAgICAgICAgICAgIGxldCBhdXRoSW5mbyA9ICBnZXRBdXRoSW5mbygpO1xuXG4gICAgICAgICAgICBpZiggIWF1dGhJbmZvICkge1xuICAgICAgICAgICAgICAgIHRocm93IEVycm9yKFwiTWlzc2luZyBBdXRoIGluZm8uXCIpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBsZXQgeyBhY2Nlc3NUb2tlbiwgZXhwaXJlc0luLCBhY2Nlc3NUb2tlblVwZGF0ZWRBdCwgcmVmcmVzaFRva2VuIH0gPSBhdXRoSW5mbztcblxuICAgICAgICAgICAgc3RvcmVBdXRoSW5mbyhudWxsLCAwICwgcmVmcmVzaFRva2VuIClcblxuICAgICAgICB9XG4gICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgYXdhaXQgbG9jay5yZWxlYXNlTG9jayhHRVRfVE9LRU5fU0lMRU5UTFlfTE9DS19LRVkpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5leHBvcnQgY29uc3QgZ2V0QWNjZXNzVG9rZW4gPSBhc3luYyAoKSA9PiB7XG5cbiAgICBpZiAoXG4gICAgICAgIGF3YWl0IHJldHJ5UHJvbWlzZShcbiAgICAgICAgICAgICgpID0+IGxvY2suYWNxdWlyZUxvY2soR0VUX1RPS0VOX1NJTEVOVExZX0xPQ0tfS0VZLCA1MDAwKSxcbiAgICAgICAgICAgIDEwXG4gICAgICAgIClcbiAgICApIHtcbiAgICAgICAgdHJ5IHtcblxuICAgICAgICAgICAgbGV0IGF1dGhJbmZvID0gIGdldEF1dGhJbmZvKCk7XG5cbiAgICAgICAgICAgIGlmKCAhYXV0aEluZm8gKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoXCJNaXNzaW5nIEF1dGggaW5mby5cIik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGxldCB7IGFjY2Vzc1Rva2VuLCBleHBpcmVzSW4sIGFjY2Vzc1Rva2VuVXBkYXRlZEF0LCByZWZyZXNoVG9rZW4gfSA9IGF1dGhJbmZvO1xuICAgICAgICAgICAgbGV0IGZsb3cgPSBnZXRPQXV0aDJGbG93KCk7XG4gICAgICAgICAgICAvLyBjaGVjayBsaWZlIHRpbWVcbiAgICAgICAgICAgIGxldCBub3cgPSBNYXRoLmZsb29yKERhdGUubm93KCkgLyAxMDAwKTtcbiAgICAgICAgICAgIGxldCB0aW1lRWxhcHNlZFNlY3MgPSAobm93IC0gYWNjZXNzVG9rZW5VcGRhdGVkQXQpO1xuICAgICAgICAgICAgZXhwaXJlc0luID0gKGV4cGlyZXNJbiAtIEFDQ0VTU19UT0tFTl9TS0VXX1RJTUUpO1xuICAgICAgICAgICAgLy9jb25zb2xlLmxvZyhgZ2V0QWNjZXNzVG9rZW4gbm93ICR7bm93fSBhY2Nlc3NUb2tlblVwZGF0ZWRBdCAke2FjY2Vzc1Rva2VuVXBkYXRlZEF0fSB0aW1lRWxhcHNlZFNlY3MgJHt0aW1lRWxhcHNlZFNlY3N9IGV4cGlyZXNJbiAke2V4cGlyZXNJbn0uYCk7XG5cbiAgICAgICAgICAgIGlmICh0aW1lRWxhcHNlZFNlY3MgPiBleHBpcmVzSW4gfHwgYWNjZXNzVG9rZW4gPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGBnZXRBY2Nlc3NUb2tlbiBhY2Nlc3MgdG9rZW4gZXhwaXJlZGApXG4gICAgICAgICAgICAgICAgaWYoZmxvdyA9PT0gUkVTUE9OU0VfVFlQRV9DT0RFICYmIHVzZU9BdXRoMlJlZnJlc2hUb2tlbigpKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vY29uc29sZS5sb2coJ2dldEFjY2Vzc1Rva2VuIGdldHRpbmcgbmV3IGFjY2VzcyB0b2tlbiwgYWNjZXNzIHRva2VuIGdvdCB2b2lkJyk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghcmVmcmVzaFRva2VuKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjbGVhckF1dGhJbmZvKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBFcnJvcihcIm1pc3NpbmcgUmVmcmVzaCBUb2tlblwiKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCByZWZyZXNoQWNjZXNzVG9rZW4ocmVmcmVzaFRva2VuKTtcbiAgICAgICAgICAgICAgICAgICAgbGV0IHthY2Nlc3NfdG9rZW4sIGV4cGlyZXNfaW4sIHJlZnJlc2hfdG9rZW59ID0gcmVzcG9uc2U7XG4gICAgICAgICAgICAgICAgICAgIC8vY29uc29sZS5sb2coYGdldEFjY2Vzc1Rva2VuIGFjY2Vzc190b2tlbiAke2FjY2Vzc190b2tlbn0gZXhwaXJlc19pbiAke2V4cGlyZXNfaW59IHJlZnJlc2hfdG9rZW4gJHtyZWZyZXNoX3Rva2VufWApO1xuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHJlZnJlc2hfdG9rZW4gPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZWZyZXNoX3Rva2VuID0gbnVsbDsgLy8gbm90IHVzaW5nIHJvdGF0ZSBwb2xpY3lcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBzdG9yZUF1dGhJbmZvKGFjY2Vzc190b2tlbiwgZXhwaXJlc19pbiwgcmVmcmVzaF90b2tlbik7XG4gICAgICAgICAgICAgICAgICAgIC8vY29uc29sZS5sb2coYGdldEFjY2Vzc1Rva2VuIGFjY2Vzc190b2tlbiAke2FjY2Vzc190b2tlbn0gW05FV11gKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGFjY2Vzc190b2tlbjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2xlYXJBdXRoSW5mbygpO1xuICAgICAgICAgICAgICAgIHRocm93IEVycm9yKFwiQWNjZXNzIFRva2VuIEV4cGlyZWQuXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy9jb25zb2xlLmxvZyhgZ2V0QWNjZXNzVG9rZW4gYWNjZXNzX3Rva2VuICR7YWNjZXNzVG9rZW59IFtDQUNIRURdYCk7XG4gICAgICAgICAgICByZXR1cm4gYWNjZXNzVG9rZW47XG4gICAgICAgIH1cbiAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICBhd2FpdCBsb2NrLnJlbGVhc2VMb2NrKEdFVF9UT0tFTl9TSUxFTlRMWV9MT0NLX0tFWSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgdGhyb3cgRXJyb3IoXCJMb2NrIGFjcXVpcmUgZXJyb3IuXCIpO1xufVxuXG5leHBvcnQgY29uc3QgcmVmcmVzaEFjY2Vzc1Rva2VuID0gYXN5bmMgKHJlZnJlc2hfdG9rZW4pID0+IHtcblxuICAgIGxldCBiYXNlVXJsID0gZ2V0T0F1dGgySURQQmFzZVVybCgpO1xuICAgIGxldCBvYXV0aDJDbGllbnRJZCA9IGdldE9BdXRoMkNsaWVudElkKCk7XG5cbiAgICBjb25zdCBwYXlsb2FkID0ge1xuICAgICAgICAnZ3JhbnRfdHlwZScgOiAncmVmcmVzaF90b2tlbicsXG4gICAgICAgIFwiY2xpZW50X2lkXCI6IGVuY29kZVVSSShvYXV0aDJDbGllbnRJZCksXG4gICAgICAgIFwicmVmcmVzaF90b2tlblwiOiByZWZyZXNoX3Rva2VuXG4gICAgfTtcblxuICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2goYCR7YmFzZVVybH0vb2F1dGgyL3Rva2VuYCwge1xuICAgICAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAgICAgJ0FjY2VwdCc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkocGF5bG9hZClcbiAgICAgICAgfSkudGhlbigocmVzcG9uc2UpID0+IHtcbiAgICAgICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPT09IDQwMCl7XG4gICAgICAgICAgICAgICAgbGV0IGN1cnJlbnRMb2NhdGlvbiA9IGdldEN1cnJlbnRQYXRoTmFtZSgpO1xuICAgICAgICAgICAgICAgIHNldFNlc3Npb25DbGVhcmluZ1N0YXRlKHRydWUpO1xuICAgICAgICAgICAgICAgIHRocm93IEVycm9yKGAke3Jlc3BvbnNlLnN0YXR1c30gLSAke3Jlc3BvbnNlLnN0YXR1c1RleHR9YCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcmVzcG9uc2U7XG5cbiAgICAgICAgfSkuY2F0Y2goZnVuY3Rpb24oZXJyb3IpIHtcbiAgICAgICAgICAgIHRocm93IEVycm9yKGBSZXF1ZXN0IGZhaWxlZDogICR7ZXJyb3IubWVzc2FnZX1gKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3QganNvbiA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKTtcbiAgICAgICAgbGV0IHthY2Nlc3NfdG9rZW4sIHJlZnJlc2hfdG9rZW4sIGV4cGlyZXNfaW59ID0ganNvbjtcbiAgICAgICAgcmV0dXJuIHthY2Nlc3NfdG9rZW4sIHJlZnJlc2hfdG9rZW4sIGV4cGlyZXNfaW59XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGVycik7XG4gICAgICAgIHRocm93IGVycjtcbiAgICB9XG59XG5cbmV4cG9ydCBjb25zdCBzdG9yZUF1dGhJbmZvID0gKGFjY2Vzc1Rva2VuLCBleHBpcmVzSW4sIHJlZnJlc2hUb2tlbiA9IG51bGwsIGlkVG9rZW4gPSBudWxsKSA9PiB7XG5cbiAgICBsZXQgZm9ybWVyQXV0aEluZm8gPSBnZXRBdXRoSW5mbygpO1xuXG4gICAgbGV0IGF1dGhJbmZvID0ge1xuICAgICAgICBhY2Nlc3NUb2tlbiA6IGFjY2Vzc1Rva2VuLFxuICAgICAgICBleHBpcmVzSW46IGV4cGlyZXNJbixcbiAgICAgICAgYWNjZXNzVG9rZW5VcGRhdGVkQXQgOiBNYXRoLmZsb29yKERhdGUubm93KCkgLyAxMDAwKSxcbiAgICB9O1xuXG4gICAgaWYocmVmcmVzaFRva2VuID09PSBudWxsICYmIGZvcm1lckF1dGhJbmZvKXtcbiAgICAgICAgcmVmcmVzaFRva2VuID0gZm9ybWVyQXV0aEluZm8ucmVmcmVzaFRva2VuO1xuICAgIH1cblxuICAgIGlmKGlkVG9rZW4gPT09IG51bGwgJiYgZm9ybWVyQXV0aEluZm8pe1xuICAgICAgICBpZFRva2VuID0gZm9ybWVyQXV0aEluZm8uaWRUb2tlbjtcbiAgICB9XG5cbiAgICBpZihyZWZyZXNoVG9rZW4pe1xuICAgICAgICBhdXRoSW5mb1sncmVmcmVzaFRva2VuJ10gPSByZWZyZXNoVG9rZW47XG4gICAgfVxuXG4gICAgaWYoaWRUb2tlbil7XG4gICAgICAgIGF1dGhJbmZvWydpZFRva2VuJ10gPSBpZFRva2VuO1xuICAgIH1cblxuICAgIHB1dE9uTG9jYWxTdG9yYWdlKEFVVEhfSU5GTywgSlNPTi5zdHJpbmdpZnkoYXV0aEluZm8pKTtcbn1cblxuZXhwb3J0IGNvbnN0IGdldEF1dGhJbmZvID0gKCkgPT4ge1xuICAgIGxldCByZXMgPSBnZXRGcm9tTG9jYWxTdG9yYWdlKEFVVEhfSU5GTywgZmFsc2UpXG4gICAgaWYocmVzID09PSBudWxsKSByZXR1cm4gbnVsbDtcbiAgICByZXR1cm4gSlNPTi5wYXJzZShyZXMpO1xufVxuXG5leHBvcnQgY29uc3QgY2xlYXJBdXRoSW5mbyA9ICgpID0+IHtcbiAgICBpZih0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyl7XG4gICAgICAgIHJlbW92ZUZyb21Mb2NhbFN0b3JhZ2UoQVVUSF9JTkZPKTtcbiAgICAgICAgcmVtb3ZlRnJvbUxvY2FsU3RvcmFnZShOT05DRSk7XG4gICAgICAgIHJlbW92ZUZyb21Mb2NhbFN0b3JhZ2UoUEtDRSk7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0SWRUb2tlbiA9ICgpID0+IHtcbiAgICBpZih0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICBjb25zdCBhdXRoSW5mbyA9IGdldEF1dGhJbmZvKCk7XG4gICAgICAgIGlmKGF1dGhJbmZvKXtcbiAgICAgICAgICAgIHJldHVybiBhdXRoSW5mby5pZFRva2VuO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRPQXV0aDJDbGllbnRJZCA9ICgpID0+IHtcbiAgICBpZih0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICByZXR1cm4gd2luZG93Lk9BVVRIMl9DTElFTlRfSUQ7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldE9BdXRoMkZsb3cgPSAoKSA9PiB7XG4gICAgaWYodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgcmV0dXJuIHdpbmRvdy5PQVVUSDJfRkxPVyB8fCBcInRva2VuIGlkX3Rva2VuXCI7XG4gICAgfVxuICAgIHJldHVybiBcInRva2VuIGlkX3Rva2VuXCI7XG59XG5cbmV4cG9ydCBjb25zdCB1c2VPQXV0aDJSZWZyZXNoVG9rZW4gPSAoKSA9PiB7XG4gICAgaWYodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBCb29sZWFuKHdpbmRvdy5PQVVUSDJfVVNFX1JFRlJFU0hfVE9LRU4gfHwgdHJ1ZSk7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xufVxuXG5leHBvcnQgY29uc3QgZ2V0T0F1dGgySURQQmFzZVVybCA9ICgpID0+IHtcbiAgICBpZih0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICByZXR1cm4gd2luZG93LklEUF9CQVNFX1VSTDtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0T0F1dGgyU2NvcGVzID0gKCkgPT4ge1xuICAgIGlmKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHJldHVybiB3aW5kb3cuU0NPUEVTO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbn07XG5cbmV4cG9ydCBjb25zdCBpbml0TG9nT3V0ID0gKCkgPT4ge1xuICAgIGxldCBsb2NhdGlvbiA9IGdldEN1cnJlbnRMb2NhdGlvbigpO1xuICAgIGxvY2F0aW9uLnJlcGxhY2UoZ2V0TG9nb3V0VXJsKGdldElkVG9rZW4oKSkudG9TdHJpbmcoKSk7XG59XG5cbmV4cG9ydCBjb25zdCB2YWxpZGF0ZUlkVG9rZW4gPSAoaWRUb2tlbiwgaXNzdWVyLCBhdWRpZW5jZSkgPT4ge1xuXG4gICAgbGV0IHZlcmlmaWVyID0gbmV3IElkVG9rZW5WZXJpZmllcih7XG4gICAgICAgIGlzc3VlcjogaXNzdWVyLFxuICAgICAgICBhdWRpZW5jZTogYXVkaWVuY2VcbiAgICB9KTtcblxuICAgIGxldCBzdG9yZWROb25jZSA9IGdldEZyb21Mb2NhbFN0b3JhZ2UoTk9OQ0UsIHRydWUpO1xuICAgIGxldCBqd3QgPSB2ZXJpZmllci5kZWNvZGUoaWRUb2tlbik7XG4gICAgbGV0IGFsZyA9IGp3dC5oZWFkZXIuYWxnO1xuICAgIGxldCBraWQgPSBqd3QuaGVhZGVyLmtpZDtcbiAgICBsZXQgYXVkID0gand0LnBheWxvYWQuYXVkO1xuICAgIGxldCBpc3MgPSBqd3QucGF5bG9hZC5pc3M7XG4gICAgbGV0IGV4cCA9IGp3dC5wYXlsb2FkLmV4cDtcbiAgICBsZXQgbmJmID0gand0LnBheWxvYWQubmJmO1xuICAgIGxldCB0bm9uY2UgPSBqd3QucGF5bG9hZC5ub25jZSB8fCBudWxsO1xuXG4gICAgcmV0dXJuIHRub25jZSA9PSBzdG9yZWROb25jZSAmJiBhdWQgPT0gYXVkaWVuY2UgJiYgaXNzID09IGlzc3Vlcjtcbn1cblxuZXhwb3J0IGNvbnN0IHBhc3N3b3JkbGVzc1N0YXJ0ID0gKHBhcmFtcykgPT4ge1xuXG4gICAgbGV0IG9hdXRoMkNsaWVudElkID0gZ2V0T0F1dGgyQ2xpZW50SWQoKTtcbiAgICBsZXQgc2NvcGVzID0gZ2V0T0F1dGgyU2NvcGVzKCk7XG4gICAgbGV0IG5vbmNlID0gY3JlYXRlTm9uY2UoTk9OQ0VfTEVOKTtcbiAgICAvLyBzdG9yZSBub25jZSB0byBjaGVjayBpdCBsYXRlclxuICAgIHB1dE9uTG9jYWxTdG9yYWdlKE5PTkNFLCBub25jZSk7XG4gICAgbGV0IGJhc2VVcmwgPSBnZXRPQXV0aDJJRFBCYXNlVXJsKCk7XG4gICAgbGV0IHVybCA9IFVSSShgJHtiYXNlVXJsfS9vYXV0aDIvYXV0aGApO1xuXG4gICAgbGV0IHBheWxvYWQgPSB7XG4gICAgICAgIFwicmVzcG9uc2VfdHlwZVwiOiBcIm90cFwiLFxuICAgICAgICBcInNjb3BlXCI6IGVuY29kZVVSSShzY29wZXMpLFxuICAgICAgICBcIm5vbmNlXCI6IG5vbmNlLFxuICAgICAgICBcImNsaWVudF9pZFwiOiBlbmNvZGVVUkkob2F1dGgyQ2xpZW50SWQpLFxuICAgICAgICBcImNvbm5lY3Rpb25cIjogcGFyYW1zLmNvbm5lY3Rpb24gfHwgXCJlbWFpbFwiLFxuICAgICAgICBcInNlbmRcIjogcGFyYW1zLnNlbmQgfHwgXCJjb2RlXCIsXG4gICAgfTtcblxuICAgIGlmKHBhcmFtcy5oYXNPd25Qcm9wZXJ0eSgnZW1haWwnKSl7XG4gICAgICAgIHBheWxvYWRbXCJlbWFpbFwiXSA9IGVuY29kZVVSSUNvbXBvbmVudChwYXJhbXMuZW1haWwpO1xuICAgIH1cblxuICAgIGlmKHBhcmFtcy5oYXNPd25Qcm9wZXJ0eSgncGhvbmVfbnVtYmVyJykpe1xuICAgICAgICBwYXlsb2FkW1wicGhvbmVfbnVtYmVyXCJdID0gZW5jb2RlVVJJQ29tcG9uZW50KHBhcmFtcy5waG9uZV9udW1iZXIpO1xuICAgIH1cblxuICAgIGxldCByZXEgPSBodHRwLnBvc3QodXJsLnRvU3RyaW5nKCkpO1xuXG4gICAgcmV0dXJuIHJlcS5zZW5kKHBheWxvYWQpLnRoZW4oKHJlcykgPT4ge1xuICAgICAgICBsZXQganNvbiA9IHJlcy5ib2R5O1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHtyZXNwb25zZTpqc29ufSk7XG4gICAgfSkuY2F0Y2goKGVycikgPT4ge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZXJyKTtcbiAgICB9KTtcblxufVxuXG5leHBvcnQgY29uc3QgcGFzc3dvcmRsZXNzTG9naW4gPSAocGFyYW1zKSA9PiAoZGlzcGF0Y2gpID0+IHtcblxuICAgIGxldCBvYXV0aDJDbGllbnRJZCA9IGdldE9BdXRoMkNsaWVudElkKCk7XG4gICAgbGV0IHNjb3BlcyA9IGdldE9BdXRoMlNjb3BlcygpO1xuICAgIGxldCBiYXNlVXJsID0gZ2V0T0F1dGgySURQQmFzZVVybCgpO1xuICAgIGxldCB1cmwgPSBVUkkoYCR7YmFzZVVybH0vb2F1dGgyL3Rva2VuYCk7XG5cbiAgICBpZighcGFyYW1zLmhhc093blByb3BlcnR5KFwib3RwXCIpKXtcbiAgICAgICAgdGhyb3cgRXJyb3IoXCJvdHAgcGFyYW0gaXMgbWFuZGF0b3J5LlwiKTtcbiAgICB9XG5cbiAgICBsZXQgcGF5bG9hZCA9IHtcbiAgICAgICAgXCJncmFudF90eXBlXCI6IFwicGFzc3dvcmRsZXNzXCIsXG4gICAgICAgIFwiY29ubmVjdGlvblwiOiBwYXJhbXMuY29ubmVjdGlvbiB8fCBcImVtYWlsXCIsXG4gICAgICAgIFwic2NvcGVcIjogZW5jb2RlVVJJKHNjb3BlcyksXG4gICAgICAgIFwiY2xpZW50X2lkXCI6IGVuY29kZVVSSShvYXV0aDJDbGllbnRJZCksXG4gICAgICAgIFwib3RwXCI6IHBhcmFtcy5vdHBcbiAgICB9O1xuXG4gICAgaWYocGFyYW1zLmhhc093blByb3BlcnR5KCdlbWFpbCcpKXtcbiAgICAgICAgcGF5bG9hZFtcImVtYWlsXCJdID0gZW5jb2RlVVJJQ29tcG9uZW50KHBhcmFtcy5lbWFpbCk7XG4gICAgfVxuXG4gICAgaWYocGFyYW1zLmhhc093blByb3BlcnR5KCdwaG9uZV9udW1iZXInKSl7XG4gICAgICAgIHBheWxvYWRbXCJwaG9uZV9udW1iZXJcIl0gPSBlbmNvZGVVUklDb21wb25lbnQocGFyYW1zLnBob25lX251bWJlcik7XG4gICAgfVxuXG4gICAgbGV0IHJlcSA9IGh0dHAucG9zdCh1cmwudG9TdHJpbmcoKSk7XG5cbiAgICByZXR1cm4gcmVxLnNlbmQocGF5bG9hZCkudGhlbigocmVzKSA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICAvLyBub3cgd2UgZ290IHRva2VuXG4gICAgICAgICAgICBsZXQganNvbiA9IHJlcy5ib2R5O1xuICAgICAgICAgICAgbGV0IHthY2Nlc3NfdG9rZW4sIGV4cGlyZXNfaW4sIHJlZnJlc2hfdG9rZW4sIGlkX3Rva2VufSA9IGpzb247XG5cbiAgICAgICAgICAgIGlmICh0eXBlb2YgcmVmcmVzaF90b2tlbiA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgICByZWZyZXNoX3Rva2VuID0gbnVsbDsgLy8gbm90IHVzaW5nIHJvdGF0ZSBwb2xpY3lcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHR5cGVvZiBpZF90b2tlbiA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgICBpZF90b2tlbiA9IG51bGw7IC8vIG5vdCB1c2luZyByb3RhdGUgcG9saWN5XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIHZlcmlmeSBpZCB0b2tlblxuXG4gICAgICAgICAgICBpZiAoaWRfdG9rZW4pIHtcbiAgICAgICAgICAgICAgICBpZiAoIXZhbGlkYXRlSWRUb2tlbihpZF90b2tlbiwgYmFzZVVybCwgb2F1dGgyQ2xpZW50SWQpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IEVycm9yKFwiaWQgdG9rZW4gaXMgbm90IHZhbGlkLlwiKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHN0b3JlQXV0aEluZm8oYWNjZXNzX3Rva2VuLCBleHBpcmVzX2luLCByZWZyZXNoX3Rva2VuLCBpZF90b2tlbik7XG5cbiAgICAgICAgICAgIGlmIChkaXNwYXRjaCkge1xuICAgICAgICAgICAgICAgIGRpc3BhdGNoKHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogU0VUX0xPR0dFRF9VU0VSLFxuICAgICAgICAgICAgICAgICAgICBwYXlsb2FkOiB7c2Vzc2lvblN0YXRlOiBudWxsfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHtyZXNwb25zZToganNvbn0pO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoKGUpe1xuICAgICAgICAgICAgY29uc29sZS5sb2coZSk7XG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZSk7XG4gICAgICAgIH1cbiAgICB9KS5jYXRjaCgoZXJyKSA9PiB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChlcnIpO1xuICAgIH0pO1xufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjAgT3BlblN0YWNrIEZvdW5kYXRpb25cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqKi9cblxuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7Y29ubmVjdH0gZnJvbSBcInJlYWN0LXJlZHV4XCI7XG5cbmltcG9ydCB7XG4gICAgZG9Mb2dvdXQsXG4gICAgU0VTU0lPTl9TVEFURV9TVEFUVVNfQ0hBTkdFRCxcbiAgICBTRVNTSU9OX1NUQVRFX1NUQVRVU19FUlJPUixcbiAgICBTRVNTSU9OX1NUQVRFX1NUQVRVU19VTkNIQU5HRUQsXG4gICAgdXBkYXRlU2Vzc2lvblN0YXRlU3RhdHVzLFxuICAgIG9uVXNlckF1dGhcbn0gZnJvbSBcIi4uL2FjdGlvbnNcIjtcblxuaW1wb3J0IHtcbiAgICBnZXRBdXRoVXJsLFxuICAgIGluaXRMb2dPdXRcbn0gZnJvbSBcIi4uL21ldGhvZHNcIjtcblxuaW1wb3J0IFVSSSBmcm9tIFwidXJpanNcIlxuLy8gaW4gbWludXRlc1xuY29uc3QgQ0hFQ0tfU0VTU0lPTl9JTlRFUlZBTCA9ICgxMDAwICogNjApICogMzA7XG5cbmNsYXNzIE9QU2Vzc2lvbkNoZWNrZXIgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICAgICAgLy9jb25zb2xlLmxvZyhcIk9QU2Vzc2lvbkNoZWNrZXI6OmNvbnN0cnVjdG9yXCIpO1xuICAgICAgICBzdXBlcihwcm9wcyk7XG4gICAgICAgIHRoaXMuc3RhdGUgPXtcbiAgICAgICAgICAgIG9wRnJhbWVfc3JjOiBcIlwiLFxuICAgICAgICAgICAgcnBDaGVja1Nlc3Npb25TdGF0ZUZyYW1lX3NyYyA6IFwiXCJcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnJlY2VpdmVNZXNzYWdlID0gdGhpcy5yZWNlaXZlTWVzc2FnZS5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLnJlY2VpdmVNZXNzYWdlRnJvbUNoaWxkID0gdGhpcy5yZWNlaXZlTWVzc2FnZUZyb21DaGlsZC5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLnNldFRpbWVyID0gdGhpcy5zZXRUaW1lci5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLmNoZWNrU2Vzc2lvbiA9IHRoaXMuY2hlY2tTZXNzaW9uLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMub25TZXR1cENoZWNrU2Vzc2lvblJQID0gdGhpcy5vblNldHVwQ2hlY2tTZXNzaW9uUlAuYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5ycENoZWNrU2Vzc2lvblN0YXRlRnJhbWVPbkxvYWQgPSB0aGlzLnJwQ2hlY2tTZXNzaW9uU3RhdGVGcmFtZU9uTG9hZC5iaW5kKHRoaXMpO1xuXG4gICAgICAgIHRoaXMub3BGcmFtZSA9IG51bGw7XG4gICAgICAgIHRoaXMucnBDaGVja1Nlc3Npb25TdGF0ZUZyYW1lID0gbnVsbDtcblxuICAgICAgICB0aGlzLnNldE9QRnJhbWVSZWYgPSBlbGVtZW50ID0+IHtcbiAgICAgICAgICAgIHRoaXMub3BGcmFtZSA9IGVsZW1lbnQ7XG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5zZXRDaGVja1Nlc3Npb25TdGF0ZUZyYW1lUmVmID0gZWxlbWVudCA9PiB7XG4gICAgICAgICAgICB0aGlzLnJwQ2hlY2tTZXNzaW9uU3RhdGVGcmFtZSA9IGVsZW1lbnQ7XG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5pbnRlcnZhbCA9IG51bGw7XG4gICAgfVxuXG4gICAgY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgICAgIC8vY29uc29sZS5sb2coYE9QU2Vzc2lvbkNoZWNrZXI6OmNvbXBvbmVudFdpbGxVbm1vdW50YCk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpZiAodGhpcy5pbnRlcnZhbCkge1xuICAgICAgICAgICAgICAgIHdpbmRvdy5jbGVhckludGVydmFsKHRoaXMuaW50ZXJ2YWwpO1xuICAgICAgICAgICAgICAgIHRoaXMuaW50ZXJ2YWwgPSBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21lc3NhZ2UnLCB0aGlzLnJlY2VpdmVNZXNzYWdlRnJvbUNoaWxkLCBmYWxzZSk7XG4gICAgICAgICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm1lc3NhZ2VcIiwgdGhpcy5yZWNlaXZlTWVzc2FnZSwgZmFsc2UpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlKXtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgICAgIGlmKCF0aGlzLnByb3BzLmlzTG9nZ2VkVXNlcikgcmV0dXJuO1xuICAgICAgICAvL2NvbnNvbGUubG9nKFwiT1BTZXNzaW9uQ2hlY2tlcjo6Y29tcG9uZW50RGlkTW91bnRcIik7XG4gICAgICAgIC8vIGFkZCBldmVudCBsaXN0ZW5lciB0byByZWNlaXZlIG1lc3NhZ2VzIGZyb20gaWRwIHRocm91Z2ggT1AgZnJhbWVcbiAgICAgICAgaWYodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIGlmICggd2luZG93LmxvY2F0aW9uICE9PSB3aW5kb3cucGFyZW50LmxvY2F0aW9uICkge1xuICAgICAgICAgICAgICAgIC8vY29uc29sZS5sb2coXCJPUFNlc3Npb25DaGVja2VyOjpjb21wb25lbnREaWRNb3VudCBydW5uaW5nIGluc2lkZSBpZnJhbWUsIHNraXBwaW5nXCIpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIHNldCB1cCBvcCBmcmFtZVxuICAgICAgICAgICAgdGhpcy5vblNldHVwQ2hlY2tTZXNzaW9uUlAoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJwQ2hlY2tTZXNzaW9uU3RhdGVGcmFtZU9uTG9hZChldmVudCl7XG4gICAgICAgIC8vY29uc29sZS5sb2coXCJPUFNlc3Npb25DaGVja2VyOjpycENoZWNrU2Vzc2lvblN0YXRlRnJhbWVPbkxvYWRcIik7XG4gICAgICAgIGxldCBmcmFtZSA9IGV2ZW50LnRhcmdldDtcbiAgICAgICAgaWYodGhpcy5zdGF0ZS5ycENoZWNrU2Vzc2lvblN0YXRlRnJhbWVfc3JjID09IFwiXCIpIHJldHVybjtcblxuICAgICAgICAvL2NvbnNvbGUubG9nKGBPUFNlc3Npb25DaGVja2VyOjpycENoZWNrU2Vzc2lvblN0YXRlRnJhbWVPbkxvYWQgZnJhbWUuc3JjICR7ZnJhbWUuc3JjfWApO1xuICAgICAgICAvLyB0aGlzIGlzIGNhbGxlZCBiYyB3ZSBzZXQgdGhlIFJQIGZyYW1lIHRvIGNoZWNrIHRoZSBzZXNzaW9uIHN0YXRlIHdpdGggcHJvbXA9bm9uZVxuICAgICAgICBpZighZnJhbWUuY29udGVudERvY3VtZW50KXtcbiAgICAgICAgICAgIC8vY29uc29sZS5sb2coXCJPUFNlc3Npb25DaGVja2VyOjpycENoZWNrU2Vzc2lvblN0YXRlRnJhbWVPbkxvYWQgIWZyYW1lLmNvbnRlbnREb2N1bWVudCkgaXMgbnVsbFwiKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdtZXNzYWdlJywgdGhpcy5yZWNlaXZlTWVzc2FnZUZyb21DaGlsZCwgZmFsc2UpO1xuICAgICAgICBsZXQgcmVzdWx0VXJsID0gbmV3IFVSSShmcmFtZS5jb250ZW50RG9jdW1lbnQuVVJMKTtcbiAgICAgICAgLy8gdGVzdCB0aGUgcmVzdWx0IFVybDFxYVxuICAgICAgICBjb25zb2xlLmxvZyhcIk9QU2Vzc2lvbkNoZWNrZXI6OnJwQ2hlY2tTZXNzaW9uU3RhdGVGcmFtZU9uTG9hZCAtIHJlc3VsdFVybCBcIiArIHJlc3VsdFVybCk7XG4gICAgICAgIGxldCBxdWVyeSA9IHJlc3VsdFVybC5zZWFyY2godHJ1ZSk7XG4gICAgICAgIGxldCBmcmFnbWVudCA9IFVSSS5wYXJzZVF1ZXJ5KHJlc3VsdFVybC5mcmFnbWVudCgpKTtcbiAgICAgICAgLy8gY2hlY2sgaWYgd2UgaGF2ZSBzb21lIGVycm9yIG9uIHF1ZXJ5IHN0cmluZyBvciBmcmFnbWVudFxuICAgICAgICBsZXQgZXJyb3IgPSBudWxsO1xuICAgICAgICBpZihxdWVyeS5oYXNPd25Qcm9wZXJ0eShcImVycm9yXCIpKSBlcnJvciA9IHF1ZXJ5WydlcnJvciddO1xuICAgICAgICBpZihmcmFnbWVudC5oYXNPd25Qcm9wZXJ0eShcImVycm9yXCIpKSBlcnJvciA9IGZyYWdtZW50WydlcnJvciddO1xuICAgICAgICBpZihlcnJvcil7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcIk9QU2Vzc2lvbkNoZWNrZXI6OnJwQ2hlY2tTZXNzaW9uU3RhdGVGcmFtZU9uTG9hZCAtIGVycm9yIFwiICsgZXJyb3IpO1xuICAgICAgICAgICAgLy8gY2hlY2sgc2Vzc2lvbiBzdGF0ZSB3aXRoIHByb21wdCBub25lIGZhaWxlZCBkbyBsb2dvdXQ7XG4gICAgICAgICAgICAvL2NvbnNvbGUubG9nKCdPUFNlc3Npb25DaGVja2VyOjpycENoZWNrU2Vzc2lvblN0YXRlRnJhbWVPbkxvYWQgLSBpbml0aWF0aW5nIGxvZ291dCcpO1xuICAgICAgICAgICAgaW5pdExvZ091dCgpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8vIG5vIGVycm9yIHdlIHN0aWxsIGxvZ2dlZCBzbyByZSBpbml0IHRoZSBjaGVja2luZ1xuICAgICAgICAvLyBzZXQgdXAgb3AgZnJhbWVcbiAgICAgICAgLy9jb25zb2xlLmxvZyhgT1BTZXNzaW9uQ2hlY2tlcjo6cnBDaGVja1Nlc3Npb25TdGF0ZUZyYW1lT25Mb2FkIHRoaXMucHJvcHMuc2Vzc2lvblN0YXRlU3RhdHVzICR7dGhpcy5wcm9wcy5zZXNzaW9uU3RhdGVTdGF0dXN9YCk7XG4gICAgICAgIHRoaXMucHJvcHMudXBkYXRlU2Vzc2lvblN0YXRlU3RhdHVzKFNFU1NJT05fU1RBVEVfU1RBVFVTX1VOQ0hBTkdFRCk7XG4gICAgfVxuXG4gICAgY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wcykge1xuICAgICAgICAvL2NvbnNvbGUubG9nKFwiT1BTZXNzaW9uQ2hlY2tlcjo6Y29tcG9uZW50RGlkVXBkYXRlXCIpO1xuICAgICAgICBpZiAodGhpcy5wcm9wcy5zZXNzaW9uU3RhdGVTdGF0dXMgIT09IHByZXZQcm9wcy5zZXNzaW9uU3RhdGVTdGF0dXMpIHtcbiAgICAgICAgICAgIGlmKHRoaXMucHJvcHMuc2Vzc2lvblN0YXRlU3RhdHVzID09PSBTRVNTSU9OX1NUQVRFX1NUQVRVU19DSEFOR0VEKXtcbiAgICAgICAgICAgICAgICAvL2NvbnNvbGUubG9nKFwiT1BTZXNzaW9uQ2hlY2tlcjo6Y29tcG9uZW50RGlkVXBkYXRlIHNlc3Npb25TdGF0ZVN0YXR1cyA9PT0gY2hhbmdlZFwiKTtcbiAgICAgICAgICAgICAgICBsZXQgdXJsID0gZ2V0QXV0aFVybChudWxsLCAnbm9uZScpO1xuICAgICAgICAgICAgICAgIC8vIGh0dHBzOi8vb3BlbmlkLm5ldC9zcGVjcy9vcGVuaWQtY29ubmVjdC1zZXNzaW9uLTFfMC5odG1sI1JQaWZyYW1lXG4gICAgICAgICAgICAgICAgLy8gc2V0IHRoZSBmcmFtZSB0byBpZHBcbiAgICAgICAgICAgICAgICBpZih0aGlzLnN0YXRlLnJwQ2hlY2tTZXNzaW9uU3RhdGVGcmFtZV9zcmMgPT0gXCJcIilcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7Li4udGhpcy5zdGF0ZSwgb3BGcmFtZV9zcmMgOiBcIlwiLCBycENoZWNrU2Vzc2lvblN0YXRlRnJhbWVfc3JjIDogdXJsLnRvU3RyaW5nKCl9KTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZih0aGlzLnByb3BzLnNlc3Npb25TdGF0ZVN0YXR1cyA9PT0gU0VTU0lPTl9TVEFURV9TVEFUVVNfVU5DSEFOR0VEKXtcbiAgICAgICAgICAgICAgICAvL2NvbnNvbGUubG9nKFwiT1BTZXNzaW9uQ2hlY2tlcjo6Y29tcG9uZW50RGlkVXBkYXRlIHNlc3Npb25TdGF0ZVN0YXR1cyA9PT0gdW5jaGFuZ2VkXCIpO1xuICAgICAgICAgICAgICAgIHRoaXMub25TZXR1cENoZWNrU2Vzc2lvblJQKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmKHRoaXMucHJvcHMuc2Vzc2lvblN0YXRlICE9PSBwcmV2UHJvcHMuc2Vzc2lvblN0YXRlKXtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGBPUFNlc3Npb25DaGVja2VyOjpjb21wb25lbnREaWRVcGRhdGUgdXBkYXRlZCBzZXNzaW9uIHN0YXRlICR7dGhpcy5wcm9wcy5zZXNzaW9uU3RhdGV9YCk7XG4gICAgICAgICAgICB0aGlzLm9uU2V0dXBDaGVja1Nlc3Npb25SUCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY2hlY2tTZXNzaW9uKClcbiAgICB7XG5cbiAgICAgICAgbGV0IG5vdyA9IG5ldyBEYXRlKCk7XG4gICAgICAgIGNvbnNvbGUubG9nKGBPUFNlc3Npb25DaGVja2VyOjpjaGVja1Nlc3Npb24gbm93ICR7bm93LnRvTG9jYWxlU3RyaW5nKCl9YCk7XG5cbiAgICAgICAgaWYodGhpcy5vcEZyYW1lID09IG51bGwgKXtcbiAgICAgICAgICAgIC8vY29uc29sZS5sb2coXCJPUFNlc3Npb25DaGVja2VyOjpjaGVja1Nlc3Npb24gLSB0aGlzLm9wRnJhbWUgPT0gbnVsbCBcIik7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZih0aGlzLnByb3BzLnNlc3Npb25TdGF0ZSA9PSBudWxsKXtcbiAgICAgICAgICAgIC8vY29uc29sZS5sb2coXCJPUFNlc3Npb25DaGVja2VyOjpjaGVja1Nlc3Npb24gLSB0aGlzLnByb3BzLnNlc3Npb25TdGF0ZSA9PSBudWxsIFwiKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmKHRoaXMucHJvcHMuY2xpZW50SWQgPT0gbnVsbCl7XG4gICAgICAgICAgICAvL2NvbnNvbGUubG9nKFwiT1BTZXNzaW9uQ2hlY2tlcjo6Y2hlY2tTZXNzaW9uIC0gdGhpcy5wcm9wcy5jbGllbnRJZCA9PSBudWxsIFwiKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCB0YXJnZXRPcmlnaW4gPSB0aGlzLnByb3BzLmlkcEJhc2VVcmw7XG4gICAgICAgIGxldCBmcmFtZSA9IHRoaXMub3BGcmFtZS5jb250ZW50V2luZG93O1xuICAgICAgICBsZXQgbWVzc2FnZSA9IHRoaXMucHJvcHMuY2xpZW50SWQgKyBcIiBcIiArIHRoaXMucHJvcHMuc2Vzc2lvblN0YXRlO1xuICAgICAgICAvL2NvbnNvbGUubG9nKFwiT1BTZXNzaW9uQ2hlY2tlcjo6Y2hlY2tTZXNzaW9uIC0gbWVzc2FnZVwiICsgbWVzc2FnZSk7XG4gICAgICAgIC8vIHBvc3RNZXNzYWdlIHRvIHRoZSBPUCBpZnJhbWVcbiAgICAgICAgZnJhbWUucG9zdE1lc3NhZ2UobWVzc2FnZSwgdGFyZ2V0T3JpZ2luKTtcbiAgICB9XG5cbiAgICBzZXRUaW1lcihldmVudClcbiAgICB7XG4gICAgICAgIGxldCBmcmFtZSA9IGV2ZW50LnRhcmdldDtcbiAgICAgICAgaWYodGhpcy5zdGF0ZS5vcEZyYW1lX3NyYyA9PSBcIlwiKSByZXR1cm47XG4gICAgICAgIC8vY29uc29sZS5sb2coXCJPUFNlc3Npb25DaGVja2VyOjpzZXRUaW1lclwiKTtcblxuICAgICAgICBpZighdGhpcy5wcm9wcy5pc0xvZ2dlZFVzZXIpe1xuICAgICAgICAgICAgLy9jb25zb2xlLmxvZyhcIk9QU2Vzc2lvbkNoZWNrZXI6OnNldFRpbWVyIC0gIXRoaXMucHJvcHMuaXNMb2dnZWRVc2VyXCIpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYodGhpcy5wcm9wcy5zZXNzaW9uU3RhdGVTdGF0dXMgIT09IFNFU1NJT05fU1RBVEVfU1RBVFVTX1VOQ0hBTkdFRCApe1xuICAgICAgICAgICAgLy9jb25zb2xlLmxvZyhcIk9QU2Vzc2lvbkNoZWNrZXI6OnNldFRpbWVyIC0gdGhpcy5wcm9wcy5zZXNzaW9uU3RhdGVTdGF0dXNcIik7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZih0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgY29uc29sZS5sb2coYE9QU2Vzc2lvbkNoZWNrZXI6OnNldFRpbWVyIHNldHRpbmcgaW50ZXJ2YWwgJHtDSEVDS19TRVNTSU9OX0lOVEVSVkFMfWApO1xuICAgICAgICAgICAgdGhpcy5pbnRlcnZhbCA9IHdpbmRvdy5zZXRJbnRlcnZhbCh0aGlzLmNoZWNrU2Vzc2lvbiwgQ0hFQ0tfU0VTU0lPTl9JTlRFUlZBTCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvblNldHVwQ2hlY2tTZXNzaW9uUlAoKXtcbiAgICAgICAgLy8gaHR0cHM6Ly9vcGVuaWQubmV0L3NwZWNzL29wZW5pZC1jb25uZWN0LXNlc3Npb24tMV8wLmh0bWwjT1BpZnJhbWVcbiAgICAgICAgLy8gY29uc29sZS5sb2coXCJPUFNlc3Npb25DaGVja2VyOjpvblNldHVwQ2hlY2tTZXNzaW9uUlBcIik7XG4gICAgICAgIGlmKHRoaXMub3BGcmFtZSA9PSBudWxsKXtcbiAgICAgICAgICAgIC8vY29uc29sZS5sb2coXCJPUFNlc3Npb25DaGVja2VyOjpvblNldHVwQ2hlY2tTZXNzaW9uUlAgLSBvcEZyYW1lIGlzIG51bGxcIik7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlXCIsIHRoaXMucmVjZWl2ZU1lc3NhZ2UsIGZhbHNlKTtcbiAgICAgICAgY29uc3Qgc2Vzc2lvbkNoZWNrRW5kcG9pbnQgPSBgJHt0aGlzLnByb3BzLmlkcEJhc2VVcmx9L29hdXRoMi9jaGVjay1zZXNzaW9uYDtcbiAgICAgICAgLy9jb25zb2xlLmxvZyhcIk9QU2Vzc2lvbkNoZWNrZXI6Om9uU2V0dXBDaGVja1Nlc3Npb25SUCAtIHNlc3Npb25DaGVja0VuZHBvaW50IFwiKyBzZXNzaW9uQ2hlY2tFbmRwb2ludCk7XG4gICAgICAgIGlmKHRoaXMuc3RhdGUub3BGcmFtZV9zcmMgPT0gXCJcIilcbiAgICAgICAgICAgIHRoaXMuc2V0U3RhdGUoey4uLnRoaXMuc3RhdGUsIG9wRnJhbWVfc3JjIDogc2Vzc2lvbkNoZWNrRW5kcG9pbnQsIHJwQ2hlY2tTZXNzaW9uU3RhdGVGcmFtZV9zcmMgOiBcIlwifSk7XG4gICAgfVxuXG4gICAgcmVjZWl2ZU1lc3NhZ2VGcm9tQ2hpbGQoZSl7XG4gICAgICAgIGlmICh0eXBlb2YgZS5kYXRhID09PSAnc3RyaW5nJyB8fCBlLmRhdGEgaW5zdGFuY2VvZiBTdHJpbmcpe1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBsZXQgYXV0aEluZm8gPSBKU09OLnBhcnNlKGUuZGF0YSk7XG4gICAgICAgICAgICAgICAgaWYgKGF1dGhJbmZvLmhhc093blByb3BlcnR5KCdhY3Rpb24nKSAmJiBhdXRoSW5mby5hY3Rpb24gPT0gJ1NFVF9BVVRIX0lORk9fU0lMRU5UTFknKSB7XG4gICAgICAgICAgICAgICAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdtZXNzYWdlJywgdGhpcy5yZWNlaXZlTWVzc2FnZUZyb21DaGlsZCwgZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnByb3BzLm9uVXNlckF1dGgoXG4gICAgICAgICAgICAgICAgICAgICAgICBhdXRoSW5mby5hY2Nlc3NfdG9rZW4sXG4gICAgICAgICAgICAgICAgICAgICAgICBhdXRoSW5mby5pZF90b2tlbixcbiAgICAgICAgICAgICAgICAgICAgICAgIGF1dGhJbmZvLnNlc3Npb25fc3RhdGUsXG4gICAgICAgICAgICAgICAgICAgICAgICBhdXRoSW5mby5leHBpcmVzX2luLFxuICAgICAgICAgICAgICAgICAgICAgICAgYXV0aEluZm8uaGFzT3duUHJvcGVydHkoXCJyZWZyZXNoX3Rva2VuXCIpID8gYXV0aEluZm8ucmVmcmVzaF90b2tlbiA6IG51bGxcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZSl7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZWNlaXZlTWVzc2FnZShlKVxuICAgIHtcbiAgICAgICAgLy9jb25zb2xlLmxvZyhcIk9QU2Vzc2lvbkNoZWNrZXI6OnJlY2VpdmVNZXNzYWdlIC0gZS5vcmlnaW4gXCIgKyBlLm9yaWdpbik7XG4gICAgICAgIGlmIChlLm9yaWdpbiAhPT0gdGhpcy5wcm9wcy5pZHBCYXNlVXJsICkge1xuICAgICAgICAgICAgLy9jb25zb2xlLmxvZyhcIk9QU2Vzc2lvbkNoZWNrZXI6OnJlY2VpdmVNZXNzYWdlIC0gZS5vcmlnaW4gIT09IHRoaXMucHJvcHMuaWRwQmFzZVVybFwiKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBsZXQgc3RhdHVzID0gZS5kYXRhO1xuICAgICAgICAvL2NvbnNvbGUubG9nKFwiT1BTZXNzaW9uQ2hlY2tlcjo6cmVjZWl2ZU1lc3NhZ2UgLSBzdGF0dXMgXCIrIHN0YXR1cyk7XG4gICAgICAgIC8vY29uc29sZS5sb2coXCJPUFNlc3Npb25DaGVja2VyOjpyZWNlaXZlTWVzc2FnZSAtIHRoaXMucHJvcHMuc2Vzc2lvblN0YXRlU3RhdHVzIFwiKyB0aGlzLnByb3BzLnNlc3Npb25TdGF0ZVN0YXR1cyk7XG4gICAgICAgIC8vY29uc29sZS5sb2coXCJPUFNlc3Npb25DaGVja2VyOjpyZWNlaXZlTWVzc2FnZSAtIHRoaXMucHJvcHMuaXNMb2dnZWRVc2VyIFwiKyB0aGlzLnByb3BzLmlzTG9nZ2VkVXNlcik7XG4gICAgICAgIGlmKHRoaXMucHJvcHMuc2Vzc2lvblN0YXRlU3RhdHVzID09PSBTRVNTSU9OX1NUQVRFX1NUQVRVU19VTkNIQU5HRUQgJiYgdGhpcy5wcm9wcy5pc0xvZ2dlZFVzZXIpe1xuICAgICAgICAgICAgaWYoc3RhdHVzID09PSBTRVNTSU9OX1NUQVRFX1NUQVRVU19DSEFOR0VEKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJPUFNlc3Npb25DaGVja2VyOjpyZWNlaXZlTWVzc2FnZSAtIHNlc3Npb24gc3RhdGUgaGFzIGNoYW5nZWQgb24gT1BcIik7XG4gICAgICAgICAgICAgICAgLy8gc2lnbmFsIHNlc3Npb24gc3RhcnQgY2hlY2tcbiAgICAgICAgICAgICAgICAvLyBraWxsIHRpbWVyXG5cbiAgICAgICAgICAgICAgICBpZih0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJylcbiAgICAgICAgICAgICAgICAgICAgd2luZG93LmNsZWFySW50ZXJ2YWwodGhpcy5pbnRlcnZhbCk7XG4gICAgICAgICAgICAgICAgdGhpcy5pbnRlcnZhbCA9IG51bGw7XG4gICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICogV2hlbiB0aGUgUlAgZGV0ZWN0cyBhIHNlc3Npb24gc3RhdGUgY2hhbmdlLCBpdCBTSE9VTEQgZmlyc3QgdHJ5IGEgcHJvbXB0PW5vbmUgcmVxdWVzdCB3aXRoaW4gYW5cbiAgICAgICAgICAgICAgICAgKiBpZnJhbWUgdG8gb2J0YWluIGEgbmV3IElEIFRva2VuIGFuZCBzZXNzaW9uIHN0YXRlLCBzZW5kaW5nIHRoZSBvbGQgSUQgVG9rZW4gYXMgdGhlIGlkX3Rva2VuX2hpbnQuXG4gICAgICAgICAgICAgICAgICogSWYgdGhlIFJQIHJlY2VpdmVzIGFuIElEIHRva2VuIGZvciB0aGUgc2FtZSBFbmQtVXNlciwgaXQgU0hPVUxEIHNpbXBseSB1cGRhdGUgdGhlIHZhbHVlIG9mIHRoZVxuICAgICAgICAgICAgICAgICAqIHNlc3Npb24gc3RhdGUuIElmIGl0IGRvZXMgbm90IHJlY2VpdmUgYW4gSUQgdG9rZW4gb3IgcmVjZWl2ZXMgYW4gSUQgdG9rZW4gZm9yIGFub3RoZXIgRW5kLVVzZXIsXG4gICAgICAgICAgICAgICAgICogdGhlbiBpdCBuZWVkcyB0byBoYW5kbGUgdGhpcyBjYXNlIGFzIGEgbG9nb3V0IGZvciB0aGUgb3JpZ2luYWwgRW5kLVVzZXIuIElmIHRoZSBvcmlnaW5hbCBFbmQtVXNlclxuICAgICAgICAgICAgICAgICAqIGlzIGFscmVhZHkgbG9nZ2VkIG91dCBhdCB0aGUgUlAgd2hlbiB0aGUgc3RhdGUgY2hhbmdlcyBpbmRpY2F0ZSB0aGF0IEVuZC1Vc2VyIHNob3VsZCBiZSBsb2dnZWQgb3V0LFxuICAgICAgICAgICAgICAgICAqIHRoZSBsb2dvdXQgaXMgY29uc2lkZXJlZCB0byBoYXZlIHN1Y2NlZWRlZC5cbiAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignbWVzc2FnZScsIHRoaXMucmVjZWl2ZU1lc3NhZ2VGcm9tQ2hpbGQsIGZhbHNlKTtcbiAgICAgICAgICAgICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm1lc3NhZ2VcIiwgdGhpcy5yZWNlaXZlTWVzc2FnZSwgZmFsc2UpO1xuICAgICAgICAgICAgICAgIHRoaXMucHJvcHMudXBkYXRlU2Vzc2lvblN0YXRlU3RhdHVzKFNFU1NJT05fU1RBVEVfU1RBVFVTX0NIQU5HRUQpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJlbmRlcigpIHtcblxuICAgICAgICBpZighdGhpcy5wcm9wcy5pc0xvZ2dlZFVzZXIpIHJldHVybiBudWxsO1xuICAgICAgICBpZighdGhpcy5wcm9wcy5zZXNzaW9uU3RhdGUpIHJldHVybiBudWxsO1xuXG4gICAgICAgIGlmKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICBpZiAoIHdpbmRvdy5sb2NhdGlvbiAhPT0gd2luZG93LnBhcmVudC5sb2NhdGlvbiApIHtcbiAgICAgICAgICAgICAgICAvL2NvbnNvbGUubG9nKFwiT1BTZXNzaW9uQ2hlY2tlcjo6cmVuZGVyIHJ1bm5pbmcgaW5zaWRlIGlmcmFtZSwgc2tpcHBpbmdcIik7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGxcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvL2NvbnNvbGUubG9nKFwiT1BTZXNzaW9uQ2hlY2tlcjo6cmVuZGVyXCIpO1xuICAgICAgICByZXR1cm4oXG4gICAgICAgICAgICA8ZGl2IHN0eWxlPXt7aGVpZ2h0OiAnMHB4J319PlxuICAgICAgICAgICAgICAgIDxpZnJhbWVcbiAgICAgICAgICAgICAgICAgICAgcmVmPXt0aGlzLnNldE9QRnJhbWVSZWZ9XG4gICAgICAgICAgICAgICAgICAgIGlkPVwiT1BGcmFtZVwiIG9uTG9hZD17dGhpcy5zZXRUaW1lcn1cbiAgICAgICAgICAgICAgICAgICAgc3JjPXt0aGlzLnN0YXRlLm9wRnJhbWVfc3JjfVxuICAgICAgICAgICAgICAgICAgICBzdHlsZT17e3Zpc2liaWxpdHk6J2hpZGRlbicsIHBvc2l0aW9uOiAnYWJzb2x1dGUnLCBsZWZ0OiAwLCB0b3A6IDAsIGJvcmRlcjogJ25vbmUnLCB3aWR0aDowICwgaGVpZ2h0OjB9fT4+PC9pZnJhbWU+XG4gICAgICAgICAgICAgICAgPGlmcmFtZSByZWY9e3RoaXMuc2V0Q2hlY2tTZXNzaW9uU3RhdGVGcmFtZVJlZn1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlkPVwiUlBDSGVja1Nlc3Npb25TdGF0ZUZyYW1lXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNyYz17dGhpcy5zdGF0ZS5ycENoZWNrU2Vzc2lvblN0YXRlRnJhbWVfc3JjfVxuICAgICAgICAgICAgICAgICAgICAgICAgb25Mb2FkPXt0aGlzLnJwQ2hlY2tTZXNzaW9uU3RhdGVGcmFtZU9uTG9hZH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPXt7dmlzaWJpbGl0eTonaGlkZGVuJywgcG9zaXRpb246ICdhYnNvbHV0ZScsIGxlZnQ6IDAsIHRvcDogMCwgYm9yZGVyOiAnbm9uZScsIHdpZHRoOjAgLCBoZWlnaHQ6MH19Pj48L2lmcmFtZT5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICApO1xuICAgIH1cbn1cblxuY29uc3QgbWFwU3RhdGVUb1Byb3BzID0gKHsgbG9nZ2VkVXNlclN0YXRlIH0pID0+ICh7XG4gICAgc2Vzc2lvblN0YXRlOiBsb2dnZWRVc2VyU3RhdGUuc2Vzc2lvblN0YXRlLFxuICAgIGlzTG9nZ2VkVXNlcjogbG9nZ2VkVXNlclN0YXRlLmlzTG9nZ2VkVXNlcixcbiAgICBzZXNzaW9uU3RhdGVTdGF0dXM6IGxvZ2dlZFVzZXJTdGF0ZS5zZXNzaW9uU3RhdGVTdGF0dXMsXG59KVxuXG5leHBvcnQgZGVmYXVsdCBjb25uZWN0KG1hcFN0YXRlVG9Qcm9wcywge1xuICAgIGRvTG9nb3V0LCB1cGRhdGVTZXNzaW9uU3RhdGVTdGF0dXMsIG9uVXNlckF1dGhcbn0pKE9QU2Vzc2lvbkNoZWNrZXIpO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxOCBPcGVuU3RhY2sgRm91bmRhdGlvblxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICoqL1xuXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCAnLi9zaW1wbGUtbGluay1saXN0Lmxlc3MnO1xuaW1wb3J0IEFzeW5jU2VsZWN0IGZyb20gJ3JlYWN0LXNlbGVjdC9saWIvQXN5bmMnO1xuaW1wb3J0IFRhYmxlIGZyb20gXCIuLi90YWJsZS9UYWJsZVwiO1xuaW1wb3J0IFQgZnJvbSAnaTE4bi1yZWFjdC9kaXN0L2kxOG4tcmVhY3QnO1xuaW1wb3J0IEFzeW5jQ3JlYXRhYmxlU2VsZWN0IGZyb20gXCJyZWFjdC1zZWxlY3QvbGliL0FzeW5jQ3JlYXRhYmxlXCI7XG5cblxuY2xhc3MgU2ltcGxlTGlua0xpc3QgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICAgICAgc3VwZXIocHJvcHMpO1xuXG4gICAgICAgIHRoaXMuc3RhdGUgPSB7XG4gICAgICAgICAgICB2YWx1ZTogJydcbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLmhhbmRsZUNoYW5nZSA9IHRoaXMuaGFuZGxlQ2hhbmdlLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuZ2V0T3B0aW9ucyA9IHRoaXMuZ2V0T3B0aW9ucy5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLmhhbmRsZUxpbmsgPSB0aGlzLmhhbmRsZUxpbmsuYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5maWx0ZXJPcHRpb24gPSB0aGlzLmZpbHRlck9wdGlvbi5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLmhhbmRsZU5ldyA9IHRoaXMuaGFuZGxlTmV3LmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuZ2V0TmV3T3B0aW9uRGF0YSA9IHRoaXMuZ2V0TmV3T3B0aW9uRGF0YS5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLmlzVmFsaWROZXdPcHRpb24gPSB0aGlzLmlzVmFsaWROZXdPcHRpb24uYmluZCh0aGlzKTtcbiAgICB9XG5cbiAgICBnZXRPcHRpb25zKGlucHV0LCBjYWxsYmFjaykge1xuICAgICAgICBsZXQge29wdGlvbnN9ID0gdGhpcy5wcm9wcztcbiAgICAgICAgbGV0IGRlZmF1bHRPcHRpb25zID0gb3B0aW9ucy5oYXNPd25Qcm9wZXJ0eSgnZGVmYXVsdE9wdGlvbnMnKSA/IG9wdGlvbnMuZGVmYXVsdE9wdGlvbnMgOiB1bmRlZmluZWQ7XG5cbiAgICAgICAgaWYgKCFpbnB1dCAmJiAhZGVmYXVsdE9wdGlvbnMpIHtcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoeyBvcHRpb25zOiBbXSB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMucHJvcHMub3B0aW9ucy5hY3Rpb25zLnNlYXJjaChpbnB1dCwgY2FsbGJhY2spO1xuICAgIH1cblxuICAgIGhhbmRsZUNoYW5nZSh2YWx1ZSkge1xuICAgICAgICB0aGlzLnNldFN0YXRlKHt2YWx1ZX0pO1xuICAgIH1cblxuICAgIGhhbmRsZUxpbmsoZXYpIHtcbiAgICAgICAgZXYucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgdGhpcy5wcm9wcy5vcHRpb25zLmFjdGlvbnMuYWRkLm9uQ2xpY2sodGhpcy5zdGF0ZS52YWx1ZSk7XG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe3ZhbHVlOiAnJ30pO1xuICAgIH1cblxuICAgIGdldE5ld09wdGlvbkRhdGEoaW5wdXRWYWx1ZSwgb3B0aW9uTGFiZWwpIHtcbiAgICAgICAgcmV0dXJuIHt0YWc6IG9wdGlvbkxhYmVsLCBpZDppbnB1dFZhbHVlfTtcbiAgICB9XG5cbiAgICBpc1ZhbGlkTmV3T3B0aW9uKGlucHV0VmFsdWUsIHNlbGVjdFZhbHVlLCBzZWxlY3RPcHRpb25zKSB7XG4gICAgICAgIGxldCB7b3B0aW9uc30gPSB0aGlzLnByb3BzO1xuICAgICAgICBsZXQgbGFiZWxLZXkgPSBvcHRpb25zLmhhc093blByb3BlcnR5KCdsYWJlbEtleScpID8gb3B0aW9ucy5sYWJlbEtleSA6ICdsYWJlbCc7XG4gICAgICAgIGxldCBvcHRpb25Gb3VuZCA9IHNlbGVjdE9wdGlvbnMuZmluZChvcCA9PiBvcFtsYWJlbEtleV0gPT0gaW5wdXRWYWx1ZSk7XG4gICAgICAgIHJldHVybiAoIWlucHV0VmFsdWUgfHwgb3B0aW9uRm91bmQpID8gZmFsc2UgOiB0cnVlO1xuICAgIH1cblxuICAgIGhhbmRsZU5ldyh2YWx1ZSkge1xuICAgICAgICB0aGlzLnByb3BzLm9wdGlvbnMub25DcmVhdGVUYWcodmFsdWUsIHRoaXMuaGFuZGxlQ2hhbmdlKTtcbiAgICB9XG5cbiAgICBmaWx0ZXJPcHRpb24oY2FuZGlkYXRlLCBpbnB1dFZhbHVlKSB7XG4gICAgICAgIGxldCB7b3B0aW9ucywgdmFsdWVzfSA9IHRoaXMucHJvcHM7XG4gICAgICAgIGxldCBhbGxvd0R1cGxpY2F0ZXMgPSB0aGlzLnByb3BzLmhhc093blByb3BlcnR5KCdhbGxvd0R1cGxpY2F0ZXMnKTtcbiAgICAgICAgbGV0IGxhYmVsS2V5ID0gb3B0aW9ucy5oYXNPd25Qcm9wZXJ0eSgnbGFiZWxLZXknKSA/IG9wdGlvbnMubGFiZWxLZXkgOiAnbGFiZWwnO1xuXG4gICAgICAgIGlmIChhbGxvd0R1cGxpY2F0ZXMpIHJldHVybiB0cnVlO1xuXG4gICAgICAgIGxldCBvcHRpb25Gb3VuZCA9IHZhbHVlcy5maW5kKHZhbCA9PiB2YWxbbGFiZWxLZXldID09PSBjYW5kaWRhdGUubGFiZWwpO1xuXG4gICAgICAgIHJldHVybiAhb3B0aW9uRm91bmQ7XG4gICAgfVxuXG5cbiAgICByZW5kZXIoKSB7XG5cbiAgICAgICAgbGV0IHtvcHRpb25zLCB2YWx1ZXMsIGNvbHVtbnN9ID0gdGhpcy5wcm9wcztcbiAgICAgICAgbGV0IGRpc2FibGVkQWRkID0gKCF0aGlzLnN0YXRlLnZhbHVlKTtcblxuICAgICAgICBsZXQgdGl0bGUgPSBvcHRpb25zLmhhc093blByb3BlcnR5KCd0aXRsZScpID8gb3B0aW9ucy50aXRsZSA6ICdUYWJsZSc7XG4gICAgICAgIGxldCB2YWx1ZUtleSA9IG9wdGlvbnMuaGFzT3duUHJvcGVydHkoJ3ZhbHVlS2V5JykgPyBvcHRpb25zLnZhbHVlS2V5IDogJ3ZhbHVlJztcbiAgICAgICAgbGV0IGxhYmVsS2V5ID0gb3B0aW9ucy5oYXNPd25Qcm9wZXJ0eSgnbGFiZWxLZXknKSA/IG9wdGlvbnMubGFiZWxLZXkgOiAnbGFiZWwnO1xuICAgICAgICBsZXQgYWxsb3dDcmVhdGUgPSBvcHRpb25zLmhhc093blByb3BlcnR5KCdvbkNyZWF0ZVRhZycpO1xuICAgICAgICBsZXQgZGVmYXVsdE9wdGlvbnMgPSBvcHRpb25zLmhhc093blByb3BlcnR5KCdkZWZhdWx0T3B0aW9ucycpID8gb3B0aW9ucy5kZWZhdWx0T3B0aW9ucyA6IHVuZGVmaW5lZDtcblxuICAgICAgICBsZXQgdGFibGVPcHRpb25zID0ge1xuICAgICAgICAgICAgY2xhc3NOYW1lOiAnZGF0YVRhYmxlJyxcbiAgICAgICAgICAgIGFjdGlvbnM6IHtcbiAgICAgICAgICAgICAgICBkZWxldGU6IG9wdGlvbnMuYWN0aW9ucy5kZWxldGVcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICBpZiAob3B0aW9ucy5oYXNPd25Qcm9wZXJ0eSgnY2xhc3NOYW1lJykpIHtcbiAgICAgICAgICAgIHRhYmxlT3B0aW9ucy5jbGFzc05hbWUgPSBvcHRpb25zLmNsYXNzTmFtZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChvcHRpb25zLmFjdGlvbnMuaGFzT3duUHJvcGVydHkoJ2VkaXQnKSkge1xuICAgICAgICAgICAgdGFibGVPcHRpb25zLmFjdGlvbnMuZWRpdCA9IG9wdGlvbnMuYWN0aW9ucy5lZGl0O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG9wdGlvbnMuYWN0aW9ucy5oYXNPd25Qcm9wZXJ0eSgnY3VzdG9tJykpIHtcbiAgICAgICAgICAgIHRhYmxlT3B0aW9ucy5hY3Rpb25zLmN1c3RvbSA9IG9wdGlvbnMuYWN0aW9ucy5jdXN0b207XG4gICAgICAgIH1cblxuICAgICAgICBpZiAob3B0aW9ucy5oYXNPd25Qcm9wZXJ0eSgnc29ydENvbCcpKSB7XG4gICAgICAgICAgICB2YWx1ZXMgPSB2YWx1ZXMuc29ydChcbiAgICAgICAgICAgICAgICAoYSwgYikgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBpdGVtQSA9IGlzTmFOKGFbb3B0aW9ucy5zb3J0Q29sXSkgPyBhW29wdGlvbnMuc29ydENvbF0udG9Mb3dlckNhc2UoKSA6IGFbb3B0aW9ucy5zb3J0Q29sXTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaXRlbUIgPSBpc05hTihiW29wdGlvbnMuc29ydENvbF0pID8gYltvcHRpb25zLnNvcnRDb2xdLnRvTG93ZXJDYXNlKCkgOiBiW29wdGlvbnMuc29ydENvbF07XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAoaXRlbUEgPiBpdGVtQiA/IDEgOiAoaXRlbUEgPCBpdGVtQiA/IC0xIDogMCkpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuXG5cbiAgICAgICAgbGV0IEFzeW5jQ29tcG9uZW50ID0gbnVsbDtcblxuICAgICAgICBpZiAoYWxsb3dDcmVhdGUpIHtcbiAgICAgICAgICAgIEFzeW5jQ29tcG9uZW50ID1cbiAgICAgICAgICAgICAgICA8QXN5bmNDcmVhdGFibGVTZWxlY3RcbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwibGluay1zZWxlY3QgYnRuLWdyb3VwIHRleHQtbGVmdFwiXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlPXt0aGlzLnN0YXRlLnZhbHVlfVxuICAgICAgICAgICAgICAgICAgICBnZXRPcHRpb25WYWx1ZT17b3B0aW9uID0+IG9wdGlvblt2YWx1ZUtleV19XG4gICAgICAgICAgICAgICAgICAgIGdldE9wdGlvbkxhYmVsPXtvcHRpb24gPT4gb3B0aW9uW2xhYmVsS2V5XX1cbiAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9e3RoaXMuaGFuZGxlQ2hhbmdlfVxuICAgICAgICAgICAgICAgICAgICBsb2FkT3B0aW9ucz17dGhpcy5nZXRPcHRpb25zfVxuICAgICAgICAgICAgICAgICAgICBmaWx0ZXJPcHRpb249e3RoaXMuZmlsdGVyT3B0aW9ufVxuICAgICAgICAgICAgICAgICAgICBvbkNyZWF0ZU9wdGlvbj17dGhpcy5oYW5kbGVOZXd9XG4gICAgICAgICAgICAgICAgICAgIGdldE5ld09wdGlvbkRhdGE9e3RoaXMuZ2V0TmV3T3B0aW9uRGF0YX1cbiAgICAgICAgICAgICAgICAgICAgaXNWYWxpZE5ld09wdGlvbj17dGhpcy5pc1ZhbGlkTmV3T3B0aW9ufVxuICAgICAgICAgICAgICAgIC8+O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgQXN5bmNDb21wb25lbnQgPVxuICAgICAgICAgICAgICAgIDxBc3luY1NlbGVjdFxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJsaW5rLXNlbGVjdCBidG4tZ3JvdXAgdGV4dC1sZWZ0XCJcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU9e3RoaXMuc3RhdGUudmFsdWV9XG4gICAgICAgICAgICAgICAgICAgIGdldE9wdGlvblZhbHVlPXtvcHRpb24gPT4gb3B0aW9uW3ZhbHVlS2V5XX1cbiAgICAgICAgICAgICAgICAgICAgZ2V0T3B0aW9uTGFiZWw9e29wdGlvbiA9PiBvcHRpb25bbGFiZWxLZXldfVxuICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17dGhpcy5oYW5kbGVDaGFuZ2V9XG4gICAgICAgICAgICAgICAgICAgIGxvYWRPcHRpb25zPXt0aGlzLmdldE9wdGlvbnN9XG4gICAgICAgICAgICAgICAgICAgIGZpbHRlck9wdGlvbj17dGhpcy5maWx0ZXJPcHRpb259XG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHRPcHRpb25zPXtkZWZhdWx0T3B0aW9uc31cbiAgICAgICAgICAgICAgICAvPjtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInJvdyBzaW1wbGUtbGluay1saXN0XCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJjb2wtbWQtNCBzaW1wbGUtbGluay1saXN0LXRpdGxlXCI+XG4gICAgICAgICAgICAgICAgICAgIDxoND57dGl0bGV9PC9oND5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImNvbC1tZCBwdWxsLXJpZ2h0IGJ0bi1ncm91cFwiPlxuICAgICAgICAgICAgICAgICAgICB7QXN5bmNDb21wb25lbnR9XG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzTmFtZT1cImJ0biBidG4tZGVmYXVsdCBhZGQtYnV0dG9uXCIgb25DbGljaz17dGhpcy5oYW5kbGVMaW5rfSBkaXNhYmxlZD17ZGlzYWJsZWRBZGR9PlxuICAgICAgICAgICAgICAgICAgICAgICAge1QudHJhbnNsYXRlKFwiZ2VuZXJhbC5hZGRcIil9XG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiY29sLW1kLTEyXCI+XG4gICAgICAgICAgICAgICAgICAgIDxUYWJsZVxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiZGF0YVRhYmxlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnM9e3RhYmxlT3B0aW9uc31cbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE9e3ZhbHVlc31cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbnM9e2NvbHVtbnN9XG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKTtcblxuICAgIH1cbn1cblxuU2ltcGxlTGlua0xpc3QucHJvcFR5cGVzID0ge1xuICAgIHZhbHVlczogUHJvcFR5cGVzLmFycmF5LmlzUmVxdWlyZWQsXG4gICAgb3B0aW9uczogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICAgICAgdGl0bGU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgICAgIHNvcnRDb2w6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgICAgIHZhbHVlS2V5OiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gICAgICAgIGxhYmVsS2V5OiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gICAgICAgIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICAgICAgYWN0aW9uczogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICAgICAgICAgIHNlYXJjaDogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICAgICAgICAgIGRlbGV0ZTogUHJvcFR5cGVzLnNoYXBlKHtvbkNsaWNrOlByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWR9KSxcbiAgICAgICAgICAgIGFkZDogUHJvcFR5cGVzLnNoYXBlKHtvbkNsaWNrOlByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWR9KSxcbiAgICAgICAgICAgIGVkaXQ6IFByb3BUeXBlcy5zaGFwZSh7b25DbGljazpQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkfSksXG4gICAgICAgICAgICBjdXN0b206IFByb3BUeXBlcy5hcnJheSxcbiAgICAgICAgfSkuaXNSZXF1aXJlZFxuICAgIH0pLmlzUmVxdWlyZWQsXG4gICAgY29sdW1uczogUHJvcFR5cGVzLmFycmF5LmlzUmVxdWlyZWRcbn1cblxuZXhwb3J0IGRlZmF1bHQgU2ltcGxlTGlua0xpc3Q7XG4iLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW4iLCIvKipcbiAqIENvcHlyaWdodCAyMDE3IE9wZW5TdGFjayBGb3VuZGF0aW9uXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiovXG5cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgJy4vc3VtbWl0LWRyb3Bkb3duLmxlc3MnO1xuaW1wb3J0IFNlbGVjdCBmcm9tICdyZWFjdC1zZWxlY3QnO1xuaW1wb3J0IFQgZnJvbSAnaTE4bi1yZWFjdC9kaXN0L2kxOG4tcmVhY3QnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTdW1taXREcm9wZG93biBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgICAgICBzdXBlcihwcm9wcyk7XG5cbiAgICAgICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgICAgICAgIHN1bW1pdFZhbHVlOiBudWxsLFxuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMuaGFuZGxlQ2hhbmdlID0gdGhpcy5oYW5kbGVDaGFuZ2UuYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5oYW5kbGVDbGljayA9IHRoaXMuaGFuZGxlQ2xpY2suYmluZCh0aGlzKTtcbiAgICB9XG5cbiAgICBoYW5kbGVDaGFuZ2Uoc3VtbWl0KSB7XG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe3N1bW1pdFZhbHVlOiBzdW1taXR9KTtcbiAgICB9XG5cbiAgICBoYW5kbGVDbGljayhldikge1xuICAgICAgICBldi5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB0aGlzLnByb3BzLm9uQ2xpY2sodGhpcy5zdGF0ZS5zdW1taXRWYWx1ZS52YWx1ZSk7XG4gICAgfVxuXG4gICAgcmVuZGVyKCkge1xuXG4gICAgICAgIGxldCB7c3VtbWl0cywgYWN0aW9uTGFiZWwsIGFjdGlvbkNsYXNzfSA9IHRoaXMucHJvcHM7XG4gICAgICAgIGxldCBzdW1taXRPcHRpb25zID0gc3VtbWl0c1xuICAgICAgICAgICAgLnNvcnQoXG4gICAgICAgICAgICAgICAgKGEsIGIpID0+IChhLnN0YXJ0X2RhdGUgPCBiLnN0YXJ0X2RhdGUgPyAxIDogKGEuc3RhcnRfZGF0ZSA+IGIuc3RhcnRfZGF0ZSA/IC0xIDogMCkpXG4gICAgICAgICAgICApLm1hcChzID0+ICh7bGFiZWw6IHMubmFtZSwgdmFsdWU6IHMuaWR9KSk7XG5cbiAgICAgICAgbGV0IGJpZ0NsYXNzID0gdGhpcy5wcm9wcy5oYXNPd25Qcm9wZXJ0eSgnYmlnJykgPyAnYmlnJyA6ICcnO1xuXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17XCJzdW1taXQtZHJvcGRvd24gYnRuLWdyb3VwIFwiICsgYmlnQ2xhc3N9PlxuICAgICAgICAgICAgICAgIDxTZWxlY3RcbiAgICAgICAgICAgICAgICAgICAgaWQ9XCJzdW1taXQtc2VsZWN0XCJcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU9e3RoaXMuc3RhdGUuc3VtbWl0VmFsdWV9XG4gICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXt0aGlzLmhhbmRsZUNoYW5nZX1cbiAgICAgICAgICAgICAgICAgICAgb3B0aW9ucz17c3VtbWl0T3B0aW9uc31cbiAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9e1QudHJhbnNsYXRlKFwiZ2VuZXJhbC5zZWxlY3Rfc3VtbWl0XCIpfVxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJidG4tZ3JvdXAgc3VtbWl0LXNlbGVjdCB0ZXh0LWxlZnRcIlxuICAgICAgICAgICAgICAgICAgICBpc0NsZWFyYWJsZT17ZmFsc2V9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzc05hbWU9e2BidG4gYnRuLWRlZmF1bHQgJHthY3Rpb25DbGFzc31gfSBvbkNsaWNrPXt0aGlzLmhhbmRsZUNsaWNrfT5cbiAgICAgICAgICAgICAgICAgICAge2FjdGlvbkxhYmVsfVxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICk7XG5cbiAgICB9XG59XG4iLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW4iLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFZGl0YWJsZUFjdGlvbnNUYWJsZUNlbGwgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICAgICAgc3VwZXIocHJvcHMpO1xuXG4gICAgICAgIHRoaXMuc3RhdGUgPSB7XG4gICAgICAgICAgICBpc19lZGl0aW5nOiBmYWxzZVxuICAgICAgICB9XG5cbiAgICB9XG5cbiAgICBvbkRlbGV0ZShpZCwgZXYpIHtcbiAgICAgICAgZXYucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgZXYuc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICAgICAgdGhpcy5wcm9wcy5hY3Rpb25zLmRlbGV0ZShpZCk7XG4gICAgfVxuXG4gICAgb25TYXZlKGlkLCBldikge1xuICAgICAgICBldi5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBldi5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICAgIGlzX2VkaXRpbmc6IGZhbHNlXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMucHJvcHMuYWN0aW9ucy5zYXZlKGlkKTtcbiAgICB9XG5cbiAgICBvbkVkaXQoaWQsIGV2KSB7XG4gICAgICAgIGV2LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGV2LnN0b3BQcm9wYWdhdGlvbigpO1xuXG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgICAgaXNfZWRpdGluZzogdHJ1ZVxuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLnByb3BzLmFjdGlvbnMuZWRpdChpZCk7XG4gICAgfVxuXG4gICAgb25DYW5jZWwoaWQsIGV2KSB7XG4gICAgICAgIGV2LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGV2LnN0b3BQcm9wYWdhdGlvbigpO1xuXG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgICAgaXNfZWRpdGluZzogZmFsc2VcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5wcm9wcy5hY3Rpb25zLmNhbmNlbChpZCk7XG4gICAgfVxuXG4gICAgcmVuZGVyKCkge1xuICAgICAgICBsZXQge2FjdGlvbnMsIGlkfSA9IHRoaXMucHJvcHM7XG5cbiAgICAgICAgaWYgKHRoaXMuc3RhdGUuaXNfZWRpdGluZykge1xuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICA8dGQgY2xhc3NOYW1lPVwiYWN0aW9uc1wiPlxuICAgICAgICAgICAgICAgICAgICA8YSBocmVmPVwiXCIgb25DbGljaz17dGhpcy5vblNhdmUuYmluZCh0aGlzLGlkKX0gZGF0YS10aXA9XCJzYXZlXCIgPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3NOYW1lPVwiZmEgZmEtZmxvcHB5LW9cIj48L2k+XG4gICAgICAgICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj1cIlwiIG9uQ2xpY2s9e3RoaXMub25DYW5jZWwuYmluZCh0aGlzLGlkKX0gZGF0YS10aXA9XCJjYW5jZWxcIiA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzc05hbWU9XCJmYSBmYS10aW1lc1wiPjwvaT5cbiAgICAgICAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICA8dGQgY2xhc3NOYW1lPVwiYWN0aW9uc1wiPlxuICAgICAgICAgICAgICAgICAgICB7J2VkaXQnIGluIGFjdGlvbnMgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9XCJcIiBvbkNsaWNrPXt0aGlzLm9uRWRpdC5iaW5kKHRoaXMsaWQpfSBkYXRhLXRpcD1cImVkaXRcIiA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3NOYW1lPVwiZmEgZmEtcGVuY2lsLXNxdWFyZS1vXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHsnZGVsZXRlJyBpbiBhY3Rpb25zICYmXG4gICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPVwiXCIgb25DbGljaz17dGhpcy5vbkRlbGV0ZS5iaW5kKHRoaXMsaWQpfSBkYXRhLXRpcD1cImRlbGV0ZVwiID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzc05hbWU9XCJmYSBmYS10cmFzaC1vIGRlbGV0ZS1pY29uXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9XG59O1xuIiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBFZGl0YWJsZVRhYmxlSGVhZGluZyBmcm9tICcuL0VkaXRhYmxlVGFibGVIZWFkaW5nJztcbmltcG9ydCBFZGl0YWJsZVRhYmxlQ2VsbCBmcm9tICcuL0VkaXRhYmxlVGFibGVDZWxsJztcbmltcG9ydCBFZGl0YWJsZUFjdGlvbnNUYWJsZUNlbGwgZnJvbSAnLi9FZGl0YWJsZUFjdGlvbnNUYWJsZUNlbGwnO1xuaW1wb3J0IEVkaXRhYmxlVGFibGVSb3cgZnJvbSAnLi9FZGl0YWJsZVRhYmxlUm93JztcbmltcG9ydCBTd2FsIGZyb20gXCJzd2VldGFsZXJ0MlwiO1xuaW1wb3J0IFQgZnJvbSBcImkxOG4tcmVhY3QvZGlzdC9pMThuLXJlYWN0XCI7XG5pbXBvcnQgJy4vZWRpdGFibGUtdGFibGUuY3NzJztcbmltcG9ydCBSZWFjdFRvb2x0aXAgZnJvbSBcInJlYWN0LXRvb2x0aXBcIjtcbmltcG9ydCB7IHNoYWxsb3dFcXVhbCB9IGZyb20gJy4uLy4uL3V0aWxzL21ldGhvZHMnXG5cbmNvbnN0IGRlZmF1bHRzID0ge1xuICAgIGNvbFdpZHRoOiAnJ1xufTtcblxuY29uc3QgY3JlYXRlUm93ID0gKHJvdywgY29sdW1ucywgYWN0aW9ucywgc2hvdWxkVXNlVGV4dEFyZWEpID0+IHtcblxuICAgIHZhciBhY3Rpb25fYnV0dG9ucyA9ICcnO1xuICAgIHZhciBjZWxscyA9IGNvbHVtbnMubWFwKChjb2wsaSkgPT4ge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPEVkaXRhYmxlVGFibGVDZWxsIHNob3VsZFVzZVRleHRBcmVhPXtzaG91bGRVc2VUZXh0QXJlYX0ga2V5PXtyb3dbJ2lkJ10gKyAnX2ZpZWxkJyArIGl9IG5hbWU9e2NvbC5jb2x1bW5LZXl9IGlkPXtyb3cuaWR9IGlzX2VkaXQ9e3Jvdy5pc19lZGl0fSBoYW5kbGVDaGFuZ2U9e2FjdGlvbnMuaGFuZGxlQ2hhbmdlfT5cbiAgICAgICAgICAgICAgICB7cm93W2NvbC5jb2x1bW5LZXldfVxuICAgICAgICAgICAgPC9FZGl0YWJsZVRhYmxlQ2VsbD5cbiAgICAgICAgKTtcbiAgICB9KTtcblxuICAgIGlmIChhY3Rpb25zKSB7XG4gICAgICAgIGNlbGxzLnB1c2goPEVkaXRhYmxlQWN0aW9uc1RhYmxlQ2VsbCBrZXk9eydhY3Rpb25zXycgKyByb3dbJ2lkJ119IGlkPXtyb3dbJ2lkJ119IGFjdGlvbnM9e2FjdGlvbnN9Lz4pO1xuICAgIH1cblxuICAgIHJldHVybiBjZWxscztcbn07XG5cbmNvbnN0IGNyZWF0ZU5ld1JvdyA9IChjb2x1bW5zLCBuZXdfcm93LCBhZGROZXcsIGhhbmRsZUNoYW5nZSwgc2hvdWxkVXNlVGV4dEFyZWEpID0+IHtcblxuICAgIHZhciBjZWxscyA9IGNvbHVtbnMubWFwKChjb2wsaSkgPT4ge1xuICAgICAgICBsZXQgY2VsbF92YWx1ZSA9ICh0eXBlb2YgbmV3X3Jvd1tjb2wuY29sdW1uS2V5XSAhPT0gJ3VuZGVmaW5lZCcpID8gbmV3X3Jvd1tjb2wuY29sdW1uS2V5XSA6ICcnO1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPHRkIGtleT17J25ld19yb3dfJyArIGl9PlxuICAgICAgICAgICAgICAgIHtzaG91bGRVc2VUZXh0QXJlYSAmJlxuICAgICAgICAgICAgICAgICAgICA8dGV4dGFyZWEgY2xhc3NOYW1lPVwiZm9ybS1jb250cm9sXCIgaWQ9eyduZXdfJyArIGNvbC5jb2x1bW5LZXl9IG5hbWU9e2NvbC5jb2x1bW5LZXl9IG9uQ2hhbmdlPXtoYW5kbGVDaGFuZ2V9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT17Y2VsbF92YWx1ZX0vPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB7IXNob3VsZFVzZVRleHRBcmVhICYmXG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzc05hbWU9XCJmb3JtLWNvbnRyb2xcIiBpZD17J25ld18nICsgY29sLmNvbHVtbktleX0gbmFtZT17Y29sLmNvbHVtbktleX0gb25DaGFuZ2U9e2hhbmRsZUNoYW5nZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPXtjZWxsX3ZhbHVlfS8+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgKTtcbiAgICB9KTtcblxuICAgIGNlbGxzLnB1c2goXG4gICAgICAgIDx0ZCBrZXk9J2FkZF9uZXcnPlxuICAgICAgICAgICAgPGJ1dHRvbiBjbGFzc05hbWU9XCJidG4gYnRuLWRlZmF1bHRcIiBvbkNsaWNrPXthZGROZXd9PiBBZGQgPC9idXR0b24+XG4gICAgICAgIDwvdGQ+XG4gICAgKTtcblxuICAgIHJldHVybiBjZWxscztcbn07XG5cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRWRpdGFibGVUYWJsZSBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgICAgICBzdXBlcihwcm9wcyk7XG5cbiAgICAgICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgICAgICAgIHJvd3M6IHByb3BzLmRhdGEsXG4gICAgICAgICAgICBuZXdfcm93OiB7fVxuICAgICAgICB9O1xuXG4gICAgICAgIC8vIHdlIHN0b3JlIHRoZSBkZWxldGUgYW5kIHNhdmUgZnVuY3Rpb25zIGluIHByb3BzIGNhdXNlIHdlIG5lZWQgdG8gZXh0ZW5kIHRoZW1cbiAgICAgICAgdGhpcy5vblNhdmUgPSBwcm9wcy5vcHRpb25zLmFjdGlvbnMuc2F2ZS5vbkNsaWNrO1xuXG4gICAgICAgIHRoaXMuYWN0aW9ucyA9IHsuLi5wcm9wcy5vcHRpb25zLmFjdGlvbnN9O1xuICAgICAgICB0aGlzLmFjdGlvbnMuZWRpdCA9IHRoaXMuZWRpdFJvdy5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLmFjdGlvbnMuc2F2ZSA9IHRoaXMuc2F2ZVJvdy5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLmFjdGlvbnMuZGVsZXRlID0gdGhpcy5kZWxldGVDbGljay5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLmFjdGlvbnMuaGFuZGxlQ2hhbmdlID0gdGhpcy5vbkNoYW5nZUNlbGwuYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5hY3Rpb25zLmNhbmNlbCA9IHRoaXMuZWRpdFJvd0NhbmNlbC5iaW5kKHRoaXMpO1xuXG4gICAgICAgIHRoaXMuc2F2ZU5ld1JvdyA9IHRoaXMuc2F2ZU5ld1Jvdy5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLmhhbmRsZU5ld0NoYW5nZSA9IHRoaXMub25DaGFuZ2VOZXdDZWxsLmJpbmQodGhpcyk7XG4gICAgfVxuXG4gICAgY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wcywgcHJldlN0YXRlLCBzbmFwc2hvdCkge1xuICAgICAgICBpZighc2hhbGxvd0VxdWFsKHRoaXMucHJvcHMuZGF0YSwgcHJldlByb3BzLmRhdGEpKSB7XG4gICAgICAgICAgICB0aGlzLnNldFN0YXRlKHtyb3dzOiB0aGlzLnByb3BzLmRhdGF9KVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgc2F2ZVJvdyhpZCwgZXYpIHtcbiAgICAgICAgY29uc3QgeyByb3dzIH0gPSB0aGlzLnN0YXRlO1xuICAgICAgICBsZXQgcm93ID0gcm93cy5maW5kKHIgPT4gci5pZCA9PSBpZCk7XG4gICAgICAgIHJvdy5pc19lZGl0ID0gZmFsc2U7XG5cbiAgICAgICAgdGhpcy5lZGl0aW5nX3JvdyA9IG51bGw7XG5cbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgICByb3dzOiByb3dzXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMub25TYXZlKHJvdyk7XG4gICAgfVxuXG4gICAgZGVsZXRlQ2xpY2soaWQpIHtcbiAgICAgICAgbGV0IG9uRGVsZXRlID0gdGhpcy5wcm9wcy5vcHRpb25zLmFjdGlvbnMuZGVsZXRlLm9uQ2xpY2s7XG4gICAgICAgIGxldCBub0FsZXJ0ID0gdGhpcy5wcm9wcy5vcHRpb25zLmhhc093blByb3BlcnR5KCdub0FsZXJ0Jyk7XG5cbiAgICAgICAgaWYgKG5vQWxlcnQpIHtcbiAgICAgICAgICAgIG9uRGVsZXRlKGlkKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIFN3YWwuZmlyZSh7XG4gICAgICAgICAgICAgICAgdGl0bGU6IFQudHJhbnNsYXRlKFwiZ2VuZXJhbC5hcmVfeW91X3N1cmVcIiksXG4gICAgICAgICAgICAgICAgdGV4dDogVC50cmFuc2xhdGUoXCJnZW5lcmFsLnJlbW92ZV93YXJuaW5nXCIpLFxuICAgICAgICAgICAgICAgIHR5cGU6IFwid2FybmluZ1wiLFxuICAgICAgICAgICAgICAgIHNob3dDYW5jZWxCdXR0b246IHRydWUsXG4gICAgICAgICAgICAgICAgY29uZmlybUJ1dHRvbkNvbG9yOiBcIiNERDZCNTVcIixcbiAgICAgICAgICAgICAgICBjb25maXJtQnV0dG9uVGV4dDogVC50cmFuc2xhdGUoXCJnZW5lcmFsLnllc19kZWxldGVcIilcbiAgICAgICAgICAgIH0pLnRoZW4oZnVuY3Rpb24ocmVzdWx0KXtcbiAgICAgICAgICAgICAgICBpZiAocmVzdWx0LnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIG9uRGVsZXRlKGlkKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGVkaXRSb3coaWQsIGV2KSB7XG4gICAgICAgIGNvbnN0IHsgcm93cyB9ID0gdGhpcy5zdGF0ZTtcbiAgICAgICAgbGV0IHJvdyA9IHJvd3MuZmluZChyID0+IHIuaWQgPT0gaWQpO1xuXG4gICAgICAgIC8vc2F2ZSBlZGl0aW5nIHJvdyBmb3IgY2FuY2VsXG4gICAgICAgIHRoaXMuZWRpdGluZ19yb3cgPSB7Li4ucm93fTtcblxuICAgICAgICByb3cuaXNfZWRpdCA9IHRydWU7XG5cbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgICByb3dzOiByb3dzXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGVkaXRSb3dDYW5jZWwoaWQsIGV2KSB7XG4gICAgICAgIGNvbnN0IHsgcm93cyB9ID0gdGhpcy5zdGF0ZTtcbiAgICAgICAgcm93cy5mb3JFYWNoKHIgPT4ge1xuICAgICAgICAgICAgci5pc19lZGl0ID0gZmFsc2U7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGxldCByb3dJZHggPSByb3dzLmZpbmRJbmRleChyID0+IHIuaWQgPT0gaWQpO1xuXG4gICAgICAgIHJvd3Nbcm93SWR4XSA9IHRoaXMuZWRpdGluZ19yb3c7XG5cbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgICByb3dzOiByb3dzXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIG9uQ2hhbmdlQ2VsbChldikge1xuICAgICAgICBjb25zdCB7IHJvd3MgfSA9IHRoaXMuc3RhdGU7XG4gICAgICAgIGxldCBmaWVsZCA9IGV2LnRhcmdldDtcbiAgICAgICAgbGV0IHJvdyA9IHJvd3MuZmluZChyID0+IHIuaWQgPT0gZmllbGQuaWQpO1xuXG4gICAgICAgIHJvd1tmaWVsZC5uYW1lXSA9IGZpZWxkLnZhbHVlO1xuXG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgICAgcm93czogcm93c1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBvbkNoYW5nZU5ld0NlbGwoZXYpIHtcbiAgICAgICAgY29uc3Qge25ld19yb3d9ID0gdGhpcy5zdGF0ZTtcbiAgICAgICAgbGV0IGZpZWxkID0gZXYudGFyZ2V0O1xuXG4gICAgICAgIG5ld19yb3dbZmllbGQubmFtZV0gPSBmaWVsZC52YWx1ZTtcblxuICAgICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICAgIG5ld19yb3c6IG5ld19yb3dcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgc2F2ZU5ld1Jvdyhldikge1xuICAgICAgICBjb25zdCB7bmV3X3Jvd30gPSB0aGlzLnN0YXRlO1xuICAgICAgICBldi5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgICAgIHRoaXMub25TYXZlKG5ld19yb3cpO1xuXG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgICAgbmV3X3Jvdzoge31cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmVuZGVyKCkge1xuICAgICAgICBsZXQge29wdGlvbnMsIGNvbHVtbnMgfSA9IHRoaXMucHJvcHM7XG4gICAgICAgIGxldCB0YWJsZUNsYXNzID0gb3B0aW9ucy5oYXNPd25Qcm9wZXJ0eSgnY2xhc3NOYW1lJykgPyBvcHRpb25zLmNsYXNzTmFtZSA6ICcnO1xuICAgICAgICBsZXQgdGV4dEFyZWEgPSB0aGlzLnByb3BzLmhhc093blByb3BlcnR5KFwidGV4dEFyZWFcIik7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgIDx0YWJsZSBjbGFzc05hbWU9e1widGFibGUgdGFibGUtc3RyaXBlZCB0YWJsZS1ib3JkZXJlZCBlZGl0YWJsZVRhYmxlIFwiICsgdGFibGVDbGFzc30+XG4gICAgICAgICAgICAgICAgICAgIDx0aGVhZD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Y29sdW1ucy5tYXAoKGNvbCxpKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjb2xXaWR0aCA9IChjb2wud2lkdGgpID8gY29sLndpZHRoIDogZGVmYXVsdHMuY29sV2lkdGg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8RWRpdGFibGVUYWJsZUhlYWRpbmcgd2lkdGg9e2NvbFdpZHRofSBrZXk9eydoZWFkaW5nXycgKyBpfSA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2NvbC52YWx1ZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvRWRpdGFibGVUYWJsZUhlYWRpbmc+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3RoaXMuYWN0aW9ucyAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8RWRpdGFibGVUYWJsZUhlYWRpbmcga2V5PSdhY3Rpb25zX2hlYWRpbmcnID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFjdGlvbnNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9FZGl0YWJsZVRhYmxlSGVhZGluZz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgICAgICAgICA8L3RoZWFkPlxuICAgICAgICAgICAgICAgICAgICA8dGJvZHk+XG4gICAgICAgICAgICAgICAgICAgICAgICB7Y29sdW1ucy5sZW5ndGggPiAwICYmIHRoaXMuc3RhdGUucm93cy5tYXAoKHJvdyxpKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoQXJyYXkuaXNBcnJheShyb3cpICYmIHJvdy5sZW5ndGggIT09IGNvbHVtbnMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybihgRGF0YSBhdCByb3cgJHtpfSBpcyAke3Jvdy5sZW5ndGh9LiBJdCBzaG91bGQgYmUgJHtjb2x1bW5zLmxlbmd0aH0uYCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiA8dHIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEVkaXRhYmxlVGFibGVSb3cgZXZlbj17aSUyID09PSAwfSBrZXk9eydyb3dfJyArIHJvdy5pZH0gaWQ9e3Jvdy5pZH0gPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2NyZWF0ZVJvdyhyb3csIGNvbHVtbnMsIHRoaXMuYWN0aW9ucywgdGV4dEFyZWEpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0VkaXRhYmxlVGFibGVSb3c+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICAgICAgICAgICAgICA8RWRpdGFibGVUYWJsZVJvdyBldmVuPXswfSBpZD0nbmV3X3Jvdycga2V5PSduZXdfcm93Jz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Y3JlYXRlTmV3Um93KGNvbHVtbnMsIHRoaXMuc3RhdGUubmV3X3JvdywgdGhpcy5zYXZlTmV3Um93LCB0aGlzLmhhbmRsZU5ld0NoYW5nZSwgdGV4dEFyZWEpfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9FZGl0YWJsZVRhYmxlUm93PlxuICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PlxuICAgICAgICAgICAgICAgIDwvdGFibGU+XG4gICAgICAgICAgICAgICAgPFJlYWN0VG9vbHRpcCBkZWxheVNob3c9ezEwfSAvPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICk7XG4gICAgfVxufTtcbiIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5cbmNvbnN0IEVkaXRhYmxlVGFibGVDZWxsID0gKHByb3BzKSA9PiB7XG5cbiAgICBpZiAocHJvcHMuaXNfZWRpdCkge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPHRkPlxuICAgICAgICAgICAgICAgIHshcHJvcHMuc2hvdWxkVXNlVGV4dEFyZWEgJiZcbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3NOYW1lPVwiZm9ybS1jb250cm9sXCIgZGVmYXVsdFZhbHVlPXtwcm9wcy5jaGlsZHJlbn0gbmFtZT17cHJvcHMubmFtZX0gaWQ9e3Byb3BzLmlkfSBvbkNoYW5nZT17cHJvcHMuaGFuZGxlQ2hhbmdlfS8+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHtwcm9wcy5zaG91bGRVc2VUZXh0QXJlYSAmJlxuICAgICAgICAgICAgICAgICAgICA8dGV4dGFyZWEgY2xhc3NOYW1lPVwiZm9ybS1jb250cm9sXCIgZGVmYXVsdFZhbHVlPXtwcm9wcy5jaGlsZHJlbn0gbmFtZT17cHJvcHMubmFtZX0gaWQ9e3Byb3BzLmlkfSBvbkNoYW5nZT17cHJvcHMuaGFuZGxlQ2hhbmdlfS8+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPHRkPntwcm9wcy5jaGlsZHJlbn08L3RkPlxuICAgICAgICApO1xuICAgIH1cblxufTtcblxuZXhwb3J0IGRlZmF1bHQgRWRpdGFibGVUYWJsZUNlbGw7IiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcblxuY2xhc3MgRWRpdGFibGVUYWJsZUhlYWRpbmcgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuXG4gICAgY29uc3RydWN0b3IgKHByb3BzKSB7XG4gICAgICAgIHN1cGVyKHByb3BzKTtcbiAgICB9XG5cbiAgICByZW5kZXIgKCkge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPHRoIHdpZHRoPXt0aGlzLnByb3BzLndpZHRofT5cbiAgICAgICAgICAgICAgICAgICAge3RoaXMucHJvcHMuY2hpbGRyZW59XG4gICAgICAgICAgICA8L3RoPlxuICAgICAgICApO1xuICAgIH1cblxufVxuXG5leHBvcnQgZGVmYXVsdCBFZGl0YWJsZVRhYmxlSGVhZGluZzsiLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFZGl0YWJsZVRhYmxlUm93IGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcblxuICAgIHJlbmRlcigpIHtcbiAgICAgICAgY29uc3QgeyBjaGlsZHJlbiwgZXZlbiwgaWQgfSA9IHRoaXMucHJvcHM7XG5cbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDx0ciBpZD17aWR9IHJvbGU9XCJyb3dcIiBjbGFzc05hbWU9e2V2ZW4gPyAnZXZlbicgOiAnb2RkJ30+XG4gICAgICAgICAgICAgICAge2NoaWxkcmVufVxuICAgICAgICAgICAgPC90cj5cbiAgICAgICAgKTtcbiAgICB9XG59XG4iLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW4iLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTZWxlY3RhYmxlQWN0aW9uc1RhYmxlQ2VsbCBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgICAgICBzdXBlcihwcm9wcyk7XG5cbiAgICAgICAgdGhpcy5oYW5kbGVBY3Rpb24gPSB0aGlzLmhhbmRsZUFjdGlvbi5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLnNob3VsZERpc3BsYXlBY3Rpb24gPSB0aGlzLnNob3VsZERpc3BsYXlBY3Rpb24uYmluZCh0aGlzKTtcblxuICAgIH1cblxuICAgIHNob3VsZERpc3BsYXlBY3Rpb24oYWN0aW9uKSB7XG4gICAgICAgIGxldCB7aWR9ID0gdGhpcy5wcm9wcztcblxuICAgICAgICBpZiAoIWFjdGlvbi5oYXNPd25Qcm9wZXJ0eSgnZGlzcGxheScpKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBhY3Rpb24uZGlzcGxheShpZCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBoYW5kbGVBY3Rpb24oYWN0aW9uLCBpZCwgZXYpIHtcbiAgICAgICAgZXYuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIGV2LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAgICAgYWN0aW9uKGlkKTtcbiAgICB9XG5cbiAgICByZW5kZXIoKSB7XG4gICAgICAgIGxldCB7YWN0aW9ucywgaWR9ID0gdGhpcy5wcm9wcztcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDx0ZCBjbGFzc05hbWU9XCJhY3Rpb25zXCIga2V5PVwiYWN0aW9uc1wiPlxuICAgICAgICAgICAgICAgIHthY3Rpb25zLmhhc093blByb3BlcnR5KCdkZWxldGUnKSAmJiB0aGlzLnNob3VsZERpc3BsYXlBY3Rpb24oYWN0aW9ucy5kZWxldGUpICAmJlxuICAgICAgICAgICAgICAgICAgICA8YSBocmVmPVwiXCIgZGF0YS10aXA9XCJkZWxldGVcIiBvbkNsaWNrPXt0aGlzLmhhbmRsZUFjdGlvbi5iaW5kKHRoaXMsIGFjdGlvbnMuZGVsZXRlLm9uQ2xpY2ssIGlkKX0gPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3NOYW1lPVwiZmEgZmEtdHJhc2gtbyBkZWxldGUtaWNvblwiPjwvaT5cbiAgICAgICAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB7YWN0aW9ucy5oYXNPd25Qcm9wZXJ0eSgnY3VzdG9tJykgJiYgYWN0aW9ucy5jdXN0b20ubWFwKGEgPT5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zaG91bGREaXNwbGF5QWN0aW9uKGEpICYmXG4gICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9XCJcIiBkYXRhLXRpcD17YS50b29sdGlwfSBrZXk9eydjdXN0b21fJyArIGEubmFtZX0gb25DbGljaz17dGhpcy5oYW5kbGVBY3Rpb24uYmluZCh0aGlzLCBhLm9uQ2xpY2ssIGlkKX0+XG4gICAgICAgICAgICAgICAgICAgICAgICB7YS5pY29ufVxuICAgICAgICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICk7XG4gICAgfVxufTtcbiIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgU2VsZWN0YWJsZVRhYmxlSGVhZGluZyBmcm9tICcuL1NlbGVjdGFibGVUYWJsZUhlYWRpbmcnO1xuaW1wb3J0IFNlbGVjdGFibGVUYWJsZUNlbGwgZnJvbSAnLi9TZWxlY3RhYmxlVGFibGVDZWxsJztcbmltcG9ydCBTZWxlY3RhYmxlVGFibGVSb3cgZnJvbSAnLi9TZWxlY3RhYmxlVGFibGVSb3cnO1xuaW1wb3J0IFNlbGVjdGFibGVBY3Rpb25zVGFibGVDZWxsIGZyb20gJy4vU2VsZWN0YWJsZUFjdGlvbnNUYWJsZUNlbGwnO1xuaW1wb3J0IFJlYWN0VG9vbHRpcCBmcm9tICdyZWFjdC10b29sdGlwJ1xuaW1wb3J0ICcuL3NlbGVjdGFibGUtdGFibGUuY3NzJztcblxuY29uc3QgZGVmYXVsdHMgPSB7XG4gICAgc29ydEZ1bmM6IChhLGIpID0+IChhIDwgYiA/IC0xIDogKGEgPiBiID8gMSA6IDApKSxcbiAgICBzb3J0YWJsZTogZmFsc2UsXG4gICAgc29ydENvbDogMCxcbiAgICBzb3J0RGlyOiAxLFxuICAgIGNvbFdpZHRoOiAnJ1xufVxuXG5jb25zdCBjcmVhdGVSb3cgPSAocm93LCBjb2x1bW5zLCBhY3Rpb25zKSA9PiB7XG5cbiAgICB2YXIgYWN0aW9uX2J1dHRvbnMgPSAnJztcbiAgICB2YXIgY2VsbHMgPSBjb2x1bW5zLm1hcCgoY29sLGkpID0+IHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxTZWxlY3RhYmxlVGFibGVDZWxsIGtleT17cm93WydpZCddICsgJ19maWVsZCcgKyBpfSBuYW1lPXtjb2wuY29sdW1uS2V5fSBpZD17cm93LmlkfT5cbiAgICAgICAgICAgICAgICB7cm93W2NvbC5jb2x1bW5LZXldfVxuICAgICAgICAgICAgPC9TZWxlY3RhYmxlVGFibGVDZWxsPlxuICAgICAgICApO1xuICAgIH0pO1xuXG4gICAgaWYgKGFjdGlvbnMpIHtcbiAgICAgICAgY2VsbHMucHVzaCg8U2VsZWN0YWJsZUFjdGlvbnNUYWJsZUNlbGwga2V5PSdhY3Rpb25zX2NlbGwnIGlkPXtyb3dbJ2lkJ119IGFjdGlvbnM9e2FjdGlvbnN9IC8+KTtcbiAgICB9XG5cbiAgICByZXR1cm4gY2VsbHM7XG59O1xuXG5jb25zdCBnZXRTb3J0RGlyID0gKGNvbHVtbktleSwgY29sdW1uSW5kZXgsIHNvcnRDb2wsIHNvcnREaXIpID0+IHtcbiAgICBpZihjb2x1bW5LZXkgJiYgKGNvbHVtbktleSA9PT0gc29ydENvbCkpIHtcbiAgICAgICAgcmV0dXJuIHNvcnREaXI7XG4gICAgfVxuICAgIGlmKHNvcnRDb2wgPT09IGNvbHVtbkluZGV4KSB7XG4gICAgICAgIHJldHVybiBzb3J0RGlyO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbFxufTtcblxuXG5jbGFzcyBTZWxlY3RhYmxlVGFibGUgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICAgICAgc3VwZXIocHJvcHMpO1xuICAgIH1cblxuICAgIHJlbmRlcigpIHtcbiAgICAgICAgbGV0IHtvcHRpb25zLCBjb2x1bW5zfSA9IHRoaXMucHJvcHM7XG4gICAgICAgIGxldCBzZWxlY3RlZElkcyA9IG9wdGlvbnMuaGFzT3duUHJvcGVydHkoJ3NlbGVjdGVkSWRzJykgPyBvcHRpb25zLnNlbGVjdGVkSWRzIDogW107XG4gICAgICAgIGxldCB0YWJsZUNsYXNzID0gb3B0aW9ucy5oYXNPd25Qcm9wZXJ0eSgnY2xhc3NOYW1lJykgPyBvcHRpb25zLmNsYXNzTmFtZSA6ICcnO1xuICAgICAgICB0YWJsZUNsYXNzICs9IChvcHRpb25zLmFjdGlvbnMuaGFzT3duUHJvcGVydHkoJ2VkaXQnKSkgPyAnIHRhYmxlLWhvdmVyJyA6ICcnO1xuXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgIDx0YWJsZSBjbGFzc05hbWU9e1widGFibGUgdGFibGUtc3RyaXBlZCBkYXRhVGFibGUgXCIgKyB0YWJsZUNsYXNzfT5cbiAgICAgICAgICAgICAgICAgICAgPHRoZWFkPlxuICAgICAgICAgICAgICAgICAgICA8dHI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGg+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIGlkPVwic2VsZWN0X2FsbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9XCJzZWxlY3RfYWxsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9e29wdGlvbnMuYWN0aW9ucy5lZGl0Lm9uU2VsZWN0ZWRBbGx9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrZWQ9e29wdGlvbnMuc2VsZWN0ZWRBbGx9Lz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGg+XG4gICAgICAgICAgICAgICAgICAgICAgICB7Y29sdW1ucy5tYXAoKGNvbCxpKSA9PiB7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgc29ydENvbCA9ICh0eXBlb2Ygb3B0aW9ucy5zb3J0Q29sICE9ICd1bmRlZmluZWQnKSA/IG9wdGlvbnMuc29ydENvbCA6IGRlZmF1bHRzLnNvcnRDb2w7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHNvcnREaXIgPSAodHlwZW9mIG9wdGlvbnMuc29ydERpciAhPSAndW5kZWZpbmVkJykgPyBvcHRpb25zLnNvcnREaXIgOiBkZWZhdWx0cy5zb3J0RGlyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBzb3J0RnVuYyA9ICh0eXBlb2Ygb3B0aW9ucy5zb3J0RnVuYyAhPSAndW5kZWZpbmVkJykgPyBvcHRpb25zLnNvcnRGdW5jIDogZGVmYXVsdHMuc29ydEZ1bmM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHNvcnRhYmxlID0gKHR5cGVvZiBjb2wuc29ydGFibGUgIT0gJ3VuZGVmaW5lZCcpID8gY29sLnNvcnRhYmxlIDogZGVmYXVsdHMuc29ydGFibGU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGNvbFdpZHRoID0gKHR5cGVvZiBjb2wud2lkdGggIT0gJ3VuZGVmaW5lZCcpID8gY29sLndpZHRoIDogZGVmYXVsdHMuY29sV2lkdGg7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U2VsZWN0YWJsZVRhYmxlSGVhZGluZ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25Tb3J0PXt0aGlzLnByb3BzLm9uU29ydH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvcnREaXI9e2dldFNvcnREaXIoY29sLmNvbHVtbktleSwgaSwgc29ydENvbCwgc29ydERpcil9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3J0YWJsZT17c29ydGFibGV9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3J0RnVuYz17c29ydEZ1bmN9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5JbmRleD17aX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbktleT17Y29sLmNvbHVtbktleX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoPXtjb2xXaWR0aH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleT17J2hlYWRpbmdfJytpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Y29sLnZhbHVlfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L1NlbGVjdGFibGVUYWJsZUhlYWRpbmc+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pfVxuICAgICAgICAgICAgICAgICAgICAgICAge29wdGlvbnMuYWN0aW9ucyAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgPFNlbGVjdGFibGVUYWJsZUhlYWRpbmcga2V5PSdhY3Rpb25zX2hlYWRpbmcnID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7b3B0aW9ucy5hY3Rpb25zSGVhZGVyIHx8ICcgJ31cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvU2VsZWN0YWJsZVRhYmxlSGVhZGluZz5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgICAgICAgICAgPC90aGVhZD5cbiAgICAgICAgICAgICAgICAgICAgPHRib2R5PlxuICAgICAgICAgICAgICAgICAgICB7Y29sdW1ucy5sZW5ndGggPiAwICYmIHRoaXMucHJvcHMuZGF0YS5tYXAoKHJvdyxpKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZihBcnJheS5pc0FycmF5KHJvdykgJiYgcm93Lmxlbmd0aCAhPT0gY29sdW1ucy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oYERhdGEgYXQgcm93ICR7aX0gaXMgJHtyb3cubGVuZ3RofS4gSXQgc2hvdWxkIGJlICR7Y29sdW1ucy5sZW5ndGh9LmApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiA8dHIga2V5PXsncm93XycraX0gLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U2VsZWN0YWJsZVRhYmxlUm93IGNoZWNrZWQ9e29wdGlvbnMuc2VsZWN0ZWRBbGwgfHwgc2VsZWN0ZWRJZHMuaW5jbHVkZXMocm93WydpZCddKX0gZXZlbj17aSUyID09PSAwfSBrZXk9eydyb3dfJytyb3dbJ2lkJ119IGlkPXtyb3dbJ2lkJ119IGFjdGlvbnM9e29wdGlvbnMuYWN0aW9uc30+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtjcmVhdGVSb3cocm93LCBjb2x1bW5zLCBvcHRpb25zLmFjdGlvbnMpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvU2VsZWN0YWJsZVRhYmxlUm93PlxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+XG4gICAgICAgICAgICAgICAgPC90YWJsZT5cbiAgICAgICAgICAgICAgICA8UmVhY3RUb29sdGlwIGRlbGF5U2hvdz17MTB9IC8+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKTtcbiAgICB9XG59XG5cblxuZXhwb3J0IGRlZmF1bHQgU2VsZWN0YWJsZVRhYmxlO1xuIiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBSYXdIVE1MIGZyb20gJy4uL3Jhdy1odG1sJztcblxuY29uc3QgU2VsZWN0YWJsZVRhYmxlQ2VsbCA9IChwcm9wcykgPT4ge1xuICAgIGxldCB7Y2hpbGRyZW59ID0gcHJvcHM7XG5cdGxldCB2YWx1ZSA9ICcnO1xuXHRpZihjaGlsZHJlbikge1xuXHQgICAgaWYgKFJlYWN0LmlzVmFsaWRFbGVtZW50KGNoaWxkcmVuKSkge1xuXHQgICAgICAgIHZhbHVlID0gY2hpbGRyZW47XG4gICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgdmFsdWUgPSA8UmF3SFRNTD57Y2hpbGRyZW4udG9TdHJpbmcoKX08L1Jhd0hUTUw+XG4gICAgICAgIH1cbiAgICB9XG5cblx0cmV0dXJuIChcblx0XHQ8dGQgey4uLnByb3BzfT5cbiAgICAgICAgICAgIHt2YWx1ZX1cblx0XHQ8L3RkPlxuXHQpO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgU2VsZWN0YWJsZVRhYmxlQ2VsbDtcbiIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuXG5jbGFzcyBTZWxlY3RhYmxlVGFibGVIZWFkaW5nIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcblxuXHRjb25zdHJ1Y3RvciAocHJvcHMpIHtcblx0XHRzdXBlcihwcm9wcyk7XG5cdFx0dGhpcy5oYW5kbGVTb3J0ID0gdGhpcy5oYW5kbGVTb3J0LmJpbmQodGhpcyk7XG5cdH1cblxuXHRnZXRTb3J0Q2xhc3MoKSB7XG5cblx0XHRpZiAoIXRoaXMucHJvcHMuc29ydGFibGUpIHJldHVybiBudWxsO1xuXG5cdFx0c3dpdGNoKHRoaXMucHJvcHMuc29ydERpcikge1xuXHRcdFx0Y2FzZSAxOlxuXHRcdFx0XHRyZXR1cm4gJ3NvcnRpbmdfYXNjJztcblx0XHRcdGNhc2UgLTE6XG5cdFx0XHRcdHJldHVybiAnc29ydGluZ19kZXNjJztcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdHJldHVybiB0aGlzLnByb3BzLnNvcnRhYmxlID8gJ3NvcnRpbmcnIDogbnVsbFxuXHRcdH1cblx0fVxuXG5cdGhhbmRsZVNvcnQoZSkge1xuXHRcdGUucHJldmVudERlZmF1bHQoKTtcblx0XHRpZighdGhpcy5wcm9wcy5oYXNPd25Qcm9wZXJ0eSgnb25Tb3J0JykgfHwgIXRoaXMucHJvcHMuc29ydGFibGUpIHJldHVybjtcblxuXHRcdHRoaXMucHJvcHMub25Tb3J0KFxuXHRcdFx0dGhpcy5wcm9wcy5jb2x1bW5JbmRleCxcblx0XHRcdHRoaXMucHJvcHMuY29sdW1uS2V5LFxuXHRcdFx0dGhpcy5wcm9wcy5zb3J0RGlyID8gdGhpcy5wcm9wcy5zb3J0RGlyKi0xIDogMSxcblx0XHRcdHRoaXMucHJvcHMuc29ydEZ1bmNcblx0XHQpO1xuXHR9XG5cblx0cmVuZGVyICgpIHtcblx0XHRyZXR1cm4gKFxuXHRcdFx0PHRoIG9uQ2xpY2s9e3RoaXMuaGFuZGxlU29ydH1cblx0XHRcdFx0Y2xhc3NOYW1lPXt0aGlzLmdldFNvcnRDbGFzcygpfVxuXHRcdFx0XHR3aWR0aD17dGhpcy5wcm9wcy53aWR0aH1cblx0XHRcdFx0PlxuXHRcdFx0XHR7dGhpcy5wcm9wcy5jaGlsZHJlbn1cblx0XHRcdDwvdGg+XG5cdFx0KTtcdFxuXHR9XG5cdFxufVxuXG5TZWxlY3RhYmxlVGFibGVIZWFkaW5nLnByb3BUeXBlcyA9IHtcblx0b25Tb3J0OiBQcm9wVHlwZXMuZnVuYyxcblx0c29ydERpcjogUHJvcFR5cGVzLm51bWJlcixcblx0Y29sdW1uSW5kZXg6IFByb3BUeXBlcy5udW1iZXIsXG5cdGNvbHVtbktleTogUHJvcFR5cGVzLmFueSxcblx0c29ydGFibGU6IFByb3BUeXBlcy5ib29sLFxuXHRzb3J0RnVuYzogUHJvcFR5cGVzLmZ1bmNcbn07XG5cbmV4cG9ydCBkZWZhdWx0IFNlbGVjdGFibGVUYWJsZUhlYWRpbmc7IiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU2VsZWN0YWJsZVRhYmxlUm93IGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcblxuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgICAgIHN1cGVyKHByb3BzKTtcbiAgICAgICAgdGhpcy5oYW5kbGVFZGl0ID0gdGhpcy5oYW5kbGVFZGl0LmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuaGFuZGxlU2VsZWN0ID0gdGhpcy5oYW5kbGVTZWxlY3QuYmluZCh0aGlzKTtcbiAgICB9XG5cbiAgICBzaG91bGREaXNwbGF5QWN0aW9uKGFjdGlvbikge1xuICAgICAgICBsZXQge2lkfSA9IHRoaXMucHJvcHM7XG4gICAgICAgIGlmICghYWN0aW9uLmhhc093blByb3BlcnR5KCdkaXNwbGF5JykpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGFjdGlvbi5kaXNwbGF5KGlkKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGhhbmRsZUVkaXQoaWQsIGV2KSB7XG4gICAgICAgIC8vIGJ5IHBhc3NcbiAgICAgICAgaWYoZXYudGFyZ2V0LnR5cGUgPT09IFwiY2hlY2tib3hcIilcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgZXYuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIGV2LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHRoaXMucHJvcHMuYWN0aW9ucy5lZGl0Lm9uQ2xpY2soaWQpO1xuICAgIH1cblxuICAgIGhhbmRsZVNlbGVjdChpZCwgZXYpIHtcbiAgICAgICAgdGhpcy5wcm9wcy5hY3Rpb25zLmVkaXQub25TZWxlY3RlZChpZCwgZXYudGFyZ2V0LmNoZWNrZWQpO1xuICAgIH1cblxuICAgIHJlbmRlcigpIHtcblxuICAgICAgICBsZXQge2V2ZW4sIGFjdGlvbnMsIGlkLCBjaGlsZHJlbiwgY2hlY2tlZH0gPSB0aGlzLnByb3BzO1xuICAgICAgICBsZXQgY2FuRWRpdCA9IChhY3Rpb25zLmhhc093blByb3BlcnR5KCdlZGl0JykgJiYgdGhpcy5zaG91bGREaXNwbGF5QWN0aW9uKGFjdGlvbnMuZWRpdCkpO1xuICAgICAgICBsZXQgcm93Q2xhc3MgPSBldmVuID8gJ2V2ZW4nIDogJ29kZCc7XG5cbiAgICAgICAgaWYgKGNhbkVkaXQpIHtcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgPHRyIHJvbGU9XCJyb3dcIiBjbGFzc05hbWU9e3Jvd0NsYXNzICsgXCIgY2FuLWVkaXRcIn0gb25DbGljaz17dGhpcy5oYW5kbGVFZGl0LmJpbmQodGhpcywgaWQpfT5cbiAgICAgICAgICAgICAgICAgICAgPHRkIGtleT17aWQgKyAnX3NlbGVjdCd9PjxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBpZD17aWQgKyAnX3NlbGVjdCd9IG5hbWU9e2lkICsgJ19zZWxlY3QnfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrZWQ9e2NoZWNrZWR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9e3RoaXMuaGFuZGxlU2VsZWN0LmJpbmQodGhpcywgaWQpfS8+PC90ZD5cbiAgICAgICAgICAgICAgICAgICAge2NoaWxkcmVufVxuICAgICAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICA8dHIgcm9sZT1cInJvd1wiIGNsYXNzTmFtZT17cm93Q2xhc3N9PlxuICAgICAgICAgICAgICAgICAgICA8dGQga2V5PXtpZCArICdfc2VsZWN0J30gPjxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBpZD17aWQgKyAnX3NlbGVjdCd9IG5hbWU9e2lkICsgJ19zZWxlY3QnfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrZWQ9e2NoZWNrZWR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9e3RoaXMuaGFuZGxlU2VsZWN0LmJpbmQodGhpcywgaWQpfS8+PC90ZD5cbiAgICAgICAgICAgICAgICAgICAge2NoaWxkcmVufVxuICAgICAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICk7XG5cbiAgICB9XG59O1xuXG4iLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW4iLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTb3J0YWJsZUFjdGlvbnNUYWJsZUNlbGwgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICAgICAgc3VwZXIocHJvcHMpO1xuXG4gICAgICAgIHRoaXMuaGFuZGxlQWN0aW9uID0gdGhpcy5oYW5kbGVBY3Rpb24uYmluZCh0aGlzKTtcblxuICAgIH1cblxuICAgIHNob3VsZERpc3BsYXlBY3Rpb24oYWN0aW9uKSB7XG4gICAgICAgIGxldCB7aWR9ID0gdGhpcy5wcm9wcztcblxuICAgICAgICBpZiAoIWFjdGlvbi5oYXNPd25Qcm9wZXJ0eSgnZGlzcGxheScpKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBhY3Rpb24uZGlzcGxheShpZCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBoYW5kbGVBY3Rpb24oYWN0aW9uLCBpZCwgZXYpIHtcbiAgICAgICAgZXYuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIGV2LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAgICAgYWN0aW9uKGlkKTtcbiAgICB9XG5cbiAgICByZW5kZXIoKSB7XG4gICAgICAgIGxldCB7YWN0aW9ucywgaWR9ID0gdGhpcy5wcm9wcztcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDx0ZCBjbGFzc05hbWU9XCJhY3Rpb25zXCIga2V5PVwiYWN0aW9uc1wiPlxuICAgICAgICAgICAgICAgIHthY3Rpb25zLmhhc093blByb3BlcnR5KCdlZGl0JykgJiYgdGhpcy5zaG91bGREaXNwbGF5QWN0aW9uKGFjdGlvbnMuZWRpdCkgJiZcbiAgICAgICAgICAgICAgICA8YSBocmVmPVwiXCIgZGF0YS10aXA9XCJlZGl0XCIgb25DbGljaz17dGhpcy5oYW5kbGVBY3Rpb24uYmluZCh0aGlzLCBhY3Rpb25zLmVkaXQub25DbGljaywgaWQpfSA+XG4gICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzTmFtZT1cImZhIGZhLXBlbmNpbC1zcXVhcmUtb1wiPjwvaT5cbiAgICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHthY3Rpb25zLmhhc093blByb3BlcnR5KCdkZWxldGUnKSAmJiB0aGlzLnNob3VsZERpc3BsYXlBY3Rpb24oYWN0aW9ucy5kZWxldGUpICAmJlxuICAgICAgICAgICAgICAgIDxhIGhyZWY9XCJcIiBkYXRhLXRpcD1cImRlbGV0ZVwiIG9uQ2xpY2s9e3RoaXMuaGFuZGxlQWN0aW9uLmJpbmQodGhpcywgYWN0aW9ucy5kZWxldGUub25DbGljaywgaWQpfSA+XG4gICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzTmFtZT1cImZhIGZhLXRyYXNoLW8gZGVsZXRlLWljb25cIj48L2k+XG4gICAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB7J2N1c3RvbScgaW4gYWN0aW9ucyAmJiBhY3Rpb25zLmN1c3RvbS5tYXAoYSA9PlxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3VsZERpc3BsYXlBY3Rpb24oYSwgaWQpICYmXG4gICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9XCJcIiBkYXRhLXRpcD17YS50b29sdGlwfSBrZXk9eydjdXN0b21fJyArIGEubmFtZX0gb25DbGljaz17dGhpcy5oYW5kbGVBY3Rpb24uYmluZCh0aGlzLCBhLm9uQ2xpY2ssIGlkKX0+XG4gICAgICAgICAgICAgICAgICAgICAgICB7YS5pY29ufVxuICAgICAgICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICk7XG4gICAgfVxufTtcbiIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IHVwZGF0ZSBmcm9tICdpbW11dGFiaWxpdHktaGVscGVyJztcbmltcG9ydCB7IERyYWdEcm9wQ29udGV4dCB9IGZyb20gJ3JlYWN0LWRuZCc7XG5pbXBvcnQgSFRNTDVCYWNrZW5kIGZyb20gJ3JlYWN0LWRuZC1odG1sNS1iYWNrZW5kJztcbmltcG9ydCBTb3J0YWJsZVRhYmxlSGVhZGluZyBmcm9tICcuL1NvcnRhYmxlVGFibGVIZWFkaW5nJztcbmltcG9ydCBTb3J0YWJsZVRhYmxlQ2VsbCBmcm9tICcuL1NvcnRhYmxlVGFibGVDZWxsJztcbmltcG9ydCBTb3J0YWJsZUFjdGlvbnNUYWJsZUNlbGwgZnJvbSAnLi9Tb3J0YWJsZUFjdGlvbnNUYWJsZUNlbGwnO1xuaW1wb3J0IFNvcnRhYmxlVGFibGVSb3cgZnJvbSAnLi9Tb3J0YWJsZVRhYmxlUm93JztcbmltcG9ydCBUIGZyb20gJ2kxOG4tcmVhY3QvZGlzdC9pMThuLXJlYWN0JztcbmltcG9ydCAnLi90YWJsZS1zb3J0YWJsZS5jc3MnO1xuaW1wb3J0IHtzaGFsbG93RXF1YWx9IGZyb20gXCIuLi8uLi91dGlscy9tZXRob2RzXCI7XG5cbmNvbnN0IGRlZmF1bHRzID0ge1xuICAgIGNvbFdpZHRoOiAnJ1xufVxuXG5jb25zdCBjcmVhdGVSb3cgPSAocm93LCBjb2x1bW5zLCBhY3Rpb25zKSA9PiB7XG5cbiAgICB2YXIgYWN0aW9uX2J1dHRvbnMgPSAnJztcblx0dmFyIGNlbGxzID0gY29sdW1ucy5tYXAoKGNvbCxpKSA9PiB7XG5cdFx0cmV0dXJuIChcblx0XHQ8U29ydGFibGVUYWJsZUNlbGwga2V5PXtpfT5cbiAgICAgICAgICAgIHtyb3dbY29sLmNvbHVtbktleV19XG5cdFx0PC9Tb3J0YWJsZVRhYmxlQ2VsbD5cblx0XHQpO1xuXHR9KTtcblxuICAgIGlmIChhY3Rpb25zKSB7XG4gICAgICAgIGNlbGxzLnB1c2goPFNvcnRhYmxlQWN0aW9uc1RhYmxlQ2VsbCBrZXk9J2FjdGlvbnMnIGlkPXtyb3dbJ2lkJ119IGFjdGlvbnM9e2FjdGlvbnN9Lz4pO1xuICAgIH1cblxuICAgIHJldHVybiBjZWxscztcbn07XG5cblxuY2xhc3MgU29ydGFibGVUYWJsZSBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgICAgICBzdXBlcihwcm9wcyk7XG4gICAgICAgIHRoaXMubW92ZVJvdyA9IHRoaXMubW92ZVJvdy5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLmRyb3BSb3cgPSB0aGlzLmRyb3BSb3cuYmluZCh0aGlzKTtcblxuICAgICAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgICAgICAgcm93czogcHJvcHMuZGF0YVxuICAgICAgICB9O1xuICAgIH1cblxuICAgIGNvbXBvbmVudERpZFVwZGF0ZShwcmV2UHJvcHMsIHByZXZTdGF0ZSwgc25hcHNob3QpIHtcbiAgICAgICAgaWYoIXNoYWxsb3dFcXVhbCh0aGlzLnByb3BzLmRhdGEsIHByZXZQcm9wcy5kYXRhKSkge1xuICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7cm93czogdGhpcy5wcm9wcy5kYXRhfSlcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG1vdmVSb3coZHJhZ0luZGV4LCBob3ZlckluZGV4KSB7XG4gICAgICAgIGNvbnN0IHsgcm93cyB9ID0gdGhpcy5zdGF0ZTtcbiAgICAgICAgY29uc3QgZHJhZ1JvdyA9IHJvd3NbZHJhZ0luZGV4XTtcblxuICAgICAgICB0aGlzLnNldFN0YXRlKHVwZGF0ZSh0aGlzLnN0YXRlLCB7XG4gICAgICAgICAgICByb3dzOiB7XG4gICAgICAgICAgICAgICAgJHNwbGljZTogW1xuICAgICAgICAgICAgICAgICAgICBbZHJhZ0luZGV4LCAxXSxcbiAgICAgICAgICAgICAgICAgICAgW2hvdmVySW5kZXgsIDAsIGRyYWdSb3ddLFxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9KSk7XG4gICAgfVxuXG4gICAgZHJvcFJvdyhpZCwgaW5kZXgpIHtcbiAgICAgICAgbGV0IHtvcmRlckZpZWxkfSA9IHRoaXMucHJvcHM7XG4gICAgICAgIGxldCBuZXdPcmRlciA9IGluZGV4ICsgMTtcbiAgICAgICAgbGV0IHJvd3MgPSBbLi4udGhpcy5zdGF0ZS5yb3dzXTtcblxuICAgICAgICBmb3IodmFyIGkgaW4gcm93cykge1xuICAgICAgICAgICAgcm93c1tpXVtvcmRlckZpZWxkXSA9IHBhcnNlSW50KGkpICsgMTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc2V0U3RhdGUodXBkYXRlKHRoaXMuc3RhdGUsIHtyb3dzOiB7JHNldDogcm93c319KSk7XG5cbiAgICAgICAgdGhpcy5wcm9wcy5kcm9wQ2FsbGJhY2socm93cywgaWQsIG5ld09yZGVyKTtcbiAgICB9XG5cbiAgICByZW5kZXIoKSB7XG4gICAgICAgIGxldCB7b3B0aW9ucywgY29sdW1uc30gPSB0aGlzLnByb3BzO1xuICAgICAgICBsZXQgdGFibGVDbGFzcyA9IG9wdGlvbnMuaGFzT3duUHJvcGVydHkoJ2NsYXNzTmFtZScpID8gb3B0aW9ucy5jbGFzc05hbWUgOiAnJztcblxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzb3J0YWJsZS10YWJsZS1ib3hcIj5cbiAgICAgICAgICAgICAgICA8aT57VC50cmFuc2xhdGUoXCJnZW5lcmFsLmRyYWdfYW5kX2Ryb3BcIil9PC9pPlxuICAgICAgICAgICAgICAgIDx0YWJsZSBjbGFzc05hbWU9e1widGFibGUgdGFibGUtc3RyaXBlZCB0YWJsZS1ob3ZlciBzb3J0YWJsZVRhYmxlIFwiICsgdGFibGVDbGFzc30+XG4gICAgICAgICAgICAgICAgICAgIDx0aGVhZD5cbiAgICAgICAgICAgICAgICAgICAgPHRyPlxuICAgICAgICAgICAgICAgICAgICAgICAge2NvbHVtbnMubWFwKChjb2wsaSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjb2xXaWR0aCA9IChjb2wud2lkdGgpID8gY29sLndpZHRoIDogZGVmYXVsdHMuY29sV2lkdGg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNvcnRhYmxlVGFibGVIZWFkaW5nIHdpZHRoPXtjb2xXaWR0aH0ga2V5PXtpfSA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Y29sLnZhbHVlfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L1NvcnRhYmxlVGFibGVIZWFkaW5nPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KX1cbiAgICAgICAgICAgICAgICAgICAgICAgIHtvcHRpb25zLmFjdGlvbnMgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIDxTb3J0YWJsZVRhYmxlSGVhZGluZyBrZXk9J2FjdGlvbnMnID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBBY3Rpb25zXG4gICAgICAgICAgICAgICAgICAgICAgICA8L1NvcnRhYmxlVGFibGVIZWFkaW5nPlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgICAgICAgICA8L3RoZWFkPlxuICAgICAgICAgICAgICAgICAgICA8dGJvZHk+XG4gICAgICAgICAgICAgICAgICAgIHtjb2x1bW5zLmxlbmd0aCA+IDAgJiYgdGhpcy5zdGF0ZS5yb3dzLm1hcCgocm93LGkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKEFycmF5LmlzQXJyYXkocm93KSAmJiByb3cubGVuZ3RoICE9PSBjb2x1bW5zLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybihgRGF0YSBhdCByb3cgJHtpfSBpcyAke3Jvdy5sZW5ndGh9LiBJdCBzaG91bGQgYmUgJHtjb2x1bW5zLmxlbmd0aH0uYCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDx0ciAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U29ydGFibGVUYWJsZVJvdyBldmVuPXtpJTIgPT09IDB9IGtleT17cm93LmlkfSBpbmRleD17aX0gaWQ9e3Jvdy5pZH0gbW92ZUNhcmQ9e3RoaXMubW92ZVJvd30gZHJvcENhcmQ9e3RoaXMuZHJvcFJvd30+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtjcmVhdGVSb3cocm93LCBjb2x1bW5zLCBvcHRpb25zLmFjdGlvbnMpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvU29ydGFibGVUYWJsZVJvdz5cbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIH0pfVxuICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PlxuICAgICAgICAgICAgICAgIDwvdGFibGU+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKTtcbiAgICB9XG59O1xuXG5Tb3J0YWJsZVRhYmxlLnByb3BUeXBlcyA9IHtcbiAgICBkYXRhOiBQcm9wVHlwZXMuYXJyYXkuaXNSZXF1aXJlZCxcbiAgICBvcHRpb25zOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgICAgICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgICAgIGFjdGlvbnM6IFByb3BUeXBlcy5vYmplY3RcbiAgICB9KS5pc1JlcXVpcmVkLFxuICAgIGNvbHVtbnM6IFByb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5zaGFwZSh7XG4gICAgICAgIGNvbHVtbktleTogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICAgICAgICB2YWx1ZTogUHJvcFR5cGVzLmFueS5pc1JlcXVpcmVkXG4gICAgfSkpLmlzUmVxdWlyZWQsXG4gICAgb3JkZXJGaWVsZDogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICAgIGRyb3BDYWxsYmFjazogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZFxufVxuXG5leHBvcnQgZGVmYXVsdCBEcmFnRHJvcENvbnRleHQoSFRNTDVCYWNrZW5kKShTb3J0YWJsZVRhYmxlKTtcbiIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5cbmNvbnN0IFNvcnRhYmxlVGFibGVDZWxsID0gKHByb3BzKSA9PiAoXG5cdDx0ZCB7Li4ucHJvcHN9Pntwcm9wcy5jaGlsZHJlbn08L3RkPlxuKTtcblxuZXhwb3J0IGRlZmF1bHQgU29ydGFibGVUYWJsZUNlbGw7IiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcblxuY2xhc3MgU29ydGFibGVUYWJsZUhlYWRpbmcgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuXG5cdGNvbnN0cnVjdG9yIChwcm9wcykge1xuXHRcdHN1cGVyKHByb3BzKTtcblx0fVxuXG5cdHJlbmRlciAoKSB7XG5cdFx0cmV0dXJuIChcblx0XHRcdDx0aCB3aWR0aD17dGhpcy5wcm9wcy53aWR0aH0+XG5cdFx0XHRcdHt0aGlzLnByb3BzLmNoaWxkcmVufVxuXHRcdFx0PC90aD5cblx0XHQpO1x0XG5cdH1cblx0XG59XG5cbmV4cG9ydCBkZWZhdWx0IFNvcnRhYmxlVGFibGVIZWFkaW5nOyIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IHsgZmluZERPTU5vZGUgfSBmcm9tICdyZWFjdC1kb20nO1xuaW1wb3J0IHsgRHJhZ1NvdXJjZSwgRHJvcFRhcmdldCB9IGZyb20gJ3JlYWN0LWRuZCc7XG5cbmNvbnN0IHN0eWxlID0ge1xuICAgIGJvcmRlcjogJzFweCBkYXNoZWQgZ3JheScsXG4gICAgcGFkZGluZzogJzAuNXJlbSAxcmVtJyxcbiAgICBtYXJnaW5Cb3R0b206ICcuNXJlbScsXG4gICAgYmFja2dyb3VuZENvbG9yOiAnd2hpdGUnLFxuICAgIGN1cnNvcjogJ21vdmUnLFxufTtcblxuY29uc3Qgcm93U291cmNlID0ge1xuICAgIGJlZ2luRHJhZyhwcm9wcykge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgaWQ6IHByb3BzLmlkLFxuICAgICAgICAgICAgaW5kZXg6IHByb3BzLmluZGV4LFxuICAgICAgICB9O1xuICAgIH0sXG4gICAgZW5kRHJhZyhwcm9wcywgbW9uaXRvcikge1xuICAgICAgICBpZiAobW9uaXRvci5kaWREcm9wKCkpIHtcbiAgICAgICAgICAgIHByb3BzLmRyb3BDYXJkKHByb3BzLmlkLCBwcm9wcy5pbmRleCk7XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG5jb25zdCByb3dUYXJnZXQgPSB7XG4gICAgaG92ZXIocHJvcHMsIG1vbml0b3IsIGNvbXBvbmVudCkge1xuICAgICAgICBjb25zdCBkcmFnSW5kZXggPSBtb25pdG9yLmdldEl0ZW0oKS5pbmRleDtcbiAgICAgICAgY29uc3QgaG92ZXJJbmRleCA9IHByb3BzLmluZGV4O1xuXG4gICAgICAgIC8vIERvbid0IHJlcGxhY2UgaXRlbXMgd2l0aCB0aGVtc2VsdmVzXG4gICAgICAgIGlmIChkcmFnSW5kZXggPT09IGhvdmVySW5kZXgpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIERldGVybWluZSByZWN0YW5nbGUgb24gc2NyZWVuXG4gICAgICAgIGNvbnN0IGhvdmVyQm91bmRpbmdSZWN0ID0gZmluZERPTU5vZGUoY29tcG9uZW50KS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblxuICAgICAgICAvLyBHZXQgdmVydGljYWwgbWlkZGxlXG4gICAgICAgIGNvbnN0IGhvdmVyTWlkZGxlWSA9IChob3ZlckJvdW5kaW5nUmVjdC5ib3R0b20gLSBob3ZlckJvdW5kaW5nUmVjdC50b3ApIC8gMjtcblxuICAgICAgICAvLyBEZXRlcm1pbmUgbW91c2UgcG9zaXRpb25cbiAgICAgICAgY29uc3QgY2xpZW50T2Zmc2V0ID0gbW9uaXRvci5nZXRDbGllbnRPZmZzZXQoKTtcblxuICAgICAgICAvLyBHZXQgcGl4ZWxzIHRvIHRoZSB0b3BcbiAgICAgICAgY29uc3QgaG92ZXJDbGllbnRZID0gY2xpZW50T2Zmc2V0LnkgLSBob3ZlckJvdW5kaW5nUmVjdC50b3A7XG5cbiAgICAgICAgLy8gT25seSBwZXJmb3JtIHRoZSBtb3ZlIHdoZW4gdGhlIG1vdXNlIGhhcyBjcm9zc2VkIGhhbGYgb2YgdGhlIGl0ZW1zIGhlaWdodFxuICAgICAgICAvLyBXaGVuIGRyYWdnaW5nIGRvd253YXJkcywgb25seSBtb3ZlIHdoZW4gdGhlIGN1cnNvciBpcyBiZWxvdyA1MCVcbiAgICAgICAgLy8gV2hlbiBkcmFnZ2luZyB1cHdhcmRzLCBvbmx5IG1vdmUgd2hlbiB0aGUgY3Vyc29yIGlzIGFib3ZlIDUwJVxuXG4gICAgICAgIC8vIERyYWdnaW5nIGRvd253YXJkc1xuICAgICAgICBpZiAoZHJhZ0luZGV4IDwgaG92ZXJJbmRleCAmJiBob3ZlckNsaWVudFkgPCBob3Zlck1pZGRsZVkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIERyYWdnaW5nIHVwd2FyZHNcbiAgICAgICAgaWYgKGRyYWdJbmRleCA+IGhvdmVySW5kZXggJiYgaG92ZXJDbGllbnRZID4gaG92ZXJNaWRkbGVZKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBUaW1lIHRvIGFjdHVhbGx5IHBlcmZvcm0gdGhlIGFjdGlvblxuICAgICAgICBwcm9wcy5tb3ZlQ2FyZChkcmFnSW5kZXgsIGhvdmVySW5kZXgpO1xuXG4gICAgICAgIC8vIE5vdGU6IHdlJ3JlIG11dGF0aW5nIHRoZSBtb25pdG9yIGl0ZW0gaGVyZSFcbiAgICAgICAgLy8gR2VuZXJhbGx5IGl0J3MgYmV0dGVyIHRvIGF2b2lkIG11dGF0aW9ucyxcbiAgICAgICAgLy8gYnV0IGl0J3MgZ29vZCBoZXJlIGZvciB0aGUgc2FrZSBvZiBwZXJmb3JtYW5jZVxuICAgICAgICAvLyB0byBhdm9pZCBleHBlbnNpdmUgaW5kZXggc2VhcmNoZXMuXG4gICAgICAgIG1vbml0b3IuZ2V0SXRlbSgpLmluZGV4ID0gaG92ZXJJbmRleDtcbiAgICB9LFxufTtcblxuY2xhc3MgU29ydGFibGVUYWJsZVJvdyBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG5cbiAgICByZW5kZXIoKSB7XG4gICAgICAgIGNvbnN0IHsgdGV4dCwgaXNEcmFnZ2luZywgY29ubmVjdERyYWdTb3VyY2UsIGNvbm5lY3REcm9wVGFyZ2V0LCBjaGlsZHJlbiwgZXZlbiwgaWQgfSA9IHRoaXMucHJvcHM7XG4gICAgICAgIGNvbnN0IG9wYWNpdHkgPSBpc0RyYWdnaW5nID8gMCA6IDE7XG5cbiAgICAgICAgcmV0dXJuIGNvbm5lY3REcmFnU291cmNlKGNvbm5lY3REcm9wVGFyZ2V0KFxuICAgICAgICAgICAgPHRyIGlkPXtpZH0gcm9sZT1cInJvd1wiIGNsYXNzTmFtZT17ZXZlbiA/ICdldmVuJyA6ICdvZGQnfSBzdHlsZT17eyAuLi5zdHlsZSwgb3BhY2l0eSB9fT5cblx0XHQgICAgICAgIHtjaGlsZHJlbn1cbiAgICAgICAgICAgIDwvdHI+LFxuICAgICAgICApKTtcbiAgICB9XG59XG5cblNvcnRhYmxlVGFibGVSb3cucHJvcFR5cGVzID0ge1xuICAgIGNvbm5lY3REcmFnU291cmNlOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgIGNvbm5lY3REcm9wVGFyZ2V0OiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgIGluZGV4OiBQcm9wVHlwZXMubnVtYmVyLmlzUmVxdWlyZWQsXG4gICAgaXNEcmFnZ2luZzogUHJvcFR5cGVzLmJvb2wuaXNSZXF1aXJlZCxcbiAgICBpZDogUHJvcFR5cGVzLmFueS5pc1JlcXVpcmVkLFxuICAgIG1vdmVDYXJkOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxufTtcblxuZXhwb3J0IGRlZmF1bHRcbiAgICBEcmFnU291cmNlKCdjYXJkJywgcm93U291cmNlLCAoY29ubmVjdCwgbW9uaXRvcikgPT4gKHtcbiAgICAgICAgY29ubmVjdERyYWdTb3VyY2U6IGNvbm5lY3QuZHJhZ1NvdXJjZSgpLFxuICAgICAgICBpc0RyYWdnaW5nOiBtb25pdG9yLmlzRHJhZ2dpbmcoKSxcbiAgICAgICAgfSkpKFxuICAgIERyb3BUYXJnZXQoJ2NhcmQnLCByb3dUYXJnZXQsIGNvbm5lY3QgPT4gKHtcbiAgICAgICAgY29ubmVjdERyb3BUYXJnZXQ6IGNvbm5lY3QuZHJvcFRhcmdldCgpLFxuICAgICAgICB9KSlcbiAgICAoU29ydGFibGVUYWJsZVJvdykpO1xuXG4iLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW4iLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBBY3Rpb25zVGFibGVDZWxsIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcblxuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgICAgIHN1cGVyKHByb3BzKTtcblxuICAgICAgICB0aGlzLmhhbmRsZUFjdGlvbiA9IHRoaXMuaGFuZGxlQWN0aW9uLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuc2hvdWxkRGlzcGxheUFjdGlvbiA9IHRoaXMuc2hvdWxkRGlzcGxheUFjdGlvbi5iaW5kKHRoaXMpO1xuXG4gICAgfVxuXG4gICAgc2hvdWxkRGlzcGxheUFjdGlvbihhY3Rpb24pIHtcbiAgICAgICAgbGV0IHtpZH0gPSB0aGlzLnByb3BzO1xuXG4gICAgICAgIGlmICghYWN0aW9uLmhhc093blByb3BlcnR5KCdkaXNwbGF5JykpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGFjdGlvbi5kaXNwbGF5KGlkKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGhhbmRsZUFjdGlvbihhY3Rpb24sIGlkLCBldikge1xuICAgICAgICBldi5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgZXYucHJldmVudERlZmF1bHQoKTtcblxuICAgICAgICBhY3Rpb24oaWQpO1xuICAgIH1cblxuICAgIHJlbmRlcigpIHtcbiAgICAgICAgbGV0IHthY3Rpb25zLCBpZH0gPSB0aGlzLnByb3BzO1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPHRkIGNsYXNzTmFtZT1cImFjdGlvbnNcIiBrZXk9XCJhY3Rpb25zXCI+XG4gICAgICAgICAgICAgICAge2FjdGlvbnMuaGFzT3duUHJvcGVydHkoJ2RlbGV0ZScpICYmIHRoaXMuc2hvdWxkRGlzcGxheUFjdGlvbihhY3Rpb25zLmRlbGV0ZSkgICYmXG4gICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9XCJcIiBkYXRhLXRpcD1cImRlbGV0ZVwiIG9uQ2xpY2s9e3RoaXMuaGFuZGxlQWN0aW9uLmJpbmQodGhpcywgYWN0aW9ucy5kZWxldGUub25DbGljaywgaWQpfSA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzc05hbWU9XCJmYSBmYS10cmFzaC1vIGRlbGV0ZS1pY29uXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHthY3Rpb25zLmhhc093blByb3BlcnR5KCdjdXN0b20nKSAmJiBhY3Rpb25zLmN1c3RvbS5tYXAoYSA9PlxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3VsZERpc3BsYXlBY3Rpb24oYSkgJiZcbiAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj1cIlwiIGRhdGEtdGlwPXthLnRvb2x0aXB9IGtleT17J2N1c3RvbV8nICsgYS5uYW1lfSBvbkNsaWNrPXt0aGlzLmhhbmRsZUFjdGlvbi5iaW5kKHRoaXMsIGEub25DbGljaywgaWQpfT5cbiAgICAgICAgICAgICAgICAgICAgICAgIHthLmljb259XG4gICAgICAgICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgKTtcbiAgICB9XG59O1xuIiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBUYWJsZUhlYWRpbmcgZnJvbSAnLi9UYWJsZUhlYWRpbmcnO1xuaW1wb3J0IFRhYmxlQ2VsbCBmcm9tICcuL1RhYmxlQ2VsbCc7XG5pbXBvcnQgVGFibGVSb3cgZnJvbSAnLi9UYWJsZVJvdyc7XG5pbXBvcnQgQWN0aW9uc1RhYmxlQ2VsbCBmcm9tICcuL0FjdGlvbnNUYWJsZUNlbGwnO1xuaW1wb3J0IFJlYWN0VG9vbHRpcCBmcm9tICdyZWFjdC10b29sdGlwJ1xuXG5pbXBvcnQgJy4vdGFibGUuY3NzJztcblxuY29uc3QgZGVmYXVsdHMgPSB7XG4gICAgc29ydEZ1bmM6IChhLGIpID0+IChhIDwgYiA/IC0xIDogKGEgPiBiID8gMSA6IDApKSxcbiAgICBzb3J0YWJsZTogZmFsc2UsXG4gICAgc29ydENvbDogMCxcbiAgICBzb3J0RGlyOiAxLFxuICAgIGNvbFdpZHRoOiAnJ1xufVxuXG5jb25zdCBjcmVhdGVSb3cgPSAocm93LCBjb2x1bW5zLCBhY3Rpb25zKSA9PiB7XG5cbiAgICB2YXIgYWN0aW9uX2J1dHRvbnMgPSAnJztcbiAgICB2YXIgY2VsbHMgPSBjb2x1bW5zLm1hcCgoY29sLGkpID0+IHtcbiAgICAgICAgaWYoY29sLmhhc093blByb3BlcnR5KFwicmVuZGVyXCIpKVxuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICA8VGFibGVDZWxsIGtleT17J2NlbGxfJytpfSA+XG4gICAgICAgICAgICAgICAgICAgIHtjb2wucmVuZGVyKHJvdywgcm93W2NvbC5jb2x1bW5LZXldKX1cbiAgICAgICAgICAgICAgICA8L1RhYmxlQ2VsbD5cbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxUYWJsZUNlbGwga2V5PXsnY2VsbF8nK2l9ID5cbiAgICAgICAgICAgICAgICB7cm93W2NvbC5jb2x1bW5LZXldfVxuICAgICAgICAgICAgPC9UYWJsZUNlbGw+XG4gICAgICAgICk7XG4gICAgfSk7XG5cbiAgICBpZiAoYWN0aW9ucykge1xuICAgICAgICBjZWxscy5wdXNoKDxBY3Rpb25zVGFibGVDZWxsIGtleT0nYWN0aW9uc19jZWxsJyBpZD17cm93WydpZCddfSBhY3Rpb25zPXthY3Rpb25zfSAvPik7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNlbGxzO1xufTtcblxuY29uc3QgZ2V0U29ydERpciA9IChjb2x1bW5LZXksIGNvbHVtbkluZGV4LCBzb3J0Q29sLCBzb3J0RGlyKSA9PiB7XG4gICAgaWYoY29sdW1uS2V5ICYmIChjb2x1bW5LZXkgPT09IHNvcnRDb2wpKSB7XG4gICAgICAgIHJldHVybiBzb3J0RGlyO1xuICAgIH1cbiAgICBpZihzb3J0Q29sID09PSBjb2x1bW5JbmRleCkge1xuICAgICAgICByZXR1cm4gc29ydERpcjtcbiAgICB9XG4gICAgcmV0dXJuIG51bGxcbn07XG5cbmNvbnN0IFRhYmxlID0gKHByb3BzKSA9PiB7XG4gICAgbGV0IHtvcHRpb25zLCBjb2x1bW5zfSA9IHByb3BzO1xuICAgIGxldCB0YWJsZUNsYXNzID0gb3B0aW9ucy5oYXNPd25Qcm9wZXJ0eSgnY2xhc3NOYW1lJykgPyBvcHRpb25zLmNsYXNzTmFtZSA6ICcnO1xuICAgIHRhYmxlQ2xhc3MgKz0gKG9wdGlvbnMuYWN0aW9ucy5oYXNPd25Qcm9wZXJ0eSgnZWRpdCcpKSA/ICcgdGFibGUtaG92ZXInIDogJyc7XG5cbiAgICByZXR1cm4gKFxuICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgPHRhYmxlIGNsYXNzTmFtZT17XCJ0YWJsZSB0YWJsZS1zdHJpcGVkIGRhdGFUYWJsZSBcIiArIHRhYmxlQ2xhc3N9PlxuICAgICAgICAgICAgICAgIDx0aGVhZD5cbiAgICAgICAgICAgICAgICAgICAgPHRyPlxuICAgICAgICAgICAgICAgICAgICB7Y29sdW1ucy5tYXAoKGNvbCxpKSA9PiB7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBzb3J0Q29sID0gKHR5cGVvZiBvcHRpb25zLnNvcnRDb2wgIT0gJ3VuZGVmaW5lZCcpID8gb3B0aW9ucy5zb3J0Q29sIDogZGVmYXVsdHMuc29ydENvbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBzb3J0RGlyID0gKHR5cGVvZiBvcHRpb25zLnNvcnREaXIgIT0gJ3VuZGVmaW5lZCcpID8gb3B0aW9ucy5zb3J0RGlyIDogZGVmYXVsdHMuc29ydERpcjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBzb3J0RnVuYyA9ICh0eXBlb2Ygb3B0aW9ucy5zb3J0RnVuYyAhPSAndW5kZWZpbmVkJykgPyBvcHRpb25zLnNvcnRGdW5jIDogZGVmYXVsdHMuc29ydEZ1bmM7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgc29ydGFibGUgPSAodHlwZW9mIGNvbC5zb3J0YWJsZSAhPSAndW5kZWZpbmVkJykgPyBjb2wuc29ydGFibGUgOiBkZWZhdWx0cy5zb3J0YWJsZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjb2xXaWR0aCA9ICh0eXBlb2YgY29sLndpZHRoICE9ICd1bmRlZmluZWQnKSA/IGNvbC53aWR0aCA6IGRlZmF1bHRzLmNvbFdpZHRoO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxUYWJsZUhlYWRpbmdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25Tb3J0PXtwcm9wcy5vblNvcnR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvcnREaXI9e2dldFNvcnREaXIoY29sLmNvbHVtbktleSwgaSwgc29ydENvbCwgc29ydERpcil9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvcnRhYmxlPXtzb3J0YWJsZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc29ydEZ1bmM9e3NvcnRGdW5jfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5JbmRleD17aX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uS2V5PXtjb2wuY29sdW1uS2V5fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aD17Y29sV2lkdGh9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleT17J2hlYWRpbmdfJytpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2NvbC52YWx1ZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L1RhYmxlSGVhZGluZz5cbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIH0pfVxuICAgICAgICAgICAgICAgICAgICB7b3B0aW9ucy5hY3Rpb25zICYmXG4gICAgICAgICAgICAgICAgICAgICAgICA8VGFibGVIZWFkaW5nIGtleT0nYWN0aW9uc19oZWFkaW5nJyA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge29wdGlvbnMuYWN0aW9uc0hlYWRlciB8fCAnICd9XG4gICAgICAgICAgICAgICAgICAgICAgICA8L1RhYmxlSGVhZGluZz5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgICAgIDwvdGhlYWQ+XG4gICAgICAgICAgICAgICAgPHRib2R5PlxuICAgICAgICAgICAgICAgICAgICB7Y29sdW1ucy5sZW5ndGggPiAwICYmIHByb3BzLmRhdGEubWFwKChyb3csaSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYoQXJyYXkuaXNBcnJheShyb3cpICYmIHJvdy5sZW5ndGggIT09IGNvbHVtbnMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS53YXJuKGBEYXRhIGF0IHJvdyAke2l9IGlzICR7cm93Lmxlbmd0aH0uIEl0IHNob3VsZCBiZSAke2NvbHVtbnMubGVuZ3RofS5gKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gPHRyIGtleT17J3Jvd18nK2l9IC8+XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPFRhYmxlUm93IGV2ZW49e2klMiA9PT0gMH0ga2V5PXsncm93XycraX0gaWQ9e3Jvd1snaWQnXX0gYWN0aW9ucz17b3B0aW9ucy5hY3Rpb25zfT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2NyZWF0ZVJvdyhyb3csIGNvbHVtbnMsIG9wdGlvbnMuYWN0aW9ucyl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9UYWJsZVJvdz5cbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIH0pfVxuICAgICAgICAgICAgICAgIDwvdGJvZHk+XG4gICAgICAgICAgICA8L3RhYmxlPlxuICAgICAgICAgICAgPFJlYWN0VG9vbHRpcCBkZWxheVNob3c9ezEwfSAvPlxuICAgICAgICA8L2Rpdj5cbiAgICApO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgVGFibGU7XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFJhd0hUTUwgZnJvbSAnLi4vcmF3LWh0bWwnO1xuXG5jb25zdCBUYWJsZUNlbGwgPSAocHJvcHMpID0+IHtcbiAgICBsZXQge2NoaWxkcmVufSA9IHByb3BzO1xuXHRsZXQgdmFsdWUgPSAnJztcblx0aWYoY2hpbGRyZW4pIHtcblx0ICAgIGlmIChSZWFjdC5pc1ZhbGlkRWxlbWVudChjaGlsZHJlbikpIHtcblx0ICAgICAgICB2YWx1ZSA9IGNoaWxkcmVuO1xuICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgIHZhbHVlID0gPFJhd0hUTUw+e2NoaWxkcmVuLnRvU3RyaW5nKCl9PC9SYXdIVE1MPlxuICAgICAgICB9XG4gICAgfVxuXG5cdHJldHVybiAoXG5cdFx0PHRkIHsuLi5wcm9wc30+XG4gICAgICAgICAgICB7dmFsdWV9XG5cdFx0PC90ZD5cblx0KTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IFRhYmxlQ2VsbDtcbiIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuXG5jbGFzcyBUYWJsZUhlYWRpbmcgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuXG5cdGNvbnN0cnVjdG9yIChwcm9wcykge1xuXHRcdHN1cGVyKHByb3BzKTtcblx0XHR0aGlzLmhhbmRsZVNvcnQgPSB0aGlzLmhhbmRsZVNvcnQuYmluZCh0aGlzKTtcblx0fVxuXG5cdGdldFNvcnRDbGFzcygpIHtcblxuXHRcdGlmICghdGhpcy5wcm9wcy5zb3J0YWJsZSkgcmV0dXJuIG51bGw7XG5cblx0XHRzd2l0Y2godGhpcy5wcm9wcy5zb3J0RGlyKSB7XG5cdFx0XHRjYXNlIDE6XG5cdFx0XHRcdHJldHVybiAnc29ydGluZ19hc2MnO1xuXHRcdFx0Y2FzZSAtMTpcblx0XHRcdFx0cmV0dXJuICdzb3J0aW5nX2Rlc2MnO1xuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0cmV0dXJuIHRoaXMucHJvcHMuc29ydGFibGUgPyAnc29ydGluZycgOiBudWxsXG5cdFx0fVxuXHR9XG5cblx0aGFuZGxlU29ydChlKSB7XG5cdFx0ZS5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdGlmKCF0aGlzLnByb3BzLmhhc093blByb3BlcnR5KCdvblNvcnQnKSB8fCAhdGhpcy5wcm9wcy5zb3J0YWJsZSkgcmV0dXJuO1xuXG5cdFx0dGhpcy5wcm9wcy5vblNvcnQoXG5cdFx0XHR0aGlzLnByb3BzLmNvbHVtbkluZGV4LFxuXHRcdFx0dGhpcy5wcm9wcy5jb2x1bW5LZXksXG5cdFx0XHR0aGlzLnByb3BzLnNvcnREaXIgPyB0aGlzLnByb3BzLnNvcnREaXIqLTEgOiAxLFxuXHRcdFx0dGhpcy5wcm9wcy5zb3J0RnVuY1xuXHRcdCk7XG5cdH1cblxuXHRyZW5kZXIgKCkge1xuXHRcdHJldHVybiAoXG5cdFx0XHQ8dGggb25DbGljaz17dGhpcy5oYW5kbGVTb3J0fVxuXHRcdFx0XHRjbGFzc05hbWU9e3RoaXMuZ2V0U29ydENsYXNzKCl9XG5cdFx0XHRcdHdpZHRoPXt0aGlzLnByb3BzLndpZHRofVxuXHRcdFx0XHQ+XG5cdFx0XHRcdHt0aGlzLnByb3BzLmNoaWxkcmVufVxuXHRcdFx0PC90aD5cblx0XHQpO1x0XG5cdH1cblx0XG59XG5cblRhYmxlSGVhZGluZy5wcm9wVHlwZXMgPSB7XG5cdG9uU29ydDogUHJvcFR5cGVzLmZ1bmMsXG5cdHNvcnREaXI6IFByb3BUeXBlcy5udW1iZXIsXG5cdGNvbHVtbkluZGV4OiBQcm9wVHlwZXMubnVtYmVyLFxuXHRjb2x1bW5LZXk6IFByb3BUeXBlcy5hbnksXG5cdHNvcnRhYmxlOiBQcm9wVHlwZXMuYm9vbCxcblx0c29ydEZ1bmM6IFByb3BUeXBlcy5mdW5jXG59O1xuXG5leHBvcnQgZGVmYXVsdCBUYWJsZUhlYWRpbmc7IiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVGFibGVSb3cgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICAgICAgc3VwZXIocHJvcHMpO1xuXG4gICAgICAgIHRoaXMuaGFuZGxlRWRpdCA9IHRoaXMuaGFuZGxlRWRpdC5iaW5kKHRoaXMpO1xuICAgIH1cblxuICAgIHNob3VsZERpc3BsYXlBY3Rpb24oYWN0aW9uKSB7XG4gICAgICAgIGxldCB7aWR9ID0gdGhpcy5wcm9wcztcblxuICAgICAgICBpZiAoIWFjdGlvbi5oYXNPd25Qcm9wZXJ0eSgnZGlzcGxheScpKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBhY3Rpb24uZGlzcGxheShpZCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBoYW5kbGVFZGl0KGlkLCBldikge1xuICAgICAgICBldi5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgZXYucHJldmVudERlZmF1bHQoKTtcblxuICAgICAgICB0aGlzLnByb3BzLmFjdGlvbnMuZWRpdC5vbkNsaWNrKGlkKTtcbiAgICB9XG5cbiAgICByZW5kZXIoKSB7XG4gICAgICAgIGxldCB7ZXZlbiwgYWN0aW9ucywgaWQsIGNoaWxkcmVufSA9IHRoaXMucHJvcHM7XG4gICAgICAgIGxldCBjYW5FZGl0ID0gKGFjdGlvbnMuaGFzT3duUHJvcGVydHkoJ2VkaXQnKSAmJiB0aGlzLnNob3VsZERpc3BsYXlBY3Rpb24oYWN0aW9ucy5lZGl0KSk7XG4gICAgICAgIGxldCByb3dDbGFzcyA9IGV2ZW4gPyAnZXZlbicgOiAnb2RkJztcblxuICAgICAgICBpZiAoY2FuRWRpdCkge1xuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICA8dHIgcm9sZT1cInJvd1wiIGNsYXNzTmFtZT17cm93Q2xhc3MgKyBcIiBjYW4tZWRpdFwifSBvbkNsaWNrPXt0aGlzLmhhbmRsZUVkaXQuYmluZCh0aGlzLCBpZCl9PlxuICAgICAgICAgICAgICAgICAgICB7Y2hpbGRyZW59XG4gICAgICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgIDx0ciByb2xlPVwicm93XCIgY2xhc3NOYW1lPXtyb3dDbGFzc30+XG4gICAgICAgICAgICAgICAgICAgIHtjaGlsZHJlbn1cbiAgICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgIH1cbn07XG5cbiIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpbiIsImltcG9ydCB7IHVzZVJlZiwgdXNlU3RhdGUsIHVzZUVmZmVjdCB9IGZyb20gJ3JlYWN0JztcblxuY29uc3QgdXNlRml0VGV4dCA9IChtYXhTaXplID0gNTAsIG1pblNpemUgPSAxMzApID0+IHtcbiAgICBjb25zdCBNSU5fRk9OVF9TSVpFID0gbWluU2l6ZTtcbiAgICBjb25zdCBNQVhfRk9OVF9TSVpFID0gbWF4U2l6ZTtcbiAgICBjb25zdCBSRVNPTFVUSU9OID0gNTtcblxuICAgIGNvbnN0IHJlZiA9IHVzZVJlZihudWxsKTtcblxuICAgIGNvbnN0IFtzdGF0ZSwgc2V0U3RhdGVdID0gdXNlU3RhdGUoe1xuICAgICAgICBmb250U2l6ZTogTUFYX0ZPTlRfU0laRSxcbiAgICAgICAgZm9udFNpemVQcmV2OiBNSU5fRk9OVF9TSVpFLFxuICAgICAgICBmb250U2l6ZU1heDogTUFYX0ZPTlRfU0laRSxcbiAgICAgICAgZm9udFNpemVNaW46IE1JTl9GT05UX1NJWkUsXG4gICAgfSk7XG4gICAgY29uc3QgeyBmb250U2l6ZSwgZm9udFNpemVNYXgsIGZvbnRTaXplTWluLCBmb250U2l6ZVByZXYgfSA9IHN0YXRlO1xuXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgY29uc3QgaXNEb25lID0gTWF0aC5hYnMoZm9udFNpemUgLSBmb250U2l6ZVByZXYpIDw9IFJFU09MVVRJT047XG4gICAgICAgIGNvbnN0IGlzT3ZlcmZsb3cgPVxuICAgICAgICAgICAgISFyZWYuY3VycmVudCAmJlxuICAgICAgICAgICAgKHJlZi5jdXJyZW50LnNjcm9sbEhlaWdodCA+IHJlZi5jdXJyZW50Lm9mZnNldEhlaWdodCB8fFxuICAgICAgICAgICAgICAgIHJlZi5jdXJyZW50LnNjcm9sbFdpZHRoID4gcmVmLmN1cnJlbnQub2Zmc2V0V2lkdGgpO1xuICAgICAgICBjb25zdCBpc0FzYyA9IGZvbnRTaXplID4gZm9udFNpemVQcmV2O1xuXG4gICAgICAgIC8vIHJldHVybiBpZiB0aGUgZm9udCBzaXplIGhhcyBiZWVuIGFkanVzdGVkIFwiZW5vdWdoXCIgKGNoYW5nZSB3aXRoaW4gUkVTT0xVVElPTilcbiAgICAgICAgLy8gcmVkdWNlIGZvbnQgc2l6ZSBieSBvbmUgaW5jcmVtZW50IGlmIGl0J3Mgb3ZlcmZsb3dpbmdcbiAgICAgICAgaWYgKGlzRG9uZSkge1xuICAgICAgICAgICAgaWYgKGlzT3ZlcmZsb3cpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBmb250U2l6ZU5ldyA9XG4gICAgICAgICAgICAgICAgICAgIGZvbnRTaXplUHJldiA8IGZvbnRTaXplXG4gICAgICAgICAgICAgICAgICAgICAgICA/IGZvbnRTaXplUHJldlxuICAgICAgICAgICAgICAgICAgICAgICAgOiBmb250U2l6ZSAtIChmb250U2l6ZVByZXYgLSBmb250U2l6ZSk7XG4gICAgICAgICAgICAgICAgc2V0U3RhdGUoe1xuICAgICAgICAgICAgICAgICAgICBmb250U2l6ZTogZm9udFNpemVOZXcsXG4gICAgICAgICAgICAgICAgICAgIGZvbnRTaXplTWF4LFxuICAgICAgICAgICAgICAgICAgICBmb250U2l6ZU1pbixcbiAgICAgICAgICAgICAgICAgICAgZm9udFNpemVQcmV2LFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gYmluYXJ5IHNlYXJjaCB0byBhZGp1c3QgZm9udCBzaXplXG4gICAgICAgIGxldCBkZWx0YTtcbiAgICAgICAgbGV0IG5ld01heCA9IGZvbnRTaXplTWF4O1xuICAgICAgICBsZXQgbmV3TWluID0gZm9udFNpemVNaW47XG4gICAgICAgIGlmIChpc092ZXJmbG93KSB7XG4gICAgICAgICAgICBkZWx0YSA9IGlzQXNjID8gZm9udFNpemVQcmV2IC0gZm9udFNpemUgOiBmb250U2l6ZU1pbiAtIGZvbnRTaXplO1xuICAgICAgICAgICAgbmV3TWF4ID0gTWF0aC5taW4oZm9udFNpemVNYXgsIGZvbnRTaXplKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGRlbHRhID0gaXNBc2MgPyBmb250U2l6ZU1heCAtIGZvbnRTaXplIDogZm9udFNpemVQcmV2IC0gZm9udFNpemU7XG4gICAgICAgICAgICBuZXdNaW4gPSBNYXRoLm1heChmb250U2l6ZU1pbiwgZm9udFNpemUpO1xuICAgICAgICB9XG4gICAgICAgIHNldFN0YXRlKHtcbiAgICAgICAgICAgIGZvbnRTaXplOiBmb250U2l6ZSArIGRlbHRhIC8gMixcbiAgICAgICAgICAgIGZvbnRTaXplTWF4OiBuZXdNYXgsXG4gICAgICAgICAgICBmb250U2l6ZU1pbjogbmV3TWluLFxuICAgICAgICAgICAgZm9udFNpemVQcmV2OiBmb250U2l6ZSxcbiAgICAgICAgfSk7XG4gICAgfSwgW2ZvbnRTaXplLCBmb250U2l6ZU1heCwgZm9udFNpemVNaW4sIGZvbnRTaXplUHJldiwgcmVmXSk7XG5cbiAgICByZXR1cm4geyBmb250U2l6ZTogYCR7Zm9udFNpemV9JWAsIGxpbmVIZWlnaHQ6IGAke2ZvbnRTaXplIC0gMTB9JWAsIHJlZiB9O1xufTtcblxuZXhwb3J0IGRlZmF1bHQgdXNlRml0VGV4dDtcbiIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjAgT3BlblN0YWNrIEZvdW5kYXRpb25cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqKi9cblxuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB2aWRlb2pzIGZyb20gJ3ZpZGVvLmpzJ1xuXG5pbXBvcnQgJ3ZpZGVvLmpzL2Rpc3QvdmlkZW8tanMuY3NzJ1xuXG5jb25zdCBZb3V0dWJlVmlkZW9Db21wb25lbnQgPSAoeyB2aWRlb1NyY1VSTCwgdmlkZW9UaXRsZSB9KSA9PiAoXG4gICAgPGRpdiBjbGFzc05hbWU9XCJ2aWRlb1wiPlxuICAgICAgICA8aWZyYW1lXG4gICAgICAgICAgICB3aWR0aD1cIjEwMCVcIlxuICAgICAgICAgICAgaGVpZ2h0PVwiNzIwXCJcbiAgICAgICAgICAgIHRpdGxlPXt2aWRlb1RpdGxlfVxuICAgICAgICAgICAgc3JjPXt2aWRlb1NyY1VSTH1cbiAgICAgICAgICAgIGZyYW1lQm9yZGVyPVwiMFwiXG4gICAgICAgICAgICBhbGxvdz1cImFjY2VsZXJvbWV0ZXI7IGF1dG9wbGF5OyBlbmNyeXB0ZWQtbWVkaWE7IGd5cm9zY29wZTsgcGljdHVyZS1pbi1waWN0dXJlXCJcbiAgICAgICAgICAgIGFsbG93RnVsbFNjcmVlblxuICAgICAgICAvPlxuICAgIDwvZGl2PlxuKTtcblxuXG5jbGFzcyBMaXZlVmlkZW9QbGF5ZXIgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuXG4gICAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgICAgIHRoaXMucGxheWVyID0gdmlkZW9qcyh0aGlzLnZpZGVvTm9kZSwgdGhpcy5wcm9wcyk7XG4gICAgfVxuXG4gICAgY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgICAgIGlmICh0aGlzLnBsYXllcikge1xuICAgICAgICAgICAgdGhpcy5wbGF5ZXIuZGlzcG9zZSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmVuZGVyKCkge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPGRpdiBkYXRhLXZqcy1wbGF5ZXI9XCJcIj5cbiAgICAgICAgICAgICAgICA8dmlkZW8gcmVmPXtub2RlID0+IHRoaXMudmlkZW9Ob2RlID0gbm9kZX0gY2xhc3NOYW1lPVwidmlkZW8tanMgdmpzLWJpZy1wbGF5LWNlbnRlcmVkXCIgLz5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICApO1xuICAgIH1cbn1cblxuY29uc3QgVmlkZW9TdHJlYW0gPSAoeyB1cmwgfSkgPT4ge1xuICAgIGxldCBsYXlvdXQgPSBudWxsO1xuICAgIGNvbnN0IGNoZWNrTGl2ZVZpZGVvID0gKCkgPT4ge1xuICAgICAgICBsZXQgaXNMaXZlVmlkZW8gPSBudWxsO1xuICAgICAgICB1cmwubWF0Y2goLy5tM3U4LykgPyBpc0xpdmVWaWRlbyA9IHRydWUgOiBpc0xpdmVWaWRlbyA9IGZhbHNlO1xuICAgICAgICByZXR1cm4gaXNMaXZlVmlkZW87XG4gICAgfTtcblxuICAgIGlmICh1cmwpIHtcbiAgICAgICAgaWYgKGNoZWNrTGl2ZVZpZGVvKCkpIHtcbiAgICAgICAgICAgIGNvbnN0IHZpZGVvSnNPcHRpb25zID0ge1xuICAgICAgICAgICAgICAgIGF1dG9wbGF5OiB0cnVlLFxuICAgICAgICAgICAgICAgIGNvbnRyb2xzOiB0cnVlLFxuICAgICAgICAgICAgICAgIGZsdWlkOiB0cnVlLFxuICAgICAgICAgICAgICAgIHNvdXJjZXM6IFt7XG4gICAgICAgICAgICAgICAgICAgIHNyYzogdXJsLFxuICAgICAgICAgICAgICAgICAgICB0eXBlOiAnYXBwbGljYXRpb24veC1tcGVnVVJMJ1xuICAgICAgICAgICAgICAgIH1dXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsYXlvdXQgPSA8TGl2ZVZpZGVvUGxheWVyIHsuLi52aWRlb0pzT3B0aW9uc30gLz47XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsYXlvdXQgPSA8WW91dHViZVZpZGVvQ29tcG9uZW50IHZpZGVvU3JjVVJMPXt1cmx9IC8+O1xuICAgICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgICAgbGF5b3V0ID0gPHNwYW4gY2xhc3NOYW1lPVwibm8tdmlkZW9cIj5ObyB2aWRlbyBVUkwgUHJvdmlkZWQ8L3NwYW4+O1xuICAgIH1cblxuICAgIHJldHVybiBsYXlvdXQ7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBWaWRlb1N0cmVhbTtcbiIsInZhciBtYXAgPSB7XG5cdFwiLi9lbi5qc29uXCI6IFwiLi9zcmMvaTE4bi9lbi5qc29uXCIsXG5cdFwiLi9lcy5qc29uXCI6IFwiLi9zcmMvaTE4bi9lcy5qc29uXCIsXG5cdFwiLi96aC5qc29uXCI6IFwiLi9zcmMvaTE4bi96aC5qc29uXCJcbn07XG5cblxuZnVuY3Rpb24gd2VicGFja0NvbnRleHQocmVxKSB7XG5cdHZhciBpZCA9IHdlYnBhY2tDb250ZXh0UmVzb2x2ZShyZXEpO1xuXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhpZCk7XG59XG5mdW5jdGlvbiB3ZWJwYWNrQ29udGV4dFJlc29sdmUocmVxKSB7XG5cdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8obWFwLCByZXEpKSB7XG5cdFx0dmFyIGUgPSBuZXcgRXJyb3IoXCJDYW5ub3QgZmluZCBtb2R1bGUgJ1wiICsgcmVxICsgXCInXCIpO1xuXHRcdGUuY29kZSA9ICdNT0RVTEVfTk9UX0ZPVU5EJztcblx0XHR0aHJvdyBlO1xuXHR9XG5cdHJldHVybiBtYXBbcmVxXTtcbn1cbndlYnBhY2tDb250ZXh0LmtleXMgPSBmdW5jdGlvbiB3ZWJwYWNrQ29udGV4dEtleXMoKSB7XG5cdHJldHVybiBPYmplY3Qua2V5cyhtYXApO1xufTtcbndlYnBhY2tDb250ZXh0LnJlc29sdmUgPSB3ZWJwYWNrQ29udGV4dFJlc29sdmU7XG5tb2R1bGUuZXhwb3J0cyA9IHdlYnBhY2tDb250ZXh0O1xud2VicGFja0NvbnRleHQuaWQgPSBcIi4vc3JjL2kxOG4gc3luYyByZWN1cnNpdmUgXlxcXFwuXFxcXC8uKlxcXFwuanNvbiRcIjsiLCIvKipcbiAqIENvcHlyaWdodCAyMDE3IE9wZW5TdGFjayBGb3VuZGF0aW9uXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiovXG5cbmltcG9ydCByZXF1ZXN0IGZyb20gJ3N1cGVyYWdlbnQnO1xuaW1wb3J0IFVSSSBmcm9tIFwidXJpanNcIjtcbmxldCBodHRwID0gcmVxdWVzdDtcbmltcG9ydCBTd2FsIGZyb20gJ3N3ZWV0YWxlcnQyJztcbmltcG9ydCBUIGZyb20gXCJpMThuLXJlYWN0L2Rpc3QvaTE4bi1yZWFjdFwiO1xuaW1wb3J0IHtvYmplY3RUb1F1ZXJ5U3RyaW5nLCBpc0NsZWFyaW5nU2Vzc2lvblN0YXRlLCBzZXRTZXNzaW9uQ2xlYXJpbmdTdGF0ZSwgZ2V0Q3VycmVudFBhdGhOYW1lfSBmcm9tICcuL21ldGhvZHMnO1xuaW1wb3J0IHtkb0xvZ2luLCBpbml0TG9nT3V0LCBDTEVBUl9TRVNTSU9OX1NUQVRFLCBMT0dPVVRfVVNFUn0gZnJvbSAnLi4vY29tcG9uZW50cy9zZWN1cml0eS9hY3Rpb25zJztcblxuZXhwb3J0IGNvbnN0IEdFTkVSSUNfRVJST1IgID0gXCJZaWtlcy4gU29tZXRoaW5nIHNlZW1zIHRvIGJlIGJyb2tlbi4gT3VyIHdlYiB0ZWFtIGhhcyBiZWVuIG5vdGlmaWVkLCBhbmQgd2UgYXBvbG9naXplIGZvciB0aGUgaW5jb252ZW5pZW5jZS5cIjtcbmV4cG9ydCBjb25zdCBSRVNFVF9MT0FESU5HICA9ICdSRVNFVF9MT0FESU5HJztcbmV4cG9ydCBjb25zdCBTVEFSVF9MT0FESU5HICA9ICdTVEFSVF9MT0FESU5HJztcbmV4cG9ydCBjb25zdCBTVE9QX0xPQURJTkcgICA9ICdTVE9QX0xPQURJTkcnO1xuZXhwb3J0IGNvbnN0IFZBTElEQVRFICAgICAgID0gJ1ZBTElEQVRFJztcbmV4cG9ydCBjb25zdCBDTEVBUl9NRVNTQUdFICA9ICdDTEVBUl9NRVNTQUdFJztcbmV4cG9ydCBjb25zdCBTSE9XX01FU1NBR0UgICA9ICdTSE9XX01FU1NBR0UnO1xuXG5leHBvcnQgY29uc3QgY3JlYXRlQWN0aW9uID0gdHlwZSA9PiBwYXlsb2FkID0+ICh7XG4gICAgdHlwZSxcbiAgICBwYXlsb2FkXG59KTtcblxuZXhwb3J0IGNvbnN0IHJlc2V0TG9hZGluZyA9IGNyZWF0ZUFjdGlvbihSRVNFVF9MT0FESU5HKTtcbmV4cG9ydCBjb25zdCBzdGFydExvYWRpbmcgPSBjcmVhdGVBY3Rpb24oU1RBUlRfTE9BRElORyk7XG5leHBvcnQgY29uc3Qgc3RvcExvYWRpbmcgID0gY3JlYXRlQWN0aW9uKFNUT1BfTE9BRElORyk7XG5cbmNvbnN0IHhocnMgPSB7fTtcblxuY29uc3QgY2FuY2VsID0gKGtleSkgPT4ge1xuICAgIGlmKHhocnNba2V5XSkge1xuICAgICAgICB4aHJzW2tleV0uYWJvcnQoKTtcbiAgICAgICAgY29uc29sZS5sb2coYGFib3J0ZWQgcmVxdWVzdCAke2tleX1gKTtcbiAgICAgICAgZGVsZXRlIHhocnNba2V5XTtcbiAgICB9XG59XG5cbmNvbnN0IHNjaGVkdWxlID0gKGtleSwgcmVxKSA9PiB7XG4gICAgLy8gY29uc29sZS5sb2coYHNjaGVkdWxpbmcgJHtrZXl9YCk7XG4gICAgeGhyc1trZXldID0gcmVxO1xufTtcblxuY29uc3QgaXNPYmplY3RFbXB0eSA9IChvYmopID0+IHtcbiAgICByZXR1cm4gT2JqZWN0LmtleXMob2JqKS5sZW5ndGggPT09IDAgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBPYmplY3QgO1xufVxuXG5leHBvcnQgY29uc3QgYXV0aEVycm9ySGFuZGxlciA9IChlcnIsIHJlcykgPT4gKGRpc3BhdGNoLCBzdGF0ZSkgPT4ge1xuICAgIGxldCBjb2RlID0gZXJyLnN0YXR1cztcbiAgICBsZXQgbXNnID0gJyc7XG5cbiAgICBkaXNwYXRjaChzdG9wTG9hZGluZygpKTtcblxuICAgIHN3aXRjaCAoY29kZSkge1xuICAgICAgICBjYXNlIDQwMzpcbiAgICAgICAgICAgIGxldCBlcnJvcl9tZXNzYWdlID0ge1xuICAgICAgICAgICAgICAgIHRpdGxlOiAnRVJST1InLFxuICAgICAgICAgICAgICAgIGh0bWw6IFQudHJhbnNsYXRlKFwiZXJyb3JzLnVzZXJfbm90X2F1dGh6XCIpLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdlcnJvcidcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGRpc3BhdGNoKHNob3dNZXNzYWdlKCBlcnJvcl9tZXNzYWdlLCBpbml0TG9nT3V0ICkpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNDAxOlxuICAgICAgICAgICAgbGV0IGN1cnJlbnRMb2NhdGlvbiA9IGdldEN1cnJlbnRQYXRoTmFtZSgpO1xuICAgICAgICAgICAgbGV0IGNsZWFyaW5nX3Nlc3Npb25fc3RhdGUgPSBpc0NsZWFyaW5nU2Vzc2lvblN0YXRlKCk7XG5cbiAgICAgICAgICAgIGRpc3BhdGNoKHtcbiAgICAgICAgICAgICAgICB0eXBlOiBDTEVBUl9TRVNTSU9OX1NUQVRFLFxuICAgICAgICAgICAgICAgIHBheWxvYWQ6IHt9XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaWYoIWNsZWFyaW5nX3Nlc3Npb25fc3RhdGUpIHtcbiAgICAgICAgICAgICAgICBzZXRTZXNzaW9uQ2xlYXJpbmdTdGF0ZSh0cnVlKTtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnYXV0aEVycm9ySGFuZGxlciA0MDEgLSByZSBsb2dpbicpO1xuICAgICAgICAgICAgICAgIGRvTG9naW4oY3VycmVudExvY2F0aW9uKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDQwNDpcbiAgICAgICAgICAgIG1zZyA9IFwiXCI7XG5cbiAgICAgICAgICAgIGlmIChlcnIucmVzcG9uc2UuYm9keSAmJiBlcnIucmVzcG9uc2UuYm9keS5tZXNzYWdlKSBtc2cgPSBlcnIucmVzcG9uc2UuYm9keS5tZXNzYWdlO1xuICAgICAgICAgICAgZWxzZSBpZiAoZXJyLnJlc3BvbnNlLmVycm9yICYmIGVyci5yZXNwb25zZS5lcnJvci5tZXNzYWdlKSBtc2cgPSBlcnIucmVzcG9uc2UuZXJyb3IubWVzc2FnZTtcbiAgICAgICAgICAgIGVsc2UgbXNnID0gZXJyLm1lc3NhZ2U7XG5cbiAgICAgICAgICAgIFN3YWwuZmlyZShcIk5vdCBGb3VuZFwiLCBtc2csIFwid2FybmluZ1wiKTtcblxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNDEyOlxuICAgICAgICAgICAgZm9yICh2YXIgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGVyci5yZXNwb25zZS5ib2R5LmVycm9ycykpIHtcbiAgICAgICAgICAgICAgICBpZiAoaXNOYU4oa2V5KSkge1xuICAgICAgICAgICAgICAgICAgICBtc2cgKz0ga2V5ICsgJzogJztcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBtc2cgKz0gdmFsdWUgKyAnPGJyPic7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBTd2FsLmZpcmUoXCJWYWxpZGF0aW9uIGVycm9yXCIsIG1zZywgXCJ3YXJuaW5nXCIpO1xuICAgICAgICAgICAgZGlzcGF0Y2goe1xuICAgICAgICAgICAgICAgIHR5cGU6IFZBTElEQVRFLFxuICAgICAgICAgICAgICAgIHBheWxvYWQ6IHtlcnJvcnM6IGVyci5yZXNwb25zZS5ib2R5LmVycm9yc31cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBTd2FsLmZpcmUoXCJFUlJPUlwiLCBULnRyYW5zbGF0ZShcImVycm9ycy5zZXJ2ZXJfZXJyb3JcIiksIFwiZXJyb3JcIik7XG4gICAgfVxufVxuXG5leHBvcnQgY29uc3QgZ2V0UmVxdWVzdCA9KFxuICAgIHJlcXVlc3RBY3Rpb25DcmVhdG9yLFxuICAgIHJlY2VpdmVBY3Rpb25DcmVhdG9yLFxuICAgIGVuZHBvaW50LFxuICAgIGVycm9ySGFuZGxlciA9IGRlZmF1bHRFcnJvckhhbmRsZXIsXG4gICAgcmVxdWVzdEFjdGlvblBheWxvYWQgPSB7fVxuKSA9PiAocGFyYW1zID0ge30pID0+IChkaXNwYXRjaCwgc3RhdGUpID0+IHtcblxuICAgIGxldCB1cmwgPSBVUkkoZW5kcG9pbnQpO1xuXG4gICAgaWYoIWlzT2JqZWN0RW1wdHkocGFyYW1zKSlcbiAgICAgICAgdXJsID0gdXJsLnF1ZXJ5KHBhcmFtcyk7XG5cbiAgICBsZXQga2V5ID0gdXJsLnRvU3RyaW5nKCk7XG5cbiAgICBpZihyZXF1ZXN0QWN0aW9uQ3JlYXRvciAmJiB0eXBlb2YgcmVxdWVzdEFjdGlvbkNyZWF0b3IgPT09ICdmdW5jdGlvbicpXG4gICAgICAgIGRpc3BhdGNoKHJlcXVlc3RBY3Rpb25DcmVhdG9yKHJlcXVlc3RBY3Rpb25QYXlsb2FkKSk7XG5cbiAgICBjYW5jZWwoa2V5KTtcblxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIGxldCByZXEgPSBodHRwLmdldCh1cmwudG9TdHJpbmcoKSlcbiAgICAgICAgLnRpbWVvdXQoe1xuICAgICAgICAgICAgcmVzcG9uc2U6IDYwMDAwLFxuICAgICAgICAgICAgZGVhZGxpbmU6IDYwMDAwLFxuICAgICAgICB9KVxuICAgICAgICAuZW5kKHJlc3BvbnNlSGFuZGxlcihkaXNwYXRjaCwgc3RhdGUsIHJlY2VpdmVBY3Rpb25DcmVhdG9yLCBlcnJvckhhbmRsZXIsIHJlc29sdmUsIHJlamVjdCkpXG5cbiAgICAgICAgc2NoZWR1bGUoa2V5LCByZXEpO1xuICAgIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IHB1dFJlcXVlc3QgPSAoXG4gICAgcmVxdWVzdEFjdGlvbkNyZWF0b3IsXG4gICAgcmVjZWl2ZUFjdGlvbkNyZWF0b3IsXG4gICAgZW5kcG9pbnQsXG4gICAgcGF5bG9hZCxcbiAgICBlcnJvckhhbmRsZXIgPSBkZWZhdWx0RXJyb3JIYW5kbGVyLFxuICAgIHJlcXVlc3RBY3Rpb25QYXlsb2FkID0ge31cbikgPT4gKHBhcmFtcyA9IHt9KSA9PiAoIGRpc3BhdGNoLCBzdGF0ZSkgPT4ge1xuXG4gICAgbGV0IHVybCA9IFVSSShlbmRwb2ludCk7XG5cbiAgICBpZighaXNPYmplY3RFbXB0eShwYXJhbXMpKVxuICAgICAgICB1cmwgPSB1cmwucXVlcnkocGFyYW1zKTtcblxuICAgIGlmKHJlcXVlc3RBY3Rpb25DcmVhdG9yICYmIHR5cGVvZiByZXF1ZXN0QWN0aW9uQ3JlYXRvciA9PT0gJ2Z1bmN0aW9uJylcbiAgICAgICAgZGlzcGF0Y2gocmVxdWVzdEFjdGlvbkNyZWF0b3IocmVxdWVzdEFjdGlvblBheWxvYWQpKTtcblxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIGlmKHBheWxvYWQgPT0gbnVsbClcbiAgICAgICAgICAgIHBheWxvYWQgPSB7fTtcbiAgICAgICAgaHR0cC5wdXQodXJsLnRvU3RyaW5nKCkpXG4gICAgICAgICAgICAuc2VuZChwYXlsb2FkKVxuICAgICAgICAgICAgLmVuZChyZXNwb25zZUhhbmRsZXIoZGlzcGF0Y2gsIHN0YXRlLCByZWNlaXZlQWN0aW9uQ3JlYXRvciwgZXJyb3JIYW5kbGVyLCByZXNvbHZlLCByZWplY3QpKVxuICAgIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGRlbGV0ZVJlcXVlc3QgPSAoXG4gICAgcmVxdWVzdEFjdGlvbkNyZWF0b3IsXG4gICAgcmVjZWl2ZUFjdGlvbkNyZWF0b3IsXG4gICAgZW5kcG9pbnQsXG4gICAgcGF5bG9hZCxcbiAgICBlcnJvckhhbmRsZXIgID0gZGVmYXVsdEVycm9ySGFuZGxlcixcbiAgICByZXF1ZXN0QWN0aW9uUGF5bG9hZCA9IHt9XG4pID0+IChwYXJhbXMpID0+IChkaXNwYXRjaCwgc3RhdGUpID0+IHtcbiAgICBsZXQgdXJsID0gVVJJKGVuZHBvaW50KTtcblxuICAgIGlmKCFpc09iamVjdEVtcHR5KHBhcmFtcykpXG4gICAgICAgIHVybCA9IHVybC5xdWVyeShwYXJhbXMpO1xuXG4gICAgaWYocmVxdWVzdEFjdGlvbkNyZWF0b3IgJiYgdHlwZW9mIHJlcXVlc3RBY3Rpb25DcmVhdG9yID09PSAnZnVuY3Rpb24nKVxuICAgICAgICBkaXNwYXRjaChyZXF1ZXN0QWN0aW9uQ3JlYXRvcihyZXF1ZXN0QWN0aW9uUGF5bG9hZCkpO1xuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgaWYocGF5bG9hZCA9PSBudWxsKVxuICAgICAgICAgICAgcGF5bG9hZCA9IHt9O1xuXG4gICAgICAgIGh0dHAuZGVsZXRlKHVybClcbiAgICAgICAgICAgIC5zZW5kKHBheWxvYWQpXG4gICAgICAgICAgICAuZW5kKHJlc3BvbnNlSGFuZGxlcihkaXNwYXRjaCwgc3RhdGUsIHJlY2VpdmVBY3Rpb25DcmVhdG9yLCBlcnJvckhhbmRsZXIsIHJlc29sdmUsIHJlamVjdCkpO1xuICAgIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IHBvc3RSZXF1ZXN0ID0gKFxuICAgICAgICByZXF1ZXN0QWN0aW9uQ3JlYXRvcixcbiAgICAgICAgcmVjZWl2ZUFjdGlvbkNyZWF0b3IsXG4gICAgICAgIGVuZHBvaW50LFxuICAgICAgICBwYXlsb2FkLFxuICAgICAgICBlcnJvckhhbmRsZXIgPSBkZWZhdWx0RXJyb3JIYW5kbGVyLFxuICAgICAgICByZXF1ZXN0QWN0aW9uUGF5bG9hZCA9IHt9XG4pID0+IChwYXJhbXMgPSB7fSkgPT4gKGRpc3BhdGNoLCBzdGF0ZSkgPT4ge1xuXG4gICAgbGV0IHVybCA9IFVSSShlbmRwb2ludCk7XG5cbiAgICBpZighaXNPYmplY3RFbXB0eShwYXJhbXMpKVxuICAgICAgICB1cmwgPSB1cmwucXVlcnkocGFyYW1zKTtcblxuICAgIGlmKHJlcXVlc3RBY3Rpb25DcmVhdG9yICYmIHR5cGVvZiByZXF1ZXN0QWN0aW9uQ3JlYXRvciA9PT0gJ2Z1bmN0aW9uJylcbiAgICAgICAgZGlzcGF0Y2gocmVxdWVzdEFjdGlvbkNyZWF0b3IocmVxdWVzdEFjdGlvblBheWxvYWQpKTtcblxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG5cbiAgICAgICAgbGV0IHJlcXVlc3QgPSBodHRwLnBvc3QodXJsKTtcblxuICAgICAgICBpZihwYXlsb2FkICE9IG51bGwpXG4gICAgICAgICAgICByZXF1ZXN0LnNlbmQocGF5bG9hZCk7XG4gICAgICAgIGVsc2UgLy8gdG8gYmUgYSBzaW1wbGUgQ09SUyByZXF1ZXN0XG4gICAgICAgICAgICByZXF1ZXN0LnNldCgnQ29udGVudC1UeXBlJywgJ3RleHQvcGxhaW4nKTtcblxuICAgICAgICByZXF1ZXN0LmVuZChyZXNwb25zZUhhbmRsZXIoZGlzcGF0Y2gsIHN0YXRlLCByZWNlaXZlQWN0aW9uQ3JlYXRvciwgZXJyb3JIYW5kbGVyLCByZXNvbHZlLCByZWplY3QpKTtcbiAgICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBwb3N0RmlsZSA9IChcbiAgICByZXF1ZXN0QWN0aW9uQ3JlYXRvcixcbiAgICByZWNlaXZlQWN0aW9uQ3JlYXRvcixcbiAgICBlbmRwb2ludCxcbiAgICBmaWxlLFxuICAgIGZpbGVNZXRhZGF0YSA9IHt9LFxuICAgIGVycm9ySGFuZGxlciA9IGRlZmF1bHRFcnJvckhhbmRsZXIsXG4gICAgcmVxdWVzdEFjdGlvblBheWxvYWQgPSB7fVxuKSA9PiAocGFyYW1zID0ge30pID0+IChkaXNwYXRjaCwgc3RhdGUpID0+IHtcblxuICAgIGxldCB1cmwgPSBVUkkoZW5kcG9pbnQpO1xuXG4gICAgaWYoIWlzT2JqZWN0RW1wdHkocGFyYW1zKSlcbiAgICAgICAgdXJsID0gdXJsLnF1ZXJ5KHBhcmFtcyk7XG5cbiAgICBpZihyZXF1ZXN0QWN0aW9uQ3JlYXRvciAmJiB0eXBlb2YgcmVxdWVzdEFjdGlvbkNyZWF0b3IgPT09ICdmdW5jdGlvbicpXG4gICAgICAgIGRpc3BhdGNoKHJlcXVlc3RBY3Rpb25DcmVhdG9yKHJlcXVlc3RBY3Rpb25QYXlsb2FkKSk7XG5cbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuXG4gICAgICAgIGNvbnN0IHJlcSA9IGh0dHAucG9zdCh1cmwpXG4gICAgICAgICAgICAgICAgICAgIC5hdHRhY2goJ2ZpbGUnLCBmaWxlKTtcblxuICAgICAgICBpZighaXNPYmplY3RFbXB0eShmaWxlTWV0YWRhdGEpKSB7XG4gICAgICAgICAgICBPYmplY3Qua2V5cyhmaWxlTWV0YWRhdGEpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgICAgICAgICAgIGxldCB2YWx1ZSA9IGZpbGVNZXRhZGF0YVtrZXldO1xuICAgICAgICAgICAgICAgIHJlcS5maWVsZChrZXksIHZhbHVlKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVxLmVuZChyZXNwb25zZUhhbmRsZXIoZGlzcGF0Y2gsIHN0YXRlLCByZWNlaXZlQWN0aW9uQ3JlYXRvciwgZXJyb3JIYW5kbGVyLCByZXNvbHZlLCByZWplY3QpKTtcbiAgICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBwdXRGaWxlID0gKFxuICAgIHJlcXVlc3RBY3Rpb25DcmVhdG9yLFxuICAgIHJlY2VpdmVBY3Rpb25DcmVhdG9yLFxuICAgIGVuZHBvaW50LFxuICAgIGZpbGUgPSBudWxsLFxuICAgIGZpbGVNZXRhZGF0YSA9IHt9LFxuICAgIGVycm9ySGFuZGxlciA9IGRlZmF1bHRFcnJvckhhbmRsZXIsXG4gICAgcmVxdWVzdEFjdGlvblBheWxvYWQgPSB7fVxuKSA9PiAocGFyYW1zID0ge30pID0+IChkaXNwYXRjaCwgc3RhdGUpID0+IHtcblxuICAgIGxldCB1cmwgPSBVUkkoZW5kcG9pbnQpO1xuXG4gICAgaWYoIWlzT2JqZWN0RW1wdHkocGFyYW1zKSlcbiAgICAgICAgdXJsID0gdXJsLnF1ZXJ5KHBhcmFtcyk7XG5cbiAgICBpZihyZXF1ZXN0QWN0aW9uQ3JlYXRvciAmJiB0eXBlb2YgcmVxdWVzdEFjdGlvbkNyZWF0b3IgPT09ICdmdW5jdGlvbicpXG4gICAgICAgIGRpc3BhdGNoKHJlcXVlc3RBY3Rpb25DcmVhdG9yKHJlcXVlc3RBY3Rpb25QYXlsb2FkKSk7XG5cbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuXG4gICAgICAgIGNvbnN0IHJlcSA9IGh0dHAucHV0KHVybCk7XG5cbiAgICAgICAgaWYoZmlsZSAhPSBudWxsKXtcbiAgICAgICAgICAgIHJlcS5hdHRhY2goJ2ZpbGUnLCBmaWxlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmKCFpc09iamVjdEVtcHR5KGZpbGVNZXRhZGF0YSkpIHtcbiAgICAgICAgICAgIE9iamVjdC5rZXlzKGZpbGVNZXRhZGF0YSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgICAgICAgICAgbGV0IHZhbHVlID0gZmlsZU1ldGFkYXRhW2tleV07XG4gICAgICAgICAgICAgICAgcmVxLmZpZWxkKGtleSwgdmFsdWUpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXEuZW5kKHJlc3BvbnNlSGFuZGxlcihkaXNwYXRjaCwgc3RhdGUsIHJlY2VpdmVBY3Rpb25DcmVhdG9yLCBlcnJvckhhbmRsZXIsIHJlc29sdmUsIHJlamVjdCkpO1xuICAgIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGRlZmF1bHRFcnJvckhhbmRsZXIgPSAoZXJyLCByZXMpID0+IChkaXNwYXRjaCkgPT4ge1xuICAgIGxldCBib2R5ID0gcmVzLmJvZHk7XG4gICAgbGV0IHRleHQgPSAnJztcbiAgICBpZihib2R5IGluc3RhbmNlb2YgT2JqZWN0KXtcbiAgICAgICAgaWYoYm9keS5oYXNPd25Qcm9wZXJ0eSgnbWVzc2FnZScpKVxuICAgICAgICAgICAgdGV4dCA9IGJvZHkubWVzc2FnZTtcbiAgICB9XG4gICAgU3dhbC5maXJlKHJlcy5zdGF0dXNUZXh0LCB0ZXh0LCBcImVycm9yXCIpO1xufVxuXG5leHBvcnQgY29uc3QgcmVzcG9uc2VIYW5kbGVyID1cbiAgICAoIGRpc3BhdGNoLCBzdGF0ZSwgcmVjZWl2ZUFjdGlvbkNyZWF0b3IsIGVycm9ySGFuZGxlciwgcmVzb2x2ZSwgcmVqZWN0ICkgPT5cbiAgICAoZXJyLCByZXMpID0+IHtcbiAgICBpZiAoZXJyIHx8ICFyZXMub2spIHtcbiAgICAgICAgaWYoZXJyb3JIYW5kbGVyKSB7XG4gICAgICAgICAgICBlcnJvckhhbmRsZXIoZXJyLCByZXMpKGRpc3BhdGNoLCBzdGF0ZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlamVjdCh7IGVyciwgcmVzLCBkaXNwYXRjaCwgc3RhdGUgfSlcbiAgICB9XG4gICAgbGV0IGpzb24gPSByZXMuYm9keTtcbiAgICBpZih0eXBlb2YgcmVjZWl2ZUFjdGlvbkNyZWF0b3IgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgZGlzcGF0Y2gocmVjZWl2ZUFjdGlvbkNyZWF0b3Ioe3Jlc3BvbnNlOiBqc29ufSkpO1xuICAgICAgICByZXR1cm4gcmVzb2x2ZSh7cmVzcG9uc2U6IGpzb259KTtcbiAgICB9XG4gICAgZGlzcGF0Y2gocmVjZWl2ZUFjdGlvbkNyZWF0b3IpO1xuICAgIHJldHVybiByZXNvbHZlKHtyZXNwb25zZToganNvbn0pO1xufVxuXG5cbmV4cG9ydCBjb25zdCBmZXRjaEVycm9ySGFuZGxlciA9IChyZXNwb25zZSkgPT4ge1xuICAgIGxldCBjb2RlID0gcmVzcG9uc2Uuc3RhdHVzO1xuICAgIGxldCBtc2cgPSByZXNwb25zZS5zdGF0dXNUZXh0O1xuXG4gICAgc3dpdGNoIChjb2RlKSB7XG4gICAgICAgIGNhc2UgNDAzOlxuICAgICAgICAgICAgU3dhbC5maXJlKFwiRVJST1JcIiwgVC50cmFuc2xhdGUoXCJlcnJvcnMudXNlcl9ub3RfYXV0aHpcIiksIFwid2FybmluZ1wiKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDQwMTpcbiAgICAgICAgICAgIFN3YWwuZmlyZShcIkVSUk9SXCIsIFQudHJhbnNsYXRlKFwiZXJyb3JzLnNlc3Npb25fZXhwaXJlZFwiKSwgXCJlcnJvclwiKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDQxMjpcbiAgICAgICAgICAgIFN3YWwuZmlyZShcIkVSUk9SXCIsIG1zZywgXCJ3YXJuaW5nXCIpO1xuICAgICAgICBjYXNlIDUwMDpcbiAgICAgICAgICAgIFN3YWwuZmlyZShcIkVSUk9SXCIsIFQudHJhbnNsYXRlKFwiZXJyb3JzLnNlcnZlcl9lcnJvclwiKSwgXCJlcnJvclwiKTtcbiAgICB9XG59XG5cbmV4cG9ydCBjb25zdCBmZXRjaFJlc3BvbnNlSGFuZGxlciA9IChyZXNwb25zZSkgPT4ge1xuICAgIGlmICghcmVzcG9uc2Uub2spIHtcbiAgICAgICAgdGhyb3cgcmVzcG9uc2U7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlLmpzb24oKTtcbiAgICB9XG59XG5cbmV4cG9ydCBjb25zdCBzaG93TWVzc2FnZSA9IChzZXR0aW5ncywgY2FsbGJhY2sgPSB7fSkgPT4gKGRpc3BhdGNoKSA9PiB7XG4gICAgZGlzcGF0Y2goc3RvcExvYWRpbmcoKSk7XG5cbiAgICBTd2FsLmZpcmUoc2V0dGluZ3MpLnRoZW4oKHJlc3VsdCkgPT4ge1xuICAgICAgICBpZiAocmVzdWx0LnZhbHVlICYmIHR5cGVvZiBjYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgfVxuICAgIH0pO1xufVxuXG5leHBvcnQgY29uc3Qgc2hvd1N1Y2Nlc3NNZXNzYWdlID0gKGh0bWwpID0+IChkaXNwYXRjaCkgPT4ge1xuICAgIGRpc3BhdGNoKHN0b3BMb2FkaW5nKCkpO1xuICAgIFN3YWwuZmlyZSh7XG4gICAgICAgIHRpdGxlOiBULnRyYW5zbGF0ZShcImdlbmVyYWwuZG9uZVwiKSxcbiAgICAgICAgaHRtbDogaHRtbCxcbiAgICAgICAgdHlwZTogJ3N1Y2Nlc3MnXG4gICAgfSk7XG59XG5cbmV4cG9ydCBjb25zdCBkb3dubG9hZEZpbGVCeUNvbnRlbnQgPSAoZmlsZW5hbWUsIGNvbnRlbnQsIG1pbWUpID0+IHtcbiAgICBsZXQgbGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcbiAgICBsaW5rLnRleHRDb250ZW50ID0gJ2Rvd25sb2FkJztcbiAgICBsaW5rLmRvd25sb2FkID0gZmlsZW5hbWU7XG4gICAgbGluay5ocmVmID0gYGRhdGE6JHttaW1lfSwke2VuY29kZVVSSUNvbXBvbmVudChjb250ZW50KX1gXG4gICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChsaW5rKTsgLy8gUmVxdWlyZWQgZm9yIEZGXG4gICAgbGluay5jbGljaygpO1xuICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQobGluayk7XG59XG5cbmV4cG9ydCBjb25zdCBnZXRDU1YgPSAoZW5kcG9pbnQsIHBhcmFtcywgZmlsZW5hbWUsIGhlYWRlciA9IG51bGwpID0+IChkaXNwYXRjaCkgPT4ge1xuXG4gICAgbGV0IHVybCA9IFVSSShlbmRwb2ludCk7XG5cbiAgICBpZighaXNPYmplY3RFbXB0eShwYXJhbXMpKVxuICAgICAgICB1cmwgPSB1cmwucXVlcnkocGFyYW1zKTtcblxuICAgIGRpc3BhdGNoKHN0YXJ0TG9hZGluZygpKTtcblxuICAgIHJldHVybiBmZXRjaCh1cmwudG9TdHJpbmcoKSlcbiAgICAgICAgLnRoZW4oKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgICBpZiAoIXJlc3BvbnNlLm9rKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgcmVzcG9uc2U7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiByZXNwb25zZS50ZXh0KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICAgIC50aGVuKChjc3YpID0+IHtcbiAgICAgICAgICAgIGRpc3BhdGNoKHN0b3BMb2FkaW5nKCkpO1xuXG4gICAgICAgICAgICBpZiAoaGVhZGVyKSB7XG4gICAgICAgICAgICAgICAgY3N2ID0gaGVhZGVyICsgJ1xcclxccicgKyBjc3Y7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkb3dubG9hZEZpbGVCeUNvbnRlbnQoZmlsZW5hbWUsIGNzdiwgJ3RleHQvY3N2O2NoYXJzZXQ9dXRmLTgnKTtcbiAgICAgICAgfSlcbiAgICAgICAgLmNhdGNoKGZldGNoRXJyb3JIYW5kbGVyKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRSYXdDU1YgPSAoZW5kcG9pbnQsIHBhcmFtcywgaGVhZGVyID0gbnVsbCkgPT4ge1xuXG4gICAgbGV0IHVybCA9IFVSSShlbmRwb2ludCk7XG5cbiAgICBpZighaXNPYmplY3RFbXB0eShwYXJhbXMpKVxuICAgICAgICB1cmwgPSB1cmwucXVlcnkocGFyYW1zKTtcblxuICAgIHJldHVybiBmZXRjaCh1cmwudG9TdHJpbmcoKSlcbiAgICAgICAgLnRoZW4oKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgICBpZiAoIXJlc3BvbnNlLm9rKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgcmVzcG9uc2U7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiByZXNwb25zZS50ZXh0KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICAgIC50aGVuKChjc3YpID0+IHtcbiAgICAgICAgICAgIGlmIChoZWFkZXIpIHtcbiAgICAgICAgICAgICAgICBjc3YgPSBoZWFkZXIgKyAnXFxyXFxyJyArIGNzdjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBjc3Y7XG4gICAgICAgIH0pXG4gICAgICAgIC5jYXRjaChmZXRjaEVycm9ySGFuZGxlcik7XG59O1xuXG5leHBvcnQgY29uc3QgZXNjYXBlRmlsdGVyVmFsdWUgPSAodmFsdWUpID0+IHtcbiAgICB2YWx1ZSA9IHZhbHVlLnJlcGxhY2UoLywvZywgXCJcXFxcLFwiKTtcbiAgICB2YWx1ZSA9IHZhbHVlLnJlcGxhY2UoLzsvZywgXCJcXFxcO1wiKTtcbiAgICByZXR1cm4gdmFsdWU7XG59OyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTggT3BlblN0YWNrIEZvdW5kYXRpb25cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqKi9cblxuaW1wb3J0IG1vbWVudCBmcm9tICdtb21lbnQtdGltZXpvbmUnO1xuaW1wb3J0IFVSSSBmcm9tIFwidXJpanNcIjtcbmltcG9ydCB7IGNyZWF0ZUhhc2ggfSBmcm9tICdjcnlwdG8nXG5cbmV4cG9ydCBjb25zdCBmaW5kRWxlbWVudFBvcyA9IChvYmopID0+IHtcbiAgICB2YXIgY3VydG9wID0gLTcwO1xuICAgIGlmIChvYmoub2Zmc2V0UGFyZW50KSB7XG4gICAgICAgIGRvIHtcbiAgICAgICAgICAgIGN1cnRvcCArPSBvYmoub2Zmc2V0VG9wO1xuICAgICAgICB9IHdoaWxlIChvYmogPSBvYmoub2Zmc2V0UGFyZW50KTtcbiAgICAgICAgcmV0dXJuIFtjdXJ0b3BdO1xuICAgIH1cbn07XG5cbmV4cG9ydCBjb25zdCBlcG9jaFRvTW9tZW50ID0gKGF0aW1lKSA9PiB7XG4gICAgaWYoIWF0aW1lKSByZXR1cm4gYXRpbWU7XG4gICAgYXRpbWUgPSBhdGltZSAqIDEwMDA7XG4gICAgcmV0dXJuIG1vbWVudChhdGltZSk7XG59O1xuXG5leHBvcnQgY29uc3QgZXBvY2hUb01vbWVudFRpbWVab25lID0gKGF0aW1lLCB0aW1lX3pvbmUpID0+IHtcbiAgICBpZighYXRpbWUpIHJldHVybiBhdGltZTtcbiAgICBhdGltZSA9IGF0aW1lICogMTAwMDtcbiAgICByZXR1cm4gbW9tZW50KGF0aW1lKS50eih0aW1lX3pvbmUpO1xufTtcblxuZXhwb3J0IGNvbnN0IGZvcm1hdEVwb2NoID0gKGF0aW1lLCBmb3JtYXQgPSAnTS9EL1lZWVkgaDptbSBhJykgPT4ge1xuICAgIGlmKCFhdGltZSkgcmV0dXJuIGF0aW1lO1xuICAgIHJldHVybiBlcG9jaFRvTW9tZW50KGF0aW1lKS5mb3JtYXQoZm9ybWF0KTtcbn07XG5cbmV4cG9ydCBjb25zdCBvYmplY3RUb1F1ZXJ5U3RyaW5nID0gKG9iaikgPT4ge1xuICAgIHZhciBzdHIgPSBcIlwiO1xuICAgIGZvciAodmFyIGtleSBpbiBvYmopIHtcbiAgICAgICAgaWYgKHN0ciAhPSBcIlwiKSB7XG4gICAgICAgICAgICBzdHIgKz0gXCImXCI7XG4gICAgICAgIH1cbiAgICAgICAgc3RyICs9IGtleSArIFwiPVwiICsgZW5jb2RlVVJJQ29tcG9uZW50KG9ialtrZXldKTtcbiAgICB9XG5cbiAgICByZXR1cm4gc3RyO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEJhY2tVUkwgPSAoKSA9PiB7XG4gICAgbGV0IHVybCAgICAgID0gVVJJKHdpbmRvdy5sb2NhdGlvbi5ocmVmKTtcbiAgICBsZXQgcXVlcnkgICAgPSB1cmwuc2VhcmNoKHRydWUpO1xuICAgIGxldCBmcmFnbWVudCA9IHVybC5mcmFnbWVudCgpO1xuICAgIGxldCBiYWNrVXJsICA9IHF1ZXJ5Lmhhc093blByb3BlcnR5KCdCYWNrVXJsJykgPyBxdWVyeVsnQmFja1VybCddIDogbnVsbDtcbiAgICBpZihmcmFnbWVudCAhPSBudWxsICYmIGZyYWdtZW50ICE9ICcnKXtcbiAgICAgICAgYmFja1VybCArPSBgIyR7ZnJhZ21lbnR9YDtcbiAgICB9XG4gICAgcmV0dXJuIGJhY2tVcmw7XG59O1xuXG5cbmV4cG9ydCBjb25zdCBnZXRBdXRoQ2FsbGJhY2sgPSAoKSA9PiB7XG4gICAgaWYodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgcmV0dXJuIGAke3dpbmRvdy5sb2NhdGlvbi5vcmlnaW59L2F1dGgvY2FsbGJhY2tgO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRDdXJyZW50TG9jYXRpb24gPSAoKSA9PiB7XG4gICAgbGV0IGxvY2F0aW9uID0gJyc7XG4gICAgaWYodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgbG9jYXRpb24gPSB3aW5kb3cubG9jYXRpb247XG4gICAgICAgIC8vIGNoZWNrIGlmIHdlIGFyZSBvbiBpZnJhbWVcbiAgICAgICAgaWYgKHdpbmRvdy50b3ApXG4gICAgICAgICAgICBsb2NhdGlvbiA9IHdpbmRvdy50b3AubG9jYXRpb247XG4gICAgfVxuICAgIHJldHVybiBsb2NhdGlvbjtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRPcmlnaW4gPSAoKSA9PiB7XG4gICAgaWYodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgcmV0dXJuIHdpbmRvdy5sb2NhdGlvbi5vcmlnaW47XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEN1cnJlbnRQYXRoTmFtZSA9ICgpID0+IHtcbiAgICBpZih0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgIHJldHVybiB3aW5kb3cubG9jYXRpb24ucGF0aG5hbWU7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEN1cnJlbnRIcmVmID0gKCkgPT4ge1xuICAgIGlmKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHJldHVybiB3aW5kb3cubG9jYXRpb24uaHJlZjtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0QWxsb3dlZFVzZXJHcm91cHMgPSAoKSA9PiB7XG4gICAgaWYodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgcmV0dXJuIHdpbmRvdy5BTExPV0VEX1VTRVJfR1JPVVBTIHx8ICcnO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbn07XG5cbmV4cG9ydCBjb25zdCBidWlsZEFQSUJhc2VVcmwgPSAocmVsYXRpdmVVcmwpID0+IHtcbiAgICBpZih0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyl7XG4gICAgICAgIHJldHVybiBgJHt3aW5kb3cuQVBJX0JBU0VfVVJMfSR7cmVsYXRpdmVVcmx9YDtcbiAgICB9XG4gICAgcmV0dXJuIG51bGxgYDtcbn07XG5cbmV4cG9ydCBjb25zdCBwdXRPbkxvY2FsU3RvcmFnZSA9IChrZXksIHZhbHVlKSA9PiB7XG4gICAgaWYodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgd2luZG93LmxvY2FsU3RvcmFnZS5zZXRJdGVtKGtleSwgdmFsdWUpO1xuICAgIH1cbn07XG5cbmV4cG9ydCBjb25zdCBnZXRGcm9tTG9jYWxTdG9yYWdlID0gKGtleSwgcmVtb3ZlSXQpID0+IHtcbiAgICBpZih0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICBsZXQgdmFsID0gd2luZG93LmxvY2FsU3RvcmFnZS5nZXRJdGVtKGtleSk7XG4gICAgICAgIGlmKHJlbW92ZUl0KXtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGBnZXRGcm9tTG9jYWxTdG9yYWdlIHJlbW92aW5nIGtleSAke2tleX1gKTtcbiAgICAgICAgICAgIHJlbW92ZUZyb21Mb2NhbFN0b3JhZ2Uoa2V5KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdmFsO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbn07XG5cbmV4cG9ydCBjb25zdCByZW1vdmVGcm9tTG9jYWxTdG9yYWdlID0gKGtleSkgPT4ge1xuICAgIGlmKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHdpbmRvdy5sb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShrZXkpO1xuICAgIH1cbn1cblxuZXhwb3J0IGNvbnN0IGlzQ2xlYXJpbmdTZXNzaW9uU3RhdGUgPSAoKSA9PiB7XG4gICAgaWYodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgcmV0dXJuIHdpbmRvdy5jbGVhcmluZ19zZXNzaW9uX3N0YXRlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59O1xuXG5leHBvcnQgY29uc3Qgc2V0U2Vzc2lvbkNsZWFyaW5nU3RhdGUgPSAodmFsKSA9PiB7XG4gICAgaWYodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgd2luZG93LmNsZWFyaW5nX3Nlc3Npb25fc3RhdGUgPSB2YWw7XG4gICAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGdldEN1cnJlbnRVc2VyTGFuZ3VhZ2UgPSAoKSA9PiB7XG4gICAgbGV0IGxhbmd1YWdlID0gJ2VuJztcbiAgICBpZih0eXBlb2YgbmF2aWdhdG9yICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICBsYW5ndWFnZSA9IChuYXZpZ2F0b3IubGFuZ3VhZ2VzICYmIG5hdmlnYXRvci5sYW5ndWFnZXNbMF0pIHx8IG5hdmlnYXRvci5sYW5ndWFnZSB8fCBuYXZpZ2F0b3IudXNlckxhbmd1YWdlO1xuICAgIH1cbiAgICByZXR1cm4gbGFuZ3VhZ2U7XG59O1xuXG5leHBvcnQgY29uc3Qgc2Nyb2xsVG9FcnJvciA9IChlcnJvcnMpID0+IHtcbiAgICBpZihPYmplY3Qua2V5cyhlcnJvcnMpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgY29uc3QgZmlyc3RFcnJvciA9IE9iamVjdC5rZXlzKGVycm9ycylbMF07XG4gICAgICAgIGNvbnN0IGZpcnN0Tm9kZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGZpcnN0RXJyb3IpO1xuICAgICAgICBpZiAoZmlyc3ROb2RlKSB3aW5kb3cuc2Nyb2xsVG8oMCwgZmluZEVsZW1lbnRQb3MoZmlyc3ROb2RlKSk7XG4gICAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGhhc0Vycm9ycyA9IChmaWVsZCwgZXJyb3JzKSA9PiB7XG4gICAgaWYoZmllbGQgaW4gZXJyb3JzKSB7XG4gICAgICAgIHJldHVybiBlcnJvcnNbZmllbGRdO1xuICAgIH1cbiAgICByZXR1cm4gJyc7XG59O1xuXG5leHBvcnQgY29uc3Qgc2hhbGxvd0VxdWFsID0gKG9iamVjdDEsIG9iamVjdDIpID0+IHtcbiAgICBjb25zdCBrZXlzMSA9IE9iamVjdC5rZXlzKG9iamVjdDEpO1xuICAgIGNvbnN0IGtleXMyID0gT2JqZWN0LmtleXMob2JqZWN0Mik7XG5cbiAgICBpZiAoa2V5czEubGVuZ3RoICE9PSBrZXlzMi5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGZvciAobGV0IGtleSBvZiBrZXlzMSkge1xuICAgICAgICBpZiAob2JqZWN0MVtrZXldICE9PSBvYmplY3QyW2tleV0pIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0cnVlO1xufTtcblxuZXhwb3J0IGNvbnN0IGFycmF5c0VxdWFsID0gKGExLCBhMikgPT5cbiAgICBhMS5sZW5ndGggPT09IGEyLmxlbmd0aCAmJiBhMS5ldmVyeSgobywgaWR4KSA9PiBzaGFsbG93RXF1YWwobywgYTJbaWR4XSkpO1xuXG5leHBvcnQgY29uc3QgaXNFbXB0eSA9IChvYmopID0+IHtcbiAgICByZXR1cm4gT2JqZWN0LmtleXMob2JqKS5sZW5ndGggPT09IDA7XG59O1xuXG5leHBvcnQgY29uc3QgYmFzZTY0VVJMRW5jb2RlID0gKHN0cikgPT4ge1xuICAgIHJldHVybiBzdHJcbiAgICAgICAgLnRvU3RyaW5nKCdiYXNlNjQnKVxuICAgICAgICAucmVwbGFjZSgvXFwrL2csICctJylcbiAgICAgICAgLnJlcGxhY2UoL1xcLy9nLCAnXycpXG4gICAgICAgIC5yZXBsYWNlKC89L2csICcnKVxufVxuXG5leHBvcnQgY29uc3Qgc2hhMjU2ID0gKGJ1ZmZlcikgPT4ge1xuICAgIHJldHVybiBjcmVhdGVIYXNoKCdzaGEyNTYnKS51cGRhdGUoYnVmZmVyKS5kaWdlc3QoKVxufVxuXG5leHBvcnQgY29uc3QgcmV0cnlQcm9taXNlID0gYXN5bmMgKFxuICAgIGNiLFxuICAgIG1heE51bWJlck9mUmV0cmllcyA9IDNcbikgPT4ge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbWF4TnVtYmVyT2ZSZXRyaWVzOyBpKyspIHtcbiAgICAgICAgaWYgKGF3YWl0IGNiKCkpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xufVxuIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxOCBPcGVuU3RhY2sgRm91bmRhdGlvblxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICoqL1xuXG5pbXBvcnQge2ZldGNoRXJyb3JIYW5kbGVyLCBmZXRjaFJlc3BvbnNlSGFuZGxlciwgZXNjYXBlRmlsdGVyVmFsdWUgfSBmcm9tIFwiLi9hY3Rpb25zXCI7XG5pbXBvcnQge2dldEFjY2Vzc1Rva2VufSBmcm9tICcuLi9jb21wb25lbnRzL3NlY3VyaXR5L21ldGhvZHMnO1xuaW1wb3J0IHtidWlsZEFQSUJhc2VVcmx9IGZyb20gXCIuL21ldGhvZHNcIjtcbmltcG9ydCBVUkkgZnJvbSBcInVyaWpzXCI7XG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuZXhwb3J0IGNvbnN0IFJFQ0VJVkVfQ09VTlRSSUVTICA9ICdSRUNFSVZFX0NPVU5UUklFUyc7XG5jb25zdCBjYWxsRGVsYXkgPSA1MDA7IC8vbWlsaXNlY29uZHNcblxuZXhwb3J0IGNvbnN0IHF1ZXJ5TWVtYmVycyA9IF8uZGVib3VuY2UoYXN5bmMgKGlucHV0LCBjYWxsYmFjaykgPT4ge1xuXG4gICAgY29uc3QgYWNjZXNzVG9rZW4gPSBhd2FpdCBnZXRBY2Nlc3NUb2tlbigpO1xuICAgIGlucHV0ID0gZXNjYXBlRmlsdGVyVmFsdWUoaW5wdXQpO1xuICAgIGxldCBmaWx0ZXJzID0gZW5jb2RlVVJJQ29tcG9uZW50KGBmdWxsX25hbWU9QCR7aW5wdXR9LGZpcnN0X25hbWU9QCR7aW5wdXR9LGxhc3RfbmFtZT1AJHtpbnB1dH0sZW1haWw9QCR7aW5wdXR9YCk7XG4gICAgbGV0IGV4cGFuZCA9IGB0aWNrZXRzLHJzdnAsc2NoZWR1bGVfc3VtbWl0X2V2ZW50cyxhbGxfYWZmaWxpYXRpb25zYFxuXG4gICAgZmV0Y2goYnVpbGRBUElCYXNlVXJsKGAvYXBpL3YxL21lbWJlcnM/ZmlsdGVyPSR7ZmlsdGVyc30mZXhwYW5kPSR7ZXhwYW5kfSZhY2Nlc3NfdG9rZW49JHthY2Nlc3NUb2tlbn1gKSlcbiAgICAgICAgLnRoZW4oZmV0Y2hSZXNwb25zZUhhbmRsZXIpXG4gICAgICAgIC50aGVuKChqc29uKSA9PiB7XG4gICAgICAgICAgICBsZXQgb3B0aW9ucyA9IFsuLi5qc29uLmRhdGFdO1xuXG4gICAgICAgICAgICBjYWxsYmFjayhvcHRpb25zKTtcbiAgICAgICAgfSlcbiAgICAgICAgLmNhdGNoKGZldGNoRXJyb3JIYW5kbGVyKTtcbn0sIGNhbGxEZWxheSk7XG5cbmV4cG9ydCBjb25zdCBxdWVyeVN1bW1pdHMgPSBfLmRlYm91bmNlKGFzeW5jIChpbnB1dCwgY2FsbGJhY2spID0+IHtcblxuICAgIGNvbnN0IGFjY2Vzc1Rva2VuID0gYXdhaXQgZ2V0QWNjZXNzVG9rZW4oKTtcbiAgICBpbnB1dCA9IGVzY2FwZUZpbHRlclZhbHVlKGlucHV0KTtcbiAgICBsZXQgZmlsdGVycyA9IGVuY29kZVVSSUNvbXBvbmVudChgbmFtZT1AJHtpbnB1dH1gKTtcblxuICAgIGZldGNoKGJ1aWxkQVBJQmFzZVVybChgL2FwaS92MS9zdW1taXRzL2FsbD9maWx0ZXI9JHtmaWx0ZXJzfSZhY2Nlc3NfdG9rZW49JHthY2Nlc3NUb2tlbn1gKSlcbiAgICAgICAgLnRoZW4oZmV0Y2hSZXNwb25zZUhhbmRsZXIpXG4gICAgICAgIC50aGVuKChqc29uKSA9PiB7XG4gICAgICAgICAgICBsZXQgb3B0aW9ucyA9IFsuLi5qc29uLmRhdGFdO1xuXG4gICAgICAgICAgICBjYWxsYmFjayhvcHRpb25zKTtcbiAgICAgICAgfSlcbiAgICAgICAgLmNhdGNoKGZldGNoRXJyb3JIYW5kbGVyKTtcbn0sIGNhbGxEZWxheSk7XG5cbmV4cG9ydCBjb25zdCBxdWVyeVNwZWFrZXJzID0gXy5kZWJvdW5jZShhc3luYyAoc3VtbWl0SWQsIGlucHV0LCBjYWxsYmFjaykgPT4ge1xuXG4gICAgY29uc3QgYWNjZXNzVG9rZW4gPSBhd2FpdCBnZXRBY2Nlc3NUb2tlbigpO1xuICAgIGlucHV0ID0gZXNjYXBlRmlsdGVyVmFsdWUoaW5wdXQpO1xuICAgIGxldCBmaWx0ZXJzID0gZW5jb2RlVVJJQ29tcG9uZW50KGBmdWxsX25hbWU9QCR7aW5wdXR9LGZpcnN0X25hbWU9QCR7aW5wdXR9LGxhc3RfbmFtZT1AJHtpbnB1dH0sZW1haWw9QCR7aW5wdXR9YCk7XG4gICAgbGV0IGFwaVVybCA9IGAvYXBpL3YxYDtcblxuICAgIGlmIChzdW1taXRJZCkge1xuICAgICAgICBhcGlVcmwgKz0gYC9zdW1taXRzLyR7c3VtbWl0SWR9YDtcbiAgICB9XG5cbiAgICBhcGlVcmwgKz0gYC9zcGVha2Vycz9maWx0ZXI9JHtmaWx0ZXJzfSZhY2Nlc3NfdG9rZW49JHthY2Nlc3NUb2tlbn0mZXhwYW5kPW1lbWJlcixyZWdpc3RyYXRpb25fcmVxdWVzdGA7XG5cbiAgICBmZXRjaChidWlsZEFQSUJhc2VVcmwoYXBpVXJsKSlcbiAgICAgICAgLnRoZW4oZmV0Y2hSZXNwb25zZUhhbmRsZXIpXG4gICAgICAgIC50aGVuKChqc29uKSA9PiB7XG4gICAgICAgICAgICBsZXQgb3B0aW9ucyA9IFsuLi5qc29uLmRhdGFdO1xuXG4gICAgICAgICAgICBjYWxsYmFjayhvcHRpb25zKTtcbiAgICAgICAgfSlcbiAgICAgICAgLmNhdGNoKGZldGNoRXJyb3JIYW5kbGVyKTtcbn0sIGNhbGxEZWxheSk7XG5cbmV4cG9ydCBjb25zdCBxdWVyeVRhZ3MgPSBfLmRlYm91bmNlKGFzeW5jIChzdW1taXRJZCwgaW5wdXQsIGNhbGxiYWNrKSA9PiB7XG5cbiAgICBjb25zdCBhY2Nlc3NUb2tlbiA9IGF3YWl0IGdldEFjY2Vzc1Rva2VuKCk7XG4gICAgaW5wdXQgPSBlc2NhcGVGaWx0ZXJWYWx1ZShpbnB1dCk7XG4gICAgbGV0IGFwaVVybCA9IGAvYXBpL3YxYDtcbiAgICBsZXQgZmlsdGVyID0gZW5jb2RlVVJJQ29tcG9uZW50KGB0YWc9QCR7aW5wdXR9YCk7XG5cbiAgICBpZiAoc3VtbWl0SWQpIHtcbiAgICAgICAgYXBpVXJsICs9IGAvc3VtbWl0cy8ke3N1bW1pdElkfS90cmFjay10YWctZ3JvdXBzL2FsbC9hbGxvd2VkLXRhZ3M/ZmlsdGVyPSR7ZmlsdGVyfSZleHBhbmQ9dGFnLHRyYWNrX3RhZ19ncm91cGA7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgYXBpVXJsICs9IGAvdGFncz9maWx0ZXI9JHtmaWx0ZXJ9YDtcbiAgICB9XG5cbiAgICBhcGlVcmwgKz0gYCZvcmRlcj10YWcmcGFnZT0xJnBlcl9wYWdlPTUwJmFjY2Vzc190b2tlbj0ke2FjY2Vzc1Rva2VufWA7XG5cbiAgICBmZXRjaChidWlsZEFQSUJhc2VVcmwoYXBpVXJsKSlcbiAgICAgICAgLnRoZW4oZmV0Y2hSZXNwb25zZUhhbmRsZXIpXG4gICAgICAgIC50aGVuKChqc29uKSA9PiB7XG4gICAgICAgICAgICBsZXQgb3B0aW9ucyA9IFsuLi5qc29uLmRhdGFdO1xuXG4gICAgICAgICAgICBpZiAoc3VtbWl0SWQpIHtcbiAgICAgICAgICAgICAgICBvcHRpb25zID0gb3B0aW9ucy5tYXAodCA9PiB0LnRhZyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNhbGxiYWNrKG9wdGlvbnMpO1xuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goZmV0Y2hFcnJvckhhbmRsZXIpO1xufSwgY2FsbERlbGF5KTtcblxuZXhwb3J0IGNvbnN0IHF1ZXJ5VHJhY2tzID0gXy5kZWJvdW5jZShhc3luYyAoc3VtbWl0SWQsIGlucHV0LCBjYWxsYmFjaykgPT4ge1xuXG4gICAgY29uc3QgYWNjZXNzVG9rZW4gPSBhd2FpdCBnZXRBY2Nlc3NUb2tlbigpO1xuICAgIGlucHV0ID0gZXNjYXBlRmlsdGVyVmFsdWUoaW5wdXQpO1xuICAgIGxldCBmaWx0ZXIgPSBlbmNvZGVVUklDb21wb25lbnQoYG5hbWU9QCR7aW5wdXR9YCk7XG5cbiAgICBmZXRjaChidWlsZEFQSUJhc2VVcmwoYC9hcGkvdjEvc3VtbWl0cy8ke3N1bW1pdElkfS90cmFja3M/ZmlsdGVyPSR7ZmlsdGVyfSZvcmRlcj1uYW1lJmFjY2Vzc190b2tlbj0ke2FjY2Vzc1Rva2VufWApKVxuICAgICAgICAudGhlbihmZXRjaFJlc3BvbnNlSGFuZGxlcilcbiAgICAgICAgLnRoZW4oKGpzb24pID0+IHtcbiAgICAgICAgICAgIGxldCBvcHRpb25zID0gWy4uLmpzb24uZGF0YV07XG5cbiAgICAgICAgICAgIGNhbGxiYWNrKG9wdGlvbnMpO1xuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goZmV0Y2hFcnJvckhhbmRsZXIpO1xufSwgY2FsbERlbGF5KTtcblxuZXhwb3J0IGNvbnN0IHF1ZXJ5VHJhY2tHcm91cHMgPSBfLmRlYm91bmNlKGFzeW5jIChzdW1taXRJZCwgaW5wdXQsIGNhbGxiYWNrKSA9PiB7XG5cbiAgICBjb25zdCBhY2Nlc3NUb2tlbiA9IGF3YWl0IGdldEFjY2Vzc1Rva2VuKCk7XG4gICAgaW5wdXQgPSBlc2NhcGVGaWx0ZXJWYWx1ZShpbnB1dCk7XG4gICAgbGV0IGZpbHRlciA9IGlucHV0ID8gZW5jb2RlVVJJQ29tcG9uZW50KGBmaWx0ZXI9bmFtZT1AJHtpbnB1dH1gKSA6ICcnO1xuXG4gICAgZmV0Y2goYnVpbGRBUElCYXNlVXJsKGAvYXBpL3YxL3N1bW1pdHMvJHtzdW1taXRJZH0vdHJhY2stZ3JvdXBzP29yZGVyPW5hbWUmYWNjZXNzX3Rva2VuPSR7YWNjZXNzVG9rZW59JiR7ZmlsdGVyfWApKVxuICAgICAgICAudGhlbihmZXRjaFJlc3BvbnNlSGFuZGxlcilcbiAgICAgICAgLnRoZW4oKGpzb24pID0+IHtcbiAgICAgICAgICAgIGxldCBvcHRpb25zID0gWy4uLmpzb24uZGF0YV07XG5cbiAgICAgICAgICAgIGNhbGxiYWNrKG9wdGlvbnMpO1xuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goZmV0Y2hFcnJvckhhbmRsZXIpO1xufSwgY2FsbERlbGF5KTtcblxuZXhwb3J0IGNvbnN0IHF1ZXJ5RXZlbnRzID0gXy5kZWJvdW5jZShhc3luYyAoc3VtbWl0SWQsIGlucHV0LCBvbmx5UHVibGlzaGVkID0gZmFsc2UsIGNhbGxiYWNrKSA9PiB7XG5cbiAgICBjb25zdCBhY2Nlc3NUb2tlbiA9IGF3YWl0IGdldEFjY2Vzc1Rva2VuKCk7XG4gICAgaW5wdXQgPSBlc2NhcGVGaWx0ZXJWYWx1ZShpbnB1dCk7XG4gICAgbGV0IGJhc2VVcmwgPSBgL2FwaS92MS9zdW1taXRzLyR7c3VtbWl0SWR9L2V2ZW50c2AgKyAob25seVB1Ymxpc2hlZCA/ICcvcHVibGlzaGVkJyA6ICcnKTtcbiAgICBsZXQgZmlsdGVyID0gZW5jb2RlVVJJQ29tcG9uZW50KGB0aXRsZT1AJHtpbnB1dH1gKTtcblxuICAgIGZldGNoKGJ1aWxkQVBJQmFzZVVybChgJHtiYXNlVXJsfT9maWx0ZXI9JHtmaWx0ZXJ9Jm9yZGVyPXRpdGxlJmFjY2Vzc190b2tlbj0ke2FjY2Vzc1Rva2VufWApKVxuICAgICAgICAudGhlbihmZXRjaFJlc3BvbnNlSGFuZGxlcilcbiAgICAgICAgLnRoZW4oKGpzb24pID0+IHtcbiAgICAgICAgICAgIGxldCBvcHRpb25zID0gWy4uLmpzb24uZGF0YV07XG5cbiAgICAgICAgICAgIGNhbGxiYWNrKG9wdGlvbnMpO1xuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goZmV0Y2hFcnJvckhhbmRsZXIpO1xufSwgY2FsbERlbGF5KTtcblxuZXhwb3J0IGNvbnN0IHF1ZXJ5R3JvdXBzID0gXy5kZWJvdW5jZShhc3luYyAoaW5wdXQsIGNhbGxiYWNrKSA9PiB7XG5cbiAgICBjb25zdCBhY2Nlc3NUb2tlbiA9IGF3YWl0IGdldEFjY2Vzc1Rva2VuKCk7XG4gICAgbGV0IGZpbHRlcnMgPSBlbmNvZGVVUklDb21wb25lbnQoYHRpdGxlPUAke2lucHV0fSxjb2RlPUAke2lucHV0fWApO1xuXG4gICAgZmV0Y2goYnVpbGRBUElCYXNlVXJsKGAvYXBpL3YxL2dyb3Vwcz9maWx0ZXI9JHtmaWx0ZXJzfSZhY2Nlc3NfdG9rZW49JHthY2Nlc3NUb2tlbn1gKSlcbiAgICAgICAgLnRoZW4oZmV0Y2hSZXNwb25zZUhhbmRsZXIpXG4gICAgICAgIC50aGVuKChqc29uKSA9PiB7XG4gICAgICAgICAgICBsZXQgb3B0aW9ucyA9IFsuLi5qc29uLmRhdGFdO1xuXG4gICAgICAgICAgICBjYWxsYmFjayhvcHRpb25zKTtcbiAgICAgICAgfSlcbiAgICAgICAgLmNhdGNoKGZldGNoRXJyb3JIYW5kbGVyKTtcbn0sIGNhbGxEZWxheSk7XG5cbmV4cG9ydCBjb25zdCBxdWVyeUNvbXBhbmllcyA9IF8uZGVib3VuY2UoYXN5bmMgKGlucHV0LCBjYWxsYmFjaykgPT4ge1xuXG4gICAgY29uc3QgYWNjZXNzVG9rZW4gPSBhd2FpdCBnZXRBY2Nlc3NUb2tlbigpO1xuICAgIGlucHV0ID0gZXNjYXBlRmlsdGVyVmFsdWUoaW5wdXQpO1xuICAgIGxldCBmaWx0ZXJzID0gZW5jb2RlVVJJQ29tcG9uZW50KGBuYW1lPUAke2lucHV0fWApO1xuXG4gICAgZmV0Y2goYnVpbGRBUElCYXNlVXJsKGAvYXBpL3YxL2NvbXBhbmllcz9maWx0ZXI9JHtmaWx0ZXJzfSZhY2Nlc3NfdG9rZW49JHthY2Nlc3NUb2tlbn1gKSlcbiAgICAgICAgLnRoZW4oZmV0Y2hSZXNwb25zZUhhbmRsZXIpXG4gICAgICAgIC50aGVuKChqc29uKSA9PiB7XG4gICAgICAgICAgICBsZXQgb3B0aW9ucyA9IFsuLi5qc29uLmRhdGFdO1xuXG4gICAgICAgICAgICBjYWxsYmFjayhvcHRpb25zKTtcbiAgICAgICAgfSlcbiAgICAgICAgLmNhdGNoKGZldGNoRXJyb3JIYW5kbGVyKTtcbn0sIGNhbGxEZWxheSk7XG5cbmV4cG9ydCBjb25zdCBxdWVyeVJlZ2lzdHJhdGlvbkNvbXBhbmllcyA9IF8uZGVib3VuY2UoYXN5bmMgKHN1bW1pdElkLCBpbnB1dCwgY2FsbGJhY2spID0+IHtcbiAgICBcbiAgICBsZXQgYWNjZXNzVG9rZW47XG5cbiAgICB0cnkge1xuICAgICAgICBhY2Nlc3NUb2tlbiA9IGF3YWl0IGdldEFjY2Vzc1Rva2VuKCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBjYWxsYmFjayhlKTtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGxldCBhcGlVcmwgPSBVUkkoYC9hcGkvdjEvc3VtbWl0cy8ke3N1bW1pdElkfS9yZWdpc3RyYXRpb24tY29tcGFuaWVzYCk7XG4gICAgYXBpVXJsLmFkZFF1ZXJ5KCdhY2Nlc3NfdG9rZW4nLCBhY2Nlc3NUb2tlbik7XG4gICAgYXBpVXJsLmFkZFF1ZXJ5KCdvcmRlcicsJ25hbWUnKVxuXG4gICAgaWYoaW5wdXQpIHtcbiAgICAgICAgaW5wdXQgPSBlc2NhcGVGaWx0ZXJWYWx1ZShpbnB1dCk7XG4gICAgICAgIGFwaVVybC5hZGRRdWVyeSgnZmlsdGVyW10nLCBgbmFtZT1AJHtpbnB1dH1gKTtcbiAgICB9XG5cbiAgICBmZXRjaChidWlsZEFQSUJhc2VVcmwoYXBpVXJsLnRvU3RyaW5nKCkpKVxuICAgICAgICAudGhlbihmZXRjaFJlc3BvbnNlSGFuZGxlcilcbiAgICAgICAgLnRoZW4oKGpzb24pID0+IHtcbiAgICAgICAgICAgIGxldCBvcHRpb25zID0gWy4uLmpzb24uZGF0YV07XG5cbiAgICAgICAgICAgIGNhbGxiYWNrKG9wdGlvbnMpO1xuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goZmV0Y2hFcnJvckhhbmRsZXIpO1xufSwgY2FsbERlbGF5KTtcblxuZXhwb3J0IGNvbnN0IHF1ZXJ5U3BvbnNvcnMgPSBfLmRlYm91bmNlKGFzeW5jIChzdW1taXRJZCwgaW5wdXQsIGNhbGxiYWNrKSA9PiB7XG5cbiAgICBjb25zdCBhY2Nlc3NUb2tlbiA9IGF3YWl0IGdldEFjY2Vzc1Rva2VuKCk7XG4gICAgaW5wdXQgPSBlc2NhcGVGaWx0ZXJWYWx1ZShpbnB1dCk7XG4gICAgbGV0IGZpbHRlcnMgPSBlbmNvZGVVUklDb21wb25lbnQoYGNvbXBhbnlfbmFtZT1AJHtpbnB1dH1gKTtcblxuICAgIGZldGNoKGJ1aWxkQVBJQmFzZVVybChgL2FwaS92MS9zdW1taXRzLyR7c3VtbWl0SWR9L3Nwb25zb3JzP2ZpbHRlcj0ke2ZpbHRlcnN9JmV4cGFuZD1jb21wYW55LHNwb25zb3JzaGlwJmFjY2Vzc190b2tlbj0ke2FjY2Vzc1Rva2VufWApKVxuICAgICAgICAudGhlbihmZXRjaFJlc3BvbnNlSGFuZGxlcilcbiAgICAgICAgLnRoZW4oKGpzb24pID0+IHtcbiAgICAgICAgICAgIGxldCBvcHRpb25zID0gWy4uLmpzb24uZGF0YV07XG5cbiAgICAgICAgICAgIGNhbGxiYWNrKG9wdGlvbnMpO1xuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goZmV0Y2hFcnJvckhhbmRsZXIpO1xufSwgY2FsbERlbGF5KTtcblxuZXhwb3J0IGNvbnN0IHF1ZXJ5QWNjZXNzTGV2ZWxzID0gXy5kZWJvdW5jZSgoc3VtbWl0SWQsIGlucHV0LCBjYWxsYmFjaykgPT4ge1xuXG4gICAgbGV0IGFjY2Vzc1Rva2VuID0gZ2V0QWNjZXNzVG9rZW4oKTtcbiAgICBpbnB1dCA9IGVzY2FwZUZpbHRlclZhbHVlKGlucHV0KTtcbiAgICBsZXQgZmlsdGVycyA9IGVuY29kZVVSSUNvbXBvbmVudChgbmFtZT1AJHtpbnB1dH1gKTtcblxuICAgIGZldGNoKGJ1aWxkQVBJQmFzZVVybChgL2FwaS92MS9zdW1taXRzLyR7c3VtbWl0SWR9L2FjY2Vzcy1sZXZlbC10eXBlcz9maWx0ZXI9JHtmaWx0ZXJzfSYmYWNjZXNzX3Rva2VuPSR7YWNjZXNzVG9rZW59YCkpXG4gICAgICAgIC50aGVuKGZldGNoUmVzcG9uc2VIYW5kbGVyKVxuICAgICAgICAudGhlbigoanNvbikgPT4ge1xuICAgICAgICAgICAgbGV0IG9wdGlvbnMgPSBbLi4uanNvbi5kYXRhXTtcblxuICAgICAgICAgICAgY2FsbGJhY2sob3B0aW9ucyk7XG4gICAgICAgIH0pXG4gICAgICAgIC5jYXRjaChmZXRjaEVycm9ySGFuZGxlcik7XG59LCBjYWxsRGVsYXkpO1xuXG5leHBvcnQgY29uc3QgcXVlcnlPcmdhbml6YXRpb25zID0gXy5kZWJvdW5jZShhc3luYyAoaW5wdXQsIGNhbGxiYWNrKSA9PiB7XG5cbiAgICBjb25zdCBhY2Nlc3NUb2tlbiA9IGF3YWl0IGdldEFjY2Vzc1Rva2VuKCk7XG4gICAgaW5wdXQgPSBlc2NhcGVGaWx0ZXJWYWx1ZShpbnB1dCk7XG4gICAgbGV0IGZpbHRlcnMgPSBlbmNvZGVVUklDb21wb25lbnQoYG5hbWU9QCR7aW5wdXR9YCk7XG5cbiAgICBmZXRjaChidWlsZEFQSUJhc2VVcmwoYC9hcGkvdjEvb3JnYW5pemF0aW9ucz9maWx0ZXI9JHtmaWx0ZXJzfSZhY2Nlc3NfdG9rZW49JHthY2Nlc3NUb2tlbn1gKSlcbiAgICAgICAgLnRoZW4oZmV0Y2hSZXNwb25zZUhhbmRsZXIpXG4gICAgICAgIC50aGVuKChqc29uKSA9PiB7XG4gICAgICAgICAgICBsZXQgb3B0aW9ucyA9IFsuLi5qc29uLmRhdGFdO1xuXG4gICAgICAgICAgICBjYWxsYmFjayhvcHRpb25zKTtcbiAgICAgICAgfSlcbiAgICAgICAgLmNhdGNoKGZldGNoRXJyb3JIYW5kbGVyKTtcbn0sIGNhbGxEZWxheSk7XG5cbmV4cG9ydCBjb25zdCBnZXRMYW5ndWFnZUxpc3QgPSAoY2FsbGJhY2ssIHNpZ25hbCkgPT4ge1xuICAgIHJldHVybiBmZXRjaChidWlsZEFQSUJhc2VVcmwoYC9hcGkvcHVibGljL3YxL2xhbmd1YWdlc2ApLCB7c2lnbmFsfSlcbiAgICAgICAgLnRoZW4oZmV0Y2hSZXNwb25zZUhhbmRsZXIpXG4gICAgICAgIC50aGVuKChyZXNwb25zZSkgPT4ge1xuICAgICAgICAgICAgY2FsbGJhY2socmVzcG9uc2UuZGF0YSk7XG4gICAgICAgIH0pXG4gICAgICAgIC5jYXRjaChmZXRjaEVycm9ySGFuZGxlcik7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0Q291bnRyeUxpc3QgPSAoY2FsbGJhY2ssIHNpZ25hbCkgPT4ge1xuXG4gICAgcmV0dXJuIGZldGNoKGJ1aWxkQVBJQmFzZVVybChgL2FwaS9wdWJsaWMvdjEvY291bnRyaWVzYCksIHtzaWduYWx9KVxuICAgICAgICAudGhlbihmZXRjaFJlc3BvbnNlSGFuZGxlcilcbiAgICAgICAgLnRoZW4oKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgICBjYWxsYmFjayhyZXNwb25zZS5kYXRhKTtcbiAgICAgICAgfSlcbiAgICAgICAgLmNhdGNoKGZldGNoRXJyb3JIYW5kbGVyKTtcbn07XG5cbnZhciBnZW9jb2RlcjtcblxuZXhwb3J0IGNvbnN0IGdlb0NvZGVBZGRyZXNzID0gKGFkZHJlc3MpID0+IHtcblxuICAgIGlmICghZ2VvY29kZXIpIGdlb2NvZGVyID0gbmV3IGdvb2dsZS5tYXBzLkdlb2NvZGVyKCk7XG5cbiAgICAvLyByZXR1cm4gYSBQcm9taXNlXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUscmVqZWN0KSB7XG4gICAgICAgIGdlb2NvZGVyLmdlb2NvZGUoIHsgJ2FkZHJlc3MnOiBhZGRyZXNzfSwgZnVuY3Rpb24ocmVzdWx0cywgc3RhdHVzKSB7XG4gICAgICAgICAgICBpZiAoc3RhdHVzID09IGdvb2dsZS5tYXBzLkdlb2NvZGVyU3RhdHVzLk9LKSB7XG4gICAgICAgICAgICAgICAgLy8gcmVzb2x2ZSByZXN1bHRzIHVwb24gYSBzdWNjZXNzZnVsIHN0YXR1c1xuICAgICAgICAgICAgICAgIHJlc29sdmUocmVzdWx0cyk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIHJlamVjdCBzdGF0dXMgdXBvbiB1bi1zdWNjZXNzZnVsIHN0YXR1c1xuICAgICAgICAgICAgICAgIHJlamVjdChzdGF0dXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZW9Db2RlTGF0TG5nID0gKGxhdCwgbG5nKSA9PiB7XG5cbiAgICBpZiAoIWdlb2NvZGVyKSBnZW9jb2RlciA9IG5ldyBnb29nbGUubWFwcy5HZW9jb2RlcigpO1xuXG4gICAgdmFyIGxhdGxuZyA9IHtsYXQ6IHBhcnNlRmxvYXQobGF0KSwgbG5nOiBwYXJzZUZsb2F0KGxuZyl9O1xuICAgIC8vIHJldHVybiBhIFByb21pc2VcbiAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSxyZWplY3QpIHtcbiAgICAgICAgZ2VvY29kZXIuZ2VvY29kZSggeyAnbG9jYXRpb24nOiBsYXRsbmd9LCBmdW5jdGlvbihyZXN1bHRzLCBzdGF0dXMpIHtcbiAgICAgICAgICAgIGlmIChzdGF0dXMgPT0gZ29vZ2xlLm1hcHMuR2VvY29kZXJTdGF0dXMuT0spIHtcbiAgICAgICAgICAgICAgICAvLyByZXNvbHZlIHJlc3VsdHMgdXBvbiBhIHN1Y2Nlc3NmdWwgc3RhdHVzXG4gICAgICAgICAgICAgICAgcmVzb2x2ZShyZXN1bHRzKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gcmVqZWN0IHN0YXR1cyB1cG9uIHVuLXN1Y2Nlc3NmdWwgc3RhdHVzXG4gICAgICAgICAgICAgICAgcmVqZWN0KHN0YXR1cyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IHF1ZXJ5VGlja2V0VHlwZXMgPSBfLmRlYm91bmNlKChzdW1taXRJZCwgaW5wdXQsIGNhbGxiYWNrKSA9PiB7XG5cbiAgICBsZXQgYWNjZXNzVG9rZW4gPSBnZXRBY2Nlc3NUb2tlbigpO1xuICAgIGlucHV0ID0gZXNjYXBlRmlsdGVyVmFsdWUoaW5wdXQpO1xuICAgIGxldCBmaWx0ZXJzID0gZW5jb2RlVVJJQ29tcG9uZW50KGBuYW1lPUAke2lucHV0fWApO1xuXG4gICAgZmV0Y2goYnVpbGRBUElCYXNlVXJsKGAvYXBpL3YxL3N1bW1pdHMvJHtzdW1taXRJZH0vdGlja2V0LXR5cGVzP2ZpbHRlcj0ke2ZpbHRlcnN9JiZhY2Nlc3NfdG9rZW49JHthY2Nlc3NUb2tlbn1gKSlcbiAgICAgICAgLnRoZW4oZmV0Y2hSZXNwb25zZUhhbmRsZXIpXG4gICAgICAgIC50aGVuKChqc29uKSA9PiB7XG4gICAgICAgICAgICBsZXQgb3B0aW9ucyA9IFsuLi5qc29uLmRhdGFdO1xuXG4gICAgICAgICAgICBjYWxsYmFjayhvcHRpb25zKTtcbiAgICAgICAgfSlcbiAgICAgICAgLmNhdGNoKGZldGNoRXJyb3JIYW5kbGVyKTtcbn0sIGNhbGxEZWxheSk7XG5cblxuIiwiZXhwb3J0IGNvbnN0IENoZWNrQm94UXVlc3Rpb25UeXBlID0gJ0NoZWNrQm94JztcbmV4cG9ydCBjb25zdCBDb21ib0JveFF1ZXN0aW9uVHlwZSA9ICdDb21ib0JveCdcbmV4cG9ydCBjb25zdCBDaGVja0JveExpc3RRdWVzdGlvblR5cGUgPSAnQ2hlY2tCb3hMaXN0JztcbmV4cG9ydCBjb25zdCBSYWRpb0J1dHRvbkxpc3RRdWVzdGlvblR5cGUgPSAnUmFkaW9CdXR0b25MaXN0JztcbmV4cG9ydCBjb25zdCBBbGxvd2VkTXVsdGlwbGVWYWx1ZVF1ZXN0aW9uVHlwZSA9IFtDb21ib0JveFF1ZXN0aW9uVHlwZSwgQ2hlY2tCb3hMaXN0UXVlc3Rpb25UeXBlLCBSYWRpb0J1dHRvbkxpc3RRdWVzdGlvblR5cGVdO1xuZXhwb3J0IGNvbnN0IEFuc3dlclZhbHVlc09wZXJhdG9yX0FuZCA9ICdBbmQnO1xuZXhwb3J0IGNvbnN0IEFuc3dlclZhbHVlc09wZXJhdG9yX09yID0gJ09yJztcbmV4cG9ydCBjb25zdCBWaXNpYmlsaXR5Q29uZGl0aW9uX0VxdWFsID0gJ0VxdWFsJztcbmV4cG9ydCBjb25zdCBWaXNpYmlsaXR5Q29uZGl0aW9uX05vdEVxdWFsID0gJ05vdEVxdWFsJztcbmV4cG9ydCBjb25zdCBWaXNpYmlsaXR5X1Zpc2libGUgPSAnVmlzaWJsZSc7XG5leHBvcnQgY29uc3QgTWFpblF1ZXN0aW9uQ2xhc3NUeXBlID0gJ01haW5RdWVzdGlvbic7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFF1ZXN0aW9uc1NldCB7XG5cbiAgICBjb25zdHJ1Y3RvcihxdWVzdGlvbnMsIGFuc3dlcnMgPSBbXSkge1xuICAgICAgICB0aGlzLnF1ZXN0aW9ucyA9IHF1ZXN0aW9ucztcbiAgICAgICAgdGhpcy5vcmlnaW5hbEFuc3dlcnMgPSBhbnN3ZXJzXG4gICAgICAgIHRoaXMuYW5zd2VycyA9IFtdO1xuICAgICAgICAvLyBtYXAgYW5zd2VycyB0byBhc3NvY2lhdGUgYXJyYXlcbiAgICAgICAgZm9yIChsZXQgYSBvZiB0aGlzLm9yaWdpbmFsQW5zd2VycylcbiAgICAgICAgICAgIHRoaXMuYW5zd2Vyc1thLnF1ZXN0aW9uX2lkXSA9IGE7XG4gICAgICAgIHRoaXMucXVlc3Rpb25CeU5hbWUgPSB7fVxuICAgICAgICB0aGlzLnF1ZXN0aW9uQnlJZCA9IHt9XG4gICAgICAgIC8vIGFzc29jaWF0aXZlIGFycmF5ICggcnVsZSBpZCAsIHJ1bGUpO1xuICAgICAgICB0aGlzLnJ1bGVzID0ge307XG4gICAgICAgIHRoaXMuX3BhcnNlUXVlc3Rpb25zKCk7XG4gICAgfVxuXG4gICAgX3BhcnNlUXVlc3Rpb24gPSAocSkgPT4ge1xuICAgICAgICB0aGlzLnF1ZXN0aW9uQnlOYW1lW3EubmFtZV0gPSBxO1xuICAgICAgICB0aGlzLnF1ZXN0aW9uQnlJZFtwYXJzZUludChxLmlkKV0gPSBxO1xuICAgICAgICBpZihxLmhhc093blByb3BlcnR5KCdzdWJfcXVlc3Rpb25fcnVsZXMnKSlcbiAgICAgICAgICAgIGZvciAobGV0IHIgb2YgcS5zdWJfcXVlc3Rpb25fcnVsZXMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJ1bGVzW3BhcnNlSW50KHIuaWQpXSA9IHI7XG4gICAgICAgICAgICAgICAgdGhpcy5fcGFyc2VRdWVzdGlvbihyLnN1Yl9xdWVzdGlvbik7XG4gICAgICAgICAgICB9XG4gICAgfVxuXG4gICAgX3BhcnNlUXVlc3Rpb25zID0gKCkgPT4ge1xuICAgICAgICBmb3IgKGxldCBxIG9mIHRoaXMucXVlc3Rpb25zKSB7XG4gICAgICAgICAgICB0aGlzLl9wYXJzZVF1ZXN0aW9uKHEpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgX2FsbG93c1ZhbHVlcyA9IChxKSA9PiB7XG4gICAgICAgIHJldHVybiBBbGxvd2VkTXVsdGlwbGVWYWx1ZVF1ZXN0aW9uVHlwZS5pbmNsdWRlcyhxLnR5cGUpO1xuICAgIH1cblxuICAgIF9hbGxvd3NWYWx1ZSA9IChxLCBhbnN3ZXIpID0+IHtcbiAgICAgICAgbGV0IHZhbHVlID0gYW5zd2VyLnZhbHVlLnNwbGl0KCcsJykubWFwKHYgPT4gcGFyc2VJbnQodikpO1xuICAgICAgICBmb3IgKGxldCBhdiBvZiB2YWx1ZSkge1xuICAgICAgICAgICAgaWYgKCFxLnZhbHVlcy5tYXAoZSA9PiBlLmlkKS5pbmNsdWRlcyhhdikpXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIF9nZXRBbnN3ZXJGb3IgPSAocSkgPT4ge1xuICAgICAgICBsZXQgaWQgPSBOdW1iZXIuaXNJbnRlZ2VyKHEpID8gcSA6IHEuaWQ7XG4gICAgICAgIGxldCBhID0gdGhpcy5hbnN3ZXJzW2lkXSB8fCBudWxsO1xuICAgICAgICByZXR1cm4gYSA/IGEgOiBudWxsO1xuICAgIH1cblxuICAgIF9oYXNWYWx1ZSA9IChhbnN3ZXIpID0+IHtcbiAgICAgICAgcmV0dXJuIGFuc3dlci52YWx1ZSAhPT0gJyc7XG4gICAgfVxuXG4gICAgX2Fuc3dlckNvbnRhaW5zID0gKGFuc3dlciwgdmFsKSA9PiB7XG4gICAgICAgIHJldHVybiBhbnN3ZXIudmFsdWUuc3BsaXQoJywnKS5pbmNsdWRlcyh2YWwpO1xuICAgIH1cblxuICAgIF9pc1N1YlF1ZXN0aW9uVmlzaWJsZSA9IChydWxlKSA9PiB7XG4gICAgICAgIGxldCBpbml0aWFsQ29uZGl0aW9uID0gcnVsZS5hbnN3ZXJfdmFsdWVzX29wZXJhdG9yID09PSBBbnN3ZXJWYWx1ZXNPcGVyYXRvcl9BbmQgPyB0cnVlIDogZmFsc2U7XG4gICAgICAgIGNvbnN0IHBhcmVudFF1ZXN0aW9uQW5zd2VyID0gdGhpcy5fZ2V0QW5zd2VyRm9yKHJ1bGUucGFyZW50X3F1ZXN0aW9uX2lkKTtcbiAgICAgICAgaWYgKCFwYXJlbnRRdWVzdGlvbkFuc3dlcikge1xuICAgICAgICAgICAgaW5pdGlhbENvbmRpdGlvbiA9IHJ1bGUudmlzaWJpbGl0eV9jb25kaXRpb24gPT09IFZpc2liaWxpdHlDb25kaXRpb25fRXF1YWwgPyBmYWxzZSA6IHRydWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzd2l0Y2ggKHJ1bGUudmlzaWJpbGl0eV9jb25kaXRpb24pIHtcbiAgICAgICAgICAgICAgICBjYXNlIFZpc2liaWxpdHlDb25kaXRpb25fRXF1YWw6IHtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgYW5zd2VyVmFsdWUgb2YgcnVsZS5hbnN3ZXJfdmFsdWVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocnVsZS5hbnN3ZXJfdmFsdWVzX29wZXJhdG9yID09PSBBbnN3ZXJWYWx1ZXNPcGVyYXRvcl9BbmQpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5pdGlhbENvbmRpdGlvbiA9IGluaXRpYWxDb25kaXRpb24gJiYgdGhpcy5fYW5zd2VyQ29udGFpbnMocGFyZW50UXVlc3Rpb25BbnN3ZXIsIGFuc3dlclZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbml0aWFsQ29uZGl0aW9uID0gaW5pdGlhbENvbmRpdGlvbiB8fCB0aGlzLl9hbnN3ZXJDb250YWlucyhwYXJlbnRRdWVzdGlvbkFuc3dlciwgYW5zd2VyVmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFZpc2liaWxpdHlDb25kaXRpb25fTm90RXF1YWw6IHtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgYW5zd2VyVmFsdWUgb2YgcnVsZS5hbnN3ZXJfdmFsdWVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocnVsZS5hbnN3ZXJfdmFsdWVzX29wZXJhdG9yID09PSBBbnN3ZXJWYWx1ZXNPcGVyYXRvcl9BbmQpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5pdGlhbENvbmRpdGlvbiA9IGluaXRpYWxDb25kaXRpb24gJiYgIXRoaXMuX2Fuc3dlckNvbnRhaW5zKHBhcmVudFF1ZXN0aW9uQW5zd2VyLCBhbnN3ZXJWYWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5pdGlhbENvbmRpdGlvbiA9IGluaXRpYWxDb25kaXRpb24gfHwgIXRoaXMuX2Fuc3dlckNvbnRhaW5zKHBhcmVudFF1ZXN0aW9uQW5zd2VyLCBhbnN3ZXJWYWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIGZpbmFsIHZpc2liaWxpdHkgY2hlY2tcbiAgICAgICAgaWYgKHJ1bGUudmlzaWJpbGl0eSA9PT0gVmlzaWJpbGl0eV9WaXNpYmxlKSB7XG4gICAgICAgICAgICByZXR1cm4gaW5pdGlhbENvbmRpdGlvbjtcbiAgICAgICAgfVxuICAgICAgICAvLyBub3QgdmlzaWJsZVxuICAgICAgICByZXR1cm4gIWluaXRpYWxDb25kaXRpb247XG4gICAgfVxuXG4gICAgX2lzQW5zd2VyZWQgPSAocSkgPT4ge1xuICAgICAgICBjb25zdCBhbnN3ZXIgPSB0aGlzLl9nZXRBbnN3ZXJGb3IocSk7XG5cbiAgICAgICAgaWYgKHEuY2xhc3MgPT09IE1haW5RdWVzdGlvbkNsYXNzVHlwZSkge1xuICAgICAgICAgICAgaWYgKCFxLm1hbmRhdG9yeSkgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICBpZiAoIWFuc3dlcikgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgaWYgKCF0aGlzLl9oYXNWYWx1ZShhbnN3ZXIpKSByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICBpZiAodGhpcy5fYWxsb3dzVmFsdWVzKHEpICYmICF0aGlzLl9hbGxvd3NWYWx1ZShxLCBhbnN3ZXIpKVxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gY2hlY2sgcGFyZW50IHJ1bGVzIC4uLlxuICAgICAgICBmb3IgKGxldCBydWxlSWQgb2YgcS5wYXJlbnRfcnVsZXMpIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5faXNTdWJRdWVzdGlvblZpc2libGUodGhpcy5ydWxlc1tydWxlSWRdKSkgLy8gaWYgcXVlc3Rpb24gaXMgbm90IHZpc2libGUgc2tpcCBpdFxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgaWYgKCFxLm1hbmRhdG9yeSkgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICBpZiAoIWFuc3dlcikgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgaWYgKCF0aGlzLl9oYXNWYWx1ZShhbnN3ZXIpKSByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICBpZiAodGhpcy5fYWxsb3dzVmFsdWVzKHEpICYmICF0aGlzLl9hbGxvd3NWYWx1ZShxLCBhbnN3ZXIpKVxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgX2NoZWNrUXVlc3Rpb24gPSAocSkgPT4ge1xuICAgICAgICBsZXQgcmVzID0gdGhpcy5faXNBbnN3ZXJlZChxKTtcbiAgICAgICAgaWYocS5oYXNPd25Qcm9wZXJ0eSgnc3ViX3F1ZXN0aW9uX3J1bGVzJykpXG4gICAgICAgICAgICBmb3IgKGxldCBydWxlIG9mIHEuc3ViX3F1ZXN0aW9uX3J1bGVzKSB7XG4gICAgICAgICAgICAgICAgLy8gY2hlY2sgcmVjdXJzaXZlIGFsbCB0aGUgdHJlZSB0aWxsIGxlYXZlcyAuLi5cbiAgICAgICAgICAgICAgICByZXMgPSByZXMgJiYgdGhpcy5fY2hlY2tRdWVzdGlvbihydWxlLnN1Yl9xdWVzdGlvbik7XG4gICAgICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxuXG4gICAgX2Zvcm1hdFF1ZXN0aW9uQW5zd2VyID0gKHF1ZXN0aW9uKSA9PiB7XG4gICAgICAgIGxldCByZXMgPSB7fTtcbiAgICAgICAgbGV0IHVzZXJBbnN3ZXIgPSB0aGlzLm9yaWdpbmFsQW5zd2Vycy5maW5kKGEgPT4gYS5xdWVzdGlvbl9pZCA9PT0gcXVlc3Rpb24uaWQpPy52YWx1ZTtcblxuICAgICAgICBpZih1c2VyQW5zd2VyKSB7XG4gICAgICAgICAgICBpZiAocXVlc3Rpb24udHlwZSA9PT0gQ2hlY2tCb3hRdWVzdGlvblR5cGUpIHVzZXJBbnN3ZXIgPSB1c2VyQW5zd2VyID09PSAnZmFsc2UnID8gZmFsc2UgOiAhIXVzZXJBbnN3ZXI7XG4gICAgICAgICAgICBpZiAocXVlc3Rpb24udHlwZSA9PT0gUmFkaW9CdXR0b25MaXN0UXVlc3Rpb25UeXBlIHx8IHF1ZXN0aW9uLnR5cGUgPT09IENvbWJvQm94UXVlc3Rpb25UeXBlKSB1c2VyQW5zd2VyID0gcGFyc2VJbnQodXNlckFuc3dlcik7XG4gICAgICAgICAgICBpZiAocXVlc3Rpb24udHlwZSA9PT0gQ2hlY2tCb3hMaXN0UXVlc3Rpb25UeXBlKSB1c2VyQW5zd2VyID0gdXNlckFuc3dlci5zcGxpdCgnLCcpLm1hcChhbnNWYWwgPT4gcGFyc2VJbnQoYW5zVmFsKSkgfHwgW107XG4gICAgICAgIH1cblxuICAgICAgICByZXNbcXVlc3Rpb24ubmFtZV0gPSAgdXNlckFuc3dlciB8fCAnJztcbiAgICAgICAgaWYocXVlc3Rpb24uaGFzT3duUHJvcGVydHkoJ3N1Yl9xdWVzdGlvbl9ydWxlcycpKVxuICAgICAgICAgICAgZm9yIChsZXQgcnVsZSBvZiBxdWVzdGlvbi5zdWJfcXVlc3Rpb25fcnVsZXMpIHtcbiAgICAgICAgICAgICAgICAvLyBjaGVjayByZWN1cnNpdmUgYWxsIHRoZSB0cmVlIHRpbGwgbGVhdmVzIC4uLlxuICAgICAgICAgICAgICAgIGxldCByZXMxID0gdGhpcy5fZm9ybWF0UXVlc3Rpb25BbnN3ZXIocnVsZS5zdWJfcXVlc3Rpb24pO1xuICAgICAgICAgICAgICAgIHJlcyA9IHsuLi5yZXMsIC4uLnJlczF9O1xuICAgICAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH1cblxuICAgIGZvcm1hdEFuc3dlcnMgPSAoKSA9PiB7XG4gICAgICAgIGxldCByZXMgPSB7fVxuICAgICAgICB0aGlzLnF1ZXN0aW9ucy5mb3JFYWNoKHEgPT4ge1xuICAgICAgICAgICAgbGV0IHJlczEgPSB0aGlzLl9mb3JtYXRRdWVzdGlvbkFuc3dlcihxKTtcbiAgICAgICAgICAgIHJlcyA9IHsuLi5yZXMsLi4ucmVzMX07XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH1cblxuICAgIGNvbXBsZXRlZCA9ICgpID0+IHtcbiAgICAgICAgbGV0IHJlcyA9IHRydWU7XG4gICAgICAgIGZvciAobGV0IHEgb2YgdGhpcy5xdWVzdGlvbnMpIHtcbiAgICAgICAgICAgIHJlcyA9IHJlcyAmJiB0aGlzLl9jaGVja1F1ZXN0aW9uKHEpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxuXG4gICAgZ2V0UXVlc3Rpb25CeU5hbWUgPSAobmFtZSkgPT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5xdWVzdGlvbkJ5TmFtZVtuYW1lXSB8fCBudWxsO1xuICAgIH1cblxuICAgIGdldFF1ZXN0aW9uQnlJZCA9IChpZCkgPT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5xdWVzdGlvbkJ5SWRbcGFyc2VJbnQoaWQpXSB8fCBudWxsO1xuICAgIH1cbn0iLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJhd2Vzb21lLWJvb3RzdHJhcC1jaGVja2JveC9hd2Vzb21lLWJvb3RzdHJhcC1jaGVja2JveC5jc3NcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiYnJvd3Nlci10YWJzLWxvY2tcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY3J5cHRvXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImRyb3B6b25lXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImRyb3B6b25lL2Rpc3QvZHJvcHpvbmUuY3NzXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImV4dGVuZFwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJpMThuLXJlYWN0XCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImkxOG4tcmVhY3QvZGlzdC9pMThuLXJlYWN0XCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImlkdG9rZW4tdmVyaWZpZXJcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiaW1tdXRhYmlsaXR5LWhlbHBlclwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJsb2Rhc2hcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwibW9tZW50LXRpbWV6b25lXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcInByb3AtdHlwZXNcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwicmVhY3RcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwicmVhY3QtZGF0ZXRpbWVcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwicmVhY3QtZG5kXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcInJlYWN0LWRuZC1odG1sNS1iYWNrZW5kXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcInJlYWN0LWRvbVwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJyZWFjdC1kcm9wem9uZVwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJyZWFjdC1maW5hbC1mb3JtXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcInJlYWN0LWdvb2dsZS1tYXBzXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcInJlYWN0LWdvb2dsZS1tYXBzL2xpYi9jb21wb25lbnRzL2FkZG9ucy9NYXJrZXJDbHVzdGVyZXJcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwicmVhY3QtcmVkdXhcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwicmVhY3QtcnRlXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcInJlYWN0LXNlbGVjdFwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJyZWFjdC1zZWxlY3QvbGliL0FzeW5jXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcInJlYWN0LXNlbGVjdC9saWIvQXN5bmNDcmVhdGFibGVcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwicmVhY3Qtc2VsZWN0L2xpYi9DcmVhdGFibGVcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwicmVhY3Qtc2VsZWN0L2xpYi9jb21wb25lbnRzXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcInJlYWN0LXRvb2x0aXBcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwic3VwZXJhZ2VudFwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJzd2VldGFsZXJ0MlwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJ1cmlqc1wiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJ2aWRlby5qc1wiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJ2aWRlby5qcy9kaXN0L3ZpZGVvLWpzLmNzc1wiKTsiXSwic291cmNlUm9vdCI6IiJ9
|
|
11144
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vd2VicGFjay91bml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi93ZWJwYWNrL2Jvb3RzdHJhcCIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vLi9zcmMvY29tcG9uZW50cy5qcyIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vLi9zcmMvY29tcG9uZW50cy9hamF4bG9hZGVyL2luZGV4LmpzIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi8uL3NyYy9jb21wb25lbnRzL2F0dGVuZGFuY2UtdHJhY2tlci5qcyIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vLi9zcmMvY29tcG9uZW50cy9jaXJjbGUtYnV0dG9uL2luZGV4LmpzIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi8uL3NyYy9jb21wb25lbnRzL2NpcmNsZS1idXR0b24vaW5kZXgubW9kdWxlLnNjc3M/NGMyNiIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vLi9zcmMvY29tcG9uZW50cy9jbG9jay5qcyIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vLi9zcmMvY29tcG9uZW50cy9leGNsdXNpdmUtd3JhcHBlci5qcyIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vLi9zcmMvY29tcG9uZW50cy9leHRyYS1xdWVzdGlvbnMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uLy4vc3JjL2NvbXBvbmVudHMvZm9ybXMvcnN2cC1mb3JtLmpzIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi8uL3NyYy9jb21wb25lbnRzL2Zvcm1zL3NpbXBsZS1mb3JtLmpzIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi8uL3NyYy9jb21wb25lbnRzL2ZyYWdtZW4tcGFyc2VyLmpzIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi8uL3NyYy9jb21wb25lbnRzL2ZyZWUtdGV4dC1zZWFyY2gvaW5kZXguanMiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uLy4vc3JjL2NvbXBvbmVudHMvZ29vZ2xlLW1hcC9pbmRleC5qcyIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vLi9zcmMvY29tcG9uZW50cy9pbnB1dHMvYWNjZXNzLWxldmVscy1pbnB1dC5qcyIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vLi9zcmMvY29tcG9uZW50cy9pbnB1dHMvYWN0aW9uLWRyb3Bkb3duL2FjdGlvbi1kcm9wZG93bi5sZXNzP2Q3NDMiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uLy4vc3JjL2NvbXBvbmVudHMvaW5wdXRzL2FjdGlvbi1kcm9wZG93bi9pbmRleC5qcyIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vLi9zcmMvY29tcG9uZW50cy9pbnB1dHMvY2hlY2tib3gtbGlzdC5qcyIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vLi9zcmMvY29tcG9uZW50cy9pbnB1dHMvY29tcGFueS1pbnB1dC5qcyIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vLi9zcmMvY29tcG9uZW50cy9pbnB1dHMvY291bnRyeS1kcm9wZG93bi5qcyIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vLi9zcmMvY29tcG9uZW50cy9pbnB1dHMvY291bnRyeS1pbnB1dC5qcyIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vLi9zcmMvY29tcG9uZW50cy9pbnB1dHMvZGF0ZXRpbWVwaWNrZXIvZGF0ZXRpbWVwaWNrZXIubGVzcz84Y2Q1Iiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi8uL3NyYy9jb21wb25lbnRzL2lucHV0cy9kYXRldGltZXBpY2tlci9pbmRleC5qcyIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vLi9zcmMvY29tcG9uZW50cy9pbnB1dHMvZHJvcGRvd24uanMiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uLy4vc3JjL2NvbXBvbmVudHMvaW5wdXRzL2VkaXRvci1pbnB1dC5qcyIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vLi9zcmMvY29tcG9uZW50cy9pbnB1dHMvZXZlbnQtaW5wdXQuanMiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uLy4vc3JjL2NvbXBvbmVudHMvaW5wdXRzL2ZyZWUtbXVsdGktdGV4dC1pbnB1dC5qcyIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vLi9zcmMvY29tcG9uZW50cy9pbnB1dHMvZ3JvdXAtaW5wdXQuanMiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uLy4vc3JjL2NvbXBvbmVudHMvaW5wdXRzL2dyb3VwZWQtZHJvcGRvd24vT3B0aW9uR3JvdXAuanMiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uLy4vc3JjL2NvbXBvbmVudHMvaW5wdXRzL2dyb3VwZWQtZHJvcGRvd24vaW5kZXguanMiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uLy4vc3JjL2NvbXBvbmVudHMvaW5wdXRzL2dyb3VwZWQtZHJvcGRvd24vb3B0aW9uZ3JvdXAubGVzcz9hNDAxIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi8uL3NyYy9jb21wb25lbnRzL2lucHV0cy9sYW5ndWFnZS1pbnB1dC5qcyIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vLi9zcmMvY29tcG9uZW50cy9pbnB1dHMvbWVtYmVyLWlucHV0LmpzIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi8uL3NyYy9jb21wb25lbnRzL2lucHV0cy9vcmdhbml6YXRpb24taW5wdXQuanMiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uLy4vc3JjL2NvbXBvbmVudHMvaW5wdXRzL3JhZGlvLWxpc3QuanMiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uLy4vc3JjL2NvbXBvbmVudHMvaW5wdXRzL3JlZ2lzdHJhdGlvbi1jb21wYW55LWlucHV0LmpzIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi8uL3NyYy9jb21wb25lbnRzL2lucHV0cy9zcGVha2VyLWlucHV0LmpzIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi8uL3NyYy9jb21wb25lbnRzL2lucHV0cy9zcG9uc29yLWlucHV0LmpzIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi8uL3NyYy9jb21wb25lbnRzL2lucHV0cy9zdW1taXQtaW5wdXQuanMiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uLy4vc3JjL2NvbXBvbmVudHMvaW5wdXRzL3RhZy1pbnB1dC5qcyIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vLi9zcmMvY29tcG9uZW50cy9pbnB1dHMvdGV4dC1pbnB1dC5qcyIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vLi9zcmMvY29tcG9uZW50cy9pbnB1dHMvdGV4dGFyZWEtaW5wdXQuanMiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uLy4vc3JjL2NvbXBvbmVudHMvaW5wdXRzL3RpY2tldC10eXBlcy1pbnB1dC5qcyIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vLi9zcmMvY29tcG9uZW50cy9pbnB1dHMvdXBsb2FkLWlucHV0LXYyL2Ryb3B6b25lLmpzIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi8uL3NyYy9jb21wb25lbnRzL2lucHV0cy91cGxvYWQtaW5wdXQtdjIvaWNvbi5qcyIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vLi9zcmMvY29tcG9uZW50cy9pbnB1dHMvdXBsb2FkLWlucHV0LXYyL2luZGV4LmpzIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi8uL3NyYy9jb21wb25lbnRzL2lucHV0cy91cGxvYWQtaW5wdXQtdjIvaW5kZXgubGVzcz9hZDBlIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi8uL3NyYy9jb21wb25lbnRzL2lucHV0cy91cGxvYWQtaW5wdXQvZmlsZS5wbmciLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uLy4vc3JjL2NvbXBvbmVudHMvaW5wdXRzL3VwbG9hZC1pbnB1dC9pbmRleC5qcyIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vLi9zcmMvY29tcG9uZW50cy9pbnB1dHMvdXBsb2FkLWlucHV0L2pwZy5wbmciLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uLy4vc3JjL2NvbXBvbmVudHMvaW5wdXRzL3VwbG9hZC1pbnB1dC9tb3YucG5nIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi8uL3NyYy9jb21wb25lbnRzL2lucHV0cy91cGxvYWQtaW5wdXQvbXA0LnBuZyIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vLi9zcmMvY29tcG9uZW50cy9pbnB1dHMvdXBsb2FkLWlucHV0L3BkZi5wbmciLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uLy4vc3JjL2NvbXBvbmVudHMvaW5wdXRzL3VwbG9hZC1pbnB1dC91cGxvYWQubGVzcz80NjNmIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi8uL3NyYy9jb21wb25lbnRzL3Jhdy1odG1sL2luZGV4LmpzIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi8uL3NyYy9jb21wb25lbnRzL3NlY3Rpb25zL3BhbmVsLmpzIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi8uL3NyYy9jb21wb25lbnRzL3NlY3VyaXR5L2Fic3RyYWN0LWF1dGgtY2FsbGJhY2stcm91dGUuanMiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uLy4vc3JjL2NvbXBvbmVudHMvc2VjdXJpdHkvYWN0aW9ucy5qcyIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vLi9zcmMvY29tcG9uZW50cy9zZWN1cml0eS9tZXRob2RzLmpzIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi8uL3NyYy9jb21wb25lbnRzL3NlY3VyaXR5L3Nlc3Npb24tY2hlY2tlci9vcC1zZXNzaW9uLWNoZWNrZXIuanMiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uLy4vc3JjL2NvbXBvbmVudHMvc2ltcGxlLWxpbmstbGlzdC9pbmRleC5qcyIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vLi9zcmMvY29tcG9uZW50cy9zaW1wbGUtbGluay1saXN0L3NpbXBsZS1saW5rLWxpc3QubGVzcz8xYzlkIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi8uL3NyYy9jb21wb25lbnRzL3N1bW1pdC1kcm9wZG93bi9pbmRleC5qcyIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vLi9zcmMvY29tcG9uZW50cy9zdW1taXQtZHJvcGRvd24vc3VtbWl0LWRyb3Bkb3duLmxlc3M/ZThiNSIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vLi9zcmMvY29tcG9uZW50cy90YWJsZS1lZGl0YWJsZS9FZGl0YWJsZUFjdGlvbnNUYWJsZUNlbGwuanMiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uLy4vc3JjL2NvbXBvbmVudHMvdGFibGUtZWRpdGFibGUvRWRpdGFibGVUYWJsZS5qcyIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vLi9zcmMvY29tcG9uZW50cy90YWJsZS1lZGl0YWJsZS9FZGl0YWJsZVRhYmxlQ2VsbC5qcyIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vLi9zcmMvY29tcG9uZW50cy90YWJsZS1lZGl0YWJsZS9FZGl0YWJsZVRhYmxlSGVhZGluZy5qcyIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vLi9zcmMvY29tcG9uZW50cy90YWJsZS1lZGl0YWJsZS9FZGl0YWJsZVRhYmxlUm93LmpzIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi8uL3NyYy9jb21wb25lbnRzL3RhYmxlLWVkaXRhYmxlL2VkaXRhYmxlLXRhYmxlLmNzcz83ZTBjIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi8uL3NyYy9jb21wb25lbnRzL3RhYmxlLXNlbGVjdGFibGUvU2VsZWN0YWJsZUFjdGlvbnNUYWJsZUNlbGwuanMiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uLy4vc3JjL2NvbXBvbmVudHMvdGFibGUtc2VsZWN0YWJsZS9TZWxlY3RhYmxlVGFibGUuanMiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uLy4vc3JjL2NvbXBvbmVudHMvdGFibGUtc2VsZWN0YWJsZS9TZWxlY3RhYmxlVGFibGVDZWxsLmpzIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi8uL3NyYy9jb21wb25lbnRzL3RhYmxlLXNlbGVjdGFibGUvU2VsZWN0YWJsZVRhYmxlSGVhZGluZy5qcyIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vLi9zcmMvY29tcG9uZW50cy90YWJsZS1zZWxlY3RhYmxlL1NlbGVjdGFibGVUYWJsZVJvdy5qcyIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vLi9zcmMvY29tcG9uZW50cy90YWJsZS1zZWxlY3RhYmxlL3NlbGVjdGFibGUtdGFibGUuY3NzPzVlM2QiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uLy4vc3JjL2NvbXBvbmVudHMvdGFibGUtc29ydGFibGUvU29ydGFibGVBY3Rpb25zVGFibGVDZWxsLmpzIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi8uL3NyYy9jb21wb25lbnRzL3RhYmxlLXNvcnRhYmxlL1NvcnRhYmxlVGFibGUuanMiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uLy4vc3JjL2NvbXBvbmVudHMvdGFibGUtc29ydGFibGUvU29ydGFibGVUYWJsZUNlbGwuanMiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uLy4vc3JjL2NvbXBvbmVudHMvdGFibGUtc29ydGFibGUvU29ydGFibGVUYWJsZUhlYWRpbmcuanMiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uLy4vc3JjL2NvbXBvbmVudHMvdGFibGUtc29ydGFibGUvU29ydGFibGVUYWJsZVJvdy5qcyIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vLi9zcmMvY29tcG9uZW50cy90YWJsZS1zb3J0YWJsZS90YWJsZS1zb3J0YWJsZS5jc3M/ZjhmMiIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vLi9zcmMvY29tcG9uZW50cy90YWJsZS9BY3Rpb25zVGFibGVDZWxsLmpzIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi8uL3NyYy9jb21wb25lbnRzL3RhYmxlL1RhYmxlLmpzIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi8uL3NyYy9jb21wb25lbnRzL3RhYmxlL1RhYmxlQ2VsbC5qcyIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vLi9zcmMvY29tcG9uZW50cy90YWJsZS9UYWJsZUhlYWRpbmcuanMiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uLy4vc3JjL2NvbXBvbmVudHMvdGFibGUvVGFibGVSb3cuanMiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uLy4vc3JjL2NvbXBvbmVudHMvdGFibGUvdGFibGUuY3NzPzM3OTMiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uLy4vc3JjL2NvbXBvbmVudHMvdXNlLWZpdC10ZXh0LmpzIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi8uL3NyYy9jb21wb25lbnRzL3ZpZGVvLXN0cmVhbS5qcyIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vLi9zcmMvaTE4biBzeW5jIF5cXC5cXC8uKlxcLmpzb24kIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi8uL3NyYy91dGlscy9hY3Rpb25zLmpzIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi8uL3NyYy91dGlscy9tZXRob2RzLmpzIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi8uL3NyYy91dGlscy9xdWVyeS1hY3Rpb25zLmpzIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi8uL3NyYy91dGlscy9xdWVzdGlvbnMtc2V0LmpzIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi9leHRlcm5hbCBcImF3ZXNvbWUtYm9vdHN0cmFwLWNoZWNrYm94L2F3ZXNvbWUtYm9vdHN0cmFwLWNoZWNrYm94LmNzc1wiIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi9leHRlcm5hbCBcImJyb3dzZXItdGFicy1sb2NrXCIiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uL2V4dGVybmFsIFwiY3J5cHRvXCIiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uL2V4dGVybmFsIFwiZHJvcHpvbmVcIiIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vZXh0ZXJuYWwgXCJkcm9wem9uZS9kaXN0L2Ryb3B6b25lLmNzc1wiIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi9leHRlcm5hbCBcImV4dGVuZFwiIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi9leHRlcm5hbCBcImkxOG4tcmVhY3RcIiIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vZXh0ZXJuYWwgXCJpMThuLXJlYWN0L2Rpc3QvaTE4bi1yZWFjdFwiIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi9leHRlcm5hbCBcImlkdG9rZW4tdmVyaWZpZXJcIiIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vZXh0ZXJuYWwgXCJpbW11dGFiaWxpdHktaGVscGVyXCIiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uL2V4dGVybmFsIFwibG9kYXNoXCIiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uL2V4dGVybmFsIFwibW9tZW50LXRpbWV6b25lXCIiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uL2V4dGVybmFsIFwicHJvcC10eXBlc1wiIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi9leHRlcm5hbCBcInJlYWN0XCIiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uL2V4dGVybmFsIFwicmVhY3QtZGF0ZXRpbWVcIiIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vZXh0ZXJuYWwgXCJyZWFjdC1kbmRcIiIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vZXh0ZXJuYWwgXCJyZWFjdC1kbmQtaHRtbDUtYmFja2VuZFwiIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi9leHRlcm5hbCBcInJlYWN0LWRvbVwiIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi9leHRlcm5hbCBcInJlYWN0LWRyb3B6b25lXCIiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uL2V4dGVybmFsIFwicmVhY3QtZmluYWwtZm9ybVwiIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi9leHRlcm5hbCBcInJlYWN0LWdvb2dsZS1tYXBzXCIiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uL2V4dGVybmFsIFwicmVhY3QtZ29vZ2xlLW1hcHMvbGliL2NvbXBvbmVudHMvYWRkb25zL01hcmtlckNsdXN0ZXJlclwiIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi9leHRlcm5hbCBcInJlYWN0LXJlZHV4XCIiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uL2V4dGVybmFsIFwicmVhY3QtcnRlXCIiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uL2V4dGVybmFsIFwicmVhY3Qtc2VsZWN0XCIiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uL2V4dGVybmFsIFwicmVhY3Qtc2VsZWN0L2xpYi9Bc3luY1wiIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi9leHRlcm5hbCBcInJlYWN0LXNlbGVjdC9saWIvQXN5bmNDcmVhdGFibGVcIiIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vZXh0ZXJuYWwgXCJyZWFjdC1zZWxlY3QvbGliL0NyZWF0YWJsZVwiIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi9leHRlcm5hbCBcInJlYWN0LXNlbGVjdC9saWIvY29tcG9uZW50c1wiIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi9leHRlcm5hbCBcInJlYWN0LXRvb2x0aXBcIiIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vZXh0ZXJuYWwgXCJzdXBlcmFnZW50XCIiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uL2V4dGVybmFsIFwic3dlZXRhbGVydDJcIiIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vZXh0ZXJuYWwgXCJ1cmlqc1wiIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi9leHRlcm5hbCBcInZpZGVvLmpzXCIiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uL2V4dGVybmFsIFwidmlkZW8uanMvZGlzdC92aWRlby1qcy5jc3NcIiJdLCJuYW1lcyI6WyJsYW5ndWFnZSIsImdldEN1cnJlbnRVc2VyTGFuZ3VhZ2UiLCJsZW5ndGgiLCJzcGxpdCIsIlQiLCJzZXRUZXh0cyIsInJlcXVpcmUiLCJlIiwiQWpheExvYWRlciIsInNob3ciLCJyZWxhdGl2ZSIsImNvbG9yIiwic2l6ZSIsImNoaWxkcmVuIiwic3R5bGVzIiwiZGlzcGxheSIsIndpZHRoIiwiaGVpZ2h0IiwicG9zaXRpb24iLCJ6SW5kZXgiLCJtYXJnaW4iLCJjdXJzb3IiLCJiYWNrZ3JvdW5kQ29sb3IiLCJ0b3AiLCJsZWZ0Iiwic3R5bGVTcGlubmVyIiwiZm9udFNpemUiLCJzdHlsZVNwaW5uZXJDb250YWluZXIiLCJ0ZXh0QWxpZ24iLCJyaWdodCIsImJvdHRvbSIsInN0eWxlQmFja2dyb3VuZCIsImJhY2tncm91bmQiLCJvcGFjaXR5IiwiQXR0ZW5kYW5jZVRyYWNrZXIiLCJSZWFjdCIsIkNvbXBvbmVudCIsImFwaUJhc2VVcmwiLCJzdW1taXRJZCIsInNvdXJjZUlkIiwic291cmNlTmFtZSIsInByb3BzIiwibG9jYXRpb24iLCJnZXRMb2NhdGlvbiIsImFjY2Vzc1Rva2VuIiwiZ2V0QWNjZXNzVG9rZW4iLCJodHRwIiwicHV0Iiwic2VuZCIsImFjY2Vzc190b2tlbiIsInR5cGUiLCJzb3VyY2VfaWQiLCJlbmQiLCJjb25zb2xlIiwibG9nIiwicG9zdCIsIm5hdmlnYXRvciIsInNlbmRCZWFjb24iLCJ1bmRlZmluZWQiLCJ3aW5kb3ciLCJlbmNvZGVVUklDb21wb25lbnQiLCJocmVmIiwiY29tcG9uZW50RGlkTW91bnQiLCJ0cmFja0VudGVyIiwib25CZWZvcmVVbmxvYWQiLCJhZGRFdmVudExpc3RlbmVyIiwiY29tcG9uZW50V2lsbFVubW91bnQiLCJ0cmFja0xlYXZlIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsInJlbmRlciIsInByb3BUeXBlcyIsIlByb3BUeXBlcyIsInN0cmluZyIsIm51bWJlciIsImlzUmVxdWlyZWQiLCJkZWZhdWx0UHJvcHMiLCJpc0xpdmUiLCJldmVudCIsIm5vd1V0YyIsImhhc0VuZGVkIiwiZW5kX2RhdGUiLCJoYXNTdGFydGVkIiwic3RhcnRfZGF0ZSIsIkNpcmNsZUJ1dHRvbiIsImlzU2NoZWR1bGVkIiwiYWRkVG9TY2hlZHVsZSIsInJlbW92ZUZyb21TY2hlZHVsZSIsImVudGVyQ2xpY2siLCJhbHdheXNTaG93RW50ZXIiLCJpc0xpdmVOb3ciLCJidXR0b25DbGFzcyIsImljb25DbGFzcyIsIm9uQ2xpY2siLCJoYW5kbGVDbGljayIsImV2IiwiYWN0aW9uIiwicHJldmVudERlZmF1bHQiLCJzdG9wUHJvcGFnYXRpb24iLCJlbnRlciIsImFkZGVkIiwiYWRkIiwiY2lyY2xlQnV0dG9uIiwib2JqZWN0IiwiYm9vbCIsImZ1bmMiLCJDbG9jayIsImNvbnN0cnVjdG9yIiwicmVzcG9uc2UiLCJmZXRjaCIsImNhdGNoIiwiZXJyIiwianNvbiIsInRpbWVzdGFtcCIsInN0YXRlIiwib25UaWNrIiwic2V0U3RhdGUiLCJmcmFnbWVudFBhcnNlciIsIkZyYWdtZW50UGFyc2VyIiwiaW50ZXJ2YWwiLCJ0aW1lem9uZSIsIm5vdyIsIm5vd1FTIiwiZ2V0UGFyYW0iLCJtb21lbnRRUyIsIm1vbWVudCIsInR6IiwiaXNWYWxpZCIsInZhbHVlT2YiLCJsb2NhbCIsInVuaXgiLCJzZXJ2ZXJUaW1lIiwiZ2V0U2VydmVyVGltZSIsImxvY2FsQWZ0ZXIiLCJzZXRJbnRlcnZhbCIsInRpY2siLCJjbGVhckludGVydmFsIiwibWFyZ2luVG9wIiwiZm9ybWF0IiwiRXhjbHVzaXZlIiwic2hvd0ZpZWxkIiwiYmluZCIsIm5hbWUiLCJleGNsdXNpdmVTZWN0aW9ucyIsIkVYQ0xVU0lWRV9TRUNUSU9OUyIsImluY2x1ZGVzIiwiRXh0cmFRdWVzdGlvbnNGb3JtIiwiZXh0cmFRdWVzdGlvbnMiLCJ1c2VyQW5zd2VycyIsIm9uQW5zd2VyQ2hhbmdlcyIsImNsYXNzTmFtZSIsInF1ZXN0aW9uQ29udGFpbmVyQ2xhc3NOYW1lIiwicXVlc3Rpb25MYWJlbENvbnRhaW5lckNsYXNzTmFtZSIsInF1ZXN0aW9uQ29udHJvbENvbnRhaW5lckNsYXNzTmFtZSIsImZvcm1SZWYiLCJyZWFkT25seSIsImRlYnVnIiwiYnV0dG9uVGV4dCIsIlJlcXVpcmVkRXJyb3JNZXNzYWdlIiwiVmFsaWRhdGlvbkVycm9yQ2xhc3NOYW1lIiwic3VibWl0IiwicXVlc3Rpb25SZWYiLCJ1c2VSZWYiLCJhbnN3ZXJzIiwic2V0QW5zd2VycyIsInVzZVN0YXRlIiwidXNlRWZmZWN0IiwiZm9ybWF0VXNlckFuc3dlcnMiLCJxcyIsIlF1ZXN0aW9uc1NldCIsImZvcm1hdEFuc3dlcnMiLCJDb25kaXRpb24iLCJ3aGVuIiwicnVsZSIsInZhbHVlIiwiaW5wdXQiLCJjaGVja1Zpc2liaWxpdHkiLCJjaGVja1J1bGUiLCJFcnJvciIsImVycm9yIiwidG91Y2hlZCIsIm1ldGEiLCJ2YWx1ZXMiLCJhbnN3ZXJfdmFsdWVzIiwiQXJyYXkiLCJpc0FycmF5IiwicmVzIiwiYW53ZXJfdmFsdWVzX29wZXJhdG9yIiwiZm9yRWFjaCIsInYiLCJwYXJzZUludCIsInRvU3RyaW5nIiwicnVsZVJlc3VsdCIsInZpc2liaWxpdHkiLCJ2aXNpYmlsaXR5X2NvbmRpdGlvbiIsImN1cnJlbnQiLCJzdWJfcXVlc3Rpb24iLCJpZCIsInJlbmRlclF1ZXN0aW9uIiwicSIsInF1ZXN0aW9uVmFsdWVzIiwiZWwiLCJtYW5kYXRvcnkiLCJsYWJlbCIsImVuZHNXaXRoIiwicmVwbGFjZSIsIm9uQ2hhbmdlIiwicGxhY2Vob2xkZXIiLCJzdWJfcXVlc3Rpb25fcnVsZXMiLCJtYXAiLCJyIiwidmFsIiwiaXNWaXNpYmxlIiwidmFsaWRhdGVRdWVzdGlvbiIsImVycm9ycyIsImhhc093blByb3BlcnR5Iiwib25TdWJtaXQiLCJ2YWxpZGF0ZSIsImhhbmRsZVN1Ym1pdCIsImZvcm0iLCJzdWJtaXR0aW5nIiwicHJpc3RpbmUiLCJKU09OIiwic3RyaW5naWZ5IiwiYXJyYXkiLCJvbmVPZlR5cGUiLCJzaGFwZSIsImFueSIsIlJzdnBGb3JtIiwicXVlc3Rpb25zIiwicXVlc3Rpb25faWQiLCJoYW5kbGVDaGFuZ2UiLCJoYXNFcnJvcnMiLCJmaW5kIiwiYSIsImNsYXNzX25hbWUiLCJpc19jb3VudHJ5X3NlbGVjdG9yIiwiaXNfbXVsdGlzZWxlY3QiLCJlbXB0eV9zdHJpbmciLCJ0YXJnZXQiLCJhbnN3ZXIiLCJmaWVsZCIsImlzX21hbmRhdG9yeSIsIlNpbXBsZUZvcm0iLCJlbnRpdHkiLCJjb21wb25lbnREaWRVcGRhdGUiLCJwcmV2UHJvcHMiLCJwcmV2U3RhdGUiLCJzbmFwc2hvdCIsInNjcm9sbFRvRXJyb3IiLCJzaGFsbG93RXF1YWwiLCJpc0VtcHR5IiwiY2hlY2tlZCIsImNyZWF0ZUZpZWxkIiwiZmllbGRzIiwiZiIsInRyYW5zbGF0ZSIsIm9yaWdpbmFsSGFzaCIsImhhc2giLCJjb252ZXJ0VG9IYXNoIiwic3RySGFzaCIsInN1YnN0ciIsInRvTG93ZXJDYXNlIiwicGFyYW1zIiwicGFyYW0iLCJ0cmltIiwiY2xlYXJQYXJhbXMiLCJrZXkiLCJnZXRQYXJhbXMiLCJkZWxldGVQYXJhbSIsImRlbGV0ZVBhcmFtcyIsInNldFBhcmFtIiwic2VyaWFsaXplIiwiRnJlZVRleHRTZWFyY2giLCJvblNlYXJjaENsaWNrIiwib25DbGVhckNsaWNrIiwib25LZXlQcmVzc2VkIiwiZG9GaWx0ZXJpbmciLCJ0ZXJtIiwib25TZWFyY2giLCJjb2RlIiwia2V5Q29kZSIsIndoaWNoIiwiTUFQIiwiZGVmYXVsdFpvb20iLCJkZWZhdWx0Q2VudGVyIiwibGF0IiwibG5nIiwib3B0aW9ucyIsIm1pblpvb20iLCJtYXhab29tIiwiR29vZ2xlTWFwV3JhcHBlciIsIndpdGhHb29nbGVNYXAiLCJvbk1hcExvYWQiLCJ6b29tIiwiY2VudGVyIiwib25NYXBDaGFuZ2UiLCJvbk1hcENsaWNrIiwic2hvd01hcmtlcnMiLCJtYXJrZXJzIiwibWFya2VyIiwib25Ub2dnbGVJbmZvV2luZG93Iiwib25NYXJrZXJEcmFnIiwiZHJhZ2dhYmxlIiwiaXNJbmZvV2luZG93T3BlbiIsIkdNYXAiLCJoYW5kbGVNYXBMb2FkIiwiaGFuZGxlTWFwQ2hhbmdlIiwiaGFuZGxlTWFya2VyRHJhZyIsImhhbmRsZU1hcENsaWNrIiwibmV3X21hcmtlcnMiLCJhcnJheXNFcXVhbCIsIm9sZF9tYXJrZXJzX3N0ciIsIm0iLCJzb3J0Iiwiam9pbiIsIm5ld19tYXJrZXJzX3N0ciIsIm1hcmtlckJvdW5kcyIsImdvb2dsZSIsIm1hcHMiLCJMYXRMbmdCb3VuZHMiLCJtYXJrZXJfbG9jIiwiTGF0TG5nIiwiZXh0ZW5kIiwiX21hcENvbXBvbmVudCIsImZpdEJvdW5kcyIsInZpc2libGVfbWFya2VycyIsImZpbHRlciIsImdldEJvdW5kcyIsImNvbnRhaW5zIiwib25DaGFuZ2VDYWxsYmFjayIsImhhbmRsZU1hcmtlckNsaWNrIiwibWFya2VyX2lkIiwiaXNfb3BlbiIsIm9uTWFya2VyRHJhZ2dlZCIsImxhdExuZyIsIkFjY2Vzc0xldmVsc0lucHV0IiwiZ2V0QWNjZXNzTGV2ZWxzIiwiZ2V0T3B0aW9uVmFsdWUiLCJnZXRPcHRpb25MYWJlbCIsImFjY2Vzc0xldmVsIiwiY2FsbGJhY2siLCJQcm9taXNlIiwicmVzb2x2ZSIsInF1ZXJ5QWNjZXNzTGV2ZWxzIiwibXVsdGkiLCJyZXN0IiwiaXNNdWx0aSIsImhhc19lcnJvciIsIkFjdGlvbkRyb3Bkb3duIiwiYWN0aW9uTGFiZWwiLCJzbWFsbERkbCIsInNtYWxsQnRuIiwidGhlVmFsdWUiLCJPYmplY3QiLCJvcHQiLCJDaGVja2JveExpc3QiLCJvdGhlclZhbHVlIiwib3AiLCJvdGhlckNoZWNrZWQiLCJoYW5kbGVPdGhlckNCQ2hhbmdlIiwib3B0aW9uVmFsdWVzIiwidGhlVmFsIiwiaXNOYU4iLCJwdXNoIiwiZGlzYWJsZWQiLCJpbmxpbmUiLCJodG1sIiwiYWxsb3dPdGhlciIsImlzRGlzYWJsZWQiLCJzdHlsZSIsInBhZGRpbmdMZWZ0IiwibWFyZ2luTGVmdCIsImZsb2F0IiwiQ29tcGFueUlucHV0IiwiaGFuZGxlTmV3IiwiZ2V0Q29tcGFuaWVzIiwidHJhbnNsYXRlVmFsdWUiLCJuZXdWYWx1ZSIsIm9uQ3JlYXRlIiwidHJhbnNsYXRlT3B0aW9ucyIsIm5ld09wdGlvbnMiLCJjIiwicXVlcnlDb21wYW5pZXMiLCJhbGxvd0NyZWF0ZSIsIkFzeW5jQ29tcG9uZW50IiwiQXN5bmNDcmVhdGFibGVTZWxlY3QiLCJBc3luY1NlbGVjdCIsIkNvdW50cnlEcm9wZG93biIsInNldE9wdGlvbnMiLCJhYm9ydENvbnRyb2xsZXIiLCJBYm9ydENvbnRyb2xsZXIiLCJnZXRDb3VudHJ5TGlzdCIsInNpZ25hbCIsImFib3J0IiwiY291bnRyeUxpc3QiLCJpc29fY29kZSIsIkNvdW50cnlJbnB1dCIsIkRhdGVUaW1lUGlja2VyIiwiaXNWYWxpZERhdGUiLCJkYXRlIiwiaXNNb21lbnQiLCJjdXJyZW50RGF0ZSIsInNlbGVjdGVkRGF0ZSIsInZhbGlkYXRpb24iLCJhZnRlciIsImJlZm9yZSIsImlzQmVmb3JlIiwiaXNBZnRlciIsImFmdGVyRGF0ZSIsInN1YnRyYWN0IiwiYmVmb3JlRGF0ZSIsImlucHV0UHJvcHMiLCJpbnB1dERpc2FibGVkIiwidGltZSIsImF1dG9Db21wbGV0ZSIsIkRyb3Bkb3duIiwic2VsZWN0aW9uIiwiY2xlYXJhYmxlIiwib3ZlcnJpZGVDU1MiLCJpc0NsZWFyYWJsZSIsInNlbGVjdENsYXNzTmFtZSIsInNlbGVjdFN0eWxlcyIsIm1lbnUiLCJUZXh0RWRpdG9yIiwiUmljaFRleHRFZGl0b3IiLCJkZWZhdWx0IiwiZWRpdG9yVmFsdWUiLCJjcmVhdGVFbXB0eVZhbHVlIiwiY3VycmVudFZhbHVlIiwiZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzIiwic2V0Q29udGVudEZyb21TdHJpbmciLCJvbGRFZGl0b3JWYWx1ZSIsIm9sZENvbnRlbnRTdGF0ZSIsImdldEVkaXRvclN0YXRlIiwiZ2V0Q3VycmVudENvbnRlbnQiLCJuZXdDb250ZW50U3RhdGUiLCJzdHJpbmdWYWx1ZSIsIkV2ZW50SW5wdXQiLCJnZXRFdmVudHMiLCJzdW1taXQiLCJvbmx5UHVibGlzaGVkIiwicXVlcnlFdmVudHMiLCJvcHRpb24iLCJ0aXRsZSIsIkZyZWVNdWx0aVRleHRJbnB1dCIsImlucHV0VmFsdWUiLCJoYW5kbGVJbnB1dENoYW5nZSIsImhhbmRsZUtleURvd24iLCJsaW1pdCIsIkRyb3Bkb3duSW5kaWNhdG9yIiwiR3JvdXBJbnB1dCIsImdldEdyb3VwcyIsInF1ZXJ5R3JvdXBzIiwiT3B0aW9uR3JvdXAiLCJpIiwiR3JvdXBlZERyb3Bkb3duIiwiTGFuZ3VhZ2VJbnB1dCIsInNob3VsZFVzZUlkIiwiZ2V0TGFuZ3VhZ2VMaXN0IiwibGFuZ3VhZ2VMaXN0IiwibCIsIk1lbWJlcklucHV0IiwiZ2V0TWVtYmVycyIsIm1lbWJlciIsImZpcnN0X25hbWUiLCJsYXN0X25hbWUiLCJxdWVyeU1lbWJlcnMiLCJPcmdhbml6YXRpb25JbnB1dCIsImdldE9yZ2FuaXphdGlvbnMiLCJvcmciLCJxdWVyeU9yZ2FuaXphdGlvbnMiLCJSYWRpb0xpc3QiLCJnZXRMYWJlbCIsInNpbXBsZSIsImRlc2NyaXB0aW9uIiwiUmVnaXN0cmF0aW9uQ29tcGFueUlucHV0Iiwib25FcnJvciIsInNldFRoZVZhbHVlIiwiZnJlZUlucHV0Iiwic2V0RnJlZUlucHV0Iiwic2V0SW5wdXRWYWx1ZSIsImlzTXVsdGlPcHRpb25hbCIsInNldElzTXVsdGlPcHRpb25hbCIsImhhc0Vycm9yIiwic2V0SGFzRXJyb3IiLCJldmVudFZhbHVlIiwibmV3VmFsdWVTdGF0ZSIsImhhbmRsZUlucHV0Q2xlYXIiLCJldnQiLCJvdGhlck9wdGlvbiIsInF1ZXJ5UmVnaXN0cmF0aW9uQ29tcGFuaWVzIiwicGFkZGluZ1JpZ2h0IiwiU3BlYWtlcklucHV0IiwiZ2V0U3BlYWtlcnMiLCJzcGVha2VySWQiLCJoaXN0b3J5IiwicXVlcnlTcGVha2VycyIsInNwZWFrZXIiLCJNdWx0aVZhbHVlTGFiZWwiLCJkYXRhIiwicyIsIlNwb25zb3JJbnB1dCIsImdldFNwb25zb3JzIiwicXVlcnlTcG9uc29ycyIsImNvbXBhbnkiLCJzcG9uc29yc2hpcCIsIlN1bW1pdElucHV0IiwiZ2V0U3VtbWl0cyIsInF1ZXJ5U3VtbWl0cyIsIlRhZ0lucHV0IiwidCIsInRhZyIsImdldFRhZ3MiLCJuZXh0VmFsdWUiLCJxdWVyeVRhZ3MiLCJvcmRlcmVkVGFncyIsImIiLCJJbnB1dCIsIlRleHRBcmVhIiwiVGlja2V0VHlwZXNJbnB1dCIsImdldFRpY2tldFR5cGVzIiwidGlja2V0VHlwZSIsInF1ZXJ5VGlja2V0VHlwZXMiLCJEcm9wem9uZSIsIkRyb3B6b25lSlMiLCJmaWxlcyIsIm9uVXBsb2FkQ29tcGxldGUiLCJnZXREanNDb25maWciLCJkZWZhdWx0cyIsInVybCIsImNvbmZpZyIsInBvc3RVcmwiLCJkanNDb25maWciLCJhY2NlcHQiLCJmaWxlIiwiZG9uZSIsIm1heEZpbGVzIiwidXBsb2FkQ291bnQiLCJhdXRvRGlzY292ZXIiLCJldmVudEhhbmRsZXJzIiwiZHJvcCIsImluZm8iLCJkcm9wem9uZU5vZGUiLCJkcm9wem9uZVNlbGVjdG9yIiwiUmVhY3RET00iLCJmaW5kRE9NTm9kZSIsImRyb3B6b25lIiwic2V0dXBFdmVudHMiLCJnZXRBY3RpdmVGaWxlcyIsInF1ZXVlRGVzdHJveSIsImRlc3Ryb3lJbnRlcnZhbCIsImRlc3Ryb3kiLCJkanNDb25maWdPYmoiLCJwb3N0VXJsQ29uZmlnT2JqIiwiaWNvbnMiLCJzaG93RmlsZXR5cGVJY29uIiwiaWNvbkZpbGV0eXBlcyIsImV2ZW50SGFuZGxlciIsInByb3RvdHlwZSIsImNhbGwiLCJvbiIsImZpbGVJbkZpbGVzIiwic3BsaWNlIiwicHJvZ3Jlc3MiLCJieXRlc1NlbnQiLCJwcmV2aWV3RWxlbWVudCIsImVsZW0iLCJxdWVyeVNlbGVjdG9yQWxsIiwieGhyIiwiZm9ybURhdGEiLCJhcHBlbmQiLCJfdGhpcyIsImRyb3B6b25lT25Mb2FkIiwib25sb2FkIiwidXBsb2FkUmVzcG9uc2UiLCJwYXJzZSIsInJlc3BvbnNlVGV4dCIsIm9mZiIsIkljb24iLCJmaWxldHlwZSIsIlVwbG9hZElucHV0VjIiLCJvblJlbW92ZSIsIm1lZGlhVHlwZSIsInRpbWVPdXQiLCJhbGxvd2VkRXh0IiwiYWxsb3dlZF9leHRlbnNpb25zIiwiZXh0IiwibWF4U2l6ZSIsIm1heF9zaXplIiwiY2FuVXBsb2FkIiwiZGpzQ29uZmlnU2V0IiwicGFyYW1OYW1lIiwibWF4RmlsZXNpemUiLCJ0aW1lb3V0IiwiY2h1bmtpbmciLCJyZXRyeUNodW5rcyIsInBhcmFsbGVsQ2h1bmtVcGxvYWRzIiwiYWRkUmVtb3ZlTGlua3MiLCJhY2NlcHRlZEZpbGVzIiwiY29tcG9uZW50Q29uZmlnIiwibWVkaWFfdHlwZSIsIm1lZGlhX3VwbG9hZCIsInJlbW92ZWRmaWxlIiwicHJpdmF0ZV91cmwiLCJwdWJsaWNfdXJsIiwiZmlsZW5hbWUiLCJVcGxvYWRJbnB1dCIsInNob3dfcmVtb3ZlIiwibG9nb19wcmV2aWV3IiwicHJldmlldyIsImZpbGVIYXNQcmV2aWV3Iiwib25Ecm9wIiwiZmlsZVJlamVjdGlvbnMiLCJoYW5kbGVVcGxvYWQiLCJoYW5kbGVFcnJvciIsImhhbmRsZVJlbW92ZSIsInNob3dWZWlsIiwiaGlkZVZlaWwiLCJmaWxlTmFtZSIsInBhdHRlcm4iLCJ0ZXN0IiwiaWNvbiIsImZpbGVfaWNvbiIsInNsaWNlIiwibGFzdEluZGV4T2YiLCJwZGZfaWNvbiIsIm1vdl9pY29uIiwibXA0X2ljb24iLCJSYXdIVE1MIiwiX19odG1sIiwiUGFuZWwiLCJ0aGVJZCIsInRoZUNsYXNzIiwiQWJzdHJhY3RBdXRob3JpemF0aW9uQ2FsbGJhY2tSb3V0ZSIsImlzc3VlciIsImF1ZGllbmNlIiwiaWRfdG9rZW5faXNfdmFsaWQiLCJlcnJvcl9kZXNjcmlwdGlvbiIsImZsb3ciLCJnZXRPQXV0aDJGbG93IiwiX2ltcGxpY2l0RmxvdyIsImlkX3Rva2VuIiwic2Vzc2lvbl9zdGF0ZSIsImV4cGlyZXNfaW4iLCJleHRyYWN0SGFzaFBhcmFtcyIsImRvTG9naW4iLCJnZXRDdXJyZW50UGF0aE5hbWUiLCJ2YWxpZGF0ZUlkVG9rZW4iLCJvblVzZXJBdXRoIiwicGFyZW50IiwicG9zdE1lc3NhZ2UiLCJvcmlnaW4iLCJfY29kZUZsb3ciLCJVUkkiLCJnZXRDdXJyZW50SHJlZiIsInF1ZXJ5Iiwic2VhcmNoIiwiYmFja1VybCIsImVtaXRBY2Nlc3NUb2tlbiIsInRoZW4iLCJyZWZyZXNoX3Rva2VuIiwiZXJyb3IyIiwiZXJyb3JfZGVzY3JpcHRpb24yIiwiUkVTUE9OU0VfVFlQRV9JTVBMSUNJVCIsIlJFU1BPTlNFX1RZUEVfQ09ERSIsInBhcnNlUXVlcnkiLCJzaG91bGRDb21wb25lbnRVcGRhdGUiLCJuZXh0UHJvcHMiLCJuZXh0U3RhdGUiLCJuZXh0Q29udGV4dCIsImZyYWdtZW50IiwibGVuZ2h0IiwiYnVpbGRRdWVyeSIsIl9jYWxsYmFjayIsIl9yZWRpcmVjdDJFcnJvciIsIlNFVF9MT0dHRURfVVNFUiIsIkxPR09VVF9VU0VSIiwiUkVRVUVTVF9VU0VSX0lORk8iLCJSRUNFSVZFX1VTRVJfSU5GTyIsIkNMRUFSX1NFU1NJT05fU1RBVEUiLCJVUERBVEVfU0VTU0lPTl9TVEFURV9TVEFUVVMiLCJTRVNTSU9OX1NUQVRFX1NUQVRVU19VTkNIQU5HRUQiLCJTRVNTSU9OX1NUQVRFX1NUQVRVU19DSEFOR0VEIiwiU0VTU0lPTl9TVEFURV9TVEFUVVNfRVJST1IiLCJVUERBVEVfVVNFUl9JTkZPIiwiaWRUb2tlbiIsInNlc3Npb25TdGF0ZSIsImV4cGlyZXNJbiIsInJlZnJlc2hUb2tlbiIsImRpc3BhdGNoIiwic3RvcmVBdXRoSW5mbyIsInBheWxvYWQiLCJkb0xvZ291dCIsImdldFN0YXRlIiwiZ2V0VXNlckluZm8iLCJleHBhbmQiLCJlcnJvckhhbmRsZXIiLCJBbGxvd2VkVXNlckdyb3VwcyIsImdldEFsbG93ZWRVc2VyR3JvdXBzIiwibG9nZ2VkVXNlclN0YXRlIiwiYXV0aEVycm9ySGFuZGxlciIsInN0YXJ0TG9hZGluZyIsImdldFJlcXVlc3QiLCJjcmVhdGVBY3Rpb24iLCJidWlsZEFQSUJhc2VVcmwiLCJzdG9wTG9hZGluZyIsImVycm9yX21lc3NhZ2UiLCJzaG93TWVzc2FnZSIsImluaXRMb2dPdXQiLCJhbGxvd2VkR3JvdXBzIiwiZ3JvdXBzIiwiZ3JvdXAiLCJpZHgiLCJ1cGRhdGVVc2VySW5mbyIsInVwZGF0ZWRNZW1iZXIiLCJ1cGRhdGVTZXNzaW9uU3RhdGVTdGF0dXMiLCJuZXdTdGF0dXMiLCJzZXNzaW9uU3RhdGVTdGF0dXMiLCJyZXF1ZXN0IiwibG9jayIsIkxvY2siLCJHRVRfVE9LRU5fU0lMRU5UTFlfTE9DS19LRVkiLCJOT05DRV9MRU4iLCJBQ0NFU1NfVE9LRU5fU0tFV19USU1FIiwiQVVUSF9JTkZPIiwiTk9OQ0UiLCJQS0NFIiwiZ2V0QXV0aFVybCIsInByb21wdCIsInRva2VuSWRIaW50IiwicHJvdmlkZXIiLCJvYXV0aDJDbGllbnRJZCIsImdldE9BdXRoMkNsaWVudElkIiwicmVkaXJlY3RVcmkiLCJnZXRBdXRoQ2FsbGJhY2siLCJiYXNlVXJsIiwiZ2V0T0F1dGgySURQQmFzZVVybCIsInNjb3BlcyIsImdldE9BdXRoMlNjb3BlcyIsImVuY29kZVVSSSIsIm5vbmNlIiwiY3JlYXRlTm9uY2UiLCJwdXRPbkxvY2FsU3RvcmFnZSIsInBrY2UiLCJjcmVhdGVQS0NFQ29kZXMiLCJjb2RlQ2hhbGxlbmdlIiwiZ2V0TG9nb3V0VXJsIiwicG9zdExvZ091dFVyaSIsImdldE9yaWdpbiIsImxlbiIsInBvc3NpYmxlIiwiY2hhckF0IiwiTWF0aCIsImZsb29yIiwicmFuZG9tIiwiZ2V0Q3VycmVudExvY2F0aW9uIiwiZG9Mb2dpbkJhc2ljTG9naW4iLCJjb2RlVmVyaWZpZXIiLCJiYXNlNjRVUkxFbmNvZGUiLCJyYW5kb21CeXRlcyIsInNoYTI1NiIsIkJ1ZmZlciIsImZyb20iLCJjcmVhdGVkQXQiLCJEYXRlIiwiY29kZVBhaXIiLCJnZXRGcm9tTG9jYWxTdG9yYWdlIiwibWV0aG9kIiwiaGVhZGVycyIsImJvZHkiLCJtZXNzYWdlIiwiY2xlYXJBY2Nlc3NUb2tlbiIsInJldHJ5UHJvbWlzZSIsImFjcXVpcmVMb2NrIiwiYXV0aEluZm8iLCJnZXRBdXRoSW5mbyIsImFjY2Vzc1Rva2VuVXBkYXRlZEF0IiwicmVsZWFzZUxvY2siLCJ0aW1lRWxhcHNlZFNlY3MiLCJ1c2VPQXV0aDJSZWZyZXNoVG9rZW4iLCJjbGVhckF1dGhJbmZvIiwicmVmcmVzaEFjY2Vzc1Rva2VuIiwic3RhdHVzIiwiY3VycmVudExvY2F0aW9uIiwic2V0U2Vzc2lvbkNsZWFyaW5nU3RhdGUiLCJzdGF0dXNUZXh0IiwiZm9ybWVyQXV0aEluZm8iLCJyZW1vdmVGcm9tTG9jYWxTdG9yYWdlIiwiZ2V0SWRUb2tlbiIsIk9BVVRIMl9DTElFTlRfSUQiLCJPQVVUSDJfRkxPVyIsIkJvb2xlYW4iLCJPQVVUSDJfVVNFX1JFRlJFU0hfVE9LRU4iLCJJRFBfQkFTRV9VUkwiLCJTQ09QRVMiLCJ2ZXJpZmllciIsIklkVG9rZW5WZXJpZmllciIsInN0b3JlZE5vbmNlIiwiand0IiwiZGVjb2RlIiwiYWxnIiwiaGVhZGVyIiwia2lkIiwiYXVkIiwiaXNzIiwiZXhwIiwibmJmIiwidG5vbmNlIiwicGFzc3dvcmRsZXNzU3RhcnQiLCJjb25uZWN0aW9uIiwiZW1haWwiLCJwaG9uZV9udW1iZXIiLCJyZXEiLCJyZWplY3QiLCJwYXNzd29yZGxlc3NMb2dpbiIsIm90cCIsIkNIRUNLX1NFU1NJT05fSU5URVJWQUwiLCJPUFNlc3Npb25DaGVja2VyIiwib3BGcmFtZV9zcmMiLCJycENoZWNrU2Vzc2lvblN0YXRlRnJhbWVfc3JjIiwicmVjZWl2ZU1lc3NhZ2UiLCJyZWNlaXZlTWVzc2FnZUZyb21DaGlsZCIsInNldFRpbWVyIiwiY2hlY2tTZXNzaW9uIiwib25TZXR1cENoZWNrU2Vzc2lvblJQIiwicnBDaGVja1Nlc3Npb25TdGF0ZUZyYW1lT25Mb2FkIiwib3BGcmFtZSIsInJwQ2hlY2tTZXNzaW9uU3RhdGVGcmFtZSIsInNldE9QRnJhbWVSZWYiLCJlbGVtZW50Iiwic2V0Q2hlY2tTZXNzaW9uU3RhdGVGcmFtZVJlZiIsImlzTG9nZ2VkVXNlciIsImZyYW1lIiwiY29udGVudERvY3VtZW50IiwicmVzdWx0VXJsIiwiVVJMIiwidG9Mb2NhbGVTdHJpbmciLCJjbGllbnRJZCIsInRhcmdldE9yaWdpbiIsImlkcEJhc2VVcmwiLCJjb250ZW50V2luZG93Iiwic2Vzc2lvbkNoZWNrRW5kcG9pbnQiLCJTdHJpbmciLCJib3JkZXIiLCJtYXBTdGF0ZVRvUHJvcHMiLCJjb25uZWN0IiwiU2ltcGxlTGlua0xpc3QiLCJnZXRPcHRpb25zIiwiaGFuZGxlTGluayIsImZpbHRlck9wdGlvbiIsImdldE5ld09wdGlvbkRhdGEiLCJpc1ZhbGlkTmV3T3B0aW9uIiwiZGVmYXVsdE9wdGlvbnMiLCJhY3Rpb25zIiwib3B0aW9uTGFiZWwiLCJzZWxlY3RWYWx1ZSIsInNlbGVjdE9wdGlvbnMiLCJsYWJlbEtleSIsIm9wdGlvbkZvdW5kIiwib25DcmVhdGVUYWciLCJjYW5kaWRhdGUiLCJhbGxvd0R1cGxpY2F0ZXMiLCJjb2x1bW5zIiwiZGlzYWJsZWRBZGQiLCJ2YWx1ZUtleSIsInRhYmxlT3B0aW9ucyIsImRlbGV0ZSIsImVkaXQiLCJjdXN0b20iLCJpdGVtQSIsInNvcnRDb2wiLCJpdGVtQiIsIlN1bW1pdERyb3Bkb3duIiwic3VtbWl0VmFsdWUiLCJzdW1taXRzIiwiYWN0aW9uQ2xhc3MiLCJzdW1taXRPcHRpb25zIiwiYmlnQ2xhc3MiLCJFZGl0YWJsZUFjdGlvbnNUYWJsZUNlbGwiLCJpc19lZGl0aW5nIiwib25EZWxldGUiLCJvblNhdmUiLCJzYXZlIiwib25FZGl0Iiwib25DYW5jZWwiLCJjYW5jZWwiLCJjb2xXaWR0aCIsImNyZWF0ZVJvdyIsInJvdyIsInNob3VsZFVzZVRleHRBcmVhIiwiYWN0aW9uX2J1dHRvbnMiLCJjZWxscyIsImNvbCIsImNvbHVtbktleSIsImlzX2VkaXQiLCJjcmVhdGVOZXdSb3ciLCJuZXdfcm93IiwiYWRkTmV3IiwiY2VsbF92YWx1ZSIsIkVkaXRhYmxlVGFibGUiLCJyb3dzIiwiZWRpdFJvdyIsInNhdmVSb3ciLCJkZWxldGVDbGljayIsIm9uQ2hhbmdlQ2VsbCIsImVkaXRSb3dDYW5jZWwiLCJzYXZlTmV3Um93IiwiaGFuZGxlTmV3Q2hhbmdlIiwib25DaGFuZ2VOZXdDZWxsIiwiZWRpdGluZ19yb3ciLCJub0FsZXJ0IiwiU3dhbCIsImZpcmUiLCJ0ZXh0Iiwic2hvd0NhbmNlbEJ1dHRvbiIsImNvbmZpcm1CdXR0b25Db2xvciIsImNvbmZpcm1CdXR0b25UZXh0IiwicmVzdWx0Iiwicm93SWR4IiwiZmluZEluZGV4IiwidGFibGVDbGFzcyIsInRleHRBcmVhIiwid2FybiIsIkVkaXRhYmxlVGFibGVDZWxsIiwiRWRpdGFibGVUYWJsZUhlYWRpbmciLCJFZGl0YWJsZVRhYmxlUm93IiwiZXZlbiIsIlNlbGVjdGFibGVBY3Rpb25zVGFibGVDZWxsIiwiaGFuZGxlQWN0aW9uIiwic2hvdWxkRGlzcGxheUFjdGlvbiIsInRvb2x0aXAiLCJzb3J0RnVuYyIsInNvcnRhYmxlIiwic29ydERpciIsImdldFNvcnREaXIiLCJjb2x1bW5JbmRleCIsIlNlbGVjdGFibGVUYWJsZSIsInNlbGVjdGVkSWRzIiwib25TZWxlY3RlZEFsbCIsInNlbGVjdGVkQWxsIiwib25Tb3J0IiwiYWN0aW9uc0hlYWRlciIsIlNlbGVjdGFibGVUYWJsZUNlbGwiLCJpc1ZhbGlkRWxlbWVudCIsIlNlbGVjdGFibGVUYWJsZUhlYWRpbmciLCJoYW5kbGVTb3J0IiwiZ2V0U29ydENsYXNzIiwiU2VsZWN0YWJsZVRhYmxlUm93IiwiaGFuZGxlRWRpdCIsImhhbmRsZVNlbGVjdCIsIm9uU2VsZWN0ZWQiLCJjYW5FZGl0Iiwicm93Q2xhc3MiLCJTb3J0YWJsZUFjdGlvbnNUYWJsZUNlbGwiLCJTb3J0YWJsZVRhYmxlIiwibW92ZVJvdyIsImRyb3BSb3ciLCJkcmFnSW5kZXgiLCJob3ZlckluZGV4IiwiZHJhZ1JvdyIsInVwZGF0ZSIsIiRzcGxpY2UiLCJpbmRleCIsIm9yZGVyRmllbGQiLCJuZXdPcmRlciIsIiRzZXQiLCJkcm9wQ2FsbGJhY2siLCJhcnJheU9mIiwiRHJhZ0Ryb3BDb250ZXh0IiwiSFRNTDVCYWNrZW5kIiwiU29ydGFibGVUYWJsZUNlbGwiLCJTb3J0YWJsZVRhYmxlSGVhZGluZyIsInBhZGRpbmciLCJtYXJnaW5Cb3R0b20iLCJyb3dTb3VyY2UiLCJiZWdpbkRyYWciLCJlbmREcmFnIiwibW9uaXRvciIsImRpZERyb3AiLCJkcm9wQ2FyZCIsInJvd1RhcmdldCIsImhvdmVyIiwiY29tcG9uZW50IiwiZ2V0SXRlbSIsImhvdmVyQm91bmRpbmdSZWN0IiwiZ2V0Qm91bmRpbmdDbGllbnRSZWN0IiwiaG92ZXJNaWRkbGVZIiwiY2xpZW50T2Zmc2V0IiwiZ2V0Q2xpZW50T2Zmc2V0IiwiaG92ZXJDbGllbnRZIiwieSIsIm1vdmVDYXJkIiwiU29ydGFibGVUYWJsZVJvdyIsImlzRHJhZ2dpbmciLCJjb25uZWN0RHJhZ1NvdXJjZSIsImNvbm5lY3REcm9wVGFyZ2V0IiwiRHJhZ1NvdXJjZSIsImRyYWdTb3VyY2UiLCJEcm9wVGFyZ2V0IiwiZHJvcFRhcmdldCIsIkFjdGlvbnNUYWJsZUNlbGwiLCJUYWJsZSIsIlRhYmxlQ2VsbCIsIlRhYmxlSGVhZGluZyIsIlRhYmxlUm93IiwidXNlRml0VGV4dCIsIm1pblNpemUiLCJNSU5fRk9OVF9TSVpFIiwiTUFYX0ZPTlRfU0laRSIsIlJFU09MVVRJT04iLCJyZWYiLCJmb250U2l6ZVByZXYiLCJmb250U2l6ZU1heCIsImZvbnRTaXplTWluIiwiaXNEb25lIiwiYWJzIiwiaXNPdmVyZmxvdyIsInNjcm9sbEhlaWdodCIsIm9mZnNldEhlaWdodCIsInNjcm9sbFdpZHRoIiwib2Zmc2V0V2lkdGgiLCJpc0FzYyIsImZvbnRTaXplTmV3IiwiZGVsdGEiLCJuZXdNYXgiLCJuZXdNaW4iLCJtaW4iLCJtYXgiLCJsaW5lSGVpZ2h0IiwiWW91dHViZVZpZGVvQ29tcG9uZW50IiwidmlkZW9TcmNVUkwiLCJ2aWRlb1RpdGxlIiwiTGl2ZVZpZGVvUGxheWVyIiwicGxheWVyIiwidmlkZW9qcyIsInZpZGVvTm9kZSIsImRpc3Bvc2UiLCJub2RlIiwiVmlkZW9TdHJlYW0iLCJsYXlvdXQiLCJjaGVja0xpdmVWaWRlbyIsImlzTGl2ZVZpZGVvIiwibWF0Y2giLCJ2aWRlb0pzT3B0aW9ucyIsImF1dG9wbGF5IiwiY29udHJvbHMiLCJmbHVpZCIsInNvdXJjZXMiLCJzcmMiLCJHRU5FUklDX0VSUk9SIiwiUkVTRVRfTE9BRElORyIsIlNUQVJUX0xPQURJTkciLCJTVE9QX0xPQURJTkciLCJWQUxJREFURSIsIkNMRUFSX01FU1NBR0UiLCJTSE9XX01FU1NBR0UiLCJyZXNldExvYWRpbmciLCJ4aHJzIiwic2NoZWR1bGUiLCJpc09iamVjdEVtcHR5Iiwib2JqIiwia2V5cyIsIm1zZyIsImNsZWFyaW5nX3Nlc3Npb25fc3RhdGUiLCJpc0NsZWFyaW5nU2Vzc2lvblN0YXRlIiwiZW50cmllcyIsInJlcXVlc3RBY3Rpb25DcmVhdG9yIiwicmVjZWl2ZUFjdGlvbkNyZWF0b3IiLCJlbmRwb2ludCIsImRlZmF1bHRFcnJvckhhbmRsZXIiLCJyZXF1ZXN0QWN0aW9uUGF5bG9hZCIsImdldCIsImRlYWRsaW5lIiwicmVzcG9uc2VIYW5kbGVyIiwicHV0UmVxdWVzdCIsImRlbGV0ZVJlcXVlc3QiLCJwb3N0UmVxdWVzdCIsInNldCIsInBvc3RGaWxlIiwiZmlsZU1ldGFkYXRhIiwiYXR0YWNoIiwicHV0RmlsZSIsIm9rIiwiZmV0Y2hFcnJvckhhbmRsZXIiLCJmZXRjaFJlc3BvbnNlSGFuZGxlciIsInNldHRpbmdzIiwic2hvd1N1Y2Nlc3NNZXNzYWdlIiwiZG93bmxvYWRGaWxlQnlDb250ZW50IiwiY29udGVudCIsIm1pbWUiLCJsaW5rIiwiZG9jdW1lbnQiLCJjcmVhdGVFbGVtZW50IiwidGV4dENvbnRlbnQiLCJkb3dubG9hZCIsImFwcGVuZENoaWxkIiwiY2xpY2siLCJyZW1vdmVDaGlsZCIsImdldENTViIsImNzdiIsImdldFJhd0NTViIsImVzY2FwZUZpbHRlclZhbHVlIiwiZmluZEVsZW1lbnRQb3MiLCJjdXJ0b3AiLCJvZmZzZXRQYXJlbnQiLCJvZmZzZXRUb3AiLCJlcG9jaFRvTW9tZW50IiwiYXRpbWUiLCJlcG9jaFRvTW9tZW50VGltZVpvbmUiLCJ0aW1lX3pvbmUiLCJmb3JtYXRFcG9jaCIsIm9iamVjdFRvUXVlcnlTdHJpbmciLCJzdHIiLCJnZXRCYWNrVVJMIiwicGF0aG5hbWUiLCJBTExPV0VEX1VTRVJfR1JPVVBTIiwicmVsYXRpdmVVcmwiLCJBUElfQkFTRV9VUkwiLCJsb2NhbFN0b3JhZ2UiLCJzZXRJdGVtIiwicmVtb3ZlSXQiLCJyZW1vdmVJdGVtIiwibGFuZ3VhZ2VzIiwidXNlckxhbmd1YWdlIiwiZmlyc3RFcnJvciIsImZpcnN0Tm9kZSIsImdldEVsZW1lbnRCeUlkIiwic2Nyb2xsVG8iLCJvYmplY3QxIiwib2JqZWN0MiIsImtleXMxIiwia2V5czIiLCJhMSIsImEyIiwiZXZlcnkiLCJvIiwiYnVmZmVyIiwiY3JlYXRlSGFzaCIsImRpZ2VzdCIsImNiIiwibWF4TnVtYmVyT2ZSZXRyaWVzIiwiUkVDRUlWRV9DT1VOVFJJRVMiLCJjYWxsRGVsYXkiLCJfIiwiZGVib3VuY2UiLCJmaWx0ZXJzIiwiYXBpVXJsIiwicXVlcnlUcmFja3MiLCJxdWVyeVRyYWNrR3JvdXBzIiwiYWRkUXVlcnkiLCJnZW9jb2RlciIsImdlb0NvZGVBZGRyZXNzIiwiYWRkcmVzcyIsIkdlb2NvZGVyIiwiZ2VvY29kZSIsInJlc3VsdHMiLCJHZW9jb2RlclN0YXR1cyIsIk9LIiwiZ2VvQ29kZUxhdExuZyIsImxhdGxuZyIsInBhcnNlRmxvYXQiLCJDaGVja0JveFF1ZXN0aW9uVHlwZSIsIkNvbWJvQm94UXVlc3Rpb25UeXBlIiwiQ2hlY2tCb3hMaXN0UXVlc3Rpb25UeXBlIiwiUmFkaW9CdXR0b25MaXN0UXVlc3Rpb25UeXBlIiwiQWxsb3dlZE11bHRpcGxlVmFsdWVRdWVzdGlvblR5cGUiLCJBbnN3ZXJWYWx1ZXNPcGVyYXRvcl9BbmQiLCJBbnN3ZXJWYWx1ZXNPcGVyYXRvcl9PciIsIlZpc2liaWxpdHlDb25kaXRpb25fRXF1YWwiLCJWaXNpYmlsaXR5Q29uZGl0aW9uX05vdEVxdWFsIiwiVmlzaWJpbGl0eV9WaXNpYmxlIiwiTWFpblF1ZXN0aW9uQ2xhc3NUeXBlIiwicXVlc3Rpb25CeU5hbWUiLCJxdWVzdGlvbkJ5SWQiLCJydWxlcyIsIl9wYXJzZVF1ZXN0aW9uIiwiYXYiLCJOdW1iZXIiLCJpc0ludGVnZXIiLCJpbml0aWFsQ29uZGl0aW9uIiwiYW5zd2VyX3ZhbHVlc19vcGVyYXRvciIsInBhcmVudFF1ZXN0aW9uQW5zd2VyIiwiX2dldEFuc3dlckZvciIsInBhcmVudF9xdWVzdGlvbl9pZCIsImFuc3dlclZhbHVlIiwiX2Fuc3dlckNvbnRhaW5zIiwiY2xhc3MiLCJfaGFzVmFsdWUiLCJfYWxsb3dzVmFsdWVzIiwiX2FsbG93c1ZhbHVlIiwicnVsZUlkIiwicGFyZW50X3J1bGVzIiwiX2lzU3ViUXVlc3Rpb25WaXNpYmxlIiwiX2lzQW5zd2VyZWQiLCJfY2hlY2tRdWVzdGlvbiIsInF1ZXN0aW9uIiwidXNlckFuc3dlciIsIm9yaWdpbmFsQW5zd2VycyIsImFuc1ZhbCIsInJlczEiLCJfZm9ybWF0UXVlc3Rpb25BbnN3ZXIiLCJfcGFyc2VRdWVzdGlvbnMiXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRCxPO1FDVkE7UUFDQTs7UUFFQTtRQUNBOztRQUVBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBOztRQUVBO1FBQ0E7O1FBRUE7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7OztRQUdBO1FBQ0E7O1FBRUE7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7UUFDQSwwQ0FBMEMsZ0NBQWdDO1FBQzFFO1FBQ0E7O1FBRUE7UUFDQTtRQUNBO1FBQ0Esd0RBQXdELGtCQUFrQjtRQUMxRTtRQUNBLGlEQUFpRCxjQUFjO1FBQy9EOztRQUVBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQSx5Q0FBeUMsaUNBQWlDO1FBQzFFLGdIQUFnSCxtQkFBbUIsRUFBRTtRQUNySTtRQUNBOztRQUVBO1FBQ0E7UUFDQTtRQUNBLDJCQUEyQiwwQkFBMEIsRUFBRTtRQUN2RCxpQ0FBaUMsZUFBZTtRQUNoRDtRQUNBO1FBQ0E7O1FBRUE7UUFDQSxzREFBc0QsK0RBQStEOztRQUVySDtRQUNBOzs7UUFHQTtRQUNBOzs7Ozs7Ozs7Ozs7O0FDbEZBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtB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akM7O0lBQ0EsS0FBS0MsS0FBTCxHQUFhLEVBQWI7O0lBQ0EsS0FBSzJCLGVBQUw7RUFDSDs7QUFkNkIsQzs7Ozs7Ozs7Ozs7QUNabEMsc0Y7Ozs7Ozs7Ozs7O0FDQUEsOEM7Ozs7Ozs7Ozs7O0FDQUEsbUM7Ozs7Ozs7Ozs7O0FDQUEscUM7Ozs7Ozs7Ozs7O0FDQUEsdUQ7Ozs7Ozs7Ozs7O0FDQUEsbUM7Ozs7Ozs7Ozs7O0FDQUEsdUM7Ozs7Ozs7Ozs7O0FDQUEsdUQ7Ozs7Ozs7Ozs7O0FDQUEsNkM7Ozs7Ozs7Ozs7O0FDQUEsZ0Q7Ozs7Ozs7Ozs7O0FDQUEsbUM7Ozs7Ozs7Ozs7O0FDQUEsNEM7Ozs7Ozs7Ozs7O0FDQUEsdUM7Ozs7Ozs7Ozs7O0FDQUEsa0M7Ozs7Ozs7Ozs7O0FDQUEsMkM7Ozs7Ozs7Ozs7O0FDQUEsc0M7Ozs7Ozs7Ozs7O0FDQUEsb0Q7Ozs7Ozs7Ozs7O0FDQUEsc0M7Ozs7Ozs7Ozs7O0FDQUEsMkM7Ozs7Ozs7Ozs7O0FDQUEsNkM7Ozs7Ozs7Ozs7O0FDQUEsOEM7Ozs7Ozs7Ozs7O0FDQUEsb0Y7Ozs7Ozs7Ozs7O0FDQUEsd0M7Ozs7Ozs7Ozs7O0FDQUEsc0M7Ozs7Ozs7Ozs7O0FDQUEseUM7Ozs7Ozs7Ozs7O0FDQUEsbUQ7Ozs7Ozs7Ozs7O0FDQUEsNEQ7Ozs7Ozs7Ozs7O0FDQUEsdUQ7Ozs7Ozs7Ozs7O0FDQUEsd0Q7Ozs7Ozs7Ozs7O0FDQUEsMEM7Ozs7Ozs7Ozs7O0FDQUEsdUM7Ozs7Ozs7Ozs7O0FDQUEsd0M7Ozs7Ozs7Ozs7O0FDQUEsa0M7Ozs7Ozs7Ozs7O0FDQUEscUM7Ozs7Ozs7Ozs7O0FDQUEsdUQiLCJmaWxlIjoiY29tcG9uZW50cy5qcyIsInNvdXJjZXNDb250ZW50IjpbIihmdW5jdGlvbiB3ZWJwYWNrVW5pdmVyc2FsTW9kdWxlRGVmaW5pdGlvbihyb290LCBmYWN0b3J5KSB7XG5cdGlmKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlID09PSAnb2JqZWN0Jylcblx0XHRtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkoKTtcblx0ZWxzZSBpZih0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpXG5cdFx0ZGVmaW5lKFwib3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uXCIsIFtdLCBmYWN0b3J5KTtcblx0ZWxzZSBpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcpXG5cdFx0ZXhwb3J0c1tcIm9wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvblwiXSA9IGZhY3RvcnkoKTtcblx0ZWxzZVxuXHRcdHJvb3RbXCJvcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb25cIl0gPSBmYWN0b3J5KCk7XG59KSh0aGlzLCBmdW5jdGlvbigpIHtcbnJldHVybiAiLCIgXHQvLyBUaGUgbW9kdWxlIGNhY2hlXG4gXHR2YXIgaW5zdGFsbGVkTW9kdWxlcyA9IHt9O1xuXG4gXHQvLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuIFx0ZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXG4gXHRcdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuIFx0XHRpZihpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSkge1xuIFx0XHRcdHJldHVybiBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXS5leHBvcnRzO1xuIFx0XHR9XG4gXHRcdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG4gXHRcdHZhciBtb2R1bGUgPSBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSA9IHtcbiBcdFx0XHRpOiBtb2R1bGVJZCxcbiBcdFx0XHRsOiBmYWxzZSxcbiBcdFx0XHRleHBvcnRzOiB7fVxuIFx0XHR9O1xuXG4gXHRcdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuIFx0XHRtb2R1bGVzW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuIFx0XHQvLyBGbGFnIHRoZSBtb2R1bGUgYXMgbG9hZGVkXG4gXHRcdG1vZHVsZS5sID0gdHJ1ZTtcblxuIFx0XHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuIFx0XHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG4gXHR9XG5cblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGVzIG9iamVjdCAoX193ZWJwYWNrX21vZHVsZXNfXylcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubSA9IG1vZHVsZXM7XG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlIGNhY2hlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmMgPSBpbnN0YWxsZWRNb2R1bGVzO1xuXG4gXHQvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9uIGZvciBoYXJtb255IGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uZCA9IGZ1bmN0aW9uKGV4cG9ydHMsIG5hbWUsIGdldHRlcikge1xuIFx0XHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIG5hbWUpKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIG5hbWUsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBnZXR0ZXIgfSk7XG4gXHRcdH1cbiBcdH07XG5cbiBcdC8vIGRlZmluZSBfX2VzTW9kdWxlIG9uIGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uciA9IGZ1bmN0aW9uKGV4cG9ydHMpIHtcbiBcdFx0aWYodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLnRvU3RyaW5nVGFnKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFN5bWJvbC50b1N0cmluZ1RhZywgeyB2YWx1ZTogJ01vZHVsZScgfSk7XG4gXHRcdH1cbiBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbiBcdH07XG5cbiBcdC8vIGNyZWF0ZSBhIGZha2UgbmFtZXNwYWNlIG9iamVjdFxuIFx0Ly8gbW9kZSAmIDE6IHZhbHVlIGlzIGEgbW9kdWxlIGlkLCByZXF1aXJlIGl0XG4gXHQvLyBtb2RlICYgMjogbWVyZ2UgYWxsIHByb3BlcnRpZXMgb2YgdmFsdWUgaW50byB0aGUgbnNcbiBcdC8vIG1vZGUgJiA0OiByZXR1cm4gdmFsdWUgd2hlbiBhbHJlYWR5IG5zIG9iamVjdFxuIFx0Ly8gbW9kZSAmIDh8MTogYmVoYXZlIGxpa2UgcmVxdWlyZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy50ID0gZnVuY3Rpb24odmFsdWUsIG1vZGUpIHtcbiBcdFx0aWYobW9kZSAmIDEpIHZhbHVlID0gX193ZWJwYWNrX3JlcXVpcmVfXyh2YWx1ZSk7XG4gXHRcdGlmKG1vZGUgJiA4KSByZXR1cm4gdmFsdWU7XG4gXHRcdGlmKChtb2RlICYgNCkgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAmJiB2YWx1ZS5fX2VzTW9kdWxlKSByZXR1cm4gdmFsdWU7XG4gXHRcdHZhciBucyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18ucihucyk7XG4gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShucywgJ2RlZmF1bHQnLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2YWx1ZSB9KTtcbiBcdFx0aWYobW9kZSAmIDIgJiYgdHlwZW9mIHZhbHVlICE9ICdzdHJpbmcnKSBmb3IodmFyIGtleSBpbiB2YWx1ZSkgX193ZWJwYWNrX3JlcXVpcmVfXy5kKG5zLCBrZXksIGZ1bmN0aW9uKGtleSkgeyByZXR1cm4gdmFsdWVba2V5XTsgfS5iaW5kKG51bGwsIGtleSkpO1xuIFx0XHRyZXR1cm4gbnM7XG4gXHR9O1xuXG4gXHQvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5uID0gZnVuY3Rpb24obW9kdWxlKSB7XG4gXHRcdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuIFx0XHRcdGZ1bmN0aW9uIGdldERlZmF1bHQoKSB7IHJldHVybiBtb2R1bGVbJ2RlZmF1bHQnXTsgfSA6XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0TW9kdWxlRXhwb3J0cygpIHsgcmV0dXJuIG1vZHVsZTsgfTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgJ2EnLCBnZXR0ZXIpO1xuIFx0XHRyZXR1cm4gZ2V0dGVyO1xuIFx0fTtcblxuIFx0Ly8gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSBmdW5jdGlvbihvYmplY3QsIHByb3BlcnR5KSB7IHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBwcm9wZXJ0eSk7IH07XG5cbiBcdC8vIF9fd2VicGFja19wdWJsaWNfcGF0aF9fXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnAgPSBcIlwiO1xuXG5cbiBcdC8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuIFx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oX193ZWJwYWNrX3JlcXVpcmVfXy5zID0gXCIuL3NyYy9jb21wb25lbnRzLmpzXCIpO1xuIiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBUIGZyb20gJ2kxOG4tcmVhY3QnO1xuXG5pbXBvcnQgeyBBamF4TG9hZGVyIH0gZnJvbSAnLi9jb21wb25lbnRzL2FqYXhsb2FkZXInO1xuaW1wb3J0IFJhd0hUTUwgZnJvbSAnLi9jb21wb25lbnRzL3Jhdy1odG1sL2luZGV4JztcbmltcG9ydCBGcmVlVGV4dFNlYXJjaCBmcm9tICcuL2NvbXBvbmVudHMvZnJlZS10ZXh0LXNlYXJjaC9pbmRleCc7XG5pbXBvcnQgR01hcCBmcm9tICcuL2NvbXBvbmVudHMvZ29vZ2xlLW1hcC9pbmRleCc7XG5pbXBvcnQgRGF0ZVRpbWVQaWNrZXIgZnJvbSAnLi9jb21wb25lbnRzL2lucHV0cy9kYXRldGltZXBpY2tlci9pbmRleCdcbmltcG9ydCBHcm91cGVkRHJvcGRvd24gZnJvbSAnLi9jb21wb25lbnRzL2lucHV0cy9ncm91cGVkLWRyb3Bkb3duL2luZGV4J1xuaW1wb3J0IFVwbG9hZElucHV0IGZyb20gJy4vY29tcG9uZW50cy9pbnB1dHMvdXBsb2FkLWlucHV0L2luZGV4J1xuaW1wb3J0IFVwbG9hZElucHV0VjIgZnJvbSAnLi9jb21wb25lbnRzL2lucHV0cy91cGxvYWQtaW5wdXQtdjIvaW5kZXgnXG5pbXBvcnQgQ29tcGFueUlucHV0IGZyb20gJy4vY29tcG9uZW50cy9pbnB1dHMvY29tcGFueS1pbnB1dCdcbmltcG9ydCBTcG9uc29ySW5wdXQgZnJvbSAnLi9jb21wb25lbnRzL2lucHV0cy9zcG9uc29yLWlucHV0J1xuaW1wb3J0IE9yZ2FuaXphdGlvbklucHV0IGZyb20gJy4vY29tcG9uZW50cy9pbnB1dHMvb3JnYW5pemF0aW9uLWlucHV0J1xuaW1wb3J0IENvdW50cnlEcm9wZG93biBmcm9tICcuL2NvbXBvbmVudHMvaW5wdXRzL2NvdW50cnktZHJvcGRvd24nXG5pbXBvcnQgRHJvcGRvd24gZnJvbSAnLi9jb21wb25lbnRzL2lucHV0cy9kcm9wZG93bidcbmltcG9ydCBUZXh0RWRpdG9yIGZyb20gJy4vY29tcG9uZW50cy9pbnB1dHMvZWRpdG9yLWlucHV0J1xuaW1wb3J0IFRleHRBcmVhIGZyb20gJy4vY29tcG9uZW50cy9pbnB1dHMvdGV4dGFyZWEtaW5wdXQnXG5pbXBvcnQgRXZlbnRJbnB1dCBmcm9tICcuL2NvbXBvbmVudHMvaW5wdXRzL2V2ZW50LWlucHV0J1xuaW1wb3J0IEdyb3VwSW5wdXQgZnJvbSAnLi9jb21wb25lbnRzL2lucHV0cy9ncm91cC1pbnB1dCdcbmltcG9ydCBNZW1iZXJJbnB1dCBmcm9tICcuL2NvbXBvbmVudHMvaW5wdXRzL21lbWJlci1pbnB1dCdcbmltcG9ydCBTdW1taXRJbnB1dCBmcm9tICcuL2NvbXBvbmVudHMvaW5wdXRzL3N1bW1pdC1pbnB1dCdcbmltcG9ydCBTcGVha2VySW5wdXQgZnJvbSAnLi9jb21wb25lbnRzL2lucHV0cy9zcGVha2VyLWlucHV0J1xuaW1wb3J0IFRhZ0lucHV0IGZyb20gJy4vY29tcG9uZW50cy9pbnB1dHMvdGFnLWlucHV0J1xuaW1wb3J0IElucHV0IGZyb20gJy4vY29tcG9uZW50cy9pbnB1dHMvdGV4dC1pbnB1dCdcbmltcG9ydCBQYW5lbCBmcm9tICcuL2NvbXBvbmVudHMvc2VjdGlvbnMvcGFuZWwnXG5pbXBvcnQgU2ltcGxlTGlua0xpc3QgZnJvbSAnLi9jb21wb25lbnRzL3NpbXBsZS1saW5rLWxpc3QvaW5kZXgnXG5pbXBvcnQgU3VtbWl0RHJvcGRvd24gZnJvbSAnLi9jb21wb25lbnRzL3N1bW1pdC1kcm9wZG93bi9pbmRleCdcbmltcG9ydCBUYWJsZSBmcm9tICcuL2NvbXBvbmVudHMvdGFibGUvVGFibGUnXG5pbXBvcnQgU29ydGFibGVUYWJsZSBmcm9tICcuL2NvbXBvbmVudHMvdGFibGUtc29ydGFibGUvU29ydGFibGVUYWJsZSdcbmltcG9ydCBFZGl0YWJsZVRhYmxlIGZyb20gJy4vY29tcG9uZW50cy90YWJsZS1lZGl0YWJsZS9FZGl0YWJsZVRhYmxlJ1xuaW1wb3J0IFNlbGVjdGFibGVUYWJsZSBmcm9tICcuL2NvbXBvbmVudHMvdGFibGUtc2VsZWN0YWJsZS9TZWxlY3RhYmxlVGFibGUnXG5pbXBvcnQgU2ltcGxlRm9ybSBmcm9tICcuL2NvbXBvbmVudHMvZm9ybXMvc2ltcGxlLWZvcm0nXG5pbXBvcnQgUnN2cEZvcm0gZnJvbSAnLi9jb21wb25lbnRzL2Zvcm1zL3JzdnAtZm9ybSc7XG5pbXBvcnQgUmFkaW9MaXN0IGZyb20gJy4vY29tcG9uZW50cy9pbnB1dHMvcmFkaW8tbGlzdCdcbmltcG9ydCBDaGVja2JveExpc3QgZnJvbSAnLi9jb21wb25lbnRzL2lucHV0cy9jaGVja2JveC1saXN0J1xuaW1wb3J0IEFjdGlvbkRyb3Bkb3duIGZyb20gJy4vY29tcG9uZW50cy9pbnB1dHMvYWN0aW9uLWRyb3Bkb3duJ1xuaW1wb3J0IENvdW50cnlJbnB1dCBmcm9tICcuL2NvbXBvbmVudHMvaW5wdXRzL2NvdW50cnktaW5wdXQnXG5pbXBvcnQgTGFuZ3VhZ2VJbnB1dCBmcm9tICcuL2NvbXBvbmVudHMvaW5wdXRzL2xhbmd1YWdlLWlucHV0J1xuaW1wb3J0IEZyZWVNdWx0aVRleHRJbnB1dCBmcm9tIFwiLi9jb21wb25lbnRzL2lucHV0cy9mcmVlLW11bHRpLXRleHQtaW5wdXRcIjtcbmltcG9ydCBPUFNlc3Npb25DaGVja2VyIGZyb20gXCIuL2NvbXBvbmVudHMvc2VjdXJpdHkvc2Vzc2lvbi1jaGVja2VyL29wLXNlc3Npb24tY2hlY2tlclwiO1xuaW1wb3J0IEFic3RyYWN0QXV0aG9yaXphdGlvbkNhbGxiYWNrUm91dGUgZnJvbSAgXCIuL2NvbXBvbmVudHMvc2VjdXJpdHkvYWJzdHJhY3QtYXV0aC1jYWxsYmFjay1yb3V0ZVwiO1xuaW1wb3J0IEV4Y2x1c2l2ZSBmcm9tIFwiLi9jb21wb25lbnRzL2V4Y2x1c2l2ZS13cmFwcGVyXCI7XG5pbXBvcnQgRnJhZ21lbnRQYXJzZXIgZnJvbSBcIi4vY29tcG9uZW50cy9mcmFnbWVuLXBhcnNlclwiO1xuaW1wb3J0IENsb2NrIGZyb20gXCIuL2NvbXBvbmVudHMvY2xvY2tcIjtcbmltcG9ydCBDaXJjbGVCdXR0b24gZnJvbSBcIi4vY29tcG9uZW50cy9jaXJjbGUtYnV0dG9uXCI7XG5pbXBvcnQgVmlkZW9TdHJlYW0gZnJvbSBcIi4vY29tcG9uZW50cy92aWRlby1zdHJlYW1cIjtcbmltcG9ydCBBdHRlbmRhbmNlVHJhY2tlciBmcm9tIFwiLi9jb21wb25lbnRzL2F0dGVuZGFuY2UtdHJhY2tlclwiO1xuaW1wb3J0IHtnZXRDdXJyZW50VXNlckxhbmd1YWdlfSBmcm9tICcuL3V0aWxzL21ldGhvZHMnO1xuaW1wb3J0IHVzZUZpdFRleHQgZnJvbSAnLi9jb21wb25lbnRzL3VzZS1maXQtdGV4dCc7XG5pbXBvcnQgQWNjZXNzTGV2ZWxzSW5wdXQgZnJvbSAnLi9jb21wb25lbnRzL2lucHV0cy9hY2Nlc3MtbGV2ZWxzLWlucHV0JztcbmltcG9ydCBSZWdpc3RyYXRpb25Db21wYW55SW5wdXQgZnJvbSAnLi9jb21wb25lbnRzL2lucHV0cy9yZWdpc3RyYXRpb24tY29tcGFueS1pbnB1dCc7XG5pbXBvcnQgVGlja2V0VHlwZXNJbnB1dCBmcm9tICcuL2NvbXBvbmVudHMvaW5wdXRzL3RpY2tldC10eXBlcy1pbnB1dCc7XG5pbXBvcnQgRXh0cmFRdWVzdGlvbnNGb3JtIGZyb20gJy4vY29tcG9uZW50cy9leHRyYS1xdWVzdGlvbnMnO1xuXG5sZXQgbGFuZ3VhZ2UgPSBnZXRDdXJyZW50VXNlckxhbmd1YWdlKCk7XG5cbi8vIGxhbmd1YWdlIHdvdWxkIGJlIHNvbWV0aGluZyBsaWtlIGVzLUVTIG9yIGVzX0VTXG4vLyBIb3dldmVyIHdlIHN0b3JlIG91ciBmaWxlcyB3aXRoIGZvcm1hdCBlcy5qc29uIG9yIGVuLmpzb25cbi8vIHRoZXJlZm9yZSByZXRyaWV2ZSBvbmx5IHRoZSBmaXJzdCAyIGRpZ2l0c1xuXG5pZiAobGFuZ3VhZ2UubGVuZ3RoID4gMikge1xuICAgIGxhbmd1YWdlID0gbGFuZ3VhZ2Uuc3BsaXQoXCItXCIpWzBdO1xuICAgIGxhbmd1YWdlID0gbGFuZ3VhZ2Uuc3BsaXQoXCJfXCIpWzBdO1xufVxuXG50cnkge1xuICAgIFQuc2V0VGV4dHMocmVxdWlyZShgLi9pMThuLyR7bGFuZ3VhZ2V9Lmpzb25gKSk7XG59IGNhdGNoIChlKSB7XG4gICAgVC5zZXRUZXh0cyhyZXF1aXJlKGAuL2kxOG4vZW4uanNvbmApKTtcbn1cblxuZXhwb3J0IHtcbiAgICBBamF4TG9hZGVyLFxuICAgIFJhd0hUTUwsXG4gICAgRnJlZVRleHRTZWFyY2gsXG4gICAgR01hcCxcbiAgICBEYXRlVGltZVBpY2tlcixcbiAgICBHcm91cGVkRHJvcGRvd24sXG4gICAgVXBsb2FkSW5wdXQsXG4gICAgVXBsb2FkSW5wdXRWMixcbiAgICBDb21wYW55SW5wdXQsXG4gICAgU3BvbnNvcklucHV0LFxuICAgIENvdW50cnlJbnB1dCxcbiAgICBMYW5ndWFnZUlucHV0LFxuICAgIE9yZ2FuaXphdGlvbklucHV0LFxuICAgIENvdW50cnlEcm9wZG93bixcbiAgICBEcm9wZG93bixcbiAgICBFdmVudElucHV0LFxuICAgIEdyb3VwSW5wdXQsXG4gICAgU3VtbWl0SW5wdXQsXG4gICAgTWVtYmVySW5wdXQsXG4gICAgU3BlYWtlcklucHV0LFxuICAgIFRhZ0lucHV0LFxuICAgIFRleHRFZGl0b3IsXG4gICAgVGV4dEFyZWEsXG4gICAgSW5wdXQsXG4gICAgUGFuZWwsXG4gICAgU2ltcGxlTGlua0xpc3QsXG4gICAgU3VtbWl0RHJvcGRvd24sXG4gICAgVGFibGUsXG4gICAgU29ydGFibGVUYWJsZSxcbiAgICBFZGl0YWJsZVRhYmxlLFxuICAgIFNpbXBsZUZvcm0sXG4gICAgUnN2cEZvcm0sXG4gICAgUmFkaW9MaXN0LFxuICAgIENoZWNrYm94TGlzdCxcbiAgICBBY3Rpb25Ecm9wZG93bixcbiAgICBGcmVlTXVsdGlUZXh0SW5wdXQsXG4gICAgT1BTZXNzaW9uQ2hlY2tlcixcbiAgICBBYnN0cmFjdEF1dGhvcml6YXRpb25DYWxsYmFja1JvdXRlLFxuICAgIEV4Y2x1c2l2ZSxcbiAgICBGcmFnbWVudFBhcnNlcixcbiAgICBDbG9jayxcbiAgICBDaXJjbGVCdXR0b24sXG4gICAgVmlkZW9TdHJlYW0sXG4gICAgQXR0ZW5kYW5jZVRyYWNrZXIsXG4gICAgU2VsZWN0YWJsZVRhYmxlLFxuICAgIHVzZUZpdFRleHQsXG4gICAgQWNjZXNzTGV2ZWxzSW5wdXQsXG4gICAgUmVnaXN0cmF0aW9uQ29tcGFueUlucHV0LFxuICAgIFRpY2tldFR5cGVzSW5wdXQsXG4gICAgRXh0cmFRdWVzdGlvbnNGb3JtLFxufTtcbiIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTcgT3BlblN0YWNrIEZvdW5kYXRpb25cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqKi9cblxuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcblxuZXhwb3J0IGNvbnN0IEFqYXhMb2FkZXIgPSAgKHtcbiAgICBzaG93LFxuICAgIHJlbGF0aXZlLFxuICAgIGNvbG9yLFxuICAgIHNpemUsXG4gICAgY2hpbGRyZW4sXG59KSA9PiB7XG5cbiAgICBsZXQgc3R5bGVzID0ge1xuICAgICAgICBkaXNwbGF5IDogc2hvdyA/ICdibG9jayc6ICdub25lJyxcbiAgICAgICAgd2lkdGg6JzEwMCUnLFxuICAgICAgICBoZWlnaHQ6JzEwMCUnLFxuICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmUgPyAnYWJzb2x1dGUnIDogJ2ZpeGVkJyxcbiAgICAgICAgekluZGV4OjEwMDAwMDAwLFxuICAgICAgICBtYXJnaW46J2F1dG8nLFxuICAgICAgICBjdXJzb3I6ICd3YWl0JyxcbiAgICAgICAgYmFja2dyb3VuZENvbG9yOiAncmdiYSgwLDAsMCwwLjIpJyxcbiAgICAgICAgdG9wOiAwLFxuICAgICAgICBsZWZ0OiAwXG4gICAgfTtcblxuICAgIGxldCBzdHlsZVNwaW5uZXIgPSB7XG4gICAgICAgIGZvbnRTaXplOiBzaXplICsgJ3B4JyxcbiAgICAgICAgY29sb3I6ICdibGFjaycsXG4gICAgfTtcblxuICAgIGxldCBzdHlsZVNwaW5uZXJDb250YWluZXIgPSB7XG4gICAgICAgIHdpZHRoOiAnMjUwcHgnLFxuICAgICAgICBoZWlnaHQ6Jzc1cHgnLFxuICAgICAgICB0ZXh0QWxpZ246ICdjZW50ZXInLFxuICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmUgPyAncmVsYXRpdmUnIDogJ2ZpeGVkJyxcbiAgICAgICAgdG9wOiByZWxhdGl2ZSA/ICc1MCUnIDogJzAnLFxuICAgICAgICBsZWZ0OiByZWxhdGl2ZSA/ICcnIDogJzAnLFxuICAgICAgICByaWdodDonMCcsXG4gICAgICAgIGJvdHRvbTonMCcsXG4gICAgICAgIG1hcmdpbjonYXV0bycsXG4gICAgICAgIHpJbmRleDoxMCxcbiAgICAgICAgY29sb3I6JyNmZmZmZmYnXG4gICAgfTtcblxuICAgIGxldCBzdHlsZUJhY2tncm91bmQgPSB7XG4gICAgICAgIGJhY2tncm91bmQ6IGNvbG9yLFxuICAgICAgICBvcGFjaXR5OicwLjgnLFxuICAgICAgICB3aWR0aDonMTAwJScsXG4gICAgICAgIGhlaWdodDonMTAwJScsXG4gICAgICAgIHBvc2l0aW9uOidhYnNvbHV0ZScsXG4gICAgICAgIHRvcDowXG4gICAgfTtcblxuICAgIHJldHVybiAoXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiYWpheC1sb2FkZXItY29udGFpbmVyXCIgc3R5bGU9e3N0eWxlc30+XG4gICAgICAgICAgICA8ZGl2IHN0eWxlPXtzdHlsZVNwaW5uZXJDb250YWluZXJ9PlxuICAgICAgICAgICAgICAgIDxpIGNsYXNzTmFtZT1cImZhIGZhLXNwaW5uZXIgZmEtc3BpblwiIHN0eWxlPXtzdHlsZVNwaW5uZXJ9PjwvaT5cbiAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgIHtjaGlsZHJlbn1cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBzdHlsZT17c3R5bGVCYWNrZ3JvdW5kfSBjbGFzc05hbWU9XCJsb2FkZXItYmFja2dyb3VuZFwiPjwvZGl2PlxuICAgICAgICA8L2Rpdj5cbik7XG59O1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMCBPcGVuU3RhY2sgRm91bmRhdGlvblxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICoqL1xuXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBodHRwIGZyb20gJ3N1cGVyYWdlbnQnO1xuaW1wb3J0IHtnZXRBY2Nlc3NUb2tlbn0gZnJvbSAnLi9zZWN1cml0eS9tZXRob2RzJztcblxuLy8gU0NPUEVTIE5FRURFRFxuLy8gJXMvbWUvc3VtbWl0cy9ldmVudHMvbGVhdmVcbi8vICVzL21lL3N1bW1pdHMvZXZlbnRzL2VudGVyXG5cbmNsYXNzIEF0dGVuZGFuY2VUcmFja2VyIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcblxuICAgIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgICAgICBjb25zdCB7dHJhY2tFbnRlciwgb25CZWZvcmVVbmxvYWR9ID0gdGhpcztcblxuICAgICAgICAvLyB0cmFjayBlbnRlclxuICAgICAgICB0cmFja0VudGVyKCk7XG5cbiAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcImJlZm9yZXVubG9hZFwiLCBvbkJlZm9yZVVubG9hZCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICAgICAgY29uc3Qge3RyYWNrTGVhdmUsIG9uQmVmb3JlVW5sb2FkfSA9IHRoaXM7XG5cbiAgICAgICAgLy8gdHJhY2sgbGVhdmVcbiAgICAgICAgdHJhY2tMZWF2ZSgpO1xuXG4gICAgICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJiZWZvcmV1bmxvYWRcIiwgb25CZWZvcmVVbmxvYWQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdHJhY2tFbnRlciA9IGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3Qge2FwaUJhc2VVcmwsIHN1bW1pdElkLCBzb3VyY2VJZCwgc291cmNlTmFtZX0gPSB0aGlzLnByb3BzO1xuICAgICAgICBjb25zdCBsb2NhdGlvbiA9IHRoaXMuZ2V0TG9jYXRpb24oKTtcbiAgICAgICAgdHJ5e1xuICAgICAgICAgICAgY29uc3QgYWNjZXNzVG9rZW4gPSBhd2FpdCBnZXRBY2Nlc3NUb2tlbigpO1xuICAgICAgICAgICAgaHR0cC5wdXQoYCR7YXBpQmFzZVVybH0vYXBpL3YxL3N1bW1pdHMvJHtzdW1taXRJZH0vbWV0cmljcy9lbnRlcmApXG4gICAgICAgICAgICAgICAgLnNlbmQoe2FjY2Vzc190b2tlbjogYWNjZXNzVG9rZW4sIHR5cGU6IHNvdXJjZU5hbWUsIHNvdXJjZV9pZDogc291cmNlSWQsIGxvY2F0aW9uOiBsb2NhdGlvbn0pXG4gICAgICAgICAgICAgICAgLmVuZCgoKSA9PiBjb25zb2xlLmxvZygnRU5URVIgUEFHRScpKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZSl7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhlKTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICB0cmFja0xlYXZlID0gYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCB7YXBpQmFzZVVybCwgc3VtbWl0SWQsIHNvdXJjZUlkLCBzb3VyY2VOYW1lfSA9IHRoaXMucHJvcHM7XG4gICAgICAgIGNvbnN0IGxvY2F0aW9uID0gdGhpcy5nZXRMb2NhdGlvbigpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgYWNjZXNzVG9rZW4gPSBhd2FpdCBnZXRBY2Nlc3NUb2tlbigpO1xuXG4gICAgICAgICAgICBodHRwLnBvc3QoYCR7YXBpQmFzZVVybH0vYXBpL3YxL3N1bW1pdHMvJHtzdW1taXRJZH0vbWV0cmljcy9sZWF2ZWApXG4gICAgICAgICAgICAgICAgLnNlbmQoe2FjY2Vzc190b2tlbjogYWNjZXNzVG9rZW4sIHR5cGU6IHNvdXJjZU5hbWUsIHNvdXJjZV9pZDogc291cmNlSWQsIGxvY2F0aW9uOiBsb2NhdGlvbn0pXG4gICAgICAgICAgICAgICAgLmVuZCgoKSA9PiBjb25zb2xlLmxvZygnTEVGVCBQQUdFJykpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlKXtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGUpO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIG9uQmVmb3JlVW5sb2FkID0gYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCB7YXBpQmFzZVVybCwgc3VtbWl0SWQsIHNvdXJjZUlkLCBzb3VyY2VOYW1lfSA9IHRoaXMucHJvcHM7XG4gICAgICAgIGNvbnN0IGxvY2F0aW9uID0gdGhpcy5nZXRMb2NhdGlvbigpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgYWNjZXNzVG9rZW4gPSBhd2FpdCBnZXRBY2Nlc3NUb2tlbigpO1xuICAgICAgICAgICAgbmF2aWdhdG9yLnNlbmRCZWFjb24oXG4gICAgICAgICAgICAgICAgYCR7YXBpQmFzZVVybH0vYXBpL3YxL3N1bW1pdHMvJHtzdW1taXRJZH0vbWV0cmljcy9sZWF2ZT9hY2Nlc3NfdG9rZW49JHthY2Nlc3NUb2tlbn0mdHlwZT0ke3NvdXJjZU5hbWV9JnNvdXJjZV9pZD0ke3NvdXJjZUlkfSZsb2NhdGlvbj0ke2xvY2F0aW9ufWAsIHt9KTtcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGUpe1xuICAgICAgICAgICAgY29uc29sZS5sb2coZSk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgZ2V0TG9jYXRpb24gPSAoKSA9PiB7XG4gICAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICByZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KHdpbmRvdy5sb2NhdGlvbi5ocmVmKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiAnJztcbiAgICB9O1xuXG4gICAgcmVuZGVyKCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG59XG5cbkF0dGVuZGFuY2VUcmFja2VyLnByb3BUeXBlcyA9IHtcbiAgICBzb3VyY2VOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIHNvdXJjZUlkOiBQcm9wVHlwZXMubnVtYmVyLFxuICAgIHN1bW1pdElkOiBQcm9wVHlwZXMubnVtYmVyLmlzUmVxdWlyZWQsXG4gICAgYXBpQmFzZVVybDogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkXG59O1xuXG5BdHRlbmRhbmNlVHJhY2tlci5kZWZhdWx0UHJvcHMgPSB7XG4gICAgc291cmNlSWQ6IDAsXG4gICAgc291cmNlTmFtZTogJ0dFTkVSQUwnXG59O1xuXG5leHBvcnQgZGVmYXVsdCBBdHRlbmRhbmNlVHJhY2tlcjtcblxuIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMCBPcGVuU3RhY2sgRm91bmRhdGlvblxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICoqL1xuXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcblxuaW1wb3J0IHN0eWxlcyBmcm9tICcuL2luZGV4Lm1vZHVsZS5zY3NzJztcblxuY29uc3QgaXNMaXZlID0gKGV2ZW50LCBub3dVdGMpID0+IHtcbiAgICBjb25zdCBoYXNFbmRlZCA9IG5vd1V0YyA+IGV2ZW50LmVuZF9kYXRlO1xuICAgIGNvbnN0IGhhc1N0YXJ0ZWQgPSAoZXZlbnQuc3RhcnRfZGF0ZSAtIG5vd1V0YykgPCAxO1xuICAgIHJldHVybiBoYXNTdGFydGVkICYmICFoYXNFbmRlZDtcbn07XG5cbmNvbnN0IENpcmNsZUJ1dHRvbiA9ICh7ZXZlbnQsIGlzU2NoZWR1bGVkLCBub3dVdGMsIGFkZFRvU2NoZWR1bGUsIHJlbW92ZUZyb21TY2hlZHVsZSwgZW50ZXJDbGljaywgYWx3YXlzU2hvd0VudGVyfSkgPT4ge1xuXG4gICAgY29uc3QgaXNMaXZlTm93ID0gaXNMaXZlKGV2ZW50LCBub3dVdGMpO1xuICAgIGxldCBidXR0b25DbGFzcyA9IG51bGw7XG4gICAgbGV0IGljb25DbGFzcyA9IG51bGw7XG4gICAgbGV0IG9uQ2xpY2sgPSBudWxsO1xuICAgIGNvbnN0IGhhbmRsZUNsaWNrID0gKGV2LCBhY3Rpb24pID0+IHtcbiAgICAgICAgZXYucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgZXYuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIGFjdGlvbihldmVudCk7XG4gICAgfTtcblxuXG4gICAgaWYgKGlzTGl2ZU5vdyB8fCBhbHdheXNTaG93RW50ZXIpIHtcbiAgICAgICAgYnV0dG9uQ2xhc3MgPSBgJHtzdHlsZXMuZW50ZXJ9IGVudGVyYDtcbiAgICAgICAgaWNvbkNsYXNzID0gJ2ZhLXNpZ24taW4nO1xuICAgICAgICBvbkNsaWNrID0gZXYgPT4gaGFuZGxlQ2xpY2soZXYsIGVudGVyQ2xpY2spO1xuICAgIH0gZWxzZSBpZiAocmVtb3ZlRnJvbVNjaGVkdWxlICYmIGFkZFRvU2NoZWR1bGUgJiYgaXNTY2hlZHVsZWQpIHtcbiAgICAgICAgYnV0dG9uQ2xhc3MgPSBgJHtzdHlsZXMuYWRkZWR9IGFkZGVkYDtcbiAgICAgICAgaWNvbkNsYXNzID0gJ2ZhLWNoZWNrJztcbiAgICAgICAgb25DbGljayA9IGV2ID0+IGhhbmRsZUNsaWNrKGV2LCByZW1vdmVGcm9tU2NoZWR1bGUpO1xuICAgIH0gZWxzZSBpZiAocmVtb3ZlRnJvbVNjaGVkdWxlICYmIGFkZFRvU2NoZWR1bGUpIHtcbiAgICAgICAgYnV0dG9uQ2xhc3MgPSBgJHtzdHlsZXMuYWRkfSBhZGRgO1xuICAgICAgICBpY29uQ2xhc3MgPSAnZmEtcGx1cyc7XG4gICAgICAgIG9uQ2xpY2sgPSBldiA9PiBoYW5kbGVDbGljayhldiwgYWRkVG9TY2hlZHVsZSk7XG4gICAgfVxuXG4gICAgaWYgKCFvbkNsaWNrKSByZXR1cm4gbnVsbDtcblxuXG4gICAgcmV0dXJuIChcbiAgICAgICAgPGJ1dHRvbiBjbGFzc05hbWU9e2Ake3N0eWxlcy5jaXJjbGVCdXR0b259ICR7YnV0dG9uQ2xhc3N9YH0gb25DbGljaz17b25DbGlja30+XG4gICAgICAgICAgICA8aSBjbGFzc05hbWU9e2BmYSAke2ljb25DbGFzc31gfSBhcmlhLWhpZGRlbj1cInRydWVcIiAvPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICApO1xufTtcblxuQ2lyY2xlQnV0dG9uLnByb3BUeXBlcyA9IHtcbiAgICBldmVudDogUHJvcFR5cGVzLm9iamVjdC5pc1JlcXVpcmVkLFxuICAgIG5vd1V0YzogUHJvcFR5cGVzLm51bWJlci5pc1JlcXVpcmVkLFxuICAgIGlzU2NoZWR1bGVkOiBQcm9wVHlwZXMuYm9vbC5pc1JlcXVpcmVkLFxuICAgIGVudGVyQ2xpY2s6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgYWRkVG9TY2hlZHVsZTogUHJvcFR5cGVzLmZ1bmMsXG4gICAgcmVtb3ZlRnJvbVNjaGVkdWxlOiBQcm9wVHlwZXMuZnVuYyxcbiAgICBhbHdheXNTaG93RW50ZXI6IFByb3BUeXBlcy5ib29sLFxufTtcblxuQ2lyY2xlQnV0dG9uLmRlZmF1bHRQcm9wcyA9IHtcbiAgICBhZGRUb1NjaGVkdWxlOiBudWxsLFxuICAgIHJlbW92ZUZyb21TY2hlZHVsZTogbnVsbCxcbiAgICBhbHdheXNTaG93RW50ZXI6IGZhbHNlXG59O1xuXG5leHBvcnQgZGVmYXVsdCBDaXJjbGVCdXR0b247XG4iLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbm1vZHVsZS5leHBvcnRzID0ge1wiY2lyY2xlQnV0dG9uXCI6XCJfMzRsMldtWWpzZVpHdFlZd0VDMjZaUlwiLFwiYWRkXCI6XCJfMS1wYzFsWU5aMjVqVlJKY0NpU0VCdFwiLFwiYWRkZWRcIjpcIl8yQkxzX3dUenIyR19QSEdHS3VXdkN0XCIsXCJlbnRlclwiOlwiXzF2YnNnNnhmNU9XRjNpR0RQeXFfMDNcIn07IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMCBPcGVuU3RhY2sgRm91bmRhdGlvblxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICoqL1xuXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IG1vbWVudCBmcm9tIFwibW9tZW50LXRpbWV6b25lXCI7XG5pbXBvcnQgRnJhZ21lbnRQYXJzZXIgZnJvbSBcIi4vZnJhZ21lbi1wYXJzZXJcIjtcblxuY2xhc3MgQ2xvY2sgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICAgICAgc3VwZXIocHJvcHMpO1xuICAgICAgICB0aGlzLmZyYWdtZW50UGFyc2VyID0gbmV3IEZyYWdtZW50UGFyc2VyKCk7XG4gICAgICAgIHRoaXMuaW50ZXJ2YWwgPSBudWxsO1xuICAgICAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgICAgICAgdGltZXN0YW1wOiBudWxsXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBhc3luYyBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICAgICAgY29uc3Qge3RpbWV6b25lID0gJ1VUQycsIG5vd30gPSB0aGlzLnByb3BzO1xuICAgICAgICBjb25zdCBub3dRUyA9IHRoaXMuZnJhZ21lbnRQYXJzZXIuZ2V0UGFyYW0oJ25vdycpO1xuICAgICAgICBjb25zdCBtb21lbnRRUyA9IG1vbWVudC50eihub3dRUywgJ1lZWVktTU0tREQsaGg6bW06c3MnLCB0aW1lem9uZSk7XG4gICAgICAgIGxldCB0aW1lc3RhbXA7XG5cbiAgICAgICAgaWYgKG1vbWVudFFTLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgdGltZXN0YW1wID0gbW9tZW50UVMudmFsdWVPZigpIC8gMTAwMDtcbiAgICAgICAgfSBlbHNlIGlmIChub3cpIHtcbiAgICAgICAgICAgIHRpbWVzdGFtcCA9IG5vd1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgbG9jYWwgPSBtb21lbnQoKS51bml4KCk7XG4gICAgICAgICAgICBjb25zdCBzZXJ2ZXJUaW1lID0gIGF3YWl0IHRoaXMuZ2V0U2VydmVyVGltZSgpO1xuICAgICAgICAgICAgY29uc3QgbG9jYWxBZnRlciA9IG1vbWVudCgpLnVuaXgoKTtcblxuICAgICAgICAgICAgaWYgKHNlcnZlclRpbWUpIHtcbiAgICAgICAgICAgICAgICB0aW1lc3RhbXAgPSBzZXJ2ZXJUaW1lLnRpbWVzdGFtcCArIChsb2NhbEFmdGVyIC0gbG9jYWwpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aW1lc3RhbXAgPSBsb2NhbEFmdGVyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7dGltZXN0YW1wfSk7XG4gICAgICAgIHRoaXMucHJvcHMub25UaWNrKHRpbWVzdGFtcCk7XG5cbiAgICAgICAgdGhpcy5pbnRlcnZhbCA9IHNldEludGVydmFsKHRoaXMudGljaywgMTAwMCk7XG4gICAgfVxuXG4gICAgY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgICAgIGNsZWFySW50ZXJ2YWwodGhpcy5pbnRlcnZhbCk7XG4gICAgfVxuXG4gICAgZ2V0U2VydmVyVGltZSA9IGFzeW5jICgpID0+IHtcbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2goYGh0dHBzOi8vdGltZWludGVydmFsc2luY2UxOTcwLmFwcHNwb3QuY29tL2ApXG4gICAgICAgICAgICAuY2F0Y2goZXJyID0+IHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhlcnIpO1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIGF3YWl0IHJlc3BvbnNlLmpzb24oKTtcbiAgICB9O1xuXG4gICAgdGljayA9ICgpID0+IHtcbiAgICAgICAgY29uc3Qge3RpbWVzdGFtcH0gPSB0aGlzLnN0YXRlO1xuICAgICAgICBpZiAodGltZXN0YW1wICE9PSBudWxsKSB7ICAgXG4gICAgICAgICAgICB0aGlzLnByb3BzLm9uVGljayh0aW1lc3RhbXAgKyAxKTtcbiAgICAgICAgICAgIHRoaXMuc2V0U3RhdGUoe3RpbWVzdGFtcDogdGltZXN0YW1wICsgMX0pXG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgLy8gZXBvY2ggdXRjIHRpbWUgaW4gc2Vjb25kc1xuICAgIG5vdyA9ICgpID0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RhdGUudGltZXN0YW1wO1xuICAgIH07XG5cbiAgICByZW5kZXIoKSB7XG4gICAgICAgIGNvbnN0IHtkaXNwbGF5LCB0aW1lem9uZSA9ICdVVEMnfSA9IHRoaXMucHJvcHM7XG4gICAgICAgIGNvbnN0IHt0aW1lc3RhbXB9ID0gdGhpcy5zdGF0ZTtcblxuICAgICAgICBpZiAoIWRpc3BsYXkgfHwgIXRpbWVzdGFtcCkgcmV0dXJuIG51bGw7XG5cbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxkaXYgc3R5bGU9e3ttYXJnaW5Ub3A6ICc1MHB4JywgdGV4dEFsaWduOiAnY2VudGVyJywgZm9udFNpemU6ICcyMHB4J319PlxuICAgICAgICAgICAgICAgIHttb21lbnQudHoodGltZXN0YW1wKjEwMDAsIHRpbWV6b25lKS5mb3JtYXQoJ1lZWVktTU0tREQgaGg6bW06c3MnKX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICApO1xuICAgIH1cblxufVxuXG5leHBvcnQgZGVmYXVsdCBDbG9jaztcbiIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTkgT3BlblN0YWNrIEZvdW5kYXRpb25cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqKi9cblxuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0J1xuXG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEV4Y2x1c2l2ZSBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgICAgICBzdXBlcihwcm9wcyk7XG5cbiAgICAgICAgdGhpcy5zaG93RmllbGQgPSB0aGlzLnNob3dGaWVsZC5iaW5kKHRoaXMpO1xuICAgIH1cblxuICAgIHNob3dGaWVsZCgpIHtcbiAgICAgICAgbGV0IHtuYW1lfSA9IHRoaXMucHJvcHM7XG4gICAgICAgIGxldCBleGNsdXNpdmVTZWN0aW9ucyA9IHdpbmRvdy5FWENMVVNJVkVfU0VDVElPTlM7XG5cbiAgICAgICAgcmV0dXJuIGV4Y2x1c2l2ZVNlY3Rpb25zID8gZXhjbHVzaXZlU2VjdGlvbnMuaW5jbHVkZXMobmFtZSkgOiBmYWxzZTtcbiAgICB9XG5cbiAgICByZW5kZXIoKSB7XG4gICAgICAgIGxldCB7Y2hpbGRyZW59ID0gdGhpcy5wcm9wcztcblxuICAgICAgICBpZiAodGhpcy5zaG93RmllbGQoKSkge1xuICAgICAgICAgICAgcmV0dXJuIGNoaWxkcmVuO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG51bGw7XG5cbiAgICB9XG59XG4iLCIvKipcbiAqIENvcHlyaWdodCAyMDE3IE9wZW5TdGFjayBGb3VuZGF0aW9uXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiovXG5cbmltcG9ydCBSZWFjdCwge3VzZUVmZmVjdCwgdXNlUmVmLCB1c2VTdGF0ZX0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcblxuaW1wb3J0IFJhd0hUTUwgZnJvbSAnLi4vcmF3LWh0bWwnXG5pbXBvcnQgSW5wdXQgZnJvbSAnLi4vaW5wdXRzL3RleHQtaW5wdXQnXG5pbXBvcnQgRHJvcGRvd24gZnJvbSAnLi4vaW5wdXRzL2Ryb3Bkb3duJ1xuaW1wb3J0IFJhZGlvTGlzdCBmcm9tICcuLi9pbnB1dHMvcmFkaW8tbGlzdCdcbmltcG9ydCBDaGVja2JveExpc3QgZnJvbSAnLi4vaW5wdXRzL2NoZWNrYm94LWxpc3QnXG5pbXBvcnQgUXVlc3Rpb25zU2V0IGZyb20gJy4uLy4uL3V0aWxzL3F1ZXN0aW9ucy1zZXQnO1xuaW1wb3J0IHtGaWVsZCwgRm9ybX0gZnJvbSBcInJlYWN0LWZpbmFsLWZvcm1cIjtcblxuY29uc3QgRXh0cmFRdWVzdGlvbnNGb3JtID0gKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmFRdWVzdGlvbnMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXJBbnN3ZXJzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkFuc3dlckNoYW5nZXMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZSA9ICdxdWVzdGlvbnMtZm9ybScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXN0aW9uQ29udGFpbmVyQ2xhc3NOYW1lID0gJ3F1ZXN0aW9uLWNvbnRhaW5lcicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXN0aW9uTGFiZWxDb250YWluZXJDbGFzc05hbWUgPSAncXVlc3Rpb24tbGFiZWwtY29udGFpbmVyJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVlc3Rpb25Db250cm9sQ29udGFpbmVyQ2xhc3NOYW1lPSAncXVlc3Rpb24tY29udHJvbC1jb250YWluZXInLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtUmVmID0gbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZE9ubHkgPSBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVidWcgPSBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnV0dG9uVGV4dCA9ICdTdWJtaXQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXF1aXJlZEVycm9yTWVzc2FnZSA9ICdSZXF1aXJlZCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZhbGlkYXRpb25FcnJvckNsYXNzTmFtZSA9ICdleHRyYS1xdWVzdGlvbi1lcnJvcidcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSA9PiB7XG5cbiAgICBsZXQgc3VibWl0ID0gbnVsbDtcblxuICAgIGNvbnN0IHF1ZXN0aW9uUmVmID0gdXNlUmVmKHt9KTtcblxuICAgIGNvbnN0IFthbnN3ZXJzLCBzZXRBbnN3ZXJzXSA9IHVzZVN0YXRlKHt9KTtcblxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIGZvcm1hdFVzZXJBbnN3ZXJzKCk7XG4gICAgfSwgW2V4dHJhUXVlc3Rpb25zXSlcblxuICAgIGNvbnN0IGZvcm1hdFVzZXJBbnN3ZXJzID0gKCkgPT4ge1xuICAgICAgICBjb25zdCBxcyA9IG5ldyBRdWVzdGlvbnNTZXQoZXh0cmFRdWVzdGlvbnMsIHVzZXJBbnN3ZXJzKTtcbiAgICAgICAgc2V0QW5zd2Vycyhxcy5mb3JtYXRBbnN3ZXJzKCkpO1xuICAgIH1cblxuICAgIGNvbnN0IENvbmRpdGlvbiA9ICh7d2hlbiwgcnVsZSwgY2hpbGRyZW59KSA9PiAoXG4gICAgICAgIDxGaWVsZCBuYW1lPXt3aGVufSBzdWJzY3JpcHRpb249e3t2YWx1ZTogdHJ1ZX19PlxuICAgICAgICAgICAgeyh7aW5wdXQ6IHt2YWx1ZX19KSA9PlxuICAgICAgICAgICAgICAgIGNoZWNrVmlzaWJpbGl0eShydWxlLCBjaGVja1J1bGUodmFsdWUsIHJ1bGUpLCBjaGlsZHJlbilcbiAgICAgICAgICAgIH1cbiAgICAgICAgPC9GaWVsZD5cbiAgICApO1xuXG4gICAgY29uc3QgRXJyb3IgPSAoeyBuYW1lIH0pID0+IChcbiAgICAgICAgPEZpZWxkIG5hbWU9e25hbWV9IHN1YnNjcmlwdGlvbj17eyBlcnJvcjogdHJ1ZSwgdG91Y2hlZDogdHJ1ZSB9fT5cbiAgICAgICAgICAgIHsoeyBtZXRhOiB7IGVycm9yLCB0b3VjaGVkIH0gfSkgPT5cbiAgICAgICAgICAgICAgICBlcnJvciAmJiB0b3VjaGVkID8gPHNwYW4gY2xhc3NOYW1lPXtWYWxpZGF0aW9uRXJyb3JDbGFzc05hbWV9PntlcnJvcn08L3NwYW4+IDogbnVsbFxuICAgICAgICAgICAgfVxuICAgICAgICA8L0ZpZWxkPlxuICAgIClcblxuICAgIGNvbnN0IGNoZWNrUnVsZSA9ICh2YWx1ZSwgcnVsZSkgPT4ge1xuICAgICAgICBsZXQgdmFsdWVzID0gcnVsZS5hbnN3ZXJfdmFsdWVzO1xuXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICAgICAgaWYgKCF2YWx1ZS5sZW5ndGgpIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIGxldCByZXMgPSBydWxlLmFud2VyX3ZhbHVlc19vcGVyYXRvciA9PT0gXCJBbmRcIjtcbiAgICAgICAgICAgIHZhbHVlcy5mb3JFYWNoKCh2KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHJ1bGUuYW53ZXJfdmFsdWVzX29wZXJhdG9yID09PSBcIkFuZFwiKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlcyA9IHJlcyAmJiB2YWx1ZS5pbmNsdWRlcyhwYXJzZUludCh2KSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gT3JcbiAgICAgICAgICAgICAgICAgICAgcmVzID0gcmVzIHx8IHZhbHVlLmluY2x1ZGVzKHBhcnNlSW50KHYpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiByZXM7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZhbHVlcy5pbmNsdWRlcyh2YWx1ZS50b1N0cmluZygpKTtcbiAgICB9O1xuXG4gICAgY29uc3QgY2hlY2tWaXNpYmlsaXR5ID0gKHJ1bGUsIHJ1bGVSZXN1bHQsIGNoaWxkcmVuKSA9PiB7XG4gICAgICAgIGlmIChydWxlLnZpc2liaWxpdHkgPT09IFwiVmlzaWJsZVwiKSB7XG4gICAgICAgICAgICBpZiAocnVsZS52aXNpYmlsaXR5X2NvbmRpdGlvbiA9PT0gXCJFcXVhbFwiKSB7XG4gICAgICAgICAgICAgICAgaWYocnVsZVJlc3VsdCkgcmV0dXJuIGNoaWxkcmVuO1xuICAgICAgICAgICAgICAgIGRlbGV0ZSBxdWVzdGlvblJlZi5jdXJyZW50W3J1bGUuc3ViX3F1ZXN0aW9uLmlkXVxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gTm9uIEVxdWFsXG4gICAgICAgICAgICBpZighcnVsZVJlc3VsdCl7XG4gICAgICAgICAgICAgIHJldHVybiBjaGlsZHJlbjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRlbGV0ZSBxdWVzdGlvblJlZi5jdXJyZW50W3J1bGUuc3ViX3F1ZXN0aW9uLmlkXVxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgLy8gbm90IHZpc2libGVcbiAgICAgICAgaWYgKHJ1bGUudmlzaWJpbGl0eV9jb25kaXRpb24gPT09IFwiRXF1YWxcIikge1xuICAgICAgICAgICAgaWYoIXJ1bGVSZXN1bHQpIHJldHVybiBjaGlsZHJlbjtcbiAgICAgICAgICAgIGRlbGV0ZSBxdWVzdGlvblJlZi5jdXJyZW50W3J1bGUuc3ViX3F1ZXN0aW9uLmlkXVxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgaWYocnVsZVJlc3VsdCkgcmV0dXJuIGNoaWxkcmVuO1xuICAgICAgICBkZWxldGUgcXVlc3Rpb25SZWYuY3VycmVudFtydWxlLnN1Yl9xdWVzdGlvbi5pZF1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfTtcblxuICAgIGNvbnN0IHJlbmRlclF1ZXN0aW9uID0gKHEpID0+IHtcbiAgICAgICAgbGV0IHF1ZXN0aW9uVmFsdWVzID0gcS52YWx1ZXM7XG4gICAgICAgIC8vIEBzZWUgaHR0cHM6Ly9jb2Rlc2FuZGJveC5pby9zL3ZnMDV5P2ZpbGU9L2luZGV4LmpzXG4gICAgICAgIGlmIChxLnR5cGUgPT09IFwiVGV4dFwiKSB7XG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYga2V5PXtxLm5hbWV9IHJlZj17ZWwgPT4gcXVlc3Rpb25SZWYuY3VycmVudFtxLmlkXSA9IGVsfSBjbGFzc05hbWU9e3F1ZXN0aW9uQ29udGFpbmVyQ2xhc3NOYW1lfT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxSYXdIVE1MIGNsYXNzTmFtZT17cXVlc3Rpb25MYWJlbENvbnRhaW5lckNsYXNzTmFtZX0+e3EubWFuZGF0b3J5ID8gcS5sYWJlbD8uZW5kc1dpdGgoJzwvcD4nKSA/IHEubGFiZWwucmVwbGFjZSgvPFxcL3A+JC9nLCBcIiA8Yj4qPC9iPjwvcD5cIikgOiBgJHtxLmxhYmVsfSA8Yj4qPC9iPmAgOiBxLmxhYmVsfTwvUmF3SFRNTD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxGaWVsZCBuYW1lPXtxLm5hbWV9IGNsYXNzTmFtZT17cXVlc3Rpb25Db250cm9sQ29udGFpbmVyQ2xhc3NOYW1lfSB0eXBlPVwidGV4dFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtwcm9wcyA9PiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxJbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT17cS5uYW1lfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ9e2Ake3EuaWR9YH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPXtwcm9wcy5pbnB1dC52YWx1ZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXtwcm9wcy5pbnB1dC5vbkNoYW5nZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPXtxLnBsYWNlaG9sZGVyfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgICAgICA8L0ZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPEVycm9yIG5hbWU9e3EubmFtZX0vPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAge3Euc3ViX3F1ZXN0aW9uX3J1bGVzPy5sZW5ndGggPiAwICYmXG4gICAgICAgICAgICAgICAgICAgIHEuc3ViX3F1ZXN0aW9uX3J1bGVzLm1hcCgocikgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Q29uZGl0aW9uIHdoZW49e3EubmFtZX0gcnVsZT17cn0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtyZW5kZXJRdWVzdGlvbihyLnN1Yl9xdWVzdGlvbil9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9Db25kaXRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB9KX1cbiAgICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHEudHlwZSA9PT0gXCJUZXh0QXJlYVwiKSB7XG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYga2V5PXtxLm5hbWV9IHJlZj17ZWwgPT4gcXVlc3Rpb25SZWYuY3VycmVudFtxLmlkXSA9IGVsfSBjbGFzc05hbWU9e3F1ZXN0aW9uQ29udGFpbmVyQ2xhc3NOYW1lfT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxSYXdIVE1MIGNsYXNzTmFtZT17cXVlc3Rpb25MYWJlbENvbnRhaW5lckNsYXNzTmFtZX0+e3EubWFuZGF0b3J5ID8gcS5sYWJlbD8uZW5kc1dpdGgoJzwvcD4nKSA/IHEubGFiZWwucmVwbGFjZSgvPFxcL3A+JC9nLCBcIiA8Yj4qPC9iPjwvcD5cIikgOiBgJHtxLmxhYmVsfSA8Yj4qPC9iPmAgOiBxLmxhYmVsfTwvUmF3SFRNTD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxGaWVsZCBjbGFzc05hbWU9e3F1ZXN0aW9uQ29udHJvbENvbnRhaW5lckNsYXNzTmFtZX0gbmFtZT17cS5uYW1lfSBpZD17YCR7cS5pZH1gfSBjb21wb25lbnQ9XCJ0ZXh0YXJlYVwiLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxFcnJvciBuYW1lPXtxLm5hbWV9Lz5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIHtxLnN1Yl9xdWVzdGlvbl9ydWxlcz8ubGVuZ3RoID4gMCAmJlxuICAgICAgICAgICAgICAgICAgICBxLnN1Yl9xdWVzdGlvbl9ydWxlcy5tYXAoKHIpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPENvbmRpdGlvbiB3aGVuPXtxLm5hbWV9IHJ1bGU9e3J9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7cmVuZGVyUXVlc3Rpb24oci5zdWJfcXVlc3Rpb24pfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvQ29uZGl0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGlmIChxLnR5cGUgPT09IFwiQ2hlY2tCb3hcIikge1xuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGtleT17cS5uYW1lfSByZWY9e2VsID0+IHF1ZXN0aW9uUmVmLmN1cnJlbnRbcS5pZF0gPSBlbH0gc3R5bGU9e3tkaXNwbGF5OiAnZmxleCd9fSBjbGFzc05hbWU9e3F1ZXN0aW9uQ29udGFpbmVyQ2xhc3NOYW1lfT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxGaWVsZCBjbGFzc05hbWU9e3F1ZXN0aW9uQ29udHJvbENvbnRhaW5lckNsYXNzTmFtZX0gbmFtZT17cS5uYW1lfSBpZD17YCR7cS5pZH1gfSB0eXBlPVwiY2hlY2tib3hcIiBjb21wb25lbnQ9XCJpbnB1dFwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8UmF3SFRNTCBjbGFzc05hbWU9e2BlcS1jaGVja2JveC1sYWJlbCAke3F1ZXN0aW9uTGFiZWxDb250YWluZXJDbGFzc05hbWV9YH0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3EubWFuZGF0b3J5ID8gcS5sYWJlbD8uZW5kc1dpdGgoJzwvcD4nKSA/IHEubGFiZWwucmVwbGFjZSgvPFxcL3A+JC9nLCBcIiA8Yj4qPC9iPjwvcD5cIikgOiBgJHtxLmxhYmVsfSA8Yj4qPC9iPmAgOiBxLmxhYmVsfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9SYXdIVE1MPlxuICAgICAgICAgICAgICAgICAgICAgICAgPEVycm9yIG5hbWU9e3EubmFtZX0vPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAge3Euc3ViX3F1ZXN0aW9uX3J1bGVzPy5sZW5ndGggPiAwICYmXG4gICAgICAgICAgICAgICAgICAgIHEuc3ViX3F1ZXN0aW9uX3J1bGVzLm1hcCgocikgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Q29uZGl0aW9uIHdoZW49e3EubmFtZX0gcnVsZT17cn0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtyZW5kZXJRdWVzdGlvbihyLnN1Yl9xdWVzdGlvbil9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9Db25kaXRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB9KX1cbiAgICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHEudHlwZSA9PT0gXCJSYWRpb0J1dHRvbkxpc3RcIikge1xuICAgICAgICAgICAgcXVlc3Rpb25WYWx1ZXMgPSBxdWVzdGlvblZhbHVlcy5tYXAodmFsID0+ICh7Li4udmFsLCB2YWx1ZTogdmFsLmlkfSkpO1xuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGtleT17cS5uYW1lfSByZWY9e2VsID0+IHF1ZXN0aW9uUmVmLmN1cnJlbnRbcS5pZF0gPSBlbH0gY2xhc3NOYW1lPXtxdWVzdGlvbkNvbnRhaW5lckNsYXNzTmFtZX0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8UmF3SFRNTCBjbGFzc05hbWU9e3F1ZXN0aW9uTGFiZWxDb250YWluZXJDbGFzc05hbWV9PntxLm1hbmRhdG9yeSA/IHEubGFiZWw/LmVuZHNXaXRoKCc8L3A+JykgPyBxLmxhYmVsLnJlcGxhY2UoLzxcXC9wPiQvZywgXCIgPGI+KjwvYj48L3A+XCIpIDogYCR7cS5sYWJlbH0gPGI+KjwvYj5gIDogcS5sYWJlbH08L1Jhd0hUTUw+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17cXVlc3Rpb25Db250cm9sQ29udGFpbmVyQ2xhc3NOYW1lfT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8RmllbGQgbmFtZT17cS5uYW1lfSB0eXBlPVwicmFkaW9cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3Byb3BzID0+IChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxSYWRpb0xpc3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lPXtxLm5hbWV9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ9e2Ake3EuaWR9YH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdmVycmlkZUNTUz17dHJ1ZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT17cHJvcHMuaW5wdXQudmFsdWV9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucz17cXVlc3Rpb25WYWx1ZXN9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9e3Byb3BzLmlucHV0Lm9uQ2hhbmdlfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0ZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxFcnJvciBuYW1lPXtxLm5hbWV9Lz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAge3Euc3ViX3F1ZXN0aW9uX3J1bGVzPy5sZW5ndGggPiAwICYmXG4gICAgICAgICAgICAgICAgICAgIHEuc3ViX3F1ZXN0aW9uX3J1bGVzLm1hcCgocikgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Q29uZGl0aW9uIHdoZW49e3EubmFtZX0gcnVsZT17cn0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtyZW5kZXJRdWVzdGlvbihyLnN1Yl9xdWVzdGlvbil9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9Db25kaXRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB9KX1cbiAgICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHEudHlwZSA9PT0gXCJDb21ib0JveFwiKSB7XG4gICAgICAgICAgICBxdWVzdGlvblZhbHVlcyA9IHF1ZXN0aW9uVmFsdWVzLm1hcCh2YWwgPT4gKHsuLi52YWwsIHZhbHVlOiB2YWwuaWR9KSk7XG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYga2V5PXtxLm5hbWV9IHJlZj17ZWwgPT4gcXVlc3Rpb25SZWYuY3VycmVudFtxLmlkXSA9IGVsfSBjbGFzc05hbWU9e3F1ZXN0aW9uQ29udGFpbmVyQ2xhc3NOYW1lfT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxSYXdIVE1MIGNsYXNzTmFtZT17cXVlc3Rpb25MYWJlbENvbnRhaW5lckNsYXNzTmFtZX0+e3EubWFuZGF0b3J5ID8gcS5sYWJlbD8uZW5kc1dpdGgoJzwvcD4nKSA/IHEubGFiZWwucmVwbGFjZSgvPFxcL3A+JC9nLCBcIiA8Yj4qPC9iPjwvcD5cIikgOiBgJHtxLmxhYmVsfSA8Yj4qPC9iPmAgOiBxLmxhYmVsfTwvUmF3SFRNTD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxGaWVsZCBuYW1lPXtxLm5hbWV9IGNsYXNzTmFtZT17cXVlc3Rpb25Db250cm9sQ29udGFpbmVyQ2xhc3NOYW1lfT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7cHJvcHMgPT4gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8RHJvcGRvd25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9e3EubmFtZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkPXtgJHtxLmlkfWB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdmVycmlkZUNTUz17dHJ1ZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPXtwcm9wcy5pbnB1dC52YWx1ZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnM9e3F1ZXN0aW9uVmFsdWVzfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9e3Byb3BzLmlucHV0Lm9uQ2hhbmdlfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgICAgICA8L0ZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPEVycm9yIG5hbWU9e3EubmFtZX0vPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAge3Euc3ViX3F1ZXN0aW9uX3J1bGVzPy5sZW5ndGggPiAwICYmXG4gICAgICAgICAgICAgICAgICAgIHEuc3ViX3F1ZXN0aW9uX3J1bGVzLm1hcCgocikgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Q29uZGl0aW9uIHdoZW49e3EubmFtZX0gcnVsZT17cn0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtyZW5kZXJRdWVzdGlvbihyLnN1Yl9xdWVzdGlvbil9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9Db25kaXRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB9KX1cbiAgICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHEudHlwZSA9PT0gXCJDaGVja0JveExpc3RcIikge1xuICAgICAgICAgICAgcXVlc3Rpb25WYWx1ZXMgPSBxdWVzdGlvblZhbHVlcy5tYXAodmFsID0+ICh7Li4udmFsLCB2YWx1ZTogdmFsLmlkfSkpO1xuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGtleT17cS5uYW1lfSByZWY9e2VsID0+IHF1ZXN0aW9uUmVmLmN1cnJlbnRbcS5pZF0gPSBlbH0gY2xhc3NOYW1lPXtxdWVzdGlvbkNvbnRhaW5lckNsYXNzTmFtZX0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8UmF3SFRNTCBjbGFzc05hbWU9e3F1ZXN0aW9uTGFiZWxDb250YWluZXJDbGFzc05hbWV9PntxLm1hbmRhdG9yeSA/IHEubGFiZWw/LmVuZHNXaXRoKCc8L3A+JykgPyBxLmxhYmVsLnJlcGxhY2UoLzxcXC9wPiQvZywgXCIgPGI+KjwvYj48L3A+XCIpIDogYCR7cS5sYWJlbH0gPGI+KjwvYj5gIDogcS5sYWJlbH08L1Jhd0hUTUw+XG4gICAgICAgICAgICAgICAgICAgICAgICA8RmllbGQgbmFtZT17cS5uYW1lfSBjbGFzc05hbWU9e3F1ZXN0aW9uQ29udHJvbENvbnRhaW5lckNsYXNzTmFtZX0gdHlwZT1cInJhZGlvXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3Byb3BzID0+IChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPENoZWNrYm94TGlzdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ9e2Ake3EuaWR9YH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9e3EubmFtZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPXtwcm9wcy5pbnB1dC52YWx1ZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnM9e3F1ZXN0aW9uVmFsdWVzfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9e3Byb3BzLmlucHV0Lm9uQ2hhbmdlfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgICAgICA8L0ZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPEVycm9yIG5hbWU9e3EubmFtZX0vPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAge3Euc3ViX3F1ZXN0aW9uX3J1bGVzPy5sZW5ndGggPiAwICYmXG4gICAgICAgICAgICAgICAgICAgIHEuc3ViX3F1ZXN0aW9uX3J1bGVzLm1hcCgocikgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Q29uZGl0aW9uIHdoZW49e3EubmFtZX0gcnVsZT17cn0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtyZW5kZXJRdWVzdGlvbihyLnN1Yl9xdWVzdGlvbil9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9Db25kaXRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB9KX1cbiAgICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfTtcblxuICAgIGNvbnN0IGlzVmlzaWJsZSA9IChxKSA9PiB7XG4gICAgICAgIHJldHVybiAhIXF1ZXN0aW9uUmVmLmN1cnJlbnRbcS5pZF07XG4gICAgfTtcblxuICAgIGNvbnN0IHZhbGlkYXRlUXVlc3Rpb24gPSAocSwgdmFsdWVzLCBlcnJvcnMpID0+IHtcbiAgICAgICAgaWYgKHEubWFuZGF0b3J5ICYmIGlzVmlzaWJsZShxKSkge1xuICAgICAgICAgICAgaWYgKCF2YWx1ZXMuaGFzT3duUHJvcGVydHkocS5uYW1lKSB8fCB2YWx1ZXNbcS5uYW1lXSA9PT0gXCJcIiB8fCB2YWx1ZXNbcS5uYW1lXS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICBlcnJvcnNbcS5uYW1lXSA9IFJlcXVpcmVkRXJyb3JNZXNzYWdlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIHZhbGlkYXRlIHN1YiBydWxlc1xuICAgICAgICBxLnN1Yl9xdWVzdGlvbl9ydWxlcz8uZm9yRWFjaCgocikgPT4ge1xuICAgICAgICAgICAgdmFsaWRhdGVRdWVzdGlvbihyLnN1Yl9xdWVzdGlvbiwgdmFsdWVzLCBlcnJvcnMpO1xuICAgICAgICB9KTtcbiAgICB9O1xuXG4gICAgY29uc3Qgb25TdWJtaXQgPSAodmFsdWVzKSA9PiB7XG4gICAgICAgICAgb25BbnN3ZXJDaGFuZ2VzKHZhbHVlcylcbiAgICB9O1xuXG4gICAgY29uc3QgdmFsaWRhdGUgPSAodmFsdWVzKSA9PiB7XG4gICAgICAgIGNvbnN0IGVycm9ycyA9IHt9O1xuICAgICAgICBleHRyYVF1ZXN0aW9ucy5mb3JFYWNoKCBxID0+IHtcbiAgICAgICAgICAgIHZhbGlkYXRlUXVlc3Rpb24ocSwgdmFsdWVzLCBlcnJvcnMpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGVycm9ycztcbiAgICB9XG5cbiAgICByZXR1cm4gKFxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17Y2xhc3NOYW1lfT5cbiAgICAgICAgICAgIDxGb3JtXG4gICAgICAgICAgICAgICAgdmFsaWRhdGU9e3ZhbGlkYXRlfVxuICAgICAgICAgICAgICAgIG9uU3VibWl0PXtvblN1Ym1pdH1cbiAgICAgICAgICAgICAgICBpbml0aWFsVmFsdWVzPXthbnN3ZXJzfT5cblxuICAgICAgICAgICAgICAgIHsoe2hhbmRsZVN1Ym1pdCwgZm9ybSwgc3VibWl0dGluZywgcHJpc3RpbmUsIHZhbHVlc30pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgc3VibWl0ID0gaGFuZGxlU3VibWl0O1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICAgICAgPGZvcm0gb25TdWJtaXQ9e2hhbmRsZVN1Ym1pdH0gcmVmPXtmb3JtUmVmfT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7cmVhZE9ubHkgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmllbGRzZXQgZGlzYWJsZWQ9XCJkaXNhYmxlZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2V4dHJhUXVlc3Rpb25zLm1hcCgocSkgPT4gcmVuZGVyUXVlc3Rpb24ocSkpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2ZpZWxkc2V0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhUXVlc3Rpb25zLm1hcCgocSkgPT4gcmVuZGVyUXVlc3Rpb24ocSkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtkZWJ1ZyAmJiA8cHJlPntKU09OLnN0cmluZ2lmeSh2YWx1ZXMsIDAsIDIpfTwvcHJlPn1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZm9ybT5cbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgPC9Gb3JtPlxuICAgICAgICAgICAgeyFmb3JtUmVmICYmXG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgdHlwZT1cInN1Ym1pdFwiXG4gICAgICAgICAgICAgICAgb25DbGljaz17KGV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHN1Ym1pdChldmVudCk7XG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICBzdHlsZT17e21hcmdpblRvcDogMTB9fVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIHtidXR0b25UZXh0fVxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICB9XG4gICAgICAgIDwvZGl2PlxuICAgIClcbn1cblxuRXh0cmFRdWVzdGlvbnNGb3JtLnByb3BUeXBlcyA9IHtcbiAgICBleHRyYVF1ZXN0aW9uczogUHJvcFR5cGVzLmFycmF5LmlzUmVxdWlyZWQsXG4gICAgdXNlckFuc3dlcnM6IFByb3BUeXBlcy5hcnJheS5pc1JlcXVpcmVkLFxuICAgIG9uQW5zd2VyQ2hhbmdlczogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgZm9ybVJlZjogUHJvcFR5cGVzLm9uZU9mVHlwZShbXG4gICAgICAgIFByb3BUeXBlcy5mdW5jLFxuICAgICAgICBQcm9wVHlwZXMuc2hhcGUoe2N1cnJlbnQ6IFByb3BUeXBlcy5hbnl9KVxuICAgIF0pLFxuICAgIGRlYnVnOiBQcm9wVHlwZXMuYm9vbCxcbiAgICBidXR0b25UZXh0OiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIHF1ZXN0aW9uQ29udGFpbmVyQ2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIHF1ZXN0aW9uTGFiZWxDb250YWluZXJDbGFzc05hbWUgOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIHF1ZXN0aW9uQ29udHJvbENvbnRhaW5lckNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBSZXF1aXJlZEVycm9yTWVzc2FnZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBWYWxpZGF0aW9uRXJyb3JDbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG59O1xuXG5leHBvcnQgZGVmYXVsdCBFeHRyYVF1ZXN0aW9uc0Zvcm07IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxOCBPcGVuU3RhY2sgRm91bmRhdGlvblxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICoqL1xuXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgJ2F3ZXNvbWUtYm9vdHN0cmFwLWNoZWNrYm94L2F3ZXNvbWUtYm9vdHN0cmFwLWNoZWNrYm94LmNzcydcbmltcG9ydCBJbnB1dCBmcm9tICcuLi9pbnB1dHMvdGV4dC1pbnB1dCdcbmltcG9ydCBEcm9wZG93biBmcm9tICcuLi9pbnB1dHMvZHJvcGRvd24nXG5pbXBvcnQgUmF3SFRNTCBmcm9tICcuLi9yYXctaHRtbCdcbmltcG9ydCBDaGVja2JveExpc3QgZnJvbSAnLi4vaW5wdXRzL2NoZWNrYm94LWxpc3QnXG5pbXBvcnQgUmFkaW9MaXN0IGZyb20gJy4uL2lucHV0cy9yYWRpby1saXN0J1xuXG5cbmNsYXNzIFJzdnBGb3JtIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgICAgICBzdXBlcihwcm9wcyk7XG5cbiAgICAgICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgICAgICAgIGFuc3dlcnM6IHByb3BzLnF1ZXN0aW9ucy5tYXAocSA9PiAoe3F1ZXN0aW9uX2lkOiBxLmlkLCB2YWx1ZTogbnVsbH0pKSxcbiAgICAgICAgICAgIGVycm9yczogcHJvcHMuZXJyb3JzXG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5oYW5kbGVDaGFuZ2UgPSB0aGlzLmhhbmRsZUNoYW5nZS5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLmhhc0Vycm9ycyA9IHRoaXMuaGFzRXJyb3JzLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuaGFuZGxlU3VibWl0ID0gdGhpcy5oYW5kbGVTdWJtaXQuYmluZCh0aGlzKTtcbiAgICB9XG5cbiAgICByZW5kZXJRdWVzdGlvbihxKSB7XG4gICAgICAgIGNvbnN0IHthbnN3ZXJzfSA9IHRoaXMuc3RhdGU7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gYW5zd2Vycy5maW5kKGEgPT4gYS5xdWVzdGlvbl9pZCA9PT0gcS5pZCkudmFsdWU7XG5cbiAgICAgICAgc3dpdGNoKHEuY2xhc3NfbmFtZSkge1xuICAgICAgICAgICAgY2FzZSAnUlNWUE1lbWJlckVtYWlsUXVlc3Rpb25UZW1wbGF0ZSc6XG4gICAgICAgICAgICBjYXNlICdSU1ZQTWVtYmVyRmlyc3ROYW1lUXVlc3Rpb25UZW1wbGF0ZSc6XG4gICAgICAgICAgICBjYXNlICdSU1ZQTWVtYmVyTGFzdE5hbWVRdWVzdGlvblRlbXBsYXRlJzpcbiAgICAgICAgICAgIGNhc2UgJ1JTVlBUZXh0Qm94UXVlc3Rpb25UZW1wbGF0ZSc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgPElucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICBpZD17cS5pZH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPXt2YWx1ZSB8fCAnJ31cbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXt0aGlzLmhhbmRsZUNoYW5nZX1cbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImZvcm0tY29udHJvbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBlcnJvcj17dGhpcy5oYXNFcnJvcnMocS5pZCl9XG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ1JTVlBUZXh0QXJlYVF1ZXN0aW9uVGVtcGxhdGUnOlxuICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgIDx0ZXh0YXJlYVxuICAgICAgICAgICAgICAgICAgICAgICAgaWQ9e3EuaWR9XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT17dmFsdWUgfHwgJyd9XG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJmb3JtLWNvbnRyb2xcIlxuICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9e3RoaXMuaGFuZGxlQ2hhbmdlfVxuICAgICAgICAgICAgICAgICAgICAvPik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdSU1ZQTGl0ZXJhbENvbnRlbnRRdWVzdGlvblRlbXBsYXRlJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gKDxkaXY+PFJhd0hUTUw+e3EudmFsdWV9PC9SYXdIVE1MPjwvZGl2Pik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdSU1ZQQ2hlY2tCb3hMaXN0UXVlc3Rpb25UZW1wbGF0ZSc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgPENoZWNrYm94TGlzdFxuICAgICAgICAgICAgICAgICAgICAgICAgaWQ9e3EuaWR9XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT17dmFsdWV9XG4gICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zPXtxLnZhbHVlcy5tYXAodiA9PiAoe3ZhbHVlOiBgJHt2LmlkfWAsIGxhYmVsOiB2LmxhYmVsfSkpfVxuICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9e3RoaXMuaGFuZGxlQ2hhbmdlfVxuICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3I9e3RoaXMuaGFzRXJyb3JzKHEuaWQpfVxuICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdSU1ZQUmFkaW9CdXR0b25MaXN0UXVlc3Rpb25UZW1wbGF0ZSc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgPFJhZGlvTGlzdFxuICAgICAgICAgICAgICAgICAgICAgICAgaWQ9e3EuaWR9XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT17dmFsdWV9XG4gICAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17dGhpcy5oYW5kbGVDaGFuZ2V9XG4gICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zPXtxLnZhbHVlcy5tYXAodiA9PiAoe3ZhbHVlOiBgJHt2LmlkfWAsIGxhYmVsOiB2LmxhYmVsfSkpfVxuICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3I9e3RoaXMuaGFzRXJyb3JzKHEuaWQpfVxuICAgICAgICAgICAgICAgICAgICAgICAgc2ltcGxlXG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ1JTVlBEcm9wRG93blF1ZXN0aW9uVGVtcGxhdGUnOlxuICAgICAgICAgICAgICAgIGxldCB2YWx1ZXMgPSAocS5pc19jb3VudHJ5X3NlbGVjdG9yKSA/IHEudmFsdWVzLm1hcCh2ID0+ICh7dmFsdWU6di5pZCwgbGFiZWw6IHYudmFsdWV9KSkgOiBxLnZhbHVlcztcblxuICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgIDxEcm9wZG93blxuICAgICAgICAgICAgICAgICAgICAgICAgaWQ9e3EuaWR9XG4gICAgICAgICAgICAgICAgICAgICAgICBpc011bHRpPXtxLmlzX211bHRpc2VsZWN0fVxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e3ZhbHVlfVxuICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9e3RoaXMuaGFuZGxlQ2hhbmdlfVxuICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9e3EuZW1wdHlfc3RyaW5nfVxuICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucz17dmFsdWVzfVxuICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBoYW5kbGVDaGFuZ2UoZXYpIHtcbiAgICAgICAgbGV0IGFuc3dlcnMgPSBbLi4udGhpcy5zdGF0ZS5hbnN3ZXJzXTtcbiAgICAgICAgbGV0IHt2YWx1ZSwgaWR9ID0gZXYudGFyZ2V0O1xuXG4gICAgICAgIGlmIChldi50YXJnZXQudHlwZSA9PT0gJ2RhdGV0aW1lJykge1xuICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZS52YWx1ZU9mKCkgLyAxMDAwO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGFuc3dlciA9IGFuc3dlcnMuZmluZChhID0+IGEucXVlc3Rpb25faWQgPT09IHBhcnNlSW50KGlkKSk7XG4gICAgICAgIGFuc3dlci52YWx1ZSA9IHZhbHVlO1xuXG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe2Fuc3dlcnN9KTtcbiAgICB9XG5cbiAgICBoYXNFcnJvcnMoZmllbGQpIHtcbiAgICAgICAgbGV0IHtlcnJvcnN9ID0gdGhpcy5zdGF0ZTtcbiAgICAgICAgaWYoZmllbGQgaW4gZXJyb3JzKSB7XG4gICAgICAgICAgICByZXR1cm4gZXJyb3JzW2ZpZWxkXTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbiAgICBoYW5kbGVTdWJtaXQoZXYpIHtcbiAgICAgICAgZXYucHJldmVudERlZmF1bHQoKTtcblxuICAgICAgICBsZXQgeyBvblN1Ym1pdCB9ID0gdGhpcy5wcm9wcztcbiAgICAgICAgbGV0IHthbnN3ZXJzfSA9IHRoaXMuc3RhdGU7XG5cbiAgICAgICAgb25TdWJtaXQoYW5zd2Vycyk7XG4gICAgfVxuXG4gICAgcmVuZGVyKCkge1xuICAgICAgICBsZXQgeyBxdWVzdGlvbnMsIG9uU3VibWl0IH0gPSB0aGlzLnByb3BzO1xuXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8Zm9ybSBjbGFzc05hbWU9XCJyc3ZwLWZvcm1cIj5cbiAgICAgICAgICAgICAgICB7cXVlc3Rpb25zLm1hcChxID0+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYga2V5PXsncXVlc3Rpb25fJytxLmlkfSBjbGFzc05hbWU9XCJyb3cgZm9ybS1ncm91cFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJjb2wtbWQtMTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxSYXdIVE1MPntxLmxhYmVsfTwvUmF3SFRNTD4ge3EuaXNfbWFuZGF0b3J5ICYmICcqJ31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt0aGlzLnJlbmRlclF1ZXN0aW9uKHEpfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAge29uU3VibWl0ICYmXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwicm93XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImNvbC1tZC0xMlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3NOYW1lPVwiYnRuIGJ0bi1wcmltYXJ5XCIgb25DbGljaz17dGhpcy5oYW5kbGVTdWJtaXR9PlN1Ym1pdDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvZm9ybT5cbiAgICAgICAgKTtcbiAgICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFJzdnBGb3JtO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxOCBPcGVuU3RhY2sgRm91bmRhdGlvblxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICoqL1xuXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgVCBmcm9tICdpMThuLXJlYWN0L2Rpc3QvaTE4bi1yZWFjdCdcbmltcG9ydCAnYXdlc29tZS1ib290c3RyYXAtY2hlY2tib3gvYXdlc29tZS1ib290c3RyYXAtY2hlY2tib3guY3NzJ1xuaW1wb3J0IElucHV0IGZyb20gJy4uL2lucHV0cy90ZXh0LWlucHV0J1xuaW1wb3J0IHsgc2Nyb2xsVG9FcnJvciwgaXNFbXB0eSwgc2hhbGxvd0VxdWFsLCBoYXNFcnJvcnMgfSBmcm9tICcuLi8uLi91dGlscy9tZXRob2RzJ1xuXG5cbmNsYXNzIFNpbXBsZUZvcm0gZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgICAgIHN1cGVyKHByb3BzKTtcblxuICAgICAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgICAgICAgZW50aXR5OiB7Li4ucHJvcHMuZW50aXR5fSxcbiAgICAgICAgICAgIGVycm9yczogcHJvcHMuZXJyb3JzXG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5oYW5kbGVDaGFuZ2UgPSB0aGlzLmhhbmRsZUNoYW5nZS5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLmhhbmRsZVN1Ym1pdCA9IHRoaXMuaGFuZGxlU3VibWl0LmJpbmQodGhpcyk7XG4gICAgfVxuXG4gICAgY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wcywgcHJldlN0YXRlLCBzbmFwc2hvdCkge1xuICAgICAgICBjb25zdCBzdGF0ZSA9IHt9O1xuICAgICAgICBzY3JvbGxUb0Vycm9yKHRoaXMucHJvcHMuZXJyb3JzKTtcblxuICAgICAgICBpZihwcmV2UHJvcHMuZW50aXR5LmlkICE9PSB0aGlzLnByb3BzLmVudGl0eS5pZCkge1xuICAgICAgICAgICAgc3RhdGUuZW50aXR5ID0gey4uLnRoaXMucHJvcHMuZW50aXR5fTtcbiAgICAgICAgICAgIHN0YXRlLmVycm9ycyA9IHt9O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFzaGFsbG93RXF1YWwocHJldlByb3BzLmVycm9ycywgdGhpcy5wcm9wcy5lcnJvcnMpKSB7XG4gICAgICAgICAgICBzdGF0ZS5lcnJvcnMgPSB7Li4udGhpcy5wcm9wcy5lcnJvcnN9O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFpc0VtcHR5KHN0YXRlKSkge1xuICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7Li4udGhpcy5zdGF0ZSwgLi4uc3RhdGV9KVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgaGFuZGxlQ2hhbmdlKGV2KSB7XG4gICAgICAgIGxldCBlbnRpdHkgPSB7Li4udGhpcy5zdGF0ZS5lbnRpdHl9O1xuICAgICAgICBsZXQgZXJyb3JzID0gey4uLnRoaXMuc3RhdGUuZXJyb3JzfTtcbiAgICAgICAgbGV0IHt2YWx1ZSwgaWR9ID0gZXYudGFyZ2V0O1xuXG4gICAgICAgIGlmIChldi50YXJnZXQudHlwZSA9PT0gJ2NoZWNrYm94Jykge1xuICAgICAgICAgICAgdmFsdWUgPSBldi50YXJnZXQuY2hlY2tlZDtcbiAgICAgICAgfVxuXG4gICAgICAgIGVycm9yc1tpZF0gPSAnJztcbiAgICAgICAgZW50aXR5W2lkXSA9IHZhbHVlO1xuICAgICAgICB0aGlzLnNldFN0YXRlKHtlbnRpdHk6IGVudGl0eSwgZXJyb3JzOiBlcnJvcnN9KTtcbiAgICB9XG5cbiAgICBoYW5kbGVTdWJtaXQoZXYpIHtcbiAgICAgICAgbGV0IGVudGl0eSA9IHsuLi50aGlzLnN0YXRlLmVudGl0eX07XG4gICAgICAgIGV2LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAgICAgdGhpcy5wcm9wcy5vblN1Ym1pdCh0aGlzLnN0YXRlLmVudGl0eSk7XG4gICAgfVxuXG4gICAgY3JlYXRlRmllbGQoZmllbGQpIHtcbiAgICAgICAgbGV0IHtlbnRpdHksIGVycm9yc30gPSB0aGlzLnN0YXRlO1xuXG4gICAgICAgIHN3aXRjaCAoZmllbGQudHlwZSkge1xuICAgICAgICAgICAgY2FzZSAndGV4dCc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBrZXk9e1wiZmllbGRfXCIrZmllbGQubmFtZX0gY2xhc3NOYW1lPVwicm93IGZvcm0tZ3JvdXBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiY29sLW1kLTZcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWw+IHtmaWVsZC5sYWJlbH0gPC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8SW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ9e2ZpZWxkLm5hbWV9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPXtlbnRpdHlbZmllbGQubmFtZV19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXt0aGlzLmhhbmRsZUNoYW5nZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiZm9ybS1jb250cm9sXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3I9e2hhc0Vycm9ycyhmaWVsZC5uYW1lLCBlcnJvcnMpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAndGV4dGFyZWEnOlxuICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgIDxkaXYga2V5PXtcImZpZWxkX1wiK2ZpZWxkLm5hbWV9IGNsYXNzTmFtZT1cInJvdyBmb3JtLWdyb3VwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImNvbC1tZC02XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPiB7ZmllbGQubGFiZWx9IDwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRleHRhcmVhXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkPXtmaWVsZC5uYW1lfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT17ZW50aXR5W2ZpZWxkLm5hbWVdfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17dGhpcy5oYW5kbGVDaGFuZ2V9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImZvcm0tY29udHJvbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdjaGVja2JveCc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBrZXk9e1wiZmllbGRfXCIrZmllbGQubmFtZX0gY2xhc3NOYW1lPVwicm93IGZvcm0tZ3JvdXBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiY29sLW1kLTZcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZvcm0tY2hlY2sgYWJjLWNoZWNrYm94XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBpZD17ZmllbGQubmFtZX0gY2hlY2tlZD17ZW50aXR5W2ZpZWxkLm5hbWVdfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9e3RoaXMuaGFuZGxlQ2hhbmdlfSBjbGFzc05hbWU9XCJmb3JtLWNoZWNrLWlucHV0XCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzTmFtZT1cImZvcm0tY2hlY2stbGFiZWxcIiBodG1sRm9yPXtmaWVsZC5uYW1lfT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtmaWVsZC5sYWJlbH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJlbmRlcigpIHtcbiAgICAgICAgbGV0IHtlbnRpdHl9ID0gdGhpcy5zdGF0ZTtcbiAgICAgICAgbGV0IHtmaWVsZHN9ID0gdGhpcy5wcm9wcztcblxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPGZvcm0gY2xhc3NOYW1lPVwic2ltcGxlLWZvcm1cIj5cbiAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImhpZGRlblwiIGlkPVwiaWRcIiB2YWx1ZT17ZW50aXR5LmlkfSAvPlxuXG4gICAgICAgICAgICAgICAge2ZpZWxkcy5tYXAoZiA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNyZWF0ZUZpZWxkKGYpO1xuICAgICAgICAgICAgICAgIH0pfVxuXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJyb3dcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJjb2wtbWQtMTIgc3VibWl0LWJ1dHRvbnNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiYnV0dG9uXCIgb25DbGljaz17dGhpcy5oYW5kbGVTdWJtaXR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiYnRuIGJ0bi1wcmltYXJ5IHB1bGwtcmlnaHRcIiB2YWx1ZT17VC50cmFuc2xhdGUoXCJnZW5lcmFsLnNhdmVcIil9Lz5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Zvcm0+XG4gICAgICAgICk7XG4gICAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBTaW1wbGVGb3JtO1xuIiwiXG5jbGFzcyBGcmFnbWVudFBhcnNlciB7XG5cbiAgICBjb25zdHJ1Y3Rvcigpe1xuICAgICAgICB0aGlzLm9yaWdpbmFsSGFzaCA9ICcnO1xuICAgICAgICB0aGlzLmhhc2ggICAgICAgICA9IHt9O1xuICAgIH1cblxuICAgIGNvbnZlcnRUb0hhc2goc3RySGFzaClcbiAgICB7XG4gICAgICAgIHN0ckhhc2ggICAgPSBzdHJIYXNoLnN1YnN0cigxKS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBsZXQgcGFyYW1zID0gc3RySGFzaC5zcGxpdCgnJicpO1xuICAgICAgICBsZXQgcmVzID0ge307XG4gICAgICAgIGZvcihsZXQgcGFyYW0gb2YgcGFyYW1zKVxuICAgICAgICB7XG4gICAgICAgICAgICBwYXJhbSA9IHBhcmFtLnNwbGl0KCc9Jyk7XG4gICAgICAgICAgICBpZihwYXJhbS5sZW5ndGggIT09ICAyKSBjb250aW51ZTtcbiAgICAgICAgICAgIGxldCB2YWwgPSBwYXJhbVsxXS50cmltKCk7XG4gICAgICAgICAgICBpZih2YWwgPT09ICcnKSBjb250aW51ZTtcblxuICAgICAgICAgICAgaWYgKHZhbCA9PT0gJ3RydWUnIHx8IHZhbCA9PT0gJ2ZhbHNlJylcbiAgICAgICAgICAgICAgICBwYXJhbVsxXSA9IHZhbCA9PSAndHJ1ZSc7XG5cbiAgICAgICAgICAgIHJlc1twYXJhbVswXV0gPSBwYXJhbVsxXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH1cblxuICAgIGNsZWFyUGFyYW1zKCl7XG4gICAgICAgIHRoaXMub3JpZ2luYWxIYXNoID0gJyc7XG4gICAgICAgIHRoaXMuaGFzaCAgICAgICAgID0ge307XG4gICAgfVxuXG4gICAgZ2V0UGFyYW0oa2V5KXtcbiAgICAgICAgaWYodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5vcmlnaW5hbEhhc2ggIT09IHdpbmRvdy5sb2NhdGlvbi5oYXNoKXtcbiAgICAgICAgICAgIHRoaXMub3JpZ2luYWxIYXNoID0gd2luZG93LmxvY2F0aW9uLmhhc2g7XG4gICAgICAgICAgICB0aGlzLmhhc2ggPSB0aGlzLmNvbnZlcnRUb0hhc2godGhpcy5vcmlnaW5hbEhhc2gpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYoIXRoaXMuaGFzaC5oYXNPd25Qcm9wZXJ0eShrZXkpICkgcmV0dXJuIG51bGw7XG4gICAgICAgIHJldHVybiB0aGlzLmhhc2hba2V5XTtcbiAgICB9XG5cbiAgICBnZXRQYXJhbXMoKXtcbiAgICAgICAgaWYodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5vcmlnaW5hbEhhc2ggIT09ICB3aW5kb3cubG9jYXRpb24uaGFzaCl7XG4gICAgICAgICAgICB0aGlzLm9yaWdpbmFsSGFzaCA9IHdpbmRvdy5sb2NhdGlvbi5oYXNoO1xuICAgICAgICAgICAgdGhpcy5oYXNoID0gdGhpcy5jb252ZXJ0VG9IYXNoKHRoaXMub3JpZ2luYWxIYXNoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB7IC4uLiB0aGlzLmhhc2ggfTtcbiAgICB9XG5cbiAgICBkZWxldGVQYXJhbShwYXJhbSl7XG4gICAgICAgIHZhciBoYXNoICAgID0gdGhpcy5nZXRQYXJhbXMoKTtcbiAgICAgICAgdGhpcy5jbGVhclBhcmFtcygpO1xuICAgICAgICBmb3IobGV0IGtleSBpbiBoYXNoKSB7XG4gICAgICAgICAgICBpZihrZXkgPT0gcGFyYW0pIGNvbnRpbnVlO1xuICAgICAgICAgICAgdGhpcy5oYXNoW2tleV0gPSBoYXNoW2tleV07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBkZWxldGVQYXJhbXMocGFyYW1zKXtcbiAgICAgICAgdmFyIGhhc2ggICAgPSB0aGlzLmdldFBhcmFtcygpO1xuICAgICAgICB0aGlzLmNsZWFyUGFyYW1zKCk7XG4gICAgICAgIGZvcihsZXQga2V5IGluIGhhc2gpIHtcbiAgICAgICAgICAgIGlmKHBhcmFtcy5pbmNsdWRlcyhrZXkpKSBjb250aW51ZTtcbiAgICAgICAgICAgIHRoaXMuaGFzaFtrZXldID0gaGFzaFtrZXldO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc2V0UGFyYW0oa2V5LCB2YWx1ZSl7XG4gICAgICAgIGlmKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHRoaXMub3JpZ2luYWxIYXNoICE9PSAgd2luZG93LmxvY2F0aW9uLmhhc2gpe1xuICAgICAgICAgICAgdGhpcy5vcmlnaW5hbEhhc2ggPSB3aW5kb3cubG9jYXRpb24uaGFzaDtcbiAgICAgICAgICAgIHRoaXMuaGFzaCA9IHRoaXMuY29udmVydFRvSGFzaCh0aGlzLm9yaWdpbmFsSGFzaCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYodmFsdWUgIT09IG51bGwgJiYgdmFsdWUgIT09ICcnKVxuICAgICAgICAgICAgdGhpcy5oYXNoW2tleV0gPSB2YWx1ZTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgZGVsZXRlIHRoaXMuaGFzaFtrZXldO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBzZXJpYWxpemUoKXtcbiAgICAgICAgbGV0IHJlcyA9ICcnO1xuICAgICAgICBmb3IobGV0IGtleSBpbiB0aGlzLmhhc2gpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGxldCB2YWwgPSB0aGlzLmhhc2hba2V5XTtcbiAgICAgICAgICAgIGlmKHJlcyAhPT0gJycpIHJlcyArPSAnJic7XG4gICAgICAgICAgICByZXMgKz0ga2V5Kyc9Jyt2YWw7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEZyYWdtZW50UGFyc2VyO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxNyBPcGVuU3RhY2sgRm91bmRhdGlvblxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICoqL1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBUIGZyb20gXCJpMThuLXJlYWN0L2Rpc3QvaTE4bi1yZWFjdFwiO1xuXG5jbGFzcyBGcmVlVGV4dFNlYXJjaCBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcm9wcyl7XG4gICAgICAgIHN1cGVyKHByb3BzKTtcbiAgICAgICAgdGhpcy5vblNlYXJjaENsaWNrICA9IHRoaXMub25TZWFyY2hDbGljay5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLm9uQ2xlYXJDbGljayAgID0gdGhpcy5vbkNsZWFyQ2xpY2suYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5vbktleVByZXNzZWQgICA9IHRoaXMub25LZXlQcmVzc2VkLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMub25DaGFuZ2UgICAgICAgPSB0aGlzLm9uQ2hhbmdlLmJpbmQodGhpcyk7XG5cbiAgICAgICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgICAgICAgIHZhbHVlOiBwcm9wcy52YWx1ZSxcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBvblNlYXJjaENsaWNrKCl7XG4gICAgICAgIHRoaXMuZG9GaWx0ZXJpbmcodGhpcy5zdGF0ZS52YWx1ZSk7XG4gICAgfVxuXG4gICAgb25DbGVhckNsaWNrKCl7XG4gICAgICAgIHRoaXMuZG9GaWx0ZXJpbmcoJycpO1xuICAgICAgICB0aGlzLnNldFN0YXRlKHt2YWx1ZTogJyd9KTtcbiAgICB9XG5cbiAgICBkb0ZpbHRlcmluZyh0ZXJtKXtcbiAgICAgICAgdGhpcy5wcm9wcy5vblNlYXJjaCh0ZXJtLnRyaW0oKSk7XG4gICAgfVxuXG4gICAgb25LZXlQcmVzc2VkKGV2ZW50KXtcbiAgICAgICAgdmFyIGNvZGUgPSBldmVudC5rZXlDb2RlIHx8IGV2ZW50LndoaWNoO1xuICAgICAgICBpZihjb2RlID09PSAxMykge1xuICAgICAgICAgICAgdGhpcy5kb0ZpbHRlcmluZyh0aGlzLnN0YXRlLnZhbHVlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uQ2hhbmdlKGV2ZW50KXtcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgICB2YWx1ZTogZXZlbnQudGFyZ2V0LnZhbHVlXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHJlbmRlcigpe1xuICAgICAgICBsZXQge3ZhbHVlfSA9IHRoaXMuc3RhdGU7XG5cbiAgICAgICAgcmV0dXJuKFxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJyb3cgc2VhcmNoLWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiY29sLW1kLTEyXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiaW5wdXQtZ3JvdXBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e3ZhbHVlfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImZvcm0tY29udHJvbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9e3RoaXMucHJvcHMucGxhY2Vob2xkZXJ9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25LZXlQcmVzcz17dGhpcy5vbktleVByZXNzZWR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9e3RoaXMub25DaGFuZ2V9XG4gICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwiaW5wdXQtZ3JvdXAtYnRuXCIgc3R5bGU9e3t3aWR0aDogNSArJyUnfX0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBvbkNsaWNrPXt0aGlzLm9uU2VhcmNoQ2xpY2t9IGNsYXNzTmFtZT1cImJ0biBidG4tZGVmYXVsdFwiIHRpdGxlPXtULnRyYW5zbGF0ZShcImdlbmVyYWwuc2VhcmNoXCIpfT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3NOYW1lPVwiZmEgZmEtc2VhcmNoXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIG9uQ2xpY2s9e3RoaXMub25DbGVhckNsaWNrfSBjbGFzc05hbWU9XCJidG4gYnRuLWRlZmF1bHRcIiB0aXRsZT17VC50cmFuc2xhdGUoXCJnZW5lcmFsLmNsZWFyXCIpfT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3NOYW1lPVwiZmEgZmEtdGltZXNcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICApXG4gICAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBGcmVlVGV4dFNlYXJjaDsiLCIvKipcbiAqIENvcHlyaWdodCAyMDE3IE9wZW5TdGFjayBGb3VuZGF0aW9uXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiovXG5cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyB3aXRoU2NyaXB0anMsIHdpdGhHb29nbGVNYXAsIEdvb2dsZU1hcCwgTWFya2VyLCBJbmZvV2luZG93IH0gZnJvbSBcInJlYWN0LWdvb2dsZS1tYXBzXCI7XG5pbXBvcnQgTWFya2VyQ2x1c3RlcmVyIGZyb20gXCJyZWFjdC1nb29nbGUtbWFwcy9saWIvY29tcG9uZW50cy9hZGRvbnMvTWFya2VyQ2x1c3RlcmVyXCI7XG5pbXBvcnQge2FycmF5c0VxdWFsfSBmcm9tIFwiLi4vLi4vdXRpbHMvbWV0aG9kc1wiO1xuXG5jb25zdCBNQVAgPSB7XG4gICAgZGVmYXVsdFpvb206IDIsXG4gICAgZGVmYXVsdENlbnRlcjogeyBsYXQ6IDMwLjI3MDE2NiwgbG5nOiAtOTcuNzMxMjcxIH0sXG4gICAgb3B0aW9uczoge1xuICAgICAgICBtaW5ab29tOiAxLFxuICAgICAgICBtYXhab29tOiAxOVxuICAgIH1cbn07XG5cbmNvbnN0IEdvb2dsZU1hcFdyYXBwZXIgPSB3aXRoR29vZ2xlTWFwKChwcm9wcykgPT4ge1xuICAgICAgICByZXR1cm4gIDxHb29nbGVNYXBcbiAgICAgICAgICAgIHJlZj17cHJvcHMub25NYXBMb2FkfVxuICAgICAgICAgICAgem9vbT17IHByb3BzLnpvb20gfVxuICAgICAgICAgICAgY2VudGVyPXsgcHJvcHMuY2VudGVyIH1cbiAgICAgICAgICAgIG9uQm91bmRzQ2hhbmdlZD17cHJvcHMub25NYXBDaGFuZ2V9XG4gICAgICAgICAgICBvbkNsaWNrPXtwcm9wcy5vbk1hcENsaWNrfVxuICAgICAgICA+XG4gICAgICAgICAgICB7cHJvcHMuc2hvd01hcmtlcnMgJiZcbiAgICAgICAgICAgIDxNYXJrZXJDbHVzdGVyZXJcbiAgICAgICAgICAgICAgICBhdmVyYWdlQ2VudGVyXG4gICAgICAgICAgICAgICAgZW5hYmxlUmV0aW5hSWNvbnNcbiAgICAgICAgICAgICAgICBncmlkU2l6ZT17NjB9XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAge3Byb3BzLm1hcmtlcnMubWFwKG1hcmtlciA9PiAoXG4gICAgICAgICAgICAgICAgICAgIDxNYXJrZXJcbiAgICAgICAgICAgICAgICAgICAgICAgIGtleT17bWFya2VyLmlkfVxuICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb249e3sgbGF0OiBtYXJrZXIubGF0LCBsbmc6IG1hcmtlci5sbmcgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHByb3BzLm9uVG9nZ2xlSW5mb1dpbmRvdyhtYXJrZXIuaWQpfVxuICAgICAgICAgICAgICAgICAgICAgICAgb25EcmFnRW5kPXtwcm9wcy5vbk1hcmtlckRyYWd9XG4gICAgICAgICAgICAgICAgICAgICAgICBkcmFnZ2FibGU9e3Byb3BzLmRyYWdnYWJsZX1cbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAge21hcmtlci5pc0luZm9XaW5kb3dPcGVuICYmXG4gICAgICAgICAgICAgICAgICAgICAgICA8SW5mb1dpbmRvdyBvbkNsb3NlQ2xpY2s9eygpID0+IHByb3BzLm9uVG9nZ2xlSW5mb1dpbmRvdyhtYXJrZXIuaWQpfT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PnttYXJrZXIubmFtZX08L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvSW5mb1dpbmRvdz5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgPC9NYXJrZXI+XG4gICAgICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICA8L01hcmtlckNsdXN0ZXJlcj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgPC9Hb29nbGVNYXA+XG4gICAgfVxuKTtcblxuZXhwb3J0IGNsYXNzIEdNYXAgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICAgICAgc3VwZXIocHJvcHMpO1xuXG4gICAgICAgIHRoaXMuc3RhdGUgPSB7XG4gICAgICAgICAgICBtYXJrZXJzOiBwcm9wcy5tYXJrZXJzXG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5oYW5kbGVNYXBMb2FkID0gdGhpcy5oYW5kbGVNYXBMb2FkLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuaGFuZGxlTWFwQ2hhbmdlID0gdGhpcy5oYW5kbGVNYXBDaGFuZ2UuYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5oYW5kbGVNYXJrZXJEcmFnID0gdGhpcy5oYW5kbGVNYXJrZXJEcmFnLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuaGFuZGxlTWFwQ2xpY2sgPSB0aGlzLmhhbmRsZU1hcENsaWNrLmJpbmQodGhpcyk7XG4gICAgfVxuXG4gICAgY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wcywgcHJldlN0YXRlLCBzbmFwc2hvdCkge1xuICAgICAgICBjb25zdCBuZXdfbWFya2VycyA9IHRoaXMucHJvcHMubWFya2VycztcblxuICAgICAgICBpZiAoIWFycmF5c0VxdWFsKG5ld19tYXJrZXJzLCBwcmV2UHJvcHMubWFya2VycykpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0U3RhdGUoeyBtYXJrZXJzOiBuZXdfbWFya2VycyB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBvbGRfbWFya2Vyc19zdHIgPSBwcmV2UHJvcHMubWFya2Vycy5tYXAoIG0gPT4gbS5pZCApLnNvcnQoKS5qb2luKCk7XG4gICAgICAgIGxldCBuZXdfbWFya2Vyc19zdHIgPSBuZXdfbWFya2Vycy5tYXAoIG0gPT4gbS5pZCApLnNvcnQoKS5qb2luKCk7XG5cbiAgICAgICAgaWYgKG5ld19tYXJrZXJzLmxlbmd0aCA+IDEgJiYgb2xkX21hcmtlcnNfc3RyICE9PSBuZXdfbWFya2Vyc19zdHIpIHtcbiAgICAgICAgICAgIGNvbnN0IG1hcmtlckJvdW5kcyA9IG5ldyBnb29nbGUubWFwcy5MYXRMbmdCb3VuZHMoKTtcbiAgICAgICAgICAgIGZvciAobGV0IG1hcmtlciBvZiBuZXdfbWFya2Vycykge1xuICAgICAgICAgICAgICAgIGxldCBtYXJrZXJfbG9jID0gbmV3IGdvb2dsZS5tYXBzLkxhdExuZyhtYXJrZXIubGF0LCBtYXJrZXIubG5nKTtcbiAgICAgICAgICAgICAgICBtYXJrZXJCb3VuZHMuZXh0ZW5kKG1hcmtlcl9sb2MpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5fbWFwQ29tcG9uZW50LmZpdEJvdW5kcyhtYXJrZXJCb3VuZHMpO1xuICAgICAgICB9XG5cblxuICAgIH1cblxuICAgIGhhbmRsZU1hcExvYWQobWFwKSB7XG4gICAgICAgIHRoaXMuX21hcENvbXBvbmVudCA9IG1hcDtcbiAgICB9XG5cbiAgICBoYW5kbGVNYXBDaGFuZ2UoKSB7XG4gICAgICAgIGxldCB2aXNpYmxlX21hcmtlcnMgPSB0aGlzLnByb3BzLm1hcmtlcnMuZmlsdGVyKG0gPT4ge1xuICAgICAgICAgICAgbGV0IG1hcmtlcl9sb2MgPSBuZXcgZ29vZ2xlLm1hcHMuTGF0TG5nKG0ubGF0LCBtLmxuZyk7XG4gICAgICAgICAgICByZXR1cm4gKHRoaXMuX21hcENvbXBvbmVudC5nZXRCb3VuZHMoKS5jb250YWlucyhtYXJrZXJfbG9jKSkgO1xuICAgICAgICB9KTtcblxuICAgICAgICBpZiAodGhpcy5wcm9wcy5oYXNPd25Qcm9wZXJ0eSgnb25DaGFuZ2VDYWxsYmFjaycpKVxuICAgICAgICAgICAgdGhpcy5wcm9wcy5vbkNoYW5nZUNhbGxiYWNrKHZpc2libGVfbWFya2Vycyk7XG4gICAgfTtcblxuICAgIGhhbmRsZU1hcmtlckNsaWNrKG1hcmtlcl9pZCkge1xuICAgICAgICBsZXQgbWFya2VycyA9IHRoaXMuc3RhdGUubWFya2VycztcbiAgICAgICAgbGV0IGlzX29wZW4gPSBtYXJrZXJzLmZpbmQobSA9PiBtLmlkID09IG1hcmtlcl9pZCkuaXNJbmZvV2luZG93T3BlbjtcbiAgICAgICAgbWFya2Vycy5maW5kKG0gPT4gbS5pZCA9PSBtYXJrZXJfaWQpLmlzSW5mb1dpbmRvd09wZW4gPSAhaXNfb3BlbjtcblxuICAgICAgICB0aGlzLnNldFN0YXRlKHsgbWFya2VyczogbWFya2VycyB9KTtcbiAgICB9O1xuXG4gICAgaGFuZGxlTWFya2VyRHJhZyhldikge1xuICAgICAgICB0aGlzLnByb3BzLm9uTWFya2VyRHJhZ2dlZChldi5sYXRMbmcubGF0KCksIGV2LmxhdExuZy5sbmcoKSk7XG4gICAgfTtcblxuICAgIGhhbmRsZU1hcENsaWNrKGV2KSB7XG4gICAgICAgIHRoaXMucHJvcHMub25NYXBDbGljayhldi5sYXRMbmcubGF0KCksIGV2LmxhdExuZy5sbmcoKSk7XG4gICAgfTtcblxuICAgIHJlbmRlcigpIHtcbiAgICAgICAgbGV0IHttYXJrZXJzfSA9IHRoaXMuc3RhdGU7XG4gICAgICAgIGxldCB7em9vbSwgY2VudGVyfSA9IHRoaXMucHJvcHM7XG4gICAgICAgIGxldCBkcmFnZ2FibGUgPSB0aGlzLnByb3BzLmhhc093blByb3BlcnR5KCdkcmFnZ2FibGUnKTtcblxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPEdvb2dsZU1hcFdyYXBwZXJcbiAgICAgICAgICAgICAgICBzaG93TWFya2Vycz17bWFya2Vycy5sZW5ndGggPiAwfVxuICAgICAgICAgICAgICAgIG1hcmtlcnM9e21hcmtlcnN9XG4gICAgICAgICAgICAgICAgem9vbT17IHpvb20gPyB6b29tIDogTUFQLmRlZmF1bHRab29tIH1cbiAgICAgICAgICAgICAgICBjZW50ZXI9eyBjZW50ZXIubGF0ID8gY2VudGVyIDogTUFQLmRlZmF1bHRDZW50ZXIgfVxuICAgICAgICAgICAgICAgIGxvYWRpbmdFbGVtZW50PXs8ZGl2IHN0eWxlPXt7IGhlaWdodDogYDEwMCVgIH19IC8+fVxuICAgICAgICAgICAgICAgIGNvbnRhaW5lckVsZW1lbnQ9ezxkaXYgc3R5bGU9e3sgaGVpZ2h0OiBgNDAwcHhgIH19IC8+fVxuICAgICAgICAgICAgICAgIG1hcEVsZW1lbnQ9ezxkaXYgc3R5bGU9e3sgaGVpZ2h0OiBgMTAwJWAgfX0gLz59XG4gICAgICAgICAgICAgICAgb25NYXBMb2FkPXt0aGlzLmhhbmRsZU1hcExvYWR9XG4gICAgICAgICAgICAgICAgb25NYXBDaGFuZ2U9e3RoaXMuaGFuZGxlTWFwQ2hhbmdlfVxuICAgICAgICAgICAgICAgIG9uVG9nZ2xlSW5mb1dpbmRvdz17dGhpcy5oYW5kbGVNYXJrZXJDbGlja31cbiAgICAgICAgICAgICAgICBvbk1hcmtlckRyYWc9e3RoaXMuaGFuZGxlTWFya2VyRHJhZ31cbiAgICAgICAgICAgICAgICBkcmFnZ2FibGU9e2RyYWdnYWJsZX1cbiAgICAgICAgICAgICAgICBvbk1hcENsaWNrPXt0aGlzLmhhbmRsZU1hcENsaWNrfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgKTtcbiAgICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEdNYXA7XG4iLCIvKipcbiAqIENvcHlyaWdodCAyMDE3IE9wZW5TdGFjayBGb3VuZGF0aW9uXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiovXG5cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgQXN5bmNTZWxlY3QgZnJvbSAncmVhY3Qtc2VsZWN0L2xpYi9Bc3luYyc7XG5pbXBvcnQge3F1ZXJ5QWNjZXNzTGV2ZWxzfSBmcm9tICcuLi8uLi91dGlscy9xdWVyeS1hY3Rpb25zJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQWNjZXNzTGV2ZWxzSW5wdXQgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICAgICAgc3VwZXIocHJvcHMpO1xuXG4gICAgICAgIHRoaXMuc3RhdGUgPSB7XG4gICAgICAgICAgICB2YWx1ZTogcHJvcHMudmFsdWVcbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLmhhbmRsZUNoYW5nZSA9IHRoaXMuaGFuZGxlQ2hhbmdlLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuZ2V0QWNjZXNzTGV2ZWxzID0gdGhpcy5nZXRBY2Nlc3NMZXZlbHMuYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5nZXRPcHRpb25WYWx1ZSA9IHRoaXMuZ2V0T3B0aW9uVmFsdWUuYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5nZXRPcHRpb25MYWJlbCA9IHRoaXMuZ2V0T3B0aW9uTGFiZWwuYmluZCh0aGlzKTtcbiAgICB9XG5cbiAgICBnZXRPcHRpb25WYWx1ZShhY2Nlc3NMZXZlbCl7XG4gICAgICAgIGlmKHRoaXMucHJvcHMuaGFzT3duUHJvcGVydHkoXCJnZXRPcHRpb25WYWx1ZVwiKSl7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wcm9wcy5nZXRPcHRpb25WYWx1ZShhY2Nlc3NMZXZlbCk7XG4gICAgICAgIH1cbiAgICAgICAgLy9kZWZhdWx0XG4gICAgICAgIHJldHVybiBhY2Nlc3NMZXZlbC5pZDtcbiAgICB9XG5cbiAgICBnZXRPcHRpb25MYWJlbChhY2Nlc3NMZXZlbCl7XG4gICAgICAgIGlmKHRoaXMucHJvcHMuaGFzT3duUHJvcGVydHkoXCJnZXRPcHRpb25MYWJlbFwiKSl7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wcm9wcy5nZXRPcHRpb25MYWJlbChhY2Nlc3NMZXZlbCk7XG4gICAgICAgIH1cbiAgICAgICAgLy9kZWZhdWx0XG4gICAgICAgIHJldHVybiBgJHthY2Nlc3NMZXZlbC5uYW1lfWA7XG4gICAgfVxuXG4gICAgaGFuZGxlQ2hhbmdlKHZhbHVlKSB7XG4gICAgICAgIGxldCBldiA9IHt0YXJnZXQ6IHtcbiAgICAgICAgICAgICAgICBpZDogdGhpcy5wcm9wcy5pZCxcbiAgICAgICAgICAgICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICAgICAgICAgICAgdHlwZTogJ2FjY2Vzc2xldmVsaW5wdXQnXG4gICAgICAgICAgICB9fTtcblxuICAgICAgICB0aGlzLnByb3BzLm9uQ2hhbmdlKGV2KTtcbiAgICB9XG5cbiAgICBnZXRBY2Nlc3NMZXZlbHMgKGlucHV0LCBjYWxsYmFjaykge1xuICAgICAgICBsZXQge3N1bW1pdElkfSA9IHRoaXMucHJvcHM7XG5cbiAgICAgICAgaWYgKCFpbnB1dCkge1xuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh7IG9wdGlvbnM6IFtdIH0pO1xuICAgICAgICB9XG4gICAgICAgIHF1ZXJ5QWNjZXNzTGV2ZWxzKHN1bW1pdElkLGlucHV0LCBjYWxsYmFjayk7XG4gICAgfVxuXG4gICAgcmVuZGVyKCkge1xuICAgICAgICBsZXQge3ZhbHVlLCBlcnJvciwgb25DaGFuZ2UsIGlkLCBtdWx0aSwgLi4ucmVzdH0gPSB0aGlzLnByb3BzO1xuICAgICAgICBsZXQgaXNNdWx0aSA9ICh0aGlzLnByb3BzLmhhc093blByb3BlcnR5KCdtdWx0aScpKTtcbiAgICAgICAgbGV0IGhhc19lcnJvciA9ICggdGhpcy5wcm9wcy5oYXNPd25Qcm9wZXJ0eSgnZXJyb3InKSAmJiBlcnJvciAhPSAnJyApO1xuXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgIDxBc3luY1NlbGVjdFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZT17dmFsdWV9XG4gICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXt0aGlzLmhhbmRsZUNoYW5nZX1cbiAgICAgICAgICAgICAgICAgICAgbG9hZE9wdGlvbnM9e3RoaXMuZ2V0QWNjZXNzTGV2ZWxzfVxuICAgICAgICAgICAgICAgICAgICBnZXRPcHRpb25WYWx1ZT17bSA9PiB0aGlzLmdldE9wdGlvblZhbHVlKG0pfVxuICAgICAgICAgICAgICAgICAgICBnZXRPcHRpb25MYWJlbD17bSA9PiB0aGlzLmdldE9wdGlvbkxhYmVsKG0pfVxuICAgICAgICAgICAgICAgICAgICBpc011bHRpPXtpc011bHRpfVxuICAgICAgICAgICAgICAgICAgICB7Li4ucmVzdH1cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIHtoYXNfZXJyb3IgJiZcbiAgICAgICAgICAgICAgICA8cCBjbGFzc05hbWU9XCJlcnJvci1sYWJlbFwiPntlcnJvcn08L3A+XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKTtcblxuICAgIH1cbn1cblxuIiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxNyBPcGVuU3RhY2sgRm91bmRhdGlvblxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICoqL1xuXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0ICcuL2FjdGlvbi1kcm9wZG93bi5sZXNzJztcbmltcG9ydCBTZWxlY3QgZnJvbSAncmVhY3Qtc2VsZWN0JztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQWN0aW9uRHJvcGRvd24gZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICAgICAgc3VwZXIocHJvcHMpO1xuXG4gICAgICAgIHRoaXMuc3RhdGUgPSB7XG4gICAgICAgICAgICB2YWx1ZTogbnVsbCxcbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLmhhbmRsZUNoYW5nZSA9IHRoaXMuaGFuZGxlQ2hhbmdlLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuaGFuZGxlQ2xpY2sgPSB0aGlzLmhhbmRsZUNsaWNrLmJpbmQodGhpcyk7XG4gICAgfVxuXG4gICAgaGFuZGxlQ2hhbmdlKHZhbHVlKSB7XG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe3ZhbHVlOiB2YWx1ZX0pO1xuICAgIH1cblxuICAgIGhhbmRsZUNsaWNrKGV2KSB7XG4gICAgICAgIGV2LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHRoaXMucHJvcHMub25DbGljayh0aGlzLnN0YXRlLnZhbHVlLnZhbHVlKTtcbiAgICB9XG5cbiAgICByZW5kZXIoKSB7XG5cbiAgICAgICAgbGV0IHtvcHRpb25zLCBhY3Rpb25MYWJlbCwgcGxhY2Vob2xkZXIsIC4uLnJlc3R9ID0gdGhpcy5wcm9wcztcbiAgICAgICAgbGV0IHt2YWx1ZX0gPSB0aGlzLnN0YXRlO1xuXG4gICAgICAgIGxldCBzbWFsbERkbCA9IHRoaXMucHJvcHMuaGFzT3duUHJvcGVydHkoJ3NtYWxsJykgPyAnc21hbGwnIDogJyc7XG4gICAgICAgIGxldCBzbWFsbEJ0biA9IHRoaXMucHJvcHMuaGFzT3duUHJvcGVydHkoJ3NtYWxsJykgPyAnYnRuLWdyb3VwLXNtJyA6ICdub3JtYWwnO1xuXG4gICAgICAgIGxldCB0aGVWYWx1ZSA9ICh2YWx1ZSBpbnN0YW5jZW9mIE9iamVjdCB8fCB2YWx1ZSA9PSBudWxsKSA/IHZhbHVlIDogb3B0aW9ucy5maW5kKG9wdCA9PiBvcHQudmFsdWUgPT0gdmFsdWUpO1xuXG5cbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtcImFjdGlvbi1kcm9wZG93biBidG4tZ3JvdXAgXCIgKyBzbWFsbEJ0bn0+XG4gICAgICAgICAgICAgICAgPFNlbGVjdFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZT17dGhlVmFsdWV9XG4gICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXt0aGlzLmhhbmRsZUNoYW5nZX1cbiAgICAgICAgICAgICAgICAgICAgb3B0aW9ucz17b3B0aW9uc31cbiAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9e3BsYWNlaG9sZGVyfVxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9e1wiYnRuLWdyb3VwIGFjdGlvbi1zZWxlY3QgdGV4dC1sZWZ0XCIgKyBzbWFsbERkbH1cbiAgICAgICAgICAgICAgICAgICAgaXNDbGVhcmFibGU9e2ZhbHNlfVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3NOYW1lPVwiYnRuIGJ0bi1kZWZhdWx0IGFjdGlvbi1idXR0b25cIiBvbkNsaWNrPXt0aGlzLmhhbmRsZUNsaWNrfT5cbiAgICAgICAgICAgICAgICAgICAge2FjdGlvbkxhYmVsfVxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICk7XG5cbiAgICB9XG59XG4iLCIvKipcbiAqIENvcHlyaWdodCAyMDE4IE9wZW5TdGFjayBGb3VuZGF0aW9uXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiovXG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFQgZnJvbSAnaTE4bi1yZWFjdC9kaXN0L2kxOG4tcmVhY3QnO1xuaW1wb3J0IFJhd0hUTUwgZnJvbSAnLi4vcmF3LWh0bWwnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDaGVja2JveExpc3QgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICAgICAgc3VwZXIocHJvcHMpO1xuXG4gICAgICAgIGxldCBvdGhlclZhbHVlID0gcHJvcHMudmFsdWUgPyBwcm9wcy52YWx1ZS5maW5kKCB2ID0+ICFwcm9wcy5vcHRpb25zLm1hcChvcCA9PiBvcC52YWx1ZSkuaW5jbHVkZXModikgKSA6IGZhbHNlO1xuXG4gICAgICAgIHRoaXMuc3RhdGUgPSB7XG4gICAgICAgICAgICBvdGhlckNoZWNrZWQ6ICEhb3RoZXJWYWx1ZVxuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMuaGFuZGxlQ2hhbmdlID0gdGhpcy5oYW5kbGVDaGFuZ2UuYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5oYW5kbGVPdGhlckNCQ2hhbmdlID0gdGhpcy5oYW5kbGVPdGhlckNCQ2hhbmdlLmJpbmQodGhpcyk7XG4gICAgfVxuXG4gICAgaGFuZGxlQ2hhbmdlKGV2ZW50KSB7XG4gICAgICAgIGxldCBvcHRpb25WYWx1ZXMgPSB0aGlzLnByb3BzLm9wdGlvbnMubWFwKG9wID0+IG9wLnZhbHVlKTtcbiAgICAgICAgbGV0IHZhbHVlID0gdGhpcy5wcm9wcy52YWx1ZSA/IFsuLi50aGlzLnByb3BzLnZhbHVlXSA6IFtdO1xuXG4gICAgICAgIGlmIChldmVudC50YXJnZXQudHlwZSA9PT0gJ2NoZWNrYm94Jykge1xuICAgICAgICAgICAgaWYgKGV2ZW50LnRhcmdldC5jaGVja2VkKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdGhlVmFsID0gaXNOYU4oZXZlbnQudGFyZ2V0LnZhbHVlKSA/IGV2ZW50LnRhcmdldC52YWx1ZSA6IHBhcnNlSW50KGV2ZW50LnRhcmdldC52YWx1ZSk7XG4gICAgICAgICAgICAgICAgdmFsdWUucHVzaCh0aGVWYWwpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlLmZpbHRlciggdiA9PiB2ICE9IGV2ZW50LnRhcmdldC52YWx1ZSApXG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YWx1ZSA9IHZhbHVlLmZpbHRlcih2ID0+IG9wdGlvblZhbHVlcy5pbmNsdWRlcyh2KSk7XG4gICAgICAgICAgICB2YWx1ZS5wdXNoKGV2ZW50LnRhcmdldC52YWx1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgZXYgPSB7dGFyZ2V0OiB7XG4gICAgICAgICAgICAgICAgaWQ6IHRoaXMucHJvcHMuaWQsXG4gICAgICAgICAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdjaGVja2JveGxpc3QnXG4gICAgICAgICAgICB9fTtcblxuICAgICAgICB0aGlzLnByb3BzLm9uQ2hhbmdlKGV2KTtcbiAgICB9XG5cbiAgICBoYW5kbGVPdGhlckNCQ2hhbmdlKGV2ZW50KSB7XG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe290aGVyQ2hlY2tlZDogZXZlbnQudGFyZ2V0LmNoZWNrZWR9KTtcbiAgICB9XG5cbiAgICByZW5kZXIoKSB7XG5cbiAgICAgICAgbGV0IHtvbkNoYW5nZSwgdmFsdWUsIGNsYXNzTmFtZSwgb3B0aW9ucywgaWQsIGNoaWxkcmVuLCBlcnJvciwgZGlzYWJsZWQsbmFtZSwgLi4ucmVzdH0gPSB0aGlzLnByb3BzO1xuICAgICAgICBsZXQgeyBvdGhlckNoZWNrZWQgfSA9IHRoaXMuc3RhdGU7XG5cbiAgICAgICAgbGV0IGlubGluZSA9ICggdGhpcy5wcm9wcy5oYXNPd25Qcm9wZXJ0eSgnaW5saW5lJykgKTtcbiAgICAgICAgbGV0IGh0bWwgPSAoIHRoaXMucHJvcHMuaGFzT3duUHJvcGVydHkoJ2h0bWwnKSApO1xuICAgICAgICBsZXQgYWxsb3dPdGhlciA9ICggdGhpcy5wcm9wcy5oYXNPd25Qcm9wZXJ0eSgnYWxsb3dPdGhlcicpICk7XG4gICAgICAgIGxldCBvdGhlclZhbHVlID0gdmFsdWUgPyB2YWx1ZS5maW5kKCB2ID0+ICFvcHRpb25zLm1hcChvcCA9PiBvcC52YWx1ZSkuaW5jbHVkZXModikgKSA6IGZhbHNlIDtcbiAgICAgICAgbGV0IGhhc19lcnJvciA9ICggdGhpcy5wcm9wcy5oYXNPd25Qcm9wZXJ0eSgnZXJyb3InKSAmJiBlcnJvciAhPT0gJycgKTtcbiAgICAgICAgbGV0IGlzRGlzYWJsZWQgPSAodGhpcy5wcm9wcy5oYXNPd25Qcm9wZXJ0eSgnZGlzYWJsZWQnKSAmJiBkaXNhYmxlZCA9PSB0cnVlKTtcblxuXG4gICAgICAgIGxldCBzdHlsZSwgbGFiZWw7XG5cbiAgICAgICAgaWYgKGlubGluZSkge1xuICAgICAgICAgICAgc3R5bGUgPSB7XG4gICAgICAgICAgICAgICAgcGFkZGluZ0xlZnQ6ICcyMnB4JyxcbiAgICAgICAgICAgICAgICBtYXJnaW5MZWZ0OiAnMjBweCcsXG4gICAgICAgICAgICAgICAgZmxvYXQ6ICdsZWZ0J1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHN0eWxlID0ge1xuICAgICAgICAgICAgICAgIHBhZGRpbmdMZWZ0OiAnMjJweCcsXG4gICAgICAgICAgICAgICAgbWFyZ2luVG9wOiAnN3B4J1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxkaXYgaWQ9e2BjaGxfd3JhcHBlcl8ke2lkfWB9PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtcImNoZWNrYm94ZXMtZGl2XCIgKyAoaGFzX2Vycm9yID8gJyBlcnJvcicgOiAnJykgfT5cbiAgICAgICAgICAgICAgICAgICAgeyBvcHRpb25zLm1hcChvcCA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgY2hlY2tlZCA9IHZhbHVlID8gdmFsdWUuaW5jbHVkZXMob3AudmFsdWUpIDogZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZm9ybS1jaGVjayBhYmMtY2hlY2tib3hcIiBrZXk9e1wicmFkaW9fa2V5X1wiICsgb3AudmFsdWV9IHN0eWxlPXtzdHlsZX0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ9e2BjYl8ke2lkfV8ke29wLnZhbHVlfWB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lPXtuYW1lPyBuYW1lIDogaWQgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tlZD17Y2hlY2tlZH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXtpc0Rpc2FibGVkfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9e3RoaXMuaGFuZGxlQ2hhbmdlfSBjbGFzc05hbWU9XCJmb3JtLWNoZWNrLWlucHV0XCIgdmFsdWU9e29wLnZhbHVlfSAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3NOYW1lPVwiZm9ybS1jaGVjay1sYWJlbFwiIGh0bWxGb3I9e2BjYl8ke2lkfV8ke29wLnZhbHVlfWAgIH0gPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2h0bWwgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8UmF3SFRNTD57b3AubGFiZWx9PC9SYXdIVE1MPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyFodG1sICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3AubGFiZWxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgfSl9XG5cbiAgICAgICAgICAgICAgICAgICAge2FsbG93T3RoZXIgJiZcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmb3JtLWNoZWNrIGFiYy1jaGVja2JveFwiIHN0eWxlPXtzdHlsZX0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgaWQ9e1wiY2Jfb3RoZXJcIiArIGlkfSBjaGVja2VkPXtvdGhlckNoZWNrZWR9IGRpc2FibGVkPXtpc0Rpc2FibGVkfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXt0aGlzLmhhbmRsZU90aGVyQ0JDaGFuZ2V9IGNsYXNzTmFtZT1cImZvcm0tY2hlY2staW5wdXRcIiB2YWx1ZT1cIm90aGVyXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzc05hbWU9XCJmb3JtLWNoZWNrLWxhYmVsXCIgaHRtbEZvcj17XCJjYl9vdGhlclwiICsgaWR9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtULnRyYW5zbGF0ZShcImdlbmVyYWwub3RoZXJcIil9XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHthbGxvd090aGVyICYmIG90aGVyQ2hlY2tlZCAmJlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXt7cGFkZGluZ0xlZnQ6ICcyMnB4Jywgd2lkdGg6ICc1MCUnfX0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3NOYW1lPVwiZm9ybS1jb250cm9sXCIgZGlzYWJsZWQ9e2lzRGlzYWJsZWR9IG9uQ2hhbmdlPXt0aGlzLmhhbmRsZUNoYW5nZX0gdmFsdWU9e290aGVyVmFsdWV9IC8+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICB7aGFzX2Vycm9yICYmXG4gICAgICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwiZXJyb3ItbGFiZWxcIj57ZXJyb3J9PC9wPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICApO1xuXG4gICAgfVxufVxuXG5cbkNoZWNrYm94TGlzdC5wcm9wVHlwZXMgPSB7XG4gICAgaWQ6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZFxufTsiLCIvKipcbiAqIENvcHlyaWdodCAyMDE3IE9wZW5TdGFjayBGb3VuZGF0aW9uXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiovXG5cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgQXN5bmNTZWxlY3QgZnJvbSAncmVhY3Qtc2VsZWN0L2xpYi9Bc3luYyc7XG5pbXBvcnQge3F1ZXJ5Q29tcGFuaWVzfSBmcm9tICcuLi8uLi91dGlscy9xdWVyeS1hY3Rpb25zJztcbmltcG9ydCBBc3luY0NyZWF0YWJsZVNlbGVjdCBmcm9tIFwicmVhY3Qtc2VsZWN0L2xpYi9Bc3luY0NyZWF0YWJsZVwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDb21wYW55SW5wdXQgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICAgICAgc3VwZXIocHJvcHMpO1xuXG4gICAgICAgIHRoaXMuaGFuZGxlQ2hhbmdlID0gdGhpcy5oYW5kbGVDaGFuZ2UuYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5oYW5kbGVOZXcgPSB0aGlzLmhhbmRsZU5ldy5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLmdldENvbXBhbmllcyA9IHRoaXMuZ2V0Q29tcGFuaWVzLmJpbmQodGhpcyk7XG4gICAgfVxuXG4gICAgaGFuZGxlQ2hhbmdlKHZhbHVlKSB7XG4gICAgICAgIGNvbnN0IGlzTXVsdGkgPSAodGhpcy5wcm9wcy5oYXNPd25Qcm9wZXJ0eSgnbXVsdGknKSB8fCB0aGlzLnByb3BzLmhhc093blByb3BlcnR5KCdpc011bHRpJykpO1xuICAgICAgICBjb25zdCB0aGVWYWx1ZSA9IGlzTXVsdGkgPyB2YWx1ZS5tYXAodiA9PiAoe2lkOiB2LnZhbHVlLCBuYW1lOiB2LmxhYmVsfSkpIDoge2lkOiB2YWx1ZS52YWx1ZSwgbmFtZTogdmFsdWUubGFiZWx9O1xuXG4gICAgICAgIGxldCBldiA9IHt0YXJnZXQ6IHtcbiAgICAgICAgICAgICAgICBpZDogdGhpcy5wcm9wcy5pZCxcbiAgICAgICAgICAgICAgICB2YWx1ZTogdGhlVmFsdWUsXG4gICAgICAgICAgICAgICAgdHlwZTogJ2NvbXBhbnlpbnB1dCdcbiAgICAgICAgICAgIH19O1xuXG4gICAgICAgIHRoaXMucHJvcHMub25DaGFuZ2UoZXYpO1xuICAgIH1cblxuICAgIGhhbmRsZU5ldyh2YWx1ZSkge1xuICAgICAgICAvLyB3ZSBuZWVkIHRvIG1hcCBpbnRvIHZhbHVlL2xhYmVsIGJlY2F1c2Ugb2YgYSBidWcgaW4gcmVhY3Qtc2VsZWN0IDJcbiAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL0plZFdhdHNvbi9yZWFjdC1zZWxlY3QvaXNzdWVzLzI5OThcblxuICAgICAgICBjb25zdCB0cmFuc2xhdGVWYWx1ZSA9IChuZXdWYWx1ZSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5oYW5kbGVDaGFuZ2Uoe3ZhbHVlOiBuZXdWYWx1ZS5pZCwgbGFiZWw6IG5ld1ZhbHVlLm5hbWV9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMucHJvcHMub25DcmVhdGUodmFsdWUsIHRyYW5zbGF0ZVZhbHVlKTtcbiAgICB9XG5cbiAgICBnZXRDb21wYW5pZXMgKGlucHV0LCBjYWxsYmFjaykge1xuICAgICAgICBpZiAoIWlucHV0KSB7XG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHsgb3B0aW9uczogW10gfSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyB3ZSBuZWVkIHRvIG1hcCBpbnRvIHZhbHVlL2xhYmVsIGJlY2F1c2Ugb2YgYSBidWcgaW4gcmVhY3Qtc2VsZWN0IDJcbiAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL0plZFdhdHNvbi9yZWFjdC1zZWxlY3QvaXNzdWVzLzI5OThcblxuICAgICAgICBjb25zdCB0cmFuc2xhdGVPcHRpb25zID0gKG9wdGlvbnMpID0+IHtcbiAgICAgICAgICAgIGxldCBuZXdPcHRpb25zID0gb3B0aW9ucy5tYXAoYyA9PiAoe3ZhbHVlOiBjLmlkLnRvU3RyaW5nKCksIGxhYmVsOiBjLm5hbWV9KSk7XG4gICAgICAgICAgICBjYWxsYmFjayhuZXdPcHRpb25zKTtcbiAgICAgICAgfTtcblxuICAgICAgICBxdWVyeUNvbXBhbmllcyhpbnB1dCwgdHJhbnNsYXRlT3B0aW9ucyk7XG4gICAgfVxuXG4gICAgcmVuZGVyKCkge1xuICAgICAgICBsZXQge2Vycm9yLCB2YWx1ZSwgb25DaGFuZ2UsIGlkLCBtdWx0aSwgLi4ucmVzdH0gPSB0aGlzLnByb3BzO1xuICAgICAgICBsZXQgaGFzX2Vycm9yID0gKCB0aGlzLnByb3BzLmhhc093blByb3BlcnR5KCdlcnJvcicpICYmIGVycm9yICE9ICcnICk7XG4gICAgICAgIGxldCBpc011bHRpID0gKHRoaXMucHJvcHMuaGFzT3duUHJvcGVydHkoJ211bHRpJykgfHwgdGhpcy5wcm9wcy5oYXNPd25Qcm9wZXJ0eSgnaXNNdWx0aScpKTtcbiAgICAgICAgbGV0IGFsbG93Q3JlYXRlID0gdGhpcy5wcm9wcy5oYXNPd25Qcm9wZXJ0eSgnYWxsb3dDcmVhdGUnKTtcblxuICAgICAgICAvLyB3ZSBuZWVkIHRvIG1hcCBpbnRvIHZhbHVlL2xhYmVsIGJlY2F1c2Ugb2YgYSBidWcgaW4gcmVhY3Qtc2VsZWN0IDJcbiAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL0plZFdhdHNvbi9yZWFjdC1zZWxlY3QvaXNzdWVzLzI5OThcblxuICAgICAgICBsZXQgdGhlVmFsdWUgPSBudWxsO1xuXG4gICAgICAgIGlmIChpc011bHRpICYmIHZhbHVlLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHRoZVZhbHVlID0gdmFsdWUubWFwKHYgPT4gKHt2YWx1ZTogdi5pZC50b1N0cmluZygpLCBsYWJlbDogdi5uYW1lfSApKTtcbiAgICAgICAgfSBlbHNlIGlmICghaXNNdWx0aSAmJiB2YWx1ZSkge1xuICAgICAgICAgICAgdGhlVmFsdWUgPSB7dmFsdWU6IHZhbHVlLmlkLnRvU3RyaW5nKCksIGxhYmVsOiB2YWx1ZS5uYW1lfTtcbiAgICAgICAgfVxuXG5cbiAgICAgICAgY29uc3QgQXN5bmNDb21wb25lbnQgPSBhbGxvd0NyZWF0ZVxuICAgICAgICAgICAgPyBBc3luY0NyZWF0YWJsZVNlbGVjdFxuICAgICAgICAgICAgOiBBc3luY1NlbGVjdDtcblxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICA8QXN5bmNDb21wb25lbnRcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU9e3RoZVZhbHVlfVxuICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17dGhpcy5oYW5kbGVDaGFuZ2V9XG4gICAgICAgICAgICAgICAgICAgIGxvYWRPcHRpb25zPXt0aGlzLmdldENvbXBhbmllc31cbiAgICAgICAgICAgICAgICAgICAgb25DcmVhdGVPcHRpb249e3RoaXMuaGFuZGxlTmV3fVxuICAgICAgICAgICAgICAgICAgICBpc011bHRpPXtpc011bHRpfVxuICAgICAgICAgICAgICAgICAgICB7Li4ucmVzdH1cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIHtoYXNfZXJyb3IgJiZcbiAgICAgICAgICAgICAgICA8cCBjbGFzc05hbWU9XCJlcnJvci1sYWJlbFwiPntlcnJvcn08L3A+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICk7XG5cbiAgICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxNyBPcGVuU3RhY2sgRm91bmRhdGlvblxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICoqL1xuXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IERyb3Bkb3duIGZyb20gJy4vZHJvcGRvd24nO1xuaW1wb3J0IHtnZXRDb3VudHJ5TGlzdH0gZnJvbSAnLi4vLi4vdXRpbHMvcXVlcnktYWN0aW9ucyc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENvdW50cnlEcm9wZG93biBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgICAgICBzdXBlcihwcm9wcyk7XG5cbiAgICAgICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgICAgICAgIG9wdGlvbnM6IFtdXG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5oYW5kbGVDaGFuZ2UgPSB0aGlzLmhhbmRsZUNoYW5nZS5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLnNldE9wdGlvbnMgPSB0aGlzLnNldE9wdGlvbnMuYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5hYm9ydENvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG4gICAgfVxuXG4gICAgY29tcG9uZW50RGlkTW91bnQgKCkge1xuICAgICAgICBsZXQge29wdGlvbnN9ID0gdGhpcy5zdGF0ZTtcblxuICAgICAgICBpZihvcHRpb25zLmxlbmd0aCA9PSAwKXtcbiAgICAgICAgICAgIGdldENvdW50cnlMaXN0KHRoaXMuc2V0T3B0aW9ucywgdGhpcy5hYm9ydENvbnRyb2xsZXIuc2lnbmFsKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNvbXBvbmVudFdpbGxVbm1vdW50KCl7XG4gICAgICAgIHRoaXMuYWJvcnRDb250cm9sbGVyLmFib3J0KCk7XG4gICAgfVxuXG4gICAgaGFuZGxlQ2hhbmdlKHZhbHVlKSB7XG5cbiAgICAgICAgbGV0IGV2ID0ge3RhcmdldDoge1xuICAgICAgICAgICAgICAgIGlkOiB0aGlzLnByb3BzLmlkLFxuICAgICAgICAgICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgICAgICAgICAgICB0eXBlOiAnY291bnRyeWRkbCdcbiAgICAgICAgICAgIH19O1xuXG4gICAgICAgIHRoaXMucHJvcHMub25DaGFuZ2UoZXYpO1xuICAgIH1cblxuICAgIHNldE9wdGlvbnMocmVzcG9uc2UpIHtcbiAgICAgICAgbGV0IGNvdW50cnlMaXN0ID0gcmVzcG9uc2UubWFwKGMgPT4gKHtsYWJlbDogYy5uYW1lLCB2YWx1ZTogYy5pc29fY29kZX0pKTtcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7b3B0aW9uczogY291bnRyeUxpc3R9KTtcbiAgICB9XG5cbiAgICByZW5kZXIoKSB7XG5cbiAgICAgICAgbGV0IHtvcHRpb25zfSA9IHRoaXMuc3RhdGU7XG5cbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxEcm9wZG93biBvcHRpb25zPXtvcHRpb25zfSB7Li4udGhpcy5wcm9wc30gLz5cbiAgICAgICAgKTtcblxuICAgIH1cbn1cbiIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTggT3BlblN0YWNrIEZvdW5kYXRpb25cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqKi9cblxuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBTZWxlY3QgZnJvbSAncmVhY3Qtc2VsZWN0JztcbmltcG9ydCB7Z2V0Q291bnRyeUxpc3R9IGZyb20gJy4uLy4uL3V0aWxzL3F1ZXJ5LWFjdGlvbnMnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDb3VudHJ5SW5wdXQgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICAgICAgc3VwZXIocHJvcHMpO1xuXG4gICAgICAgIHRoaXMuc3RhdGUgPSB7XG4gICAgICAgICAgICBvcHRpb25zOiBbXVxuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMuaGFuZGxlQ2hhbmdlID0gdGhpcy5oYW5kbGVDaGFuZ2UuYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5zZXRPcHRpb25zID0gdGhpcy5zZXRPcHRpb25zLmJpbmQodGhpcyk7XG5cbiAgICAgICAgZ2V0Q291bnRyeUxpc3QodGhpcy5zZXRPcHRpb25zKTtcbiAgICB9XG5cbiAgICBzZXRPcHRpb25zKHJlc3BvbnNlKSB7XG4gICAgICAgIGxldCBjb3VudHJ5TGlzdCA9IHJlc3BvbnNlLm1hcChjID0+ICh7bGFiZWw6IGMubmFtZSwgdmFsdWU6IGMuaXNvX2NvZGV9KSk7XG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe29wdGlvbnM6IGNvdW50cnlMaXN0fSk7XG4gICAgfVxuXG4gICAgaGFuZGxlQ2hhbmdlKHZhbHVlKSB7XG4gICAgICAgIGxldCBpc011bHRpID0gKHRoaXMucHJvcHMuaGFzT3duUHJvcGVydHkoJ211bHRpJykpO1xuICAgICAgICBsZXQgdGhlVmFsdWUgPSBudWxsO1xuXG4gICAgICAgIGlmIChpc011bHRpKSB7XG4gICAgICAgICAgICB0aGVWYWx1ZSA9IHZhbHVlLm1hcCh2ID0+IHYudmFsdWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhlVmFsdWUgPSB2YWx1ZS52YWx1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBldiA9IHt0YXJnZXQ6IHtcbiAgICAgICAgICAgICAgICBpZDogdGhpcy5wcm9wcy5pZCxcbiAgICAgICAgICAgICAgICB2YWx1ZTogdGhlVmFsdWUsXG4gICAgICAgICAgICAgICAgdHlwZTogJ2NvdW50cnlpbnB1dCdcbiAgICAgICAgICAgIH19O1xuXG4gICAgICAgIHRoaXMucHJvcHMub25DaGFuZ2UoZXYpO1xuICAgIH1cblxuICAgIHJlbmRlcigpIHtcbiAgICAgICAgbGV0IHt2YWx1ZSwgb25DaGFuZ2UsIGlkLCBtdWx0aSwgZXJyb3IsIC4uLnJlc3R9ID0gdGhpcy5wcm9wcztcbiAgICAgICAgbGV0IHtvcHRpb25zfSA9IHRoaXMuc3RhdGU7XG4gICAgICAgIGxldCBpc011bHRpID0gKHRoaXMucHJvcHMuaGFzT3duUHJvcGVydHkoJ211bHRpJykpO1xuICAgICAgICBsZXQgdGhlVmFsdWUgPSBudWxsO1xuICAgICAgICBsZXQgaGFzX2Vycm9yID0gKCB0aGlzLnByb3BzLmhhc093blByb3BlcnR5KCdlcnJvcicpICYmIGVycm9yICE9ICcnICk7XG5cbiAgICAgICAgaWYgKGlzTXVsdGkpIHtcbiAgICAgICAgICAgIHRoZVZhbHVlID0gb3B0aW9ucy5maWx0ZXIob3AgPT4gdmFsdWUuaW5jbHVkZXMob3AudmFsdWUpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoZVZhbHVlID0gKHZhbHVlIGluc3RhbmNlb2YgT2JqZWN0IHx8IHZhbHVlID09IG51bGwpID8gdmFsdWUgOiBvcHRpb25zLmZpbmQob3B0ID0+IG9wdC52YWx1ZSA9PSB2YWx1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICA8U2VsZWN0XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17XCJkcm9wZG93blwiICsgKGhhc19lcnJvciA/ICcgZXJyb3InIDogJycpfVxuICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17dGhpcy5oYW5kbGVDaGFuZ2V9XG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbnM9e29wdGlvbnN9XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlPXt0aGVWYWx1ZX1cbiAgICAgICAgICAgICAgICAgICAgaXNNdWx0aT17aXNNdWx0aX1cbiAgICAgICAgICAgICAgICAgICAgey4uLnJlc3R9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICB7aGFzX2Vycm9yICYmXG4gICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cImVycm9yLWxhYmVsXCI+e2Vycm9yfTwvcD5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKTtcbiAgICB9XG59XG4iLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW4iLCIvKipcbiAqIENvcHlyaWdodCAyMDE3IE9wZW5TdGFjayBGb3VuZGF0aW9uXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiovXG5cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgJy4vZGF0ZXRpbWVwaWNrZXIubGVzcyc7XG5pbXBvcnQgRGF0ZXRpbWUgZnJvbSAncmVhY3QtZGF0ZXRpbWUnO1xuaW1wb3J0IG1vbWVudCBmcm9tICdtb21lbnQtdGltZXpvbmUnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEYXRlVGltZVBpY2tlciBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgICAgICBzdXBlcihwcm9wcyk7XG5cbiAgICAgICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgICAgICAgIHZhbHVlOiBwcm9wcy52YWx1ZVxuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMuaGFuZGxlQ2hhbmdlID0gdGhpcy5oYW5kbGVDaGFuZ2UuYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5pc1ZhbGlkRGF0ZSA9IHRoaXMuaXNWYWxpZERhdGUuYmluZCh0aGlzKTtcbiAgICB9XG5cbiAgICBjb21wb25lbnREaWRVcGRhdGUocHJldlByb3BzLCBwcmV2U3RhdGUsIHNuYXBzaG90KSB7XG4gICAgICAgIGlmICh0aGlzLnByb3BzLnZhbHVlICE9PSBwcmV2UHJvcHMudmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0U3RhdGUoe3ZhbHVlOiB0aGlzLnByb3BzLnZhbHVlfSlcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGhhbmRsZUNoYW5nZShkYXRlKSB7XG5cbiAgICAgICAgbGV0IHsgdGltZXpvbmUgfSA9IHRoaXMucHJvcHM7XG5cbiAgICAgICAgaWYgKGRhdGUgJiYgbW9tZW50LmlzTW9tZW50KGRhdGUpKSB7XG4gICAgICAgICAgICBkYXRlID0gbW9tZW50LnR6KGRhdGUuZm9ybWF0KCdZWVlZLU1NLUREIEhIOm1tOnNzJyksIHRpbWV6b25lKVxuICAgICAgICB9IGVsc2UgaWYgKGRhdGUgPT09ICcnKSB7XG4gICAgICAgICAgICBkYXRlID0gbW9tZW50KDApO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGV2ID0ge3RhcmdldDoge1xuICAgICAgICAgICAgICAgIGlkOiB0aGlzLnByb3BzLmlkLFxuICAgICAgICAgICAgICAgIHZhbHVlOiBkYXRlLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdkYXRldGltZSdcbiAgICAgICAgICAgIH19O1xuXG4gICAgICAgIGlmIChkYXRlICYmIG1vbWVudC5pc01vbWVudChkYXRlKSkge1xuICAgICAgICAgICAgdGhpcy5wcm9wcy5vbkNoYW5nZShldik7XG4gICAgICAgIH1cblxuICAgIH1cblxuICAgIGlzVmFsaWREYXRlKGN1cnJlbnREYXRlLCBzZWxlY3RlZERhdGUpIHtcbiAgICAgICAgbGV0IHsgdGltZXpvbmUsIHZhbGlkYXRpb24gfSA9IHRoaXMucHJvcHM7XG4gICAgICAgIGxldCB7YWZ0ZXIsIGJlZm9yZX0gPSB2YWxpZGF0aW9uO1xuXG4gICAgICAgIGlmIChhZnRlciA9PSAnPCcpXG4gICAgICAgICAgICByZXR1cm4gKGN1cnJlbnREYXRlLmlzQmVmb3JlKG1vbWVudC50eihiZWZvcmUgKiAxMDAwLCB0aW1lem9uZSkpKTtcbiAgICAgICAgZWxzZSBpZihhZnRlciA9PSAnPicpXG4gICAgICAgICAgICByZXR1cm4gKGN1cnJlbnREYXRlLmlzQWZ0ZXIobW9tZW50LnR6KGJlZm9yZSAqIDEwMDAsIHRpbWV6b25lKSkpO1xuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGxldCBhZnRlckRhdGUgPSBtb21lbnQudHooYWZ0ZXIgKiAxMDAwLCB0aW1lem9uZSkuc3VidHJhY3QoMSwgJ2RheScpO1xuICAgICAgICAgICAgbGV0IGJlZm9yZURhdGUgPSBtb21lbnQudHooYmVmb3JlICogMTAwMCwgdGltZXpvbmUpO1xuICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnREYXRlLmlzQWZ0ZXIoYWZ0ZXJEYXRlKSAmJiBjdXJyZW50RGF0ZS5pc0JlZm9yZShiZWZvcmVEYXRlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJlbmRlcigpIHtcbiAgICAgICAgbGV0IHZhbGlkYXRlID0gKHR5cGVvZiB0aGlzLnByb3BzLnZhbGlkYXRpb24gIT0gJ3VuZGVmaW5lZCcpO1xuICAgICAgICBsZXQge29uQ2hhbmdlLCBpZCwgdmFsdWUsIGZvcm1hdCwgZXJyb3IsIGlucHV0UHJvcHMsIGRpc2FibGVkLCAuLi5yZXN0fSA9IHRoaXMucHJvcHM7XG4gICAgICAgIGxldCBoYXNfZXJyb3IgPSAoIHRoaXMucHJvcHMuaGFzT3duUHJvcGVydHkoJ2Vycm9yJykgJiYgZXJyb3IgIT0gJycgKTtcbiAgICAgICAgbGV0IGNsYXNzTmFtZSA9ICdmb3JtLWNvbnRyb2wgJyArIChoYXNfZXJyb3IgPyAnZXJyb3InIDogJycpO1xuICAgICAgICBsZXQgaW5wdXREaXNhYmxlZCA9ICh0aGlzLnByb3BzLmhhc093blByb3BlcnR5KCdkaXNhYmxlZCcpKSA/IGRpc2FibGVkIDogZmFsc2U7XG5cbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAge3ZhbGlkYXRlID8gKFxuICAgICAgICAgICAgICAgICAgICA8RGF0ZXRpbWVcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzVmFsaWREYXRlPXt0aGlzLmlzVmFsaWREYXRlfVxuICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9e3RoaXMuaGFuZGxlQ2hhbmdlfVxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0ZUZvcm1hdD17Zm9ybWF0LmRhdGV9XG4gICAgICAgICAgICAgICAgICAgICAgICB0aW1lRm9ybWF0PXtmb3JtYXQudGltZX1cbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPXt0aGlzLnN0YXRlLnZhbHVlfVxuICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRQcm9wcz17ey4uLmlucHV0UHJvcHMsIGlkOiBpZCwgY2xhc3NOYW1lOiBjbGFzc05hbWUsIGRpc2FibGVkOiBpbnB1dERpc2FibGVkLCBhdXRvQ29tcGxldGU6ICdvZmYnfX1cbiAgICAgICAgICAgICAgICAgICAgICAgIHsuLi5yZXN0fVxuICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgICAgICAgIDxEYXRldGltZVxuICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9e3RoaXMuaGFuZGxlQ2hhbmdlfVxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0ZUZvcm1hdD17Zm9ybWF0LmRhdGV9XG4gICAgICAgICAgICAgICAgICAgICAgICB0aW1lRm9ybWF0PXtmb3JtYXQudGltZX1cbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPXt0aGlzLnN0YXRlLnZhbHVlfVxuICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRQcm9wcz17ey4uLmlucHV0UHJvcHMsIGlkOiBpZCwgY2xhc3NOYW1lOiBjbGFzc05hbWUsIGRpc2FibGVkOiBpbnB1dERpc2FibGVkLCBhdXRvQ29tcGxldGU6ICdvZmYnfX1cbiAgICAgICAgICAgICAgICAgICAgICAgIHsuLi5yZXN0fVxuICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICl9XG5cbiAgICAgICAgICAgICAgICB7aGFzX2Vycm9yICYmXG4gICAgICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwiZXJyb3ItbGFiZWxcIj57ZXJyb3J9PC9wPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICApO1xuICAgIH1cbn1cbiIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTcgT3BlblN0YWNrIEZvdW5kYXRpb25cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqKi9cblxuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBTZWxlY3QgZnJvbSAncmVhY3Qtc2VsZWN0JztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRHJvcGRvd24gZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICAgICAgc3VwZXIocHJvcHMpO1xuXG4gICAgICAgIHRoaXMuaGFuZGxlQ2hhbmdlID0gdGhpcy5oYW5kbGVDaGFuZ2UuYmluZCh0aGlzKTtcbiAgICB9XG5cbiAgICBoYW5kbGVDaGFuZ2Uoc2VsZWN0aW9uKSB7XG5cbiAgICAgICAgbGV0IHZhbHVlID0gbnVsbDtcbiAgICAgICAgaWYgKHRoaXMucHJvcHMuaXNNdWx0aSkge1xuICAgICAgICAgICAgdmFsdWUgPSBzZWxlY3Rpb24gPyBzZWxlY3Rpb24ubWFwKHZhbCA9PiB2YWwudmFsdWUpIDogbnVsbDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHZhbHVlID0gc2VsZWN0aW9uID8gc2VsZWN0aW9uLnZhbHVlIDogbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBldiA9IHt0YXJnZXQ6IHtcbiAgICAgICAgICAgICAgICBpZDogdGhpcy5wcm9wcy5pZCxcbiAgICAgICAgICAgICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICAgICAgICAgICAgdHlwZTogJ2Ryb3Bkb3duJ1xuICAgICAgICAgICAgfX07XG5cbiAgICAgICAgdGhpcy5wcm9wcy5vbkNoYW5nZShldik7XG4gICAgfVxuXG4gICAgcmVuZGVyKCkge1xuXG4gICAgICAgIGxldCB7b25DaGFuZ2UsIHZhbHVlLCBjbGFzc05hbWUsIGVycm9yLCBjbGVhcmFibGUsIGRpc2FibGVkLCBvdmVycmlkZUNTUywgLi4ucmVzdH0gPSB0aGlzLnByb3BzO1xuICAgICAgICBsZXQgaGFzX2Vycm9yID0gKCB0aGlzLnByb3BzLmhhc093blByb3BlcnR5KCdlcnJvcicpICYmIGVycm9yICE9ICcnICk7XG4gICAgICAgIGxldCBpc0NsZWFyYWJsZSA9ICh0aGlzLnByb3BzLmhhc093blByb3BlcnR5KCdjbGVhcmFibGUnKSk7XG4gICAgICAgIGxldCBpc0Rpc2FibGVkID0gKHRoaXMucHJvcHMuaGFzT3duUHJvcGVydHkoJ2Rpc2FibGVkJykgJiYgZGlzYWJsZWQgPT0gdHJ1ZSk7XG4gICAgICAgIGxldCB0aGVWYWx1ZSA9IG51bGw7XG5cbiAgICAgICAgbGV0IHNlbGVjdENsYXNzTmFtZSA9IGNsYXNzTmFtZTtcblxuICAgICAgICBpZiAoIXRoaXMucHJvcHMuaGFzT3duUHJvcGVydHkoJ292ZXJyaWRlQ1NTJykgfHwgb3ZlcnJpZGVDU1MgPT0gZmFsc2UpIHtcbiAgICAgICAgICAgIHNlbGVjdENsYXNzTmFtZSA9ICdkcm9wZG93biAnICsgY2xhc3NOYW1lICsgJyAnICsgKGhhc19lcnJvciA/ICdlcnJvcicgOiAnJyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5wcm9wcy5pc011bHRpKSB7XG4gICAgICAgICAgICB0aGVWYWx1ZSA9IHRoaXMucHJvcHMub3B0aW9ucy5maWx0ZXIob3AgPT4gdmFsdWUuaW5jbHVkZXMob3AudmFsdWUpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoZVZhbHVlID0gKHZhbHVlIGluc3RhbmNlb2YgT2JqZWN0IHx8IHZhbHVlID09IG51bGwpID8gdmFsdWUgOiB0aGlzLnByb3BzLm9wdGlvbnMuZmluZChvcHQgPT4gb3B0LnZhbHVlID09IHZhbHVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHNlbGVjdFN0eWxlcyA9IHsgbWVudTogc3R5bGVzID0+ICh7IC4uLnN0eWxlcywgekluZGV4OiA5OTkgfSkgfTtcblxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICA8U2VsZWN0XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17c2VsZWN0Q2xhc3NOYW1lfVxuICAgICAgICAgICAgICAgICAgICB2YWx1ZT17dGhlVmFsdWV9XG4gICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXt0aGlzLmhhbmRsZUNoYW5nZX1cbiAgICAgICAgICAgICAgICAgICAgaXNDbGVhcmFibGU9e2lzQ2xlYXJhYmxlfVxuICAgICAgICAgICAgICAgICAgICBpc0Rpc2FibGVkPXtpc0Rpc2FibGVkfVxuICAgICAgICAgICAgICAgICAgICBzdHlsZXM9e3NlbGVjdFN0eWxlc31cbiAgICAgICAgICAgICAgICAgICAgey4uLnJlc3R9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICB7aGFzX2Vycm9yICYmXG4gICAgICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwiZXJyb3ItbGFiZWxcIj57ZXJyb3J9PC9wPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICApO1xuXG4gICAgfVxufVxuIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxNyBPcGVuU3RhY2sgRm91bmRhdGlvblxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICoqL1xuXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuXG5cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVGV4dEVkaXRvciBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgICAgICBzdXBlcihwcm9wcyk7XG4gICAgICAgIHRoaXMuUmljaFRleHRFZGl0b3IgPSBudWxsO1xuXG4gICAgICAgIC8vIHRoaXMgaXMgZG9uZSBiYyBkdWUgU1NSIGlzc3Vlc1xuICAgICAgICAvLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zc3R1ci9yZWFjdC1ydGUvaXNzdWVzLzM3M1xuICAgICAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIHRoaXMuUmljaFRleHRFZGl0b3IgPSByZXF1aXJlKCdyZWFjdC1ydGUnKS5kZWZhdWx0O1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgICAgICAgIGVkaXRvclZhbHVlOiB0aGlzLlJpY2hUZXh0RWRpdG9yPy5jcmVhdGVFbXB0eVZhbHVlKCksXG4gICAgICAgICAgICBjdXJyZW50VmFsdWU6IG51bGxcbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLmhhbmRsZUNoYW5nZSA9IHRoaXMuaGFuZGxlQ2hhbmdlLmJpbmQodGhpcyk7XG4gICAgfVxuXG4gICAgc3RhdGljIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyhwcm9wcywgc3RhdGUpIHtcbiAgICAgICAgY29uc3Qge3ZhbHVlfSA9IHByb3BzO1xuICAgICAgICBjb25zdCB7ZWRpdG9yVmFsdWUsIGN1cnJlbnRWYWx1ZX0gPSBzdGF0ZTtcblxuICAgICAgICBpZiAoY3VycmVudFZhbHVlICE9IG51bGwpIHtcbiAgICAgICAgICAgIGlmICh2YWx1ZSA9PT0gY3VycmVudFZhbHVlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHN0YXRlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHsuLi5zdGF0ZSwgZWRpdG9yVmFsdWU6IGVkaXRvclZhbHVlLnNldENvbnRlbnRGcm9tU3RyaW5nKHZhbHVlLCAnaHRtbCcpLCBjdXJyZW50VmFsdWU6IHZhbHVlfVxuICAgIH1cblxuICAgIGhhbmRsZUNoYW5nZShlZGl0b3JWYWx1ZSkge1xuXG4gICAgICAgIGxldCBvbGRFZGl0b3JWYWx1ZSA9IHRoaXMuc3RhdGUuZWRpdG9yVmFsdWU7XG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe2VkaXRvclZhbHVlfSk7XG5cbiAgICAgICAgbGV0IG9sZENvbnRlbnRTdGF0ZSA9IG9sZEVkaXRvclZhbHVlID8gb2xkRWRpdG9yVmFsdWUuZ2V0RWRpdG9yU3RhdGUoKS5nZXRDdXJyZW50Q29udGVudCgpIDogbnVsbDtcbiAgICAgICAgbGV0IG5ld0NvbnRlbnRTdGF0ZSA9IGVkaXRvclZhbHVlLmdldEVkaXRvclN0YXRlKCkuZ2V0Q3VycmVudENvbnRlbnQoKTtcblxuICAgICAgICBpZiAob2xkQ29udGVudFN0YXRlICE9PSBuZXdDb250ZW50U3RhdGUpIHtcbiAgICAgICAgICAgIGxldCBzdHJpbmdWYWx1ZSA9IGVkaXRvclZhbHVlLnRvU3RyaW5nKCdodG1sJyk7XG4gICAgICAgICAgICBzdHJpbmdWYWx1ZSA9IHN0cmluZ1ZhbHVlID09PSAnPHA+PGJyPjwvcD4nID8gJycgOiBzdHJpbmdWYWx1ZTtcblxuICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7Y3VycmVudFZhbHVlOiBzdHJpbmdWYWx1ZX0pO1xuXG4gICAgICAgICAgICBpZiAoc3RyaW5nVmFsdWUgIT09IHRoaXMucHJvcHMudmFsdWUpIHtcbiAgICAgICAgICAgICAgICBsZXQgZXYgPSB7dGFyZ2V0OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZDogdGhpcy5wcm9wcy5pZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBzdHJpbmdWYWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICd0ZXh0ZWRpdG9yJ1xuICAgICAgICAgICAgICAgICAgICB9fTtcblxuICAgICAgICAgICAgICAgIHRoaXMucHJvcHMub25DaGFuZ2UoZXYpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmVuZGVyKCkge1xuXG4gICAgICAgIGxldCB7b25DaGFuZ2UsIHZhbHVlLCBlcnJvciwgY2xhc3NOYW1lLCBpZCwgLi4ucmVzdH0gPSB0aGlzLnByb3BzO1xuICAgICAgICBsZXQgaGFzX2Vycm9yID0gKCB0aGlzLnByb3BzLmhhc093blByb3BlcnR5KCdlcnJvcicpICYmIGVycm9yICE9PSAnJyApO1xuXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgIHt0aGlzLlJpY2hUZXh0RWRpdG9yICYmXG4gICAgICAgICAgICAgICAgICAgIDx0aGlzLlJpY2hUZXh0RWRpdG9yXG4gICAgICAgICAgICAgICAgICAgICAgICBpZD17aWR9XG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2NsYXNzTmFtZSArICcgJyArIChoYXNfZXJyb3IgPyAnZXJyb3InIDogJycpfVxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e3RoaXMuc3RhdGUuZWRpdG9yVmFsdWV9XG4gICAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17dGhpcy5oYW5kbGVDaGFuZ2V9XG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHtoYXNfZXJyb3IgJiZcbiAgICAgICAgICAgICAgICA8cCBjbGFzc05hbWU9XCJlcnJvci1sYWJlbFwiPntlcnJvcn08L3A+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICk7XG5cbiAgICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxNyBPcGVuU3RhY2sgRm91bmRhdGlvblxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICoqL1xuXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IEFzeW5jU2VsZWN0IGZyb20gJ3JlYWN0LXNlbGVjdC9saWIvQXN5bmMnO1xuaW1wb3J0IHtxdWVyeUV2ZW50c30gZnJvbSAnLi4vLi4vdXRpbHMvcXVlcnktYWN0aW9ucyc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEV2ZW50SW5wdXQgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICAgICAgc3VwZXIocHJvcHMpO1xuXG4gICAgICAgIHRoaXMuaGFuZGxlQ2hhbmdlID0gdGhpcy5oYW5kbGVDaGFuZ2UuYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5nZXRFdmVudHMgPSB0aGlzLmdldEV2ZW50cy5iaW5kKHRoaXMpO1xuICAgIH1cblxuICAgIGhhbmRsZUNoYW5nZSh2YWx1ZSkge1xuXG4gICAgICAgIGxldCBldiA9IHt0YXJnZXQ6IHtcbiAgICAgICAgICAgIGlkOiB0aGlzLnByb3BzLmlkLFxuICAgICAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICAgICAgdHlwZTogJ2V2ZW50aW5wdXQnXG4gICAgICAgIH19O1xuXG4gICAgICAgIHRoaXMucHJvcHMub25DaGFuZ2UoZXYpO1xuICAgIH1cblxuICAgIGdldEV2ZW50cyAoaW5wdXQsIGNhbGxiYWNrKSB7XG4gICAgICAgIGxldCB7c3VtbWl0LCBvbmx5UHVibGlzaGVkfSA9IHRoaXMucHJvcHM7XG5cbiAgICAgICAgaWYgKCFpbnB1dCkge1xuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh7IG9wdGlvbnM6IFtdIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcXVlcnlFdmVudHMoc3VtbWl0LmlkLCBpbnB1dCwgb25seVB1Ymxpc2hlZCwgY2FsbGJhY2spO1xuICAgIH1cblxuICAgIHJlbmRlcigpIHtcbiAgICAgICAgbGV0IHt2YWx1ZSwgb25DaGFuZ2UsIGlkLCBtdWx0aSwgLi4ucmVzdH0gPSB0aGlzLnByb3BzO1xuICAgICAgICBsZXQgaXNNdWx0aSA9ICh0aGlzLnByb3BzLmhhc093blByb3BlcnR5KCdtdWx0aScpKTtcblxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPEFzeW5jU2VsZWN0XG4gICAgICAgICAgICAgICAgdmFsdWU9e3ZhbHVlfVxuICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXt0aGlzLmhhbmRsZUNoYW5nZX1cbiAgICAgICAgICAgICAgICBsb2FkT3B0aW9ucz17dGhpcy5nZXRFdmVudHN9XG4gICAgICAgICAgICAgICAgZ2V0T3B0aW9uVmFsdWU9e29wdGlvbiA9PiBvcHRpb24uaWR9XG4gICAgICAgICAgICAgICAgZ2V0T3B0aW9uTGFiZWw9e29wdGlvbiA9PiBvcHRpb24udGl0bGV9XG4gICAgICAgICAgICAgICAgaXNNdWx0aT17aXNNdWx0aX1cbiAgICAgICAgICAgICAgICB7Li4ucmVzdH1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICk7XG5cbiAgICB9XG59XG5cbiIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgQ3JlYXRhYmxlU2VsZWN0IGZyb20gJ3JlYWN0LXNlbGVjdC9saWIvQ3JlYXRhYmxlJztcbmltcG9ydCBUIGZyb20gJ2kxOG4tcmVhY3QvZGlzdC9pMThuLXJlYWN0JztcblxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBGcmVlTXVsdGlUZXh0SW5wdXQgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICAgICAgc3VwZXIocHJvcHMpO1xuXG4gICAgICAgIHRoaXMuc3RhdGUgPSB7XG4gICAgICAgICAgICBpbnB1dFZhbHVlOiAnJ1xuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMuaGFuZGxlQ2hhbmdlID0gdGhpcy5oYW5kbGVDaGFuZ2UuYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5oYW5kbGVJbnB1dENoYW5nZSA9IHRoaXMuaGFuZGxlSW5wdXRDaGFuZ2UuYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5oYW5kbGVLZXlEb3duID0gdGhpcy5oYW5kbGVLZXlEb3duLmJpbmQodGhpcyk7XG4gICAgfVxuXG4gICAgaGFuZGxlQ2hhbmdlKHZhbHVlKSB7XG4gICAgICAgIGxldCBsaW1pdCA9IHRoaXMucHJvcHMuaGFzT3duUHJvcGVydHkoJ2xpbWl0JykgPyB0aGlzLnByb3BzLmxpbWl0IDogZmFsc2U7XG5cbiAgICAgICAgaWYgKCFsaW1pdCB8fCBsaW1pdCA+PSB2YWx1ZS5sZW5ndGggKSB7XG4gICAgICAgICAgICBsZXQgZXYgPSB7dGFyZ2V0OiB7XG4gICAgICAgICAgICAgICAgICAgIGlkOiB0aGlzLnByb3BzLmlkLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6ICdmcmVldGV4dGxpc3QnXG4gICAgICAgICAgICAgICAgfX07XG5cbiAgICAgICAgICAgIHRoaXMucHJvcHMub25DaGFuZ2UoZXYpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaGFuZGxlSW5wdXRDaGFuZ2UoaW5wdXRWYWx1ZSkge1xuICAgICAgICB0aGlzLnNldFN0YXRlKHsgaW5wdXRWYWx1ZSB9KTtcbiAgICB9XG5cbiAgICBoYW5kbGVLZXlEb3duKGV2ZW50KSB7XG4gICAgICAgIGNvbnN0IHsgaW5wdXRWYWx1ZSB9ID0gdGhpcy5zdGF0ZTtcbiAgICAgICAgbGV0IHsgdmFsdWUgfSA9IHRoaXMucHJvcHM7XG5cbiAgICAgICAgaWYgKCFpbnB1dFZhbHVlKSByZXR1cm47XG5cbiAgICAgICAgc3dpdGNoIChldmVudC5rZXkpIHtcbiAgICAgICAgICAgIGNhc2UgJ0VudGVyJzpcbiAgICAgICAgICAgIGNhc2UgJ1RhYic6XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgICAgICAgICAgIGlucHV0VmFsdWU6ICcnLFxuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVDaGFuZ2UoWy4uLnZhbHVlLCB7bGFiZWw6IGlucHV0VmFsdWUsIHZhbHVlOiBpbnB1dFZhbHVlfV0pXG5cbiAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB9XG4gICAgfVxuXG5cbiAgICByZW5kZXIoKSB7XG4gICAgICAgIGNvbnN0IHsgaW5wdXRWYWx1ZSB9ID0gdGhpcy5zdGF0ZTtcbiAgICAgICAgbGV0IHtpZCwgdmFsdWUsIG9uQ2hhbmdlLCAuLi5yZXN0fSA9IHRoaXMucHJvcHM7XG5cbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxDcmVhdGFibGVTZWxlY3RcbiAgICAgICAgICAgICAgICBjb21wb25lbnRzPXt7RHJvcGRvd25JbmRpY2F0b3I6IG51bGx9fVxuICAgICAgICAgICAgICAgIGlucHV0VmFsdWU9e2lucHV0VmFsdWV9XG4gICAgICAgICAgICAgICAgY2xlYXJhYmxlXG4gICAgICAgICAgICAgICAgaXNNdWx0aVxuICAgICAgICAgICAgICAgIG1lbnVDb250YWluZXJTdHlsZT17e2Rpc3BsYXk6ICdub25lJ319XG4gICAgICAgICAgICAgICAgb25DaGFuZ2U9e3RoaXMuaGFuZGxlQ2hhbmdlfVxuICAgICAgICAgICAgICAgIG9uSW5wdXRDaGFuZ2U9e3RoaXMuaGFuZGxlSW5wdXRDaGFuZ2V9XG4gICAgICAgICAgICAgICAgb25JbnB1dEtleURvd249e3RoaXMuaGFuZGxlS2V5RG93bn1cbiAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj17VC50cmFuc2xhdGUoXCJnZW5lcmFsLnR5cGVfc29tZXRoaW5nXCIpfVxuICAgICAgICAgICAgICAgIHZhbHVlPXt2YWx1ZX1cbiAgICAgICAgICAgICAgICB7Li4ucmVzdH1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICk7XG4gICAgfVxufVxuIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxNyBPcGVuU3RhY2sgRm91bmRhdGlvblxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICoqL1xuXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IEFzeW5jU2VsZWN0IGZyb20gJ3JlYWN0LXNlbGVjdC9saWIvQXN5bmMnO1xuaW1wb3J0IHtxdWVyeUdyb3Vwc30gZnJvbSAnLi4vLi4vdXRpbHMvcXVlcnktYWN0aW9ucyc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEdyb3VwSW5wdXQgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICAgICAgc3VwZXIocHJvcHMpO1xuXG4gICAgICAgIHRoaXMuaGFuZGxlQ2hhbmdlID0gdGhpcy5oYW5kbGVDaGFuZ2UuYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5nZXRHcm91cHMgPSB0aGlzLmdldEdyb3Vwcy5iaW5kKHRoaXMpO1xuICAgIH1cblxuICAgIGhhbmRsZUNoYW5nZSh2YWx1ZSkge1xuXG4gICAgICAgIGxldCBldiA9IHt0YXJnZXQ6IHtcbiAgICAgICAgICAgIGlkOiB0aGlzLnByb3BzLmlkLFxuICAgICAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICAgICAgdHlwZTogJ2dyb3VwaW5wdXQnXG4gICAgICAgIH19O1xuXG4gICAgICAgIHRoaXMucHJvcHMub25DaGFuZ2UoZXYpO1xuICAgIH1cblxuICAgIGdldEdyb3VwcyAoaW5wdXQsIGNhbGxiYWNrKSB7XG4gICAgICAgIGlmICghaW5wdXQpIHtcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoeyBvcHRpb25zOiBbXSB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHF1ZXJ5R3JvdXBzKGlucHV0LCBjYWxsYmFjayk7XG4gICAgfVxuXG4gICAgcmVuZGVyKCkge1xuICAgICAgICBsZXQge3ZhbHVlLCBvbkNoYW5nZSwgaWQsIG11bHRpLCAuLi5yZXN0fSA9IHRoaXMucHJvcHM7XG4gICAgICAgIGxldCBpc011bHRpID0gKHRoaXMucHJvcHMuaGFzT3duUHJvcGVydHkoJ211bHRpJykpO1xuXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8QXN5bmNTZWxlY3RcbiAgICAgICAgICAgICAgICB2YWx1ZT17dmFsdWV9XG4gICAgICAgICAgICAgICAgb25DaGFuZ2U9e3RoaXMuaGFuZGxlQ2hhbmdlfVxuICAgICAgICAgICAgICAgIGxvYWRPcHRpb25zPXt0aGlzLmdldEdyb3Vwc31cbiAgICAgICAgICAgICAgICBnZXRPcHRpb25WYWx1ZT17b3B0aW9uID0+IG9wdGlvbi5pZH1cbiAgICAgICAgICAgICAgICBnZXRPcHRpb25MYWJlbD17b3B0aW9uID0+IG9wdGlvbi50aXRsZX1cbiAgICAgICAgICAgICAgICBpc011bHRpPXtpc011bHRpfVxuICAgICAgICAgICAgICAgIHsuLi5yZXN0fVxuICAgICAgICAgICAgLz5cbiAgICAgICAgKTtcblxuICAgIH1cbn1cblxuIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxNyBPcGVuU3RhY2sgRm91bmRhdGlvblxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICoqL1xuXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuXG5leHBvcnQgY29uc3QgT3B0aW9uR3JvdXAgPSAgKHtcbiAgICB2YWx1ZSxcbiAgICBsYWJlbCxcbiAgICBvcHRpb25zXG59KSA9PiB7XG4gICAgcmV0dXJuIChbXG4gICAgICAgIDxvcHRpb24ga2V5PXtcImdyb3VwXCIgKyB2YWx1ZX0gY2xhc3NOYW1lPVwib3B0aW9uLWdyb3VwXCIgdmFsdWU9e3ZhbHVlfT57bGFiZWx9PC9vcHRpb24+LFxuICAgICAgICBvcHRpb25zLm1hcCgob3B0LGkpID0+IChcbiAgICAgICAgICAgIDxvcHRpb24gY2xhc3NOYW1lPVwib3B0aW9uLWNoaWxkXCIga2V5PXtvcHQudmFsdWV9IHZhbHVlPXtvcHQudmFsdWV9PiAtIHtvcHQubGFiZWx9PC9vcHRpb24+XG4gICAgICAgICkpXG4gICAgXSk7XG59OyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTcgT3BlblN0YWNrIEZvdW5kYXRpb25cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqKi9cblxuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IE9wdGlvbkdyb3VwIH0gZnJvbSAnLi9PcHRpb25Hcm91cCc7XG5pbXBvcnQgJy4vb3B0aW9uZ3JvdXAubGVzcyc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEdyb3VwZWREcm9wZG93biBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgICAgICBzdXBlcihwcm9wcyk7XG5cbiAgICAgICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgICAgICAgIHZhbHVlOiBwcm9wcy52YWx1ZVxuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMuaGFuZGxlQ2hhbmdlID0gdGhpcy5oYW5kbGVDaGFuZ2UuYmluZCh0aGlzKTtcbiAgICB9XG5cbiAgICBjb21wb25lbnREaWRVcGRhdGUocHJldlByb3BzLCBwcmV2U3RhdGUsIHNuYXBzaG90KSB7XG4gICAgICAgIGlmICh0aGlzLnByb3BzLnZhbHVlICE9PSBwcmV2UHJvcHMudmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0U3RhdGUoe3ZhbHVlOiB0aGlzLnByb3BzLnZhbHVlfSlcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGhhbmRsZUNoYW5nZShldikge1xuICAgICAgICB0aGlzLnByb3BzLm9uQ2hhbmdlKGV2KTtcbiAgICB9XG5cbiAgICByZW5kZXIoKSB7XG4gICAgICAgIGxldCB7aWQsIG9wdGlvbnMsIHBsYWNlaG9sZGVyLCBjbGFzc05hbWUsIGVycm9yfSA9IHRoaXMucHJvcHM7XG4gICAgICAgIGxldCBoYXNfZXJyb3IgPSAoIHRoaXMucHJvcHMuaGFzT3duUHJvcGVydHkoJ2Vycm9yJykgJiYgZXJyb3IgIT0gJycgKTtcbiAgICAgICAgbGV0IHt2YWx1ZX0gPSB0aGlzLnN0YXRlO1xuXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgIDxzZWxlY3RcbiAgICAgICAgICAgICAgICAgICAgaWQ9e2lkfVxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2NsYXNzTmFtZSArICcgZm9ybS1jb250cm9sICcgKyAoaGFzX2Vycm9yID8gJ2Vycm9yJyA6ICcnKX1cbiAgICAgICAgICAgICAgICAgICAgdmFsdWU9e3ZhbHVlfVxuICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17dGhpcy5oYW5kbGVDaGFuZ2V9PlxuICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIlwiIGRpc2FibGVkPntwbGFjZWhvbGRlcn08L29wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHtvcHRpb25zLm1hcCgob3B0LGkpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG9wdC5vcHRpb25zICE9ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxPcHRpb25Hcm91cCBrZXk9eydncm91cF9vcHRfJytpfSBsYWJlbD17b3B0LmxhYmVsfSB2YWx1ZT17b3B0LnZhbHVlfSBvcHRpb25zPXtvcHQub3B0aW9uc30vPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiBrZXk9e29wdC52YWx1ZX0gdmFsdWU9e29wdC52YWx1ZX0+e29wdC5sYWJlbH08L29wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxuICAgICAgICAgICAgICAgIHtoYXNfZXJyb3IgJiZcbiAgICAgICAgICAgICAgICA8cCBjbGFzc05hbWU9XCJlcnJvci1sYWJlbFwiPntlcnJvcn08L3A+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICk7XG4gICAgfVxufSIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpbiIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTggT3BlblN0YWNrIEZvdW5kYXRpb25cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqKi9cblxuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBTZWxlY3QgZnJvbSAncmVhY3Qtc2VsZWN0JztcbmltcG9ydCB7Z2V0TGFuZ3VhZ2VMaXN0fSBmcm9tICcuLi8uLi91dGlscy9xdWVyeS1hY3Rpb25zJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTGFuZ3VhZ2VJbnB1dCBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgICAgICBzdXBlcihwcm9wcyk7XG5cbiAgICAgICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgICAgICAgIG9wdGlvbnM6IFtdLFxuICAgICAgICAgICAgc2hvdWxkVXNlSWQ6IHByb3BzLmhhc093blByb3BlcnR5KCdzaG91bGRVc2VJZCcpID8gcHJvcHMuc2hvdWxkVXNlSWQgOiBmYWxzZSxcbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLmhhbmRsZUNoYW5nZSA9IHRoaXMuaGFuZGxlQ2hhbmdlLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuc2V0T3B0aW9ucyA9IHRoaXMuc2V0T3B0aW9ucy5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLmFib3J0Q29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcblxuICAgICAgICBnZXRMYW5ndWFnZUxpc3QodGhpcy5zZXRPcHRpb25zLCB0aGlzLmFib3J0Q29udHJvbGxlci5zaWduYWwpO1xuICAgIH1cblxuICAgIGNvbXBvbmVudFdpbGxVbm1vdW50KCl7XG4gICAgICAgIHRoaXMuYWJvcnRDb250cm9sbGVyLmFib3J0KCk7XG4gICAgfVxuXG4gICAgc2V0T3B0aW9ucyhyZXNwb25zZSkge1xuICAgICAgICBsZXQgbGFuZ3VhZ2VMaXN0ID0gKHRoaXMuc3RhdGUuc2hvdWxkVXNlSWQpID9cbiAgICAgICAgICAgIHJlc3BvbnNlLm1hcChsID0+ICh7bGFiZWw6IGwubmFtZSwgdmFsdWU6IGwuaWR9KSk6XG4gICAgICAgICAgICByZXNwb25zZS5tYXAobCA9PiAoe2xhYmVsOiBsLm5hbWUsIHZhbHVlOiBsLmlzb19jb2RlfSkpO1xuICAgICAgICB0aGlzLnNldFN0YXRlKHtvcHRpb25zOiBsYW5ndWFnZUxpc3R9KTtcbiAgICB9XG5cbiAgICBoYW5kbGVDaGFuZ2UodmFsdWUpIHtcbiAgICAgICAgbGV0IGlzTXVsdGkgPSAodGhpcy5wcm9wcy5oYXNPd25Qcm9wZXJ0eSgnbXVsdGknKSk7XG4gICAgICAgIGxldCB0aGVWYWx1ZSA9IG51bGw7XG5cbiAgICAgICAgaWYgKGlzTXVsdGkpIHtcbiAgICAgICAgICAgIHRoZVZhbHVlID0gdmFsdWUubWFwKHYgPT4gdi52YWx1ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGVWYWx1ZSA9IHZhbHVlLnZhbHVlO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGV2ID0ge3RhcmdldDoge1xuICAgICAgICAgICAgICAgIGlkOiB0aGlzLnByb3BzLmlkLFxuICAgICAgICAgICAgICAgIHZhbHVlOiB0aGVWYWx1ZSxcbiAgICAgICAgICAgICAgICB0eXBlOiAnbGFndWFnZWlucHV0J1xuICAgICAgICAgICAgfX07XG5cbiAgICAgICAgdGhpcy5wcm9wcy5vbkNoYW5nZShldik7XG4gICAgfVxuXG4gICAgcmVuZGVyKCkge1xuICAgICAgICBsZXQge3ZhbHVlLCBvbkNoYW5nZSwgaWQsIG11bHRpLCAuLi5yZXN0fSA9IHRoaXMucHJvcHM7XG4gICAgICAgIGxldCB7b3B0aW9uc30gPSB0aGlzLnN0YXRlO1xuICAgICAgICBsZXQgaXNNdWx0aSA9ICh0aGlzLnByb3BzLmhhc093blByb3BlcnR5KCdtdWx0aScpKTtcbiAgICAgICAgbGV0IHRoZVZhbHVlID0gbnVsbDtcblxuICAgICAgICBpZiAoaXNNdWx0aSkge1xuICAgICAgICAgICAgdGhlVmFsdWUgPSBvcHRpb25zLmZpbHRlcihvcCA9PiB2YWx1ZS5pbmNsdWRlcyhvcC52YWx1ZSkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhlVmFsdWUgPSAodmFsdWUgaW5zdGFuY2VvZiBPYmplY3QgfHwgdmFsdWUgPT0gbnVsbCkgPyB2YWx1ZSA6IG9wdGlvbnMuZmluZChvcHQgPT4gb3B0LnZhbHVlID09IHZhbHVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8U2VsZWN0XG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiZHJvcGRvd25cIlxuICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXt0aGlzLmhhbmRsZUNoYW5nZX1cbiAgICAgICAgICAgICAgICBvcHRpb25zPXtvcHRpb25zfVxuICAgICAgICAgICAgICAgIHZhbHVlPXt0aGVWYWx1ZX1cbiAgICAgICAgICAgICAgICBpc011bHRpPXtpc011bHRpfVxuICAgICAgICAgICAgICAgIHsuLi5yZXN0fVxuICAgICAgICAgICAgLz5cbiAgICAgICAgKTtcblxuICAgIH1cbn1cbiIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTcgT3BlblN0YWNrIEZvdW5kYXRpb25cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqKi9cblxuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBBc3luY1NlbGVjdCBmcm9tICdyZWFjdC1zZWxlY3QvbGliL0FzeW5jJztcbmltcG9ydCB7cXVlcnlNZW1iZXJzfSBmcm9tICcuLi8uLi91dGlscy9xdWVyeS1hY3Rpb25zJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTWVtYmVySW5wdXQgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICAgICAgc3VwZXIocHJvcHMpO1xuXG4gICAgICAgIHRoaXMuc3RhdGUgPSB7XG4gICAgICAgICAgICB2YWx1ZTogcHJvcHMudmFsdWVcbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLmhhbmRsZUNoYW5nZSA9IHRoaXMuaGFuZGxlQ2hhbmdlLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuZ2V0TWVtYmVycyA9IHRoaXMuZ2V0TWVtYmVycy5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLmdldE9wdGlvblZhbHVlID0gdGhpcy5nZXRPcHRpb25WYWx1ZS5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLmdldE9wdGlvbkxhYmVsID0gdGhpcy5nZXRPcHRpb25MYWJlbC5iaW5kKHRoaXMpO1xuICAgIH1cblxuICAgIGdldE9wdGlvblZhbHVlKG1lbWJlcil7XG4gICAgICAgIGlmKHRoaXMucHJvcHMuaGFzT3duUHJvcGVydHkoXCJnZXRPcHRpb25WYWx1ZVwiKSl7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wcm9wcy5nZXRPcHRpb25WYWx1ZShtZW1iZXIpO1xuICAgICAgICB9XG4gICAgICAgIC8vZGVmYXVsdFxuICAgICAgICByZXR1cm4gbWVtYmVyLmlkO1xuICAgIH1cblxuICAgIGdldE9wdGlvbkxhYmVsKG1lbWJlcil7XG4gICAgICAgIGlmKHRoaXMucHJvcHMuaGFzT3duUHJvcGVydHkoXCJnZXRPcHRpb25MYWJlbFwiKSl7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wcm9wcy5nZXRPcHRpb25MYWJlbChtZW1iZXIpO1xuICAgICAgICB9XG4gICAgICAgIC8vZGVmYXVsdFxuICAgICAgICByZXR1cm4gYCR7bWVtYmVyLmZpcnN0X25hbWV9ICR7bWVtYmVyLmxhc3RfbmFtZX0gKCR7bWVtYmVyLmlkfSlgO1xuICAgIH1cblxuICAgIGhhbmRsZUNoYW5nZSh2YWx1ZSkge1xuICAgICAgICBsZXQgZXYgPSB7dGFyZ2V0OiB7XG4gICAgICAgICAgICBpZDogdGhpcy5wcm9wcy5pZCxcbiAgICAgICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgICAgICAgIHR5cGU6ICdtZW1iZXJpbnB1dCdcbiAgICAgICAgfX07XG5cbiAgICAgICAgdGhpcy5wcm9wcy5vbkNoYW5nZShldik7XG4gICAgfVxuXG4gICAgZ2V0TWVtYmVycyAoaW5wdXQsIGNhbGxiYWNrKSB7XG4gICAgICAgIGlmICghaW5wdXQpIHtcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoeyBvcHRpb25zOiBbXSB9KTtcbiAgICAgICAgfVxuICAgICAgICBxdWVyeU1lbWJlcnMoaW5wdXQsIGNhbGxiYWNrKTtcbiAgICB9XG5cbiAgICByZW5kZXIoKSB7XG4gICAgICAgIGxldCB7dmFsdWUsIGVycm9yLCBvbkNoYW5nZSwgaWQsIG11bHRpLCAuLi5yZXN0fSA9IHRoaXMucHJvcHM7XG4gICAgICAgIGxldCBpc011bHRpID0gKHRoaXMucHJvcHMuaGFzT3duUHJvcGVydHkoJ211bHRpJykpO1xuICAgICAgICBsZXQgaGFzX2Vycm9yID0gKCB0aGlzLnByb3BzLmhhc093blByb3BlcnR5KCdlcnJvcicpICYmIGVycm9yICE9ICcnICk7XG5cbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgPEFzeW5jU2VsZWN0XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlPXt2YWx1ZX1cbiAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9e3RoaXMuaGFuZGxlQ2hhbmdlfVxuICAgICAgICAgICAgICAgICAgICBsb2FkT3B0aW9ucz17dGhpcy5nZXRNZW1iZXJzfVxuICAgICAgICAgICAgICAgICAgICBnZXRPcHRpb25WYWx1ZT17bSA9PiB0aGlzLmdldE9wdGlvblZhbHVlKG0pfVxuICAgICAgICAgICAgICAgICAgICBnZXRPcHRpb25MYWJlbD17bSA9PiB0aGlzLmdldE9wdGlvbkxhYmVsKG0pfVxuICAgICAgICAgICAgICAgICAgICBpc011bHRpPXtpc011bHRpfVxuICAgICAgICAgICAgICAgICAgICB7Li4ucmVzdH1cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIHtoYXNfZXJyb3IgJiZcbiAgICAgICAgICAgICAgICA8cCBjbGFzc05hbWU9XCJlcnJvci1sYWJlbFwiPntlcnJvcn08L3A+XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKTtcblxuICAgIH1cbn1cblxuIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxNyBPcGVuU3RhY2sgRm91bmRhdGlvblxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICoqL1xuXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IEFzeW5jU2VsZWN0IGZyb20gJ3JlYWN0LXNlbGVjdC9saWIvQXN5bmMnO1xuaW1wb3J0IEFzeW5jQ3JlYXRhYmxlU2VsZWN0IGZyb20gJ3JlYWN0LXNlbGVjdC9saWIvQXN5bmNDcmVhdGFibGUnO1xuaW1wb3J0IHtxdWVyeU9yZ2FuaXphdGlvbnN9IGZyb20gJy4uLy4uL3V0aWxzL3F1ZXJ5LWFjdGlvbnMnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBPcmdhbml6YXRpb25JbnB1dCBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgICAgICBzdXBlcihwcm9wcyk7XG5cbiAgICAgICAgdGhpcy5oYW5kbGVDaGFuZ2UgPSB0aGlzLmhhbmRsZUNoYW5nZS5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLmhhbmRsZU5ldyA9IHRoaXMuaGFuZGxlTmV3LmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuZ2V0T3JnYW5pemF0aW9ucyA9IHRoaXMuZ2V0T3JnYW5pemF0aW9ucy5iaW5kKHRoaXMpO1xuICAgIH1cblxuICAgIGhhbmRsZUNoYW5nZSh2YWx1ZSkge1xuICAgICAgICAvLyB3ZSBuZWVkIHRvIG1hcCBpbnRvIHZhbHVlL2xhYmVsIGJlY2F1c2Ugb2YgYSBidWcgaW4gcmVhY3Qtc2VsZWN0IDJcbiAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL0plZFdhdHNvbi9yZWFjdC1zZWxlY3QvaXNzdWVzLzI5OThcblxuICAgICAgICBsZXQgZXYgPSB7dGFyZ2V0OiB7XG4gICAgICAgICAgICAgICAgaWQ6IHRoaXMucHJvcHMuaWQsXG4gICAgICAgICAgICAgICAgdmFsdWU6IHtpZDogdmFsdWUudmFsdWUsIG5hbWU6IHZhbHVlLmxhYmVsfSxcbiAgICAgICAgICAgICAgICB0eXBlOiAnb3JnYW5pemF0aW9uaW5wdXQnXG4gICAgICAgICAgICB9fTtcblxuICAgICAgICB0aGlzLnByb3BzLm9uQ2hhbmdlKGV2KTtcbiAgICB9XG5cbiAgICBoYW5kbGVOZXcodmFsdWUpIHtcbiAgICAgICAgLy8gd2UgbmVlZCB0byBtYXAgaW50byB2YWx1ZS9sYWJlbCBiZWNhdXNlIG9mIGEgYnVnIGluIHJlYWN0LXNlbGVjdCAyXG4gICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9KZWRXYXRzb24vcmVhY3Qtc2VsZWN0L2lzc3Vlcy8yOTk4XG5cbiAgICAgICAgY29uc3QgdHJhbnNsYXRlVmFsdWUgPSAobmV3VmFsdWUpID0+IHtcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlQ2hhbmdlKHt2YWx1ZTogbmV3VmFsdWUuaWQsIGxhYmVsOiBuZXdWYWx1ZS5uYW1lfSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnByb3BzLm9uQ3JlYXRlKHZhbHVlLCB0cmFuc2xhdGVWYWx1ZSk7XG4gICAgfVxuXG4gICAgZ2V0T3JnYW5pemF0aW9ucyAoaW5wdXQsIGNhbGxiYWNrKSB7XG4gICAgICAgIGlmICghaW5wdXQpIHtcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoeyBvcHRpb25zOiBbXSB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHdlIG5lZWQgdG8gbWFwIGludG8gdmFsdWUvbGFiZWwgYmVjYXVzZSBvZiBhIGJ1ZyBpbiByZWFjdC1zZWxlY3QgMlxuICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vSmVkV2F0c29uL3JlYWN0LXNlbGVjdC9pc3N1ZXMvMjk5OFxuXG4gICAgICAgIGNvbnN0IHRyYW5zbGF0ZU9wdGlvbnMgPSAob3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgbGV0IG5ld09wdGlvbnMgPSBvcHRpb25zLm1hcChvcmcgPT4gKHt2YWx1ZTogb3JnLmlkLnRvU3RyaW5nKCksIGxhYmVsOiBvcmcubmFtZX0pKTtcbiAgICAgICAgICAgIGNhbGxiYWNrKG5ld09wdGlvbnMpO1xuICAgICAgICB9O1xuXG4gICAgICAgIHF1ZXJ5T3JnYW5pemF0aW9ucyhpbnB1dCwgdHJhbnNsYXRlT3B0aW9ucyk7XG4gICAgfVxuXG4gICAgcmVuZGVyKCkge1xuICAgICAgICBsZXQge2Vycm9yLCB2YWx1ZSwgaWQsIG9uQ2hhbmdlLCAuLi5yZXN0fSA9IHRoaXMucHJvcHM7XG4gICAgICAgIGxldCBoYXNfZXJyb3IgPSAoIHRoaXMucHJvcHMuaGFzT3duUHJvcGVydHkoJ2Vycm9yJykgJiYgZXJyb3IgIT0gJycgKTtcbiAgICAgICAgbGV0IGFsbG93Q3JlYXRlID0gdGhpcy5wcm9wcy5oYXNPd25Qcm9wZXJ0eSgnYWxsb3dDcmVhdGUnKTtcblxuICAgICAgICAvLyB3ZSBuZWVkIHRvIG1hcCBpbnRvIHZhbHVlL2xhYmVsIGJlY2F1c2Ugb2YgYSBidWcgaW4gcmVhY3Qtc2VsZWN0IDJcbiAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL0plZFdhdHNvbi9yZWFjdC1zZWxlY3QvaXNzdWVzLzI5OThcbiAgICAgICAgbGV0IHRoZVZhbHVlID0gdmFsdWUgPyB7dmFsdWU6IHZhbHVlLmlkLnRvU3RyaW5nKCksIGxhYmVsOiB2YWx1ZS5uYW1lfSA6IG51bGw7XG5cbiAgICAgICAgY29uc3QgQXN5bmNDb21wb25lbnQgPSBhbGxvd0NyZWF0ZVxuICAgICAgICAgICAgPyBBc3luY0NyZWF0YWJsZVNlbGVjdFxuICAgICAgICAgICAgOiBBc3luY1NlbGVjdDtcblxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICA8QXN5bmNDb21wb25lbnRcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU9e3RoZVZhbHVlfVxuICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17dGhpcy5oYW5kbGVDaGFuZ2V9XG4gICAgICAgICAgICAgICAgICAgIGxvYWRPcHRpb25zPXt0aGlzLmdldE9yZ2FuaXphdGlvbnN9XG4gICAgICAgICAgICAgICAgICAgIG9uQ3JlYXRlT3B0aW9uPXt0aGlzLmhhbmRsZU5ld31cbiAgICAgICAgICAgICAgICAgICAgey4uLnJlc3R9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICB7aGFzX2Vycm9yICYmXG4gICAgICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwiZXJyb3ItbGFiZWxcIj57ZXJyb3J9PC9wPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICApO1xuXG4gICAgfVxufVxuXG5cblxuIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxOCBPcGVuU3RhY2sgRm91bmRhdGlvblxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICoqL1xuXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFJhd0hUTUwgZnJvbSAnLi4vcmF3LWh0bWwnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJ1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSYWRpb0xpc3QgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICAgICAgc3VwZXIocHJvcHMpO1xuXG4gICAgICAgIHRoaXMuc3RhdGUgPSB7XG4gICAgICAgICAgICB2YWx1ZTogcHJvcHMudmFsdWUsXG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5oYW5kbGVDaGFuZ2UgPSB0aGlzLmhhbmRsZUNoYW5nZS5iaW5kKHRoaXMpO1xuICAgIH1cblxuICAgIGhhbmRsZUNoYW5nZShzZWxlY3Rpb24pIHtcblxuICAgICAgICBsZXQgZXYgPSB7dGFyZ2V0OiB7XG4gICAgICAgICAgICBpZDogdGhpcy5wcm9wcy5pZCxcbiAgICAgICAgICAgIHZhbHVlOiBzZWxlY3Rpb24udGFyZ2V0LnZhbHVlLFxuICAgICAgICAgICAgdHlwZTogJ3JhZGlvJ1xuICAgICAgICB9fTtcblxuICAgICAgICB0aGlzLnByb3BzLm9uQ2hhbmdlKGV2KTtcbiAgICB9XG5cbiAgICBnZXRMYWJlbChvcHRpb24sIGlkLCBpbmxpbmUsIHNpbXBsZSwgaHRtbCkge1xuICAgICAgICBpZiAoaW5saW5lKSB7XG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzc05hbWU9XCJmb3JtLWNoZWNrLWxhYmVsXCIgaHRtbEZvcj17YHJhZGlvXyR7aWR9XyR7b3B0aW9uLnZhbHVlfWB9IHN0eWxlPXt7ZGlzcGxheTogJ2lubGluZS1ibG9jayd9fT5cbiAgICAgICAgICAgICAgICAgICAge2h0bWwgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIDxSYXdIVE1MPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtvcHRpb24ubGFiZWx9XG4gICAgICAgICAgICAgICAgICAgICAgICA8L1Jhd0hUTUw+XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgeyFodG1sICYmXG4gICAgICAgICAgICAgICAgICAgICAgICBvcHRpb24ubGFiZWxcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICApO1xuICAgICAgICB9IGVsc2UgaWYgKHNpbXBsZSkge1xuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3NOYW1lPVwiZm9ybS1jaGVjay1sYWJlbFwiIGh0bWxGb3I9e2ByYWRpb18ke2lkfV8ke29wdGlvbi52YWx1ZX1gfSA+XG4gICAgICAgICAgICAgICAgICAgIHtvcHRpb24ubGFiZWx9XG4gICAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzc05hbWU9XCJmb3JtLWNoZWNrLWxhYmVsXCIgaHRtbEZvcj17YHJhZGlvXyR7aWR9XyR7b3B0aW9uLnZhbHVlfWB9IHN0eWxlPXt7ZGlzcGxheTogJ2lubGluZS1ibG9jayd9fT5cbiAgICAgICAgICAgICAgICAgICAgPGg0IHN0eWxlPXt7bWFyZ2luVG9wOiAnMHB4J319PntvcHRpb24ubGFiZWx9PC9oND5cbiAgICAgICAgICAgICAgICAgICAgPFJhd0hUTUw+e29wdGlvbi5kZXNjcmlwdGlvbn08L1Jhd0hUTUw+XG4gICAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZW5kZXIoKSB7XG5cbiAgICAgICAgbGV0IHtvbkNoYW5nZSwgdmFsdWUsIGNsYXNzTmFtZSwgZXJyb3IsIGRpc2FibGVkLCBvcHRpb25zLGlkLCBuYW1lLC4uLnJlc3R9ID0gdGhpcy5wcm9wcztcbiAgICAgICAgbGV0IGhhc19lcnJvciA9ICggdGhpcy5wcm9wcy5oYXNPd25Qcm9wZXJ0eSgnZXJyb3InKSAmJiBlcnJvciAhPSAnJyApO1xuICAgICAgICBsZXQgaW5saW5lID0gKCB0aGlzLnByb3BzLmhhc093blByb3BlcnR5KCdpbmxpbmUnKSApO1xuICAgICAgICBsZXQgc2ltcGxlID0gKCB0aGlzLnByb3BzLmhhc093blByb3BlcnR5KCdzaW1wbGUnKSApO1xuICAgICAgICBsZXQgaHRtbCA9ICggdGhpcy5wcm9wcy5oYXNPd25Qcm9wZXJ0eSgnaHRtbCcpICk7XG4gICAgICAgIGxldCBpc0Rpc2FibGVkID0gKHRoaXMucHJvcHMuaGFzT3duUHJvcGVydHkoJ2Rpc2FibGVkJykgJiYgZGlzYWJsZWQgPT0gdHJ1ZSk7XG5cbiAgICAgICAgbGV0IHN0eWxlLCBsYWJlbDtcblxuICAgICAgICBpZiAoaW5saW5lKSB7XG4gICAgICAgICAgICBzdHlsZSA9IHtcbiAgICAgICAgICAgICAgICBwYWRkaW5nTGVmdDogJzIycHgnLFxuICAgICAgICAgICAgICAgIG1hcmdpbkxlZnQ6ICcyMHB4JyxcbiAgICAgICAgICAgICAgICBmbG9hdDogJ2xlZnQnXG4gICAgICAgICAgICB9O1xuXG5cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHN0eWxlID0ge1xuICAgICAgICAgICAgICAgIHBhZGRpbmdMZWZ0OiAnMjJweCdcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8ZGl2IGlkPXtgcmxfd3JhcHBlcl8ke2lkfWB9PlxuICAgICAgICAgICAgICAgIHsgb3B0aW9ucy5tYXAob3AgPT4ge1xuICAgICAgICAgICAgICAgICAgICBsZXQgY2hlY2tlZCA9IChvcC52YWx1ZSA9PSB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZvcm0tY2hlY2sgYWJjLXJhZGlvXCIga2V5PXtgcmFkaW9fa2V5XyR7aWR9XyR7b3AudmFsdWV9YH0gc3R5bGU9e3N0eWxlfT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiZm9ybS1jaGVjay1pbnB1dFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJyYWRpb1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkPXtgcmFkaW9fJHtpZH1fJHtvcC52YWx1ZX1gfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT17b3AudmFsdWV9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrZWQ9e2NoZWNrZWR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXt0aGlzLmhhbmRsZUNoYW5nZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ9e2lzRGlzYWJsZWR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9e25hbWUgPyBuYW1lIDogYHJhZGlvXyR7aWR9YH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt0aGlzLmdldExhYmVsKG9wLCBpZCwgaW5saW5lLCBzaW1wbGUsIGh0bWwpfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICB9KX1cblxuICAgICAgICAgICAgICAgIHtoYXNfZXJyb3IgJiZcbiAgICAgICAgICAgICAgICA8cCBjbGFzc05hbWU9XCJlcnJvci1sYWJlbFwiPntlcnJvcn08L3A+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICk7XG5cbiAgICB9XG59XG5cblJhZGlvTGlzdC5wcm9wVHlwZXMgPSB7XG4gICAgaWQ6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZFxufTsiLCIvKipcbiAqIENvcHlyaWdodCAyMDE3IE9wZW5TdGFjayBGb3VuZGF0aW9uXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiovXG5cbmltcG9ydCBSZWFjdCwgeyB1c2VTdGF0ZSwgdXNlRWZmZWN0IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJ1xuaW1wb3J0IEFzeW5jU2VsZWN0IGZyb20gJ3JlYWN0LXNlbGVjdC9saWIvQXN5bmMnO1xuaW1wb3J0IHsgcXVlcnlSZWdpc3RyYXRpb25Db21wYW5pZXMgfSBmcm9tICcuLi8uLi91dGlscy9xdWVyeS1hY3Rpb25zJztcblxuY29uc3QgUmVnaXN0cmF0aW9uQ29tcGFueUlucHV0ID0gKHsgZXJyb3IsIHZhbHVlLCBvbkNoYW5nZSwgaWQsIG11bHRpLCBpc011bHRpLCBjbGFzc05hbWUsIHN1bW1pdElkLCBvbkVycm9yLCAuLi5yZXN0IH0pID0+IHtcblxuICAgIGNvbnN0IFt0aGVWYWx1ZSwgc2V0VGhlVmFsdWVdID0gdXNlU3RhdGUoeyB2YWx1ZTogbnVsbCwgbGFiZWw6ICcnIH0pO1xuICAgIGNvbnN0IFtmcmVlSW5wdXQsIHNldEZyZWVJbnB1dF0gPSB1c2VTdGF0ZShmYWxzZSk7XG4gICAgY29uc3QgW2lucHV0VmFsdWUsIHNldElucHV0VmFsdWVdID0gdXNlU3RhdGUoJycpO1xuICAgIGNvbnN0IFtpc011bHRpT3B0aW9uYWwsIHNldElzTXVsdGlPcHRpb25hbF0gPSB1c2VTdGF0ZShtdWx0aSB8fCBpc011bHRpKTtcbiAgICBjb25zdCBbaGFzRXJyb3IsIHNldEhhc0Vycm9yXSA9IHVzZVN0YXRlKGVycm9yKTtcblxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgfSwgW10pO1xuXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgaWYgKCF2YWx1ZS5pZCAmJiB2YWx1ZS5uYW1lKSB7ICAgICAgICAgICAgXG4gICAgICAgICAgICBzZXRGcmVlSW5wdXQodHJ1ZSk7XG4gICAgICAgICAgICBzZXRJbnB1dFZhbHVlKHZhbHVlLm5hbWUpO1xuICAgICAgICAgICAgc2V0VGhlVmFsdWUoeyB2YWx1ZTogbnVsbCwgbGFiZWw6IHZhbHVlLm5hbWUgfSlcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChpc011bHRpICYmIHZhbHVlLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBzZXRUaGVWYWx1ZSh2YWx1ZS5tYXAodiA9PiAoeyB2YWx1ZTogdi5pZCwgbGFiZWw6IHYubmFtZSB9KSkpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICghaXNNdWx0aSAmJiB2YWx1ZS5pZCkge1xuICAgICAgICAgICAgICAgIHNldFRoZVZhbHVlKHsgdmFsdWU6IHZhbHVlLmlkLCBsYWJlbDogdmFsdWUubmFtZSB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0sIFt2YWx1ZV0pXG5cbiAgICBjb25zdCBoYW5kbGVDaGFuZ2UgPSAoZXZlbnRWYWx1ZSkgPT4ge1xuICAgICAgICBpZiAoZXZlbnRWYWx1ZS52YWx1ZSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgc2V0RnJlZUlucHV0KHRydWUpO1xuICAgICAgICAgICAgY29uc3QgbmV3VmFsdWVTdGF0ZSA9IGlzTXVsdGlPcHRpb25hbCA/IGV2ZW50VmFsdWUubWFwKHYgPT4gKHsgdmFsdWU6IHYudmFsdWUsIGxhYmVsOiAnJyB9KSkgOiB7IHZhbHVlOiBldmVudFZhbHVlLnZhbHVlLCBsYWJlbDogJycgfTtcbiAgICAgICAgICAgIHNldFRoZVZhbHVlKG5ld1ZhbHVlU3RhdGUpO1xuICAgICAgICAgICAgbGV0IGV2ID0ge1xuICAgICAgICAgICAgICAgIHRhcmdldDoge1xuICAgICAgICAgICAgICAgICAgICBpZDogaWQsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiBuZXdWYWx1ZVN0YXRlLFxuICAgICAgICAgICAgICAgICAgICB0eXBlOiAnY29tcGFueWlucHV0J1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBvbkNoYW5nZShldik7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBuZXdWYWx1ZSA9IGlzTXVsdGlPcHRpb25hbCA/IGV2ZW50VmFsdWUubWFwKHYgPT4gKHsgaWQ6IHYudmFsdWUsIG5hbWU6IHYubGFiZWwgfSkpIDogeyBpZDogZXZlbnRWYWx1ZS52YWx1ZSwgbmFtZTogZXZlbnRWYWx1ZS5sYWJlbCB9O1xuICAgICAgICBjb25zdCBuZXdWYWx1ZVN0YXRlID0gaXNNdWx0aU9wdGlvbmFsID8gZXZlbnRWYWx1ZS5tYXAodiA9PiAoeyB2YWx1ZTogdi52YWx1ZSwgbGFiZWw6IHYubGFiZWwgfSkpIDogeyB2YWx1ZTogZXZlbnRWYWx1ZS52YWx1ZSwgbGFiZWw6IGV2ZW50VmFsdWUubGFiZWwgfTtcbiAgICAgICAgc2V0VGhlVmFsdWUobmV3VmFsdWVTdGF0ZSk7XG5cblxuICAgICAgICBsZXQgZXYgPSB7XG4gICAgICAgICAgICB0YXJnZXQ6IHtcbiAgICAgICAgICAgICAgICBpZDogaWQsXG4gICAgICAgICAgICAgICAgdmFsdWU6IG5ld1ZhbHVlLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdjb21wYW55aW5wdXQnXG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIG9uQ2hhbmdlKGV2KTtcbiAgICB9XG5cbiAgICBjb25zdCBoYW5kbGVJbnB1dENsZWFyID0gKCkgPT4ge1xuICAgICAgICBzZXRGcmVlSW5wdXQoIWZyZWVJbnB1dCk7XG4gICAgICAgIHNldElucHV0VmFsdWUoJycpO1xuICAgICAgICBzZXRUaGVWYWx1ZSh7IHZhbHVlOiBudWxsLCBsYWJlbDogJycgfSk7XG4gICAgICAgIGxldCBldiA9IHtcbiAgICAgICAgICAgIHRhcmdldDoge1xuICAgICAgICAgICAgICAgIGlkOiBpZCxcbiAgICAgICAgICAgICAgICB2YWx1ZTogeyBpZDogbnVsbCwgbmFtZTogJycgfSxcbiAgICAgICAgICAgICAgICB0eXBlOiAnY29tcGFueWlucHV0J1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBvbkNoYW5nZShldik7XG4gICAgfVxuXG4gICAgY29uc3QgaGFuZGxlSW5wdXRDaGFuZ2UgPSAoZXZ0KSA9PiB7XG4gICAgICAgIHNldElucHV0VmFsdWUoZXZ0LnRhcmdldC52YWx1ZSk7XG4gICAgICAgIGxldCBldiA9IHtcbiAgICAgICAgICAgIHRhcmdldDoge1xuICAgICAgICAgICAgICAgIGlkOiBpZCxcbiAgICAgICAgICAgICAgICB2YWx1ZTogeyBpZDogbnVsbCwgbmFtZTogZXZ0LnRhcmdldC52YWx1ZSB9LFxuICAgICAgICAgICAgICAgIHR5cGU6ICdjb21wYW55aW5wdXQnXG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIG9uQ2hhbmdlKGV2KTtcbiAgICB9XG5cbiAgICBjb25zdCBnZXRDb21wYW5pZXMgPSAoaW5wdXQsIGNhbGxiYWNrKSA9PiB7XG5cbiAgICAgICAgY29uc3QgdHJhbnNsYXRlT3B0aW9ucyA9IChvcHRpb25zKSA9PiB7XG5cbiAgICAgICAgICAgIGlmIChvcHRpb25zIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgICAgICAgICBvbkVycm9yKG9wdGlvbnMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG9wdGlvbnMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soW10pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gd2UgbmVlZCB0byBtYXAgaW50byB2YWx1ZS9sYWJlbCBiZWNhdXNlIG9mIGEgYnVnIGluIHJlYWN0LXNlbGVjdCAyXG4gICAgICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vSmVkV2F0c29uL3JlYWN0LXNlbGVjdC9pc3N1ZXMvMjk5OFxuICAgICAgICAgICAgY29uc3Qgb3RoZXJPcHRpb24gPSB7IHZhbHVlOiBudWxsLCBsYWJlbDogJ090aGVyJyB9O1xuICAgICAgICAgICAgbGV0IG5ld09wdGlvbnMgPSBbLi4ub3B0aW9ucy5tYXAoYyA9PiAoeyB2YWx1ZTogYy5pZC50b1N0cmluZygpLCBsYWJlbDogYy5uYW1lIH0pKSwgb3RoZXJPcHRpb25dO1xuICAgICAgICAgICAgY2FsbGJhY2sobmV3T3B0aW9ucyk7XG4gICAgICAgIH07XG5cbiAgICAgICAgcXVlcnlSZWdpc3RyYXRpb25Db21wYW5pZXMoc3VtbWl0SWQsIGlucHV0LCB0cmFuc2xhdGVPcHRpb25zKTtcbiAgICB9XG5cbiAgICByZXR1cm4gKFxuICAgICAgICA8ZGl2PlxuICAgICAgICAgICAge2ZyZWVJbnB1dCA/XG4gICAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT17aW5wdXRWYWx1ZX1cbiAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiRW50ZXIgeW91ciBjb21wYW55XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXtoYW5kbGVJbnB1dENoYW5nZX1cbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImZvcm0tY29udHJvbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT17eyBwYWRkaW5nUmlnaHQ6IDI1IH19XG4gICAgICAgICAgICAgICAgICAgICAgICB7Li4ucmVzdH1cbiAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgPGkgYXJpYS1sYWJlbD0nQ2xlYXInIHN0eWxlPXt7IHBvc2l0aW9uOiAnYWJzb2x1dGUnLCBib3R0b206IDEwLCByaWdodDogMjUsIGN1cnNvcjogJ3BvaW50ZXInLCBvcGFjaXR5OiAnNjUlJyB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17aGFuZGxlSW5wdXRDbGVhcn0gY2xhc3NOYW1lPSdmYSBmYS1jbG9zZSc+PC9pPlxuICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgICAgICA6XG4gICAgICAgICAgICAgICAgPEFzeW5jU2VsZWN0XG4gICAgICAgICAgICAgICAgICAgIC8vIFBhc3NpbmcgbnVsbCBpZiBubyBsYWJlbCBhbmQgdmFsdWUgdG8gc2hvdyB0aGUgcGxhY2Vob2xkZXJcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU9e3RoZVZhbHVlLmxhYmVsICYmIHRoZVZhbHVlLnZhbHVlID8gdGhlVmFsdWUgOiBudWxsfVxuICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj0nU2VsZWN0IGEgY29tcGFueSdcbiAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9e2hhbmRsZUNoYW5nZX1cbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdE9wdGlvbnM9e3RydWV9XG4gICAgICAgICAgICAgICAgICAgIGxvYWRPcHRpb25zPXtnZXRDb21wYW5pZXN9XG4gICAgICAgICAgICAgICAgICAgIGlzTXVsdGk9e2lzTXVsdGlPcHRpb25hbH1cbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtjbGFzc05hbWV9XG4gICAgICAgICAgICAgICAgICAgIHsuLi5yZXN0fVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB7aGFzRXJyb3IgJiZcbiAgICAgICAgICAgICAgICA8cCBjbGFzc05hbWU9XCJlcnJvci1sYWJlbFwiPntlcnJvcn08L3A+XG4gICAgICAgICAgICB9XG4gICAgICAgIDwvZGl2PlxuICAgICk7XG5cbn1cblxuZXhwb3J0IGRlZmF1bHQgUmVnaXN0cmF0aW9uQ29tcGFueUlucHV0O1xuXG5SZWdpc3RyYXRpb25Db21wYW55SW5wdXQucHJvcFR5cGVzID0ge1xuICAgIG9uRXJyb3I6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWRcbn07IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxNyBPcGVuU3RhY2sgRm91bmRhdGlvblxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICoqL1xuXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IEFzeW5jU2VsZWN0IGZyb20gJ3JlYWN0LXNlbGVjdC9saWIvQXN5bmMnO1xuaW1wb3J0IHsgY29tcG9uZW50cyB9IGZyb20gJ3JlYWN0LXNlbGVjdC9saWIvY29tcG9uZW50cydcbmltcG9ydCB7IHF1ZXJ5U3BlYWtlcnMgfSBmcm9tICcuLi8uLi91dGlscy9xdWVyeS1hY3Rpb25zJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU3BlYWtlcklucHV0IGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcblxuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgICAgIHN1cGVyKHByb3BzKTtcblxuICAgICAgICB0aGlzLmhhbmRsZUNoYW5nZSA9IHRoaXMuaGFuZGxlQ2hhbmdlLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuZ2V0U3BlYWtlcnMgPSB0aGlzLmdldFNwZWFrZXJzLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuaGFuZGxlQ2xpY2sgPSB0aGlzLmhhbmRsZUNsaWNrLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuZ2V0T3B0aW9uVmFsdWUgPSB0aGlzLmdldE9wdGlvblZhbHVlLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuZ2V0T3B0aW9uTGFiZWwgPSB0aGlzLmdldE9wdGlvbkxhYmVsLmJpbmQodGhpcyk7XG4gICAgfVxuXG4gICAgaGFuZGxlQ2hhbmdlKHZhbHVlKSB7XG4gICAgICAgIGxldCBldiA9IHt0YXJnZXQ6IHtcbiAgICAgICAgICAgICAgICBpZDogdGhpcy5wcm9wcy5pZCxcbiAgICAgICAgICAgICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICAgICAgICAgICAgdHlwZTogJ3NwZWFrZXJpbnB1dCdcbiAgICAgICAgICAgIH19O1xuXG4gICAgICAgIHRoaXMucHJvcHMub25DaGFuZ2UoZXYpO1xuICAgIH1cblxuICAgIGhhbmRsZUNsaWNrKHNwZWFrZXJJZCkge1xuICAgICAgICBsZXQge2hpc3Rvcnl9ID0gdGhpcy5wcm9wcztcblxuICAgICAgICBoaXN0b3J5LnB1c2goYC9hcHAvc3BlYWtlcnMvJHtzcGVha2VySWR9YCk7XG4gICAgfVxuXG4gICAgZ2V0U3BlYWtlcnMgKGlucHV0LCBjYWxsYmFjaykge1xuICAgICAgICBpZiAoIWlucHV0KSB7XG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHsgb3B0aW9uczogW10gfSk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgc3VtbWl0SWQgPSAodGhpcy5wcm9wcy5oYXNPd25Qcm9wZXJ0eSgnc3VtbWl0SWQnKSkgPyB0aGlzLnByb3BzLnN1bW1pdElkIDogbnVsbDtcblxuICAgICAgICBxdWVyeVNwZWFrZXJzKHN1bW1pdElkLCBpbnB1dCwgY2FsbGJhY2spO1xuICAgIH1cblxuICAgIGdldE9wdGlvblZhbHVlKHNwZWFrZXIpe1xuICAgICAgICBpZih0aGlzLnByb3BzLmhhc093blByb3BlcnR5KFwiZ2V0T3B0aW9uVmFsdWVcIikpe1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucHJvcHMuZ2V0T3B0aW9uVmFsdWUoc3BlYWtlcik7XG4gICAgICAgIH1cbiAgICAgICAgLy9kZWZhdWx0XG4gICAgICAgIHJldHVybiBzcGVha2VyLmlkO1xuICAgIH1cblxuICAgIGdldE9wdGlvbkxhYmVsKHNwZWFrZXIpe1xuICAgICAgICBpZih0aGlzLnByb3BzLmhhc093blByb3BlcnR5KFwiZ2V0T3B0aW9uTGFiZWxcIikpe1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucHJvcHMuZ2V0T3B0aW9uTGFiZWwoc3BlYWtlcik7XG4gICAgICAgIH1cbiAgICAgICAgLy9kZWZhdWx0XG4gICAgICAgIHJldHVybiBgJHtzcGVha2VyLmZpcnN0X25hbWV9ICR7c3BlYWtlci5sYXN0X25hbWV9ICgke3NwZWFrZXIuaWR9KWA7XG4gICAgfVxuXG4gICAgcmVuZGVyKCkge1xuICAgICAgICBsZXQge3ZhbHVlLCBvbkNoYW5nZSwgaGlzdG9yeSwgc3VtbWl0SWQsIGVycm9yLCBpZCwgbXVsdGksIC4uLnJlc3R9ID0gdGhpcy5wcm9wcztcbiAgICAgICAgbGV0IGhhc19lcnJvciA9ICggdGhpcy5wcm9wcy5oYXNPd25Qcm9wZXJ0eSgnZXJyb3InKSAmJiBlcnJvciAhPSAnJyApO1xuICAgICAgICBsZXQgaXNNdWx0aSA9ICh0aGlzLnByb3BzLmhhc093blByb3BlcnR5KCdtdWx0aScpKTtcblxuICAgICAgICBjb25zdCBNdWx0aVZhbHVlTGFiZWwgPSAocHJvcHMpID0+IHtcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgPGEgb25DbGljaz17KCkgPT4gdGhpcy5oYW5kbGVDbGljayhwcm9wcy5kYXRhLmlkKX0gc3R5bGU9e3tjdXJzb3I6ICdwb2ludGVyJ319PlxuICAgICAgICAgICAgICAgICAgICA8Y29tcG9uZW50cy5NdWx0aVZhbHVlTGFiZWwgey4uLnByb3BzfSAvPlxuICAgICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgICk7XG4gICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgPEFzeW5jU2VsZWN0XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlPXt2YWx1ZX1cbiAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9e3RoaXMuaGFuZGxlQ2hhbmdlfVxuICAgICAgICAgICAgICAgICAgICBsb2FkT3B0aW9ucz17dGhpcy5nZXRTcGVha2Vyc31cbiAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50cz17eyBNdWx0aVZhbHVlTGFiZWwgfX1cbiAgICAgICAgICAgICAgICAgICAgZ2V0T3B0aW9uVmFsdWU9e3MgPT4gdGhpcy5nZXRPcHRpb25WYWx1ZShzKX1cbiAgICAgICAgICAgICAgICAgICAgZ2V0T3B0aW9uTGFiZWw9e3MgPT4gdGhpcy5nZXRPcHRpb25MYWJlbChzKX1cbiAgICAgICAgICAgICAgICAgICAgaXNNdWx0aT17aXNNdWx0aX1cbiAgICAgICAgICAgICAgICAgICAgey4uLnJlc3R9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICB7aGFzX2Vycm9yICYmXG4gICAgICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwiZXJyb3ItbGFiZWxcIj57ZXJyb3J9PC9wPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICApO1xuXG4gICAgfVxufVxuXG4iLCIvKipcbiAqIENvcHlyaWdodCAyMDE3IE9wZW5TdGFjayBGb3VuZGF0aW9uXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiovXG5cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgQXN5bmNTZWxlY3QgZnJvbSAncmVhY3Qtc2VsZWN0L2xpYi9Bc3luYyc7XG5pbXBvcnQge3F1ZXJ5U3BvbnNvcnN9IGZyb20gJy4uLy4uL3V0aWxzL3F1ZXJ5LWFjdGlvbnMnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTcG9uc29ySW5wdXQgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICAgICAgc3VwZXIocHJvcHMpO1xuXG4gICAgICAgIHRoaXMuaGFuZGxlQ2hhbmdlID0gdGhpcy5oYW5kbGVDaGFuZ2UuYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5nZXRTcG9uc29ycyA9IHRoaXMuZ2V0U3BvbnNvcnMuYmluZCh0aGlzKTtcbiAgICB9XG5cbiAgICBoYW5kbGVDaGFuZ2UodmFsdWUpIHtcbiAgICAgICAgbGV0IGV2ID0ge3RhcmdldDoge1xuICAgICAgICAgICAgaWQ6IHRoaXMucHJvcHMuaWQsXG4gICAgICAgICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICAgICAgICB0eXBlOiAnc3BvbnNvcmlucHV0J1xuICAgICAgICB9fTtcblxuICAgICAgICB0aGlzLnByb3BzLm9uQ2hhbmdlKGV2KTtcbiAgICB9XG5cbiAgICBnZXRTcG9uc29ycyAoaW5wdXQsIGNhbGxiYWNrKSB7XG4gICAgICAgIGxldCB7c3VtbWl0SWR9ID0gdGhpcy5wcm9wcztcblxuICAgICAgICBpZiAoIWlucHV0KSB7XG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHsgb3B0aW9uczogW10gfSk7XG4gICAgICAgIH1cblxuICAgICAgICBxdWVyeVNwb25zb3JzKHN1bW1pdElkLCBpbnB1dCwgY2FsbGJhY2spO1xuICAgIH1cblxuICAgIHJlbmRlcigpIHtcbiAgICAgICAgbGV0IHtlcnJvciwgdmFsdWUsIG9uQ2hhbmdlLCBpZCwgbXVsdGksIHN1bW1pdElkLCAuLi5yZXN0fSA9IHRoaXMucHJvcHM7XG4gICAgICAgIGxldCBoYXNfZXJyb3IgPSAoIHRoaXMucHJvcHMuaGFzT3duUHJvcGVydHkoJ2Vycm9yJykgJiYgZXJyb3IgIT0gJycgKTtcbiAgICAgICAgbGV0IGlzTXVsdGkgPSAodGhpcy5wcm9wcy5oYXNPd25Qcm9wZXJ0eSgnbXVsdGknKSk7XG5cbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgPEFzeW5jU2VsZWN0XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlPXt2YWx1ZX1cbiAgICAgICAgICAgICAgICAgICAgZ2V0T3B0aW9uVmFsdWU9e29wdGlvbiA9PiBvcHRpb24uaWR9XG4gICAgICAgICAgICAgICAgICAgIGdldE9wdGlvbkxhYmVsPXtvcHRpb24gPT4gYCR7b3B0aW9uLmNvbXBhbnkubmFtZX0gKCR7b3B0aW9uLnNwb25zb3JzaGlwLmxhYmVsfSlgfVxuICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17dGhpcy5oYW5kbGVDaGFuZ2V9XG4gICAgICAgICAgICAgICAgICAgIGxvYWRPcHRpb25zPXt0aGlzLmdldFNwb25zb3JzfVxuICAgICAgICAgICAgICAgICAgICBpc011bHRpPXtpc011bHRpfVxuICAgICAgICAgICAgICAgICAgICB7Li4ucmVzdH1cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIHtoYXNfZXJyb3IgJiZcbiAgICAgICAgICAgICAgICA8cCBjbGFzc05hbWU9XCJlcnJvci1sYWJlbFwiPntlcnJvcn08L3A+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICk7XG5cbiAgICB9XG59XG5cbiIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTcgT3BlblN0YWNrIEZvdW5kYXRpb25cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqKi9cblxuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBBc3luY1NlbGVjdCBmcm9tICdyZWFjdC1zZWxlY3QvbGliL0FzeW5jJztcbmltcG9ydCB7cXVlcnlTdW1taXRzfSBmcm9tICcuLi8uLi91dGlscy9xdWVyeS1hY3Rpb25zJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU3VtbWl0SW5wdXQgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICAgICAgc3VwZXIocHJvcHMpO1xuXG4gICAgICAgIHRoaXMuc3RhdGUgPSB7XG4gICAgICAgICAgICB2YWx1ZTogcHJvcHMudmFsdWVcbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLmhhbmRsZUNoYW5nZSA9IHRoaXMuaGFuZGxlQ2hhbmdlLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuZ2V0U3VtbWl0cyA9IHRoaXMuZ2V0U3VtbWl0cy5iaW5kKHRoaXMpO1xuICAgIH1cblxuICAgIGhhbmRsZUNoYW5nZSh2YWx1ZSkge1xuICAgICAgICBsZXQgZXYgPSB7dGFyZ2V0OiB7XG4gICAgICAgICAgICBpZDogdGhpcy5wcm9wcy5pZCxcbiAgICAgICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgICAgICAgIHR5cGU6ICdzdW1taXRpbnB1dCdcbiAgICAgICAgfX07XG5cbiAgICAgICAgdGhpcy5wcm9wcy5vbkNoYW5nZShldik7XG4gICAgfVxuXG4gICAgZ2V0U3VtbWl0cyAoaW5wdXQsIGNhbGxiYWNrKSB7XG4gICAgICAgIGlmICghaW5wdXQpIHtcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoeyBvcHRpb25zOiBbXSB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHF1ZXJ5U3VtbWl0cyhpbnB1dCwgY2FsbGJhY2spO1xuICAgIH1cblxuXG4gICAgcmVuZGVyKCkge1xuICAgICAgICBsZXQge3ZhbHVlLCBlcnJvciwgb25DaGFuZ2UsIGlkLCBtdWx0aSwgLi4ucmVzdH0gPSB0aGlzLnByb3BzO1xuICAgICAgICBsZXQgaXNNdWx0aSA9ICh0aGlzLnByb3BzLmhhc093blByb3BlcnR5KCdtdWx0aScpKTtcbiAgICAgICAgbGV0IGhhc19lcnJvciA9ICggdGhpcy5wcm9wcy5oYXNPd25Qcm9wZXJ0eSgnZXJyb3InKSAmJiBlcnJvciAhPSAnJyApO1xuXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgIDxBc3luY1NlbGVjdFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZT17dmFsdWV9XG4gICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXt0aGlzLmhhbmRsZUNoYW5nZX1cbiAgICAgICAgICAgICAgICAgICAgbG9hZE9wdGlvbnM9e3RoaXMuZ2V0U3VtbWl0c31cbiAgICAgICAgICAgICAgICAgICAgZ2V0T3B0aW9uVmFsdWU9e29wID0+IG9wLmlkfVxuICAgICAgICAgICAgICAgICAgICBnZXRPcHRpb25MYWJlbD17b3AgPT4gKGAke29wLm5hbWV9ICgke29wLmlkfSlgKX1cbiAgICAgICAgICAgICAgICAgICAgaXNNdWx0aT17aXNNdWx0aX1cbiAgICAgICAgICAgICAgICAgICAgey4uLnJlc3R9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICB7aGFzX2Vycm9yICYmXG4gICAgICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwiZXJyb3ItbGFiZWxcIj57ZXJyb3J9PC9wPlxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICk7XG5cbiAgICB9XG59XG5cbiIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTcgT3BlblN0YWNrIEZvdW5kYXRpb25cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqKi9cblxuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBBc3luY1NlbGVjdCBmcm9tICdyZWFjdC1zZWxlY3QvbGliL0FzeW5jJztcbmltcG9ydCB7cXVlcnlUYWdzfSBmcm9tICcuLi8uLi91dGlscy9xdWVyeS1hY3Rpb25zJztcbmltcG9ydCB7c2hhbGxvd0VxdWFsfSBmcm9tIFwiLi4vLi4vdXRpbHMvbWV0aG9kc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUYWdJbnB1dCBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgICAgICBzdXBlcihwcm9wcyk7XG5cbiAgICAgICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgICAgICAgIHZhbHVlOiBwcm9wcy52YWx1ZS5tYXAoKHQpID0+ICh7dGFnOiB0LnRhZ30pKVxuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMuaGFuZGxlQ2hhbmdlID0gdGhpcy5oYW5kbGVDaGFuZ2UuYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5nZXRUYWdzID0gdGhpcy5nZXRUYWdzLmJpbmQodGhpcyk7XG4gICAgfVxuXG4gICAgY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wcywgcHJldlN0YXRlLCBzbmFwc2hvdCkge1xuICAgICAgICBpZighc2hhbGxvd0VxdWFsKHRoaXMucHJvcHMudmFsdWUsIHByZXZQcm9wcy52YWx1ZSkpIHtcbiAgICAgICAgICAgIGxldCBuZXh0VmFsdWUgPSB0aGlzLnByb3BzLnZhbHVlLm1hcCgodCkgPT4gKHt0YWc6IHQudGFnfSkpO1xuXG4gICAgICAgICAgICB0aGlzLnNldFN0YXRlKHt2YWx1ZTogbmV4dFZhbHVlfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBoYW5kbGVDaGFuZ2UodmFsdWUpIHtcbiAgICAgICAgbGV0IGV2ID0ge3RhcmdldDoge1xuICAgICAgICAgICAgICAgIGlkOiB0aGlzLnByb3BzLmlkLFxuICAgICAgICAgICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgICAgICAgICAgICB0eXBlOiAndGFnaW5wdXQnXG4gICAgICAgICAgICB9fTtcblxuICAgICAgICB0aGlzLnByb3BzLm9uQ2hhbmdlKGV2KTtcbiAgICB9XG5cbiAgICBnZXRUYWdzIChpbnB1dCwgY2FsbGJhY2spIHtcbiAgICAgICAgaWYgKCFpbnB1dCkge1xuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh7IG9wdGlvbnM6IFtdIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHN1bW1pdElkID0gKHRoaXMucHJvcHMuaGFzT3duUHJvcGVydHkoJ3N1bW1pdElkJykpID8gdGhpcy5wcm9wcy5zdW1taXRJZCA6IG51bGw7XG5cbiAgICAgICAgcXVlcnlUYWdzKHN1bW1pdElkLCBpbnB1dCwgY2FsbGJhY2spO1xuICAgIH1cblxuICAgIHJlbmRlcigpIHtcbiAgICAgICAgbGV0IHtjbGFzc05hbWUsIGVycm9yLCAuLi5yZXN0fSA9IHRoaXMucHJvcHM7XG4gICAgICAgIGxldCBoYXNfZXJyb3IgPSAoIHRoaXMucHJvcHMuaGFzT3duUHJvcGVydHkoJ2Vycm9yJykgJiYgZXJyb3IgIT0gJycgKTtcblxuICAgICAgICBsZXQgb3JkZXJlZFRhZ3MgPSB0aGlzLnN0YXRlLnZhbHVlLnNvcnQoKGEsIGIpID0+IChhLnRhZy50b0xvd2VyQ2FzZSgpID4gYi50YWcudG9Mb3dlckNhc2UoKSA/IDEgOiAoYS50YWcudG9Mb3dlckNhc2UoKSA8IGIudGFnLnRvTG93ZXJDYXNlKCkgPyAtMSA6IDApKSk7XG5cbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgPEFzeW5jU2VsZWN0XG4gICAgICAgICAgICAgICAgICAgIHsuLi5yZXN0fVxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2NsYXNzTmFtZSArICcgJyArIChoYXNfZXJyb3IgPyAnZXJyb3InIDogJycpfVxuICAgICAgICAgICAgICAgICAgICBpc011bHRpXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlPXtvcmRlcmVkVGFnc31cbiAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9e3RoaXMuaGFuZGxlQ2hhbmdlfVxuICAgICAgICAgICAgICAgICAgICBsb2FkT3B0aW9ucz17dGhpcy5nZXRUYWdzfVxuICAgICAgICAgICAgICAgICAgICBnZXRPcHRpb25MYWJlbD17b3B0aW9uID0+IG9wdGlvbi50YWd9XG4gICAgICAgICAgICAgICAgICAgIGdldE9wdGlvblZhbHVlPXtvcHRpb24gPT4gb3B0aW9uLnRhZ31cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIHtoYXNfZXJyb3IgJiZcbiAgICAgICAgICAgICAgICA8cCBjbGFzc05hbWU9XCJlcnJvci1sYWJlbFwiPntlcnJvcn08L3A+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICk7XG5cbiAgICB9XG59XG4iLCIvKipcbiAqIENvcHlyaWdodCAyMDE3IE9wZW5TdGFjayBGb3VuZGF0aW9uXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiovXG5cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIElucHV0IGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcblxuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgICAgIHN1cGVyKHByb3BzKTtcblxuICAgICAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgICAgICAgdmFsdWU6IHByb3BzLnZhbHVlLFxuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMuaGFuZGxlQ2hhbmdlID0gdGhpcy5oYW5kbGVDaGFuZ2UuYmluZCh0aGlzKTtcbiAgICB9XG5cbiAgICBjb21wb25lbnREaWRVcGRhdGUocHJldlByb3BzLCBwcmV2U3RhdGUsIHNuYXBzaG90KSB7XG4gICAgICAgIGlmICh0aGlzLnByb3BzLnZhbHVlICE9PSBwcmV2UHJvcHMudmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0U3RhdGUoe3ZhbHVlOiB0aGlzLnByb3BzLnZhbHVlfSlcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGhhbmRsZUNoYW5nZShldikge1xuICAgICAgICB0aGlzLnByb3BzLm9uQ2hhbmdlKGV2KTtcbiAgICB9XG5cbiAgICByZW5kZXIoKSB7XG5cbiAgICAgICAgbGV0IHtvbkNoYW5nZSwgdmFsdWUsIGNsYXNzTmFtZSwgZXJyb3IsIC4uLnJlc3R9ID0gdGhpcy5wcm9wcztcbiAgICAgICAgbGV0IGhhc19lcnJvciA9ICggdGhpcy5wcm9wcy5oYXNPd25Qcm9wZXJ0eSgnZXJyb3InKSAmJiBlcnJvciAhPT0gJycgKTtcbiAgICAgICAgbGV0IGNsYXNzX25hbWUgPSB0aGlzLnByb3BzLmhhc093blByb3BlcnR5KCdjbGFzc05hbWUnKSA/IGNsYXNzTmFtZSA6ICdmb3JtLWNvbnRyb2wnO1xuXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2NsYXNzX25hbWUgKyAnICcgKyAoaGFzX2Vycm9yID8gJ2Vycm9yJyA6ICcnKX1cbiAgICAgICAgICAgICAgICAgICAgdmFsdWU9e3RoaXMuc3RhdGUudmFsdWV9XG4gICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXt0aGlzLmhhbmRsZUNoYW5nZX1cbiAgICAgICAgICAgICAgICAgICAgey4uLnJlc3R9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICB7aGFzX2Vycm9yICYmXG4gICAgICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwiZXJyb3ItbGFiZWxcIj57ZXJyb3J9PC9wPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICApO1xuXG4gICAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTcgT3BlblN0YWNrIEZvdW5kYXRpb25cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqKi9cblxuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVGV4dEFyZWEgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICAgICAgc3VwZXIocHJvcHMpO1xuXG4gICAgICAgIHRoaXMuc3RhdGUgPSB7XG4gICAgICAgICAgICB2YWx1ZTogcHJvcHMudmFsdWUsXG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5oYW5kbGVDaGFuZ2UgPSB0aGlzLmhhbmRsZUNoYW5nZS5iaW5kKHRoaXMpO1xuICAgIH1cblxuICAgIGNvbXBvbmVudERpZFVwZGF0ZShwcmV2UHJvcHMsIHByZXZTdGF0ZSwgc25hcHNob3QpIHtcbiAgICAgICAgaWYgKHRoaXMucHJvcHMudmFsdWUgIT09IHByZXZQcm9wcy52YWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7dmFsdWU6IHRoaXMucHJvcHMudmFsdWV9KVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgaGFuZGxlQ2hhbmdlKGV2KSB7XG4gICAgICAgIHRoaXMucHJvcHMub25DaGFuZ2UoZXYpO1xuICAgIH1cblxuICAgIHJlbmRlcigpIHtcblxuICAgICAgICBsZXQge29uQ2hhbmdlLCB2YWx1ZSwgY2xhc3NOYW1lLCBlcnJvciwgLi4ucmVzdH0gPSB0aGlzLnByb3BzO1xuICAgICAgICBsZXQgaGFzX2Vycm9yID0gKCB0aGlzLnByb3BzLmhhc093blByb3BlcnR5KCdlcnJvcicpICYmIGVycm9yICE9ICcnICk7XG4gICAgICAgIGxldCBjbGFzc19uYW1lID0gdGhpcy5wcm9wcy5oYXNPd25Qcm9wZXJ0eSgnY2xhc3NOYW1lJykgPyBjbGFzc05hbWUgOiAnZm9ybS1jb250cm9sJztcblxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICA8dGV4dGFyZWFcbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtjbGFzc19uYW1lICsgJyAnICsgKGhhc19lcnJvciA/ICdlcnJvcicgOiAnJyl9XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlPXt0aGlzLnN0YXRlLnZhbHVlfVxuICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17dGhpcy5oYW5kbGVDaGFuZ2V9XG4gICAgICAgICAgICAgICAgICAgIHsuLi5yZXN0fVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAge2hhc19lcnJvciAmJlxuICAgICAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cImVycm9yLWxhYmVsXCI+e2Vycm9yfTwvcD5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKTtcblxuICAgIH1cbn1cbiIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTcgT3BlblN0YWNrIEZvdW5kYXRpb25cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqKi9cblxuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBBc3luY1NlbGVjdCBmcm9tICdyZWFjdC1zZWxlY3QvbGliL0FzeW5jJztcbmltcG9ydCB7cXVlcnlUaWNrZXRUeXBlc30gZnJvbSAnLi4vLi4vdXRpbHMvcXVlcnktYWN0aW9ucyc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRpY2tldFR5cGVzSW5wdXQgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICAgICAgc3VwZXIocHJvcHMpO1xuXG4gICAgICAgIHRoaXMuc3RhdGUgPSB7XG4gICAgICAgICAgICB2YWx1ZTogcHJvcHMudmFsdWVcbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLmhhbmRsZUNoYW5nZSA9IHRoaXMuaGFuZGxlQ2hhbmdlLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuZ2V0VGlja2V0VHlwZXMgPSB0aGlzLmdldFRpY2tldFR5cGVzLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuZ2V0T3B0aW9uVmFsdWUgPSB0aGlzLmdldE9wdGlvblZhbHVlLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuZ2V0T3B0aW9uTGFiZWwgPSB0aGlzLmdldE9wdGlvbkxhYmVsLmJpbmQodGhpcyk7XG4gICAgfVxuXG4gICAgZ2V0T3B0aW9uVmFsdWUodGlja2V0VHlwZSl7XG4gICAgICAgIGlmKHRoaXMucHJvcHMuaGFzT3duUHJvcGVydHkoXCJnZXRPcHRpb25WYWx1ZVwiKSl7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wcm9wcy5nZXRPcHRpb25WYWx1ZSh0aWNrZXRUeXBlKTtcbiAgICAgICAgfVxuICAgICAgICAvL2RlZmF1bHRcbiAgICAgICAgcmV0dXJuIHRpY2tldFR5cGUuaWQ7XG4gICAgfVxuXG4gICAgZ2V0T3B0aW9uTGFiZWwodGlja2V0VHlwZSl7XG4gICAgICAgIGlmKHRoaXMucHJvcHMuaGFzT3duUHJvcGVydHkoXCJnZXRPcHRpb25MYWJlbFwiKSl7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wcm9wcy5nZXRPcHRpb25MYWJlbCh0aWNrZXRUeXBlKTtcbiAgICAgICAgfVxuICAgICAgICAvL2RlZmF1bHRcbiAgICAgICAgcmV0dXJuIGAke3RpY2tldFR5cGUubmFtZX1gO1xuICAgIH1cblxuICAgIGhhbmRsZUNoYW5nZSh2YWx1ZSkge1xuICAgICAgICBsZXQgZXYgPSB7dGFyZ2V0OiB7XG4gICAgICAgICAgICAgICAgaWQ6IHRoaXMucHJvcHMuaWQsXG4gICAgICAgICAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICAgICAgICAgIHR5cGU6ICd0aWNrZXR0eXBlaW5wdXQnXG4gICAgICAgICAgICB9fTtcblxuICAgICAgICB0aGlzLnByb3BzLm9uQ2hhbmdlKGV2KTtcbiAgICB9XG5cbiAgICBnZXRUaWNrZXRUeXBlcyAoaW5wdXQsIGNhbGxiYWNrKSB7XG4gICAgICAgIGxldCB7c3VtbWl0SWR9ID0gdGhpcy5wcm9wcztcblxuICAgICAgICBpZiAoIWlucHV0KSB7XG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHsgb3B0aW9uczogW10gfSk7XG4gICAgICAgIH1cbiAgICAgICAgcXVlcnlUaWNrZXRUeXBlcyhzdW1taXRJZCxpbnB1dCwgY2FsbGJhY2spO1xuICAgIH1cblxuICAgIHJlbmRlcigpIHtcblxuICAgICAgICBsZXQge3ZhbHVlLCBlcnJvciwgb25DaGFuZ2UsIGlkLCBtdWx0aSwgLi4ucmVzdH0gPSB0aGlzLnByb3BzO1xuICAgICAgICBsZXQgaXNNdWx0aSA9ICh0aGlzLnByb3BzLmhhc093blByb3BlcnR5KCdtdWx0aScpKTtcbiAgICAgICAgbGV0IGhhc19lcnJvciA9ICggdGhpcy5wcm9wcy5oYXNPd25Qcm9wZXJ0eSgnZXJyb3InKSAmJiBlcnJvciAhPSAnJyApO1xuXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgIDxBc3luY1NlbGVjdFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZT17dmFsdWV9XG4gICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXt0aGlzLmhhbmRsZUNoYW5nZX1cbiAgICAgICAgICAgICAgICAgICAgbG9hZE9wdGlvbnM9e3RoaXMuZ2V0VGlja2V0VHlwZXN9XG4gICAgICAgICAgICAgICAgICAgIGdldE9wdGlvblZhbHVlPXttID0+IHRoaXMuZ2V0T3B0aW9uVmFsdWUobSl9XG4gICAgICAgICAgICAgICAgICAgIGdldE9wdGlvbkxhYmVsPXttID0+IHRoaXMuZ2V0T3B0aW9uTGFiZWwobSl9XG4gICAgICAgICAgICAgICAgICAgIGlzTXVsdGk9e2lzTXVsdGl9XG4gICAgICAgICAgICAgICAgICAgIHsuLi5yZXN0fVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAge2hhc19lcnJvciAmJlxuICAgICAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cImVycm9yLWxhYmVsXCI+e2Vycm9yfTwvcD5cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICApO1xuXG4gICAgfVxufVxuXG4iLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgUmVhY3RET00gZnJvbSAncmVhY3QtZG9tJ1xuaW1wb3J0IGV4dGVuZCBmcm9tICdleHRlbmQnXG5pbXBvcnQgJ2Ryb3B6b25lL2Rpc3QvZHJvcHpvbmUuY3NzJztcbmltcG9ydCB7IEljb24gfSBmcm9tICcuL2ljb24nXG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuXG5sZXQgRHJvcHpvbmUgPSBudWxsO1xuLyoqXG4gKiBjbGFzcyBEcm9wem9uZUpTXG4gKi9cbmV4cG9ydCBjbGFzcyBEcm9wem9uZUpTIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcblxuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgICAgIHN1cGVyKHByb3BzKTtcbiAgICAgICAgdGhpcy5zdGF0ZSA9IHtmaWxlczogW119O1xuICAgICAgICB0aGlzLm9uVXBsb2FkQ29tcGxldGUgPSB0aGlzLm9uVXBsb2FkQ29tcGxldGUuYmluZCh0aGlzKTtcbiAgICB9XG5cbiAgICBvblVwbG9hZENvbXBsZXRlKHJlc3BvbnNlKXtcbiAgICAgICAgaWYodGhpcy5wcm9wcy5vblVwbG9hZENvbXBsZXRlKVxuICAgICAgICAgICAgdGhpcy5wcm9wcy5vblVwbG9hZENvbXBsZXRlKHJlc3BvbnNlLCB0aGlzLnByb3BzLmlkLCB0aGlzLnByb3BzLmRhdGEpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENvbmZpZ3VyYXRpb24gb2YgRHJvcHpvbmUuanMuIERlZmF1bHRzIGFyZVxuICAgICAqIG92ZXJyaWRlbiBieSB0aGUgJ2Rqc0NvbmZpZycgcHJvcGVydHlcbiAgICAgKiBGb3IgYSBmdWxsIGxpc3Qgb2YgcG9zc2libGUgY29uZmlndXJhdGlvbnMsXG4gICAgICogcGxlYXNlIGNvbnN1bHRcbiAgICAgKiBodHRwOi8vd3d3LmRyb3B6b25lanMuY29tLyNjb25maWd1cmF0aW9uXG4gICAgICovXG4gICAgZ2V0RGpzQ29uZmlnICgpIHtcbiAgICAgICAgbGV0IG9wdGlvbnMgPSBudWxsO1xuICAgICAgICBjb25zdCBkZWZhdWx0cyA9IHtcbiAgICAgICAgICAgIHVybDogdGhpcy5wcm9wcy5jb25maWcucG9zdFVybCA/IHRoaXMucHJvcHMuY29uZmlnLnBvc3RVcmwgOiBudWxsXG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKHRoaXMucHJvcHMuZGpzQ29uZmlnKSB7XG4gICAgICAgICAgICBvcHRpb25zID0gZXh0ZW5kKHRydWUsIHt9LCBkZWZhdWx0cywgdGhpcy5wcm9wcy5kanNDb25maWcpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBvcHRpb25zID0gZGVmYXVsdHNcbiAgICAgICAgfVxuXG4gICAgICAgIG9wdGlvbnMuYWNjZXB0ID0gKGZpbGUsIGRvbmUpID0+IHtcbiAgICAgICAgICAgIGlmIChvcHRpb25zLm1heEZpbGVzIDwgKHRoaXMuc3RhdGUuZmlsZXMubGVuZ3RoICsgdGhpcy5wcm9wcy51cGxvYWRDb3VudCkpIHtcbiAgICAgICAgICAgICAgICBkb25lKCdNYXggZmlsZXMgcmVhY2hlZCcpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBkb25lKCk7XG4gICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuIG9wdGlvbnNcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZWFjdCAnY29tcG9uZW50RGlkTW91bnQnIG1ldGhvZFxuICAgICAqIFNldHMgdXAgZHJvcHpvbmUuanMgd2l0aCB0aGUgY29tcG9uZW50LlxuICAgICAqL1xuICAgIGNvbXBvbmVudERpZE1vdW50ICgpIHtcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHRoaXMuZ2V0RGpzQ29uZmlnKCk7XG5cbiAgICAgICAgRHJvcHpvbmUgPSBEcm9wem9uZSB8fCByZXF1aXJlKCdkcm9wem9uZScpO1xuICAgICAgICBEcm9wem9uZS5hdXRvRGlzY292ZXIgPSBmYWxzZTtcblxuICAgICAgICBpZiAoIXRoaXMucHJvcHMuY29uZmlnLnBvc3RVcmwgJiYgIXRoaXMucHJvcHMuZXZlbnRIYW5kbGVycy5kcm9wKSB7XG4gICAgICAgICAgICBjb25zb2xlLmluZm8oJ05laXRoZXIgcG9zdFVybCBub3IgYSBcImRyb3BcIiBldmVudEhhbmRsZXIgc3BlY2lmaWVkLCB0aGUgUmVhY3QtRHJvcHpvbmUgY29tcG9uZW50IG1pZ2h0IG1pc2JlaGF2ZS4nKVxuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGRyb3B6b25lTm9kZSA9IHRoaXMucHJvcHMuY29uZmlnLmRyb3B6b25lU2VsZWN0b3IgfHwgUmVhY3RET00uZmluZERPTU5vZGUodGhpcyk7XG4gICAgICAgIHRoaXMuZHJvcHpvbmUgPSBuZXcgRHJvcHpvbmUoZHJvcHpvbmVOb2RlLCBvcHRpb25zKTtcblxuICAgICAgICB0aGlzLnNldHVwRXZlbnRzKClcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZWFjdCAnY29tcG9uZW50V2lsbFVubW91bnQnXG4gICAgICogUmVtb3ZlcyBkcm9wem9uZS5qcyAoYW5kIGFsbCBpdHMgZ2xvYmFscykgaWYgdGhlIGNvbXBvbmVudCBpcyBiZWluZyB1bm1vdW50ZWRcbiAgICAgKi9cbiAgICBjb21wb25lbnRXaWxsVW5tb3VudCAoKSB7XG4gICAgICAgIGlmICh0aGlzLmRyb3B6b25lKSB7XG4gICAgICAgICAgICBjb25zdCBmaWxlcyA9IHRoaXMuZHJvcHpvbmUuZ2V0QWN0aXZlRmlsZXMoKTtcblxuICAgICAgICAgICAgaWYgKGZpbGVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAvLyBXZWxsLCBzZWVtcyBsaWtlIHdlIHN0aWxsIGhhdmUgc3R1ZmYgdXBsb2FkaW5nLlxuICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgZGlydHksIGJ1dCBsZXQncyBrZWVwIHRyeWluZyB0byBnZXQgcmlkXG4gICAgICAgICAgICAgICAgLy8gb2YgdGhlIGRyb3B6b25lIHVudGlsIHdlJ3JlIGRvbmUgaGVyZS5cbiAgICAgICAgICAgICAgICB0aGlzLnF1ZXVlRGVzdHJveSA9IHRydWU7XG5cbiAgICAgICAgICAgICAgICBjb25zdCBkZXN0cm95SW50ZXJ2YWwgPSB3aW5kb3cuc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5xdWV1ZURlc3Ryb3kgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gd2luZG93LmNsZWFySW50ZXJ2YWwoZGVzdHJveUludGVydmFsKVxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuZHJvcHpvbmUuZ2V0QWN0aXZlRmlsZXMoKS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZHJvcHpvbmUgPSB0aGlzLmRlc3Ryb3kodGhpcy5kcm9wem9uZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gd2luZG93LmNsZWFySW50ZXJ2YWwoZGVzdHJveUludGVydmFsKVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSwgNTAwKVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRyb3B6b25lID0gdGhpcy5kZXN0cm95KHRoaXMuZHJvcHpvbmUpXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZWFjdCAnY29tcG9uZW50RGlkVXBkYXRlJ1xuICAgICAqIElmIHRoZSBEcm9wem9uZSBoYXNuJ3QgYmVlbiBjcmVhdGVkLCBjcmVhdGUgaXRcbiAgICAgKi9cbiAgICBjb21wb25lbnREaWRVcGRhdGUgKCkge1xuICAgICAgICBjb25zdCB7Y29uZmlnLCBkanNDb25maWd9ID0gdGhpcy5wcm9wcztcbiAgICAgICAgY29uc3QgZGpzQ29uZmlnT2JqID0gZGpzQ29uZmlnID8gZGpzQ29uZmlnIDoge307XG4gICAgICAgIGNvbnN0IHBvc3RVcmxDb25maWdPYmogPSBjb25maWcgJiYgY29uZmlnLnBvc3RVcmwgPyB7IHVybDogY29uZmlnLnBvc3RVcmwgfSA6IHt9O1xuICAgICAgICB0aGlzLnF1ZXVlRGVzdHJveSA9IGZhbHNlO1xuXG4gICAgICAgIGlmICghdGhpcy5kcm9wem9uZSkge1xuICAgICAgICAgICAgY29uc3QgZHJvcHpvbmVOb2RlID0gdGhpcy5wcm9wcy5jb25maWcuZHJvcHpvbmVTZWxlY3RvciB8fCBSZWFjdERPTS5maW5kRE9NTm9kZSh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMuZHJvcHpvbmUgPSBuZXcgRHJvcHpvbmUoZHJvcHpvbmVOb2RlLCB0aGlzLmdldERqc0NvbmZpZygpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZHJvcHpvbmUub3B0aW9ucyA9IGV4dGVuZCh0cnVlLCB7fSwgdGhpcy5kcm9wem9uZS5vcHRpb25zLCBkanNDb25maWdPYmosIHBvc3RVcmxDb25maWdPYmopO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlYWN0ICdyZW5kZXInXG4gICAgICovXG4gICAgcmVuZGVyICgpIHtcbiAgICAgICAgY29uc3QgaWNvbnMgPSBbXTtcbiAgICAgICAgY29uc3QgeyBmaWxlcyB9ID0gdGhpcy5zdGF0ZTtcbiAgICAgICAgY29uc3QgeyBjb25maWcgfSA9IHRoaXMucHJvcHM7XG4gICAgICAgIGNvbnN0IGNsYXNzTmFtZSA9ICh0aGlzLnByb3BzLmNsYXNzTmFtZSkgPyAnZmlsZXBpY2tlciBkcm9wem9uZSAnICsgdGhpcy5wcm9wcy5jbGFzc05hbWUgOiAnZmlsZXBpY2tlciBkcm9wem9uZSc7XG5cbiAgICAgICAgaWYgKGNvbmZpZy5zaG93RmlsZXR5cGVJY29uICYmIGNvbmZpZy5pY29uRmlsZXR5cGVzICYmICghZmlsZXMgfHwgZmlsZXMubGVuZ3RoIDwgMSkpIHtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5wcm9wcy5jb25maWcuaWNvbkZpbGV0eXBlcy5sZW5ndGg7IGkgPSBpICsgMSkge1xuICAgICAgICAgICAgICAgIGljb25zLnB1c2goPEljb24gZmlsZXR5cGU9e2NvbmZpZy5pY29uRmlsZXR5cGVzW2ldfSBrZXk9eydpY29uLWNvbXBvbmVudCcgKyBpfSAvPilcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGhpcy5wcm9wcy5jb25maWcucG9zdFVybCAmJiB0aGlzLnByb3BzLmFjdGlvbikge1xuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICA8Zm9ybSBhY3Rpb249e3RoaXMucHJvcHMuYWN0aW9ufSBjbGFzc05hbWU9e2NsYXNzTmFtZX0+XG4gICAgICAgICAgICAgICAgICAgIHtpY29uc31cbiAgICAgICAgICAgICAgICAgICAge3RoaXMucHJvcHMuY2hpbGRyZW59XG4gICAgICAgICAgICAgICAgPC9mb3JtPlxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgPGRpdiBpZD17dGhpcy5wcm9wcy5pZH0gY2xhc3NOYW1lPXtjbGFzc05hbWV9PiB7aWNvbnN9IHt0aGlzLnByb3BzLmNoaWxkcmVufSA8L2Rpdj5cbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUYWtlcyBldmVudCBoYW5kbGVycyBpbiB0aGlzLnByb3BzLmV2ZW50SGFuZGxlcnNcbiAgICAgKiBhbmQgYmluZHMgdGhlbSB0byBkcm9wem9uZS5qcyBldmVudHNcbiAgICAgKi9cbiAgICBzZXR1cEV2ZW50cyAoKSB7XG4gICAgICAgIGNvbnN0IGV2ZW50SGFuZGxlcnMgPSB0aGlzLnByb3BzLmV2ZW50SGFuZGxlcnM7XG5cbiAgICAgICAgaWYgKCF0aGlzLmRyb3B6b25lIHx8ICFldmVudEhhbmRsZXJzKSByZXR1cm47XG5cbiAgICAgICAgZm9yICh2YXIgZXZlbnRIYW5kbGVyIGluIGV2ZW50SGFuZGxlcnMpIHtcbiAgICAgICAgICAgIGlmIChldmVudEhhbmRsZXJzLmhhc093blByb3BlcnR5KGV2ZW50SGFuZGxlcikgJiYgZXZlbnRIYW5kbGVyc1tldmVudEhhbmRsZXJdKSB7XG4gICAgICAgICAgICAgICAgLy8gQ2hlY2sgaWYgdGhlcmUncyBhbiBhcnJheSBvZiBldmVudCBoYW5kbGVyc1xuICAgICAgICAgICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZXZlbnRIYW5kbGVyc1tldmVudEhhbmRsZXJdKSA9PT0gJ1tvYmplY3QgQXJyYXldJykge1xuICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGV2ZW50SGFuZGxlcnNbZXZlbnRIYW5kbGVyXS5sZW5ndGg7IGkgPSBpICsgMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ2hlY2sgaWYgaXQncyBhbiBpbml0IGhhbmRsZXJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChldmVudEhhbmRsZXIgPT09ICdpbml0Jykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50SGFuZGxlcnNbZXZlbnRIYW5kbGVyXVtpXSh0aGlzLmRyb3B6b25lKVxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRyb3B6b25lLm9uKGV2ZW50SGFuZGxlciwgZXZlbnRIYW5kbGVyc1tldmVudEhhbmRsZXJdW2ldKVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGV2ZW50SGFuZGxlciA9PT0gJ2luaXQnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBldmVudEhhbmRsZXJzW2V2ZW50SGFuZGxlcl0odGhpcy5kcm9wem9uZSlcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZHJvcHpvbmUub24oZXZlbnRIYW5kbGVyLCBldmVudEhhbmRsZXJzW2V2ZW50SGFuZGxlcl0pXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmRyb3B6b25lLm9uKCdhZGRlZGZpbGUnLCAoZmlsZSkgPT4ge1xuICAgICAgICAgICAgaWYgKCFmaWxlKSByZXR1cm47XG5cbiAgICAgICAgICAgIGNvbnN0IGZpbGVzID0gdGhpcy5zdGF0ZS5maWxlcyB8fCBbXTtcblxuICAgICAgICAgICAgZmlsZXMucHVzaChmaWxlKTtcbiAgICAgICAgICAgIHRoaXMuc2V0U3RhdGUoeyBmaWxlcyB9KVxuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLmRyb3B6b25lLm9uKCdyZW1vdmVkZmlsZScsIChmaWxlKSA9PiB7XG4gICAgICAgICAgICBpZiAoIWZpbGUpIHJldHVybjtcblxuICAgICAgICAgICAgY29uc3QgZmlsZXMgPSB0aGlzLnN0YXRlLmZpbGVzIHx8IFtdO1xuICAgICAgICAgICAgZmlsZXMuZm9yRWFjaCgoZmlsZUluRmlsZXMsIGkpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoZmlsZUluRmlsZXMubmFtZSA9PT0gZmlsZS5uYW1lICYmIGZpbGVJbkZpbGVzLnNpemUgPT09IGZpbGUuc2l6ZSkge1xuICAgICAgICAgICAgICAgICAgICBmaWxlcy5zcGxpY2UoaSwgMSlcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7IGZpbGVzIH0pXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuZHJvcHpvbmUub24oJ3VwbG9hZHByb2dyZXNzJywgKGZpbGUsIHByb2dyZXNzLCBieXRlc1NlbnQpID0+IHtcbiAgICAgICAgICAgIHByb2dyZXNzID0gYnl0ZXNTZW50IC8gZmlsZS5zaXplICogMTAwO1xuICAgICAgICAgICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZXMvZG9jcy9XZWIvQVBJL0RvY3VtZW50L3F1ZXJ5U2VsZWN0b3JcbiAgICAgICAgICAgIC8vbGV0IGVsZW0gPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGAjJHt0aGlzLnByb3BzLmlkfSAuZHotdXBsb2FkYCk7XG4gICAgICAgICAgICBpZihmaWxlLnByZXZpZXdFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgbGV0IGVsZW0gPSBmaWxlLnByZXZpZXdFbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXCJbZGF0YS1kei11cGxvYWRwcm9ncmVzc11cIik7XG5cbiAgICAgICAgICAgICAgICBpZihlbGVtLmxlbmd0aCA+IDApXG4gICAgICAgICAgICAgICAgICAgIGVsZW0gPSBlbGVtWzBdO1xuXG4gICAgICAgICAgICAgICAgaWYgKGVsZW0pXG4gICAgICAgICAgICAgICAgICAgIGVsZW0uc3R5bGUud2lkdGggPSBwcm9ncmVzcyArIFwiJVwiO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLmRyb3B6b25lLm9uKCdzZW5kaW5nJyAsIChmaWxlLCB4aHIsIGZvcm1EYXRhKSA9PiB7XG4gICAgICAgICAgICBpZih0aGlzLnByb3BzLmhhc093blByb3BlcnR5KCdhY2Nlc3NfdG9rZW4nKSkge1xuICAgICAgICAgICAgICAgIC8vIG9hdXRoMiB0b2tlblxuICAgICAgICAgICAgICAgIGZvcm1EYXRhLmFwcGVuZChcImFjY2Vzc190b2tlblwiLCB0aGlzLnByb3BzLmFjY2Vzc190b2tlbik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsZXQgX3RoaXMgPSB0aGlzO1xuICAgICAgICAgICAgLy8gVGhpcyB3aWxsIHRyYWNrIGFsbCByZXF1ZXN0IHNvIHdlIGNhbiBnZXQgdGhlIGNvcnJlY3QgcmVxdWVzdCB0aGF0IHJldHVybnMgZmluYWwgcmVzcG9uc2U6XG4gICAgICAgICAgICAvLyBXZSB3aWxsIGNoYW5nZSB0aGUgbG9hZCBjYWxsYmFjayBidXQgd2UgbmVlZCB0byBlbnN1cmUgdGhhdCB3ZSB3aWxsIGNhbGwgb3JpZ2luYWxcbiAgICAgICAgICAgIC8vIGxvYWQgY2FsbGJhY2sgZnJvbSBkcm9wem9uZVxuICAgICAgICAgICAgbGV0IGRyb3B6b25lT25Mb2FkID0geGhyLm9ubG9hZDtcbiAgICAgICAgICAgIHhoci5vbmxvYWQgPSBmdW5jdGlvbiAoZSkge1xuICAgICAgICAgICAgICAgIGRyb3B6b25lT25Mb2FkKGUpO1xuICAgICAgICAgICAgICAgIC8vIENoZWNrIGZvciBmaW5hbCBjaHVuayBhbmQgZ2V0IHRoZSByZXNwb25zZVxuICAgICAgICAgICAgICAgIGxldCB1cGxvYWRSZXNwb25zZSA9IEpTT04ucGFyc2UoeGhyLnJlc3BvbnNlVGV4dCk7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB1cGxvYWRSZXNwb25zZS5uYW1lID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgICAgICBfdGhpcy5vblVwbG9hZENvbXBsZXRlKHVwbG9hZFJlc3BvbnNlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVtb3ZlcyBBTEwgbGlzdGVuZXJzIGFuZCBEZXN0cm95cyBkcm9wem9uZS4gc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9lbnlvL2Ryb3B6b25lL2lzc3Vlcy8xMTc1XG4gICAgICovXG4gICAgZGVzdHJveSAoZHJvcHpvbmUpIHtcbiAgICAgICAgZHJvcHpvbmUub2ZmKCk7XG4gICAgICAgIHJldHVybiBkcm9wem9uZS5kZXN0cm95KClcbiAgICB9XG59XG5cbkRyb3B6b25lSlMuZGVmYXVsdFByb3BzID0ge1xuICAgIGRqc0NvbmZpZzoge30sXG4gICAgY29uZmlnOiB7fSxcbiAgICBldmVudEhhbmRsZXJzOiB7fSxcbiAgICBkYXRhOiB7fSxcbn07XG5cbkRyb3B6b25lSlMucHJvcFR5cGVzID0ge1xuICAgIGlkOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWRcbn07XG5cbmV4cG9ydCBkZWZhdWx0IERyb3B6b25lSlM7IiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0J1xuXG5leHBvcnQgY29uc3QgSWNvbiA9IChwcm9wcykgPT4ge1xuICAgIHJldHVybiAoPGRpdiBkYXRhLWZpbGV0eXBlPXtwcm9wcy5maWxldHlwZX0gY2xhc3NOYW1lPSdmaWxlcGlja2VyLWZpbGUtaWNvbicgLz4pXG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxOCBPcGVuU3RhY2sgRm91bmRhdGlvblxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICoqL1xuXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgRHJvcHpvbmVKUyBmcm9tICcuL2Ryb3B6b25lJ1xuaW1wb3J0ICcuL2luZGV4Lmxlc3MnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBVcGxvYWRJbnB1dFYyIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcblxuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgICAgIHN1cGVyKHByb3BzKTtcblxuICAgIH1cblxuICAgIHJlbmRlcigpIHtcbiAgICAgICAgbGV0IHt2YWx1ZSwgb25SZW1vdmUsIGVycm9yLCBtZWRpYVR5cGUsIHBvc3RVcmwsIG1heEZpbGVzID0gMSwgdGltZU91dCwgb25VcGxvYWRDb21wbGV0ZSwgZGpzQ29uZmlnLCBpZCB9ID0gdGhpcy5wcm9wcztcbiAgICAgICAgbGV0IGhhc19lcnJvciA9ICggdGhpcy5wcm9wcy5oYXNPd25Qcm9wZXJ0eSgnZXJyb3InKSAmJiBlcnJvciAhPT0gJycgKTtcbiAgICAgICAgY29uc3QgYWxsb3dlZEV4dCA9IG1lZGlhVHlwZSAmJiBtZWRpYVR5cGUudHlwZSA/IG1lZGlhVHlwZS50eXBlLmFsbG93ZWRfZXh0ZW5zaW9ucy5tYXAoKGV4dCkgPT4gYC4ke2V4dC50b0xvd2VyQ2FzZSgpfWApLmpvaW4oXCIsXCIpIDogJyc7XG4gICAgICAgIGNvbnN0IG1heFNpemUgPSBtZWRpYVR5cGUgPyBtZWRpYVR5cGUubWF4X3NpemUgLyAxMDI0IDogMTAwO1xuICAgICAgICBjb25zdCBjYW5VcGxvYWQgPSB2YWx1ZS5sZW5ndGggPCBtYXhGaWxlcztcblxuICAgICAgICBjb25zdCBkanNDb25maWdTZXQgPSB7XG4gICAgICAgICAgICBwYXJhbU5hbWU6IFwiZmlsZVwiLCAvLyBUaGUgbmFtZSB0aGF0IHdpbGwgYmUgdXNlZCB0byB0cmFuc2ZlciB0aGUgZmlsZSxcbiAgICAgICAgICAgIG1heEZpbGVzaXplOiBtYXhTaXplLCAvLyBNQixcbiAgICAgICAgICAgIHRpbWVvdXQ6IHRpbWVPdXQgfHwgKDEwMDAgKiA2MCAqIDEwKSxcbiAgICAgICAgICAgIGNodW5raW5nOiB0cnVlLFxuICAgICAgICAgICAgcmV0cnlDaHVua3M6IHRydWUsXG4gICAgICAgICAgICBwYXJhbGxlbENodW5rVXBsb2FkczogZmFsc2UsXG4gICAgICAgICAgICBhZGRSZW1vdmVMaW5rczogdHJ1ZSxcbiAgICAgICAgICAgIG1heEZpbGVzOiBtYXhGaWxlcyxcbiAgICAgICAgICAgIGFjY2VwdGVkRmlsZXM6IGFsbG93ZWRFeHQsXG4gICAgICAgICAgICBkcm9wem9uZVNlbGVjdG9yOiBgbWVkaWFfdXBsb2FkXyR7bWVkaWFUeXBlLmlkfWAsXG4gICAgICAgICAgICAuLi5kanNDb25maWdcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgY29tcG9uZW50Q29uZmlnID0ge1xuICAgICAgICAgICAgc2hvd0ZpbGV0eXBlSWNvbjogZmFsc2UsXG4gICAgICAgICAgICBwb3N0VXJsOiBwb3N0VXJsXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IGRhdGEgPSB7XG4gICAgICAgICAgICBtZWRpYV90eXBlOiBtZWRpYVR5cGUsXG4gICAgICAgICAgICBtZWRpYV91cGxvYWQ6IHZhbHVlLFxuICAgICAgICB9O1xuXG4gICAgICAgIGxldCBldmVudEhhbmRsZXJzID0ge307XG4gICAgICAgIGlmIChvblJlbW92ZSkge1xuICAgICAgICAgICAgZXZlbnRIYW5kbGVycyA9IHtyZW1vdmVkZmlsZTogb25SZW1vdmV9O1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwicm93XCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJjb2wtbWQtNlwiICBzdHlsZT17e2hlaWdodDogMTgwfX0+XG4gICAgICAgICAgICAgICAgICAgIHtjYW5VcGxvYWQgPyAoXG4gICAgICAgICAgICAgICAgICAgICAgICA8RHJvcHpvbmVKU1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkPXtpZH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkanNDb25maWc9e2Rqc0NvbmZpZ1NldH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWc9e2NvbXBvbmVudENvbmZpZ31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudEhhbmRsZXJzPXtldmVudEhhbmRsZXJzfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE9e2RhdGF9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBsb2FkQ291bnQ9e3ZhbHVlLmxlbmd0aH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvblVwbG9hZENvbXBsZXRlPXtvblVwbG9hZENvbXBsZXRlfVxuICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmlsZXBpY2tlciBkaXNhYmxlZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1heCBudW1iZXIgb2YgZmlsZXMgdXBsb2FkZWQgZm9yIHRoaXMgdHlwZSAtIFJlbW92ZSB1cGxvYWRlZCBmaWxlIHRvIGFkZCBuZXcgZmlsZS5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICApfVxuXG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJjb2wtbWQtNlwiPlxuICAgICAgICAgICAgICAgICAgICB7aGFzX2Vycm9yICYmXG4gICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cImVycm9yLWxhYmVsXCI+e2Vycm9yfTwvcD5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB7dmFsdWUubGVuZ3RoID4gMCAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWw+VXBsb2FkZWQ8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt2YWx1ZS5tYXAoKHYsaSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBrZXk9e2B1cGxvYWRlZC0ke2l9YH0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj17di5wcml2YXRlX3VybCB8fCB2LnB1YmxpY191cmx9IHRhcmdldD1cIl9ibGFua1wiPnt2LmZpbGVuYW1lfTwvYT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7b25SZW1vdmUgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+IC0gPGEgb25DbGljaz17ZXYgPT4gb25SZW1vdmUodil9PlJlbW92ZTwvYT48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKTtcbiAgICB9XG59XG4iLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW4iLCJtb2R1bGUuZXhwb3J0cyA9IFwiZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFnQUFBQUlBQ0FZQUFBRDBlTlQ2QUFBQUJITkNTVlFJQ0FnSWZBaGtpQUFBQUFsd1NGbHpBQUFMRXdBQUN4TUJBSnFjR0FBQUVIMUpSRUZVZUp6dDNYL3M3WFZCeC9IWDVmSkx1QWhNS3hDSFA5Z1VSQ09WaUg0b2lXVTF5TEowaEloVXE3aHRydlZySVc1UnRHcHU1Y3BwbE9XdmpGTEtpc0lmdWJubEttM1ZIOVhNWldra1dLTmltWkkvSUg3Yy9qaGdtTkU5NTk3ek9lL1BPYS9IWS92K3hZZlBlVjIrWDg3M2VjK1B6MGtBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFJQjEyak42QUlmbGpDUVhKamszeVJPVFBDN0ppVW4ySmRrN2NCY3dEODlMY3VOQmp2bmVKSzlQY3RmMGM1aVRJMGNQWUdXbko3a2l5WXVTUEdId0ZtRDdYWkRrR1VrdVMzSmc4QlkyU0FCc2p6T1R2Q3pKcGZGOUE5YnIwaVMzSm5ucDZDRnN6aEdqQjNCUSs1SzhJc243azF3ZXYveUJhVnlWWlAvb0VXeU9YeWJ6ZGw2U0c1SThkdkFPb01PcmszdzB5ZHRIRDJGNkhnR1lyeXVUL0VuODhnYzJaMjhXZitsNCt1Z2hURThBek5PMVNYNHB5VkdqaHdCMWpzL2lFWURIRHQ3QnhBVEEvUHg0a210R2p3Q3FmVkdTZHlRNWVmUVFwaU1BNXVYS0pEODJlZ1JBa3JPeXVJYkFNYU9ITUEwQk1CL25KWG5WNkJFQUQvTE1KRytJaThidEpPOENtSWQ5V2J6dzVuQ2U4Lzlva2o5TGNuT1NPNUxjdTRaZHdQenN5ZkovSy8vZ0dtN3YwaVMzSkxsNkRlY0MvcGRYWkhFRnJsVy9QcG5rNTVNOFpmT1RnUjN4bGl4M2YzUGxxSUd3cTg1TWNuZFcvK1YvZlJZdjFBRTRITXNHd0QxSkxocTBFWGJTbTdMYUwvNjdrcng0eUZKZ0Z5MGJBQTg4NnVnYUFiQUdwMmUxdi8zZmxlVHJoaXdGZHRVcUFYQWd5VzFKSGpOa0tXdmxYUUJqWFpIVlhvajUzVW5lTmRFV2dHV2NrdVNkU1U0YVBRUzIyZDlsdGVmOEFkWnQxVWNBSHZoNlQ1S2pOejhYdHQ4WldlMTVOeS80QTZad3FBRndJTWx2eERVQ3RwYW5BTWE1Y0lWalg1dmtYNmNhQW5DSUxrM3kwNk5Id0xaNVRaYXZiTy96QjZaeU9JOEFQUERsR2dHd2d2ZGt1Zit4YmhtMEQraXdqZ0J3allBdDVDbUFjUjYzNUhGL1B1a0tnTU8zTjR2TG1idEd3QllSQU9PY3VPUnhOMCs2QW1BOWprL3l0cmhHd05ZUUFPUHNXL0s0T3laZEFiQStyaEd3UlFUQU9IdVhQTTZuK2dIYjVLd2tOOFkxQW1aUEFBQ3diaGNrZVVOY0kyRFdCQUFBVTNoaGtwOGFQWUtISmdBQW1NclZXWHlHQ1RNa0FBQ1kwblZKdm1IMENENmZBQUJnU2tjbStjMGtUeDA5aE04bEFBQ1kycjRrYjA5eSt1Z2gvQThCQU1BbW5KcmtIVm4rSW1oTVRBQUFzQ2xuSi9tZEpFZU5Ib0lBQUdDekxrenl1dEVqRUFBQWJON2xTWDVpOUloMkFnQ0FFWDQweVhlT0h0Rk1BQUF3eW11U1BHZjBpRllDQUlCUmprenkxaVRuakI3U1NBQUFNTklKV1Z3ajROR2poN1FSQUFDTWRsb1dFZkR3MFVPYUNBQUE1dUNMczNnNjRNalJRMW9JQUFEbTRtdVQvUExvRVMwRUFBQno4aDFKcmhrOW9vRUFBR0J1cmszeTR0RWpkcDBBQUdDT1hwdkZaWU9aaUFBQVlJNk95dUtEZzg0ZVBXUlhDUUFBNXVyRUxENUMrTlRSUTNhUkFBQmd6azVQOHJZa3g0OGVzbXNFQUFCejk3UWtOeVRaTzNySUxoRUFBR3lEaTVLOGV2U0lYU0lBQU5nVys1UDh5T2dSdTBJQUFMQk5YcDdra3RFamRvRUFBR0NiN0VueXEwbSthdlNRYlNjQUFOZzJ4eVM1TWNrVFJnL1paZ0lBZ0czMGlDeXVFZkFGbzRkc0t3RUF3TFk2SThsTlNSNDJlc2cyRWdBQWJMTXZTM0o5L0Q1Ym1mOWdBR3k3YjBueXM2TkhiQnNCQU1BdStJRWtMeGs5WXBzSUFBQjJ4U3VUUEhmMGlHMGhBQURZRlVja2VYT1NjMGNQMlFZQ0FJQmRjbHdXN3d4NHpPZ2hjeWNBQU5nMXAyUnhqWUNUUmcrWk13RUF3QzU2VXBMZlRuTFU2Q0Z6SlFBQTJGVVhKdm1WMFNQbVNnQUFzTXV1U0hMTjZCRnpKQUFBMkhYWEpublI2QkZ6SXdBQWFQQzZKQmVNSGpFbkFnQ0FCa2NuK2Qwa1R4dzlaQzcyakI2d0l3Nk1IZ0FsYmtqeWJhTkg3SmkzSkxsazlJZ051am5KK1VsdUh6MWtOSThBQU5EazhVbCtQOG14bzRlTUpnQUFhSE4ra2plbC9GRndBUUJBb3hjaytjblJJMFlTQUFDMGVsbVNieDg5WXBRalJ3OEFZS2ozalI0dzJMT3llRTNBeDBZUDJiVHE1ei9XeUxzQVlETzhDd0RXeEZNQUFGQklBQUJBSVFFQUFJVUVBQUFVRWdBQVVNamJBTGZYZlVsdUd6M2lJZXhMY3VKQmp2bFVrbyt2Y003VERuM09WcG56OS9YQmprbnl5TkVqZ0VNbkFMYlg3VWtlUFhyRVEvamhKRDl6a0dPdVQ3Si95Zk1kbStReks5eis5Mlg1RC9wNGZwSnZYZUhjVS91UHpQZjcrbUJmbitTZG8wY0FoMDRBc0l0dVN2S1JKWTg5TS9NS0FHQTlqa2h5M0pMSDNwbmtuZ20zekpMWEFBQ3dpNTZVNUQrWC9IcitvSTFEQ1FBQUtDUUFBS0NRQUFDQVFnSUFBQW9KQUFBb0pBQUFvSkRyQVBUWW4rVEpHN3F0TDluUTdiRFo3K3VEblQ3Z05vRTFFZ0E5TGs1eTBlZ1JySjN2SzNCSVBBVUFBSVVFQUFDNzZPN1JBK1pPQUFDd2krNGRQV0R1QkFBQUZCSUFBRkJJQUFCQUlRRUFBSVVFQUFBVUVnQUFVRWdBQUVBaGx3S0c3ZmFKSlArK3dkczdOc254Rzd3OVlDSUNvTWNIa3B3MDBibVBTL0xVaWM3Ti8rK3lEZC9lL2lTL3VPSGJCQ1lnQUhwY05lRzVuNXprL1JPZUg0QTE4eG9BQUNna0FBQ2drQUFBZ0VJQ0FBQUtDUUFBS0NRQUFLQ1FBQUNBUXE0REFOdHRmeGJYWWRpVXN6ZDRXOENFQkVDUGE1S2NOOUc1VDVqb3ZCemN4VWt1R2owQzJENENvTWQ1OFlzQ2dQdDVEUUFBRkJJQUFGQklBQUJBSVFFQUFJVUVBQUFVRWdBQVVFZ0FBRUFoQVFBQWhRUUFBQlFTQUFCUVNBQUFRQ0VCQUFDRmZCZ1E3VzVOOHQ0TjN0NitKT2VzOFh3ZlNITFNHcyszaW5YL1dZQU5FZ0MwZS8zOVg1dHlicEsvV09QNXJscmp1VmExN2o4THNFR2VBZ0NBUWdJQUFBb0pBQUFvSkFBQW9KQUFBSUJDQWdBQUNna0FBQ2drQUFDZ2tBc0JiYStUazd4N2hlUG5kc1cyaTdQOC9sVkQ5Zm9rZDY3NDcyektDUWY1NXcvUGF0L1hrUTcyWndGbVRBQnNyNk9UUEh2MGlNTncydjFmVS9qS2ljNjdDVWRsdTcrdndKYndGQUFBRkJJQUFGQklBQUJBSVFFQUFJVUVBQUFVRWdBQVVFZ0FBRUFoQVFBQWhRUUFBQlFTQUFCUVNBQUFRQ0dmQmJBZWV3N2gzem13NUhGWEozbjVJWndmQUI2U1J3QUFvSkFBQUlCQ0FnQUFDZ2tBQUNna0FBQ2drQUFBZ0VJQ0FBQUtDUUFBS0NRQUFLQ1FBQUNBUWdJQUFBb0pBQUFvSkFBQW9KQUFBSUJDQWdBQUNna0FBQ2drQUFDZ2tBQUFnRUlDQUFBS0NRQUFLQ1FBQUtDUUFBQ0FRZ0lBQUFvSkFBQW9KQUFBb0pBQUFJQkNBZ0FBQ2drQUFDZ2tBQUNna0FBQWdFSUNBQUFLQ1FBQUtDUUFBS0NRQUFDQVFnSUFBQW9KQUFBb0pBQUFvSkFBQUlCQ0FnQUFDZ2tBQUNna0FBQ2drQUFBZ0VJQ0FBQUtDUUFBS0NRQUFLQ1FBQUNBUWdJQUFBb0pBQUFvSkFBQW9KQUFBSUJDQWdBQUNna0FBQ2drQUFDZ2tBQUFnRUlDQUFBS0NRQUFLQ1FBQUtDUUFBQ0FRZ0lBQUFvSkFBQW9KQUFBb0pBQUFJQkNBZ0FBQ2drQUFDZ2tBQUNna0FBQWdFSUNBQUFLQ1FBQUtDUUFBS0NRQUFDQVFnSUFBQW9KQUFBb0pBQUFvSkFBQUlCQ0FnQUFDZ2tBQUNna0FBQ2drQUFBZ0VJQ0FBQUtDUUFBS0NRQUFLQ1FBQUNBUWdJQUFBb0pBQUFvSkFBQW9KQUFBSUJDQWdBQUNna0FBQ2drQUFDZ2tBQUFnRUlDQUFBS0NRQUFLQ1FBQUtDUUFBQ0FRZ0lBQUFvSkFBQW9KQUFBb0pBQUFJQkNBZ0FBQ2drQUFDZ2tBQUNna0FBQWdFSUNBQUFLQ1FBQUtDUUFBS0NRQUFDQVFnSUFBQW9KQUFBb0pBQUFvSkFBQUlCQ0FnQUFDZ2tBQUNna0FBQ2drQUFBZ0VJQ0FBQUtDUUFBS0NRQUFLQ1FBQUNBUWdJQUFBb0pBQUFvSkFBQW9KQUFBSUJDQWdBQUNna0FBQ2drQUFDZ2tBQUFnRUlDQUFBS0NRQUFLQ1FBQUtDUUFBQ0FRZ0lBQUFvSkFBQW9KQUFBb0pBQUFJQkNBZ0FBQ2drQUFDZ2tBQUNna0FBQWdFSUNBQUFLQ1FBQUtDUUFBS0NRQUFDQVFnSUFBQW9KQUFBb0pBQUFvSkFBQUlCQ0FnQUFDZ2tBQUNna0FBQ2drQUFBZ0VJQ0FBQUtDUUFBS0NRQUFLQ1FBQUNBUWdJQUFBb0pBQUFvSkFBQW9KQUFBSUJDQWdBQUNna0FBQ2drQUFDZ2tBQUFnRUlDQUFBS0NRQUFLQ1FBQUtDUUFBQ0FRZ0lBQUFvSkFBQW9KQUFBb0pBQUFJQkNBZ0FBQ2drQUFDZ2tBQUNna0FBQWdFSUNBQUFLQ1FBQUtDUUFBS0NRQUFDQVFnSUFBQW9KQUFBb0pBQUFvSkFBQUlCQ0FnQUFDZ2tBQUNna0FBQ2drQUFBZ0VJQ0FBQUtDUUFBS0NRQUFLQ1FBQUNBUWdJQUFBb0pBQUFvSkFBQW9KQUFBSUJDQWdBQUNna0FBQ2drQUFDZ2tBQUFnRUlDQUFBS0NRQUFLQ1FBQUtDUUFBQ0FRZ0lBQUFvSkFBQW9KQUFBb0pBQUFJQkNBZ0FBQ2drQUFDZ2tBQUNna0FBQWdFSUNBQUFLQ1FBQUtDUUFBS0NRQUFDQVFnSUFBQW9KQUFBb0pBQUFvSkFBQUlCQ0FnQUFDZ2tBQUNna0FBQ2drQUFBZ0VJQ0FBQUtDUUFBS0NRQUFLQ1FBQUNBUWdJQUFBb0pBQUFvSkFBQW9KQUFBSUJDQWdBQUNna0FBQ2drQUFDZ2tBQUFnRUlDQUFBS0NRQUFLQ1FBQUtDUUFBQ0FRZ0lBQUFvSkFBQW9KQUFBb0pBQUFJQkNBZ0FBQ2drQUFDZ2tBQUNna0FBQWdFSUNBQUFLQ1FBQUtDUUFBS0NRQUFDQVFnSUFBQW9KQUFBb0pBQUFvSkFBQUlCQ0FnQUFDZ2tBQUNna0FBQ2drQUFBZ0VJQ0FBQUtDUUFBS0NRQUFLQ1FBQUNBUWdJQUFBb0pBQUFvSkFBQW9KQUFBSUJDQWdBQUNna0FBQ2drQUFDZ2tBQUFnRUlDQUFBS0NRQUFLQ1FBQUtDUUFBQ0FRZ0lBQUFvSkFBQW9KQUFBb0pBQUFJQkNBZ0FBQ2drQUFDZ2tBQUNna0FBQWdFSUNBQUFLQ1FBQUtDUUFBS0NRQUFDQVFnSUFBQW9KQUFBb0pBQUFvSkFBQUlCQ0FnQUFDZ2tBQUNna0FBQ2drQUFBZ0VJQ0FBQUtDUUFBS0NRQUFLQ1FBQUNBUWdJQUFBb0pBQUFvSkFBQW9KQUFBSUJDQWdBQUNna0FBQ2drQUFDZ2tBQUFnRUlDQUFBS0NRQUFLQ1FBQUtDUUFBQ0FRZ0lBQUFvSkFBQW9KQUFBb0pBQUFJQkNBZ0NBZGdkR0R4aEJBSXh6ejVMSEhUWHBDb0RkZE13S3g5NDkyWW9aRXdEamZITEo0MDZaZEFYQWJqcDFoV1B2bUd6RmpBbUFjVzViOHJpblRMb0NZRGV0Y3QvNUw1T3RtREVCTU00L0xIbmNlVW1PbjNJSXdBNTYxcExIM1pmazVpbUh6SlVBR09ldmxqenVtQ1RmTk9VUWdCMXpjcExuTEhuc2g1Tjhlc0l0c3lVQXhubmZDc2QrLzJRckFIYlAvaXovSXNEM1Rqa0UvaS9ISmJremk3ZWZMUFAxZ2pFekFiYktJNU44TE12ZnQxNHlaaWJ0YnN6eVA2UzNKZm5DTVRNQnRzWnZaZm43MWM4a09XSE1UTnA5YzViL1FUMlE1SStTSER0a0tjRDh2VFNyM2FmKytwaVprT3hOOG85WjdRZjJYVW4yalJnTE1HTS9sTlh1U3c4a09YL0lVcmpmbFZuOWgvWnY0dm9BQU1uaUlmdzNadlg3MFhjUDJBcWY0OGdrZjV2VmYzai9LOG5QWmJXclhRSHNpcU9UZkZlU2Y4N3E5NS8zSm5uNjVpZkQ1M3RXVnY4QmZuQUkvRjZTNzBseVRyeWdCZGhOUnlkNWZKTG5KYmt1eWIvbDBPODNmMkhEMjJkcHorZ0JmTmFya3J4a1RlZTZMNHNmY29CZHNYZE41L2xRa3FkbCtjOWoyVmtDWUQ2T1NmTEhTYjUwOUJDQUhmWHBKRitSNUs5SEQ1a0RWd0tjajd1eXVPVHZMYU9IQU95Z2U1TmNGci84UDBzQXpNdHRTYjRteVQrTkhnS3dRKzdMNGdXRE40NGVNaWNDWUg0K25PUVpTVDQ0ZWdqQURyZ3ppOHY5dm5Id2p0a1JBUFAwa1NSZm51U213VHNBdHRtdFNaNlo1SzJqaDh6UnVsNVZ5ZnJkbWVUTlNXNVBja0VXYjRFQllEblhKM2x1a3B0SEQ1a3Jqd0RNMzNWSnprcnlhMWs4andYQVEvdkxKTTlPY25tU2p3L2VNbXZlQnJoZHprenlnMGxlbU9UNHdWc0E1dUpBa2o5TThzb3NuanAxSFpRbENJRHR0Qy9KeFVtK01jbFhKM25VMERVQW0vZXBKSCthNUEreWVJN2ZXNmhYSkFCMnc2T3llSnJnOUNTUFNQS3dlSDBIc0RzT1pIR3RsRTlrY2UzL0R5WDUreXplMnc4QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUxCOS9odDh4bVh4U2dOZStRQUFBQUJKUlU1RXJrSmdnZz09XCIiLCIvKipcbiAqIENvcHlyaWdodCAyMDE3IE9wZW5TdGFjayBGb3VuZGF0aW9uXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiovXG5cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgRHJvcHpvbmUgZnJvbSAncmVhY3QtZHJvcHpvbmUnO1xuaW1wb3J0IFQgZnJvbSAnaTE4bi1yZWFjdC9kaXN0L2kxOG4tcmVhY3QnO1xuaW1wb3J0ICcuL3VwbG9hZC5sZXNzJztcblxuaW1wb3J0IGZpbGVfaWNvbiBmcm9tICcuL2ZpbGUucG5nJztcbmltcG9ydCBwZGZfaWNvbiBmcm9tICcuL3BkZi5wbmcnO1xuaW1wb3J0IG1vdl9pY29uIGZyb20gJy4vbW92LnBuZyc7XG5pbXBvcnQgbXA0X2ljb24gZnJvbSAnLi9tcDQucG5nJztcbmltcG9ydCBqcGdfaWNvbiBmcm9tICcuL2pwZy5wbmcnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBVcGxvYWRJbnB1dCBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgICAgICBzdXBlcihwcm9wcyk7XG5cbiAgICAgICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgICAgICAgIHNob3dfcmVtb3ZlOiBmYWxzZSxcbiAgICAgICAgICAgIGxvZ29fcHJldmlldzoge1xuICAgICAgICAgICAgICAgIHByZXZpZXc6IG51bGwsXG4gICAgICAgICAgICAgICAgbmFtZTogJycsXG4gICAgICAgICAgICB9LFxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5maWxlSGFzUHJldmlldyA9IHRoaXMuZmlsZUhhc1ByZXZpZXcuYmluZCh0aGlzKTtcbiAgICB9XG5cbiAgICBvbkRyb3AoYWNjZXB0ZWRGaWxlcywgZmlsZVJlamVjdGlvbnMsIGV2dCkgeyAgICAgICAgXG4gICAgICAgIGlmKGFjY2VwdGVkRmlsZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgbGV0IGZpbGUgPSBhY2NlcHRlZEZpbGVzWzBdO1xuICAgICAgICAgICAgdGhpcy5wcm9wcy5oYW5kbGVVcGxvYWQoZmlsZSwgdGhpcy5wcm9wcyk7XG4gICAgICAgICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICAgICAgICAgICAgLi4udGhpcy5zdGF0ZSxcbiAgICAgICAgICAgICAgICAgICAgbG9nb19wcmV2aWV3OlxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwcmV2aWV3OiBmaWxlLnByZXZpZXcsXG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBmaWxlLm5hbWVcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgICAgaWYoZmlsZVJlamVjdGlvbnMubGVuZ3RoID4gMCAmJiB0aGlzLnByb3BzLmhhc093blByb3BlcnR5KFwiaGFuZGxlRXJyb3JcIikpXG4gICAgICAgICAgICB0aGlzLnByb3BzLmhhbmRsZUVycm9yKGZpbGVSZWplY3Rpb25zLCB0aGlzLnByb3BzKVxuICAgIH1cblxuICAgIG9uUmVtb3ZlKGV2KXtcbiAgICAgICAgdGhpcy5wcm9wcy5oYW5kbGVSZW1vdmUoZXYsIHRoaXMucHJvcHMpO1xuICAgIH1cblxuICAgIHNob3dWZWlsKCkge1xuICAgICAgICB0aGlzLnNldFN0YXRlKHsuLi50aGlzLnN0YXRlLCBzaG93X3JlbW92ZTp0cnVlfSk7XG4gICAgfVxuXG4gICAgaGlkZVZlaWwoKSB7XG4gICAgICAgIHRoaXMuc2V0U3RhdGUoey4uLnRoaXMuc3RhdGUsIHNob3dfcmVtb3ZlOmZhbHNlfSk7XG4gICAgfVxuXG4gICAgZmlsZUhhc1ByZXZpZXcoZmlsZU5hbWUpe1xuICAgICAgICBpZighZmlsZU5hbWUpIHJldHVybiBmYWxzZTtcbiAgICAgICAgbGV0IHBhdHRlcm4gPSAvKC4qKVxcLihnaWZ8Ym1wfHN2Z3xqcGU/Z3xwbmcpL2dcbiAgICAgICAgcmV0dXJuIHBhdHRlcm4udGVzdChmaWxlTmFtZSk7XG4gICAgfVxuXG5cbiAgICByZW5kZXIoKSB7XG4gICAgICAgIGxldCB7dmFsdWUsIGZpbGUsIGhhbmRsZVJlbW92ZSwgaGFuZGxlVXBsb2FkLCBoYW5kbGVFcnJvciwgZmlsZU5hbWUsIGVycm9yLCAuLi5yZXN0fSA9IHRoaXMucHJvcHM7XG4gICAgICAgIGxldCB7bG9nb19wcmV2aWV3LCBzaG93X3JlbW92ZX0gPSB0aGlzLnN0YXRlO1xuICAgICAgICBsZXQgaGFzX2Vycm9yID0gKCB0aGlzLnByb3BzLmhhc093blByb3BlcnR5KCdlcnJvcicpICYmIGVycm9yICE9PSAnJyApO1xuICAgICAgICAvLyBkZWZhdWx0IHZhbHVlICggcmVzb3VyY2UgKVxuICAgICAgICBsZXQgaWNvbiA9IGZpbGVfaWNvbjtcblxuICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICAgIGlmKCFmaWxlTmFtZSkgZmlsZU5hbWUgPSB2YWx1ZS5zbGljZSh2YWx1ZS5sYXN0SW5kZXhPZihcIi9cIikgKyAxKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChmaWxlICYmIGZpbGUuaGFzT3duUHJvcGVydHkoXCJuYW1lXCIpICYmIGZpbGUubmFtZSkge1xuICAgICAgICAgICAgZmlsZU5hbWUgPSBmaWxlLm5hbWU7XG4gICAgICAgIH1cbiAgICAgICAgIC8vIGZpbGVzIHdpdGhvdXQgcHJldmlld1xuICAgICAgICBpY29uID0gIChmaWxlTmFtZSAmJiBmaWxlTmFtZS5lbmRzV2l0aCgncGRmJykgPyBwZGZfaWNvbjogaWNvbik7XG4gICAgICAgIGljb24gPSAgKGZpbGVOYW1lICYmIGZpbGVOYW1lLmVuZHNXaXRoKCdtb3YnKSA/IG1vdl9pY29uOiBpY29uKTtcbiAgICAgICAgaWNvbiA9ICAoZmlsZU5hbWUgJiYgZmlsZU5hbWUuZW5kc1dpdGgoJ21wNCcpID8gbXA0X2ljb246IGljb24pO1xuXG4gICAgICAgIC8vIGlmIGZpbGUgaGFzIHByZXZpZXcgKCBhbHJlYWR5IG9uIGRhdGEgbW9kZWwpXG4gICAgICAgIGlmKHRoaXMuZmlsZUhhc1ByZXZpZXcoZmlsZU5hbWUpICYmIHZhbHVlKXtcbiAgICAgICAgICAgIGljb24gPSB2YWx1ZVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGxvZ29fcHJldmlldy5wcmV2aWV3ICYmIGxvZ29fcHJldmlldy5uYW1lKSB7XG4gICAgICAgICAgICBpY29uID0gbG9nb19wcmV2aWV3LnByZXZpZXc7XG4gICAgICAgICAgICBmaWxlTmFtZSA9IGxvZ29fcHJldmlldy5uYW1lO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmlsZS11cGxvYWRcIj5cbiAgICAgICAgICAgICAgICA8RHJvcHpvbmVcbiAgICAgICAgICAgICAgICAgICAgb25Ecm9wPXt0aGlzLm9uRHJvcC5iaW5kKHRoaXMpfVxuICAgICAgICAgICAgICAgICAgICB7Li4ucmVzdH1cbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPGRpdj57VC50cmFuc2xhdGUoXCJnZW5lcmFsLmRyb3BfZmlsZXNcIil9PC9kaXY+XG4gICAgICAgICAgICAgICAgPC9Ecm9wem9uZT5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInNlbGVjdGVkLWZpbGVzLWJveCBjb2wtbWQtNlwiPlxuICAgICAgICAgICAgICAgICAgICA8cD5TZWxlY3RlZCBGaWxlczwvcD5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzZWxlY3RlZC1maWxlc1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAge3ZhbHVlICYmXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZpbGUtYm94XCIgb25Nb3VzZUVudGVyPXt0aGlzLnNob3dWZWlsLmJpbmQodGhpcyl9IG9uTW91c2VMZWF2ZT17dGhpcy5oaWRlVmVpbC5iaW5kKHRoaXMpfT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz17aWNvbn0gLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPXt2YWx1ZX0gdGFyZ2V0PVwiX2JsYW5rXCI+e2ZpbGVOYW1lfTwvYT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7c2hvd19yZW1vdmUgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInJlbW92ZVwiIG9uQ2xpY2s9e3RoaXMub25SZW1vdmUuYmluZCh0aGlzKX0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzTmFtZT1cImZhIGZhLXRpbWVzXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAge2hhc19lcnJvciAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwiZXJyb3ItbGFiZWxcIj57ZXJyb3J9PC9wPlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICApXG4gICAgfVxufVxuIiwibW9kdWxlLmV4cG9ydHMgPSBcImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBZ0FBQUFJQUNBTUFBQUREcGlUSUFBQUFBM05DU1ZRSUNBamI0VS9nQUFBQUNYQklXWE1BQUF6ZUFBQU0zZ0VUVUJCNkFBQUFHWFJGV0hSVGIyWjBkMkZ5WlFCM2QzY3VhVzVyYzJOaGNHVXViM0pubSs0OEdnQUFBdnBRVEZSRi8vLy9BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBV3NBYzl3QUFBUDEwVWs1VEFBRUNBd1FGQmdjSUNRb0xEQTBPRHhBUkVoTVVGUllYR0JrYUd4d2RIaDhnSVNJakpDVW1KeWdwS2lzc0xTNHZNREV5TXpRMU5qYzRPVG83UEQwK1AwQkJRa05FUlVaSFNFbEtTMHhOVGs5UVVWSlRWRlZXVjFoWldsdGNYVjVmWUdGaVkyUmxabWRvYVdwcmJHMXViM0J4Y25OMGRYWjNlSGw2ZTN4OWZuK0FnWUtEaElXR2g0aUppb3VNalk2UGtKR1NrNVNWbHBlWW1acWJuSjJlbjZDaG9xT2twYWFvcWFxcnJLMnVzTEd5czdTMXRyZTR1YnE3dkwyK3Y4REJ3c1BFeGNiSHlNbkt5OHpOenMvUTBkTFQxTlhXMTlqWjJ0dmMzZDdmNE9IaTQrVGw1dWZvNmVycjdPM3U3L0R4OHZQMDlmYjMrUG42Ky96OS9vOWFISmNBQUJVN1NVUkJWSGphN2QxNWZFMW5HZ2Z3YzdPSmtJUklDYkZFYTZKQ2hkcW14cjYyMmdsdFVFUXNnNkYwVVlUV3RKaFl5cFNtUmF2RGxJeWxvWWJhSXZabFdscGIwZ2lwcFZLdDZKQ0lXRUsyKzN3K1E5ZG83cjNudmZjc2VkKzh2OS9mM25QZTh6eGZOL2UrWjFNVUErTGJmK20yNUN0V2tpNDVKK0k3S3JMSFBYcnJYWkk0cVozazduOUVHa21lb3JFU3R6L2tJQ0UwWDlyK2Q3eUs3dC9QWkVuN1A3b0F2Zjh4MXVlbDdQOGdkUDZYM0cwdllmOWI1S0h4ditiYW85TDF2L3BGdEwxRUx0U1FEVUE4bXY1QWpsU1NxLy9oeGVqNWc5bnNMaFdBSkhUODkxa2lVLzlibzkrbE0wVWlBSFBSYmh2TEFRUGtBWEFhN2JhMUhOQkJsdjZIb3RtMmx3TWFTUUlnQ3IyMnN4d1FKQWVBR0xUYVRvN0tzUndRaDA3Ynl4WXBsZ01TMEdpNytWQUdBSWsyRG54MGtCeDVURTNBYXhJQTJHN2p1R1g1RVJ5a3Vod3dFQUNrQmtENUhRRkFhZ0NVMHdnQXBBWkFHVUVBSURVQU9sWUpBS1FHUUZ2ZEFVQnFBUFJQQUpBYkFMME9BSElEc0E0Q0FLa0JVSDRuQUpBYUFPV0VBWURVQUNpakpnQklEWUNPVlFZQXFRSFFOZzhBa0JvQUxRVUF1UUhRVkFDUUc0QTFDZ0NrQmtENW5RRkFhZ0NVMHhnQXBBWkEzOVlFQUtrQjBQSEtBQ0ExQUVyMEFBQ3BBZEF5QUpBYkFQME5BT1FHUUlNQlFHNEErVjBBUUdvQWRMMHhBRWdOZ0M3V0FnQ3BBZEFKWHdDUUdnQnQ5d0FBcVFIUXZ3QkFiZ0QwQmdESURZQ2lBVUJ1QUFWZEFVQnFBSFM5Q1FCSURhQjhMQWNBZ0lZayt3S0ExQUFveVFNQXBBWkFId0dBM0FCb0dnRElEWUNHQUlEY0FFUmZEZ0FBcmNsOURBQ2tCa0RmQlFPQTFBREVYZzRBQUIyeXd3TUFwQVpBeXdGQWJnQTBIUURrQmtCREFVQnVBQVhkQUVCcUFKVGJGQUNrQmlEcWNnQUE2SllVUHdDUUdnRHQ4QVFBcVFIUUNnQ1FHd0ROQUFDNUFkQndBSkFiUUVGM0FKQWFnSGpMQVFDZ2M3NnZEUUJTQTZDdi9BQkFhZ0MwMHhNQXBBWkE4UUFnTndENk93RElEWUQrQWdCeUF5anNBUUJTQTZBYjRRQWdOUUM2VkFjQXBBWkFxZjRBSURVQTJ1VUpBRklEb0g4RGdOd0FLQllBNUFaQUl3QkFiZ0NGUFFGQWFnQjBveGtBU0ExQWdPVUFBREEyM0M4SEFJREIyZTBKQUZJRG9KVUFJRGNBbWdrQWNnT2drUUFnTjREQ0p3RkFhZ0Iwc3prQVNBMkFNdXNDZ05RQTZLUS9BRWdOZ1BaNEFZRFVBR2dWQU1nTmdHWUJnTndBYUJRQXlBMmc4Q2tBa0JvQW44c0JBR0JpZUZ3T0FBQXprMVlGQUtRR1FIdTlBRUJxQUxUYUFnQlNBNkNYQUVCdUFEbUJBQ0ExQVBvUUFPUUdVQndBQUZJRG9JNEFJRGVBY1FEQVNXcVVEWUFQQUlDVFdITExCTUJHQU9BbGU4b0V3SFlBNENWekFVQnVBQkVBSURjQXkxNEFrQnFBRW5JVEFLUUdvSXdDQUxrQktIMnZBb0RVQUpUcUd3QkFhZ0NLRWpwdy90NTBnM0xKUm5rVEFVQ2VETUFuQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBZ05RQUFudVBuYlVpS1RXalJPN1ltT0dsZE1UQVY4YmNLVm4vMUtRVnM4YjJEalNqKzMrWWRLQ1lFQzVUdEc5OGlMSGRyekR4Rk1yTWQwNk04elNzL1c3UjM2TEEvT2Y4UUlzeC9lOXhBc1VWSThlNkc5QityMlVvckRoWjVxVjMveDg2Z0txS2xBTVA2ZHYvcGhtb3FWakphS3Jybi85YnFLaG91ZFZEdi82SDVhS2U0aVUzVEsvK0I1eEROVVhNdVFCOSt1K3hHN1VVTTdzOWRBR3dFSlVVTll2MDZIOHJLd29wYXF5dGRBQ3dGM1VVTjN1MTkvOXBWRkhrUEszNUJGQXFpaWh5VXQwMEFoaUNHb3FkSVJvQjdFQUp4YzRPYmYzM0swQUp4VTZCbnlZQXo2T0NvdWQ1VFFEV29JQ2laNDJtVmVBY0ZGRDA1R2haRDI2TStwbVZPem1aMytVVUdySGx4aG9BZEJleGxNVzUzNTA2dk9NL0t4Yk9mMnZtdEttVFgzMXB6TWloVWYyZjYvZVg4Vy8rWThucVRYdVBmcDE1azR2bDdadW50aTk3YzFqWHh4b0VCMVQ4K1RwTzc4RDZqejNSNDdraDQ2Yk1pdi9zaWo2NzBYS0I0RENEU3pCbnZFb21NWGY5MHFHMWI3L2NwM1hEV3BWWnJvbDFxL0xIdjc1LzhIcFp0ZjdHZ1hlSE5LdWlPa3YvbGdPbnJUeVVwWEZud3pRQW1HcHdJUjVWbTRDMzJoWnlVN2N1bVRxNFE0aHJGOE9IUkx6eHlkZm0zdWR5YStlOEFhSE9YYmRkOVltWXJSb3V5Wm1xQWNCaXJnRzgzYXVKdnc1bnUzeGFUVGhRWkU3M1Q3L1RyWUpyazNSdk5XbUxpd2dXYTZqTkJxNEJkTkx4ZHNmaEcvTU1QdGJibTEvUWVOK1dlOHRKaDF6WThRYWRiL290bHdEdXhYZHNtb0ZmVEpQNlZkQmxsbUVMblA1cXVCMEFXTlBwRTBOK2gxSEc5THI2VGRJemNsc1JBQmdENE42M3d0VzYvMERNWDl2RFRlZFo5Z1VBb3dBb1N2T2R1aDVoWGx5US9uT2NEUURHQVZDVW51ZjFhLzg3UVViTThEQUFHQWxBOFYydTAvZitCVFVNbVo4L3ZnTVlDMEJSSXJPMEgxdlJlOVVObWwwRWZnVVlEVUNwZFZUcm9SMXJZZGprM2dNQXd3RW9sWk8wTGZpKzZtN2MzRTRDZ1BFQUZNOVZHbzVyYzEwRFp4YUVoU0F6QUNpV0QxdzlxcXkraGs1c0VBQ1lBa0J4VysvaVgvOTZ4czdySXdBd0I0RGk3ZEpqY2VLOURaNVdCZ0NZQkVDcDR2enBvWUt4UmsvcUVad01NZzJBMHNqWmM4U1piUTJmMDE4QndEd0F5b3ZPSFU5S1RlT250QllBVEFTZ0pEcHpPRWNEakorUUJkY0RtQW9nS0p2OWFBNzVtekNoY0FJQU13RW9yekFmekFGZk0rWXpBUURNQmVERmVuSjRkeVV6cHFOc0FRRFhBTGo1QlFlNmRKUFVBTFpEMmVsdFN2ODliZ0tBTXdDcXRodXphTXYrNDJjdi8vU28wOXlNNDdzV1J2M0J1VzlkVENjRzAvMU42Yi9TbGdDQUhVRG9KZHNEczdlL1hKVzlDSkVNQjVJVHFuM2xPY0NmNFJQcVRRQndBa0F6KzJQdnJHclAvS21icVg3eHg1T3VWcmptczJQZmlGdTU5ZENaN1BzM0tPVm5YengxWk4rV3Rjdm5ER3RyK3dWQSt3QkFId0Qza3NxNmFoZXJlaHdUWFZ2VUhiNzhySU9OWGp1ODhvMytqUjRjNHBNUEFMb0JvT0lGRlptcVVFZnRHcngvTzEvWnBpK3V6V1FxVWVhcW9iVi9HOWFEQUVBL0FFUmZ0OVRqcDljeFoyLzY4UnFTN0ZTWjBoZjNxZnpUeUhrQW9Dc0F5bVVTTU1yaE5nckRuU3Rxd091WG5LL1VyZmlPOTI4cFBnb0ErZ0tnckNZTVpRaDJ1SW5aVHBXMHdmdTNYU3pXK1duMXFoWURnTTRBNkhJRGhqcWtPUHA4ZHVZUFFJdU5XcDVHWUhYcDlsVUFVRm5DWjZqRFd3NmEwczZKbi9xdkY1TDVBUUNWOUZPdlF4ZjdvOTlucjJhdHNubnpCZ0NvNUlMNlozaWczY0VYMlU4QlBuT1ZBSUJIQUJTalhnaTdWMkVNWlMxbGhUSjc4UW9BcUNWRnZSRDc3UXc5eTNvRFVLTVVBZ0JlQVpENmhmeEw3SXhrZlJoN3l6SjdJaDBBTUdTY3E5Y0ZuV0g4QUdoK2pRQ0FZd0JKcW9XSXNqMHdtbkhoUDRzQWdHY0FWOVcvd2RzK2xjRDJBUkQ4UHdJQXJnRllWYS9FYUc5ejNHQ21JbnArVGdEQU53QlN2WitqcWExUlY5aWVUMXZXTDk0RUFQV29ucytyWjJ0VUhGTU55L3lsS3dDZ0h0VTNyVDlzYTFRemxoSUdaZ0VBL3dDNnFHM3BqellHSlRPVmNEa0JBUDhBd3RTMlpPdkJYT05aS3RqT0NnQUNBS2ltdHFXUnBjY1VzandGenAyREY2OENnR29LVkYvZ1lPUE5HWit5RkhBZ0FZQUFBTDVYTGNTN3BRZjFaeWxnTWdDSUFHQy9haUUrTHIxNEZNaFF2NmNJQUVRQU1FbTFFTHRLamZtS3BYNzdBRUFJQU9yWGhYNVZhc3hDaHZMeDhkcEZBRkJMcW5vaExwY2E5Q3hEK1dZQ2dCQUFZdFhQNTVTNk9jeGFqYUY4WndCQUJBRDVqNmpXb1pOTHk0Q1BFd0NJQUdDZWVoMUszeGZ3TGtQMTVnR0FDQUF5R1M3c1BsNXFWS1RpeWlnQTRCQUF3NFhkTlVvdjZEZFNIK1ZiQkFBQ0FFaGtlSS92NEZLamlyelVSL0h5Nm5VQWNKUURQZ3hsS1AzdWlQTU1vMllBQVA4QXZtUzVzOHRTK3FMT2JRekRkZ0VBOXdDU21SNFdadVBuSE11UEFNWnJnYS9QY0MyckFVQXJBT3RDSDZZcXZGNTZLTU5iQVNveDFpRER4ZDQ4Q1FBYUFaeGxmVkNjalhPNlhkVkhOUUVBcmdIY251L0RXSVN1TmtiWFVSLzJad0RnR01ESkY5a2Y3V3JybFFFTXR3UzlEQUM4QXJpMDBvbkh1dGo4S005akdMY0FBTW9jUU5DSHV5NDgrRkNtdk04VzlLdmpYQTFzZmR2K0g4TzRwUUJRNWdEdXh5dTBWZnR1ejBSR0RlclZ0bEhOaXM2WG9JMnQ2N3BaMW9IV0FBQVhBRFRHOG9XdFBUTThVMFRaQ0FEbEFjQXdtM3YrakdIa1RnQW9Cd0FDZm5DNXBwOERRRGtBc01uMm50Y3pERDNDV0lNTEFNQXZnRmZ0N0RtZVlXd1NQZ0dFQjlDNndNNmVsN240OHhFQWhBSVEvSzI5UGE5aUdQMHVBQWdPSVBDVTNUMnpmQWY0R3dDSURjRFB3Y3NadGpLTUh3MEFRZ1B3M2U5Z3ozc1lOaEFKQUNJRHFIL1MwWjRQTVd5aEF3QUlES0NENDBlN24yRFlSQmdBaUF0Z1pJSGplYWN6YktNNkFJZ0tvTklIYXZPK3pMQVZkeXNBaUFtZ1o0YnF2SzBzTDRyNkhnQkVCRkJ0SmN2RVdWNUF2Z29BeEFQZ051UUswOFM3TVd4cktBQ0lCc0E5T3AxeDRpTlpWcElCUUN3QW5pUE9NVTk4RnNzR1R6TnQ2bUlWMndFQWN3SFVpc2x3WXVJc1o0TTBQaWZlR3dETUErQVRsZVRjemZ3SFdiWWFBUUJDQVBCOVpzVk5aeWQrbFdYRGZrVUFvSktHWlEzQTQwOHovdXZTKzN4WmZnY3Fud09BU3VxcWZqWWJCOENyYWRUY3hCdXV6cHpwaFlHeEFLQVMxZHZ6cTJvQ1VLbDF3NW9QM2dKcThhc2IzcW5QOEFrelB6NVpvR25tUzFqS0YyWUZBTWRSZlZ0WGtDWUFQOTRiV0poOUlmbkE1algvV3JmanlMa3MzWjdibE1KVXYwOEF3R0h1cUU0Z1JEc0FZMUxNOU5id3BsWUFjSlFycWhOb3lDc0Fsa2RFS096M2gwa0s0Sno2ZnlGdUFVeGpLbUFMQUhBVTlRdHJXbkVMNEJoYkJiY0FnSU9vdjZtalBiY0E2R0dtQ3JZQkFBZFJ2OEdtRDc4QUpyT1ZNQWtBN09jbDFRbU01UmZBRWJZU3Rpa0NBTHZwb0RxQldmd0NvUHBzTlp3SUFIYWplczdiOFl0WHl4aEFER01SRXdEQVRyN1YrQmUwakFFdy9nMVFLcVVDZ08xc1VwOUFLc2NBcUFWakZSdmtBSUNyMzZPemVRYXdocldNVDFzQndFYUthcW51dnhyeERLQ3dObXNkcHdPQWpURGNZOTJaYXdBc3I1djYrU3gwQWdDVVRsLzEvYi9DTjRDY3lzd0MvbTRGZ044bGkrRzFPeC94RFlCZVppOWwzMXNBOEdEbU1Pei9DT2NBdnZGa3IyVjRCZ0NVVERyRGMzdmQ4amdId1BEZThkL3kwSDRBK0MzRlR6RHNYdVdsR3h3QXVCSGtSRFU5UHdTQVgvTTJ5KzRuY0ErQVZqaFZ6NGhrQVBncCs3MVpkcC9FUHdCckc2Y0thbmt1QlFEdTVXT1dCeXdvRmUvd0Q0QytzRGhYVWt2ZlZBQ1l6VmEwbmlRQUFCcnViRkV0L2RQS080QzdEbGM5VXZvdzdqMU9DQURYSDNhNnJHNDk0MDZXYXdEL3JOWjcvcGQyYnJrNy9HZld6MHpMZVNFQTBGRXZWMG9iUE94akJ3OGp1YjVwZ3B2QUFINDh6VmU1ZSt6dU13K2VDTDM4bjRtdDJIZmVtY1FBUUl0Y3JLNmwrWlJQdjdqdyt4VkNhL2JXU1MwWlhrdkhNNERJRXI5OWE0VjNHL1RLckxjbWorcmJwYjV6TzE4bENvQ1N4K3RDZk9xMTZqVXNadWJrTVFONy9hbEpIWC9XRDBpZUFZUXJPc1EvVHhnQUxud04wQjZlQVZUVzR3REhrREFBNkdnbEFDaVJIM1E1d0JNQ0FhQmRGUURndDN5bXgvRTlSeUlCb0UwZUFQQnJWdXB3ZUc1cFlnR2dCRGNBK0NYVGREaThhQklNQUgxa0FZQ2ZFNlg5NkR5L0VRNEFMYklBd0U5cG8vM29wcEI0QUdpdE53RDhtRUROQjlma3JvZ0E2UE5BQUxpL0xLTDlEOEFKRWhJQW5Rc0ZBT1puWnpqSUxCSVVBR1YzQUFCYXAvWFF1aFFKQzREeXgxcWtCekJINDVFMXl5VnhBUkR0cUNNN2dCSGFEaXdrazRRR1FOZUhTUTZnazZiakN2eWFCQWRBdENsSWFnQzF0UnhXdlpNa1BnREtHdUV1TDRBN1dyNEZ0YnhNNVFFQVVYcC9pNndBMGpUc3IvZHRLaWNBaUk3M2toVEFKcGYzNWoyM21Nb1BBS0tEUmk0S05GL0dLNEE0VjNmV050M0pQZkVPNE42bndBditSalRmdTllUzc5a25ZVGFBY2E3dHF2STd4VlR1QUJEZGptK25jL2Ryak5qbzFCOUswd0U4NmNxT2ZHS3VHdkI3a3dNQTkzSjZZckJlelE5Njl1MHZuSDdVaU5rQUdqaS9tNHF2L21ESWdnTWZBTzRsWlc1SFQ0MjlkMjgrYnZVM0x1M2NaQUJGVGg5cHEwVlpycFZWSEFEM2tydGhsTXNMSkFGUHo5NXp5K1U5bXd5Z2NNWEE2dXc3c0RSODdaVExSeVlVZ1B2SjJEaWpUNGhULyswZjZUVit5WjVMMnZacS9nVWgxaFAvZUtxbStzYXI5SnkrTFZ2TGtlMUpVTWwyNGpEWDk3ODNvbnRqdGNja1YyczdmTzZHdEh3OWRsaEd0NGRuN1gxdlpKdGdPeGRKdVRjYkUzL2FTakxuOXBtOXErZTlNbnpnczA5MWZxSjVvL3ExSG5tOFU4VGdzYS9OV2J6cTA3M0h6bDdUY1U5bCszeUF2TytTZDY5Yk1udkMwR2ZhOWVnM0ttYlc0dFdiRDZaZXZFT0lhZEVDWUQzS0ozN1dhd0N3RU9VVFB3czFBSmlDOG9tZktSb0FSS044NGlkYUE0Q3VLSi80NmFvQndLTW9uL2g1VkFNQXR5dW9uK2k1b3VtMjVlVW9vT2hacnVrY1ZHOFVVUFQwMWdUQUp3OFZGRHQ1UHRwT1EyOUNDY1hPSm0zOVZ5SlJRckVUcVJHQWNoZzFGRG1ITlYrRzFnRkZGRGs2WEptT2J3RVNmd080bjdBaTFGSFVGSVhwY1MzeWRCUlMxRXpYNVdKMHl6cFVVc3lzMCtrR1ZaOWpxS1dJT2VhajZKVGFsMUZOOFhLNXRxSmJIb2NBOGZyL3VKNTNKTlk1am9xS2xlTTZQNnZLQnhjSUM1WDFQb3JPc2NSYVVWWlJZbzAxNGdFMTRZbW9yQmhKREZlTVNlY3ZVVnorODJWbkE1OU1FNW1Zandyem5QekVTTVhZK0QyZmtJczY4NW5jaEFGK2lnbnhhdDNuaGRobFcvYVZpSzI3V1UvdFEzU0tyV2NvWEN2NUQ3WXNpMzJoVDJzdnBjeGk2emJpQVFxaVV3YllLTzkycm1ZSUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQ0F4Z0VBQWdBSUFDQUFnQUFBQWdBSUFDQUFnQUFBQWdBSUFDQUFnQUFBQWdBSUFDQUFnQUFBQWdBSUFDQUFnQUFBQWdBSUFDQUFnQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUtCeEFJQklER0Q5REVTbnJCY1NBR0pvQUFBQUFBQUFBQUFBdUVnaUdtSjJFcmtDa0lDR21KMEVyZ0RFb1NGbUo0NHJBREZvaU5tSjRRcEFGQnBpZHFLNEFoQ0tocGlkVUw1V3EwK2pJK2JtTkdlbksrYWlKZVptTG1jQVdxTWw1cVkxYjJjc2s5QVRNNVBFM1NucjhHSjB4YndVaC9OMzBVSTgybUplNGptOGFxWDZSZlRGckZ5c3p1TjFTeTN5MEJsemt0ZUN6eXZYQnFFMTVtUVFyOWN1amk1QWM0eFB3V2grcjE3dGVCWDlNVHBYTy9KOC9YTElRWFRJMkJ3TTRmd1M5b2cwTk1tNHBFWHdmeE9EZS9UV3UraVVFYm03TmRwZGpCdFpmUHN2M1paOHhZcVc2UlhybGVSdFMvdjdHdEdyL3dNSXdqbGlUR0J2MXdBQUFBQkpSVTVFcmtKZ2dnPT1cIiIsIm1vZHVsZS5leHBvcnRzID0gXCJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQWdBQUFBSUFDQU1BQUFERHBpVElBQUFBQTNOQ1NWUUlDQWpiNFUvZ0FBQUFDWEJJV1hNQUFBemVBQUFNM2dFVFVCQjZBQUFBR1hSRldIUlRiMlowZDJGeVpRQjNkM2N1YVc1cmMyTmhjR1V1YjNKbm0rNDhHZ0FBQXdCUVRGUkYvLy8vQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQ3lPMzRRQUFBUDkwVWs1VEFBRUNBd1FGQmdjSUNRb0xEQTBPRHhBUkVoTVVGUllYR0JrYUd4d2RIaDhnSVNJakpDVW1KeWdwS2lzc0xTNHZNREV5TXpRMU5qYzRPVG83UEQwK1AwQkJRa05FUlVaSFNFbEtTMHhOVGs5UVVWSlRWRlZXVjFoWldsdGNYVjVmWUdGaVkyUmxabWRvYVdwcmJHMXViM0J4Y25OMGRYWjNlSGw2ZTN4OWZuK0FnWUtEaElXR2g0aUppb3VNalk2UGtKR1NrNVNWbHBlWW1acWJuSjJlbjZDaG9xT2twYWFucUttcXE2eXRycSt3c2JLenRMVzJ0N2k1dXJ1OHZiNi93TUhDdzhURnhzZkl5Y3JMek0zT3o5RFIwdFBVMWRiWDJObmEyOXpkM3QvZzRlTGo1T1htNStqcDZ1dnM3ZTd2OFBIeTgvVDE5dmY0K2ZyNy9QMys2d2paTlFBQUpqQkpSRUZVZU5ydG5YZUExVVRYeHJQY1paZTJpeXh0NlV1VlJSQldCRjVBV0JBRVZJcStJbEwxVTZxSUtCMVVWRVNLSXFLZzFCZEJBUVVVbEY1VXFncElWWW9nU0pXNmRMYTNmSFQySnVja004bmszdHprUEgvdW5Ua3p5Zmx0TWpselprYVNMRkJZbTZuTGQ1M0xsRjJuU3p0bnhrcHVsNmZUc21UWnhkcmQwTjMrYjdsWGRyblNlN3ZZL1ZFYlpaSTh6clgrajQwajc5L1FRSmY2djNzcStmNm1NcDl6cGYvYmsrZnZLTG1lQy8xZlBaRWNmMWNYSzdyTy80V09rOXV6NkhCaHR3RXdrNXp1cGEyNTNlWC9xaG5rYzI4dDhiZ0tnRlhrY2FVbXVzbi9OY25mN2c0SGpDWjNBK0dBdHU0QjRDOXlOeFFPcU84Vy8xY2daN3M3SE5DQmZBM3JpRXZDQVFQSTFlNE9CNHdqVDdzN0hEQ1hISTFxa2hzQVdBRmNlUGRJZDZpS0hnR0RYQURBU3VDNjNmSVJIRW5oQUFMQTllRUFBc0RsNFFBQ3dPWGhBQUpBUjl0eUV3Q3VCa0JlNmlFQVhBMkF3OE1CQklDK0JoRUE3Z1lnc3gwQjRHb0FIQjBPSUFDWXNnT2lDUUJYQXlBZmlTUUFYQTJBYzhNQkJBQ2puQm9PSUFCWU5aa0FjRGNBOG1BQ3dOMEFPRE1jUUFDd0t5V1dBSEExQUk0TUJ4QUFQRG9hU1FDNEdnQUhoZ01JQUQ0dDh4QUFyZ2JBY2VFQUFvQlhnd2tBZHdPUTJaNEFjRFVBRGdzSEVBRDh1aFJOQUxnYUFFZUZBd2dBSTlxZW13QndOUUFPQ2djUUFNWTBoUUJ3TndEeUVBTEEzUUE0SlJ4QUFCaFZTZ01Dd05VQXlKY3FFUUN1QnNBWjRRQUN3SVMyNXlFQVhBMkFFOElCQklBcFRTRUEzQTJBL0FZQjRHNEFNanNRQUs0R0lPRERBUVNBV1FWNE9JQUFNSzFqUlFnQVZ3TWc3OGhEQUxnYUFIbDVNQUhnYWdEa3FRU0F1d0VJNEhBQUFTQkVnUnNPSUFERUtLVWhBZUJxQU9STER4QUFyZ1lnVU1NQkJJQXdCV1k0Z0FBUXA0QU1CeEFBQWpXVkFIQTNBUEtiQklDN0FaQTdFZ0R1QmlEd3dnRUVnRmhkZm9BQWNEVUFBUmNPSUFCRUs4RENBUVNBY0swSUpnQmNEWUE4alFCd053QUJGUTRnQUt4UVJ3TEEzUUFFVURpQUFMQkVnUk1PSUFDczBiR2lCSUNyQVpCMzVpRUFYQTFBb0lRRENBRExOSTBBY0RjQThsc0VnTHNCa0RzUkFPNEdJUFZSQXNEVkFNaVhLeE1BcmdaQVBsNlVBSEExQVBMT01BTEExUURJSzRNSkFGY0RJUCtQQUhBM0FEWVBCd1FtQUo2OHhhT2ppK2YxQkFRQTlnNEhCQkFBd2VXZTdETjU2Zm9kQjg4azNPbHB3cG1ETzlZdm5kem55WExCTmdiQTF1R0FnQUFncEU3WE1ZdjJwMnJlNVAyTHhuU3RFMkpMQUd3ZERyQTlBSjVhZzFjbnNON3BoTldEYTNuc0I0Q2R3d0cyQmlDb1dwOGxWM2h2OXBVbGZhb0YyUXdBRzRjRGJBeEE3WWx4UnU5MzNNVGE5Z0xBdnVFQXV3SVFOZlJ2YzNmODc2RlJkZ0xBdHVFQVd3S1F0OHVHVFBPM1BITkRsN3oyQVVBZVNnQXdLdWJySkZFM1BlbnJHTnNBSUQ5UEFEQzkrWmVKdmUzTGF0c0ZnTlJHQklDdUdxMFJmK1BYTkxJSEFQWU1COWdLZ09hYnJMbnptNXJiQWdCYmhnTnNCRURUWGRiZCtsMU43UUNBdkN1TUFNQlUvRnRyNy8yM3hXMEFnTHdxbUFDQUozcjZYN1A2M2wvckgreC9BT1RwQkFDa2VyczU3MlBDbGpYTEY4NzViazhLVDZYZDlmd1BnTnlOQUZDcDBKZDgvOHJMQnYwbis1MG54LzFQVGJqSVh2WExRbjRINEh3RUFhQlEyMHM4Ti9Ca2YrVkFLa2U3bjVqamhwZmEraHNBZVNJQjRLWFFTVHgzYi85TDRKUi9OSHY0WUZLb253SElpQ0FBc3FqY1RwN28va2RveHNmejU1aG5ac3Y1RndBNWxnQzRwK2V1Y3R5NTAwMDBMRVY4dzJybTZuUCtCZUFWQXVEdTQzOGl6NDM3dWFDbXNhQlAyVi9EdDE0RGhXVWFCUGdWZ0xJN2VPN2JobHg2OW9ZejI5cFI5aVl5Vi93Q3dBOEV3QzNWNEVyNDJSYXViM0VnZThwUXpSdmwxL2dGZ0pVRXdFMDE0WXI5N2MzUFluTVdzNzM0WnRlTGp5WUEvQWRBdTFTZW01WlNrY2xvMkQvc3MvTWRKYWtsQWVBM0FGN2p5L2theG1qMlAybnMzNVQ5cGFDMUJJQ2ZBQmpKZDgvMmg3SWFIc1poOWFPZ3FHc0VnRDhBOEV5M0xIYVNsMmRrUHl0N1Z3TEFEd0FFemVhOFplczVqSC9JWTNoK3R0WnhCSURQQVJqSGU4dGU0REJlbEd1RytET3AwRUlDd01jQURPSk81Y2pOWS80TEx0dHZTVktGZGgrdDNXK1JUZ0pOcm5BNUFDOWFuRVhUZ3M5NEYwc3Z0aTA5QVZUK1NlTUdvQWxYQS9reXVJeW50eUlBZkFsQTNVVCtsMlpodmlZNGs0c1RIeUVBZkFmQUF4ZjUvWCtlczQzeG5QWXZQa0FBK0FxQThFTUdSczNyT1J2cHlOdkFvWEFDd0VjQXpQZkYvSGtMN2hibUV3QytBYUNub2U5bTNtM1dHdkUzMFpNQThBVUFNY21HQUhpZnM1azYvRTBreHhBQTFnTVFmdEJZNU94anpuYXFHV2pqWURnQllEa0FjdzJHVGlmelBtaU1OREtYQUxBYWdCNUdZK2RmY2piVXpsQXJQUWdBYXdHSU5yenZ5MXJPbHQ0MzFFcFNOQUZnS1FER0V6QVQrZmIvbEw3M0RXY0VBSmZhbTVnL3JjdlhsTkg5NVRvUUFOWUJFSDdhQkFCdmNEVlZOTU5nTTJmeUVnQ1dBZkNwQ2YvTHE3bWFlc053TzU4UkFGWUJVQzNkREFBWlpUbWFDanBrdkozcUJJQTFBQVNaM1AxckVrZGJEVXkwODNzMkFzQVNBTHFZektKTEtzVGUxamRtR25xWkFMQUNnTER6WnZNbzJhY0RIakcxeWZERmNBTEFBZ0FHbXZXL0hIOC9ZMVBaOTVocmFBZ0JJQjZBbkdmTXAxSnZad3dHRFRIWnpybGNCSUJ3QUY0VmtVei9FVnU4T2RGc082OFJBS0lCeUg1Y0JBQ1pUUm1hS25YQ2REc25RZ2dBd1FCMEZyT2VKcUdaYmt1UkJ3VzAwNVVBRUF1QTU2QVlBT1JVdlc1RjdCYlJ6Q0VQQVNBVWdQYXlLR1ZvZjZYWCtrZE1NKzBKQUtFQTdKYkZhWDRrMmt5Mk45TUVOYktiQUJBSlFGMVpwQzUxUlU0RXJMQk9YQ04xQ1FDQjlxZklZcldoT2ZDT3J2bGRoc0FtcGhBQTRzem51Q1NMMXFsUjViMmF5Tjk2cmRnR0x1VWdBSVRwV2RrSy9USG56ZjlXekYrczdBUFZuL3Q4ZDZadzg4OFNBTUswUkE1QUxTRUFSS2xRV2lBQ2tGYUlBQkNrMStXQTFPc0VnQ0R0Q0V3QWRoQUFZbFJKRGxCVklnQ0VxRStnQXRDSEFCQ2l4ZHF4L1Q5V0xwd3o3Yk9sUnpKdEI4QmlBa0RJUk9CbGZIcC95NGZONzd0VExuZU43aHZ0QmNCbER3RWdRRFhRbWQyWnFuMlpLbnh3eGs0RTFDQUFCQWpaRWpSaGJIR29kSENmYS9ZQllCQUJZSkh0Njk5WWFJWnZpUjlzQThCS0FzQzhzc2RETC8reFdrbDNyUzdaQklENDdBU0FhVUdwQUZkMWNqdXJuYlVKQVhVSkFOTWFxcmFjV0YrdjB2MG5MUE5wNnRramU3Zitjb3l0OEZBQ3dMVFVPM1drUHE1ZnE5UmhLNXgvWmVXYnNUbHZOUkJXNjZYeCtyc1ZmRThBbU5ZK3BkMzAxaXpWcXFjS2QvL09kc0dLTDQ3bUMzUmEyVWNBbUE0RHFXNHg0NFovQXdTNy8yZHd1L21DbjJpbWthVjZDQUNUS3E4MGV6d1BXOFdnbjBTNi84SlRXRHNQYXg1Y1hwNEFNS25tU3JQTUp6TVV1U3JPLzJ1S2FUeWorbXVjTDlTY0FEQ3BmZ3FySEdjbWp4WGwvc3doMm50K05FMUFxL1lqQUV4cW12SHdlbkg5Y1dEYWFaYU5KMS9SYStrUjlKakJhUVNBU1cxUVpQTHkxSjJoNmRZelU1c1h1ZjZmbmIvZWh6cnJEaG0yZTNnSU96ZHdBd0ZnVW9xWVhtK2V1bHFwUkptZjN6dEZMdHNBclIzb1I3RTAxUkQ1R0RoTEFKaFRtTGZONUFpdTJ2aS85dkhHM3Foc1Ewc3luczgzQXFrZVJnQ1lVZ2x2bTB2NWF2OFA4K29jNVhhZXdlOGlKUk5Mc3pVVmpPeGhWNElBTUNYRlUzd2tYKzNuRWE5dURWYVhSWTRLSGN6YVZ1bDQ2eEpEWFF4QUxXK2JuRHN4UjhGT1RZWk9lQXNIOTZEWnd6NmhDNTlsWElzQU1LWEczamFyY1ZhUDQvaXZiZ3hsbGJabWI2c0V1SDZwTVFGZ1NrOTdad0R6cnJnOUF2bmtkeVJBUDFGZE5JNW5zNmV2b01hZUpnQk15ZnN0SHNkYmZSL2trK2ZZWHhoY0owMVZoaHA3bmdBd3BWZThVNng0cTBPTHlsTEMyRXZ6SFFlNzEwZ1VrUURRMUdEdlZ3QnY5ZCtBZnExRFM0OVdaUUR3dFRiSnpGY0VBY0FTWCtFZEEvd085R3MyV3JxWHN1aDB2dGFnZzhaR0VBQ205SkczelFqTzZ0Q01NTDVkYkd0bDBiNThyUlhqYW8wQVlORXdiNXVjWjdPV2tNMEIwSlN6dDBBb1lSZ0JZRXI5dlcxeWJzTGNURGIzQ2lqTzJWc2dPYWcvQVdCSzNiMXRMdUNyM1E4Q0FEL1piNVF5L1pTM3Q3K3FXK3RPQUppU1lvdll1Q0N1MnVEQzhpUTBxVkExSmNpYjB2bWp1clgyQklBcHRWQVlyY3hUdVRDOHVSUzJmMXRKMDNPNWk5U050U0FBVEVsNWVoZlhvWHo5NGJtZzM1QU1QL1dwaEx6N2ZDMVVOOWFBQURDbDZzcnArUUltSTNONHBtYXNlaklvaXJPM3dKYlcxUWtBVTZwZzRyUHFFU3dkSkFsYVdwNEhXRXhXbTYrendVQitlQVVDd0pTS3FGWm81R2F0NnNGM2w5c0V2QVFtQStVRzhIVTJHakJSaEFBd3BWQlZzdVducHI0QmIydUc4a3ZBQXg0VXhwbUIxbHB0SVNPVUFEQW45UUVlVDdCVkxCV3ZsZXA5cEtGWDRZcWJ3VktYK0E2QkJWYWkvQ01SQU9hMFhKMXBYWmpwQmJCS1o3WFBoQ3hwNGYydzVTRmNvZWRnWUlPcTVRU0FTUUdaZHFzWTRqTkJNM1RYKzV5WjJDVC85WkpoTlVmK2paWVp6OVBWVm9DQmNRU0FTZlVBTEM4TU5jSU5wSlJUQ1pxL0orUTNGd2FTZXhBQUp0VVE4c3VQZXA4Qzc0aGFGL29PZTArTFFuSEhoZ1NBNk8vQVc5OXhtb2tCWVY4Sld4Y2V4MzRLOEd6WnFxOUFkMjhSQTYveVAva01Ya1BVMFg5OEdUMU5vZHBYSlFMQXJMWWlubG1NTExyS05WVG8rU0lac1d6ZHpBVm1vRzhsQUV4ckZ1YWFhOE5LcWtzWEdIWmVGcXNUK1l4K3JWelhMQUxBdEhwcS9IZXVmTlpyNFVib0l4TVNaT0ZpU2tKNUdhN2Jrd0F3cldoTjcxejhlWHozUndvWEtWdWxaclAzMWlYSmxtaWlmaFpLVzJSN2dHZ0N3THhPeWY3V3JHQ2RMajZPYkVaelNpSUF6R3VPM3dHUXY5ZU9QSFZQeExZaElBQUVxTFAvQVpDM2FVd0tSQ3hFcTNVbUFBU29qQTBBa05NL3dvS1BqZjdGYTVVaEFFVG9xQjBJa0krMGhkNERqMnNkT0g5VUlnQkU2QXZaSHJvd1FmRWlDT3Y0cDJhRkx3Z0FJZW9vMjBaL1R1clY4RWFxY0hCNHlkYWZiay9YS2QyUkFCQ2lBcW15clhUNU1sdUhVZ3NRQUdLMFNBNUlMWklJQURGNkpqQUJlSVlBRUtUUWk0SG8vNHVoQklBb1RSYnVuV3NuRC82NWVjc1ZLd0dZSkJFQW9sUkhxR2RPZnQyajB1MzVuZUpOKzM2ZlpoRUFkUWdBY1Rvb0xxUTNUM25pUU9FQmYxbmgvNE1TQVNCT2J3dnlTdng0Y08vbjJKM2lBWGliQUJCb3YweW1FS2Rzd1BidTl2U05GK3ovekRJRWdNZ0dGb3Q0K3IrdHNhS2t4REt4QUN5V0NBQ1JEZFFTTVBiVFBzZzMyMVNoQU5RaUFJUUNJSmsrQlRCT056M3JJNEgrLzBraUFNUUMwTUNrUjY0d2JOWHh0amdBR2hBQWdnR0F0bURqa1A2QjR6YzBRNVQvZjVVSUFORUFQR0hLSTJ6Sldia1BDQUxnQ1FKQU9BRFNEaE1PV2N2WVJreUtFUC92a0FnQThRQ1ltQk5NWXQ2cXFaL041Z0VKZ0N6ZmFic01PK1JONWtaQ1RncncvNjVzQklBRkFFaDFqSVlETDNCTXpQWVhFQVNzSXhFQVZnQWdUVGZvRVo2TlhzSXVtd1pndWtRQVdBTkFnUXZHUE1KMTJOd28wOG5EQlFnQWl3Q1F1aG55eUhhdU5xcWFCYUNiUkFCWUJVRFFaaU1lNmNNMzFqVDVEdGdjUkFCWUJvQVVrMjdBSmJGOGJTdzNOK1VZSXhFQTFnRWdUVERnRTg1TjM5OHdCY0FFaVFDd0VvQzgvQXNGejNNMjBkQ00vNC9tSlFBc0JVQ3F4YjFNYUNObkMyWkdnYW0xSkFMQVdnRDRnN1d6T1Jzb2J3S0FmaElCWURVQTNObGg4emp0RjdOSkhoZ0JnQ2ppR0o5WGVKZm81VFBzLzJNUkJJQVBBSkJxOHkzbFdNVnBQdHlvLzlOcVN3U0FMd0NRQm5ENVpUMm45WWVNQWpCQUlnQjhBMERRRWg2L0hPQzAzc21nLzVjRUVRQStBa0RLczgzQ1FOQm9ZLzdmbGtjaUFId0ZnRlR3Yit2eWM1WVk4di9mQlNVQ3dIY0FTRkVjKzRkK3ltVTUyMmtqL2o4VkpSRUF2Z1JBZXBCOTBtNG5sK0ZtUnZ4LytVR0pBUEF0QUZKOTlxMmhxL0xZbldjazZiUytSQUQ0R2dEcEtlYXBZWjR0ZXlPU0RVd0JQeVVSQUw0SFFPcWN3UnFoS2NWdXREZS8vek02U3dTQVB3Q1EyckF1NDJEUENvMDR5KzMvbERZU0FlQWZBS1JHVnhsWEJqSWYzTUNmZUh5MWtVUUErQXNBS2VZTW01ZitZRndaRU11OTlPQk1qRVFBK0E4QXFld2hrUytCblB0NS9YK29yRVFBK0JNQXFkQjJOaysxWUxBVnNvSTc0N3lRUkFENEZ3QXA3RWNtVjhVMzFyWGsrWmJYL3orR1NRU0F2d0dRUENPWlh0ekpyWFRzTUJ3NHJsZ0RPTUlqRVFEK0IwQ1Ntc1V4UlFNNmFCcko5eDJuLzg4MThka0ZFZ0E2S3JhUktXQXpYdU9KWGY4NHAvL1hGWlVJQUxzQUlIbEdNYjBHVG1DdmdaRDNNL2pjbnpIY0l4RUE5Z0ZBa2g1bmVnM0lDNkhQOXZDQnZOdENuSDNNcHhkSEFEQ29PT05Xbnp0NzUvZXVXR1kwOTNMUVJVVWtBc0J1QUVqUzA0ejU0aW5MUjNXTXlYbTlRbzU4VlYvNTVsL3U0TytSRnI2K01nS0FUYmxIczY4Ynl6Z2ZueUViVWNxSW5CSUJZRThBSkNsNnJXeXhmcTdvaDhzaUFOalY0YlNWN2ovZDNpOFhSUUJ3S084d3k0Nll1amdzcjBRQTJCMEFTUW9iZE5ZSzk1OGRIT2F2S3lJQU9KV3o5d25SN2ovUk82Zi9yb2NBNEZaSTEwTWkzWCtvYTRnL3I0WUFNQklkYnJNOFhZejMwNWUzOGZqM1dnZ0FZNHJzSytBMHNKMTlJLzErSVFTQVlWVVpZMnIzNTVOanF0amhLZ2dBTTYrQ0p0T1BHdlArMGVsTlBQYTRCZ0xBcEVwM25uT0t6L21uNW5RdWJaLytFd0FDVkxIbmQrY1lVMzIrNjFuUlhuMG5BQVNwWUwwdVl4WWZRTGNZU2p1d2VFeVhlZ1h0MTI4Q1FLaXlWMnpWYThqSUNUTVhyTjYwNTlpeFBadFdMNWc1WWVTUVhxMHFacmRyandrQWw0c0FJQUFJQUFLQUFDQUFDQUFDZ0FBZ0FBZ0FBb0FBSUFBSUFBS0FBQ0FBQ0FBQ2dBQWdBQWdBQW9BQUlBQUlBQUtBQUNBQUNBQUNnQUFnQUFnQUFvQUFJQUFJQUFLQUFDQUFDQUFDZ0FBZ0FBZ0FBb0FBSUFBSUFBS0FBQ0FBQ0FBQ2dBQWdBQWdBQW9BQUlBQUlBQUtBQUNBQUNBQUNnQUFnQUFnQUFvQUFJQUFJQUFLQUFDQUFDQUFDZ0FBZ0FBZ0FBb0FBSUFBSUFBS0FINER1a1NSQjZoNlFBSkFzRlFGQUFCQUFCQUFCUUFBUUFBUUFBVUFBRUFBRUFBRkFBQkFBQkFBQlFBQVFBQVFBQVVBQUVBQUVBQUZBQUJBQUJBQUJRQUFRQUFRQUFVQUFFQUFFQUFGQUFCQUFCQUFCUUFBUUFBUUFBZUN0ak1NcnBuMzhicjl1SFRxLzl0WUhuOC9kZG9VQWNBMEFLUnZmZTdwU3FQS2lJdXQxL2ZJNEFTQU1nQ1BhSm5xeVhmZENUU1BWRE56SjNTTWE1OEl0bHVzMkw0SEZTanZNd0JpT1oxQUJ4TVlFUndDd1U5dEVLYmFiMUZIVFNCbGU3NThkRjZON2NlRmRmdEUzOUMxV3V5RjdaMzVGVEdRNzVRZ0ExdXJZMk1OeWoxTHYwN1JSZ00vOUc1c0hzMTFmK2JHSk9xYmljeUJWczE5bDdzNFF4RVNzTTE0QkMzVnNqQmJ3NWd2aGNuOWpqaXVNL0NSSjIxb3JyT1pDNWc1VlFTeDg3Z3dBdnRDeFVZL2xIblhUTVpMTWZMZDNOT2E4eHFLVE1yVHNmWW5WNjhMYW82T0lBYzhaWndEd3NZNE56MFdHWVZKaEhTUG5HRzkyMHFCZy9xdXN1MS9ENGtYTVlERldBRDdqR2tVRUhnQkQ5WXg4bzI5amc1Nk5RMnozZW0xNVE1ZVo0OE4wM09aaldLMWRqQUEwUStwUGNnZ0FyK29aNmFodjQzVTlHenRZN25SNi95Q2pGMXJuTkdwMUVsWm5GSnYvNDBPUkorTTVod0RRU2M5SS9neGRHeVgxYkt4ajZFamNveWF1dERpSzJPbHNaZ1kzc3Z3OVVyMnhVd0pCelhXdC9LcG5ZcHV1aWNYNi9kaGEwdFNsNXBxUEdhNkwxQWkreEFSQVo2VDZWS2NBOElpdWxUZjBUTHloYTJLMi9vZGtEcFBYR3ZRcFlua3NWbU0raS84ekl4Rjh6anNGZ01xNlZxcnFtYmhmMThSRXkvMlBmWmRyeExyL2p3V0EzNUhLVFJ3ekYxQk0zOHdKYlF0NzlTMk05b0gvcGFBcHNIRXNxaHlaeVhCNzNrWXEvODh4QU9UV056TkYyOEp3eWV4YlpGME9JWmNiOUExZi83WXozSjZIa0VqeUJhY0FrTXBncHFXMkNmMTVHNm1YcG9GelJRUmRiOWhocmlmVWNQM2I4eTlTOVhISFRBZWZZeGxoSjVtWVQ3NnA1elhIV2MyRVhYQ2RkSjR4U20zOTJ6TUZxVHJETVFEOHpXSm5oWmFGc1F3R250SXk4S0Z1OVpBeURWLzR2OWlTSHYyRzN1T1p6c3QyWHZmMnRFQTZkTWt4QVB6T1lrZnpDVjZYd2NDakd2VzNaTmVzbXZPRm4wN2VEa1dsL3JPaVk2aDJROEZib0JBRFZ2cHJ2YnVUaU9Ta1BPbWNqS0JWTEhaS2F4aEFJMjFaOVRCZS8zSnByWXBWSmlqKzE4NlBLYWZaVXZsNGpraWxicFI3S1ZMeFMrY0FNSS9KMEQ2WlA5YWVWUlh3K3M5cVZDdTBEQm95TENxazFWUlhvTXByU05tQ2VsSHVIbkM5ME12T0FRQWE1YWdmczJNNFp0dWc3OHBJN2xIV3pSZkhLYmpPU2MzbzVRL3FDdXV4c2x0MDdrNXg3cytpZ0FOZ05GQnRvT292c2V6ejdVV2dNVjB1clBxSm5Ham5QY1BSLzgrMEFScnpoc1ZTMWZrSzJEUGpIV1A1a3JNZEJNQmdvTnB5OWRnS2ZlYk5WTDFYUDRGNmtvWlU3NE1QNTVacGRYdUJSdUxJTFBhTXBScUdRbHc1cmpvSUFPZ3RkMGdkbUptSDFXK3BHaDk5RHZVRVNTdTZtSWMzc3ErWHAzTmRNZXh1Q2RKT1ZhckYvMUViY0FBOEIxUTczWW81a3FQT3VqMDVEZXJKRWJqNmUyalhYOVhyZUUvOHN0WFpCNmw1a2FKZmFTYW5CL0YvUFFZY0FFMkJhbGZmWng0dnoxY1dqRmEvRkc3b0QvZ3p1eURXODJicGVoMVBhOHdUdXNiV0xiUTFrQytiODVxVEFJQ2VjaGxBY0dBelhGMTFCRlZ2K1d1b0p4dkIyaE93anBkZ1dBRjRxUXhXTzl2ZnpNbnZFVnFnL1JldTgxL1pTUUJVQU1ZNDhnWDFIOThDYXllSEtjc3RoaGZqZ0NPNnRDakp5Sk5aejZuUWVyWUViSm1aUnJwVENqSkFtZWNvQUlBUHBQeXlYSlpsWkFWRnlvS3Z5ajlBUFFFbmFtZGovWDZJWmFaZWx1dWdzMWNYV2YrYnBUZTVnNlM1NGgwRlFJaTZWaW53Y01HVFVPMlhWTk54c3J3YzZnbVlVb0F0dVpGK1pzdlgvQlc5OEZITXNNVnc1MHMvS3pzSmdBU2dWaVZ3dGNnMEtKRTdQeEJaK1JIcUNSUktYSWQxKzBuR2pIMzVhY3hDVGZXVVF3anlJWGdLdFk1TVVuenJLQUJPd3RHUmpXd2Z2MnVnd1I3bzE2RkE3VGV4YnJNdTJaQVBZQk5Sd2VxQk9wWjA4QVZucGx2dVJFY0JBRjFsZytzUEJ2WFVleDVnZlY4dlZhRlVXZjRONnNsckhLL3dCMlZteFdKWHZrcFZkQ3BTc2pWUGtQeTZucE1kQmNBdnlCTzRDc3M5VlNlVU5zZG0zMTlVVjc2R1JYTkhzZ013RWJ0eWRSTGlXZVJwa1RlTkwxOStnYk1BZ0NhODIwQ2pPMGthb0tyOHA2ck1KOWYvK2dmVWsyZlVUUy9IZW4yWUhZQnpXSkpRWFhYWitralI5YkRwODdEcFBFbk9BbUEyOHQ4S3pQSlhWMVZXRHhWdjdDYXhEK3JKWStxbSt5T2RyaVZ6cUFsaUpFVDlwdjRFS1RvSXRqd0xMdDFlZGhZQVVDenVSZ0xZZGlDK3BzcURlMEpacE1pTnZ4NWs5R3AxcE5PZjhBQXdIYnYwTmFxaXg1Q1NWZGduU1NRdzJ5Q2dBUmlPL0V1a2h1cGZlNm9xVXRZSnZkSFI2b25BYk9iZkFOZXRZSWtCd0V6L3cwaFJjTjFMR3J6cFRYaXl3d0RvQjlSNkQ1a2pVSTdrMWQrS04xUGxUa0U5VVcvSGdLMjZ6U2R6Q2NzUWJLQXVPaElwQ2k3elJMWk8wczBpRERRQWdNR2VOQmI4d2xNL0s5K0JvNFZ4VUUvQ1dPTnNHc2xIb05wZzBXQjEwZjFJVVhCNnZ5OWNkckhUQUlCQzVKTnYvQURzclJNVXA1TVBYdW5tbjYrQUFUZlZkREt5NWdxTUdIQ210TjBVa0xWVENTNFpsc0kyU1hiam16SEZhUUJBbXpMY1RLbUNGb3g0cjZlK3F2cU83Mzlya2gvc2ltcCtGMXNPTm9NUEFEU3RIVWhCZVl0OTZnRlpML09DN0RRQW9IVjlDN0dFMkplOXFpNkI0c0EzSmdqWVJsclljcEFkZkFERVlkZStWVjEyQjFLMG43b29zdHhwbWVNQUtJMkdVWUd0WXlwcUo5dmZ5Um9DQitaN2xla2NXQlEvaFE4QWRIbjdTdmJwbmNwc1Q4YnJBOVJVeHdHUUQ2aDFhd2ZXR2NBdlhqTm5EMkRoWG5EZWJSUGJNL1pXS0lGSDJNZmRiTVp2bnJ1RFY2OVVSM2p1OEVYWmFRQmtRaC9qTzlHNHlad3NWVStoY1lJOExMTXoyRngrTkM4QWpSQkRuM0lrRUtqR0hVdmdjaXNjQjhCbHFOYnRqRG9nNWE2elZxZzBaNExHVTBVMWkvNEQwdVhhdkFBOGd4aUNKcUF6a1pGbk85MXB6cHVLU0hNY0FFY2wvRUhmUmYxTDFsMi9YMUQrMkZJankweTlwY28wcE12TmVBRjRDVEVFN25QL01seTJZQ1pUZUlsbGQ5a0FBMkNueGhjYmxOMTdWR1B3TmYzT0wrQ0N1bzhadzNKdGVRRkFJalkzNXpSVitoRXByTmdzNWgrNDFHcm5BUUFHUEc5blNwL1dmRm4rcFpvck9xczUxbjVYMFRLMkpxd0hMd0RERUVPUGdSSCtmSEJoUlE0aHVMaEpLcERtUEFDZ2dIem9uUitqMWI4OWowOGozcHVCQjNkazZhdG9HVnVwTVpnWGdERThBVjcxaSt1V0ZCcy90d1FMZFpPZEJ3QzA5aVhpem8rdnFIOHJmcmVtYXZYWWgzZC9xc3p5L213aENnQnNIemY0aGIwSUxod1NyejNOZVZNL09SQUFhSy80RW5kKy9FNWpFSkN1V215M1h6TzZxSG9sZHhUMUNzQTJmNER6UEpLUXhSNUw5V2NDQzZVN0VBRG8zK2R1dk84OEVOSzdzeXBtay9LSCsrOFpyY1V5dW45ZDFDQVFlYWhqZTFvZ0c1TDB6bHBta0FrMEF3d0FhRTcyWHVwWE5mV1BmYkJFa29FNjJaUjFGQzIvajNUNWNWNEFzRE5oa0hUdmIrRFNYbEh1YW1DUnRVNEVBTm9ydnI3V1NMME9sbytkWlkxZFE1WjQreVJSZ1NBc014eVp1YitLYkRPVzVTVEMwK0JrUm1TR0V3Rm9vZmsvQ0FSRWM5eWFEa2xReHNvTFo3azkwSXB6cWFTaTVXOUZoWUtySVlaK1E4by9DUmZQRXFpQ2p4bDZSWFlpQVBXQVN2ZFdTbHdCTXFOdnpiS3UwQW9TZ3ljUTNNZVdjaVVWNVFVQTJjZEpPc0NYUnBwbGtOb2VMTERla1FCQVgyeFpraDVxcW4rZEFFK3JMZGJKTXBJOGlwWjNJMTNPemprZGZCbTdkbXczNXpnNDN6L2k3aU1NUGlpMFNJWWpBU2l1SFVRSGRwQzZsUlZaVmZIWFhJbTZDZFdLUmRXbnNUNXY0d01BTzY4cUcrcXdobkNGdXp2R3dmdUt2aW83RWdEb3F6akxDcURWNmwvTDNmajd1U0N0c0J2OGlhOVloWXZ1VWo2RkQ0RHhpQm44c0ZKa1c1TDN0VExsc1MxT0FoMkFOSjJvZlJLd2k5K05EWmJuS3Y4NFUzOStUbm00WHpqUzUrNThBR0JIK2xSR2Evd0xMeVZvb3ZtRUtKYnBTQURpOUNJb3dJQitHVEJUN1BIYWRyczcySmZmRlczWFJ2cjhNQjhBMlBxaVRuZ1ZlUE8zdkxmZkdXbmdaakt2eTQ0RUFGekZOVWs3VlB6MjlUOUhLZjRXeXpEUnA0eWtZM3U0aDZieStEOE5PMnRrUEY3bkE3akc3bHUvYnVINnFBeHdBTUM5NHJOdXRMa0hmRlFlVXY1dG5KZFZlT09IaGF4M2Fqc1BBTDlnVmpaeFluOTM4QUhtQTVmSWRDWUFxNkZLMzJ2bjNONlhLVTlXL3MxN09kOElzQzh6RlcyajJ3Tzh3UU1BTmhXVVhXc1Y5NE5nbGR1SGlJSGJ6dlNWblFuQWZLalNqem9EdXIvazFvcS9LTGIwR01mMlRFYjJZWldpTXRuOW40a2xoVCtrVmV0ZHNFb0ZqWVMyelE0RllJcnV3M091K3ZjWkdSSEFzRURQNnIzUHJEc2FpUFg2RjNZQU5tSTJCbXJWK2hPdWMzTWtld0Q2cFpUc1VBQSswQmdNM2RJRmRkNTREOVZKc1lyRlBMUFlYTElNNnpWSFNrQnZZeERCT1o5TDBFanhBS2NDQUk3RWozZ1ZVVWVEcTQzV21lZFp3T2JXSzlqMkx2bVp2d015aWlJbWRJNENHWWdQUGw2RWZ0bnFWQURBRTFHODF3Q3JGMVFHNWRTSmtxNEErNkxlV3dWYjA2TzlGMnRXemNFczZKd0t1eG1zZEhOTGdmTEFEMlZrcHdMUUZxcVV4UGFXdlNmbDRscjRnSlluWmVaQlFGbkdDYUdVS016Q1FpTmp4OXhwc253VyttR1FZd0dBTms4TVZrUmF3dlVheWFmTWxvWlBrNituL2g1SHp4c2J3M2F6MFJNTEkzUzI4a0pXL214SFhsL2JIUXNBOUNXV1YxSG1LYjFHVkx1bWdOdUVRV2VRbzZiem5tTzUxNWNpc1ByOTlhcXVBYXROZ0tPWTVXVEhBZ0JsOEJkanpOMjZxKytVVm8rQ3hVcXpUK1V5emdnTndHcG4rMGV2YW5vQlpKaFN3MnhrS3JBQUtBelVxYWdvYzFpbmpSeXFiWG5oNDRqekErM1h3SXg2TnVqZjZqWG9pYU5QNkZjR1p5eWo1SGdvUExuTHVRQ0VzTXpHYVovVUNRenU0dUhnTE5EK1hOUnF4Rjk2ZDNwL1ByVHljbjAvd1VlQ252b1pqeEE2RVlCRTlHTW9xMTdSYmtPOWpYd0dYQkFZbUtXWFFzMUduZGJ1KzNtY3kvOHcrRWw5MU1rTkxZQVdHcjdsWEFEQUhmMmFLMHN0MW13aTJ4bTFYWGlLOWl6UWc0OXh3dzlkMC93Q3JJL1haRXJmQkwrQSt6MEcvUEZQNXdJQTdvaXZXcHB6VGZOMDd6cUFYWGgwZmhBb2VWWGpJN1BCR2J6blp4dnp2Sk9ZNThGeUJldVBpWndFQUxoamlucFJaYXhXRXg4eVoycURYOU5ETlV3WFhJU08veUkxSGtscy83SHhPUmp2NGRzT0JnQ2NqbEVuUDQzVWFnSkt2NGMzV1Z3TFBzcGp0SXgzQmM5bnluaEg2OFI2eGdVY3lCSnd0Zlk2R0FEd0lDWDFtR2ViUmd2Z1FoN1lxZkQvODc2Y1doZFFicEpxaS9MRUx4L1dxbEUybnRGVE05bHU0UU95Z3dFQXo5OGRyWTZjRjhSYkdBTFpyUXNXblFWM1lxSk9tS0hkNnF3emUzdDY1OU1lazI1ZzlkVEZZS1piT016SkFJQXJkRDlUbDJ1UHQ3QUZzdnNZV0JRN0RicTUzbFVVYmRadHhPd04yeForM0x0bEpiMnlmZGhkMVpqcEZ2N2xaQURBZlJObjhqd3RpNExwVy9DSzdWSFlpTDZ3dUF1dW1jVHVxb2tzQnF2SVRnYWdNMU5vSDRrWDNCU2N2Tk9PL1cyaG1SckVyYWl6SEs0NkhjUmdjYmlqQVhpR3RjNkRmQTEwNWh5ZTl4SjB1ZmZ0NC9KVlhRYVRCeHdOQUxnak1wUk5oNTN2RkE1bmJzQm5RZUJyZFpLYkNMbmFrSi81ZkRWVzMyUTEyZEVBZ0djMlFITmYyUDZLeUNHSzhCNDdyVFFtSlI0VmNMRTVWM0w2NnJDK3paSE9CcUFNVk9jUTlDK0tITDcrRFd3WDNydXhvVVpQRW1KTlgydjRCbTVueGVnYVBlUnNBTUJQNmpPc3VXT1NsUDB5YkJmZXU3RzZWbGV1bVgwTDVOL0c3U3RrSVhqV0NTblowUUNBZThWTFlDUU5YdXpUaE9zRHE3eDJqczVycHE0MDVpQy9yN0Rqb2JXQ1lvNENBRDdkQ2Z5eWg5UDhKbkpGV1F2cjNMcHBJY1l2dEVleWJFVDM2NWc5N0d3QWprSlY4c0JsUzBDcy9Nc3oxU3JsMEx0M3Y1WXplSmxoYzJWakdxSnR0NGJzYkFCMlFWVWkyV05HTmZqeXJTVGRCVCtKL1QxR3JyTGRTWVArUjdZRHVxc3hEZ2RnSFRqL3h2NVBQWUl2NlZvNnIzLzdmcS9DZlkyVjE4bkdWVkxUOUZHSEEvQTlSK2dET3VsM0QyWjRzL0UzYXZwWGZPK0JNcFBTVFBoZjFoeDUxcElkRGdCMExoaXdnT2VXYXJFK0syUjArVFZiZW5YYUY2V1pyNi82dkhUWmxOWnJXUi9yZEFEQWJ6dHNzK2JKRFpRYWh4bytCUGVHTlZLVHR1Z1psZytDcUpmWHlHYVZVUWkzSDNUYzZRQ0FSeTA4SzVzWE1udTRsTjNDaGMvcmF1WnJoRFlldTA4V29hNTRHN1ZscHdQdzIyUkFhd1RjMWVUSm9QN2hNbkoxeVd1VnNYLzl4Zkd5SU8yZmpHcXo0d0d3dnk1di9YcFl4enFWU3R6bmtZSWlvbVBiOUJvKzVZZmZqdHE2eXdTQU5VcE1EWkNPcmlBQTNDMTZBaEFBQkFBQlFBQVFBQVFBQVVBQUVBQUVBQUZBQUJBQUJBQUJRQUFRQUFRQUFVQUFFQUFFQUFGQUFCQUFCQUFCUUFBUUFBUUFBVUFBRUFBRUFBRkFBQkFBQkFBQklGNHJ5Q0crbHIyeWd1ZVNRM3l0dWJZQ1lCdzV4TmNhWnlzQUJwQkRmSzBCdGdLZ0F6bkUxK3BnS3dBcWtFTjhyUXEyQW9CN3MzT1NTZjFsTC84YjJlaU9aRWFqYlFaQVRYS0piMVhUWmdCSXE4Z252dFFxdS9sZnFwcEJYdkdkTXFyYURnRG9CQmlTVlpwcFAvOUxoWTZUWDN5bDQ0VnNDSUJVUFpFODR4c2xWcGRzcWZia0d0K292V1JUZFU4bDUxaXYxTzZTYlJVYlIvNnhXbkd4a28wVnRaRThaSzAyUmtuMlZzdTk1Q1RydExlbFpIdDVPaTFMSms5Wm9lUmxuVHhTUUNpc3pkVGx1ODVsa3N0RUtmUGNydVZUMjRSWjRhdi9Cd1JOZFFpeWFibHhBQUFBQUVsRlRrU3VRbUNDXCIiLCJtb2R1bGUuZXhwb3J0cyA9IFwiZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFnQUFBQUlBQ0FNQUFBRERwaVRJQUFBQUEzTkNTVlFJQ0FqYjRVL2dBQUFBQ1hCSVdYTUFBQXplQUFBTTNnRVRVQkI2QUFBQUdYUkZXSFJUYjJaMGQyRnlaUUIzZDNjdWFXNXJjMk5oY0dVdWIzSm5tKzQ4R2dBQUF3QlFURlJGLy8vL0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUN5TzM0UUFBQVA5MFVrNVRBQUVDQXdRRkJnY0lDUW9MREEwT0R4QVJFaE1VRlJZWEdCa2FHeHdkSGg4Z0lTSWpKQ1VtSnlncEtpc3NMUzR2TURFeU16UTFOamM0T1RvN1BEMCtQMEJCUWtORVJVWkhTRWxLUzB4TlRrOVFVVkpUVkZWV1YxaFpXbHRjWFY1ZllHRmlZMlJsWm1kb2FXcHJiRzF1YjNCeGNuTjBkWFozZUhsNmUzeDlmbitBZ1lLRGhJV0doNGlKaW91TWpZNlBrSkdTazVTVmxwZVltWnFibkoyZW42Q2hvcU9rcGFhbnFLbXFxNnl0cnErd3NiS3p0TFcydDdpNXVydTh2YjYvd01IQ3c4VEZ4c2ZJeWNyTHpNM096OURSMHRQVTFkYlgyTm5hMjl6ZDN0L2c0ZUxqNU9YbTUranA2dXZzN2U3djhQSHk4L1QxOXZmNCtmcjcvUDMrNndqWk5RQUFGbjlKUkVGVWVOcnRuUWQ0VkZVV3grK2toeVFtS0JCU0tMTFVBQ2tRbEJZSmhFQUFON0RDZ25SRUlBRkVta0lFcE9xQ0lFVkVPaXVLTE5JRlNhalNWWXBDa0dwUVFicWhoRUNvSVptRkJERTQ1ODY4bWN5OHZNejUvNzV2djVWNzNyd3A5emZuM0hmZW14Y0hZUU84MnM1TlNrN04xck1qN2VEQ0JxSnc0V0QxUFRwMlRyeTh0R2V6a09JNndRNmYwSzdiRDBmeUZpRDJwOCtidXdyR1ZOdlNoN0VBWlhldENSTE1jZnprUTdZQ05OaGZYd0F4ZUFoVEFlSTJGOFBzUDJKQ081WUNkSmp0akxuUFFmZFpCRU1CYXM3SHpQK0o2NXJLN0FRb3Nkb2RFLytFb3V0OXVRa3dzUlNtUGUveDBEb1BYZ0tFZE1ha1AwWDRsNDZzQkpqb2dEbC9tcGRuY0JMZ2hTYVk4YjhUUDVTUkFLOWd2ZzBaL3lvZkFWcGl1b2wyd01LWHVBaFFzVEttbTJvSGZGV0ZpUUMxTU5sME95Q3BKQThCL0RIWGhiUWRBQUZzVE0ybGpod0U4TU5NeTJqeENRY0J2S25EWUQ4ZVZETHgyY1FsTUJDQXV2NHYvUklQVWsxOU9QOXB6NkFQQUl5MUF4cEFBTmE0YUxnZEFBSFV3R2Q5U1FqQW1qS0pIaENBTlRXV09VSUExalNmQ1FGNDArc2RDTUNiOXp0QUFON3RnRThqSVFEdmRzRHFJQWpBdXgyUTVBY0JlTGNEMW5sQ0FPYnRBQ2NJd0pwbU15RUFiM29PZ3dDOGVhOGpCT0RkRHZodlF3akF1eDJ3cWlvRVFEc0FBakNtZEtJbkJHQk4ySEluQ01DYW1Ga1FnRGM5aGtNQTV1MkFUaENBTndzYVFRQzBBeUFBWTd6WCswTUExcFJLOUlJQXJBblZRRHNBQWhRa1RXZERBTjY4UGdJQzhHWmNad2pBdkIwUUJRRlk0N3l5R2dUZzNRNUk4b2NBdk5zQlNWNFFnRFVoSzV3Z0FHdWF6SUVBdk9rK0VnTHdaa3dYQ01DYitWRVFnSGM3WUZWMUNNQ2FaNUlDSUFCckFndm02Z0FJb0oxMndFb25DTUNhNkxrUWdEZXZqWUlBdkJuZEZRTHdabDVqQ01DN0hiQXlHQUx3Ymdja0JrQUEzdTJBcEdjZ0FHdUNWemhEQUxRRElBQmp1bzJHQUx3WjlSb0U0TTJjYUFqQXV4MndJaGdDOEc0SEpBVkNBTllFcU5VT2dBQWFwZnBLWndqQW1zYnpJQUJ2dW82QkFMd1oyUjBDTUc4SE5JRUFySEZhRVFJQldPT1ZWQW9Dc01ZL3lSc0NzS2FhcmRzQkVFRGpSTTJIQUx6cE1oWUM4T2JkMXlFQWIyWTNoUUM4MndITFF5RUE3M1pBWWlrSWdIWUFCT0RjRGxqbERBRlkwMmdCQk9CTjUzRVFnRGNqZWtBQTNzeUtnUURNMndGaEVJQTFub21sSVFCci9HelFEb0FBaFltcXExMGdBR3NhTG9BQXZPbjBIZ1RnemZDZUVJQTNNNXRCQU43dGdHVmhFQUR0QUFqQXVSMnczZ2NDc0NiSWl1MEFDRkFZaWZ5dkRnS3dwdU1iRUlBM1k0dEJBTmI0dkFjQmVOUHpXUWpBR29mcUVJQTMxU0NBUnRBWHpOTldoUUFhSWYxcWdUeXRQd1RRQ2o4V3lMTzZRUURlQXVBd1VEUHNnUUM4K1hvN0JGQ0RLZGUxU1FmOWF4a1FRQVdLZUdzVEYzRjZFQVRnemJ4L1g0RUFhckNsbWRZNGwvdkNWbFJkRFFGVTRQd0dyWEhyOFN0TGZhVlNoOG5iZjdZUkY0alBRczlSQUMyVHN1U3RocFZ0eEdEaStYUVFBREFWSURpU29INXVqQXBGVnM0SmxTVmp1UjNWY0NvVURnRzB5Y1J0Qk90eVkxUm9XMEpPcUJzWks1a1RtMCtGSHQrbU9ldzBSVWNJd0FYWE1oUmVFQUJBQUFBQkFBUUFFQUJBQUFBQlZDSWpuU0kzUm9adTU0VHVrckhzbk5oTktuUVRBbWlUTmo0RVpYSmpWTWluVDA1b0FoazdreE9Mb0VJUnViczhUcDRHVElRQVhFZ25Ud09laFFBQUFnQUlBQ0NBZXJTN3BEWEtRd0ExY2ZPOW5hd2h6dm42T2tJQWRWa1dveUZHb0FTb3lmejJEN253cFlhSWVQU0sydStBQU9yd3c2UFB2RWc3RFZFelI0TlRFQUJBQUFBQkFBUUFFQUJBQUFBQkFBUUFFQUJBQUFBQkFBUUFFQUJBQUFBQkFBUUFFQUJBQURXNWhXbG1MY0FteitKejlaaHB2Z0pNRjFmaUluL0dWTE1WSU92aC8zYUd2SmVKeWVhOENMejNibzI5bUczV1J3Rkg2cjZaZ2ZubWZCaVkvWEZRSWlhY2RSL2c3TXV2cG1MS0dRc2d4TklxbjJMT09Rc2dybldQK2dXenpsZ0FJYllHZi9BQTg4NVlBSEVub2RZUG1IakdBZ2lSWEh2d2JVdzlZd0ZFMXBTcUd6SDNqQVVRNG5STTV5dVlmY0g1ZW9BdnFueUI2V2Q5UWNpVnprMVBRUURXVndSdHFqWWxDd0p3NXZiZ0Y1TWhBR3QrckpWd0J3Snc1c0VIMWIrQkFLejV0WEgzYXhDQU5aOVcrUklDc0NhMS9jdG5JQUJyRXF0T3o0WUFuTW5vWC9jd0JHRE4zcG9qN2tFQXptUytIN3dUQXJBbUpiTFhkUWpBR2YyOG9KVVFnRFVYMjdRNkR3RllzeVpvRmdSZ3pZMCtteUVBYjlJaEFHZWNocndDQVJoVFk5OEhEaENBTFVVbTdRdkRVUUJmb2crLzVTZ2dBRmVlKzJ4VE9XWnZHUUxrb2NQeEx1emVNd1I0UXBta3hjVUZCT0NLUS8ranpWaStiMHg5RHRXL24rWWhJQUJYM043LzhRV3VtUSt6TDBTRFE4T2NCUVRnaXMvY2JSVVpyMzNZejMvcll6MTFBZ0p3SmVDckZYNjhqMzVZdjN0ZDcyTXR1Ui8rY243elZYYk5mRVpBQUs2NGpFeXVoeVV3WHdIcUhCempndmxuSzREWGpOMUJtSDIrQXZ6eldGOGNBUE1Wd0hmcDJrQk1QVjhCdWg5dmk0bm5LMEQ1clF1S1l0N1pDdUNVY0xnaFpwMnZBT0UvakhmRHBMTVZ3R1B5bmhCTU9WOEJtaDRaNUlnWlp5dEFzVVVieW1LKytRclE2WGduekRaZkFjcHVXRlFNazgxVWdQYkNjZUNScHBocXRnSjBXWGxpaW0wdStkWkRnRUxCSytWdHRHTWRCQUFRQUVBQUFBRUFCQUFRQUVBQUFBRUFCQUFRQUVBQUFBRUFCQUFRQUVBQUFBRUFCQUFRd0dJQ1F4OXk5NUNHT1BQb0ZZVStDd0hVWWNUQmg1UU0xUkNySHIyaWc3RVFRRVdpcG1tSU9KUUExUW52cnlGYVFRQ1ZXVkpVYTV5RUFHcHkvN3JXeUlZQUFBSUFDS0FtWVFNb2N2L2VUeHNxMURPM2owQStMUGR1Z2ZYSVdKSGM1L1AySWZDQUFBVkdnNmtVQVRteE42alF1SnhRZWZKaHVYOHA1SjlrN1BHTmhIOVBJMWdNQVFBRUFCQUFRQUFBQVFBRUFCQUFRQUExT0xlRElpTW5sa3lGdnNzSlhTY2ZkaWtuOWhzWnV3OEJOTW1LU0lwZmNtSURxTkFydVc2UUQ5dVFFNXRMeHE3bFBsOUZQNEp1RUlBTnFaY0lya01BQUFFQUJGQVZ6N0phd3hrQ3FFbnJVMXFqSEFRQUVBQkFBQlVZNHFkTmxrSUFkYmh4U1p2Y2dRQUFBZ0FJQUNBQWdBQUFBZ0FJQUNBQWdBQUFBZ0FJQUNBQWdBQUFBZ0FJQUNBQWdBQUFBZ0FJQUNBQWdBQUFBZ0FJQUNBQWdBQUFBZ0FJQUNBQWdBQUFBZ0FJQUNBQWdBQUFBZ0FJQUNBQWdBQUFBZ0FJQUNBQWdBQUFBZ0FJQUNBQWdBQUFBZ0FJQUNBQWdBQUFBZ0FJQUNBQWdBQUFBZ0FJQUNBQVVGc0E3NUxBU25nWFNnRm1Yd1JXWWpaS0FJQUFBQUlBQ0FBZ0FJQUFBQUlBQ0FBZ0FJQUFBQUlBQ0FBZ0FJQUFBQUlBQ0FBZ0FJQUFBQUlBQ0FBZ0FOQ0NBTGZTVFpGaDNkMWxLOXZSamFPN05xOWQ5dG5zYWVOSER1blhzMVByRm8zcWhsVXVHMWdwdkdGc3gvaTN4MDZkdi9KNEZnU3dBczE5VEZIYW5BODYyT1R1RGh0OWZPYnBuVitNNzkwaTJNZTcya3ROV3JicjFudmdzSEdUWnN4ZnZDcHAyL2ZKUC85K1B1WEg3Vi8vYjg2SG93YjFiQlBrV2JQN3RLMVhJVUQrdUc1eWk3VHZsTzh0K1RmVFgyMXA1TE8yZFFMY25tL1FlZGpzcE1QcENwN3M3b0ZQQjBZVkMyZzI5UklFc0tVQUlsSDUzbGFKZkFpd1lmbWVDOWxtdjRFTEd3WUZ4aXkrRFFFc0pFMDdBbGhNMXNaT3ZsMDJaME1BU3o2N202YTNPWEpHNmQ1U2pwcmVKdDBtN3lOalVaTlM4L1JXMkZGN2QrUHNzek1CRkUxSG9oVVRnQzB5d09OYTBDdmlXTDUzc3Y3THU4YlIyNWtBYWZZamdCRGZobzY0bTc4OTNPbkxyUVJjVjdMUjFqdktkbloyZjhFS0lETGZyNzRsWHpzWWV3b0NVTitMYmRaTEFEWVZRSWhmb3Z2bkkwa2ZuY3h1RWFpb0JDaXRBUm9RUUlqcGZTMDJRQitYS1pBQkxCY2dkYmNXQkJDekxEWmd3YmNDQXBEOGZrVEpWbXV5TlNHQXhRWmNIc3F3RDZDc0JDaExBWW9xZ0FvQ1dHckE0R3NDR1NBZkFxUnYxWW9BWXRaWUN4NjBkWkdBQURLK1U1QXAxdDNYakFEaVA4Zk5mc2k5M29LakFBcExRTlpHYTFVQWNVdU4wL2ozNDh3dUFoTlNCREpBZm1yQTdRMEtkM1ZUamZlMWE0R1pEMGdaTHlDQUVUYVlYT0Z2VUhwR1ZwVWFJSWFrbXJkOTczczhCVkJZQXNTVnZWYXFBQllMNEZteVFsaEVzell0NmxVTGRGWHl4Z2FadGZjdnRncGtnSHpWZ1B2cmJDaEF2OW03cnQyOG1ISmdaOUx5ZGJzUG44MDRNT2YxZjVoNnpHSnp1anBwZ3dWUEFlN2R0WllBVzlOdEtNRDB1UHBGOC96VEthelgvSk5iMmpnYmY5RG5aanpCMEZTbUFxUXAzakw1dkpVcWdKWFdBTHFvNWIrM05ickZ5Z2VLZC9idGZNRlVnT3ZLTnpXZUFyTFhxQ3pBUS95V3JpaGhKSHhWOFpuaHpIZzlCSGpxMjFYVmJBRjJHK2JRWWtFMlB3cG9mYkNja2VoU3BidVpZbmlxdzdVQzV4TGczcFVZL09hZW1SWGc1VHEyUHd6MDMrSXZEMzZsckRVcFRoT040L2krbkRPQXh3dkU0SzN0WmdyUTJGR0ZQc0R6bTl6bGIyNmpzbjMwTmV4Z3VBMjV4VnFBbWc1bTFvRDlad3RJQUZIMWJYbHN1YUk5ckVneUhPdmhmNXVIQUhRSjhQQ3NZcVlBUkFLbzdxdUtBR0pvb0RTazZDcUdHLzBOeDF3VEJPOE1JS2dhOE5zSnN3U0lGazZxQ0ZEa1hXbm9ySkxIRDc5Z09QWjZnTGpOVzRCYTVoMElIaVhPcERVVzZtUUE4Uy9wWjNWRlFadnJoNW1HWXk0Smdrc0dTRE1qQXhnUmdFZ0FMaStwSlVEeEY2V2hjeVlmbkJWSG5PWHFYa3B3endEQjFQbVczVGZNRUtDT2gxb0NpQmI1cUFFZkh6QWNjMzVIQ041cmdDTENPWXdZenR3azJjdHZ5ZFFTUUtVMWdCQVZMUmZnM0VoaXNGdHB3U1lEeUVvQXZRaVFuZkJiTGFnbGdDd0QzTFIyMzlYWGNnSGVKSzVPY1I0bXVHZUFod0tRaTREMWtxbGJhVGprRXk0VklOdmFuMjFKYWNURUNTenhOYVZ1bDdKQ3NGOEQwQUtrMHIvOXU3akhjS3lobzFRQXEvOUF2S2cwWXVMS2tWdjlpRUduWVlKUEJyaVpKUk9nZ28veTQ0RFZlbklKSUZzRFdIMFJjTTJDNHBERDZOK0p3YzY1NTVkNFpBREoyZUNIQXVqQ2xRdXdpbDRDU0RPQXRRWDRReG9wWWZSeFAwMGpCaDJIQzBZWlFDNEFYUU1PWEtibWM0ZmhXSmtLS2dwd3liSU1vSStqcmhqcG1IdXRXZFk5RmdLa21TbUFmanN4dVBVQm5RQlVFK0M4WlFMTTJVTWxnQkZDRXhXZzRETUFlUndvcUd0bnFaT3UwVUxGTmNBV2l3VDQ0eDFxdEgwRkNKQXJnSDhBRmRtbVRBQmRsSW9aSU9NYmk5WUFBNmszN3pCQ2FHTUpVUEFsZ0s0QlB4dWVPanRKM0ZVbHRKaUtBbXlRbG10dkk0ZUJtNWRRbzY5V0VzZ0Fqd1dnYThBMlJSV2dzVkJSZ00ra2tWcnlCOTN0STR3bEFDNFo0THE1R1VDaEFORkN2VFhBSnZrdlVwcktIL1grTDlSb3B5Y1h3dHpsSVlDeEVoQ3VVN1FLdkU4c0MxenJxNWNCTXZzTEN3UTRNWkVhOVpra05FUEJad0R2eWxUbzFOK2JaOThTeWJLQnUzb0NUSkJmcCtSZlhScUtKeThZSGw4Q0FqekNKVGQzUnlxcUFWUUZpQldxQ1RCdnBEeldSQnBadUlNYWZhR1g0Q1pBbWp3QkNORlFVU2VBRXFCbDd2ODUyMTZBLzhVTEN5ckFWZkpLWXNmWkRnSVpJSThBa1RvRkdlRFNJY05OYWp5K1R0Zk4xZ0prVGVocTVMWUZEdEd5eU50WHFORytZUUlDNUJXZ2VEVXFlTzdwNWZNbXZUUUIyRnlBWTNYZk1mYjd6NWpuSklHZEM2bFJ2M0dDblFDU2U4VS9Ga0JSRFRCU0FZUzdUUVg0OWEwYXhtL2RQa1l5ZnAvK0tlalVaL2dKa0s0M0trQWowNnRBL1diRERjcUVtTWdBRCs3ays1WGZYeE5UWWJMeEUzWXR3eVdCU2VRZHhLTGJDWDRDR0RzS2ZIUTA1MkJTQU9yOGNLd3dJWUQ1S2VEajlTZi92SXR2MXBYalN3YlVlYWJWUmhOWEZ1cGtDZURYOTZoUjEwOEVRd0hTakF2Z1E2Nksvamltc0FKWVVZQTNtMWQwOS9ZdFV5bTRuSTl6OGFBT0grMHhmYmErVFlnazBJZHM4aVZVRU1nQWZ4ZEFzZ2pZWmx3QW53YldGK0RSTi85RzZwbVV3NmZTRlY1UzdEQmFFdmlTdkxhOWZJSkFCbEFxUUo1VjRNM3ZEY1BObjV3Q2NMZW1BR2JTVFhKM2l2U0I1UEFNTjRFTVlDaEFCSGs2WjhkZlg4S3RtVVlxZ0hVemdIbUV6NUFFM2lHdkgydmJWRUNBdnlqeTUzOTRrUXZwcXovOTFRVXdqTHJFUFBsUFI2ZUNFaUJnalNUNzdKMURqWHBORlR3Rk1GVUNKRFhnZS9xSUlKZklQSWZUYmdVa1FKRzFraHZIUElnak80ZmovQVV5QUNrQTNRbDRjakhsSDhlTlZZQUNFMEQzZVExSjVLTkQxR2pvR3dJQzBBTFVjekVxd0haaHBBc2diTjBLbERLdXRTUndaaFRweTJ4SHJnS1lMQUh1dGFsNFNwcGNnSnFCQlowQkhDWU1sNFg2a1JkNjlYcFJJQU5JQktBWEFmcDljZ0h5Vm9BQ0VjQnp0ZlF2LzN5MWxob3RQbDVBQVBNRStMTUdYRHFoUFFIS2ZoY3JDMlgwSTRjbkZlVXJnTWtTSUdxN0d4R0FTQUJsZ3d0VUFGMmZRL0xMd0VhU040eDVxYXRBQnBBTDRGcVgybUNmWG5ZUStQVFhUeVpBdW8zZVQ5RHVUK1RuZEE5T3AwYWRad20rQXNqdUZaOUhBTG9HWER1cGFBbWc4bEZBOFlrSDY4cWoyWEhrVCtFSEJURVdRSGF2K0x3Q1JNa1hBUmNNN3cxWDlDVkZHY0FXQXZoK2VPcHRGeVB4V2VUTkxaeWI3S1dSL2lINkkzbTNPbCs0QmJpdVFJQmE1QkpwcnlRQnRIQXFJQUZDcHA4YTdHRnNnNHZEeU9ITXFObzBmV1E3NnBGM3EvbDJLWUJEM25sempKSm1BRUtBVmtLUkFQZnVXL2ZMUHpBNXVaKzc4VzBHcVBPbnF1eWlCRHo5VFNJdnJ2L3BEcmtHZEl0NSt0OUZoTTFUUUVEclNidk9UUWt4dFZuS01nRUJsR1lBejZmK1JaNG9mZkNERU9jTmYxM1gyRU5OQWR6cURscDI1dHlLdCtvN21kNzJqb0FBRmdwUXVwSmtFV0R5R01DS0FzUjNhQkVSWExhbzQ4UDBGRmd0SXJaci85RWZmYjcveHJlVC8xMUsyQ3NGV0FLZUZvQk9BWHVvQ3VEdzl5YWMxUzRKbXJWNDNjNURwNjQ5dUhVLzQremhuV3NXVGh2MVp1ZHdaMkhQYUNZRDBJdUFQVlFHcUZQQ1Zobmd5UTd0ZTlLMUtVQWtkWFI5L3Z6WlgwMGRBNml5Q0lRQU5pOEJIdlhJRktCZ0NRQUI3Q0lEU0JZQmhnSUVWWUFBZGlrQXVRaVlzOFIwQllBQWRsRUNSQ2gxMzR5YmR4UUk0QTRCN0NFRDZLSVY3UzBnSEJuQVBnVVF5bjQxRWF1REFJVkxBTW05NGcwRmlOWXAyVjByQVFFS2x3Q3lzOEVHQXBRTVZyQTM3NFlRd0Y0Rk1ISzdyYjlvN2d3QkNwa0FhWW9GVUxJSUlDcUFjSGFDQUhhUkFlb1hNYmt6bDJiVXFEc0VzQXNCWEJ1WTNGa2pMMnBVSnM2dExKVS96a3JKWmlLOTJPdnp2RnZGMjJVSklLNnRNNzBJYUNYTUVVRGNWRmtBdHhBektTL2JVOFc4Vy9reXlRQ21Gd0c2V1BNRVFBMG9YQUpVQ1RTeHJ4ZjhJSUM5bEFBMzZzZlNwbElBWFFFZ1FHSE1BSjdVWUJQTEJNRFpJSHNSb0xIeDExT3BNaktBM1pRQVVvQm53eTFKQUJEQWJqS0FpVVZBU3doZzd3SVlYUVNVckcydUFPbVk0UUlYUUhLdmVJa0F0WTNkVEQxV2h3eFErQVNRM1hXWEZzQ3BrUVZMQUFpZ1pRSE02QU9aV0FSNFNlWEFZYUNHQlVnelR3QWppNEFZVjJRQSs4OEE1Y3FiWHdFZ2dCMEpJRThCemkwZ0FJTVNJRjhFUkhwREFBNFpvS0d6MlJVQUF0aVRBRjUxNkhGZHJQdzVwRWNCR1hwTWNXRXJBYkpGUU0xQUN6SkFkZ2FtV0tzWlFIcTN0YVptVndDNUFLZ0JoYThFaUJyUFFRRFdKWUQrWTh6bHEwSUFKaG1BWGdTMEZCQ0Fpd0F4cnhKME12WWMwcDhHUVFETmxnQkgrWjlROUZ0Q0VHcjBTWEEyU0xNQzZBY2trQXkzNnJNTVNaQkFYVVRZWnJRTTlULy8wcklYN204dkF1akcwNHl4NnJPTWtEekxlS3FyMUhxVURQVUZlRjcyd2t2Wml3Q0EreG9BUUFBQUFRQUVBQkFBUUFBQUFRQUVBQkFBUUFCZ053TGcya3ZWMFd0S0FQd01XM1hTTlNYQVJVeUkybHpVbEFBWE1DRnFjd0VDUUFEdENMQWZFNkkyK3pVbFFNb0p6SWk2bkVqUlZoOWdEYVpFWGF6MWdWdExnRldZRW5WWnBURUI5bTNHbktqSjVuMGFFMEFNUlROUVJmUkRoZFlFT0xnWTA2SWVpdzlxVGdBeEJMMEE5WG9BUTRUMkJMalk2aTVtUmgzdXRycW9RUUhFL2g2WUduWG9ZY1crbXpXdkIxZ2NuNG5Kc1QyWjhkWmNibG4xZ3BBNTBWY3dQN2JtU3ZRY29WVUJ4STVhdXpGRHRtVjNyUjFDdXdLSTB4RXRqMkdTYk1leGxoR25oWllGRUdKdGNKZWtlNWdwVzNBdnFVdndXbXZ2MVBvWGhXWXRhbEc4M2J6MWh5NmpOV2cxOUpjUHJaL1hybmlMUmRiL1U3ai9COTJ2Rm94V0p6RmxBQUFBQUVsRlRrU3VRbUNDXCIiLCJtb2R1bGUuZXhwb3J0cyA9IFwiZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFnQUFBQUlBQ0FNQUFBRERwaVRJQUFBREFGQk1WRVVBQUFEL0FBRC9BQUQvQUFEL0FELy9NelAvS2lyK0pDVGZIeC9pSEJ6bEdSbm5GeTdwRlNyckV5ZnNKQ1R1SWlMdkh4L3dIaDd3SENyeEdpanlHU2J5R0NUbkZ5TG9JU0hwSHgvcUhpanJIU2ZzSENYc0d5VHRHaVB1R1NMdUdDRHZIeWZ2SGlid0hpWHdIU1RwSENQcUd5THFHaUhyR2lmckdTYnNIeVhzSGlUdEhTUHRIQ0x0SENIdUd5SHVHeVh2R2lYdkdpVHFHU1BySGlQckhTTHJIQ0hzSENYc0d5WHNHeVR0R2lQdEdpUHRHU0x1SFNMdUhTWHVIQ1h1SENUckd5UHJHeVByR3lMckdpTHNHaVhzSFNUc0hTVHRIQ1B0SENQdEd5THRHeUx0R3lYdUdpVHVHaVRySFNQckhTUHJIQ1BzSENMc0d5WHNHeVRzR3lUdEd5VHRHaVB0SFNQdEhDTHRIQ1h0SENUdUhDVHVHeVRyR3lQc0d5UHNHaUxzSFNYc0hDVHNIQ1RzSENUdEhDUHRHeVB0R3lQdEd5WHRHaVR0SFNUdUhDVHJIQ1BzSENQc0hDUHNHeVhzR3lUc0d5VHNHeVR0SFNQdEhDUHRIQ1B0SENYdEhDVHRHeVR1R3lUc0d5UHNHeVBzSFNQc0hDWHNIQ1RzSENUc0hDVHRHeVB0R3lQdEd5UHRHeVB0R3lUdEhDVHRIQ1RzSENQc0hDUHNHeVBzR3lQc0d5VHNHeVRyR3lUdEhDTHRIQ1B0SENQdEhDUHRHaVR0R3lUdEd5VHNHeUxzR3lQc0hDUHNIQ1BzSENUc0hDVHJHaVR0R3lMdEd5UHRHeVB0R3lQdEhDVHRIQ1R0SENUc0hDTHNHaVBzR2lQc0d5UHNHeVRyR3lUckhDVHRIQ1R0SENMdEhDUHRIQ1B0R2lUdEd5VHRHeVR0R3lUc0hDTHNIQ1BzSENQc0hDVHJIQ1RyR2lUckdpVHRHeUx0R3lQdEhDUHRIQ1R0SENUdEhDVHRIQ1RzR2lMc0dpTHNHeVByR3lUckhDVHJIQ1RySENUdEhDTHRIQ0x0R2lQdEdpVHRHaVR0R3lUdEhDVHNIQ0xzSENMckhDUHJIQ1RyR2lUckdpVHJHaVR0R3lMdEd5THRIQ1B0SENQdEhDVHRIQ1R0R2lUc0dpTHNHaUxyR3lMckd5UHJIQ1RySENUckhDVHRIQ0x0R2lMdEdpTHRHaVB0R2lUdEd5VHRIQ1RzSENMckhDTHJIQ0xyR2lQckdpVHJHaVRyR2lUdEd5THRIQ0x0SENMdEhDTHRIQ1R0R2lUdEdpVHNHaUxyR2lMckdpTHJIQ0xySENUckhDVHJIQ1R0SENUQ3pIRzlBQUFBLzNSU1RsTUFBUUlEQkFVR0J3Z0pDZ3NNRFE0UEVCRVNFeFFWRmhjWUdSb2JIQjBlSHlBaElpTWtKU1luS0NrcUt5d3RMaTh3TVRJek5EVTJOemc1T2pzOFBUNC9RRUZDUTBSRlJrZElTVXBMVEUxT1QxQlJVbE5VVlZaWFdGbGFXMXhkWGw5Z1lXSmpaR1ZtWjJocGFtdHNiVzV2Y0hGeWMzUjFkbmQ0ZVhwN2ZIMStmNENCZ29PRWhZYUhpSW1LaTR5TmpvK1FrWktUbEpXV2w1aVptcHVjblo2Zm9LR2lvNlNscHFlb3FhcXJySzJ1cjdDeHNyTzB0YmEzdUxtNnU3eTl2ci9Bd2NMRHhNWEd4OGpKeXN2TXpjN1AwTkhTMDlUVjF0ZlkyZHJiM04zZTMrRGg0dVBrNWVibjZPbnE2K3p0N3UvdzhmTHo5UFgyOS9qNSt2djgvZjdyQ05rMUFBQVUvVWxFUVZSNDJ1M2RkNXdVWlo3SDhXZnl3QkNHSElhNFlFUUJBK2JFS2lpS2hEMHppTHFMaWlLNm91aUpCNElKNUZ3OFhWRUV4TUNLc0lxZ0lpaGhSUkJZRUJVVUVFSEpPUTdEREFPVDZtQjM3N2E2cTU2ZTZhcHVucWZyK1h6Lzd0ZFR2K2Y1dldlNkt3dEJDQ0dFRUVJSUlTY3U5WC9iOTlYUEZxeFl2L2VvRmFnVUxCdlNrTzVHVHNvRmcrWWRzSUtidzQvUVkzbHEzVHNseU0zL1o5NUlvdEd1U2U0NCthaGxRc1luMDJ4bjZnN1paSm1TZHhBUW50b2pDaXlEOHBjVVdtNVB6ZWNQV1dabFVpcGQvL2QzL3dNSExlUHlBUUwrTDZjdnNrek1SMm0wL25qU2h4NjF6TXpINlhSZmlCWXJMR016UFlQK1gzdkFNamd6TXcxdmY5TGdVc3Zvektwa2RQOHJmMnlabnJtVkRlNS8xZmtXbVpkbGJQOXJMS0g5eDdLZ2lxSDlyN09jNXY4akM2dVorZmUvc2tLclU3aDdhNkptUjBVRi9MMjZpWWQvdmlwblZUWlBmdXFtTTJzbThzR3lSdUZUeXQwZ21ldlNiUE1BL0NWUzg0dW05enMxOGFmb0FMQzF5YStTQ1g5YjA3VCtENDNRL3RXUDFBM0VISjBBUk9OMWtqbC9YOHVzL3ZlUXQzOSsrNkJNMGdXQXlQbFpNdTBWZFV6cWYwdnB5ZjlGVndWbmxtNEFSSU9mSkROZldkZWMvcWZLRGdEcy8zMlFwdWtLUU5SYkpmdm1xMjhNZ0dka2wwZ0Vhd25jQVlpNlAwcW12OGFVR3dZdUxuR2QvNUUvQkd5ZUVnQ2l0dXdFK0xwR1pod0JjUDhsdkxtZE1BU0FxUFdkUk1DdlRVd0E4SmpyM0pjRTcxZXdGSUNvc1V3aVlFT3o0UGUvWHA3cnpsOVZZUkFBa2IxVUltRGpid0lQNEUyM2VjOEo0bG54Q0FCRTljV3lJK0F0QTk3L2M5d3VBZnA3SUsrTGlRUkFWRjBvRWJEMTVHQURtT2t5NS9YQlBBWVNFWUNvSXJzYVp2dXBRZTcvbVc2SGZ3STY0OGdBUk5ZOGlZQ2Rwd2NZd0RzdUUrNGlqQVFnS3MrVkNOaDlabUQ3bjFQa25PNW9ZU2dBVVdtV1JNQ2VOa0Zka3hFdUIwQXJHd3RBWkg0dUViRHZyR0F1U1liTFhTQVhDWE1CaUl6UFpLZkZ6ZzNra25SM3p2UTlZVElBa2Y2SlJFRHUrVUZja3I4NjVsblF5R3dBSW0ycVJNREJDNE8zSWxVUE82WTVSQmdPUUtSOUtCR1FkMG5nVnFTblk1S0hhaGdQUUtST2xnakl2enhvS3pMZE1jZVhCUUJFeWtTSmdJTGZCbXRCMGh4UGdTcHBCb0RqQWlaSUJCenVFS2dGdWNBeHdha0NBTWVUL0xic3ZxaXJnN1Fneml0QmJnVEF2d1NNa3dnNGNtMkFGc1J4MENPdkVnRCtsYVEzSkFLT1hoK1k5VWpPRFovY0JBR0EveGZ3bXV3MnVXNUJXWTh6SEhPN0dRQzJ2Q0lSVUh4RFFOYmpCc2ZVNmdQQW5wZGtBZ0x5aC9KRStNVFdDZ0NFNUVXSmdKTGJBckVlNDhQbk5SWUFZUmt1RVZEYUt3anJzU0I4V3ZjQklEelB5Z1RjRllEMTJCaytxNnNBNElqc3VRbGx2Uk4rT1RJY2syb0tBR2NHeXdUY20rakxVY2R4a0NzWkFDNFpLQlBRTjhHWG83bmpiZ0FCQUxjOEpudDR4a09KdlJ5T093SitBSUI3K3NzRTlFL281YmpROFRRWUFFanlrRXpBWTRtOEhCMGREOG9HZ0N4OXl5UUNCaWJ3Y25RTm44dzBBRWpUUnlaZ2NPSXVSemNBVkJ5QXVGc200R2tBR0FGQTNDVjdrOFp6QURBQ2dPZ2xFL0FDQUl3QUlIcVVTQVQ4Q1FCR0FCQzN5QVM4REFBakFJZ2JpeVVDUmlVQndBUUE0bmRGRWdHamt3QmdBZ0RSVmZaUzFYSEpBREFCZ09oOFJDTGdyV1FBbUFCQWRKSUptSkFDQU0yVEV3c0FvbU9oUk1ERUZBRG9uWHJoTTk3bGFaaXJEa3NFVEU0RmdOYkpEcC94QVcvanRDK1FDSmlTQmdDZFU4bHhmYi9ISDI2WHlkNndNeTBkQURySHNRL245ZVZ3bCtSSkJIeWFBUUNOc3oxOHltZDRIZW1pZ3hJQk16SUJvRzkrQ0oreTkxdTl6OCtWQ1BnaUV3RGF4dkZrOUVlOGo5WHVnRVRBbkVvQTBEV3ZoMC81WFIrRG5iMVBJdUJ2V1FEUU5JNHIvRmY2R2EzdFhvbUFyNm9BUU05MGNkemRrKzFudU5hN0pRSytyZ29BTGVPNEdjcnk5OENmVnJza0FoWlhBNENPU1hMc3ZMM21iOERUZGtnRUxNa0dnSTV4dkJKa3M4OEJUOWttRWJDc0JnQTBqUE1seVg0ZkFYN1NWb21BNzJvQlFMOWM0K2pUcTM2SGJMRlpJbUJGYlFCb2x5ekgxUndIZkIrMmFiNVJJdURIdWdEUUxyTWRiZkwvaXZTbTZ5VUNWdFVEZ0c1eDN1cS95di8xdkUxK2xRajRxUUVBdEQ4U1lIWHpQMnFqZFJJQlArY0FRTE00M3hMK1F3d3U1MjM0czBUQUw0MEJvUHQzZ0hWSERJYXR2MW9pWUgxVEFHaVZ1czU3ZTdiSDRzaDl2WlVTQVJ1YkEwQ3JmQkNuZXp2ci9DQVJzS2tGQUhUS2xTN1BmYjA0RmdQWFhpNFJzT1VrQU9nVWx6NzlHcE9UZHpXL2t3allkZ29BTkVvdmx4YTlINU9SYXl5VENOaHhHZ0QwU1pyYmdidUhZekowOWhLSmdGMnRBS0JQN25KN0JVU25tQXhkYlpGRXdPN1dBTkFtS1d2ZFhnc2JtOWZEVi8xYUltQnZXd0RvTy9OL2RPak1tSXhkWmI1RXdQNXpBS0JONXJwK1Q3ZUp5ZGhaWDBvRUhHZ0hBRjF5aHV1amZnN0U1SENBcUR4SElpRDNBZ0RvRXZkWEFSWGVFcFBCSzgyU0NNaTdHQUNhSkdPTiswdEFYb2pKUXo0eVowb0VITG9VQUpxa25lU0pmL01heGNUWGRJbUEvQ3NBb0VtZWxQMVU2eG1MMGRNL2xneGZjQ1VBOUVpeTdLZWE5VVhMR0F5Zk5sVXkrdUdPQU5BamRXU1hjMXRILzFUVC8vQ3BIMGhHTCt3RUFFMStCc2dlOTJaWkI1L3hmMDEvNmlUSjRFYzZBMENQM0ZBbUZXQWRIdTM3c0ZES2U3TC9NRjBCb0VjZXRTSmwyY00rTCtoTWVWY3ljdEh2QUtCSGhrVVVZSlY5UDZ5RG4rc0ZrOStTREZ6Y0hRQjY1TTlXZVNsZE5XblE3WmVlV2lmTHkxTkFrOGJLOWdaUEJvQVdTWHJaVXBOUEFhQkpubGNEb0t3NUFEVEpnNlZLQkR3QUFGM1NwVUFGZ0RFQTBDYXRmMUVBNENNQTZKUHNUMDg4Z0drQTBDbjlDZ0ZnTkFEUjZoc0FHQTFBcFBRdkFJQXdPazBtQWNEd1hMSUlBSWJuMm1VQU1EeFh6Z1NBNFRubHhUMEFNRHZwM2Q3UEI0RFpxZFI1MUhvQUdKN0d0NzY2TUE4QVppZXBXWWQ3bmgvL3lhSWZmdDZ3WmF1UDdBV0EyZWtHQUFBQUFBQUFBQUFBQUFBQUFBQUFBTlFFQUdvQ0FEVUJnSm9BUUUwQW9DWUFVQk1BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBc05nQVlMRUJ3R0lEZ01VR0FJc05BQlliQUN3MkFBQUFBQUFBQUFBQUFBQUFBQUFBQU5BbkFCQUFFQUFRQUJBQUVBQVFBQkFBRUFBUUFCQUFFQUFRQUJBQUVBQVFBQkFBRUFBUUFCQUFFQUFRQUJBQUVBQVFBQkFBRUFBUUFCQUFFQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUNvQ1FEVUJBQnFBZ0ExQVlDYUFFQk5BS0FtQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUdDeEFjQmlBNERGQmdDTERRQVdHd0FzTmdCWWJBQUFBQUFBQUFBQUFBQUFBQUFBQUFDZ1R3QWdBQ0FBSUlGWjdFNTlwSGs5dktibGZSSTI5LzYreHcwZHoycVVCb0R3VExkTVN1bkcyYVB1T1RzTkFLWUMrR2VPTEJoNmVUb0F6QVZ3UEFjbjNsQVpBQVlET0phOGNSY0R3R1FBeDdMcTdrd0FtSjNkZzZvQndPenNHMWdGQUdabis1MUpBREE3Uzg4RmdOa3BlYkVTQU16T3Vnc0FZSGFLbjB3R2dObjVXeDBBbUoxTlp3UEE3QlRlQkFDelU5WWZBSVpuSkFBTXorZ2tBSmlkOGNrQU1QeC9BQUFNenpBQUdKNytBREE3cFYwQllIYnl6d0tBMmRsWUV3Qm1aMFlTQU16T2Z3SEE3QlNmQndDenM3WXlBTXpPcXdBd08yVVhBY0RzckV3RGdObDVBZ0JtNTFCOUFKaWQ4UUF3L0t4UUd3QTRzNzkzcE56VGIrRElTVXZ6eWg5bXFHeUV1KzhmTVB6dGVUc3FYbER2S0JQRlhEOEdnRE5iS3pCdVVvdWViKzJLUEV6YmNvYW8zV240OXhVcktOcEpSelBaY3dIZ0NjRHhKRi8xZnJFUEFNZlRiT0E2eFFDbUE4QXpnR05wTXFiRUY0QmovMHF1VzZnVWdOVUtBRDRBQ05GNnFUOEF4M0x0R3BVQTNnS0FMd0FpZGJoZkFDSjlTSkU2QUVjYkFzQVhBQ0Y2RlBrRUlFUzc5Y29BV0lNQjRCT0E2RkxrRjRDb01Wc1pnTTBwQVBBSlFQVDBEVUNrdmFzS2dOVVpBSDRCaUJHK0FZaWtzYW9BZkFpQUNBQzZEQW5Ma3c5MFA4VnhRV1hxMHNnQVRyV1BNUGpSTzYrbzdYSlk0ZjJLQU9neXJ2eEVPZC9DYWdDUUEzQmR6VDF2WFJLK04xZ1NFVUEzNXdWWnIxem8yQmxZVUFFQVErSndSdUFPQUVRSjRGam1uaHk2b1RGUkFqaVdiN3VFRlZ0dmh4b0FNd0FRUFFBci8vcVFEVFV0amhxQVpjM01DYTIyWTVrU0FFZXlBQkE5QUt2NG1wQXRmZUFCZ0xYbnN0Qnl4eW9CWUhVSGdBY0FWbTR6K3djN2V3RmdIUW5kQjZ1MVh3bUE4UUR3QXNDYWFmOWdScjRYQU5hUlMwUHFIYUFFd0dZQWVBSmdYV0gvNUF4UEFLemRqZXlEVk42akFvRFZBZ0NlQUlRY1FobmtEWUExTitTb3d0TktBUFFHZ0NjQWhmWm5jSGYzQ01DNjA3NjlScVVxQUx3TEFFOEFyUGEyVDdieENtQjd5S1BjNTZnQThCTUF2QUhvWnorTTR4V0E5YUI5Zy9lcEFGQmFGUUNlQUx4ZysyU21ad0JyN1J0c3BnSkE2TTlaQUZRWXdDajc2VHpQQUt5UUYveHRWQUhnUVFCNEF2Q0svWXlnZHdEL2JkL2lKQlVBWGdPQUp3QlAyVDZaN1IzQWN2c1dIMWNCNEVzQWVBTFEwL2JKRnQ0QmxOcGY3ZGRWQllBZEFQQUV3SDVPdUwxM0FKYjlqVTZ0VlFBb3l3Q0FCd0MvMkQvWnh3ZUEyKzBuaEZRQWlQZkI0SUFDZURMU0o2TUI4Si8ydllsU0ZRQ3VBRUQwQVBiWHNIOXlyUThBSSt3REhWUUI0RFlBUkEvZ0h2c0hXMW8rQUlROHNHdTNDZ0FQQUNCcUFIOE4yZEtUZmdDOGJoOXBwd29BZ3dBUUxZRFBRODdocEt6M0EyQjBoUUdjM0RsUy91Z1p3RWdBUkFlZ1pIaHF5SVp1dFU0TWdNZzUxek9Bc1FDSUJrRFI1RE5DdDVPK0xzRUJ2QU9BQ2dMSTN6aC8xRzJPcCswUHNoSWN3UHNBY0FkUXNiUXJTblFBVXdEZ0EwRDl6VmFpQS9nUUFONEIxRmh1SlR5QWlRRHdES0MrYS84VERNRGJBUEFLNEx3dFZnQUF2QUVBYndEU0Jza2U4SlJZQUVZQXdCT0F6cXVsdzhUblVQRGxFUjhOTWMwemdDY0FFRDJBak51V1JSakc4OG1nUFpFQTlJblR1WUErQUlnU1FOWHJ4KzZQT0V3MEFJYmJSODVYQWVCR0FMZ0RTRTROUzJaMmszTzZQRHp1dStMeWhva0d3R1AyMDBxV0NnQVhBY0RMTllHeEFtQy9IS08rRWdDTkFhQVN3SGtSZjhtZkFBQWxLUUJRQ0tERS9nN0htMVVBMkNnQW9CREF0L1l0UHEwQ3dFd0FxQVFRc2hQd21Rb0FMd0ZBSllEejdic2QrMVVBdUFjQUNnSDhWTTdSM0JNQTREd0FLQVJ3djMyRFExUUFLTW9BZ0RvQVd6THRHMXl0QXNDM0FnRHFBTmh2TVJidExCVUFYZ09BT2dCZmhCVDhqaElBTndOQUdZQ2REZXliYTF5a0JFQTlBS2dDY0RqMExNd1lTd1dBVlFJQWlnQVVYaDFTYnVzU0pRQkdBa0FSZ0YwaHp3Y1R5ZTV2RVkwN2dQWUFVQVBnNHdhaDFUNXFLUUdRbXdvQUZRQ1dkZ29yOXZ3aU5RQW1DZ0NjY0FDclI3WUxyelZubTZVR1FCY0F4QnRBeUd2akJ2WHZkVmxOWjZuWkt5dzFBUGFuQXlEZUFDcVE2b3N0UlFER0NnQ29COURnZTBzVmdBc0FvQjdBMlpzdFZRQldDQUFvQjNCL29hVU13UDBBVUEzZ043TWlqeFJYQUxsVkFhQVdRUGF3UWtzaGdCY0VBRlFDeUhrK3Q5eVI0Z25nYUVNQXFBTlF2Y2VueFJVWUtaNEF4Z2tBS0FHUTNMenJjMThYVjJ5a09BSW9hZ29BUndyc2Q5eXY4YnkySDhsdTRuOXp3dFN2MWhaRzgxZHF5OWV4QmZDNkFJREpLY2dCZ05FWktnQmdjclpsQWNEbzlCUUFNRG16QlFCTXp1RVdBREE2QXdRQVRNNVh5UUF3T1FlYkNnQ1luRnNFQUV6T253VUFUTTdpZEFDWW5DMzFCUUFNVG41YkFRQ0RVM3k5QUlEQktidGRBTURrOUJNQU1EbC9GQUF3K2YvL2ZRSUFCcWVvbHdDQXdjbnJJQUJnY0RhMUZRQXdPRi9XRVFBdytPZmZ5RlFCQUhPejh4b2hBR0J1cHRVVEFEQTN1MjRTQWdER3B1UzFXZ0lBNW1idW1VSUF3TmdzdWxJSUFCaWJPZGNJQVFCVFV6Qyt0UkFBTVBXNHo4TGVWWVVBZ0puZFB6cTNiNDdRS1FBNGdmLzRGNDY0dXJMUUxBQTRBVG04YWNsN1EzcTBTaEVhUmhtQTVtMmxlZGh4c3F4dHdxYk5hYzBiVmhFYVJ4bUFCS3Nwc0FFQUFBQUFBQUFBQUFBQUFBQUFBQUFBYWdJQU5RR0FtZ0JBVFFDZ0pnQW9TRmNBS0FRd1ZYMU4xNFhYTkowK3hTMDNoUy8yWlBVMWRRaXZhUlo5aWx0dUQxL3NDZXBydWl5OHBxWDBLVzdwRjc3WTQ5VFgxRHE4cGwvb1U5enlWUGhpdjZpK3BoekhKVlgwS1c0WkU3N1lBOVhYbE9tNHFLNE9qWXBYdmdoZjYzczFLR3B2ZUZFWDA2aDRaVVA0V2wrclFWSGY2cWd5bU1rcUMxL3JWaHBVTlNXOHFEZm9WSnh5aWVQclZvZHJtSjhOTDJvRm5ZcFRIZzFmNmkwNlZIVnJlRldsTldsVmZPSzRQK2R6SGFwcTVmaS9kQ090aWt2U0RtbDRHRUNJNUx6d3N0NmxWM0ZKQjAzLzFPYUdsN1UvaldiRkk2ODdBRFRXb3E2bkhYVjFwVm54K0Fad0hISFpyRWRoanROQk9weWxEbUFjRndOWTQzWDliVkxjbUhiRlByTWRBRzdUcExLcGpzcUcwYTRUc0xkVm9zdFpsMTZPMGc1bTA3Qlk1ejNIS3MvVHBiVHNJa2R0UTJoWWpITktpV09SSDlTbXVFOGN0UjJxUjh0aW0ybk9iNEFHMmhUWDNmbWtuVGRwV1V6VDNybkVNelRhUTkzdGZMNGVWd1hFTXVtcm5RQnUxcWkrNTV6bHJjbWtiYkhMczg0RjNxN1Q4ZGFjWW1lQi8wUGJZcGJ6bmI4QXJjR2E3Nk5ZVmhjYUY2dmRyQTB1anpPc3E5ZFJpakpuaVFkT3BuVXhTZklNbHordmx6VXI4a09YR3Rkd1pVaE04cUxiWTR4ek5Ddnk5QkszdHl4VW9udis4NURiQTIxZjBxN01zVzVsem1KWHdIZnVkdmwydFhKcmFWZG5nenczQWJPcjBFRi82ZXZXZjJ1QWhwVSs3UHJzN2FWMTZhR1BKRDNqdXFxcmRMem1LbVc1YTYyYjJ0Qkd6NmswMmYyUjl1MjFyUGFzSXZmbjcvZW1rUjV6Nm8vdS9kZjExcHVuSks5Z21NTHRvcDcrL1Q5UTRMNmVHM1Q5WVpXNlNDSmd6eCtTNkdlME9XTys3QTJtbDJwYmM1TjlzdmV3Zk5PZWprYVYrcU9MWldzNVVPT3lyeXVWdm9ybnl3NTB0Y0pwL1BKaDZVTE8wUHEvNmVNUjNzYTAraUYyQ1N2MFRYcmQxQkw1S3Y1VVhlL3EzNG4wUXE3aVdmMWEwdUNJcWQ3dHpkMlJsbkRmU1pwUElPM3pjdDdLdHUzRFFmL1J0azR5clE1UHRaWWQrNDc5cnJTY3R4bGVxUDA4c2haWDVPVjhwWWYyN2lUL3pxN2NveFZadHFMT2lmQlBiSWxGNHBPaTdvbnhOYmFZVnNYblZjYmRFK1RiTEdzbXpZcEQ4cTVNbU44emFXL1RycGhuMnptSjlKTjJRQ2tkaTIyK2FaaFlPelZYNzZGbnNjeWJDWGQxWGM1OHVoYXo1UGRLd0FNYnlRT08wTG5ZWkg2THhEeTJkZm9DZWhlREhId3dZWStiSnQyNWkvNzV6Y1FHSW9GVGRXZytMZlNUZWVjbCtqbU9laS9rMFVhdithcGpFRTV6MVhoOEE2MzBjdVIvY21DZXNaRGMrWU5DR2hwZFZnMXNJSUtVNm5kTU9VUlhLNXJ2bjJrYndDc2VNaTRmUE9jQXpTMG5KU3ZIOU1nUndVM3pybytNbXI1ay9iNzhFbnB0UzFsaDdyWVZjeVlNN2RXTzIya0pJWVFRUWdnaHNjNy9BbnhQYSttMzJqTE9BQUFBQUVsRlRrU3VRbUNDXCIiLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW4iLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuXG5jb25zdCBSYXdIVE1MID0gKHtjaGlsZHJlbiwgY2xhc3NOYW1lID0gXCJcIn0pID0+XG4gICAgPHNwYW4gY2xhc3NOYW1lPXtjbGFzc05hbWV9XG4gICAgICAgICAgZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUw9e3sgX19odG1sOiBjaGlsZHJlbj8ucmVwbGFjZSgvXFxuL2csICc8YnIgLz4nKX19IC8+XG5cbmV4cG9ydCBkZWZhdWx0IFJhd0hUTUw7IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxNyBPcGVuU3RhY2sgRm91bmRhdGlvblxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICoqL1xuXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuXG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFBhbmVsIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcblxuICAgIHJlbmRlcigpIHtcblxuICAgICAgICBsZXQge2NoaWxkcmVuLCBzaG93LCB0aXRsZSwgaGFuZGxlQ2xpY2ssIGNsYXNzTmFtZSwgaWR9ID0gdGhpcy5wcm9wcztcbiAgICAgICAgbGV0IHRoZUlkID0gdGhpcy5wcm9wcy5oYXNPd25Qcm9wZXJ0eSgnaWQnKSA/IGlkIDogYGlkXyR7dGl0bGV9YDtcbiAgICAgICAgbGV0IHRoZUNsYXNzID0gdGhpcy5wcm9wcy5oYXNPd25Qcm9wZXJ0eSgnY2xhc3NOYW1lJykgPyBjbGFzc05hbWUgOiAnJztcblxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e1wicGFuZWwtZ3JvdXAgXCIgKyB0aGVDbGFzc30gaWQ9e3RoZUlkfSA+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJwYW5lbCBwYW5lbC1kZWZhdWx0XCI+XG4gICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzTmFtZT17c2hvdyA/ICdjb2xsYXBzZWQnIDogJyd9IG9uQ2xpY2s9e2hhbmRsZUNsaWNrfT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwicGFuZWwtaGVhZGluZ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoNCBjbGFzc05hbWU9XCJwYW5lbC10aXRsZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7dGl0bGV9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oND5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwicGFuZWwtY29sbGFwc2UgY29sbGFwc2UgaW5cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHtzaG93ICYmXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInBhbmVsLWJvZHlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Y2hpbGRyZW59XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKTtcblxuICAgIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDE4IE9wZW5TdGFjayBGb3VuZGF0aW9uXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiovXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFVSSSBmcm9tIFwidXJpanNcIjtcbmltcG9ydCB7XG4gICAgZG9Mb2dpbixcbiAgICBlbWl0QWNjZXNzVG9rZW4sXG4gICAgZ2V0T0F1dGgyRmxvdyxcbiAgICBSRVNQT05TRV9UWVBFX0lNUExJQ0lULFxuICAgIFJFU1BPTlNFX1RZUEVfQ09ERSxcbiAgICB2YWxpZGF0ZUlkVG9rZW5cbn0gZnJvbSBcIi4vbWV0aG9kc1wiO1xuaW1wb3J0IHtnZXRDdXJyZW50UGF0aE5hbWUsIGdldEN1cnJlbnRIcmVmfSBmcm9tICcuLi8uLi91dGlscy9tZXRob2RzJztcblxuY2xhc3MgQWJzdHJhY3RBdXRob3JpemF0aW9uQ2FsbGJhY2tSb3V0ZSBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG5cbiAgICBjb25zdHJ1Y3Rvcihpc3N1ZXIsIGF1ZGllbmNlLCBwcm9wcykge1xuICAgICAgICAvLyBjb25zb2xlLmxvZygnQWJzdHJhY3RBdXRob3JpemF0aW9uQ2FsbGJhY2tSb3V0ZTo6Y29uc3RydWN0b3IgaW5pdCcpO1xuICAgICAgICBzdXBlcihwcm9wcyk7XG5cbiAgICAgICAgLy8gaW5pdGlhbCBzdGF0ZVxuICAgICAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgICAgICAgaWRfdG9rZW5faXNfdmFsaWQ6IHRydWUsXG4gICAgICAgICAgICBlcnJvcjogbnVsbCxcbiAgICAgICAgICAgIGVycm9yX2Rlc2NyaXB0aW9uOiBudWxsLFxuICAgICAgICAgICAgaXNzdWVyOiBpc3N1ZXIsXG4gICAgICAgICAgICBhdWRpZW5jZTogYXVkaWVuY2UsXG4gICAgICAgICAgICBhY2Nlc3NUb2tlbjogbnVsbCxcbiAgICAgICAgICAgIGZsb3c6IGdldE9BdXRoMkZsb3coKSxcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBfaW1wbGljaXRGbG93KCkge1xuICAgICAgICAvLyBnZXQgZGF0YSBmcm9tIHVybCBoYXNoXG4gICAgICAgIGNvbnN0IHthY2Nlc3NfdG9rZW4sIGlkX3Rva2VuLCBzZXNzaW9uX3N0YXRlLCBlcnJvciwgZXJyb3JfZGVzY3JpcHRpb24sIGV4cGlyZXNfaW59ID0gdGhpcy5leHRyYWN0SGFzaFBhcmFtcygpO1xuXG4gICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgICAgLy8gaWYgZXJyb3IgY29uZGl0aW9uIHNob3J0IGN1dC4uLlxuICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7Li4udGhpcy5zdGF0ZSwgZXJyb3I6IGVycm9yLCBlcnJvcl9kZXNjcmlwdGlvbjogZXJyb3JfZGVzY3JpcHRpb259KVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFhY2Nlc3NfdG9rZW4pIHtcbiAgICAgICAgICAgIC8vIHJlIHN0YXJ0IGZsb3dcbiAgICAgICAgICAgIGRvTG9naW4oZ2V0Q3VycmVudFBhdGhOYW1lKCkpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgaWRfdG9rZW5faXNfdmFsaWQgPSBpZF90b2tlbiA/IHZhbGlkYXRlSWRUb2tlblxuICAgICAgICAoXG4gICAgICAgICAgICBpZF90b2tlbixcbiAgICAgICAgICAgIHRoaXMuc3RhdGUuaXNzdWVyLFxuICAgICAgICAgICAgdGhpcy5zdGF0ZS5hdWRpZW5jZVxuICAgICAgICApIDogZmFsc2U7XG5cbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgICAuLi50aGlzLnN0YXRlLFxuICAgICAgICAgICAgaWRfdG9rZW5faXNfdmFsaWQ6IGlkX3Rva2VuX2lzX3ZhbGlkLFxuICAgICAgICAgICAgZXJyb3I6ICFpZF90b2tlbl9pc192YWxpZCA/IFwiSW52YWxpZCBUb2tlblwiIDogbnVsbCxcbiAgICAgICAgICAgIGVycm9yX2Rlc2NyaXB0aW9uOiAhaWRfdG9rZW5faXNfdmFsaWQgPyBcIkludmFsaWQgVG9rZW5cIiA6IG51bGwsXG4gICAgICAgICAgICBhY2Nlc3NUb2tlbjogYWNjZXNzX3Rva2VuLFxuICAgICAgICB9KVxuXG4gICAgICAgIGlmIChhY2Nlc3NfdG9rZW4gJiYgaWRfdG9rZW5faXNfdmFsaWQpIHtcbiAgICAgICAgICAgIHRoaXMucHJvcHMub25Vc2VyQXV0aChhY2Nlc3NfdG9rZW4sIGlkX3Rva2VuLCBzZXNzaW9uX3N0YXRlLCBleHBpcmVzX2luKTtcblxuICAgICAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgaWYgKHdpbmRvdy5sb2NhdGlvbiAhPT0gd2luZG93LnBhcmVudC5sb2NhdGlvbikge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIkFic3RyYWN0QXV0aG9yaXphdGlvbkNhbGxiYWNrUm91dGU6Ol9pbXBsaWNpdEZsb3cgcnVubmluZyBpbnNpZGUgaWZyYW1lLCBzZW5kaW5nIGF1dGggc3RhdGUgdG8gcGFyZW50XCIpO1xuICAgICAgICAgICAgICAgICAgICB3aW5kb3cucGFyZW50LnBvc3RNZXNzYWdlKEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbjogJ1NFVF9BVVRIX0lORk9fU0lMRU5UTFknLFxuICAgICAgICAgICAgICAgICAgICAgICAgYWNjZXNzX3Rva2VuOiBhY2Nlc3NfdG9rZW4sXG4gICAgICAgICAgICAgICAgICAgICAgICBpZF90b2tlbjogaWRfdG9rZW4sXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXNzaW9uX3N0YXRlOiBzZXNzaW9uX3N0YXRlLFxuICAgICAgICAgICAgICAgICAgICAgICAgZXhwaXJlc19pbjogZXhwaXJlc19pbixcbiAgICAgICAgICAgICAgICAgICAgfSksIHdpbmRvdy5sb2NhdGlvbi5vcmlnaW4pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIF9jb2RlRmxvdygpIHtcblxuICAgICAgICBjb25zdCB7Y29kZSwgc2Vzc2lvbl9zdGF0ZSwgZXJyb3IsIGVycm9yX2Rlc2NyaXB0aW9ufSA9IHRoaXMuZXh0cmFjdEhhc2hQYXJhbXMoKTtcblxuICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICAgIC8vIGlmIGVycm9yIGNvbmRpdGlvbiBzaG9ydCBjdXQuLi5cbiAgICAgICAgICAgIC8vIHdlIHNldCBoZXJlIGRpcmVjdGx5IGJjIHdlIGFyZSBhdCBjb25zdHJ1Y3Rpb24gdGltZVxuICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7Li4udGhpcy5zdGF0ZSwgZXJyb3I6IGVycm9yLCBlcnJvcl9kZXNjcmlwdGlvbjogZXJyb3JfZGVzY3JpcHRpb259KVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFjb2RlKSB7XG4gICAgICAgICAgICAvLyByZSBzdGFydCBmbG93XG4gICAgICAgICAgICBkb0xvZ2luKGdldEN1cnJlbnRQYXRoTmFtZSgpKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCB1cmwgPSBVUkkoZ2V0Q3VycmVudEhyZWYoKSk7XG4gICAgICAgIGxldCBxdWVyeSA9IHVybC5zZWFyY2godHJ1ZSk7XG4gICAgICAgIGxldCBiYWNrVXJsID0gcXVlcnkuaGFzT3duUHJvcGVydHkoJ0JhY2tVcmwnKSA/IHF1ZXJ5WydCYWNrVXJsJ10gOiBudWxsO1xuICAgICAgICAvLyBhc3luYyBjb2RlXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKGBBYnN0cmFjdEF1dGhvcml6YXRpb25DYWxsYmFja1JvdXRlOjpfY29kZUZsb3cgZ2V0dGluZyBhY2Nlc3MgdG9rZW4gd2l0aCBjb2RlICR7Y29kZX1gKVxuXG4gICAgICAgIGVtaXRBY2Nlc3NUb2tlbihjb2RlLCBiYWNrVXJsKS50aGVuKHJlc3BvbnNlID0+IHtcbiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKGBBYnN0cmFjdEF1dGhvcml6YXRpb25DYWxsYmFja1JvdXRlOjpfY29kZUZsb3cgW0FTWU5DXSBnb3QgcmVzcG9uc2UgJHtKU09OLnN0cmluZ2lmeShyZXNwb25zZSl9YCk7XG4gICAgICAgICAgICBsZXQge2lkX3Rva2VuLCBhY2Nlc3NfdG9rZW4sIHJlZnJlc2hfdG9rZW4sIGV4cGlyZXNfaW4sIGVycm9yOiBlcnJvcjIsIGVycm9yX2Rlc2NyaXB0aW9uOiBlcnJvcl9kZXNjcmlwdGlvbjJ9ID0gcmVzcG9uc2U7XG5cbiAgICAgICAgICAgIGlmIChlcnJvcjIpIHtcbiAgICAgICAgICAgICAgICAvLyBzZXQgd2l0aFxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgICAgICAgICAgICAuLi50aGlzLnN0YXRlLFxuICAgICAgICAgICAgICAgICAgICBlcnJvcjogZXJyb3IyLFxuICAgICAgICAgICAgICAgICAgICBlcnJvcl9kZXNjcmlwdGlvbjogZXJyb3JfZGVzY3JpcHRpb24yXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBpZF90b2tlbl9pc192YWxpZCA9IGlkX3Rva2VuID8gdmFsaWRhdGVJZFRva2VuXG4gICAgICAgICAgICAoXG4gICAgICAgICAgICAgICAgaWRfdG9rZW4sXG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZS5pc3N1ZXIsXG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZS5hdWRpZW5jZVxuICAgICAgICAgICAgKSA6IGZhbHNlO1xuXG4gICAgICAgICAgICAvLyB0aGlzLnN0YXRlLmlkX3Rva2VuX2lzX3ZhbGlkID0gaWRfdG9rZW5faXNfdmFsaWQ7XG4gICAgICAgICAgICAvL3RoaXMuc3RhdGUuZXJyb3IgPSAhaWRfdG9rZW5faXNfdmFsaWQgPyBcIkludmFsaWQgVG9rZW5cIiA6IGVycm9yO1xuICAgICAgICAgICAgLy90aGlzLnN0YXRlLmVycm9yX2Rlc2NyaXB0aW9uID0gIWlkX3Rva2VuX2lzX3ZhbGlkID8gXCJJbnZhbGlkIFRva2VuXCIgOiBlcnJvcl9kZXNjcmlwdGlvbjtcblxuICAgICAgICAgICAgLy8gc2V0IHdpdGhcbiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKGBBYnN0cmFjdEF1dGhvcml6YXRpb25DYWxsYmFja1JvdXRlOjpfY29kZUZsb3cgW0FTWU5DXSBzZXR0aW5nIHN0YXRlYCk7XG4gICAgICAgICAgICAvLyBzZXQgdGhlIHN0YXRlIGFzeW5jaHJvbnVzbHkgYmMgd2UgYXJlIG5vdCAgb24gY29uc3RydWN0b3IgY29udGV4dFxuICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgICAgICAgLi4udGhpcy5zdGF0ZSxcbiAgICAgICAgICAgICAgICBpZF90b2tlbl9pc192YWxpZDogaWRfdG9rZW5faXNfdmFsaWQsXG4gICAgICAgICAgICAgICAgYWNjZXNzVG9rZW46IGFjY2Vzc190b2tlbixcbiAgICAgICAgICAgICAgICBlcnJvcjogIWlkX3Rva2VuX2lzX3ZhbGlkID8gXCJJbnZhbGlkIFRva2VuXCIgOiBlcnJvcixcbiAgICAgICAgICAgICAgICBlcnJvcl9kZXNjcmlwdGlvbjogIWlkX3Rva2VuX2lzX3ZhbGlkID8gXCJJbnZhbGlkIFRva2VuXCIgOiBlcnJvcl9kZXNjcmlwdGlvbixcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBpZiAoYWNjZXNzX3Rva2VuICYmIGlkX3Rva2VuX2lzX3ZhbGlkKSB7XG4gICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coYEFic3RyYWN0QXV0aG9yaXphdGlvbkNhbGxiYWNrUm91dGU6Ol9jb2RlRmxvdyBbQVNZTkNdIG9uVXNlckF1dGhgKTtcbiAgICAgICAgICAgICAgICB0aGlzLnByb3BzLm9uVXNlckF1dGgoYWNjZXNzX3Rva2VuLCBpZF90b2tlbiwgc2Vzc2lvbl9zdGF0ZSwgZXhwaXJlc19pbiwgcmVmcmVzaF90b2tlbik7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh3aW5kb3cubG9jYXRpb24gIT09IHdpbmRvdy5wYXJlbnQubG9jYXRpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiQWJzdHJhY3RBdXRob3JpemF0aW9uQ2FsbGJhY2tSb3V0ZTo6X2NvZGVGbG93IHJ1bm5pbmcgaW5zaWRlIGlmcmFtZSwgc2VuZGluZyBhdXRoIHN0YXRlIHRvIHBhcmVudFwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy5wYXJlbnQucG9zdE1lc3NhZ2UoSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbjogJ1NFVF9BVVRIX0lORk9fU0lMRU5UTFknLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjY2Vzc190b2tlbjogYWNjZXNzX3Rva2VuLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkX3Rva2VuOiBpZF90b2tlbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXNzaW9uX3N0YXRlOiBzZXNzaW9uX3N0YXRlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGlyZXNfaW46IGV4cGlyZXNfaW4sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVmcmVzaF90b2tlbjogcmVmcmVzaF90b2tlblxuICAgICAgICAgICAgICAgICAgICAgICAgfSksIHdpbmRvdy5sb2NhdGlvbi5vcmlnaW4pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBjb21wb25lbnREaWRNb3VudCgpIHtcblxuICAgICAgICBsZXQge2Zsb3d9ID0gdGhpcy5zdGF0ZTtcblxuICAgICAgICBpZiAoZmxvdyA9PT0gUkVTUE9OU0VfVFlQRV9JTVBMSUNJVCkge1xuICAgICAgICAgICAgdGhpcy5faW1wbGljaXRGbG93KCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZmxvdyA9PT0gUkVTUE9OU0VfVFlQRV9DT0RFKSB7XG4gICAgICAgICAgICB0aGlzLl9jb2RlRmxvdygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZXh0cmFjdEhhc2hQYXJhbXMoKSB7XG4gICAgICAgIHJldHVybiBVUkkucGFyc2VRdWVyeSh0aGlzLnByb3BzLmxvY2F0aW9uLmhhc2guc3Vic3RyKDEpKTtcbiAgICB9XG5cbiAgICBzaG91bGRDb21wb25lbnRVcGRhdGUobmV4dFByb3BzLCBuZXh0U3RhdGUsIG5leHRDb250ZXh0KSB7XG5cbiAgICAgICAgaWYgKG5leHRTdGF0ZS5hY2Nlc3NUb2tlbiAhPT0gdGhpcy5zdGF0ZS5hY2Nlc3NUb2tlbikge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5leHRTdGF0ZS5lcnJvciAhPT0gdGhpcy5zdGF0ZS5lcnJvcikge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobmV4dFN0YXRlLmlkX3Rva2VuX2lzX3ZhbGlkICE9PSB0aGlzLnN0YXRlLmlkX3Rva2VuX2lzX3ZhbGlkKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBjb21wb25lbnREaWRVcGRhdGUocHJldlByb3BzLCBwcmV2U3RhdGUsIHNuYXBzaG90KSB7XG4gICAgICAgIC8vIGlmIHdlIGhhdmUgYW4gYWNjZXNzIHRva2VuIHJlZnJlc2ggLi4uXG4gICAgICAgIGlmIChwcmV2U3RhdGUuYWNjZXNzVG9rZW4gIT09IHRoaXMuc3RhdGUuYWNjZXNzVG9rZW4pIHtcblxuICAgICAgICAgICAgbGV0IHVybCA9IFVSSShnZXRDdXJyZW50SHJlZigpKTtcbiAgICAgICAgICAgIGxldCBxdWVyeSA9IHVybC5zZWFyY2godHJ1ZSk7XG4gICAgICAgICAgICBsZXQgZnJhZ21lbnQgPSBVUkkucGFyc2VRdWVyeSh1cmwuZnJhZ21lbnQoKSk7XG5cbiAgICAgICAgICAgIC8vIHB1cmdlIGZyYWdtZW50XG4gICAgICAgICAgICBkZWxldGUgZnJhZ21lbnRbJ2NvZGUnXTtcbiAgICAgICAgICAgIGRlbGV0ZSBmcmFnbWVudFsnYWNjZXNzX3Rva2VuJ107XG4gICAgICAgICAgICBkZWxldGUgZnJhZ21lbnRbJ2V4cGlyZXNfaW4nXTtcbiAgICAgICAgICAgIGRlbGV0ZSBmcmFnbWVudFsndG9rZW5fdHlwZSddO1xuICAgICAgICAgICAgZGVsZXRlIGZyYWdtZW50WydzY29wZSddO1xuICAgICAgICAgICAgZGVsZXRlIGZyYWdtZW50WydpZF90b2tlbiddO1xuICAgICAgICAgICAgZGVsZXRlIGZyYWdtZW50WydzZXNzaW9uX3N0YXRlJ107XG5cbiAgICAgICAgICAgIGxldCBiYWNrVXJsID0gcXVlcnkuaGFzT3duUHJvcGVydHkoJ0JhY2tVcmwnKSA/IHF1ZXJ5WydCYWNrVXJsJ10gOiAnL2FwcCc7XG5cbiAgICAgICAgICAgIGlmIChmcmFnbWVudC5sZW5naHQgPiAwKSB7XG4gICAgICAgICAgICAgICAgYmFja1VybCArPSBgIyR7VVJJLmJ1aWxkUXVlcnkoZnJhZ21lbnQpfWA7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuX2NhbGxiYWNrKGJhY2tVcmwpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQWJzdHJhY3RcbiAgICAgKiBAcGFyYW0gZXJyb3JcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIF9jYWxsYmFjayhiYWNrVXJsKSB7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQWJzdHJhY3RcbiAgICAgKiBAcGFyYW0gZXJyb3JcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIF9yZWRpcmVjdDJFcnJvcihlcnJvcikge1xuICAgIH1cblxuICAgIHJlbmRlcigpIHtcblxuICAgICAgICBsZXQge2lkX3Rva2VuX2lzX3ZhbGlkLCBlcnJvciwgZXJyb3JfZGVzY3JpcHRpb259ID0gdGhpcy5zdGF0ZTtcblxuICAgICAgICBpZiAoZXJyb3IgIT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3JlZGlyZWN0MkVycm9yKGAke2Vycm9yfSAtICR7ZXJyb3JfZGVzY3JpcHRpb259LmApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFpZF90b2tlbl9pc192YWxpZCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3JlZGlyZWN0MkVycm9yKFwiVG9rZW4gVmFsaWRhdGlvbiBFcnJvciAtIFRva2VuIGlzIGludmFsaWQuXCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBBYnN0cmFjdEF1dGhvcml6YXRpb25DYWxsYmFja1JvdXRlO1xuXG4iLCIvKipcbiAqIENvcHlyaWdodCAyMDE4IE9wZW5TdGFjayBGb3VuZGF0aW9uXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiovXG5cbmltcG9ydCBUIGZyb20gXCJpMThuLXJlYWN0L2Rpc3QvaTE4bi1yZWFjdFwiO1xuaW1wb3J0IHthdXRoRXJyb3JIYW5kbGVyLCBjcmVhdGVBY3Rpb24sIGdldFJlcXVlc3QsIHNob3dNZXNzYWdlLCBzdGFydExvYWRpbmcsIHN0b3BMb2FkaW5nfSBmcm9tIFwiLi4vLi4vdXRpbHMvYWN0aW9uc1wiO1xuaW1wb3J0IHtidWlsZEFQSUJhc2VVcmwsIGdldEFsbG93ZWRVc2VyR3JvdXBzfSBmcm9tICcuLi8uLi91dGlscy9tZXRob2RzJztcbmltcG9ydCB7IGdldEFjY2Vzc1Rva2VuLCBzdG9yZUF1dGhJbmZvLCBpbml0TG9nT3V0fSBmcm9tICcuL21ldGhvZHMnO1xuXG4vKipcbiAqIEBpZ25vcmVcbiAqL1xuZXhwb3J0IGNvbnN0IFNFVF9MT0dHRURfVVNFUiA9ICdTRVRfTE9HR0VEX1VTRVInO1xuZXhwb3J0IGNvbnN0IExPR09VVF9VU0VSID0gJ0xPR09VVF9VU0VSJztcbmV4cG9ydCBjb25zdCBSRVFVRVNUX1VTRVJfSU5GTyA9ICdSRVFVRVNUX1VTRVJfSU5GTyc7XG5leHBvcnQgY29uc3QgUkVDRUlWRV9VU0VSX0lORk8gPSAnUkVDRUlWRV9VU0VSX0lORk8nO1xuZXhwb3J0IGNvbnN0IENMRUFSX1NFU1NJT05fU1RBVEUgPSAnQ0xFQVJfU0VTU0lPTl9TVEFURSc7XG5leHBvcnQgY29uc3QgVVBEQVRFX1NFU1NJT05fU1RBVEVfU1RBVFVTID0gJ1VQREFURV9TRVNTSU9OX1NUQVRFX1NUQVRVUyc7XG5leHBvcnQgY29uc3QgU0VTU0lPTl9TVEFURV9TVEFUVVNfVU5DSEFOR0VEID0gJ3VuY2hhbmdlZCc7XG5leHBvcnQgY29uc3QgU0VTU0lPTl9TVEFURV9TVEFUVVNfQ0hBTkdFRCA9ICdjaGFuZ2VkJztcbmV4cG9ydCBjb25zdCBTRVNTSU9OX1NUQVRFX1NUQVRVU19FUlJPUiA9ICdlcnJvcic7XG5leHBvcnQgY29uc3QgVVBEQVRFX1VTRVJfSU5GTyA9ICdVUERBVEVfVVNFUl9JTkZPJztcblxuZXhwb3J0IGNvbnN0IG9uVXNlckF1dGggPSAoYWNjZXNzVG9rZW4sIGlkVG9rZW4sIHNlc3Npb25TdGF0ZSwgZXhwaXJlc0luID0gMCwgcmVmcmVzaFRva2VuID0gbnVsbCkgPT4gKGRpc3BhdGNoKSA9PiB7XG5cbiAgICBzdG9yZUF1dGhJbmZvKGFjY2Vzc1Rva2VuLCBleHBpcmVzSW4sIHJlZnJlc2hUb2tlbiwgaWRUb2tlbik7XG5cbiAgICBkaXNwYXRjaCh7XG4gICAgICAgIHR5cGU6IFNFVF9MT0dHRURfVVNFUixcbiAgICAgICAgcGF5bG9hZDogeyBzZXNzaW9uU3RhdGUgfVxuICAgIH0pO1xufVxuXG5leHBvcnQgY29uc3QgZG9Mb2dvdXQgPSAoYmFja1VybCkgPT4gKGRpc3BhdGNoLCBnZXRTdGF0ZSkgPT4ge1xuICAgIGRpc3BhdGNoKHtcbiAgICAgICAgdHlwZTogTE9HT1VUX1VTRVIsXG4gICAgICAgIHBheWxvYWQ6IHtiYWNrVXJsOiBiYWNrVXJsfVxuICAgIH0pO1xufVxuXG5leHBvcnQgY29uc3QgZ2V0VXNlckluZm8gPSAoZXhwYW5kID0gJ2dyb3VwcycsIGZpZWxkcz0nJywgYmFja1VybCA9IG51bGwsIGhpc3RvcnkgPSBudWxsLCBlcnJvckhhbmRsZXIgPSBudWxsICkgPT5cbiAgICBhc3luYyAoZGlzcGF0Y2gsIGdldFN0YXRlKSA9PiB7XG5cbiAgICBsZXQgQWxsb3dlZFVzZXJHcm91cHMgPSBnZXRBbGxvd2VkVXNlckdyb3VwcygpO1xuICAgIEFsbG93ZWRVc2VyR3JvdXBzID0gQWxsb3dlZFVzZXJHcm91cHMgIT09ICcnID8gQWxsb3dlZFVzZXJHcm91cHMuc3BsaXQoJyAnKSA6IFtdO1xuICAgIGxldCB7bG9nZ2VkVXNlclN0YXRlfSA9IGdldFN0YXRlKCk7XG4gICAgbGV0IHttZW1iZXJ9ID0gbG9nZ2VkVXNlclN0YXRlO1xuXG4gICAgbGV0IGFjY2Vzc1Rva2VuID0gYXdhaXQgZ2V0QWNjZXNzVG9rZW4oKTtcblxuICAgIGlmIChtZW1iZXIgIT0gbnVsbCkge1xuICAgICAgICBpZihoaXN0b3J5ICE9IG51bGwgJiYgYmFja1VybCAhPSBudWxsKVxuICAgICAgICAgICAgaGlzdG9yeS5wdXNoKGJhY2tVcmwpO1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgfVxuXG4gICAgaWYoZXJyb3JIYW5kbGVyID09IG51bGwpXG4gICAgICAgIGVycm9ySGFuZGxlciA9IGF1dGhFcnJvckhhbmRsZXI7XG5cbiAgICBkaXNwYXRjaChzdGFydExvYWRpbmcoKSk7XG5cbiAgICBsZXQgcGFyYW1zID0ge1xuICAgICAgICBhY2Nlc3NfdG9rZW46IGFjY2Vzc1Rva2VuLFxuICAgICAgICBleHBhbmQgOiBleHBhbmQsXG4gICAgfVxuXG4gICAgaWYoZmllbGRzKXtcbiAgICAgICAgcGFyYW1zWydmaWVsZHMnXSA9IGZpZWxkcztcbiAgICB9XG5cbiAgICByZXR1cm4gZ2V0UmVxdWVzdChcbiAgICAgICAgY3JlYXRlQWN0aW9uKFJFUVVFU1RfVVNFUl9JTkZPKSxcbiAgICAgICAgY3JlYXRlQWN0aW9uKFJFQ0VJVkVfVVNFUl9JTkZPKSxcbiAgICAgICAgYnVpbGRBUElCYXNlVXJsKGAvYXBpL3YxL21lbWJlcnMvbWVgKSxcbiAgICAgICAgZXJyb3JIYW5kbGVyXG4gICAgKShwYXJhbXMpKGRpc3BhdGNoLCBnZXRTdGF0ZSkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICBkaXNwYXRjaChzdG9wTG9hZGluZygpKTtcblxuICAgICAgICAgICAgbGV0IHttZW1iZXJ9ID0gZ2V0U3RhdGUoKS5sb2dnZWRVc2VyU3RhdGU7XG4gICAgICAgICAgICBpZiAobWVtYmVyID09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBsZXQgZXJyb3JfbWVzc2FnZSA9IHtcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6ICdFUlJPUicsXG4gICAgICAgICAgICAgICAgICAgIGh0bWw6IFQudHJhbnNsYXRlKFwiZXJyb3JzLnVzZXJfbm90X3NldFwiKSxcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogJ2Vycm9yJ1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgZGlzcGF0Y2goc2hvd01lc3NhZ2UoZXJyb3JfbWVzc2FnZSwgaW5pdExvZ091dCkpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBjaGVjayB1c2VyIGdyb3VwcyAoIGlmIGRlZmluZWQgKVxuICAgICAgICAgICAgaWYgKEFsbG93ZWRVc2VyR3JvdXBzLmxlbmd0aCA+IDApIHtcblxuICAgICAgICAgICAgICAgIGxldCBhbGxvd2VkR3JvdXBzID0gbWVtYmVyLmdyb3Vwcy5maWx0ZXIoKGdyb3VwLCBpZHgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEFsbG93ZWRVc2VyR3JvdXBzLmluY2x1ZGVzKGdyb3VwLmNvZGUpO1xuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgaWYgKGFsbG93ZWRHcm91cHMubGVuZ3RoID09PSAwKSB7XG5cbiAgICAgICAgICAgICAgICAgICAgbGV0IGVycm9yX21lc3NhZ2UgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogJ0VSUk9SJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGh0bWw6IFQudHJhbnNsYXRlKFwiZXJyb3JzLnVzZXJfbm90X2F1dGh6XCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ2Vycm9yJ1xuICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgIGRpc3BhdGNoKHNob3dNZXNzYWdlKGVycm9yX21lc3NhZ2UsIGluaXRMb2dPdXQpKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYoaGlzdG9yeSAhPSBudWxsICYmIGJhY2tVcmwgIT0gbnVsbClcbiAgICAgICAgICAgICAgICBoaXN0b3J5LnB1c2goYmFja1VybCk7XG4gICAgICAgIH1cbiAgICApO1xufTtcblxuZXhwb3J0IGNvbnN0IHVwZGF0ZVVzZXJJbmZvID0gKHVwZGF0ZWRNZW1iZXIpID0+IChkaXNwYXRjaCwgZ2V0U3RhdGUpID0+IHtcbiAgICBsZXQge2xvZ2dlZFVzZXJTdGF0ZX0gPSBnZXRTdGF0ZSgpO1xuICAgIGxldCB7bWVtYmVyfSA9IGxvZ2dlZFVzZXJTdGF0ZTtcbiAgICBpZihtZW1iZXIgPT0gbnVsbCl7XG4gICAgICAgIHRocm93IEVycm9yKFwiTWVtYmVyIGlzIG5vdCBzZXQuXCIpO1xuICAgIH1cbiAgICBpZih1cGRhdGVkTWVtYmVyLmlkICE9IG1lbWJlci5pZCl7XG4gICAgICAgIHRocm93IEVycm9yKFwiTWVtYmVyIGlzIG5vdCB0aGUgc2FtZS5cIik7XG4gICAgfVxuICAgIGRpc3BhdGNoKHtcbiAgICAgICAgdHlwZTogVVBEQVRFX1VTRVJfSU5GTyxcbiAgICAgICAgcGF5bG9hZDogey4uLnVwZGF0ZWRNZW1iZXJ9XG4gICAgfSk7XG5cbn1cblxuZXhwb3J0IGNvbnN0IHVwZGF0ZVNlc3Npb25TdGF0ZVN0YXR1cyA9IChuZXdTdGF0dXMpID0+IChkaXNwYXRjaCwgZ2V0U3RhdGUpID0+IHtcbiAgICBkaXNwYXRjaCh7XG4gICAgICAgIHR5cGU6IFVQREFURV9TRVNTSU9OX1NUQVRFX1NUQVRVUyxcbiAgICAgICAgcGF5bG9hZDoge3Nlc3Npb25TdGF0ZVN0YXR1czogbmV3U3RhdHVzfVxuICAgIH0pO1xufSIsImltcG9ydCB7XG4gICAgYmFzZTY0VVJMRW5jb2RlLFxuICAgIGdldEF1dGhDYWxsYmFjayxcbiAgICBnZXRDdXJyZW50TG9jYXRpb24sXG4gICAgZ2V0Q3VycmVudFBhdGhOYW1lLFxuICAgIGdldEZyb21Mb2NhbFN0b3JhZ2UsXG4gICAgcmVtb3ZlRnJvbUxvY2FsU3RvcmFnZSxcbiAgICBnZXRPcmlnaW4sXG4gICAgcHV0T25Mb2NhbFN0b3JhZ2UsXG4gICAgcmV0cnlQcm9taXNlLFxuICAgIHNldFNlc3Npb25DbGVhcmluZ1N0YXRlLFxuICAgIHNoYTI1NlxufSBmcm9tIFwiLi4vLi4vdXRpbHMvbWV0aG9kc1wiO1xuaW1wb3J0IHJlcXVlc3QgZnJvbSAnc3VwZXJhZ2VudCc7XG5pbXBvcnQge3JhbmRvbUJ5dGVzfSBmcm9tIFwiY3J5cHRvXCI7XG5pbXBvcnQgTG9jayBmcm9tICdicm93c2VyLXRhYnMtbG9jayc7XG5sZXQgaHR0cCA9IHJlcXVlc3Q7XG5cbi8qKlxuICogQGlnbm9yZVxuICovXG5jb25zdCBsb2NrID0gbmV3IExvY2soKTtcblxuY29uc3QgR0VUX1RPS0VOX1NJTEVOVExZX0xPQ0tfS0VZID0gJ29wZW5zdGFja3VpY29yZS5sb2NrLmdldFRva2VuU2lsZW50bHknO1xuY29uc3QgTk9OQ0VfTEVOID0gMTY7XG5leHBvcnQgY29uc3QgQUNDRVNTX1RPS0VOX1NLRVdfVElNRSA9IDIwO1xuZXhwb3J0IGNvbnN0IFJFU1BPTlNFX1RZUEVfSU1QTElDSVQgPSBcInRva2VuIGlkX3Rva2VuXCI7XG5leHBvcnQgY29uc3QgUkVTUE9OU0VfVFlQRV9DT0RFID0gJ2NvZGUnO1xuY29uc3QgQVVUSF9JTkZPID0gJ2F1dGhJbmZvJztcbmNvbnN0IE5PTkNFID0gJ25vbmNlJztcbmNvbnN0IFBLQ0UgPSAncGtjZSc7XG5cbmltcG9ydCBVUkkgZnJvbSBcInVyaWpzXCI7XG5pbXBvcnQgSWRUb2tlblZlcmlmaWVyIGZyb20gXCJpZHRva2VuLXZlcmlmaWVyXCI7XG5pbXBvcnQge1NFVF9MT0dHRURfVVNFUn0gZnJvbSBcIi4vYWN0aW9uc1wiO1xuXG5leHBvcnQgY29uc3QgZ2V0QXV0aFVybCA9IChiYWNrVXJsID0gbnVsbCwgcHJvbXB0ID0gbnVsbCwgdG9rZW5JZEhpbnQgPSBudWxsLCBwcm92aWRlciA9IG51bGwpID0+IHtcblxuICAgIGxldCBvYXV0aDJDbGllbnRJZCA9IGdldE9BdXRoMkNsaWVudElkKCk7XG4gICAgbGV0IHJlZGlyZWN0VXJpID0gZ2V0QXV0aENhbGxiYWNrKCk7XG4gICAgbGV0IGJhc2VVcmwgPSBnZXRPQXV0aDJJRFBCYXNlVXJsKCk7XG4gICAgbGV0IHNjb3BlcyA9IGdldE9BdXRoMlNjb3BlcygpO1xuICAgIGxldCBmbG93ID0gZ2V0T0F1dGgyRmxvdygpO1xuXG4gICAgaWYgKGJhY2tVcmwgIT0gbnVsbClcbiAgICAgICAgcmVkaXJlY3RVcmkgKz0gYD9CYWNrVXJsPSR7ZW5jb2RlVVJJKGJhY2tVcmwpfWA7XG5cbiAgICBsZXQgbm9uY2UgPSBjcmVhdGVOb25jZShOT05DRV9MRU4pO1xuXG4gICAgLy8gc3RvcmUgbm9uY2UgdG8gY2hlY2sgaXQgbGF0ZXJcbiAgICBwdXRPbkxvY2FsU3RvcmFnZShOT05DRSwgbm9uY2UpO1xuICAgIGxldCB1cmwgPSBVUkkoYCR7YmFzZVVybH0vb2F1dGgyL2F1dGhgKTtcblxuICAgIGxldCBxdWVyeSA9IHtcbiAgICAgICAgXCJyZXNwb25zZV90eXBlXCI6IGVuY29kZVVSSShmbG93KSxcbiAgICAgICAgXCJzY29wZVwiOiBlbmNvZGVVUkkoc2NvcGVzKSxcbiAgICAgICAgXCJub25jZVwiOiBub25jZSxcbiAgICAgICAgXCJyZXNwb25zZV9tb2RlXCIgOiAnZnJhZ21lbnQnLFxuICAgICAgICBcImNsaWVudF9pZFwiOiBlbmNvZGVVUkkob2F1dGgyQ2xpZW50SWQpLFxuICAgICAgICBcInJlZGlyZWN0X3VyaVwiOiBlbmNvZGVVUkkocmVkaXJlY3RVcmkpXG4gICAgfTtcblxuICAgIGlmKGZsb3cgPT09IFJFU1BPTlNFX1RZUEVfQ09ERSl7XG4gICAgICAgIGNvbnN0IHBrY2UgPSBjcmVhdGVQS0NFQ29kZXMoKVxuICAgICAgICBwdXRPbkxvY2FsU3RvcmFnZShQS0NFLCBKU09OLnN0cmluZ2lmeShwa2NlKSk7XG4gICAgICAgIHF1ZXJ5Wydjb2RlX2NoYWxsZW5nZSddID0gcGtjZS5jb2RlQ2hhbGxlbmdlO1xuICAgICAgICBxdWVyeVsnY29kZV9jaGFsbGVuZ2VfbWV0aG9kJ10gPSAnUzI1Nic7XG4gICAgICAgIHF1ZXJ5WydhcHByb3ZhbF9wcm9tcHQnXSA9ICdmb3JjZSc7XG4gICAgfVxuXG4gICAgaWYgKHByb21wdCkge1xuICAgICAgICBxdWVyeVsncHJvbXB0J10gPSBwcm9tcHQ7XG4gICAgfVxuXG4gICAgaWYgKHRva2VuSWRIaW50KSB7XG4gICAgICAgIHF1ZXJ5WydpZF90b2tlbl9oaW50J10gPSB0b2tlbklkSGludDtcbiAgICB9XG5cbiAgICBpZiAocHJvdmlkZXIpIHtcbiAgICAgICAgcXVlcnlbJ3Byb3ZpZGVyJ10gPSBwcm92aWRlcjtcbiAgICB9XG5cbiAgICB1cmwgPSB1cmwucXVlcnkocXVlcnkpO1xuICAgIC8vY29uc29sZS5sb2coYGdldEF1dGhVcmwgJHt1cmwudG9TdHJpbmcoKX1gKTtcbiAgICByZXR1cm4gdXJsO1xufVxuXG5leHBvcnQgY29uc3QgZ2V0TG9nb3V0VXJsID0gKGlkVG9rZW4pID0+IHtcbiAgICBsZXQgYmFzZVVybCA9IGdldE9BdXRoMklEUEJhc2VVcmwoKTtcbiAgICBsZXQgb2F1dGgyQ2xpZW50SWQgPSBnZXRPQXV0aDJDbGllbnRJZCgpO1xuICAgIGxldCB1cmwgPSBVUkkoYCR7YmFzZVVybH0vb2F1dGgyL2VuZC1zZXNzaW9uYCk7XG4gICAgbGV0IHN0YXRlID0gY3JlYXRlTm9uY2UoTk9OQ0VfTEVOKTtcbiAgICBsZXQgcG9zdExvZ091dFVyaSA9IGdldE9yaWdpbigpICsgJy9hdXRoL2xvZ291dCc7XG4gICAgLy8gc3RvcmUgbm9uY2UgdG8gY2hlY2sgaXQgbGF0ZXJcbiAgICBwdXRPbkxvY2FsU3RvcmFnZSgncG9zdF9sb2dvdXRfc3RhdGUnLCBzdGF0ZSk7XG4gICAgLyoqXG4gICAgICogcG9zdF9sb2dvdXRfcmVkaXJlY3RfdXJpIHNob3VsZCBiZSBsaXN0ZWQgb24gb2F1dGgyIGNsaWVudCBzZXR0aW5nc1xuICAgICAqIG9uIElEUFxuICAgICAqIFwiU2VjdXJpdHkgU2V0dGluZ3NcIiBUYWIgLT4gTG9nb3V0IE9wdGlvbnMgLT4gUG9zdCBMb2dvdXQgVXJpc1xuICAgICAqL1xuICAgIHJldHVybiB1cmwucXVlcnkoe1xuICAgICAgICBcImlkX3Rva2VuX2hpbnRcIjogaWRUb2tlbixcbiAgICAgICAgXCJwb3N0X2xvZ291dF9yZWRpcmVjdF91cmlcIjogZW5jb2RlVVJJKHBvc3RMb2dPdXRVcmkpLFxuICAgICAgICBcImNsaWVudF9pZFwiOiBlbmNvZGVVUkkob2F1dGgyQ2xpZW50SWQpLFxuICAgICAgICBcInN0YXRlXCI6IHN0YXRlLFxuICAgIH0pO1xufVxuXG5jb25zdCBjcmVhdGVOb25jZSA9IChsZW4pID0+IHtcbiAgICBsZXQgcG9zc2libGUgPSBcIkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5XCI7XG4gICAgbGV0IG5vbmNlID0gJyc7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgICAgICBub25jZSArPSBwb3NzaWJsZS5jaGFyQXQoTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogcG9zc2libGUubGVuZ3RoKSk7XG4gICAgfVxuICAgIHJldHVybiBub25jZTtcbn1cblxuZXhwb3J0IGNvbnN0IGRvTG9naW4gPSAoYmFja1VybCA9IG51bGwsIHByb3ZpZGVyID0gbnVsbCwgcHJvbXB0ID0gJ2NvbnNlbnQnKSA9PiB7XG4gICAgbGV0IHVybCA9IGdldEF1dGhVcmwoYmFja1VybCwgcHJvbXB0ICxudWxsLCBwcm92aWRlcik7XG4gICAgbGV0IGxvY2F0aW9uID0gZ2V0Q3VycmVudExvY2F0aW9uKClcbiAgICBsb2NhdGlvbi5yZXBsYWNlKHVybC50b1N0cmluZygpKTtcbn1cblxuZXhwb3J0IGNvbnN0IGRvTG9naW5CYXNpY0xvZ2luID0gKGJhY2tVcmwgPSBudWxsKSA9PiB7XG4gICAgZG9Mb2dpbihiYWNrVXJsLCBudWxsLCBudWxsKTtcbn1cblxuY29uc3QgY3JlYXRlUEtDRUNvZGVzID0gKCkgPT4ge1xuICAgIGNvbnN0IGNvZGVWZXJpZmllciA9IGJhc2U2NFVSTEVuY29kZShyYW5kb21CeXRlcyg2NCkpXG4gICAgY29uc3QgY29kZUNoYWxsZW5nZSA9IGJhc2U2NFVSTEVuY29kZShzaGEyNTYoQnVmZmVyLmZyb20oY29kZVZlcmlmaWVyKSkpXG4gICAgY29uc3QgY3JlYXRlZEF0ID0gbmV3IERhdGUoKVxuICAgIGNvbnN0IGNvZGVQYWlyID0ge1xuICAgICAgICBjb2RlVmVyaWZpZXIsXG4gICAgICAgIGNvZGVDaGFsbGVuZ2UsXG4gICAgICAgIGNyZWF0ZWRBdFxuICAgIH1cbiAgICByZXR1cm4gY29kZVBhaXJcbn1cblxuZXhwb3J0IGNvbnN0IGVtaXRBY2Nlc3NUb2tlbiA9IGFzeW5jIChjb2RlLCBiYWNrVXJsID0gbnVsbCkgPT4ge1xuXG4gICAgbGV0IGJhc2VVcmwgPSBnZXRPQXV0aDJJRFBCYXNlVXJsKCk7XG4gICAgbGV0IG9hdXRoMkNsaWVudElkID0gZ2V0T0F1dGgyQ2xpZW50SWQoKTtcbiAgICBsZXQgcmVkaXJlY3RVcmkgPSBnZXRBdXRoQ2FsbGJhY2soKTtcbiAgICBsZXQgcGtjZSA9IEpTT04ucGFyc2UoZ2V0RnJvbUxvY2FsU3RvcmFnZShQS0NFLCB0cnVlKSk7XG5cbiAgICBpZiAoYmFja1VybCAhPSBudWxsKVxuICAgICAgICByZWRpcmVjdFVyaSArPSBgP0JhY2tVcmw9JHtlbmNvZGVVUkkoYmFja1VybCl9YDtcblxuICAgIGNvbnN0IHBheWxvYWQgPSB7XG4gICAgICAgICdjb2RlJyA6ICBjb2RlLFxuICAgICAgICAnZ3JhbnRfdHlwZScgOiAnYXV0aG9yaXphdGlvbl9jb2RlJyxcbiAgICAgICAgJ2NvZGVfdmVyaWZpZXInIDogcGtjZS5jb2RlVmVyaWZpZXIsXG4gICAgICAgIFwiY2xpZW50X2lkXCI6IGVuY29kZVVSSShvYXV0aDJDbGllbnRJZCksXG4gICAgICAgIFwicmVkaXJlY3RfdXJpXCI6IGVuY29kZVVSSShyZWRpcmVjdFVyaSlcbiAgICB9O1xuXG4gICAgdHJ5IHtcbiAgICAgICAgLy9jb25zdCByZXNwb25zZSA9IGF3YWl0IGh0dHAucG9zdChgJHtiYXNlVXJsfS9vYXV0aDIvdG9rZW5gLCBwYXlsb2FkKTtcbiAgICAgICAgLy9jb25zdCB7Ym9keToge2FjY2Vzc190b2tlbiwgcmVmcmVzaF90b2tlbiwgaWRfdG9rZW4sIGV4cGlyZXNfaW59fSA9IHJlc3BvbnNlO1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKGAke2Jhc2VVcmx9L29hdXRoMi90b2tlbmAsIHtcbiAgICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgICAgICdBY2NlcHQnOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJ1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHBheWxvYWQpXG4gICAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uKGVycm9yKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZygnUmVxdWVzdCBmYWlsZWQ6JywgZXJyb3IubWVzc2FnZSk7XG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBqc29uID0gYXdhaXQgcmVzcG9uc2UuanNvbigpO1xuICAgICAgICBsZXQge2FjY2Vzc190b2tlbiwgcmVmcmVzaF90b2tlbiwgaWRfdG9rZW4sIGV4cGlyZXNfaW4sIGVycm9yLCBlcnJvcl9kZXNjcmlwdGlvbn0gPSBqc29uO1xuICAgICAgICByZXR1cm4ge2FjY2Vzc190b2tlbiwgcmVmcmVzaF90b2tlbiwgaWRfdG9rZW4sIGV4cGlyZXNfaW4sIGVycm9yLCBlcnJvcl9kZXNjcmlwdGlvbn1cbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgY29uc29sZS5sb2coZXJyKTtcbiAgICB9XG59O1xuXG5leHBvcnQgY29uc3QgY2xlYXJBY2Nlc3NUb2tlbiA9IGFzeW5jICgpID0+IHtcbiAgICBpZiAoXG4gICAgICAgIGF3YWl0IHJldHJ5UHJvbWlzZShcbiAgICAgICAgICAgICgpID0+IGxvY2suYWNxdWlyZUxvY2soR0VUX1RPS0VOX1NJTEVOVExZX0xPQ0tfS0VZLCA1MDAwKSxcbiAgICAgICAgICAgIDEwXG4gICAgICAgIClcbiAgICApIHtcbiAgICAgICAgdHJ5IHtcblxuICAgICAgICAgICAgbGV0IGF1dGhJbmZvID0gIGdldEF1dGhJbmZvKCk7XG5cbiAgICAgICAgICAgIGlmKCAhYXV0aEluZm8gKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoXCJNaXNzaW5nIEF1dGggaW5mby5cIik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGxldCB7IGFjY2Vzc1Rva2VuLCBleHBpcmVzSW4sIGFjY2Vzc1Rva2VuVXBkYXRlZEF0LCByZWZyZXNoVG9rZW4gfSA9IGF1dGhJbmZvO1xuXG4gICAgICAgICAgICBzdG9yZUF1dGhJbmZvKG51bGwsIDAgLCByZWZyZXNoVG9rZW4gKVxuXG4gICAgICAgIH1cbiAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICBhd2FpdCBsb2NrLnJlbGVhc2VMb2NrKEdFVF9UT0tFTl9TSUxFTlRMWV9MT0NLX0tFWSk7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmV4cG9ydCBjb25zdCBnZXRBY2Nlc3NUb2tlbiA9IGFzeW5jICgpID0+IHtcblxuICAgIGlmIChcbiAgICAgICAgYXdhaXQgcmV0cnlQcm9taXNlKFxuICAgICAgICAgICAgKCkgPT4gbG9jay5hY3F1aXJlTG9jayhHRVRfVE9LRU5fU0lMRU5UTFlfTE9DS19LRVksIDUwMDApLFxuICAgICAgICAgICAgMTBcbiAgICAgICAgKVxuICAgICkge1xuICAgICAgICB0cnkge1xuXG4gICAgICAgICAgICBsZXQgYXV0aEluZm8gPSAgZ2V0QXV0aEluZm8oKTtcblxuICAgICAgICAgICAgaWYoICFhdXRoSW5mbyApIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBFcnJvcihcIk1pc3NpbmcgQXV0aCBpbmZvLlwiKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbGV0IHsgYWNjZXNzVG9rZW4sIGV4cGlyZXNJbiwgYWNjZXNzVG9rZW5VcGRhdGVkQXQsIHJlZnJlc2hUb2tlbiB9ID0gYXV0aEluZm87XG4gICAgICAgICAgICBsZXQgZmxvdyA9IGdldE9BdXRoMkZsb3coKTtcbiAgICAgICAgICAgIC8vIGNoZWNrIGxpZmUgdGltZVxuICAgICAgICAgICAgbGV0IG5vdyA9IE1hdGguZmxvb3IoRGF0ZS5ub3coKSAvIDEwMDApO1xuICAgICAgICAgICAgbGV0IHRpbWVFbGFwc2VkU2VjcyA9IChub3cgLSBhY2Nlc3NUb2tlblVwZGF0ZWRBdCk7XG4gICAgICAgICAgICBleHBpcmVzSW4gPSAoZXhwaXJlc0luIC0gQUNDRVNTX1RPS0VOX1NLRVdfVElNRSk7XG4gICAgICAgICAgICAvL2NvbnNvbGUubG9nKGBnZXRBY2Nlc3NUb2tlbiBub3cgJHtub3d9IGFjY2Vzc1Rva2VuVXBkYXRlZEF0ICR7YWNjZXNzVG9rZW5VcGRhdGVkQXR9IHRpbWVFbGFwc2VkU2VjcyAke3RpbWVFbGFwc2VkU2Vjc30gZXhwaXJlc0luICR7ZXhwaXJlc0lufS5gKTtcblxuICAgICAgICAgICAgaWYgKHRpbWVFbGFwc2VkU2VjcyA+IGV4cGlyZXNJbiB8fCBhY2Nlc3NUb2tlbiA9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coYGdldEFjY2Vzc1Rva2VuIGFjY2VzcyB0b2tlbiBleHBpcmVkYClcbiAgICAgICAgICAgICAgICBpZihmbG93ID09PSBSRVNQT05TRV9UWVBFX0NPREUgJiYgdXNlT0F1dGgyUmVmcmVzaFRva2VuKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgLy9jb25zb2xlLmxvZygnZ2V0QWNjZXNzVG9rZW4gZ2V0dGluZyBuZXcgYWNjZXNzIHRva2VuLCBhY2Nlc3MgdG9rZW4gZ290IHZvaWQnKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFyZWZyZXNoVG9rZW4pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFyQXV0aEluZm8oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IEVycm9yKFwibWlzc2luZyBSZWZyZXNoIFRva2VuXCIpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHJlZnJlc2hBY2Nlc3NUb2tlbihyZWZyZXNoVG9rZW4pO1xuICAgICAgICAgICAgICAgICAgICBsZXQge2FjY2Vzc190b2tlbiwgZXhwaXJlc19pbiwgcmVmcmVzaF90b2tlbn0gPSByZXNwb25zZTtcbiAgICAgICAgICAgICAgICAgICAgLy9jb25zb2xlLmxvZyhgZ2V0QWNjZXNzVG9rZW4gYWNjZXNzX3Rva2VuICR7YWNjZXNzX3Rva2VufSBleHBpcmVzX2luICR7ZXhwaXJlc19pbn0gcmVmcmVzaF90b2tlbiAke3JlZnJlc2hfdG9rZW59YCk7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgcmVmcmVzaF90b2tlbiA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZnJlc2hfdG9rZW4gPSBudWxsOyAvLyBub3QgdXNpbmcgcm90YXRlIHBvbGljeVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHN0b3JlQXV0aEluZm8oYWNjZXNzX3Rva2VuLCBleHBpcmVzX2luLCByZWZyZXNoX3Rva2VuKTtcbiAgICAgICAgICAgICAgICAgICAgLy9jb25zb2xlLmxvZyhgZ2V0QWNjZXNzVG9rZW4gYWNjZXNzX3Rva2VuICR7YWNjZXNzX3Rva2VufSBbTkVXXWApO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYWNjZXNzX3Rva2VuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjbGVhckF1dGhJbmZvKCk7XG4gICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoXCJBY2Nlc3MgVG9rZW4gRXhwaXJlZC5cIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvL2NvbnNvbGUubG9nKGBnZXRBY2Nlc3NUb2tlbiBhY2Nlc3NfdG9rZW4gJHthY2Nlc3NUb2tlbn0gW0NBQ0hFRF1gKTtcbiAgICAgICAgICAgIHJldHVybiBhY2Nlc3NUb2tlbjtcbiAgICAgICAgfVxuICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgIGF3YWl0IGxvY2sucmVsZWFzZUxvY2soR0VUX1RPS0VOX1NJTEVOVExZX0xPQ0tfS0VZKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICB0aHJvdyBFcnJvcihcIkxvY2sgYWNxdWlyZSBlcnJvci5cIik7XG59XG5cbmV4cG9ydCBjb25zdCByZWZyZXNoQWNjZXNzVG9rZW4gPSBhc3luYyAocmVmcmVzaF90b2tlbikgPT4ge1xuXG4gICAgbGV0IGJhc2VVcmwgPSBnZXRPQXV0aDJJRFBCYXNlVXJsKCk7XG4gICAgbGV0IG9hdXRoMkNsaWVudElkID0gZ2V0T0F1dGgyQ2xpZW50SWQoKTtcblxuICAgIGNvbnN0IHBheWxvYWQgPSB7XG4gICAgICAgICdncmFudF90eXBlJyA6ICdyZWZyZXNoX3Rva2VuJyxcbiAgICAgICAgXCJjbGllbnRfaWRcIjogZW5jb2RlVVJJKG9hdXRoMkNsaWVudElkKSxcbiAgICAgICAgXCJyZWZyZXNoX3Rva2VuXCI6IHJlZnJlc2hfdG9rZW5cbiAgICB9O1xuXG4gICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaChgJHtiYXNlVXJsfS9vYXV0aDIvdG9rZW5gLCB7XG4gICAgICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICAgICAnQWNjZXB0JzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbidcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBib2R5OiBKU09OLnN0cmluZ2lmeShwYXlsb2FkKVxuICAgICAgICB9KS50aGVuKChyZXNwb25zZSkgPT4ge1xuICAgICAgICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PT0gNDAwKXtcbiAgICAgICAgICAgICAgICBsZXQgY3VycmVudExvY2F0aW9uID0gZ2V0Q3VycmVudFBhdGhOYW1lKCk7XG4gICAgICAgICAgICAgICAgc2V0U2Vzc2lvbkNsZWFyaW5nU3RhdGUodHJ1ZSk7XG4gICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoYCR7cmVzcG9uc2Uuc3RhdHVzfSAtICR7cmVzcG9uc2Uuc3RhdHVzVGV4dH1gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiByZXNwb25zZTtcblxuICAgICAgICB9KS5jYXRjaChmdW5jdGlvbihlcnJvcikge1xuICAgICAgICAgICAgdGhyb3cgRXJyb3IoYFJlcXVlc3QgZmFpbGVkOiAgJHtlcnJvci5tZXNzYWdlfWApO1xuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCBqc29uID0gYXdhaXQgcmVzcG9uc2UuanNvbigpO1xuICAgICAgICBsZXQge2FjY2Vzc190b2tlbiwgcmVmcmVzaF90b2tlbiwgZXhwaXJlc19pbn0gPSBqc29uO1xuICAgICAgICByZXR1cm4ge2FjY2Vzc190b2tlbiwgcmVmcmVzaF90b2tlbiwgZXhwaXJlc19pbn1cbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgY29uc29sZS5sb2coZXJyKTtcbiAgICAgICAgdGhyb3cgZXJyO1xuICAgIH1cbn1cblxuZXhwb3J0IGNvbnN0IHN0b3JlQXV0aEluZm8gPSAoYWNjZXNzVG9rZW4sIGV4cGlyZXNJbiwgcmVmcmVzaFRva2VuID0gbnVsbCwgaWRUb2tlbiA9IG51bGwpID0+IHtcblxuICAgIGxldCBmb3JtZXJBdXRoSW5mbyA9IGdldEF1dGhJbmZvKCk7XG5cbiAgICBsZXQgYXV0aEluZm8gPSB7XG4gICAgICAgIGFjY2Vzc1Rva2VuIDogYWNjZXNzVG9rZW4sXG4gICAgICAgIGV4cGlyZXNJbjogZXhwaXJlc0luLFxuICAgICAgICBhY2Nlc3NUb2tlblVwZGF0ZWRBdCA6IE1hdGguZmxvb3IoRGF0ZS5ub3coKSAvIDEwMDApLFxuICAgIH07XG5cbiAgICBpZihyZWZyZXNoVG9rZW4gPT09IG51bGwgJiYgZm9ybWVyQXV0aEluZm8pe1xuICAgICAgICByZWZyZXNoVG9rZW4gPSBmb3JtZXJBdXRoSW5mby5yZWZyZXNoVG9rZW47XG4gICAgfVxuXG4gICAgaWYoaWRUb2tlbiA9PT0gbnVsbCAmJiBmb3JtZXJBdXRoSW5mbyl7XG4gICAgICAgIGlkVG9rZW4gPSBmb3JtZXJBdXRoSW5mby5pZFRva2VuO1xuICAgIH1cblxuICAgIGlmKHJlZnJlc2hUb2tlbil7XG4gICAgICAgIGF1dGhJbmZvWydyZWZyZXNoVG9rZW4nXSA9IHJlZnJlc2hUb2tlbjtcbiAgICB9XG5cbiAgICBpZihpZFRva2VuKXtcbiAgICAgICAgYXV0aEluZm9bJ2lkVG9rZW4nXSA9IGlkVG9rZW47XG4gICAgfVxuXG4gICAgcHV0T25Mb2NhbFN0b3JhZ2UoQVVUSF9JTkZPLCBKU09OLnN0cmluZ2lmeShhdXRoSW5mbykpO1xufVxuXG5leHBvcnQgY29uc3QgZ2V0QXV0aEluZm8gPSAoKSA9PiB7XG4gICAgbGV0IHJlcyA9IGdldEZyb21Mb2NhbFN0b3JhZ2UoQVVUSF9JTkZPLCBmYWxzZSlcbiAgICBpZihyZXMgPT09IG51bGwpIHJldHVybiBudWxsO1xuICAgIHJldHVybiBKU09OLnBhcnNlKHJlcyk7XG59XG5cbmV4cG9ydCBjb25zdCBjbGVhckF1dGhJbmZvID0gKCkgPT4ge1xuICAgIGlmKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKXtcbiAgICAgICAgcmVtb3ZlRnJvbUxvY2FsU3RvcmFnZShBVVRIX0lORk8pO1xuICAgICAgICByZW1vdmVGcm9tTG9jYWxTdG9yYWdlKE5PTkNFKTtcbiAgICAgICAgcmVtb3ZlRnJvbUxvY2FsU3RvcmFnZShQS0NFKTtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbn07XG5cbmV4cG9ydCBjb25zdCBnZXRJZFRva2VuID0gKCkgPT4ge1xuICAgIGlmKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIGNvbnN0IGF1dGhJbmZvID0gZ2V0QXV0aEluZm8oKTtcbiAgICAgICAgaWYoYXV0aEluZm8pe1xuICAgICAgICAgICAgcmV0dXJuIGF1dGhJbmZvLmlkVG9rZW47XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldE9BdXRoMkNsaWVudElkID0gKCkgPT4ge1xuICAgIGlmKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHJldHVybiB3aW5kb3cuT0FVVEgyX0NMSUVOVF9JRDtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0T0F1dGgyRmxvdyA9ICgpID0+IHtcbiAgICBpZih0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICByZXR1cm4gd2luZG93Lk9BVVRIMl9GTE9XIHx8IFwidG9rZW4gaWRfdG9rZW5cIjtcbiAgICB9XG4gICAgcmV0dXJuIFwidG9rZW4gaWRfdG9rZW5cIjtcbn1cblxuZXhwb3J0IGNvbnN0IHVzZU9BdXRoMlJlZnJlc2hUb2tlbiA9ICgpID0+IHtcbiAgICBpZih0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICByZXR1cm4gbmV3IEJvb2xlYW4od2luZG93Lk9BVVRIMl9VU0VfUkVGUkVTSF9UT0tFTiB8fCB0cnVlKTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG59XG5cbmV4cG9ydCBjb25zdCBnZXRPQXV0aDJJRFBCYXNlVXJsID0gKCkgPT4ge1xuICAgIGlmKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHJldHVybiB3aW5kb3cuSURQX0JBU0VfVVJMO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRPQXV0aDJTY29wZXMgPSAoKSA9PiB7XG4gICAgaWYodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgcmV0dXJuIHdpbmRvdy5TQ09QRVM7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xufTtcblxuZXhwb3J0IGNvbnN0IGluaXRMb2dPdXQgPSAoKSA9PiB7XG4gICAgbGV0IGxvY2F0aW9uID0gZ2V0Q3VycmVudExvY2F0aW9uKCk7XG4gICAgbG9jYXRpb24ucmVwbGFjZShnZXRMb2dvdXRVcmwoZ2V0SWRUb2tlbigpKS50b1N0cmluZygpKTtcbn1cblxuZXhwb3J0IGNvbnN0IHZhbGlkYXRlSWRUb2tlbiA9IChpZFRva2VuLCBpc3N1ZXIsIGF1ZGllbmNlKSA9PiB7XG5cbiAgICBsZXQgdmVyaWZpZXIgPSBuZXcgSWRUb2tlblZlcmlmaWVyKHtcbiAgICAgICAgaXNzdWVyOiBpc3N1ZXIsXG4gICAgICAgIGF1ZGllbmNlOiBhdWRpZW5jZVxuICAgIH0pO1xuXG4gICAgbGV0IHN0b3JlZE5vbmNlID0gZ2V0RnJvbUxvY2FsU3RvcmFnZShOT05DRSwgdHJ1ZSk7XG4gICAgbGV0IGp3dCA9IHZlcmlmaWVyLmRlY29kZShpZFRva2VuKTtcbiAgICBsZXQgYWxnID0gand0LmhlYWRlci5hbGc7XG4gICAgbGV0IGtpZCA9IGp3dC5oZWFkZXIua2lkO1xuICAgIGxldCBhdWQgPSBqd3QucGF5bG9hZC5hdWQ7XG4gICAgbGV0IGlzcyA9IGp3dC5wYXlsb2FkLmlzcztcbiAgICBsZXQgZXhwID0gand0LnBheWxvYWQuZXhwO1xuICAgIGxldCBuYmYgPSBqd3QucGF5bG9hZC5uYmY7XG4gICAgbGV0IHRub25jZSA9IGp3dC5wYXlsb2FkLm5vbmNlIHx8IG51bGw7XG5cbiAgICByZXR1cm4gdG5vbmNlID09IHN0b3JlZE5vbmNlICYmIGF1ZCA9PSBhdWRpZW5jZSAmJiBpc3MgPT0gaXNzdWVyO1xufVxuXG5leHBvcnQgY29uc3QgcGFzc3dvcmRsZXNzU3RhcnQgPSAocGFyYW1zKSA9PiB7XG5cbiAgICBsZXQgb2F1dGgyQ2xpZW50SWQgPSBnZXRPQXV0aDJDbGllbnRJZCgpO1xuICAgIGxldCBzY29wZXMgPSBnZXRPQXV0aDJTY29wZXMoKTtcbiAgICBsZXQgbm9uY2UgPSBjcmVhdGVOb25jZShOT05DRV9MRU4pO1xuICAgIC8vIHN0b3JlIG5vbmNlIHRvIGNoZWNrIGl0IGxhdGVyXG4gICAgcHV0T25Mb2NhbFN0b3JhZ2UoTk9OQ0UsIG5vbmNlKTtcbiAgICBsZXQgYmFzZVVybCA9IGdldE9BdXRoMklEUEJhc2VVcmwoKTtcbiAgICBsZXQgdXJsID0gVVJJKGAke2Jhc2VVcmx9L29hdXRoMi9hdXRoYCk7XG5cbiAgICBsZXQgcGF5bG9hZCA9IHtcbiAgICAgICAgXCJyZXNwb25zZV90eXBlXCI6IFwib3RwXCIsXG4gICAgICAgIFwic2NvcGVcIjogZW5jb2RlVVJJKHNjb3BlcyksXG4gICAgICAgIFwibm9uY2VcIjogbm9uY2UsXG4gICAgICAgIFwiY2xpZW50X2lkXCI6IGVuY29kZVVSSShvYXV0aDJDbGllbnRJZCksXG4gICAgICAgIFwiY29ubmVjdGlvblwiOiBwYXJhbXMuY29ubmVjdGlvbiB8fCBcImVtYWlsXCIsXG4gICAgICAgIFwic2VuZFwiOiBwYXJhbXMuc2VuZCB8fCBcImNvZGVcIixcbiAgICB9O1xuXG4gICAgaWYocGFyYW1zLmhhc093blByb3BlcnR5KCdlbWFpbCcpKXtcbiAgICAgICAgcGF5bG9hZFtcImVtYWlsXCJdID0gZW5jb2RlVVJJQ29tcG9uZW50KHBhcmFtcy5lbWFpbCk7XG4gICAgfVxuXG4gICAgaWYocGFyYW1zLmhhc093blByb3BlcnR5KCdwaG9uZV9udW1iZXInKSl7XG4gICAgICAgIHBheWxvYWRbXCJwaG9uZV9udW1iZXJcIl0gPSBlbmNvZGVVUklDb21wb25lbnQocGFyYW1zLnBob25lX251bWJlcik7XG4gICAgfVxuXG4gICAgbGV0IHJlcSA9IGh0dHAucG9zdCh1cmwudG9TdHJpbmcoKSk7XG5cbiAgICByZXR1cm4gcmVxLnNlbmQocGF5bG9hZCkudGhlbigocmVzKSA9PiB7XG4gICAgICAgIGxldCBqc29uID0gcmVzLmJvZHk7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoe3Jlc3BvbnNlOmpzb259KTtcbiAgICB9KS5jYXRjaCgoZXJyKSA9PiB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChlcnIpO1xuICAgIH0pO1xuXG59XG5cbmV4cG9ydCBjb25zdCBwYXNzd29yZGxlc3NMb2dpbiA9IChwYXJhbXMpID0+IChkaXNwYXRjaCkgPT4ge1xuXG4gICAgbGV0IG9hdXRoMkNsaWVudElkID0gZ2V0T0F1dGgyQ2xpZW50SWQoKTtcbiAgICBsZXQgc2NvcGVzID0gZ2V0T0F1dGgyU2NvcGVzKCk7XG4gICAgbGV0IGJhc2VVcmwgPSBnZXRPQXV0aDJJRFBCYXNlVXJsKCk7XG4gICAgbGV0IHVybCA9IFVSSShgJHtiYXNlVXJsfS9vYXV0aDIvdG9rZW5gKTtcblxuICAgIGlmKCFwYXJhbXMuaGFzT3duUHJvcGVydHkoXCJvdHBcIikpe1xuICAgICAgICB0aHJvdyBFcnJvcihcIm90cCBwYXJhbSBpcyBtYW5kYXRvcnkuXCIpO1xuICAgIH1cblxuICAgIGxldCBwYXlsb2FkID0ge1xuICAgICAgICBcImdyYW50X3R5cGVcIjogXCJwYXNzd29yZGxlc3NcIixcbiAgICAgICAgXCJjb25uZWN0aW9uXCI6IHBhcmFtcy5jb25uZWN0aW9uIHx8IFwiZW1haWxcIixcbiAgICAgICAgXCJzY29wZVwiOiBlbmNvZGVVUkkoc2NvcGVzKSxcbiAgICAgICAgXCJjbGllbnRfaWRcIjogZW5jb2RlVVJJKG9hdXRoMkNsaWVudElkKSxcbiAgICAgICAgXCJvdHBcIjogcGFyYW1zLm90cFxuICAgIH07XG5cbiAgICBpZihwYXJhbXMuaGFzT3duUHJvcGVydHkoJ2VtYWlsJykpe1xuICAgICAgICBwYXlsb2FkW1wiZW1haWxcIl0gPSBlbmNvZGVVUklDb21wb25lbnQocGFyYW1zLmVtYWlsKTtcbiAgICB9XG5cbiAgICBpZihwYXJhbXMuaGFzT3duUHJvcGVydHkoJ3Bob25lX251bWJlcicpKXtcbiAgICAgICAgcGF5bG9hZFtcInBob25lX251bWJlclwiXSA9IGVuY29kZVVSSUNvbXBvbmVudChwYXJhbXMucGhvbmVfbnVtYmVyKTtcbiAgICB9XG5cbiAgICBsZXQgcmVxID0gaHR0cC5wb3N0KHVybC50b1N0cmluZygpKTtcblxuICAgIHJldHVybiByZXEuc2VuZChwYXlsb2FkKS50aGVuKChyZXMpID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIC8vIG5vdyB3ZSBnb3QgdG9rZW5cbiAgICAgICAgICAgIGxldCBqc29uID0gcmVzLmJvZHk7XG4gICAgICAgICAgICBsZXQge2FjY2Vzc190b2tlbiwgZXhwaXJlc19pbiwgcmVmcmVzaF90b2tlbiwgaWRfdG9rZW59ID0ganNvbjtcblxuICAgICAgICAgICAgaWYgKHR5cGVvZiByZWZyZXNoX3Rva2VuID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgIHJlZnJlc2hfdG9rZW4gPSBudWxsOyAvLyBub3QgdXNpbmcgcm90YXRlIHBvbGljeVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodHlwZW9mIGlkX3Rva2VuID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgIGlkX3Rva2VuID0gbnVsbDsgLy8gbm90IHVzaW5nIHJvdGF0ZSBwb2xpY3lcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gdmVyaWZ5IGlkIHRva2VuXG5cbiAgICAgICAgICAgIGlmIChpZF90b2tlbikge1xuICAgICAgICAgICAgICAgIGlmICghdmFsaWRhdGVJZFRva2VuKGlkX3Rva2VuLCBiYXNlVXJsLCBvYXV0aDJDbGllbnRJZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoXCJpZCB0b2tlbiBpcyBub3QgdmFsaWQuXCIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgc3RvcmVBdXRoSW5mbyhhY2Nlc3NfdG9rZW4sIGV4cGlyZXNfaW4sIHJlZnJlc2hfdG9rZW4sIGlkX3Rva2VuKTtcblxuICAgICAgICAgICAgaWYgKGRpc3BhdGNoKSB7XG4gICAgICAgICAgICAgICAgZGlzcGF0Y2goe1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiBTRVRfTE9HR0VEX1VTRVIsXG4gICAgICAgICAgICAgICAgICAgIHBheWxvYWQ6IHtzZXNzaW9uU3RhdGU6IG51bGx9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoe3Jlc3BvbnNlOiBqc29ufSk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2goZSl7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhlKTtcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChlKTtcbiAgICAgICAgfVxuICAgIH0pLmNhdGNoKChlcnIpID0+IHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KGVycik7XG4gICAgfSk7XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMCBPcGVuU3RhY2sgRm91bmRhdGlvblxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICoqL1xuXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHtjb25uZWN0fSBmcm9tIFwicmVhY3QtcmVkdXhcIjtcblxuaW1wb3J0IHtcbiAgICBkb0xvZ291dCxcbiAgICBTRVNTSU9OX1NUQVRFX1NUQVRVU19DSEFOR0VELFxuICAgIFNFU1NJT05fU1RBVEVfU1RBVFVTX0VSUk9SLFxuICAgIFNFU1NJT05fU1RBVEVfU1RBVFVTX1VOQ0hBTkdFRCxcbiAgICB1cGRhdGVTZXNzaW9uU3RhdGVTdGF0dXMsXG4gICAgb25Vc2VyQXV0aFxufSBmcm9tIFwiLi4vYWN0aW9uc1wiO1xuXG5pbXBvcnQge1xuICAgIGdldEF1dGhVcmwsXG4gICAgaW5pdExvZ091dFxufSBmcm9tIFwiLi4vbWV0aG9kc1wiO1xuXG5pbXBvcnQgVVJJIGZyb20gXCJ1cmlqc1wiXG4vLyBpbiBtaW51dGVzXG5jb25zdCBDSEVDS19TRVNTSU9OX0lOVEVSVkFMID0gKDEwMDAgKiA2MCkgKiAzMDtcblxuY2xhc3MgT1BTZXNzaW9uQ2hlY2tlciBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgICAgICAvL2NvbnNvbGUubG9nKFwiT1BTZXNzaW9uQ2hlY2tlcjo6Y29uc3RydWN0b3JcIik7XG4gICAgICAgIHN1cGVyKHByb3BzKTtcbiAgICAgICAgdGhpcy5zdGF0ZSA9e1xuICAgICAgICAgICAgb3BGcmFtZV9zcmM6IFwiXCIsXG4gICAgICAgICAgICBycENoZWNrU2Vzc2lvblN0YXRlRnJhbWVfc3JjIDogXCJcIlxuICAgICAgICB9XG4gICAgICAgIHRoaXMucmVjZWl2ZU1lc3NhZ2UgPSB0aGlzLnJlY2VpdmVNZXNzYWdlLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMucmVjZWl2ZU1lc3NhZ2VGcm9tQ2hpbGQgPSB0aGlzLnJlY2VpdmVNZXNzYWdlRnJvbUNoaWxkLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuc2V0VGltZXIgPSB0aGlzLnNldFRpbWVyLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuY2hlY2tTZXNzaW9uID0gdGhpcy5jaGVja1Nlc3Npb24uYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5vblNldHVwQ2hlY2tTZXNzaW9uUlAgPSB0aGlzLm9uU2V0dXBDaGVja1Nlc3Npb25SUC5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLnJwQ2hlY2tTZXNzaW9uU3RhdGVGcmFtZU9uTG9hZCA9IHRoaXMucnBDaGVja1Nlc3Npb25TdGF0ZUZyYW1lT25Mb2FkLmJpbmQodGhpcyk7XG5cbiAgICAgICAgdGhpcy5vcEZyYW1lID0gbnVsbDtcbiAgICAgICAgdGhpcy5ycENoZWNrU2Vzc2lvblN0YXRlRnJhbWUgPSBudWxsO1xuXG4gICAgICAgIHRoaXMuc2V0T1BGcmFtZVJlZiA9IGVsZW1lbnQgPT4ge1xuICAgICAgICAgICAgdGhpcy5vcEZyYW1lID0gZWxlbWVudDtcbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLnNldENoZWNrU2Vzc2lvblN0YXRlRnJhbWVSZWYgPSBlbGVtZW50ID0+IHtcbiAgICAgICAgICAgIHRoaXMucnBDaGVja1Nlc3Npb25TdGF0ZUZyYW1lID0gZWxlbWVudDtcbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLmludGVydmFsID0gbnVsbDtcbiAgICB9XG5cbiAgICBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICAgICAgLy9jb25zb2xlLmxvZyhgT1BTZXNzaW9uQ2hlY2tlcjo6Y29tcG9uZW50V2lsbFVubW91bnRgKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGlmICh0aGlzLmludGVydmFsKSB7XG4gICAgICAgICAgICAgICAgd2luZG93LmNsZWFySW50ZXJ2YWwodGhpcy5pbnRlcnZhbCk7XG4gICAgICAgICAgICAgICAgdGhpcy5pbnRlcnZhbCA9IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignbWVzc2FnZScsIHRoaXMucmVjZWl2ZU1lc3NhZ2VGcm9tQ2hpbGQsIGZhbHNlKTtcbiAgICAgICAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwibWVzc2FnZVwiLCB0aGlzLnJlY2VpdmVNZXNzYWdlLCBmYWxzZSk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGUpe1xuICAgICAgICAgICAgY29uc29sZS5sb2coZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICAgICAgaWYoIXRoaXMucHJvcHMuaXNMb2dnZWRVc2VyKSByZXR1cm47XG4gICAgICAgIC8vY29uc29sZS5sb2coXCJPUFNlc3Npb25DaGVja2VyOjpjb21wb25lbnREaWRNb3VudFwiKTtcbiAgICAgICAgLy8gYWRkIGV2ZW50IGxpc3RlbmVyIHRvIHJlY2VpdmUgbWVzc2FnZXMgZnJvbSBpZHAgdGhyb3VnaCBPUCBmcmFtZVxuICAgICAgICBpZih0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgaWYgKCB3aW5kb3cubG9jYXRpb24gIT09IHdpbmRvdy5wYXJlbnQubG9jYXRpb24gKSB7XG4gICAgICAgICAgICAgICAgLy9jb25zb2xlLmxvZyhcIk9QU2Vzc2lvbkNoZWNrZXI6OmNvbXBvbmVudERpZE1vdW50IHJ1bm5pbmcgaW5zaWRlIGlmcmFtZSwgc2tpcHBpbmdcIik7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gc2V0IHVwIG9wIGZyYW1lXG4gICAgICAgICAgICB0aGlzLm9uU2V0dXBDaGVja1Nlc3Npb25SUCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcnBDaGVja1Nlc3Npb25TdGF0ZUZyYW1lT25Mb2FkKGV2ZW50KXtcbiAgICAgICAgLy9jb25zb2xlLmxvZyhcIk9QU2Vzc2lvbkNoZWNrZXI6OnJwQ2hlY2tTZXNzaW9uU3RhdGVGcmFtZU9uTG9hZFwiKTtcbiAgICAgICAgbGV0IGZyYW1lID0gZXZlbnQudGFyZ2V0O1xuICAgICAgICBpZih0aGlzLnN0YXRlLnJwQ2hlY2tTZXNzaW9uU3RhdGVGcmFtZV9zcmMgPT0gXCJcIikgcmV0dXJuO1xuXG4gICAgICAgIC8vY29uc29sZS5sb2coYE9QU2Vzc2lvbkNoZWNrZXI6OnJwQ2hlY2tTZXNzaW9uU3RhdGVGcmFtZU9uTG9hZCBmcmFtZS5zcmMgJHtmcmFtZS5zcmN9YCk7XG4gICAgICAgIC8vIHRoaXMgaXMgY2FsbGVkIGJjIHdlIHNldCB0aGUgUlAgZnJhbWUgdG8gY2hlY2sgdGhlIHNlc3Npb24gc3RhdGUgd2l0aCBwcm9tcD1ub25lXG4gICAgICAgIGlmKCFmcmFtZS5jb250ZW50RG9jdW1lbnQpe1xuICAgICAgICAgICAgLy9jb25zb2xlLmxvZyhcIk9QU2Vzc2lvbkNoZWNrZXI6OnJwQ2hlY2tTZXNzaW9uU3RhdGVGcmFtZU9uTG9hZCAhZnJhbWUuY29udGVudERvY3VtZW50KSBpcyBudWxsXCIpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21lc3NhZ2UnLCB0aGlzLnJlY2VpdmVNZXNzYWdlRnJvbUNoaWxkLCBmYWxzZSk7XG4gICAgICAgIGxldCByZXN1bHRVcmwgPSBuZXcgVVJJKGZyYW1lLmNvbnRlbnREb2N1bWVudC5VUkwpO1xuICAgICAgICAvLyB0ZXN0IHRoZSByZXN1bHQgVXJsMXFhXG4gICAgICAgIGNvbnNvbGUubG9nKFwiT1BTZXNzaW9uQ2hlY2tlcjo6cnBDaGVja1Nlc3Npb25TdGF0ZUZyYW1lT25Mb2FkIC0gcmVzdWx0VXJsIFwiICsgcmVzdWx0VXJsKTtcbiAgICAgICAgbGV0IHF1ZXJ5ID0gcmVzdWx0VXJsLnNlYXJjaCh0cnVlKTtcbiAgICAgICAgbGV0IGZyYWdtZW50ID0gVVJJLnBhcnNlUXVlcnkocmVzdWx0VXJsLmZyYWdtZW50KCkpO1xuICAgICAgICAvLyBjaGVjayBpZiB3ZSBoYXZlIHNvbWUgZXJyb3Igb24gcXVlcnkgc3RyaW5nIG9yIGZyYWdtZW50XG4gICAgICAgIGxldCBlcnJvciA9IG51bGw7XG4gICAgICAgIGlmKHF1ZXJ5Lmhhc093blByb3BlcnR5KFwiZXJyb3JcIikpIGVycm9yID0gcXVlcnlbJ2Vycm9yJ107XG4gICAgICAgIGlmKGZyYWdtZW50Lmhhc093blByb3BlcnR5KFwiZXJyb3JcIikpIGVycm9yID0gZnJhZ21lbnRbJ2Vycm9yJ107XG4gICAgICAgIGlmKGVycm9yKXtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiT1BTZXNzaW9uQ2hlY2tlcjo6cnBDaGVja1Nlc3Npb25TdGF0ZUZyYW1lT25Mb2FkIC0gZXJyb3IgXCIgKyBlcnJvcik7XG4gICAgICAgICAgICAvLyBjaGVjayBzZXNzaW9uIHN0YXRlIHdpdGggcHJvbXB0IG5vbmUgZmFpbGVkIGRvIGxvZ291dDtcbiAgICAgICAgICAgIC8vY29uc29sZS5sb2coJ09QU2Vzc2lvbkNoZWNrZXI6OnJwQ2hlY2tTZXNzaW9uU3RhdGVGcmFtZU9uTG9hZCAtIGluaXRpYXRpbmcgbG9nb3V0Jyk7XG4gICAgICAgICAgICBpbml0TG9nT3V0KCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy8gbm8gZXJyb3Igd2Ugc3RpbGwgbG9nZ2VkIHNvIHJlIGluaXQgdGhlIGNoZWNraW5nXG4gICAgICAgIC8vIHNldCB1cCBvcCBmcmFtZVxuICAgICAgICAvL2NvbnNvbGUubG9nKGBPUFNlc3Npb25DaGVja2VyOjpycENoZWNrU2Vzc2lvblN0YXRlRnJhbWVPbkxvYWQgdGhpcy5wcm9wcy5zZXNzaW9uU3RhdGVTdGF0dXMgJHt0aGlzLnByb3BzLnNlc3Npb25TdGF0ZVN0YXR1c31gKTtcbiAgICAgICAgdGhpcy5wcm9wcy51cGRhdGVTZXNzaW9uU3RhdGVTdGF0dXMoU0VTU0lPTl9TVEFURV9TVEFUVVNfVU5DSEFOR0VEKTtcbiAgICB9XG5cbiAgICBjb21wb25lbnREaWRVcGRhdGUocHJldlByb3BzKSB7XG4gICAgICAgIC8vY29uc29sZS5sb2coXCJPUFNlc3Npb25DaGVja2VyOjpjb21wb25lbnREaWRVcGRhdGVcIik7XG4gICAgICAgIGlmICh0aGlzLnByb3BzLnNlc3Npb25TdGF0ZVN0YXR1cyAhPT0gcHJldlByb3BzLnNlc3Npb25TdGF0ZVN0YXR1cykge1xuICAgICAgICAgICAgaWYodGhpcy5wcm9wcy5zZXNzaW9uU3RhdGVTdGF0dXMgPT09IFNFU1NJT05fU1RBVEVfU1RBVFVTX0NIQU5HRUQpe1xuICAgICAgICAgICAgICAgIC8vY29uc29sZS5sb2coXCJPUFNlc3Npb25DaGVja2VyOjpjb21wb25lbnREaWRVcGRhdGUgc2Vzc2lvblN0YXRlU3RhdHVzID09PSBjaGFuZ2VkXCIpO1xuICAgICAgICAgICAgICAgIGxldCB1cmwgPSBnZXRBdXRoVXJsKG51bGwsICdub25lJyk7XG4gICAgICAgICAgICAgICAgLy8gaHR0cHM6Ly9vcGVuaWQubmV0L3NwZWNzL29wZW5pZC1jb25uZWN0LXNlc3Npb24tMV8wLmh0bWwjUlBpZnJhbWVcbiAgICAgICAgICAgICAgICAvLyBzZXQgdGhlIGZyYW1lIHRvIGlkcFxuICAgICAgICAgICAgICAgIGlmKHRoaXMuc3RhdGUucnBDaGVja1Nlc3Npb25TdGF0ZUZyYW1lX3NyYyA9PSBcIlwiKVxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFN0YXRlKHsuLi50aGlzLnN0YXRlLCBvcEZyYW1lX3NyYyA6IFwiXCIsIHJwQ2hlY2tTZXNzaW9uU3RhdGVGcmFtZV9zcmMgOiB1cmwudG9TdHJpbmcoKX0pO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmKHRoaXMucHJvcHMuc2Vzc2lvblN0YXRlU3RhdHVzID09PSBTRVNTSU9OX1NUQVRFX1NUQVRVU19VTkNIQU5HRUQpe1xuICAgICAgICAgICAgICAgIC8vY29uc29sZS5sb2coXCJPUFNlc3Npb25DaGVja2VyOjpjb21wb25lbnREaWRVcGRhdGUgc2Vzc2lvblN0YXRlU3RhdHVzID09PSB1bmNoYW5nZWRcIik7XG4gICAgICAgICAgICAgICAgdGhpcy5vblNldHVwQ2hlY2tTZXNzaW9uUlAoKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYodGhpcy5wcm9wcy5zZXNzaW9uU3RhdGUgIT09IHByZXZQcm9wcy5zZXNzaW9uU3RhdGUpe1xuICAgICAgICAgICAgY29uc29sZS5sb2coYE9QU2Vzc2lvbkNoZWNrZXI6OmNvbXBvbmVudERpZFVwZGF0ZSB1cGRhdGVkIHNlc3Npb24gc3RhdGUgJHt0aGlzLnByb3BzLnNlc3Npb25TdGF0ZX1gKTtcbiAgICAgICAgICAgIHRoaXMub25TZXR1cENoZWNrU2Vzc2lvblJQKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjaGVja1Nlc3Npb24oKVxuICAgIHtcblxuICAgICAgICBsZXQgbm93ID0gbmV3IERhdGUoKTtcbiAgICAgICAgY29uc29sZS5sb2coYE9QU2Vzc2lvbkNoZWNrZXI6OmNoZWNrU2Vzc2lvbiBub3cgJHtub3cudG9Mb2NhbGVTdHJpbmcoKX1gKTtcblxuICAgICAgICBpZih0aGlzLm9wRnJhbWUgPT0gbnVsbCApe1xuICAgICAgICAgICAgLy9jb25zb2xlLmxvZyhcIk9QU2Vzc2lvbkNoZWNrZXI6OmNoZWNrU2Vzc2lvbiAtIHRoaXMub3BGcmFtZSA9PSBudWxsIFwiKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmKHRoaXMucHJvcHMuc2Vzc2lvblN0YXRlID09IG51bGwpe1xuICAgICAgICAgICAgLy9jb25zb2xlLmxvZyhcIk9QU2Vzc2lvbkNoZWNrZXI6OmNoZWNrU2Vzc2lvbiAtIHRoaXMucHJvcHMuc2Vzc2lvblN0YXRlID09IG51bGwgXCIpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYodGhpcy5wcm9wcy5jbGllbnRJZCA9PSBudWxsKXtcbiAgICAgICAgICAgIC8vY29uc29sZS5sb2coXCJPUFNlc3Npb25DaGVja2VyOjpjaGVja1Nlc3Npb24gLSB0aGlzLnByb3BzLmNsaWVudElkID09IG51bGwgXCIpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHRhcmdldE9yaWdpbiA9IHRoaXMucHJvcHMuaWRwQmFzZVVybDtcbiAgICAgICAgbGV0IGZyYW1lID0gdGhpcy5vcEZyYW1lLmNvbnRlbnRXaW5kb3c7XG4gICAgICAgIGxldCBtZXNzYWdlID0gdGhpcy5wcm9wcy5jbGllbnRJZCArIFwiIFwiICsgdGhpcy5wcm9wcy5zZXNzaW9uU3RhdGU7XG4gICAgICAgIC8vY29uc29sZS5sb2coXCJPUFNlc3Npb25DaGVja2VyOjpjaGVja1Nlc3Npb24gLSBtZXNzYWdlXCIgKyBtZXNzYWdlKTtcbiAgICAgICAgLy8gcG9zdE1lc3NhZ2UgdG8gdGhlIE9QIGlmcmFtZVxuICAgICAgICBmcmFtZS5wb3N0TWVzc2FnZShtZXNzYWdlLCB0YXJnZXRPcmlnaW4pO1xuICAgIH1cblxuICAgIHNldFRpbWVyKGV2ZW50KVxuICAgIHtcbiAgICAgICAgbGV0IGZyYW1lID0gZXZlbnQudGFyZ2V0O1xuICAgICAgICBpZih0aGlzLnN0YXRlLm9wRnJhbWVfc3JjID09IFwiXCIpIHJldHVybjtcbiAgICAgICAgLy9jb25zb2xlLmxvZyhcIk9QU2Vzc2lvbkNoZWNrZXI6OnNldFRpbWVyXCIpO1xuXG4gICAgICAgIGlmKCF0aGlzLnByb3BzLmlzTG9nZ2VkVXNlcil7XG4gICAgICAgICAgICAvL2NvbnNvbGUubG9nKFwiT1BTZXNzaW9uQ2hlY2tlcjo6c2V0VGltZXIgLSAhdGhpcy5wcm9wcy5pc0xvZ2dlZFVzZXJcIik7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZih0aGlzLnByb3BzLnNlc3Npb25TdGF0ZVN0YXR1cyAhPT0gU0VTU0lPTl9TVEFURV9TVEFUVVNfVU5DSEFOR0VEICl7XG4gICAgICAgICAgICAvL2NvbnNvbGUubG9nKFwiT1BTZXNzaW9uQ2hlY2tlcjo6c2V0VGltZXIgLSB0aGlzLnByb3BzLnNlc3Npb25TdGF0ZVN0YXR1c1wiKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhgT1BTZXNzaW9uQ2hlY2tlcjo6c2V0VGltZXIgc2V0dGluZyBpbnRlcnZhbCAke0NIRUNLX1NFU1NJT05fSU5URVJWQUx9YCk7XG4gICAgICAgICAgICB0aGlzLmludGVydmFsID0gd2luZG93LnNldEludGVydmFsKHRoaXMuY2hlY2tTZXNzaW9uLCBDSEVDS19TRVNTSU9OX0lOVEVSVkFMKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uU2V0dXBDaGVja1Nlc3Npb25SUCgpe1xuICAgICAgICAvLyBodHRwczovL29wZW5pZC5uZXQvc3BlY3Mvb3BlbmlkLWNvbm5lY3Qtc2Vzc2lvbi0xXzAuaHRtbCNPUGlmcmFtZVxuICAgICAgICAvLyBjb25zb2xlLmxvZyhcIk9QU2Vzc2lvbkNoZWNrZXI6Om9uU2V0dXBDaGVja1Nlc3Npb25SUFwiKTtcbiAgICAgICAgaWYodGhpcy5vcEZyYW1lID09IG51bGwpe1xuICAgICAgICAgICAgLy9jb25zb2xlLmxvZyhcIk9QU2Vzc2lvbkNoZWNrZXI6Om9uU2V0dXBDaGVja1Nlc3Npb25SUCAtIG9wRnJhbWUgaXMgbnVsbFwiKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcIm1lc3NhZ2VcIiwgdGhpcy5yZWNlaXZlTWVzc2FnZSwgZmFsc2UpO1xuICAgICAgICBjb25zdCBzZXNzaW9uQ2hlY2tFbmRwb2ludCA9IGAke3RoaXMucHJvcHMuaWRwQmFzZVVybH0vb2F1dGgyL2NoZWNrLXNlc3Npb25gO1xuICAgICAgICAvL2NvbnNvbGUubG9nKFwiT1BTZXNzaW9uQ2hlY2tlcjo6b25TZXR1cENoZWNrU2Vzc2lvblJQIC0gc2Vzc2lvbkNoZWNrRW5kcG9pbnQgXCIrIHNlc3Npb25DaGVja0VuZHBvaW50KTtcbiAgICAgICAgaWYodGhpcy5zdGF0ZS5vcEZyYW1lX3NyYyA9PSBcIlwiKVxuICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7Li4udGhpcy5zdGF0ZSwgb3BGcmFtZV9zcmMgOiBzZXNzaW9uQ2hlY2tFbmRwb2ludCwgcnBDaGVja1Nlc3Npb25TdGF0ZUZyYW1lX3NyYyA6IFwiXCJ9KTtcbiAgICB9XG5cbiAgICByZWNlaXZlTWVzc2FnZUZyb21DaGlsZChlKXtcbiAgICAgICAgaWYgKHR5cGVvZiBlLmRhdGEgPT09ICdzdHJpbmcnIHx8IGUuZGF0YSBpbnN0YW5jZW9mIFN0cmluZyl7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGxldCBhdXRoSW5mbyA9IEpTT04ucGFyc2UoZS5kYXRhKTtcbiAgICAgICAgICAgICAgICBpZiAoYXV0aEluZm8uaGFzT3duUHJvcGVydHkoJ2FjdGlvbicpICYmIGF1dGhJbmZvLmFjdGlvbiA9PSAnU0VUX0FVVEhfSU5GT19TSUxFTlRMWScpIHtcbiAgICAgICAgICAgICAgICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21lc3NhZ2UnLCB0aGlzLnJlY2VpdmVNZXNzYWdlRnJvbUNoaWxkLCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucHJvcHMub25Vc2VyQXV0aChcbiAgICAgICAgICAgICAgICAgICAgICAgIGF1dGhJbmZvLmFjY2Vzc190b2tlbixcbiAgICAgICAgICAgICAgICAgICAgICAgIGF1dGhJbmZvLmlkX3Rva2VuLFxuICAgICAgICAgICAgICAgICAgICAgICAgYXV0aEluZm8uc2Vzc2lvbl9zdGF0ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGF1dGhJbmZvLmV4cGlyZXNfaW4sXG4gICAgICAgICAgICAgICAgICAgICAgICBhdXRoSW5mby5oYXNPd25Qcm9wZXJ0eShcInJlZnJlc2hfdG9rZW5cIikgPyBhdXRoSW5mby5yZWZyZXNoX3Rva2VuIDogbnVsbFxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlKXtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJlY2VpdmVNZXNzYWdlKGUpXG4gICAge1xuICAgICAgICAvL2NvbnNvbGUubG9nKFwiT1BTZXNzaW9uQ2hlY2tlcjo6cmVjZWl2ZU1lc3NhZ2UgLSBlLm9yaWdpbiBcIiArIGUub3JpZ2luKTtcbiAgICAgICAgaWYgKGUub3JpZ2luICE9PSB0aGlzLnByb3BzLmlkcEJhc2VVcmwgKSB7XG4gICAgICAgICAgICAvL2NvbnNvbGUubG9nKFwiT1BTZXNzaW9uQ2hlY2tlcjo6cmVjZWl2ZU1lc3NhZ2UgLSBlLm9yaWdpbiAhPT0gdGhpcy5wcm9wcy5pZHBCYXNlVXJsXCIpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGxldCBzdGF0dXMgPSBlLmRhdGE7XG4gICAgICAgIC8vY29uc29sZS5sb2coXCJPUFNlc3Npb25DaGVja2VyOjpyZWNlaXZlTWVzc2FnZSAtIHN0YXR1cyBcIisgc3RhdHVzKTtcbiAgICAgICAgLy9jb25zb2xlLmxvZyhcIk9QU2Vzc2lvbkNoZWNrZXI6OnJlY2VpdmVNZXNzYWdlIC0gdGhpcy5wcm9wcy5zZXNzaW9uU3RhdGVTdGF0dXMgXCIrIHRoaXMucHJvcHMuc2Vzc2lvblN0YXRlU3RhdHVzKTtcbiAgICAgICAgLy9jb25zb2xlLmxvZyhcIk9QU2Vzc2lvbkNoZWNrZXI6OnJlY2VpdmVNZXNzYWdlIC0gdGhpcy5wcm9wcy5pc0xvZ2dlZFVzZXIgXCIrIHRoaXMucHJvcHMuaXNMb2dnZWRVc2VyKTtcbiAgICAgICAgaWYodGhpcy5wcm9wcy5zZXNzaW9uU3RhdGVTdGF0dXMgPT09IFNFU1NJT05fU1RBVEVfU1RBVFVTX1VOQ0hBTkdFRCAmJiB0aGlzLnByb3BzLmlzTG9nZ2VkVXNlcil7XG4gICAgICAgICAgICBpZihzdGF0dXMgPT09IFNFU1NJT05fU1RBVEVfU1RBVFVTX0NIQU5HRUQpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIk9QU2Vzc2lvbkNoZWNrZXI6OnJlY2VpdmVNZXNzYWdlIC0gc2Vzc2lvbiBzdGF0ZSBoYXMgY2hhbmdlZCBvbiBPUFwiKTtcbiAgICAgICAgICAgICAgICAvLyBzaWduYWwgc2Vzc2lvbiBzdGFydCBjaGVja1xuICAgICAgICAgICAgICAgIC8vIGtpbGwgdGltZXJcblxuICAgICAgICAgICAgICAgIGlmKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKVxuICAgICAgICAgICAgICAgICAgICB3aW5kb3cuY2xlYXJJbnRlcnZhbCh0aGlzLmludGVydmFsKTtcbiAgICAgICAgICAgICAgICB0aGlzLmludGVydmFsID0gbnVsbDtcbiAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgKiBXaGVuIHRoZSBSUCBkZXRlY3RzIGEgc2Vzc2lvbiBzdGF0ZSBjaGFuZ2UsIGl0IFNIT1VMRCBmaXJzdCB0cnkgYSBwcm9tcHQ9bm9uZSByZXF1ZXN0IHdpdGhpbiBhblxuICAgICAgICAgICAgICAgICAqIGlmcmFtZSB0byBvYnRhaW4gYSBuZXcgSUQgVG9rZW4gYW5kIHNlc3Npb24gc3RhdGUsIHNlbmRpbmcgdGhlIG9sZCBJRCBUb2tlbiBhcyB0aGUgaWRfdG9rZW5faGludC5cbiAgICAgICAgICAgICAgICAgKiBJZiB0aGUgUlAgcmVjZWl2ZXMgYW4gSUQgdG9rZW4gZm9yIHRoZSBzYW1lIEVuZC1Vc2VyLCBpdCBTSE9VTEQgc2ltcGx5IHVwZGF0ZSB0aGUgdmFsdWUgb2YgdGhlXG4gICAgICAgICAgICAgICAgICogc2Vzc2lvbiBzdGF0ZS4gSWYgaXQgZG9lcyBub3QgcmVjZWl2ZSBhbiBJRCB0b2tlbiBvciByZWNlaXZlcyBhbiBJRCB0b2tlbiBmb3IgYW5vdGhlciBFbmQtVXNlcixcbiAgICAgICAgICAgICAgICAgKiB0aGVuIGl0IG5lZWRzIHRvIGhhbmRsZSB0aGlzIGNhc2UgYXMgYSBsb2dvdXQgZm9yIHRoZSBvcmlnaW5hbCBFbmQtVXNlci4gSWYgdGhlIG9yaWdpbmFsIEVuZC1Vc2VyXG4gICAgICAgICAgICAgICAgICogaXMgYWxyZWFkeSBsb2dnZWQgb3V0IGF0IHRoZSBSUCB3aGVuIHRoZSBzdGF0ZSBjaGFuZ2VzIGluZGljYXRlIHRoYXQgRW5kLVVzZXIgc2hvdWxkIGJlIGxvZ2dlZCBvdXQsXG4gICAgICAgICAgICAgICAgICogdGhlIGxvZ291dCBpcyBjb25zaWRlcmVkIHRvIGhhdmUgc3VjY2VlZGVkLlxuICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdtZXNzYWdlJywgdGhpcy5yZWNlaXZlTWVzc2FnZUZyb21DaGlsZCwgZmFsc2UpO1xuICAgICAgICAgICAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwibWVzc2FnZVwiLCB0aGlzLnJlY2VpdmVNZXNzYWdlLCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgdGhpcy5wcm9wcy51cGRhdGVTZXNzaW9uU3RhdGVTdGF0dXMoU0VTU0lPTl9TVEFURV9TVEFUVVNfQ0hBTkdFRCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmVuZGVyKCkge1xuXG4gICAgICAgIGlmKCF0aGlzLnByb3BzLmlzTG9nZ2VkVXNlcikgcmV0dXJuIG51bGw7XG4gICAgICAgIGlmKCF0aGlzLnByb3BzLnNlc3Npb25TdGF0ZSkgcmV0dXJuIG51bGw7XG5cbiAgICAgICAgaWYodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIGlmICggd2luZG93LmxvY2F0aW9uICE9PSB3aW5kb3cucGFyZW50LmxvY2F0aW9uICkge1xuICAgICAgICAgICAgICAgIC8vY29uc29sZS5sb2coXCJPUFNlc3Npb25DaGVja2VyOjpyZW5kZXIgcnVubmluZyBpbnNpZGUgaWZyYW1lLCBza2lwcGluZ1wiKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbFxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vY29uc29sZS5sb2coXCJPUFNlc3Npb25DaGVja2VyOjpyZW5kZXJcIik7XG4gICAgICAgIHJldHVybihcbiAgICAgICAgICAgIDxkaXYgc3R5bGU9e3toZWlnaHQ6ICcwcHgnfX0+XG4gICAgICAgICAgICAgICAgPGlmcmFtZVxuICAgICAgICAgICAgICAgICAgICByZWY9e3RoaXMuc2V0T1BGcmFtZVJlZn1cbiAgICAgICAgICAgICAgICAgICAgaWQ9XCJPUEZyYW1lXCIgb25Mb2FkPXt0aGlzLnNldFRpbWVyfVxuICAgICAgICAgICAgICAgICAgICBzcmM9e3RoaXMuc3RhdGUub3BGcmFtZV9zcmN9XG4gICAgICAgICAgICAgICAgICAgIHN0eWxlPXt7dmlzaWJpbGl0eTonaGlkZGVuJywgcG9zaXRpb246ICdhYnNvbHV0ZScsIGxlZnQ6IDAsIHRvcDogMCwgYm9yZGVyOiAnbm9uZScsIHdpZHRoOjAgLCBoZWlnaHQ6MH19Pj48L2lmcmFtZT5cbiAgICAgICAgICAgICAgICA8aWZyYW1lIHJlZj17dGhpcy5zZXRDaGVja1Nlc3Npb25TdGF0ZUZyYW1lUmVmfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWQ9XCJSUENIZWNrU2Vzc2lvblN0YXRlRnJhbWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgc3JjPXt0aGlzLnN0YXRlLnJwQ2hlY2tTZXNzaW9uU3RhdGVGcmFtZV9zcmN9XG4gICAgICAgICAgICAgICAgICAgICAgICBvbkxvYWQ9e3RoaXMucnBDaGVja1Nlc3Npb25TdGF0ZUZyYW1lT25Mb2FkfVxuICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9e3t2aXNpYmlsaXR5OidoaWRkZW4nLCBwb3NpdGlvbjogJ2Fic29sdXRlJywgbGVmdDogMCwgdG9wOiAwLCBib3JkZXI6ICdub25lJywgd2lkdGg6MCAsIGhlaWdodDowfX0+PjwvaWZyYW1lPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICk7XG4gICAgfVxufVxuXG5jb25zdCBtYXBTdGF0ZVRvUHJvcHMgPSAoeyBsb2dnZWRVc2VyU3RhdGUgfSkgPT4gKHtcbiAgICBzZXNzaW9uU3RhdGU6IGxvZ2dlZFVzZXJTdGF0ZS5zZXNzaW9uU3RhdGUsXG4gICAgaXNMb2dnZWRVc2VyOiBsb2dnZWRVc2VyU3RhdGUuaXNMb2dnZWRVc2VyLFxuICAgIHNlc3Npb25TdGF0ZVN0YXR1czogbG9nZ2VkVXNlclN0YXRlLnNlc3Npb25TdGF0ZVN0YXR1cyxcbn0pXG5cbmV4cG9ydCBkZWZhdWx0IGNvbm5lY3QobWFwU3RhdGVUb1Byb3BzLCB7XG4gICAgZG9Mb2dvdXQsIHVwZGF0ZVNlc3Npb25TdGF0ZVN0YXR1cywgb25Vc2VyQXV0aFxufSkoT1BTZXNzaW9uQ2hlY2tlcik7XG4iLCIvKipcbiAqIENvcHlyaWdodCAyMDE4IE9wZW5TdGFjayBGb3VuZGF0aW9uXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiovXG5cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0ICcuL3NpbXBsZS1saW5rLWxpc3QubGVzcyc7XG5pbXBvcnQgQXN5bmNTZWxlY3QgZnJvbSAncmVhY3Qtc2VsZWN0L2xpYi9Bc3luYyc7XG5pbXBvcnQgVGFibGUgZnJvbSBcIi4uL3RhYmxlL1RhYmxlXCI7XG5pbXBvcnQgVCBmcm9tICdpMThuLXJlYWN0L2Rpc3QvaTE4bi1yZWFjdCc7XG5pbXBvcnQgQXN5bmNDcmVhdGFibGVTZWxlY3QgZnJvbSBcInJlYWN0LXNlbGVjdC9saWIvQXN5bmNDcmVhdGFibGVcIjtcblxuXG5jbGFzcyBTaW1wbGVMaW5rTGlzdCBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgICAgICBzdXBlcihwcm9wcyk7XG5cbiAgICAgICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgICAgICAgIHZhbHVlOiAnJ1xuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMuaGFuZGxlQ2hhbmdlID0gdGhpcy5oYW5kbGVDaGFuZ2UuYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5nZXRPcHRpb25zID0gdGhpcy5nZXRPcHRpb25zLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuaGFuZGxlTGluayA9IHRoaXMuaGFuZGxlTGluay5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLmZpbHRlck9wdGlvbiA9IHRoaXMuZmlsdGVyT3B0aW9uLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuaGFuZGxlTmV3ID0gdGhpcy5oYW5kbGVOZXcuYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5nZXROZXdPcHRpb25EYXRhID0gdGhpcy5nZXROZXdPcHRpb25EYXRhLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuaXNWYWxpZE5ld09wdGlvbiA9IHRoaXMuaXNWYWxpZE5ld09wdGlvbi5iaW5kKHRoaXMpO1xuICAgIH1cblxuICAgIGdldE9wdGlvbnMoaW5wdXQsIGNhbGxiYWNrKSB7XG4gICAgICAgIGxldCB7b3B0aW9uc30gPSB0aGlzLnByb3BzO1xuICAgICAgICBsZXQgZGVmYXVsdE9wdGlvbnMgPSBvcHRpb25zLmhhc093blByb3BlcnR5KCdkZWZhdWx0T3B0aW9ucycpID8gb3B0aW9ucy5kZWZhdWx0T3B0aW9ucyA6IHVuZGVmaW5lZDtcblxuICAgICAgICBpZiAoIWlucHV0ICYmICFkZWZhdWx0T3B0aW9ucykge1xuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh7IG9wdGlvbnM6IFtdIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5wcm9wcy5vcHRpb25zLmFjdGlvbnMuc2VhcmNoKGlucHV0LCBjYWxsYmFjayk7XG4gICAgfVxuXG4gICAgaGFuZGxlQ2hhbmdlKHZhbHVlKSB7XG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe3ZhbHVlfSk7XG4gICAgfVxuXG4gICAgaGFuZGxlTGluayhldikge1xuICAgICAgICBldi5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB0aGlzLnByb3BzLm9wdGlvbnMuYWN0aW9ucy5hZGQub25DbGljayh0aGlzLnN0YXRlLnZhbHVlKTtcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7dmFsdWU6ICcnfSk7XG4gICAgfVxuXG4gICAgZ2V0TmV3T3B0aW9uRGF0YShpbnB1dFZhbHVlLCBvcHRpb25MYWJlbCkge1xuICAgICAgICByZXR1cm4ge3RhZzogb3B0aW9uTGFiZWwsIGlkOmlucHV0VmFsdWV9O1xuICAgIH1cblxuICAgIGlzVmFsaWROZXdPcHRpb24oaW5wdXRWYWx1ZSwgc2VsZWN0VmFsdWUsIHNlbGVjdE9wdGlvbnMpIHtcbiAgICAgICAgbGV0IHtvcHRpb25zfSA9IHRoaXMucHJvcHM7XG4gICAgICAgIGxldCBsYWJlbEtleSA9IG9wdGlvbnMuaGFzT3duUHJvcGVydHkoJ2xhYmVsS2V5JykgPyBvcHRpb25zLmxhYmVsS2V5IDogJ2xhYmVsJztcbiAgICAgICAgbGV0IG9wdGlvbkZvdW5kID0gc2VsZWN0T3B0aW9ucy5maW5kKG9wID0+IG9wW2xhYmVsS2V5XSA9PSBpbnB1dFZhbHVlKTtcbiAgICAgICAgcmV0dXJuICghaW5wdXRWYWx1ZSB8fCBvcHRpb25Gb3VuZCkgPyBmYWxzZSA6IHRydWU7XG4gICAgfVxuXG4gICAgaGFuZGxlTmV3KHZhbHVlKSB7XG4gICAgICAgIHRoaXMucHJvcHMub3B0aW9ucy5vbkNyZWF0ZVRhZyh2YWx1ZSwgdGhpcy5oYW5kbGVDaGFuZ2UpO1xuICAgIH1cblxuICAgIGZpbHRlck9wdGlvbihjYW5kaWRhdGUsIGlucHV0VmFsdWUpIHtcbiAgICAgICAgbGV0IHtvcHRpb25zLCB2YWx1ZXN9ID0gdGhpcy5wcm9wcztcbiAgICAgICAgbGV0IGFsbG93RHVwbGljYXRlcyA9IHRoaXMucHJvcHMuaGFzT3duUHJvcGVydHkoJ2FsbG93RHVwbGljYXRlcycpO1xuICAgICAgICBsZXQgbGFiZWxLZXkgPSBvcHRpb25zLmhhc093blByb3BlcnR5KCdsYWJlbEtleScpID8gb3B0aW9ucy5sYWJlbEtleSA6ICdsYWJlbCc7XG5cbiAgICAgICAgaWYgKGFsbG93RHVwbGljYXRlcykgcmV0dXJuIHRydWU7XG5cbiAgICAgICAgbGV0IG9wdGlvbkZvdW5kID0gdmFsdWVzLmZpbmQodmFsID0+IHZhbFtsYWJlbEtleV0gPT09IGNhbmRpZGF0ZS5sYWJlbCk7XG5cbiAgICAgICAgcmV0dXJuICFvcHRpb25Gb3VuZDtcbiAgICB9XG5cblxuICAgIHJlbmRlcigpIHtcblxuICAgICAgICBsZXQge29wdGlvbnMsIHZhbHVlcywgY29sdW1uc30gPSB0aGlzLnByb3BzO1xuICAgICAgICBsZXQgZGlzYWJsZWRBZGQgPSAoIXRoaXMuc3RhdGUudmFsdWUpO1xuXG4gICAgICAgIGxldCB0aXRsZSA9IG9wdGlvbnMuaGFzT3duUHJvcGVydHkoJ3RpdGxlJykgPyBvcHRpb25zLnRpdGxlIDogJ1RhYmxlJztcbiAgICAgICAgbGV0IHZhbHVlS2V5ID0gb3B0aW9ucy5oYXNPd25Qcm9wZXJ0eSgndmFsdWVLZXknKSA/IG9wdGlvbnMudmFsdWVLZXkgOiAndmFsdWUnO1xuICAgICAgICBsZXQgbGFiZWxLZXkgPSBvcHRpb25zLmhhc093blByb3BlcnR5KCdsYWJlbEtleScpID8gb3B0aW9ucy5sYWJlbEtleSA6ICdsYWJlbCc7XG4gICAgICAgIGxldCBhbGxvd0NyZWF0ZSA9IG9wdGlvbnMuaGFzT3duUHJvcGVydHkoJ29uQ3JlYXRlVGFnJyk7XG4gICAgICAgIGxldCBkZWZhdWx0T3B0aW9ucyA9IG9wdGlvbnMuaGFzT3duUHJvcGVydHkoJ2RlZmF1bHRPcHRpb25zJykgPyBvcHRpb25zLmRlZmF1bHRPcHRpb25zIDogdW5kZWZpbmVkO1xuXG4gICAgICAgIGxldCB0YWJsZU9wdGlvbnMgPSB7XG4gICAgICAgICAgICBjbGFzc05hbWU6ICdkYXRhVGFibGUnLFxuICAgICAgICAgICAgYWN0aW9uczoge1xuICAgICAgICAgICAgICAgIGRlbGV0ZTogb3B0aW9ucy5hY3Rpb25zLmRlbGV0ZVxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICAgIGlmIChvcHRpb25zLmhhc093blByb3BlcnR5KCdjbGFzc05hbWUnKSkge1xuICAgICAgICAgICAgdGFibGVPcHRpb25zLmNsYXNzTmFtZSA9IG9wdGlvbnMuY2xhc3NOYW1lO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG9wdGlvbnMuYWN0aW9ucy5oYXNPd25Qcm9wZXJ0eSgnZWRpdCcpKSB7XG4gICAgICAgICAgICB0YWJsZU9wdGlvbnMuYWN0aW9ucy5lZGl0ID0gb3B0aW9ucy5hY3Rpb25zLmVkaXQ7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAob3B0aW9ucy5hY3Rpb25zLmhhc093blByb3BlcnR5KCdjdXN0b20nKSkge1xuICAgICAgICAgICAgdGFibGVPcHRpb25zLmFjdGlvbnMuY3VzdG9tID0gb3B0aW9ucy5hY3Rpb25zLmN1c3RvbTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChvcHRpb25zLmhhc093blByb3BlcnR5KCdzb3J0Q29sJykpIHtcbiAgICAgICAgICAgIHZhbHVlcyA9IHZhbHVlcy5zb3J0KFxuICAgICAgICAgICAgICAgIChhLCBiKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW1BID0gaXNOYU4oYVtvcHRpb25zLnNvcnRDb2xdKSA/IGFbb3B0aW9ucy5zb3J0Q29sXS50b0xvd2VyQ2FzZSgpIDogYVtvcHRpb25zLnNvcnRDb2xdO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBpdGVtQiA9IGlzTmFOKGJbb3B0aW9ucy5zb3J0Q29sXSkgPyBiW29wdGlvbnMuc29ydENvbF0udG9Mb3dlckNhc2UoKSA6IGJbb3B0aW9ucy5zb3J0Q29sXTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChpdGVtQSA+IGl0ZW1CID8gMSA6IChpdGVtQSA8IGl0ZW1CID8gLTEgOiAwKSlcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cblxuICAgICAgICBsZXQgQXN5bmNDb21wb25lbnQgPSBudWxsO1xuXG4gICAgICAgIGlmIChhbGxvd0NyZWF0ZSkge1xuICAgICAgICAgICAgQXN5bmNDb21wb25lbnQgPVxuICAgICAgICAgICAgICAgIDxBc3luY0NyZWF0YWJsZVNlbGVjdFxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJsaW5rLXNlbGVjdCBidG4tZ3JvdXAgdGV4dC1sZWZ0XCJcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU9e3RoaXMuc3RhdGUudmFsdWV9XG4gICAgICAgICAgICAgICAgICAgIGdldE9wdGlvblZhbHVlPXtvcHRpb24gPT4gb3B0aW9uW3ZhbHVlS2V5XX1cbiAgICAgICAgICAgICAgICAgICAgZ2V0T3B0aW9uTGFiZWw9e29wdGlvbiA9PiBvcHRpb25bbGFiZWxLZXldfVxuICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17dGhpcy5oYW5kbGVDaGFuZ2V9XG4gICAgICAgICAgICAgICAgICAgIGxvYWRPcHRpb25zPXt0aGlzLmdldE9wdGlvbnN9XG4gICAgICAgICAgICAgICAgICAgIGZpbHRlck9wdGlvbj17dGhpcy5maWx0ZXJPcHRpb259XG4gICAgICAgICAgICAgICAgICAgIG9uQ3JlYXRlT3B0aW9uPXt0aGlzLmhhbmRsZU5ld31cbiAgICAgICAgICAgICAgICAgICAgZ2V0TmV3T3B0aW9uRGF0YT17dGhpcy5nZXROZXdPcHRpb25EYXRhfVxuICAgICAgICAgICAgICAgICAgICBpc1ZhbGlkTmV3T3B0aW9uPXt0aGlzLmlzVmFsaWROZXdPcHRpb259XG4gICAgICAgICAgICAgICAgLz47XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBBc3luY0NvbXBvbmVudCA9XG4gICAgICAgICAgICAgICAgPEFzeW5jU2VsZWN0XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImxpbmstc2VsZWN0IGJ0bi1ncm91cCB0ZXh0LWxlZnRcIlxuICAgICAgICAgICAgICAgICAgICB2YWx1ZT17dGhpcy5zdGF0ZS52YWx1ZX1cbiAgICAgICAgICAgICAgICAgICAgZ2V0T3B0aW9uVmFsdWU9e29wdGlvbiA9PiBvcHRpb25bdmFsdWVLZXldfVxuICAgICAgICAgICAgICAgICAgICBnZXRPcHRpb25MYWJlbD17b3B0aW9uID0+IG9wdGlvbltsYWJlbEtleV19XG4gICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXt0aGlzLmhhbmRsZUNoYW5nZX1cbiAgICAgICAgICAgICAgICAgICAgbG9hZE9wdGlvbnM9e3RoaXMuZ2V0T3B0aW9uc31cbiAgICAgICAgICAgICAgICAgICAgZmlsdGVyT3B0aW9uPXt0aGlzLmZpbHRlck9wdGlvbn1cbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdE9wdGlvbnM9e2RlZmF1bHRPcHRpb25zfVxuICAgICAgICAgICAgICAgIC8+O1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwicm93IHNpbXBsZS1saW5rLWxpc3RcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImNvbC1tZC00IHNpbXBsZS1saW5rLWxpc3QtdGl0bGVcIj5cbiAgICAgICAgICAgICAgICAgICAgPGg0Pnt0aXRsZX08L2g0PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiY29sLW1kIHB1bGwtcmlnaHQgYnRuLWdyb3VwXCI+XG4gICAgICAgICAgICAgICAgICAgIHtBc3luY0NvbXBvbmVudH1cbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3NOYW1lPVwiYnRuIGJ0bi1kZWZhdWx0IGFkZC1idXR0b25cIiBvbkNsaWNrPXt0aGlzLmhhbmRsZUxpbmt9IGRpc2FibGVkPXtkaXNhYmxlZEFkZH0+XG4gICAgICAgICAgICAgICAgICAgICAgICB7VC50cmFuc2xhdGUoXCJnZW5lcmFsLmFkZFwiKX1cbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJjb2wtbWQtMTJcIj5cbiAgICAgICAgICAgICAgICAgICAgPFRhYmxlXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJkYXRhVGFibGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucz17dGFibGVPcHRpb25zfVxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YT17dmFsdWVzfVxuICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1ucz17Y29sdW1uc31cbiAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICApO1xuXG4gICAgfVxufVxuXG5TaW1wbGVMaW5rTGlzdC5wcm9wVHlwZXMgPSB7XG4gICAgdmFsdWVzOiBQcm9wVHlwZXMuYXJyYXkuaXNSZXF1aXJlZCxcbiAgICBvcHRpb25zOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgICAgICB0aXRsZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICAgICAgc29ydENvbDogUHJvcFR5cGVzLnN0cmluZyxcbiAgICAgICAgdmFsdWVLZXk6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgICAgICAgbGFiZWxLZXk6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgICAgICAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgICAgICBhY3Rpb25zOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgICAgICAgICAgc2VhcmNoOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgICAgICAgICAgZGVsZXRlOiBQcm9wVHlwZXMuc2hhcGUoe29uQ2xpY2s6UHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZH0pLFxuICAgICAgICAgICAgYWRkOiBQcm9wVHlwZXMuc2hhcGUoe29uQ2xpY2s6UHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZH0pLFxuICAgICAgICAgICAgZWRpdDogUHJvcFR5cGVzLnNoYXBlKHtvbkNsaWNrOlByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWR9KSxcbiAgICAgICAgICAgIGN1c3RvbTogUHJvcFR5cGVzLmFycmF5LFxuICAgICAgICB9KS5pc1JlcXVpcmVkXG4gICAgfSkuaXNSZXF1aXJlZCxcbiAgICBjb2x1bW5zOiBQcm9wVHlwZXMuYXJyYXkuaXNSZXF1aXJlZFxufVxuXG5leHBvcnQgZGVmYXVsdCBTaW1wbGVMaW5rTGlzdDtcbiIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpbiIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTcgT3BlblN0YWNrIEZvdW5kYXRpb25cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqKi9cblxuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCAnLi9zdW1taXQtZHJvcGRvd24ubGVzcyc7XG5pbXBvcnQgU2VsZWN0IGZyb20gJ3JlYWN0LXNlbGVjdCc7XG5pbXBvcnQgVCBmcm9tICdpMThuLXJlYWN0L2Rpc3QvaTE4bi1yZWFjdCc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFN1bW1pdERyb3Bkb3duIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcblxuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgICAgIHN1cGVyKHByb3BzKTtcblxuICAgICAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgICAgICAgc3VtbWl0VmFsdWU6IG51bGwsXG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5oYW5kbGVDaGFuZ2UgPSB0aGlzLmhhbmRsZUNoYW5nZS5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLmhhbmRsZUNsaWNrID0gdGhpcy5oYW5kbGVDbGljay5iaW5kKHRoaXMpO1xuICAgIH1cblxuICAgIGhhbmRsZUNoYW5nZShzdW1taXQpIHtcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7c3VtbWl0VmFsdWU6IHN1bW1pdH0pO1xuICAgIH1cblxuICAgIGhhbmRsZUNsaWNrKGV2KSB7XG4gICAgICAgIGV2LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHRoaXMucHJvcHMub25DbGljayh0aGlzLnN0YXRlLnN1bW1pdFZhbHVlLnZhbHVlKTtcbiAgICB9XG5cbiAgICByZW5kZXIoKSB7XG5cbiAgICAgICAgbGV0IHtzdW1taXRzLCBhY3Rpb25MYWJlbCwgYWN0aW9uQ2xhc3N9ID0gdGhpcy5wcm9wcztcbiAgICAgICAgbGV0IHN1bW1pdE9wdGlvbnMgPSBzdW1taXRzXG4gICAgICAgICAgICAuc29ydChcbiAgICAgICAgICAgICAgICAoYSwgYikgPT4gKGEuc3RhcnRfZGF0ZSA8IGIuc3RhcnRfZGF0ZSA/IDEgOiAoYS5zdGFydF9kYXRlID4gYi5zdGFydF9kYXRlID8gLTEgOiAwKSlcbiAgICAgICAgICAgICkubWFwKHMgPT4gKHtsYWJlbDogcy5uYW1lLCB2YWx1ZTogcy5pZH0pKTtcblxuICAgICAgICBsZXQgYmlnQ2xhc3MgPSB0aGlzLnByb3BzLmhhc093blByb3BlcnR5KCdiaWcnKSA/ICdiaWcnIDogJyc7XG5cbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtcInN1bW1pdC1kcm9wZG93biBidG4tZ3JvdXAgXCIgKyBiaWdDbGFzc30+XG4gICAgICAgICAgICAgICAgPFNlbGVjdFxuICAgICAgICAgICAgICAgICAgICBpZD1cInN1bW1pdC1zZWxlY3RcIlxuICAgICAgICAgICAgICAgICAgICB2YWx1ZT17dGhpcy5zdGF0ZS5zdW1taXRWYWx1ZX1cbiAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9e3RoaXMuaGFuZGxlQ2hhbmdlfVxuICAgICAgICAgICAgICAgICAgICBvcHRpb25zPXtzdW1taXRPcHRpb25zfVxuICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj17VC50cmFuc2xhdGUoXCJnZW5lcmFsLnNlbGVjdF9zdW1taXRcIil9XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImJ0bi1ncm91cCBzdW1taXQtc2VsZWN0IHRleHQtbGVmdFwiXG4gICAgICAgICAgICAgICAgICAgIGlzQ2xlYXJhYmxlPXtmYWxzZX1cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzTmFtZT17YGJ0biBidG4tZGVmYXVsdCAke2FjdGlvbkNsYXNzfWB9IG9uQ2xpY2s9e3RoaXMuaGFuZGxlQ2xpY2t9PlxuICAgICAgICAgICAgICAgICAgICB7YWN0aW9uTGFiZWx9XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKTtcblxuICAgIH1cbn1cbiIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpbiIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVkaXRhYmxlQWN0aW9uc1RhYmxlQ2VsbCBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgICAgICBzdXBlcihwcm9wcyk7XG5cbiAgICAgICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgICAgICAgIGlzX2VkaXRpbmc6IGZhbHNlXG4gICAgICAgIH1cblxuICAgIH1cblxuICAgIG9uRGVsZXRlKGlkLCBldikge1xuICAgICAgICBldi5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBldi5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgICAgICB0aGlzLnByb3BzLmFjdGlvbnMuZGVsZXRlKGlkKTtcbiAgICB9XG5cbiAgICBvblNhdmUoaWQsIGV2KSB7XG4gICAgICAgIGV2LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGV2LnN0b3BQcm9wYWdhdGlvbigpO1xuXG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgICAgaXNfZWRpdGluZzogZmFsc2VcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5wcm9wcy5hY3Rpb25zLnNhdmUoaWQpO1xuICAgIH1cblxuICAgIG9uRWRpdChpZCwgZXYpIHtcbiAgICAgICAgZXYucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgZXYuc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgICBpc19lZGl0aW5nOiB0cnVlXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMucHJvcHMuYWN0aW9ucy5lZGl0KGlkKTtcbiAgICB9XG5cbiAgICBvbkNhbmNlbChpZCwgZXYpIHtcbiAgICAgICAgZXYucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgZXYuc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgICBpc19lZGl0aW5nOiBmYWxzZVxuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLnByb3BzLmFjdGlvbnMuY2FuY2VsKGlkKTtcbiAgICB9XG5cbiAgICByZW5kZXIoKSB7XG4gICAgICAgIGxldCB7YWN0aW9ucywgaWR9ID0gdGhpcy5wcm9wcztcblxuICAgICAgICBpZiAodGhpcy5zdGF0ZS5pc19lZGl0aW5nKSB7XG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgIDx0ZCBjbGFzc05hbWU9XCJhY3Rpb25zXCI+XG4gICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9XCJcIiBvbkNsaWNrPXt0aGlzLm9uU2F2ZS5iaW5kKHRoaXMsaWQpfSBkYXRhLXRpcD1cInNhdmVcIiA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzc05hbWU9XCJmYSBmYS1mbG9wcHktb1wiPjwvaT5cbiAgICAgICAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgICAgICAgICA8YSBocmVmPVwiXCIgb25DbGljaz17dGhpcy5vbkNhbmNlbC5iaW5kKHRoaXMsaWQpfSBkYXRhLXRpcD1cImNhbmNlbFwiID5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzTmFtZT1cImZhIGZhLXRpbWVzXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgIDx0ZCBjbGFzc05hbWU9XCJhY3Rpb25zXCI+XG4gICAgICAgICAgICAgICAgICAgIHsnZWRpdCcgaW4gYWN0aW9ucyAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj1cIlwiIG9uQ2xpY2s9e3RoaXMub25FZGl0LmJpbmQodGhpcyxpZCl9IGRhdGEtdGlwPVwiZWRpdFwiID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzc05hbWU9XCJmYSBmYS1wZW5jaWwtc3F1YXJlLW9cIj48L2k+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgeydkZWxldGUnIGluIGFjdGlvbnMgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9XCJcIiBvbkNsaWNrPXt0aGlzLm9uRGVsZXRlLmJpbmQodGhpcyxpZCl9IGRhdGEtdGlwPVwiZGVsZXRlXCIgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzTmFtZT1cImZhIGZhLXRyYXNoLW8gZGVsZXRlLWljb25cIj48L2k+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgIH1cbn07XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IEVkaXRhYmxlVGFibGVIZWFkaW5nIGZyb20gJy4vRWRpdGFibGVUYWJsZUhlYWRpbmcnO1xuaW1wb3J0IEVkaXRhYmxlVGFibGVDZWxsIGZyb20gJy4vRWRpdGFibGVUYWJsZUNlbGwnO1xuaW1wb3J0IEVkaXRhYmxlQWN0aW9uc1RhYmxlQ2VsbCBmcm9tICcuL0VkaXRhYmxlQWN0aW9uc1RhYmxlQ2VsbCc7XG5pbXBvcnQgRWRpdGFibGVUYWJsZVJvdyBmcm9tICcuL0VkaXRhYmxlVGFibGVSb3cnO1xuaW1wb3J0IFN3YWwgZnJvbSBcInN3ZWV0YWxlcnQyXCI7XG5pbXBvcnQgVCBmcm9tIFwiaTE4bi1yZWFjdC9kaXN0L2kxOG4tcmVhY3RcIjtcbmltcG9ydCAnLi9lZGl0YWJsZS10YWJsZS5jc3MnO1xuaW1wb3J0IFJlYWN0VG9vbHRpcCBmcm9tIFwicmVhY3QtdG9vbHRpcFwiO1xuaW1wb3J0IHsgc2hhbGxvd0VxdWFsIH0gZnJvbSAnLi4vLi4vdXRpbHMvbWV0aG9kcydcblxuY29uc3QgZGVmYXVsdHMgPSB7XG4gICAgY29sV2lkdGg6ICcnXG59O1xuXG5jb25zdCBjcmVhdGVSb3cgPSAocm93LCBjb2x1bW5zLCBhY3Rpb25zLCBzaG91bGRVc2VUZXh0QXJlYSkgPT4ge1xuXG4gICAgdmFyIGFjdGlvbl9idXR0b25zID0gJyc7XG4gICAgdmFyIGNlbGxzID0gY29sdW1ucy5tYXAoKGNvbCxpKSA9PiB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8RWRpdGFibGVUYWJsZUNlbGwgc2hvdWxkVXNlVGV4dEFyZWE9e3Nob3VsZFVzZVRleHRBcmVhfSBrZXk9e3Jvd1snaWQnXSArICdfZmllbGQnICsgaX0gbmFtZT17Y29sLmNvbHVtbktleX0gaWQ9e3Jvdy5pZH0gaXNfZWRpdD17cm93LmlzX2VkaXR9IGhhbmRsZUNoYW5nZT17YWN0aW9ucy5oYW5kbGVDaGFuZ2V9PlxuICAgICAgICAgICAgICAgIHtyb3dbY29sLmNvbHVtbktleV19XG4gICAgICAgICAgICA8L0VkaXRhYmxlVGFibGVDZWxsPlxuICAgICAgICApO1xuICAgIH0pO1xuXG4gICAgaWYgKGFjdGlvbnMpIHtcbiAgICAgICAgY2VsbHMucHVzaCg8RWRpdGFibGVBY3Rpb25zVGFibGVDZWxsIGtleT17J2FjdGlvbnNfJyArIHJvd1snaWQnXX0gaWQ9e3Jvd1snaWQnXX0gYWN0aW9ucz17YWN0aW9uc30vPik7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNlbGxzO1xufTtcblxuY29uc3QgY3JlYXRlTmV3Um93ID0gKGNvbHVtbnMsIG5ld19yb3csIGFkZE5ldywgaGFuZGxlQ2hhbmdlLCBzaG91bGRVc2VUZXh0QXJlYSkgPT4ge1xuXG4gICAgdmFyIGNlbGxzID0gY29sdW1ucy5tYXAoKGNvbCxpKSA9PiB7XG4gICAgICAgIGxldCBjZWxsX3ZhbHVlID0gKHR5cGVvZiBuZXdfcm93W2NvbC5jb2x1bW5LZXldICE9PSAndW5kZWZpbmVkJykgPyBuZXdfcm93W2NvbC5jb2x1bW5LZXldIDogJyc7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8dGQga2V5PXsnbmV3X3Jvd18nICsgaX0+XG4gICAgICAgICAgICAgICAge3Nob3VsZFVzZVRleHRBcmVhICYmXG4gICAgICAgICAgICAgICAgICAgIDx0ZXh0YXJlYSBjbGFzc05hbWU9XCJmb3JtLWNvbnRyb2xcIiBpZD17J25ld18nICsgY29sLmNvbHVtbktleX0gbmFtZT17Y29sLmNvbHVtbktleX0gb25DaGFuZ2U9e2hhbmRsZUNoYW5nZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPXtjZWxsX3ZhbHVlfS8+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHshc2hvdWxkVXNlVGV4dEFyZWEgJiZcbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzTmFtZT1cImZvcm0tY29udHJvbFwiIGlkPXsnbmV3XycgKyBjb2wuY29sdW1uS2V5fSBuYW1lPXtjb2wuY29sdW1uS2V5fSBvbkNoYW5nZT17aGFuZGxlQ2hhbmdlfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e2NlbGxfdmFsdWV9Lz5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L3RkPlxuICAgICAgICApO1xuICAgIH0pO1xuXG4gICAgY2VsbHMucHVzaChcbiAgICAgICAgPHRkIGtleT0nYWRkX25ldyc+XG4gICAgICAgICAgICA8YnV0dG9uIGNsYXNzTmFtZT1cImJ0biBidG4tZGVmYXVsdFwiIG9uQ2xpY2s9e2FkZE5ld30+IEFkZCA8L2J1dHRvbj5cbiAgICAgICAgPC90ZD5cbiAgICApO1xuXG4gICAgcmV0dXJuIGNlbGxzO1xufTtcblxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFZGl0YWJsZVRhYmxlIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcblxuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgICAgIHN1cGVyKHByb3BzKTtcblxuICAgICAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgICAgICAgcm93czogcHJvcHMuZGF0YSxcbiAgICAgICAgICAgIG5ld19yb3c6IHt9XG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gd2Ugc3RvcmUgdGhlIGRlbGV0ZSBhbmQgc2F2ZSBmdW5jdGlvbnMgaW4gcHJvcHMgY2F1c2Ugd2UgbmVlZCB0byBleHRlbmQgdGhlbVxuICAgICAgICB0aGlzLm9uU2F2ZSA9IHByb3BzLm9wdGlvbnMuYWN0aW9ucy5zYXZlLm9uQ2xpY2s7XG5cbiAgICAgICAgdGhpcy5hY3Rpb25zID0gey4uLnByb3BzLm9wdGlvbnMuYWN0aW9uc307XG4gICAgICAgIHRoaXMuYWN0aW9ucy5lZGl0ID0gdGhpcy5lZGl0Um93LmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuYWN0aW9ucy5zYXZlID0gdGhpcy5zYXZlUm93LmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuYWN0aW9ucy5kZWxldGUgPSB0aGlzLmRlbGV0ZUNsaWNrLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuYWN0aW9ucy5oYW5kbGVDaGFuZ2UgPSB0aGlzLm9uQ2hhbmdlQ2VsbC5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLmFjdGlvbnMuY2FuY2VsID0gdGhpcy5lZGl0Um93Q2FuY2VsLmJpbmQodGhpcyk7XG5cbiAgICAgICAgdGhpcy5zYXZlTmV3Um93ID0gdGhpcy5zYXZlTmV3Um93LmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuaGFuZGxlTmV3Q2hhbmdlID0gdGhpcy5vbkNoYW5nZU5ld0NlbGwuYmluZCh0aGlzKTtcbiAgICB9XG5cbiAgICBjb21wb25lbnREaWRVcGRhdGUocHJldlByb3BzLCBwcmV2U3RhdGUsIHNuYXBzaG90KSB7XG4gICAgICAgIGlmKCFzaGFsbG93RXF1YWwodGhpcy5wcm9wcy5kYXRhLCBwcmV2UHJvcHMuZGF0YSkpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0U3RhdGUoe3Jvd3M6IHRoaXMucHJvcHMuZGF0YX0pXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzYXZlUm93KGlkLCBldikge1xuICAgICAgICBjb25zdCB7IHJvd3MgfSA9IHRoaXMuc3RhdGU7XG4gICAgICAgIGxldCByb3cgPSByb3dzLmZpbmQociA9PiByLmlkID09IGlkKTtcbiAgICAgICAgcm93LmlzX2VkaXQgPSBmYWxzZTtcblxuICAgICAgICB0aGlzLmVkaXRpbmdfcm93ID0gbnVsbDtcblxuICAgICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICAgIHJvd3M6IHJvd3NcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5vblNhdmUocm93KTtcbiAgICB9XG5cbiAgICBkZWxldGVDbGljayhpZCkge1xuICAgICAgICBsZXQgb25EZWxldGUgPSB0aGlzLnByb3BzLm9wdGlvbnMuYWN0aW9ucy5kZWxldGUub25DbGljaztcbiAgICAgICAgbGV0IG5vQWxlcnQgPSB0aGlzLnByb3BzLm9wdGlvbnMuaGFzT3duUHJvcGVydHkoJ25vQWxlcnQnKTtcblxuICAgICAgICBpZiAobm9BbGVydCkge1xuICAgICAgICAgICAgb25EZWxldGUoaWQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgU3dhbC5maXJlKHtcbiAgICAgICAgICAgICAgICB0aXRsZTogVC50cmFuc2xhdGUoXCJnZW5lcmFsLmFyZV95b3Vfc3VyZVwiKSxcbiAgICAgICAgICAgICAgICB0ZXh0OiBULnRyYW5zbGF0ZShcImdlbmVyYWwucmVtb3ZlX3dhcm5pbmdcIiksXG4gICAgICAgICAgICAgICAgdHlwZTogXCJ3YXJuaW5nXCIsXG4gICAgICAgICAgICAgICAgc2hvd0NhbmNlbEJ1dHRvbjogdHJ1ZSxcbiAgICAgICAgICAgICAgICBjb25maXJtQnV0dG9uQ29sb3I6IFwiI0RENkI1NVwiLFxuICAgICAgICAgICAgICAgIGNvbmZpcm1CdXR0b25UZXh0OiBULnRyYW5zbGF0ZShcImdlbmVyYWwueWVzX2RlbGV0ZVwiKVxuICAgICAgICAgICAgfSkudGhlbihmdW5jdGlvbihyZXN1bHQpe1xuICAgICAgICAgICAgICAgIGlmIChyZXN1bHQudmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgb25EZWxldGUoaWQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZWRpdFJvdyhpZCwgZXYpIHtcbiAgICAgICAgY29uc3QgeyByb3dzIH0gPSB0aGlzLnN0YXRlO1xuICAgICAgICBsZXQgcm93ID0gcm93cy5maW5kKHIgPT4gci5pZCA9PSBpZCk7XG5cbiAgICAgICAgLy9zYXZlIGVkaXRpbmcgcm93IGZvciBjYW5jZWxcbiAgICAgICAgdGhpcy5lZGl0aW5nX3JvdyA9IHsuLi5yb3d9O1xuXG4gICAgICAgIHJvdy5pc19lZGl0ID0gdHJ1ZTtcblxuICAgICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICAgIHJvd3M6IHJvd3NcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgZWRpdFJvd0NhbmNlbChpZCwgZXYpIHtcbiAgICAgICAgY29uc3QgeyByb3dzIH0gPSB0aGlzLnN0YXRlO1xuICAgICAgICByb3dzLmZvckVhY2gociA9PiB7XG4gICAgICAgICAgICByLmlzX2VkaXQgPSBmYWxzZTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgbGV0IHJvd0lkeCA9IHJvd3MuZmluZEluZGV4KHIgPT4gci5pZCA9PSBpZCk7XG5cbiAgICAgICAgcm93c1tyb3dJZHhdID0gdGhpcy5lZGl0aW5nX3JvdztcblxuICAgICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICAgIHJvd3M6IHJvd3NcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgb25DaGFuZ2VDZWxsKGV2KSB7XG4gICAgICAgIGNvbnN0IHsgcm93cyB9ID0gdGhpcy5zdGF0ZTtcbiAgICAgICAgbGV0IGZpZWxkID0gZXYudGFyZ2V0O1xuICAgICAgICBsZXQgcm93ID0gcm93cy5maW5kKHIgPT4gci5pZCA9PSBmaWVsZC5pZCk7XG5cbiAgICAgICAgcm93W2ZpZWxkLm5hbWVdID0gZmllbGQudmFsdWU7XG5cbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgICByb3dzOiByb3dzXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIG9uQ2hhbmdlTmV3Q2VsbChldikge1xuICAgICAgICBjb25zdCB7bmV3X3Jvd30gPSB0aGlzLnN0YXRlO1xuICAgICAgICBsZXQgZmllbGQgPSBldi50YXJnZXQ7XG5cbiAgICAgICAgbmV3X3Jvd1tmaWVsZC5uYW1lXSA9IGZpZWxkLnZhbHVlO1xuXG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgICAgbmV3X3JvdzogbmV3X3Jvd1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBzYXZlTmV3Um93KGV2KSB7XG4gICAgICAgIGNvbnN0IHtuZXdfcm93fSA9IHRoaXMuc3RhdGU7XG4gICAgICAgIGV2LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAgICAgdGhpcy5vblNhdmUobmV3X3Jvdyk7XG5cbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgICBuZXdfcm93OiB7fVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICByZW5kZXIoKSB7XG4gICAgICAgIGxldCB7b3B0aW9ucywgY29sdW1ucyB9ID0gdGhpcy5wcm9wcztcbiAgICAgICAgbGV0IHRhYmxlQ2xhc3MgPSBvcHRpb25zLmhhc093blByb3BlcnR5KCdjbGFzc05hbWUnKSA/IG9wdGlvbnMuY2xhc3NOYW1lIDogJyc7XG4gICAgICAgIGxldCB0ZXh0QXJlYSA9IHRoaXMucHJvcHMuaGFzT3duUHJvcGVydHkoXCJ0ZXh0QXJlYVwiKTtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgPHRhYmxlIGNsYXNzTmFtZT17XCJ0YWJsZSB0YWJsZS1zdHJpcGVkIHRhYmxlLWJvcmRlcmVkIGVkaXRhYmxlVGFibGUgXCIgKyB0YWJsZUNsYXNzfT5cbiAgICAgICAgICAgICAgICAgICAgPHRoZWFkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtjb2x1bW5zLm1hcCgoY29sLGkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGNvbFdpZHRoID0gKGNvbC53aWR0aCkgPyBjb2wud2lkdGggOiBkZWZhdWx0cy5jb2xXaWR0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxFZGl0YWJsZVRhYmxlSGVhZGluZyB3aWR0aD17Y29sV2lkdGh9IGtleT17J2hlYWRpbmdfJyArIGl9ID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Y29sLnZhbHVlfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9FZGl0YWJsZVRhYmxlSGVhZGluZz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7dGhpcy5hY3Rpb25zICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxFZGl0YWJsZVRhYmxlSGVhZGluZyBrZXk9J2FjdGlvbnNfaGVhZGluZycgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWN0aW9uc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0VkaXRhYmxlVGFibGVIZWFkaW5nPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICAgICAgICAgIDwvdGhlYWQ+XG4gICAgICAgICAgICAgICAgICAgIDx0Ym9keT5cbiAgICAgICAgICAgICAgICAgICAgICAgIHtjb2x1bW5zLmxlbmd0aCA+IDAgJiYgdGhpcy5zdGF0ZS5yb3dzLm1hcCgocm93LGkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihBcnJheS5pc0FycmF5KHJvdykgJiYgcm93Lmxlbmd0aCAhPT0gY29sdW1ucy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS53YXJuKGBEYXRhIGF0IHJvdyAke2l9IGlzICR7cm93Lmxlbmd0aH0uIEl0IHNob3VsZCBiZSAke2NvbHVtbnMubGVuZ3RofS5gKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDx0ciAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8RWRpdGFibGVUYWJsZVJvdyBldmVuPXtpJTIgPT09IDB9IGtleT17J3Jvd18nICsgcm93LmlkfSBpZD17cm93LmlkfSA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Y3JlYXRlUm93KHJvdywgY29sdW1ucywgdGhpcy5hY3Rpb25zLCB0ZXh0QXJlYSl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvRWRpdGFibGVUYWJsZVJvdz5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDxFZGl0YWJsZVRhYmxlUm93IGV2ZW49ezB9IGlkPSduZXdfcm93JyBrZXk9J25ld19yb3cnPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtjcmVhdGVOZXdSb3coY29sdW1ucywgdGhpcy5zdGF0ZS5uZXdfcm93LCB0aGlzLnNhdmVOZXdSb3csIHRoaXMuaGFuZGxlTmV3Q2hhbmdlLCB0ZXh0QXJlYSl9XG4gICAgICAgICAgICAgICAgICAgICAgICA8L0VkaXRhYmxlVGFibGVSb3c+XG4gICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+XG4gICAgICAgICAgICAgICAgPC90YWJsZT5cbiAgICAgICAgICAgICAgICA8UmVhY3RUb29sdGlwIGRlbGF5U2hvdz17MTB9IC8+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKTtcbiAgICB9XG59O1xuIiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcblxuY29uc3QgRWRpdGFibGVUYWJsZUNlbGwgPSAocHJvcHMpID0+IHtcblxuICAgIGlmIChwcm9wcy5pc19lZGl0KSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8dGQ+XG4gICAgICAgICAgICAgICAgeyFwcm9wcy5zaG91bGRVc2VUZXh0QXJlYSAmJlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzc05hbWU9XCJmb3JtLWNvbnRyb2xcIiBkZWZhdWx0VmFsdWU9e3Byb3BzLmNoaWxkcmVufSBuYW1lPXtwcm9wcy5uYW1lfSBpZD17cHJvcHMuaWR9IG9uQ2hhbmdlPXtwcm9wcy5oYW5kbGVDaGFuZ2V9Lz5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAge3Byb3BzLnNob3VsZFVzZVRleHRBcmVhICYmXG4gICAgICAgICAgICAgICAgICAgIDx0ZXh0YXJlYSBjbGFzc05hbWU9XCJmb3JtLWNvbnRyb2xcIiBkZWZhdWx0VmFsdWU9e3Byb3BzLmNoaWxkcmVufSBuYW1lPXtwcm9wcy5uYW1lfSBpZD17cHJvcHMuaWR9IG9uQ2hhbmdlPXtwcm9wcy5oYW5kbGVDaGFuZ2V9Lz5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L3RkPlxuICAgICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8dGQ+e3Byb3BzLmNoaWxkcmVufTwvdGQ+XG4gICAgICAgICk7XG4gICAgfVxuXG59O1xuXG5leHBvcnQgZGVmYXVsdCBFZGl0YWJsZVRhYmxlQ2VsbDsiLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuXG5jbGFzcyBFZGl0YWJsZVRhYmxlSGVhZGluZyBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG5cbiAgICBjb25zdHJ1Y3RvciAocHJvcHMpIHtcbiAgICAgICAgc3VwZXIocHJvcHMpO1xuICAgIH1cblxuICAgIHJlbmRlciAoKSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8dGggd2lkdGg9e3RoaXMucHJvcHMud2lkdGh9PlxuICAgICAgICAgICAgICAgICAgICB7dGhpcy5wcm9wcy5jaGlsZHJlbn1cbiAgICAgICAgICAgIDwvdGg+XG4gICAgICAgICk7XG4gICAgfVxuXG59XG5cbmV4cG9ydCBkZWZhdWx0IEVkaXRhYmxlVGFibGVIZWFkaW5nOyIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVkaXRhYmxlVGFibGVSb3cgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuXG4gICAgcmVuZGVyKCkge1xuICAgICAgICBjb25zdCB7IGNoaWxkcmVuLCBldmVuLCBpZCB9ID0gdGhpcy5wcm9wcztcblxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPHRyIGlkPXtpZH0gcm9sZT1cInJvd1wiIGNsYXNzTmFtZT17ZXZlbiA/ICdldmVuJyA6ICdvZGQnfT5cbiAgICAgICAgICAgICAgICB7Y2hpbGRyZW59XG4gICAgICAgICAgICA8L3RyPlxuICAgICAgICApO1xuICAgIH1cbn1cbiIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpbiIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNlbGVjdGFibGVBY3Rpb25zVGFibGVDZWxsIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcblxuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgICAgIHN1cGVyKHByb3BzKTtcblxuICAgICAgICB0aGlzLmhhbmRsZUFjdGlvbiA9IHRoaXMuaGFuZGxlQWN0aW9uLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuc2hvdWxkRGlzcGxheUFjdGlvbiA9IHRoaXMuc2hvdWxkRGlzcGxheUFjdGlvbi5iaW5kKHRoaXMpO1xuXG4gICAgfVxuXG4gICAgc2hvdWxkRGlzcGxheUFjdGlvbihhY3Rpb24pIHtcbiAgICAgICAgbGV0IHtpZH0gPSB0aGlzLnByb3BzO1xuXG4gICAgICAgIGlmICghYWN0aW9uLmhhc093blByb3BlcnR5KCdkaXNwbGF5JykpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGFjdGlvbi5kaXNwbGF5KGlkKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGhhbmRsZUFjdGlvbihhY3Rpb24sIGlkLCBldikge1xuICAgICAgICBldi5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgZXYucHJldmVudERlZmF1bHQoKTtcblxuICAgICAgICBhY3Rpb24oaWQpO1xuICAgIH1cblxuICAgIHJlbmRlcigpIHtcbiAgICAgICAgbGV0IHthY3Rpb25zLCBpZH0gPSB0aGlzLnByb3BzO1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPHRkIGNsYXNzTmFtZT1cImFjdGlvbnNcIiBrZXk9XCJhY3Rpb25zXCI+XG4gICAgICAgICAgICAgICAge2FjdGlvbnMuaGFzT3duUHJvcGVydHkoJ2RlbGV0ZScpICYmIHRoaXMuc2hvdWxkRGlzcGxheUFjdGlvbihhY3Rpb25zLmRlbGV0ZSkgICYmXG4gICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9XCJcIiBkYXRhLXRpcD1cImRlbGV0ZVwiIG9uQ2xpY2s9e3RoaXMuaGFuZGxlQWN0aW9uLmJpbmQodGhpcywgYWN0aW9ucy5kZWxldGUub25DbGljaywgaWQpfSA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzc05hbWU9XCJmYSBmYS10cmFzaC1vIGRlbGV0ZS1pY29uXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHthY3Rpb25zLmhhc093blByb3BlcnR5KCdjdXN0b20nKSAmJiBhY3Rpb25zLmN1c3RvbS5tYXAoYSA9PlxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3VsZERpc3BsYXlBY3Rpb24oYSkgJiZcbiAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj1cIlwiIGRhdGEtdGlwPXthLnRvb2x0aXB9IGtleT17J2N1c3RvbV8nICsgYS5uYW1lfSBvbkNsaWNrPXt0aGlzLmhhbmRsZUFjdGlvbi5iaW5kKHRoaXMsIGEub25DbGljaywgaWQpfT5cbiAgICAgICAgICAgICAgICAgICAgICAgIHthLmljb259XG4gICAgICAgICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgKTtcbiAgICB9XG59O1xuIiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBTZWxlY3RhYmxlVGFibGVIZWFkaW5nIGZyb20gJy4vU2VsZWN0YWJsZVRhYmxlSGVhZGluZyc7XG5pbXBvcnQgU2VsZWN0YWJsZVRhYmxlQ2VsbCBmcm9tICcuL1NlbGVjdGFibGVUYWJsZUNlbGwnO1xuaW1wb3J0IFNlbGVjdGFibGVUYWJsZVJvdyBmcm9tICcuL1NlbGVjdGFibGVUYWJsZVJvdyc7XG5pbXBvcnQgU2VsZWN0YWJsZUFjdGlvbnNUYWJsZUNlbGwgZnJvbSAnLi9TZWxlY3RhYmxlQWN0aW9uc1RhYmxlQ2VsbCc7XG5pbXBvcnQgUmVhY3RUb29sdGlwIGZyb20gJ3JlYWN0LXRvb2x0aXAnXG5pbXBvcnQgJy4vc2VsZWN0YWJsZS10YWJsZS5jc3MnO1xuXG5jb25zdCBkZWZhdWx0cyA9IHtcbiAgICBzb3J0RnVuYzogKGEsYikgPT4gKGEgPCBiID8gLTEgOiAoYSA+IGIgPyAxIDogMCkpLFxuICAgIHNvcnRhYmxlOiBmYWxzZSxcbiAgICBzb3J0Q29sOiAwLFxuICAgIHNvcnREaXI6IDEsXG4gICAgY29sV2lkdGg6ICcnXG59XG5cbmNvbnN0IGNyZWF0ZVJvdyA9IChyb3csIGNvbHVtbnMsIGFjdGlvbnMpID0+IHtcblxuICAgIHZhciBhY3Rpb25fYnV0dG9ucyA9ICcnO1xuICAgIHZhciBjZWxscyA9IGNvbHVtbnMubWFwKChjb2wsaSkgPT4ge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPFNlbGVjdGFibGVUYWJsZUNlbGwga2V5PXtyb3dbJ2lkJ10gKyAnX2ZpZWxkJyArIGl9IG5hbWU9e2NvbC5jb2x1bW5LZXl9IGlkPXtyb3cuaWR9PlxuICAgICAgICAgICAgICAgIHtyb3dbY29sLmNvbHVtbktleV19XG4gICAgICAgICAgICA8L1NlbGVjdGFibGVUYWJsZUNlbGw+XG4gICAgICAgICk7XG4gICAgfSk7XG5cbiAgICBpZiAoYWN0aW9ucykge1xuICAgICAgICBjZWxscy5wdXNoKDxTZWxlY3RhYmxlQWN0aW9uc1RhYmxlQ2VsbCBrZXk9J2FjdGlvbnNfY2VsbCcgaWQ9e3Jvd1snaWQnXX0gYWN0aW9ucz17YWN0aW9uc30gLz4pO1xuICAgIH1cblxuICAgIHJldHVybiBjZWxscztcbn07XG5cbmNvbnN0IGdldFNvcnREaXIgPSAoY29sdW1uS2V5LCBjb2x1bW5JbmRleCwgc29ydENvbCwgc29ydERpcikgPT4ge1xuICAgIGlmKGNvbHVtbktleSAmJiAoY29sdW1uS2V5ID09PSBzb3J0Q29sKSkge1xuICAgICAgICByZXR1cm4gc29ydERpcjtcbiAgICB9XG4gICAgaWYoc29ydENvbCA9PT0gY29sdW1uSW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIHNvcnREaXI7XG4gICAgfVxuICAgIHJldHVybiBudWxsXG59O1xuXG5cbmNsYXNzIFNlbGVjdGFibGVUYWJsZSBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgICAgICBzdXBlcihwcm9wcyk7XG4gICAgfVxuXG4gICAgcmVuZGVyKCkge1xuICAgICAgICBsZXQge29wdGlvbnMsIGNvbHVtbnN9ID0gdGhpcy5wcm9wcztcbiAgICAgICAgbGV0IHNlbGVjdGVkSWRzID0gb3B0aW9ucy5oYXNPd25Qcm9wZXJ0eSgnc2VsZWN0ZWRJZHMnKSA/IG9wdGlvbnMuc2VsZWN0ZWRJZHMgOiBbXTtcbiAgICAgICAgbGV0IHRhYmxlQ2xhc3MgPSBvcHRpb25zLmhhc093blByb3BlcnR5KCdjbGFzc05hbWUnKSA/IG9wdGlvbnMuY2xhc3NOYW1lIDogJyc7XG4gICAgICAgIHRhYmxlQ2xhc3MgKz0gKG9wdGlvbnMuYWN0aW9ucy5oYXNPd25Qcm9wZXJ0eSgnZWRpdCcpKSA/ICcgdGFibGUtaG92ZXInIDogJyc7XG5cbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgPHRhYmxlIGNsYXNzTmFtZT17XCJ0YWJsZSB0YWJsZS1zdHJpcGVkIGRhdGFUYWJsZSBcIiArIHRhYmxlQ2xhc3N9PlxuICAgICAgICAgICAgICAgICAgICA8dGhlYWQ+XG4gICAgICAgICAgICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0aD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgaWQ9XCJzZWxlY3RfYWxsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT1cInNlbGVjdF9hbGxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17b3B0aW9ucy5hY3Rpb25zLmVkaXQub25TZWxlY3RlZEFsbH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tlZD17b3B0aW9ucy5zZWxlY3RlZEFsbH0vPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC90aD5cbiAgICAgICAgICAgICAgICAgICAgICAgIHtjb2x1bW5zLm1hcCgoY29sLGkpID0+IHtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBzb3J0Q29sID0gKHR5cGVvZiBvcHRpb25zLnNvcnRDb2wgIT0gJ3VuZGVmaW5lZCcpID8gb3B0aW9ucy5zb3J0Q29sIDogZGVmYXVsdHMuc29ydENvbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgc29ydERpciA9ICh0eXBlb2Ygb3B0aW9ucy5zb3J0RGlyICE9ICd1bmRlZmluZWQnKSA/IG9wdGlvbnMuc29ydERpciA6IGRlZmF1bHRzLnNvcnREaXI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHNvcnRGdW5jID0gKHR5cGVvZiBvcHRpb25zLnNvcnRGdW5jICE9ICd1bmRlZmluZWQnKSA/IG9wdGlvbnMuc29ydEZ1bmMgOiBkZWZhdWx0cy5zb3J0RnVuYztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgc29ydGFibGUgPSAodHlwZW9mIGNvbC5zb3J0YWJsZSAhPSAndW5kZWZpbmVkJykgPyBjb2wuc29ydGFibGUgOiBkZWZhdWx0cy5zb3J0YWJsZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgY29sV2lkdGggPSAodHlwZW9mIGNvbC53aWR0aCAhPSAndW5kZWZpbmVkJykgPyBjb2wud2lkdGggOiBkZWZhdWx0cy5jb2xXaWR0aDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTZWxlY3RhYmxlVGFibGVIZWFkaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvblNvcnQ9e3RoaXMucHJvcHMub25Tb3J0fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc29ydERpcj17Z2V0U29ydERpcihjb2wuY29sdW1uS2V5LCBpLCBzb3J0Q29sLCBzb3J0RGlyKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvcnRhYmxlPXtzb3J0YWJsZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvcnRGdW5jPXtzb3J0RnVuY31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbkluZGV4PXtpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uS2V5PXtjb2wuY29sdW1uS2V5fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg9e2NvbFdpZHRofVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5PXsnaGVhZGluZ18nK2l9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtjb2wudmFsdWV9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvU2VsZWN0YWJsZVRhYmxlSGVhZGluZz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICAgICAgICAgICAgICB7b3B0aW9ucy5hY3Rpb25zICYmXG4gICAgICAgICAgICAgICAgICAgICAgICA8U2VsZWN0YWJsZVRhYmxlSGVhZGluZyBrZXk9J2FjdGlvbnNfaGVhZGluZycgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtvcHRpb25zLmFjdGlvbnNIZWFkZXIgfHwgJyAnfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9TZWxlY3RhYmxlVGFibGVIZWFkaW5nPlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgICAgICAgICA8L3RoZWFkPlxuICAgICAgICAgICAgICAgICAgICA8dGJvZHk+XG4gICAgICAgICAgICAgICAgICAgIHtjb2x1bW5zLmxlbmd0aCA+IDAgJiYgdGhpcy5wcm9wcy5kYXRhLm1hcCgocm93LGkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKEFycmF5LmlzQXJyYXkocm93KSAmJiByb3cubGVuZ3RoICE9PSBjb2x1bW5zLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybihgRGF0YSBhdCByb3cgJHtpfSBpcyAke3Jvdy5sZW5ndGh9LiBJdCBzaG91bGQgYmUgJHtjb2x1bW5zLmxlbmd0aH0uYCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDx0ciBrZXk9eydyb3dfJytpfSAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTZWxlY3RhYmxlVGFibGVSb3cgY2hlY2tlZD17b3B0aW9ucy5zZWxlY3RlZEFsbCB8fCBzZWxlY3RlZElkcy5pbmNsdWRlcyhyb3dbJ2lkJ10pfSBldmVuPXtpJTIgPT09IDB9IGtleT17J3Jvd18nK3Jvd1snaWQnXX0gaWQ9e3Jvd1snaWQnXX0gYWN0aW9ucz17b3B0aW9ucy5hY3Rpb25zfT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2NyZWF0ZVJvdyhyb3csIGNvbHVtbnMsIG9wdGlvbnMuYWN0aW9ucyl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9TZWxlY3RhYmxlVGFibGVSb3c+XG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB9KX1cbiAgICAgICAgICAgICAgICAgICAgPC90Ym9keT5cbiAgICAgICAgICAgICAgICA8L3RhYmxlPlxuICAgICAgICAgICAgICAgIDxSZWFjdFRvb2x0aXAgZGVsYXlTaG93PXsxMH0gLz5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICApO1xuICAgIH1cbn1cblxuXG5leHBvcnQgZGVmYXVsdCBTZWxlY3RhYmxlVGFibGU7XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFJhd0hUTUwgZnJvbSAnLi4vcmF3LWh0bWwnO1xuXG5jb25zdCBTZWxlY3RhYmxlVGFibGVDZWxsID0gKHByb3BzKSA9PiB7XG4gICAgbGV0IHtjaGlsZHJlbn0gPSBwcm9wcztcblx0bGV0IHZhbHVlID0gJyc7XG5cdGlmKGNoaWxkcmVuKSB7XG5cdCAgICBpZiAoUmVhY3QuaXNWYWxpZEVsZW1lbnQoY2hpbGRyZW4pKSB7XG5cdCAgICAgICAgdmFsdWUgPSBjaGlsZHJlbjtcbiAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICB2YWx1ZSA9IDxSYXdIVE1MPntjaGlsZHJlbi50b1N0cmluZygpfTwvUmF3SFRNTD5cbiAgICAgICAgfVxuICAgIH1cblxuXHRyZXR1cm4gKFxuXHRcdDx0ZCB7Li4ucHJvcHN9PlxuICAgICAgICAgICAge3ZhbHVlfVxuXHRcdDwvdGQ+XG5cdCk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBTZWxlY3RhYmxlVGFibGVDZWxsO1xuIiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5cbmNsYXNzIFNlbGVjdGFibGVUYWJsZUhlYWRpbmcgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuXG5cdGNvbnN0cnVjdG9yIChwcm9wcykge1xuXHRcdHN1cGVyKHByb3BzKTtcblx0XHR0aGlzLmhhbmRsZVNvcnQgPSB0aGlzLmhhbmRsZVNvcnQuYmluZCh0aGlzKTtcblx0fVxuXG5cdGdldFNvcnRDbGFzcygpIHtcblxuXHRcdGlmICghdGhpcy5wcm9wcy5zb3J0YWJsZSkgcmV0dXJuIG51bGw7XG5cblx0XHRzd2l0Y2godGhpcy5wcm9wcy5zb3J0RGlyKSB7XG5cdFx0XHRjYXNlIDE6XG5cdFx0XHRcdHJldHVybiAnc29ydGluZ19hc2MnO1xuXHRcdFx0Y2FzZSAtMTpcblx0XHRcdFx0cmV0dXJuICdzb3J0aW5nX2Rlc2MnO1xuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0cmV0dXJuIHRoaXMucHJvcHMuc29ydGFibGUgPyAnc29ydGluZycgOiBudWxsXG5cdFx0fVxuXHR9XG5cblx0aGFuZGxlU29ydChlKSB7XG5cdFx0ZS5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdGlmKCF0aGlzLnByb3BzLmhhc093blByb3BlcnR5KCdvblNvcnQnKSB8fCAhdGhpcy5wcm9wcy5zb3J0YWJsZSkgcmV0dXJuO1xuXG5cdFx0dGhpcy5wcm9wcy5vblNvcnQoXG5cdFx0XHR0aGlzLnByb3BzLmNvbHVtbkluZGV4LFxuXHRcdFx0dGhpcy5wcm9wcy5jb2x1bW5LZXksXG5cdFx0XHR0aGlzLnByb3BzLnNvcnREaXIgPyB0aGlzLnByb3BzLnNvcnREaXIqLTEgOiAxLFxuXHRcdFx0dGhpcy5wcm9wcy5zb3J0RnVuY1xuXHRcdCk7XG5cdH1cblxuXHRyZW5kZXIgKCkge1xuXHRcdHJldHVybiAoXG5cdFx0XHQ8dGggb25DbGljaz17dGhpcy5oYW5kbGVTb3J0fVxuXHRcdFx0XHRjbGFzc05hbWU9e3RoaXMuZ2V0U29ydENsYXNzKCl9XG5cdFx0XHRcdHdpZHRoPXt0aGlzLnByb3BzLndpZHRofVxuXHRcdFx0XHQ+XG5cdFx0XHRcdHt0aGlzLnByb3BzLmNoaWxkcmVufVxuXHRcdFx0PC90aD5cblx0XHQpO1x0XG5cdH1cblx0XG59XG5cblNlbGVjdGFibGVUYWJsZUhlYWRpbmcucHJvcFR5cGVzID0ge1xuXHRvblNvcnQ6IFByb3BUeXBlcy5mdW5jLFxuXHRzb3J0RGlyOiBQcm9wVHlwZXMubnVtYmVyLFxuXHRjb2x1bW5JbmRleDogUHJvcFR5cGVzLm51bWJlcixcblx0Y29sdW1uS2V5OiBQcm9wVHlwZXMuYW55LFxuXHRzb3J0YWJsZTogUHJvcFR5cGVzLmJvb2wsXG5cdHNvcnRGdW5jOiBQcm9wVHlwZXMuZnVuY1xufTtcblxuZXhwb3J0IGRlZmF1bHQgU2VsZWN0YWJsZVRhYmxlSGVhZGluZzsiLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTZWxlY3RhYmxlVGFibGVSb3cgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICAgICAgc3VwZXIocHJvcHMpO1xuICAgICAgICB0aGlzLmhhbmRsZUVkaXQgPSB0aGlzLmhhbmRsZUVkaXQuYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5oYW5kbGVTZWxlY3QgPSB0aGlzLmhhbmRsZVNlbGVjdC5iaW5kKHRoaXMpO1xuICAgIH1cblxuICAgIHNob3VsZERpc3BsYXlBY3Rpb24oYWN0aW9uKSB7XG4gICAgICAgIGxldCB7aWR9ID0gdGhpcy5wcm9wcztcbiAgICAgICAgaWYgKCFhY3Rpb24uaGFzT3duUHJvcGVydHkoJ2Rpc3BsYXknKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gYWN0aW9uLmRpc3BsYXkoaWQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaGFuZGxlRWRpdChpZCwgZXYpIHtcbiAgICAgICAgLy8gYnkgcGFzc1xuICAgICAgICBpZihldi50YXJnZXQudHlwZSA9PT0gXCJjaGVja2JveFwiKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBldi5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgZXYucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgdGhpcy5wcm9wcy5hY3Rpb25zLmVkaXQub25DbGljayhpZCk7XG4gICAgfVxuXG4gICAgaGFuZGxlU2VsZWN0KGlkLCBldikge1xuICAgICAgICB0aGlzLnByb3BzLmFjdGlvbnMuZWRpdC5vblNlbGVjdGVkKGlkLCBldi50YXJnZXQuY2hlY2tlZCk7XG4gICAgfVxuXG4gICAgcmVuZGVyKCkge1xuXG4gICAgICAgIGxldCB7ZXZlbiwgYWN0aW9ucywgaWQsIGNoaWxkcmVuLCBjaGVja2VkfSA9IHRoaXMucHJvcHM7XG4gICAgICAgIGxldCBjYW5FZGl0ID0gKGFjdGlvbnMuaGFzT3duUHJvcGVydHkoJ2VkaXQnKSAmJiB0aGlzLnNob3VsZERpc3BsYXlBY3Rpb24oYWN0aW9ucy5lZGl0KSk7XG4gICAgICAgIGxldCByb3dDbGFzcyA9IGV2ZW4gPyAnZXZlbicgOiAnb2RkJztcblxuICAgICAgICBpZiAoY2FuRWRpdCkge1xuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICA8dHIgcm9sZT1cInJvd1wiIGNsYXNzTmFtZT17cm93Q2xhc3MgKyBcIiBjYW4tZWRpdFwifSBvbkNsaWNrPXt0aGlzLmhhbmRsZUVkaXQuYmluZCh0aGlzLCBpZCl9PlxuICAgICAgICAgICAgICAgICAgICA8dGQga2V5PXtpZCArICdfc2VsZWN0J30+PGlucHV0IHR5cGU9XCJjaGVja2JveFwiIGlkPXtpZCArICdfc2VsZWN0J30gbmFtZT17aWQgKyAnX3NlbGVjdCd9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tlZD17Y2hlY2tlZH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17dGhpcy5oYW5kbGVTZWxlY3QuYmluZCh0aGlzLCBpZCl9Lz48L3RkPlxuICAgICAgICAgICAgICAgICAgICB7Y2hpbGRyZW59XG4gICAgICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgIDx0ciByb2xlPVwicm93XCIgY2xhc3NOYW1lPXtyb3dDbGFzc30+XG4gICAgICAgICAgICAgICAgICAgIDx0ZCBrZXk9e2lkICsgJ19zZWxlY3QnfSA+PGlucHV0IHR5cGU9XCJjaGVja2JveFwiIGlkPXtpZCArICdfc2VsZWN0J30gbmFtZT17aWQgKyAnX3NlbGVjdCd9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tlZD17Y2hlY2tlZH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17dGhpcy5oYW5kbGVTZWxlY3QuYmluZCh0aGlzLCBpZCl9Lz48L3RkPlxuICAgICAgICAgICAgICAgICAgICB7Y2hpbGRyZW59XG4gICAgICAgICAgICAgICAgPC90cj5cbiAgICAgICAgKTtcblxuICAgIH1cbn07XG5cbiIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpbiIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNvcnRhYmxlQWN0aW9uc1RhYmxlQ2VsbCBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgICAgICBzdXBlcihwcm9wcyk7XG5cbiAgICAgICAgdGhpcy5oYW5kbGVBY3Rpb24gPSB0aGlzLmhhbmRsZUFjdGlvbi5iaW5kKHRoaXMpO1xuXG4gICAgfVxuXG4gICAgc2hvdWxkRGlzcGxheUFjdGlvbihhY3Rpb24pIHtcbiAgICAgICAgbGV0IHtpZH0gPSB0aGlzLnByb3BzO1xuXG4gICAgICAgIGlmICghYWN0aW9uLmhhc093blByb3BlcnR5KCdkaXNwbGF5JykpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGFjdGlvbi5kaXNwbGF5KGlkKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGhhbmRsZUFjdGlvbihhY3Rpb24sIGlkLCBldikge1xuICAgICAgICBldi5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgZXYucHJldmVudERlZmF1bHQoKTtcblxuICAgICAgICBhY3Rpb24oaWQpO1xuICAgIH1cblxuICAgIHJlbmRlcigpIHtcbiAgICAgICAgbGV0IHthY3Rpb25zLCBpZH0gPSB0aGlzLnByb3BzO1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPHRkIGNsYXNzTmFtZT1cImFjdGlvbnNcIiBrZXk9XCJhY3Rpb25zXCI+XG4gICAgICAgICAgICAgICAge2FjdGlvbnMuaGFzT3duUHJvcGVydHkoJ2VkaXQnKSAmJiB0aGlzLnNob3VsZERpc3BsYXlBY3Rpb24oYWN0aW9ucy5lZGl0KSAmJlxuICAgICAgICAgICAgICAgIDxhIGhyZWY9XCJcIiBkYXRhLXRpcD1cImVkaXRcIiBvbkNsaWNrPXt0aGlzLmhhbmRsZUFjdGlvbi5iaW5kKHRoaXMsIGFjdGlvbnMuZWRpdC5vbkNsaWNrLCBpZCl9ID5cbiAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3NOYW1lPVwiZmEgZmEtcGVuY2lsLXNxdWFyZS1vXCI+PC9pPlxuICAgICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAge2FjdGlvbnMuaGFzT3duUHJvcGVydHkoJ2RlbGV0ZScpICYmIHRoaXMuc2hvdWxkRGlzcGxheUFjdGlvbihhY3Rpb25zLmRlbGV0ZSkgICYmXG4gICAgICAgICAgICAgICAgPGEgaHJlZj1cIlwiIGRhdGEtdGlwPVwiZGVsZXRlXCIgb25DbGljaz17dGhpcy5oYW5kbGVBY3Rpb24uYmluZCh0aGlzLCBhY3Rpb25zLmRlbGV0ZS5vbkNsaWNrLCBpZCl9ID5cbiAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3NOYW1lPVwiZmEgZmEtdHJhc2gtbyBkZWxldGUtaWNvblwiPjwvaT5cbiAgICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHsnY3VzdG9tJyBpbiBhY3Rpb25zICYmIGFjdGlvbnMuY3VzdG9tLm1hcChhID0+XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2hvdWxkRGlzcGxheUFjdGlvbihhLCBpZCkgJiZcbiAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj1cIlwiIGRhdGEtdGlwPXthLnRvb2x0aXB9IGtleT17J2N1c3RvbV8nICsgYS5uYW1lfSBvbkNsaWNrPXt0aGlzLmhhbmRsZUFjdGlvbi5iaW5kKHRoaXMsIGEub25DbGljaywgaWQpfT5cbiAgICAgICAgICAgICAgICAgICAgICAgIHthLmljb259XG4gICAgICAgICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgKTtcbiAgICB9XG59O1xuIiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgdXBkYXRlIGZyb20gJ2ltbXV0YWJpbGl0eS1oZWxwZXInO1xuaW1wb3J0IHsgRHJhZ0Ryb3BDb250ZXh0IH0gZnJvbSAncmVhY3QtZG5kJztcbmltcG9ydCBIVE1MNUJhY2tlbmQgZnJvbSAncmVhY3QtZG5kLWh0bWw1LWJhY2tlbmQnO1xuaW1wb3J0IFNvcnRhYmxlVGFibGVIZWFkaW5nIGZyb20gJy4vU29ydGFibGVUYWJsZUhlYWRpbmcnO1xuaW1wb3J0IFNvcnRhYmxlVGFibGVDZWxsIGZyb20gJy4vU29ydGFibGVUYWJsZUNlbGwnO1xuaW1wb3J0IFNvcnRhYmxlQWN0aW9uc1RhYmxlQ2VsbCBmcm9tICcuL1NvcnRhYmxlQWN0aW9uc1RhYmxlQ2VsbCc7XG5pbXBvcnQgU29ydGFibGVUYWJsZVJvdyBmcm9tICcuL1NvcnRhYmxlVGFibGVSb3cnO1xuaW1wb3J0IFQgZnJvbSAnaTE4bi1yZWFjdC9kaXN0L2kxOG4tcmVhY3QnO1xuaW1wb3J0ICcuL3RhYmxlLXNvcnRhYmxlLmNzcyc7XG5pbXBvcnQge3NoYWxsb3dFcXVhbH0gZnJvbSBcIi4uLy4uL3V0aWxzL21ldGhvZHNcIjtcblxuY29uc3QgZGVmYXVsdHMgPSB7XG4gICAgY29sV2lkdGg6ICcnXG59XG5cbmNvbnN0IGNyZWF0ZVJvdyA9IChyb3csIGNvbHVtbnMsIGFjdGlvbnMpID0+IHtcblxuICAgIHZhciBhY3Rpb25fYnV0dG9ucyA9ICcnO1xuXHR2YXIgY2VsbHMgPSBjb2x1bW5zLm1hcCgoY29sLGkpID0+IHtcblx0XHRyZXR1cm4gKFxuXHRcdDxTb3J0YWJsZVRhYmxlQ2VsbCBrZXk9e2l9PlxuICAgICAgICAgICAge3Jvd1tjb2wuY29sdW1uS2V5XX1cblx0XHQ8L1NvcnRhYmxlVGFibGVDZWxsPlxuXHRcdCk7XG5cdH0pO1xuXG4gICAgaWYgKGFjdGlvbnMpIHtcbiAgICAgICAgY2VsbHMucHVzaCg8U29ydGFibGVBY3Rpb25zVGFibGVDZWxsIGtleT0nYWN0aW9ucycgaWQ9e3Jvd1snaWQnXX0gYWN0aW9ucz17YWN0aW9uc30vPik7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNlbGxzO1xufTtcblxuXG5jbGFzcyBTb3J0YWJsZVRhYmxlIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcblxuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgICAgIHN1cGVyKHByb3BzKTtcbiAgICAgICAgdGhpcy5tb3ZlUm93ID0gdGhpcy5tb3ZlUm93LmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuZHJvcFJvdyA9IHRoaXMuZHJvcFJvdy5iaW5kKHRoaXMpO1xuXG4gICAgICAgIHRoaXMuc3RhdGUgPSB7XG4gICAgICAgICAgICByb3dzOiBwcm9wcy5kYXRhXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wcywgcHJldlN0YXRlLCBzbmFwc2hvdCkge1xuICAgICAgICBpZighc2hhbGxvd0VxdWFsKHRoaXMucHJvcHMuZGF0YSwgcHJldlByb3BzLmRhdGEpKSB7XG4gICAgICAgICAgICB0aGlzLnNldFN0YXRlKHtyb3dzOiB0aGlzLnByb3BzLmRhdGF9KVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgbW92ZVJvdyhkcmFnSW5kZXgsIGhvdmVySW5kZXgpIHtcbiAgICAgICAgY29uc3QgeyByb3dzIH0gPSB0aGlzLnN0YXRlO1xuICAgICAgICBjb25zdCBkcmFnUm93ID0gcm93c1tkcmFnSW5kZXhdO1xuXG4gICAgICAgIHRoaXMuc2V0U3RhdGUodXBkYXRlKHRoaXMuc3RhdGUsIHtcbiAgICAgICAgICAgIHJvd3M6IHtcbiAgICAgICAgICAgICAgICAkc3BsaWNlOiBbXG4gICAgICAgICAgICAgICAgICAgIFtkcmFnSW5kZXgsIDFdLFxuICAgICAgICAgICAgICAgICAgICBbaG92ZXJJbmRleCwgMCwgZHJhZ1Jvd10sXG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0pKTtcbiAgICB9XG5cbiAgICBkcm9wUm93KGlkLCBpbmRleCkge1xuICAgICAgICBsZXQge29yZGVyRmllbGR9ID0gdGhpcy5wcm9wcztcbiAgICAgICAgbGV0IG5ld09yZGVyID0gaW5kZXggKyAxO1xuICAgICAgICBsZXQgcm93cyA9IFsuLi50aGlzLnN0YXRlLnJvd3NdO1xuXG4gICAgICAgIGZvcih2YXIgaSBpbiByb3dzKSB7XG4gICAgICAgICAgICByb3dzW2ldW29yZGVyRmllbGRdID0gcGFyc2VJbnQoaSkgKyAxO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh1cGRhdGUodGhpcy5zdGF0ZSwge3Jvd3M6IHskc2V0OiByb3dzfX0pKTtcblxuICAgICAgICB0aGlzLnByb3BzLmRyb3BDYWxsYmFjayhyb3dzLCBpZCwgbmV3T3JkZXIpO1xuICAgIH1cblxuICAgIHJlbmRlcigpIHtcbiAgICAgICAgbGV0IHtvcHRpb25zLCBjb2x1bW5zfSA9IHRoaXMucHJvcHM7XG4gICAgICAgIGxldCB0YWJsZUNsYXNzID0gb3B0aW9ucy5oYXNPd25Qcm9wZXJ0eSgnY2xhc3NOYW1lJykgPyBvcHRpb25zLmNsYXNzTmFtZSA6ICcnO1xuXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInNvcnRhYmxlLXRhYmxlLWJveFwiPlxuICAgICAgICAgICAgICAgIDxpPntULnRyYW5zbGF0ZShcImdlbmVyYWwuZHJhZ19hbmRfZHJvcFwiKX08L2k+XG4gICAgICAgICAgICAgICAgPHRhYmxlIGNsYXNzTmFtZT17XCJ0YWJsZSB0YWJsZS1zdHJpcGVkIHRhYmxlLWhvdmVyIHNvcnRhYmxlVGFibGUgXCIgKyB0YWJsZUNsYXNzfT5cbiAgICAgICAgICAgICAgICAgICAgPHRoZWFkPlxuICAgICAgICAgICAgICAgICAgICA8dHI+XG4gICAgICAgICAgICAgICAgICAgICAgICB7Y29sdW1ucy5tYXAoKGNvbCxpKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGNvbFdpZHRoID0gKGNvbC53aWR0aCkgPyBjb2wud2lkdGggOiBkZWZhdWx0cy5jb2xXaWR0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U29ydGFibGVUYWJsZUhlYWRpbmcgd2lkdGg9e2NvbFdpZHRofSBrZXk9e2l9ID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtjb2wudmFsdWV9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvU29ydGFibGVUYWJsZUhlYWRpbmc+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pfVxuICAgICAgICAgICAgICAgICAgICAgICAge29wdGlvbnMuYWN0aW9ucyAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgPFNvcnRhYmxlVGFibGVIZWFkaW5nIGtleT0nYWN0aW9ucycgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFjdGlvbnNcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvU29ydGFibGVUYWJsZUhlYWRpbmc+XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICAgICAgICAgIDwvdGhlYWQ+XG4gICAgICAgICAgICAgICAgICAgIDx0Ym9keT5cbiAgICAgICAgICAgICAgICAgICAge2NvbHVtbnMubGVuZ3RoID4gMCAmJiB0aGlzLnN0YXRlLnJvd3MubWFwKChyb3csaSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYoQXJyYXkuaXNBcnJheShyb3cpICYmIHJvdy5sZW5ndGggIT09IGNvbHVtbnMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS53YXJuKGBEYXRhIGF0IHJvdyAke2l9IGlzICR7cm93Lmxlbmd0aH0uIEl0IHNob3VsZCBiZSAke2NvbHVtbnMubGVuZ3RofS5gKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gPHRyIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTb3J0YWJsZVRhYmxlUm93IGV2ZW49e2klMiA9PT0gMH0ga2V5PXtyb3cuaWR9IGluZGV4PXtpfSBpZD17cm93LmlkfSBtb3ZlQ2FyZD17dGhpcy5tb3ZlUm93fSBkcm9wQ2FyZD17dGhpcy5kcm9wUm93fT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2NyZWF0ZVJvdyhyb3csIGNvbHVtbnMsIG9wdGlvbnMuYWN0aW9ucyl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9Tb3J0YWJsZVRhYmxlUm93PlxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+XG4gICAgICAgICAgICAgICAgPC90YWJsZT5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICApO1xuICAgIH1cbn07XG5cblNvcnRhYmxlVGFibGUucHJvcFR5cGVzID0ge1xuICAgIGRhdGE6IFByb3BUeXBlcy5hcnJheS5pc1JlcXVpcmVkLFxuICAgIG9wdGlvbnM6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgICAgIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICAgICAgYWN0aW9uczogUHJvcFR5cGVzLm9iamVjdFxuICAgIH0pLmlzUmVxdWlyZWQsXG4gICAgY29sdW1uczogUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLnNoYXBlKHtcbiAgICAgICAgY29sdW1uS2V5OiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gICAgICAgIHZhbHVlOiBQcm9wVHlwZXMuYW55LmlzUmVxdWlyZWRcbiAgICB9KSkuaXNSZXF1aXJlZCxcbiAgICBvcmRlckZpZWxkOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gICAgZHJvcENhbGxiYWNrOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkXG59XG5cbmV4cG9ydCBkZWZhdWx0IERyYWdEcm9wQ29udGV4dChIVE1MNUJhY2tlbmQpKFNvcnRhYmxlVGFibGUpO1xuIiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcblxuY29uc3QgU29ydGFibGVUYWJsZUNlbGwgPSAocHJvcHMpID0+IChcblx0PHRkIHsuLi5wcm9wc30+e3Byb3BzLmNoaWxkcmVufTwvdGQ+XG4pO1xuXG5leHBvcnQgZGVmYXVsdCBTb3J0YWJsZVRhYmxlQ2VsbDsiLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuXG5jbGFzcyBTb3J0YWJsZVRhYmxlSGVhZGluZyBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG5cblx0Y29uc3RydWN0b3IgKHByb3BzKSB7XG5cdFx0c3VwZXIocHJvcHMpO1xuXHR9XG5cblx0cmVuZGVyICgpIHtcblx0XHRyZXR1cm4gKFxuXHRcdFx0PHRoIHdpZHRoPXt0aGlzLnByb3BzLndpZHRofT5cblx0XHRcdFx0e3RoaXMucHJvcHMuY2hpbGRyZW59XG5cdFx0XHQ8L3RoPlxuXHRcdCk7XHRcblx0fVxuXHRcbn1cblxuZXhwb3J0IGRlZmF1bHQgU29ydGFibGVUYWJsZUhlYWRpbmc7IiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgeyBmaW5kRE9NTm9kZSB9IGZyb20gJ3JlYWN0LWRvbSc7XG5pbXBvcnQgeyBEcmFnU291cmNlLCBEcm9wVGFyZ2V0IH0gZnJvbSAncmVhY3QtZG5kJztcblxuY29uc3Qgc3R5bGUgPSB7XG4gICAgYm9yZGVyOiAnMXB4IGRhc2hlZCBncmF5JyxcbiAgICBwYWRkaW5nOiAnMC41cmVtIDFyZW0nLFxuICAgIG1hcmdpbkJvdHRvbTogJy41cmVtJyxcbiAgICBiYWNrZ3JvdW5kQ29sb3I6ICd3aGl0ZScsXG4gICAgY3Vyc29yOiAnbW92ZScsXG59O1xuXG5jb25zdCByb3dTb3VyY2UgPSB7XG4gICAgYmVnaW5EcmFnKHByb3BzKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBpZDogcHJvcHMuaWQsXG4gICAgICAgICAgICBpbmRleDogcHJvcHMuaW5kZXgsXG4gICAgICAgIH07XG4gICAgfSxcbiAgICBlbmREcmFnKHByb3BzLCBtb25pdG9yKSB7XG4gICAgICAgIGlmIChtb25pdG9yLmRpZERyb3AoKSkge1xuICAgICAgICAgICAgcHJvcHMuZHJvcENhcmQocHJvcHMuaWQsIHByb3BzLmluZGV4KTtcbiAgICAgICAgfVxuICAgIH1cbn07XG5cbmNvbnN0IHJvd1RhcmdldCA9IHtcbiAgICBob3Zlcihwcm9wcywgbW9uaXRvciwgY29tcG9uZW50KSB7XG4gICAgICAgIGNvbnN0IGRyYWdJbmRleCA9IG1vbml0b3IuZ2V0SXRlbSgpLmluZGV4O1xuICAgICAgICBjb25zdCBob3ZlckluZGV4ID0gcHJvcHMuaW5kZXg7XG5cbiAgICAgICAgLy8gRG9uJ3QgcmVwbGFjZSBpdGVtcyB3aXRoIHRoZW1zZWx2ZXNcbiAgICAgICAgaWYgKGRyYWdJbmRleCA9PT0gaG92ZXJJbmRleCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gRGV0ZXJtaW5lIHJlY3RhbmdsZSBvbiBzY3JlZW5cbiAgICAgICAgY29uc3QgaG92ZXJCb3VuZGluZ1JlY3QgPSBmaW5kRE9NTm9kZShjb21wb25lbnQpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXG4gICAgICAgIC8vIEdldCB2ZXJ0aWNhbCBtaWRkbGVcbiAgICAgICAgY29uc3QgaG92ZXJNaWRkbGVZID0gKGhvdmVyQm91bmRpbmdSZWN0LmJvdHRvbSAtIGhvdmVyQm91bmRpbmdSZWN0LnRvcCkgLyAyO1xuXG4gICAgICAgIC8vIERldGVybWluZSBtb3VzZSBwb3NpdGlvblxuICAgICAgICBjb25zdCBjbGllbnRPZmZzZXQgPSBtb25pdG9yLmdldENsaWVudE9mZnNldCgpO1xuXG4gICAgICAgIC8vIEdldCBwaXhlbHMgdG8gdGhlIHRvcFxuICAgICAgICBjb25zdCBob3ZlckNsaWVudFkgPSBjbGllbnRPZmZzZXQueSAtIGhvdmVyQm91bmRpbmdSZWN0LnRvcDtcblxuICAgICAgICAvLyBPbmx5IHBlcmZvcm0gdGhlIG1vdmUgd2hlbiB0aGUgbW91c2UgaGFzIGNyb3NzZWQgaGFsZiBvZiB0aGUgaXRlbXMgaGVpZ2h0XG4gICAgICAgIC8vIFdoZW4gZHJhZ2dpbmcgZG93bndhcmRzLCBvbmx5IG1vdmUgd2hlbiB0aGUgY3Vyc29yIGlzIGJlbG93IDUwJVxuICAgICAgICAvLyBXaGVuIGRyYWdnaW5nIHVwd2FyZHMsIG9ubHkgbW92ZSB3aGVuIHRoZSBjdXJzb3IgaXMgYWJvdmUgNTAlXG5cbiAgICAgICAgLy8gRHJhZ2dpbmcgZG93bndhcmRzXG4gICAgICAgIGlmIChkcmFnSW5kZXggPCBob3ZlckluZGV4ICYmIGhvdmVyQ2xpZW50WSA8IGhvdmVyTWlkZGxlWSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gRHJhZ2dpbmcgdXB3YXJkc1xuICAgICAgICBpZiAoZHJhZ0luZGV4ID4gaG92ZXJJbmRleCAmJiBob3ZlckNsaWVudFkgPiBob3Zlck1pZGRsZVkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFRpbWUgdG8gYWN0dWFsbHkgcGVyZm9ybSB0aGUgYWN0aW9uXG4gICAgICAgIHByb3BzLm1vdmVDYXJkKGRyYWdJbmRleCwgaG92ZXJJbmRleCk7XG5cbiAgICAgICAgLy8gTm90ZTogd2UncmUgbXV0YXRpbmcgdGhlIG1vbml0b3IgaXRlbSBoZXJlIVxuICAgICAgICAvLyBHZW5lcmFsbHkgaXQncyBiZXR0ZXIgdG8gYXZvaWQgbXV0YXRpb25zLFxuICAgICAgICAvLyBidXQgaXQncyBnb29kIGhlcmUgZm9yIHRoZSBzYWtlIG9mIHBlcmZvcm1hbmNlXG4gICAgICAgIC8vIHRvIGF2b2lkIGV4cGVuc2l2ZSBpbmRleCBzZWFyY2hlcy5cbiAgICAgICAgbW9uaXRvci5nZXRJdGVtKCkuaW5kZXggPSBob3ZlckluZGV4O1xuICAgIH0sXG59O1xuXG5jbGFzcyBTb3J0YWJsZVRhYmxlUm93IGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcblxuICAgIHJlbmRlcigpIHtcbiAgICAgICAgY29uc3QgeyB0ZXh0LCBpc0RyYWdnaW5nLCBjb25uZWN0RHJhZ1NvdXJjZSwgY29ubmVjdERyb3BUYXJnZXQsIGNoaWxkcmVuLCBldmVuLCBpZCB9ID0gdGhpcy5wcm9wcztcbiAgICAgICAgY29uc3Qgb3BhY2l0eSA9IGlzRHJhZ2dpbmcgPyAwIDogMTtcblxuICAgICAgICByZXR1cm4gY29ubmVjdERyYWdTb3VyY2UoY29ubmVjdERyb3BUYXJnZXQoXG4gICAgICAgICAgICA8dHIgaWQ9e2lkfSByb2xlPVwicm93XCIgY2xhc3NOYW1lPXtldmVuID8gJ2V2ZW4nIDogJ29kZCd9IHN0eWxlPXt7IC4uLnN0eWxlLCBvcGFjaXR5IH19PlxuXHRcdCAgICAgICAge2NoaWxkcmVufVxuICAgICAgICAgICAgPC90cj4sXG4gICAgICAgICkpO1xuICAgIH1cbn1cblxuU29ydGFibGVUYWJsZVJvdy5wcm9wVHlwZXMgPSB7XG4gICAgY29ubmVjdERyYWdTb3VyY2U6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgY29ubmVjdERyb3BUYXJnZXQ6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgaW5kZXg6IFByb3BUeXBlcy5udW1iZXIuaXNSZXF1aXJlZCxcbiAgICBpc0RyYWdnaW5nOiBQcm9wVHlwZXMuYm9vbC5pc1JlcXVpcmVkLFxuICAgIGlkOiBQcm9wVHlwZXMuYW55LmlzUmVxdWlyZWQsXG4gICAgbW92ZUNhcmQ6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG59O1xuXG5leHBvcnQgZGVmYXVsdFxuICAgIERyYWdTb3VyY2UoJ2NhcmQnLCByb3dTb3VyY2UsIChjb25uZWN0LCBtb25pdG9yKSA9PiAoe1xuICAgICAgICBjb25uZWN0RHJhZ1NvdXJjZTogY29ubmVjdC5kcmFnU291cmNlKCksXG4gICAgICAgIGlzRHJhZ2dpbmc6IG1vbml0b3IuaXNEcmFnZ2luZygpLFxuICAgICAgICB9KSkoXG4gICAgRHJvcFRhcmdldCgnY2FyZCcsIHJvd1RhcmdldCwgY29ubmVjdCA9PiAoe1xuICAgICAgICBjb25uZWN0RHJvcFRhcmdldDogY29ubmVjdC5kcm9wVGFyZ2V0KCksXG4gICAgICAgIH0pKVxuICAgIChTb3J0YWJsZVRhYmxlUm93KSk7XG5cbiIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpbiIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEFjdGlvbnNUYWJsZUNlbGwgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICAgICAgc3VwZXIocHJvcHMpO1xuXG4gICAgICAgIHRoaXMuaGFuZGxlQWN0aW9uID0gdGhpcy5oYW5kbGVBY3Rpb24uYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5zaG91bGREaXNwbGF5QWN0aW9uID0gdGhpcy5zaG91bGREaXNwbGF5QWN0aW9uLmJpbmQodGhpcyk7XG5cbiAgICB9XG5cbiAgICBzaG91bGREaXNwbGF5QWN0aW9uKGFjdGlvbikge1xuICAgICAgICBsZXQge2lkfSA9IHRoaXMucHJvcHM7XG5cbiAgICAgICAgaWYgKCFhY3Rpb24uaGFzT3duUHJvcGVydHkoJ2Rpc3BsYXknKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gYWN0aW9uLmRpc3BsYXkoaWQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaGFuZGxlQWN0aW9uKGFjdGlvbiwgaWQsIGV2KSB7XG4gICAgICAgIGV2LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICBldi5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgICAgIGFjdGlvbihpZCk7XG4gICAgfVxuXG4gICAgcmVuZGVyKCkge1xuICAgICAgICBsZXQge2FjdGlvbnMsIGlkfSA9IHRoaXMucHJvcHM7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8dGQgY2xhc3NOYW1lPVwiYWN0aW9uc1wiIGtleT1cImFjdGlvbnNcIj5cbiAgICAgICAgICAgICAgICB7YWN0aW9ucy5oYXNPd25Qcm9wZXJ0eSgnZGVsZXRlJykgJiYgdGhpcy5zaG91bGREaXNwbGF5QWN0aW9uKGFjdGlvbnMuZGVsZXRlKSAgJiZcbiAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj1cIlwiIGRhdGEtdGlwPVwiZGVsZXRlXCIgb25DbGljaz17dGhpcy5oYW5kbGVBY3Rpb24uYmluZCh0aGlzLCBhY3Rpb25zLmRlbGV0ZS5vbkNsaWNrLCBpZCl9ID5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzTmFtZT1cImZhIGZhLXRyYXNoLW8gZGVsZXRlLWljb25cIj48L2k+XG4gICAgICAgICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAge2FjdGlvbnMuaGFzT3duUHJvcGVydHkoJ2N1c3RvbScpICYmIGFjdGlvbnMuY3VzdG9tLm1hcChhID0+XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2hvdWxkRGlzcGxheUFjdGlvbihhKSAmJlxuICAgICAgICAgICAgICAgICAgICA8YSBocmVmPVwiXCIgZGF0YS10aXA9e2EudG9vbHRpcH0ga2V5PXsnY3VzdG9tXycgKyBhLm5hbWV9IG9uQ2xpY2s9e3RoaXMuaGFuZGxlQWN0aW9uLmJpbmQodGhpcywgYS5vbkNsaWNrLCBpZCl9PlxuICAgICAgICAgICAgICAgICAgICAgICAge2EuaWNvbn1cbiAgICAgICAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICA8L3RkPlxuICAgICAgICApO1xuICAgIH1cbn07XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFRhYmxlSGVhZGluZyBmcm9tICcuL1RhYmxlSGVhZGluZyc7XG5pbXBvcnQgVGFibGVDZWxsIGZyb20gJy4vVGFibGVDZWxsJztcbmltcG9ydCBUYWJsZVJvdyBmcm9tICcuL1RhYmxlUm93JztcbmltcG9ydCBBY3Rpb25zVGFibGVDZWxsIGZyb20gJy4vQWN0aW9uc1RhYmxlQ2VsbCc7XG5pbXBvcnQgUmVhY3RUb29sdGlwIGZyb20gJ3JlYWN0LXRvb2x0aXAnXG5cbmltcG9ydCAnLi90YWJsZS5jc3MnO1xuXG5jb25zdCBkZWZhdWx0cyA9IHtcbiAgICBzb3J0RnVuYzogKGEsYikgPT4gKGEgPCBiID8gLTEgOiAoYSA+IGIgPyAxIDogMCkpLFxuICAgIHNvcnRhYmxlOiBmYWxzZSxcbiAgICBzb3J0Q29sOiAwLFxuICAgIHNvcnREaXI6IDEsXG4gICAgY29sV2lkdGg6ICcnXG59XG5cbmNvbnN0IGNyZWF0ZVJvdyA9IChyb3csIGNvbHVtbnMsIGFjdGlvbnMpID0+IHtcblxuICAgIHZhciBhY3Rpb25fYnV0dG9ucyA9ICcnO1xuICAgIHZhciBjZWxscyA9IGNvbHVtbnMubWFwKChjb2wsaSkgPT4ge1xuICAgICAgICBpZihjb2wuaGFzT3duUHJvcGVydHkoXCJyZW5kZXJcIikpXG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgIDxUYWJsZUNlbGwga2V5PXsnY2VsbF8nK2l9ID5cbiAgICAgICAgICAgICAgICAgICAge2NvbC5yZW5kZXIocm93LCByb3dbY29sLmNvbHVtbktleV0pfVxuICAgICAgICAgICAgICAgIDwvVGFibGVDZWxsPlxuICAgICAgICAgICAgKTtcblxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPFRhYmxlQ2VsbCBrZXk9eydjZWxsXycraX0gPlxuICAgICAgICAgICAgICAgIHtyb3dbY29sLmNvbHVtbktleV19XG4gICAgICAgICAgICA8L1RhYmxlQ2VsbD5cbiAgICAgICAgKTtcbiAgICB9KTtcblxuICAgIGlmIChhY3Rpb25zKSB7XG4gICAgICAgIGNlbGxzLnB1c2goPEFjdGlvbnNUYWJsZUNlbGwga2V5PSdhY3Rpb25zX2NlbGwnIGlkPXtyb3dbJ2lkJ119IGFjdGlvbnM9e2FjdGlvbnN9IC8+KTtcbiAgICB9XG5cbiAgICByZXR1cm4gY2VsbHM7XG59O1xuXG5jb25zdCBnZXRTb3J0RGlyID0gKGNvbHVtbktleSwgY29sdW1uSW5kZXgsIHNvcnRDb2wsIHNvcnREaXIpID0+IHtcbiAgICBpZihjb2x1bW5LZXkgJiYgKGNvbHVtbktleSA9PT0gc29ydENvbCkpIHtcbiAgICAgICAgcmV0dXJuIHNvcnREaXI7XG4gICAgfVxuICAgIGlmKHNvcnRDb2wgPT09IGNvbHVtbkluZGV4KSB7XG4gICAgICAgIHJldHVybiBzb3J0RGlyO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbFxufTtcblxuY29uc3QgVGFibGUgPSAocHJvcHMpID0+IHtcbiAgICBsZXQge29wdGlvbnMsIGNvbHVtbnN9ID0gcHJvcHM7XG4gICAgbGV0IHRhYmxlQ2xhc3MgPSBvcHRpb25zLmhhc093blByb3BlcnR5KCdjbGFzc05hbWUnKSA/IG9wdGlvbnMuY2xhc3NOYW1lIDogJyc7XG4gICAgdGFibGVDbGFzcyArPSAob3B0aW9ucy5hY3Rpb25zLmhhc093blByb3BlcnR5KCdlZGl0JykpID8gJyB0YWJsZS1ob3ZlcicgOiAnJztcblxuICAgIHJldHVybiAoXG4gICAgICAgIDxkaXY+XG4gICAgICAgICAgICA8dGFibGUgY2xhc3NOYW1lPXtcInRhYmxlIHRhYmxlLXN0cmlwZWQgZGF0YVRhYmxlIFwiICsgdGFibGVDbGFzc30+XG4gICAgICAgICAgICAgICAgPHRoZWFkPlxuICAgICAgICAgICAgICAgICAgICA8dHI+XG4gICAgICAgICAgICAgICAgICAgIHtjb2x1bW5zLm1hcCgoY29sLGkpID0+IHtcblxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHNvcnRDb2wgPSAodHlwZW9mIG9wdGlvbnMuc29ydENvbCAhPSAndW5kZWZpbmVkJykgPyBvcHRpb25zLnNvcnRDb2wgOiBkZWZhdWx0cy5zb3J0Q29sO1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHNvcnREaXIgPSAodHlwZW9mIG9wdGlvbnMuc29ydERpciAhPSAndW5kZWZpbmVkJykgPyBvcHRpb25zLnNvcnREaXIgOiBkZWZhdWx0cy5zb3J0RGlyO1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHNvcnRGdW5jID0gKHR5cGVvZiBvcHRpb25zLnNvcnRGdW5jICE9ICd1bmRlZmluZWQnKSA/IG9wdGlvbnMuc29ydEZ1bmMgOiBkZWZhdWx0cy5zb3J0RnVuYztcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBzb3J0YWJsZSA9ICh0eXBlb2YgY29sLnNvcnRhYmxlICE9ICd1bmRlZmluZWQnKSA/IGNvbC5zb3J0YWJsZSA6IGRlZmF1bHRzLnNvcnRhYmxlO1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGNvbFdpZHRoID0gKHR5cGVvZiBjb2wud2lkdGggIT0gJ3VuZGVmaW5lZCcpID8gY29sLndpZHRoIDogZGVmYXVsdHMuY29sV2lkdGg7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPFRhYmxlSGVhZGluZ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvblNvcnQ9e3Byb3BzLm9uU29ydH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc29ydERpcj17Z2V0U29ydERpcihjb2wuY29sdW1uS2V5LCBpLCBzb3J0Q29sLCBzb3J0RGlyKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc29ydGFibGU9e3NvcnRhYmxlfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3J0RnVuYz17c29ydEZ1bmN9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbkluZGV4PXtpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5LZXk9e2NvbC5jb2x1bW5LZXl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoPXtjb2xXaWR0aH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5PXsnaGVhZGluZ18nK2l9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Y29sLnZhbHVlfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvVGFibGVIZWFkaW5nPlxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICAgICAgICAgIHtvcHRpb25zLmFjdGlvbnMgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIDxUYWJsZUhlYWRpbmcga2V5PSdhY3Rpb25zX2hlYWRpbmcnID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7b3B0aW9ucy5hY3Rpb25zSGVhZGVyIHx8ICcgJ31cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvVGFibGVIZWFkaW5nPlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICAgICAgPC90aGVhZD5cbiAgICAgICAgICAgICAgICA8dGJvZHk+XG4gICAgICAgICAgICAgICAgICAgIHtjb2x1bW5zLmxlbmd0aCA+IDAgJiYgcHJvcHMuZGF0YS5tYXAoKHJvdyxpKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZihBcnJheS5pc0FycmF5KHJvdykgJiYgcm93Lmxlbmd0aCAhPT0gY29sdW1ucy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oYERhdGEgYXQgcm93ICR7aX0gaXMgJHtyb3cubGVuZ3RofS4gSXQgc2hvdWxkIGJlICR7Y29sdW1ucy5sZW5ndGh9LmApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiA8dHIga2V5PXsncm93XycraX0gLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8VGFibGVSb3cgZXZlbj17aSUyID09PSAwfSBrZXk9eydyb3dfJytpfSBpZD17cm93WydpZCddfSBhY3Rpb25zPXtvcHRpb25zLmFjdGlvbnN9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Y3JlYXRlUm93KHJvdywgY29sdW1ucywgb3B0aW9ucy5hY3Rpb25zKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L1RhYmxlUm93PlxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICAgICAgPC90Ym9keT5cbiAgICAgICAgICAgIDwvdGFibGU+XG4gICAgICAgICAgICA8UmVhY3RUb29sdGlwIGRlbGF5U2hvdz17MTB9IC8+XG4gICAgICAgIDwvZGl2PlxuICAgICk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBUYWJsZTtcbiIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUmF3SFRNTCBmcm9tICcuLi9yYXctaHRtbCc7XG5cbmNvbnN0IFRhYmxlQ2VsbCA9IChwcm9wcykgPT4ge1xuICAgIGxldCB7Y2hpbGRyZW59ID0gcHJvcHM7XG5cdGxldCB2YWx1ZSA9ICcnO1xuXHRpZihjaGlsZHJlbikge1xuXHQgICAgaWYgKFJlYWN0LmlzVmFsaWRFbGVtZW50KGNoaWxkcmVuKSkge1xuXHQgICAgICAgIHZhbHVlID0gY2hpbGRyZW47XG4gICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgdmFsdWUgPSA8UmF3SFRNTD57Y2hpbGRyZW4udG9TdHJpbmcoKX08L1Jhd0hUTUw+XG4gICAgICAgIH1cbiAgICB9XG5cblx0cmV0dXJuIChcblx0XHQ8dGQgey4uLnByb3BzfT5cbiAgICAgICAgICAgIHt2YWx1ZX1cblx0XHQ8L3RkPlxuXHQpO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgVGFibGVDZWxsO1xuIiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5cbmNsYXNzIFRhYmxlSGVhZGluZyBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG5cblx0Y29uc3RydWN0b3IgKHByb3BzKSB7XG5cdFx0c3VwZXIocHJvcHMpO1xuXHRcdHRoaXMuaGFuZGxlU29ydCA9IHRoaXMuaGFuZGxlU29ydC5iaW5kKHRoaXMpO1xuXHR9XG5cblx0Z2V0U29ydENsYXNzKCkge1xuXG5cdFx0aWYgKCF0aGlzLnByb3BzLnNvcnRhYmxlKSByZXR1cm4gbnVsbDtcblxuXHRcdHN3aXRjaCh0aGlzLnByb3BzLnNvcnREaXIpIHtcblx0XHRcdGNhc2UgMTpcblx0XHRcdFx0cmV0dXJuICdzb3J0aW5nX2FzYyc7XG5cdFx0XHRjYXNlIC0xOlxuXHRcdFx0XHRyZXR1cm4gJ3NvcnRpbmdfZGVzYyc7XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRyZXR1cm4gdGhpcy5wcm9wcy5zb3J0YWJsZSA/ICdzb3J0aW5nJyA6IG51bGxcblx0XHR9XG5cdH1cblxuXHRoYW5kbGVTb3J0KGUpIHtcblx0XHRlLnByZXZlbnREZWZhdWx0KCk7XG5cdFx0aWYoIXRoaXMucHJvcHMuaGFzT3duUHJvcGVydHkoJ29uU29ydCcpIHx8ICF0aGlzLnByb3BzLnNvcnRhYmxlKSByZXR1cm47XG5cblx0XHR0aGlzLnByb3BzLm9uU29ydChcblx0XHRcdHRoaXMucHJvcHMuY29sdW1uSW5kZXgsXG5cdFx0XHR0aGlzLnByb3BzLmNvbHVtbktleSxcblx0XHRcdHRoaXMucHJvcHMuc29ydERpciA/IHRoaXMucHJvcHMuc29ydERpciotMSA6IDEsXG5cdFx0XHR0aGlzLnByb3BzLnNvcnRGdW5jXG5cdFx0KTtcblx0fVxuXG5cdHJlbmRlciAoKSB7XG5cdFx0cmV0dXJuIChcblx0XHRcdDx0aCBvbkNsaWNrPXt0aGlzLmhhbmRsZVNvcnR9XG5cdFx0XHRcdGNsYXNzTmFtZT17dGhpcy5nZXRTb3J0Q2xhc3MoKX1cblx0XHRcdFx0d2lkdGg9e3RoaXMucHJvcHMud2lkdGh9XG5cdFx0XHRcdD5cblx0XHRcdFx0e3RoaXMucHJvcHMuY2hpbGRyZW59XG5cdFx0XHQ8L3RoPlxuXHRcdCk7XHRcblx0fVxuXHRcbn1cblxuVGFibGVIZWFkaW5nLnByb3BUeXBlcyA9IHtcblx0b25Tb3J0OiBQcm9wVHlwZXMuZnVuYyxcblx0c29ydERpcjogUHJvcFR5cGVzLm51bWJlcixcblx0Y29sdW1uSW5kZXg6IFByb3BUeXBlcy5udW1iZXIsXG5cdGNvbHVtbktleTogUHJvcFR5cGVzLmFueSxcblx0c29ydGFibGU6IFByb3BUeXBlcy5ib29sLFxuXHRzb3J0RnVuYzogUHJvcFR5cGVzLmZ1bmNcbn07XG5cbmV4cG9ydCBkZWZhdWx0IFRhYmxlSGVhZGluZzsiLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUYWJsZVJvdyBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgICAgICBzdXBlcihwcm9wcyk7XG5cbiAgICAgICAgdGhpcy5oYW5kbGVFZGl0ID0gdGhpcy5oYW5kbGVFZGl0LmJpbmQodGhpcyk7XG4gICAgfVxuXG4gICAgc2hvdWxkRGlzcGxheUFjdGlvbihhY3Rpb24pIHtcbiAgICAgICAgbGV0IHtpZH0gPSB0aGlzLnByb3BzO1xuXG4gICAgICAgIGlmICghYWN0aW9uLmhhc093blByb3BlcnR5KCdkaXNwbGF5JykpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGFjdGlvbi5kaXNwbGF5KGlkKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGhhbmRsZUVkaXQoaWQsIGV2KSB7XG4gICAgICAgIGV2LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICBldi5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgICAgIHRoaXMucHJvcHMuYWN0aW9ucy5lZGl0Lm9uQ2xpY2soaWQpO1xuICAgIH1cblxuICAgIHJlbmRlcigpIHtcbiAgICAgICAgbGV0IHtldmVuLCBhY3Rpb25zLCBpZCwgY2hpbGRyZW59ID0gdGhpcy5wcm9wcztcbiAgICAgICAgbGV0IGNhbkVkaXQgPSAoYWN0aW9ucy5oYXNPd25Qcm9wZXJ0eSgnZWRpdCcpICYmIHRoaXMuc2hvdWxkRGlzcGxheUFjdGlvbihhY3Rpb25zLmVkaXQpKTtcbiAgICAgICAgbGV0IHJvd0NsYXNzID0gZXZlbiA/ICdldmVuJyA6ICdvZGQnO1xuXG4gICAgICAgIGlmIChjYW5FZGl0KSB7XG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgIDx0ciByb2xlPVwicm93XCIgY2xhc3NOYW1lPXtyb3dDbGFzcyArIFwiIGNhbi1lZGl0XCJ9IG9uQ2xpY2s9e3RoaXMuaGFuZGxlRWRpdC5iaW5kKHRoaXMsIGlkKX0+XG4gICAgICAgICAgICAgICAgICAgIHtjaGlsZHJlbn1cbiAgICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgPHRyIHJvbGU9XCJyb3dcIiBjbGFzc05hbWU9e3Jvd0NsYXNzfT5cbiAgICAgICAgICAgICAgICAgICAge2NoaWxkcmVufVxuICAgICAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgfVxufTtcblxuIiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luIiwiaW1wb3J0IHsgdXNlUmVmLCB1c2VTdGF0ZSwgdXNlRWZmZWN0IH0gZnJvbSAncmVhY3QnO1xuXG5jb25zdCB1c2VGaXRUZXh0ID0gKG1heFNpemUgPSA1MCwgbWluU2l6ZSA9IDEzMCkgPT4ge1xuICAgIGNvbnN0IE1JTl9GT05UX1NJWkUgPSBtaW5TaXplO1xuICAgIGNvbnN0IE1BWF9GT05UX1NJWkUgPSBtYXhTaXplO1xuICAgIGNvbnN0IFJFU09MVVRJT04gPSA1O1xuXG4gICAgY29uc3QgcmVmID0gdXNlUmVmKG51bGwpO1xuXG4gICAgY29uc3QgW3N0YXRlLCBzZXRTdGF0ZV0gPSB1c2VTdGF0ZSh7XG4gICAgICAgIGZvbnRTaXplOiBNQVhfRk9OVF9TSVpFLFxuICAgICAgICBmb250U2l6ZVByZXY6IE1JTl9GT05UX1NJWkUsXG4gICAgICAgIGZvbnRTaXplTWF4OiBNQVhfRk9OVF9TSVpFLFxuICAgICAgICBmb250U2l6ZU1pbjogTUlOX0ZPTlRfU0laRSxcbiAgICB9KTtcbiAgICBjb25zdCB7IGZvbnRTaXplLCBmb250U2l6ZU1heCwgZm9udFNpemVNaW4sIGZvbnRTaXplUHJldiB9ID0gc3RhdGU7XG5cbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICBjb25zdCBpc0RvbmUgPSBNYXRoLmFicyhmb250U2l6ZSAtIGZvbnRTaXplUHJldikgPD0gUkVTT0xVVElPTjtcbiAgICAgICAgY29uc3QgaXNPdmVyZmxvdyA9XG4gICAgICAgICAgICAhIXJlZi5jdXJyZW50ICYmXG4gICAgICAgICAgICAocmVmLmN1cnJlbnQuc2Nyb2xsSGVpZ2h0ID4gcmVmLmN1cnJlbnQub2Zmc2V0SGVpZ2h0IHx8XG4gICAgICAgICAgICAgICAgcmVmLmN1cnJlbnQuc2Nyb2xsV2lkdGggPiByZWYuY3VycmVudC5vZmZzZXRXaWR0aCk7XG4gICAgICAgIGNvbnN0IGlzQXNjID0gZm9udFNpemUgPiBmb250U2l6ZVByZXY7XG5cbiAgICAgICAgLy8gcmV0dXJuIGlmIHRoZSBmb250IHNpemUgaGFzIGJlZW4gYWRqdXN0ZWQgXCJlbm91Z2hcIiAoY2hhbmdlIHdpdGhpbiBSRVNPTFVUSU9OKVxuICAgICAgICAvLyByZWR1Y2UgZm9udCBzaXplIGJ5IG9uZSBpbmNyZW1lbnQgaWYgaXQncyBvdmVyZmxvd2luZ1xuICAgICAgICBpZiAoaXNEb25lKSB7XG4gICAgICAgICAgICBpZiAoaXNPdmVyZmxvdykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGZvbnRTaXplTmV3ID1cbiAgICAgICAgICAgICAgICAgICAgZm9udFNpemVQcmV2IDwgZm9udFNpemVcbiAgICAgICAgICAgICAgICAgICAgICAgID8gZm9udFNpemVQcmV2XG4gICAgICAgICAgICAgICAgICAgICAgICA6IGZvbnRTaXplIC0gKGZvbnRTaXplUHJldiAtIGZvbnRTaXplKTtcbiAgICAgICAgICAgICAgICBzZXRTdGF0ZSh7XG4gICAgICAgICAgICAgICAgICAgIGZvbnRTaXplOiBmb250U2l6ZU5ldyxcbiAgICAgICAgICAgICAgICAgICAgZm9udFNpemVNYXgsXG4gICAgICAgICAgICAgICAgICAgIGZvbnRTaXplTWluLFxuICAgICAgICAgICAgICAgICAgICBmb250U2l6ZVByZXYsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBiaW5hcnkgc2VhcmNoIHRvIGFkanVzdCBmb250IHNpemVcbiAgICAgICAgbGV0IGRlbHRhO1xuICAgICAgICBsZXQgbmV3TWF4ID0gZm9udFNpemVNYXg7XG4gICAgICAgIGxldCBuZXdNaW4gPSBmb250U2l6ZU1pbjtcbiAgICAgICAgaWYgKGlzT3ZlcmZsb3cpIHtcbiAgICAgICAgICAgIGRlbHRhID0gaXNBc2MgPyBmb250U2l6ZVByZXYgLSBmb250U2l6ZSA6IGZvbnRTaXplTWluIC0gZm9udFNpemU7XG4gICAgICAgICAgICBuZXdNYXggPSBNYXRoLm1pbihmb250U2l6ZU1heCwgZm9udFNpemUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZGVsdGEgPSBpc0FzYyA/IGZvbnRTaXplTWF4IC0gZm9udFNpemUgOiBmb250U2l6ZVByZXYgLSBmb250U2l6ZTtcbiAgICAgICAgICAgIG5ld01pbiA9IE1hdGgubWF4KGZvbnRTaXplTWluLCBmb250U2l6ZSk7XG4gICAgICAgIH1cbiAgICAgICAgc2V0U3RhdGUoe1xuICAgICAgICAgICAgZm9udFNpemU6IGZvbnRTaXplICsgZGVsdGEgLyAyLFxuICAgICAgICAgICAgZm9udFNpemVNYXg6IG5ld01heCxcbiAgICAgICAgICAgIGZvbnRTaXplTWluOiBuZXdNaW4sXG4gICAgICAgICAgICBmb250U2l6ZVByZXY6IGZvbnRTaXplLFxuICAgICAgICB9KTtcbiAgICB9LCBbZm9udFNpemUsIGZvbnRTaXplTWF4LCBmb250U2l6ZU1pbiwgZm9udFNpemVQcmV2LCByZWZdKTtcblxuICAgIHJldHVybiB7IGZvbnRTaXplOiBgJHtmb250U2l6ZX0lYCwgbGluZUhlaWdodDogYCR7Zm9udFNpemUgLSAxMH0lYCwgcmVmIH07XG59O1xuXG5leHBvcnQgZGVmYXVsdCB1c2VGaXRUZXh0O1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMCBPcGVuU3RhY2sgRm91bmRhdGlvblxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICoqL1xuXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHZpZGVvanMgZnJvbSAndmlkZW8uanMnXG5cbmltcG9ydCAndmlkZW8uanMvZGlzdC92aWRlby1qcy5jc3MnXG5cbmNvbnN0IFlvdXR1YmVWaWRlb0NvbXBvbmVudCA9ICh7IHZpZGVvU3JjVVJMLCB2aWRlb1RpdGxlIH0pID0+IChcbiAgICA8ZGl2IGNsYXNzTmFtZT1cInZpZGVvXCI+XG4gICAgICAgIDxpZnJhbWVcbiAgICAgICAgICAgIHdpZHRoPVwiMTAwJVwiXG4gICAgICAgICAgICBoZWlnaHQ9XCI3MjBcIlxuICAgICAgICAgICAgdGl0bGU9e3ZpZGVvVGl0bGV9XG4gICAgICAgICAgICBzcmM9e3ZpZGVvU3JjVVJMfVxuICAgICAgICAgICAgZnJhbWVCb3JkZXI9XCIwXCJcbiAgICAgICAgICAgIGFsbG93PVwiYWNjZWxlcm9tZXRlcjsgYXV0b3BsYXk7IGVuY3J5cHRlZC1tZWRpYTsgZ3lyb3Njb3BlOyBwaWN0dXJlLWluLXBpY3R1cmVcIlxuICAgICAgICAgICAgYWxsb3dGdWxsU2NyZWVuXG4gICAgICAgIC8+XG4gICAgPC9kaXY+XG4pO1xuXG5cbmNsYXNzIExpdmVWaWRlb1BsYXllciBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG5cbiAgICBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICAgICAgdGhpcy5wbGF5ZXIgPSB2aWRlb2pzKHRoaXMudmlkZW9Ob2RlLCB0aGlzLnByb3BzKTtcbiAgICB9XG5cbiAgICBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICAgICAgaWYgKHRoaXMucGxheWVyKSB7XG4gICAgICAgICAgICB0aGlzLnBsYXllci5kaXNwb3NlKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZW5kZXIoKSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8ZGl2IGRhdGEtdmpzLXBsYXllcj1cIlwiPlxuICAgICAgICAgICAgICAgIDx2aWRlbyByZWY9e25vZGUgPT4gdGhpcy52aWRlb05vZGUgPSBub2RlfSBjbGFzc05hbWU9XCJ2aWRlby1qcyB2anMtYmlnLXBsYXktY2VudGVyZWRcIiAvPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICk7XG4gICAgfVxufVxuXG5jb25zdCBWaWRlb1N0cmVhbSA9ICh7IHVybCB9KSA9PiB7XG4gICAgbGV0IGxheW91dCA9IG51bGw7XG4gICAgY29uc3QgY2hlY2tMaXZlVmlkZW8gPSAoKSA9PiB7XG4gICAgICAgIGxldCBpc0xpdmVWaWRlbyA9IG51bGw7XG4gICAgICAgIHVybC5tYXRjaCgvLm0zdTgvKSA/IGlzTGl2ZVZpZGVvID0gdHJ1ZSA6IGlzTGl2ZVZpZGVvID0gZmFsc2U7XG4gICAgICAgIHJldHVybiBpc0xpdmVWaWRlbztcbiAgICB9O1xuXG4gICAgaWYgKHVybCkge1xuICAgICAgICBpZiAoY2hlY2tMaXZlVmlkZW8oKSkge1xuICAgICAgICAgICAgY29uc3QgdmlkZW9Kc09wdGlvbnMgPSB7XG4gICAgICAgICAgICAgICAgYXV0b3BsYXk6IHRydWUsXG4gICAgICAgICAgICAgICAgY29udHJvbHM6IHRydWUsXG4gICAgICAgICAgICAgICAgZmx1aWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgc291cmNlczogW3tcbiAgICAgICAgICAgICAgICAgICAgc3JjOiB1cmwsXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6ICdhcHBsaWNhdGlvbi94LW1wZWdVUkwnXG4gICAgICAgICAgICAgICAgfV1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxheW91dCA9IDxMaXZlVmlkZW9QbGF5ZXIgey4uLnZpZGVvSnNPcHRpb25zfSAvPjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxheW91dCA9IDxZb3V0dWJlVmlkZW9Db21wb25lbnQgdmlkZW9TcmNVUkw9e3VybH0gLz47XG4gICAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgICBsYXlvdXQgPSA8c3BhbiBjbGFzc05hbWU9XCJuby12aWRlb1wiPk5vIHZpZGVvIFVSTCBQcm92aWRlZDwvc3Bhbj47XG4gICAgfVxuXG4gICAgcmV0dXJuIGxheW91dDtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IFZpZGVvU3RyZWFtO1xuIiwidmFyIG1hcCA9IHtcblx0XCIuL2VuLmpzb25cIjogXCIuL3NyYy9pMThuL2VuLmpzb25cIixcblx0XCIuL2VzLmpzb25cIjogXCIuL3NyYy9pMThuL2VzLmpzb25cIixcblx0XCIuL3poLmpzb25cIjogXCIuL3NyYy9pMThuL3poLmpzb25cIlxufTtcblxuXG5mdW5jdGlvbiB3ZWJwYWNrQ29udGV4dChyZXEpIHtcblx0dmFyIGlkID0gd2VicGFja0NvbnRleHRSZXNvbHZlKHJlcSk7XG5cdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKGlkKTtcbn1cbmZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0UmVzb2x2ZShyZXEpIHtcblx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhtYXAsIHJlcSkpIHtcblx0XHR2YXIgZSA9IG5ldyBFcnJvcihcIkNhbm5vdCBmaW5kIG1vZHVsZSAnXCIgKyByZXEgKyBcIidcIik7XG5cdFx0ZS5jb2RlID0gJ01PRFVMRV9OT1RfRk9VTkQnO1xuXHRcdHRocm93IGU7XG5cdH1cblx0cmV0dXJuIG1hcFtyZXFdO1xufVxud2VicGFja0NvbnRleHQua2V5cyA9IGZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0S2V5cygpIHtcblx0cmV0dXJuIE9iamVjdC5rZXlzKG1hcCk7XG59O1xud2VicGFja0NvbnRleHQucmVzb2x2ZSA9IHdlYnBhY2tDb250ZXh0UmVzb2x2ZTtcbm1vZHVsZS5leHBvcnRzID0gd2VicGFja0NvbnRleHQ7XG53ZWJwYWNrQ29udGV4dC5pZCA9IFwiLi9zcmMvaTE4biBzeW5jIHJlY3Vyc2l2ZSBeXFxcXC5cXFxcLy4qXFxcXC5qc29uJFwiOyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTcgT3BlblN0YWNrIEZvdW5kYXRpb25cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqKi9cblxuaW1wb3J0IHJlcXVlc3QgZnJvbSAnc3VwZXJhZ2VudCc7XG5pbXBvcnQgVVJJIGZyb20gXCJ1cmlqc1wiO1xubGV0IGh0dHAgPSByZXF1ZXN0O1xuaW1wb3J0IFN3YWwgZnJvbSAnc3dlZXRhbGVydDInO1xuaW1wb3J0IFQgZnJvbSBcImkxOG4tcmVhY3QvZGlzdC9pMThuLXJlYWN0XCI7XG5pbXBvcnQge29iamVjdFRvUXVlcnlTdHJpbmcsIGlzQ2xlYXJpbmdTZXNzaW9uU3RhdGUsIHNldFNlc3Npb25DbGVhcmluZ1N0YXRlLCBnZXRDdXJyZW50UGF0aE5hbWV9IGZyb20gJy4vbWV0aG9kcyc7XG5pbXBvcnQge2RvTG9naW4sIGluaXRMb2dPdXQsIENMRUFSX1NFU1NJT05fU1RBVEUsIExPR09VVF9VU0VSfSBmcm9tICcuLi9jb21wb25lbnRzL3NlY3VyaXR5L2FjdGlvbnMnO1xuXG5leHBvcnQgY29uc3QgR0VORVJJQ19FUlJPUiAgPSBcIllpa2VzLiBTb21ldGhpbmcgc2VlbXMgdG8gYmUgYnJva2VuLiBPdXIgd2ViIHRlYW0gaGFzIGJlZW4gbm90aWZpZWQsIGFuZCB3ZSBhcG9sb2dpemUgZm9yIHRoZSBpbmNvbnZlbmllbmNlLlwiO1xuZXhwb3J0IGNvbnN0IFJFU0VUX0xPQURJTkcgID0gJ1JFU0VUX0xPQURJTkcnO1xuZXhwb3J0IGNvbnN0IFNUQVJUX0xPQURJTkcgID0gJ1NUQVJUX0xPQURJTkcnO1xuZXhwb3J0IGNvbnN0IFNUT1BfTE9BRElORyAgID0gJ1NUT1BfTE9BRElORyc7XG5leHBvcnQgY29uc3QgVkFMSURBVEUgICAgICAgPSAnVkFMSURBVEUnO1xuZXhwb3J0IGNvbnN0IENMRUFSX01FU1NBR0UgID0gJ0NMRUFSX01FU1NBR0UnO1xuZXhwb3J0IGNvbnN0IFNIT1dfTUVTU0FHRSAgID0gJ1NIT1dfTUVTU0FHRSc7XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVBY3Rpb24gPSB0eXBlID0+IHBheWxvYWQgPT4gKHtcbiAgICB0eXBlLFxuICAgIHBheWxvYWRcbn0pO1xuXG5leHBvcnQgY29uc3QgcmVzZXRMb2FkaW5nID0gY3JlYXRlQWN0aW9uKFJFU0VUX0xPQURJTkcpO1xuZXhwb3J0IGNvbnN0IHN0YXJ0TG9hZGluZyA9IGNyZWF0ZUFjdGlvbihTVEFSVF9MT0FESU5HKTtcbmV4cG9ydCBjb25zdCBzdG9wTG9hZGluZyAgPSBjcmVhdGVBY3Rpb24oU1RPUF9MT0FESU5HKTtcblxuY29uc3QgeGhycyA9IHt9O1xuXG5jb25zdCBjYW5jZWwgPSAoa2V5KSA9PiB7XG4gICAgaWYoeGhyc1trZXldKSB7XG4gICAgICAgIHhocnNba2V5XS5hYm9ydCgpO1xuICAgICAgICBjb25zb2xlLmxvZyhgYWJvcnRlZCByZXF1ZXN0ICR7a2V5fWApO1xuICAgICAgICBkZWxldGUgeGhyc1trZXldO1xuICAgIH1cbn1cblxuY29uc3Qgc2NoZWR1bGUgPSAoa2V5LCByZXEpID0+IHtcbiAgICAvLyBjb25zb2xlLmxvZyhgc2NoZWR1bGluZyAke2tleX1gKTtcbiAgICB4aHJzW2tleV0gPSByZXE7XG59O1xuXG5jb25zdCBpc09iamVjdEVtcHR5ID0gKG9iaikgPT4ge1xuICAgIHJldHVybiBPYmplY3Qua2V5cyhvYmopLmxlbmd0aCA9PT0gMCAmJiBvYmouY29uc3RydWN0b3IgPT09IE9iamVjdCA7XG59XG5cbmV4cG9ydCBjb25zdCBhdXRoRXJyb3JIYW5kbGVyID0gKGVyciwgcmVzKSA9PiAoZGlzcGF0Y2gsIHN0YXRlKSA9PiB7XG4gICAgbGV0IGNvZGUgPSBlcnIuc3RhdHVzO1xuICAgIGxldCBtc2cgPSAnJztcblxuICAgIGRpc3BhdGNoKHN0b3BMb2FkaW5nKCkpO1xuXG4gICAgc3dpdGNoIChjb2RlKSB7XG4gICAgICAgIGNhc2UgNDAzOlxuICAgICAgICAgICAgbGV0IGVycm9yX21lc3NhZ2UgPSB7XG4gICAgICAgICAgICAgICAgdGl0bGU6ICdFUlJPUicsXG4gICAgICAgICAgICAgICAgaHRtbDogVC50cmFuc2xhdGUoXCJlcnJvcnMudXNlcl9ub3RfYXV0aHpcIiksXG4gICAgICAgICAgICAgICAgdHlwZTogJ2Vycm9yJ1xuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgZGlzcGF0Y2goc2hvd01lc3NhZ2UoIGVycm9yX21lc3NhZ2UsIGluaXRMb2dPdXQgKSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA0MDE6XG4gICAgICAgICAgICBsZXQgY3VycmVudExvY2F0aW9uID0gZ2V0Q3VycmVudFBhdGhOYW1lKCk7XG4gICAgICAgICAgICBsZXQgY2xlYXJpbmdfc2Vzc2lvbl9zdGF0ZSA9IGlzQ2xlYXJpbmdTZXNzaW9uU3RhdGUoKTtcblxuICAgICAgICAgICAgZGlzcGF0Y2goe1xuICAgICAgICAgICAgICAgIHR5cGU6IENMRUFSX1NFU1NJT05fU1RBVEUsXG4gICAgICAgICAgICAgICAgcGF5bG9hZDoge31cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBpZighY2xlYXJpbmdfc2Vzc2lvbl9zdGF0ZSkge1xuICAgICAgICAgICAgICAgIHNldFNlc3Npb25DbGVhcmluZ1N0YXRlKHRydWUpO1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdhdXRoRXJyb3JIYW5kbGVyIDQwMSAtIHJlIGxvZ2luJyk7XG4gICAgICAgICAgICAgICAgZG9Mb2dpbihjdXJyZW50TG9jYXRpb24pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNDA0OlxuICAgICAgICAgICAgbXNnID0gXCJcIjtcblxuICAgICAgICAgICAgaWYgKGVyci5yZXNwb25zZS5ib2R5ICYmIGVyci5yZXNwb25zZS5ib2R5Lm1lc3NhZ2UpIG1zZyA9IGVyci5yZXNwb25zZS5ib2R5Lm1lc3NhZ2U7XG4gICAgICAgICAgICBlbHNlIGlmIChlcnIucmVzcG9uc2UuZXJyb3IgJiYgZXJyLnJlc3BvbnNlLmVycm9yLm1lc3NhZ2UpIG1zZyA9IGVyci5yZXNwb25zZS5lcnJvci5tZXNzYWdlO1xuICAgICAgICAgICAgZWxzZSBtc2cgPSBlcnIubWVzc2FnZTtcblxuICAgICAgICAgICAgU3dhbC5maXJlKFwiTm90IEZvdW5kXCIsIG1zZywgXCJ3YXJuaW5nXCIpO1xuXG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA0MTI6XG4gICAgICAgICAgICBmb3IgKHZhciBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoZXJyLnJlc3BvbnNlLmJvZHkuZXJyb3JzKSkge1xuICAgICAgICAgICAgICAgIGlmIChpc05hTihrZXkpKSB7XG4gICAgICAgICAgICAgICAgICAgIG1zZyArPSBrZXkgKyAnOiAnO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIG1zZyArPSB2YWx1ZSArICc8YnI+JztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIFN3YWwuZmlyZShcIlZhbGlkYXRpb24gZXJyb3JcIiwgbXNnLCBcIndhcm5pbmdcIik7XG4gICAgICAgICAgICBkaXNwYXRjaCh7XG4gICAgICAgICAgICAgICAgdHlwZTogVkFMSURBVEUsXG4gICAgICAgICAgICAgICAgcGF5bG9hZDoge2Vycm9yczogZXJyLnJlc3BvbnNlLmJvZHkuZXJyb3JzfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIFN3YWwuZmlyZShcIkVSUk9SXCIsIFQudHJhbnNsYXRlKFwiZXJyb3JzLnNlcnZlcl9lcnJvclwiKSwgXCJlcnJvclwiKTtcbiAgICB9XG59XG5cbmV4cG9ydCBjb25zdCBnZXRSZXF1ZXN0ID0oXG4gICAgcmVxdWVzdEFjdGlvbkNyZWF0b3IsXG4gICAgcmVjZWl2ZUFjdGlvbkNyZWF0b3IsXG4gICAgZW5kcG9pbnQsXG4gICAgZXJyb3JIYW5kbGVyID0gZGVmYXVsdEVycm9ySGFuZGxlcixcbiAgICByZXF1ZXN0QWN0aW9uUGF5bG9hZCA9IHt9XG4pID0+IChwYXJhbXMgPSB7fSkgPT4gKGRpc3BhdGNoLCBzdGF0ZSkgPT4ge1xuXG4gICAgbGV0IHVybCA9IFVSSShlbmRwb2ludCk7XG5cbiAgICBpZighaXNPYmplY3RFbXB0eShwYXJhbXMpKVxuICAgICAgICB1cmwgPSB1cmwucXVlcnkocGFyYW1zKTtcblxuICAgIGxldCBrZXkgPSB1cmwudG9TdHJpbmcoKTtcblxuICAgIGlmKHJlcXVlc3RBY3Rpb25DcmVhdG9yICYmIHR5cGVvZiByZXF1ZXN0QWN0aW9uQ3JlYXRvciA9PT0gJ2Z1bmN0aW9uJylcbiAgICAgICAgZGlzcGF0Y2gocmVxdWVzdEFjdGlvbkNyZWF0b3IocmVxdWVzdEFjdGlvblBheWxvYWQpKTtcblxuICAgIGNhbmNlbChrZXkpO1xuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgbGV0IHJlcSA9IGh0dHAuZ2V0KHVybC50b1N0cmluZygpKVxuICAgICAgICAudGltZW91dCh7XG4gICAgICAgICAgICByZXNwb25zZTogNjAwMDAsXG4gICAgICAgICAgICBkZWFkbGluZTogNjAwMDAsXG4gICAgICAgIH0pXG4gICAgICAgIC5lbmQocmVzcG9uc2VIYW5kbGVyKGRpc3BhdGNoLCBzdGF0ZSwgcmVjZWl2ZUFjdGlvbkNyZWF0b3IsIGVycm9ySGFuZGxlciwgcmVzb2x2ZSwgcmVqZWN0KSlcblxuICAgICAgICBzY2hlZHVsZShrZXksIHJlcSk7XG4gICAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgcHV0UmVxdWVzdCA9IChcbiAgICByZXF1ZXN0QWN0aW9uQ3JlYXRvcixcbiAgICByZWNlaXZlQWN0aW9uQ3JlYXRvcixcbiAgICBlbmRwb2ludCxcbiAgICBwYXlsb2FkLFxuICAgIGVycm9ySGFuZGxlciA9IGRlZmF1bHRFcnJvckhhbmRsZXIsXG4gICAgcmVxdWVzdEFjdGlvblBheWxvYWQgPSB7fVxuKSA9PiAocGFyYW1zID0ge30pID0+ICggZGlzcGF0Y2gsIHN0YXRlKSA9PiB7XG5cbiAgICBsZXQgdXJsID0gVVJJKGVuZHBvaW50KTtcblxuICAgIGlmKCFpc09iamVjdEVtcHR5KHBhcmFtcykpXG4gICAgICAgIHVybCA9IHVybC5xdWVyeShwYXJhbXMpO1xuXG4gICAgaWYocmVxdWVzdEFjdGlvbkNyZWF0b3IgJiYgdHlwZW9mIHJlcXVlc3RBY3Rpb25DcmVhdG9yID09PSAnZnVuY3Rpb24nKVxuICAgICAgICBkaXNwYXRjaChyZXF1ZXN0QWN0aW9uQ3JlYXRvcihyZXF1ZXN0QWN0aW9uUGF5bG9hZCkpO1xuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgaWYocGF5bG9hZCA9PSBudWxsKVxuICAgICAgICAgICAgcGF5bG9hZCA9IHt9O1xuICAgICAgICBodHRwLnB1dCh1cmwudG9TdHJpbmcoKSlcbiAgICAgICAgICAgIC5zZW5kKHBheWxvYWQpXG4gICAgICAgICAgICAuZW5kKHJlc3BvbnNlSGFuZGxlcihkaXNwYXRjaCwgc3RhdGUsIHJlY2VpdmVBY3Rpb25DcmVhdG9yLCBlcnJvckhhbmRsZXIsIHJlc29sdmUsIHJlamVjdCkpXG4gICAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgZGVsZXRlUmVxdWVzdCA9IChcbiAgICByZXF1ZXN0QWN0aW9uQ3JlYXRvcixcbiAgICByZWNlaXZlQWN0aW9uQ3JlYXRvcixcbiAgICBlbmRwb2ludCxcbiAgICBwYXlsb2FkLFxuICAgIGVycm9ySGFuZGxlciAgPSBkZWZhdWx0RXJyb3JIYW5kbGVyLFxuICAgIHJlcXVlc3RBY3Rpb25QYXlsb2FkID0ge31cbikgPT4gKHBhcmFtcykgPT4gKGRpc3BhdGNoLCBzdGF0ZSkgPT4ge1xuICAgIGxldCB1cmwgPSBVUkkoZW5kcG9pbnQpO1xuXG4gICAgaWYoIWlzT2JqZWN0RW1wdHkocGFyYW1zKSlcbiAgICAgICAgdXJsID0gdXJsLnF1ZXJ5KHBhcmFtcyk7XG5cbiAgICBpZihyZXF1ZXN0QWN0aW9uQ3JlYXRvciAmJiB0eXBlb2YgcmVxdWVzdEFjdGlvbkNyZWF0b3IgPT09ICdmdW5jdGlvbicpXG4gICAgICAgIGRpc3BhdGNoKHJlcXVlc3RBY3Rpb25DcmVhdG9yKHJlcXVlc3RBY3Rpb25QYXlsb2FkKSk7XG5cbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBpZihwYXlsb2FkID09IG51bGwpXG4gICAgICAgICAgICBwYXlsb2FkID0ge307XG5cbiAgICAgICAgaHR0cC5kZWxldGUodXJsKVxuICAgICAgICAgICAgLnNlbmQocGF5bG9hZClcbiAgICAgICAgICAgIC5lbmQocmVzcG9uc2VIYW5kbGVyKGRpc3BhdGNoLCBzdGF0ZSwgcmVjZWl2ZUFjdGlvbkNyZWF0b3IsIGVycm9ySGFuZGxlciwgcmVzb2x2ZSwgcmVqZWN0KSk7XG4gICAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgcG9zdFJlcXVlc3QgPSAoXG4gICAgICAgIHJlcXVlc3RBY3Rpb25DcmVhdG9yLFxuICAgICAgICByZWNlaXZlQWN0aW9uQ3JlYXRvcixcbiAgICAgICAgZW5kcG9pbnQsXG4gICAgICAgIHBheWxvYWQsXG4gICAgICAgIGVycm9ySGFuZGxlciA9IGRlZmF1bHRFcnJvckhhbmRsZXIsXG4gICAgICAgIHJlcXVlc3RBY3Rpb25QYXlsb2FkID0ge31cbikgPT4gKHBhcmFtcyA9IHt9KSA9PiAoZGlzcGF0Y2gsIHN0YXRlKSA9PiB7XG5cbiAgICBsZXQgdXJsID0gVVJJKGVuZHBvaW50KTtcblxuICAgIGlmKCFpc09iamVjdEVtcHR5KHBhcmFtcykpXG4gICAgICAgIHVybCA9IHVybC5xdWVyeShwYXJhbXMpO1xuXG4gICAgaWYocmVxdWVzdEFjdGlvbkNyZWF0b3IgJiYgdHlwZW9mIHJlcXVlc3RBY3Rpb25DcmVhdG9yID09PSAnZnVuY3Rpb24nKVxuICAgICAgICBkaXNwYXRjaChyZXF1ZXN0QWN0aW9uQ3JlYXRvcihyZXF1ZXN0QWN0aW9uUGF5bG9hZCkpO1xuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcblxuICAgICAgICBsZXQgcmVxdWVzdCA9IGh0dHAucG9zdCh1cmwpO1xuXG4gICAgICAgIGlmKHBheWxvYWQgIT0gbnVsbClcbiAgICAgICAgICAgIHJlcXVlc3Quc2VuZChwYXlsb2FkKTtcbiAgICAgICAgZWxzZSAvLyB0byBiZSBhIHNpbXBsZSBDT1JTIHJlcXVlc3RcbiAgICAgICAgICAgIHJlcXVlc3Quc2V0KCdDb250ZW50LVR5cGUnLCAndGV4dC9wbGFpbicpO1xuXG4gICAgICAgIHJlcXVlc3QuZW5kKHJlc3BvbnNlSGFuZGxlcihkaXNwYXRjaCwgc3RhdGUsIHJlY2VpdmVBY3Rpb25DcmVhdG9yLCBlcnJvckhhbmRsZXIsIHJlc29sdmUsIHJlamVjdCkpO1xuICAgIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IHBvc3RGaWxlID0gKFxuICAgIHJlcXVlc3RBY3Rpb25DcmVhdG9yLFxuICAgIHJlY2VpdmVBY3Rpb25DcmVhdG9yLFxuICAgIGVuZHBvaW50LFxuICAgIGZpbGUsXG4gICAgZmlsZU1ldGFkYXRhID0ge30sXG4gICAgZXJyb3JIYW5kbGVyID0gZGVmYXVsdEVycm9ySGFuZGxlcixcbiAgICByZXF1ZXN0QWN0aW9uUGF5bG9hZCA9IHt9XG4pID0+IChwYXJhbXMgPSB7fSkgPT4gKGRpc3BhdGNoLCBzdGF0ZSkgPT4ge1xuXG4gICAgbGV0IHVybCA9IFVSSShlbmRwb2ludCk7XG5cbiAgICBpZighaXNPYmplY3RFbXB0eShwYXJhbXMpKVxuICAgICAgICB1cmwgPSB1cmwucXVlcnkocGFyYW1zKTtcblxuICAgIGlmKHJlcXVlc3RBY3Rpb25DcmVhdG9yICYmIHR5cGVvZiByZXF1ZXN0QWN0aW9uQ3JlYXRvciA9PT0gJ2Z1bmN0aW9uJylcbiAgICAgICAgZGlzcGF0Y2gocmVxdWVzdEFjdGlvbkNyZWF0b3IocmVxdWVzdEFjdGlvblBheWxvYWQpKTtcblxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG5cbiAgICAgICAgY29uc3QgcmVxID0gaHR0cC5wb3N0KHVybClcbiAgICAgICAgICAgICAgICAgICAgLmF0dGFjaCgnZmlsZScsIGZpbGUpO1xuXG4gICAgICAgIGlmKCFpc09iamVjdEVtcHR5KGZpbGVNZXRhZGF0YSkpIHtcbiAgICAgICAgICAgIE9iamVjdC5rZXlzKGZpbGVNZXRhZGF0YSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgICAgICAgICAgbGV0IHZhbHVlID0gZmlsZU1ldGFkYXRhW2tleV07XG4gICAgICAgICAgICAgICAgcmVxLmZpZWxkKGtleSwgdmFsdWUpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXEuZW5kKHJlc3BvbnNlSGFuZGxlcihkaXNwYXRjaCwgc3RhdGUsIHJlY2VpdmVBY3Rpb25DcmVhdG9yLCBlcnJvckhhbmRsZXIsIHJlc29sdmUsIHJlamVjdCkpO1xuICAgIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IHB1dEZpbGUgPSAoXG4gICAgcmVxdWVzdEFjdGlvbkNyZWF0b3IsXG4gICAgcmVjZWl2ZUFjdGlvbkNyZWF0b3IsXG4gICAgZW5kcG9pbnQsXG4gICAgZmlsZSA9IG51bGwsXG4gICAgZmlsZU1ldGFkYXRhID0ge30sXG4gICAgZXJyb3JIYW5kbGVyID0gZGVmYXVsdEVycm9ySGFuZGxlcixcbiAgICByZXF1ZXN0QWN0aW9uUGF5bG9hZCA9IHt9XG4pID0+IChwYXJhbXMgPSB7fSkgPT4gKGRpc3BhdGNoLCBzdGF0ZSkgPT4ge1xuXG4gICAgbGV0IHVybCA9IFVSSShlbmRwb2ludCk7XG5cbiAgICBpZighaXNPYmplY3RFbXB0eShwYXJhbXMpKVxuICAgICAgICB1cmwgPSB1cmwucXVlcnkocGFyYW1zKTtcblxuICAgIGlmKHJlcXVlc3RBY3Rpb25DcmVhdG9yICYmIHR5cGVvZiByZXF1ZXN0QWN0aW9uQ3JlYXRvciA9PT0gJ2Z1bmN0aW9uJylcbiAgICAgICAgZGlzcGF0Y2gocmVxdWVzdEFjdGlvbkNyZWF0b3IocmVxdWVzdEFjdGlvblBheWxvYWQpKTtcblxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG5cbiAgICAgICAgY29uc3QgcmVxID0gaHR0cC5wdXQodXJsKTtcblxuICAgICAgICBpZihmaWxlICE9IG51bGwpe1xuICAgICAgICAgICAgcmVxLmF0dGFjaCgnZmlsZScsIGZpbGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYoIWlzT2JqZWN0RW1wdHkoZmlsZU1ldGFkYXRhKSkge1xuICAgICAgICAgICAgT2JqZWN0LmtleXMoZmlsZU1ldGFkYXRhKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgICAgICAgICBsZXQgdmFsdWUgPSBmaWxlTWV0YWRhdGFba2V5XTtcbiAgICAgICAgICAgICAgICByZXEuZmllbGQoa2V5LCB2YWx1ZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJlcS5lbmQocmVzcG9uc2VIYW5kbGVyKGRpc3BhdGNoLCBzdGF0ZSwgcmVjZWl2ZUFjdGlvbkNyZWF0b3IsIGVycm9ySGFuZGxlciwgcmVzb2x2ZSwgcmVqZWN0KSk7XG4gICAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgZGVmYXVsdEVycm9ySGFuZGxlciA9IChlcnIsIHJlcykgPT4gKGRpc3BhdGNoKSA9PiB7XG4gICAgbGV0IGJvZHkgPSByZXMuYm9keTtcbiAgICBsZXQgdGV4dCA9ICcnO1xuICAgIGlmKGJvZHkgaW5zdGFuY2VvZiBPYmplY3Qpe1xuICAgICAgICBpZihib2R5Lmhhc093blByb3BlcnR5KCdtZXNzYWdlJykpXG4gICAgICAgICAgICB0ZXh0ID0gYm9keS5tZXNzYWdlO1xuICAgIH1cbiAgICBTd2FsLmZpcmUocmVzLnN0YXR1c1RleHQsIHRleHQsIFwiZXJyb3JcIik7XG59XG5cbmV4cG9ydCBjb25zdCByZXNwb25zZUhhbmRsZXIgPVxuICAgICggZGlzcGF0Y2gsIHN0YXRlLCByZWNlaXZlQWN0aW9uQ3JlYXRvciwgZXJyb3JIYW5kbGVyLCByZXNvbHZlLCByZWplY3QgKSA9PlxuICAgIChlcnIsIHJlcykgPT4ge1xuICAgIGlmIChlcnIgfHwgIXJlcy5vaykge1xuICAgICAgICBpZihlcnJvckhhbmRsZXIpIHtcbiAgICAgICAgICAgIGVycm9ySGFuZGxlcihlcnIsIHJlcykoZGlzcGF0Y2gsIHN0YXRlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVqZWN0KHsgZXJyLCByZXMsIGRpc3BhdGNoLCBzdGF0ZSB9KVxuICAgIH1cbiAgICBsZXQganNvbiA9IHJlcy5ib2R5O1xuICAgIGlmKHR5cGVvZiByZWNlaXZlQWN0aW9uQ3JlYXRvciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBkaXNwYXRjaChyZWNlaXZlQWN0aW9uQ3JlYXRvcih7cmVzcG9uc2U6IGpzb259KSk7XG4gICAgICAgIHJldHVybiByZXNvbHZlKHtyZXNwb25zZToganNvbn0pO1xuICAgIH1cbiAgICBkaXNwYXRjaChyZWNlaXZlQWN0aW9uQ3JlYXRvcik7XG4gICAgcmV0dXJuIHJlc29sdmUoe3Jlc3BvbnNlOiBqc29ufSk7XG59XG5cblxuZXhwb3J0IGNvbnN0IGZldGNoRXJyb3JIYW5kbGVyID0gKHJlc3BvbnNlKSA9PiB7XG4gICAgbGV0IGNvZGUgPSByZXNwb25zZS5zdGF0dXM7XG4gICAgbGV0IG1zZyA9IHJlc3BvbnNlLnN0YXR1c1RleHQ7XG5cbiAgICBzd2l0Y2ggKGNvZGUpIHtcbiAgICAgICAgY2FzZSA0MDM6XG4gICAgICAgICAgICBTd2FsLmZpcmUoXCJFUlJPUlwiLCBULnRyYW5zbGF0ZShcImVycm9ycy51c2VyX25vdF9hdXRoelwiKSwgXCJ3YXJuaW5nXCIpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNDAxOlxuICAgICAgICAgICAgU3dhbC5maXJlKFwiRVJST1JcIiwgVC50cmFuc2xhdGUoXCJlcnJvcnMuc2Vzc2lvbl9leHBpcmVkXCIpLCBcImVycm9yXCIpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNDEyOlxuICAgICAgICAgICAgU3dhbC5maXJlKFwiRVJST1JcIiwgbXNnLCBcIndhcm5pbmdcIik7XG4gICAgICAgIGNhc2UgNTAwOlxuICAgICAgICAgICAgU3dhbC5maXJlKFwiRVJST1JcIiwgVC50cmFuc2xhdGUoXCJlcnJvcnMuc2VydmVyX2Vycm9yXCIpLCBcImVycm9yXCIpO1xuICAgIH1cbn1cblxuZXhwb3J0IGNvbnN0IGZldGNoUmVzcG9uc2VIYW5kbGVyID0gKHJlc3BvbnNlKSA9PiB7XG4gICAgaWYgKCFyZXNwb25zZS5vaykge1xuICAgICAgICB0aHJvdyByZXNwb25zZTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gcmVzcG9uc2UuanNvbigpO1xuICAgIH1cbn1cblxuZXhwb3J0IGNvbnN0IHNob3dNZXNzYWdlID0gKHNldHRpbmdzLCBjYWxsYmFjayA9IHt9KSA9PiAoZGlzcGF0Y2gpID0+IHtcbiAgICBkaXNwYXRjaChzdG9wTG9hZGluZygpKTtcblxuICAgIFN3YWwuZmlyZShzZXR0aW5ncykudGhlbigocmVzdWx0KSA9PiB7XG4gICAgICAgIGlmIChyZXN1bHQudmFsdWUgJiYgdHlwZW9mIGNhbGxiYWNrID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICB9XG4gICAgfSk7XG59XG5cbmV4cG9ydCBjb25zdCBzaG93U3VjY2Vzc01lc3NhZ2UgPSAoaHRtbCkgPT4gKGRpc3BhdGNoKSA9PiB7XG4gICAgZGlzcGF0Y2goc3RvcExvYWRpbmcoKSk7XG4gICAgU3dhbC5maXJlKHtcbiAgICAgICAgdGl0bGU6IFQudHJhbnNsYXRlKFwiZ2VuZXJhbC5kb25lXCIpLFxuICAgICAgICBodG1sOiBodG1sLFxuICAgICAgICB0eXBlOiAnc3VjY2VzcydcbiAgICB9KTtcbn1cblxuZXhwb3J0IGNvbnN0IGRvd25sb2FkRmlsZUJ5Q29udGVudCA9IChmaWxlbmFtZSwgY29udGVudCwgbWltZSkgPT4ge1xuICAgIGxldCBsaW5rID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xuICAgIGxpbmsudGV4dENvbnRlbnQgPSAnZG93bmxvYWQnO1xuICAgIGxpbmsuZG93bmxvYWQgPSBmaWxlbmFtZTtcbiAgICBsaW5rLmhyZWYgPSBgZGF0YToke21pbWV9LCR7ZW5jb2RlVVJJQ29tcG9uZW50KGNvbnRlbnQpfWBcbiAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGxpbmspOyAvLyBSZXF1aXJlZCBmb3IgRkZcbiAgICBsaW5rLmNsaWNrKCk7XG4gICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChsaW5rKTtcbn1cblxuZXhwb3J0IGNvbnN0IGdldENTViA9IChlbmRwb2ludCwgcGFyYW1zLCBmaWxlbmFtZSwgaGVhZGVyID0gbnVsbCkgPT4gKGRpc3BhdGNoKSA9PiB7XG5cbiAgICBsZXQgdXJsID0gVVJJKGVuZHBvaW50KTtcblxuICAgIGlmKCFpc09iamVjdEVtcHR5KHBhcmFtcykpXG4gICAgICAgIHVybCA9IHVybC5xdWVyeShwYXJhbXMpO1xuXG4gICAgZGlzcGF0Y2goc3RhcnRMb2FkaW5nKCkpO1xuXG4gICAgcmV0dXJuIGZldGNoKHVybC50b1N0cmluZygpKVxuICAgICAgICAudGhlbigocmVzcG9uc2UpID0+IHtcbiAgICAgICAgICAgIGlmICghcmVzcG9uc2Uub2spIHtcbiAgICAgICAgICAgICAgICB0aHJvdyByZXNwb25zZTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlLnRleHQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgICAgLnRoZW4oKGNzdikgPT4ge1xuICAgICAgICAgICAgZGlzcGF0Y2goc3RvcExvYWRpbmcoKSk7XG5cbiAgICAgICAgICAgIGlmIChoZWFkZXIpIHtcbiAgICAgICAgICAgICAgICBjc3YgPSBoZWFkZXIgKyAnXFxyXFxyJyArIGNzdjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRvd25sb2FkRmlsZUJ5Q29udGVudChmaWxlbmFtZSwgY3N2LCAndGV4dC9jc3Y7Y2hhcnNldD11dGYtOCcpO1xuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goZmV0Y2hFcnJvckhhbmRsZXIpO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFJhd0NTViA9IChlbmRwb2ludCwgcGFyYW1zLCBoZWFkZXIgPSBudWxsKSA9PiB7XG5cbiAgICBsZXQgdXJsID0gVVJJKGVuZHBvaW50KTtcblxuICAgIGlmKCFpc09iamVjdEVtcHR5KHBhcmFtcykpXG4gICAgICAgIHVybCA9IHVybC5xdWVyeShwYXJhbXMpO1xuXG4gICAgcmV0dXJuIGZldGNoKHVybC50b1N0cmluZygpKVxuICAgICAgICAudGhlbigocmVzcG9uc2UpID0+IHtcbiAgICAgICAgICAgIGlmICghcmVzcG9uc2Uub2spIHtcbiAgICAgICAgICAgICAgICB0aHJvdyByZXNwb25zZTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlLnRleHQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgICAgLnRoZW4oKGNzdikgPT4ge1xuICAgICAgICAgICAgaWYgKGhlYWRlcikge1xuICAgICAgICAgICAgICAgIGNzdiA9IGhlYWRlciArICdcXHJcXHInICsgY3N2O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIGNzdjtcbiAgICAgICAgfSlcbiAgICAgICAgLmNhdGNoKGZldGNoRXJyb3JIYW5kbGVyKTtcbn07XG5cbmV4cG9ydCBjb25zdCBlc2NhcGVGaWx0ZXJWYWx1ZSA9ICh2YWx1ZSkgPT4ge1xuICAgIHZhbHVlID0gdmFsdWUucmVwbGFjZSgvLC9nLCBcIlxcXFwsXCIpO1xuICAgIHZhbHVlID0gdmFsdWUucmVwbGFjZSgvOy9nLCBcIlxcXFw7XCIpO1xuICAgIHJldHVybiB2YWx1ZTtcbn07IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxOCBPcGVuU3RhY2sgRm91bmRhdGlvblxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICoqL1xuXG5pbXBvcnQgbW9tZW50IGZyb20gJ21vbWVudC10aW1lem9uZSc7XG5pbXBvcnQgVVJJIGZyb20gXCJ1cmlqc1wiO1xuaW1wb3J0IHsgY3JlYXRlSGFzaCB9IGZyb20gJ2NyeXB0bydcblxuZXhwb3J0IGNvbnN0IGZpbmRFbGVtZW50UG9zID0gKG9iaikgPT4ge1xuICAgIHZhciBjdXJ0b3AgPSAtNzA7XG4gICAgaWYgKG9iai5vZmZzZXRQYXJlbnQpIHtcbiAgICAgICAgZG8ge1xuICAgICAgICAgICAgY3VydG9wICs9IG9iai5vZmZzZXRUb3A7XG4gICAgICAgIH0gd2hpbGUgKG9iaiA9IG9iai5vZmZzZXRQYXJlbnQpO1xuICAgICAgICByZXR1cm4gW2N1cnRvcF07XG4gICAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGVwb2NoVG9Nb21lbnQgPSAoYXRpbWUpID0+IHtcbiAgICBpZighYXRpbWUpIHJldHVybiBhdGltZTtcbiAgICBhdGltZSA9IGF0aW1lICogMTAwMDtcbiAgICByZXR1cm4gbW9tZW50KGF0aW1lKTtcbn07XG5cbmV4cG9ydCBjb25zdCBlcG9jaFRvTW9tZW50VGltZVpvbmUgPSAoYXRpbWUsIHRpbWVfem9uZSkgPT4ge1xuICAgIGlmKCFhdGltZSkgcmV0dXJuIGF0aW1lO1xuICAgIGF0aW1lID0gYXRpbWUgKiAxMDAwO1xuICAgIHJldHVybiBtb21lbnQoYXRpbWUpLnR6KHRpbWVfem9uZSk7XG59O1xuXG5leHBvcnQgY29uc3QgZm9ybWF0RXBvY2ggPSAoYXRpbWUsIGZvcm1hdCA9ICdNL0QvWVlZWSBoOm1tIGEnKSA9PiB7XG4gICAgaWYoIWF0aW1lKSByZXR1cm4gYXRpbWU7XG4gICAgcmV0dXJuIGVwb2NoVG9Nb21lbnQoYXRpbWUpLmZvcm1hdChmb3JtYXQpO1xufTtcblxuZXhwb3J0IGNvbnN0IG9iamVjdFRvUXVlcnlTdHJpbmcgPSAob2JqKSA9PiB7XG4gICAgdmFyIHN0ciA9IFwiXCI7XG4gICAgZm9yICh2YXIga2V5IGluIG9iaikge1xuICAgICAgICBpZiAoc3RyICE9IFwiXCIpIHtcbiAgICAgICAgICAgIHN0ciArPSBcIiZcIjtcbiAgICAgICAgfVxuICAgICAgICBzdHIgKz0ga2V5ICsgXCI9XCIgKyBlbmNvZGVVUklDb21wb25lbnQob2JqW2tleV0pO1xuICAgIH1cblxuICAgIHJldHVybiBzdHI7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0QmFja1VSTCA9ICgpID0+IHtcbiAgICBsZXQgdXJsICAgICAgPSBVUkkod2luZG93LmxvY2F0aW9uLmhyZWYpO1xuICAgIGxldCBxdWVyeSAgICA9IHVybC5zZWFyY2godHJ1ZSk7XG4gICAgbGV0IGZyYWdtZW50ID0gdXJsLmZyYWdtZW50KCk7XG4gICAgbGV0IGJhY2tVcmwgID0gcXVlcnkuaGFzT3duUHJvcGVydHkoJ0JhY2tVcmwnKSA/IHF1ZXJ5WydCYWNrVXJsJ10gOiBudWxsO1xuICAgIGlmKGZyYWdtZW50ICE9IG51bGwgJiYgZnJhZ21lbnQgIT0gJycpe1xuICAgICAgICBiYWNrVXJsICs9IGAjJHtmcmFnbWVudH1gO1xuICAgIH1cbiAgICByZXR1cm4gYmFja1VybDtcbn07XG5cblxuZXhwb3J0IGNvbnN0IGdldEF1dGhDYWxsYmFjayA9ICgpID0+IHtcbiAgICBpZih0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICByZXR1cm4gYCR7d2luZG93LmxvY2F0aW9uLm9yaWdpbn0vYXV0aC9jYWxsYmFja2A7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEN1cnJlbnRMb2NhdGlvbiA9ICgpID0+IHtcbiAgICBsZXQgbG9jYXRpb24gPSAnJztcbiAgICBpZih0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICBsb2NhdGlvbiA9IHdpbmRvdy5sb2NhdGlvbjtcbiAgICAgICAgLy8gY2hlY2sgaWYgd2UgYXJlIG9uIGlmcmFtZVxuICAgICAgICBpZiAod2luZG93LnRvcClcbiAgICAgICAgICAgIGxvY2F0aW9uID0gd2luZG93LnRvcC5sb2NhdGlvbjtcbiAgICB9XG4gICAgcmV0dXJuIGxvY2F0aW9uO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldE9yaWdpbiA9ICgpID0+IHtcbiAgICBpZih0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICByZXR1cm4gd2luZG93LmxvY2F0aW9uLm9yaWdpbjtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0Q3VycmVudFBhdGhOYW1lID0gKCkgPT4ge1xuICAgIGlmKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgcmV0dXJuIHdpbmRvdy5sb2NhdGlvbi5wYXRobmFtZTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0Q3VycmVudEhyZWYgPSAoKSA9PiB7XG4gICAgaWYodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgcmV0dXJuIHdpbmRvdy5sb2NhdGlvbi5ocmVmO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRBbGxvd2VkVXNlckdyb3VwcyA9ICgpID0+IHtcbiAgICBpZih0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICByZXR1cm4gd2luZG93LkFMTE9XRURfVVNFUl9HUk9VUFMgfHwgJyc7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xufTtcblxuZXhwb3J0IGNvbnN0IGJ1aWxkQVBJQmFzZVVybCA9IChyZWxhdGl2ZVVybCkgPT4ge1xuICAgIGlmKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKXtcbiAgICAgICAgcmV0dXJuIGAke3dpbmRvdy5BUElfQkFTRV9VUkx9JHtyZWxhdGl2ZVVybH1gO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbGBgO1xufTtcblxuZXhwb3J0IGNvbnN0IHB1dE9uTG9jYWxTdG9yYWdlID0gKGtleSwgdmFsdWUpID0+IHtcbiAgICBpZih0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICB3aW5kb3cubG9jYWxTdG9yYWdlLnNldEl0ZW0oa2V5LCB2YWx1ZSk7XG4gICAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGdldEZyb21Mb2NhbFN0b3JhZ2UgPSAoa2V5LCByZW1vdmVJdCkgPT4ge1xuICAgIGlmKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIGxldCB2YWwgPSB3aW5kb3cubG9jYWxTdG9yYWdlLmdldEl0ZW0oa2V5KTtcbiAgICAgICAgaWYocmVtb3ZlSXQpe1xuICAgICAgICAgICAgY29uc29sZS5sb2coYGdldEZyb21Mb2NhbFN0b3JhZ2UgcmVtb3Zpbmcga2V5ICR7a2V5fWApO1xuICAgICAgICAgICAgcmVtb3ZlRnJvbUxvY2FsU3RvcmFnZShrZXkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YWw7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xufTtcblxuZXhwb3J0IGNvbnN0IHJlbW92ZUZyb21Mb2NhbFN0b3JhZ2UgPSAoa2V5KSA9PiB7XG4gICAgaWYodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgd2luZG93LmxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKGtleSk7XG4gICAgfVxufVxuXG5leHBvcnQgY29uc3QgaXNDbGVhcmluZ1Nlc3Npb25TdGF0ZSA9ICgpID0+IHtcbiAgICBpZih0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICByZXR1cm4gd2luZG93LmNsZWFyaW5nX3Nlc3Npb25fc3RhdGU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn07XG5cbmV4cG9ydCBjb25zdCBzZXRTZXNzaW9uQ2xlYXJpbmdTdGF0ZSA9ICh2YWwpID0+IHtcbiAgICBpZih0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICB3aW5kb3cuY2xlYXJpbmdfc2Vzc2lvbl9zdGF0ZSA9IHZhbDtcbiAgICB9XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0Q3VycmVudFVzZXJMYW5ndWFnZSA9ICgpID0+IHtcbiAgICBsZXQgbGFuZ3VhZ2UgPSAnZW4nO1xuICAgIGlmKHR5cGVvZiBuYXZpZ2F0b3IgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIGxhbmd1YWdlID0gKG5hdmlnYXRvci5sYW5ndWFnZXMgJiYgbmF2aWdhdG9yLmxhbmd1YWdlc1swXSkgfHwgbmF2aWdhdG9yLmxhbmd1YWdlIHx8IG5hdmlnYXRvci51c2VyTGFuZ3VhZ2U7XG4gICAgfVxuICAgIHJldHVybiBsYW5ndWFnZTtcbn07XG5cbmV4cG9ydCBjb25zdCBzY3JvbGxUb0Vycm9yID0gKGVycm9ycykgPT4ge1xuICAgIGlmKE9iamVjdC5rZXlzKGVycm9ycykubGVuZ3RoID4gMCkge1xuICAgICAgICBjb25zdCBmaXJzdEVycm9yID0gT2JqZWN0LmtleXMoZXJyb3JzKVswXTtcbiAgICAgICAgY29uc3QgZmlyc3ROb2RlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZmlyc3RFcnJvcik7XG4gICAgICAgIGlmIChmaXJzdE5vZGUpIHdpbmRvdy5zY3JvbGxUbygwLCBmaW5kRWxlbWVudFBvcyhmaXJzdE5vZGUpKTtcbiAgICB9XG59O1xuXG5leHBvcnQgY29uc3QgaGFzRXJyb3JzID0gKGZpZWxkLCBlcnJvcnMpID0+IHtcbiAgICBpZihmaWVsZCBpbiBlcnJvcnMpIHtcbiAgICAgICAgcmV0dXJuIGVycm9yc1tmaWVsZF07XG4gICAgfVxuICAgIHJldHVybiAnJztcbn07XG5cbmV4cG9ydCBjb25zdCBzaGFsbG93RXF1YWwgPSAob2JqZWN0MSwgb2JqZWN0MikgPT4ge1xuICAgIGNvbnN0IGtleXMxID0gT2JqZWN0LmtleXMob2JqZWN0MSk7XG4gICAgY29uc3Qga2V5czIgPSBPYmplY3Qua2V5cyhvYmplY3QyKTtcblxuICAgIGlmIChrZXlzMS5sZW5ndGggIT09IGtleXMyLmxlbmd0aCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgZm9yIChsZXQga2V5IG9mIGtleXMxKSB7XG4gICAgICAgIGlmIChvYmplY3QxW2tleV0gIT09IG9iamVjdDJba2V5XSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG59O1xuXG5leHBvcnQgY29uc3QgYXJyYXlzRXF1YWwgPSAoYTEsIGEyKSA9PlxuICAgIGExLmxlbmd0aCA9PT0gYTIubGVuZ3RoICYmIGExLmV2ZXJ5KChvLCBpZHgpID0+IHNoYWxsb3dFcXVhbChvLCBhMltpZHhdKSk7XG5cbmV4cG9ydCBjb25zdCBpc0VtcHR5ID0gKG9iaikgPT4ge1xuICAgIHJldHVybiBPYmplY3Qua2V5cyhvYmopLmxlbmd0aCA9PT0gMDtcbn07XG5cbmV4cG9ydCBjb25zdCBiYXNlNjRVUkxFbmNvZGUgPSAoc3RyKSA9PiB7XG4gICAgcmV0dXJuIHN0clxuICAgICAgICAudG9TdHJpbmcoJ2Jhc2U2NCcpXG4gICAgICAgIC5yZXBsYWNlKC9cXCsvZywgJy0nKVxuICAgICAgICAucmVwbGFjZSgvXFwvL2csICdfJylcbiAgICAgICAgLnJlcGxhY2UoLz0vZywgJycpXG59XG5cbmV4cG9ydCBjb25zdCBzaGEyNTYgPSAoYnVmZmVyKSA9PiB7XG4gICAgcmV0dXJuIGNyZWF0ZUhhc2goJ3NoYTI1NicpLnVwZGF0ZShidWZmZXIpLmRpZ2VzdCgpXG59XG5cbmV4cG9ydCBjb25zdCByZXRyeVByb21pc2UgPSBhc3luYyAoXG4gICAgY2IsXG4gICAgbWF4TnVtYmVyT2ZSZXRyaWVzID0gM1xuKSA9PiB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtYXhOdW1iZXJPZlJldHJpZXM7IGkrKykge1xuICAgICAgICBpZiAoYXdhaXQgY2IoKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG59XG4iLCIvKipcbiAqIENvcHlyaWdodCAyMDE4IE9wZW5TdGFjayBGb3VuZGF0aW9uXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiovXG5cbmltcG9ydCB7ZmV0Y2hFcnJvckhhbmRsZXIsIGZldGNoUmVzcG9uc2VIYW5kbGVyLCBlc2NhcGVGaWx0ZXJWYWx1ZSB9IGZyb20gXCIuL2FjdGlvbnNcIjtcbmltcG9ydCB7Z2V0QWNjZXNzVG9rZW59IGZyb20gJy4uL2NvbXBvbmVudHMvc2VjdXJpdHkvbWV0aG9kcyc7XG5pbXBvcnQge2J1aWxkQVBJQmFzZVVybH0gZnJvbSBcIi4vbWV0aG9kc1wiO1xuaW1wb3J0IFVSSSBmcm9tIFwidXJpanNcIjtcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5leHBvcnQgY29uc3QgUkVDRUlWRV9DT1VOVFJJRVMgID0gJ1JFQ0VJVkVfQ09VTlRSSUVTJztcbmNvbnN0IGNhbGxEZWxheSA9IDUwMDsgLy9taWxpc2Vjb25kc1xuXG5leHBvcnQgY29uc3QgcXVlcnlNZW1iZXJzID0gXy5kZWJvdW5jZShhc3luYyAoaW5wdXQsIGNhbGxiYWNrKSA9PiB7XG5cbiAgICBjb25zdCBhY2Nlc3NUb2tlbiA9IGF3YWl0IGdldEFjY2Vzc1Rva2VuKCk7XG4gICAgaW5wdXQgPSBlc2NhcGVGaWx0ZXJWYWx1ZShpbnB1dCk7XG4gICAgbGV0IGZpbHRlcnMgPSBlbmNvZGVVUklDb21wb25lbnQoYGZ1bGxfbmFtZT1AJHtpbnB1dH0sZmlyc3RfbmFtZT1AJHtpbnB1dH0sbGFzdF9uYW1lPUAke2lucHV0fSxlbWFpbD1AJHtpbnB1dH1gKTtcbiAgICBsZXQgZXhwYW5kID0gYHRpY2tldHMscnN2cCxzY2hlZHVsZV9zdW1taXRfZXZlbnRzLGFsbF9hZmZpbGlhdGlvbnNgXG5cbiAgICBmZXRjaChidWlsZEFQSUJhc2VVcmwoYC9hcGkvdjEvbWVtYmVycz9maWx0ZXI9JHtmaWx0ZXJzfSZleHBhbmQ9JHtleHBhbmR9JmFjY2Vzc190b2tlbj0ke2FjY2Vzc1Rva2VufWApKVxuICAgICAgICAudGhlbihmZXRjaFJlc3BvbnNlSGFuZGxlcilcbiAgICAgICAgLnRoZW4oKGpzb24pID0+IHtcbiAgICAgICAgICAgIGxldCBvcHRpb25zID0gWy4uLmpzb24uZGF0YV07XG5cbiAgICAgICAgICAgIGNhbGxiYWNrKG9wdGlvbnMpO1xuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goZmV0Y2hFcnJvckhhbmRsZXIpO1xufSwgY2FsbERlbGF5KTtcblxuZXhwb3J0IGNvbnN0IHF1ZXJ5U3VtbWl0cyA9IF8uZGVib3VuY2UoYXN5bmMgKGlucHV0LCBjYWxsYmFjaykgPT4ge1xuXG4gICAgY29uc3QgYWNjZXNzVG9rZW4gPSBhd2FpdCBnZXRBY2Nlc3NUb2tlbigpO1xuICAgIGlucHV0ID0gZXNjYXBlRmlsdGVyVmFsdWUoaW5wdXQpO1xuICAgIGxldCBmaWx0ZXJzID0gZW5jb2RlVVJJQ29tcG9uZW50KGBuYW1lPUAke2lucHV0fWApO1xuXG4gICAgZmV0Y2goYnVpbGRBUElCYXNlVXJsKGAvYXBpL3YxL3N1bW1pdHMvYWxsP2ZpbHRlcj0ke2ZpbHRlcnN9JmFjY2Vzc190b2tlbj0ke2FjY2Vzc1Rva2VufWApKVxuICAgICAgICAudGhlbihmZXRjaFJlc3BvbnNlSGFuZGxlcilcbiAgICAgICAgLnRoZW4oKGpzb24pID0+IHtcbiAgICAgICAgICAgIGxldCBvcHRpb25zID0gWy4uLmpzb24uZGF0YV07XG5cbiAgICAgICAgICAgIGNhbGxiYWNrKG9wdGlvbnMpO1xuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goZmV0Y2hFcnJvckhhbmRsZXIpO1xufSwgY2FsbERlbGF5KTtcblxuZXhwb3J0IGNvbnN0IHF1ZXJ5U3BlYWtlcnMgPSBfLmRlYm91bmNlKGFzeW5jIChzdW1taXRJZCwgaW5wdXQsIGNhbGxiYWNrKSA9PiB7XG5cbiAgICBjb25zdCBhY2Nlc3NUb2tlbiA9IGF3YWl0IGdldEFjY2Vzc1Rva2VuKCk7XG4gICAgaW5wdXQgPSBlc2NhcGVGaWx0ZXJWYWx1ZShpbnB1dCk7XG4gICAgbGV0IGZpbHRlcnMgPSBlbmNvZGVVUklDb21wb25lbnQoYGZ1bGxfbmFtZT1AJHtpbnB1dH0sZmlyc3RfbmFtZT1AJHtpbnB1dH0sbGFzdF9uYW1lPUAke2lucHV0fSxlbWFpbD1AJHtpbnB1dH1gKTtcbiAgICBsZXQgYXBpVXJsID0gYC9hcGkvdjFgO1xuXG4gICAgaWYgKHN1bW1pdElkKSB7XG4gICAgICAgIGFwaVVybCArPSBgL3N1bW1pdHMvJHtzdW1taXRJZH1gO1xuICAgIH1cblxuICAgIGFwaVVybCArPSBgL3NwZWFrZXJzP2ZpbHRlcj0ke2ZpbHRlcnN9JmFjY2Vzc190b2tlbj0ke2FjY2Vzc1Rva2VufSZleHBhbmQ9bWVtYmVyLHJlZ2lzdHJhdGlvbl9yZXF1ZXN0YDtcblxuICAgIGZldGNoKGJ1aWxkQVBJQmFzZVVybChhcGlVcmwpKVxuICAgICAgICAudGhlbihmZXRjaFJlc3BvbnNlSGFuZGxlcilcbiAgICAgICAgLnRoZW4oKGpzb24pID0+IHtcbiAgICAgICAgICAgIGxldCBvcHRpb25zID0gWy4uLmpzb24uZGF0YV07XG5cbiAgICAgICAgICAgIGNhbGxiYWNrKG9wdGlvbnMpO1xuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goZmV0Y2hFcnJvckhhbmRsZXIpO1xufSwgY2FsbERlbGF5KTtcblxuZXhwb3J0IGNvbnN0IHF1ZXJ5VGFncyA9IF8uZGVib3VuY2UoYXN5bmMgKHN1bW1pdElkLCBpbnB1dCwgY2FsbGJhY2spID0+IHtcblxuICAgIGNvbnN0IGFjY2Vzc1Rva2VuID0gYXdhaXQgZ2V0QWNjZXNzVG9rZW4oKTtcbiAgICBpbnB1dCA9IGVzY2FwZUZpbHRlclZhbHVlKGlucHV0KTtcbiAgICBsZXQgYXBpVXJsID0gYC9hcGkvdjFgO1xuICAgIGxldCBmaWx0ZXIgPSBlbmNvZGVVUklDb21wb25lbnQoYHRhZz1AJHtpbnB1dH1gKTtcblxuICAgIGlmIChzdW1taXRJZCkge1xuICAgICAgICBhcGlVcmwgKz0gYC9zdW1taXRzLyR7c3VtbWl0SWR9L3RyYWNrLXRhZy1ncm91cHMvYWxsL2FsbG93ZWQtdGFncz9maWx0ZXI9JHtmaWx0ZXJ9JmV4cGFuZD10YWcsdHJhY2tfdGFnX2dyb3VwYDtcbiAgICB9IGVsc2Uge1xuICAgICAgICBhcGlVcmwgKz0gYC90YWdzP2ZpbHRlcj0ke2ZpbHRlcn1gO1xuICAgIH1cblxuICAgIGFwaVVybCArPSBgJm9yZGVyPXRhZyZwYWdlPTEmcGVyX3BhZ2U9NTAmYWNjZXNzX3Rva2VuPSR7YWNjZXNzVG9rZW59YDtcblxuICAgIGZldGNoKGJ1aWxkQVBJQmFzZVVybChhcGlVcmwpKVxuICAgICAgICAudGhlbihmZXRjaFJlc3BvbnNlSGFuZGxlcilcbiAgICAgICAgLnRoZW4oKGpzb24pID0+IHtcbiAgICAgICAgICAgIGxldCBvcHRpb25zID0gWy4uLmpzb24uZGF0YV07XG5cbiAgICAgICAgICAgIGlmIChzdW1taXRJZCkge1xuICAgICAgICAgICAgICAgIG9wdGlvbnMgPSBvcHRpb25zLm1hcCh0ID0+IHQudGFnKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY2FsbGJhY2sob3B0aW9ucyk7XG4gICAgICAgIH0pXG4gICAgICAgIC5jYXRjaChmZXRjaEVycm9ySGFuZGxlcik7XG59LCBjYWxsRGVsYXkpO1xuXG5leHBvcnQgY29uc3QgcXVlcnlUcmFja3MgPSBfLmRlYm91bmNlKGFzeW5jIChzdW1taXRJZCwgaW5wdXQsIGNhbGxiYWNrKSA9PiB7XG5cbiAgICBjb25zdCBhY2Nlc3NUb2tlbiA9IGF3YWl0IGdldEFjY2Vzc1Rva2VuKCk7XG4gICAgaW5wdXQgPSBlc2NhcGVGaWx0ZXJWYWx1ZShpbnB1dCk7XG4gICAgbGV0IGZpbHRlciA9IGVuY29kZVVSSUNvbXBvbmVudChgbmFtZT1AJHtpbnB1dH1gKTtcblxuICAgIGZldGNoKGJ1aWxkQVBJQmFzZVVybChgL2FwaS92MS9zdW1taXRzLyR7c3VtbWl0SWR9L3RyYWNrcz9maWx0ZXI9JHtmaWx0ZXJ9Jm9yZGVyPW5hbWUmYWNjZXNzX3Rva2VuPSR7YWNjZXNzVG9rZW59YCkpXG4gICAgICAgIC50aGVuKGZldGNoUmVzcG9uc2VIYW5kbGVyKVxuICAgICAgICAudGhlbigoanNvbikgPT4ge1xuICAgICAgICAgICAgbGV0IG9wdGlvbnMgPSBbLi4uanNvbi5kYXRhXTtcblxuICAgICAgICAgICAgY2FsbGJhY2sob3B0aW9ucyk7XG4gICAgICAgIH0pXG4gICAgICAgIC5jYXRjaChmZXRjaEVycm9ySGFuZGxlcik7XG59LCBjYWxsRGVsYXkpO1xuXG5leHBvcnQgY29uc3QgcXVlcnlUcmFja0dyb3VwcyA9IF8uZGVib3VuY2UoYXN5bmMgKHN1bW1pdElkLCBpbnB1dCwgY2FsbGJhY2spID0+IHtcblxuICAgIGNvbnN0IGFjY2Vzc1Rva2VuID0gYXdhaXQgZ2V0QWNjZXNzVG9rZW4oKTtcbiAgICBpbnB1dCA9IGVzY2FwZUZpbHRlclZhbHVlKGlucHV0KTtcbiAgICBsZXQgZmlsdGVyID0gaW5wdXQgPyBlbmNvZGVVUklDb21wb25lbnQoYGZpbHRlcj1uYW1lPUAke2lucHV0fWApIDogJyc7XG5cbiAgICBmZXRjaChidWlsZEFQSUJhc2VVcmwoYC9hcGkvdjEvc3VtbWl0cy8ke3N1bW1pdElkfS90cmFjay1ncm91cHM/b3JkZXI9bmFtZSZhY2Nlc3NfdG9rZW49JHthY2Nlc3NUb2tlbn0mJHtmaWx0ZXJ9YCkpXG4gICAgICAgIC50aGVuKGZldGNoUmVzcG9uc2VIYW5kbGVyKVxuICAgICAgICAudGhlbigoanNvbikgPT4ge1xuICAgICAgICAgICAgbGV0IG9wdGlvbnMgPSBbLi4uanNvbi5kYXRhXTtcblxuICAgICAgICAgICAgY2FsbGJhY2sob3B0aW9ucyk7XG4gICAgICAgIH0pXG4gICAgICAgIC5jYXRjaChmZXRjaEVycm9ySGFuZGxlcik7XG59LCBjYWxsRGVsYXkpO1xuXG5leHBvcnQgY29uc3QgcXVlcnlFdmVudHMgPSBfLmRlYm91bmNlKGFzeW5jIChzdW1taXRJZCwgaW5wdXQsIG9ubHlQdWJsaXNoZWQgPSBmYWxzZSwgY2FsbGJhY2spID0+IHtcblxuICAgIGNvbnN0IGFjY2Vzc1Rva2VuID0gYXdhaXQgZ2V0QWNjZXNzVG9rZW4oKTtcbiAgICBpbnB1dCA9IGVzY2FwZUZpbHRlclZhbHVlKGlucHV0KTtcbiAgICBsZXQgYmFzZVVybCA9IGAvYXBpL3YxL3N1bW1pdHMvJHtzdW1taXRJZH0vZXZlbnRzYCArIChvbmx5UHVibGlzaGVkID8gJy9wdWJsaXNoZWQnIDogJycpO1xuICAgIGxldCBmaWx0ZXIgPSBlbmNvZGVVUklDb21wb25lbnQoYHRpdGxlPUAke2lucHV0fWApO1xuXG4gICAgZmV0Y2goYnVpbGRBUElCYXNlVXJsKGAke2Jhc2VVcmx9P2ZpbHRlcj0ke2ZpbHRlcn0mb3JkZXI9dGl0bGUmYWNjZXNzX3Rva2VuPSR7YWNjZXNzVG9rZW59YCkpXG4gICAgICAgIC50aGVuKGZldGNoUmVzcG9uc2VIYW5kbGVyKVxuICAgICAgICAudGhlbigoanNvbikgPT4ge1xuICAgICAgICAgICAgbGV0IG9wdGlvbnMgPSBbLi4uanNvbi5kYXRhXTtcblxuICAgICAgICAgICAgY2FsbGJhY2sob3B0aW9ucyk7XG4gICAgICAgIH0pXG4gICAgICAgIC5jYXRjaChmZXRjaEVycm9ySGFuZGxlcik7XG59LCBjYWxsRGVsYXkpO1xuXG5leHBvcnQgY29uc3QgcXVlcnlHcm91cHMgPSBfLmRlYm91bmNlKGFzeW5jIChpbnB1dCwgY2FsbGJhY2spID0+IHtcblxuICAgIGNvbnN0IGFjY2Vzc1Rva2VuID0gYXdhaXQgZ2V0QWNjZXNzVG9rZW4oKTtcbiAgICBsZXQgZmlsdGVycyA9IGVuY29kZVVSSUNvbXBvbmVudChgdGl0bGU9QCR7aW5wdXR9LGNvZGU9QCR7aW5wdXR9YCk7XG5cbiAgICBmZXRjaChidWlsZEFQSUJhc2VVcmwoYC9hcGkvdjEvZ3JvdXBzP2ZpbHRlcj0ke2ZpbHRlcnN9JmFjY2Vzc190b2tlbj0ke2FjY2Vzc1Rva2VufWApKVxuICAgICAgICAudGhlbihmZXRjaFJlc3BvbnNlSGFuZGxlcilcbiAgICAgICAgLnRoZW4oKGpzb24pID0+IHtcbiAgICAgICAgICAgIGxldCBvcHRpb25zID0gWy4uLmpzb24uZGF0YV07XG5cbiAgICAgICAgICAgIGNhbGxiYWNrKG9wdGlvbnMpO1xuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goZmV0Y2hFcnJvckhhbmRsZXIpO1xufSwgY2FsbERlbGF5KTtcblxuZXhwb3J0IGNvbnN0IHF1ZXJ5Q29tcGFuaWVzID0gXy5kZWJvdW5jZShhc3luYyAoaW5wdXQsIGNhbGxiYWNrKSA9PiB7XG5cbiAgICBjb25zdCBhY2Nlc3NUb2tlbiA9IGF3YWl0IGdldEFjY2Vzc1Rva2VuKCk7XG4gICAgaW5wdXQgPSBlc2NhcGVGaWx0ZXJWYWx1ZShpbnB1dCk7XG4gICAgbGV0IGZpbHRlcnMgPSBlbmNvZGVVUklDb21wb25lbnQoYG5hbWU9QCR7aW5wdXR9YCk7XG5cbiAgICBmZXRjaChidWlsZEFQSUJhc2VVcmwoYC9hcGkvdjEvY29tcGFuaWVzP2ZpbHRlcj0ke2ZpbHRlcnN9JmFjY2Vzc190b2tlbj0ke2FjY2Vzc1Rva2VufWApKVxuICAgICAgICAudGhlbihmZXRjaFJlc3BvbnNlSGFuZGxlcilcbiAgICAgICAgLnRoZW4oKGpzb24pID0+IHtcbiAgICAgICAgICAgIGxldCBvcHRpb25zID0gWy4uLmpzb24uZGF0YV07XG5cbiAgICAgICAgICAgIGNhbGxiYWNrKG9wdGlvbnMpO1xuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goZmV0Y2hFcnJvckhhbmRsZXIpO1xufSwgY2FsbERlbGF5KTtcblxuZXhwb3J0IGNvbnN0IHF1ZXJ5UmVnaXN0cmF0aW9uQ29tcGFuaWVzID0gXy5kZWJvdW5jZShhc3luYyAoc3VtbWl0SWQsIGlucHV0LCBjYWxsYmFjaykgPT4ge1xuICAgIFxuICAgIGxldCBhY2Nlc3NUb2tlbjtcblxuICAgIHRyeSB7XG4gICAgICAgIGFjY2Vzc1Rva2VuID0gYXdhaXQgZ2V0QWNjZXNzVG9rZW4oKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGNhbGxiYWNrKGUpO1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbGV0IGFwaVVybCA9IFVSSShgL2FwaS92MS9zdW1taXRzLyR7c3VtbWl0SWR9L3JlZ2lzdHJhdGlvbi1jb21wYW5pZXNgKTtcbiAgICBhcGlVcmwuYWRkUXVlcnkoJ2FjY2Vzc190b2tlbicsIGFjY2Vzc1Rva2VuKTtcbiAgICBhcGlVcmwuYWRkUXVlcnkoJ29yZGVyJywnbmFtZScpXG5cbiAgICBpZihpbnB1dCkge1xuICAgICAgICBpbnB1dCA9IGVzY2FwZUZpbHRlclZhbHVlKGlucHV0KTtcbiAgICAgICAgYXBpVXJsLmFkZFF1ZXJ5KCdmaWx0ZXJbXScsIGBuYW1lPUAke2lucHV0fWApO1xuICAgIH1cblxuICAgIGZldGNoKGJ1aWxkQVBJQmFzZVVybChhcGlVcmwudG9TdHJpbmcoKSkpXG4gICAgICAgIC50aGVuKGZldGNoUmVzcG9uc2VIYW5kbGVyKVxuICAgICAgICAudGhlbigoanNvbikgPT4ge1xuICAgICAgICAgICAgbGV0IG9wdGlvbnMgPSBbLi4uanNvbi5kYXRhXTtcblxuICAgICAgICAgICAgY2FsbGJhY2sob3B0aW9ucyk7XG4gICAgICAgIH0pXG4gICAgICAgIC5jYXRjaChmZXRjaEVycm9ySGFuZGxlcik7XG59LCBjYWxsRGVsYXkpO1xuXG5leHBvcnQgY29uc3QgcXVlcnlTcG9uc29ycyA9IF8uZGVib3VuY2UoYXN5bmMgKHN1bW1pdElkLCBpbnB1dCwgY2FsbGJhY2spID0+IHtcblxuICAgIGNvbnN0IGFjY2Vzc1Rva2VuID0gYXdhaXQgZ2V0QWNjZXNzVG9rZW4oKTtcbiAgICBpbnB1dCA9IGVzY2FwZUZpbHRlclZhbHVlKGlucHV0KTtcbiAgICBsZXQgZmlsdGVycyA9IGVuY29kZVVSSUNvbXBvbmVudChgY29tcGFueV9uYW1lPUAke2lucHV0fWApO1xuXG4gICAgZmV0Y2goYnVpbGRBUElCYXNlVXJsKGAvYXBpL3YxL3N1bW1pdHMvJHtzdW1taXRJZH0vc3BvbnNvcnM/ZmlsdGVyPSR7ZmlsdGVyc30mZXhwYW5kPWNvbXBhbnksc3BvbnNvcnNoaXAmYWNjZXNzX3Rva2VuPSR7YWNjZXNzVG9rZW59YCkpXG4gICAgICAgIC50aGVuKGZldGNoUmVzcG9uc2VIYW5kbGVyKVxuICAgICAgICAudGhlbigoanNvbikgPT4ge1xuICAgICAgICAgICAgbGV0IG9wdGlvbnMgPSBbLi4uanNvbi5kYXRhXTtcblxuICAgICAgICAgICAgY2FsbGJhY2sob3B0aW9ucyk7XG4gICAgICAgIH0pXG4gICAgICAgIC5jYXRjaChmZXRjaEVycm9ySGFuZGxlcik7XG59LCBjYWxsRGVsYXkpO1xuXG5leHBvcnQgY29uc3QgcXVlcnlBY2Nlc3NMZXZlbHMgPSBfLmRlYm91bmNlKChzdW1taXRJZCwgaW5wdXQsIGNhbGxiYWNrKSA9PiB7XG5cbiAgICBsZXQgYWNjZXNzVG9rZW4gPSBnZXRBY2Nlc3NUb2tlbigpO1xuICAgIGlucHV0ID0gZXNjYXBlRmlsdGVyVmFsdWUoaW5wdXQpO1xuICAgIGxldCBmaWx0ZXJzID0gZW5jb2RlVVJJQ29tcG9uZW50KGBuYW1lPUAke2lucHV0fWApO1xuXG4gICAgZmV0Y2goYnVpbGRBUElCYXNlVXJsKGAvYXBpL3YxL3N1bW1pdHMvJHtzdW1taXRJZH0vYWNjZXNzLWxldmVsLXR5cGVzP2ZpbHRlcj0ke2ZpbHRlcnN9JiZhY2Nlc3NfdG9rZW49JHthY2Nlc3NUb2tlbn1gKSlcbiAgICAgICAgLnRoZW4oZmV0Y2hSZXNwb25zZUhhbmRsZXIpXG4gICAgICAgIC50aGVuKChqc29uKSA9PiB7XG4gICAgICAgICAgICBsZXQgb3B0aW9ucyA9IFsuLi5qc29uLmRhdGFdO1xuXG4gICAgICAgICAgICBjYWxsYmFjayhvcHRpb25zKTtcbiAgICAgICAgfSlcbiAgICAgICAgLmNhdGNoKGZldGNoRXJyb3JIYW5kbGVyKTtcbn0sIGNhbGxEZWxheSk7XG5cbmV4cG9ydCBjb25zdCBxdWVyeU9yZ2FuaXphdGlvbnMgPSBfLmRlYm91bmNlKGFzeW5jIChpbnB1dCwgY2FsbGJhY2spID0+IHtcblxuICAgIGNvbnN0IGFjY2Vzc1Rva2VuID0gYXdhaXQgZ2V0QWNjZXNzVG9rZW4oKTtcbiAgICBpbnB1dCA9IGVzY2FwZUZpbHRlclZhbHVlKGlucHV0KTtcbiAgICBsZXQgZmlsdGVycyA9IGVuY29kZVVSSUNvbXBvbmVudChgbmFtZT1AJHtpbnB1dH1gKTtcblxuICAgIGZldGNoKGJ1aWxkQVBJQmFzZVVybChgL2FwaS92MS9vcmdhbml6YXRpb25zP2ZpbHRlcj0ke2ZpbHRlcnN9JmFjY2Vzc190b2tlbj0ke2FjY2Vzc1Rva2VufWApKVxuICAgICAgICAudGhlbihmZXRjaFJlc3BvbnNlSGFuZGxlcilcbiAgICAgICAgLnRoZW4oKGpzb24pID0+IHtcbiAgICAgICAgICAgIGxldCBvcHRpb25zID0gWy4uLmpzb24uZGF0YV07XG5cbiAgICAgICAgICAgIGNhbGxiYWNrKG9wdGlvbnMpO1xuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goZmV0Y2hFcnJvckhhbmRsZXIpO1xufSwgY2FsbERlbGF5KTtcblxuZXhwb3J0IGNvbnN0IGdldExhbmd1YWdlTGlzdCA9IChjYWxsYmFjaywgc2lnbmFsKSA9PiB7XG4gICAgcmV0dXJuIGZldGNoKGJ1aWxkQVBJQmFzZVVybChgL2FwaS9wdWJsaWMvdjEvbGFuZ3VhZ2VzYCksIHtzaWduYWx9KVxuICAgICAgICAudGhlbihmZXRjaFJlc3BvbnNlSGFuZGxlcilcbiAgICAgICAgLnRoZW4oKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgICBjYWxsYmFjayhyZXNwb25zZS5kYXRhKTtcbiAgICAgICAgfSlcbiAgICAgICAgLmNhdGNoKGZldGNoRXJyb3JIYW5kbGVyKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRDb3VudHJ5TGlzdCA9IChjYWxsYmFjaywgc2lnbmFsKSA9PiB7XG5cbiAgICByZXR1cm4gZmV0Y2goYnVpbGRBUElCYXNlVXJsKGAvYXBpL3B1YmxpYy92MS9jb3VudHJpZXNgKSwge3NpZ25hbH0pXG4gICAgICAgIC50aGVuKGZldGNoUmVzcG9uc2VIYW5kbGVyKVxuICAgICAgICAudGhlbigocmVzcG9uc2UpID0+IHtcbiAgICAgICAgICAgIGNhbGxiYWNrKHJlc3BvbnNlLmRhdGEpO1xuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goZmV0Y2hFcnJvckhhbmRsZXIpO1xufTtcblxudmFyIGdlb2NvZGVyO1xuXG5leHBvcnQgY29uc3QgZ2VvQ29kZUFkZHJlc3MgPSAoYWRkcmVzcykgPT4ge1xuXG4gICAgaWYgKCFnZW9jb2RlcikgZ2VvY29kZXIgPSBuZXcgZ29vZ2xlLm1hcHMuR2VvY29kZXIoKTtcblxuICAgIC8vIHJldHVybiBhIFByb21pc2VcbiAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSxyZWplY3QpIHtcbiAgICAgICAgZ2VvY29kZXIuZ2VvY29kZSggeyAnYWRkcmVzcyc6IGFkZHJlc3N9LCBmdW5jdGlvbihyZXN1bHRzLCBzdGF0dXMpIHtcbiAgICAgICAgICAgIGlmIChzdGF0dXMgPT0gZ29vZ2xlLm1hcHMuR2VvY29kZXJTdGF0dXMuT0spIHtcbiAgICAgICAgICAgICAgICAvLyByZXNvbHZlIHJlc3VsdHMgdXBvbiBhIHN1Y2Nlc3NmdWwgc3RhdHVzXG4gICAgICAgICAgICAgICAgcmVzb2x2ZShyZXN1bHRzKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gcmVqZWN0IHN0YXR1cyB1cG9uIHVuLXN1Y2Nlc3NmdWwgc3RhdHVzXG4gICAgICAgICAgICAgICAgcmVqZWN0KHN0YXR1cyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGdlb0NvZGVMYXRMbmcgPSAobGF0LCBsbmcpID0+IHtcblxuICAgIGlmICghZ2VvY29kZXIpIGdlb2NvZGVyID0gbmV3IGdvb2dsZS5tYXBzLkdlb2NvZGVyKCk7XG5cbiAgICB2YXIgbGF0bG5nID0ge2xhdDogcGFyc2VGbG9hdChsYXQpLCBsbmc6IHBhcnNlRmxvYXQobG5nKX07XG4gICAgLy8gcmV0dXJuIGEgUHJvbWlzZVxuICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLHJlamVjdCkge1xuICAgICAgICBnZW9jb2Rlci5nZW9jb2RlKCB7ICdsb2NhdGlvbic6IGxhdGxuZ30sIGZ1bmN0aW9uKHJlc3VsdHMsIHN0YXR1cykge1xuICAgICAgICAgICAgaWYgKHN0YXR1cyA9PSBnb29nbGUubWFwcy5HZW9jb2RlclN0YXR1cy5PSykge1xuICAgICAgICAgICAgICAgIC8vIHJlc29sdmUgcmVzdWx0cyB1cG9uIGEgc3VjY2Vzc2Z1bCBzdGF0dXNcbiAgICAgICAgICAgICAgICByZXNvbHZlKHJlc3VsdHMpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyByZWplY3Qgc3RhdHVzIHVwb24gdW4tc3VjY2Vzc2Z1bCBzdGF0dXNcbiAgICAgICAgICAgICAgICByZWplY3Qoc3RhdHVzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgcXVlcnlUaWNrZXRUeXBlcyA9IF8uZGVib3VuY2UoKHN1bW1pdElkLCBpbnB1dCwgY2FsbGJhY2spID0+IHtcblxuICAgIGxldCBhY2Nlc3NUb2tlbiA9IGdldEFjY2Vzc1Rva2VuKCk7XG4gICAgaW5wdXQgPSBlc2NhcGVGaWx0ZXJWYWx1ZShpbnB1dCk7XG4gICAgbGV0IGZpbHRlcnMgPSBlbmNvZGVVUklDb21wb25lbnQoYG5hbWU9QCR7aW5wdXR9YCk7XG5cbiAgICBmZXRjaChidWlsZEFQSUJhc2VVcmwoYC9hcGkvdjEvc3VtbWl0cy8ke3N1bW1pdElkfS90aWNrZXQtdHlwZXM/ZmlsdGVyPSR7ZmlsdGVyc30mJmFjY2Vzc190b2tlbj0ke2FjY2Vzc1Rva2VufWApKVxuICAgICAgICAudGhlbihmZXRjaFJlc3BvbnNlSGFuZGxlcilcbiAgICAgICAgLnRoZW4oKGpzb24pID0+IHtcbiAgICAgICAgICAgIGxldCBvcHRpb25zID0gWy4uLmpzb24uZGF0YV07XG5cbiAgICAgICAgICAgIGNhbGxiYWNrKG9wdGlvbnMpO1xuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goZmV0Y2hFcnJvckhhbmRsZXIpO1xufSwgY2FsbERlbGF5KTtcblxuXG4iLCJleHBvcnQgY29uc3QgQ2hlY2tCb3hRdWVzdGlvblR5cGUgPSAnQ2hlY2tCb3gnO1xuZXhwb3J0IGNvbnN0IENvbWJvQm94UXVlc3Rpb25UeXBlID0gJ0NvbWJvQm94J1xuZXhwb3J0IGNvbnN0IENoZWNrQm94TGlzdFF1ZXN0aW9uVHlwZSA9ICdDaGVja0JveExpc3QnO1xuZXhwb3J0IGNvbnN0IFJhZGlvQnV0dG9uTGlzdFF1ZXN0aW9uVHlwZSA9ICdSYWRpb0J1dHRvbkxpc3QnO1xuZXhwb3J0IGNvbnN0IEFsbG93ZWRNdWx0aXBsZVZhbHVlUXVlc3Rpb25UeXBlID0gW0NvbWJvQm94UXVlc3Rpb25UeXBlLCBDaGVja0JveExpc3RRdWVzdGlvblR5cGUsIFJhZGlvQnV0dG9uTGlzdFF1ZXN0aW9uVHlwZV07XG5leHBvcnQgY29uc3QgQW5zd2VyVmFsdWVzT3BlcmF0b3JfQW5kID0gJ0FuZCc7XG5leHBvcnQgY29uc3QgQW5zd2VyVmFsdWVzT3BlcmF0b3JfT3IgPSAnT3InO1xuZXhwb3J0IGNvbnN0IFZpc2liaWxpdHlDb25kaXRpb25fRXF1YWwgPSAnRXF1YWwnO1xuZXhwb3J0IGNvbnN0IFZpc2liaWxpdHlDb25kaXRpb25fTm90RXF1YWwgPSAnTm90RXF1YWwnO1xuZXhwb3J0IGNvbnN0IFZpc2liaWxpdHlfVmlzaWJsZSA9ICdWaXNpYmxlJztcbmV4cG9ydCBjb25zdCBNYWluUXVlc3Rpb25DbGFzc1R5cGUgPSAnTWFpblF1ZXN0aW9uJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUXVlc3Rpb25zU2V0IHtcblxuICAgIGNvbnN0cnVjdG9yKHF1ZXN0aW9ucywgYW5zd2VycyA9IFtdKSB7XG4gICAgICAgIHRoaXMucXVlc3Rpb25zID0gcXVlc3Rpb25zO1xuICAgICAgICB0aGlzLm9yaWdpbmFsQW5zd2VycyA9IGFuc3dlcnNcbiAgICAgICAgdGhpcy5hbnN3ZXJzID0gW107XG4gICAgICAgIC8vIG1hcCBhbnN3ZXJzIHRvIGFzc29jaWF0ZSBhcnJheVxuICAgICAgICBmb3IgKGxldCBhIG9mIHRoaXMub3JpZ2luYWxBbnN3ZXJzKVxuICAgICAgICAgICAgdGhpcy5hbnN3ZXJzW2EucXVlc3Rpb25faWRdID0gYTtcbiAgICAgICAgdGhpcy5xdWVzdGlvbkJ5TmFtZSA9IHt9XG4gICAgICAgIHRoaXMucXVlc3Rpb25CeUlkID0ge31cbiAgICAgICAgLy8gYXNzb2NpYXRpdmUgYXJyYXkgKCBydWxlIGlkICwgcnVsZSk7XG4gICAgICAgIHRoaXMucnVsZXMgPSB7fTtcbiAgICAgICAgdGhpcy5fcGFyc2VRdWVzdGlvbnMoKTtcbiAgICB9XG5cbiAgICBfcGFyc2VRdWVzdGlvbiA9IChxKSA9PiB7XG4gICAgICAgIHRoaXMucXVlc3Rpb25CeU5hbWVbcS5uYW1lXSA9IHE7XG4gICAgICAgIHRoaXMucXVlc3Rpb25CeUlkW3BhcnNlSW50KHEuaWQpXSA9IHE7XG4gICAgICAgIGlmKHEuaGFzT3duUHJvcGVydHkoJ3N1Yl9xdWVzdGlvbl9ydWxlcycpKVxuICAgICAgICAgICAgZm9yIChsZXQgciBvZiBxLnN1Yl9xdWVzdGlvbl9ydWxlcykge1xuICAgICAgICAgICAgICAgIHRoaXMucnVsZXNbcGFyc2VJbnQoci5pZCldID0gcjtcbiAgICAgICAgICAgICAgICB0aGlzLl9wYXJzZVF1ZXN0aW9uKHIuc3ViX3F1ZXN0aW9uKTtcbiAgICAgICAgICAgIH1cbiAgICB9XG5cbiAgICBfcGFyc2VRdWVzdGlvbnMgPSAoKSA9PiB7XG4gICAgICAgIGZvciAobGV0IHEgb2YgdGhpcy5xdWVzdGlvbnMpIHtcbiAgICAgICAgICAgIHRoaXMuX3BhcnNlUXVlc3Rpb24ocSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBfYWxsb3dzVmFsdWVzID0gKHEpID0+IHtcbiAgICAgICAgcmV0dXJuIEFsbG93ZWRNdWx0aXBsZVZhbHVlUXVlc3Rpb25UeXBlLmluY2x1ZGVzKHEudHlwZSk7XG4gICAgfVxuXG4gICAgX2FsbG93c1ZhbHVlID0gKHEsIGFuc3dlcikgPT4ge1xuICAgICAgICBsZXQgdmFsdWUgPSBhbnN3ZXIudmFsdWUuc3BsaXQoJywnKS5tYXAodiA9PiBwYXJzZUludCh2KSk7XG4gICAgICAgIGZvciAobGV0IGF2IG9mIHZhbHVlKSB7XG4gICAgICAgICAgICBpZiAoIXEudmFsdWVzLm1hcChlID0+IGUuaWQpLmluY2x1ZGVzKGF2KSlcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgX2dldEFuc3dlckZvciA9IChxKSA9PiB7XG4gICAgICAgIGxldCBpZCA9IE51bWJlci5pc0ludGVnZXIocSkgPyBxIDogcS5pZDtcbiAgICAgICAgbGV0IGEgPSB0aGlzLmFuc3dlcnNbaWRdIHx8IG51bGw7XG4gICAgICAgIHJldHVybiBhID8gYSA6IG51bGw7XG4gICAgfVxuXG4gICAgX2hhc1ZhbHVlID0gKGFuc3dlcikgPT4ge1xuICAgICAgICByZXR1cm4gYW5zd2VyLnZhbHVlICE9PSAnJztcbiAgICB9XG5cbiAgICBfYW5zd2VyQ29udGFpbnMgPSAoYW5zd2VyLCB2YWwpID0+IHtcbiAgICAgICAgcmV0dXJuIGFuc3dlci52YWx1ZS5zcGxpdCgnLCcpLmluY2x1ZGVzKHZhbCk7XG4gICAgfVxuXG4gICAgX2lzU3ViUXVlc3Rpb25WaXNpYmxlID0gKHJ1bGUpID0+IHtcbiAgICAgICAgbGV0IGluaXRpYWxDb25kaXRpb24gPSBydWxlLmFuc3dlcl92YWx1ZXNfb3BlcmF0b3IgPT09IEFuc3dlclZhbHVlc09wZXJhdG9yX0FuZCA/IHRydWUgOiBmYWxzZTtcbiAgICAgICAgY29uc3QgcGFyZW50UXVlc3Rpb25BbnN3ZXIgPSB0aGlzLl9nZXRBbnN3ZXJGb3IocnVsZS5wYXJlbnRfcXVlc3Rpb25faWQpO1xuICAgICAgICBpZiAoIXBhcmVudFF1ZXN0aW9uQW5zd2VyKSB7XG4gICAgICAgICAgICBpbml0aWFsQ29uZGl0aW9uID0gcnVsZS52aXNpYmlsaXR5X2NvbmRpdGlvbiA9PT0gVmlzaWJpbGl0eUNvbmRpdGlvbl9FcXVhbCA/IGZhbHNlIDogdHJ1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHN3aXRjaCAocnVsZS52aXNpYmlsaXR5X2NvbmRpdGlvbikge1xuICAgICAgICAgICAgICAgIGNhc2UgVmlzaWJpbGl0eUNvbmRpdGlvbl9FcXVhbDoge1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBhbnN3ZXJWYWx1ZSBvZiBydWxlLmFuc3dlcl92YWx1ZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChydWxlLmFuc3dlcl92YWx1ZXNfb3BlcmF0b3IgPT09IEFuc3dlclZhbHVlc09wZXJhdG9yX0FuZClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbml0aWFsQ29uZGl0aW9uID0gaW5pdGlhbENvbmRpdGlvbiAmJiB0aGlzLl9hbnN3ZXJDb250YWlucyhwYXJlbnRRdWVzdGlvbkFuc3dlciwgYW5zd2VyVmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluaXRpYWxDb25kaXRpb24gPSBpbml0aWFsQ29uZGl0aW9uIHx8IHRoaXMuX2Fuc3dlckNvbnRhaW5zKHBhcmVudFF1ZXN0aW9uQW5zd2VyLCBhbnN3ZXJWYWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgVmlzaWJpbGl0eUNvbmRpdGlvbl9Ob3RFcXVhbDoge1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBhbnN3ZXJWYWx1ZSBvZiBydWxlLmFuc3dlcl92YWx1ZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChydWxlLmFuc3dlcl92YWx1ZXNfb3BlcmF0b3IgPT09IEFuc3dlclZhbHVlc09wZXJhdG9yX0FuZClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbml0aWFsQ29uZGl0aW9uID0gaW5pdGlhbENvbmRpdGlvbiAmJiAhdGhpcy5fYW5zd2VyQ29udGFpbnMocGFyZW50UXVlc3Rpb25BbnN3ZXIsIGFuc3dlclZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbml0aWFsQ29uZGl0aW9uID0gaW5pdGlhbENvbmRpdGlvbiB8fCAhdGhpcy5fYW5zd2VyQ29udGFpbnMocGFyZW50UXVlc3Rpb25BbnN3ZXIsIGFuc3dlclZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gZmluYWwgdmlzaWJpbGl0eSBjaGVja1xuICAgICAgICBpZiAocnVsZS52aXNpYmlsaXR5ID09PSBWaXNpYmlsaXR5X1Zpc2libGUpIHtcbiAgICAgICAgICAgIHJldHVybiBpbml0aWFsQ29uZGl0aW9uO1xuICAgICAgICB9XG4gICAgICAgIC8vIG5vdCB2aXNpYmxlXG4gICAgICAgIHJldHVybiAhaW5pdGlhbENvbmRpdGlvbjtcbiAgICB9XG5cbiAgICBfaXNBbnN3ZXJlZCA9IChxKSA9PiB7XG4gICAgICAgIGNvbnN0IGFuc3dlciA9IHRoaXMuX2dldEFuc3dlckZvcihxKTtcblxuICAgICAgICBpZiAocS5jbGFzcyA9PT0gTWFpblF1ZXN0aW9uQ2xhc3NUeXBlKSB7XG4gICAgICAgICAgICBpZiAoIXEubWFuZGF0b3J5KSByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIGlmICghYW5zd2VyKSByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICBpZiAoIXRoaXMuX2hhc1ZhbHVlKGFuc3dlcikpIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIGlmICh0aGlzLl9hbGxvd3NWYWx1ZXMocSkgJiYgIXRoaXMuX2FsbG93c1ZhbHVlKHEsIGFuc3dlcikpXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBjaGVjayBwYXJlbnQgcnVsZXMgLi4uXG4gICAgICAgIGZvciAobGV0IHJ1bGVJZCBvZiBxLnBhcmVudF9ydWxlcykge1xuICAgICAgICAgICAgaWYgKCF0aGlzLl9pc1N1YlF1ZXN0aW9uVmlzaWJsZSh0aGlzLnJ1bGVzW3J1bGVJZF0pKSAvLyBpZiBxdWVzdGlvbiBpcyBub3QgdmlzaWJsZSBza2lwIGl0XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICBpZiAoIXEubWFuZGF0b3J5KSByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIGlmICghYW5zd2VyKSByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICBpZiAoIXRoaXMuX2hhc1ZhbHVlKGFuc3dlcikpIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIGlmICh0aGlzLl9hbGxvd3NWYWx1ZXMocSkgJiYgIXRoaXMuX2FsbG93c1ZhbHVlKHEsIGFuc3dlcikpXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBfY2hlY2tRdWVzdGlvbiA9IChxKSA9PiB7XG4gICAgICAgIGxldCByZXMgPSB0aGlzLl9pc0Fuc3dlcmVkKHEpO1xuICAgICAgICBpZihxLmhhc093blByb3BlcnR5KCdzdWJfcXVlc3Rpb25fcnVsZXMnKSlcbiAgICAgICAgICAgIGZvciAobGV0IHJ1bGUgb2YgcS5zdWJfcXVlc3Rpb25fcnVsZXMpIHtcbiAgICAgICAgICAgICAgICAvLyBjaGVjayByZWN1cnNpdmUgYWxsIHRoZSB0cmVlIHRpbGwgbGVhdmVzIC4uLlxuICAgICAgICAgICAgICAgIHJlcyA9IHJlcyAmJiB0aGlzLl9jaGVja1F1ZXN0aW9uKHJ1bGUuc3ViX3F1ZXN0aW9uKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG5cbiAgICBfZm9ybWF0UXVlc3Rpb25BbnN3ZXIgPSAocXVlc3Rpb24pID0+IHtcbiAgICAgICAgbGV0IHJlcyA9IHt9O1xuICAgICAgICBsZXQgdXNlckFuc3dlciA9IHRoaXMub3JpZ2luYWxBbnN3ZXJzLmZpbmQoYSA9PiBhLnF1ZXN0aW9uX2lkID09PSBxdWVzdGlvbi5pZCk/LnZhbHVlO1xuXG4gICAgICAgIGlmKHVzZXJBbnN3ZXIpIHtcbiAgICAgICAgICAgIGlmIChxdWVzdGlvbi50eXBlID09PSBDaGVja0JveFF1ZXN0aW9uVHlwZSkgdXNlckFuc3dlciA9IHVzZXJBbnN3ZXIgPT09ICdmYWxzZScgPyBmYWxzZSA6ICEhdXNlckFuc3dlcjtcbiAgICAgICAgICAgIC8vaWYgKHF1ZXN0aW9uLnR5cGUgPT09IFJhZGlvQnV0dG9uTGlzdFF1ZXN0aW9uVHlwZSB8fCBxdWVzdGlvbi50eXBlID09PSBDb21ib0JveFF1ZXN0aW9uVHlwZSkgdXNlckFuc3dlciA9IHVzZXJBbnN3ZXI7XG4gICAgICAgICAgICBpZiAocXVlc3Rpb24udHlwZSA9PT0gQ2hlY2tCb3hMaXN0UXVlc3Rpb25UeXBlKSB1c2VyQW5zd2VyID0gdXNlckFuc3dlci5zcGxpdCgnLCcpLm1hcChhbnNWYWwgPT4gYW5zVmFsKSB8fCBbXTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJlc1txdWVzdGlvbi5uYW1lXSA9ICB1c2VyQW5zd2VyIHx8ICcnO1xuICAgICAgICBpZihxdWVzdGlvbi5oYXNPd25Qcm9wZXJ0eSgnc3ViX3F1ZXN0aW9uX3J1bGVzJykpXG4gICAgICAgICAgICBmb3IgKGxldCBydWxlIG9mIHF1ZXN0aW9uLnN1Yl9xdWVzdGlvbl9ydWxlcykge1xuICAgICAgICAgICAgICAgIC8vIGNoZWNrIHJlY3Vyc2l2ZSBhbGwgdGhlIHRyZWUgdGlsbCBsZWF2ZXMgLi4uXG4gICAgICAgICAgICAgICAgbGV0IHJlczEgPSB0aGlzLl9mb3JtYXRRdWVzdGlvbkFuc3dlcihydWxlLnN1Yl9xdWVzdGlvbik7XG4gICAgICAgICAgICAgICAgcmVzID0gey4uLnJlcywgLi4ucmVzMX07XG4gICAgICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxuXG4gICAgZm9ybWF0QW5zd2VycyA9ICgpID0+IHtcbiAgICAgICAgbGV0IHJlcyA9IHt9XG4gICAgICAgIHRoaXMucXVlc3Rpb25zLmZvckVhY2gocSA9PiB7XG4gICAgICAgICAgICBsZXQgcmVzMSA9IHRoaXMuX2Zvcm1hdFF1ZXN0aW9uQW5zd2VyKHEpO1xuICAgICAgICAgICAgcmVzID0gey4uLnJlcywuLi5yZXMxfTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxuXG4gICAgY29tcGxldGVkID0gKCkgPT4ge1xuICAgICAgICBsZXQgcmVzID0gdHJ1ZTtcbiAgICAgICAgZm9yIChsZXQgcSBvZiB0aGlzLnF1ZXN0aW9ucykge1xuICAgICAgICAgICAgcmVzID0gcmVzICYmIHRoaXMuX2NoZWNrUXVlc3Rpb24ocSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG5cbiAgICBnZXRRdWVzdGlvbkJ5TmFtZSA9IChuYW1lKSA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLnF1ZXN0aW9uQnlOYW1lW25hbWVdIHx8IG51bGw7XG4gICAgfVxuXG4gICAgZ2V0UXVlc3Rpb25CeUlkID0gKGlkKSA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLnF1ZXN0aW9uQnlJZFtwYXJzZUludChpZCldIHx8IG51bGw7XG4gICAgfVxufSIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImF3ZXNvbWUtYm9vdHN0cmFwLWNoZWNrYm94L2F3ZXNvbWUtYm9vdHN0cmFwLWNoZWNrYm94LmNzc1wiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJicm93c2VyLXRhYnMtbG9ja1wiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJjcnlwdG9cIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiZHJvcHpvbmVcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiZHJvcHpvbmUvZGlzdC9kcm9wem9uZS5jc3NcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiZXh0ZW5kXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImkxOG4tcmVhY3RcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiaTE4bi1yZWFjdC9kaXN0L2kxOG4tcmVhY3RcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiaWR0b2tlbi12ZXJpZmllclwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJpbW11dGFiaWxpdHktaGVscGVyXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImxvZGFzaFwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJtb21lbnQtdGltZXpvbmVcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwicHJvcC10eXBlc1wiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJyZWFjdFwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJyZWFjdC1kYXRldGltZVwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJyZWFjdC1kbmRcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwicmVhY3QtZG5kLWh0bWw1LWJhY2tlbmRcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwicmVhY3QtZG9tXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcInJlYWN0LWRyb3B6b25lXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcInJlYWN0LWZpbmFsLWZvcm1cIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwicmVhY3QtZ29vZ2xlLW1hcHNcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwicmVhY3QtZ29vZ2xlLW1hcHMvbGliL2NvbXBvbmVudHMvYWRkb25zL01hcmtlckNsdXN0ZXJlclwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJyZWFjdC1yZWR1eFwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJyZWFjdC1ydGVcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwicmVhY3Qtc2VsZWN0XCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcInJlYWN0LXNlbGVjdC9saWIvQXN5bmNcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwicmVhY3Qtc2VsZWN0L2xpYi9Bc3luY0NyZWF0YWJsZVwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJyZWFjdC1zZWxlY3QvbGliL0NyZWF0YWJsZVwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJyZWFjdC1zZWxlY3QvbGliL2NvbXBvbmVudHNcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwicmVhY3QtdG9vbHRpcFwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJzdXBlcmFnZW50XCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcInN3ZWV0YWxlcnQyXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcInVyaWpzXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcInZpZGVvLmpzXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcInZpZGVvLmpzL2Rpc3QvdmlkZW8tanMuY3NzXCIpOyJdLCJzb3VyY2VSb290IjoiIn0=
|