@ditojs/admin 2.12.3 → 2.13.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/dito-admin.es.js +15 -8
- package/dist/dito-admin.umd.js +4 -4
- package/package.json +31 -31
- package/src/components/DitoSchema.vue +15 -7
package/dist/dito-admin.es.js
CHANGED
|
@@ -4984,7 +4984,8 @@ const Yr = T.component("DitoSchema", {
|
|
|
4984
4984
|
currentTab: null,
|
|
4985
4985
|
componentsRegistry: {},
|
|
4986
4986
|
panesRegistry: {},
|
|
4987
|
-
panelsRegistry: {}
|
|
4987
|
+
panelsRegistry: {},
|
|
4988
|
+
scrollPositions: {}
|
|
4988
4989
|
};
|
|
4989
4990
|
},
|
|
4990
4991
|
computed: {
|
|
@@ -5098,7 +5099,7 @@ const Yr = T.component("DitoSchema", {
|
|
|
5098
5099
|
hasTabs() {
|
|
5099
5100
|
return !!this.tabs;
|
|
5100
5101
|
},
|
|
5101
|
-
|
|
5102
|
+
hasRootTabs() {
|
|
5102
5103
|
return this.hasTabs && this.isRootSchema;
|
|
5103
5104
|
},
|
|
5104
5105
|
hasMainPane() {
|
|
@@ -5139,13 +5140,19 @@ const Yr = T.component("DitoSchema", {
|
|
|
5139
5140
|
// https://github.com/vuejs/vue-router/issues/3393#issuecomment-1158470149
|
|
5140
5141
|
flush: "post",
|
|
5141
5142
|
handler(e) {
|
|
5142
|
-
this.
|
|
5143
|
+
this.hasRootTabs && (this.currentTab = (e == null ? void 0 : e.slice(1)) || null);
|
|
5143
5144
|
}
|
|
5144
5145
|
},
|
|
5145
|
-
selectedTab(e) {
|
|
5146
|
-
if (this.
|
|
5147
|
-
const
|
|
5148
|
-
this
|
|
5146
|
+
selectedTab(e, t) {
|
|
5147
|
+
if (this.scrollable) {
|
|
5148
|
+
const { content: s } = this.$refs;
|
|
5149
|
+
this.scrollPositions[t] = s.scrollTop, this.$nextTick(() => {
|
|
5150
|
+
s.scrollTop = this.scrollPositions[e] ?? 0;
|
|
5151
|
+
});
|
|
5152
|
+
}
|
|
5153
|
+
if (this.hasRootTabs) {
|
|
5154
|
+
const s = this.shouldRenderSchema(this.tabs[e]) ? e : this.defaultTab;
|
|
5155
|
+
this.$router.replace({ hash: s ? `#${s}` : null });
|
|
5149
5156
|
}
|
|
5150
5157
|
this.hasErrors && this.repositionErrors();
|
|
5151
5158
|
}
|
|
@@ -10985,4 +10992,4 @@ function np(e, t) {
|
|
|
10985
10992
|
export {
|
|
10986
10993
|
qp as default
|
|
10987
10994
|
};
|
|
10988
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGl0by1hZG1pbi5lcy5qcyIsInNvdXJjZXMiOlsiLi4vc3JjL3V0aWxzL2FnZW50LmpzIiwiLi4vc3JjL2FwcFN0YXRlLmpzIiwiLi4vc3JjL3V0aWxzL2RhdGEuanMiLCIuLi9zcmMvRGl0b0NvbnRleHQuanMiLCIuLi9zcmMvbWl4aW5zL0VtaXR0ZXJNaXhpbi5qcyIsIi4uL3NyYy92YWxpZGF0aW9ucy9fY3JlZGl0Y2FyZC5qcyIsIi4uL3NyYy92YWxpZGF0aW9ucy9fZGVjaW1hbHMuanMiLCIuLi9zcmMvdmFsaWRhdGlvbnMvX2VtYWlsLmpzIiwiLi4vc3JjL3ZhbGlkYXRpb25zL19ob3N0bmFtZS5qcyIsIi4uL3NyYy92YWxpZGF0aW9ucy9fZG9tYWluLmpzIiwiLi4vc3JjL3ZhbGlkYXRpb25zL19pbnRlZ2VyLmpzIiwiLi4vc3JjL3ZhbGlkYXRpb25zL19tYXguanMiLCIuLi9zcmMvdmFsaWRhdGlvbnMvX21pbi5qcyIsIi4uL3NyYy92YWxpZGF0aW9ucy9fcGFzc3dvcmQuanMiLCIuLi9zcmMvdmFsaWRhdGlvbnMvX3JhbmdlLmpzIiwiLi4vc3JjL3ZhbGlkYXRpb25zL19yZXF1aXJlZC5qcyIsIi4uL3NyYy92YWxpZGF0aW9ucy9fdXJsLmpzIiwiLi4vc3JjL21peGlucy9WYWxpZGF0aW9uTWl4aW4uanMiLCIuLi9zcmMvdXRpbHMvYWNjZXNzb3IuanMiLCIuLi9zcmMvbWl4aW5zL1R5cGVNaXhpbi5qcyIsIi4uL3NyYy91dGlscy91aWQuanMiLCIuLi9zcmMvdXRpbHMvU2NoZW1hR3JhcGguanMiLCIuLi9zcmMvdXRpbHMvdHlwZS5qcyIsIi4uL3NyYy91dGlscy9zY2hlbWEuanMiLCIuLi9zcmMvdXRpbHMvcmVzb3VyY2UuanMiLCIuLi9zcmMvbWl4aW5zL0RpdG9NaXhpbi5qcyIsIi4uL3NyYy91dGlscy9vcHRpb25zLmpzIiwiLi4vc3JjL0RpdG9Db21wb25lbnQuanMiLCIuLi8uLi91aS9zcmMvdXRpbHMvZGF0ZS5qcyIsIi4uLy4uL3VpL3NyYy9jb21wb25lbnRzL0NhbGVuZGFyLnZ1ZSIsIi4uLy4uL3VpL3NyYy91dGlscy9ldmVudC5qcyIsIi4uLy4uL3VpL3NyYy91dGlscy90cmlnZ2VyLmpzIiwiLi4vLi4vdWkvc3JjL2NvbXBvbmVudHMvVHJpZ2dlci52dWUiLCIuLi8uLi91aS9zcmMvY29tcG9uZW50cy9JbnB1dEZpZWxkLnZ1ZSIsIi4uLy4uL3VpL3NyYy9jb21wb25lbnRzL0ljb24udnVlIiwiLi4vLi4vdWkvc3JjL3V0aWxzL3NlbGVjdGlvbi5qcyIsIi4uLy4uL3VpL3NyYy9jb21wb25lbnRzL0RhdGVQaWNrZXIudnVlIiwiLi4vLi4vdWkvc3JjL2NvbXBvbmVudHMvVGltZVBpY2tlci52dWUiLCIuLi8uLi91aS9zcmMvY29tcG9uZW50cy9EYXRlVGltZVBpY2tlci52dWUiLCIuLi8uLi91aS9zcmMvY29tcG9uZW50cy9QYWdpbmF0aW9uLnZ1ZSIsIi4uLy4uL3VpL3NyYy9jb21wb25lbnRzL1N3aXRjaEJ1dHRvbi52dWUiLCIuLi8uLi91aS9zcmMvdHJhbnNpdGlvbnMvVHJhbnNpdGlvbkhlaWdodC52dWUiLCIuLi8uLi91aS9zcmMvdXRpbHMvdnVlLmpzIiwiLi4vc3JjL21peGlucy9Eb21NaXhpbi5qcyIsIi4uL3NyYy9EaXRvVXNlci5qcyIsIi4uL3NyYy9taXhpbnMvU2NoZW1hUGFyZW50TWl4aW4uanMiLCIuLi9zcmMvbWl4aW5zL1ZhbGlkYXRvck1peGluLmpzIiwiLi4vc3JjL21peGlucy9Sb3V0ZU1peGluLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1ZpZXcudnVlIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0B2dWV1c2UvaW50ZWdyYXRpb25zL3VzZUZvY3VzVHJhcC9jb21wb25lbnQubWpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0RpYWxvZy52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvUm9vdC52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvTWVudS52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvVHJhaWwudnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0hlYWRlci52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvTmF2aWdhdGlvbi52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvTm90aWZpY2F0aW9ucy52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvU2lkZWJhci52dWUiLCIuLi9zcmMvbWl4aW5zL1B1bGxkb3duTWl4aW4uanMiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvQWNjb3VudC52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvRWxlbWVudC52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvTGFiZWwudnVlIiwiLi4vc3JjL21peGlucy9JdGVtTWl4aW4uanMiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvU2NoZW1hLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9TY2hlbWFJbmxpbmVkLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9QYW5lLnZ1ZSIsIi4uL3NyYy91dGlscy9tYXRoLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0NvbnRhaW5lci52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvVGFicy52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvUGFuZWwudnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1BhbmVscy52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvQnV0dG9ucy52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvRWRpdEJ1dHRvbnMudnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0NyZWF0ZUJ1dHRvbi52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvQ2xpcGJvYXJkLnZ1ZSIsIi4uL3NyYy9taXhpbnMvTG9hZGluZ01peGluLmpzIiwiLi4vc3JjL21peGlucy9SZXNvdXJjZU1peGluLmpzIiwiLi4vc3JjL3V0aWxzL3BhdGguanMiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvRm9ybS52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvRm9ybU5lc3RlZC52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvRXJyb3JzLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9TY29wZXMudnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1BhZ2luYXRpb24udnVlIiwiLi4vc3JjL21peGlucy9Tb3J0YWJsZU1peGluLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1RyZWVJdGVtLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9UYWJsZUhlYWQudnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1RhYmxlQ2VsbC52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvVXBsb2FkRmlsZS52dWUiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvQHZ1ZXVzZS9pbnRlZ3JhdGlvbnMvdXNlU29ydGFibGUvY29tcG9uZW50Lm1qcyIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9EcmFnZ2FibGUudnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1NwaW5uZXIudnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1ZOb2RlLnZ1ZSIsIi4uL3NyYy9EaXRvVHlwZUNvbXBvbmVudC5qcyIsIi4uL3NyYy90eXBlcy9EaXRvVHlwZUJ1dHRvbi52dWUiLCIuLi9zcmMvdHlwZXMvRGl0b1R5cGVDaGVja2JveC52dWUiLCIuLi9zcmMvbWl4aW5zL0RhdGFNaXhpbi5qcyIsIi4uL3NyYy9taXhpbnMvT3B0aW9uc01peGluLmpzIiwiLi4vc3JjL3R5cGVzL0RpdG9UeXBlQ2hlY2tib3hlcy52dWUiLCIuLi9zcmMvdHlwZXMvRGl0b1R5cGVDb2RlLnZ1ZSIsIi4uL3NyYy90eXBlcy9EaXRvVHlwZUNvbG9yLnZ1ZSIsIi4uL3NyYy90eXBlcy9EaXRvVHlwZUNvbXBvbmVudC52dWUiLCIuLi9zcmMvdHlwZXMvRGl0b1R5cGVDb21wdXRlZC52dWUiLCIuLi9zcmMvdHlwZXMvRGl0b1R5cGVEYXRlLnZ1ZSIsIi4uL3NyYy91dGlscy9yb3V0ZS5qcyIsIi4uL3NyYy9taXhpbnMvU291cmNlTWl4aW4uanMiLCIuLi9zcmMvdXRpbHMvZmlsdGVyLmpzIiwiLi4vc3JjL3R5cGVzL0RpdG9UeXBlTGlzdC52dWUiLCIuLi9zcmMvdHlwZXMvRGl0b1R5cGVMYWJlbC52dWUiLCIuLi9zcmMvdHlwZXMvRGl0b1R5cGVNYXJrdXAudnVlIiwiLi4vc3JjL3R5cGVzL0RpdG9UeXBlTXVsdGlzZWxlY3QudnVlIiwiLi4vc3JjL21peGlucy9OdW1iZXJNaXhpbi5qcyIsIi4uL3NyYy90eXBlcy9EaXRvVHlwZU51bWJlci52dWUiLCIuLi9zcmMvdHlwZXMvRGl0b1R5cGVPYmplY3QudnVlIiwiLi4vc3JjL3R5cGVzL0RpdG9UeXBlUGFuZWwudnVlIiwiLi4vc3JjL3R5cGVzL0RpdG9UeXBlUHJvZ3Jlc3MudnVlIiwiLi4vc3JjL3R5cGVzL0RpdG9UeXBlUmFkaW8udnVlIiwiLi4vc3JjL3R5cGVzL0RpdG9UeXBlU2VjdGlvbi52dWUiLCIuLi9zcmMvdHlwZXMvRGl0b1R5cGVTZWxlY3QudnVlIiwiLi4vc3JjL3R5cGVzL0RpdG9UeXBlU2xpZGVyLnZ1ZSIsIi4uL3NyYy90eXBlcy9EaXRvVHlwZVN3aXRjaC52dWUiLCIuLi9zcmMvbWl4aW5zL1RleHRNaXhpbi5qcyIsIi4uL3NyYy90eXBlcy9EaXRvVHlwZVRleHQudnVlIiwiLi4vc3JjL3R5cGVzL0RpdG9UeXBlVGV4dGFyZWEudnVlIiwiLi4vc3JjL3R5cGVzL0RpdG9UeXBlVHJlZUxpc3QudnVlIiwiLi4vc3JjL3V0aWxzL3VuaXRzLmpzIiwiLi4vc3JjL3R5cGVzL0RpdG9UeXBlVXBsb2FkLnZ1ZSIsIi4uL3NyYy9kaXJlY3RpdmVzL3Jlc2l6ZS5qcyIsIi4uL3NyYy92ZXJicy5qcyIsIi4uL3NyYy9EaXRvQWRtaW4uanMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gVGhpcyB1c2VyLWFnZW50IHBhcnNlciB3YXMgbGlmdGVkIGZyb20gUGFwZXIuanM6XG4vLyBodHRwczovL2dpdGh1Yi5jb20vcGFwZXJqcy9wYXBlci5qcy9ibG9iL2NjMTU2OTY3NTAwMzVhYjAwZTAwYzY0YzdjOTVkYWEyYzg1ZWZlMDEvc3JjL2NvcmUvUGFwZXJTY29wZS5qcyNMNzUtTDEwN1xuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VVc2VyQWdlbnQodXNlckFnZW50ID0gJycpIHtcbiAgY29uc3QgYWdlbnQgPSB7fVxuICAvLyBVc2UgcmVwbGFjZSgpIHRvIGdldCBhbGwgbWF0Y2hlcywgYW5kIGRlYWwgd2l0aCBDaHJvbWUvV2Via2l0IG92ZXJsYXA6XG4gIGNvbnN0IHVhID0gdXNlckFnZW50LnRvTG93ZXJDYXNlKClcbiAgY29uc3QgW29zXSA9XG4gICAgLyhpcGhvbmV8aXBhZHxsaW51eDsgYW5kcm9pZHxkYXJ3aW58d2lufG1hY3xsaW51eHxmcmVlYnNkfHN1bm9zKS8uZXhlYyhcbiAgICAgIHVhXG4gICAgKSB8fCBbXVxuICBjb25zdCBwbGF0Zm9ybSA9IChcbiAgICB7XG4gICAgICAnZGFyd2luJzogJ21hYycsXG4gICAgICAnaXBob25lJzogJ2lvcycsXG4gICAgICAnaXBhZCc6ICdpb3MnLFxuICAgICAgJ2xpbnV4OyBhbmRyb2lkJzogJ2FuZHJvaWQnXG4gICAgfVtvc10gfHxcbiAgICBvc1xuICApXG4gIGlmIChwbGF0Zm9ybSkge1xuICAgIGFnZW50LnBsYXRmb3JtID0gcGxhdGZvcm1cbiAgICBhZ2VudFtwbGF0Zm9ybV0gPSB0cnVlXG4gIH1cbiAgdWEucmVwbGFjZShcbiAgICAvKG9wZXJhfGNocm9tZXxzYWZhcml8d2Via2l0fGZpcmVmb3h8bXNpZXx0cmlkZW50KVxcLz9cXHMqKFsuXFxkXSspKD86Lip2ZXJzaW9uXFwvKFsuXFxkXSspKT8oPzouKnJ2OnY/KFsuXFxkXSspKT8vZyxcbiAgICAobWF0Y2gsIGJyb3dzZXIsIHYxLCB2MiwgcnYpID0+IHtcbiAgICAgIC8vIERvIG5vdCBzZXQgYWRkaXRpb25hbCBicm93c2VycyBvbmNlIGNocm9tZSBpcyBkZXRlY3RlZC5cbiAgICAgIGlmICghYWdlbnQuY2hyb21lKSB7XG4gICAgICAgIGNvbnN0IHZlcnNpb24gPSBydiB8fCB2MiB8fCB2MVxuICAgICAgICBpZiAoIWFnZW50LnZlcnNpb24gfHwgYnJvd3NlciAhPT0gJ3NhZmFyaScpIHtcbiAgICAgICAgICAvLyBVc2UgdGhlIHZlcnNpb24gd2UgZ2V0IGZvciB3ZWJraXQgZm9yIFNhZmFyaSwgd2hpY2ggaXMgYWN0dWFsbHlcbiAgICAgICAgICAvLyBUaGUgU2FmYXJpIHZlcnNpb24sIGUuZy4gMTYuMFxuICAgICAgICAgIGFnZW50LnZlcnNpb24gPSB2ZXJzaW9uXG4gICAgICAgICAgYWdlbnQudmVyc2lvbk51bWJlciA9IHBhcnNlRmxvYXQodmVyc2lvbilcbiAgICAgICAgfVxuICAgICAgICBhZ2VudC5icm93c2VyID0gYnJvd3NlclxuICAgICAgICBhZ2VudFticm93c2VyXSA9IHRydWVcbiAgICAgIH1cbiAgICB9XG4gIClcbiAgaWYgKGFnZW50LmNocm9tZSkge1xuICAgIC8vIENhbid0IGhhdmUgaXQgYm90aCB3YXlzLCBDaHJvbWUuXG4gICAgZGVsZXRlIGFnZW50LndlYmtpdFxuICB9XG4gIHJldHVybiBhZ2VudFxufVxuIiwiaW1wb3J0IHsgcmVhY3RpdmUgfSBmcm9tICd2dWUnXG5pbXBvcnQgeyBwYXJzZVVzZXJBZ2VudCB9IGZyb20gJy4vdXRpbHMvYWdlbnQnXG5cbmV4cG9ydCBkZWZhdWx0IHJlYWN0aXZlKHtcbiAgdGl0bGU6ICcnLFxuICByb3V0ZUNvbXBvbmVudHM6IFtdLFxuICB1c2VyOiBudWxsLFxuICBhZ2VudDogcGFyc2VVc2VyQWdlbnQobmF2aWdhdG9yLnVzZXJBZ2VudCB8fCAnJyksXG4gIGxvYWRDYWNoZToge30sIC8vIFNlZSBUeXBlTWl4aW4ubG9hZCgpXG4gIGFjdGl2ZUxhYmVsOiBudWxsLFxuICBjbGlwYm9hcmREYXRhOiBudWxsXG59KVxuIiwiaW1wb3J0IHtcbiAgaXNJbnRlZ2VyLFxuICBwYXJzZURhdGFQYXRoLFxuICBnZXRWYWx1ZUF0RGF0YVBhdGgsXG4gIG5vcm1hbGl6ZURhdGFQYXRoXG59IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbmV4cG9ydCBmdW5jdGlvbiBhcHBlbmREYXRhUGF0aChkYXRhUGF0aCwgdG9rZW4pIHtcbiAgcmV0dXJuIGRhdGFQYXRoXG4gICAgPyBgJHtkYXRhUGF0aH0vJHt0b2tlbn1gXG4gICAgOiB0b2tlblxufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VQYXJlbnREYXRhUGF0aChkYXRhUGF0aCkge1xuICBjb25zdCBwYXRoID0gcGFyc2VEYXRhUGF0aChkYXRhUGF0aClcbiAgcGF0aD8ucG9wKClcbiAgcmV0dXJuIHBhdGhcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFBhcmVudERhdGFQYXRoKGRhdGFQYXRoKSB7XG4gIHJldHVybiBub3JtYWxpemVEYXRhUGF0aChwYXJzZVBhcmVudERhdGFQYXRoKGRhdGFQYXRoKSlcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlSXRlbURhdGFQYXRoKGRhdGFQYXRoLCBuZXN0ZWQgPSBmYWxzZSkge1xuICByZXR1cm4gbmVzdGVkID8gcGFyc2VQYXJlbnREYXRhUGF0aChkYXRhUGF0aCkgOiBwYXJzZURhdGFQYXRoKGRhdGFQYXRoKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0SXRlbURhdGFQYXRoKGRhdGFQYXRoLCBuZXN0ZWQgPSBmYWxzZSkge1xuICByZXR1cm4gbm9ybWFsaXplRGF0YVBhdGgocGFyc2VJdGVtRGF0YVBhdGgoZGF0YVBhdGgsIG5lc3RlZCkpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVBhcmVudEl0ZW1EYXRhUGF0aChkYXRhUGF0aCwgbmVzdGVkID0gZmFsc2UpIHtcbiAgY29uc3QgcGF0aCA9IHBhcnNlSXRlbURhdGFQYXRoKGRhdGFQYXRoLCBuZXN0ZWQpXG4gIGlmIChwYXRoKSB7XG4gICAgLy8gUmVtb3ZlIHRoZSBwYXJlbnQgdG9rZW4uIElmIGl0J3MgYSBudW1iZXIsIHRoZW4gd2UncmUgZGVhbGluZyB3aXRoIGFuXG4gICAgLy8gYXJyYXkgYW5kIG5lZWQgdG8gcmVtb3ZlIG1vcmUgdG9rZW5zIHVudGlsIHdlIG1lZXQgdGhlIGFjdHVhbCBwYXJlbnQ6XG4gICAgbGV0IHRva2VuXG4gICAgZG8ge1xuICAgICAgdG9rZW4gPSBwYXRoLnBvcCgpXG4gICAgfSB3aGlsZSAodG9rZW4gIT0gbnVsbCAmJiBpc0ludGVnZXIoK3Rva2VuKSlcbiAgICAvLyBJZiB0aGUgcmVtb3ZlZCB0b2tlbiBpcyB2YWxpZCwgd2UgY2FuIGdldCB0aGUgcGFyZW50IGRhdGE6XG4gICAgaWYgKHRva2VuICE9IG51bGwpIHtcbiAgICAgIHJldHVybiBwYXRoXG4gICAgfVxuICB9XG4gIHJldHVybiBudWxsXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRQYXJlbnRJdGVtRGF0YVBhdGgoZGF0YVBhdGgsIG5lc3RlZCA9IGZhbHNlKSB7XG4gIHJldHVybiBub3JtYWxpemVEYXRhUGF0aChwYXJzZVBhcmVudEl0ZW1EYXRhUGF0aChkYXRhUGF0aCwgbmVzdGVkKSlcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEl0ZW0ocm9vdEl0ZW0sIGRhdGFQYXRoLCBuZXN0ZWQgPSBmYWxzZSkge1xuICBjb25zdCBwYXRoID0gcGFyc2VJdGVtRGF0YVBhdGgoZGF0YVBhdGgsIG5lc3RlZClcbiAgcmV0dXJuIHBhdGggPyBnZXRWYWx1ZUF0RGF0YVBhdGgocm9vdEl0ZW0sIHBhdGgpIDogbnVsbFxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UGFyZW50SXRlbShyb290SXRlbSwgZGF0YVBhdGgsIG5lc3RlZCA9IGZhbHNlKSB7XG4gIGNvbnN0IHBhdGggPSBwYXJzZVBhcmVudEl0ZW1EYXRhUGF0aChkYXRhUGF0aCwgbmVzdGVkKVxuICByZXR1cm4gcGF0aCA/IGdldFZhbHVlQXREYXRhUGF0aChyb290SXRlbSwgcGF0aCkgOiBudWxsXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRMYXN0RGF0YVBhdGhUb2tlbihkYXRhUGF0aCkge1xuICBjb25zdCBwYXRoID0gcGFyc2VEYXRhUGF0aChkYXRhUGF0aClcbiAgcmV0dXJuIHBhdGhbcGF0aC5sZW5ndGggLSAxXVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0TGFzdERhdGFQYXRoTmFtZShkYXRhUGF0aCkge1xuICBjb25zdCB0b2tlbiA9IGdldExhc3REYXRhUGF0aFRva2VuKGRhdGFQYXRoKVxuICByZXR1cm4gdG9rZW4gPT0gbnVsbCB8fCBpc0ludGVnZXIoK3Rva2VuKSA/IG51bGwgOiB0b2tlblxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0TGFzdERhdGFQYXRoSW5kZXgoZGF0YVBhdGgpIHtcbiAgY29uc3QgdG9rZW4gPSBnZXRMYXN0RGF0YVBhdGhUb2tlbihkYXRhUGF0aClcbiAgY29uc3QgaW5kZXggPSB0b2tlbiA9PSBudWxsID8gbnVsbCA6ICt0b2tlblxuICByZXR1cm4gaXNJbnRlZ2VyKGluZGV4KSA/IGluZGV4IDogbnVsbFxufVxuXG5sZXQgdGVtcG9yYXJ5SWQgPSAwXG5leHBvcnQgZnVuY3Rpb24gc2V0VGVtcG9yYXJ5SWQoZGF0YSwgaWRLZXkgPSAnaWQnKSB7XG4gIC8vIFRlbXBvcmFyeSBpZHMgYXJlIG1hcmtlZCB3aXRoIGEgJ0AnIGF0IHRoZSBiZWdpbm5pbmcuXG4gIGRhdGFbaWRLZXldID0gYEAkeysrdGVtcG9yYXJ5SWR9YFxufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNUZW1wb3JhcnlJZChpZCkge1xuICByZXR1cm4gL15ALy50ZXN0KGlkKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNSZWZlcmVuY2UoZGF0YSwgaWRLZXkgPSAnaWQnKSB7XG4gIC8vIFJldHVybnMgdHJ1ZSBpZiB2YWx1ZSBpcyBhbiBvYmplY3QgdGhhdCBob2xkcyBub3RoaW5nIG1vcmUgdGhhbiBhbiBpZC5cbiAgcmV0dXJuIGRhdGE/LltpZEtleV0gIT0gbnVsbCAmJiBPYmplY3Qua2V5cyhkYXRhKS5sZW5ndGggPT09IDFcbn1cbiIsImltcG9ydCB7IHRvUmF3IH0gZnJvbSAndnVlJ1xuaW1wb3J0IHsgaXNGdW5jdGlvbiB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQge1xuICBnZXRJdGVtRGF0YVBhdGgsXG4gIGdldFBhcmVudEl0ZW1EYXRhUGF0aCxcbiAgZ2V0UGFyZW50SXRlbSxcbiAgZ2V0SXRlbSxcbiAgZ2V0TGFzdERhdGFQYXRoTmFtZSxcbiAgZ2V0TGFzdERhdGFQYXRoSW5kZXhcbn0gZnJvbSAnLi91dGlscy9kYXRhLmpzJ1xuXG5jb25zdCB7IGhhc093blByb3BlcnR5IH0gPSBPYmplY3QucHJvdG90eXBlXG5cbi8vIGBEaXRvQ29udGV4dGAgaW5zdGFuY2VzIGFyZSBhIHRoaW4gd3JhcHBlciBhcm91bmQgcmF3IGBjb250ZXh0YCBvYmplY3RzLFxuLy8gd2hpY2ggdGhlbXNlbHZlcyBhY3R1YWxseSBpbmhlcml0IGZyb20gdGhlIGxpbmtlZCBgY29tcG9uZW50YCBpbnN0YW5jZSwgc29cbi8vIHRoYXQgdGhleSBvbmx5IG5lZWQgdG8gcHJvdmlkZSB0aGUgdmFsdWVzIHRoYXQgc2hvdWxkIGJlIGRpZmZlcmVudCB0aGFuXG4vLyBpbiB0aGUgdW5kZXJseWluZyBjb21wb25lbnQuIEluIG9yZGVyIHRvIG5vdCBleHBvc2UgYWxsIGZpZWxkcyBmcm9tIHRoZVxuLy8gY29tcG9uZW50LCB0aGUgd3JhcHBlciBpcyBpbnRyb2R1Y2VkOlxuLy8gVXNlIFdlYWtNYXAgZm9yIHRoZSByYXcgYGNvbnRleHRgIG9iamVjdHMsIHNvIHdlIGRvbid0IGhhdmUgdG8gcG9sbHV0ZSB0aGVcbi8vIGFjdHVhbCBgRGl0b0NvbnRleHRgIGluc3RhbmNlIHdpdGggaXQuXG5jb25zdCBjb250ZXh0cyA9IG5ldyBXZWFrTWFwKClcblxuZnVuY3Rpb24gZ2V0KGNvbnRleHQsIGtleSwgZGVmYXVsdFZhbHVlKSB7XG4gIGNvbnN0IG9iamVjdCA9IGNvbnRleHRzLmdldCh0b1Jhdyhjb250ZXh0KSlcbiAgY29uc3QgdmFsdWUgPSBrZXkgaW4gb2JqZWN0ID8gb2JqZWN0W2tleV0gOiB1bmRlZmluZWRcbiAgLy8gSWYgYG9iamVjdGAgZXhwbGljaXRseSBzZXRzIHRoZSBrZXkgdG8gYHVuZGVmaW5lZGAsIHJldHVybiBpdC5cbiAgcmV0dXJuIHZhbHVlICE9PSB1bmRlZmluZWQgfHwgaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIGtleSlcbiAgICA/IHZhbHVlXG4gICAgOiBpc0Z1bmN0aW9uKGRlZmF1bHRWYWx1ZSlcbiAgICAgID8gZGVmYXVsdFZhbHVlKClcbiAgICAgIDogZGVmYXVsdFZhbHVlXG59XG5cbmZ1bmN0aW9uIHNldChjb250ZXh0LCBrZXksIHZhbHVlKSB7XG4gIGNvbnRleHRzLmdldCh0b1Jhdyhjb250ZXh0KSlba2V5XSA9IHZhbHVlXG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERpdG9Db250ZXh0IHtcbiAgY29uc3RydWN0b3IoY29tcG9uZW50LCBjb250ZXh0KSB7XG4gICAgLy8gVXNlIHRoZSBwcm92aWRlZCBwYXJhbXMgb2JqZWN0IC8gZnVuY3Rpb24sIG9yIGNyZWF0ZSBhIG5ldyBvbmU6XG4gICAgY29udGV4dCA9IGNvbnRleHRcbiAgICAgID8gaXNGdW5jdGlvbihjb250ZXh0KVxuICAgICAgICA/IGNvbnRleHQoKVxuICAgICAgICA6IHsgLi4uY29udGV4dCB9XG4gICAgICA6IHt9XG4gICAgLy8gSWYgbm90IGV4cGxpY2l0bHkgc2V0ICh0byBmYWxzZSksIGRlZmF1bHQgdG8gdHJ1ZSBzbyB3ZSBkb24ndCBmYWxsIGJhY2tcbiAgICAvLyB0byBgY29tcG9uZW50YCBmb3IgaXRzIHZhbHVlLlxuICAgIGNvbnRleHQubmVzdGVkID8/PSB0cnVlXG4gICAgY29udGV4dC5jb21wb25lbnQgPSBjb21wb25lbnRcbiAgICAvLyBIYXZlIGBvYmplY3RgIGluaGVyaXQgZnJvbSB0aGUgYGNvbXBvbmVudGAgaW5zdGFuY2UsIHNvIGl0IGNhbiBvdmVycmlkZVxuICAgIC8vIGl0cyB2YWx1ZXMgYW5kIHN0aWxsIHJldHJpZXZlIGZyb20gaXQsIGFuZCBhc3NvY2lhdGUgaXQgd2l0aCBgdGhpc2BcbiAgICAvLyB0aHJvdWdoIGBjb250ZXh0c2AgbWFwOlxuICAgIGNvbnN0IG9iamVjdCA9IE9iamVjdC5zZXRQcm90b3R5cGVPZihjb250ZXh0LCBjb21wb25lbnQpXG4gICAgLy8gTm8gbmVlZCBmb3IgYHRvUmF3KHRoaXMpYCBoZXJlIGFzIGl0J3MgYWx3YXlzIHJhdyBpbnNpZGUgdGhlIGNvbnN0cnVjdG9yLlxuICAgIGNvbnRleHRzLnNldCh0aGlzLCBvYmplY3QpXG4gIH1cblxuICBzdGF0aWMgZ2V0KGNvbXBvbmVudCwgY29udGV4dCkge1xuICAgIHJldHVybiBjb250ZXh0IGluc3RhbmNlb2YgRGl0b0NvbnRleHRcbiAgICAgID8gY29udGV4dFxuICAgICAgOiBuZXcgRGl0b0NvbnRleHQoY29tcG9uZW50LCBjb250ZXh0KVxuICB9XG5cbiAgLy8gYG5lc3RlZGAgaXMgYHRydWVgIHdoZW4gdGhlIGRhdGEtcGF0aCBwb2ludHMgYSB2YWx1ZSBpbnNpZGUgYW4gaXRlbSwgYW5kXG4gIC8vIGBmYWxzZWAgd2hlbiBpdCBwb2ludHMgdG8gdGhlIGl0ZW0gaXRzZWxmLlxuICBnZXQgbmVzdGVkKCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ25lc3RlZCcsIHRydWUpXG4gIH1cblxuICBnZXQgc2NoZW1hKCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ3NjaGVtYScsIG51bGwpXG4gIH1cblxuICBnZXQgdmFsdWUoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAndmFsdWUnLCB1bmRlZmluZWQpXG4gIH1cblxuICBnZXQgZGF0YVBhdGgoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAnZGF0YVBhdGgnLCAnJylcbiAgfVxuXG4gIGdldCBuYW1lKCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ25hbWUnLCAoKSA9PiBnZXRMYXN0RGF0YVBhdGhOYW1lKHRoaXMuZGF0YVBhdGgpKVxuICB9XG5cbiAgZ2V0IGluZGV4KCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ2luZGV4JywgKCkgPT4gZ2V0TGFzdERhdGFQYXRoSW5kZXgodGhpcy5kYXRhUGF0aCkpXG4gIH1cblxuICBnZXQgaXRlbURhdGFQYXRoKCkge1xuICAgIHJldHVybiBnZXRJdGVtRGF0YVBhdGgodGhpcy5kYXRhUGF0aCwgdGhpcy5uZXN0ZWQpXG4gIH1cblxuICBnZXQgcGFyZW50SXRlbURhdGFQYXRoKCkge1xuICAgIHJldHVybiBnZXRQYXJlbnRJdGVtRGF0YVBhdGgodGhpcy5kYXRhUGF0aCwgdGhpcy5uZXN0ZWQpXG4gIH1cblxuICBnZXQgaXRlbUluZGV4KCkge1xuICAgIHJldHVybiBnZXRMYXN0RGF0YVBhdGhJbmRleCh0aGlzLml0ZW1EYXRhUGF0aClcbiAgfVxuXG4gIGdldCBwYXJlbnRJdGVtSW5kZXgoKSB7XG4gICAgcmV0dXJuIGdldExhc3REYXRhUGF0aEluZGV4KHRoaXMucGFyZW50SXRlbURhdGFQYXRoKVxuICB9XG5cbiAgLy8gTk9URTogV2hpbGUgaW50ZXJuYWxseSwgd2Ugc3BlYWsgb2YgYGRhdGFgLCBpbiB0aGUgQVBJIHN1cmZhY2UgdGhlXG4gIC8vIHRlcm0gYGl0ZW1gIGlzIHVzZWQgZm9yIHRoZSBkYXRhIHRoYXQgcmVsYXRlcyB0byBlZGl0aW5nIG9iamVjdHM6XG4gIC8vIElmIGBkYXRhYCBpc24ndCBwcm92aWRlZCwgd2UgY2FuIGRldGVybWluZSBpdCBmcm9tIHJvb3REYXRhICYgZGF0YVBhdGg6XG4gIGdldCBpdGVtKCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ2RhdGEnLCAoKSA9PlxuICAgICAgZ2V0SXRlbSh0aGlzLnJvb3RJdGVtLCB0aGlzLmRhdGFQYXRoLCB0aGlzLm5lc3RlZClcbiAgICApXG4gIH1cblxuICAvLyBOT1RFOiBgcGFyZW50SXRlbWAgaXNuJ3QgdGhlIGNsb3Nlc3QgZGF0YSBwYXJlbnQgdG8gYGl0ZW1gLCBpdCdzIHRoZVxuICAvLyBjbG9zZXN0IHBhcmVudCB0aGF0IGlzbid0IGFuIGFycmF5LCBlLmcuIGZvciByZWxhdGlvbnMgb3IgbmVzdGVkIEpTT04gZGF0YS5cbiAgLy8gVGhpcyBpcyB3aHkgdGhlIHRlcm0gYGl0ZW1gIHdhcyBjaG9zZW4gb3ZlciBgZGF0YWAsIGUuZy4gVlMgdGhlIHVzZSBvZlxuICAvLyBgcGFyZW50RGF0YWAgaW4gc2VydmVyLXNpZGVkIHZhbGlkYXRpb24sIHdoaWNoIGlzIHRoZSBjbG9zZXN0IHBhcmVudC4gSWZcbiAgLy8gbmVlZGVkLCB3ZSBjb3VsZCBleHBvc2UgdGhpcyBkYXRhIGhlcmUgdG9vLCBhcyB3ZSBjYW4gZG8gYWxsIHNvcnRzIG9mIGRhdGFcbiAgLy8gcHJvY2Vzc2luZyB3aXRoIGByb290RGF0YWAgYW5kIGBkYXRhUGF0aGAuXG4gIGdldCBwYXJlbnRJdGVtKCkge1xuICAgIGNvbnN0IGl0ZW0gPSAoXG4gICAgICBnZXRQYXJlbnRJdGVtKHRoaXMucm9vdEl0ZW0sIHRoaXMuZGF0YVBhdGgsIHRoaXMubmVzdGVkKSB8fFxuICAgICAgbnVsbFxuICAgIClcbiAgICByZXR1cm4gaXRlbSAhPT0gdGhpcy5pdGVtID8gaXRlbSA6IG51bGxcbiAgfVxuXG4gIGdldCByb290SXRlbSgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdyb290RGF0YScsIG51bGwpXG4gIH1cblxuICBnZXQgcHJvY2Vzc2VkSXRlbSgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdwcm9jZXNzZWREYXRhJywgbnVsbClcbiAgfVxuXG4gIGdldCBjbGlwYm9hcmRJdGVtKCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ2NsaXBib2FyZERhdGEnLCBudWxsKVxuICB9XG5cbiAgZ2V0IHVzZXIoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAndXNlcicsIG51bGwpXG4gIH1cblxuICBnZXQgYXBpKCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ2FwaScsIG51bGwpXG4gIH1cblxuICBnZXQgdmlld3MoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAndmlld3MnLCBudWxsKVxuICB9XG5cbiAgZ2V0IGZsYXR0ZW5lZFZpZXdzKCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ2ZsYXR0ZW5lZFZpZXdzJywgbnVsbClcbiAgfVxuXG4gIGdldCBpdGVtTGFiZWwoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAnaXRlbUxhYmVsJywgbnVsbClcbiAgfVxuXG4gIGdldCBmb3JtTGFiZWwoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAnZm9ybUxhYmVsJywgbnVsbClcbiAgfVxuXG4gIC8vIE5PVEU6IExpa2UgJ29wdGlvbnMnLCB0aGUgYXNzb2NpYXRlZCBjb21wb25lbnQgZG9lc24ndCBhbHdheXMgZXhpc3QsIGUuZy5cbiAgLy8gaW4gbmVzdGVkIGZvcm1zIGR1cmluZyBgcHJvY2Vzc0RhdGEoKWAuIEJ1dCBgc2NoZW1hYCBpcyBndWFyYW50ZWVkIHRvXG4gIC8vIGFsd2F5cyBiZSBhdmFpbGFibGUuXG4gIGdldCBjb21wb25lbnQoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAnY29tcG9uZW50JywgbnVsbClcbiAgfVxuXG4gIC8vIFRPRE86IEFkZCBgY29tcG9uZW50U2NoZW1hYCBnZXR0ZXIgZm9yIHRoZSBzY2hlbWEgb2YgdGhlIGN1cnJlbnQgY29tcG9uZW50LFxuICAvLyBldmVuIHdoZW4gdGhlIGNvbXBvbmVudCBpc24ndCBhY3R1YWxseSBpbnN0YW50aWF0ZWQuIENvbnNpZGVyIGFkZGluZ1xuICAvLyBgc291cmNlU2NoZW1hYCBhcyB3ZWxsP1xuXG4gIC8vIFRPRE86IEZpeCB1bmNsZWFyIG5hbWluZzogV2hpY2ggc2NoZW1hIGlzIHRoaXMsIHRoYXQgb2YgdGhlIGNvbXBvbmVudCBvciBvZlxuICAvLyBpdHMgcGFyZW50PyBJc24ndCBleHBvc2luZyBgZm9ybUNvbXBvbmVudGAgYW5kIGB2aWV3Q29tcG9uZW50YCBlbm91Z2gsIG9uY2VcbiAgLy8gd2Ugb2ZmZXIgYWNjZXNzIHRvIHRoZWlyIGNvbXBvbmVudHMgdGhlcmUgdGhyb3VnaCBgZ2V0Q29tcG9uZW50KClgICYgY28uIG9uXG4gIC8vIGBEaXRvTWl4aW5gIHBlcmhhcHM/ICBBbHNvLCB0aGVyZSBjb3VsZCBiZSBhIGB0YWJDb21wb25lbnRgIGdldHRlciBmb3JcbiAgLy8gc2NoZW1hcyBpbiB0YWJzP1xuICBnZXQgc2NoZW1hQ29tcG9uZW50KCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ3NjaGVtYUNvbXBvbmVudCcsIG51bGwpXG4gIH1cblxuICBnZXQgZm9ybUNvbXBvbmVudCgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdmb3JtQ29tcG9uZW50JywgbnVsbClcbiAgfVxuXG4gIGdldCB2aWV3Q29tcG9uZW50KCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ3ZpZXdDb21wb25lbnQnLCBudWxsKVxuICB9XG5cbiAgZ2V0IGRpYWxvZ0NvbXBvbmVudCgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdkaWFsb2dDb21wb25lbnQnLCBudWxsKVxuICB9XG5cbiAgZ2V0IHBhbmVsQ29tcG9uZW50KCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ3BhbmVsQ29tcG9uZW50JywgbnVsbClcbiAgfVxuXG4gIGdldCByZXNvdXJjZUNvbXBvbmVudCgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdyZXNvdXJjZUNvbXBvbmVudCcsIG51bGwpXG4gIH1cblxuICBnZXQgc291cmNlQ29tcG9uZW50KCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ3NvdXJjZUNvbXBvbmVudCcsIG51bGwpXG4gIH1cblxuICAvLyBXaGVuIHVzZWQgaW4gT3B0aW9uc01peGluIGZvciBgc2NoZW1hLm9wdGlvbnMudmFsdWUoKWAsXG4gIC8vIGBzY2hlbWEub3B0aW9ucy5sYWJlbCgpYCBhbmQgIGBzY2hlbWEuc2VhcmNoLmZpbHRlcigpYCBjYWxsYmFja3M6XG4gIGdldCBvcHRpb24oKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAnb3B0aW9uJywgdW5kZWZpbmVkKVxuICB9XG5cbiAgZ2V0IG9wdGlvbnMoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAnb3B0aW9ucycsIHVuZGVmaW5lZClcbiAgfVxuXG4gIGdldCBvcGVuKCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ29wZW4nLCB1bmRlZmluZWQpXG4gIH1cblxuICAvLyBUT0RPOiBSZW5hbWUgdGhpcyB0byBgc2VhcmNoVGVybWAgb3IgYHNlYXJjaFF1ZXJ5YCwgdG8gcGVyaGFwcyBmcmVlIGBxdWVyeWBcbiAgLy8gZm9yIHRoZSBhY3R1YWwgYHJlc291cmNlQ29tcG9uZW50LnF1ZXJ5YCBvYmplY3Q/XG4gIGdldCBxdWVyeSgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdxdWVyeScsIHVuZGVmaW5lZClcbiAgfVxuXG4gIC8vIFRoZSBlcnJvciBmaWVsZCBpcyBvbmx5IHBvcHVsYXRlZCBpbiB0aGUgY29udGV4dCBvZiBidXR0b25zIHRoYXQgc2VuZFxuICAvLyByZXF1ZXN0cywgc2VlIGBSZXNvdXJjZU1peGluLmVtaXRCdXR0b25FdmVudCgpYDpcbiAgZ2V0IGVycm9yKCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ2Vycm9yJywgdW5kZWZpbmVkKVxuICB9XG5cbiAgZ2V0IHdhc05vdGlmaWVkKCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ3dhc05vdGlmaWVkJywgZmFsc2UpXG4gIH1cblxuICAvLyBIZWxwZXIgTWV0aG9kc1xuXG4gIGdldCByZXF1ZXN0KCkge1xuICAgIHJldHVybiBvcHRpb25zID0+IHRoaXMuY29tcG9uZW50LnJlcXVlc3Qob3B0aW9ucylcbiAgfVxuXG4gIGdldCBmb3JtYXQoKSB7XG4gICAgcmV0dXJuICh2YWx1ZSwgb3B0aW9ucykgPT4gdGhpcy5jb21wb25lbnQuZm9ybWF0KHZhbHVlLCBvcHRpb25zKVxuICB9XG5cbiAgZ2V0IG5hdmlnYXRlKCkge1xuICAgIHJldHVybiBsb2NhdGlvbiA9PiB0aGlzLmNvbXBvbmVudC5uYXZpZ2F0ZShsb2NhdGlvbilcbiAgfVxuXG4gIGdldCBkb3dubG9hZCgpIHtcbiAgICByZXR1cm4gb3B0aW9ucyA9PiB0aGlzLmNvbXBvbmVudC5kb3dubG9hZChvcHRpb25zKVxuICB9XG5cbiAgZ2V0IGdldFJlc291cmNlVXJsKCkge1xuICAgIHJldHVybiByZXNvdXJjZSA9PiB0aGlzLmNvbXBvbmVudC5nZXRSZXNvdXJjZVVybChyZXNvdXJjZSlcbiAgfVxuXG4gIGdldCBub3RpZnkoKSB7XG4gICAgcmV0dXJuIG9wdGlvbnMgPT4ge1xuICAgICAgdGhpcy5jb21wb25lbnQubm90aWZ5KG9wdGlvbnMpXG4gICAgICBzZXQodGhpcywgJ3dhc05vdGlmaWVkJywgdHJ1ZSlcbiAgICB9XG4gIH1cbn1cbiIsImltcG9ydCB7IGlzQXJyYXksIGlzUGxhaW5PYmplY3QgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQge1xuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBsaXN0ZW5lcnM6IG51bGxcbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIC8vIEFzeW5jIG9uKCkgYW5kICRvZmYoKSBtZXRob2RzIHRoYXQga2VlcCB0cmFjayBvZiB0aGUgZXZlbnRzIGFkZGVkIC9cbiAgICAvLyByZW1vdmVkLCBhbmQgcHJvdmlkZSBhIGhhc0xpc3RlbmVycygpIG1ldGhvZCB0aGF0IGNoZWNrcyBpZiB0aGUgY29tcG9uZW50XG4gICAgLy8gaGFzIGxpc3RlbmVycyBmb3IgYSBnaXZlbiBldmVudC5cblxuICAgIC8vIEFsc28gYWRkcyBwcm9wZXIgaGFuZGxpbmcgb2YgYXN5bmMgZXZlbnRzLCBpbmNsdWRpbmcgYSBhc3luYyBlbWl0KCkgdGhhdFxuICAgIC8vIGRlYWxzIHdpdGggcHJvcGVyIGV2ZW50IHF1ZXVlaW5nLlxuICAgIG9uKGV2ZW50LCBjYWxsYmFjaykge1xuICAgICAgaWYgKGlzQXJyYXkoZXZlbnQpKSB7XG4gICAgICAgIGZvciAoY29uc3QgZXYgb2YgZXZlbnQpIHtcbiAgICAgICAgICB0aGlzLm9uKGV2LCBjYWxsYmFjaylcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChpc1BsYWluT2JqZWN0KGV2ZW50KSkge1xuICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBldmVudCkge1xuICAgICAgICAgIHRoaXMub24oa2V5LCBldmVudFtrZXldKVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBsaXN0ZW5lcnMgPSAodGhpcy5saXN0ZW5lcnMgfHw9IE9iamVjdC5jcmVhdGUobnVsbCkpXG4gICAgICAgIGNvbnN0IHsgY2FsbGJhY2tzIH0gPSAobGlzdGVuZXJzW2V2ZW50XSB8fD0ge1xuICAgICAgICAgIGNhbGxiYWNrczogW10sXG4gICAgICAgICAgcXVldWU6IFtdXG4gICAgICAgIH0pXG4gICAgICAgIGNhbGxiYWNrcy5wdXNoKGNhbGxiYWNrKVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXNcbiAgICB9LFxuXG4gICAgb25jZShldmVudCwgY2FsbGJhY2spIHtcbiAgICAgIGNvbnN0IG9uID0gKC4uLmFyZ3MpID0+IHtcbiAgICAgICAgdGhpcy5vZmYoZXZlbnQsIG9uKVxuICAgICAgICByZXR1cm4gY2FsbGJhY2suYXBwbHkodGhpcywgYXJncylcbiAgICAgIH1cbiAgICAgIG9uLmNhbGxiYWNrID0gY2FsbGJhY2sgLy8gTmVlZGVkIGZvciBgb2ZmKClgLCBzZWUgYmVsb3cuXG4gICAgICByZXR1cm4gdGhpcy5vbihldmVudCwgb24pXG4gICAgfSxcblxuICAgIG9mZihldmVudCwgY2FsbGJhY2spIHtcbiAgICAgIGlmICghYXJndW1lbnRzLmxlbmd0aCkge1xuICAgICAgICAvLyBSZW1vdmUgYWxsIGV2ZW50c1xuICAgICAgICBkZWxldGUgdGhpcy5saXN0ZW5lcnNcbiAgICAgIH0gZWxzZSBpZiAoaXNBcnJheShldmVudCkpIHtcbiAgICAgICAgZm9yIChjb25zdCBldiBvZiBldmVudCkge1xuICAgICAgICAgIHRoaXMub2ZmKGV2LCBjYWxsYmFjaylcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChpc1BsYWluT2JqZWN0KGV2ZW50KSkge1xuICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBldmVudCkge1xuICAgICAgICAgIHRoaXMub2ZmKGtleSwgZXZlbnRba2V5XSlcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gUmVtb3ZlIHNwZWNpZmljIGV2ZW50XG4gICAgICAgIGNvbnN0IGVudHJ5ID0gdGhpcy5saXN0ZW5lcnM/LltldmVudF1cbiAgICAgICAgaWYgKGVudHJ5KSB7XG4gICAgICAgICAgaWYgKCFjYWxsYmFjaykge1xuICAgICAgICAgICAgLy8gUmVtb3ZlIGFsbCBoYW5kbGVycyBmb3IgdGhpcyBldmVudFxuICAgICAgICAgICAgZGVsZXRlIHRoaXMubGlzdGVuZXJzW2V2ZW50XVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBSZW1vdmUgYSBzcGVjaWZpYyBoYW5kbGVyOiBmaW5kIHRoZSBpbmRleCBpbiBjYWxsYmFja3NcbiAgICAgICAgICAgIGNvbnN0IHsgY2FsbGJhY2tzIH0gPSBlbnRyeVxuICAgICAgICAgICAgY29uc3QgaW5kZXggPSBjYWxsYmFja3MuZmluZEluZGV4KFxuICAgICAgICAgICAgICAvLyBNYXRjaCBgY2IuY2FsbGJhY2tgIGFsc28sIGFzIHVzZWQgYnkgYG9uY2UoKWAsIHNlZSAgYWJvdmU6XG4gICAgICAgICAgICAgIGNiID0+IGNiID09PSBjYWxsYmFjayB8fCBjYi5jYWxsYmFjayA9PT0gY2FsbGJhY2tcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIGlmIChpbmRleCAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgY2FsbGJhY2tzLnNwbGljZShpbmRleCwgMSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzXG4gICAgfSxcblxuICAgIGVtaXQoZXZlbnQsIC4uLmFyZ3MpIHtcbiAgICAgIC8vIE9ubHkgcXVldWUgZXZlbnQgaWYgdGhlcmUgYWN0dWFsbHkgYXJlIGxpc3RlbmVycyBmb3IgaXQuXG4gICAgICBjb25zdCBlbnRyeSA9IHRoaXMubGlzdGVuZXJzPy5bZXZlbnRdXG4gICAgICBpZiAoZW50cnkpIHtcbiAgICAgICAgY29uc3QgeyBxdWV1ZSwgY2FsbGJhY2tzIH0gPSBlbnRyeVxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgICAgICAgY29uc3QgbmV4dCA9IGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgIC8vIEVtaXQgdGhlIG5leHQgZXZlbnQgaW4gdGhlIHF1ZXVlIHdpdGggaXRzIHBhcmFtcy5cbiAgICAgICAgICAgIC8vIE5vdGUgdGhhdCBpdCBvbmx5IGdldHMgcmVtb3ZlZCBvbmNlIGBuZXh0KClgIGlzIGNhbGxlZC5cbiAgICAgICAgICAgIGNvbnN0IGVudHJ5ID0gcXVldWUuc2hpZnQoKVxuICAgICAgICAgICAgaWYgKGVudHJ5KSB7XG4gICAgICAgICAgICAgIGxldCByZXN1bHRcbiAgICAgICAgICAgICAgZm9yIChjb25zdCBjYWxsYmFjayBvZiBjYWxsYmFja3MpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgY2FsbGJhY2suYXBwbHkodGhpcywgZW50cnkuYXJncylcbiAgICAgICAgICAgICAgICAgIGlmIChyZXMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSByZXNcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgICAgICAgYEVycm9yIGR1cmluZyBldmVudCBoYW5kbGVyIGZvciAnJHtldmVudH0nOmAsXG4gICAgICAgICAgICAgICAgICAgIGVycm9yXG4gICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIC8vIFJlc29sdmUgdGhlIHByb21pc2UgdGhhdCB3YXMgYWRkZWQgdG8gdGhlIHF1ZXVlIGZvciB0aGUgZXZlbnRcbiAgICAgICAgICAgICAgLy8gdGhhdCB3YXMganVzdCBjb21wbGV0ZWQgYnkgdGhlIHdyYXBwZXIgdGhhdCBjYWxsZWQgYG5leHQoKWBcbiAgICAgICAgICAgICAgZW50cnkucmVzb2x2ZShyZXN1bHQpXG4gICAgICAgICAgICAgIG5leHQoKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBxdWV1ZS5wdXNoKHsgYXJncywgcmVzb2x2ZSB9KVxuICAgICAgICAgIC8vIEZvciBuZXcgcXVldWVzICg9IG9ubHkgb25lIGVudHJ5KSBlbWl0IHRoZSBmaXJzdCBldmVudCBpbW1lZGlhdGVseSxcbiAgICAgICAgICAvLyB0byBnZXQgdGhlIHF1ZXVlIHJ1bm5pbmcuXG4gICAgICAgICAgaWYgKHF1ZXVlLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgbmV4dCgpXG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH0sXG5cbiAgICAvLyBDaGVja3MgaWYgdGhlIGNvbXBvbmVudCBoYXMgbGlzdGVuZXJzIGZvciBhIGdpdmVuIGV2ZW50IHR5cGU6XG4gICAgaGFzTGlzdGVuZXJzKGV2ZW50KSB7XG4gICAgICBpZiAoaXNBcnJheShldmVudCkpIHtcbiAgICAgICAgZm9yIChjb25zdCBldiBvZiBldmVudCkge1xuICAgICAgICAgIGlmICghdGhpcy5oYXNMaXN0ZW5lcnMoZXYpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGV2ZW50Lmxlbmd0aCA+IDBcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiAhIXRoaXMubGlzdGVuZXJzPy5bZXZlbnRdXG4gICAgICB9XG4gICAgfSxcblxuICAgIGRlbGVnYXRlKGV2ZW50LCB0YXJnZXQpIHtcbiAgICAgIGlmICh0YXJnZXQpIHtcbiAgICAgICAgaWYgKGlzQXJyYXkoZXZlbnQpKSB7XG4gICAgICAgICAgZm9yIChjb25zdCBldiBvZiBldmVudCkge1xuICAgICAgICAgICAgdGhpcy5kZWxlZ2F0ZShldiwgdGFyZ2V0KVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLm9uKGV2ZW50LCAoLi4uYXJncykgPT4gdGFyZ2V0LmVtaXQoZXZlbnQsIC4uLmFyZ3MpKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpc1xuICAgIH1cbiAgfVxufVxuIiwiaW1wb3J0IHsgaXNDcmVkaXRDYXJkIH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuZXhwb3J0IGNvbnN0IGNyZWRpdGNhcmQgPSB7XG4gIHZhbGlkYXRlOiB2YWx1ZSA9PiBpc0NyZWRpdENhcmQodmFsdWUpLFxuICBtZXNzYWdlOiAnaXMgaW52YWxpZCdcbn1cbiIsImV4cG9ydCBjb25zdCBkZWNpbWFscyA9IHtcbiAgdmFsaWRhdGU6ICh2YWx1ZSwgZGVjaW1hbHMpID0+IHtcbiAgICBjb25zdCBtYXRjaCA9IGRlY2ltYWxzID09PSAnKicgPyAnKycgOiBgezEsJHtkZWNpbWFsc319YFxuICAgIHJldHVybiBuZXcgUmVnRXhwKGBeWy0rXT9cXFxcZCooXFxcXC5cXFxcZCR7bWF0Y2h9KT8kYCkudGVzdCh2YWx1ZSlcbiAgfSxcblxuICBtZXNzYWdlOiAodmFsdWUsIGRlY2ltYWxzKSA9PlxuICAgIGBtdXN0IGJlIG51bWVyaWMgYW5kIG1heSBjb250YWluICR7XG4gICAgICAhZGVjaW1hbHMgfHwgZGVjaW1hbHMgPT09ICcqJyA/ICcnIDogZGVjaW1hbHNcbiAgICB9IGRlY2ltYWwgcG9pbnRzYFxufVxuIiwiaW1wb3J0IHsgaXNFbWFpbCB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbmV4cG9ydCBjb25zdCBlbWFpbCA9IHtcbiAgdmFsaWRhdGU6IHZhbHVlID0+IGlzRW1haWwodmFsdWUpLFxuICBtZXNzYWdlOiAnbXVzdCBiZSBhIHZhbGlkIGVtYWlsJ1xufVxuIiwiaW1wb3J0IHsgaXNIb3N0bmFtZSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbmV4cG9ydCBjb25zdCBob3N0bmFtZSA9IHtcbiAgdmFsaWRhdGU6IHZhbHVlID0+IGlzSG9zdG5hbWUodmFsdWUpLFxuICBtZXNzYWdlOiAnaXMgbm90IGEgaG9zdCBuYW1lJ1xufVxuIiwiaW1wb3J0IHsgaXNEb21haW4gfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG5leHBvcnQgY29uc3QgZG9tYWluID0ge1xuICB2YWxpZGF0ZTogdmFsdWUgPT4gaXNEb21haW4odmFsdWUpLFxuICBtZXNzYWdlOiAnaXMgbm90IGEgZG9tYWluJ1xufVxuIiwiaW1wb3J0IHsgaXNJbnRlZ2VyIH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuZXhwb3J0IGNvbnN0IGludGVnZXIgPSB7XG4gIHZhbGlkYXRlOiB2YWx1ZSA9PiBpc0ludGVnZXIodmFsdWUpLFxuICBtZXNzYWdlOiAnbXVzdCBiZSB3aG9sZSBudW1iZXInXG59XG4iLCJleHBvcnQgY29uc3QgbWF4ID0ge1xuICB2YWxpZGF0ZTogKHZhbHVlLCBtYXgpID0+IHZhbHVlIDw9IG1heCxcbiAgbWVzc2FnZSh2YWx1ZSwgbWF4KSB7XG4gICAgcmV0dXJuIGBtdXN0IGJlICR7bWF4fSBvciBsZXNzYFxuICB9XG59XG4iLCJleHBvcnQgY29uc3QgbWluID0ge1xuICB2YWxpZGF0ZTogKHZhbHVlLCBtaW4pID0+IHZhbHVlID49IG1pbixcbiAgbWVzc2FnZSh2YWx1ZSwgbWluKSB7XG4gICAgcmV0dXJuIGBtdXN0IGJlICR7bWlufSBvciBtb3JlYFxuICB9XG59XG4iLCJleHBvcnQgY29uc3QgcGFzc3dvcmQgPSB7XG4gIC8vIEFsbG93IGFueSB2YWx1ZS4gRm9yIG5vdyB0aGlzIGlzIG9ubHkgdXNlZCBhcyBhIG1hcmtlciwgdG8gYWxsb3cgdGhlXG4gIC8vIHJlcXVpcmVkIHZhbGlkYXRpb24gdG8gaGFuZGxlIHVuY2hhbmdlZCBwYXNzd29yZHMgc2VwYXJhdGVseS5cbiAgdmFsaWRhdGU6ICgpID0+IHRydWVcbn1cbiIsImV4cG9ydCBjb25zdCByYW5nZSA9IHtcbiAgdmFsaWRhdGU6ICh2YWx1ZSwgW21pbiwgbWF4XSkgPT4gdmFsdWUgPj0gbWluICYmIHZhbHVlIDw9IG1heCxcbiAgbWVzc2FnZSh2YWx1ZSwgW21pbiwgbWF4XSkge1xuICAgIHJldHVybiBgbXVzdCBiZSBiZXR3ZWVuICR7bWlufSBhbmQgJHttYXh9YFxuICB9XG59XG4iLCJleHBvcnQgY29uc3QgcmVxdWlyZWQgPSB7XG4gIHZhbGlkYXRlOiAodmFsdWUsIHNldHRpbmdzLCB7IHBhc3N3b3JkIH0pID0+IChcbiAgICAodmFsdWUgIT0gbnVsbCAmJiB2YWx1ZSAhPT0gJycpIHx8XG4gICAgLy8gUGFzc3dvcmQgZmllbGRzIHVzZSBgdW5kZWZpbmVkYCBhcyBvcHBvc2VkIHRvIGBudWxsYCB3aGVuIHRoZXkncmUgc2V0XG4gICAgLy8gYnV0IHVuY2hhbmdlZCwgYWxsb3cgdGhpcyB0byBwYXNzIHRocm91Z2g6XG4gICAgKHBhc3N3b3JkICYmIHZhbHVlID09PSB1bmRlZmluZWQpXG4gICksXG4gIG1lc3NhZ2U6ICdpcyByZXF1aXJlZCcsXG4gIG51bGxpc2g6IHRydWVcbn1cbiIsImltcG9ydCB7IGlzVXJsIH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuZXhwb3J0IGNvbnN0IHVybCA9IHtcbiAgdmFsaWRhdGU6IHZhbHVlID0+IGlzVXJsKHZhbHVlKSxcbiAgbWVzc2FnZTogJ2lzIG5vdCBhIHZhbGlkIFVSTCdcbn1cbiIsImltcG9ydCB7IGlzRnVuY3Rpb24gfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0ICogYXMgdmFsaWRhdGlvbnMgZnJvbSAnLi4vdmFsaWRhdGlvbnMvaW5kZXguanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCB7XG4gIGVtaXRzOiBbJ2Vycm9ycyddLFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlzVG91Y2hlZDogZmFsc2UsXG4gICAgICBpc0RpcnR5OiBmYWxzZSxcbiAgICAgIGlzVmFsaWRhdGVkOiBmYWxzZSxcbiAgICAgIGlzVmFsaWQ6IGZhbHNlLFxuICAgICAgZXJyb3JzOiBudWxsXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgaGFzRXJyb3JzKCkge1xuICAgICAgcmV0dXJuICEhdGhpcy5lcnJvcnNcbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIHJlc2V0VmFsaWRhdGlvbigpIHtcbiAgICAgIHRoaXMuaXNUb3VjaGVkID0gZmFsc2VcbiAgICAgIHRoaXMuaXNEaXJ0eSA9IGZhbHNlXG4gICAgICB0aGlzLmlzVmFsaWRhdGVkID0gZmFsc2VcbiAgICAgIHRoaXMuaXNWYWxpZCA9IGZhbHNlXG4gICAgICB0aGlzLmNsZWFyRXJyb3JzKClcbiAgICB9LFxuXG4gICAgdmFsaWRhdGUobm90aWZ5ID0gdHJ1ZSkge1xuICAgICAgbGV0IGlzVmFsaWQgPSB0cnVlXG4gICAgICBpZiAobm90aWZ5KSB7XG4gICAgICAgIHRoaXMuY2xlYXJFcnJvcnMoKVxuICAgICAgfVxuICAgICAgY29uc3QgeyB2YWx1ZSB9ID0gdGhpc1xuICAgICAgLy8gY29uc29sZS5sb2coJ3ZhbGlkYXRlJywgdGhpcy5kYXRhUGF0aCwgdmFsdWUsIHRoaXMudmFsaWRhdGlvbnMpXG4gICAgICBmb3IgKGNvbnN0IFtydWxlLCBzZXR0aW5nXSBvZiBPYmplY3QuZW50cmllcyh0aGlzLnZhbGlkYXRpb25zKSkge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25hbWVzcGFjZVxuICAgICAgICBjb25zdCB2YWxpZGF0b3IgPSB2YWxpZGF0aW9uc1tydWxlXVxuICAgICAgICBpZiAodmFsaWRhdG9yICYmICh2YWxpZGF0b3IubnVsbGlzaCB8fCB2YWx1ZSAhPSBudWxsKSkge1xuICAgICAgICAgIGNvbnN0IHsgdmFsaWRhdGUsIG1lc3NhZ2UgfSA9IHZhbGlkYXRvclxuICAgICAgICAgIGlmICghdmFsaWRhdGUodmFsdWUsIHNldHRpbmcsIHRoaXMudmFsaWRhdGlvbnMpKSB7XG4gICAgICAgICAgICBpc1ZhbGlkID0gZmFsc2VcbiAgICAgICAgICAgIGlmIChub3RpZnkpIHtcbiAgICAgICAgICAgICAgY29uc3QgZXJyb3IgPSBpc0Z1bmN0aW9uKG1lc3NhZ2UpXG4gICAgICAgICAgICAgICAgPyBtZXNzYWdlKHZhbHVlLCBzZXR0aW5nLCB0aGlzKVxuICAgICAgICAgICAgICAgIDogbWVzc2FnZVxuICAgICAgICAgICAgICB0aGlzLmFkZEVycm9yKGVycm9yLCB0cnVlKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKG5vdGlmeSkge1xuICAgICAgICB0aGlzLmlzVmFsaWRhdGVkID0gdHJ1ZVxuICAgICAgICB0aGlzLmlzVmFsaWQgPSBpc1ZhbGlkXG4gICAgICB9XG4gICAgICByZXR1cm4gaXNWYWxpZFxuICAgIH0sXG5cbiAgICB2ZXJpZnkoKSB7XG4gICAgICByZXR1cm4gdGhpcy52YWxpZGF0ZShmYWxzZSlcbiAgICB9LFxuXG4gICAgbWFya1RvdWNoZWQoKSB7XG4gICAgICB0aGlzLmlzVG91Y2hlZCA9IHRydWVcbiAgICAgIC8vIENsZWFyIGN1cnJlbnRseSBkaXNwbGF5ZWQgZXJyb3JzIHdoZW4gZm9jdXNpbmcgaW5wdXQuXG4gICAgICB0aGlzLmNsZWFyRXJyb3JzKClcbiAgICB9LFxuXG4gICAgbWFya0RpcnR5KCkge1xuICAgICAgdGhpcy5pc0RpcnR5ID0gdHJ1ZVxuICAgICAgdGhpcy5pc1ZhbGlkYXRlZCA9IGZhbHNlXG4gICAgICB0aGlzLmlzVmFsaWQgPSBmYWxzZVxuICAgICAgLy8gQ2xlYXIgY3VycmVudGx5IGRpc3BsYXllZCBlcnJvcnMgb24gbmV3IGlucHV0LlxuICAgICAgdGhpcy5jbGVhckVycm9ycygpXG4gICAgfSxcblxuICAgIGFkZEVycm9yKGVycm9yLCBhZGRMYWJlbCA9IGZhbHNlKSB7XG4gICAgICB0aGlzLmVycm9ycyB8fD0gW11cbiAgICAgIGlmIChhZGRMYWJlbCkge1xuICAgICAgICBjb25zdCBsYWJlbCA9IHRoaXMubGFiZWwgfHwgdGhpcy5wbGFjZWhvbGRlciB8fCB0aGlzLm5hbWVcbiAgICAgICAgZXJyb3IgPSBgVGhlICR7bGFiZWx9IGZpZWxkICR7ZXJyb3J9LmBcbiAgICAgIH1cbiAgICAgIHRoaXMuZXJyb3JzLnB1c2goZXJyb3IpXG4gICAgICB0aGlzLiRlbWl0KCdlcnJvcnMnLCB0aGlzLmVycm9ycylcbiAgICB9LFxuXG4gICAgc2hvd1ZhbGlkYXRpb25FcnJvcnMoZXJyb3JzLCBmb2N1cykge1xuICAgICAgLy8gQ29udmVydCBmcm9tIEFKViBlcnJvcnMgb2JqZWN0cyB0byBhbiBhcnJheSBvZiBlcnJvciBtZXNzYWdlc1xuICAgICAgdGhpcy5lcnJvcnMgPSBbXVxuICAgICAgZm9yIChjb25zdCB7IG1lc3NhZ2UgfSBvZiBlcnJvcnMpIHtcbiAgICAgICAgdGhpcy5hZGRFcnJvcihtZXNzYWdlLCB0cnVlKVxuICAgICAgfVxuICAgICAgaWYgKGZvY3VzKSB7XG4gICAgICAgIHRoaXMuc2Nyb2xsSW50b1ZpZXcoKVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRydWVcbiAgICB9LFxuXG4gICAgZ2V0RXJyb3JzKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZXJyb3JzID8gWy4uLnRoaXMuZXJyb3JzXSA6IG51bGxcbiAgICB9LFxuXG4gICAgY2xlYXJFcnJvcnMoKSB7XG4gICAgICB0aGlzLmVycm9ycyA9IG51bGxcbiAgICAgIHRoaXMuJGVtaXQoJ2Vycm9ycycsIHRoaXMuZXJyb3JzKVxuICAgIH1cbiAgfVxufVxuIiwiaW1wb3J0IHtcbiAgaXNGdW5jdGlvbixcbiAgaXNTdHJpbmcsXG4gIHBhcnNlRGF0YVBhdGgsXG4gIG5vcm1hbGl6ZURhdGFQYXRoXG59IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRTY2hlbWFBY2Nlc3NvcihcbiAga2V5T3JEYXRhUGF0aCxcbiAgeyB0eXBlLCBkZWZhdWx0OiBkZWYsIGdldCwgc2V0LCBjYWxsYmFjayA9IHRydWUgfSA9IHt9XG4pIHtcbiAgLy8gYGtleU9yRGF0YVBhdGhgIGNhbiBiZSBhIHNpbXBsZSBwcm9wZXJ0eSBrZXksXG4gIC8vIG9yIGEgZGF0YS1wYXRoIGludG8gc3ViLXByb3BlcnRpZXMsIGJvdGggaW4gYXJyYXkgb3Igc3RyaW5nIGZvcm1hdC5cbiAgaWYgKGlzU3RyaW5nKGtleU9yRGF0YVBhdGgpICYmIGtleU9yRGF0YVBhdGguaW5jbHVkZXMoJy4nKSkge1xuICAgIGtleU9yRGF0YVBhdGggPSBwYXJzZURhdGFQYXRoKGtleU9yRGF0YVBhdGgpXG4gIH1cbiAgLy8gVXNlIHRoZSBub3JtYWxpemVkIGRhdGEgcGF0aCBmb3IgdGhlIGhhbmRsaW5nIG92ZXJyaWRlc1xuICBjb25zdCBuYW1lID0gbm9ybWFsaXplRGF0YVBhdGgoa2V5T3JEYXRhUGF0aClcbiAgcmV0dXJuIHtcbiAgICBnZXQoKSB7XG4gICAgICAvLyBPbmx5IGRldGVybWluZSBzY2hlbWEgdmFsdWUgaWYgd2UgaGF2ZSBubyBnZXR0ZXIsIG9yIHRoZSBnZXR0ZXJcbiAgICAgIC8vIHdhbnRzIHRvIHJlY2VpdmUgdGhlIHZhbHVlIGFuZCBwcm9jZXNzIGl0IGZ1cnRoZXI6XG4gICAgICBjb25zdCB2YWx1ZSA9XG4gICAgICAgICFnZXQgfHwgZ2V0Lmxlbmd0aCA+IDBcbiAgICAgICAgICA/IC8vIE5PVEU6IEJlY2F1c2UgYHNjaGVtYWAgb2JqZWN0cyBhcmUgcmV0cmlldmVkIGZyb20gYG1ldGFgLCB0aGV5XG4gICAgICAgICAgICAvLyBkb24ndCBzZWVtIHRvIGJlIHJlYWN0aXZlLiBUbyBhbGxvdyBjaGFuZ2VkIGluIGBzY2hlbWFgIHZhbHVlcyxcbiAgICAgICAgICAgIC8vIGBzZXQoKWAgc3RvcmVzIGNoYW5nZWQgdmFsdWVzIGluIHRoZSBzZXBhcmF0ZSBgb3ZlcnJpZGVzYCBvYmplY3QuXG4gICAgICAgICAgICB0aGlzLm92ZXJyaWRlcyAmJiBuYW1lIGluIHRoaXMub3ZlcnJpZGVzXG4gICAgICAgICAgICA/IHRoaXMub3ZlcnJpZGVzW25hbWVdXG4gICAgICAgICAgICA6IHRoaXMuZ2V0U2NoZW1hVmFsdWUoa2V5T3JEYXRhUGF0aCwge1xuICAgICAgICAgICAgICAgIHR5cGUsXG4gICAgICAgICAgICAgICAgZGVmYXVsdDogZGVmLFxuICAgICAgICAgICAgICAgIGNhbGxiYWNrXG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgOiB1bmRlZmluZWRcbiAgICAgIHJldHVybiBnZXQgPyBnZXQuY2FsbCh0aGlzLCB2YWx1ZSkgOiB2YWx1ZVxuICAgIH0sXG5cbiAgICBzZXQodmFsdWUpIHtcbiAgICAgIGlmIChzZXQpIHtcbiAgICAgICAgc2V0LmNhbGwodGhpcywgdmFsdWUpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLm92ZXJyaWRlcyB8fD0ge31cbiAgICAgICAgdGhpcy5vdmVycmlkZXNbbmFtZV0gPSB2YWx1ZVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0U3RvcmVBY2Nlc3NvcihuYW1lLCB7IGRlZmF1bHQ6IGRlZiwgZ2V0LCBzZXQgfSA9IHt9KSB7XG4gIHJldHVybiB7XG4gICAgZ2V0KCkge1xuICAgICAgbGV0IHZhbHVlID0gdGhpcy5nZXRTdG9yZShuYW1lKVxuICAgICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQgJiYgZGVmICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgLy8gU3VwcG9ydCBgZGVmYXVsdCgpYCBmdW5jdGlvbnM6XG4gICAgICAgIHZhbHVlID0gaXNGdW5jdGlvbihkZWYpID8gZGVmLmNhbGwodGhpcykgOiBkZWZcbiAgICAgICAgLy8gVHJpZ2dlciBzZXR0ZXIgYnkgc2V0dGluZyB2YWx1ZSBhbmQgYWNjZXNzb3IgdG8gZGVmYXVsdDpcbiAgICAgICAgdGhpc1tuYW1lXSA9IHZhbHVlXG4gICAgICAgIC8vIE5vdyBhY2Nlc3Mgc3RvcmUgYWdhaW4sIGZvciByZWFjdGl2aXR5IHRyYWNraW5nXG4gICAgICAgIHRoaXMuZ2V0U3RvcmUobmFtZSlcbiAgICAgIH1cbiAgICAgIC8vIEFsbG93IHRoZSBwcm92aWRlZCBnZXR0ZXIgdG8gZnVydGhlciBjaGFuZ2Ugb3IgcHJvY2VzcyB0aGUgdmFsdWVcbiAgICAgIC8vIHJldHJpZXZlZCBmcm9tIHRoZSBzdG9yZTpcbiAgICAgIHJldHVybiBnZXQgPyBnZXQuY2FsbCh0aGlzLCB2YWx1ZSkgOiB2YWx1ZVxuICAgIH0sXG5cbiAgICBzZXQodmFsdWUpIHtcbiAgICAgIC8vIEFsbG93IHRoZSBwcm92aWRlZCBzZXR0ZXIgdG8gcmV0dXJuIGEgbmV3IHZhbHVlIHRvIHNldCwgb3IgZG8gdGhlXG4gICAgICAvLyBzZXR0aW5nIGl0c2VsZiwgYW5kIHRoZW4gcmV0dXJuIGB1bmRlZmluZWRgOlxuICAgICAgaWYgKCFzZXQgfHwgKHZhbHVlID0gc2V0LmNhbGwodGhpcywgdmFsdWUpKSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMuc2V0U3RvcmUobmFtZSwgdmFsdWUpXG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iLCJpbXBvcnQgRGl0b0NvbnRleHQgZnJvbSAnLi4vRGl0b0NvbnRleHQuanMnXG5pbXBvcnQgVmFsaWRhdGlvbk1peGluIGZyb20gJy4vVmFsaWRhdGlvbk1peGluLmpzJ1xuaW1wb3J0IHsgZ2V0U2NoZW1hQWNjZXNzb3IgfSBmcm9tICcuLi91dGlscy9hY2Nlc3Nvci5qcydcbmltcG9ydCB7IGNvbXB1dGVWYWx1ZSB9IGZyb20gJy4uL3V0aWxzL3NjaGVtYS5qcydcbmltcG9ydCB7IGdldEl0ZW0sIGdldFBhcmVudEl0ZW0gfSBmcm9tICcuLi91dGlscy9kYXRhLmpzJ1xuaW1wb3J0IHsgYXNBcnJheSwgY2FtZWxpemUgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQge1xuICBtaXhpbnM6IFtWYWxpZGF0aW9uTWl4aW5dLFxuXG4gIHByb3BzOiB7XG4gICAgc2NoZW1hOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICAvLyBOT1RFOiBXaGlsZSBgZGF0YVBhdGhgIHBvaW50cyB0byB0aGUgYWN0dWFsIGB2YWx1ZWAsIGBkYXRhYCByZXByZXNlbnRzXG4gICAgLy8gdGhlIGBpdGVtYCBpbiB3aGljaCB0aGUgYHZhbHVlYCBpcyBjb250YWluZWQsIHVuZGVyIHRoZSBrZXkgYG5hbWVgLlxuICAgIGRhdGFQYXRoOiB7IHR5cGU6IFN0cmluZywgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBkYXRhOiB7IHR5cGU6IFtPYmplY3QsIEFycmF5XSwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBtZXRhOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBzdG9yZTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgd2lkdGg6IHsgdHlwZTogW051bWJlciwgU3RyaW5nXSwgZGVmYXVsdDogbnVsbCB9LFxuICAgIGxhYmVsOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogbnVsbCB9LFxuICAgIHNpbmdsZTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIG5lc3RlZDogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiB0cnVlIH0sXG4gICAgZGlzYWJsZWQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBhY2N1bXVsYXRlZEJhc2lzOiB7IHR5cGU6IE51bWJlciwgZGVmYXVsdDogbnVsbCB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgcGFyc2VkVmFsdWU6IHVuZGVmaW5lZCxcbiAgICAgIGZvY3VzZWQ6IGZhbHNlXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgbmFtZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYS5uYW1lXG4gICAgfSxcblxuICAgIHR5cGUoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWEudHlwZVxuICAgIH0sXG5cbiAgICBjb250ZXh0KCkge1xuICAgICAgcmV0dXJuIG5ldyBEaXRvQ29udGV4dCh0aGlzLCB7IG5lc3RlZDogdGhpcy5uZXN0ZWQgfSlcbiAgICB9LFxuXG4gICAgdmFsdWU6IHtcbiAgICAgIGdldCgpIHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBjb21wdXRlVmFsdWUoXG4gICAgICAgICAgdGhpcy5zY2hlbWEsXG4gICAgICAgICAgdGhpcy5kYXRhLFxuICAgICAgICAgIHRoaXMubmFtZSxcbiAgICAgICAgICB0aGlzLmRhdGFQYXRoLFxuICAgICAgICAgIHsgY29tcG9uZW50OiB0aGlzIH1cbiAgICAgICAgKVxuICAgICAgICBjb25zdCB7IGZvcm1hdCB9ID0gdGhpcy5zY2hlbWFcbiAgICAgICAgcmV0dXJuIGZvcm1hdFxuICAgICAgICAgID8gZm9ybWF0KG5ldyBEaXRvQ29udGV4dCh0aGlzLCB7IHZhbHVlIH0pKVxuICAgICAgICAgIDogdmFsdWVcbiAgICAgIH0sXG5cbiAgICAgIHNldCh2YWx1ZSkge1xuICAgICAgICBjb25zdCB7IHBhcnNlIH0gPSB0aGlzLnNjaGVtYVxuICAgICAgICBpZiAocGFyc2UpIHtcbiAgICAgICAgICB2YWx1ZSA9IHBhcnNlKG5ldyBEaXRvQ29udGV4dCh0aGlzLCB7IHZhbHVlIH0pKVxuICAgICAgICB9XG4gICAgICAgIHRoaXMucGFyc2VkVmFsdWUgPSB2YWx1ZVxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgdnVlL25vLW11dGF0aW5nLXByb3BzXG4gICAgICAgIHRoaXMuZGF0YVt0aGlzLm5hbWVdID0gdmFsdWVcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgcGFyZW50RGF0YSgpIHtcbiAgICAgIGNvbnN0IGRhdGEgPSBnZXRQYXJlbnRJdGVtKHRoaXMucm9vdERhdGEsIHRoaXMuZGF0YVBhdGgsIHRoaXMubmVzdGVkKVxuICAgICAgcmV0dXJuIGRhdGEgIT09IHRoaXMuZGF0YSA/IGRhdGEgOiBudWxsXG4gICAgfSxcblxuICAgIHByb2Nlc3NlZERhdGEoKSB7XG4gICAgICAvLyBXZSBjYW4gb25seSBnZXQgdGhlIHByb2Nlc3NlZCBkYXRhIHRocm91Z2ggdGhlIHNjaGVtYUNvbXBvbmVudCwgYnV0XG4gICAgICAvLyB0aGF0J3Mgbm90IG5lY2Vzc2FyaWx5IHRoZSBpdGVtIHJlcHJlc2VudGVkIGJ5IHRoaXMgY29tcG9uZW50LlxuICAgICAgLy8gU29sdXRpb246IEZpbmQgdGhlIHJlbGF0aXZlIHBhdGggYW5kIHRoZSBwcm9jZXNzZWQgc3ViLWl0ZW0gZnJvbSB0aGVyZTpcbiAgICAgIGNvbnN0IHsgc2NoZW1hQ29tcG9uZW50IH0gPSB0aGlzXG4gICAgICByZXR1cm4gZ2V0SXRlbShcbiAgICAgICAgc2NoZW1hQ29tcG9uZW50LnByb2Nlc3NlZERhdGEsXG4gICAgICAgIC8vIEdldCB0aGUgZGF0YVBhdGggcmVsYXRpdmUgdG8gdGhlIHNjaGVtYUNvbXBvbmVudCdzIGRhdGE6XG4gICAgICAgIHRoaXMuZGF0YVBhdGguc2xpY2Uoc2NoZW1hQ29tcG9uZW50LmRhdGFQYXRoLmxlbmd0aCksXG4gICAgICAgIHRoaXMubmVzdGVkXG4gICAgICApXG4gICAgfSxcblxuICAgIC8vIFRoZSBmb2xsb3dpbmcgY29tcHV0ZWQgcHJvcGVydGllcyBhcmUgc2ltaWxhciB0byBgRGl0b0NvbnRleHRgXG4gICAgLy8gcHJvcGVydGllcywgc28gdGhhdCB3ZSBjYW4gYWNjZXNzIHRoZXNlIG9uIGB0aGlzYCBhcyB3ZWxsOlxuICAgIGl0ZW0oKSB7XG4gICAgICByZXR1cm4gdGhpcy5kYXRhXG4gICAgfSxcblxuICAgIHBhcmVudEl0ZW0oKSB7XG4gICAgICByZXR1cm4gdGhpcy5wYXJlbnREYXRhXG4gICAgfSxcblxuICAgIHJvb3RJdGVtKCkge1xuICAgICAgcmV0dXJuIHRoaXMucm9vdERhdGFcbiAgICB9LFxuXG4gICAgcHJvY2Vzc2VkSXRlbSgpIHtcbiAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NlZERhdGFcbiAgICB9LFxuXG4gICAgbGFiZWxOb2RlKCkge1xuICAgICAgY29uc3Qgbm9kZSA9IHRoaXMuaXNNb3VudGVkID8gdGhpcy4kZWwucHJldmlvdXNFbGVtZW50U2libGluZyA6IG51bGxcbiAgICAgIHJldHVybiBub2RlPy5tYXRjaGVzKCcuZGl0by1sYWJlbCcpID8gbm9kZSA6IG51bGxcbiAgICB9LFxuXG4gICAgdmlzaWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ3Zpc2libGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuJG9wdGlvbnMuZGVmYXVsdFZpc2libGVcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIC8vIFRPRE86IFJlbmFtZSB0byBgZXhjbHVkZWRgIGZvciBjb25zaXN0ZW50IG5hbWluZz9cbiAgICBleGNsdWRlOiBnZXRTY2hlbWFBY2Nlc3NvcignZXhjbHVkZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0pLFxuXG4gICAgcmVxdWlyZWQ6IGdldFNjaGVtYUFjY2Vzc29yKCdyZXF1aXJlZCcsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0pLFxuXG4gICAgLy8gVE9ETzogTW92ZSB0aGVzZSB0byBhIHN1Yi1jbGFzcyBjb21wb25lbnQgdXNlZCBmb3IgYWxsIGlucHV0IGNvbXBvbmVudHM/XG4gICAgcmVhZG9ubHk6IGdldFNjaGVtYUFjY2Vzc29yKCdyZWFkb25seScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0pLFxuXG4gICAgYXV0b2ZvY3VzOiBnZXRTY2hlbWFBY2Nlc3NvcignYXV0b2ZvY3VzJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfSksXG5cbiAgICAvLyBUbyBiZSB1c2VkIGZvciBzZWxlY3RzIGFuZCBpbnB1dHMgb25seT9cbiAgICBjbGVhcmFibGU6IGdldFNjaGVtYUFjY2Vzc29yKCdjbGVhcmFibGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9KSxcblxuICAgIHBsYWNlaG9sZGVyOiBnZXRTY2hlbWFBY2Nlc3NvcigncGxhY2Vob2xkZXInLCB7XG4gICAgICB0eXBlOiBTdHJpbmdcbiAgICB9KSxcblxuICAgIGF1dG9jb21wbGV0ZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ2F1dG9jb21wbGV0ZScsIHtcbiAgICAgIHR5cGU6IFN0cmluZ1xuICAgIH0pLFxuXG4gICAgZXZlbnRzKCkge1xuICAgICAgY29uc3QgZXZlbnRzID0gdGhpcy5nZXRFdmVudHMoKVxuICAgICAgLy8gUmVnaXN0ZXIgY2FsbGJhY2tzIGZvciBhbGwgcHJvdmlkZXMgbm9uLXJlY29nbml6ZWQgZXZlbnRzLFxuICAgICAgLy8gYXNzdW1pbmcgdGhleSBhcmUgbmF0aXZlIGV2ZW50cy5cbiAgICAgIC8vIFRPRE86IE1vdmUgdG8gdnVlMy1zdHlsZSBgb25bQS1aXWAgZXZlbnQgaGFuZGxlcnMgbmFtaW5nIHRoYXQgYXJlbid0XG4gICAgICAvLyBuYW1lc3BhY2VkIGluIGBzY2hlbWEuZXZlbnRzYCBvbmNlIHRoZSB0cmFuc2l0aW9uIGlzIGNvbXBsZXRlLlxuICAgICAgZm9yIChjb25zdCBldmVudCBvZiBPYmplY3Qua2V5cyh0aGlzLnNjaGVtYS5ldmVudHMgfHwge30pKSB7XG4gICAgICAgIGV2ZW50c1tgb24ke2NhbWVsaXplKGV2ZW50LCB0cnVlKX1gXSA/Pz0gKCkgPT4ge1xuICAgICAgICAgIHRoaXMuZW1pdEV2ZW50KGV2ZW50KVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gZXZlbnRzXG4gICAgfSxcblxuICAgIGF0dHJpYnV0ZXMoKSB7XG4gICAgICBjb25zdCB7IG5hdGl2ZUZpZWxkLCB0ZXh0RmllbGQgfSA9IHRoaXMuJG9wdGlvbnNcblxuICAgICAgY29uc3QgYXR0cmlidXRlcyA9IHtcbiAgICAgICAgLi4udGhpcy5ldmVudHMsXG4gICAgICAgIGRpc2FibGVkOiB0aGlzLmRpc2FibGVkXG4gICAgICB9XG5cbiAgICAgIGlmIChuYXRpdmVGaWVsZCkge1xuICAgICAgICBhdHRyaWJ1dGVzLm5hbWUgPSB0aGlzLm5hbWVcbiAgICAgICAgaWYgKHRoaXMubGFiZWwpIHtcbiAgICAgICAgICBhdHRyaWJ1dGVzLnRpdGxlID0gdGhpcy5sYWJlbFxuICAgICAgICB9XG4gICAgICAgIGF0dHJpYnV0ZXMucmVhZG9ubHkgPSB0aGlzLnJlYWRvbmx5XG4gICAgICAgIGF0dHJpYnV0ZXMuYXV0b2ZvY3VzID0gdGhpcy5hdXRvZm9jdXNcbiAgICAgICAgaWYgKHRleHRGaWVsZCkge1xuICAgICAgICAgIGF0dHJpYnV0ZXMucGxhY2Vob2xkZXIgPSB0aGlzLnBsYWNlaG9sZGVyXG4gICAgICAgICAgYXR0cmlidXRlcy5hdXRvY29tcGxldGUgPSB0aGlzLmF1dG9jb21wbGV0ZVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBhdHRyaWJ1dGVzXG4gICAgfSxcblxuICAgIHZhbGlkYXRpb25zKCkge1xuICAgICAgY29uc3QgdmFsaWRhdGlvbnMgPSB7IC4uLnRoaXMuZ2V0VmFsaWRhdGlvbnMoKSB9XG4gICAgICBpZiAodGhpcy5yZXF1aXJlZCkge1xuICAgICAgICB2YWxpZGF0aW9ucy5yZXF1aXJlZCA9IHRydWVcbiAgICAgIH1cbiAgICAgIC8vIEFsbG93IHNjaGVtYSB0byBvdmVycmlkZSBkZWZhdWx0IHJ1bGVzIGFuZCBhZGQgYW55IG5ldyBvbmVzOlxuICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXModGhpcy5zY2hlbWEucnVsZXMgfHwge30pKSB7XG4gICAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgZGVsZXRlIHZhbGlkYXRpb25zW2tleV1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2YWxpZGF0aW9uc1trZXldID0gdmFsdWVcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHZhbGlkYXRpb25zXG4gICAgfSxcblxuICAgIHNob3dDbGVhckJ1dHRvbigpIHtcbiAgICAgIHJldHVybiB0aGlzLmNsZWFyYWJsZSAmJiB0aGlzLnZhbHVlICE9IG51bGxcbiAgICB9XG4gIH0sXG5cbiAgY3JlYXRlZCgpIHtcbiAgICB0aGlzLl9yZWdpc3Rlcih0cnVlKVxuICAgIHRoaXMuc2V0dXBTY2hlbWFGaWVsZHMoKVxuICB9LFxuXG4gIHVubW91bnRlZCgpIHtcbiAgICB0aGlzLl9yZWdpc3RlcihmYWxzZSlcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgX3JlZ2lzdGVyKGFkZCkge1xuICAgICAgLy8gUHJldmVudCB1bm5lc3RlZCB0eXBlIGNvbXBvbmVudHMgZnJvbSBvdmVycmlkaW5nIHBhcmVudCBkYXRhIHBhdGhzXG4gICAgICBpZiAodGhpcy5uZXN0ZWQpIHtcbiAgICAgICAgdGhpcy5zY2hlbWFDb21wb25lbnQuX3JlZ2lzdGVyQ29tcG9uZW50KHRoaXMsIGFkZClcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgLy8gQG92ZXJyaWRhYmxlXG4gICAgZ2V0RXZlbnRzKCkge1xuICAgICAgY29uc3QgeyBvbkZvY3VzLCBvbkJsdXIsIG9uSW5wdXQsIG9uQ2hhbmdlIH0gPSB0aGlzXG4gICAgICByZXR1cm4geyBvbkZvY3VzLCBvbkJsdXIsIG9uSW5wdXQsIG9uQ2hhbmdlIH1cbiAgICB9LFxuXG4gICAgLy8gQG92ZXJyaWRhYmxlXG4gICAgZ2V0VmFsaWRhdGlvbnMoKSB7XG4gICAgICByZXR1cm4gbnVsbFxuICAgIH0sXG5cbiAgICAvLyBAb3ZlcnJpZGFibGVcbiAgICBhc3luYyBzY3JvbGxJbnRvVmlldygpIHtcbiAgICAgIGF3YWl0IHRoaXMuZm9jdXNTY2hlbWEoKVxuICAgICAgdGhpcy5nZXRGb2N1c0VsZW1lbnQoKT8uc2Nyb2xsSW50b1ZpZXc/Lih7XG4gICAgICAgIGJlaGF2aW9yOiAnc21vb3RoJyxcbiAgICAgICAgYmxvY2s6ICdjZW50ZXInXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICAvLyBAb3ZlcnJpZGFibGVcbiAgICBmb2N1c0VsZW1lbnQoKSB7XG4gICAgICB0aGlzLmdldEZvY3VzRWxlbWVudCgpPy5mb2N1cz8uKClcbiAgICB9LFxuXG4gICAgLy8gQG92ZXJyaWRhYmxlXG4gICAgYmx1ckVsZW1lbnQoKSB7XG4gICAgICB0aGlzLmdldEZvY3VzRWxlbWVudCgpPy5ibHVyPy4oKVxuICAgIH0sXG5cbiAgICBnZXRGb2N1c0VsZW1lbnQoKSB7XG4gICAgICBjb25zdCBlbGVtZW50ID0gYXNBcnJheSh0aGlzLiRyZWZzLmVsZW1lbnQpWzBdID8/IHRoaXNcbiAgICAgIHJldHVybiBlbGVtZW50LiRlbCA/PyBlbGVtZW50XG4gICAgfSxcblxuICAgIGFzeW5jIGZvY3VzU2NoZW1hKCkge1xuICAgICAgLy8gQWxzbyBmb2N1cyB0aGlzIGNvbXBvbmVudCdzIHNjaGVtYSBhbmQgcGFuZWwgaW4gY2FzZSBpdCdzIGEgdGFiLlxuICAgICAgYXdhaXQgdGhpcy5zY2hlbWFDb21wb25lbnQuZm9jdXMoKVxuICAgICAgYXdhaXQgdGhpcy50YWJDb21wb25lbnQ/LmZvY3VzKClcbiAgICB9LFxuXG4gICAgYXN5bmMgZm9jdXMoKSB7XG4gICAgICBhd2FpdCB0aGlzLmZvY3VzU2NoZW1hKClcbiAgICAgIHRoaXMuc2Nyb2xsSW50b1ZpZXcoKVxuICAgICAgdGhpcy5mb2N1c0VsZW1lbnQoKVxuICAgIH0sXG5cbiAgICBibHVyKCkge1xuICAgICAgdGhpcy5ibHVyRWxlbWVudCgpXG4gICAgfSxcblxuICAgIGNsZWFyKCkge1xuICAgICAgdGhpcy52YWx1ZSA9IG51bGxcbiAgICAgIHRoaXMuYmx1cigpXG4gICAgICB0aGlzLm9uQ2hhbmdlKClcbiAgICB9LFxuXG4gICAgb25Gb2N1cygpIHtcbiAgICAgIHRoaXMuZm9jdXNlZCA9IHRydWVcbiAgICAgIHRoaXMubWFya1RvdWNoZWQoKVxuICAgICAgdGhpcy5lbWl0RXZlbnQoJ2ZvY3VzJylcbiAgICB9LFxuXG4gICAgb25CbHVyKCkge1xuICAgICAgdGhpcy5mb2N1c2VkID0gZmFsc2VcbiAgICAgIHRoaXMudmFsaWRhdGUoKVxuICAgICAgdGhpcy5lbWl0RXZlbnQoJ2JsdXInKVxuICAgIH0sXG5cbiAgICBvbklucHV0KCkge1xuICAgICAgdGhpcy5tYXJrRGlydHkoKVxuICAgICAgdGhpcy5lbWl0RXZlbnQoJ2lucHV0JylcbiAgICB9LFxuXG4gICAgb25DaGFuZ2UoKSB7XG4gICAgICB0aGlzLm1hcmtEaXJ0eSgpXG4gICAgICB0aGlzLmVtaXRFdmVudCgnY2hhbmdlJywge1xuICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgLy8gUHJldmVudCBlbmRsZXNzIHBhcnNlIHJlY3Vyc2lvbjpcbiAgICAgICAgICB2YWx1ZTogdGhpcy5wYXJzZWRWYWx1ZSAhPT0gdW5kZWZpbmVkID8gdGhpcy5wYXJzZWRWYWx1ZSA6IHRoaXMudmFsdWVcbiAgICAgICAgfSxcbiAgICAgICAgLy8gUGFzcyBgc2NoZW1hQ29tcG9uZW50YCBhcyBwYXJlbnQsIHNvIGNoYW5nZSBldmVudHMgY2FuIHByb3BhZ2F0ZSB1cC5cbiAgICAgICAgcGFyZW50OiB0aGlzLnNjaGVtYUNvbXBvbmVudFxuICAgICAgfSlcbiAgICB9XG4gIH1cbn1cbiIsImltcG9ydCB7IHRvUmF3IH0gZnJvbSAndnVlJ1xuXG5jb25zdCB1aWRNYXAgPSBuZXcgV2Vha01hcCgpXG5cbi8vIEdlbmVyYXRlZCBhbmQgcmVtZW1iZXJzIHVuaXF1ZSBpZHMgcGVyIHBhc3NlZCBvYmplY3QgdXNpbmcgYSB3ZWFrIG1hcC5cbmxldCB1aWQgPSAwXG5leHBvcnQgZnVuY3Rpb24gZ2V0VWlkKGl0ZW0sIGdldEl0ZW1JZCA9IG51bGwpIHtcbiAgY29uc3QgcmF3ID0gdG9SYXcoaXRlbSlcbiAgbGV0IGlkID0gdWlkTWFwLmdldChyYXcpXG4gIGlmICghaWQpIHtcbiAgICBpZCA9IGdldEl0ZW1JZD8uKGl0ZW0pIHx8IGBAJHsrK3VpZH1gXG4gICAgdWlkTWFwLnNldChyYXcsIGlkKVxuICB9XG4gIHJldHVybiBpZFxufVxuIiwiaW1wb3J0IHsgaXNUZW1wb3JhcnlJZCB9IGZyb20gJy4vZGF0YS5qcydcbmltcG9ydCB7XG4gIGlzSW50ZWdlcixcbiAgYXNBcnJheSxcbiAgcGFyc2VEYXRhUGF0aCxcbiAgZ2V0VmFsdWVBdERhdGFQYXRoXG59IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQgeyBuYW5vaWQgfSBmcm9tICduYW5vaWQnXG5cbi8vIFNjaGVtYUdyYXBoIGlzIGEgY2xhc3MgdG8gY29sbGVjdCBzY2hlbWEgZ3JhcGggbWV0YSBpbmZvcm1hdGlvbiBpbiBvcmRlciB0b1xuLy8gcHJvY2VzcyBzb3VyY2VzIGFuZCByZWxhdGlvbnMgZm9yIHRoZSBnaXZlbiB0YXJnZXRzICdzZXJ2ZXInIGFuZCAnY2xpcGJvYXJkJyxcbi8vIGFjY29yZGluZyB0byB0aGUgZm9sbG93aW5nIHRhYmxlOlxuLy9cbi8vIHwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IC0tLS0tLS0tLSB8IC0tLS0tLS0tLSB8XG4vLyB8IGRhdGEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBzZXJ2ZXIgICAgfCBjbGlwYm9hcmQgfFxuLy8gfCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgLS0tLS0tLS0tIHwgLS0tLS0tLS0tIHxcbi8vIHwgdHlwZTogJ3JlbGF0aW9uJywgaW50ZXJuYWw6IGZhbHNlICAgICAgICAgICB8IGtlZXAgaWQgICB8IGtlZXAgaWQgICB8XG4vLyB8IHR5cGU6ICdyZWxhdGlvbicsIGludGVybmFsOiB0cnVlICAgICAgICAgICAgfCBrZWVwIGlkICAgfCByZWYsICNyZWYgfFxuLy8gfCB0eXBlOiAncmVsYXRpb24nLCBpbnRlcm5hbDogdHJ1ZSwgdGVtcG9yYXJ5IHwgcmVmLCAjcmVmIHwgcmVmLCAjcmVmIHxcbi8vIHwgdHlwZTogJ3NvdXJjZScsIHJlbGF0ZWQ6IGZhbHNlICAgICAgICAgICAgICB8IGtlZXAgaWQgICB8IHJlbW92ZSBpZCB8XG4vLyB8IHR5cGU6ICdzb3VyY2UnLCByZWxhdGVkOiBmYWxzZSwgdGVtcG9yYXJ5ICAgfCByZWYsICNpZCAgfCByZW1vdmUgaWQgfFxuLy8gfCB0eXBlOiAnc291cmNlJywgcmVsYXRlZDogdHJ1ZSAgICAgICAgICAgICAgIHwga2VlcCBpZCAgIHwgcmVmLCAjaWQgIHxcbi8vIHwgdHlwZTogJ3NvdXJjZScsIHJlbGF0ZWQ6IHRydWUsIHRlbXBvcmFyeSAgICB8IHJlZiwgI2lkICB8IHJlZiwgI2lkICB8XG4vLyB8IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCAtLS0tLS0tLS0gfCAtLS0tLS0tLS0gfFxuXG5leHBvcnQgY2xhc3MgU2NoZW1hR3JhcGgge1xuICBncmFwaCA9IHt9XG4gIHJlZmVyZW5jZXMgPSB7fVxuXG4gIHNldChkYXRhUGF0aCwgc2V0dGluZ3MsIGRlZmF1bHRzKSB7XG4gICAgZGF0YVBhdGggPSBwYXJzZURhdGFQYXRoKGRhdGFQYXRoKVxuICAgIGxldCBzdWJHcmFwaCA9IHRoaXMuZ3JhcGhcbiAgICBmb3IgKGNvbnN0IHBhcnQgb2YgZGF0YVBhdGgpIHtcbiAgICAgIGNvbnN0IGtleSA9IGlzSW50ZWdlcigrcGFydCkgPyAnKicgOiBwYXJ0XG4gICAgICBzdWJHcmFwaCA9IHN1YkdyYXBoW2tleV0gPz89IHt9XG4gICAgfVxuICAgIHN1YkdyYXBoLiRzZXR0aW5ncyA9IHtcbiAgICAgIC4uLmRlZmF1bHRzLCAvLyBTZWUgYGFkZFNvdXJjZShkYXRhUGF0aClgXG4gICAgICAuLi5zdWJHcmFwaC4kc2V0dGluZ3MsXG4gICAgICAuLi5zZXR0aW5nc1xuICAgIH1cbiAgfVxuXG4gIGFkZFNvdXJjZShkYXRhUGF0aCwgc2NoZW1hKSB7XG4gICAgLy8gT25seSBzZXQgYHJlbGF0ZWQ6IGZhbHNlYCB0aHJvdWdoIHRoZSBkZWZhdWx0cywgYXMgYHNldFNvdXJjZVJlbGF0ZWQoKWBcbiAgICAvLyBtYXkgYmUgY2FsbGVkIGJlZm9yZSBgYWRkU291cmNlKClgLCBkZXBlbmRpbmcgb24gdGhlIGdyYXBoIHN0cnVjdHVyZS5cbiAgICB0aGlzLnNldChkYXRhUGF0aCwgeyB0eXBlOiAnc291cmNlJywgc2NoZW1hIH0sIHsgcmVsYXRlZDogZmFsc2UgfSlcbiAgfVxuXG4gIHNldFNvdXJjZVJlbGF0ZWQoZGF0YVBhdGgpIHtcbiAgICB0aGlzLnNldChkYXRhUGF0aCwge1xuICAgICAgcmVsYXRlZDogdHJ1ZSxcbiAgICAgIHJlZmVyZW5jZTogdGhpcy5nZXRSZWZlcmVuY2VQcmVmaXgoZGF0YVBhdGgpXG4gICAgfSlcbiAgfVxuXG4gIGFkZFJlbGF0aW9uKGRhdGFQYXRoLCByZWxhdGVkRGF0YVBhdGgsIHNjaGVtYSkge1xuICAgIHRoaXMuc2V0KGRhdGFQYXRoLCB7XG4gICAgICB0eXBlOiAncmVsYXRpb24nLFxuICAgICAgc2NoZW1hLFxuICAgICAgaW50ZXJuYWw6ICEhcmVsYXRlZERhdGFQYXRoLFxuICAgICAgcmVmZXJlbmNlOiB0aGlzLmdldFJlZmVyZW5jZVByZWZpeChyZWxhdGVkRGF0YVBhdGgpXG4gICAgfSlcbiAgfVxuXG4gIGdldFJlZmVyZW5jZVByZWZpeChkYXRhUGF0aCkge1xuICAgIHJldHVybiBkYXRhUGF0aFxuICAgICAgPyAodGhpcy5yZWZlcmVuY2VzW2RhdGFQYXRoXSA/Pz0gbmFub2lkKDYpKVxuICAgICAgOiBudWxsXG4gIH1cblxuICBmbGF0dGVuKCkge1xuICAgIGNvbnN0IGZsYXR0ZW4gPSBncmFwaCA9PiB7XG4gICAgICBjb25zdCBlbnRyaWVzID0gW11cbiAgICAgIGZvciAoY29uc3QgW2tleSwgeyAkc2V0dGluZ3MsIC4uLnN1YkdyYXBoIH1dIG9mIE9iamVjdC5lbnRyaWVzKGdyYXBoKSkge1xuICAgICAgICBpZiAoJHNldHRpbmdzKSB7XG4gICAgICAgICAgZW50cmllcy5wdXNoKFtrZXksICRzZXR0aW5nc10pXG4gICAgICAgIH1cbiAgICAgICAgZm9yIChjb25zdCBbc3ViS2V5LCBzZXR0aW5nc10gb2YgZmxhdHRlbihzdWJHcmFwaCkpIHtcbiAgICAgICAgICBlbnRyaWVzLnB1c2goW2Ake2tleX0vJHtzdWJLZXl9YCwgc2V0dGluZ3NdKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gZW50cmllc1xuICAgIH1cblxuICAgIHJldHVybiBmbGF0dGVuKHRoaXMuZ3JhcGgpXG4gIH1cblxuICBwcm9jZXNzKHNvdXJjZVNjaGVtYSwgZGF0YSwgeyB0YXJnZXQgfSkge1xuICAgIGNvbnN0IGNsaXBib2FyZCA9IHRhcmdldCA9PT0gJ2NsaXBib2FyZCdcbiAgICBpZiAoY2xpcGJvYXJkKSB7XG4gICAgICBkZWxldGUgZGF0YVtzb3VyY2VTY2hlbWEuaWRLZXkgfHwgJ2lkJ11cbiAgICB9XG4gICAgZm9yIChjb25zdCBbZGF0YVBhdGgsIHNldHRpbmdzXSBvZiB0aGlzLmZsYXR0ZW4oKSkge1xuICAgICAgY29uc3QgeyB0eXBlLCBzY2hlbWEsIGludGVybmFsLCByZWxhdGVkLCByZWZlcmVuY2UgfSA9IHNldHRpbmdzXG4gICAgICBjb25zdCBzb3VyY2UgPSB0eXBlID09PSAnc291cmNlJ1xuICAgICAgY29uc3QgcmVsYXRpb24gPSB0eXBlID09PSAncmVsYXRpb24nXG4gICAgICBpZiAoc291cmNlIHx8IHJlbGF0aW9uICYmIGludGVybmFsKSB7XG4gICAgICAgIGNvbnN0IHZhbHVlcyA9IGdldFZhbHVlQXREYXRhUGF0aChkYXRhLCBkYXRhUGF0aCwgKCkgPT4gbnVsbClcbiAgICAgICAgY29uc3QgcmVtb3ZlSWQgPSBjbGlwYm9hcmQgJiYgc291cmNlICYmICFyZWxhdGVkXG4gICAgICAgIGNvbnN0IHJlZmVyZW5jZUlkID0gKFxuICAgICAgICAgIGNsaXBib2FyZCAmJiAoXG4gICAgICAgICAgICByZWxhdGlvbiAmJiBpbnRlcm5hbCB8fFxuICAgICAgICAgICAgc291cmNlICYmIHJlbGF0ZWRcbiAgICAgICAgICApXG4gICAgICAgIClcbiAgICAgICAgZm9yIChjb25zdCB2YWx1ZSBvZiBhc0FycmF5KHZhbHVlcykuZmxhdCgpKSB7XG4gICAgICAgICAgY29uc3QgaWRLZXkgPSAoXG4gICAgICAgICAgICBzb3VyY2UgJiYgc2NoZW1hLmlkS2V5IHx8XG4gICAgICAgICAgICByZWxhdGlvbiAmJiBzY2hlbWEucmVsYXRlQnkgfHxcbiAgICAgICAgICAgICdpZCdcbiAgICAgICAgICApXG4gICAgICAgICAgbGV0IGlkID0gdmFsdWU/LltpZEtleV1cbiAgICAgICAgICBpZiAoaWQgIT0gbnVsbCkge1xuICAgICAgICAgICAgaWYgKHJlbW92ZUlkKSB7XG4gICAgICAgICAgICAgIGRlbGV0ZSB2YWx1ZVtpZEtleV1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChyZWZlcmVuY2VJZCB8fCBpc1RlbXBvcmFyeUlkKGlkKSkge1xuICAgICAgICAgICAgICBpZiAoaXNUZW1wb3JhcnlJZChpZCkpIHtcbiAgICAgICAgICAgICAgICBpZCA9IGlkLnNsaWNlKDEpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY29uc3QgcmVmS2V5ID0gY2xpcGJvYXJkXG4gICAgICAgICAgICAgICAgPyAvLyBDbGlwYm9hcmQganVzdCBuZWVkcyB0ZW1wb3JhcnkgaWRzIHVuZGVyIHRoZSBhY3R1YWwgYGlkS2V5YFxuICAgICAgICAgICAgICAgICAgaWRLZXlcbiAgICAgICAgICAgICAgICA6IC8vIFNlcnZlciB3YW50cyBPYmplY3Rpb24tc3R5bGUgJyNpZCcgLyAnI3JlZicgcGFpcnMuXG4gICAgICAgICAgICAgICAgICBzb3VyY2VcbiAgICAgICAgICAgICAgICAgID8gJyNpZCdcbiAgICAgICAgICAgICAgICAgIDogJyNyZWYnXG4gICAgICAgICAgICAgIGNvbnN0IHJldlZhbHVlID0gY2xpcGJvYXJkXG4gICAgICAgICAgICAgICAgPyBgQCR7aWR9YFxuICAgICAgICAgICAgICAgIDogLy8gS2VlcCB0aGUgaWRzIHVuaXF1ZSBpbiByZWZlcmVuY2UgZ3JvdXBzLCBzaW5jZSB0aGV5XG4gICAgICAgICAgICAgICAgICAvLyByZWZlcmVuY2UgYWNyb3NzIHRoZSBmdWxsIGdyYXBoLlxuICAgICAgICAgICAgICAgICAgcmVmZXJlbmNlXG4gICAgICAgICAgICAgICAgICA/IGAke3JlZmVyZW5jZX0tJHtpZH1gXG4gICAgICAgICAgICAgICAgICA6IGlkIC8vIEEgdGVtcG9yYXJ5IGlkIHdpdGhvdXQgYSByZWxhdGVkLCBqdXN0IHByZXNlcnZlIGl0LlxuICAgICAgICAgICAgICB2YWx1ZVtyZWZLZXldID0gcmV2VmFsdWVcbiAgICAgICAgICAgICAgaWYgKHJlZktleSAhPT0gaWRLZXkpIHtcbiAgICAgICAgICAgICAgICBkZWxldGUgdmFsdWVbaWRLZXldXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGRhdGFcbiAgfVxufVxuIiwiaW1wb3J0IHtcbiAgaXNBcnJheSxcbiAgaXNPYmplY3QsXG4gIGlzU3RyaW5nLFxuICBpc0Jvb2xlYW4sXG4gIGlzTnVtYmVyLFxuICBpc0Z1bmN0aW9uLFxuICBpc0RhdGUsXG4gIGlzUmVnRXhwLFxuICBhc0FycmF5XG59IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbmNvbnN0IHR5cGVDaGVja2VycyA9IHtcbiAgQm9vbGVhbjogaXNCb29sZWFuLFxuICBOdW1iZXI6IGlzTnVtYmVyLFxuICBTdHJpbmc6IGlzU3RyaW5nLFxuICBEYXRlOiBpc0RhdGUsXG4gIEFycmF5OiBpc0FycmF5LFxuICBPYmplY3Q6IGlzT2JqZWN0LFxuICBSZWdFeHA6IGlzUmVnRXhwLFxuICBGdW5jdGlvbjogaXNGdW5jdGlvblxufVxuXG4vLyBEZWNsYXJlIHRoZXNlIHNlcGFyYXRlbHkgZnJvbSB0aGUgYHR5cGVDb252ZXJ0ZXJzYCBvYmplY3QsIHRvIHByZXZlbnRcbi8vIEJhYmVsIGlzc3VlcyB3aXRoIGBPYmplY3RgIG92ZXJyaWRpbmcgdGhlIGdsb2JhbCBgT2JqZWN0YDpcbmNvbnN0IHRvQm9vbGVhbiA9IHZhbHVlID0+ICEhdmFsdWVcbmNvbnN0IHRvTnVtYmVyID0gdmFsdWUgPT4gK3ZhbHVlXG5jb25zdCB0b1N0cmluZyA9IHZhbHVlID0+IFN0cmluZyh2YWx1ZSlcblxuY29uc3QgdG9EYXRlID0gdmFsdWUgPT5cbiAgaXNEYXRlKHZhbHVlKVxuICAgID8gdmFsdWVcbiAgICA6IG5ldyBEYXRlKHZhbHVlKVxuXG5jb25zdCB0b0FycmF5ID0gdmFsdWUgPT5cbiAgaXNBcnJheSh2YWx1ZSlcbiAgICA/IHZhbHVlXG4gICAgOiBpc1N0cmluZyh2YWx1ZSlcbiAgICAgID8gdmFsdWUuc3BsaXQoJywnKVxuICAgICAgOiBhc0FycmF5KHZhbHVlKVxuXG5jb25zdCB0b09iamVjdCA9IHZhbHVlID0+XG4gIGlzT2JqZWN0KHZhbHVlKVxuICAgID8gdmFsdWVcbiAgICA6IC8vIElmIGEgT2JqZWN0IGlzIGV4cGVjdGVkIGJ1dCBhIEJvb2xlYW4gcHJvdmlkZSwgY29udmVydCB0byBhbiBlbXB0eVxuICAgICAgLy8gb2JqZWN0LiBVc2VkIGJ5IGBjcmVhdGFibGVgICYgY28sIHRoYXQgY2FuIGJlIGJvdGguXG4gICAgICB2YWx1ZSA9PT0gdHJ1ZVxuICAgICAgPyB7fVxuICAgICAgOiBudWxsXG5cbmNvbnN0IHRvUmVnRXhwID0gdmFsdWUgPT5cbiAgaXNSZWdFeHAodmFsdWUpXG4gICAgPyB2YWx1ZVxuICAgIDogbmV3IFJlZ0V4cCh2YWx1ZSlcblxuY29uc3QgdHlwZUNvbnZlcnRlcnMgPSB7XG4gIEJvb2xlYW46IHRvQm9vbGVhbixcbiAgTnVtYmVyOiB0b051bWJlcixcbiAgU3RyaW5nOiB0b1N0cmluZyxcbiAgRGF0ZTogdG9EYXRlLFxuICBBcnJheTogdG9BcnJheSxcbiAgT2JqZWN0OiB0b09iamVjdCxcbiAgUmVnRXhwOiB0b1JlZ0V4cFxufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNNYXRjaGluZ1R5cGUodHlwZXMsIHZhbHVlKSB7XG4gIC8vIFNlZSBpZiBhbnkgb2YgdGhlIGV4cGVjdCB0eXBlcyBtYXRjaCwgcmV0dXJuIGltbWVkaWF0ZWx5IGlmIHRoZXkgZG86XG4gIGlmICh0eXBlcyAmJiB2YWx1ZSAhPSBudWxsKSB7XG4gICAgZm9yIChjb25zdCB0eXBlIG9mIHR5cGVzKSB7XG4gICAgICBpZiAodHlwZUNoZWNrZXJzW3R5cGUubmFtZV0/Lih2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIGZhbHNlXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb252ZXJ0VHlwZSh0eXBlLCB2YWx1ZSkge1xuICBjb25zdCBjb252ZXJ0ZXIgPSB0eXBlICYmIHR5cGVDb252ZXJ0ZXJzW3R5cGUubmFtZSB8fCB0eXBlXVxuICByZXR1cm4gY29udmVydGVyID8gY29udmVydGVyKHZhbHVlKSA6IHZhbHVlXG59XG4iLCJpbXBvcnQgRGl0b0NvbnRleHQgZnJvbSAnLi4vRGl0b0NvbnRleHQuanMnXG5pbXBvcnQgRGl0b01peGluIGZyb20gJy4uL21peGlucy9EaXRvTWl4aW4uanMnXG5pbXBvcnQgVHlwZU1peGluIGZyb20gJy4uL21peGlucy9UeXBlTWl4aW4uanMnXG5pbXBvcnQgeyBnZXRVaWQgfSBmcm9tICcuL3VpZC5qcydcbmltcG9ydCB7IFNjaGVtYUdyYXBoIH0gZnJvbSAnLi9TY2hlbWFHcmFwaC5qcydcbmltcG9ydCB7IGFwcGVuZERhdGFQYXRoLCBpc1RlbXBvcmFyeUlkIH0gZnJvbSAnLi9kYXRhLmpzJ1xuaW1wb3J0IHsgaXNNYXRjaGluZ1R5cGUsIGNvbnZlcnRUeXBlIH0gZnJvbSAnLi90eXBlLmpzJ1xuaW1wb3J0IHtcbiAgaXNPYmplY3QsXG4gIGlzU3RyaW5nLFxuICBpc0FycmF5LFxuICBpc0Z1bmN0aW9uLFxuICBpc1Byb21pc2UsXG4gIGlzTW9kdWxlLFxuICBhc0FycmF5LFxuICBjbG9uZSxcbiAgY2FtZWxpemUsXG4gIGFzc2lnbkRlZXBseSxcbiAgbWFwQ29uY3VycmVudGx5LFxuICBnZXRWYWx1ZUF0RGF0YVBhdGhcbn0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCB7IG1hcmtSYXcgfSBmcm9tICd2dWUnXG5cbmNvbnN0IHR5cGVDb21wb25lbnRzID0ge31cbmNvbnN0IHVua25vd25UeXBlUmVwb3J0ZWQgPSB7fVxuXG5leHBvcnQgZnVuY3Rpb24gcmVnaXN0ZXJUeXBlQ29tcG9uZW50KHR5cGUsIGNvbXBvbmVudCkge1xuICB0eXBlQ29tcG9uZW50c1t0eXBlXSA9IGNvbXBvbmVudFxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0VHlwZUNvbXBvbmVudCh0eXBlLCBhbGxvd051bGwgPSBmYWxzZSkge1xuICBjb25zdCBjb21wb25lbnQgPSB0eXBlQ29tcG9uZW50c1t0eXBlXSB8fCBudWxsXG4gIGlmICghY29tcG9uZW50ICYmICFhbGxvd051bGwgJiYgIXVua25vd25UeXBlUmVwb3J0ZWRbdHlwZV0pIHtcbiAgICAvLyBSZXBvcnQgZWFjaCBtaXNzaW5nIHR5cGUgb25seSBvbmNlLCB0byBhdm9pZCBmbG9vZGluZyB0aGUgY29uc29sZTpcbiAgICB1bmtub3duVHlwZVJlcG9ydGVkW3R5cGVdID0gdHJ1ZVxuICAgIHRocm93IG5ldyBFcnJvcihgVW5rbm93biBEaXRvIGNvbXBvbmVudCB0eXBlOiAnJHt0eXBlfSdgKVxuICB9XG4gIHJldHVybiBjb21wb25lbnRcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGl0ZXJhdGVTY2hlbWFDb21wb25lbnRzKHNjaGVtYXMsIGNhbGxiYWNrKSB7XG4gIGZvciAoY29uc3Qgc2NoZW1hIG9mIHNjaGVtYXMpIHtcbiAgICBpZiAoaXNTaW5nbGVDb21wb25lbnRWaWV3KHNjaGVtYSkpIHtcbiAgICAgIGNvbnN0IHJlcyA9IGNhbGxiYWNrKHNjaGVtYS5jb21wb25lbnQsIHNjaGVtYS5uYW1lLCAwKVxuICAgICAgaWYgKHJlcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiByZXNcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGlzU2NoZW1hKHNjaGVtYSkpIHtcbiAgICAgIGZvciAoY29uc3QgW25hbWUsIGNvbXBvbmVudF0gb2YgT2JqZWN0LmVudHJpZXMoc2NoZW1hLmNvbXBvbmVudHMgfHwge30pKSB7XG4gICAgICAgIGNvbnN0IHJlcyA9IGNhbGxiYWNrKGNvbXBvbmVudCwgbmFtZSwgMSlcbiAgICAgICAgaWYgKHJlcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgcmV0dXJuIHJlc1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpdGVyYXRlTmVzdGVkU2NoZW1hQ29tcG9uZW50cyhzY2hlbWEsIGNhbGxiYWNrKSB7XG4gIHJldHVybiBzY2hlbWFcbiAgICA/IGl0ZXJhdGVTY2hlbWFDb21wb25lbnRzKFtzY2hlbWEsIC4uLmdldFRhYlNjaGVtYXMoc2NoZW1hKV0sIGNhbGxiYWNrKVxuICAgIDogdW5kZWZpbmVkXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmaW5kTmVzdGVkU2NoZW1hQ29tcG9uZW50KHNjaGVtYSwgY2FsbGJhY2spIHtcbiAgcmV0dXJuIChcbiAgICBpdGVyYXRlTmVzdGVkU2NoZW1hQ29tcG9uZW50cyhcbiAgICAgIHNjaGVtYSxcbiAgICAgIGNvbXBvbmVudCA9PiAoY2FsbGJhY2soY29tcG9uZW50KSA/IGNvbXBvbmVudCA6IHVuZGVmaW5lZClcbiAgICApID8/IG51bGxcbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gc29tZU5lc3RlZFNjaGVtYUNvbXBvbmVudChzY2hlbWEsIGNhbGxiYWNrKSB7XG4gIHJldHVybiAoXG4gICAgaXRlcmF0ZU5lc3RlZFNjaGVtYUNvbXBvbmVudHMoXG4gICAgICBzY2hlbWEsXG4gICAgICBjb21wb25lbnQgPT4gKGNhbGxiYWNrKGNvbXBvbmVudCkgPyB0cnVlIDogdW5kZWZpbmVkKVxuICAgICkgPz8gZmFsc2VcbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZXZlcnlOZXN0ZWRTY2hlbWFDb21wb25lbnQoc2NoZW1hLCBjYWxsYmFjaykge1xuICByZXR1cm4gKFxuICAgIGl0ZXJhdGVOZXN0ZWRTY2hlbWFDb21wb25lbnRzKFxuICAgICAgc2NoZW1hLFxuICAgICAgY29tcG9uZW50ID0+IChjYWxsYmFjayhjb21wb25lbnQpID8gdW5kZWZpbmVkIDogZmFsc2UpXG4gICAgKSA/PyB0cnVlXG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGhhc05lc3RlZFNjaGVtYUNvbXBvbmVudHMoc2NoZW1hKSB7XG4gIHJldHVybiBzb21lTmVzdGVkU2NoZW1hQ29tcG9uZW50KHNjaGVtYSwgKCkgPT4gdHJ1ZSkgPz8gZmFsc2Vcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzU2NoZW1hKHNjaGVtYSkge1xuICByZXR1cm4gaXNPYmplY3Qoc2NoZW1hKSAmJiBpc1N0cmluZyhzY2hlbWEudHlwZSlcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzRm9ybShzY2hlbWEpIHtcbiAgcmV0dXJuIGlzU2NoZW1hKHNjaGVtYSkgJiYgc2NoZW1hLnR5cGUgPT09ICdmb3JtJ1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNWaWV3KHNjaGVtYSkge1xuICByZXR1cm4gaXNTY2hlbWEoc2NoZW1hKSAmJiBzY2hlbWEudHlwZSA9PT0gJ3ZpZXcnXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1RhYihzY2hlbWEpIHtcbiAgcmV0dXJuIGlzU2NoZW1hKHNjaGVtYSkgJiYgc2NoZW1hLnR5cGUgPT09ICd0YWInXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1BhbmVsKHNjaGVtYSkge1xuICByZXR1cm4gaXNTY2hlbWEoc2NoZW1hKSAmJiBzY2hlbWEudHlwZSA9PT0gJ3BhbmVsJ1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNNZW51KHNjaGVtYSkge1xuICByZXR1cm4gaXNTY2hlbWEoc2NoZW1hKSAmJiBzY2hlbWEudHlwZSA9PT0gJ21lbnUnXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRTY2hlbWFJZGVudGlmaWVyKHNjaGVtYSkge1xuICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoc2NoZW1hKVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVzb2x2ZVNjaGVtYShzY2hlbWEsIHVud3JhcE1vZHVsZSA9IGZhbHNlKSB7XG4gIGlmIChpc0Z1bmN0aW9uKHNjaGVtYSkpIHtcbiAgICBzY2hlbWEgPSBzY2hlbWEoKVxuICB9XG4gIGlmIChpc1Byb21pc2Uoc2NoZW1hKSkge1xuICAgIHNjaGVtYSA9IGF3YWl0IHNjaGVtYVxuICB9XG4gIGlmIChpc01vZHVsZShzY2hlbWEpKSB7XG4gICAgLy8gQ29weSB0byBjb252ZXJ0IGZyb20gbW9kdWxlIHRvIG9iamVjdDpcbiAgICBzY2hlbWEgPSB7IC4uLnNjaGVtYSB9XG4gICAgLy8gVW53cmFwIGRlZmF1bHQgb3IgbmFtZWQgc2NoZW1hXG4gICAgaWYgKCFzY2hlbWEubmFtZSAmJiAodW53cmFwTW9kdWxlIHx8IHNjaGVtYS5kZWZhdWx0KSkge1xuICAgICAgLy8gRmlsdGVyIG91dCBpbnRlcm5hbCBrZXkgYWRkZWQgYnkgdml0ZSAvIHZ1ZSAzIHBsdWdpbiB3aGVuIGNoYW5naW5nXG4gICAgICAvLyBjb2RlIGluIGEgZHluYW1pY2FsbHkgaW1wb3J0ZWQgdnVlIGNvbXBvbmVudCwgc2VlOlxuICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3ZpdGVqcy92aXRlLXBsdWdpbi12dWUvYmxvYi9hYmRmNWY0ZjMyZDAyYWY2NDFlNWY2MDg3MWJkZTE0NTM1NTY5YjFlL3BhY2thZ2VzL3BsdWdpbi12dWUvc3JjL21haW4udHMjTDEzM1xuICAgICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKHNjaGVtYSkuZmlsdGVyKGtleSA9PiBrZXkgIT09ICdfcmVyZW5kZXJfb25seScpXG4gICAgICBpZiAoa2V5cy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgY29uc3QgbmFtZSA9IGtleXNbMF1cbiAgICAgICAgc2NoZW1hID0gc2NoZW1hW25hbWVdXG4gICAgICAgIGlmIChuYW1lICE9PSAnZGVmYXVsdCcpIHtcbiAgICAgICAgICBzY2hlbWEubmFtZSA9IG5hbWVcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gc2NoZW1hXG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZXNvbHZlU2NoZW1hcyhcbiAgdW5yZXNvbHZlZFNjaGVtYXMsXG4gIHJlc29sdmVJdGVtID0gcmVzb2x2ZVNjaGVtYVxuKSB7XG4gIGxldCBzY2hlbWFzID0gaXNGdW5jdGlvbih1bnJlc29sdmVkU2NoZW1hcylcbiAgICA/IHVucmVzb2x2ZWRTY2hlbWFzKClcbiAgICA6IHVucmVzb2x2ZWRTY2hlbWFzXG4gIHNjaGVtYXMgPSBhd2FpdCByZXNvbHZlU2NoZW1hKHNjaGVtYXMsIGZhbHNlKVxuICBpZiAoaXNBcnJheShzY2hlbWFzKSkge1xuICAgIC8vIFRyYW5zbGF0ZSBhbiBhcnJheSBvZiBkeW5hbWljIGltcG9ydCwgZWFjaCBpbXBvcnRpbmcgb25lIG5hbWVkIHNjaGVtYVxuICAgIC8vIG1vZHVsZSB0byBhbiBvYmplY3Qgd2l0aCBuYW1lZCBlbnRyaWVzLlxuICAgIHNjaGVtYXMgPSBPYmplY3QuZnJvbUVudHJpZXMoXG4gICAgICBhd2FpdCBtYXBDb25jdXJyZW50bHkoXG4gICAgICAgIHNjaGVtYXMsXG4gICAgICAgIGFzeW5jIGl0ZW0gPT4ge1xuICAgICAgICAgIGNvbnN0IHNjaGVtYSA9IGF3YWl0IHJlc29sdmVJdGVtKGl0ZW0sIHRydWUpXG4gICAgICAgICAgcmV0dXJuIFtzY2hlbWEubmFtZSwgc2NoZW1hXVxuICAgICAgICB9XG4gICAgICApXG4gICAgKVxuICB9IGVsc2UgaWYgKGlzT2JqZWN0KHNjaGVtYXMpKSB7XG4gICAgc2NoZW1hcyA9IE9iamVjdC5mcm9tRW50cmllcyhcbiAgICAgIGF3YWl0IG1hcENvbmN1cnJlbnRseShcbiAgICAgICAgT2JqZWN0LmVudHJpZXMoc2NoZW1hcyksXG4gICAgICAgIGFzeW5jIChba2V5LCBpdGVtXSkgPT4ge1xuICAgICAgICAgIGNvbnN0IHNjaGVtYSA9IGF3YWl0IHJlc29sdmVJdGVtKGl0ZW0sIHRydWUpXG4gICAgICAgICAgcmV0dXJuIFtrZXksIHNjaGVtYV1cbiAgICAgICAgfVxuICAgICAgKVxuICAgIClcbiAgfVxuICByZXR1cm4gc2NoZW1hc1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVzb2x2ZVZpZXdzKHVucmVzb2x2ZWRWaWV3cykge1xuICByZXR1cm4gcmVzb2x2ZVNjaGVtYXModW5yZXNvbHZlZFZpZXdzLCBhc3luYyAoc2NoZW1hLCB1bndyYXBNb2R1bGUpID0+IHtcbiAgICBzY2hlbWEgPSBhd2FpdCByZXNvbHZlU2NoZW1hKHNjaGVtYSwgdW53cmFwTW9kdWxlKVxuICAgIGlmICghc2NoZW1hLm5hbWUgJiYgaXNNZW51KHNjaGVtYSkpIHtcbiAgICAgIC8vIEdlbmVyYXRlIGEgbmFtZSBmb3Igc3ViLW1lbnVzIGZyb20gdGhlaXIgbGFiZWwgaWYgaXQncyBtaXNzaW5nLlxuICAgICAgLy8gTk9URTogVGhpcyBpcyBuZXZlciBhY3R1YWxseSByZWZlcmVuY2VkIGZyb20gYW55d2hlcmUsIGJ1dCB0aGV5IG5lZWRcbiAgICAgIC8vIGEgbmFtZSBieSB3aGljaCB0aGV5J3JlIHN0b3JlZCBpbiB0aGUgcGFyZW50IG9iamVjdC5cbiAgICAgIHNjaGVtYS5uYW1lID0gY2FtZWxpemUoc2NoZW1hLmxhYmVsKVxuICAgICAgc2NoZW1hLml0ZW1zID0gYXdhaXQgcmVzb2x2ZVNjaGVtYXMoc2NoZW1hLml0ZW1zKVxuICAgIH1cbiAgICByZXR1cm4gc2NoZW1hXG4gIH0pXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmbGF0dGVuVmlld3Modmlld3MpIHtcbiAgcmV0dXJuIE9iamVjdC5mcm9tRW50cmllcyhcbiAgICBPYmplY3QuZW50cmllcyh2aWV3cykucmVkdWNlKFxuICAgICAgKGVudHJpZXMsIFtrZXksIHNjaGVtYV0pID0+IHtcbiAgICAgICAgaWYgKGlzTWVudShzY2hlbWEpKSB7XG4gICAgICAgICAgZW50cmllcy5wdXNoKC4uLk9iamVjdC5lbnRyaWVzKHNjaGVtYS5pdGVtcykpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZW50cmllcy5wdXNoKFtrZXksIHNjaGVtYV0pXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGVudHJpZXNcbiAgICAgIH0sXG4gICAgICBbXVxuICAgIClcbiAgKVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVzb2x2ZVNjaGVtYUNvbXBvbmVudChzY2hlbWEpIHtcbiAgLy8gUmVzb2x2ZXMgYXN5bmMgc2NoZW1hIGNvbXBvbmVudHMgYW5kIGFkZHMgRGl0b01peGluIGFuZCBUeXBlTWl4aW4gdG8gdGhlbS5cbiAgbGV0IHsgY29tcG9uZW50IH0gPSBzY2hlbWFcbiAgaWYgKGNvbXBvbmVudCkge1xuICAgIGNvbXBvbmVudCA9IGF3YWl0IHJlc29sdmVTY2hlbWEoY29tcG9uZW50LCB0cnVlKVxuICAgIGlmIChjb21wb25lbnQpIHtcbiAgICAgIC8vIFByZXZlbnQgd2FybmluZzogXCJWdWUgcmVjZWl2ZWQgYSBDb21wb25lbnQgd2hpY2ggd2FzIG1hZGUgYSByZWFjdGl2ZVxuICAgICAgLy8gb2JqZWN0LiBUaGlzIGNhbiBsZWFkIHRvIHVubmVjZXNzYXJ5IHBlcmZvcm1hbmNlIG92ZXJoZWFkLCBhbmQgc2hvdWxkXG4gICAgICAvLyBiZSBhdm9pZGVkIGJ5IG1hcmtpbmcgdGhlIGNvbXBvbmVudCB3aXRoIGBtYXJrUmF3YFwiOlxuICAgICAgc2NoZW1hLmNvbXBvbmVudCA9IG1hcmtSYXcoe1xuICAgICAgICAuLi5jb21wb25lbnQsXG4gICAgICAgIG1peGluczogW0RpdG9NaXhpbiwgVHlwZU1peGluLCAuLi4oY29tcG9uZW50Lm1peGlucyB8fCBbXSldXG4gICAgICB9KVxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVzb2x2ZVNjaGVtYUNvbXBvbmVudHMoc2NoZW1hcykge1xuICAvLyBgc2NoZW1hc2AgYXJlIG9mIHRoZSBzYW1lIHBvc3NpYmxlIGZvcm1zIGFzIHBhc3NlZCB0byBgZ2V0TmFtZWRTY2hlbWFzKClgXG4gIGF3YWl0IG1hcENvbmN1cnJlbnRseShPYmplY3QudmFsdWVzKHNjaGVtYXMgfHwge30pLCByZXNvbHZlU2NoZW1hQ29tcG9uZW50KVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcHJvY2Vzc1NjaGVtYUNvbXBvbmVudHMoXG4gIGFwaSxcbiAgc2NoZW1hLFxuICByb3V0ZXMgPSBudWxsLFxuICBsZXZlbCA9IDBcbikge1xuICBjb25zdCBwcm9taXNlcyA9IFtdXG4gIGNvbnN0IHByb2Nlc3MgPSAoY29tcG9uZW50LCBuYW1lLCByZWxhdGl2ZUxldmVsKSA9PiB7XG4gICAgcHJvbWlzZXMucHVzaChcbiAgICAgIHByb2Nlc3NTY2hlbWFDb21wb25lbnQoXG4gICAgICAgIGFwaSxcbiAgICAgICAgY29tcG9uZW50LFxuICAgICAgICBuYW1lLFxuICAgICAgICByb3V0ZXMsXG4gICAgICAgIGxldmVsICsgcmVsYXRpdmVMZXZlbFxuICAgICAgKVxuICAgIClcbiAgfVxuXG4gIGl0ZXJhdGVOZXN0ZWRTY2hlbWFDb21wb25lbnRzKHNjaGVtYSwgcHJvY2VzcylcbiAgaXRlcmF0ZVNjaGVtYUNvbXBvbmVudHMoZ2V0UGFuZWxTY2hlbWFzKHNjaGVtYSksIHByb2Nlc3MpXG5cbiAgYXdhaXQgUHJvbWlzZS5hbGwocHJvbWlzZXMpXG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBwcm9jZXNzU2NoZW1hQ29tcG9uZW50KFxuICBhcGksXG4gIHNjaGVtYSxcbiAgbmFtZSxcbiAgcm91dGVzID0gbnVsbCxcbiAgbGV2ZWwgPSAwXG4pIHtcbiAgcHJvY2Vzc1NjaGVtYURlZmF1bHRzKGFwaSwgc2NoZW1hKVxuXG4gIGF3YWl0IFByb21pc2UuYWxsKFtcbiAgICAvLyBBbHNvIHByb2Nlc3MgbmVzdGVkIHBhbmVsIHNjaGVtYXMuXG4gICAgbWFwQ29uY3VycmVudGx5KFxuICAgICAgZ2V0UGFuZWxTY2hlbWFzKHNjaGVtYSksXG4gICAgICBwYW5lbCA9PiBwcm9jZXNzU2NoZW1hQ29tcG9uZW50cyhhcGksIHBhbmVsLCByb3V0ZXMsIGxldmVsKVxuICAgICksXG4gICAgLy8gRGVsZWdhdGUgc2NoZW1hIHByb2Nlc3NpbmcgdG8gdGhlIGFjdHVhbCB0eXBlIGNvbXBvbmVudHMuXG4gICAgZ2V0VHlwZU9wdGlvbnMoc2NoZW1hKT8ucHJvY2Vzc1NjaGVtYT8uKFxuICAgICAgYXBpLFxuICAgICAgc2NoZW1hLFxuICAgICAgbmFtZSxcbiAgICAgIHJvdXRlcyxcbiAgICAgIGxldmVsXG4gICAgKVxuICBdKVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcHJvY2Vzc1ZpZXcoY29tcG9uZW50LCBhcGksIHNjaGVtYSwgbmFtZSwgZnVsbFBhdGggPSAnJykge1xuICBwcm9jZXNzU2NoZW1hRGVmYXVsdHMoYXBpLCBzY2hlbWEpXG4gIHByb2Nlc3NSb3V0ZVNjaGVtYShhcGksIHNjaGVtYSwgbmFtZSwgZnVsbFBhdGgpXG4gIGxldCBjaGlsZHJlbiA9IFtdXG4gIGlmIChpc1ZpZXcoc2NoZW1hKSkge1xuICAgIGF3YWl0IHByb2Nlc3NOZXN0ZWRTY2hlbWFzKGFwaSwgc2NoZW1hKVxuICAgIGF3YWl0IHByb2Nlc3NTY2hlbWFDb21wb25lbnRzKGFwaSwgc2NoZW1hLCBjaGlsZHJlbilcbiAgfSBlbHNlIGlmIChpc01lbnUoc2NoZW1hKSkge1xuICAgIGNoaWxkcmVuID0gYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICBPYmplY3QuZW50cmllcyhzY2hlbWEuaXRlbXMpLm1hcChhc3luYyAoW25hbWUsIGl0ZW1dKSA9PlxuICAgICAgICBwcm9jZXNzVmlldyhjb21wb25lbnQsIGFwaSwgaXRlbSwgbmFtZSwgc2NoZW1hLmZ1bGxQYXRoKVxuICAgICAgKVxuICAgIClcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgdmlldyBzY2hlbWE6ICcke2dldFNjaGVtYUlkZW50aWZpZXIoc2NoZW1hKX0nYClcbiAgfVxuICByZXR1cm4ge1xuICAgIHBhdGg6IHNjaGVtYS5mdWxsUGF0aCxcbiAgICBjaGlsZHJlbixcbiAgICBjb21wb25lbnQsXG4gICAgbWV0YToge1xuICAgICAgYXBpLFxuICAgICAgc2NoZW1hXG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9jZXNzU2NoZW1hRGVmYXVsdHMoYXBpLCBzY2hlbWEpIHtcbiAgbGV0IGRlZmF1bHRzID0gYXBpLmRlZmF1bHRzW3NjaGVtYS50eXBlXVxuICBpZiAoZGVmYXVsdHMpIHtcbiAgICBpZiAoaXNGdW5jdGlvbihkZWZhdWx0cykpIHtcbiAgICAgIGRlZmF1bHRzID0gZGVmYXVsdHMoc2NoZW1hKVxuICAgIH1cbiAgICBpZiAoaXNPYmplY3QoZGVmYXVsdHMpKSB7XG4gICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhkZWZhdWx0cykpIHtcbiAgICAgICAgaWYgKHNjaGVtYVtrZXldID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBzY2hlbWFba2V5XSA9IHZhbHVlXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc2NoZW1hW2tleV0gPSBhc3NpZ25EZWVwbHkodmFsdWUsIHNjaGVtYVtrZXldKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9jZXNzTmVzdGVkU2NoZW1hRGVmYXVsdHMoYXBpLCBzY2hlbWEpIHtcbiAgLy8gUHJvY2VzcyBkZWZhdWx0cyBmb3IgbmVzdGVkIHNjaGVtYXMuIE5vdGUgdGhhdCB0aGlzIGlzIGFsc28gZG9uZSB3aGVuXG4gIC8vIGNhbGxpbmcgYHByb2Nlc3NTY2hlbWFDb21wb25lbnRzKClgLCBidXQgdGhhdCBmdW5jdGlvbiBpcyBhc3luYywgYW5kIHdlXG4gIC8vIG5lZWQgYSBzeW5jIHZlcnNpb24gdGhhdCBvbmx5IGhhbmRsZXMgdGhlIGRlZmF1bHRzIGZvciBmaWx0ZXJzLCBzZWVcbiAgLy8gYGdldEZpbHRlcnNQYW5lbCgpYC5cbiAgaXRlcmF0ZU5lc3RlZFNjaGVtYUNvbXBvbmVudHMoc2NoZW1hLCBjb21wb25lbnQgPT4ge1xuICAgIHByb2Nlc3NTY2hlbWFEZWZhdWx0cyhhcGksIGNvbXBvbmVudClcbiAgICBjb25zdCBmb3JtcyA9IGdldEZvcm1TY2hlbWFzKGNvbXBvbmVudClcbiAgICBmb3IgKGNvbnN0IGZvcm0gb2YgT2JqZWN0LnZhbHVlcyhmb3JtcykpIHtcbiAgICAgIHByb2Nlc3NOZXN0ZWRTY2hlbWFEZWZhdWx0cyhhcGksIGZvcm0pXG4gICAgfVxuICB9KVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvY2Vzc1JvdXRlU2NoZW1hKGFwaSwgc2NoZW1hLCBuYW1lLCBmdWxsUGF0aCA9IG51bGwpIHtcbiAgLy8gVXNlZCBmb3IgdmlldyBhbmQgc291cmNlIHNjaGVtYXMsIHNlZSBTb3VyY2VNaXhpbi5cbiAgc2NoZW1hLm5hbWUgPz89IG5hbWVcbiAgc2NoZW1hLnBhdGggPz89IGFwaS5ub3JtYWxpemVQYXRoKG5hbWUpXG4gIGlmIChmdWxsUGF0aCAhPT0gbnVsbCkge1xuICAgIHNjaGVtYS5mdWxsUGF0aCA9IGAke2Z1bGxQYXRofS8ke3NjaGVtYS5wYXRofWBcbiAgfVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcHJvY2Vzc0Zvcm1zKGFwaSwgc2NoZW1hLCBsZXZlbCkge1xuICAvLyBGaXJzdCByZXNvbHZlIHRoZSBmb3JtcyBhbmQgc3RvcmUgdGhlIHJlc3VsdHMgYmFjayBvbiB0aGUgc2NoZW1hLlxuICBsZXQgeyBmb3JtLCBmb3JtcywgY29tcG9uZW50cyB9ID0gc2NoZW1hXG4gIGlmIChmb3Jtcykge1xuICAgIGZvcm1zID0gc2NoZW1hLmZvcm1zID0gYXdhaXQgcmVzb2x2ZVNjaGVtYXMoZm9ybXMsIGZvcm0gPT5cbiAgICAgIHByb2Nlc3NGb3JtKGFwaSwgZm9ybSlcbiAgICApXG4gIH0gZWxzZSBpZiAoZm9ybSkge1xuICAgIGZvcm0gPSBzY2hlbWEuZm9ybSA9IGF3YWl0IHByb2Nlc3NGb3JtKGFwaSwgZm9ybSlcbiAgfSBlbHNlIGlmIChpc09iamVjdChjb21wb25lbnRzKSkge1xuICAgIC8vIE5PVEU6IFByb2Nlc3NpbmcgZm9ybXMgaW4gY29tcHV0ZWQgY29tcG9uZW50cyBpcyBub3Qgc3VwcG9ydGVkLCBzaW5jZSBpdFxuICAgIC8vIG9ubHkgY2FuIGJlIGNvbXB1dGVkIGluIGNvbmp1bmN0aW9uIHdpdGggYWN0dWFsIGRhdGEuXG4gICAgZm9ybSA9IHtcbiAgICAgIHR5cGU6ICdmb3JtJyxcbiAgICAgIGNvbXBvbmVudHNcbiAgICB9XG4gIH1cblxuICBmb3JtcyB8fD0geyBkZWZhdWx0OiBmb3JtIH0gLy8gT25seSB1c2VkIGZvciBwcm9jZXNzIGxvb3AgYmVsb3cuXG4gIGNvbnN0IGNoaWxkcmVuID0gW11cbiAgZm9yIChjb25zdCBmb3JtIG9mIE9iamVjdC52YWx1ZXMoZm9ybXMpKSB7XG4gICAgYXdhaXQgcHJvY2Vzc1NjaGVtYUNvbXBvbmVudHMoYXBpLCBmb3JtLCBjaGlsZHJlbiwgbGV2ZWwpXG4gIH1cbiAgcmV0dXJuIGNoaWxkcmVuXG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBwcm9jZXNzRm9ybShhcGksIHNjaGVtYSkge1xuICBzY2hlbWEgPSBhd2FpdCByZXNvbHZlU2NoZW1hKHNjaGVtYSwgdHJ1ZSlcbiAgaWYgKCFpc0Zvcm0oc2NoZW1hKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBmb3JtIHNjaGVtYTogJyR7Z2V0U2NoZW1hSWRlbnRpZmllcihzY2hlbWEpfSdgKVxuICB9XG4gIHByb2Nlc3NTY2hlbWFEZWZhdWx0cyhhcGksIHNjaGVtYSlcbiAgYXdhaXQgcHJvY2Vzc05lc3RlZFNjaGVtYXMoYXBpLCBzY2hlbWEpXG4gIHJldHVybiBzY2hlbWFcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHByb2Nlc3NUYWIoYXBpLCBzY2hlbWEpIHtcbiAgc2NoZW1hID0gYXdhaXQgcmVzb2x2ZVNjaGVtYShzY2hlbWEsIHRydWUpXG4gIGlmICghaXNUYWIoc2NoZW1hKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCB0YWIgc2NoZW1hOiAnJHtnZXRTY2hlbWFJZGVudGlmaWVyKHNjaGVtYSl9J2ApXG4gIH1cbiAgcHJvY2Vzc1NjaGVtYURlZmF1bHRzKGFwaSwgc2NoZW1hKVxuICByZXR1cm4gc2NoZW1hXG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBwcm9jZXNzUGFuZWwoYXBpLCBzY2hlbWEpIHtcbiAgc2NoZW1hID0gYXdhaXQgcmVzb2x2ZVNjaGVtYShzY2hlbWEsIHRydWUpXG4gIGlmICghaXNQYW5lbChzY2hlbWEpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHBhbmVsIHNjaGVtYTogJyR7Z2V0U2NoZW1hSWRlbnRpZmllcihzY2hlbWEpfSdgKVxuICB9XG4gIHByb2Nlc3NTY2hlbWFEZWZhdWx0cyhhcGksIHNjaGVtYSlcbiAgcmV0dXJuIHNjaGVtYVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcHJvY2Vzc05lc3RlZFNjaGVtYXMoYXBpLCBzY2hlbWEpIHtcbiAgY29uc3QgeyB0YWJzLCBwYW5lbHMgfSA9IHNjaGVtYVxuICBpZiAodGFicykge1xuICAgIHNjaGVtYS50YWJzID0gYXdhaXQgcmVzb2x2ZVNjaGVtYXMoXG4gICAgICB0YWJzLFxuICAgICAgdGFiID0+IHByb2Nlc3NUYWIoYXBpLCB0YWIpXG4gICAgKVxuICB9XG4gIGlmIChwYW5lbHMpIHtcbiAgICBzY2hlbWEucGFuZWxzID0gYXdhaXQgcmVzb2x2ZVNjaGVtYXMoXG4gICAgICBwYW5lbHMsXG4gICAgICBwYW5lbCA9PiBwcm9jZXNzUGFuZWwoYXBpLCBwYW5lbClcbiAgICApXG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGhhc0Zvcm1TY2hlbWEoc2NoZW1hKSB7XG4gIC8vIFN1cHBvcnQgYm90aCBzaW5nbGUgZm9ybSBhbmQgbXVsdGlwbGUgZm9ybXMgbm90YXRpb24sIGFzIHdlbGwgYXMgaW5saW5lZFxuICAvLyBjb21wb25lbnRzLlxuICByZXR1cm4gKFxuICAgIGlzU2NoZW1hKHNjaGVtYSkgJiZcbiAgICBpc09iamVjdChzY2hlbWEuZm9ybSB8fCBzY2hlbWEuZm9ybXMgfHwgc2NoZW1hLmNvbXBvbmVudHMpXG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGhhc011bHRpcGxlRm9ybVNjaGVtYXMoc2NoZW1hKSB7XG4gIHJldHVybiAoXG4gICAgaXNTY2hlbWEoc2NoZW1hKSAmJlxuICAgIE9iamVjdC5rZXlzKHNjaGVtYT8uZm9ybXMgfHwge30pLmxlbmd0aCA+IDFcbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNTaW5nbGVDb21wb25lbnRWaWV3KHNjaGVtYSkge1xuICByZXR1cm4gKFxuICAgIGlzVmlldyhzY2hlbWEpICYmXG4gICAgaXNPYmplY3Qoc2NoZW1hLmNvbXBvbmVudClcbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Vmlld0Zvcm1TY2hlbWEoc2NoZW1hLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgdmlldyB9ID0gc2NoZW1hXG4gIGNvbnN0IHZpZXdTY2hlbWEgPSB2aWV3ICYmIGNvbnRleHQuZmxhdHRlbmVkVmlld3Nbdmlld11cbiAgcmV0dXJuIHZpZXdTY2hlbWFcbiAgICA/IC8vIE5PVEU6IFZpZXdzIGNhbiBoYXZlIHRhYnMsIGluIHdoaWNoIGNhc2UgdGhlIHZpZXcgY29tcG9uZW50IGlzIG5lc3RlZFxuICAgICAgLy8gaW4gb25lIG9mIHRoZSB0YWJzLCBnbyBmaW5kIGl0LlxuICAgICAgZmluZE5lc3RlZFNjaGVtYUNvbXBvbmVudCh2aWV3U2NoZW1hLCBoYXNGb3JtU2NoZW1hKSB8fCBudWxsXG4gICAgOiBudWxsXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRWaWV3U2NoZW1hKHNjaGVtYSwgY29udGV4dCkge1xuICByZXR1cm4gZ2V0Vmlld0Zvcm1TY2hlbWEoc2NoZW1hLCBjb250ZXh0KVxuICAgID8gY29udGV4dC5mbGF0dGVuZWRWaWV3c1tzY2hlbWEudmlld11cbiAgICA6IG51bGxcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGhhc1ZpZXdTY2hlbWEoc2NoZW1hLCBjb250ZXh0KSB7XG4gIHJldHVybiAhIWdldFZpZXdTY2hlbWEoc2NoZW1hLCBjb250ZXh0KVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Vmlld0VkaXRQYXRoKHNjaGVtYSwgaWQsIGNvbnRleHQpIHtcbiAgY29uc3QgdmlldyA9IGdldFZpZXdTY2hlbWEoc2NoZW1hLCBjb250ZXh0KVxuICBpZiAodmlldykge1xuICAgIGNvbnN0IHBhdGggPSBpc1NpbmdsZUNvbXBvbmVudFZpZXcodmlldylcbiAgICAgID8gdmlldy5mdWxsUGF0aFxuICAgICAgOiBgJHt2aWV3LmZ1bGxQYXRofS8ke3ZpZXcucGF0aH1gXG4gICAgcmV0dXJuIGAke3BhdGh9LyR7aWR9YFxuICB9XG4gIHJldHVybiBudWxsXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRGb3JtU2NoZW1hcyhzY2hlbWEsIGNvbnRleHQsIG1vZGlmeUZvcm0pIHtcbiAgY29uc3Qgdmlld1NjaGVtYSA9IGNvbnRleHQgJiYgZ2V0Vmlld0Zvcm1TY2hlbWEoc2NoZW1hLCBjb250ZXh0KVxuICBpZiAodmlld1NjaGVtYSkge1xuICAgIHNjaGVtYSA9IHZpZXdTY2hlbWFcbiAgfSBlbHNlIGlmIChzY2hlbWEudmlldykge1xuICAgIHRocm93IG5ldyBFcnJvcihgVW5rbm93biB2aWV3OiAnJHtzY2hlbWEudmlld30nYClcbiAgfVxuXG4gIGxldCB7IGZvcm0sIGZvcm1zIH0gPSBzY2hlbWFcbiAgaWYgKCFmb3JtICYmICFmb3Jtcykge1xuICAgIGNvbnN0IHsgbmFtZSwgY29tcGFjdCwgY2xpcGJvYXJkLCB0YWJzLCBjb21wb25lbnRzIH0gPSBzY2hlbWFcbiAgICBpZiAoY29tcG9uZW50cyB8fCB0YWJzKSB7XG4gICAgICAvLyBDb252ZXJ0IGlubGluZWQgZm9ybXMgdG8gc3RhbmQtYWxvbmUgZm9ybXMsIHN1cHBvcnRpbmcgYG5hbWVgLFxuICAgICAgLy8gYGNvbXBhY3RgLCBgY2xpcGJvYXJkYCwgYHRhYnNgIGFuZCBgY29tcG9uZW50c2Agc2V0dGluZ3MuXG4gICAgICBmb3JtID0geyB0eXBlOiAnZm9ybScsIG5hbWUsIGNvbXBhY3QsIGNsaXBib2FyZCwgdGFicywgY29tcG9uZW50cyB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIE5vIGBmb3Jtc2AsIGBmb3JtYCBvciBgY29tcG9uZW50c2AsIHJldHVybiBhbmQgZW1wdHkgYGZvcm1zYCBvYmplY3QuXG4gICAgICByZXR1cm4ge31cbiAgICB9XG4gIH1cbiAgZm9ybXMgfHw9IHsgZGVmYXVsdDogZm9ybSB9XG4gIHJldHVybiBPYmplY3QuZnJvbUVudHJpZXMoXG4gICAgT2JqZWN0LmVudHJpZXMoZm9ybXMpLm1hcCgoW3R5cGUsIGZvcm1dKSA9PiB7XG4gICAgICAvLyBTdXBwb3J0IGBzY2hlbWEuY29tcG9uZW50c2AgY2FsbGJhY2tzIHRvIGNyZWF0ZSBjb21wb25lbnRzIG9uIHRoZSBmbHkuXG4gICAgICBpZiAoY29udGV4dCAmJiBpc0Z1bmN0aW9uKGZvcm0uY29tcG9uZW50cykpIHtcbiAgICAgICAgZm9ybSA9IHtcbiAgICAgICAgICAuLi5mb3JtLFxuICAgICAgICAgIGNvbXBvbmVudHM6IGZvcm0uY29tcG9uZW50cyhjb250ZXh0KVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gW3R5cGUsIG1vZGlmeUZvcm0/Lihmb3JtKSA/PyBmb3JtXVxuICAgIH0pXG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEl0ZW1Gb3JtU2NoZW1hRnJvbUZvcm1zKGZvcm1zLCBpdGVtKSB7XG4gIHJldHVybiBmb3Jtc1tpdGVtPy50eXBlXSB8fCBmb3Jtcy5kZWZhdWx0IHx8IG51bGxcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEl0ZW1Gb3JtU2NoZW1hKHNjaGVtYSwgaXRlbSwgY29udGV4dCkge1xuICByZXR1cm4gZ2V0SXRlbUZvcm1TY2hlbWFGcm9tRm9ybXMoZ2V0Rm9ybVNjaGVtYXMoc2NoZW1hLCBjb250ZXh0KSwgaXRlbSlcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzQ29tcGFjdChzY2hlbWEpIHtcbiAgcmV0dXJuICEhc2NoZW1hLmNvbXBhY3Rcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzSW5saW5lZChzY2hlbWEpIHtcbiAgcmV0dXJuICEhKHNjaGVtYS5pbmxpbmVkIHx8IHNjaGVtYS5jb21wb25lbnRzKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNOZXN0ZWQoc2NoZW1hKSB7XG4gIHJldHVybiAhIShzY2hlbWEubmVzdGVkIHx8IGdldFR5cGVPcHRpb25zKHNjaGVtYSk/LmRlZmF1bHROZXN0ZWQgPT09IHRydWUpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoYXNMYWJlbChzY2hlbWEsIGdlbmVyYXRlTGFiZWxzKSB7XG4gIGNvbnN0IHsgbGFiZWwgfSA9IHNjaGVtYVxuICByZXR1cm4gKFxuICAgIGxhYmVsICE9PSBmYWxzZSAmJiAoXG4gICAgICAhIWxhYmVsIHx8XG4gICAgICBnZW5lcmF0ZUxhYmVscyAmJiBnZXRUeXBlT3B0aW9ucyhzY2hlbWEpPy5nZW5lcmF0ZUxhYmVsXG4gICAgKVxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBvbWl0U3BhY2luZyhzY2hlbWEpIHtcbiAgcmV0dXJuICEhZ2V0VHlwZU9wdGlvbnMoc2NoZW1hKT8ub21pdFNwYWNpbmdcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFNjaGVtYVZhbHVlKFxuICBrZXlPckRhdGFQYXRoLFxuICB7IHR5cGUsIHNjaGVtYSwgY2FsbGJhY2sgPSB0cnVlLCBkZWZhdWx0OiBkZWYsIGNvbnRleHQgfSA9IHt9XG4pIHtcbiAgY29uc3QgdHlwZXMgPSB0eXBlICYmIGFzQXJyYXkodHlwZSlcbiAgLy8gRm9yIHBlcmZvcm1hbmNlIHJlYXNvbnMsIGRhdGEtcGF0aHMgaW4gYGtleU9yRGF0YVBhdGhgIGNhbiBvbmx5IGJlXG4gIC8vIHByb3ZpZGVkIGluIGluIGFycmF5IGZvcm1hdCBoZXJlOlxuICBsZXQgdmFsdWUgPSBzY2hlbWFcbiAgICA/IGlzQXJyYXkoa2V5T3JEYXRhUGF0aClcbiAgICAgID8gZ2V0VmFsdWVBdERhdGFQYXRoKHNjaGVtYSwga2V5T3JEYXRhUGF0aCwgKCkgPT4gdW5kZWZpbmVkKVxuICAgICAgOiBzY2hlbWFba2V5T3JEYXRhUGF0aF1cbiAgICA6IHVuZGVmaW5lZFxuXG4gIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkICYmIGRlZiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgaWYgKGNhbGxiYWNrICYmIGlzRnVuY3Rpb24oZGVmKSAmJiAhaXNNYXRjaGluZ1R5cGUodHlwZXMsIGRlZikpIHtcbiAgICAgIC8vIFN1cHBvcnQgYGRlZmF1bHQoKWAgZnVuY3Rpb25zIGZvciBhbnkgdHlwZSBleGNlcHQgYEZ1bmN0aW9uYDpcbiAgICAgIGRlZiA9IGRlZihjb250ZXh0KVxuICAgIH1cbiAgICByZXR1cm4gZGVmXG4gIH1cblxuICBpZiAoaXNNYXRjaGluZ1R5cGUodHlwZXMsIHZhbHVlKSkge1xuICAgIHJldHVybiB2YWx1ZVxuICB9XG4gIC8vIEFueSBzY2hlbWEgdmFsdWUgaGFuZGxlZCB0aHJvdWdoIGBnZXRTY2hlbWFWYWx1ZSgpYCBjYW4gcHJvdmlkZVxuICAvLyBhIGZ1bmN0aW9uIHRoYXQncyByZXNvbHZlZCB3aGVuIHRoZSB2YWx1ZSBpcyBldmFsdWF0ZWQ6XG4gIGlmIChjYWxsYmFjayAmJiBpc0Z1bmN0aW9uKHZhbHVlKSkge1xuICAgIHZhbHVlID0gdmFsdWUoY29udGV4dClcbiAgfVxuICAvLyBOb3cgZmluYWxseSBzZWUgaWYgd2UgY2FuIGNvbnZlcnQgdG8gdGhlIGV4cGVjdCB0eXBlcy5cbiAgaWYgKHR5cGVzICYmIHZhbHVlICE9IG51bGwgJiYgIWlzTWF0Y2hpbmdUeXBlKHR5cGVzLCB2YWx1ZSkpIHtcbiAgICBmb3IgKGNvbnN0IHR5cGUgb2YgdHlwZXMpIHtcbiAgICAgIGNvbnN0IGNvbnZlcnRlZCA9IGNvbnZlcnRUeXBlKHR5cGUsIHZhbHVlKVxuICAgICAgaWYgKGNvbnZlcnRlZCAhPT0gdmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIGNvbnZlcnRlZFxuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gdmFsdWVcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNob3VsZFJlbmRlclNjaGVtYShzY2hlbWEsIGNvbnRleHQpIHtcbiAgcmV0dXJuIChcbiAgICBnZXRTY2hlbWFWYWx1ZSgnaWYnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgc2NoZW1hLFxuICAgICAgY29udGV4dCxcbiAgICAgIGRlZmF1bHQ6IHRydWVcbiAgICB9KSAmJiAoXG4gICAgICAhaGFzTmVzdGVkU2NoZW1hQ29tcG9uZW50cyhzY2hlbWEpIHx8XG4gICAgICBzb21lTmVzdGVkU2NoZW1hQ29tcG9uZW50KHNjaGVtYSwgY29tcG9uZW50ID0+XG4gICAgICAgIHNob3VsZFJlbmRlclNjaGVtYShjb21wb25lbnQsIGNvbnRleHQpXG4gICAgICApXG4gICAgKVxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXREZWZhdWx0VmFsdWUoc2NoZW1hKSB7XG4gIC8vIFN1cHBvcnQgZGVmYXVsdCB2YWx1ZXMgYm90aCBvbiBzY2hlbWEgYW5kIG9uIGNvbXBvbmVudCBsZXZlbC5cbiAgLy8gTk9URTogQXQgdGhlIHRpbWUgb2YgY3JlYXRpb24sIGNvbXBvbmVudHMgbWF5IG5vdCBiZSBpbnN0YW50aWF0ZWQsIChlLmcuIGlmXG4gIC8vIGVudHJpZXMgYXJlIGNyZWF0ZWQgdGhyb3VnaCBuZXN0ZWQgZm9ybXMsIHRoZSBwYXJlbnQgZm9ybSBpc24ndCBtb3VudGVkKSBzb1xuICAvLyB3ZSBjYW4ndCB1c2UgYGRhdGFQYXRoYCB0byBnZXQgdG8gY29tcG9uZW50cywgYW5kIHRoZSBgZGVmYXVsdFZhbHVlYCBmcm9tXG4gIC8vIHRoZXJlLiBUaGF0J3Mgd2h5IGBkZWZhdWx0VmFsdWVgIGlzIGRlZmluZWQgc3RhdGljYWxseSBpbiB0aGUgY29tcG9uZW50czpcbiAgY29uc3QgZGVmYXVsdFZhbHVlID0gc2NoZW1hLmRlZmF1bHRcbiAgY29uc3QgdmFsdWUgPVxuICAgIGRlZmF1bHRWYWx1ZSAhPT0gdW5kZWZpbmVkXG4gICAgICA/IGRlZmF1bHRWYWx1ZVxuICAgICAgOiBnZXRUeXBlT3B0aW9ucyhzY2hlbWEpPy5kZWZhdWx0VmFsdWVcbiAgcmV0dXJuIGlzRnVuY3Rpb24odmFsdWUpXG4gICAgPyB2YWx1ZShzY2hlbWEpXG4gICAgOiBjbG9uZSh2YWx1ZSlcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlnbm9yZU1pc3NpbmdWYWx1ZShzY2hlbWEpIHtcbiAgY29uc3QgdHlwZU9wdGlvbnMgPSBnZXRUeXBlT3B0aW9ucyhzY2hlbWEpXG4gIHJldHVybiAhIShcbiAgICB0eXBlT3B0aW9ucz8uZXhjbHVkZVZhbHVlIHx8IHR5cGVPcHRpb25zPy5pZ25vcmVNaXNzaW5nVmFsdWU/LihzY2hlbWEpXG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldERlZmF1bHRWYWx1ZXMoc2NoZW1hLCBkYXRhID0ge30sIGNvbXBvbmVudCkge1xuICBjb25zdCBvcHRpb25zID0geyBjb21wb25lbnQsIHJvb3REYXRhOiBkYXRhIH1cblxuICBjb25zdCBwcm9jZXNzQmVmb3JlID0gKHNjaGVtYSwgZGF0YSwgbmFtZSkgPT4ge1xuICAgIGlmICghKG5hbWUgaW4gZGF0YSkgJiYgIWlnbm9yZU1pc3NpbmdWYWx1ZShzY2hlbWEpKSB7XG4gICAgICBkYXRhW25hbWVdID0gZ2V0RGVmYXVsdFZhbHVlKHNjaGVtYSlcbiAgICB9XG4gIH1cblxuICAvLyBTZXRzIHVwIGEgZGF0YSBvYmplY3QgdGhhdCBoYXMga2V5cyB3aXRoIGRlZmF1bHQgdmFsdWVzIGZvciBhbGxcbiAgLy8gZm9ybSBmaWVsZHMsIHNvIHRoZXkgY2FuIGJlIGNvcnJlY3RseSB3YXRjaGVkIGZvciBjaGFuZ2VzLlxuICByZXR1cm4gcHJvY2Vzc1NjaGVtYURhdGEoXG4gICAgc2NoZW1hLFxuICAgIGRhdGEsXG4gICAgbnVsbCxcbiAgICBudWxsLFxuICAgIHByb2Nlc3NCZWZvcmUsXG4gICAgbnVsbCxcbiAgICBvcHRpb25zXG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbXB1dGVWYWx1ZShzY2hlbWEsIGRhdGEsIG5hbWUsIGRhdGFQYXRoLCB7XG4gIGNvbXBvbmVudCA9IG51bGwsXG4gIHJvb3REYXRhID0gY29tcG9uZW50Py5yb290RGF0YVxufSA9IHt9KSB7XG4gIGNvbnN0IHsgY29tcHV0ZSB9ID0gc2NoZW1hXG4gIGlmIChjb21wdXRlKSB7XG4gICAgY29uc3QgdmFsdWUgPSBjb21wdXRlKFxuICAgICAgbmV3IERpdG9Db250ZXh0KGNvbXBvbmVudCwge1xuICAgICAgICBzY2hlbWEsXG4gICAgICAgIC8vIE92ZXJyaWRlIHZhbHVlIHRvIHByZXZlbnQgZW5kbGVzcyByZWN1cnNpb24gdGhyb3VnaCBjYWxsaW5nIHRoZVxuICAgICAgICAvLyBnZXR0ZXIgZm9yIGB0aGlzLnZhbHVlYCBpbiBgRGl0b0NvbnRleHRgOlxuICAgICAgICB2YWx1ZTogZGF0YVtuYW1lXSxcbiAgICAgICAgbmFtZSxcbiAgICAgICAgZGF0YSxcbiAgICAgICAgZGF0YVBhdGgsXG4gICAgICAgIHJvb3REYXRhXG4gICAgICB9KVxuICAgIClcbiAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gQWNjZXNzIGBkYXRhW25hbWVdYCBkaXJlY3RseSB0byB1cGRhdGUgdGhlIHZhbHVlIHdpdGhvdXQgY2FsbGluZ1xuICAgICAgLy8gcGFyc2UoKTpcbiAgICAgIGRhdGFbbmFtZV0gPSB2YWx1ZVxuICAgIH1cbiAgfVxuICAvLyBJZiB0aGUgdmFsdWUgaXMgc3RpbGwgbWlzc2luZyBhZnRlciBjb21wdXRlLCBzZXQgdGhlIGRlZmF1bHQgZm9yIGl0OlxuICBpZiAoIShuYW1lIGluIGRhdGEpICYmICFpZ25vcmVNaXNzaW5nVmFsdWUoc2NoZW1hKSkge1xuICAgIGRhdGFbbmFtZV0gPSBnZXREZWZhdWx0VmFsdWUoc2NoZW1hKVxuICB9XG4gIC8vIE5vdyBhY2Nlc3MgdGhlIHZhbHVlLiBUaGlzIGlzIGltcG9ydGFudCBmb3IgcmVhY3Rpdml0eSBhbmQgbmVlZHMgdG9cbiAgLy8gaGFwcGVuIGFmdGVyIGFsbCBwcmlvciBtYW5pcHVsYXRpb24gb2YgYGRhdGFbbmFtZV1gLCBzZWUgYWJvdmU6XG4gIHJldHVybiBkYXRhW25hbWVdXG59XG5cbmZ1bmN0aW9uIGNsb25lSXRlbShzb3VyY2VTY2hlbWEsIGl0ZW0sIG9wdGlvbnMpIHtcbiAgaWYgKG9wdGlvbnMuc2NoZW1hT25seSkge1xuICAgIGNvbnN0IGNvcHkgPSB7fVxuICAgIGNvbnN0IHsgaWRLZXkgPSAnaWQnLCBvcmRlcktleSB9ID0gc291cmNlU2NoZW1hXG4gICAgY29uc3QgaWQgPSBpdGVtW2lkS2V5XVxuICAgIGlmIChpZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb3B5W2lkS2V5XSA9IGlkXG4gICAgfVxuICAgIC8vIENvcHkgb3ZlciB0eXBlIGluIGNhc2UgdGhlcmUgYXJlIG11bHRpcGxlIGZvcm1zIHRvIGNob29zZSBmcm9tLlxuICAgIGlmIChoYXNNdWx0aXBsZUZvcm1TY2hlbWFzKHNvdXJjZVNjaGVtYSkpIHtcbiAgICAgIGNvcHkudHlwZSA9IGl0ZW0udHlwZVxuICAgIH1cbiAgICBpZiAob3JkZXJLZXkpIHtcbiAgICAgIGNvcHlbb3JkZXJLZXldID0gaXRlbVtvcmRlcktleV1cbiAgICB9XG4gICAgcmV0dXJuIGNvcHlcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4geyAuLi5pdGVtIH1cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvY2Vzc0RhdGEoc2NoZW1hLCBzb3VyY2VTY2hlbWEsIGRhdGEsIGRhdGFQYXRoLCB7XG4gIGNvbXBvbmVudCxcbiAgcm9vdERhdGEsXG4gIHNjaGVtYU9ubHksIC8vIHdoZXRoZXIgdG8gb25seSBpbmNsdWRlIGRhdGEgY292ZXJlZCBieSB0aGUgc2NoZW1hLCBvciBhbGwgZGF0YVxuICB0YXJnZXRcbn0gPSB7fSkge1xuICBjb25zdCBvcHRpb25zID0geyBjb21wb25lbnQsIHJvb3REYXRhLCBzY2hlbWFPbmx5LCB0YXJnZXQgfVxuICBjb25zdCBwcm9jZXNzZWREYXRhID0gY2xvbmVJdGVtKHNvdXJjZVNjaGVtYSwgZGF0YSwgb3B0aW9ucylcbiAgY29uc3QgZ3JhcGggPSBuZXcgU2NoZW1hR3JhcGgoKVxuXG4gIGNvbnN0IHByb2Nlc3NCZWZvcmUgPSAoc2NoZW1hLCBkYXRhLCBuYW1lLCBkYXRhUGF0aCwgcHJvY2Vzc2VkRGF0YSkgPT4ge1xuICAgIGxldCB2YWx1ZSA9IGNvbXB1dGVWYWx1ZShzY2hlbWEsIGRhdGEsIG5hbWUsIGRhdGFQYXRoLCBvcHRpb25zKVxuICAgIC8vIFRoZSBzY2hlbWEgZXhwZWN0cyB0aGUgYHdyYXBQcmltaXRpdmVzYCB0cmFuc2Zvcm1hdGlvbnMgdG8gYmUgcHJlc2VudCBvblxuICAgIC8vIHRoZSBkYXRhIHRoYXQgaXQgaXMgYXBwbGllZCBvbiwgc28gd2FycCBiZWZvcmUgYW5kIHVud3JhcCBhZnRlci5cbiAgICBpZiAoaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgIGNvbnN0IHsgd3JhcFByaW1pdGl2ZXMsIG9yZGVyS2V5LCBpZEtleSA9ICdpZCcgfSA9IHNjaGVtYVxuICAgICAgaWYgKHdyYXBQcmltaXRpdmVzKSB7XG4gICAgICAgIHZhbHVlID0gdmFsdWUubWFwKGVudHJ5ID0+ICh7XG4gICAgICAgICAgW3dyYXBQcmltaXRpdmVzXTogZW50cnlcbiAgICAgICAgfSkpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBBbHdheXMgc2hhbGxvdy1jbG9uZSBhcnJheSB2YWx1ZXM6XG4gICAgICAgIHZhbHVlID0gWy4uLnZhbHVlXVxuICAgICAgfVxuICAgICAgaWYgKG9yZGVyS2V5ICYmIHRhcmdldCA9PT0gJ2NsaXBib2FyZCcpIHtcbiAgICAgICAgLy8gU29ydCB0aGUgZGF0YSBiYWNrIGludG8gdGhlIG5hdHVyYWwgc2VxdWVuY2UgYXMgZGVmaW5lZCBieSB0aGVpciBpZHMsXG4gICAgICAgIC8vIHNvIGNvcHktcGFzdGluZyBiZXR3ZWVuIHNlcnZlcnMgKGUuZy4gbmVzdGVkIGZvbnQtY3V0cyBvbiBMaW5ldG8pXG4gICAgICAgIC8vIG5hdHVyYWxseSBnZXRzIG1hcHBlZCB0byB0aGUgc2FtZSBlbnRyaWVzIGluIHRoZSBncmFwaC5cbiAgICAgICAgdmFsdWUuc29ydCgoYSwgYikgPT4ge1xuICAgICAgICAgIGNvbnN0IGlkMSA9IGE/LltpZEtleV1cbiAgICAgICAgICBjb25zdCBpZDIgPSBiPy5baWRLZXldXG4gICAgICAgICAgcmV0dXJuIGlkMSA9PSBudWxsIHx8IGlzVGVtcG9yYXJ5SWQoaWQxKVxuICAgICAgICAgICAgPyAxXG4gICAgICAgICAgICA6IGlkMiA9PSBudWxsIHx8IGlzVGVtcG9yYXJ5SWQoaWQyKVxuICAgICAgICAgICAgICA/IC0xXG4gICAgICAgICAgICAgIDogaWQxIC0gaWQyXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfVxuICAgIHByb2Nlc3NlZERhdGFbbmFtZV0gPSB2YWx1ZVxuICB9XG5cbiAgY29uc3QgcHJvY2Vzc0FmdGVyID0gKHNjaGVtYSwgZGF0YSwgbmFtZSwgZGF0YVBhdGgsIHByb2Nlc3NlZERhdGEpID0+IHtcbiAgICBjb25zdCB7IHdyYXBQcmltaXRpdmVzLCBleGNsdWRlLCBwcm9jZXNzIH0gPSBzY2hlbWFcbiAgICBsZXQgdmFsdWUgPSBwcm9jZXNzZWREYXRhW25hbWVdXG5cbiAgICBjb25zdCB0eXBlT3B0aW9ucyA9IGdldFR5cGVPcHRpb25zKHNjaGVtYSlcblxuICAgIC8vIE5PVEU6IFdlIGRvbid0IGNhY2hlIHRoaXMgY29udGV4dCwgc2luY2UgYHZhbHVlYCBpcyBjaGFuZ2luZy5cbiAgICBjb25zdCBnZXRDb250ZXh0ID0gKCkgPT5cbiAgICAgIG5ldyBEaXRvQ29udGV4dChjb21wb25lbnQsIHtcbiAgICAgICAgc2NoZW1hLFxuICAgICAgICB2YWx1ZSxcbiAgICAgICAgbmFtZSxcbiAgICAgICAgZGF0YSxcbiAgICAgICAgZGF0YVBhdGgsXG4gICAgICAgIHJvb3REYXRhOiBvcHRpb25zLnJvb3REYXRhLFxuICAgICAgICAvLyBQYXNzIHRoZSBhbHJlYWR5IHByb2Nlc3NlZCBkYXRhIHRvIGBwcm9jZXNzKClgLCBzbyBpdCBjYW4gYmUgbW9kaWZpZWRcbiAgICAgICAgLy8gdGhyb3VnaCBgcHJvY2Vzc2VkSXRlbWAgZnJvbSB0aGVyZS5cbiAgICAgICAgcHJvY2Vzc2VkRGF0YVxuICAgICAgfSlcblxuICAgIC8vIEZpcnN0IHVud3JhcCB0aGUgd3JhcHBlZCBwcmltaXRpdmVzIGFnYWluLCB0byBicmluZyB0aGUgZGF0YSBiYWNrIGludG9cbiAgICAvLyBpdHMgbmF0aXZlIGZvcm0uIFNlIGBwcm9jZXNzQmVmb3JlKClgIGZvciBtb3JlIGRldGFpbHMuXG4gICAgaWYgKHdyYXBQcmltaXRpdmVzICYmIGlzQXJyYXkodmFsdWUpKSB7XG4gICAgICB2YWx1ZSA9IHZhbHVlLm1hcChvYmplY3QgPT4gb2JqZWN0W3dyYXBQcmltaXRpdmVzXSlcbiAgICB9XG5cbiAgICAvLyBFYWNoIGNvbXBvbmVudCB0eXBlIGNhbiBwcm92aWRlIGl0cyBvd24gc3RhdGljIGBwcm9jZXNzVmFsdWUoKWAgbWV0aG9kXG4gICAgLy8gdG8gY29udmVydCB0aGUgZGF0YSBmb3Igc3RvcmFnZS5cbiAgICBjb25zdCBwcm9jZXNzVmFsdWUgPSB0eXBlT3B0aW9ucz8ucHJvY2Vzc1ZhbHVlXG4gICAgaWYgKHByb2Nlc3NWYWx1ZSkge1xuICAgICAgdmFsdWUgPSBwcm9jZXNzVmFsdWUoc2NoZW1hLCB2YWx1ZSwgZGF0YVBhdGgsIGdyYXBoKVxuICAgIH1cblxuICAgIC8vIEhhbmRsZSB0aGUgdXNlcidzIGBwcm9jZXNzKClgIGNhbGxiYWNrIG5leHQsIGlmIG9uZSBpcyBwcm92aWRlZCwgc28gdGhhdFxuICAgIC8vIGl0IGNhbiBtb2RpZnkgZGF0YSBpbiBgcHJvY2Vzc2VkRGF0YWAgZXZlbiBpZiBpdCBwcm92aWRlcyBgZXhjbHVkZTogdHJ1ZWBcbiAgICBpZiAocHJvY2Vzcykge1xuICAgICAgdmFsdWUgPSBwcm9jZXNzKGdldENvbnRleHQoKSlcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICB0eXBlT3B0aW9ucz8uZXhjbHVkZVZhbHVlIHx8XG4gICAgICAvLyBTdXBwb3J0IGZ1bmN0aW9ucyBuZXh0IHRvIGJvb2xlYW5zIGZvciBgc2NoZW1hLmV4Y2x1ZGVgOlxuICAgICAgZXhjbHVkZSA9PT0gdHJ1ZSB8fFxuICAgICAgaXNGdW5jdGlvbihleGNsdWRlKSAmJiBleGNsdWRlKGdldENvbnRleHQoKSlcbiAgICApIHtcbiAgICAgIGRlbGV0ZSBwcm9jZXNzZWREYXRhW25hbWVdXG4gICAgfSBlbHNlIHtcbiAgICAgIHByb2Nlc3NlZERhdGFbbmFtZV0gPSB2YWx1ZVxuICAgIH1cbiAgfVxuXG4gIHByb2Nlc3NTY2hlbWFEYXRhKFxuICAgIHNjaGVtYSxcbiAgICBkYXRhLFxuICAgIGRhdGFQYXRoLFxuICAgIHByb2Nlc3NlZERhdGEsXG4gICAgcHJvY2Vzc0JlZm9yZSxcbiAgICBwcm9jZXNzQWZ0ZXIsXG4gICAgb3B0aW9uc1xuICApXG5cbiAgcmV0dXJuIGdyYXBoLnByb2Nlc3Moc291cmNlU2NoZW1hLCBwcm9jZXNzZWREYXRhLCBvcHRpb25zKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvY2Vzc1NjaGVtYURhdGEoXG4gIHNjaGVtYSxcbiAgZGF0YSxcbiAgZGF0YVBhdGgsXG4gIHByb2Nlc3NlZERhdGEsXG4gIHByb2Nlc3NCZWZvcmUsXG4gIHByb2Nlc3NBZnRlcixcbiAgb3B0aW9uc1xuKSB7XG4gIGNvbnN0IHByb2Nlc3NDb21wb25lbnRzID0gY29tcG9uZW50cyA9PiB7XG4gICAgY29uc3QgZ2V0RGF0YVBhdGggPSAoZGF0YVBhdGgsIHRva2VuKSA9PlxuICAgICAgZGF0YVBhdGggIT0gbnVsbFxuICAgICAgICA/IGFwcGVuZERhdGFQYXRoKGRhdGFQYXRoLCB0b2tlbilcbiAgICAgICAgOiBudWxsXG5cbiAgICBpZiAoY29tcG9uZW50cykge1xuICAgICAgZm9yIChjb25zdCBbbmFtZSwgY29tcG9uZW50U2NoZW1hXSBvZiBPYmplY3QuZW50cmllcyhjb21wb25lbnRzKSkge1xuICAgICAgICBpZiAoIWlzTmVzdGVkKGNvbXBvbmVudFNjaGVtYSkpIHtcbiAgICAgICAgICAvLyBSZWN1cnNpdmVseSBwcm9jZXNzIGRhdGEgb24gdW5uZXN0ZWQgY29tcG9uZW50cy5cbiAgICAgICAgICBwcm9jZXNzU2NoZW1hRGF0YShcbiAgICAgICAgICAgIGNvbXBvbmVudFNjaGVtYSxcbiAgICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgICBkYXRhUGF0aCxcbiAgICAgICAgICAgIHByb2Nlc3NlZERhdGEsXG4gICAgICAgICAgICBwcm9jZXNzQmVmb3JlLFxuICAgICAgICAgICAgcHJvY2Vzc0FmdGVyLFxuICAgICAgICAgICAgb3B0aW9uc1xuICAgICAgICAgIClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCBjb21wb25lbnREYXRhUGF0aCA9IGdldERhdGFQYXRoKGRhdGFQYXRoLCBuYW1lKVxuXG4gICAgICAgICAgY29uc3QgcHJvY2Vzc0l0ZW0gPSAoaXRlbSwgaW5kZXggPSBudWxsKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBpdGVtRGF0YVBhdGggPVxuICAgICAgICAgICAgICBpbmRleCAhPT0gbnVsbFxuICAgICAgICAgICAgICAgID8gZ2V0RGF0YVBhdGgoY29tcG9uZW50RGF0YVBhdGgsIGluZGV4KVxuICAgICAgICAgICAgICAgIDogY29tcG9uZW50RGF0YVBhdGhcbiAgICAgICAgICAgIGNvbnN0IGNvbnRleHQgPSBuZXcgRGl0b0NvbnRleHQob3B0aW9ucy5jb21wb25lbnQsIHtcbiAgICAgICAgICAgICAgc2NoZW1hOiBjb21wb25lbnRTY2hlbWEsXG4gICAgICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgICAgIGRhdGFQYXRoOiBjb21wb25lbnREYXRhUGF0aCxcbiAgICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgICAgcm9vdERhdGE6IG9wdGlvbnMucm9vdERhdGFcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICBjb25zdCBnZXRGb3JtcyA9IChcbiAgICAgICAgICAgICAgZ2V0VHlwZU9wdGlvbnMoY29tcG9uZW50U2NoZW1hKT8uZ2V0Rm9ybVNjaGVtYXNGb3JQcm9jZXNzaW5nIHx8XG4gICAgICAgICAgICAgIGdldEZvcm1TY2hlbWFzXG4gICAgICAgICAgICApXG4gICAgICAgICAgICBjb25zdCBmb3JtcyA9IGdldEZvcm1zKGNvbXBvbmVudFNjaGVtYSwgY29udGV4dClcbiAgICAgICAgICAgIGNvbnN0IGZvcm0gPSBnZXRJdGVtRm9ybVNjaGVtYUZyb21Gb3Jtcyhmb3JtcywgaXRlbSlcbiAgICAgICAgICAgIGlmIChmb3JtKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHByb2Nlc3NlZEl0ZW0gPSBwcm9jZXNzZWREYXRhXG4gICAgICAgICAgICAgICAgPyBjbG9uZUl0ZW0oY29tcG9uZW50U2NoZW1hLCBpdGVtLCBvcHRpb25zKVxuICAgICAgICAgICAgICAgIDogbnVsbFxuICAgICAgICAgICAgICByZXR1cm4gcHJvY2Vzc1NjaGVtYURhdGEoXG4gICAgICAgICAgICAgICAgZm9ybSxcbiAgICAgICAgICAgICAgICBpdGVtLFxuICAgICAgICAgICAgICAgIGl0ZW1EYXRhUGF0aCxcbiAgICAgICAgICAgICAgICBwcm9jZXNzZWRJdGVtLFxuICAgICAgICAgICAgICAgIHByb2Nlc3NCZWZvcmUsXG4gICAgICAgICAgICAgICAgcHJvY2Vzc0FmdGVyLFxuICAgICAgICAgICAgICAgIG9wdGlvbnNcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgLy8gSXRlbXMgd2l0aG91dCBmb3JtcyBzdGlsbCBnZXQgZnVsbHkgKGJ1dCBzaGFsbG93bHkpIGNsb25lZC5cbiAgICAgICAgICAgICAgLy8gVE9ETzogRmluZCBvdXQgb2YgdGhpcyBpcyBhY3R1YWxseSBuZWVkZWQgLyB1c2VkIGF0IGFsbD9cbiAgICAgICAgICAgICAgcmV0dXJuIHsgLi4uaXRlbSB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcHJvY2Vzc0JlZm9yZT8uKFxuICAgICAgICAgICAgY29tcG9uZW50U2NoZW1hLFxuICAgICAgICAgICAgZGF0YSxcbiAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICBjb21wb25lbnREYXRhUGF0aCxcbiAgICAgICAgICAgIHByb2Nlc3NlZERhdGFcbiAgICAgICAgICApXG5cbiAgICAgICAgICBsZXQgdmFsdWUgPSBwcm9jZXNzZWREYXRhID8gcHJvY2Vzc2VkRGF0YVtuYW1lXSA6IGRhdGFbbmFtZV1cbiAgICAgICAgICBpZiAodmFsdWUgIT0gbnVsbCAmJiBoYXNGb3JtU2NoZW1hKGNvbXBvbmVudFNjaGVtYSkpIHtcbiAgICAgICAgICAgIC8vIFJlY3Vyc2l2ZWx5IHByb2Nlc3MgZGF0YSBvbiBuZXN0ZWQgZm9ybSBpdGVtcy5cbiAgICAgICAgICAgIGlmIChpc0FycmF5KHZhbHVlKSkge1xuICAgICAgICAgICAgICAvLyBPcHRpbWl6YXRpb246IE5vIG5lZWQgdG8gY29sbGVjdCB2YWx1ZXMgaWYgd2UncmUgbm90IGNsb25pbmchXG4gICAgICAgICAgICAgIHZhbHVlID0gcHJvY2Vzc2VkRGF0YVxuICAgICAgICAgICAgICAgID8gdmFsdWUubWFwKHByb2Nlc3NJdGVtKVxuICAgICAgICAgICAgICAgIDogdmFsdWUuZm9yRWFjaChwcm9jZXNzSXRlbSlcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHZhbHVlID0gcHJvY2Vzc0l0ZW0odmFsdWUpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocHJvY2Vzc2VkRGF0YSkge1xuICAgICAgICAgICAgICBwcm9jZXNzZWREYXRhW25hbWVdID0gdmFsdWVcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBwcm9jZXNzQWZ0ZXI/LihcbiAgICAgICAgICAgIGNvbXBvbmVudFNjaGVtYSxcbiAgICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgY29tcG9uZW50RGF0YVBhdGgsXG4gICAgICAgICAgICBwcm9jZXNzZWREYXRhXG4gICAgICAgICAgKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJvY2Vzc0NvbXBvbmVudHMoc2NoZW1hLmNvbXBvbmVudHMpXG4gIGZvciAoY29uc3QgdGFiIG9mIGdldFRhYlNjaGVtYXMoc2NoZW1hKSkge1xuICAgIHByb2Nlc3NDb21wb25lbnRzKHRhYi5jb21wb25lbnRzKVxuICB9XG4gIGZvciAoY29uc3QgcGFuZWwgb2YgZ2V0UGFuZWxTY2hlbWFzKHNjaGVtYSkpIHtcbiAgICBwcm9jZXNzQ29tcG9uZW50cyhwYW5lbC5jb21wb25lbnRzKVxuICB9XG5cbiAgcmV0dXJuIHByb2Nlc3NlZERhdGEgfHwgZGF0YVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0TmFtZWRTY2hlbWFzKHNjaGVtYXMsIGRlZmF1bHRzKSB7XG4gIGNvbnN0IHRvT2JqZWN0ID0gKGFycmF5LCB0b1NjaGVtYSkgPT4ge1xuICAgIHJldHVybiBhcnJheS5sZW5ndGggPiAwXG4gICAgICA/IGFycmF5LnJlZHVjZSgob2JqZWN0LCB2YWx1ZSkgPT4ge1xuICAgICAgICAgIGNvbnN0IHNjaGVtYSA9IHRvU2NoZW1hKHZhbHVlKVxuICAgICAgICAgIGlmIChzY2hlbWEpIHtcbiAgICAgICAgICAgIG9iamVjdFtzY2hlbWEubmFtZV0gPVxuICAgICAgICAgICAgICBzY2hlbWEgJiYgZGVmYXVsdHNcbiAgICAgICAgICAgICAgICA/IHsgLi4uZGVmYXVsdHMsIC4uLnNjaGVtYSB9XG4gICAgICAgICAgICAgICAgOiBzY2hlbWFcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIG9iamVjdFxuICAgICAgICB9LCB7fSlcbiAgICAgIDogbnVsbFxuICB9XG5cbiAgcmV0dXJuIGlzQXJyYXkoc2NoZW1hcylcbiAgICA/IHRvT2JqZWN0KHNjaGVtYXMsIHZhbHVlID0+XG4gICAgICAgIGlzT2JqZWN0KHZhbHVlKVxuICAgICAgICAgID8gdmFsdWVcbiAgICAgICAgICA6IHtcbiAgICAgICAgICAgICAgbmFtZTogY2FtZWxpemUodmFsdWUsIGZhbHNlKVxuICAgICAgICAgICAgfVxuICAgICAgKVxuICAgIDogaXNPYmplY3Qoc2NoZW1hcylcbiAgICAgID8gdG9PYmplY3QoXG4gICAgICAgICAgT2JqZWN0LmVudHJpZXMoc2NoZW1hcyksXG4gICAgICAgICAgKFtuYW1lLCB2YWx1ZV0pID0+XG4gICAgICAgICAgICBpc09iamVjdCh2YWx1ZSlcbiAgICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgICAgICAgLi4udmFsdWVcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIDogaXNTdHJpbmcodmFsdWUpXG4gICAgICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICAgICAgICAgIGxhYmVsOiB2YWx1ZVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDogbnVsbFxuICAgICAgICApXG4gICAgICA6IG51bGxcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEJ1dHRvblNjaGVtYXMoYnV0dG9ucykge1xuICByZXR1cm4gZ2V0TmFtZWRTY2hlbWFzKFxuICAgIGJ1dHRvbnMsXG4gICAgeyB0eXBlOiAnYnV0dG9uJyB9IC8vIERlZmF1bHRzXG4gIClcbn1cblxuZnVuY3Rpb24gZ2V0VHlwZShzY2hlbWFPclR5cGUpIHtcbiAgcmV0dXJuIGlzT2JqZWN0KHNjaGVtYU9yVHlwZSkgPyBzY2hlbWFPclR5cGUudHlwZSA6IHNjaGVtYU9yVHlwZVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0VHlwZU9wdGlvbnMoc2NoZW1hT3JUeXBlKSB7XG4gIHJldHVybiBnZXRUeXBlQ29tcG9uZW50KGdldFR5cGUoc2NoZW1hT3JUeXBlKSwgdHJ1ZSkgPz8gbnVsbFxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0U291cmNlVHlwZShzY2hlbWFPclR5cGUpIHtcbiAgcmV0dXJuIChcbiAgICBnZXRUeXBlT3B0aW9ucyhzY2hlbWFPclR5cGUpPy5nZXRTb3VyY2VUeXBlPy4oZ2V0VHlwZShzY2hlbWFPclR5cGUpKSA/P1xuICAgIG51bGxcbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UGFuZWxFbnRyeShzY2hlbWEsIGRhdGFQYXRoID0gbnVsbCwgdGFiQ29tcG9uZW50ID0gbnVsbCkge1xuICByZXR1cm4gc2NoZW1hXG4gICAgPyB7XG4gICAgICAgIHNjaGVtYSxcbiAgICAgICAgLy8gSWYgdGhlIHBhbmVsIHByb3ZpZGVzIGl0cyBvd24gbmFtZSwgYXBwZW5kIGl0IHRvIHRoZSBkYXRhUGF0aC5cbiAgICAgICAgLy8gVGhpcyBpcyB1c2VkIGUuZy4gZm9yICRmaWx0ZXJzIHBhbmVscy5cbiAgICAgICAgZGF0YVBhdGg6XG4gICAgICAgICAgZGF0YVBhdGggIT0gbnVsbCAmJiBzY2hlbWEubmFtZVxuICAgICAgICAgICAgPyBhcHBlbmREYXRhUGF0aChkYXRhUGF0aCwgc2NoZW1hLm5hbWUpXG4gICAgICAgICAgICA6IGRhdGFQYXRoLFxuICAgICAgICB0YWJDb21wb25lbnRcbiAgICAgIH1cbiAgICA6IG51bGxcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFBhbmVsRW50cmllcyhcbiAgcGFuZWxTY2hlbWFzLFxuICBkYXRhUGF0aCxcbiAgdGFiQ29tcG9uZW50ID0gbnVsbCxcbiAgcGFuZWxFbnRyaWVzID0gW11cbikge1xuICBpZiAocGFuZWxTY2hlbWFzKSB7XG4gICAgZm9yIChjb25zdCBba2V5LCBzY2hlbWFdIG9mIE9iamVjdC5lbnRyaWVzKHBhbmVsU2NoZW1hcykpIHtcbiAgICAgIGNvbnN0IGVudHJ5ID0gZ2V0UGFuZWxFbnRyeShcbiAgICAgICAgc2NoZW1hLFxuICAgICAgICBhcHBlbmREYXRhUGF0aChkYXRhUGF0aCwga2V5KSxcbiAgICAgICAgdGFiQ29tcG9uZW50XG4gICAgICApXG4gICAgICBpZiAoZW50cnkpIHtcbiAgICAgICAgcGFuZWxFbnRyaWVzLnB1c2goZW50cnkpXG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBwYW5lbEVudHJpZXNcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFRhYlNjaGVtYXMoc2NoZW1hKSB7XG4gIHJldHVybiBzY2hlbWE/LnRhYnMgPyBPYmplY3QudmFsdWVzKHNjaGVtYS50YWJzKSA6IFtdXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRQYW5lbFNjaGVtYXMoc2NoZW1hKSB7XG4gIHJldHVybiBzY2hlbWE/LnBhbmVscyA/IE9iamVjdC52YWx1ZXMoc2NoZW1hLnBhbmVscykgOiBbXVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0QWxsUGFuZWxFbnRyaWVzKFxuICBhcGksXG4gIHNjaGVtYSxcbiAgZGF0YVBhdGgsXG4gIGNvbXBvbmVudCA9IG51bGwsXG4gIHRhYkNvbXBvbmVudCA9IG51bGxcbikge1xuICBjb25zdCBwYW5lbFNjaGVtYSA9IGdldFR5cGVPcHRpb25zKHNjaGVtYSk/LmdldFBhbmVsU2NoZW1hPy4oXG4gICAgYXBpLFxuICAgIHNjaGVtYSxcbiAgICBkYXRhUGF0aCxcbiAgICBjb21wb25lbnRcbiAgKVxuICBjb25zdCBwYW5lbEVudHJpZXMgPSBwYW5lbFNjaGVtYVxuICAgID8gW2dldFBhbmVsRW50cnkocGFuZWxTY2hlbWEsIGRhdGFQYXRoLCB0YWJDb21wb25lbnQpXVxuICAgIDogW11cbiAgLy8gQWxsb3cgZWFjaCBjb21wb25lbnQgdG8gcHJvdmlkZSBpdHMgb3duIHNldCBvZiBwYW5lbHMsIGluXG4gIC8vIGFkZGl0aW9uIHRvIHRoZSBkZWZhdWx0IG9uZSAoZS5nLiBnZXRGaWx0ZXJzUGFuZWwoKSwgJGZpbHRlcnMpOlxuICBnZXRQYW5lbEVudHJpZXMoc2NoZW1hPy5wYW5lbHMsIGRhdGFQYXRoLCB0YWJDb21wb25lbnQsIHBhbmVsRW50cmllcylcbiAgcmV0dXJuIHBhbmVsRW50cmllc1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNPYmplY3RTb3VyY2Uoc2NoZW1hT3JUeXBlKSB7XG4gIHJldHVybiBnZXRTb3VyY2VUeXBlKHNjaGVtYU9yVHlwZSkgPT09ICdvYmplY3QnXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0xpc3RTb3VyY2Uoc2NoZW1hT3JUeXBlKSB7XG4gIHJldHVybiBnZXRTb3VyY2VUeXBlKHNjaGVtYU9yVHlwZSkgPT09ICdsaXN0J1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0SXRlbUlkKHNvdXJjZVNjaGVtYSwgaXRlbSkge1xuICBjb25zdCBpZCA9IGl0ZW1bc291cmNlU2NoZW1hLmlkS2V5IHx8ICdpZCddXG4gIHJldHVybiBpZCAhPSBudWxsID8gU3RyaW5nKGlkKSA6IHVuZGVmaW5lZFxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0SXRlbVVpZChzb3VyY2VTY2hlbWEsIGl0ZW0pIHtcbiAgLy8gVHJ5IHRvIHVzZSB0aGUgaXRlbSBpZCBhcyB0aGUgdWlkLCBmYWxsaW5nIGJhY2sgb24gYXV0by1nZW5lcmF0ZWQgaWRzLCBidXRcbiAgLy8gZWl0aGVyIHdheSwgcGFzcyB0aHJvdWdoIGBnZXRVaWQoKWAgc28gdGhhdCB0aGUgaWRzIGFyZSBhc3NvY2lhdGVkIHdpdGggdGhlXG4gIC8vIGl0ZW0gdGhyb3VnaCBhIHdlYWsgbWFwLCBhcyB0aGUgaWRzIGNhbiBiZSBmaWx0ZXJlZCBvdXQgaW4gYHByb2Nlc3NEYXRhKClgXG4gIC8vIHdoaWxlIHRoZSBjb21wb25lbnRzIHRoYXQgdXNlIHRoZSB1aWRzIGFzIGtleSBhcmUgc3RpbGwgdmlzaWJsZS5cbiAgcmV0dXJuIGdldFVpZChpdGVtLCBpdGVtID0+IGdldEl0ZW1JZChzb3VyY2VTY2hlbWEsIGl0ZW0pKVxufVxuIiwiaW1wb3J0IHsgaXNPYmplY3QsIGlzU3RyaW5nLCBwaWNrQnkgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG5leHBvcnQgZnVuY3Rpb24gaGFzUmVzb3VyY2Uoc2NoZW1hKSB7XG4gIHJldHVybiAhIWdldFJlc291cmNlKHNjaGVtYS5yZXNvdXJjZSlcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFJlc291cmNlKHJlc291cmNlLCBkZWZhdWx0cyA9IHt9KSB7XG4gIGNvbnN0IHsgcGFyZW50LCAuLi5kZWZzIH0gPSBkZWZhdWx0c1xuICByZXNvdXJjZSA9IGlzT2JqZWN0KHJlc291cmNlKVxuICAgID8geyAuLi5kZWZzLCAuLi5yZXNvdXJjZSB9XG4gICAgOiBpc1N0cmluZyhyZXNvdXJjZSlcbiAgICAgID8geyAuLi5kZWZzLCBwYXRoOiByZXNvdXJjZSB9XG4gICAgICA6IG51bGxcbiAgLy8gT25seSBzZXQgcGFyZW50IGlmIHBhdGggZG9lc24ndCBzdGFydCB3aXRoICcvJywgc28gcmVsYXRpdmUgVVJMcyBhcmVcbiAgLy8gZGVhbHQgd2l0aCBjb3JyZWN0bHkuXG4gIGlmIChcbiAgICByZXNvdXJjZSAmJlxuICAgIHBhcmVudCAhPT0gdW5kZWZpbmVkICYmXG4gICAgcmVzb3VyY2UucGFyZW50ID09PSB1bmRlZmluZWQgJiZcbiAgICAhcmVzb3VyY2UucGF0aD8uc3RhcnRzV2l0aCgnLycpXG4gICkge1xuICAgIHJlc291cmNlLnBhcmVudCA9IHBhcmVudFxuICAgIGlmICghcmVzb3VyY2UucGF0aCkge1xuICAgICAgcmVzb3VyY2UucGF0aCA9ICcuJ1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzb3VyY2Vcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldE1lbWJlclJlc291cmNlKGlkLCByZXNvdXJjZSkge1xuICByZXR1cm4gaWQgIT0gbnVsbCAmJiByZXNvdXJjZT8udHlwZSA9PT0gJ2NvbGxlY3Rpb24nXG4gICAgPyB7XG4gICAgICAgIHR5cGU6ICdtZW1iZXInLFxuICAgICAgICAuLi5waWNrQnkoXG4gICAgICAgICAgcmVzb3VyY2UsXG4gICAgICAgICAgKHZhbHVlLCBrZXkpID0+IFsnbWV0aG9kJywgJ3BhdGgnLCAncGFyZW50J10uaW5jbHVkZXMoa2V5KVxuICAgICAgICApLFxuICAgICAgICBpZDogYCR7aWR9YFxuICAgICAgfVxuICAgIDogbnVsbFxufVxuIiwiaW1wb3J0IHtcbiAgaXNPYmplY3QsXG4gIGlzU3RyaW5nLFxuICBpc0Z1bmN0aW9uLFxuICBlcXVhbHMsXG4gIGxhYmVsaXplLFxuICBoeXBoZW5hdGUsXG4gIGZvcm1hdFxufSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0IGFwcFN0YXRlIGZyb20gJy4uL2FwcFN0YXRlLmpzJ1xuaW1wb3J0IERpdG9Db250ZXh0IGZyb20gJy4uL0RpdG9Db250ZXh0LmpzJ1xuaW1wb3J0IEVtaXR0ZXJNaXhpbiBmcm9tICcuL0VtaXR0ZXJNaXhpbi5qcydcbmltcG9ydCB7XG4gIGZsYXR0ZW5WaWV3cyxcbiAgZ2V0U2NoZW1hVmFsdWUsXG4gIHNob3VsZFJlbmRlclNjaGVtYVxufSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG5pbXBvcnQgeyBnZXRSZXNvdXJjZSwgZ2V0TWVtYmVyUmVzb3VyY2UgfSBmcm9tICcuLi91dGlscy9yZXNvdXJjZS5qcydcbmltcG9ydCB7IGNvbXB1dGVkLCByZWFjdGl2ZSB9IGZyb20gJ3Z1ZSdcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IHtcbiAgbWl4aW5zOiBbRW1pdHRlck1peGluXSxcblxuICBpbmplY3Q6IFtcbiAgICAnYXBpJyxcbiAgICAnJHZlcmJzJyxcbiAgICAnJHZpZXdzJyxcbiAgICAnJGlzUG9wdWxhdGVkJyxcbiAgICAnJHBhcmVudENvbXBvbmVudCcsXG4gICAgJyRzY2hlbWFDb21wb25lbnQnLFxuICAgICckcm91dGVDb21wb25lbnQnLFxuICAgICckZGF0YUNvbXBvbmVudCcsXG4gICAgJyRzb3VyY2VDb21wb25lbnQnLFxuICAgICckcmVzb3VyY2VDb21wb25lbnQnLFxuICAgICckZGlhbG9nQ29tcG9uZW50JyxcbiAgICAnJHBhbmVsQ29tcG9uZW50JyxcbiAgICAnJHRhYkNvbXBvbmVudCdcbiAgXSxcblxuICBwcm92aWRlKCkge1xuICAgIGNvbnN0IHNlbGYgPSAoKSA9PiB0aGlzXG4gICAgcmV0dXJuIHRoaXMucHJvdmlkZXNEYXRhXG4gICAgICA/IHtcbiAgICAgICAgICAkcGFyZW50Q29tcG9uZW50OiBzZWxmLFxuICAgICAgICAgICRkYXRhQ29tcG9uZW50OiBzZWxmXG4gICAgICAgIH1cbiAgICAgIDoge1xuICAgICAgICAgICRwYXJlbnRDb21wb25lbnQ6IHNlbGZcbiAgICAgICAgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGFwcFN0YXRlLFxuICAgICAgaXNNb3VudGVkOiBmYWxzZSxcbiAgICAgIG92ZXJyaWRlczogbnVsbCAvLyBTZWUgYWNjZXNzb3IuanNcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBwcm92aWRlc0RhdGEoKSB7XG4gICAgICAvLyBOT1RFOiBUaGlzIGlzIG92ZXJyaWRkZW4gaW4gUmVzb3VyY2VNaXhpbiwgdXNlZCBieSBsaXN0cy5cbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH0sXG5cbiAgICBzb3VyY2VTY2hlbWEoKSB7XG4gICAgICByZXR1cm4gdGhpcy5tZXRhPy5zY2hlbWFcbiAgICB9LFxuXG4gICAgdXNlcigpIHtcbiAgICAgIHJldHVybiBhcHBTdGF0ZS51c2VyXG4gICAgfSxcblxuICAgIC8vICR2ZXJicywgJHZlcmJzIGFuZCAkaXNQb3B1bGF0ZWQgYXJlIGRlZmluZWQgYXMgZnVuY3Rpb25zLCB0byBwcmVzZXJ2ZVxuICAgIC8vIHJlYWN0aXZlbmVzcyBhY3Jvc3MgcHJvdmlkZS9pbmplY3QuXG4gICAgLy8gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vdnVlanMvdnVlL2lzc3Vlcy83MDE3I2lzc3VlY29tbWVudC00ODA5MDY2OTFcbiAgICB2ZXJicygpIHtcbiAgICAgIHJldHVybiB0aGlzLiR2ZXJicygpXG4gICAgfSxcblxuICAgIHZpZXdzKCkge1xuICAgICAgcmV0dXJuIHRoaXMuJHZpZXdzKClcbiAgICB9LFxuXG4gICAgZmxhdHRlbmVkVmlld3MoKSB7XG4gICAgICByZXR1cm4gZmxhdHRlblZpZXdzKHRoaXMudmlld3MpXG4gICAgfSxcblxuICAgIGlzUG9wdWxhdGVkKCkge1xuICAgICAgcmV0dXJuIHRoaXMuJGlzUG9wdWxhdGVkKClcbiAgICB9LFxuXG4gICAgbG9jYWxlKCkge1xuICAgICAgcmV0dXJuIHRoaXMuYXBpLmxvY2FsZVxuICAgIH0sXG5cbiAgICBjb250ZXh0KCkge1xuICAgICAgcmV0dXJuIG5ldyBEaXRvQ29udGV4dCh0aGlzLCB7IG5lc3RlZDogZmFsc2UgfSlcbiAgICB9LFxuXG4gICAgcm9vdENvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzLiRyb290LiRyZWZzLnJvb3RcbiAgICB9LFxuXG4gICAgLy8gVXNlIGNvbXB1dGVkIHByb3BlcnRpZXMgYXMgbGlua3MgdG8gaW5qZWN0cywgc28gRGl0b1NjaGVtYSBjYW5cbiAgICAvLyBvdmVycmlkZSB0aGUgcHJvcGVydHkgYW5kIHJldHVybiBgdGhpc2AgaW5zdGVhZCBvZiB0aGUgcGFyZW50LlxuICAgIHBhcmVudENvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzLiRwYXJlbnRDb21wb25lbnQoKVxuICAgIH0sXG5cbiAgICBzY2hlbWFDb21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpcy4kc2NoZW1hQ29tcG9uZW50KClcbiAgICB9LFxuXG4gICAgcm91dGVDb21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpcy4kcm91dGVDb21wb25lbnQoKVxuICAgIH0sXG5cbiAgICBmb3JtQ29tcG9uZW50KCkge1xuICAgICAgY29uc3QgY29tcG9uZW50ID0gdGhpcy5yb3V0ZUNvbXBvbmVudFxuICAgICAgcmV0dXJuIGNvbXBvbmVudD8uaXNGb3JtID8gY29tcG9uZW50IDogbnVsbFxuICAgIH0sXG5cbiAgICB2aWV3Q29tcG9uZW50KCkge1xuICAgICAgY29uc3QgY29tcG9uZW50ID0gdGhpcy5yb3V0ZUNvbXBvbmVudFxuICAgICAgcmV0dXJuIGNvbXBvbmVudD8uaXNWaWV3ID8gY29tcG9uZW50IDogbnVsbFxuICAgIH0sXG5cbiAgICAvLyBSZXR1cm5zIHRoZSBmaXJzdCByb3V0ZSBjb21wb25lbnQgaW4gdGhlIGNoYWluIG9mIHBhcmVudHMsIGluY2x1ZGluZ1xuICAgIC8vIHRoaXMgY3VycmVudCBjb21wb25lbnQsIHRoYXQgaXMgbGlua2VkIHRvIGEgcmVzb3VyY2UgKGFuZCB0aHVzIGxvYWRzIGl0c1xuICAgIC8vIG93biBkYXRhIGFuZCBkb2Vzbid0IGhvbGQgbmVzdGVkIGRhdGEpLlxuICAgIGRhdGFDb21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5wcm92aWRlc0RhdGEgPyB0aGlzIDogdGhpcy4kZGF0YUNvbXBvbmVudCgpXG4gICAgfSxcblxuICAgIHNvdXJjZUNvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzLiRzb3VyY2VDb21wb25lbnQoKVxuICAgIH0sXG5cbiAgICByZXNvdXJjZUNvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzLiRyZXNvdXJjZUNvbXBvbmVudCgpXG4gICAgfSxcblxuICAgIGRpYWxvZ0NvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzLiRkaWFsb2dDb21wb25lbnQoKVxuICAgIH0sXG5cbiAgICBwYW5lbENvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzLiRwYW5lbENvbXBvbmVudCgpXG4gICAgfSxcblxuICAgIHRhYkNvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzLiR0YWJDb21wb25lbnQoKVxuICAgIH0sXG5cbiAgICBwYXJlbnRTY2hlbWFDb21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWFDb21wb25lbnQ/LnBhcmVudENvbXBvbmVudC5zY2hlbWFDb21wb25lbnRcbiAgICB9LFxuXG4gICAgcGFyZW50Um91dGVDb21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5yb3V0ZUNvbXBvbmVudD8ucGFyZW50Q29tcG9uZW50LnJvdXRlQ29tcG9uZW50XG4gICAgfSxcblxuICAgIHBhcmVudEZvcm1Db21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5mb3JtQ29tcG9uZW50Py5wYXJlbnRDb21wb25lbnQuZm9ybUNvbXBvbmVudFxuICAgIH0sXG5cbiAgICAvLyBSZXR1cm5zIHRoZSBkYXRhIG9mIHRoZSBmaXJzdCByb3V0ZSBjb21wb25lbnQgaW4gdGhlIGNoYWluIG9mIHBhcmVudHNcbiAgICAvLyB0aGF0IGxvYWRzIGl0cyBvd24gZGF0YSBmcm9tIGFuIGFzc29jaWF0ZWQgQVBJIHJlc291cmNlLlxuICAgIHJvb3REYXRhKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZGF0YUNvbXBvbmVudD8uZGF0YVxuICAgIH1cbiAgfSxcblxuICBtb3VudGVkKCkge1xuICAgIHRoaXMuaXNNb3VudGVkID0gdHJ1ZVxuICB9LFxuXG4gIGJlZm9yZUNyZWF0ZSgpIHtcbiAgICBjb25zdCB1aWQgPSBuZXh0VWlkKytcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgJyR1aWQnLCB7IGdldDogKCkgPT4gdWlkIH0pXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGxhYmVsaXplLFxuXG4gICAgLy8gVGhlIHN0YXRlIG9mIGNvbXBvbmVudHMgaXMgb25seSBhdmFpbGFibGUgZHVyaW5nIHRoZSBsaWZlLWN5Y2xlIG9mIGFcbiAgICAvLyBjb21wb25lbnQuIFNvbWUgaW5mb3JtYXRpb24gd2UgbmVlZCBhdmFpbGFibGUgbG9uZ2VyIHRoYW4gdGhhdCwgZS5nLlxuICAgIC8vIGBxdWVyeWAgJiBgdG90YWxgIG9uIFR5cGVMaXN0LCBzbyB0aGF0IHdoZW4gdGhlIHVzZXIgbmF2aWdhdGVzIGJhY2sgZnJvbVxuICAgIC8vIGVkaXRpbmcgYW4gaXRlbSBpbiB0aGUgbGlzdCwgdGhlIHN0YXRlIG9mIHRoZSBsaXN0IGlzIHN0aWxsIHRoZSBzYW1lLlxuICAgIC8vIFdlIGNhbid0IHN0b3JlIHRoaXMgaW4gYGRhdGFgLCBhcyB0aGlzIGlzIGFscmVhZHkgdGhlIHB1cmUgZGF0YSBmcm9tIHRoZVxuICAgIC8vIEFQSSBzZXJ2ZXIuIFRoYXQncyB3aGF0IHRoZSBgc3RvcmVgIGlzIGZvcjogTWVtb3J5IHRoYXQncyBhdmFpbGFibGUgYXNcbiAgICAvLyBsb25nIGFzIHRoZSBjdXJyZW50IGVkaXRpbmcgcGF0aCBpcyBzdGlsbCB2YWxpZC4gRm9yIHR5cGUgY29tcG9uZW50cyxcbiAgICAvLyB0aGlzIG1lbW9yeSBpcyBwcm92aWRlZCBieSB0aGUgcGFyZW50LCBzZWUgUm91dGVNaXhpbiBhbmQgRGl0b1BhbmUuXG4gICAgZ2V0U3RvcmUoa2V5KSB7XG4gICAgICByZXR1cm4gdGhpcy5zdG9yZVtrZXldXG4gICAgfSxcblxuICAgIHNldFN0b3JlKGtleSwgdmFsdWUpIHtcbiAgICAgIHRoaXMuc3RvcmVba2V5XSA9IHZhbHVlXG4gICAgICByZXR1cm4gdmFsdWVcbiAgICB9LFxuXG4gICAgcmVtb3ZlU3RvcmUoa2V5KSB7XG4gICAgICBkZWxldGUgdGhpcy5zdG9yZVtrZXldXG4gICAgfSxcblxuICAgIGdldFN0b3JlS2V5QnlJbmRleChpbmRleCkge1xuICAgICAgcmV0dXJuIHRoaXMuc3RvcmUuJGtleXNCeUluZGV4Py5baW5kZXhdXG4gICAgfSxcblxuICAgIHNldFN0b3JlS2V5QnlJbmRleChpbmRleCwga2V5KSB7XG4gICAgICB0aGlzLnN0b3JlLiRrZXlzQnlJbmRleCA/Pz0ge31cbiAgICAgIHRoaXMuc3RvcmUuJGtleXNCeUluZGV4W2luZGV4XSA9IGtleVxuICAgIH0sXG5cbiAgICBnZXRDaGlsZFN0b3JlKGtleSwgaW5kZXgpIHtcbiAgICAgIGxldCBzdG9yZSA9IHRoaXMuZ2V0U3RvcmUoa2V5KVxuICAgICAgaWYgKCFzdG9yZSAmJiBpbmRleCAhPSBudWxsKSB7XG4gICAgICAgIC8vIFdoZW4gc3RvcmluZywgdGVtcG9yYXJ5IGlkcyBjaGFuZ2UgdG8gcGVybWFuZW50IG9uZXMgYW5kIHRodXMgdGhlIGtleVxuICAgICAgICAvLyBjYW4gY2hhbmdlLiBUbyBzdGlsbCBmaW5kIHRoZSBzdG9yZSwgd2UgcmVmZXJlbmNlIGJ5IGluZGV4IGFzIHdlbGwsXG4gICAgICAgIC8vIHRvIGJlIGFibGUgdG8gZmluZCB0aGUgc3RvcmUgYWdhaW4gYWZ0ZXIgdGhlIGl0ZW0gd2FzIHNhdmVkLlxuICAgICAgICBjb25zdCBvbGRLZXkgPSB0aGlzLmdldFN0b3JlS2V5QnlJbmRleChpbmRleClcbiAgICAgICAgc3RvcmUgPSB0aGlzLmdldFN0b3JlKG9sZEtleSlcbiAgICAgICAgaWYgKHN0b3JlKSB7XG4gICAgICAgICAgdGhpcy5zZXRTdG9yZShrZXksIHN0b3JlKVxuICAgICAgICAgIHRoaXMucmVtb3ZlU3RvcmUob2xkS2V5KVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoIXN0b3JlKSB7XG4gICAgICAgIHN0b3JlID0gdGhpcy5zZXRTdG9yZShrZXksIHJlYWN0aXZlKHt9KSlcbiAgICAgICAgaWYgKGluZGV4ICE9IG51bGwpIHtcbiAgICAgICAgICB0aGlzLnNldFN0b3JlS2V5QnlJbmRleChpbmRleCwga2V5KVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gc3RvcmVcbiAgICB9LFxuXG4gICAgcmVtb3ZlQ2hpbGRTdG9yZShrZXksIGluZGV4KSB7XG4gICAgICAvLyBHRXQgdGhlIGNoaWxkLXN0b3JlIGZpcnN0LCBzbyB0aGF0IGluZGljZXMgY2FuIGJlIHRyYW5zZmVycmVkIG92ZXJcbiAgICAgIC8vIHRlbXBvcmFyeSBpZCBjaGFuZ2VzIGR1cmluZyBwZXJzaXN0ZW5jZS5cbiAgICAgIHRoaXMuZ2V0Q2hpbGRTdG9yZShrZXksIGluZGV4KVxuICAgICAgdGhpcy5yZW1vdmVTdG9yZShrZXkpXG4gICAgfSxcblxuICAgIGdldFNjaGVtYVZhbHVlKFxuICAgICAga2V5T3JEYXRhUGF0aCxcbiAgICAgIHtcbiAgICAgICAgdHlwZSxcbiAgICAgICAgZGVmYXVsdDogZGVmLFxuICAgICAgICBzY2hlbWEgPSB0aGlzLnNjaGVtYSxcbiAgICAgICAgY29udGV4dCA9IHRoaXMuY29udGV4dCxcbiAgICAgICAgY2FsbGJhY2sgPSB0cnVlXG4gICAgICB9ID0ge31cbiAgICApIHtcbiAgICAgIHJldHVybiBnZXRTY2hlbWFWYWx1ZShrZXlPckRhdGFQYXRoLCB7XG4gICAgICAgIHR5cGUsXG4gICAgICAgIHNjaGVtYSxcbiAgICAgICAgY29udGV4dCxcbiAgICAgICAgY2FsbGJhY2ssXG4gICAgICAgIGRlZmF1bHQ6IGlzRnVuY3Rpb24oZGVmKSA/ICgpID0+IGRlZi5jYWxsKHRoaXMpIDogZGVmXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBnZXRMYWJlbChzY2hlbWEsIG5hbWUpIHtcbiAgICAgIHJldHVybiBzY2hlbWFcbiAgICAgICAgPyB0aGlzLmdldFNjaGVtYVZhbHVlKCdsYWJlbCcsIHsgdHlwZTogU3RyaW5nLCBzY2hlbWEgfSkgfHxcbiAgICAgICAgICBsYWJlbGl6ZShuYW1lIHx8IHNjaGVtYS5uYW1lKVxuICAgICAgICA6IGxhYmVsaXplKG5hbWUpIHx8ICcnXG4gICAgfSxcblxuICAgIGdldEJ1dHRvbkF0dHJpYnV0ZXModmVyYikge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY2xhc3M6IGBkaXRvLWJ1dHRvbi0ke3ZlcmJ9YCxcbiAgICAgICAgdGl0bGU6IGxhYmVsaXplKHZlcmIpXG4gICAgICB9XG4gICAgfSxcblxuICAgIC8vIFRPRE86IFJlbmFtZSAqTGluaygpIHRvICpSb3V0ZSgpLlxuICAgIGdldFF1ZXJ5TGluayhxdWVyeSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgcXVlcnksXG4gICAgICAgIC8vIFByZXNlcnZlIGhhc2ggZm9yIHRhYnM6XG4gICAgICAgIGhhc2g6IHRoaXMuJHJvdXRlLmhhc2hcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgc2hvdWxkUmVuZGVyU2NoZW1hKHNjaGVtYSA9IG51bGwpIHtcbiAgICAgIHJldHVybiBzaG91bGRSZW5kZXJTY2hlbWEoc2NoZW1hLCB0aGlzLmNvbnRleHQpXG4gICAgfSxcblxuICAgIHNob3VsZFNob3dTY2hlbWEoc2NoZW1hID0gbnVsbCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0U2NoZW1hVmFsdWUoJ3Zpc2libGUnLCB7XG4gICAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICAgIGRlZmF1bHQ6IHRydWUsXG4gICAgICAgIHNjaGVtYVxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgc2hvdWxkRGlzYWJsZVNjaGVtYShzY2hlbWEgPSBudWxsKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRTY2hlbWFWYWx1ZSgnZGlzYWJsZWQnLCB7XG4gICAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICAgIGRlZmF1bHQ6IGZhbHNlLFxuICAgICAgICBzY2hlbWFcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGdldFJlc291cmNlUGF0aChyZXNvdXJjZSkge1xuICAgICAgcmVzb3VyY2UgPSBnZXRSZXNvdXJjZShyZXNvdXJjZSlcbiAgICAgIC8vIFJlc291cmNlcyB3aXRob3V0IGEgcGFyZW50IGluaGVyaXQgdGhlIG9uZSBmcm9tIGBkYXRhQ29tcG9uZW50YFxuICAgICAgLy8gYXV0b21hdGljYWxseS5cbiAgICAgIGlmIChyZXNvdXJjZS5wYXJlbnQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXNvdXJjZS5wYXJlbnQgPSB0aGlzLmRhdGFDb21wb25lbnQ/LnJlc291cmNlXG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy5hcGkucmVzb3VyY2VzLmFueShnZXRSZXNvdXJjZShyZXNvdXJjZSkpXG4gICAgfSxcblxuICAgIGdldFJlc291cmNlVXJsKHJlc291cmNlKSB7XG4gICAgICBjb25zdCB1cmwgPSB0aGlzLmdldFJlc291cmNlUGF0aChyZXNvdXJjZSlcbiAgICAgIHJldHVybiB1cmwgPyB0aGlzLmFwaS5nZXRBcGlVcmwoeyB1cmwsIHF1ZXJ5OiByZXNvdXJjZS5xdWVyeSB9KSA6IG51bGxcbiAgICB9LFxuXG4gICAgYXN5bmMgc2VuZFJlcXVlc3Qoe1xuICAgICAgbWV0aG9kLFxuICAgICAgdXJsLFxuICAgICAgcmVzb3VyY2UsXG4gICAgICBxdWVyeSxcbiAgICAgIGRhdGEsXG4gICAgICBzaWduYWwsXG4gICAgICBpbnRlcm5hbFxuICAgIH0pIHtcbiAgICAgIHVybCB8fD0gdGhpcy5nZXRSZXNvdXJjZVVybChyZXNvdXJjZSlcbiAgICAgIG1ldGhvZCB8fD0gcmVzb3VyY2U/Lm1ldGhvZFxuICAgICAgY29uc3QgY2hlY2tVc2VyID0gIWludGVybmFsICYmIHRoaXMuYXBpLmlzQXBpVXJsKHVybClcbiAgICAgIGlmIChjaGVja1VzZXIpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5yb290Q29tcG9uZW50LmVuc3VyZVVzZXIoKVxuICAgICAgfVxuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmFwaS5yZXF1ZXN0KHtcbiAgICAgICAgbWV0aG9kLFxuICAgICAgICB1cmwsXG4gICAgICAgIHF1ZXJ5LFxuICAgICAgICBkYXRhLFxuICAgICAgICBzaWduYWxcbiAgICAgIH0pXG4gICAgICAvLyBEZXRlY3QgY2hhbmdlIG9mIHRoZSBvd24gdXNlciwgYW5kIGZldGNoIGl0IGFnYWluIGlmIGl0IHdhcyBjaGFuZ2VkLlxuICAgICAgaWYgKFxuICAgICAgICBjaGVja1VzZXIgJiZcbiAgICAgICAgbWV0aG9kID09PSAncGF0Y2gnICYmXG4gICAgICAgIGVxdWFscyhyZXNvdXJjZSwgZ2V0TWVtYmVyUmVzb3VyY2UodGhpcy51c2VyLmlkLCB0aGlzLmFwaS51c2VycykpXG4gICAgICApIHtcbiAgICAgICAgYXdhaXQgdGhpcy5yb290Q29tcG9uZW50LmZldGNoVXNlcigpXG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzcG9uc2VcbiAgICB9LFxuXG4gICAgc2hvd0RpYWxvZyh7IGNvbXBvbmVudHMsIGJ1dHRvbnMsIGRhdGEsIHNldHRpbmdzIH0pIHtcbiAgICAgIHJldHVybiB0aGlzLnJvb3RDb21wb25lbnQuc2hvd0RpYWxvZyh7XG4gICAgICAgIGNvbXBvbmVudHMsXG4gICAgICAgIGJ1dHRvbnMsXG4gICAgICAgIGRhdGEsXG4gICAgICAgIHNldHRpbmdzXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICByZXF1ZXN0KHsgY2FjaGUsIC4uLm9wdGlvbnMgfSkge1xuICAgICAgLy8gQWxsb3cgY2FjaGluZyBvZiBsb2FkZWQgZGF0YSBvbiB0d28gbGV2ZWxzOlxuICAgICAgLy8gLSAnZ2xvYmFsJzogY2FjaGUgZ2xvYmFsbHksIGZvciB0aGUgZW50aXJlIGFkbWluIHNlc3Npb25cbiAgICAgIC8vIC0gJ2xvY2FsJzogY2FjaGUgbG9jYWxseSB3aXRoaW4gdGhlIGNsb3Nlc3Qgcm91dGUgY29tcG9uZW50IHRoYXQgaXNcbiAgICAgIC8vICAgIGFzc29jaWF0ZWQgd2l0aCBhIHJlc291cmNlIGFuZCBsb2FkcyBpdHMgb3duIGRhdGEuXG4gICAgICBjb25zdCBjYWNoZVBhcmVudCA9IChcbiAgICAgICAgY2FjaGUgJiZcbiAgICAgICAge1xuICAgICAgICAgIGdsb2JhbDogdGhpcy5hcHBTdGF0ZSxcbiAgICAgICAgICBsb2NhbDogdGhpcy5kYXRhQ29tcG9uZW50XG4gICAgICAgIH1bY2FjaGVdXG4gICAgICApXG4gICAgICBjb25zdCBsb2FkQ2FjaGUgPSBjYWNoZVBhcmVudD8ubG9hZENhY2hlXG4gICAgICAvLyBCdWlsZCBhIGNhY2hlIGtleSBmcm9tIHRoZSBjb25maWc6XG4gICAgICBjb25zdCBjYWNoZUtleSA9IChcbiAgICAgICAgbG9hZENhY2hlICYmXG4gICAgICAgIGAke1xuICAgICAgICAgIG9wdGlvbnMubWV0aG9kIHx8ICdnZXQnXG4gICAgICAgIH0gJHtcbiAgICAgICAgICBvcHRpb25zLnVybFxuICAgICAgICB9ICR7XG4gICAgICAgICAgLy8gVE9ETzogYHJlcXVlc3QucGFyYW1zYCB3YXMgZGVwcmVjYXRlZCBpbiBmYXZvdXIgb2YgYHF1ZXJ5YCBvblxuICAgICAgICAgIC8vIDIwMjItMTEtMDEsIHJlbW92ZSBvbmNlIG5vdCBpbiB1c2UgYW55d2hlcmUgYW55IG1vcmUuXG4gICAgICAgICAgSlNPTi5zdHJpbmdpZnkob3B0aW9ucy5xdWVyeSB8fCBvcHRpb25zLnBhcmFtcyB8fCAnJylcbiAgICAgICAgfSAke1xuICAgICAgICAgIEpTT04uc3RyaW5naWZ5KG9wdGlvbnMuZGF0YSB8fCAnJylcbiAgICAgICAgfWBcbiAgICAgIClcbiAgICAgIGlmIChsb2FkQ2FjaGUgJiYgKGNhY2hlS2V5IGluIGxvYWRDYWNoZSkpIHtcbiAgICAgICAgcmV0dXJuIGxvYWRDYWNoZVtjYWNoZUtleV1cbiAgICAgIH1cbiAgICAgIC8vIE5PVEU6IE5vIGF3YWl0IGhlcmUsIHJlcyBpcyBhIHByb21pc2UgdGhhdCB3ZSBjYW4gZWFzaWx5IGNhY2hlLlxuICAgICAgLy8gVGhhdCdzIGZpbmUgYmVjYXVzZSBwcm9taXNlcyBjYW4gYmUgcmVzb2x2ZWQgb3ZlciBhbmQgb3ZlciBhZ2Fpbi5cbiAgICAgIGNvbnN0IHJlcyA9IHRoaXMuc2VuZFJlcXVlc3Qob3B0aW9ucylcbiAgICAgICAgLnRoZW4ocmVzcG9uc2UgPT4gcmVzcG9uc2UuZGF0YSlcbiAgICAgICAgLmNhdGNoKGVycm9yID0+IHtcbiAgICAgICAgICAvLyBDb252ZXJ0IGF4aW9zIGVycm9ycyB0byBub3JtYWwgZXJyb3JzXG4gICAgICAgICAgY29uc3QgZGF0YSA9IGVycm9yLnJlc3BvbnNlPy5kYXRhXG4gICAgICAgICAgdGhyb3cgZGF0YVxuICAgICAgICAgICAgPyBPYmplY3QuYXNzaWduKG5ldyBFcnJvcihkYXRhLm1lc3NhZ2UpLCBkYXRhKVxuICAgICAgICAgICAgOiBlcnJvclxuICAgICAgICB9KVxuICAgICAgaWYgKGxvYWRDYWNoZSkge1xuICAgICAgICBsb2FkQ2FjaGVbY2FjaGVLZXldID0gcmVzXG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzXG4gICAgfSxcblxuICAgIGZvcm1hdCh2YWx1ZSwge1xuICAgICAgbG9jYWxlID0gdGhpcy5hcGkubG9jYWxlLFxuICAgICAgZGVmYXVsdHMgPSB0aGlzLmFwaS5mb3JtYXRzLFxuICAgICAgLi4ub3B0aW9uc1xuICAgIH0gPSB7fSkge1xuICAgICAgcmV0dXJuIGZvcm1hdCh2YWx1ZSwge1xuICAgICAgICBsb2NhbGUsXG4gICAgICAgIGRlZmF1bHRzLFxuICAgICAgICAuLi5vcHRpb25zXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBuYXZpZ2F0ZShsb2NhdGlvbikge1xuICAgICAgcmV0dXJuIHRoaXMuJHJvdXRlci5wdXNoKGxvY2F0aW9uKVxuICAgIH0sXG5cbiAgICBkb3dubG9hZChvcHRpb25zID0ge30pIHtcbiAgICAgIGlmIChpc1N0cmluZyhvcHRpb25zKSkge1xuICAgICAgICBvcHRpb25zID0geyB1cmw6IG9wdGlvbnMgfVxuICAgICAgfVxuICAgICAgLy8gU2VlOiBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL2EvNDk5MTcwNjYvMTE2MzcwOFxuICAgICAgY29uc3QgYSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKVxuICAgICAgYS5ocmVmID0gb3B0aW9ucy51cmw/LnN0YXJ0c1dpdGgoJ2Jsb2I6JylcbiAgICAgICAgPyBvcHRpb25zLnVybFxuICAgICAgICA6IHRoaXMuYXBpLmdldEFwaVVybChvcHRpb25zKVxuICAgICAgYS5kb3dubG9hZCA9IG9wdGlvbnMuZmlsZW5hbWUgPz8gbnVsbFxuICAgICAgY29uc3QgeyBib2R5IH0gPSBkb2N1bWVudFxuICAgICAgYm9keS5hcHBlbmRDaGlsZChhKVxuICAgICAgYS5jbGljaygpXG4gICAgICBib2R5LnJlbW92ZUNoaWxkKGEpXG4gICAgfSxcblxuICAgIG5vdGlmeShvcHRpb25zKSB7XG4gICAgICB0aGlzLnJvb3RDb21wb25lbnQubm90aWZ5KG9wdGlvbnMpXG4gICAgfSxcblxuICAgIGNsb3NlTm90aWZpY2F0aW9ucygpIHtcbiAgICAgIHRoaXMucm9vdENvbXBvbmVudC5jbG9zZU5vdGlmaWNhdGlvbnMoKVxuICAgIH0sXG5cbiAgICBzZXR1cFNjaGVtYUZpZWxkcygpIHtcbiAgICAgIHRoaXMuc2V0dXBNZXRob2RzKClcbiAgICAgIHRoaXMuc2V0dXBDb21wdXRlZCgpXG4gICAgICB0aGlzLnNldHVwRXZlbnRzKClcbiAgICB9LFxuXG4gICAgc2V0dXBNZXRob2RzKCkge1xuICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXModGhpcy5zY2hlbWEubWV0aG9kcyB8fCB7fSkpIHtcbiAgICAgICAgaWYgKGlzRnVuY3Rpb24odmFsdWUpKSB7XG4gICAgICAgICAgdGhpc1trZXldID0gdmFsdWVcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGBJbnZhbGlkIG1ldGhvZCBkZWZpbml0aW9uOiAke2tleX06ICR7dmFsdWV9YClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBzZXR1cENvbXB1dGVkKCkge1xuICAgICAgY29uc3QgZ2V0Q29tcHV0ZWRBY2Nlc3NvciA9ICh7IGdldCwgc2V0IH0pID0+IHtcbiAgICAgICAgY29uc3QgZ2V0dGVyID0gY29tcHV0ZWQoKCkgPT4gZ2V0LmNhbGwodGhpcykpXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgZ2V0OiAoKSA9PiBnZXR0ZXIudmFsdWUsXG4gICAgICAgICAgc2V0OiBzZXQgPyB2YWx1ZSA9PiBzZXQuY2FsbCh0aGlzLCB2YWx1ZSkgOiB1bmRlZmluZWRcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBmb3IgKGNvbnN0IFtrZXksIGl0ZW1dIG9mIE9iamVjdC5lbnRyaWVzKHRoaXMuc2NoZW1hLmNvbXB1dGVkIHx8IHt9KSkge1xuICAgICAgICBjb25zdCBhY2Nlc3NvciA9IGlzRnVuY3Rpb24oaXRlbSlcbiAgICAgICAgICA/IGdldENvbXB1dGVkQWNjZXNzb3IoeyBnZXQ6IGl0ZW0gfSlcbiAgICAgICAgICA6IGlzT2JqZWN0KGl0ZW0pICYmIGlzRnVuY3Rpb24oaXRlbS5nZXQpXG4gICAgICAgICAgICA/IGdldENvbXB1dGVkQWNjZXNzb3IoaXRlbSlcbiAgICAgICAgICAgIDogbnVsbFxuICAgICAgICBpZiAoYWNjZXNzb3IpIHtcbiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywga2V5LCBhY2Nlc3NvcilcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgYEludmFsaWQgY29tcHV0ZWQgcHJvcGVydHkgZGVmaW5pdGlvbjogJHtrZXl9OiAke2l0ZW19YFxuICAgICAgICAgIClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBzZXR1cEV2ZW50cygpIHtcbiAgICAgIGNvbnN0IHsgd2F0Y2gsIGV2ZW50cyB9ID0gdGhpcy5zY2hlbWFcbiAgICAgIGlmICh3YXRjaCkge1xuICAgICAgICBjb25zdCBoYW5kbGVycyA9IGlzRnVuY3Rpb24od2F0Y2gpID8gd2F0Y2guY2FsbCh0aGlzKSA6IHdhdGNoXG4gICAgICAgIGlmIChpc09iamVjdChoYW5kbGVycykpIHtcbiAgICAgICAgICAvLyBJbnN0YWxsIHRoZSB3YXRjaCBoYW5kbGVycyBpbiB0aGUgbmV4dCB0aWNrLCBzbyBhbGwgY29tcG9uZW50cyBhcmVcbiAgICAgICAgICAvLyBpbml0aWFsaXplZCBhbmQgd2UgY2FuIGNoZWNrIGFnYWluc3QgdGhlaXIgbmFtZXMuXG4gICAgICAgICAgdGhpcy4kbmV4dFRpY2soKCkgPT4ge1xuICAgICAgICAgICAgZm9yIChjb25zdCBba2V5LCBjYWxsYmFja10gb2YgT2JqZWN0LmVudHJpZXMoaGFuZGxlcnMpKSB7XG4gICAgICAgICAgICAgIC8vIEV4cGFuZCBwcm9wZXJ0eSBuYW1lcyB0byAnZGF0YS5wcm9wZXJ0eSc6XG4gICAgICAgICAgICAgIGNvbnN0IGV4cHIgPSB0aGlzLnNjaGVtYUNvbXBvbmVudC5nZXRDb21wb25lbnRCeU5hbWUoa2V5KVxuICAgICAgICAgICAgICAgID8gYGRhdGEuJHtrZXl9YFxuICAgICAgICAgICAgICAgIDoga2V5XG4gICAgICAgICAgICAgIHRoaXMuJHdhdGNoKGV4cHIsIGNhbGxiYWNrKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgY29uc3QgYWRkRXZlbnQgPSAoa2V5LCBldmVudCwgY2FsbGJhY2spID0+IHtcbiAgICAgICAgaWYgKGlzRnVuY3Rpb24oY2FsbGJhY2spKSB7XG4gICAgICAgICAgdGhpcy5vbihoeXBoZW5hdGUoZXZlbnQpLCBjYWxsYmFjaylcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGBJbnZhbGlkIGV2ZW50IGRlZmluaXRpb246ICR7a2V5fTogJHtjYWxsYmFja31gKVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChldmVudHMpIHtcbiAgICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoZXZlbnRzKSkge1xuICAgICAgICAgIGFkZEV2ZW50KGtleSwga2V5LCB2YWx1ZSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgLy8gQWxzbyBzY2FuIHNjaGVtYSBmb3IgYG9uW0EtWl1gLXN0eWxlIGNhbGxiYWNrcyBhbmQgYWRkIHRoZW1cbiAgICAgIC8vIFRPRE86IERlcHJlY2F0ZSBvbmUgZm9ybWF0IG9yIHRoZSBvdGhlciwgaW4gZmF2b3VyIG9mIG9ubHkgb25lIHdheSBvZlxuICAgICAgLy8gZG9pbmcgdGhpbmdzLiBEZWNpZGUgd2hpY2ggb25lIHRvIHJlbW92ZS5cbiAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHRoaXMuc2NoZW1hKSkge1xuICAgICAgICBpZiAoL15vbltBLVpdLy50ZXN0KGtleSkpIHtcbiAgICAgICAgICBhZGRFdmVudChrZXksIGtleS5zbGljZSgyKSwgdmFsdWUpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYXN5bmMgZW1pdEV2ZW50KGV2ZW50LCB7XG4gICAgICBjb250ZXh0ID0gbnVsbCxcbiAgICAgIHBhcmVudCA9IG51bGxcbiAgICB9ID0ge30pIHtcbiAgICAgIGNvbnN0IGhhc0xpc3RlbmVycyA9IHRoaXMuaGFzTGlzdGVuZXJzKGV2ZW50KVxuICAgICAgY29uc3QgcGFyZW50SGFzTGlzdGVuZXJzID0gcGFyZW50Py5oYXNMaXN0ZW5lcnMoZXZlbnQpXG4gICAgICBpZiAoaGFzTGlzdGVuZXJzIHx8IHBhcmVudEhhc0xpc3RlbmVycykge1xuICAgICAgICAvLyBUaGUgZWZmZWN0cyBvZiBzb21lIGV2ZW50cyBuZWVkIHNvbWUgdGltZSB0byBwcm9wYWdhdGUgdGhyb3VnaCBWdWUuXG4gICAgICAgIC8vIFVzZSAkbmV4dFRpY2soKSB0byBtYWtlIHN1cmUgb3VyIGhhbmRsZXJzIHNlZSB0aGVzZSBjaGFuZ2VzLlxuICAgICAgICAvLyBGb3IgZXhhbXBsZSwgYHByb2Nlc3NlZEl0ZW1gIGlzIG9ubHkgY29ycmVjdCBhZnRlciBjb21wb25lbnRzIHRoYXRcbiAgICAgICAgLy8gYXJlIG5ld2x5IHJlbmRlcmVkIGR1ZSB0byBkYXRhIGNoYW5nZXMgaGF2ZSByZWdpc3RlcmVkIHRoZW1zZWx2ZXMuXG4gICAgICAgIGlmIChbJ2xvYWQnLCAnY2hhbmdlJ10uaW5jbHVkZXMoZXZlbnQpKSB7XG4gICAgICAgICAgYXdhaXQgdGhpcy4kbmV4dFRpY2soKVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZ2V0Q29udGV4dCA9ICgpID0+IChjb250ZXh0ID0gRGl0b0NvbnRleHQuZ2V0KHRoaXMsIGNvbnRleHQpKVxuICAgICAgICBjb25zdCByZXMgPSBoYXNMaXN0ZW5lcnNcbiAgICAgICAgICA/IGF3YWl0IHRoaXMuZW1pdChldmVudCwgZ2V0Q29udGV4dCgpKVxuICAgICAgICAgIDogdW5kZWZpbmVkXG4gICAgICAgIC8vIERvbid0IGJ1YmJsZSB0byBwYXJlbnQgaWYgaGFuZGxlZCBldmVudCByZXR1cm5lZCBgZmFsc2VgXG4gICAgICAgIGlmIChwYXJlbnRIYXNMaXN0ZW5lcnMgJiYgcmVzICE9PSBmYWxzZSkge1xuICAgICAgICAgIHBhcmVudC5lbWl0KGV2ZW50LCBnZXRDb250ZXh0KCkpXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc1xuICAgICAgfVxuICAgIH0sXG5cbiAgICBlbWl0U2NoZW1hRXZlbnQoZXZlbnQsIHBhcmFtcykge1xuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hQ29tcG9uZW50LmVtaXRFdmVudChldmVudCwgcGFyYW1zKVxuICAgIH1cbiAgfVxufVxuXG5sZXQgbmV4dFVpZCA9IDBcbiIsIi8vIEEgbWluaS1yZXBsaWNhdGlvbiBvZiB2dWUncyBpbnRlcm5hbCBgcmVzb2x2ZU1lcmdlZE9wdGlvbnMoKWAgYnV0IG9ubHlcbi8vIGhhbmRsaW5nIG91ciBvd24gYWRkZWQgb3B0aW9ucyBwcm9wZXJ0aWVzIGFuZCBtZXJnaW5nIHRoZW0gZWFybHkgaW5zdGVhZFxuLy8gb2YgbGF6aWx5LlxuXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZU1lcmdlZE9wdGlvbnMob3B0aW9ucykge1xuICBjb25zdCB7IG1peGlucyB9ID0gb3B0aW9uc1xuICByZXR1cm4gbWl4aW5zIHx8IG9wdGlvbnMuZXh0ZW5kc1xuICAgID8gbWVyZ2VPcHRpb25zKFxuICAgICAgICB7IC4uLm9wdGlvbnMgfSxcbiAgICAgICAgb3B0aW9uc1xuICAgICAgKVxuICAgIDogb3B0aW9uc1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWVyZ2VPcHRpb25zKHRvLCBmcm9tKSB7XG4gIGlmIChmcm9tLmV4dGVuZHMpIHtcbiAgICBtZXJnZU9wdGlvbnModG8sIGZyb20uZXh0ZW5kcylcbiAgfVxuICBpZiAoZnJvbS5taXhpbnMpIHtcbiAgICBmb3IgKGNvbnN0IG1peGluIG9mIGZyb20ubWl4aW5zKSB7XG4gICAgICBtZXJnZU9wdGlvbnModG8sIG1peGluKVxuICAgIH1cbiAgfVxuICBmb3IgKGNvbnN0IGtleSBvZiBkaXRvT3B0aW9uS2V5cykge1xuICAgIGlmIChrZXkgaW4gZnJvbSkge1xuICAgICAgdG9ba2V5XSA9IGZyb21ba2V5XVxuICAgIH1cbiAgfVxuICByZXR1cm4gdG9cbn1cblxuY29uc3QgZGl0b09wdGlvbktleXMgPSBbXG4gICdkZWZhdWx0VmFsdWUnLFxuICAnZGVmYXVsdE5lc3RlZCcsXG4gICdkZWZhdWx0VmlzaWJsZScsXG4gICdnZW5lcmF0ZUxhYmVsJyxcbiAgJ2V4Y2x1ZGVWYWx1ZScsXG4gICdpZ25vcmVNaXNzaW5nVmFsdWUnLFxuICAnb21pdFNwYWNpbmcnLFxuICAncHJvY2Vzc1ZhbHVlJyxcbiAgJ3Byb2Nlc3NTY2hlbWEnLFxuICAnZ2V0UGFuZWxTY2hlbWEnLFxuICAnZ2V0Rm9ybVNjaGVtYXNGb3JQcm9jZXNzaW5nJyxcbiAgLy8gVnVlIDMgLyBWdWUtcm91dGVyIDQgZm9yZ2V0cyB0aGVzZS5cbiAgLy8gVE9ETzogQ3JlYXRlIGJ1Zy1yZXBvcnQ/XG4gICdiZWZvcmVSb3V0ZVVwZGF0ZScsXG4gICdiZWZvcmVSb3V0ZUxlYXZlJ1xuXVxuIiwiaW1wb3J0IERpdG9NaXhpbiBmcm9tICcuL21peGlucy9EaXRvTWl4aW4uanMnXG5pbXBvcnQgeyBnZXRUeXBlQ29tcG9uZW50IH0gZnJvbSAnLi91dGlscy9zY2hlbWEuanMnXG5pbXBvcnQgeyByZXNvbHZlTWVyZ2VkT3B0aW9ucyB9IGZyb20gJy4vdXRpbHMvb3B0aW9ucy5qcydcbmltcG9ydCB7IGlzUGxhaW5PYmplY3QgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG5jb25zdCBjb21wb25lbnRzID0ge31cblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IHtcbiAgbWl4aW5zOiBbRGl0b01peGluXSxcbiAgLy8gTWFrZSBzdXJlIHRoYXQgcmVnaXN0ZXJlZCBjb21wb25lbnRzIGFyZSBwcmVzZW50IGluIGFsbCBEaXRvQ29tcG9uZW50LlxuICBjb21wb25lbnRzLFxuXG4gIGNvbXBvbmVudChuYW1lLCBkZWZpbml0aW9uKSB7XG4gICAgaWYgKGRlZmluaXRpb24pIHtcbiAgICAgIGlmIChpc1BsYWluT2JqZWN0KGRlZmluaXRpb24pKSB7XG4gICAgICAgIGRlZmluaXRpb24gPSByZXNvbHZlTWVyZ2VkT3B0aW9ucyh7XG4gICAgICAgICAgZXh0ZW5kczogdGhpcyxcbiAgICAgICAgICBuYW1lLFxuICAgICAgICAgIC4uLmRlZmluaXRpb25cbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICAgIGNvbXBvbmVudHNbbmFtZV0gPSBkZWZpbml0aW9uXG4gICAgfVxuICAgIGlmICghKG5hbWUgaW4gY29tcG9uZW50cykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQ29tcG9uZW50IFwiJHtuYW1lfVwiIG5vdCByZWdpc3RlcmVkYClcbiAgICB9XG4gICAgcmV0dXJuIGNvbXBvbmVudHNbbmFtZV1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZ2V0VHlwZUNvbXBvbmVudFxuICB9XG59XG4iLCJleHBvcnQgZnVuY3Rpb24gZGVzY3JpYmVEYXRlKGRhdGUpIHtcbiAgcmV0dXJuIHtcbiAgICB5ZWFyOiBkYXRlPy5nZXRGdWxsWWVhcigpID8/IDAsXG4gICAgbW9udGg6IGRhdGU/LmdldE1vbnRoKCkgPz8gMCxcbiAgICBkYXk6IGRhdGU/LmdldERhdGUoKSA/PyAwLFxuICAgIGhvdXI6IGRhdGU/LmdldEhvdXJzKCkgPz8gMCxcbiAgICBtaW51dGU6IGRhdGU/LmdldE1pbnV0ZXMoKSA/PyAwLFxuICAgIHNlY29uZDogZGF0ZT8uZ2V0U2Vjb25kcygpID8/IDAsXG4gICAgbWlsbGlzZWNvbmQ6IGRhdGU/LmdldE1pbGxpc2Vjb25kcygpID8/IDBcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gYWx0ZXJEYXRlKGRhdGUsIG92ZXJyaWRlcyA9IHt9KSB7XG4gIHJldHVybiBuZXcgRGF0ZSguLi5PYmplY3QudmFsdWVzKHsgLi4uZGVzY3JpYmVEYXRlKGRhdGUpLCAuLi5vdmVycmlkZXMgfSkpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZURhdGUoc3RyaW5nLCB7XG4gIGxvY2FsZSA9ICdlbi1VUycsXG4gIGRhdGUgPSB0cnVlLFxuICB0aW1lID0gdHJ1ZVxufSA9IHt9KSB7XG4gIGNvbnN0IHRpbWVEZWZhdWx0ID0gdGltZSA/IG51bGwgOiAwXG4gIGxldCBbXG4gICAgZGF5LFxuICAgIHNlcDEsXG4gICAgbW9udGgsXG4gICAgc2VwMixcbiAgICB5ZWFyLFxuICAgICxcbiAgICBob3VyID0gdGltZURlZmF1bHQsXG4gICAgLFxuICAgIG1pbnV0ZSA9IHRpbWVEZWZhdWx0LFxuICAgICxcbiAgICBzZWNvbmQgPSB0aW1lRGVmYXVsdCxcbiAgICAsXG4gICAgbWlsbGlzZWNvbmQgPSB0aW1lRGVmYXVsdFxuICBdID0gZ2V0RGF0ZVBhcnRzKHN0cmluZywgeyBkYXRlLCB0aW1lIH0pXG4gIGlmICh5ZWFyICYmIHllYXIubGVuZ3RoID49IDQpIHtcbiAgICBpZiAobG9jYWxlID09PSAnZW4tVVMnICYmIHNlcDEgPT09ICcvJyAmJiBzZXAyID09PSAnLycpIHtcbiAgICAgIC8vIEFtZXJpY2FuIGZvcm1hdDogTU0vREQvWVlZWVxuICAgICAgO1tkYXksIG1vbnRoXSA9IFttb250aCwgZGF5XVxuICAgIH1cbiAgICBtb250aCA9IGdldE1vbnRoSW5kZXgobW9udGgsIHsgbG9jYWxlIH0pXG4gICAgY29uc3QgaXNWYWxpZFRpbWVQYXJ0ID0gcGFydCA9PiBwYXJ0ID09PSBudWxsIHx8IHBhcnQubGVuZ3RoID09PSAyXG4gICAgaWYgKFxuICAgICAgbW9udGggIT09IG51bGwgJiYgKFxuICAgICAgICAhdGltZSB8fCAoXG4gICAgICAgICAgaXNWYWxpZFRpbWVQYXJ0KGhvdXIpICYmXG4gICAgICAgICAgaXNWYWxpZFRpbWVQYXJ0KG1pbnV0ZSkgJiZcbiAgICAgICAgICBpc1ZhbGlkVGltZVBhcnQoc2Vjb25kKVxuICAgICAgICApXG4gICAgICApXG4gICAgKSB7XG4gICAgICByZXR1cm4gbmV3IERhdGUoXG4gICAgICAgICt5ZWFyLFxuICAgICAgICArbW9udGgsXG4gICAgICAgICtkYXksXG4gICAgICAgICtob3VyLFxuICAgICAgICArbWludXRlLFxuICAgICAgICArc2Vjb25kLFxuICAgICAgICArbWlsbGlzZWNvbmRcbiAgICAgIClcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG51bGxcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldERhdGVQYXJ0QXRQb3NpdGlvbihzdHJpbmcsIHBvc2l0aW9uLCB7XG4gIGxvY2FsZSA9ICdlbi1VUycsXG4gIGRhdGUgPSB0cnVlLFxuICB0aW1lID0gdHJ1ZVxufSA9IHt9KSB7XG4gIGNvbnN0IHBhcnRzID0gZ2V0RGF0ZVBhcnRzKHN0cmluZywgeyBkYXRlLCB0aW1lIH0pXG5cbiAgY29uc3QgZ2V0UG9zaXRpb24gPSAocG9zaXRpb24sIGxlbmd0aCA9IHBhcnRzLmxlbmd0aCkgPT4ge1xuICAgIGxldCBwb3MgPSAwXG4gICAgbGV0IGluZGV4ID0gMFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bm1vZGlmaWVkLWxvb3AtY29uZGl0aW9uXG4gICAgd2hpbGUgKChwb3NpdGlvbiA9PT0gbnVsbCB8fCBwb3MgPD0gcG9zaXRpb24pICYmIGluZGV4IDwgbGVuZ3RoKSB7XG4gICAgICBwb3MgKz0gcGFydHNbaW5kZXgrK10/Lmxlbmd0aCA/PyAwXG4gICAgfVxuICAgIHJldHVybiB7IHBvc2l0aW9uOiBwb3MsIGluZGV4IH1cbiAgfVxuXG4gIC8vIFRpbWUgc3RhcnRzIGF0IGluZGV4IDYsIGR1ZSB0byB0aGUgc2VwYXJhdG9yIGFmdGVyIHRoZSBkYXRlLlxuICBjb25zdCBvZmZzZXQgPSAhZGF0ZSA/IGdldFBvc2l0aW9uKG51bGwsIDYpLnBvc2l0aW9uIDogMFxuICBwb3NpdGlvbiArPSBvZmZzZXRcblxuICBsZXQgeyBpbmRleCB9ID0gZ2V0UG9zaXRpb24ocG9zaXRpb24pXG5cbiAgY29uc3QgaXNVUyA9IGxvY2FsZSA9PT0gJ2VuLVVTJ1xuICBjb25zdCB2YWx1ZXMgPSBbXG4gICAgaXNVUyA/ICdtb250aCcgOiAnZGF5JyxcbiAgICBudWxsLFxuICAgIGlzVVMgPyAnZGF5JyA6ICdtb250aCcsXG4gICAgbnVsbCxcbiAgICAneWVhcicsXG4gICAgbnVsbCxcbiAgICAnaG91cicsXG4gICAgbnVsbCxcbiAgICAnbWludXRlJyxcbiAgICBudWxsLFxuICAgICdzZWNvbmQnLFxuICAgIG51bGwsXG4gICAgJ21pbGxpc2Vjb25kJ1xuICBdXG4gIHdoaWxlIChpbmRleC0tKSB7XG4gICAgaWYgKHZhbHVlc1tpbmRleF0pIHtcbiAgICAgIGNvbnN0IHN0YXJ0ID0gZ2V0UG9zaXRpb24obnVsbCwgaW5kZXgpLnBvc2l0aW9uIC0gb2Zmc2V0XG4gICAgICBjb25zdCBlbmQgPSBzdGFydCArIHBhcnRzW2luZGV4XS5sZW5ndGhcbiAgICAgIHJldHVybiB7IG5hbWU6IHZhbHVlc1tpbmRleF0sIHN0YXJ0LCBlbmQgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gbnVsbFxufVxuXG5mdW5jdGlvbiBnZXREYXRlUGFydHMoc3RyaW5nLCB7IGRhdGUgPSB0cnVlLCB0aW1lID0gdHJ1ZSB9ID0ge30pIHtcbiAgY29uc3QgcGFydHMgPSBzdHJpbmc/LnNwbGl0KC8oW1xccy4sOi9dKykvKSB8fCBbXVxuICBpZiAoIWRhdGUpIHtcbiAgICAvLyBBZGQgZHVtbXkgZGF0ZSBwYXJ0cyB0byBtYWtlIHN1cmUgd2UgZ2V0IGEgdGltZS1vbmx5IGRhdGUuXG4gICAgcGFydHMudW5zaGlmdCgnMScsICcuJywgJzEnLCAnLicsICcyMDAwJywgJyAnKVxuICB9XG4gIGlmICghdGltZSAmJiBwYXJ0cy5sZW5ndGggPiA1KSB7XG4gICAgcGFydHMubGVuZ3RoID0gNVxuICB9XG4gIHJldHVybiBwYXJ0c1xufVxuXG5mdW5jdGlvbiBnZXRNb250aEluZGV4KG1vbnRoLCB7IGxvY2FsZSA9ICdlbi1VUycgfSA9IHt9KSB7XG4gIGNvbnN0IHZhbHVlID0gK21vbnRoXG4gIGlmICghaXNOYU4odmFsdWUpKSB7XG4gICAgcmV0dXJuIHZhbHVlIC0gMVxuICB9XG4gIGNvbnN0IG1hdGNoID0gbW9udGgudHJpbSgpLnRvTG93ZXJDYXNlKClcbiAgaWYgKG1hdGNoLmxlbmd0aCA8IDMpIHJldHVybiBudWxsXG4gIGNvbnN0IHNob3J0Rm9ybWF0ID0gbmV3IEludGwuRGF0ZVRpbWVGb3JtYXQobG9jYWxlLCB7IG1vbnRoOiAnc2hvcnQnIH0pXG4gIGNvbnN0IGxvbmdGb3JtYXQgPSBuZXcgSW50bC5EYXRlVGltZUZvcm1hdChsb2NhbGUsIHsgbW9udGg6ICdsb25nJyB9KVxuICBmb3IgKGxldCBpID0gMDsgaSA8IDEyOyBpKyspIHtcbiAgICBjb25zdCBkYXRlID0gbmV3IERhdGUoMjAwMCwgaSwgMSlcbiAgICBpZiAoXG4gICAgICBzaG9ydEZvcm1hdC5mb3JtYXQoZGF0ZSkudG9Mb3dlckNhc2UoKS5zdGFydHNXaXRoKG1hdGNoKSB8fFxuICAgICAgbG9uZ0Zvcm1hdC5mb3JtYXQoZGF0ZSkudG9Mb3dlckNhc2UoKS5zdGFydHNXaXRoKG1hdGNoKVxuICAgICkge1xuICAgICAgcmV0dXJuIGlcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG51bGxcbn1cbiIsIjwhLS0gRGVyaXZlZCBmcm9tIEFUVUksIGFuZCBmdXJ0aGVyIGV4dGVuZGVkOiBodHRwczovL2FsaXFpbi5naXRodWIuaW8vYXR1aS8gLS0+XG48dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuLmRpdG8tY2FsZW5kYXJcbiAgLmRpdG8tY2FsZW5kYXItcG9wdXBcbiAgICAuZGl0by1jYWxlbmRhci1pbm5lclxuICAgICAgdGVtcGxhdGUoXG4gICAgICAgIHYtaWY9XCJjdXJyZW50TW9kZSA9PT0gJ2RheSdcIlxuICAgICAgKVxuICAgICAgICAuZGl0by1jYWxlbmRhci1oZWFkZXJcbiAgICAgICAgICBhLmRpdG8tY2FsZW5kYXItc3RlcC1wcmV2LmRpdG8tY2FsZW5kYXItc3RlcC15ZWFyKFxuICAgICAgICAgICAgQGNsaWNrPVwic3RlcFllYXIoLTEpXCJcbiAgICAgICAgICApXG4gICAgICAgICAgYS5kaXRvLWNhbGVuZGFyLXN0ZXAtcHJldi5kaXRvLWNhbGVuZGFyLXN0ZXAtbW9udGgoXG4gICAgICAgICAgICBAY2xpY2s9XCJzdGVwTW9udGgoLTEpXCJcbiAgICAgICAgICApXG4gICAgICAgICAgc3BhblxuICAgICAgICAgICAgYS5kaXRvLWNhbGVuZGFyLXNlbGVjdC15ZWFyKFxuICAgICAgICAgICAgICBAY2xpY2s9XCJzZXRNb2RlKCd5ZWFyJylcIlxuICAgICAgICAgICAgKSB7eyBkYXRlVG9TdHJpbmcoY3VycmVudFZhbHVlLCB7IHllYXI6IHRydWUgfSkgfX1cbiAgICAgICAgICAgIGEuZGl0by1jYWxlbmRhci1zZWxlY3QtbW9udGgoXG4gICAgICAgICAgICAgIEBjbGljaz1cInNldE1vZGUoJ21vbnRoJylcIlxuICAgICAgICAgICAgKSB7eyBkYXRlVG9TdHJpbmcoY3VycmVudFZhbHVlLCB7IG1vbnRoOiB0cnVlIH0pIH19XG4gICAgICAgICAgYS5kaXRvLWNhbGVuZGFyLXN0ZXAtbmV4dC5kaXRvLWNhbGVuZGFyLXN0ZXAtbW9udGgoXG4gICAgICAgICAgICBAY2xpY2s9XCJzdGVwTW9udGgoMSlcIlxuICAgICAgICAgIClcbiAgICAgICAgICBhLmRpdG8tY2FsZW5kYXItc3RlcC1uZXh0LmRpdG8tY2FsZW5kYXItc3RlcC15ZWFyKFxuICAgICAgICAgICAgQGNsaWNrPVwic3RlcFllYXIoMSlcIlxuICAgICAgICAgIClcbiAgICAgICAgLmRpdG8tY2FsZW5kYXItYm9keVxuICAgICAgICAgIC5kaXRvLWNhbGVuZGFyLXdlZWtkYXlzXG4gICAgICAgICAgICBzcGFuKFxuICAgICAgICAgICAgICB2LWZvcj1cIndlZWtkYXkgaW4gd2Vla2RheU5hbWVzXCJcbiAgICAgICAgICAgICkge3sgd2Vla2RheS5zaG9ydCB9fVxuICAgICAgICAgIC5kaXRvLWNhbGVuZGFyLWRhdGVzXG4gICAgICAgICAgICBzcGFuKFxuICAgICAgICAgICAgICB2LWZvcj1cImRhdGUgaW4gZGF0ZVJhbmdlXCJcbiAgICAgICAgICAgICAgOmNsYXNzPVwiZGF0ZS5zdGF0ZSAmJiBgZGl0by1jYWxlbmRhci1pdGVtLSR7ZGF0ZS5zdGF0ZX1gXCJcbiAgICAgICAgICAgICAgQGNsaWNrPVwiZGF0ZS5zdGF0ZSAhPT0gJ2Rpc2FibGVkJyAmJiBzZWxlY3REYXRlKGRhdGUuZGF0ZSlcIlxuICAgICAgICAgICAgKSB7eyBkYXRlLnRleHQgfX1cbiAgICAgICAgLmRpdG8tY2FsZW5kYXItZm9vdGVyXG4gICAgICAgICAgYS5kaXRvLWNhbGVuZGFyLXNlbGVjdC1ub3coXG4gICAgICAgICAgICByb2xlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIDp0aXRsZT1cImRhdGVUb1N0cmluZyhuZXcgRGF0ZSgpKVwiXG4gICAgICAgICAgICBAY2xpY2s9XCJzZWxlY3REYXRlKG5ldyBEYXRlKCkpXCJcbiAgICAgICAgICApXG4gICAgICB0ZW1wbGF0ZShcbiAgICAgICAgdi1lbHNlLWlmPVwiY3VycmVudE1vZGUgPT09ICdtb250aCdcIlxuICAgICAgKVxuICAgICAgICAuZGl0by1jYWxlbmRhci1oZWFkZXJcbiAgICAgICAgICBhLmRpdG8tY2FsZW5kYXItc3RlcC1wcmV2KFxuICAgICAgICAgICAgQGNsaWNrPVwic3RlcFllYXIoLTEpXCJcbiAgICAgICAgICApXG4gICAgICAgICAgc3BhblxuICAgICAgICAgICAgYS5kaXRvLWNhbGVuZGFyLXNlbGVjdC15ZWFyKFxuICAgICAgICAgICAgICBAY2xpY2s9XCJzZXRNb2RlKCd5ZWFyJylcIlxuICAgICAgICAgICAgKSB7eyBkYXRlVG9TdHJpbmcoY3VycmVudFZhbHVlLCB7IHllYXI6IHRydWUgfSkgfX1cbiAgICAgICAgICBhLmRpdG8tY2FsZW5kYXItc3RlcC1uZXh0KFxuICAgICAgICAgICAgQGNsaWNrPVwic3RlcFllYXIoMSlcIlxuICAgICAgICAgIClcbiAgICAgICAgLmRpdG8tY2FsZW5kYXItYm9keVxuICAgICAgICAgIC5kaXRvLWNhbGVuZGFyLW1vbnRoc1xuICAgICAgICAgICAgc3BhbihcbiAgICAgICAgICAgICAgdi1mb3I9XCIobW9udGgsIGluZGV4KSBpbiBtb250aE5hbWVzXCJcbiAgICAgICAgICAgICAgOmNsYXNzPVwiZ2V0TW9udGhDbGFzcyhpbmRleClcIlxuICAgICAgICAgICAgICBAY2xpY2s9XCJzZWxlY3RNb250aChpbmRleClcIlxuICAgICAgICAgICAgKSB7eyBtb250aC5zaG9ydCB9fVxuICAgICAgdGVtcGxhdGUoXG4gICAgICAgIHYtZWxzZS1pZj1cImN1cnJlbnRNb2RlID09PSAneWVhcidcIlxuICAgICAgKVxuICAgICAgICAuZGl0by1jYWxlbmRhci1oZWFkZXJcbiAgICAgICAgICBhLmRpdG8tY2FsZW5kYXItc3RlcC1wcmV2KFxuICAgICAgICAgICAgQGNsaWNrPVwic3RlcERlY2FkZSgtMSlcIlxuICAgICAgICAgIClcbiAgICAgICAgICBzcGFuIHt7IGRlY2FkZVRvU3RyaW5nKGN1cnJlbnRWYWx1ZSkgfX1cbiAgICAgICAgICBhLmRpdG8tY2FsZW5kYXItc3RlcC1uZXh0KFxuICAgICAgICAgICAgQGNsaWNrPVwic3RlcERlY2FkZSgxKVwiXG4gICAgICAgICAgKVxuICAgICAgICAuZGl0by1jYWxlbmRhci1ib2R5XG4gICAgICAgICAgLmRpdG8tY2FsZW5kYXIteWVhcnNcbiAgICAgICAgICAgIHNwYW4oXG4gICAgICAgICAgICAgIHYtZm9yPVwieWVhciBpbiB5ZWFyUmFuZ2VcIlxuICAgICAgICAgICAgICA6Y2xhc3M9XCJnZXRZZWFyQ2xhc3MoeWVhcilcIlxuICAgICAgICAgICAgICBAY2xpY2s9XCJzZWxlY3RZZWFyKHllYXIpXCJcbiAgICAgICAgICAgICkge3sgeWVhciB9fVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCB7IGRlc2NyaWJlRGF0ZSwgYWx0ZXJEYXRlIH0gZnJvbSAnLi4vdXRpbHMvZGF0ZS5qcydcblxuZXhwb3J0IGRlZmF1bHQge1xuICBlbWl0czogWyd1cGRhdGU6bW9kZWxWYWx1ZScsICdzZWxlY3QnXSxcblxuICBwcm9wczoge1xuICAgIG1vZGVsVmFsdWU6IHsgdHlwZTogRGF0ZSwgZGVmYXVsdDogbnVsbCB9LFxuICAgIGxvY2FsZTogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6ICdlbi1VUycgfSxcbiAgICBkaXNhYmxlZERhdGU6IHsgdHlwZTogRnVuY3Rpb24sIGRlZmF1bHQ6ICgpID0+IGZhbHNlIH0sXG4gICAgbW9kZTogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6ICdkYXknIH1cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIGNvbnN0IHsgd2Vla2RheU5hbWVzLCBtb250aE5hbWVzIH0gPSBnZXRMb2NhbGVOYW1lcyh0aGlzLmxvY2FsZSlcbiAgICByZXR1cm4ge1xuICAgICAgd2Vla2RheU5hbWVzLFxuICAgICAgbW9udGhOYW1lcyxcbiAgICAgIGRhdGVSYW5nZTogW10sXG4gICAgICB5ZWFyUmFuZ2U6IFtdLFxuICAgICAgY3VycmVudFZhbHVlOiAoXG4gICAgICAgIHRoaXMubW9kZWxWYWx1ZSB8fFxuICAgICAgICAvLyBJZiBubyB2YWx1ZSBpcyBwcm92aWRlZCwgdXNlIGN1cnJlbnQgZGF0ZSBidXQgY2xlYXIgdGltZSBmaWVsZHM6XG4gICAgICAgIGFsdGVyRGF0ZShuZXcgRGF0ZSgpLCB7IGhvdXI6IDAsIG1pbnV0ZTogMCwgc2Vjb25kOiAwLCBtaWxsaXNlY29uZDogMCB9KVxuICAgICAgKSxcbiAgICAgIGN1cnJlbnRNb2RlOiB0aGlzLm1vZGVcbiAgICB9XG4gIH0sXG5cbiAgd2F0Y2g6IHtcbiAgICBtb2RlbFZhbHVlKHRvLCBmcm9tKSB7XG4gICAgICBpZiAoK3RvICE9PSArZnJvbSkge1xuICAgICAgICB0aGlzLmN1cnJlbnRWYWx1ZSA9IHRvIHx8IG5ldyBEYXRlKClcbiAgICAgICAgdGhpcy51cGRhdGVEYXRlUmFuZ2UoKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBjdXJyZW50VmFsdWUodG8sIGZyb20pIHtcbiAgICAgIGlmICgrdG8gIT09ICtmcm9tKSB7XG4gICAgICAgIHRoaXMudXBkYXRlRGF0ZVJhbmdlKClcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZGlzYWJsZWREYXRlOiAndXBkYXRlRGF0ZVJhbmdlJyxcblxuICAgIG1vZGUobW9kZSkge1xuICAgICAgdGhpcy5jdXJyZW50TW9kZSA9IG1vZGVcbiAgICB9XG4gIH0sXG5cbiAgbW91bnRlZCgpIHtcbiAgICB0aGlzLnVwZGF0ZURhdGVSYW5nZSgpXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGdldE1vbnRoQ2xhc3MobW9udGgpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgICdkaXRvLWNhbGVuZGFyLWl0ZW0tYWN0aXZlJzogKFxuICAgICAgICAgIHRoaXMubW9kZWxWYWx1ZSAmJlxuICAgICAgICAgIG1vbnRoID09PSB0aGlzLm1vZGVsVmFsdWUuZ2V0TW9udGgoKSAmJlxuICAgICAgICAgIHRoaXMuY3VycmVudFZhbHVlLmdldEZ1bGxZZWFyKCkgPT09IHRoaXMubW9kZWxWYWx1ZS5nZXRGdWxsWWVhcigpXG4gICAgICAgICksXG4gICAgICAgICdkaXRvLWNhbGVuZGFyLWl0ZW0tY3VycmVudCc6IG1vbnRoID09PSB0aGlzLmN1cnJlbnRWYWx1ZS5nZXRNb250aCgpXG4gICAgICB9XG4gICAgfSxcblxuICAgIGdldFllYXJDbGFzcyh5ZWFyKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAnZGl0by1jYWxlbmRhci1pdGVtLWFjdGl2ZSc6IChcbiAgICAgICAgICB0aGlzLm1vZGVsVmFsdWUgJiYgeWVhciA9PT0gdGhpcy5tb2RlbFZhbHVlLmdldEZ1bGxZZWFyKClcbiAgICAgICAgKSxcbiAgICAgICAgJ2RpdG8tY2FsZW5kYXItaXRlbS1jdXJyZW50JzogeWVhciA9PT0gdGhpcy5jdXJyZW50VmFsdWUuZ2V0RnVsbFllYXIoKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBzZXREYXRlKG92ZXJyaWRlcywgdXBkYXRlID0gZmFsc2UpIHtcbiAgICAgIHRoaXMuY3VycmVudFZhbHVlID0gYWx0ZXJEYXRlKHRoaXMuY3VycmVudFZhbHVlLCBvdmVycmlkZXMpXG4gICAgICBpZiAodXBkYXRlKSB7XG4gICAgICAgIHRoaXMuJGVtaXQoJ3VwZGF0ZTptb2RlbFZhbHVlJywgdGhpcy5jdXJyZW50VmFsdWUpXG4gICAgICB9XG4gICAgfSxcblxuICAgIHN0ZXBEZWNhZGUoc3RlcCkge1xuICAgICAgdGhpcy5zZXREYXRlKHtcbiAgICAgICAgeWVhcjogdGhpcy5jdXJyZW50VmFsdWUuZ2V0RnVsbFllYXIoKSArIHN0ZXAgKiAxMFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgc2V0TW9kZShtb2RlKSB7XG4gICAgICB0aGlzLmN1cnJlbnRNb2RlID0gbW9kZVxuICAgIH0sXG5cbiAgICBzdGVwTW9udGgoc3RlcCkge1xuICAgICAgY29uc3QgeyBjdXJyZW50VmFsdWUgfSA9IHRoaXNcbiAgICAgIGNvbnN0IHsgeWVhciwgbW9udGggfSA9IHRoaXMuZ2V0WWVhck1vbnRoKFxuICAgICAgICBjdXJyZW50VmFsdWUuZ2V0RnVsbFllYXIoKSxcbiAgICAgICAgY3VycmVudFZhbHVlLmdldE1vbnRoKCkgKyBzdGVwXG4gICAgICApXG4gICAgICB0aGlzLnNldERhdGUoe1xuICAgICAgICBtb250aCxcbiAgICAgICAgZGF5OiBNYXRoLm1pbihcbiAgICAgICAgICB0aGlzLmdldERheXNJbk1vbnRoKHllYXIsIG1vbnRoKSxcbiAgICAgICAgICB0aGlzLmN1cnJlbnRWYWx1ZS5nZXREYXRlKClcbiAgICAgICAgKVxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgc3RlcFllYXIoc3RlcCkge1xuICAgICAgdGhpcy5zZXREYXRlKHtcbiAgICAgICAgeWVhcjogdGhpcy5jdXJyZW50VmFsdWUuZ2V0RnVsbFllYXIoKSArIHN0ZXBcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIHNlbGVjdERhdGUoZGF0ZSkge1xuICAgICAgdGhpcy5zZXREYXRlKGRlc2NyaWJlRGF0ZShkYXRlKSwgdHJ1ZSlcbiAgICAgIHRoaXMuJGVtaXQoJ3NlbGVjdCcpXG4gICAgfSxcblxuICAgIHNlbGVjdE1vbnRoKG1vbnRoKSB7XG4gICAgICB0aGlzLnNldE1vZGUoJ2RheScpXG4gICAgICAvLyBTZXQgZGF5IHRvIDEgdG8gYXZvaWQgc2VsZWN0aW5nIGEgZGF0ZSB0aGF0IGlzIG5vdCBhdmFpbGFibGUgaW4gdGhlXG4gICAgICAvLyBuZXcgbW9udGgsIGUuZy4gRmViIDMxIC0+IE1hciAzLlxuICAgICAgdGhpcy5zZXREYXRlKHsgbW9udGgsIGRheTogMSB9LCB0cnVlKVxuICAgIH0sXG5cbiAgICBzZWxlY3RZZWFyKHllYXIpIHtcbiAgICAgIHRoaXMuc2V0TW9kZSgnbW9udGgnKVxuICAgICAgdGhpcy5zZXREYXRlKHsgeWVhciB9LCB0cnVlKVxuICAgIH0sXG5cbiAgICBnZXRZZWFyTW9udGgoeWVhciwgbW9udGgpIHtcbiAgICAgIGlmIChtb250aCA+IDExKSB7XG4gICAgICAgIHllYXIrK1xuICAgICAgICBtb250aCA9IDBcbiAgICAgIH0gZWxzZSBpZiAobW9udGggPCAwKSB7XG4gICAgICAgIHllYXItLVxuICAgICAgICBtb250aCA9IDExXG4gICAgICB9XG4gICAgICByZXR1cm4geyB5ZWFyLCBtb250aCB9XG4gICAgfSxcblxuICAgIGRhdGVUb1N0cmluZyhcbiAgICAgIGRhdGUsXG4gICAgICB7IHllYXIsIG1vbnRoLCBkYXkgfSA9IHsgeWVhcjogdHJ1ZSwgbW9udGg6IHRydWUsIGRheTogdHJ1ZSB9XG4gICAgKSB7XG4gICAgICByZXR1cm4gZGF0ZS50b0xvY2FsZVN0cmluZyh0aGlzLmxvY2FsZSwge1xuICAgICAgICB5ZWFyOiB5ZWFyICYmICdudW1lcmljJyxcbiAgICAgICAgbW9udGg6IG1vbnRoICYmICdsb25nJyxcbiAgICAgICAgZGF5OiBkYXkgJiYgJ251bWVyaWMnXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBkZWNhZGVUb1N0cmluZyhkYXRlKSB7XG4gICAgICBjb25zdCB5ZWFyID0gdGhpcy5nZXRGaXJzdFllYXJPZkRlY2FkZShkYXRlLmdldEZ1bGxZZWFyKCkpXG4gICAgICByZXR1cm4gYCR7eWVhcn0g4oCTICR7eWVhciArIDl9YFxuICAgIH0sXG5cbiAgICBnZXREYXlzSW5Nb250aCh5ZWFyLCBtb250aCkge1xuICAgICAgcmV0dXJuIG5ldyBEYXRlKHllYXIsIG1vbnRoICsgMSwgMCkuZ2V0RGF0ZSgpXG4gICAgfSxcblxuICAgIGdldEZpcnN0WWVhck9mRGVjYWRlKHllYXIpIHtcbiAgICAgIGNvbnN0IHllYXJTdHIgPSB5ZWFyLnRvU3RyaW5nKClcbiAgICAgIHJldHVybiArYCR7eWVhclN0ci5zbGljZSgwLCAtMSl9MGBcbiAgICB9LFxuXG4gICAgbmF2aWdhdGUoeyBzdGVwLCBlbnRlciwgbW9kZSA9IHRoaXMuY3VycmVudE1vZGUsIHVwZGF0ZSA9IGZhbHNlIH0pIHtcbiAgICAgIGNvbnN0IHsgY3VycmVudFZhbHVlIH0gPSB0aGlzXG4gICAgICBpZiAoc3RlcCkge1xuICAgICAgICBzd2l0Y2ggKG1vZGUpIHtcbiAgICAgICAgICBjYXNlICdkYXknOlxuICAgICAgICAgICAgdGhpcy5zZXREYXRlKHsgZGF5OiBjdXJyZW50VmFsdWUuZ2V0RGF0ZSgpICsgc3RlcCB9LCB1cGRhdGUpXG4gICAgICAgICAgICBicmVha1xuICAgICAgICAgIGNhc2UgJ21vbnRoJzpcbiAgICAgICAgICAgIHRoaXMuc2V0RGF0ZSh7IG1vbnRoOiBjdXJyZW50VmFsdWUuZ2V0TW9udGgoKSArIHN0ZXAgfSwgdXBkYXRlKVxuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICBjYXNlICd5ZWFyJzpcbiAgICAgICAgICAgIHRoaXMuc2V0RGF0ZSh7IHllYXI6IGN1cnJlbnRWYWx1ZS5nZXRGdWxsWWVhcigpICsgc3RlcCB9LCB1cGRhdGUpXG4gICAgICAgICAgICBicmVha1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgICB9IGVsc2UgaWYgKGVudGVyKSB7XG4gICAgICAgIHN3aXRjaCAodGhpcy5jdXJyZW50TW9kZSkge1xuICAgICAgICAgIGNhc2UgJ2RheSc6XG4gICAgICAgICAgICB0aGlzLnNlbGVjdERhdGUoY3VycmVudFZhbHVlKVxuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICBjYXNlICdtb250aCc6XG4gICAgICAgICAgICB0aGlzLnNldE1vZGUoJ2RheScpXG4gICAgICAgICAgICBicmVha1xuICAgICAgICAgIGNhc2UgJ3llYXInOlxuICAgICAgICAgICAgdGhpcy5zZXRNb2RlKCdtb250aCcpXG4gICAgICAgICAgICBicmVha1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgICB9XG4gICAgfSxcblxuICAgIHVwZGF0ZURhdGVSYW5nZSgpIHtcbiAgICAgIHRoaXMuZGF0ZVJhbmdlID0gW11cbiAgICAgIHRoaXMueWVhclJhbmdlID0gW11cblxuICAgICAgY29uc3QgeyBjdXJyZW50VmFsdWUgfSA9IHRoaXNcbiAgICAgIGNvbnN0IHllYXIgPSBjdXJyZW50VmFsdWUuZ2V0RnVsbFllYXIoKVxuICAgICAgY29uc3QgbW9udGggPSBjdXJyZW50VmFsdWUuZ2V0TW9udGgoKVxuICAgICAgY29uc3Qgc3RhcnRZZWFyID0gdGhpcy5nZXRGaXJzdFllYXJPZkRlY2FkZSh5ZWFyKVxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCAxMDsgaSsrKSB7XG4gICAgICAgIHRoaXMueWVhclJhbmdlLnB1c2goc3RhcnRZZWFyICsgaSlcbiAgICAgIH1cbiAgICAgIGNvbnN0IGN1cnJNb250aEZpcnN0RGF5ID0gbmV3IERhdGUoeWVhciwgbW9udGgsIDEpXG4gICAgICBsZXQgZmlyc3REYXlXZWVrID0gY3Vyck1vbnRoRmlyc3REYXkuZ2V0RGF5KCkgKyAxXG4gICAgICBpZiAoZmlyc3REYXlXZWVrID09PSAwKSB7XG4gICAgICAgIGZpcnN0RGF5V2VlayA9IDdcbiAgICAgIH1cbiAgICAgIGNvbnN0IG51bURheXMgPSB0aGlzLmdldERheXNJbk1vbnRoKHllYXIsIG1vbnRoKVxuICAgICAgaWYgKGZpcnN0RGF5V2VlayA+IDEpIHtcbiAgICAgICAgY29uc3QgcHJldk1vbnRoID0gdGhpcy5nZXRZZWFyTW9udGgoeWVhciwgbW9udGggLSAxKVxuICAgICAgICBjb25zdCBwcmV2TW9udGhOdW1EYXlzID0gdGhpcy5nZXREYXlzSW5Nb250aChcbiAgICAgICAgICBwcmV2TW9udGgueWVhcixcbiAgICAgICAgICBwcmV2TW9udGgubW9udGhcbiAgICAgICAgKVxuICAgICAgICBmb3IgKGxldCBpID0gMTsgaSA8IGZpcnN0RGF5V2VlazsgaSsrKSB7XG4gICAgICAgICAgY29uc3QgZGF5ID0gcHJldk1vbnRoTnVtRGF5cyAtIGZpcnN0RGF5V2VlayArIGkgKyAxXG4gICAgICAgICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKHByZXZNb250aC55ZWFyLCBwcmV2TW9udGgubW9udGgsIGRheSlcbiAgICAgICAgICB0aGlzLmRhdGVSYW5nZS5wdXNoKHtcbiAgICAgICAgICAgIHRleHQ6IGRheSxcbiAgICAgICAgICAgIGRhdGUsXG4gICAgICAgICAgICBzdGF0ZTogdGhpcy5kaXNhYmxlZERhdGUoZGF0ZSkgPyAnZGlzYWJsZWQnIDogJ2dyYXknXG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjb25zdCBub3cgPSBuZXcgRGF0ZSgpXG4gICAgICBmb3IgKGxldCBpID0gMTsgaSA8PSBudW1EYXlzOyBpKyspIHtcbiAgICAgICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKHllYXIsIG1vbnRoLCBpKVxuICAgICAgICBjb25zdCBpc0RheSA9IGRhdGUgPT4gKFxuICAgICAgICAgIGRhdGUgJiZcbiAgICAgICAgICBkYXRlLmdldERhdGUoKSA9PT0gaSAmJlxuICAgICAgICAgIGRhdGUuZ2V0RnVsbFllYXIoKSA9PT0geWVhciAmJlxuICAgICAgICAgIGRhdGUuZ2V0TW9udGgoKSA9PT0gbW9udGhcbiAgICAgICAgKVxuICAgICAgICBjb25zdCBzdGF0ZSA9IGlzRGF5KHRoaXMubW9kZWxWYWx1ZSlcbiAgICAgICAgICA/ICdhY3RpdmUnXG4gICAgICAgICAgOiBpc0RheShub3cpXG4gICAgICAgICAgICA/ICd0b2RheSdcbiAgICAgICAgICAgIDogdGhpcy5kaXNhYmxlZERhdGUoZGF0ZSlcbiAgICAgICAgICAgICAgPyAnZGlzYWJsZWQnXG4gICAgICAgICAgICAgIDogaXNEYXkoY3VycmVudFZhbHVlKVxuICAgICAgICAgICAgICAgID8gJ2N1cnJlbnQnXG4gICAgICAgICAgICAgICAgOiBudWxsXG4gICAgICAgIHRoaXMuZGF0ZVJhbmdlLnB1c2goe1xuICAgICAgICAgIHRleHQ6IGksXG4gICAgICAgICAgZGF0ZSxcbiAgICAgICAgICBzdGF0ZVxuICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICBjb25zdCBuZXh0TW9udGhOZWVkID0gNDIgLSB0aGlzLmRhdGVSYW5nZS5sZW5ndGhcbiAgICAgIGlmIChuZXh0TW9udGhOZWVkID4gMCkge1xuICAgICAgICBjb25zdCBuZXh0TW9udGggPSB0aGlzLmdldFllYXJNb250aCh5ZWFyLCBtb250aCArIDEpXG4gICAgICAgIGZvciAobGV0IGkgPSAxOyBpIDw9IG5leHRNb250aE5lZWQ7IGkrKykge1xuICAgICAgICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZShuZXh0TW9udGgueWVhciwgbmV4dE1vbnRoLm1vbnRoLCBpKVxuICAgICAgICAgIGNvbnN0IHN0YXRlID0gdGhpcy5kaXNhYmxlZERhdGUoZGF0ZSkgPyAnZGlzYWJsZWQnIDogJ2dyYXknXG4gICAgICAgICAgdGhpcy5kYXRlUmFuZ2UucHVzaCh7XG4gICAgICAgICAgICB0ZXh0OiBpLFxuICAgICAgICAgICAgZGF0ZSxcbiAgICAgICAgICAgIHN0YXRlXG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5jb25zdCBsb2NhbGVOYW1lcyA9IHt9XG5cbi8vIENhbGxpbmcgYHRvTG9jYWxlU3RyaW5nKClgIHRoaXMgbXVjaCBhcHBlYXJzIHRvIGJlIGV4cGVuc2l2ZSwgc28gY2FjaGUgaXQ6XG5mdW5jdGlvbiBnZXRMb2NhbGVOYW1lcyhsb2NhbGUpIHtcbiAgbGV0IG5hbWVzID0gbG9jYWxlTmFtZXNbbG9jYWxlXVxuICBpZiAoIW5hbWVzKSB7XG4gICAgY29uc3Qgd2Vla2RheU5hbWVzID0gW11cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IDc7IGkrKykge1xuICAgICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKDAsIDAsIGkpXG4gICAgICB3ZWVrZGF5TmFtZXMucHVzaCh7XG4gICAgICAgIGxvbmc6IGRhdGUudG9Mb2NhbGVTdHJpbmcobG9jYWxlLCB7IHdlZWtkYXk6ICdsb25nJyB9KSxcbiAgICAgICAgc2hvcnQ6IGRhdGUudG9Mb2NhbGVTdHJpbmcobG9jYWxlLCB7IHdlZWtkYXk6ICdzaG9ydCcgfSlcbiAgICAgIH0pXG4gICAgfVxuICAgIGNvbnN0IG1vbnRoTmFtZXMgPSBbXVxuICAgIGZvciAobGV0IGkgPSAxOyBpIDw9IDEyOyBpKyspIHtcbiAgICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSgwLCBpLCAwKVxuICAgICAgbW9udGhOYW1lcy5wdXNoKHtcbiAgICAgICAgbG9uZzogZGF0ZS50b0xvY2FsZVN0cmluZyhsb2NhbGUsIHsgbW9udGg6ICdsb25nJyB9KSxcbiAgICAgICAgc2hvcnQ6IGRhdGUudG9Mb2NhbGVTdHJpbmcobG9jYWxlLCB7IG1vbnRoOiAnc2hvcnQnIH0pXG4gICAgICB9KVxuICAgIH1cbiAgICBuYW1lcyA9IGxvY2FsZU5hbWVzW2xvY2FsZV0gPSB7XG4gICAgICB3ZWVrZGF5TmFtZXMsXG4gICAgICBtb250aE5hbWVzXG4gICAgfVxuICB9XG4gIHJldHVybiBuYW1lc1xufVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLmRpdG8tY2FsZW5kYXIge1xuICBtaW4td2lkdGg6IDI0MHB4O1xuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xufVxuXG4uZGl0by1jYWxlbmRhci1wb3B1cCB7XG4gIGJvcmRlcjogJGJvcmRlci1zdHlsZTtcbiAgYm9yZGVyLXJhZGl1czogJGJvcmRlci1yYWRpdXM7XG4gIGJhY2tncm91bmQ6ICRjb2xvci13aGl0ZTtcbiAgYm94LXNoYWRvdzogJHNoYWRvdy13aW5kb3c7XG4gIHotaW5kZXg6ICR6LWluZGV4LXBvcHVwO1xufVxuXG4uZGl0by1jYWxlbmRhci1ib2R5IHtcbiAgcGFkZGluZzogMCAwLjVlbTtcblxuICBzcGFuIHtcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgd2lkdGg6IGNhbGMoMTAwJSAvIDcpO1xuICAgIGhlaWdodDogJGlucHV0LWhlaWdodDtcbiAgICBsaW5lLWhlaWdodDogY2FsYygjeyRpbnB1dC1oZWlnaHR9IC0gMnB4KTtcbiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgIGJvcmRlci1yYWRpdXM6ICRib3JkZXItcmFkaXVzO1xuICAgIGJvcmRlcjogJGJvcmRlci13aWR0aCBzb2xpZCB0cmFuc3BhcmVudDtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIH1cblxuICAuZGl0by1jYWxlbmRhci1pdGVtLXRvZGF5IHtcbiAgICBib3JkZXI6ICRib3JkZXItd2lkdGggc29saWQgJGNvbG9yLWFjdGl2ZTtcbiAgICBjb2xvcjogJGNvbG9yLWFjdGl2ZTtcbiAgfVxuXG4gIC5kaXRvLWNhbGVuZGFyLWl0ZW0tYWN0aXZlIHtcbiAgICAmLFxuICAgICY6aG92ZXIge1xuICAgICAgYmFja2dyb3VuZDogJGNvbG9yLWFjdGl2ZTtcbiAgICAgIGNvbG9yOiB3aGl0ZTtcbiAgICB9XG4gIH1cblxuICAuZGl0by1jYWxlbmRhci1pdGVtLWRpc2FibGVkIHtcbiAgICBiYWNrZ3JvdW5kOiB3aGl0ZTtcbiAgICBjdXJzb3I6IGRlZmF1bHQ7XG4gIH1cblxuICAuZGl0by1jYWxlbmRhci1pdGVtLWRpc2FibGVkLFxuICAuZGl0by1jYWxlbmRhci1pdGVtLWdyYXkge1xuICAgIGNvbG9yOiAjOTk5OTk5O1xuICB9XG59XG5cbi5kaXRvLWNhbGVuZGFyLW1vbnRocyxcbi5kaXRvLWNhbGVuZGFyLXllYXJzIHtcbiAgc3BhbiB7XG4gICAgd2lkdGg6IGNhbGMoMTAwJSAvIDQpO1xuICAgIG1hcmdpbjogMC41ZW0gMDtcbiAgfVxufVxuXG4uZGl0by1jYWxlbmRhci15ZWFycyBzcGFuIHtcbiAgd2lkdGg6IGNhbGMoMTAwJSAvIDUpO1xufVxuXG4uZGl0by1jYWxlbmRhciBhLFxuLmRpdG8tY2FsZW5kYXItZGF0ZXMgc3Bhbixcbi5kaXRvLWNhbGVuZGFyLW1vbnRocyBzcGFuLFxuLmRpdG8tY2FsZW5kYXIteWVhcnMgc3BhbiB7XG4gIEBpbmNsdWRlIHVzZXItc2VsZWN0KG5vbmUpO1xuXG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gIGN1cnNvcjogcG9pbnRlcjtcbn1cblxuLmRpdG8tY2FsZW5kYXItaGVhZGVyIHNwYW4ge1xuICBjdXJzb3I6IGRlZmF1bHQ7XG5cbiAgYSB7XG4gICAgcGFkZGluZzogMCAwLjJlbTtcbiAgfVxufVxuXG4uZGl0by1jYWxlbmRhci1kYXRlcyBzcGFuOmhvdmVyLFxuLmRpdG8tY2FsZW5kYXItbW9udGhzIHNwYW46aG92ZXIsXG4uZGl0by1jYWxlbmRhci15ZWFycyBzcGFuOmhvdmVyLFxuLmRpdG8tY2FsZW5kYXI6bm90KDpob3ZlcikgLmRpdG8tY2FsZW5kYXItaXRlbS1jdXJyZW50IHtcbiAgYmFja2dyb3VuZDogJGNvbG9yLWhpZ2hsaWdodDtcbn1cblxuLmRpdG8tY2FsZW5kYXItd2Vla2RheXMgc3BhbiB7XG4gIGZvbnQtd2VpZ2h0OiBib2xkO1xuICBAaW5jbHVkZSB1c2VyLXNlbGVjdChub25lKTtcbn1cblxuLmRpdG8tY2FsZW5kYXItaGVhZGVyLFxuLmRpdG8tY2FsZW5kYXItZm9vdGVyIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIGhlaWdodDogJGlucHV0LWhlaWdodDtcbiAgbGluZS1oZWlnaHQ6ICRpbnB1dC1oZWlnaHQ7XG59XG5cbi5kaXRvLWNhbGVuZGFyLWZvb3RlciB7XG4gIGJvcmRlci10b3A6ICRib3JkZXItc3R5bGU7XG59XG5cbi5kaXRvLWNhbGVuZGFyLWhlYWRlciB7XG4gIGZvbnQtd2VpZ2h0OiBib2xkO1xuICBib3JkZXItYm90dG9tOiAkYm9yZGVyLXN0eWxlO1xuICBkaXNwbGF5OiBmbGV4O1xuXG4gID4gc3BhbiB7XG4gICAgbWFyZ2luOiBhdXRvO1xuICAgIHBhZGRpbmc6IDAgMC41ZW07XG4gIH1cblxuICBhIHtcbiAgICBmb250LXdlaWdodDogYm9sZDtcblxuICAgICY6aG92ZXIge1xuICAgICAgY29sb3I6ICRjb2xvci1hY3RpdmU7XG4gICAgfVxuICB9XG59XG5cbi5kaXRvLWNhbGVuZGFyLXN0ZXAtcHJldixcbi5kaXRvLWNhbGVuZGFyLXN0ZXAtbmV4dCB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgd2lkdGg6IDUlO1xuICBtaW4td2lkdGg6IDJlbTtcbiAgbWF4LXdpZHRoOiAzZW07XG5cbiAgJjo6YWZ0ZXIge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICBsZWZ0OiAwO1xuICAgIHJpZ2h0OiAwO1xuICAgIGZvbnQtc2l6ZTogMS4yNWVtO1xuICB9XG59XG5cbi5kaXRvLWNhbGVuZGFyLXN0ZXAtcHJldiB7XG4gICY6OmFmdGVyIHtcbiAgICBjb250ZW50OiAn4oC5JztcbiAgfVxuXG4gICYuZGl0by1jYWxlbmRhci1zdGVwLXllYXI6OmFmdGVyIHtcbiAgICBjb250ZW50OiAnwqsnO1xuICB9XG59XG5cbi5kaXRvLWNhbGVuZGFyLXN0ZXAtbmV4dCB7XG4gICY6OmFmdGVyIHtcbiAgICBjb250ZW50OiAn4oC6JztcbiAgfVxuXG4gICYuZGl0by1jYWxlbmRhci1zdGVwLXllYXI6OmFmdGVyIHtcbiAgICBjb250ZW50OiAnwrsnO1xuICB9XG59XG5cbi5kaXRvLWNhbGVuZGFyLXNlbGVjdC1ub3cge1xuICAmOjphZnRlciB7XG4gICAgY29udGVudDogJ05vdyc7XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCJpbXBvcnQgeyBhc0FycmF5IH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuZXhwb3J0IGZ1bmN0aW9uIGFkZEV2ZW50cyh0YXJnZXRzLCBldmVudHMpIHtcbiAgdGFyZ2V0cyA9XG4gICAgdGFyZ2V0cyBpbnN0YW5jZW9mIE5vZGVMaXN0XG4gICAgICA/IEFycmF5LmZyb20odGFyZ2V0cylcbiAgICAgIDogYXNBcnJheSh0YXJnZXRzKVxuXG4gIGZvciAoY29uc3QgW3R5cGUsIGhhbmRsZXJdIG9mIE9iamVjdC5lbnRyaWVzKGV2ZW50cykpIHtcbiAgICBmb3IgKGNvbnN0IHRhcmdldCBvZiB0YXJnZXRzKSB7XG4gICAgICB0YXJnZXQuYWRkRXZlbnRMaXN0ZW5lcih0eXBlLCBoYW5kbGVyLCBmYWxzZSlcbiAgICB9XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHJlbW92ZSgpIHtcbiAgICAgIGZvciAoY29uc3QgW3R5cGUsIGhhbmRsZXJdIG9mIE9iamVjdC5lbnRyaWVzKGV2ZW50cykpIHtcbiAgICAgICAgZm9yIChjb25zdCB0YXJnZXQgb2YgdGFyZ2V0cykge1xuICAgICAgICAgIHRhcmdldC5yZW1vdmVFdmVudExpc3RlbmVyKHR5cGUsIGhhbmRsZXIsIGZhbHNlKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb21iaW5lRXZlbnRzKC4uLmV2ZW50cykge1xuICByZXR1cm4ge1xuICAgIHJlbW92ZSgpIHtcbiAgICAgIGZvciAoY29uc3QgZXZlbnQgb2YgZXZlbnRzKSB7XG4gICAgICAgIGV2ZW50LnJlbW92ZSgpXG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRLZXkoZXZlbnQpIHtcbiAgcmV0dXJuIHtcbiAgICAzNzogJ2xlZnQnLFxuICAgIDM4OiAndXAnLFxuICAgIDM5OiAncmlnaHQnLFxuICAgIDQwOiAnZG93bicsXG4gICAgMTM6ICdlbnRlcidcbiAgfVtldmVudD8ua2V5Q29kZV1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEtleU5hdmlnYXRpb24oZXZlbnQpIHtcbiAgY29uc3Qga2V5ID0gZ2V0S2V5KGV2ZW50KVxuICByZXR1cm4ge1xuICAgIGhvcjogeyBsZWZ0OiAtMSwgcmlnaHQ6IDEgfVtrZXldIHx8IDAsXG4gICAgdmVyOiB7IHVwOiAtMSwgZG93bjogMSB9W2tleV0gfHwgMCxcbiAgICBlbnRlcjoga2V5ID09PSAnZW50ZXInXG4gIH1cbn1cbiIsImltcG9ydCB7IGlzU3RyaW5nIH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuZXhwb3J0IGZ1bmN0aW9uIGdldFRhcmdldChjb21wb25lbnQpIHtcbiAgY29uc3QgdGFyZ2V0ID0gaXNTdHJpbmcoY29tcG9uZW50LnRhcmdldClcbiAgICA/IGNvbXBvbmVudC4kcmVmc1tjb21wb25lbnQudGFyZ2V0XVxuICAgIDogY29tcG9uZW50LnRhcmdldFxuICByZXR1cm4gdGFyZ2V0Py4kZWwgPz8gdGFyZ2V0XG59XG4iLCI8IS0tIERlcml2ZWQgZnJvbSBBVFVJLCBhbmQgZnVydGhlciBleHRlbmRlZDogaHR0cHM6Ly9hbGlxaW4uZ2l0aHViLmlvL2F0dWkvIC0tPlxuPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbi5kaXRvLXRyaWdnZXItY29udGFpbmVyXG4gIC5kaXRvLXRyaWdnZXIoXG4gICAgdi1pZj1cImFsd2F5c1Nob3dcIlxuICAgIHJlZj1cInRyaWdnZXJcIlxuICAgIDpjbGFzcz1cInRyaWdnZXJDbGFzc1wiXG4gIClcbiAgICBzbG90KG5hbWU9XCJ0cmlnZ2VyXCIpXG4gIC5kaXRvLXRyaWdnZXIoXG4gICAgdi1lbHNlLWlmPVwidHJpZ2dlciA9PT0gJ2NsaWNrJ1wiXG4gICAgcmVmPVwidHJpZ2dlclwiXG4gICAgOmNsYXNzPVwidHJpZ2dlckNsYXNzXCJcbiAgICBAY2xpY2s9XCJvbkNsaWNrXCJcbiAgKVxuICAgIHNsb3QobmFtZT1cInRyaWdnZXJcIilcbiAgLmRpdG8tdHJpZ2dlcihcbiAgICB2LWVsc2UtaWY9XCJ0cmlnZ2VyID09PSAnaG92ZXInXCJcbiAgICByZWY9XCJ0cmlnZ2VyXCJcbiAgICA6Y2xhc3M9XCJ0cmlnZ2VyQ2xhc3NcIlxuICAgIEBtb3VzZWVudGVyPVwib25Ib3Zlcih0cnVlKVwiXG4gICAgQG1vdXNlbGVhdmU9XCJvbkhvdmVyKGZhbHNlKVwiXG4gIClcbiAgICBzbG90KG5hbWU9XCJ0cmlnZ2VyXCIpXG4gIC5kaXRvLXRyaWdnZXIoXG4gICAgdi1lbHNlLWlmPVwidHJpZ2dlciA9PT0gJ2ZvY3VzJyB8fCB0cmlnZ2VyID09PSAnYWx3YXlzJ1wiXG4gICAgcmVmPVwidHJpZ2dlclwiXG4gICAgOmNsYXNzPVwidHJpZ2dlckNsYXNzXCJcbiAgKVxuICAgIHNsb3QobmFtZT1cInRyaWdnZXJcIilcbiAgVHJhbnNpdGlvbig6bmFtZT1cImBkaXRvLSR7dHJhbnNpdGlvbn1gXCIpXG4gICAgLmRpdG8tcG9wdXAoXG4gICAgICB2LWlmPVwidHJpZ2dlciA9PT0gJ2hvdmVyJ1wiXG4gICAgICB2LXNob3c9XCJzaG93UG9wdXBcIlxuICAgICAgcmVmPVwicG9wdXBcIlxuICAgICAgOmNsYXNzPVwicG9wdXBDbGFzc1wiXG4gICAgICA6c3R5bGU9XCJwb3B1cFN0eWxlXCJcbiAgICAgIEBtb3VzZWVudGVyPVwib25Ib3Zlcih0cnVlKVwiXG4gICAgICBAbW91c2VsZWF2ZT1cIm9uSG92ZXIoZmFsc2UpXCJcbiAgICApXG4gICAgICBzbG90KFxuICAgICAgICB2LWlmPVwic2hvd1BvcHVwXCJcbiAgICAgICAgbmFtZT1cInBvcHVwXCJcbiAgICAgIClcbiAgICAuZGl0by1wb3B1cChcbiAgICAgIHYtZWxzZVxuICAgICAgdi1zaG93PVwic2hvd1BvcHVwXCJcbiAgICAgIHJlZj1cInBvcHVwXCJcbiAgICAgIDpjbGFzcz1cInBvcHVwQ2xhc3NcIlxuICAgICAgOnN0eWxlPVwicG9wdXBTdHlsZVwiXG4gICAgKVxuICAgICAgc2xvdChcbiAgICAgICAgdi1pZj1cInNob3dQb3B1cFwiXG4gICAgICAgIG5hbWU9XCJwb3B1cFwiXG4gICAgICApXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IHsgaHlwaGVuYXRlIH0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCB7IGFkZEV2ZW50cywgY29tYmluZUV2ZW50cyB9IGZyb20gJy4uL3V0aWxzL2V2ZW50LmpzJ1xuaW1wb3J0IHsgZ2V0VGFyZ2V0IH0gZnJvbSAnLi4vdXRpbHMvdHJpZ2dlcidcblxuZXhwb3J0IGRlZmF1bHQge1xuICBlbWl0czogWyd1cGRhdGU6c2hvdyddLFxuXG4gIHByb3BzOiB7XG4gICAgdHJpZ2dlcjogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6ICdjbGljaycgfSxcbiAgICB0cmFuc2l0aW9uOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogJ3NsaWRlJyB9LFxuICAgIHBsYWNlbWVudDogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6ICdib3R0b20nIH0sXG4gICAgc2hvdzogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGRpc2FibGVkOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgdGFyZ2V0OiB7IHR5cGU6IFtTdHJpbmcsIEhUTUxFbGVtZW50XSwgZGVmYXVsdDogbnVsbCB9LFxuICAgIGN1c3RvbUNsYXNzOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogbnVsbCB9LFxuICAgIHpJbmRleDogeyB0eXBlOiBOdW1iZXIsIGRlZmF1bHQ6IDAgfSxcbiAgICBrZWVwSW5WaWV3OiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IHRydWUgfSxcbiAgICBoaWRlV2hlbkNsaWNrT3V0c2lkZTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiB0cnVlIH0sXG4gICAgYWx3YXlzU2hvdzogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGNvdmVyOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgaGlkZURlbGF5OiB7IHR5cGU6IE51bWJlciwgZGVmYXVsdDogMCB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgc2hvd1BvcHVwOiB0aGlzLnNob3csXG4gICAgICBwb3B1cFBsYWNlbWVudDogdGhpcy5wbGFjZW1lbnQsXG4gICAgICBmb2N1c0V2ZW50czogbnVsbCxcbiAgICAgIGNsb3NlRXZlbnRzOiBudWxsLFxuICAgICAgcG9wdXBFdmVudHM6IG51bGwsXG4gICAgICBibHVyVGltZXI6IG51bGwsXG4gICAgICBtb3VzZUxlYXZlVGltZXI6IG51bGxcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICB0cmlnZ2VyQ2xhc3MoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAnZGl0by10cmlnZ2VyLWRpc2FibGVkJzogdGhpcy5kaXNhYmxlZFxuICAgICAgfVxuICAgIH0sXG5cbiAgICBwb3B1cENsYXNzKCkge1xuICAgICAgY29uc3QgY2xhc3NlcyA9IHtcbiAgICAgICAgW2BkaXRvLXBvcHVwLSR7aHlwaGVuYXRlKHRoaXMucGxhY2VtZW50KX1gXTogdHJ1ZVxuICAgICAgfVxuICAgICAgaWYgKHRoaXMuY3VzdG9tQ2xhc3MpIHtcbiAgICAgICAgY2xhc3Nlc1t0aGlzLmN1c3RvbUNsYXNzXSA9IHRydWVcbiAgICAgIH1cbiAgICAgIHJldHVybiBjbGFzc2VzXG4gICAgfSxcblxuICAgIHBvcHVwU3R5bGUoKSB7XG4gICAgICByZXR1cm4gdGhpcy56SW5kZXggPyBgei1pbmRleDogJHt0aGlzLnpJbmRleH1gIDogJydcbiAgICB9LFxuXG4gICAgdHJpZ2dlclRhcmdldCgpIHtcbiAgICAgIHJldHVybiBnZXRUYXJnZXQodGhpcylcbiAgICB9XG4gIH0sXG5cbiAgd2F0Y2g6IHtcbiAgICBzaG93KHNob3cpIHtcbiAgICAgIHRoaXMuc2hvd1BvcHVwID0gc2hvdyB8fCB0aGlzLmFsd2F5c1Nob3dcbiAgICB9LFxuXG4gICAgc2hvd1BvcHVwKHRvLCBmcm9tKSB7XG4gICAgICBpZiAodG8gXiBmcm9tKSB7XG4gICAgICAgIHRoaXMuJGVtaXQoJ3VwZGF0ZTpzaG93JywgdG8pXG4gICAgICAgIHRoaXMuJG5leHRUaWNrKCgpID0+IHRoaXMub25TaG93UG9wdXAodG8pKVxuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBtb3VudGVkKCkge1xuICAgIGNvbnN0IHsgdHJpZ2dlciwgcG9wdXAgfSA9IHRoaXMuJHJlZnNcbiAgICBpZiAodGhpcy50cmlnZ2VyID09PSAnZm9jdXMnKSB7XG4gICAgICB0aGlzLmZvY3VzRXZlbnRzID0gdGhpcy5hZGRGb2N1c0V2ZW50cyh0aGlzLnRyaWdnZXJUYXJnZXQgPz8gdHJpZ2dlcilcbiAgICB9XG5cbiAgICBpZiAodGhpcy5oaWRlV2hlbkNsaWNrT3V0c2lkZSAmJiAhdGhpcy5hbHdheXNTaG93KSB7XG4gICAgICAvLyBVc2UgJ21vdXNldXAnIGluc3RlYWQgb2YgJ2NsaWNrJywgc2luY2UgY2xpY2sgYXBwZWFycyB0byBoYXBwZW4gYWZ0ZXJcbiAgICAgIC8vIHRoZSBET00gaW5zaWRlIG9mIHBvcHVwcyBjb3VsZCBjaGFuZ2UgaW4gYSB3YXkgc28gdGhhdCB0aGUgY2hlY2tcbiAgICAgIC8vIGBwb3B1cC5jb250YWlucyhldmVudC50YXJnZXQpYCB3b3VsZCBmYWlsOlxuICAgICAgdGhpcy5jbG9zZUV2ZW50cyA9IGFkZEV2ZW50cyh3aW5kb3csIHtcbiAgICAgICAgbW91c2V1cDogZXZlbnQgPT4ge1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIHRoaXMuc2hvd1BvcHVwICYmXG4gICAgICAgICAgICAhcG9wdXAuY29udGFpbnMoZXZlbnQudGFyZ2V0KSAmJlxuICAgICAgICAgICAgIXRyaWdnZXIuY29udGFpbnMoZXZlbnQudGFyZ2V0KSAmJlxuICAgICAgICAgICAgIXRoaXMudHJpZ2dlclRhcmdldD8uY29udGFpbnMoZXZlbnQudGFyZ2V0KVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgdGhpcy5zaG93UG9wdXAgPSBmYWxzZVxuICAgICAgICAgIH1cbiAgICAgICAgfSxcblxuICAgICAgICBibHVyOiAoKSA9PiB7XG4gICAgICAgICAgdGhpcy5zaG93UG9wdXAgPSBmYWxzZVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH1cblxuICAgIGlmICh0aGlzLmFsd2F5c1Nob3cpIHtcbiAgICAgIHRoaXMuc2hvd1BvcHVwID0gdHJ1ZVxuICAgIH1cbiAgfSxcblxuICBjcmVhdGVkKCkge1xuICAgIHRoaXMuc2hvd1BvcHVwID0gdGhpcy5zaG93XG4gIH0sXG5cbiAgdW5tb3VudGVkKCkge1xuICAgIHRoaXMuZm9jdXNFdmVudHM/LnJlbW92ZSgpXG4gICAgdGhpcy5jbG9zZUV2ZW50cz8ucmVtb3ZlKClcbiAgICB0aGlzLnBvcHVwRXZlbnRzPy5yZW1vdmUoKVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICB1cGRhdGVQb3NpdGlvbigpIHtcbiAgICAgIGNvbnN0IHsgdHJpZ2dlciwgcG9wdXAgfSA9IHRoaXMuJHJlZnNcbiAgICAgIGlmICh0aGlzLnNob3cgJiYgcG9wdXAub2Zmc2V0V2lkdGggPT09IDApIHtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLnVwZGF0ZVBvc2l0aW9uKCksIDApXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBjb25zdCB0YXJnZXQgPSB0aGlzLnRyaWdnZXJUYXJnZXQgPz8gdHJpZ2dlclxuICAgICAgLy8gQWN0dWFsbHkgcmVzaXplIHRoZSBwb3B1cCdzIGZpcnN0IGNoaWxkLCBzbyB0aGV5IGNhbiBzZXQgc2l6ZSBsaW1pdHMuXG4gICAgICBjb25zdCBlbCA9IHRoaXMudGFyZ2V0ID09PSAncG9wdXAnID8gdHJpZ2dlciA6IHBvcHVwLmZpcnN0RWxlbWVudENoaWxkXG4gICAgICBpZiAoZWwpIHtcbiAgICAgICAgZWwuc3R5bGUud2lkdGggPSBnZXRDb21wdXRlZFN0eWxlKHRhcmdldCkud2lkdGhcbiAgICAgIH1cblxuICAgICAgY29uc3QgYm91bmRzID0gdGFyZ2V0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpXG4gICAgICBjb25zdCB0cmlnZ2VyTGVmdCA9IGJvdW5kcy5sZWZ0ICsgd2luZG93LnNjcm9sbFhcbiAgICAgIGNvbnN0IHRyaWdnZXJUb3AgPSBib3VuZHMudG9wICsgd2luZG93LnNjcm9sbFlcbiAgICAgIGNvbnN0IHRyaWdnZXJXaWR0aCA9IGJvdW5kcy53aWR0aFxuICAgICAgY29uc3QgdHJpZ2dlckhlaWdodCA9IGJvdW5kcy5oZWlnaHRcbiAgICAgIGNvbnN0IHBvcHVwV2lkdGggPSBwb3B1cC5vZmZzZXRXaWR0aFxuICAgICAgY29uc3QgcG9wdXBIZWlnaHQgPSBwb3B1cC5vZmZzZXRIZWlnaHRcblxuICAgICAgbGV0IFtwYXJ0MSwgcGFydDJdID0gdGhpcy5wb3B1cFBsYWNlbWVudC5zcGxpdCgnLScpIHx8IFtdXG4gICAgICBpZiAodGhpcy5rZWVwSW5WaWV3KSB7XG4gICAgICAgIGNvbnN0IHdpbldpZHRoID0gd2luZG93LmlubmVyV2lkdGhcbiAgICAgICAgY29uc3Qgd2luSGVpZ2h0ID0gd2luZG93LmlubmVySGVpZ2h0XG4gICAgICAgIGlmIChwYXJ0MSA9PT0gJ3RvcCcpIHtcbiAgICAgICAgICBpZiAodHJpZ2dlclRvcCA8IHBvcHVwSGVpZ2h0KSB7XG4gICAgICAgICAgICBwYXJ0MSA9ICdib3R0b20nXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHBhcnQxID09PSAnYm90dG9tJykge1xuICAgICAgICAgIGlmICh3aW5IZWlnaHQgLSB0cmlnZ2VyVG9wIC0gdHJpZ2dlckhlaWdodCA8IHBvcHVwSGVpZ2h0KSB7XG4gICAgICAgICAgICBwYXJ0MSA9ICd0b3AnXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHBhcnQxID09PSAnbGVmdCcpIHtcbiAgICAgICAgICBpZiAodHJpZ2dlckxlZnQgPCBwb3B1cFdpZHRoKSB7XG4gICAgICAgICAgICBwYXJ0MSA9ICdyaWdodCdcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAocGFydDEgPT09ICdyaWdodCcpIHtcbiAgICAgICAgICBpZiAod2luV2lkdGggLSB0cmlnZ2VyTGVmdCAtIHRyaWdnZXJXaWR0aCA8IHBvcHVwV2lkdGgpIHtcbiAgICAgICAgICAgIHBhcnQxID0gJ2xlZnQnXG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHBhcnQyID09PSAndG9wJykge1xuICAgICAgICAgIGlmICh3aW5IZWlnaHQgLSB0cmlnZ2VyVG9wIDwgcG9wdXBIZWlnaHQpIHtcbiAgICAgICAgICAgIHBhcnQyID0gJ2JvdHRvbSdcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAocGFydDIgPT09ICdib3R0b20nKSB7XG4gICAgICAgICAgaWYgKHRyaWdnZXJUb3AgKyB0cmlnZ2VySGVpZ2h0IDwgcG9wdXBIZWlnaHQpIHtcbiAgICAgICAgICAgIHBhcnQyID0gJ3RvcCdcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAocGFydDIgPT09ICdsZWZ0Jykge1xuICAgICAgICAgIGlmICh3aW5XaWR0aCAtIHRyaWdnZXJMZWZ0IDwgcG9wdXBXaWR0aCkge1xuICAgICAgICAgICAgcGFydDIgPSAncmlnaHQnXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHBhcnQyID09PSAncmlnaHQnKSB7XG4gICAgICAgICAgaWYgKHRyaWdnZXJMZWZ0ICsgdHJpZ2dlcldpZHRoIDwgcG9wdXBXaWR0aCkge1xuICAgICAgICAgICAgcGFydDIgPSAnbGVmdCdcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgbGV0IGxlZnQgPSAwXG4gICAgICBsZXQgdG9wID0gMFxuICAgICAgc3dpdGNoIChwYXJ0MSkge1xuICAgICAgICBjYXNlICd0b3AnOlxuICAgICAgICAgIHRvcCAtPSBwb3B1cEhlaWdodFxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgJ2xlZnQnOlxuICAgICAgICAgIGxlZnQgLT0gcG9wdXBXaWR0aFxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgJ3JpZ2h0JzpcbiAgICAgICAgICBsZWZ0ICs9IHRyaWdnZXJXaWR0aFxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgJ2JvdHRvbSc6XG4gICAgICAgICAgdG9wICs9IHRyaWdnZXJIZWlnaHRcbiAgICAgICAgICBicmVha1xuICAgICAgfVxuICAgICAgc3dpdGNoIChwYXJ0Mikge1xuICAgICAgICBjYXNlICdyaWdodCc6XG4gICAgICAgICAgbGVmdCAtPSBwb3B1cFdpZHRoIC0gdHJpZ2dlcldpZHRoXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAnYm90dG9tJzpcbiAgICAgICAgICB0b3AgLT0gcG9wdXBIZWlnaHQgLSB0cmlnZ2VySGVpZ2h0XG4gICAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmNvdmVyKSB7XG4gICAgICAgIGlmIChwYXJ0MSA9PT0gJ3RvcCcpIHtcbiAgICAgICAgICB0b3AgKz0gdHJpZ2dlckhlaWdodFxuICAgICAgICB9IGVsc2UgaWYgKHBhcnQxID09PSAnYm90dG9tJykge1xuICAgICAgICAgIHRvcCAtPSB0cmlnZ2VySGVpZ2h0XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICh0YXJnZXQgIT09IHRyaWdnZXIpIHtcbiAgICAgICAgY29uc3QgdHJpZ2dlckJvdW5kcyA9IHRyaWdnZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KClcbiAgICAgICAgbGVmdCArPSB0cmlnZ2VyTGVmdCAtIHRyaWdnZXJCb3VuZHMubGVmdFxuICAgICAgICB0b3AgKz0gdHJpZ2dlclRvcCAtIHRyaWdnZXJCb3VuZHMudG9wXG4gICAgICB9XG4gICAgICBwb3B1cC5zdHlsZS5sZWZ0ID0gYCR7bGVmdH1weGBcbiAgICAgIHBvcHVwLnN0eWxlLnRvcCA9IGAke3RvcH1weGBcbiAgICB9LFxuXG4gICAgYWRkRm9jdXNFdmVudHMocGFyZW50KSB7XG4gICAgICBjb25zdCB0YXJnZXRzID0gcGFyZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2lucHV0LCB0ZXh0YXJlYScpXG4gICAgICBsZXQgaW5wdXRcblxuICAgICAgcmV0dXJuIGNvbWJpbmVFdmVudHMoXG4gICAgICAgIGFkZEV2ZW50cyh0YXJnZXRzLCB7XG4gICAgICAgICAgZm9jdXM6ICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc2hvd1BvcHVwID0gdHJ1ZVxuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuYmx1clRpbWVyKVxuICAgICAgICAgIH0sXG5cbiAgICAgICAgICBibHVyOiAoKSA9PiB7XG4gICAgICAgICAgICAvLyBVc2UgdGltZW91dCB0byBhbGxvdyBjbGlja2VkIGlucHV0cyB0byBncmFiIGZvY3VzXG4gICAgICAgICAgICB0aGlzLmJsdXJUaW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICBpZiAoIXRoaXMuJHJlZnMucG9wdXAubWF0Y2hlcygnOmZvY3VzLXdpdGhpbicpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zaG93UG9wdXAgPSBmYWxzZVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCAwKVxuICAgICAgICAgIH1cbiAgICAgICAgfSksXG5cbiAgICAgICAgYWRkRXZlbnRzKHBhcmVudCwge1xuICAgICAgICAgIG1vdXNlZG93bjogZXZlbnQgPT4ge1xuICAgICAgICAgICAgaWYgKCFldmVudC50YXJnZXQubWF0Y2hlcygnaW5wdXQsIHRleHRhcmVhLCBidXR0b24nKSkge1xuICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpXG4gICAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIWV2ZW50LnRhcmdldC5tYXRjaGVzKCcuZGl0by1idXR0b24tY2xlYXInKSkge1xuICAgICAgICAgICAgICBjb25zdCB0cmlnZ2VyID0gdGhpcy50cmlnZ2VyVGFyZ2V0ID8/IHRoaXMuJHJlZnMudHJpZ2dlclxuICAgICAgICAgICAgICAvLyBNYXJrIHRyaWdnZXIgaW5wdXQgYXMgcmVhZG9ubHkgc28gaXQgY2FuJ3QgbG9vc2UgZm9jdXMgd2hpbGVcbiAgICAgICAgICAgICAgLy8gdXNlciBkb2VzIG90aGVyIG1vdXNlLWFjdGl2aXRpZXMgaW4gcG9wdXAuXG4gICAgICAgICAgICAgIGlucHV0ID0gdHJpZ2dlci5xdWVyeVNlbGVjdG9yKCdpbnB1dCwgdGV4dGFyZWEnKVxuICAgICAgICAgICAgICBpZiAoaW5wdXQgJiYgIWlucHV0Lmhhc0F0dHJpYnV0ZSgncmVhZG9ubHknKSkge1xuICAgICAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgncmVhZG9ubHknLCAndHJ1ZScpXG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaW5wdXQgPSBudWxsXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuXG4gICAgICAgICAgbW91c2V1cDogZXZlbnQgPT4ge1xuICAgICAgICAgICAgaWYgKGlucHV0KSB7XG4gICAgICAgICAgICAgIC8vIEdpdmUgc29tZSB0aW1lIGZvciBvdGhlciBldmVudHMgdG8gdXBkYXRlIGlucHV0IGJlZm9yZSBpdFxuICAgICAgICAgICAgICAvLyBiZWNvbWVzIGVkaXRhYmxlIGFuZCBzdGlsbCBmb2N1c2VkIGFnYWluLlxuICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICBpbnB1dC5yZW1vdmVBdHRyaWJ1dGUoJ3JlYWRvbmx5JylcbiAgICAgICAgICAgICAgICBpZiAoIWV2ZW50LnRhcmdldC5tYXRjaGVzKCdpbnB1dCwgdGV4dGFyZWEsIGJ1dHRvbicpKSB7XG4gICAgICAgICAgICAgICAgICBpbnB1dC5mb2N1cygpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlucHV0ID0gbnVsbFxuICAgICAgICAgICAgICB9LCAwKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgIClcbiAgICB9LFxuXG4gICAgb25TaG93UG9wdXAoc2hvdykge1xuICAgICAgaWYgKHNob3cpIHtcbiAgICAgICAgaWYgKHRoaXMudHJpZ2dlciA9PT0gJ2ZvY3VzJykge1xuICAgICAgICAgIHRoaXMucG9wdXBFdmVudHMgPSB0aGlzLmFkZEZvY3VzRXZlbnRzKHRoaXMuJHJlZnMucG9wdXApXG4gICAgICAgIH1cbiAgICAgICAgdGhpcy51cGRhdGVQb3NpdGlvbigpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnBvcHVwRXZlbnRzPy5yZW1vdmUoKVxuICAgICAgICB0aGlzLnBvcHVwRXZlbnRzID0gbnVsbFxuICAgICAgfVxuICAgIH0sXG5cbiAgICBvbkNsaWNrKCkge1xuICAgICAgaWYgKCF0aGlzLmRpc2FibGVkKSB7XG4gICAgICAgIHRoaXMuc2hvd1BvcHVwID0gdHJ1ZVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBvbkhvdmVyKGVudGVyKSB7XG4gICAgICBpZiAoIXRoaXMuZGlzYWJsZWQpIHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMubW91c2VMZWF2ZVRpbWVyKVxuICAgICAgICBpZiAoZW50ZXIpIHtcbiAgICAgICAgICB0aGlzLnNob3dQb3B1cCA9IHRydWVcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAodGhpcy5oaWRlRGVsYXkpIHtcbiAgICAgICAgICAgIHRoaXMubW91c2VMZWF2ZVRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMuc2hvd1BvcHVwID0gZmFsc2VcbiAgICAgICAgICAgIH0sIHRoaXMuaGlkZURlbGF5KVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnNob3dQb3B1cCA9IGZhbHNlXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuQGltcG9ydCAnLi4vc3R5bGVzL3RyYW5zaXRpb25zL2luZGV4LnNjc3MnO1xuXG4uZGl0by10cmlnZ2VyLWNvbnRhaW5lciB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbn1cblxuLmRpdG8tdHJpZ2dlci1kaXNhYmxlZCB7XG4gIGNvbG9yOiAkY29sb3ItZGlzYWJsZWQ7XG4gIGJvcmRlci1jb2xvcjogJGJvcmRlci1jb2xvcjtcbiAgY3Vyc29yOiBkZWZhdWx0O1xuXG4gICoge1xuICAgIGN1cnNvcjogZGVmYXVsdCAhaW1wb3J0YW50O1xuICAgIEBpbmNsdWRlIHVzZXItc2VsZWN0KG5vbmUpO1xuXG4gICAgJjpmb2N1cyB7XG4gICAgICBib3gtc2hhZG93OiBub25lO1xuICAgIH1cbiAgfVxufVxuXG4uZGl0by1wb3B1cCB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgdG9wOiAwO1xuICBsZWZ0OiAwO1xuICB6LWluZGV4OiAkei1pbmRleC1wb3B1cDtcbn1cbjwvc3R5bGU+XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuLmRpdG8taW5wdXQoOmNsYXNzPVwiY2xhc3Nlc1wiKVxuICBzbG90KG5hbWU9XCJiZWZvcmVcIilcbiAgaW5wdXQoXG4gICAgOmlkPVwiaWRcIlxuICAgIHJlZj1cImlucHV0XCJcbiAgICB2LW1vZGVsPVwiY3VycmVudFZhbHVlXCJcbiAgICA6dHlwZT1cInR5cGVcIlxuICAgIDpuYW1lPVwibmFtZVwiXG4gICAgOnRpdGxlPVwidGl0bGVcIlxuICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICA6cmVhZG9ubHk9XCJyZWFkb25seVwiXG4gICAgOmF1dG9mb2N1cz1cImF1dG9mb2N1c1wiXG4gICAgOnBsYWNlaG9sZGVyPVwicGxhY2Vob2xkZXJcIlxuICAgIDphdXRvY29tcGxldGU9XCJhdXRvY29tcGxldGVcIlxuICAgIDphcmlhLWxhYmVsPVwidGl0bGVcIlxuICAgIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICApXG4gIHNsb3QobmFtZT1cImFmdGVyXCIpXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuZXhwb3J0IGRlZmF1bHQge1xuICBlbWl0czogWyd1cGRhdGU6bW9kZWxWYWx1ZSddLFxuICBpbmhlcml0QXR0cnM6IGZhbHNlLFxuXG4gIHByb3BzOiB7XG4gICAgbW9kZWxWYWx1ZTogeyB0eXBlOiBbU3RyaW5nLCBOdW1iZXJdLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgdHlwZTogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6ICd0ZXh0JyB9LFxuICAgIGlkOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogbnVsbCB9LFxuICAgIG5hbWU6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgdGl0bGU6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgZGlzYWJsZWQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICByZWFkb25seTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGF1dG9mb2N1czogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIHBsYWNlaG9sZGVyOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogbnVsbCB9LFxuICAgIGF1dG9jb21wbGV0ZTogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6ICdvZmYnIH1cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBjdXJyZW50VmFsdWU6IHRoaXMubW9kZWxWYWx1ZSxcbiAgICAgIGhvdmVyaW5nOiBmYWxzZSxcbiAgICAgIGZvY3VzZWQ6IGZhbHNlXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgY2xhc3NlcygpIHtcbiAgICAgIHJldHVybiB0aGlzLiRhdHRycy5jbGFzc1xuICAgIH0sXG5cbiAgICBhdHRyaWJ1dGVzKCkge1xuICAgICAgY29uc3QgeyBjbGFzczogXywgLi4uYXR0cmlidXRlcyB9ID0gdGhpcy4kYXR0cnNcbiAgICAgIHJldHVybiBhdHRyaWJ1dGVzXG4gICAgfSxcblxuICAgIGlucHV0KCkge1xuICAgICAgcmV0dXJuIHRoaXMuJHJlZnMuaW5wdXRcbiAgICB9LFxuXG4gICAgc2l6ZSgpIHtcbiAgICAgIC8vIERldGVybWluZSBzaXplIGJhc2VkIG9uIG1pbiAmIG1heCBzZXR0aW5ncywgaWYgdGhleSdyZSBwcm92aWRlZC5cbiAgICAgIGNvbnN0IHsgc2l6ZSwgbWluLCBtYXggfSA9IHRoaXMuJGF0dHJzXG4gICAgICBjb25zdCBnZXRMZW5ndGggPSB2YWx1ZSA9PiAodmFsdWUgIT0gbnVsbCA/IGAke3ZhbHVlfWAubGVuZ3RoIDogMClcbiAgICAgIHJldHVybiBzaXplIHx8IGdldExlbmd0aChtaW4pIHx8IGdldExlbmd0aChtYXgpIHx8IHVuZGVmaW5lZFxuICAgIH1cbiAgfSxcblxuICB3YXRjaDoge1xuICAgIG1vZGVsVmFsdWUodG8sIGZyb20pIHtcbiAgICAgIGlmICh0byAhPT0gZnJvbSkge1xuICAgICAgICB0aGlzLmN1cnJlbnRWYWx1ZSA9IHRvXG4gICAgICB9XG4gICAgfSxcblxuICAgIGN1cnJlbnRWYWx1ZShjdXJyZW50VmFsdWUpIHtcbiAgICAgIGlmIChjdXJyZW50VmFsdWUgIT09IHRoaXMubW9kZWxWYWx1ZSkge1xuICAgICAgICB0aGlzLiRlbWl0KCd1cGRhdGU6bW9kZWxWYWx1ZScsIGN1cnJlbnRWYWx1ZSlcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGZvY3VzKCkge1xuICAgICAgdGhpcy5pbnB1dC5mb2N1cygpXG4gICAgfSxcblxuICAgIGJsdXIoKSB7XG4gICAgICB0aGlzLmlucHV0LmJsdXIoKVxuICAgIH1cbiAgfVxufVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLmRpdG8taW5wdXQge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG5cbiAgQGV4dGVuZCAlaW5wdXQ7XG5cbiAgaW5wdXQge1xuICAgIC8vIEluaGVyaXQgYWxsIHN0eWxpbmcgZnJvbSAuZGl0by1pbnB1dFxuICAgIGFsbDogaW5oZXJpdDtcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgYm9yZGVyOiAwO1xuICAgIG1hcmdpbjogMDtcbiAgICBwYWRkaW5nOiAwO1xuICB9XG59XG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbmkuZGl0by1pY29uKFxuICA6Y2xhc3M9YHtcbiAgICBbJ2RpdG8taWNvbi0tJyArIG5hbWVdOiB0cnVlLFxuICAgICdkaXRvLWljb24tLWRpc2FibGVkJzogZGlzYWJsZWRcbiAgfWBcbilcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5leHBvcnQgZGVmYXVsdCB7XG4gIHByb3BzOiB7XG4gICAgbmFtZToge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgcmVxdWlyZWQ6IHRydWVcbiAgICB9LFxuICAgIGRpc2FibGVkOiB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9XG4gIH1cbn1cbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5cbi8vIGB5YXJuIGJ1aWxkOmljb25zYCBjb252ZXJ0cyB0aGUgaWNvbiBTVkcgZmlsZXMgdG8gc2lsZW50IGNsYXNzZXMgaW5zaWRlXG4vLyBgc3JjL3N0eWxlcy9taXhpbnMvX2ljb25zLnNjc3NgLCBtYWtpbmcgdGhlbSBhdmFpbGFibGUgdG8gYWxsIG90aGVyIHNhc3Ncbi8vIGNvZGUgdGhyb3VnaCBgX2ltcG9ydHNgLlxuLy8gSW4gb3JkZXIgdG8gYmUgYWJsZSB0byB1c2UgdGhlbSBhcyBub3JtYWwgQ1NTIGNsYXNzZXMsIGNvbnZlcnQgdGhlbSBoZXJlOlxuQGVhY2ggJG5hbWUgaW4gJGljb25zIHtcbiAgLmRpdG8taWNvbi0tI3skbmFtZX0ge1xuICAgICY6OmFmdGVyIHtcbiAgICAgIEBleHRlbmQgJWljb24tI3skbmFtZX07XG5cbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB9XG4gIH1cbn1cblxuLmRpdG8taWNvbiB7XG4gIEBhdC1yb290IC5kaXRvLWlucHV0ICYge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICBpbnNldDogJGJvcmRlci13aWR0aDtcbiAgICBsZWZ0OiB1bnNldDtcbiAgICB3aWR0aDogMmVtO1xuICAgIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgICBib3JkZXItcmFkaXVzOiAkYm9yZGVyLXJhZGl1cztcbiAgICBjb2xvcjogJGNvbG9yLWdyZXk7XG4gICAgYmFja2dyb3VuZDogJGNvbG9yLXdoaXRlO1xuXG4gICAgJi0tZGlzYWJsZWQge1xuICAgICAgY29sb3I6ICRjb2xvci1saWdodDtcbiAgICB9XG4gIH1cblxuICBAYXQtcm9vdCAuZGl0by1pbnB1dDpmb2N1cy13aXRoaW4gJiB7XG4gICAgY29sb3I6ICRjb2xvci1hY3RpdmU7XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCJleHBvcnQgZnVuY3Rpb24gc2V0U2VsZWN0aW9uKGlucHV0LCB7IHN0YXJ0LCBlbmQgfSkge1xuICBpZiAoaW5wdXQ/LnNldFNlbGVjdGlvblJhbmdlKSB7XG4gICAgaW5wdXQuZm9jdXMoKVxuICAgIGlucHV0LnNldFNlbGVjdGlvblJhbmdlKHN0YXJ0LCBlbmQpXG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFNlbGVjdGlvbihpbnB1dCkge1xuICByZXR1cm4gaW5wdXQgJiYgJ3NlbGVjdGlvblN0YXJ0JyBpbiBpbnB1dFxuICAgID8geyBzdGFydDogaW5wdXQuc2VsZWN0aW9uU3RhcnQsIGVuZDogaW5wdXQuc2VsZWN0aW9uRW5kIH1cbiAgICA6IG51bGxcbn1cbiIsIjwhLS0gRGVyaXZlZCBmcm9tIEFUVUksIGFuZCBmdXJ0aGVyIGV4dGVuZGVkOiBodHRwczovL2FsaXFpbi5naXRodWIuaW8vYXR1aS8gLS0+XG48dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuVHJpZ2dlci5kaXRvLWRhdGUtcGlja2VyKFxuICByZWY9XCJ0cmlnZ2VyXCJcbiAgdi1tb2RlbDpzaG93PVwic2hvd1BvcHVwXCJcbiAgdHJpZ2dlcj1cImZvY3VzXCJcbiAgdi1iaW5kPVwieyB0cmFuc2l0aW9uLCBwbGFjZW1lbnQsIGRpc2FibGVkLCB0YXJnZXQgfVwiXG4pXG4gIHRlbXBsYXRlKCN0cmlnZ2VyKVxuICAgIHNsb3QoXG4gICAgICB2LWlmPVwiJHNsb3RzLnRyaWdnZXJcIlxuICAgICAgbmFtZT1cInRyaWdnZXJcIlxuICAgIClcbiAgICBJbnB1dEZpZWxkLmRpdG8tZGF0ZS1waWNrZXItaW5wdXQoXG4gICAgICB2LWVsc2VcbiAgICAgIHJlZj1cImlucHV0XCJcbiAgICAgIHYtbW9kZWw9XCJjdXJyZW50VGV4dFwiXG4gICAgICB0eXBlPVwidGV4dFwiXG4gICAgICA6Y2xhc3M9XCJ7ICdkaXRvLWZvY3VzJzogZm9jdXNlZCB9XCJcbiAgICAgIHYtYmluZD1cInsgcGxhY2Vob2xkZXIsIGRpc2FibGVkLCAuLi4kYXR0cnMgfVwiXG4gICAgICBAZm9jdXM9XCJvbkZvY3VzKHRydWUpXCJcbiAgICAgIEBibHVyPVwib25Gb2N1cyhmYWxzZSlcIlxuICAgICAgQGtleWRvd249XCJvbktleURvd25cIlxuICAgICAgQG1vdXNlZG93bi5zdG9wPVwib25Nb3VzZURvd24oZmFsc2UpXCJcbiAgICApXG4gICAgICB0ZW1wbGF0ZSgjYmVmb3JlKVxuICAgICAgICBzbG90KG5hbWU9XCJiZWZvcmVcIilcbiAgICAgIHRlbXBsYXRlKCNhZnRlcilcbiAgICAgICAgSWNvbihcbiAgICAgICAgICBuYW1lPVwiY2FsZW5kYXJcIlxuICAgICAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICAgICAgICBAbW91c2Vkb3duLnByZXZlbnQ9XCJvbk1vdXNlRG93bih0cnVlKVwiXG4gICAgICAgIClcbiAgICAgICAgc2xvdChuYW1lPVwiYWZ0ZXJcIilcbiAgdGVtcGxhdGUoI3BvcHVwKVxuICAgIENhbGVuZGFyLmRpdG8tZGF0ZS1waWNrZXItcG9wdXAoXG4gICAgICByZWY9XCJjYWxlbmRhclwiXG4gICAgICB2LW1vZGVsPVwiY3VycmVudFZhbHVlXCJcbiAgICAgIHYtYmluZD1cInsgbG9jYWxlLCBkaXNhYmxlZERhdGUgfVwiXG4gICAgICBAc2VsZWN0PVwic2hvd1BvcHVwID0gZmFsc2VcIlxuICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgeyBmb3JtYXQsIGRlZmF1bHRGb3JtYXRzIH0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCBUcmlnZ2VyIGZyb20gJy4vVHJpZ2dlci52dWUnXG5pbXBvcnQgQ2FsZW5kYXIgZnJvbSAnLi9DYWxlbmRhci52dWUnXG5pbXBvcnQgSW5wdXRGaWVsZCBmcm9tICcuL0lucHV0RmllbGQudnVlJ1xuaW1wb3J0IEljb24gZnJvbSAnLi9JY29uLnZ1ZSdcbmltcG9ydCB7IHBhcnNlRGF0ZSwgZ2V0RGF0ZVBhcnRBdFBvc2l0aW9uIH0gZnJvbSAnLi4vdXRpbHMvZGF0ZS5qcydcbmltcG9ydCB7IGdldFNlbGVjdGlvbiwgc2V0U2VsZWN0aW9uIH0gZnJvbSAnLi4vdXRpbHMvc2VsZWN0aW9uLmpzJ1xuaW1wb3J0IHsgZ2V0S2V5TmF2aWdhdGlvbiB9IGZyb20gJy4uL3V0aWxzL2V2ZW50LmpzJ1xuaW1wb3J0IHsgZ2V0VGFyZ2V0IH0gZnJvbSAnLi4vdXRpbHMvdHJpZ2dlci5qcydcblxuZXhwb3J0IGRlZmF1bHQge1xuICBjb21wb25lbnRzOiB7IFRyaWdnZXIsIENhbGVuZGFyLCBJbnB1dEZpZWxkLCBJY29uIH0sXG4gIGVtaXRzOiBbJ3VwZGF0ZTptb2RlbFZhbHVlJywgJ3VwZGF0ZTpzaG93JywgJ2NoYW5nZScsICdmb2N1cycsICdibHVyJ10sXG4gIGluaGVyaXRBdHRyczogZmFsc2UsXG5cbiAgcHJvcHM6IHtcbiAgICBtb2RlbFZhbHVlOiB7IHR5cGU6IERhdGUsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICB0cmFuc2l0aW9uOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogJ3NsaWRlJyB9LFxuICAgIHBsYWNlbWVudDogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6ICdib3R0b20tbGVmdCcgfSxcbiAgICBwbGFjZWhvbGRlcjogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBzaG93OiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgZGlzYWJsZWQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICB0YXJnZXQ6IHsgdHlwZTogW1N0cmluZywgSFRNTEVsZW1lbnRdLCBkZWZhdWx0OiAndHJpZ2dlcicgfSxcbiAgICBsb2NhbGU6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiAnZW4tVVMnIH0sXG4gICAgZm9ybWF0OiB7XG4gICAgICB0eXBlOiBPYmplY3QsXG4gICAgICBkZWZhdWx0OiAoKSA9PiAoe1xuICAgICAgICBkYXRlOiBkZWZhdWx0Rm9ybWF0cy5kYXRlLFxuICAgICAgICB0aW1lOiBmYWxzZVxuICAgICAgfSlcbiAgICB9LFxuICAgIGRpc2FibGVkRGF0ZTogeyB0eXBlOiBGdW5jdGlvbiwgZGVmYXVsdDogKCkgPT4gZmFsc2UgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGN1cnJlbnRWYWx1ZTogdGhpcy5tb2RlbFZhbHVlLFxuICAgICAgc2hvd1BvcHVwOiB0aGlzLnNob3csXG4gICAgICBpbnB1dEZvY3VzZWQ6IGZhbHNlXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgZm9jdXNlZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmlucHV0Rm9jdXNlZCB8fCB0aGlzLnNob3dQb3B1cFxuICAgIH0sXG5cbiAgICBpbnB1dCgpIHtcbiAgICAgIHJldHVybiBnZXRUYXJnZXQodGhpcyk/LnF1ZXJ5U2VsZWN0b3IoJ2lucHV0JylcbiAgICB9LFxuXG4gICAgZm9ybWF0T3B0aW9ucygpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGxvY2FsZTogdGhpcy5sb2NhbGUsXG4gICAgICAgIC4uLnRoaXMuZm9ybWF0XG4gICAgICB9XG4gICAgfSxcblxuICAgIGN1cnJlbnRUZXh0OiB7XG4gICAgICBnZXQoKSB7XG4gICAgICAgIHJldHVybiBmb3JtYXQodGhpcy5jdXJyZW50VmFsdWUsIHRoaXMuZm9ybWF0T3B0aW9ucykgfHwgJydcbiAgICAgIH0sXG5cbiAgICAgIHNldCh2YWx1ZSkge1xuICAgICAgICBjb25zdCBkYXRlID0gcGFyc2VEYXRlKHZhbHVlLCB0aGlzLmZvcm1hdE9wdGlvbnMpXG4gICAgICAgIGlmIChkYXRlKSB7XG4gICAgICAgICAgdGhpcy5jdXJyZW50VmFsdWUgPSBkYXRlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgd2F0Y2g6IHtcbiAgICBtb2RlbFZhbHVlKHRvLCBmcm9tKSB7XG4gICAgICBpZiAoK3RvICE9PSArZnJvbSkge1xuICAgICAgICB0aGlzLmN1cnJlbnRWYWx1ZSA9IHRvXG4gICAgICB9XG4gICAgfSxcblxuICAgIGN1cnJlbnRWYWx1ZSh2YWx1ZSkge1xuICAgICAgaWYgKCt2YWx1ZSAhPT0gK3RoaXMubW9kZWxWYWx1ZSkge1xuICAgICAgICB0aGlzLiRlbWl0KCd1cGRhdGU6bW9kZWxWYWx1ZScsIHZhbHVlKVxuICAgICAgICB0aGlzLiRlbWl0KCdjaGFuZ2UnLCB2YWx1ZSlcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgc2hvdyhzaG93KSB7XG4gICAgICB0aGlzLnNob3dQb3B1cCA9IHNob3dcbiAgICB9LFxuXG4gICAgc2hvd1BvcHVwKHRvLCBmcm9tKSB7XG4gICAgICBpZiAodG8gXiBmcm9tKSB7XG4gICAgICAgIHRoaXMuJGVtaXQoJ3VwZGF0ZTpzaG93JywgdG8pXG4gICAgICB9XG4gICAgfSxcblxuICAgIGZvY3VzZWQodG8sIGZyb20pIHtcbiAgICAgIGlmICh0byBeIGZyb20pIHtcbiAgICAgICAgdGhpcy4kZW1pdCh0byA/ICdmb2N1cycgOiAnYmx1cicpXG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBvbkZvY3VzKGZvY3VzKSB7XG4gICAgICB0aGlzLmlucHV0Rm9jdXNlZCA9IGZvY3VzXG4gICAgICB0aGlzLnNob3dQb3B1cCA9IGZvY3VzXG4gICAgfSxcblxuICAgIG9uS2V5RG93bihldmVudCkge1xuICAgICAgY29uc3QgeyB2ZXI6IHN0ZXAsIGVudGVyIH0gPSBnZXRLZXlOYXZpZ2F0aW9uKGV2ZW50KVxuICAgICAgaWYgKHN0ZXAgfHwgZW50ZXIpIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKVxuXG4gICAgICAgIGNvbnN0IHBvc2l0aW9uID0gZ2V0U2VsZWN0aW9uKHRoaXMuaW5wdXQpPy5zdGFydFxuICAgICAgICBjb25zdCBnZXREYXRlUGFydCA9IHBvc2l0aW9uID0+XG4gICAgICAgICAgZ2V0RGF0ZVBhcnRBdFBvc2l0aW9uKHRoaXMuY3VycmVudFRleHQsIHBvc2l0aW9uLCB0aGlzLmZvcm1hdE9wdGlvbnMpXG5cbiAgICAgICAgaWYgKHN0ZXAgJiYgIXRoaXMuc2hvd1BvcHVwKSB7XG4gICAgICAgICAgdGhpcy5zaG93UG9wdXAgPSB0cnVlXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3QgeyBjYWxlbmRhciB9ID0gdGhpcy4kcmVmc1xuICAgICAgICAgIGlmIChjYWxlbmRhcikge1xuICAgICAgICAgICAgY29uc3QgeyBuYW1lOiBtb2RlLCBzdGFydCB9ID0gZ2V0RGF0ZVBhcnQocG9zaXRpb24pIHx8IHt9XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIG1vZGUgJiZcbiAgICAgICAgICAgICAgY2FsZW5kYXIubmF2aWdhdGUoeyBzdGVwLCBlbnRlciwgbW9kZSwgdXBkYXRlOiB0cnVlIH0pXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgdGhpcy4kbmV4dFRpY2soKCkgPT4gc2V0U2VsZWN0aW9uKHRoaXMuaW5wdXQsIGdldERhdGVQYXJ0KHN0YXJ0KSkpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIG9uTW91c2VEb3duKHRvZ2dsZSkge1xuICAgICAgdGhpcy5zaG93UG9wdXAgPSAhdGhpcy5kaXNhYmxlZCAmJiAoIXRvZ2dsZSB8fCAhdGhpcy5zaG93UG9wdXApXG4gICAgICBpZiAodGhpcy5zaG93UG9wdXApIHtcbiAgICAgICAgdGhpcy5mb2N1cygpXG4gICAgICB9XG4gICAgfSxcblxuICAgIGZvY3VzKCkge1xuICAgICAgdGhpcy5pbnB1dC5mb2N1cygpXG4gICAgfSxcblxuICAgIGJsdXIoKSB7XG4gICAgICB0aGlzLmlucHV0LmJsdXIoKVxuICAgIH1cbiAgfVxufVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLmRpdG8tZGF0ZS1waWNrZXIge1xuICAuZGl0by1pbnB1dCB7XG4gICAgZm9udC12YXJpYW50LW51bWVyaWM6IHRhYnVsYXItbnVtcztcbiAgICB3aWR0aDogMTAwJTtcbiAgICBtaW4td2lkdGg6IDhlbTtcbiAgfVxufVxuXG4uZGl0by1kYXRlLXBpY2tlci1wb3B1cCB7XG4gIG1hcmdpbjogJHBvcHVwLW1hcmdpbjtcbn1cbjwvc3R5bGU+XG4iLCI8IS0tIERlcml2ZWQgZnJvbSBBVFVJLCBhbmQgZnVydGhlciBleHRlbmRlZDogaHR0cHM6Ly9hbGlxaW4uZ2l0aHViLmlvL2F0dWkvIC0tPlxuPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cblRyaWdnZXIuZGl0by10aW1lLXBpY2tlcihcbiAgcmVmPVwidHJpZ2dlclwiXG4gIHYtbW9kZWw6c2hvdz1cInNob3dQb3B1cFwiXG4gIHRyaWdnZXI9XCJmb2N1c1wiXG4gIHYtYmluZD1cInsgdHJhbnNpdGlvbiwgcGxhY2VtZW50LCBkaXNhYmxlZCwgdGFyZ2V0IH1cIlxuKVxuICB0ZW1wbGF0ZSgjdHJpZ2dlcilcbiAgICBzbG90KFxuICAgICAgdi1pZj1cIiRzbG90cy50cmlnZ2VyXCJcbiAgICAgIG5hbWU9XCJ0cmlnZ2VyXCJcbiAgICApXG4gICAgSW5wdXRGaWVsZC5kaXRvLXRpbWUtcGlja2VyLWlucHV0KFxuICAgICAgdi1lbHNlXG4gICAgICByZWY9XCJpbnB1dFwiXG4gICAgICB2LW1vZGVsPVwiY3VycmVudFRleHRcIlxuICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgOmNsYXNzPVwieyAnZGl0by1mb2N1cyc6IGZvY3VzZWQgfVwiXG4gICAgICB2LWJpbmQ9XCJ7IHBsYWNlaG9sZGVyLCBkaXNhYmxlZCwgLi4uJGF0dHJzIH1cIlxuICAgICAgQGZvY3VzPVwib25Gb2N1cyh0cnVlKVwiXG4gICAgICBAYmx1cj1cIm9uRm9jdXMoZmFsc2UpXCJcbiAgICAgIEBrZXlkb3duPVwib25LZXlEb3duXCJcbiAgICAgIEBtb3VzZWRvd24uc3RvcD1cIm9uTW91c2VEb3duKGZhbHNlKVwiXG4gICAgKVxuICAgICAgdGVtcGxhdGUoI2JlZm9yZSlcbiAgICAgICAgc2xvdChuYW1lPVwiYmVmb3JlXCIpXG4gICAgICB0ZW1wbGF0ZSgjYWZ0ZXIpXG4gICAgICAgIEljb24oXG4gICAgICAgICAgbmFtZT1cImNsb2NrXCJcbiAgICAgICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgICAgICAgQG1vdXNlZG93bi5wcmV2ZW50PVwib25Nb3VzZURvd24odHJ1ZSlcIlxuICAgICAgICApXG4gICAgICAgIHNsb3QobmFtZT1cImFmdGVyXCIpXG4gIHRlbXBsYXRlKCNwb3B1cClcbiAgICAuZGl0by10aW1lLXBpY2tlci1wb3B1cFxuICAgICAgLmRpdG8tdGltZS1waWNrZXItcGFuZWxcbiAgICAgICAgdWwuZGl0by10aW1lLXBpY2tlci1ob3VyKHJlZj1cImhvdXJcIilcbiAgICAgICAgICB0ZW1wbGF0ZShcbiAgICAgICAgICAgIHYtZm9yPVwiaW5kZXggaW4gMjRcIlxuICAgICAgICAgIClcbiAgICAgICAgICAgIGxpKFxuICAgICAgICAgICAgICB2LWlmPVwiIWRpc2FibGVkSG91cihpbmRleCAtIDEpXCJcbiAgICAgICAgICAgICAgOmNsYXNzPVwieyBzZWxlY3RlZDogaG91ciA9PT0gaW5kZXggLSAxIH1cIlxuICAgICAgICAgICAgICBAY2xpY2s9XCJob3VyID0gaW5kZXggLSAxXCJcbiAgICAgICAgICAgICkge3sgbGVmdFBhZChpbmRleCAtIDEpIH19XG4gICAgICAuZGl0by10aW1lLXBpY2tlci1wYW5lbFxuICAgICAgICB1bC5kaXRvLXRpbWUtcGlja2VyLW1pbnV0ZShyZWY9XCJtaW51dGVcIilcbiAgICAgICAgICB0ZW1wbGF0ZShcbiAgICAgICAgICAgIHYtZm9yPVwiaW5kZXggaW4gNjBcIlxuICAgICAgICAgIClcbiAgICAgICAgICAgIGxpKFxuICAgICAgICAgICAgICB2LWlmPVwiIWRpc2FibGVkTWludXRlKGluZGV4IC0gMSlcIlxuICAgICAgICAgICAgICA6Y2xhc3M9XCJ7IHNlbGVjdGVkOiBtaW51dGUgPT09IGluZGV4IC0gMSB9XCJcbiAgICAgICAgICAgICAgQGNsaWNrPVwibWludXRlID0gaW5kZXggLSAxXCJcbiAgICAgICAgICAgICkge3sgbGVmdFBhZChpbmRleCAtIDEpIH19XG4gICAgICAuZGl0by10aW1lLXBpY2tlci1wYW5lbFxuICAgICAgICB1bC5kaXRvLXRpbWUtcGlja2VyLXNlY29uZChyZWY9XCJzZWNvbmRcIilcbiAgICAgICAgICB0ZW1wbGF0ZShcbiAgICAgICAgICAgIHYtZm9yPVwiaW5kZXggaW4gNjBcIlxuICAgICAgICAgIClcbiAgICAgICAgICAgIGxpKFxuICAgICAgICAgICAgICB2LWlmPVwiIWRpc2FibGVkU2Vjb25kKGluZGV4IC0gMSlcIlxuICAgICAgICAgICAgICA6Y2xhc3M9XCJ7IHNlbGVjdGVkOiBzZWNvbmQgPT09IGluZGV4IC0gMSB9XCJcbiAgICAgICAgICAgICAgQGNsaWNrPVwic2Vjb25kID0gaW5kZXggLSAxXCJcbiAgICAgICAgICAgICkge3sgbGVmdFBhZChpbmRleCAtIDEpIH19XG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IHsgZm9ybWF0LCBkZWZhdWx0Rm9ybWF0cyB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQgVHJpZ2dlciBmcm9tICcuL1RyaWdnZXIudnVlJ1xuaW1wb3J0IElucHV0RmllbGQgZnJvbSAnLi9JbnB1dEZpZWxkLnZ1ZSdcbmltcG9ydCBJY29uIGZyb20gJy4vSWNvbi52dWUnXG5pbXBvcnQgeyBhbHRlckRhdGUsIHBhcnNlRGF0ZSwgZ2V0RGF0ZVBhcnRBdFBvc2l0aW9uIH0gZnJvbSAnLi4vdXRpbHMvZGF0ZS5qcydcbmltcG9ydCB7IGdldFNlbGVjdGlvbiwgc2V0U2VsZWN0aW9uIH0gZnJvbSAnLi4vdXRpbHMvc2VsZWN0aW9uLmpzJ1xuaW1wb3J0IHsgZ2V0S2V5TmF2aWdhdGlvbiB9IGZyb20gJy4uL3V0aWxzL2V2ZW50LmpzJ1xuaW1wb3J0IHsgZ2V0VGFyZ2V0IH0gZnJvbSAnLi4vdXRpbHMvdHJpZ2dlci5qcydcblxuZXhwb3J0IGRlZmF1bHQge1xuICBjb21wb25lbnRzOiB7IFRyaWdnZXIsIElucHV0RmllbGQsIEljb24gfSxcbiAgZW1pdHM6IFsndXBkYXRlOm1vZGVsVmFsdWUnLCAndXBkYXRlOnNob3cnLCAnY2hhbmdlJywgJ2ZvY3VzJywgJ2JsdXInXSxcbiAgaW5oZXJpdEF0dHJzOiBmYWxzZSxcblxuICBwcm9wczoge1xuICAgIG1vZGVsVmFsdWU6IHsgdHlwZTogRGF0ZSwgZGVmYXVsdDogbnVsbCB9LFxuICAgIHRyYW5zaXRpb246IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiAnc2xpZGUnIH0sXG4gICAgcGxhY2VtZW50OiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogJ2JvdHRvbS1sZWZ0JyB9LFxuICAgIHBsYWNlaG9sZGVyOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogbnVsbCB9LFxuICAgIHNob3c6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBkaXNhYmxlZDogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIHRhcmdldDogeyB0eXBlOiBbU3RyaW5nLCBIVE1MRWxlbWVudF0sIGRlZmF1bHQ6ICd0cmlnZ2VyJyB9LFxuICAgIGxvY2FsZTogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6ICdlbi1VUycgfSxcbiAgICBmb3JtYXQ6IHtcbiAgICAgIHR5cGU6IE9iamVjdCxcbiAgICAgIGRlZmF1bHQ6ICgpID0+ICh7XG4gICAgICAgIHRpbWU6IGRlZmF1bHRGb3JtYXRzLnRpbWUsXG4gICAgICAgIGRhdGU6IGZhbHNlXG4gICAgICB9KVxuICAgIH0sXG4gICAgZGlzYWJsZWRIb3VyOiB7IHR5cGU6IEZ1bmN0aW9uLCBkZWZhdWx0OiAoKSA9PiBmYWxzZSB9LFxuICAgIGRpc2FibGVkTWludXRlOiB7IHR5cGU6IEZ1bmN0aW9uLCBkZWZhdWx0OiAoKSA9PiBmYWxzZSB9LFxuICAgIGRpc2FibGVkU2Vjb25kOiB7IHR5cGU6IEZ1bmN0aW9uLCBkZWZhdWx0OiAoKSA9PiBmYWxzZSB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgY3VycmVudFZhbHVlOiB0aGlzLm1vZGVsVmFsdWUsXG4gICAgICBzaG93UG9wdXA6IHRoaXMuc2hvdyxcbiAgICAgIGlucHV0Rm9jdXNlZDogZmFsc2UsXG4gICAgICBpZ25vcmVOZXh0Q2hhbmdlOiBmYWxzZVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIGZvY3VzZWQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5pbnB1dEZvY3VzZWQgfHwgdGhpcy5zaG93UG9wdXBcbiAgICB9LFxuXG4gICAgaW5wdXQoKSB7XG4gICAgICByZXR1cm4gZ2V0VGFyZ2V0KHRoaXMpPy5xdWVyeVNlbGVjdG9yKCdpbnB1dCcpXG4gICAgfSxcblxuICAgIGZvcm1hdE9wdGlvbnMoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBsb2NhbGU6IHRoaXMubG9jYWxlLFxuICAgICAgICAuLi50aGlzLmZvcm1hdFxuICAgICAgfVxuICAgIH0sXG5cbiAgICBjdXJyZW50VGV4dDoge1xuICAgICAgZ2V0KCkge1xuICAgICAgICByZXR1cm4gZm9ybWF0KHRoaXMuY3VycmVudFZhbHVlLCB0aGlzLmZvcm1hdE9wdGlvbnMpIHx8ICcnXG4gICAgICB9LFxuXG4gICAgICBzZXQodmFsdWUpIHtcbiAgICAgICAgY29uc3QgZGF0ZSA9IHBhcnNlRGF0ZSh2YWx1ZSwgdGhpcy5mb3JtYXRPcHRpb25zKVxuICAgICAgICBpZiAoZGF0ZSkge1xuICAgICAgICAgIHRoaXMuY3VycmVudFZhbHVlID0gZGF0ZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIGN1cnJlbnREYXRlKCkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgdGhpcy5jdXJyZW50VmFsdWUgfHxcbiAgICAgICAgLy8gQ3JlYXRlIGEgbmV3IERhdGUoKSBvYmplY3Qgd2l0aCB0aGUgdGltZSBzZXQgdG8gMCwgdG8gYmUgdXNlZCB3aGVuXG4gICAgICAgIC8vIGZpcnN0IHNldHRpbmcgYW55IG9mIHRoZSB0aW1lcywgZm9yIG1lYW5pbmdmdWwgZGF0ZXMgaW4gY2FzZSB0aGVcbiAgICAgICAgLy8gb2JqZWN0IGlzIHNoYXJlZCB3aXRoIGEgRGF0ZVBpY2tlciwgZS5nLiB0aHJvdWdoIERhdGVUaW1lUGlja2VyLlxuICAgICAgICBhbHRlckRhdGUobmV3IERhdGUoKSwgeyBob3VyOiAwLCBtaW51dGU6IDAsIHNlY29uZDogMCwgbWlsbGlzZWNvbmQ6IDAgfSlcbiAgICAgIClcbiAgICB9LFxuXG4gICAgaG91cjoge1xuICAgICAgZ2V0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jdXJyZW50RGF0ZS5nZXRIb3VycygpXG4gICAgICB9LFxuXG4gICAgICBzZXQoaG91cikge1xuICAgICAgICB0aGlzLnNldFRpbWUoeyBob3VyIH0pXG4gICAgICB9XG4gICAgfSxcblxuICAgIG1pbnV0ZToge1xuICAgICAgZ2V0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jdXJyZW50RGF0ZS5nZXRNaW51dGVzKClcbiAgICAgIH0sXG5cbiAgICAgIHNldChtaW51dGUpIHtcbiAgICAgICAgdGhpcy5zZXRUaW1lKHsgbWludXRlIH0pXG4gICAgICB9XG4gICAgfSxcblxuICAgIHNlY29uZDoge1xuICAgICAgZ2V0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jdXJyZW50RGF0ZS5nZXRTZWNvbmRzKClcbiAgICAgIH0sXG5cbiAgICAgIHNldChzZWNvbmQpIHtcbiAgICAgICAgdGhpcy5zZXRUaW1lKHsgc2Vjb25kIH0pXG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIHdhdGNoOiB7XG4gICAgbW9kZWxWYWx1ZSh0bywgZnJvbSkge1xuICAgICAgaWYgKCt0byAhPT0gK2Zyb20pIHtcbiAgICAgICAgdGhpcy5jdXJyZW50VmFsdWUgPSB0b1xuICAgICAgICB0aGlzLnNjcm9sbEFsbCh0cnVlKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBjdXJyZW50VmFsdWUodmFsdWUpIHtcbiAgICAgIGlmICgrdmFsdWUgIT09ICt0aGlzLm1vZGVsVmFsdWUpIHtcbiAgICAgICAgdGhpcy4kZW1pdCgndXBkYXRlOm1vZGVsVmFsdWUnLCB2YWx1ZSlcbiAgICAgICAgdGhpcy4kZW1pdCgnY2hhbmdlJywgdmFsdWUpXG4gICAgICAgIHRoaXMuc2Nyb2xsQWxsKHRydWUpXG4gICAgICB9XG4gICAgfSxcblxuICAgIGN1cnJlbnRUZXh0KCkge1xuICAgICAgY29uc3QgeyBpbnB1dCB9ID0gdGhpc1xuICAgICAgY29uc3Qgc2VsZWN0aW9uID0gZ2V0U2VsZWN0aW9uKGlucHV0KVxuICAgICAgaWYgKFxuICAgICAgICB0aGlzLmZvY3VzZWQgJiZcbiAgICAgICAgIXRoaXMuaWdub3JlTmV4dENoYW5nZSAmJlxuICAgICAgICBzZWxlY3Rpb24uc3RhcnQgPT09IHNlbGVjdGlvbi5lbmRcbiAgICAgICkge1xuICAgICAgICB0aGlzLiRuZXh0VGljaygoKSA9PiBzZXRTZWxlY3Rpb24oaW5wdXQsIHNlbGVjdGlvbikpXG4gICAgICB9XG4gICAgICB0aGlzLmlnbm9yZU5leHRDaGFuZ2UgPSBmYWxzZVxuICAgIH0sXG5cbiAgICBzaG93KHNob3cpIHtcbiAgICAgIHRoaXMuc2hvd1BvcHVwID0gc2hvd1xuICAgIH0sXG5cbiAgICBzaG93UG9wdXAodG8sIGZyb20pIHtcbiAgICAgIGlmICh0bykge1xuICAgICAgICB0aGlzLnNjcm9sbEFsbChmYWxzZSlcbiAgICAgIH1cbiAgICAgIGlmICh0byBeIGZyb20pIHtcbiAgICAgICAgdGhpcy4kZW1pdCgndXBkYXRlOnNob3cnLCB0bylcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZm9jdXNlZCh0bywgZnJvbSkge1xuICAgICAgaWYgKHRvIF4gZnJvbSkge1xuICAgICAgICB0aGlzLiRlbWl0KHRvID8gJ2ZvY3VzJyA6ICdibHVyJylcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGxlZnRQYWQodmFsdWUpIHtcbiAgICAgIHJldHVybiAoJzAnICsgdmFsdWUpLnNsaWNlKC0yKVxuICAgIH0sXG5cbiAgICBzZXRUaW1lKG92ZXJyaWRlcykge1xuICAgICAgdGhpcy5jdXJyZW50VmFsdWUgPSBhbHRlckRhdGUodGhpcy5jdXJyZW50RGF0ZSwge1xuICAgICAgICAuLi5vdmVycmlkZXMsXG4gICAgICAgIG1pbGxpc2Vjb25kOiAwXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBzY3JvbGxBbGwoc21vb3RoKSB7XG4gICAgICBjb25zdCBzY3JvbGwgPSAocmVmLCB2YWx1ZSkgPT4ge1xuICAgICAgICBjb25zdCB0YXJnZXQgPSB0aGlzLiRyZWZzW3JlZl1cbiAgICAgICAgaWYgKHRhcmdldCkge1xuICAgICAgICAgIGNvbnN0IGxpbmVIZWlnaHQgPSAoXG4gICAgICAgICAgICB0YXJnZXQuc2Nyb2xsSGVpZ2h0IC9cbiAgICAgICAgICAgIC8vIEZpcnN0IGFuZCBsYXN0IG9uZSBhZGQgMyB0aW1lcyB0aGUgbWFyZ2luLlxuICAgICAgICAgICAgKHRhcmdldC5jaGlsZEVsZW1lbnRDb3VudCArIDYpXG4gICAgICAgICAgKVxuICAgICAgICAgIGNvbnN0IHRvcCA9IE1hdGgucm91bmQodmFsdWUgKiBsaW5lSGVpZ2h0KVxuICAgICAgICAgIGNvbnN0IGRpc3RhbmNlID0gTWF0aC5hYnModGFyZ2V0LnNjcm9sbFRvcCAtIHRvcClcbiAgICAgICAgICB0YXJnZXQuc2Nyb2xsVG8oe1xuICAgICAgICAgICAgdG9wLFxuICAgICAgICAgICAgYmVoYXZpb3I6IHNtb290aCAmJiBkaXN0YW5jZSA8IDEwMCA/ICdzbW9vdGgnIDogJ2F1dG8nXG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdGhpcy4kbmV4dFRpY2soKCkgPT4ge1xuICAgICAgICBzY3JvbGwoJ2hvdXInLCB0aGlzLmhvdXIpXG4gICAgICAgIHNjcm9sbCgnbWludXRlJywgdGhpcy5taW51dGUpXG4gICAgICAgIHNjcm9sbCgnc2Vjb25kJywgdGhpcy5zZWNvbmQpXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBvbkZvY3VzKGZvY3VzKSB7XG4gICAgICB0aGlzLmlucHV0Rm9jdXNlZCA9IGZvY3VzXG4gICAgICB0aGlzLnNob3dQb3B1cCA9IGZvY3VzXG4gICAgfSxcblxuICAgIG9uS2V5RG93bihldmVudCkge1xuICAgICAgY29uc3QgeyBpbnB1dCB9ID0gdGhpc1xuICAgICAgY29uc3Qgc2VsZWN0aW9uID0gZ2V0U2VsZWN0aW9uKGlucHV0KVxuICAgICAgY29uc3QgeyB2ZXI6IHN0ZXAsIGVudGVyIH0gPSBnZXRLZXlOYXZpZ2F0aW9uKGV2ZW50KVxuICAgICAgaWYgKHN0ZXAgfHwgZW50ZXIpIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKVxuXG4gICAgICAgIGNvbnN0IGdldERhdGVQYXJ0ID0gcG9zaXRpb24gPT5cbiAgICAgICAgICBnZXREYXRlUGFydEF0UG9zaXRpb24odGhpcy5jdXJyZW50VGV4dCwgcG9zaXRpb24sIHRoaXMuZm9ybWF0T3B0aW9ucylcblxuICAgICAgICBpZiAoc3RlcCkge1xuICAgICAgICAgIGlmICghdGhpcy5zaG93UG9wdXApIHtcbiAgICAgICAgICAgIHRoaXMuc2hvd1BvcHVwID0gdHJ1ZVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCB7IG5hbWUsIHN0YXJ0IH0gPSBnZXREYXRlUGFydChzZWxlY3Rpb24uc3RhcnQpIHx8IHt9XG4gICAgICAgICAgICBpZiAobmFtZSkge1xuICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXNbbmFtZV0gKyBzdGVwXG4gICAgICAgICAgICAgIGNvbnN0IGNvdW50ID0gdGhpcy4kcmVmc1tuYW1lXS5jaGlsZEVsZW1lbnRDb3VudFxuICAgICAgICAgICAgICB0aGlzW25hbWVdID1cbiAgICAgICAgICAgICAgICB2YWx1ZSA8IDBcbiAgICAgICAgICAgICAgICAgID8gdmFsdWUgKyBjb3VudFxuICAgICAgICAgICAgICAgICAgOiB2YWx1ZSA+PSBjb3VudFxuICAgICAgICAgICAgICAgICAgICA/IHZhbHVlIC0gY291bnRcbiAgICAgICAgICAgICAgICAgICAgOiB2YWx1ZVxuICAgICAgICAgICAgICB0aGlzLmlnbm9yZU5leHRDaGFuZ2UgPSB0cnVlXG4gICAgICAgICAgICAgIHRoaXMuJG5leHRUaWNrKCgpID0+IHNldFNlbGVjdGlvbihpbnB1dCwgZ2V0RGF0ZVBhcnQoc3RhcnQpKSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoZW50ZXIpIHtcbiAgICAgICAgICB0aGlzLnNob3dQb3B1cCA9IGZhbHNlXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoc2VsZWN0aW9uLnN0YXJ0ID09PSBzZWxlY3Rpb24uZW5kKSB7XG4gICAgICAgIGNvbnN0IHsgdmFsdWUgfSA9IGlucHV0XG4gICAgICAgIGxldCBwb3MgPSBzZWxlY3Rpb24uc3RhcnRcblxuICAgICAgICBjb25zdCBpc0RpZ2l0ID0gY2hhciA9PiAhaXNOYU4ocGFyc2VJbnQoY2hhciwgMTApKVxuXG4gICAgICAgIGlmIChldmVudC5rZXkubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgaWYgKGlzRGlnaXQoZXZlbnQua2V5KSAmJiBwb3MgPCB2YWx1ZS5sZW5ndGgpIHtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgdmFsdWVbcG9zXSA9PT0gJzonICYmXG4gICAgICAgICAgICAgIGlzRGlnaXQodmFsdWVbcG9zIC0gMV0pICYmXG4gICAgICAgICAgICAgIGlzRGlnaXQodmFsdWVbcG9zIC0gMl0pXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgcG9zKytcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIFJlbW92ZSBuZXh0IGRpZ2l0IHNvIHRoZSBldmVudCBvdmVycmlkZXMgaXQgaW5zdGVhZCBvZiBpbnNlcnRpbmdcbiAgICAgICAgICAgIC8vIG5ldyBjaGFycy5cbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgaXNEaWdpdCh2YWx1ZVtwb3NdKSAmJiAoXG4gICAgICAgICAgICAgICAgaXNEaWdpdCh2YWx1ZVtwb3MgKyAxXSkgfHxcbiAgICAgICAgICAgICAgICBpc0RpZ2l0KHZhbHVlW3BvcyAtIDFdKVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgaW5wdXQudmFsdWUgPSAoXG4gICAgICAgICAgICAgICAgdmFsdWUuc2xpY2UoMCwgcG9zKSArXG4gICAgICAgICAgICAgICAgdmFsdWUuc2xpY2UocG9zICsgMSlcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBzZXRTZWxlY3Rpb24oaW5wdXQsIHsgc3RhcnQ6IHBvcywgZW5kOiBwb3MgfSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgbGVuZ3RoID0gZm9ybWF0KHRoaXMuY3VycmVudFZhbHVlLCB0aGlzLmZvcm1hdE9wdGlvbnMpLmxlbmd0aFxuICAgICAgICAgICAgaWYgKHZhbHVlLmxlbmd0aCA9PT0gbGVuZ3RoKSB7XG4gICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KClcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodmFsdWUubGVuZ3RoID4gbGVuZ3RoKSB7XG4gICAgICAgICAgICAgIGlucHV0LnZhbHVlID0gdmFsdWUuc2xpY2UoMCwgbGVuZ3RoKVxuICAgICAgICAgICAgICBzZXRTZWxlY3Rpb24oaW5wdXQsIHNlbGVjdGlvbilcbiAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChldmVudC5rZXkgPT09ICdCYWNrc3BhY2UnKSB7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgcG9zID09PSAxIHx8XG4gICAgICAgICAgICBbJyAnLCAnOiddLmluY2x1ZGVzKHZhbHVlW3BvcyAtIDJdKVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICBwb3MgPT09IHZhbHVlLmxlbmd0aCB8fFxuICAgICAgICAgICAgICB2YWx1ZVtwb3NdID09PSAnOidcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICBwb3MtLVxuICAgICAgICAgICAgICBpbnB1dC52YWx1ZSA9IChcbiAgICAgICAgICAgICAgICB2YWx1ZS5zbGljZSgwLCBwb3MpICtcbiAgICAgICAgICAgICAgICAoKHZhbHVlW3BvcyAtIDFdID8/ICcnKSArICcwMCcpICtcbiAgICAgICAgICAgICAgICB2YWx1ZS5zbGljZShwb3MgKyAxKVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIHNldFNlbGVjdGlvbihpbnB1dCwgeyBzdGFydDogcG9zLCBlbmQ6IHBvcyB9KVxuICAgICAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgICAgaXNEaWdpdCh2YWx1ZVtwb3NdKSAmJlxuICAgICAgICAgICAgICAhaXNEaWdpdCgrdmFsdWVbcG9zICsgMV0pXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgLy8gV2hlbiByZW1vdmluZyB0aGUgZmlyc3Qgb2YgdHdvIGRpZ2l0cywgcmVwbGFjZSB3aXRoIDBcbiAgICAgICAgICAgICAgaW5wdXQudmFsdWUgPSB2YWx1ZS5zbGljZSgwLCBwb3MpICsgJzAnICsgdmFsdWUuc2xpY2UocG9zKVxuICAgICAgICAgICAgICBzZXRTZWxlY3Rpb24oaW5wdXQsIHsgc3RhcnQ6IHBvcywgZW5kOiBwb3MgfSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgb25Nb3VzZURvd24odG9nZ2xlKSB7XG4gICAgICB0aGlzLnNob3dQb3B1cCA9ICF0aGlzLmRpc2FibGVkICYmICghdG9nZ2xlIHx8ICF0aGlzLnNob3dQb3B1cClcbiAgICAgIGlmICh0aGlzLnNob3dQb3B1cCkge1xuICAgICAgICB0aGlzLmZvY3VzKClcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZm9jdXMoKSB7XG4gICAgICB0aGlzLmlucHV0LmZvY3VzKClcbiAgICB9LFxuXG4gICAgYmx1cigpIHtcbiAgICAgIHRoaXMuaW5wdXQuYmx1cigpXG4gICAgfVxuICB9XG59XG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by10aW1lLXBpY2tlciB7XG4gIC5kaXRvLWlucHV0IHtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBtaW4td2lkdGg6IDZlbTtcbiAgfVxufVxuXG4uZGl0by10aW1lLXBpY2tlci1wb3B1cCB7XG4gIG1heC13aWR0aDogMTYwcHg7XG4gIG1hcmdpbjogJHBvcHVwLW1hcmdpbjtcbn1cblxuJHRpbWUtcGlja2VyLWxpbmUtaGVpZ2h0OiAyNHB4O1xuXG4uZGl0by10aW1lLXBpY2tlciB7XG4gIC5kaXRvLWlucHV0IHtcbiAgICBmb250LXZhcmlhbnQtbnVtZXJpYzogdGFidWxhci1udW1zO1xuICAgIHdpZHRoOiAxMDAlO1xuICB9XG59XG5cbi5kaXRvLXRpbWUtcGlja2VyLXBvcHVwIHtcbiAgbGlzdC1zdHlsZTogbm9uZTtcbiAgYmFja2dyb3VuZDogJGNvbG9yLXdoaXRlO1xuICBib3JkZXI6ICRib3JkZXItc3R5bGU7XG4gIGJvcmRlci1yYWRpdXM6ICRib3JkZXItcmFkaXVzO1xuICBib3gtc2hhZG93OiAkc2hhZG93LXdpbmRvdztcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cblxuLmRpdG8tdGltZS1waWNrZXItcG9wdXAgLmRpdG8tdGltZS1waWNrZXItcGFuZWwge1xuICBmbG9hdDogbGVmdDtcbiAgYm9yZGVyOiAkYm9yZGVyLXN0eWxlO1xuICBib3JkZXItd2lkdGg6IDAgMXB4IDA7XG4gIG1hcmdpbi1sZWZ0OiAtMXB4O1xuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICB3aWR0aDogY2FsYygxMDAlIC8gMyArIDFweCk7XG4gIG92ZXJmbG93OiBoaWRkZW47XG5cbiAgJjpsYXN0LWNoaWxkIHtcbiAgICBib3JkZXItcmlnaHQ6IDA7XG4gIH1cblxuICB1bCB7XG4gICAgb3ZlcmZsb3cteDogaGlkZGVuO1xuICAgIG92ZXJmbG93LXk6IGF1dG87XG4gICAgbGlzdC1zdHlsZTogbm9uZTtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBtYXJnaW46IDA7XG4gICAgLy8gSGlkZSBzY3JvbGxiYXI6XG4gICAgYm94LXNpemluZzogY29udGVudC1ib3g7XG4gICAgcGFkZGluZzogMCAxN3B4IDAgMDtcbiAgICBoZWlnaHQ6IDcgKiAkdGltZS1waWNrZXItbGluZS1oZWlnaHQ7XG5cbiAgICAmID4gbGkge1xuICAgICAgYm94LXNpemluZzogY29udGVudC1ib3g7XG4gICAgICBiYWNrZ3JvdW5kOiAkY29sb3Itd2hpdGU7XG4gICAgICB3aWR0aDogMTAwJTtcbiAgICAgIGhlaWdodDogJHRpbWUtcGlja2VyLWxpbmUtaGVpZ2h0O1xuICAgICAgbGluZS1oZWlnaHQ6ICR0aW1lLXBpY2tlci1saW5lLWhlaWdodDtcbiAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICAgIGZvbnQtdmFyaWFudC1udW1lcmljOiB0YWJ1bGFyLW51bXM7XG4gICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgIEBpbmNsdWRlIHVzZXItc2VsZWN0KG5vbmUpO1xuXG4gICAgICAmOmZpcnN0LWNoaWxkIHtcbiAgICAgICAgbWFyZ2luLXRvcDogMyAqICR0aW1lLXBpY2tlci1saW5lLWhlaWdodDtcbiAgICAgIH1cblxuICAgICAgJjpsYXN0LWNoaWxkIHtcbiAgICAgICAgbWFyZ2luLWJvdHRvbTogMyAqICR0aW1lLXBpY2tlci1saW5lLWhlaWdodDtcbiAgICAgIH1cblxuICAgICAgJjpob3ZlciB7XG4gICAgICAgIGJhY2tncm91bmQ6ICRjb2xvci1oaWdobGlnaHQ7XG4gICAgICB9XG5cbiAgICAgICYuc2VsZWN0ZWQsXG4gICAgICAmLnNlbGVjdGVkOmhvdmVyIHtcbiAgICAgICAgY29sb3I6ICRjb2xvci10ZXh0LWludmVydGVkO1xuICAgICAgICBiYWNrZ3JvdW5kOiAkY29sb3ItYWN0aXZlO1xuICAgICAgfVxuXG4gICAgICAmLmRpc2FibGVkIHtcbiAgICAgICAgY3Vyc29yOiBkZWZhdWx0O1xuICAgICAgICBjb2xvcjogJGNvbG9yLWRpc2FibGVkO1xuICAgICAgfVxuXG4gICAgICAmLmRpc2FibGVkOmhvdmVyIHtcbiAgICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbi5kaXRvLWRhdGUtdGltZS1waWNrZXIocmVmPVwicGlja2VyXCIpXG4gIC5kaXRvLWRhdGUtdGltZS1waWNrZXJfX2lubmVyKDpjbGFzcz1cInsgJ2RpdG8tZm9jdXMnOiBmb2N1c2VkIH1cIilcbiAgICBJbnB1dEZpZWxkLmRpdG8tZGF0ZS10aW1lLXBpY2tlcl9faW5wdXQoXG4gICAgICByZWY9XCJpbnB1dFwiXG4gICAgICB2LW1vZGVsPVwiY3VycmVudFRleHRcIlxuICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgOmNsYXNzPVwieyAnZGl0by1mb2N1cyc6IGZvY3VzZWQgfVwiXG4gICAgICB2LWJpbmQ9XCJ7IHBsYWNlaG9sZGVyLCBkaXNhYmxlZCwgLi4uJGF0dHJzIH1cIlxuICAgICAgQGZvY3VzPVwib25Gb2N1cyh0cnVlKVwiXG4gICAgICBAYmx1cj1cIm9uRm9jdXMoZmFsc2UpXCJcbiAgICAgIEBrZXlkb3duPVwib25LZXlEb3duXCJcbiAgICAgIEBtb3VzZWRvd24uc3RvcD1cIm9uTW91c2VEb3duKGZhbHNlKVwiXG4gICAgKVxuICAgICAgdGVtcGxhdGUoI2JlZm9yZSlcbiAgICAgICAgc2xvdChuYW1lPVwiYmVmb3JlXCIpXG4gICAgICB0ZW1wbGF0ZSgjYWZ0ZXIpXG4gICAgICAgIEljb24oXG4gICAgICAgICAgbmFtZT1cImNhbGVuZGFyXCJcbiAgICAgICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgICAgICAgQG1vdXNlZG93bi5wcmV2ZW50PVwib25Nb3VzZURvd24odHJ1ZSlcIlxuICAgICAgICApXG4gICAgICAgIHNsb3QobmFtZT1cImFmdGVyXCIpXG4gICAgRGF0ZVBpY2tlcihcbiAgICAgIHJlZj1cImRhdGVcIlxuICAgICAgdi1tb2RlbD1cImN1cnJlbnRWYWx1ZVwiXG4gICAgICB2LW1vZGVsOnNob3c9XCJzaG93RGF0ZVwiXG4gICAgICBwbGFjZW1lbnQ9XCJib3R0b20tbGVmdFwiXG4gICAgICA6dGFyZ2V0PVwiJHJlZnMucGlja2VyXCJcbiAgICAgIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICAgIClcbiAgICAgIHRlbXBsYXRlKCN0cmlnZ2VyKVxuICAgICAgICAvLy0gSW50ZW50aW9uYWxseSBlbXB0eVxuICAgIFRpbWVQaWNrZXIoXG4gICAgICByZWY9XCJ0aW1lXCJcbiAgICAgIHYtbW9kZWw9XCJjdXJyZW50VmFsdWVcIlxuICAgICAgdi1tb2RlbDpzaG93PVwic2hvd1RpbWVcIlxuICAgICAgcGxhY2VtZW50PVwiYm90dG9tLXJpZ2h0XCJcbiAgICAgIDp0YXJnZXQ9XCIkcmVmcy5waWNrZXJcIlxuICAgICAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gICAgKVxuICAgICAgdGVtcGxhdGUoI3RyaWdnZXIpXG4gICAgICAgIC8vLSBJbnRlbnRpb25hbGx5IGVtcHR5XG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IHsgZm9ybWF0LCBkZWZhdWx0Rm9ybWF0cywgYXNzaWduRGVlcGx5IH0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCBJbnB1dEZpZWxkIGZyb20gJy4vSW5wdXRGaWVsZC52dWUnXG5pbXBvcnQgRGF0ZVBpY2tlciBmcm9tICcuL0RhdGVQaWNrZXIudnVlJ1xuaW1wb3J0IFRpbWVQaWNrZXIgZnJvbSAnLi9UaW1lUGlja2VyLnZ1ZSdcbmltcG9ydCBJY29uIGZyb20gJy4vSWNvbi52dWUnXG5pbXBvcnQgeyBwYXJzZURhdGUgfSBmcm9tICcuLi91dGlscy9kYXRlLmpzJ1xuaW1wb3J0IHsgZ2V0U2VsZWN0aW9uLCBzZXRTZWxlY3Rpb24gfSBmcm9tICcuLi91dGlscy9zZWxlY3Rpb24uanMnXG5pbXBvcnQgeyBnZXRLZXlOYXZpZ2F0aW9uIH0gZnJvbSAnLi4vdXRpbHMvZXZlbnQuanMnXG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgY29tcG9uZW50czogeyBJbnB1dEZpZWxkLCBEYXRlUGlja2VyLCBUaW1lUGlja2VyLCBJY29uIH0sXG4gIGVtaXRzOiBbJ3VwZGF0ZTptb2RlbFZhbHVlJywgJ2NoYW5nZScsICdmb2N1cycsICdibHVyJ10sXG4gIGluaGVyaXRBdHRyczogZmFsc2UsXG5cbiAgcHJvcHM6IHtcbiAgICBtb2RlbFZhbHVlOiB7IHR5cGU6IERhdGUsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICB0cmFuc2l0aW9uOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogJ3NsaWRlJyB9LFxuICAgIHBsYWNlaG9sZGVyOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogbnVsbCB9LFxuICAgIGRpc2FibGVkOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgbG9jYWxlOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogJ2VuLVVTJyB9LFxuICAgIGZvcm1hdDogeyB0eXBlOiBPYmplY3QsIGRlZmF1bHQ6IG51bGwgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGN1cnJlbnRWYWx1ZTogdGhpcy5tb2RlbFZhbHVlLFxuICAgICAgc2hvd0RhdGU6IGZhbHNlLFxuICAgICAgc2hvd1RpbWU6IGZhbHNlLFxuICAgICAgaW5wdXRGb2N1c2VkOiBmYWxzZSxcbiAgICAgIGRhdGVGb2N1c2VkOiBmYWxzZSxcbiAgICAgIHRpbWVGb2N1c2VkOiBmYWxzZSxcbiAgICAgIGNsb3NlZE1vZGU6IG51bGxcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBhdHRyaWJ1dGVzKCkge1xuICAgICAgY29uc3QgeyB0cmFuc2l0aW9uLCBkaXNhYmxlZCwgbG9jYWxlLCBmb3JtYXRPcHRpb25zOiBmb3JtYXQgfSA9IHRoaXNcbiAgICAgIHJldHVybiB7IHRyYW5zaXRpb24sIGRpc2FibGVkLCBsb2NhbGUsIGZvcm1hdCB9XG4gICAgfSxcblxuICAgIGZvY3VzZWQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5pbnB1dEZvY3VzZWQgfHwgdGhpcy5zaG93RGF0ZSB8fCB0aGlzLnNob3dUaW1lXG4gICAgfSxcblxuICAgIGlucHV0KCkge1xuICAgICAgcmV0dXJuIHRoaXMuJHJlZnMuaW5wdXQuaW5wdXRcbiAgICB9LFxuXG4gICAgZm9ybWF0T3B0aW9ucygpIHtcbiAgICAgIHJldHVybiBhc3NpZ25EZWVwbHkoXG4gICAgICAgIHtcbiAgICAgICAgICBsb2NhbGU6IHRoaXMubG9jYWxlLFxuICAgICAgICAgIHRpbWU6IGRlZmF1bHRGb3JtYXRzLnRpbWUsXG4gICAgICAgICAgZGF0ZTogZGVmYXVsdEZvcm1hdHMuZGF0ZVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgZGF0ZToge1xuICAgICAgICAgICAgbW9udGg6ICdzaG9ydCcsXG4gICAgICAgICAgICBmb3JtYXQ6ICh2YWx1ZSwgdHlwZSwgb3B0aW9ucykgPT5cbiAgICAgICAgICAgICAgdHlwZSA9PT0gJ2xpdGVyYWwnICYmIC9cXGJhdFxcYi8udGVzdCh2YWx1ZSlcbiAgICAgICAgICAgICAgICA/ICcsICdcbiAgICAgICAgICAgICAgICA6IHRoaXMuZm9ybWF0Py5kYXRlPy5mb3JtYXQ/Lih2YWx1ZSwgdHlwZSwgb3B0aW9ucykgPz8gdmFsdWVcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHRoaXMuZm9ybWF0XG4gICAgICApXG4gICAgfSxcblxuICAgIHRpbWVJbmRleCgpIHtcbiAgICAgIGNvbnN0IHRleHQgPSB0aGlzLmN1cnJlbnRUZXh0XG4gICAgICBpZiAodGV4dCkge1xuICAgICAgICBjb25zdCB0aW1lID0gdGV4dC5tYXRjaCgvKFtcXFNdK1xccyopJC8pPy5bMV1cbiAgICAgICAgaWYgKHRpbWUpIHtcbiAgICAgICAgICByZXR1cm4gdGV4dC5sZW5ndGggLSB0aW1lLmxlbmd0aFxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbFxuICAgIH0sXG5cbiAgICBjdXJyZW50VGV4dDoge1xuICAgICAgZ2V0KCkge1xuICAgICAgICByZXR1cm4gZm9ybWF0KHRoaXMuY3VycmVudFZhbHVlLCB0aGlzLmZvcm1hdE9wdGlvbnMpIHx8ICcnXG4gICAgICB9LFxuXG4gICAgICBzZXQodmFsdWUpIHtcbiAgICAgICAgY29uc3QgZGF0ZSA9IHBhcnNlRGF0ZSh2YWx1ZSwgdGhpcy5mb3JtYXRPcHRpb25zKVxuICAgICAgICBpZiAoZGF0ZSkge1xuICAgICAgICAgIGNvbnN0IHNlbGVjdGlvbiA9IGdldFNlbGVjdGlvbih0aGlzLmlucHV0KVxuICAgICAgICAgIHRoaXMuY3VycmVudFZhbHVlID0gZGF0ZVxuICAgICAgICAgIHRoaXMuJG5leHRUaWNrKCgpID0+IHNldFNlbGVjdGlvbih0aGlzLmlucHV0LCBzZWxlY3Rpb24pKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIHdhdGNoOiB7XG4gICAgbW9kZWxWYWx1ZSh0bywgZnJvbSkge1xuICAgICAgaWYgKCt0byAhPT0gK2Zyb20pIHtcbiAgICAgICAgdGhpcy5jdXJyZW50VmFsdWUgPSB0b1xuICAgICAgfVxuICAgIH0sXG5cbiAgICBjdXJyZW50VmFsdWUodmFsdWUpIHtcbiAgICAgIGlmICgrdmFsdWUgIT09ICt0aGlzLm1vZGVsVmFsdWUpIHtcbiAgICAgICAgdGhpcy4kZW1pdCgndXBkYXRlOm1vZGVsVmFsdWUnLCB2YWx1ZSlcbiAgICAgICAgdGhpcy4kZW1pdCgnY2hhbmdlJywgdmFsdWUpXG4gICAgICB9XG4gICAgfSxcblxuICAgIGZvY3VzZWQodG8sIGZyb20pIHtcbiAgICAgIGlmICh0byBeIGZyb20pIHtcbiAgICAgICAgdGhpcy4kZW1pdCh0byA/ICdmb2N1cycgOiAnYmx1cicpXG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBvbkZvY3VzKGZvY3VzKSB7XG4gICAgICB0aGlzLmlucHV0Rm9jdXNlZCA9IGZvY3VzXG4gICAgICBpZiAoZm9jdXMpIHtcbiAgICAgICAgdGhpcy51cGRhdGVQb3B1cHMoKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5zaG93RGF0ZSA9IGZhbHNlXG4gICAgICAgIHRoaXMuc2hvd1RpbWUgPSBmYWxzZVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBvbk1vdXNlRG93bih0b2dnbGUpIHtcbiAgICAgIGlmICh0b2dnbGUgJiYgKHRoaXMuc2hvd0RhdGUgfHwgdGhpcy5zaG93VGltZSkpIHtcbiAgICAgICAgdGhpcy5zaG93RGF0ZSA9IGZhbHNlXG4gICAgICAgIHRoaXMuc2hvd1RpbWUgPSBmYWxzZVxuICAgICAgfSBlbHNlIGlmICghdGhpcy5kaXNhYmxlZCkge1xuICAgICAgICB0aGlzLmZvY3VzKClcbiAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHRoaXMudXBkYXRlUG9wdXBzKCkpXG4gICAgICB9XG4gICAgfSxcblxuICAgIG9uS2V5RG93bihldmVudCkge1xuICAgICAgY29uc3QgbW9kZSA9IHRoaXMuZ2V0TW9kZShldmVudClcbiAgICAgIHRoaXMuJHJlZnNbbW9kZV0ub25LZXlEb3duKGV2ZW50KVxuICAgICAgaWYgKGV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpIHtcbiAgICAgICAgdGhpcy5jbG9zZWRNb2RlID0gbW9kZVxuICAgICAgfSBlbHNlIGlmIChtb2RlICE9PSB0aGlzLmNsb3NlZE1vZGUpIHtcbiAgICAgICAgdGhpcy51cGRhdGVQb3B1cHMobW9kZSlcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZ2V0TW9kZShldmVudCA9IG51bGwpIHtcbiAgICAgIGNvbnN0IHsgc3RhcnQgfSA9IGdldFNlbGVjdGlvbih0aGlzLmlucHV0KVxuICAgICAgY29uc3QgeyBob3I6IHN0ZXAgfSA9IGdldEtleU5hdmlnYXRpb24oZXZlbnQpXG4gICAgICByZXR1cm4gdGhpcy50aW1lSW5kZXggPT09IG51bGwgfHwgc3RhcnQgKyBzdGVwIDwgdGhpcy50aW1lSW5kZXhcbiAgICAgICAgPyAnZGF0ZSdcbiAgICAgICAgOiAndGltZSdcbiAgICB9LFxuXG4gICAgdXBkYXRlUG9wdXBzKG1vZGUgPSB0aGlzLmdldE1vZGUoKSkge1xuICAgICAgaWYgKG1vZGUpIHtcbiAgICAgICAgdGhpcy5jbG9zZWRNb2RlID0gbnVsbFxuICAgICAgfVxuICAgICAgdGhpcy5zaG93RGF0ZSA9IG1vZGUgPT09ICdkYXRlJ1xuICAgICAgdGhpcy5zaG93VGltZSA9IG1vZGUgPT09ICd0aW1lJ1xuICAgIH0sXG5cbiAgICBmb2N1cygpIHtcbiAgICAgIHRoaXMuaW5wdXQuZm9jdXMoKVxuICAgIH0sXG5cbiAgICBibHVyKCkge1xuICAgICAgdGhpcy5pbnB1dC5ibHVyKClcbiAgICB9XG4gIH1cbn1cbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5cbi5kaXRvLWRhdGUtdGltZS1waWNrZXIge1xuICAmX19pbm5lciB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgfVxuXG4gICZfX2lucHV0IHtcbiAgICBmbGV4OiAxO1xuICAgIGZvbnQtdmFyaWFudC1udW1lcmljOiB0YWJ1bGFyLW51bXM7XG4gICAgbWluLXdpZHRoOiAxMmVtO1xuICB9XG5cbiAgLmRpdG8tZGF0ZS1waWNrZXIsXG4gIC5kaXRvLXRpbWUtcGlja2VyIHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCI8IS0tIGVzbGludC1kaXNhYmxlIHZ1ZS9uby10ZW1wbGF0ZS1zaGFkb3cgLS0+XG48dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuLmRpdG8tcGFnaW5hdGlvblxuICAuZGl0by1wYWdpbmF0aW9uLXRvdGFsKFxuICAgIHYtaWY9XCJzaG93VG90YWxcIlxuICApXG4gICAgdGVtcGxhdGUoXG4gICAgICB2LWlmPVwidG90YWwgPiAwXCJcbiAgICApIHt7IGZpcnN0IH19IOKAkyB7eyBsYXN0IH19IC8ge3sgdG90YWwgfX1cbiAgLmRpdG8tYnV0dG9ucy5kaXRvLWJ1dHRvbnMtcm91bmQoXG4gICAgdi1pZj1cIm51bVBhZ2VzID4gMVwiXG4gIClcbiAgICBidXR0b24uZGl0by1idXR0b24oXG4gICAgICB2LWZvcj1cImJ1dHRvbiBpbiBidXR0b25zXCJcbiAgICAgIDpjbGFzcz1cImdldEJ1dHRvbkNsYXNzZXMoYnV0dG9uKVwiXG4gICAgICA6ZGlzYWJsZWQ9XCJidXR0b24uZGlzYWJsZWRcIlxuICAgICAgQGNsaWNrPVwib25DbGlja0J1dHRvbihidXR0b24pXCJcbiAgICApXG4gICAgICBzcGFuKFxuICAgICAgICB2LWlmPVwiYnV0dG9uLnRleHRcIlxuICAgICAgKSB7eyBidXR0b24udGV4dCB9fVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgZW1pdHM6IFsndXBkYXRlOnBhZ2UnXSxcblxuICBwcm9wczoge1xuICAgIHRvdGFsOiB7IHR5cGU6IE51bWJlciwgZGVmYXVsdDogMCB9LFxuICAgIHBhZ2U6IHsgdHlwZTogTnVtYmVyLCBkZWZhdWx0OiAxIH0sXG4gICAgcGFnZVNpemU6IHsgdHlwZTogTnVtYmVyLCBkZWZhdWx0OiAxMCB9LFxuICAgIHNob3dUb3RhbDogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiB0cnVlIH1cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBzaG93UHJldjogdHJ1ZSxcbiAgICAgIHNob3dOZXh0OiB0cnVlLFxuICAgICAgY3VycmVudFBhZ2U6IHRoaXMucGFnZVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIGZpcnN0KCkge1xuICAgICAgcmV0dXJuICh0aGlzLmN1cnJlbnRQYWdlIC0gMSkgKiB0aGlzLnBhZ2VTaXplICsgMVxuICAgIH0sXG5cbiAgICBsYXN0KCkge1xuICAgICAgcmV0dXJuIE1hdGgubWluKHRoaXMuZmlyc3QgKyB0aGlzLnBhZ2VTaXplIC0gMSwgdGhpcy50b3RhbClcbiAgICB9LFxuXG4gICAgbnVtUGFnZXMoKSB7XG4gICAgICByZXR1cm4gTWF0aC5jZWlsKHRoaXMudG90YWwgLyB0aGlzLnBhZ2VTaXplKVxuICAgIH0sXG5cbiAgICBidXR0b25zKCkge1xuICAgICAgY29uc3QgeyBzaG93UHJldiwgc2hvd05leHQsIGN1cnJlbnRQYWdlLCBudW1QYWdlcyB9ID0gdGhpc1xuICAgICAgY29uc3Qgc2hvd0xlbmd0aCA9IHNob3dQcmV2ICsgc2hvd05leHQgKyAxXG5cbiAgICAgIGxldCBzdGFydCA9IDFcbiAgICAgIGxldCBlbmQgPSAxXG4gICAgICBpZiAobnVtUGFnZXMgPD0gc2hvd0xlbmd0aCkge1xuICAgICAgICBlbmQgPSBudW1QYWdlc1xuICAgICAgfSBlbHNlIGlmIChjdXJyZW50UGFnZSA8PSBzaG93UHJldiArIDEpIHtcbiAgICAgICAgZW5kID0gc2hvd0xlbmd0aFxuICAgICAgfSBlbHNlIGlmIChjdXJyZW50UGFnZSA+PSBudW1QYWdlcyAtIHNob3dOZXh0KSB7XG4gICAgICAgIGVuZCA9IG51bVBhZ2VzXG4gICAgICAgIHN0YXJ0ID0gbnVtUGFnZXMgLSBzaG93TGVuZ3RoICsgMVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3RhcnQgPSBjdXJyZW50UGFnZSAtIHNob3dQcmV2XG4gICAgICAgIGVuZCA9IGN1cnJlbnRQYWdlICsgc2hvd05leHRcbiAgICAgIH1cblxuICAgICAgY29uc3QgYnV0dG9ucyA9IFtdXG4gICAgICBidXR0b25zLnB1c2goe1xuICAgICAgICBpbmRleDogY3VycmVudFBhZ2UgLSAxLFxuICAgICAgICB0eXBlOiAncHJldicsXG4gICAgICAgIGRpc2FibGVkOiBjdXJyZW50UGFnZSA8PSAxXG4gICAgICB9KVxuICAgICAgaWYgKHN0YXJ0ID49IDIpIHtcbiAgICAgICAgYnV0dG9ucy5wdXNoKHsgaW5kZXg6IDEsIHRleHQ6IDEgfSlcbiAgICAgIH1cbiAgICAgIGlmIChzdGFydCA+IDIpIHtcbiAgICAgICAgYnV0dG9ucy5wdXNoKHtcbiAgICAgICAgICBpbmRleDogTWF0aC5tYXgoMSwgY3VycmVudFBhZ2UgLSAxMCksXG4gICAgICAgICAgdHlwZTogJ2VsbGlwc2lzLXByZXYnXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgICBmb3IgKGxldCBpID0gc3RhcnQ7IGkgPD0gZW5kOyBpKyspIHtcbiAgICAgICAgYnV0dG9ucy5wdXNoKHtcbiAgICAgICAgICBpbmRleDogaSxcbiAgICAgICAgICB0ZXh0OiBpLFxuICAgICAgICAgIGFjdGl2ZTogaSA9PT0gY3VycmVudFBhZ2VcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICAgIGlmIChlbmQgPCBudW1QYWdlcyAtIDEpIHtcbiAgICAgICAgYnV0dG9ucy5wdXNoKHtcbiAgICAgICAgICBpbmRleDogTWF0aC5taW4obnVtUGFnZXMsIGN1cnJlbnRQYWdlICsgMTApLFxuICAgICAgICAgIHR5cGU6ICdlbGxpcHNpcy1uZXh0J1xuICAgICAgICB9KVxuICAgICAgfVxuICAgICAgaWYgKGVuZCA8PSBudW1QYWdlcyAtIDEpIHtcbiAgICAgICAgYnV0dG9ucy5wdXNoKHsgaW5kZXg6IG51bVBhZ2VzLCB0ZXh0OiBudW1QYWdlcyB9KVxuICAgICAgfVxuICAgICAgYnV0dG9ucy5wdXNoKHtcbiAgICAgICAgaW5kZXg6IGN1cnJlbnRQYWdlICsgMSxcbiAgICAgICAgdHlwZTogJ25leHQnLFxuICAgICAgICBkaXNhYmxlZDogY3VycmVudFBhZ2UgPj0gbnVtUGFnZXNcbiAgICAgIH0pXG5cbiAgICAgIHJldHVybiBidXR0b25zXG4gICAgfVxuICB9LFxuXG4gIHdhdGNoOiB7XG4gICAgcGFnZShwYWdlKSB7XG4gICAgICB0aGlzLmN1cnJlbnRQYWdlID0gcGFnZVxuICAgIH0sXG5cbiAgICBwYWdlU2l6ZSgpIHtcbiAgICAgIGlmICh0aGlzLmN1cnJlbnRQYWdlID4gdGhpcy5udW1QYWdlcykge1xuICAgICAgICB0aGlzLmN1cnJlbnRQYWdlID0gdGhpcy5udW1QYWdlc1xuICAgICAgfVxuICAgIH0sXG5cbiAgICBjdXJyZW50UGFnZSh0bywgZnJvbSkge1xuICAgICAgaWYgKHRvICE9PSBmcm9tKSB7XG4gICAgICAgIHRoaXMuJGVtaXQoJ3VwZGF0ZTpwYWdlJywgdG8pXG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIGNyZWF0ZWQoKSB7XG4gICAgdGhpcy5jdXJyZW50UGFnZSA9IHRoaXMucGFnZVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBnZXRCdXR0b25DbGFzc2VzKGJ1dHRvbikge1xuICAgICAgY29uc3QgY2xhc3NlcyA9IHtcbiAgICAgICAgJ2RpdG8tc2VsZWN0ZWQnOiBidXR0b24uYWN0aXZlXG4gICAgICB9XG4gICAgICBpZiAoYnV0dG9uLnR5cGUpIHtcbiAgICAgICAgY2xhc3Nlc1tgZGl0by1idXR0b24tJHtidXR0b24udHlwZX1gXSA9IHRydWVcbiAgICAgIH1cbiAgICAgIHJldHVybiBjbGFzc2VzXG4gICAgfSxcblxuICAgIG9uQ2xpY2tCdXR0b24oYnV0dG9uKSB7XG4gICAgICBpZiAoXG4gICAgICAgIGJ1dHRvbi5pbmRleCAmJlxuICAgICAgICAhYnV0dG9uLmRpc2FibGVkICYmXG4gICAgICAgIGJ1dHRvbi5pbmRleCAhPT0gdGhpcy5jdXJyZW50UGFnZVxuICAgICAgKSB7XG4gICAgICAgIHRoaXMuY3VycmVudFBhZ2UgPSBidXR0b24uaW5kZXhcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5cbi5kaXRvLXBhZ2luYXRpb24ge1xuICBkaXNwbGF5OiBmbGV4O1xuXG4gIC5kaXRvLXBhZ2luYXRpb24tdG90YWwge1xuICAgIEBpbmNsdWRlIGVsbGlwc2lzO1xuXG4gICAgbWFyZ2luOiAwIDAuNWVtO1xuICAgIGxpbmUtaGVpZ2h0OiAkaW5wdXQtaGVpZ2h0O1xuICB9XG5cbiAgLmRpdG8tYnV0dG9uIHtcbiAgICB0cmFuc2l0aW9uOlxuICAgICAgYWxsIDAuM3MgZWFzZSxcbiAgICAgIGNvbG9yIDBzLFxuICAgICAgYmFja2dyb3VuZCAwcyxcbiAgICAgIGJvcmRlciAwcztcbiAgICBmb250LXZhcmlhbnQtbnVtZXJpYzogdGFidWxhci1udW1zO1xuICAgIHBhZGRpbmc6IDAgMC41ZW07XG5cbiAgICAmLXByZXYsXG4gICAgJi1uZXh0IHtcbiAgICAgICY6OmJlZm9yZSB7XG4gICAgICAgIEBleHRlbmQgJWljb24tYXJyb3c7XG4gICAgICB9XG4gICAgfVxuXG4gICAgJi1wcmV2OjpiZWZvcmUge1xuICAgICAgdHJhbnNmb3JtOiBzY2FsZVgoLTEpO1xuICAgIH1cblxuICAgICYtZWxsaXBzaXMtcHJldixcbiAgICAmLWVsbGlwc2lzLW5leHQge1xuICAgICAgJjo6YmVmb3JlIHtcbiAgICAgICAgQGV4dGVuZCAlaWNvbi1lbGxpcHNpcztcbiAgICAgIH1cblxuICAgICAgJjpob3Zlcjo6YmVmb3JlIHtcbiAgICAgICAgQGV4dGVuZCAlaWNvbi1jaGV2cm9ucztcbiAgICAgIH1cblxuICAgICAgYmFja2dyb3VuZDogbm9uZTtcbiAgICAgIGJvcmRlcjogMDtcbiAgICAgIHBhZGRpbmc6IDA7XG4gICAgICBtYXJnaW46IDA7XG4gICAgICBjb2xvcjogJGNvbG9yLXRleHQ7XG5cbiAgICAgICY6Zm9jdXMge1xuICAgICAgICBjb2xvcjogJGNvbG9yLWFjdGl2ZTtcbiAgICAgIH1cblxuICAgICAgJjphY3RpdmUge1xuICAgICAgICBib3gtc2hhZG93OiBub25lO1xuICAgICAgfVxuICAgIH1cblxuICAgICYtZWxsaXBzaXMtcHJldjo6YmVmb3JlIHtcbiAgICAgIHRyYW5zZm9ybTogc2NhbGVYKC0xKTtcbiAgICB9XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuLmRpdG8tc3dpdGNoKFxuICA6Y2xhc3M9XCJjbGFzc2VzXCJcbiAgOnN0eWxlPVwic3R5bGVzXCJcbilcbiAgLmRpdG8tc3dpdGNoLXBhbmVcbiAgICBpbnB1dChcbiAgICAgIDppZD1cImlkXCJcbiAgICAgIHJlZj1cImlucHV0XCJcbiAgICAgIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICAgICAgdi1tb2RlbD1cImNoZWNrZWRcIlxuICAgICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgIDpuYW1lPVwibmFtZVwiXG4gICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgKVxuICAgIC5kaXRvLXN3aXRjaC1idXR0b25cbiAgICBzcGFuLmRpdG8tc3dpdGNoLWxhYmVsKFxuICAgICAgdi1pZj1cImxhYmVsc1wiXG4gICAgKVxuICAgICAgc2xvdChcbiAgICAgICAgdi1pZj1cImNoZWNrZWRcIlxuICAgICAgICBuYW1lPVwiY2hlY2tlZFwiXG4gICAgICApIHt7IGxhYmVscy5jaGVja2VkIHx8ICdvbicgfX1cbiAgICAgIHNsb3QoXG4gICAgICAgIHYtZWxzZVxuICAgICAgICBuYW1lPVwidW5jaGVja2VkXCJcbiAgICAgICkge3sgbGFiZWxzLnVuY2hlY2tlZCB8fCAnb2ZmJyB9fVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgZW1pdHM6IFsndXBkYXRlOm1vZGVsVmFsdWUnLCAnY2hhbmdlJ10sXG4gIGluaGVyaXRBdHRyczogZmFsc2UsXG5cbiAgcHJvcHM6IHtcbiAgICBtb2RlbFZhbHVlOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgaWQ6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgbmFtZTogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBkaXNhYmxlZDogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGxhYmVsczogeyB0eXBlOiBbT2JqZWN0LCBCb29sZWFuXSwgZGVmYXVsdDogZmFsc2UgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGNoZWNrZWQ6IHRoaXMubW9kZWxWYWx1ZVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIGNsYXNzZXMoKSB7XG4gICAgICByZXR1cm4gW1xuICAgICAgICB0aGlzLiRhdHRycy5jbGFzcyxcbiAgICAgICAge1xuICAgICAgICAgICdkaXRvLWNoZWNrZWQnOiB0aGlzLmNoZWNrZWQsXG4gICAgICAgICAgJ2RpdG8tZGlzYWJsZWQnOiB0aGlzLmRpc2FibGVkXG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9LFxuXG4gICAgc3R5bGVzKCkge1xuICAgICAgY29uc3QgeyBsYWJlbHM6IHsgY2hlY2tlZCwgdW5jaGVja2VkIH0gPSB7fSB9ID0gdGhpc1xuICAgICAgLy8gQ2FsY3VsYXRlIGAtLXN3aXRjaC13aWR0aGAgaW4gYHJlbWAsIGJhc2VkIG9uIGxhYmVsIGxlbmd0aC5cbiAgICAgIGNvbnN0IGxlbmd0aCA9IE1hdGgubWF4KDAsIGNoZWNrZWQ/Lmxlbmd0aCwgdW5jaGVja2VkPy5sZW5ndGgpXG4gICAgICByZXR1cm4ge1xuICAgICAgICAnLS1zd2l0Y2gtd2lkdGgnOiBsZW5ndGggPyBgJHtsZW5ndGggKiAxLjV9cmVtYCA6IG51bGxcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYXR0cmlidXRlcygpIHtcbiAgICAgIGNvbnN0IHsgY2xhc3M6IF8sIC4uLmF0dHJpYnV0ZXMgfSA9IHRoaXMuJGF0dHJzXG4gICAgICByZXR1cm4gYXR0cmlidXRlc1xuICAgIH1cbiAgfSxcblxuICB3YXRjaDoge1xuICAgIG1vZGVsVmFsdWUobW9kZWxWYWx1ZSkge1xuICAgICAgdGhpcy5jaGVja2VkID0gbW9kZWxWYWx1ZVxuICAgIH0sXG5cbiAgICBjaGVja2VkKGNoZWNrZWQpIHtcbiAgICAgIGlmIChjaGVja2VkICE9PSB0aGlzLm1vZGVsVmFsdWUpIHtcbiAgICAgICAgdGhpcy4kZW1pdCgndXBkYXRlOm1vZGVsVmFsdWUnLCBjaGVja2VkKVxuICAgICAgICB0aGlzLiRlbWl0KCdjaGFuZ2UnLCBjaGVja2VkKVxuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZm9jdXMoKSB7XG4gICAgICB0aGlzLiRyZWZzLmlucHV0LmZvY3VzKClcbiAgICB9XG4gIH1cbn1cbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5cbi5kaXRvLXN3aXRjaCB7XG4gIC8vIFVzZSB3aG9sZSBtdWx0aXBsZXMgb2YgYHJlbWAgZm9yIHNpemVzIGFuZCBgcHhgIG1hcmdpbnMvcGFkZGluZyBhbG9uZ1xuICAvLyB3aXRoIGBjYWxjKClgIHRvIGVuZCB1cCB3aXRoIGV2ZW4gcGl4ZWwgc2l6ZXMuXG4gIC0tc3dpdGNoLXdpZHRoOiA0ZW07XG4gIC0tc3dpdGNoLWhlaWdodDogMmVtO1xuICAtLXN3aXRjaC1tYXJnaW46IDJweDtcbiAgLS1zd2l0Y2gtcGFkZGluZzogM3B4O1xuICAtLXN3aXRjaC1zcGVlZDogMzAwbXM7XG4gIC0tbGFiZWwtbWFyZ2luOiAwLjVlbTtcbiAgLS13aWR0aDogY2FsYyh2YXIoLS1zd2l0Y2gtd2lkdGgpIC0gMiAqIHZhcigtLXN3aXRjaC1tYXJnaW4pKTtcbiAgLS1oZWlnaHQ6IGNhbGModmFyKC0tc3dpdGNoLWhlaWdodCkgLSAyICogdmFyKC0tc3dpdGNoLW1hcmdpbikpO1xuICAtLW9mZnNldDogY2FsYyh2YXIoLS13aWR0aCkgLSB2YXIoLS1oZWlnaHQpKTtcblxuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgaGVpZ2h0OiB2YXIoLS1zd2l0Y2gtaGVpZ2h0KTtcbiAgLy8gVG8gbWFrZSBpbmxpbmUgbGFiZWxzIGFwcGVhciBvbiBjb25zaXN0ZW50IGJhc2VsaW5lOlxuICB2ZXJ0aWNhbC1hbGlnbjogYm90dG9tO1xuICBAaW5jbHVkZSB1c2VyLXNlbGVjdChub25lKTtcblxuICAuZGl0by1zd2l0Y2gtcGFuZSB7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIHdpZHRoOiB2YXIoLS13aWR0aCk7XG4gICAgaGVpZ2h0OiB2YXIoLS1oZWlnaHQpO1xuICB9XG5cbiAgLmRpdG8tc3dpdGNoLXBhbmUsXG4gIC5kaXRvLXN3aXRjaC1sYWJlbCB7XG4gICAgdG9wOiA1MCU7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC01MCUpO1xuICB9XG5cbiAgaW5wdXQge1xuICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICBhcHBlYXJhbmNlOiBub25lO1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIGhlaWdodDogMTAwJTtcbiAgICBib3JkZXItcmFkaXVzOiAxZW07XG4gICAgYmFja2dyb3VuZDogJGNvbG9yLWxpZ2h0O1xuICAgIHRyYW5zaXRpb246XG4gICAgICBib3JkZXItY29sb3IgMC4zcyxcbiAgICAgIGJhY2tncm91bmQtY29sb3IgMC4zcztcbiAgfVxuXG4gIC5kaXRvLXN3aXRjaC1idXR0b24ge1xuICAgIC0tc2l6ZTogY2FsYyh2YXIoLS1oZWlnaHQpIC0gMiAqIHZhcigtLXN3aXRjaC1wYWRkaW5nKSk7XG5cbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgdG9wOiB2YXIoLS1zd2l0Y2gtcGFkZGluZyk7XG4gICAgbGVmdDogdmFyKC0tc3dpdGNoLXBhZGRpbmcpO1xuICAgIHdpZHRoOiB2YXIoLS1zaXplKTtcbiAgICBoZWlnaHQ6IHZhcigtLXNpemUpO1xuICAgIGJvcmRlci1yYWRpdXM6IGNhbGModmFyKC0tc2l6ZSkgLyAyKTtcbiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgIGJhY2tncm91bmQ6ICRjb2xvci13aGl0ZTtcbiAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gdmFyKC0tc3dpdGNoLXNwZWVkKTtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMCk7XG4gIH1cblxuICAuZGl0by1zd2l0Y2gtYnV0dG9uLFxuICAuZGl0by1zd2l0Y2gtbGFiZWwge1xuICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xuICB9XG5cbiAgLmRpdG8tc3dpdGNoLWxhYmVsIHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgcmlnaHQ6IHZhcigtLWxhYmVsLW1hcmdpbik7XG4gICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgICBjb2xvcjogJGNvbG9yLXdoaXRlO1xuICB9XG5cbiAgJi5kaXRvLWNoZWNrZWQge1xuICAgIGlucHV0IHtcbiAgICAgIGJhY2tncm91bmQ6ICRjb2xvci1hY3RpdmU7XG4gICAgfVxuXG4gICAgLmRpdG8tc3dpdGNoLWJ1dHRvbiB7XG4gICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgodmFyKC0tb2Zmc2V0KSk7XG4gICAgfVxuXG4gICAgLmRpdG8tc3dpdGNoLWxhYmVsIHtcbiAgICAgIGxlZnQ6IHZhcigtLWxhYmVsLW1hcmdpbik7XG4gICAgICByaWdodDogdW5zZXQ7XG4gICAgfVxuICB9XG5cbiAgJi5kaXRvLWRpc2FibGVkIHtcbiAgICBAZXh0ZW5kICVidXR0b24tZGlzYWJsZWQ7XG4gIH1cblxuICAmOmZvY3VzLXdpdGhpbjpub3QoOmhvdmVyKSB7XG4gICAgLmRpdG8tc3dpdGNoLWJ1dHRvbiB7XG4gICAgICBib3gtc2hhZG93OiAkc2hhZG93LWZvY3VzO1xuICAgIH1cbiAgfVxufVxuPC9zdHlsZT5cbiIsIjxzY3JpcHQ+XG5pbXBvcnQgeyBoIGFzIGNyZWF0ZUVsZW1lbnQsIFRyYW5zaXRpb24gfSBmcm9tICd2dWUnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5mdW5jdGlvbiBUcmFuc2l0aW9uSGVpZ2h0KHsgZW5hYmxlZCB9LCB7IHNsb3RzIH0pIHtcbiAgcmV0dXJuIGVuYWJsZWRcbiAgICA/IGNyZWF0ZUVsZW1lbnQoVHJhbnNpdGlvbiwgcHJvcHMsIHNsb3RzKVxuICAgIDogc2xvdHMuZGVmYXVsdCgpXG59XG5cblRyYW5zaXRpb25IZWlnaHQucHJvcHMgPSB7XG4gIGVuYWJsZWQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogdHJ1ZSB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFRyYW5zaXRpb25IZWlnaHRcblxuY29uc3Qgc2V0U3R5bGUgPSAoZWxlbWVudCwgc3R5bGUpID0+IE9iamVjdC5hc3NpZ24oZWxlbWVudC5zdHlsZSwgc3R5bGUpXG5cbmNvbnN0IG5leHRUaW1lb3V0ID0gY2FsbGJhY2sgPT4gc2V0VGltZW91dChjYWxsYmFjaywgMClcblxuLy8gRm9yY2UgcmVwYWludCB0byBtYWtlIHN1cmUgdGhlIGFuaW1hdGlvbiBpcyB0cmlnZ2VyZWQgY29ycmVjdGx5LlxuY29uc3QgZm9yY2VSZXBhaW50ID0gZWxlbWVudCA9PiBnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpLmhlaWdodFxuXG5jb25zdCBwcm9wcyA9IHtcbiAgbmFtZTogJ2RpdG8taGVpZ2h0JyxcblxuICBvbkFmdGVyRW50ZXIoZWxlbWVudCkge1xuICAgIC8vIEEgdGltZW91dCBiZWZvcmUgc2V0dGluZyBzdHlsZSBpcyBvbmx5IHJlYWxseSBuZWVkZWQgYWZ0ZXIgY2FsbHMgdG9cbiAgICAvLyBgZm9yY2VSZXBhaW50KClgLCBidXQgdXNpbmcgb25lIGhlcmUgdG9vIHByZXNlcnZlcyBleGVjdXRpb24gc2VxdWVuY2Ugc29cbiAgICAvLyB0aGF0IHRoZSBjYWxsIGZyb20gYGVudGVyKClgIGNhbiBuZXZlciBvdXRydW4gdGhlIG9uZSBmcm9tIGBhZnRlckVudGVyKClgXG4gICAgbmV4dFRpbWVvdXQoKCkgPT4gc2V0U3R5bGUoZWxlbWVudCwgeyBoZWlnaHQ6IG51bGwgfSkpXG4gIH0sXG5cbiAgb25FbnRlcihlbGVtZW50KSB7XG4gICAgLy8gRm9yIHNvbWUgcmVhc29uIHdlJ3JlIGdldHRpbmcgdHdvIGBvbkVudGVyKClgIGNhbGxzIHBlciB0cmFuc2l0aW9uLFxuICAgIC8vIHNvIHdlIG5lZWQgdG8gaWdub3JlIHRoZSBzZWNvbmQgb25lLiBUaGlzIG1pZ2h0IGJlIGxpbmtlZCB0byB0aGUgdXNlXG4gICAgLy8gb2YgYG5leHRUaW1lb3V0KClgLCB3aGljaCBpcyByZXF1aXJlZCB0byBnZXQgdGhlIGNvcnJlY3QgdmFsdWUgZm9yXG4gICAgLy8gYGhlaWdodGAsIGJhc2VkIG9uIGAmLS1sYWJlbC12ZXJ0aWNhbGAgY2FsY3VsYXRpb25zLlxuICAgIGNvbnN0IHsgd2lkdGggfSA9IGdldENvbXB1dGVkU3R5bGUoZWxlbWVudClcbiAgICBzZXRTdHlsZShlbGVtZW50LCB7XG4gICAgICB3aWR0aCxcbiAgICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICAgICAgdmlzaWJpbGl0eTogJ2hpZGRlbicsXG4gICAgICBoZWlnaHQ6ICdhdXRvJ1xuICAgIH0pXG4gICAgbmV4dFRpbWVvdXQoKCkgPT4ge1xuICAgICAgY29uc3QgeyBoZWlnaHQgfSA9IGdldENvbXB1dGVkU3R5bGUoZWxlbWVudClcbiAgICAgIHNldFN0eWxlKGVsZW1lbnQsIHtcbiAgICAgICAgd2lkdGg6IG51bGwsXG4gICAgICAgIHBvc2l0aW9uOiBudWxsLFxuICAgICAgICB2aXNpYmlsaXR5OiBudWxsLFxuICAgICAgICBoZWlnaHQ6IDBcbiAgICAgIH0pXG4gICAgICBmb3JjZVJlcGFpbnQoZWxlbWVudClcbiAgICAgIG5leHRUaW1lb3V0KCgpID0+IHNldFN0eWxlKGVsZW1lbnQsIHsgaGVpZ2h0IH0pKVxuICAgIH0pXG4gIH0sXG5cbiAgb25MZWF2ZShlbGVtZW50KSB7XG4gICAgY29uc3QgeyBoZWlnaHQgfSA9IGdldENvbXB1dGVkU3R5bGUoZWxlbWVudClcbiAgICBzZXRTdHlsZShlbGVtZW50LCB7IGhlaWdodCB9KVxuICAgIGZvcmNlUmVwYWludChlbGVtZW50KVxuICAgIG5leHRUaW1lb3V0KCgpID0+IHNldFN0eWxlKGVsZW1lbnQsIHsgaGVpZ2h0OiAwIH0pKVxuICB9XG59XG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4kZHVyYXRpb246IDAuMTVzO1xuXG4uZGl0by1oZWlnaHQtZW50ZXItYWN0aXZlLFxuLmRpdG8taGVpZ2h0LWxlYXZlLWFjdGl2ZSB7XG4gIHRyYW5zaXRpb246IGhlaWdodCAkZHVyYXRpb24gJGVhc2Utb3V0LXF1YXJ0O1xuICBvdmVyZmxvdzogaGlkZGVuO1xufVxuXG4uZGl0by1oZWlnaHQtZW50ZXItYWN0aXZlIHtcbiAgYW5pbWF0aW9uOiBkaXRvLXNsaWRlLWVudGVyICRkdXJhdGlvbiAkZWFzZS1vdXQtcXVhcnQ7XG59XG5cbi5kaXRvLWhlaWdodC1sZWF2ZS1hY3RpdmUge1xuICBhbmltYXRpb246IGRpdG8tc2xpZGUtbGVhdmUgJGR1cmF0aW9uICRlYXNlLW91dC1xdWFydDtcbn1cblxuLmRpdG8taGVpZ2h0LWVudGVyLWZyb20sXG4uZGl0by1oZWlnaHQtbGVhdmUtdG8ge1xuICBoZWlnaHQ6IDA7XG59XG48L3N0eWxlPlxuIiwiaW1wb3J0IHsgdXNlU2xvdHMsIENvbW1lbnQgfSBmcm9tICd2dWUnXG5pbXBvcnQgeyBpc1N0cmluZywgYXNBcnJheSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbmV4cG9ydCBmdW5jdGlvbiBoYXNWTm9kZUNvbnRlbnQodm5vZGUpIHtcbiAgcmV0dXJuIHZub2RlICYmIGFzQXJyYXkodm5vZGUpLnNvbWUodm5vZGUgPT4gdm5vZGUudHlwZSAhPT0gQ29tbWVudClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGhhc1Nsb3RDb250ZW50KHNsb3QsIHByb3BzID0ge30pIHtcbiAgc2xvdCA9IGlzU3RyaW5nKHNsb3QpID8gdXNlU2xvdHMoKVtzbG90XSA6IHNsb3RcbiAgcmV0dXJuIGhhc1ZOb2RlQ29udGVudChzbG90Py4ocHJvcHMpKVxufVxuIiwiaW1wb3J0IHsgaXNPYmplY3QgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0IHsgYWRkRXZlbnRzIH0gZnJvbSAnQGRpdG9qcy91aS9zcmMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCB7XG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGRvbUhhbmRsZXJzOiBbXVxuICAgIH1cbiAgfSxcblxuICB1bm1vdW50ZWQoKSB7XG4gICAgZm9yIChjb25zdCB7IHJlbW92ZSB9IG9mIHRoaXMuZG9tSGFuZGxlcnMpIHtcbiAgICAgIHJlbW92ZSgpXG4gICAgfVxuICAgIHRoaXMuZG9tSGFuZGxlcnMgPSBbXVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBkb21PbihlbGVtZW50LCB0eXBlLCBoYW5kbGVyKSB7XG4gICAgICBjb25zdCByZXN1bHQgPSBhZGRFdmVudHMoXG4gICAgICAgIGVsZW1lbnQsXG4gICAgICAgIGlzT2JqZWN0KHR5cGUpID8gdHlwZSA6IHsgW3R5cGVdOiBoYW5kbGVyIH1cbiAgICAgIClcbiAgICAgIHRoaXMuZG9tSGFuZGxlcnMucHVzaChyZXN1bHQpXG4gICAgICByZXR1cm4gcmVzdWx0XG4gICAgfVxuICB9XG59XG4iLCJleHBvcnQgZGVmYXVsdCBjbGFzcyBEaXRvVXNlciB7XG4gIGhhc1JvbGUoLi4ucm9sZXMpIHtcbiAgICBpZiAodGhpcy5yb2xlcykge1xuICAgICAgZm9yIChjb25zdCByb2xlIG9mIHJvbGVzKSB7XG4gICAgICAgIGlmICh0aGlzLnJvbGVzLmluY2x1ZGVzKHJvbGUpKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2VcbiAgfVxufVxuIiwiLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IHtcbiAgcHJvdmlkZSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgJHNjaGVtYVBhcmVudENvbXBvbmVudDogKCkgPT4gdGhpc1xuICAgIH1cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBzY2hlbWFDb21wb25lbnRzOiBbXVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIG1haW5TY2hlbWFDb21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWFDb21wb25lbnRzWzBdXG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICAvLyBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgYERpdG9TY2hlbWEuY3JlYXRlZCgpL3VubW91bnRlZCgpYCBvbiBpdHNcbiAgICAvLyBgJHNjaGVtYVBhcmVudENvbXBvbmVudGAsIGlmIHRoZSBwYXJlbnQgdXNlcyB0aGUgYFNjaGVtYVBhcmVudE1peGluYDpcbiAgICBfcmVnaXN0ZXJTY2hlbWFDb21wb25lbnQoc2NoZW1hQ29tcG9uZW50LCBhZGQpIHtcbiAgICAgIGNvbnN0IHsgc2NoZW1hQ29tcG9uZW50cyB9ID0gdGhpc1xuICAgICAgaWYgKGFkZCkge1xuICAgICAgICBzY2hlbWFDb21wb25lbnRzLnB1c2goc2NoZW1hQ29tcG9uZW50KVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2NoZW1hQ29tcG9uZW50cy5zcGxpY2Uoc2NoZW1hQ29tcG9uZW50cy5pbmRleE9mKHNjaGVtYUNvbXBvbmVudCksIDEpXG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iLCJpbXBvcnQgU2NoZW1hUGFyZW50TWl4aW4gZnJvbSAnLi9TY2hlbWFQYXJlbnRNaXhpbi5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IHtcbiAgbWl4aW5zOiBbU2NoZW1hUGFyZW50TWl4aW5dLFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgZXJyb3JzKCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hQ29tcG9uZW50cy5mbGF0TWFwKCh7IGVycm9ycyB9KSA9PiBlcnJvcnMgfHwgW10pXG4gICAgfSxcblxuICAgIGlzVG91Y2hlZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYUNvbXBvbmVudHMuc29tZShpdCA9PiBpdC5pc1RvdWNoZWQpXG4gICAgfSxcblxuICAgIGlzRGlydHkoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWFDb21wb25lbnRzLnNvbWUoaXQgPT4gaXQuaXNEaXJ0eSlcbiAgICB9LFxuXG4gICAgaXNWYWxpZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYUNvbXBvbmVudHMuZXZlcnkoaXQgPT4gaXQuaXNWYWxpZClcbiAgICB9LFxuXG4gICAgaXNWYWxpZGF0ZWQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWFDb21wb25lbnRzLmV2ZXJ5KGl0ID0+IGl0LmlzVmFsaWQpXG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICB2YWxpZGF0ZUFsbChtYXRjaCwgbm90aWZ5ID0gdHJ1ZSkge1xuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hQ29tcG9uZW50cy5ldmVyeShpdCA9PiBpdC52YWxpZGF0ZUFsbChtYXRjaCwgbm90aWZ5KSlcbiAgICB9LFxuXG4gICAgdmVyaWZ5QWxsKG1hdGNoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWFDb21wb25lbnRzLmV2ZXJ5KGl0ID0+IGl0LnZlcmlmeUFsbChtYXRjaCkpXG4gICAgfSxcblxuICAgIHJlc2V0VmFsaWRhdGlvbigpIHtcbiAgICAgIHRoaXMuc2NoZW1hQ29tcG9uZW50cy5mb3JFYWNoKGl0ID0+IGl0LnJlc2V0VmFsaWRhdGlvbigpKVxuICAgIH0sXG5cbiAgICBjbGVhckVycm9ycygpIHtcbiAgICAgIHRoaXMuc2NoZW1hQ29tcG9uZW50cy5mb3JFYWNoKGl0ID0+IGl0LmNsZWFyRXJyb3JzKCkpXG4gICAgfSxcblxuICAgIHNob3dWYWxpZGF0aW9uRXJyb3JzKGVycm9ycywgZm9jdXMpIHtcbiAgICAgIHRoaXMuc2NoZW1hQ29tcG9uZW50cy5mb3JFYWNoKFxuICAgICAgICBpdCA9PiBpdC5zaG93VmFsaWRhdGlvbkVycm9ycyhlcnJvcnMsIGZvY3VzKVxuICAgICAgKVxuICAgIH1cbiAgfVxufVxuIiwiaW1wb3J0IFZhbGlkYXRvck1peGluIGZyb20gJy4uL21peGlucy9WYWxpZGF0b3JNaXhpbi5qcydcbmltcG9ydCB7IGdldENvbW1vblByZWZpeCB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCB7XG4gIG1peGluczogW1ZhbGlkYXRvck1peGluXSxcblxuICBwcm92aWRlKCkge1xuICAgIHJldHVybiB7XG4gICAgICAkcm91dGVDb21wb25lbnQ6ICgpID0+IHRoaXNcbiAgICB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgcmVsb2FkOiBmYWxzZSxcbiAgICAgIC8vIEVhY2ggcm91dGUtY29tcG9uZW50IGRlZmluZXMgYSBzdG9yZSB0aGF0IGdldHMgcGFzc2VkIG9uIHRvIGl0c1xuICAgICAgLy8gY2hpbGQgY29tcG9uZW50cywgc28gdGhleSBjYW4gc3RvcmUgdmFsdWVzIGluIHRoZW0gdGhhdCBsaXZlIGJleW9uZFxuICAgICAgLy8gdGhlaXIgbGlmZS1jeWNsZS4gU2VlOiBEaXRvUGFuZSwgU291cmNlTWl4aW5cbiAgICAgIHN0b3JlOiB7fSxcbiAgICAgIGxvYWRDYWNoZToge30gLy8gU2VlIFR5cGVNaXhpbi5sb2FkKClcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICByb3V0ZUNvbXBvbmVudCgpIHtcbiAgICAgIC8vIE92ZXJyaWRlIERpdG9NaXhpbidzIHJvdXRlQ29tcG9uZW50KCkgd2hpY2ggdXNlcyB0aGUgaW5qZWN0ZWQgdmFsdWUuXG4gICAgICByZXR1cm4gdGhpc1xuICAgIH0sXG5cbiAgICByb3V0ZUxldmVsKCkge1xuICAgICAgbGV0IGxldmVsID0gMFxuICAgICAgbGV0IHJvdXRlQ29tcG9uZW50ID0gdGhpc1xuICAgICAgd2hpbGUgKChyb3V0ZUNvbXBvbmVudCA9IHJvdXRlQ29tcG9uZW50LnBhcmVudENvbXBvbmVudC5yb3V0ZUNvbXBvbmVudCkpIHtcbiAgICAgICAgbGV2ZWwrK1xuICAgICAgfVxuICAgICAgcmV0dXJuIGxldmVsXG4gICAgfSxcblxuICAgIHJvdXRlUmVjb3JkKCkge1xuICAgICAgcmV0dXJuIHRoaXMuJHJvdXRlLm1hdGNoZWRbdGhpcy5yb3V0ZUxldmVsXVxuICAgIH0sXG5cbiAgICBpc0xhc3RSb3V0ZSgpIHtcbiAgICAgIC8vIFJldHVybnMgdHJ1ZSB3aGVuIHRoaXMgcm91dGVyIGNvbXBvbmVudCBpcyB0aGUgbGFzdCBvbmUgaW4gdGhlIHJvdXRlLlxuICAgICAgY29uc3QgeyBtYXRjaGVkIH0gPSB0aGlzLiRyb3V0ZVxuICAgICAgcmV0dXJuIHRoaXMucm91dGVSZWNvcmQgPT09IG1hdGNoZWRbbWF0Y2hlZC5sZW5ndGggLSAxXVxuICAgIH0sXG5cbiAgICBpc0xhc3RVbm5lc3RlZFJvdXRlKCkge1xuICAgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoaXMgcm91dGUgY29tcG9uZW50IGlzIHRoZSBsYXN0IG9uZSBpbiB0aGUgcm91dGUgdGhhdFxuICAgICAgLy8gbmVlZHMgaXRzIG93biByb3V0ZXItdmlldyAoPSBpcyBub3QgbmVzdGVkKS5cbiAgICAgIGNvbnN0IHsgbWF0Y2hlZCB9ID0gdGhpcy4kcm91dGVcbiAgICAgIGZvciAobGV0IGkgPSBtYXRjaGVkLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgIGNvbnN0IHJlY29yZCA9IG1hdGNoZWRbaV1cbiAgICAgICAgaWYgKCFyZWNvcmQubWV0YS5uZXN0ZWQpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5yb3V0ZVJlY29yZCA9PT0gcmVjb3JkXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH0sXG5cbiAgICBpc05lc3RlZFJvdXRlKCkge1xuICAgICAgcmV0dXJuIHRoaXMubWV0YS5uZXN0ZWRcbiAgICB9LFxuXG4gICAgaXNWaWV3KCkge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfSxcblxuICAgIG1ldGEoKSB7XG4gICAgICByZXR1cm4gdGhpcy5yb3V0ZVJlY29yZD8ubWV0YVxuICAgIH0sXG5cbiAgICBwYXRoKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0Um91dGVQYXRoKHRoaXMucm91dGVSZWNvcmQ/LnBhdGgpXG4gICAgfSxcblxuICAgIGxhYmVsKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0TGFiZWwodGhpcy5zY2hlbWEpXG4gICAgfSxcblxuICAgIGJyZWFkY3J1bWIoKSB7XG4gICAgICBjb25zdCB7IGJyZWFkY3J1bWIgfSA9IHRoaXMuc2NoZW1hIHx8IHt9XG4gICAgICByZXR1cm4gYnJlYWRjcnVtYiB8fCBgJHt0aGlzLmJyZWFkY3J1bWJQcmVmaXh9ICR7dGhpcy5sYWJlbH1gXG4gICAgfSxcblxuICAgIGJyZWFkY3J1bWJQcmVmaXgoKSB7XG4gICAgICByZXR1cm4gJydcbiAgICB9LFxuXG4gICAgcGFyYW0oKSB7XG4gICAgICAvLyBXb3JrYXJvdW5kIGZvciB2dWUtcm91dGVyIG5vdCBiZWluZyBhYmxlIHRvIG1hcCBtdWx0aXBsZSB1cmwgcGFyYW1ldGVyc1xuICAgICAgLy8gd2l0aCB0aGUgc2FtZSBuYW1lIHRvIG11bHRpcGxlIGNvbXBvbmVudHMsIHNlZTpcbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS92dWVqcy92dWUtcm91dGVyL2lzc3Vlcy8xMzQ1XG4gICAgICByZXR1cm4gdGhpcy4kcm91dGUucGFyYW1zW3RoaXMubWV0YT8ucGFyYW1dIHx8IG51bGxcbiAgICB9LFxuXG4gICAgLy8gQG92ZXJyaWRhYmxlLCBzZWUgRGl0b0Zvcm1cbiAgICBpc011dGF0aW5nKCkge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuICB9LFxuXG4gIGJlZm9yZVJvdXRlVXBkYXRlKHRvLCBmcm9tLCBuZXh0KSB7XG4gICAgdGhpcz8uYmVmb3JlUm91dGVDaGFuZ2UodG8sIGZyb20sIG5leHQpXG4gIH0sXG5cbiAgYmVmb3JlUm91dGVMZWF2ZSh0bywgZnJvbSwgbmV4dCkge1xuICAgIHRoaXM/LmJlZm9yZVJvdXRlQ2hhbmdlKHRvLCBmcm9tLCBuZXh0KVxuICB9LFxuXG4gIGNyZWF0ZWQoKSB7XG4gICAgLy8gS2VlcCBhIHNoYXJlZCBzdGFjayBvZiByb290IGNvbXBvbmVudHMgZm9yIERpdG9UcmFpbCB0byB1c2UgdG8gcmVuZGVyXG4gICAgLy8gbGFiZWxzLiBDYW4ndCByZWx5IG9uICRyb3V0ZS5tYXRjaGVkW2ldLmluc3RhbmNlcy5kZWZhdWx0IHVuZm9ydHVuYXRlbHksXG4gICAgLy8gYXMgaW5zdGFuY2VzIGFyZW4ndCBpbW1lZGlhdGVseSByZWFkeSwgYW5kIGluc3RhbmNlcyBpcyBub3QgcmVhY3RpdmUuXG4gICAgdGhpcy5hcHBTdGF0ZS5yb3V0ZUNvbXBvbmVudHMucHVzaCh0aGlzKVxuICB9LFxuXG4gIHVubW91bnRlZCgpIHtcbiAgICBjb25zdCB7IHJvdXRlQ29tcG9uZW50cyB9ID0gdGhpcy5hcHBTdGF0ZVxuICAgIHJvdXRlQ29tcG9uZW50cy5zcGxpY2Uocm91dGVDb21wb25lbnRzLmluZGV4T2YodGhpcyksIDEpXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGJlZm9yZVJvdXRlQ2hhbmdlKHRvLCBmcm9tLCBuZXh0KSB7XG4gICAgICBsZXQgb2sgPSB0cnVlXG4gICAgICBjb25zdCBpc0Nsb3NpbmcgPSAoXG4gICAgICAgIC8vIE9ubHkgaGFuZGxlIHRoaXMgcm91dGUgY2hhbmdlIGlmIHRoZSBmb3JtIGlzIGFjdHVhbGx5IG1hcHBlZCB0byB0aGVcbiAgICAgICAgLy8gYGZyb21gIHJvdXRlLCBidXQgaW5jbHVkZSBwYXJlbnQgZm9ybXMgb2YgY2xvc2luZyBuZXN0ZWQgZm9ybXMgYXMgYXNcbiAgICAgICAgLy8gd2VsbCwgYnkgbWF0Y2hpbmcgdGhlIHRoZSBzdGFydCBvZiBmcm9tL3RvIHBhdGggYWdhaW5zdCBgdGhpcy5wYXRoYDpcbiAgICAgICAgZnJvbS5wYXRoLnN0YXJ0c1dpdGgodGhpcy5wYXRoKSAmJlxuICAgICAgICAhdG8ucGF0aC5zdGFydHNXaXRoKHRoaXMucGF0aCkgJiZcbiAgICAgICAgLy8gRXhjbHVkZSBoYXNoIGNoYW5nZXMgb25seSAoPSB0YWIgY2hhbmdlcyk6XG4gICAgICAgIGZyb20ucGF0aCAhPT0gdG8ucGF0aCAmJiAoXG4gICAgICAgICAgdGhpcy5pc0Z1bGxSb3V0ZUNoYW5nZSh0bywgZnJvbSkgfHxcbiAgICAgICAgICAvLyBEZWNpZGUgaWYgd2UncmUgbW92aW5nIHRvd2FyZHMgYSBuZXcgbmVzdGVkIGZvcm0sIG9yIGNsb3NpbmcgL1xuICAgICAgICAgIC8vIHJlcGxhY2luZyBhbiBhbHJlYWR5IG9wZW4gb25lIGJ5IGNvbXBhcmluZyBwYXRoIGxlbmd0aHMuXG4gICAgICAgICAgLy8gVGhlIGNhc2Ugb2YgYD1gIG1hdGNoZXMgdGhlIHJlcGxhY2luZyBvZiBhbiBhbHJlYWR5IG9wZW4gb25lLlxuICAgICAgICAgIHRvLnBhdGgubGVuZ3RoIDw9IGZyb20ucGF0aC5sZW5ndGhcbiAgICAgICAgKVxuICAgICAgKVxuICAgICAgaWYgKGlzQ2xvc2luZykge1xuICAgICAgICBpZiAodGhpcy5pc011dGF0aW5nKSB7XG4gICAgICAgICAgLy8gRm9yIGFjdGl2ZSBkaXJlY3RseSBtdXRhdGluZyAobmVzdGVkKSBmb3JtcyB0aGF0IHdlcmUgbm90IHZhbGlkYXRlZFxuICAgICAgICAgIC8vIHlldCwgdmFsaWRhdGUgdGhlbSBvbmNlLiBJZiB0aGUgdXNlciB0aGVuIHN0aWxsIHdhbnRzIHRvIGxlYXZlXG4gICAgICAgICAgLy8gdGhlbSwgdGhleSBjYW4gY2xpY2sgY2xvc2UgLyBuYXZpZ2F0ZSBhd2F5IGFnYWluLlxuICAgICAgICAgIG9rID0gKFxuICAgICAgICAgICAgdGhpcy5pc1ZhbGlkYXRlZCB8fFxuICAgICAgICAgICAgdGhpcy52YWxpZGF0ZUFsbCgpXG4gICAgICAgICAgKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIFRoZSBmb3JtIGRvZXNuJ3QgZGlyZWN0bHkgbXV0YXRlIGRhdGEuIElmIGl0IGlzIGRpcnR5LCBhc2sgaWYgdXNlclxuICAgICAgICAgIC8vIHdhbnRzIHRvIHBlcnNpc3QgZGF0YSBmaXJzdC5cbiAgICAgICAgICBpZiAodGhpcy5pc0RpcnR5KSB7XG4gICAgICAgICAgICBvayA9IHdpbmRvdy5jb25maXJtKFxuICAgICAgICAgICAgICBgWW91IGhhdmUgdW5zYXZlZCBjaGFuZ2VzLiBEbyB5b3UgcmVhbGx5IHdhbnQgdG8gJHtcbiAgICAgICAgICAgICAgICB0aGlzLnZlcmJzLmNhbmNlbFxuICAgICAgICAgICAgICB9P2BcbiAgICAgICAgICAgIClcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIG5leHQob2spXG4gICAgfSxcblxuICAgIGdldFJvdXRlUGF0aChyZWNvcmRQYXRoKSB7XG4gICAgICAvLyBNYXBzIHRoZSByb3V0ZSdzIGFjdHVhbCBwYXRoIHRvIHRoZSBtYXRjaGVkIHJvdXRlcyBieSBjb3VudGluZyBpdHNcbiAgICAgIC8vIHBhcnRzIHNlcGFyYXRlZCBieSAnLycsIHNwbGl0dGluZyB0aGUgcGF0aCBpbnRvIHRoZSBtYXBwZWQgcGFydHNcbiAgICAgIC8vIGNvbnRhaW5pbmcgYWN0dWFsIHBhcmFtZXRlcnMuXG4gICAgICBjb25zdCB7IHBhdGggfSA9IHRoaXMuJHJvdXRlXG4gICAgICByZXR1cm4gcmVjb3JkUGF0aFxuICAgICAgICA/IHBhdGhcbiAgICAgICAgICAgIC5zcGxpdCgnLycpXG4gICAgICAgICAgICAuc2xpY2UoMCwgcmVjb3JkUGF0aC5zcGxpdCgnLycpLmxlbmd0aClcbiAgICAgICAgICAgIC5qb2luKCcvJylcbiAgICAgICAgOiBwYXRoXG4gICAgfSxcblxuICAgIGdldENoaWxkUGF0aChwYXRoKSB7XG4gICAgICByZXR1cm4gYCR7dGhpcy5wYXRofS8ke3BhdGh9YFxuICAgIH0sXG5cbiAgICBpc0Z1bGxSb3V0ZUNoYW5nZSh0bywgZnJvbSkge1xuICAgICAgLy8gVGhlIHJvdXRlIHBhdGggaXMgdGhlIHBhdGggdXAgdG8gdGhlIGZpcnN0IC8gKGV4Y2x1ZGluZyB0aGUgaW5pdGlhbCAvKTpcbiAgICAgIGNvbnN0IHJvb3RQYXRoID0gdGhpcy5wYXRoLm1hdGNoKC9eKFxcL1teL10qKS8pWzFdXG4gICAgICByZXR1cm4gIWdldENvbW1vblByZWZpeCh0by5wYXRoLCBmcm9tLnBhdGgpLnN0YXJ0c1dpdGgocm9vdFBhdGgpXG4gICAgfVxuICB9XG59XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxudGVtcGxhdGUoXG4gIHYtaWY9XCJ1c2VyXCJcbilcbiAgLy8tIE9ubHkgcmVuZGVyIERpdG9WaWV3IHdoZW4gaXQgaXMgYWN0aXZlLCBvdGhlcndpc2UgYSBub3JtYWwgcm91dGVyLXZpZXdcbiAgLy8tIGluc3RlYWQsIHRvIG5lc3QgZnVydGhlciByb3V0ZSBjb21wb25lbnRzLlxuICAvLy0gTk9URTogVGhpcyBpcyBkaWZmZXJlbnQgZnJvbSB0aGUgaGFuZGxpbmcgaW4gRGl0b0Zvcm0sIHdoZXJlIGB2LXNob3dgIGlzXG4gIC8vLSB1c2VkIHRvIGFsd2F5cyByZW5kZXIgZm9ybXMgZXZlbiB3aGVuIG90aGVyIG5lc3RlZCBmb3JtcyBhcmUgcHJlc2VudC5cbiAgUm91dGVyVmlldyhcbiAgICB2LWlmPVwiIWlzTGFzdFJvdXRlXCJcbiAgICA6a2V5PVwibmFtZVwiXG4gIClcbiAgLmRpdG8tdmlldy5kaXRvLXNjcm9sbC1wYXJlbnQoXG4gICAgdi1lbHNlLWlmPVwic2hvdWxkUmVuZGVyU2NoZW1hKHZpZXdTY2hlbWEpXCJcbiAgICA6ZGF0YS1yZXNvdXJjZT1cInNvdXJjZVNjaGVtYS5wYXRoXCJcbiAgKVxuICAgIERpdG9TY2hlbWEoXG4gICAgICA6a2V5PVwibmFtZVwiXG4gICAgICA6c2NoZW1hPVwidmlld1NjaGVtYVwiXG4gICAgICA6ZGF0YT1cImRhdGFcIlxuICAgICAgOm1ldGE9XCJtZXRhXCJcbiAgICAgIDpzdG9yZT1cImdldENoaWxkU3RvcmUobmFtZSlcIlxuICAgICAgcGFkZGluZz1cInJvb3RcIlxuICAgICAgOmRpc2FibGVkPVwiaXNMb2FkaW5nXCJcbiAgICAgIHNjcm9sbGFibGVcbiAgICApXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCBSb3V0ZU1peGluIGZyb20gJy4uL21peGlucy9Sb3V0ZU1peGluLmpzJ1xuaW1wb3J0IHtcbiAgaXNTaW5nbGVDb21wb25lbnRWaWV3LFxuICBzb21lTmVzdGVkU2NoZW1hQ29tcG9uZW50XG59IGZyb20gJy4uL3V0aWxzL3NjaGVtYS5qcydcbmltcG9ydCB7IGhhc1Jlc291cmNlIH0gZnJvbSAnLi4vdXRpbHMvcmVzb3VyY2UuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnRGl0b1ZpZXcnLCB7XG4gIG1peGluczogW1JvdXRlTWl4aW5dLFxuXG4gIHByb3ZpZGUoKSB7XG4gICAgLy8gUmVkaXJlY3QgJHNvdXJjZUNvbXBvbmVudCBhbmQgJHJlc291cmNlQ29tcG9uZW50IHRvIHRoZSBtYWluIGNvbXBvbmVudDpcbiAgICByZXR1cm4ge1xuICAgICAgJHNvdXJjZUNvbXBvbmVudDogKCkgPT4gdGhpcy5tYWluQ29tcG9uZW50Py5zb3VyY2VDb21wb25lbnQgfHwgbnVsbCxcbiAgICAgICRyZXNvdXJjZUNvbXBvbmVudDogKCkgPT4gdGhpcy5tYWluQ29tcG9uZW50Py5yZXNvdXJjZUNvbXBvbmVudCB8fCBudWxsXG4gICAgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC8vIFVwZGF0ZWQgZnJvbSBMb2FkaW5nTWl4aW4gdGhyb3VnaCBgc2V0TG9hZGluZyhpc0xvYWRpbmcpYDpcbiAgICAgIGlzTG9hZGluZzogZmFsc2UsXG4gICAgICAvLyBOT1RFOiBEYXRhIGlzIHNoYXJlZCBhY3Jvc3MgYWxsIHZpZXdzIGJlY2F1c2UgdGhlIHJvdXRlciByZWN5Y2xlcyB0aGVcbiAgICAgIC8vIERpdG9WaWV3IGNvbXBvbmVudC5cbiAgICAgIGRhdGE6IHt9XG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgc2NoZW1hKCkge1xuICAgICAgcmV0dXJuIHRoaXMubWV0YS5zY2hlbWFcbiAgICB9LFxuXG4gICAgbmFtZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYS5uYW1lXG4gICAgfSxcblxuICAgIGlzVmlldygpIHtcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfSxcblxuICAgIGlzU2luZ2xlQ29tcG9uZW50VmlldygpIHtcbiAgICAgIHJldHVybiBpc1NpbmdsZUNvbXBvbmVudFZpZXcodGhpcy5zY2hlbWEpXG4gICAgfSxcblxuICAgIG1haW5Db21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5tYWluU2NoZW1hQ29tcG9uZW50LmdldENvbXBvbmVudEJ5RGF0YVBhdGgodGhpcy5uYW1lKVxuICAgIH0sXG5cbiAgICB2aWV3U2NoZW1hKCkge1xuICAgICAgY29uc3QgeyBjb21wb25lbnQsIC4uLnNjaGVtYSB9ID0gdGhpcy5zY2hlbWFcbiAgICAgIC8vIFRyYW5zbGF0ZSBzaW5nbGUtY29tcG9uZW50IHNjaGVtYXMgaW50byBtdWx0aS1jb21wb25lbnQgc2NoZW1hcyxcbiAgICAgIC8vIHNvIHRoZXkgY2FuIGJlIHJlbmRlcmVkIGRpcmVjdGx5IHRocm91Z2ggRGl0b1NjaGVtYSBhbHNvOlxuICAgICAgcmV0dXJuIHRoaXMuaXNTaW5nbGVDb21wb25lbnRWaWV3XG4gICAgICAgID8ge1xuICAgICAgICAgICAgLi4uc2NoZW1hLFxuICAgICAgICAgICAgY29tcG9uZW50czoge1xuICAgICAgICAgICAgICBbc2NoZW1hLm5hbWVdOiB7XG4gICAgICAgICAgICAgICAgbmFtZTogc2NoZW1hLm5hbWUsXG4gICAgICAgICAgICAgICAgbGFiZWw6IGZhbHNlLFxuICAgICAgICAgICAgICAgIC4uLmNvbXBvbmVudFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICA6IHNjaGVtYVxuICAgIH0sXG5cbiAgICBwcm92aWRlc0RhdGEoKSB7XG4gICAgICByZXR1cm4gc29tZU5lc3RlZFNjaGVtYUNvbXBvbmVudCh0aGlzLnZpZXdTY2hlbWEsIGhhc1Jlc291cmNlKVxuICAgIH1cbiAgfSxcblxuICB3YXRjaDoge1xuICAgICRyb3V0ZToge1xuICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3Z1ZWpzL3Z1ZS1yb3V0ZXIvaXNzdWVzLzMzOTMjaXNzdWVjb21tZW50LTExNTg0NzAxNDlcbiAgICAgIGZsdXNoOiAncG9zdCcsXG4gICAgICBoYW5kbGVyKHRvLCBmcm9tKSB7XG4gICAgICAgIC8vIFNlZSBpZiB0aGUgcm91dGUgY2hhbmdlcyBjb21wbGV0ZWx5LCBhbmQgY2xlYXIgdGhlIGRhdGEgaWYgaXQgZG9lcy5cbiAgICAgICAgaWYgKHRoaXMuaXNGdWxsUm91dGVDaGFuZ2UodG8sIGZyb20pKSB7XG4gICAgICAgICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZVxuICAgICAgICAgIHRoaXMuZGF0YSA9IHt9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIHNldERhdGEoZGF0YSkge1xuICAgICAgdGhpcy5kYXRhID0gZGF0YVxuICAgIH0sXG5cbiAgICBnZXRDaGlsZFBhdGgocGF0aCkge1xuICAgICAgLy8gTGlzdHMgaW5zaWRlIHNpbmdsZS1jb21wb25lbnQgdmlld3MgdXNlIHRoZSB2aWV3J3MgcGF0aCBmb3Igc3ViLXBhdGhzOlxuICAgICAgcmV0dXJuIHRoaXMuaXNTaW5nbGVDb21wb25lbnRWaWV3XG4gICAgICAgID8gdGhpcy5wYXRoXG4gICAgICAgIDogYCR7dGhpcy5wYXRofS8ke3BhdGh9YFxuICAgIH0sXG5cbiAgICBzZXRMb2FkaW5nKGlzTG9hZGluZykge1xuICAgICAgdGhpcy5pc0xvYWRpbmcgPSAhIWlzTG9hZGluZ1xuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiaW1wb3J0IHsgZGVmaW5lQ29tcG9uZW50LCByZWYsIHdhdGNoLCBvblNjb3BlRGlzcG9zZSwgaCB9IGZyb20gJ3Z1ZS1kZW1pJztcbmltcG9ydCB7IGNyZWF0ZUZvY3VzVHJhcCB9IGZyb20gJ2ZvY3VzLXRyYXAnO1xuaW1wb3J0IHsgdW5yZWZFbGVtZW50IH0gZnJvbSAnQHZ1ZXVzZS9jb3JlJztcblxuY29uc3QgVXNlRm9jdXNUcmFwID0gLyogQF9fUFVSRV9fICovIC8qICNfX1BVUkVfXyAqLyBkZWZpbmVDb21wb25lbnQoe1xuICBuYW1lOiBcIlVzZUZvY3VzVHJhcFwiLFxuICBwcm9wczogW1wiYXNcIiwgXCJvcHRpb25zXCJdLFxuICBzZXR1cChwcm9wcywgeyBzbG90cyB9KSB7XG4gICAgbGV0IHRyYXA7XG4gICAgY29uc3QgdGFyZ2V0ID0gcmVmKCk7XG4gICAgY29uc3QgYWN0aXZhdGUgPSAoKSA9PiB0cmFwICYmIHRyYXAuYWN0aXZhdGUoKTtcbiAgICBjb25zdCBkZWFjdGl2YXRlID0gKCkgPT4gdHJhcCAmJiB0cmFwLmRlYWN0aXZhdGUoKTtcbiAgICB3YXRjaChcbiAgICAgICgpID0+IHVucmVmRWxlbWVudCh0YXJnZXQpLFxuICAgICAgKGVsKSA9PiB7XG4gICAgICAgIGlmICghZWwpXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB0cmFwID0gY3JlYXRlRm9jdXNUcmFwKGVsLCBwcm9wcy5vcHRpb25zIHx8IHt9KTtcbiAgICAgICAgYWN0aXZhdGUoKTtcbiAgICAgIH0sXG4gICAgICB7IGZsdXNoOiBcInBvc3RcIiB9XG4gICAgKTtcbiAgICBvblNjb3BlRGlzcG9zZSgoKSA9PiBkZWFjdGl2YXRlKCkpO1xuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBpZiAoc2xvdHMuZGVmYXVsdClcbiAgICAgICAgcmV0dXJuIGgocHJvcHMuYXMgfHwgXCJkaXZcIiwgeyByZWY6IHRhcmdldCB9LCBzbG90cy5kZWZhdWx0KCkpO1xuICAgIH07XG4gIH1cbn0pO1xuXG5leHBvcnQgeyBVc2VGb2N1c1RyYXAgfTtcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4uZGl0by1kaWFsb2coXG4gIHJlZj1cImRpYWxvZ1wiXG4gIHJvbGU9XCJkaWFsb2dcIlxuICBhcmlhLWV4cGFuZGVkPVwidHJ1ZVwiXG4gIGFyaWEtbW9kYWw9XCJ0cnVlXCJcbiAgOnN0eWxlPVwieyAnLS13aWR0aCc6IHNldHRpbmdzLndpZHRoID8gYCR7c2V0dGluZ3Mud2lkdGh9cHhgIDogbnVsbCB9XCJcbiAgQG1vdXNldXA9XCJvbk1vdXNlVXBcIlxuKVxuICBVc2VGb2N1c1RyYXAuZGl0by1kaWFsb2dfX2ZvY3VzLXRyYXAoOm9wdGlvbnM9XCJmb2N1c1RyYXBPcHRpb25zXCIpXG4gICAgZm9ybS5kaXRvLXNjcm9sbC1wYXJlbnQoXG4gICAgICBAc3VibWl0LnByZXZlbnQ9XCJzdWJtaXRcIlxuICAgIClcbiAgICAgIC8vIEFkZCBhbiBpbnZpc2libGUgYnV0dG9uIHRoYXQgcHJldmVudHMgdGhlIGNsZWFyYWJsZSBidXR0b25zIGZyb20gYmVpbmdcbiAgICAgIC8vIHByZXNzZWQgd2hlbiB0aGUgdXNlciBwcmVzc2VzIHRoZSBFbnRlciBrZXk6XG4gICAgICBidXR0b24oXG4gICAgICAgIHYtc2hvdz1cImZhbHNlXCJcbiAgICAgIClcbiAgICAgIERpdG9TY2hlbWEoXG4gICAgICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgICAgICA6ZGF0YT1cImRpYWxvZ0RhdGFcIlxuICAgICAgICBwYWRkaW5nPVwicm9vdFwiXG4gICAgICAgIHNjcm9sbGFibGVcbiAgICAgICAgZ2VuZXJhdGVMYWJlbHNcbiAgICAgIClcbiAgICAgICAgdGVtcGxhdGUoI2J1dHRvbnMpXG4gICAgICAgICAgRGl0b0J1dHRvbnMuZGl0by1idXR0b25zLWxhcmdlKFxuICAgICAgICAgICAgOmJ1dHRvbnM9XCJidXR0b25TY2hlbWFzXCJcbiAgICAgICAgICAgIDpkYXRhPVwiZGlhbG9nRGF0YVwiXG4gICAgICAgICAgKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCB7IGNsb25lIH0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgRG9tTWl4aW4gZnJvbSAnLi4vbWl4aW5zL0RvbU1peGluLmpzJ1xuaW1wb3J0IHsgZ2V0QnV0dG9uU2NoZW1hcyB9IGZyb20gJy4uL3V0aWxzL3NjaGVtYS5qcydcbmltcG9ydCB7IFVzZUZvY3VzVHJhcCB9IGZyb20gJ0B2dWV1c2UvaW50ZWdyYXRpb25zL3VzZUZvY3VzVHJhcC9jb21wb25lbnQnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnRGl0b0RpYWxvZycsIHtcbiAgbWl4aW5zOiBbRG9tTWl4aW5dLFxuICBjb21wb25lbnRzOiB7IFVzZUZvY3VzVHJhcCB9LFxuICBlbWl0czogWydyZW1vdmUnXSxcblxuICBwcm92aWRlKCkge1xuICAgIHJldHVybiB7XG4gICAgICAkZGlhbG9nQ29tcG9uZW50OiAoKSA9PiB0aGlzXG4gICAgfVxuICB9LFxuXG4gIHByb3BzOiB7XG4gICAgY29tcG9uZW50czogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgYnV0dG9uczogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgcHJvbWlzZTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgZGF0YTogeyB0eXBlOiBPYmplY3QsIGRlZmF1bHQ6ICgpID0+ICh7fSkgfSxcbiAgICBzZXR0aW5nczoge1xuICAgICAgdHlwZTogT2JqZWN0LFxuICAgICAgZGVmYXVsdDogKCkgPT4gKHtcbiAgICAgICAgd2lkdGg6IDQ4MCxcbiAgICAgICAgY2xpY2tUb0Nsb3NlOiBmYWxzZVxuICAgICAgfSlcbiAgICB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICAvLyBNYWtlIHN1cmUgZGlhbG9nIGRhdGEgY29udGFpbnMgYWxsIHRoZSBleHBlY3RlZCBrZXlzXG4gICAgY29uc3QgZGlhbG9nRGF0YSA9IGNsb25lKHRoaXMuZGF0YSlcbiAgICBmb3IgKGNvbnN0IGtleSBpbiB0aGlzLmNvbXBvbmVudHMpIHtcbiAgICAgIGlmICghKGtleSBpbiBkaWFsb2dEYXRhKSkge1xuICAgICAgICBkaWFsb2dEYXRhW2tleV0gPSBudWxsXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICBkaWFsb2dEYXRhXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgZGlhbG9nQ29tcG9uZW50KCkge1xuICAgICAgcmV0dXJuIHRoaXNcbiAgICB9LFxuXG4gICAgc2NoZW1hKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdHlwZTogJ2RpYWxvZycsXG4gICAgICAgIGNvbXBvbmVudHM6IHRoaXMuY29tcG9uZW50c1xuICAgICAgfVxuICAgIH0sXG5cbiAgICBidXR0b25TY2hlbWFzKCkge1xuICAgICAgcmV0dXJuIE9iamVjdC5mcm9tRW50cmllcyhcbiAgICAgICAgT2JqZWN0LmVudHJpZXMoZ2V0QnV0dG9uU2NoZW1hcyh0aGlzLmJ1dHRvbnMpKS5tYXAoXG4gICAgICAgICAgLy8gUHJvY2VzcyB0aGUgYnV0dG9uIHNjaGVtYXMgdG8gYWRkIGRlZmF1bHQgY2xpY2sgZXZlbnRzXG4gICAgICAgICAgLy8gZm9yIGJvdGggJ3N1Ym1pdCcgYW5kICdjYW5jZWwnIGJ1dHRvbnM6XG4gICAgICAgICAgKFtrZXksIHNjaGVtYV0pID0+IHtcbiAgICAgICAgICAgIGlmIChrZXkgPT09ICdjYW5jZWwnICYmICFzY2hlbWEuZXZlbnRzKSB7XG4gICAgICAgICAgICAgIHNjaGVtYSA9IHtcbiAgICAgICAgICAgICAgICAuLi5zY2hlbWEsXG4gICAgICAgICAgICAgICAgZXZlbnRzOiB7XG4gICAgICAgICAgICAgICAgICBjbGljazogKCkgPT4gdGhpcy5jYW5jZWwoKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIFtrZXksIHNjaGVtYV1cbiAgICAgICAgICB9XG4gICAgICAgIClcbiAgICAgIClcbiAgICB9LFxuXG4gICAgZm9jdXNUcmFwT3B0aW9ucygpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGltbWVkaWF0ZTogdHJ1ZSxcbiAgICAgICAgZmFsbGJhY2tGb2N1czogKCkgPT4gdGhpcy4kcmVmcy5kaWFsb2csXG4gICAgICAgIG9uRGVhY3RpdmF0ZTogdGhpcy5jYW5jZWxcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgaGFzQnV0dG9ucygpIHtcbiAgICAgIHJldHVybiBPYmplY3Qua2V5cyh0aGlzLmJ1dHRvblNjaGVtYXMpLmxlbmd0aCA+IDBcbiAgICB9LFxuXG4gICAgaGFzQ2FuY2VsKCkge1xuICAgICAgcmV0dXJuICEhdGhpcy5idXR0b25TY2hlbWFzLmNhbmNlbFxuICAgIH1cbiAgfSxcblxuICBtb3VudGVkKCkge1xuICAgIHRoaXMuZG9tT24od2luZG93LCB7XG4gICAgICBrZXl1cDogZXZlbnQgPT4ge1xuICAgICAgICBpZiAoKHRoaXMuaGFzQ2FuY2VsIHx8ICF0aGlzLmhhc0J1dHRvbnMpICYmIGV2ZW50LmtleUNvZGUgPT09IDI3KSB7XG4gICAgICAgICAgdGhpcy5jYW5jZWwoKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSlcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgcmVtb3ZlKCkge1xuICAgICAgdGhpcy4kZW1pdCgncmVtb3ZlJylcbiAgICB9LFxuXG4gICAgcmVzb2x2ZSh2YWx1ZSkge1xuICAgICAgdGhpcy5wcm9taXNlLnJlc29sdmUodmFsdWUpXG4gICAgICB0aGlzLnJlbW92ZSgpXG4gICAgfSxcblxuICAgIHJlamVjdCh2YWx1ZSkge1xuICAgICAgdGhpcy5wcm9taXNlLnJlamVjdCh2YWx1ZSlcbiAgICAgIHRoaXMucmVtb3ZlKClcbiAgICB9LFxuXG4gICAgc3VibWl0KCkge1xuICAgICAgdGhpcy5yZXNvbHZlKHRoaXMuZGlhbG9nRGF0YSlcbiAgICB9LFxuXG4gICAgY2FuY2VsKCkge1xuICAgICAgLy8gV2hlbiBjYW5jZWxsaW5nLCByZXNvbHZlIGFzIGB1bmRlZmluZWRgIHNvIHdlIGNhbiBoYXZlIGRpYWxvZ3NcbiAgICAgIC8vIHJldHVybmluZyBudWxsIGFzIGEgZGVmaW5lZCB2YWx1ZSBhcyB3ZWxsLlxuICAgICAgdGhpcy5yZXNvbHZlKHVuZGVmaW5lZClcbiAgICB9LFxuXG4gICAgY2xvc2UoKSB7XG4gICAgICB0aGlzLmNhbmNlbCgpXG4gICAgfSxcblxuICAgIG9uTW91c2VVcCgpIHtcbiAgICAgIGlmICh0aGlzLnNldHRpbmdzLmNsaWNrVG9DbG9zZSkge1xuICAgICAgICB0aGlzLmNsb3NlKClcbiAgICAgIH1cbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by1kaWFsb2cge1xuICBwb3NpdGlvbjogZml4ZWQ7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGluc2V0OiAwO1xuICB6LWluZGV4OiAkei1pbmRleC1kaWFsb2c7XG4gIHBhZGRpbmc6ICRjb250ZW50LXBhZGRpbmc7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAvLyBQcmV2ZW50IHNjcm9sbGluZyBvZiB0aGUgcGFnZSBiZWhpbmQgdGhlIGRpYWxvZzpcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjIpO1xuXG4gICZfX2ZvY3VzLXRyYXAge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgbWF4LWhlaWdodDogMTAwJTtcbiAgfVxuXG4gIC8vIFRPRE86IGAmX19pbm5lcmBcbiAgZm9ybSB7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICBiYWNrZ3JvdW5kOiB3aGl0ZTtcbiAgICBib3JkZXItcmFkaXVzOiAkYm9yZGVyLXJhZGl1cztcbiAgICBtYXgtd2lkdGg6IHZhcigtLXdpZHRoLCA0ODBweCk7XG4gICAgbWF4LWhlaWdodDogMTAwJTtcbiAgICBib3gtc2hhZG93OiAwIDIwcHggNjBweCAtMnB4IHJnYmEoMjcsIDMzLCA1OCwgMC40KTtcbiAgfVxufVxuXG4uZGl0by1kaWFsb2ctZW50ZXItYWN0aXZlLFxuLmRpdG8tZGlhbG9nLWxlYXZlLWFjdGl2ZSB7XG4gIHRyYW5zaXRpb246IG9wYWNpdHkgMC4xNXM7XG5cbiAgZm9ybSB7XG4gICAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDAuMjVzO1xuICB9XG59XG5cbi5kaXRvLWRpYWxvZy1lbnRlci1mcm9tLFxuLmRpdG8tZGlhbG9nLWxlYXZlLXRvIHtcbiAgb3BhY2l0eTogMDtcblxuICBmb3JtIHtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTIwcHgpO1xuICB9XG59XG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbi5kaXRvLXJvb3QoXG4gIDpkYXRhLWFnZW50LWJyb3dzZXI9XCJhcHBTdGF0ZS5hZ2VudC5icm93c2VyXCJcbiAgOmRhdGEtYWdlbnQtcGxhdGZvcm09XCJhcHBTdGF0ZS5hZ2VudC5wbGF0Zm9ybVwiXG4gIDpkYXRhLWFnZW50LXZlcnNpb249XCJhcHBTdGF0ZS5hZ2VudC52ZXJzaW9uTnVtYmVyXCJcbilcbiAgVHJhbnNpdGlvbihuYW1lPVwiZGl0by1kcmFnXCIpXG4gICAgLmRpdG8tZHJhZy1vdmVybGF5KFxuICAgICAgdi1pZj1cImlzRHJhZ2dpbmdGaWxlc1wiXG4gICAgKVxuICBUcmFuc2l0aW9uR3JvdXAobmFtZT1cImRpdG8tZGlhbG9nXCIpXG4gICAgRGl0b0RpYWxvZyhcbiAgICAgIHYtZm9yPVwiKGRpYWxvZywga2V5KSBpbiBkaWFsb2dzXCJcbiAgICAgIDprZXk9XCJrZXlcIlxuICAgICAgOmNvbXBvbmVudHM9XCJkaWFsb2cuY29tcG9uZW50c1wiXG4gICAgICA6YnV0dG9ucz1cImRpYWxvZy5idXR0b25zXCJcbiAgICAgIDpwcm9taXNlPVwiZGlhbG9nLnByb21pc2VcIlxuICAgICAgOmRhdGE9XCJkaWFsb2cuZGF0YVwiXG4gICAgICA6c2V0dGluZ3M9XCJkaWFsb2cuc2V0dGluZ3NcIlxuICAgICAgQHJlbW92ZT1cInJlbW92ZURpYWxvZyhrZXkpXCJcbiAgICApXG4gIERpdG9OYXZpZ2F0aW9uXG4gIG1haW4uZGl0by1wYWdlLmRpdG8tc2Nyb2xsLXBhcmVudChcbiAgICB2LXJlc2l6ZT1cIm9uUmVzaXplUGFnZVwiXG4gICAgOmNsYXNzPVwicGFnZUNsYXNzZXNcIlxuICApXG4gICAgRGl0b0hlYWRlcihcbiAgICAgIDpzcGlubmVyPVwib3B0aW9ucy5zcGlubmVyXCJcbiAgICAgIDppc0xvYWRpbmc9XCJpc0xvYWRpbmdcIlxuICAgIClcbiAgICBSb3V0ZXJWaWV3XG4gIERpdG9TaWRlYmFyXG4gICAgRGl0b0FjY291bnQoXG4gICAgICB2LWlmPVwidXNlclwiXG4gICAgKVxuICAgIGEuZGl0by1sb2dpbihcbiAgICAgIHYtZWxzZS1pZj1cImFsbG93TG9naW5cIlxuICAgICAgQGNsaWNrPVwicm9vdENvbXBvbmVudC5sb2dpbigpXCJcbiAgICApXG4gICAgICBzcGFuIExvZ2luXG4gIERpdG9Ob3RpZmljYXRpb25zKHJlZj1cIm5vdGlmaWNhdGlvbnNcIilcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgeyBkZWxlZ2F0ZSBhcyB0aXBweURlbGVnYXRlIH0gZnJvbSAndGlwcHkuanMnXG5pbXBvcnQgeyBtYXBDb25jdXJyZW50bHkgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCBEb21NaXhpbiBmcm9tICcuLi9taXhpbnMvRG9tTWl4aW4uanMnXG5pbXBvcnQgRGl0b1VzZXIgZnJvbSAnLi4vRGl0b1VzZXIuanMnXG5pbXBvcnQgRGl0b1ZpZXcgZnJvbSAnLi4vY29tcG9uZW50cy9EaXRvVmlldy52dWUnXG5pbXBvcnQgRGl0b0RpYWxvZyBmcm9tICcuL0RpdG9EaWFsb2cudnVlJ1xuaW1wb3J0IHtcbiAgcHJvY2Vzc1ZpZXcsXG4gIHJlc29sdmVWaWV3cyxcbiAgcHJvY2Vzc1NjaGVtYUNvbXBvbmVudHNcbn0gZnJvbSAnLi4vdXRpbHMvc2NoZW1hLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ0RpdG9Sb290Jywge1xuICBtaXhpbnM6IFtEb21NaXhpbl0sXG4gIGNvbXBvbmVudHM6IHsgRGl0b0RpYWxvZyB9LFxuXG4gIHByb3ZpZGUoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICR2aWV3czogKCkgPT4gdGhpcy5yZXNvbHZlZFZpZXdzXG4gICAgfVxuICB9LFxuXG4gIHByb3BzOiB7XG4gICAgdW5yZXNvbHZlZFZpZXdzOiB7IHR5cGU6IFtPYmplY3QsIEZ1bmN0aW9uLCBQcm9taXNlXSwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBvcHRpb25zOiB7IHR5cGU6IE9iamVjdCwgZGVmYXVsdDogKCkgPT4gKHt9KSB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgcmVzb2x2ZWRWaWV3czoge30sXG4gICAgICByZW1vdmVSb3V0ZXM6IG51bGwsXG4gICAgICBkaWFsb2dzOiB7fSxcbiAgICAgIHBhZ2VXaWR0aDogMCxcbiAgICAgIGxvYWRpbmdDb3VudDogMCxcbiAgICAgIGFsbG93TG9naW46IGZhbHNlLFxuICAgICAgaXNEcmFnZ2luZ0ZpbGVzOiBmYWxzZVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIG5vdGlmaWNhdGlvbnMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5pc01vdW50ZWQgJiYgdGhpcy4kcmVmcy5ub3RpZmljYXRpb25zXG4gICAgfSxcblxuICAgIGlzTG9hZGluZygpIHtcbiAgICAgIHJldHVybiB0aGlzLmxvYWRpbmdDb3VudCA+IDBcbiAgICB9LFxuXG4gICAgcGFnZUNsYXNzZXMoKSB7XG4gICAgICBjb25zdCBwcmVmaXggPSAnZGl0by1wYWdlJ1xuICAgICAgLy8gTk9URTogS2VlcCBzeW5jZWQgd2l0aCAkY29udGVudC13aWR0aCBpbiBTQ1NTOlxuICAgICAgY29uc3QgY29udGVudFdpZHRoID0gOTAwXG4gICAgICByZXR1cm4gW1xuICAgICAgICB0aGlzLmFwcFN0YXRlLnBhZ2VDbGFzcyxcbiAgICAgICAge1xuICAgICAgICAgIFtgJHtwcmVmaXh9LS13aWR0aC04MGBdOiB0aGlzLnBhZ2VXaWR0aCA8PSBjb250ZW50V2lkdGggKiAwLjgsXG4gICAgICAgICAgW2Ake3ByZWZpeH0tLXdpZHRoLTYwYF06IHRoaXMucGFnZVdpZHRoIDw9IGNvbnRlbnRXaWR0aCAqIDAuNlxuICAgICAgICB9XG4gICAgICBdXG4gICAgfVxuICB9LFxuXG4gIGNyZWF0ZWQoKSB7XG4gICAgdGhpcy5hcHBTdGF0ZS50aXRsZSA9IGRvY3VtZW50LnRpdGxlIHx8ICdEaXRvLmpzIEFkbWluJ1xuICAgIC8vIFdpdGggaG90LXJlbG9hZGluZywgaXQgbG9va3MgbGlrZSBkZXN0cm95ZWQgaG9va3MgYXJlbid0IGFsd2F5cyBjYWxsZWRcbiAgICAvLyBmb3Igcm91dGUgY29tcG9uZW50cyBzbyByZXNldCB0aGUgYXJyYXkgb2YgcmVnaXN0ZXJlZCBjb21wb25lbnRzIGluc3RlYWQuXG4gICAgdGhpcy5hcHBTdGF0ZS5yb3V0ZUNvbXBvbmVudHMgPSBbXVxuICB9LFxuXG4gIGFzeW5jIG1vdW50ZWQoKSB7XG4gICAgdGhpcy5zZXR1cERyYWdBbmREcm9wKClcblxuICAgIHRpcHB5RGVsZWdhdGUodGhpcy4kZWwsIHtcbiAgICAgIHRhcmdldDogJy5kaXRvLWluZm8nLFxuICAgICAgdGhlbWU6ICdpbmZvJyxcbiAgICAgIGFwcGVuZFRvOiBub2RlID0+IG5vZGUuY2xvc2VzdCgnLmRpdG8tcGFuZScpLFxuICAgICAgYW5pbWF0aW9uOiAnc2hpZnQtYXdheS1zdWJ0bGUnLFxuICAgICAgaW50ZXJhY3RpdmU6IHRydWUsXG4gICAgICBkZWxheTogMjUwLFxuICAgICAgekluZGV4OiAxLFxuICAgICAgb25DcmVhdGUoaW5zdGFuY2UpIHtcbiAgICAgICAgaW5zdGFuY2Uuc2V0Q29udGVudChpbnN0YW5jZS5yZWZlcmVuY2UuZGF0YXNldC5pbmZvKVxuICAgICAgfVxuICAgIH0pXG5cbiAgICAvLyBDbGVhciB0aGUgbGFiZWwgbWFya2VkIGFzIGFjdGl2ZSBvbiBhbGwgbW91c2UgYW5kIGtleWJvYXJkIGV2ZW50cywgZXhjZXB0XG4gICAgLy8gdGhlIG9uZXMgdGhhdCBEaXRvTGFiZWwgaXRzZWxmIGludGVyY2VwdHMuXG4gICAgdGhpcy5kb21Pbihkb2N1bWVudCwge1xuICAgICAgY2xpY2s6IGV2ZW50ID0+IHtcbiAgICAgICAgaWYgKCFldmVudC50YXJnZXQuY2xvc2VzdCgnLmRpdG8tbGFiZWwnKSkge1xuICAgICAgICAgIHRoaXMuYXBwU3RhdGUuYWN0aXZlTGFiZWwgPSBudWxsXG4gICAgICAgIH1cbiAgICAgIH0sXG5cbiAgICAgIGtleXVwOiBldmVudCA9PiB7XG4gICAgICAgIGlmIChldmVudC5jb2RlID09PSAnVGFiJykge1xuICAgICAgICAgIHRoaXMuYXBwU3RhdGUuYWN0aXZlTGFiZWwgPSBudWxsXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KVxuXG4gICAgdHJ5IHtcbiAgICAgIHRoaXMuYWxsb3dMb2dpbiA9IGZhbHNlXG4gICAgICBpZiAoYXdhaXQgdGhpcy5mZXRjaFVzZXIoKSkge1xuICAgICAgICBhd2FpdCB0aGlzLnJlc29sdmVWaWV3cygpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhd2FpdCB0aGlzLmxvZ2luKClcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKVxuICAgIH1cbiAgICB0aGlzLmFsbG93TG9naW4gPSB0cnVlXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIHNldHVwRHJhZ0FuZERyb3AoKSB7XG4gICAgICAvLyBUaGlzIGNvZGUgb25seSBoYXBwZW5zIHRoZSB2aXN1YWwgZWZmZWN0cyBhcm91bmQgZHJhZ2dpbmcgYW5kIGRyb3BwaW5nXG4gICAgICAvLyBmaWxlcyBpbnRvIGEgYERpdG9UeXBlVXBsb2FkYCBjb21wb25lbnQuIFRoZSBhY3R1YWwgdXBsb2FkaW5nIGlzXG4gICAgICAvLyBoYW5kbGVkIGJ5IHRoZSBgRGl0b1R5cGVVcGxvYWRgIGNvbXBvbmVudCBpdHNlbGYuXG5cbiAgICAgIGxldCBkcmFnQ291bnQgPSAwXG4gICAgICBsZXQgdXBsb2FkcyA9IFtdXG5cbiAgICAgIGNvbnN0IHRvZ2dsZURyb3BUYXJnZXRDbGFzcyA9IGVuYWJsZWQgPT4ge1xuICAgICAgICBmb3IgKGNvbnN0IHVwbG9hZCBvZiB1cGxvYWRzKSB7XG4gICAgICAgICAgdXBsb2FkXG4gICAgICAgICAgICAuY2xvc2VzdCgnLmRpdG8tY29udGFpbmVyJylcbiAgICAgICAgICAgIC5jbGFzc0xpc3QudG9nZ2xlKCdkaXRvLWRyb3AtdGFyZ2V0JywgZW5hYmxlZClcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWVuYWJsZWQpIHtcbiAgICAgICAgICB1cGxvYWRzID0gW11cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjb25zdCBzZXREcmFnZ2luZ0ZpbGVzID0gZW5hYmxlZCA9PiB7XG4gICAgICAgIHRoaXMuaXNEcmFnZ2luZ0ZpbGVzID0gZW5hYmxlZFxuICAgICAgICBpZiAoZW5hYmxlZCkge1xuICAgICAgICAgIHRvZ2dsZURyb3BUYXJnZXRDbGFzcyh0cnVlKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gdG9nZ2xlRHJvcFRhcmdldENsYXNzKGZhbHNlKSwgMTUwKVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHRoaXMuZG9tT24oZG9jdW1lbnQsIHtcbiAgICAgICAgZHJhZ2VudGVyOiBldmVudCA9PiB7XG4gICAgICAgICAgaWYgKCFkcmFnQ291bnQgJiYgZXZlbnQuZGF0YVRyYW5zZmVyKSB7XG4gICAgICAgICAgICB1cGxvYWRzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLmRpdG8tdXBsb2FkJylcbiAgICAgICAgICAgIGNvbnN0IGhhc1VwbG9hZHMgPSB1cGxvYWRzLmxlbmd0aCA+IDBcbiAgICAgICAgICAgIGV2ZW50LmRhdGFUcmFuc2Zlci5lZmZlY3RBbGxvd2VkID0gaGFzVXBsb2FkcyA/ICdjb3B5JyA6ICdub25lJ1xuICAgICAgICAgICAgaWYgKGhhc1VwbG9hZHMpIHtcbiAgICAgICAgICAgICAgc2V0RHJhZ2dpbmdGaWxlcyh0cnVlKVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKVxuICAgICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgZHJhZ0NvdW50KytcbiAgICAgICAgfSxcblxuICAgICAgICBkcmFnbGVhdmU6IGV2ZW50ID0+IHtcbiAgICAgICAgICBkcmFnQ291bnQtLVxuICAgICAgICAgIGlmICghZHJhZ0NvdW50ICYmIGV2ZW50LmRhdGFUcmFuc2Zlcikge1xuICAgICAgICAgICAgc2V0RHJhZ2dpbmdGaWxlcyhmYWxzZSlcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG5cbiAgICAgICAgZHJhZ292ZXI6IGV2ZW50ID0+IHtcbiAgICAgICAgICBpZiAoZXZlbnQuZGF0YVRyYW5zZmVyKSB7XG4gICAgICAgICAgICBjb25zdCBjYW5Ecm9wID0gZXZlbnQudGFyZ2V0LmNsb3Nlc3QoXG4gICAgICAgICAgICAgICcuZGl0by1jb250YWluZXI6aGFzKC5kaXRvLXVwbG9hZCknXG4gICAgICAgICAgICApXG4gICAgICAgICAgICBldmVudC5kYXRhVHJhbnNmZXIuZHJvcEVmZmVjdCA9IGNhbkRyb3AgPyAnY29weScgOiAnbm9uZSdcbiAgICAgICAgICAgIGlmICghY2FuRHJvcCkge1xuICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpXG4gICAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuXG4gICAgICAgIGRyb3A6IGV2ZW50ID0+IHtcbiAgICAgICAgICBkcmFnQ291bnQgPSAwXG4gICAgICAgICAgaWYgKGV2ZW50LmRhdGFUcmFuc2Zlcikge1xuICAgICAgICAgICAgc2V0RHJhZ2dpbmdGaWxlcyhmYWxzZSlcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfSxcblxuICAgIG5vdGlmeSh7IHR5cGUgPSAnaW5mbycsIHRpdGxlLCB0ZXh0IH0gPSB7fSkge1xuICAgICAgdGhpcy5ub3RpZmljYXRpb25zLm5vdGlmeSh7IHR5cGUsIHRpdGxlLCB0ZXh0IH0pXG4gICAgfSxcblxuICAgIGNsb3NlTm90aWZpY2F0aW9ucygpIHtcbiAgICAgIHRoaXMubm90aWZpY2F0aW9ucy5kZXN0cm95QWxsKClcbiAgICB9LFxuXG4gICAgcmVnaXN0ZXJMb2FkaW5nKGlzTG9hZGluZykge1xuICAgICAgdGhpcy5sb2FkaW5nQ291bnQgKz0gaXNMb2FkaW5nID8gMSA6IC0xXG4gICAgfSxcblxuICAgIHNob3dEaWFsb2coeyBjb21wb25lbnRzLCBidXR0b25zLCBkYXRhLCBzZXR0aW5ncyB9KSB7XG4gICAgICAvLyBTaG93cyBhIGRpdG8tZGlhbG9nIGNvbXBvbmVudCBhbmQgd3JhcHMgaXQgaW4gYSBwcm9taXNlIHNvIHRoYXQgdGhlXG4gICAgICAvLyBidXR0b25zIGluIHRoZSBkaWFsb2cgY2FuIHVzZSBgZGlhbG9nLnJlc29sdmUoKWAgYW5kIGBkaWFsb2cucmVqZWN0KClgXG4gICAgICAvLyB0byBjbG9zZSB0aGUgbW9kYWwgZGlhbG9nIGFuZCByZXNvbHZlIC8gcmVqZWN0IHRoZSBwcm9taXNlIGF0IG9uY2UuXG4gICAgICByZXR1cm4gbmV3IFByb21pc2UoXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1hc3luYy1wcm9taXNlLWV4ZWN1dG9yXG4gICAgICAgIGFzeW5jIChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAvLyBQcm9jZXNzIGNvbXBvbmVudHMgdG8gcmVzb2x2ZSBhc3luYyBzY2hlbWFzLlxuICAgICAgICAgIGNvbnN0IHJvdXRlcyA9IFtdXG4gICAgICAgICAgYXdhaXQgcHJvY2Vzc1NjaGVtYUNvbXBvbmVudHMoXG4gICAgICAgICAgICB0aGlzLmFwaSxcbiAgICAgICAgICAgIHsgdHlwZTogJ2RpYWxvZycsIGNvbXBvbmVudHMgfSxcbiAgICAgICAgICAgIHJvdXRlcyxcbiAgICAgICAgICAgIDBcbiAgICAgICAgICApXG4gICAgICAgICAgaWYgKHJvdXRlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICAgICdEaWFsb2dzIGRvIG5vdCBzdXBwb3J0IGNvbXBvbmVudHMgdGhhdCBwcm9kdWNlIHJvdXRlcydcbiAgICAgICAgICAgIClcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3Qga2V5ID0gYGRpYWxvZy0keysrZGlhbG9nSWR9YFxuICAgICAgICAgIHRoaXMuZGlhbG9nc1trZXldID0ge1xuICAgICAgICAgICAgY29tcG9uZW50cyxcbiAgICAgICAgICAgIGJ1dHRvbnMsXG4gICAgICAgICAgICBkYXRhLFxuICAgICAgICAgICAgc2V0dGluZ3MsXG4gICAgICAgICAgICBwcm9taXNlOiB7IHJlc29sdmUsIHJlamVjdCB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICApXG4gICAgfSxcblxuICAgIHJlbW92ZURpYWxvZyhrZXkpIHtcbiAgICAgIGRlbGV0ZSB0aGlzLmRpYWxvZ3Nba2V5XVxuICAgIH0sXG5cbiAgICBhc3luYyBsb2dpbigpIHtcbiAgICAgIHRoaXMuYWxsb3dMb2dpbiA9IHRydWVcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgYWRkaXRpb25hbENvbXBvbmVudHMsXG4gICAgICAgIHJlZGlyZWN0QWZ0ZXJMb2dpblxuICAgICAgfSA9IHRoaXMub3B0aW9ucy5sb2dpbiB8fCB7fVxuICAgICAgY29uc3QgbG9naW5EYXRhID0gYXdhaXQgdGhpcy5zaG93RGlhbG9nKHtcbiAgICAgICAgY29tcG9uZW50czoge1xuICAgICAgICAgIHVzZXJuYW1lOiB7XG4gICAgICAgICAgICB0eXBlOiAndGV4dCcsXG4gICAgICAgICAgICBhdXRvZm9jdXM6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIHBhc3N3b3JkOiB7XG4gICAgICAgICAgICB0eXBlOiAncGFzc3dvcmQnXG4gICAgICAgICAgfSxcbiAgICAgICAgICAuLi5hZGRpdGlvbmFsQ29tcG9uZW50c1xuICAgICAgICB9LFxuICAgICAgICBidXR0b25zOiB7XG4gICAgICAgICAgY2FuY2VsOiB7XG4gICAgICAgICAgICB0eXBlOiAnYnV0dG9uJyxcbiAgICAgICAgICAgIHRleHQ6ICdDYW5jZWwnXG4gICAgICAgICAgICAvLyBOT1RFOiBUaGUgY2xpY2sgZXZlbnQgaXMgYWRkZWQgaW4gRGl0b0RpYWxvZy5idXR0b25TY2hlbWFzKClcbiAgICAgICAgICB9LFxuXG4gICAgICAgICAgbG9naW46IHtcbiAgICAgICAgICAgIHR5cGU6ICdzdWJtaXQnLFxuICAgICAgICAgICAgdGV4dDogJ0xvZ2luJ1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSlcbiAgICAgIGlmIChsb2dpbkRhdGEpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuc2VuZFJlcXVlc3Qoe1xuICAgICAgICAgICAgcmVzb3VyY2U6IHRoaXMuYXBpLnVzZXJzLmxvZ2luLFxuICAgICAgICAgICAgZGF0YTogbG9naW5EYXRhLFxuICAgICAgICAgICAgaW50ZXJuYWw6IHRydWVcbiAgICAgICAgICB9KVxuICAgICAgICAgIGlmIChyZWRpcmVjdEFmdGVyTG9naW4pIHtcbiAgICAgICAgICAgIGxvY2F0aW9uLnJlcGxhY2UocmVkaXJlY3RBZnRlckxvZ2luKVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnNldFVzZXIocmVzcG9uc2UuZGF0YS51c2VyKVxuICAgICAgICAgICAgYXdhaXQgdGhpcy5yZXNvbHZlVmlld3MoKVxuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgY29uc3QgZXJyb3IgPSBlcnIucmVzcG9uc2U/LmRhdGE/LmVycm9yXG4gICAgICAgICAgdGhpcy5ub3RpZnkoe1xuICAgICAgICAgICAgdHlwZTogJ2Vycm9yJyxcbiAgICAgICAgICAgIHRpdGxlOiAnQXV0aGVudGljYXRpb24gRXJyb3InLFxuICAgICAgICAgICAgdGV4dDogZXJyb3IgfHwgZXJyXG4gICAgICAgICAgfSlcbiAgICAgICAgICBpZiAoIWVycm9yKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGVyciwgZXJyLnJlc3BvbnNlKVxuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLmxvZ2luKClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBuYXZpZ2F0ZUhvbWUoKSB7XG4gICAgICByZXR1cm4gdGhpcy5uYXZpZ2F0ZSgnLycpXG4gICAgfSxcblxuICAgIGFzeW5jIGxvZ291dCgpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5zZW5kUmVxdWVzdCh7XG4gICAgICAgICAgcmVzb3VyY2U6IHRoaXMuYXBpLnVzZXJzLmxvZ291dCxcbiAgICAgICAgICBpbnRlcm5hbDogdHJ1ZVxuICAgICAgICB9KVxuICAgICAgICBpZiAocmVzcG9uc2UuZGF0YS5zdWNjZXNzKSB7XG4gICAgICAgICAgdGhpcy5zZXRVc2VyKG51bGwpXG4gICAgICAgICAgdGhpcy5uYXZpZ2F0ZUhvbWUoKVxuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihlcnIpXG4gICAgICB9XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoVXNlcigpIHtcbiAgICAgIGxldCB1c2VyID0gbnVsbFxuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnNlbmRSZXF1ZXN0KHtcbiAgICAgICAgICByZXNvdXJjZTogdGhpcy5hcGkudXNlcnMuc2Vzc2lvbixcbiAgICAgICAgICBpbnRlcm5hbDogdHJ1ZVxuICAgICAgICB9KVxuICAgICAgICB1c2VyID0gcmVzcG9uc2UuZGF0YS51c2VyIHx8IG51bGxcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICB0aGlzLm5vdGlmeSh7XG4gICAgICAgICAgdHlwZTogJ2Vycm9yJyxcbiAgICAgICAgICB0aXRsZTogJ0F1dGhlbnRpY2F0aW9uIEVycm9yJyxcbiAgICAgICAgICB0ZXh0OiBlcnJcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICAgIHRoaXMuc2V0VXNlcih1c2VyKVxuICAgICAgcmV0dXJuIHVzZXJcbiAgICB9LFxuXG4gICAgc2V0VXNlcih1c2VyKSB7XG4gICAgICB0aGlzLmFwcFN0YXRlLnVzZXIgPSAoXG4gICAgICAgIHVzZXIgJiZcbiAgICAgICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKHVzZXIsIERpdG9Vc2VyLnByb3RvdHlwZSlcbiAgICAgIClcbiAgICAgIC8vIENsZWFyIHJlc29sdmVkIHZpZXdzIHdoZW4gdXNlciBpcyBsb2dnZWQgb3V0LlxuICAgICAgaWYgKCF1c2VyKSB7XG4gICAgICAgIHRoaXMucmVzb2x2ZWRWaWV3cyA9IHt9XG4gICAgICAgIHRoaXMubmF2aWdhdGVIb21lKClcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYXN5bmMgZW5zdXJlVXNlcigpIHtcbiAgICAgIGlmICghKGF3YWl0IHRoaXMuZmV0Y2hVc2VyKCkpKSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9naW4oKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBhc3luYyByZXNvbHZlVmlld3MoKSB7XG4gICAgICB0cnkge1xuICAgICAgICB0aGlzLnJlc29sdmVkVmlld3MgPSBhd2FpdCByZXNvbHZlVmlld3ModGhpcy51bnJlc29sdmVkVmlld3MpXG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBpZiAoIWVycm9yLnJlcXVlc3QpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmxvZ2luKClcbiAgICAgIH1cbiAgICAgIC8vIENvbGxlY3QgYWxsIHJvdXRlcyBmcm9tIHRoZSByb290IHNjaGVtYSBjb21wb25lbnRzXG4gICAgICBjb25zdCByb3V0ZXMgPSBhd2FpdCBtYXBDb25jdXJyZW50bHkoXG4gICAgICAgIE9iamVjdC5lbnRyaWVzKHRoaXMucmVzb2x2ZWRWaWV3cyksXG4gICAgICAgIChbbmFtZSwgc2NoZW1hXSkgPT4gcHJvY2Vzc1ZpZXcoRGl0b1ZpZXcsIHRoaXMuYXBpLCBzY2hlbWEsIG5hbWUpXG4gICAgICApXG4gICAgICAvLyBOb3cgdGhhdCB0aGUgcm91dGVzIGFyZSBsb2FkZWQsIHJlcGxhY2UgYWxsIGV4aXN0aW5nIHJvdXRlcyB3aXRoIHRoZVxuICAgICAgLy8gbmV3IHJvdXRlcywgYW5kIHJlc3RvcmUgdGhlIGN1cnJlbnQgcGF0aC5cbiAgICAgIGNvbnN0IHsgZnVsbFBhdGggfSA9IHRoaXMuJHJvdXRlXG4gICAgICB0aGlzLnJlbW92ZVJvdXRlcz8uKClcbiAgICAgIHRoaXMucmVtb3ZlUm91dGVzID0gYWRkUm91dGVzKHRoaXMuJHJvdXRlciwgW1xuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogJ3Jvb3QnLFxuICAgICAgICAgIHBhdGg6ICcvJyxcbiAgICAgICAgICBjb21wb25lbnRzOiB7fVxuICAgICAgICB9LFxuICAgICAgICAuLi5yb3V0ZXMuZmxhdCgpXG4gICAgICBdKVxuICAgICAgdGhpcy4kcm91dGVyLnJlcGxhY2UoZnVsbFBhdGgpXG4gICAgfSxcblxuICAgIG9uUmVzaXplUGFnZSh7IGNvbnRlbnRSZWN0OiB7IHdpZHRoIH0gfSkge1xuICAgICAgdGhpcy5wYWdlV2lkdGggPSB3aWR0aFxuICAgIH1cbiAgfVxufSlcblxubGV0IGRpYWxvZ0lkID0gMFxuXG5mdW5jdGlvbiBhZGRSb3V0ZXMocm91dGVyLCByb3V0ZXMpIHtcbiAgY29uc3QgcmVtb3ZlcnMgPSBbXVxuICBmb3IgKGNvbnN0IHJvdXRlIG9mIHJvdXRlcykge1xuICAgIGNvbnN0IHJlbW92ZSA9IHJvdXRlci5hZGRSb3V0ZShyb3V0ZSlcbiAgICByZW1vdmVycy5wdXNoKHJlbW92ZSlcbiAgfVxuXG4gIHJldHVybiAoKSA9PiB7XG4gICAgZm9yIChjb25zdCByZW1vdmUgb2YgcmVtb3ZlcnMpIHtcbiAgICAgIHJlbW92ZSgpXG4gICAgfVxuICB9XG59XG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvc3R5bGUnO1xuXG4uZGl0by1hcHAsXG4uZGl0by1yb290IHtcbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogMTAwJTtcbiAgZGlzcGxheTogZmxleDtcbn1cblxuLmRpdG8tcGFnZSB7XG4gIC0tbWF4LWNvbnRlbnQtd2lkdGg6ICN7JGNvbnRlbnQtd2lkdGh9O1xuICAtLW1heC1wYWdlLXdpZHRoOiBjYWxjKHZhcigtLW1heC1jb250ZW50LXdpZHRoKSArIDIgKiAjeyRjb250ZW50LXBhZGRpbmd9KTtcblxuICBmbGV4OiAwIDEgdmFyKC0tbWF4LXBhZ2Utd2lkdGgpO1xuICBiYWNrZ3JvdW5kOiAkY29udGVudC1jb2xvci1iYWNrZ3JvdW5kO1xuICBtaW4td2lkdGg6IDAlO1xuICBtYXgtd2lkdGg6IHZhcigtLW1heC1wYWdlLXdpZHRoKTtcbiAgb3ZlcmZsb3c6IHZpc2libGU7IC8vIEZvciAuZGl0by1oZWFkZXIgZnVsbC13aWR0aCBiYWNrZ3JvdW5kLlxuXG4gICYtLXdpZGUge1xuICAgIC0tbWF4LWNvbnRlbnQtd2lkdGg6ICN7JGNvbnRlbnQtd2lkdGgtd2lkZX07XG4gIH1cbn1cblxuLmRpdG8tYWNjb3VudCxcbi5kaXRvLWxvZ2luIHtcbiAgY3Vyc29yOiBwb2ludGVyO1xufVxuXG4uZGl0by1kcmFnLW92ZXJsYXkge1xuICBwb3NpdGlvbjogZml4ZWQ7XG4gIHRvcDogMDtcbiAgbGVmdDogMDtcbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogMTAwJTtcbiAgei1pbmRleDogJHotaW5kZXgtZHJhZy1vdmVybGF5O1xuICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuMjUpO1xuICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgYmFja2Ryb3AtZmlsdGVyOiBibHVyKDhweCk7XG59XG5cbi5kaXRvLWRyb3AtdGFyZ2V0IHtcbiAgLS1zaGFkb3ctYWxwaGE6IDAuMjU7XG5cbiAgYmFja2dyb3VuZDogJGNvbnRlbnQtY29sb3ItYmFja2dyb3VuZDtcbiAgYm9yZGVyLXJhZGl1czogJGJvcmRlci1yYWRpdXM7XG4gIHotaW5kZXg6ICR6LWluZGV4LWRyYWctb3ZlcmxheSArIDE7XG4gIGZpbHRlcjogZHJvcC1zaGFkb3coMCA0cHggOHB4IHJnYmEoMCwgMCwgMCwgdmFyKC0tc2hhZG93LWFscGhhKSkpO1xufVxuXG4uZGl0by1kcmFnLWVudGVyLWFjdGl2ZSxcbi5kaXRvLWRyYWctbGVhdmUtYWN0aXZlIHtcbiAgJGR1cmF0aW9uOiAwLjE1cztcblxuICB0cmFuc2l0aW9uOlxuICAgIG9wYWNpdHkgJGR1cmF0aW9uLFxuICAgIGJhY2tkcm9wLWZpbHRlciAkZHVyYXRpb247XG5cbiAgfiAqIC5kaXRvLWRyb3AtdGFyZ2V0IHtcbiAgICB0cmFuc2l0aW9uOiBmaWx0ZXIgJGR1cmF0aW9uO1xuICB9XG59XG5cbi5kaXRvLWRyYWctZW50ZXItZnJvbSxcbi5kaXRvLWRyYWctbGVhdmUtdG8ge1xuICBvcGFjaXR5OiAwO1xuICBiYWNrZHJvcC1maWx0ZXI6IGJsdXIoMCk7XG5cbiAgfiAqIC5kaXRvLWRyb3AtdGFyZ2V0IHtcbiAgICAtLXNoYWRvdy1hbHBoYTogMDtcbiAgfVxufVxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG51bC5kaXRvLW1lbnUoXG4gIHYtcmVzaXplPVwib25SZXNpemVcIlxuICA6c3R5bGU9XCJ7ICctLXdpZHRoJzogd2lkdGggPyBgJHt3aWR0aH1weGAgOiBudWxsIH1cIlxuKVxuICBsaShcbiAgICB2LWZvcj1cIml0ZW0gaW4gaXRlbXNcIlxuICApXG4gICAgdGVtcGxhdGUoXG4gICAgICB2LWlmPVwic2hvdWxkUmVuZGVyU2NoZW1hKGl0ZW0pXCJcbiAgICApXG4gICAgICBhLmRpdG8tbGluayhcbiAgICAgICAgOmhyZWY9XCJnZXRJdGVtSHJlZihpdGVtKVwiXG4gICAgICAgIDpjbGFzcz1cImdldEl0ZW1DbGFzcyhpdGVtLCAnZGl0by1zdWItbWVudS1saW5rJylcIlxuICAgICAgICBAY2xpY2sucHJldmVudC5zdG9wPVwib25DbGlja0l0ZW0oaXRlbSlcIlxuICAgICAgKSB7eyBnZXRMYWJlbChpdGVtKSB9fVxuICAgICAgRGl0b01lbnUoXG4gICAgICAgIHYtaWY9XCJpdGVtLml0ZW1zXCJcbiAgICAgICAgOmNsYXNzPVwiZ2V0SXRlbUNsYXNzKGl0ZW0sICdkaXRvLXN1Yi1tZW51JylcIlxuICAgICAgICA6aXRlbXM9XCJpdGVtLml0ZW1zXCJcbiAgICAgICAgOnBhdGg9XCJnZXRJdGVtUGF0aChpdGVtLCBmYWxzZSlcIlxuICAgICAgKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnRGl0b01lbnUnLCB7XG4gIHByb3BzOiB7XG4gICAgaXRlbXM6IHtcbiAgICAgIHR5cGU6IFtPYmplY3QsIEFycmF5XSxcbiAgICAgIGRlZmF1bHQ6ICgpID0+IFtdXG4gICAgfSxcbiAgICBwYXRoOiB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBkZWZhdWx0OiAnJ1xuICAgIH1cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICB3aWR0aDogMFxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgb25SZXNpemUoeyBjb250ZW50UmVjdDogeyB3aWR0aCB9IH0pIHtcbiAgICAgIGlmICh3aWR0aCkge1xuICAgICAgICB0aGlzLndpZHRoID0gd2lkdGhcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZ2V0SXRlbUNsYXNzKGl0ZW0sIHN1Yk1lbnVDbGFzcykge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgW3N1Yk1lbnVDbGFzc106ICEhaXRlbS5pdGVtcyxcbiAgICAgICAgJ2RpdG8tYWN0aXZlJzogdGhpcy5pc0FjdGl2ZUl0ZW0oaXRlbSlcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZ2V0SXRlbVBhdGgoaXRlbSwgZmlyc3RDaGlsZCkge1xuICAgICAgY29uc3QgcGF0aCA9IGl0ZW0ucGF0aCA/IGAke3RoaXMucGF0aH0vJHtpdGVtLnBhdGh9YCA6IG51bGxcbiAgICAgIHJldHVybiBmaXJzdENoaWxkICYmIHBhdGggJiYgaXRlbS5pdGVtc1xuICAgICAgICA/IGAke3BhdGh9JHt0aGlzLmdldEl0ZW1QYXRoKE9iamVjdC52YWx1ZXMoaXRlbS5pdGVtcylbMF0sIGZhbHNlKX1gXG4gICAgICAgIDogcGF0aFxuICAgIH0sXG5cbiAgICBnZXRJdGVtSHJlZihpdGVtKSB7XG4gICAgICBjb25zdCBwYXRoID0gdGhpcy5nZXRJdGVtUGF0aChpdGVtLCB0cnVlKVxuICAgICAgcmV0dXJuIHBhdGggPyB0aGlzLiRyb3V0ZXIucmVzb2x2ZShwYXRoKS5ocmVmIDogbnVsbFxuICAgIH0sXG5cbiAgICBpc0FjdGl2ZUl0ZW0oaXRlbSkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgdGhpcy4kcm91dGUucGF0aC5zdGFydHNXaXRoKHRoaXMuZ2V0SXRlbVBhdGgoaXRlbSwgZmFsc2UpKSB8fFxuICAgICAgICBpdGVtLml0ZW1zICYmIE9iamVjdC52YWx1ZXMoaXRlbS5pdGVtcykuc29tZSh0aGlzLmlzQWN0aXZlSXRlbSlcbiAgICAgIClcbiAgICB9LFxuXG4gICAgb25DbGlja0l0ZW0oaXRlbSkge1xuICAgICAgY29uc3QgcGF0aCA9IHRoaXMuZ2V0SXRlbVBhdGgoaXRlbSwgdHJ1ZSlcbiAgICAgIGlmIChwYXRoKSB7XG4gICAgICAgIHRoaXMuJHJvdXRlci5wdXNoKHsgcGF0aCwgZm9yY2U6IHRydWUgfSlcbiAgICAgIH1cbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AdXNlICdzYXNzOmNvbG9yJztcbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5cbi5kaXRvLW1lbnUge1xuICAkaXRlbS1oZWlnaHQ6ICRtZW51LWZvbnQtc2l6ZSArIDIgKiAkbWVudS1wYWRkaW5nLXZlcjtcblxuICBib3JkZXItcmlnaHQ6ICRib3JkZXItc3R5bGU7XG4gIHBhZGRpbmc6IDAgJG1lbnUtc3BhY2luZztcblxuICBsaSB7XG4gICAgJjpoYXMoLmRpdG8tc3ViLW1lbnU6bm90KC5kaXRvLWFjdGl2ZSkpIHtcbiAgICAgIC8vIFBvcC1vdXQgc3ViLW1lbnVzIG9uIGhvdmVyOlxuICAgICAgJjpob3ZlciB7XG4gICAgICAgIC5kaXRvLXN1Yi1tZW51LWxpbmsge1xuICAgICAgICAgIGJhY2tncm91bmQ6ICRjb2xvci1saWdodGVzdDtcbiAgICAgICAgfVxuXG4gICAgICAgIC5kaXRvLXN1Yi1tZW51IHtcbiAgICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgICAgd2lkdGg6IHZhcigtLXdpZHRoKTtcbiAgICAgICAgICB6LWluZGV4OiAkei1pbmRleC1oZWFkZXI7XG4gICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKGNhbGModmFyKC0td2lkdGgpICsgMiAqICRtZW51LXNwYWNpbmcpKVxuICAgICAgICAgICAgdHJhbnNsYXRlWSgtJGl0ZW0taGVpZ2h0KTtcblxuICAgICAgICAgIGxpOmZpcnN0LWNoaWxkIHtcbiAgICAgICAgICAgIC5kaXRvLWxpbmsge1xuICAgICAgICAgICAgICBtYXJnaW4tdG9wOiAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgICY6OmJlZm9yZSB7XG4gICAgICAgICAgICAvLyBGaWxsIHRoZSBnYXAgdG8gbm90IGxvb3NlIHRoZSBob3ZlciB3aGVuIG1vdmluZyBvdmVyIGl0LlxuICAgICAgICAgICAgY29udGVudDogJyc7XG4gICAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgICAgICB0b3A6IDA7XG4gICAgICAgICAgICBsZWZ0OiAtMiAqICRtZW51LXNwYWNpbmc7XG4gICAgICAgICAgICB3aWR0aDogMiAqICRtZW51LXNwYWNpbmc7XG4gICAgICAgICAgICBoZWlnaHQ6ICRpdGVtLWhlaWdodDtcbiAgICAgICAgICAgIG9wYWNpdHk6IDA7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gLmRpdG8tc3ViLW1lbnUtbGluayxcbiAgICAgICAgLmRpdG8tc3ViLW1lbnUge1xuICAgICAgICAgIGJveC1zaGFkb3c6ICRzaGFkb3ctd2luZG93O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLmRpdG8tbGluayB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgcGFkZGluZzogJG1lbnUtcGFkZGluZztcbiAgICBsaW5lLWhlaWdodDogJG1lbnUtbGluZS1oZWlnaHQ7XG4gICAgYm9yZGVyLXJhZGl1czogJGJvcmRlci1yYWRpdXM7XG4gICAgbWFyZ2luLXRvcDogJG1lbnUtc3BhY2luZztcblxuICAgICY6Zm9jdXM6bm90KDphY3RpdmUsIC5kaXRvLWFjdGl2ZSkge1xuICAgICAgYm94LXNoYWRvdzogJHNoYWRvdy1mb2N1cztcbiAgICB9XG5cbiAgICAmOmhvdmVyIHtcbiAgICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC41KTtcbiAgICB9XG5cbiAgICAmLmRpdG8tYWN0aXZlIHtcbiAgICAgIGNvbG9yOiAkY29sb3Itd2hpdGU7XG4gICAgICBiYWNrZ3JvdW5kOiAkY29sb3ItYWN0aXZlO1xuICAgIH1cbiAgfVxuXG4gIC5kaXRvLXN1Yi1tZW51LWxpbmsge1xuICAgICYuZGl0by1hY3RpdmUge1xuICAgICAgYmFja2dyb3VuZDogY29sb3IuYWRqdXN0KCRjb2xvci1hY3RpdmUsICRhbHBoYTogLTAuMyk7XG4gICAgfVxuICB9XG5cbiAgLmRpdG8tc3ViLW1lbnUge1xuICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgYm9yZGVyLXJpZ2h0OiAwO1xuICAgIHBhZGRpbmc6IDA7XG4gICAgYm9yZGVyLXJhZGl1czogJGJvcmRlci1yYWRpdXM7XG4gICAgYmFja2dyb3VuZDogJGNvbG9yLWxpZ2h0ZXN0O1xuXG4gICAgJi5kaXRvLWFjdGl2ZSB7XG4gICAgICBkaXNwbGF5OiBibG9jaztcbiAgICB9XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuLmRpdG8tdHJhaWxcbiAgdWxcbiAgICBsaShcbiAgICAgIHYtZm9yPVwiY29tcG9uZW50IGluIHRyYWlsXCJcbiAgICApXG4gICAgICBhLmRpdG8tbGluayhcbiAgICAgICAgOmNsYXNzPVwiZ2V0TGlua0NsYXNzKGNvbXBvbmVudClcIlxuICAgICAgICA6aHJlZj1cImdldENvbXBvbmVudEhyZWYoY29tcG9uZW50KVwiXG4gICAgICAgIEBjbGljay5wcmV2ZW50LnN0b3A9XCJvbkNsaWNrQ29tcG9uZW50KGNvbXBvbmVudClcIlxuICAgICAgKVxuICAgICAgICBzcGFuKDpjbGFzcz1cImdldFNwYW5DbGFzcyhjb21wb25lbnQpXCIpXG4gICAgICAgICAgfCB7eyBjb21wb25lbnQuYnJlYWRjcnVtYiB9fVxuICBzbG90XG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdEaXRvVHJhaWwnLCB7XG4gIGNvbXB1dGVkOiB7XG4gICAgdHJhaWwoKSB7XG4gICAgICByZXR1cm4gdGhpcy5hcHBTdGF0ZS5yb3V0ZUNvbXBvbmVudHMuZmlsdGVyKFxuICAgICAgICBjb21wb25lbnQgPT4gISFjb21wb25lbnQucm91dGVSZWNvcmRcbiAgICAgIClcbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGdldENvbXBvbmVudFBhdGgoY29tcG9uZW50KSB7XG4gICAgICAvLyBEbyB0aGUgc2FtZSBhcyBpbiBgRGl0b01lbnVgOiBMaW5rIG1lbnUgaXRlbXMgdG8gdGhlIGZpcnN0IGNoaWxkcmVuLlxuICAgICAgY29uc3QgeyBzY2hlbWEgfSA9IGNvbXBvbmVudFxuICAgICAgcmV0dXJuIHNjaGVtYS50eXBlID09PSAnbWVudSdcbiAgICAgICAgPyBPYmplY3QudmFsdWVzKHNjaGVtYS5pdGVtcylbMF0uZnVsbFBhdGhcbiAgICAgICAgOiBjb21wb25lbnQucGF0aFxuICAgIH0sXG5cbiAgICBnZXRDb21wb25lbnRIcmVmKGNvbXBvbmVudCkge1xuICAgICAgcmV0dXJuIHRoaXMuJHJvdXRlci5yZXNvbHZlKHRoaXMuZ2V0Q29tcG9uZW50UGF0aChjb21wb25lbnQpKS5ocmVmXG4gICAgfSxcblxuICAgIG9uQ2xpY2tDb21wb25lbnQoY29tcG9uZW50KSB7XG4gICAgICB0aGlzLiRyb3V0ZXIucHVzaCh7XG4gICAgICAgIHBhdGg6IHRoaXMuZ2V0Q29tcG9uZW50UGF0aChjb21wb25lbnQpLFxuICAgICAgICBmb3JjZTogdHJ1ZVxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgZ2V0TGlua0NsYXNzKGNvbXBvbmVudCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgJ2RpdG8tYWN0aXZlJzogY29tcG9uZW50LnBhdGggPT09IHRoaXMuJHJvdXRlLnBhdGhcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZ2V0U3BhbkNsYXNzKGNvbXBvbmVudCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgJ2RpdG8tZGlydHknOiBjb21wb25lbnQuaXNEaXJ0eVxuICAgICAgfVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5cbi5kaXRvLXRyYWlsIHtcbiAgZGlzcGxheTogZmxleDtcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgaGVpZ2h0OiAzZW07XG5cbiAgdWwge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gIH1cblxuICBsaSB7XG4gICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgfVxuXG4gIGEge1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICBkaXNwbGF5OiBibG9jaztcblxuICAgICY6aG92ZXIge1xuICAgICAgc3BhbiB7XG4gICAgICAgIGNvbG9yOiAkY29sb3ItbGlnaHQ7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgbGk6bm90KDpsYXN0LWNoaWxkKSBhIHtcbiAgICAkYW5nbGU6IDMzZGVnO1xuXG4gICAgJjo6YmVmb3JlLFxuICAgICY6OmFmdGVyIHtcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgIGNvbnRlbnQ6ICcnO1xuICAgICAgd2lkdGg6IDFweDtcbiAgICAgIGhlaWdodDogMC43NWVtO1xuICAgICAgcmlnaHQ6IC0wLjI1ZW07XG4gICAgICBiYWNrZ3JvdW5kOiAkY29sb3Itd2hpdGU7XG4gICAgICBvcGFjaXR5OiAwLjU7XG4gICAgfVxuXG4gICAgJjo6YmVmb3JlIHtcbiAgICAgIHRvcDogNTAlO1xuICAgICAgdHJhbnNmb3JtOiByb3RhdGUoJGFuZ2xlKTtcbiAgICAgIHRyYW5zZm9ybS1vcmlnaW46IHRvcDtcbiAgICB9XG5cbiAgICAmOjphZnRlciB7XG4gICAgICBib3R0b206IDUwJTtcbiAgICAgIHRyYW5zZm9ybTogcm90YXRlKC0kYW5nbGUpO1xuICAgICAgdHJhbnNmb3JtLW9yaWdpbjogYm90dG9tO1xuICAgIH1cbiAgfVxufVxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG5uYXYuZGl0by1oZWFkZXJcbiAgRGl0b1RyYWlsXG4gICAgRGl0b1NwaW5uZXIoXG4gICAgICB2LWlmPVwiaXNMb2FkaW5nXCJcbiAgICAgIDpzaXplPVwic3Bpbm5lcj8uc2l6ZVwiXG4gICAgICA6Y29sb3I9XCJzcGlubmVyPy5jb2xvclwiXG4gICAgKVxuICAvLy0gVGVsZXBvcnQgdGFyZ2V0IGZvciBgLmRpdG8tc2NoZW1hLWhlYWRlcmA6XG4gIC5kaXRvLWhlYWRlcl9fdGVsZXBvcnRcbiAgc2xvdFxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnRGl0b0hlYWRlcicsIHtcbiAgcHJvcHM6IHtcbiAgICBzcGlubmVyOiB7XG4gICAgICB0eXBlOiBPYmplY3QsXG4gICAgICBkZWZhdWx0OiBudWxsXG4gICAgfSxcbiAgICBpc0xvYWRpbmc6IHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5cbi5kaXRvLWhlYWRlciB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgYmFja2dyb3VuZDogJGNvbG9yLWJsYWNrO1xuICBmb250LXNpemU6ICRoZWFkZXItZm9udC1zaXplO1xuICBsaW5lLWhlaWdodDogJGhlYWRlci1saW5lLWhlaWdodDtcbiAgei1pbmRleDogJHotaW5kZXgtaGVhZGVyO1xuICBAaW5jbHVkZSB1c2VyLXNlbGVjdChub25lKTtcblxuICAmOjphZnRlciB7XG4gICAgLy8gU2V0IHRoZSBmdWxsLXdpZHRoIGhlYWRlciBiYWNrZ3JvdW5kIHRvIHRoZSBoZWFkZXIgY29sb3IuXG4gICAgY29udGVudDogJyc7XG4gICAgaW5zZXQ6IDA7XG4gICAgd2lkdGg6IDEwMHZ3O1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICBiYWNrZ3JvdW5kOiBpbmhlcml0O1xuICAgIHotaW5kZXg6IC0xO1xuICB9XG5cbiAgc3BhbiB7XG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgIHBhZGRpbmc6ICRoZWFkZXItcGFkZGluZztcbiAgICBjb2xvcjogJGNvbG9yLXdoaXRlO1xuXG4gICAgJjplbXB0eSB7XG4gICAgICAmOjphZnRlciB7XG4gICAgICAgIGNvbnRlbnQ6ICdcXDIwMGInO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC5kaXRvLWRpcnR5IHtcbiAgICAmOjphZnRlciB7XG4gICAgICBjb250ZW50OiAnJztcbiAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICRjb2xvci13aGl0ZTtcbiAgICAgIHdpZHRoOiA4cHg7XG4gICAgICBoZWlnaHQ6IDhweDtcbiAgICAgIG1hcmdpbjogMnB4O1xuICAgICAgbWFyZ2luLWxlZnQ6IDAuNWVtO1xuICAgICAgYm9yZGVyLXJhZGl1czogMTAwJTtcbiAgICB9XG4gIH1cblxuICAmX190ZWxlcG9ydCB7XG4gICAgLy8gQWxpZ24gdGhlIHRlbGVwb3J0ZWQgc2NoZW1hIGhlYWRlcnMgb24gdG9wIG9mIHRvIHRoZSBoZWFkZXIgbWVudS5cbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgaW5zZXQ6IDA7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtZW5kO1xuICAgIHBhZGRpbmc6IDAgJGhlYWRlci1wYWRkaW5nLWhvcjtcbiAgICAvLyBUdXJuIG9mZiBwb2ludGVyIGV2ZW50cyBzbyB0aGF0IERpdG9UcmFpbCBrZWVwcyByZWNlaXZpbmcgZXZlbnRzLi4uXG4gICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gICAgLy8gLi4uYnV0IG1vdmUgdGhlbSB0byB0aGUgY2hpbGRyZW4uXG4gICAgPiAqIHtcbiAgICAgIHBvaW50ZXItZXZlbnRzOiBhdXRvO1xuICAgIH1cblxuICAgIC5kaXRvLWJ1dHRvbiB7XG4gICAgICBtYXJnaW46IDAgMCAkdGFiLW1hcmdpbiAkdGFiLW1hcmdpbjtcbiAgICB9XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxubmF2LmRpdG8tbmF2aWdhdGlvbi5kaXRvLXNjcm9sbC1wYXJlbnRcbiAgaDFcbiAgICBSb3V0ZXJMaW5rLmRpdG8tbGluayh0bz1cIi9cIikge3sgYXBwU3RhdGUudGl0bGUgfX1cbiAgRGl0b01lbnUuZGl0by1zY3JvbGwoOml0ZW1zPVwidmlld3NcIilcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ0RpdG9OYXZpZ2F0aW9uJywge30pXG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by1uYXZpZ2F0aW9uIHtcbiAgQGluY2x1ZGUgdXNlci1zZWxlY3Qobm9uZSk7XG5cbiAgZmxleDogMCAwIG1pbi1jb250ZW50O1xuICBmb250LXNpemU6ICRtZW51LWZvbnQtc2l6ZTtcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgYmFja2dyb3VuZDogJGNvbG9yLWxpZ2h0ZXI7XG5cbiAgaDEge1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIGxpbmUtaGVpZ2h0OiAkaGVhZGVyLWxpbmUtaGVpZ2h0O1xuICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xuICAgIGJhY2tncm91bmQ6ICRjb2xvci1kYXJrZXI7XG4gICAgYm9yZGVyLXJpZ2h0OiAkYm9yZGVyLXdpZHRoIHNvbGlkICRjb2xvci1kYXJrZXN0O1xuICAgIGNvbG9yOiAkY29sb3Itd2hpdGU7XG5cbiAgICAuZGl0by1saW5rIHtcbiAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgcGFkZGluZzogJGhlYWRlci1wYWRkaW5nO1xuICAgIH1cbiAgfVxufVxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4uZGl0by1ub3RpZmljYXRpb25zXG4gIC5kaXRvLWhlYWRlclxuICAgIHNwYW5cbiAgLmRpdG8tbm90aWZpY2F0aW9uc19faW5uZXJcbiAgICBWdWVOb3RpZmljYXRpb25zKFxuICAgICAgcmVmPVwibm90aWZpY2F0aW9uc1wiXG4gICAgICBjbGFzc2VzPVwiZGl0by1ub3RpZmljYXRpb25cIlxuICAgICAgOmRhbmdlcm91c2x5U2V0SW5uZXJIdG1sPVwidHJ1ZVwiXG4gICAgICBwb3NpdGlvbj1cIlwiXG4gICAgICB3aWR0aD1cIlwiXG4gICAgKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgeyBhc0FycmF5LCBzdHJpcFRhZ3MgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ0RpdG9Ob3RpZmljYXRpb25zJywge1xuICBub3RpZmljYXRpb25zKCkge1xuICAgIHJldHVybiB0aGlzLmlzTW91bnRlZCAmJiB0aGlzLiRyZWZzLm5vdGlmaWNhdGlvbnNcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgbm90aWZ5KHsgdHlwZSA9ICdpbmZvJywgdGl0bGUsIHRleHQgfSA9IHt9KSB7XG4gICAgICB0aXRsZSB8fD0gKFxuICAgICAgICB7XG4gICAgICAgICAgd2FybmluZzogJ1dhcm5pbmcnLFxuICAgICAgICAgIGVycm9yOiAnRXJyb3InLFxuICAgICAgICAgIGluZm86ICdJbmZvcm1hdGlvbicsXG4gICAgICAgICAgc3VjY2VzczogJ1N1Y2Nlc3MnXG4gICAgICAgIH1bdHlwZV0gfHxcbiAgICAgICAgJ05vdGlmaWNhdGlvbidcbiAgICAgIClcbiAgICAgIHRleHQgPSBgPHA+JHtcbiAgICAgICAgYXNBcnJheSh0ZXh0KS5qb2luKCc8L3A+IDxwPicpXG4gICAgICB9PC9wPmAucmVwbGFjZSgvXFxufFxcclxcbnxcXHIvZywgJzxicj4nKVxuICAgICAgY29uc3QgbG9nID0gKFxuICAgICAgICB7XG4gICAgICAgICAgd2FybmluZzogJ3dhcm4nLFxuICAgICAgICAgIGVycm9yOiAnZXJyb3InLFxuICAgICAgICAgIGluZm86ICdsb2cnLFxuICAgICAgICAgIHN1Y2Nlc3M6ICdsb2cnXG4gICAgICAgIH1bdHlwZV0gfHxcbiAgICAgICAgJ2Vycm9yJ1xuICAgICAgKVxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgIGNvbnNvbGVbbG9nXShzdHJpcFRhZ3ModGV4dCkpXG4gICAgICBjb25zdCB7IG5vdGlmaWNhdGlvbnMgPSB0cnVlIH0gPSB0aGlzLmFwaVxuICAgICAgaWYgKG5vdGlmaWNhdGlvbnMpIHtcbiAgICAgICAgLy8gQ2FsY3VsYXRlIGRpc3BsYXktZHVyYXRpb24gZm9yIHRoZSBub3RpZmljYXRpb24gYmFzZWQgb24gaXRzIGNvbnRlbnRcbiAgICAgICAgLy8gYW5kIHRoZSBzZXR0aW5nIG9mIHRoZSBgZHVyYXRpb25GYWN0b3JgIGNvbmZpZ3VyYXRpb24uIEl0IGRlZmluZXMgdGhlXG4gICAgICAgIC8vIGFtb3VudCBvZiBtaWxsaXNlY29uZHMgbXVsdGlwbGllZCB3aXRoIHRoZSBhbW91bnQgb2YgY2hhcmFjdGVyc1xuICAgICAgICAvLyBkaXNwbGF5ZWQgaW4gdGhlIG5vdGlmaWNhdGlvbiwgcGx1cyA0MCAoNDAgKyB0aXRsZSArIG1lc3NhZ2UpOlxuICAgICAgICBjb25zdCB7IGR1cmF0aW9uRmFjdG9yID0gMjAgfSA9IG5vdGlmaWNhdGlvbnNcbiAgICAgICAgY29uc3QgZHVyYXRpb24gPSAoNDAgKyB0ZXh0Lmxlbmd0aCArIHRpdGxlLmxlbmd0aCkgKiBkdXJhdGlvbkZhY3RvclxuICAgICAgICB0aGlzLiRub3RpZnkoeyB0eXBlLCB0aXRsZSwgdGV4dCwgZHVyYXRpb24gfSlcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZGVzdHJveUFsbCgpIHtcbiAgICAgIHRoaXMubm90aWZpY2F0aW9ucy5kZXN0cm95QWxsKClcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AdXNlICdzYXNzOmNvbG9yJztcbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5cbkBtaXhpbiB0eXBlKCRiYWNrZ3JvdW5kKSB7XG4gIGJhY2tncm91bmQ6IGNvbG9yLmFkanVzdCgkYmFja2dyb3VuZCwgJGxpZ2h0bmVzczogNSUpO1xuICBjb2xvcjogJGNvbG9yLXdoaXRlO1xuICBib3JkZXItbGVmdDogMTJweCBzb2xpZCBjb2xvci5hZGp1c3QoJGJhY2tncm91bmQsICRsaWdodG5lc3M6IC0xMCUpO1xufVxuXG4uZGl0by1ub3RpZmljYXRpb25zIHtcbiAgJG5vdGlmaWNhdGlvbi13aWR0aDogMzAwcHg7XG5cbiAgZmxleDogMTtcbiAgei1pbmRleDogJHotaW5kZXgtbm90aWZpY2F0aW9ucztcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgbWFyZ2luLWxlZnQ6ICRmb3JtLXNwYWNpbmc7XG4gIC8vIEZvciB0aGUgYEBjb250YWluZXJgIHJ1bGUgdG8gd29yazpcbiAgY29udGFpbmVyLXR5cGU6IGlubGluZS1zaXplO1xuXG4gIC5kaXRvLWhlYWRlciB7XG4gICAgc3BhbiB7XG4gICAgICBwYWRkaW5nLWxlZnQ6IDA7XG4gICAgICBwYWRkaW5nLXJpZ2h0OiAwO1xuICAgIH1cbiAgfVxuXG4gICZfX2lubmVyIHtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIH1cblxuICAudnVlLW5vdGlmaWNhdGlvbi1ncm91cCB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIGxlZnQ6IDA7XG4gICAgdG9wOiAwO1xuICAgIHdpZHRoOiAkbm90aWZpY2F0aW9uLXdpZHRoO1xuXG4gICAgQGNvbnRhaW5lciAod2lkdGggPCAjeyRub3RpZmljYXRpb24td2lkdGggKyAkY29udGVudC1wYWRkaW5nfSkge1xuICAgICAgbGVmdDogdW5zZXQ7XG4gICAgICByaWdodDogJGNvbnRlbnQtcGFkZGluZztcbiAgICB9XG4gIH1cblxuICAudnVlLW5vdGlmaWNhdGlvbi13cmFwcGVyIHtcbiAgICBvdmVyZmxvdzogdmlzaWJsZTtcbiAgfVxuXG4gIC5kaXRvLW5vdGlmaWNhdGlvbiB7XG4gICAgcGFkZGluZzogOHB4O1xuICAgIG1hcmdpbjogJGNvbnRlbnQtcGFkZGluZyAwO1xuICAgIGZvbnQtc2l6ZTogaW5oZXJpdDtcbiAgICBjb2xvcjogJGNvbG9yLXdoaXRlO1xuICAgIGJvcmRlci1yYWRpdXM6ICRib3JkZXItcmFkaXVzO1xuICAgIGJveC1zaGFkb3c6ICRzaGFkb3ctd2luZG93O1xuXG4gICAgLm5vdGlmaWNhdGlvbi10aXRsZSB7XG4gICAgICBmb250LXdlaWdodDogYm9sZDtcbiAgICAgIHBhZGRpbmctYm90dG9tOiA4cHg7XG4gICAgfVxuXG4gICAgLm5vdGlmaWNhdGlvbi1jb250ZW50IHtcbiAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICB3b3JkLWJyZWFrOiBicmVhay1hbGw7XG5cbiAgICAgIHAge1xuICAgICAgICBtYXJnaW46IDA7XG5cbiAgICAgICAgJiArIHAge1xuICAgICAgICAgIG1hcmdpbi10b3A6IDhweDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgICYsXG4gICAgJi5pbmZvIHtcbiAgICAgIEBpbmNsdWRlIHR5cGUoJGNvbG9yLWFjdGl2ZSk7XG4gICAgfVxuXG4gICAgJi5zdWNjZXNzIHtcbiAgICAgIEBpbmNsdWRlIHR5cGUoJGNvbG9yLXN1Y2Nlc3MpO1xuICAgIH1cblxuICAgICYud2FybmluZyB7XG4gICAgICBAaW5jbHVkZSB0eXBlKCRjb2xvci13YXJuaW5nKTtcbiAgICB9XG5cbiAgICAmLmVycm9yIHtcbiAgICAgIEBpbmNsdWRlIHR5cGUoJGNvbG9yLWVycm9yKTtcbiAgICB9XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuYXNpZGUuZGl0by1zaWRlYmFyLmRpdG8tc2Nyb2xsLXBhcmVudChcbiAgdi1yZXNpemU9XCJvblJlc2l6ZVNpZGViYXJcIlxuICA6Y2xhc3M9XCJjbGFzc2VzXCJcbilcbiAgbmF2LmRpdG8taGVhZGVyXG4gICAgc2xvdFxuICAuZGl0by1zaWRlYmFyX190ZWxlcG9ydC5kaXRvLXNjcm9sbFxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnRGl0b1NpZGViYXInLCB7XG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHNpZGViYXJXaWR0aDogMFxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIGNsYXNzZXMoKSB7XG4gICAgICBjb25zdCBwcmVmaXggPSAnZGl0by1zaWRlYmFyJ1xuICAgICAgLy8gTk9URTogS2VlcCBzeW5jZWQgd2l0aCAkc2lkZWJhci1tYXgtd2lkdGggaW4gU0NTUzpcbiAgICAgIGNvbnN0IHNpZGViYXJXaWR0aCA9IDM2MFxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgW2Ake3ByZWZpeH0tLXdpZHRoLTk5YF06IHRoaXMuc2lkZWJhcldpZHRoIDwgc2lkZWJhcldpZHRoLFxuICAgICAgICBbYCR7cHJlZml4fS0td2lkdGgtNjBgXTogdGhpcy5zaWRlYmFyV2lkdGggPD0gc2lkZWJhcldpZHRoICogMC42XG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBvblJlc2l6ZVNpZGViYXIoeyBjb250ZW50UmVjdDogeyB3aWR0aCB9IH0pIHtcbiAgICAgIHRoaXMuc2lkZWJhcldpZHRoID0gd2lkdGhcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by1zaWRlYmFyIHtcbiAgZmxleDogMCAxICRzaWRlYmFyLW1heC13aWR0aDtcbiAgbWF4LXdpZHRoOiAkc2lkZWJhci1tYXgtd2lkdGg7XG4gIG1pbi13aWR0aDogJHNpZGViYXItbWluLXdpZHRoO1xufVxuPC9zdHlsZT5cbiIsImltcG9ydCBEb21NaXhpbiBmcm9tICcuL0RvbU1peGluLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQge1xuICBtaXhpbnM6IFtEb21NaXhpbl0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgcHVsbGRvd246IHtcbiAgICAgICAgb3BlbjogZmFsc2UsXG4gICAgICAgIHN0YXJ0VGltZTogMCxcbiAgICAgICAgY2hlY2tUaW1lOiB0cnVlLFxuICAgICAgICBldmVudHM6IHtcbiAgICAgICAgICBtb3VzZWRvd246ICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc2V0UHVsbGRvd25PcGVuKGZhbHNlKVxuICAgICAgICAgICAgdGhpcy5wdWxsZG93bi5oYW5kbGVycy5yZW1vdmUoKVxuICAgICAgICAgIH0sXG5cbiAgICAgICAgICBtb3VzZXVwOiAoKSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5vblB1bGxkb3duTW91c2VVcCgpKSB7XG4gICAgICAgICAgICAgIHRoaXMucHVsbGRvd24uaGFuZGxlcnMucmVtb3ZlKClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGhhbmRsZXJzOiBudWxsXG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBvblB1bGxkb3duTW91c2VEb3duKHZhbHVlID0gbnVsbCkge1xuICAgICAgaWYgKHZhbHVlID09PSBudWxsKSB7XG4gICAgICAgIHRoaXMuc2V0UHVsbGRvd25PcGVuKHRydWUpXG4gICAgICAgIHRoaXMuY2hlY2tUaW1lID0gdHJ1ZVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5jaGVja1RpbWUgPSBmYWxzZVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBvblB1bGxkb3duTW91c2VVcCh2YWx1ZSA9IG51bGwpIHtcbiAgICAgIGNvbnN0IHsgc3RhcnRUaW1lIH0gPSB0aGlzLnB1bGxkb3duXG4gICAgICBpZiAoIXRoaXMuY2hlY2tUaW1lIHx8IHN0YXJ0VGltZSAmJiAoRGF0ZS5ub3coKSAtIHN0YXJ0VGltZSA+IDI1MCkpIHtcbiAgICAgICAgdGhpcy5zZXRQdWxsZG93bk9wZW4oZmFsc2UpXG4gICAgICAgIGlmICh2YWx1ZSAhPT0gbnVsbCkge1xuICAgICAgICAgIHRoaXMub25QdWxsZG93blNlbGVjdCh2YWx1ZSlcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBvblB1bGxkb3duU2VsZWN0KC8qIHZhbHVlICovKSB7XG4gICAgICAvLyBOT1RFOiBUbyBiZSBvdmVycmlkZGVuLlxuICAgIH0sXG5cbiAgICBzZXRQdWxsZG93bk9wZW4ob3Blbikge1xuICAgICAgdGhpcy5wdWxsZG93bi5vcGVuID0gb3BlblxuICAgICAgdGhpcy5wdWxsZG93bi5zdGFydFRpbWUgPSBvcGVuID8gRGF0ZS5ub3coKSA6IDBcbiAgICAgIGlmIChvcGVuKSB7XG4gICAgICAgIHRoaXMucHVsbGRvd24uaGFuZGxlcnMgPSB0aGlzLmRvbU9uKGRvY3VtZW50LCB0aGlzLnB1bGxkb3duLmV2ZW50cylcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4uZGl0by1hY2NvdW50XG4gIGEoXG4gICAgQG1vdXNlZG93bi5zdG9wPVwib25QdWxsZG93bk1vdXNlRG93bigpXCJcbiAgKVxuICAgIHNwYW4ge3sgdXNlci51c2VybmFtZSB9fVxuICB1bC5kaXRvLXB1bGxkb3duKDpjbGFzcz1cInsgJ2RpdG8tb3Blbic6IHB1bGxkb3duLm9wZW4gfVwiKVxuICAgIGxpKFxuICAgICAgdi1mb3I9XCIobGFiZWwsIHZhbHVlKSBvZiBpdGVtc1wiXG4gICAgKVxuICAgICAgYShcbiAgICAgICAgQG1vdXNlZG93bi5zdG9wPVwib25QdWxsZG93bk1vdXNlRG93bih2YWx1ZSlcIlxuICAgICAgICBAbW91c2V1cD1cIm9uUHVsbGRvd25Nb3VzZVVwKHZhbHVlKVwiXG4gICAgICApIHt7IGxhYmVsIH19XG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCBQdWxsZG93bk1peGluIGZyb20gJy4uL21peGlucy9QdWxsZG93bk1peGluLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ0RpdG9BY2NvdW50Jywge1xuICBtaXhpbnM6IFtQdWxsZG93bk1peGluXSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBpdGVtczoge1xuICAgICAgICBzZXR0aW5nczogJ1NldHRpbmdzJyxcbiAgICAgICAgbG9nb3V0OiAnTG9nb3V0J1xuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgb25QdWxsZG93blNlbGVjdCh2YWx1ZSkge1xuICAgICAgc3dpdGNoICh2YWx1ZSkge1xuICAgICAgICBjYXNlICdsb2dvdXQnOlxuICAgICAgICAgIHRoaXMucm9vdENvbXBvbmVudC5sb2dvdXQoKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgJ3NldHRpbmdzJzpcbiAgICAgICAgICBjb25zb2xlLmluZm8oJ1RPRE86IEltcGxlbWVudCBTZXR0aW5ncycpXG4gICAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by1hY2NvdW50IHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG5cbiAgLmRpdG8tcHVsbGRvd24ge1xuICAgIHRvcDogJHB1bGxkb3duLXBhZGRpbmctdmVyO1xuICB9XG59XG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbmNvbXBvbmVudChcbiAgdi1pZj1cIm9wdGlvbnM/LnRleHQgIT0gbnVsbFwiXG4gIDppcz1cInRhZ05hbWVcIlxuICA6Y2xhc3M9XCJjbGFzc2VzXCJcbiAgOnN0eWxlPVwic3R5bGVzXCJcbikge3sgb3B0aW9ucy50ZXh0IH19XG5jb21wb25lbnQoXG4gIHYtZWxzZS1pZj1cIm9wdGlvbnM/Lmh0bWwgIT0gbnVsbFwiXG4gIDppcz1cInRhZ05hbWVcIlxuICA6Y2xhc3M9XCJjbGFzc2VzXCJcbiAgOnN0eWxlPVwic3R5bGVzXCJcbiAgdi1odG1sPVwib3B0aW9ucy5odG1sXCJcbilcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IHsgaXNPYmplY3QsIGlzU3RyaW5nLCBhc0FycmF5IH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdEaXRvRWxlbWVudCcsIHtcbiAgcHJvcHM6IHtcbiAgICB0YWc6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiAnc3BhbicgfSxcbiAgICBjb250ZW50OiB7IHR5cGU6IFtTdHJpbmcsIE9iamVjdF0sIGRlZmF1bHQ6IG51bGwgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgb3B0aW9ucygpIHtcbiAgICAgIGNvbnN0IHsgY29udGVudCB9ID0gdGhpc1xuICAgICAgcmV0dXJuIGNvbnRlbnQgIT0gbnVsbFxuICAgICAgICA/IGlzT2JqZWN0KGNvbnRlbnQpXG4gICAgICAgICAgPyBjb250ZW50XG4gICAgICAgICAgOiB7IHRleHQ6IGNvbnRlbnQgfVxuICAgICAgICA6IG51bGxcbiAgICB9LFxuXG4gICAgdGFnTmFtZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLm9wdGlvbnMudGFnIHx8IHRoaXMudGFnXG4gICAgfSxcblxuICAgIGNsYXNzZXMoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5hc09iamVjdCh0aGlzLiRhdHRycy5jbGFzcyksXG4gICAgICAgIC4uLmFzT2JqZWN0KHRoaXMub3B0aW9ucy5jbGFzcylcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgc3R5bGVzKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uYXNPYmplY3QodGhpcy4kYXR0cnMuc3R5bGUpLFxuICAgICAgICAuLi5hc09iamVjdCh0aGlzLm9wdGlvbnMuc3R5bGUpXG4gICAgICB9XG4gICAgfVxuICB9XG59KVxuXG5mdW5jdGlvbiBhc09iamVjdCh2YWx1ZSkge1xuICByZXR1cm4gYXNBcnJheSh2YWx1ZSkucmVkdWNlKChvYmplY3QsIGVudHJ5KSA9PiB7XG4gICAgaWYgKGlzU3RyaW5nKGVudHJ5KSkge1xuICAgICAgb2JqZWN0W2VudHJ5XSA9IHRydWVcbiAgICB9IGVsc2UgaWYgKGlzT2JqZWN0KGVudHJ5KSkge1xuICAgICAgT2JqZWN0LmFzc2lnbihvYmplY3QsIGVudHJ5KVxuICAgIH1cbiAgICByZXR1cm4gb2JqZWN0XG4gIH0sIHt9KVxufVxuPC9zY3JpcHQ+XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuY29tcG9uZW50LmRpdG8tbGFiZWwoXG4gIHYtaWY9XCJ0ZXh0IHx8IGNvbGxhcHNpYmxlXCJcbiAgOmlzPVwidGFnXCJcbiAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gIDpjbGFzcz1cInsgJ2RpdG8tYWN0aXZlJzogaXNBY3RpdmUgfVwiXG4pXG4gIC5kaXRvLWNoZXZyb24oXG4gICAgdi1pZj1cImNvbGxhcHNpYmxlXCJcbiAgICA6Y2xhc3M9XCJ7ICdkaXRvLW9wZW4nOiAhY29sbGFwc2VkIH1cIlxuICApXG4gIC5kaXRvLWxhYmVsX19pbm5lcihcbiAgICB2LWlmPVwidGV4dCB8fCBwcmVmaXhlcy5sZW5ndGggPiAwIHx8IHN1ZmZpeGVzLmxlbmd0aCA+IDBcIlxuICApXG4gICAgRGl0b0VsZW1lbnQuZGl0by1sYWJlbF9fcHJlZml4KFxuICAgICAgdi1mb3I9XCIocHJlZml4LCBpbmRleCkgb2YgcHJlZml4ZXNcIlxuICAgICAgOmtleT1cImBwcmVmaXgtJHtpbmRleH1gXCJcbiAgICAgIHRhZz1cInNwYW5cIlxuICAgICAgOmNvbnRlbnQ9XCJwcmVmaXhcIlxuICAgIClcbiAgICBsYWJlbChcbiAgICAgIHYtaWY9XCJ0ZXh0XCJcbiAgICAgIDpmb3I9XCJkYXRhUGF0aFwiXG4gICAgICB2LWh0bWw9XCJ0ZXh0XCJcbiAgICApXG4gICAgRGl0b0VsZW1lbnQuZGl0by1sYWJlbF9fc3VmZml4KFxuICAgICAgdi1mb3I9XCIoc3VmZml4LCBpbmRleCkgb2Ygc3VmZml4ZXNcIlxuICAgICAgOmtleT1cImBzdWZmaXgtJHtpbmRleH1gXCJcbiAgICAgIHRhZz1cInNwYW5cIlxuICAgICAgOmNvbnRlbnQ9XCJzdWZmaXhcIlxuICAgIClcbiAgICAuZGl0by1pbmZvKFxuICAgICAgdi1pZj1cImluZm9cIlxuICAgICAgOmRhdGEtaW5mbz1cImluZm9cIlxuICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IHsgaXNPYmplY3QsIGFzQXJyYXkgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ0RpdG9MYWJlbCcsIHtcbiAgZW1pdHM6IFsnb3BlbiddLFxuXG4gIHByb3BzOiB7XG4gICAgbGFiZWw6IHsgdHlwZTogW1N0cmluZywgT2JqZWN0XSwgZGVmYXVsdDogbnVsbCB9LFxuICAgIGRhdGFQYXRoOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogbnVsbCB9LFxuICAgIGNvbGxhcHNlZDogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGNvbGxhcHNpYmxlOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgaW5mbzogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgdGFnKCkge1xuICAgICAgcmV0dXJuIHRoaXMuY29sbGFwc2libGUgPyAnYScgOiAnZGl2J1xuICAgIH0sXG5cbiAgICB0ZXh0KCkge1xuICAgICAgY29uc3QgeyBsYWJlbCB9ID0gdGhpc1xuICAgICAgcmV0dXJuIGlzT2JqZWN0KGxhYmVsKSA/IGxhYmVsPy50ZXh0IDogbGFiZWxcbiAgICB9LFxuXG4gICAgcHJlZml4ZXMoKSB7XG4gICAgICByZXR1cm4gYXNBcnJheSh0aGlzLmxhYmVsPy5wcmVmaXgpXG4gICAgfSxcblxuICAgIHN1ZmZpeGVzKCkge1xuICAgICAgcmV0dXJuIGFzQXJyYXkodGhpcy5sYWJlbD8uc3VmZml4KVxuICAgIH0sXG5cbiAgICBhdHRyaWJ1dGVzKCkge1xuICAgICAgcmV0dXJuIHRoaXMuY29sbGFwc2libGUgPyB7IG9uQ2xpY2s6IHRoaXMub25DbGljayB9IDoge31cbiAgICB9LFxuXG4gICAgaXNBY3RpdmUoKSB7XG4gICAgICByZXR1cm4gdGhpcy5hcHBTdGF0ZS5hY3RpdmVMYWJlbCA9PT0gdGhpc1xuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgb25DbGljaygpIHtcbiAgICAgIHRoaXMuYXBwU3RhdGUuYWN0aXZlTGFiZWwgPSB0aGlzXG4gICAgICB0aGlzLiRlbWl0KCdvcGVuJywgdGhpcy5jb2xsYXBzZWQpXG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLmRpdG8tbGFiZWwge1xuICAkc2VsZjogJjtcblxuICAvLyBGb3IgYnV0dG9ucyBhbmQgY2hldnJvbiB0byBhbGlnbiByaWdodDpcbiAgZGlzcGxheTogZmxleDtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAvLyBWZXJ0aWNhbGx5IGNlbnRlciBhbGwgaXRlbXMgaW4gdGhlIGxhYmVsLCBlLmcuIGNoZXZyb24sIGVkaXQtYnV0dG9ucy5cbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgbWluLWhlaWdodDogJGlucHV0LWhlaWdodDtcbiAgbWFyZ2luLXJpZ2h0OiAkZm9ybS1zcGFjaW5nLWhhbGY7IC8vIFdoZW4gaW5saW5lZC5cblxuICAmOmhhcyguZGl0by1zY2hlbWEtaGVhZGVyKSB7XG4gICAgLy8gVGhlIGNvbnRhaW5lcidzIGxhYmVsIGlzIHVzZWQgYXMgdGVsZXBvcnQgZm9yIGEgbmVzdGVkIHNlY3Rpb24gb3Igb2JqZWN0XG4gICAgLy8gbGFiZWwuIEhpZGUgYCZfX2lubmVyYCwgYXMgaXQgaXMgYmUgZHVwbGljYXRlZCBpbnNpZGUgdGhlIG5lc3RlZCBsYWJlbC5cbiAgICA+ICN7JHNlbGZ9X19pbm5lciB7XG4gICAgICBkaXNwbGF5OiBub25lO1xuICAgIH1cbiAgfVxuXG4gICY6bm90KDpoYXMoKyAuZGl0by10YWJzKSkge1xuICAgIC8vIFRha2UgZnVsbCB3aWR0aCBidXQgb25seSBpZiB0aGVyZSBhcmVuJ3QgYWxzbyB0YWJzIHRvIGJlIGNlbnRlcmVkLlxuICAgIGZsZXg6IDE7XG4gIH1cblxuICAmX19pbm5lciB7XG4gICAgZmxleDogMSAwIDAlO1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuICB9XG5cbiAgbGFiZWwge1xuICAgIGN1cnNvcjogaW5oZXJpdDtcbiAgICBmb250LXdlaWdodDogYm9sZDtcbiAgfVxuXG4gIGxhYmVsLFxuICAmX19wcmVmaXgsXG4gICZfX3N1ZmZpeCB7XG4gICAgQGluY2x1ZGUgdXNlci1zZWxlY3Qobm9uZSk7XG4gICAgQGluY2x1ZGUgZWxsaXBzaXM7XG5cbiAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICAgIGxpbmUtaGVpZ2h0OiAkaW5wdXQtaGVpZ2h0O1xuICB9XG5cbiAgJl9fcHJlZml4ICsgbGFiZWwsXG4gIGxhYmVsICsgJl9fc3VmZml4IHtcbiAgICAmOjpiZWZvcmUge1xuICAgICAgY29udGVudDogJ1xcYTAnOyAvLyAmbmJzcDtcbiAgICB9XG4gIH1cblxuICAuZGl0by1idXR0b25zIHtcbiAgICAvLyBNb3ZlIHRoZSBsYWJlbCBwYWRkaW5nIGluc2lkZSAuZGl0by1idXR0b25zLCBzbyB0aGF0IGl0IGNhcHR1cmVzIGFsbFxuICAgIC8vIG5lYXIgbW91c2UgZXZlbnRzOlxuICAgIG1hcmdpbjogY2FsYygtMSAqIHZhcigtLWxhYmVsLXBhZGRpbmcpKTtcbiAgICBtYXJnaW4tbGVmdDogMDtcbiAgICBwYWRkaW5nOiB2YXIoLS1sYWJlbC1wYWRkaW5nKTtcbiAgfVxuXG4gICYuZGl0by13aWR0aC1maWxsIHtcbiAgICB3aWR0aDogMTAwJTtcblxuICAgIC8vIEluIG9yZGVyIGZvciBlbGxpcHNpcyB0byB3b3JrIG9uIGxhYmVscyB3aXRob3V0IGFmZmVjdGluZyBvdGhlciBsYXlvdXQsXG4gICAgLy8gd2UgbmVlZCB0byBwb3NpdGlvbiBpdCBhYnNvbHV0ZWx5IGluc2lkZSBpdHMgY29udGFpbmVyLiBCdXQgd2UgY2FuIG9ubHlcbiAgICAvLyBkbyBzbyBpZiB0aGVyZSBpcyd0IGFsc28gYSBjaGV2cm9uIG9yIG90aGVyIFVYIGVsZW1lbnRzIGJlc2lkZXMgaXQuXG4gICAgJjpoYXMoPiAjeyRzZWxmfV9faW5uZXI6b25seS1jaGlsZCkge1xuICAgICAgZmxleDogMTsgLy8gV2hlbiBpbiBgLmRpdG8tc2NoZW1hLWhlYWRlcmAuXG5cbiAgICAgID4gI3skc2VsZn1fX2lubmVyIHtcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICBpbnNldDogMDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAmOjphZnRlciB7XG4gICAgICAvLyBTaW5jZSA8bGFiZWw+IHVzZXMgYHBvc2l0aW9uOiBhYnNvbHV0ZWAsIHNldCBjb250ZW50IHRvIGEgemVyby13aWR0aFxuICAgICAgLy8gc3BhY2Ugb24gaXRzIHBhcmVudCB0byBlbmZvcmNlIHRoZSByaWdodCB0ZXh0IGhlaWdodCBpbiB0aGUgY29udGFpbmVyXG4gICAgICBjb250ZW50OiAnXFwyMDBiJzsgLy8gemVyby13aWR0aCBzcGFjZTtcbiAgICB9XG4gIH1cblxuICAuZGl0by1pbmZvIHtcbiAgICBtYXJnaW4tbGVmdDogMC4zNWVtO1xuICB9XG59XG5cbmEuZGl0by1sYWJlbCB7XG4gICY6aG92ZXIge1xuICAgIC5kaXRvLWNoZXZyb24ge1xuICAgICAgY29sb3I6ICRjb2xvci1kYXJrZXI7XG4gICAgfVxuICB9XG5cbiAgJjpmb2N1czpub3QoOmFjdGl2ZSwgLmRpdG8tYWN0aXZlKSB7XG4gICAgLmRpdG8tY2hldnJvbiB7XG4gICAgICAtd2Via2l0LXRleHQtc3Ryb2tlOiAkYm9yZGVyLXdpZHRoICRjb2xvci1hY3RpdmU7XG4gICAgfVxuICAgIC8vIERpc3BsYXkgbGFiZWxzIGluIGNvbXBhY3Qgc2NoZW1hIGFzIGlubGluZS1ibG9ja3MsIHRvIGFsbG93IGNvbXBhY3RcbiAgICAvLyBsYXlvdXRzIHdpdGggYHdpZHRoOiAnYXV0bydgIGVsZW1lbnRzOlxuICAgIC8vIFRPRE86IEZpbmQgYSBiZXR0ZXIgd2F5IHRvIGNvbnRyb2wgdGhpcyBiZWhhdmlvci5cbiAgfVxufVxuXG4uZGl0by1zY2hlbWEtY29tcGFjdCB7XG4gID4gLmRpdG8tc2NoZW1hLWNvbnRlbnQge1xuICAgID4gLmRpdG8tcGFuZSB7XG4gICAgICA+IC5kaXRvLWNvbnRhaW5lcjpub3QoLmRpdG8tY29udGFpbmVyLS1sYWJlbC12ZXJ0aWNhbCkge1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBmbGV4LWZsb3c6IHJvdyB3cmFwO1xuICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuPC9zdHlsZT5cbiIsImltcG9ydCBEaXRvQ29udGV4dCBmcm9tICcuLi9EaXRvQ29udGV4dC5qcydcbmltcG9ydCB7XG4gIGdldEl0ZW1Gb3JtU2NoZW1hLFxuICBnZXRJdGVtSWQsXG4gIGdldEl0ZW1VaWQsXG4gIGlzTGlzdFNvdXJjZVxufSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG5pbXBvcnQgeyBhcHBlbmREYXRhUGF0aCB9IGZyb20gJy4uL3V0aWxzL2RhdGEuanMnXG5pbXBvcnQgeyBpc09iamVjdCwgaXNTdHJpbmcsIGlzRnVuY3Rpb24gfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQge1xuICBtZXRob2RzOiB7XG4gICAgZ2V0SXRlbUZvcm1TY2hlbWEsXG5cbiAgICBnZXRJdGVtVWlkLFxuXG4gICAgZ2V0SXRlbUlkKHNvdXJjZVNjaGVtYSwgaXRlbSwgaW5kZXggPSBudWxsKSB7XG4gICAgICByZXR1cm4gdGhpcy5pc1RyYW5zaWVudCAmJiBpbmRleCAhPT0gbnVsbFxuICAgICAgICA/IFN0cmluZyhpbmRleClcbiAgICAgICAgOiBnZXRJdGVtSWQoc291cmNlU2NoZW1hLCBpdGVtKVxuICAgIH0sXG5cbiAgICBnZXRJdGVtRGF0YVBhdGgoc291cmNlU2NoZW1hLCBpbmRleCkge1xuICAgICAgbGV0IHsgZGF0YVBhdGggfSA9IHRoaXNcbiAgICAgIGlmIChzb3VyY2VTY2hlbWEgIT09IHRoaXMuc2NoZW1hKSB7XG4gICAgICAgIGRhdGFQYXRoID0gYXBwZW5kRGF0YVBhdGgoZGF0YVBhdGgsIHNvdXJjZVNjaGVtYS5uYW1lKVxuICAgICAgfVxuICAgICAgaWYgKGluZGV4ICE9IG51bGwpIHtcbiAgICAgICAgZGF0YVBhdGggPSBhcHBlbmREYXRhUGF0aChkYXRhUGF0aCwgaW5kZXgpXG4gICAgICB9XG4gICAgICByZXR1cm4gZGF0YVBhdGhcbiAgICB9LFxuXG4gICAgZ2V0SXRlbVN0b3JlKHNvdXJjZVNjaGVtYSwgaXRlbSwgaW5kZXgpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldENoaWxkU3RvcmUodGhpcy5nZXRJdGVtVWlkKHNvdXJjZVNjaGVtYSwgaXRlbSksIGluZGV4KVxuICAgIH0sXG5cbiAgICByZW1vdmVJdGVtU3RvcmUoc291cmNlU2NoZW1hLCBpdGVtLCBpbmRleCkge1xuICAgICAgdGhpcy5yZW1vdmVDaGlsZFN0b3JlKHRoaXMuZ2V0SXRlbVVpZChzb3VyY2VTY2hlbWEsIGl0ZW0pLCBpbmRleClcbiAgICB9LFxuXG4gICAgZmluZEl0ZW1JZEluZGV4KHNvdXJjZVNjaGVtYSwgZGF0YSwgaXRlbUlkKSB7XG4gICAgICBjb25zdCBpbmRleCA9IHRoaXMuaXNUcmFuc2llbnRcbiAgICAgICAgPyAvLyBGb3IgdHJhbnNpZW50IGRhdGEsIHRoZSBpbmRleCBpcyB1c2VkIGFzIHRoZSBpZFxuICAgICAgICAgIGl0ZW1JZFxuICAgICAgICA6IGRhdGE/LmZpbmRJbmRleChcbiAgICAgICAgICAgIChpdGVtLCBpbmRleCkgPT4gKFxuICAgICAgICAgICAgICB0aGlzLmdldEl0ZW1JZChzb3VyY2VTY2hlbWEsIGl0ZW0sIGluZGV4KSA9PT0gaXRlbUlkXG4gICAgICAgICAgICApXG4gICAgICAgICAgKVxuICAgICAgcmV0dXJuIGluZGV4ICE9PSAtMSA/IGluZGV4IDogbnVsbFxuICAgIH0sXG5cbiAgICBnZXRJdGVtTGFiZWwoc291cmNlU2NoZW1hLCBpdGVtLCB7XG4gICAgICBpbmRleCA9IG51bGwsXG4gICAgICBleHRlbmRlZCA9IGZhbHNlLFxuICAgICAgYXNPYmplY3QgPSBmYWxzZVxuICAgIH0gPSB7fSkge1xuICAgICAgY29uc3QgeyBpdGVtTGFiZWwgfSA9IHNvdXJjZVNjaGVtYVxuICAgICAgaWYgKCFpdGVtIHx8ICFleHRlbmRlZCAmJiBpdGVtTGFiZWwgPT09IGZhbHNlKSB7XG4gICAgICAgIHJldHVybiBudWxsXG4gICAgICB9XG5cbiAgICAgIGxldCBkYXRhUGF0aFxuICAgICAgY29uc3QgZ2V0RGF0YVBhdGggPSAoKSA9PlxuICAgICAgICAoZGF0YVBhdGggPz89IHRoaXMuZ2V0SXRlbURhdGFQYXRoKHNvdXJjZVNjaGVtYSwgaW5kZXgpKVxuXG4gICAgICBsZXQgZm9ybUxhYmVsXG4gICAgICBjb25zdCBnZXRGb3JtTGFiZWwgPSAoKSA9PlxuICAgICAgICAoZm9ybUxhYmVsID8/PSB0aGlzLmdldExhYmVsKFxuICAgICAgICAgIGdldEl0ZW1Gb3JtU2NoZW1hKHNvdXJjZVNjaGVtYSwgaXRlbSwgdGhpcy5jb250ZXh0KVxuICAgICAgICApKVxuXG4gICAgICBsZXQgdGV4dFxuICAgICAgbGV0IHByZWZpeFxuICAgICAgbGV0IHN1ZmZpeFxuICAgICAgaWYgKGlzRnVuY3Rpb24oaXRlbUxhYmVsKSkge1xuICAgICAgICBjb25zdCBsYWJlbCA9IGl0ZW1MYWJlbC5jYWxsKFxuICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgbmV3IERpdG9Db250ZXh0KHRoaXMsIHtcbiAgICAgICAgICAgIG5lc3RlZDogZmFsc2UsXG4gICAgICAgICAgICBkYXRhOiBpdGVtLFxuICAgICAgICAgICAgdmFsdWU6IGl0ZW0sXG4gICAgICAgICAgICBpbmRleCxcblxuICAgICAgICAgICAgZ2V0IGRhdGFQYXRoKCkge1xuICAgICAgICAgICAgICByZXR1cm4gZ2V0RGF0YVBhdGgoKVxuICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgZ2V0IGZvcm1MYWJlbCgpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGdldEZvcm1MYWJlbCgpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgICAgICBpZiAoaXNPYmplY3QobGFiZWwpKSB7XG4gICAgICAgICAgOyh7IHRleHQsIHByZWZpeCwgc3VmZml4IH0gPSBsYWJlbClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0ZXh0ID0gbGFiZWxcbiAgICAgICAgfVxuICAgICAgICAvLyBJdCdzIHVwIHRvIGBpdGVtTGFiZWwoKWAgZW50aXJlbHkgdG8gcHJvZHVjZSB0aGUgbGFiZWw6XG4gICAgICAgIGV4dGVuZGVkID0gZmFsc2VcbiAgICAgIH0gZWxzZSBpZiAoaXNTdHJpbmcoaXRlbUxhYmVsKSAmJiAhKGl0ZW1MYWJlbCBpbiBpdGVtKSkge1xuICAgICAgICAvLyBgaXRlbUxhYmVsYCBjYW4gYmUgYm90aCBhIGtleSwgb3Igc2ltcGx5IGEgbGFiZWwuXG4gICAgICAgIHRleHQgPSBpdGVtTGFiZWxcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIExvb2sgdXAgdGhlIG5hbWUgb24gdGhlIGl0ZW0sIGJ5IHRoZXNlIHJ1bGVzOlxuICAgICAgICAvLyAxLiBJZiBgaXRlbUxhYmVsYCBpcyBhIHN0cmluZywgdXNlIGl0IGFzIHRoZSBwcm9wZXJ0eSBrZXlcbiAgICAgICAgLy8gMi4gT3RoZXJ3aXNlLCBpZiB0aGVyZSBhcmUgY29sdW1ucywgdXNlIHRoZSB2YWx1ZSBvZiB0aGUgZmlyc3RcbiAgICAgICAgLy8gMy4gT3RoZXJ3aXNlLCBzZWUgaWYgdGhlIGl0ZW0gaGFzIGEgcHJvcGVydHkgbmFtZWQgJ25hbWUnXG4gICAgICAgIGNvbnN0IHsgY29sdW1ucyB9ID0gc291cmNlU2NoZW1hXG4gICAgICAgIGNvbnN0IGtleSA9IChcbiAgICAgICAgICBpc1N0cmluZyhpdGVtTGFiZWwpICYmIGl0ZW1MYWJlbCB8fFxuICAgICAgICAgIGlzTGlzdFNvdXJjZShzb3VyY2VTY2hlbWEpICYmIGNvbHVtbnMgJiYgT2JqZWN0LmtleXMoY29sdW1ucylbMF0gfHxcbiAgICAgICAgICAnbmFtZSdcbiAgICAgICAgKVxuICAgICAgICB0ZXh0ID0gaXRlbVtrZXldXG4gICAgICB9XG4gICAgICBjb25zdCBoYWRMYWJlbCA9ICEhdGV4dFxuICAgICAgLy8gSWYgbm8gbGFiZWwgd2FzIGZvdW5kIHNvIGZhciwgdHJ5IHRvIHByb2R1Y2Ugb25lIGZyb20gdGhlIGluZGV4LlxuICAgICAgaWYgKHRleHQgPT0gbnVsbCkge1xuICAgICAgICAvLyBBbHdheXMgdXNlIGV4dGVuZGVkIHN0eWxlIHdoZW4gYXV0by1nZW5lcmF0aW5nIGxhYmVscyBmcm9tIGluZGV4L2lkOlxuICAgICAgICBleHRlbmRlZCA9IHRydWVcbiAgICAgICAgdGV4dCA9XG4gICAgICAgICAgaXNMaXN0U291cmNlKHNvdXJjZVNjaGVtYSkgJiYgaW5kZXggIT09IG51bGxcbiAgICAgICAgICAgID8gKHRleHQgPSBgJHtpbmRleCArIDF9YClcbiAgICAgICAgICAgIDogJydcbiAgICAgIH1cbiAgICAgIGlmIChleHRlbmRlZCkge1xuICAgICAgICBjb25zdCBmb3JtTGFiZWwgPSBnZXRGb3JtTGFiZWwoKVxuICAgICAgICBpZiAoZm9ybUxhYmVsKSB7XG4gICAgICAgICAgLy8gSWYgYSBsYWJlbCB3YXMgcHJvdmlkZWQsIHB1dCBpbiBxdW90ZXMgd2hlbiBwcmVmaXhlZCB3aXRoIHRoZVxuICAgICAgICAgIC8vIGZvcm0gbGFiZWwgZm9yIHRoZSBleHRlbmRlZCBzdHlsZTpcbiAgICAgICAgICB0ZXh0ID0gYCR7Zm9ybUxhYmVsfSAke2hhZExhYmVsID8gYCcke3RleHR9J2AgOiB0ZXh0fWBcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGFzT2JqZWN0XG4gICAgICAgID8gdGV4dCB8fCBwcmVmaXggfHwgc3VmZml4XG4gICAgICAgICAgPyB7IHRleHQsIHByZWZpeCwgc3VmZml4IH1cbiAgICAgICAgICA6IG51bGxcbiAgICAgICAgOiB0ZXh0XG4gICAgfVxuICB9XG59XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuc2xvdChuYW1lPVwiYmVmb3JlXCIpXG4uZGl0by1zY2hlbWEoXG4gIDpjbGFzcz1cInsgJ2RpdG8tc2Nyb2xsLXBhcmVudCc6IHNjcm9sbGFibGUsICdkaXRvLXNjaGVtYS0tb3Blbic6IG9wZW5lZCB9XCJcbiAgdi1iaW5kPVwiJGF0dHJzXCJcbilcbiAgVGVsZXBvcnQoXG4gICAgdi1pZj1cImlzUG9wdWxhdGVkICYmIHBhbmVsRW50cmllcy5sZW5ndGggPiAwXCJcbiAgICB0bz1cIi5kaXRvLXNpZGViYXJfX3RlbGVwb3J0XCJcbiAgKVxuICAgIERpdG9QYW5lbHMoXG4gICAgICA6cGFuZWxzPVwicGFuZWxFbnRyaWVzXCJcbiAgICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgICA6bWV0YT1cIm1ldGFcIlxuICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgIClcbiAgVGVsZXBvcnQoXG4gICAgdi1pZj1cImhhc0hlYWRlclwiXG4gICAgOnRvPVwiaGVhZGVyVGVsZXBvcnRcIlxuICAgIDpkaXNhYmxlZD1cIiFoZWFkZXJUZWxlcG9ydFwiXG4gIClcbiAgICAuZGl0by1zY2hlbWEtaGVhZGVyXG4gICAgICBEaXRvTGFiZWwoXG4gICAgICAgIHYtaWY9XCJoYXNMYWJlbFwiXG4gICAgICAgIDpsYWJlbD1cImxhYmVsXCJcbiAgICAgICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgICAgICA6Y29sbGFwc2libGU9XCJjb2xsYXBzaWJsZVwiXG4gICAgICAgIDpjb2xsYXBzZWQ9XCIhb3BlbmVkXCJcbiAgICAgICAgQG9wZW49XCJvbk9wZW5cIlxuICAgICAgKVxuICAgICAgVHJhbnNpdGlvbihcbiAgICAgICAgdi1pZj1cInRhYnNcIlxuICAgICAgICBuYW1lPVwiZGl0by1mYWRlXCJcbiAgICAgIClcbiAgICAgICAgRGl0b1RhYnMoXG4gICAgICAgICAgdi1pZj1cIm9wZW5lZFwiXG4gICAgICAgICAgdi1tb2RlbD1cInNlbGVjdGVkVGFiXCJcbiAgICAgICAgICA6dGFicz1cInRhYnNcIlxuICAgICAgICApXG4gICAgICBEaXRvQ2xpcGJvYXJkKFxuICAgICAgICB2LWlmPVwiY2xpcGJvYXJkXCJcbiAgICAgICAgOmNsaXBib2FyZD1cImNsaXBib2FyZFwiXG4gICAgICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgICAgKVxuICAgICAgc2xvdChuYW1lPVwiZWRpdC1idXR0b25zXCIpXG4gIFRyYW5zaXRpb25IZWlnaHQoOmVuYWJsZWQ9XCJpbmxpbmVkXCIpXG4gICAgLmRpdG8tc2NoZW1hLWNvbnRlbnQoXG4gICAgICB2LWlmPVwib3BlbmVkXCJcbiAgICAgIHJlZj1cImNvbnRlbnRcIlxuICAgICAgOmNsYXNzPVwieyAnZGl0by1zY3JvbGwnOiBzY3JvbGxhYmxlIH1cIlxuICAgIClcbiAgICAgIHRlbXBsYXRlKFxuICAgICAgICB2LWlmPVwiaGFzVGFic1wiXG4gICAgICApXG4gICAgICAgIHRlbXBsYXRlKFxuICAgICAgICAgIHYtZm9yPVwiKHRhYlNjaGVtYSwgdGFiKSBpbiB0YWJzXCJcbiAgICAgICAgICA6a2V5PVwidGFiXCJcbiAgICAgICAgKVxuICAgICAgICAgIC8vLSBUT0RPOiBTd2l0Y2ggdG8gdi1pZiBpbnN0ZWFkIG9mIHYtc2hvdywgb25jZSB2YWxpZGF0aW9uIGlzXG4gICAgICAgICAgLy8tIGRlY291cGxlZCBmcm9tIGNvbXBvbmVudHMuXG4gICAgICAgICAgRGl0b1BhbmUuZGl0by1wYW5lX190YWIoXG4gICAgICAgICAgICB2LXNob3c9XCJzZWxlY3RlZFRhYiA9PT0gdGFiXCJcbiAgICAgICAgICAgIHJlZj1cInRhYnNcIlxuICAgICAgICAgICAgOnRhYj1cInRhYlwiXG4gICAgICAgICAgICA6c2NoZW1hPVwidGFiU2NoZW1hXCJcbiAgICAgICAgICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICAgICAgICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgICAgICAgICA6bWV0YT1cIm1ldGFcIlxuICAgICAgICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgICAgICAgICAgOnBhZGRpbmc9XCJwYWRkaW5nXCJcbiAgICAgICAgICAgIDpzaW5nbGU9XCIhaW5saW5lZCAmJiAhaGFzTWFpblBhbmVcIlxuICAgICAgICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgICAgICAgICAgOmdlbmVyYXRlTGFiZWxzPVwiZ2VuZXJhdGVMYWJlbHNcIlxuICAgICAgICAgICAgOmFjY3VtdWxhdGVkQmFzaXM9XCJhY2N1bXVsYXRlZEJhc2lzXCJcbiAgICAgICAgICApXG4gICAgICBEaXRvUGFuZS5kaXRvLXBhbmVfX21haW4oXG4gICAgICAgIHYtaWY9XCJoYXNNYWluUGFuZVwiXG4gICAgICAgIHJlZj1cImNvbXBvbmVudHNcIlxuICAgICAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICAgICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgICAgICA6ZGF0YT1cImRhdGFcIlxuICAgICAgICA6bWV0YT1cIm1ldGFcIlxuICAgICAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgICAgIDpwYWRkaW5nPVwicGFkZGluZ1wiXG4gICAgICAgIDpzaW5nbGU9XCIhaW5saW5lZCAmJiAhaGFzVGFic1wiXG4gICAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICAgICAgOmdlbmVyYXRlTGFiZWxzPVwiZ2VuZXJhdGVMYWJlbHNcIlxuICAgICAgICA6YWNjdW11bGF0ZWRCYXNpcz1cImFjY3VtdWxhdGVkQmFzaXNcIlxuICAgICAgKVxuICAgICAgc2xvdChcbiAgICAgICAgdi1pZj1cIiFpbmxpbmVkICYmIGlzUG9wdWxhdGVkXCJcbiAgICAgICAgbmFtZT1cImJ1dHRvbnNcIlxuICAgICAgKVxuICBzbG90KFxuICAgIHYtaWY9XCJpbmxpbmVkICYmICFoYXNIZWFkZXJcIlxuICAgIG5hbWU9XCJlZGl0LWJ1dHRvbnNcIlxuICApXG5zbG90KG5hbWU9XCJhZnRlclwiKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCB7XG4gIGlzT2JqZWN0LFxuICBpc0FycmF5LFxuICBpc0Z1bmN0aW9uLFxuICBpc1JlZ0V4cCxcbiAgZXF1YWxzLFxuICBwYXJzZURhdGFQYXRoLFxuICBub3JtYWxpemVEYXRhUGF0aCxcbiAgbGFiZWxpemVcbn0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCB7IFRyYW5zaXRpb25IZWlnaHQgfSBmcm9tICdAZGl0b2pzL3VpL3NyYydcbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgSXRlbU1peGluIGZyb20gJy4uL21peGlucy9JdGVtTWl4aW4uanMnXG5pbXBvcnQgeyBhcHBlbmREYXRhUGF0aCwgZ2V0UGFyZW50SXRlbSB9IGZyb20gJy4uL3V0aWxzL2RhdGEuanMnXG5pbXBvcnQge1xuICBnZXROYW1lZFNjaGVtYXMsXG4gIGdldFBhbmVsRW50cmllcyxcbiAgc2V0RGVmYXVsdFZhbHVlcyxcbiAgcHJvY2Vzc0RhdGFcbn0gZnJvbSAnLi4vdXRpbHMvc2NoZW1hLmpzJ1xuaW1wb3J0IHsgZ2V0U2NoZW1hQWNjZXNzb3IsIGdldFN0b3JlQWNjZXNzb3IgfSBmcm9tICcuLi91dGlscy9hY2Nlc3Nvci5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdEaXRvU2NoZW1hJywge1xuICBtaXhpbnM6IFtJdGVtTWl4aW5dLFxuICBjb21wb25lbnRzOiB7IFRyYW5zaXRpb25IZWlnaHQgfSxcbiAgaW5oZXJpdEF0dHJzOiBmYWxzZSxcblxuICBwcm92aWRlKCkge1xuICAgIHJldHVybiB7XG4gICAgICAkc2NoZW1hQ29tcG9uZW50OiAoKSA9PiB0aGlzXG4gICAgfVxuICB9LFxuXG4gIGluamVjdDogW1xuICAgICckc2NoZW1hUGFyZW50Q29tcG9uZW50J1xuICBdLFxuXG4gIHByb3BzOiB7XG4gICAgc2NoZW1hOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBkYXRhUGF0aDogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6ICcnIH0sXG4gICAgZGF0YTogeyB0eXBlOiBPYmplY3QsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBtZXRhOiB7IHR5cGU6IE9iamVjdCwgZGVmYXVsdDogKCkgPT4gKHt9KSB9LFxuICAgIHN0b3JlOiB7IHR5cGU6IE9iamVjdCwgZGVmYXVsdDogKCkgPT4gKHt9KSB9LFxuICAgIGxhYmVsOiB7IHR5cGU6IFtTdHJpbmcsIE9iamVjdF0sIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBwYWRkaW5nOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogbnVsbCB9LFxuICAgIGlubGluZWQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBkaXNhYmxlZDogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGNvbGxhcHNlZDogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGNvbGxhcHNpYmxlOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgc2Nyb2xsYWJsZTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGhhc093bkRhdGE6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBnZW5lcmF0ZUxhYmVsczogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGxhYmVsTm9kZTogeyB0eXBlOiBIVE1MRWxlbWVudCwgZGVmYXVsdDogbnVsbCB9LFxuICAgIGFjY3VtdWxhdGVkQmFzaXM6IHsgdHlwZTogTnVtYmVyLCBkZWZhdWx0OiAxIH1cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIGNvbnN0IHsgZGF0YSB9ID0gdGhpcy5zY2hlbWFcbiAgICByZXR1cm4ge1xuICAgICAgLy8gQWxsb3cgc2NoZW1hIHRvIHByb3ZpZGUgbW9yZSBkYXRhIHRocm91Z2ggYHNjaGVtYS5kYXRhYCwgdnVlLXN0eWxlOlxuICAgICAgLi4uKFxuICAgICAgICBkYXRhICYmIGlzRnVuY3Rpb24oZGF0YSlcbiAgICAgICAgICA/IGRhdGEodGhpcy5jb250ZXh0KVxuICAgICAgICAgIDogZGF0YVxuICAgICAgKSxcbiAgICAgIGN1cnJlbnRUYWI6IG51bGwsXG4gICAgICBjb21wb25lbnRzUmVnaXN0cnk6IHt9LFxuICAgICAgcGFuZXNSZWdpc3RyeToge30sXG4gICAgICBwYW5lbHNSZWdpc3RyeToge31cbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBzY2hlbWFDb21wb25lbnQoKSB7XG4gICAgICAvLyBPdmVycmlkZSBEaXRvTWl4aW4ncyBzY2hlbWFDb21wb25lbnQoKSB3aGljaCB1c2VzIHRoZSBpbmplY3RlZCB2YWx1ZS5cbiAgICAgIHJldHVybiB0aGlzXG4gICAgfSxcblxuICAgIHBhcmVudFNjaGVtYUNvbXBvbmVudCgpIHtcbiAgICAgIC8vIERvbid0IHJldHVybiB0aGUgYWN0dWFsIHBhcmVudCBzY2hlbWEgaXMgdGhpcyBzY2hlbWEgaGFuZGxlcyBpdHMgb3duXG4gICAgICAvLyBkYXRhLiBUaGlzIHByZXZlbnRzIGRlbGVnYXRpbmcgZXZlbnRzIHRvIHRoZSBwYXJlbnQsIGFuZCByZWdpc3RlcmluZ1xuICAgICAgLy8gY29tcG9uZW50cyB3aXRoIHRoZSBwYXJlbnQgdGhhdCB3b3VsZCBjYXVzZSBpdCB0byBzZXQgaXNEaXJ0eSBmbGFncy5cbiAgICAgIHJldHVybiB0aGlzLmhhc093bkRhdGEgPyBudWxsIDogdGhpcy5wYXJlbnRDb21wb25lbnQuc2NoZW1hQ29tcG9uZW50XG4gICAgfSxcblxuICAgIHBhbmVsRW50cmllcygpIHtcbiAgICAgIHJldHVybiBnZXRQYW5lbEVudHJpZXModGhpcy5zY2hlbWEucGFuZWxzLCB0aGlzLmRhdGFQYXRoKVxuICAgIH0sXG5cbiAgICB0YWJzKCkge1xuICAgICAgcmV0dXJuIGdldE5hbWVkU2NoZW1hcyh0aGlzLnNjaGVtYS50YWJzKVxuICAgIH0sXG5cbiAgICBzZWxlY3RlZFRhYjoge1xuICAgICAgZ2V0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jdXJyZW50VGFiIHx8IHRoaXMuZGVmYXVsdFRhYiB8fCBudWxsXG4gICAgICB9LFxuXG4gICAgICBzZXQoc2VsZWN0ZWRUYWIpIHtcbiAgICAgICAgdGhpcy5jdXJyZW50VGFiID0gc2VsZWN0ZWRUYWJcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZGVmYXVsdFRhYigpIHtcbiAgICAgIGxldCBmaXJzdCA9IG51bGxcbiAgICAgIGlmICh0aGlzLnRhYnMpIHtcbiAgICAgICAgY29uc3QgdGFicyA9IE9iamVjdC52YWx1ZXModGhpcy50YWJzKS5maWx0ZXIodGhpcy5zaG91bGRSZW5kZXJTY2hlbWEpXG4gICAgICAgIGZvciAoY29uc3QgeyBuYW1lLCBkZWZhdWx0VGFiIH0gb2YgdGFicykge1xuICAgICAgICAgIGlmIChpc0Z1bmN0aW9uKGRlZmF1bHRUYWIpID8gZGVmYXVsdFRhYih0aGlzLmNvbnRleHQpIDogZGVmYXVsdFRhYikge1xuICAgICAgICAgICAgcmV0dXJuIG5hbWVcbiAgICAgICAgICB9XG4gICAgICAgICAgZmlyc3QgPz89IG5hbWVcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGZpcnN0XG4gICAgfSxcblxuICAgIGNsaXBib2FyZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYT8uY2xpcGJvYXJkID8/IG51bGxcbiAgICB9LFxuXG4gICAgaGFzSGVhZGVyKCkge1xuICAgICAgcmV0dXJuIHRoaXMuaGFzTGFiZWwgfHwgdGhpcy5oYXNUYWJzIHx8ICEhdGhpcy5jbGlwYm9hcmRcbiAgICB9LFxuXG4gICAgaGVhZGVyVGVsZXBvcnQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5pc1Jvb3RTY2hlbWFcbiAgICAgICAgPyAnLmRpdG8taGVhZGVyX190ZWxlcG9ydCdcbiAgICAgICAgOiB0aGlzLmxhYmVsTm9kZVxuICAgIH0sXG5cbiAgICBwYXJlbnREYXRhKCkge1xuICAgICAgY29uc3QgZGF0YSA9IGdldFBhcmVudEl0ZW0odGhpcy5yb290RGF0YSwgdGhpcy5kYXRhUGF0aCwgZmFsc2UpXG4gICAgICByZXR1cm4gZGF0YSAhPT0gdGhpcy5kYXRhID8gZGF0YSA6IG51bGxcbiAgICB9LFxuXG4gICAgcHJvY2Vzc2VkRGF0YSgpIHtcbiAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NEYXRhKHsgdGFyZ2V0OiAnc2VydmVyJywgc2NoZW1hT25seTogdHJ1ZSB9KVxuICAgIH0sXG5cbiAgICBjbGlwYm9hcmREYXRhOiB7XG4gICAgICBnZXQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NEYXRhKHsgdGFyZ2V0OiAnY2xpcGJvYXJkJywgc2NoZW1hT25seTogdHJ1ZSB9KVxuICAgICAgfSxcblxuICAgICAgc2V0KGRhdGEpIHtcbiAgICAgICAgdGhpcy5zZXREYXRhKGRhdGEpXG4gICAgICB9XG4gICAgfSxcblxuICAgIC8vIFRoZSBmb2xsb3dpbmcgY29tcHV0ZWQgcHJvcGVydGllcyBhcmUgc2ltaWxhciB0byBgRGl0b0NvbnRleHRgXG4gICAgLy8gcHJvcGVydGllcywgc28gdGhhdCB3ZSBjYW4gYWNjZXNzIHRoZXNlIG9uIGB0aGlzYCBhcyB3ZWxsOlxuICAgIC8vIE5PVEU6IFdoaWxlIGludGVybmFsbHksIHdlIHNwZWFrIG9mIGBkYXRhYCwgaW4gdGhlIEFQSSBzdXJmYWNlIHRoZVxuICAgIC8vIHRlcm0gYGl0ZW1gIGlzIHVzZWQgZm9yIHRoZSBkYXRhIHRoYXQgcmVsYXRlcyB0byBlZGl0aW5nIG9iamVjdHMuXG4gICAgLy8gTk9URTogVGhpcyBzaG91bGQgYWx3YXlzIHJldHVybiB0aGUgc2FtZSBhczpcbiAgICAvLyByZXR1cm4gZ2V0SXRlbSh0aGlzLnJvb3REYXRhLCB0aGlzLmRhdGFQYXRoLCBmYWxzZSlcbiAgICBpdGVtKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZGF0YVxuICAgIH0sXG5cbiAgICBwYXJlbnRJdGVtKCkge1xuICAgICAgcmV0dXJuIHRoaXMucGFyZW50RGF0YVxuICAgIH0sXG5cbiAgICByb290SXRlbSgpIHtcbiAgICAgIHJldHVybiB0aGlzLnJvb3REYXRhXG4gICAgfSxcblxuICAgIHByb2Nlc3NlZEl0ZW0oKSB7XG4gICAgICByZXR1cm4gdGhpcy5wcm9jZXNzZWREYXRhXG4gICAgfSxcblxuICAgIGNsaXBib2FyZEl0ZW0oKSB7XG4gICAgICByZXR1cm4gdGhpcy5jbGlwYm9hcmREYXRhXG4gICAgfSxcblxuICAgIGZvcm1MYWJlbCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldExhYmVsKFxuICAgICAgICB0aGlzLmdldEl0ZW1Gb3JtU2NoZW1hKHRoaXMuc291cmNlU2NoZW1hLCB0aGlzLmRhdGEsIHRoaXMuY29udGV4dClcbiAgICAgIClcbiAgICB9LFxuXG4gICAgaXNSb290U2NoZW1hKCkge1xuICAgICAgLy8gU2VjdGlvbiBzY2hlbWFzIGNhbiBzaGFyZSB0aGUgcm9vdCBkYXRhUGF0aCBidXQgdGhleSBhcmUgaW5saW5lZC5cbiAgICAgIHJldHVybiB0aGlzLmRhdGFQYXRoID09PSAnJyAmJiAhdGhpcy5pbmxpbmVkXG4gICAgfSxcblxuICAgIGlzRGlydHkoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zb21lQ29tcG9uZW50KGl0ID0+IGl0LmlzRGlydHkpXG4gICAgfSxcblxuICAgIGlzVG91Y2hlZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLnNvbWVDb21wb25lbnQoaXQgPT4gaXQuaXNUb3VjaGVkKVxuICAgIH0sXG5cbiAgICBpc1ZhbGlkKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZXZlcnlDb21wb25lbnQoaXQgPT4gaXQuaXNWYWxpZClcbiAgICB9LFxuXG4gICAgaXNWYWxpZGF0ZWQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5ldmVyeUNvbXBvbmVudChpdCA9PiBpdC5pc1ZhbGlkYXRlZClcbiAgICB9LFxuXG4gICAgaGFzRXJyb3JzKCkge1xuICAgICAgcmV0dXJuIHRoaXMuc29tZUNvbXBvbmVudChpdCA9PiBpdC5oYXNFcnJvcnMpXG4gICAgfSxcblxuICAgIGhhc0RhdGEoKSB7XG4gICAgICByZXR1cm4gISF0aGlzLmRhdGFcbiAgICB9LFxuXG4gICAgaGFzTGFiZWwoKSB7XG4gICAgICByZXR1cm4gISF0aGlzLmxhYmVsIHx8IHRoaXMuY29sbGFwc2libGVcbiAgICB9LFxuXG4gICAgaGFzVGFicygpIHtcbiAgICAgIHJldHVybiAhIXRoaXMudGFic1xuICAgIH0sXG5cbiAgICBoYXNNYWluVGFicygpIHtcbiAgICAgIHJldHVybiB0aGlzLmhhc1RhYnMgJiYgdGhpcy5pc1Jvb3RTY2hlbWFcbiAgICB9LFxuXG4gICAgaGFzTWFpblBhbmUoKSB7XG4gICAgICBjb25zdCB7IGNvbXBvbmVudHMgfSA9IHRoaXMuc2NoZW1hXG4gICAgICByZXR1cm4gISFjb21wb25lbnRzICYmIE9iamVjdC5rZXlzKGNvbXBvbmVudHMpLmxlbmd0aCA+IDBcbiAgICB9LFxuXG4gICAgb3BlbmVkOiBnZXRTdG9yZUFjY2Vzc29yKCdvcGVuZWQnLCB7XG4gICAgICBkZWZhdWx0KCkge1xuICAgICAgICByZXR1cm4gIXRoaXMuY29sbGFwc2VkXG4gICAgICB9XG4gICAgfSksXG5cbiAgICBjb21wb25lbnRzKCkge1xuICAgICAgcmV0dXJuIE9iamVjdC52YWx1ZXModGhpcy5jb21wb25lbnRzUmVnaXN0cnkpXG4gICAgfSxcblxuICAgIHBhbmVzKCkge1xuICAgICAgcmV0dXJuIE9iamVjdC52YWx1ZXModGhpcy5wYW5lc1JlZ2lzdHJ5KVxuICAgIH0sXG5cbiAgICBwYW5lbHMoKSB7XG4gICAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyh0aGlzLnBhbmVsc1JlZ2lzdHJ5KVxuICAgIH0sXG5cbiAgICBjb21wb25lbnRzQnlEYXRhUGF0aCgpIHtcbiAgICAgIHJldHVybiB0aGlzLl9saXN0RW50cmllc0J5RGF0YVBhdGgodGhpcy5jb21wb25lbnRzUmVnaXN0cnkpXG4gICAgfSxcblxuICAgIHBhbmVzQnlEYXRhUGF0aCgpIHtcbiAgICAgIHJldHVybiB0aGlzLl9saXN0RW50cmllc0J5RGF0YVBhdGgodGhpcy5wYW5lc1JlZ2lzdHJ5KVxuICAgIH0sXG5cbiAgICBwYW5lbHNCeURhdGFQYXRoKCkge1xuICAgICAgcmV0dXJuIHRoaXMuX2xpc3RFbnRyaWVzQnlEYXRhUGF0aCh0aGlzLnBhbmVsc1JlZ2lzdHJ5KVxuICAgIH0sXG5cbiAgICB3aWRlOiBnZXRTY2hlbWFBY2Nlc3Nvcignd2lkZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0pXG4gIH0sXG5cbiAgd2F0Y2g6IHtcbiAgICAnJHJvdXRlLmhhc2gnOiB7XG4gICAgICBpbW1lZGlhdGU6IHRydWUsXG4gICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vdnVlanMvdnVlLXJvdXRlci9pc3N1ZXMvMzM5MyNpc3N1ZWNvbW1lbnQtMTE1ODQ3MDE0OVxuICAgICAgZmx1c2g6ICdwb3N0JyxcbiAgICAgIGhhbmRsZXIoaGFzaCkge1xuICAgICAgICAvLyBSZW1lbWJlciB0aGUgY3VycmVudCBwYXRoIHRvIGtub3cgaWYgdGFiIGNoYW5nZXMgc2hvdWxkIHN0aWxsIGJlXG4gICAgICAgIC8vIGhhbmRsZWQsIGJ1dCByZW1vdmUgdGhlIHRyYWlsaW5nIGAvY3JlYXRlYCBvciBgLzppZGAgZnJvbSBpdCBzbyB0aGF0XG4gICAgICAgIC8vIHRhYnMgaW5mb3JtcyB0aGF0IHN0YXkgb3BlbiBhZnRlciBjcmVhdGlvbiBzdGlsbCB3b3JrLlxuICAgICAgICBpZiAodGhpcy5oYXNNYWluVGFicykge1xuICAgICAgICAgIHRoaXMuY3VycmVudFRhYiA9IGhhc2g/LnNsaWNlKDEpIHx8IG51bGxcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICAnc2VsZWN0ZWRUYWInKHNlbGVjdGVkVGFiKSB7XG4gICAgICBpZiAodGhpcy5oYXNNYWluVGFicykge1xuICAgICAgICBjb25zdCB0YWIgPSB0aGlzLnNob3VsZFJlbmRlclNjaGVtYSh0aGlzLnRhYnNbc2VsZWN0ZWRUYWJdKVxuICAgICAgICAgID8gc2VsZWN0ZWRUYWJcbiAgICAgICAgICA6IHRoaXMuZGVmYXVsdFRhYlxuICAgICAgICB0aGlzLiRyb3V0ZXIucmVwbGFjZSh7IGhhc2g6IHRhYiA/IGAjJHt0YWJ9YCA6IG51bGwgfSlcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmhhc0Vycm9ycykge1xuICAgICAgICB0aGlzLnJlcG9zaXRpb25FcnJvcnMoKVxuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBjcmVhdGVkKCkge1xuICAgIHRoaXMuX3JlZ2lzdGVyKHRydWUpXG4gICAgdGhpcy5zZXR1cFNjaGVtYUZpZWxkcygpXG4gICAgLy8gRGVsZWdhdGUgY2hhbmdlIGV2ZW50cyB0aHJvdWdoIHRvIHBhcmVudCBzY2hlbWE6XG4gICAgdGhpcy5kZWxlZ2F0ZSgnY2hhbmdlJywgdGhpcy5wYXJlbnRTY2hlbWFDb21wb25lbnQpXG4gICAgdGhpcy5lbWl0RXZlbnQoJ2luaXRpYWxpemUnKSAvLyBOb3QgYCdjcmVhdGUnYCwgc2luY2UgdGhhdCdzIGZvciBkYXRhLlxuICAgIGlmICh0aGlzLnNjcm9sbGFibGUgJiYgdGhpcy53aWRlKSB7XG4gICAgICB0aGlzLmFwcFN0YXRlLnBhZ2VDbGFzcyA9ICdkaXRvLXBhZ2UtLXdpZGUnXG4gICAgfVxuICB9LFxuXG4gIHVubW91bnRlZCgpIHtcbiAgICB0aGlzLmVtaXRFdmVudCgnZGVzdHJveScpXG4gICAgdGhpcy5fcmVnaXN0ZXIoZmFsc2UpXG4gICAgaWYgKHRoaXMuc2Nyb2xsYWJsZSAmJiB0aGlzLndpZGUpIHtcbiAgICAgIHRoaXMuYXBwU3RhdGUucGFnZUNsYXNzID0gbnVsbFxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZ2V0Q29tcG9uZW50c0J5RGF0YVBhdGgoZGF0YVBhdGgpIHtcbiAgICAgIHJldHVybiB0aGlzLl9nZXRFbnRyaWVzQnlEYXRhUGF0aCh0aGlzLmNvbXBvbmVudHNCeURhdGFQYXRoLCBkYXRhUGF0aClcbiAgICB9LFxuXG4gICAgZ2V0Q29tcG9uZW50QnlEYXRhUGF0aChkYXRhUGF0aCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0Q29tcG9uZW50c0J5RGF0YVBhdGgoZGF0YVBhdGgpWzBdIHx8IG51bGxcbiAgICB9LFxuXG4gICAgZ2V0Q29tcG9uZW50c0J5TmFtZShkYXRhUGF0aCkge1xuICAgICAgcmV0dXJuIHRoaXMuX2dldEVudHJpZXNCeU5hbWUodGhpcy5jb21wb25lbnRzQnlEYXRhUGF0aCwgZGF0YVBhdGgpXG4gICAgfSxcblxuICAgIGdldENvbXBvbmVudEJ5TmFtZShuYW1lKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRDb21wb25lbnRzQnlOYW1lKG5hbWUpWzBdIHx8IG51bGxcbiAgICB9LFxuXG4gICAgZ2V0Q29tcG9uZW50cyhkYXRhUGF0aE9yTmFtZSkge1xuICAgICAgcmV0dXJuIHRoaXMuX2dldEVudHJpZXModGhpcy5jb21wb25lbnRzQnlEYXRhUGF0aCwgZGF0YVBhdGhPck5hbWUpXG4gICAgfSxcblxuICAgIGdldENvbXBvbmVudChkYXRhUGF0aE9yTmFtZSkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0Q29tcG9uZW50cyhkYXRhUGF0aE9yTmFtZSlbMF0gfHwgbnVsbFxuICAgIH0sXG5cbiAgICBnZXRQYW5lbHNCeURhdGFQYXRoKGRhdGFQYXRoKSB7XG4gICAgICByZXR1cm4gdGhpcy5fZ2V0RW50cmllc0J5RGF0YVBhdGgodGhpcy5wYW5lbHNCeURhdGFQYXRoLCBkYXRhUGF0aClcbiAgICB9LFxuXG4gICAgZ2V0UGFuZWxCeURhdGFQYXRoKGRhdGFQYXRoKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRQYW5lbHNCeURhdGFQYXRoKGRhdGFQYXRoKVswXSB8fCBudWxsXG4gICAgfSxcblxuICAgIGdldFBhbmVscyhkYXRhUGF0aE9yTmFtZSkge1xuICAgICAgcmV0dXJuIHRoaXMuX2dldEVudHJpZXModGhpcy5wYW5lbHNCeURhdGFQYXRoLCBkYXRhUGF0aE9yTmFtZSlcbiAgICB9LFxuXG4gICAgZ2V0UGFuZWwoZGF0YVBhdGhPck5hbWUpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldFBhbmVscyhkYXRhUGF0aE9yTmFtZSlbMF0gfHwgbnVsbFxuICAgIH0sXG5cbiAgICBzb21lQ29tcG9uZW50KGNhbGxiYWNrKSB7XG4gICAgICByZXR1cm4gdGhpcy5pc1BvcHVsYXRlZCAmJiB0aGlzLmNvbXBvbmVudHMuc29tZShjYWxsYmFjaylcbiAgICB9LFxuXG4gICAgZXZlcnlDb21wb25lbnQoY2FsbGJhY2spIHtcbiAgICAgIHJldHVybiB0aGlzLmlzUG9wdWxhdGVkICYmIHRoaXMuY29tcG9uZW50cy5ldmVyeShjYWxsYmFjaylcbiAgICB9LFxuXG4gICAgb25PcGVuKG9wZW4pIHtcbiAgICAgIHRoaXMuZW1pdEV2ZW50KCdvcGVuJywgeyBjb250ZXh0OiB7IG9wZW4gfSB9KVxuICAgICAgLy8gUHJldmVudCBjbG9zaW5nIHRoZSBzY2hlbWEgd2l0aCBpbnZhbGlkIGRhdGEsIHNpbmNlIHRoZSBpbi1jb21wb25lbnRcbiAgICAgIC8vIHZhbGlkYXRpb24gd2lsbCBub3QgYmUgZXhlY3V0ZWQgb25jZSBpdCdzIGNsb3NlZC5cblxuICAgICAgLy8gVE9ETzogTW92ZSB2YWxpZGF0aW9uIG91dCBvZiBjb21wb25lbnRzLCB0byBzY2hlbWEsIGp1c3QgbGlrZVxuICAgICAgLy8gcHJvY2Vzc2luZywgYW5kIHVzZSBgc2hvd1ZhbGlkYXRpb25FcnJvcnMoKWAgZm9yIHRoZSByZXN1bHRpbmcgZXJyb3JzLFxuICAgICAgLy8gdGhlbiByZW1vdmUgdGhpcyByZXF1aXJlbWVudCwgc2luY2Ugd2UgY2FuIHZhbGlkYXRlIGNsb3NlZCBmb3JtcyBhbmRcbiAgICAgIC8vIHNjaGVtYXMgdGhlbi5cbiAgICAgIGlmICghdGhpcy5vcGVuZWQgfHwgb3BlbiB8fCB0aGlzLnZhbGlkYXRlQWxsKCkpIHtcbiAgICAgICAgdGhpcy5vcGVuZWQgPSBvcGVuXG4gICAgICB9XG4gICAgfSxcblxuICAgIG9uQ2hhbmdlKCkge1xuICAgICAgdGhpcy5lbWl0RXZlbnQoJ2NoYW5nZScpXG4gICAgfSxcblxuICAgIHJlc2V0VmFsaWRhdGlvbigpIHtcbiAgICAgIGZvciAoY29uc3QgY29tcG9uZW50IG9mIHRoaXMuY29tcG9uZW50cykge1xuICAgICAgICBjb21wb25lbnQucmVzZXRWYWxpZGF0aW9uKClcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgY2xlYXJFcnJvcnMoKSB7XG4gICAgICBmb3IgKGNvbnN0IGNvbXBvbmVudCBvZiB0aGlzLmNvbXBvbmVudHMpIHtcbiAgICAgICAgY29tcG9uZW50LmNsZWFyRXJyb3JzKClcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgcmVwb3NpdGlvbkVycm9ycygpIHtcbiAgICAgIC8vIEZpcmUgYSBmYWtlIHNjcm9sbCBldmVudCB0byBmb3JjZSB0aGUgcmVwb3NpdGlvbmluZyBvZiBlcnJvciB0b29sdGlwcyxcbiAgICAgIC8vIGFzIG90aGVyd2lzZSB0aGV5IHNvbWV0aW1lcyBkb24ndCBzaG93IHVwIGluIHRoZSByaWdodCBwbGFjZSBpbml0aWFsbHlcbiAgICAgIC8vIHdoZW4gY2hhbmdpbmcgdGFicy5cbiAgICAgIGNvbnN0IHNjcm9sbENvbnRhaW5lciA9IHRoaXMuJHJlZnMuY29udGVudC5jbG9zZXN0KCcuZGl0by1zY3JvbGwnKVxuICAgICAgY29uc3QgZGlzcGF0Y2ggPSAoKSA9PiBzY3JvbGxDb250YWluZXIuZGlzcGF0Y2hFdmVudChuZXcgRXZlbnQoJ3Njcm9sbCcpKVxuICAgICAgZGlzcGF0Y2goKVxuICAgICAgLy8gVGhpcyBpcyByZXF1aXJlZCB0byBoYW5kbGUgYCYtLWxhYmVsLXZlcnRpY2FsYCBiYXNlZCBsYXlvdXQgY2hhbmdlcy5cbiAgICAgIHNldFRpbWVvdXQoZGlzcGF0Y2gsIDApXG4gICAgfSxcblxuICAgIGZvY3VzKCkge1xuICAgICAgdGhpcy5vcGVuZWQgPSB0cnVlXG4gICAgICByZXR1cm4gdGhpcy5wYXJlbnRTY2hlbWFDb21wb25lbnQ/LmZvY3VzKClcbiAgICB9LFxuXG4gICAgdmFsaWRhdGVBbGwobWF0Y2gsIG5vdGlmeSA9IHRydWUpIHtcbiAgICAgIGNvbnN0IHsgY29tcG9uZW50c0J5RGF0YVBhdGggfSA9IHRoaXNcbiAgICAgIGxldCBkYXRhUGF0aHNcbiAgICAgIGlmIChtYXRjaCkge1xuICAgICAgICBjb25zdCBjaGVjayA9IGlzRnVuY3Rpb24obWF0Y2gpXG4gICAgICAgICAgPyBtYXRjaFxuICAgICAgICAgIDogaXNSZWdFeHAobWF0Y2gpXG4gICAgICAgICAgICA/IGZpZWxkID0+IG1hdGNoLnRlc3QoZmllbGQpXG4gICAgICAgICAgICA6IG51bGxcbiAgICAgICAgZGF0YVBhdGhzID0gY2hlY2tcbiAgICAgICAgICA/IE9iamVjdC5rZXlzKGNvbXBvbmVudHNCeURhdGFQYXRoKS5maWx0ZXIoY2hlY2spXG4gICAgICAgICAgOiBpc0FycmF5KG1hdGNoKVxuICAgICAgICAgICAgPyBtYXRjaFxuICAgICAgICAgICAgOiBbbWF0Y2hdXG4gICAgICB9XG4gICAgICBpZiAobm90aWZ5KSB7XG4gICAgICAgIHRoaXMuY2xlYXJFcnJvcnMoKVxuICAgICAgfVxuICAgICAgbGV0IGlzVmFsaWQgPSB0cnVlXG4gICAgICBsZXQgZmlyc3QgPSB0cnVlXG4gICAgICBkYXRhUGF0aHMgfHw9IE9iamVjdC5rZXlzKGNvbXBvbmVudHNCeURhdGFQYXRoKVxuICAgICAgZm9yIChjb25zdCBkYXRhUGF0aCBvZiBkYXRhUGF0aHMpIHtcbiAgICAgICAgY29uc3QgY29tcG9uZW50cyA9IHRoaXMuZ2V0Q29tcG9uZW50c0J5RGF0YVBhdGgoZGF0YVBhdGgpXG4gICAgICAgIGZvciAoY29uc3QgY29tcG9uZW50IG9mIGNvbXBvbmVudHMpIHtcbiAgICAgICAgICBpZiAoIWNvbXBvbmVudC52YWxpZGF0ZShub3RpZnkpKSB7XG4gICAgICAgICAgICAvLyBGb2N1cyBmaXJzdCBlcnJvciBmaWVsZFxuICAgICAgICAgICAgaWYgKG5vdGlmeSAmJiBmaXJzdCkge1xuICAgICAgICAgICAgICBjb21wb25lbnQuc2Nyb2xsSW50b1ZpZXcoKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZmlyc3QgPSBmYWxzZVxuICAgICAgICAgICAgaXNWYWxpZCA9IGZhbHNlXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAobm90aWZ5ICYmICFpc1ZhbGlkKSB7XG4gICAgICAgIHRoaXMubm90aWZ5RXJyb3JzKClcbiAgICAgIH1cbiAgICAgIHJldHVybiBpc1ZhbGlkXG4gICAgfSxcblxuICAgIHZlcmlmeUFsbChtYXRjaCkge1xuICAgICAgcmV0dXJuIHRoaXMudmFsaWRhdGVBbGwobWF0Y2gsIGZhbHNlKVxuICAgIH0sXG5cbiAgICBhc3luYyBzaG93VmFsaWRhdGlvbkVycm9ycyhlcnJvcnMsIGZvY3VzKSB7XG4gICAgICB0aGlzLmNsZWFyRXJyb3JzKClcbiAgICAgIGxldCBmaXJzdCA9IHRydWVcbiAgICAgIGNvbnN0IHVubWF0Y2hlZCA9IFtdXG4gICAgICBmb3IgKGNvbnN0IFtkYXRhUGF0aCwgZXJyc10gb2YgT2JqZWN0LmVudHJpZXMoZXJyb3JzKSkge1xuICAgICAgICAvLyBJZiB0aGUgc2NoZW1hIGlzIGEgZGF0YS1yb290LCBwcmVmaXggaXRzIG93biBkYXRhUGF0aCB0byBhbGwgZXJyb3JzLFxuICAgICAgICAvLyBzaW5jZSB0aGUgZGF0YSB0aGF0IGl0IHNlbmRzIGFuZCB2YWxpZGF0ZXMgd2lsbCBiZSB1bnByZWZpeGVkLlxuICAgICAgICBjb25zdCBmdWxsRGF0YVBhdGggPSB0aGlzLmhhc093bkRhdGFcbiAgICAgICAgICA/IGFwcGVuZERhdGFQYXRoKHRoaXMuZGF0YVBhdGgsIGRhdGFQYXRoKVxuICAgICAgICAgIDogZGF0YVBhdGhcbiAgICAgICAgLy8gY29uc29sZS5sb2codGhpcywgdGhpcy5kYXRhUGF0aCwgdGhpcy5oYXNPd25EYXRhLCBmdWxsRGF0YVBhdGgpXG4gICAgICAgIC8vIENvbnZlcnQgZnJvbSBKYXZhU2NyaXB0IHByb3BlcnR5IGFjY2VzcyBub3RhdGlvbiwgdG8gb3VyIG93biBmb3JtXG4gICAgICAgIC8vIG9mIHJlbGF0aXZlIEpTT04gcG9pbnRlcnMgYXMgZGF0YS1wYXRoczpcbiAgICAgICAgY29uc3QgZGF0YVBhdGhQYXJ0cyA9IHBhcnNlRGF0YVBhdGgoZnVsbERhdGFQYXRoKVxuICAgICAgICBsZXQgZm91bmQgPSBmYWxzZVxuICAgICAgICBjb25zdCBjb21wb25lbnRzID0gdGhpcy5nZXRDb21wb25lbnRzQnlEYXRhUGF0aChkYXRhUGF0aFBhcnRzKVxuICAgICAgICBmb3IgKGNvbnN0IGNvbXBvbmVudCBvZiBjb21wb25lbnRzKSB7XG4gICAgICAgICAgaWYgKGNvbXBvbmVudC5zaG93VmFsaWRhdGlvbkVycm9ycyhlcnJzLCBmaXJzdCAmJiBmb2N1cykpIHtcbiAgICAgICAgICAgIGZvdW5kID0gdHJ1ZVxuICAgICAgICAgICAgZmlyc3QgPSBmYWxzZVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoIWZvdW5kKSB7XG4gICAgICAgICAgLy8gQ291bGRuJ3QgZmluZCBhIGNvbXBvbmVudCBpbiBhbiBhY3RpdmUgZm9ybSBmb3IgdGhlIGdpdmVuIGRhdGFQYXRoLlxuICAgICAgICAgIC8vIFNlZSBpZiB3ZSBjYW4gZmluZCBhIGNvbXBvbmVudCBzZXJ2aW5nIGEgcGFydCBvZiB0aGUgZGF0YVBhdGgsXG4gICAgICAgICAgLy8gYW5kIHRha2UgaXQgZnJvbSB0aGVyZTpcbiAgICAgICAgICBjb25zdCBwcm9wZXJ0eSA9IGRhdGFQYXRoUGFydHMucG9wKClcbiAgICAgICAgICB3aGlsZSAoZGF0YVBhdGhQYXJ0cy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBjb25zdCBjb21wb25lbnRzID0gdGhpcy5nZXRDb21wb25lbnRzQnlEYXRhUGF0aChkYXRhUGF0aFBhcnRzKVxuICAgICAgICAgICAgZm9yIChjb25zdCBjb21wb25lbnQgb2YgY29tcG9uZW50cykge1xuICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgYXdhaXQgY29tcG9uZW50Lm5hdmlnYXRlVG9Db21wb25lbnQ/LihcbiAgICAgICAgICAgICAgICAgIGZ1bGxEYXRhUGF0aCxcbiAgICAgICAgICAgICAgICAgIHN1YkNvbXBvbmVudHMgPT4ge1xuICAgICAgICAgICAgICAgICAgICBsZXQgZm91bmQgPSBmYWxzZVxuICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGNvbXBvbmVudCBvZiBzdWJDb21wb25lbnRzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgY29uc3QgZXJycyA9IGVycm9yc1tjb21wb25lbnQuZGF0YVBhdGhdXG4gICAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgZXJycyAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50LnNob3dWYWxpZGF0aW9uRXJyb3JzKGVycnMsIGZpcnN0ICYmIGZvY3VzKVxuICAgICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlXG4gICAgICAgICAgICAgICAgICAgICAgICBmaXJzdCA9IGZhbHNlXG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmb3VuZFxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgLy8gRm91bmQgYSBuZXN0ZWQgZm9ybSB0byBkaXNwbGF5IGF0IGxlYXN0IHBhcnRzIGZvIHRoZSBlcnJvcnMuXG4gICAgICAgICAgICAgICAgLy8gV2UgY2FuJ3Qgc2hvdyBhbGwgZXJyb3JzIGF0IG9uY2UsIHNvIHdlJ3JlIGRvbmUuIERvbid0IGNhbGxcbiAgICAgICAgICAgICAgICAvLyBgbm90aWZ5RXJyb3JzKClgIHlldCwgYXMgd2UgY2FuIG9ubHkgZGlzcGxheSBpdCBvbmNlXG4gICAgICAgICAgICAgICAgLy8gYHNob3dWYWxpZGF0aW9uRXJyb3JzKClgIHdhcyBjYWxsZWQgZnJvbSBgRGl0b0Zvcm0ubW91bnRlZCgpYFxuICAgICAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBTdGlsbCBoZXJlLCBzbyBrZWVwIHJlbW92aW5nIHRoZSBsYXN0IHBhcnQgdW50aWwgd2UgZmluZCBhIG1hdGNoLlxuICAgICAgICAgICAgZGF0YVBhdGhQYXJ0cy5wb3AoKVxuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBXaGVuIHRoZSBlcnJvciBjYW4ndCBiZSBtYXRjaGVkLCBhZGQgaXQgdG8gYSBsaXN0IG9mIHVubWF0Y2hlZFxuICAgICAgICAgIC8vIGVycm9ycyB3aXRoIGRlY2VudCBtZXNzYWdlLCB0byByZXBvcnQgYXQgdGhlIGVuZC5cbiAgICAgICAgICBjb25zdCBmaWVsZCA9IGxhYmVsaXplKHByb3BlcnR5KVxuICAgICAgICAgIGZvciAoY29uc3QgZXJyIG9mIGVycnMpIHtcbiAgICAgICAgICAgIGNvbnN0IHByZWZpeCA9IGZpZWxkXG4gICAgICAgICAgICAgID8gYFRoZSBmaWVsZCAke2ZpZWxkfWBcbiAgICAgICAgICAgICAgOiBgVGhlICR7dGhpcy5mb3JtTGFiZWx9YFxuICAgICAgICAgICAgdW5tYXRjaGVkLnB1c2goYCR7cHJlZml4fSAke2Vyci5tZXNzYWdlfWApXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGZpcnN0ID0gZmFsc2VcbiAgICAgIH1cbiAgICAgIGlmICghZmlyc3QpIHtcbiAgICAgICAgdGhpcy5ub3RpZnlFcnJvcnModW5tYXRjaGVkLmpvaW4oJ1xcbicpKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBub3RpZnlFcnJvcnMobWVzc2FnZSkge1xuICAgICAgdGhpcy5ub3RpZnkoe1xuICAgICAgICB0eXBlOiAnZXJyb3InLFxuICAgICAgICB0aXRsZTogJ1ZhbGlkYXRpb24gRXJyb3JzJyxcbiAgICAgICAgdGV4dDogbWVzc2FnZSB8fCAnUGxlYXNlIGNvcnJlY3QgdGhlIGhpZ2hsaWdodGVkIGVycm9ycy4nXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICByZXNldERhdGEoKSB7XG4gICAgICAvLyBXZSBjYW4ndCBzZXQgYHRoaXMuZGF0YSA9IC4uLmAgYmVjYXVzZSBpdCdzIGEgcHJvcGVydHksIGJ1dCB3ZSBjYW4gc2V0XG4gICAgICAvLyBhbGwga25vd24gcHJvcGVydGllcyBvbiBpdCB0byB0aGUgdmFsdWVzIHJldHVybmVkIGJ5XG4gICAgICAvLyBgc2V0RGVmYXVsdFZhbHVlcygpYCwgYXMgdGhleSBhcmUgYWxsIHJlYWN0aXZlIGFscmVhZHkgZnJvbSB0aGUgc3RhcnRzOlxuICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLmRhdGEsIHNldERlZmF1bHRWYWx1ZXModGhpcy5zY2hlbWEsIHt9LCB0aGlzKSlcbiAgICAgIHRoaXMuY2xlYXJFcnJvcnMoKVxuICAgIH0sXG5cbiAgICBzZXREYXRhKGRhdGEpIHtcbiAgICAgIGZvciAoY29uc3QgbmFtZSBpbiBkYXRhKSB7XG4gICAgICAgIGlmIChuYW1lIGluIHRoaXMuZGF0YSkge1xuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSB2dWUvbm8tbXV0YXRpbmctcHJvcHNcbiAgICAgICAgICBpZiAoIWVxdWFscyh0aGlzLmRhdGFbbmFtZV0sIGRhdGFbbmFtZV0pKSB7XG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgdnVlL25vLW11dGF0aW5nLXByb3BzXG4gICAgICAgICAgICB0aGlzLmRhdGFbbmFtZV0gPSBkYXRhW25hbWVdXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGNvbXBvbmVudCBvZiB0aGlzLmdldENvbXBvbmVudHNCeU5hbWUobmFtZSkpIHtcbiAgICAgICAgICAgICAgY29tcG9uZW50Lm1hcmtEaXJ0eSgpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIGZpbHRlckRhdGEoZGF0YSkge1xuICAgICAgLy8gRmlsdGVycyBvdXQgYXJyYXlzIGFuZCBvYmplY3RzIHRoYXQgYXJlIGJhY2sgYnkgZGF0YSByZXNvdXJjZXNcbiAgICAgIC8vIHRoZW1zZWx2ZXMsIGFzIHRob3NlIGFyZSBhbHJlYWR5IHRha2luZyBjYXJlIG9mIHRocm91Z2ggdGhlaXIgb3duIEFQSVxuICAgICAgLy8gcmVzb3VyY2UgZW5kLXBvaW50cyBhbmQgc2hvdWxkbid0IGJlIHNldC5cbiAgICAgIGNvbnN0IGNvcHkgPSB7fVxuICAgICAgZm9yIChjb25zdCBbbmFtZSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGRhdGEpKSB7XG4gICAgICAgIGlmIChpc0FycmF5KHZhbHVlKSB8fCBpc09iamVjdCh2YWx1ZSkpIHtcbiAgICAgICAgICBjb25zdCBjb21wb25lbnRzID0gdGhpcy5nZXRDb21wb25lbnRzQnlOYW1lKG5hbWUpXG4gICAgICAgICAgaWYgKGNvbXBvbmVudHMuc29tZShjb21wb25lbnQgPT4gY29tcG9uZW50LnByb3ZpZGVzRGF0YSkpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvcHlbbmFtZV0gPSB2YWx1ZVxuICAgICAgfVxuICAgICAgcmV0dXJuIGNvcHlcbiAgICB9LFxuXG4gICAgcHJvY2Vzc0RhdGEoeyB0YXJnZXQgPSAnY2xpcGJvYXJkJywgc2NoZW1hT25seSA9IHRydWUgfSA9IHt9KSB7XG4gICAgICByZXR1cm4gcHJvY2Vzc0RhdGEoXG4gICAgICAgIHRoaXMuc2NoZW1hLFxuICAgICAgICB0aGlzLnNvdXJjZVNjaGVtYSxcbiAgICAgICAgdGhpcy5kYXRhLFxuICAgICAgICB0aGlzLmRhdGFQYXRoLFxuICAgICAgICB7XG4gICAgICAgICAgLy8gTmVlZGVkIGZvciBEaXRvQ29udGV4dCBoYW5kbGluZyBpbnNpZGUgYHByb2Nlc3NEYXRhYCBhbmRcbiAgICAgICAgICAvLyBgcHJvY2Vzc1NjaGVtYURhdGEoKWA6XG4gICAgICAgICAgcm9vdERhdGE6IHRoaXMucm9vdERhdGEsXG4gICAgICAgICAgY29tcG9uZW50OiB0aGlzLFxuICAgICAgICAgIHNjaGVtYU9ubHksXG4gICAgICAgICAgdGFyZ2V0XG4gICAgICAgIH1cbiAgICAgIClcbiAgICB9LFxuXG4gICAgX3JlZ2lzdGVyKGFkZCkge1xuICAgICAgLy8gYCRzY2hlbWFQYXJlbnRDb21wb25lbnQoKWAgaXMgb25seSBzZXQgaWYgb25lIG9mIHRoZSBhbmNlc3RvcnMgdXNlc1xuICAgICAgLy8gdGhlIGBTY2hlbWFQYXJlbnRNaXhpbmA6XG4gICAgICB0aGlzLiRzY2hlbWFQYXJlbnRDb21wb25lbnQoKT8uX3JlZ2lzdGVyU2NoZW1hQ29tcG9uZW50KHRoaXMsIGFkZClcbiAgICB9LFxuXG4gICAgX3JlZ2lzdGVyQ29tcG9uZW50KGNvbXBvbmVudCwgYWRkKSB7XG4gICAgICB0aGlzLl9yZWdpc3RlckVudHJ5KHRoaXMuY29tcG9uZW50c1JlZ2lzdHJ5LCBjb21wb25lbnQsIGFkZClcbiAgICAgIC8vIE9ubHkgcmVnaXN0ZXIgd2l0aCB0aGUgcGFyZW50IGlmIHNjaGVtYSBzaGFyZXMgZGF0YSB3aXRoIGl0LlxuICAgICAgdGhpcy5wYXJlbnRTY2hlbWFDb21wb25lbnQ/Ll9yZWdpc3RlckNvbXBvbmVudChjb21wb25lbnQsIGFkZClcbiAgICB9LFxuXG4gICAgX3JlZ2lzdGVyUGFuZShwYW5lLCBhZGQpIHtcbiAgICAgIHRoaXMuX3JlZ2lzdGVyRW50cnkodGhpcy5wYW5lc1JlZ2lzdHJ5LCBwYW5lLCBhZGQpXG4gICAgfSxcblxuICAgIF9yZWdpc3RlclBhbmVsKHBhbmVsLCBhZGQpIHtcbiAgICAgIHRoaXMuX3JlZ2lzdGVyRW50cnkodGhpcy5wYW5lbHNSZWdpc3RyeSwgcGFuZWwsIGFkZClcbiAgICB9LFxuXG4gICAgX3JlZ2lzdGVyRW50cnkocmVnaXN0cnksIGVudHJ5LCBhZGQpIHtcbiAgICAgIGNvbnN0IHVpZCA9IGVudHJ5LiR1aWRcbiAgICAgIGlmIChhZGQpIHtcbiAgICAgICAgcmVnaXN0cnlbdWlkXSA9IGVudHJ5XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkZWxldGUgcmVnaXN0cnlbdWlkXVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBfbGlzdEVudHJpZXNCeURhdGFQYXRoKHJlZ2lzdHJ5KSB7XG4gICAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyhyZWdpc3RyeSkucmVkdWNlKChlbnRyaWVzQnlEYXRhUGF0aCwgZW50cnkpID0+IHtcbiAgICAgICAgLy8gTXVsdGlwbGUgZW50cmllcyBjYW4gYmUgbGlua2VkIHRvIHRoZSBzYW1lIGRhdGEtcGF0aCwgZS5nLiB3aGVuXG4gICAgICAgIC8vIHRoZXJlIGFyZSB0YWJzLiBMaW5rIGVhY2ggZGF0YS1wYXRoIHRvIGFuIGFycmF5IG9mIGVudHJpZXMuXG4gICAgICAgIGNvbnN0IHsgZGF0YVBhdGggfSA9IGVudHJ5XG4gICAgICAgIGNvbnN0IGVudHJpZXMgPSAoZW50cmllc0J5RGF0YVBhdGhbZGF0YVBhdGhdIHx8PSBbXSlcbiAgICAgICAgZW50cmllcy5wdXNoKGVudHJ5KVxuICAgICAgICByZXR1cm4gZW50cmllc0J5RGF0YVBhdGhcbiAgICAgIH0sIHt9KVxuICAgIH0sXG5cbiAgICBfZ2V0RW50cmllcyhlbnRyaWVzQnlEYXRhUGF0aCwgZGF0YVBhdGgpIHtcbiAgICAgIHJldHVybiBub3JtYWxpemVEYXRhUGF0aChkYXRhUGF0aCkuc3RhcnRzV2l0aCh0aGlzLmRhdGFQYXRoKVxuICAgICAgICA/IHRoaXMuX2dldEVudHJpZXNCeURhdGFQYXRoKGVudHJpZXNCeURhdGFQYXRoLCBkYXRhUGF0aClcbiAgICAgICAgOiB0aGlzLl9nZXRFbnRyaWVzQnlOYW1lKGVudHJpZXNCeURhdGFQYXRoLCBkYXRhUGF0aClcbiAgICB9LFxuXG4gICAgX2dldEVudHJpZXNCeURhdGFQYXRoKGVudHJpZXNCeURhdGFQYXRoLCBkYXRhUGF0aCkge1xuICAgICAgcmV0dXJuIGVudHJpZXNCeURhdGFQYXRoW25vcm1hbGl6ZURhdGFQYXRoKGRhdGFQYXRoKV0gfHwgW11cbiAgICB9LFxuXG4gICAgX2dldEVudHJpZXNCeU5hbWUoZW50cmllc0J5RGF0YVBhdGgsIG5hbWUpIHtcbiAgICAgIHJldHVybiBlbnRyaWVzQnlEYXRhUGF0aFthcHBlbmREYXRhUGF0aCh0aGlzLmRhdGFQYXRoLCBuYW1lKV0gfHwgW11cbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by1zY2hlbWEge1xuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuXG4gID4gLmRpdG8tc2NoZW1hLWhlYWRlciArIC5kaXRvLXNjaGVtYS1jb250ZW50ID4gLmRpdG8tcGFuZSB7XG4gICAgbWFyZ2luLXRvcDogJGZvcm0tc3BhY2luZy1oYWxmO1xuICB9XG5cbiAgJjpoYXMoPiAuZGl0by1zY2hlbWEtY29udGVudCArIC5kaXRvLWVkaXQtYnV0dG9ucykge1xuICAgIC8vIERpc3BsYXkgdGhlIGlubGluZWQgZWRpdCBidXR0b25zIHRvIHRoZSByaWdodCBvZiB0aGUgc2NoZW1hOlxuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgZmxleC1kaXJlY3Rpb246IHJvdztcbiAgICBhbGlnbi1pdGVtczogc3RyZXRjaDtcblxuICAgID4gLmRpdG8tZWRpdC1idXR0b25zIHtcbiAgICAgIGZsZXg6IDEgMCAwJTtcbiAgICAgIG1hcmdpbi1sZWZ0OiAkZm9ybS1zcGFjaW5nO1xuICAgIH1cbiAgfVxuXG4gID4gLmRpdG8tc2NoZW1hLWNvbnRlbnQge1xuICAgIGZsZXg6IDAgMSAxMDAlO1xuICAgIG1heC13aWR0aDogMTAwJTtcbiAgICAvLyBTbyB0aGF0IHNjaGVtYSBidXR0b25zIGNhbiBiZSBzdGlja3kgdG8gdGhlIGJvdHRvbS5cbiAgICAvLyBOT1RFOiBXZSBhbHNvIG5lZWQgZ3JpZCBmb3IgYFRyYW5zaXRpb25IZWlnaHRgIHRvIHdvcmsgd2VsbC4gU3dpdGNoaW5nXG4gICAgLy8gdG8gZmxleCBib3ggaGVyZSBjYXVzZXMganVtcHkgY29sbGFwc2luZyB0cmFuc2l0aW9ucy5cbiAgICBkaXNwbGF5OiBncmlkO1xuICAgIGdyaWQtdGVtcGxhdGUtcm93czogbWluLWNvbnRlbnQ7XG4gICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiAxMDAlO1xuXG4gICAgPiA6b25seS1jaGlsZCB7XG4gICAgICBncmlkLXJvdy1lbmQ6IG5vbmU7XG4gICAgfVxuICB9XG59XG5cbi5kaXRvLXNjaGVtYS1oZWFkZXIge1xuICBkaXNwbGF5OiBmbGV4O1xuICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG5cbiAgLmRpdG8taGVhZGVyICYge1xuICAgIC8vIFdoZW4gdGVsZXBvcnRlZCBpbnRvIG1haW4gaGVhZGVyLlxuICAgIGFsaWduLWl0ZW1zOiBmbGV4LWVuZDtcbiAgfVxuXG4gIC5kaXRvLWxhYmVsICYge1xuICAgIC8vIFdoZW4gdGVsZXBvcnRlZCBpbnRvIGNvbnRhaW5lciBsYWJlbC5cbiAgICBmbGV4OiAxO1xuICB9XG5cbiAgPiAuZGl0by1sYWJlbCB7XG4gICAgbWFyZ2luLWJvdHRvbTogMDtcbiAgfVxuXG4gID4gLmRpdG8tYnV0dG9ucyB7XG4gICAgbWFyZ2luLWxlZnQ6IHZhcigtLWJ1dHRvbi1tYXJnaW4sIDApO1xuICB9XG59XG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbkRpdG9TY2hlbWEuZGl0by1zY2hlbWEtaW5saW5lZChcbiAgOmNsYXNzPVwieyAnZGl0by1zY2hlbWEtY29tcGFjdCc6IGlzQ29tcGFjdCB9XCJcbiAgOnNjaGVtYT1cInNjaGVtYVwiXG4gIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgOmRhdGE9XCJkYXRhXCJcbiAgOm1ldGE9XCJtZXRhXCJcbiAgOnN0b3JlPVwic3RvcmVcIlxuICA6bGFiZWw9XCJpc0NvbXBhY3QgPyBudWxsIDogbGFiZWxcIlxuICA6cGFkZGluZz1cInBhZGRpbmcgPz8gJ2lubGluZWQnXCJcbiAgOmlubGluZWQ9XCJ0cnVlXCJcbiAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICA6Y29sbGFwc2VkPVwiY29sbGFwc2VkXCJcbiAgOmNvbGxhcHNpYmxlPVwiY29sbGFwc2libGVcIlxuICA6Z2VuZXJhdGVMYWJlbHM9XCIhaXNDb21wYWN0XCJcbiAgOmxhYmVsTm9kZT1cImxhYmVsTm9kZVwiXG4gIDphY2N1bXVsYXRlZEJhc2lzPVwiYWNjdW11bGF0ZWRCYXNpc1wiXG4pXG4gIC8vLSBSZW5kZXIgZGl0by1lZGl0LWJ1dHRvbnMgZm9yIGlubGluZWQgc2NoZW1hcyBzZXBhcmF0ZWx5IGZyb20gYWxsXG4gIC8vLSBvdGhlcnMgaW4gYFR5cGVMaXN0YCBhcyBhIHNjb3BlLCBmb3IgYmV0dGVyIGhhbmRsaW5nIG9mIGxheW91dC5cbiAgdGVtcGxhdGUoI2VkaXQtYnV0dG9ucylcbiAgICBEaXRvRWRpdEJ1dHRvbnMoXG4gICAgICB2LWlmPVwiZGVsZXRhYmxlIHx8IGRyYWdnYWJsZSB8fCBlZGl0YWJsZVwiXG4gICAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgICA6bWV0YT1cIm1ldGFcIlxuICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgICAgOmRlbGV0YWJsZT1cImRlbGV0YWJsZVwiXG4gICAgICA6ZHJhZ2dhYmxlPVwiZHJhZ2dhYmxlXCJcbiAgICAgIDplZGl0YWJsZT1cImVkaXRhYmxlXCJcbiAgICAgIDplZGl0UGF0aD1cImVkaXRQYXRoXCJcbiAgICAgIEBkZWxldGU9XCIkZW1pdCgnZGVsZXRlJylcIlxuICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IHsgaXNDb21wYWN0IH0gZnJvbSAnLi4vdXRpbHMvc2NoZW1hLmpzJ1xuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdEaXRvU2NoZW1hSW5saW5lZCcsIHtcbiAgZW1pdHM6IFsnZGVsZXRlJ10sXG5cbiAgcHJvcHM6IHtcbiAgICBzY2hlbWE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGRhdGFQYXRoOiB7IHR5cGU6IFN0cmluZywgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBkYXRhOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBtZXRhOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBzdG9yZTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgbGFiZWw6IHsgdHlwZTogW1N0cmluZywgT2JqZWN0XSwgZGVmYXVsdDogbnVsbCB9LFxuICAgIHBhZGRpbmc6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgZGlzYWJsZWQ6IHsgdHlwZTogQm9vbGVhbiwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBjb2xsYXBzZWQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBjb2xsYXBzaWJsZTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGRyYWdnYWJsZTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGVkaXRhYmxlOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgZGVsZXRhYmxlOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgZWRpdFBhdGg6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgbGFiZWxOb2RlOiB7IHR5cGU6IEhUTUxFbGVtZW50LCBkZWZhdWx0OiBudWxsIH0sXG4gICAgYWNjdW11bGF0ZWRCYXNpczogeyB0eXBlOiBOdW1iZXIsIGRlZmF1bHQ6IG51bGwgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgaXNDb21wYWN0KCkge1xuICAgICAgcmV0dXJuIGlzQ29tcGFjdCh0aGlzLnNjaGVtYSlcbiAgICB9LFxuXG4gICAgaGFzTGFiZWwoKSB7XG4gICAgICByZXR1cm4gIXRoaXMuaXNDb21wYWN0ICYmICEhdGhpcy5sYWJlbFxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5cbi5kaXRvLXNjaGVtYS1pbmxpbmVkIHtcbiAgLy8gVXNlIGdyaWQgbGF5b3V0IGZvciB0d28gcmVhc29uczogRm9yIGBUcmFuc2l0aW9uSGVpZ2h0YCB0byB3b3JrIHNtb290aGx5LFxuICAvLyBhbmQgdG8gYWxpZ24gdGhlIGhlYWRlciBhYm92ZSB0aGUgY29udGVudCB3aGVuIHRoZSBoZWFkZXIgaXMgbm90IHRlbGVwb3J0ZWRcbiAgLy8gb3V0c2lkZSBvZiB0aGUgc2NoZW1hLlxuICBkaXNwbGF5OiBncmlkO1xuICBncmlkLXRlbXBsYXRlLXJvd3M6IG1pbi1jb250ZW50O1xuICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IDEwMCU7XG5cbiAgJjpub3QoOmhvdmVyLCAuZGl0by1zY2hlbWEtLW9wZW4pIHtcbiAgICA+IC5kaXRvLXNjaGVtYS1oZWFkZXIge1xuICAgICAgPiAuZGl0by1jbGlwYm9hcmQge1xuICAgICAgICBkaXNwbGF5OiBub25lO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuPC9zdHlsZT5cbiIsIjwhLS0gZXNsaW50LWRpc2FibGUgdnVlL25vLXRlbXBsYXRlLXNoYWRvdyAtLT5cbjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4uZGl0by1wYW5lKFxuICB2LWlmPVwiaXNQb3B1bGF0ZWQgJiYgY29tcG9uZW50U2NoZW1hcy5sZW5ndGggPiAwXCJcbiAgdi1yZXNpemU9XCJvblJlc2l6ZVBhbmVcIlxuICA6Y2xhc3M9XCJjbGFzc2VzXCJcbilcbiAgdGVtcGxhdGUoXG4gICAgdi1mb3I9YHtcbiAgICAgIHNjaGVtYSxcbiAgICAgIGRhdGFQYXRoLFxuICAgICAgbmVzdGVkRGF0YVBhdGgsXG4gICAgICBuZXN0ZWQsXG4gICAgICBzdG9yZVxuICAgIH0sIGluZGV4IGluIGNvbXBvbmVudFNjaGVtYXNgXG4gIClcbiAgICAvLyAtVXNlIDxzcGFuPiBmb3IgLmRpdG8tYnJlYWsgc28gd2UgY2FuIHVzZSBgLmRpdG8tY29udGFpbmVyOmZpcnN0LW9mLXR5cGVgXG4gICAgLy8gc2VsZWN0b3IuXG4gICAgc3Bhbi5kaXRvLWJyZWFrKFxuICAgICAgdi1pZj1cInNjaGVtYS5icmVhayA9PT0gJ2JlZm9yZSdcIlxuICAgIClcbiAgICBEaXRvQ29udGFpbmVyKFxuICAgICAgdi1pZj1cInNob3VsZFJlbmRlclNjaGVtYShzY2hlbWEpXCJcbiAgICAgIHJlZj1cImNvbnRhaW5lcnNcIlxuICAgICAgOmtleT1cIm5lc3RlZERhdGFQYXRoXCJcbiAgICAgIDpkYXRhLWluZGV4PVwiaW5kZXhcIlxuICAgICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgICA6ZGF0YT1cImRhdGFcIlxuICAgICAgOm1ldGE9XCJtZXRhXCJcbiAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgIDpzaW5nbGU9XCJpc1NpbmdsZUNvbXBvbmVudFwiXG4gICAgICA6bmVzdGVkPVwibmVzdGVkXCJcbiAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICAgIDpnZW5lcmF0ZUxhYmVscz1cImdlbmVyYXRlTGFiZWxzXCJcbiAgICAgIDp2ZXJ0aWNhbExhYmVscz1cImlzSW5MYWJlbGVkUm93KGluZGV4KVwiXG4gICAgICA6YWNjdW11bGF0ZWRCYXNpcz1cImFjY3VtdWxhdGVkQmFzaXNcIlxuICAgIClcbiAgICBzcGFuLmRpdG8tYnJlYWsoXG4gICAgICB2LWlmPVwic2NoZW1hLmJyZWFrID09PSAnYWZ0ZXInXCJcbiAgICApXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCB7IGFwcGVuZERhdGFQYXRoIH0gZnJvbSAnLi4vdXRpbHMvZGF0YS5qcydcbmltcG9ydCB7IGlzTmVzdGVkIH0gZnJvbSAnLi4vdXRpbHMvc2NoZW1hLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ0RpdG9QYW5lJywge1xuICBwcm92aWRlKCkge1xuICAgIHJldHVybiB7XG4gICAgICAkdGFiQ29tcG9uZW50OiAoKSA9PiB0aGlzLnRhYkNvbXBvbmVudFxuICAgIH1cbiAgfSxcblxuICBwcm9wczoge1xuICAgIHNjaGVtYTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgZGF0YVBhdGg6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiAnJyB9LFxuICAgIGRhdGE6IHsgdHlwZTogT2JqZWN0LCBkZWZhdWx0OiBudWxsIH0sXG4gICAgbWV0YTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgc3RvcmU6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHRhYjogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBwYWRkaW5nOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogbnVsbCB9LFxuICAgIHNpbmdsZTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGRpc2FibGVkOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgZ2VuZXJhdGVMYWJlbHM6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBhY2N1bXVsYXRlZEJhc2lzOiB7IHR5cGU6IE51bWJlciwgZGVmYXVsdDogbnVsbCB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgcG9zaXRpb25zOiBbXVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIGNsYXNzZXMoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAnZGl0by1wYW5lLS1zaW5nbGUnOiB0aGlzLmlzU2luZ2xlQ29tcG9uZW50LFxuICAgICAgICBbYGRpdG8tcGFuZS0tcGFkZGluZy0ke3RoaXMucGFkZGluZ31gXTogISF0aGlzLnBhZGRpbmdcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgdGFiQ29tcG9uZW50KCkge1xuICAgICAgcmV0dXJuIHRoaXMudGFiID8gdGhpcyA6IHRoaXMuJHRhYkNvbXBvbmVudCgpXG4gICAgfSxcblxuICAgIGNvbXBvbmVudFNjaGVtYXMoKSB7XG4gICAgICAvLyBDb21wdXRlIGEgY29tcG9uZW50cyBsaXN0IHdoaWNoIGhhcyB0aGUgZGF0YVBhdGggYmFrZWQgaW50byBpdHMga2V5c1xuICAgICAgLy8gYW5kIGFkZHMgdGhlIGtleSBhcyB0aGUgbmFtZSB0byBlYWNoIGNvbXBvbmVudCwgdXNlZCBmb3IgbGFiZWxzLCBldGMuXG4gICAgICAvLyBOT1RFOiBzY2hlbWEgY2FuIGJlIG51bGwgd2hpbGUgbXVsdGktZm9ybSBsaXN0cyBsb2FkIHRoZWlyIGRhdGEsXG4gICAgICAvLyBiZWNhdXNlIG9ubHkgdGhlIGF2YWlsYWJsZSBkYXRhIHdpbGwgZGV0ZXJtaW5lIHRoZSB0eXBlIG9mIGZvcm0uXG4gICAgICAvLyBXaGVuIGVkaXRpbmcgcHJpbWl0aXZlIHZhbHVlcyB0aHJvdWdoIGEgZm9ybSwgZG8gbm90IGFwcGVuZCAnbmFtZScgdG9cbiAgICAgIC8vIHRoZSBjb21wb25lbnQncyBkYXRhUGF0aCBzbyBpdCBjYW4gYmUgbWFwcGVkIHRvIGZyb20gdmFsaWRhdGlvbiBlcnJvcnMuXG4gICAgICAvLyBOT1RFOiBOb3QgYWxsIHNjaGVtYXMgLyBjb21wb25lbnRzIGhhdmUgYSBzb3VyY2VTY2hlbWEsIGUuZy4gZGlhbG9ncy5cbiAgICAgIGNvbnN0IHdyYXBQcmltaXRpdmVzID0gdGhpcy5zb3VyY2VTY2hlbWE/LndyYXBQcmltaXRpdmVzXG4gICAgICByZXR1cm4gT2JqZWN0LmVudHJpZXModGhpcy5zY2hlbWE/LmNvbXBvbmVudHMgfHwge30pLm1hcChcbiAgICAgICAgKFtuYW1lLCBzY2hlbWFdKSA9PiB7XG4gICAgICAgICAgLy8gQWx3YXlzIGFkZCBuYW1lIHRvIGNvbXBvbmVudCBzY2hlbWEuXG4gICAgICAgICAgc2NoZW1hLm5hbWUgPSBuYW1lXG4gICAgICAgICAgLy8gU2hhcmUgZGF0YVBhdGggYW5kIHN0b3JlIHdpdGggcGFyZW50IGlmIG5vdCBuZXN0ZWQ6XG4gICAgICAgICAgY29uc3QgbmVzdGVkID0gaXNOZXN0ZWQoc2NoZW1hKVxuICAgICAgICAgIGNvbnN0IG5lc3RlZERhdGFQYXRoID0gYXBwZW5kRGF0YVBhdGgodGhpcy5kYXRhUGF0aCwgbmFtZSlcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgc2NoZW1hLFxuICAgICAgICAgICAgZGF0YVBhdGg6XG4gICAgICAgICAgICAgIG5lc3RlZCAmJiAhd3JhcFByaW1pdGl2ZXNcbiAgICAgICAgICAgICAgICA/IG5lc3RlZERhdGFQYXRoXG4gICAgICAgICAgICAgICAgOiB0aGlzLmRhdGFQYXRoLFxuICAgICAgICAgICAgbmVzdGVkRGF0YVBhdGgsXG4gICAgICAgICAgICBuZXN0ZWQsXG4gICAgICAgICAgICBzdG9yZTogdGhpcy5nZXRDaGlsZFN0b3JlKG5hbWUpXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICApXG4gICAgfSxcblxuICAgIGlzU2luZ2xlQ29tcG9uZW50KCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2luZ2xlICYmIHRoaXMuY29tcG9uZW50U2NoZW1hcy5sZW5ndGggPT09IDFcbiAgICB9LFxuXG4gICAgdmVydGljYWxMYWJlbHNCeUluZGljZXMoKSB7XG4gICAgICBjb25zdCB7IHBvc2l0aW9ucyB9ID0gdGhpc1xuXG4gICAgICBjb25zdCBpc0xhc3RJblJvdyA9IGluZGV4ID0+IChcbiAgICAgICAgcG9zaXRpb25zW2luZGV4XSAmJiAoXG4gICAgICAgICAgaW5kZXggPT09IHBvc2l0aW9ucy5sZW5ndGggLSAxIHx8XG4gICAgICAgICAgZmluZE5leHRQb3NpdGlvbihpbmRleCkudG9wID4gcG9zaXRpb25zW2luZGV4XS50b3BcbiAgICAgICAgKVxuICAgICAgKVxuXG4gICAgICBjb25zdCBmaW5kTmV4dFBvc2l0aW9uID0gaW5kZXggPT4ge1xuICAgICAgICBmb3IgKGxldCBpID0gaW5kZXggKyAxOyBpIDwgcG9zaXRpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgaWYgKHBvc2l0aW9uc1tpXSkgcmV0dXJuIHBvc2l0aW9uc1tpXVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiAwXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHJvd3MgPSBbXVxuICAgICAgbGV0IHJvdyA9IFtdXG4gICAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgcG9zaXRpb25zLmxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgICByb3cucHVzaChpbmRleClcbiAgICAgICAgaWYgKGlzTGFzdEluUm93KGluZGV4KSkge1xuICAgICAgICAgIHJvd3MucHVzaChyb3cpXG4gICAgICAgICAgcm93ID0gW11cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHJvdy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHJvd3MucHVzaChyb3cpXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHZlcnRpY2FsTGFiZWxzQnlJbmRpY2VzID0gW11cblxuICAgICAgZm9yIChjb25zdCByb3cgb2Ygcm93cykge1xuICAgICAgICBsZXQgaGFzTGFiZWxzSW5Sb3cgPSBmYWxzZVxuICAgICAgICBmb3IgKGNvbnN0IGluZGV4IG9mIHJvdykge1xuICAgICAgICAgIGNvbnN0IHBvc2l0aW9uID0gdGhpcy5wb3NpdGlvbnNbaW5kZXhdXG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgcG9zaXRpb24/LmhlaWdodCA+IDIgJiYgKFxuICAgICAgICAgICAgICBwb3NpdGlvbi5ub2RlLm1hdGNoZXMoJzpoYXMoPiAuZGl0by1sYWJlbCknKSB8fFxuICAgICAgICAgICAgICBwb3NpdGlvbi5ub2RlXG4gICAgICAgICAgICAgICAgLmNsb3Nlc3QoJy5kaXRvLWNvbnRhaW5lcicpXG4gICAgICAgICAgICAgICAgLm1hdGNoZXMoJy5kaXRvLWNvbnRhaW5lci0tbGFiZWwtdmVydGljYWwnKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgLy8gVE9ETzogSGFuZGxlIG5lc3RlZCBzY2hlbWFzLCBlLmcuICdzZWN0aW9uJyBvciAnb2JqZWN0JyBhbmRcbiAgICAgICAgICAgIC8vIGRldGVjdCBsYWJlbHMgdGhlcmUgdG9vLlxuICAgICAgICAgICAgaGFzTGFiZWxzSW5Sb3cgPSB0cnVlXG4gICAgICAgICAgICBicmVha1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBmb3IgKGNvbnN0IGluZGV4IG9mIHJvdykge1xuICAgICAgICAgIHZlcnRpY2FsTGFiZWxzQnlJbmRpY2VzW2luZGV4XSA9IGhhc0xhYmVsc0luUm93XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHZlcnRpY2FsTGFiZWxzQnlJbmRpY2VzXG4gICAgfVxuICB9LFxuXG4gIHdhdGNoOiB7XG4gICAgJ2NvbXBvbmVudFNjaGVtYXMubGVuZ3RoJyhsZW5ndGgpIHtcbiAgICAgIHRoaXMucG9zaXRpb25zLmxlbmd0aCA9IGxlbmd0aFxuICAgIH1cbiAgfSxcblxuICBjcmVhdGVkKCkge1xuICAgIHRoaXMuX3JlZ2lzdGVyKHRydWUpXG4gIH0sXG5cbiAgdW5tb3VudGVkKCkge1xuICAgIHRoaXMuX3JlZ2lzdGVyKGZhbHNlKVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBfcmVnaXN0ZXIoYWRkKSB7XG4gICAgICB0aGlzLnNjaGVtYUNvbXBvbmVudC5fcmVnaXN0ZXJQYW5lKHRoaXMsIGFkZClcbiAgICB9LFxuXG4gICAgZm9jdXMoKSB7XG4gICAgICBpZiAodGhpcy50YWIpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuJHJvdXRlci5wdXNoKHsgaGFzaDogYCMke3RoaXMudGFifWAgfSlcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgb25SZXNpemVQYW5lKCkge1xuICAgICAgdGhpcy4kbmV4dFRpY2soKCkgPT4ge1xuICAgICAgICBmb3IgKGNvbnN0IGNvbnRhaW5lciBvZiB0aGlzLiRyZWZzLmNvbnRhaW5lcnMpIHtcbiAgICAgICAgICBjb25zdCBub2RlID0gY29udGFpbmVyLiRlbFxuICAgICAgICAgIGNvbnN0IGluZGV4ID0gK25vZGUuZGF0YXNldC5pbmRleFxuICAgICAgICAgIGNvbnN0IGJvdW5kcyA9IG5vZGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KClcbiAgICAgICAgICBjb25zdCBzdHlsZSA9IGdldENvbXB1dGVkU3R5bGUobm9kZSlcbiAgICAgICAgICBjb25zdCBwYWRkaW5nID0gcGFyc2VGbG9hdChzdHlsZS5wYWRkaW5nKVxuICAgICAgICAgIGNvbnN0IGZvbnRTaXplID0gcGFyc2VGbG9hdChzdHlsZS5mb250U2l6ZSlcbiAgICAgICAgICBjb25zdCBoZWlnaHQgPSBib3VuZHMuaGVpZ2h0IC0gMiAqIHBhZGRpbmdcbiAgICAgICAgICB0aGlzLnBvc2l0aW9uc1tpbmRleF0gPVxuICAgICAgICAgICAgaGVpZ2h0IDw9IDBcbiAgICAgICAgICAgICAgPyBudWxsXG4gICAgICAgICAgICAgIDoge1xuICAgICAgICAgICAgICAgICAgdG9wOiBib3VuZHMueSxcbiAgICAgICAgICAgICAgICAgIGhlaWdodDogaGVpZ2h0IC8gZm9udFNpemUsXG4gICAgICAgICAgICAgICAgICBub2RlXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBpc0luTGFiZWxlZFJvdyhpbmRleCkge1xuICAgICAgcmV0dXJuICEhdGhpcy52ZXJ0aWNhbExhYmVsc0J5SW5kaWNlc1tpbmRleF1cbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by1wYW5lIHtcbiAgJHNlbGY6ICY7XG4gICRyb290LXBhZGRpbmc6ICRjb250ZW50LXBhZGRpbmcgLSAkZm9ybS1zcGFjaW5nLWhhbGY7XG5cbiAgLS1wYW5lLXBhZGRpbmc6IDBweDtcblxuICBkaXNwbGF5OiBmbGV4O1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGZsZXgtZmxvdzogcm93IHdyYXA7XG4gIGFsaWduLWl0ZW1zOiBmbGV4LXN0YXJ0O1xuICBhbGlnbi1jb250ZW50OiBmbGV4LXN0YXJ0O1xuICAvLyBSZW1vdmUgdGhlIHBhZGRpbmcgYWRkZWQgYnkgYC5kaXRvLWNvbnRhaW5lcmAgaW5zaWRlIGAuZGl0by1wYW5lYDpcbiAgbWFyZ2luOiAtJGZvcm0tc3BhY2luZy1oYWxmO1xuICBwYWRkaW5nOiB2YXIoLS1wYW5lLXBhZGRpbmcpO1xuICAvLyBVc2UgYGZsZXg6IDAlYCBmb3IgYWxsIGAuZGl0by1wYW5lYCBleGNlcHQgYC5kaXRvLXBhbmVfX21haW5gLFxuICAvLyBzbyB0aGF0IHRoZSBgLmRpdG8tYnV0dG9ucy1tYWluYCBjYW4gYmUgbW92ZWQgYWxsIHRoZSB3YXkgdG8gdGhlIGJvdHRvbS5cbiAgZmxleDogMCU7XG5cbiAgJl9fbWFpbiB7XG4gICAgZmxleDogMTAwJTtcbiAgfVxuXG4gICYtLXBhZGRpbmctcm9vdCB7XG4gICAgLy8gQSByb290LWxldmVsIHBhbmUgaW5zaWRlIGEgc2Nyb2xsIHZpZXcuIENsZWFyIG5lZ2F0aXZlIG1hcmdpbiBmcm9tIGFib3ZlLlxuICAgIG1hcmdpbjogMDtcbiAgICAvLyBNb3ZlIHRoZSBuZWdhdGl2ZSBtYXJnaW4gdXNlZCB0byByZW1vdmUgdGhlIHBhZGRpbmcgYWRkZWQgYnlcbiAgICAvLyBgLmRpdG8tY29udGFpbmVyYCBpbnNpZGUgYC5kaXRvLXBhbmVgIHRvIHRoZSBwYWRkaW5nOlxuICAgIC0tcGFuZS1wYWRkaW5nOiAjeyRyb290LXBhZGRpbmd9O1xuXG4gICAgJiN7JHNlbGZ9LS1zaW5nbGUge1xuICAgICAgLS1wYW5lLXBhZGRpbmc6ICN7JGNvbnRlbnQtcGFkZGluZ307XG4gICAgfVxuXG4gICAgJjpoYXMoPiAuZGl0by1jb250YWluZXItLWxhYmVsLXZlcnRpY2FsOmZpcnN0LW9mLXR5cGUpIHtcbiAgICAgIC8vIFJlZHVjZSB0b3Agc3BhY2luZyB3aGVuIHRoZSBmaXJzdCByb3cgaGFzIGxhYmVscy5cbiAgICAgIG1hcmdpbi10b3A6IC0kZm9ybS1zcGFjaW5nLWhhbGY7XG4gICAgfVxuXG4gICAgLy8gRGlzcGxheSBhIHJ1bGVyIGJldHdlZW4gdGFiYmVkIGNvbXBvbmVudHMgYW5kIHRvd2FyZHMgdGhlIC5kaXRvLWJ1dHRvbnNcbiAgICAmX190YWIgKyAmX19tYWluIHtcbiAgICAgICY6OmJlZm9yZSB7XG4gICAgICAgIC8vIFVzZSBhIHBzZXVkbyBlbGVtZW50IHRvIGRpc3BsYXkgYSBydWxlciB3aXRoIHByb3BlciBtYXJnaW5zXG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICBjb250ZW50OiAnJztcbiAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgIGJvcmRlci1ib3R0b206ICRib3JkZXItc3R5bGU7XG4gICAgICAgIC8vIFNoaWZ0IHJ1bGVyIHVwIGJ5ICRyb290LXBhZGRpbmcgdG8gZXhjbHVkZSByZW1vdmVkICRmb3JtLXNwYWNpbmctaGFsZlxuICAgICAgICBtYXJnaW46ICgtJHJvb3QtcGFkZGluZykgJGZvcm0tc3BhY2luZy1oYWxmICRyb290LXBhZGRpbmc7XG4gICAgICAgIHBhZGRpbmc6ICRmb3JtLXNwYWNpbmctaGFsZjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAmX19tYWluICsgLmRpdG8tYnV0dG9ucy1tYWluIHtcbiAgICAgIC8vIE5lZWRlZCBmb3JtcyB3aXRoIHN0aWNreSBtYWluIGJ1dHRvbnMuXG4gICAgICBtYXJnaW46ICRjb250ZW50LXBhZGRpbmc7XG4gICAgICBtYXJnaW4tYm90dG9tOiAwO1xuICAgIH1cbiAgfVxuXG4gICYtLXBhZGRpbmctaW5saW5lZCB7XG4gICAgLS1wYW5lLXBhZGRpbmc6IDBweDtcbiAgfVxuXG4gICYtLXBhZGRpbmctbmVzdGVkIHtcbiAgICAtLXBhbmUtcGFkZGluZzogI3skZm9ybS1zcGFjaW5nfTtcblxuICAgICY6aGFzKD4gLmRpdG8tY29udGFpbmVyLS1sYWJlbC12ZXJ0aWNhbDpmaXJzdC1vZi10eXBlKSB7XG4gICAgICAvLyBSZWR1Y2UgdG9wIHNwYWNpbmcgd2hlbiB0aGUgZmlyc3Qgcm93IGhhcyBsYWJlbHMuXG4gICAgICBwYWRkaW5nLXRvcDogJGZvcm0tc3BhY2luZy1oYWxmO1xuICAgIH1cbiAgfVxuXG4gIC5kaXRvLWJyZWFrIHtcbiAgICAvLyBgLmRpdG8tYnJlYWtgIGlzIHJlbmRlcmVkIGFzIDxzcGFuPiBzbyB3ZSBjYW4gdXNlIHRoZVxuICAgIC8vIGAuZGl0by1jb250YWluZXI6Zmlyc3Qtb2YtdHlwZWAgc2VsZWN0b3IgdG8gbWF0Y2ggdGhlIGZpcnN0IGNvbnRhaW5lclxuICAgIC8vIGV2ZW4gaWYgaXQgaGFzIGEgYnJlYWsgYmVmb3JlIGl0LlxuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIGZsZXg6IDEwMCU7XG4gICAgaGVpZ2h0OiAwO1xuICB9XG59XG48L3N0eWxlPlxuIiwiaW1wb3J0IHsgaXNTdHJpbmcgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VGcmFjdGlvbih2YWx1ZSkge1xuICBjb25zdCBtYXRjaCA9IChcbiAgICBpc1N0cmluZyh2YWx1ZSkgJiZcbiAgICB2YWx1ZS5tYXRjaCgvXlxccyooWystXT9cXGQrKVxccypcXC9cXHMqKFsrLV0/XFxkKylcXHMqJC8pXG4gIClcbiAgaWYgKG1hdGNoKSB7XG4gICAgY29uc3QgWywgZGl2aWRlbmQsIGRpdmlzb3JdID0gbWF0Y2hcbiAgICByZXR1cm4gcGFyc2VGbG9hdChkaXZpZGVuZCkgLyBwYXJzZUZsb2F0KGRpdmlzb3IpXG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHBhcnNlRmxvYXQodmFsdWUpXG4gIH1cbn1cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4uZGl0by1jb250YWluZXIoXG4gIHYtc2hvdz1cImNvbXBvbmVudFZpc2libGVcIlxuICA6Y2xhc3M9XCJjb250YWluZXJDbGFzc2VzXCJcbiAgOnN0eWxlPVwiY29udGFpbmVyU3R5bGVzXCJcbilcbiAgVGVsZXBvcnQoXG4gICAgdi1pZj1cImlzTW91bnRlZCAmJiBwYW5lbEVudHJpZXMubGVuZ3RoID4gMFwiXG4gICAgdG89XCIuZGl0by1zaWRlYmFyX190ZWxlcG9ydFwiXG4gIClcbiAgICBEaXRvUGFuZWxzKFxuICAgICAgOnBhbmVscz1cInBhbmVsRW50cmllc1wiXG4gICAgICA6ZGF0YT1cImRhdGFcIlxuICAgICAgOm1ldGE9XCJtZXRhXCJcbiAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICApXG4gIERpdG9MYWJlbChcbiAgICB2LWlmPVwiaGFzTGFiZWxcIlxuICAgIDpjbGFzcz1cImxheW91dENsYXNzZXNcIlxuICAgIDpsYWJlbD1cImxhYmVsXCJcbiAgICA6ZGF0YVBhdGg9XCJsYWJlbERhdGFQYXRoXCJcbiAgICA6aW5mbz1cImluZm9cIlxuICApXG4gIGNvbXBvbmVudC5kaXRvLWNvbXBvbmVudChcbiAgICA6aXM9XCJ0eXBlQ29tcG9uZW50XCJcbiAgICByZWY9XCJjb21wb25lbnRcIlxuICAgIDpjbGFzcz1cImNvbXBvbmVudENsYXNzZXNcIlxuICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICA6ZGF0YT1cImRhdGFcIlxuICAgIDptZXRhPVwibWV0YVwiXG4gICAgOnN0b3JlPVwic3RvcmVcIlxuICAgIDp3aWR0aD1cIndpZHRoXCJcbiAgICA6bGFiZWw9XCJsYWJlbFwiXG4gICAgOnNpbmdsZT1cInNpbmdsZVwiXG4gICAgOm5lc3RlZD1cIm5lc3RlZFwiXG4gICAgOmRpc2FibGVkPVwiY29tcG9uZW50RGlzYWJsZWRcIlxuICAgIDphY2N1bXVsYXRlZEJhc2lzPVwiY29tYmluZWRCYXNpc1wiXG4gICAgQGVycm9ycz1cIm9uRXJyb3JzXCJcbiAgKVxuICBEaXRvRXJyb3JzKDplcnJvcnM9XCJlcnJvcnNcIilcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgeyBpc1N0cmluZywgaXNOdW1iZXIgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCBEaXRvQ29udGV4dCBmcm9tICcuLi9EaXRvQ29udGV4dC5qcydcbmltcG9ydCB7IGdldFNjaGVtYUFjY2Vzc29yIH0gZnJvbSAnLi4vdXRpbHMvYWNjZXNzb3IuanMnXG5pbXBvcnQge1xuICBnZXRBbGxQYW5lbEVudHJpZXMsXG4gIGdldFR5cGVDb21wb25lbnQsXG4gIGhhc0xhYmVsLFxuICBvbWl0U3BhY2luZ1xufSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG5pbXBvcnQgeyBwYXJzZUZyYWN0aW9uIH0gZnJvbSAnLi4vdXRpbHMvbWF0aC5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdEaXRvQ29udGFpbmVyJywge1xuICBwcm9wczoge1xuICAgIHNjaGVtYTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgZGF0YVBhdGg6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiAnJyB9LFxuICAgIGRhdGE6IHsgdHlwZTogW09iamVjdCwgQXJyYXldLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIG1ldGE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHN0b3JlOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBzaW5nbGU6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBuZXN0ZWQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogdHJ1ZSB9LFxuICAgIGRpc2FibGVkOiB7IHR5cGU6IEJvb2xlYW4sIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgZ2VuZXJhdGVMYWJlbHM6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICB2ZXJ0aWNhbExhYmVsczogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGFjY3VtdWxhdGVkQmFzaXM6IHsgdHlwZTogTnVtYmVyLCBkZWZhdWx0OiBudWxsIH1cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBlcnJvcnM6IG51bGxcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBjb250ZXh0KCkge1xuICAgICAgcmV0dXJuIG5ldyBEaXRvQ29udGV4dCh0aGlzLCB7IG5lc3RlZDogdGhpcy5uZXN0ZWQgfSlcbiAgICB9LFxuXG4gICAgdHlwZUNvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiBnZXRUeXBlQ29tcG9uZW50KHRoaXMuc2NoZW1hLnR5cGUpXG4gICAgfSxcblxuICAgIGhhc0xhYmVsKCkge1xuICAgICAgcmV0dXJuIGhhc0xhYmVsKHRoaXMuc2NoZW1hLCB0aGlzLmdlbmVyYXRlTGFiZWxzKVxuICAgIH0sXG5cbiAgICBsYWJlbCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmhhc0xhYmVsID8gdGhpcy5nZXRMYWJlbCh0aGlzLnNjaGVtYSkgOiBudWxsXG4gICAgfSxcblxuICAgIGxhYmVsRGF0YVBhdGgoKSB7XG4gICAgICAvLyBVbm5lc3RlZCB0eXBlcyBkb24ndCBoYXZlIGEgZGF0YVBhdGggZm9yIHRoZW1zZWx2ZXMsIGRvbid0IHVzZSBpdDpcbiAgICAgIHJldHVybiB0aGlzLm5lc3RlZCA/IHRoaXMuZGF0YVBhdGggOiBudWxsXG4gICAgfSxcblxuICAgIGluZm86IGdldFNjaGVtYUFjY2Vzc29yKCdpbmZvJywge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgZGVmYXVsdDogbnVsbFxuICAgIH0pLFxuXG4gICAgd2lkdGg6IGdldFNjaGVtYUFjY2Vzc29yKCd3aWR0aCcsIHtcbiAgICAgIHR5cGU6IFtTdHJpbmcsIE51bWJlcl0sXG4gICAgICBkZWZhdWx0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy50eXBlQ29tcG9uZW50Py5kZWZhdWx0V2lkdGhcbiAgICAgIH0sXG4gICAgICBnZXQod2lkdGgpIHtcbiAgICAgICAgLy8gVXNlIDEwMCUgPT0gMS4wIGFzIGRlZmF1bHQgd2lkdGggd2hlbiBub3RoaW5nIGlzIHNldDpcbiAgICAgICAgcmV0dXJuIHdpZHRoID09PSB1bmRlZmluZWRcbiAgICAgICAgICA/IDEuMFxuICAgICAgICAgIDogaXNTdHJpbmcod2lkdGgpXG4gICAgICAgICAgICA/IHdpZHRoLm1hdGNoKC9eXFxzKls8Pl0/XFxzKiguKikkLylbMV0gLy8gUmVtb3ZlIHdpZHRoIG9wZXJhdG9yXG4gICAgICAgICAgICA6IHdpZHRoXG4gICAgICB9XG4gICAgfSksXG5cbiAgICB3aWR0aE9wZXJhdG9yOiBnZXRTY2hlbWFBY2Nlc3Nvcignd2lkdGgnLCB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBnZXQod2lkdGgpIHtcbiAgICAgICAgcmV0dXJuIGlzU3RyaW5nKHdpZHRoKVxuICAgICAgICAgID8gd2lkdGgubWF0Y2goL15cXHMqKFs8Pl0/KS8pWzFdIHx8IG51bGxcbiAgICAgICAgICA6IG51bGxcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIGNvbXBvbmVudFZpc2libGU6IGdldFNjaGVtYUFjY2Vzc29yKCd2aXNpYmxlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnR5cGVDb21wb25lbnQ/LmRlZmF1bHRWaXNpYmxlXG4gICAgICB9XG4gICAgfSksXG5cbiAgICBjb21wb25lbnREaXNhYmxlZDogZ2V0U2NoZW1hQWNjZXNzb3IoJ2Rpc2FibGVkJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlLFxuICAgICAgZ2V0KGRpc2FibGVkKSB7XG4gICAgICAgIHJldHVybiBkaXNhYmxlZCB8fCB0aGlzLmRpc2FibGVkXG4gICAgICB9XG4gICAgfSksXG5cbiAgICBmbGV4R3JvdygpIHtcbiAgICAgIC8vIEludGVycHJldCAnPjUwJScgYXMgJzUwJSwgZmxleC1ncm93OiAxYFxuICAgICAgcmV0dXJuIChcbiAgICAgICAgdGhpcy53aWR0aE9wZXJhdG9yID09PSAnPicgfHxcbiAgICAgICAgdGhpcy53aWR0aCA9PT0gJ2ZpbGwnXG4gICAgICApXG4gICAgfSxcblxuICAgIGZsZXhTaHJpbmsoKSB7XG4gICAgICAvLyBJbnRlcnByZXQgJzw1MCUnIGFzICc1MCUsIGZsZXgtc2hyaW5rOiAxYFxuICAgICAgcmV0dXJuIHRoaXMud2lkdGhPcGVyYXRvciA9PT0gJzwnXG4gICAgfSxcblxuICAgIGZsZXhCYXNpcygpIHtcbiAgICAgIGNvbnN0IHdpZHRoID0gdGhpcy53aWR0aFxuICAgICAgLy8gJ2F1dG8nID0gbm8gZml0dGluZzpcbiAgICAgIHJldHVybiBbbnVsbCwgJ2F1dG8nLCAnZmlsbCddLmluY2x1ZGVzKHdpZHRoKVxuICAgICAgICA/ICdhdXRvJ1xuICAgICAgICA6IC8lJC8udGVzdCh3aWR0aClcbiAgICAgICAgICA/IHBhcnNlRmxvYXQod2lkdGgpIC8gMTAwIC8vIHBlcmNlbnRhZ2UgLT4gZnJhY3Rpb25cbiAgICAgICAgICA6IC9bYS16XS8udGVzdCh3aWR0aClcbiAgICAgICAgICAgID8gd2lkdGggLy8gbmF0aXZlIHVuaXRzXG4gICAgICAgICAgICA6IHBhcnNlRnJhY3Rpb24od2lkdGgpIC8vIGZyYWN0aW9uXG4gICAgfSxcblxuICAgIGNvbWJpbmVkQmFzaXMoKSB7XG4gICAgICBjb25zdCB7IGFjY3VtdWxhdGVkQmFzaXMsIGZsZXhCYXNpcyB9ID0gdGhpc1xuICAgICAgcmV0dXJuIGlzTnVtYmVyKGFjY3VtdWxhdGVkQmFzaXMpICYmIGlzTnVtYmVyKGZsZXhCYXNpcylcbiAgICAgICAgPyBhY2N1bXVsYXRlZEJhc2lzICogZmxleEJhc2lzXG4gICAgICAgIDogbnVsbFxuICAgIH0sXG5cbiAgICBjb250YWluZXJDbGFzc2VzKCkge1xuICAgICAgY29uc3QgeyBjbGFzczogY2xhc3NlcyB9ID0gdGhpcy5zY2hlbWFcbiAgICAgIGNvbnN0IHByZWZpeCA9ICdkaXRvLWNvbnRhaW5lcidcbiAgICAgIHJldHVybiB7XG4gICAgICAgIFtgJHtwcmVmaXh9LS1zaW5nbGVgXTogdGhpcy5zaW5nbGUsXG4gICAgICAgICdkaXRvLWRpc2FibGVkJzogdGhpcy5jb21wb25lbnREaXNhYmxlZCxcbiAgICAgICAgJ2RpdG8taGFzLWVycm9ycyc6ICEhdGhpcy5lcnJvcnMsXG4gICAgICAgIFtgJHtwcmVmaXh9LS1sYWJlbC12ZXJ0aWNhbGBdOiB0aGlzLnZlcnRpY2FsTGFiZWxzLFxuICAgICAgICBbYCR7cHJlZml4fS0tb21pdC1zcGFjaW5nYF06IG9taXRTcGFjaW5nKHRoaXMuc2NoZW1hKSxcbiAgICAgICAgLi4uKGlzU3RyaW5nKGNsYXNzZXMpID8geyBbY2xhc3Nlc106IHRydWUgfSA6IGNsYXNzZXMpXG4gICAgICB9XG4gICAgfSxcblxuICAgIGNvbnRhaW5lclN0eWxlcygpIHtcbiAgICAgIGNvbnN0IHsgZmxleEJhc2lzLCBjb21iaW5lZEJhc2lzIH0gPSB0aGlzXG4gICAgICByZXR1cm4ge1xuICAgICAgICAnLS1ncm93JzogdGhpcy5mbGV4R3JvdyA/IDEgOiAwLFxuICAgICAgICAnLS1zaHJpbmsnOiB0aGlzLmZsZXhTaHJpbmsgPyAxIDogMCxcbiAgICAgICAgJy0tYmFzaXMnOiBpc051bWJlcihmbGV4QmFzaXMpID8gYCR7ZmxleEJhc2lzICogMTAwfSVgIDogZmxleEJhc2lzLFxuICAgICAgICAnLS1iYXNpcy1tb2JpbGUnOlxuICAgICAgICAgIGlzTnVtYmVyKGNvbWJpbmVkQmFzaXMpICYmIGNvbWJpbmVkQmFzaXMgPD0gMC4yNVxuICAgICAgICAgICAgPyBgJHtmbGV4QmFzaXMgKiAyMDB9JWBcbiAgICAgICAgICAgIDogbnVsbFxuICAgICAgfVxuICAgIH0sXG5cbiAgICBjb21wb25lbnRDbGFzc2VzKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgJ2RpdG8tc2luZ2xlJzogdGhpcy5zaW5nbGUsXG4gICAgICAgIC4uLnRoaXMubGF5b3V0Q2xhc3Nlc1xuICAgICAgfVxuICAgIH0sXG5cbiAgICBsYXlvdXRDbGFzc2VzKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgJ2RpdG8td2lkdGgtZmlsbCc6IHRoaXMud2lkdGggPT09ICdmaWxsJyB8fCB0aGlzLmZsZXhCYXNpcyAhPT0gJ2F1dG8nLFxuICAgICAgICAnZGl0by13aWR0aC1ncm93JzogdGhpcy5mbGV4R3JvdyxcbiAgICAgICAgJ2RpdG8td2lkdGgtc2hyaW5rJzogdGhpcy5mbGV4U2hyaW5rXG4gICAgICB9XG4gICAgfSxcblxuICAgIHBhbmVsRW50cmllcygpIHtcbiAgICAgIHJldHVybiBnZXRBbGxQYW5lbEVudHJpZXMoXG4gICAgICAgIHRoaXMuYXBpLFxuICAgICAgICB0aGlzLnNjaGVtYSxcbiAgICAgICAgdGhpcy5kYXRhUGF0aCxcbiAgICAgICAgdGhpcy4kcmVmcy5jb21wb25lbnQsXG4gICAgICAgIHRoaXMudGFiQ29tcG9uZW50XG4gICAgICApXG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBvbkVycm9ycyhlcnJvcnMpIHtcbiAgICAgIHRoaXMuZXJyb3JzID0gZXJyb3JzXG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLmRpdG8tY29udGFpbmVyIHtcbiAgLS1ncm93OiAwO1xuICAtLXNocmluazogMTtcbiAgLS1iYXNpczogYXV0bztcblxuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXg6IHZhcigtLWdyb3cpIHZhcigtLXNocmluaykgdmFyKC0tYmFzaXMpO1xuICBmbGV4LWZsb3c6IGNvbHVtbjtcbiAgYWxpZ24taXRlbXM6IGZsZXgtc3RhcnQ7XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIC8vIFRvIHByZXZlbnQgbGlzdCB0YWJsZXMgZnJvbSBibG93aW5nIG91dCBvZiB0aGVpciBmbGV4IGJveCBjb250YWluZXJzLlxuICBtYXgtd2lkdGg6IDEwMCU7XG4gIC8vIENhbm5vdCB1c2UgbWFyZ2luIGhlcmUgYXMgaXQgbmVlZHMgdG8gYmUgcGFydCBvZiBib3gtc2l6aW5nIGZvclxuICAvLyBwZXJjZW50YWdlcyBpbiBmbGV4LWJhc2lzIHRvIHdvcmsuXG4gIHBhZGRpbmc6ICRmb3JtLXNwYWNpbmctaGFsZjtcblxuICAuZGl0by1wYW5lID4gJiB7XG4gICAgLmRpdG8tcGFnZS0td2lkdGgtODAgJiB7XG4gICAgICBmbGV4LWdyb3c6IDE7XG4gICAgICBmbGV4LWJhc2lzOiB2YXIoLS1iYXNpcy1tb2JpbGUsIHZhcigtLWJhc2lzKSk7XG4gICAgICAvLyBERUJVRzogYmFja2dyb3VuZDogeWVsbG93O1xuICAgIH1cblxuICAgIC5kaXRvLXBhZ2UtLXdpZHRoLTYwICYge1xuICAgICAgZmxleC1iYXNpczogY2FsYygyICogdmFyKC0tYmFzaXMpKTtcbiAgICAgIC8vIERFQlVHOiBiYWNrZ3JvdW5kOiBvcmFuZ2U7XG4gICAgfVxuXG4gICAgLmRpdG8tc2lkZWJhci0td2lkdGgtOTkgJiB7XG4gICAgICBmbGV4LWdyb3c6IDE7XG4gICAgICAvLyBERUJVRzogYmFja2dyb3VuZDogeWVsbG93O1xuICAgIH1cblxuICAgIC5kaXRvLXNpZGViYXItLXdpZHRoLTYwICYge1xuICAgICAgZmxleC1iYXNpczogY2FsYygyICogdmFyKC0tYmFzaXMpKTtcbiAgICAgIC8vIERFQlVHOiBiYWNrZ3JvdW5kOiBvcmFuZ2U7XG4gICAgfVxuICB9XG5cbiAgJjplbXB0eSB7XG4gICAgcGFkZGluZzogMDtcbiAgfVxuXG4gICYtLXNpbmdsZSB7XG4gICAgaGVpZ2h0OiAxMDAlOyAvLyBTbyB0aGF0IGxpc3QgYnV0dG9ucyBjYW4gYmUgc3RpY2t5IGF0IHRoZSBib3R0b207XG4gICAgLy8gSnVzdCBsaWtlIG9uIERpdG9QYW5lLCBjbGVhciBzZXR0aW5ncyBmcm9tIGFib3ZlLlxuICAgIHBhZGRpbmc6IDA7XG4gIH1cblxuICAmLS1sYWJlbC12ZXJ0aWNhbCB7XG4gICAgLy8gRm9yIHBsYWluIGNvbXBvbmVudHMgd2l0aG91dCBsYWJlbHMgaW4gcm93cyB3aXRoIG90aGVyIGNvbXBvbmVudHMgdGhhdFxuICAgIC8vIGhhdmUgbGFiZWxzLCBhZGQgc29tZSBzcGFjaW5nIHRvIHRoZSB0b3AgdG8gYWxpZ24gd2l0aCB0aGUgb3RoZXJcbiAgICAvLyBjb21wb25lbnRzIChlLmcuICBidXR0b25zKTpcbiAgICA+IC5kaXRvLWNvbXBvbmVudDpmaXJzdC1jaGlsZDpub3QoLmRpdG8tc2VjdGlvbiwgLmRpdG8tbGlzdCwgLmRpdG8tb2JqZWN0KSB7XG4gICAgICBtYXJnaW4tdG9wOiAkaW5wdXQtaGVpZ2h0O1xuICAgIH1cbiAgfVxuXG4gICYtLW9taXQtc3BhY2luZyB7XG4gICAgcGFkZGluZzogMDtcblxuICAgID4gLmRpdG8tbGFiZWwge1xuICAgICAgbWFyZ2luOiAkZm9ybS1zcGFjaW5nLWhhbGYgJGZvcm0tc3BhY2luZy1oYWxmIDA7XG4gICAgfVxuICB9XG59XG5cbi8vIE5PVEU6IFRoaXMgaXMgbm90IG5lc3RlZCBpbnNpZGUgYC5kaXRvLWNvbnRhaW5lcmAgc28gdGhhdCBvdGhlclxuLy8gdHlwZSBjb21wb25lbnRzIGNhbiBvdmVycmlkZSBgLmRpdG8td2lkdGgtZmlsbGAgY2xhc3MgKGZpbHRlciBwcmVjZWRlbmNlKS5cbi5kaXRvLWNvbXBvbmVudCB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcblxuICAmLmRpdG8td2lkdGgtZmlsbCB7XG4gICAgd2lkdGg6IDEwMCU7XG5cbiAgICAmLmRpdG8tY2hlY2tib3gsXG4gICAgJi5kaXRvLXJhZGlvLWJ1dHRvbiB7XG4gICAgICAvLyBXZWJLaXQgZG9lc24ndCBsaWtlIGNoYW5nZWQgd2lkdGggb24gY2hlY2tib3hlcyBhbmQgcmFkaW9zLCBvdmVycmlkZTpcbiAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICAgIHdpZHRoOiBhdXRvO1xuICAgIH1cbiAgfVxufVxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4uZGl0by10YWJzXG4gIHRlbXBsYXRlKFxuICAgIHYtZm9yPVwiKHRhYlNjaGVtYSwga2V5KSBpbiB0YWJzXCJcbiAgKVxuICAgIGEuZGl0by1saW5rKFxuICAgICAgdi1pZj1cInNob3VsZFJlbmRlclNjaGVtYSh0YWJTY2hlbWEpXCJcbiAgICAgIDprZXk9XCJrZXlcIlxuICAgICAgOmNsYXNzPVwieyAnZGl0by1hY3RpdmUnOiBtb2RlbFZhbHVlID09PSBrZXkgfVwiXG4gICAgICBAY2xpY2s9XCIkZW1pdCgndXBkYXRlOm1vZGVsVmFsdWUnLCBrZXkpXCJcbiAgICApIHt7IGdldExhYmVsKHRhYlNjaGVtYSwga2V5KSB9fVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnRGl0b1RhYnMnLCB7XG4gIGVtaXRzOiBbJ3VwZGF0ZTptb2RlbFZhbHVlJ10sXG4gIHByb3BzOiB7XG4gICAgdGFiczogeyB0eXBlOiBPYmplY3QsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBtb2RlbFZhbHVlOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogbnVsbCB9XG4gIH1cbn0pXG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AdXNlICdzYXNzOmNvbG9yJztcbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5cbi5kaXRvLXRhYnMge1xuICBkaXNwbGF5OiBmbGV4O1xuXG4gIC5kaXRvLWxpbmsge1xuICAgIEBpbmNsdWRlIHVzZXItc2VsZWN0KG5vbmUpO1xuXG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcblxuICAgICY6aG92ZXIge1xuICAgICAgYmFja2dyb3VuZDogJGNvbG9yLXdoaXRlO1xuICAgIH1cblxuICAgIC8vIFdoZW4gaW4gbWFpbiBoZWFkZXI6XG4gICAgLmRpdG8taGVhZGVyICYge1xuICAgICAgYmFja2dyb3VuZDogJGNvbG9yLWxpZ2h0O1xuICAgICAgcGFkZGluZzogJHRhYi1wYWRkaW5nLXZlciAkdGFiLXBhZGRpbmctaG9yO1xuICAgICAgbWFyZ2luLWxlZnQ6ICR0YWItbWFyZ2luO1xuICAgICAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogJHRhYi1yYWRpdXM7XG4gICAgICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogJHRhYi1yYWRpdXM7XG5cbiAgICAgICY6YWN0aXZlIHtcbiAgICAgICAgYmFja2dyb3VuZDogJGNvbG9yLWxpZ2h0ZXN0O1xuICAgICAgfVxuXG4gICAgICAmLmRpdG8tYWN0aXZlIHtcbiAgICAgICAgYmFja2dyb3VuZDogJGNvbG9yLWxpZ2h0ZXN0O1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFdoZW4gaW5zaWRlIGEgaW5saW5lIHNjaGVtYTpcbiAgICAuZGl0by1zY2hlbWEtaW5saW5lZCAmLFxuICAgIC5kaXRvLWxhYmVsICYge1xuICAgICAgYmFja2dyb3VuZDogJGNvbG9yLWxpZ2h0ZXI7XG4gICAgICBib3JkZXI6ICRib3JkZXItc3R5bGU7XG4gICAgICBwYWRkaW5nOiAkaW5wdXQtcGFkZGluZztcbiAgICAgIG1hcmdpbi1sZWZ0OiAtJGJvcmRlci13aWR0aDtcbiAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG5cbiAgICAgICY6Zmlyc3QtY2hpbGQge1xuICAgICAgICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAkdGFiLXJhZGl1cztcbiAgICAgICAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogJHRhYi1yYWRpdXM7XG4gICAgICB9XG5cbiAgICAgICY6bGFzdC1jaGlsZCB7XG4gICAgICAgIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAkdGFiLXJhZGl1cztcbiAgICAgICAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6ICR0YWItcmFkaXVzO1xuICAgICAgfVxuXG4gICAgICAmOmFjdGl2ZSB7XG4gICAgICAgIGJhY2tncm91bmQ6ICRjb2xvci1saWdodGVyO1xuICAgICAgfVxuXG4gICAgICAmLmRpdG8tYWN0aXZlIHtcbiAgICAgICAgYmFja2dyb3VuZDogJGNvbG9yLWFjdGl2ZTtcbiAgICAgICAgYm9yZGVyLWNvbG9yOiBjb2xvci5hZGp1c3QoJGNvbG9yLWFjdGl2ZSwgJGxpZ2h0bmVzczogLTEwJSk7XG4gICAgICAgIGNvbG9yOiAkY29sb3Itd2hpdGU7XG4gICAgICAgIHotaW5kZXg6IDE7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLmRpdG8tc2NoZW1hICYge1xuICAgIC8vIFB1c2ggY2xpcGJvYXJkIHRvIHRoZSByaWdodCBpbiB0aGUgZmxleCBsYXlvdXQsIHNlZTpcbiAgICAvLyBodHRwczovL2NvZGVwZW4uaW8vdGhvbGV4L3Blbi9odmVCeC9cbiAgICBtYXJnaW4tbGVmdDogYXV0bztcblxuICAgICY6bGFzdC1jaGlsZCB7XG4gICAgICBtYXJnaW4tcmlnaHQ6IGF1dG87XG4gICAgfVxuICB9XG59XG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbi8vLSBPbmx5IHNob3cgcGFuZWxzIGluIHRhYnMgd2hlbiB0aGUgdGFicyBhcmUgYWxzbyB2aXNpYmxlLlxuY29tcG9uZW50LmRpdG8tcGFuZWwoXG4gIHYtaWY9XCJzaG91bGRSZW5kZXJTY2hlbWEocGFuZWxTY2hlbWEpXCJcbiAgdi1zaG93PVwidmlzaWJsZSAmJiAoIXBhbmVsVGFiQ29tcG9uZW50IHx8IHBhbmVsVGFiQ29tcG9uZW50LnZpc2libGUpXCJcbiAgOmlzPVwicGFuZWxUYWdcIlxuICBAc3VibWl0LnByZXZlbnRcbilcbiAgRGl0b1NjaGVtYS5kaXRvLXBhbmVsX19zY2hlbWEoXG4gICAgOnNjaGVtYT1cInBhbmVsU2NoZW1hXCJcbiAgICA6ZGF0YVBhdGg9XCJwYW5lbERhdGFQYXRoXCJcbiAgICA6ZGF0YT1cInBhbmVsRGF0YVwiXG4gICAgOm1ldGE9XCJtZXRhXCJcbiAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgcGFkZGluZz1cIm5lc3RlZFwiXG4gICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgIDpoYXNPd25EYXRhPVwiaGFzT3duRGF0YVwiXG4gICAgZ2VuZXJhdGVMYWJlbHNcbiAgKVxuICAgIHRlbXBsYXRlKCNiZWZvcmUpXG4gICAgICBoMi5kaXRvLXBhbmVsX19oZWFkZXIoOmNsYXNzPVwieyAnZGl0by1wYW5lbF9faGVhZGVyLS1zdGlja3knOiBzdGlja3kgfVwiKVxuICAgICAgICBzcGFuIHt7IGdldExhYmVsKHNjaGVtYSkgfX1cbiAgICAgICAgRGl0b0J1dHRvbnMuZGl0by1idXR0b25zLXNtYWxsKFxuICAgICAgICAgIDpidXR0b25zPVwicGFuZWxCdXR0b25TY2hlbWFzXCJcbiAgICAgICAgICA6ZGF0YVBhdGg9XCJwYW5lbERhdGFQYXRoXCJcbiAgICAgICAgICA6ZGF0YT1cInBhbmVsRGF0YVwiXG4gICAgICAgICAgOm1ldGE9XCJtZXRhXCJcbiAgICAgICAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgICAgICApXG4gICAgdGVtcGxhdGUoI2J1dHRvbnMpXG4gICAgICBEaXRvQnV0dG9ucyhcbiAgICAgICAgOmJ1dHRvbnM9XCJidXR0b25TY2hlbWFzXCJcbiAgICAgICAgOmRhdGFQYXRoPVwicGFuZWxEYXRhUGF0aFwiXG4gICAgICAgIDpkYXRhPVwicGFuZWxEYXRhXCJcbiAgICAgICAgOm1ldGE9XCJtZXRhXCJcbiAgICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgICApXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IHsgaXNGdW5jdGlvbiB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IFZhbGlkYXRvck1peGluIGZyb20gJy4uL21peGlucy9WYWxpZGF0b3JNaXhpbi5qcydcbmltcG9ydCB7IGdldEJ1dHRvblNjaGVtYXMgfSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG5pbXBvcnQgeyBnZXRTY2hlbWFBY2Nlc3NvciB9IGZyb20gJy4uL3V0aWxzL2FjY2Vzc29yLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ0RpdG9QYW5lbCcsIHtcbiAgbWl4aW5zOiBbVmFsaWRhdG9yTWl4aW5dLFxuXG4gIHByb3ZpZGUoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICRwYW5lbENvbXBvbmVudDogKCkgPT4gdGhpcyxcbiAgICAgICR0YWJDb21wb25lbnQ6ICgpID0+IHRoaXMucGFuZWxUYWJDb21wb25lbnRcbiAgICB9XG4gIH0sXG5cbiAgcHJvcHM6IHtcbiAgICBzY2hlbWE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGRhdGFQYXRoOiB7IHR5cGU6IFN0cmluZywgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBkYXRhOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBtZXRhOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBzdG9yZTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgZGlzYWJsZWQ6IHsgdHlwZTogQm9vbGVhbiwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBwYW5lbFRhYkNvbXBvbmVudDogeyB0eXBlOiBPYmplY3QsIGRlZmF1bHQ6IG51bGwgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG93bkRhdGE6IG51bGxcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBwYW5lbENvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzXG4gICAgfSxcblxuICAgIHRhYkNvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzLnBhbmVsVGFiQ29tcG9uZW50XG4gICAgfSxcblxuICAgIGJ1dHRvblNjaGVtYXMoKSB7XG4gICAgICByZXR1cm4gZ2V0QnV0dG9uU2NoZW1hcyh0aGlzLnNjaGVtYS5idXR0b25zKVxuICAgIH0sXG5cbiAgICBwYW5lbEJ1dHRvblNjaGVtYXMoKSB7XG4gICAgICByZXR1cm4gZ2V0QnV0dG9uU2NoZW1hcyh0aGlzLnNjaGVtYS5wYW5lbEJ1dHRvbnMpXG4gICAgfSxcblxuICAgIGhhc093bkRhdGEoKSB7XG4gICAgICByZXR1cm4gISF0aGlzLm93bkRhdGFcbiAgICB9LFxuXG4gICAgcGFuZWxEYXRhKCkge1xuICAgICAgcmV0dXJuIHRoaXMub3duRGF0YSB8fCB0aGlzLmRhdGFcbiAgICB9LFxuXG4gICAgcGFuZWxTY2hlbWEoKSB7XG4gICAgICBpZiAodGhpcy5oYXNPd25EYXRhKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNjaGVtYVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gUmVtb3ZlIGBkYXRhYCBmcm9tIHRoZSBzY2hlbWEsIHNvIHRoYXQgRGl0b1NjaGVtYSBpc24ndCB1c2luZyBpdCB0b1xuICAgICAgICAvLyBwcm9kdWNlIGl0cyBvd24gZGF0YS4gU2VlICRmaWx0ZXJzIHBhbmVsIGZvciBtb3JlIGRldGFpbHMgb24gZGF0YS5cbiAgICAgICAgY29uc3QgeyBkYXRhLCAuLi5zY2hlbWEgfSA9IHRoaXMuc2NoZW1hXG4gICAgICAgIHJldHVybiBzY2hlbWFcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgcGFuZWxUYWcoKSB7XG4gICAgICAvLyBQYW5lbHMgdGhhdCBwcm92aWRlIHRoZWlyIG93biBkYXRhIG5lZWQgdGhlaXIgb3duIGZvcm0uXG4gICAgICByZXR1cm4gdGhpcy5oYXNPd25EYXRhID8gJ2Zvcm0nIDogJ2RpdidcbiAgICB9LFxuXG4gICAgcGFuZWxEYXRhUGF0aCgpIHtcbiAgICAgIC8vIElmIHRoZSBwYW5lbCBwcm92aWRlcyBpdHMgb3duIGRhdGEsIHRoZW4gaXQgbmVlZHMgdG8gcHJlZml4IGFsbFxuICAgICAgLy8gY29tcG9uZW50cyB3aXRoIGl0cyBkYXRhLXBhdGgsIGJ1dCBpZiBpdCBzaGFyZXMgZGF0YSB3aXRoIHRoZSBzY2hlbWFcbiAgICAgIC8vIGNvbXBvbmVudCwgdGhlbiBpdCBzaG91bGQgc2hhcmUgdGhlIGRhdGEtcGF0aCBuYW1lIHNwYWNlIHRvby5cbiAgICAgIHJldHVybiB0aGlzLmhhc093bkRhdGEgPyB0aGlzLmRhdGFQYXRoIDogdGhpcy5zY2hlbWFDb21wb25lbnQuZGF0YVBhdGhcbiAgICB9LFxuXG4gICAgdmlzaWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ3Zpc2libGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogdHJ1ZVxuICAgIH0pLFxuXG4gICAgc3RpY2t5OiBnZXRTY2hlbWFBY2Nlc3Nvcignc3RpY2t5Jywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfSlcbiAgfSxcblxuICBjcmVhdGVkKCkge1xuICAgIHRoaXMuX3JlZ2lzdGVyKHRydWUpXG4gICAgLy8gTk9URTogVGhpcyBpcyBub3QgdGhlIHNhbWUgYXMgYHNjaGVtYS5kYXRhYCBoYW5kbGluZyBpbiBEaXRvU2NoZW1hLFxuICAgIC8vIHdoZXJlIHRoZSBkYXRhIGlzIGFkZGVkIHRvIHRoZSBhY3R1YWwgY29tcG9uZW50LlxuICAgIGNvbnN0IHsgZGF0YSB9ID0gdGhpcy5zY2hlbWFcbiAgICBpZiAoZGF0YSkge1xuICAgICAgdGhpcy5vd25EYXRhID0gaXNGdW5jdGlvbihkYXRhKVxuICAgICAgICA/IGRhdGEodGhpcy5jb250ZXh0KVxuICAgICAgICA6IGRhdGFcbiAgICB9XG4gIH0sXG5cbiAgdW5tb3VudGVkKCkge1xuICAgIHRoaXMuX3JlZ2lzdGVyKGZhbHNlKVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBfcmVnaXN0ZXIoYWRkKSB7XG4gICAgICAvLyBSZWdpc3RlciB0aGUgcGFuZWxzIHNvIHRoYXQgb3RoZXIgY29tcG9uZW50cyBjYW4gZmluZCB0aGVtIGJ5IHRoZWlyXG4gICAgICAvLyBkYXRhLXBhdGgsIGUuZy4gaW4gVHlwZUxpc3Qub25GaWx0ZXJFcnJvcnMoKVxuICAgICAgdGhpcy5zY2hlbWFDb21wb25lbnQuX3JlZ2lzdGVyUGFuZWwodGhpcywgYWRkKVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5cbi5kaXRvLXBhbmVsIHtcbiAgJjpub3QoOmxhc3QtY2hpbGQpIHtcbiAgICBtYXJnaW4tYm90dG9tOiAkY29udGVudC1wYWRkaW5nO1xuICB9XG5cbiAgJl9faGVhZGVyIHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICBwYWRkaW5nOiAkaW5wdXQtcGFkZGluZztcbiAgICBiYWNrZ3JvdW5kOiAkYnV0dG9uLWNvbG9yO1xuICAgIGJvcmRlcjogJGJvcmRlci1zdHlsZTtcbiAgICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAkYm9yZGVyLXJhZGl1cztcbiAgICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogJGJvcmRlci1yYWRpdXM7XG5cbiAgICAmLS1zdGlja3kge1xuICAgICAgJG1hcmdpbjogJGlucHV0LWhlaWdodC1mYWN0b3IgKiAkbGluZS1oZWlnaHQgKiAkZm9udC1zaXplLXNtYWxsICtcbiAgICAgICAgJGZvcm0tc3BhY2luZztcblxuICAgICAgcG9zaXRpb246IHN0aWNreTtcbiAgICAgIHRvcDogJGNvbnRlbnQtcGFkZGluZztcbiAgICAgIG1hcmdpbi1ib3R0b206ICRtYXJnaW47XG4gICAgICB6LWluZGV4OiAxO1xuXG4gICAgICAmICsgKiB7XG4gICAgICAgIG1hcmdpbi10b3A6IC0kbWFyZ2luO1xuICAgICAgfVxuXG4gICAgICAmOjpiZWZvcmUge1xuICAgICAgICBjb250ZW50OiAnJztcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgYmFja2dyb3VuZDogJGNvbnRlbnQtY29sb3ItYmFja2dyb3VuZDtcbiAgICAgICAgbGVmdDogMDtcbiAgICAgICAgcmlnaHQ6IDA7XG4gICAgICAgIGhlaWdodDogJGNvbnRlbnQtcGFkZGluZztcbiAgICAgICAgdG9wOiAtJGNvbnRlbnQtcGFkZGluZztcbiAgICAgICAgbWFyZ2luOiAtJGJvcmRlci13aWR0aDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAuZGl0by1idXR0b25zIHtcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgIHJpZ2h0OiAkaW5wdXQtcGFkZGluZy12ZXI7XG4gICAgICB0b3A6IDUwJTtcbiAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNTAlKTtcbiAgICB9XG4gIH1cblxuICAmX19zY2hlbWEge1xuICAgIGZvbnQtc2l6ZTogJGZvbnQtc2l6ZS1zbWFsbDtcbiAgICBiYWNrZ3JvdW5kOiAkY29udGVudC1jb2xvci1iYWNrZ3JvdW5kO1xuICAgIGJvcmRlcjogJGJvcmRlci1zdHlsZTtcbiAgICBib3JkZXItdG9wOiAwO1xuICAgIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6ICRib3JkZXItcmFkaXVzO1xuICAgIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAkYm9yZGVyLXJhZGl1cztcblxuICAgID4gLmRpdG8tc2NoZW1hLWNvbnRlbnQge1xuICAgICAgLmRpdG8tb2JqZWN0IHtcbiAgICAgICAgYm9yZGVyOiBub25lO1xuICAgICAgICBwYWRkaW5nOiAwO1xuICAgICAgfVxuXG4gICAgICA+IC5kaXRvLWJ1dHRvbnMge1xuICAgICAgICAtLWJ1dHRvbi1tYXJnaW46ICN7JGZvcm0tc3BhY2luZ307XG5cbiAgICAgICAgcGFkZGluZzogJGZvcm0tc3BhY2luZztcblxuICAgICAgICAuZGl0by1jb250YWluZXIge1xuICAgICAgICAgIHBhZGRpbmc6IDA7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAuZGl0by1sYWJlbCB7XG4gICAgICBsYWJlbCB7XG4gICAgICAgIGZvbnQtd2VpZ2h0OiBub3JtYWw7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbi5kaXRvLXBhbmVscyhcbiAgdi1pZj1cInBhbmVscy5sZW5ndGggPiAwXCJcbilcbiAgdGVtcGxhdGUoXG4gICAgdi1mb3I9XCJ7IHNjaGVtYSwgZGF0YVBhdGgsIHRhYkNvbXBvbmVudCB9IGluIHBhbmVsc1wiXG4gIClcbiAgICBEaXRvUGFuZWwoXG4gICAgICB2LWlmPVwic2hvdWxkUmVuZGVyU2NoZW1hKHNjaGVtYSlcIlxuICAgICAgOmtleT1cImdldFBhbmVsS2V5KGRhdGFQYXRoLCB0YWJDb21wb25lbnQpXCJcbiAgICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgICAgOmRhdGE9XCJkYXRhXCJcbiAgICAgIDptZXRhPVwibWV0YVwiXG4gICAgICA6c3RvcmU9XCJnZXRDaGlsZFN0b3JlKHNjaGVtYS5uYW1lKVwiXG4gICAgICA6ZGlzYWJsZWQ9XCJzY2hlbWEuZGlzYWJsZWQgPz8gZGlzYWJsZWRcIlxuICAgICAgOnBhbmVsVGFiQ29tcG9uZW50PVwidGFiQ29tcG9uZW50XCJcbiAgICApXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdEaXRvUGFuZWxzJywge1xuICBwcm9wczoge1xuICAgIHBhbmVsczogeyB0eXBlOiBBcnJheSwgZGVmYXVsdDogbnVsbCB9LFxuICAgIGRhdGE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIG1ldGE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHN0b3JlOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBkaXNhYmxlZDogeyB0eXBlOiBCb29sZWFuLCByZXF1aXJlZDogdHJ1ZSB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGdldFBhbmVsS2V5KGRhdGFQYXRoLCB0YWJDb21wb25lbnQpIHtcbiAgICAgIC8vIEFsbG93IHNlcGFyYXRlIHRhYnMgdG8gdXNlIHBhbmVscyBvZiB0aGUgc2FtZSBuYW1lLCBieVxuICAgICAgLy8gcHJlZml4aW5nIHRoZWlyIGtleSB3aXRoIHRoZSB0YWIgbmFtZS5cbiAgICAgIHJldHVybiB0YWJDb21wb25lbnQgPyBgJHt0YWJDb21wb25lbnQudGFifV8ke2RhdGFQYXRofWAgOiBkYXRhUGF0aFxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5cbi5kaXRvLXBhbmVscyB7XG4gIG1hcmdpbjogJGNvbnRlbnQtcGFkZGluZztcbiAgbWFyZ2luLWxlZnQ6ICRmb3JtLXNwYWNpbmc7XG59XG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbi5kaXRvLWJ1dHRvbnMoXG4gIHYtaWY9XCJidXR0b25TY2hlbWFzIHx8IGhhc1Nsb3RDb250ZW50KCRzbG90cy5kZWZhdWx0KVwiXG4pXG4gIHRlbXBsYXRlKFxuICAgIHYtZm9yPVwiKGJ1dHRvblNjaGVtYSwgYnV0dG9uRGF0YVBhdGgpIGluIGJ1dHRvblNjaGVtYXNcIlxuICApXG4gICAgRGl0b0NvbnRhaW5lcihcbiAgICAgIHYtaWY9XCJzaG91bGRSZW5kZXJTY2hlbWEoYnV0dG9uU2NoZW1hKVwiXG4gICAgICA6a2V5PVwiYnV0dG9uRGF0YVBhdGhcIlxuICAgICAgOnNjaGVtYT1cImJ1dHRvblNjaGVtYVwiXG4gICAgICA6ZGF0YVBhdGg9XCJidXR0b25EYXRhUGF0aFwiXG4gICAgICA6ZGF0YT1cImRhdGFcIlxuICAgICAgOm1ldGE9XCJtZXRhXCJcbiAgICAgIDpzdG9yZT1cImdldENoaWxkU3RvcmUoYnV0dG9uU2NoZW1hLm5hbWUpXCJcbiAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICApXG4gIHRlbXBsYXRlKFxuICAgIHYtZm9yPVwidm5vZGUgb2YgJHNsb3RzLmRlZmF1bHQ/LigpXCJcbiAgKVxuICAgIC8vLSBSZW5kZXIgZWFjaCBub2RlIGluIHRoZSBkZWZhdWx0IHNsb3QgdGhyb3VnaCBgZGl0by12bm9kZWAsXG4gICAgLy8tIHNvIGl0IGNhbiBiZSB3cmFwcGVkIGluIGEgYC5kaXRvLWNvbnRhaW5lcmAgY2xhc3MuXG4gICAgLmRpdG8tY29udGFpbmVyKFxuICAgICAgdi1pZj1cImhhc1ZOb2RlQ29udGVudCh2bm9kZSlcIlxuICAgIClcbiAgICAgIERpdG9Wbm9kZSg6dm5vZGU9XCJ2bm9kZVwiKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgeyBhcHBlbmREYXRhUGF0aCB9IGZyb20gJy4uL3V0aWxzL2RhdGEuanMnXG5pbXBvcnQgeyBoYXNTbG90Q29udGVudCwgaGFzVk5vZGVDb250ZW50IH0gZnJvbSAnQGRpdG9qcy91aS9zcmMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnRGl0b0J1dHRvbnMnLCB7XG4gIHByb3ZpZGU6IHtcbiAgICAkdGFiQ29tcG9uZW50OiAoKSA9PiBudWxsXG4gIH0sXG5cbiAgcHJvcHM6IHtcbiAgICBidXR0b25zOiB7IHR5cGU6IE9iamVjdCwgZGVmYXVsdDogbnVsbCB9LFxuICAgIGRhdGFQYXRoOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogJycgfSxcbiAgICBkYXRhOiB7IHR5cGU6IFtPYmplY3QsIEFycmF5XSwgZGVmYXVsdDogbnVsbCB9LFxuICAgIG1ldGE6IHsgdHlwZTogT2JqZWN0LCBkZWZhdWx0OiAoKSA9PiAoe30pIH0sXG4gICAgc3RvcmU6IHsgdHlwZTogT2JqZWN0LCBkZWZhdWx0OiAoKSA9PiAoe30pIH0sXG4gICAgZGlzYWJsZWQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgYnV0dG9uU2NoZW1hcygpIHtcbiAgICAgIC8vIENvbXB1dGUgYSBidXR0b25zIGxpc3Qgd2hpY2ggaGFzIHRoZSBkYXRhUGF0aCBiYWtlZCBpbnRvIGl0cyBrZXlzLlxuICAgICAgY29uc3QgeyBkYXRhUGF0aCwgYnV0dG9ucyB9ID0gdGhpc1xuICAgICAgcmV0dXJuIGJ1dHRvbnNcbiAgICAgICAgPyBPYmplY3QudmFsdWVzKGJ1dHRvbnMpLnJlZHVjZSgoc2NoZW1hcywgYnV0dG9uKSA9PiB7XG4gICAgICAgICAgICBzY2hlbWFzW2FwcGVuZERhdGFQYXRoKGRhdGFQYXRoLCBidXR0b24ubmFtZSldID0gYnV0dG9uXG4gICAgICAgICAgICByZXR1cm4gc2NoZW1hc1xuICAgICAgICAgIH0sIHt9KVxuICAgICAgICA6IG51bGxcbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGhhc1Nsb3RDb250ZW50LFxuICAgIGhhc1ZOb2RlQ29udGVudFxuICB9XG59KVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuLmRpdG8tYnV0dG9ucyB7XG4gID4gLmRpdG8tY29udGFpbmVyIHtcbiAgICBwYWRkaW5nOiAwO1xuICB9XG59XG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbi8vLSBTZXQgYEBjbGljay5zdG9wYCB0byBwcmV2ZW50IGNsaWNrIGV2ZW50cyBmcm9tIGJ1YmJsaW5nIHRvIGRpdG8tbGFiZWwuXG5EaXRvQnV0dG9ucy5kaXRvLWVkaXQtYnV0dG9ucy5kaXRvLWJ1dHRvbnMtcm91bmQoXG4gIDpidXR0b25zPVwiYnV0dG9uc1wiXG4gIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgOmRhdGE9XCJkYXRhXCJcbiAgOm1ldGE9XCJtZXRhXCJcbiAgOnN0b3JlPVwic3RvcmVcIlxuICBAY2xpY2suc3RvcFxuKVxuICAvLy0gRmlyZWZveCBkb2Vzbid0IGxpa2UgPGJ1dHRvbj4gaGVyZSwgc28gdXNlIDxhPiBpbnN0ZWFkOlxuICBhLmRpdG8tYnV0dG9uKFxuICAgIHYtaWY9XCJkcmFnZ2FibGVcIlxuICAgIDpjbGFzcz1cInsgJ2RpdG8tZGlzYWJsZWQnOiBpc0RyYWdnYWJsZURpc2FibGVkIH1cIlxuICAgIHYtYmluZD1cImdldEJ1dHRvbkF0dHJpYnV0ZXModmVyYnMuZHJhZylcIlxuICApXG4gIFJvdXRlckxpbmsuZGl0by1idXR0b24oXG4gICAgdi1pZj1cImVkaXRhYmxlXCJcbiAgICA6Y2xhc3M9XCJ7ICdkaXRvLWRpc2FibGVkJzogaXNFZGl0YWJsZURpc2FibGVkIH1cIlxuICAgIDp0bz1cImVkaXRQYXRoID8geyBwYXRoOiBlZGl0UGF0aCB9IDoge31cIlxuICAgIHYtYmluZD1cImdldEJ1dHRvbkF0dHJpYnV0ZXModmVyYnMuZWRpdClcIlxuICApXG4gIERpdG9DcmVhdGVCdXR0b24oXG4gICAgdi1pZj1cImNyZWF0YWJsZVwiXG4gICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgOm1ldGE9XCJtZXRhXCJcbiAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgOnBhdGg9XCJjcmVhdGVQYXRoXCJcbiAgICA6dmVyYj1cInZlcmJzLmNyZWF0ZVwiXG4gICAgOnRleHQ9XCJjcmVhdGVCdXR0b25UZXh0XCJcbiAgICA6ZGlzYWJsZWQ9XCJpc0NyZWF0YWJsZURpc2FibGVkXCJcbiAgKVxuICBidXR0b24uZGl0by1idXR0b24oXG4gICAgdi1pZj1cImRlbGV0YWJsZVwiXG4gICAgdHlwZT1cImJ1dHRvblwiXG4gICAgOmRpc2FibGVkPVwiaXNEZWxldGFibGVEaXNhYmxlZFwiXG4gICAgdi1iaW5kPVwiZ2V0QnV0dG9uQXR0cmlidXRlcyh2ZXJicy5kZWxldGUpXCJcbiAgICBAY2xpY2s9XCIkZW1pdCgnZGVsZXRlJylcIlxuICApXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCB7IGNhcGl0YWxpemUgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ0RpdG9FZGl0QnV0dG9ucycsIHtcbiAgZW1pdHM6IFsnZGVsZXRlJ10sXG5cbiAgcHJvcHM6IHtcbiAgICBidXR0b25zOiB7IHR5cGU6IE9iamVjdCwgZGVmYXVsdDogbnVsbCB9LFxuICAgIHNjaGVtYTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgZGF0YVBhdGg6IHsgdHlwZTogU3RyaW5nLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGRhdGE6IHsgdHlwZTogW09iamVjdCwgQXJyYXldLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgbWV0YTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgc3RvcmU6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGRpc2FibGVkOiB7IHR5cGU6IEJvb2xlYW4sIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgZHJhZ2dhYmxlOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgZWRpdGFibGU6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBjcmVhdGFibGU6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBkZWxldGFibGU6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBlZGl0UGF0aDogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBjcmVhdGVQYXRoOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogbnVsbCB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBmb3JtTGFiZWwoKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRMYWJlbCh0aGlzLnNjaGVtYS5mb3JtKVxuICAgIH0sXG5cbiAgICBpc0RyYWdnYWJsZURpc2FibGVkKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZGlzYWJsZWQgfHwgIXRoaXMuaGFzU2NoZW1hT3B0aW9uKCdkcmFnZ2FibGUnKVxuICAgIH0sXG5cbiAgICBpc0RlbGV0YWJsZURpc2FibGVkKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZGlzYWJsZWQgfHwgIXRoaXMuaGFzU2NoZW1hT3B0aW9uKCdkZWxldGFibGUnKVxuICAgIH0sXG5cbiAgICBpc0VkaXRhYmxlRGlzYWJsZWQoKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICB0aGlzLmRpc2FibGVkIHx8XG4gICAgICAgICF0aGlzLmVkaXRQYXRoIHx8XG4gICAgICAgICF0aGlzLmhhc1NjaGVtYU9wdGlvbignZWRpdGFibGUnKVxuICAgICAgKVxuICAgIH0sXG5cbiAgICBpc0NyZWF0YWJsZURpc2FibGVkKCkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgdGhpcy5kaXNhYmxlZCB8fFxuICAgICAgICAhdGhpcy5jcmVhdGVQYXRoIHx8XG4gICAgICAgICF0aGlzLmhhc1NjaGVtYU9wdGlvbignY3JlYXRhYmxlJylcbiAgICAgIClcbiAgICB9LFxuXG4gICAgY3JlYXRlQnV0dG9uVGV4dCgpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIC8vIEFsbG93IHNjaGVtYSB0byBvdmVycmlkZSBjcmVhdGUgYnV0dG9uIHRocm91Z2ggY3JlYXRhYmxlIG9iamVjdDpcbiAgICAgICAgdGhpcy5zY2hlbWEuY3JlYXRhYmxlPy5sYWJlbCB8fCAoXG4gICAgICAgICAgLy8gQXV0by1nZW5lcmF0ZSBjcmVhdGUgYnV0dG9uIGxhYmVscyBmcm9tIGZyb20gbGFiZWxzIGZvciBsaXN0XG4gICAgICAgICAgLy8gc291cmNlcyB3aXRoIG9ubHkgb25lIGZvcm06XG4gICAgICAgICAgdGhpcy5mb3JtTGFiZWwgJiZcbiAgICAgICAgICBgJHtjYXBpdGFsaXplKHRoaXMudmVyYnMuY3JlYXRlKX0gJHt0aGlzLmZvcm1MYWJlbH1gXG4gICAgICAgICkgfHxcbiAgICAgICAgbnVsbFxuICAgICAgKVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgaGFzU2NoZW1hT3B0aW9uKG5hbWUpIHtcbiAgICAgIC8vIEFsbCBvcHRpb25zIGNhbiBiZSBkaXNhYmxlZCBvbiBhIHBlci1mb3JtIGJhc2lzIGJ5IHNldHRpbmdcbiAgICAgIC8vIGBzY2hlbWFbbmFtZV1gIHRvIGBmYWxzZWAgb3IgYSBjYWxsYmFjayByZXR1cm5pbmcgYGZhbHNlYC5cbiAgICAgIHJldHVybiB0aGlzLmdldFNjaGVtYVZhbHVlKG5hbWUsIHtcbiAgICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgICAgZGVmYXVsdDogdHJ1ZVxuICAgICAgfSlcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG4uZGl0by1lZGl0LWJ1dHRvbnMge1xuICAvLyBPdmVycmlkZSBjdXJzb3IgZnJvbSBjb2xsYXBzaWJsZSBkaXRvLWxhYmVsOlxuICBjdXJzb3I6IGRlZmF1bHQ7XG4gIGZsZXg6IG5vbmU7XG59XG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbi5kaXRvLWNyZWF0ZS1idXR0b25cbiAgYnV0dG9uLmRpdG8tYnV0dG9uKFxuICAgIHYtaWY9XCJjcmVhdGFibGVGb3JtXCJcbiAgICA6dHlwZT1cImlzSW5saW5lZCA/ICdidXR0b24nIDogJ3N1Ym1pdCdcIlxuICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICB2LWJpbmQ9XCJnZXRCdXR0b25BdHRyaWJ1dGVzKHZlcmIpXCJcbiAgICBAY2xpY2s9XCJjcmVhdGVJdGVtKGNyZWF0YWJsZUZvcm0pXCJcbiAgKSB7eyB0ZXh0IH19XG4gIHRlbXBsYXRlKFxuICAgIHYtZWxzZS1pZj1cImNyZWF0YWJsZUZvcm1zXCJcbiAgKVxuICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbihcbiAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgICAgdi1iaW5kPVwiZ2V0QnV0dG9uQXR0cmlidXRlcyh2ZXJiKVwiXG4gICAgICBAbW91c2Vkb3duLnN0b3A9XCJvblB1bGxkb3duTW91c2VEb3duKClcIlxuICAgICkge3sgdGV4dCB9fVxuICAgIHVsLmRpdG8tcHVsbGRvd24oOmNsYXNzPVwieyAnZGl0by1vcGVuJzogcHVsbGRvd24ub3BlbiB9XCIpXG4gICAgICBsaShcbiAgICAgICAgdi1mb3I9XCIoZm9ybSwgdHlwZSkgaW4gY3JlYXRhYmxlRm9ybXNcIlxuICAgICAgKVxuICAgICAgICBhKFxuICAgICAgICAgIHYtc2hvdz1cInNob3VsZFNob3dTY2hlbWEoZm9ybSlcIlxuICAgICAgICAgIDpjbGFzcz1cImdldEZvcm1DbGFzcyhmb3JtLCB0eXBlKVwiXG4gICAgICAgICAgQG1vdXNlZG93bi5zdG9wPVwib25QdWxsZG93bk1vdXNlRG93bih0eXBlKVwiXG4gICAgICAgICAgQG1vdXNldXA9XCJvblB1bGxkb3duTW91c2VVcCh0eXBlKVwiXG4gICAgICAgICkge3sgZ2V0TGFiZWwoZm9ybSkgfX1cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IFB1bGxkb3duTWl4aW4gZnJvbSAnLi4vbWl4aW5zL1B1bGxkb3duTWl4aW4uanMnXG5pbXBvcnQgeyBnZXRGb3JtU2NoZW1hcywgaXNJbmxpbmVkIH0gZnJvbSAnLi4vdXRpbHMvc2NoZW1hLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ0RpdG9DcmVhdGVCdXR0b24nLCB7XG4gIG1peGluczogW1B1bGxkb3duTWl4aW5dLFxuXG4gIHByb3BzOiB7XG4gICAgc2NoZW1hOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICAvLyBUaGUgbmV4dCBmb3VyIHByb3BzIGFyZSB0aGVyZSBmb3IgYERpdG9Db250ZXh0YCBhbmQgdGhlIGBjb250ZXh0KClgXG4gICAgLy8gZ2V0dGVyIGluIGBEaXRvTWl4aW5gLlxuICAgIC8vIFRPRE86IFNob3VsZCB0aGV5IGJlIG1vdmVkIHRvIHNoYXJlZCBtaXhpbiB0aGF0IGRlZmluZXMgdGhlbSBhcyByZXF1aXJlZFxuICAgIC8vIGFuZCBhbHNvIHByb3ZpZGVzIHRoZSBgY29udGV4dCgpYCBnZXR0ZXIsIHBlcmhhcHMgYENvbnRleHRNaXhpbmA/XG4gICAgLy8gYHNjaGVtYWAgY291bGQgYmUgaW5jbHVkZWQgYXMgd2VsbCwgYW5kIGBDb250ZXh0TWl4aW5gIGNvdWxkIGJlIHVzZWQgaW5cbiAgICAvLyBgRGl0b0Zvcm1gLCBgRGl0b1ZpZXdgLCBgRGl0b1BhbmVsYCwgYERpdG9TY2hlbWFgLCBgRGl0b0VkaXRCdXR0b25zYCxcbiAgICAvLyBldGM/IEJ1dCB0aGUgcHJvYmxlbSB3aXRoIHRoZSByb290IGNvbXBvbmVudHMgaXMgdGhhdCB0aGV5IGRvbid0IGhhdmVcbiAgICAvLyB0aGVzZSBwcm9wcy4gV2UgY291bGQgYWRkIGEgYGNvbnRleHRBdHRyaWJ1dGVzKClgIGdldHRlciBmb3IgZWFzeSBwYXNzaW5nXG4gICAgLy8gb24gYXMgYHYtYmluZD1cImNvbnRleHRBdHRyaWJ1dGVzXCJgLlxuICAgIGRhdGFQYXRoOiB7IHR5cGU6IFN0cmluZywgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBkYXRhOiB7IHR5cGU6IFtPYmplY3QsIEFycmF5XSwgZGVmYXVsdDogbnVsbCB9LFxuICAgIG1ldGE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHN0b3JlOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBwYXRoOiB7IHR5cGU6IFN0cmluZywgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICB2ZXJiOiB7IHR5cGU6IFN0cmluZywgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICB0ZXh0OiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogbnVsbCB9LFxuICAgIGRpc2FibGVkOiB7IHR5cGU6IEJvb2xlYW4sIHJlcXVpcmVkOiB0cnVlIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIGZvcm1zKCkge1xuICAgICAgcmV0dXJuIGdldEZvcm1TY2hlbWFzKHRoaXMuc2NoZW1hLCB0aGlzLmNvbnRleHQpXG4gICAgfSxcblxuICAgIGNyZWF0YWJsZUZvcm1zKCkge1xuICAgICAgY29uc3QgZW50cmllcyA9IE9iamVjdC5lbnRyaWVzKHRoaXMuZm9ybXMpLmZpbHRlcihcbiAgICAgICAgKFssIGZvcm1dKSA9PiB0aGlzLmlzRm9ybUNyZWF0YWJsZShmb3JtKVxuICAgICAgKVxuICAgICAgcmV0dXJuIGVudHJpZXMubGVuZ3RoID4gMFxuICAgICAgICA/IE9iamVjdC5mcm9tRW50cmllcyhlbnRyaWVzKVxuICAgICAgICA6IG51bGxcbiAgICB9LFxuXG4gICAgY3JlYXRhYmxlRm9ybSgpIHtcbiAgICAgIGNvbnN0IGZvcm1zID0gdGhpcy5jcmVhdGFibGVGb3Jtc1xuICAgICAgcmV0dXJuIGZvcm1zICYmIE9iamVjdC5rZXlzKGZvcm1zKS5sZW5ndGggPT09IDEgJiYgZm9ybXMuZGVmYXVsdCB8fCBudWxsXG4gICAgfSxcblxuICAgIGlzSW5saW5lZCgpIHtcbiAgICAgIHJldHVybiBpc0lubGluZWQodGhpcy5zY2hlbWEpXG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBpc0Zvcm1DcmVhdGFibGUoZm9ybSkge1xuICAgICAgLy8gRm9ybXMgY2FuIGJlIGV4Y2x1ZGVkIGZyb20gdGhlIGxpc3QgYnkgcHJvdmlkaW5nIGBpZjogZmFsc2VgIG9yXG4gICAgICAvLyBgY3JlYXRhYmxlOiBmYWxzZWAuXG4gICAgICByZXR1cm4gKFxuICAgICAgICB0aGlzLnNob3VsZFJlbmRlclNjaGVtYShmb3JtKSAmJlxuICAgICAgICB0aGlzLmdldFNjaGVtYVZhbHVlKCdjcmVhdGFibGUnLCB7XG4gICAgICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgICAgICBkZWZhdWx0OiB0cnVlLFxuICAgICAgICAgIHNjaGVtYTogZm9ybVxuICAgICAgICB9KVxuICAgICAgKVxuICAgIH0sXG5cbiAgICBjcmVhdGVJdGVtKGZvcm0sIHR5cGUgPSBudWxsKSB7XG4gICAgICBpZiAoIXRoaXMuc2hvdWxkRGlzYWJsZVNjaGVtYShmb3JtKSkge1xuICAgICAgICBpZiAodGhpcy5pc0lubGluZWQpIHtcbiAgICAgICAgICB0aGlzLnNvdXJjZUNvbXBvbmVudC5jcmVhdGVJdGVtKGZvcm0sIHR5cGUpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy4kcm91dGVyLnB1c2goe1xuICAgICAgICAgICAgcGF0aDogYCR7dGhpcy5wYXRofS9jcmVhdGVgLFxuICAgICAgICAgICAgcXVlcnk6IHsgdHlwZSB9XG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdOb3QgYWxsb3dlZCB0byBjcmVhdGUgaXRlbSBmb3IgZ2l2ZW4gZm9ybScpXG4gICAgICB9XG4gICAgfSxcblxuICAgIGdldEZvcm1DbGFzcyhmb3JtLCB0eXBlKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBbYGRpdG8tdHlwZS0ke3R5cGV9YF06IHRydWUsXG4gICAgICAgICdkaXRvLWRpc2FibGVkJzogdGhpcy5zaG91bGREaXNhYmxlU2NoZW1hKGZvcm0pXG4gICAgICB9XG4gICAgfSxcblxuICAgIG9uUHVsbGRvd25TZWxlY3QodHlwZSkge1xuICAgICAgdGhpcy5jcmVhdGVJdGVtKHRoaXMuZm9ybXNbdHlwZV0sIHR5cGUpXG4gICAgICB0aGlzLnNldFB1bGxkb3duT3BlbihmYWxzZSlcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG4uZGl0by1jcmVhdGUtYnV0dG9uIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuXG4gIC5kaXRvLXB1bGxkb3duIHtcbiAgICByaWdodDogMDtcblxuICAgIC5kaXRvLWJ1dHRvbnMtc3RpY2t5ICYge1xuICAgICAgdG9wOiB1bnNldDtcbiAgICAgIHJpZ2h0OiB1bnNldDtcbiAgICAgIGJvdHRvbTogMDtcbiAgICAgIGxlZnQ6IDA7XG4gICAgfVxuICB9XG59XG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbi5kaXRvLWNsaXBib2FyZC5kaXRvLWJ1dHRvbnMuZGl0by1idXR0b25zLXJvdW5kKFxuICB2LWlmPVwiY2xpcGJvYXJkXCJcbilcbiAgYnV0dG9uLmRpdG8tYnV0dG9uLmRpdG8tYnV0dG9uLWNvcHkoXG4gICAgcmVmPVwiY29weURhdGFcIlxuICAgIHR5cGU9XCJidXR0b25cIlxuICAgIHRpdGxlPVwiQ29weSBEYXRhXCJcbiAgICA6ZGlzYWJsZWQ9XCIhY29weUVuYWJsZWRcIlxuICAgIEBjbGljaz1cIm9uQ29weVwiXG4gIClcbiAgYnV0dG9uLmRpdG8tYnV0dG9uLmRpdG8tYnV0dG9uLXBhc3RlKFxuICAgIHR5cGU9XCJidXR0b25cIlxuICAgIHRpdGxlPVwiUGFzdGUgRGF0YVwiXG4gICAgOmRpc2FibGVkPVwiIXBhc3RlRW5hYmxlZFwiXG4gICAgQGNsaWNrPVwib25QYXN0ZVwiXG4gIClcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgeyBpc09iamVjdCwgY2xvbmUsIGRlaW5kZW50IH0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgRG9tTWl4aW4gZnJvbSAnLi4vbWl4aW5zL0RvbU1peGluLmpzJ1xuaW1wb3J0IERpdG9Db250ZXh0IGZyb20gJy4uL0RpdG9Db250ZXh0LmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ0RpdG9DbGlwYm9hcmQnLCB7XG4gIG1peGluczogW0RvbU1peGluXSxcblxuICBwcm9wczoge1xuICAgIGNsaXBib2FyZDogeyB0eXBlOiBbQm9vbGVhbiwgT2JqZWN0XSwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBzY2hlbWE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgY29weUVuYWJsZWQ6IGZhbHNlLFxuICAgICAgcGFzdGVFbmFibGVkOiBmYWxzZVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIGNsaXBib2FyZE9wdGlvbnMoKSB7XG4gICAgICByZXR1cm4gaXNPYmplY3QodGhpcy5jbGlwYm9hcmQpID8gdGhpcy5jbGlwYm9hcmQgOiB7fVxuICAgIH0sXG5cbiAgICBjb3B5RGF0YSgpIHtcbiAgICAgIGNvbnN0IHsgY29weSB9ID0gdGhpcy5jbGlwYm9hcmRPcHRpb25zXG4gICAgICByZXR1cm4gY29weVxuICAgICAgICA/IGNsaXBib2FyZERhdGEgPT5cbiAgICAgICAgICAgIGNvcHkuY2FsbCh0aGlzLCBuZXcgRGl0b0NvbnRleHQodGhpcywgeyBjbGlwYm9hcmREYXRhIH0pKVxuICAgICAgICA6IGNsaXBib2FyZERhdGEgPT4gY2xvbmUoY2xpcGJvYXJkRGF0YSlcbiAgICB9LFxuXG4gICAgcGFzdGVEYXRhKCkge1xuICAgICAgY29uc3QgeyBwYXN0ZSB9ID0gdGhpcy5jbGlwYm9hcmRPcHRpb25zXG4gICAgICByZXR1cm4gcGFzdGVcbiAgICAgICAgPyBjbGlwYm9hcmREYXRhID0+XG4gICAgICAgICAgICBwYXN0ZS5jYWxsKHRoaXMsIG5ldyBEaXRvQ29udGV4dCh0aGlzLCB7IGNsaXBib2FyZERhdGEgfSkpXG4gICAgICAgIDogY2xpcGJvYXJkRGF0YSA9PiBjbGlwYm9hcmREYXRhXG4gICAgfVxuICB9LFxuXG4gIHdhdGNoOiB7XG4gICAgLy8gQ2hlY2sgcmlnaHQgYXdheSBhbHNvIGluIGNhc2UgdGhlcmUncyBhbHJlYWR5IGRhdGEgKGUuZy4gY3JlYXRlIGZvcm0pOlxuICAgICdwYXJlbnRDb21wb25lbnQuaGFzRGF0YSc6IHtcbiAgICAgIGltbWVkaWF0ZTogdHJ1ZSxcbiAgICAgIGhhbmRsZXI6ICd1cGRhdGVDb3B5J1xuICAgIH0sXG5cbiAgICAnYXBwU3RhdGUuY2xpcGJvYXJkRGF0YSc6IHtcbiAgICAgIGltbWVkaWF0ZTogdHJ1ZSxcbiAgICAgIGhhbmRsZXI6ICd1cGRhdGVQYXN0ZSdcbiAgICB9XG4gIH0sXG5cbiAgbW91bnRlZCgpIHtcbiAgICAvLyBDaGVjayBjbGlwYm9hcmQgY29udGVudCB3aGVuZXZlciBzb21ldGhpbmcgZ2V0cyBjb3BpZWQgb3IgdGhlIHdpbmRvdyBnZXRzXG4gICAgLy8gKHJlKWFjdGl2YXRlZCwgYXMgdGhvc2UgYXJlIHRoZSBtb21lbnRzIHdoZW4gdGhlIGNsaXBib2FyZCBjYW4gY2hhbmdlOlxuICAgIHRoaXMuZG9tT24oZG9jdW1lbnQsIHsgY29weTogdGhpcy51cGRhdGVQYXN0ZSB9KVxuICAgIHRoaXMuZG9tT24od2luZG93LCB7IGZvY3VzOiB0aGlzLnVwZGF0ZVBhc3RlIH0pXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGNoZWNrQ2xpcGJvYXJkRGF0YShjbGlwYm9hcmREYXRhKSB7XG4gICAgICBjb25zdCB7ICRzY2hlbWEsIC4uLmRhdGEgfSA9IGNsaXBib2FyZERhdGEgfHwge31cbiAgICAgIHJldHVybiAkc2NoZW1hID09PSB0aGlzLnNjaGVtYS5uYW1lID8gZGF0YSA6IG51bGxcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0Q2xpcGJvYXJkRGF0YShyZXBvcnQpIHtcbiAgICAgIC8vIFVzZSB0aGUgaW50ZXJuYWwgY2xpcGJvYXJkIGFzIGZhbGxiYWNrLlxuICAgICAgbGV0IHsgY2xpcGJvYXJkRGF0YSB9ID0gdGhpcy5hcHBTdGF0ZVxuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QganNvbiA9IGF3YWl0IG5hdmlnYXRvci5jbGlwYm9hcmQ/LnJlYWRUZXh0Py4oKVxuICAgICAgICBpZiAoanNvbikge1xuICAgICAgICAgIGNsaXBib2FyZERhdGEgPSBKU09OLnBhcnNlKGpzb24pXG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBpZiAocmVwb3J0KSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihlcnIsIGVyci5uYW1lLCBlcnIubWVzc2FnZSlcbiAgICAgICAgICBpZiAoZXJyLm5hbWUgPT09ICdTeW50YXhFcnJvcicpIHtcbiAgICAgICAgICAgIGFsZXJ0KGRlaW5kZW50YFxuICAgICAgICAgICAgICBUaGUgZGF0YSBpbiB0aGUgY2xpcGJvYXJkIGFwcGVhcnMgdG8gYmUgbWFsZm9ybWVkOlxuICAgICAgICAgICAgICAke2Vyci5tZXNzYWdlfVxuICAgICAgICAgICAgYClcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLmNoZWNrQ2xpcGJvYXJkRGF0YShjbGlwYm9hcmREYXRhKVxuICAgIH0sXG5cbiAgICB1cGRhdGVDb3B5KCkge1xuICAgICAgdGhpcy5jb3B5RW5hYmxlZCA9IHRoaXMucGFyZW50Q29tcG9uZW50Lmhhc0RhdGFcbiAgICB9LFxuXG4gICAgYXN5bmMgdXBkYXRlUGFzdGUoKSB7XG4gICAgICB0aGlzLnBhc3RlRW5hYmxlZCA9ICEhdGhpcy5jaGVja0NsaXBib2FyZERhdGEodGhpcy5hcHBTdGF0ZS5jbGlwYm9hcmREYXRhKVxuICAgICAgaWYgKCF0aGlzLnBhc3RlRW5hYmxlZCAmJiB0aGlzLmFwcFN0YXRlLmFnZW50LmNocm9tZSkge1xuICAgICAgICAvLyBTZWUgaWYgdGhlIGNsaXBib2FyZCBjb250ZW50IGlzIHZhbGlkIEpTT04gZGF0YSB0aGF0IGlzIGNvbXBhdGlibGVcbiAgICAgICAgLy8gd2l0aCB0aGUgY3VycmVudCB0YXJnZXQgc2NoZW1hLCBhbmQgb25seSB0aGVuIGFjdGl2YXRlIHRoZSBwYXN0aW5nOlxuICAgICAgICBjb25zdCBkYXRhID0gYXdhaXQgdGhpcy5nZXRDbGlwYm9hcmREYXRhKGZhbHNlKSAvLyBEb24ndCByZXBvcnRcbiAgICAgICAgdGhpcy5wYXN0ZUVuYWJsZWQgPSAhIWRhdGFcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYXN5bmMgb25Db3B5KCkge1xuICAgICAgbGV0IGRhdGEgPSB0aGlzLnBhcmVudENvbXBvbmVudC5jbGlwYm9hcmREYXRhXG4gICAgICB0cnkge1xuICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgIGRhdGEgPSB7XG4gICAgICAgICAgICAkc2NoZW1hOiB0aGlzLnNjaGVtYS5uYW1lLFxuICAgICAgICAgICAgLi4udGhpcy5jb3B5RGF0YShkYXRhKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBLZWVwIGFuIGludGVybmFsIGNsaXBib2FyZCBhcyBmYWxsYmFjay5cbiAgICAgICAgdGhpcy5hcHBTdGF0ZS5jbGlwYm9hcmREYXRhID0gZGF0YVxuICAgICAgICB0aGlzLnBhc3RlRW5hYmxlZCA9IHRydWVcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBqc29uID0gSlNPTi5zdHJpbmdpZnkoZGF0YSwgbnVsbCwgMilcbiAgICAgICAgICBhd2FpdCBuYXZpZ2F0b3IuY2xpcGJvYXJkPy53cml0ZVRleHQ/Lihqc29uKVxuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGVyciwgZXJyLm5hbWUsIGVyci5tZXNzYWdlKVxuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKVxuICAgICAgICBhbGVydChlcnJvci5tZXNzYWdlKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBhc3luYyBvblBhc3RlKCkge1xuICAgICAgbGV0IGRhdGEgPSBhd2FpdCB0aGlzLmdldENsaXBib2FyZERhdGEodHJ1ZSkgLy8gUmVwb3J0XG4gICAgICB0cnkge1xuICAgICAgICBkYXRhID0gZGF0YSAmJiB0aGlzLnBhc3RlRGF0YShkYXRhKVxuICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgIHRoaXMucGFyZW50Q29tcG9uZW50LmNsaXBib2FyZERhdGEgPSBkYXRhXG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpXG4gICAgICAgIGFsZXJ0KGVycm9yLm1lc3NhZ2UpXG4gICAgICB9XG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLmRpdG8tY2xpcGJvYXJkIHtcbiAgZGlzcGxheTogZmxleDtcblxuICAuZGl0by1zY2hlbWEgJiB7XG4gICAgLy8gUHVzaCBjbGlwYm9hcmQgdG8gdGhlIHJpZ2h0IGluIHRoZSBmbGV4IGxheW91dCwgc2VlOlxuICAgIC8vIGh0dHBzOi8vY29kZXBlbi5pby90aG9sZXgvcGVuL2h2ZUJ4L1xuICAgIG1hcmdpbi1sZWZ0OiBhdXRvO1xuICB9XG5cbiAgLmRpdG8taGVhZGVyICYge1xuICAgIG1hcmdpbi1sZWZ0OiAwO1xuXG4gICAgLmRpdG8tYnV0dG9uIHtcbiAgICAgIG1hcmdpbjogMCAwICR0YWItbWFyZ2luICR0YWItbWFyZ2luO1xuICAgIH1cbiAgfVxufVxuPC9zdHlsZT5cbiIsIi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCB7XG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlzTG9hZGluZzogZmFsc2VcbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIHNldExvYWRpbmcoaXNMb2FkaW5nLCB7IHVwZGF0ZVJvb3QgPSBmYWxzZSwgdXBkYXRlVmlldyA9IGZhbHNlIH0gPSB7fSkge1xuICAgICAgaWYgKCF0aGlzLmlzTG9hZGluZyBeICFpc0xvYWRpbmcpIHtcbiAgICAgICAgLy8gQm9vbGVhbiB4b3JcbiAgICAgICAgdGhpcy5pc0xvYWRpbmcgPSAhIWlzTG9hZGluZ1xuICAgICAgICBpZiAodXBkYXRlUm9vdCkge1xuICAgICAgICAgIHRoaXMucm9vdENvbXBvbmVudC5yZWdpc3RlckxvYWRpbmcoaXNMb2FkaW5nKVxuICAgICAgICB9XG4gICAgICAgIGlmICh1cGRhdGVWaWV3KSB7XG4gICAgICAgICAgdGhpcy52aWV3Q29tcG9uZW50LnNldExvYWRpbmcodGhpcy5pc0xvYWRpbmcpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiIsImltcG9ydCBJdGVtTWl4aW4gZnJvbSAnLi9JdGVtTWl4aW4uanMnXG5pbXBvcnQgTG9hZGluZ01peGluIGZyb20gJy4vTG9hZGluZ01peGluLmpzJ1xuaW1wb3J0IHsgc2V0RGVmYXVsdFZhbHVlcyB9IGZyb20gJy4uL3V0aWxzL3NjaGVtYS5qcydcbmltcG9ydCB7IGlzT2JqZWN0LCBpc1N0cmluZywgbGFiZWxpemUgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0IHsgZ2V0UmVzb3VyY2UgfSBmcm9tICcuLi91dGlscy9yZXNvdXJjZS5qcydcbmltcG9ydCBEaXRvQ29udGV4dCBmcm9tICcuLi9EaXRvQ29udGV4dC5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IHtcbiAgbWl4aW5zOiBbSXRlbU1peGluLCBMb2FkaW5nTWl4aW5dLFxuXG4gIHByb3ZpZGUoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICRyZXNvdXJjZUNvbXBvbmVudDogKCkgPT4gdGhpcyxcbiAgICAgIC8vIFBhc3MgbG9jYWwgdmVyYnMgb3ZlcnJpZGVzIG9uIHRvIGNoaWxkcmVuLCBzZWUgdmVyYnMoKSBjb21wdXRlZCBwcm9wLlxuICAgICAgJHZlcmJzOiAoKSA9PiB0aGlzLnZlcmJzLFxuICAgICAgJGlzUG9wdWxhdGVkOiAoKSA9PiB0aGlzLmhhc0RhdGFcbiAgICB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbG9hZGVkRGF0YTogbnVsbCxcbiAgICAgIGFib3J0Q29udHJvbGxlcjogbnVsbFxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIHJlc291cmNlQ29tcG9uZW50KCkge1xuICAgICAgcmV0dXJuIHRoaXNcbiAgICB9LFxuXG4gICAgcmVzb3VyY2UoKSB7XG4gICAgICAvLyBSZXR1cm5zIHRoZSByZXNvdXJjZSBvYmplY3QgcmVwcmVzZW50aW5nIHRoZSByZXNvdXJjZSBmb3IgdGhlXG4gICAgICAvLyBhc3NvY2lhdGVkIHNvdXJjZSBzY2hlbWEuXG4gICAgICByZXR1cm4gdGhpcy5nZXRSZXNvdXJjZSgpXG4gICAgfSxcblxuICAgIHByb3ZpZGVzRGF0YSgpIHtcbiAgICAgIC8vIFRoaXMgY29tcG9uZW50IGlzIGEgZGF0YS1zb3VyY2UgaWYgaXQgaGFzIGFuIGFzc29jaWF0ZWQgQVBJIHJlc291cmNlOlxuICAgICAgcmV0dXJuICEhdGhpcy5yZXNvdXJjZVxuICAgIH0sXG5cbiAgICBsaW5rc1RvVmlldygpIHtcbiAgICAgIC8vIFJldHVybnMgYGZhbHNlYGhlcmUsIGJ1dCBpcyBvdmVycmlkZGVuIHRvIHJldHVybiBgdHJ1ZWAgaW5cbiAgICAgIC8vIGBTb3VyY2VNaXhpbmAgZm9yIGNvbXBvbmVudCB0aGF0IGRvIG5vdCBwcm92aWRlIHRoZWlyIG93biBkYXRhLCBidXRcbiAgICAgIC8vIGVkaXQgdGhlaXIgaXRlbXMgdGhyb3VnaCBhIGxpbmtlZCB2aWV3LiAgSW4gdGhpcyBjYXNlLCByZWFsIGlkcyBuZWVkIHRvXG4gICAgICAvLyBiZSB1c2VkLlxuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfSxcblxuICAgIGlzVHJhbnNpZW50KCkge1xuICAgICAgLy8gQ2hlY2sgdGhlIGZvcm0gdGhhdCB0aGlzIGNvbXBvbmVudCBiZWxvbmdzIHRvIGFzIHdlbGwsIHNpbmNlIGl0IG1heSBiZVxuICAgICAgLy8gaW4gY3JlYXRpb24gbW9kZSwgd2hpY2ggbWFrZXMgaXQgdHJhbnNpZW50LlxuICAgICAgLy8gTk9URTogVGhpcyBkb2VzIG5vdCBsb29wIGVuZGxlc3NseSBiZWNhdXNlIERpdG9Gb3JtIHJlZGVmaW5lc1xuICAgICAgLy8gYGlzVHJhbnNpZW50KClgIHRvIG9ubHkgcmV0dXJuIGAhdGhpcy5wcm92aWRlc0RhdGFgLlxuICAgICAgY29uc3QgZm9ybSA9IHRoaXMuZm9ybUNvbXBvbmVudFxuICAgICAgcmV0dXJuIChcbiAgICAgICAgIXRoaXMucHJvdmlkZXNEYXRhICYmXG4gICAgICAgICF0aGlzLmxpbmtzVG9WaWV3IHx8XG4gICAgICAgIGZvcm0gJiYgKFxuICAgICAgICAgIGZvcm0uaXNUcmFuc2llbnQgfHxcbiAgICAgICAgICBmb3JtLmlzQ3JlYXRpbmdcbiAgICAgICAgKVxuICAgICAgKVxuICAgIH0sXG5cbiAgICB0cmFuc2llbnROb3RlKCkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgdGhpcy5pc1RyYW5zaWVudCAmJiAoXG4gICAgICAgICAgJzxiPk5vdGU8L2I+OiB0aGUgcGFyZW50IHN0aWxsIG5lZWRzIHRvIGJlIHNhdmVkICcgK1xuICAgICAgICAgICdpbiBvcmRlciB0byBwZXJzaXN0IHRoaXMgY2hhbmdlLidcbiAgICAgICAgKVxuICAgICAgKVxuICAgIH0sXG5cbiAgICBzaG91bGRMb2FkKCkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgIXRoaXMuaXNUcmFuc2llbnQgJiZcbiAgICAgICAgIXRoaXMuaXNMb2FkaW5nXG4gICAgICApXG4gICAgfSxcblxuICAgIC8vIEBvdmVycmlkYWJsZVxuICAgIGhhc0RhdGEoKSB7XG4gICAgICAvLyBCYXNlIGRlZmluaXRpb24sIHdpbGwgYmUgb3ZlcnJpZGRlbiBieSBEaXRvRm9ybSBhbmQgU291cmNlTWl4aW5cbiAgICAgIHJldHVybiAhIXRoaXMubG9hZGVkRGF0YVxuICAgIH0sXG5cbiAgICB2ZXJicygpIHtcbiAgICAgIC8vIFRoZSBhY3R1YWwgY29kZSBpcyB0aGUgYGdldFZlcmJzKClgIG1ldGhvZCwgZm9yIGVhc2llciBvdmVycmlkaW5nIG9mXG4gICAgICAvLyB0aGlzIGNvbXB1dGVkIHByb3BlcnR5IGluIGNvbXBvbmVudHMgdGhhdCB1c2UgdGhlIFJlc291cmNlTWl4aW4uXG4gICAgICByZXR1cm4gdGhpcy5nZXRWZXJicygpXG4gICAgfSxcblxuICAgIHBhZ2luYXRpb25SYW5nZSgpIHtcbiAgICAgIC8vIE9ubHkgYXBwbHkgcGFnaW5hdGlvbiB0byBsaXN0cy5cbiAgICAgIGNvbnN0IHsgcGFnaW5hdGU6IGFtb3VudCB9ID0gdGhpcy5zb3VyY2VTY2hlbWFcbiAgICAgIGlmICh0aGlzLmlzTGlzdFNvdXJjZSAmJiBhbW91bnQpIHtcbiAgICAgICAgY29uc3QgeyBwYWdlID0gMCB9ID0gdGhpcy5xdWVyeSB8fCB7fVxuICAgICAgICBjb25zdCBzdGFydCA9IHBhZ2UgKiBhbW91bnRcbiAgICAgICAgcmV0dXJuIFtzdGFydCwgc3RhcnQgKyBhbW91bnQgLSAxXVxuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGxcbiAgICB9LFxuXG4gICAgcXVlcnlQYXJhbXMoKSB7XG4gICAgICBjb25zdCByYW5nZSA9IHRoaXMucGFnaW5hdGlvblJhbmdlXG4gICAgICBjb25zdCB7IHBhZ2UsIC4uLnF1ZXJ5IH0gPSB0aGlzLnF1ZXJ5IHx8IHt9XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5xdWVyeSwgLy8gUXVlcnkgbWF5IG92ZXJyaWRlIHNjb3BlLlxuICAgICAgICAuLi4ocmFuZ2UgJiYge1xuICAgICAgICAgIC8vIFBhc3MgcGFnaW5hdGlvbiBhcyByYW5nZSwgc28gdGhhdCB3ZSBhdXRvbWF0aWNhbGx5IGdldCBPYmplY3Rpb24nc1xuICAgICAgICAgIC8vIHJlc3VsdHMgY291bnRpbmc6XG4gICAgICAgICAgcmFuZ2U6IHJhbmdlLmpvaW4oJywnKVxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBjcmVhdGVkKCkge1xuICAgIC8vIFdoZW4gY3JlYXRpbmcgbmVzdGVkIGRhdGEsIHdlIHN0aWxsIG5lZWQgdG8gY2FsbCBzZXR1cERhdGEoKVxuICAgIGlmICh0aGlzLnByb3ZpZGVzRGF0YSB8fCB0aGlzLmlzQ3JlYXRpbmcpIHtcbiAgICAgIHRoaXMuc2V0dXBEYXRhKClcbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGdldFJlc291cmNlKCkge1xuICAgICAgLy8gVGhpcyBpcyBkZWZpbmVkIGFzIGEgbWV0aG9kIHNvIHRoZSBjb21wdXRlZCBgcmVzb3VyY2VgIGdldHRlciBjYW5cbiAgICAgIC8vIGJlIG92ZXJyaWRkZW4gYW5kIGBzdXBlcmAgZnVuY3Rpb25hbGl0eSBjYW4gc3RpbGwgYmUgYWNjZXNzZWQuXG4gICAgICByZXR1cm4gZ2V0UmVzb3VyY2UodGhpcy5zb3VyY2VTY2hlbWE/LnJlc291cmNlLCB7XG4gICAgICAgIHR5cGU6ICdjb2xsZWN0aW9uJyxcbiAgICAgICAgcGFyZW50OiB0aGlzLnBhcmVudEZvcm1Db21wb25lbnQ/LnJlc291cmNlID8/IG51bGxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGdldFZlcmJzKCkge1xuICAgICAgY29uc3QgdmVyYnMgPSB0aGlzLiR2ZXJicygpXG4gICAgICByZXR1cm4gdGhpcy5pc1RyYW5zaWVudFxuICAgICAgICA/IHtcbiAgICAgICAgICAgIC4uLnZlcmJzLFxuICAgICAgICAgICAgLy8gT3ZlcnJpZGUgZGVmYXVsdCB2ZXJicyB3aXRoIHRoZWlyIHRyYW5zaWVudCB2ZXJzaW9uczpcbiAgICAgICAgICAgIGNyZWF0ZTogJ2FkZCcsXG4gICAgICAgICAgICBjcmVhdGVkOiAnYWRkZWQnLFxuICAgICAgICAgICAgc2F2ZTogJ2FwcGx5JyxcbiAgICAgICAgICAgIHNhdmVkOiAnYXBwbGllZCcsXG4gICAgICAgICAgICBkZWxldGU6ICdyZW1vdmUnLFxuICAgICAgICAgICAgZGVsZXRlZDogJ3JlbW92ZWQnXG4gICAgICAgICAgfVxuICAgICAgICA6IHZlcmJzXG4gICAgfSxcblxuICAgIC8vIEBvdmVycmlkYWJsZVxuICAgIGNsZWFyRGF0YSgpIHtcbiAgICAgIHRoaXMubG9hZGVkRGF0YSA9IG51bGxcbiAgICB9LFxuXG4gICAgLy8gQG92ZXJyaWRhYmxlXG4gICAgc2V0RGF0YShkYXRhKSB7XG4gICAgICB0aGlzLmxvYWRlZERhdGEgPSBkYXRhXG4gICAgfSxcblxuICAgIHNldHVwRGF0YSgpIHtcbiAgICAgIC8vIEFjdHVhbCBjb2RlIGlzIGluIHNlcGFyYXRlIGZ1bmN0aW9uIHNvIGl0J3MgZWFzZXIgdG8gb3ZlcnJpZGVcbiAgICAgIC8vIGBzZXR1cERhdGEoKWAgYW5kIGFuZCBjYWxsIGBlbnN1cmVEYXRhKClgIGZyb20gdGhlIG92ZXJyaWRlcyxcbiAgICAgIC8vIHNlZSBEaXRvRm9ybSBhbmQgU291cmNlTWl4aW4uXG4gICAgICB0aGlzLmVuc3VyZURhdGEoKVxuICAgIH0sXG5cbiAgICBlbnN1cmVEYXRhKCkge1xuICAgICAgaWYgKHRoaXMuc2hvdWxkTG9hZCkge1xuICAgICAgICBpZiAodGhpcy5oYXNEYXRhKSB7XG4gICAgICAgICAgdGhpcy5yZWxvYWREYXRhKClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmxvYWREYXRhKHRydWUpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgcmVsb2FkRGF0YSgpIHtcbiAgICAgIHRoaXMubG9hZERhdGEoZmFsc2UpXG4gICAgfSxcblxuICAgIGxvYWREYXRhKGNsZWFyKSB7XG4gICAgICBpZiAoIXRoaXMuaXNUcmFuc2llbnQpIHtcbiAgICAgICAgaWYgKGNsZWFyKSB7XG4gICAgICAgICAgdGhpcy5jbGVhckRhdGEoKVxuICAgICAgICB9XG4gICAgICAgIHRoaXMucmVxdWVzdERhdGEoKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBjcmVhdGVEYXRhKHNjaGVtYSwgdHlwZSkge1xuICAgICAgcmV0dXJuIHNldERlZmF1bHRWYWx1ZXMoc2NoZW1hLCB0eXBlID8geyB0eXBlIH0gOiB7fSwgdGhpcylcbiAgICB9LFxuXG4gICAgcmVxdWVzdERhdGEoKSB7XG4gICAgICBjb25zdCBxdWVyeSA9IHRoaXMucXVlcnlQYXJhbXNcbiAgICAgIHRoaXMuaGFuZGxlUmVxdWVzdCh7IG1ldGhvZDogJ2dldCcsIHF1ZXJ5IH0sIChlcnIsIHJlc3BvbnNlKSA9PiB7XG4gICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICBpZiAocmVzcG9uc2UpIHtcbiAgICAgICAgICAgIGNvbnN0IHsgZGF0YSB9ID0gcmVzcG9uc2VcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgZGF0YT8udHlwZSA9PT0gJ0ZpbHRlclZhbGlkYXRpb24nICYmXG4gICAgICAgICAgICAgIHRoaXMub25GaWx0ZXJFcnJvcnM/LihkYXRhLmVycm9ycylcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmlzVW5hdXRob3JpemVkRXJyb3IocmVzcG9uc2UpKSB7XG4gICAgICAgICAgICAgIC8vIFRPRE86IENhbiB3ZSByZWFsbHkgc3dhbGxvdyB0aGVzZSBlcnJvcnM/XG4gICAgICAgICAgICAgIC8vIElzIGNhbGxpbmcgYGVuc3VyZVVzZXIoKWAgaW4gYG9uQmVmb3JlUmVxdWVzdCgpYCBlbm91Z2g/XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuc2V0RGF0YShyZXNwb25zZS5kYXRhKVxuICAgICAgICAgIHRoaXMuZW1pdFNjaGVtYUV2ZW50KCdsb2FkJylcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgaXNWYWxpZGF0aW9uRXJyb3IocmVzcG9uc2UpIHtcbiAgICAgIHJldHVybiByZXNwb25zZT8uc3RhdHVzID09PSA0MDBcbiAgICB9LFxuXG4gICAgaXNVbmF1dGhvcml6ZWRFcnJvcihyZXNwb25zZSkge1xuICAgICAgcmV0dXJuIHJlc3BvbnNlPy5zdGF0dXMgPT09IDQwMVxuICAgIH0sXG5cbiAgICBhc3luYyBoYW5kbGVSZXF1ZXN0KFxuICAgICAge1xuICAgICAgICBtZXRob2QsXG4gICAgICAgIHJlc291cmNlID0gdGhpcy5yZXNvdXJjZSxcbiAgICAgICAgcXVlcnksXG4gICAgICAgIGRhdGFcbiAgICAgIH0sXG4gICAgICBjYWxsYmFja1xuICAgICkge1xuICAgICAgY29uc3QgbG9hZGluZ09wdGlvbnMgPSB7XG4gICAgICAgIHVwZGF0ZVJvb3Q6IHRydWUsIC8vIERpc3BsYXkgc3Bpbm5lciBpbiBoZWFkZXIgd2hlbiBsb2FkaW5nIGluIHJlc291cmNlc1xuICAgICAgICB1cGRhdGVWaWV3OiB0aGlzLmlzSW5WaWV3IC8vIE5vdGlmeSB2aWV3IG9mIGxvYWRpbmcgZm9yIHZpZXcgY29tcG9uZW50c1xuICAgICAgfVxuICAgICAgdGhpcy5hYm9ydENvbnRyb2xsZXI/LmFib3J0KClcbiAgICAgIGNvbnN0IGNvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKClcbiAgICAgIHRoaXMuYWJvcnRDb250cm9sbGVyID0gY29udHJvbGxlclxuICAgICAgY29uc3QgeyBzaWduYWwgfSA9IGNvbnRyb2xsZXJcbiAgICAgIGNvbnN0IHJlcXVlc3QgPSB7IG1ldGhvZCwgcmVzb3VyY2UsIHF1ZXJ5LCBkYXRhLCBzaWduYWwgfVxuICAgICAgdGhpcy5zZXRMb2FkaW5nKHRydWUsIGxvYWRpbmdPcHRpb25zKVxuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnNlbmRSZXF1ZXN0KHJlcXVlc3QpXG4gICAgICAgIC8vIFBhc3MgYm90aCByZXF1ZXN0IGFuZCByZXNwb25zZSB0byB0aGUgY2FsbGJhY2ssIHNvIHRoZXkgY2FuIGJlXG4gICAgICAgIC8vIGV4cG9zZWQgdG8gZnVydGhlciBjYWxsYmFja3MgdGhyb3VnaCBEaXRvQ29udGV4dC5cbiAgICAgICAgY2FsbGJhY2sobnVsbCwgcmVzcG9uc2UpXG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBpZiAoZXJyb3IubmFtZSAhPT0gJ0Fib3J0RXJyb3InKSB7XG4gICAgICAgICAgLy8gSWYgY2FsbGJhY2sgcmV0dXJucyB0cnVlLCBlcnJvcnMgd2VyZSBhbHJlYWR5IGhhbmRsZWQuXG4gICAgICAgICAgY29uc3QgeyByZXNwb25zZSB9ID0gZXJyb3JcbiAgICAgICAgICBpZiAoIWNhbGxiYWNrKGVycm9yLCByZXNwb25zZSkpIHtcbiAgICAgICAgICAgIGNvbnN0IGRhdGEgPSByZXNwb25zZT8uZGF0YVxuICAgICAgICAgICAgY29uc3QgdGl0bGUgPSBpc1N0cmluZyhkYXRhPy50eXBlKVxuICAgICAgICAgICAgICA/IGxhYmVsaXplKGRhdGEudHlwZSlcbiAgICAgICAgICAgICAgOiAnRXJyb3InXG4gICAgICAgICAgICBjb25zdCB0ZXh0ID0gZGF0YT8ubWVzc2FnZSA/PyBlcnJvclxuICAgICAgICAgICAgdGhpcy5ub3RpZnkoeyB0eXBlOiAnZXJyb3InLCB0aXRsZSwgdGV4dCB9KVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHRoaXMuYWJvcnRDb250cm9sbGVyID09PSBjb250cm9sbGVyKSB7XG4gICAgICAgIC8vIE9ubHkgY2xlYXIgdGhlIGxvYWRpbmcgc3RhdGUgaWYgdGhpcyBpcyBzdGlsbCB0aGUgY3VycmVudCByZXF1ZXN0LlxuICAgICAgICB0aGlzLmFib3J0Q29udHJvbGxlciA9IG51bGxcbiAgICAgICAgdGhpcy5zZXRMb2FkaW5nKGZhbHNlLCBsb2FkaW5nT3B0aW9ucylcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZ2V0UGF5bG9hZERhdGEoYnV0dG9uLCBtZXRob2QpIHtcbiAgICAgIC8vIENvbnZlbnRpb246IG9ubHkgcG9zdCwgcHV0IGFuZCBwYXRjaCByZXF1ZXN0cyBwYXNzIHRoZSBkYXRhIGFzIHBheWxvYWQuXG4gICAgICByZXR1cm4gKFxuICAgICAgICBbJ3Bvc3QnLCAncHV0JywgJ3BhdGNoJ10uaW5jbHVkZXMobWV0aG9kKSAmJiAoXG4gICAgICAgICAgLy8gVE9ETzogVXNlIGBoYW5kbGVEYXRhU2NoZW1hKClgIGFzeW5jaHJvbm91c2x5IGhlcmUgaW5zdGVhZCwgdG9cbiAgICAgICAgICAvLyBvZmZlciB0aGUgc2FtZSBhbW91bnQgb2YgcG9zc2liaWxpdGllcyBmb3IgZGF0YSBsb2FkaW5nLlxuICAgICAgICAgIGJ1dHRvbi5nZXRTY2hlbWFWYWx1ZShbJ3Jlc291cmNlJywgJ2RhdGEnXSkgfHxcbiAgICAgICAgICBidXR0b24ucHJvY2Vzc2VkSXRlbVxuICAgICAgICApXG4gICAgICApXG4gICAgfSxcblxuICAgIGFzeW5jIHN1Ym1pdChidXR0b24pIHtcbiAgICAgIGNvbnN0IHJlc291cmNlID0gZ2V0UmVzb3VyY2UoYnV0dG9uLnNjaGVtYS5yZXNvdXJjZSwge1xuICAgICAgICBwYXJlbnQ6IHRoaXMucmVzb3VyY2VcbiAgICAgIH0pXG4gICAgICBpZiAocmVzb3VyY2UpIHtcbiAgICAgICAgY29uc3QgeyBtZXRob2QgfSA9IHJlc291cmNlXG4gICAgICAgIGNvbnN0IGRhdGEgPSB0aGlzLmdldFBheWxvYWREYXRhKGJ1dHRvbiwgbWV0aG9kKVxuICAgICAgICByZXR1cm4gdGhpcy5zdWJtaXRSZXNvdXJjZShidXR0b24sIHJlc291cmNlLCBtZXRob2QsIGRhdGEpXG4gICAgICB9XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9LFxuXG4gICAgYXN5bmMgc3VibWl0UmVzb3VyY2UoYnV0dG9uLCByZXNvdXJjZSwgbWV0aG9kLCBkYXRhLCB7XG4gICAgICBzZXREYXRhID0gZmFsc2UsXG4gICAgICBvblN1Y2Nlc3MsXG4gICAgICBvbkVycm9yLFxuICAgICAgbm90aWZ5U3VjY2VzcyA9ICgpID0+XG4gICAgICAgIHRoaXMubm90aWZ5KHtcbiAgICAgICAgICB0eXBlOiAnc3VjY2VzcycsXG4gICAgICAgICAgdGl0bGU6ICdSZXF1ZXN0IFN1Y2Nlc3NmdWwnLFxuICAgICAgICAgIHRleHQ6ICdSZXF1ZXN0IHdhcyBzdWNjZXNzZnVsbHkgc2VudC4nXG4gICAgICAgIH0pLFxuICAgICAgbm90aWZ5RXJyb3IgPSBlcnJvciA9PlxuICAgICAgICB0aGlzLm5vdGlmeSh7XG4gICAgICAgICAgdHlwZTogJ2Vycm9yJyxcbiAgICAgICAgICB0aXRsZTogJ1JlcXVlc3QgRXJyb3InLFxuICAgICAgICAgIHRleHQ6IFtcbiAgICAgICAgICAgIGBVbmFibGUgdG8gc2VuZCByZXF1ZXN0JHtlcnJvciA/ICc6JyA6ICcnfWAsXG4gICAgICAgICAgICBlcnJvcj8ubWVzc2FnZSB8fCBlcnJvclxuICAgICAgICAgIF1cbiAgICAgICAgfSlcbiAgICB9ID0ge30pIHtcbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcbiAgICAgICAgdGhpcy5oYW5kbGVSZXF1ZXN0KFxuICAgICAgICAgIHsgbWV0aG9kLCByZXNvdXJjZSwgZGF0YSB9LFxuICAgICAgICAgIGFzeW5jIChlcnIsIHJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBkYXRhID0gcmVzcG9uc2U/LmRhdGFcbiAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgLy8gU2VlIGlmIHdlJ3JlIGRlYWxpbmcgd2l0aCBhIERpdG8gdmFsaWRhdGlvbiBlcnJvcjpcbiAgICAgICAgICAgICAgY29uc3QgZXJyb3JzID0gdGhpcy5pc1ZhbGlkYXRpb25FcnJvcihyZXNwb25zZSkgJiYgZGF0YS5lcnJvcnNcbiAgICAgICAgICAgICAgaWYgKGVycm9ycykge1xuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuc2hvd1ZhbGlkYXRpb25FcnJvcnMoZXJyb3JzLCB0cnVlKVxuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IGVycm9yID0gaXNPYmplY3QoZGF0YSkgPyBkYXRhIDogZXJyXG4gICAgICAgICAgICAgICAgb25FcnJvcj8uKGVycm9yKVxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuZW1pdEJ1dHRvbkV2ZW50KGJ1dHRvbiwgJ2Vycm9yJywge1xuICAgICAgICAgICAgICAgICAgbm90aWZ5OiBub3RpZnlFcnJvcixcbiAgICAgICAgICAgICAgICAgIGVycm9yXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZXNvbHZlKGZhbHNlKVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgLy8gVXBkYXRlIHRoZSB1bmRlcmx5aW5nIGRhdGEgYmVmb3JlIGNhbGxpbmcgYG5vdGlmeSgpYCBvclxuICAgICAgICAgICAgICAvLyBgdGhpcy5pdGVtTGFiZWxgLCBzbyBpZCBpcyBzZXQgYWZ0ZXIgY3JlYXRpbmcgbmV3IGl0ZW1zLlxuICAgICAgICAgICAgICBpZiAoc2V0RGF0YSAmJiBkYXRhKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXREYXRhKGRhdGEpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgb25TdWNjZXNzPy4oKVxuICAgICAgICAgICAgICBhd2FpdCB0aGlzLmVtaXRCdXR0b25FdmVudChidXR0b24sICdzdWNjZXNzJywge1xuICAgICAgICAgICAgICAgIG5vdGlmeTogbm90aWZ5U3VjY2Vzc1xuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICByZXNvbHZlKHRydWUpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICApXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlbWl0QnV0dG9uRXZlbnQoYnV0dG9uLCBldmVudCwgeyBub3RpZnksIGVycm9yIH0pIHtcbiAgICAgIC8vIENyZWF0ZSB0aGUgY29udGV4dCBvdXRzaWRlIG9mIGBlbWl0RXZlbnQoKWAsIHNvIHRoYXRcbiAgICAgIC8vIGBjb250ZXh0Lndhc05vdGlmaWVkYCBjYW4gYmUgY2hlY2tlZCBhZnRlci5cbiAgICAgIGNvbnN0IGNvbnRleHQgPSBuZXcgRGl0b0NvbnRleHQoYnV0dG9uLCB7XG4gICAgICAgIG5lc3RlZDogZmFsc2UsXG4gICAgICAgIGRhdGE6IHRoaXMuZGF0YSxcbiAgICAgICAgaXRlbUxhYmVsOiB0aGlzLml0ZW1MYWJlbCxcbiAgICAgICAgZXJyb3JcbiAgICAgIH0pXG4gICAgICBjb25zdCByZXMgPSBhd2FpdCBidXR0b24uZW1pdEV2ZW50KGV2ZW50LCB7IGNvbnRleHQgfSlcbiAgICAgIGlmIChcbiAgICAgICAgbm90aWZ5ICYmXG4gICAgICAgIC8vIFByZXZlbnQgZGVmYXVsdCBpZiBhbnl0aGluZyB3YXMgcmV0dXJuZWQgZnJvbSB0aGUgZXZlbnQgaGFuZGxlci5cbiAgICAgICAgcmVzID09PSB1bmRlZmluZWQgJiZcbiAgICAgICAgLy8gRG8gbm90IGRpc3BsYXkgZGVmYXVsdCBub3RpZmljYXRpb24gaWYgdGhlIGV2ZW50IGhhbmRsZXIgYWxyZWFkeVxuICAgICAgICAvLyBkaXNwbGF5ZWQgYSBub3RpZmljYXRpb24uXG4gICAgICAgICFjb250ZXh0Lndhc05vdGlmaWVkXG4gICAgICApIHtcbiAgICAgICAgbm90aWZ5KGVycm9yKVxuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc1xuICAgIH1cbiAgfVxufVxuIiwiZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVQYXRoKHBhdGgpIHtcbiAgLy8gRm9yIHBhdGhzIHN0YXJpbmcgd2l0aCBgL2AsIHdlIGNhbiB1c2UgdGhlIG5hdGl2ZSBgVVJMKClgIGNsYXNzIHRvIHJlc29sdmVcbiAgLy8gdGhlIHBhdGgsIHdoaWNoIHdpbGwgYWxzbyBoYW5kbGUgYC4uYCBhbmQgYC5gIHNlZ21lbnRzOlxuICByZXR1cm4gbmV3IFVSTChgZmlsZToke3BhdGh9YCkucGF0aG5hbWVcbn1cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4uZGl0by1mb3JtLmRpdG8tc2Nyb2xsLXBhcmVudChcbiAgOmNsYXNzPVwieyAnZGl0by1mb3JtLW5lc3RlZCc6IGlzTmVzdGVkUm91dGUgfVwiXG4gIDpkYXRhLXJlc291cmNlPVwic291cmNlU2NoZW1hLnBhdGhcIlxuKVxuICAvLy0gTk9URTogTmVzdGVkIGZvcm0gY29tcG9uZW50cyBhcmUga2VwdCBhbGl2ZSBieSB1c2luZyBgdi1zaG93YCBpbnN0ZWFkIG9mXG4gIC8vLSBgdi1pZmAgaGVyZSwgc28gZXZlbnQgaGFuZGxpbmcgYW5kIG90aGVyIHRoaW5ncyBzdGlsbCB3b3JrIHdpdGggbmVzdGVkXG4gIC8vLSBlZGl0aW5nLiBPbmx5IHJlbmRlciBhIHJvdXRlci12aWV3IGhlcmUgaWYgdGhpcyBpc24ndCB0aGUgbGFzdCBkYXRhIHJvdXRlXG4gIC8vLSBhbmQgbm90IGEgbmVzdGVkIGZvcm0gcm91dGUsIHdoaWNoIHdpbGwgYXBwZWFyIGVsc2V3aGVyZSBpbiBpdHMgb3duIHZpZXcuXG4gIFJvdXRlclZpZXcoXG4gICAgdi1pZj1cIiEoaXNMYXN0VW5uZXN0ZWRSb3V0ZSB8fCBpc05lc3RlZFJvdXRlKVwiXG4gICAgdi1zaG93PVwiIWlzQWN0aXZlXCJcbiAgKVxuICAvLy0gVXNlIGEgPGRpdj4gZm9yIGlubGluZWQgZm9ybXMsIGFzIHdlIHNob3VsZG4ndCBuZXN0IGFjdHVhbCA8Zm9ybT4gdGFncy5cbiAgY29tcG9uZW50KFxuICAgIHYtc2hvdz1cImlzQWN0aXZlXCJcbiAgICA6aXM9XCJpc05lc3RlZFJvdXRlID8gJ2RpdicgOiAnZm9ybSdcIlxuICAgIDpjbGFzcz1cInsgJ2RpdG8tc2Nyb2xsLXBhcmVudCc6IGlzUm9vdEZvcm0gfVwiXG4gICAgQHN1Ym1pdC5wcmV2ZW50XG4gIClcbiAgICAvLy0gUHJldmVudCBpbXBsaWNpdCBzdWJtaXNzaW9uIG9mIHRoZSBmb3JtLCBmb3IgZXhhbXBsZSB3aGVuIHR5cGluZyBlbnRlclxuICAgIC8vLSBpbiBhbiBpbnB1dCBmaWVsZC5cbiAgICAvLy0gaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9hLzUxNTA3ODA2XG4gICAgYnV0dG9uKFxuICAgICAgdi1zaG93PVwiZmFsc2VcIlxuICAgICAgdHlwZT1cInN1Ym1pdFwiXG4gICAgICBkaXNhYmxlZFxuICAgIClcbiAgICBEaXRvU2NoZW1hKFxuICAgICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgICA6ZGF0YT1cImRhdGFcIlxuICAgICAgOm1ldGE9XCJtZXRhXCJcbiAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgIDpwYWRkaW5nPVwiaXNOZXN0ZWRSb3V0ZSA/ICduZXN0ZWQnIDogJ3Jvb3QnXCJcbiAgICAgIDpkaXNhYmxlZD1cImlzTG9hZGluZ1wiXG4gICAgICA6c2Nyb2xsYWJsZT1cImlzUm9vdEZvcm1cIlxuICAgICAgZ2VuZXJhdGVMYWJlbHNcbiAgICApXG4gICAgICB0ZW1wbGF0ZSgjYnV0dG9ucylcbiAgICAgICAgRGl0b0J1dHRvbnMuZGl0by1idXR0b25zLXJvdW5kLmRpdG8tYnV0dG9ucy1sYXJnZS5kaXRvLWJ1dHRvbnMtbWFpbihcbiAgICAgICAgICA6Y2xhc3M9XCJ7ICdkaXRvLWJ1dHRvbnMtc3RpY2t5JzogaXNSb290Rm9ybSB9XCJcbiAgICAgICAgICA6YnV0dG9ucz1cImJ1dHRvblNjaGVtYXNcIlxuICAgICAgICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICAgICAgICA6ZGF0YT1cImRhdGFcIlxuICAgICAgICAgIDptZXRhPVwibWV0YVwiXG4gICAgICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgICAgICAgIDpkaXNhYmxlZD1cImlzTG9hZGluZ1wiXG4gICAgICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgeyBjbG9uZSwgY2FwaXRhbGl6ZSwgcGFyc2VEYXRhUGF0aCwgYXNzaWduRGVlcGx5IH0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgUm91dGVNaXhpbiBmcm9tICcuLi9taXhpbnMvUm91dGVNaXhpbi5qcydcbmltcG9ydCBSZXNvdXJjZU1peGluIGZyb20gJy4uL21peGlucy9SZXNvdXJjZU1peGluLmpzJ1xuaW1wb3J0IHsgZ2V0UmVzb3VyY2UsIGdldE1lbWJlclJlc291cmNlIH0gZnJvbSAnLi4vdXRpbHMvcmVzb3VyY2UuanMnXG5pbXBvcnQgeyBnZXRCdXR0b25TY2hlbWFzLCBpc09iamVjdFNvdXJjZSB9IGZyb20gJy4uL3V0aWxzL3NjaGVtYS5qcydcbmltcG9ydCB7IHJlc29sdmVQYXRoIH0gZnJvbSAnLi4vdXRpbHMvcGF0aC5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdEaXRvRm9ybScsIHtcbiAgbWl4aW5zOiBbUm91dGVNaXhpbiwgUmVzb3VyY2VNaXhpbl0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgY3JlYXRlZERhdGE6IG51bGwsXG4gICAgICBjbG9uZWREYXRhOiB1bmRlZmluZWQsXG4gICAgICBzb3VyY2VLZXk6IG51bGwsXG4gICAgICBpc0Zvcm06IHRydWVcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICB2ZXJicygpIHtcbiAgICAgIC8vIEFkZCBzdWJtaXQgLyBzdWJtaXR0ZWQgdG8gdGhlIHZlcmJzIHJldHVybmVkIGJ5IFJlc291cmNlTWl4aW5cbiAgICAgIC8vIE5PVEU6IFRoZXNlIGdldCBwYXNzZWQgb24gdG8gY2hpbGRyZW4gdGhyb3VnaDpcbiAgICAgIC8vIGBwcm92aWRlKCkgLi4uIHsgJHZlcmJzOiAoKSA9PiB0aGlzLnZlcmJzIH1gIGluIFJlc291cmNlTWl4aW5cbiAgICAgIGNvbnN0IHZlcmJzID0gdGhpcy5nZXRWZXJicygpXG4gICAgICBjb25zdCB7IGlzQ3JlYXRpbmcsIHByb3ZpZGVzRGF0YSB9ID0gdGhpc1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4udmVyYnMsXG4gICAgICAgIHN1Ym1pdDogaXNDcmVhdGluZyA/IHZlcmJzLmNyZWF0ZSA6IHZlcmJzLnNhdmUsXG4gICAgICAgIHN1Ym1pdHRlZDogaXNDcmVhdGluZyA/IHZlcmJzLmNyZWF0ZWQgOiB2ZXJicy5zYXZlZCxcbiAgICAgICAgY2FuY2VsOiBwcm92aWRlc0RhdGEgPyB2ZXJicy5jYW5jZWwgOiB2ZXJicy5jbG9zZSxcbiAgICAgICAgY2FuY2VsbGVkOiBwcm92aWRlc0RhdGEgPyB2ZXJicy5jYW5jZWxsZWQgOiB2ZXJicy5jbG9zZWRcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgc2NoZW1hKCkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgdGhpcy5nZXRJdGVtRm9ybVNjaGVtYShcbiAgICAgICAgICB0aGlzLnNvdXJjZVNjaGVtYSxcbiAgICAgICAgICAvLyBJZiB0aGVyZSBpcyBubyBkYXRhIHlldCwgcHJvdmlkZSBhbiBlbXB0eSBvYmplY3Qgd2l0aCBqdXN0IHRoZVxuICAgICAgICAgIC8vIHJpZ2h0IHR5cGUgc2V0LCBzbyB0aGUgZm9ybSBjYW4gYWx3YXlzIGJlIGRldGVybWluZWQuXG4gICAgICAgICAgdGhpcy5kYXRhIHx8IHsgdHlwZTogdGhpcy50eXBlIH0sXG4gICAgICAgICAgdGhpcy5jb250ZXh0XG4gICAgICAgICkgfHwge31cbiAgICAgICkgLy8gQWx3YXlzIHJldHVybiBhIHNjaGVtYSBvYmplY3Qgc28gd2UgZG9uJ3QgbmVlZCB0byBjaGVjayBmb3IgaXQuXG4gICAgfSxcblxuICAgIGJ1dHRvblNjaGVtYXMoKSB7XG4gICAgICByZXR1cm4gZ2V0QnV0dG9uU2NoZW1hcyhcbiAgICAgICAgYXNzaWduRGVlcGx5KFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNhbmNlbDoge1xuICAgICAgICAgICAgICB0eXBlOiAnYnV0dG9uJyxcbiAgICAgICAgICAgICAgZXZlbnRzOiB7XG4gICAgICAgICAgICAgICAgY2xpY2s6ICgpID0+IHRoaXMuY2FuY2VsKClcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgc3VibWl0OiAhdGhpcy5pc011dGF0aW5nICYmIHtcbiAgICAgICAgICAgICAgdHlwZTogJ3N1Ym1pdCcsXG4gICAgICAgICAgICAgIC8vIFN1Ym1pdCBidXR0b25zIGNsb3NlIHRoZSBmb3JtIGJ5IGRlZmF1bHQ6XG4gICAgICAgICAgICAgIGNsb3NlRm9ybTogdHJ1ZSxcbiAgICAgICAgICAgICAgZXZlbnRzOiB7XG4gICAgICAgICAgICAgICAgY2xpY2s6ICh7IGNvbXBvbmVudDogYnV0dG9uIH0pID0+IGJ1dHRvbi5zdWJtaXQoKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICB0aGlzLnNjaGVtYS5idXR0b25zXG4gICAgICAgIClcbiAgICAgIClcbiAgICB9LFxuXG4gICAgaXNSb290Rm9ybSgpIHtcbiAgICAgIHJldHVybiB0aGlzLmRhdGFQYXRoID09PSAnJyAmJiAhdGhpcy5pc05lc3RlZFJvdXRlXG4gICAgfSxcblxuICAgIGlzQWN0aXZlKCkge1xuICAgICAgcmV0dXJuIHRoaXMuaXNMYXN0Um91dGUgfHwgdGhpcy5pc0xhc3RVbm5lc3RlZFJvdXRlXG4gICAgfSxcblxuICAgIGlzVHJhbnNpZW50KCkge1xuICAgICAgcmV0dXJuICF0aGlzLnByb3ZpZGVzRGF0YVxuICAgIH0sXG5cbiAgICBpc0NyZWF0aW5nKCkge1xuICAgICAgLy8gdGhpcy5wYXJhbSBpcyBpbmhlcml0ZWQgZnJvbSBSb3V0ZU1peGluXG4gICAgICByZXR1cm4gdGhpcy5wYXJhbSA9PT0gJ2NyZWF0ZSdcbiAgICB9LFxuXG4gICAgaXNEaXJ0eSgpIHtcbiAgICAgIHJldHVybiAhdGhpcy5pc011dGF0aW5nICYmICEhdGhpcy5tYWluU2NoZW1hQ29tcG9uZW50Py5pc0RpcnR5XG4gICAgfSxcblxuICAgIGlzTXV0YXRpbmcoKSB7XG4gICAgICAvLyBXaGVuIGBzb3VyY2VTY2hlbWEubXV0YXRlYCBpcyB0cnVlLCB0aGUgZm9ybSBlZGl0cyB0aGUgaW5oZXJpdGVkIGRhdGFcbiAgICAgIC8vIGRpcmVjdGx5IGluc3RlYWQgb2YgbWFraW5nIGEgY29weSBmb3IgcGVyc2lzdGVuY2UgdXBvbiBzdWJtaXNzaW9uLlxuICAgICAgLy8gU2VlIGBpbmhlcml0ZWREYXRhKClgIGNvbXB1dGVkIHByb3BlcnR5IGZvciBtb3JlIGRldGFpbHMuXG4gICAgICByZXR1cm4gISF0aGlzLnNvdXJjZVNjaGVtYS5tdXRhdGVcbiAgICB9LFxuXG4gICAgc2VsZWN0ZWRUYWIoKSB7XG4gICAgICByZXR1cm4gdGhpcy5tYWluU2NoZW1hQ29tcG9uZW50Py5zZWxlY3RlZFRhYiB8fCBudWxsXG4gICAgfSxcblxuICAgIHR5cGUoKSB7XG4gICAgICAvLyBUaGUgdHlwZSBvZiBmb3JtIHRvIGNyZWF0ZSwgaWYgdGhlcmUgYXJlIG11bHRpcGxlIGZvcm1zIHRvIGNob29zZSBmcm9tLlxuICAgICAgcmV0dXJuIHRoaXMuJHJvdXRlLnF1ZXJ5LnR5cGVcbiAgICB9LFxuXG4gICAgaXRlbUlkKCkge1xuICAgICAgcmV0dXJuIHRoaXMuaXNDcmVhdGluZ1xuICAgICAgICA/IG51bGxcbiAgICAgICAgOiB0aGlzLnBhcmFtID8/IG51bGxcbiAgICB9LFxuXG4gICAgbWV0aG9kKCkge1xuICAgICAgcmV0dXJuIHRoaXMuaXNDcmVhdGluZyA/ICdwb3N0JyA6ICdwYXRjaCdcbiAgICB9LFxuXG4gICAgcmVzb3VyY2UoKSB7XG4gICAgICBjb25zdCByZXNvdXJjZSA9IHRoaXMuZ2V0UmVzb3VyY2UoKVxuICAgICAgcmV0dXJuIGdldE1lbWJlclJlc291cmNlKHRoaXMuaXRlbUlkLCByZXNvdXJjZSkgfHwgcmVzb3VyY2VcbiAgICB9LFxuXG4gICAgYnJlYWRjcnVtYlByZWZpeCgpIHtcbiAgICAgIHJldHVybiBjYXBpdGFsaXplKHRoaXMuaXNDcmVhdGluZyA/IHRoaXMudmVyYnMuY3JlYXRlIDogdGhpcy52ZXJicy5lZGl0KVxuICAgIH0sXG5cbiAgICBkYXRhKCkge1xuICAgICAgLy8gUmV0dXJuIGRpZmZlcmVudCBkYXRhIFwiY29udGFpbmVyc1wiIGJhc2VkIG9uIGRpZmZlcmVudCBzY2VuYXJpb3M6XG4gICAgICAvLyAxLiBjcmVhdGVkRGF0YSwgaWYgd2UncmUgaW4gYSBmb3JtIGZvciBhIG5ld2x5IGNyZWF0ZWQgb2JqZWN0LlxuICAgICAgLy8gMi4gbG9hZGVkRGF0YSwgaWYgdGhlIGZvcm0gaXRzZWxmIGlzIHRoZSByb290IG9mIHRoZSBkYXRhIChlLmcuIHdoZW5cbiAgICAgIC8vICAgIGRpcmVjdGx5IGxvYWRpbmcgYW4gZWRpdGluZyByb290KS5cbiAgICAgIC8vIDMuIFRoZSBkYXRhIGluaGVyaXRlZCBmcm9tIHRoZSBwYXJlbnQsIHdoaWNoIGl0c2VsZiBtYXkgYmUgZWl0aGVyIGFcbiAgICAgIC8vICAgIHZpZXcgdGhhdCBsb2FkZWQgdGhlIGRhdGEsIG9yIGEgZm9ybSB0aGF0IGVpdGhlciBsb2FkZWQgdGhlIGRhdGEsIG9yXG4gICAgICAvLyAgICBhbHNvIGluaGVyaXRlZCBpdCBmcm9tIGl0cyBwYXJlbnQuIE5vdGUgdGhhdCB3ZSB1c2UgYSBjbG9uZSBvZiBpdCxcbiAgICAgIC8vICAgIHNvLCBkYXRhIGNoYW5nZXMgYXJlbid0IGFwcGxpZWQgdW50aWwgc2V0U291cmNlRGF0YSgpIGlzIGNhbGxlZC5cbiAgICAgIHJldHVybiB0aGlzLmNyZWF0ZWREYXRhIHx8IHRoaXMubG9hZGVkRGF0YSB8fCB0aGlzLmluaGVyaXRlZERhdGEgfHwgbnVsbFxuICAgIH0sXG5cbiAgICBkYXRhUGF0aCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldERhdGFQYXRoRnJvbSh0aGlzLmRhdGFDb21wb25lbnQpXG4gICAgfSxcblxuICAgIHNvdXJjZURhdGEoKSB7XG4gICAgICAvLyBQb3NzaWJsZSBwYXJlbnRzIGFyZSBEaXRvRm9ybSBmb3IgZm9ybXMsIG9yIERpdG9WaWV3IGZvciByb290IGxpc3RzLlxuICAgICAgLy8gQm90aCBoYXZlIGEgZGF0YSBwcm9wZXJ0eSB3aGljaCBhYnN0cmFjdHMgYXdheSBsb2FkaW5nIGFuZCBpbmhlcml0aW5nXG4gICAgICAvLyBvZiBkYXRhLlxuICAgICAgLy8gRm9ybXMgdGhhdCBhcmUgYWJvdXQgdG8gYmUgZGVzdHJveWVkIGR1ZSB0byBuYXZpZ2F0aW9uIGxvb3NlIHRoZWlyXG4gICAgICAvLyByb3V0ZS1yZWNvcmQsIGJ1dCBtaWdodCBzdGlsbCB0cmlnZ2VyIHRoaXMgZ2V0dGVyLiBGaWx0ZXIgdGhvc2Ugb3V0LlxuICAgICAgbGV0IGRhdGEgPSB0aGlzLnJvdXRlUmVjb3JkID8gdGhpcy5wYXJlbnRSb3V0ZUNvbXBvbmVudC5kYXRhIDogbnVsbFxuICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgLy8gSGFuZGxlIG5lc3RlZCBkYXRhIGJ5IHNwbGl0dGluZyB0aGUgZGF0YVBhdGgsIGl0ZXJhdGUgdGhyb3VnaCB0aGVcbiAgICAgICAgLy8gYWN0dWFsIGRhdGEgYW5kIGxvb2sgbmVzdCBjaGlsZC1kYXRhIHVwLlxuICAgICAgICBjb25zdCBkYXRhUGFydHMgPSBwYXJzZURhdGFQYXRoKFxuICAgICAgICAgIHRoaXMuZ2V0RGF0YVBhdGhGcm9tKHRoaXMucGFyZW50Um91dGVDb21wb25lbnQpXG4gICAgICAgIClcbiAgICAgICAgLy8gQ29tcGFyZSBkYXRhUGFydHMgYWdhaW5zdCBtYXRjaGVkIHJvdXRlUGF0aCBwYXJ0cywgdG8gaWRlbnRpZnkgdGhvc2VcbiAgICAgICAgLy8gcGFydHMgdGhhdCBuZWVkIHRvIGJlIHRyZWF0ZWQgbGlrZSBpZHMgYW5kIG1hcHBlZCB0byBpbmRpY2VzIGluIGRhdGEuXG4gICAgICAgIGNvbnN0IHBhdGhQYXJ0cyA9IHRoaXMucm91dGVSZWNvcmQucGF0aC5zcGxpdCgnLycpXG4gICAgICAgIGNvbnN0IHJvdXRlUGFydHMgPSBwYXRoUGFydHMuc2xpY2UocGF0aFBhcnRzLmxlbmd0aCAtIGRhdGFQYXJ0cy5sZW5ndGgpXG4gICAgICAgIC8vIFRPRE86IEZpeCBzaWRlLWVmZmVjdHNcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHZ1ZS9uby1zaWRlLWVmZmVjdHMtaW4tY29tcHV0ZWQtcHJvcGVydGllc1xuICAgICAgICB0aGlzLnNvdXJjZUtleSA9IG51bGxcbiAgICAgICAgY29uc3QgbGFzdERhdGFQYXJ0ID0gZGF0YVBhcnRzW2RhdGFQYXJ0cy5sZW5ndGggLSAxXVxuICAgICAgICBpZiAoaXNPYmplY3RTb3VyY2UodGhpcy5zb3VyY2VTY2hlbWEpICYmIGxhc3REYXRhUGFydCA9PT0gJ2NyZWF0ZScpIHtcbiAgICAgICAgICAvLyBJZiB3ZSBoYXZlIGFuIG9iamVjdCBzb3VyY2UgYW5kIGFyZSBjcmVhdGluZywgdGhlIGRhdGFQYXRoIG5lZWRzIHRvXG4gICAgICAgICAgLy8gYmUgc2hvcnRlbmVkIGJ5IHRoZSAnY3JlYXRlJyBlbnRyeS4gVGhpcyBpc24ndCBuZWVkZWQgZm9yIGxpc3RcbiAgICAgICAgICAvLyBzb3VyY2VzLCBhcyB0aGVyZSB0aGUgcGFyYW1ldGVyIGlzIGFjdHVhbGx5IG1hcHBlZCB0byB0aGUgaXRlbSBpZC5cbiAgICAgICAgICBkYXRhUGFydHMubGVuZ3RoLS1cbiAgICAgICAgfVxuICAgICAgICBmb3IgKGxldCBpID0gMCwgbCA9IGRhdGFQYXJ0cy5sZW5ndGg7IGkgPCBsICYmIGRhdGE7IGkrKykge1xuICAgICAgICAgIGNvbnN0IGRhdGFQYXJ0ID0gZGF0YVBhcnRzW2ldXG4gICAgICAgICAgLy8gSWYgdGhpcyBpcyBhbiA6aWQgcGFydCwgZmluZCB0aGUgaW5kZXggb2YgdGhlIGl0ZW0gd2l0aCBnaXZlbiBpZC5cbiAgICAgICAgICBjb25zdCBrZXkgPSAvXjppZC8udGVzdChyb3V0ZVBhcnRzW2ldKVxuICAgICAgICAgICAgPyBkYXRhUGFydCA9PT0gJ2NyZWF0ZSdcbiAgICAgICAgICAgICAgPyBudWxsIC8vIFRoZXJlJ3Mgbm8gaW5kZXggZm9yIGVudHJpZXMgYWJvdXQgdG8gYmUgY3JlYXRlZFxuICAgICAgICAgICAgICA6IHRoaXMuZmluZEl0ZW1JZEluZGV4KHRoaXMuc291cmNlU2NoZW1hLCBkYXRhLCBkYXRhUGFydClcbiAgICAgICAgICAgIDogZGF0YVBhcnRcbiAgICAgICAgICAvLyBTa2lwIHRoZSBmaW5hbCBsb29rdXAgYnV0IHJlbWVtYmVyIGBzb3VyY2VLZXlgLCBhcyB3ZSB3YW50IHRoZVxuICAgICAgICAgIC8vIHBhcmVudCBkYXRhIHNvIHdlIGNhbiByZXBsYWNlIHRoZSBlbnRyeSBhdCBgc291cmNlS2V5YCBvbiBpdC5cbiAgICAgICAgICBpZiAoaSA9PT0gbCAtIDEpIHtcbiAgICAgICAgICAgIC8vIFRPRE86IEZpeCBzaWRlLWVmZmVjdHNcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZVxuICAgICAgICAgICAgdGhpcy5zb3VyY2VLZXkgPSBrZXlcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZGF0YSA9IGRhdGFba2V5XVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGRhdGFcbiAgICB9LFxuXG4gICAgaW5oZXJpdGVkRGF0YSgpIHtcbiAgICAgIC8vIERhdGEgaW5oZXJpdGVkIGZyb20gcGFyZW50LCBhbmQgY2xvbmVkIHRvIHByb3RlY3QgYWdhaW5zdCByZWFjdGl2ZVxuICAgICAgLy8gY2hhbmdlcyB1bnRpbCBjaGFuZ2VzIGFyZSBhcHBsaWVkIHRocm91Z2ggc2V0U291cmNlRGF0YSgpLCB1bmxlc3NcbiAgICAgIC8vIGBzb3VyY2VTY2hlbWEubXV0YXRlYCBpcyB0cnVlLCBpbiB3aGljaCBjYXNlIGRhdGEgaXMgbXV0YXRlZCBkaXJlY3RseS5cbiAgICAgIGlmIChcbiAgICAgICAgdGhpcy5pc1RyYW5zaWVudCAmJlxuICAgICAgICB0aGlzLmNsb25lZERhdGEgPT09IHVuZGVmaW5lZCAmJlxuICAgICAgICB0aGlzLnNvdXJjZURhdGEgJiZcbiAgICAgICAgdGhpcy5zb3VyY2VLZXkgIT09IG51bGxcbiAgICAgICkge1xuICAgICAgICBsZXQgZGF0YSA9IHRoaXMuc291cmNlRGF0YVt0aGlzLnNvdXJjZUtleV1cbiAgICAgICAgaWYgKCF0aGlzLmlzTXV0YXRpbmcpIHtcbiAgICAgICAgICAvLyBVc2UgYSB0cmljayB0byBzdG9yZSBjbG9uZWQgaW5oZXJpdGVkIGRhdGEgaW4gY2xvbmVkRGF0YSwgdG8gbWFrZVxuICAgICAgICAgIC8vIGl0IHJlYWN0aXZlIGFuZCBwcmV2ZW50IGl0IGZyb20gYmVpbmcgY2xvbmVkIG11bHRpcGxlIHRpbWVzLlxuICAgICAgICAgIC8vIFRPRE86IEZpeCBzaWRlLWVmZmVjdHNcbiAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgdnVlL25vLXNpZGUtZWZmZWN0cy1pbi1jb21wdXRlZC1wcm9wZXJ0aWVzXG4gICAgICAgICAgdGhpcy5jbG9uZWREYXRhID0gZGF0YSA9IGNsb25lKGRhdGEpXG4gICAgICAgIH1cbiAgICAgICAgaWYgKFxuICAgICAgICAgIGRhdGEgPT09IG51bGwgJiZcbiAgICAgICAgICAhdGhpcy5pc0NyZWF0aW5nICYmXG4gICAgICAgICAgaXNPYmplY3RTb3VyY2UodGhpcy5zb3VyY2VTY2hlbWEpXG4gICAgICAgICkge1xuICAgICAgICAgIC8vIElmIGRhdGEgb2YgYW4gb2JqZWN0IHNvdXJjZSBpcyBudWxsLCByZWRpcmVjdCB0byBpdHMgY3JlYXRlIHJvdXRlLlxuICAgICAgICAgIC8vIFRPRE86IEZpeCBzaWRlLWVmZmVjdHNcbiAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgdnVlL25vLXNpZGUtZWZmZWN0cy1pbi1jb21wdXRlZC1wcm9wZXJ0aWVzXG4gICAgICAgICAgdGhpcy4kcm91dGVyLnB1c2goeyBwYXRoOiBgJHt0aGlzLnBhdGh9L2NyZWF0ZWAgfSlcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZGF0YVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMuY2xvbmVkRGF0YVxuICAgIH0sXG5cbiAgICAvLyBAb3ZlcnJpZGUgUmVzb3VyY2VNaXhpbi5oYXNEYXRhKClcbiAgICBoYXNEYXRhKCkge1xuICAgICAgcmV0dXJuICEhdGhpcy5kYXRhXG4gICAgfSxcblxuICAgIGl0ZW1MYWJlbCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldEl0ZW1MYWJlbCh0aGlzLnNvdXJjZVNjaGVtYSwgdGhpcy5kYXRhLCB7IGV4dGVuZGVkOiB0cnVlIH0pXG4gICAgfVxuICB9LFxuXG4gIHdhdGNoOiB7XG4gICAgJHJvdXRlOiB7XG4gICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vdnVlanMvdnVlLXJvdXRlci9pc3N1ZXMvMzM5MyNpc3N1ZWNvbW1lbnQtMTE1ODQ3MDE0OVxuICAgICAgZmx1c2g6ICdwb3N0JyxcbiAgICAgIGhhbmRsZXIodG8sIGZyb20pIHtcbiAgICAgICAgLy8gUmVsb2FkIGZvcm0gZGF0YSB3aGVuIG5hdmlnYXRpbmcgdG8gYSBkaWZmZXJlbnQgZW50aXR5IGluIHNhbWUgZm9ybS5cbiAgICAgICAgY29uc3QgcGFyYW0gPSB0aGlzLm1ldGE/LnBhcmFtXG4gICAgICAgIGlmIChcbiAgICAgICAgICBwYXJhbSAmJlxuICAgICAgICAgIHRoaXMucHJvdmlkZXNEYXRhICYmXG4gICAgICAgICAgLy8gVE9ETzogU2VlIGlmIHdlIGNhbiByZW1vdmUgdGhpcyBkdWUgdG8gYGZsdXNoOiAncG9zdCdgLlxuICAgICAgICAgIGZyb20ubWF0Y2hlZFswXS5wYXRoID09PSB0by5tYXRjaGVkWzBdLnBhdGggJiYgLy8gU3RheWluZyBvbiBzYW1lIGZvcm1cbiAgICAgICAgICBmcm9tLnBhcmFtc1twYXJhbV0gIT09ICdjcmVhdGUnICYmIC8vIEJ1dCBoYXZlbid0IGJlZW4gY3JlYXRpbmdcbiAgICAgICAgICB0by5wYXJhbXNbcGFyYW1dICE9PSBmcm9tLnBhcmFtc1twYXJhbV0gLy8gR29pbmcgdG8gYSBkaWZmZXJlbnQgZW50aXR5XG4gICAgICAgICkge1xuICAgICAgICAgIHRoaXMubG9hZERhdGEodHJ1ZSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBzb3VyY2VEYXRhOiAnY2xlYXJDbG9uZWREYXRhJyxcbiAgICAvLyBOZWVkZWQgZm9yIHRoZSAnY3JlYXRlJyByZWRpcmVjdCBpbiBgaW5oZXJpdGVkRGF0YSgpYCB0byB3b3JrOlxuICAgIGNyZWF0ZTogJ3NldHVwRGF0YSdcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZW1pdFNjaGVtYUV2ZW50KGV2ZW50LCBwYXJhbXMpIHtcbiAgICAgIHJldHVybiB0aGlzLm1haW5TY2hlbWFDb21wb25lbnQuZW1pdEV2ZW50KGV2ZW50LCBwYXJhbXMpXG4gICAgfSxcblxuICAgIGdldERhdGFQYXRoRnJvbShyb3V0ZUNvbXBvbmVudCkge1xuICAgICAgLy8gR2V0IHRoZSBkYXRhIHBhdGggYnkgZGVub3JtYWxpemVQYXRoIHRoZSByZWxhdGl2ZSByb3V0ZSBwYXRoXG4gICAgICByZXR1cm4gdGhpcy5hcGkuZGVub3JtYWxpemVQYXRoKFxuICAgICAgICB0aGlzLnBhdGhcbiAgICAgICAgICAvLyBEaXRvVmlld3MgaGF2ZSBuZXN0ZWQgcm91dGVzLCBzbyBkb24ndCByZW1vdmUgdGhlaXIgcGF0aC5cbiAgICAgICAgICAuc2xpY2UoKHJvdXRlQ29tcG9uZW50LmlzVmlldyA/IDAgOiByb3V0ZUNvbXBvbmVudC5wYXRoLmxlbmd0aCkgKyAxKVxuICAgICAgKVxuICAgIH0sXG5cbiAgICAvLyBAb3ZlcnJpZGUgUmVzb3VyY2VNaXhpbi5zZXR1cERhdGEoKVxuICAgIHNldHVwRGF0YSgpIHtcbiAgICAgIGlmICh0aGlzLmlzQ3JlYXRpbmcpIHtcbiAgICAgICAgdGhpcy5jcmVhdGVkRGF0YSB8fD0gdGhpcy5jcmVhdGVEYXRhKHRoaXMuc2NoZW1hLCB0aGlzLnR5cGUpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmVuc3VyZURhdGEoKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBzZXRTb3VyY2VEYXRhKGRhdGEpIHtcbiAgICAgIGlmICh0aGlzLnNvdXJjZURhdGEgJiYgdGhpcy5zb3VyY2VLZXkgIT09IG51bGwpIHtcbiAgICAgICAgY29uc3QgeyBtYWluU2NoZW1hQ29tcG9uZW50IH0gPSB0aGlzXG4gICAgICAgIHRoaXMuc291cmNlRGF0YVt0aGlzLnNvdXJjZUtleV0gPSBtYWluU2NoZW1hQ29tcG9uZW50LmZpbHRlckRhdGEoZGF0YSlcbiAgICAgICAgbWFpblNjaGVtYUNvbXBvbmVudC5vbkNoYW5nZSgpXG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgICB9XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9LFxuXG4gICAgYWRkU291cmNlRGF0YShkYXRhKSB7XG4gICAgICByZXR1cm4gaXNPYmplY3RTb3VyY2UodGhpcy5zb3VyY2VTY2hlbWEpXG4gICAgICAgID8gdGhpcy5zZXRTb3VyY2VEYXRhKGRhdGEpXG4gICAgICAgIDogISF0aGlzLnNvdXJjZURhdGE/LnB1c2goZGF0YSlcbiAgICB9LFxuXG4gICAgLy8gQG92ZXJyaWRlIFJlc291cmNlTWl4aW4uY2xlYXJEYXRhKClcbiAgICBjbGVhckRhdGEoKSB7XG4gICAgICB0aGlzLnNldERhdGEobnVsbClcbiAgICB9LFxuXG4gICAgLy8gQG92ZXJyaWRlIFJlc291cmNlTWl4aW4uc2V0RGF0YSgpXG4gICAgc2V0RGF0YShkYXRhKSB7XG4gICAgICAvLyBzZXREYXRhKCkgaXMgY2FsbGVkIGFmdGVyIHN1Ym1pdCB3aGVuIGRhdGEgaGFzIGNoYW5nZWQuXG4gICAgICBpZiAodGhpcy5pc1RyYW5zaWVudCkge1xuICAgICAgICAvLyBGb3IgY29tcG9uZW50cyB3aXRoIHRyYW5zaWVudCBkYXRhLCBtb2RpZnkgdGhpcy5zb3VyY2VEYXRhLlxuICAgICAgICB0aGlzLnNldFNvdXJjZURhdGEoZGF0YSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuY3JlYXRlZERhdGEgPSBudWxsXG4gICAgICAgIHRoaXMubG9hZGVkRGF0YSA9IGRhdGFcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgY2xlYXJDbG9uZWREYXRhKHRvLCBmcm9tKSB7XG4gICAgICAvLyBPbmx5IGNsZWFyIGlmIHRoZSB3YXRjaGVkIHNvdXJjZURhdGEgaXRzZWxmIGNoYW5nZXMgaW4gdGhlIGZvcm0uXG4gICAgICBpZiAodG8gIT09IGZyb20pIHtcbiAgICAgICAgdGhpcy5jbG9uZWREYXRhID0gdW5kZWZpbmVkXG4gICAgICB9XG4gICAgfSxcblxuICAgIGFzeW5jIGNhbmNlbCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmNsb3NlKClcbiAgICB9LFxuXG4gICAgYXN5bmMgY2xvc2UoKSB7XG4gICAgICByZXR1cm4gdGhpcy5uYXZpZ2F0ZSh0aGlzLnBhcmVudFJvdXRlQ29tcG9uZW50LnBhdGgpXG4gICAgfSxcblxuICAgIGdldFN1Ym1pdFZlcmIocHJlc2VudCA9IHRydWUpIHtcbiAgICAgIHJldHVybiB0aGlzLmlzQ3JlYXRpbmdcbiAgICAgICAgPyBwcmVzZW50XG4gICAgICAgICAgPyAnY3JlYXRlJ1xuICAgICAgICAgIDogJ2NyZWF0ZWQnXG4gICAgICAgIDogcHJlc2VudFxuICAgICAgICAgID8gJ3N1Ym1pdCdcbiAgICAgICAgICA6ICdzdWJtaXR0ZWQnXG4gICAgfSxcblxuICAgIGFzeW5jIHN1Ym1pdChidXR0b24sIHsgdmFsaWRhdGUgPSB0cnVlLCBjbG9zZUZvcm0gPSBmYWxzZSB9ID0ge30pIHtcbiAgICAgIGlmICh2YWxpZGF0ZSAmJiAhdGhpcy52YWxpZGF0ZUFsbCgpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgfVxuXG4gICAgICBjb25zdCBnZXRWZXJiID0gcHJlc2VudCA9PiB0aGlzLnZlcmJzW3RoaXMuZ2V0U3VibWl0VmVyYihwcmVzZW50KV1cblxuICAgICAgLy8gQWxsb3cgYnV0dG9ucyB0byBvdmVycmlkZSBib3RoIG1ldGhvZCBhbmQgcmVzb3VyY2UgcGF0aCB0byBzdWJtaXQgdG86XG4gICAgICBjb25zdCBidXR0b25SZXNvdXJjZSA9IGdldFJlc291cmNlKGJ1dHRvbi5zY2hlbWEucmVzb3VyY2UsIHtcbiAgICAgICAgcGFyZW50OiB0aGlzLnJlc291cmNlXG4gICAgICB9KVxuICAgICAgY29uc3QgcmVzb3VyY2UgPSBidXR0b25SZXNvdXJjZSB8fCB0aGlzLnJlc291cmNlXG4gICAgICBjb25zdCBtZXRob2QgPSByZXNvdXJjZT8ubWV0aG9kIHx8IHRoaXMubWV0aG9kXG4gICAgICBjb25zdCBkYXRhID0gdGhpcy5nZXRQYXlsb2FkRGF0YShidXR0b24sIG1ldGhvZClcbiAgICAgIGxldCBzdWNjZXNzXG4gICAgICBpZiAoIWJ1dHRvblJlc291cmNlICYmIHRoaXMuaXNUcmFuc2llbnQpIHtcbiAgICAgICAgc3VjY2VzcyA9IGF3YWl0IHRoaXMuc3VibWl0VHJhbnNpZW50KGJ1dHRvbiwgcmVzb3VyY2UsIG1ldGhvZCwgZGF0YSwge1xuICAgICAgICAgIG9uU3VjY2VzczogKCkgPT4gdGhpcy5lbWl0U2NoZW1hRXZlbnQodGhpcy5nZXRTdWJtaXRWZXJiKCkpLFxuICAgICAgICAgIG9uRXJyb3I6IGVycm9yID0+XG4gICAgICAgICAgICB0aGlzLmVtaXRTY2hlbWFFdmVudCgnZXJyb3InLCB7XG4gICAgICAgICAgICAgIGNvbnRleHQ6IHsgZXJyb3IgfVxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgbm90aWZ5U3VjY2VzczogKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgdmVyYiA9IGdldFZlcmIoZmFsc2UpXG4gICAgICAgICAgICB0aGlzLm5vdGlmeSh7XG4gICAgICAgICAgICAgIHR5cGU6ICdpbmZvJyxcbiAgICAgICAgICAgICAgdGl0bGU6IHRoaXMuaXNDcmVhdGluZ1xuICAgICAgICAgICAgICAgID8gYEl0ZW0gJHtjYXBpdGFsaXplKHZlcmIpfWBcbiAgICAgICAgICAgICAgICA6IGBDaGFuZ2UgJHtjYXBpdGFsaXplKHZlcmIpfWAsXG4gICAgICAgICAgICAgIHRleHQ6IFtcbiAgICAgICAgICAgICAgICB0aGlzLmlzQ3JlYXRpbmdcbiAgICAgICAgICAgICAgICAgID8gYCR7dGhpcy5pdGVtTGFiZWx9IHdhcyAke3ZlcmJ9LmBcbiAgICAgICAgICAgICAgICAgIDogYENoYW5nZXMgdG8gJHt0aGlzLml0ZW1MYWJlbH0gd2VyZSAke3ZlcmJ9LmAsXG4gICAgICAgICAgICAgICAgdGhpcy50cmFuc2llbnROb3RlXG4gICAgICAgICAgICAgIF1cbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfSxcbiAgICAgICAgICBub3RpZnlFcnJvcjogKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgdmVyYiA9IGdldFZlcmIodHJ1ZSlcbiAgICAgICAgICAgIHRoaXMubm90aWZ5KHtcbiAgICAgICAgICAgICAgdHlwZTogJ2Vycm9yJyxcbiAgICAgICAgICAgICAgdGl0bGU6ICdSZXF1ZXN0IEVycm9yJyxcbiAgICAgICAgICAgICAgdGV4dDogYFVuYWJsZSB0byAke3ZlcmJ9ICR7dGhpcy5pdGVtTGFiZWx9LmBcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3VjY2VzcyA9IGF3YWl0IHRoaXMuc3VibWl0UmVzb3VyY2UoYnV0dG9uLCByZXNvdXJjZSwgbWV0aG9kLCBkYXRhLCB7XG4gICAgICAgICAgc2V0RGF0YTogdHJ1ZSxcbiAgICAgICAgICBvblN1Y2Nlc3M6ICgpID0+IHRoaXMuZW1pdFNjaGVtYUV2ZW50KHRoaXMuZ2V0U3VibWl0VmVyYigpKSxcbiAgICAgICAgICBvbkVycm9yOiBlcnJvciA9PlxuICAgICAgICAgICAgdGhpcy5lbWl0U2NoZW1hRXZlbnQoJ2Vycm9yJywge1xuICAgICAgICAgICAgICBjb250ZXh0OiB7IGVycm9yIH1cbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgIG5vdGlmeVN1Y2Nlc3M6ICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHZlcmIgPSBnZXRWZXJiKGZhbHNlKVxuICAgICAgICAgICAgdGhpcy5ub3RpZnkoe1xuICAgICAgICAgICAgICB0eXBlOiAnc3VjY2VzcycsXG4gICAgICAgICAgICAgIHRpdGxlOiBgU3VjY2Vzc2Z1bGx5ICR7Y2FwaXRhbGl6ZSh2ZXJiKX1gLFxuICAgICAgICAgICAgICB0ZXh0OiBgJHt0aGlzLml0ZW1MYWJlbH0gd2FzICR7dmVyYn0uYFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9LFxuICAgICAgICAgIG5vdGlmeUVycm9yOiBlcnJvciA9PiB7XG4gICAgICAgICAgICBjb25zdCB2ZXJiID0gZ2V0VmVyYih0cnVlKVxuICAgICAgICAgICAgdGhpcy5ub3RpZnkoe1xuICAgICAgICAgICAgICB0eXBlOiAnZXJyb3InLFxuICAgICAgICAgICAgICB0aXRsZTogJ1JlcXVlc3QgRXJyb3InLFxuICAgICAgICAgICAgICB0ZXh0OiBbXG4gICAgICAgICAgICAgICAgYFVuYWJsZSB0byAke3ZlcmJ9ICR7dGhpcy5pdGVtTGFiZWx9JHtlcnJvciA/ICc6JyA6ICcnfWAsXG4gICAgICAgICAgICAgICAgZXJyb3I/Lm1lc3NhZ2UgfHwgZXJyb3JcbiAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgICBpZiAoc3VjY2Vzcykge1xuICAgICAgICB0aGlzLnJlc2V0VmFsaWRhdGlvbigpXG4gICAgICAgIGlmIChjbG9zZUZvcm0gfHwgYnV0dG9uLmNsb3NlRm9ybSkge1xuICAgICAgICAgIHRoaXMuY2xvc2UoKVxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuaXNDcmVhdGluZykge1xuICAgICAgICAgIC8vIFJlZGlyZWN0IHRvIHRoZSBmb3JtIGVkaXRpbmcgdGhlIG5ld2x5IGNyZWF0ZWQgaXRlbTpcbiAgICAgICAgICBjb25zdCBpZCA9IHRoaXMuZ2V0SXRlbUlkKHRoaXMuc2NoZW1hLCB0aGlzLmRhdGEpXG4gICAgICAgICAgdGhpcy4kcm91dGVyLnJlcGxhY2Uoe1xuICAgICAgICAgICAgcGF0aDogcmVzb2x2ZVBhdGgoYCR7dGhpcy5wYXRofS8uLi8ke2lkfWApLFxuICAgICAgICAgICAgLy8gUHJlc2VydmUgaGFzaCBmb3IgdGFiczpcbiAgICAgICAgICAgIGhhc2g6IHRoaXMuJHJvdXRlLmhhc2hcbiAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gc3VjY2Vzc1xuICAgIH0sXG5cbiAgICBhc3luYyBzdWJtaXRUcmFuc2llbnQoYnV0dG9uLCBfcmVzb3VyY2UsIF9tZXRob2QsIGRhdGEsIHtcbiAgICAgIG9uU3VjY2VzcyxcbiAgICAgIG9uRXJyb3IsXG4gICAgICBub3RpZnlTdWNjZXNzLFxuICAgICAgbm90aWZ5RXJyb3JcbiAgICB9KSB7XG4gICAgICAvLyBIYW5kbGUgdGhlIGRlZmF1bHQgXCJzdWJtaXR0aW5nXCIgb2YgdHJhbnNpZW50LCBuZXN0ZWQgZGF0YTpcbiAgICAgIGNvbnN0IHN1Y2Nlc3MgPSB0aGlzLmlzQ3JlYXRpbmdcbiAgICAgICAgPyB0aGlzLmFkZFNvdXJjZURhdGEoZGF0YSlcbiAgICAgICAgOiB0aGlzLnNldFNvdXJjZURhdGEoZGF0YSlcbiAgICAgIGlmIChzdWNjZXNzKSB7XG4gICAgICAgIG9uU3VjY2Vzcz8uKClcbiAgICAgICAgYXdhaXQgdGhpcy5lbWl0QnV0dG9uRXZlbnQoYnV0dG9uLCAnc3VjY2VzcycsIHtcbiAgICAgICAgICBub3RpZnk6IG5vdGlmeVN1Y2Nlc3NcbiAgICAgICAgfSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGVycm9yID0gJ0NvdWxkIG5vdCBzdWJtaXQgdHJhbnNpZW50IGl0ZW0nXG4gICAgICAgIG9uRXJyb3I/LihlcnJvcilcbiAgICAgICAgYXdhaXQgdGhpcy5lbWl0QnV0dG9uRXZlbnQoYnV0dG9uLCAnZXJyb3InLCB7XG4gICAgICAgICAgbm90aWZ5OiBub3RpZnlFcnJvcixcbiAgICAgICAgICBlcnJvclxuICAgICAgICB9KVxuICAgICAgfVxuICAgICAgcmV0dXJuIHN1Y2Nlc3NcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IERpdG9Gb3JtIGZyb20gJy4vRGl0b0Zvcm0udnVlJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ0RpdG9Gb3JtTmVzdGVkJywge1xuICBleHRlbmRzOiBEaXRvRm9ybVxufSlcbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbi5kaXRvLWZvcm0tbmVzdGVkIHtcbiAgLy8gTm8gc2Nyb2xsaW5nIGluc2lkZSBuZXN0ZWQgZm9ybXMsIGFuZCBwcmV2ZW50IG9wZW4gLm11bHRpc2VsZWN0IGZyb21cbiAgLy8gYmVpbmcgY3JvcHBlZC5cbiAgb3ZlcmZsb3c6IHZpc2libGU7XG59XG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbi5kaXRvLWVycm9ycyhcbiAgdi1pZj1cImVycm9yc1wiXG4pXG4gIHVsXG4gICAgbGkoXG4gICAgICB2LWZvcj1cImVycm9yIG9mIGVycm9yc1wiXG4gICAgKSB7eyBlcnJvciB9fVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCB0aXBweSBmcm9tICd0aXBweS5qcydcbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgeyBtYXJrUmF3IH0gZnJvbSAndnVlJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ0RpdG9FcnJvcnMnLCB7XG4gIHByb3BzOiB7XG4gICAgZXJyb3JzOiB7IHR5cGU6IEFycmF5LCBkZWZhdWx0OiBudWxsIH1cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICB0aXA6IG51bGxcbiAgICB9XG4gIH0sXG5cbiAgd2F0Y2g6IHtcbiAgICBlcnJvcnMoKSB7XG4gICAgICB0aGlzLiRuZXh0VGljayh0aGlzLnVwZGF0ZUVycm9ycylcbiAgICB9XG4gIH0sXG5cbiAgdW5tb3VudGVkKCkge1xuICAgIHRoaXMudGlwPy5kZXN0cm95KClcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgdXBkYXRlRXJyb3JzKCkge1xuICAgICAgbGV0IHsgdGlwIH0gPSB0aGlzXG4gICAgICB0aXA/LmhpZGUoKVxuICAgICAgaWYgKHRoaXMuZXJyb3JzKSB7XG4gICAgICAgIHRpcCA9IHRoaXMudGlwID8/PSBtYXJrUmF3KHRpcHB5KHRoaXMuJGVsLmNsb3Nlc3QoJy5kaXRvLWNvbnRhaW5lcicpKSlcbiAgICAgICAgdGlwLnNldFByb3BzKHtcbiAgICAgICAgICBjb250ZW50OiB0aGlzLmVycm9ycy5qb2luKCdcXG4nKSxcbiAgICAgICAgICB0aGVtZTogJ2Vycm9yJyxcbiAgICAgICAgICB0cmlnZ2VyOiAnbWFudWFsJyxcbiAgICAgICAgICBhcHBlbmRUbzogJ3BhcmVudCcsXG4gICAgICAgICAgcGxhY2VtZW50OiAnYm90dG9tLXN0YXJ0JyxcbiAgICAgICAgICBhbmltYXRpb246ICdzaGlmdC1hd2F5LXN1YnRsZScsXG4gICAgICAgICAgcG9wcGVyT3B0aW9uczoge1xuICAgICAgICAgICAgbW9kaWZpZXJzOiBbXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnZmxpcCcsXG4gICAgICAgICAgICAgICAgZW5hYmxlZDogZmFsc2VcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgXVxuICAgICAgICAgIH0sXG4gICAgICAgICAgaW50ZXJhY3RpdmU6IHRydWUsXG4gICAgICAgICAgaGlkZU9uQ2xpY2s6IGZhbHNlLFxuICAgICAgICAgIG9mZnNldDogWzMsIDNdLCAvLyAxLzIgZm9ybS1zcGFjaW5nXG4gICAgICAgICAgekluZGV4OiAxXG4gICAgICAgIH0pXG4gICAgICAgIHRpcC5wb3BwZXIuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJywgKCkgPT4gdGlwLmhpZGUoKSlcbiAgICAgICAgdGlwLnNob3coKVxuICAgICAgfVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5cbi5kaXRvLWVycm9ycyB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgdmlzaWJpbGl0eTogaGlkZGVuO1xuXG4gIHVsIHtcbiAgICBjb2xvcjogJGNvbG9yLWVycm9yO1xuICB9XG59XG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbi5kaXRvLXNjb3Blc1xuICBSb3V0ZXJMaW5rKFxuICAgIHYtZm9yPVwiKHNjb3BlLCBrZXkpIGluIHNjb3Blc1wiXG4gICAgOmtleT1cImtleVwiXG4gICAgdi1zbG90PVwieyBuYXZpZ2F0ZSB9XCJcbiAgICA6dG89XCJnZXRTY29wZUxpbmsoc2NvcGUpXCJcbiAgICBjdXN0b21cbiAgKVxuICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbihcbiAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgOmNsYXNzPVwieyAnZGl0by1zZWxlY3RlZCc6IHNjb3BlLm5hbWUgPT09IHF1ZXJ5LnNjb3BlIH1cIlxuICAgICAgOnRpdGxlPVwic2NvcGUuaGludCB8fCBnZXRMYWJlbChzY29wZSlcIlxuICAgICAgQGNsaWNrPVwibmF2aWdhdGVcIlxuICAgICkge3sgZ2V0TGFiZWwoc2NvcGUpIH19XG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdEaXRvU2NvcGVzJywge1xuICBwcm9wczoge1xuICAgIHF1ZXJ5OiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBzY29wZXM6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGdldFNjb3BlTGluayhzY29wZSkge1xuICAgICAgY29uc3QgcXVlcnkgPSB7IC4uLnRoaXMucXVlcnksIHNjb3BlOiBzY29wZS5uYW1lIH1cbiAgICAgIGlmIChxdWVyeS5wYWdlKSB7XG4gICAgICAgIHF1ZXJ5LnBhZ2UgPSAwXG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy5nZXRRdWVyeUxpbmsocXVlcnkpXG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLmRpdG8tc2NvcGVzIHtcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgZGlzcGxheTogZmxleDtcblxuICAuZGl0by1idXR0b24ge1xuICAgIEBpbmNsdWRlIGVsbGlwc2lzO1xuXG4gICAgYm9yZGVyLXJhZGl1czogMDtcbiAgICAvLyBBIGJpdCBtb3JlIHRoYW4gdGhlIHdpZHRoIG9mIGVsbGlwc2lzLCB0byBwcmV2ZW50IHJlcGxhY2luZyBzaG9ydCB3b3Jkc1xuICAgIC8vIHdpdGggZWxsaXBzaXMuXG4gICAgbWluLXdpZHRoOiAzZW07XG4gICAgZmxleDogMCAxIGF1dG87XG5cbiAgICAmOmZpcnN0LWNoaWxkIHtcbiAgICAgIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6IDFlbTtcbiAgICAgIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDFlbTtcbiAgICAgIHBhZGRpbmctbGVmdDogMWVtO1xuICAgIH1cblxuICAgICY6bGFzdC1jaGlsZCB7XG4gICAgICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogMWVtO1xuICAgICAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IDFlbTtcbiAgICAgIHBhZGRpbmctcmlnaHQ6IDFlbTtcbiAgICB9XG5cbiAgICAmICsgLmRpdG8tYnV0dG9uIHtcbiAgICAgIG1hcmdpbi1sZWZ0OiAtMXB4O1xuICAgIH0gLy8gRG9uJ3QgY292ZXIgdGhlIGZvY3VzZWQgYm9yZGVyIG9mIGJ1dHRvbnM6XG4gICAgJjpmb2N1cyB7XG4gICAgICB6LWluZGV4OiAxO1xuICAgIH1cbiAgfVxufVxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG5QYWdpbmF0aW9uKFxuICB2LW1vZGVsOnBhZ2U9XCJwYWdlXCJcbiAgOnBhZ2VTaXplPVwibGltaXRcIlxuICA6dG90YWw9XCJ0b3RhbFwiXG4pXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IHsgUGFnaW5hdGlvbiB9IGZyb20gJ0BkaXRvanMvdWkvc3JjJ1xuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdEaXRvUGFnaW5hdGlvbicsIHtcbiAgY29tcG9uZW50czogeyBQYWdpbmF0aW9uIH0sXG5cbiAgcHJvcHM6IHtcbiAgICBxdWVyeTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgbGltaXQ6IHsgdHlwZTogTnVtYmVyLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHRvdGFsOiB7IHR5cGU6IE51bWJlciwgcmVxdWlyZWQ6IHRydWUgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgcGFnZToge1xuICAgICAgZ2V0KCkge1xuICAgICAgICByZXR1cm4gKCt0aGlzLnF1ZXJ5LnBhZ2UgfHwgMCkgKyAxXG4gICAgICB9LFxuXG4gICAgICBzZXQocGFnZSkge1xuICAgICAgICBpZiAodGhpcy5wYWdlICE9PSBwYWdlKSB7XG4gICAgICAgICAgdGhpcy4kcm91dGVyLnB1c2goXG4gICAgICAgICAgICB0aGlzLmdldFF1ZXJ5TGluayh7XG4gICAgICAgICAgICAgIC4uLnRoaXMucXVlcnksXG4gICAgICAgICAgICAgIHBhZ2U6IHBhZ2UgLSAxXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IHtcbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgaXNEcmFnZ2luZzogZmFsc2VcbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGdldERyYWdnYWJsZU9wdGlvbnMoZm9yY2VGYWxsYmFjayA9IGZhbHNlKSB7XG4gICAgICBjb25zdCBwcmVmaXggPSAnZGl0by1kcmFnZ2FibGUnXG4gICAgICByZXR1cm4ge1xuICAgICAgICBhbmltYXRpb246IDE1MCxcbiAgICAgICAgaGFuZGxlOiAnLmRpdG8tYnV0dG9uLWRyYWcnLFxuICAgICAgICBkcmFnQ2xhc3M6IGAke3ByZWZpeH1fX2RyYWdgLFxuICAgICAgICBjaG9zZW5DbGFzczogYCR7cHJlZml4fV9fY2hvc2VuYCxcbiAgICAgICAgZ2hvc3RDbGFzczogYCR7cHJlZml4fV9fZ2hvc3RgLFxuICAgICAgICBmYWxsYmFja0NsYXNzOiBgJHtwcmVmaXh9X19mYWxsYmFja2AsXG4gICAgICAgIGZvcmNlRmFsbGJhY2ssXG4gICAgICAgIG9uU3RhcnQ6IHRoaXMub25TdGFydERyYWcsXG4gICAgICAgIG9uRW5kOiB0aGlzLm9uRW5kRHJhZ1xuICAgICAgfVxuICAgIH0sXG5cbiAgICBvblN0YXJ0RHJhZygpIHtcbiAgICAgIHRoaXMuaXNEcmFnZ2luZyA9IHRydWVcbiAgICB9LFxuXG4gICAgb25FbmREcmFnKHsgb2xkSW5kZXgsIG5ld0luZGV4IH0pIHtcbiAgICAgIHRoaXMuaXNEcmFnZ2luZyA9IGZhbHNlXG4gICAgICBpZiAob2xkSW5kZXggIT09IG5ld0luZGV4KSB7XG4gICAgICAgIHRoaXMub25DaGFuZ2UoKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICB1cGRhdGVPcmRlcihzb3VyY2VTY2hlbWEsIGxpc3QsIHBhZ2luYXRpb25SYW5nZSkge1xuICAgICAgY29uc3QgeyBvcmRlcktleSB9ID0gc291cmNlU2NoZW1hXG4gICAgICBpZiAob3JkZXJLZXkpIHtcbiAgICAgICAgLy8gUmVvcmRlciB0aGUgY2hhbmdlZCBlbnRyaWVzIGJ5IHRoZWlyIG9yZGVyIGtleSwgdGFraW5nIHBhZ2luYXRpb25cbiAgICAgICAgLy8gb2Zmc2V0cyBpbnRvIGFjY291bnQ6XG4gICAgICAgIGNvbnN0IG9mZnNldCA9IHBhZ2luYXRpb25SYW5nZT8uWzBdIHx8IDBcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsaXN0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgbGlzdFtpXVtvcmRlcktleV0gPSBpICsgb2Zmc2V0XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBsaXN0XG4gICAgfVxuICB9XG59XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuLmRpdG8tdHJlZS1pdGVtKFxuICA6aWQ9XCJkYXRhUGF0aFwiXG4gIDpjbGFzcz1ge1xuICAgICdkaXRvLWRyYWdnaW5nJzogaXNEcmFnZ2luZyxcbiAgICAnZGl0by1hY3RpdmUnOiBhY3RpdmVcbiAgfWBcbiAgOnN0eWxlPVwibGV2ZWwgPiAwICYmIHsgJy0tbGV2ZWwnOiBsZXZlbCB9XCJcbilcbiAgLmRpdG8tdHJlZS1oZWFkZXIoXG4gICAgdi1pZj1cImxhYmVsXCJcbiAgKVxuICAgIC5kaXRvLXRyZWUtYnJhbmNoKFxuICAgICAgdi1pZj1cIm51bUVudHJpZXNcIlxuICAgICAgQGNsaWNrLnN0b3A9XCJvcGVuZWQgPSAhb3BlbmVkXCJcbiAgICApXG4gICAgICAuZGl0by1jaGV2cm9uKFxuICAgICAgICB2LWlmPVwibnVtRW50cmllc1wiXG4gICAgICAgIDpjbGFzcz1cInsgJ2RpdG8tb3Blbic6IG9wZW5lZCB9XCJcbiAgICAgIClcbiAgICAgIC5kaXRvLXRyZWUtbGFiZWwoXG4gICAgICAgIHYtaHRtbD1cImxhYmVsXCJcbiAgICAgIClcbiAgICAgIC5kaXRvLXRyZWUtaW5mbyhcbiAgICAgICAgdi1pZj1cImRldGFpbHNcIlxuICAgICAgKSB7eyBkZXRhaWxzIH19XG4gICAgLmRpdG8tdHJlZS1sZWFmKFxuICAgICAgdi1lbHNlXG4gICAgKVxuICAgICAgLmRpdG8tdHJlZS1sYWJlbChcbiAgICAgICAgdi1odG1sPVwibGFiZWxcIlxuICAgICAgKVxuICAgIC5kaXRvLWJ1dHRvbnMuZGl0by1idXR0b25zLXNtYWxsKFxuICAgICAgdi1pZj1cImhhc0VkaXRCdXR0b25zXCJcbiAgICApXG4gICAgICAvLy0gRmlyZWZveCBkb2Vzbid0IGxpa2UgPGJ1dHRvbj4gaGVyZSwgc28gdXNlIDxhPiBpbnN0ZWFkOlxuICAgICAgYS5kaXRvLWJ1dHRvbihcbiAgICAgICAgdi1pZj1cImRyYWdnYWJsZVwiXG4gICAgICAgIHYtYmluZD1cImdldEJ1dHRvbkF0dHJpYnV0ZXModmVyYnMuZHJhZylcIlxuICAgICAgKVxuICAgICAgYnV0dG9uLmRpdG8tYnV0dG9uKFxuICAgICAgICB2LWlmPVwiZWRpdGFibGVcIlxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgdi1iaW5kPVwiZ2V0QnV0dG9uQXR0cmlidXRlcyh2ZXJicy5lZGl0KVwiXG4gICAgICAgIEBjbGljaz1cIm9uRWRpdFwiXG4gICAgICApXG4gICAgICBidXR0b24uZGl0by1idXR0b24oXG4gICAgICAgIHYtaWY9XCJkZWxldGFibGVcIlxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgdi1iaW5kPVwiZ2V0QnV0dG9uQXR0cmlidXRlcyh2ZXJicy5kZWxldGUpXCJcbiAgICAgICAgQGNsaWNrPVwib25EZWxldGVcIlxuICAgICAgKVxuICB0YWJsZS5kaXRvLXByb3BlcnRpZXMoXG4gICAgdi1pZj1cInByb3BlcnRpZXNcIlxuICAgIHYtc2hvdz1cIm9wZW5lZFwiXG4gIClcbiAgICB0cihcbiAgICAgIHYtZm9yPVwicHJvcGVydHkgaW4gcHJvcGVydGllc1wiXG4gICAgKVxuICAgICAgdGRcbiAgICAgICAgRGl0b0xhYmVsKFxuICAgICAgICAgIHYtaWY9XCJwcm9wZXJ0eS5sYWJlbCAhPT0gZmFsc2VcIlxuICAgICAgICAgIDpkYXRhUGF0aD1cImdldFByb3BlcnR5RGF0YVBhdGgocHJvcGVydHkpXCJcbiAgICAgICAgICA6bGFiZWw9XCJnZXRMYWJlbChwcm9wZXJ0eSlcIlxuICAgICAgICApXG4gICAgICBEaXRvVGFibGVDZWxsKFxuICAgICAgICA6Y2VsbD1cInByb3BlcnR5XCJcbiAgICAgICAgOnNjaGVtYT1cInByb3BlcnR5XCJcbiAgICAgICAgOmRhdGFQYXRoPVwiZ2V0UHJvcGVydHlEYXRhUGF0aChwcm9wZXJ0eSlcIlxuICAgICAgICA6ZGF0YT1cImRhdGFcIlxuICAgICAgICA6bWV0YT1cIm5lc3RlZE1ldGFcIlxuICAgICAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICAgIClcbiAgRGl0b0RyYWdnYWJsZShcbiAgICB2LWlmPVwiY2hpbGRyZW5TY2hlbWFcIlxuICAgIHYtc2hvdz1cIm9wZW5lZFwiXG4gICAgOm1vZGVsVmFsdWU9XCJ1cGRhdGVPcmRlcihjaGlsZHJlblNjaGVtYSwgY2hpbGRyZW5MaXN0KVwiXG4gICAgOm9wdGlvbnM9XCJnZXREcmFnZ2FibGVPcHRpb25zKHRydWUpXCJcbiAgICA6ZHJhZ2dhYmxlPVwiY2hpbGRyZW5EcmFnZ2FibGVcIlxuICAgIEB1cGRhdGU6bW9kZWxWYWx1ZT1cInZhbHVlID0+IChjaGlsZHJlbkxpc3QgPSB2YWx1ZSlcIlxuICApXG4gICAgRGl0b1RyZWVJdGVtKFxuICAgICAgdi1mb3I9XCIoaXRlbSwgaW5kZXgpIGluIGNoaWxkcmVuSXRlbXNcIlxuICAgICAgOmtleT1cImdldEl0ZW1VaWQoY2hpbGRyZW5TY2hlbWEsIGl0ZW0uZGF0YSlcIlxuICAgICAgOnNjaGVtYT1cImNoaWxkcmVuU2NoZW1hXCJcbiAgICAgIDpkYXRhUGF0aD1cImdldEl0ZW1EYXRhUGF0aChjaGlsZHJlblNjaGVtYSwgaW5kZXgpXCJcbiAgICAgIDpkYXRhPVwiaXRlbS5kYXRhXCJcbiAgICAgIDpwYXRoPVwiaXRlbS5wYXRoXCJcbiAgICAgIDpvcGVuPVwiaXRlbS5vcGVuXCJcbiAgICAgIDphY3RpdmU9XCJpdGVtLmFjdGl2ZVwiXG4gICAgICA6ZHJhZ2dhYmxlPVwiY2hpbGRyZW5EcmFnZ2FibGVcIlxuICAgICAgOmxhYmVsPVwiZ2V0SXRlbUxhYmVsKGNoaWxkcmVuU2NoZW1hLCBpdGVtLmRhdGEsIHsgaW5kZXggfSlcIlxuICAgICAgOmxldmVsPVwibGV2ZWwgKyAxXCJcbiAgICApXG4gICAgLy8tIFRPRE86IENvbnZlcnQgZGl0by10cmVlLWl0ZW0gdG8gdXNlIGRpdG8tbGFiZWwgaW50ZXJuYWxseSwgYW5kIHRoZW5cbiAgICAvLy0gcGFzcyBgYXNPYmplY3Q6IHRydWVgIGluIHRoZSBgZ2V0SXRlbUxhYmVsKClgIGNhbGwgYWJvdmUuXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCBJdGVtTWl4aW4gZnJvbSAnLi4vbWl4aW5zL0l0ZW1NaXhpbidcbmltcG9ydCBTb3J0YWJsZU1peGluIGZyb20gJy4uL21peGlucy9Tb3J0YWJsZU1peGluLmpzJ1xuaW1wb3J0IHsgYXBwZW5kRGF0YVBhdGggfSBmcm9tICcuLi91dGlscy9kYXRhLmpzJ1xuaW1wb3J0IHsgZ2V0U2NoZW1hQWNjZXNzb3IgfSBmcm9tICcuLi91dGlscy9hY2Nlc3Nvci5qcydcbmltcG9ydCB7IGdldE5hbWVkU2NoZW1hcywgaGFzRm9ybVNjaGVtYSB9IGZyb20gJy4uL3V0aWxzL3NjaGVtYS5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdEaXRvVHJlZUl0ZW0nLCB7XG4gIG1peGluczogW0l0ZW1NaXhpbiwgU29ydGFibGVNaXhpbl0sXG4gIGluamVjdDogWydjb250YWluZXInXSxcblxuICBwcm9wczoge1xuICAgIHNjaGVtYTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgZGF0YVBhdGg6IHsgdHlwZTogU3RyaW5nLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGRhdGE6IHsgdHlwZTogW0FycmF5LCBPYmplY3RdLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgcGF0aDogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6ICcnIH0sXG4gICAgb3BlbjogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGFjdGl2ZTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGRyYWdnYWJsZTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGxhYmVsOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogbnVsbCB9LFxuICAgIGxldmVsOiB7IHR5cGU6IE51bWJlciwgZGVmYXVsdDogMCB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgb3BlbmVkOiB0aGlzLm9wZW4gfHwgdGhpcy5zY2hlbWEub3BlblxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIG1ldGEoKSB7XG4gICAgICByZXR1cm4gdGhpcy5jb250YWluZXIubWV0YVxuICAgIH0sXG5cbiAgICBzdG9yZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLmNvbnRhaW5lci5zdG9yZVxuICAgIH0sXG5cbiAgICBkaXNhYmxlZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmNvbnRhaW5lci5kaXNhYmxlZFxuICAgIH0sXG5cbiAgICBuZXN0ZWRNZXRhKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4udGhpcy5tZXRhLFxuICAgICAgICBzY2hlbWE6IHRoaXMuc2NoZW1hXG4gICAgICB9XG4gICAgfSxcblxuICAgIHByb3BlcnRpZXMoKSB7XG4gICAgICByZXR1cm4gZ2V0TmFtZWRTY2hlbWFzKHRoaXMuc2NoZW1hLnByb3BlcnRpZXMpXG4gICAgfSxcblxuICAgIC8vIFRPRE86IFNob3VsZCB0aGlzIGJlIG5hbWVkIGBzb3VyY2VTY2hlbWFgIGluc3RlYWQ/IFVzZSBTb3VyY2VNaXhpbj9cbiAgICBjaGlsZHJlblNjaGVtYSgpIHtcbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYS5jaGlsZHJlblxuICAgIH0sXG5cbiAgICBjaGlsZHJlbkxpc3Q6IHtcbiAgICAgIGdldCgpIHtcbiAgICAgICAgY29uc3QgbmFtZSA9IHRoaXMuY2hpbGRyZW5TY2hlbWE/Lm5hbWVcbiAgICAgICAgcmV0dXJuIG5hbWUgJiYgdGhpcy5kYXRhW25hbWVdXG4gICAgICB9LFxuXG4gICAgICBzZXQodmFsdWUpIHtcbiAgICAgICAgY29uc3QgbmFtZSA9IHRoaXMuY2hpbGRyZW5TY2hlbWE/Lm5hbWVcbiAgICAgICAgaWYgKG5hbWUpIHtcbiAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgdnVlL25vLW11dGF0aW5nLXByb3BzXG4gICAgICAgICAgdGhpcy5kYXRhW25hbWVdID0gdmFsdWVcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBjaGlsZHJlbkRyYWdnYWJsZSgpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIHRoaXMuY2hpbGRyZW5MaXN0Py5sZW5ndGggPiAxICYmXG4gICAgICAgIHRoaXMuZ2V0U2NoZW1hVmFsdWUoJ2RyYWdnYWJsZScsIHtcbiAgICAgICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgICAgIGRlZmF1bHQ6IGZhbHNlLFxuICAgICAgICAgIHNjaGVtYTogdGhpcy5jaGlsZHJlblNjaGVtYVxuICAgICAgICB9KVxuICAgICAgKVxuICAgIH0sXG5cbiAgICBudW1DaGlsZHJlbigpIHtcbiAgICAgIHJldHVybiB0aGlzLmNoaWxkcmVuTGlzdD8ubGVuZ3RoIHx8IDBcbiAgICB9LFxuXG4gICAgbnVtUHJvcGVydGllcygpIHtcbiAgICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXM/Lmxlbmd0aCB8fCAwXG4gICAgfSxcblxuICAgIG51bUVudHJpZXMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5udW1Qcm9wZXJ0aWVzICsgdGhpcy5udW1DaGlsZHJlblxuICAgIH0sXG5cbiAgICBjaGlsZHJlbkl0ZW1zKCkge1xuICAgICAgY29uc3QgeyBjaGlsZHJlblNjaGVtYSwgY2hpbGRyZW5MaXN0IH0gPSB0aGlzXG4gICAgICBpZiAoY2hpbGRyZW5TY2hlbWEgJiYgY2hpbGRyZW5MaXN0KSB7XG4gICAgICAgIGNvbnN0IHsgZWRpdFBhdGggfSA9IHRoaXMuY29udGFpbmVyXG4gICAgICAgIGNvbnN0IGNoaWxkcmVuT3BlbiA9ICF0aGlzLnBhdGggJiYgY2hpbGRyZW5TY2hlbWEub3BlblxuICAgICAgICAvLyBCdWlsZCBhIGNoaWxkcmVuIGxpc3Qgd2l0aCBjaGlsZCBtZXRhIGluZm9ybWF0aW9uIGZvciB0aGUgdGVtcGxhdGUuXG4gICAgICAgIHJldHVybiB0aGlzLnVwZGF0ZU9yZGVyKFxuICAgICAgICAgIGNoaWxkcmVuU2NoZW1hLFxuICAgICAgICAgIGNoaWxkcmVuTGlzdC5tYXAoKGRhdGEsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBwYXRoID0gKFxuICAgICAgICAgICAgICBjaGlsZHJlblNjaGVtYS5wYXRoICYmXG4gICAgICAgICAgICAgIGAke3RoaXMucGF0aH0vJHtjaGlsZHJlblNjaGVtYS5wYXRofS8ke2luZGV4fWBcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIGNvbnN0IG9wZW4gPSAoXG4gICAgICAgICAgICAgIGNoaWxkcmVuT3BlbiB8fFxuICAgICAgICAgICAgICAvLyBPbmx5IGNvdW50IGFzIFwiaW4gZWRpdCBwYXRoXCIgd2hlbiBpdCdzIG5vdCB0aGUgZnVsbCBlZGl0IHBhdGguXG4gICAgICAgICAgICAgIGVkaXRQYXRoLnN0YXJ0c1dpdGgocGF0aCkgJiYgcGF0aC5sZW5ndGggPCBlZGl0UGF0aC5sZW5ndGhcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIGNvbnN0IGFjdGl2ZSA9IGVkaXRQYXRoID09PSBwYXRoXG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBkYXRhLFxuICAgICAgICAgICAgICBwYXRoLFxuICAgICAgICAgICAgICBvcGVuLFxuICAgICAgICAgICAgICBhY3RpdmVcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KVxuICAgICAgICApXG4gICAgICB9XG4gICAgICByZXR1cm4gW11cbiAgICB9LFxuXG4gICAgZGV0YWlscygpIHtcbiAgICAgIGNvbnN0IHsgbnVtQ2hpbGRyZW4gfSA9IHRoaXNcbiAgICAgIHJldHVybiAoXG4gICAgICAgIG51bUNoaWxkcmVuICYmXG4gICAgICAgIGAke251bUNoaWxkcmVufSAke1xuICAgICAgICAgIG51bUNoaWxkcmVuID09PSAxID8gJ2l0ZW0nIDogJ2l0ZW1zJ1xuICAgICAgICB9YFxuICAgICAgKVxuICAgIH0sXG5cbiAgICBoYXNFZGl0QnV0dG9ucygpIHtcbiAgICAgIHJldHVybiB0aGlzLmRyYWdnYWJsZSB8fCB0aGlzLmVkaXRhYmxlIHx8IHRoaXMuZGVsZXRhYmxlXG4gICAgfSxcblxuICAgIC8vIFRPRE86IFN1cHBvcnQgY3JlYXRhYmxlIVxuICAgIC8vIFRPRE86IEFkZCBzdXBwb3J0IGZvciBjcmVhdGFibGUsIGVkaXRhYmxlIGFuZCBkZWxldGFibGUgb3ZlcnJpZGVzIG9uIHRoZVxuICAgIC8vIGFzc29jaWF0ZWQgZm9ybXMsIGp1c3QgbGlrZSBpbiBgVHlwZUxpc3RgIGFuZCBgVHlwZU9iamVjdGAsIHRocm91Z2hcbiAgICAvLyBgRGl0b0VkaXRCdXR0b25zYC4gSXQgd291bGQgYmUgYmVzdCB0byB1c2UgYERpdG9FZGl0QnV0dG9uc2AgaGVyZSB0b28uXG4gICAgY3JlYXRhYmxlOiBnZXRTY2hlbWFBY2Nlc3NvcignY3JlYXRhYmxlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlLFxuICAgICAgZ2V0KGNyZWF0YWJsZSkge1xuICAgICAgICByZXR1cm4gY3JlYXRhYmxlICYmIGhhc0Zvcm1TY2hlbWEodGhpcy5zY2hlbWEpXG4gICAgICB9XG4gICAgfSksXG5cbiAgICBlZGl0YWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ2VkaXRhYmxlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlLFxuICAgICAgZ2V0KGVkaXRhYmxlKSB7XG4gICAgICAgIHJldHVybiBlZGl0YWJsZSAmJiBoYXNGb3JtU2NoZW1hKHRoaXMuc2NoZW1hKVxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgZGVsZXRhYmxlOiBnZXRTY2hlbWFBY2Nlc3NvcignZGVsZXRhYmxlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfSlcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZ2V0UHJvcGVydHlEYXRhUGF0aChwcm9wZXJ0eSkge1xuICAgICAgcmV0dXJuIGFwcGVuZERhdGFQYXRoKHRoaXMuZGF0YVBhdGgsIHByb3BlcnR5Lm5hbWUpXG4gICAgfSxcblxuICAgIG9uRWRpdCgpIHtcbiAgICAgIC8vIEFsbCB3ZSBnb3QgdG8gZG8gaXMgcHVzaCB0aGUgcmlnaHQgZWRpdCBwYXRoIHRvIHRoZSByb3V0ZXIsIHRoZSByZXN0XG4gICAgICAvLyBpcyBoYW5kbGVkIGJ5IG91ciByb3V0ZXMsIGFsbG93aW5nIHJlbG9hZHMgYXMgd2VsbC5cbiAgICAgIHRoaXMuJHJvdXRlci5wdXNoKHtcbiAgICAgICAgcGF0aDogYCR7dGhpcy5jb250YWluZXIucGF0aH0ke3RoaXMucGF0aH1gLFxuICAgICAgICAvLyBQcmVzZXJ2ZSBjdXJyZW50IHF1ZXJ5XG4gICAgICAgIHF1ZXJ5OiB0aGlzLiRyb3V0ZS5xdWVyeVxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgb25EZWxldGUoKSB7XG4gICAgICAvLyBUT0RPOiBJbXBsZW1lbnQhXG4gICAgfSxcblxuICAgIG9uQ2hhbmdlKCkge1xuICAgICAgdGhpcy5jb250YWluZXIub25DaGFuZ2UoKVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5cbi5kaXRvLXRyZWUtaXRlbSB7XG4gIC0tY2hldnJvbi1pbmRlbnQ6ICN7JGNoZXZyb24taW5kZW50fTtcblxuICA+IC5kaXRvLXRyZWUtaGVhZGVyIHtcbiAgICA+IC5kaXRvLXRyZWUtYnJhbmNoLFxuICAgID4gLmRpdG8tdHJlZS1sZWFmIHtcbiAgICAgIC8vIFVzZSBgLS1sZXZlbGAgQ1NTIHZhcmlhYmxlIHRvIGNhbGN1bGF0ZWQgdGhlIGFjY3VtdWxhdGVkIGluZGVudFxuICAgICAgLy8gcGFkZGluZyBkaXJlY3RseSBpbnN0ZWFkIG9mIGhhdmluZyBpdCBhY2N1bXVsYXRlIGluIG5lc3RlZCBDU1MuXG4gICAgICAvLyBUaGlzIHdheSwgd2UgY2FuIGtlZXAgdGhlIC5kaXRvLWFjdGl2ZSBhcmVhIGNvdmVyIHRoZSBmdWxsIHdpZHRoOlxuICAgICAgcGFkZGluZy1sZWZ0OiBjYWxjKHZhcigtLWNoZXZyb24taW5kZW50KSAqICh2YXIoLS1sZXZlbCwgMSkgLSAxKSk7XG4gICAgfVxuICB9XG5cbiAgLmRpdG8tdHJlZS1icmFuY2gge1xuICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgfVxuXG4gIC5kaXRvLXRyZWUtaGVhZGVyIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgfVxuXG4gIC5kaXRvLXRyZWUtYnJhbmNoLFxuICAuZGl0by10cmVlLWxlYWYge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgZmxleDogYXV0bztcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgbWFyZ2luOiAxcHggMDtcbiAgICBAaW5jbHVkZSB1c2VyLXNlbGVjdChub25lKTtcbiAgfVxuXG4gIC5kaXRvLXRyZWUtbGFiZWwsXG4gIC5kaXRvLXRyZWUtaW5mbyB7XG4gICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgfVxuXG4gIC5kaXRvLXRyZWUtaW5mbyB7XG4gICAgcGFkZGluZy1sZWZ0OiAwLjM1ZW07XG4gICAgY29sb3I6IHJnYmEoJGNvbG9yLWJsYWNrLCAwLjIpO1xuICB9XG5cbiAgLmRpdG8tYnV0dG9ucyB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICB2aXNpYmlsaXR5OiBoaWRkZW47XG4gICAgaGVpZ2h0OiAxMDAlO1xuICAgIG1hcmdpbjogMXB4IDAgMXB4IDFlbTtcbiAgfVxuXG4gIC5kaXRvLXRyZWUtaGVhZGVyOmhvdmVyIHtcbiAgICA+IC5kaXRvLWJ1dHRvbnMge1xuICAgICAgdmlzaWJpbGl0eTogdmlzaWJsZTtcbiAgICB9IC8vIEhpZGUgYnV0dG9ucyBkdXJpbmcgZHJhZ2dpbmdcbiAgfVxuXG4gICYuZGl0by1kcmFnZ2luZyB7XG4gICAgLmRpdG8tdHJlZS1oZWFkZXIge1xuICAgICAgPiAuZGl0by1idXR0b25zIHtcbiAgICAgICAgdmlzaWJpbGl0eTogaGlkZGVuO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gICYuZGl0by1hY3RpdmUge1xuICAgID4gLmRpdG8tdHJlZS1oZWFkZXIge1xuICAgICAgYmFja2dyb3VuZDogJGNvbG9yLWFjdGl2ZTtcbiAgICAgIHBhZGRpbmc6IDAgJGlucHV0LXBhZGRpbmctaG9yO1xuICAgICAgbWFyZ2luOiAwICgtJGlucHV0LXBhZGRpbmctaG9yKTtcblxuICAgICAgPiAuZGl0by10cmVlLWJyYW5jaCB7XG4gICAgICAgID4gLmRpdG8tY2hldnJvbjo6YmVmb3JlIHtcbiAgICAgICAgICBjb2xvcjogJGNvbG9yLXdoaXRlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgID4gKiA+IC5kaXRvLXRyZWUtbGFiZWwge1xuICAgICAgICBjb2xvcjogJGNvbG9yLXdoaXRlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC5kaXRvLXByb3BlcnRpZXMge1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIG1hcmdpbi1sZWZ0OiAkY2hldnJvbi1pbmRlbnQ7XG5cbiAgICA+IHRyIHtcbiAgICAgIHZlcnRpY2FsLWFsaWduOiBiYXNlbGluZTtcbiAgICB9XG5cbiAgICAuZGl0by1sYWJlbCB7XG4gICAgICBtYXJnaW46IDA7XG5cbiAgICAgICY6OmFmdGVyIHtcbiAgICAgICAgY29udGVudDogJzogJztcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxudGhlYWQuZGl0by10YWJsZS1oZWFkXG4gIHRyXG4gICAgdGVtcGxhdGUoXG4gICAgICB2LWZvcj1cImNvbHVtbiBpbiBjb2x1bW5zXCJcbiAgICApXG4gICAgICB0aChcbiAgICAgICAgdi1pZj1cInNob3VsZFJlbmRlclNjaGVtYShjb2x1bW4pXCJcbiAgICAgICAgOmNsYXNzPVwiZ2V0Q29sdW1uQ2xhc3MoY29sdW1uKVwiXG4gICAgICApXG4gICAgICAgIFJvdXRlckxpbmsoXG4gICAgICAgICAgdi1pZj1cImNvbHVtbi5zb3J0YWJsZVwiXG4gICAgICAgICAgdi1zbG90PVwieyBuYXZpZ2F0ZSB9XCJcbiAgICAgICAgICA6dG89XCJnZXRTb3J0TGluayhjb2x1bW4pXCJcbiAgICAgICAgICBjdXN0b21cbiAgICAgICAgKVxuICAgICAgICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbihcbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgOmNsYXNzPVwiZ2V0U29ydENsYXNzKGNvbHVtbilcIlxuICAgICAgICAgICAgQGNsaWNrPVwibmF2aWdhdGVcIlxuICAgICAgICAgIClcbiAgICAgICAgICAgIC5kaXRvLW9yZGVyLWFycm93c1xuICAgICAgICAgICAgc3BhbiB7eyBnZXRMYWJlbChjb2x1bW4pIH19XG4gICAgICAgIHNwYW4oXG4gICAgICAgICAgdi1lbHNlXG4gICAgICAgICkge3sgZ2V0TGFiZWwoY29sdW1uKSB9fVxuICAgIHRoKFxuICAgICAgdi1pZj1cImhhc0VkaXRCdXR0b25zXCJcbiAgICApXG4gICAgICAvLy0gRW1wdHkgPHNwYW4+IGlzIG5lZWRlZCBmb3Igc3R5bGluZywgc2VlIF90YWJsZS5zY3NzXG4gICAgICBzcGFuXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCB7IGh5cGhlbmF0ZSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnRGl0b1RhYmxlSGVhZCcsIHtcbiAgcHJvcHM6IHtcbiAgICBxdWVyeTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgY29sdW1uczogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgaGFzRWRpdEJ1dHRvbnM6IHsgdHlwZTogQm9vbGVhbiwgcmVxdWlyZWQ6IHRydWUgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgc29ydCgpIHtcbiAgICAgIGNvbnN0IG9yZGVyID0gKHRoaXMucXVlcnkub3JkZXIgfHwgJycpLnNwbGl0KC9cXHMrLylcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG5hbWU6IG9yZGVyWzBdLFxuICAgICAgICBvcmRlcjogb3JkZXJbMV1cbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGdldENvbHVtbkNsYXNzKGNvbHVtbikge1xuICAgICAgcmV0dXJuIGBkaXRvLWNvbHVtbi0ke2h5cGhlbmF0ZShjb2x1bW4ubmFtZSl9YFxuICAgIH0sXG5cbiAgICBnZXRTb3J0Q2xhc3MoY29sdW1uKSB7XG4gICAgICByZXR1cm4gdGhpcy5zb3J0Lm5hbWUgPT09IGNvbHVtbi5uYW1lXG4gICAgICAgID8gYGRpdG8tc2VsZWN0ZWQgZGl0by1vcmRlci0ke3RoaXMuc29ydC5vcmRlcn1gXG4gICAgICAgIDogbnVsbFxuICAgIH0sXG5cbiAgICBnZXRTb3J0TGluayhjb2x1bW4pIHtcbiAgICAgIC8vIFRvZ2dsZSBvcmRlciBpZiB0aGUgc2FtZSBjb2x1bW4gaXMgY2xpY2tlZCBhZ2Fpbi5cbiAgICAgIGNvbnN0IG9yZGVyID1cbiAgICAgICAgdGhpcy5zb3J0Lm5hbWUgPT09IGNvbHVtbi5uYW1lICYmIHRoaXMuc29ydC5vcmRlciA9PT0gJ2FzYydcbiAgICAgICAgICA/ICdkZXNjJ1xuICAgICAgICAgIDogJ2FzYydcbiAgICAgIHJldHVybiB0aGlzLmdldFF1ZXJ5TGluayh7XG4gICAgICAgIC4uLnRoaXMucXVlcnksXG4gICAgICAgIG9yZGVyOiBgJHtjb2x1bW4ubmFtZX0gJHtvcmRlcn1gXG4gICAgICB9KVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5cbi5kaXRvLXRhYmxlLWhlYWQge1xuICBAaW5jbHVkZSB1c2VyLXNlbGVjdChub25lKTtcblxuICB0ciB7XG4gICAgdGgge1xuICAgICAgcGFkZGluZzogMDtcbiAgICAgIGZvbnQtd2VpZ2h0OiBub3JtYWw7XG4gICAgICB0ZXh0LWFsaWduOiBsZWZ0O1xuICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcblxuICAgICAgLmRpdG8tYnV0dG9uIHtcbiAgICAgICAgLy8gQ29udmVudGlvbjogTmVzdGVkIHNwYW5zIGhhbmRsZSBwYWRkaW5nLCBzZWUgYmVsb3dcbiAgICAgICAgZGlzcGxheTogYmxvY2s7IC8vIE92ZXJyaWRlIGRlZmF1bHQgaW5saW5lLWZsZXggcG9zaXRpb25pbmcuXG4gICAgICAgIHBhZGRpbmc6IDA7XG4gICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICB0ZXh0LWFsaWduOiBpbmhlcml0O1xuICAgICAgICBib3JkZXItcmFkaXVzOiAwO1xuICAgICAgfVxuXG4gICAgICBzcGFuIHtcbiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgICAgICAvLyBDb252ZW50aW9uOiBOZXN0ZWQgc3BhbnMgaGFuZGxlIHBhZGRpbmdcbiAgICAgICAgcGFkZGluZzogJGlucHV0LXBhZGRpbmc7XG5cbiAgICAgICAgJjplbXB0eTo6YWZ0ZXIge1xuICAgICAgICAgIC8vIFByZXZlbnQgZW1wdHkgPHRoPiBmcm9tIGNvbGxhcHNpbmdcbiAgICAgICAgICBjb250ZW50OiAnXFwyMDBiJzsgLy8gemVyby13aWR0aCBzcGFjZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICA+IHNwYW4ge1xuICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxudGQoXG4gIDpjbGFzcz1cImNlbGwuY2xhc3NcIlxuICA6c3R5bGU9XCJjZWxsLnN0eWxlXCJcbilcbiAgLy8tIFRPRE86IEltcGxlbWVudCBpbmxpbmVkIGNvbXBvbmVudHMgaW4gY2VsbCBtb2RlIVxuICBjb21wb25lbnQoXG4gICAgdi1pZj1cImNlbGwuY29tcG9uZW50XCJcbiAgICA6aXM9XCJjZWxsLmNvbXBvbmVudFwiXG4gICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgOm1ldGE9XCJtZXRhXCJcbiAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgOm5lc3RlZD1cIm5lc3RlZFwiXG4gICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICApXG4gIHNwYW4oXG4gICAgdi1lbHNlXG4gICAgdi1odG1sPVwicmVuZGVyQ2VsbChkYXRhKVwiXG4gIClcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IERpdG9Db250ZXh0IGZyb20gJy4uL0RpdG9Db250ZXh0LmpzJ1xuaW1wb3J0IHsgYXBwZW5kRGF0YVBhdGggfSBmcm9tICcuLi91dGlscy9kYXRhLmpzJ1xuaW1wb3J0IHsgZXNjYXBlSHRtbCB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnRGl0b1RhYmxlQ2VsbCcsIHtcbiAgcHJvcHM6IHtcbiAgICBjZWxsOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBzY2hlbWE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGRhdGFQYXRoOiB7IHR5cGU6IFN0cmluZywgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBkYXRhOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBtZXRhOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBzdG9yZTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgbmVzdGVkOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IHRydWUgfSxcbiAgICBkaXNhYmxlZDogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIHJlbmRlckNlbGwoaXRlbSkge1xuICAgICAgY29uc3QgeyBuYW1lLCByZW5kZXIgfSA9IHRoaXMuY2VsbFxuICAgICAgY29uc3QgdmFsdWUgPSBpdGVtW25hbWVdXG4gICAgICByZXR1cm4gcmVuZGVyXG4gICAgICAgID8gcmVuZGVyLmNhbGwoXG4gICAgICAgICAgICB0aGlzLFxuICAgICAgICAgICAgbmV3IERpdG9Db250ZXh0KHRoaXMsIHtcbiAgICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICAgIGRhdGE6IGl0ZW0sXG4gICAgICAgICAgICAgIGRhdGFQYXRoOiBhcHBlbmREYXRhUGF0aCh0aGlzLmRhdGFQYXRoLCBuYW1lKVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICApXG4gICAgICAgIDogZXNjYXBlSHRtbCh2YWx1ZSlcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4uZGl0by11cGxvYWQtZmlsZVxuICAuZGl0by10aHVtYm5haWwoXG4gICAgdi1pZj1cInRodW1ibmFpbFwiXG4gICAgOmNsYXNzPVwiYGRpdG8tdGh1bWJuYWlsLS0ke3RodW1ibmFpbH1gXCJcbiAgKVxuICAgIC5kaXRvLXRodW1ibmFpbF9faW5uZXJcbiAgICAgIGltZyhcbiAgICAgICAgdi1pZj1cInNvdXJjZVwiXG4gICAgICAgIDpzcmM9XCJzb3VyY2VcIlxuICAgICAgICBjcm9zc29yaWdpbj1cImFub255bW91c1wiXG4gICAgICApXG4gICAgICAuZGl0by10aHVtYm5haWxfX3R5cGUoXG4gICAgICAgIHYtZWxzZVxuICAgICAgKVxuICAgICAgICBzcGFuIHt7IHR5cGUgfX1cbiAgc3BhbiB7eyBmaWxlLm5hbWUgfX1cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ0RpdG9VcGxvYWRGaWxlJywge1xuICBwcm9wczoge1xuICAgIGZpbGU6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHRodW1ibmFpbDogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICB0aHVtYm5haWxVcmw6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiBudWxsIH1cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICB1cGxvYWRVcmw6IG51bGxcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICB0eXBlKCkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgVFlQRVNbdGhpcy5maWxlLnR5cGVdIHx8XG4gICAgICAgIHRoaXMuZmlsZS5uYW1lLnNwbGl0KCcuJykucG9wKCkudG9VcHBlckNhc2UoKVxuICAgICAgKVxuICAgIH0sXG5cbiAgICBzb3VyY2UoKSB7XG4gICAgICByZXR1cm4gdGhpcy51cGxvYWRVcmwgfHwgdGhpcy50aHVtYm5haWxVcmxcbiAgICB9XG4gIH0sXG5cbiAgd2F0Y2g6IHtcbiAgICAnZmlsZS51cGxvYWQuZmlsZSc6IHtcbiAgICAgIGltbWVkaWF0ZTogdHJ1ZSxcbiAgICAgIGhhbmRsZXIoZmlsZSkge1xuICAgICAgICBpZiAodGhpcy50aHVtYm5haWwgJiYgZmlsZT8udHlwZS5zdGFydHNXaXRoKCdpbWFnZS8nKSkge1xuICAgICAgICAgIGNvbnN0IHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKClcbiAgICAgICAgICByZWFkZXIub25sb2FkID0gKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy51cGxvYWRVcmwgPSByZWFkZXIucmVzdWx0XG4gICAgICAgICAgfVxuICAgICAgICAgIHJlYWRlci5yZWFkQXNEYXRhVVJMKGZpbGUpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy51cGxvYWRVcmwgPSBudWxsXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn0pXG5cbmNvbnN0IFRZUEVTID0ge1xuICAndGV4dC9wbGFpbic6ICdUWFQnLFxuICAndGV4dC9odG1sJzogJ0hUTUwnLFxuICAndGV4dC9jc3MnOiAnQ1NTJyxcbiAgJ3RleHQvamF2YXNjcmlwdCc6ICdKUycsXG4gICdpbWFnZS9qcGVnJzogJ0pQRycsXG4gICdpbWFnZS9wbmcnOiAnUE5HJyxcbiAgJ2ltYWdlL2dpZic6ICdHSUYnLFxuICAnaW1hZ2Uvc3ZnK3htbCc6ICdTVkcnLFxuICAnbW92aWUvbXA0JzogJ01QNCcsXG4gICdhdWRpby9tcGVnJzogJ01QMycsXG4gICdhcHBsaWNhdGlvbi9qc29uJzogJ0pTT04nLFxuICAnYXBwbGljYXRpb24veG1sJzogJ1hNTCcsXG4gICdhcHBsaWNhdGlvbi9wZGYnOiAnUERGJyxcbiAgJ2FwcGxpY2F0aW9uL3ppcCc6ICdaSVAnXG59XG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AdXNlICdzYXNzOm1hdGgnO1xuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLmRpdG8tdXBsb2FkLWZpbGUge1xuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQ7XG59XG5cbi5kaXRvLXRodW1ibmFpbCB7XG4gICRzZWxmOiAmO1xuXG4gIC8vIFNtYWxsIHNpemUgYnkgZGVmYXVsdFxuICAtLW1heC1zaXplOiAjezEgKiAkaW5wdXQtaGVpZ2h0fTtcbiAgLS1jb3JuZXItc2l6ZTogY2FsYyh2YXIoLS1tYXgtc2l6ZSkgLyA1KTtcbiAgLS1zaGFkb3ctc2l6ZTogMXB4O1xuICAtLW1pbi1zaXplOiBjYWxjKDIgKiB2YXIoLS1jb3JuZXItc2l6ZSkpO1xuICAtLW1hcmdpbjogMGVtO1xuICAtLWRyb3Atc2hhZG93OiBkcm9wLXNoYWRvdyhcbiAgICAwIGNhbGModmFyKC0tc2hhZG93LXNpemUpICogMC43NSkgdmFyKC0tc2hhZG93LXNpemUpICN7cmdiYShcbiAgICAgICAgJGNvbG9yLWJsYWNrLFxuICAgICAgICAwLjRcbiAgICAgICl9XG4gICk7XG5cbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBtYXJnaW46IHZhcigtLW1hcmdpbik7XG4gIG1hcmdpbi1yaWdodDogMC41ZW07XG4gIGZpbHRlcjogdmFyKC0tZHJvcC1zaGFkb3cpO1xuXG4gICYtLXNtYWxsIHtcbiAgICAtLW1heC1zaXplOiAjezEgKiAkaW5wdXQtaGVpZ2h0fTtcbiAgICAtLW1hcmdpbjogMGVtO1xuICAgIC0tc2hhZG93LXNpemU6IDFweDtcbiAgfVxuXG4gICYtLW1lZGl1bSB7XG4gICAgLS1tYXgtc2l6ZTogI3syICogJGlucHV0LWhlaWdodH07XG4gICAgLS1tYXJnaW46IDAuMjVlbTtcbiAgICAtLXNoYWRvdy1zaXplOiAxLjVweDtcbiAgfVxuXG4gICYtLWxhcmdlIHtcbiAgICAtLW1heC1zaXplOiAjezQgKiAkaW5wdXQtaGVpZ2h0fTtcbiAgICAtLW1hcmdpbjogMC41ZW07XG4gICAgLS1zaGFkb3ctc2l6ZTogMi41cHg7XG4gIH1cblxuICAmX19pbm5lciB7XG4gICAgYmFja2dyb3VuZDogI2ZmZmZmZjtcbiAgICBjbGlwLXBhdGg6IHBvbHlnb24oXG4gICAgICAwIDAsXG4gICAgICBjYWxjKDEwMCUgLSB2YXIoLS1jb3JuZXItc2l6ZSkpIDAsXG4gICAgICAxMDAlIHZhcigtLWNvcm5lci1zaXplKSxcbiAgICAgIDEwMCUgMTAwJSxcbiAgICAgIDAgMTAwJVxuICAgICk7XG5cbiAgICAmOjphZnRlciB7XG4gICAgICBjb250ZW50OiAnJztcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgIHRvcDogMDtcbiAgICAgIHJpZ2h0OiAwO1xuICAgICAgd2lkdGg6IHZhcigtLWNvcm5lci1zaXplKTtcbiAgICAgIGhlaWdodDogdmFyKC0tY29ybmVyLXNpemUpO1xuICAgICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDQ1ZGVnLCAjZmZmZmZmLCAjZWVlZWVlIDQwJSwgI2RkZGRkZCA1MCUpO1xuICAgICAgZmlsdGVyOiB2YXIoLS1kcm9wLXNoYWRvdyk7XG4gICAgfVxuICB9XG5cbiAgJl9fdHlwZSB7XG4gICAgLS1mb250LXNpemU6IHZhcigtLWNvcm5lci1zaXplKTtcblxuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICBtaW4td2lkdGg6IHZhcigtLW1pbi1zaXplKTtcbiAgICBtaW4taGVpZ2h0OiB2YXIoLS1tYXgtc2l6ZSk7XG4gICAgYXNwZWN0LXJhdGlvOiAzIC8gNDtcblxuICAgIHNwYW4ge1xuICAgICAgLS1jb2xvcjogI3skY29sb3ItZ3JleX07XG5cbiAgICAgIGZvbnQtc2l6ZTogbWluKHZhcigtLWZvbnQtc2l6ZSksICN7MS4yNSAqICRmb250LXNpemV9KTtcbiAgICAgIGNvbG9yOiB2YXIoLS1jb2xvcik7XG5cbiAgICAgICN7JHNlbGZ9Om5vdCgjeyRzZWxmfS0tc21hbGwpICYge1xuICAgICAgICBwYWRkaW5nOiAwIGNhbGModmFyKC0tZm9udC1zaXplKSAvIDQpO1xuICAgICAgICBib3JkZXItcmFkaXVzOiBjYWxjKHZhcigtLWZvbnQtc2l6ZSkgLyA0KTtcbiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tY29sb3IpO1xuICAgICAgICBjb2xvcjogI2ZmZmZmZjtcbiAgICAgIH1cblxuICAgICAgI3skc2VsZn0tLW1lZGl1bSAmIHtcbiAgICAgICAgLS1jb2xvcjogI3skY29sb3ItbGlnaHR9O1xuICAgICAgfVxuXG4gICAgICAjeyRzZWxmfS0tbGFyZ2UgJiB7XG4gICAgICAgIC0tY29sb3I6ICN7JGNvbG9yLWxpZ2h0ZXJ9O1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGltZyB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgLy8gU1ZHIGltYWdlcyBuZWVkIDEwMCUgc2V0dGluZ3MgdG8gc2NhbGUgaW50byB0aGUgY29udGFpbmVyLlxuICAgIHdpZHRoOiAxMDAlO1xuICAgIGhlaWdodDogMTAwJTtcbiAgICBtaW4td2lkdGg6IHZhcigtLW1pbi1zaXplKTtcbiAgICBtaW4taGVpZ2h0OiB2YXIoLS1taW4tc2l6ZSk7XG4gICAgbWF4LXdpZHRoOiB2YXIoLS1tYXgtc2l6ZSk7XG4gICAgbWF4LWhlaWdodDogdmFyKC0tbWF4LXNpemUpO1xuICB9XG59XG48L3N0eWxlPlxuIiwiaW1wb3J0IHsgaXNSZWYsIG5leHRUaWNrLCBkZWZpbmVDb21wb25lbnQsIHJlZiwgcmVhY3RpdmUsIGggfSBmcm9tICd2dWUtZGVtaSc7XG5pbXBvcnQgeyB0cnlPbk1vdW50ZWQsIHRyeU9uU2NvcGVEaXNwb3NlLCB1bnJlZkVsZW1lbnQsIGRlZmF1bHREb2N1bWVudCwgdG9WYWx1ZSwgdXNlVk1vZGVsIH0gZnJvbSAnQHZ1ZXVzZS9jb3JlJztcbmltcG9ydCBTb3J0YWJsZSBmcm9tICdzb3J0YWJsZWpzJztcblxuZnVuY3Rpb24gdXNlU29ydGFibGUoZWwsIGxpc3QsIG9wdGlvbnMgPSB7fSkge1xuICBsZXQgc29ydGFibGU7XG4gIGNvbnN0IHsgZG9jdW1lbnQgPSBkZWZhdWx0RG9jdW1lbnQsIC4uLnJlc2V0T3B0aW9ucyB9ID0gb3B0aW9ucztcbiAgY29uc3QgZGVmYXVsdE9wdGlvbnMgPSB7XG4gICAgb25VcGRhdGU6IChlKSA9PiB7XG4gICAgICBtb3ZlQXJyYXlFbGVtZW50KGxpc3QsIGUub2xkSW5kZXgsIGUubmV3SW5kZXgpO1xuICAgIH1cbiAgfTtcbiAgY29uc3Qgc3RhcnQgPSAoKSA9PiB7XG4gICAgY29uc3QgdGFyZ2V0ID0gdHlwZW9mIGVsID09PSBcInN0cmluZ1wiID8gZG9jdW1lbnQ/LnF1ZXJ5U2VsZWN0b3IoZWwpIDogdW5yZWZFbGVtZW50KGVsKTtcbiAgICBpZiAoIXRhcmdldClcbiAgICAgIHJldHVybjtcbiAgICBzb3J0YWJsZSA9IG5ldyBTb3J0YWJsZSh0YXJnZXQsIHsgLi4uZGVmYXVsdE9wdGlvbnMsIC4uLnJlc2V0T3B0aW9ucyB9KTtcbiAgfTtcbiAgY29uc3Qgc3RvcCA9ICgpID0+IHNvcnRhYmxlPy5kZXN0cm95KCk7XG4gIGNvbnN0IG9wdGlvbiA9IChuYW1lLCB2YWx1ZSkgPT4ge1xuICAgIGlmICh2YWx1ZSAhPT0gdm9pZCAwKVxuICAgICAgc29ydGFibGU/Lm9wdGlvbihuYW1lLCB2YWx1ZSk7XG4gICAgZWxzZVxuICAgICAgcmV0dXJuIHNvcnRhYmxlPy5vcHRpb24obmFtZSk7XG4gIH07XG4gIHRyeU9uTW91bnRlZChzdGFydCk7XG4gIHRyeU9uU2NvcGVEaXNwb3NlKHN0b3ApO1xuICByZXR1cm4geyBzdG9wLCBzdGFydCwgb3B0aW9uIH07XG59XG5mdW5jdGlvbiBtb3ZlQXJyYXlFbGVtZW50KGxpc3QsIGZyb20sIHRvKSB7XG4gIGNvbnN0IF92YWx1ZUlzUmVmID0gaXNSZWYobGlzdCk7XG4gIGNvbnN0IGFycmF5ID0gX3ZhbHVlSXNSZWYgPyBbLi4udG9WYWx1ZShsaXN0KV0gOiB0b1ZhbHVlKGxpc3QpO1xuICBpZiAodG8gPj0gMCAmJiB0byA8IGFycmF5Lmxlbmd0aCkge1xuICAgIGNvbnN0IGVsZW1lbnQgPSBhcnJheS5zcGxpY2UoZnJvbSwgMSlbMF07XG4gICAgbmV4dFRpY2soKCkgPT4ge1xuICAgICAgYXJyYXkuc3BsaWNlKHRvLCAwLCBlbGVtZW50KTtcbiAgICAgIGlmIChfdmFsdWVJc1JlZilcbiAgICAgICAgbGlzdC52YWx1ZSA9IGFycmF5O1xuICAgIH0pO1xuICB9XG59XG5cbmNvbnN0IFVzZVNvcnRhYmxlID0gLyogQF9fUFVSRV9fICovIC8qICNfX1BVUkVfXyAqLyBkZWZpbmVDb21wb25lbnQoe1xuICBuYW1lOiBcIlVzZVNvcnRhYmxlXCIsXG4gIG1vZGVsOiB7XG4gICAgLy8gQ29tcGF0aWJsZSB3aXRoIHZ1ZTJcbiAgICBwcm9wOiBcIm1vZGVsVmFsdWVcIixcbiAgICBldmVudDogXCJ1cGRhdGU6bW9kZWxWYWx1ZVwiXG4gIH0sXG4gIHByb3BzOiB7XG4gICAgbW9kZWxWYWx1ZToge1xuICAgICAgdHlwZTogQXJyYXksXG4gICAgICByZXF1aXJlZDogdHJ1ZVxuICAgIH0sXG4gICAgdGFnOiB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBkZWZhdWx0OiBcImRpdlwiXG4gICAgfSxcbiAgICBvcHRpb25zOiB7XG4gICAgICB0eXBlOiBPYmplY3QsXG4gICAgICByZXF1aXJlZDogdHJ1ZVxuICAgIH1cbiAgfSxcbiAgc2V0dXAocHJvcHMsIHsgc2xvdHMgfSkge1xuICAgIGNvbnN0IGxpc3QgPSB1c2VWTW9kZWwocHJvcHMsIFwibW9kZWxWYWx1ZVwiKTtcbiAgICBjb25zdCB0YXJnZXQgPSByZWYoKTtcbiAgICBjb25zdCBkYXRhID0gcmVhY3RpdmUodXNlU29ydGFibGUodGFyZ2V0LCBsaXN0LCBwcm9wcy5vcHRpb25zKSk7XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGlmIChzbG90cy5kZWZhdWx0KVxuICAgICAgICByZXR1cm4gaChwcm9wcy50YWcsIHsgcmVmOiB0YXJnZXQgfSwgc2xvdHMuZGVmYXVsdChkYXRhKSk7XG4gICAgfTtcbiAgfVxufSk7XG5cbmV4cG9ydCB7IFVzZVNvcnRhYmxlIH07XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuVXNlU29ydGFibGUuZGl0by1kcmFnZ2FibGUoXG4gIHYtaWY9XCJkcmFnZ2FibGVcIlxuICA6Y2xhc3M9XCJ7ICdkaXRvLWRyYWdnYWJsZS0tZHJhZ2dpbmcnOiBpc0RyYWdnaW5nIH1cIlxuICA6dGFnPVwidGFnXCJcbiAgOm1vZGVsVmFsdWU9XCJtb2RlbFZhbHVlXCJcbiAgOm9wdGlvbnM9XCJ7IC4uLm9wdGlvbnMsIG9uU3RhcnQsIG9uRW5kIH1cIlxuICBAdXBkYXRlOm1vZGVsVmFsdWU9XCIkZW1pdCgndXBkYXRlOm1vZGVsVmFsdWUnLCAkZXZlbnQpXCJcbilcbiAgc2xvdFxuY29tcG9uZW50KFxuICB2LWVsc2VcbiAgOmlzPVwidGFnXCJcbilcbiAgc2xvdFxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQnXG5pbXBvcnQgRG9tTWl4aW4gZnJvbSAnLi4vbWl4aW5zL0RvbU1peGluLmpzJ1xuaW1wb3J0IHsgVXNlU29ydGFibGUgfSBmcm9tICdAdnVldXNlL2ludGVncmF0aW9ucy91c2VTb3J0YWJsZS9jb21wb25lbnQnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnRGl0b0RyYWdnYWJsZScsIHtcbiAgbWl4aW5zOiBbRG9tTWl4aW5dLFxuICBjb21wb25lbnRzOiB7IFVzZVNvcnRhYmxlIH0sXG4gIGVtaXRzOiBbJ3VwZGF0ZTptb2RlbFZhbHVlJ10sXG5cbiAgcHJvcHM6IHtcbiAgICBtb2RlbFZhbHVlOiB7XG4gICAgICB0eXBlOiBBcnJheSxcbiAgICAgIHJlcXVpcmVkOiB0cnVlXG4gICAgfSxcbiAgICB0YWc6IHtcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIGRlZmF1bHQ6ICdkaXYnXG4gICAgfSxcbiAgICBvcHRpb25zOiB7XG4gICAgICB0eXBlOiBPYmplY3QsXG4gICAgICByZXF1aXJlZDogdHJ1ZVxuICAgIH0sXG4gICAgZHJhZ2dhYmxlOiB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogdHJ1ZVxuICAgIH1cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBtb3VzZUV2ZW50czogbnVsbCxcbiAgICAgIGlzRHJhZ2dpbmc6IGZhbHNlXG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBvblN0YXJ0KGV2ZW50KSB7XG4gICAgICB0aGlzLm9wdGlvbnMub25TdGFydD8uKGV2ZW50KVxuICAgICAgdGhpcy5pc0RyYWdnaW5nID0gdHJ1ZVxuICAgICAgdGhpcy5tb3VzZUV2ZW50cz8ucmVtb3ZlKClcbiAgICB9LFxuXG4gICAgb25FbmQoZXZlbnQpIHtcbiAgICAgIHRoaXMub3B0aW9ucy5vbkVuZD8uKGV2ZW50KVxuICAgICAgLy8gS2VlcCBgaXNEcmFnZ2luZ2AgdHJ1ZSB1bnRpbCB0aGUgbmV4dCBtb3VzZSBpbnRlcmFjdGlvbiBzbyB0aGF0XG4gICAgICAvLyBjb25mdXNlZCBob3ZlciBzdGF0ZXMgYXJlIGNsZWFyZWQgYmVmb3JlIHJlbW92aW5nIHRoZSBob3ZlciBjYXRjaGVyLlxuICAgICAgdGhpcy5tb3VzZUV2ZW50cyA9IHRoaXMuZG9tT24oZG9jdW1lbnQsIHtcbiAgICAgICAgbW91c2Vkb3duOiB0aGlzLm9uTW91c2UsXG4gICAgICAgIG1vdXNlbW92ZTogdGhpcy5vbk1vdXNlLFxuICAgICAgICBtb3VzZWxlYXZlOiB0aGlzLm9uTW91c2VcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIG9uTW91c2UoKSB7XG4gICAgICB0aGlzLmlzRHJhZ2dpbmcgPSBmYWxzZVxuICAgICAgdGhpcy5tb3VzZUV2ZW50cz8ucmVtb3ZlKClcbiAgICAgIHRoaXMubW91c2VFdmVudHMgPSBudWxsXG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLmRpdG8tZHJhZ2dhYmxlIHtcbiAgLy8gT3ZlcmxheSBhIGhvdmVyIGNhdGNoZXIgd2hpbGUgd2UncmUgZHJhZ2dpbmcgdG8gcHJldmVudCBob3ZlciBzdGF0ZXMgZnJvbVxuICAvLyBnZXR0aW5nIHN0dWNrIC8gY29uZnVzZWQuIFNhZmFyaSBzdHJ1Z2dsZXMgd2l0aCB0aGlzLCBzbyBkaXNhYmxlIGl0IHRoZXJlLlxuICBAaW5jbHVkZSBicm93c2VyLXF1ZXJ5KCgnY2hyb21lJywgJ2ZpcmVmb3gnKSkge1xuICAgICY6aGFzKCZfX2Nob3NlbiksXG4gICAgJi0tZHJhZ2dpbmcge1xuICAgICAgPiAqIHtcbiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuXG4gICAgICAgID4gOmZpcnN0LWNoaWxkOjphZnRlciB7XG4gICAgICAgICAgY29udGVudDogJyc7XG4gICAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICAgIGluc2V0OiAwO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgJl9fZmFsbGJhY2sge1xuICAgIGZpbHRlcjogZHJvcC1zaGFkb3coMCAycHggNHB4ICRjb2xvci1zaGFkb3cpO1xuXG4gICAgLy8gTmVzdGVkIDx0ZD4gbmVlZCB0byBhbHNvIHN3aXRjaCB0byBgZGlzcGxheTogZmxleGAgc3R5bGUgZHVyaW5nIGRyYWdnaW5nLlxuICAgICYsXG4gICAgdGQge1xuICAgICAgZGlzcGxheTogZmxleDtcblxuICAgICAgPiAqIHtcbiAgICAgICAgZmxleDogMTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuLmRpdG8tc3Bpbm5lcihcbiAgdi1zaG93PVwibG9hZGluZ1wiXG4gIDpzdHlsZT1cInsgJy0tY29sb3InOiBjb2xvciwgJy0tc2l6ZSc6IHNpemUsICctLW1hcmdpbic6IG1hcmdpbiB9XCJcbilcbiAgLmRpdG8tc3Bpbm5lcl9fcHVsc2UuZGl0by1zcGlubmVyX19wdWxzZTFcbiAgLmRpdG8tc3Bpbm5lcl9fcHVsc2UuZGl0by1zcGlubmVyX19wdWxzZTJcbiAgLmRpdG8tc3Bpbm5lcl9fcHVsc2UuZGl0by1zcGlubmVyX19wdWxzZTNcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ0RpdG9TcGlubmVyJywge1xuICBwcm9wczoge1xuICAgIGxvYWRpbmc6IHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiB0cnVlXG4gICAgfSxcbiAgICBjb2xvcjoge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgZGVmYXVsdDogbnVsbFxuICAgIH0sXG4gICAgc2l6ZToge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgZGVmYXVsdDogbnVsbFxuICAgIH0sXG4gICAgbWFyZ2luOiB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBkZWZhdWx0OiBudWxsXG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuLmRpdG8tc3Bpbm5lciB7XG4gIC0tY29sb3I6ICM5OTk5OTk7XG4gIC0tc2l6ZTogOHB4O1xuICAtLW1hcmdpbjogMnB4O1xuXG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG5cbiAgJl9fcHVsc2Uge1xuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jb2xvcik7XG4gICAgd2lkdGg6IHZhcigtLXNpemUpO1xuICAgIGhlaWdodDogdmFyKC0tc2l6ZSk7XG4gICAgbWFyZ2luOiB2YXIoLS1tYXJnaW4pO1xuICAgIGJvcmRlci1yYWRpdXM6IDEwMCU7XG4gICAgYW5pbWF0aW9uOiBkaXRvLXNwaW5uZXItcHVsc2UgMC43NXMgY3ViaWMtYmV6aWVyKDAuMiwgMC42OCwgMC4xOCwgMS4wOCkgMHNcbiAgICAgIGluZmluaXRlIGJvdGg7XG4gIH1cblxuICAmX19wdWxzZTEge1xuICAgIGFuaW1hdGlvbi1kZWxheTogMC4xMnM7XG4gIH1cblxuICAmX19wdWxzZTIge1xuICAgIGFuaW1hdGlvbi1kZWxheTogMC4yNHM7XG4gIH1cblxuICAmX19wdWxzZTMge1xuICAgIGFuaW1hdGlvbi1kZWxheTogMC4zNnM7XG4gIH1cbn1cblxuQGtleWZyYW1lcyBkaXRvLXNwaW5uZXItcHVsc2Uge1xuICAwJSxcbiAgODAlIHtcbiAgICB0cmFuc2Zvcm06IHNjYWxlKDEpO1xuICAgIG9wYWNpdHk6IDE7XG4gIH1cblxuICA0NSUge1xuICAgIHRyYW5zZm9ybTogc2NhbGUoMC4xKTtcbiAgICBvcGFjaXR5OiAwLjc7XG4gIH1cbn1cblxuQGtleWZyYW1lcyBkaXRvLXNwaW5uZXItcHVsc2Uge1xuICAwJSxcbiAgODAlIHtcbiAgICB0cmFuc2Zvcm06IHNjYWxlKDEpO1xuICAgIG9wYWNpdHk6IDE7XG4gIH1cblxuICA0NSUge1xuICAgIHRyYW5zZm9ybTogc2NhbGUoMC4xKTtcbiAgICBvcGFjaXR5OiAwLjc7XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCI8c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmZ1bmN0aW9uIERpdG9WTm9kZSh7IHZub2RlIH0pIHtcbiAgcmV0dXJuIHZub2RlXG59XG5cbkRpdG9WTm9kZS5wcm9wcyA9IHtcbiAgdm5vZGU6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdEaXRvVm5vZGUnLCBEaXRvVk5vZGUpXG48L3NjcmlwdD5cbiIsIi8vIERpdG9UeXBlQ29tcG9uZW50IGlzIHRoZSBhYnN0cmFjdCBiYXNlIGNvbXBvbmVudCBmb3IgYWxsIG90aGVyIHR5cGVcbi8vIGNvbXBvbmVudHMgaW5zaWRlIHRoZSB0eXBlcy8gZm9sZGVyLiBUaGVyZSdzIGFsc28gYSBzZXBhcmF0ZSBjb25jcmV0ZVxuLy8gYERpdG9UeXBlQ29tcG9uZW50LnZ1ZWAgY29tcG9uZW50LCB1c2UgdG8gcmVuZGVyIGB7IHR5cGU6ICdjb21wb25lbnQnIH1gXG5pbXBvcnQgeyBhc0FycmF5LCBjYW1lbGl6ZSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgVHlwZU1peGluIGZyb20gJy4vbWl4aW5zL1R5cGVNaXhpbi5qcydcbmltcG9ydCB7IHJlZ2lzdGVyVHlwZUNvbXBvbmVudCwgZ2V0VHlwZUNvbXBvbmVudCB9IGZyb20gJy4vdXRpbHMvc2NoZW1hLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQge1xuICBleHRlbmRzOiBEaXRvQ29tcG9uZW50LFxuICBtaXhpbnM6IFtUeXBlTWl4aW5dLFxuXG4gIG5hdGl2ZUZpZWxkOiBmYWxzZSxcbiAgdGV4dEZpZWxkOiBmYWxzZSxcbiAgLy8gU2V0IHJlYXNvbmFibGUgZGVmYXVsdHMgZm9yIGFsbCBvZiB0aGVzZSB0aGF0IGFyZSB1c2VkIGJ5IG1vc3QgdHlwZVxuICAvLyBjb21wb25lbnRzLiBUaGVzZSBvbmx5IG5lZWQgZGVmaW5pbmcgaW4gc3ViLWNsYXNzZXMgd2hlbiB0aGV5IGRpZmZlci5cbiAgZGVmYXVsdFZhbHVlOiBudWxsLFxuICBkZWZhdWx0TmVzdGVkOiB0cnVlLFxuICBkZWZhdWx0VmlzaWJsZTogdHJ1ZSxcbiAgZ2VuZXJhdGVMYWJlbDogdHJ1ZSxcbiAgZXhjbHVkZVZhbHVlOiBmYWxzZSxcbiAgaWdub3JlTWlzc2luZ1ZhbHVlOiBudWxsLFxuICBvbWl0U3BhY2luZzogZmFsc2UsXG5cbiAgY29tcG9uZW50OiBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCxcblxuICBnZXQ6IGdldFR5cGVDb21wb25lbnQsXG5cbiAgcmVnaXN0ZXIodHlwZXMsIGRlZmluaXRpb24gPSB7fSkge1xuICAgIHR5cGVzID0gYXNBcnJheSh0eXBlcylcbiAgICBjb25zdCBjb21wb25lbnQgPSB0aGlzLmNvbXBvbmVudChcbiAgICAgIGBEaXRvVHlwZSR7Y2FtZWxpemUodHlwZXNbMF0sIHRydWUpfWAsXG4gICAgICBkZWZpbml0aW9uXG4gICAgKVxuICAgIGZvciAoY29uc3QgdHlwZSBvZiB0eXBlcykge1xuICAgICAgcmVnaXN0ZXJUeXBlQ29tcG9uZW50KHR5cGUsIGNvbXBvbmVudClcbiAgICB9XG4gICAgcmV0dXJuIGNvbXBvbmVudFxuICB9XG59XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuYnV0dG9uLmRpdG8tYnV0dG9uKFxuICA6aWQ9XCJkYXRhUGF0aFwiXG4gIHJlZj1cImVsZW1lbnRcIlxuICA6dHlwZT1cInR5cGVcIlxuICA6dGl0bGU9XCJ0aXRsZVwiXG4gIDpjbGFzcz1cImJ1dHRvbkNsYXNzXCJcbiAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4pXG4gIC5kaXRvLWJ1dHRvbl9fdGV4dChcbiAgICB2LWlmPVwidGV4dFwiXG4gICkge3sgdGV4dCB9fVxuICAuZGl0by1pbmZvKFxuICAgIHYtaWY9XCIhbGFiZWwgJiYgaW5mb1wiXG4gICAgOmRhdGEtaW5mbz1cImluZm9cIlxuICApXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9UeXBlQ29tcG9uZW50IGZyb20gJy4uL0RpdG9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IHsgZ2V0U2NoZW1hQWNjZXNzb3IgfSBmcm9tICcuLi91dGlscy9hY2Nlc3Nvci5qcydcbmltcG9ydCB7IGhhc1Jlc291cmNlIH0gZnJvbSAnLi4vdXRpbHMvcmVzb3VyY2UuanMnXG5pbXBvcnQgeyBsYWJlbGl6ZSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbmV4cG9ydCBkZWZhdWx0IERpdG9UeXBlQ29tcG9uZW50LnJlZ2lzdGVyKFxuICBbJ2J1dHRvbicsICdzdWJtaXQnXSxcbiAgLy8gQHZ1ZS9jb21wb25lbnRcbiAge1xuICAgIGRlZmF1bHRWYWx1ZTogKCkgPT4gdW5kZWZpbmVkLCAvLyBDYWxsYmFjayB0byBvdmVycmlkZSBgZGVmYXVsdFZhbHVlOiBudWxsYFxuICAgIGV4Y2x1ZGVWYWx1ZTogdHJ1ZSxcbiAgICBkZWZhdWx0V2lkdGg6ICdhdXRvJyxcbiAgICBnZW5lcmF0ZUxhYmVsOiBmYWxzZSxcblxuICAgIGNvbXB1dGVkOiB7XG4gICAgICB2ZXJiKCkge1xuICAgICAgICByZXR1cm4gdGhpcy52ZXJic1t0aGlzLm5hbWVdXG4gICAgICB9LFxuXG4gICAgICBidXR0b25DbGFzcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmVyYiA/IGBkaXRvLWJ1dHRvbi0ke3RoaXMudmVyYn1gIDogbnVsbFxuICAgICAgfSxcblxuICAgICAgdGV4dDogZ2V0U2NoZW1hQWNjZXNzb3IoJ3RleHQnLCB7XG4gICAgICAgIHR5cGU6IFN0cmluZ1xuICAgICAgfSksXG5cbiAgICAgIHRpdGxlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy50ZXh0IHx8IGxhYmVsaXplKHRoaXMudmVyYilcbiAgICAgIH0sXG5cbiAgICAgIGluZm86IGdldFNjaGVtYUFjY2Vzc29yKCdpbmZvJywge1xuICAgICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICAgIGRlZmF1bHQ6IG51bGxcbiAgICAgIH0pLFxuXG4gICAgICBjbG9zZUZvcm06IGdldFNjaGVtYUFjY2Vzc29yKCdjbG9zZUZvcm0nLCB7XG4gICAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBtZXRob2RzOiB7XG4gICAgICAvLyBAb3ZlcnJpZGVcbiAgICAgIGdldEV2ZW50cygpIHtcbiAgICAgICAgY29uc3QgeyBvbkZvY3VzLCBvbkJsdXIsIG9uQ2xpY2sgfSA9IHRoaXNcbiAgICAgICAgcmV0dXJuIHsgb25Gb2N1cywgb25CbHVyLCBvbkNsaWNrIH1cbiAgICAgIH0sXG5cbiAgICAgIGFzeW5jIHN1Ym1pdChvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlc291cmNlQ29tcG9uZW50Py5zdWJtaXQodGhpcywgb3B0aW9ucylcbiAgICAgIH0sXG5cbiAgICAgIGFzeW5jIG9uQ2xpY2soKSB7XG4gICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IHRoaXMuZW1pdEV2ZW50KCdjbGljaycsIHtcbiAgICAgICAgICBwYXJlbnQ6IHRoaXMuc2NoZW1hQ29tcG9uZW50XG4gICAgICAgIH0pXG4gICAgICAgIC8vIEhhdmUgYnV0dG9ucyB0aGF0IGRlZmluZSByZXNvdXJjZXMgY2FsbCBgdGhpcy5zdWJtaXQoKWAgYnkgZGVmYXVsdDpcbiAgICAgICAgaWYgKFxuICAgICAgICAgIHJlcyA9PT0gdW5kZWZpbmVkICYmIC8vIE1lYW5pbmc6IGRvbid0IHByZXZlbnQgZGVmYXVsdC5cbiAgICAgICAgICBoYXNSZXNvdXJjZSh0aGlzLnNjaGVtYSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgYXdhaXQgdGhpcy5zdWJtaXQoKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG4pXG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by1idXR0b24ge1xuICAkc2VsZjogJjtcblxuICAmX190ZXh0IHtcbiAgICBAaW5jbHVkZSBlbGxpcHNpcztcbiAgfVxufVxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4uZGl0by1jaGVja2JveFxuICBpbnB1dChcbiAgICA6aWQ9XCJkYXRhUGF0aFwiXG4gICAgcmVmPVwiZWxlbWVudFwiXG4gICAgdi1tb2RlbD1cInZhbHVlXCJcbiAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICApXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9UeXBlQ29tcG9uZW50IGZyb20gJy4uL0RpdG9UeXBlQ29tcG9uZW50LmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b1R5cGVDb21wb25lbnQucmVnaXN0ZXIoJ2NoZWNrYm94Jywge1xuICBuYXRpdmVGaWVsZDogdHJ1ZVxufSlcbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5cbi5kaXRvLWNoZWNrYm94IHtcbiAgQGV4dGVuZCAlaW5wdXQtYm9yZGVybGVzcztcbn1cbjwvc3R5bGU+XG4iLCJpbXBvcnQge1xuICBpc09iamVjdCxcbiAgaXNGdW5jdGlvbixcbiAgaXNQcm9taXNlLFxuICBub3JtYWxpemVEYXRhUGF0aCxcbiAgZ2V0VmFsdWVBdERhdGFQYXRoXG59IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQgeyByZWFjdGl2ZSB9IGZyb20gJ3Z1ZSdcbmltcG9ydCBMb2FkaW5nTWl4aW4gZnJvbSAnLi9Mb2FkaW5nTWl4aW4uanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCB7XG4gIG1peGluczogW0xvYWRpbmdNaXhpbl0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgaXNMb2FkaW5nOiBmYWxzZSxcbiAgICAgIGFzeW5jRGF0YUVudHJpZXM6IHt9XG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBoYW5kbGVEYXRhU2NoZW1hKHNjaGVtYSwgbmFtZSwgbG9hZGluZ09wdGlvbnMpIHtcbiAgICAgIGlmICghaXNPYmplY3Qoc2NoZW1hKSkge1xuICAgICAgICBzY2hlbWEgPSB7IGRhdGE6IHNjaGVtYSB9XG4gICAgICB9XG4gICAgICBsZXQgeyBkYXRhID0gdW5kZWZpbmVkLCBkYXRhUGF0aCA9IG51bGwgfSA9IHNjaGVtYVxuICAgICAgLy8gU2VlIGlmIHRoZXJlIGlzIGFzeW5jIGRhdGEgbG9hZGluZyBhbHJlYWR5IGluIHByb2Nlc3MuXG4gICAgICBjb25zdCBhc3luY0VudHJ5ID0gKHRoaXMuYXN5bmNEYXRhRW50cmllc1tuYW1lXSB8fD0gcmVhY3RpdmUoe1xuICAgICAgICBkZXBlbmRlbmN5RnVuY3Rpb246IG51bGwsXG4gICAgICAgIHJlc29sdmVkRGF0YTogdW5kZWZpbmVkLFxuICAgICAgICByZXNvbHZpbmc6IGZhbHNlLFxuICAgICAgICByZXNvbHZlZDogZmFsc2VcbiAgICAgIH0pKVxuICAgICAgLy8gSWYgdGhlIGRhdGEgY2FsbGJhY2sgcHJvdmlkZWQgYSBkZXBlbmRlbmN5IGZ1bmN0aW9uIHdoZW4gaXQgd2FzIGNhbGxlZCxcbiAgICAgIC8vIGNhbCBpdCBpbiBldmVyeSBjYWxsIG9mIGBoYW5kbGVEYXRhU2NoZW1hKClgIHRvIGZvcmNlIFZ1ZSB0byBrZWVwIHRyYWNrXG4gICAgICAvLyBvZiB0aGUgYXN5bmMgZGVwZW5kZW5jaWVzLlxuICAgICAgYXN5bmNFbnRyeS5kZXBlbmRlbmN5RnVuY3Rpb24/Lih0aGlzLmNvbnRleHQpXG5cbiAgICAgIGlmIChhc3luY0VudHJ5LnJlc29sdmVkKSB7XG4gICAgICAgIC8vIElmIHRoZSBkYXRhIHdhcyByZXNvbHZlZCBhbHJlYWR5LCByZXR1cm4gaXQgYW5kIGNsZWFyIHRoZSByZXNvbHZlZFxuICAgICAgICAvLyB2YWx1ZS4gVGhpcyB3b3JrcyBiZWNhdXNlIFZ1ZSBjYWNoZXMgdGhlIHJlc3VsdCBvZiBjb21wdXRlZCBnZXR0ZXJzXG4gICAgICAgIC8vIGFuZCBvbmx5IHJlZXZhbHVhdGVzIGlmIG9uZSBvZiB0aGUgZGVwZW5kZW5jaWVzIGNoYW5nZWQuIFRoaXMgaXMgdG9cbiAgICAgICAgLy8gZW5zdXJlIHRoYXQgYSBjYWNoZWQgdmFsdWUgaGVyZSBkb2Vzbid0IGJsb2NrIC8gb3ZlcnJpZGVcbiAgICAgICAgLy8gcmVldmFsdWF0aW9uIHdoZW4gYSBkZXBlbmRlbmN5IGNoYW5nZXM6XG4gICAgICAgIGNvbnN0IHsgcmVzb2x2ZWREYXRhIH0gPSBhc3luY0VudHJ5XG4gICAgICAgIGFzeW5jRW50cnkucmVzb2x2ZWREYXRhID0gdW5kZWZpbmVkXG4gICAgICAgIGFzeW5jRW50cnkucmVzb2x2ZWQgPSBmYWxzZVxuICAgICAgICByZXR1cm4gcmVzb2x2ZWREYXRhXG4gICAgICB9XG4gICAgICAvLyBBdm9pZCBjYWxsaW5nIHRoZSBkYXRhIGZ1bmN0aW9uIHR3aWNlOlxuICAgICAgaWYgKGFzeW5jRW50cnkucmVzb2x2aW5nKSB7XG4gICAgICAgIGRhdGEgPSBudWxsXG4gICAgICB9IGVsc2UgaWYgKGRhdGEpIHtcbiAgICAgICAgaWYgKGlzRnVuY3Rpb24oZGF0YSkpIHtcbiAgICAgICAgICBjb25zdCByZXN1bHQgPSBkYXRhKHRoaXMuY29udGV4dClcbiAgICAgICAgICAvLyBJZiB0aGUgcmVzdWx0IG9mIHRoZSBkYXRhIGZ1bmN0aW9uIGlzIGFub3RoZXIgZnVuY3Rpb24sIHRoZW4gdGhlXG4gICAgICAgICAgLy8gZmlyc3QgZGF0YSBmdW5jdGlvbiBpcyB0aGVyZSB0byB0cmFjayBkZXBlbmRlbmNpZXMgYW5kIHRoZSByZWFsXG4gICAgICAgICAgLy8gZGF0YSBsb2FkaW5nIGhhcHBlbnMgaW4gdGhlIGZ1bmN0aW9uIHRoYXQgaXQgcmV0dXJuZWQuIEtlZXAgdHJhY2tcbiAgICAgICAgICAvLyBpdCBpbiBgZGVwZW5kZW5jeUZ1bmN0aW9uYCBzbyBpdCBjYW4gYmUgY2FsbGVkIG9uIGVhY2ggY2FsbCBvZlxuICAgICAgICAgIC8vIGBoYW5kbGVEYXRhU2NoZW1hKClgIHRvIGtlZXAgdGhlIGRlcGVuZGVuY2llcyBpbnRhY3QsIGFuZCBjYWxsXG4gICAgICAgICAgLy8gdGhlIGZ1bmN0aW9uIHRoYXQgaXQgcmV0dXJuZWQgb25jZSB0byBnZXQgdGhlIGFjdHVhbCBkYXRhOlxuICAgICAgICAgIGlmIChpc0Z1bmN0aW9uKHJlc3VsdCkpIHtcbiAgICAgICAgICAgIGFzeW5jRW50cnkuZGVwZW5kZW5jeUZ1bmN0aW9uID0gZGF0YVxuICAgICAgICAgICAgZGF0YSA9IHJlc3VsdCh0aGlzLmNvbnRleHQpXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGRhdGEgPSByZXN1bHRcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gTk9URTogSWYgdGhlIGRhdGEgaXMgbm90IGEgcHJvbWlzZSwgaXQgaXMgcmVzb2x2ZWQgYWxyZWFkeS5cbiAgICAgICAgaWYgKGlzUHJvbWlzZShkYXRhKSkge1xuICAgICAgICAgIC8vIElmIHRoZSBkYXRhIGlzIGFzeW5jaHJvbm91cywgaXQgY2FuJ3QgYmUgcmV0dXJuZWQgc3RyYWlnaHQgYXdheS5cbiAgICAgICAgICAvLyBCdXQgd2UgY2FuIGNoZWF0IHVzaW5nIGNvbXB1dGVkIHByb3BlcnRpZXMgYW5kIGByZXNvbHZlZERhdGFgLFxuICAgICAgICAgIC8vIHdoaWNoIGlzIGdvaW5nIHRvIHJlY2VpdmUgdGhlIGxvYWRlZCBkYXRhIGFzeW5jaHJvbm91c2x5LFxuICAgICAgICAgIC8vIHRyaWdnZXJpbmcgYSByZWNvbXB1dGUgb2YgdGhlIGNvbXB1dGVkIHByb3BlcnR5IHRoYXQgY2FsbHNcbiAgICAgICAgICAvLyBgaGFuZGxlRGF0YVNjaGVtYSgpYC5cbiAgICAgICAgICBhc3luY0VudHJ5LnJlc29sdmluZyA9IHRydWVcbiAgICAgICAgICB0aGlzLnJlc29sdmVEYXRhKGRhdGEsIGxvYWRpbmdPcHRpb25zKVxuICAgICAgICAgICAgLnRoZW4oZGF0YSA9PiB7XG4gICAgICAgICAgICAgIGFzeW5jRW50cnkucmVzb2x2ZWREYXRhID0gZGF0YVxuICAgICAgICAgICAgICBhc3luY0VudHJ5LnJlc29sdmluZyA9IGZhbHNlXG4gICAgICAgICAgICAgIGFzeW5jRW50cnkucmVzb2x2ZWQgPSB0cnVlXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLmNhdGNoKGVycm9yID0+IHtcbiAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcilcbiAgICAgICAgICAgICAgYXN5bmNFbnRyeS5yZXNvbHZpbmcgPSBmYWxzZVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAvLyBDbGVhciBkYXRhIHVudGlsIHByb21pc2UgaXMgcmVzb2x2ZWQgYW5kIGByZXNvbHZlZERhdGFgIGlzIHNldFxuICAgICAgICAgIGRhdGEgPSBudWxsXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoZGF0YVBhdGgpIHtcbiAgICAgICAgZGF0YSA9IGdldFZhbHVlQXREYXRhUGF0aChcbiAgICAgICAgICB0aGlzLnJvb3REYXRhLFxuICAgICAgICAgIG5vcm1hbGl6ZURhdGFQYXRoKGAke3RoaXMuZGF0YVBhdGh9LyR7ZGF0YVBhdGh9YClcbiAgICAgICAgKVxuICAgICAgfVxuICAgICAgcmV0dXJuIGRhdGFcbiAgICB9LFxuXG4gICAgYXN5bmMgcmVzb2x2ZURhdGEobG9hZCwgbG9hZGluZ09wdGlvbnMgPSB7fSkge1xuICAgICAgLy8gVXNlIGEgdGltZW91dCB0byBhbGxvdyBhbHJlYWR5IHJlc29sdmVkIHByb21pc2VzIHRvIHJldHVybiBkYXRhIHdpdGhvdXRcbiAgICAgIC8vIHNob3dpbmcgYSBsb2FkaW5nIGluZGljYXRvci5cbiAgICAgIGNvbnN0IHRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB0aGlzLnNldExvYWRpbmcodHJ1ZSwgbG9hZGluZ09wdGlvbnMpLCAwKVxuICAgICAgbGV0IGRhdGEgPSBudWxsXG4gICAgICB0cnkge1xuICAgICAgICBkYXRhID0gYXdhaXQgKGlzRnVuY3Rpb24obG9hZCkgPyBsb2FkKCkgOiBsb2FkKVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgdGhpcy5hZGRFcnJvcihlcnJvci5tZXNzYWdlIHx8IGVycm9yKVxuICAgICAgfVxuICAgICAgY2xlYXJUaW1lb3V0KHRpbWVyKVxuICAgICAgdGhpcy5zZXRMb2FkaW5nKGZhbHNlLCBsb2FkaW5nT3B0aW9ucylcbiAgICAgIHJldHVybiBkYXRhXG4gICAgfVxuICB9XG59XG4iLCJpbXBvcnQgRGl0b0NvbnRleHQgZnJvbSAnLi4vRGl0b0NvbnRleHQuanMnXG5pbXBvcnQgRGF0YU1peGluIGZyb20gJy4vRGF0YU1peGluLmpzJ1xuaW1wb3J0IHsgaGFzVmlld1NjaGVtYSwgZ2V0Vmlld0VkaXRQYXRoIH0gZnJvbSAnLi4vdXRpbHMvc2NoZW1hLmpzJ1xuaW1wb3J0IHsgZ2V0U2NoZW1hQWNjZXNzb3IgfSBmcm9tICcuLi91dGlscy9hY2Nlc3Nvci5qcydcbmltcG9ydCB7IHNldFRlbXBvcmFyeUlkLCBpc1JlZmVyZW5jZSB9IGZyb20gJy4uL3V0aWxzL2RhdGEuanMnXG5pbXBvcnQge1xuICBpc09iamVjdCxcbiAgaXNBcnJheSxcbiAgaXNTdHJpbmcsXG4gIGlzRnVuY3Rpb24sXG4gIG5vcm1hbGl6ZURhdGFQYXRoLFxuICBsYWJlbGl6ZSxcbiAgZGVib3VuY2VBc3luY1xufSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQge1xuICBtaXhpbnM6IFtEYXRhTWl4aW5dLFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGhhc09wdGlvbnM6IGZhbHNlXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgc2VsZWN0ZWRWYWx1ZToge1xuICAgICAgZ2V0KCkge1xuICAgICAgICBjb25zdCBjb252ZXJ0VmFsdWUgPSB2YWx1ZSA9PlxuICAgICAgICAgIHRoaXMucmVsYXRlXG4gICAgICAgICAgICA/IHRoaXMuaGFzT3B0aW9uKHZhbHVlKVxuICAgICAgICAgICAgICA/IHRoaXMuZ2V0VmFsdWVGb3JPcHRpb24odmFsdWUpXG4gICAgICAgICAgICAgIDogbnVsbFxuICAgICAgICAgICAgOiB2YWx1ZVxuICAgICAgICBjb25zdCB2YWx1ZSA9IGlzQXJyYXkodGhpcy52YWx1ZSlcbiAgICAgICAgICA/IHRoaXMudmFsdWUubWFwKGNvbnZlcnRWYWx1ZSkuZmlsdGVyKHZhbHVlID0+IHZhbHVlICE9PSBudWxsKVxuICAgICAgICAgIDogY29udmVydFZhbHVlKHRoaXMudmFsdWUpXG4gICAgICAgIGlmIChcbiAgICAgICAgICAvLyBXaGVuIHJlbGF0aW5nIGFuZCBhcyBzb29uIGFzIHRoZSBvcHRpb25zIGFyZSBhdmFpbGFibGUuLi5cbiAgICAgICAgICB0aGlzLnJlbGF0ZSAmJlxuICAgICAgICAgIHRoaXMuaGFzT3B0aW9ucyAmJiAoXG4gICAgICAgICAgICAvLyAuLi5pZiB0aGUgdmFsdWUgaXMgZm9yY2VkIHRvIG51bGwgYmVjYXVzZSBhIGRpc2FwcGVhcmVkIG9wdGlvbi4uLlxuICAgICAgICAgICAgdmFsdWUgPT09IG51bGwgJiYgdGhpcy52YWx1ZSAhPT0gbnVsbCB8fFxuICAgICAgICAgICAgLy8gLi4ub3IgaWYgdGhlIHZhbHVlIGlzIGEgcmVmZXJlbmNlLCByZXBsYWNlIGl0IHdpdGggaXRzIG9wdGlvblxuICAgICAgICAgICAgLy8gdmFsdWUsIHNvIHRoYXQgaXQnbGwgaG9sZCBhY3R1YWwgZGF0YSwgbm90IGp1c3QgYSByZWZlcmVuY2UgaWQuXG4gICAgICAgICAgICBpc1JlZmVyZW5jZSh0aGlzLnZhbHVlKVxuICAgICAgICAgIClcbiAgICAgICAgKSB7XG4gICAgICAgICAgLy8gVE9ETzogRml4IHNpZGUtZWZmZWN0c1xuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSB2dWUvbm8tc2lkZS1lZmZlY3RzLWluLWNvbXB1dGVkLXByb3BlcnRpZXNcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkVmFsdWUgPSB2YWx1ZVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YWx1ZVxuICAgICAgfSxcblxuICAgICAgc2V0KHZhbHVlKSB7XG4gICAgICAgIGNvbnN0IGNvbnZlcnQgPSB2YWx1ZSA9PlxuICAgICAgICAgIHRoaXMucmVsYXRlXG4gICAgICAgICAgICA/IHRoaXMuZ2V0T3B0aW9uRm9yVmFsdWUodmFsdWUpXG4gICAgICAgICAgICA6IHZhbHVlXG4gICAgICAgIHRoaXMudmFsdWUgPSBpc0FycmF5KHZhbHVlKVxuICAgICAgICAgID8gdmFsdWUubWFwKGNvbnZlcnQpXG4gICAgICAgICAgOiBjb252ZXJ0KHZhbHVlKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBzZWxlY3RlZE9wdGlvbigpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldE9wdGlvbkZvclZhbHVlKHRoaXMuc2VsZWN0ZWRWYWx1ZSlcbiAgICB9LFxuXG4gICAgb3B0aW9ucygpIHtcbiAgICAgIGNvbnN0IGRhdGEgPSB0aGlzLmhhbmRsZURhdGFTY2hlbWEodGhpcy5zY2hlbWEub3B0aW9ucywgJ29wdGlvbnMnKSA/PyBbXVxuICAgICAgaWYgKCFpc0FycmF5KGRhdGEpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBvcHRpb25zIGRhdGEsIHNob3VsZCBiZSBhcnJheTogJHtkYXRhfWApXG4gICAgICB9XG4gICAgICAvLyBUT0RPOiBGaXggc2lkZS1lZmZlY3RzXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgdnVlL25vLXNpZGUtZWZmZWN0cy1pbi1jb21wdXRlZC1wcm9wZXJ0aWVzXG4gICAgICB0aGlzLmhhc09wdGlvbnMgPSBkYXRhLmxlbmd0aCA+IDBcbiAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NPcHRpb25zKGRhdGEpXG4gICAgfSxcblxuICAgIGFjdGl2ZU9wdGlvbnMoKSB7XG4gICAgICAvLyBUaGlzIGlzIG92ZXJyaWRkZW4gaW4gYFR5cGVNdWx0aXNlbGVjdGAgdG8gcmV0dXJuIHRoZSBgc2VhcmNoZWRPcHRpb25zYFxuICAgICAgLy8gd2hlbiBhIHNlYXJjaCBmaWx0ZXIgd2FzIGFwcGxpZWQuXG4gICAgICByZXR1cm4gdGhpcy5vcHRpb25zXG4gICAgfSxcblxuICAgIHJlbGF0ZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ3JlbGF0ZScsIHtcbiAgICAgIC8vIFRPRE86IENvbnZlcnQgdG8gYHJlbGF0ZUJ5OiAnaWQnYFxuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlLFxuICAgICAgLy8gV2UgY2Fubm90IHVzZSBzY2hlbWEgYWNjZXNzb3IgY2FsbGJhY2sgbWFnaWMgZm9yIGByZWxhdGVgIGFzIHdlIG5lZWRcbiAgICAgIC8vIHRoaXMgb3V0c2lkZSBvZiB0aGUgY29tcG9uZW50J3MgbGlmZS1zcGFuLCBzZWUgYHByb2Nlc3NEYXRhKClgIGJlbG93LlxuICAgICAgY2FsbGJhY2s6IGZhbHNlXG4gICAgfSksXG5cbiAgICBncm91cEJ5OiBnZXRTY2hlbWFBY2Nlc3NvcignZ3JvdXBCeScsIHtcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIGRlZmF1bHQ6IG51bGxcbiAgICB9KSxcblxuICAgIC8vIFRPRE86IFJlbmFtZSB0byBgb3B0aW9ucy5sYWJlbEtleWAgLyBgb3B0aW9uTGFiZWxLZXlgP1xuICAgIG9wdGlvbkxhYmVsOiBnZXRTY2hlbWFBY2Nlc3Nvcignb3B0aW9ucy5sYWJlbCcsIHtcbiAgICAgIHR5cGU6IFtTdHJpbmcsIEZ1bmN0aW9uXSxcbiAgICAgIGRlZmF1bHQ6IG51bGwsXG4gICAgICBnZXQobGFiZWwpIHtcbiAgICAgICAgLy8gSWYgbm8gYGxhYmVsYCB3YXMgcHJvdmlkZWQgYnV0IHRoZSBvcHRpb25zIGFyZSBvYmplY3RzLCBhc3N1bWUgYVxuICAgICAgICAvLyBkZWZhdWx0IHZhbHVlIG9mICdsYWJlbCc6XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgbGFiZWwgfHxcbiAgICAgICAgICB0aGlzLmdldE9wdGlvbktleSgnbGFiZWwnKSB8fFxuICAgICAgICAgIG51bGxcbiAgICAgICAgKVxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgLy8gVE9ETzogUmVuYW1lIHRvIGBvcHRpb25zLnZhbHVlS2V5YCAvIGBvcHRpb25WYWx1ZUtleWA/XG4gICAgb3B0aW9uVmFsdWU6IGdldFNjaGVtYUFjY2Vzc29yKCdvcHRpb25zLnZhbHVlJywge1xuICAgICAgdHlwZTogW1N0cmluZywgRnVuY3Rpb25dLFxuICAgICAgZGVmYXVsdDogbnVsbCxcbiAgICAgIGdldCh2YWx1ZSkge1xuICAgICAgICAvLyBJZiBubyBgbGFiZWxgIHdhcyBwcm92aWRlZCBidXQgdGhlIG9wdGlvbnMgYXJlIG9iamVjdHMsIGFzc3VtZSBhXG4gICAgICAgIC8vIGRlZmF1bHQgdmFsdWUgb2YgJ3ZhbHVlJzpcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICB2YWx1ZSB8fFxuICAgICAgICAgIHRoaXMucmVsYXRlICYmICdpZCcgfHxcbiAgICAgICAgICB0aGlzLmdldE9wdGlvbktleSgndmFsdWUnKSB8fFxuICAgICAgICAgIG51bGxcbiAgICAgICAgKVxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgLy8gVE9ETzogQ29uc2lkZXIgbW92aW5nIHNlYXJjaCB0byBgb3B0aW9ucy5zZWFyY2hgP1xuICAgIHNlYXJjaEZpbHRlcjogZ2V0U2NoZW1hQWNjZXNzb3IoJ3NlYXJjaCcsIHtcbiAgICAgIHR5cGU6IFtPYmplY3QsIEZ1bmN0aW9uXSxcbiAgICAgIGRlZmF1bHQ6IG51bGwsXG4gICAgICBnZXQoc2VhcmNoKSB7XG4gICAgICAgIGlmIChzZWFyY2gpIHtcbiAgICAgICAgICBjb25zdCB7IGZpbHRlciwgZGVib3VuY2UgfSA9IGlzRnVuY3Rpb24oc2VhcmNoKVxuICAgICAgICAgICAgPyB7IGZpbHRlcjogc2VhcmNoIH1cbiAgICAgICAgICAgIDogc2VhcmNoXG4gICAgICAgICAgcmV0dXJuIGRlYm91bmNlID8gZGVib3VuY2VBc3luYyhmaWx0ZXIsIGRlYm91bmNlKSA6IGZpbHRlclxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSksXG5cbiAgICBlZGl0YWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ2VkaXRhYmxlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlLFxuICAgICAgZ2V0KGVkaXRhYmxlKSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgZWRpdGFibGUgJiZcbiAgICAgICAgICBoYXNWaWV3U2NoZW1hKHRoaXMuc2NoZW1hLCB0aGlzLmNvbnRleHQpXG4gICAgICAgIClcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIGVkaXRQYXRoKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZWRpdGFibGUgJiYgdGhpcy5zZWxlY3RlZFZhbHVlXG4gICAgICAgID8gZ2V0Vmlld0VkaXRQYXRoKHRoaXMuc2NoZW1hLCB0aGlzLnNlbGVjdGVkVmFsdWUsIHRoaXMuY29udGV4dClcbiAgICAgICAgOiBudWxsXG4gICAgfSxcblxuICAgIGdyb3VwQnlMYWJlbCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmdyb3VwQnkgPyAnbGFiZWwnIDogbnVsbFxuICAgIH0sXG5cbiAgICBncm91cEJ5T3B0aW9ucygpIHtcbiAgICAgIHJldHVybiB0aGlzLmdyb3VwQnkgPyAnb3B0aW9ucycgOiBudWxsXG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBnZXRPcHRpb25LZXkoa2V5KSB7XG4gICAgICBjb25zdCBbb3B0aW9uXSA9IHRoaXMuYWN0aXZlT3B0aW9uc1xuICAgICAgcmV0dXJuIGlzT2JqZWN0KG9wdGlvbikgJiYga2V5IGluIG9wdGlvbiA/IGtleSA6IG51bGxcbiAgICB9LFxuXG4gICAgcHJvY2Vzc09wdGlvbnMob3B0aW9ucykge1xuICAgICAgaWYgKG9wdGlvbnMubGVuZ3RoKSB7XG4gICAgICAgIGlmICh0aGlzLnJlbGF0ZSkge1xuICAgICAgICAgIC8vIElmIGlkcyBhcmUgbWlzc2luZyBhbmQgd2Ugd2FudCB0byByZWxhdGUsIHNldCB0ZW1wb3JhcnkgaWRzLlxuICAgICAgICAgIC8vIE5PVEU6IFdlIG5lZWQgdG8gbW9kaWZ5IHRoZSBhY3R1YWwgZGF0YSwgbWFraW5nIGEgY29weSB3b24ndCB3b3JrXG4gICAgICAgICAgLy8gYXMgaXQgd29uJ3QgcHJvcGFnYXRlLlxuICAgICAgICAgIC8vIE5PVEU6IFRoaXMgb25seSBtYWtlcyBzZW5zZSBpZiB0aGUgZGF0YSBpcyBmcm9tIHRoZSBncmFwaCB0aGF0XG4gICAgICAgICAgLy8gd2UncmUgY3VycmVudGx5IGVkaXRpbmcuXG4gICAgICAgICAgZm9yIChjb25zdCBvcHRpb24gb2Ygb3B0aW9ucykge1xuICAgICAgICAgICAgaWYgKCEoJ2lkJyBpbiBvcHRpb24pKSB7XG4gICAgICAgICAgICAgIHNldFRlbXBvcmFyeUlkKG9wdGlvbiwgJ2lkJylcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuZ3JvdXBCeSkge1xuICAgICAgICAgIGNvbnN0IGdyb3VwZWQgPSB7fVxuICAgICAgICAgIG9wdGlvbnMgPSBvcHRpb25zLnJlZHVjZShcbiAgICAgICAgICAgIChyZXN1bHRzLCBvcHRpb24pID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgZ3JvdXAgPSBvcHRpb25bdGhpcy5ncm91cEJ5XVxuICAgICAgICAgICAgICBsZXQgZW50cnkgPSBncm91cGVkW2dyb3VwXVxuICAgICAgICAgICAgICBpZiAoIWVudHJ5KSB7XG4gICAgICAgICAgICAgICAgZW50cnkgPSBncm91cGVkW2dyb3VwXSA9IHtcbiAgICAgICAgICAgICAgICAgIFt0aGlzLmdyb3VwQnlMYWJlbF06IGdyb3VwLFxuICAgICAgICAgICAgICAgICAgW3RoaXMuZ3JvdXBCeU9wdGlvbnNdOiBbXVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXN1bHRzLnB1c2goZW50cnkpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgZW50cnkub3B0aW9ucy5wdXNoKG9wdGlvbilcbiAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdHNcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBbXVxuICAgICAgICAgIClcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIG9wdGlvbnNcbiAgICB9LFxuXG4gICAgaGFzT3B0aW9uKG9wdGlvbikge1xuICAgICAgcmV0dXJuICEhdGhpcy5nZXRPcHRpb25Gb3JWYWx1ZSh0aGlzLmdldFZhbHVlRm9yT3B0aW9uKG9wdGlvbikpXG4gICAgfSxcblxuICAgIGdldE9wdGlvbkZvclZhbHVlKHZhbHVlKSB7XG4gICAgICBjb25zdCBmaW5kT3B0aW9uID0gKG9wdGlvbnMsIHZhbHVlLCBncm91cEJ5KSA9PiB7XG4gICAgICAgIC8vIFNlYXJjaCBmb3IgdGhlIG9wdGlvbiBvYmplY3Qgd2l0aCB0aGUgZ2l2ZW4gdmFsdWUgYW5kIHJldHVybiB0aGVcbiAgICAgICAgLy8gd2hvbGUgb2JqZWN0LlxuICAgICAgICBmb3IgKGNvbnN0IG9wdGlvbiBvZiBvcHRpb25zKSB7XG4gICAgICAgICAgaWYgKGdyb3VwQnkpIHtcbiAgICAgICAgICAgIGNvbnN0IGZvdW5kID0gZmluZE9wdGlvbihvcHRpb24ub3B0aW9ucywgdmFsdWUsIG51bGwpXG4gICAgICAgICAgICBpZiAoZm91bmQpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGZvdW5kXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIGlmICh2YWx1ZSA9PT0gdGhpcy5nZXRWYWx1ZUZvck9wdGlvbihvcHRpb24pKSB7XG4gICAgICAgICAgICByZXR1cm4gb3B0aW9uXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzLm9wdGlvblZhbHVlXG4gICAgICAgID8gZmluZE9wdGlvbih0aGlzLmFjdGl2ZU9wdGlvbnMsIHZhbHVlLCB0aGlzLmdyb3VwQnkpXG4gICAgICAgIDogdmFsdWVcbiAgICB9LFxuXG4gICAgZ2V0VmFsdWVGb3JPcHRpb24ob3B0aW9uKSB7XG4gICAgICBjb25zdCB7IG9wdGlvblZhbHVlIH0gPSB0aGlzXG4gICAgICByZXR1cm4gaXNTdHJpbmcob3B0aW9uVmFsdWUpXG4gICAgICAgID8gb3B0aW9uPy5bb3B0aW9uVmFsdWVdXG4gICAgICAgIDogaXNGdW5jdGlvbihvcHRpb25WYWx1ZSlcbiAgICAgICAgICA/IG9wdGlvblZhbHVlKG5ldyBEaXRvQ29udGV4dCh0aGlzLCB7IG9wdGlvbiB9KSlcbiAgICAgICAgICA6IG9wdGlvblxuICAgIH0sXG5cbiAgICBnZXRMYWJlbEZvck9wdGlvbihvcHRpb24pIHtcbiAgICAgIGNvbnN0IHsgb3B0aW9uTGFiZWwgfSA9IHRoaXNcbiAgICAgIHJldHVybiBpc1N0cmluZyhvcHRpb25MYWJlbClcbiAgICAgICAgPyBvcHRpb24/LltvcHRpb25MYWJlbF1cbiAgICAgICAgOiBpc0Z1bmN0aW9uKG9wdGlvbkxhYmVsKVxuICAgICAgICAgID8gb3B0aW9uTGFiZWwobmV3IERpdG9Db250ZXh0KHRoaXMsIHsgb3B0aW9uIH0pKVxuICAgICAgICAgIDogbGFiZWxpemUoYCR7b3B0aW9ufWApXG4gICAgfVxuICB9LFxuXG4gIHByb2Nlc3NWYWx1ZShzY2hlbWEsIHZhbHVlLCBkYXRhUGF0aCwgZ3JhcGgpIHtcbiAgICBpZiAoc2NoZW1hLnJlbGF0ZSkge1xuICAgICAgLy8gRm9yIGludGVybmFsbHkgcmVsYXRpbmcgZGF0YSAoYHNjaGVtYS5vcHRpb25zLmRhdGFQYXRoYCksIHdlIG5lZWQgdG9cbiAgICAgIC8vIHByb2Nlc3MgYm90aCB0aGUgb3B0aW9ucyAoZm9yICcjcmVmJykgYW5kIHRoZSB2YWx1ZSAoJyNpZCcpLlxuICAgICAgLy8gU2VlIGBEYXRhTWl4aW4uaGFuZGxlRGF0YVNjaGVtYSgpYDpcbiAgICAgIGNvbnN0IHBhdGggPSBzY2hlbWEub3B0aW9ucz8uZGF0YVBhdGhcbiAgICAgIGNvbnN0IHJlbGF0ZWREYXRhUGF0aCA9IHBhdGhcbiAgICAgICAgPyBub3JtYWxpemVEYXRhUGF0aChgJHtkYXRhUGF0aH0vJHtwYXRofWApXG4gICAgICAgIDogbnVsbFxuICAgICAgZ3JhcGguYWRkUmVsYXRpb24oZGF0YVBhdGgsIHJlbGF0ZWREYXRhUGF0aCwgc2NoZW1hKVxuICAgICAgaWYgKHJlbGF0ZWREYXRhUGF0aCkge1xuICAgICAgICBncmFwaC5zZXRTb3VyY2VSZWxhdGVkKHJlbGF0ZWREYXRhUGF0aClcbiAgICAgIH1cbiAgICAgIC8vIENvbnZlcnQgcmVsYXRpbmcgb2JqZWN0cyB0byBhIHNoYWxsb3cgY29weSB3aXRoIG9ubHkgdGhlIGlkIGxlZnQuXG4gICAgICAvLyBUT0RPOiBDb252ZXJ0IHRvIHVzaW5nIGByZWxhdGVCeWA6XG4gICAgICBjb25zdCBwcm9jZXNzUmVsYXRlID0gdmFsdWUgPT4gKHZhbHVlID8geyBpZDogdmFsdWUuaWQgfSA6IHZhbHVlKVxuICAgICAgLy8gU2VsZWN0ZWQgb3B0aW9ucyBjYW4gYmUgYm90aCBvYmplY3RzICYgYXJyYXlzLCBlLmcuICdjaGVja2JveGVzJzpcbiAgICAgIHZhbHVlID0gaXNBcnJheSh2YWx1ZSlcbiAgICAgICAgPyB2YWx1ZS5tYXAocHJvY2Vzc1JlbGF0ZSlcbiAgICAgICAgOiBwcm9jZXNzUmVsYXRlKHZhbHVlKVxuICAgIH1cbiAgICByZXR1cm4gdmFsdWVcbiAgfVxufVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbnVsLmRpdG8tY2hlY2tib3hlcyhcbiAgOmlkPVwiZGF0YVBhdGhcIlxuICA6Y2xhc3M9XCJgZGl0by1sYXlvdXQtJHtzY2hlbWEubGF5b3V0IHx8ICd2ZXJ0aWNhbCd9YFwiXG4pXG4gIGxpKFxuICAgIHYtZm9yPVwib3B0aW9uIGluIG9wdGlvbnNcIlxuICApXG4gICAgbGFiZWxcbiAgICAgIC5kaXRvLWNoZWNrYm94XG4gICAgICAgIGlucHV0KFxuICAgICAgICAgIHJlZj1cImVsZW1lbnRcIlxuICAgICAgICAgIHYtbW9kZWw9XCJzZWxlY3RlZE9wdGlvbnNcIlxuICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgICAgICAgOnZhbHVlPVwiZ2V0VmFsdWVGb3JPcHRpb24ob3B0aW9uKVwiXG4gICAgICAgICAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gICAgICAgIClcbiAgICAgICAgc3BhbiB7eyBnZXRMYWJlbEZvck9wdGlvbihvcHRpb24pIH19XG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9UeXBlQ29tcG9uZW50IGZyb20gJy4uL0RpdG9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IE9wdGlvbnNNaXhpbiBmcm9tICcuLi9taXhpbnMvT3B0aW9uc01peGluLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b1R5cGVDb21wb25lbnQucmVnaXN0ZXIoJ2NoZWNrYm94ZXMnLCB7XG4gIG1peGluczogW09wdGlvbnNNaXhpbl0sXG5cbiAgbmF0aXZlRmllbGQ6IHRydWUsXG4gIGRlZmF1bHRWYWx1ZTogW10sXG4gIGRlZmF1bHRXaWR0aDogJ2F1dG8nLFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgc2VsZWN0ZWRPcHRpb25zOiB7XG4gICAgICBnZXQoKSB7XG4gICAgICAgIHJldHVybiAodGhpcy5zZWxlY3RlZFZhbHVlIHx8IFtdKS5maWx0ZXIodmFsdWUgPT4gdmFsdWUpXG4gICAgICB9LFxuXG4gICAgICBzZXQob3B0aW9uKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZSA9IG9wdGlvbiB8fCBbXVxuICAgICAgfVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5cbi5kaXRvLWNoZWNrYm94ZXMge1xuICBsYWJlbCB7XG4gICAgQGV4dGVuZCAlaW5wdXQtYm9yZGVybGVzcztcbiAgfVxuXG4gIGlucHV0IHtcbiAgICBtYXJnaW4tcmlnaHQ6ICRmb3JtLXNwYWNpbmc7XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuLmRpdG8tY29kZShcbiAgOmlkPVwiZGF0YVBhdGhcIlxuICByZWY9XCJjb2RlXCJcbiAgOnN0eWxlPVwic3R5bGVcIlxuKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvVHlwZUNvbXBvbmVudCBmcm9tICcuLi9EaXRvVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCBEb21NaXhpbiBmcm9tICcuLi9taXhpbnMvRG9tTWl4aW4uanMnXG5pbXBvcnQgQ29kZUZsYXNrIGZyb20gJ2NvZGVmbGFzaydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9UeXBlQ29tcG9uZW50LnJlZ2lzdGVyKCdjb2RlJywge1xuICBtaXhpbnM6IFtEb21NaXhpbl0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBsaW5lcygpIHtcbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYS5saW5lcyB8fCAzXG4gICAgfSxcblxuICAgIHN0eWxlKCkge1xuICAgICAgcmV0dXJuIGBoZWlnaHQ6IGNhbGMoJHt0aGlzLmxpbmVzfWVtICogdmFyKC0tbGluZS1oZWlnaHQpKWBcbiAgICB9XG4gIH0sXG5cbiAgbW91bnRlZCgpIHtcbiAgICBjb25zdCBmbGFzayA9IG5ldyBDb2RlRmxhc2sodGhpcy4kcmVmcy5jb2RlLCB7XG4gICAgICBsYW5ndWFnZTogdGhpcy5zY2hlbWEubGFuZ3VhZ2UgfHwgJ2phdmFzY3JpcHQnLFxuICAgICAgdGFiU2l6ZTogdGhpcy5zY2hlbWEuaW5kZW50U2l6ZSB8fCAyLFxuICAgICAgbGluZU51bWJlcnM6IGZhbHNlXG4gICAgfSlcblxuICAgIGxldCBjaGFuZ2VkID0gZmFsc2VcbiAgICBsZXQgaWdub3JlV2F0Y2ggPSBmYWxzZVxuICAgIGxldCBpZ25vcmVVcGRhdGUgPSBmYWxzZVxuXG4gICAgY29uc3Qgb25DaGFuZ2UgPSAoKSA9PiB7XG4gICAgICBpZiAoIXRoaXMuZm9jdXNlZCAmJiBjaGFuZ2VkKSB7XG4gICAgICAgIGNoYW5nZWQgPSBmYWxzZVxuICAgICAgICB0aGlzLm9uQ2hhbmdlKClcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBvbkZvY3VzID0gKCkgPT4gdGhpcy5vbkZvY3VzKClcblxuICAgIGNvbnN0IG9uQmx1ciA9ICgpID0+IHtcbiAgICAgIHRoaXMub25CbHVyKClcbiAgICAgIG9uQ2hhbmdlKClcbiAgICB9XG5cbiAgICB0aGlzLmRvbU9uKHRoaXMuJHJlZnMuY29kZS5xdWVyeVNlbGVjdG9yKCd0ZXh0YXJlYScpLCB7XG4gICAgICBmb2N1czogb25Gb2N1cyxcbiAgICAgIGJsdXI6IG9uQmx1clxuICAgIH0pXG5cbiAgICBjb25zdCBzZXRDb2RlID0gY29kZSA9PiB7XG4gICAgICBpZiAoY29kZSAhPT0gZmxhc2suY29kZSkge1xuICAgICAgICBpZ25vcmVVcGRhdGUgPSB0cnVlXG4gICAgICAgIGZsYXNrLnVwZGF0ZUNvZGUoY29kZSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBzZXRWYWx1ZSA9IHZhbHVlID0+IHtcbiAgICAgIGlmICh2YWx1ZSAhPT0gdGhpcy52YWx1ZSkge1xuICAgICAgICBpZ25vcmVXYXRjaCA9IHRydWVcbiAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlXG4gICAgICAgIGNoYW5nZWQgPSB0cnVlXG4gICAgICAgIG9uQ2hhbmdlKClcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmbGFzay5vblVwZGF0ZSh2YWx1ZSA9PiB7XG4gICAgICBpZiAoaWdub3JlVXBkYXRlKSB7XG4gICAgICAgIGlnbm9yZVVwZGF0ZSA9IGZhbHNlXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzZXRWYWx1ZSh2YWx1ZSlcbiAgICAgIH1cbiAgICB9KVxuXG4gICAgdGhpcy4kd2F0Y2goJ3ZhbHVlJywgdmFsdWUgPT4ge1xuICAgICAgaWYgKGlnbm9yZVdhdGNoKSB7XG4gICAgICAgIGlnbm9yZVdhdGNoID0gZmFsc2VcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNldENvZGUodmFsdWUgfHwgJycpXG4gICAgICB9XG4gICAgfSlcblxuICAgIHNldENvZGUodGhpcy52YWx1ZSB8fCAnJylcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZm9jdXNFbGVtZW50KCkge1xuICAgICAgdGhpcy4kZWwucXVlcnlTZWxlY3RvcigndGV4dGFyZWEnKT8uZm9jdXMoKVxuICAgIH0sXG5cbiAgICBibHVyRWxlbWVudCgpIHtcbiAgICAgIHRoaXMuJGVsLnF1ZXJ5U2VsZWN0b3IoJ3RleHRhcmVhJyk/LmZvY3VzKClcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by1jb2RlIHtcbiAgQGV4dGVuZCAlaW5wdXQ7XG5cbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAvLyBGb3IgcHJvcGVyIHNpemluZyBvZiBjb250ZW50IGFsb25nIHdpdGggOnN0eWxlPVwic3R5bGVcIiBzZXR0aW5nIGFib3ZlLFxuICAvLyBmb3IgcHJvcGVyIGxpbmUtaGVpZ2h0IGNhbGN1bGF0aW9uLlxuICBwYWRkaW5nOiAkaW5wdXQtcGFkZGluZztcblxuICAuY29kZWZsYXNrIHtcbiAgICBiYWNrZ3JvdW5kOiBub25lO1xuICAgIC8vIElnbm9yZSB0aGUgcGFyZW50IHBhZGRpbmcgZGVmaW5lZCBhYm92ZSB3aGljaCBpcyBvbmx5IG5lZWRlZCB0byBzZXRcbiAgICAvLyB0aGUgZGVzaXJlZCBoZWlnaHQgd2l0aCA6c3R5bGU9XCJzdHlsZVwiLlxuICAgIHRvcDogMDtcbiAgICBsZWZ0OiAwO1xuICB9XG5cbiAgLmNvZGVmbGFza19fdGV4dGFyZWEsXG4gIC5jb2RlZmxhc2tfX3ByZSB7XG4gICAgLy8gVXNlIHNhbWUgcGFkZGluZyBhcyAuZGl0by1jb2RlXG4gICAgcGFkZGluZzogJGlucHV0LXBhZGRpbmc7XG4gIH1cblxuICAuY29kZWZsYXNrX190ZXh0YXJlYSxcbiAgLmNvZGVmbGFza19fY29kZSxcbiAgLmNvZGVmbGFza19fbGluZXMge1xuICAgIGZvbnQtZmFtaWx5OiAkZm9udC1mYW1pbHktbW9ubztcbiAgICBmb250LXNpemU6IHZhcigtLWZvbnQtc2l6ZSk7XG4gICAgbGluZS1oZWlnaHQ6IHZhcigtLWxpbmUtaGVpZ2h0KTtcbiAgfVxuXG4gIC5jb2RlZmxhc2tfX2xpbmVzIHtcbiAgICBwYWRkaW5nOiAkaW5wdXQtcGFkZGluZztcbiAgfVxufVxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG5UcmlnZ2VyLmRpdG8tY29sb3IoXG4gIHYtbW9kZWw6c2hvdz1cInNob3dQb3B1cFwiXG4gIHRyaWdnZXI9XCJmb2N1c1wiXG4pXG4gIHRlbXBsYXRlKCN0cmlnZ2VyKVxuICAgIC5kaXRvLWlucHV0KDpjbGFzcz1cInsgJ2RpdG8tZm9jdXMnOiBzaG93UG9wdXAgfVwiKVxuICAgICAgaW5wdXQoXG4gICAgICAgIDppZD1cImRhdGFQYXRoXCJcbiAgICAgICAgcmVmPVwiZWxlbWVudFwiXG4gICAgICAgIHYtbW9kZWw9XCJoZXhWYWx1ZVwiXG4gICAgICAgIHR5cGU9XCJpbnB1dFwiXG4gICAgICAgIHNpemU9XCI4XCJcbiAgICAgICAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gICAgICApXG4gICAgICAuZGl0by1jb2xvci1wcmV2aWV3LmRpdG8taW5oZXJpdC1mb2N1cyhcbiAgICAgICAgdi1pZj1cInZhbHVlXCJcbiAgICAgIClcbiAgICAgICAgZGl2KDpzdHlsZT1cInsgYmFja2dyb3VuZDogYCMke2hleFZhbHVlIHx8ICcwMDAwMDAwMCd9YCB9XCIpXG4gICAgICBidXR0b24uZGl0by1idXR0b24tY2xlYXIuZGl0by1idXR0b24tb3ZlcmxheShcbiAgICAgICAgdi1pZj1cInNob3dDbGVhckJ1dHRvblwiXG4gICAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICAgICAgQGNsaWNrLnN0b3A9XCJjbGVhclwiXG4gICAgICApXG4gIHRlbXBsYXRlKCNwb3B1cClcbiAgICBTa2V0Y2hQaWNrZXIuZGl0by1jb2xvci1waWNrZXIoXG4gICAgICB2LW1vZGVsPVwiY29sb3JWYWx1ZVwiXG4gICAgICA6ZGlzYWJsZUFscGhhPVwiIWFscGhhXCJcbiAgICAgIDpkaXNhYmxlRmllbGRzPVwiIWlucHV0c1wiXG4gICAgICA6cHJlc2V0Q29sb3JzPVwicHJlc2V0c1wiXG4gICAgKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCB0aW55Y29sb3IgZnJvbSAndGlueWNvbG9yMidcbmltcG9ydCB7IFNrZXRjaCBhcyBTa2V0Y2hQaWNrZXIgfSBmcm9tICdAbGs3Ny92dWUzLWNvbG9yJ1xuaW1wb3J0IERpdG9UeXBlQ29tcG9uZW50IGZyb20gJy4uL0RpdG9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IHsgVHJpZ2dlciB9IGZyb20gJ0BkaXRvanMvdWkvc3JjJ1xuaW1wb3J0IHsgZ2V0U2NoZW1hQWNjZXNzb3IgfSBmcm9tICcuLi91dGlscy9hY2Nlc3Nvci5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9UeXBlQ29tcG9uZW50LnJlZ2lzdGVyKCdjb2xvcicsIHtcbiAgY29tcG9uZW50czogeyBUcmlnZ2VyLCBTa2V0Y2hQaWNrZXIgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBzaG93UG9wdXA6IGZhbHNlLFxuICAgICAgY29udmVydGVkSGV4VmFsdWU6IG51bGxcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBjb2xvclZhbHVlOiB7XG4gICAgICBnZXQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlIHx8IHt9XG4gICAgICB9LFxuXG4gICAgICBzZXQodmFsdWUpIHtcbiAgICAgICAgY29uc3QgZm9ybWF0ID0gdGhpcy5jb2xvckZvcm1hdFxuICAgICAgICBjb25zdCBrZXkgPSAoXG4gICAgICAgICAge1xuICAgICAgICAgICAgLy8gTk9URTogdnVlMy1jb2xvciBjYWxscyBpdCAnaGV4Jywgd2hpbGUgdGlueWNvbG9yIGNhbGxzIGl0ICdoZXg2J1xuICAgICAgICAgICAgaGV4OiB2YWx1ZT8uYSA8IDEgPyAnaGV4OCcgOiAnaGV4JyxcbiAgICAgICAgICAgIHJnYjogJ3JnYmEnXG4gICAgICAgICAgfVtmb3JtYXRdIHx8XG4gICAgICAgICAgZm9ybWF0XG4gICAgICAgIClcbiAgICAgICAgaWYgKGtleSkge1xuICAgICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZVtrZXldXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy52YWx1ZSA9IHRpbnljb2xvcih2YWx1ZSkudG9TdHJpbmcoZm9ybWF0KVxuICAgICAgICB9XG4gICAgICAgIHRoaXMub25DaGFuZ2UoKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBoZXhWYWx1ZToge1xuICAgICAgZ2V0KCkge1xuICAgICAgICBpZiAodGhpcy52YWx1ZSA9PSBudWxsKSB7XG4gICAgICAgICAgLy8gVE9ETzogRml4IHNpZGUtZWZmZWN0c1xuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSB2dWUvbm8tc2lkZS1lZmZlY3RzLWluLWNvbXB1dGVkLXByb3BlcnRpZXNcbiAgICAgICAgICB0aGlzLmNvbnZlcnRlZEhleFZhbHVlID0gbnVsbFxuICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICF0aGlzLmZvY3VzZWQgfHxcbiAgICAgICAgICB0aGlzLiRyZWZzLmVsZW1lbnQuaGFzQXR0cmlidXRlKCdyZWFkb25seScpXG4gICAgICAgICkge1xuICAgICAgICAgIGNvbnN0IGNvbG9yID0gdGlueWNvbG9yKHRoaXMudmFsdWUpXG4gICAgICAgICAgaWYgKGNvbG9yLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgLy8gVE9ETzogRml4IHNpZGUtZWZmZWN0c1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lXG4gICAgICAgICAgICB0aGlzLmNvbnZlcnRlZEhleFZhbHVlID0gY29sb3JcbiAgICAgICAgICAgICAgLnRvU3RyaW5nKGNvbG9yLmdldEFscGhhKCkgPCAxID8gJ2hleDgnIDogJ2hleDYnKVxuICAgICAgICAgICAgICAuc2xpY2UoMSlcbiAgICAgICAgICAgICAgLnRvVXBwZXJDYXNlKClcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuY29udmVydGVkSGV4VmFsdWVcbiAgICAgIH0sXG5cbiAgICAgIHNldCh2YWx1ZSkge1xuICAgICAgICB0aGlzLmNvbnZlcnRlZEhleFZhbHVlID0gdmFsdWVcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgLy8gVE9ETzogYGZvcm1hdGAgY2xhc2hlcyB3aXRoIFR5cGVNaXhpbi5mb3JtYXQoKWAsIHdoaWNoIHNoYWxsIGJlIHJlbmFtZWRcbiAgICAvLyBzb29uIHRvIGBmb3JtYXRWYWx1ZSgpYC4gUmVuYW1lIGBjb2xvckZvcm1hdGAgYmFjayB0byBgZm9ybWF0YCBhZnRlci5cbiAgICBjb2xvckZvcm1hdDogZ2V0U2NoZW1hQWNjZXNzb3IoJ2Zvcm1hdCcsIHtcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIGRlZmF1bHQ6ICdoZXgnXG4gICAgfSksXG5cbiAgICAvLyBUT0RPOiBSZW5hbWUgdG8gYHNob3dBbHBoYWA/XG4gICAgYWxwaGE6IGdldFNjaGVtYUFjY2Vzc29yKCdhbHBoYScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0pLFxuXG4gICAgLy8gVE9ETzogUmVuYW1lIHRvIGBzaG93SW5wdXRzYD9cbiAgICBpbnB1dHM6IGdldFNjaGVtYUFjY2Vzc29yKCdpbnB1dHMnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogdHJ1ZVxuICAgIH0pLFxuXG4gICAgcHJlc2V0czogZ2V0U2NoZW1hQWNjZXNzb3IoJ3ByZXNldHMnLCB7XG4gICAgICB0eXBlOiBBcnJheSxcbiAgICAgIGRlZmF1bHQ6IFtcbiAgICAgICAgJyNmZmZmZmYnLFxuICAgICAgICAnI2MzYzNjMycsXG4gICAgICAgICcjN2Y3ZjdmJyxcbiAgICAgICAgJyMwMDAwMDAnLFxuICAgICAgICAnIzg4MDAxNScsXG4gICAgICAgICcjZWQxYzI0JyxcbiAgICAgICAgJyNmZjdmMjcnLFxuICAgICAgICAnI2ZmZjIwMCcsXG5cbiAgICAgICAgJyMyMmIxNGMnLFxuICAgICAgICAnIzAwYTJlOCcsXG4gICAgICAgICcjM2Y0OGNjJyxcbiAgICAgICAgJyNhMzQ5YTQnLFxuICAgICAgICAnI2I5N2E1NycsXG4gICAgICAgICcjZmZhZWM5JyxcbiAgICAgICAgJyNmZmM5MGUnLFxuICAgICAgICAnIzAwMDAwMDAwJ1xuICAgICAgXVxuICAgIH0pXG4gIH1cbn0pXG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4kY29sb3Itc3dhdGNoLXdpZHRoOiAkcGF0dGVybi10cmFuc3BhcmVuY3ktc2l6ZTtcbiRjb2xvci1zd2F0Y2gtcmFkaXVzOiAkYm9yZGVyLXJhZGl1cyAtICRib3JkZXItd2lkdGg7XG5cbi5kaXRvLWNvbG9yIHtcbiAgLmRpdG8taW5wdXQge1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcblxuICAgIGlucHV0IHtcbiAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgICBmb250LXZhcmlhbnQtbnVtZXJpYzogdGFidWxhci1udW1zO1xuICAgICAgcGFkZGluZy1yaWdodDogJGNvbG9yLXN3YXRjaC13aWR0aDtcbiAgICB9XG4gIH1cblxuICAuZGl0by1idXR0b24tY2xlYXIge1xuICAgIG1hcmdpbi1yaWdodDogJGNvbG9yLXN3YXRjaC13aWR0aDtcbiAgfVxuXG4gIC5kaXRvLWNvbG9yLXBpY2tlciB7XG4gICAgbWFyZ2luOiAkcG9wdXAtbWFyZ2luO1xuICAgIGJvcmRlcjogJGJvcmRlci1zdHlsZTtcbiAgICBib3JkZXItcmFkaXVzOiAkYm9yZGVyLXJhZGl1cztcbiAgICBiYWNrZ3JvdW5kOiAkY29sb3Itd2hpdGU7XG4gICAgYm94LXNoYWRvdzogJHNoYWRvdy13aW5kb3c7XG4gIH1cblxuICAuZGl0by1jb2xvci1wcmV2aWV3IHtcbiAgICBiYWNrZ3JvdW5kOiAkcGF0dGVybi10cmFuc3BhcmVuY3k7XG4gICAgYm9yZGVyLWxlZnQ6ICRib3JkZXItc3R5bGU7XG5cbiAgICAmLFxuICAgIGRpdiB7XG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICB3aWR0aDogJGNvbG9yLXN3YXRjaC13aWR0aDtcbiAgICAgIHRvcDogMDtcbiAgICAgIHJpZ2h0OiAwO1xuICAgICAgYm90dG9tOiAwO1xuICAgICAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6ICRjb2xvci1zd2F0Y2gtcmFkaXVzO1xuICAgICAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6ICRjb2xvci1zd2F0Y2gtcmFkaXVzO1xuICAgIH1cbiAgfVxufVxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG5jb21wb25lbnQoXG4gIDppcz1cInNjaGVtYS5jb21wb25lbnRcIlxuICB2LWJpbmQ9XCIkcHJvcHNcIlxuKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbi8vIFRoaXMgaXMgdGhlIGdlbmVyYWwgcHVycG9zZSAnY29tcG9uZW50JyB0eXBlLCB3aGljaCBjYW4gcmVzb2x2ZSB0byBhbnkgY3VzdG9tXG4vLyBjb21wb25lbnQgdGhyb3VnaCBgc2NoZW1hLmNvbXBvbmVudGAsIHNlZSBgcmVzb2x2ZVNjaGVtYUNvbXBvbmVudCgpYC4gVGhpc1xuLy8gY2FuIGJlIHVzZWQgdG8gbmVzdCBhcmJpdHJhcnkgdnVlIGNvbXBvbmVudHMgaW4gc2NoZW1hOlxuLy8ge1xuLy8gICB0eXBlOiAnY29tcG9uZW50Jyxcbi8vICAgY29tcG9uZW50OiBpbXBvcnQoJy4vY29tcG9uZW50Jylcbi8vIH1cblxuaW1wb3J0IERpdG9UeXBlQ29tcG9uZW50IGZyb20gJy4uL0RpdG9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IHsgcmVzb2x2ZVNjaGVtYUNvbXBvbmVudCB9IGZyb20gJy4uL3V0aWxzL3NjaGVtYS5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9UeXBlQ29tcG9uZW50LnJlZ2lzdGVyKCdjb21wb25lbnQnLCB7XG4gIC8vIE92ZXJyaWRlIHRoZSBzdGFuZGFyZCBgZGVmYXVsdFZhbHVlOiBudWxsYCB0byBub3Qgc2V0IGFueSBkYXRhIGZvciBjdXN0b21cbiAgLy8gY29tcG9uZW50cywgdW5sZXNzIHRoZXkgcHJvdmlkZSBhIGRlZmF1bHQgdmFsdWUuXG4gIGRlZmF1bHRWYWx1ZTogKCkgPT4gdW5kZWZpbmVkLCAvLyBDYWxsYmFjayB0byBvdmVycmlkZSBgZGVmYXVsdFZhbHVlOiBudWxsYFxuICBpZ25vcmVNaXNzaW5nVmFsdWU6IHNjaGVtYSA9PiAhKCdkZWZhdWx0JyBpbiBzY2hlbWEpLFxuXG4gIGFzeW5jIHByb2Nlc3NTY2hlbWEoYXBpLCBzY2hlbWEpIHtcbiAgICBhd2FpdCByZXNvbHZlU2NoZW1hQ29tcG9uZW50KHNjaGVtYSlcbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbi8vLSBUT0RPOiBGaW5kIGEgYmV0dGVyIHdheSB0byB0cmlnZ2VyIGV2YWx1YXRpb24gb2YgYHZhbHVlYCB0aGF0IGRvc2Ugbm90XG4vLy0gaW52b2x2ZSBhY3R1YWxseSByZW5kZXJpbmcgaXQgd2hlbiB0aGUgY29tcG9uZW50IGlzIG5vdCB2aXNpYmxlLlxuaW5wdXQuZGl0by10ZXh0LmRpdG8taW5wdXQoXG4gIDppZD1cImRhdGFQYXRoXCJcbiAgcmVmPVwiZWxlbWVudFwiXG4gIDpuYW1lPVwibmFtZVwiXG4gIHR5cGU9XCJ0ZXh0XCJcbiAgOnZhbHVlPVwidmFsdWVcIlxuICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gIDpyZWFkb25seT1cInRydWVcIlxuKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvVHlwZUNvbXBvbmVudCBmcm9tICcuLi9EaXRvVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCBUeXBlTWl4aW4gZnJvbSAnLi4vbWl4aW5zL1R5cGVNaXhpbi5qcydcbmltcG9ydCBEYXRhTWl4aW4gZnJvbSAnLi4vbWl4aW5zL0RhdGFNaXhpbi5qcydcblxuZXhwb3J0IGRlZmF1bHQgRGl0b1R5cGVDb21wb25lbnQucmVnaXN0ZXIoXG4gIFsnY29tcHV0ZWQnLCAnZGF0YScsICdoaWRkZW4nXSxcbiAgLy8gQHZ1ZS9jb21wb25lbnRcbiAge1xuICAgIG1peGluczogW0RhdGFNaXhpbl0sXG5cbiAgICBkZWZhdWx0VmFsdWU6ICgpID0+IHVuZGVmaW5lZCwgLy8gQ2FsbGJhY2sgdG8gb3ZlcnJpZGUgYGRlZmF1bHRWYWx1ZTogbnVsbGBcbiAgICBkZWZhdWx0VmlzaWJsZTogZmFsc2UsXG5cbiAgICBjb21wdXRlZDoge1xuICAgICAgdmFsdWU6IHtcbiAgICAgICAgZ2V0KCkge1xuICAgICAgICAgIGNvbnN0IHsgc2NoZW1hIH0gPSB0aGlzXG4gICAgICAgICAgaWYgKHNjaGVtYS5kYXRhIHx8IHNjaGVtYS5kYXRhUGF0aCkge1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLmhhbmRsZURhdGFTY2hlbWEoc2NoZW1hLCAnc2NoZW1hJylcbiAgICAgICAgICAgIC8vIFRPRE86IEZpeCBzaWRlLWVmZmVjdHNcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZVxuICAgICAgICAgICAgdGhpcy5kYXRhW3RoaXMubmFtZV0gPSB2YWx1ZVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gVHlwZU1peGluLmNvbXB1dGVkLnZhbHVlLmdldC5jYWxsKHRoaXMpXG4gICAgICAgIH0sXG5cbiAgICAgICAgc2V0KHZhbHVlKSB7XG4gICAgICAgICAgVHlwZU1peGluLmNvbXB1dGVkLnZhbHVlLnNldC5jYWxsKHRoaXMsIHZhbHVlKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG4pXG48L3NjcmlwdD5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4uZGl0by1kYXRlXG4gIGNvbXBvbmVudChcbiAgICA6aXM9XCJnZXRDb21wb25lbnQodHlwZSlcIlxuICAgIDppZD1cImRhdGFQYXRoXCJcbiAgICByZWY9XCJlbGVtZW50XCJcbiAgICB2LW1vZGVsPVwiZGF0ZVZhbHVlXCJcbiAgICA6bG9jYWxlPVwibG9jYWxlXCJcbiAgICA6Zm9ybWF0PVwiZm9ybWF0c1wiXG4gICAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gIClcbiAgICB0ZW1wbGF0ZSgjYWZ0ZXIpXG4gICAgICBidXR0b24uZGl0by1idXR0b24tY2xlYXIuZGl0by1idXR0b24tb3ZlcmxheShcbiAgICAgICAgdi1pZj1cInNob3dDbGVhckJ1dHRvblwiXG4gICAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICAgICAgQGNsaWNrLnN0b3A9XCJjbGVhclwiXG4gICAgICAgIEBtb3VzZWRvd24uc3RvcFxuICAgICAgKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvVHlwZUNvbXBvbmVudCBmcm9tICcuLi9EaXRvVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCB7IGdldFNjaGVtYUFjY2Vzc29yIH0gZnJvbSAnLi4vdXRpbHMvYWNjZXNzb3IuanMnXG5pbXBvcnQgeyBEYXRlUGlja2VyLCBUaW1lUGlja2VyLCBEYXRlVGltZVBpY2tlciB9IGZyb20gJ0BkaXRvanMvdWkvc3JjJ1xuaW1wb3J0IHsgaXNEYXRlLCBhc3NpZ25EZWVwbHkgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG5leHBvcnQgZGVmYXVsdCBEaXRvVHlwZUNvbXBvbmVudC5yZWdpc3RlcihcbiAgWydkYXRlJywgJ2RhdGV0aW1lJywgJ3RpbWUnXSxcbiAgLy8gQHZ1ZS9jb21wb25lbnRcbiAge1xuICAgIGNvbXBvbmVudHM6IHsgRGF0ZVBpY2tlciwgVGltZVBpY2tlciwgRGF0ZVRpbWVQaWNrZXIgfSxcbiAgICAvLyBUT0RPOiBUaGlzIGlzIG9ubHkgaGVyZSBzbyB3ZSBnZXQgcGxhY2Vob2xkZXIgYWRkZWQuIENvbWUgdXAgd2l0aCBhXG4gICAgLy8gYmV0dGVyIHdheSB0byBzdXBwb3J0IGF0dHJpYnV0ZXMgcGVyIGNvbXBvbmVudCAoYSBsaXN0IG9mIGFjdHVhbGx5XG4gICAgLy8gc3VwcG9ydGVkIGF0dHJpYnV0ZXMpXG4gICAgbmF0aXZlRmllbGQ6IHRydWUsXG4gICAgdGV4dEZpZWxkOiB0cnVlLFxuXG4gICAgY29tcHV0ZWQ6IHtcbiAgICAgIGRhdGVWYWx1ZToge1xuICAgICAgICBnZXQoKSB7XG4gICAgICAgICAgY29uc3QgeyB2YWx1ZSB9ID0gdGhpc1xuICAgICAgICAgIHJldHVybiB2YWx1ZSA/IG5ldyBEYXRlKHZhbHVlKSA6IHZhbHVlXG4gICAgICAgIH0sXG5cbiAgICAgICAgc2V0KHZhbHVlKSB7XG4gICAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlXG4gICAgICAgIH1cbiAgICAgIH0sXG5cbiAgICAgIC8vIFRPRE86IFJlbmFtZSB0byBgZm9ybWF0YCwgb25jZSBgc2NoZW1hLmZvcm1hdCgpYCB3YXMgcmVtb3ZlZCB0b1xuICAgICAgLy8gYGZvcm1hdFZhbHVlKClgLlxuICAgICAgZm9ybWF0czogZ2V0U2NoZW1hQWNjZXNzb3IoJ2Zvcm1hdHMnLCB7XG4gICAgICAgIHR5cGU6IE9iamVjdCxcbiAgICAgICAgZGVmYXVsdDogbnVsbCxcbiAgICAgICAgZ2V0KGZvcm1hdHMpIHtcbiAgICAgICAgICBjb25zdCB7IGRhdGUsIHRpbWUgfSA9IGFzc2lnbkRlZXBseSh7fSwgdGhpcy5hcGkuZm9ybWF0cywgZm9ybWF0cylcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZGF0ZTogWydkYXRlJywgJ2RhdGV0aW1lJ10uaW5jbHVkZXModGhpcy50eXBlKSA/IGRhdGUgOiBudWxsLFxuICAgICAgICAgICAgdGltZTogWyd0aW1lJywgJ2RhdGV0aW1lJ10uaW5jbHVkZXModGhpcy50eXBlKSA/IHRpbWUgOiBudWxsXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBtZXRob2RzOiB7XG4gICAgICBnZXRDb21wb25lbnQodHlwZSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGRhdGU6ICdkYXRlLXBpY2tlcicsXG4gICAgICAgICAgdGltZTogJ3RpbWUtcGlja2VyJyxcbiAgICAgICAgICBkYXRldGltZTogJ2RhdGUtdGltZS1waWNrZXInXG4gICAgICAgIH1bdHlwZV1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgcHJvY2Vzc1ZhbHVlKHNjaGVtYSwgdmFsdWUpIHtcbiAgICAgIHJldHVybiBpc0RhdGUodmFsdWUpID8gdmFsdWUudG9JU09TdHJpbmcoKSA6IHZhbHVlXG4gICAgfVxuICB9XG4pXG48L3NjcmlwdD5cbiIsImltcG9ydCB7IGlzQXJyYXksIGFzQXJyYXkgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0UXVlcnkocXVlcnkpIHtcbiAgY29uc3QgZW50cmllcyA9IHF1ZXJ5XG4gICAgPyBpc0FycmF5KHF1ZXJ5KVxuICAgICAgPyBxdWVyeVxuICAgICAgOiBPYmplY3QuZW50cmllcyhxdWVyeSlcbiAgICA6IFtdXG4gIHJldHVybiAoXG4gICAgbmV3IFVSTFNlYXJjaFBhcmFtcyhcbiAgICAgIC8vIEV4cGFuZCBhcnJheSB2YWx1ZXMgaW50byBtdWx0aXBsZSBlbnRyaWVzIHVuZGVyIHRoZSBzYW1lIGtleSwgc29cbiAgICAgIC8vIGBmb3JtYXRRdWVyeSh7IGZvbzogWzEsIDJdLCBiYXI6IDMgfSlgID0+ICdmb289MSZmb289MiZiYXI9MycuXG4gICAgICBlbnRyaWVzLnJlZHVjZShcbiAgICAgICAgKGVudHJpZXMsIFtrZXksIHZhbHVlXSkgPT4ge1xuICAgICAgICAgIGZvciAoY29uc3QgdmFsIG9mIGFzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgICAgICBlbnRyaWVzLnB1c2goW2tleSwgdmFsXSlcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGVudHJpZXNcbiAgICAgICAgfSxcbiAgICAgICAgW11cbiAgICAgIClcbiAgICApXG4gICAgICAudG9TdHJpbmcoKVxuICAgICAgLy8gZGVjb2RlIGFsbCB0aGVzZSBlbmNvZGVkIGNoYXJhY3RlcnMgdG8gaGF2ZSB0aGUgc2FtZSBiZWhhdmlvciBhc1xuICAgICAgLy8gdnVlLXJvdXRlcidzIG93biBxdWVyeSBlbmNvZGluZy5cbiAgICAgIC5yZXBsYWNlQWxsKC8lKD86MjF8MjR8Mjh8Mjl8MkN8MkZ8M0F8M0J8M0R8M0Z8NDApL2csIGRlY29kZVVSSUNvbXBvbmVudClcbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVwbGFjZVJvdXRlKHsgcGF0aCwgcXVlcnksIGhhc2ggfSkge1xuICAvLyBQcmVzZXJ2ZSBgaGlzdG9yeS5zdGF0ZWAsIHNlZTpcbiAgLy8gaHR0cHM6Ly9yb3V0ZXIudnVlanMub3JnL2d1aWRlL21pZ3JhdGlvbi8jdXNhZ2Utb2YtaGlzdG9yeS1zdGF0ZVxuICBoaXN0b3J5LnJlcGxhY2VTdGF0ZShcbiAgICBoaXN0b3J5LnN0YXRlLFxuICAgIG51bGwsXG4gICAgYCR7XG4gICAgICBsb2NhdGlvbi5vcmlnaW5cbiAgICB9JHtcbiAgICAgIHBhdGggPz8gbG9jYXRpb24ucGF0aG5hbWVcbiAgICB9PyR7XG4gICAgICBxdWVyeSA/IGZvcm1hdFF1ZXJ5KHF1ZXJ5KSA6IGxvY2F0aW9uLnNlYXJjaC5zbGljZSgxKVxuICAgIH0ke1xuICAgICAgaGFzaCA/PyBsb2NhdGlvbi5oYXNoXG4gICAgfWBcbiAgKVxufVxuIiwiaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCBJdGVtTWl4aW4gZnJvbSAnLi9JdGVtTWl4aW4uanMnXG5pbXBvcnQgUmVzb3VyY2VNaXhpbiBmcm9tICcuL1Jlc291cmNlTWl4aW4uanMnXG5pbXBvcnQgU2NoZW1hUGFyZW50TWl4aW4gZnJvbSAnLi4vbWl4aW5zL1NjaGVtYVBhcmVudE1peGluLmpzJ1xuaW1wb3J0IHsgZ2V0U2NoZW1hQWNjZXNzb3IsIGdldFN0b3JlQWNjZXNzb3IgfSBmcm9tICcuLi91dGlscy9hY2Nlc3Nvci5qcydcbmltcG9ydCB7IGdldE1lbWJlclJlc291cmNlIH0gZnJvbSAnLi4vdXRpbHMvcmVzb3VyY2UuanMnXG5pbXBvcnQgeyByZXBsYWNlUm91dGUgfSBmcm9tICcuLi91dGlscy9yb3V0ZS5qcydcbmltcG9ydCB7XG4gIHByb2Nlc3NSb3V0ZVNjaGVtYSxcbiAgcHJvY2Vzc0Zvcm1zLFxuICBnZXROYW1lZFNjaGVtYXMsXG4gIGdldEJ1dHRvblNjaGVtYXMsXG4gIGhhc0Zvcm1TY2hlbWEsXG4gIGdldEZvcm1TY2hlbWFzLFxuICBnZXRWaWV3U2NoZW1hLFxuICBpc0NvbXBhY3QsXG4gIGlzSW5saW5lZCxcbiAgaXNPYmplY3RTb3VyY2UsXG4gIGlzTGlzdFNvdXJjZVxufSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG5pbXBvcnQge1xuICBpc09iamVjdCxcbiAgaXNTdHJpbmcsXG4gIGlzQXJyYXksXG4gIGlzTnVtYmVyLFxuICBlcXVhbHMsXG4gIHBhcnNlRGF0YVBhdGgsXG4gIG5vcm1hbGl6ZURhdGFQYXRoXG59IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCB7XG4gIG1peGluczogW0l0ZW1NaXhpbiwgUmVzb3VyY2VNaXhpbiwgU2NoZW1hUGFyZW50TWl4aW5dLFxuXG4gIGRlZmF1bHRWYWx1ZShzY2hlbWEpIHtcbiAgICByZXR1cm4gaXNMaXN0U291cmNlKHNjaGVtYSkgPyBbXSA6IG51bGxcbiAgfSxcblxuICBwcm92aWRlKCkge1xuICAgIHJldHVybiB7XG4gICAgICAkc291cmNlQ29tcG9uZW50OiAoKSA9PiB0aGlzXG4gICAgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHdyYXBwZWRQcmltaXRpdmVzOiBudWxsLFxuICAgICAgdW53cmFwcGluZ1ByaW1pdGl2ZXM6IGZhbHNlXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgc291cmNlQ29tcG9uZW50KCkge1xuICAgICAgcmV0dXJuIHRoaXNcbiAgICB9LFxuXG4gICAgaXNPYmplY3RTb3VyY2UoKSB7XG4gICAgICByZXR1cm4gaXNPYmplY3RTb3VyY2UodGhpcy50eXBlKVxuICAgIH0sXG5cbiAgICBpc0xpc3RTb3VyY2UoKSB7XG4gICAgICByZXR1cm4gaXNMaXN0U291cmNlKHRoaXMudHlwZSlcbiAgICB9LFxuXG4gICAgLy8gQG92ZXJyaWRlIFJlc291cmNlTWl4aW4uaGFzRGF0YSgpXG4gICAgaGFzRGF0YSgpIHtcbiAgICAgIHJldHVybiAhIXRoaXMudmFsdWVcbiAgICB9LFxuXG4gICAgaXNSZWFkeSgpIHtcbiAgICAgIC8vIExpc3RzIHRoYXQgaGF2ZSBubyBkYXRhIGFuZCBubyBhc3NvY2lhdGVkIHJlc291cmNlIHNob3VsZCBzdGlsbCByZW5kZXIsXG4gICAgICAvLyBhcyB0aGV5IG1heSBiZSBnZXR0aW5nIHRoZWlyIGRhdGEgZWxzZXdoZXJlLCBlLmcuIGBjb21wdXRlKClgLlxuICAgICAgcmV0dXJuIHRoaXMuaGFzRGF0YSB8fCAhdGhpcy5wcm92aWRlc0RhdGFcbiAgICB9LFxuXG4gICAgaXNJblZpZXcoKSB7XG4gICAgICByZXR1cm4gISF0aGlzLnZpZXdDb21wb25lbnRcbiAgICB9LFxuXG4gICAgd3JhcFByaW1pdGl2ZXMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWEud3JhcFByaW1pdGl2ZXNcbiAgICB9LFxuXG4gICAgbGlzdERhdGE6IHtcbiAgICAgIGdldCgpIHtcbiAgICAgICAgbGV0IGRhdGEgPSB0aGlzLnZhbHVlXG4gICAgICAgIGlmICh0aGlzLmlzT2JqZWN0U291cmNlKSB7XG4gICAgICAgICAgLy8gQ29udmVydCB0byBsaXN0IGFycmF5LlxuICAgICAgICAgIGRhdGEgPSBkYXRhICE9IG51bGwgPyBbZGF0YV0gOiBbXVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIElmIGRhdGEgZ2V0cyBpbmhlcml0ZWQgZnJvbSBwYXJlbnQsIHVud3JhcHBpbmcgaXMgbm90IGhhcHBlbmluZ1xuICAgICAgICAgIC8vIGF0IHRoZSByb290IGluIGBzZXREYXRhKClgLCBidXQgaGVyZSBpbnN0ZWFkLlxuICAgICAgICAgIGRhdGEgPSB0aGlzLnVud3JhcExpc3REYXRhKGRhdGEpIHx8IGRhdGFcbiAgICAgICAgfVxuICAgICAgICBkYXRhIHx8PSBbXVxuICAgICAgICBjb25zdCB7IHdyYXBQcmltaXRpdmVzIH0gPSB0aGlzXG4gICAgICAgIGlmICh3cmFwUHJpbWl0aXZlcykge1xuICAgICAgICAgIGlmICh0aGlzLnVud3JhcHBpbmdQcmltaXRpdmVzKSB7XG4gICAgICAgICAgICAvLyBXZSdyZSBkb25lIHVud3JhcHBpbmcgb25jZSBgbGlzdERhdGFgIGlzIHJlZXZhbHVhdGVkLCBzbyBzZXRcbiAgICAgICAgICAgIC8vIHRoaXMgdG8gYGZhbHNlYCBhZ2Fpbi4gU2VlIGB3cmFwcGVkUHJpbWl0aXZlc2Agd2F0Y2hlciBhYm92ZS5cbiAgICAgICAgICAgIC8vIFRPRE86IEZpeCBzaWRlLWVmZmVjdHNcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZVxuICAgICAgICAgICAgdGhpcy51bndyYXBwaW5nUHJpbWl0aXZlcyA9IGZhbHNlXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIENvbnZlcnQgZGF0YSB0byBhIGxpc3Qgb2Ygd3JhcHBlZCBwcmltaXRpdmVzLCBhbmQgcmV0dXJuIGl0LlxuICAgICAgICAgICAgLy8gVE9ETzogRml4IHNpZGUtZWZmZWN0c1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lXG4gICAgICAgICAgICB0aGlzLndyYXBwZWRQcmltaXRpdmVzID0gZGF0YS5tYXAodmFsdWUgPT4gKHtcbiAgICAgICAgICAgICAgW3dyYXBQcmltaXRpdmVzXTogdmFsdWVcbiAgICAgICAgICAgIH0pKVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gdGhpcy53cmFwcGVkUHJpbWl0aXZlc1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkYXRhXG4gICAgICB9LFxuXG4gICAgICBzZXQoZGF0YSkge1xuICAgICAgICBpZiAodGhpcy53cmFwUHJpbWl0aXZlcykge1xuICAgICAgICAgIHRoaXMud3JhcHBlZFByaW1pdGl2ZXMgPSBkYXRhXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMuaXNPYmplY3RTb3VyY2VcbiAgICAgICAgICAgID8gZGF0YSAmJiBkYXRhLmxlbmd0aCA+IDBcbiAgICAgICAgICAgICAgPyBkYXRhWzBdXG4gICAgICAgICAgICAgIDogbnVsbFxuICAgICAgICAgICAgOiBkYXRhXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgb2JqZWN0RGF0YToge1xuICAgICAgZ2V0KCkge1xuICAgICAgICAvLyBBbHdheXMgZ28gdGhyb3VnaCBgbGlzdERhdGFgIGludGVybmFsbHksIHdoaWNoIGRvZXMgYWxsIHRoZVxuICAgICAgICAvLyBwcm9jZXNzaW5nIG9mIGB3cmFwUHJpbWl0aXZlc2AsIGV0Yy5cbiAgICAgICAgcmV0dXJuIHRoaXMubGlzdERhdGFbMF0gfHwgbnVsbFxuICAgICAgfSxcblxuICAgICAgc2V0KGRhdGEpIHtcbiAgICAgICAgdGhpcy5saXN0RGF0YSA9IGRhdGEgPyBbZGF0YV0gOiBbXVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBzb3VyY2VTY2hlbWEoKSB7XG4gICAgICAvLyBUaGUgc291cmNlU2NoZW1hIG9mIGEgbGlzdCBpcyB0aGUgbGlzdCdzIHNjaGVtYSBpdHNlbGYuXG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWFcbiAgICB9LFxuXG4gICAgcGF0aCgpIHtcbiAgICAgIC8vIFRoaXMgaXMgdXNlZCBpbiBUeXBlTGlzdCBmb3IgRGl0b0Zvcm1DaG9vc2VyLlxuICAgICAgcmV0dXJuIHRoaXMucm91dGVDb21wb25lbnQuZ2V0Q2hpbGRQYXRoKHRoaXMuc2NoZW1hLnBhdGgpXG4gICAgfSxcblxuICAgIGRlZmF1bHRRdWVyeSgpIHtcbiAgICAgIGNvbnN0IHsgZGVmYXVsdE9yZGVyOiBvcmRlciB9ID0gdGhpc1xuICAgICAgcmV0dXJuIG9yZGVyID8geyBvcmRlciB9IDoge31cbiAgICB9LFxuXG4gICAgcXVlcnk6IGdldFN0b3JlQWNjZXNzb3IoJ3F1ZXJ5Jywge1xuICAgICAgZ2V0KHF1ZXJ5KSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgLi4udGhpcy5kZWZhdWx0UXVlcnksXG4gICAgICAgICAgLi4ucXVlcnlcbiAgICAgICAgfVxuICAgICAgfSxcblxuICAgICAgc2V0KHF1ZXJ5KSB7XG4gICAgICAgIC8vIEFsd2F5cyBrZWVwIHRoZSBkaXNwbGF5ZWQgcXVlcnkgcGFyYW1ldGVycyBpbiBzeW5jIHdpdGggdGhlIHN0b3JlZFxuICAgICAgICAvLyBvbmVzLiBVc2Ugc2NvcGUgYW5kIHBhZ2UgZnJvbSB0aGUgbGlzdCBzY2hlbWEgYXMgZGVmYXVsdHMsIGJ1dCBhbGxvd1xuICAgICAgICAvLyB0aGUgcm91dGUgcXVlcnkgcGFyYW1ldGVycyB0byBvdmVycmlkZSB0aGVtLlxuICAgICAgICBjb25zdCB7XG4gICAgICAgICAgc2NvcGUgPSB0aGlzLmRlZmF1bHRTY29wZT8ubmFtZSxcbiAgICAgICAgICBwYWdlID0gdGhpcy5zY2hlbWEucGFnZVxuICAgICAgICB9ID0gdGhpcy5xdWVyeVxuICAgICAgICAvLyBQcmVzZXJ2ZSAvIG1lcmdlIGN1cnJlbnRseSBzdG9yZWQgdmFsdWVzLlxuICAgICAgICBxdWVyeSA9IHtcbiAgICAgICAgICAuLi50aGlzLnF1ZXJ5LFxuICAgICAgICAgIC4uLihzY29wZSAhPSBudWxsICYmIHsgc2NvcGUgfSksXG4gICAgICAgICAgLi4uKHBhZ2UgIT0gbnVsbCAmJiB7IHBhZ2UgfSksXG4gICAgICAgICAgLi4ucXVlcnlcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWVxdWFscyhxdWVyeSwgdGhpcy4kcm91dGUucXVlcnkpKSB7XG4gICAgICAgICAgLy8gQ2hhbmdlIHRoZSByb3V0ZSBxdWVyeSBwYXJhbWV0ZXJzLCBidXQgZG9uJ3QgdHJpZ2dlciBhIHJvdXRlXG4gICAgICAgICAgLy8gY2hhbmdlLCBhcyB0aGF0IHdvdWxkIGNhdXNlIHRoZSBsaXN0IHRvIHJlbG9hZC5cbiAgICAgICAgICByZXBsYWNlUm91dGUoeyBxdWVyeSB9KVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBxdWVyeSAvLyBMZXQgZ2V0U3RvcmVBY2Nlc3NvcigpIGRvIHRoZSBhY3R1YWwgc2V0dGluZ1xuICAgICAgfVxuICAgIH0pLFxuXG4gICAgdG90YWw6IGdldFN0b3JlQWNjZXNzb3IoJ3RvdGFsJyksXG5cbiAgICBjb2x1bW5zKCkge1xuICAgICAgcmV0dXJuIGdldE5hbWVkU2NoZW1hcyh0aGlzLnNjaGVtYS5jb2x1bW5zKVxuICAgIH0sXG5cbiAgICBzY29wZXMoKSB7XG4gICAgICByZXR1cm4gZ2V0TmFtZWRTY2hlbWFzKHRoaXMuc2NoZW1hLnNjb3BlcylcbiAgICB9LFxuXG4gICAgZGVmYXVsdFNjb3BlKCkge1xuICAgICAgbGV0IGZpcnN0ID0gbnVsbFxuICAgICAgaWYgKHRoaXMuc2NvcGVzKSB7XG4gICAgICAgIGZvciAoY29uc3Qgc2NvcGUgb2YgT2JqZWN0LnZhbHVlcyh0aGlzLnNjb3BlcykpIHtcbiAgICAgICAgICBpZiAoc2NvcGUuZGVmYXVsdFNjb3BlKSB7XG4gICAgICAgICAgICByZXR1cm4gc2NvcGVcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCFmaXJzdCkge1xuICAgICAgICAgICAgZmlyc3QgPSBzY29wZVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGZpcnN0XG4gICAgfSxcblxuICAgIGRlZmF1bHRPcmRlcigpIHtcbiAgICAgIGlmICh0aGlzLmNvbHVtbnMpIHtcbiAgICAgICAgZm9yIChjb25zdCBjb2x1bW4gb2YgT2JqZWN0LnZhbHVlcyh0aGlzLmNvbHVtbnMpKSB7XG4gICAgICAgICAgY29uc3QgeyBkZWZhdWx0U29ydCB9ID0gY29sdW1uXG4gICAgICAgICAgaWYgKGRlZmF1bHRTb3J0KSB7XG4gICAgICAgICAgICBjb25zdCBkaXJlY3Rpb24gPSBpc1N0cmluZyhkZWZhdWx0U29ydCkgPyBkZWZhdWx0U29ydCA6ICdhc2MnXG4gICAgICAgICAgICByZXR1cm4gYCR7Y29sdW1uLm5hbWV9ICR7ZGlyZWN0aW9ufWBcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsXG4gICAgfSxcblxuICAgIG5lc3RlZE1ldGEoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi50aGlzLm1ldGEsXG4gICAgICAgIHNjaGVtYTogdGhpcy5zY2hlbWFcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZm9ybXMoKSB7XG4gICAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyhnZXRGb3JtU2NoZW1hcyh0aGlzLnNjaGVtYSwgdGhpcy5jb250ZXh0KSlcbiAgICB9LFxuXG4gICAgLy8gUmV0dXJucyB0aGUgbGlua2VkIHZpZXcgc2NoZW1hIGlmIHRoaXMgc291cmNlIGVkaXRzIGl0IGl0cyBpdGVtcyB0aHJvdWdoXG4gICAgLy8gYSBsaW5rZWQgdmlldy5cbiAgICB2aWV3KCkge1xuICAgICAgcmV0dXJuIGdldFZpZXdTY2hlbWEodGhpcy5zY2hlbWEsIHRoaXMuY29udGV4dClcbiAgICB9LFxuXG4gICAgbGlua3NUb1ZpZXcoKSB7XG4gICAgICByZXR1cm4gISF0aGlzLnZpZXdcbiAgICB9LFxuXG4gICAgYnV0dG9uU2NoZW1hcygpIHtcbiAgICAgIHJldHVybiBnZXRCdXR0b25TY2hlbWFzKHRoaXMuc2NoZW1hLmJ1dHRvbnMpXG4gICAgfSxcblxuICAgIGlzQ29tcGFjdCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmZvcm1zLmV2ZXJ5KGlzQ29tcGFjdClcbiAgICB9LFxuXG4gICAgaXNJbmxpbmVkKCkge1xuICAgICAgcmV0dXJuIGlzSW5saW5lZCh0aGlzLnNjaGVtYSlcbiAgICB9LFxuXG4gICAgcGFnaW5hdGU6IGdldFNjaGVtYUFjY2Vzc29yKCdwYWdpbmF0ZScsIHtcbiAgICAgIHR5cGU6IE51bWJlclxuICAgIH0pLFxuXG4gICAgcmVuZGVyOiBnZXRTY2hlbWFBY2Nlc3NvcigncmVuZGVyJywge1xuICAgICAgdHlwZTogRnVuY3Rpb24sXG4gICAgICBkZWZhdWx0OiBudWxsXG4gICAgfSksXG5cbiAgICBjcmVhdGFibGU6IGdldFNjaGVtYUFjY2Vzc29yKCdjcmVhdGFibGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2UsXG4gICAgICBnZXQoY3JlYXRhYmxlKSB7XG4gICAgICAgIHJldHVybiBjcmVhdGFibGUgJiYgaGFzRm9ybVNjaGVtYSh0aGlzLnNjaGVtYSlcbiAgICAgICAgICA/IHRoaXMuaXNPYmplY3RTb3VyY2VcbiAgICAgICAgICAgID8gIXRoaXMudmFsdWVcbiAgICAgICAgICAgIDogdHJ1ZVxuICAgICAgICAgIDogZmFsc2VcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIGVkaXRhYmxlOiBnZXRTY2hlbWFBY2Nlc3NvcignZWRpdGFibGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2UsXG4gICAgICBnZXQoZWRpdGFibGUpIHtcbiAgICAgICAgcmV0dXJuIGVkaXRhYmxlICYmICF0aGlzLmlzSW5saW5lZFxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgZGVsZXRhYmxlOiBnZXRTY2hlbWFBY2Nlc3NvcignZGVsZXRhYmxlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfSksXG5cbiAgICBkcmFnZ2FibGU6IGdldFNjaGVtYUFjY2Vzc29yKCdkcmFnZ2FibGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2UsXG4gICAgICBnZXQoZHJhZ2dhYmxlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzTGlzdFNvdXJjZSAmJiB0aGlzLmxpc3REYXRhLmxlbmd0aCA+IDEgJiYgZHJhZ2dhYmxlXG4gICAgICB9XG4gICAgfSksXG5cbiAgICBjb2xsYXBzaWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ2NvbGxhcHNpYmxlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IG51bGwsIC8vIHNvIHRoYXQgYD8/YCBiZWxvdyBjYW4gZG8gaXRzIHRoaW5nOlxuICAgICAgZ2V0KGNvbGxhcHNpYmxlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzSW5saW5lZCAmJiAhIShjb2xsYXBzaWJsZSA/PyB0aGlzLmNvbGxhcHNlZCAhPT0gbnVsbClcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIGNvbGxhcHNlZDogZ2V0U2NoZW1hQWNjZXNzb3IoJ2NvbGxhcHNlZCcsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBudWxsXG4gICAgfSlcbiAgfSxcblxuICB3YXRjaDoge1xuICAgICRyb3V0ZToge1xuICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3Z1ZWpzL3Z1ZS1yb3V0ZXIvaXNzdWVzLzMzOTMjaXNzdWVjb21tZW50LTExNTg0NzAxNDlcbiAgICAgIGZsdXNoOiAncG9zdCcsXG4gICAgICBoYW5kbGVyKHRvLCBmcm9tKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICB0aGlzLnByb3ZpZGVzRGF0YSAmJlxuICAgICAgICAgIGZyb20ucGF0aCA9PT0gdG8ucGF0aCAmJlxuICAgICAgICAgIGZyb20uaGFzaCA9PT0gdG8uaGFzaFxuICAgICAgICApIHtcbiAgICAgICAgICAvLyBQYXRocyBhbmQgaGFzaGVzIHJlbWFpbiB0aGUgc2FtZSwgc28gb25seSBxdWVyaWVzIGhhdmUgY2hhbmdlZC5cbiAgICAgICAgICAvLyBVcGRhdGUgZmlsdGVyIGFuZCByZWxvYWQgZGF0YSB3aXRob3V0IGNsZWFyaW5nLlxuICAgICAgICAgIHRoaXMucXVlcnkgPSB0by5xdWVyeVxuICAgICAgICAgIHRoaXMubG9hZERhdGEoZmFsc2UpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgd3JhcHBlZFByaW1pdGl2ZXM6IHtcbiAgICAgIGRlZXA6IHRydWUsXG4gICAgICBoYW5kbGVyKHRvLCBmcm9tKSB7XG4gICAgICAgIGNvbnN0IHsgd3JhcFByaW1pdGl2ZXMgfSA9IHRoaXNcbiAgICAgICAgLy8gU2tpcCB0aGUgaW5pdGlhbCBzZXR0aW5nIG9mIHdyYXBwZWRQcmltaXRpdmVzIGFycmF5XG4gICAgICAgIGlmICh3cmFwUHJpbWl0aXZlcyAmJiBmcm9tICE9PSBudWxsKSB7XG4gICAgICAgICAgLy8gV2hlbmV2ZXIgdGhlIHdyYXBwZWRQcmltaXRpdmVzIGNoYW5nZSwgbWFwIHRoZWlyIHZhbHVlcyBiYWNrIHRvXG4gICAgICAgICAgLy8gdGhlIGFycmF5IG9mIHByaW1pdGl2ZXMsIGluIGEgcHJpbWl0aXZlIHdheSA6KVxuICAgICAgICAgIC8vIEJ1dCBzZXQgYHVud3JhcHBpbmdQcmltaXRpdmVzID0gdHJ1ZWAsIHNvIHRoZSBgbGlzdERhdGFgIGNvbXB1dGVkXG4gICAgICAgICAgLy8gcHJvcGVydHkga25vd3MgYWJvdXQgaXQsIHdoaWNoIHNldHMgaXQgdG8gYGZhbHNlYCBhZ2Fpbi5cbiAgICAgICAgICB0aGlzLnVud3JhcHBpbmdQcmltaXRpdmVzID0gdHJ1ZVxuICAgICAgICAgIHRoaXMudmFsdWUgPSB0by5tYXAob2JqZWN0ID0+IG9iamVjdFt3cmFwUHJpbWl0aXZlc10pXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIHNldHVwRGF0YSgpIHtcbiAgICAgIHRoaXMucXVlcnkgPSB0aGlzLiRyb3V0ZS5xdWVyeVxuICAgICAgdGhpcy5lbnN1cmVEYXRhKClcbiAgICB9LFxuXG4gICAgLy8gQG92ZXJyaWRlIFJlc291cmNlTWl4aW4uY2xlYXJEYXRhKClcbiAgICBjbGVhckRhdGEoKSB7XG4gICAgICB0aGlzLnRvdGFsID0gMFxuICAgICAgdGhpcy52YWx1ZSA9IG51bGxcbiAgICB9LFxuXG4gICAgLy8gQG92ZXJyaWRlIFJlc291cmNlTWl4aW4uc2V0RGF0YSgpXG4gICAgc2V0RGF0YShkYXRhKSB7XG4gICAgICAvLyBXaGVuIG5ldyBkYXRhIGlzIGxvYWRlZCwgd2UgY2FuIHN0b3JlIGl0IHJpZ2h0IGJhY2sgaW4gdGhlIGRhdGEgb2YgdGhlXG4gICAgICAvLyB2aWV3IG9yIGZvcm0gdGhhdCBjcmVhdGVkIHRoaXMgbGlzdCBjb21wb25lbnQuXG4gICAgICAvLyBTdXBwb3J0IHR3byBmb3JtYXRzIGZvciBsaXN0IGRhdGE6XG4gICAgICAvLyAtIEFycmF5OiBgWy4uLl1gXG4gICAgICAvLyAtIE9iamVjdDogYHsgcmVzdWx0czogWy4uLl0sIHRvdGFsIH1gLCBzZWUgYHVud3JhcExpc3REYXRhKClgXG4gICAgICBpZiAoXG4gICAgICAgICFkYXRhIHx8XG4gICAgICAgIHRoaXMuaXNMaXN0U291cmNlICYmIGlzQXJyYXkoZGF0YSkgfHxcbiAgICAgICAgdGhpcy5pc09iamVjdFNvdXJjZSAmJiBpc09iamVjdChkYXRhKVxuICAgICAgKSB7XG4gICAgICAgIHRoaXMudmFsdWUgPSBkYXRhXG4gICAgICB9IGVsc2UgaWYgKHRoaXMudW53cmFwTGlzdERhdGEoZGF0YSkpIHtcbiAgICAgICAgLy8gVGhlIGZvcm1hdCBkaWRuJ3QgbWF0Y2gsIHNlZSBpZiB3ZSByZWNlaXZlZCBhIGB7IHJlc3VsdHMsIHRvdGFsIH1gXG4gICAgICAgIC8vIG9iamVjdCwgaW4gd2hpY2ggY2FzZSBgdGhpcy52YWx1ZWAgd2FzIGFscmVhZHkgc2V0IGJ5XG4gICAgICAgIC8vIGB1bndyYXBMaXN0RGF0YSgpYCBhbmQgd2UncmUgZG9uZSBub3cuXG4gICAgICB9IGVsc2UgaWYgKGlzT2JqZWN0KGRhdGEpICYmIHRoaXMuaXNJblZpZXcpIHtcbiAgICAgICAgLy8gVGhlIGNvbnRyb2xsZXIgaXMgc2VuZGluZyBkYXRhIGZvciBhIGZ1bGwgbXVsdGktY29tcG9uZW50IHZpZXcsXG4gICAgICAgIC8vIGluY2x1ZGluZyB0aGUgbmVzdGVkIGxpc3QgZGF0YS5cbiAgICAgICAgdGhpcy52aWV3Q29tcG9uZW50LnNldERhdGEoZGF0YSlcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgdW53cmFwTGlzdERhdGEoZGF0YSkge1xuICAgICAgaWYgKFxuICAgICAgICB0aGlzLmlzTGlzdFNvdXJjZSAmJlxuICAgICAgICBpc09iamVjdChkYXRhKSAmJlxuICAgICAgICBpc051bWJlcihkYXRhLnRvdGFsKSAmJlxuICAgICAgICBpc0FycmF5KGRhdGEucmVzdWx0cylcbiAgICAgICkge1xuICAgICAgICAvLyBJZiBAZGl0b2pzL3NlcnZlciBzZW5kcyBkYXRhIGluIHRoZSBmb3JtIG9mIGB7IHJlc3VsdHMsIHRvdGFsIH1gXG4gICAgICAgIC8vIHJlcGxhY2UgdGhlIHZhbHVlIHdpdGggcmVzdWx0LCBidXQgcmVtZW1iZXIgdGhlIHRvdGFsIGluIHRoZSBzdG9yZS5cbiAgICAgICAgdGhpcy50b3RhbCA9IGRhdGEudG90YWxcbiAgICAgICAgdGhpcy52YWx1ZSA9IGRhdGEucmVzdWx0c1xuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBjcmVhdGVJdGVtKHNjaGVtYSwgdHlwZSkge1xuICAgICAgY29uc3QgaXRlbSA9IHRoaXMuY3JlYXRlRGF0YShzY2hlbWEsIHR5cGUpXG4gICAgICBpZiAodGhpcy5pc09iamVjdFNvdXJjZSkge1xuICAgICAgICB0aGlzLm9iamVjdERhdGEgPSBpdGVtXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmxpc3REYXRhLnB1c2goaXRlbSlcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmNvbGxhcHNpYmxlKSB7XG4gICAgICAgIHRoaXMuJG5leHRUaWNrKCgpID0+IHRoaXMub3BlblNjaGVtYUNvbXBvbmVudCgtMSkpXG4gICAgICB9XG4gICAgICB0aGlzLm9uQ2hhbmdlKClcbiAgICAgIHJldHVybiBpdGVtXG4gICAgfSxcblxuICAgIHJlbW92ZUl0ZW0oaXRlbSwgaW5kZXgpIHtcbiAgICAgIGxldCByZW1vdmVkID0gZmFsc2VcbiAgICAgIGlmICh0aGlzLmlzT2JqZWN0U291cmNlKSB7XG4gICAgICAgIHRoaXMub2JqZWN0RGF0YSA9IG51bGxcbiAgICAgICAgcmVtb3ZlZCA9IHRydWVcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHsgbGlzdERhdGEgfSA9IHRoaXNcbiAgICAgICAgaWYgKGluZGV4ID49IDApIHtcbiAgICAgICAgICBsaXN0RGF0YS5zcGxpY2UoaW5kZXgsIDEpXG4gICAgICAgICAgcmVtb3ZlZCA9IHRydWVcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHJlbW92ZWQpIHtcbiAgICAgICAgdGhpcy5yZW1vdmVJdGVtU3RvcmUodGhpcy5zY2hlbWEsIGl0ZW0sIGluZGV4KVxuICAgICAgICB0aGlzLm9uQ2hhbmdlKClcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZGVsZXRlSXRlbShpdGVtLCBpbmRleCkge1xuICAgICAgY29uc3QgbGFiZWwgPSAoXG4gICAgICAgIGl0ZW0gJiZcbiAgICAgICAgdGhpcy5nZXRJdGVtTGFiZWwodGhpcy5zY2hlbWEsIGl0ZW0sIHtcbiAgICAgICAgICBpbmRleCxcbiAgICAgICAgICBleHRlbmRlZDogdHJ1ZVxuICAgICAgICB9KVxuICAgICAgKVxuXG4gICAgICBjb25zdCBub3RpZnkgPSAoKSA9PlxuICAgICAgICB0aGlzLm5vdGlmeSh7XG4gICAgICAgICAgdHlwZTogdGhpcy5pc1RyYW5zaWVudCA/ICdpbmZvJyA6ICdzdWNjZXNzJyxcbiAgICAgICAgICB0aXRsZTogJ1N1Y2Nlc3NmdWxseSBSZW1vdmVkJyxcbiAgICAgICAgICB0ZXh0OiBbXG4gICAgICAgICAgICBgJHtsYWJlbH0gd2FzICR7dGhpcy52ZXJicy5kZWxldGVkfS5gLFxuICAgICAgICAgICAgdGhpcy50cmFuc2llbnROb3RlXG4gICAgICAgICAgXVxuICAgICAgICB9KVxuXG4gICAgICBpZiAoXG4gICAgICAgIGl0ZW0gJiZcbiAgICAgICAgd2luZG93LmNvbmZpcm0oXG4gICAgICAgICAgYERvIHlvdSByZWFsbHkgd2FudCB0byAke3RoaXMudmVyYnMuZGVsZXRlfSAke2xhYmVsfT9gXG4gICAgICAgIClcbiAgICAgICkge1xuICAgICAgICBpZiAodGhpcy5pc1RyYW5zaWVudCkge1xuICAgICAgICAgIHRoaXMucmVtb3ZlSXRlbShpdGVtLCBpbmRleClcbiAgICAgICAgICBub3RpZnkoKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IGl0ZW1JZCA9IHRoaXMuZ2V0SXRlbUlkKHRoaXMuc2NoZW1hLCBpdGVtLCBpbmRleClcbiAgICAgICAgICBjb25zdCByZXNvdXJjZSA9IGdldE1lbWJlclJlc291cmNlKGl0ZW1JZCwgdGhpcy5yZXNvdXJjZSlcbiAgICAgICAgICBpZiAocmVzb3VyY2UpIHtcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlUmVxdWVzdCh7IG1ldGhvZDogJ2RlbGV0ZScsIHJlc291cmNlIH0sIGVyciA9PiB7XG4gICAgICAgICAgICAgIGlmICghZXJyKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZW1vdmVJdGVtKGl0ZW0sIGluZGV4KVxuICAgICAgICAgICAgICAgIG5vdGlmeSgpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgdGhpcy5yZWxvYWREYXRhKClcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIGdldFNjaGVtYUNvbXBvbmVudChpbmRleCkge1xuICAgICAgY29uc3QgeyBzY2hlbWFDb21wb25lbnRzIH0gPSB0aGlzXG4gICAgICBjb25zdCB7IGxlbmd0aCB9ID0gc2NoZW1hQ29tcG9uZW50c1xuICAgICAgcmV0dXJuIHNjaGVtYUNvbXBvbmVudHNbKChpbmRleCAlIGxlbmd0aCkgKyBsZW5ndGgpICUgbGVuZ3RoXVxuICAgIH0sXG5cbiAgICBvcGVuU2NoZW1hQ29tcG9uZW50KGluZGV4KSB7XG4gICAgICBjb25zdCBzY2hlbWFDb21wb25lbnQgPSB0aGlzLmdldFNjaGVtYUNvbXBvbmVudChpbmRleClcbiAgICAgIGlmIChzY2hlbWFDb21wb25lbnQpIHtcbiAgICAgICAgc2NoZW1hQ29tcG9uZW50Lm9wZW5lZCA9IHRydWVcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYXN5bmMgbmF2aWdhdGVUb0NvbXBvbmVudChkYXRhUGF0aCwgb25Db21wbGV0ZSkge1xuICAgICAgaWYgKHRoaXMuY29sbGFwc2libGUpIHtcbiAgICAgICAgY29uc3QgaW5kZXggPSBkYXRhUGF0aC5zdGFydHNXaXRoKHRoaXMuZGF0YVBhdGgpXG4gICAgICAgICAgPyB0aGlzLmlzTGlzdFNvdXJjZVxuICAgICAgICAgICAgPyBwYXJzZURhdGFQYXRoKGRhdGFQYXRoLnNsaWNlKHRoaXMuZGF0YVBhdGgubGVuZ3RoICsgMSkpWzBdID8/IG51bGxcbiAgICAgICAgICAgIDogMFxuICAgICAgICAgIDogbnVsbFxuICAgICAgICBpZiAoaW5kZXggIT09IG51bGwgJiYgaXNOdW1iZXIoK2luZGV4KSkge1xuICAgICAgICAgIGNvbnN0IHNjaGVtYUNvbXBvbmVudCA9IHRoaXMuZ2V0U2NoZW1hQ29tcG9uZW50KCtpbmRleClcbiAgICAgICAgICBpZiAoc2NoZW1hQ29tcG9uZW50KSB7XG4gICAgICAgICAgICBjb25zdCB7IG9wZW5lZCB9ID0gc2NoZW1hQ29tcG9uZW50XG4gICAgICAgICAgICBpZiAoIW9wZW5lZCkge1xuICAgICAgICAgICAgICBzY2hlbWFDb21wb25lbnQub3BlbmVkID0gdHJ1ZVxuICAgICAgICAgICAgICBhd2FpdCB0aGlzLiRuZXh0VGljaygpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBjb21wb25lbnRzID0gc2NoZW1hQ29tcG9uZW50LmdldENvbXBvbmVudHNCeURhdGFQYXRoKGRhdGFQYXRoKVxuICAgICAgICAgICAgaWYgKGNvbXBvbmVudHMubGVuZ3RoID4gMCAmJiAob25Db21wbGV0ZT8uKGNvbXBvbmVudHMpID8/IHRydWUpKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBzY2hlbWFDb21wb25lbnQub3BlbmVkID0gb3BlbmVkXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy5uYXZpZ2F0ZVRvUm91dGVDb21wb25lbnQoZGF0YVBhdGgsIG9uQ29tcGxldGUpXG4gICAgfSxcblxuICAgIG5hdmlnYXRlVG9Sb3V0ZUNvbXBvbmVudChkYXRhUGF0aCwgb25Db21wbGV0ZSkge1xuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgY29uc3QgY2FsbE9uQ29tcGxldGUgPSAoKSA9PiB7XG4gICAgICAgICAgLy8gUmV0cmlldmUgdGhlIGxhc3Qgcm91dGUgY29tcG9uZW50LCB3aGljaCB3aWxsIGJlIHRoZSBjb21wb25lbnQgdGhhdFxuICAgICAgICAgIC8vIHdlIGp1c3QgbmF2aWdhdGVkIHRvLCBhbmQgcGFzcyBpdCBvbiB0byBgb25Db21wbGV0ZSgpYFxuICAgICAgICAgIGNvbnN0IHsgcm91dGVDb21wb25lbnRzIH0gPSB0aGlzLmFwcFN0YXRlXG4gICAgICAgICAgY29uc3Qgcm91dGVDb21wb25lbnQgPSByb3V0ZUNvbXBvbmVudHNbcm91dGVDb21wb25lbnRzLmxlbmd0aCAtIDFdXG4gICAgICAgICAgcmVzb2x2ZShvbkNvbXBsZXRlPy4oW3JvdXRlQ29tcG9uZW50XSkgPz8gdHJ1ZSlcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGRhdGFQYXRoUGFydHMgPSBwYXJzZURhdGFQYXRoKGRhdGFQYXRoKVxuICAgICAgICAvLyBTZWUgaWYgd2UgY2FuIGZpbmQgYSByb3V0ZSB0aGF0IGNhbiBzZXJ2ZSBwYXJ0IG9mIHRoZSBnaXZlbiBkYXRhUGF0aCxcbiAgICAgICAgLy8gYW5kIHRha2UgaXQgZnJvbSB0aGVyZTpcbiAgICAgICAgd2hpbGUgKGRhdGFQYXRoUGFydHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGNvbnN0IHBhdGggPSB0aGlzLnJvdXRlQ29tcG9uZW50LmdldENoaWxkUGF0aChcbiAgICAgICAgICAgIHRoaXMuYXBpLm5vcm1hbGl6ZVBhdGgobm9ybWFsaXplRGF0YVBhdGgoZGF0YVBhdGhQYXJ0cykpXG4gICAgICAgICAgKVxuICAgICAgICAgIC8vIFNlZSBpZiB0aGVyZSBhY3R1YWxseSBpcyBhIHJvdXRlIGZvciB0aGlzIHN1Yi1jb21wb25lbnQ6XG4gICAgICAgICAgY29uc3QgeyBtYXRjaGVkIH0gPSB0aGlzLiRyb3V0ZXIucmVzb2x2ZShwYXRoKVxuICAgICAgICAgIGlmIChtYXRjaGVkLmxlbmd0aCAmJiBtYXRjaGVkWzBdLm5hbWUgIT09ICdjYXRjaC1hbGwnKSB7XG4gICAgICAgICAgICBpZiAodGhpcy4kcm91dGUucGF0aCA9PT0gcGF0aCkge1xuICAgICAgICAgICAgICAvLyBXZSdyZSBhbHJlYWR5IHRoZXJlLCBzbyBqdXN0IGNhbGwgYG9uQ29tcGxldGUoKWA6XG4gICAgICAgICAgICAgIGNhbGxPbkNvbXBsZXRlKClcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIC8vIE5hdmlnYXRlIHRvIHRoZSBjb21wb25lbnQncyBwYXRoLCB0aGVuIGNhbGwgYG9uQ29tcGxldGUoKWBfOlxuICAgICAgICAgICAgICB0aGlzLiRyb3V0ZXJcbiAgICAgICAgICAgICAgICAucHVzaCh7IHBhdGggfSlcbiAgICAgICAgICAgICAgICAuY2F0Y2gocmVqZWN0KVxuICAgICAgICAgICAgICAgIC8vIFdhaXQgZm9yIHRoZSBsYXN0IHJvdXRlIGNvbXBvbmVudCB0byBiZSBtb3VudGVkIGluIHRoZSBuZXh0XG4gICAgICAgICAgICAgICAgLy8gdGljayBiZWZvcmUgY2FsbGluZyBgb25Db21wbGV0ZSgpYFxuICAgICAgICAgICAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgIHRoaXMuJG5leHRUaWNrKGNhbGxPbkNvbXBsZXRlKVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIEtlZXAgcmVtb3ZpbmcgdGhlIGxhc3QgcGFydCB1bnRpbCB3ZSBmaW5kIGEgbWF0Y2guXG4gICAgICAgICAgZGF0YVBhdGhQYXJ0cy5wb3AoKVxuICAgICAgICB9XG4gICAgICAgIHJlc29sdmUoZmFsc2UpXG4gICAgICB9KVxuICAgIH1cbiAgfSwgLy8gZW5kIG9mIGBtZXRob2RzYFxuXG4gIGFzeW5jIHByb2Nlc3NTY2hlbWEoXG4gICAgYXBpLFxuICAgIHNjaGVtYSxcbiAgICBuYW1lLFxuICAgIHJvdXRlcyxcbiAgICBsZXZlbCxcbiAgICBuZXN0ZWQgPSBmYWxzZSxcbiAgICBmbGF0dGVuID0gZmFsc2UsXG4gICAgcHJvY2VzcyA9IG51bGxcbiAgKSB7XG4gICAgcHJvY2Vzc1JvdXRlU2NoZW1hKGFwaSwgc2NoZW1hLCBuYW1lKVxuICAgIGNvbnN0IGlubGluZWQgPSBpc0lubGluZWQoc2NoZW1hKVxuICAgIGlmIChpbmxpbmVkICYmIHNjaGVtYS5yZXNvdXJjZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgTmVzdGVkICR7XG4gICAgICAgICAgdGhpcy5pc0xpc3RTb3VyY2VcbiAgICAgICAgICAgID8gJ2xpc3RzJ1xuICAgICAgICAgICAgOiB0aGlzLmlzT2JqZWN0U291cmNlXG4gICAgICAgICAgICAgID8gJ29iamVjdHMnXG4gICAgICAgICAgICAgIDogJ3NjaGVtYSdcbiAgICAgICAgfSBjYW5ub3QgbG9hZCBkYXRhIGZyb20gdGhlaXIgb3duIHJlc291cmNlc2BcbiAgICAgIClcbiAgICB9XG4gICAgLy8gVXNlIGRpZmZlcmVudGx5IG5hbWVkIHVybCBwYXJhbWV0ZXJzIG9uIGVhY2ggbmVzdGVkIGxldmVsIGZvciBpZCBhc1xuICAgIC8vIG90aGVyd2lzZSB0aGV5IHdvdWxkIGNsYXNoIGFuZCBvdmVycmlkZSBlYWNoIG90aGVyIGluc2lkZSAkcm91dGUucGFyYW1zXG4gICAgLy8gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vdnVlanMvdnVlLXJvdXRlci9pc3N1ZXMvMTM0NVxuICAgIGNvbnN0IHBhcmFtID0gYGlkJHtsZXZlbCArIDF9YFxuICAgIGNvbnN0IG1ldGEgPSB7XG4gICAgICBhcGksXG4gICAgICBzY2hlbWFcbiAgICB9XG4gICAgY29uc3QgZm9ybU1ldGEgPSB7XG4gICAgICAuLi5tZXRhLFxuICAgICAgLy8gV2hlbiBjaGlsZHJlbiBhcmUgZmxhdHRlbmVkIChlLmcuIHRyZWUtbGlzdHMpLCBpbmNsdWRlIHRoZSBgZmxhdHRlbmBcbiAgICAgIC8vIHNldHRpbmcgYWxzbywgZm9yIGZsYXR0ZW5pbmcgYmVsb3cuXG4gICAgICBmbGF0dGVuLFxuICAgICAgbmVzdGVkLFxuICAgICAgcGFyYW1cbiAgICB9XG4gICAgY29uc3QgY2hpbGRSb3V0ZXMgPSBhd2FpdCBwcm9jZXNzRm9ybXMoYXBpLCBzY2hlbWEsIGxldmVsKVxuICAgIGlmIChwcm9jZXNzKSB7XG4gICAgICBhd2FpdCBwcm9jZXNzKGNoaWxkUm91dGVzLCBsZXZlbCArIDEpXG4gICAgfVxuICAgIC8vIElubGluZWQgZm9ybXMgZG9uJ3QgbmVlZCB0byBhY3R1YWxseSBhZGQgcm91dGVzLlxuICAgIGlmIChoYXNGb3JtU2NoZW1hKHNjaGVtYSkgJiYgIWlubGluZWQpIHtcbiAgICAgIC8vIExpc3RzIGluIHNpbmdsZS1jb21wb25lbnQtdmlld3MgKGxldmVsID09PSAwKSB1c2UgdGhlaXIgdmlldydzIHBhdGgsXG4gICAgICAvLyB3aGlsZSBhbGwgb3RoZXJzIG5lZWQgdGhlaXIgcGF0aCBwcmVmaXhlZCB3aXRoIHRoZSBwYXJlbnQncyBwYXRoOlxuICAgICAgY29uc3Qgc291cmNlUGF0aCA9IGxldmVsID09PSAwID8gJycgOiBzY2hlbWEucGF0aFxuICAgICAgY29uc3QgZm9ybVJvdXRlID0ge1xuICAgICAgICBwYXRoOiBnZXRQYXRoV2l0aFBhcmFtKFxuICAgICAgICAgIHNvdXJjZVBhdGgsXG4gICAgICAgICAgLy8gT2JqZWN0IHNvdXJjZXMgZG9uJ3QgbmVlZCBpZCBwYXJhbXMgaW4gdGhlaXIgZm9ybSBwYXRocywgYXMgdGhleVxuICAgICAgICAgIC8vIGRpcmVjdGx5IGVkaXQgb25lIG9iamVjdC5cbiAgICAgICAgICBpc0xpc3RTb3VyY2Uoc2NoZW1hKSA/IHBhcmFtIDogbnVsbFxuICAgICAgICApLFxuICAgICAgICBjb21wb25lbnQ6IERpdG9Db21wb25lbnQuY29tcG9uZW50KFxuICAgICAgICAgIG5lc3RlZCA/ICdEaXRvRm9ybU5lc3RlZCcgOiAnRGl0b0Zvcm0nXG4gICAgICAgICksXG4gICAgICAgIG1ldGE6IGZvcm1NZXRhXG4gICAgICB9XG4gICAgICBpZiAoaXNPYmplY3RTb3VyY2Uoc2NoZW1hKSkge1xuICAgICAgICAvLyBBbHNvIGFkZCBhIHBhcmFtIHJvdXRlLCBzaW1wbHkgdG8gaGFuZGxlICcvY3JlYXRlJyBsaW5rcyB0aGUgc2FtZVxuICAgICAgICAvLyB3YXkgdGhhdCBsaXN0cyBkbywgd2hlcmUgaXQgb3ZlcmxhcHMgd2l0aCA6aWQgZm9yIGl0ZW0gaWRzLlxuICAgICAgICByb3V0ZXMucHVzaCh7XG4gICAgICAgICAgLi4uZm9ybVJvdXRlLFxuICAgICAgICAgIHBhdGg6IGdldFBhdGhXaXRoUGFyYW0oc291cmNlUGF0aCwgcGFyYW0pXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgICBpZiAoc291cmNlUGF0aCkge1xuICAgICAgICAvLyBKdXN0IHJlZGlyZWN0IGJhY2sgdG8gdGhlIHBhcmVudCB3aGVuIGEgbmVzdGVkIHNvdXJjZSByb3V0ZSBpcyBoaXQuXG4gICAgICAgIHJvdXRlcy5wdXNoKHtcbiAgICAgICAgICBwYXRoOiBzb3VyY2VQYXRoLFxuICAgICAgICAgIHJlZGlyZWN0OiAnLicsXG4gICAgICAgICAgbWV0YVxuICAgICAgICB9KVxuICAgICAgfVxuICAgICAgLy8gUGFydGl0aW9uIGNoaWxkUm91dGVzIGludG8gdGhvc2UgdGhhdCBuZWVkIGZsYXR0ZW5pbmcgKGUuZy4gdHJlZS1saXN0cylcbiAgICAgIC8vIGFuZCB0aG9zZSB0aGF0IGRvbid0LCBhbmQgcHJvY2VzcyBlYWNoIGdyb3VwIHNlcGFyYXRlbHkgYWZ0ZXIuXG4gICAgICBjb25zdCBbZmxhdFJvdXRlcywgc3ViUm91dGVzXSA9IGNoaWxkUm91dGVzLnJlZHVjZShcbiAgICAgICAgKHJlcywgcm91dGUpID0+IHtcbiAgICAgICAgICByZXNbcm91dGUubWV0YS5mbGF0dGVuID8gMCA6IDFdLnB1c2gocm91dGUpXG4gICAgICAgICAgcmV0dXJuIHJlc1xuICAgICAgICB9LFxuICAgICAgICBbW10sIFtdXVxuICAgICAgKVxuICAgICAgaWYgKHN1YlJvdXRlcy5sZW5ndGgpIHtcbiAgICAgICAgZm9ybVJvdXRlLmNoaWxkcmVuID0gc3ViUm91dGVzXG4gICAgICB9XG4gICAgICByb3V0ZXMucHVzaChmb3JtUm91dGUpXG4gICAgICAvLyBBZGQgdGhlIHByZWZpeGVkIGZvcm1Sb3V0ZXMgd2l0aCB0aGVpciBjaGlsZHJlbiBmb3IgbmVzdGVkIGxpc3RzLlxuICAgICAgaWYgKGZsYXRSb3V0ZXMubGVuZ3RoKSB7XG4gICAgICAgIGZvciAoY29uc3QgY2hpbGRSb3V0ZSBvZiBmbGF0Um91dGVzKSB7XG4gICAgICAgICAgcm91dGVzLnB1c2goe1xuICAgICAgICAgICAgLi4uKGNoaWxkUm91dGUucmVkaXJlY3QgPyBjaGlsZFJvdXRlIDogZm9ybVJvdXRlKSxcbiAgICAgICAgICAgIHBhdGg6IGAke2Zvcm1Sb3V0ZS5wYXRofS8ke2NoaWxkUm91dGUucGF0aH1gLFxuICAgICAgICAgICAgbWV0YToge1xuICAgICAgICAgICAgICAuLi5jaGlsZFJvdXRlLm1ldGEsXG4gICAgICAgICAgICAgIGZsYXR0ZW5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIHByb2Nlc3NWYWx1ZShzY2hlbWEsIHZhbHVlLCBkYXRhUGF0aCwgZ3JhcGgpIHtcbiAgICBncmFwaC5hZGRTb3VyY2UoZGF0YVBhdGgsIHNjaGVtYSlcbiAgICByZXR1cm4gdmFsdWVcbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRQYXRoV2l0aFBhcmFtKHBhdGgsIHBhcmFtKSB7XG4gIHJldHVybiBwYXJhbVxuICAgID8gcGF0aFxuICAgICAgPyBgJHtwYXRofS86JHtwYXJhbX1gXG4gICAgICA6IGA6JHtwYXJhbX1gXG4gICAgOiBwYXRoXG59XG4iLCJpbXBvcnQgeyBpc0FycmF5LCBhc0FycmF5LCBsYWJlbGl6ZSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQgeyBnZXROYW1lZFNjaGVtYXMsIHByb2Nlc3NOZXN0ZWRTY2hlbWFEZWZhdWx0cyB9IGZyb20gJy4vc2NoZW1hJ1xuXG5leHBvcnQgY29uc3QgZmlsdGVyQ29tcG9uZW50cyA9IHtcbiAgJ3RleHQnKGZpbHRlcikge1xuICAgIGNvbnN0IG9wdGlvbnMgPSBbXG4gICAgICB7XG4gICAgICAgIGxhYmVsOiAnY29udGFpbnMnLFxuICAgICAgICB2YWx1ZTogJ2NvbnRhaW5zJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbGFiZWw6ICdlcXVhbHMnLFxuICAgICAgICB2YWx1ZTogJ2VxdWFscydcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGxhYmVsOiAnc3RhcnRzIHdpdGgnLFxuICAgICAgICB2YWx1ZTogJ3N0YXJ0cy13aXRoJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbGFiZWw6ICdlbmRzIHdpdGgnLFxuICAgICAgICB2YWx1ZTogJ2VuZHMtd2l0aCdcbiAgICAgIH1cbiAgICBdXG4gICAgcmV0dXJuIHtcbiAgICAgIG9wZXJhdG9yOiBmaWx0ZXIub3BlcmF0b3JzXG4gICAgICAgID8ge1xuICAgICAgICAgICAgdHlwZTogJ3NlbGVjdCcsXG4gICAgICAgICAgICB3aWR0aDogJzIvNScsXG4gICAgICAgICAgICBvcHRpb25zOiBpc0FycmF5KGZpbHRlci5vcGVyYXRvcnMpXG4gICAgICAgICAgICAgID8gb3B0aW9ucy5maWx0ZXIoXG4gICAgICAgICAgICAgICAgICBvcHRpb24gPT4gZmlsdGVyLm9wZXJhdG9ycy5pbmNsdWRlcyhvcHRpb24udmFsdWUpXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICA6IG9wdGlvbnMsXG4gICAgICAgICAgICBjbGVhcmFibGU6IHRydWVcbiAgICAgICAgICB9XG4gICAgICAgIDogbnVsbCxcbiAgICAgIHRleHQ6IHtcbiAgICAgICAgdHlwZTogJ3RleHQnLFxuICAgICAgICB3aWR0aDogZmlsdGVyLm9wZXJhdG9ycyA/ICczLzUnIDogJ2ZpbGwnLFxuICAgICAgICBjbGVhcmFibGU6IHRydWVcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgJ2RhdGUtcmFuZ2UnKCkge1xuICAgIGNvbnN0IGRhdGV0aW1lID0ge1xuICAgICAgdHlwZTogJ2RhdGV0aW1lJyxcbiAgICAgIHdpZHRoOiAnMS8yJyxcbiAgICAgIGZvcm1hdHM6IHtcbiAgICAgICAgLy8gVXNlIHNob3J0ZXIgZGF0ZSBmb3JtYXQgaW4gZGF0ZS1yYW5nZSBmaWx0ZXJzOlxuICAgICAgICBkYXRlOiB7XG4gICAgICAgICAgZGF5OiAnMi1kaWdpdCcsXG4gICAgICAgICAgbW9udGg6ICcyLWRpZ2l0JyxcbiAgICAgICAgICB5ZWFyOiAnbnVtZXJpYydcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIGNsZWFyYWJsZTogdHJ1ZVxuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgZnJvbTogZGF0ZXRpbWUsXG4gICAgICB0bzogZGF0ZXRpbWVcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUZpbHRlcnNQYW5lbChhcGksIGZpbHRlcnMsIGRhdGFQYXRoLCBxdWVyeSkge1xuICBjb25zdCB7IHN0aWNreSwgLi4uZmlsdGVyU2NoZW1hcyB9ID0gZmlsdGVyc1xuICBjb25zdCBwYW5lbCA9IHtcbiAgICB0eXBlOiAncGFuZWwnLFxuICAgIGxhYmVsOiAnRmlsdGVycycsXG4gICAgbmFtZTogJyRmaWx0ZXJzJyxcbiAgICAvLyBPdmVycmlkZSB0aGUgZGVmYXVsdCB2YWx1ZVxuICAgIGRpc2FibGVkOiBmYWxzZSxcbiAgICBzdGlja3ksXG5cbiAgICAvLyBOT1RFOiBPbiBwYW5lbHMsIHRoZSBkYXRhKCkgY2FsbGJhY2sgZG9lcyBzb21ldGhpbmcgZWxzZSB0aGFuIG9uIG5vcm1hbFxuICAgIC8vIHNjaGVtYTogSXQgcHJvZHVjZXMgdGhlIGBkYXRhYCBwcm9wZXJ0eSB0byBiZSBwYXNzZWQgdG8gdGhlIHBhbmVsJ3NcbiAgICAvLyBzY2hlbWEsIG5vdCB0aGUgZGF0YSB0byBiZSB1c2VkIGZvciB0aGUgcGFuZWwgY29tcG9uZW50IGRpcmVjdGx5LlxuICAgIGRhdGEoKSB7XG4gICAgICByZXR1cm4gcGFyc2VGaWx0ZXJzRGF0YShcbiAgICAgICAgcGFuZWwsXG4gICAgICAgIHF1ZXJ5LnZhbHVlXG4gICAgICApXG4gICAgfSxcblxuICAgIGNvbXBvbmVudHM6IGNyZWF0ZUZpbHRlcnNDb21wb25lbnRzKGZpbHRlclNjaGVtYXMpLFxuICAgIGJ1dHRvbnM6IGNyZWF0ZUZpbHRlcnNCdXR0b25zKGZhbHNlKSxcbiAgICBwYW5lbEJ1dHRvbnM6IGNyZWF0ZUZpbHRlcnNCdXR0b25zKHRydWUpLFxuXG4gICAgZXZlbnRzOiB7XG4gICAgICBjaGFuZ2UoKSB7XG4gICAgICAgIHRoaXMuYXBwbHlGaWx0ZXJzKClcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgY29tcHV0ZWQ6IHtcbiAgICAgIGZpbHRlcnMoKSB7XG4gICAgICAgIHJldHVybiBmb3JtYXRGaWx0ZXJzRGF0YSh0aGlzLnNjaGVtYSwgdGhpcy5kYXRhKVxuICAgICAgfSxcblxuICAgICAgaGFzRmlsdGVycygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZmlsdGVycy5sZW5ndGggPiAwXG4gICAgICB9XG4gICAgfSxcblxuICAgIG1ldGhvZHM6IHtcbiAgICAgIGFwcGx5RmlsdGVycygpIHtcbiAgICAgICAgcXVlcnkudmFsdWUgPSB7XG4gICAgICAgICAgLi4ucXVlcnkudmFsdWUsXG4gICAgICAgICAgZmlsdGVyOiB0aGlzLmZpbHRlcnMsXG4gICAgICAgICAgLy8gQ2xlYXIgcGFnaW5hdGlvbiB3aGVuIGFwcGx5aW5nIG9yIGNsZWFyaW5nIGZpbHRlcnM6XG4gICAgICAgICAgcGFnZTogdW5kZWZpbmVkXG4gICAgICAgIH1cbiAgICAgIH0sXG5cbiAgICAgIGNsZWFyRmlsdGVycygpIHtcbiAgICAgICAgdGhpcy5yZXNldERhdGEoKVxuICAgICAgICB0aGlzLmFwcGx5RmlsdGVycygpXG4gICAgICB9XG4gICAgfVxuICB9XG4gIHByb2Nlc3NOZXN0ZWRTY2hlbWFEZWZhdWx0cyhhcGksIHBhbmVsKVxuICByZXR1cm4gcGFuZWxcbn1cblxuZnVuY3Rpb24gY3JlYXRlRmlsdGVyc0J1dHRvbnMoc21hbGwpIHtcbiAgcmV0dXJuIHtcbiAgICBjbGVhcjoge1xuICAgICAgdHlwZTogJ2J1dHRvbicsXG4gICAgICB0ZXh0OiBzbWFsbCA/IG51bGwgOiAnQ2xlYXInLFxuICAgICAgZGlzYWJsZWQ6ICh7IHNjaGVtYUNvbXBvbmVudCB9KSA9PiAhc2NoZW1hQ29tcG9uZW50Lmhhc0ZpbHRlcnMsXG4gICAgICBldmVudHM6IHtcbiAgICAgICAgY2xpY2soeyBzY2hlbWFDb21wb25lbnQgfSkge1xuICAgICAgICAgIC8vIFNpbmNlIHBhbmVsIGJ1dHRvbnMgYXJlIG91dHNpZGUgb2YgdGhlIHNjaGVtYSwgd2UgbmVlZCB0byB1c2UgdGhlXG4gICAgICAgICAgLy8gc2NoZW1hIGNvbXBvbmVudCByZWNlaXZlZCBmcm9tIHRoZSBpbml0aWFsaXplIGV2ZW50IGJlbG93OlxuICAgICAgICAgIHNjaGVtYUNvbXBvbmVudC5jbGVhckZpbHRlcnMoKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIHN1Ym1pdDoge1xuICAgICAgdHlwZTogJ3N1Ym1pdCcsXG4gICAgICB0ZXh0OiBzbWFsbCA/IG51bGwgOiAnRmlsdGVyJyxcbiAgICAgIHZpc2libGU6ICFzbWFsbCxcbiAgICAgIGV2ZW50czoge1xuICAgICAgICBjbGljayh7IHNjaGVtYUNvbXBvbmVudCB9KSB7XG4gICAgICAgICAgc2NoZW1hQ29tcG9uZW50LmFwcGx5RmlsdGVycygpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0RGF0YU5hbWUoZmlsdGVyTmFtZSkge1xuICAvLyBQcmVmaXggZmlsdGVyIGRhdGEga2V5cyB3aXRoICckJyB0byBhdm9pZCBjb25mbGljdHMgd2l0aCBvdGhlciBkYXRhIGtleXM6XG4gIHJldHVybiBgJCR7ZmlsdGVyTmFtZX1gXG59XG5cbmZ1bmN0aW9uIGdldEZpbHRlck5hbWUoZGF0YU5hbWUpIHtcbiAgcmV0dXJuIGRhdGFOYW1lLnN0YXJ0c1dpdGgoJyQnKSA/IGRhdGFOYW1lLnNsaWNlKDEpIDogbnVsbFxufVxuXG5mdW5jdGlvbiBjcmVhdGVGaWx0ZXJzQ29tcG9uZW50cyhmaWx0ZXJzKSB7XG4gIGNvbnN0IGNvbXBzID0ge31cbiAgZm9yIChjb25zdCBmaWx0ZXIgb2YgT2JqZWN0LnZhbHVlcyhnZXROYW1lZFNjaGVtYXMoZmlsdGVycykgfHwge30pKSB7XG4gICAgLy8gU3VwcG9ydCBib3RoIGN1c3RvbSBmb3JtcyBhbmQgZGVmYXVsdCBmaWx0ZXIgY29tcG9uZW50cywgdGhyb3VnaCB0aGVcbiAgICAvLyBgZmlsdGVyQ29tcG9uZW50c2AgcmVnaXN0cnkuIEV2ZW4gZm9yIGRlZmF1bHQgZmlsdGVycywgc3RpbGwgdXNlIHRoZVxuICAgIC8vIHByb3BlcnRpZXMgaW4gYGZpbHRlcmAgYXMgdGhlIGJhc2UgZm9yIGBmb3JtYCwgc28gdGhpbmdzIGxpa2UgYGxhYmVsYFxuICAgIC8vIGNhbiBiZSBjaGFuZ2VkIG9uIHRoZSByZXN1bHRpbmcgZm9ybS5cbiAgICBjb25zdCB7IGZpbHRlcjogdHlwZSwgd2lkdGgsIC4uLmZvcm0gfSA9IGZpbHRlclxuICAgIGNvbnN0IGNvbXBvbmVudHMgPSB0eXBlXG4gICAgICA/IGZpbHRlckNvbXBvbmVudHNbdHlwZV0/LihmaWx0ZXIpXG4gICAgICA6IGZpbHRlci5jb21wb25lbnRzXG4gICAgaWYgKGNvbXBvbmVudHMpIHtcbiAgICAgIGZvcm0udHlwZSA9ICdmb3JtJ1xuICAgICAgZm9ybS5jb21wb25lbnRzID0ge31cbiAgICAgIC8vIENvbnZlcnQgbGFiZWxzIHRvIHBsYWNlaG9sZGVyczpcbiAgICAgIGZvciAoY29uc3QgW2tleSwgY29tcG9uZW50XSBvZiBPYmplY3QuZW50cmllcyhjb21wb25lbnRzKSkge1xuICAgICAgICBpZiAoY29tcG9uZW50KSB7XG4gICAgICAgICAgY29uc3QgbGFiZWwgPSBjb21wb25lbnQubGFiZWwgfHwgbGFiZWxpemUoY29tcG9uZW50Lm5hbWUgfHwga2V5KVxuICAgICAgICAgIGZvcm0uY29tcG9uZW50c1trZXldID0ge1xuICAgICAgICAgICAgLi4uY29tcG9uZW50LFxuICAgICAgICAgICAgbGFiZWw6IGZhbHNlLFxuICAgICAgICAgICAgcGxhY2Vob2xkZXI6IGxhYmVsXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBjb21wc1tnZXREYXRhTmFtZShmaWx0ZXIubmFtZSldID0ge1xuICAgICAgICBsYWJlbDogZm9ybS5sYWJlbCA/PyBsYWJlbGl6ZShmaWx0ZXIubmFtZSksXG4gICAgICAgIHR5cGU6ICdvYmplY3QnLFxuICAgICAgICB3aWR0aCxcbiAgICAgICAgZGVmYXVsdDogKCkgPT4gKHt9KSxcbiAgICAgICAgZm9ybSxcbiAgICAgICAgaW5saW5lZDogdHJ1ZVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBJbnZhbGlkIGZpbHRlciAnJHtmaWx0ZXIubmFtZX0nOiBVbmtub3duIGZpbHRlciB0eXBlICcke3R5cGV9Jy5gXG4gICAgICApXG4gICAgfVxuICB9XG4gIHJldHVybiBjb21wc1xufVxuXG5mdW5jdGlvbiBnZXRDb21wb25lbnRzRm9yRmlsdGVyKHNjaGVtYSwgZGF0YU5hbWUpIHtcbiAgY29uc3QgY29tcG9uZW50ID0gc2NoZW1hLmNvbXBvbmVudHNbZGF0YU5hbWVdXG4gIHJldHVybiBjb21wb25lbnQ/LmZvcm0/LmNvbXBvbmVudHNcbn1cblxuZnVuY3Rpb24gZm9ybWF0RmlsdGVyc0RhdGEoc2NoZW1hLCBkYXRhKSB7XG4gIGNvbnN0IGZpbHRlcnMgPSBbXVxuICBmb3IgKGNvbnN0IGRhdGFOYW1lIGluIGRhdGEpIHtcbiAgICBjb25zdCBlbnRyeSA9IGRhdGFbZGF0YU5hbWVdXG4gICAgaWYgKGVudHJ5KSB7XG4gICAgICAvLyBNYXAgY29tcG9uZW50cyBzZXF1ZW5jZSB0byBhcmd1bWVudHM6XG4gICAgICBjb25zdCBhcmdzID0gT2JqZWN0LmtleXMoXG4gICAgICAgIGdldENvbXBvbmVudHNGb3JGaWx0ZXIoc2NoZW1hLCBkYXRhTmFtZSlcbiAgICAgICkubWFwKFxuICAgICAgICBrZXkgPT4gZW50cnlba2V5XSA/PyBudWxsXG4gICAgICApXG4gICAgICAvLyBPbmx5IGFwcGx5IGZpbHRlciBpZiB0aGVyZSBhcmUgc29tZSBhcmd1bWVudHMgdGhhdCBhcmVuJ3QgbnVsbDpcbiAgICAgIGlmIChhcmdzLnNvbWUodmFsdWUgPT4gdmFsdWUgIT09IG51bGwpKSB7XG4gICAgICAgIGZpbHRlcnMucHVzaChcbiAgICAgICAgICBgJHtcbiAgICAgICAgICAgIGdldEZpbHRlck5hbWUoZGF0YU5hbWUpXG4gICAgICAgICAgfToke1xuICAgICAgICAgICAgYXJncy5tYXAoSlNPTi5zdHJpbmdpZnkpLmpvaW4oJywnKVxuICAgICAgICAgIH1gXG4gICAgICAgIClcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIGZpbHRlcnNcbn1cblxuZnVuY3Rpb24gcGFyc2VGaWx0ZXJzRGF0YShzY2hlbWEsIHF1ZXJ5KSB7XG4gIGNvbnN0IGZpbHRlcnMgPSB7fVxuICAvLyBTYW1lIGFzIEBkaXRvanMvc2VydmVyJ3MgUXVlcnlQYXJhbWV0ZXJzLmZpbHRlcjogVHJhbnNsYXRlIHRoZSBzdHJpbmcgZGF0YVxuICAvLyBmcm9tICRyb3V0ZS5xdWVyeSBiYWNrIHRvIHBhcmFtIGxpc3RzIHBlciBmaWx0ZXI6XG4gIGlmIChxdWVyeSkge1xuICAgIGZvciAoY29uc3QgZmlsdGVyIG9mIGFzQXJyYXkocXVlcnkuZmlsdGVyKSkge1xuICAgICAgY29uc3QgWywgZmlsdGVyTmFtZSwganNvbl0gPSBmaWx0ZXIubWF0Y2goL14oXFx3Kyk6KC4qKSQvKVxuICAgICAgdHJ5IHtcbiAgICAgICAgZmlsdGVyc1tmaWx0ZXJOYW1lXSA9IGFzQXJyYXkoSlNPTi5wYXJzZShgWyR7anNvbn1dYCkpXG4gICAgICB9IGNhdGNoIChlcnJvcikge31cbiAgICB9XG4gIH1cbiAgY29uc3QgZmlsdGVyc0RhdGEgPSB7fVxuICBmb3IgKGNvbnN0IGRhdGFOYW1lIGluIHNjaGVtYS5jb21wb25lbnRzKSB7XG4gICAgY29uc3QgZGF0YSA9IHt9XG4gICAgLy8gSWYgd2UgaGF2ZSByZXRyaWV2ZWQgcGFyYW1zIGZyb20gdGhlIHF1ZXJ5LCBmZXRjaCB0aGUgYXNzb2NpYXRlZFxuICAgIC8vIGZvcm0gY29tcG9uZW50cyBzbyB3ZSBjYW4gbWFwIHRoZSB2YWx1ZXMgYmFjayB0byBvYmplY3Qga2V5czpcbiAgICBjb25zdCBhcmdzID0gZmlsdGVyc1tnZXRGaWx0ZXJOYW1lKGRhdGFOYW1lKV1cbiAgICBpZiAoYXJncykge1xuICAgICAgY29uc3QgY29tcG9uZW50cyA9IGdldENvbXBvbmVudHNGb3JGaWx0ZXIoc2NoZW1hLCBkYXRhTmFtZSlcbiAgICAgIGlmIChjb21wb25lbnRzKSB7XG4gICAgICAgIGxldCBpbmRleCA9IDBcbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gY29tcG9uZW50cykge1xuICAgICAgICAgIGRhdGFba2V5XSA9IGFyZ3NbaW5kZXgrK11cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBmaWx0ZXJzRGF0YVtkYXRhTmFtZV0gPSBkYXRhXG4gIH1cbiAgcmV0dXJuIGZpbHRlcnNEYXRhXG59XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuLmRpdG8tbGlzdChcbiAgdi1pZj1cImlzUmVhZHlcIlxuICA6aWQ9XCJkYXRhUGF0aFwiXG4pXG4gIC5kaXRvLWxpc3RfX2hlYWRlcihcbiAgICB2LWlmPVwic2NvcGVzIHx8IGhhc1BhZ2luYXRpb25cIlxuICApXG4gICAgRGl0b1Njb3BlcyhcbiAgICAgIHYtaWY9XCJzY29wZXNcIlxuICAgICAgOnF1ZXJ5PVwicXVlcnlcIlxuICAgICAgOnNjb3Blcz1cInNjb3Blc1wiXG4gICAgKVxuICAgIC8vLSBXaGVuIHRoZXJlJ3Mgb25seSBwYWdpbmF0aW9uIHdpdGhvdXQgc2NvcGVzLCB3ZSBuZWVkIGEgZ29vZCBvbCcgc3BhY2VyXG4gICAgLy8tIGRpdiwgZm9yIHRoZSBsYXlvdXQgbm90IHRvIGJyZWFrLi4uXG4gICAgLmRpdG8tc3BhY2VyKFxuICAgICAgdi1lbHNlLWlmPVwiaGFzUGFnaW5hdGlvblwiXG4gICAgKVxuICAgIERpdG9QYWdpbmF0aW9uKFxuICAgICAgdi1pZj1cImhhc1BhZ2luYXRpb25cIlxuICAgICAgOnF1ZXJ5PVwicXVlcnlcIlxuICAgICAgOmxpbWl0PVwicGFnaW5hdGVcIlxuICAgICAgOnRvdGFsPVwidG90YWwgfHwgMFwiXG4gICAgKVxuICB0YWJsZS5kaXRvLXRhYmxlKFxuICAgIDpjbGFzcz1ge1xuICAgICAgJ2RpdG8tdGFibGUtc2VwYXJhdG9ycyc6IGlzSW5saW5lZCxcbiAgICAgICdkaXRvLXRhYmxlLWxhcmdlci1wYWRkaW5nJzogaGFzRWRpdEJ1dHRvbnMgJiYgIWlzSW5saW5lZCxcbiAgICAgICdkaXRvLXRhYmxlLWFsdGVybmF0ZS1jb2xvcnMnOiAhaXNJbmxpbmVkLFxuICAgICAgJ2RpdG8tdGFibGUtZXZlbi1jb3VudCc6IGhhc0V2ZW5Db3VudFxuICAgIH1gXG4gIClcbiAgICBEaXRvVGFibGVIZWFkKFxuICAgICAgdi1pZj1cImNvbHVtbnNcIlxuICAgICAgOnF1ZXJ5PVwicXVlcnlcIlxuICAgICAgOmNvbHVtbnM9XCJjb2x1bW5zXCJcbiAgICAgIDpoYXNFZGl0QnV0dG9ucz1cImhhc0VkaXRCdXR0b25zXCJcbiAgICApXG4gICAgRGl0b0RyYWdnYWJsZShcbiAgICAgIHRhZz1cInRib2R5XCJcbiAgICAgIDptb2RlbFZhbHVlPVwidXBkYXRlT3JkZXIoc291cmNlU2NoZW1hLCBsaXN0RGF0YSwgcGFnaW5hdGlvblJhbmdlKVwiXG4gICAgICA6b3B0aW9ucz1cImdldERyYWdnYWJsZU9wdGlvbnMoKVwiXG4gICAgICA6ZHJhZ2dhYmxlPVwiZHJhZ2dhYmxlXCJcbiAgICAgIEB1cGRhdGU6bW9kZWxWYWx1ZT1cInZhbHVlID0+IChsaXN0RGF0YSA9IHZhbHVlKVwiXG4gICAgKVxuICAgICAgdHIoXG4gICAgICAgIHYtZm9yPVwiKGl0ZW0sIGluZGV4KSBpbiBsaXN0RGF0YVwiXG4gICAgICAgIDppZD1cImdldERhdGFQYXRoKGluZGV4KVwiXG4gICAgICAgIDprZXk9XCJnZXRJdGVtVWlkKHNjaGVtYSwgaXRlbSlcIlxuICAgICAgKVxuICAgICAgICB0ZW1wbGF0ZShcbiAgICAgICAgICB2LWlmPVwiY29sdW1uc1wiXG4gICAgICAgIClcbiAgICAgICAgICB0ZW1wbGF0ZShcbiAgICAgICAgICAgIHYtZm9yPVwiY29sdW1uIGluIGNvbHVtbnNcIlxuICAgICAgICAgIClcbiAgICAgICAgICAgIERpdG9UYWJsZUNlbGwoXG4gICAgICAgICAgICAgIHYtaWY9XCJzaG91bGRSZW5kZXJTY2hlbWEoY29sdW1uKVwiXG4gICAgICAgICAgICAgIDprZXk9XCJjb2x1bW4ubmFtZVwiXG4gICAgICAgICAgICAgIDpjbGFzcz1cImdldENlbGxDbGFzcyhjb2x1bW4pXCJcbiAgICAgICAgICAgICAgOmNlbGw9XCJjb2x1bW5cIlxuICAgICAgICAgICAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICAgICAgICAgICAgOmRhdGFQYXRoPVwiZ2V0RGF0YVBhdGgoaW5kZXgpXCJcbiAgICAgICAgICAgICAgOmRhdGE9XCJpdGVtXCJcbiAgICAgICAgICAgICAgOm1ldGE9XCJuZXN0ZWRNZXRhXCJcbiAgICAgICAgICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgICAgICAgICAgICA6bmVzdGVkPVwiZmFsc2VcIlxuICAgICAgICAgICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZCB8fCBpc0xvYWRpbmdcIlxuICAgICAgICAgICAgKVxuICAgICAgICB0ZW1wbGF0ZShcbiAgICAgICAgICB2LWVsc2VcbiAgICAgICAgKVxuICAgICAgICAgIHRkXG4gICAgICAgICAgICBEaXRvU2NoZW1hSW5saW5lZChcbiAgICAgICAgICAgICAgdi1pZj1cImlzSW5saW5lZFwiXG4gICAgICAgICAgICAgIDpsYWJlbD1cImdldEl0ZW1MYWJlbChzY2hlbWEsIGl0ZW0sIHsgaW5kZXgsIGFzT2JqZWN0OiB0cnVlIH0pXCJcbiAgICAgICAgICAgICAgOnNjaGVtYT1cImdldEl0ZW1Gb3JtU2NoZW1hKHNjaGVtYSwgaXRlbSwgY29udGV4dClcIlxuICAgICAgICAgICAgICA6ZGF0YVBhdGg9XCJnZXREYXRhUGF0aChpbmRleClcIlxuICAgICAgICAgICAgICA6ZGF0YT1cIml0ZW1cIlxuICAgICAgICAgICAgICA6bWV0YT1cIm5lc3RlZE1ldGFcIlxuICAgICAgICAgICAgICA6c3RvcmU9XCJnZXRJdGVtU3RvcmUoc2NoZW1hLCBpdGVtLCBpbmRleClcIlxuICAgICAgICAgICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZCB8fCBpc0xvYWRpbmdcIlxuICAgICAgICAgICAgICA6Y29sbGFwc2VkPVwiY29sbGFwc2VkXCJcbiAgICAgICAgICAgICAgOmNvbGxhcHNpYmxlPVwiY29sbGFwc2libGVcIlxuICAgICAgICAgICAgICA6ZGVsZXRhYmxlPVwiZGVsZXRhYmxlXCJcbiAgICAgICAgICAgICAgOmRyYWdnYWJsZT1cImRyYWdnYWJsZVwiXG4gICAgICAgICAgICAgIDplZGl0YWJsZT1cImVkaXRhYmxlXCJcbiAgICAgICAgICAgICAgOmVkaXRQYXRoPVwiZ2V0RWRpdFBhdGgoaXRlbSwgaW5kZXgpXCJcbiAgICAgICAgICAgICAgQGRlbGV0ZT1cImRlbGV0ZUl0ZW0oaXRlbSwgaW5kZXgpXCJcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIGNvbXBvbmVudChcbiAgICAgICAgICAgICAgdi1lbHNlLWlmPVwic2NoZW1hLmNvbXBvbmVudFwiXG4gICAgICAgICAgICAgIDppcz1cInNjaGVtYS5jb21wb25lbnRcIlxuICAgICAgICAgICAgICA6ZGF0YVBhdGg9XCJnZXREYXRhUGF0aChpbmRleClcIlxuICAgICAgICAgICAgICA6ZGF0YT1cIml0ZW1cIlxuICAgICAgICAgICAgICA6bmVzdGVkPVwiZmFsc2VcIlxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgc3BhbihcbiAgICAgICAgICAgICAgdi1lbHNlLWlmPVwicmVuZGVyXCJcbiAgICAgICAgICAgICAgdi1odG1sPVwicmVuZGVyKGdldENvbnRleHQoaXRlbSwgaW5kZXgpKVwiXG4gICAgICAgICAgICApXG4gICAgICAgICAgICBzcGFuKFxuICAgICAgICAgICAgICB2LWVsc2VcbiAgICAgICAgICAgICAgdi1odG1sPVwiZ2V0SXRlbUxhYmVsKHNjaGVtYSwgaXRlbSwgeyBpbmRleCB9KVwiXG4gICAgICAgICAgICApXG4gICAgICAgIHRkLmRpdG8tY2VsbC1lZGl0LWJ1dHRvbnMoXG4gICAgICAgICAgdi1pZj1cImhhc0NlbGxFZGl0QnV0dG9uc1wiXG4gICAgICAgIClcbiAgICAgICAgICBEaXRvRWRpdEJ1dHRvbnMoXG4gICAgICAgICAgICA6c2NoZW1hPVwiZ2V0SXRlbUZvcm1TY2hlbWEoc2NoZW1hLCBpdGVtLCBjb250ZXh0KVwiXG4gICAgICAgICAgICA6ZGF0YVBhdGg9XCJnZXREYXRhUGF0aChpbmRleClcIlxuICAgICAgICAgICAgOmRhdGE9XCJpdGVtXCJcbiAgICAgICAgICAgIDptZXRhPVwibmVzdGVkTWV0YVwiXG4gICAgICAgICAgICA6c3RvcmU9XCJnZXRJdGVtU3RvcmUoc2NoZW1hLCBpdGVtLCBpbmRleClcIlxuICAgICAgICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWQgfHwgaXNMb2FkaW5nXCJcbiAgICAgICAgICAgIDpkZWxldGFibGU9XCJkZWxldGFibGVcIlxuICAgICAgICAgICAgOmRyYWdnYWJsZT1cImRyYWdnYWJsZVwiXG4gICAgICAgICAgICA6ZWRpdGFibGU9XCJlZGl0YWJsZVwiXG4gICAgICAgICAgICA6ZWRpdFBhdGg9XCJnZXRFZGl0UGF0aChpdGVtLCBpbmRleClcIlxuICAgICAgICAgICAgQGRlbGV0ZT1cImRlbGV0ZUl0ZW0oaXRlbSwgaW5kZXgpXCJcbiAgICAgICAgICApXG4gICAgLy8tIFJlbmRlciBjcmVhdGUgYnV0dG9ucyBpbnNpZGUgdGFibGUgd2hlbiBub3QgaW4gYSBzaW5nbGUgY29tcG9uZW50IHZpZXc6XG4gICAgdGZvb3QoXG4gICAgICB2LWlmPVwiaGFzTGlzdEJ1dHRvbnMgJiYgIXNpbmdsZVwiXG4gICAgKVxuICAgICAgdHJcbiAgICAgICAgdGQuZGl0by1jZWxsLWVkaXQtYnV0dG9ucyg6Y29sc3Bhbj1cIm51bUNvbHVtbnNcIilcbiAgICAgICAgICBEaXRvRWRpdEJ1dHRvbnMoXG4gICAgICAgICAgICA6YnV0dG9ucz1cImJ1dHRvblNjaGVtYXNcIlxuICAgICAgICAgICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgICAgICAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgICAgICAgICA6ZGF0YT1cImxpc3REYXRhXCJcbiAgICAgICAgICAgIDptZXRhPVwibWV0YVwiXG4gICAgICAgICAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgICAgICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZCB8fCBpc0xvYWRpbmdcIlxuICAgICAgICAgICAgOmNyZWF0YWJsZT1cImNyZWF0YWJsZVwiXG4gICAgICAgICAgICA6Y3JlYXRlUGF0aD1cInBhdGhcIlxuICAgICAgICAgIClcbiAgLy8tIFJlbmRlciBjcmVhdGUgYnV0dG9ucyBvdXRzaWRlIHRhYmxlIHdoZW4gaW4gYSBzaW5nbGUgY29tcG9uZW50IHZpZXc6XG4gIERpdG9FZGl0QnV0dG9ucy5kaXRvLWJ1dHRvbnMtbGFyZ2UuZGl0by1idXR0b25zLW1haW4uZGl0by1idXR0b25zLXN0aWNreShcbiAgICB2LWlmPVwiaGFzTGlzdEJ1dHRvbnMgJiYgc2luZ2xlXCJcbiAgICA6YnV0dG9ucz1cImJ1dHRvblNjaGVtYXNcIlxuICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICA6ZGF0YT1cImxpc3REYXRhXCJcbiAgICA6bWV0YT1cIm1ldGFcIlxuICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZCB8fCBpc0xvYWRpbmdcIlxuICAgIDpjcmVhdGFibGU9XCJjcmVhdGFibGVcIlxuICAgIDpjcmVhdGVQYXRoPVwicGF0aFwiXG4gIClcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b1R5cGVDb21wb25lbnQgZnJvbSAnLi4vRGl0b1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgRGl0b0NvbnRleHQgZnJvbSAnLi4vRGl0b0NvbnRleHQuanMnXG5pbXBvcnQgU291cmNlTWl4aW4gZnJvbSAnLi4vbWl4aW5zL1NvdXJjZU1peGluLmpzJ1xuaW1wb3J0IFNvcnRhYmxlTWl4aW4gZnJvbSAnLi4vbWl4aW5zL1NvcnRhYmxlTWl4aW4uanMnXG5pbXBvcnQge1xuICBnZXRWaWV3RWRpdFBhdGgsXG4gIHJlc29sdmVTY2hlbWFDb21wb25lbnQsXG4gIHJlc29sdmVTY2hlbWFDb21wb25lbnRzXG59IGZyb20gJy4uL3V0aWxzL3NjaGVtYS5qcydcbmltcG9ydCB7IGNyZWF0ZUZpbHRlcnNQYW5lbCB9IGZyb20gJy4uL3V0aWxzL2ZpbHRlci5qcydcbmltcG9ydCB7IGFwcGVuZERhdGFQYXRoIH0gZnJvbSAnLi4vdXRpbHMvZGF0YS5qcydcbmltcG9ydCB7IHBpY2tCeSwgZXF1YWxzLCBoeXBoZW5hdGUgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0IHsgY29tcHV0ZWQgfSBmcm9tICd2dWUnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvVHlwZUNvbXBvbmVudC5yZWdpc3RlcignbGlzdCcsIHtcbiAgbWl4aW5zOiBbU291cmNlTWl4aW4sIFNvcnRhYmxlTWl4aW5dLFxuXG4gIGdldFNvdXJjZVR5cGUodHlwZSkge1xuICAgIC8vIE5vIG5lZWQgZm9yIHRyYW5zZm9ybWF0aW9uIGhlcmUuIFNlZSBUeXBlVHJlZUxpc3QgZm9yIGRldGFpbHMuXG4gICAgcmV0dXJuIHR5cGVcbiAgfSxcblxuICBnZXRQYW5lbFNjaGVtYShhcGksIHNjaGVtYSwgZGF0YVBhdGgsIGNvbXBvbmVudCkge1xuICAgIGNvbnN0IHsgZmlsdGVycyB9ID0gc2NoZW1hXG4gICAgLy8gU2VlIGlmIHRoaXMgbGlzdCBjb21wb25lbnQgd2FudHMgdG8gZGlzcGxheSBhIGZpbHRlciBwYW5lbCwgYW5kIGlmIHNvLFxuICAgIC8vIGNyZWF0ZSB0aGUgcGFuZWwgc2NoZW1hIGZvciBpdCB0aHJvdWdoIGBnZXRGaWx0ZXJzUGFuZWwoKWAuXG4gICAgaWYgKGZpbHRlcnMpIHtcbiAgICAgIHJldHVybiBjcmVhdGVGaWx0ZXJzUGFuZWwoXG4gICAgICAgIGFwaSxcbiAgICAgICAgZmlsdGVycyxcbiAgICAgICAgZGF0YVBhdGgsXG4gICAgICAgIC8vIFBhc3MgYSBjb21wdXRlZCB2YWx1ZSB0byBnZXQgLyBzZXQgdGhlIHF1ZXJ5LCBzZWUgZ2V0RmlsdGVyc1BhbmVsKClcbiAgICAgICAgY29tcHV0ZWQoe1xuICAgICAgICAgIGdldCgpIHtcbiAgICAgICAgICAgIHJldHVybiBjb21wb25lbnQucXVlcnlcbiAgICAgICAgICB9LFxuXG4gICAgICAgICAgc2V0KHF1ZXJ5KSB7XG4gICAgICAgICAgICAvLyBGaWx0ZXIgb3V0IHVuZGVmaW5lZCB2YWx1ZXMgZm9yIGNvbXBhcmluZyB3aXRoIGVxdWFscygpXG4gICAgICAgICAgICBjb25zdCBmaWx0ZXIgPSBvYmogPT4gcGlja0J5KG9iaiwgdmFsdWUgPT4gdmFsdWUgIT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgIGlmICghZXF1YWxzKGZpbHRlcihxdWVyeSksIGZpbHRlcihjb21wb25lbnQucXVlcnkpKSkge1xuICAgICAgICAgICAgICBjb21wb25lbnQucXVlcnkgPSBxdWVyeVxuICAgICAgICAgICAgICBjb21wb25lbnQubG9hZERhdGEoZmFsc2UpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgKVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIGhhc1BhZ2luYXRpb24oKSB7XG4gICAgICByZXR1cm4gISF0aGlzLnBhZ2luYXRlXG4gICAgfSxcblxuICAgIGhhc0xpc3RCdXR0b25zKCkge1xuICAgICAgcmV0dXJuICEhKHRoaXMuYnV0dG9uU2NoZW1hcyB8fCB0aGlzLmNyZWF0YWJsZSlcbiAgICB9LFxuXG4gICAgaGFzRWRpdEJ1dHRvbnMoKSB7XG4gICAgICBjb25zdCB7IGxpc3REYXRhIH0gPSB0aGlzXG4gICAgICByZXR1cm4gKFxuICAgICAgICBsaXN0RGF0YS5sZW5ndGggPiAwICYmIChcbiAgICAgICAgICB0aGlzLmVkaXRhYmxlIHx8XG4gICAgICAgICAgdGhpcy5kZWxldGFibGUgfHxcbiAgICAgICAgICB0aGlzLmRyYWdnYWJsZVxuICAgICAgICApXG4gICAgICApXG4gICAgfSxcblxuICAgIGhhc0NlbGxFZGl0QnV0dG9ucygpIHtcbiAgICAgIHJldHVybiAhdGhpcy5pc0lubGluZWQgJiYgdGhpcy5oYXNFZGl0QnV0dG9uc1xuICAgIH0sXG5cbiAgICBoYXNFdmVuQ291bnQoKSB7XG4gICAgICByZXR1cm4gISh0aGlzLmxpc3REYXRhLmxlbmd0aCAlIDIpXG4gICAgfSxcblxuICAgIG51bUNvbHVtbnMoKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICAodGhpcy5jb2x1bW5zID8gT2JqZWN0LmtleXModGhpcy5jb2x1bW5zKS5sZW5ndGggOiAxKSArXG4gICAgICAgICh0aGlzLmhhc0NlbGxFZGl0QnV0dG9ucyA/IDEgOiAwKVxuICAgICAgKVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZ2V0RGF0YVBhdGgoaW5kZXgpIHtcbiAgICAgIHJldHVybiBhcHBlbmREYXRhUGF0aCh0aGlzLmRhdGFQYXRoLCBpbmRleClcbiAgICB9LFxuXG4gICAgZ2V0RWRpdFBhdGgoaXRlbSwgaW5kZXgpIHtcbiAgICAgIGlmICh0aGlzLmVkaXRhYmxlKSB7XG4gICAgICAgIGNvbnN0IGlkID0gdGhpcy5nZXRJdGVtSWQodGhpcy5zY2hlbWEsIGl0ZW0sIGluZGV4KVxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIGdldFZpZXdFZGl0UGF0aCh0aGlzLnNjaGVtYSwgaWQsIHRoaXMuY29udGV4dCkgfHxcbiAgICAgICAgICBgJHt0aGlzLnBhdGh9LyR7aWR9YFxuICAgICAgICApXG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbFxuICAgIH0sXG5cbiAgICBnZXRDZWxsQ2xhc3MoY29sdW1uKSB7XG4gICAgICByZXR1cm4gYGRpdG8tY2VsbC0ke2h5cGhlbmF0ZShjb2x1bW4ubmFtZSl9YFxuICAgIH0sXG5cbiAgICBnZXRDb250ZXh0KGl0ZW0sIGluZGV4KSB7XG4gICAgICByZXR1cm4gbmV3IERpdG9Db250ZXh0KHRoaXMsIHtcbiAgICAgICAgZGF0YTogaXRlbSxcbiAgICAgICAgdmFsdWU6IGl0ZW0sXG4gICAgICAgIGluZGV4LFxuICAgICAgICBkYXRhUGF0aDogdGhpcy5nZXREYXRhUGF0aChpbmRleClcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIG9uRmlsdGVyRXJyb3JzKGVycm9ycykge1xuICAgICAgY29uc3QgZmlsdGVyc0RhdGFQYXRoID0gYXBwZW5kRGF0YVBhdGgodGhpcy5kYXRhUGF0aCwgJyRmaWx0ZXJzJylcbiAgICAgIGNvbnN0IHBhbmVsID0gdGhpcy5zY2hlbWFDb21wb25lbnQuZ2V0UGFuZWxCeURhdGFQYXRoKGZpbHRlcnNEYXRhUGF0aClcbiAgICAgIGlmIChwYW5lbCkge1xuICAgICAgICBwYW5lbC5zaG93VmFsaWRhdGlvbkVycm9ycyhlcnJvcnMsIHRydWUpXG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIGFzeW5jIHByb2Nlc3NTY2hlbWEoXG4gICAgYXBpLFxuICAgIHNjaGVtYSxcbiAgICBuYW1lLFxuICAgIHJvdXRlcyxcbiAgICBsZXZlbCxcbiAgICBuZXN0ZWQgPSBmYWxzZSxcbiAgICBmbGF0dGVuID0gZmFsc2UsXG4gICAgcHJvY2VzcyA9IG51bGxcbiAgKSB7XG4gICAgYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgICAgcmVzb2x2ZVNjaGVtYUNvbXBvbmVudChzY2hlbWEpLFxuICAgICAgcmVzb2x2ZVNjaGVtYUNvbXBvbmVudHMoc2NoZW1hLmNvbHVtbnMpLFxuICAgICAgU291cmNlTWl4aW4ucHJvY2Vzc1NjaGVtYShcbiAgICAgICAgYXBpLFxuICAgICAgICBzY2hlbWEsXG4gICAgICAgIG5hbWUsXG4gICAgICAgIHJvdXRlcyxcbiAgICAgICAgbGV2ZWwsXG4gICAgICAgIG5lc3RlZCxcbiAgICAgICAgZmxhdHRlbixcbiAgICAgICAgcHJvY2Vzc1xuICAgICAgKVxuICAgIF0pXG4gIH1cbn0pXG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by1saXN0IHtcbiAgJHNlbGY6ICY7XG5cbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuXG4gICZfX2hlYWRlciB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gICAgcGFkZGluZy1ib3R0b206ICRjb250ZW50LXBhZGRpbmctaGFsZjtcbiAgICBAaW5jbHVkZSB1c2VyLXNlbGVjdChub25lKTtcblxuICAgICY6ZW1wdHkge1xuICAgICAgZGlzcGxheTogbm9uZTtcbiAgICB9XG5cbiAgICAuZGl0by1zY29wZXMsXG4gICAgLmRpdG8tcGFnaW5hdGlvbiB7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgZmxleDogMCAxIGF1dG87XG4gICAgICBtaW4td2lkdGg6IDA7XG4gICAgfVxuICB9XG5cbiAgJi5kaXRvLXNpbmdsZSB7XG4gICAgLy8gU28gdGhhdCBsaXN0IGJ1dHRvbnMgY2FuIGJlIHN0aWNreSB0byB0aGUgYm90dG9tOlxuICAgIGRpc3BsYXk6IGdyaWQ7XG4gICAgZ3JpZC10ZW1wbGF0ZS1yb3dzOiBtaW4tY29udGVudDtcbiAgICBoZWlnaHQ6IDEwMCU7XG5cbiAgICAvLyBNYWtlIHNpbmdsZSBsaXN0IGhlYWRlciwgbmF2aWdhdGlvbiBhbmQgYnV0dG9ucyBzdGlja3kgdG8gdGhlIHRvcCBhbmRcbiAgICAvLyBib3R0b206XG4gICAgI3skc2VsZn1fX2hlYWRlciB7XG4gICAgICBwb3NpdGlvbjogc3RpY2t5O1xuICAgICAgdG9wOiAwO1xuICAgICAgbWFyZ2luLXRvcDogLSRjb250ZW50LXBhZGRpbmc7XG4gICAgICBwYWRkaW5nLXRvcDogJGNvbnRlbnQtcGFkZGluZztcbiAgICAgIGJhY2tncm91bmQ6ICRjb250ZW50LWNvbG9yLWJhY2tncm91bmQ7XG4gICAgICB6LWluZGV4OiAxO1xuXG4gICAgICArIC5kaXRvLXRhYmxlIHtcbiAgICAgICAgLmRpdG8tdGFibGUtaGVhZCB7XG4gICAgICAgICAgcG9zaXRpb246IHN0aWNreTtcbiAgICAgICAgICB0b3A6IGNhbGMoJGlucHV0LWhlaWdodCArICRjb250ZW50LXBhZGRpbmcgKyAkY29udGVudC1wYWRkaW5nLWhhbGYpO1xuICAgICAgICAgIGJhY2tncm91bmQ6ICRjb250ZW50LWNvbG9yLWJhY2tncm91bmQ7XG4gICAgICAgICAgei1pbmRleDogMTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG5EaXRvTGFiZWwuZGl0by1sYWJlbC1jb21wb25lbnQoXG4gIDpsYWJlbD1cInZhbHVlXCJcbiAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvVHlwZUNvbXBvbmVudCBmcm9tICcuLi9EaXRvVHlwZUNvbXBvbmVudC5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9UeXBlQ29tcG9uZW50LnJlZ2lzdGVyKCdsYWJlbCcsIHtcbiAgZXhjbHVkZVZhbHVlOiB0cnVlLFxuICBnZW5lcmF0ZUxhYmVsOiBmYWxzZVxufSlcbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbi5kaXRvLWxhYmVsLWNvbXBvbmVudCB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGhlaWdodDogMmVtO1xufVxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4uZGl0by1tYXJrdXAoOmlkPVwiZGF0YVBhdGhcIilcbiAgLmRpdG8tYnV0dG9ucy5kaXRvLWJ1dHRvbnMtdG9vbGJhcihcbiAgICB2LWlmPVwiZ3JvdXBlZEJ1dHRvbnMubGVuZ3RoID4gMFwiXG4gIClcbiAgICAuZGl0by1idXR0b24tZ3JvdXAoXG4gICAgICB2LWZvcj1cImJ1dHRvbnMgaW4gZ3JvdXBlZEJ1dHRvbnNcIlxuICAgIClcbiAgICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbihcbiAgICAgICAgdi1mb3I9XCJ7IG5hbWUsIGljb24sIGlzQWN0aXZlLCBvbkNsaWNrIH0gaW4gYnV0dG9uc1wiXG4gICAgICAgIDprZXk9XCJuYW1lXCJcbiAgICAgICAgOmNsYXNzPVwieyAnZGl0by1hY3RpdmUnOiBpc0FjdGl2ZSB9XCJcbiAgICAgICAgQGNsaWNrPVwib25DbGlja1wiXG4gICAgICApXG4gICAgICAgIEljb24oOm5hbWU9XCJpY29uXCIpXG4gIEVkaXRvckNvbnRlbnQuZGl0by1tYXJrdXAtZWRpdG9yKFxuICAgIHJlZj1cImVkaXRvclwiXG4gICAgOmVkaXRvcj1cImVkaXRvclwiXG4gICAgOnN0eWxlPVwic3R5bGVzXCJcbiAgKVxuICAuZGl0by1yZXNpemUoXG4gICAgdi1pZj1cInJlc2l6YWJsZVwiXG4gICAgQG1vdXNlZG93bi5zdG9wLnByZXZlbnQ9XCJvbkRyYWdSZXNpemVcIlxuICApXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9UeXBlQ29tcG9uZW50IGZyb20gJy4uL0RpdG9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IERvbU1peGluIGZyb20gJy4uL21peGlucy9Eb21NaXhpbi5qcydcbmltcG9ydCB7IGdldFNjaGVtYUFjY2Vzc29yIH0gZnJvbSAnLi4vdXRpbHMvYWNjZXNzb3IuanMnXG5pbXBvcnQgeyBFZGl0b3IsIEVkaXRvckNvbnRlbnQsIE1hcmssIGdldE1hcmtBdHRyaWJ1dGVzIH0gZnJvbSAnQHRpcHRhcC92dWUtMydcbi8vIGltcG9ydCB7IHRvZ2dsZU1hcmsgfSBmcm9tICd0aXB0YXAtY29tbWFuZHMnXG4vLyBFc3NlbnRpYWxzOlxuaW1wb3J0IHsgRG9jdW1lbnQgfSBmcm9tICdAdGlwdGFwL2V4dGVuc2lvbi1kb2N1bWVudCdcbmltcG9ydCB7IFRleHQgfSBmcm9tICdAdGlwdGFwL2V4dGVuc2lvbi10ZXh0J1xuLy8gTWFya3M6XG5pbXBvcnQgeyBCb2xkIH0gZnJvbSAnQHRpcHRhcC9leHRlbnNpb24tYm9sZCdcbmltcG9ydCB7IENvZGUgfSBmcm9tICdAdGlwdGFwL2V4dGVuc2lvbi1jb2RlJ1xuaW1wb3J0IHsgSXRhbGljIH0gZnJvbSAnQHRpcHRhcC9leHRlbnNpb24taXRhbGljJ1xuaW1wb3J0IHsgTGluayB9IGZyb20gJ0B0aXB0YXAvZXh0ZW5zaW9uLWxpbmsnXG5pbXBvcnQgeyBTdHJpa2UgfSBmcm9tICdAdGlwdGFwL2V4dGVuc2lvbi1zdHJpa2UnXG5pbXBvcnQgeyBVbmRlcmxpbmUgfSBmcm9tICdAdGlwdGFwL2V4dGVuc2lvbi11bmRlcmxpbmUnXG4vLyBOb2RlczpcbmltcG9ydCB7IEJsb2NrcXVvdGUgfSBmcm9tICdAdGlwdGFwL2V4dGVuc2lvbi1ibG9ja3F1b3RlJ1xuaW1wb3J0IHsgQ29kZUJsb2NrIH0gZnJvbSAnQHRpcHRhcC9leHRlbnNpb24tY29kZS1ibG9jaydcbmltcG9ydCB7IEhhcmRCcmVhayB9IGZyb20gJ0B0aXB0YXAvZXh0ZW5zaW9uLWhhcmQtYnJlYWsnXG5pbXBvcnQgeyBIZWFkaW5nIH0gZnJvbSAnQHRpcHRhcC9leHRlbnNpb24taGVhZGluZydcbmltcG9ydCB7IFBhcmFncmFwaCB9IGZyb20gJ0B0aXB0YXAvZXh0ZW5zaW9uLXBhcmFncmFwaCdcbmltcG9ydCB7IEhvcml6b250YWxSdWxlIH0gZnJvbSAnQHRpcHRhcC9leHRlbnNpb24taG9yaXpvbnRhbC1ydWxlJ1xuaW1wb3J0IHsgT3JkZXJlZExpc3QgfSBmcm9tICdAdGlwdGFwL2V4dGVuc2lvbi1vcmRlcmVkLWxpc3QnXG5pbXBvcnQgeyBCdWxsZXRMaXN0IH0gZnJvbSAnQHRpcHRhcC9leHRlbnNpb24tYnVsbGV0LWxpc3QnXG5pbXBvcnQgeyBMaXN0SXRlbSB9IGZyb20gJ0B0aXB0YXAvZXh0ZW5zaW9uLWxpc3QtaXRlbSdcbi8vIFRPRE86XG4vLyBpbXBvcnQgeyBJbWFnZSB9IGZyb20gJ0B0aXB0YXAvZXh0ZW5zaW9uLWltYWdlJ1xuLy8gaW1wb3J0IHsgTWVudGlvbiB9IGZyb20gJ0B0aXB0YXAvZXh0ZW5zaW9uLW1lbnRpb24nXG4vLyBpbXBvcnQgeyBDb2RlQmxvY2tIaWdobGlnaHQgfSBmcm9tICdAdGlwdGFwL2V4dGVuc2lvbi1jb2RlLWJsb2NrLWhpZ2hsaWdodCdcbi8vIGltcG9ydCB7IFRhYmxlIH0gZnJvbSAnQHRpcHRhcC9leHRlbnNpb24tdGFibGUnXG4vLyBpbXBvcnQgeyBUYWJsZUNlbGwgfSBmcm9tICdAdGlwdGFwL2V4dGVuc2lvbi10YWJsZS1jZWxsJ1xuLy8gaW1wb3J0IHsgVGFibGVIZWFkZXIgfSBmcm9tICdAdGlwdGFwL2V4dGVuc2lvbi10YWJsZS1oZWFkZXInXG4vLyBpbXBvcnQgeyBUYWJsZU5vZGVzIH0gZnJvbSAnQHRpcHRhcC9leHRlbnNpb24tdGFibGUtbm9kZXMnXG4vLyBpbXBvcnQgeyBUYWJsZVJvdyB9IGZyb20gJ0B0aXB0YXAvZXh0ZW5zaW9uLXRhYmxlLXJvdydcbi8vIGltcG9ydCB7IFRhc2tMaXN0IH0gZnJvbSAnQHRpcHRhcC9leHRlbnNpb24tdGFzay1saXN0J1xuLy8gaW1wb3J0IHsgVGFza0l0ZW0gfSBmcm9tICdAdGlwdGFwL2V4dGVuc2lvbi10YXNrLWl0ZW0nXG4vLyBUb29sczpcbmltcG9ydCB7IEhpc3RvcnkgfSBmcm9tICdAdGlwdGFwL2V4dGVuc2lvbi1oaXN0b3J5J1xuXG5pbXBvcnQgeyBJY29uIH0gZnJvbSAnQGRpdG9qcy91aS9zcmMnXG5pbXBvcnQgeyBpc0FycmF5LCBpc09iamVjdCwgaHlwaGVuYXRlLCBkZWJvdW5jZSwgY2FtZWxpemUgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b1R5cGVDb21wb25lbnQucmVnaXN0ZXIoJ21hcmt1cCcsIHtcbiAgbWl4aW5zOiBbRG9tTWl4aW5dLFxuICBjb21wb25lbnRzOiB7XG4gICAgRWRpdG9yQ29udGVudCxcbiAgICBJY29uXG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgZWRpdG9yOiBudWxsLFxuICAgICAgaGVpZ2h0OiBudWxsXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgbGluZXMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWEubGluZXMgfHwgMTBcbiAgICB9LFxuXG4gICAgc3R5bGVzKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaGVpZ2h0OiB0aGlzLmhlaWdodCB8fCBgY2FsYygke3RoaXMubGluZXN9ZW0gKiB2YXIoLS1saW5lLWhlaWdodCkpYFxuICAgICAgfVxuICAgIH0sXG5cbiAgICBtYXJrQnV0dG9ucygpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldEJ1dHRvbnMoJ21hcmtzJywge1xuICAgICAgICBib2xkOiB0cnVlLFxuICAgICAgICBpdGFsaWM6IHRydWUsXG4gICAgICAgIHVuZGVybGluZTogdHJ1ZSxcbiAgICAgICAgc3RyaWtlOiB0cnVlLFxuICAgICAgICBzbWFsbDogdHJ1ZSxcbiAgICAgICAgY29kZTogdHJ1ZSxcbiAgICAgICAgbGluazoge1xuICAgICAgICAgIG9uQ2xpY2s6IGVkaXRvciA9PiB0aGlzLm9uQ2xpY2tMaW5rKGVkaXRvcilcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYmFzaWNOb2RlQnV0dG9ucygpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldEJ1dHRvbnMoJ25vZGVzJywge1xuICAgICAgICBwYXJhZ3JhcGg6IHtcbiAgICAgICAgICBjb21tYW5kOiAnc2V0UGFyYWdyYXBoJ1xuICAgICAgICB9LFxuICAgICAgICBoZWFkaW5nOiB7XG4gICAgICAgICAgYXR0cmlidXRlOiAnbGV2ZWwnLFxuICAgICAgICAgIHZhbHVlczogWzEsIDIsIDMsIDQsIDUsIDZdXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFkdmFuY2VkTm9kZUJ1dHRvbnMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRCdXR0b25zKCdub2RlcycsIHtcbiAgICAgICAgYnVsbGV0TGlzdDogdHJ1ZSxcbiAgICAgICAgb3JkZXJlZExpc3Q6IHRydWUsXG4gICAgICAgIGJsb2NrcXVvdGU6IHRydWUsXG4gICAgICAgIGNvZGVCbG9jazogdHJ1ZVxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgdG9vbEJ1dHRvbnMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRCdXR0b25zKCd0b29scycsIHtcbiAgICAgICAgdW5kbzogdHJ1ZSxcbiAgICAgICAgcmVkbzogdHJ1ZVxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgZ3JvdXBlZEJ1dHRvbnMoKSB7XG4gICAgICByZXR1cm4gW1xuICAgICAgICB0aGlzLm1hcmtCdXR0b25zLFxuICAgICAgICB0aGlzLmJhc2ljTm9kZUJ1dHRvbnMsXG4gICAgICAgIHRoaXMuYWR2YW5jZWROb2RlQnV0dG9ucyxcbiAgICAgICAgdGhpcy50b29sQnV0dG9uc1xuICAgICAgXS5maWx0ZXIoYnV0dG9ucyA9PiBidXR0b25zLmxlbmd0aCA+IDApXG4gICAgfSxcblxuICAgIHBhcnNlT3B0aW9ucygpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHByZXNlcnZlV2hpdGVzcGFjZToge1xuICAgICAgICAgICdjb2xsYXBzZSc6IGZhbHNlLFxuICAgICAgICAgICdwcmVzZXJ2ZSc6IHRydWUsXG4gICAgICAgICAgJ3ByZXNlcnZlLWFsbCc6ICdmdWxsJ1xuICAgICAgICB9W3RoaXMud2hpdGVzcGFjZV1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZWRpdG9yT3B0aW9ucygpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGVkaXRhYmxlOiAhdGhpcy5yZWFkeW9ubHksXG4gICAgICAgIGF1dG9Gb2N1czogdGhpcy5hdXRvZm9jdXMsXG4gICAgICAgIGRpc2FibGVJbnB1dFJ1bGVzOiAhdGhpcy5lbmFibGVSdWxlcy5pbnB1dCxcbiAgICAgICAgZGlzYWJsZVBhc3RlUnVsZXM6ICF0aGlzLmVuYWJsZVJ1bGVzLnBhc3RlLFxuICAgICAgICBwYXJzZU9wdGlvbnM6IHRoaXMucGFyc2VPcHRpb25zXG4gICAgICB9XG4gICAgfSxcblxuICAgIHJlc2l6YWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ3Jlc2l6YWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0pLFxuXG4gICAgd2hpdGVzcGFjZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ3doaXRlc3BhY2UnLCB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBkZWZhdWx0OiAnY29sbGFwc2UnXG4gICAgICAvLyBQb3NzaWJsZSB2YWx1ZXMgYXJlOiAnY29sbGFwc2UnLCAncHJlc2VydmUnLCAncHJlc2VydmUtYWxsJ1xuICAgIH0pLFxuXG4gICAgZW5hYmxlUnVsZXM6IGdldFNjaGVtYUFjY2Vzc29yKCdlbmFibGVSdWxlcycsIHtcbiAgICAgIHR5cGU6IFtPYmplY3QsIEJvb2xlYW5dLFxuICAgICAgZGVmYXVsdDogZmFsc2UsXG4gICAgICBnZXQoZW5hYmxlUnVsZXMpIHtcbiAgICAgICAgcmV0dXJuIGlzT2JqZWN0KGVuYWJsZVJ1bGVzKVxuICAgICAgICAgID8gZW5hYmxlUnVsZXNcbiAgICAgICAgICA6IHtcbiAgICAgICAgICAgICAgaW5wdXQ6ICEhZW5hYmxlUnVsZXMsXG4gICAgICAgICAgICAgIHBhc3RlOiAhIWVuYWJsZVJ1bGVzXG4gICAgICAgICAgICB9XG4gICAgICB9XG4gICAgfSlcbiAgfSxcblxuICB3YXRjaDoge1xuICAgIHJlYWR5b25seTogJ3VwZGF0ZUVkaXRvck9wdGlvbnMnLFxuICAgIGF1dG9mb2N1czogJ3VwZGF0ZUVkaXRvck9wdGlvbnMnLFxuICAgIGVuYWJsZVJ1bGVzOiAndXBkYXRlRWRpdG9yT3B0aW9ucydcbiAgfSxcblxuICBjcmVhdGVkKCkge1xuICAgIGxldCBjaGFuZ2VkID0gZmFsc2VcbiAgICBsZXQgaWdub3JlV2F0Y2ggPSBmYWxzZVxuXG4gICAgY29uc3Qgb25DaGFuZ2UgPSAoKSA9PiB7XG4gICAgICBpZiAoIXRoaXMuZm9jdXNlZCAmJiBjaGFuZ2VkKSB7XG4gICAgICAgIGNoYW5nZWQgPSBmYWxzZVxuICAgICAgICB0aGlzLm9uQ2hhbmdlKClcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBvbkZvY3VzID0gKCkgPT4gdGhpcy5vbkZvY3VzKClcblxuICAgIGNvbnN0IG9uQmx1ciA9ICgpID0+IHtcbiAgICAgIHRoaXMub25CbHVyKClcbiAgICAgIG9uQ2hhbmdlKClcbiAgICB9XG5cbiAgICBjb25zdCBzZXRWYWx1ZURlYm91bmNlZCA9IGRlYm91bmNlKGVkaXRvciA9PiB7XG4gICAgICBpZ25vcmVXYXRjaCA9IHRydWVcbiAgICAgIHRoaXMudmFsdWUgPSBlZGl0b3IuZ2V0SFRNTCgpXG4gICAgICBjaGFuZ2VkID0gdHJ1ZVxuICAgICAgb25DaGFuZ2UoKVxuICAgIH0sIDEwMClcblxuICAgIGNvbnN0IG9uVXBkYXRlID0gKHsgZWRpdG9yIH0pID0+IHtcbiAgICAgIHNldFZhbHVlRGVib3VuY2VkKGVkaXRvcilcbiAgICAgIHRoaXMub25JbnB1dCgpXG4gICAgfVxuXG4gICAgdGhpcy4kd2F0Y2goJ3ZhbHVlJywgdmFsdWUgPT4ge1xuICAgICAgaWYgKGlnbm9yZVdhdGNoKSB7XG4gICAgICAgIGlnbm9yZVdhdGNoID0gZmFsc2VcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuZWRpdG9yLmNvbW1hbmRzLnNldENvbnRlbnQodmFsdWUsIGZhbHNlLCB0aGlzLnBhcnNlT3B0aW9ucylcbiAgICAgIH1cbiAgICB9KVxuXG4gICAgdGhpcy5lZGl0b3IgPSBuZXcgRWRpdG9yKHtcbiAgICAgIC4uLnRoaXMuZWRpdG9yT3B0aW9ucyxcbiAgICAgIG9uRm9jdXMsXG4gICAgICBvbkJsdXIsXG4gICAgICBvblVwZGF0ZSxcbiAgICAgIGV4dGVuc2lvbnM6IHRoaXMuZ2V0RXh0ZW5zaW9ucygpLFxuICAgICAgY29udGVudDogdGhpcy52YWx1ZSB8fCAnJ1xuICAgIH0pXG4gIH0sXG5cbiAgdW5tb3VudGVkKCkge1xuICAgIHRoaXMuZWRpdG9yLmRlc3Ryb3koKVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBvbkRyYWdSZXNpemUoZXZlbnQpIHtcbiAgICAgIGNvbnN0IGdldFBvaW50ID0gKHsgY2xpZW50WDogeCwgY2xpZW50WTogeSB9KSA9PiAoeyB4LCB5IH0pXG5cbiAgICAgIGxldCBwcmV2WSA9IGdldFBvaW50KGV2ZW50KS55XG4gICAgICBsZXQgaGVpZ2h0ID0gcGFyc2VGbG9hdChnZXRDb21wdXRlZFN0eWxlKHRoaXMuJHJlZnMuZWRpdG9yLiRlbCkuaGVpZ2h0KVxuXG4gICAgICBjb25zdCBtb3VzZW1vdmUgPSBldmVudCA9PiB7XG4gICAgICAgIGNvbnN0IHsgeSB9ID0gZ2V0UG9pbnQoZXZlbnQpXG4gICAgICAgIGhlaWdodCArPSB5IC0gcHJldllcbiAgICAgICAgcHJldlkgPSB5XG4gICAgICAgIHRoaXMuaGVpZ2h0ID0gYCR7TWF0aC5tYXgoaGVpZ2h0LCAwKX1weGBcbiAgICAgIH1cblxuICAgICAgY29uc3QgaGFuZGxlcnMgPSB0aGlzLmRvbU9uKGRvY3VtZW50LCB7XG4gICAgICAgIG1vdXNlbW92ZSxcblxuICAgICAgICBtb3VzZXVwKGV2ZW50KSB7XG4gICAgICAgICAgbW91c2Vtb3ZlKGV2ZW50KVxuICAgICAgICAgIGhhbmRsZXJzLnJlbW92ZSgpXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfSxcblxuICAgIHVwZGF0ZUVkaXRvck9wdGlvbnMoKSB7XG4gICAgICB0aGlzLmVkaXRvci5zZXRPcHRpb25zKHRoaXMuZWRpdG9yT3B0aW9ucylcbiAgICB9LFxuXG4gICAgYXN5bmMgb25DbGlja0xpbmsoZWRpdG9yKSB7XG4gICAgICBjb25zdCBhdHRyaWJ1dGVzID0gYXdhaXQgdGhpcy5yb290Q29tcG9uZW50LnNob3dEaWFsb2coe1xuICAgICAgICBjb21wb25lbnRzOiB7XG4gICAgICAgICAgaHJlZjoge1xuICAgICAgICAgICAgdHlwZTogJ3VybCcsXG4gICAgICAgICAgICBsYWJlbDogJ0xpbmsnLFxuICAgICAgICAgICAgYXV0b2ZvY3VzOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICB0aXRsZToge1xuICAgICAgICAgICAgdHlwZTogJ3RleHQnLFxuICAgICAgICAgICAgbGFiZWw6ICdUaXRsZSdcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGJ1dHRvbnM6IHtcbiAgICAgICAgICBjYW5jZWw6IHt9LFxuICAgICAgICAgIGFwcGx5OiB7IHR5cGU6ICdzdWJtaXQnIH0sXG4gICAgICAgICAgcmVtb3ZlOiB7XG4gICAgICAgICAgICBldmVudHM6IHtcbiAgICAgICAgICAgICAgY2xpY2soeyBkaWFsb2dDb21wb25lbnQgfSkge1xuICAgICAgICAgICAgICAgIGRpYWxvZ0NvbXBvbmVudC5yZXNvbHZlKG51bGwpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGRhdGE6IGdldE1hcmtBdHRyaWJ1dGVzKHRoaXMuZWRpdG9yLnN0YXRlLCAnbGluaycpXG4gICAgICB9KVxuICAgICAgaWYgKGF0dHJpYnV0ZXMpIHtcbiAgICAgICAgbGV0IHsgaHJlZiwgdGl0bGUgfSA9IGF0dHJpYnV0ZXNcbiAgICAgICAgaWYgKGhyZWYpIHtcbiAgICAgICAgICAvLyBTZWUgaWYgYGhyZWZgIGNhbiBiZSBwYXJzZWQgYXMgYSBVUkwsIGFuZCBpZiBub3QsXG4gICAgICAgICAgLy8gcHJlZml4IGl0IHdpdGggYSBkZWZhdWx0IHByb3RvY29sLlxuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbmV3XG4gICAgICAgICAgICBuZXcgVVJMKGhyZWYpXG4gICAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgICBocmVmID0gYGh0dHBzOi8vJHtocmVmfWBcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWRpdG9yLmNvbW1hbmRzLnNldExpbmsoeyBocmVmLCB0aXRsZSB9KVxuICAgICAgfSBlbHNlIGlmIChhdHRyaWJ1dGVzID09PSBudWxsKSB7XG4gICAgICAgIGVkaXRvci5jb21tYW5kcy51bnNldExpbmsoKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBnZXRFeHRlbnNpb25zKCkge1xuICAgICAgY29uc3Qge1xuICAgICAgICBtYXJrcyA9IHt9LFxuICAgICAgICBub2RlcyA9IHt9LFxuICAgICAgICB0b29scyA9IHt9XG4gICAgICB9ID0gdGhpcy5zY2hlbWFcbiAgICAgIHJldHVybiBbXG4gICAgICAgIC8vIEVzc2VudGlhbHM6XG4gICAgICAgIERvY3VtZW50LFxuICAgICAgICBUZXh0LFxuICAgICAgICBQYXJhZ3JhcGgsIC8vIGJ1dHRvbiBjYW4gYmUgY29udHJvbGxlZCwgYnV0IG5vZGUgbmVlZHMgdG8gYmUgb24uXG5cbiAgICAgICAgLy8gTWFya3M6IGBzY2hlbWEubWFya3NgXG4gICAgICAgIG1hcmtzLmJvbGQgJiYgQm9sZCxcbiAgICAgICAgbWFya3MuaXRhbGljICYmIEl0YWxpYyxcbiAgICAgICAgbWFya3MudW5kZXJsaW5lICYmIFVuZGVybGluZSxcbiAgICAgICAgbWFya3Muc3RyaWtlICYmIFN0cmlrZSxcbiAgICAgICAgbWFya3Muc21hbGwgJiYgU21hbGwsXG4gICAgICAgIG1hcmtzLmNvZGUgJiYgQ29kZSxcbiAgICAgICAgbWFya3MubGluayAmJiBMaW5rV2l0aFRpdGxlLFxuXG4gICAgICAgIC8vIE5vZGVzOiBgc2NoZW1hLm5vZGVzYFxuICAgICAgICBub2Rlcy5ibG9ja3F1b3RlICYmIEJsb2NrcXVvdGUsXG4gICAgICAgIG5vZGVzLmNvZGVCbG9jayAmJiBDb2RlQmxvY2ssXG4gICAgICAgIEhhcmRCcmVhaywgLy8gVE9ETzogU2hvdWxkIHRoaXMgYWx3YXlzIG9uP1xuICAgICAgICBub2Rlcy5oZWFkaW5nICYmIEhlYWRpbmcuY29uZmlndXJlKHsgbGV2ZWxzOiBub2Rlcy5oZWFkaW5nIH0pLFxuICAgICAgICBub2Rlcy5ob3Jpem9udGFsUnVsZSAmJiBIb3Jpem9udGFsUnVsZSxcbiAgICAgICAgKG5vZGVzLm9yZGVyZWRMaXN0IHx8IG5vZGVzLmJ1bGxldExpc3QpICYmIExpc3RJdGVtLFxuICAgICAgICBub2Rlcy5idWxsZXRMaXN0ICYmIEJ1bGxldExpc3QsXG4gICAgICAgIG5vZGVzLm9yZGVyZWRMaXN0ICYmIE9yZGVyZWRMaXN0LFxuICAgICAgICAvLyBUT0RPOlxuICAgICAgICAvLyBub2Rlcy50b2RvTGlzdCAmJiBUb2RvSXRlbSxcbiAgICAgICAgLy8gbm9kZXMudG9kb0xpc3QgJiYgVG9kb0xpc3QsXG5cbiAgICAgICAgLy8gVG9vbHM6IGBzY2hlbWEudG9vbHNgXG4gICAgICAgIHRvb2xzLmhpc3RvcnkgJiYgSGlzdG9yeVxuICAgICAgXS5maWx0ZXIoZXh0ZW5zaW9uID0+ICEhZXh0ZW5zaW9uKVxuICAgIH0sXG5cbiAgICBnZXRCdXR0b25zKHNldHRpbmdzTmFtZSwgZGVzY3JpcHRpb25zKSB7XG4gICAgICBjb25zdCBsaXN0ID0gW11cbiAgICAgIGNvbnN0IHsgY29tbWFuZHMgfSA9IHRoaXMuZWRpdG9yXG5cbiAgICAgIGNvbnN0IGFkZEJ1dHRvbiA9ICh7IG5hbWUsIGljb24sIGNvbW1hbmQsIGF0dHJpYnV0ZXMsIG9uQ2xpY2sgfSkgPT4ge1xuICAgICAgICBsaXN0LnB1c2goe1xuICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgaWNvbixcbiAgICAgICAgICBpc0FjdGl2ZTogdGhpcy5lZGl0b3IuaXNBY3RpdmUobmFtZSwgYXR0cmlidXRlcyksXG4gICAgICAgICAgb25DbGljazogKCkgPT4ge1xuICAgICAgICAgICAgY29tbWFuZCA/Pz1cbiAgICAgICAgICAgICAgbmFtZSBpbiBjb21tYW5kc1xuICAgICAgICAgICAgICAgID8gbmFtZVxuICAgICAgICAgICAgICAgIDogYHRvZ2dsZSR7Y2FtZWxpemUobmFtZSwgdHJ1ZSl9YFxuICAgICAgICAgICAgaWYgKGNvbW1hbmQgaW4gY29tbWFuZHMpIHtcbiAgICAgICAgICAgICAgY29uc3QgYXBwbHkgPSBhdHRyaWJ1dGVzID0+XG4gICAgICAgICAgICAgICAgdGhpcy5lZGl0b3IuY2hhaW4oKVtjb21tYW5kXShhdHRyaWJ1dGVzKS5mb2N1cygpLnJ1bigpXG4gICAgICAgICAgICAgIG9uQ2xpY2tcbiAgICAgICAgICAgICAgICA/IG9uQ2xpY2sodGhpcy5lZGl0b3IsIGF0dHJpYnV0ZXMpXG4gICAgICAgICAgICAgICAgOiBhcHBseShhdHRyaWJ1dGVzKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgIH1cblxuICAgICAgY29uc3Qgc2V0dGluZ3MgPSB0aGlzLnNjaGVtYVtzZXR0aW5nc05hbWVdXG4gICAgICBpZiAoc2V0dGluZ3MpIHtcbiAgICAgICAgZm9yIChjb25zdCBbbmFtZSwgZGVzY3JpcHRpb25dIG9mIE9iamVjdC5lbnRyaWVzKGRlc2NyaXB0aW9ucykpIHtcbiAgICAgICAgICBjb25zdCBzZXR0aW5nTmFtZSA9IFsndW5kbycsICdyZWRvJ10uaW5jbHVkZXMobmFtZSkgPyAnaGlzdG9yeScgOiBuYW1lXG4gICAgICAgICAgY29uc3Qgc2V0dGluZyA9IHNldHRpbmdzW3NldHRpbmdOYW1lXVxuICAgICAgICAgIGNvbnN0IGljb24gPSBoeXBoZW5hdGUobmFtZSlcbiAgICAgICAgICBpZiAoc2V0dGluZykge1xuICAgICAgICAgICAgaWYgKGRlc2NyaXB0aW9uID09PSB0cnVlKSB7XG4gICAgICAgICAgICAgIGFkZEJ1dHRvbih7IG5hbWUsIGljb24gfSlcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNPYmplY3QoZGVzY3JpcHRpb24pKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHsgY29tbWFuZCwgYXR0cmlidXRlLCB2YWx1ZXMsIG9uQ2xpY2sgfSA9IGRlc2NyaXB0aW9uXG4gICAgICAgICAgICAgIGlmIChhdHRyaWJ1dGUpIHtcbiAgICAgICAgICAgICAgICBpZiAoaXNBcnJheSh2YWx1ZXMpICYmIGlzQXJyYXkoc2V0dGluZykpIHtcbiAgICAgICAgICAgICAgICAgIC8vIFN1cHBvcnQgaGVhZGluZyBsZXZlbCBhdHRyczpcbiAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgdmFsdWUgb2YgdmFsdWVzKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzZXR0aW5nLmluY2x1ZGVzKHZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICAgIGFkZEJ1dHRvbih7XG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgaWNvbjogYCR7aWNvbn0tJHt2YWx1ZX1gLFxuICAgICAgICAgICAgICAgICAgICAgICAgY29tbWFuZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXM6IHsgW2F0dHJpYnV0ZV06IHZhbHVlIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrXG4gICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBhZGRCdXR0b24oeyBuYW1lLCBpY29uLCBjb21tYW5kLCBvbkNsaWNrIH0pXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBsaXN0XG4gICAgfSxcblxuICAgIGZvY3VzRWxlbWVudCgpIHtcbiAgICAgIHRoaXMuZWRpdG9yLmNvbW1hbmRzLmZvY3VzKClcbiAgICB9LFxuXG4gICAgYmx1ckVsZW1lbnQoKSB7XG4gICAgICB0aGlzLmVkaXRvci5jb21tYW5kcy5ibHVyKClcbiAgICB9XG4gIH1cbn0pXG5cbmNvbnN0IFNtYWxsID0gTWFyay5jcmVhdGUoe1xuICBuYW1lOiAnc21hbGwnLFxuXG4gIHBhcnNlSFRNTCgpIHtcbiAgICByZXR1cm4gW3sgdGFnOiAnc21hbGwnIH1dXG4gIH0sXG5cbiAgcmVuZGVySFRNTCgpIHtcbiAgICByZXR1cm4gWydzbWFsbCcsIDBdXG4gIH0sXG5cbiAgYWRkQ29tbWFuZHMoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHNldFNtYWxsOlxuICAgICAgICBhdHRyaWJ1dGVzID0+XG4gICAgICAgICh7IGNvbW1hbmRzIH0pID0+IHtcbiAgICAgICAgICByZXR1cm4gY29tbWFuZHMuc2V0TWFyayh0aGlzLm5hbWUsIGF0dHJpYnV0ZXMpXG4gICAgICAgIH0sXG4gICAgICB0b2dnbGVTbWFsbDpcbiAgICAgICAgYXR0cmlidXRlcyA9PlxuICAgICAgICAoeyBjb21tYW5kcyB9KSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGNvbW1hbmRzLnRvZ2dsZU1hcmsodGhpcy5uYW1lLCBhdHRyaWJ1dGVzKVxuICAgICAgICB9LFxuICAgICAgdW5zZXRTbWFsbDpcbiAgICAgICAgKCkgPT5cbiAgICAgICAgKHsgY29tbWFuZHMgfSkgPT4ge1xuICAgICAgICAgIHJldHVybiBjb21tYW5kcy51bnNldE1hcmsodGhpcy5uYW1lKVxuICAgICAgICB9XG4gICAgfVxuICB9XG59KVxuXG5jb25zdCBMaW5rV2l0aFRpdGxlID0gTGluay5leHRlbmQoe1xuICBpbmNsdXNpdmU6IGZhbHNlLFxuICBzY2hlbWE6IHtcbiAgICBhdHRyczoge1xuICAgICAgaHJlZjoge1xuICAgICAgICBkZWZhdWx0OiBudWxsXG4gICAgICB9LFxuICAgICAgdGl0bGU6IHtcbiAgICAgICAgZGVmYXVsdDogbnVsbFxuICAgICAgfVxuICAgIH0sXG5cbiAgICBwYXJzZUhUTUwoKSB7XG4gICAgICByZXR1cm4gW1xuICAgICAgICB7XG4gICAgICAgICAgdGFnOiAnYScsXG4gICAgICAgICAgZ2V0QXR0cnM6IGVsZW1lbnQgPT4gKHtcbiAgICAgICAgICAgIGhyZWY6IGVsZW1lbnQuZ2V0QXR0cmlidXRlKCdocmVmJyksXG4gICAgICAgICAgICB0aXRsZTogZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ3RpdGxlJylcbiAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICBdXG4gICAgfSxcblxuICAgIHJlbmRlckhUTUwobm9kZSkge1xuICAgICAgcmV0dXJuIFsnYScsIG5vZGUuYXR0cnMsIDBdXG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLmRpdG8tbWFya3VwIHtcbiAgQGV4dGVuZCAlaW5wdXQ7XG5cbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuXG4gIC5kaXRvLXJlc2l6ZSB7XG4gICAgQGV4dGVuZCAlaWNvbi1yZXNpemU7XG5cbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgdG9wOiB1bnNldDtcbiAgICBsZWZ0OiB1bnNldDtcbiAgICByaWdodDogMDtcbiAgICBib3R0b206IDA7XG4gICAgd2lkdGg6IDFlbTtcbiAgICBoZWlnaHQ6IDFlbTtcbiAgfVxuXG4gIC5Qcm9zZU1pcnJvciB7XG4gICAgaGVpZ2h0OiAxMDAlO1xuICAgIG91dGxpbmU6IG5vbmU7XG4gIH1cblxuICAuZGl0by1tYXJrdXAtZWRpdG9yIHtcbiAgICBvdmVyZmxvdy15OiBzY3JvbGw7XG4gICAgbWFyZ2luLXRvcDogJGlucHV0LXBhZGRpbmctdmVyO1xuICAgIC8vIE1vdmUgcGFkZGluZyBcImluc2lkZVwiIGVkaXRvciB0byBjb3JyZWN0bHkgcG9zaXRpb24gc2Nyb2xsYmFyXG4gICAgbWFyZ2luLXJpZ2h0OiAtJGlucHV0LXBhZGRpbmctaG9yO1xuICAgIHBhZGRpbmctcmlnaHQ6ICRpbnB1dC1wYWRkaW5nLWhvcjtcbiAgfVxuXG4gIC5kaXRvLWJ1dHRvbnMtdG9vbGJhciB7XG4gICAgbWFyZ2luOiAwO1xuICB9XG5cbiAgaDEsXG4gIGgyLFxuICBoMyxcbiAgcCxcbiAgdWwsXG4gIG9sLFxuICBwcmUsXG4gIGJsb2NrcXVvdGUge1xuICAgIG1hcmdpbjogMXJlbSAwO1xuXG4gICAgJjpmaXJzdC1jaGlsZCB7XG4gICAgICBtYXJnaW4tdG9wOiAwO1xuICAgIH1cblxuICAgICY6bGFzdC1jaGlsZCB7XG4gICAgICBtYXJnaW4tYm90dG9tOiAwO1xuICAgIH1cbiAgfVxuXG4gIGgxLFxuICBoMixcbiAgaDMge1xuICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xuICB9XG5cbiAgaDEge1xuICAgIGZvbnQtc2l6ZTogMS40cmVtO1xuICB9XG5cbiAgaDIge1xuICAgIGZvbnQtc2l6ZTogMS4ycmVtO1xuICB9XG5cbiAgdWwge1xuICAgIGxpc3Qtc3R5bGU6IGRpc2M7XG4gIH1cblxuICBjb2RlIHtcbiAgICBmb250LWZhbWlseTogJGZvbnQtZmFtaWx5LW1vbm87XG4gIH1cblxuICBwcmUge1xuICAgIHBhZGRpbmc6IDAuN3JlbSAxcmVtO1xuICAgIGJvcmRlci1yYWRpdXM6ICRib3JkZXItcmFkaXVzO1xuICAgIGJhY2tncm91bmQ6ICRjb2xvci1kYXJrZXI7XG4gICAgY29sb3I6ICRjb2xvci13aGl0ZTtcbiAgICBvdmVyZmxvdy14OiBhdXRvO1xuXG4gICAgY29kZSB7XG4gICAgICBkaXNwbGF5OiBibG9jaztcbiAgICB9XG4gIH1cblxuICBwIGNvZGUge1xuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICBwYWRkaW5nOiAwIDAuM3JlbTtcbiAgICBib3JkZXItcmFkaXVzOiAkYm9yZGVyLXJhZGl1cztcbiAgICBiYWNrZ3JvdW5kOiAkY29sb3ItbGlnaHRlcjtcbiAgfVxuXG4gIGEge1xuICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xuICAgIGN1cnNvcjogZGVmYXVsdDtcbiAgICBjb2xvcjogYmx1ZTtcbiAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcbiAgfVxuXG4gIHVsLFxuICBvbCB7XG4gICAgcGFkZGluZy1sZWZ0OiAycmVtO1xuICB9XG5cbiAgbGkge1xuICAgICYgPiBwLFxuICAgICYgPiBvbCxcbiAgICAmID4gdWwge1xuICAgICAgbWFyZ2luOiAwO1xuICAgIH1cbiAgfVxuXG4gIGJsb2NrcXVvdGUge1xuICAgIGJvcmRlci1sZWZ0OiAzcHggc29saWQgJGNvbG9yLWxpZ2h0ZXI7XG4gICAgcGFkZGluZy1sZWZ0OiAxcmVtO1xuICAgIGZvbnQtc3R5bGU6IGl0YWxpYztcblxuICAgIHAge1xuICAgICAgbWFyZ2luOiAwO1xuICAgIH1cbiAgfVxufVxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4uZGl0by1tdWx0aXNlbGVjdFxuICAuZGl0by1tdWx0aXNlbGVjdF9faW5uZXJcbiAgICBWdWVNdWx0aXNlbGVjdChcbiAgICAgIHJlZj1cImVsZW1lbnRcIlxuICAgICAgdi1tb2RlbD1cInNlbGVjdGVkT3B0aW9uc1wiXG4gICAgICA6Y2xhc3M9YHtcbiAgICAgICAgJ211bHRpc2VsZWN0LS1tdWx0aXBsZSc6IG11bHRpcGxlLFxuICAgICAgICAnbXVsdGlzZWxlY3QtLWxvYWRpbmcnOiBpc0xvYWRpbmcsXG4gICAgICAgICdtdWx0aXNlbGVjdC0taGlnaGxpZ2h0Jzogc2hvd0hpZ2hsaWdodFxuICAgICAgfWBcbiAgICAgIDpzaG93TGFiZWxzPVwiZmFsc2VcIlxuICAgICAgOnBsYWNlaG9sZGVyPVwicGxhY2Vob2xkZXJcIlxuICAgICAgdGFnUGxhY2Vob2xkZXI9XCJQcmVzcyBlbnRlciB0byBhZGQgbmV3IHRhZ1wiXG4gICAgICA6b3B0aW9ucz1cInBvcHVsYXRlICYmIGFjdGl2ZU9wdGlvbnMgfHwgW11cIlxuICAgICAgOmN1c3RvbUxhYmVsPVwiZ2V0TGFiZWxGb3JPcHRpb25cIlxuICAgICAgOnRyYWNrQnk9XCJvcHRpb25WYWx1ZVwiXG4gICAgICA6Z3JvdXBMYWJlbD1cImdyb3VwQnlMYWJlbFwiXG4gICAgICA6Z3JvdXBWYWx1ZXM9XCJncm91cEJ5T3B0aW9uc1wiXG4gICAgICA6bXVsdGlwbGU9XCJtdWx0aXBsZVwiXG4gICAgICA6dGFnZ2FibGU9XCJ0YWdnYWJsZVwiXG4gICAgICA6c2VhcmNoYWJsZT1cInNlYXJjaGFibGVcIlxuICAgICAgOmludGVybmFsU2VhcmNoPVwiIXNlYXJjaEZpbHRlclwiXG4gICAgICA6cHJlc2VydmVTZWFyY2g9XCIhIXNlYXJjaEZpbHRlclwiXG4gICAgICA6Y2xlYXJPblNlbGVjdD1cIiFzZWFyY2hGaWx0ZXJcIlxuICAgICAgOmNsb3NlT25TZWxlY3Q9XCIhc3RheU9wZW5cIlxuICAgICAgOmxvYWRpbmc9XCJpc0xvYWRpbmdcIlxuICAgICAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gICAgICBAb3Blbj1cIm9uT3BlblwiXG4gICAgICBAY2xvc2U9XCJvbkNsb3NlXCJcbiAgICAgIEB0YWc9XCJvbkFkZFRhZ1wiXG4gICAgICBAc2VhcmNoLWNoYW5nZT1cIm9uU2VhcmNoQ2hhbmdlXCJcbiAgICApXG4gICAgYnV0dG9uLmRpdG8tYnV0dG9uLWNsZWFyLmRpdG8tYnV0dG9uLW92ZXJsYXkoXG4gICAgICB2LWlmPVwic2hvd0NsZWFyQnV0dG9uXCJcbiAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgICAgQGNsaWNrPVwiY2xlYXJcIlxuICAgIClcbiAgLy8tIEVkaXQgYnV0dG9uIGlzIG5ldmVyIGRpc2FibGVkLCBldmVuIGlmIHRoZSBmaWVsZCBpcyBkaXNhYmxlZC5cbiAgRGl0b0VkaXRCdXR0b25zKFxuICAgIHYtaWY9XCJlZGl0YWJsZVwiXG4gICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgOm1ldGE9XCJtZXRhXCJcbiAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgOmRpc2FibGVkPVwiZmFsc2VcIlxuICAgIDplZGl0YWJsZT1cImVkaXRhYmxlXCJcbiAgICA6ZWRpdFBhdGg9XCJlZGl0UGF0aFwiXG4gIClcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b1R5cGVDb21wb25lbnQgZnJvbSAnLi4vRGl0b1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgRGl0b0NvbnRleHQgZnJvbSAnLi4vRGl0b0NvbnRleHQuanMnXG5pbXBvcnQgVHlwZU1peGluIGZyb20gJy4uL21peGlucy9UeXBlTWl4aW4uanMnXG5pbXBvcnQgT3B0aW9uc01peGluIGZyb20gJy4uL21peGlucy9PcHRpb25zTWl4aW4uanMnXG5pbXBvcnQgVnVlTXVsdGlzZWxlY3QgZnJvbSAndnVlLW11bHRpc2VsZWN0J1xuaW1wb3J0IHsgZ2V0U2NoZW1hQWNjZXNzb3IgfSBmcm9tICcuLi91dGlscy9hY2Nlc3Nvci5qcydcbmltcG9ydCB7IGlzQm9vbGVhbiB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvVHlwZUNvbXBvbmVudC5yZWdpc3RlcignbXVsdGlzZWxlY3QnLCB7XG4gIG1peGluczogW09wdGlvbnNNaXhpbl0sXG4gIGNvbXBvbmVudHM6IHsgVnVlTXVsdGlzZWxlY3QgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBzZWFyY2hlZE9wdGlvbnM6IG51bGwsXG4gICAgICBwb3B1bGF0ZTogZmFsc2VcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBzZWxlY3RlZE9wdGlvbnM6IHtcbiAgICAgIGdldCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubXVsdGlwbGVcbiAgICAgICAgICA/ICh0aGlzLnNlbGVjdGVkVmFsdWUgfHwgW10pXG4gICAgICAgICAgICAgIC5tYXAoXG4gICAgICAgICAgICAgICAgLy8gSWYgYW4gb3B0aW9uIGNhbm5vdCBiZSBmb3VuZCwgd2UgbWF5IGJlIGluIHRhZ2dhYmxlIG1vZGUgYW5kXG4gICAgICAgICAgICAgICAgLy8gY2FuIGFkZCBpdC5cbiAgICAgICAgICAgICAgICB2YWx1ZSA9PiAoXG4gICAgICAgICAgICAgICAgICB0aGlzLmdldE9wdGlvbkZvclZhbHVlKHZhbHVlKSB8fCB0aGlzLmFkZFRhZ09wdGlvbih2YWx1ZSlcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgLy8gRmlsdGVyIG91dCBvcHRpb25zIHRoYXQgd2UgY291bGRuJ3QgbWF0Y2guXG4gICAgICAgICAgICAgIC8vIFRPRE86IFNob3VsZCB3ZSBkaXNwbGF5IGFuIGVycm9yIGluc3RlYWQ/XG4gICAgICAgICAgICAgIC5maWx0ZXIoQm9vbGVhbilcbiAgICAgICAgICA6IHRoaXMuc2VsZWN0ZWRPcHRpb25cbiAgICAgIH0sXG5cbiAgICAgIHNldChvcHRpb24pIHtcbiAgICAgICAgLy8gQ29udmVydCB2YWx1ZSB0byBvcHRpb25zIG9iamVjdCwgc2luY2UgdnVlLW11bHRpc2VsZWN0IGNhbid0IG1hcCB0aGF0XG4gICAgICAgIC8vIGl0c2VsZiB1bmZvcnR1bmF0ZWx5LiBgdHJhY2stYnlgIGlzIHVzZWQgZm9yIDprZXkgbWFwcGluZyBpdCBzZWVtcy5cbiAgICAgICAgdGhpcy5zZWxlY3RlZFZhbHVlID0gdGhpcy5tdWx0aXBsZVxuICAgICAgICAgID8gKG9wdGlvbiB8fCBbXSkubWFwKHZhbHVlID0+IHRoaXMuZ2V0VmFsdWVGb3JPcHRpb24odmFsdWUpKVxuICAgICAgICAgIDogdGhpcy5nZXRWYWx1ZUZvck9wdGlvbihvcHRpb24pXG4gICAgICAgIHRoaXMub25DaGFuZ2UoKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBhY3RpdmVPcHRpb25zKCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2VhcmNoZWRPcHRpb25zIHx8IHRoaXMub3B0aW9uc1xuICAgIH0sXG5cbiAgICBtdWx0aXBsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ211bHRpcGxlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfSksXG5cbiAgICBzZWFyY2hhYmxlOiBnZXRTY2hlbWFBY2Nlc3Nvcignc2VhcmNoYWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0pLFxuXG4gICAgdGFnZ2FibGU6IGdldFNjaGVtYUFjY2Vzc29yKCd0YWdnYWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0pLFxuXG4gICAgc3RheU9wZW46IGdldFNjaGVtYUFjY2Vzc29yKCdzdGF5T3BlbicsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0pLFxuXG4gICAgcGxhY2Vob2xkZXIoKSB7XG4gICAgICBsZXQgeyBwbGFjZWhvbGRlciwgc2VhcmNoYWJsZSwgdGFnZ2FibGUgfSA9IHRoaXMuc2NoZW1hXG4gICAgICBpZiAoaXNCb29sZWFuKHBsYWNlaG9sZGVyKSkge1xuICAgICAgICBwbGFjZWhvbGRlciA9IHBsYWNlaG9sZGVyID8gdW5kZWZpbmVkIDogbnVsbFxuICAgICAgfVxuICAgICAgcmV0dXJuIHBsYWNlaG9sZGVyID09PSB1bmRlZmluZWRcbiAgICAgICAgPyBzZWFyY2hhYmxlICYmIHRhZ2dhYmxlXG4gICAgICAgICAgPyBgU2VhcmNoIG9yIGFkZCBhICR7dGhpcy5sYWJlbH1gXG4gICAgICAgICAgOiBzZWFyY2hhYmxlXG4gICAgICAgICAgICA/IGBTZWxlY3Qgb3Igc2VhcmNoICR7dGhpcy5sYWJlbH1gXG4gICAgICAgICAgICA6IHVuZGVmaW5lZFxuICAgICAgICA6IHBsYWNlaG9sZGVyXG4gICAgfSxcblxuICAgIHNob3dIaWdobGlnaHQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5pc01vdW50ZWQgJiYgdGhpcy4kcmVmcy5lbGVtZW50LnBvaW50ZXJEaXJ0eVxuICAgIH1cbiAgfSxcblxuICBtb3VudGVkKCkge1xuICAgIGlmICh0aGlzLmF1dG9mb2N1cykge1xuICAgICAgLy8gdnVlLW11bHRpc2VsZWN0IGRvZXNuJ3Qgc3VwcG9ydCB0aGUgYXV0b2ZvY3VzIGF0dHJpYnV0ZS4gV2UgbmVlZCB0b1xuICAgICAgLy8gaGFuZGxlIGl0IGhlcmUuXG4gICAgICB0aGlzLmZvY3VzKClcbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGFkZFRhZ09wdGlvbih0YWcpIHtcbiAgICAgIGlmICh0aGlzLnRhZ2dhYmxlKSB7XG4gICAgICAgIGNvbnN0IHsgb3B0aW9uTGFiZWwsIG9wdGlvblZhbHVlIH0gPSB0aGlzXG4gICAgICAgIGNvbnN0IG9wdGlvbiA9XG4gICAgICAgICAgb3B0aW9uTGFiZWwgJiYgb3B0aW9uVmFsdWVcbiAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgIFtvcHRpb25MYWJlbF06IHRhZyxcbiAgICAgICAgICAgICAgICAvLyBUT0RPOiBEZWZpbmUgYSBzaW1wbGUgc2NoZW1hIG9wdGlvbiB0byBjb252ZXJ0IHRoZSB0YWcgdmFsdWVcbiAgICAgICAgICAgICAgICAvLyB0byBzb21ldGhpbmcgZWxzZSwgZS5nLiBgdG9UYWc6IHRhZyA9PiB1bmRlcnNjb3JlKHRhZylgXG4gICAgICAgICAgICAgICAgW29wdGlvblZhbHVlXTogdGFnXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDogdGFnXG4gICAgICAgIHRoaXMub3B0aW9ucy5wdXNoKG9wdGlvbilcbiAgICAgICAgcmV0dXJuIG9wdGlvblxuICAgICAgfVxuICAgIH0sXG5cbiAgICBmb2N1c0VsZW1lbnQoKSB7XG4gICAgICB0aGlzLiRyZWZzLmVsZW1lbnQuYWN0aXZhdGUoKVxuICAgIH0sXG5cbiAgICBibHVyRWxlbWVudCgpIHtcbiAgICAgIHRoaXMuJHJlZnMuZWxlbWVudC5kZWFjdGl2YXRlKClcbiAgICB9LFxuXG4gICAgb25PcGVuKCkge1xuICAgICAgdGhpcy5wb3B1bGF0ZSA9IHRydWVcbiAgICB9LFxuXG4gICAgb25DbG9zZSgpIHtcbiAgICAgIC8vIFNpbmNlIHdlIGRvbid0IGZpcmUgYmx1ciBldmVudHMgd2hpbGUgdGhlIG11bHRpc2VsZWN0IGlzIG9wZW4gKHNlZVxuICAgICAgLy8gYmVsb3cpLCB3ZSBuZWVkIHRvIGRvIGl0IGhlcmUsIHdoZW4gaXQncyBhY3R1YWxseSBjbG9zZWQuXG4gICAgICBpZiAodGhpcy5mb2N1c2VkKSB7XG4gICAgICAgIHRoaXMub25CbHVyKClcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgb25CbHVyKCkge1xuICAgICAgaWYgKCF0aGlzLiRyZWZzLmVsZW1lbnQuaXNPcGVuKSB7XG4gICAgICAgIFR5cGVNaXhpbi5tZXRob2RzLm9uQmx1ci5jYWxsKHRoaXMpXG4gICAgICB9XG4gICAgfSxcblxuICAgIG9uQWRkVGFnKHRhZykge1xuICAgICAgY29uc3Qgb3B0aW9uID0gdGhpcy5hZGRUYWdPcHRpb24odGFnKVxuICAgICAgaWYgKG9wdGlvbikge1xuICAgICAgICB0aGlzLnZhbHVlLnB1c2godGhpcy5nZXRWYWx1ZUZvck9wdGlvbihvcHRpb24pKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBhc3luYyBvblNlYXJjaENoYW5nZShxdWVyeSkge1xuICAgICAgaWYgKHRoaXMuc2VhcmNoRmlsdGVyKSB7XG4gICAgICAgIGlmIChxdWVyeSkge1xuICAgICAgICAgIC8vIFNldCBgc2VhcmNoZWRPcHRpb25zYCB0byBhbiBlbXB0eSBhcnJheSwgYmVmb3JlIGl0IHdpbGwgYmVcbiAgICAgICAgICAvLyBwb3B1bGF0ZWQgYXN5bmNocm9ub3VzbHkgd2l0aCB0aGUgYWN0dWFsIHJlc3VsdHMuXG4gICAgICAgICAgdGhpcy5zZWFyY2hlZE9wdGlvbnMgPSBbXVxuICAgICAgICAgIHRoaXMuc2VhcmNoZWRPcHRpb25zID0gYXdhaXQgdGhpcy5yZXNvbHZlRGF0YShcbiAgICAgICAgICAgICgpID0+IHRoaXMuc2VhcmNoRmlsdGVyKG5ldyBEaXRvQ29udGV4dCh0aGlzLCB7IHF1ZXJ5IH0pKVxuICAgICAgICAgIClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBDbGVhciBgc2VhcmNoZWRPcHRpb25zYCB3aGVuIHRoZSBxdWVyeSBpcyBjbGVhcmVkLlxuICAgICAgICAgIHRoaXMuc2VhcmNoZWRPcHRpb25zID0gbnVsbFxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcbkBpbXBvcnQgJ3Z1ZS1tdWx0aXNlbGVjdC9kaXN0L3Z1ZS1tdWx0aXNlbGVjdC5jc3MnO1xuXG4kc3Bpbm5lci13aWR0aDogJHNlbGVjdC1hcnJvdy13aWR0aDtcbiR0YWctaWNvbi13aWR0aDogMS44ZW07XG4kdGFnLW1hcmdpbjogMnB4O1xuJHRhZy1wYWRkaW5nOiAzcHg7XG4kdGFnLWxpbmUtaGVpZ2h0OiAxZW07XG5cbi5kaXRvLW11bHRpc2VsZWN0IHtcbiAgZGlzcGxheTogaW5saW5lLWZsZXg7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcblxuICAmX19pbm5lciB7XG4gICAgZmxleDogMTtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIH1cblxuICAuZGl0by1lZGl0LWJ1dHRvbnMge1xuICAgIG1hcmdpbi1sZWZ0OiAkZm9ybS1zcGFjaW5nLWhhbGY7XG4gIH1cblxuICAubXVsdGlzZWxlY3Qge1xuICAgICRzZWxmOiBsYXN0LXNlbGVjdG9yKCYpO1xuXG4gICAgLS1pbnB1dC13aWR0aDogMTAwJTtcblxuICAgIGZvbnQtc2l6ZTogaW5oZXJpdDtcbiAgICBtaW4taGVpZ2h0OiBpbmhlcml0O1xuICAgIGNvbG9yOiAkY29sb3ItYmxhY2s7XG5cbiAgICAmLS1tdWx0aXBsZSB7XG4gICAgICAtLWlucHV0LXdpZHRoOiBhdXRvO1xuICAgIH1cblxuICAgICZfX3RhZ3Mge1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGZvbnQtc2l6ZTogaW5oZXJpdDtcbiAgICAgIG1pbi1oZWlnaHQ6IGluaGVyaXQ7XG4gICAgICBvdmVyZmxvdzogYXV0bztcbiAgICAgIHBhZGRpbmc6IDAgJHNwaW5uZXItd2lkdGggMCAwO1xuICAgICAgLy8gU28gdGFncyBjYW4gZmxvYXQgb24gbXVsdGlwbGUgbGluZXMgYW5kIGhhdmUgcHJvcGVyIG1hcmdpbnM6XG4gICAgICBwYWRkaW5nLWJvdHRvbTogJHRhZy1tYXJnaW47XG5cbiAgICAgIC5kaXRvLWhhcy1lcnJvcnMgJiB7XG4gICAgICAgIGJvcmRlci1jb2xvcjogJGNvbG9yLWVycm9yO1xuICAgICAgfVxuICAgIH1cblxuICAgICZfX3RhZyB7XG4gICAgICBmbG9hdDogbGVmdDtcbiAgICAgIG1hcmdpbjogJHRhZy1tYXJnaW4gMCAwICR0YWctbWFyZ2luO1xuICAgICAgYm9yZGVyLXJhZGl1czogMWVtO1xuICAgICAgcGFkZGluZzogJHRhZy1wYWRkaW5nICR0YWctaWNvbi13aWR0aCAkdGFnLXBhZGRpbmcgMC44ZW07XG4gICAgICBsaW5lLWhlaWdodDogJHRhZy1saW5lLWhlaWdodDtcbiAgICAgIGhlaWdodDogY2FsYygkaW5wdXQtaGVpZ2h0IC0gMiAqICR0YWctcGFkZGluZyk7XG4gICAgfVxuXG4gICAgJl9fdGFncy13cmFwIHtcbiAgICAgIG92ZXJmbG93OiBhdXRvO1xuICAgICAgbGluZS1oZWlnaHQ6IDA7XG4gICAgfVxuXG4gICAgJl9fc2luZ2xlLFxuICAgICZfX3BsYWNlaG9sZGVyLFxuICAgICZfX2lucHV0IHtcbiAgICAgIEBpbmNsdWRlIGVsbGlwc2lzO1xuXG4gICAgICBmbGV4OiAxIDAgMCU7XG4gICAgICB3aWR0aDogMDtcbiAgICAgIG1pbi1oZWlnaHQ6IDA7XG4gICAgICBtYXJnaW46IDAgMCAxcHggMDtcbiAgICAgIGZvbnQtc2l6ZTogaW5oZXJpdDtcbiAgICAgIGxpbmUtaGVpZ2h0OiBpbmhlcml0O1xuICAgICAgLy8gU2FkbHksIHZ1ZS1zZWxlY3Qgc2V0cyBzdHlsZT1cInBhZGRpbmc6IC4uLjtcIiBpbiBhZGRpdGlvbiB0byB1c2luZ1xuICAgICAgLy8gY2xhc3Nlcywgc28gYCFpbXBvcnRhbnRgIGlzIG5lY2Vzc2FyeTpcbiAgICAgIHBhZGRpbmc6ICRpbnB1dC1wYWRkaW5nICFpbXBvcnRhbnQ7XG4gICAgICAvLyBTbyBpbnB1dCBjYW4gZmxvYXQgbmV4dCB0byB0YWdzIGFuZCBoYXZlIHByb3BlciBtYXJnaW5zIHdpdGhcbiAgICAgIC8vICZfX3RhZ3M6XG4gICAgICBwYWRkaW5nLWJvdHRvbTogMCAhaW1wb3J0YW50O1xuICAgICAgYmFja2dyb3VuZDogbm9uZTtcbiAgICB9XG5cbiAgICAmX19wbGFjZWhvbGRlcixcbiAgICAmX19pbnB1dDo6cGxhY2Vob2xkZXIge1xuICAgICAgY29sb3I6ICRjb2xvci1wbGFjZWhvbGRlcjtcbiAgICB9XG5cbiAgICAmX19wbGFjZWhvbGRlciB7XG4gICAgICAmOjphZnRlciB7XG4gICAgICAgIC8vIEVuZm9yY2UgYWN0dWFsIGxpbmUtaGVpZ2h0IGZvciBwb3NpdGlvbmluZy5cbiAgICAgICAgY29udGVudDogJ1xcMjAwYic7XG4gICAgICB9XG4gICAgfVxuXG4gICAgJl9fc2VsZWN0LFxuICAgICZfX3NwaW5uZXIge1xuICAgICAgcGFkZGluZzogMDtcbiAgICAgIC8vICRib3JkZXItd2lkdGggdG8gcHJldmVudCBtYXNraW5nIGJvcmRlciB3aXRoICZfX3NwaW5uZXJcbiAgICAgIHRvcDogJGJvcmRlci13aWR0aDtcbiAgICAgIHJpZ2h0OiAkYm9yZGVyLXdpZHRoO1xuICAgICAgYm90dG9tOiAkYm9yZGVyLXdpZHRoO1xuICAgICAgaGVpZ2h0OiBpbmhlcml0O1xuICAgICAgYm9yZGVyLXJhZGl1czogJGJvcmRlci1yYWRpdXM7XG4gICAgfVxuXG4gICAgJl9fc2VsZWN0IHtcbiAgICAgIHdpZHRoOiAwO1xuICAgICAgbWFyZ2luLXJpZ2h0OiBjYWxjKCRzZWxlY3QtYXJyb3ctd2lkdGggLyAyKTtcblxuICAgICAgJjo6YmVmb3JlIHtcbiAgICAgICAgQGluY2x1ZGUgYXJyb3coJHNlbGVjdC1hcnJvdy1zaXplKTtcblxuICAgICAgICBib3R0b206ICRzZWxlY3QtYXJyb3ctYm90dG9tO1xuICAgICAgICByaWdodDogY2FsYygtMSAqICRzZWxlY3QtYXJyb3ctc2l6ZSAvIDIpO1xuICAgICAgfVxuICAgIH1cblxuICAgICZfX3NwaW5uZXIge1xuICAgICAgd2lkdGg6ICRzcGlubmVyLXdpZHRoO1xuXG4gICAgICAmOjpiZWZvcmUsXG4gICAgICAmOjphZnRlciB7XG4gICAgICAgIC8vIENoYW5nZSB0aGUgd2lkdGggb2YgdGhlIGxvYWRpbmcgc3Bpbm5lclxuICAgICAgICBib3JkZXItd2lkdGg6IDNweDtcbiAgICAgICAgYm9yZGVyLXRvcC1jb2xvcjogJGNvbG9yLWFjdGl2ZTtcbiAgICAgICAgaW5zZXQ6IDA7XG4gICAgICAgIG1hcmdpbjogYXV0bztcbiAgICAgIH1cbiAgICB9XG5cbiAgICAmX19vcHRpb24ge1xuICAgICAgJG9wdGlvbjogbGFzdC1zZWxlY3RvcigmKTtcblxuICAgICAgbWluLWhlaWdodDogdW5zZXQ7XG4gICAgICBoZWlnaHQ6IHVuc2V0O1xuICAgICAgbGluZS1oZWlnaHQ6ICRsaW5lLWhlaWdodDtcbiAgICAgIHBhZGRpbmc6ICRpbnB1dC1wYWRkaW5nO1xuXG4gICAgICAmOjphZnRlciB7XG4gICAgICAgIC8vIEluc3RydWN0aW9uIHRleHQgZm9yIG9wdGlvbnNcbiAgICAgICAgcGFkZGluZzogJGlucHV0LXBhZGRpbmc7XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAkdGFnLWxpbmUtaGVpZ2h0O1xuICAgICAgfVxuXG4gICAgICAvLyBPbmx5IHNob3cgdGhlIGhpZ2hsaWdodCBvbmNlIHRoZSBwdWxsZG93biBoYXMgcmVjZWl2ZWQgbW91c2Ugb3JcbiAgICAgIC8vIGtleWJvYXJkIGludGVyYWN0aW9uLCBpbiB3aGljaCBjYXNlIGAmLS1oaWdobGlnaHRgIHdpbGwgYmUgc2V0LFxuICAgICAgLy8gd2hpY2ggaXMgY29udHJvbGxlZCBieSBgcG9pbnRlckRpcnR5YCBpbiB2dWUtbXVsdGlzZWxlY3QuXG4gICAgICAvLyBVbnRpbCB0aGVuLCBjbGVhciB0aGUgaGlnaGxpZ2h0IHN0eWxlLCBidXQgb25seSBpZiBpdCBpc24ndCBhbHNvXG4gICAgICAvLyBkaXNhYmxlZCBvciBzZWxlY3RlZCwgaW4gd2hpY2ggY2FzZSB3ZSB3YW50IHRvIGtlZXAgdGhlIHN0eWxlLlxuICAgICAgQGF0LXJvb3QgI3skc2VsZn06bm90KCN7JHNlbGZ9LS1oaWdobGlnaHQpXG4gICAgICAgICAgI3skb3B0aW9ufTpub3QoI3skb3B0aW9ufS0tZGlzYWJsZWQpOm5vdCgjeyRvcHRpb259LS1zZWxlY3RlZCkge1xuICAgICAgICBjb2xvcjogJGNvbG9yLXRleHQ7XG4gICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuICAgICAgfVxuXG4gICAgICAmLS1oaWdobGlnaHQge1xuICAgICAgICAmOjphZnRlciB7XG4gICAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuICAgICAgICAgIGNvbG9yOiAkY29sb3Itd2hpdGU7XG4gICAgICAgIH1cblxuICAgICAgICBAYXQtcm9vdCAjeyRzZWxmfSN7JHNlbGZ9LS1oaWdobGlnaHQgI3tsYXN0LXNlbGVjdG9yKCYpfSB7XG4gICAgICAgICAgY29sb3I6ICRjb2xvci10ZXh0LWludmVydGVkO1xuICAgICAgICAgIGJhY2tncm91bmQ6ICRjb2xvci1hY3RpdmU7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgJi0tc2VsZWN0ZWQge1xuICAgICAgICBmb250LXdlaWdodDogbm9ybWFsO1xuICAgICAgICBjb2xvcjogJGNvbG9yLXRleHQ7XG4gICAgICAgIGJhY2tncm91bmQ6ICRjb2xvci1oaWdobGlnaHQ7XG5cbiAgICAgICAgQGF0LXJvb3QgI3skc2VsZn0jeyRzZWxmfS0taGlnaGxpZ2h0ICYjeyRvcHRpb259LS1oaWdobGlnaHQge1xuICAgICAgICAgIGNvbG9yOiAkY29sb3ItdGV4dC1pbnZlcnRlZDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAmLS1kaXNhYmxlZCB7XG4gICAgICAgIGJhY2tncm91bmQ6IG5vbmU7XG4gICAgICAgIGNvbG9yOiAkY29sb3ItZGlzYWJsZWQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgJl9fdGFnIHtcbiAgICAgIGNvbG9yOiAkY29sb3ItdGV4dC1pbnZlcnRlZDtcbiAgICAgIGJhY2tncm91bmQ6ICRjb2xvci1hY3RpdmU7XG4gICAgfVxuXG4gICAgJl9fdGFnLWljb24ge1xuICAgICAgYmFja2dyb3VuZDogbm9uZTtcbiAgICAgIGJvcmRlci1yYWRpdXM6IDFlbTtcbiAgICAgIHdpZHRoOiAkdGFnLWljb24td2lkdGg7XG4gICAgICBtYXJnaW46IDA7XG5cbiAgICAgICY6OmFmdGVyIHtcbiAgICAgICAgQGV4dGVuZCAlaWNvbi1jbGVhcjtcblxuICAgICAgICBmb250LXNpemU6IDAuOWVtO1xuICAgICAgICBjb2xvcjogJGNvbG9yLXRleHQtaW52ZXJ0ZWQ7XG4gICAgICB9XG5cbiAgICAgICY6aG92ZXI6OmFmdGVyIHtcbiAgICAgICAgY29sb3I6ICRjb2xvci10ZXh0O1xuICAgICAgfVxuICAgIH1cblxuICAgICZfX3RhZ3MsXG4gICAgJl9fY29udGVudC13cmFwcGVyIHtcbiAgICAgIGJvcmRlcjogJGJvcmRlci1zdHlsZTtcbiAgICAgIGJvcmRlci1yYWRpdXM6ICRib3JkZXItcmFkaXVzO1xuICAgIH1cblxuICAgICZfX2NvbnRlbnQtd3JhcHBlciB7XG4gICAgICB6LWluZGV4OiAkei1pbmRleC1wb3B1cDtcbiAgICAgIGJvcmRlci1jb2xvcjogJGNvbG9yLWFjdGl2ZTtcbiAgICB9XG5cbiAgICAmOm5vdCgmLS1hYm92ZSkgI3skc2VsZn1fX2NvbnRlbnQtd3JhcHBlciB7XG4gICAgICBtYXJnaW46ICgtJGJvcmRlci13aWR0aCkgMCAwO1xuICAgICAgYm9yZGVyLXRvcC1jb2xvcjogJGJvcmRlci1jb2xvcjtcbiAgICAgIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6IDA7XG4gICAgICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogMDtcbiAgICB9XG5cbiAgICAmLS1hYm92ZSAjeyRzZWxmfV9fY29udGVudC13cmFwcGVyIHtcbiAgICAgIG1hcmdpbjogMCAwICgtJGJvcmRlci13aWR0aCk7XG4gICAgICBib3JkZXItYm90dG9tLWNvbG9yOiAkYm9yZGVyLWNvbG9yO1xuICAgICAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogMDtcbiAgICAgIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAwO1xuICAgIH1cblxuICAgICYtLWFjdGl2ZSB7XG4gICAgICAjeyRzZWxmfV9fcGxhY2Vob2xkZXIge1xuICAgICAgICAvLyBEb24ndCB1c2UgYGRpc3BsYXk6IG5vbmVgIHRvIGhpZGUgcGxhY2UtaG9sZGVyLCBhcyB0aGUgbGF5b3V0IHdvdWxkXG4gICAgICAgIC8vIGNvbGxhcHNlLlxuICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgICAgIHZpc2liaWxpdHk6IGhpZGRlbjtcbiAgICAgIH1cblxuICAgICAgI3skc2VsZn1fX3NpbmdsZSxcbiAgICAgICN7JHNlbGZ9X19pbnB1dCB7XG4gICAgICAgIC8vIFNhZGx5LCB2dWUtc2VsZWN0IHNldHMgYHN0eWxlPVwid2lkdGhcImAgaW4gYWRkaXRpb24gdG8gdXNpbmcgY2xhc3Nlc1xuICAgICAgICAvLyBzbyBgIWltcG9ydGFudGAgaXMgbmVjZXNzYXJ5OlxuICAgICAgICB3aWR0aDogdmFyKC0taW5wdXQtd2lkdGgpICFpbXBvcnRhbnQ7XG4gICAgICB9XG5cbiAgICAgICN7JHNlbGZ9X190YWdzIHtcbiAgICAgICAgYm9yZGVyLWNvbG9yOiAkY29sb3ItYWN0aXZlO1xuICAgICAgICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAwO1xuICAgICAgICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogMDtcbiAgICAgIH1cblxuICAgICAgJiN7JHNlbGZ9LS1hYm92ZSB7XG4gICAgICAgICN7JHNlbGZ9X190YWdzIHtcbiAgICAgICAgICBib3JkZXItcmFkaXVzOiAkYm9yZGVyLXJhZGl1cztcbiAgICAgICAgICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAwO1xuICAgICAgICAgIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAwO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgJi0tbG9hZGluZyB7XG4gICAgICAjeyRzZWxmfV9fdGFncyB7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6ICRib3JkZXItcmFkaXVzO1xuICAgICAgfVxuXG4gICAgICAjeyRzZWxmfV9fY29udGVudC13cmFwcGVyIHtcbiAgICAgICAgZGlzcGxheTogbm9uZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCJpbXBvcnQgeyBnZXRTY2hlbWFBY2Nlc3NvciB9IGZyb20gJy4uL3V0aWxzL2FjY2Vzc29yLmpzJ1xuaW1wb3J0IHsgaXNBcnJheSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCB7XG4gIGNvbXB1dGVkOiB7XG4gICAgaW5wdXRWYWx1ZToge1xuICAgICAgZ2V0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZSAhPT0gbnVsbCA/IHRoaXMudmFsdWUgOiAnJ1xuICAgICAgfSxcblxuICAgICAgc2V0KHZhbHVlKSB7XG4gICAgICAgIHRoaXMudmFsdWUgPVxuICAgICAgICAgIHZhbHVlICE9PSAnJ1xuICAgICAgICAgICAgPyB0aGlzLmlzSW50ZWdlclxuICAgICAgICAgICAgICA/IHBhcnNlSW50KHZhbHVlLCAxMClcbiAgICAgICAgICAgICAgOiBwYXJzZUZsb2F0KHZhbHVlKVxuICAgICAgICAgICAgOiBudWxsXG4gICAgICB9XG4gICAgfSxcblxuICAgIC8vIEBvdmVycmlkYWJsZVxuICAgIGlzSW50ZWdlcigpIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH0sXG5cbiAgICBzdGVwVmFsdWUoKSB7XG4gICAgICAvLyBEb24ndCBzaG93IHN0ZXBzIGlmIHRoZSBpbnB1dCBpcyBhbHNvIGNsZWFyYWJsZSwgc2luY2UgdGhlIHN0ZXAgYnV0dG9uc1xuICAgICAgLy8gd291bGQgY29sbGlkZSB3aXRoIHRoZSBjbGVhciBidXR0b24uXG4gICAgICByZXR1cm4gdGhpcy5jbGVhcmFibGVcbiAgICAgICAgPyBudWxsXG4gICAgICAgIDogdGhpcy5zdGVwID09IG51bGwgJiYgIXRoaXMuaXNJbnRlZ2VyXG4gICAgICAgICAgPyAnYW55J1xuICAgICAgICAgIDogdGhpcy5zdGVwXG4gICAgfSxcblxuICAgIGRlY2ltYWxzOiBnZXRTY2hlbWFBY2Nlc3NvcignZGVjaW1hbHMnLCB7XG4gICAgICB0eXBlOiBOdW1iZXJcbiAgICB9KSxcblxuICAgIHN0ZXA6IGdldFNjaGVtYUFjY2Vzc29yKCdzdGVwJywge1xuICAgICAgdHlwZTogTnVtYmVyLFxuICAgICAgZ2V0KHN0ZXApIHtcbiAgICAgICAgLy8gRm9yIGludGVnZXJzLCByb3VuZCB0aGUgc3RlcHMgdG8gdGhlIG5leHQgYmlnZ2VyIGludGVnZXIgdmFsdWU6XG4gICAgICAgIHJldHVybiB0aGlzLmlzSW50ZWdlciAmJiBzdGVwICE9IG51bGwgPyBNYXRoLmNlaWwoc3RlcCkgOiBzdGVwXG4gICAgICB9XG4gICAgfSksXG5cbiAgICBtaW46IGdldFNjaGVtYUFjY2Vzc29yKCdtaW4nLCB7XG4gICAgICB0eXBlOiBOdW1iZXIsXG4gICAgICBnZXQobWluKSB7XG4gICAgICAgIG1pbiA9XG4gICAgICAgICAgbWluID09PSB1bmRlZmluZWRcbiAgICAgICAgICAgID8gdGhpcy5nZXRTY2hlbWFWYWx1ZSgncmFuZ2UnLCB7IHR5cGU6IEFycmF5IH0pPy5bMF1cbiAgICAgICAgICAgIDogbWluXG4gICAgICAgIHJldHVybiB0aGlzLmlzSW50ZWdlciAmJiBtaW4gIT0gbnVsbCA/IE1hdGguZmxvb3IobWluKSA6IG1pblxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgbWF4OiBnZXRTY2hlbWFBY2Nlc3NvcignbWF4Jywge1xuICAgICAgdHlwZTogTnVtYmVyLFxuICAgICAgZ2V0KG1heCkge1xuICAgICAgICBtYXggPVxuICAgICAgICAgIG1heCA9PT0gdW5kZWZpbmVkXG4gICAgICAgICAgICA/IHRoaXMuZ2V0U2NoZW1hVmFsdWUoJ3JhbmdlJywgeyB0eXBlOiBBcnJheSB9KT8uWzFdXG4gICAgICAgICAgICA6IG1heFxuICAgICAgICByZXR1cm4gdGhpcy5pc0ludGVnZXIgJiYgbWF4ICE9IG51bGwgPyBNYXRoLmNlaWwobWF4KSA6IG1heFxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgcmFuZ2U6IGdldFNjaGVtYUFjY2Vzc29yKCdyYW5nZScsIHtcbiAgICAgIHR5cGU6IEFycmF5LFxuICAgICAgZ2V0KCkge1xuICAgICAgICAvLyBgdGhpcy5taW5gLCBgdGhpcy5tYXhgIGFscmVhZHkgc3VwcG9ydCBgc2NoZW1hLnJhbmdlYCxcbiAgICAgICAgLy8gc28gcmVkaXJlY3QgdGhlcmUuXG4gICAgICAgIGNvbnN0IHsgbWluLCBtYXggfSA9IHRoaXNcbiAgICAgICAgcmV0dXJuIG1pbiAhPSBudWxsICYmIG1heCAhPSBudWxsID8gW21pbiwgbWF4XSA6IHVuZGVmaW5lZFxuICAgICAgfSxcblxuICAgICAgc2V0KHJhbmdlKSB7XG4gICAgICAgIC8vIFByb3ZpZGUgYSBzZXR0ZXIgdGhhdCBkZWxlZ2F0ZXMgdG8gYFt0aGlzLm1pbiwgdGhpcy5tYXhdYCxcbiAgICAgICAgLy8gc2luY2UgdGhvc2UgYWxyZWFkeSBoYW5kbGUgYHNjaGVtYS5yYW5nZWAuXG4gICAgICAgIGlmIChpc0FycmF5KHJhbmdlKSkge1xuICAgICAgICAgIDtbdGhpcy5taW4sIHRoaXMubWF4XSA9IHJhbmdlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBnZXRWYWxpZGF0aW9ucygpIHtcbiAgICAgIGNvbnN0IHZhbGlkYXRpb25zID0ge31cbiAgICAgIGNvbnN0IHsgcmFuZ2UsIG1pbiwgbWF4LCBkZWNpbWFscywgc3RlcCB9ID0gdGhpc1xuICAgICAgaWYgKHJhbmdlKSB7XG4gICAgICAgIHZhbGlkYXRpb25zLnJhbmdlID0gcmFuZ2VcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChtaW4gIT0gbnVsbCkge1xuICAgICAgICAgIHZhbGlkYXRpb25zLm1pbiA9IG1pblxuICAgICAgICB9XG4gICAgICAgIGlmIChtYXggIT0gbnVsbCkge1xuICAgICAgICAgIHZhbGlkYXRpb25zLm1heCA9IG1heFxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoZGVjaW1hbHMgIT0gbnVsbCkge1xuICAgICAgICB2YWxpZGF0aW9ucy5kZWNpbWFscyA9IGRlY2ltYWxzXG4gICAgICB9IGVsc2UgaWYgKHN0ZXApIHtcbiAgICAgICAgY29uc3QgZGVjaW1hbHMgPSAoYCR7c3RlcH1gLnNwbGl0KCcuJylbMV0gfHwgJycpLmxlbmd0aFxuICAgICAgICBpZiAoZGVjaW1hbHMgPiAwKSB7XG4gICAgICAgICAgdmFsaWRhdGlvbnMuZGVjaW1hbHMgPSBkZWNpbWFsc1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZhbGlkYXRpb25zLmludGVnZXIgPSB0cnVlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmlzSW50ZWdlcikge1xuICAgICAgICB2YWxpZGF0aW9ucy5pbnRlZ2VyID0gdHJ1ZVxuICAgICAgfVxuICAgICAgcmV0dXJuIHZhbGlkYXRpb25zXG4gICAgfVxuICB9XG59XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuSW5wdXRGaWVsZC5kaXRvLW51bWJlcihcbiAgOmlkPVwiZGF0YVBhdGhcIlxuICByZWY9XCJlbGVtZW50XCJcbiAgdi1tb2RlbD1cImlucHV0VmFsdWVcIlxuICB0eXBlPVwibnVtYmVyXCJcbiAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gIDptaW49XCJtaW5cIlxuICA6bWF4PVwibWF4XCJcbiAgOnN0ZXA9XCJzdGVwVmFsdWVcIlxuKVxuICB0ZW1wbGF0ZSgjYWZ0ZXIpXG4gICAgYnV0dG9uLmRpdG8tYnV0dG9uLWNsZWFyLmRpdG8tYnV0dG9uLW92ZXJsYXkoXG4gICAgICB2LWlmPVwic2hvd0NsZWFyQnV0dG9uXCJcbiAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICAgIEBjbGljay5zdG9wPVwiY2xlYXJcIlxuICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b1R5cGVDb21wb25lbnQgZnJvbSAnLi4vRGl0b1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgTnVtYmVyTWl4aW4gZnJvbSAnLi4vbWl4aW5zL051bWJlck1peGluLmpzJ1xuaW1wb3J0IHsgSW5wdXRGaWVsZCB9IGZyb20gJ0BkaXRvanMvdWkvc3JjJ1xuXG5leHBvcnQgZGVmYXVsdCBEaXRvVHlwZUNvbXBvbmVudC5yZWdpc3RlcihcbiAgWydudW1iZXInLCAnaW50ZWdlciddLFxuICAvLyBAdnVlL2NvbXBvbmVudFxuICB7XG4gICAgbWl4aW5zOiBbTnVtYmVyTWl4aW5dLFxuICAgIGNvbXBvbmVudHM6IHsgSW5wdXRGaWVsZCB9LFxuICAgIG5hdGl2ZUZpZWxkOiB0cnVlLFxuICAgIHRleHRGaWVsZDogdHJ1ZSxcblxuICAgIGNvbXB1dGVkOiB7XG4gICAgICBpc0ludGVnZXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnR5cGUgPT09ICdpbnRlZ2VyJ1xuICAgICAgfVxuICAgIH1cbiAgfVxuKVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuLy8gT25seSBzaG93IHNwaW4gYnV0dG9ucyBpZiB0aGUgbnVtYmVyIGNvbXBvbmVudCBkZWZpbmVzIGEgc3RlcCBzaXplLlxuaW5wdXRbdHlwZT0nbnVtYmVyJ106bm90KFtzdGVwXSkge1xuICAmOjotd2Via2l0LWlubmVyLXNwaW4tYnV0dG9uLFxuICAmOjotd2Via2l0LW91dGVyLXNwaW4tYnV0dG9uIHtcbiAgICAtd2Via2l0LWFwcGVhcmFuY2U6IG5vbmU7XG4gICAgbWFyZ2luOiAwO1xuICB9XG59XG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbi5kaXRvLW9iamVjdChcbiAgdi1pZj1cImlzUmVhZHlcIlxuICA6aWQ9XCJkYXRhUGF0aFwiXG4pXG4gIC5kaXRvLW9iamVjdC1jb250ZW50KFxuICAgIHYtaWY9XCJvYmplY3REYXRhXCJcbiAgKVxuICAgIC8vLSBTdXBwb3J0IHRoZSBzYW1lIHJlbmRlcmluZyBvcHRpb25zIGFzIFR5cGVMaXN0OlxuICAgIERpdG9TY2hlbWFJbmxpbmVkKFxuICAgICAgdi1pZj1cImlzSW5saW5lZFwiXG4gICAgICA6bGFiZWw9XCJvYmplY3RMYWJlbFwiXG4gICAgICA6c2NoZW1hPVwiZ2V0SXRlbUZvcm1TY2hlbWEoc2NoZW1hLCBvYmplY3REYXRhLCBjb250ZXh0KVwiXG4gICAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgICA6ZGF0YT1cIm9iamVjdERhdGFcIlxuICAgICAgOm1ldGE9XCJuZXN0ZWRNZXRhXCJcbiAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkIHx8IGlzTG9hZGluZ1wiXG4gICAgICA6Y29sbGFwc2VkPVwiY29sbGFwc2VkXCJcbiAgICAgIDpjb2xsYXBzaWJsZT1cImNvbGxhcHNpYmxlXCJcbiAgICAgIDpkZWxldGFibGU9XCJvYmplY3REYXRhICYmIGRlbGV0YWJsZVwiXG4gICAgICA6ZWRpdGFibGU9XCJvYmplY3REYXRhICYmIGVkaXRhYmxlXCJcbiAgICAgIDplZGl0UGF0aD1cInBhdGhcIlxuICAgICAgOmFjY3VtdWxhdGVkQmFzaXM9XCJhY2N1bXVsYXRlZEJhc2lzXCJcbiAgICAgIEBkZWxldGU9XCJkZWxldGVJdGVtKG9iamVjdERhdGEpXCJcbiAgICApXG4gICAgY29tcG9uZW50KFxuICAgICAgdi1lbHNlLWlmPVwic2NoZW1hLmNvbXBvbmVudFwiXG4gICAgICA6aXM9XCJzY2hlbWEuY29tcG9uZW50XCJcbiAgICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICAgIDpkYXRhPVwib2JqZWN0RGF0YVwiXG4gICAgICA6bmVzdGVkPVwiZmFsc2VcIlxuICAgIClcbiAgICBzcGFuKFxuICAgICAgdi1lbHNlLWlmPVwicmVuZGVyXCJcbiAgICAgIHYtaHRtbD1cInJlbmRlcihnZXRDb250ZXh0KCkpXCJcbiAgICApXG4gICAgc3BhbihcbiAgICAgIHYtZWxzZVxuICAgICAgdi1odG1sPVwiZ2V0SXRlbUxhYmVsKHNjaGVtYSwgb2JqZWN0RGF0YSlcIlxuICAgIClcbiAgLy8tIE5PVEU6IGBEaXRvRWRpdEJ1dHRvbnNgIGhlcmUgb25seSBoYW5kbGUgdGhlIGNyZWF0ZSBidXR0b24gb3V0c2lkZSBvZiB0aGVcbiAgLy8tIHNjaGVtYSwgdGhlIGVkaXQgYnV0dG9ucyBpbnNpZGUgYXJlIGhhbmRsZWQgYnkgYERpdG9TY2hlbWFJbmxpbmVkYC5cbiAgRGl0b0VkaXRCdXR0b25zKFxuICAgIDpidXR0b25zPVwiYnV0dG9uU2NoZW1hc1wiXG4gICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgIDpkYXRhPVwib2JqZWN0RGF0YVwiXG4gICAgOnBhdGg9XCJwYXRoXCJcbiAgICA6bWV0YT1cIm1ldGFcIlxuICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZCB8fCBpc0xvYWRpbmdcIlxuICAgIDpjcmVhdGFibGU9XCJjcmVhdGFibGVcIlxuICAgIDpjcmVhdGVQYXRoPVwicGF0aFwiXG4gIClcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b1R5cGVDb21wb25lbnQgZnJvbSAnLi4vRGl0b1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgRGl0b0NvbnRleHQgZnJvbSAnLi4vRGl0b0NvbnRleHQuanMnXG5pbXBvcnQgU291cmNlTWl4aW4gZnJvbSAnLi4vbWl4aW5zL1NvdXJjZU1peGluLmpzJ1xuaW1wb3J0IHsgcmVzb2x2ZVNjaGVtYUNvbXBvbmVudCB9IGZyb20gJy4uL3V0aWxzL3NjaGVtYS5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9UeXBlQ29tcG9uZW50LnJlZ2lzdGVyKCdvYmplY3QnLCB7XG4gIG1peGluczogW1NvdXJjZU1peGluXSxcblxuICBnZXRTb3VyY2VUeXBlKHR5cGUpIHtcbiAgICAvLyBObyBuZWVkIGZvciB0cmFuc2Zvcm1hdGlvbiBoZXJlLiBTZWUgVHlwZVRyZWVMaXN0IGZvciBkZXRhaWxzLlxuICAgIHJldHVybiB0eXBlXG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBvYmplY3RMYWJlbCgpIHtcbiAgICAgIC8vIE9ubHkgc2hvdyBhIGxhYmVsIGlmIHRoZSBvYmplY3QgaXMgY29sbGFwc2libGUuXG4gICAgICByZXR1cm4gdGhpcy5jb2xsYXBzaWJsZVxuICAgICAgICA/IHRoaXMuZ2V0SXRlbUxhYmVsKHRoaXMuc2NoZW1hLCB0aGlzLm9iamVjdERhdGEsIHsgYXNPYmplY3Q6IHRydWUgfSlcbiAgICAgICAgOiBudWxsXG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBnZXRDb250ZXh0KCkge1xuICAgICAgcmV0dXJuIG5ldyBEaXRvQ29udGV4dCh0aGlzLCB7IGRhdGE6IHRoaXMub2JqZWN0RGF0YSB9KVxuICAgIH1cbiAgfSxcblxuICBhc3luYyBwcm9jZXNzU2NoZW1hKFxuICAgIGFwaSxcbiAgICBzY2hlbWEsXG4gICAgbmFtZSxcbiAgICByb3V0ZXMsXG4gICAgbGV2ZWwsXG4gICAgbmVzdGVkID0gZmFsc2UsXG4gICAgZmxhdHRlbiA9IGZhbHNlLFxuICAgIHByb2Nlc3MgPSBudWxsXG4gICkge1xuICAgIGF3YWl0IFByb21pc2UuYWxsKFtcbiAgICAgIHJlc29sdmVTY2hlbWFDb21wb25lbnQoc2NoZW1hKSxcbiAgICAgIFNvdXJjZU1peGluLnByb2Nlc3NTY2hlbWEoXG4gICAgICAgIGFwaSxcbiAgICAgICAgc2NoZW1hLFxuICAgICAgICBuYW1lLFxuICAgICAgICByb3V0ZXMsXG4gICAgICAgIGxldmVsLFxuICAgICAgICBuZXN0ZWQsXG4gICAgICAgIGZsYXR0ZW4sXG4gICAgICAgIHByb2Nlc3NcbiAgICAgIClcbiAgICBdKVxuICB9XG59KVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLmRpdG8tb2JqZWN0IHtcbiAgZGlzcGxheTogZmxleDtcbiAgYm9yZGVyOiAkYm9yZGVyLXN0eWxlO1xuICBib3JkZXItcmFkaXVzOiAkYm9yZGVyLXJhZGl1cztcbiAgbWFyZ2luOiAwO1xuICBwYWRkaW5nOiAkZm9ybS1zcGFjaW5nO1xuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICBtaW4td2lkdGg6IG1pbi1jb250ZW50O1xuXG4gIC5kaXRvLW9iamVjdC1jb250ZW50IHtcbiAgICBmbGV4OiAwIDEgMTAwJTtcbiAgfVxuXG4gID4gLmRpdG8tZWRpdC1idXR0b25zIHtcbiAgICBmbGV4OiAxIDAgMCU7XG4gICAgbWFyZ2luLWxlZnQ6ICRmb3JtLXNwYWNpbmc7XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCI8c2NyaXB0PlxuaW1wb3J0IERpdG9UeXBlQ29tcG9uZW50IGZyb20gJy4uL0RpdG9UeXBlQ29tcG9uZW50LmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b1R5cGVDb21wb25lbnQucmVnaXN0ZXIoJ3BhbmVsJywge1xuICBkZWZhdWx0VmFsdWU6ICgpID0+IHVuZGVmaW5lZCwgLy8gQ2FsbGJhY2sgdG8gb3ZlcnJpZGUgYGRlZmF1bHRWYWx1ZTogbnVsbGBcbiAgZXhjbHVkZVZhbHVlOiB0cnVlLFxuICBnZW5lcmF0ZUxhYmVsOiBmYWxzZSxcbiAgb21pdFNwYWNpbmc6IHRydWUsXG5cbiAgZ2V0UGFuZWxTY2hlbWEoYXBpLCBzY2hlbWEpIHtcbiAgICAvLyBGb3IgYSBUeXBlUGFuZWwsIHRoZSBjb21wb25lbnQgc2NoZW1hIGlzIGFsc28gdGhlIHBhbmVsIHNjaGVtYSwgYnV0XG4gICAgLy8gcmVtb3ZlIHRoZSBhZGRlZCBuYW1lLCBzbyBpdCBkb2Vzbid0IGdldCBhcHBlbmRlZCB0d2ljZSB0byBkYXRhLXBhdGguXG4gICAgY29uc3QgeyBuYW1lLCAuLi5wYW5lbCB9ID0gc2NoZW1hXG4gICAgcmV0dXJuIHBhbmVsXG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG5wcm9ncmVzcy5kaXRvLXByb2dyZXNzKFxuICA6aWQ9XCJkYXRhUGF0aFwiXG4gIHJlZj1cImVsZW1lbnRcIlxuICA6dmFsdWU9XCJwcm9ncmVzc1ZhbHVlXCJcbiAgOm1heD1cInByb2dyZXNzTWF4XCJcbiAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4pXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9UeXBlQ29tcG9uZW50IGZyb20gJy4uL0RpdG9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IE51bWJlck1peGluIGZyb20gJy4uL21peGlucy9OdW1iZXJNaXhpbi5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9UeXBlQ29tcG9uZW50LnJlZ2lzdGVyKCdwcm9ncmVzcycsIHtcbiAgbWl4aW5zOiBbTnVtYmVyTWl4aW5dLFxuICBjb21wdXRlZDoge1xuICAgIHByb2dyZXNzVmFsdWUoKSB7XG4gICAgICBsZXQgeyB2YWx1ZSwgcmFuZ2UsIHN0ZXAgfSA9IHRoaXNcbiAgICAgIGlmICh2YWx1ZSAhPT0gbnVsbCkge1xuICAgICAgICBpZiAocmFuZ2UpIHtcbiAgICAgICAgICB2YWx1ZSAtPSByYW5nZVswXVxuICAgICAgICB9XG4gICAgICAgIGlmIChzdGVwKSB7XG4gICAgICAgICAgdmFsdWUgPSBNYXRoLnJvdW5kKHZhbHVlIC8gc3RlcCkgKiBzdGVwXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhbHVlID0gJydcbiAgICAgIH1cbiAgICAgIHJldHVybiB2YWx1ZVxuICAgIH0sXG5cbiAgICBwcm9ncmVzc01heCgpIHtcbiAgICAgIGNvbnN0IHsgcmFuZ2UgfSA9IHRoaXNcbiAgICAgIHJldHVybiByYW5nZSA/IHJhbmdlWzFdIC0gcmFuZ2VbMF0gOiBudWxsXG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxudWwuZGl0by1yYWRpby1idXR0b25zKFxuICA6aWQ9XCJkYXRhUGF0aFwiXG4gIDpjbGFzcz1cImBkaXRvLWxheW91dC0ke3NjaGVtYS5sYXlvdXQgfHwgJ3ZlcnRpY2FsJ31gXCJcbilcbiAgbGkoXG4gICAgdi1mb3I9XCJvcHRpb24gaW4gb3B0aW9uc1wiXG4gIClcbiAgICBsYWJlbFxuICAgICAgaW5wdXQuZGl0by1yYWRpby1idXR0b24oXG4gICAgICAgIHJlZj1cImVsZW1lbnRcIlxuICAgICAgICB2LW1vZGVsPVwic2VsZWN0ZWRWYWx1ZVwiXG4gICAgICAgIHR5cGU9XCJyYWRpb1wiXG4gICAgICAgIDp2YWx1ZT1cImdldFZhbHVlRm9yT3B0aW9uKG9wdGlvbilcIlxuICAgICAgICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgICAgIClcbiAgICAgIHwge3sgZ2V0TGFiZWxGb3JPcHRpb24ob3B0aW9uKSB9fVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvVHlwZUNvbXBvbmVudCBmcm9tICcuLi9EaXRvVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCBPcHRpb25zTWl4aW4gZnJvbSAnLi4vbWl4aW5zL09wdGlvbnNNaXhpbi5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9UeXBlQ29tcG9uZW50LnJlZ2lzdGVyKCdyYWRpbycsIHtcbiAgbWl4aW5zOiBbT3B0aW9uc01peGluXSxcblxuICBuYXRpdmVGaWVsZDogdHJ1ZSxcbiAgZGVmYXVsdFdpZHRoOiAnYXV0bydcbn0pXG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by1yYWRpby1idXR0b25zIHtcbiAgbGFiZWwge1xuICAgIEBleHRlbmQgJWlucHV0LWJvcmRlcmxlc3M7XG4gIH1cblxuICAuZGl0by1yYWRpby1idXR0b24ge1xuICAgIG1hcmdpbi1yaWdodDogJGZvcm0tc3BhY2luZztcbiAgfVxufVxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4uZGl0by1zZWN0aW9uKDpjbGFzcz1cInsgJ2RpdG8tc2VjdGlvbi0tbGFiZWxsZWQnOiBoYXNMYWJlbCB9XCIpXG4gIERpdG9TY2hlbWFJbmxpbmVkLmRpdG8tc2VjdGlvbl9fc2NoZW1hKFxuICAgIDpsYWJlbD1cImxhYmVsXCJcbiAgICA6c2NoZW1hPVwiZ2V0SXRlbUZvcm1TY2hlbWEoc2NoZW1hLCBpdGVtLCBjb250ZXh0KVwiXG4gICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgIDpkYXRhPVwiaXRlbVwiXG4gICAgOm1ldGE9XCJtZXRhXCJcbiAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgOnBhZGRpbmc9XCJoYXNMYWJlbCA/ICduZXN0ZWQnIDogJ2lubGluZWQnXCJcbiAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgOmNvbGxhcHNlZD1cImNvbGxhcHNlZFwiXG4gICAgOmNvbGxhcHNpYmxlPVwiY29sbGFwc2libGVcIlxuICAgIDpsYWJlbE5vZGU9XCJsYWJlbE5vZGVcIlxuICApXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9UeXBlQ29tcG9uZW50IGZyb20gJy4uL0RpdG9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IHsgZ2V0U2NoZW1hQWNjZXNzb3IgfSBmcm9tICcuLi91dGlscy9hY2Nlc3Nvci5qcydcbmltcG9ydCB7IGdldEl0ZW1Gb3JtU2NoZW1hLCBwcm9jZXNzU2NoZW1hQ29tcG9uZW50cyB9IGZyb20gJy4uL3V0aWxzL3NjaGVtYS5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9UeXBlQ29tcG9uZW50LnJlZ2lzdGVyKCdzZWN0aW9uJywge1xuICBkZWZhdWx0VmFsdWU6ICgpID0+IHVuZGVmaW5lZCwgLy8gQ2FsbGJhY2sgdG8gb3ZlcnJpZGUgYGRlZmF1bHRWYWx1ZTogbnVsbGBcbiAgaWdub3JlTWlzc2luZ1ZhbHVlOiBzY2hlbWEgPT4gIXNjaGVtYS5uZXN0ZWQgJiYgISgnZGVmYXVsdCcgaW4gc2NoZW1hKSxcbiAgZGVmYXVsdE5lc3RlZDogZmFsc2UsXG4gIGdlbmVyYXRlTGFiZWw6IGZhbHNlLFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgaXRlbSgpIHtcbiAgICAgIHJldHVybiB0aGlzLm5lc3RlZCA/IHRoaXMudmFsdWUgOiB0aGlzLmRhdGFcbiAgICB9LFxuXG4gICAgaGFzTGFiZWwoKSB7XG4gICAgICByZXR1cm4gISF0aGlzLnNjaGVtYS5sYWJlbFxuICAgIH0sXG5cbiAgICBjb2xsYXBzaWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ2NvbGxhcHNpYmxlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IG51bGwsIC8vIHNvIHRoYXQgYD8/YCBiZWxvdyBjYW4gZG8gaXRzIHRoaW5nOlxuICAgICAgZ2V0KGNvbGxhcHNpYmxlKSB7XG4gICAgICAgIHJldHVybiAhIShjb2xsYXBzaWJsZSA/PyB0aGlzLmNvbGxhcHNlZCAhPT0gbnVsbClcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIGNvbGxhcHNlZDogZ2V0U2NoZW1hQWNjZXNzb3IoJ2NvbGxhcHNlZCcsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBudWxsXG4gICAgfSlcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZ2V0SXRlbUZvcm1TY2hlbWFcbiAgfSxcblxuICBhc3luYyBwcm9jZXNzU2NoZW1hKGFwaSwgc2NoZW1hLCBuYW1lLCByb3V0ZXMsIGxldmVsKSB7XG4gICAgLy8gUHJvY2VzcyBzZWN0aW9uIGNvbXBvbmVudHMgc28gdGhlaXIgZm9ybXMgZ2V0IHJlc29sdmVkIHRvby5cbiAgICBhd2FpdCBwcm9jZXNzU2NoZW1hQ29tcG9uZW50cyhhcGksIHNjaGVtYSwgcm91dGVzLCBsZXZlbClcbiAgfVxufSlcbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5cbi5kaXRvLXNlY3Rpb24ge1xuICAmLS1sYWJlbGxlZCB7XG4gICAgYm9yZGVyOiAkYm9yZGVyLXdpZHRoIHNvbGlkIHRyYW5zcGFyZW50O1xuICAgIGJvcmRlci1yYWRpdXM6ICRib3JkZXItcmFkaXVzO1xuICAgIHRyYW5zaXRpb246IGJvcmRlci1jb2xvciAwLjJzICRlYXNlLW91dC1xdWFydDtcbiAgICBtYXJnaW4tdG9wOiAkZm9ybS1zcGFjaW5nLWhhbGY7XG5cbiAgICAmOmhhcyguZGl0by1zY2hlbWEtLW9wZW4pIHtcbiAgICAgIGJvcmRlci1jb2xvcjogJGJvcmRlci1jb2xvcjtcbiAgICB9XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuLy8tIE5lc3RpbmcgaXMgbmVlZGVkIHRvIG1ha2UgYW4gYXJyb3cgYXBwZWFyIG92ZXIgdGhlIHNlbGVjdCBpdGVtOlxuLmRpdG8tc2VsZWN0XG4gIC5kaXRvLXNlbGVjdF9faW5uZXJcbiAgICBzZWxlY3QoXG4gICAgICA6aWQ9XCJkYXRhUGF0aFwiXG4gICAgICByZWY9XCJlbGVtZW50XCJcbiAgICAgIHYtbW9kZWw9XCJzZWxlY3RlZFZhbHVlXCJcbiAgICAgIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICAgICAgQG1vdXNlZG93bj1cInBvcHVsYXRlID0gdHJ1ZVwiXG4gICAgICBAZm9jdXM9XCJwb3B1bGF0ZSA9IHRydWVcIlxuICAgIClcbiAgICAgIHRlbXBsYXRlKFxuICAgICAgICB2LWlmPVwicG9wdWxhdGVcIlxuICAgICAgKVxuICAgICAgICB0ZW1wbGF0ZShcbiAgICAgICAgICB2LWZvcj1cIm9wdGlvbiBpbiBvcHRpb25zXCJcbiAgICAgICAgKVxuICAgICAgICAgIG9wdGdyb3VwKFxuICAgICAgICAgICAgdi1pZj1cImdyb3VwQnlcIlxuICAgICAgICAgICAgOmxhYmVsPVwib3B0aW9uW2dyb3VwQnlMYWJlbF1cIlxuICAgICAgICAgIClcbiAgICAgICAgICAgIG9wdGlvbihcbiAgICAgICAgICAgICAgdi1mb3I9XCJvcHQgaW4gb3B0aW9uW2dyb3VwQnlPcHRpb25zXVwiXG4gICAgICAgICAgICAgIDp2YWx1ZT1cImdldFZhbHVlRm9yT3B0aW9uKG9wdClcIlxuICAgICAgICAgICAgKSB7eyBnZXRMYWJlbEZvck9wdGlvbihvcHQpIH19XG4gICAgICAgICAgb3B0aW9uKFxuICAgICAgICAgICAgdi1lbHNlXG4gICAgICAgICAgICA6dmFsdWU9XCJnZXRWYWx1ZUZvck9wdGlvbihvcHRpb24pXCJcbiAgICAgICAgICApIHt7IGdldExhYmVsRm9yT3B0aW9uKG9wdGlvbikgfX1cbiAgICAgIHRlbXBsYXRlKFxuICAgICAgICB2LWVsc2UtaWY9XCJzZWxlY3RlZE9wdGlvblwiXG4gICAgICApXG4gICAgICAgIG9wdGlvbig6dmFsdWU9XCJzZWxlY3RlZFZhbHVlXCIpIHt7IGdldExhYmVsRm9yT3B0aW9uKHNlbGVjdGVkT3B0aW9uKSB9fVxuICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbi1jbGVhci5kaXRvLWJ1dHRvbi1vdmVybGF5KFxuICAgICAgdi1pZj1cInNob3dDbGVhckJ1dHRvblwiXG4gICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgICBAY2xpY2s9XCJjbGVhclwiXG4gICAgKVxuICAvLy0gRWRpdCBidXR0b24gaXMgbmV2ZXIgZGlzYWJsZWQsIGV2ZW4gaWYgdGhlIGZpZWxkIGlzIGRpc2FibGVkLlxuICBEaXRvRWRpdEJ1dHRvbnMoXG4gICAgdi1pZj1cImVkaXRhYmxlXCJcbiAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgOmRhdGE9XCJkYXRhXCJcbiAgICA6bWV0YT1cIm1ldGFcIlxuICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICA6ZGlzYWJsZWQ9XCJmYWxzZVwiXG4gICAgOmVkaXRhYmxlPVwiZWRpdGFibGVcIlxuICAgIDplZGl0UGF0aD1cImVkaXRQYXRoXCJcbiAgKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvVHlwZUNvbXBvbmVudCBmcm9tICcuLi9EaXRvVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCBPcHRpb25zTWl4aW4gZnJvbSAnLi4vbWl4aW5zL09wdGlvbnNNaXhpbi5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9UeXBlQ29tcG9uZW50LnJlZ2lzdGVyKCdzZWxlY3QnLCB7XG4gIG1peGluczogW09wdGlvbnNNaXhpbl0sXG5cbiAgbmF0aXZlRmllbGQ6IHRydWUsXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgLy8gRGlzYWJsZSBsYXp5LXBvcHVsYXRpb24gZm9yIG5vdy5cbiAgICAgIC8vIFRPRE86IFNldCB0byBgZmFsc2VgIE9uY2UgbGluZXRvIGUyZSB0ZXN0cyBhZGRyZXNzIHRoZWlyIGlzc3Vlcy5cbiAgICAgIHBvcHVsYXRlOiB0cnVlXG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLy8gVE9ETzogTW92ZSB0byBkaXRvLXVpXG4kc2VsZWN0LWFycm93LXJpZ2h0OiBjYWxjKCgkc2VsZWN0LWFycm93LXdpZHRoIC0gJHNlbGVjdC1hcnJvdy1zaXplKSAvIDIpO1xuXG4uZGl0by1zZWxlY3Qge1xuICBkaXNwbGF5OiBpbmxpbmUtZmxleDtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuXG4gIHNlbGVjdCB7XG4gICAgQGV4dGVuZCAlaW5wdXQ7XG5cbiAgICBwYWRkaW5nLXJpZ2h0OiAkc2VsZWN0LWFycm93LXdpZHRoO1xuICB9XG5cbiAgLy8gYCZfX19pbm5lcmAgaXMgbmVlZGVkIHRvIG1ha2UgdGhlIGVkaXQgYnV0dG9ucyBhcHBlYXIgdG8gdGhlIHJpZ2h0IG9mIHRoZVxuICAvLyBzZWxlY3Q6XG4gICZfX2lubmVyIHtcbiAgICBmbGV4OiAxO1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcblxuICAgICY6OmJlZm9yZSB7XG4gICAgICBAaW5jbHVkZSBhcnJvdygkc2VsZWN0LWFycm93LXNpemUpO1xuXG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICBib3R0b206ICRzZWxlY3QtYXJyb3ctYm90dG9tO1xuICAgICAgcmlnaHQ6IGNhbGMoI3skc2VsZWN0LWFycm93LXJpZ2h0fSArICN7JGJvcmRlci13aWR0aH0pO1xuICAgIH1cbiAgfVxuXG4gIC5kaXRvLWVkaXQtYnV0dG9ucyB7XG4gICAgbWFyZ2luLWxlZnQ6ICRmb3JtLXNwYWNpbmctaGFsZjtcbiAgfVxuXG4gIC8vIEhhbmRsZSAuZGl0by13aWR0aC1maWxsIHNlcGFyYXRlbHkgZHVlIHRvIHJlcXVpcmVkIG5lc3Rpbmcgb2Ygc2VsZWN0OlxuICAmLmRpdG8td2lkdGgtZmlsbCB7XG4gICAgc2VsZWN0IHtcbiAgICAgIHdpZHRoOiAxMDAlO1xuICAgIH1cbiAgfVxuXG4gICYuZGl0by1kaXNhYmxlZDo6YWZ0ZXIge1xuICAgIGJvcmRlci1jb2xvcjogJGJvcmRlci1jb2xvcjtcbiAgfVxufVxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4uZGl0by1zbGlkZXJcbiAgaW5wdXQuZGl0by1yYW5nZShcbiAgICA6aWQ9XCJkYXRhUGF0aFwiXG4gICAgcmVmPVwiZWxlbWVudFwiXG4gICAgdi1tb2RlbD1cImlucHV0VmFsdWVcIlxuICAgIHR5cGU9XCJyYW5nZVwiXG4gICAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gICAgOm1pbj1cIm1pblwiXG4gICAgOm1heD1cIm1heFwiXG4gICAgOnN0ZXA9XCJzdGVwVmFsdWVcIlxuICApXG4gIElucHV0RmllbGQuZGl0by1udW1iZXIoXG4gICAgdi1pZj1cImlucHV0XCJcbiAgICB2LW1vZGVsPVwiaW5wdXRWYWx1ZVwiXG4gICAgdHlwZT1cIm51bWJlclwiXG4gICAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gICAgOm1pbj1cIm1pblwiXG4gICAgOm1heD1cIm1heFwiXG4gICAgOnN0ZXA9XCJzdGVwVmFsdWVcIlxuICApXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9UeXBlQ29tcG9uZW50IGZyb20gJy4uL0RpdG9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IE51bWJlck1peGluIGZyb20gJy4uL21peGlucy9OdW1iZXJNaXhpbi5qcydcbmltcG9ydCB7IGdldFNjaGVtYUFjY2Vzc29yIH0gZnJvbSAnLi4vdXRpbHMvYWNjZXNzb3IuanMnXG5pbXBvcnQgeyBJbnB1dEZpZWxkIH0gZnJvbSAnQGRpdG9qcy91aS9zcmMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvVHlwZUNvbXBvbmVudC5yZWdpc3Rlcignc2xpZGVyJywge1xuICBtaXhpbnM6IFtOdW1iZXJNaXhpbl0sXG4gIGNvbXBvbmVudHM6IHsgSW5wdXRGaWVsZCB9LFxuICBuYXRpdmVGaWVsZDogdHJ1ZSxcblxuICBjb21wdXRlZDoge1xuICAgIC8vIFRPRE86IFJlbmFtZSB0byBgc2hvd0lucHV0YD9cbiAgICBpbnB1dDogZ2V0U2NoZW1hQWNjZXNzb3IoJ2lucHV0Jywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IHRydWVcbiAgICB9KVxuICB9XG59KVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLmRpdG8tc2xpZGVyIHtcbiAgQGV4dGVuZCAlaW5wdXQ7XG5cbiAgZGlzcGxheTogZmxleDtcblxuICAuZGl0by1yYW5nZSB7XG4gICAgZmxleDogYXV0bztcbiAgICBoZWlnaHQ6IGNhbGMoMWVtICogdmFyKC0tbGluZS1oZWlnaHQpKTtcbiAgfVxuXG4gIC5kaXRvLW51bWJlciB7XG4gICAgYm9yZGVyOiAwO1xuICAgIHBhZGRpbmc6IDA7XG4gICAgdGV4dC1hbGlnbjogcmlnaHQ7XG4gICAgZm9udC12YXJpYW50LW51bWVyaWM6IHRhYnVsYXItbnVtcztcbiAgfVxufVxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG5Td2l0Y2hCdXR0b24uZGl0by1zd2l0Y2goXG4gIDppZD1cImRhdGFQYXRoXCJcbiAgcmVmPVwiZWxlbWVudFwiXG4gIHYtbW9kZWw9XCJ2YWx1ZVwiXG4gIDpsYWJlbHM9XCJsYWJlbHNcIlxuICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbilcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b1R5cGVDb21wb25lbnQgZnJvbSAnLi4vRGl0b1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgeyBTd2l0Y2hCdXR0b24gfSBmcm9tICdAZGl0b2pzL3VpL3NyYydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9UeXBlQ29tcG9uZW50LnJlZ2lzdGVyKCdzd2l0Y2gnLCB7XG4gIGRlZmF1bHRWYWx1ZTogZmFsc2UsXG4gIGRlZmF1bHRXaWR0aDogJ2F1dG8nLFxuXG4gIGNvbXBvbmVudHM6IHtcbiAgICBTd2l0Y2hCdXR0b25cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIGxhYmVscygpIHtcbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYS5sYWJlbHNcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by1zd2l0Y2gge1xuICAuZGl0by1zd2l0Y2gtbGFiZWwge1xuICAgIGZvbnQtc2l6ZTogJGZvbnQtc2l6ZS1zbWFsbDtcbiAgfVxufVxuPC9zdHlsZT5cbiIsImltcG9ydCB7IGlzU3RyaW5nIH0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCB7IGdldERlZmF1bHRWYWx1ZSB9IGZyb20gJy4uL3V0aWxzL3NjaGVtYS5qcydcbmltcG9ydCB7IGdldFNjaGVtYUFjY2Vzc29yIH0gZnJvbSAnLi4vdXRpbHMvYWNjZXNzb3IuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCB7XG4gIGNvbXB1dGVkOiB7XG4gICAgdHJpbTogZ2V0U2NoZW1hQWNjZXNzb3IoJ3RyaW0nLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9KVxuICB9LFxuXG4gIHByb2Nlc3NWYWx1ZShzY2hlbWEsIHZhbHVlKSB7XG4gICAgaWYgKHNjaGVtYS50cmltICYmIHZhbHVlICE9IG51bGwgJiYgaXNTdHJpbmcodmFsdWUpKSB7XG4gICAgICAvLyBUZXh0IGZpZWxkcyBkb24ndCBuZWNlc3NhcmlseSBoYXZlIGEgYFN0cmluZ2AgdmFsdWUgd2hlbiBgZm9ybWF0KClgXG4gICAgICAvLyB3aXRob3V0IGBwYXJzZSgpYCBpcyB1c2VkLlxuICAgICAgdmFsdWUgPSB2YWx1ZS50cmltKClcbiAgICB9XG4gICAgaWYgKHZhbHVlID09PSAnJykge1xuICAgICAgdmFsdWUgPSBnZXREZWZhdWx0VmFsdWUoc2NoZW1hKVxuICAgIH1cbiAgICByZXR1cm4gdmFsdWVcbiAgfVxufVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbklucHV0RmllbGQuZGl0by10ZXh0KFxuICA6aWQ9XCJkYXRhUGF0aFwiXG4gIHJlZj1cImVsZW1lbnRcIlxuICB2LW1vZGVsPVwiaW5wdXRWYWx1ZVwiXG4gIDp0eXBlPVwiaW5wdXRUeXBlXCJcbiAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4pXG4gIHRlbXBsYXRlKCNhZnRlcilcbiAgICBidXR0b24uZGl0by1idXR0b24tY2xlYXIuZGl0by1idXR0b24tb3ZlcmxheShcbiAgICAgIHYtaWY9XCJzaG93Q2xlYXJCdXR0b25cIlxuICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgICAgQGNsaWNrLnN0b3A9XCJjbGVhclwiXG4gICAgKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvVHlwZUNvbXBvbmVudCBmcm9tICcuLi9EaXRvVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCBUZXh0TWl4aW4gZnJvbSAnLi4vbWl4aW5zL1RleHRNaXhpbidcbmltcG9ydCB7IElucHV0RmllbGQgfSBmcm9tICdAZGl0b2pzL3VpL3NyYydcblxuY29uc3QgbWFza2VkUGFzc3dvcmQgPSAnKioqKioqKioqKioqKioqKidcblxuZXhwb3J0IGRlZmF1bHQgRGl0b1R5cGVDb21wb25lbnQucmVnaXN0ZXIoXG4gIFtcbiAgICAndGV4dCcsXG4gICAgJ2VtYWlsJyxcbiAgICAndXJsJyxcbiAgICAnaG9zdG5hbWUnLFxuICAgICdkb21haW4nLFxuICAgICd0ZWwnLFxuICAgICdwYXNzd29yZCcsXG4gICAgJ2NyZWRpdGNhcmQnXG4gIF0sXG4gIC8vIEB2dWUvY29tcG9uZW50XG4gIHtcbiAgICBtaXhpbnM6IFtUZXh0TWl4aW5dLFxuICAgIGNvbXBvbmVudHM6IHsgSW5wdXRGaWVsZCB9LFxuICAgIG5hdGl2ZUZpZWxkOiB0cnVlLFxuICAgIHRleHRGaWVsZDogdHJ1ZSxcbiAgICBpZ25vcmVNaXNzaW5nVmFsdWU6IHNjaGVtYSA9PiBzY2hlbWEudHlwZSA9PT0gJ3Bhc3N3b3JkJyxcblxuICAgIGNvbXB1dGVkOiB7XG4gICAgICBpbnB1dFR5cGUoKSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAge1xuICAgICAgICAgICAgY3JlZGl0Y2FyZDogJ3RleHQnLFxuICAgICAgICAgICAgaG9zdG5hbWU6ICd0ZXh0JyxcbiAgICAgICAgICAgIGRvbWFpbjogJ3RleHQnXG4gICAgICAgICAgfVt0aGlzLnR5cGVdIHx8XG4gICAgICAgICAgdGhpcy50eXBlXG4gICAgICAgIClcbiAgICAgIH0sXG5cbiAgICAgIGlucHV0VmFsdWU6IHtcbiAgICAgICAgZ2V0KCkge1xuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICB0aGlzLnR5cGUgPT09ICdwYXNzd29yZCcgJiZcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICAgIXRoaXMuZm9jdXNlZFxuICAgICAgICAgIClcbiAgICAgICAgICAgID8gbWFza2VkUGFzc3dvcmRcbiAgICAgICAgICAgIDogdGhpcy52YWx1ZVxuICAgICAgICB9LFxuXG4gICAgICAgIHNldCh2YWx1ZSkge1xuICAgICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIG1ldGhvZHM6IHtcbiAgICAgIGdldFZhbGlkYXRpb25zKCkge1xuICAgICAgICBjb25zdCBydWxlID0ge1xuICAgICAgICAgIGVtYWlsOiAnZW1haWwnLFxuICAgICAgICAgIHVybDogJ3VybCcsXG4gICAgICAgICAgaG9zdG5hbWU6ICdob3N0bmFtZScsXG4gICAgICAgICAgZG9tYWluOiAnZG9tYWluJyxcbiAgICAgICAgICBwYXNzd29yZDogJ3Bhc3N3b3JkJyxcbiAgICAgICAgICBjcmVkaXRjYXJkOiAnY3JlZGl0Y2FyZCdcbiAgICAgICAgfVt0aGlzLnR5cGVdXG4gICAgICAgIHJldHVybiBydWxlID8geyBbcnVsZV06IHRydWUgfSA6IHt9XG4gICAgICB9XG4gICAgfVxuICB9XG4pXG48L3NjcmlwdD5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG50ZXh0YXJlYS5kaXRvLXRleHRhcmVhLmRpdG8taW5wdXQoXG4gIDppZD1cImRhdGFQYXRoXCJcbiAgcmVmPVwiZWxlbWVudFwiXG4gIHYtbW9kZWw9XCJ2YWx1ZVwiXG4gIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICA6cm93cz1cImxpbmVzXCJcbiAgOmNsYXNzPVwieyAnZGl0by1yZXNpemFibGUnOiByZXNpemFibGUgfVwiXG4pXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9UeXBlQ29tcG9uZW50IGZyb20gJy4uL0RpdG9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IFRleHRNaXhpbiBmcm9tICcuLi9taXhpbnMvVGV4dE1peGluJ1xuaW1wb3J0IHsgZ2V0U2NoZW1hQWNjZXNzb3IgfSBmcm9tICcuLi91dGlscy9hY2Nlc3Nvci5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9UeXBlQ29tcG9uZW50LnJlZ2lzdGVyKCd0ZXh0YXJlYScsIHtcbiAgbWl4aW5zOiBbVGV4dE1peGluXSxcbiAgbmF0aXZlRmllbGQ6IHRydWUsXG4gIHRleHRGaWVsZDogdHJ1ZSxcblxuICBjb21wdXRlZDoge1xuICAgIGxpbmVzKCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hLmxpbmVzIHx8IDRcbiAgICB9LFxuXG4gICAgcmVzaXphYmxlOiBnZXRTY2hlbWFBY2Nlc3NvcigncmVzaXphYmxlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfSlcbiAgfVxufSlcbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5cbi5kaXRvLXRleHRhcmVhIHtcbiAgZGlzcGxheTogYmxvY2s7XG4gIHJlc2l6ZTogbm9uZTtcbiAgbWluLWhlaWdodDogY2FsYygxZW0gKiB2YXIoLS1saW5lLWhlaWdodCkgKyAjezIgKiAkaW5wdXQtcGFkZGluZy12ZXJ9KTtcblxuICAmLmRpdG8tcmVzaXphYmxlIHtcbiAgICByZXNpemU6IHZlcnRpY2FsO1xuICB9XG59XG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbi5kaXRvLXRyZWUtbGlzdFxuICBEaXRvU2NvcGVzKFxuICAgIHYtaWY9XCJzY29wZXNcIlxuICAgIDpxdWVyeT1cInF1ZXJ5XCJcbiAgICA6c2NvcGVzPVwic2NvcGVzXCJcbiAgKVxuICAuZGl0by10cmVlLXBhbmVsXG4gICAgRGl0b1RyZWVJdGVtKFxuICAgICAgOnNjaGVtYT1cInRyZWVTY2hlbWFcIlxuICAgICAgOmRhdGFQYXRoPVwidHJlZURhdGFQYXRoXCJcbiAgICAgIDpkYXRhPVwidHJlZURhdGFcIlxuICAgICAgOmRyYWdnYWJsZT1cImRyYWdnYWJsZVwiXG4gICAgICA6b3Blbj1cInRydWVcIlxuICAgIClcbiAgICAuZGl0by10cmVlLWZvcm0tY29udGFpbmVyKFxuICAgICAgdi1pZj1cImhhc0VkaXRhYmxlRm9ybXNcIlxuICAgIClcbiAgICAgIC8vLSBJbmNsdWRlIGEgcm91dGVyLXZpZXcgZm9yIHRoZSBvcHRpb25hbCBEaXRvRm9ybUlubGluZWRcbiAgICAgIFJvdXRlclZpZXdcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b1R5cGVDb21wb25lbnQgZnJvbSAnLi4vRGl0b1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgU291cmNlTWl4aW4gZnJvbSAnLi4vbWl4aW5zL1NvdXJjZU1peGluLmpzJ1xuaW1wb3J0IHtcbiAgaGFzRm9ybVNjaGVtYSxcbiAgZ2V0Rm9ybVNjaGVtYXMsXG4gIHJlc29sdmVTY2hlbWFDb21wb25lbnRzXG59IGZyb20gJy4uL3V0aWxzL3NjaGVtYS5qcydcblxuZXhwb3J0IGRlZmF1bHQgRGl0b1R5cGVDb21wb25lbnQucmVnaXN0ZXIoXG4gIFsndHJlZS1saXN0JywgJ3RyZWUtb2JqZWN0J10sXG4gIC8vIEB2dWUvY29tcG9uZW50XG4gIHtcbiAgICBtaXhpbnM6IFtTb3VyY2VNaXhpbl0sXG5cbiAgICBwcm92aWRlKCkge1xuICAgICAgcmV0dXJuIHsgY29udGFpbmVyOiB0aGlzIH1cbiAgICB9LFxuXG4gICAgZ2V0U291cmNlVHlwZSh0eXBlKSB7XG4gICAgICByZXR1cm4gdHlwZSA9PT0gJ3RyZWUtb2JqZWN0JyA/ICdvYmplY3QnIDogJ2xpc3QnXG4gICAgfSxcblxuICAgIGNvbXB1dGVkOiB7XG4gICAgICBwYXRoKCkge1xuICAgICAgICAvLyBBY2Nlc3NlZCBmcm9tIERpdG9UcmVlSXRlbSB0aHJvdWdoIGBjb250YWluZXIucGF0aGA6XG4gICAgICAgIHJldHVybiB0aGlzLmZvcm1Db21wb25lbnQ/LnBhdGhcbiAgICAgIH0sXG5cbiAgICAgIGVkaXRQYXRoKCkge1xuICAgICAgICAvLyBBY2Nlc3NlZCBmcm9tIERpdG9UcmVlSXRlbSB0aHJvdWdoIGBjb250YWluZXIuZWRpdFBhdGhgOlxuICAgICAgICByZXR1cm4gdGhpcy4kcm91dGUucGF0aC5zbGljZSh0aGlzLnBhdGg/Lmxlbmd0aClcbiAgICAgIH0sXG5cbiAgICAgIHRyZWVEYXRhKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5pc0xpc3RTb3VyY2VcbiAgICAgICAgICA/IHsgW3RoaXMubmFtZV06IHRoaXMudmFsdWUgfVxuICAgICAgICAgIDogdGhpcy52YWx1ZVxuICAgICAgfSxcblxuICAgICAgdHJlZURhdGFQYXRoKCkge1xuICAgICAgICAvLyBSZW1vdmUgYG5hbWVgIGZyb20gYGRhdGFQYXRoYCwgYXMgaXQgaXMgYWRkZWRcbiAgICAgICAgLy8gdG8gYHRyZWVEYXRhYCBhbmQgYHRyZWVTY2hlbWFgXG4gICAgICAgIHJldHVybiB0aGlzLmlzTGlzdFNvdXJjZVxuICAgICAgICAgID8gdGhpcy5kYXRhUGF0aC5zbGljZSgwLCB0aGlzLmRhdGFQYXRoLmxlbmd0aCAtIHRoaXMubmFtZS5sZW5ndGgpXG4gICAgICAgICAgOiB0aGlzLmRhdGFQYXRoXG4gICAgICB9LFxuXG4gICAgICB0cmVlU2NoZW1hKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5pc0xpc3RTb3VyY2VcbiAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgY2hpbGRyZW46IHtcbiAgICAgICAgICAgICAgICBuYW1lOiB0aGlzLm5hbWUsXG4gICAgICAgICAgICAgICAgLi4udGhpcy5zY2hlbWFcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIDogdGhpcy5zY2hlbWFcbiAgICAgIH0sXG5cbiAgICAgIGhhc0VkaXRhYmxlRm9ybXMoKSB7XG4gICAgICAgIGNvbnN0IGhhc0VkaXRhYmxlRm9ybXMgPSBzY2hlbWEgPT4ge1xuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICBoYXNGb3JtU2NoZW1hKHNjaGVtYSkgJiYgKFxuICAgICAgICAgICAgICB0aGlzLmdldFNjaGVtYVZhbHVlKCdlZGl0YWJsZScsIHtcbiAgICAgICAgICAgICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgIHNjaGVtYVxuICAgICAgICAgICAgICB9KSB8fFxuICAgICAgICAgICAgICBzY2hlbWEuY2hpbGRyZW4gJiZcbiAgICAgICAgICAgICAgaGFzRWRpdGFibGVGb3JtcyhzY2hlbWEuY2hpbGRyZW4pXG4gICAgICAgICAgICApXG4gICAgICAgICAgKVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBoYXNFZGl0YWJsZUZvcm1zKHRoaXMuc2NoZW1hKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBhc3luYyBwcm9jZXNzU2NoZW1hKFxuICAgICAgYXBpLFxuICAgICAgc2NoZW1hLFxuICAgICAgbmFtZSxcbiAgICAgIHJvdXRlcyxcbiAgICAgIGxldmVsLFxuICAgICAgbmVzdGVkID0gdHJ1ZSxcbiAgICAgIGZsYXR0ZW4gPSBmYWxzZSxcbiAgICAgIHByb2Nlc3MgPSBudWxsXG4gICAgKSB7XG4gICAgICBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgICAgIHJlc29sdmVTY2hlbWFDb21wb25lbnRzKHNjaGVtYS5wcm9wZXJ0aWVzKSxcbiAgICAgICAgU291cmNlTWl4aW4ucHJvY2Vzc1NjaGVtYShcbiAgICAgICAgICBhcGksXG4gICAgICAgICAgc2NoZW1hLFxuICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgcm91dGVzLFxuICAgICAgICAgIGxldmVsLFxuICAgICAgICAgIG5lc3RlZCxcbiAgICAgICAgICBmbGF0dGVuLFxuICAgICAgICAgIC8vIFBhc3MgcHJvY2VzcygpIHRvIGFkZCBtb3JlIHJvdXRlcyB0byBjaGlsZFJvdXRlczpcbiAgICAgICAgICAoY2hpbGRSb3V0ZXMsIGxldmVsKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB7IGNoaWxkcmVuIH0gPSBzY2hlbWFcbiAgICAgICAgICAgIGlmIChjaGlsZHJlbikge1xuICAgICAgICAgICAgICAvLyBBZGQgYHR5cGVgIHRvIHRoZSBuZXN0ZWQgdHJlZSBsaXN0LlxuICAgICAgICAgICAgICBjaGlsZHJlbi50eXBlID0gJ3RyZWUtbGlzdCdcbiAgICAgICAgICAgICAgLy8gUmVjdXJzaXZlbHkgY2FsbCBgcHJvY2Vzc1NjaGVtYSgpYCBmb3IgdGhlIG5lc3RlZCB0cmVlIGxpc3Q6XG4gICAgICAgICAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NTY2hlbWEoXG4gICAgICAgICAgICAgICAgYXBpLFxuICAgICAgICAgICAgICAgIGNoaWxkcmVuLFxuICAgICAgICAgICAgICAgIGNoaWxkcmVuLm5hbWUsXG4gICAgICAgICAgICAgICAgY2hpbGRSb3V0ZXMsXG4gICAgICAgICAgICAgICAgbGV2ZWwsXG4gICAgICAgICAgICAgICAgbmVzdGVkLFxuICAgICAgICAgICAgICAgIHRydWUsIC8vIFBhc3MgYHRydWVgIGZvciBgZmxhdHRlbmAgaW4gdHJlZSBsaXN0cy5cbiAgICAgICAgICAgICAgICBwcm9jZXNzXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIClcbiAgICAgIF0pXG4gICAgfSxcblxuICAgIGdldEZvcm1TY2hlbWFzRm9yUHJvY2Vzc2luZyhzY2hlbWEsIGNvbnRleHQpIHtcbiAgICAgIC8vIENvbnZlcnQgbmVzdGVkIGNoaWxkcmVuIHNjaGVtYSB0byBzdGFuZC1hbG9uZSBzY2hlbWEgY29tcG9uZW50LFxuICAgICAgLy8gcHJlc2VudCBpbiBlYWNoIG9mIHRoZSBmb3JtcywgYXMgcmVxdWlyZWQgYnkgYHByb2Nlc3NTY2hlbWFEYXRhKClgXG4gICAgICBjb25zdCB7IGNoaWxkcmVuIH0gPSBzY2hlbWFcbiAgICAgIHJldHVybiBnZXRGb3JtU2NoZW1hcyhcbiAgICAgICAgc2NoZW1hLFxuICAgICAgICBjb250ZXh0LFxuICAgICAgICBjaGlsZHJlblxuICAgICAgICAgID8gZm9ybSA9PiAoe1xuICAgICAgICAgICAgICAuLi5mb3JtLFxuICAgICAgICAgICAgICBjb21wb25lbnRzOiB7XG4gICAgICAgICAgICAgICAgLi4uZm9ybS5jb21wb25lbnRzLFxuICAgICAgICAgICAgICAgIFtjaGlsZHJlbi5uYW1lXTogY2hpbGRyZW5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICA6IG51bGxcbiAgICAgIClcbiAgICB9XG4gIH1cbilcbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5cbi5kaXRvLXRyZWUtbGlzdCB7XG4gIEBleHRlbmQgJWZpZWxkO1xuXG4gIC5kaXRvLXRyZWUtcGFuZWwge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuXG4gICAgPiAuZGl0by10cmVlLWl0ZW0ge1xuICAgICAgZmxleDogMSAxIDI1JTtcbiAgICB9XG5cbiAgICA+IC5kaXRvLXRyZWUtZm9ybS1jb250YWluZXIge1xuICAgICAgZmxleDogMCAxIDc1JTtcbiAgICAgIGFsaWduLXNlbGY6IHN0cmV0Y2g7XG4gICAgICBiYWNrZ3JvdW5kOiAkY29udGVudC1jb2xvci1iYWNrZ3JvdW5kO1xuICAgICAgYm9yZGVyLWxlZnQ6ICRib3JkZXItc3R5bGU7XG4gICAgICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogJGJvcmRlci1yYWRpdXMgLSAxO1xuICAgICAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6ICRib3JkZXItcmFkaXVzIC0gMTtcbiAgICAgIG1hcmdpbjogKC0kaW5wdXQtcGFkZGluZy12ZXIpICgtJGlucHV0LXBhZGRpbmctaG9yKTtcbiAgICAgIG1hcmdpbi1sZWZ0OiAkaW5wdXQtcGFkZGluZy1ob3I7XG4gICAgfVxuICB9XG59XG48L3N0eWxlPlxuIiwiaW1wb3J0IHsgZmlsZXNpemUgfSBmcm9tICdmaWxlc2l6ZSdcblxuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdEZpbGVTaXplKHNpemUpIHtcbiAgcmV0dXJuIGZpbGVzaXplKHNpemUsIHsgYmFzZTogMTAgfSlcbn1cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4uZGl0by11cGxvYWRcbiAgLy8tIEluIG9yZGVyIHRvIGhhbmRsZSB1cGxvYWQgYnV0dG9ucyBpbiBtdWx0aXBsZSBwb3NzaWJsZSBwbGFjZXMsIGRlcGVuZGluZ1xuICAvLy0gb24gd2hldGhlciB0aGV5IGhhbmRsZSBzaW5nbGUgb3IgbXVsdGlwbGUgdXBsb2FkcywgcmVuZGVyIHRoZSB1cGxvYWRcbiAgLy8tIGNvbXBvbmVudCBpbnZpc2libHkgYXQgdGhlIHJvb3QsIGFuZCBkZWxlZ2F0ZSB0aGUgY2xpY2sgZXZlbnRzIHRvIGl0IGZyb21cbiAgLy8tIHRoZSBidXR0b25zIHJlbmRlcmVkIGZ1cnRoZXIgYmVsb3cuIEx1Y2tpbHkgdGhpcyB3b3JrcyBzdXJwcmlzaW5nbHkgd2VsbC5cbiAgVnVlVXBsb2FkLmRpdG8tdXBsb2FkX19pbnB1dChcbiAgICByZWY9XCJ1cGxvYWRcIlxuICAgIHYtbW9kZWw9XCJ1cGxvYWRzXCJcbiAgICA6aW5wdXRJZD1cImRhdGFQYXRoXCJcbiAgICA6bmFtZT1cImRhdGFQYXRoXCJcbiAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgOnBvc3RBY3Rpb249XCJ1cGxvYWRQYXRoXCJcbiAgICA6ZXh0ZW5zaW9ucz1cImV4dGVuc2lvbnNcIlxuICAgIDphY2NlcHQ9XCJhY2NlcHRcIlxuICAgIDptdWx0aXBsZT1cIm11bHRpcGxlXCJcbiAgICA6c2l6ZT1cIm1heFNpemVcIlxuICAgIDpkcm9wPVwiJGVsPy5jbG9zZXN0KCcuZGl0by1jb250YWluZXInKVwiXG4gICAgOmRyb3BEaXJlY3Rvcnk9XCJ0cnVlXCJcbiAgICBAaW5wdXQtZmlsdGVyPVwib25JbnB1dEZpbHRlclwiXG4gICAgQGlucHV0LWZpbGU9XCJvbklucHV0RmlsZVwiXG4gIClcbiAgdGFibGUuZGl0by10YWJsZS5kaXRvLXRhYmxlLXNlcGFyYXRvcnMuZGl0by10YWJsZS1iYWNrZ3JvdW5kXG4gICAgLy8tIFN0eWxpbmcgY29tZXMgZnJvbSBgRGl0b1RhYmxlSGVhZGBcbiAgICB0aGVhZC5kaXRvLXRhYmxlLWhlYWRcbiAgICAgIHRyXG4gICAgICAgIHRoXG4gICAgICAgICAgc3BhbiBGaWxlXG4gICAgICAgIHRoXG4gICAgICAgICAgc3BhbiBTaXplXG4gICAgICAgIHRoXG4gICAgICAgICAgc3BhbiBTdGF0dXNcbiAgICAgICAgdGhcbiAgICAgICAgICBzcGFuXG4gICAgRGl0b0RyYWdnYWJsZShcbiAgICAgIHYtbW9kZWw9XCJmaWxlc1wiXG4gICAgICB0YWc9XCJ0Ym9keVwiXG4gICAgICA6b3B0aW9ucz1cImdldERyYWdnYWJsZU9wdGlvbnMoKVwiXG4gICAgICA6ZHJhZ2dhYmxlPVwiZHJhZ2dhYmxlXCJcbiAgICApXG4gICAgICB0ZW1wbGF0ZShcbiAgICAgICAgdi1pZj1cIm11bHRpcGxlIHx8ICFpc1VwbG9hZEFjdGl2ZVwiXG4gICAgICApXG4gICAgICAgIHRyKFxuICAgICAgICAgIHYtZm9yPVwiKGZpbGUsIGluZGV4KSBpbiBmaWxlc1wiXG4gICAgICAgICAgOmtleT1cImZpbGUubmFtZVwiXG4gICAgICAgIClcbiAgICAgICAgICB0ZChcbiAgICAgICAgICAgIHYtaWY9XCJyZW5kZXJcIlxuICAgICAgICAgICAgdi1odG1sPVwicmVuZGVyRmlsZShmaWxlLCBpbmRleClcIlxuICAgICAgICAgIClcbiAgICAgICAgICB0ZChcbiAgICAgICAgICAgIHYtZWxzZS1pZj1cImRvd25sb2FkVXJsc1tpbmRleF1cIlxuICAgICAgICAgIClcbiAgICAgICAgICAgIGEoXG4gICAgICAgICAgICAgIDpkb3dubG9hZD1cImZpbGUubmFtZVwiXG4gICAgICAgICAgICAgIDpocmVmPVwiZG93bmxvYWRVcmxzW2luZGV4XVwiXG4gICAgICAgICAgICAgIHRhcmdldD1cIl9ibGFua1wiXG4gICAgICAgICAgICAgIEBjbGljay5wcmV2ZW50PVwib25DbGlja0Rvd25sb2FkKGZpbGUsIGluZGV4KVwiXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAgIERpdG9VcGxvYWRGaWxlKFxuICAgICAgICAgICAgICAgIDpmaWxlPVwiZmlsZVwiXG4gICAgICAgICAgICAgICAgOnRodW1ibmFpbD1cInRodW1ibmFpbHNcIlxuICAgICAgICAgICAgICAgIDp0aHVtYm5haWxVcmw9XCJ0aHVtYm5haWxVcmxzW2luZGV4XVwiXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICB0ZChcbiAgICAgICAgICAgIHYtZWxzZVxuICAgICAgICAgIClcbiAgICAgICAgICAgIERpdG9VcGxvYWRGaWxlKFxuICAgICAgICAgICAgICA6ZmlsZT1cImZpbGVcIlxuICAgICAgICAgICAgICA6dGh1bWJuYWlsPVwidGh1bWJuYWlsc1wiXG4gICAgICAgICAgICAgIDp0aHVtYm5haWxVcmw9XCJ0aHVtYm5haWxVcmxzW2luZGV4XVwiXG4gICAgICAgICAgICApXG4gICAgICAgICAgdGQuZGl0by11cGxvYWRfX3NpemUge3sgZm9ybWF0RmlsZVNpemUoZmlsZS5zaXplKSB9fVxuICAgICAgICAgIHRkLmRpdG8tdXBsb2FkX19zdGF0dXNcbiAgICAgICAgICAgIHRlbXBsYXRlKFxuICAgICAgICAgICAgICB2LWlmPVwiZmlsZS51cGxvYWRcIlxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgICB0ZW1wbGF0ZShcbiAgICAgICAgICAgICAgICB2LWlmPVwiZmlsZS51cGxvYWQuZXJyb3JcIlxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgfCBFcnJvcjoge3sgZmlsZS51cGxvYWQuZXJyb3IgfX1cbiAgICAgICAgICAgICAgdGVtcGxhdGUoXG4gICAgICAgICAgICAgICAgdi1lbHNlLWlmPVwiZmlsZS51cGxvYWQuYWN0aXZlXCJcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIHwgVXBsb2FkaW5nLi4uXG4gICAgICAgICAgICAgIHRlbXBsYXRlKFxuICAgICAgICAgICAgICAgIHYtZWxzZS1pZj1cImZpbGUudXBsb2FkLnN1Y2Nlc3NcIlxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgfCBVcGxvYWRlZFxuICAgICAgICAgICAgdGVtcGxhdGUoXG4gICAgICAgICAgICAgIHYtZWxzZVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgICB8IFN0b3JlZFxuICAgICAgICAgIHRkLmRpdG8tY2VsbC1lZGl0LWJ1dHRvbnNcbiAgICAgICAgICAgIC5kaXRvLWJ1dHRvbnMuZGl0by1idXR0b25zLXJvdW5kXG4gICAgICAgICAgICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbi5kaXRvLWJ1dHRvbi11cGxvYWQoXG4gICAgICAgICAgICAgICAgdi1pZj1cIiFtdWx0aXBsZVwiXG4gICAgICAgICAgICAgICAgOnRpdGxlPVwidXBsb2FkVGl0bGVcIlxuICAgICAgICAgICAgICAgIEBjbGljaz1cIm9uQ2xpY2tVcGxvYWRcIlxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIC8vLSBGaXJlZm94IGRvZXNuJ3QgbGlrZSA8YnV0dG9uPiBoZXJlLCBzbyB1c2UgPGE+IGluc3RlYWQ6XG4gICAgICAgICAgICAgIGEuZGl0by1idXR0b24oXG4gICAgICAgICAgICAgICAgdi1pZj1cImRyYWdnYWJsZVwiXG4gICAgICAgICAgICAgICAgdi1iaW5kPVwiZ2V0QnV0dG9uQXR0cmlidXRlcyh2ZXJicy5kcmFnKVwiXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgYnV0dG9uLmRpdG8tYnV0dG9uKFxuICAgICAgICAgICAgICAgIHYtaWY9XCJkZWxldGFibGVcIlxuICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgIHYtYmluZD1cImdldEJ1dHRvbkF0dHJpYnV0ZXModmVyYnMuZGVsZXRlKVwiXG4gICAgICAgICAgICAgICAgQGNsaWNrPVwiZGVsZXRlRmlsZShmaWxlLCBpbmRleClcIlxuICAgICAgICAgICAgICApXG4gICAgdGZvb3QoXG4gICAgICB2LWlmPVwibXVsdGlwbGUgfHwgaXNVcGxvYWRBY3RpdmUgfHwgIWhhc0ZpbGVzXCJcbiAgICApXG4gICAgICB0clxuICAgICAgICB0ZCg6Y29sc3Bhbj1cIjRcIilcbiAgICAgICAgICAuZGl0by11cGxvYWQtZm9vdGVyXG4gICAgICAgICAgICBwcm9ncmVzcy5kaXRvLXByb2dyZXNzKFxuICAgICAgICAgICAgICB2LWlmPVwiaXNVcGxvYWRBY3RpdmVcIlxuICAgICAgICAgICAgICA6dmFsdWU9XCJ1cGxvYWRQcm9ncmVzc1wiXG4gICAgICAgICAgICAgIG1heD1cIjEwMFwiXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuZGl0by1idXR0b25zLmRpdG8tYnV0dG9ucy1yb3VuZFxuICAgICAgICAgICAgICBidXR0b24uZGl0by1idXR0b24oXG4gICAgICAgICAgICAgICAgdi1pZj1cImlzVXBsb2FkQWN0aXZlXCJcbiAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICBAY2xpY2sucHJldmVudD1cInVwbG9hZC5hY3RpdmUgPSBmYWxzZVwiXG4gICAgICAgICAgICAgICkgQ2FuY2VsXG4gICAgICAgICAgICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbi5kaXRvLWJ1dHRvbi11cGxvYWQoXG4gICAgICAgICAgICAgICAgdi1pZj1cIm11bHRpcGxlIHx8ICFoYXNGaWxlc1wiXG4gICAgICAgICAgICAgICAgOnRpdGxlPVwidXBsb2FkVGl0bGVcIlxuICAgICAgICAgICAgICAgIEBjbGljaz1cIm9uQ2xpY2tVcGxvYWRcIlxuICAgICAgICAgICAgICApXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9UeXBlQ29tcG9uZW50IGZyb20gJy4uL0RpdG9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IERpdG9Db250ZXh0IGZyb20gJy4uL0RpdG9Db250ZXh0LmpzJ1xuaW1wb3J0IFNvcnRhYmxlTWl4aW4gZnJvbSAnLi4vbWl4aW5zL1NvcnRhYmxlTWl4aW4uanMnXG5pbXBvcnQgcGFyc2VGaWxlU2l6ZSBmcm9tICdmaWxlc2l6ZS1wYXJzZXInXG5pbXBvcnQgeyBnZXRTY2hlbWFBY2Nlc3NvciB9IGZyb20gJy4uL3V0aWxzL2FjY2Vzc29yLmpzJ1xuaW1wb3J0IHsgZm9ybWF0RmlsZVNpemUgfSBmcm9tICcuLi91dGlscy91bml0cy5qcydcbmltcG9ydCB7IGFwcGVuZERhdGFQYXRoIH0gZnJvbSAnLi4vdXRpbHMvZGF0YS5qcydcbmltcG9ydCB7IGlzQXJyYXksIGFzQXJyYXkgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0IFZ1ZVVwbG9hZCBmcm9tICd2dWUtdXBsb2FkLWNvbXBvbmVudCdcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9UeXBlQ29tcG9uZW50LnJlZ2lzdGVyKCd1cGxvYWQnLCB7XG4gIG1peGluczogW1NvcnRhYmxlTWl4aW5dLFxuICBjb21wb25lbnRzOiB7IFZ1ZVVwbG9hZCB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHVwbG9hZHM6IFtdXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgdXBsb2FkKCkge1xuICAgICAgcmV0dXJuIHRoaXMuJHJlZnMudXBsb2FkXG4gICAgfSxcblxuICAgIHVwbG9hZFRpdGxlKCkge1xuICAgICAgcmV0dXJuIHRoaXMubXVsdGlwbGUgPyAnVXBsb2FkIEZpbGVzJyA6ICdVcGxvYWQgRmlsZSdcbiAgICB9LFxuXG4gICAgZmlsZXMoKSB7XG4gICAgICByZXR1cm4gYXNGaWxlcyh0aGlzLnZhbHVlKVxuICAgIH0sXG5cbiAgICBkb3dubG9hZFVybHMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5maWxlcy5tYXAoKGZpbGUsIGluZGV4KSA9PiB0aGlzLmdldERvd25sb2FkVXJsKGZpbGUsIGluZGV4KSlcbiAgICB9LFxuXG4gICAgdGh1bWJuYWlsVXJscygpIHtcbiAgICAgIHJldHVybiB0aGlzLmZpbGVzLm1hcCgoZmlsZSwgaW5kZXgpID0+IHRoaXMuZ2V0VGh1bWJuYWlsVXJsKGZpbGUsIGluZGV4KSlcbiAgICB9LFxuXG4gICAgbXVsdGlwbGU6IGdldFNjaGVtYUFjY2Vzc29yKCdtdWx0aXBsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICAgIC8vIE5vIGNhbGxiYWNrIGFzIGl0J3MgdXNlZCBpbiBgcHJvY2Vzc1ZhbHVlKClgXG4gICAgICBjYWxsYmFjazogZmFsc2VcbiAgICB9KSxcblxuICAgIGV4dGVuc2lvbnM6IGdldFNjaGVtYUFjY2Vzc29yKCdleHRlbnNpb25zJywge1xuICAgICAgdHlwZTogW0FycmF5LCBTdHJpbmcsIFJlZ0V4cF1cbiAgICB9KSxcblxuICAgIGFjY2VwdDogZ2V0U2NoZW1hQWNjZXNzb3IoJ2FjY2VwdCcsIHtcbiAgICAgIHR5cGU6IEFycmF5LFxuICAgICAgZ2V0KGFjY2VwdCkge1xuICAgICAgICByZXR1cm4gaXNBcnJheShhY2NlcHQpID8gYWNjZXB0LmpvaW4oJywnKSA6IGFjY2VwdFxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgbWF4U2l6ZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ21heFNpemUnLCB7XG4gICAgICB0eXBlOiBbU3RyaW5nLCBOdW1iZXJdLFxuICAgICAgZ2V0KG1heFNpemUpIHtcbiAgICAgICAgcmV0dXJuIG1heFNpemUgPyBwYXJzZUZpbGVTaXplKG1heFNpemUpIDogdW5kZWZpbmVkXG4gICAgICB9XG4gICAgfSksXG5cbiAgICBkcmFnZ2FibGU6IGdldFNjaGVtYUFjY2Vzc29yKCdkcmFnZ2FibGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2UsXG4gICAgICBnZXQoZHJhZ2dhYmxlKSB7XG4gICAgICAgIHJldHVybiBkcmFnZ2FibGUgJiYgdGhpcy5maWxlcy5sZW5ndGggPiAxXG4gICAgICB9XG4gICAgfSksXG5cbiAgICBkZWxldGFibGU6IGdldFNjaGVtYUFjY2Vzc29yKCdkZWxldGFibGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9KSxcblxuICAgIHJlbmRlcjogZ2V0U2NoZW1hQWNjZXNzb3IoJ3JlbmRlcicsIHtcbiAgICAgIHR5cGU6IEZ1bmN0aW9uLFxuICAgICAgZGVmYXVsdDogbnVsbFxuICAgIH0pLFxuXG4gICAgdGh1bWJuYWlsczogZ2V0U2NoZW1hQWNjZXNzb3IoJ3RodW1ibmFpbHMnLCB7XG4gICAgICB0eXBlOiBbQm9vbGVhbiwgU3RyaW5nXSxcbiAgICAgIGRlZmF1bHQodGh1bWJuYWlscykge1xuICAgICAgICByZXR1cm4gdGh1bWJuYWlscyA/PyAhIXRoaXMuc2NoZW1hLnRodW1ibmFpbFVybFxuICAgICAgfSxcbiAgICAgIGdldCh0aHVtYm5haWxzKSB7XG4gICAgICAgIHJldHVybiB0aHVtYm5haWxzID09PSB0cnVlID8gJ21lZGl1bScgOiB0aHVtYm5haWxzIHx8IG51bGxcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIGhhc0ZpbGVzKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZmlsZXMubGVuZ3RoID4gMFxuICAgIH0sXG5cbiAgICBoYXNVcGxvYWRzKCkge1xuICAgICAgcmV0dXJuIHRoaXMudXBsb2Fkcy5sZW5ndGggPiAwXG4gICAgfSxcblxuICAgIGlzVXBsb2FkUmVhZHkoKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICB0aGlzLmhhc1VwbG9hZHMgJiZcbiAgICAgICAgISh0aGlzLnVwbG9hZC5hY3RpdmUgfHwgdGhpcy51cGxvYWQudXBsb2FkZWQpXG4gICAgICApXG4gICAgfSxcblxuICAgIGlzVXBsb2FkQWN0aXZlKCkge1xuICAgICAgcmV0dXJuIHRoaXMuaGFzVXBsb2FkcyAmJiB0aGlzLnVwbG9hZC5hY3RpdmVcbiAgICB9LFxuXG4gICAgdXBsb2FkUHJvZ3Jlc3MoKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICB0aGlzLnVwbG9hZHMucmVkdWNlKCh0b3RhbCwgZmlsZSkgPT4gdG90YWwgKyArZmlsZS5wcm9ncmVzcywgMCkgL1xuICAgICAgICB0aGlzLnVwbG9hZHMubGVuZ3RoXG4gICAgICApXG4gICAgfSxcblxuICAgIHVwbG9hZFBhdGgoKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRSZXNvdXJjZVVybCh7XG4gICAgICAgIHR5cGU6ICd1cGxvYWQnLFxuICAgICAgICBwYXRoOiB0aGlzLmFwaS5ub3JtYWxpemVQYXRoKHRoaXMuZGF0YVBhdGgpXG4gICAgICB9KVxuICAgIH1cbiAgfSxcblxuICB3YXRjaDoge1xuICAgIGlzVXBsb2FkUmVhZHkocmVhZHkpIHtcbiAgICAgIGlmIChyZWFkeSkge1xuICAgICAgICAvLyBBdXRvLXVwbG9hZC5cbiAgICAgICAgdGhpcy4kbmV4dFRpY2soKCkgPT4ge1xuICAgICAgICAgIHRoaXMudXBsb2FkLmFjdGl2ZSA9IHRydWVcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGZvcm1hdEZpbGVTaXplLFxuXG4gICAgZ2V0RmlsZUNvbnRleHQoZmlsZSwgaW5kZXgpIHtcbiAgICAgIHJldHVybiB0aGlzLm11bHRpcGxlXG4gICAgICAgID8gbmV3IERpdG9Db250ZXh0KHRoaXMsIHtcbiAgICAgICAgICAgIHZhbHVlOiBmaWxlLFxuICAgICAgICAgICAgZGF0YTogdGhpcy5maWxlcyxcbiAgICAgICAgICAgIGluZGV4LFxuICAgICAgICAgICAgZGF0YVBhdGg6IGFwcGVuZERhdGFQYXRoKHRoaXMuZGF0YVBhdGgsIGluZGV4KVxuICAgICAgICAgIH0pXG4gICAgICAgIDogdGhpcy5jb250ZXh0XG4gICAgfSxcblxuICAgIHJlbmRlckZpbGUoZmlsZSwgaW5kZXgpIHtcbiAgICAgIHJldHVybiB0aGlzLnJlbmRlcih0aGlzLmdldEZpbGVDb250ZXh0KGZpbGUsIGluZGV4KSlcbiAgICB9LFxuXG4gICAgZ2V0RG93bmxvYWRVcmwoZmlsZSwgaW5kZXgpIHtcbiAgICAgIHJldHVybiBmaWxlLnVybFxuICAgICAgICA/IGZpbGUudXJsXG4gICAgICAgIDogIWZpbGUudXBsb2FkIHx8IGZpbGUudXBsb2FkLnN1Y2Nlc3NcbiAgICAgICAgICA/IHRoaXMuZ2V0U2NoZW1hVmFsdWUoJ2Rvd25sb2FkVXJsJywge1xuICAgICAgICAgICAgICB0eXBlOiAnU3RyaW5nJyxcbiAgICAgICAgICAgICAgZGVmYXVsdDogbnVsbCxcbiAgICAgICAgICAgICAgY29udGV4dDogdGhpcy5nZXRGaWxlQ29udGV4dChmaWxlLCBpbmRleClcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgOiBudWxsXG4gICAgfSxcblxuICAgIGdldFRodW1ibmFpbFVybChmaWxlLCBpbmRleCkge1xuICAgICAgcmV0dXJuICFmaWxlLnVwbG9hZCB8fCBmaWxlLnVwbG9hZC5zdWNjZXNzXG4gICAgICAgID8gdGhpcy5nZXRTY2hlbWFWYWx1ZSgndGh1bWJuYWlsVXJsJywge1xuICAgICAgICAgICAgdHlwZTogJ1N0cmluZycsXG4gICAgICAgICAgICBkZWZhdWx0OiBudWxsLFxuICAgICAgICAgICAgY29udGV4dDogdGhpcy5nZXRGaWxlQ29udGV4dChmaWxlLCBpbmRleClcbiAgICAgICAgICB9KSB8fCAoXG4gICAgICAgICAgICBmaWxlLnR5cGUuc3RhcnRzV2l0aCgnaW1hZ2UvJylcbiAgICAgICAgICAgICAgPyBmaWxlLnVybFxuICAgICAgICAgICAgICA6IG51bGxcbiAgICAgICAgICApXG4gICAgICAgIDogbnVsbFxuICAgIH0sXG5cbiAgICBkZWxldGVGaWxlKGZpbGUsIGluZGV4KSB7XG4gICAgICBjb25zdCB7IG5hbWUgfSA9IGZpbGVcblxuICAgICAgaWYgKFxuICAgICAgICBmaWxlICYmXG4gICAgICAgIHdpbmRvdy5jb25maXJtKFxuICAgICAgICAgIGBEbyB5b3UgcmVhbGx5IHdhbnQgdG8gJHt0aGlzLnZlcmJzLnJlbW92ZX0gJHtuYW1lfT9gXG4gICAgICAgIClcbiAgICAgICkge1xuICAgICAgICBpZiAodGhpcy5tdWx0aXBsZSkge1xuICAgICAgICAgIHRoaXMudmFsdWUuc3BsaWNlKGluZGV4LCAxKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMudmFsdWUgPSBudWxsXG4gICAgICAgIH1cbiAgICAgICAgaWYgKGZpbGUudXBsb2FkKSB7XG4gICAgICAgICAgdGhpcy51cGxvYWQucmVtb3ZlKGZpbGUudXBsb2FkKVxuICAgICAgICB9XG4gICAgICAgIHRoaXMub25DaGFuZ2UoKVxuICAgICAgICB0aGlzLm5vdGlmeSh7XG4gICAgICAgICAgdHlwZTogJ2luZm8nLFxuICAgICAgICAgIHRpdGxlOiAnU3VjY2Vzc2Z1bGx5IFJlbW92ZWQnLFxuICAgICAgICAgIHRleHQ6IGAke25hbWV9IHdhcyAke3RoaXMudmVyYnMuZGVsZXRlZH0uYFxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBnZXRGaWxlSW5kZXgoZmlsZSkge1xuICAgICAgcmV0dXJuIHRoaXMubXVsdGlwbGUgJiYgdGhpcy52YWx1ZVxuICAgICAgICA/IHRoaXMudmFsdWUuZmluZEluZGV4KGl0ID0+IGl0LmlkID09PSBmaWxlLmlkKVxuICAgICAgICA6IC0xXG4gICAgfSxcblxuICAgIGFkZEZpbGUoZmlsZSkge1xuICAgICAgaWYgKHRoaXMubXVsdGlwbGUpIHtcbiAgICAgICAgaWYgKHRoaXMudmFsdWUpIHtcbiAgICAgICAgICB0aGlzLnZhbHVlLnB1c2goZmlsZSlcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnZhbHVlID0gW2ZpbGVdXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMudmFsdWUgPSBmaWxlXG4gICAgICB9XG4gICAgfSxcblxuICAgIHJlcGxhY2VGaWxlKGZpbGUsIG5ld0ZpbGUpIHtcbiAgICAgIGlmICh0aGlzLm11bHRpcGxlKSB7XG4gICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5nZXRGaWxlSW5kZXgoZmlsZSlcbiAgICAgICAgaWYgKGluZGV4ID49IDApIHtcbiAgICAgICAgICBpZiAobmV3RmlsZSkge1xuICAgICAgICAgICAgdGhpcy52YWx1ZVtpbmRleF0gPSBuZXdGaWxlXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMudmFsdWUuc3BsaWNlKGluZGV4LCAxKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy52YWx1ZSA9IG5ld0ZpbGVcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgcmVtb3ZlRmlsZShmaWxlKSB7XG4gICAgICB0aGlzLnJlcGxhY2VGaWxlKGZpbGUsIG51bGwpXG4gICAgfSxcblxuICAgIG9uSW5wdXRGaWxlKG5ld0ZpbGUsIG9sZEZpbGUpIHtcbiAgICAgIGlmIChuZXdGaWxlICYmICFvbGRGaWxlKSB7XG4gICAgICAgIGNvbnN0IHsgaWQsIG5hbWUsIHNpemUgfSA9IG5ld0ZpbGVcbiAgICAgICAgdGhpcy5hZGRGaWxlKHsgaWQsIG5hbWUsIHNpemUsIHVwbG9hZDogbmV3RmlsZSB9KVxuICAgICAgfVxuICAgICAgaWYgKG5ld0ZpbGUgJiYgb2xkRmlsZSkge1xuICAgICAgICBjb25zdCB7IHN1Y2Nlc3MsIGVycm9yIH0gPSBuZXdGaWxlXG4gICAgICAgIGlmIChzdWNjZXNzKSB7XG4gICAgICAgICAgdGhpcy5vbkNoYW5nZSgpXG4gICAgICAgICAgY29uc3QgZmlsZSA9IG5ld0ZpbGUucmVzcG9uc2VbMF1cbiAgICAgICAgICBpZiAoZmlsZSkge1xuICAgICAgICAgICAgZmlsZS51cGxvYWQgPSBuZXdGaWxlXG4gICAgICAgICAgICAvLyBSZXBsYWNlIHRoZSB1cGxvYWQgZmlsZSBvYmplY3Qgd2l0aCB0aGUgZmlsZSBvYmplY3QgcmVjZWl2ZWRcbiAgICAgICAgICAgIC8vIGZyb20gdGhlIHVwbG9hZCByZXNwb25zZS5cbiAgICAgICAgICAgIHRoaXMucmVwbGFjZUZpbGUobmV3RmlsZSwgZmlsZSlcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5yZW1vdmVGaWxlKG5ld0ZpbGUpXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGVycm9yKSB7XG4gICAgICAgICAgdGhpcy5yZW1vdmVGaWxlKG5ld0ZpbGUpXG4gICAgICAgICAgY29uc3QgdGV4dCA9IChcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgYWJvcnQ6ICdVcGxvYWQgYWJvcnRlZCcsXG4gICAgICAgICAgICAgIGRlbmllZDogJ1VwbG9hZCBkZW5pZWQnLFxuICAgICAgICAgICAgICBleHRlbnNpb246IGBVbnN1cHBvcnRlZCBmaWxlLXR5cGU6ICR7bmV3RmlsZS5uYW1lfWAsXG4gICAgICAgICAgICAgIG5ldHdvcms6ICdOZXR3b3JrIGVycm9yIGVuY291bnRlcmVkIGR1cmluZyB1cGxvYWQnLFxuICAgICAgICAgICAgICBzZXJ2ZXI6ICdTZXJ2ZXIgZXJyb3Igb2NjdXJyZWQgZHVyaW5nIHVwbG9hZCcsXG4gICAgICAgICAgICAgIHNpemU6IGBGaWxlIGlzIHRvbyBsYXJnZTogJHtmb3JtYXRGaWxlU2l6ZShuZXdGaWxlLnNpemUpfWAsXG4gICAgICAgICAgICAgIHRpbWVvdXQ6ICdUaW1lb3V0IG9jY3VycmVkIGR1cmluZyB1cGxvYWQnXG4gICAgICAgICAgICB9W2Vycm9yXSB8fFxuICAgICAgICAgICAgYFVua25vd24gRmlsZSBVcGxvYWQgRXJyb3I6ICcke2Vycm9yfSdgXG4gICAgICAgICAgKVxuICAgICAgICAgIHRoaXMubm90aWZ5KHtcbiAgICAgICAgICAgIHR5cGU6ICdlcnJvcicsXG4gICAgICAgICAgICB0aXRsZTogJ0ZpbGUgVXBsb2FkIEVycm9yJyxcbiAgICAgICAgICAgIHRleHRcbiAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIG9uSW5wdXRGaWx0ZXIobmV3RmlsZSAvKiwgb2xkRmlsZSwgcHJldmVudCAqLykge1xuICAgICAgY29uc3QgeGhyID0gbmV3RmlsZT8ueGhyXG4gICAgICBpZiAodGhpcy5hcGkuY29ycz8uY3JlZGVudGlhbHMgJiYgeGhyICYmICF4aHIud2l0aENyZWRlbnRpYWxzKSB7XG4gICAgICAgIHhoci53aXRoQ3JlZGVudGlhbHMgPSB0cnVlXG4gICAgICB9XG4gICAgfSxcblxuICAgIGFzeW5jIG9uQ2xpY2tEb3dubG9hZChmaWxlLCBpbmRleCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaCh0aGlzLmRvd25sb2FkVXJsc1tpbmRleF0pXG4gICAgICAgIGNvbnN0IGJsb2IgPSBhd2FpdCByZXNwb25zZS5ibG9iKClcbiAgICAgICAgdGhpcy5kb3dubG9hZCh7XG4gICAgICAgICAgZmlsZW5hbWU6IGZpbGUubmFtZSxcbiAgICAgICAgICB1cmw6IFVSTC5jcmVhdGVPYmplY3RVUkwoYmxvYilcbiAgICAgICAgfSlcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpXG4gICAgICB9XG4gICAgfSxcblxuICAgIG9uQ2xpY2tVcGxvYWQoZXZlbnQpIHtcbiAgICAgIC8vIERlbGVnYXRlIHRoZSBjbGljayBldmVudCB0byB0aGUgaGlkZGVuIGZpbGUgaW5wdXQuXG4gICAgICB0aGlzLnVwbG9hZC4kZWwucXVlcnlTZWxlY3RvcignaW5wdXQnKS5kaXNwYXRjaEV2ZW50KFxuICAgICAgICBuZXcgZXZlbnQuY29uc3RydWN0b3IoZXZlbnQudHlwZSwgZXZlbnQpXG4gICAgICApXG4gICAgfVxuICB9LFxuXG4gIHByb2Nlc3NWYWx1ZShzY2hlbWEsIHZhbHVlKSB7XG4gICAgLy8gRmlsdGVyIG91dCBhbGwgbmV3bHkgYWRkZWQgZmlsZXMgdGhhdCB3ZXJlbid0IGFjdHVhbGx5IHVwbG9hZGVkLlxuICAgIGNvbnN0IGZpbGVzID0gYXNGaWxlcyh2YWx1ZSlcbiAgICAgIC5tYXAoKHsgdXBsb2FkLCAuLi5maWxlIH0pID0+ICghdXBsb2FkIHx8IHVwbG9hZC5zdWNjZXNzID8gZmlsZSA6IG51bGwpKVxuICAgICAgLmZpbHRlcihmaWxlID0+IGZpbGUpXG4gICAgcmV0dXJuIHNjaGVtYS5tdWx0aXBsZSA/IGZpbGVzIDogZmlsZXNbMF0gfHwgbnVsbFxuICB9XG59KVxuXG5mdW5jdGlvbiBhc0ZpbGVzKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSA/IGFzQXJyYXkodmFsdWUpIDogW11cbn1cbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5cbi5kaXRvLXVwbG9hZCB7XG4gIC5kaXRvLXRhYmxlIHtcbiAgICB0cixcbiAgICAuZGl0by1jZWxsLWVkaXQtYnV0dG9ucyB7XG4gICAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICAgIH1cbiAgfVxuXG4gICZfX3NpemUsXG4gICZfX3N0YXR1cyB7XG4gICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgfVxuXG4gICYgJl9faW5wdXQge1xuICAgIC8vIFNlZSBgb25DbGlja1VwbG9hZCgpYCBtZXRob2QgZm9yIGRldGFpbHMuXG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gIH1cblxuICAmX19mb290ZXIge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuXG4gICAgLmRpdG8tcHJvZ3Jlc3Mge1xuICAgICAgZmxleDogYXV0bztcbiAgICAgIG1hcmdpbi1yaWdodDogJGZvcm0tc3BhY2luZztcbiAgICB9XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCJpbXBvcnQgeyBhc0FycmF5IH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuZXhwb3J0IGRlZmF1bHQge1xuICBtb3VudGVkKG5vZGUsIGJpbmRpbmcpIHtcbiAgICBvYnNlcnZlUmVzaXplKG5vZGUsIGJpbmRpbmcudmFsdWUsIGJpbmRpbmcuYXJnKVxuICB9LFxuXG4gIHVubW91bnRlZChub2RlLCBiaW5kaW5nKSB7XG4gICAgdW5vYnNlcnZlUmVzaXplKG5vZGUsIGJpbmRpbmcudmFsdWUsIGJpbmRpbmcuYXJnKVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBvYnNlcnZlUmVzaXplKG5vZGUsIGhhbmRsZXIsIG9wdGlvbnMpIHtcbiAgT2JzZXJ2ZXIuZ2V0T2JzZXJ2ZXIob3B0aW9ucykub2JzZXJ2ZShub2RlLCBoYW5kbGVyKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gdW5vYnNlcnZlUmVzaXplKG5vZGUsIGhhbmRsZXIsIG9wdGlvbnMpIHtcbiAgT2JzZXJ2ZXIuZ2V0T2JzZXJ2ZXIob3B0aW9ucykudW5vYnNlcnZlKG5vZGUsIGhhbmRsZXIpXG59XG5cbmV4cG9ydCBjb25zdCBpc1Jlc2l6ZVN1cHBvcnRlZCA9IHR5cGVvZiBSZXNpemVPYnNlcnZlciAhPT0gJ3VuZGVmaW5lZCdcblxuY29uc3Qgb2JzZXJ2ZXJzID0ge31cblxuY2xhc3MgT2JzZXJ2ZXIge1xuICBjb25zdHJ1Y3RvcihrZXksIG9wdGlvbnMpIHtcbiAgICB0aGlzLmtleSA9IGtleVxuICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnNcbiAgICB0aGlzLm9ic2VydmVyID0gaXNSZXNpemVTdXBwb3J0ZWRcbiAgICAgID8gbmV3IFJlc2l6ZU9ic2VydmVyKGVudHJpZXMgPT4gdGhpcy5oYW5kbGUoZW50cmllcykpXG4gICAgICA6IG51bGxcbiAgICB0aGlzLmhhbmRsZXJzQnlOb2RlID0gbmV3IFdlYWtNYXAoKVxuICAgIHRoaXMubm9kZUNvdW50ID0gMFxuICB9XG5cbiAgb2JzZXJ2ZShub2RlLCBoYW5kbGVyKSB7XG4gICAgbGV0IGhhbmRsZXJzID0gdGhpcy5oYW5kbGVyc0J5Tm9kZS5nZXQobm9kZSlcbiAgICBpZiAoIWhhbmRsZXJzKSB7XG4gICAgICBoYW5kbGVycyA9IG5ldyBTZXQoKVxuICAgICAgdGhpcy5oYW5kbGVyc0J5Tm9kZS5zZXQobm9kZSwgaGFuZGxlcnMpXG4gICAgICB0aGlzLm9ic2VydmVyPy5vYnNlcnZlKG5vZGUsIHRoaXMub3B0aW9ucylcbiAgICAgIHRoaXMubm9kZUNvdW50KytcbiAgICB9XG4gICAgaGFuZGxlcnMuYWRkKGhhbmRsZXIpXG4gIH1cblxuICB1bm9ic2VydmUobm9kZSwgaGFuZGxlcikge1xuICAgIGNvbnN0IGhhbmRsZXJzID0gdGhpcy5oYW5kbGVyc0J5Tm9kZS5nZXQobm9kZSlcbiAgICBpZiAoaGFuZGxlcnM/LmRlbGV0ZShoYW5kbGVyKSAmJiBoYW5kbGVycy5zaXplID09PSAwKSB7XG4gICAgICB0aGlzLmhhbmRsZXJzQnlOb2RlLmRlbGV0ZShub2RlKVxuICAgICAgdGhpcy5vYnNlcnZlcj8udW5vYnNlcnZlKG5vZGUpXG4gICAgICBpZiAoLS10aGlzLm5vZGVDb3VudCA9PT0gMCkge1xuICAgICAgICBkZWxldGUgb2JzZXJ2ZXJzW3RoaXMua2V5XVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGhhbmRsZShlbnRyaWVzKSB7XG4gICAgZm9yIChjb25zdCBlbnRyeSBvZiBlbnRyaWVzKSB7XG4gICAgICBjb25zdCBoYW5kbGVycyA9IHRoaXMuaGFuZGxlcnNCeU5vZGUuZ2V0KGVudHJ5LnRhcmdldClcbiAgICAgIGlmIChoYW5kbGVycykge1xuICAgICAgICBjb25zdCBldmVudCA9IHtcbiAgICAgICAgICB0YXJnZXQ6IGVudHJ5LnRhcmdldCxcbiAgICAgICAgICBjb250ZW50UmVjdDogZW50cnkuY29udGVudFJlY3QsXG4gICAgICAgICAgLy8gVXNlIGBhc0FycmF5YCBzaW5jZSBGaXJlZm94IGJlZm9yZSB2OTIgcmV0dXJucyB0aGVzZSBhcyBvYmplY3RzOlxuICAgICAgICAgIGJvcmRlckJveFNpemU6IGFzQXJyYXkoZW50cnkuYm9yZGVyQm94U2l6ZSksXG4gICAgICAgICAgY29udGVudEJveFNpemU6IGFzQXJyYXkoZW50cnkuY29udGVudEJveFNpemUpLFxuICAgICAgICAgIGRldmljZVBpeGVsQ29udGVudEJveFNpemU6IGFzQXJyYXkoZW50cnkuZGV2aWNlUGl4ZWxDb250ZW50Qm94U2l6ZSlcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGNvbnN0IGhhbmRsZXIgb2YgaGFuZGxlcnMpIHtcbiAgICAgICAgICBoYW5kbGVyKGV2ZW50KVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIGdldE9ic2VydmVyKHsgYm94ID0gJ2NvbnRlbnQtYm94JyB9ID0ge30pIHtcbiAgICBjb25zdCBvcHRpb25zID0geyBib3ggfVxuICAgIGNvbnN0IGtleSA9IEpTT04uc3RyaW5naWZ5KG9wdGlvbnMpXG4gICAgb2JzZXJ2ZXJzW2tleV0gfHw9IG5ldyBPYnNlcnZlcihrZXksIG9wdGlvbnMpXG4gICAgcmV0dXJuIG9ic2VydmVyc1trZXldXG4gIH1cbn1cbiIsImV4cG9ydCBkZWZhdWx0IFtcbiAgJ2NyZWF0ZScsICdjcmVhdGVkJyxcbiAgJ3NhdmUnLCAnc2F2ZWQnLFxuICAnYXBwbHknLCAnYXBwbGllZCcsXG4gICdzdWJtaXQnLCAnc3VibWl0dGVkJyxcbiAgJ2RlbGV0ZScsICdkZWxldGVkJyxcbiAgJ3JlbW92ZScsICdyZW1vdmVkJyxcbiAgJ2NsZWFyJywgJ2NsZWFyZWQnLFxuICAnZWRpdCcsICdlZGl0ZWQnLFxuICAnY2xvc2UnLCAnY2xvc2VkJyxcbiAgJ2NhbmNlbCcsICdjYW5jZWxsZWQnLFxuICAnZHJhZycsICdkcmFnZ2VkJyxcbiAgJ2xvZ2luJywgJ2xvZ2dlZCBpbidcbl0ucmVkdWNlKCh2ZXJicywgdmVyYikgPT4ge1xuICB2ZXJic1t2ZXJiXSA9IHZlcmJcbiAgcmV0dXJuIHZlcmJzXG59LCB7fSlcbiIsImltcG9ydCB7IGNyZWF0ZUFwcCwgaCBhcyBjcmVhdGVFbGVtZW50IH0gZnJvbSAndnVlJ1xuaW1wb3J0IHsgY3JlYXRlUm91dGVyLCBjcmVhdGVXZWJIaXN0b3J5IH0gZnJvbSAndnVlLXJvdXRlcidcbmltcG9ydCBWdWVOb3RpZmljYXRpb25zIGZyb20gJ0BreXZnL3Z1ZTMtbm90aWZpY2F0aW9uJ1xuaW1wb3J0IHtcbiAgaXNTdHJpbmcsXG4gIGlzQWJzb2x1dGVVcmwsXG4gIGFzc2lnbkRlZXBseSxcbiAgaHlwaGVuYXRlLFxuICBjYW1lbGl6ZSxcbiAgZGVmYXVsdEZvcm1hdHMsXG4gIGRlcHJlY2F0ZVxufSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0ICogYXMgY29tcG9uZW50cyBmcm9tICcuL2NvbXBvbmVudHMvaW5kZXguanMnXG5pbXBvcnQgKiBhcyB0eXBlcyBmcm9tICcuL3R5cGVzL2luZGV4LmpzJ1xuaW1wb3J0IERpdG9Sb290IGZyb20gJy4vY29tcG9uZW50cy9EaXRvUm9vdC52dWUnXG5pbXBvcnQgRGl0b1R5cGVDb21wb25lbnQgZnJvbSAnLi9EaXRvVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCBSZXNpemVEaXJlY3RpdmUgZnJvbSAnLi9kaXJlY3RpdmVzL3Jlc2l6ZS5qcydcbmltcG9ydCB7IGdldFJlc291cmNlIH0gZnJvbSAnLi91dGlscy9yZXNvdXJjZS5qcydcbmltcG9ydCB7IGZvcm1hdFF1ZXJ5IH0gZnJvbSAnLi91dGlscy9yb3V0ZS5qcydcbmltcG9ydCB2ZXJicyBmcm9tICcuL3ZlcmJzLmpzJ1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEaXRvQWRtaW4ge1xuICBjb25zdHJ1Y3RvcihlbCwge1xuICAgIC8vIGBkaXRvYCBjb250YWlucyB0aGUgYmFzZSBhbmQgYXBpIHNldHRpbmdzIHBhc3NlZCBmcm9tIGBBZG1pbkNvbnRyb2xsZXJgXG4gICAgZGl0byA9IHt9LFxuICAgIGFwaSxcbiAgICB2aWV3cyA9IHt9LFxuICAgIC4uLm9wdGlvbnNcbiAgfSA9IHt9KSB7XG4gICAgdGhpcy5lbCA9IGVsXG4gICAgLy8gTWVyZ2UgaW4gYGFwaWAgc2V0dGluZ3MgYXMgcGFzc2VkIGZyb20gYGNvbmZpZy5hZG1pbmAgYW5kIHRocm91Z2ggdGhlXG4gICAgLy8gYEFkbWluQ29udHJvbGxlcmAgd2l0aCBgYXBpYCB2YWx1ZXMgZnJvbSBmcm9tICdhZG1pbi9pbmRleC5qcydcbiAgICAvLyBOT1RFOiBgQWRtaW5Db250cm9sbGVyYCBwcm92aWRlcyBgZGl0by5hcGkuYmFzZWBcbiAgICB0aGlzLmFwaSA9IGFwaSA9IGFzc2lnbkRlZXBseSh7IGJhc2U6ICcvJyB9LCBkaXRvLmFwaSwgYXBpKVxuICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnNcblxuICAgIC8vIFNldHVwIGRlZmF1bHQgYXBpIHNldHRpbmdzOlxuICAgIGFwaS5sb2NhbGUgfHw9ICdlbi1VUydcbiAgICBhcGkuZm9ybWF0cyA9IGFzc2lnbkRlZXBseSh7fSwgZGVmYXVsdEZvcm1hdHMsIGFwaS5mb3JtYXRzKVxuICAgIGFwaS5yZXF1ZXN0IHx8PSBvcHRpb25zID0+IHJlcXVlc3QoYXBpLCBvcHRpb25zKVxuICAgIGFwaS5nZXRBcGlVcmwgfHw9IG9wdGlvbnMgPT4gZ2V0QXBpVXJsKGFwaSwgb3B0aW9ucylcbiAgICBhcGkuaXNBcGlVcmwgfHw9IHVybCA9PiBpc0FwaVVybChhcGksIHVybClcbiAgICAvLyBTZXR0aW5nIGBhcGkubm9ybWFsaXplUGF0aHMgPSB0cnVlIChwbHVyYWwpIHNldHMgYm90aDpcbiAgICAvLyBgYXBpLm5vcm1hbGl6ZVBhdGggPSBoeXBoZW5hdGVgIGFuZCBgYXBpLmRlbm9ybWFsaXplUGF0aCA9IGNhbWVsaXplYFxuICAgIGFwaS5ub3JtYWxpemVQYXRoIHx8PSBhcGkubm9ybWFsaXplUGF0aHMgPyBoeXBoZW5hdGUgOiB2YWwgPT4gdmFsXG4gICAgYXBpLmRlbm9ybWFsaXplUGF0aCB8fD0gYXBpLm5vcm1hbGl6ZVBhdGhzID8gY2FtZWxpemUgOiB2YWwgPT4gdmFsXG5cbiAgICAvLyBBbGxvdyBkZWZpbml0aW9uIG9mIGRlZmF1bHRzIGZvciBhZG1pbiBjb21wb25lbnQgdHlwZXMsIG5lc3RlZCBwZXIgdHlwZTpcbiAgICAvLyBhcGkuZGVmYXVsdHMgPSB7XG4gICAgLy8gICAnbXVsdGlzZWxlY3QnOiB7XG4gICAgLy8gICAgIHNlbGVjdGFibGU6IHRydWVcbiAgICAvLyAgIH0sXG4gICAgLy8gICAnZmFrZS10eXBlJzogc2NoZW1hID0+IHtcbiAgICAvLyAgICAgLy8gUmV0dXJuIGRlZmF1bHRzLCBvciBkaXJlY3RseSBtb2RpZnkgdGhlIHNjaGVtYTpcbiAgICAvLyAgICAgT2JqZWN0LmFzc2lnbihzY2hlbWEsIHtcbiAgICAvLyAgICAgICB0eXBlOiAncmVhbC10eXBlJyxcbiAgICAvLyAgICAgICBmb3JtYXQ6ICh7IHZhbHVlIH0pID0+IGBGb3JtYXR0ZWQgJHt2YWx1ZX1gLFxuICAgIC8vICAgICAgIHByb2Nlc3M6ICh7IHZhbHVlIH0pID0+IGBQcm9jZXNzZWQgJHt2YWx1ZX1gXG4gICAgLy8gICAgIH0pXG4gICAgLy8gICB9XG4gICAgLy8gfVxuXG4gICAgYXBpLmRlZmF1bHRzIHx8PSB7fVxuXG4gICAgLy8gQWxsb3cgdGhlIGNvbmZpZ3VyYXRpb24gb2YgYWxsIGF1dGggcmVzb3VyY2VzLCBsaWtlIHNvOlxuICAgIC8vIGFwaS51c2VycyA9IHtcbiAgICAvLyAgIHBhdGg6ICcvYWRtaW5zJyxcbiAgICAvLyAgIC8vIFRoZXNlIGFyZSB0aGUgZGVmYXVsdHM6XG4gICAgLy8gICBsb2dpbjoge1xuICAgIC8vICAgICBwYXRoOiAnbG9naW4nLFxuICAgIC8vICAgICBtZXRob2Q6ICdwb3N0J1xuICAgIC8vICAgfSxcbiAgICAvLyAgIGxvZ291dDoge1xuICAgIC8vICAgICBwYXRoOiAnbG9nb3V0JyxcbiAgICAvLyAgICAgbWV0aG9kOiAncG9zdCdcbiAgICAvLyAgIH0sXG4gICAgLy8gICBzZXNzaW9uOiB7XG4gICAgLy8gICAgIHBhdGg6ICdzZXNzaW9uJyxcbiAgICAvLyAgICAgbWV0aG9kOiAnZ2V0J1xuICAgIC8vICAgfVxuICAgIC8vIH1cbiAgICBjb25zdCB1c2VycyA9IGdldFJlc291cmNlKGFwaS51c2Vycywge1xuICAgICAgdHlwZTogJ2NvbGxlY3Rpb24nXG4gICAgfSkgfHwge31cbiAgICB1c2Vycy5sb2dpbiA9IGdldFJlc291cmNlKHVzZXJzLmxvZ2luIHx8ICdsb2dpbicsIHtcbiAgICAgIG1ldGhvZDogJ3Bvc3QnLFxuICAgICAgcGFyZW50OiB1c2Vyc1xuICAgIH0pXG4gICAgdXNlcnMubG9nb3V0ID0gZ2V0UmVzb3VyY2UodXNlcnMubG9nb3V0IHx8ICdsb2dvdXQnLCB7XG4gICAgICBtZXRob2Q6ICdwb3N0JyxcbiAgICAgIHBhcmVudDogdXNlcnNcbiAgICB9KVxuICAgIHVzZXJzLnNlc3Npb24gPSBnZXRSZXNvdXJjZSh1c2Vycy5zZXNzaW9uIHx8ICdzZXNzaW9uJywge1xuICAgICAgbWV0aG9kOiAnZ2V0JyxcbiAgICAgIHBhcmVudDogdXNlcnNcbiAgICB9KVxuICAgIGFwaS51c2VycyA9IHVzZXJzXG5cbiAgICAvLyBBbGxvdyBvdmVycmlkaW5nIG9mIHJlc291cmNlIHBhdGggaGFuZGxlcnM6XG4gICAgLy8gYXBpLnJlc291cmNlcyA9IHtcbiAgICAvLyAgIGNvbGxlY3Rpb24ocmVzb3VyY2UpIHtcbiAgICAvLyAgICAgcmV0dXJuIHJlc291cmNlLnBhcmVudFxuICAgIC8vICAgICAgID8gYCR7cmVzb3VyY2UucGF0aH0/JHtyZXNvdXJjZS5wYXJlbnQucGF0aH1faWQ9JHtcbiAgICAvLyAgICAgICAgICByZXNvdXJjZS5wYXJlbnQuaWR9YFxuICAgIC8vICAgICAgIDogcmVzb3VyY2UucGF0aFxuICAgIC8vICAgfVxuICAgIC8vIH1cblxuICAgIGFwaS5yZXNvdXJjZXMgPSB7XG4gICAgICBhbnkocmVzb3VyY2UpIHtcbiAgICAgICAgY29uc3QgaGFuZGxlciA9IHRoaXNbcmVzb3VyY2U/LnR5cGVdIHx8IHRoaXMuZGVmYXVsdFxuICAgICAgICByZXR1cm4gcmVzb3VyY2UgJiYgaGFuZGxlci5jYWxsKHRoaXMsIHJlc291cmNlKVxuICAgICAgfSxcblxuICAgICAgZGVmYXVsdChyZXNvdXJjZSkge1xuICAgICAgICBjb25zdCBwYXJlbnRQYXRoID0gdGhpcy5hbnkocmVzb3VyY2UucGFyZW50KVxuICAgICAgICByZXR1cm4gcGFyZW50UGF0aFxuICAgICAgICAgID8gYCR7cGFyZW50UGF0aH0vJHtyZXNvdXJjZS5wYXRofWBcbiAgICAgICAgICA6IHJlc291cmNlLnBhdGhcbiAgICAgIH0sXG5cbiAgICAgIGNvbGxlY3Rpb24ocmVzb3VyY2UpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdChyZXNvdXJjZSlcbiAgICAgIH0sXG5cbiAgICAgIG1lbWJlcihyZXNvdXJjZSkge1xuICAgICAgICAvLyBOT1RFOiBXZSBhc3N1bWUgdGhhdCBhbGwgbWVtYmVycyBoYXZlIHJvb3QtbGV2ZWwgY29sbGVjdGlvbiByb3V0ZXMsXG4gICAgICAgIC8vIHRvIGF2b2lkIGV4Y2Vzc2l2ZSBuZXN0aW5nIG9mIChzdWItKWNvbGxlY3Rpb24gcm91dGVzLlxuICAgICAgICByZXR1cm4gYCR7cmVzb3VyY2UucGF0aH0vJHtyZXNvdXJjZS5pZH1gXG4gICAgICB9LFxuXG4gICAgICB1cGxvYWQocmVzb3VyY2UpIHtcbiAgICAgICAgLy8gRGl0byBTZXJ2ZXIgaGFuZGxlcyB1cGxvYWQgcm91dGVzIG9uIHRoZSBjb2xsZWN0aW9uIHJlc291cmNlOlxuICAgICAgICByZXR1cm4gYCR7dGhpcy5jb2xsZWN0aW9uKHJlc291cmNlLnBhcmVudCl9L3VwbG9hZC8ke3Jlc291cmNlLnBhdGh9YFxuICAgICAgfSxcblxuICAgICAgLi4uYXBpLnJlc291cmNlc1xuICAgIH1cblxuICAgIC8vIEFsbG93IG92ZXJyaWRpbmcgLyBleHRlbmRpbmcgb2YgaGVhZGVyczpcbiAgICAvLyBhcGkuaGVhZGVycyA9IHtcbiAgICAvLyAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbidcbiAgICAvLyB9XG4gICAgYXBpLmhlYWRlcnMgPSB7XG4gICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgLi4uYXBpLmhlYWRlcnNcbiAgICB9XG5cbiAgICBpZiAoaXNTdHJpbmcoZWwpKSB7XG4gICAgICBlbCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoZWwpXG4gICAgfVxuXG4gICAgY29uc3QgYXBwID0gKHRoaXMuYXBwID0gY3JlYXRlQXBwKHtcbiAgICAgIGNvbXBvbmVudHM6IHtcbiAgICAgICAgRGl0b1Jvb3QsXG4gICAgICAgIFZ1ZU5vdGlmaWNhdGlvbnMsXG4gICAgICAgIC8vIFRoaXMgbWF5IG9ubHkgYmUgbmVlZGVkIHRvIGF2b2lkIHRyZWUtc2hhY2tpbmcgb2YgdGhlc2UgY29tcG9uZW50cyxcbiAgICAgICAgLy8gc2luY2UgdGhleSBhY3R1YWxseSBoYW5kbGUgcmVnaXN0cnkgaW50ZXJuYWxseSBhbHJlYWR5LlxuICAgICAgICAvLyBUT0RPOiBSZW1vdmUgdGhpcyBvbmNlIHdlIGhhdmUgYSBiZXR0ZXIgc29sdXRpb24uXG4gICAgICAgIC4uLmNvbXBvbmVudHMsXG4gICAgICAgIC4uLnR5cGVzXG4gICAgICB9LFxuXG4gICAgICAvLyBNb3N0IGluamVjdHMgYXJlIGRlZmluZWQgYXMgZnVuY3Rpb25zLCB0byBwcmVzZXJ2ZSByZWFjdGl2ZW5lc3MgYWNyb3NzXG4gICAgICAvLyBwcm92aWRlL2luamVjdCwgc2VlOlxuICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3Z1ZWpzL3Z1ZS9pc3N1ZXMvNzAxNyNpc3N1ZWNvbW1lbnQtNDgwOTA2NjkxXG4gICAgICBwcm92aWRlOiB7XG4gICAgICAgIGFwaSxcbiAgICAgICAgLy8gQSBkZWZhdWx0IGxpc3Qgb2YgdmVyYnMgYXJlIHByb3ZpZGVkIGJ5ICR2ZXJicygpIGFuZCBjYW4gYmVcbiAgICAgICAgLy8gb3ZlcnJpZGRlbiBhdCBhbnkgcG9pbnQgaW4gdGhlIGNvbXBvbmVudCBoaWVyYXJjaHkuXG4gICAgICAgICR2ZXJiczogKCkgPT4gdmVyYnMsXG4gICAgICAgIC8vIFByb3ZpZGUgZGVmYXVsdHMgc28gRGl0b01peGluIGNhbiBpbmplY3QgdGhlbSBmb3IgYWxsIGNvbXBvbmVudHM6XG4gICAgICAgIC8vICAgaW5qZWN0OiBbICAnJGlzUG9wdWxhdGVkJywgJyRzY2hlbWFDb21wb25lbnQnLCAnJHJvdXRlQ29tcG9uZW50JyBdXG4gICAgICAgICR2aWV3czogKCkgPT4ge30sXG4gICAgICAgICRpc1BvcHVsYXRlZDogKCkgPT4gdHJ1ZSxcbiAgICAgICAgJHBhcmVudENvbXBvbmVudDogKCkgPT4gbnVsbCxcbiAgICAgICAgJHNjaGVtYUNvbXBvbmVudDogKCkgPT4gbnVsbCxcbiAgICAgICAgJHNjaGVtYVBhcmVudENvbXBvbmVudDogKCkgPT4gbnVsbCxcbiAgICAgICAgJHJvdXRlQ29tcG9uZW50OiAoKSA9PiBudWxsLFxuICAgICAgICAkZGF0YUNvbXBvbmVudDogKCkgPT4gbnVsbCxcbiAgICAgICAgJHNvdXJjZUNvbXBvbmVudDogKCkgPT4gbnVsbCxcbiAgICAgICAgJHJlc291cmNlQ29tcG9uZW50OiAoKSA9PiBudWxsLFxuICAgICAgICAkZGlhbG9nQ29tcG9uZW50OiAoKSA9PiBudWxsLFxuICAgICAgICAkcGFuZWxDb21wb25lbnQ6ICgpID0+IG51bGwsXG4gICAgICAgICR0YWJDb21wb25lbnQ6ICgpID0+IG51bGxcbiAgICAgIH0sXG5cbiAgICAgIHJlbmRlcjogKCkgPT5cbiAgICAgICAgY3JlYXRlRWxlbWVudChEaXRvUm9vdCwge1xuICAgICAgICAgIHJlZjogJ3Jvb3QnLFxuICAgICAgICAgIGNsYXNzOiBkaXRvLnNldHRpbmdzLnJvb3RDbGFzcyxcbiAgICAgICAgICB1bnJlc29sdmVkVmlld3M6IHZpZXdzLFxuICAgICAgICAgIG9wdGlvbnNcbiAgICAgICAgfSlcbiAgICB9KSlcblxuICAgIC8vIFByZXZlbnQgZW5kbGVzcyBsb29wcyBvZiBlcnJvciBtZXNzYWdlcyBkdXJpbmcgcmVuZGVyIGZ1bmN0aW9ucyBieVxuICAgIC8vIHNldHRpbmcgYSBjdXN0b20gZXJyb3IgaGFuZGxlci5cbiAgICBhcHAuY29uZmlnLmVycm9ySGFuZGxlciA9IGNvbnNvbGUuZXJyb3JcblxuICAgIGFwcC51c2UoVnVlTm90aWZpY2F0aW9ucywge1xuICAgICAgY29tcG9uZW50TmFtZTogJ1Z1ZU5vdGlmaWNhdGlvbnMnLFxuICAgICAgbmFtZTogJ25vdGlmeSdcbiAgICB9KVxuXG4gICAgYXBwLmRpcmVjdGl2ZSgncmVzaXplJywgUmVzaXplRGlyZWN0aXZlKVxuXG4gICAgYXBwLnVzZShcbiAgICAgIGNyZWF0ZVJvdXRlcih7XG4gICAgICAgIC8vIFN0YXJ0IHdpdGggYSBjYXRjaC1hbGwgcm91dGUsIHRvIGJlIHJlcGxhY2VkIGJ5IHRoZSBhY3R1YWwgcm91dGVzXG4gICAgICAgIC8vIG9uY2UgdGhlIHNjaGVtYXMgYXJlIGxvYWRlZCwgdG8gcHJldmVudCB2dWUtcm91dGVyIGZyb20gY29tcGxhaW5pbmcsXG4gICAgICAgIC8vIHNlZTogYHJlc29sdmVWaWV3cygpYCBpbiBgRGl0b1Jvb3RgIGZvciB0aGUgYWN0dWFsIHJvdXRlIHNldHVwLlxuICAgICAgICByb3V0ZXM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiAnY2F0Y2gtYWxsJyxcbiAgICAgICAgICAgIHBhdGg6ICcvOl8oLiopJyxcbiAgICAgICAgICAgIGNvbXBvbmVudHM6IHt9XG4gICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICBoaXN0b3J5OiBjcmVhdGVXZWJIaXN0b3J5KGRpdG8uYmFzZSksXG4gICAgICAgIGxpbmtBY3RpdmVDbGFzczogJycsXG4gICAgICAgIGxpbmtFeGFjdEFjdGl2ZUNsYXNzOiAnJ1xuICAgICAgfSlcbiAgICApXG5cbiAgICBlbC5jbGFzc0xpc3QuYWRkKCdkaXRvLWFwcCcpXG4gICAgYXBwLm1vdW50KGVsKVxuICB9XG5cbiAgcmVnaXN0ZXIodHlwZSwgb3B0aW9ucykge1xuICAgIHJldHVybiBEaXRvVHlwZUNvbXBvbmVudC5yZWdpc3Rlcih0eXBlLCBvcHRpb25zKVxuICB9XG59XG5cbmNsYXNzIFJlcXVlc3RFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgY29uc3RydWN0b3IocmVzcG9uc2UpIHtcbiAgICBzdXBlcihcbiAgICAgIGBSZXF1ZXN0IGZhaWxlZCB3aXRoIHN0YXR1cyBjb2RlOiAke3Jlc3BvbnNlLnN0YXR1c30gKCR7XG4gICAgICAgIHJlc3BvbnNlLnN0YXR1c1RleHRcbiAgICAgIH0pYFxuICAgIClcbiAgICB0aGlzLnJlc3BvbnNlID0gcmVzcG9uc2VcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiByZXF1ZXN0KGFwaSwge1xuICB1cmwsXG4gIG1ldGhvZCA9ICdnZXQnLFxuICAvLyBUT0RPOiBgcmVxdWVzdC5wYXJhbXNgIHdhcyBkZXByZWNhdGVkIGluIGZhdm91ciBvZiBgcXVlcnlgIG9uIDIwMjItMTEtMDEsXG4gIC8vIHJlbW92ZSBvbmNlIG5vdCBpbiB1c2UgYW55d2hlcmUgYW55IG1vcmUuXG4gIHBhcmFtcyA9IG51bGwsXG4gIHF1ZXJ5ID0gcGFyYW1zIHx8IG51bGwsXG4gIGhlYWRlcnMgPSBudWxsLFxuICBkYXRhID0gbnVsbCxcbiAgc2lnbmFsID0gbnVsbFxufSkge1xuICBpZiAocGFyYW1zKSB7XG4gICAgZGVwcmVjYXRlKFxuICAgICAgYHJlcXVlc3QucGFyYW1zIGlzIGRlcHJlY2F0ZWQuIFVzZSBhY3Rpb24ubWV0aG9kIGFuZCBhY3Rpb24ucGF0aCBpbnN0ZWFkLmBcbiAgICApXG4gIH1cblxuICBjb25zdCBpc0FwaVVybCA9IGFwaS5pc0FwaVVybCh1cmwpXG5cbiAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaChhcGkuZ2V0QXBpVXJsKHsgdXJsLCBxdWVyeSB9KSwge1xuICAgIG1ldGhvZDogbWV0aG9kLnRvVXBwZXJDYXNlKCksXG4gICAgLi4uKGRhdGEgJiYgeyBib2R5OiBKU09OLnN0cmluZ2lmeShkYXRhKSB9KSxcbiAgICBoZWFkZXJzOiB7XG4gICAgICAuLi4oaXNBcGlVcmwgJiYgYXBpLmhlYWRlcnMpLFxuICAgICAgLi4uaGVhZGVyc1xuICAgIH0sXG4gICAgY3JlZGVudGlhbHM6XG4gICAgICBpc0FwaVVybCAmJiBhcGkuY29ycz8uY3JlZGVudGlhbHNcbiAgICAgICAgPyAnaW5jbHVkZSdcbiAgICAgICAgOiAnc2FtZS1vcmlnaW4nLFxuICAgIHNpZ25hbFxuICB9KVxuXG4gIGlmIChyZXNwb25zZS5oZWFkZXJzLmdldCgnQ29udGVudC1UeXBlJyk/LmluY2x1ZGVzKCdhcHBsaWNhdGlvbi9qc29uJykpIHtcbiAgICByZXNwb25zZS5kYXRhID0gYXdhaXQgcmVzcG9uc2UuanNvbigpXG4gIH1cblxuICBpZiAoIXJlc3BvbnNlLm9rKSB7XG4gICAgdGhyb3cgbmV3IFJlcXVlc3RFcnJvcihyZXNwb25zZSlcbiAgfVxuICByZXR1cm4gcmVzcG9uc2Vcbn1cblxuZnVuY3Rpb24gaXNBcGlVcmwoYXBpLCB1cmwpIHtcbiAgcmV0dXJuICFpc0Fic29sdXRlVXJsKHVybCkgfHwgdXJsLnN0YXJ0c1dpdGgoYXBpLnVybClcbn1cblxuZnVuY3Rpb24gZ2V0QXBpVXJsKGFwaSwgeyB1cmwsIHF1ZXJ5IH0pIHtcbiAgaWYgKCF1cmwuc3RhcnRzV2l0aChhcGkudXJsKSAmJiAhaXNBYnNvbHV0ZVVybCh1cmwpKSB7XG4gICAgdXJsID0gY29tYmluZVVybHMoYXBpLnVybCwgdXJsKVxuICB9XG4gIC8vIFN1cHBvcnQgb3B0aW9uYWwgcXVlcnkgcGFyYW1ldGVycywgdG8gYmUgYXJlIGFkZGVkIHRvIHRoZSBVUkwuXG4gIGNvbnN0IHNlYXJjaCA9IGZvcm1hdFF1ZXJ5KHF1ZXJ5KVxuICByZXR1cm4gc2VhcmNoID8gYCR7dXJsfSR7dXJsLmluY2x1ZGVzKCc/JykgPyAnJicgOiAnPyd9JHtzZWFyY2h9YCA6IHVybFxufVxuXG5mdW5jdGlvbiBjb21iaW5lVXJscyhiYXNlVXJsLCByZWxhdGl2ZVVybCkge1xuICAvLyBVc2Ugc2FtZSBhcHByb2FjaCBhcyBheGlvcyBgY29tYmluZVVSTHMoKWAgdG8gam9pbiBiYXNlVXJsICYgcmVsYXRpdmVVcmw6XG4gIHJldHVybiBgJHtiYXNlVXJsLnJlcGxhY2UoL1xcLyskLywgJycpfS8ke3JlbGF0aXZlVXJsLnJlcGxhY2UoL15cXC8rLywgJycpfWBcbn1cbiJdLCJuYW1lcyI6WyJwYXJzZVVzZXJBZ2VudCIsInVzZXJBZ2VudCIsImFnZW50IiwidWEiLCJvcyIsInBsYXRmb3JtIiwibWF0Y2giLCJicm93c2VyIiwidjEiLCJ2MiIsInJ2IiwidmVyc2lvbiIsImFwcFN0YXRlIiwicmVhY3RpdmUiLCJhcHBlbmREYXRhUGF0aCIsImRhdGFQYXRoIiwidG9rZW4iLCJwYXJzZVBhcmVudERhdGFQYXRoIiwicGF0aCIsInBhcnNlRGF0YVBhdGgiLCJwYXJzZUl0ZW1EYXRhUGF0aCIsIm5lc3RlZCIsImdldEl0ZW1EYXRhUGF0aCIsIm5vcm1hbGl6ZURhdGFQYXRoIiwicGFyc2VQYXJlbnRJdGVtRGF0YVBhdGgiLCJpc0ludGVnZXIiLCJnZXRQYXJlbnRJdGVtRGF0YVBhdGgiLCJnZXRJdGVtIiwicm9vdEl0ZW0iLCJnZXRWYWx1ZUF0RGF0YVBhdGgiLCJnZXRQYXJlbnRJdGVtIiwiZ2V0TGFzdERhdGFQYXRoVG9rZW4iLCJnZXRMYXN0RGF0YVBhdGhOYW1lIiwiZ2V0TGFzdERhdGFQYXRoSW5kZXgiLCJpbmRleCIsInRlbXBvcmFyeUlkIiwic2V0VGVtcG9yYXJ5SWQiLCJkYXRhIiwiaWRLZXkiLCJpc1RlbXBvcmFyeUlkIiwiaWQiLCJpc1JlZmVyZW5jZSIsImhhc093blByb3BlcnR5IiwiY29udGV4dHMiLCJnZXQiLCJjb250ZXh0Iiwia2V5IiwiZGVmYXVsdFZhbHVlIiwib2JqZWN0IiwidG9SYXciLCJ2YWx1ZSIsImlzRnVuY3Rpb24iLCJzZXQiLCJEaXRvQ29udGV4dCIsImNvbXBvbmVudCIsIml0ZW0iLCJvcHRpb25zIiwibG9jYXRpb24iLCJyZXNvdXJjZSIsIkVtaXR0ZXJNaXhpbiIsImV2ZW50IiwiY2FsbGJhY2siLCJpc0FycmF5IiwiZXYiLCJpc1BsYWluT2JqZWN0IiwibGlzdGVuZXJzIiwiY2FsbGJhY2tzIiwib24iLCJhcmdzIiwiZW50cnkiLCJfYSIsImNiIiwicXVldWUiLCJyZXNvbHZlIiwibmV4dCIsInJlc3VsdCIsInJlcyIsImVycm9yIiwidGFyZ2V0IiwiY3JlZGl0Y2FyZCIsImlzQ3JlZGl0Q2FyZCIsImRlY2ltYWxzIiwiZW1haWwiLCJpc0VtYWlsIiwiaG9zdG5hbWUiLCJpc0hvc3RuYW1lIiwiZG9tYWluIiwiaXNEb21haW4iLCJpbnRlZ2VyIiwibWF4IiwibWluIiwicGFzc3dvcmQiLCJyYW5nZSIsInJlcXVpcmVkIiwic2V0dGluZ3MiLCJ1cmwiLCJpc1VybCIsIlZhbGlkYXRpb25NaXhpbiIsIm5vdGlmeSIsImlzVmFsaWQiLCJydWxlIiwic2V0dGluZyIsInZhbGlkYXRvciIsInZhbGlkYXRpb25zIiwidmFsaWRhdGUiLCJtZXNzYWdlIiwiYWRkTGFiZWwiLCJlcnJvcnMiLCJmb2N1cyIsImdldFNjaGVtYUFjY2Vzc29yIiwia2V5T3JEYXRhUGF0aCIsInR5cGUiLCJkZWYiLCJpc1N0cmluZyIsIm5hbWUiLCJnZXRTdG9yZUFjY2Vzc29yIiwiVHlwZU1peGluIiwiY29tcHV0ZVZhbHVlIiwiZm9ybWF0IiwicGFyc2UiLCJzY2hlbWFDb21wb25lbnQiLCJub2RlIiwiZXZlbnRzIiwiY2FtZWxpemUiLCJuYXRpdmVGaWVsZCIsInRleHRGaWVsZCIsImF0dHJpYnV0ZXMiLCJhZGQiLCJvbkZvY3VzIiwib25CbHVyIiwib25JbnB1dCIsIm9uQ2hhbmdlIiwiX2IiLCJlbGVtZW50IiwiYXNBcnJheSIsInVpZE1hcCIsInVpZCIsImdldFVpZCIsImdldEl0ZW1JZCIsInJhdyIsIlNjaGVtYUdyYXBoIiwiX19wdWJsaWNGaWVsZCIsImRlZmF1bHRzIiwic3ViR3JhcGgiLCJwYXJ0Iiwic2NoZW1hIiwicmVsYXRlZERhdGFQYXRoIiwibmFub2lkIiwiZmxhdHRlbiIsImdyYXBoIiwiZW50cmllcyIsIiRzZXR0aW5ncyIsInN1YktleSIsInNvdXJjZVNjaGVtYSIsImNsaXBib2FyZCIsImludGVybmFsIiwicmVsYXRlZCIsInJlZmVyZW5jZSIsInNvdXJjZSIsInJlbGF0aW9uIiwidmFsdWVzIiwicmVtb3ZlSWQiLCJyZWZlcmVuY2VJZCIsInJlZktleSIsInJldlZhbHVlIiwidHlwZUNoZWNrZXJzIiwiaXNCb29sZWFuIiwiaXNOdW1iZXIiLCJpc0RhdGUiLCJpc09iamVjdCIsImlzUmVnRXhwIiwidG9Cb29sZWFuIiwidG9OdW1iZXIiLCJ0b1N0cmluZyIsInRvRGF0ZSIsInRvQXJyYXkiLCJ0b09iamVjdCIsInRvUmVnRXhwIiwidHlwZUNvbnZlcnRlcnMiLCJpc01hdGNoaW5nVHlwZSIsInR5cGVzIiwiY29udmVydFR5cGUiLCJjb252ZXJ0ZXIiLCJ0eXBlQ29tcG9uZW50cyIsInVua25vd25UeXBlUmVwb3J0ZWQiLCJyZWdpc3RlclR5cGVDb21wb25lbnQiLCJnZXRUeXBlQ29tcG9uZW50IiwiYWxsb3dOdWxsIiwiaXRlcmF0ZVNjaGVtYUNvbXBvbmVudHMiLCJzY2hlbWFzIiwiaXNTaW5nbGVDb21wb25lbnRWaWV3IiwiaXNTY2hlbWEiLCJpdGVyYXRlTmVzdGVkU2NoZW1hQ29tcG9uZW50cyIsImdldFRhYlNjaGVtYXMiLCJmaW5kTmVzdGVkU2NoZW1hQ29tcG9uZW50Iiwic29tZU5lc3RlZFNjaGVtYUNvbXBvbmVudCIsImhhc05lc3RlZFNjaGVtYUNvbXBvbmVudHMiLCJpc0Zvcm0iLCJpc1ZpZXciLCJpc1RhYiIsImlzUGFuZWwiLCJpc01lbnUiLCJnZXRTY2hlbWFJZGVudGlmaWVyIiwicmVzb2x2ZVNjaGVtYSIsInVud3JhcE1vZHVsZSIsImlzUHJvbWlzZSIsImlzTW9kdWxlIiwia2V5cyIsInJlc29sdmVTY2hlbWFzIiwidW5yZXNvbHZlZFNjaGVtYXMiLCJyZXNvbHZlSXRlbSIsIm1hcENvbmN1cnJlbnRseSIsInJlc29sdmVWaWV3cyIsInVucmVzb2x2ZWRWaWV3cyIsImZsYXR0ZW5WaWV3cyIsInZpZXdzIiwicmVzb2x2ZVNjaGVtYUNvbXBvbmVudCIsIm1hcmtSYXciLCJEaXRvTWl4aW4iLCJyZXNvbHZlU2NoZW1hQ29tcG9uZW50cyIsInByb2Nlc3NTY2hlbWFDb21wb25lbnRzIiwiYXBpIiwicm91dGVzIiwibGV2ZWwiLCJwcm9taXNlcyIsInByb2Nlc3MiLCJyZWxhdGl2ZUxldmVsIiwicHJvY2Vzc1NjaGVtYUNvbXBvbmVudCIsImdldFBhbmVsU2NoZW1hcyIsInByb2Nlc3NTY2hlbWFEZWZhdWx0cyIsInBhbmVsIiwiZ2V0VHlwZU9wdGlvbnMiLCJwcm9jZXNzVmlldyIsImZ1bGxQYXRoIiwicHJvY2Vzc1JvdXRlU2NoZW1hIiwiY2hpbGRyZW4iLCJwcm9jZXNzTmVzdGVkU2NoZW1hcyIsImFzc2lnbkRlZXBseSIsInByb2Nlc3NOZXN0ZWRTY2hlbWFEZWZhdWx0cyIsImZvcm1zIiwiZ2V0Rm9ybVNjaGVtYXMiLCJmb3JtIiwicHJvY2Vzc0Zvcm1zIiwiY29tcG9uZW50cyIsInByb2Nlc3NGb3JtIiwicHJvY2Vzc1RhYiIsInByb2Nlc3NQYW5lbCIsInRhYnMiLCJwYW5lbHMiLCJ0YWIiLCJoYXNGb3JtU2NoZW1hIiwiaGFzTXVsdGlwbGVGb3JtU2NoZW1hcyIsImdldFZpZXdGb3JtU2NoZW1hIiwidmlldyIsInZpZXdTY2hlbWEiLCJnZXRWaWV3U2NoZW1hIiwiaGFzVmlld1NjaGVtYSIsImdldFZpZXdFZGl0UGF0aCIsIm1vZGlmeUZvcm0iLCJjb21wYWN0IiwiZ2V0SXRlbUZvcm1TY2hlbWFGcm9tRm9ybXMiLCJnZXRJdGVtRm9ybVNjaGVtYSIsImlzQ29tcGFjdCIsImlzSW5saW5lZCIsImlzTmVzdGVkIiwiaGFzTGFiZWwiLCJnZW5lcmF0ZUxhYmVscyIsImxhYmVsIiwib21pdFNwYWNpbmciLCJnZXRTY2hlbWFWYWx1ZSIsImNvbnZlcnRlZCIsInNob3VsZFJlbmRlclNjaGVtYSIsImdldERlZmF1bHRWYWx1ZSIsImNsb25lIiwiaWdub3JlTWlzc2luZ1ZhbHVlIiwidHlwZU9wdGlvbnMiLCJzZXREZWZhdWx0VmFsdWVzIiwicHJvY2Vzc1NjaGVtYURhdGEiLCJyb290RGF0YSIsImNvbXB1dGUiLCJjbG9uZUl0ZW0iLCJjb3B5Iiwib3JkZXJLZXkiLCJwcm9jZXNzRGF0YSIsInNjaGVtYU9ubHkiLCJwcm9jZXNzZWREYXRhIiwid3JhcFByaW1pdGl2ZXMiLCJhIiwiYiIsImlkMSIsImlkMiIsImV4Y2x1ZGUiLCJnZXRDb250ZXh0IiwicHJvY2Vzc1ZhbHVlIiwicHJvY2Vzc0JlZm9yZSIsInByb2Nlc3NBZnRlciIsInByb2Nlc3NDb21wb25lbnRzIiwiZ2V0RGF0YVBhdGgiLCJjb21wb25lbnRTY2hlbWEiLCJjb21wb25lbnREYXRhUGF0aCIsInByb2Nlc3NJdGVtIiwiaXRlbURhdGFQYXRoIiwicHJvY2Vzc2VkSXRlbSIsImdldE5hbWVkU2NoZW1hcyIsImFycmF5IiwidG9TY2hlbWEiLCJnZXRCdXR0b25TY2hlbWFzIiwiYnV0dG9ucyIsImdldFR5cGUiLCJzY2hlbWFPclR5cGUiLCJnZXRTb3VyY2VUeXBlIiwiZ2V0UGFuZWxFbnRyeSIsInRhYkNvbXBvbmVudCIsImdldFBhbmVsRW50cmllcyIsInBhbmVsU2NoZW1hcyIsInBhbmVsRW50cmllcyIsImdldEFsbFBhbmVsRW50cmllcyIsInBhbmVsU2NoZW1hIiwiaXNPYmplY3RTb3VyY2UiLCJpc0xpc3RTb3VyY2UiLCJnZXRJdGVtVWlkIiwiaGFzUmVzb3VyY2UiLCJnZXRSZXNvdXJjZSIsInBhcmVudCIsImRlZnMiLCJnZXRNZW1iZXJSZXNvdXJjZSIsInBpY2tCeSIsInNlbGYiLCJuZXh0VWlkIiwibGFiZWxpemUiLCJzdG9yZSIsIm9sZEtleSIsInZlcmIiLCJxdWVyeSIsIm1ldGhvZCIsInNpZ25hbCIsImNoZWNrVXNlciIsInJlc3BvbnNlIiwiZXF1YWxzIiwiY2FjaGUiLCJjYWNoZVBhcmVudCIsImxvYWRDYWNoZSIsImNhY2hlS2V5IiwibG9jYWxlIiwiYm9keSIsImdldENvbXB1dGVkQWNjZXNzb3IiLCJnZXR0ZXIiLCJjb21wdXRlZCIsImFjY2Vzc29yIiwid2F0Y2giLCJoYW5kbGVycyIsImV4cHIiLCJhZGRFdmVudCIsImh5cGhlbmF0ZSIsImhhc0xpc3RlbmVycyIsInBhcmVudEhhc0xpc3RlbmVycyIsInBhcmFtcyIsInJlc29sdmVNZXJnZWRPcHRpb25zIiwibWl4aW5zIiwibWVyZ2VPcHRpb25zIiwidG8iLCJmcm9tIiwibWl4aW4iLCJkaXRvT3B0aW9uS2V5cyIsIkRpdG9Db21wb25lbnQiLCJkZWZpbml0aW9uIiwiZGVzY3JpYmVEYXRlIiwiZGF0ZSIsImFsdGVyRGF0ZSIsIm92ZXJyaWRlcyIsInBhcnNlRGF0ZSIsInN0cmluZyIsInRpbWUiLCJ0aW1lRGVmYXVsdCIsImRheSIsInNlcDEiLCJtb250aCIsInNlcDIiLCJ5ZWFyIiwiaG91ciIsIm1pbnV0ZSIsInNlY29uZCIsIm1pbGxpc2Vjb25kIiwiZ2V0RGF0ZVBhcnRzIiwiZ2V0TW9udGhJbmRleCIsImlzVmFsaWRUaW1lUGFydCIsImdldERhdGVQYXJ0QXRQb3NpdGlvbiIsInBvc2l0aW9uIiwicGFydHMiLCJnZXRQb3NpdGlvbiIsImxlbmd0aCIsInBvcyIsIm9mZnNldCIsImlzVVMiLCJzdGFydCIsImVuZCIsInNob3J0Rm9ybWF0IiwibG9uZ0Zvcm1hdCIsIl9zZmNfbWFpbiIsIndlZWtkYXlOYW1lcyIsIm1vbnRoTmFtZXMiLCJnZXRMb2NhbGVOYW1lcyIsIm1vZGUiLCJ1cGRhdGUiLCJzdGVwIiwiY3VycmVudFZhbHVlIiwiZW50ZXIiLCJzdGFydFllYXIiLCJpIiwiZmlyc3REYXlXZWVrIiwibnVtRGF5cyIsInByZXZNb250aCIsInByZXZNb250aE51bURheXMiLCJub3ciLCJpc0RheSIsInN0YXRlIiwibmV4dE1vbnRoTmVlZCIsIm5leHRNb250aCIsImxvY2FsZU5hbWVzIiwibmFtZXMiLCJhZGRFdmVudHMiLCJ0YXJnZXRzIiwiaGFuZGxlciIsImNvbWJpbmVFdmVudHMiLCJnZXRLZXkiLCJnZXRLZXlOYXZpZ2F0aW9uIiwiZ2V0VGFyZ2V0IiwiY2xhc3NlcyIsInNob3ciLCJ0cmlnZ2VyIiwicG9wdXAiLCJfYyIsImVsIiwiYm91bmRzIiwidHJpZ2dlckxlZnQiLCJ0cmlnZ2VyVG9wIiwidHJpZ2dlcldpZHRoIiwidHJpZ2dlckhlaWdodCIsInBvcHVwV2lkdGgiLCJwb3B1cEhlaWdodCIsInBhcnQxIiwicGFydDIiLCJ3aW5XaWR0aCIsIndpbkhlaWdodCIsImxlZnQiLCJ0b3AiLCJ0cmlnZ2VyQm91bmRzIiwiaW5wdXQiLCJfIiwic2l6ZSIsImdldExlbmd0aCIsIl9vcGVuQmxvY2siLCJfY3JlYXRlRWxlbWVudEJsb2NrIiwic2V0U2VsZWN0aW9uIiwiZ2V0U2VsZWN0aW9uIiwiVHJpZ2dlciIsIkNhbGVuZGFyIiwiSW5wdXRGaWVsZCIsIkljb24iLCJkZWZhdWx0Rm9ybWF0cyIsImdldERhdGVQYXJ0IiwiY2FsZW5kYXIiLCJ0b2dnbGUiLCJzZWxlY3Rpb24iLCJzbW9vdGgiLCJzY3JvbGwiLCJyZWYiLCJsaW5lSGVpZ2h0IiwiZGlzdGFuY2UiLCJjb3VudCIsImlzRGlnaXQiLCJjaGFyIiwiRGF0ZVBpY2tlciIsIlRpbWVQaWNrZXIiLCJ0cmFuc2l0aW9uIiwiZGlzYWJsZWQiLCJ0ZXh0Iiwic2hvd1ByZXYiLCJzaG93TmV4dCIsImN1cnJlbnRQYWdlIiwibnVtUGFnZXMiLCJzaG93TGVuZ3RoIiwicGFnZSIsImJ1dHRvbiIsImNoZWNrZWQiLCJ1bmNoZWNrZWQiLCJtb2RlbFZhbHVlIiwiVHJhbnNpdGlvbkhlaWdodCIsImVuYWJsZWQiLCJzbG90cyIsImNyZWF0ZUVsZW1lbnQiLCJUcmFuc2l0aW9uIiwicHJvcHMiLCJzZXRTdHlsZSIsInN0eWxlIiwibmV4dFRpbWVvdXQiLCJmb3JjZVJlcGFpbnQiLCJ3aWR0aCIsImhlaWdodCIsImhhc1ZOb2RlQ29udGVudCIsInZub2RlIiwiQ29tbWVudCIsImhhc1Nsb3RDb250ZW50Iiwic2xvdCIsInVzZVNsb3RzIiwiRG9tTWl4aW4iLCJyZW1vdmUiLCJEaXRvVXNlciIsInJvbGVzIiwicm9sZSIsIlNjaGVtYVBhcmVudE1peGluIiwic2NoZW1hQ29tcG9uZW50cyIsIlZhbGlkYXRvck1peGluIiwiaXQiLCJSb3V0ZU1peGluIiwicm91dGVDb21wb25lbnQiLCJtYXRjaGVkIiwicmVjb3JkIiwiYnJlYWRjcnVtYiIsInJvdXRlQ29tcG9uZW50cyIsIm9rIiwicmVjb3JkUGF0aCIsInJvb3RQYXRoIiwiZ2V0Q29tbW9uUHJlZml4IiwiaXNMb2FkaW5nIiwiVXNlRm9jdXNUcmFwIiwiZGVmaW5lQ29tcG9uZW50IiwidHJhcCIsImFjdGl2YXRlIiwiZGVhY3RpdmF0ZSIsInVucmVmRWxlbWVudCIsImNyZWF0ZUZvY3VzVHJhcCIsIm9uU2NvcGVEaXNwb3NlIiwiaCIsImRpYWxvZ0RhdGEiLCJEaXRvRGlhbG9nIiwicHJlZml4IiwidGlwcHlEZWxlZ2F0ZSIsImluc3RhbmNlIiwiZXJyIiwiZHJhZ0NvdW50IiwidXBsb2FkcyIsInRvZ2dsZURyb3BUYXJnZXRDbGFzcyIsInVwbG9hZCIsInNldERyYWdnaW5nRmlsZXMiLCJoYXNVcGxvYWRzIiwiY2FuRHJvcCIsInRpdGxlIiwicmVqZWN0IiwiZGlhbG9nSWQiLCJhZGRpdGlvbmFsQ29tcG9uZW50cyIsInJlZGlyZWN0QWZ0ZXJMb2dpbiIsImxvZ2luRGF0YSIsInVzZXIiLCJEaXRvVmlldyIsImFkZFJvdXRlcyIsInJvdXRlciIsInJlbW92ZXJzIiwicm91dGUiLCJzdWJNZW51Q2xhc3MiLCJmaXJzdENoaWxkIiwibG9nIiwic3RyaXBUYWdzIiwibm90aWZpY2F0aW9ucyIsImR1cmF0aW9uRmFjdG9yIiwiZHVyYXRpb24iLCJQdWxsZG93bk1peGluIiwic3RhcnRUaW1lIiwib3BlbiIsImNvbnRlbnQiLCJhc09iamVjdCIsIkl0ZW1NaXhpbiIsIml0ZW1JZCIsImV4dGVuZGVkIiwiaXRlbUxhYmVsIiwiZm9ybUxhYmVsIiwiZ2V0Rm9ybUxhYmVsIiwic3VmZml4IiwiY29sdW1ucyIsImhhZExhYmVsIiwic2VsZWN0ZWRUYWIiLCJmaXJzdCIsImRlZmF1bHRUYWIiLCJoYXNoIiwiZGF0YVBhdGhPck5hbWUiLCJzY3JvbGxDb250YWluZXIiLCJkaXNwYXRjaCIsImNvbXBvbmVudHNCeURhdGFQYXRoIiwiZGF0YVBhdGhzIiwiY2hlY2siLCJmaWVsZCIsInVubWF0Y2hlZCIsImVycnMiLCJmdWxsRGF0YVBhdGgiLCJkYXRhUGF0aFBhcnRzIiwiZm91bmQiLCJwcm9wZXJ0eSIsInN1YkNvbXBvbmVudHMiLCJwYW5lIiwicmVnaXN0cnkiLCJlbnRyaWVzQnlEYXRhUGF0aCIsIl93aXRoRGlyZWN0aXZlcyIsIl9GcmFnbWVudCIsIl9yZW5kZXJMaXN0IiwiX2N0eCIsIl9ob2lzdGVkXzEiLCJfY3JlYXRlQmxvY2siLCJfY29tcG9uZW50X0RpdG9Db250YWluZXIiLCJuZXN0ZWREYXRhUGF0aCIsIl9ob2lzdGVkXzIiLCJwb3NpdGlvbnMiLCJpc0xhc3RJblJvdyIsImZpbmROZXh0UG9zaXRpb24iLCJyb3dzIiwicm93IiwidmVydGljYWxMYWJlbHNCeUluZGljZXMiLCJoYXNMYWJlbHNJblJvdyIsImNvbnRhaW5lciIsInBhZGRpbmciLCJmb250U2l6ZSIsInBhcnNlRnJhY3Rpb24iLCJkaXZpZGVuZCIsImRpdmlzb3IiLCJhY2N1bXVsYXRlZEJhc2lzIiwiZmxleEJhc2lzIiwiY29tYmluZWRCYXNpcyIsImNhcGl0YWxpemUiLCJjbGlwYm9hcmREYXRhIiwicGFzdGUiLCIkc2NoZW1hIiwicmVwb3J0IiwianNvbiIsImRlaW5kZW50IiwiTG9hZGluZ01peGluIiwidXBkYXRlUm9vdCIsInVwZGF0ZVZpZXciLCJSZXNvdXJjZU1peGluIiwiYW1vdW50IiwidmVyYnMiLCJjbGVhciIsImxvYWRpbmdPcHRpb25zIiwiY29udHJvbGxlciIsInJlcXVlc3QiLCJzZXREYXRhIiwib25TdWNjZXNzIiwib25FcnJvciIsIm5vdGlmeVN1Y2Nlc3MiLCJub3RpZnlFcnJvciIsInJlc29sdmVQYXRoIiwiaXNDcmVhdGluZyIsInByb3ZpZGVzRGF0YSIsImRhdGFQYXJ0cyIsInBhdGhQYXJ0cyIsInJvdXRlUGFydHMiLCJsYXN0RGF0YVBhcnQiLCJsIiwiZGF0YVBhcnQiLCJwYXJhbSIsIm1haW5TY2hlbWFDb21wb25lbnQiLCJwcmVzZW50IiwiY2xvc2VGb3JtIiwiZ2V0VmVyYiIsImJ1dHRvblJlc291cmNlIiwic3VjY2VzcyIsIl9yZXNvdXJjZSIsIl9tZXRob2QiLCJEaXRvRm9ybSIsInRpcCIsInRpcHB5Iiwic2NvcGUiLCJQYWdpbmF0aW9uIiwiU29ydGFibGVNaXhpbiIsImZvcmNlRmFsbGJhY2siLCJvbGRJbmRleCIsIm5ld0luZGV4IiwibGlzdCIsInBhZ2luYXRpb25SYW5nZSIsIl9ub3JtYWxpemVTdHlsZSIsIl9jYWNoZSIsIl93aXRoTW9kaWZpZXJzIiwiJGV2ZW50IiwiX25vcm1hbGl6ZUNsYXNzIiwiX2NyZWF0ZUVsZW1lbnRWTm9kZSIsIl9ob2lzdGVkXzQiLCJfdG9EaXNwbGF5U3RyaW5nIiwiX2hvaXN0ZWRfNSIsIl9ob2lzdGVkXzciLCJfbWVyZ2VQcm9wcyIsIl9ob2lzdGVkXzgiLCJfY29tcG9uZW50X0RpdG9MYWJlbCIsIl9jcmVhdGVWTm9kZSIsIl9jb21wb25lbnRfRGl0b1RhYmxlQ2VsbCIsIl9jb21wb25lbnRfRGl0b0RyYWdnYWJsZSIsIl9jb21wb25lbnRfRGl0b1RyZWVJdGVtIiwiY2hpbGRyZW5TY2hlbWEiLCJjaGlsZHJlbkxpc3QiLCJlZGl0UGF0aCIsImNoaWxkcmVuT3BlbiIsIm51bUNoaWxkcmVuIiwiY3JlYXRhYmxlIiwiZWRpdGFibGUiLCJvcmRlciIsImNvbHVtbiIsInJlbmRlciIsImVzY2FwZUh0bWwiLCJUWVBFUyIsImZpbGUiLCJyZWFkZXIiLCJ1c2VTb3J0YWJsZSIsInNvcnRhYmxlIiwiZG9jdW1lbnQiLCJkZWZhdWx0RG9jdW1lbnQiLCJyZXNldE9wdGlvbnMiLCJkZWZhdWx0T3B0aW9ucyIsImUiLCJtb3ZlQXJyYXlFbGVtZW50IiwiU29ydGFibGUiLCJzdG9wIiwib3B0aW9uIiwidHJ5T25Nb3VudGVkIiwidHJ5T25TY29wZURpc3Bvc2UiLCJfdmFsdWVJc1JlZiIsImlzUmVmIiwidG9WYWx1ZSIsIm5leHRUaWNrIiwiVXNlU29ydGFibGUiLCJ1c2VWTW9kZWwiLCJEaXRvVk5vZGUiLCJEaXRvVHlwZUNvbXBvbmVudCQxIiwiRGl0b1R5cGVDb21wb25lbnQiLCJvbkNsaWNrIiwiRGF0YU1peGluIiwiYXN5bmNFbnRyeSIsInJlc29sdmVkRGF0YSIsImxvYWQiLCJ0aW1lciIsIk9wdGlvbnNNaXhpbiIsImNvbnZlcnRWYWx1ZSIsImNvbnZlcnQiLCJzZWFyY2giLCJmaWx0ZXIiLCJkZWJvdW5jZSIsImRlYm91bmNlQXN5bmMiLCJncm91cGVkIiwicmVzdWx0cyIsImdyb3VwIiwiZmluZE9wdGlvbiIsImdyb3VwQnkiLCJvcHRpb25WYWx1ZSIsIm9wdGlvbkxhYmVsIiwicHJvY2Vzc1JlbGF0ZSIsImZsYXNrIiwiQ29kZUZsYXNrIiwiY2hhbmdlZCIsImlnbm9yZVdhdGNoIiwiaWdub3JlVXBkYXRlIiwic2V0Q29kZSIsImNvZGUiLCJzZXRWYWx1ZSIsIlNrZXRjaFBpY2tlciIsInRpbnljb2xvciIsImNvbG9yIiwiRGF0ZVRpbWVQaWNrZXIiLCJmb3JtYXRzIiwiZm9ybWF0UXVlcnkiLCJ2YWwiLCJyZXBsYWNlUm91dGUiLCJTb3VyY2VNaXhpbiIsImRlZmF1bHRTb3J0IiwiZGlyZWN0aW9uIiwiZHJhZ2dhYmxlIiwiY29sbGFwc2libGUiLCJyZW1vdmVkIiwibGlzdERhdGEiLCJvbkNvbXBsZXRlIiwib3BlbmVkIiwiY2FsbE9uQ29tcGxldGUiLCJpbmxpbmVkIiwibWV0YSIsImZvcm1NZXRhIiwiY2hpbGRSb3V0ZXMiLCJzb3VyY2VQYXRoIiwiZm9ybVJvdXRlIiwiZ2V0UGF0aFdpdGhQYXJhbSIsImZsYXRSb3V0ZXMiLCJzdWJSb3V0ZXMiLCJjaGlsZFJvdXRlIiwiZmlsdGVyQ29tcG9uZW50cyIsImRhdGV0aW1lIiwiY3JlYXRlRmlsdGVyc1BhbmVsIiwiZmlsdGVycyIsInN0aWNreSIsImZpbHRlclNjaGVtYXMiLCJwYXJzZUZpbHRlcnNEYXRhIiwiY3JlYXRlRmlsdGVyc0NvbXBvbmVudHMiLCJjcmVhdGVGaWx0ZXJzQnV0dG9ucyIsImZvcm1hdEZpbHRlcnNEYXRhIiwic21hbGwiLCJnZXREYXRhTmFtZSIsImZpbHRlck5hbWUiLCJnZXRGaWx0ZXJOYW1lIiwiZGF0YU5hbWUiLCJjb21wcyIsImdldENvbXBvbmVudHNGb3JGaWx0ZXIiLCJmaWx0ZXJzRGF0YSIsIl9jb21wb25lbnRfRGl0b1RhYmxlSGVhZCIsIl9jb21wb25lbnRfRGl0b1NjaGVtYUlubGluZWQiLCJfcmVzb2x2ZUR5bmFtaWNDb21wb25lbnQiLCJfY29tcG9uZW50X0RpdG9FZGl0QnV0dG9ucyIsIl9ob2lzdGVkXzkiLCJvYmoiLCJmaWx0ZXJzRGF0YVBhdGgiLCJFZGl0b3JDb250ZW50IiwiZWRpdG9yIiwiZW5hYmxlUnVsZXMiLCJzZXRWYWx1ZURlYm91bmNlZCIsIm9uVXBkYXRlIiwiRWRpdG9yIiwiZ2V0UG9pbnQiLCJ4IiwieSIsInByZXZZIiwibW91c2Vtb3ZlIiwiZGlhbG9nQ29tcG9uZW50IiwiZ2V0TWFya0F0dHJpYnV0ZXMiLCJocmVmIiwibWFya3MiLCJub2RlcyIsInRvb2xzIiwiRG9jdW1lbnQiLCJUZXh0IiwiUGFyYWdyYXBoIiwiQm9sZCIsIkl0YWxpYyIsIlVuZGVybGluZSIsIlN0cmlrZSIsIlNtYWxsIiwiQ29kZSIsIkxpbmtXaXRoVGl0bGUiLCJCbG9ja3F1b3RlIiwiQ29kZUJsb2NrIiwiSGFyZEJyZWFrIiwiSGVhZGluZyIsIkhvcml6b250YWxSdWxlIiwiTGlzdEl0ZW0iLCJCdWxsZXRMaXN0IiwiT3JkZXJlZExpc3QiLCJIaXN0b3J5IiwiZXh0ZW5zaW9uIiwic2V0dGluZ3NOYW1lIiwiZGVzY3JpcHRpb25zIiwiY29tbWFuZHMiLCJhZGRCdXR0b24iLCJpY29uIiwiY29tbWFuZCIsImRlc2NyaXB0aW9uIiwic2V0dGluZ05hbWUiLCJhdHRyaWJ1dGUiLCJNYXJrIiwiTGluayIsIl9jb21wb25lbnRfVnVlTXVsdGlzZWxlY3QiLCJWdWVNdWx0aXNlbGVjdCIsInBsYWNlaG9sZGVyIiwic2VhcmNoYWJsZSIsInRhZ2dhYmxlIiwidGFnIiwiTnVtYmVyTWl4aW4iLCJTd2l0Y2hCdXR0b24iLCJUZXh0TWl4aW4iLCJtYXNrZWRQYXNzd29yZCIsImhhc0VkaXRhYmxlRm9ybXMiLCJmb3JtYXRGaWxlU2l6ZSIsImZpbGVzaXplIiwiVnVlVXBsb2FkIiwiYXNGaWxlcyIsImFjY2VwdCIsIm1heFNpemUiLCJwYXJzZUZpbGVTaXplIiwidGh1bWJuYWlscyIsInRvdGFsIiwicmVhZHkiLCJuZXdGaWxlIiwib2xkRmlsZSIsInhociIsImJsb2IiLCJmaWxlcyIsIlJlc2l6ZURpcmVjdGl2ZSIsImJpbmRpbmciLCJvYnNlcnZlUmVzaXplIiwidW5vYnNlcnZlUmVzaXplIiwiT2JzZXJ2ZXIiLCJpc1Jlc2l6ZVN1cHBvcnRlZCIsIm9ic2VydmVycyIsImJveCIsIkRpdG9BZG1pbiIsImRpdG8iLCJnZXRBcGlVcmwiLCJpc0FwaVVybCIsInVzZXJzIiwicGFyZW50UGF0aCIsImFwcCIsImNyZWF0ZUFwcCIsIkRpdG9Sb290IiwiVnVlTm90aWZpY2F0aW9ucyIsImNyZWF0ZVJvdXRlciIsImNyZWF0ZVdlYkhpc3RvcnkiLCJSZXF1ZXN0RXJyb3IiLCJoZWFkZXJzIiwiZGVwcmVjYXRlIiwiaXNBYnNvbHV0ZVVybCIsImNvbWJpbmVVcmxzIiwiYmFzZVVybCIsInJlbGF0aXZlVXJsIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFHTyxTQUFTQSxHQUFlQyxJQUFZLElBQUk7QUFDN0MsUUFBTUMsSUFBUSxDQUFFLEdBRVZDLElBQUtGLEVBQVUsWUFBYSxHQUM1QixDQUFDRyxDQUFFLElBQ1Asa0VBQWtFO0FBQUEsSUFDaEVEO0FBQUEsRUFDTixLQUFTLENBQUUsR0FDSEUsSUFDSjtBQUFBLElBQ0UsUUFBVTtBQUFBLElBQ1YsUUFBVTtBQUFBLElBQ1YsTUFBUTtBQUFBLElBQ1Isa0JBQWtCO0FBQUEsRUFDbkIsRUFBQ0QsQ0FBRSxLQUNKQTtBQUVGLFNBQUlDLE1BQ0ZILEVBQU0sV0FBV0csR0FDakJILEVBQU1HLENBQVEsSUFBSSxLQUVwQkYsRUFBRztBQUFBLElBQ0Q7QUFBQSxJQUNBLENBQUNHLEdBQU9DLEdBQVNDLEdBQUlDLEdBQUlDLE1BQU87QUFFOUIsVUFBSSxDQUFDUixFQUFNLFFBQVE7QUFDakIsY0FBTVMsSUFBVUQsS0FBTUQsS0FBTUQ7QUFDNUIsU0FBSSxDQUFDTixFQUFNLFdBQVdLLE1BQVksY0FHaENMLEVBQU0sVUFBVVMsR0FDaEJULEVBQU0sZ0JBQWdCLFdBQVdTLENBQU8sSUFF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
|
|
10995
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGl0by1hZG1pbi5lcy5qcyIsInNvdXJjZXMiOlsiLi4vc3JjL3V0aWxzL2FnZW50LmpzIiwiLi4vc3JjL2FwcFN0YXRlLmpzIiwiLi4vc3JjL3V0aWxzL2RhdGEuanMiLCIuLi9zcmMvRGl0b0NvbnRleHQuanMiLCIuLi9zcmMvbWl4aW5zL0VtaXR0ZXJNaXhpbi5qcyIsIi4uL3NyYy92YWxpZGF0aW9ucy9fY3JlZGl0Y2FyZC5qcyIsIi4uL3NyYy92YWxpZGF0aW9ucy9fZGVjaW1hbHMuanMiLCIuLi9zcmMvdmFsaWRhdGlvbnMvX2VtYWlsLmpzIiwiLi4vc3JjL3ZhbGlkYXRpb25zL19ob3N0bmFtZS5qcyIsIi4uL3NyYy92YWxpZGF0aW9ucy9fZG9tYWluLmpzIiwiLi4vc3JjL3ZhbGlkYXRpb25zL19pbnRlZ2VyLmpzIiwiLi4vc3JjL3ZhbGlkYXRpb25zL19tYXguanMiLCIuLi9zcmMvdmFsaWRhdGlvbnMvX21pbi5qcyIsIi4uL3NyYy92YWxpZGF0aW9ucy9fcGFzc3dvcmQuanMiLCIuLi9zcmMvdmFsaWRhdGlvbnMvX3JhbmdlLmpzIiwiLi4vc3JjL3ZhbGlkYXRpb25zL19yZXF1aXJlZC5qcyIsIi4uL3NyYy92YWxpZGF0aW9ucy9fdXJsLmpzIiwiLi4vc3JjL21peGlucy9WYWxpZGF0aW9uTWl4aW4uanMiLCIuLi9zcmMvdXRpbHMvYWNjZXNzb3IuanMiLCIuLi9zcmMvbWl4aW5zL1R5cGVNaXhpbi5qcyIsIi4uL3NyYy91dGlscy91aWQuanMiLCIuLi9zcmMvdXRpbHMvU2NoZW1hR3JhcGguanMiLCIuLi9zcmMvdXRpbHMvdHlwZS5qcyIsIi4uL3NyYy91dGlscy9zY2hlbWEuanMiLCIuLi9zcmMvdXRpbHMvcmVzb3VyY2UuanMiLCIuLi9zcmMvbWl4aW5zL0RpdG9NaXhpbi5qcyIsIi4uL3NyYy91dGlscy9vcHRpb25zLmpzIiwiLi4vc3JjL0RpdG9Db21wb25lbnQuanMiLCIuLi8uLi91aS9zcmMvdXRpbHMvZGF0ZS5qcyIsIi4uLy4uL3VpL3NyYy9jb21wb25lbnRzL0NhbGVuZGFyLnZ1ZSIsIi4uLy4uL3VpL3NyYy91dGlscy9ldmVudC5qcyIsIi4uLy4uL3VpL3NyYy91dGlscy90cmlnZ2VyLmpzIiwiLi4vLi4vdWkvc3JjL2NvbXBvbmVudHMvVHJpZ2dlci52dWUiLCIuLi8uLi91aS9zcmMvY29tcG9uZW50cy9JbnB1dEZpZWxkLnZ1ZSIsIi4uLy4uL3VpL3NyYy9jb21wb25lbnRzL0ljb24udnVlIiwiLi4vLi4vdWkvc3JjL3V0aWxzL3NlbGVjdGlvbi5qcyIsIi4uLy4uL3VpL3NyYy9jb21wb25lbnRzL0RhdGVQaWNrZXIudnVlIiwiLi4vLi4vdWkvc3JjL2NvbXBvbmVudHMvVGltZVBpY2tlci52dWUiLCIuLi8uLi91aS9zcmMvY29tcG9uZW50cy9EYXRlVGltZVBpY2tlci52dWUiLCIuLi8uLi91aS9zcmMvY29tcG9uZW50cy9QYWdpbmF0aW9uLnZ1ZSIsIi4uLy4uL3VpL3NyYy9jb21wb25lbnRzL1N3aXRjaEJ1dHRvbi52dWUiLCIuLi8uLi91aS9zcmMvdHJhbnNpdGlvbnMvVHJhbnNpdGlvbkhlaWdodC52dWUiLCIuLi8uLi91aS9zcmMvdXRpbHMvdnVlLmpzIiwiLi4vc3JjL21peGlucy9Eb21NaXhpbi5qcyIsIi4uL3NyYy9EaXRvVXNlci5qcyIsIi4uL3NyYy9taXhpbnMvU2NoZW1hUGFyZW50TWl4aW4uanMiLCIuLi9zcmMvbWl4aW5zL1ZhbGlkYXRvck1peGluLmpzIiwiLi4vc3JjL21peGlucy9Sb3V0ZU1peGluLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1ZpZXcudnVlIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0B2dWV1c2UvaW50ZWdyYXRpb25zL3VzZUZvY3VzVHJhcC9jb21wb25lbnQubWpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0RpYWxvZy52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvUm9vdC52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvTWVudS52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvVHJhaWwudnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0hlYWRlci52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvTmF2aWdhdGlvbi52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvTm90aWZpY2F0aW9ucy52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvU2lkZWJhci52dWUiLCIuLi9zcmMvbWl4aW5zL1B1bGxkb3duTWl4aW4uanMiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvQWNjb3VudC52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvRWxlbWVudC52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvTGFiZWwudnVlIiwiLi4vc3JjL21peGlucy9JdGVtTWl4aW4uanMiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvU2NoZW1hLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9TY2hlbWFJbmxpbmVkLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9QYW5lLnZ1ZSIsIi4uL3NyYy91dGlscy9tYXRoLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0NvbnRhaW5lci52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvVGFicy52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvUGFuZWwudnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1BhbmVscy52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvQnV0dG9ucy52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvRWRpdEJ1dHRvbnMudnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0NyZWF0ZUJ1dHRvbi52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvQ2xpcGJvYXJkLnZ1ZSIsIi4uL3NyYy9taXhpbnMvTG9hZGluZ01peGluLmpzIiwiLi4vc3JjL21peGlucy9SZXNvdXJjZU1peGluLmpzIiwiLi4vc3JjL3V0aWxzL3BhdGguanMiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvRm9ybS52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvRm9ybU5lc3RlZC52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvRXJyb3JzLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9TY29wZXMudnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1BhZ2luYXRpb24udnVlIiwiLi4vc3JjL21peGlucy9Tb3J0YWJsZU1peGluLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1RyZWVJdGVtLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9UYWJsZUhlYWQudnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1RhYmxlQ2VsbC52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvVXBsb2FkRmlsZS52dWUiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvQHZ1ZXVzZS9pbnRlZ3JhdGlvbnMvdXNlU29ydGFibGUvY29tcG9uZW50Lm1qcyIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9EcmFnZ2FibGUudnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1NwaW5uZXIudnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1ZOb2RlLnZ1ZSIsIi4uL3NyYy9EaXRvVHlwZUNvbXBvbmVudC5qcyIsIi4uL3NyYy90eXBlcy9EaXRvVHlwZUJ1dHRvbi52dWUiLCIuLi9zcmMvdHlwZXMvRGl0b1R5cGVDaGVja2JveC52dWUiLCIuLi9zcmMvbWl4aW5zL0RhdGFNaXhpbi5qcyIsIi4uL3NyYy9taXhpbnMvT3B0aW9uc01peGluLmpzIiwiLi4vc3JjL3R5cGVzL0RpdG9UeXBlQ2hlY2tib3hlcy52dWUiLCIuLi9zcmMvdHlwZXMvRGl0b1R5cGVDb2RlLnZ1ZSIsIi4uL3NyYy90eXBlcy9EaXRvVHlwZUNvbG9yLnZ1ZSIsIi4uL3NyYy90eXBlcy9EaXRvVHlwZUNvbXBvbmVudC52dWUiLCIuLi9zcmMvdHlwZXMvRGl0b1R5cGVDb21wdXRlZC52dWUiLCIuLi9zcmMvdHlwZXMvRGl0b1R5cGVEYXRlLnZ1ZSIsIi4uL3NyYy91dGlscy9yb3V0ZS5qcyIsIi4uL3NyYy9taXhpbnMvU291cmNlTWl4aW4uanMiLCIuLi9zcmMvdXRpbHMvZmlsdGVyLmpzIiwiLi4vc3JjL3R5cGVzL0RpdG9UeXBlTGlzdC52dWUiLCIuLi9zcmMvdHlwZXMvRGl0b1R5cGVMYWJlbC52dWUiLCIuLi9zcmMvdHlwZXMvRGl0b1R5cGVNYXJrdXAudnVlIiwiLi4vc3JjL3R5cGVzL0RpdG9UeXBlTXVsdGlzZWxlY3QudnVlIiwiLi4vc3JjL21peGlucy9OdW1iZXJNaXhpbi5qcyIsIi4uL3NyYy90eXBlcy9EaXRvVHlwZU51bWJlci52dWUiLCIuLi9zcmMvdHlwZXMvRGl0b1R5cGVPYmplY3QudnVlIiwiLi4vc3JjL3R5cGVzL0RpdG9UeXBlUGFuZWwudnVlIiwiLi4vc3JjL3R5cGVzL0RpdG9UeXBlUHJvZ3Jlc3MudnVlIiwiLi4vc3JjL3R5cGVzL0RpdG9UeXBlUmFkaW8udnVlIiwiLi4vc3JjL3R5cGVzL0RpdG9UeXBlU2VjdGlvbi52dWUiLCIuLi9zcmMvdHlwZXMvRGl0b1R5cGVTZWxlY3QudnVlIiwiLi4vc3JjL3R5cGVzL0RpdG9UeXBlU2xpZGVyLnZ1ZSIsIi4uL3NyYy90eXBlcy9EaXRvVHlwZVN3aXRjaC52dWUiLCIuLi9zcmMvbWl4aW5zL1RleHRNaXhpbi5qcyIsIi4uL3NyYy90eXBlcy9EaXRvVHlwZVRleHQudnVlIiwiLi4vc3JjL3R5cGVzL0RpdG9UeXBlVGV4dGFyZWEudnVlIiwiLi4vc3JjL3R5cGVzL0RpdG9UeXBlVHJlZUxpc3QudnVlIiwiLi4vc3JjL3V0aWxzL3VuaXRzLmpzIiwiLi4vc3JjL3R5cGVzL0RpdG9UeXBlVXBsb2FkLnZ1ZSIsIi4uL3NyYy9kaXJlY3RpdmVzL3Jlc2l6ZS5qcyIsIi4uL3NyYy92ZXJicy5qcyIsIi4uL3NyYy9EaXRvQWRtaW4uanMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gVGhpcyB1c2VyLWFnZW50IHBhcnNlciB3YXMgbGlmdGVkIGZyb20gUGFwZXIuanM6XG4vLyBodHRwczovL2dpdGh1Yi5jb20vcGFwZXJqcy9wYXBlci5qcy9ibG9iL2NjMTU2OTY3NTAwMzVhYjAwZTAwYzY0YzdjOTVkYWEyYzg1ZWZlMDEvc3JjL2NvcmUvUGFwZXJTY29wZS5qcyNMNzUtTDEwN1xuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VVc2VyQWdlbnQodXNlckFnZW50ID0gJycpIHtcbiAgY29uc3QgYWdlbnQgPSB7fVxuICAvLyBVc2UgcmVwbGFjZSgpIHRvIGdldCBhbGwgbWF0Y2hlcywgYW5kIGRlYWwgd2l0aCBDaHJvbWUvV2Via2l0IG92ZXJsYXA6XG4gIGNvbnN0IHVhID0gdXNlckFnZW50LnRvTG93ZXJDYXNlKClcbiAgY29uc3QgW29zXSA9XG4gICAgLyhpcGhvbmV8aXBhZHxsaW51eDsgYW5kcm9pZHxkYXJ3aW58d2lufG1hY3xsaW51eHxmcmVlYnNkfHN1bm9zKS8uZXhlYyhcbiAgICAgIHVhXG4gICAgKSB8fCBbXVxuICBjb25zdCBwbGF0Zm9ybSA9IChcbiAgICB7XG4gICAgICAnZGFyd2luJzogJ21hYycsXG4gICAgICAnaXBob25lJzogJ2lvcycsXG4gICAgICAnaXBhZCc6ICdpb3MnLFxuICAgICAgJ2xpbnV4OyBhbmRyb2lkJzogJ2FuZHJvaWQnXG4gICAgfVtvc10gfHxcbiAgICBvc1xuICApXG4gIGlmIChwbGF0Zm9ybSkge1xuICAgIGFnZW50LnBsYXRmb3JtID0gcGxhdGZvcm1cbiAgICBhZ2VudFtwbGF0Zm9ybV0gPSB0cnVlXG4gIH1cbiAgdWEucmVwbGFjZShcbiAgICAvKG9wZXJhfGNocm9tZXxzYWZhcml8d2Via2l0fGZpcmVmb3h8bXNpZXx0cmlkZW50KVxcLz9cXHMqKFsuXFxkXSspKD86Lip2ZXJzaW9uXFwvKFsuXFxkXSspKT8oPzouKnJ2OnY/KFsuXFxkXSspKT8vZyxcbiAgICAobWF0Y2gsIGJyb3dzZXIsIHYxLCB2MiwgcnYpID0+IHtcbiAgICAgIC8vIERvIG5vdCBzZXQgYWRkaXRpb25hbCBicm93c2VycyBvbmNlIGNocm9tZSBpcyBkZXRlY3RlZC5cbiAgICAgIGlmICghYWdlbnQuY2hyb21lKSB7XG4gICAgICAgIGNvbnN0IHZlcnNpb24gPSBydiB8fCB2MiB8fCB2MVxuICAgICAgICBpZiAoIWFnZW50LnZlcnNpb24gfHwgYnJvd3NlciAhPT0gJ3NhZmFyaScpIHtcbiAgICAgICAgICAvLyBVc2UgdGhlIHZlcnNpb24gd2UgZ2V0IGZvciB3ZWJraXQgZm9yIFNhZmFyaSwgd2hpY2ggaXMgYWN0dWFsbHlcbiAgICAgICAgICAvLyBUaGUgU2FmYXJpIHZlcnNpb24sIGUuZy4gMTYuMFxuICAgICAgICAgIGFnZW50LnZlcnNpb24gPSB2ZXJzaW9uXG4gICAgICAgICAgYWdlbnQudmVyc2lvbk51bWJlciA9IHBhcnNlRmxvYXQodmVyc2lvbilcbiAgICAgICAgfVxuICAgICAgICBhZ2VudC5icm93c2VyID0gYnJvd3NlclxuICAgICAgICBhZ2VudFticm93c2VyXSA9IHRydWVcbiAgICAgIH1cbiAgICB9XG4gIClcbiAgaWYgKGFnZW50LmNocm9tZSkge1xuICAgIC8vIENhbid0IGhhdmUgaXQgYm90aCB3YXlzLCBDaHJvbWUuXG4gICAgZGVsZXRlIGFnZW50LndlYmtpdFxuICB9XG4gIHJldHVybiBhZ2VudFxufVxuIiwiaW1wb3J0IHsgcmVhY3RpdmUgfSBmcm9tICd2dWUnXG5pbXBvcnQgeyBwYXJzZVVzZXJBZ2VudCB9IGZyb20gJy4vdXRpbHMvYWdlbnQnXG5cbmV4cG9ydCBkZWZhdWx0IHJlYWN0aXZlKHtcbiAgdGl0bGU6ICcnLFxuICByb3V0ZUNvbXBvbmVudHM6IFtdLFxuICB1c2VyOiBudWxsLFxuICBhZ2VudDogcGFyc2VVc2VyQWdlbnQobmF2aWdhdG9yLnVzZXJBZ2VudCB8fCAnJyksXG4gIGxvYWRDYWNoZToge30sIC8vIFNlZSBUeXBlTWl4aW4ubG9hZCgpXG4gIGFjdGl2ZUxhYmVsOiBudWxsLFxuICBjbGlwYm9hcmREYXRhOiBudWxsXG59KVxuIiwiaW1wb3J0IHtcbiAgaXNJbnRlZ2VyLFxuICBwYXJzZURhdGFQYXRoLFxuICBnZXRWYWx1ZUF0RGF0YVBhdGgsXG4gIG5vcm1hbGl6ZURhdGFQYXRoXG59IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbmV4cG9ydCBmdW5jdGlvbiBhcHBlbmREYXRhUGF0aChkYXRhUGF0aCwgdG9rZW4pIHtcbiAgcmV0dXJuIGRhdGFQYXRoXG4gICAgPyBgJHtkYXRhUGF0aH0vJHt0b2tlbn1gXG4gICAgOiB0b2tlblxufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VQYXJlbnREYXRhUGF0aChkYXRhUGF0aCkge1xuICBjb25zdCBwYXRoID0gcGFyc2VEYXRhUGF0aChkYXRhUGF0aClcbiAgcGF0aD8ucG9wKClcbiAgcmV0dXJuIHBhdGhcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFBhcmVudERhdGFQYXRoKGRhdGFQYXRoKSB7XG4gIHJldHVybiBub3JtYWxpemVEYXRhUGF0aChwYXJzZVBhcmVudERhdGFQYXRoKGRhdGFQYXRoKSlcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlSXRlbURhdGFQYXRoKGRhdGFQYXRoLCBuZXN0ZWQgPSBmYWxzZSkge1xuICByZXR1cm4gbmVzdGVkID8gcGFyc2VQYXJlbnREYXRhUGF0aChkYXRhUGF0aCkgOiBwYXJzZURhdGFQYXRoKGRhdGFQYXRoKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0SXRlbURhdGFQYXRoKGRhdGFQYXRoLCBuZXN0ZWQgPSBmYWxzZSkge1xuICByZXR1cm4gbm9ybWFsaXplRGF0YVBhdGgocGFyc2VJdGVtRGF0YVBhdGgoZGF0YVBhdGgsIG5lc3RlZCkpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVBhcmVudEl0ZW1EYXRhUGF0aChkYXRhUGF0aCwgbmVzdGVkID0gZmFsc2UpIHtcbiAgY29uc3QgcGF0aCA9IHBhcnNlSXRlbURhdGFQYXRoKGRhdGFQYXRoLCBuZXN0ZWQpXG4gIGlmIChwYXRoKSB7XG4gICAgLy8gUmVtb3ZlIHRoZSBwYXJlbnQgdG9rZW4uIElmIGl0J3MgYSBudW1iZXIsIHRoZW4gd2UncmUgZGVhbGluZyB3aXRoIGFuXG4gICAgLy8gYXJyYXkgYW5kIG5lZWQgdG8gcmVtb3ZlIG1vcmUgdG9rZW5zIHVudGlsIHdlIG1lZXQgdGhlIGFjdHVhbCBwYXJlbnQ6XG4gICAgbGV0IHRva2VuXG4gICAgZG8ge1xuICAgICAgdG9rZW4gPSBwYXRoLnBvcCgpXG4gICAgfSB3aGlsZSAodG9rZW4gIT0gbnVsbCAmJiBpc0ludGVnZXIoK3Rva2VuKSlcbiAgICAvLyBJZiB0aGUgcmVtb3ZlZCB0b2tlbiBpcyB2YWxpZCwgd2UgY2FuIGdldCB0aGUgcGFyZW50IGRhdGE6XG4gICAgaWYgKHRva2VuICE9IG51bGwpIHtcbiAgICAgIHJldHVybiBwYXRoXG4gICAgfVxuICB9XG4gIHJldHVybiBudWxsXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRQYXJlbnRJdGVtRGF0YVBhdGgoZGF0YVBhdGgsIG5lc3RlZCA9IGZhbHNlKSB7XG4gIHJldHVybiBub3JtYWxpemVEYXRhUGF0aChwYXJzZVBhcmVudEl0ZW1EYXRhUGF0aChkYXRhUGF0aCwgbmVzdGVkKSlcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEl0ZW0ocm9vdEl0ZW0sIGRhdGFQYXRoLCBuZXN0ZWQgPSBmYWxzZSkge1xuICBjb25zdCBwYXRoID0gcGFyc2VJdGVtRGF0YVBhdGgoZGF0YVBhdGgsIG5lc3RlZClcbiAgcmV0dXJuIHBhdGggPyBnZXRWYWx1ZUF0RGF0YVBhdGgocm9vdEl0ZW0sIHBhdGgpIDogbnVsbFxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UGFyZW50SXRlbShyb290SXRlbSwgZGF0YVBhdGgsIG5lc3RlZCA9IGZhbHNlKSB7XG4gIGNvbnN0IHBhdGggPSBwYXJzZVBhcmVudEl0ZW1EYXRhUGF0aChkYXRhUGF0aCwgbmVzdGVkKVxuICByZXR1cm4gcGF0aCA/IGdldFZhbHVlQXREYXRhUGF0aChyb290SXRlbSwgcGF0aCkgOiBudWxsXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRMYXN0RGF0YVBhdGhUb2tlbihkYXRhUGF0aCkge1xuICBjb25zdCBwYXRoID0gcGFyc2VEYXRhUGF0aChkYXRhUGF0aClcbiAgcmV0dXJuIHBhdGhbcGF0aC5sZW5ndGggLSAxXVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0TGFzdERhdGFQYXRoTmFtZShkYXRhUGF0aCkge1xuICBjb25zdCB0b2tlbiA9IGdldExhc3REYXRhUGF0aFRva2VuKGRhdGFQYXRoKVxuICByZXR1cm4gdG9rZW4gPT0gbnVsbCB8fCBpc0ludGVnZXIoK3Rva2VuKSA/IG51bGwgOiB0b2tlblxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0TGFzdERhdGFQYXRoSW5kZXgoZGF0YVBhdGgpIHtcbiAgY29uc3QgdG9rZW4gPSBnZXRMYXN0RGF0YVBhdGhUb2tlbihkYXRhUGF0aClcbiAgY29uc3QgaW5kZXggPSB0b2tlbiA9PSBudWxsID8gbnVsbCA6ICt0b2tlblxuICByZXR1cm4gaXNJbnRlZ2VyKGluZGV4KSA/IGluZGV4IDogbnVsbFxufVxuXG5sZXQgdGVtcG9yYXJ5SWQgPSAwXG5leHBvcnQgZnVuY3Rpb24gc2V0VGVtcG9yYXJ5SWQoZGF0YSwgaWRLZXkgPSAnaWQnKSB7XG4gIC8vIFRlbXBvcmFyeSBpZHMgYXJlIG1hcmtlZCB3aXRoIGEgJ0AnIGF0IHRoZSBiZWdpbm5pbmcuXG4gIGRhdGFbaWRLZXldID0gYEAkeysrdGVtcG9yYXJ5SWR9YFxufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNUZW1wb3JhcnlJZChpZCkge1xuICByZXR1cm4gL15ALy50ZXN0KGlkKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNSZWZlcmVuY2UoZGF0YSwgaWRLZXkgPSAnaWQnKSB7XG4gIC8vIFJldHVybnMgdHJ1ZSBpZiB2YWx1ZSBpcyBhbiBvYmplY3QgdGhhdCBob2xkcyBub3RoaW5nIG1vcmUgdGhhbiBhbiBpZC5cbiAgcmV0dXJuIGRhdGE/LltpZEtleV0gIT0gbnVsbCAmJiBPYmplY3Qua2V5cyhkYXRhKS5sZW5ndGggPT09IDFcbn1cbiIsImltcG9ydCB7IHRvUmF3IH0gZnJvbSAndnVlJ1xuaW1wb3J0IHsgaXNGdW5jdGlvbiB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQge1xuICBnZXRJdGVtRGF0YVBhdGgsXG4gIGdldFBhcmVudEl0ZW1EYXRhUGF0aCxcbiAgZ2V0UGFyZW50SXRlbSxcbiAgZ2V0SXRlbSxcbiAgZ2V0TGFzdERhdGFQYXRoTmFtZSxcbiAgZ2V0TGFzdERhdGFQYXRoSW5kZXhcbn0gZnJvbSAnLi91dGlscy9kYXRhLmpzJ1xuXG5jb25zdCB7IGhhc093blByb3BlcnR5IH0gPSBPYmplY3QucHJvdG90eXBlXG5cbi8vIGBEaXRvQ29udGV4dGAgaW5zdGFuY2VzIGFyZSBhIHRoaW4gd3JhcHBlciBhcm91bmQgcmF3IGBjb250ZXh0YCBvYmplY3RzLFxuLy8gd2hpY2ggdGhlbXNlbHZlcyBhY3R1YWxseSBpbmhlcml0IGZyb20gdGhlIGxpbmtlZCBgY29tcG9uZW50YCBpbnN0YW5jZSwgc29cbi8vIHRoYXQgdGhleSBvbmx5IG5lZWQgdG8gcHJvdmlkZSB0aGUgdmFsdWVzIHRoYXQgc2hvdWxkIGJlIGRpZmZlcmVudCB0aGFuXG4vLyBpbiB0aGUgdW5kZXJseWluZyBjb21wb25lbnQuIEluIG9yZGVyIHRvIG5vdCBleHBvc2UgYWxsIGZpZWxkcyBmcm9tIHRoZVxuLy8gY29tcG9uZW50LCB0aGUgd3JhcHBlciBpcyBpbnRyb2R1Y2VkOlxuLy8gVXNlIFdlYWtNYXAgZm9yIHRoZSByYXcgYGNvbnRleHRgIG9iamVjdHMsIHNvIHdlIGRvbid0IGhhdmUgdG8gcG9sbHV0ZSB0aGVcbi8vIGFjdHVhbCBgRGl0b0NvbnRleHRgIGluc3RhbmNlIHdpdGggaXQuXG5jb25zdCBjb250ZXh0cyA9IG5ldyBXZWFrTWFwKClcblxuZnVuY3Rpb24gZ2V0KGNvbnRleHQsIGtleSwgZGVmYXVsdFZhbHVlKSB7XG4gIGNvbnN0IG9iamVjdCA9IGNvbnRleHRzLmdldCh0b1Jhdyhjb250ZXh0KSlcbiAgY29uc3QgdmFsdWUgPSBrZXkgaW4gb2JqZWN0ID8gb2JqZWN0W2tleV0gOiB1bmRlZmluZWRcbiAgLy8gSWYgYG9iamVjdGAgZXhwbGljaXRseSBzZXRzIHRoZSBrZXkgdG8gYHVuZGVmaW5lZGAsIHJldHVybiBpdC5cbiAgcmV0dXJuIHZhbHVlICE9PSB1bmRlZmluZWQgfHwgaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIGtleSlcbiAgICA/IHZhbHVlXG4gICAgOiBpc0Z1bmN0aW9uKGRlZmF1bHRWYWx1ZSlcbiAgICAgID8gZGVmYXVsdFZhbHVlKClcbiAgICAgIDogZGVmYXVsdFZhbHVlXG59XG5cbmZ1bmN0aW9uIHNldChjb250ZXh0LCBrZXksIHZhbHVlKSB7XG4gIGNvbnRleHRzLmdldCh0b1Jhdyhjb250ZXh0KSlba2V5XSA9IHZhbHVlXG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERpdG9Db250ZXh0IHtcbiAgY29uc3RydWN0b3IoY29tcG9uZW50LCBjb250ZXh0KSB7XG4gICAgLy8gVXNlIHRoZSBwcm92aWRlZCBwYXJhbXMgb2JqZWN0IC8gZnVuY3Rpb24sIG9yIGNyZWF0ZSBhIG5ldyBvbmU6XG4gICAgY29udGV4dCA9IGNvbnRleHRcbiAgICAgID8gaXNGdW5jdGlvbihjb250ZXh0KVxuICAgICAgICA/IGNvbnRleHQoKVxuICAgICAgICA6IHsgLi4uY29udGV4dCB9XG4gICAgICA6IHt9XG4gICAgLy8gSWYgbm90IGV4cGxpY2l0bHkgc2V0ICh0byBmYWxzZSksIGRlZmF1bHQgdG8gdHJ1ZSBzbyB3ZSBkb24ndCBmYWxsIGJhY2tcbiAgICAvLyB0byBgY29tcG9uZW50YCBmb3IgaXRzIHZhbHVlLlxuICAgIGNvbnRleHQubmVzdGVkID8/PSB0cnVlXG4gICAgY29udGV4dC5jb21wb25lbnQgPSBjb21wb25lbnRcbiAgICAvLyBIYXZlIGBvYmplY3RgIGluaGVyaXQgZnJvbSB0aGUgYGNvbXBvbmVudGAgaW5zdGFuY2UsIHNvIGl0IGNhbiBvdmVycmlkZVxuICAgIC8vIGl0cyB2YWx1ZXMgYW5kIHN0aWxsIHJldHJpZXZlIGZyb20gaXQsIGFuZCBhc3NvY2lhdGUgaXQgd2l0aCBgdGhpc2BcbiAgICAvLyB0aHJvdWdoIGBjb250ZXh0c2AgbWFwOlxuICAgIGNvbnN0IG9iamVjdCA9IE9iamVjdC5zZXRQcm90b3R5cGVPZihjb250ZXh0LCBjb21wb25lbnQpXG4gICAgLy8gTm8gbmVlZCBmb3IgYHRvUmF3KHRoaXMpYCBoZXJlIGFzIGl0J3MgYWx3YXlzIHJhdyBpbnNpZGUgdGhlIGNvbnN0cnVjdG9yLlxuICAgIGNvbnRleHRzLnNldCh0aGlzLCBvYmplY3QpXG4gIH1cblxuICBzdGF0aWMgZ2V0KGNvbXBvbmVudCwgY29udGV4dCkge1xuICAgIHJldHVybiBjb250ZXh0IGluc3RhbmNlb2YgRGl0b0NvbnRleHRcbiAgICAgID8gY29udGV4dFxuICAgICAgOiBuZXcgRGl0b0NvbnRleHQoY29tcG9uZW50LCBjb250ZXh0KVxuICB9XG5cbiAgLy8gYG5lc3RlZGAgaXMgYHRydWVgIHdoZW4gdGhlIGRhdGEtcGF0aCBwb2ludHMgYSB2YWx1ZSBpbnNpZGUgYW4gaXRlbSwgYW5kXG4gIC8vIGBmYWxzZWAgd2hlbiBpdCBwb2ludHMgdG8gdGhlIGl0ZW0gaXRzZWxmLlxuICBnZXQgbmVzdGVkKCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ25lc3RlZCcsIHRydWUpXG4gIH1cblxuICBnZXQgc2NoZW1hKCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ3NjaGVtYScsIG51bGwpXG4gIH1cblxuICBnZXQgdmFsdWUoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAndmFsdWUnLCB1bmRlZmluZWQpXG4gIH1cblxuICBnZXQgZGF0YVBhdGgoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAnZGF0YVBhdGgnLCAnJylcbiAgfVxuXG4gIGdldCBuYW1lKCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ25hbWUnLCAoKSA9PiBnZXRMYXN0RGF0YVBhdGhOYW1lKHRoaXMuZGF0YVBhdGgpKVxuICB9XG5cbiAgZ2V0IGluZGV4KCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ2luZGV4JywgKCkgPT4gZ2V0TGFzdERhdGFQYXRoSW5kZXgodGhpcy5kYXRhUGF0aCkpXG4gIH1cblxuICBnZXQgaXRlbURhdGFQYXRoKCkge1xuICAgIHJldHVybiBnZXRJdGVtRGF0YVBhdGgodGhpcy5kYXRhUGF0aCwgdGhpcy5uZXN0ZWQpXG4gIH1cblxuICBnZXQgcGFyZW50SXRlbURhdGFQYXRoKCkge1xuICAgIHJldHVybiBnZXRQYXJlbnRJdGVtRGF0YVBhdGgodGhpcy5kYXRhUGF0aCwgdGhpcy5uZXN0ZWQpXG4gIH1cblxuICBnZXQgaXRlbUluZGV4KCkge1xuICAgIHJldHVybiBnZXRMYXN0RGF0YVBhdGhJbmRleCh0aGlzLml0ZW1EYXRhUGF0aClcbiAgfVxuXG4gIGdldCBwYXJlbnRJdGVtSW5kZXgoKSB7XG4gICAgcmV0dXJuIGdldExhc3REYXRhUGF0aEluZGV4KHRoaXMucGFyZW50SXRlbURhdGFQYXRoKVxuICB9XG5cbiAgLy8gTk9URTogV2hpbGUgaW50ZXJuYWxseSwgd2Ugc3BlYWsgb2YgYGRhdGFgLCBpbiB0aGUgQVBJIHN1cmZhY2UgdGhlXG4gIC8vIHRlcm0gYGl0ZW1gIGlzIHVzZWQgZm9yIHRoZSBkYXRhIHRoYXQgcmVsYXRlcyB0byBlZGl0aW5nIG9iamVjdHM6XG4gIC8vIElmIGBkYXRhYCBpc24ndCBwcm92aWRlZCwgd2UgY2FuIGRldGVybWluZSBpdCBmcm9tIHJvb3REYXRhICYgZGF0YVBhdGg6XG4gIGdldCBpdGVtKCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ2RhdGEnLCAoKSA9PlxuICAgICAgZ2V0SXRlbSh0aGlzLnJvb3RJdGVtLCB0aGlzLmRhdGFQYXRoLCB0aGlzLm5lc3RlZClcbiAgICApXG4gIH1cblxuICAvLyBOT1RFOiBgcGFyZW50SXRlbWAgaXNuJ3QgdGhlIGNsb3Nlc3QgZGF0YSBwYXJlbnQgdG8gYGl0ZW1gLCBpdCdzIHRoZVxuICAvLyBjbG9zZXN0IHBhcmVudCB0aGF0IGlzbid0IGFuIGFycmF5LCBlLmcuIGZvciByZWxhdGlvbnMgb3IgbmVzdGVkIEpTT04gZGF0YS5cbiAgLy8gVGhpcyBpcyB3aHkgdGhlIHRlcm0gYGl0ZW1gIHdhcyBjaG9zZW4gb3ZlciBgZGF0YWAsIGUuZy4gVlMgdGhlIHVzZSBvZlxuICAvLyBgcGFyZW50RGF0YWAgaW4gc2VydmVyLXNpZGVkIHZhbGlkYXRpb24sIHdoaWNoIGlzIHRoZSBjbG9zZXN0IHBhcmVudC4gSWZcbiAgLy8gbmVlZGVkLCB3ZSBjb3VsZCBleHBvc2UgdGhpcyBkYXRhIGhlcmUgdG9vLCBhcyB3ZSBjYW4gZG8gYWxsIHNvcnRzIG9mIGRhdGFcbiAgLy8gcHJvY2Vzc2luZyB3aXRoIGByb290RGF0YWAgYW5kIGBkYXRhUGF0aGAuXG4gIGdldCBwYXJlbnRJdGVtKCkge1xuICAgIGNvbnN0IGl0ZW0gPSAoXG4gICAgICBnZXRQYXJlbnRJdGVtKHRoaXMucm9vdEl0ZW0sIHRoaXMuZGF0YVBhdGgsIHRoaXMubmVzdGVkKSB8fFxuICAgICAgbnVsbFxuICAgIClcbiAgICByZXR1cm4gaXRlbSAhPT0gdGhpcy5pdGVtID8gaXRlbSA6IG51bGxcbiAgfVxuXG4gIGdldCByb290SXRlbSgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdyb290RGF0YScsIG51bGwpXG4gIH1cblxuICBnZXQgcHJvY2Vzc2VkSXRlbSgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdwcm9jZXNzZWREYXRhJywgbnVsbClcbiAgfVxuXG4gIGdldCBjbGlwYm9hcmRJdGVtKCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ2NsaXBib2FyZERhdGEnLCBudWxsKVxuICB9XG5cbiAgZ2V0IHVzZXIoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAndXNlcicsIG51bGwpXG4gIH1cblxuICBnZXQgYXBpKCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ2FwaScsIG51bGwpXG4gIH1cblxuICBnZXQgdmlld3MoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAndmlld3MnLCBudWxsKVxuICB9XG5cbiAgZ2V0IGZsYXR0ZW5lZFZpZXdzKCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ2ZsYXR0ZW5lZFZpZXdzJywgbnVsbClcbiAgfVxuXG4gIGdldCBpdGVtTGFiZWwoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAnaXRlbUxhYmVsJywgbnVsbClcbiAgfVxuXG4gIGdldCBmb3JtTGFiZWwoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAnZm9ybUxhYmVsJywgbnVsbClcbiAgfVxuXG4gIC8vIE5PVEU6IExpa2UgJ29wdGlvbnMnLCB0aGUgYXNzb2NpYXRlZCBjb21wb25lbnQgZG9lc24ndCBhbHdheXMgZXhpc3QsIGUuZy5cbiAgLy8gaW4gbmVzdGVkIGZvcm1zIGR1cmluZyBgcHJvY2Vzc0RhdGEoKWAuIEJ1dCBgc2NoZW1hYCBpcyBndWFyYW50ZWVkIHRvXG4gIC8vIGFsd2F5cyBiZSBhdmFpbGFibGUuXG4gIGdldCBjb21wb25lbnQoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAnY29tcG9uZW50JywgbnVsbClcbiAgfVxuXG4gIC8vIFRPRE86IEFkZCBgY29tcG9uZW50U2NoZW1hYCBnZXR0ZXIgZm9yIHRoZSBzY2hlbWEgb2YgdGhlIGN1cnJlbnQgY29tcG9uZW50LFxuICAvLyBldmVuIHdoZW4gdGhlIGNvbXBvbmVudCBpc24ndCBhY3R1YWxseSBpbnN0YW50aWF0ZWQuIENvbnNpZGVyIGFkZGluZ1xuICAvLyBgc291cmNlU2NoZW1hYCBhcyB3ZWxsP1xuXG4gIC8vIFRPRE86IEZpeCB1bmNsZWFyIG5hbWluZzogV2hpY2ggc2NoZW1hIGlzIHRoaXMsIHRoYXQgb2YgdGhlIGNvbXBvbmVudCBvciBvZlxuICAvLyBpdHMgcGFyZW50PyBJc24ndCBleHBvc2luZyBgZm9ybUNvbXBvbmVudGAgYW5kIGB2aWV3Q29tcG9uZW50YCBlbm91Z2gsIG9uY2VcbiAgLy8gd2Ugb2ZmZXIgYWNjZXNzIHRvIHRoZWlyIGNvbXBvbmVudHMgdGhlcmUgdGhyb3VnaCBgZ2V0Q29tcG9uZW50KClgICYgY28uIG9uXG4gIC8vIGBEaXRvTWl4aW5gIHBlcmhhcHM/ICBBbHNvLCB0aGVyZSBjb3VsZCBiZSBhIGB0YWJDb21wb25lbnRgIGdldHRlciBmb3JcbiAgLy8gc2NoZW1hcyBpbiB0YWJzP1xuICBnZXQgc2NoZW1hQ29tcG9uZW50KCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ3NjaGVtYUNvbXBvbmVudCcsIG51bGwpXG4gIH1cblxuICBnZXQgZm9ybUNvbXBvbmVudCgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdmb3JtQ29tcG9uZW50JywgbnVsbClcbiAgfVxuXG4gIGdldCB2aWV3Q29tcG9uZW50KCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ3ZpZXdDb21wb25lbnQnLCBudWxsKVxuICB9XG5cbiAgZ2V0IGRpYWxvZ0NvbXBvbmVudCgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdkaWFsb2dDb21wb25lbnQnLCBudWxsKVxuICB9XG5cbiAgZ2V0IHBhbmVsQ29tcG9uZW50KCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ3BhbmVsQ29tcG9uZW50JywgbnVsbClcbiAgfVxuXG4gIGdldCByZXNvdXJjZUNvbXBvbmVudCgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdyZXNvdXJjZUNvbXBvbmVudCcsIG51bGwpXG4gIH1cblxuICBnZXQgc291cmNlQ29tcG9uZW50KCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ3NvdXJjZUNvbXBvbmVudCcsIG51bGwpXG4gIH1cblxuICAvLyBXaGVuIHVzZWQgaW4gT3B0aW9uc01peGluIGZvciBgc2NoZW1hLm9wdGlvbnMudmFsdWUoKWAsXG4gIC8vIGBzY2hlbWEub3B0aW9ucy5sYWJlbCgpYCBhbmQgIGBzY2hlbWEuc2VhcmNoLmZpbHRlcigpYCBjYWxsYmFja3M6XG4gIGdldCBvcHRpb24oKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAnb3B0aW9uJywgdW5kZWZpbmVkKVxuICB9XG5cbiAgZ2V0IG9wdGlvbnMoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAnb3B0aW9ucycsIHVuZGVmaW5lZClcbiAgfVxuXG4gIGdldCBvcGVuKCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ29wZW4nLCB1bmRlZmluZWQpXG4gIH1cblxuICAvLyBUT0RPOiBSZW5hbWUgdGhpcyB0byBgc2VhcmNoVGVybWAgb3IgYHNlYXJjaFF1ZXJ5YCwgdG8gcGVyaGFwcyBmcmVlIGBxdWVyeWBcbiAgLy8gZm9yIHRoZSBhY3R1YWwgYHJlc291cmNlQ29tcG9uZW50LnF1ZXJ5YCBvYmplY3Q/XG4gIGdldCBxdWVyeSgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdxdWVyeScsIHVuZGVmaW5lZClcbiAgfVxuXG4gIC8vIFRoZSBlcnJvciBmaWVsZCBpcyBvbmx5IHBvcHVsYXRlZCBpbiB0aGUgY29udGV4dCBvZiBidXR0b25zIHRoYXQgc2VuZFxuICAvLyByZXF1ZXN0cywgc2VlIGBSZXNvdXJjZU1peGluLmVtaXRCdXR0b25FdmVudCgpYDpcbiAgZ2V0IGVycm9yKCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ2Vycm9yJywgdW5kZWZpbmVkKVxuICB9XG5cbiAgZ2V0IHdhc05vdGlmaWVkKCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ3dhc05vdGlmaWVkJywgZmFsc2UpXG4gIH1cblxuICAvLyBIZWxwZXIgTWV0aG9kc1xuXG4gIGdldCByZXF1ZXN0KCkge1xuICAgIHJldHVybiBvcHRpb25zID0+IHRoaXMuY29tcG9uZW50LnJlcXVlc3Qob3B0aW9ucylcbiAgfVxuXG4gIGdldCBmb3JtYXQoKSB7XG4gICAgcmV0dXJuICh2YWx1ZSwgb3B0aW9ucykgPT4gdGhpcy5jb21wb25lbnQuZm9ybWF0KHZhbHVlLCBvcHRpb25zKVxuICB9XG5cbiAgZ2V0IG5hdmlnYXRlKCkge1xuICAgIHJldHVybiBsb2NhdGlvbiA9PiB0aGlzLmNvbXBvbmVudC5uYXZpZ2F0ZShsb2NhdGlvbilcbiAgfVxuXG4gIGdldCBkb3dubG9hZCgpIHtcbiAgICByZXR1cm4gb3B0aW9ucyA9PiB0aGlzLmNvbXBvbmVudC5kb3dubG9hZChvcHRpb25zKVxuICB9XG5cbiAgZ2V0IGdldFJlc291cmNlVXJsKCkge1xuICAgIHJldHVybiByZXNvdXJjZSA9PiB0aGlzLmNvbXBvbmVudC5nZXRSZXNvdXJjZVVybChyZXNvdXJjZSlcbiAgfVxuXG4gIGdldCBub3RpZnkoKSB7XG4gICAgcmV0dXJuIG9wdGlvbnMgPT4ge1xuICAgICAgdGhpcy5jb21wb25lbnQubm90aWZ5KG9wdGlvbnMpXG4gICAgICBzZXQodGhpcywgJ3dhc05vdGlmaWVkJywgdHJ1ZSlcbiAgICB9XG4gIH1cbn1cbiIsImltcG9ydCB7IGlzQXJyYXksIGlzUGxhaW5PYmplY3QgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQge1xuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBsaXN0ZW5lcnM6IG51bGxcbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIC8vIEFzeW5jIG9uKCkgYW5kICRvZmYoKSBtZXRob2RzIHRoYXQga2VlcCB0cmFjayBvZiB0aGUgZXZlbnRzIGFkZGVkIC9cbiAgICAvLyByZW1vdmVkLCBhbmQgcHJvdmlkZSBhIGhhc0xpc3RlbmVycygpIG1ldGhvZCB0aGF0IGNoZWNrcyBpZiB0aGUgY29tcG9uZW50XG4gICAgLy8gaGFzIGxpc3RlbmVycyBmb3IgYSBnaXZlbiBldmVudC5cblxuICAgIC8vIEFsc28gYWRkcyBwcm9wZXIgaGFuZGxpbmcgb2YgYXN5bmMgZXZlbnRzLCBpbmNsdWRpbmcgYSBhc3luYyBlbWl0KCkgdGhhdFxuICAgIC8vIGRlYWxzIHdpdGggcHJvcGVyIGV2ZW50IHF1ZXVlaW5nLlxuICAgIG9uKGV2ZW50LCBjYWxsYmFjaykge1xuICAgICAgaWYgKGlzQXJyYXkoZXZlbnQpKSB7XG4gICAgICAgIGZvciAoY29uc3QgZXYgb2YgZXZlbnQpIHtcbiAgICAgICAgICB0aGlzLm9uKGV2LCBjYWxsYmFjaylcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChpc1BsYWluT2JqZWN0KGV2ZW50KSkge1xuICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBldmVudCkge1xuICAgICAgICAgIHRoaXMub24oa2V5LCBldmVudFtrZXldKVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBsaXN0ZW5lcnMgPSAodGhpcy5saXN0ZW5lcnMgfHw9IE9iamVjdC5jcmVhdGUobnVsbCkpXG4gICAgICAgIGNvbnN0IHsgY2FsbGJhY2tzIH0gPSAobGlzdGVuZXJzW2V2ZW50XSB8fD0ge1xuICAgICAgICAgIGNhbGxiYWNrczogW10sXG4gICAgICAgICAgcXVldWU6IFtdXG4gICAgICAgIH0pXG4gICAgICAgIGNhbGxiYWNrcy5wdXNoKGNhbGxiYWNrKVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXNcbiAgICB9LFxuXG4gICAgb25jZShldmVudCwgY2FsbGJhY2spIHtcbiAgICAgIGNvbnN0IG9uID0gKC4uLmFyZ3MpID0+IHtcbiAgICAgICAgdGhpcy5vZmYoZXZlbnQsIG9uKVxuICAgICAgICByZXR1cm4gY2FsbGJhY2suYXBwbHkodGhpcywgYXJncylcbiAgICAgIH1cbiAgICAgIG9uLmNhbGxiYWNrID0gY2FsbGJhY2sgLy8gTmVlZGVkIGZvciBgb2ZmKClgLCBzZWUgYmVsb3cuXG4gICAgICByZXR1cm4gdGhpcy5vbihldmVudCwgb24pXG4gICAgfSxcblxuICAgIG9mZihldmVudCwgY2FsbGJhY2spIHtcbiAgICAgIGlmICghYXJndW1lbnRzLmxlbmd0aCkge1xuICAgICAgICAvLyBSZW1vdmUgYWxsIGV2ZW50c1xuICAgICAgICBkZWxldGUgdGhpcy5saXN0ZW5lcnNcbiAgICAgIH0gZWxzZSBpZiAoaXNBcnJheShldmVudCkpIHtcbiAgICAgICAgZm9yIChjb25zdCBldiBvZiBldmVudCkge1xuICAgICAgICAgIHRoaXMub2ZmKGV2LCBjYWxsYmFjaylcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChpc1BsYWluT2JqZWN0KGV2ZW50KSkge1xuICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBldmVudCkge1xuICAgICAgICAgIHRoaXMub2ZmKGtleSwgZXZlbnRba2V5XSlcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gUmVtb3ZlIHNwZWNpZmljIGV2ZW50XG4gICAgICAgIGNvbnN0IGVudHJ5ID0gdGhpcy5saXN0ZW5lcnM/LltldmVudF1cbiAgICAgICAgaWYgKGVudHJ5KSB7XG4gICAgICAgICAgaWYgKCFjYWxsYmFjaykge1xuICAgICAgICAgICAgLy8gUmVtb3ZlIGFsbCBoYW5kbGVycyBmb3IgdGhpcyBldmVudFxuICAgICAgICAgICAgZGVsZXRlIHRoaXMubGlzdGVuZXJzW2V2ZW50XVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBSZW1vdmUgYSBzcGVjaWZpYyBoYW5kbGVyOiBmaW5kIHRoZSBpbmRleCBpbiBjYWxsYmFja3NcbiAgICAgICAgICAgIGNvbnN0IHsgY2FsbGJhY2tzIH0gPSBlbnRyeVxuICAgICAgICAgICAgY29uc3QgaW5kZXggPSBjYWxsYmFja3MuZmluZEluZGV4KFxuICAgICAgICAgICAgICAvLyBNYXRjaCBgY2IuY2FsbGJhY2tgIGFsc28sIGFzIHVzZWQgYnkgYG9uY2UoKWAsIHNlZSAgYWJvdmU6XG4gICAgICAgICAgICAgIGNiID0+IGNiID09PSBjYWxsYmFjayB8fCBjYi5jYWxsYmFjayA9PT0gY2FsbGJhY2tcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIGlmIChpbmRleCAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgY2FsbGJhY2tzLnNwbGljZShpbmRleCwgMSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzXG4gICAgfSxcblxuICAgIGVtaXQoZXZlbnQsIC4uLmFyZ3MpIHtcbiAgICAgIC8vIE9ubHkgcXVldWUgZXZlbnQgaWYgdGhlcmUgYWN0dWFsbHkgYXJlIGxpc3RlbmVycyBmb3IgaXQuXG4gICAgICBjb25zdCBlbnRyeSA9IHRoaXMubGlzdGVuZXJzPy5bZXZlbnRdXG4gICAgICBpZiAoZW50cnkpIHtcbiAgICAgICAgY29uc3QgeyBxdWV1ZSwgY2FsbGJhY2tzIH0gPSBlbnRyeVxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgICAgICAgY29uc3QgbmV4dCA9IGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgIC8vIEVtaXQgdGhlIG5leHQgZXZlbnQgaW4gdGhlIHF1ZXVlIHdpdGggaXRzIHBhcmFtcy5cbiAgICAgICAgICAgIC8vIE5vdGUgdGhhdCBpdCBvbmx5IGdldHMgcmVtb3ZlZCBvbmNlIGBuZXh0KClgIGlzIGNhbGxlZC5cbiAgICAgICAgICAgIGNvbnN0IGVudHJ5ID0gcXVldWUuc2hpZnQoKVxuICAgICAgICAgICAgaWYgKGVudHJ5KSB7XG4gICAgICAgICAgICAgIGxldCByZXN1bHRcbiAgICAgICAgICAgICAgZm9yIChjb25zdCBjYWxsYmFjayBvZiBjYWxsYmFja3MpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgY2FsbGJhY2suYXBwbHkodGhpcywgZW50cnkuYXJncylcbiAgICAgICAgICAgICAgICAgIGlmIChyZXMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSByZXNcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgICAgICAgYEVycm9yIGR1cmluZyBldmVudCBoYW5kbGVyIGZvciAnJHtldmVudH0nOmAsXG4gICAgICAgICAgICAgICAgICAgIGVycm9yXG4gICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIC8vIFJlc29sdmUgdGhlIHByb21pc2UgdGhhdCB3YXMgYWRkZWQgdG8gdGhlIHF1ZXVlIGZvciB0aGUgZXZlbnRcbiAgICAgICAgICAgICAgLy8gdGhhdCB3YXMganVzdCBjb21wbGV0ZWQgYnkgdGhlIHdyYXBwZXIgdGhhdCBjYWxsZWQgYG5leHQoKWBcbiAgICAgICAgICAgICAgZW50cnkucmVzb2x2ZShyZXN1bHQpXG4gICAgICAgICAgICAgIG5leHQoKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBxdWV1ZS5wdXNoKHsgYXJncywgcmVzb2x2ZSB9KVxuICAgICAgICAgIC8vIEZvciBuZXcgcXVldWVzICg9IG9ubHkgb25lIGVudHJ5KSBlbWl0IHRoZSBmaXJzdCBldmVudCBpbW1lZGlhdGVseSxcbiAgICAgICAgICAvLyB0byBnZXQgdGhlIHF1ZXVlIHJ1bm5pbmcuXG4gICAgICAgICAgaWYgKHF1ZXVlLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgbmV4dCgpXG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH0sXG5cbiAgICAvLyBDaGVja3MgaWYgdGhlIGNvbXBvbmVudCBoYXMgbGlzdGVuZXJzIGZvciBhIGdpdmVuIGV2ZW50IHR5cGU6XG4gICAgaGFzTGlzdGVuZXJzKGV2ZW50KSB7XG4gICAgICBpZiAoaXNBcnJheShldmVudCkpIHtcbiAgICAgICAgZm9yIChjb25zdCBldiBvZiBldmVudCkge1xuICAgICAgICAgIGlmICghdGhpcy5oYXNMaXN0ZW5lcnMoZXYpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGV2ZW50Lmxlbmd0aCA+IDBcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiAhIXRoaXMubGlzdGVuZXJzPy5bZXZlbnRdXG4gICAgICB9XG4gICAgfSxcblxuICAgIGRlbGVnYXRlKGV2ZW50LCB0YXJnZXQpIHtcbiAgICAgIGlmICh0YXJnZXQpIHtcbiAgICAgICAgaWYgKGlzQXJyYXkoZXZlbnQpKSB7XG4gICAgICAgICAgZm9yIChjb25zdCBldiBvZiBldmVudCkge1xuICAgICAgICAgICAgdGhpcy5kZWxlZ2F0ZShldiwgdGFyZ2V0KVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLm9uKGV2ZW50LCAoLi4uYXJncykgPT4gdGFyZ2V0LmVtaXQoZXZlbnQsIC4uLmFyZ3MpKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpc1xuICAgIH1cbiAgfVxufVxuIiwiaW1wb3J0IHsgaXNDcmVkaXRDYXJkIH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuZXhwb3J0IGNvbnN0IGNyZWRpdGNhcmQgPSB7XG4gIHZhbGlkYXRlOiB2YWx1ZSA9PiBpc0NyZWRpdENhcmQodmFsdWUpLFxuICBtZXNzYWdlOiAnaXMgaW52YWxpZCdcbn1cbiIsImV4cG9ydCBjb25zdCBkZWNpbWFscyA9IHtcbiAgdmFsaWRhdGU6ICh2YWx1ZSwgZGVjaW1hbHMpID0+IHtcbiAgICBjb25zdCBtYXRjaCA9IGRlY2ltYWxzID09PSAnKicgPyAnKycgOiBgezEsJHtkZWNpbWFsc319YFxuICAgIHJldHVybiBuZXcgUmVnRXhwKGBeWy0rXT9cXFxcZCooXFxcXC5cXFxcZCR7bWF0Y2h9KT8kYCkudGVzdCh2YWx1ZSlcbiAgfSxcblxuICBtZXNzYWdlOiAodmFsdWUsIGRlY2ltYWxzKSA9PlxuICAgIGBtdXN0IGJlIG51bWVyaWMgYW5kIG1heSBjb250YWluICR7XG4gICAgICAhZGVjaW1hbHMgfHwgZGVjaW1hbHMgPT09ICcqJyA/ICcnIDogZGVjaW1hbHNcbiAgICB9IGRlY2ltYWwgcG9pbnRzYFxufVxuIiwiaW1wb3J0IHsgaXNFbWFpbCB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbmV4cG9ydCBjb25zdCBlbWFpbCA9IHtcbiAgdmFsaWRhdGU6IHZhbHVlID0+IGlzRW1haWwodmFsdWUpLFxuICBtZXNzYWdlOiAnbXVzdCBiZSBhIHZhbGlkIGVtYWlsJ1xufVxuIiwiaW1wb3J0IHsgaXNIb3N0bmFtZSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbmV4cG9ydCBjb25zdCBob3N0bmFtZSA9IHtcbiAgdmFsaWRhdGU6IHZhbHVlID0+IGlzSG9zdG5hbWUodmFsdWUpLFxuICBtZXNzYWdlOiAnaXMgbm90IGEgaG9zdCBuYW1lJ1xufVxuIiwiaW1wb3J0IHsgaXNEb21haW4gfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG5leHBvcnQgY29uc3QgZG9tYWluID0ge1xuICB2YWxpZGF0ZTogdmFsdWUgPT4gaXNEb21haW4odmFsdWUpLFxuICBtZXNzYWdlOiAnaXMgbm90IGEgZG9tYWluJ1xufVxuIiwiaW1wb3J0IHsgaXNJbnRlZ2VyIH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuZXhwb3J0IGNvbnN0IGludGVnZXIgPSB7XG4gIHZhbGlkYXRlOiB2YWx1ZSA9PiBpc0ludGVnZXIodmFsdWUpLFxuICBtZXNzYWdlOiAnbXVzdCBiZSB3aG9sZSBudW1iZXInXG59XG4iLCJleHBvcnQgY29uc3QgbWF4ID0ge1xuICB2YWxpZGF0ZTogKHZhbHVlLCBtYXgpID0+IHZhbHVlIDw9IG1heCxcbiAgbWVzc2FnZSh2YWx1ZSwgbWF4KSB7XG4gICAgcmV0dXJuIGBtdXN0IGJlICR7bWF4fSBvciBsZXNzYFxuICB9XG59XG4iLCJleHBvcnQgY29uc3QgbWluID0ge1xuICB2YWxpZGF0ZTogKHZhbHVlLCBtaW4pID0+IHZhbHVlID49IG1pbixcbiAgbWVzc2FnZSh2YWx1ZSwgbWluKSB7XG4gICAgcmV0dXJuIGBtdXN0IGJlICR7bWlufSBvciBtb3JlYFxuICB9XG59XG4iLCJleHBvcnQgY29uc3QgcGFzc3dvcmQgPSB7XG4gIC8vIEFsbG93IGFueSB2YWx1ZS4gRm9yIG5vdyB0aGlzIGlzIG9ubHkgdXNlZCBhcyBhIG1hcmtlciwgdG8gYWxsb3cgdGhlXG4gIC8vIHJlcXVpcmVkIHZhbGlkYXRpb24gdG8gaGFuZGxlIHVuY2hhbmdlZCBwYXNzd29yZHMgc2VwYXJhdGVseS5cbiAgdmFsaWRhdGU6ICgpID0+IHRydWVcbn1cbiIsImV4cG9ydCBjb25zdCByYW5nZSA9IHtcbiAgdmFsaWRhdGU6ICh2YWx1ZSwgW21pbiwgbWF4XSkgPT4gdmFsdWUgPj0gbWluICYmIHZhbHVlIDw9IG1heCxcbiAgbWVzc2FnZSh2YWx1ZSwgW21pbiwgbWF4XSkge1xuICAgIHJldHVybiBgbXVzdCBiZSBiZXR3ZWVuICR7bWlufSBhbmQgJHttYXh9YFxuICB9XG59XG4iLCJleHBvcnQgY29uc3QgcmVxdWlyZWQgPSB7XG4gIHZhbGlkYXRlOiAodmFsdWUsIHNldHRpbmdzLCB7IHBhc3N3b3JkIH0pID0+IChcbiAgICAodmFsdWUgIT0gbnVsbCAmJiB2YWx1ZSAhPT0gJycpIHx8XG4gICAgLy8gUGFzc3dvcmQgZmllbGRzIHVzZSBgdW5kZWZpbmVkYCBhcyBvcHBvc2VkIHRvIGBudWxsYCB3aGVuIHRoZXkncmUgc2V0XG4gICAgLy8gYnV0IHVuY2hhbmdlZCwgYWxsb3cgdGhpcyB0byBwYXNzIHRocm91Z2g6XG4gICAgKHBhc3N3b3JkICYmIHZhbHVlID09PSB1bmRlZmluZWQpXG4gICksXG4gIG1lc3NhZ2U6ICdpcyByZXF1aXJlZCcsXG4gIG51bGxpc2g6IHRydWVcbn1cbiIsImltcG9ydCB7IGlzVXJsIH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuZXhwb3J0IGNvbnN0IHVybCA9IHtcbiAgdmFsaWRhdGU6IHZhbHVlID0+IGlzVXJsKHZhbHVlKSxcbiAgbWVzc2FnZTogJ2lzIG5vdCBhIHZhbGlkIFVSTCdcbn1cbiIsImltcG9ydCB7IGlzRnVuY3Rpb24gfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0ICogYXMgdmFsaWRhdGlvbnMgZnJvbSAnLi4vdmFsaWRhdGlvbnMvaW5kZXguanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCB7XG4gIGVtaXRzOiBbJ2Vycm9ycyddLFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlzVG91Y2hlZDogZmFsc2UsXG4gICAgICBpc0RpcnR5OiBmYWxzZSxcbiAgICAgIGlzVmFsaWRhdGVkOiBmYWxzZSxcbiAgICAgIGlzVmFsaWQ6IGZhbHNlLFxuICAgICAgZXJyb3JzOiBudWxsXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgaGFzRXJyb3JzKCkge1xuICAgICAgcmV0dXJuICEhdGhpcy5lcnJvcnNcbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIHJlc2V0VmFsaWRhdGlvbigpIHtcbiAgICAgIHRoaXMuaXNUb3VjaGVkID0gZmFsc2VcbiAgICAgIHRoaXMuaXNEaXJ0eSA9IGZhbHNlXG4gICAgICB0aGlzLmlzVmFsaWRhdGVkID0gZmFsc2VcbiAgICAgIHRoaXMuaXNWYWxpZCA9IGZhbHNlXG4gICAgICB0aGlzLmNsZWFyRXJyb3JzKClcbiAgICB9LFxuXG4gICAgdmFsaWRhdGUobm90aWZ5ID0gdHJ1ZSkge1xuICAgICAgbGV0IGlzVmFsaWQgPSB0cnVlXG4gICAgICBpZiAobm90aWZ5KSB7XG4gICAgICAgIHRoaXMuY2xlYXJFcnJvcnMoKVxuICAgICAgfVxuICAgICAgY29uc3QgeyB2YWx1ZSB9ID0gdGhpc1xuICAgICAgLy8gY29uc29sZS5sb2coJ3ZhbGlkYXRlJywgdGhpcy5kYXRhUGF0aCwgdmFsdWUsIHRoaXMudmFsaWRhdGlvbnMpXG4gICAgICBmb3IgKGNvbnN0IFtydWxlLCBzZXR0aW5nXSBvZiBPYmplY3QuZW50cmllcyh0aGlzLnZhbGlkYXRpb25zKSkge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25hbWVzcGFjZVxuICAgICAgICBjb25zdCB2YWxpZGF0b3IgPSB2YWxpZGF0aW9uc1tydWxlXVxuICAgICAgICBpZiAodmFsaWRhdG9yICYmICh2YWxpZGF0b3IubnVsbGlzaCB8fCB2YWx1ZSAhPSBudWxsKSkge1xuICAgICAgICAgIGNvbnN0IHsgdmFsaWRhdGUsIG1lc3NhZ2UgfSA9IHZhbGlkYXRvclxuICAgICAgICAgIGlmICghdmFsaWRhdGUodmFsdWUsIHNldHRpbmcsIHRoaXMudmFsaWRhdGlvbnMpKSB7XG4gICAgICAgICAgICBpc1ZhbGlkID0gZmFsc2VcbiAgICAgICAgICAgIGlmIChub3RpZnkpIHtcbiAgICAgICAgICAgICAgY29uc3QgZXJyb3IgPSBpc0Z1bmN0aW9uKG1lc3NhZ2UpXG4gICAgICAgICAgICAgICAgPyBtZXNzYWdlKHZhbHVlLCBzZXR0aW5nLCB0aGlzKVxuICAgICAgICAgICAgICAgIDogbWVzc2FnZVxuICAgICAgICAgICAgICB0aGlzLmFkZEVycm9yKGVycm9yLCB0cnVlKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKG5vdGlmeSkge1xuICAgICAgICB0aGlzLmlzVmFsaWRhdGVkID0gdHJ1ZVxuICAgICAgICB0aGlzLmlzVmFsaWQgPSBpc1ZhbGlkXG4gICAgICB9XG4gICAgICByZXR1cm4gaXNWYWxpZFxuICAgIH0sXG5cbiAgICB2ZXJpZnkoKSB7XG4gICAgICByZXR1cm4gdGhpcy52YWxpZGF0ZShmYWxzZSlcbiAgICB9LFxuXG4gICAgbWFya1RvdWNoZWQoKSB7XG4gICAgICB0aGlzLmlzVG91Y2hlZCA9IHRydWVcbiAgICAgIC8vIENsZWFyIGN1cnJlbnRseSBkaXNwbGF5ZWQgZXJyb3JzIHdoZW4gZm9jdXNpbmcgaW5wdXQuXG4gICAgICB0aGlzLmNsZWFyRXJyb3JzKClcbiAgICB9LFxuXG4gICAgbWFya0RpcnR5KCkge1xuICAgICAgdGhpcy5pc0RpcnR5ID0gdHJ1ZVxuICAgICAgdGhpcy5pc1ZhbGlkYXRlZCA9IGZhbHNlXG4gICAgICB0aGlzLmlzVmFsaWQgPSBmYWxzZVxuICAgICAgLy8gQ2xlYXIgY3VycmVudGx5IGRpc3BsYXllZCBlcnJvcnMgb24gbmV3IGlucHV0LlxuICAgICAgdGhpcy5jbGVhckVycm9ycygpXG4gICAgfSxcblxuICAgIGFkZEVycm9yKGVycm9yLCBhZGRMYWJlbCA9IGZhbHNlKSB7XG4gICAgICB0aGlzLmVycm9ycyB8fD0gW11cbiAgICAgIGlmIChhZGRMYWJlbCkge1xuICAgICAgICBjb25zdCBsYWJlbCA9IHRoaXMubGFiZWwgfHwgdGhpcy5wbGFjZWhvbGRlciB8fCB0aGlzLm5hbWVcbiAgICAgICAgZXJyb3IgPSBgVGhlICR7bGFiZWx9IGZpZWxkICR7ZXJyb3J9LmBcbiAgICAgIH1cbiAgICAgIHRoaXMuZXJyb3JzLnB1c2goZXJyb3IpXG4gICAgICB0aGlzLiRlbWl0KCdlcnJvcnMnLCB0aGlzLmVycm9ycylcbiAgICB9LFxuXG4gICAgc2hvd1ZhbGlkYXRpb25FcnJvcnMoZXJyb3JzLCBmb2N1cykge1xuICAgICAgLy8gQ29udmVydCBmcm9tIEFKViBlcnJvcnMgb2JqZWN0cyB0byBhbiBhcnJheSBvZiBlcnJvciBtZXNzYWdlc1xuICAgICAgdGhpcy5lcnJvcnMgPSBbXVxuICAgICAgZm9yIChjb25zdCB7IG1lc3NhZ2UgfSBvZiBlcnJvcnMpIHtcbiAgICAgICAgdGhpcy5hZGRFcnJvcihtZXNzYWdlLCB0cnVlKVxuICAgICAgfVxuICAgICAgaWYgKGZvY3VzKSB7XG4gICAgICAgIHRoaXMuc2Nyb2xsSW50b1ZpZXcoKVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRydWVcbiAgICB9LFxuXG4gICAgZ2V0RXJyb3JzKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZXJyb3JzID8gWy4uLnRoaXMuZXJyb3JzXSA6IG51bGxcbiAgICB9LFxuXG4gICAgY2xlYXJFcnJvcnMoKSB7XG4gICAgICB0aGlzLmVycm9ycyA9IG51bGxcbiAgICAgIHRoaXMuJGVtaXQoJ2Vycm9ycycsIHRoaXMuZXJyb3JzKVxuICAgIH1cbiAgfVxufVxuIiwiaW1wb3J0IHtcbiAgaXNGdW5jdGlvbixcbiAgaXNTdHJpbmcsXG4gIHBhcnNlRGF0YVBhdGgsXG4gIG5vcm1hbGl6ZURhdGFQYXRoXG59IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRTY2hlbWFBY2Nlc3NvcihcbiAga2V5T3JEYXRhUGF0aCxcbiAgeyB0eXBlLCBkZWZhdWx0OiBkZWYsIGdldCwgc2V0LCBjYWxsYmFjayA9IHRydWUgfSA9IHt9XG4pIHtcbiAgLy8gYGtleU9yRGF0YVBhdGhgIGNhbiBiZSBhIHNpbXBsZSBwcm9wZXJ0eSBrZXksXG4gIC8vIG9yIGEgZGF0YS1wYXRoIGludG8gc3ViLXByb3BlcnRpZXMsIGJvdGggaW4gYXJyYXkgb3Igc3RyaW5nIGZvcm1hdC5cbiAgaWYgKGlzU3RyaW5nKGtleU9yRGF0YVBhdGgpICYmIGtleU9yRGF0YVBhdGguaW5jbHVkZXMoJy4nKSkge1xuICAgIGtleU9yRGF0YVBhdGggPSBwYXJzZURhdGFQYXRoKGtleU9yRGF0YVBhdGgpXG4gIH1cbiAgLy8gVXNlIHRoZSBub3JtYWxpemVkIGRhdGEgcGF0aCBmb3IgdGhlIGhhbmRsaW5nIG92ZXJyaWRlc1xuICBjb25zdCBuYW1lID0gbm9ybWFsaXplRGF0YVBhdGgoa2V5T3JEYXRhUGF0aClcbiAgcmV0dXJuIHtcbiAgICBnZXQoKSB7XG4gICAgICAvLyBPbmx5IGRldGVybWluZSBzY2hlbWEgdmFsdWUgaWYgd2UgaGF2ZSBubyBnZXR0ZXIsIG9yIHRoZSBnZXR0ZXJcbiAgICAgIC8vIHdhbnRzIHRvIHJlY2VpdmUgdGhlIHZhbHVlIGFuZCBwcm9jZXNzIGl0IGZ1cnRoZXI6XG4gICAgICBjb25zdCB2YWx1ZSA9XG4gICAgICAgICFnZXQgfHwgZ2V0Lmxlbmd0aCA+IDBcbiAgICAgICAgICA/IC8vIE5PVEU6IEJlY2F1c2UgYHNjaGVtYWAgb2JqZWN0cyBhcmUgcmV0cmlldmVkIGZyb20gYG1ldGFgLCB0aGV5XG4gICAgICAgICAgICAvLyBkb24ndCBzZWVtIHRvIGJlIHJlYWN0aXZlLiBUbyBhbGxvdyBjaGFuZ2VkIGluIGBzY2hlbWFgIHZhbHVlcyxcbiAgICAgICAgICAgIC8vIGBzZXQoKWAgc3RvcmVzIGNoYW5nZWQgdmFsdWVzIGluIHRoZSBzZXBhcmF0ZSBgb3ZlcnJpZGVzYCBvYmplY3QuXG4gICAgICAgICAgICB0aGlzLm92ZXJyaWRlcyAmJiBuYW1lIGluIHRoaXMub3ZlcnJpZGVzXG4gICAgICAgICAgICA/IHRoaXMub3ZlcnJpZGVzW25hbWVdXG4gICAgICAgICAgICA6IHRoaXMuZ2V0U2NoZW1hVmFsdWUoa2V5T3JEYXRhUGF0aCwge1xuICAgICAgICAgICAgICAgIHR5cGUsXG4gICAgICAgICAgICAgICAgZGVmYXVsdDogZGVmLFxuICAgICAgICAgICAgICAgIGNhbGxiYWNrXG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgOiB1bmRlZmluZWRcbiAgICAgIHJldHVybiBnZXQgPyBnZXQuY2FsbCh0aGlzLCB2YWx1ZSkgOiB2YWx1ZVxuICAgIH0sXG5cbiAgICBzZXQodmFsdWUpIHtcbiAgICAgIGlmIChzZXQpIHtcbiAgICAgICAgc2V0LmNhbGwodGhpcywgdmFsdWUpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLm92ZXJyaWRlcyB8fD0ge31cbiAgICAgICAgdGhpcy5vdmVycmlkZXNbbmFtZV0gPSB2YWx1ZVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0U3RvcmVBY2Nlc3NvcihuYW1lLCB7IGRlZmF1bHQ6IGRlZiwgZ2V0LCBzZXQgfSA9IHt9KSB7XG4gIHJldHVybiB7XG4gICAgZ2V0KCkge1xuICAgICAgbGV0IHZhbHVlID0gdGhpcy5nZXRTdG9yZShuYW1lKVxuICAgICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQgJiYgZGVmICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgLy8gU3VwcG9ydCBgZGVmYXVsdCgpYCBmdW5jdGlvbnM6XG4gICAgICAgIHZhbHVlID0gaXNGdW5jdGlvbihkZWYpID8gZGVmLmNhbGwodGhpcykgOiBkZWZcbiAgICAgICAgLy8gVHJpZ2dlciBzZXR0ZXIgYnkgc2V0dGluZyB2YWx1ZSBhbmQgYWNjZXNzb3IgdG8gZGVmYXVsdDpcbiAgICAgICAgdGhpc1tuYW1lXSA9IHZhbHVlXG4gICAgICAgIC8vIE5vdyBhY2Nlc3Mgc3RvcmUgYWdhaW4sIGZvciByZWFjdGl2aXR5IHRyYWNraW5nXG4gICAgICAgIHRoaXMuZ2V0U3RvcmUobmFtZSlcbiAgICAgIH1cbiAgICAgIC8vIEFsbG93IHRoZSBwcm92aWRlZCBnZXR0ZXIgdG8gZnVydGhlciBjaGFuZ2Ugb3IgcHJvY2VzcyB0aGUgdmFsdWVcbiAgICAgIC8vIHJldHJpZXZlZCBmcm9tIHRoZSBzdG9yZTpcbiAgICAgIHJldHVybiBnZXQgPyBnZXQuY2FsbCh0aGlzLCB2YWx1ZSkgOiB2YWx1ZVxuICAgIH0sXG5cbiAgICBzZXQodmFsdWUpIHtcbiAgICAgIC8vIEFsbG93IHRoZSBwcm92aWRlZCBzZXR0ZXIgdG8gcmV0dXJuIGEgbmV3IHZhbHVlIHRvIHNldCwgb3IgZG8gdGhlXG4gICAgICAvLyBzZXR0aW5nIGl0c2VsZiwgYW5kIHRoZW4gcmV0dXJuIGB1bmRlZmluZWRgOlxuICAgICAgaWYgKCFzZXQgfHwgKHZhbHVlID0gc2V0LmNhbGwodGhpcywgdmFsdWUpKSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMuc2V0U3RvcmUobmFtZSwgdmFsdWUpXG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iLCJpbXBvcnQgRGl0b0NvbnRleHQgZnJvbSAnLi4vRGl0b0NvbnRleHQuanMnXG5pbXBvcnQgVmFsaWRhdGlvbk1peGluIGZyb20gJy4vVmFsaWRhdGlvbk1peGluLmpzJ1xuaW1wb3J0IHsgZ2V0U2NoZW1hQWNjZXNzb3IgfSBmcm9tICcuLi91dGlscy9hY2Nlc3Nvci5qcydcbmltcG9ydCB7IGNvbXB1dGVWYWx1ZSB9IGZyb20gJy4uL3V0aWxzL3NjaGVtYS5qcydcbmltcG9ydCB7IGdldEl0ZW0sIGdldFBhcmVudEl0ZW0gfSBmcm9tICcuLi91dGlscy9kYXRhLmpzJ1xuaW1wb3J0IHsgYXNBcnJheSwgY2FtZWxpemUgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQge1xuICBtaXhpbnM6IFtWYWxpZGF0aW9uTWl4aW5dLFxuXG4gIHByb3BzOiB7XG4gICAgc2NoZW1hOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICAvLyBOT1RFOiBXaGlsZSBgZGF0YVBhdGhgIHBvaW50cyB0byB0aGUgYWN0dWFsIGB2YWx1ZWAsIGBkYXRhYCByZXByZXNlbnRzXG4gICAgLy8gdGhlIGBpdGVtYCBpbiB3aGljaCB0aGUgYHZhbHVlYCBpcyBjb250YWluZWQsIHVuZGVyIHRoZSBrZXkgYG5hbWVgLlxuICAgIGRhdGFQYXRoOiB7IHR5cGU6IFN0cmluZywgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBkYXRhOiB7IHR5cGU6IFtPYmplY3QsIEFycmF5XSwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBtZXRhOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBzdG9yZTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgd2lkdGg6IHsgdHlwZTogW051bWJlciwgU3RyaW5nXSwgZGVmYXVsdDogbnVsbCB9LFxuICAgIGxhYmVsOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogbnVsbCB9LFxuICAgIHNpbmdsZTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIG5lc3RlZDogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiB0cnVlIH0sXG4gICAgZGlzYWJsZWQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBhY2N1bXVsYXRlZEJhc2lzOiB7IHR5cGU6IE51bWJlciwgZGVmYXVsdDogbnVsbCB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgcGFyc2VkVmFsdWU6IHVuZGVmaW5lZCxcbiAgICAgIGZvY3VzZWQ6IGZhbHNlXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgbmFtZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYS5uYW1lXG4gICAgfSxcblxuICAgIHR5cGUoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWEudHlwZVxuICAgIH0sXG5cbiAgICBjb250ZXh0KCkge1xuICAgICAgcmV0dXJuIG5ldyBEaXRvQ29udGV4dCh0aGlzLCB7IG5lc3RlZDogdGhpcy5uZXN0ZWQgfSlcbiAgICB9LFxuXG4gICAgdmFsdWU6IHtcbiAgICAgIGdldCgpIHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBjb21wdXRlVmFsdWUoXG4gICAgICAgICAgdGhpcy5zY2hlbWEsXG4gICAgICAgICAgdGhpcy5kYXRhLFxuICAgICAgICAgIHRoaXMubmFtZSxcbiAgICAgICAgICB0aGlzLmRhdGFQYXRoLFxuICAgICAgICAgIHsgY29tcG9uZW50OiB0aGlzIH1cbiAgICAgICAgKVxuICAgICAgICBjb25zdCB7IGZvcm1hdCB9ID0gdGhpcy5zY2hlbWFcbiAgICAgICAgcmV0dXJuIGZvcm1hdFxuICAgICAgICAgID8gZm9ybWF0KG5ldyBEaXRvQ29udGV4dCh0aGlzLCB7IHZhbHVlIH0pKVxuICAgICAgICAgIDogdmFsdWVcbiAgICAgIH0sXG5cbiAgICAgIHNldCh2YWx1ZSkge1xuICAgICAgICBjb25zdCB7IHBhcnNlIH0gPSB0aGlzLnNjaGVtYVxuICAgICAgICBpZiAocGFyc2UpIHtcbiAgICAgICAgICB2YWx1ZSA9IHBhcnNlKG5ldyBEaXRvQ29udGV4dCh0aGlzLCB7IHZhbHVlIH0pKVxuICAgICAgICB9XG4gICAgICAgIHRoaXMucGFyc2VkVmFsdWUgPSB2YWx1ZVxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgdnVlL25vLW11dGF0aW5nLXByb3BzXG4gICAgICAgIHRoaXMuZGF0YVt0aGlzLm5hbWVdID0gdmFsdWVcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgcGFyZW50RGF0YSgpIHtcbiAgICAgIGNvbnN0IGRhdGEgPSBnZXRQYXJlbnRJdGVtKHRoaXMucm9vdERhdGEsIHRoaXMuZGF0YVBhdGgsIHRoaXMubmVzdGVkKVxuICAgICAgcmV0dXJuIGRhdGEgIT09IHRoaXMuZGF0YSA/IGRhdGEgOiBudWxsXG4gICAgfSxcblxuICAgIHByb2Nlc3NlZERhdGEoKSB7XG4gICAgICAvLyBXZSBjYW4gb25seSBnZXQgdGhlIHByb2Nlc3NlZCBkYXRhIHRocm91Z2ggdGhlIHNjaGVtYUNvbXBvbmVudCwgYnV0XG4gICAgICAvLyB0aGF0J3Mgbm90IG5lY2Vzc2FyaWx5IHRoZSBpdGVtIHJlcHJlc2VudGVkIGJ5IHRoaXMgY29tcG9uZW50LlxuICAgICAgLy8gU29sdXRpb246IEZpbmQgdGhlIHJlbGF0aXZlIHBhdGggYW5kIHRoZSBwcm9jZXNzZWQgc3ViLWl0ZW0gZnJvbSB0aGVyZTpcbiAgICAgIGNvbnN0IHsgc2NoZW1hQ29tcG9uZW50IH0gPSB0aGlzXG4gICAgICByZXR1cm4gZ2V0SXRlbShcbiAgICAgICAgc2NoZW1hQ29tcG9uZW50LnByb2Nlc3NlZERhdGEsXG4gICAgICAgIC8vIEdldCB0aGUgZGF0YVBhdGggcmVsYXRpdmUgdG8gdGhlIHNjaGVtYUNvbXBvbmVudCdzIGRhdGE6XG4gICAgICAgIHRoaXMuZGF0YVBhdGguc2xpY2Uoc2NoZW1hQ29tcG9uZW50LmRhdGFQYXRoLmxlbmd0aCksXG4gICAgICAgIHRoaXMubmVzdGVkXG4gICAgICApXG4gICAgfSxcblxuICAgIC8vIFRoZSBmb2xsb3dpbmcgY29tcHV0ZWQgcHJvcGVydGllcyBhcmUgc2ltaWxhciB0byBgRGl0b0NvbnRleHRgXG4gICAgLy8gcHJvcGVydGllcywgc28gdGhhdCB3ZSBjYW4gYWNjZXNzIHRoZXNlIG9uIGB0aGlzYCBhcyB3ZWxsOlxuICAgIGl0ZW0oKSB7XG4gICAgICByZXR1cm4gdGhpcy5kYXRhXG4gICAgfSxcblxuICAgIHBhcmVudEl0ZW0oKSB7XG4gICAgICByZXR1cm4gdGhpcy5wYXJlbnREYXRhXG4gICAgfSxcblxuICAgIHJvb3RJdGVtKCkge1xuICAgICAgcmV0dXJuIHRoaXMucm9vdERhdGFcbiAgICB9LFxuXG4gICAgcHJvY2Vzc2VkSXRlbSgpIHtcbiAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NlZERhdGFcbiAgICB9LFxuXG4gICAgbGFiZWxOb2RlKCkge1xuICAgICAgY29uc3Qgbm9kZSA9IHRoaXMuaXNNb3VudGVkID8gdGhpcy4kZWwucHJldmlvdXNFbGVtZW50U2libGluZyA6IG51bGxcbiAgICAgIHJldHVybiBub2RlPy5tYXRjaGVzKCcuZGl0by1sYWJlbCcpID8gbm9kZSA6IG51bGxcbiAgICB9LFxuXG4gICAgdmlzaWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ3Zpc2libGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuJG9wdGlvbnMuZGVmYXVsdFZpc2libGVcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIC8vIFRPRE86IFJlbmFtZSB0byBgZXhjbHVkZWRgIGZvciBjb25zaXN0ZW50IG5hbWluZz9cbiAgICBleGNsdWRlOiBnZXRTY2hlbWFBY2Nlc3NvcignZXhjbHVkZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0pLFxuXG4gICAgcmVxdWlyZWQ6IGdldFNjaGVtYUFjY2Vzc29yKCdyZXF1aXJlZCcsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0pLFxuXG4gICAgLy8gVE9ETzogTW92ZSB0aGVzZSB0byBhIHN1Yi1jbGFzcyBjb21wb25lbnQgdXNlZCBmb3IgYWxsIGlucHV0IGNvbXBvbmVudHM/XG4gICAgcmVhZG9ubHk6IGdldFNjaGVtYUFjY2Vzc29yKCdyZWFkb25seScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0pLFxuXG4gICAgYXV0b2ZvY3VzOiBnZXRTY2hlbWFBY2Nlc3NvcignYXV0b2ZvY3VzJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfSksXG5cbiAgICAvLyBUbyBiZSB1c2VkIGZvciBzZWxlY3RzIGFuZCBpbnB1dHMgb25seT9cbiAgICBjbGVhcmFibGU6IGdldFNjaGVtYUFjY2Vzc29yKCdjbGVhcmFibGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9KSxcblxuICAgIHBsYWNlaG9sZGVyOiBnZXRTY2hlbWFBY2Nlc3NvcigncGxhY2Vob2xkZXInLCB7XG4gICAgICB0eXBlOiBTdHJpbmdcbiAgICB9KSxcblxuICAgIGF1dG9jb21wbGV0ZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ2F1dG9jb21wbGV0ZScsIHtcbiAgICAgIHR5cGU6IFN0cmluZ1xuICAgIH0pLFxuXG4gICAgZXZlbnRzKCkge1xuICAgICAgY29uc3QgZXZlbnRzID0gdGhpcy5nZXRFdmVudHMoKVxuICAgICAgLy8gUmVnaXN0ZXIgY2FsbGJhY2tzIGZvciBhbGwgcHJvdmlkZXMgbm9uLXJlY29nbml6ZWQgZXZlbnRzLFxuICAgICAgLy8gYXNzdW1pbmcgdGhleSBhcmUgbmF0aXZlIGV2ZW50cy5cbiAgICAgIC8vIFRPRE86IE1vdmUgdG8gdnVlMy1zdHlsZSBgb25bQS1aXWAgZXZlbnQgaGFuZGxlcnMgbmFtaW5nIHRoYXQgYXJlbid0XG4gICAgICAvLyBuYW1lc3BhY2VkIGluIGBzY2hlbWEuZXZlbnRzYCBvbmNlIHRoZSB0cmFuc2l0aW9uIGlzIGNvbXBsZXRlLlxuICAgICAgZm9yIChjb25zdCBldmVudCBvZiBPYmplY3Qua2V5cyh0aGlzLnNjaGVtYS5ldmVudHMgfHwge30pKSB7XG4gICAgICAgIGV2ZW50c1tgb24ke2NhbWVsaXplKGV2ZW50LCB0cnVlKX1gXSA/Pz0gKCkgPT4ge1xuICAgICAgICAgIHRoaXMuZW1pdEV2ZW50KGV2ZW50KVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gZXZlbnRzXG4gICAgfSxcblxuICAgIGF0dHJpYnV0ZXMoKSB7XG4gICAgICBjb25zdCB7IG5hdGl2ZUZpZWxkLCB0ZXh0RmllbGQgfSA9IHRoaXMuJG9wdGlvbnNcblxuICAgICAgY29uc3QgYXR0cmlidXRlcyA9IHtcbiAgICAgICAgLi4udGhpcy5ldmVudHMsXG4gICAgICAgIGRpc2FibGVkOiB0aGlzLmRpc2FibGVkXG4gICAgICB9XG5cbiAgICAgIGlmIChuYXRpdmVGaWVsZCkge1xuICAgICAgICBhdHRyaWJ1dGVzLm5hbWUgPSB0aGlzLm5hbWVcbiAgICAgICAgaWYgKHRoaXMubGFiZWwpIHtcbiAgICAgICAgICBhdHRyaWJ1dGVzLnRpdGxlID0gdGhpcy5sYWJlbFxuICAgICAgICB9XG4gICAgICAgIGF0dHJpYnV0ZXMucmVhZG9ubHkgPSB0aGlzLnJlYWRvbmx5XG4gICAgICAgIGF0dHJpYnV0ZXMuYXV0b2ZvY3VzID0gdGhpcy5hdXRvZm9jdXNcbiAgICAgICAgaWYgKHRleHRGaWVsZCkge1xuICAgICAgICAgIGF0dHJpYnV0ZXMucGxhY2Vob2xkZXIgPSB0aGlzLnBsYWNlaG9sZGVyXG4gICAgICAgICAgYXR0cmlidXRlcy5hdXRvY29tcGxldGUgPSB0aGlzLmF1dG9jb21wbGV0ZVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBhdHRyaWJ1dGVzXG4gICAgfSxcblxuICAgIHZhbGlkYXRpb25zKCkge1xuICAgICAgY29uc3QgdmFsaWRhdGlvbnMgPSB7IC4uLnRoaXMuZ2V0VmFsaWRhdGlvbnMoKSB9XG4gICAgICBpZiAodGhpcy5yZXF1aXJlZCkge1xuICAgICAgICB2YWxpZGF0aW9ucy5yZXF1aXJlZCA9IHRydWVcbiAgICAgIH1cbiAgICAgIC8vIEFsbG93IHNjaGVtYSB0byBvdmVycmlkZSBkZWZhdWx0IHJ1bGVzIGFuZCBhZGQgYW55IG5ldyBvbmVzOlxuICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXModGhpcy5zY2hlbWEucnVsZXMgfHwge30pKSB7XG4gICAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgZGVsZXRlIHZhbGlkYXRpb25zW2tleV1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2YWxpZGF0aW9uc1trZXldID0gdmFsdWVcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHZhbGlkYXRpb25zXG4gICAgfSxcblxuICAgIHNob3dDbGVhckJ1dHRvbigpIHtcbiAgICAgIHJldHVybiB0aGlzLmNsZWFyYWJsZSAmJiB0aGlzLnZhbHVlICE9IG51bGxcbiAgICB9XG4gIH0sXG5cbiAgY3JlYXRlZCgpIHtcbiAgICB0aGlzLl9yZWdpc3Rlcih0cnVlKVxuICAgIHRoaXMuc2V0dXBTY2hlbWFGaWVsZHMoKVxuICB9LFxuXG4gIHVubW91bnRlZCgpIHtcbiAgICB0aGlzLl9yZWdpc3RlcihmYWxzZSlcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgX3JlZ2lzdGVyKGFkZCkge1xuICAgICAgLy8gUHJldmVudCB1bm5lc3RlZCB0eXBlIGNvbXBvbmVudHMgZnJvbSBvdmVycmlkaW5nIHBhcmVudCBkYXRhIHBhdGhzXG4gICAgICBpZiAodGhpcy5uZXN0ZWQpIHtcbiAgICAgICAgdGhpcy5zY2hlbWFDb21wb25lbnQuX3JlZ2lzdGVyQ29tcG9uZW50KHRoaXMsIGFkZClcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgLy8gQG92ZXJyaWRhYmxlXG4gICAgZ2V0RXZlbnRzKCkge1xuICAgICAgY29uc3QgeyBvbkZvY3VzLCBvbkJsdXIsIG9uSW5wdXQsIG9uQ2hhbmdlIH0gPSB0aGlzXG4gICAgICByZXR1cm4geyBvbkZvY3VzLCBvbkJsdXIsIG9uSW5wdXQsIG9uQ2hhbmdlIH1cbiAgICB9LFxuXG4gICAgLy8gQG92ZXJyaWRhYmxlXG4gICAgZ2V0VmFsaWRhdGlvbnMoKSB7XG4gICAgICByZXR1cm4gbnVsbFxuICAgIH0sXG5cbiAgICAvLyBAb3ZlcnJpZGFibGVcbiAgICBhc3luYyBzY3JvbGxJbnRvVmlldygpIHtcbiAgICAgIGF3YWl0IHRoaXMuZm9jdXNTY2hlbWEoKVxuICAgICAgdGhpcy5nZXRGb2N1c0VsZW1lbnQoKT8uc2Nyb2xsSW50b1ZpZXc/Lih7XG4gICAgICAgIGJlaGF2aW9yOiAnc21vb3RoJyxcbiAgICAgICAgYmxvY2s6ICdjZW50ZXInXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICAvLyBAb3ZlcnJpZGFibGVcbiAgICBmb2N1c0VsZW1lbnQoKSB7XG4gICAgICB0aGlzLmdldEZvY3VzRWxlbWVudCgpPy5mb2N1cz8uKClcbiAgICB9LFxuXG4gICAgLy8gQG92ZXJyaWRhYmxlXG4gICAgYmx1ckVsZW1lbnQoKSB7XG4gICAgICB0aGlzLmdldEZvY3VzRWxlbWVudCgpPy5ibHVyPy4oKVxuICAgIH0sXG5cbiAgICBnZXRGb2N1c0VsZW1lbnQoKSB7XG4gICAgICBjb25zdCBlbGVtZW50ID0gYXNBcnJheSh0aGlzLiRyZWZzLmVsZW1lbnQpWzBdID8/IHRoaXNcbiAgICAgIHJldHVybiBlbGVtZW50LiRlbCA/PyBlbGVtZW50XG4gICAgfSxcblxuICAgIGFzeW5jIGZvY3VzU2NoZW1hKCkge1xuICAgICAgLy8gQWxzbyBmb2N1cyB0aGlzIGNvbXBvbmVudCdzIHNjaGVtYSBhbmQgcGFuZWwgaW4gY2FzZSBpdCdzIGEgdGFiLlxuICAgICAgYXdhaXQgdGhpcy5zY2hlbWFDb21wb25lbnQuZm9jdXMoKVxuICAgICAgYXdhaXQgdGhpcy50YWJDb21wb25lbnQ/LmZvY3VzKClcbiAgICB9LFxuXG4gICAgYXN5bmMgZm9jdXMoKSB7XG4gICAgICBhd2FpdCB0aGlzLmZvY3VzU2NoZW1hKClcbiAgICAgIHRoaXMuc2Nyb2xsSW50b1ZpZXcoKVxuICAgICAgdGhpcy5mb2N1c0VsZW1lbnQoKVxuICAgIH0sXG5cbiAgICBibHVyKCkge1xuICAgICAgdGhpcy5ibHVyRWxlbWVudCgpXG4gICAgfSxcblxuICAgIGNsZWFyKCkge1xuICAgICAgdGhpcy52YWx1ZSA9IG51bGxcbiAgICAgIHRoaXMuYmx1cigpXG4gICAgICB0aGlzLm9uQ2hhbmdlKClcbiAgICB9LFxuXG4gICAgb25Gb2N1cygpIHtcbiAgICAgIHRoaXMuZm9jdXNlZCA9IHRydWVcbiAgICAgIHRoaXMubWFya1RvdWNoZWQoKVxuICAgICAgdGhpcy5lbWl0RXZlbnQoJ2ZvY3VzJylcbiAgICB9LFxuXG4gICAgb25CbHVyKCkge1xuICAgICAgdGhpcy5mb2N1c2VkID0gZmFsc2VcbiAgICAgIHRoaXMudmFsaWRhdGUoKVxuICAgICAgdGhpcy5lbWl0RXZlbnQoJ2JsdXInKVxuICAgIH0sXG5cbiAgICBvbklucHV0KCkge1xuICAgICAgdGhpcy5tYXJrRGlydHkoKVxuICAgICAgdGhpcy5lbWl0RXZlbnQoJ2lucHV0JylcbiAgICB9LFxuXG4gICAgb25DaGFuZ2UoKSB7XG4gICAgICB0aGlzLm1hcmtEaXJ0eSgpXG4gICAgICB0aGlzLmVtaXRFdmVudCgnY2hhbmdlJywge1xuICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgLy8gUHJldmVudCBlbmRsZXNzIHBhcnNlIHJlY3Vyc2lvbjpcbiAgICAgICAgICB2YWx1ZTogdGhpcy5wYXJzZWRWYWx1ZSAhPT0gdW5kZWZpbmVkID8gdGhpcy5wYXJzZWRWYWx1ZSA6IHRoaXMudmFsdWVcbiAgICAgICAgfSxcbiAgICAgICAgLy8gUGFzcyBgc2NoZW1hQ29tcG9uZW50YCBhcyBwYXJlbnQsIHNvIGNoYW5nZSBldmVudHMgY2FuIHByb3BhZ2F0ZSB1cC5cbiAgICAgICAgcGFyZW50OiB0aGlzLnNjaGVtYUNvbXBvbmVudFxuICAgICAgfSlcbiAgICB9XG4gIH1cbn1cbiIsImltcG9ydCB7IHRvUmF3IH0gZnJvbSAndnVlJ1xuXG5jb25zdCB1aWRNYXAgPSBuZXcgV2Vha01hcCgpXG5cbi8vIEdlbmVyYXRlZCBhbmQgcmVtZW1iZXJzIHVuaXF1ZSBpZHMgcGVyIHBhc3NlZCBvYmplY3QgdXNpbmcgYSB3ZWFrIG1hcC5cbmxldCB1aWQgPSAwXG5leHBvcnQgZnVuY3Rpb24gZ2V0VWlkKGl0ZW0sIGdldEl0ZW1JZCA9IG51bGwpIHtcbiAgY29uc3QgcmF3ID0gdG9SYXcoaXRlbSlcbiAgbGV0IGlkID0gdWlkTWFwLmdldChyYXcpXG4gIGlmICghaWQpIHtcbiAgICBpZCA9IGdldEl0ZW1JZD8uKGl0ZW0pIHx8IGBAJHsrK3VpZH1gXG4gICAgdWlkTWFwLnNldChyYXcsIGlkKVxuICB9XG4gIHJldHVybiBpZFxufVxuIiwiaW1wb3J0IHsgaXNUZW1wb3JhcnlJZCB9IGZyb20gJy4vZGF0YS5qcydcbmltcG9ydCB7XG4gIGlzSW50ZWdlcixcbiAgYXNBcnJheSxcbiAgcGFyc2VEYXRhUGF0aCxcbiAgZ2V0VmFsdWVBdERhdGFQYXRoXG59IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQgeyBuYW5vaWQgfSBmcm9tICduYW5vaWQnXG5cbi8vIFNjaGVtYUdyYXBoIGlzIGEgY2xhc3MgdG8gY29sbGVjdCBzY2hlbWEgZ3JhcGggbWV0YSBpbmZvcm1hdGlvbiBpbiBvcmRlciB0b1xuLy8gcHJvY2VzcyBzb3VyY2VzIGFuZCByZWxhdGlvbnMgZm9yIHRoZSBnaXZlbiB0YXJnZXRzICdzZXJ2ZXInIGFuZCAnY2xpcGJvYXJkJyxcbi8vIGFjY29yZGluZyB0byB0aGUgZm9sbG93aW5nIHRhYmxlOlxuLy9cbi8vIHwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IC0tLS0tLS0tLSB8IC0tLS0tLS0tLSB8XG4vLyB8IGRhdGEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBzZXJ2ZXIgICAgfCBjbGlwYm9hcmQgfFxuLy8gfCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgLS0tLS0tLS0tIHwgLS0tLS0tLS0tIHxcbi8vIHwgdHlwZTogJ3JlbGF0aW9uJywgaW50ZXJuYWw6IGZhbHNlICAgICAgICAgICB8IGtlZXAgaWQgICB8IGtlZXAgaWQgICB8XG4vLyB8IHR5cGU6ICdyZWxhdGlvbicsIGludGVybmFsOiB0cnVlICAgICAgICAgICAgfCBrZWVwIGlkICAgfCByZWYsICNyZWYgfFxuLy8gfCB0eXBlOiAncmVsYXRpb24nLCBpbnRlcm5hbDogdHJ1ZSwgdGVtcG9yYXJ5IHwgcmVmLCAjcmVmIHwgcmVmLCAjcmVmIHxcbi8vIHwgdHlwZTogJ3NvdXJjZScsIHJlbGF0ZWQ6IGZhbHNlICAgICAgICAgICAgICB8IGtlZXAgaWQgICB8IHJlbW92ZSBpZCB8XG4vLyB8IHR5cGU6ICdzb3VyY2UnLCByZWxhdGVkOiBmYWxzZSwgdGVtcG9yYXJ5ICAgfCByZWYsICNpZCAgfCByZW1vdmUgaWQgfFxuLy8gfCB0eXBlOiAnc291cmNlJywgcmVsYXRlZDogdHJ1ZSAgICAgICAgICAgICAgIHwga2VlcCBpZCAgIHwgcmVmLCAjaWQgIHxcbi8vIHwgdHlwZTogJ3NvdXJjZScsIHJlbGF0ZWQ6IHRydWUsIHRlbXBvcmFyeSAgICB8IHJlZiwgI2lkICB8IHJlZiwgI2lkICB8XG4vLyB8IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCAtLS0tLS0tLS0gfCAtLS0tLS0tLS0gfFxuXG5leHBvcnQgY2xhc3MgU2NoZW1hR3JhcGgge1xuICBncmFwaCA9IHt9XG4gIHJlZmVyZW5jZXMgPSB7fVxuXG4gIHNldChkYXRhUGF0aCwgc2V0dGluZ3MsIGRlZmF1bHRzKSB7XG4gICAgZGF0YVBhdGggPSBwYXJzZURhdGFQYXRoKGRhdGFQYXRoKVxuICAgIGxldCBzdWJHcmFwaCA9IHRoaXMuZ3JhcGhcbiAgICBmb3IgKGNvbnN0IHBhcnQgb2YgZGF0YVBhdGgpIHtcbiAgICAgIGNvbnN0IGtleSA9IGlzSW50ZWdlcigrcGFydCkgPyAnKicgOiBwYXJ0XG4gICAgICBzdWJHcmFwaCA9IHN1YkdyYXBoW2tleV0gPz89IHt9XG4gICAgfVxuICAgIHN1YkdyYXBoLiRzZXR0aW5ncyA9IHtcbiAgICAgIC4uLmRlZmF1bHRzLCAvLyBTZWUgYGFkZFNvdXJjZShkYXRhUGF0aClgXG4gICAgICAuLi5zdWJHcmFwaC4kc2V0dGluZ3MsXG4gICAgICAuLi5zZXR0aW5nc1xuICAgIH1cbiAgfVxuXG4gIGFkZFNvdXJjZShkYXRhUGF0aCwgc2NoZW1hKSB7XG4gICAgLy8gT25seSBzZXQgYHJlbGF0ZWQ6IGZhbHNlYCB0aHJvdWdoIHRoZSBkZWZhdWx0cywgYXMgYHNldFNvdXJjZVJlbGF0ZWQoKWBcbiAgICAvLyBtYXkgYmUgY2FsbGVkIGJlZm9yZSBgYWRkU291cmNlKClgLCBkZXBlbmRpbmcgb24gdGhlIGdyYXBoIHN0cnVjdHVyZS5cbiAgICB0aGlzLnNldChkYXRhUGF0aCwgeyB0eXBlOiAnc291cmNlJywgc2NoZW1hIH0sIHsgcmVsYXRlZDogZmFsc2UgfSlcbiAgfVxuXG4gIHNldFNvdXJjZVJlbGF0ZWQoZGF0YVBhdGgpIHtcbiAgICB0aGlzLnNldChkYXRhUGF0aCwge1xuICAgICAgcmVsYXRlZDogdHJ1ZSxcbiAgICAgIHJlZmVyZW5jZTogdGhpcy5nZXRSZWZlcmVuY2VQcmVmaXgoZGF0YVBhdGgpXG4gICAgfSlcbiAgfVxuXG4gIGFkZFJlbGF0aW9uKGRhdGFQYXRoLCByZWxhdGVkRGF0YVBhdGgsIHNjaGVtYSkge1xuICAgIHRoaXMuc2V0KGRhdGFQYXRoLCB7XG4gICAgICB0eXBlOiAncmVsYXRpb24nLFxuICAgICAgc2NoZW1hLFxuICAgICAgaW50ZXJuYWw6ICEhcmVsYXRlZERhdGFQYXRoLFxuICAgICAgcmVmZXJlbmNlOiB0aGlzLmdldFJlZmVyZW5jZVByZWZpeChyZWxhdGVkRGF0YVBhdGgpXG4gICAgfSlcbiAgfVxuXG4gIGdldFJlZmVyZW5jZVByZWZpeChkYXRhUGF0aCkge1xuICAgIHJldHVybiBkYXRhUGF0aFxuICAgICAgPyAodGhpcy5yZWZlcmVuY2VzW2RhdGFQYXRoXSA/Pz0gbmFub2lkKDYpKVxuICAgICAgOiBudWxsXG4gIH1cblxuICBmbGF0dGVuKCkge1xuICAgIGNvbnN0IGZsYXR0ZW4gPSBncmFwaCA9PiB7XG4gICAgICBjb25zdCBlbnRyaWVzID0gW11cbiAgICAgIGZvciAoY29uc3QgW2tleSwgeyAkc2V0dGluZ3MsIC4uLnN1YkdyYXBoIH1dIG9mIE9iamVjdC5lbnRyaWVzKGdyYXBoKSkge1xuICAgICAgICBpZiAoJHNldHRpbmdzKSB7XG4gICAgICAgICAgZW50cmllcy5wdXNoKFtrZXksICRzZXR0aW5nc10pXG4gICAgICAgIH1cbiAgICAgICAgZm9yIChjb25zdCBbc3ViS2V5LCBzZXR0aW5nc10gb2YgZmxhdHRlbihzdWJHcmFwaCkpIHtcbiAgICAgICAgICBlbnRyaWVzLnB1c2goW2Ake2tleX0vJHtzdWJLZXl9YCwgc2V0dGluZ3NdKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gZW50cmllc1xuICAgIH1cblxuICAgIHJldHVybiBmbGF0dGVuKHRoaXMuZ3JhcGgpXG4gIH1cblxuICBwcm9jZXNzKHNvdXJjZVNjaGVtYSwgZGF0YSwgeyB0YXJnZXQgfSkge1xuICAgIGNvbnN0IGNsaXBib2FyZCA9IHRhcmdldCA9PT0gJ2NsaXBib2FyZCdcbiAgICBpZiAoY2xpcGJvYXJkKSB7XG4gICAgICBkZWxldGUgZGF0YVtzb3VyY2VTY2hlbWEuaWRLZXkgfHwgJ2lkJ11cbiAgICB9XG4gICAgZm9yIChjb25zdCBbZGF0YVBhdGgsIHNldHRpbmdzXSBvZiB0aGlzLmZsYXR0ZW4oKSkge1xuICAgICAgY29uc3QgeyB0eXBlLCBzY2hlbWEsIGludGVybmFsLCByZWxhdGVkLCByZWZlcmVuY2UgfSA9IHNldHRpbmdzXG4gICAgICBjb25zdCBzb3VyY2UgPSB0eXBlID09PSAnc291cmNlJ1xuICAgICAgY29uc3QgcmVsYXRpb24gPSB0eXBlID09PSAncmVsYXRpb24nXG4gICAgICBpZiAoc291cmNlIHx8IHJlbGF0aW9uICYmIGludGVybmFsKSB7XG4gICAgICAgIGNvbnN0IHZhbHVlcyA9IGdldFZhbHVlQXREYXRhUGF0aChkYXRhLCBkYXRhUGF0aCwgKCkgPT4gbnVsbClcbiAgICAgICAgY29uc3QgcmVtb3ZlSWQgPSBjbGlwYm9hcmQgJiYgc291cmNlICYmICFyZWxhdGVkXG4gICAgICAgIGNvbnN0IHJlZmVyZW5jZUlkID0gKFxuICAgICAgICAgIGNsaXBib2FyZCAmJiAoXG4gICAgICAgICAgICByZWxhdGlvbiAmJiBpbnRlcm5hbCB8fFxuICAgICAgICAgICAgc291cmNlICYmIHJlbGF0ZWRcbiAgICAgICAgICApXG4gICAgICAgIClcbiAgICAgICAgZm9yIChjb25zdCB2YWx1ZSBvZiBhc0FycmF5KHZhbHVlcykuZmxhdCgpKSB7XG4gICAgICAgICAgY29uc3QgaWRLZXkgPSAoXG4gICAgICAgICAgICBzb3VyY2UgJiYgc2NoZW1hLmlkS2V5IHx8XG4gICAgICAgICAgICByZWxhdGlvbiAmJiBzY2hlbWEucmVsYXRlQnkgfHxcbiAgICAgICAgICAgICdpZCdcbiAgICAgICAgICApXG4gICAgICAgICAgbGV0IGlkID0gdmFsdWU/LltpZEtleV1cbiAgICAgICAgICBpZiAoaWQgIT0gbnVsbCkge1xuICAgICAgICAgICAgaWYgKHJlbW92ZUlkKSB7XG4gICAgICAgICAgICAgIGRlbGV0ZSB2YWx1ZVtpZEtleV1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChyZWZlcmVuY2VJZCB8fCBpc1RlbXBvcmFyeUlkKGlkKSkge1xuICAgICAgICAgICAgICBpZiAoaXNUZW1wb3JhcnlJZChpZCkpIHtcbiAgICAgICAgICAgICAgICBpZCA9IGlkLnNsaWNlKDEpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY29uc3QgcmVmS2V5ID0gY2xpcGJvYXJkXG4gICAgICAgICAgICAgICAgPyAvLyBDbGlwYm9hcmQganVzdCBuZWVkcyB0ZW1wb3JhcnkgaWRzIHVuZGVyIHRoZSBhY3R1YWwgYGlkS2V5YFxuICAgICAgICAgICAgICAgICAgaWRLZXlcbiAgICAgICAgICAgICAgICA6IC8vIFNlcnZlciB3YW50cyBPYmplY3Rpb24tc3R5bGUgJyNpZCcgLyAnI3JlZicgcGFpcnMuXG4gICAgICAgICAgICAgICAgICBzb3VyY2VcbiAgICAgICAgICAgICAgICAgID8gJyNpZCdcbiAgICAgICAgICAgICAgICAgIDogJyNyZWYnXG4gICAgICAgICAgICAgIGNvbnN0IHJldlZhbHVlID0gY2xpcGJvYXJkXG4gICAgICAgICAgICAgICAgPyBgQCR7aWR9YFxuICAgICAgICAgICAgICAgIDogLy8gS2VlcCB0aGUgaWRzIHVuaXF1ZSBpbiByZWZlcmVuY2UgZ3JvdXBzLCBzaW5jZSB0aGV5XG4gICAgICAgICAgICAgICAgICAvLyByZWZlcmVuY2UgYWNyb3NzIHRoZSBmdWxsIGdyYXBoLlxuICAgICAgICAgICAgICAgICAgcmVmZXJlbmNlXG4gICAgICAgICAgICAgICAgICA/IGAke3JlZmVyZW5jZX0tJHtpZH1gXG4gICAgICAgICAgICAgICAgICA6IGlkIC8vIEEgdGVtcG9yYXJ5IGlkIHdpdGhvdXQgYSByZWxhdGVkLCBqdXN0IHByZXNlcnZlIGl0LlxuICAgICAgICAgICAgICB2YWx1ZVtyZWZLZXldID0gcmV2VmFsdWVcbiAgICAgICAgICAgICAgaWYgKHJlZktleSAhPT0gaWRLZXkpIHtcbiAgICAgICAgICAgICAgICBkZWxldGUgdmFsdWVbaWRLZXldXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGRhdGFcbiAgfVxufVxuIiwiaW1wb3J0IHtcbiAgaXNBcnJheSxcbiAgaXNPYmplY3QsXG4gIGlzU3RyaW5nLFxuICBpc0Jvb2xlYW4sXG4gIGlzTnVtYmVyLFxuICBpc0Z1bmN0aW9uLFxuICBpc0RhdGUsXG4gIGlzUmVnRXhwLFxuICBhc0FycmF5XG59IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbmNvbnN0IHR5cGVDaGVja2VycyA9IHtcbiAgQm9vbGVhbjogaXNCb29sZWFuLFxuICBOdW1iZXI6IGlzTnVtYmVyLFxuICBTdHJpbmc6IGlzU3RyaW5nLFxuICBEYXRlOiBpc0RhdGUsXG4gIEFycmF5OiBpc0FycmF5LFxuICBPYmplY3Q6IGlzT2JqZWN0LFxuICBSZWdFeHA6IGlzUmVnRXhwLFxuICBGdW5jdGlvbjogaXNGdW5jdGlvblxufVxuXG4vLyBEZWNsYXJlIHRoZXNlIHNlcGFyYXRlbHkgZnJvbSB0aGUgYHR5cGVDb252ZXJ0ZXJzYCBvYmplY3QsIHRvIHByZXZlbnRcbi8vIEJhYmVsIGlzc3VlcyB3aXRoIGBPYmplY3RgIG92ZXJyaWRpbmcgdGhlIGdsb2JhbCBgT2JqZWN0YDpcbmNvbnN0IHRvQm9vbGVhbiA9IHZhbHVlID0+ICEhdmFsdWVcbmNvbnN0IHRvTnVtYmVyID0gdmFsdWUgPT4gK3ZhbHVlXG5jb25zdCB0b1N0cmluZyA9IHZhbHVlID0+IFN0cmluZyh2YWx1ZSlcblxuY29uc3QgdG9EYXRlID0gdmFsdWUgPT5cbiAgaXNEYXRlKHZhbHVlKVxuICAgID8gdmFsdWVcbiAgICA6IG5ldyBEYXRlKHZhbHVlKVxuXG5jb25zdCB0b0FycmF5ID0gdmFsdWUgPT5cbiAgaXNBcnJheSh2YWx1ZSlcbiAgICA/IHZhbHVlXG4gICAgOiBpc1N0cmluZyh2YWx1ZSlcbiAgICAgID8gdmFsdWUuc3BsaXQoJywnKVxuICAgICAgOiBhc0FycmF5KHZhbHVlKVxuXG5jb25zdCB0b09iamVjdCA9IHZhbHVlID0+XG4gIGlzT2JqZWN0KHZhbHVlKVxuICAgID8gdmFsdWVcbiAgICA6IC8vIElmIGEgT2JqZWN0IGlzIGV4cGVjdGVkIGJ1dCBhIEJvb2xlYW4gcHJvdmlkZSwgY29udmVydCB0byBhbiBlbXB0eVxuICAgICAgLy8gb2JqZWN0LiBVc2VkIGJ5IGBjcmVhdGFibGVgICYgY28sIHRoYXQgY2FuIGJlIGJvdGguXG4gICAgICB2YWx1ZSA9PT0gdHJ1ZVxuICAgICAgPyB7fVxuICAgICAgOiBudWxsXG5cbmNvbnN0IHRvUmVnRXhwID0gdmFsdWUgPT5cbiAgaXNSZWdFeHAodmFsdWUpXG4gICAgPyB2YWx1ZVxuICAgIDogbmV3IFJlZ0V4cCh2YWx1ZSlcblxuY29uc3QgdHlwZUNvbnZlcnRlcnMgPSB7XG4gIEJvb2xlYW46IHRvQm9vbGVhbixcbiAgTnVtYmVyOiB0b051bWJlcixcbiAgU3RyaW5nOiB0b1N0cmluZyxcbiAgRGF0ZTogdG9EYXRlLFxuICBBcnJheTogdG9BcnJheSxcbiAgT2JqZWN0OiB0b09iamVjdCxcbiAgUmVnRXhwOiB0b1JlZ0V4cFxufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNNYXRjaGluZ1R5cGUodHlwZXMsIHZhbHVlKSB7XG4gIC8vIFNlZSBpZiBhbnkgb2YgdGhlIGV4cGVjdCB0eXBlcyBtYXRjaCwgcmV0dXJuIGltbWVkaWF0ZWx5IGlmIHRoZXkgZG86XG4gIGlmICh0eXBlcyAmJiB2YWx1ZSAhPSBudWxsKSB7XG4gICAgZm9yIChjb25zdCB0eXBlIG9mIHR5cGVzKSB7XG4gICAgICBpZiAodHlwZUNoZWNrZXJzW3R5cGUubmFtZV0/Lih2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIGZhbHNlXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb252ZXJ0VHlwZSh0eXBlLCB2YWx1ZSkge1xuICBjb25zdCBjb252ZXJ0ZXIgPSB0eXBlICYmIHR5cGVDb252ZXJ0ZXJzW3R5cGUubmFtZSB8fCB0eXBlXVxuICByZXR1cm4gY29udmVydGVyID8gY29udmVydGVyKHZhbHVlKSA6IHZhbHVlXG59XG4iLCJpbXBvcnQgRGl0b0NvbnRleHQgZnJvbSAnLi4vRGl0b0NvbnRleHQuanMnXG5pbXBvcnQgRGl0b01peGluIGZyb20gJy4uL21peGlucy9EaXRvTWl4aW4uanMnXG5pbXBvcnQgVHlwZU1peGluIGZyb20gJy4uL21peGlucy9UeXBlTWl4aW4uanMnXG5pbXBvcnQgeyBnZXRVaWQgfSBmcm9tICcuL3VpZC5qcydcbmltcG9ydCB7IFNjaGVtYUdyYXBoIH0gZnJvbSAnLi9TY2hlbWFHcmFwaC5qcydcbmltcG9ydCB7IGFwcGVuZERhdGFQYXRoLCBpc1RlbXBvcmFyeUlkIH0gZnJvbSAnLi9kYXRhLmpzJ1xuaW1wb3J0IHsgaXNNYXRjaGluZ1R5cGUsIGNvbnZlcnRUeXBlIH0gZnJvbSAnLi90eXBlLmpzJ1xuaW1wb3J0IHtcbiAgaXNPYmplY3QsXG4gIGlzU3RyaW5nLFxuICBpc0FycmF5LFxuICBpc0Z1bmN0aW9uLFxuICBpc1Byb21pc2UsXG4gIGlzTW9kdWxlLFxuICBhc0FycmF5LFxuICBjbG9uZSxcbiAgY2FtZWxpemUsXG4gIGFzc2lnbkRlZXBseSxcbiAgbWFwQ29uY3VycmVudGx5LFxuICBnZXRWYWx1ZUF0RGF0YVBhdGhcbn0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCB7IG1hcmtSYXcgfSBmcm9tICd2dWUnXG5cbmNvbnN0IHR5cGVDb21wb25lbnRzID0ge31cbmNvbnN0IHVua25vd25UeXBlUmVwb3J0ZWQgPSB7fVxuXG5leHBvcnQgZnVuY3Rpb24gcmVnaXN0ZXJUeXBlQ29tcG9uZW50KHR5cGUsIGNvbXBvbmVudCkge1xuICB0eXBlQ29tcG9uZW50c1t0eXBlXSA9IGNvbXBvbmVudFxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0VHlwZUNvbXBvbmVudCh0eXBlLCBhbGxvd051bGwgPSBmYWxzZSkge1xuICBjb25zdCBjb21wb25lbnQgPSB0eXBlQ29tcG9uZW50c1t0eXBlXSB8fCBudWxsXG4gIGlmICghY29tcG9uZW50ICYmICFhbGxvd051bGwgJiYgIXVua25vd25UeXBlUmVwb3J0ZWRbdHlwZV0pIHtcbiAgICAvLyBSZXBvcnQgZWFjaCBtaXNzaW5nIHR5cGUgb25seSBvbmNlLCB0byBhdm9pZCBmbG9vZGluZyB0aGUgY29uc29sZTpcbiAgICB1bmtub3duVHlwZVJlcG9ydGVkW3R5cGVdID0gdHJ1ZVxuICAgIHRocm93IG5ldyBFcnJvcihgVW5rbm93biBEaXRvIGNvbXBvbmVudCB0eXBlOiAnJHt0eXBlfSdgKVxuICB9XG4gIHJldHVybiBjb21wb25lbnRcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGl0ZXJhdGVTY2hlbWFDb21wb25lbnRzKHNjaGVtYXMsIGNhbGxiYWNrKSB7XG4gIGZvciAoY29uc3Qgc2NoZW1hIG9mIHNjaGVtYXMpIHtcbiAgICBpZiAoaXNTaW5nbGVDb21wb25lbnRWaWV3KHNjaGVtYSkpIHtcbiAgICAgIGNvbnN0IHJlcyA9IGNhbGxiYWNrKHNjaGVtYS5jb21wb25lbnQsIHNjaGVtYS5uYW1lLCAwKVxuICAgICAgaWYgKHJlcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiByZXNcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGlzU2NoZW1hKHNjaGVtYSkpIHtcbiAgICAgIGZvciAoY29uc3QgW25hbWUsIGNvbXBvbmVudF0gb2YgT2JqZWN0LmVudHJpZXMoc2NoZW1hLmNvbXBvbmVudHMgfHwge30pKSB7XG4gICAgICAgIGNvbnN0IHJlcyA9IGNhbGxiYWNrKGNvbXBvbmVudCwgbmFtZSwgMSlcbiAgICAgICAgaWYgKHJlcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgcmV0dXJuIHJlc1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpdGVyYXRlTmVzdGVkU2NoZW1hQ29tcG9uZW50cyhzY2hlbWEsIGNhbGxiYWNrKSB7XG4gIHJldHVybiBzY2hlbWFcbiAgICA/IGl0ZXJhdGVTY2hlbWFDb21wb25lbnRzKFtzY2hlbWEsIC4uLmdldFRhYlNjaGVtYXMoc2NoZW1hKV0sIGNhbGxiYWNrKVxuICAgIDogdW5kZWZpbmVkXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmaW5kTmVzdGVkU2NoZW1hQ29tcG9uZW50KHNjaGVtYSwgY2FsbGJhY2spIHtcbiAgcmV0dXJuIChcbiAgICBpdGVyYXRlTmVzdGVkU2NoZW1hQ29tcG9uZW50cyhcbiAgICAgIHNjaGVtYSxcbiAgICAgIGNvbXBvbmVudCA9PiAoY2FsbGJhY2soY29tcG9uZW50KSA/IGNvbXBvbmVudCA6IHVuZGVmaW5lZClcbiAgICApID8/IG51bGxcbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gc29tZU5lc3RlZFNjaGVtYUNvbXBvbmVudChzY2hlbWEsIGNhbGxiYWNrKSB7XG4gIHJldHVybiAoXG4gICAgaXRlcmF0ZU5lc3RlZFNjaGVtYUNvbXBvbmVudHMoXG4gICAgICBzY2hlbWEsXG4gICAgICBjb21wb25lbnQgPT4gKGNhbGxiYWNrKGNvbXBvbmVudCkgPyB0cnVlIDogdW5kZWZpbmVkKVxuICAgICkgPz8gZmFsc2VcbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZXZlcnlOZXN0ZWRTY2hlbWFDb21wb25lbnQoc2NoZW1hLCBjYWxsYmFjaykge1xuICByZXR1cm4gKFxuICAgIGl0ZXJhdGVOZXN0ZWRTY2hlbWFDb21wb25lbnRzKFxuICAgICAgc2NoZW1hLFxuICAgICAgY29tcG9uZW50ID0+IChjYWxsYmFjayhjb21wb25lbnQpID8gdW5kZWZpbmVkIDogZmFsc2UpXG4gICAgKSA/PyB0cnVlXG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGhhc05lc3RlZFNjaGVtYUNvbXBvbmVudHMoc2NoZW1hKSB7XG4gIHJldHVybiBzb21lTmVzdGVkU2NoZW1hQ29tcG9uZW50KHNjaGVtYSwgKCkgPT4gdHJ1ZSkgPz8gZmFsc2Vcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzU2NoZW1hKHNjaGVtYSkge1xuICByZXR1cm4gaXNPYmplY3Qoc2NoZW1hKSAmJiBpc1N0cmluZyhzY2hlbWEudHlwZSlcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzRm9ybShzY2hlbWEpIHtcbiAgcmV0dXJuIGlzU2NoZW1hKHNjaGVtYSkgJiYgc2NoZW1hLnR5cGUgPT09ICdmb3JtJ1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNWaWV3KHNjaGVtYSkge1xuICByZXR1cm4gaXNTY2hlbWEoc2NoZW1hKSAmJiBzY2hlbWEudHlwZSA9PT0gJ3ZpZXcnXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1RhYihzY2hlbWEpIHtcbiAgcmV0dXJuIGlzU2NoZW1hKHNjaGVtYSkgJiYgc2NoZW1hLnR5cGUgPT09ICd0YWInXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1BhbmVsKHNjaGVtYSkge1xuICByZXR1cm4gaXNTY2hlbWEoc2NoZW1hKSAmJiBzY2hlbWEudHlwZSA9PT0gJ3BhbmVsJ1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNNZW51KHNjaGVtYSkge1xuICByZXR1cm4gaXNTY2hlbWEoc2NoZW1hKSAmJiBzY2hlbWEudHlwZSA9PT0gJ21lbnUnXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRTY2hlbWFJZGVudGlmaWVyKHNjaGVtYSkge1xuICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoc2NoZW1hKVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVzb2x2ZVNjaGVtYShzY2hlbWEsIHVud3JhcE1vZHVsZSA9IGZhbHNlKSB7XG4gIGlmIChpc0Z1bmN0aW9uKHNjaGVtYSkpIHtcbiAgICBzY2hlbWEgPSBzY2hlbWEoKVxuICB9XG4gIGlmIChpc1Byb21pc2Uoc2NoZW1hKSkge1xuICAgIHNjaGVtYSA9IGF3YWl0IHNjaGVtYVxuICB9XG4gIGlmIChpc01vZHVsZShzY2hlbWEpKSB7XG4gICAgLy8gQ29weSB0byBjb252ZXJ0IGZyb20gbW9kdWxlIHRvIG9iamVjdDpcbiAgICBzY2hlbWEgPSB7IC4uLnNjaGVtYSB9XG4gICAgLy8gVW53cmFwIGRlZmF1bHQgb3IgbmFtZWQgc2NoZW1hXG4gICAgaWYgKCFzY2hlbWEubmFtZSAmJiAodW53cmFwTW9kdWxlIHx8IHNjaGVtYS5kZWZhdWx0KSkge1xuICAgICAgLy8gRmlsdGVyIG91dCBpbnRlcm5hbCBrZXkgYWRkZWQgYnkgdml0ZSAvIHZ1ZSAzIHBsdWdpbiB3aGVuIGNoYW5naW5nXG4gICAgICAvLyBjb2RlIGluIGEgZHluYW1pY2FsbHkgaW1wb3J0ZWQgdnVlIGNvbXBvbmVudCwgc2VlOlxuICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3ZpdGVqcy92aXRlLXBsdWdpbi12dWUvYmxvYi9hYmRmNWY0ZjMyZDAyYWY2NDFlNWY2MDg3MWJkZTE0NTM1NTY5YjFlL3BhY2thZ2VzL3BsdWdpbi12dWUvc3JjL21haW4udHMjTDEzM1xuICAgICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKHNjaGVtYSkuZmlsdGVyKGtleSA9PiBrZXkgIT09ICdfcmVyZW5kZXJfb25seScpXG4gICAgICBpZiAoa2V5cy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgY29uc3QgbmFtZSA9IGtleXNbMF1cbiAgICAgICAgc2NoZW1hID0gc2NoZW1hW25hbWVdXG4gICAgICAgIGlmIChuYW1lICE9PSAnZGVmYXVsdCcpIHtcbiAgICAgICAgICBzY2hlbWEubmFtZSA9IG5hbWVcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gc2NoZW1hXG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZXNvbHZlU2NoZW1hcyhcbiAgdW5yZXNvbHZlZFNjaGVtYXMsXG4gIHJlc29sdmVJdGVtID0gcmVzb2x2ZVNjaGVtYVxuKSB7XG4gIGxldCBzY2hlbWFzID0gaXNGdW5jdGlvbih1bnJlc29sdmVkU2NoZW1hcylcbiAgICA/IHVucmVzb2x2ZWRTY2hlbWFzKClcbiAgICA6IHVucmVzb2x2ZWRTY2hlbWFzXG4gIHNjaGVtYXMgPSBhd2FpdCByZXNvbHZlU2NoZW1hKHNjaGVtYXMsIGZhbHNlKVxuICBpZiAoaXNBcnJheShzY2hlbWFzKSkge1xuICAgIC8vIFRyYW5zbGF0ZSBhbiBhcnJheSBvZiBkeW5hbWljIGltcG9ydCwgZWFjaCBpbXBvcnRpbmcgb25lIG5hbWVkIHNjaGVtYVxuICAgIC8vIG1vZHVsZSB0byBhbiBvYmplY3Qgd2l0aCBuYW1lZCBlbnRyaWVzLlxuICAgIHNjaGVtYXMgPSBPYmplY3QuZnJvbUVudHJpZXMoXG4gICAgICBhd2FpdCBtYXBDb25jdXJyZW50bHkoXG4gICAgICAgIHNjaGVtYXMsXG4gICAgICAgIGFzeW5jIGl0ZW0gPT4ge1xuICAgICAgICAgIGNvbnN0IHNjaGVtYSA9IGF3YWl0IHJlc29sdmVJdGVtKGl0ZW0sIHRydWUpXG4gICAgICAgICAgcmV0dXJuIFtzY2hlbWEubmFtZSwgc2NoZW1hXVxuICAgICAgICB9XG4gICAgICApXG4gICAgKVxuICB9IGVsc2UgaWYgKGlzT2JqZWN0KHNjaGVtYXMpKSB7XG4gICAgc2NoZW1hcyA9IE9iamVjdC5mcm9tRW50cmllcyhcbiAgICAgIGF3YWl0IG1hcENvbmN1cnJlbnRseShcbiAgICAgICAgT2JqZWN0LmVudHJpZXMoc2NoZW1hcyksXG4gICAgICAgIGFzeW5jIChba2V5LCBpdGVtXSkgPT4ge1xuICAgICAgICAgIGNvbnN0IHNjaGVtYSA9IGF3YWl0IHJlc29sdmVJdGVtKGl0ZW0sIHRydWUpXG4gICAgICAgICAgcmV0dXJuIFtrZXksIHNjaGVtYV1cbiAgICAgICAgfVxuICAgICAgKVxuICAgIClcbiAgfVxuICByZXR1cm4gc2NoZW1hc1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVzb2x2ZVZpZXdzKHVucmVzb2x2ZWRWaWV3cykge1xuICByZXR1cm4gcmVzb2x2ZVNjaGVtYXModW5yZXNvbHZlZFZpZXdzLCBhc3luYyAoc2NoZW1hLCB1bndyYXBNb2R1bGUpID0+IHtcbiAgICBzY2hlbWEgPSBhd2FpdCByZXNvbHZlU2NoZW1hKHNjaGVtYSwgdW53cmFwTW9kdWxlKVxuICAgIGlmICghc2NoZW1hLm5hbWUgJiYgaXNNZW51KHNjaGVtYSkpIHtcbiAgICAgIC8vIEdlbmVyYXRlIGEgbmFtZSBmb3Igc3ViLW1lbnVzIGZyb20gdGhlaXIgbGFiZWwgaWYgaXQncyBtaXNzaW5nLlxuICAgICAgLy8gTk9URTogVGhpcyBpcyBuZXZlciBhY3R1YWxseSByZWZlcmVuY2VkIGZyb20gYW55d2hlcmUsIGJ1dCB0aGV5IG5lZWRcbiAgICAgIC8vIGEgbmFtZSBieSB3aGljaCB0aGV5J3JlIHN0b3JlZCBpbiB0aGUgcGFyZW50IG9iamVjdC5cbiAgICAgIHNjaGVtYS5uYW1lID0gY2FtZWxpemUoc2NoZW1hLmxhYmVsKVxuICAgICAgc2NoZW1hLml0ZW1zID0gYXdhaXQgcmVzb2x2ZVNjaGVtYXMoc2NoZW1hLml0ZW1zKVxuICAgIH1cbiAgICByZXR1cm4gc2NoZW1hXG4gIH0pXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmbGF0dGVuVmlld3Modmlld3MpIHtcbiAgcmV0dXJuIE9iamVjdC5mcm9tRW50cmllcyhcbiAgICBPYmplY3QuZW50cmllcyh2aWV3cykucmVkdWNlKFxuICAgICAgKGVudHJpZXMsIFtrZXksIHNjaGVtYV0pID0+IHtcbiAgICAgICAgaWYgKGlzTWVudShzY2hlbWEpKSB7XG4gICAgICAgICAgZW50cmllcy5wdXNoKC4uLk9iamVjdC5lbnRyaWVzKHNjaGVtYS5pdGVtcykpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZW50cmllcy5wdXNoKFtrZXksIHNjaGVtYV0pXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGVudHJpZXNcbiAgICAgIH0sXG4gICAgICBbXVxuICAgIClcbiAgKVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVzb2x2ZVNjaGVtYUNvbXBvbmVudChzY2hlbWEpIHtcbiAgLy8gUmVzb2x2ZXMgYXN5bmMgc2NoZW1hIGNvbXBvbmVudHMgYW5kIGFkZHMgRGl0b01peGluIGFuZCBUeXBlTWl4aW4gdG8gdGhlbS5cbiAgbGV0IHsgY29tcG9uZW50IH0gPSBzY2hlbWFcbiAgaWYgKGNvbXBvbmVudCkge1xuICAgIGNvbXBvbmVudCA9IGF3YWl0IHJlc29sdmVTY2hlbWEoY29tcG9uZW50LCB0cnVlKVxuICAgIGlmIChjb21wb25lbnQpIHtcbiAgICAgIC8vIFByZXZlbnQgd2FybmluZzogXCJWdWUgcmVjZWl2ZWQgYSBDb21wb25lbnQgd2hpY2ggd2FzIG1hZGUgYSByZWFjdGl2ZVxuICAgICAgLy8gb2JqZWN0LiBUaGlzIGNhbiBsZWFkIHRvIHVubmVjZXNzYXJ5IHBlcmZvcm1hbmNlIG92ZXJoZWFkLCBhbmQgc2hvdWxkXG4gICAgICAvLyBiZSBhdm9pZGVkIGJ5IG1hcmtpbmcgdGhlIGNvbXBvbmVudCB3aXRoIGBtYXJrUmF3YFwiOlxuICAgICAgc2NoZW1hLmNvbXBvbmVudCA9IG1hcmtSYXcoe1xuICAgICAgICAuLi5jb21wb25lbnQsXG4gICAgICAgIG1peGluczogW0RpdG9NaXhpbiwgVHlwZU1peGluLCAuLi4oY29tcG9uZW50Lm1peGlucyB8fCBbXSldXG4gICAgICB9KVxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVzb2x2ZVNjaGVtYUNvbXBvbmVudHMoc2NoZW1hcykge1xuICAvLyBgc2NoZW1hc2AgYXJlIG9mIHRoZSBzYW1lIHBvc3NpYmxlIGZvcm1zIGFzIHBhc3NlZCB0byBgZ2V0TmFtZWRTY2hlbWFzKClgXG4gIGF3YWl0IG1hcENvbmN1cnJlbnRseShPYmplY3QudmFsdWVzKHNjaGVtYXMgfHwge30pLCByZXNvbHZlU2NoZW1hQ29tcG9uZW50KVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcHJvY2Vzc1NjaGVtYUNvbXBvbmVudHMoXG4gIGFwaSxcbiAgc2NoZW1hLFxuICByb3V0ZXMgPSBudWxsLFxuICBsZXZlbCA9IDBcbikge1xuICBjb25zdCBwcm9taXNlcyA9IFtdXG4gIGNvbnN0IHByb2Nlc3MgPSAoY29tcG9uZW50LCBuYW1lLCByZWxhdGl2ZUxldmVsKSA9PiB7XG4gICAgcHJvbWlzZXMucHVzaChcbiAgICAgIHByb2Nlc3NTY2hlbWFDb21wb25lbnQoXG4gICAgICAgIGFwaSxcbiAgICAgICAgY29tcG9uZW50LFxuICAgICAgICBuYW1lLFxuICAgICAgICByb3V0ZXMsXG4gICAgICAgIGxldmVsICsgcmVsYXRpdmVMZXZlbFxuICAgICAgKVxuICAgIClcbiAgfVxuXG4gIGl0ZXJhdGVOZXN0ZWRTY2hlbWFDb21wb25lbnRzKHNjaGVtYSwgcHJvY2VzcylcbiAgaXRlcmF0ZVNjaGVtYUNvbXBvbmVudHMoZ2V0UGFuZWxTY2hlbWFzKHNjaGVtYSksIHByb2Nlc3MpXG5cbiAgYXdhaXQgUHJvbWlzZS5hbGwocHJvbWlzZXMpXG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBwcm9jZXNzU2NoZW1hQ29tcG9uZW50KFxuICBhcGksXG4gIHNjaGVtYSxcbiAgbmFtZSxcbiAgcm91dGVzID0gbnVsbCxcbiAgbGV2ZWwgPSAwXG4pIHtcbiAgcHJvY2Vzc1NjaGVtYURlZmF1bHRzKGFwaSwgc2NoZW1hKVxuXG4gIGF3YWl0IFByb21pc2UuYWxsKFtcbiAgICAvLyBBbHNvIHByb2Nlc3MgbmVzdGVkIHBhbmVsIHNjaGVtYXMuXG4gICAgbWFwQ29uY3VycmVudGx5KFxuICAgICAgZ2V0UGFuZWxTY2hlbWFzKHNjaGVtYSksXG4gICAgICBwYW5lbCA9PiBwcm9jZXNzU2NoZW1hQ29tcG9uZW50cyhhcGksIHBhbmVsLCByb3V0ZXMsIGxldmVsKVxuICAgICksXG4gICAgLy8gRGVsZWdhdGUgc2NoZW1hIHByb2Nlc3NpbmcgdG8gdGhlIGFjdHVhbCB0eXBlIGNvbXBvbmVudHMuXG4gICAgZ2V0VHlwZU9wdGlvbnMoc2NoZW1hKT8ucHJvY2Vzc1NjaGVtYT8uKFxuICAgICAgYXBpLFxuICAgICAgc2NoZW1hLFxuICAgICAgbmFtZSxcbiAgICAgIHJvdXRlcyxcbiAgICAgIGxldmVsXG4gICAgKVxuICBdKVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcHJvY2Vzc1ZpZXcoY29tcG9uZW50LCBhcGksIHNjaGVtYSwgbmFtZSwgZnVsbFBhdGggPSAnJykge1xuICBwcm9jZXNzU2NoZW1hRGVmYXVsdHMoYXBpLCBzY2hlbWEpXG4gIHByb2Nlc3NSb3V0ZVNjaGVtYShhcGksIHNjaGVtYSwgbmFtZSwgZnVsbFBhdGgpXG4gIGxldCBjaGlsZHJlbiA9IFtdXG4gIGlmIChpc1ZpZXcoc2NoZW1hKSkge1xuICAgIGF3YWl0IHByb2Nlc3NOZXN0ZWRTY2hlbWFzKGFwaSwgc2NoZW1hKVxuICAgIGF3YWl0IHByb2Nlc3NTY2hlbWFDb21wb25lbnRzKGFwaSwgc2NoZW1hLCBjaGlsZHJlbilcbiAgfSBlbHNlIGlmIChpc01lbnUoc2NoZW1hKSkge1xuICAgIGNoaWxkcmVuID0gYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICBPYmplY3QuZW50cmllcyhzY2hlbWEuaXRlbXMpLm1hcChhc3luYyAoW25hbWUsIGl0ZW1dKSA9PlxuICAgICAgICBwcm9jZXNzVmlldyhjb21wb25lbnQsIGFwaSwgaXRlbSwgbmFtZSwgc2NoZW1hLmZ1bGxQYXRoKVxuICAgICAgKVxuICAgIClcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgdmlldyBzY2hlbWE6ICcke2dldFNjaGVtYUlkZW50aWZpZXIoc2NoZW1hKX0nYClcbiAgfVxuICByZXR1cm4ge1xuICAgIHBhdGg6IHNjaGVtYS5mdWxsUGF0aCxcbiAgICBjaGlsZHJlbixcbiAgICBjb21wb25lbnQsXG4gICAgbWV0YToge1xuICAgICAgYXBpLFxuICAgICAgc2NoZW1hXG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9jZXNzU2NoZW1hRGVmYXVsdHMoYXBpLCBzY2hlbWEpIHtcbiAgbGV0IGRlZmF1bHRzID0gYXBpLmRlZmF1bHRzW3NjaGVtYS50eXBlXVxuICBpZiAoZGVmYXVsdHMpIHtcbiAgICBpZiAoaXNGdW5jdGlvbihkZWZhdWx0cykpIHtcbiAgICAgIGRlZmF1bHRzID0gZGVmYXVsdHMoc2NoZW1hKVxuICAgIH1cbiAgICBpZiAoaXNPYmplY3QoZGVmYXVsdHMpKSB7XG4gICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhkZWZhdWx0cykpIHtcbiAgICAgICAgaWYgKHNjaGVtYVtrZXldID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBzY2hlbWFba2V5XSA9IHZhbHVlXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc2NoZW1hW2tleV0gPSBhc3NpZ25EZWVwbHkodmFsdWUsIHNjaGVtYVtrZXldKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9jZXNzTmVzdGVkU2NoZW1hRGVmYXVsdHMoYXBpLCBzY2hlbWEpIHtcbiAgLy8gUHJvY2VzcyBkZWZhdWx0cyBmb3IgbmVzdGVkIHNjaGVtYXMuIE5vdGUgdGhhdCB0aGlzIGlzIGFsc28gZG9uZSB3aGVuXG4gIC8vIGNhbGxpbmcgYHByb2Nlc3NTY2hlbWFDb21wb25lbnRzKClgLCBidXQgdGhhdCBmdW5jdGlvbiBpcyBhc3luYywgYW5kIHdlXG4gIC8vIG5lZWQgYSBzeW5jIHZlcnNpb24gdGhhdCBvbmx5IGhhbmRsZXMgdGhlIGRlZmF1bHRzIGZvciBmaWx0ZXJzLCBzZWVcbiAgLy8gYGdldEZpbHRlcnNQYW5lbCgpYC5cbiAgaXRlcmF0ZU5lc3RlZFNjaGVtYUNvbXBvbmVudHMoc2NoZW1hLCBjb21wb25lbnQgPT4ge1xuICAgIHByb2Nlc3NTY2hlbWFEZWZhdWx0cyhhcGksIGNvbXBvbmVudClcbiAgICBjb25zdCBmb3JtcyA9IGdldEZvcm1TY2hlbWFzKGNvbXBvbmVudClcbiAgICBmb3IgKGNvbnN0IGZvcm0gb2YgT2JqZWN0LnZhbHVlcyhmb3JtcykpIHtcbiAgICAgIHByb2Nlc3NOZXN0ZWRTY2hlbWFEZWZhdWx0cyhhcGksIGZvcm0pXG4gICAgfVxuICB9KVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvY2Vzc1JvdXRlU2NoZW1hKGFwaSwgc2NoZW1hLCBuYW1lLCBmdWxsUGF0aCA9IG51bGwpIHtcbiAgLy8gVXNlZCBmb3IgdmlldyBhbmQgc291cmNlIHNjaGVtYXMsIHNlZSBTb3VyY2VNaXhpbi5cbiAgc2NoZW1hLm5hbWUgPz89IG5hbWVcbiAgc2NoZW1hLnBhdGggPz89IGFwaS5ub3JtYWxpemVQYXRoKG5hbWUpXG4gIGlmIChmdWxsUGF0aCAhPT0gbnVsbCkge1xuICAgIHNjaGVtYS5mdWxsUGF0aCA9IGAke2Z1bGxQYXRofS8ke3NjaGVtYS5wYXRofWBcbiAgfVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcHJvY2Vzc0Zvcm1zKGFwaSwgc2NoZW1hLCBsZXZlbCkge1xuICAvLyBGaXJzdCByZXNvbHZlIHRoZSBmb3JtcyBhbmQgc3RvcmUgdGhlIHJlc3VsdHMgYmFjayBvbiB0aGUgc2NoZW1hLlxuICBsZXQgeyBmb3JtLCBmb3JtcywgY29tcG9uZW50cyB9ID0gc2NoZW1hXG4gIGlmIChmb3Jtcykge1xuICAgIGZvcm1zID0gc2NoZW1hLmZvcm1zID0gYXdhaXQgcmVzb2x2ZVNjaGVtYXMoZm9ybXMsIGZvcm0gPT5cbiAgICAgIHByb2Nlc3NGb3JtKGFwaSwgZm9ybSlcbiAgICApXG4gIH0gZWxzZSBpZiAoZm9ybSkge1xuICAgIGZvcm0gPSBzY2hlbWEuZm9ybSA9IGF3YWl0IHByb2Nlc3NGb3JtKGFwaSwgZm9ybSlcbiAgfSBlbHNlIGlmIChpc09iamVjdChjb21wb25lbnRzKSkge1xuICAgIC8vIE5PVEU6IFByb2Nlc3NpbmcgZm9ybXMgaW4gY29tcHV0ZWQgY29tcG9uZW50cyBpcyBub3Qgc3VwcG9ydGVkLCBzaW5jZSBpdFxuICAgIC8vIG9ubHkgY2FuIGJlIGNvbXB1dGVkIGluIGNvbmp1bmN0aW9uIHdpdGggYWN0dWFsIGRhdGEuXG4gICAgZm9ybSA9IHtcbiAgICAgIHR5cGU6ICdmb3JtJyxcbiAgICAgIGNvbXBvbmVudHNcbiAgICB9XG4gIH1cblxuICBmb3JtcyB8fD0geyBkZWZhdWx0OiBmb3JtIH0gLy8gT25seSB1c2VkIGZvciBwcm9jZXNzIGxvb3AgYmVsb3cuXG4gIGNvbnN0IGNoaWxkcmVuID0gW11cbiAgZm9yIChjb25zdCBmb3JtIG9mIE9iamVjdC52YWx1ZXMoZm9ybXMpKSB7XG4gICAgYXdhaXQgcHJvY2Vzc1NjaGVtYUNvbXBvbmVudHMoYXBpLCBmb3JtLCBjaGlsZHJlbiwgbGV2ZWwpXG4gIH1cbiAgcmV0dXJuIGNoaWxkcmVuXG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBwcm9jZXNzRm9ybShhcGksIHNjaGVtYSkge1xuICBzY2hlbWEgPSBhd2FpdCByZXNvbHZlU2NoZW1hKHNjaGVtYSwgdHJ1ZSlcbiAgaWYgKCFpc0Zvcm0oc2NoZW1hKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBmb3JtIHNjaGVtYTogJyR7Z2V0U2NoZW1hSWRlbnRpZmllcihzY2hlbWEpfSdgKVxuICB9XG4gIHByb2Nlc3NTY2hlbWFEZWZhdWx0cyhhcGksIHNjaGVtYSlcbiAgYXdhaXQgcHJvY2Vzc05lc3RlZFNjaGVtYXMoYXBpLCBzY2hlbWEpXG4gIHJldHVybiBzY2hlbWFcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHByb2Nlc3NUYWIoYXBpLCBzY2hlbWEpIHtcbiAgc2NoZW1hID0gYXdhaXQgcmVzb2x2ZVNjaGVtYShzY2hlbWEsIHRydWUpXG4gIGlmICghaXNUYWIoc2NoZW1hKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCB0YWIgc2NoZW1hOiAnJHtnZXRTY2hlbWFJZGVudGlmaWVyKHNjaGVtYSl9J2ApXG4gIH1cbiAgcHJvY2Vzc1NjaGVtYURlZmF1bHRzKGFwaSwgc2NoZW1hKVxuICByZXR1cm4gc2NoZW1hXG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBwcm9jZXNzUGFuZWwoYXBpLCBzY2hlbWEpIHtcbiAgc2NoZW1hID0gYXdhaXQgcmVzb2x2ZVNjaGVtYShzY2hlbWEsIHRydWUpXG4gIGlmICghaXNQYW5lbChzY2hlbWEpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHBhbmVsIHNjaGVtYTogJyR7Z2V0U2NoZW1hSWRlbnRpZmllcihzY2hlbWEpfSdgKVxuICB9XG4gIHByb2Nlc3NTY2hlbWFEZWZhdWx0cyhhcGksIHNjaGVtYSlcbiAgcmV0dXJuIHNjaGVtYVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcHJvY2Vzc05lc3RlZFNjaGVtYXMoYXBpLCBzY2hlbWEpIHtcbiAgY29uc3QgeyB0YWJzLCBwYW5lbHMgfSA9IHNjaGVtYVxuICBpZiAodGFicykge1xuICAgIHNjaGVtYS50YWJzID0gYXdhaXQgcmVzb2x2ZVNjaGVtYXMoXG4gICAgICB0YWJzLFxuICAgICAgdGFiID0+IHByb2Nlc3NUYWIoYXBpLCB0YWIpXG4gICAgKVxuICB9XG4gIGlmIChwYW5lbHMpIHtcbiAgICBzY2hlbWEucGFuZWxzID0gYXdhaXQgcmVzb2x2ZVNjaGVtYXMoXG4gICAgICBwYW5lbHMsXG4gICAgICBwYW5lbCA9PiBwcm9jZXNzUGFuZWwoYXBpLCBwYW5lbClcbiAgICApXG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGhhc0Zvcm1TY2hlbWEoc2NoZW1hKSB7XG4gIC8vIFN1cHBvcnQgYm90aCBzaW5nbGUgZm9ybSBhbmQgbXVsdGlwbGUgZm9ybXMgbm90YXRpb24sIGFzIHdlbGwgYXMgaW5saW5lZFxuICAvLyBjb21wb25lbnRzLlxuICByZXR1cm4gKFxuICAgIGlzU2NoZW1hKHNjaGVtYSkgJiZcbiAgICBpc09iamVjdChzY2hlbWEuZm9ybSB8fCBzY2hlbWEuZm9ybXMgfHwgc2NoZW1hLmNvbXBvbmVudHMpXG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGhhc011bHRpcGxlRm9ybVNjaGVtYXMoc2NoZW1hKSB7XG4gIHJldHVybiAoXG4gICAgaXNTY2hlbWEoc2NoZW1hKSAmJlxuICAgIE9iamVjdC5rZXlzKHNjaGVtYT8uZm9ybXMgfHwge30pLmxlbmd0aCA+IDFcbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNTaW5nbGVDb21wb25lbnRWaWV3KHNjaGVtYSkge1xuICByZXR1cm4gKFxuICAgIGlzVmlldyhzY2hlbWEpICYmXG4gICAgaXNPYmplY3Qoc2NoZW1hLmNvbXBvbmVudClcbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Vmlld0Zvcm1TY2hlbWEoc2NoZW1hLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgdmlldyB9ID0gc2NoZW1hXG4gIGNvbnN0IHZpZXdTY2hlbWEgPSB2aWV3ICYmIGNvbnRleHQuZmxhdHRlbmVkVmlld3Nbdmlld11cbiAgcmV0dXJuIHZpZXdTY2hlbWFcbiAgICA/IC8vIE5PVEU6IFZpZXdzIGNhbiBoYXZlIHRhYnMsIGluIHdoaWNoIGNhc2UgdGhlIHZpZXcgY29tcG9uZW50IGlzIG5lc3RlZFxuICAgICAgLy8gaW4gb25lIG9mIHRoZSB0YWJzLCBnbyBmaW5kIGl0LlxuICAgICAgZmluZE5lc3RlZFNjaGVtYUNvbXBvbmVudCh2aWV3U2NoZW1hLCBoYXNGb3JtU2NoZW1hKSB8fCBudWxsXG4gICAgOiBudWxsXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRWaWV3U2NoZW1hKHNjaGVtYSwgY29udGV4dCkge1xuICByZXR1cm4gZ2V0Vmlld0Zvcm1TY2hlbWEoc2NoZW1hLCBjb250ZXh0KVxuICAgID8gY29udGV4dC5mbGF0dGVuZWRWaWV3c1tzY2hlbWEudmlld11cbiAgICA6IG51bGxcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGhhc1ZpZXdTY2hlbWEoc2NoZW1hLCBjb250ZXh0KSB7XG4gIHJldHVybiAhIWdldFZpZXdTY2hlbWEoc2NoZW1hLCBjb250ZXh0KVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Vmlld0VkaXRQYXRoKHNjaGVtYSwgaWQsIGNvbnRleHQpIHtcbiAgY29uc3QgdmlldyA9IGdldFZpZXdTY2hlbWEoc2NoZW1hLCBjb250ZXh0KVxuICBpZiAodmlldykge1xuICAgIGNvbnN0IHBhdGggPSBpc1NpbmdsZUNvbXBvbmVudFZpZXcodmlldylcbiAgICAgID8gdmlldy5mdWxsUGF0aFxuICAgICAgOiBgJHt2aWV3LmZ1bGxQYXRofS8ke3ZpZXcucGF0aH1gXG4gICAgcmV0dXJuIGAke3BhdGh9LyR7aWR9YFxuICB9XG4gIHJldHVybiBudWxsXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRGb3JtU2NoZW1hcyhzY2hlbWEsIGNvbnRleHQsIG1vZGlmeUZvcm0pIHtcbiAgY29uc3Qgdmlld1NjaGVtYSA9IGNvbnRleHQgJiYgZ2V0Vmlld0Zvcm1TY2hlbWEoc2NoZW1hLCBjb250ZXh0KVxuICBpZiAodmlld1NjaGVtYSkge1xuICAgIHNjaGVtYSA9IHZpZXdTY2hlbWFcbiAgfSBlbHNlIGlmIChzY2hlbWEudmlldykge1xuICAgIHRocm93IG5ldyBFcnJvcihgVW5rbm93biB2aWV3OiAnJHtzY2hlbWEudmlld30nYClcbiAgfVxuXG4gIGxldCB7IGZvcm0sIGZvcm1zIH0gPSBzY2hlbWFcbiAgaWYgKCFmb3JtICYmICFmb3Jtcykge1xuICAgIGNvbnN0IHsgbmFtZSwgY29tcGFjdCwgY2xpcGJvYXJkLCB0YWJzLCBjb21wb25lbnRzIH0gPSBzY2hlbWFcbiAgICBpZiAoY29tcG9uZW50cyB8fCB0YWJzKSB7XG4gICAgICAvLyBDb252ZXJ0IGlubGluZWQgZm9ybXMgdG8gc3RhbmQtYWxvbmUgZm9ybXMsIHN1cHBvcnRpbmcgYG5hbWVgLFxuICAgICAgLy8gYGNvbXBhY3RgLCBgY2xpcGJvYXJkYCwgYHRhYnNgIGFuZCBgY29tcG9uZW50c2Agc2V0dGluZ3MuXG4gICAgICBmb3JtID0geyB0eXBlOiAnZm9ybScsIG5hbWUsIGNvbXBhY3QsIGNsaXBib2FyZCwgdGFicywgY29tcG9uZW50cyB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIE5vIGBmb3Jtc2AsIGBmb3JtYCBvciBgY29tcG9uZW50c2AsIHJldHVybiBhbmQgZW1wdHkgYGZvcm1zYCBvYmplY3QuXG4gICAgICByZXR1cm4ge31cbiAgICB9XG4gIH1cbiAgZm9ybXMgfHw9IHsgZGVmYXVsdDogZm9ybSB9XG4gIHJldHVybiBPYmplY3QuZnJvbUVudHJpZXMoXG4gICAgT2JqZWN0LmVudHJpZXMoZm9ybXMpLm1hcCgoW3R5cGUsIGZvcm1dKSA9PiB7XG4gICAgICAvLyBTdXBwb3J0IGBzY2hlbWEuY29tcG9uZW50c2AgY2FsbGJhY2tzIHRvIGNyZWF0ZSBjb21wb25lbnRzIG9uIHRoZSBmbHkuXG4gICAgICBpZiAoY29udGV4dCAmJiBpc0Z1bmN0aW9uKGZvcm0uY29tcG9uZW50cykpIHtcbiAgICAgICAgZm9ybSA9IHtcbiAgICAgICAgICAuLi5mb3JtLFxuICAgICAgICAgIGNvbXBvbmVudHM6IGZvcm0uY29tcG9uZW50cyhjb250ZXh0KVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gW3R5cGUsIG1vZGlmeUZvcm0/Lihmb3JtKSA/PyBmb3JtXVxuICAgIH0pXG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEl0ZW1Gb3JtU2NoZW1hRnJvbUZvcm1zKGZvcm1zLCBpdGVtKSB7XG4gIHJldHVybiBmb3Jtc1tpdGVtPy50eXBlXSB8fCBmb3Jtcy5kZWZhdWx0IHx8IG51bGxcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEl0ZW1Gb3JtU2NoZW1hKHNjaGVtYSwgaXRlbSwgY29udGV4dCkge1xuICByZXR1cm4gZ2V0SXRlbUZvcm1TY2hlbWFGcm9tRm9ybXMoZ2V0Rm9ybVNjaGVtYXMoc2NoZW1hLCBjb250ZXh0KSwgaXRlbSlcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzQ29tcGFjdChzY2hlbWEpIHtcbiAgcmV0dXJuICEhc2NoZW1hLmNvbXBhY3Rcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzSW5saW5lZChzY2hlbWEpIHtcbiAgcmV0dXJuICEhKHNjaGVtYS5pbmxpbmVkIHx8IHNjaGVtYS5jb21wb25lbnRzKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNOZXN0ZWQoc2NoZW1hKSB7XG4gIHJldHVybiAhIShzY2hlbWEubmVzdGVkIHx8IGdldFR5cGVPcHRpb25zKHNjaGVtYSk/LmRlZmF1bHROZXN0ZWQgPT09IHRydWUpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoYXNMYWJlbChzY2hlbWEsIGdlbmVyYXRlTGFiZWxzKSB7XG4gIGNvbnN0IHsgbGFiZWwgfSA9IHNjaGVtYVxuICByZXR1cm4gKFxuICAgIGxhYmVsICE9PSBmYWxzZSAmJiAoXG4gICAgICAhIWxhYmVsIHx8XG4gICAgICBnZW5lcmF0ZUxhYmVscyAmJiBnZXRUeXBlT3B0aW9ucyhzY2hlbWEpPy5nZW5lcmF0ZUxhYmVsXG4gICAgKVxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBvbWl0U3BhY2luZyhzY2hlbWEpIHtcbiAgcmV0dXJuICEhZ2V0VHlwZU9wdGlvbnMoc2NoZW1hKT8ub21pdFNwYWNpbmdcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFNjaGVtYVZhbHVlKFxuICBrZXlPckRhdGFQYXRoLFxuICB7IHR5cGUsIHNjaGVtYSwgY2FsbGJhY2sgPSB0cnVlLCBkZWZhdWx0OiBkZWYsIGNvbnRleHQgfSA9IHt9XG4pIHtcbiAgY29uc3QgdHlwZXMgPSB0eXBlICYmIGFzQXJyYXkodHlwZSlcbiAgLy8gRm9yIHBlcmZvcm1hbmNlIHJlYXNvbnMsIGRhdGEtcGF0aHMgaW4gYGtleU9yRGF0YVBhdGhgIGNhbiBvbmx5IGJlXG4gIC8vIHByb3ZpZGVkIGluIGluIGFycmF5IGZvcm1hdCBoZXJlOlxuICBsZXQgdmFsdWUgPSBzY2hlbWFcbiAgICA/IGlzQXJyYXkoa2V5T3JEYXRhUGF0aClcbiAgICAgID8gZ2V0VmFsdWVBdERhdGFQYXRoKHNjaGVtYSwga2V5T3JEYXRhUGF0aCwgKCkgPT4gdW5kZWZpbmVkKVxuICAgICAgOiBzY2hlbWFba2V5T3JEYXRhUGF0aF1cbiAgICA6IHVuZGVmaW5lZFxuXG4gIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkICYmIGRlZiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgaWYgKGNhbGxiYWNrICYmIGlzRnVuY3Rpb24oZGVmKSAmJiAhaXNNYXRjaGluZ1R5cGUodHlwZXMsIGRlZikpIHtcbiAgICAgIC8vIFN1cHBvcnQgYGRlZmF1bHQoKWAgZnVuY3Rpb25zIGZvciBhbnkgdHlwZSBleGNlcHQgYEZ1bmN0aW9uYDpcbiAgICAgIGRlZiA9IGRlZihjb250ZXh0KVxuICAgIH1cbiAgICByZXR1cm4gZGVmXG4gIH1cblxuICBpZiAoaXNNYXRjaGluZ1R5cGUodHlwZXMsIHZhbHVlKSkge1xuICAgIHJldHVybiB2YWx1ZVxuICB9XG4gIC8vIEFueSBzY2hlbWEgdmFsdWUgaGFuZGxlZCB0aHJvdWdoIGBnZXRTY2hlbWFWYWx1ZSgpYCBjYW4gcHJvdmlkZVxuICAvLyBhIGZ1bmN0aW9uIHRoYXQncyByZXNvbHZlZCB3aGVuIHRoZSB2YWx1ZSBpcyBldmFsdWF0ZWQ6XG4gIGlmIChjYWxsYmFjayAmJiBpc0Z1bmN0aW9uKHZhbHVlKSkge1xuICAgIHZhbHVlID0gdmFsdWUoY29udGV4dClcbiAgfVxuICAvLyBOb3cgZmluYWxseSBzZWUgaWYgd2UgY2FuIGNvbnZlcnQgdG8gdGhlIGV4cGVjdCB0eXBlcy5cbiAgaWYgKHR5cGVzICYmIHZhbHVlICE9IG51bGwgJiYgIWlzTWF0Y2hpbmdUeXBlKHR5cGVzLCB2YWx1ZSkpIHtcbiAgICBmb3IgKGNvbnN0IHR5cGUgb2YgdHlwZXMpIHtcbiAgICAgIGNvbnN0IGNvbnZlcnRlZCA9IGNvbnZlcnRUeXBlKHR5cGUsIHZhbHVlKVxuICAgICAgaWYgKGNvbnZlcnRlZCAhPT0gdmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIGNvbnZlcnRlZFxuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gdmFsdWVcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNob3VsZFJlbmRlclNjaGVtYShzY2hlbWEsIGNvbnRleHQpIHtcbiAgcmV0dXJuIChcbiAgICBnZXRTY2hlbWFWYWx1ZSgnaWYnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgc2NoZW1hLFxuICAgICAgY29udGV4dCxcbiAgICAgIGRlZmF1bHQ6IHRydWVcbiAgICB9KSAmJiAoXG4gICAgICAhaGFzTmVzdGVkU2NoZW1hQ29tcG9uZW50cyhzY2hlbWEpIHx8XG4gICAgICBzb21lTmVzdGVkU2NoZW1hQ29tcG9uZW50KHNjaGVtYSwgY29tcG9uZW50ID0+XG4gICAgICAgIHNob3VsZFJlbmRlclNjaGVtYShjb21wb25lbnQsIGNvbnRleHQpXG4gICAgICApXG4gICAgKVxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXREZWZhdWx0VmFsdWUoc2NoZW1hKSB7XG4gIC8vIFN1cHBvcnQgZGVmYXVsdCB2YWx1ZXMgYm90aCBvbiBzY2hlbWEgYW5kIG9uIGNvbXBvbmVudCBsZXZlbC5cbiAgLy8gTk9URTogQXQgdGhlIHRpbWUgb2YgY3JlYXRpb24sIGNvbXBvbmVudHMgbWF5IG5vdCBiZSBpbnN0YW50aWF0ZWQsIChlLmcuIGlmXG4gIC8vIGVudHJpZXMgYXJlIGNyZWF0ZWQgdGhyb3VnaCBuZXN0ZWQgZm9ybXMsIHRoZSBwYXJlbnQgZm9ybSBpc24ndCBtb3VudGVkKSBzb1xuICAvLyB3ZSBjYW4ndCB1c2UgYGRhdGFQYXRoYCB0byBnZXQgdG8gY29tcG9uZW50cywgYW5kIHRoZSBgZGVmYXVsdFZhbHVlYCBmcm9tXG4gIC8vIHRoZXJlLiBUaGF0J3Mgd2h5IGBkZWZhdWx0VmFsdWVgIGlzIGRlZmluZWQgc3RhdGljYWxseSBpbiB0aGUgY29tcG9uZW50czpcbiAgY29uc3QgZGVmYXVsdFZhbHVlID0gc2NoZW1hLmRlZmF1bHRcbiAgY29uc3QgdmFsdWUgPVxuICAgIGRlZmF1bHRWYWx1ZSAhPT0gdW5kZWZpbmVkXG4gICAgICA/IGRlZmF1bHRWYWx1ZVxuICAgICAgOiBnZXRUeXBlT3B0aW9ucyhzY2hlbWEpPy5kZWZhdWx0VmFsdWVcbiAgcmV0dXJuIGlzRnVuY3Rpb24odmFsdWUpXG4gICAgPyB2YWx1ZShzY2hlbWEpXG4gICAgOiBjbG9uZSh2YWx1ZSlcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlnbm9yZU1pc3NpbmdWYWx1ZShzY2hlbWEpIHtcbiAgY29uc3QgdHlwZU9wdGlvbnMgPSBnZXRUeXBlT3B0aW9ucyhzY2hlbWEpXG4gIHJldHVybiAhIShcbiAgICB0eXBlT3B0aW9ucz8uZXhjbHVkZVZhbHVlIHx8IHR5cGVPcHRpb25zPy5pZ25vcmVNaXNzaW5nVmFsdWU/LihzY2hlbWEpXG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldERlZmF1bHRWYWx1ZXMoc2NoZW1hLCBkYXRhID0ge30sIGNvbXBvbmVudCkge1xuICBjb25zdCBvcHRpb25zID0geyBjb21wb25lbnQsIHJvb3REYXRhOiBkYXRhIH1cblxuICBjb25zdCBwcm9jZXNzQmVmb3JlID0gKHNjaGVtYSwgZGF0YSwgbmFtZSkgPT4ge1xuICAgIGlmICghKG5hbWUgaW4gZGF0YSkgJiYgIWlnbm9yZU1pc3NpbmdWYWx1ZShzY2hlbWEpKSB7XG4gICAgICBkYXRhW25hbWVdID0gZ2V0RGVmYXVsdFZhbHVlKHNjaGVtYSlcbiAgICB9XG4gIH1cblxuICAvLyBTZXRzIHVwIGEgZGF0YSBvYmplY3QgdGhhdCBoYXMga2V5cyB3aXRoIGRlZmF1bHQgdmFsdWVzIGZvciBhbGxcbiAgLy8gZm9ybSBmaWVsZHMsIHNvIHRoZXkgY2FuIGJlIGNvcnJlY3RseSB3YXRjaGVkIGZvciBjaGFuZ2VzLlxuICByZXR1cm4gcHJvY2Vzc1NjaGVtYURhdGEoXG4gICAgc2NoZW1hLFxuICAgIGRhdGEsXG4gICAgbnVsbCxcbiAgICBudWxsLFxuICAgIHByb2Nlc3NCZWZvcmUsXG4gICAgbnVsbCxcbiAgICBvcHRpb25zXG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbXB1dGVWYWx1ZShzY2hlbWEsIGRhdGEsIG5hbWUsIGRhdGFQYXRoLCB7XG4gIGNvbXBvbmVudCA9IG51bGwsXG4gIHJvb3REYXRhID0gY29tcG9uZW50Py5yb290RGF0YVxufSA9IHt9KSB7XG4gIGNvbnN0IHsgY29tcHV0ZSB9ID0gc2NoZW1hXG4gIGlmIChjb21wdXRlKSB7XG4gICAgY29uc3QgdmFsdWUgPSBjb21wdXRlKFxuICAgICAgbmV3IERpdG9Db250ZXh0KGNvbXBvbmVudCwge1xuICAgICAgICBzY2hlbWEsXG4gICAgICAgIC8vIE92ZXJyaWRlIHZhbHVlIHRvIHByZXZlbnQgZW5kbGVzcyByZWN1cnNpb24gdGhyb3VnaCBjYWxsaW5nIHRoZVxuICAgICAgICAvLyBnZXR0ZXIgZm9yIGB0aGlzLnZhbHVlYCBpbiBgRGl0b0NvbnRleHRgOlxuICAgICAgICB2YWx1ZTogZGF0YVtuYW1lXSxcbiAgICAgICAgbmFtZSxcbiAgICAgICAgZGF0YSxcbiAgICAgICAgZGF0YVBhdGgsXG4gICAgICAgIHJvb3REYXRhXG4gICAgICB9KVxuICAgIClcbiAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gQWNjZXNzIGBkYXRhW25hbWVdYCBkaXJlY3RseSB0byB1cGRhdGUgdGhlIHZhbHVlIHdpdGhvdXQgY2FsbGluZ1xuICAgICAgLy8gcGFyc2UoKTpcbiAgICAgIGRhdGFbbmFtZV0gPSB2YWx1ZVxuICAgIH1cbiAgfVxuICAvLyBJZiB0aGUgdmFsdWUgaXMgc3RpbGwgbWlzc2luZyBhZnRlciBjb21wdXRlLCBzZXQgdGhlIGRlZmF1bHQgZm9yIGl0OlxuICBpZiAoIShuYW1lIGluIGRhdGEpICYmICFpZ25vcmVNaXNzaW5nVmFsdWUoc2NoZW1hKSkge1xuICAgIGRhdGFbbmFtZV0gPSBnZXREZWZhdWx0VmFsdWUoc2NoZW1hKVxuICB9XG4gIC8vIE5vdyBhY2Nlc3MgdGhlIHZhbHVlLiBUaGlzIGlzIGltcG9ydGFudCBmb3IgcmVhY3Rpdml0eSBhbmQgbmVlZHMgdG9cbiAgLy8gaGFwcGVuIGFmdGVyIGFsbCBwcmlvciBtYW5pcHVsYXRpb24gb2YgYGRhdGFbbmFtZV1gLCBzZWUgYWJvdmU6XG4gIHJldHVybiBkYXRhW25hbWVdXG59XG5cbmZ1bmN0aW9uIGNsb25lSXRlbShzb3VyY2VTY2hlbWEsIGl0ZW0sIG9wdGlvbnMpIHtcbiAgaWYgKG9wdGlvbnMuc2NoZW1hT25seSkge1xuICAgIGNvbnN0IGNvcHkgPSB7fVxuICAgIGNvbnN0IHsgaWRLZXkgPSAnaWQnLCBvcmRlcktleSB9ID0gc291cmNlU2NoZW1hXG4gICAgY29uc3QgaWQgPSBpdGVtW2lkS2V5XVxuICAgIGlmIChpZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb3B5W2lkS2V5XSA9IGlkXG4gICAgfVxuICAgIC8vIENvcHkgb3ZlciB0eXBlIGluIGNhc2UgdGhlcmUgYXJlIG11bHRpcGxlIGZvcm1zIHRvIGNob29zZSBmcm9tLlxuICAgIGlmIChoYXNNdWx0aXBsZUZvcm1TY2hlbWFzKHNvdXJjZVNjaGVtYSkpIHtcbiAgICAgIGNvcHkudHlwZSA9IGl0ZW0udHlwZVxuICAgIH1cbiAgICBpZiAob3JkZXJLZXkpIHtcbiAgICAgIGNvcHlbb3JkZXJLZXldID0gaXRlbVtvcmRlcktleV1cbiAgICB9XG4gICAgcmV0dXJuIGNvcHlcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4geyAuLi5pdGVtIH1cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvY2Vzc0RhdGEoc2NoZW1hLCBzb3VyY2VTY2hlbWEsIGRhdGEsIGRhdGFQYXRoLCB7XG4gIGNvbXBvbmVudCxcbiAgcm9vdERhdGEsXG4gIHNjaGVtYU9ubHksIC8vIHdoZXRoZXIgdG8gb25seSBpbmNsdWRlIGRhdGEgY292ZXJlZCBieSB0aGUgc2NoZW1hLCBvciBhbGwgZGF0YVxuICB0YXJnZXRcbn0gPSB7fSkge1xuICBjb25zdCBvcHRpb25zID0geyBjb21wb25lbnQsIHJvb3REYXRhLCBzY2hlbWFPbmx5LCB0YXJnZXQgfVxuICBjb25zdCBwcm9jZXNzZWREYXRhID0gY2xvbmVJdGVtKHNvdXJjZVNjaGVtYSwgZGF0YSwgb3B0aW9ucylcbiAgY29uc3QgZ3JhcGggPSBuZXcgU2NoZW1hR3JhcGgoKVxuXG4gIGNvbnN0IHByb2Nlc3NCZWZvcmUgPSAoc2NoZW1hLCBkYXRhLCBuYW1lLCBkYXRhUGF0aCwgcHJvY2Vzc2VkRGF0YSkgPT4ge1xuICAgIGxldCB2YWx1ZSA9IGNvbXB1dGVWYWx1ZShzY2hlbWEsIGRhdGEsIG5hbWUsIGRhdGFQYXRoLCBvcHRpb25zKVxuICAgIC8vIFRoZSBzY2hlbWEgZXhwZWN0cyB0aGUgYHdyYXBQcmltaXRpdmVzYCB0cmFuc2Zvcm1hdGlvbnMgdG8gYmUgcHJlc2VudCBvblxuICAgIC8vIHRoZSBkYXRhIHRoYXQgaXQgaXMgYXBwbGllZCBvbiwgc28gd2FycCBiZWZvcmUgYW5kIHVud3JhcCBhZnRlci5cbiAgICBpZiAoaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgIGNvbnN0IHsgd3JhcFByaW1pdGl2ZXMsIG9yZGVyS2V5LCBpZEtleSA9ICdpZCcgfSA9IHNjaGVtYVxuICAgICAgaWYgKHdyYXBQcmltaXRpdmVzKSB7XG4gICAgICAgIHZhbHVlID0gdmFsdWUubWFwKGVudHJ5ID0+ICh7XG4gICAgICAgICAgW3dyYXBQcmltaXRpdmVzXTogZW50cnlcbiAgICAgICAgfSkpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBBbHdheXMgc2hhbGxvdy1jbG9uZSBhcnJheSB2YWx1ZXM6XG4gICAgICAgIHZhbHVlID0gWy4uLnZhbHVlXVxuICAgICAgfVxuICAgICAgaWYgKG9yZGVyS2V5ICYmIHRhcmdldCA9PT0gJ2NsaXBib2FyZCcpIHtcbiAgICAgICAgLy8gU29ydCB0aGUgZGF0YSBiYWNrIGludG8gdGhlIG5hdHVyYWwgc2VxdWVuY2UgYXMgZGVmaW5lZCBieSB0aGVpciBpZHMsXG4gICAgICAgIC8vIHNvIGNvcHktcGFzdGluZyBiZXR3ZWVuIHNlcnZlcnMgKGUuZy4gbmVzdGVkIGZvbnQtY3V0cyBvbiBMaW5ldG8pXG4gICAgICAgIC8vIG5hdHVyYWxseSBnZXRzIG1hcHBlZCB0byB0aGUgc2FtZSBlbnRyaWVzIGluIHRoZSBncmFwaC5cbiAgICAgICAgdmFsdWUuc29ydCgoYSwgYikgPT4ge1xuICAgICAgICAgIGNvbnN0IGlkMSA9IGE/LltpZEtleV1cbiAgICAgICAgICBjb25zdCBpZDIgPSBiPy5baWRLZXldXG4gICAgICAgICAgcmV0dXJuIGlkMSA9PSBudWxsIHx8IGlzVGVtcG9yYXJ5SWQoaWQxKVxuICAgICAgICAgICAgPyAxXG4gICAgICAgICAgICA6IGlkMiA9PSBudWxsIHx8IGlzVGVtcG9yYXJ5SWQoaWQyKVxuICAgICAgICAgICAgICA/IC0xXG4gICAgICAgICAgICAgIDogaWQxIC0gaWQyXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfVxuICAgIHByb2Nlc3NlZERhdGFbbmFtZV0gPSB2YWx1ZVxuICB9XG5cbiAgY29uc3QgcHJvY2Vzc0FmdGVyID0gKHNjaGVtYSwgZGF0YSwgbmFtZSwgZGF0YVBhdGgsIHByb2Nlc3NlZERhdGEpID0+IHtcbiAgICBjb25zdCB7IHdyYXBQcmltaXRpdmVzLCBleGNsdWRlLCBwcm9jZXNzIH0gPSBzY2hlbWFcbiAgICBsZXQgdmFsdWUgPSBwcm9jZXNzZWREYXRhW25hbWVdXG5cbiAgICBjb25zdCB0eXBlT3B0aW9ucyA9IGdldFR5cGVPcHRpb25zKHNjaGVtYSlcblxuICAgIC8vIE5PVEU6IFdlIGRvbid0IGNhY2hlIHRoaXMgY29udGV4dCwgc2luY2UgYHZhbHVlYCBpcyBjaGFuZ2luZy5cbiAgICBjb25zdCBnZXRDb250ZXh0ID0gKCkgPT5cbiAgICAgIG5ldyBEaXRvQ29udGV4dChjb21wb25lbnQsIHtcbiAgICAgICAgc2NoZW1hLFxuICAgICAgICB2YWx1ZSxcbiAgICAgICAgbmFtZSxcbiAgICAgICAgZGF0YSxcbiAgICAgICAgZGF0YVBhdGgsXG4gICAgICAgIHJvb3REYXRhOiBvcHRpb25zLnJvb3REYXRhLFxuICAgICAgICAvLyBQYXNzIHRoZSBhbHJlYWR5IHByb2Nlc3NlZCBkYXRhIHRvIGBwcm9jZXNzKClgLCBzbyBpdCBjYW4gYmUgbW9kaWZpZWRcbiAgICAgICAgLy8gdGhyb3VnaCBgcHJvY2Vzc2VkSXRlbWAgZnJvbSB0aGVyZS5cbiAgICAgICAgcHJvY2Vzc2VkRGF0YVxuICAgICAgfSlcblxuICAgIC8vIEZpcnN0IHVud3JhcCB0aGUgd3JhcHBlZCBwcmltaXRpdmVzIGFnYWluLCB0byBicmluZyB0aGUgZGF0YSBiYWNrIGludG9cbiAgICAvLyBpdHMgbmF0aXZlIGZvcm0uIFNlIGBwcm9jZXNzQmVmb3JlKClgIGZvciBtb3JlIGRldGFpbHMuXG4gICAgaWYgKHdyYXBQcmltaXRpdmVzICYmIGlzQXJyYXkodmFsdWUpKSB7XG4gICAgICB2YWx1ZSA9IHZhbHVlLm1hcChvYmplY3QgPT4gb2JqZWN0W3dyYXBQcmltaXRpdmVzXSlcbiAgICB9XG5cbiAgICAvLyBFYWNoIGNvbXBvbmVudCB0eXBlIGNhbiBwcm92aWRlIGl0cyBvd24gc3RhdGljIGBwcm9jZXNzVmFsdWUoKWAgbWV0aG9kXG4gICAgLy8gdG8gY29udmVydCB0aGUgZGF0YSBmb3Igc3RvcmFnZS5cbiAgICBjb25zdCBwcm9jZXNzVmFsdWUgPSB0eXBlT3B0aW9ucz8ucHJvY2Vzc1ZhbHVlXG4gICAgaWYgKHByb2Nlc3NWYWx1ZSkge1xuICAgICAgdmFsdWUgPSBwcm9jZXNzVmFsdWUoc2NoZW1hLCB2YWx1ZSwgZGF0YVBhdGgsIGdyYXBoKVxuICAgIH1cblxuICAgIC8vIEhhbmRsZSB0aGUgdXNlcidzIGBwcm9jZXNzKClgIGNhbGxiYWNrIG5leHQsIGlmIG9uZSBpcyBwcm92aWRlZCwgc28gdGhhdFxuICAgIC8vIGl0IGNhbiBtb2RpZnkgZGF0YSBpbiBgcHJvY2Vzc2VkRGF0YWAgZXZlbiBpZiBpdCBwcm92aWRlcyBgZXhjbHVkZTogdHJ1ZWBcbiAgICBpZiAocHJvY2Vzcykge1xuICAgICAgdmFsdWUgPSBwcm9jZXNzKGdldENvbnRleHQoKSlcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICB0eXBlT3B0aW9ucz8uZXhjbHVkZVZhbHVlIHx8XG4gICAgICAvLyBTdXBwb3J0IGZ1bmN0aW9ucyBuZXh0IHRvIGJvb2xlYW5zIGZvciBgc2NoZW1hLmV4Y2x1ZGVgOlxuICAgICAgZXhjbHVkZSA9PT0gdHJ1ZSB8fFxuICAgICAgaXNGdW5jdGlvbihleGNsdWRlKSAmJiBleGNsdWRlKGdldENvbnRleHQoKSlcbiAgICApIHtcbiAgICAgIGRlbGV0ZSBwcm9jZXNzZWREYXRhW25hbWVdXG4gICAgfSBlbHNlIHtcbiAgICAgIHByb2Nlc3NlZERhdGFbbmFtZV0gPSB2YWx1ZVxuICAgIH1cbiAgfVxuXG4gIHByb2Nlc3NTY2hlbWFEYXRhKFxuICAgIHNjaGVtYSxcbiAgICBkYXRhLFxuICAgIGRhdGFQYXRoLFxuICAgIHByb2Nlc3NlZERhdGEsXG4gICAgcHJvY2Vzc0JlZm9yZSxcbiAgICBwcm9jZXNzQWZ0ZXIsXG4gICAgb3B0aW9uc1xuICApXG5cbiAgcmV0dXJuIGdyYXBoLnByb2Nlc3Moc291cmNlU2NoZW1hLCBwcm9jZXNzZWREYXRhLCBvcHRpb25zKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvY2Vzc1NjaGVtYURhdGEoXG4gIHNjaGVtYSxcbiAgZGF0YSxcbiAgZGF0YVBhdGgsXG4gIHByb2Nlc3NlZERhdGEsXG4gIHByb2Nlc3NCZWZvcmUsXG4gIHByb2Nlc3NBZnRlcixcbiAgb3B0aW9uc1xuKSB7XG4gIGNvbnN0IHByb2Nlc3NDb21wb25lbnRzID0gY29tcG9uZW50cyA9PiB7XG4gICAgY29uc3QgZ2V0RGF0YVBhdGggPSAoZGF0YVBhdGgsIHRva2VuKSA9PlxuICAgICAgZGF0YVBhdGggIT0gbnVsbFxuICAgICAgICA/IGFwcGVuZERhdGFQYXRoKGRhdGFQYXRoLCB0b2tlbilcbiAgICAgICAgOiBudWxsXG5cbiAgICBpZiAoY29tcG9uZW50cykge1xuICAgICAgZm9yIChjb25zdCBbbmFtZSwgY29tcG9uZW50U2NoZW1hXSBvZiBPYmplY3QuZW50cmllcyhjb21wb25lbnRzKSkge1xuICAgICAgICBpZiAoIWlzTmVzdGVkKGNvbXBvbmVudFNjaGVtYSkpIHtcbiAgICAgICAgICAvLyBSZWN1cnNpdmVseSBwcm9jZXNzIGRhdGEgb24gdW5uZXN0ZWQgY29tcG9uZW50cy5cbiAgICAgICAgICBwcm9jZXNzU2NoZW1hRGF0YShcbiAgICAgICAgICAgIGNvbXBvbmVudFNjaGVtYSxcbiAgICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgICBkYXRhUGF0aCxcbiAgICAgICAgICAgIHByb2Nlc3NlZERhdGEsXG4gICAgICAgICAgICBwcm9jZXNzQmVmb3JlLFxuICAgICAgICAgICAgcHJvY2Vzc0FmdGVyLFxuICAgICAgICAgICAgb3B0aW9uc1xuICAgICAgICAgIClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCBjb21wb25lbnREYXRhUGF0aCA9IGdldERhdGFQYXRoKGRhdGFQYXRoLCBuYW1lKVxuXG4gICAgICAgICAgY29uc3QgcHJvY2Vzc0l0ZW0gPSAoaXRlbSwgaW5kZXggPSBudWxsKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBpdGVtRGF0YVBhdGggPVxuICAgICAgICAgICAgICBpbmRleCAhPT0gbnVsbFxuICAgICAgICAgICAgICAgID8gZ2V0RGF0YVBhdGgoY29tcG9uZW50RGF0YVBhdGgsIGluZGV4KVxuICAgICAgICAgICAgICAgIDogY29tcG9uZW50RGF0YVBhdGhcbiAgICAgICAgICAgIGNvbnN0IGNvbnRleHQgPSBuZXcgRGl0b0NvbnRleHQob3B0aW9ucy5jb21wb25lbnQsIHtcbiAgICAgICAgICAgICAgc2NoZW1hOiBjb21wb25lbnRTY2hlbWEsXG4gICAgICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgICAgIGRhdGFQYXRoOiBjb21wb25lbnREYXRhUGF0aCxcbiAgICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgICAgcm9vdERhdGE6IG9wdGlvbnMucm9vdERhdGFcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICBjb25zdCBnZXRGb3JtcyA9IChcbiAgICAgICAgICAgICAgZ2V0VHlwZU9wdGlvbnMoY29tcG9uZW50U2NoZW1hKT8uZ2V0Rm9ybVNjaGVtYXNGb3JQcm9jZXNzaW5nIHx8XG4gICAgICAgICAgICAgIGdldEZvcm1TY2hlbWFzXG4gICAgICAgICAgICApXG4gICAgICAgICAgICBjb25zdCBmb3JtcyA9IGdldEZvcm1zKGNvbXBvbmVudFNjaGVtYSwgY29udGV4dClcbiAgICAgICAgICAgIGNvbnN0IGZvcm0gPSBnZXRJdGVtRm9ybVNjaGVtYUZyb21Gb3Jtcyhmb3JtcywgaXRlbSlcbiAgICAgICAgICAgIGlmIChmb3JtKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHByb2Nlc3NlZEl0ZW0gPSBwcm9jZXNzZWREYXRhXG4gICAgICAgICAgICAgICAgPyBjbG9uZUl0ZW0oY29tcG9uZW50U2NoZW1hLCBpdGVtLCBvcHRpb25zKVxuICAgICAgICAgICAgICAgIDogbnVsbFxuICAgICAgICAgICAgICByZXR1cm4gcHJvY2Vzc1NjaGVtYURhdGEoXG4gICAgICAgICAgICAgICAgZm9ybSxcbiAgICAgICAgICAgICAgICBpdGVtLFxuICAgICAgICAgICAgICAgIGl0ZW1EYXRhUGF0aCxcbiAgICAgICAgICAgICAgICBwcm9jZXNzZWRJdGVtLFxuICAgICAgICAgICAgICAgIHByb2Nlc3NCZWZvcmUsXG4gICAgICAgICAgICAgICAgcHJvY2Vzc0FmdGVyLFxuICAgICAgICAgICAgICAgIG9wdGlvbnNcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgLy8gSXRlbXMgd2l0aG91dCBmb3JtcyBzdGlsbCBnZXQgZnVsbHkgKGJ1dCBzaGFsbG93bHkpIGNsb25lZC5cbiAgICAgICAgICAgICAgLy8gVE9ETzogRmluZCBvdXQgb2YgdGhpcyBpcyBhY3R1YWxseSBuZWVkZWQgLyB1c2VkIGF0IGFsbD9cbiAgICAgICAgICAgICAgcmV0dXJuIHsgLi4uaXRlbSB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcHJvY2Vzc0JlZm9yZT8uKFxuICAgICAgICAgICAgY29tcG9uZW50U2NoZW1hLFxuICAgICAgICAgICAgZGF0YSxcbiAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICBjb21wb25lbnREYXRhUGF0aCxcbiAgICAgICAgICAgIHByb2Nlc3NlZERhdGFcbiAgICAgICAgICApXG5cbiAgICAgICAgICBsZXQgdmFsdWUgPSBwcm9jZXNzZWREYXRhID8gcHJvY2Vzc2VkRGF0YVtuYW1lXSA6IGRhdGFbbmFtZV1cbiAgICAgICAgICBpZiAodmFsdWUgIT0gbnVsbCAmJiBoYXNGb3JtU2NoZW1hKGNvbXBvbmVudFNjaGVtYSkpIHtcbiAgICAgICAgICAgIC8vIFJlY3Vyc2l2ZWx5IHByb2Nlc3MgZGF0YSBvbiBuZXN0ZWQgZm9ybSBpdGVtcy5cbiAgICAgICAgICAgIGlmIChpc0FycmF5KHZhbHVlKSkge1xuICAgICAgICAgICAgICAvLyBPcHRpbWl6YXRpb246IE5vIG5lZWQgdG8gY29sbGVjdCB2YWx1ZXMgaWYgd2UncmUgbm90IGNsb25pbmchXG4gICAgICAgICAgICAgIHZhbHVlID0gcHJvY2Vzc2VkRGF0YVxuICAgICAgICAgICAgICAgID8gdmFsdWUubWFwKHByb2Nlc3NJdGVtKVxuICAgICAgICAgICAgICAgIDogdmFsdWUuZm9yRWFjaChwcm9jZXNzSXRlbSlcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHZhbHVlID0gcHJvY2Vzc0l0ZW0odmFsdWUpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocHJvY2Vzc2VkRGF0YSkge1xuICAgICAgICAgICAgICBwcm9jZXNzZWREYXRhW25hbWVdID0gdmFsdWVcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBwcm9jZXNzQWZ0ZXI/LihcbiAgICAgICAgICAgIGNvbXBvbmVudFNjaGVtYSxcbiAgICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgY29tcG9uZW50RGF0YVBhdGgsXG4gICAgICAgICAgICBwcm9jZXNzZWREYXRhXG4gICAgICAgICAgKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJvY2Vzc0NvbXBvbmVudHMoc2NoZW1hLmNvbXBvbmVudHMpXG4gIGZvciAoY29uc3QgdGFiIG9mIGdldFRhYlNjaGVtYXMoc2NoZW1hKSkge1xuICAgIHByb2Nlc3NDb21wb25lbnRzKHRhYi5jb21wb25lbnRzKVxuICB9XG4gIGZvciAoY29uc3QgcGFuZWwgb2YgZ2V0UGFuZWxTY2hlbWFzKHNjaGVtYSkpIHtcbiAgICBwcm9jZXNzQ29tcG9uZW50cyhwYW5lbC5jb21wb25lbnRzKVxuICB9XG5cbiAgcmV0dXJuIHByb2Nlc3NlZERhdGEgfHwgZGF0YVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0TmFtZWRTY2hlbWFzKHNjaGVtYXMsIGRlZmF1bHRzKSB7XG4gIGNvbnN0IHRvT2JqZWN0ID0gKGFycmF5LCB0b1NjaGVtYSkgPT4ge1xuICAgIHJldHVybiBhcnJheS5sZW5ndGggPiAwXG4gICAgICA/IGFycmF5LnJlZHVjZSgob2JqZWN0LCB2YWx1ZSkgPT4ge1xuICAgICAgICAgIGNvbnN0IHNjaGVtYSA9IHRvU2NoZW1hKHZhbHVlKVxuICAgICAgICAgIGlmIChzY2hlbWEpIHtcbiAgICAgICAgICAgIG9iamVjdFtzY2hlbWEubmFtZV0gPVxuICAgICAgICAgICAgICBzY2hlbWEgJiYgZGVmYXVsdHNcbiAgICAgICAgICAgICAgICA/IHsgLi4uZGVmYXVsdHMsIC4uLnNjaGVtYSB9XG4gICAgICAgICAgICAgICAgOiBzY2hlbWFcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIG9iamVjdFxuICAgICAgICB9LCB7fSlcbiAgICAgIDogbnVsbFxuICB9XG5cbiAgcmV0dXJuIGlzQXJyYXkoc2NoZW1hcylcbiAgICA/IHRvT2JqZWN0KHNjaGVtYXMsIHZhbHVlID0+XG4gICAgICAgIGlzT2JqZWN0KHZhbHVlKVxuICAgICAgICAgID8gdmFsdWVcbiAgICAgICAgICA6IHtcbiAgICAgICAgICAgICAgbmFtZTogY2FtZWxpemUodmFsdWUsIGZhbHNlKVxuICAgICAgICAgICAgfVxuICAgICAgKVxuICAgIDogaXNPYmplY3Qoc2NoZW1hcylcbiAgICAgID8gdG9PYmplY3QoXG4gICAgICAgICAgT2JqZWN0LmVudHJpZXMoc2NoZW1hcyksXG4gICAgICAgICAgKFtuYW1lLCB2YWx1ZV0pID0+XG4gICAgICAgICAgICBpc09iamVjdCh2YWx1ZSlcbiAgICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgICAgICAgLi4udmFsdWVcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIDogaXNTdHJpbmcodmFsdWUpXG4gICAgICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICAgICAgICAgIGxhYmVsOiB2YWx1ZVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDogbnVsbFxuICAgICAgICApXG4gICAgICA6IG51bGxcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEJ1dHRvblNjaGVtYXMoYnV0dG9ucykge1xuICByZXR1cm4gZ2V0TmFtZWRTY2hlbWFzKFxuICAgIGJ1dHRvbnMsXG4gICAgeyB0eXBlOiAnYnV0dG9uJyB9IC8vIERlZmF1bHRzXG4gIClcbn1cblxuZnVuY3Rpb24gZ2V0VHlwZShzY2hlbWFPclR5cGUpIHtcbiAgcmV0dXJuIGlzT2JqZWN0KHNjaGVtYU9yVHlwZSkgPyBzY2hlbWFPclR5cGUudHlwZSA6IHNjaGVtYU9yVHlwZVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0VHlwZU9wdGlvbnMoc2NoZW1hT3JUeXBlKSB7XG4gIHJldHVybiBnZXRUeXBlQ29tcG9uZW50KGdldFR5cGUoc2NoZW1hT3JUeXBlKSwgdHJ1ZSkgPz8gbnVsbFxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0U291cmNlVHlwZShzY2hlbWFPclR5cGUpIHtcbiAgcmV0dXJuIChcbiAgICBnZXRUeXBlT3B0aW9ucyhzY2hlbWFPclR5cGUpPy5nZXRTb3VyY2VUeXBlPy4oZ2V0VHlwZShzY2hlbWFPclR5cGUpKSA/P1xuICAgIG51bGxcbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UGFuZWxFbnRyeShzY2hlbWEsIGRhdGFQYXRoID0gbnVsbCwgdGFiQ29tcG9uZW50ID0gbnVsbCkge1xuICByZXR1cm4gc2NoZW1hXG4gICAgPyB7XG4gICAgICAgIHNjaGVtYSxcbiAgICAgICAgLy8gSWYgdGhlIHBhbmVsIHByb3ZpZGVzIGl0cyBvd24gbmFtZSwgYXBwZW5kIGl0IHRvIHRoZSBkYXRhUGF0aC5cbiAgICAgICAgLy8gVGhpcyBpcyB1c2VkIGUuZy4gZm9yICRmaWx0ZXJzIHBhbmVscy5cbiAgICAgICAgZGF0YVBhdGg6XG4gICAgICAgICAgZGF0YVBhdGggIT0gbnVsbCAmJiBzY2hlbWEubmFtZVxuICAgICAgICAgICAgPyBhcHBlbmREYXRhUGF0aChkYXRhUGF0aCwgc2NoZW1hLm5hbWUpXG4gICAgICAgICAgICA6IGRhdGFQYXRoLFxuICAgICAgICB0YWJDb21wb25lbnRcbiAgICAgIH1cbiAgICA6IG51bGxcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFBhbmVsRW50cmllcyhcbiAgcGFuZWxTY2hlbWFzLFxuICBkYXRhUGF0aCxcbiAgdGFiQ29tcG9uZW50ID0gbnVsbCxcbiAgcGFuZWxFbnRyaWVzID0gW11cbikge1xuICBpZiAocGFuZWxTY2hlbWFzKSB7XG4gICAgZm9yIChjb25zdCBba2V5LCBzY2hlbWFdIG9mIE9iamVjdC5lbnRyaWVzKHBhbmVsU2NoZW1hcykpIHtcbiAgICAgIGNvbnN0IGVudHJ5ID0gZ2V0UGFuZWxFbnRyeShcbiAgICAgICAgc2NoZW1hLFxuICAgICAgICBhcHBlbmREYXRhUGF0aChkYXRhUGF0aCwga2V5KSxcbiAgICAgICAgdGFiQ29tcG9uZW50XG4gICAgICApXG4gICAgICBpZiAoZW50cnkpIHtcbiAgICAgICAgcGFuZWxFbnRyaWVzLnB1c2goZW50cnkpXG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBwYW5lbEVudHJpZXNcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFRhYlNjaGVtYXMoc2NoZW1hKSB7XG4gIHJldHVybiBzY2hlbWE/LnRhYnMgPyBPYmplY3QudmFsdWVzKHNjaGVtYS50YWJzKSA6IFtdXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRQYW5lbFNjaGVtYXMoc2NoZW1hKSB7XG4gIHJldHVybiBzY2hlbWE/LnBhbmVscyA/IE9iamVjdC52YWx1ZXMoc2NoZW1hLnBhbmVscykgOiBbXVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0QWxsUGFuZWxFbnRyaWVzKFxuICBhcGksXG4gIHNjaGVtYSxcbiAgZGF0YVBhdGgsXG4gIGNvbXBvbmVudCA9IG51bGwsXG4gIHRhYkNvbXBvbmVudCA9IG51bGxcbikge1xuICBjb25zdCBwYW5lbFNjaGVtYSA9IGdldFR5cGVPcHRpb25zKHNjaGVtYSk/LmdldFBhbmVsU2NoZW1hPy4oXG4gICAgYXBpLFxuICAgIHNjaGVtYSxcbiAgICBkYXRhUGF0aCxcbiAgICBjb21wb25lbnRcbiAgKVxuICBjb25zdCBwYW5lbEVudHJpZXMgPSBwYW5lbFNjaGVtYVxuICAgID8gW2dldFBhbmVsRW50cnkocGFuZWxTY2hlbWEsIGRhdGFQYXRoLCB0YWJDb21wb25lbnQpXVxuICAgIDogW11cbiAgLy8gQWxsb3cgZWFjaCBjb21wb25lbnQgdG8gcHJvdmlkZSBpdHMgb3duIHNldCBvZiBwYW5lbHMsIGluXG4gIC8vIGFkZGl0aW9uIHRvIHRoZSBkZWZhdWx0IG9uZSAoZS5nLiBnZXRGaWx0ZXJzUGFuZWwoKSwgJGZpbHRlcnMpOlxuICBnZXRQYW5lbEVudHJpZXMoc2NoZW1hPy5wYW5lbHMsIGRhdGFQYXRoLCB0YWJDb21wb25lbnQsIHBhbmVsRW50cmllcylcbiAgcmV0dXJuIHBhbmVsRW50cmllc1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNPYmplY3RTb3VyY2Uoc2NoZW1hT3JUeXBlKSB7XG4gIHJldHVybiBnZXRTb3VyY2VUeXBlKHNjaGVtYU9yVHlwZSkgPT09ICdvYmplY3QnXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0xpc3RTb3VyY2Uoc2NoZW1hT3JUeXBlKSB7XG4gIHJldHVybiBnZXRTb3VyY2VUeXBlKHNjaGVtYU9yVHlwZSkgPT09ICdsaXN0J1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0SXRlbUlkKHNvdXJjZVNjaGVtYSwgaXRlbSkge1xuICBjb25zdCBpZCA9IGl0ZW1bc291cmNlU2NoZW1hLmlkS2V5IHx8ICdpZCddXG4gIHJldHVybiBpZCAhPSBudWxsID8gU3RyaW5nKGlkKSA6IHVuZGVmaW5lZFxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0SXRlbVVpZChzb3VyY2VTY2hlbWEsIGl0ZW0pIHtcbiAgLy8gVHJ5IHRvIHVzZSB0aGUgaXRlbSBpZCBhcyB0aGUgdWlkLCBmYWxsaW5nIGJhY2sgb24gYXV0by1nZW5lcmF0ZWQgaWRzLCBidXRcbiAgLy8gZWl0aGVyIHdheSwgcGFzcyB0aHJvdWdoIGBnZXRVaWQoKWAgc28gdGhhdCB0aGUgaWRzIGFyZSBhc3NvY2lhdGVkIHdpdGggdGhlXG4gIC8vIGl0ZW0gdGhyb3VnaCBhIHdlYWsgbWFwLCBhcyB0aGUgaWRzIGNhbiBiZSBmaWx0ZXJlZCBvdXQgaW4gYHByb2Nlc3NEYXRhKClgXG4gIC8vIHdoaWxlIHRoZSBjb21wb25lbnRzIHRoYXQgdXNlIHRoZSB1aWRzIGFzIGtleSBhcmUgc3RpbGwgdmlzaWJsZS5cbiAgcmV0dXJuIGdldFVpZChpdGVtLCBpdGVtID0+IGdldEl0ZW1JZChzb3VyY2VTY2hlbWEsIGl0ZW0pKVxufVxuIiwiaW1wb3J0IHsgaXNPYmplY3QsIGlzU3RyaW5nLCBwaWNrQnkgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG5leHBvcnQgZnVuY3Rpb24gaGFzUmVzb3VyY2Uoc2NoZW1hKSB7XG4gIHJldHVybiAhIWdldFJlc291cmNlKHNjaGVtYS5yZXNvdXJjZSlcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFJlc291cmNlKHJlc291cmNlLCBkZWZhdWx0cyA9IHt9KSB7XG4gIGNvbnN0IHsgcGFyZW50LCAuLi5kZWZzIH0gPSBkZWZhdWx0c1xuICByZXNvdXJjZSA9IGlzT2JqZWN0KHJlc291cmNlKVxuICAgID8geyAuLi5kZWZzLCAuLi5yZXNvdXJjZSB9XG4gICAgOiBpc1N0cmluZyhyZXNvdXJjZSlcbiAgICAgID8geyAuLi5kZWZzLCBwYXRoOiByZXNvdXJjZSB9XG4gICAgICA6IG51bGxcbiAgLy8gT25seSBzZXQgcGFyZW50IGlmIHBhdGggZG9lc24ndCBzdGFydCB3aXRoICcvJywgc28gcmVsYXRpdmUgVVJMcyBhcmVcbiAgLy8gZGVhbHQgd2l0aCBjb3JyZWN0bHkuXG4gIGlmIChcbiAgICByZXNvdXJjZSAmJlxuICAgIHBhcmVudCAhPT0gdW5kZWZpbmVkICYmXG4gICAgcmVzb3VyY2UucGFyZW50ID09PSB1bmRlZmluZWQgJiZcbiAgICAhcmVzb3VyY2UucGF0aD8uc3RhcnRzV2l0aCgnLycpXG4gICkge1xuICAgIHJlc291cmNlLnBhcmVudCA9IHBhcmVudFxuICAgIGlmICghcmVzb3VyY2UucGF0aCkge1xuICAgICAgcmVzb3VyY2UucGF0aCA9ICcuJ1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzb3VyY2Vcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldE1lbWJlclJlc291cmNlKGlkLCByZXNvdXJjZSkge1xuICByZXR1cm4gaWQgIT0gbnVsbCAmJiByZXNvdXJjZT8udHlwZSA9PT0gJ2NvbGxlY3Rpb24nXG4gICAgPyB7XG4gICAgICAgIHR5cGU6ICdtZW1iZXInLFxuICAgICAgICAuLi5waWNrQnkoXG4gICAgICAgICAgcmVzb3VyY2UsXG4gICAgICAgICAgKHZhbHVlLCBrZXkpID0+IFsnbWV0aG9kJywgJ3BhdGgnLCAncGFyZW50J10uaW5jbHVkZXMoa2V5KVxuICAgICAgICApLFxuICAgICAgICBpZDogYCR7aWR9YFxuICAgICAgfVxuICAgIDogbnVsbFxufVxuIiwiaW1wb3J0IHtcbiAgaXNPYmplY3QsXG4gIGlzU3RyaW5nLFxuICBpc0Z1bmN0aW9uLFxuICBlcXVhbHMsXG4gIGxhYmVsaXplLFxuICBoeXBoZW5hdGUsXG4gIGZvcm1hdFxufSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0IGFwcFN0YXRlIGZyb20gJy4uL2FwcFN0YXRlLmpzJ1xuaW1wb3J0IERpdG9Db250ZXh0IGZyb20gJy4uL0RpdG9Db250ZXh0LmpzJ1xuaW1wb3J0IEVtaXR0ZXJNaXhpbiBmcm9tICcuL0VtaXR0ZXJNaXhpbi5qcydcbmltcG9ydCB7XG4gIGZsYXR0ZW5WaWV3cyxcbiAgZ2V0U2NoZW1hVmFsdWUsXG4gIHNob3VsZFJlbmRlclNjaGVtYVxufSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG5pbXBvcnQgeyBnZXRSZXNvdXJjZSwgZ2V0TWVtYmVyUmVzb3VyY2UgfSBmcm9tICcuLi91dGlscy9yZXNvdXJjZS5qcydcbmltcG9ydCB7IGNvbXB1dGVkLCByZWFjdGl2ZSB9IGZyb20gJ3Z1ZSdcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IHtcbiAgbWl4aW5zOiBbRW1pdHRlck1peGluXSxcblxuICBpbmplY3Q6IFtcbiAgICAnYXBpJyxcbiAgICAnJHZlcmJzJyxcbiAgICAnJHZpZXdzJyxcbiAgICAnJGlzUG9wdWxhdGVkJyxcbiAgICAnJHBhcmVudENvbXBvbmVudCcsXG4gICAgJyRzY2hlbWFDb21wb25lbnQnLFxuICAgICckcm91dGVDb21wb25lbnQnLFxuICAgICckZGF0YUNvbXBvbmVudCcsXG4gICAgJyRzb3VyY2VDb21wb25lbnQnLFxuICAgICckcmVzb3VyY2VDb21wb25lbnQnLFxuICAgICckZGlhbG9nQ29tcG9uZW50JyxcbiAgICAnJHBhbmVsQ29tcG9uZW50JyxcbiAgICAnJHRhYkNvbXBvbmVudCdcbiAgXSxcblxuICBwcm92aWRlKCkge1xuICAgIGNvbnN0IHNlbGYgPSAoKSA9PiB0aGlzXG4gICAgcmV0dXJuIHRoaXMucHJvdmlkZXNEYXRhXG4gICAgICA/IHtcbiAgICAgICAgICAkcGFyZW50Q29tcG9uZW50OiBzZWxmLFxuICAgICAgICAgICRkYXRhQ29tcG9uZW50OiBzZWxmXG4gICAgICAgIH1cbiAgICAgIDoge1xuICAgICAgICAgICRwYXJlbnRDb21wb25lbnQ6IHNlbGZcbiAgICAgICAgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGFwcFN0YXRlLFxuICAgICAgaXNNb3VudGVkOiBmYWxzZSxcbiAgICAgIG92ZXJyaWRlczogbnVsbCAvLyBTZWUgYWNjZXNzb3IuanNcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBwcm92aWRlc0RhdGEoKSB7XG4gICAgICAvLyBOT1RFOiBUaGlzIGlzIG92ZXJyaWRkZW4gaW4gUmVzb3VyY2VNaXhpbiwgdXNlZCBieSBsaXN0cy5cbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH0sXG5cbiAgICBzb3VyY2VTY2hlbWEoKSB7XG4gICAgICByZXR1cm4gdGhpcy5tZXRhPy5zY2hlbWFcbiAgICB9LFxuXG4gICAgdXNlcigpIHtcbiAgICAgIHJldHVybiBhcHBTdGF0ZS51c2VyXG4gICAgfSxcblxuICAgIC8vICR2ZXJicywgJHZlcmJzIGFuZCAkaXNQb3B1bGF0ZWQgYXJlIGRlZmluZWQgYXMgZnVuY3Rpb25zLCB0byBwcmVzZXJ2ZVxuICAgIC8vIHJlYWN0aXZlbmVzcyBhY3Jvc3MgcHJvdmlkZS9pbmplY3QuXG4gICAgLy8gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vdnVlanMvdnVlL2lzc3Vlcy83MDE3I2lzc3VlY29tbWVudC00ODA5MDY2OTFcbiAgICB2ZXJicygpIHtcbiAgICAgIHJldHVybiB0aGlzLiR2ZXJicygpXG4gICAgfSxcblxuICAgIHZpZXdzKCkge1xuICAgICAgcmV0dXJuIHRoaXMuJHZpZXdzKClcbiAgICB9LFxuXG4gICAgZmxhdHRlbmVkVmlld3MoKSB7XG4gICAgICByZXR1cm4gZmxhdHRlblZpZXdzKHRoaXMudmlld3MpXG4gICAgfSxcblxuICAgIGlzUG9wdWxhdGVkKCkge1xuICAgICAgcmV0dXJuIHRoaXMuJGlzUG9wdWxhdGVkKClcbiAgICB9LFxuXG4gICAgbG9jYWxlKCkge1xuICAgICAgcmV0dXJuIHRoaXMuYXBpLmxvY2FsZVxuICAgIH0sXG5cbiAgICBjb250ZXh0KCkge1xuICAgICAgcmV0dXJuIG5ldyBEaXRvQ29udGV4dCh0aGlzLCB7IG5lc3RlZDogZmFsc2UgfSlcbiAgICB9LFxuXG4gICAgcm9vdENvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzLiRyb290LiRyZWZzLnJvb3RcbiAgICB9LFxuXG4gICAgLy8gVXNlIGNvbXB1dGVkIHByb3BlcnRpZXMgYXMgbGlua3MgdG8gaW5qZWN0cywgc28gRGl0b1NjaGVtYSBjYW5cbiAgICAvLyBvdmVycmlkZSB0aGUgcHJvcGVydHkgYW5kIHJldHVybiBgdGhpc2AgaW5zdGVhZCBvZiB0aGUgcGFyZW50LlxuICAgIHBhcmVudENvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzLiRwYXJlbnRDb21wb25lbnQoKVxuICAgIH0sXG5cbiAgICBzY2hlbWFDb21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpcy4kc2NoZW1hQ29tcG9uZW50KClcbiAgICB9LFxuXG4gICAgcm91dGVDb21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpcy4kcm91dGVDb21wb25lbnQoKVxuICAgIH0sXG5cbiAgICBmb3JtQ29tcG9uZW50KCkge1xuICAgICAgY29uc3QgY29tcG9uZW50ID0gdGhpcy5yb3V0ZUNvbXBvbmVudFxuICAgICAgcmV0dXJuIGNvbXBvbmVudD8uaXNGb3JtID8gY29tcG9uZW50IDogbnVsbFxuICAgIH0sXG5cbiAgICB2aWV3Q29tcG9uZW50KCkge1xuICAgICAgY29uc3QgY29tcG9uZW50ID0gdGhpcy5yb3V0ZUNvbXBvbmVudFxuICAgICAgcmV0dXJuIGNvbXBvbmVudD8uaXNWaWV3ID8gY29tcG9uZW50IDogbnVsbFxuICAgIH0sXG5cbiAgICAvLyBSZXR1cm5zIHRoZSBmaXJzdCByb3V0ZSBjb21wb25lbnQgaW4gdGhlIGNoYWluIG9mIHBhcmVudHMsIGluY2x1ZGluZ1xuICAgIC8vIHRoaXMgY3VycmVudCBjb21wb25lbnQsIHRoYXQgaXMgbGlua2VkIHRvIGEgcmVzb3VyY2UgKGFuZCB0aHVzIGxvYWRzIGl0c1xuICAgIC8vIG93biBkYXRhIGFuZCBkb2Vzbid0IGhvbGQgbmVzdGVkIGRhdGEpLlxuICAgIGRhdGFDb21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5wcm92aWRlc0RhdGEgPyB0aGlzIDogdGhpcy4kZGF0YUNvbXBvbmVudCgpXG4gICAgfSxcblxuICAgIHNvdXJjZUNvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzLiRzb3VyY2VDb21wb25lbnQoKVxuICAgIH0sXG5cbiAgICByZXNvdXJjZUNvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzLiRyZXNvdXJjZUNvbXBvbmVudCgpXG4gICAgfSxcblxuICAgIGRpYWxvZ0NvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzLiRkaWFsb2dDb21wb25lbnQoKVxuICAgIH0sXG5cbiAgICBwYW5lbENvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzLiRwYW5lbENvbXBvbmVudCgpXG4gICAgfSxcblxuICAgIHRhYkNvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzLiR0YWJDb21wb25lbnQoKVxuICAgIH0sXG5cbiAgICBwYXJlbnRTY2hlbWFDb21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWFDb21wb25lbnQ/LnBhcmVudENvbXBvbmVudC5zY2hlbWFDb21wb25lbnRcbiAgICB9LFxuXG4gICAgcGFyZW50Um91dGVDb21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5yb3V0ZUNvbXBvbmVudD8ucGFyZW50Q29tcG9uZW50LnJvdXRlQ29tcG9uZW50XG4gICAgfSxcblxuICAgIHBhcmVudEZvcm1Db21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5mb3JtQ29tcG9uZW50Py5wYXJlbnRDb21wb25lbnQuZm9ybUNvbXBvbmVudFxuICAgIH0sXG5cbiAgICAvLyBSZXR1cm5zIHRoZSBkYXRhIG9mIHRoZSBmaXJzdCByb3V0ZSBjb21wb25lbnQgaW4gdGhlIGNoYWluIG9mIHBhcmVudHNcbiAgICAvLyB0aGF0IGxvYWRzIGl0cyBvd24gZGF0YSBmcm9tIGFuIGFzc29jaWF0ZWQgQVBJIHJlc291cmNlLlxuICAgIHJvb3REYXRhKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZGF0YUNvbXBvbmVudD8uZGF0YVxuICAgIH1cbiAgfSxcblxuICBtb3VudGVkKCkge1xuICAgIHRoaXMuaXNNb3VudGVkID0gdHJ1ZVxuICB9LFxuXG4gIGJlZm9yZUNyZWF0ZSgpIHtcbiAgICBjb25zdCB1aWQgPSBuZXh0VWlkKytcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgJyR1aWQnLCB7IGdldDogKCkgPT4gdWlkIH0pXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGxhYmVsaXplLFxuXG4gICAgLy8gVGhlIHN0YXRlIG9mIGNvbXBvbmVudHMgaXMgb25seSBhdmFpbGFibGUgZHVyaW5nIHRoZSBsaWZlLWN5Y2xlIG9mIGFcbiAgICAvLyBjb21wb25lbnQuIFNvbWUgaW5mb3JtYXRpb24gd2UgbmVlZCBhdmFpbGFibGUgbG9uZ2VyIHRoYW4gdGhhdCwgZS5nLlxuICAgIC8vIGBxdWVyeWAgJiBgdG90YWxgIG9uIFR5cGVMaXN0LCBzbyB0aGF0IHdoZW4gdGhlIHVzZXIgbmF2aWdhdGVzIGJhY2sgZnJvbVxuICAgIC8vIGVkaXRpbmcgYW4gaXRlbSBpbiB0aGUgbGlzdCwgdGhlIHN0YXRlIG9mIHRoZSBsaXN0IGlzIHN0aWxsIHRoZSBzYW1lLlxuICAgIC8vIFdlIGNhbid0IHN0b3JlIHRoaXMgaW4gYGRhdGFgLCBhcyB0aGlzIGlzIGFscmVhZHkgdGhlIHB1cmUgZGF0YSBmcm9tIHRoZVxuICAgIC8vIEFQSSBzZXJ2ZXIuIFRoYXQncyB3aGF0IHRoZSBgc3RvcmVgIGlzIGZvcjogTWVtb3J5IHRoYXQncyBhdmFpbGFibGUgYXNcbiAgICAvLyBsb25nIGFzIHRoZSBjdXJyZW50IGVkaXRpbmcgcGF0aCBpcyBzdGlsbCB2YWxpZC4gRm9yIHR5cGUgY29tcG9uZW50cyxcbiAgICAvLyB0aGlzIG1lbW9yeSBpcyBwcm92aWRlZCBieSB0aGUgcGFyZW50LCBzZWUgUm91dGVNaXhpbiBhbmQgRGl0b1BhbmUuXG4gICAgZ2V0U3RvcmUoa2V5KSB7XG4gICAgICByZXR1cm4gdGhpcy5zdG9yZVtrZXldXG4gICAgfSxcblxuICAgIHNldFN0b3JlKGtleSwgdmFsdWUpIHtcbiAgICAgIHRoaXMuc3RvcmVba2V5XSA9IHZhbHVlXG4gICAgICByZXR1cm4gdmFsdWVcbiAgICB9LFxuXG4gICAgcmVtb3ZlU3RvcmUoa2V5KSB7XG4gICAgICBkZWxldGUgdGhpcy5zdG9yZVtrZXldXG4gICAgfSxcblxuICAgIGdldFN0b3JlS2V5QnlJbmRleChpbmRleCkge1xuICAgICAgcmV0dXJuIHRoaXMuc3RvcmUuJGtleXNCeUluZGV4Py5baW5kZXhdXG4gICAgfSxcblxuICAgIHNldFN0b3JlS2V5QnlJbmRleChpbmRleCwga2V5KSB7XG4gICAgICB0aGlzLnN0b3JlLiRrZXlzQnlJbmRleCA/Pz0ge31cbiAgICAgIHRoaXMuc3RvcmUuJGtleXNCeUluZGV4W2luZGV4XSA9IGtleVxuICAgIH0sXG5cbiAgICBnZXRDaGlsZFN0b3JlKGtleSwgaW5kZXgpIHtcbiAgICAgIGxldCBzdG9yZSA9IHRoaXMuZ2V0U3RvcmUoa2V5KVxuICAgICAgaWYgKCFzdG9yZSAmJiBpbmRleCAhPSBudWxsKSB7XG4gICAgICAgIC8vIFdoZW4gc3RvcmluZywgdGVtcG9yYXJ5IGlkcyBjaGFuZ2UgdG8gcGVybWFuZW50IG9uZXMgYW5kIHRodXMgdGhlIGtleVxuICAgICAgICAvLyBjYW4gY2hhbmdlLiBUbyBzdGlsbCBmaW5kIHRoZSBzdG9yZSwgd2UgcmVmZXJlbmNlIGJ5IGluZGV4IGFzIHdlbGwsXG4gICAgICAgIC8vIHRvIGJlIGFibGUgdG8gZmluZCB0aGUgc3RvcmUgYWdhaW4gYWZ0ZXIgdGhlIGl0ZW0gd2FzIHNhdmVkLlxuICAgICAgICBjb25zdCBvbGRLZXkgPSB0aGlzLmdldFN0b3JlS2V5QnlJbmRleChpbmRleClcbiAgICAgICAgc3RvcmUgPSB0aGlzLmdldFN0b3JlKG9sZEtleSlcbiAgICAgICAgaWYgKHN0b3JlKSB7XG4gICAgICAgICAgdGhpcy5zZXRTdG9yZShrZXksIHN0b3JlKVxuICAgICAgICAgIHRoaXMucmVtb3ZlU3RvcmUob2xkS2V5KVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoIXN0b3JlKSB7XG4gICAgICAgIHN0b3JlID0gdGhpcy5zZXRTdG9yZShrZXksIHJlYWN0aXZlKHt9KSlcbiAgICAgICAgaWYgKGluZGV4ICE9IG51bGwpIHtcbiAgICAgICAgICB0aGlzLnNldFN0b3JlS2V5QnlJbmRleChpbmRleCwga2V5KVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gc3RvcmVcbiAgICB9LFxuXG4gICAgcmVtb3ZlQ2hpbGRTdG9yZShrZXksIGluZGV4KSB7XG4gICAgICAvLyBHRXQgdGhlIGNoaWxkLXN0b3JlIGZpcnN0LCBzbyB0aGF0IGluZGljZXMgY2FuIGJlIHRyYW5zZmVycmVkIG92ZXJcbiAgICAgIC8vIHRlbXBvcmFyeSBpZCBjaGFuZ2VzIGR1cmluZyBwZXJzaXN0ZW5jZS5cbiAgICAgIHRoaXMuZ2V0Q2hpbGRTdG9yZShrZXksIGluZGV4KVxuICAgICAgdGhpcy5yZW1vdmVTdG9yZShrZXkpXG4gICAgfSxcblxuICAgIGdldFNjaGVtYVZhbHVlKFxuICAgICAga2V5T3JEYXRhUGF0aCxcbiAgICAgIHtcbiAgICAgICAgdHlwZSxcbiAgICAgICAgZGVmYXVsdDogZGVmLFxuICAgICAgICBzY2hlbWEgPSB0aGlzLnNjaGVtYSxcbiAgICAgICAgY29udGV4dCA9IHRoaXMuY29udGV4dCxcbiAgICAgICAgY2FsbGJhY2sgPSB0cnVlXG4gICAgICB9ID0ge31cbiAgICApIHtcbiAgICAgIHJldHVybiBnZXRTY2hlbWFWYWx1ZShrZXlPckRhdGFQYXRoLCB7XG4gICAgICAgIHR5cGUsXG4gICAgICAgIHNjaGVtYSxcbiAgICAgICAgY29udGV4dCxcbiAgICAgICAgY2FsbGJhY2ssXG4gICAgICAgIGRlZmF1bHQ6IGlzRnVuY3Rpb24oZGVmKSA/ICgpID0+IGRlZi5jYWxsKHRoaXMpIDogZGVmXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBnZXRMYWJlbChzY2hlbWEsIG5hbWUpIHtcbiAgICAgIHJldHVybiBzY2hlbWFcbiAgICAgICAgPyB0aGlzLmdldFNjaGVtYVZhbHVlKCdsYWJlbCcsIHsgdHlwZTogU3RyaW5nLCBzY2hlbWEgfSkgfHxcbiAgICAgICAgICBsYWJlbGl6ZShuYW1lIHx8IHNjaGVtYS5uYW1lKVxuICAgICAgICA6IGxhYmVsaXplKG5hbWUpIHx8ICcnXG4gICAgfSxcblxuICAgIGdldEJ1dHRvbkF0dHJpYnV0ZXModmVyYikge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY2xhc3M6IGBkaXRvLWJ1dHRvbi0ke3ZlcmJ9YCxcbiAgICAgICAgdGl0bGU6IGxhYmVsaXplKHZlcmIpXG4gICAgICB9XG4gICAgfSxcblxuICAgIC8vIFRPRE86IFJlbmFtZSAqTGluaygpIHRvICpSb3V0ZSgpLlxuICAgIGdldFF1ZXJ5TGluayhxdWVyeSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgcXVlcnksXG4gICAgICAgIC8vIFByZXNlcnZlIGhhc2ggZm9yIHRhYnM6XG4gICAgICAgIGhhc2g6IHRoaXMuJHJvdXRlLmhhc2hcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgc2hvdWxkUmVuZGVyU2NoZW1hKHNjaGVtYSA9IG51bGwpIHtcbiAgICAgIHJldHVybiBzaG91bGRSZW5kZXJTY2hlbWEoc2NoZW1hLCB0aGlzLmNvbnRleHQpXG4gICAgfSxcblxuICAgIHNob3VsZFNob3dTY2hlbWEoc2NoZW1hID0gbnVsbCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0U2NoZW1hVmFsdWUoJ3Zpc2libGUnLCB7XG4gICAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICAgIGRlZmF1bHQ6IHRydWUsXG4gICAgICAgIHNjaGVtYVxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgc2hvdWxkRGlzYWJsZVNjaGVtYShzY2hlbWEgPSBudWxsKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRTY2hlbWFWYWx1ZSgnZGlzYWJsZWQnLCB7XG4gICAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICAgIGRlZmF1bHQ6IGZhbHNlLFxuICAgICAgICBzY2hlbWFcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGdldFJlc291cmNlUGF0aChyZXNvdXJjZSkge1xuICAgICAgcmVzb3VyY2UgPSBnZXRSZXNvdXJjZShyZXNvdXJjZSlcbiAgICAgIC8vIFJlc291cmNlcyB3aXRob3V0IGEgcGFyZW50IGluaGVyaXQgdGhlIG9uZSBmcm9tIGBkYXRhQ29tcG9uZW50YFxuICAgICAgLy8gYXV0b21hdGljYWxseS5cbiAgICAgIGlmIChyZXNvdXJjZS5wYXJlbnQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXNvdXJjZS5wYXJlbnQgPSB0aGlzLmRhdGFDb21wb25lbnQ/LnJlc291cmNlXG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy5hcGkucmVzb3VyY2VzLmFueShnZXRSZXNvdXJjZShyZXNvdXJjZSkpXG4gICAgfSxcblxuICAgIGdldFJlc291cmNlVXJsKHJlc291cmNlKSB7XG4gICAgICBjb25zdCB1cmwgPSB0aGlzLmdldFJlc291cmNlUGF0aChyZXNvdXJjZSlcbiAgICAgIHJldHVybiB1cmwgPyB0aGlzLmFwaS5nZXRBcGlVcmwoeyB1cmwsIHF1ZXJ5OiByZXNvdXJjZS5xdWVyeSB9KSA6IG51bGxcbiAgICB9LFxuXG4gICAgYXN5bmMgc2VuZFJlcXVlc3Qoe1xuICAgICAgbWV0aG9kLFxuICAgICAgdXJsLFxuICAgICAgcmVzb3VyY2UsXG4gICAgICBxdWVyeSxcbiAgICAgIGRhdGEsXG4gICAgICBzaWduYWwsXG4gICAgICBpbnRlcm5hbFxuICAgIH0pIHtcbiAgICAgIHVybCB8fD0gdGhpcy5nZXRSZXNvdXJjZVVybChyZXNvdXJjZSlcbiAgICAgIG1ldGhvZCB8fD0gcmVzb3VyY2U/Lm1ldGhvZFxuICAgICAgY29uc3QgY2hlY2tVc2VyID0gIWludGVybmFsICYmIHRoaXMuYXBpLmlzQXBpVXJsKHVybClcbiAgICAgIGlmIChjaGVja1VzZXIpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5yb290Q29tcG9uZW50LmVuc3VyZVVzZXIoKVxuICAgICAgfVxuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmFwaS5yZXF1ZXN0KHtcbiAgICAgICAgbWV0aG9kLFxuICAgICAgICB1cmwsXG4gICAgICAgIHF1ZXJ5LFxuICAgICAgICBkYXRhLFxuICAgICAgICBzaWduYWxcbiAgICAgIH0pXG4gICAgICAvLyBEZXRlY3QgY2hhbmdlIG9mIHRoZSBvd24gdXNlciwgYW5kIGZldGNoIGl0IGFnYWluIGlmIGl0IHdhcyBjaGFuZ2VkLlxuICAgICAgaWYgKFxuICAgICAgICBjaGVja1VzZXIgJiZcbiAgICAgICAgbWV0aG9kID09PSAncGF0Y2gnICYmXG4gICAgICAgIGVxdWFscyhyZXNvdXJjZSwgZ2V0TWVtYmVyUmVzb3VyY2UodGhpcy51c2VyLmlkLCB0aGlzLmFwaS51c2VycykpXG4gICAgICApIHtcbiAgICAgICAgYXdhaXQgdGhpcy5yb290Q29tcG9uZW50LmZldGNoVXNlcigpXG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzcG9uc2VcbiAgICB9LFxuXG4gICAgc2hvd0RpYWxvZyh7IGNvbXBvbmVudHMsIGJ1dHRvbnMsIGRhdGEsIHNldHRpbmdzIH0pIHtcbiAgICAgIHJldHVybiB0aGlzLnJvb3RDb21wb25lbnQuc2hvd0RpYWxvZyh7XG4gICAgICAgIGNvbXBvbmVudHMsXG4gICAgICAgIGJ1dHRvbnMsXG4gICAgICAgIGRhdGEsXG4gICAgICAgIHNldHRpbmdzXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICByZXF1ZXN0KHsgY2FjaGUsIC4uLm9wdGlvbnMgfSkge1xuICAgICAgLy8gQWxsb3cgY2FjaGluZyBvZiBsb2FkZWQgZGF0YSBvbiB0d28gbGV2ZWxzOlxuICAgICAgLy8gLSAnZ2xvYmFsJzogY2FjaGUgZ2xvYmFsbHksIGZvciB0aGUgZW50aXJlIGFkbWluIHNlc3Npb25cbiAgICAgIC8vIC0gJ2xvY2FsJzogY2FjaGUgbG9jYWxseSB3aXRoaW4gdGhlIGNsb3Nlc3Qgcm91dGUgY29tcG9uZW50IHRoYXQgaXNcbiAgICAgIC8vICAgIGFzc29jaWF0ZWQgd2l0aCBhIHJlc291cmNlIGFuZCBsb2FkcyBpdHMgb3duIGRhdGEuXG4gICAgICBjb25zdCBjYWNoZVBhcmVudCA9IChcbiAgICAgICAgY2FjaGUgJiZcbiAgICAgICAge1xuICAgICAgICAgIGdsb2JhbDogdGhpcy5hcHBTdGF0ZSxcbiAgICAgICAgICBsb2NhbDogdGhpcy5kYXRhQ29tcG9uZW50XG4gICAgICAgIH1bY2FjaGVdXG4gICAgICApXG4gICAgICBjb25zdCBsb2FkQ2FjaGUgPSBjYWNoZVBhcmVudD8ubG9hZENhY2hlXG4gICAgICAvLyBCdWlsZCBhIGNhY2hlIGtleSBmcm9tIHRoZSBjb25maWc6XG4gICAgICBjb25zdCBjYWNoZUtleSA9IChcbiAgICAgICAgbG9hZENhY2hlICYmXG4gICAgICAgIGAke1xuICAgICAgICAgIG9wdGlvbnMubWV0aG9kIHx8ICdnZXQnXG4gICAgICAgIH0gJHtcbiAgICAgICAgICBvcHRpb25zLnVybFxuICAgICAgICB9ICR7XG4gICAgICAgICAgLy8gVE9ETzogYHJlcXVlc3QucGFyYW1zYCB3YXMgZGVwcmVjYXRlZCBpbiBmYXZvdXIgb2YgYHF1ZXJ5YCBvblxuICAgICAgICAgIC8vIDIwMjItMTEtMDEsIHJlbW92ZSBvbmNlIG5vdCBpbiB1c2UgYW55d2hlcmUgYW55IG1vcmUuXG4gICAgICAgICAgSlNPTi5zdHJpbmdpZnkob3B0aW9ucy5xdWVyeSB8fCBvcHRpb25zLnBhcmFtcyB8fCAnJylcbiAgICAgICAgfSAke1xuICAgICAgICAgIEpTT04uc3RyaW5naWZ5KG9wdGlvbnMuZGF0YSB8fCAnJylcbiAgICAgICAgfWBcbiAgICAgIClcbiAgICAgIGlmIChsb2FkQ2FjaGUgJiYgKGNhY2hlS2V5IGluIGxvYWRDYWNoZSkpIHtcbiAgICAgICAgcmV0dXJuIGxvYWRDYWNoZVtjYWNoZUtleV1cbiAgICAgIH1cbiAgICAgIC8vIE5PVEU6IE5vIGF3YWl0IGhlcmUsIHJlcyBpcyBhIHByb21pc2UgdGhhdCB3ZSBjYW4gZWFzaWx5IGNhY2hlLlxuICAgICAgLy8gVGhhdCdzIGZpbmUgYmVjYXVzZSBwcm9taXNlcyBjYW4gYmUgcmVzb2x2ZWQgb3ZlciBhbmQgb3ZlciBhZ2Fpbi5cbiAgICAgIGNvbnN0IHJlcyA9IHRoaXMuc2VuZFJlcXVlc3Qob3B0aW9ucylcbiAgICAgICAgLnRoZW4ocmVzcG9uc2UgPT4gcmVzcG9uc2UuZGF0YSlcbiAgICAgICAgLmNhdGNoKGVycm9yID0+IHtcbiAgICAgICAgICAvLyBDb252ZXJ0IGF4aW9zIGVycm9ycyB0byBub3JtYWwgZXJyb3JzXG4gICAgICAgICAgY29uc3QgZGF0YSA9IGVycm9yLnJlc3BvbnNlPy5kYXRhXG4gICAgICAgICAgdGhyb3cgZGF0YVxuICAgICAgICAgICAgPyBPYmplY3QuYXNzaWduKG5ldyBFcnJvcihkYXRhLm1lc3NhZ2UpLCBkYXRhKVxuICAgICAgICAgICAgOiBlcnJvclxuICAgICAgICB9KVxuICAgICAgaWYgKGxvYWRDYWNoZSkge1xuICAgICAgICBsb2FkQ2FjaGVbY2FjaGVLZXldID0gcmVzXG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzXG4gICAgfSxcblxuICAgIGZvcm1hdCh2YWx1ZSwge1xuICAgICAgbG9jYWxlID0gdGhpcy5hcGkubG9jYWxlLFxuICAgICAgZGVmYXVsdHMgPSB0aGlzLmFwaS5mb3JtYXRzLFxuICAgICAgLi4ub3B0aW9uc1xuICAgIH0gPSB7fSkge1xuICAgICAgcmV0dXJuIGZvcm1hdCh2YWx1ZSwge1xuICAgICAgICBsb2NhbGUsXG4gICAgICAgIGRlZmF1bHRzLFxuICAgICAgICAuLi5vcHRpb25zXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBuYXZpZ2F0ZShsb2NhdGlvbikge1xuICAgICAgcmV0dXJuIHRoaXMuJHJvdXRlci5wdXNoKGxvY2F0aW9uKVxuICAgIH0sXG5cbiAgICBkb3dubG9hZChvcHRpb25zID0ge30pIHtcbiAgICAgIGlmIChpc1N0cmluZyhvcHRpb25zKSkge1xuICAgICAgICBvcHRpb25zID0geyB1cmw6IG9wdGlvbnMgfVxuICAgICAgfVxuICAgICAgLy8gU2VlOiBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL2EvNDk5MTcwNjYvMTE2MzcwOFxuICAgICAgY29uc3QgYSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKVxuICAgICAgYS5ocmVmID0gb3B0aW9ucy51cmw/LnN0YXJ0c1dpdGgoJ2Jsb2I6JylcbiAgICAgICAgPyBvcHRpb25zLnVybFxuICAgICAgICA6IHRoaXMuYXBpLmdldEFwaVVybChvcHRpb25zKVxuICAgICAgYS5kb3dubG9hZCA9IG9wdGlvbnMuZmlsZW5hbWUgPz8gbnVsbFxuICAgICAgY29uc3QgeyBib2R5IH0gPSBkb2N1bWVudFxuICAgICAgYm9keS5hcHBlbmRDaGlsZChhKVxuICAgICAgYS5jbGljaygpXG4gICAgICBib2R5LnJlbW92ZUNoaWxkKGEpXG4gICAgfSxcblxuICAgIG5vdGlmeShvcHRpb25zKSB7XG4gICAgICB0aGlzLnJvb3RDb21wb25lbnQubm90aWZ5KG9wdGlvbnMpXG4gICAgfSxcblxuICAgIGNsb3NlTm90aWZpY2F0aW9ucygpIHtcbiAgICAgIHRoaXMucm9vdENvbXBvbmVudC5jbG9zZU5vdGlmaWNhdGlvbnMoKVxuICAgIH0sXG5cbiAgICBzZXR1cFNjaGVtYUZpZWxkcygpIHtcbiAgICAgIHRoaXMuc2V0dXBNZXRob2RzKClcbiAgICAgIHRoaXMuc2V0dXBDb21wdXRlZCgpXG4gICAgICB0aGlzLnNldHVwRXZlbnRzKClcbiAgICB9LFxuXG4gICAgc2V0dXBNZXRob2RzKCkge1xuICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXModGhpcy5zY2hlbWEubWV0aG9kcyB8fCB7fSkpIHtcbiAgICAgICAgaWYgKGlzRnVuY3Rpb24odmFsdWUpKSB7XG4gICAgICAgICAgdGhpc1trZXldID0gdmFsdWVcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGBJbnZhbGlkIG1ldGhvZCBkZWZpbml0aW9uOiAke2tleX06ICR7dmFsdWV9YClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBzZXR1cENvbXB1dGVkKCkge1xuICAgICAgY29uc3QgZ2V0Q29tcHV0ZWRBY2Nlc3NvciA9ICh7IGdldCwgc2V0IH0pID0+IHtcbiAgICAgICAgY29uc3QgZ2V0dGVyID0gY29tcHV0ZWQoKCkgPT4gZ2V0LmNhbGwodGhpcykpXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgZ2V0OiAoKSA9PiBnZXR0ZXIudmFsdWUsXG4gICAgICAgICAgc2V0OiBzZXQgPyB2YWx1ZSA9PiBzZXQuY2FsbCh0aGlzLCB2YWx1ZSkgOiB1bmRlZmluZWRcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBmb3IgKGNvbnN0IFtrZXksIGl0ZW1dIG9mIE9iamVjdC5lbnRyaWVzKHRoaXMuc2NoZW1hLmNvbXB1dGVkIHx8IHt9KSkge1xuICAgICAgICBjb25zdCBhY2Nlc3NvciA9IGlzRnVuY3Rpb24oaXRlbSlcbiAgICAgICAgICA/IGdldENvbXB1dGVkQWNjZXNzb3IoeyBnZXQ6IGl0ZW0gfSlcbiAgICAgICAgICA6IGlzT2JqZWN0KGl0ZW0pICYmIGlzRnVuY3Rpb24oaXRlbS5nZXQpXG4gICAgICAgICAgICA/IGdldENvbXB1dGVkQWNjZXNzb3IoaXRlbSlcbiAgICAgICAgICAgIDogbnVsbFxuICAgICAgICBpZiAoYWNjZXNzb3IpIHtcbiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywga2V5LCBhY2Nlc3NvcilcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgYEludmFsaWQgY29tcHV0ZWQgcHJvcGVydHkgZGVmaW5pdGlvbjogJHtrZXl9OiAke2l0ZW19YFxuICAgICAgICAgIClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBzZXR1cEV2ZW50cygpIHtcbiAgICAgIGNvbnN0IHsgd2F0Y2gsIGV2ZW50cyB9ID0gdGhpcy5zY2hlbWFcbiAgICAgIGlmICh3YXRjaCkge1xuICAgICAgICBjb25zdCBoYW5kbGVycyA9IGlzRnVuY3Rpb24od2F0Y2gpID8gd2F0Y2guY2FsbCh0aGlzKSA6IHdhdGNoXG4gICAgICAgIGlmIChpc09iamVjdChoYW5kbGVycykpIHtcbiAgICAgICAgICAvLyBJbnN0YWxsIHRoZSB3YXRjaCBoYW5kbGVycyBpbiB0aGUgbmV4dCB0aWNrLCBzbyBhbGwgY29tcG9uZW50cyBhcmVcbiAgICAgICAgICAvLyBpbml0aWFsaXplZCBhbmQgd2UgY2FuIGNoZWNrIGFnYWluc3QgdGhlaXIgbmFtZXMuXG4gICAgICAgICAgdGhpcy4kbmV4dFRpY2soKCkgPT4ge1xuICAgICAgICAgICAgZm9yIChjb25zdCBba2V5LCBjYWxsYmFja10gb2YgT2JqZWN0LmVudHJpZXMoaGFuZGxlcnMpKSB7XG4gICAgICAgICAgICAgIC8vIEV4cGFuZCBwcm9wZXJ0eSBuYW1lcyB0byAnZGF0YS5wcm9wZXJ0eSc6XG4gICAgICAgICAgICAgIGNvbnN0IGV4cHIgPSB0aGlzLnNjaGVtYUNvbXBvbmVudC5nZXRDb21wb25lbnRCeU5hbWUoa2V5KVxuICAgICAgICAgICAgICAgID8gYGRhdGEuJHtrZXl9YFxuICAgICAgICAgICAgICAgIDoga2V5XG4gICAgICAgICAgICAgIHRoaXMuJHdhdGNoKGV4cHIsIGNhbGxiYWNrKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgY29uc3QgYWRkRXZlbnQgPSAoa2V5LCBldmVudCwgY2FsbGJhY2spID0+IHtcbiAgICAgICAgaWYgKGlzRnVuY3Rpb24oY2FsbGJhY2spKSB7XG4gICAgICAgICAgdGhpcy5vbihoeXBoZW5hdGUoZXZlbnQpLCBjYWxsYmFjaylcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGBJbnZhbGlkIGV2ZW50IGRlZmluaXRpb246ICR7a2V5fTogJHtjYWxsYmFja31gKVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChldmVudHMpIHtcbiAgICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoZXZlbnRzKSkge1xuICAgICAgICAgIGFkZEV2ZW50KGtleSwga2V5LCB2YWx1ZSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgLy8gQWxzbyBzY2FuIHNjaGVtYSBmb3IgYG9uW0EtWl1gLXN0eWxlIGNhbGxiYWNrcyBhbmQgYWRkIHRoZW1cbiAgICAgIC8vIFRPRE86IERlcHJlY2F0ZSBvbmUgZm9ybWF0IG9yIHRoZSBvdGhlciwgaW4gZmF2b3VyIG9mIG9ubHkgb25lIHdheSBvZlxuICAgICAgLy8gZG9pbmcgdGhpbmdzLiBEZWNpZGUgd2hpY2ggb25lIHRvIHJlbW92ZS5cbiAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHRoaXMuc2NoZW1hKSkge1xuICAgICAgICBpZiAoL15vbltBLVpdLy50ZXN0KGtleSkpIHtcbiAgICAgICAgICBhZGRFdmVudChrZXksIGtleS5zbGljZSgyKSwgdmFsdWUpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYXN5bmMgZW1pdEV2ZW50KGV2ZW50LCB7XG4gICAgICBjb250ZXh0ID0gbnVsbCxcbiAgICAgIHBhcmVudCA9IG51bGxcbiAgICB9ID0ge30pIHtcbiAgICAgIGNvbnN0IGhhc0xpc3RlbmVycyA9IHRoaXMuaGFzTGlzdGVuZXJzKGV2ZW50KVxuICAgICAgY29uc3QgcGFyZW50SGFzTGlzdGVuZXJzID0gcGFyZW50Py5oYXNMaXN0ZW5lcnMoZXZlbnQpXG4gICAgICBpZiAoaGFzTGlzdGVuZXJzIHx8IHBhcmVudEhhc0xpc3RlbmVycykge1xuICAgICAgICAvLyBUaGUgZWZmZWN0cyBvZiBzb21lIGV2ZW50cyBuZWVkIHNvbWUgdGltZSB0byBwcm9wYWdhdGUgdGhyb3VnaCBWdWUuXG4gICAgICAgIC8vIFVzZSAkbmV4dFRpY2soKSB0byBtYWtlIHN1cmUgb3VyIGhhbmRsZXJzIHNlZSB0aGVzZSBjaGFuZ2VzLlxuICAgICAgICAvLyBGb3IgZXhhbXBsZSwgYHByb2Nlc3NlZEl0ZW1gIGlzIG9ubHkgY29ycmVjdCBhZnRlciBjb21wb25lbnRzIHRoYXRcbiAgICAgICAgLy8gYXJlIG5ld2x5IHJlbmRlcmVkIGR1ZSB0byBkYXRhIGNoYW5nZXMgaGF2ZSByZWdpc3RlcmVkIHRoZW1zZWx2ZXMuXG4gICAgICAgIGlmIChbJ2xvYWQnLCAnY2hhbmdlJ10uaW5jbHVkZXMoZXZlbnQpKSB7XG4gICAgICAgICAgYXdhaXQgdGhpcy4kbmV4dFRpY2soKVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZ2V0Q29udGV4dCA9ICgpID0+IChjb250ZXh0ID0gRGl0b0NvbnRleHQuZ2V0KHRoaXMsIGNvbnRleHQpKVxuICAgICAgICBjb25zdCByZXMgPSBoYXNMaXN0ZW5lcnNcbiAgICAgICAgICA/IGF3YWl0IHRoaXMuZW1pdChldmVudCwgZ2V0Q29udGV4dCgpKVxuICAgICAgICAgIDogdW5kZWZpbmVkXG4gICAgICAgIC8vIERvbid0IGJ1YmJsZSB0byBwYXJlbnQgaWYgaGFuZGxlZCBldmVudCByZXR1cm5lZCBgZmFsc2VgXG4gICAgICAgIGlmIChwYXJlbnRIYXNMaXN0ZW5lcnMgJiYgcmVzICE9PSBmYWxzZSkge1xuICAgICAgICAgIHBhcmVudC5lbWl0KGV2ZW50LCBnZXRDb250ZXh0KCkpXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc1xuICAgICAgfVxuICAgIH0sXG5cbiAgICBlbWl0U2NoZW1hRXZlbnQoZXZlbnQsIHBhcmFtcykge1xuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hQ29tcG9uZW50LmVtaXRFdmVudChldmVudCwgcGFyYW1zKVxuICAgIH1cbiAgfVxufVxuXG5sZXQgbmV4dFVpZCA9IDBcbiIsIi8vIEEgbWluaS1yZXBsaWNhdGlvbiBvZiB2dWUncyBpbnRlcm5hbCBgcmVzb2x2ZU1lcmdlZE9wdGlvbnMoKWAgYnV0IG9ubHlcbi8vIGhhbmRsaW5nIG91ciBvd24gYWRkZWQgb3B0aW9ucyBwcm9wZXJ0aWVzIGFuZCBtZXJnaW5nIHRoZW0gZWFybHkgaW5zdGVhZFxuLy8gb2YgbGF6aWx5LlxuXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZU1lcmdlZE9wdGlvbnMob3B0aW9ucykge1xuICBjb25zdCB7IG1peGlucyB9ID0gb3B0aW9uc1xuICByZXR1cm4gbWl4aW5zIHx8IG9wdGlvbnMuZXh0ZW5kc1xuICAgID8gbWVyZ2VPcHRpb25zKFxuICAgICAgICB7IC4uLm9wdGlvbnMgfSxcbiAgICAgICAgb3B0aW9uc1xuICAgICAgKVxuICAgIDogb3B0aW9uc1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWVyZ2VPcHRpb25zKHRvLCBmcm9tKSB7XG4gIGlmIChmcm9tLmV4dGVuZHMpIHtcbiAgICBtZXJnZU9wdGlvbnModG8sIGZyb20uZXh0ZW5kcylcbiAgfVxuICBpZiAoZnJvbS5taXhpbnMpIHtcbiAgICBmb3IgKGNvbnN0IG1peGluIG9mIGZyb20ubWl4aW5zKSB7XG4gICAgICBtZXJnZU9wdGlvbnModG8sIG1peGluKVxuICAgIH1cbiAgfVxuICBmb3IgKGNvbnN0IGtleSBvZiBkaXRvT3B0aW9uS2V5cykge1xuICAgIGlmIChrZXkgaW4gZnJvbSkge1xuICAgICAgdG9ba2V5XSA9IGZyb21ba2V5XVxuICAgIH1cbiAgfVxuICByZXR1cm4gdG9cbn1cblxuY29uc3QgZGl0b09wdGlvbktleXMgPSBbXG4gICdkZWZhdWx0VmFsdWUnLFxuICAnZGVmYXVsdE5lc3RlZCcsXG4gICdkZWZhdWx0VmlzaWJsZScsXG4gICdnZW5lcmF0ZUxhYmVsJyxcbiAgJ2V4Y2x1ZGVWYWx1ZScsXG4gICdpZ25vcmVNaXNzaW5nVmFsdWUnLFxuICAnb21pdFNwYWNpbmcnLFxuICAncHJvY2Vzc1ZhbHVlJyxcbiAgJ3Byb2Nlc3NTY2hlbWEnLFxuICAnZ2V0UGFuZWxTY2hlbWEnLFxuICAnZ2V0Rm9ybVNjaGVtYXNGb3JQcm9jZXNzaW5nJyxcbiAgLy8gVnVlIDMgLyBWdWUtcm91dGVyIDQgZm9yZ2V0cyB0aGVzZS5cbiAgLy8gVE9ETzogQ3JlYXRlIGJ1Zy1yZXBvcnQ/XG4gICdiZWZvcmVSb3V0ZVVwZGF0ZScsXG4gICdiZWZvcmVSb3V0ZUxlYXZlJ1xuXVxuIiwiaW1wb3J0IERpdG9NaXhpbiBmcm9tICcuL21peGlucy9EaXRvTWl4aW4uanMnXG5pbXBvcnQgeyBnZXRUeXBlQ29tcG9uZW50IH0gZnJvbSAnLi91dGlscy9zY2hlbWEuanMnXG5pbXBvcnQgeyByZXNvbHZlTWVyZ2VkT3B0aW9ucyB9IGZyb20gJy4vdXRpbHMvb3B0aW9ucy5qcydcbmltcG9ydCB7IGlzUGxhaW5PYmplY3QgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG5jb25zdCBjb21wb25lbnRzID0ge31cblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IHtcbiAgbWl4aW5zOiBbRGl0b01peGluXSxcbiAgLy8gTWFrZSBzdXJlIHRoYXQgcmVnaXN0ZXJlZCBjb21wb25lbnRzIGFyZSBwcmVzZW50IGluIGFsbCBEaXRvQ29tcG9uZW50LlxuICBjb21wb25lbnRzLFxuXG4gIGNvbXBvbmVudChuYW1lLCBkZWZpbml0aW9uKSB7XG4gICAgaWYgKGRlZmluaXRpb24pIHtcbiAgICAgIGlmIChpc1BsYWluT2JqZWN0KGRlZmluaXRpb24pKSB7XG4gICAgICAgIGRlZmluaXRpb24gPSByZXNvbHZlTWVyZ2VkT3B0aW9ucyh7XG4gICAgICAgICAgZXh0ZW5kczogdGhpcyxcbiAgICAgICAgICBuYW1lLFxuICAgICAgICAgIC4uLmRlZmluaXRpb25cbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICAgIGNvbXBvbmVudHNbbmFtZV0gPSBkZWZpbml0aW9uXG4gICAgfVxuICAgIGlmICghKG5hbWUgaW4gY29tcG9uZW50cykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQ29tcG9uZW50IFwiJHtuYW1lfVwiIG5vdCByZWdpc3RlcmVkYClcbiAgICB9XG4gICAgcmV0dXJuIGNvbXBvbmVudHNbbmFtZV1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZ2V0VHlwZUNvbXBvbmVudFxuICB9XG59XG4iLCJleHBvcnQgZnVuY3Rpb24gZGVzY3JpYmVEYXRlKGRhdGUpIHtcbiAgcmV0dXJuIHtcbiAgICB5ZWFyOiBkYXRlPy5nZXRGdWxsWWVhcigpID8/IDAsXG4gICAgbW9udGg6IGRhdGU/LmdldE1vbnRoKCkgPz8gMCxcbiAgICBkYXk6IGRhdGU/LmdldERhdGUoKSA/PyAwLFxuICAgIGhvdXI6IGRhdGU/LmdldEhvdXJzKCkgPz8gMCxcbiAgICBtaW51dGU6IGRhdGU/LmdldE1pbnV0ZXMoKSA/PyAwLFxuICAgIHNlY29uZDogZGF0ZT8uZ2V0U2Vjb25kcygpID8/IDAsXG4gICAgbWlsbGlzZWNvbmQ6IGRhdGU/LmdldE1pbGxpc2Vjb25kcygpID8/IDBcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gYWx0ZXJEYXRlKGRhdGUsIG92ZXJyaWRlcyA9IHt9KSB7XG4gIHJldHVybiBuZXcgRGF0ZSguLi5PYmplY3QudmFsdWVzKHsgLi4uZGVzY3JpYmVEYXRlKGRhdGUpLCAuLi5vdmVycmlkZXMgfSkpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZURhdGUoc3RyaW5nLCB7XG4gIGxvY2FsZSA9ICdlbi1VUycsXG4gIGRhdGUgPSB0cnVlLFxuICB0aW1lID0gdHJ1ZVxufSA9IHt9KSB7XG4gIGNvbnN0IHRpbWVEZWZhdWx0ID0gdGltZSA/IG51bGwgOiAwXG4gIGxldCBbXG4gICAgZGF5LFxuICAgIHNlcDEsXG4gICAgbW9udGgsXG4gICAgc2VwMixcbiAgICB5ZWFyLFxuICAgICxcbiAgICBob3VyID0gdGltZURlZmF1bHQsXG4gICAgLFxuICAgIG1pbnV0ZSA9IHRpbWVEZWZhdWx0LFxuICAgICxcbiAgICBzZWNvbmQgPSB0aW1lRGVmYXVsdCxcbiAgICAsXG4gICAgbWlsbGlzZWNvbmQgPSB0aW1lRGVmYXVsdFxuICBdID0gZ2V0RGF0ZVBhcnRzKHN0cmluZywgeyBkYXRlLCB0aW1lIH0pXG4gIGlmICh5ZWFyICYmIHllYXIubGVuZ3RoID49IDQpIHtcbiAgICBpZiAobG9jYWxlID09PSAnZW4tVVMnICYmIHNlcDEgPT09ICcvJyAmJiBzZXAyID09PSAnLycpIHtcbiAgICAgIC8vIEFtZXJpY2FuIGZvcm1hdDogTU0vREQvWVlZWVxuICAgICAgO1tkYXksIG1vbnRoXSA9IFttb250aCwgZGF5XVxuICAgIH1cbiAgICBtb250aCA9IGdldE1vbnRoSW5kZXgobW9udGgsIHsgbG9jYWxlIH0pXG4gICAgY29uc3QgaXNWYWxpZFRpbWVQYXJ0ID0gcGFydCA9PiBwYXJ0ID09PSBudWxsIHx8IHBhcnQubGVuZ3RoID09PSAyXG4gICAgaWYgKFxuICAgICAgbW9udGggIT09IG51bGwgJiYgKFxuICAgICAgICAhdGltZSB8fCAoXG4gICAgICAgICAgaXNWYWxpZFRpbWVQYXJ0KGhvdXIpICYmXG4gICAgICAgICAgaXNWYWxpZFRpbWVQYXJ0KG1pbnV0ZSkgJiZcbiAgICAgICAgICBpc1ZhbGlkVGltZVBhcnQoc2Vjb25kKVxuICAgICAgICApXG4gICAgICApXG4gICAgKSB7XG4gICAgICByZXR1cm4gbmV3IERhdGUoXG4gICAgICAgICt5ZWFyLFxuICAgICAgICArbW9udGgsXG4gICAgICAgICtkYXksXG4gICAgICAgICtob3VyLFxuICAgICAgICArbWludXRlLFxuICAgICAgICArc2Vjb25kLFxuICAgICAgICArbWlsbGlzZWNvbmRcbiAgICAgIClcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG51bGxcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldERhdGVQYXJ0QXRQb3NpdGlvbihzdHJpbmcsIHBvc2l0aW9uLCB7XG4gIGxvY2FsZSA9ICdlbi1VUycsXG4gIGRhdGUgPSB0cnVlLFxuICB0aW1lID0gdHJ1ZVxufSA9IHt9KSB7XG4gIGNvbnN0IHBhcnRzID0gZ2V0RGF0ZVBhcnRzKHN0cmluZywgeyBkYXRlLCB0aW1lIH0pXG5cbiAgY29uc3QgZ2V0UG9zaXRpb24gPSAocG9zaXRpb24sIGxlbmd0aCA9IHBhcnRzLmxlbmd0aCkgPT4ge1xuICAgIGxldCBwb3MgPSAwXG4gICAgbGV0IGluZGV4ID0gMFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bm1vZGlmaWVkLWxvb3AtY29uZGl0aW9uXG4gICAgd2hpbGUgKChwb3NpdGlvbiA9PT0gbnVsbCB8fCBwb3MgPD0gcG9zaXRpb24pICYmIGluZGV4IDwgbGVuZ3RoKSB7XG4gICAgICBwb3MgKz0gcGFydHNbaW5kZXgrK10/Lmxlbmd0aCA/PyAwXG4gICAgfVxuICAgIHJldHVybiB7IHBvc2l0aW9uOiBwb3MsIGluZGV4IH1cbiAgfVxuXG4gIC8vIFRpbWUgc3RhcnRzIGF0IGluZGV4IDYsIGR1ZSB0byB0aGUgc2VwYXJhdG9yIGFmdGVyIHRoZSBkYXRlLlxuICBjb25zdCBvZmZzZXQgPSAhZGF0ZSA/IGdldFBvc2l0aW9uKG51bGwsIDYpLnBvc2l0aW9uIDogMFxuICBwb3NpdGlvbiArPSBvZmZzZXRcblxuICBsZXQgeyBpbmRleCB9ID0gZ2V0UG9zaXRpb24ocG9zaXRpb24pXG5cbiAgY29uc3QgaXNVUyA9IGxvY2FsZSA9PT0gJ2VuLVVTJ1xuICBjb25zdCB2YWx1ZXMgPSBbXG4gICAgaXNVUyA/ICdtb250aCcgOiAnZGF5JyxcbiAgICBudWxsLFxuICAgIGlzVVMgPyAnZGF5JyA6ICdtb250aCcsXG4gICAgbnVsbCxcbiAgICAneWVhcicsXG4gICAgbnVsbCxcbiAgICAnaG91cicsXG4gICAgbnVsbCxcbiAgICAnbWludXRlJyxcbiAgICBudWxsLFxuICAgICdzZWNvbmQnLFxuICAgIG51bGwsXG4gICAgJ21pbGxpc2Vjb25kJ1xuICBdXG4gIHdoaWxlIChpbmRleC0tKSB7XG4gICAgaWYgKHZhbHVlc1tpbmRleF0pIHtcbiAgICAgIGNvbnN0IHN0YXJ0ID0gZ2V0UG9zaXRpb24obnVsbCwgaW5kZXgpLnBvc2l0aW9uIC0gb2Zmc2V0XG4gICAgICBjb25zdCBlbmQgPSBzdGFydCArIHBhcnRzW2luZGV4XS5sZW5ndGhcbiAgICAgIHJldHVybiB7IG5hbWU6IHZhbHVlc1tpbmRleF0sIHN0YXJ0LCBlbmQgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gbnVsbFxufVxuXG5mdW5jdGlvbiBnZXREYXRlUGFydHMoc3RyaW5nLCB7IGRhdGUgPSB0cnVlLCB0aW1lID0gdHJ1ZSB9ID0ge30pIHtcbiAgY29uc3QgcGFydHMgPSBzdHJpbmc/LnNwbGl0KC8oW1xccy4sOi9dKykvKSB8fCBbXVxuICBpZiAoIWRhdGUpIHtcbiAgICAvLyBBZGQgZHVtbXkgZGF0ZSBwYXJ0cyB0byBtYWtlIHN1cmUgd2UgZ2V0IGEgdGltZS1vbmx5IGRhdGUuXG4gICAgcGFydHMudW5zaGlmdCgnMScsICcuJywgJzEnLCAnLicsICcyMDAwJywgJyAnKVxuICB9XG4gIGlmICghdGltZSAmJiBwYXJ0cy5sZW5ndGggPiA1KSB7XG4gICAgcGFydHMubGVuZ3RoID0gNVxuICB9XG4gIHJldHVybiBwYXJ0c1xufVxuXG5mdW5jdGlvbiBnZXRNb250aEluZGV4KG1vbnRoLCB7IGxvY2FsZSA9ICdlbi1VUycgfSA9IHt9KSB7XG4gIGNvbnN0IHZhbHVlID0gK21vbnRoXG4gIGlmICghaXNOYU4odmFsdWUpKSB7XG4gICAgcmV0dXJuIHZhbHVlIC0gMVxuICB9XG4gIGNvbnN0IG1hdGNoID0gbW9udGgudHJpbSgpLnRvTG93ZXJDYXNlKClcbiAgaWYgKG1hdGNoLmxlbmd0aCA8IDMpIHJldHVybiBudWxsXG4gIGNvbnN0IHNob3J0Rm9ybWF0ID0gbmV3IEludGwuRGF0ZVRpbWVGb3JtYXQobG9jYWxlLCB7IG1vbnRoOiAnc2hvcnQnIH0pXG4gIGNvbnN0IGxvbmdGb3JtYXQgPSBuZXcgSW50bC5EYXRlVGltZUZvcm1hdChsb2NhbGUsIHsgbW9udGg6ICdsb25nJyB9KVxuICBmb3IgKGxldCBpID0gMDsgaSA8IDEyOyBpKyspIHtcbiAgICBjb25zdCBkYXRlID0gbmV3IERhdGUoMjAwMCwgaSwgMSlcbiAgICBpZiAoXG4gICAgICBzaG9ydEZvcm1hdC5mb3JtYXQoZGF0ZSkudG9Mb3dlckNhc2UoKS5zdGFydHNXaXRoKG1hdGNoKSB8fFxuICAgICAgbG9uZ0Zvcm1hdC5mb3JtYXQoZGF0ZSkudG9Mb3dlckNhc2UoKS5zdGFydHNXaXRoKG1hdGNoKVxuICAgICkge1xuICAgICAgcmV0dXJuIGlcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG51bGxcbn1cbiIsIjwhLS0gRGVyaXZlZCBmcm9tIEFUVUksIGFuZCBmdXJ0aGVyIGV4dGVuZGVkOiBodHRwczovL2FsaXFpbi5naXRodWIuaW8vYXR1aS8gLS0+XG48dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuLmRpdG8tY2FsZW5kYXJcbiAgLmRpdG8tY2FsZW5kYXItcG9wdXBcbiAgICAuZGl0by1jYWxlbmRhci1pbm5lclxuICAgICAgdGVtcGxhdGUoXG4gICAgICAgIHYtaWY9XCJjdXJyZW50TW9kZSA9PT0gJ2RheSdcIlxuICAgICAgKVxuICAgICAgICAuZGl0by1jYWxlbmRhci1oZWFkZXJcbiAgICAgICAgICBhLmRpdG8tY2FsZW5kYXItc3RlcC1wcmV2LmRpdG8tY2FsZW5kYXItc3RlcC15ZWFyKFxuICAgICAgICAgICAgQGNsaWNrPVwic3RlcFllYXIoLTEpXCJcbiAgICAgICAgICApXG4gICAgICAgICAgYS5kaXRvLWNhbGVuZGFyLXN0ZXAtcHJldi5kaXRvLWNhbGVuZGFyLXN0ZXAtbW9udGgoXG4gICAgICAgICAgICBAY2xpY2s9XCJzdGVwTW9udGgoLTEpXCJcbiAgICAgICAgICApXG4gICAgICAgICAgc3BhblxuICAgICAgICAgICAgYS5kaXRvLWNhbGVuZGFyLXNlbGVjdC15ZWFyKFxuICAgICAgICAgICAgICBAY2xpY2s9XCJzZXRNb2RlKCd5ZWFyJylcIlxuICAgICAgICAgICAgKSB7eyBkYXRlVG9TdHJpbmcoY3VycmVudFZhbHVlLCB7IHllYXI6IHRydWUgfSkgfX1cbiAgICAgICAgICAgIGEuZGl0by1jYWxlbmRhci1zZWxlY3QtbW9udGgoXG4gICAgICAgICAgICAgIEBjbGljaz1cInNldE1vZGUoJ21vbnRoJylcIlxuICAgICAgICAgICAgKSB7eyBkYXRlVG9TdHJpbmcoY3VycmVudFZhbHVlLCB7IG1vbnRoOiB0cnVlIH0pIH19XG4gICAgICAgICAgYS5kaXRvLWNhbGVuZGFyLXN0ZXAtbmV4dC5kaXRvLWNhbGVuZGFyLXN0ZXAtbW9udGgoXG4gICAgICAgICAgICBAY2xpY2s9XCJzdGVwTW9udGgoMSlcIlxuICAgICAgICAgIClcbiAgICAgICAgICBhLmRpdG8tY2FsZW5kYXItc3RlcC1uZXh0LmRpdG8tY2FsZW5kYXItc3RlcC15ZWFyKFxuICAgICAgICAgICAgQGNsaWNrPVwic3RlcFllYXIoMSlcIlxuICAgICAgICAgIClcbiAgICAgICAgLmRpdG8tY2FsZW5kYXItYm9keVxuICAgICAgICAgIC5kaXRvLWNhbGVuZGFyLXdlZWtkYXlzXG4gICAgICAgICAgICBzcGFuKFxuICAgICAgICAgICAgICB2LWZvcj1cIndlZWtkYXkgaW4gd2Vla2RheU5hbWVzXCJcbiAgICAgICAgICAgICkge3sgd2Vla2RheS5zaG9ydCB9fVxuICAgICAgICAgIC5kaXRvLWNhbGVuZGFyLWRhdGVzXG4gICAgICAgICAgICBzcGFuKFxuICAgICAgICAgICAgICB2LWZvcj1cImRhdGUgaW4gZGF0ZVJhbmdlXCJcbiAgICAgICAgICAgICAgOmNsYXNzPVwiZGF0ZS5zdGF0ZSAmJiBgZGl0by1jYWxlbmRhci1pdGVtLSR7ZGF0ZS5zdGF0ZX1gXCJcbiAgICAgICAgICAgICAgQGNsaWNrPVwiZGF0ZS5zdGF0ZSAhPT0gJ2Rpc2FibGVkJyAmJiBzZWxlY3REYXRlKGRhdGUuZGF0ZSlcIlxuICAgICAgICAgICAgKSB7eyBkYXRlLnRleHQgfX1cbiAgICAgICAgLmRpdG8tY2FsZW5kYXItZm9vdGVyXG4gICAgICAgICAgYS5kaXRvLWNhbGVuZGFyLXNlbGVjdC1ub3coXG4gICAgICAgICAgICByb2xlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIDp0aXRsZT1cImRhdGVUb1N0cmluZyhuZXcgRGF0ZSgpKVwiXG4gICAgICAgICAgICBAY2xpY2s9XCJzZWxlY3REYXRlKG5ldyBEYXRlKCkpXCJcbiAgICAgICAgICApXG4gICAgICB0ZW1wbGF0ZShcbiAgICAgICAgdi1lbHNlLWlmPVwiY3VycmVudE1vZGUgPT09ICdtb250aCdcIlxuICAgICAgKVxuICAgICAgICAuZGl0by1jYWxlbmRhci1oZWFkZXJcbiAgICAgICAgICBhLmRpdG8tY2FsZW5kYXItc3RlcC1wcmV2KFxuICAgICAgICAgICAgQGNsaWNrPVwic3RlcFllYXIoLTEpXCJcbiAgICAgICAgICApXG4gICAgICAgICAgc3BhblxuICAgICAgICAgICAgYS5kaXRvLWNhbGVuZGFyLXNlbGVjdC15ZWFyKFxuICAgICAgICAgICAgICBAY2xpY2s9XCJzZXRNb2RlKCd5ZWFyJylcIlxuICAgICAgICAgICAgKSB7eyBkYXRlVG9TdHJpbmcoY3VycmVudFZhbHVlLCB7IHllYXI6IHRydWUgfSkgfX1cbiAgICAgICAgICBhLmRpdG8tY2FsZW5kYXItc3RlcC1uZXh0KFxuICAgICAgICAgICAgQGNsaWNrPVwic3RlcFllYXIoMSlcIlxuICAgICAgICAgIClcbiAgICAgICAgLmRpdG8tY2FsZW5kYXItYm9keVxuICAgICAgICAgIC5kaXRvLWNhbGVuZGFyLW1vbnRoc1xuICAgICAgICAgICAgc3BhbihcbiAgICAgICAgICAgICAgdi1mb3I9XCIobW9udGgsIGluZGV4KSBpbiBtb250aE5hbWVzXCJcbiAgICAgICAgICAgICAgOmNsYXNzPVwiZ2V0TW9udGhDbGFzcyhpbmRleClcIlxuICAgICAgICAgICAgICBAY2xpY2s9XCJzZWxlY3RNb250aChpbmRleClcIlxuICAgICAgICAgICAgKSB7eyBtb250aC5zaG9ydCB9fVxuICAgICAgdGVtcGxhdGUoXG4gICAgICAgIHYtZWxzZS1pZj1cImN1cnJlbnRNb2RlID09PSAneWVhcidcIlxuICAgICAgKVxuICAgICAgICAuZGl0by1jYWxlbmRhci1oZWFkZXJcbiAgICAgICAgICBhLmRpdG8tY2FsZW5kYXItc3RlcC1wcmV2KFxuICAgICAgICAgICAgQGNsaWNrPVwic3RlcERlY2FkZSgtMSlcIlxuICAgICAgICAgIClcbiAgICAgICAgICBzcGFuIHt7IGRlY2FkZVRvU3RyaW5nKGN1cnJlbnRWYWx1ZSkgfX1cbiAgICAgICAgICBhLmRpdG8tY2FsZW5kYXItc3RlcC1uZXh0KFxuICAgICAgICAgICAgQGNsaWNrPVwic3RlcERlY2FkZSgxKVwiXG4gICAgICAgICAgKVxuICAgICAgICAuZGl0by1jYWxlbmRhci1ib2R5XG4gICAgICAgICAgLmRpdG8tY2FsZW5kYXIteWVhcnNcbiAgICAgICAgICAgIHNwYW4oXG4gICAgICAgICAgICAgIHYtZm9yPVwieWVhciBpbiB5ZWFyUmFuZ2VcIlxuICAgICAgICAgICAgICA6Y2xhc3M9XCJnZXRZZWFyQ2xhc3MoeWVhcilcIlxuICAgICAgICAgICAgICBAY2xpY2s9XCJzZWxlY3RZZWFyKHllYXIpXCJcbiAgICAgICAgICAgICkge3sgeWVhciB9fVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCB7IGRlc2NyaWJlRGF0ZSwgYWx0ZXJEYXRlIH0gZnJvbSAnLi4vdXRpbHMvZGF0ZS5qcydcblxuZXhwb3J0IGRlZmF1bHQge1xuICBlbWl0czogWyd1cGRhdGU6bW9kZWxWYWx1ZScsICdzZWxlY3QnXSxcblxuICBwcm9wczoge1xuICAgIG1vZGVsVmFsdWU6IHsgdHlwZTogRGF0ZSwgZGVmYXVsdDogbnVsbCB9LFxuICAgIGxvY2FsZTogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6ICdlbi1VUycgfSxcbiAgICBkaXNhYmxlZERhdGU6IHsgdHlwZTogRnVuY3Rpb24sIGRlZmF1bHQ6ICgpID0+IGZhbHNlIH0sXG4gICAgbW9kZTogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6ICdkYXknIH1cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIGNvbnN0IHsgd2Vla2RheU5hbWVzLCBtb250aE5hbWVzIH0gPSBnZXRMb2NhbGVOYW1lcyh0aGlzLmxvY2FsZSlcbiAgICByZXR1cm4ge1xuICAgICAgd2Vla2RheU5hbWVzLFxuICAgICAgbW9udGhOYW1lcyxcbiAgICAgIGRhdGVSYW5nZTogW10sXG4gICAgICB5ZWFyUmFuZ2U6IFtdLFxuICAgICAgY3VycmVudFZhbHVlOiAoXG4gICAgICAgIHRoaXMubW9kZWxWYWx1ZSB8fFxuICAgICAgICAvLyBJZiBubyB2YWx1ZSBpcyBwcm92aWRlZCwgdXNlIGN1cnJlbnQgZGF0ZSBidXQgY2xlYXIgdGltZSBmaWVsZHM6XG4gICAgICAgIGFsdGVyRGF0ZShuZXcgRGF0ZSgpLCB7IGhvdXI6IDAsIG1pbnV0ZTogMCwgc2Vjb25kOiAwLCBtaWxsaXNlY29uZDogMCB9KVxuICAgICAgKSxcbiAgICAgIGN1cnJlbnRNb2RlOiB0aGlzLm1vZGVcbiAgICB9XG4gIH0sXG5cbiAgd2F0Y2g6IHtcbiAgICBtb2RlbFZhbHVlKHRvLCBmcm9tKSB7XG4gICAgICBpZiAoK3RvICE9PSArZnJvbSkge1xuICAgICAgICB0aGlzLmN1cnJlbnRWYWx1ZSA9IHRvIHx8IG5ldyBEYXRlKClcbiAgICAgICAgdGhpcy51cGRhdGVEYXRlUmFuZ2UoKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBjdXJyZW50VmFsdWUodG8sIGZyb20pIHtcbiAgICAgIGlmICgrdG8gIT09ICtmcm9tKSB7XG4gICAgICAgIHRoaXMudXBkYXRlRGF0ZVJhbmdlKClcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZGlzYWJsZWREYXRlOiAndXBkYXRlRGF0ZVJhbmdlJyxcblxuICAgIG1vZGUobW9kZSkge1xuICAgICAgdGhpcy5jdXJyZW50TW9kZSA9IG1vZGVcbiAgICB9XG4gIH0sXG5cbiAgbW91bnRlZCgpIHtcbiAgICB0aGlzLnVwZGF0ZURhdGVSYW5nZSgpXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGdldE1vbnRoQ2xhc3MobW9udGgpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgICdkaXRvLWNhbGVuZGFyLWl0ZW0tYWN0aXZlJzogKFxuICAgICAgICAgIHRoaXMubW9kZWxWYWx1ZSAmJlxuICAgICAgICAgIG1vbnRoID09PSB0aGlzLm1vZGVsVmFsdWUuZ2V0TW9udGgoKSAmJlxuICAgICAgICAgIHRoaXMuY3VycmVudFZhbHVlLmdldEZ1bGxZZWFyKCkgPT09IHRoaXMubW9kZWxWYWx1ZS5nZXRGdWxsWWVhcigpXG4gICAgICAgICksXG4gICAgICAgICdkaXRvLWNhbGVuZGFyLWl0ZW0tY3VycmVudCc6IG1vbnRoID09PSB0aGlzLmN1cnJlbnRWYWx1ZS5nZXRNb250aCgpXG4gICAgICB9XG4gICAgfSxcblxuICAgIGdldFllYXJDbGFzcyh5ZWFyKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAnZGl0by1jYWxlbmRhci1pdGVtLWFjdGl2ZSc6IChcbiAgICAgICAgICB0aGlzLm1vZGVsVmFsdWUgJiYgeWVhciA9PT0gdGhpcy5tb2RlbFZhbHVlLmdldEZ1bGxZZWFyKClcbiAgICAgICAgKSxcbiAgICAgICAgJ2RpdG8tY2FsZW5kYXItaXRlbS1jdXJyZW50JzogeWVhciA9PT0gdGhpcy5jdXJyZW50VmFsdWUuZ2V0RnVsbFllYXIoKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBzZXREYXRlKG92ZXJyaWRlcywgdXBkYXRlID0gZmFsc2UpIHtcbiAgICAgIHRoaXMuY3VycmVudFZhbHVlID0gYWx0ZXJEYXRlKHRoaXMuY3VycmVudFZhbHVlLCBvdmVycmlkZXMpXG4gICAgICBpZiAodXBkYXRlKSB7XG4gICAgICAgIHRoaXMuJGVtaXQoJ3VwZGF0ZTptb2RlbFZhbHVlJywgdGhpcy5jdXJyZW50VmFsdWUpXG4gICAgICB9XG4gICAgfSxcblxuICAgIHN0ZXBEZWNhZGUoc3RlcCkge1xuICAgICAgdGhpcy5zZXREYXRlKHtcbiAgICAgICAgeWVhcjogdGhpcy5jdXJyZW50VmFsdWUuZ2V0RnVsbFllYXIoKSArIHN0ZXAgKiAxMFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgc2V0TW9kZShtb2RlKSB7XG4gICAgICB0aGlzLmN1cnJlbnRNb2RlID0gbW9kZVxuICAgIH0sXG5cbiAgICBzdGVwTW9udGgoc3RlcCkge1xuICAgICAgY29uc3QgeyBjdXJyZW50VmFsdWUgfSA9IHRoaXNcbiAgICAgIGNvbnN0IHsgeWVhciwgbW9udGggfSA9IHRoaXMuZ2V0WWVhck1vbnRoKFxuICAgICAgICBjdXJyZW50VmFsdWUuZ2V0RnVsbFllYXIoKSxcbiAgICAgICAgY3VycmVudFZhbHVlLmdldE1vbnRoKCkgKyBzdGVwXG4gICAgICApXG4gICAgICB0aGlzLnNldERhdGUoe1xuICAgICAgICBtb250aCxcbiAgICAgICAgZGF5OiBNYXRoLm1pbihcbiAgICAgICAgICB0aGlzLmdldERheXNJbk1vbnRoKHllYXIsIG1vbnRoKSxcbiAgICAgICAgICB0aGlzLmN1cnJlbnRWYWx1ZS5nZXREYXRlKClcbiAgICAgICAgKVxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgc3RlcFllYXIoc3RlcCkge1xuICAgICAgdGhpcy5zZXREYXRlKHtcbiAgICAgICAgeWVhcjogdGhpcy5jdXJyZW50VmFsdWUuZ2V0RnVsbFllYXIoKSArIHN0ZXBcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIHNlbGVjdERhdGUoZGF0ZSkge1xuICAgICAgdGhpcy5zZXREYXRlKGRlc2NyaWJlRGF0ZShkYXRlKSwgdHJ1ZSlcbiAgICAgIHRoaXMuJGVtaXQoJ3NlbGVjdCcpXG4gICAgfSxcblxuICAgIHNlbGVjdE1vbnRoKG1vbnRoKSB7XG4gICAgICB0aGlzLnNldE1vZGUoJ2RheScpXG4gICAgICAvLyBTZXQgZGF5IHRvIDEgdG8gYXZvaWQgc2VsZWN0aW5nIGEgZGF0ZSB0aGF0IGlzIG5vdCBhdmFpbGFibGUgaW4gdGhlXG4gICAgICAvLyBuZXcgbW9udGgsIGUuZy4gRmViIDMxIC0+IE1hciAzLlxuICAgICAgdGhpcy5zZXREYXRlKHsgbW9udGgsIGRheTogMSB9LCB0cnVlKVxuICAgIH0sXG5cbiAgICBzZWxlY3RZZWFyKHllYXIpIHtcbiAgICAgIHRoaXMuc2V0TW9kZSgnbW9udGgnKVxuICAgICAgdGhpcy5zZXREYXRlKHsgeWVhciB9LCB0cnVlKVxuICAgIH0sXG5cbiAgICBnZXRZZWFyTW9udGgoeWVhciwgbW9udGgpIHtcbiAgICAgIGlmIChtb250aCA+IDExKSB7XG4gICAgICAgIHllYXIrK1xuICAgICAgICBtb250aCA9IDBcbiAgICAgIH0gZWxzZSBpZiAobW9udGggPCAwKSB7XG4gICAgICAgIHllYXItLVxuICAgICAgICBtb250aCA9IDExXG4gICAgICB9XG4gICAgICByZXR1cm4geyB5ZWFyLCBtb250aCB9XG4gICAgfSxcblxuICAgIGRhdGVUb1N0cmluZyhcbiAgICAgIGRhdGUsXG4gICAgICB7IHllYXIsIG1vbnRoLCBkYXkgfSA9IHsgeWVhcjogdHJ1ZSwgbW9udGg6IHRydWUsIGRheTogdHJ1ZSB9XG4gICAgKSB7XG4gICAgICByZXR1cm4gZGF0ZS50b0xvY2FsZVN0cmluZyh0aGlzLmxvY2FsZSwge1xuICAgICAgICB5ZWFyOiB5ZWFyICYmICdudW1lcmljJyxcbiAgICAgICAgbW9udGg6IG1vbnRoICYmICdsb25nJyxcbiAgICAgICAgZGF5OiBkYXkgJiYgJ251bWVyaWMnXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBkZWNhZGVUb1N0cmluZyhkYXRlKSB7XG4gICAgICBjb25zdCB5ZWFyID0gdGhpcy5nZXRGaXJzdFllYXJPZkRlY2FkZShkYXRlLmdldEZ1bGxZZWFyKCkpXG4gICAgICByZXR1cm4gYCR7eWVhcn0g4oCTICR7eWVhciArIDl9YFxuICAgIH0sXG5cbiAgICBnZXREYXlzSW5Nb250aCh5ZWFyLCBtb250aCkge1xuICAgICAgcmV0dXJuIG5ldyBEYXRlKHllYXIsIG1vbnRoICsgMSwgMCkuZ2V0RGF0ZSgpXG4gICAgfSxcblxuICAgIGdldEZpcnN0WWVhck9mRGVjYWRlKHllYXIpIHtcbiAgICAgIGNvbnN0IHllYXJTdHIgPSB5ZWFyLnRvU3RyaW5nKClcbiAgICAgIHJldHVybiArYCR7eWVhclN0ci5zbGljZSgwLCAtMSl9MGBcbiAgICB9LFxuXG4gICAgbmF2aWdhdGUoeyBzdGVwLCBlbnRlciwgbW9kZSA9IHRoaXMuY3VycmVudE1vZGUsIHVwZGF0ZSA9IGZhbHNlIH0pIHtcbiAgICAgIGNvbnN0IHsgY3VycmVudFZhbHVlIH0gPSB0aGlzXG4gICAgICBpZiAoc3RlcCkge1xuICAgICAgICBzd2l0Y2ggKG1vZGUpIHtcbiAgICAgICAgICBjYXNlICdkYXknOlxuICAgICAgICAgICAgdGhpcy5zZXREYXRlKHsgZGF5OiBjdXJyZW50VmFsdWUuZ2V0RGF0ZSgpICsgc3RlcCB9LCB1cGRhdGUpXG4gICAgICAgICAgICBicmVha1xuICAgICAgICAgIGNhc2UgJ21vbnRoJzpcbiAgICAgICAgICAgIHRoaXMuc2V0RGF0ZSh7IG1vbnRoOiBjdXJyZW50VmFsdWUuZ2V0TW9udGgoKSArIHN0ZXAgfSwgdXBkYXRlKVxuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICBjYXNlICd5ZWFyJzpcbiAgICAgICAgICAgIHRoaXMuc2V0RGF0ZSh7IHllYXI6IGN1cnJlbnRWYWx1ZS5nZXRGdWxsWWVhcigpICsgc3RlcCB9LCB1cGRhdGUpXG4gICAgICAgICAgICBicmVha1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgICB9IGVsc2UgaWYgKGVudGVyKSB7XG4gICAgICAgIHN3aXRjaCAodGhpcy5jdXJyZW50TW9kZSkge1xuICAgICAgICAgIGNhc2UgJ2RheSc6XG4gICAgICAgICAgICB0aGlzLnNlbGVjdERhdGUoY3VycmVudFZhbHVlKVxuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICBjYXNlICdtb250aCc6XG4gICAgICAgICAgICB0aGlzLnNldE1vZGUoJ2RheScpXG4gICAgICAgICAgICBicmVha1xuICAgICAgICAgIGNhc2UgJ3llYXInOlxuICAgICAgICAgICAgdGhpcy5zZXRNb2RlKCdtb250aCcpXG4gICAgICAgICAgICBicmVha1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgICB9XG4gICAgfSxcblxuICAgIHVwZGF0ZURhdGVSYW5nZSgpIHtcbiAgICAgIHRoaXMuZGF0ZVJhbmdlID0gW11cbiAgICAgIHRoaXMueWVhclJhbmdlID0gW11cblxuICAgICAgY29uc3QgeyBjdXJyZW50VmFsdWUgfSA9IHRoaXNcbiAgICAgIGNvbnN0IHllYXIgPSBjdXJyZW50VmFsdWUuZ2V0RnVsbFllYXIoKVxuICAgICAgY29uc3QgbW9udGggPSBjdXJyZW50VmFsdWUuZ2V0TW9udGgoKVxuICAgICAgY29uc3Qgc3RhcnRZZWFyID0gdGhpcy5nZXRGaXJzdFllYXJPZkRlY2FkZSh5ZWFyKVxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCAxMDsgaSsrKSB7XG4gICAgICAgIHRoaXMueWVhclJhbmdlLnB1c2goc3RhcnRZZWFyICsgaSlcbiAgICAgIH1cbiAgICAgIGNvbnN0IGN1cnJNb250aEZpcnN0RGF5ID0gbmV3IERhdGUoeWVhciwgbW9udGgsIDEpXG4gICAgICBsZXQgZmlyc3REYXlXZWVrID0gY3Vyck1vbnRoRmlyc3REYXkuZ2V0RGF5KCkgKyAxXG4gICAgICBpZiAoZmlyc3REYXlXZWVrID09PSAwKSB7XG4gICAgICAgIGZpcnN0RGF5V2VlayA9IDdcbiAgICAgIH1cbiAgICAgIGNvbnN0IG51bURheXMgPSB0aGlzLmdldERheXNJbk1vbnRoKHllYXIsIG1vbnRoKVxuICAgICAgaWYgKGZpcnN0RGF5V2VlayA+IDEpIHtcbiAgICAgICAgY29uc3QgcHJldk1vbnRoID0gdGhpcy5nZXRZZWFyTW9udGgoeWVhciwgbW9udGggLSAxKVxuICAgICAgICBjb25zdCBwcmV2TW9udGhOdW1EYXlzID0gdGhpcy5nZXREYXlzSW5Nb250aChcbiAgICAgICAgICBwcmV2TW9udGgueWVhcixcbiAgICAgICAgICBwcmV2TW9udGgubW9udGhcbiAgICAgICAgKVxuICAgICAgICBmb3IgKGxldCBpID0gMTsgaSA8IGZpcnN0RGF5V2VlazsgaSsrKSB7XG4gICAgICAgICAgY29uc3QgZGF5ID0gcHJldk1vbnRoTnVtRGF5cyAtIGZpcnN0RGF5V2VlayArIGkgKyAxXG4gICAgICAgICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKHByZXZNb250aC55ZWFyLCBwcmV2TW9udGgubW9udGgsIGRheSlcbiAgICAgICAgICB0aGlzLmRhdGVSYW5nZS5wdXNoKHtcbiAgICAgICAgICAgIHRleHQ6IGRheSxcbiAgICAgICAgICAgIGRhdGUsXG4gICAgICAgICAgICBzdGF0ZTogdGhpcy5kaXNhYmxlZERhdGUoZGF0ZSkgPyAnZGlzYWJsZWQnIDogJ2dyYXknXG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjb25zdCBub3cgPSBuZXcgRGF0ZSgpXG4gICAgICBmb3IgKGxldCBpID0gMTsgaSA8PSBudW1EYXlzOyBpKyspIHtcbiAgICAgICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKHllYXIsIG1vbnRoLCBpKVxuICAgICAgICBjb25zdCBpc0RheSA9IGRhdGUgPT4gKFxuICAgICAgICAgIGRhdGUgJiZcbiAgICAgICAgICBkYXRlLmdldERhdGUoKSA9PT0gaSAmJlxuICAgICAgICAgIGRhdGUuZ2V0RnVsbFllYXIoKSA9PT0geWVhciAmJlxuICAgICAgICAgIGRhdGUuZ2V0TW9udGgoKSA9PT0gbW9udGhcbiAgICAgICAgKVxuICAgICAgICBjb25zdCBzdGF0ZSA9IGlzRGF5KHRoaXMubW9kZWxWYWx1ZSlcbiAgICAgICAgICA/ICdhY3RpdmUnXG4gICAgICAgICAgOiBpc0RheShub3cpXG4gICAgICAgICAgICA/ICd0b2RheSdcbiAgICAgICAgICAgIDogdGhpcy5kaXNhYmxlZERhdGUoZGF0ZSlcbiAgICAgICAgICAgICAgPyAnZGlzYWJsZWQnXG4gICAgICAgICAgICAgIDogaXNEYXkoY3VycmVudFZhbHVlKVxuICAgICAgICAgICAgICAgID8gJ2N1cnJlbnQnXG4gICAgICAgICAgICAgICAgOiBudWxsXG4gICAgICAgIHRoaXMuZGF0ZVJhbmdlLnB1c2goe1xuICAgICAgICAgIHRleHQ6IGksXG4gICAgICAgICAgZGF0ZSxcbiAgICAgICAgICBzdGF0ZVxuICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICBjb25zdCBuZXh0TW9udGhOZWVkID0gNDIgLSB0aGlzLmRhdGVSYW5nZS5sZW5ndGhcbiAgICAgIGlmIChuZXh0TW9udGhOZWVkID4gMCkge1xuICAgICAgICBjb25zdCBuZXh0TW9udGggPSB0aGlzLmdldFllYXJNb250aCh5ZWFyLCBtb250aCArIDEpXG4gICAgICAgIGZvciAobGV0IGkgPSAxOyBpIDw9IG5leHRNb250aE5lZWQ7IGkrKykge1xuICAgICAgICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZShuZXh0TW9udGgueWVhciwgbmV4dE1vbnRoLm1vbnRoLCBpKVxuICAgICAgICAgIGNvbnN0IHN0YXRlID0gdGhpcy5kaXNhYmxlZERhdGUoZGF0ZSkgPyAnZGlzYWJsZWQnIDogJ2dyYXknXG4gICAgICAgICAgdGhpcy5kYXRlUmFuZ2UucHVzaCh7XG4gICAgICAgICAgICB0ZXh0OiBpLFxuICAgICAgICAgICAgZGF0ZSxcbiAgICAgICAgICAgIHN0YXRlXG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5jb25zdCBsb2NhbGVOYW1lcyA9IHt9XG5cbi8vIENhbGxpbmcgYHRvTG9jYWxlU3RyaW5nKClgIHRoaXMgbXVjaCBhcHBlYXJzIHRvIGJlIGV4cGVuc2l2ZSwgc28gY2FjaGUgaXQ6XG5mdW5jdGlvbiBnZXRMb2NhbGVOYW1lcyhsb2NhbGUpIHtcbiAgbGV0IG5hbWVzID0gbG9jYWxlTmFtZXNbbG9jYWxlXVxuICBpZiAoIW5hbWVzKSB7XG4gICAgY29uc3Qgd2Vla2RheU5hbWVzID0gW11cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IDc7IGkrKykge1xuICAgICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKDAsIDAsIGkpXG4gICAgICB3ZWVrZGF5TmFtZXMucHVzaCh7XG4gICAgICAgIGxvbmc6IGRhdGUudG9Mb2NhbGVTdHJpbmcobG9jYWxlLCB7IHdlZWtkYXk6ICdsb25nJyB9KSxcbiAgICAgICAgc2hvcnQ6IGRhdGUudG9Mb2NhbGVTdHJpbmcobG9jYWxlLCB7IHdlZWtkYXk6ICdzaG9ydCcgfSlcbiAgICAgIH0pXG4gICAgfVxuICAgIGNvbnN0IG1vbnRoTmFtZXMgPSBbXVxuICAgIGZvciAobGV0IGkgPSAxOyBpIDw9IDEyOyBpKyspIHtcbiAgICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSgwLCBpLCAwKVxuICAgICAgbW9udGhOYW1lcy5wdXNoKHtcbiAgICAgICAgbG9uZzogZGF0ZS50b0xvY2FsZVN0cmluZyhsb2NhbGUsIHsgbW9udGg6ICdsb25nJyB9KSxcbiAgICAgICAgc2hvcnQ6IGRhdGUudG9Mb2NhbGVTdHJpbmcobG9jYWxlLCB7IG1vbnRoOiAnc2hvcnQnIH0pXG4gICAgICB9KVxuICAgIH1cbiAgICBuYW1lcyA9IGxvY2FsZU5hbWVzW2xvY2FsZV0gPSB7XG4gICAgICB3ZWVrZGF5TmFtZXMsXG4gICAgICBtb250aE5hbWVzXG4gICAgfVxuICB9XG4gIHJldHVybiBuYW1lc1xufVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLmRpdG8tY2FsZW5kYXIge1xuICBtaW4td2lkdGg6IDI0MHB4O1xuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xufVxuXG4uZGl0by1jYWxlbmRhci1wb3B1cCB7XG4gIGJvcmRlcjogJGJvcmRlci1zdHlsZTtcbiAgYm9yZGVyLXJhZGl1czogJGJvcmRlci1yYWRpdXM7XG4gIGJhY2tncm91bmQ6ICRjb2xvci13aGl0ZTtcbiAgYm94LXNoYWRvdzogJHNoYWRvdy13aW5kb3c7XG4gIHotaW5kZXg6ICR6LWluZGV4LXBvcHVwO1xufVxuXG4uZGl0by1jYWxlbmRhci1ib2R5IHtcbiAgcGFkZGluZzogMCAwLjVlbTtcblxuICBzcGFuIHtcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgd2lkdGg6IGNhbGMoMTAwJSAvIDcpO1xuICAgIGhlaWdodDogJGlucHV0LWhlaWdodDtcbiAgICBsaW5lLWhlaWdodDogY2FsYygjeyRpbnB1dC1oZWlnaHR9IC0gMnB4KTtcbiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgIGJvcmRlci1yYWRpdXM6ICRib3JkZXItcmFkaXVzO1xuICAgIGJvcmRlcjogJGJvcmRlci13aWR0aCBzb2xpZCB0cmFuc3BhcmVudDtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIH1cblxuICAuZGl0by1jYWxlbmRhci1pdGVtLXRvZGF5IHtcbiAgICBib3JkZXI6ICRib3JkZXItd2lkdGggc29saWQgJGNvbG9yLWFjdGl2ZTtcbiAgICBjb2xvcjogJGNvbG9yLWFjdGl2ZTtcbiAgfVxuXG4gIC5kaXRvLWNhbGVuZGFyLWl0ZW0tYWN0aXZlIHtcbiAgICAmLFxuICAgICY6aG92ZXIge1xuICAgICAgYmFja2dyb3VuZDogJGNvbG9yLWFjdGl2ZTtcbiAgICAgIGNvbG9yOiB3aGl0ZTtcbiAgICB9XG4gIH1cblxuICAuZGl0by1jYWxlbmRhci1pdGVtLWRpc2FibGVkIHtcbiAgICBiYWNrZ3JvdW5kOiB3aGl0ZTtcbiAgICBjdXJzb3I6IGRlZmF1bHQ7XG4gIH1cblxuICAuZGl0by1jYWxlbmRhci1pdGVtLWRpc2FibGVkLFxuICAuZGl0by1jYWxlbmRhci1pdGVtLWdyYXkge1xuICAgIGNvbG9yOiAjOTk5OTk5O1xuICB9XG59XG5cbi5kaXRvLWNhbGVuZGFyLW1vbnRocyxcbi5kaXRvLWNhbGVuZGFyLXllYXJzIHtcbiAgc3BhbiB7XG4gICAgd2lkdGg6IGNhbGMoMTAwJSAvIDQpO1xuICAgIG1hcmdpbjogMC41ZW0gMDtcbiAgfVxufVxuXG4uZGl0by1jYWxlbmRhci15ZWFycyBzcGFuIHtcbiAgd2lkdGg6IGNhbGMoMTAwJSAvIDUpO1xufVxuXG4uZGl0by1jYWxlbmRhciBhLFxuLmRpdG8tY2FsZW5kYXItZGF0ZXMgc3Bhbixcbi5kaXRvLWNhbGVuZGFyLW1vbnRocyBzcGFuLFxuLmRpdG8tY2FsZW5kYXIteWVhcnMgc3BhbiB7XG4gIEBpbmNsdWRlIHVzZXItc2VsZWN0KG5vbmUpO1xuXG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gIGN1cnNvcjogcG9pbnRlcjtcbn1cblxuLmRpdG8tY2FsZW5kYXItaGVhZGVyIHNwYW4ge1xuICBjdXJzb3I6IGRlZmF1bHQ7XG5cbiAgYSB7XG4gICAgcGFkZGluZzogMCAwLjJlbTtcbiAgfVxufVxuXG4uZGl0by1jYWxlbmRhci1kYXRlcyBzcGFuOmhvdmVyLFxuLmRpdG8tY2FsZW5kYXItbW9udGhzIHNwYW46aG92ZXIsXG4uZGl0by1jYWxlbmRhci15ZWFycyBzcGFuOmhvdmVyLFxuLmRpdG8tY2FsZW5kYXI6bm90KDpob3ZlcikgLmRpdG8tY2FsZW5kYXItaXRlbS1jdXJyZW50IHtcbiAgYmFja2dyb3VuZDogJGNvbG9yLWhpZ2hsaWdodDtcbn1cblxuLmRpdG8tY2FsZW5kYXItd2Vla2RheXMgc3BhbiB7XG4gIGZvbnQtd2VpZ2h0OiBib2xkO1xuICBAaW5jbHVkZSB1c2VyLXNlbGVjdChub25lKTtcbn1cblxuLmRpdG8tY2FsZW5kYXItaGVhZGVyLFxuLmRpdG8tY2FsZW5kYXItZm9vdGVyIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIGhlaWdodDogJGlucHV0LWhlaWdodDtcbiAgbGluZS1oZWlnaHQ6ICRpbnB1dC1oZWlnaHQ7XG59XG5cbi5kaXRvLWNhbGVuZGFyLWZvb3RlciB7XG4gIGJvcmRlci10b3A6ICRib3JkZXItc3R5bGU7XG59XG5cbi5kaXRvLWNhbGVuZGFyLWhlYWRlciB7XG4gIGZvbnQtd2VpZ2h0OiBib2xkO1xuICBib3JkZXItYm90dG9tOiAkYm9yZGVyLXN0eWxlO1xuICBkaXNwbGF5OiBmbGV4O1xuXG4gID4gc3BhbiB7XG4gICAgbWFyZ2luOiBhdXRvO1xuICAgIHBhZGRpbmc6IDAgMC41ZW07XG4gIH1cblxuICBhIHtcbiAgICBmb250LXdlaWdodDogYm9sZDtcblxuICAgICY6aG92ZXIge1xuICAgICAgY29sb3I6ICRjb2xvci1hY3RpdmU7XG4gICAgfVxuICB9XG59XG5cbi5kaXRvLWNhbGVuZGFyLXN0ZXAtcHJldixcbi5kaXRvLWNhbGVuZGFyLXN0ZXAtbmV4dCB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgd2lkdGg6IDUlO1xuICBtaW4td2lkdGg6IDJlbTtcbiAgbWF4LXdpZHRoOiAzZW07XG5cbiAgJjo6YWZ0ZXIge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICBsZWZ0OiAwO1xuICAgIHJpZ2h0OiAwO1xuICAgIGZvbnQtc2l6ZTogMS4yNWVtO1xuICB9XG59XG5cbi5kaXRvLWNhbGVuZGFyLXN0ZXAtcHJldiB7XG4gICY6OmFmdGVyIHtcbiAgICBjb250ZW50OiAn4oC5JztcbiAgfVxuXG4gICYuZGl0by1jYWxlbmRhci1zdGVwLXllYXI6OmFmdGVyIHtcbiAgICBjb250ZW50OiAnwqsnO1xuICB9XG59XG5cbi5kaXRvLWNhbGVuZGFyLXN0ZXAtbmV4dCB7XG4gICY6OmFmdGVyIHtcbiAgICBjb250ZW50OiAn4oC6JztcbiAgfVxuXG4gICYuZGl0by1jYWxlbmRhci1zdGVwLXllYXI6OmFmdGVyIHtcbiAgICBjb250ZW50OiAnwrsnO1xuICB9XG59XG5cbi5kaXRvLWNhbGVuZGFyLXNlbGVjdC1ub3cge1xuICAmOjphZnRlciB7XG4gICAgY29udGVudDogJ05vdyc7XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCJpbXBvcnQgeyBhc0FycmF5IH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuZXhwb3J0IGZ1bmN0aW9uIGFkZEV2ZW50cyh0YXJnZXRzLCBldmVudHMpIHtcbiAgdGFyZ2V0cyA9XG4gICAgdGFyZ2V0cyBpbnN0YW5jZW9mIE5vZGVMaXN0XG4gICAgICA/IEFycmF5LmZyb20odGFyZ2V0cylcbiAgICAgIDogYXNBcnJheSh0YXJnZXRzKVxuXG4gIGZvciAoY29uc3QgW3R5cGUsIGhhbmRsZXJdIG9mIE9iamVjdC5lbnRyaWVzKGV2ZW50cykpIHtcbiAgICBmb3IgKGNvbnN0IHRhcmdldCBvZiB0YXJnZXRzKSB7XG4gICAgICB0YXJnZXQuYWRkRXZlbnRMaXN0ZW5lcih0eXBlLCBoYW5kbGVyLCBmYWxzZSlcbiAgICB9XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHJlbW92ZSgpIHtcbiAgICAgIGZvciAoY29uc3QgW3R5cGUsIGhhbmRsZXJdIG9mIE9iamVjdC5lbnRyaWVzKGV2ZW50cykpIHtcbiAgICAgICAgZm9yIChjb25zdCB0YXJnZXQgb2YgdGFyZ2V0cykge1xuICAgICAgICAgIHRhcmdldC5yZW1vdmVFdmVudExpc3RlbmVyKHR5cGUsIGhhbmRsZXIsIGZhbHNlKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb21iaW5lRXZlbnRzKC4uLmV2ZW50cykge1xuICByZXR1cm4ge1xuICAgIHJlbW92ZSgpIHtcbiAgICAgIGZvciAoY29uc3QgZXZlbnQgb2YgZXZlbnRzKSB7XG4gICAgICAgIGV2ZW50LnJlbW92ZSgpXG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRLZXkoZXZlbnQpIHtcbiAgcmV0dXJuIHtcbiAgICAzNzogJ2xlZnQnLFxuICAgIDM4OiAndXAnLFxuICAgIDM5OiAncmlnaHQnLFxuICAgIDQwOiAnZG93bicsXG4gICAgMTM6ICdlbnRlcidcbiAgfVtldmVudD8ua2V5Q29kZV1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEtleU5hdmlnYXRpb24oZXZlbnQpIHtcbiAgY29uc3Qga2V5ID0gZ2V0S2V5KGV2ZW50KVxuICByZXR1cm4ge1xuICAgIGhvcjogeyBsZWZ0OiAtMSwgcmlnaHQ6IDEgfVtrZXldIHx8IDAsXG4gICAgdmVyOiB7IHVwOiAtMSwgZG93bjogMSB9W2tleV0gfHwgMCxcbiAgICBlbnRlcjoga2V5ID09PSAnZW50ZXInXG4gIH1cbn1cbiIsImltcG9ydCB7IGlzU3RyaW5nIH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuZXhwb3J0IGZ1bmN0aW9uIGdldFRhcmdldChjb21wb25lbnQpIHtcbiAgY29uc3QgdGFyZ2V0ID0gaXNTdHJpbmcoY29tcG9uZW50LnRhcmdldClcbiAgICA/IGNvbXBvbmVudC4kcmVmc1tjb21wb25lbnQudGFyZ2V0XVxuICAgIDogY29tcG9uZW50LnRhcmdldFxuICByZXR1cm4gdGFyZ2V0Py4kZWwgPz8gdGFyZ2V0XG59XG4iLCI8IS0tIERlcml2ZWQgZnJvbSBBVFVJLCBhbmQgZnVydGhlciBleHRlbmRlZDogaHR0cHM6Ly9hbGlxaW4uZ2l0aHViLmlvL2F0dWkvIC0tPlxuPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbi5kaXRvLXRyaWdnZXItY29udGFpbmVyXG4gIC5kaXRvLXRyaWdnZXIoXG4gICAgdi1pZj1cImFsd2F5c1Nob3dcIlxuICAgIHJlZj1cInRyaWdnZXJcIlxuICAgIDpjbGFzcz1cInRyaWdnZXJDbGFzc1wiXG4gIClcbiAgICBzbG90KG5hbWU9XCJ0cmlnZ2VyXCIpXG4gIC5kaXRvLXRyaWdnZXIoXG4gICAgdi1lbHNlLWlmPVwidHJpZ2dlciA9PT0gJ2NsaWNrJ1wiXG4gICAgcmVmPVwidHJpZ2dlclwiXG4gICAgOmNsYXNzPVwidHJpZ2dlckNsYXNzXCJcbiAgICBAY2xpY2s9XCJvbkNsaWNrXCJcbiAgKVxuICAgIHNsb3QobmFtZT1cInRyaWdnZXJcIilcbiAgLmRpdG8tdHJpZ2dlcihcbiAgICB2LWVsc2UtaWY9XCJ0cmlnZ2VyID09PSAnaG92ZXInXCJcbiAgICByZWY9XCJ0cmlnZ2VyXCJcbiAgICA6Y2xhc3M9XCJ0cmlnZ2VyQ2xhc3NcIlxuICAgIEBtb3VzZWVudGVyPVwib25Ib3Zlcih0cnVlKVwiXG4gICAgQG1vdXNlbGVhdmU9XCJvbkhvdmVyKGZhbHNlKVwiXG4gIClcbiAgICBzbG90KG5hbWU9XCJ0cmlnZ2VyXCIpXG4gIC5kaXRvLXRyaWdnZXIoXG4gICAgdi1lbHNlLWlmPVwidHJpZ2dlciA9PT0gJ2ZvY3VzJyB8fCB0cmlnZ2VyID09PSAnYWx3YXlzJ1wiXG4gICAgcmVmPVwidHJpZ2dlclwiXG4gICAgOmNsYXNzPVwidHJpZ2dlckNsYXNzXCJcbiAgKVxuICAgIHNsb3QobmFtZT1cInRyaWdnZXJcIilcbiAgVHJhbnNpdGlvbig6bmFtZT1cImBkaXRvLSR7dHJhbnNpdGlvbn1gXCIpXG4gICAgLmRpdG8tcG9wdXAoXG4gICAgICB2LWlmPVwidHJpZ2dlciA9PT0gJ2hvdmVyJ1wiXG4gICAgICB2LXNob3c9XCJzaG93UG9wdXBcIlxuICAgICAgcmVmPVwicG9wdXBcIlxuICAgICAgOmNsYXNzPVwicG9wdXBDbGFzc1wiXG4gICAgICA6c3R5bGU9XCJwb3B1cFN0eWxlXCJcbiAgICAgIEBtb3VzZWVudGVyPVwib25Ib3Zlcih0cnVlKVwiXG4gICAgICBAbW91c2VsZWF2ZT1cIm9uSG92ZXIoZmFsc2UpXCJcbiAgICApXG4gICAgICBzbG90KFxuICAgICAgICB2LWlmPVwic2hvd1BvcHVwXCJcbiAgICAgICAgbmFtZT1cInBvcHVwXCJcbiAgICAgIClcbiAgICAuZGl0by1wb3B1cChcbiAgICAgIHYtZWxzZVxuICAgICAgdi1zaG93PVwic2hvd1BvcHVwXCJcbiAgICAgIHJlZj1cInBvcHVwXCJcbiAgICAgIDpjbGFzcz1cInBvcHVwQ2xhc3NcIlxuICAgICAgOnN0eWxlPVwicG9wdXBTdHlsZVwiXG4gICAgKVxuICAgICAgc2xvdChcbiAgICAgICAgdi1pZj1cInNob3dQb3B1cFwiXG4gICAgICAgIG5hbWU9XCJwb3B1cFwiXG4gICAgICApXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IHsgaHlwaGVuYXRlIH0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCB7IGFkZEV2ZW50cywgY29tYmluZUV2ZW50cyB9IGZyb20gJy4uL3V0aWxzL2V2ZW50LmpzJ1xuaW1wb3J0IHsgZ2V0VGFyZ2V0IH0gZnJvbSAnLi4vdXRpbHMvdHJpZ2dlcidcblxuZXhwb3J0IGRlZmF1bHQge1xuICBlbWl0czogWyd1cGRhdGU6c2hvdyddLFxuXG4gIHByb3BzOiB7XG4gICAgdHJpZ2dlcjogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6ICdjbGljaycgfSxcbiAgICB0cmFuc2l0aW9uOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogJ3NsaWRlJyB9LFxuICAgIHBsYWNlbWVudDogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6ICdib3R0b20nIH0sXG4gICAgc2hvdzogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGRpc2FibGVkOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgdGFyZ2V0OiB7IHR5cGU6IFtTdHJpbmcsIEhUTUxFbGVtZW50XSwgZGVmYXVsdDogbnVsbCB9LFxuICAgIGN1c3RvbUNsYXNzOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogbnVsbCB9LFxuICAgIHpJbmRleDogeyB0eXBlOiBOdW1iZXIsIGRlZmF1bHQ6IDAgfSxcbiAgICBrZWVwSW5WaWV3OiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IHRydWUgfSxcbiAgICBoaWRlV2hlbkNsaWNrT3V0c2lkZTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiB0cnVlIH0sXG4gICAgYWx3YXlzU2hvdzogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGNvdmVyOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgaGlkZURlbGF5OiB7IHR5cGU6IE51bWJlciwgZGVmYXVsdDogMCB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgc2hvd1BvcHVwOiB0aGlzLnNob3csXG4gICAgICBwb3B1cFBsYWNlbWVudDogdGhpcy5wbGFjZW1lbnQsXG4gICAgICBmb2N1c0V2ZW50czogbnVsbCxcbiAgICAgIGNsb3NlRXZlbnRzOiBudWxsLFxuICAgICAgcG9wdXBFdmVudHM6IG51bGwsXG4gICAgICBibHVyVGltZXI6IG51bGwsXG4gICAgICBtb3VzZUxlYXZlVGltZXI6IG51bGxcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICB0cmlnZ2VyQ2xhc3MoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAnZGl0by10cmlnZ2VyLWRpc2FibGVkJzogdGhpcy5kaXNhYmxlZFxuICAgICAgfVxuICAgIH0sXG5cbiAgICBwb3B1cENsYXNzKCkge1xuICAgICAgY29uc3QgY2xhc3NlcyA9IHtcbiAgICAgICAgW2BkaXRvLXBvcHVwLSR7aHlwaGVuYXRlKHRoaXMucGxhY2VtZW50KX1gXTogdHJ1ZVxuICAgICAgfVxuICAgICAgaWYgKHRoaXMuY3VzdG9tQ2xhc3MpIHtcbiAgICAgICAgY2xhc3Nlc1t0aGlzLmN1c3RvbUNsYXNzXSA9IHRydWVcbiAgICAgIH1cbiAgICAgIHJldHVybiBjbGFzc2VzXG4gICAgfSxcblxuICAgIHBvcHVwU3R5bGUoKSB7XG4gICAgICByZXR1cm4gdGhpcy56SW5kZXggPyBgei1pbmRleDogJHt0aGlzLnpJbmRleH1gIDogJydcbiAgICB9LFxuXG4gICAgdHJpZ2dlclRhcmdldCgpIHtcbiAgICAgIHJldHVybiBnZXRUYXJnZXQodGhpcylcbiAgICB9XG4gIH0sXG5cbiAgd2F0Y2g6IHtcbiAgICBzaG93KHNob3cpIHtcbiAgICAgIHRoaXMuc2hvd1BvcHVwID0gc2hvdyB8fCB0aGlzLmFsd2F5c1Nob3dcbiAgICB9LFxuXG4gICAgc2hvd1BvcHVwKHRvLCBmcm9tKSB7XG4gICAgICBpZiAodG8gXiBmcm9tKSB7XG4gICAgICAgIHRoaXMuJGVtaXQoJ3VwZGF0ZTpzaG93JywgdG8pXG4gICAgICAgIHRoaXMuJG5leHRUaWNrKCgpID0+IHRoaXMub25TaG93UG9wdXAodG8pKVxuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBtb3VudGVkKCkge1xuICAgIGNvbnN0IHsgdHJpZ2dlciwgcG9wdXAgfSA9IHRoaXMuJHJlZnNcbiAgICBpZiAodGhpcy50cmlnZ2VyID09PSAnZm9jdXMnKSB7XG4gICAgICB0aGlzLmZvY3VzRXZlbnRzID0gdGhpcy5hZGRGb2N1c0V2ZW50cyh0aGlzLnRyaWdnZXJUYXJnZXQgPz8gdHJpZ2dlcilcbiAgICB9XG5cbiAgICBpZiAodGhpcy5oaWRlV2hlbkNsaWNrT3V0c2lkZSAmJiAhdGhpcy5hbHdheXNTaG93KSB7XG4gICAgICAvLyBVc2UgJ21vdXNldXAnIGluc3RlYWQgb2YgJ2NsaWNrJywgc2luY2UgY2xpY2sgYXBwZWFycyB0byBoYXBwZW4gYWZ0ZXJcbiAgICAgIC8vIHRoZSBET00gaW5zaWRlIG9mIHBvcHVwcyBjb3VsZCBjaGFuZ2UgaW4gYSB3YXkgc28gdGhhdCB0aGUgY2hlY2tcbiAgICAgIC8vIGBwb3B1cC5jb250YWlucyhldmVudC50YXJnZXQpYCB3b3VsZCBmYWlsOlxuICAgICAgdGhpcy5jbG9zZUV2ZW50cyA9IGFkZEV2ZW50cyh3aW5kb3csIHtcbiAgICAgICAgbW91c2V1cDogZXZlbnQgPT4ge1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIHRoaXMuc2hvd1BvcHVwICYmXG4gICAgICAgICAgICAhcG9wdXAuY29udGFpbnMoZXZlbnQudGFyZ2V0KSAmJlxuICAgICAgICAgICAgIXRyaWdnZXIuY29udGFpbnMoZXZlbnQudGFyZ2V0KSAmJlxuICAgICAgICAgICAgIXRoaXMudHJpZ2dlclRhcmdldD8uY29udGFpbnMoZXZlbnQudGFyZ2V0KVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgdGhpcy5zaG93UG9wdXAgPSBmYWxzZVxuICAgICAgICAgIH1cbiAgICAgICAgfSxcblxuICAgICAgICBibHVyOiAoKSA9PiB7XG4gICAgICAgICAgdGhpcy5zaG93UG9wdXAgPSBmYWxzZVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH1cblxuICAgIGlmICh0aGlzLmFsd2F5c1Nob3cpIHtcbiAgICAgIHRoaXMuc2hvd1BvcHVwID0gdHJ1ZVxuICAgIH1cbiAgfSxcblxuICBjcmVhdGVkKCkge1xuICAgIHRoaXMuc2hvd1BvcHVwID0gdGhpcy5zaG93XG4gIH0sXG5cbiAgdW5tb3VudGVkKCkge1xuICAgIHRoaXMuZm9jdXNFdmVudHM/LnJlbW92ZSgpXG4gICAgdGhpcy5jbG9zZUV2ZW50cz8ucmVtb3ZlKClcbiAgICB0aGlzLnBvcHVwRXZlbnRzPy5yZW1vdmUoKVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICB1cGRhdGVQb3NpdGlvbigpIHtcbiAgICAgIGNvbnN0IHsgdHJpZ2dlciwgcG9wdXAgfSA9IHRoaXMuJHJlZnNcbiAgICAgIGlmICh0aGlzLnNob3cgJiYgcG9wdXAub2Zmc2V0V2lkdGggPT09IDApIHtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLnVwZGF0ZVBvc2l0aW9uKCksIDApXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBjb25zdCB0YXJnZXQgPSB0aGlzLnRyaWdnZXJUYXJnZXQgPz8gdHJpZ2dlclxuICAgICAgLy8gQWN0dWFsbHkgcmVzaXplIHRoZSBwb3B1cCdzIGZpcnN0IGNoaWxkLCBzbyB0aGV5IGNhbiBzZXQgc2l6ZSBsaW1pdHMuXG4gICAgICBjb25zdCBlbCA9IHRoaXMudGFyZ2V0ID09PSAncG9wdXAnID8gdHJpZ2dlciA6IHBvcHVwLmZpcnN0RWxlbWVudENoaWxkXG4gICAgICBpZiAoZWwpIHtcbiAgICAgICAgZWwuc3R5bGUud2lkdGggPSBnZXRDb21wdXRlZFN0eWxlKHRhcmdldCkud2lkdGhcbiAgICAgIH1cblxuICAgICAgY29uc3QgYm91bmRzID0gdGFyZ2V0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpXG4gICAgICBjb25zdCB0cmlnZ2VyTGVmdCA9IGJvdW5kcy5sZWZ0ICsgd2luZG93LnNjcm9sbFhcbiAgICAgIGNvbnN0IHRyaWdnZXJUb3AgPSBib3VuZHMudG9wICsgd2luZG93LnNjcm9sbFlcbiAgICAgIGNvbnN0IHRyaWdnZXJXaWR0aCA9IGJvdW5kcy53aWR0aFxuICAgICAgY29uc3QgdHJpZ2dlckhlaWdodCA9IGJvdW5kcy5oZWlnaHRcbiAgICAgIGNvbnN0IHBvcHVwV2lkdGggPSBwb3B1cC5vZmZzZXRXaWR0aFxuICAgICAgY29uc3QgcG9wdXBIZWlnaHQgPSBwb3B1cC5vZmZzZXRIZWlnaHRcblxuICAgICAgbGV0IFtwYXJ0MSwgcGFydDJdID0gdGhpcy5wb3B1cFBsYWNlbWVudC5zcGxpdCgnLScpIHx8IFtdXG4gICAgICBpZiAodGhpcy5rZWVwSW5WaWV3KSB7XG4gICAgICAgIGNvbnN0IHdpbldpZHRoID0gd2luZG93LmlubmVyV2lkdGhcbiAgICAgICAgY29uc3Qgd2luSGVpZ2h0ID0gd2luZG93LmlubmVySGVpZ2h0XG4gICAgICAgIGlmIChwYXJ0MSA9PT0gJ3RvcCcpIHtcbiAgICAgICAgICBpZiAodHJpZ2dlclRvcCA8IHBvcHVwSGVpZ2h0KSB7XG4gICAgICAgICAgICBwYXJ0MSA9ICdib3R0b20nXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHBhcnQxID09PSAnYm90dG9tJykge1xuICAgICAgICAgIGlmICh3aW5IZWlnaHQgLSB0cmlnZ2VyVG9wIC0gdHJpZ2dlckhlaWdodCA8IHBvcHVwSGVpZ2h0KSB7XG4gICAgICAgICAgICBwYXJ0MSA9ICd0b3AnXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHBhcnQxID09PSAnbGVmdCcpIHtcbiAgICAgICAgICBpZiAodHJpZ2dlckxlZnQgPCBwb3B1cFdpZHRoKSB7XG4gICAgICAgICAgICBwYXJ0MSA9ICdyaWdodCdcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAocGFydDEgPT09ICdyaWdodCcpIHtcbiAgICAgICAgICBpZiAod2luV2lkdGggLSB0cmlnZ2VyTGVmdCAtIHRyaWdnZXJXaWR0aCA8IHBvcHVwV2lkdGgpIHtcbiAgICAgICAgICAgIHBhcnQxID0gJ2xlZnQnXG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHBhcnQyID09PSAndG9wJykge1xuICAgICAgICAgIGlmICh3aW5IZWlnaHQgLSB0cmlnZ2VyVG9wIDwgcG9wdXBIZWlnaHQpIHtcbiAgICAgICAgICAgIHBhcnQyID0gJ2JvdHRvbSdcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAocGFydDIgPT09ICdib3R0b20nKSB7XG4gICAgICAgICAgaWYgKHRyaWdnZXJUb3AgKyB0cmlnZ2VySGVpZ2h0IDwgcG9wdXBIZWlnaHQpIHtcbiAgICAgICAgICAgIHBhcnQyID0gJ3RvcCdcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAocGFydDIgPT09ICdsZWZ0Jykge1xuICAgICAgICAgIGlmICh3aW5XaWR0aCAtIHRyaWdnZXJMZWZ0IDwgcG9wdXBXaWR0aCkge1xuICAgICAgICAgICAgcGFydDIgPSAncmlnaHQnXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHBhcnQyID09PSAncmlnaHQnKSB7XG4gICAgICAgICAgaWYgKHRyaWdnZXJMZWZ0ICsgdHJpZ2dlcldpZHRoIDwgcG9wdXBXaWR0aCkge1xuICAgICAgICAgICAgcGFydDIgPSAnbGVmdCdcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgbGV0IGxlZnQgPSAwXG4gICAgICBsZXQgdG9wID0gMFxuICAgICAgc3dpdGNoIChwYXJ0MSkge1xuICAgICAgICBjYXNlICd0b3AnOlxuICAgICAgICAgIHRvcCAtPSBwb3B1cEhlaWdodFxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgJ2xlZnQnOlxuICAgICAgICAgIGxlZnQgLT0gcG9wdXBXaWR0aFxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgJ3JpZ2h0JzpcbiAgICAgICAgICBsZWZ0ICs9IHRyaWdnZXJXaWR0aFxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgJ2JvdHRvbSc6XG4gICAgICAgICAgdG9wICs9IHRyaWdnZXJIZWlnaHRcbiAgICAgICAgICBicmVha1xuICAgICAgfVxuICAgICAgc3dpdGNoIChwYXJ0Mikge1xuICAgICAgICBjYXNlICdyaWdodCc6XG4gICAgICAgICAgbGVmdCAtPSBwb3B1cFdpZHRoIC0gdHJpZ2dlcldpZHRoXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAnYm90dG9tJzpcbiAgICAgICAgICB0b3AgLT0gcG9wdXBIZWlnaHQgLSB0cmlnZ2VySGVpZ2h0XG4gICAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmNvdmVyKSB7XG4gICAgICAgIGlmIChwYXJ0MSA9PT0gJ3RvcCcpIHtcbiAgICAgICAgICB0b3AgKz0gdHJpZ2dlckhlaWdodFxuICAgICAgICB9IGVsc2UgaWYgKHBhcnQxID09PSAnYm90dG9tJykge1xuICAgICAgICAgIHRvcCAtPSB0cmlnZ2VySGVpZ2h0XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICh0YXJnZXQgIT09IHRyaWdnZXIpIHtcbiAgICAgICAgY29uc3QgdHJpZ2dlckJvdW5kcyA9IHRyaWdnZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KClcbiAgICAgICAgbGVmdCArPSB0cmlnZ2VyTGVmdCAtIHRyaWdnZXJCb3VuZHMubGVmdFxuICAgICAgICB0b3AgKz0gdHJpZ2dlclRvcCAtIHRyaWdnZXJCb3VuZHMudG9wXG4gICAgICB9XG4gICAgICBwb3B1cC5zdHlsZS5sZWZ0ID0gYCR7bGVmdH1weGBcbiAgICAgIHBvcHVwLnN0eWxlLnRvcCA9IGAke3RvcH1weGBcbiAgICB9LFxuXG4gICAgYWRkRm9jdXNFdmVudHMocGFyZW50KSB7XG4gICAgICBjb25zdCB0YXJnZXRzID0gcGFyZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2lucHV0LCB0ZXh0YXJlYScpXG4gICAgICBsZXQgaW5wdXRcblxuICAgICAgcmV0dXJuIGNvbWJpbmVFdmVudHMoXG4gICAgICAgIGFkZEV2ZW50cyh0YXJnZXRzLCB7XG4gICAgICAgICAgZm9jdXM6ICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc2hvd1BvcHVwID0gdHJ1ZVxuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuYmx1clRpbWVyKVxuICAgICAgICAgIH0sXG5cbiAgICAgICAgICBibHVyOiAoKSA9PiB7XG4gICAgICAgICAgICAvLyBVc2UgdGltZW91dCB0byBhbGxvdyBjbGlja2VkIGlucHV0cyB0byBncmFiIGZvY3VzXG4gICAgICAgICAgICB0aGlzLmJsdXJUaW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICBpZiAoIXRoaXMuJHJlZnMucG9wdXAubWF0Y2hlcygnOmZvY3VzLXdpdGhpbicpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zaG93UG9wdXAgPSBmYWxzZVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCAwKVxuICAgICAgICAgIH1cbiAgICAgICAgfSksXG5cbiAgICAgICAgYWRkRXZlbnRzKHBhcmVudCwge1xuICAgICAgICAgIG1vdXNlZG93bjogZXZlbnQgPT4ge1xuICAgICAgICAgICAgaWYgKCFldmVudC50YXJnZXQubWF0Y2hlcygnaW5wdXQsIHRleHRhcmVhLCBidXR0b24nKSkge1xuICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpXG4gICAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIWV2ZW50LnRhcmdldC5tYXRjaGVzKCcuZGl0by1idXR0b24tY2xlYXInKSkge1xuICAgICAgICAgICAgICBjb25zdCB0cmlnZ2VyID0gdGhpcy50cmlnZ2VyVGFyZ2V0ID8/IHRoaXMuJHJlZnMudHJpZ2dlclxuICAgICAgICAgICAgICAvLyBNYXJrIHRyaWdnZXIgaW5wdXQgYXMgcmVhZG9ubHkgc28gaXQgY2FuJ3QgbG9vc2UgZm9jdXMgd2hpbGVcbiAgICAgICAgICAgICAgLy8gdXNlciBkb2VzIG90aGVyIG1vdXNlLWFjdGl2aXRpZXMgaW4gcG9wdXAuXG4gICAgICAgICAgICAgIGlucHV0ID0gdHJpZ2dlci5xdWVyeVNlbGVjdG9yKCdpbnB1dCwgdGV4dGFyZWEnKVxuICAgICAgICAgICAgICBpZiAoaW5wdXQgJiYgIWlucHV0Lmhhc0F0dHJpYnV0ZSgncmVhZG9ubHknKSkge1xuICAgICAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgncmVhZG9ubHknLCAndHJ1ZScpXG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaW5wdXQgPSBudWxsXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuXG4gICAgICAgICAgbW91c2V1cDogZXZlbnQgPT4ge1xuICAgICAgICAgICAgaWYgKGlucHV0KSB7XG4gICAgICAgICAgICAgIC8vIEdpdmUgc29tZSB0aW1lIGZvciBvdGhlciBldmVudHMgdG8gdXBkYXRlIGlucHV0IGJlZm9yZSBpdFxuICAgICAgICAgICAgICAvLyBiZWNvbWVzIGVkaXRhYmxlIGFuZCBzdGlsbCBmb2N1c2VkIGFnYWluLlxuICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICBpbnB1dC5yZW1vdmVBdHRyaWJ1dGUoJ3JlYWRvbmx5JylcbiAgICAgICAgICAgICAgICBpZiAoIWV2ZW50LnRhcmdldC5tYXRjaGVzKCdpbnB1dCwgdGV4dGFyZWEsIGJ1dHRvbicpKSB7XG4gICAgICAgICAgICAgICAgICBpbnB1dC5mb2N1cygpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlucHV0ID0gbnVsbFxuICAgICAgICAgICAgICB9LCAwKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgIClcbiAgICB9LFxuXG4gICAgb25TaG93UG9wdXAoc2hvdykge1xuICAgICAgaWYgKHNob3cpIHtcbiAgICAgICAgaWYgKHRoaXMudHJpZ2dlciA9PT0gJ2ZvY3VzJykge1xuICAgICAgICAgIHRoaXMucG9wdXBFdmVudHMgPSB0aGlzLmFkZEZvY3VzRXZlbnRzKHRoaXMuJHJlZnMucG9wdXApXG4gICAgICAgIH1cbiAgICAgICAgdGhpcy51cGRhdGVQb3NpdGlvbigpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnBvcHVwRXZlbnRzPy5yZW1vdmUoKVxuICAgICAgICB0aGlzLnBvcHVwRXZlbnRzID0gbnVsbFxuICAgICAgfVxuICAgIH0sXG5cbiAgICBvbkNsaWNrKCkge1xuICAgICAgaWYgKCF0aGlzLmRpc2FibGVkKSB7XG4gICAgICAgIHRoaXMuc2hvd1BvcHVwID0gdHJ1ZVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBvbkhvdmVyKGVudGVyKSB7XG4gICAgICBpZiAoIXRoaXMuZGlzYWJsZWQpIHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMubW91c2VMZWF2ZVRpbWVyKVxuICAgICAgICBpZiAoZW50ZXIpIHtcbiAgICAgICAgICB0aGlzLnNob3dQb3B1cCA9IHRydWVcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAodGhpcy5oaWRlRGVsYXkpIHtcbiAgICAgICAgICAgIHRoaXMubW91c2VMZWF2ZVRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMuc2hvd1BvcHVwID0gZmFsc2VcbiAgICAgICAgICAgIH0sIHRoaXMuaGlkZURlbGF5KVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnNob3dQb3B1cCA9IGZhbHNlXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuQGltcG9ydCAnLi4vc3R5bGVzL3RyYW5zaXRpb25zL2luZGV4LnNjc3MnO1xuXG4uZGl0by10cmlnZ2VyLWNvbnRhaW5lciB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbn1cblxuLmRpdG8tdHJpZ2dlci1kaXNhYmxlZCB7XG4gIGNvbG9yOiAkY29sb3ItZGlzYWJsZWQ7XG4gIGJvcmRlci1jb2xvcjogJGJvcmRlci1jb2xvcjtcbiAgY3Vyc29yOiBkZWZhdWx0O1xuXG4gICoge1xuICAgIGN1cnNvcjogZGVmYXVsdCAhaW1wb3J0YW50O1xuICAgIEBpbmNsdWRlIHVzZXItc2VsZWN0KG5vbmUpO1xuXG4gICAgJjpmb2N1cyB7XG4gICAgICBib3gtc2hhZG93OiBub25lO1xuICAgIH1cbiAgfVxufVxuXG4uZGl0by1wb3B1cCB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgdG9wOiAwO1xuICBsZWZ0OiAwO1xuICB6LWluZGV4OiAkei1pbmRleC1wb3B1cDtcbn1cbjwvc3R5bGU+XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuLmRpdG8taW5wdXQoOmNsYXNzPVwiY2xhc3Nlc1wiKVxuICBzbG90KG5hbWU9XCJiZWZvcmVcIilcbiAgaW5wdXQoXG4gICAgOmlkPVwiaWRcIlxuICAgIHJlZj1cImlucHV0XCJcbiAgICB2LW1vZGVsPVwiY3VycmVudFZhbHVlXCJcbiAgICA6dHlwZT1cInR5cGVcIlxuICAgIDpuYW1lPVwibmFtZVwiXG4gICAgOnRpdGxlPVwidGl0bGVcIlxuICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICA6cmVhZG9ubHk9XCJyZWFkb25seVwiXG4gICAgOmF1dG9mb2N1cz1cImF1dG9mb2N1c1wiXG4gICAgOnBsYWNlaG9sZGVyPVwicGxhY2Vob2xkZXJcIlxuICAgIDphdXRvY29tcGxldGU9XCJhdXRvY29tcGxldGVcIlxuICAgIDphcmlhLWxhYmVsPVwidGl0bGVcIlxuICAgIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICApXG4gIHNsb3QobmFtZT1cImFmdGVyXCIpXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuZXhwb3J0IGRlZmF1bHQge1xuICBlbWl0czogWyd1cGRhdGU6bW9kZWxWYWx1ZSddLFxuICBpbmhlcml0QXR0cnM6IGZhbHNlLFxuXG4gIHByb3BzOiB7XG4gICAgbW9kZWxWYWx1ZTogeyB0eXBlOiBbU3RyaW5nLCBOdW1iZXJdLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgdHlwZTogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6ICd0ZXh0JyB9LFxuICAgIGlkOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogbnVsbCB9LFxuICAgIG5hbWU6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgdGl0bGU6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgZGlzYWJsZWQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICByZWFkb25seTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGF1dG9mb2N1czogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIHBsYWNlaG9sZGVyOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogbnVsbCB9LFxuICAgIGF1dG9jb21wbGV0ZTogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6ICdvZmYnIH1cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBjdXJyZW50VmFsdWU6IHRoaXMubW9kZWxWYWx1ZSxcbiAgICAgIGhvdmVyaW5nOiBmYWxzZSxcbiAgICAgIGZvY3VzZWQ6IGZhbHNlXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgY2xhc3NlcygpIHtcbiAgICAgIHJldHVybiB0aGlzLiRhdHRycy5jbGFzc1xuICAgIH0sXG5cbiAgICBhdHRyaWJ1dGVzKCkge1xuICAgICAgY29uc3QgeyBjbGFzczogXywgLi4uYXR0cmlidXRlcyB9ID0gdGhpcy4kYXR0cnNcbiAgICAgIHJldHVybiBhdHRyaWJ1dGVzXG4gICAgfSxcblxuICAgIGlucHV0KCkge1xuICAgICAgcmV0dXJuIHRoaXMuJHJlZnMuaW5wdXRcbiAgICB9LFxuXG4gICAgc2l6ZSgpIHtcbiAgICAgIC8vIERldGVybWluZSBzaXplIGJhc2VkIG9uIG1pbiAmIG1heCBzZXR0aW5ncywgaWYgdGhleSdyZSBwcm92aWRlZC5cbiAgICAgIGNvbnN0IHsgc2l6ZSwgbWluLCBtYXggfSA9IHRoaXMuJGF0dHJzXG4gICAgICBjb25zdCBnZXRMZW5ndGggPSB2YWx1ZSA9PiAodmFsdWUgIT0gbnVsbCA/IGAke3ZhbHVlfWAubGVuZ3RoIDogMClcbiAgICAgIHJldHVybiBzaXplIHx8IGdldExlbmd0aChtaW4pIHx8IGdldExlbmd0aChtYXgpIHx8IHVuZGVmaW5lZFxuICAgIH1cbiAgfSxcblxuICB3YXRjaDoge1xuICAgIG1vZGVsVmFsdWUodG8sIGZyb20pIHtcbiAgICAgIGlmICh0byAhPT0gZnJvbSkge1xuICAgICAgICB0aGlzLmN1cnJlbnRWYWx1ZSA9IHRvXG4gICAgICB9XG4gICAgfSxcblxuICAgIGN1cnJlbnRWYWx1ZShjdXJyZW50VmFsdWUpIHtcbiAgICAgIGlmIChjdXJyZW50VmFsdWUgIT09IHRoaXMubW9kZWxWYWx1ZSkge1xuICAgICAgICB0aGlzLiRlbWl0KCd1cGRhdGU6bW9kZWxWYWx1ZScsIGN1cnJlbnRWYWx1ZSlcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGZvY3VzKCkge1xuICAgICAgdGhpcy5pbnB1dC5mb2N1cygpXG4gICAgfSxcblxuICAgIGJsdXIoKSB7XG4gICAgICB0aGlzLmlucHV0LmJsdXIoKVxuICAgIH1cbiAgfVxufVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLmRpdG8taW5wdXQge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG5cbiAgQGV4dGVuZCAlaW5wdXQ7XG5cbiAgaW5wdXQge1xuICAgIC8vIEluaGVyaXQgYWxsIHN0eWxpbmcgZnJvbSAuZGl0by1pbnB1dFxuICAgIGFsbDogaW5oZXJpdDtcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgYm9yZGVyOiAwO1xuICAgIG1hcmdpbjogMDtcbiAgICBwYWRkaW5nOiAwO1xuICB9XG59XG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbmkuZGl0by1pY29uKFxuICA6Y2xhc3M9YHtcbiAgICBbJ2RpdG8taWNvbi0tJyArIG5hbWVdOiB0cnVlLFxuICAgICdkaXRvLWljb24tLWRpc2FibGVkJzogZGlzYWJsZWRcbiAgfWBcbilcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5leHBvcnQgZGVmYXVsdCB7XG4gIHByb3BzOiB7XG4gICAgbmFtZToge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgcmVxdWlyZWQ6IHRydWVcbiAgICB9LFxuICAgIGRpc2FibGVkOiB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9XG4gIH1cbn1cbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5cbi8vIGB5YXJuIGJ1aWxkOmljb25zYCBjb252ZXJ0cyB0aGUgaWNvbiBTVkcgZmlsZXMgdG8gc2lsZW50IGNsYXNzZXMgaW5zaWRlXG4vLyBgc3JjL3N0eWxlcy9taXhpbnMvX2ljb25zLnNjc3NgLCBtYWtpbmcgdGhlbSBhdmFpbGFibGUgdG8gYWxsIG90aGVyIHNhc3Ncbi8vIGNvZGUgdGhyb3VnaCBgX2ltcG9ydHNgLlxuLy8gSW4gb3JkZXIgdG8gYmUgYWJsZSB0byB1c2UgdGhlbSBhcyBub3JtYWwgQ1NTIGNsYXNzZXMsIGNvbnZlcnQgdGhlbSBoZXJlOlxuQGVhY2ggJG5hbWUgaW4gJGljb25zIHtcbiAgLmRpdG8taWNvbi0tI3skbmFtZX0ge1xuICAgICY6OmFmdGVyIHtcbiAgICAgIEBleHRlbmQgJWljb24tI3skbmFtZX07XG5cbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB9XG4gIH1cbn1cblxuLmRpdG8taWNvbiB7XG4gIEBhdC1yb290IC5kaXRvLWlucHV0ICYge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICBpbnNldDogJGJvcmRlci13aWR0aDtcbiAgICBsZWZ0OiB1bnNldDtcbiAgICB3aWR0aDogMmVtO1xuICAgIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgICBib3JkZXItcmFkaXVzOiAkYm9yZGVyLXJhZGl1cztcbiAgICBjb2xvcjogJGNvbG9yLWdyZXk7XG4gICAgYmFja2dyb3VuZDogJGNvbG9yLXdoaXRlO1xuXG4gICAgJi0tZGlzYWJsZWQge1xuICAgICAgY29sb3I6ICRjb2xvci1saWdodDtcbiAgICB9XG4gIH1cblxuICBAYXQtcm9vdCAuZGl0by1pbnB1dDpmb2N1cy13aXRoaW4gJiB7XG4gICAgY29sb3I6ICRjb2xvci1hY3RpdmU7XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCJleHBvcnQgZnVuY3Rpb24gc2V0U2VsZWN0aW9uKGlucHV0LCB7IHN0YXJ0LCBlbmQgfSkge1xuICBpZiAoaW5wdXQ/LnNldFNlbGVjdGlvblJhbmdlKSB7XG4gICAgaW5wdXQuZm9jdXMoKVxuICAgIGlucHV0LnNldFNlbGVjdGlvblJhbmdlKHN0YXJ0LCBlbmQpXG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFNlbGVjdGlvbihpbnB1dCkge1xuICByZXR1cm4gaW5wdXQgJiYgJ3NlbGVjdGlvblN0YXJ0JyBpbiBpbnB1dFxuICAgID8geyBzdGFydDogaW5wdXQuc2VsZWN0aW9uU3RhcnQsIGVuZDogaW5wdXQuc2VsZWN0aW9uRW5kIH1cbiAgICA6IG51bGxcbn1cbiIsIjwhLS0gRGVyaXZlZCBmcm9tIEFUVUksIGFuZCBmdXJ0aGVyIGV4dGVuZGVkOiBodHRwczovL2FsaXFpbi5naXRodWIuaW8vYXR1aS8gLS0+XG48dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuVHJpZ2dlci5kaXRvLWRhdGUtcGlja2VyKFxuICByZWY9XCJ0cmlnZ2VyXCJcbiAgdi1tb2RlbDpzaG93PVwic2hvd1BvcHVwXCJcbiAgdHJpZ2dlcj1cImZvY3VzXCJcbiAgdi1iaW5kPVwieyB0cmFuc2l0aW9uLCBwbGFjZW1lbnQsIGRpc2FibGVkLCB0YXJnZXQgfVwiXG4pXG4gIHRlbXBsYXRlKCN0cmlnZ2VyKVxuICAgIHNsb3QoXG4gICAgICB2LWlmPVwiJHNsb3RzLnRyaWdnZXJcIlxuICAgICAgbmFtZT1cInRyaWdnZXJcIlxuICAgIClcbiAgICBJbnB1dEZpZWxkLmRpdG8tZGF0ZS1waWNrZXItaW5wdXQoXG4gICAgICB2LWVsc2VcbiAgICAgIHJlZj1cImlucHV0XCJcbiAgICAgIHYtbW9kZWw9XCJjdXJyZW50VGV4dFwiXG4gICAgICB0eXBlPVwidGV4dFwiXG4gICAgICA6Y2xhc3M9XCJ7ICdkaXRvLWZvY3VzJzogZm9jdXNlZCB9XCJcbiAgICAgIHYtYmluZD1cInsgcGxhY2Vob2xkZXIsIGRpc2FibGVkLCAuLi4kYXR0cnMgfVwiXG4gICAgICBAZm9jdXM9XCJvbkZvY3VzKHRydWUpXCJcbiAgICAgIEBibHVyPVwib25Gb2N1cyhmYWxzZSlcIlxuICAgICAgQGtleWRvd249XCJvbktleURvd25cIlxuICAgICAgQG1vdXNlZG93bi5zdG9wPVwib25Nb3VzZURvd24oZmFsc2UpXCJcbiAgICApXG4gICAgICB0ZW1wbGF0ZSgjYmVmb3JlKVxuICAgICAgICBzbG90KG5hbWU9XCJiZWZvcmVcIilcbiAgICAgIHRlbXBsYXRlKCNhZnRlcilcbiAgICAgICAgSWNvbihcbiAgICAgICAgICBuYW1lPVwiY2FsZW5kYXJcIlxuICAgICAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICAgICAgICBAbW91c2Vkb3duLnByZXZlbnQ9XCJvbk1vdXNlRG93bih0cnVlKVwiXG4gICAgICAgIClcbiAgICAgICAgc2xvdChuYW1lPVwiYWZ0ZXJcIilcbiAgdGVtcGxhdGUoI3BvcHVwKVxuICAgIENhbGVuZGFyLmRpdG8tZGF0ZS1waWNrZXItcG9wdXAoXG4gICAgICByZWY9XCJjYWxlbmRhclwiXG4gICAgICB2LW1vZGVsPVwiY3VycmVudFZhbHVlXCJcbiAgICAgIHYtYmluZD1cInsgbG9jYWxlLCBkaXNhYmxlZERhdGUgfVwiXG4gICAgICBAc2VsZWN0PVwic2hvd1BvcHVwID0gZmFsc2VcIlxuICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgeyBmb3JtYXQsIGRlZmF1bHRGb3JtYXRzIH0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCBUcmlnZ2VyIGZyb20gJy4vVHJpZ2dlci52dWUnXG5pbXBvcnQgQ2FsZW5kYXIgZnJvbSAnLi9DYWxlbmRhci52dWUnXG5pbXBvcnQgSW5wdXRGaWVsZCBmcm9tICcuL0lucHV0RmllbGQudnVlJ1xuaW1wb3J0IEljb24gZnJvbSAnLi9JY29uLnZ1ZSdcbmltcG9ydCB7IHBhcnNlRGF0ZSwgZ2V0RGF0ZVBhcnRBdFBvc2l0aW9uIH0gZnJvbSAnLi4vdXRpbHMvZGF0ZS5qcydcbmltcG9ydCB7IGdldFNlbGVjdGlvbiwgc2V0U2VsZWN0aW9uIH0gZnJvbSAnLi4vdXRpbHMvc2VsZWN0aW9uLmpzJ1xuaW1wb3J0IHsgZ2V0S2V5TmF2aWdhdGlvbiB9IGZyb20gJy4uL3V0aWxzL2V2ZW50LmpzJ1xuaW1wb3J0IHsgZ2V0VGFyZ2V0IH0gZnJvbSAnLi4vdXRpbHMvdHJpZ2dlci5qcydcblxuZXhwb3J0IGRlZmF1bHQge1xuICBjb21wb25lbnRzOiB7IFRyaWdnZXIsIENhbGVuZGFyLCBJbnB1dEZpZWxkLCBJY29uIH0sXG4gIGVtaXRzOiBbJ3VwZGF0ZTptb2RlbFZhbHVlJywgJ3VwZGF0ZTpzaG93JywgJ2NoYW5nZScsICdmb2N1cycsICdibHVyJ10sXG4gIGluaGVyaXRBdHRyczogZmFsc2UsXG5cbiAgcHJvcHM6IHtcbiAgICBtb2RlbFZhbHVlOiB7IHR5cGU6IERhdGUsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICB0cmFuc2l0aW9uOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogJ3NsaWRlJyB9LFxuICAgIHBsYWNlbWVudDogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6ICdib3R0b20tbGVmdCcgfSxcbiAgICBwbGFjZWhvbGRlcjogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBzaG93OiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgZGlzYWJsZWQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICB0YXJnZXQ6IHsgdHlwZTogW1N0cmluZywgSFRNTEVsZW1lbnRdLCBkZWZhdWx0OiAndHJpZ2dlcicgfSxcbiAgICBsb2NhbGU6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiAnZW4tVVMnIH0sXG4gICAgZm9ybWF0OiB7XG4gICAgICB0eXBlOiBPYmplY3QsXG4gICAgICBkZWZhdWx0OiAoKSA9PiAoe1xuICAgICAgICBkYXRlOiBkZWZhdWx0Rm9ybWF0cy5kYXRlLFxuICAgICAgICB0aW1lOiBmYWxzZVxuICAgICAgfSlcbiAgICB9LFxuICAgIGRpc2FibGVkRGF0ZTogeyB0eXBlOiBGdW5jdGlvbiwgZGVmYXVsdDogKCkgPT4gZmFsc2UgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGN1cnJlbnRWYWx1ZTogdGhpcy5tb2RlbFZhbHVlLFxuICAgICAgc2hvd1BvcHVwOiB0aGlzLnNob3csXG4gICAgICBpbnB1dEZvY3VzZWQ6IGZhbHNlXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgZm9jdXNlZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmlucHV0Rm9jdXNlZCB8fCB0aGlzLnNob3dQb3B1cFxuICAgIH0sXG5cbiAgICBpbnB1dCgpIHtcbiAgICAgIHJldHVybiBnZXRUYXJnZXQodGhpcyk/LnF1ZXJ5U2VsZWN0b3IoJ2lucHV0JylcbiAgICB9LFxuXG4gICAgZm9ybWF0T3B0aW9ucygpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGxvY2FsZTogdGhpcy5sb2NhbGUsXG4gICAgICAgIC4uLnRoaXMuZm9ybWF0XG4gICAgICB9XG4gICAgfSxcblxuICAgIGN1cnJlbnRUZXh0OiB7XG4gICAgICBnZXQoKSB7XG4gICAgICAgIHJldHVybiBmb3JtYXQodGhpcy5jdXJyZW50VmFsdWUsIHRoaXMuZm9ybWF0T3B0aW9ucykgfHwgJydcbiAgICAgIH0sXG5cbiAgICAgIHNldCh2YWx1ZSkge1xuICAgICAgICBjb25zdCBkYXRlID0gcGFyc2VEYXRlKHZhbHVlLCB0aGlzLmZvcm1hdE9wdGlvbnMpXG4gICAgICAgIGlmIChkYXRlKSB7XG4gICAgICAgICAgdGhpcy5jdXJyZW50VmFsdWUgPSBkYXRlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgd2F0Y2g6IHtcbiAgICBtb2RlbFZhbHVlKHRvLCBmcm9tKSB7XG4gICAgICBpZiAoK3RvICE9PSArZnJvbSkge1xuICAgICAgICB0aGlzLmN1cnJlbnRWYWx1ZSA9IHRvXG4gICAgICB9XG4gICAgfSxcblxuICAgIGN1cnJlbnRWYWx1ZSh2YWx1ZSkge1xuICAgICAgaWYgKCt2YWx1ZSAhPT0gK3RoaXMubW9kZWxWYWx1ZSkge1xuICAgICAgICB0aGlzLiRlbWl0KCd1cGRhdGU6bW9kZWxWYWx1ZScsIHZhbHVlKVxuICAgICAgICB0aGlzLiRlbWl0KCdjaGFuZ2UnLCB2YWx1ZSlcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgc2hvdyhzaG93KSB7XG4gICAgICB0aGlzLnNob3dQb3B1cCA9IHNob3dcbiAgICB9LFxuXG4gICAgc2hvd1BvcHVwKHRvLCBmcm9tKSB7XG4gICAgICBpZiAodG8gXiBmcm9tKSB7XG4gICAgICAgIHRoaXMuJGVtaXQoJ3VwZGF0ZTpzaG93JywgdG8pXG4gICAgICB9XG4gICAgfSxcblxuICAgIGZvY3VzZWQodG8sIGZyb20pIHtcbiAgICAgIGlmICh0byBeIGZyb20pIHtcbiAgICAgICAgdGhpcy4kZW1pdCh0byA/ICdmb2N1cycgOiAnYmx1cicpXG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBvbkZvY3VzKGZvY3VzKSB7XG4gICAgICB0aGlzLmlucHV0Rm9jdXNlZCA9IGZvY3VzXG4gICAgICB0aGlzLnNob3dQb3B1cCA9IGZvY3VzXG4gICAgfSxcblxuICAgIG9uS2V5RG93bihldmVudCkge1xuICAgICAgY29uc3QgeyB2ZXI6IHN0ZXAsIGVudGVyIH0gPSBnZXRLZXlOYXZpZ2F0aW9uKGV2ZW50KVxuICAgICAgaWYgKHN0ZXAgfHwgZW50ZXIpIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKVxuXG4gICAgICAgIGNvbnN0IHBvc2l0aW9uID0gZ2V0U2VsZWN0aW9uKHRoaXMuaW5wdXQpPy5zdGFydFxuICAgICAgICBjb25zdCBnZXREYXRlUGFydCA9IHBvc2l0aW9uID0+XG4gICAgICAgICAgZ2V0RGF0ZVBhcnRBdFBvc2l0aW9uKHRoaXMuY3VycmVudFRleHQsIHBvc2l0aW9uLCB0aGlzLmZvcm1hdE9wdGlvbnMpXG5cbiAgICAgICAgaWYgKHN0ZXAgJiYgIXRoaXMuc2hvd1BvcHVwKSB7XG4gICAgICAgICAgdGhpcy5zaG93UG9wdXAgPSB0cnVlXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3QgeyBjYWxlbmRhciB9ID0gdGhpcy4kcmVmc1xuICAgICAgICAgIGlmIChjYWxlbmRhcikge1xuICAgICAgICAgICAgY29uc3QgeyBuYW1lOiBtb2RlLCBzdGFydCB9ID0gZ2V0RGF0ZVBhcnQocG9zaXRpb24pIHx8IHt9XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIG1vZGUgJiZcbiAgICAgICAgICAgICAgY2FsZW5kYXIubmF2aWdhdGUoeyBzdGVwLCBlbnRlciwgbW9kZSwgdXBkYXRlOiB0cnVlIH0pXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgdGhpcy4kbmV4dFRpY2soKCkgPT4gc2V0U2VsZWN0aW9uKHRoaXMuaW5wdXQsIGdldERhdGVQYXJ0KHN0YXJ0KSkpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIG9uTW91c2VEb3duKHRvZ2dsZSkge1xuICAgICAgdGhpcy5zaG93UG9wdXAgPSAhdGhpcy5kaXNhYmxlZCAmJiAoIXRvZ2dsZSB8fCAhdGhpcy5zaG93UG9wdXApXG4gICAgICBpZiAodGhpcy5zaG93UG9wdXApIHtcbiAgICAgICAgdGhpcy5mb2N1cygpXG4gICAgICB9XG4gICAgfSxcblxuICAgIGZvY3VzKCkge1xuICAgICAgdGhpcy5pbnB1dC5mb2N1cygpXG4gICAgfSxcblxuICAgIGJsdXIoKSB7XG4gICAgICB0aGlzLmlucHV0LmJsdXIoKVxuICAgIH1cbiAgfVxufVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLmRpdG8tZGF0ZS1waWNrZXIge1xuICAuZGl0by1pbnB1dCB7XG4gICAgZm9udC12YXJpYW50LW51bWVyaWM6IHRhYnVsYXItbnVtcztcbiAgICB3aWR0aDogMTAwJTtcbiAgICBtaW4td2lkdGg6IDhlbTtcbiAgfVxufVxuXG4uZGl0by1kYXRlLXBpY2tlci1wb3B1cCB7XG4gIG1hcmdpbjogJHBvcHVwLW1hcmdpbjtcbn1cbjwvc3R5bGU+XG4iLCI8IS0tIERlcml2ZWQgZnJvbSBBVFVJLCBhbmQgZnVydGhlciBleHRlbmRlZDogaHR0cHM6Ly9hbGlxaW4uZ2l0aHViLmlvL2F0dWkvIC0tPlxuPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cblRyaWdnZXIuZGl0by10aW1lLXBpY2tlcihcbiAgcmVmPVwidHJpZ2dlclwiXG4gIHYtbW9kZWw6c2hvdz1cInNob3dQb3B1cFwiXG4gIHRyaWdnZXI9XCJmb2N1c1wiXG4gIHYtYmluZD1cInsgdHJhbnNpdGlvbiwgcGxhY2VtZW50LCBkaXNhYmxlZCwgdGFyZ2V0IH1cIlxuKVxuICB0ZW1wbGF0ZSgjdHJpZ2dlcilcbiAgICBzbG90KFxuICAgICAgdi1pZj1cIiRzbG90cy50cmlnZ2VyXCJcbiAgICAgIG5hbWU9XCJ0cmlnZ2VyXCJcbiAgICApXG4gICAgSW5wdXRGaWVsZC5kaXRvLXRpbWUtcGlja2VyLWlucHV0KFxuICAgICAgdi1lbHNlXG4gICAgICByZWY9XCJpbnB1dFwiXG4gICAgICB2LW1vZGVsPVwiY3VycmVudFRleHRcIlxuICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgOmNsYXNzPVwieyAnZGl0by1mb2N1cyc6IGZvY3VzZWQgfVwiXG4gICAgICB2LWJpbmQ9XCJ7IHBsYWNlaG9sZGVyLCBkaXNhYmxlZCwgLi4uJGF0dHJzIH1cIlxuICAgICAgQGZvY3VzPVwib25Gb2N1cyh0cnVlKVwiXG4gICAgICBAYmx1cj1cIm9uRm9jdXMoZmFsc2UpXCJcbiAgICAgIEBrZXlkb3duPVwib25LZXlEb3duXCJcbiAgICAgIEBtb3VzZWRvd24uc3RvcD1cIm9uTW91c2VEb3duKGZhbHNlKVwiXG4gICAgKVxuICAgICAgdGVtcGxhdGUoI2JlZm9yZSlcbiAgICAgICAgc2xvdChuYW1lPVwiYmVmb3JlXCIpXG4gICAgICB0ZW1wbGF0ZSgjYWZ0ZXIpXG4gICAgICAgIEljb24oXG4gICAgICAgICAgbmFtZT1cImNsb2NrXCJcbiAgICAgICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgICAgICAgQG1vdXNlZG93bi5wcmV2ZW50PVwib25Nb3VzZURvd24odHJ1ZSlcIlxuICAgICAgICApXG4gICAgICAgIHNsb3QobmFtZT1cImFmdGVyXCIpXG4gIHRlbXBsYXRlKCNwb3B1cClcbiAgICAuZGl0by10aW1lLXBpY2tlci1wb3B1cFxuICAgICAgLmRpdG8tdGltZS1waWNrZXItcGFuZWxcbiAgICAgICAgdWwuZGl0by10aW1lLXBpY2tlci1ob3VyKHJlZj1cImhvdXJcIilcbiAgICAgICAgICB0ZW1wbGF0ZShcbiAgICAgICAgICAgIHYtZm9yPVwiaW5kZXggaW4gMjRcIlxuICAgICAgICAgIClcbiAgICAgICAgICAgIGxpKFxuICAgICAgICAgICAgICB2LWlmPVwiIWRpc2FibGVkSG91cihpbmRleCAtIDEpXCJcbiAgICAgICAgICAgICAgOmNsYXNzPVwieyBzZWxlY3RlZDogaG91ciA9PT0gaW5kZXggLSAxIH1cIlxuICAgICAgICAgICAgICBAY2xpY2s9XCJob3VyID0gaW5kZXggLSAxXCJcbiAgICAgICAgICAgICkge3sgbGVmdFBhZChpbmRleCAtIDEpIH19XG4gICAgICAuZGl0by10aW1lLXBpY2tlci1wYW5lbFxuICAgICAgICB1bC5kaXRvLXRpbWUtcGlja2VyLW1pbnV0ZShyZWY9XCJtaW51dGVcIilcbiAgICAgICAgICB0ZW1wbGF0ZShcbiAgICAgICAgICAgIHYtZm9yPVwiaW5kZXggaW4gNjBcIlxuICAgICAgICAgIClcbiAgICAgICAgICAgIGxpKFxuICAgICAgICAgICAgICB2LWlmPVwiIWRpc2FibGVkTWludXRlKGluZGV4IC0gMSlcIlxuICAgICAgICAgICAgICA6Y2xhc3M9XCJ7IHNlbGVjdGVkOiBtaW51dGUgPT09IGluZGV4IC0gMSB9XCJcbiAgICAgICAgICAgICAgQGNsaWNrPVwibWludXRlID0gaW5kZXggLSAxXCJcbiAgICAgICAgICAgICkge3sgbGVmdFBhZChpbmRleCAtIDEpIH19XG4gICAgICAuZGl0by10aW1lLXBpY2tlci1wYW5lbFxuICAgICAgICB1bC5kaXRvLXRpbWUtcGlja2VyLXNlY29uZChyZWY9XCJzZWNvbmRcIilcbiAgICAgICAgICB0ZW1wbGF0ZShcbiAgICAgICAgICAgIHYtZm9yPVwiaW5kZXggaW4gNjBcIlxuICAgICAgICAgIClcbiAgICAgICAgICAgIGxpKFxuICAgICAgICAgICAgICB2LWlmPVwiIWRpc2FibGVkU2Vjb25kKGluZGV4IC0gMSlcIlxuICAgICAgICAgICAgICA6Y2xhc3M9XCJ7IHNlbGVjdGVkOiBzZWNvbmQgPT09IGluZGV4IC0gMSB9XCJcbiAgICAgICAgICAgICAgQGNsaWNrPVwic2Vjb25kID0gaW5kZXggLSAxXCJcbiAgICAgICAgICAgICkge3sgbGVmdFBhZChpbmRleCAtIDEpIH19XG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IHsgZm9ybWF0LCBkZWZhdWx0Rm9ybWF0cyB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQgVHJpZ2dlciBmcm9tICcuL1RyaWdnZXIudnVlJ1xuaW1wb3J0IElucHV0RmllbGQgZnJvbSAnLi9JbnB1dEZpZWxkLnZ1ZSdcbmltcG9ydCBJY29uIGZyb20gJy4vSWNvbi52dWUnXG5pbXBvcnQgeyBhbHRlckRhdGUsIHBhcnNlRGF0ZSwgZ2V0RGF0ZVBhcnRBdFBvc2l0aW9uIH0gZnJvbSAnLi4vdXRpbHMvZGF0ZS5qcydcbmltcG9ydCB7IGdldFNlbGVjdGlvbiwgc2V0U2VsZWN0aW9uIH0gZnJvbSAnLi4vdXRpbHMvc2VsZWN0aW9uLmpzJ1xuaW1wb3J0IHsgZ2V0S2V5TmF2aWdhdGlvbiB9IGZyb20gJy4uL3V0aWxzL2V2ZW50LmpzJ1xuaW1wb3J0IHsgZ2V0VGFyZ2V0IH0gZnJvbSAnLi4vdXRpbHMvdHJpZ2dlci5qcydcblxuZXhwb3J0IGRlZmF1bHQge1xuICBjb21wb25lbnRzOiB7IFRyaWdnZXIsIElucHV0RmllbGQsIEljb24gfSxcbiAgZW1pdHM6IFsndXBkYXRlOm1vZGVsVmFsdWUnLCAndXBkYXRlOnNob3cnLCAnY2hhbmdlJywgJ2ZvY3VzJywgJ2JsdXInXSxcbiAgaW5oZXJpdEF0dHJzOiBmYWxzZSxcblxuICBwcm9wczoge1xuICAgIG1vZGVsVmFsdWU6IHsgdHlwZTogRGF0ZSwgZGVmYXVsdDogbnVsbCB9LFxuICAgIHRyYW5zaXRpb246IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiAnc2xpZGUnIH0sXG4gICAgcGxhY2VtZW50OiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogJ2JvdHRvbS1sZWZ0JyB9LFxuICAgIHBsYWNlaG9sZGVyOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogbnVsbCB9LFxuICAgIHNob3c6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBkaXNhYmxlZDogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIHRhcmdldDogeyB0eXBlOiBbU3RyaW5nLCBIVE1MRWxlbWVudF0sIGRlZmF1bHQ6ICd0cmlnZ2VyJyB9LFxuICAgIGxvY2FsZTogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6ICdlbi1VUycgfSxcbiAgICBmb3JtYXQ6IHtcbiAgICAgIHR5cGU6IE9iamVjdCxcbiAgICAgIGRlZmF1bHQ6ICgpID0+ICh7XG4gICAgICAgIHRpbWU6IGRlZmF1bHRGb3JtYXRzLnRpbWUsXG4gICAgICAgIGRhdGU6IGZhbHNlXG4gICAgICB9KVxuICAgIH0sXG4gICAgZGlzYWJsZWRIb3VyOiB7IHR5cGU6IEZ1bmN0aW9uLCBkZWZhdWx0OiAoKSA9PiBmYWxzZSB9LFxuICAgIGRpc2FibGVkTWludXRlOiB7IHR5cGU6IEZ1bmN0aW9uLCBkZWZhdWx0OiAoKSA9PiBmYWxzZSB9LFxuICAgIGRpc2FibGVkU2Vjb25kOiB7IHR5cGU6IEZ1bmN0aW9uLCBkZWZhdWx0OiAoKSA9PiBmYWxzZSB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgY3VycmVudFZhbHVlOiB0aGlzLm1vZGVsVmFsdWUsXG4gICAgICBzaG93UG9wdXA6IHRoaXMuc2hvdyxcbiAgICAgIGlucHV0Rm9jdXNlZDogZmFsc2UsXG4gICAgICBpZ25vcmVOZXh0Q2hhbmdlOiBmYWxzZVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIGZvY3VzZWQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5pbnB1dEZvY3VzZWQgfHwgdGhpcy5zaG93UG9wdXBcbiAgICB9LFxuXG4gICAgaW5wdXQoKSB7XG4gICAgICByZXR1cm4gZ2V0VGFyZ2V0KHRoaXMpPy5xdWVyeVNlbGVjdG9yKCdpbnB1dCcpXG4gICAgfSxcblxuICAgIGZvcm1hdE9wdGlvbnMoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBsb2NhbGU6IHRoaXMubG9jYWxlLFxuICAgICAgICAuLi50aGlzLmZvcm1hdFxuICAgICAgfVxuICAgIH0sXG5cbiAgICBjdXJyZW50VGV4dDoge1xuICAgICAgZ2V0KCkge1xuICAgICAgICByZXR1cm4gZm9ybWF0KHRoaXMuY3VycmVudFZhbHVlLCB0aGlzLmZvcm1hdE9wdGlvbnMpIHx8ICcnXG4gICAgICB9LFxuXG4gICAgICBzZXQodmFsdWUpIHtcbiAgICAgICAgY29uc3QgZGF0ZSA9IHBhcnNlRGF0ZSh2YWx1ZSwgdGhpcy5mb3JtYXRPcHRpb25zKVxuICAgICAgICBpZiAoZGF0ZSkge1xuICAgICAgICAgIHRoaXMuY3VycmVudFZhbHVlID0gZGF0ZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIGN1cnJlbnREYXRlKCkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgdGhpcy5jdXJyZW50VmFsdWUgfHxcbiAgICAgICAgLy8gQ3JlYXRlIGEgbmV3IERhdGUoKSBvYmplY3Qgd2l0aCB0aGUgdGltZSBzZXQgdG8gMCwgdG8gYmUgdXNlZCB3aGVuXG4gICAgICAgIC8vIGZpcnN0IHNldHRpbmcgYW55IG9mIHRoZSB0aW1lcywgZm9yIG1lYW5pbmdmdWwgZGF0ZXMgaW4gY2FzZSB0aGVcbiAgICAgICAgLy8gb2JqZWN0IGlzIHNoYXJlZCB3aXRoIGEgRGF0ZVBpY2tlciwgZS5nLiB0aHJvdWdoIERhdGVUaW1lUGlja2VyLlxuICAgICAgICBhbHRlckRhdGUobmV3IERhdGUoKSwgeyBob3VyOiAwLCBtaW51dGU6IDAsIHNlY29uZDogMCwgbWlsbGlzZWNvbmQ6IDAgfSlcbiAgICAgIClcbiAgICB9LFxuXG4gICAgaG91cjoge1xuICAgICAgZ2V0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jdXJyZW50RGF0ZS5nZXRIb3VycygpXG4gICAgICB9LFxuXG4gICAgICBzZXQoaG91cikge1xuICAgICAgICB0aGlzLnNldFRpbWUoeyBob3VyIH0pXG4gICAgICB9XG4gICAgfSxcblxuICAgIG1pbnV0ZToge1xuICAgICAgZ2V0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jdXJyZW50RGF0ZS5nZXRNaW51dGVzKClcbiAgICAgIH0sXG5cbiAgICAgIHNldChtaW51dGUpIHtcbiAgICAgICAgdGhpcy5zZXRUaW1lKHsgbWludXRlIH0pXG4gICAgICB9XG4gICAgfSxcblxuICAgIHNlY29uZDoge1xuICAgICAgZ2V0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jdXJyZW50RGF0ZS5nZXRTZWNvbmRzKClcbiAgICAgIH0sXG5cbiAgICAgIHNldChzZWNvbmQpIHtcbiAgICAgICAgdGhpcy5zZXRUaW1lKHsgc2Vjb25kIH0pXG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIHdhdGNoOiB7XG4gICAgbW9kZWxWYWx1ZSh0bywgZnJvbSkge1xuICAgICAgaWYgKCt0byAhPT0gK2Zyb20pIHtcbiAgICAgICAgdGhpcy5jdXJyZW50VmFsdWUgPSB0b1xuICAgICAgICB0aGlzLnNjcm9sbEFsbCh0cnVlKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBjdXJyZW50VmFsdWUodmFsdWUpIHtcbiAgICAgIGlmICgrdmFsdWUgIT09ICt0aGlzLm1vZGVsVmFsdWUpIHtcbiAgICAgICAgdGhpcy4kZW1pdCgndXBkYXRlOm1vZGVsVmFsdWUnLCB2YWx1ZSlcbiAgICAgICAgdGhpcy4kZW1pdCgnY2hhbmdlJywgdmFsdWUpXG4gICAgICAgIHRoaXMuc2Nyb2xsQWxsKHRydWUpXG4gICAgICB9XG4gICAgfSxcblxuICAgIGN1cnJlbnRUZXh0KCkge1xuICAgICAgY29uc3QgeyBpbnB1dCB9ID0gdGhpc1xuICAgICAgY29uc3Qgc2VsZWN0aW9uID0gZ2V0U2VsZWN0aW9uKGlucHV0KVxuICAgICAgaWYgKFxuICAgICAgICB0aGlzLmZvY3VzZWQgJiZcbiAgICAgICAgIXRoaXMuaWdub3JlTmV4dENoYW5nZSAmJlxuICAgICAgICBzZWxlY3Rpb24uc3RhcnQgPT09IHNlbGVjdGlvbi5lbmRcbiAgICAgICkge1xuICAgICAgICB0aGlzLiRuZXh0VGljaygoKSA9PiBzZXRTZWxlY3Rpb24oaW5wdXQsIHNlbGVjdGlvbikpXG4gICAgICB9XG4gICAgICB0aGlzLmlnbm9yZU5leHRDaGFuZ2UgPSBmYWxzZVxuICAgIH0sXG5cbiAgICBzaG93KHNob3cpIHtcbiAgICAgIHRoaXMuc2hvd1BvcHVwID0gc2hvd1xuICAgIH0sXG5cbiAgICBzaG93UG9wdXAodG8sIGZyb20pIHtcbiAgICAgIGlmICh0bykge1xuICAgICAgICB0aGlzLnNjcm9sbEFsbChmYWxzZSlcbiAgICAgIH1cbiAgICAgIGlmICh0byBeIGZyb20pIHtcbiAgICAgICAgdGhpcy4kZW1pdCgndXBkYXRlOnNob3cnLCB0bylcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZm9jdXNlZCh0bywgZnJvbSkge1xuICAgICAgaWYgKHRvIF4gZnJvbSkge1xuICAgICAgICB0aGlzLiRlbWl0KHRvID8gJ2ZvY3VzJyA6ICdibHVyJylcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGxlZnRQYWQodmFsdWUpIHtcbiAgICAgIHJldHVybiAoJzAnICsgdmFsdWUpLnNsaWNlKC0yKVxuICAgIH0sXG5cbiAgICBzZXRUaW1lKG92ZXJyaWRlcykge1xuICAgICAgdGhpcy5jdXJyZW50VmFsdWUgPSBhbHRlckRhdGUodGhpcy5jdXJyZW50RGF0ZSwge1xuICAgICAgICAuLi5vdmVycmlkZXMsXG4gICAgICAgIG1pbGxpc2Vjb25kOiAwXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBzY3JvbGxBbGwoc21vb3RoKSB7XG4gICAgICBjb25zdCBzY3JvbGwgPSAocmVmLCB2YWx1ZSkgPT4ge1xuICAgICAgICBjb25zdCB0YXJnZXQgPSB0aGlzLiRyZWZzW3JlZl1cbiAgICAgICAgaWYgKHRhcmdldCkge1xuICAgICAgICAgIGNvbnN0IGxpbmVIZWlnaHQgPSAoXG4gICAgICAgICAgICB0YXJnZXQuc2Nyb2xsSGVpZ2h0IC9cbiAgICAgICAgICAgIC8vIEZpcnN0IGFuZCBsYXN0IG9uZSBhZGQgMyB0aW1lcyB0aGUgbWFyZ2luLlxuICAgICAgICAgICAgKHRhcmdldC5jaGlsZEVsZW1lbnRDb3VudCArIDYpXG4gICAgICAgICAgKVxuICAgICAgICAgIGNvbnN0IHRvcCA9IE1hdGgucm91bmQodmFsdWUgKiBsaW5lSGVpZ2h0KVxuICAgICAgICAgIGNvbnN0IGRpc3RhbmNlID0gTWF0aC5hYnModGFyZ2V0LnNjcm9sbFRvcCAtIHRvcClcbiAgICAgICAgICB0YXJnZXQuc2Nyb2xsVG8oe1xuICAgICAgICAgICAgdG9wLFxuICAgICAgICAgICAgYmVoYXZpb3I6IHNtb290aCAmJiBkaXN0YW5jZSA8IDEwMCA/ICdzbW9vdGgnIDogJ2F1dG8nXG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdGhpcy4kbmV4dFRpY2soKCkgPT4ge1xuICAgICAgICBzY3JvbGwoJ2hvdXInLCB0aGlzLmhvdXIpXG4gICAgICAgIHNjcm9sbCgnbWludXRlJywgdGhpcy5taW51dGUpXG4gICAgICAgIHNjcm9sbCgnc2Vjb25kJywgdGhpcy5zZWNvbmQpXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBvbkZvY3VzKGZvY3VzKSB7XG4gICAgICB0aGlzLmlucHV0Rm9jdXNlZCA9IGZvY3VzXG4gICAgICB0aGlzLnNob3dQb3B1cCA9IGZvY3VzXG4gICAgfSxcblxuICAgIG9uS2V5RG93bihldmVudCkge1xuICAgICAgY29uc3QgeyBpbnB1dCB9ID0gdGhpc1xuICAgICAgY29uc3Qgc2VsZWN0aW9uID0gZ2V0U2VsZWN0aW9uKGlucHV0KVxuICAgICAgY29uc3QgeyB2ZXI6IHN0ZXAsIGVudGVyIH0gPSBnZXRLZXlOYXZpZ2F0aW9uKGV2ZW50KVxuICAgICAgaWYgKHN0ZXAgfHwgZW50ZXIpIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKVxuXG4gICAgICAgIGNvbnN0IGdldERhdGVQYXJ0ID0gcG9zaXRpb24gPT5cbiAgICAgICAgICBnZXREYXRlUGFydEF0UG9zaXRpb24odGhpcy5jdXJyZW50VGV4dCwgcG9zaXRpb24sIHRoaXMuZm9ybWF0T3B0aW9ucylcblxuICAgICAgICBpZiAoc3RlcCkge1xuICAgICAgICAgIGlmICghdGhpcy5zaG93UG9wdXApIHtcbiAgICAgICAgICAgIHRoaXMuc2hvd1BvcHVwID0gdHJ1ZVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCB7IG5hbWUsIHN0YXJ0IH0gPSBnZXREYXRlUGFydChzZWxlY3Rpb24uc3RhcnQpIHx8IHt9XG4gICAgICAgICAgICBpZiAobmFtZSkge1xuICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXNbbmFtZV0gKyBzdGVwXG4gICAgICAgICAgICAgIGNvbnN0IGNvdW50ID0gdGhpcy4kcmVmc1tuYW1lXS5jaGlsZEVsZW1lbnRDb3VudFxuICAgICAgICAgICAgICB0aGlzW25hbWVdID1cbiAgICAgICAgICAgICAgICB2YWx1ZSA8IDBcbiAgICAgICAgICAgICAgICAgID8gdmFsdWUgKyBjb3VudFxuICAgICAgICAgICAgICAgICAgOiB2YWx1ZSA+PSBjb3VudFxuICAgICAgICAgICAgICAgICAgICA/IHZhbHVlIC0gY291bnRcbiAgICAgICAgICAgICAgICAgICAgOiB2YWx1ZVxuICAgICAgICAgICAgICB0aGlzLmlnbm9yZU5leHRDaGFuZ2UgPSB0cnVlXG4gICAgICAgICAgICAgIHRoaXMuJG5leHRUaWNrKCgpID0+IHNldFNlbGVjdGlvbihpbnB1dCwgZ2V0RGF0ZVBhcnQoc3RhcnQpKSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoZW50ZXIpIHtcbiAgICAgICAgICB0aGlzLnNob3dQb3B1cCA9IGZhbHNlXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoc2VsZWN0aW9uLnN0YXJ0ID09PSBzZWxlY3Rpb24uZW5kKSB7XG4gICAgICAgIGNvbnN0IHsgdmFsdWUgfSA9IGlucHV0XG4gICAgICAgIGxldCBwb3MgPSBzZWxlY3Rpb24uc3RhcnRcblxuICAgICAgICBjb25zdCBpc0RpZ2l0ID0gY2hhciA9PiAhaXNOYU4ocGFyc2VJbnQoY2hhciwgMTApKVxuXG4gICAgICAgIGlmIChldmVudC5rZXkubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgaWYgKGlzRGlnaXQoZXZlbnQua2V5KSAmJiBwb3MgPCB2YWx1ZS5sZW5ndGgpIHtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgdmFsdWVbcG9zXSA9PT0gJzonICYmXG4gICAgICAgICAgICAgIGlzRGlnaXQodmFsdWVbcG9zIC0gMV0pICYmXG4gICAgICAgICAgICAgIGlzRGlnaXQodmFsdWVbcG9zIC0gMl0pXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgcG9zKytcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIFJlbW92ZSBuZXh0IGRpZ2l0IHNvIHRoZSBldmVudCBvdmVycmlkZXMgaXQgaW5zdGVhZCBvZiBpbnNlcnRpbmdcbiAgICAgICAgICAgIC8vIG5ldyBjaGFycy5cbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgaXNEaWdpdCh2YWx1ZVtwb3NdKSAmJiAoXG4gICAgICAgICAgICAgICAgaXNEaWdpdCh2YWx1ZVtwb3MgKyAxXSkgfHxcbiAgICAgICAgICAgICAgICBpc0RpZ2l0KHZhbHVlW3BvcyAtIDFdKVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgaW5wdXQudmFsdWUgPSAoXG4gICAgICAgICAgICAgICAgdmFsdWUuc2xpY2UoMCwgcG9zKSArXG4gICAgICAgICAgICAgICAgdmFsdWUuc2xpY2UocG9zICsgMSlcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBzZXRTZWxlY3Rpb24oaW5wdXQsIHsgc3RhcnQ6IHBvcywgZW5kOiBwb3MgfSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgbGVuZ3RoID0gZm9ybWF0KHRoaXMuY3VycmVudFZhbHVlLCB0aGlzLmZvcm1hdE9wdGlvbnMpLmxlbmd0aFxuICAgICAgICAgICAgaWYgKHZhbHVlLmxlbmd0aCA9PT0gbGVuZ3RoKSB7XG4gICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KClcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodmFsdWUubGVuZ3RoID4gbGVuZ3RoKSB7XG4gICAgICAgICAgICAgIGlucHV0LnZhbHVlID0gdmFsdWUuc2xpY2UoMCwgbGVuZ3RoKVxuICAgICAgICAgICAgICBzZXRTZWxlY3Rpb24oaW5wdXQsIHNlbGVjdGlvbilcbiAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChldmVudC5rZXkgPT09ICdCYWNrc3BhY2UnKSB7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgcG9zID09PSAxIHx8XG4gICAgICAgICAgICBbJyAnLCAnOiddLmluY2x1ZGVzKHZhbHVlW3BvcyAtIDJdKVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICBwb3MgPT09IHZhbHVlLmxlbmd0aCB8fFxuICAgICAgICAgICAgICB2YWx1ZVtwb3NdID09PSAnOidcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICBwb3MtLVxuICAgICAgICAgICAgICBpbnB1dC52YWx1ZSA9IChcbiAgICAgICAgICAgICAgICB2YWx1ZS5zbGljZSgwLCBwb3MpICtcbiAgICAgICAgICAgICAgICAoKHZhbHVlW3BvcyAtIDFdID8/ICcnKSArICcwMCcpICtcbiAgICAgICAgICAgICAgICB2YWx1ZS5zbGljZShwb3MgKyAxKVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIHNldFNlbGVjdGlvbihpbnB1dCwgeyBzdGFydDogcG9zLCBlbmQ6IHBvcyB9KVxuICAgICAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgICAgaXNEaWdpdCh2YWx1ZVtwb3NdKSAmJlxuICAgICAgICAgICAgICAhaXNEaWdpdCgrdmFsdWVbcG9zICsgMV0pXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgLy8gV2hlbiByZW1vdmluZyB0aGUgZmlyc3Qgb2YgdHdvIGRpZ2l0cywgcmVwbGFjZSB3aXRoIDBcbiAgICAgICAgICAgICAgaW5wdXQudmFsdWUgPSB2YWx1ZS5zbGljZSgwLCBwb3MpICsgJzAnICsgdmFsdWUuc2xpY2UocG9zKVxuICAgICAgICAgICAgICBzZXRTZWxlY3Rpb24oaW5wdXQsIHsgc3RhcnQ6IHBvcywgZW5kOiBwb3MgfSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgb25Nb3VzZURvd24odG9nZ2xlKSB7XG4gICAgICB0aGlzLnNob3dQb3B1cCA9ICF0aGlzLmRpc2FibGVkICYmICghdG9nZ2xlIHx8ICF0aGlzLnNob3dQb3B1cClcbiAgICAgIGlmICh0aGlzLnNob3dQb3B1cCkge1xuICAgICAgICB0aGlzLmZvY3VzKClcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZm9jdXMoKSB7XG4gICAgICB0aGlzLmlucHV0LmZvY3VzKClcbiAgICB9LFxuXG4gICAgYmx1cigpIHtcbiAgICAgIHRoaXMuaW5wdXQuYmx1cigpXG4gICAgfVxuICB9XG59XG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by10aW1lLXBpY2tlciB7XG4gIC5kaXRvLWlucHV0IHtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBtaW4td2lkdGg6IDZlbTtcbiAgfVxufVxuXG4uZGl0by10aW1lLXBpY2tlci1wb3B1cCB7XG4gIG1heC13aWR0aDogMTYwcHg7XG4gIG1hcmdpbjogJHBvcHVwLW1hcmdpbjtcbn1cblxuJHRpbWUtcGlja2VyLWxpbmUtaGVpZ2h0OiAyNHB4O1xuXG4uZGl0by10aW1lLXBpY2tlciB7XG4gIC5kaXRvLWlucHV0IHtcbiAgICBmb250LXZhcmlhbnQtbnVtZXJpYzogdGFidWxhci1udW1zO1xuICAgIHdpZHRoOiAxMDAlO1xuICB9XG59XG5cbi5kaXRvLXRpbWUtcGlja2VyLXBvcHVwIHtcbiAgbGlzdC1zdHlsZTogbm9uZTtcbiAgYmFja2dyb3VuZDogJGNvbG9yLXdoaXRlO1xuICBib3JkZXI6ICRib3JkZXItc3R5bGU7XG4gIGJvcmRlci1yYWRpdXM6ICRib3JkZXItcmFkaXVzO1xuICBib3gtc2hhZG93OiAkc2hhZG93LXdpbmRvdztcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cblxuLmRpdG8tdGltZS1waWNrZXItcG9wdXAgLmRpdG8tdGltZS1waWNrZXItcGFuZWwge1xuICBmbG9hdDogbGVmdDtcbiAgYm9yZGVyOiAkYm9yZGVyLXN0eWxlO1xuICBib3JkZXItd2lkdGg6IDAgMXB4IDA7XG4gIG1hcmdpbi1sZWZ0OiAtMXB4O1xuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICB3aWR0aDogY2FsYygxMDAlIC8gMyArIDFweCk7XG4gIG92ZXJmbG93OiBoaWRkZW47XG5cbiAgJjpsYXN0LWNoaWxkIHtcbiAgICBib3JkZXItcmlnaHQ6IDA7XG4gIH1cblxuICB1bCB7XG4gICAgb3ZlcmZsb3cteDogaGlkZGVuO1xuICAgIG92ZXJmbG93LXk6IGF1dG87XG4gICAgbGlzdC1zdHlsZTogbm9uZTtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBtYXJnaW46IDA7XG4gICAgLy8gSGlkZSBzY3JvbGxiYXI6XG4gICAgYm94LXNpemluZzogY29udGVudC1ib3g7XG4gICAgcGFkZGluZzogMCAxN3B4IDAgMDtcbiAgICBoZWlnaHQ6IDcgKiAkdGltZS1waWNrZXItbGluZS1oZWlnaHQ7XG5cbiAgICAmID4gbGkge1xuICAgICAgYm94LXNpemluZzogY29udGVudC1ib3g7XG4gICAgICBiYWNrZ3JvdW5kOiAkY29sb3Itd2hpdGU7XG4gICAgICB3aWR0aDogMTAwJTtcbiAgICAgIGhlaWdodDogJHRpbWUtcGlja2VyLWxpbmUtaGVpZ2h0O1xuICAgICAgbGluZS1oZWlnaHQ6ICR0aW1lLXBpY2tlci1saW5lLWhlaWdodDtcbiAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICAgIGZvbnQtdmFyaWFudC1udW1lcmljOiB0YWJ1bGFyLW51bXM7XG4gICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgIEBpbmNsdWRlIHVzZXItc2VsZWN0KG5vbmUpO1xuXG4gICAgICAmOmZpcnN0LWNoaWxkIHtcbiAgICAgICAgbWFyZ2luLXRvcDogMyAqICR0aW1lLXBpY2tlci1saW5lLWhlaWdodDtcbiAgICAgIH1cblxuICAgICAgJjpsYXN0LWNoaWxkIHtcbiAgICAgICAgbWFyZ2luLWJvdHRvbTogMyAqICR0aW1lLXBpY2tlci1saW5lLWhlaWdodDtcbiAgICAgIH1cblxuICAgICAgJjpob3ZlciB7XG4gICAgICAgIGJhY2tncm91bmQ6ICRjb2xvci1oaWdobGlnaHQ7XG4gICAgICB9XG5cbiAgICAgICYuc2VsZWN0ZWQsXG4gICAgICAmLnNlbGVjdGVkOmhvdmVyIHtcbiAgICAgICAgY29sb3I6ICRjb2xvci10ZXh0LWludmVydGVkO1xuICAgICAgICBiYWNrZ3JvdW5kOiAkY29sb3ItYWN0aXZlO1xuICAgICAgfVxuXG4gICAgICAmLmRpc2FibGVkIHtcbiAgICAgICAgY3Vyc29yOiBkZWZhdWx0O1xuICAgICAgICBjb2xvcjogJGNvbG9yLWRpc2FibGVkO1xuICAgICAgfVxuXG4gICAgICAmLmRpc2FibGVkOmhvdmVyIHtcbiAgICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbi5kaXRvLWRhdGUtdGltZS1waWNrZXIocmVmPVwicGlja2VyXCIpXG4gIC5kaXRvLWRhdGUtdGltZS1waWNrZXJfX2lubmVyKDpjbGFzcz1cInsgJ2RpdG8tZm9jdXMnOiBmb2N1c2VkIH1cIilcbiAgICBJbnB1dEZpZWxkLmRpdG8tZGF0ZS10aW1lLXBpY2tlcl9faW5wdXQoXG4gICAgICByZWY9XCJpbnB1dFwiXG4gICAgICB2LW1vZGVsPVwiY3VycmVudFRleHRcIlxuICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgOmNsYXNzPVwieyAnZGl0by1mb2N1cyc6IGZvY3VzZWQgfVwiXG4gICAgICB2LWJpbmQ9XCJ7IHBsYWNlaG9sZGVyLCBkaXNhYmxlZCwgLi4uJGF0dHJzIH1cIlxuICAgICAgQGZvY3VzPVwib25Gb2N1cyh0cnVlKVwiXG4gICAgICBAYmx1cj1cIm9uRm9jdXMoZmFsc2UpXCJcbiAgICAgIEBrZXlkb3duPVwib25LZXlEb3duXCJcbiAgICAgIEBtb3VzZWRvd24uc3RvcD1cIm9uTW91c2VEb3duKGZhbHNlKVwiXG4gICAgKVxuICAgICAgdGVtcGxhdGUoI2JlZm9yZSlcbiAgICAgICAgc2xvdChuYW1lPVwiYmVmb3JlXCIpXG4gICAgICB0ZW1wbGF0ZSgjYWZ0ZXIpXG4gICAgICAgIEljb24oXG4gICAgICAgICAgbmFtZT1cImNhbGVuZGFyXCJcbiAgICAgICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgICAgICAgQG1vdXNlZG93bi5wcmV2ZW50PVwib25Nb3VzZURvd24odHJ1ZSlcIlxuICAgICAgICApXG4gICAgICAgIHNsb3QobmFtZT1cImFmdGVyXCIpXG4gICAgRGF0ZVBpY2tlcihcbiAgICAgIHJlZj1cImRhdGVcIlxuICAgICAgdi1tb2RlbD1cImN1cnJlbnRWYWx1ZVwiXG4gICAgICB2LW1vZGVsOnNob3c9XCJzaG93RGF0ZVwiXG4gICAgICBwbGFjZW1lbnQ9XCJib3R0b20tbGVmdFwiXG4gICAgICA6dGFyZ2V0PVwiJHJlZnMucGlja2VyXCJcbiAgICAgIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICAgIClcbiAgICAgIHRlbXBsYXRlKCN0cmlnZ2VyKVxuICAgICAgICAvLy0gSW50ZW50aW9uYWxseSBlbXB0eVxuICAgIFRpbWVQaWNrZXIoXG4gICAgICByZWY9XCJ0aW1lXCJcbiAgICAgIHYtbW9kZWw9XCJjdXJyZW50VmFsdWVcIlxuICAgICAgdi1tb2RlbDpzaG93PVwic2hvd1RpbWVcIlxuICAgICAgcGxhY2VtZW50PVwiYm90dG9tLXJpZ2h0XCJcbiAgICAgIDp0YXJnZXQ9XCIkcmVmcy5waWNrZXJcIlxuICAgICAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gICAgKVxuICAgICAgdGVtcGxhdGUoI3RyaWdnZXIpXG4gICAgICAgIC8vLSBJbnRlbnRpb25hbGx5IGVtcHR5XG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IHsgZm9ybWF0LCBkZWZhdWx0Rm9ybWF0cywgYXNzaWduRGVlcGx5IH0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCBJbnB1dEZpZWxkIGZyb20gJy4vSW5wdXRGaWVsZC52dWUnXG5pbXBvcnQgRGF0ZVBpY2tlciBmcm9tICcuL0RhdGVQaWNrZXIudnVlJ1xuaW1wb3J0IFRpbWVQaWNrZXIgZnJvbSAnLi9UaW1lUGlja2VyLnZ1ZSdcbmltcG9ydCBJY29uIGZyb20gJy4vSWNvbi52dWUnXG5pbXBvcnQgeyBwYXJzZURhdGUgfSBmcm9tICcuLi91dGlscy9kYXRlLmpzJ1xuaW1wb3J0IHsgZ2V0U2VsZWN0aW9uLCBzZXRTZWxlY3Rpb24gfSBmcm9tICcuLi91dGlscy9zZWxlY3Rpb24uanMnXG5pbXBvcnQgeyBnZXRLZXlOYXZpZ2F0aW9uIH0gZnJvbSAnLi4vdXRpbHMvZXZlbnQuanMnXG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgY29tcG9uZW50czogeyBJbnB1dEZpZWxkLCBEYXRlUGlja2VyLCBUaW1lUGlja2VyLCBJY29uIH0sXG4gIGVtaXRzOiBbJ3VwZGF0ZTptb2RlbFZhbHVlJywgJ2NoYW5nZScsICdmb2N1cycsICdibHVyJ10sXG4gIGluaGVyaXRBdHRyczogZmFsc2UsXG5cbiAgcHJvcHM6IHtcbiAgICBtb2RlbFZhbHVlOiB7IHR5cGU6IERhdGUsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICB0cmFuc2l0aW9uOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogJ3NsaWRlJyB9LFxuICAgIHBsYWNlaG9sZGVyOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogbnVsbCB9LFxuICAgIGRpc2FibGVkOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgbG9jYWxlOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogJ2VuLVVTJyB9LFxuICAgIGZvcm1hdDogeyB0eXBlOiBPYmplY3QsIGRlZmF1bHQ6IG51bGwgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGN1cnJlbnRWYWx1ZTogdGhpcy5tb2RlbFZhbHVlLFxuICAgICAgc2hvd0RhdGU6IGZhbHNlLFxuICAgICAgc2hvd1RpbWU6IGZhbHNlLFxuICAgICAgaW5wdXRGb2N1c2VkOiBmYWxzZSxcbiAgICAgIGRhdGVGb2N1c2VkOiBmYWxzZSxcbiAgICAgIHRpbWVGb2N1c2VkOiBmYWxzZSxcbiAgICAgIGNsb3NlZE1vZGU6IG51bGxcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBhdHRyaWJ1dGVzKCkge1xuICAgICAgY29uc3QgeyB0cmFuc2l0aW9uLCBkaXNhYmxlZCwgbG9jYWxlLCBmb3JtYXRPcHRpb25zOiBmb3JtYXQgfSA9IHRoaXNcbiAgICAgIHJldHVybiB7IHRyYW5zaXRpb24sIGRpc2FibGVkLCBsb2NhbGUsIGZvcm1hdCB9XG4gICAgfSxcblxuICAgIGZvY3VzZWQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5pbnB1dEZvY3VzZWQgfHwgdGhpcy5zaG93RGF0ZSB8fCB0aGlzLnNob3dUaW1lXG4gICAgfSxcblxuICAgIGlucHV0KCkge1xuICAgICAgcmV0dXJuIHRoaXMuJHJlZnMuaW5wdXQuaW5wdXRcbiAgICB9LFxuXG4gICAgZm9ybWF0T3B0aW9ucygpIHtcbiAgICAgIHJldHVybiBhc3NpZ25EZWVwbHkoXG4gICAgICAgIHtcbiAgICAgICAgICBsb2NhbGU6IHRoaXMubG9jYWxlLFxuICAgICAgICAgIHRpbWU6IGRlZmF1bHRGb3JtYXRzLnRpbWUsXG4gICAgICAgICAgZGF0ZTogZGVmYXVsdEZvcm1hdHMuZGF0ZVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgZGF0ZToge1xuICAgICAgICAgICAgbW9udGg6ICdzaG9ydCcsXG4gICAgICAgICAgICBmb3JtYXQ6ICh2YWx1ZSwgdHlwZSwgb3B0aW9ucykgPT5cbiAgICAgICAgICAgICAgdHlwZSA9PT0gJ2xpdGVyYWwnICYmIC9cXGJhdFxcYi8udGVzdCh2YWx1ZSlcbiAgICAgICAgICAgICAgICA/ICcsICdcbiAgICAgICAgICAgICAgICA6IHRoaXMuZm9ybWF0Py5kYXRlPy5mb3JtYXQ/Lih2YWx1ZSwgdHlwZSwgb3B0aW9ucykgPz8gdmFsdWVcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHRoaXMuZm9ybWF0XG4gICAgICApXG4gICAgfSxcblxuICAgIHRpbWVJbmRleCgpIHtcbiAgICAgIGNvbnN0IHRleHQgPSB0aGlzLmN1cnJlbnRUZXh0XG4gICAgICBpZiAodGV4dCkge1xuICAgICAgICBjb25zdCB0aW1lID0gdGV4dC5tYXRjaCgvKFtcXFNdK1xccyopJC8pPy5bMV1cbiAgICAgICAgaWYgKHRpbWUpIHtcbiAgICAgICAgICByZXR1cm4gdGV4dC5sZW5ndGggLSB0aW1lLmxlbmd0aFxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbFxuICAgIH0sXG5cbiAgICBjdXJyZW50VGV4dDoge1xuICAgICAgZ2V0KCkge1xuICAgICAgICByZXR1cm4gZm9ybWF0KHRoaXMuY3VycmVudFZhbHVlLCB0aGlzLmZvcm1hdE9wdGlvbnMpIHx8ICcnXG4gICAgICB9LFxuXG4gICAgICBzZXQodmFsdWUpIHtcbiAgICAgICAgY29uc3QgZGF0ZSA9IHBhcnNlRGF0ZSh2YWx1ZSwgdGhpcy5mb3JtYXRPcHRpb25zKVxuICAgICAgICBpZiAoZGF0ZSkge1xuICAgICAgICAgIGNvbnN0IHNlbGVjdGlvbiA9IGdldFNlbGVjdGlvbih0aGlzLmlucHV0KVxuICAgICAgICAgIHRoaXMuY3VycmVudFZhbHVlID0gZGF0ZVxuICAgICAgICAgIHRoaXMuJG5leHRUaWNrKCgpID0+IHNldFNlbGVjdGlvbih0aGlzLmlucHV0LCBzZWxlY3Rpb24pKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIHdhdGNoOiB7XG4gICAgbW9kZWxWYWx1ZSh0bywgZnJvbSkge1xuICAgICAgaWYgKCt0byAhPT0gK2Zyb20pIHtcbiAgICAgICAgdGhpcy5jdXJyZW50VmFsdWUgPSB0b1xuICAgICAgfVxuICAgIH0sXG5cbiAgICBjdXJyZW50VmFsdWUodmFsdWUpIHtcbiAgICAgIGlmICgrdmFsdWUgIT09ICt0aGlzLm1vZGVsVmFsdWUpIHtcbiAgICAgICAgdGhpcy4kZW1pdCgndXBkYXRlOm1vZGVsVmFsdWUnLCB2YWx1ZSlcbiAgICAgICAgdGhpcy4kZW1pdCgnY2hhbmdlJywgdmFsdWUpXG4gICAgICB9XG4gICAgfSxcblxuICAgIGZvY3VzZWQodG8sIGZyb20pIHtcbiAgICAgIGlmICh0byBeIGZyb20pIHtcbiAgICAgICAgdGhpcy4kZW1pdCh0byA/ICdmb2N1cycgOiAnYmx1cicpXG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBvbkZvY3VzKGZvY3VzKSB7XG4gICAgICB0aGlzLmlucHV0Rm9jdXNlZCA9IGZvY3VzXG4gICAgICBpZiAoZm9jdXMpIHtcbiAgICAgICAgdGhpcy51cGRhdGVQb3B1cHMoKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5zaG93RGF0ZSA9IGZhbHNlXG4gICAgICAgIHRoaXMuc2hvd1RpbWUgPSBmYWxzZVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBvbk1vdXNlRG93bih0b2dnbGUpIHtcbiAgICAgIGlmICh0b2dnbGUgJiYgKHRoaXMuc2hvd0RhdGUgfHwgdGhpcy5zaG93VGltZSkpIHtcbiAgICAgICAgdGhpcy5zaG93RGF0ZSA9IGZhbHNlXG4gICAgICAgIHRoaXMuc2hvd1RpbWUgPSBmYWxzZVxuICAgICAgfSBlbHNlIGlmICghdGhpcy5kaXNhYmxlZCkge1xuICAgICAgICB0aGlzLmZvY3VzKClcbiAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHRoaXMudXBkYXRlUG9wdXBzKCkpXG4gICAgICB9XG4gICAgfSxcblxuICAgIG9uS2V5RG93bihldmVudCkge1xuICAgICAgY29uc3QgbW9kZSA9IHRoaXMuZ2V0TW9kZShldmVudClcbiAgICAgIHRoaXMuJHJlZnNbbW9kZV0ub25LZXlEb3duKGV2ZW50KVxuICAgICAgaWYgKGV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpIHtcbiAgICAgICAgdGhpcy5jbG9zZWRNb2RlID0gbW9kZVxuICAgICAgfSBlbHNlIGlmIChtb2RlICE9PSB0aGlzLmNsb3NlZE1vZGUpIHtcbiAgICAgICAgdGhpcy51cGRhdGVQb3B1cHMobW9kZSlcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZ2V0TW9kZShldmVudCA9IG51bGwpIHtcbiAgICAgIGNvbnN0IHsgc3RhcnQgfSA9IGdldFNlbGVjdGlvbih0aGlzLmlucHV0KVxuICAgICAgY29uc3QgeyBob3I6IHN0ZXAgfSA9IGdldEtleU5hdmlnYXRpb24oZXZlbnQpXG4gICAgICByZXR1cm4gdGhpcy50aW1lSW5kZXggPT09IG51bGwgfHwgc3RhcnQgKyBzdGVwIDwgdGhpcy50aW1lSW5kZXhcbiAgICAgICAgPyAnZGF0ZSdcbiAgICAgICAgOiAndGltZSdcbiAgICB9LFxuXG4gICAgdXBkYXRlUG9wdXBzKG1vZGUgPSB0aGlzLmdldE1vZGUoKSkge1xuICAgICAgaWYgKG1vZGUpIHtcbiAgICAgICAgdGhpcy5jbG9zZWRNb2RlID0gbnVsbFxuICAgICAgfVxuICAgICAgdGhpcy5zaG93RGF0ZSA9IG1vZGUgPT09ICdkYXRlJ1xuICAgICAgdGhpcy5zaG93VGltZSA9IG1vZGUgPT09ICd0aW1lJ1xuICAgIH0sXG5cbiAgICBmb2N1cygpIHtcbiAgICAgIHRoaXMuaW5wdXQuZm9jdXMoKVxuICAgIH0sXG5cbiAgICBibHVyKCkge1xuICAgICAgdGhpcy5pbnB1dC5ibHVyKClcbiAgICB9XG4gIH1cbn1cbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5cbi5kaXRvLWRhdGUtdGltZS1waWNrZXIge1xuICAmX19pbm5lciB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgfVxuXG4gICZfX2lucHV0IHtcbiAgICBmbGV4OiAxO1xuICAgIGZvbnQtdmFyaWFudC1udW1lcmljOiB0YWJ1bGFyLW51bXM7XG4gICAgbWluLXdpZHRoOiAxMmVtO1xuICB9XG5cbiAgLmRpdG8tZGF0ZS1waWNrZXIsXG4gIC5kaXRvLXRpbWUtcGlja2VyIHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCI8IS0tIGVzbGludC1kaXNhYmxlIHZ1ZS9uby10ZW1wbGF0ZS1zaGFkb3cgLS0+XG48dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuLmRpdG8tcGFnaW5hdGlvblxuICAuZGl0by1wYWdpbmF0aW9uLXRvdGFsKFxuICAgIHYtaWY9XCJzaG93VG90YWxcIlxuICApXG4gICAgdGVtcGxhdGUoXG4gICAgICB2LWlmPVwidG90YWwgPiAwXCJcbiAgICApIHt7IGZpcnN0IH19IOKAkyB7eyBsYXN0IH19IC8ge3sgdG90YWwgfX1cbiAgLmRpdG8tYnV0dG9ucy5kaXRvLWJ1dHRvbnMtcm91bmQoXG4gICAgdi1pZj1cIm51bVBhZ2VzID4gMVwiXG4gIClcbiAgICBidXR0b24uZGl0by1idXR0b24oXG4gICAgICB2LWZvcj1cImJ1dHRvbiBpbiBidXR0b25zXCJcbiAgICAgIDpjbGFzcz1cImdldEJ1dHRvbkNsYXNzZXMoYnV0dG9uKVwiXG4gICAgICA6ZGlzYWJsZWQ9XCJidXR0b24uZGlzYWJsZWRcIlxuICAgICAgQGNsaWNrPVwib25DbGlja0J1dHRvbihidXR0b24pXCJcbiAgICApXG4gICAgICBzcGFuKFxuICAgICAgICB2LWlmPVwiYnV0dG9uLnRleHRcIlxuICAgICAgKSB7eyBidXR0b24udGV4dCB9fVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgZW1pdHM6IFsndXBkYXRlOnBhZ2UnXSxcblxuICBwcm9wczoge1xuICAgIHRvdGFsOiB7IHR5cGU6IE51bWJlciwgZGVmYXVsdDogMCB9LFxuICAgIHBhZ2U6IHsgdHlwZTogTnVtYmVyLCBkZWZhdWx0OiAxIH0sXG4gICAgcGFnZVNpemU6IHsgdHlwZTogTnVtYmVyLCBkZWZhdWx0OiAxMCB9LFxuICAgIHNob3dUb3RhbDogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiB0cnVlIH1cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBzaG93UHJldjogdHJ1ZSxcbiAgICAgIHNob3dOZXh0OiB0cnVlLFxuICAgICAgY3VycmVudFBhZ2U6IHRoaXMucGFnZVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIGZpcnN0KCkge1xuICAgICAgcmV0dXJuICh0aGlzLmN1cnJlbnRQYWdlIC0gMSkgKiB0aGlzLnBhZ2VTaXplICsgMVxuICAgIH0sXG5cbiAgICBsYXN0KCkge1xuICAgICAgcmV0dXJuIE1hdGgubWluKHRoaXMuZmlyc3QgKyB0aGlzLnBhZ2VTaXplIC0gMSwgdGhpcy50b3RhbClcbiAgICB9LFxuXG4gICAgbnVtUGFnZXMoKSB7XG4gICAgICByZXR1cm4gTWF0aC5jZWlsKHRoaXMudG90YWwgLyB0aGlzLnBhZ2VTaXplKVxuICAgIH0sXG5cbiAgICBidXR0b25zKCkge1xuICAgICAgY29uc3QgeyBzaG93UHJldiwgc2hvd05leHQsIGN1cnJlbnRQYWdlLCBudW1QYWdlcyB9ID0gdGhpc1xuICAgICAgY29uc3Qgc2hvd0xlbmd0aCA9IHNob3dQcmV2ICsgc2hvd05leHQgKyAxXG5cbiAgICAgIGxldCBzdGFydCA9IDFcbiAgICAgIGxldCBlbmQgPSAxXG4gICAgICBpZiAobnVtUGFnZXMgPD0gc2hvd0xlbmd0aCkge1xuICAgICAgICBlbmQgPSBudW1QYWdlc1xuICAgICAgfSBlbHNlIGlmIChjdXJyZW50UGFnZSA8PSBzaG93UHJldiArIDEpIHtcbiAgICAgICAgZW5kID0gc2hvd0xlbmd0aFxuICAgICAgfSBlbHNlIGlmIChjdXJyZW50UGFnZSA+PSBudW1QYWdlcyAtIHNob3dOZXh0KSB7XG4gICAgICAgIGVuZCA9IG51bVBhZ2VzXG4gICAgICAgIHN0YXJ0ID0gbnVtUGFnZXMgLSBzaG93TGVuZ3RoICsgMVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3RhcnQgPSBjdXJyZW50UGFnZSAtIHNob3dQcmV2XG4gICAgICAgIGVuZCA9IGN1cnJlbnRQYWdlICsgc2hvd05leHRcbiAgICAgIH1cblxuICAgICAgY29uc3QgYnV0dG9ucyA9IFtdXG4gICAgICBidXR0b25zLnB1c2goe1xuICAgICAgICBpbmRleDogY3VycmVudFBhZ2UgLSAxLFxuICAgICAgICB0eXBlOiAncHJldicsXG4gICAgICAgIGRpc2FibGVkOiBjdXJyZW50UGFnZSA8PSAxXG4gICAgICB9KVxuICAgICAgaWYgKHN0YXJ0ID49IDIpIHtcbiAgICAgICAgYnV0dG9ucy5wdXNoKHsgaW5kZXg6IDEsIHRleHQ6IDEgfSlcbiAgICAgIH1cbiAgICAgIGlmIChzdGFydCA+IDIpIHtcbiAgICAgICAgYnV0dG9ucy5wdXNoKHtcbiAgICAgICAgICBpbmRleDogTWF0aC5tYXgoMSwgY3VycmVudFBhZ2UgLSAxMCksXG4gICAgICAgICAgdHlwZTogJ2VsbGlwc2lzLXByZXYnXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgICBmb3IgKGxldCBpID0gc3RhcnQ7IGkgPD0gZW5kOyBpKyspIHtcbiAgICAgICAgYnV0dG9ucy5wdXNoKHtcbiAgICAgICAgICBpbmRleDogaSxcbiAgICAgICAgICB0ZXh0OiBpLFxuICAgICAgICAgIGFjdGl2ZTogaSA9PT0gY3VycmVudFBhZ2VcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICAgIGlmIChlbmQgPCBudW1QYWdlcyAtIDEpIHtcbiAgICAgICAgYnV0dG9ucy5wdXNoKHtcbiAgICAgICAgICBpbmRleDogTWF0aC5taW4obnVtUGFnZXMsIGN1cnJlbnRQYWdlICsgMTApLFxuICAgICAgICAgIHR5cGU6ICdlbGxpcHNpcy1uZXh0J1xuICAgICAgICB9KVxuICAgICAgfVxuICAgICAgaWYgKGVuZCA8PSBudW1QYWdlcyAtIDEpIHtcbiAgICAgICAgYnV0dG9ucy5wdXNoKHsgaW5kZXg6IG51bVBhZ2VzLCB0ZXh0OiBudW1QYWdlcyB9KVxuICAgICAgfVxuICAgICAgYnV0dG9ucy5wdXNoKHtcbiAgICAgICAgaW5kZXg6IGN1cnJlbnRQYWdlICsgMSxcbiAgICAgICAgdHlwZTogJ25leHQnLFxuICAgICAgICBkaXNhYmxlZDogY3VycmVudFBhZ2UgPj0gbnVtUGFnZXNcbiAgICAgIH0pXG5cbiAgICAgIHJldHVybiBidXR0b25zXG4gICAgfVxuICB9LFxuXG4gIHdhdGNoOiB7XG4gICAgcGFnZShwYWdlKSB7XG4gICAgICB0aGlzLmN1cnJlbnRQYWdlID0gcGFnZVxuICAgIH0sXG5cbiAgICBwYWdlU2l6ZSgpIHtcbiAgICAgIGlmICh0aGlzLmN1cnJlbnRQYWdlID4gdGhpcy5udW1QYWdlcykge1xuICAgICAgICB0aGlzLmN1cnJlbnRQYWdlID0gdGhpcy5udW1QYWdlc1xuICAgICAgfVxuICAgIH0sXG5cbiAgICBjdXJyZW50UGFnZSh0bywgZnJvbSkge1xuICAgICAgaWYgKHRvICE9PSBmcm9tKSB7XG4gICAgICAgIHRoaXMuJGVtaXQoJ3VwZGF0ZTpwYWdlJywgdG8pXG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIGNyZWF0ZWQoKSB7XG4gICAgdGhpcy5jdXJyZW50UGFnZSA9IHRoaXMucGFnZVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBnZXRCdXR0b25DbGFzc2VzKGJ1dHRvbikge1xuICAgICAgY29uc3QgY2xhc3NlcyA9IHtcbiAgICAgICAgJ2RpdG8tc2VsZWN0ZWQnOiBidXR0b24uYWN0aXZlXG4gICAgICB9XG4gICAgICBpZiAoYnV0dG9uLnR5cGUpIHtcbiAgICAgICAgY2xhc3Nlc1tgZGl0by1idXR0b24tJHtidXR0b24udHlwZX1gXSA9IHRydWVcbiAgICAgIH1cbiAgICAgIHJldHVybiBjbGFzc2VzXG4gICAgfSxcblxuICAgIG9uQ2xpY2tCdXR0b24oYnV0dG9uKSB7XG4gICAgICBpZiAoXG4gICAgICAgIGJ1dHRvbi5pbmRleCAmJlxuICAgICAgICAhYnV0dG9uLmRpc2FibGVkICYmXG4gICAgICAgIGJ1dHRvbi5pbmRleCAhPT0gdGhpcy5jdXJyZW50UGFnZVxuICAgICAgKSB7XG4gICAgICAgIHRoaXMuY3VycmVudFBhZ2UgPSBidXR0b24uaW5kZXhcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5cbi5kaXRvLXBhZ2luYXRpb24ge1xuICBkaXNwbGF5OiBmbGV4O1xuXG4gIC5kaXRvLXBhZ2luYXRpb24tdG90YWwge1xuICAgIEBpbmNsdWRlIGVsbGlwc2lzO1xuXG4gICAgbWFyZ2luOiAwIDAuNWVtO1xuICAgIGxpbmUtaGVpZ2h0OiAkaW5wdXQtaGVpZ2h0O1xuICB9XG5cbiAgLmRpdG8tYnV0dG9uIHtcbiAgICB0cmFuc2l0aW9uOlxuICAgICAgYWxsIDAuM3MgZWFzZSxcbiAgICAgIGNvbG9yIDBzLFxuICAgICAgYmFja2dyb3VuZCAwcyxcbiAgICAgIGJvcmRlciAwcztcbiAgICBmb250LXZhcmlhbnQtbnVtZXJpYzogdGFidWxhci1udW1zO1xuICAgIHBhZGRpbmc6IDAgMC41ZW07XG5cbiAgICAmLXByZXYsXG4gICAgJi1uZXh0IHtcbiAgICAgICY6OmJlZm9yZSB7XG4gICAgICAgIEBleHRlbmQgJWljb24tYXJyb3c7XG4gICAgICB9XG4gICAgfVxuXG4gICAgJi1wcmV2OjpiZWZvcmUge1xuICAgICAgdHJhbnNmb3JtOiBzY2FsZVgoLTEpO1xuICAgIH1cblxuICAgICYtZWxsaXBzaXMtcHJldixcbiAgICAmLWVsbGlwc2lzLW5leHQge1xuICAgICAgJjo6YmVmb3JlIHtcbiAgICAgICAgQGV4dGVuZCAlaWNvbi1lbGxpcHNpcztcbiAgICAgIH1cblxuICAgICAgJjpob3Zlcjo6YmVmb3JlIHtcbiAgICAgICAgQGV4dGVuZCAlaWNvbi1jaGV2cm9ucztcbiAgICAgIH1cblxuICAgICAgYmFja2dyb3VuZDogbm9uZTtcbiAgICAgIGJvcmRlcjogMDtcbiAgICAgIHBhZGRpbmc6IDA7XG4gICAgICBtYXJnaW46IDA7XG4gICAgICBjb2xvcjogJGNvbG9yLXRleHQ7XG5cbiAgICAgICY6Zm9jdXMge1xuICAgICAgICBjb2xvcjogJGNvbG9yLWFjdGl2ZTtcbiAgICAgIH1cblxuICAgICAgJjphY3RpdmUge1xuICAgICAgICBib3gtc2hhZG93OiBub25lO1xuICAgICAgfVxuICAgIH1cblxuICAgICYtZWxsaXBzaXMtcHJldjo6YmVmb3JlIHtcbiAgICAgIHRyYW5zZm9ybTogc2NhbGVYKC0xKTtcbiAgICB9XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuLmRpdG8tc3dpdGNoKFxuICA6Y2xhc3M9XCJjbGFzc2VzXCJcbiAgOnN0eWxlPVwic3R5bGVzXCJcbilcbiAgLmRpdG8tc3dpdGNoLXBhbmVcbiAgICBpbnB1dChcbiAgICAgIDppZD1cImlkXCJcbiAgICAgIHJlZj1cImlucHV0XCJcbiAgICAgIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICAgICAgdi1tb2RlbD1cImNoZWNrZWRcIlxuICAgICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgIDpuYW1lPVwibmFtZVwiXG4gICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgKVxuICAgIC5kaXRvLXN3aXRjaC1idXR0b25cbiAgICBzcGFuLmRpdG8tc3dpdGNoLWxhYmVsKFxuICAgICAgdi1pZj1cImxhYmVsc1wiXG4gICAgKVxuICAgICAgc2xvdChcbiAgICAgICAgdi1pZj1cImNoZWNrZWRcIlxuICAgICAgICBuYW1lPVwiY2hlY2tlZFwiXG4gICAgICApIHt7IGxhYmVscy5jaGVja2VkIHx8ICdvbicgfX1cbiAgICAgIHNsb3QoXG4gICAgICAgIHYtZWxzZVxuICAgICAgICBuYW1lPVwidW5jaGVja2VkXCJcbiAgICAgICkge3sgbGFiZWxzLnVuY2hlY2tlZCB8fCAnb2ZmJyB9fVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgZW1pdHM6IFsndXBkYXRlOm1vZGVsVmFsdWUnLCAnY2hhbmdlJ10sXG4gIGluaGVyaXRBdHRyczogZmFsc2UsXG5cbiAgcHJvcHM6IHtcbiAgICBtb2RlbFZhbHVlOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgaWQ6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgbmFtZTogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBkaXNhYmxlZDogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGxhYmVsczogeyB0eXBlOiBbT2JqZWN0LCBCb29sZWFuXSwgZGVmYXVsdDogZmFsc2UgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGNoZWNrZWQ6IHRoaXMubW9kZWxWYWx1ZVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIGNsYXNzZXMoKSB7XG4gICAgICByZXR1cm4gW1xuICAgICAgICB0aGlzLiRhdHRycy5jbGFzcyxcbiAgICAgICAge1xuICAgICAgICAgICdkaXRvLWNoZWNrZWQnOiB0aGlzLmNoZWNrZWQsXG4gICAgICAgICAgJ2RpdG8tZGlzYWJsZWQnOiB0aGlzLmRpc2FibGVkXG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9LFxuXG4gICAgc3R5bGVzKCkge1xuICAgICAgY29uc3QgeyBsYWJlbHM6IHsgY2hlY2tlZCwgdW5jaGVja2VkIH0gPSB7fSB9ID0gdGhpc1xuICAgICAgLy8gQ2FsY3VsYXRlIGAtLXN3aXRjaC13aWR0aGAgaW4gYHJlbWAsIGJhc2VkIG9uIGxhYmVsIGxlbmd0aC5cbiAgICAgIGNvbnN0IGxlbmd0aCA9IE1hdGgubWF4KDAsIGNoZWNrZWQ/Lmxlbmd0aCwgdW5jaGVja2VkPy5sZW5ndGgpXG4gICAgICByZXR1cm4ge1xuICAgICAgICAnLS1zd2l0Y2gtd2lkdGgnOiBsZW5ndGggPyBgJHtsZW5ndGggKiAxLjV9cmVtYCA6IG51bGxcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYXR0cmlidXRlcygpIHtcbiAgICAgIGNvbnN0IHsgY2xhc3M6IF8sIC4uLmF0dHJpYnV0ZXMgfSA9IHRoaXMuJGF0dHJzXG4gICAgICByZXR1cm4gYXR0cmlidXRlc1xuICAgIH1cbiAgfSxcblxuICB3YXRjaDoge1xuICAgIG1vZGVsVmFsdWUobW9kZWxWYWx1ZSkge1xuICAgICAgdGhpcy5jaGVja2VkID0gbW9kZWxWYWx1ZVxuICAgIH0sXG5cbiAgICBjaGVja2VkKGNoZWNrZWQpIHtcbiAgICAgIGlmIChjaGVja2VkICE9PSB0aGlzLm1vZGVsVmFsdWUpIHtcbiAgICAgICAgdGhpcy4kZW1pdCgndXBkYXRlOm1vZGVsVmFsdWUnLCBjaGVja2VkKVxuICAgICAgICB0aGlzLiRlbWl0KCdjaGFuZ2UnLCBjaGVja2VkKVxuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZm9jdXMoKSB7XG4gICAgICB0aGlzLiRyZWZzLmlucHV0LmZvY3VzKClcbiAgICB9XG4gIH1cbn1cbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5cbi5kaXRvLXN3aXRjaCB7XG4gIC8vIFVzZSB3aG9sZSBtdWx0aXBsZXMgb2YgYHJlbWAgZm9yIHNpemVzIGFuZCBgcHhgIG1hcmdpbnMvcGFkZGluZyBhbG9uZ1xuICAvLyB3aXRoIGBjYWxjKClgIHRvIGVuZCB1cCB3aXRoIGV2ZW4gcGl4ZWwgc2l6ZXMuXG4gIC0tc3dpdGNoLXdpZHRoOiA0ZW07XG4gIC0tc3dpdGNoLWhlaWdodDogMmVtO1xuICAtLXN3aXRjaC1tYXJnaW46IDJweDtcbiAgLS1zd2l0Y2gtcGFkZGluZzogM3B4O1xuICAtLXN3aXRjaC1zcGVlZDogMzAwbXM7XG4gIC0tbGFiZWwtbWFyZ2luOiAwLjVlbTtcbiAgLS13aWR0aDogY2FsYyh2YXIoLS1zd2l0Y2gtd2lkdGgpIC0gMiAqIHZhcigtLXN3aXRjaC1tYXJnaW4pKTtcbiAgLS1oZWlnaHQ6IGNhbGModmFyKC0tc3dpdGNoLWhlaWdodCkgLSAyICogdmFyKC0tc3dpdGNoLW1hcmdpbikpO1xuICAtLW9mZnNldDogY2FsYyh2YXIoLS13aWR0aCkgLSB2YXIoLS1oZWlnaHQpKTtcblxuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgaGVpZ2h0OiB2YXIoLS1zd2l0Y2gtaGVpZ2h0KTtcbiAgLy8gVG8gbWFrZSBpbmxpbmUgbGFiZWxzIGFwcGVhciBvbiBjb25zaXN0ZW50IGJhc2VsaW5lOlxuICB2ZXJ0aWNhbC1hbGlnbjogYm90dG9tO1xuICBAaW5jbHVkZSB1c2VyLXNlbGVjdChub25lKTtcblxuICAuZGl0by1zd2l0Y2gtcGFuZSB7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIHdpZHRoOiB2YXIoLS13aWR0aCk7XG4gICAgaGVpZ2h0OiB2YXIoLS1oZWlnaHQpO1xuICB9XG5cbiAgLmRpdG8tc3dpdGNoLXBhbmUsXG4gIC5kaXRvLXN3aXRjaC1sYWJlbCB7XG4gICAgdG9wOiA1MCU7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC01MCUpO1xuICB9XG5cbiAgaW5wdXQge1xuICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICBhcHBlYXJhbmNlOiBub25lO1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIGhlaWdodDogMTAwJTtcbiAgICBib3JkZXItcmFkaXVzOiAxZW07XG4gICAgYmFja2dyb3VuZDogJGNvbG9yLWxpZ2h0O1xuICAgIHRyYW5zaXRpb246XG4gICAgICBib3JkZXItY29sb3IgMC4zcyxcbiAgICAgIGJhY2tncm91bmQtY29sb3IgMC4zcztcbiAgfVxuXG4gIC5kaXRvLXN3aXRjaC1idXR0b24ge1xuICAgIC0tc2l6ZTogY2FsYyh2YXIoLS1oZWlnaHQpIC0gMiAqIHZhcigtLXN3aXRjaC1wYWRkaW5nKSk7XG5cbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgdG9wOiB2YXIoLS1zd2l0Y2gtcGFkZGluZyk7XG4gICAgbGVmdDogdmFyKC0tc3dpdGNoLXBhZGRpbmcpO1xuICAgIHdpZHRoOiB2YXIoLS1zaXplKTtcbiAgICBoZWlnaHQ6IHZhcigtLXNpemUpO1xuICAgIGJvcmRlci1yYWRpdXM6IGNhbGModmFyKC0tc2l6ZSkgLyAyKTtcbiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgIGJhY2tncm91bmQ6ICRjb2xvci13aGl0ZTtcbiAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gdmFyKC0tc3dpdGNoLXNwZWVkKTtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMCk7XG4gIH1cblxuICAuZGl0by1zd2l0Y2gtYnV0dG9uLFxuICAuZGl0by1zd2l0Y2gtbGFiZWwge1xuICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xuICB9XG5cbiAgLmRpdG8tc3dpdGNoLWxhYmVsIHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgcmlnaHQ6IHZhcigtLWxhYmVsLW1hcmdpbik7XG4gICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgICBjb2xvcjogJGNvbG9yLXdoaXRlO1xuICB9XG5cbiAgJi5kaXRvLWNoZWNrZWQge1xuICAgIGlucHV0IHtcbiAgICAgIGJhY2tncm91bmQ6ICRjb2xvci1hY3RpdmU7XG4gICAgfVxuXG4gICAgLmRpdG8tc3dpdGNoLWJ1dHRvbiB7XG4gICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgodmFyKC0tb2Zmc2V0KSk7XG4gICAgfVxuXG4gICAgLmRpdG8tc3dpdGNoLWxhYmVsIHtcbiAgICAgIGxlZnQ6IHZhcigtLWxhYmVsLW1hcmdpbik7XG4gICAgICByaWdodDogdW5zZXQ7XG4gICAgfVxuICB9XG5cbiAgJi5kaXRvLWRpc2FibGVkIHtcbiAgICBAZXh0ZW5kICVidXR0b24tZGlzYWJsZWQ7XG4gIH1cblxuICAmOmZvY3VzLXdpdGhpbjpub3QoOmhvdmVyKSB7XG4gICAgLmRpdG8tc3dpdGNoLWJ1dHRvbiB7XG4gICAgICBib3gtc2hhZG93OiAkc2hhZG93LWZvY3VzO1xuICAgIH1cbiAgfVxufVxuPC9zdHlsZT5cbiIsIjxzY3JpcHQ+XG5pbXBvcnQgeyBoIGFzIGNyZWF0ZUVsZW1lbnQsIFRyYW5zaXRpb24gfSBmcm9tICd2dWUnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5mdW5jdGlvbiBUcmFuc2l0aW9uSGVpZ2h0KHsgZW5hYmxlZCB9LCB7IHNsb3RzIH0pIHtcbiAgcmV0dXJuIGVuYWJsZWRcbiAgICA/IGNyZWF0ZUVsZW1lbnQoVHJhbnNpdGlvbiwgcHJvcHMsIHNsb3RzKVxuICAgIDogc2xvdHMuZGVmYXVsdCgpXG59XG5cblRyYW5zaXRpb25IZWlnaHQucHJvcHMgPSB7XG4gIGVuYWJsZWQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogdHJ1ZSB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFRyYW5zaXRpb25IZWlnaHRcblxuY29uc3Qgc2V0U3R5bGUgPSAoZWxlbWVudCwgc3R5bGUpID0+IE9iamVjdC5hc3NpZ24oZWxlbWVudC5zdHlsZSwgc3R5bGUpXG5cbmNvbnN0IG5leHRUaW1lb3V0ID0gY2FsbGJhY2sgPT4gc2V0VGltZW91dChjYWxsYmFjaywgMClcblxuLy8gRm9yY2UgcmVwYWludCB0byBtYWtlIHN1cmUgdGhlIGFuaW1hdGlvbiBpcyB0cmlnZ2VyZWQgY29ycmVjdGx5LlxuY29uc3QgZm9yY2VSZXBhaW50ID0gZWxlbWVudCA9PiBnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpLmhlaWdodFxuXG5jb25zdCBwcm9wcyA9IHtcbiAgbmFtZTogJ2RpdG8taGVpZ2h0JyxcblxuICBvbkFmdGVyRW50ZXIoZWxlbWVudCkge1xuICAgIC8vIEEgdGltZW91dCBiZWZvcmUgc2V0dGluZyBzdHlsZSBpcyBvbmx5IHJlYWxseSBuZWVkZWQgYWZ0ZXIgY2FsbHMgdG9cbiAgICAvLyBgZm9yY2VSZXBhaW50KClgLCBidXQgdXNpbmcgb25lIGhlcmUgdG9vIHByZXNlcnZlcyBleGVjdXRpb24gc2VxdWVuY2Ugc29cbiAgICAvLyB0aGF0IHRoZSBjYWxsIGZyb20gYGVudGVyKClgIGNhbiBuZXZlciBvdXRydW4gdGhlIG9uZSBmcm9tIGBhZnRlckVudGVyKClgXG4gICAgbmV4dFRpbWVvdXQoKCkgPT4gc2V0U3R5bGUoZWxlbWVudCwgeyBoZWlnaHQ6IG51bGwgfSkpXG4gIH0sXG5cbiAgb25FbnRlcihlbGVtZW50KSB7XG4gICAgLy8gRm9yIHNvbWUgcmVhc29uIHdlJ3JlIGdldHRpbmcgdHdvIGBvbkVudGVyKClgIGNhbGxzIHBlciB0cmFuc2l0aW9uLFxuICAgIC8vIHNvIHdlIG5lZWQgdG8gaWdub3JlIHRoZSBzZWNvbmQgb25lLiBUaGlzIG1pZ2h0IGJlIGxpbmtlZCB0byB0aGUgdXNlXG4gICAgLy8gb2YgYG5leHRUaW1lb3V0KClgLCB3aGljaCBpcyByZXF1aXJlZCB0byBnZXQgdGhlIGNvcnJlY3QgdmFsdWUgZm9yXG4gICAgLy8gYGhlaWdodGAsIGJhc2VkIG9uIGAmLS1sYWJlbC12ZXJ0aWNhbGAgY2FsY3VsYXRpb25zLlxuICAgIGNvbnN0IHsgd2lkdGggfSA9IGdldENvbXB1dGVkU3R5bGUoZWxlbWVudClcbiAgICBzZXRTdHlsZShlbGVtZW50LCB7XG4gICAgICB3aWR0aCxcbiAgICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICAgICAgdmlzaWJpbGl0eTogJ2hpZGRlbicsXG4gICAgICBoZWlnaHQ6ICdhdXRvJ1xuICAgIH0pXG4gICAgbmV4dFRpbWVvdXQoKCkgPT4ge1xuICAgICAgY29uc3QgeyBoZWlnaHQgfSA9IGdldENvbXB1dGVkU3R5bGUoZWxlbWVudClcbiAgICAgIHNldFN0eWxlKGVsZW1lbnQsIHtcbiAgICAgICAgd2lkdGg6IG51bGwsXG4gICAgICAgIHBvc2l0aW9uOiBudWxsLFxuICAgICAgICB2aXNpYmlsaXR5OiBudWxsLFxuICAgICAgICBoZWlnaHQ6IDBcbiAgICAgIH0pXG4gICAgICBmb3JjZVJlcGFpbnQoZWxlbWVudClcbiAgICAgIG5leHRUaW1lb3V0KCgpID0+IHNldFN0eWxlKGVsZW1lbnQsIHsgaGVpZ2h0IH0pKVxuICAgIH0pXG4gIH0sXG5cbiAgb25MZWF2ZShlbGVtZW50KSB7XG4gICAgY29uc3QgeyBoZWlnaHQgfSA9IGdldENvbXB1dGVkU3R5bGUoZWxlbWVudClcbiAgICBzZXRTdHlsZShlbGVtZW50LCB7IGhlaWdodCB9KVxuICAgIGZvcmNlUmVwYWludChlbGVtZW50KVxuICAgIG5leHRUaW1lb3V0KCgpID0+IHNldFN0eWxlKGVsZW1lbnQsIHsgaGVpZ2h0OiAwIH0pKVxuICB9XG59XG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4kZHVyYXRpb246IDAuMTVzO1xuXG4uZGl0by1oZWlnaHQtZW50ZXItYWN0aXZlLFxuLmRpdG8taGVpZ2h0LWxlYXZlLWFjdGl2ZSB7XG4gIHRyYW5zaXRpb246IGhlaWdodCAkZHVyYXRpb24gJGVhc2Utb3V0LXF1YXJ0O1xuICBvdmVyZmxvdzogaGlkZGVuO1xufVxuXG4uZGl0by1oZWlnaHQtZW50ZXItYWN0aXZlIHtcbiAgYW5pbWF0aW9uOiBkaXRvLXNsaWRlLWVudGVyICRkdXJhdGlvbiAkZWFzZS1vdXQtcXVhcnQ7XG59XG5cbi5kaXRvLWhlaWdodC1sZWF2ZS1hY3RpdmUge1xuICBhbmltYXRpb246IGRpdG8tc2xpZGUtbGVhdmUgJGR1cmF0aW9uICRlYXNlLW91dC1xdWFydDtcbn1cblxuLmRpdG8taGVpZ2h0LWVudGVyLWZyb20sXG4uZGl0by1oZWlnaHQtbGVhdmUtdG8ge1xuICBoZWlnaHQ6IDA7XG59XG48L3N0eWxlPlxuIiwiaW1wb3J0IHsgdXNlU2xvdHMsIENvbW1lbnQgfSBmcm9tICd2dWUnXG5pbXBvcnQgeyBpc1N0cmluZywgYXNBcnJheSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbmV4cG9ydCBmdW5jdGlvbiBoYXNWTm9kZUNvbnRlbnQodm5vZGUpIHtcbiAgcmV0dXJuIHZub2RlICYmIGFzQXJyYXkodm5vZGUpLnNvbWUodm5vZGUgPT4gdm5vZGUudHlwZSAhPT0gQ29tbWVudClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGhhc1Nsb3RDb250ZW50KHNsb3QsIHByb3BzID0ge30pIHtcbiAgc2xvdCA9IGlzU3RyaW5nKHNsb3QpID8gdXNlU2xvdHMoKVtzbG90XSA6IHNsb3RcbiAgcmV0dXJuIGhhc1ZOb2RlQ29udGVudChzbG90Py4ocHJvcHMpKVxufVxuIiwiaW1wb3J0IHsgaXNPYmplY3QgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0IHsgYWRkRXZlbnRzIH0gZnJvbSAnQGRpdG9qcy91aS9zcmMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCB7XG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGRvbUhhbmRsZXJzOiBbXVxuICAgIH1cbiAgfSxcblxuICB1bm1vdW50ZWQoKSB7XG4gICAgZm9yIChjb25zdCB7IHJlbW92ZSB9IG9mIHRoaXMuZG9tSGFuZGxlcnMpIHtcbiAgICAgIHJlbW92ZSgpXG4gICAgfVxuICAgIHRoaXMuZG9tSGFuZGxlcnMgPSBbXVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBkb21PbihlbGVtZW50LCB0eXBlLCBoYW5kbGVyKSB7XG4gICAgICBjb25zdCByZXN1bHQgPSBhZGRFdmVudHMoXG4gICAgICAgIGVsZW1lbnQsXG4gICAgICAgIGlzT2JqZWN0KHR5cGUpID8gdHlwZSA6IHsgW3R5cGVdOiBoYW5kbGVyIH1cbiAgICAgIClcbiAgICAgIHRoaXMuZG9tSGFuZGxlcnMucHVzaChyZXN1bHQpXG4gICAgICByZXR1cm4gcmVzdWx0XG4gICAgfVxuICB9XG59XG4iLCJleHBvcnQgZGVmYXVsdCBjbGFzcyBEaXRvVXNlciB7XG4gIGhhc1JvbGUoLi4ucm9sZXMpIHtcbiAgICBpZiAodGhpcy5yb2xlcykge1xuICAgICAgZm9yIChjb25zdCByb2xlIG9mIHJvbGVzKSB7XG4gICAgICAgIGlmICh0aGlzLnJvbGVzLmluY2x1ZGVzKHJvbGUpKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2VcbiAgfVxufVxuIiwiLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IHtcbiAgcHJvdmlkZSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgJHNjaGVtYVBhcmVudENvbXBvbmVudDogKCkgPT4gdGhpc1xuICAgIH1cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBzY2hlbWFDb21wb25lbnRzOiBbXVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIG1haW5TY2hlbWFDb21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWFDb21wb25lbnRzWzBdXG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICAvLyBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgYERpdG9TY2hlbWEuY3JlYXRlZCgpL3VubW91bnRlZCgpYCBvbiBpdHNcbiAgICAvLyBgJHNjaGVtYVBhcmVudENvbXBvbmVudGAsIGlmIHRoZSBwYXJlbnQgdXNlcyB0aGUgYFNjaGVtYVBhcmVudE1peGluYDpcbiAgICBfcmVnaXN0ZXJTY2hlbWFDb21wb25lbnQoc2NoZW1hQ29tcG9uZW50LCBhZGQpIHtcbiAgICAgIGNvbnN0IHsgc2NoZW1hQ29tcG9uZW50cyB9ID0gdGhpc1xuICAgICAgaWYgKGFkZCkge1xuICAgICAgICBzY2hlbWFDb21wb25lbnRzLnB1c2goc2NoZW1hQ29tcG9uZW50KVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2NoZW1hQ29tcG9uZW50cy5zcGxpY2Uoc2NoZW1hQ29tcG9uZW50cy5pbmRleE9mKHNjaGVtYUNvbXBvbmVudCksIDEpXG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iLCJpbXBvcnQgU2NoZW1hUGFyZW50TWl4aW4gZnJvbSAnLi9TY2hlbWFQYXJlbnRNaXhpbi5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IHtcbiAgbWl4aW5zOiBbU2NoZW1hUGFyZW50TWl4aW5dLFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgZXJyb3JzKCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hQ29tcG9uZW50cy5mbGF0TWFwKCh7IGVycm9ycyB9KSA9PiBlcnJvcnMgfHwgW10pXG4gICAgfSxcblxuICAgIGlzVG91Y2hlZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYUNvbXBvbmVudHMuc29tZShpdCA9PiBpdC5pc1RvdWNoZWQpXG4gICAgfSxcblxuICAgIGlzRGlydHkoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWFDb21wb25lbnRzLnNvbWUoaXQgPT4gaXQuaXNEaXJ0eSlcbiAgICB9LFxuXG4gICAgaXNWYWxpZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYUNvbXBvbmVudHMuZXZlcnkoaXQgPT4gaXQuaXNWYWxpZClcbiAgICB9LFxuXG4gICAgaXNWYWxpZGF0ZWQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWFDb21wb25lbnRzLmV2ZXJ5KGl0ID0+IGl0LmlzVmFsaWQpXG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICB2YWxpZGF0ZUFsbChtYXRjaCwgbm90aWZ5ID0gdHJ1ZSkge1xuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hQ29tcG9uZW50cy5ldmVyeShpdCA9PiBpdC52YWxpZGF0ZUFsbChtYXRjaCwgbm90aWZ5KSlcbiAgICB9LFxuXG4gICAgdmVyaWZ5QWxsKG1hdGNoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWFDb21wb25lbnRzLmV2ZXJ5KGl0ID0+IGl0LnZlcmlmeUFsbChtYXRjaCkpXG4gICAgfSxcblxuICAgIHJlc2V0VmFsaWRhdGlvbigpIHtcbiAgICAgIHRoaXMuc2NoZW1hQ29tcG9uZW50cy5mb3JFYWNoKGl0ID0+IGl0LnJlc2V0VmFsaWRhdGlvbigpKVxuICAgIH0sXG5cbiAgICBjbGVhckVycm9ycygpIHtcbiAgICAgIHRoaXMuc2NoZW1hQ29tcG9uZW50cy5mb3JFYWNoKGl0ID0+IGl0LmNsZWFyRXJyb3JzKCkpXG4gICAgfSxcblxuICAgIHNob3dWYWxpZGF0aW9uRXJyb3JzKGVycm9ycywgZm9jdXMpIHtcbiAgICAgIHRoaXMuc2NoZW1hQ29tcG9uZW50cy5mb3JFYWNoKFxuICAgICAgICBpdCA9PiBpdC5zaG93VmFsaWRhdGlvbkVycm9ycyhlcnJvcnMsIGZvY3VzKVxuICAgICAgKVxuICAgIH1cbiAgfVxufVxuIiwiaW1wb3J0IFZhbGlkYXRvck1peGluIGZyb20gJy4uL21peGlucy9WYWxpZGF0b3JNaXhpbi5qcydcbmltcG9ydCB7IGdldENvbW1vblByZWZpeCB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCB7XG4gIG1peGluczogW1ZhbGlkYXRvck1peGluXSxcblxuICBwcm92aWRlKCkge1xuICAgIHJldHVybiB7XG4gICAgICAkcm91dGVDb21wb25lbnQ6ICgpID0+IHRoaXNcbiAgICB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgcmVsb2FkOiBmYWxzZSxcbiAgICAgIC8vIEVhY2ggcm91dGUtY29tcG9uZW50IGRlZmluZXMgYSBzdG9yZSB0aGF0IGdldHMgcGFzc2VkIG9uIHRvIGl0c1xuICAgICAgLy8gY2hpbGQgY29tcG9uZW50cywgc28gdGhleSBjYW4gc3RvcmUgdmFsdWVzIGluIHRoZW0gdGhhdCBsaXZlIGJleW9uZFxuICAgICAgLy8gdGhlaXIgbGlmZS1jeWNsZS4gU2VlOiBEaXRvUGFuZSwgU291cmNlTWl4aW5cbiAgICAgIHN0b3JlOiB7fSxcbiAgICAgIGxvYWRDYWNoZToge30gLy8gU2VlIFR5cGVNaXhpbi5sb2FkKClcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICByb3V0ZUNvbXBvbmVudCgpIHtcbiAgICAgIC8vIE92ZXJyaWRlIERpdG9NaXhpbidzIHJvdXRlQ29tcG9uZW50KCkgd2hpY2ggdXNlcyB0aGUgaW5qZWN0ZWQgdmFsdWUuXG4gICAgICByZXR1cm4gdGhpc1xuICAgIH0sXG5cbiAgICByb3V0ZUxldmVsKCkge1xuICAgICAgbGV0IGxldmVsID0gMFxuICAgICAgbGV0IHJvdXRlQ29tcG9uZW50ID0gdGhpc1xuICAgICAgd2hpbGUgKChyb3V0ZUNvbXBvbmVudCA9IHJvdXRlQ29tcG9uZW50LnBhcmVudENvbXBvbmVudC5yb3V0ZUNvbXBvbmVudCkpIHtcbiAgICAgICAgbGV2ZWwrK1xuICAgICAgfVxuICAgICAgcmV0dXJuIGxldmVsXG4gICAgfSxcblxuICAgIHJvdXRlUmVjb3JkKCkge1xuICAgICAgcmV0dXJuIHRoaXMuJHJvdXRlLm1hdGNoZWRbdGhpcy5yb3V0ZUxldmVsXVxuICAgIH0sXG5cbiAgICBpc0xhc3RSb3V0ZSgpIHtcbiAgICAgIC8vIFJldHVybnMgdHJ1ZSB3aGVuIHRoaXMgcm91dGVyIGNvbXBvbmVudCBpcyB0aGUgbGFzdCBvbmUgaW4gdGhlIHJvdXRlLlxuICAgICAgY29uc3QgeyBtYXRjaGVkIH0gPSB0aGlzLiRyb3V0ZVxuICAgICAgcmV0dXJuIHRoaXMucm91dGVSZWNvcmQgPT09IG1hdGNoZWRbbWF0Y2hlZC5sZW5ndGggLSAxXVxuICAgIH0sXG5cbiAgICBpc0xhc3RVbm5lc3RlZFJvdXRlKCkge1xuICAgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoaXMgcm91dGUgY29tcG9uZW50IGlzIHRoZSBsYXN0IG9uZSBpbiB0aGUgcm91dGUgdGhhdFxuICAgICAgLy8gbmVlZHMgaXRzIG93biByb3V0ZXItdmlldyAoPSBpcyBub3QgbmVzdGVkKS5cbiAgICAgIGNvbnN0IHsgbWF0Y2hlZCB9ID0gdGhpcy4kcm91dGVcbiAgICAgIGZvciAobGV0IGkgPSBtYXRjaGVkLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgIGNvbnN0IHJlY29yZCA9IG1hdGNoZWRbaV1cbiAgICAgICAgaWYgKCFyZWNvcmQubWV0YS5uZXN0ZWQpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5yb3V0ZVJlY29yZCA9PT0gcmVjb3JkXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH0sXG5cbiAgICBpc05lc3RlZFJvdXRlKCkge1xuICAgICAgcmV0dXJuIHRoaXMubWV0YS5uZXN0ZWRcbiAgICB9LFxuXG4gICAgaXNWaWV3KCkge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfSxcblxuICAgIG1ldGEoKSB7XG4gICAgICByZXR1cm4gdGhpcy5yb3V0ZVJlY29yZD8ubWV0YVxuICAgIH0sXG5cbiAgICBwYXRoKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0Um91dGVQYXRoKHRoaXMucm91dGVSZWNvcmQ/LnBhdGgpXG4gICAgfSxcblxuICAgIGxhYmVsKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0TGFiZWwodGhpcy5zY2hlbWEpXG4gICAgfSxcblxuICAgIGJyZWFkY3J1bWIoKSB7XG4gICAgICBjb25zdCB7IGJyZWFkY3J1bWIgfSA9IHRoaXMuc2NoZW1hIHx8IHt9XG4gICAgICByZXR1cm4gYnJlYWRjcnVtYiB8fCBgJHt0aGlzLmJyZWFkY3J1bWJQcmVmaXh9ICR7dGhpcy5sYWJlbH1gXG4gICAgfSxcblxuICAgIGJyZWFkY3J1bWJQcmVmaXgoKSB7XG4gICAgICByZXR1cm4gJydcbiAgICB9LFxuXG4gICAgcGFyYW0oKSB7XG4gICAgICAvLyBXb3JrYXJvdW5kIGZvciB2dWUtcm91dGVyIG5vdCBiZWluZyBhYmxlIHRvIG1hcCBtdWx0aXBsZSB1cmwgcGFyYW1ldGVyc1xuICAgICAgLy8gd2l0aCB0aGUgc2FtZSBuYW1lIHRvIG11bHRpcGxlIGNvbXBvbmVudHMsIHNlZTpcbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS92dWVqcy92dWUtcm91dGVyL2lzc3Vlcy8xMzQ1XG4gICAgICByZXR1cm4gdGhpcy4kcm91dGUucGFyYW1zW3RoaXMubWV0YT8ucGFyYW1dIHx8IG51bGxcbiAgICB9LFxuXG4gICAgLy8gQG92ZXJyaWRhYmxlLCBzZWUgRGl0b0Zvcm1cbiAgICBpc011dGF0aW5nKCkge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuICB9LFxuXG4gIGJlZm9yZVJvdXRlVXBkYXRlKHRvLCBmcm9tLCBuZXh0KSB7XG4gICAgdGhpcz8uYmVmb3JlUm91dGVDaGFuZ2UodG8sIGZyb20sIG5leHQpXG4gIH0sXG5cbiAgYmVmb3JlUm91dGVMZWF2ZSh0bywgZnJvbSwgbmV4dCkge1xuICAgIHRoaXM/LmJlZm9yZVJvdXRlQ2hhbmdlKHRvLCBmcm9tLCBuZXh0KVxuICB9LFxuXG4gIGNyZWF0ZWQoKSB7XG4gICAgLy8gS2VlcCBhIHNoYXJlZCBzdGFjayBvZiByb290IGNvbXBvbmVudHMgZm9yIERpdG9UcmFpbCB0byB1c2UgdG8gcmVuZGVyXG4gICAgLy8gbGFiZWxzLiBDYW4ndCByZWx5IG9uICRyb3V0ZS5tYXRjaGVkW2ldLmluc3RhbmNlcy5kZWZhdWx0IHVuZm9ydHVuYXRlbHksXG4gICAgLy8gYXMgaW5zdGFuY2VzIGFyZW4ndCBpbW1lZGlhdGVseSByZWFkeSwgYW5kIGluc3RhbmNlcyBpcyBub3QgcmVhY3RpdmUuXG4gICAgdGhpcy5hcHBTdGF0ZS5yb3V0ZUNvbXBvbmVudHMucHVzaCh0aGlzKVxuICB9LFxuXG4gIHVubW91bnRlZCgpIHtcbiAgICBjb25zdCB7IHJvdXRlQ29tcG9uZW50cyB9ID0gdGhpcy5hcHBTdGF0ZVxuICAgIHJvdXRlQ29tcG9uZW50cy5zcGxpY2Uocm91dGVDb21wb25lbnRzLmluZGV4T2YodGhpcyksIDEpXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGJlZm9yZVJvdXRlQ2hhbmdlKHRvLCBmcm9tLCBuZXh0KSB7XG4gICAgICBsZXQgb2sgPSB0cnVlXG4gICAgICBjb25zdCBpc0Nsb3NpbmcgPSAoXG4gICAgICAgIC8vIE9ubHkgaGFuZGxlIHRoaXMgcm91dGUgY2hhbmdlIGlmIHRoZSBmb3JtIGlzIGFjdHVhbGx5IG1hcHBlZCB0byB0aGVcbiAgICAgICAgLy8gYGZyb21gIHJvdXRlLCBidXQgaW5jbHVkZSBwYXJlbnQgZm9ybXMgb2YgY2xvc2luZyBuZXN0ZWQgZm9ybXMgYXMgYXNcbiAgICAgICAgLy8gd2VsbCwgYnkgbWF0Y2hpbmcgdGhlIHRoZSBzdGFydCBvZiBmcm9tL3RvIHBhdGggYWdhaW5zdCBgdGhpcy5wYXRoYDpcbiAgICAgICAgZnJvbS5wYXRoLnN0YXJ0c1dpdGgodGhpcy5wYXRoKSAmJlxuICAgICAgICAhdG8ucGF0aC5zdGFydHNXaXRoKHRoaXMucGF0aCkgJiZcbiAgICAgICAgLy8gRXhjbHVkZSBoYXNoIGNoYW5nZXMgb25seSAoPSB0YWIgY2hhbmdlcyk6XG4gICAgICAgIGZyb20ucGF0aCAhPT0gdG8ucGF0aCAmJiAoXG4gICAgICAgICAgdGhpcy5pc0Z1bGxSb3V0ZUNoYW5nZSh0bywgZnJvbSkgfHxcbiAgICAgICAgICAvLyBEZWNpZGUgaWYgd2UncmUgbW92aW5nIHRvd2FyZHMgYSBuZXcgbmVzdGVkIGZvcm0sIG9yIGNsb3NpbmcgL1xuICAgICAgICAgIC8vIHJlcGxhY2luZyBhbiBhbHJlYWR5IG9wZW4gb25lIGJ5IGNvbXBhcmluZyBwYXRoIGxlbmd0aHMuXG4gICAgICAgICAgLy8gVGhlIGNhc2Ugb2YgYD1gIG1hdGNoZXMgdGhlIHJlcGxhY2luZyBvZiBhbiBhbHJlYWR5IG9wZW4gb25lLlxuICAgICAgICAgIHRvLnBhdGgubGVuZ3RoIDw9IGZyb20ucGF0aC5sZW5ndGhcbiAgICAgICAgKVxuICAgICAgKVxuICAgICAgaWYgKGlzQ2xvc2luZykge1xuICAgICAgICBpZiAodGhpcy5pc011dGF0aW5nKSB7XG4gICAgICAgICAgLy8gRm9yIGFjdGl2ZSBkaXJlY3RseSBtdXRhdGluZyAobmVzdGVkKSBmb3JtcyB0aGF0IHdlcmUgbm90IHZhbGlkYXRlZFxuICAgICAgICAgIC8vIHlldCwgdmFsaWRhdGUgdGhlbSBvbmNlLiBJZiB0aGUgdXNlciB0aGVuIHN0aWxsIHdhbnRzIHRvIGxlYXZlXG4gICAgICAgICAgLy8gdGhlbSwgdGhleSBjYW4gY2xpY2sgY2xvc2UgLyBuYXZpZ2F0ZSBhd2F5IGFnYWluLlxuICAgICAgICAgIG9rID0gKFxuICAgICAgICAgICAgdGhpcy5pc1ZhbGlkYXRlZCB8fFxuICAgICAgICAgICAgdGhpcy52YWxpZGF0ZUFsbCgpXG4gICAgICAgICAgKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIFRoZSBmb3JtIGRvZXNuJ3QgZGlyZWN0bHkgbXV0YXRlIGRhdGEuIElmIGl0IGlzIGRpcnR5LCBhc2sgaWYgdXNlclxuICAgICAgICAgIC8vIHdhbnRzIHRvIHBlcnNpc3QgZGF0YSBmaXJzdC5cbiAgICAgICAgICBpZiAodGhpcy5pc0RpcnR5KSB7XG4gICAgICAgICAgICBvayA9IHdpbmRvdy5jb25maXJtKFxuICAgICAgICAgICAgICBgWW91IGhhdmUgdW5zYXZlZCBjaGFuZ2VzLiBEbyB5b3UgcmVhbGx5IHdhbnQgdG8gJHtcbiAgICAgICAgICAgICAgICB0aGlzLnZlcmJzLmNhbmNlbFxuICAgICAgICAgICAgICB9P2BcbiAgICAgICAgICAgIClcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIG5leHQob2spXG4gICAgfSxcblxuICAgIGdldFJvdXRlUGF0aChyZWNvcmRQYXRoKSB7XG4gICAgICAvLyBNYXBzIHRoZSByb3V0ZSdzIGFjdHVhbCBwYXRoIHRvIHRoZSBtYXRjaGVkIHJvdXRlcyBieSBjb3VudGluZyBpdHNcbiAgICAgIC8vIHBhcnRzIHNlcGFyYXRlZCBieSAnLycsIHNwbGl0dGluZyB0aGUgcGF0aCBpbnRvIHRoZSBtYXBwZWQgcGFydHNcbiAgICAgIC8vIGNvbnRhaW5pbmcgYWN0dWFsIHBhcmFtZXRlcnMuXG4gICAgICBjb25zdCB7IHBhdGggfSA9IHRoaXMuJHJvdXRlXG4gICAgICByZXR1cm4gcmVjb3JkUGF0aFxuICAgICAgICA/IHBhdGhcbiAgICAgICAgICAgIC5zcGxpdCgnLycpXG4gICAgICAgICAgICAuc2xpY2UoMCwgcmVjb3JkUGF0aC5zcGxpdCgnLycpLmxlbmd0aClcbiAgICAgICAgICAgIC5qb2luKCcvJylcbiAgICAgICAgOiBwYXRoXG4gICAgfSxcblxuICAgIGdldENoaWxkUGF0aChwYXRoKSB7XG4gICAgICByZXR1cm4gYCR7dGhpcy5wYXRofS8ke3BhdGh9YFxuICAgIH0sXG5cbiAgICBpc0Z1bGxSb3V0ZUNoYW5nZSh0bywgZnJvbSkge1xuICAgICAgLy8gVGhlIHJvdXRlIHBhdGggaXMgdGhlIHBhdGggdXAgdG8gdGhlIGZpcnN0IC8gKGV4Y2x1ZGluZyB0aGUgaW5pdGlhbCAvKTpcbiAgICAgIGNvbnN0IHJvb3RQYXRoID0gdGhpcy5wYXRoLm1hdGNoKC9eKFxcL1teL10qKS8pWzFdXG4gICAgICByZXR1cm4gIWdldENvbW1vblByZWZpeCh0by5wYXRoLCBmcm9tLnBhdGgpLnN0YXJ0c1dpdGgocm9vdFBhdGgpXG4gICAgfVxuICB9XG59XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxudGVtcGxhdGUoXG4gIHYtaWY9XCJ1c2VyXCJcbilcbiAgLy8tIE9ubHkgcmVuZGVyIERpdG9WaWV3IHdoZW4gaXQgaXMgYWN0aXZlLCBvdGhlcndpc2UgYSBub3JtYWwgcm91dGVyLXZpZXdcbiAgLy8tIGluc3RlYWQsIHRvIG5lc3QgZnVydGhlciByb3V0ZSBjb21wb25lbnRzLlxuICAvLy0gTk9URTogVGhpcyBpcyBkaWZmZXJlbnQgZnJvbSB0aGUgaGFuZGxpbmcgaW4gRGl0b0Zvcm0sIHdoZXJlIGB2LXNob3dgIGlzXG4gIC8vLSB1c2VkIHRvIGFsd2F5cyByZW5kZXIgZm9ybXMgZXZlbiB3aGVuIG90aGVyIG5lc3RlZCBmb3JtcyBhcmUgcHJlc2VudC5cbiAgUm91dGVyVmlldyhcbiAgICB2LWlmPVwiIWlzTGFzdFJvdXRlXCJcbiAgICA6a2V5PVwibmFtZVwiXG4gIClcbiAgLmRpdG8tdmlldy5kaXRvLXNjcm9sbC1wYXJlbnQoXG4gICAgdi1lbHNlLWlmPVwic2hvdWxkUmVuZGVyU2NoZW1hKHZpZXdTY2hlbWEpXCJcbiAgICA6ZGF0YS1yZXNvdXJjZT1cInNvdXJjZVNjaGVtYS5wYXRoXCJcbiAgKVxuICAgIERpdG9TY2hlbWEoXG4gICAgICA6a2V5PVwibmFtZVwiXG4gICAgICA6c2NoZW1hPVwidmlld1NjaGVtYVwiXG4gICAgICA6ZGF0YT1cImRhdGFcIlxuICAgICAgOm1ldGE9XCJtZXRhXCJcbiAgICAgIDpzdG9yZT1cImdldENoaWxkU3RvcmUobmFtZSlcIlxuICAgICAgcGFkZGluZz1cInJvb3RcIlxuICAgICAgOmRpc2FibGVkPVwiaXNMb2FkaW5nXCJcbiAgICAgIHNjcm9sbGFibGVcbiAgICApXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCBSb3V0ZU1peGluIGZyb20gJy4uL21peGlucy9Sb3V0ZU1peGluLmpzJ1xuaW1wb3J0IHtcbiAgaXNTaW5nbGVDb21wb25lbnRWaWV3LFxuICBzb21lTmVzdGVkU2NoZW1hQ29tcG9uZW50XG59IGZyb20gJy4uL3V0aWxzL3NjaGVtYS5qcydcbmltcG9ydCB7IGhhc1Jlc291cmNlIH0gZnJvbSAnLi4vdXRpbHMvcmVzb3VyY2UuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnRGl0b1ZpZXcnLCB7XG4gIG1peGluczogW1JvdXRlTWl4aW5dLFxuXG4gIHByb3ZpZGUoKSB7XG4gICAgLy8gUmVkaXJlY3QgJHNvdXJjZUNvbXBvbmVudCBhbmQgJHJlc291cmNlQ29tcG9uZW50IHRvIHRoZSBtYWluIGNvbXBvbmVudDpcbiAgICByZXR1cm4ge1xuICAgICAgJHNvdXJjZUNvbXBvbmVudDogKCkgPT4gdGhpcy5tYWluQ29tcG9uZW50Py5zb3VyY2VDb21wb25lbnQgfHwgbnVsbCxcbiAgICAgICRyZXNvdXJjZUNvbXBvbmVudDogKCkgPT4gdGhpcy5tYWluQ29tcG9uZW50Py5yZXNvdXJjZUNvbXBvbmVudCB8fCBudWxsXG4gICAgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC8vIFVwZGF0ZWQgZnJvbSBMb2FkaW5nTWl4aW4gdGhyb3VnaCBgc2V0TG9hZGluZyhpc0xvYWRpbmcpYDpcbiAgICAgIGlzTG9hZGluZzogZmFsc2UsXG4gICAgICAvLyBOT1RFOiBEYXRhIGlzIHNoYXJlZCBhY3Jvc3MgYWxsIHZpZXdzIGJlY2F1c2UgdGhlIHJvdXRlciByZWN5Y2xlcyB0aGVcbiAgICAgIC8vIERpdG9WaWV3IGNvbXBvbmVudC5cbiAgICAgIGRhdGE6IHt9XG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgc2NoZW1hKCkge1xuICAgICAgcmV0dXJuIHRoaXMubWV0YS5zY2hlbWFcbiAgICB9LFxuXG4gICAgbmFtZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYS5uYW1lXG4gICAgfSxcblxuICAgIGlzVmlldygpIHtcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfSxcblxuICAgIGlzU2luZ2xlQ29tcG9uZW50VmlldygpIHtcbiAgICAgIHJldHVybiBpc1NpbmdsZUNvbXBvbmVudFZpZXcodGhpcy5zY2hlbWEpXG4gICAgfSxcblxuICAgIG1haW5Db21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5tYWluU2NoZW1hQ29tcG9uZW50LmdldENvbXBvbmVudEJ5RGF0YVBhdGgodGhpcy5uYW1lKVxuICAgIH0sXG5cbiAgICB2aWV3U2NoZW1hKCkge1xuICAgICAgY29uc3QgeyBjb21wb25lbnQsIC4uLnNjaGVtYSB9ID0gdGhpcy5zY2hlbWFcbiAgICAgIC8vIFRyYW5zbGF0ZSBzaW5nbGUtY29tcG9uZW50IHNjaGVtYXMgaW50byBtdWx0aS1jb21wb25lbnQgc2NoZW1hcyxcbiAgICAgIC8vIHNvIHRoZXkgY2FuIGJlIHJlbmRlcmVkIGRpcmVjdGx5IHRocm91Z2ggRGl0b1NjaGVtYSBhbHNvOlxuICAgICAgcmV0dXJuIHRoaXMuaXNTaW5nbGVDb21wb25lbnRWaWV3XG4gICAgICAgID8ge1xuICAgICAgICAgICAgLi4uc2NoZW1hLFxuICAgICAgICAgICAgY29tcG9uZW50czoge1xuICAgICAgICAgICAgICBbc2NoZW1hLm5hbWVdOiB7XG4gICAgICAgICAgICAgICAgbmFtZTogc2NoZW1hLm5hbWUsXG4gICAgICAgICAgICAgICAgbGFiZWw6IGZhbHNlLFxuICAgICAgICAgICAgICAgIC4uLmNvbXBvbmVudFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICA6IHNjaGVtYVxuICAgIH0sXG5cbiAgICBwcm92aWRlc0RhdGEoKSB7XG4gICAgICByZXR1cm4gc29tZU5lc3RlZFNjaGVtYUNvbXBvbmVudCh0aGlzLnZpZXdTY2hlbWEsIGhhc1Jlc291cmNlKVxuICAgIH1cbiAgfSxcblxuICB3YXRjaDoge1xuICAgICRyb3V0ZToge1xuICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3Z1ZWpzL3Z1ZS1yb3V0ZXIvaXNzdWVzLzMzOTMjaXNzdWVjb21tZW50LTExNTg0NzAxNDlcbiAgICAgIGZsdXNoOiAncG9zdCcsXG4gICAgICBoYW5kbGVyKHRvLCBmcm9tKSB7XG4gICAgICAgIC8vIFNlZSBpZiB0aGUgcm91dGUgY2hhbmdlcyBjb21wbGV0ZWx5LCBhbmQgY2xlYXIgdGhlIGRhdGEgaWYgaXQgZG9lcy5cbiAgICAgICAgaWYgKHRoaXMuaXNGdWxsUm91dGVDaGFuZ2UodG8sIGZyb20pKSB7XG4gICAgICAgICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZVxuICAgICAgICAgIHRoaXMuZGF0YSA9IHt9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIHNldERhdGEoZGF0YSkge1xuICAgICAgdGhpcy5kYXRhID0gZGF0YVxuICAgIH0sXG5cbiAgICBnZXRDaGlsZFBhdGgocGF0aCkge1xuICAgICAgLy8gTGlzdHMgaW5zaWRlIHNpbmdsZS1jb21wb25lbnQgdmlld3MgdXNlIHRoZSB2aWV3J3MgcGF0aCBmb3Igc3ViLXBhdGhzOlxuICAgICAgcmV0dXJuIHRoaXMuaXNTaW5nbGVDb21wb25lbnRWaWV3XG4gICAgICAgID8gdGhpcy5wYXRoXG4gICAgICAgIDogYCR7dGhpcy5wYXRofS8ke3BhdGh9YFxuICAgIH0sXG5cbiAgICBzZXRMb2FkaW5nKGlzTG9hZGluZykge1xuICAgICAgdGhpcy5pc0xvYWRpbmcgPSAhIWlzTG9hZGluZ1xuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiaW1wb3J0IHsgZGVmaW5lQ29tcG9uZW50LCByZWYsIHdhdGNoLCBvblNjb3BlRGlzcG9zZSwgaCB9IGZyb20gJ3Z1ZS1kZW1pJztcbmltcG9ydCB7IGNyZWF0ZUZvY3VzVHJhcCB9IGZyb20gJ2ZvY3VzLXRyYXAnO1xuaW1wb3J0IHsgdW5yZWZFbGVtZW50IH0gZnJvbSAnQHZ1ZXVzZS9jb3JlJztcblxuY29uc3QgVXNlRm9jdXNUcmFwID0gLyogQF9fUFVSRV9fICovIC8qICNfX1BVUkVfXyAqLyBkZWZpbmVDb21wb25lbnQoe1xuICBuYW1lOiBcIlVzZUZvY3VzVHJhcFwiLFxuICBwcm9wczogW1wiYXNcIiwgXCJvcHRpb25zXCJdLFxuICBzZXR1cChwcm9wcywgeyBzbG90cyB9KSB7XG4gICAgbGV0IHRyYXA7XG4gICAgY29uc3QgdGFyZ2V0ID0gcmVmKCk7XG4gICAgY29uc3QgYWN0aXZhdGUgPSAoKSA9PiB0cmFwICYmIHRyYXAuYWN0aXZhdGUoKTtcbiAgICBjb25zdCBkZWFjdGl2YXRlID0gKCkgPT4gdHJhcCAmJiB0cmFwLmRlYWN0aXZhdGUoKTtcbiAgICB3YXRjaChcbiAgICAgICgpID0+IHVucmVmRWxlbWVudCh0YXJnZXQpLFxuICAgICAgKGVsKSA9PiB7XG4gICAgICAgIGlmICghZWwpXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB0cmFwID0gY3JlYXRlRm9jdXNUcmFwKGVsLCBwcm9wcy5vcHRpb25zIHx8IHt9KTtcbiAgICAgICAgYWN0aXZhdGUoKTtcbiAgICAgIH0sXG4gICAgICB7IGZsdXNoOiBcInBvc3RcIiB9XG4gICAgKTtcbiAgICBvblNjb3BlRGlzcG9zZSgoKSA9PiBkZWFjdGl2YXRlKCkpO1xuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBpZiAoc2xvdHMuZGVmYXVsdClcbiAgICAgICAgcmV0dXJuIGgocHJvcHMuYXMgfHwgXCJkaXZcIiwgeyByZWY6IHRhcmdldCB9LCBzbG90cy5kZWZhdWx0KCkpO1xuICAgIH07XG4gIH1cbn0pO1xuXG5leHBvcnQgeyBVc2VGb2N1c1RyYXAgfTtcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4uZGl0by1kaWFsb2coXG4gIHJlZj1cImRpYWxvZ1wiXG4gIHJvbGU9XCJkaWFsb2dcIlxuICBhcmlhLWV4cGFuZGVkPVwidHJ1ZVwiXG4gIGFyaWEtbW9kYWw9XCJ0cnVlXCJcbiAgOnN0eWxlPVwieyAnLS13aWR0aCc6IHNldHRpbmdzLndpZHRoID8gYCR7c2V0dGluZ3Mud2lkdGh9cHhgIDogbnVsbCB9XCJcbiAgQG1vdXNldXA9XCJvbk1vdXNlVXBcIlxuKVxuICBVc2VGb2N1c1RyYXAuZGl0by1kaWFsb2dfX2ZvY3VzLXRyYXAoOm9wdGlvbnM9XCJmb2N1c1RyYXBPcHRpb25zXCIpXG4gICAgZm9ybS5kaXRvLXNjcm9sbC1wYXJlbnQoXG4gICAgICBAc3VibWl0LnByZXZlbnQ9XCJzdWJtaXRcIlxuICAgIClcbiAgICAgIC8vIEFkZCBhbiBpbnZpc2libGUgYnV0dG9uIHRoYXQgcHJldmVudHMgdGhlIGNsZWFyYWJsZSBidXR0b25zIGZyb20gYmVpbmdcbiAgICAgIC8vIHByZXNzZWQgd2hlbiB0aGUgdXNlciBwcmVzc2VzIHRoZSBFbnRlciBrZXk6XG4gICAgICBidXR0b24oXG4gICAgICAgIHYtc2hvdz1cImZhbHNlXCJcbiAgICAgIClcbiAgICAgIERpdG9TY2hlbWEoXG4gICAgICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgICAgICA6ZGF0YT1cImRpYWxvZ0RhdGFcIlxuICAgICAgICBwYWRkaW5nPVwicm9vdFwiXG4gICAgICAgIHNjcm9sbGFibGVcbiAgICAgICAgZ2VuZXJhdGVMYWJlbHNcbiAgICAgIClcbiAgICAgICAgdGVtcGxhdGUoI2J1dHRvbnMpXG4gICAgICAgICAgRGl0b0J1dHRvbnMuZGl0by1idXR0b25zLWxhcmdlKFxuICAgICAgICAgICAgOmJ1dHRvbnM9XCJidXR0b25TY2hlbWFzXCJcbiAgICAgICAgICAgIDpkYXRhPVwiZGlhbG9nRGF0YVwiXG4gICAgICAgICAgKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCB7IGNsb25lIH0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgRG9tTWl4aW4gZnJvbSAnLi4vbWl4aW5zL0RvbU1peGluLmpzJ1xuaW1wb3J0IHsgZ2V0QnV0dG9uU2NoZW1hcyB9IGZyb20gJy4uL3V0aWxzL3NjaGVtYS5qcydcbmltcG9ydCB7IFVzZUZvY3VzVHJhcCB9IGZyb20gJ0B2dWV1c2UvaW50ZWdyYXRpb25zL3VzZUZvY3VzVHJhcC9jb21wb25lbnQnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnRGl0b0RpYWxvZycsIHtcbiAgbWl4aW5zOiBbRG9tTWl4aW5dLFxuICBjb21wb25lbnRzOiB7IFVzZUZvY3VzVHJhcCB9LFxuICBlbWl0czogWydyZW1vdmUnXSxcblxuICBwcm92aWRlKCkge1xuICAgIHJldHVybiB7XG4gICAgICAkZGlhbG9nQ29tcG9uZW50OiAoKSA9PiB0aGlzXG4gICAgfVxuICB9LFxuXG4gIHByb3BzOiB7XG4gICAgY29tcG9uZW50czogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgYnV0dG9uczogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgcHJvbWlzZTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgZGF0YTogeyB0eXBlOiBPYmplY3QsIGRlZmF1bHQ6ICgpID0+ICh7fSkgfSxcbiAgICBzZXR0aW5nczoge1xuICAgICAgdHlwZTogT2JqZWN0LFxuICAgICAgZGVmYXVsdDogKCkgPT4gKHtcbiAgICAgICAgd2lkdGg6IDQ4MCxcbiAgICAgICAgY2xpY2tUb0Nsb3NlOiBmYWxzZVxuICAgICAgfSlcbiAgICB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICAvLyBNYWtlIHN1cmUgZGlhbG9nIGRhdGEgY29udGFpbnMgYWxsIHRoZSBleHBlY3RlZCBrZXlzXG4gICAgY29uc3QgZGlhbG9nRGF0YSA9IGNsb25lKHRoaXMuZGF0YSlcbiAgICBmb3IgKGNvbnN0IGtleSBpbiB0aGlzLmNvbXBvbmVudHMpIHtcbiAgICAgIGlmICghKGtleSBpbiBkaWFsb2dEYXRhKSkge1xuICAgICAgICBkaWFsb2dEYXRhW2tleV0gPSBudWxsXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICBkaWFsb2dEYXRhXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgZGlhbG9nQ29tcG9uZW50KCkge1xuICAgICAgcmV0dXJuIHRoaXNcbiAgICB9LFxuXG4gICAgc2NoZW1hKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdHlwZTogJ2RpYWxvZycsXG4gICAgICAgIGNvbXBvbmVudHM6IHRoaXMuY29tcG9uZW50c1xuICAgICAgfVxuICAgIH0sXG5cbiAgICBidXR0b25TY2hlbWFzKCkge1xuICAgICAgcmV0dXJuIE9iamVjdC5mcm9tRW50cmllcyhcbiAgICAgICAgT2JqZWN0LmVudHJpZXMoZ2V0QnV0dG9uU2NoZW1hcyh0aGlzLmJ1dHRvbnMpKS5tYXAoXG4gICAgICAgICAgLy8gUHJvY2VzcyB0aGUgYnV0dG9uIHNjaGVtYXMgdG8gYWRkIGRlZmF1bHQgY2xpY2sgZXZlbnRzXG4gICAgICAgICAgLy8gZm9yIGJvdGggJ3N1Ym1pdCcgYW5kICdjYW5jZWwnIGJ1dHRvbnM6XG4gICAgICAgICAgKFtrZXksIHNjaGVtYV0pID0+IHtcbiAgICAgICAgICAgIGlmIChrZXkgPT09ICdjYW5jZWwnICYmICFzY2hlbWEuZXZlbnRzKSB7XG4gICAgICAgICAgICAgIHNjaGVtYSA9IHtcbiAgICAgICAgICAgICAgICAuLi5zY2hlbWEsXG4gICAgICAgICAgICAgICAgZXZlbnRzOiB7XG4gICAgICAgICAgICAgICAgICBjbGljazogKCkgPT4gdGhpcy5jYW5jZWwoKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIFtrZXksIHNjaGVtYV1cbiAgICAgICAgICB9XG4gICAgICAgIClcbiAgICAgIClcbiAgICB9LFxuXG4gICAgZm9jdXNUcmFwT3B0aW9ucygpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGltbWVkaWF0ZTogdHJ1ZSxcbiAgICAgICAgZmFsbGJhY2tGb2N1czogKCkgPT4gdGhpcy4kcmVmcy5kaWFsb2csXG4gICAgICAgIG9uRGVhY3RpdmF0ZTogdGhpcy5jYW5jZWxcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgaGFzQnV0dG9ucygpIHtcbiAgICAgIHJldHVybiBPYmplY3Qua2V5cyh0aGlzLmJ1dHRvblNjaGVtYXMpLmxlbmd0aCA+IDBcbiAgICB9LFxuXG4gICAgaGFzQ2FuY2VsKCkge1xuICAgICAgcmV0dXJuICEhdGhpcy5idXR0b25TY2hlbWFzLmNhbmNlbFxuICAgIH1cbiAgfSxcblxuICBtb3VudGVkKCkge1xuICAgIHRoaXMuZG9tT24od2luZG93LCB7XG4gICAgICBrZXl1cDogZXZlbnQgPT4ge1xuICAgICAgICBpZiAoKHRoaXMuaGFzQ2FuY2VsIHx8ICF0aGlzLmhhc0J1dHRvbnMpICYmIGV2ZW50LmtleUNvZGUgPT09IDI3KSB7XG4gICAgICAgICAgdGhpcy5jYW5jZWwoKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSlcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgcmVtb3ZlKCkge1xuICAgICAgdGhpcy4kZW1pdCgncmVtb3ZlJylcbiAgICB9LFxuXG4gICAgcmVzb2x2ZSh2YWx1ZSkge1xuICAgICAgdGhpcy5wcm9taXNlLnJlc29sdmUodmFsdWUpXG4gICAgICB0aGlzLnJlbW92ZSgpXG4gICAgfSxcblxuICAgIHJlamVjdCh2YWx1ZSkge1xuICAgICAgdGhpcy5wcm9taXNlLnJlamVjdCh2YWx1ZSlcbiAgICAgIHRoaXMucmVtb3ZlKClcbiAgICB9LFxuXG4gICAgc3VibWl0KCkge1xuICAgICAgdGhpcy5yZXNvbHZlKHRoaXMuZGlhbG9nRGF0YSlcbiAgICB9LFxuXG4gICAgY2FuY2VsKCkge1xuICAgICAgLy8gV2hlbiBjYW5jZWxsaW5nLCByZXNvbHZlIGFzIGB1bmRlZmluZWRgIHNvIHdlIGNhbiBoYXZlIGRpYWxvZ3NcbiAgICAgIC8vIHJldHVybmluZyBudWxsIGFzIGEgZGVmaW5lZCB2YWx1ZSBhcyB3ZWxsLlxuICAgICAgdGhpcy5yZXNvbHZlKHVuZGVmaW5lZClcbiAgICB9LFxuXG4gICAgY2xvc2UoKSB7XG4gICAgICB0aGlzLmNhbmNlbCgpXG4gICAgfSxcblxuICAgIG9uTW91c2VVcCgpIHtcbiAgICAgIGlmICh0aGlzLnNldHRpbmdzLmNsaWNrVG9DbG9zZSkge1xuICAgICAgICB0aGlzLmNsb3NlKClcbiAgICAgIH1cbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by1kaWFsb2cge1xuICBwb3NpdGlvbjogZml4ZWQ7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGluc2V0OiAwO1xuICB6LWluZGV4OiAkei1pbmRleC1kaWFsb2c7XG4gIHBhZGRpbmc6ICRjb250ZW50LXBhZGRpbmc7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAvLyBQcmV2ZW50IHNjcm9sbGluZyBvZiB0aGUgcGFnZSBiZWhpbmQgdGhlIGRpYWxvZzpcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjIpO1xuXG4gICZfX2ZvY3VzLXRyYXAge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgbWF4LWhlaWdodDogMTAwJTtcbiAgfVxuXG4gIC8vIFRPRE86IGAmX19pbm5lcmBcbiAgZm9ybSB7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICBiYWNrZ3JvdW5kOiB3aGl0ZTtcbiAgICBib3JkZXItcmFkaXVzOiAkYm9yZGVyLXJhZGl1cztcbiAgICBtYXgtd2lkdGg6IHZhcigtLXdpZHRoLCA0ODBweCk7XG4gICAgbWF4LWhlaWdodDogMTAwJTtcbiAgICBib3gtc2hhZG93OiAwIDIwcHggNjBweCAtMnB4IHJnYmEoMjcsIDMzLCA1OCwgMC40KTtcbiAgfVxufVxuXG4uZGl0by1kaWFsb2ctZW50ZXItYWN0aXZlLFxuLmRpdG8tZGlhbG9nLWxlYXZlLWFjdGl2ZSB7XG4gIHRyYW5zaXRpb246IG9wYWNpdHkgMC4xNXM7XG5cbiAgZm9ybSB7XG4gICAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDAuMjVzO1xuICB9XG59XG5cbi5kaXRvLWRpYWxvZy1lbnRlci1mcm9tLFxuLmRpdG8tZGlhbG9nLWxlYXZlLXRvIHtcbiAgb3BhY2l0eTogMDtcblxuICBmb3JtIHtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTIwcHgpO1xuICB9XG59XG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbi5kaXRvLXJvb3QoXG4gIDpkYXRhLWFnZW50LWJyb3dzZXI9XCJhcHBTdGF0ZS5hZ2VudC5icm93c2VyXCJcbiAgOmRhdGEtYWdlbnQtcGxhdGZvcm09XCJhcHBTdGF0ZS5hZ2VudC5wbGF0Zm9ybVwiXG4gIDpkYXRhLWFnZW50LXZlcnNpb249XCJhcHBTdGF0ZS5hZ2VudC52ZXJzaW9uTnVtYmVyXCJcbilcbiAgVHJhbnNpdGlvbihuYW1lPVwiZGl0by1kcmFnXCIpXG4gICAgLmRpdG8tZHJhZy1vdmVybGF5KFxuICAgICAgdi1pZj1cImlzRHJhZ2dpbmdGaWxlc1wiXG4gICAgKVxuICBUcmFuc2l0aW9uR3JvdXAobmFtZT1cImRpdG8tZGlhbG9nXCIpXG4gICAgRGl0b0RpYWxvZyhcbiAgICAgIHYtZm9yPVwiKGRpYWxvZywga2V5KSBpbiBkaWFsb2dzXCJcbiAgICAgIDprZXk9XCJrZXlcIlxuICAgICAgOmNvbXBvbmVudHM9XCJkaWFsb2cuY29tcG9uZW50c1wiXG4gICAgICA6YnV0dG9ucz1cImRpYWxvZy5idXR0b25zXCJcbiAgICAgIDpwcm9taXNlPVwiZGlhbG9nLnByb21pc2VcIlxuICAgICAgOmRhdGE9XCJkaWFsb2cuZGF0YVwiXG4gICAgICA6c2V0dGluZ3M9XCJkaWFsb2cuc2V0dGluZ3NcIlxuICAgICAgQHJlbW92ZT1cInJlbW92ZURpYWxvZyhrZXkpXCJcbiAgICApXG4gIERpdG9OYXZpZ2F0aW9uXG4gIG1haW4uZGl0by1wYWdlLmRpdG8tc2Nyb2xsLXBhcmVudChcbiAgICB2LXJlc2l6ZT1cIm9uUmVzaXplUGFnZVwiXG4gICAgOmNsYXNzPVwicGFnZUNsYXNzZXNcIlxuICApXG4gICAgRGl0b0hlYWRlcihcbiAgICAgIDpzcGlubmVyPVwib3B0aW9ucy5zcGlubmVyXCJcbiAgICAgIDppc0xvYWRpbmc9XCJpc0xvYWRpbmdcIlxuICAgIClcbiAgICBSb3V0ZXJWaWV3XG4gIERpdG9TaWRlYmFyXG4gICAgRGl0b0FjY291bnQoXG4gICAgICB2LWlmPVwidXNlclwiXG4gICAgKVxuICAgIGEuZGl0by1sb2dpbihcbiAgICAgIHYtZWxzZS1pZj1cImFsbG93TG9naW5cIlxuICAgICAgQGNsaWNrPVwicm9vdENvbXBvbmVudC5sb2dpbigpXCJcbiAgICApXG4gICAgICBzcGFuIExvZ2luXG4gIERpdG9Ob3RpZmljYXRpb25zKHJlZj1cIm5vdGlmaWNhdGlvbnNcIilcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgeyBkZWxlZ2F0ZSBhcyB0aXBweURlbGVnYXRlIH0gZnJvbSAndGlwcHkuanMnXG5pbXBvcnQgeyBtYXBDb25jdXJyZW50bHkgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCBEb21NaXhpbiBmcm9tICcuLi9taXhpbnMvRG9tTWl4aW4uanMnXG5pbXBvcnQgRGl0b1VzZXIgZnJvbSAnLi4vRGl0b1VzZXIuanMnXG5pbXBvcnQgRGl0b1ZpZXcgZnJvbSAnLi4vY29tcG9uZW50cy9EaXRvVmlldy52dWUnXG5pbXBvcnQgRGl0b0RpYWxvZyBmcm9tICcuL0RpdG9EaWFsb2cudnVlJ1xuaW1wb3J0IHtcbiAgcHJvY2Vzc1ZpZXcsXG4gIHJlc29sdmVWaWV3cyxcbiAgcHJvY2Vzc1NjaGVtYUNvbXBvbmVudHNcbn0gZnJvbSAnLi4vdXRpbHMvc2NoZW1hLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ0RpdG9Sb290Jywge1xuICBtaXhpbnM6IFtEb21NaXhpbl0sXG4gIGNvbXBvbmVudHM6IHsgRGl0b0RpYWxvZyB9LFxuXG4gIHByb3ZpZGUoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICR2aWV3czogKCkgPT4gdGhpcy5yZXNvbHZlZFZpZXdzXG4gICAgfVxuICB9LFxuXG4gIHByb3BzOiB7XG4gICAgdW5yZXNvbHZlZFZpZXdzOiB7IHR5cGU6IFtPYmplY3QsIEZ1bmN0aW9uLCBQcm9taXNlXSwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBvcHRpb25zOiB7IHR5cGU6IE9iamVjdCwgZGVmYXVsdDogKCkgPT4gKHt9KSB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgcmVzb2x2ZWRWaWV3czoge30sXG4gICAgICByZW1vdmVSb3V0ZXM6IG51bGwsXG4gICAgICBkaWFsb2dzOiB7fSxcbiAgICAgIHBhZ2VXaWR0aDogMCxcbiAgICAgIGxvYWRpbmdDb3VudDogMCxcbiAgICAgIGFsbG93TG9naW46IGZhbHNlLFxuICAgICAgaXNEcmFnZ2luZ0ZpbGVzOiBmYWxzZVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIG5vdGlmaWNhdGlvbnMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5pc01vdW50ZWQgJiYgdGhpcy4kcmVmcy5ub3RpZmljYXRpb25zXG4gICAgfSxcblxuICAgIGlzTG9hZGluZygpIHtcbiAgICAgIHJldHVybiB0aGlzLmxvYWRpbmdDb3VudCA+IDBcbiAgICB9LFxuXG4gICAgcGFnZUNsYXNzZXMoKSB7XG4gICAgICBjb25zdCBwcmVmaXggPSAnZGl0by1wYWdlJ1xuICAgICAgLy8gTk9URTogS2VlcCBzeW5jZWQgd2l0aCAkY29udGVudC13aWR0aCBpbiBTQ1NTOlxuICAgICAgY29uc3QgY29udGVudFdpZHRoID0gOTAwXG4gICAgICByZXR1cm4gW1xuICAgICAgICB0aGlzLmFwcFN0YXRlLnBhZ2VDbGFzcyxcbiAgICAgICAge1xuICAgICAgICAgIFtgJHtwcmVmaXh9LS13aWR0aC04MGBdOiB0aGlzLnBhZ2VXaWR0aCA8PSBjb250ZW50V2lkdGggKiAwLjgsXG4gICAgICAgICAgW2Ake3ByZWZpeH0tLXdpZHRoLTYwYF06IHRoaXMucGFnZVdpZHRoIDw9IGNvbnRlbnRXaWR0aCAqIDAuNlxuICAgICAgICB9XG4gICAgICBdXG4gICAgfVxuICB9LFxuXG4gIGNyZWF0ZWQoKSB7XG4gICAgdGhpcy5hcHBTdGF0ZS50aXRsZSA9IGRvY3VtZW50LnRpdGxlIHx8ICdEaXRvLmpzIEFkbWluJ1xuICAgIC8vIFdpdGggaG90LXJlbG9hZGluZywgaXQgbG9va3MgbGlrZSBkZXN0cm95ZWQgaG9va3MgYXJlbid0IGFsd2F5cyBjYWxsZWRcbiAgICAvLyBmb3Igcm91dGUgY29tcG9uZW50cyBzbyByZXNldCB0aGUgYXJyYXkgb2YgcmVnaXN0ZXJlZCBjb21wb25lbnRzIGluc3RlYWQuXG4gICAgdGhpcy5hcHBTdGF0ZS5yb3V0ZUNvbXBvbmVudHMgPSBbXVxuICB9LFxuXG4gIGFzeW5jIG1vdW50ZWQoKSB7XG4gICAgdGhpcy5zZXR1cERyYWdBbmREcm9wKClcblxuICAgIHRpcHB5RGVsZWdhdGUodGhpcy4kZWwsIHtcbiAgICAgIHRhcmdldDogJy5kaXRvLWluZm8nLFxuICAgICAgdGhlbWU6ICdpbmZvJyxcbiAgICAgIGFwcGVuZFRvOiBub2RlID0+IG5vZGUuY2xvc2VzdCgnLmRpdG8tcGFuZScpLFxuICAgICAgYW5pbWF0aW9uOiAnc2hpZnQtYXdheS1zdWJ0bGUnLFxuICAgICAgaW50ZXJhY3RpdmU6IHRydWUsXG4gICAgICBkZWxheTogMjUwLFxuICAgICAgekluZGV4OiAxLFxuICAgICAgb25DcmVhdGUoaW5zdGFuY2UpIHtcbiAgICAgICAgaW5zdGFuY2Uuc2V0Q29udGVudChpbnN0YW5jZS5yZWZlcmVuY2UuZGF0YXNldC5pbmZvKVxuICAgICAgfVxuICAgIH0pXG5cbiAgICAvLyBDbGVhciB0aGUgbGFiZWwgbWFya2VkIGFzIGFjdGl2ZSBvbiBhbGwgbW91c2UgYW5kIGtleWJvYXJkIGV2ZW50cywgZXhjZXB0XG4gICAgLy8gdGhlIG9uZXMgdGhhdCBEaXRvTGFiZWwgaXRzZWxmIGludGVyY2VwdHMuXG4gICAgdGhpcy5kb21Pbihkb2N1bWVudCwge1xuICAgICAgY2xpY2s6IGV2ZW50ID0+IHtcbiAgICAgICAgaWYgKCFldmVudC50YXJnZXQuY2xvc2VzdCgnLmRpdG8tbGFiZWwnKSkge1xuICAgICAgICAgIHRoaXMuYXBwU3RhdGUuYWN0aXZlTGFiZWwgPSBudWxsXG4gICAgICAgIH1cbiAgICAgIH0sXG5cbiAgICAgIGtleXVwOiBldmVudCA9PiB7XG4gICAgICAgIGlmIChldmVudC5jb2RlID09PSAnVGFiJykge1xuICAgICAgICAgIHRoaXMuYXBwU3RhdGUuYWN0aXZlTGFiZWwgPSBudWxsXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KVxuXG4gICAgdHJ5IHtcbiAgICAgIHRoaXMuYWxsb3dMb2dpbiA9IGZhbHNlXG4gICAgICBpZiAoYXdhaXQgdGhpcy5mZXRjaFVzZXIoKSkge1xuICAgICAgICBhd2FpdCB0aGlzLnJlc29sdmVWaWV3cygpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhd2FpdCB0aGlzLmxvZ2luKClcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKVxuICAgIH1cbiAgICB0aGlzLmFsbG93TG9naW4gPSB0cnVlXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIHNldHVwRHJhZ0FuZERyb3AoKSB7XG4gICAgICAvLyBUaGlzIGNvZGUgb25seSBoYXBwZW5zIHRoZSB2aXN1YWwgZWZmZWN0cyBhcm91bmQgZHJhZ2dpbmcgYW5kIGRyb3BwaW5nXG4gICAgICAvLyBmaWxlcyBpbnRvIGEgYERpdG9UeXBlVXBsb2FkYCBjb21wb25lbnQuIFRoZSBhY3R1YWwgdXBsb2FkaW5nIGlzXG4gICAgICAvLyBoYW5kbGVkIGJ5IHRoZSBgRGl0b1R5cGVVcGxvYWRgIGNvbXBvbmVudCBpdHNlbGYuXG5cbiAgICAgIGxldCBkcmFnQ291bnQgPSAwXG4gICAgICBsZXQgdXBsb2FkcyA9IFtdXG5cbiAgICAgIGNvbnN0IHRvZ2dsZURyb3BUYXJnZXRDbGFzcyA9IGVuYWJsZWQgPT4ge1xuICAgICAgICBmb3IgKGNvbnN0IHVwbG9hZCBvZiB1cGxvYWRzKSB7XG4gICAgICAgICAgdXBsb2FkXG4gICAgICAgICAgICAuY2xvc2VzdCgnLmRpdG8tY29udGFpbmVyJylcbiAgICAgICAgICAgIC5jbGFzc0xpc3QudG9nZ2xlKCdkaXRvLWRyb3AtdGFyZ2V0JywgZW5hYmxlZClcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWVuYWJsZWQpIHtcbiAgICAgICAgICB1cGxvYWRzID0gW11cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjb25zdCBzZXREcmFnZ2luZ0ZpbGVzID0gZW5hYmxlZCA9PiB7XG4gICAgICAgIHRoaXMuaXNEcmFnZ2luZ0ZpbGVzID0gZW5hYmxlZFxuICAgICAgICBpZiAoZW5hYmxlZCkge1xuICAgICAgICAgIHRvZ2dsZURyb3BUYXJnZXRDbGFzcyh0cnVlKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gdG9nZ2xlRHJvcFRhcmdldENsYXNzKGZhbHNlKSwgMTUwKVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHRoaXMuZG9tT24oZG9jdW1lbnQsIHtcbiAgICAgICAgZHJhZ2VudGVyOiBldmVudCA9PiB7XG4gICAgICAgICAgaWYgKCFkcmFnQ291bnQgJiYgZXZlbnQuZGF0YVRyYW5zZmVyKSB7XG4gICAgICAgICAgICB1cGxvYWRzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLmRpdG8tdXBsb2FkJylcbiAgICAgICAgICAgIGNvbnN0IGhhc1VwbG9hZHMgPSB1cGxvYWRzLmxlbmd0aCA+IDBcbiAgICAgICAgICAgIGV2ZW50LmRhdGFUcmFuc2Zlci5lZmZlY3RBbGxvd2VkID0gaGFzVXBsb2FkcyA/ICdjb3B5JyA6ICdub25lJ1xuICAgICAgICAgICAgaWYgKGhhc1VwbG9hZHMpIHtcbiAgICAgICAgICAgICAgc2V0RHJhZ2dpbmdGaWxlcyh0cnVlKVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKVxuICAgICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgZHJhZ0NvdW50KytcbiAgICAgICAgfSxcblxuICAgICAgICBkcmFnbGVhdmU6IGV2ZW50ID0+IHtcbiAgICAgICAgICBkcmFnQ291bnQtLVxuICAgICAgICAgIGlmICghZHJhZ0NvdW50ICYmIGV2ZW50LmRhdGFUcmFuc2Zlcikge1xuICAgICAgICAgICAgc2V0RHJhZ2dpbmdGaWxlcyhmYWxzZSlcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG5cbiAgICAgICAgZHJhZ292ZXI6IGV2ZW50ID0+IHtcbiAgICAgICAgICBpZiAoZXZlbnQuZGF0YVRyYW5zZmVyKSB7XG4gICAgICAgICAgICBjb25zdCBjYW5Ecm9wID0gZXZlbnQudGFyZ2V0LmNsb3Nlc3QoXG4gICAgICAgICAgICAgICcuZGl0by1jb250YWluZXI6aGFzKC5kaXRvLXVwbG9hZCknXG4gICAgICAgICAgICApXG4gICAgICAgICAgICBldmVudC5kYXRhVHJhbnNmZXIuZHJvcEVmZmVjdCA9IGNhbkRyb3AgPyAnY29weScgOiAnbm9uZSdcbiAgICAgICAgICAgIGlmICghY2FuRHJvcCkge1xuICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpXG4gICAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuXG4gICAgICAgIGRyb3A6IGV2ZW50ID0+IHtcbiAgICAgICAgICBkcmFnQ291bnQgPSAwXG4gICAgICAgICAgaWYgKGV2ZW50LmRhdGFUcmFuc2Zlcikge1xuICAgICAgICAgICAgc2V0RHJhZ2dpbmdGaWxlcyhmYWxzZSlcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfSxcblxuICAgIG5vdGlmeSh7IHR5cGUgPSAnaW5mbycsIHRpdGxlLCB0ZXh0IH0gPSB7fSkge1xuICAgICAgdGhpcy5ub3RpZmljYXRpb25zLm5vdGlmeSh7IHR5cGUsIHRpdGxlLCB0ZXh0IH0pXG4gICAgfSxcblxuICAgIGNsb3NlTm90aWZpY2F0aW9ucygpIHtcbiAgICAgIHRoaXMubm90aWZpY2F0aW9ucy5kZXN0cm95QWxsKClcbiAgICB9LFxuXG4gICAgcmVnaXN0ZXJMb2FkaW5nKGlzTG9hZGluZykge1xuICAgICAgdGhpcy5sb2FkaW5nQ291bnQgKz0gaXNMb2FkaW5nID8gMSA6IC0xXG4gICAgfSxcblxuICAgIHNob3dEaWFsb2coeyBjb21wb25lbnRzLCBidXR0b25zLCBkYXRhLCBzZXR0aW5ncyB9KSB7XG4gICAgICAvLyBTaG93cyBhIGRpdG8tZGlhbG9nIGNvbXBvbmVudCBhbmQgd3JhcHMgaXQgaW4gYSBwcm9taXNlIHNvIHRoYXQgdGhlXG4gICAgICAvLyBidXR0b25zIGluIHRoZSBkaWFsb2cgY2FuIHVzZSBgZGlhbG9nLnJlc29sdmUoKWAgYW5kIGBkaWFsb2cucmVqZWN0KClgXG4gICAgICAvLyB0byBjbG9zZSB0aGUgbW9kYWwgZGlhbG9nIGFuZCByZXNvbHZlIC8gcmVqZWN0IHRoZSBwcm9taXNlIGF0IG9uY2UuXG4gICAgICByZXR1cm4gbmV3IFByb21pc2UoXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1hc3luYy1wcm9taXNlLWV4ZWN1dG9yXG4gICAgICAgIGFzeW5jIChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAvLyBQcm9jZXNzIGNvbXBvbmVudHMgdG8gcmVzb2x2ZSBhc3luYyBzY2hlbWFzLlxuICAgICAgICAgIGNvbnN0IHJvdXRlcyA9IFtdXG4gICAgICAgICAgYXdhaXQgcHJvY2Vzc1NjaGVtYUNvbXBvbmVudHMoXG4gICAgICAgICAgICB0aGlzLmFwaSxcbiAgICAgICAgICAgIHsgdHlwZTogJ2RpYWxvZycsIGNvbXBvbmVudHMgfSxcbiAgICAgICAgICAgIHJvdXRlcyxcbiAgICAgICAgICAgIDBcbiAgICAgICAgICApXG4gICAgICAgICAgaWYgKHJvdXRlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICAgICdEaWFsb2dzIGRvIG5vdCBzdXBwb3J0IGNvbXBvbmVudHMgdGhhdCBwcm9kdWNlIHJvdXRlcydcbiAgICAgICAgICAgIClcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3Qga2V5ID0gYGRpYWxvZy0keysrZGlhbG9nSWR9YFxuICAgICAgICAgIHRoaXMuZGlhbG9nc1trZXldID0ge1xuICAgICAgICAgICAgY29tcG9uZW50cyxcbiAgICAgICAgICAgIGJ1dHRvbnMsXG4gICAgICAgICAgICBkYXRhLFxuICAgICAgICAgICAgc2V0dGluZ3MsXG4gICAgICAgICAgICBwcm9taXNlOiB7IHJlc29sdmUsIHJlamVjdCB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICApXG4gICAgfSxcblxuICAgIHJlbW92ZURpYWxvZyhrZXkpIHtcbiAgICAgIGRlbGV0ZSB0aGlzLmRpYWxvZ3Nba2V5XVxuICAgIH0sXG5cbiAgICBhc3luYyBsb2dpbigpIHtcbiAgICAgIHRoaXMuYWxsb3dMb2dpbiA9IHRydWVcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgYWRkaXRpb25hbENvbXBvbmVudHMsXG4gICAgICAgIHJlZGlyZWN0QWZ0ZXJMb2dpblxuICAgICAgfSA9IHRoaXMub3B0aW9ucy5sb2dpbiB8fCB7fVxuICAgICAgY29uc3QgbG9naW5EYXRhID0gYXdhaXQgdGhpcy5zaG93RGlhbG9nKHtcbiAgICAgICAgY29tcG9uZW50czoge1xuICAgICAgICAgIHVzZXJuYW1lOiB7XG4gICAgICAgICAgICB0eXBlOiAndGV4dCcsXG4gICAgICAgICAgICBhdXRvZm9jdXM6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIHBhc3N3b3JkOiB7XG4gICAgICAgICAgICB0eXBlOiAncGFzc3dvcmQnXG4gICAgICAgICAgfSxcbiAgICAgICAgICAuLi5hZGRpdGlvbmFsQ29tcG9uZW50c1xuICAgICAgICB9LFxuICAgICAgICBidXR0b25zOiB7XG4gICAgICAgICAgY2FuY2VsOiB7XG4gICAgICAgICAgICB0eXBlOiAnYnV0dG9uJyxcbiAgICAgICAgICAgIHRleHQ6ICdDYW5jZWwnXG4gICAgICAgICAgICAvLyBOT1RFOiBUaGUgY2xpY2sgZXZlbnQgaXMgYWRkZWQgaW4gRGl0b0RpYWxvZy5idXR0b25TY2hlbWFzKClcbiAgICAgICAgICB9LFxuXG4gICAgICAgICAgbG9naW46IHtcbiAgICAgICAgICAgIHR5cGU6ICdzdWJtaXQnLFxuICAgICAgICAgICAgdGV4dDogJ0xvZ2luJ1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSlcbiAgICAgIGlmIChsb2dpbkRhdGEpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuc2VuZFJlcXVlc3Qoe1xuICAgICAgICAgICAgcmVzb3VyY2U6IHRoaXMuYXBpLnVzZXJzLmxvZ2luLFxuICAgICAgICAgICAgZGF0YTogbG9naW5EYXRhLFxuICAgICAgICAgICAgaW50ZXJuYWw6IHRydWVcbiAgICAgICAgICB9KVxuICAgICAgICAgIGlmIChyZWRpcmVjdEFmdGVyTG9naW4pIHtcbiAgICAgICAgICAgIGxvY2F0aW9uLnJlcGxhY2UocmVkaXJlY3RBZnRlckxvZ2luKVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnNldFVzZXIocmVzcG9uc2UuZGF0YS51c2VyKVxuICAgICAgICAgICAgYXdhaXQgdGhpcy5yZXNvbHZlVmlld3MoKVxuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgY29uc3QgZXJyb3IgPSBlcnIucmVzcG9uc2U/LmRhdGE/LmVycm9yXG4gICAgICAgICAgdGhpcy5ub3RpZnkoe1xuICAgICAgICAgICAgdHlwZTogJ2Vycm9yJyxcbiAgICAgICAgICAgIHRpdGxlOiAnQXV0aGVudGljYXRpb24gRXJyb3InLFxuICAgICAgICAgICAgdGV4dDogZXJyb3IgfHwgZXJyXG4gICAgICAgICAgfSlcbiAgICAgICAgICBpZiAoIWVycm9yKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGVyciwgZXJyLnJlc3BvbnNlKVxuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLmxvZ2luKClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBuYXZpZ2F0ZUhvbWUoKSB7XG4gICAgICByZXR1cm4gdGhpcy5uYXZpZ2F0ZSgnLycpXG4gICAgfSxcblxuICAgIGFzeW5jIGxvZ291dCgpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5zZW5kUmVxdWVzdCh7XG4gICAgICAgICAgcmVzb3VyY2U6IHRoaXMuYXBpLnVzZXJzLmxvZ291dCxcbiAgICAgICAgICBpbnRlcm5hbDogdHJ1ZVxuICAgICAgICB9KVxuICAgICAgICBpZiAocmVzcG9uc2UuZGF0YS5zdWNjZXNzKSB7XG4gICAgICAgICAgdGhpcy5zZXRVc2VyKG51bGwpXG4gICAgICAgICAgdGhpcy5uYXZpZ2F0ZUhvbWUoKVxuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihlcnIpXG4gICAgICB9XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoVXNlcigpIHtcbiAgICAgIGxldCB1c2VyID0gbnVsbFxuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnNlbmRSZXF1ZXN0KHtcbiAgICAgICAgICByZXNvdXJjZTogdGhpcy5hcGkudXNlcnMuc2Vzc2lvbixcbiAgICAgICAgICBpbnRlcm5hbDogdHJ1ZVxuICAgICAgICB9KVxuICAgICAgICB1c2VyID0gcmVzcG9uc2UuZGF0YS51c2VyIHx8IG51bGxcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICB0aGlzLm5vdGlmeSh7XG4gICAgICAgICAgdHlwZTogJ2Vycm9yJyxcbiAgICAgICAgICB0aXRsZTogJ0F1dGhlbnRpY2F0aW9uIEVycm9yJyxcbiAgICAgICAgICB0ZXh0OiBlcnJcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICAgIHRoaXMuc2V0VXNlcih1c2VyKVxuICAgICAgcmV0dXJuIHVzZXJcbiAgICB9LFxuXG4gICAgc2V0VXNlcih1c2VyKSB7XG4gICAgICB0aGlzLmFwcFN0YXRlLnVzZXIgPSAoXG4gICAgICAgIHVzZXIgJiZcbiAgICAgICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKHVzZXIsIERpdG9Vc2VyLnByb3RvdHlwZSlcbiAgICAgIClcbiAgICAgIC8vIENsZWFyIHJlc29sdmVkIHZpZXdzIHdoZW4gdXNlciBpcyBsb2dnZWQgb3V0LlxuICAgICAgaWYgKCF1c2VyKSB7XG4gICAgICAgIHRoaXMucmVzb2x2ZWRWaWV3cyA9IHt9XG4gICAgICAgIHRoaXMubmF2aWdhdGVIb21lKClcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYXN5bmMgZW5zdXJlVXNlcigpIHtcbiAgICAgIGlmICghKGF3YWl0IHRoaXMuZmV0Y2hVc2VyKCkpKSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9naW4oKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBhc3luYyByZXNvbHZlVmlld3MoKSB7XG4gICAgICB0cnkge1xuICAgICAgICB0aGlzLnJlc29sdmVkVmlld3MgPSBhd2FpdCByZXNvbHZlVmlld3ModGhpcy51bnJlc29sdmVkVmlld3MpXG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBpZiAoIWVycm9yLnJlcXVlc3QpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmxvZ2luKClcbiAgICAgIH1cbiAgICAgIC8vIENvbGxlY3QgYWxsIHJvdXRlcyBmcm9tIHRoZSByb290IHNjaGVtYSBjb21wb25lbnRzXG4gICAgICBjb25zdCByb3V0ZXMgPSBhd2FpdCBtYXBDb25jdXJyZW50bHkoXG4gICAgICAgIE9iamVjdC5lbnRyaWVzKHRoaXMucmVzb2x2ZWRWaWV3cyksXG4gICAgICAgIChbbmFtZSwgc2NoZW1hXSkgPT4gcHJvY2Vzc1ZpZXcoRGl0b1ZpZXcsIHRoaXMuYXBpLCBzY2hlbWEsIG5hbWUpXG4gICAgICApXG4gICAgICAvLyBOb3cgdGhhdCB0aGUgcm91dGVzIGFyZSBsb2FkZWQsIHJlcGxhY2UgYWxsIGV4aXN0aW5nIHJvdXRlcyB3aXRoIHRoZVxuICAgICAgLy8gbmV3IHJvdXRlcywgYW5kIHJlc3RvcmUgdGhlIGN1cnJlbnQgcGF0aC5cbiAgICAgIGNvbnN0IHsgZnVsbFBhdGggfSA9IHRoaXMuJHJvdXRlXG4gICAgICB0aGlzLnJlbW92ZVJvdXRlcz8uKClcbiAgICAgIHRoaXMucmVtb3ZlUm91dGVzID0gYWRkUm91dGVzKHRoaXMuJHJvdXRlciwgW1xuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogJ3Jvb3QnLFxuICAgICAgICAgIHBhdGg6ICcvJyxcbiAgICAgICAgICBjb21wb25lbnRzOiB7fVxuICAgICAgICB9LFxuICAgICAgICAuLi5yb3V0ZXMuZmxhdCgpXG4gICAgICBdKVxuICAgICAgdGhpcy4kcm91dGVyLnJlcGxhY2UoZnVsbFBhdGgpXG4gICAgfSxcblxuICAgIG9uUmVzaXplUGFnZSh7IGNvbnRlbnRSZWN0OiB7IHdpZHRoIH0gfSkge1xuICAgICAgdGhpcy5wYWdlV2lkdGggPSB3aWR0aFxuICAgIH1cbiAgfVxufSlcblxubGV0IGRpYWxvZ0lkID0gMFxuXG5mdW5jdGlvbiBhZGRSb3V0ZXMocm91dGVyLCByb3V0ZXMpIHtcbiAgY29uc3QgcmVtb3ZlcnMgPSBbXVxuICBmb3IgKGNvbnN0IHJvdXRlIG9mIHJvdXRlcykge1xuICAgIGNvbnN0IHJlbW92ZSA9IHJvdXRlci5hZGRSb3V0ZShyb3V0ZSlcbiAgICByZW1vdmVycy5wdXNoKHJlbW92ZSlcbiAgfVxuXG4gIHJldHVybiAoKSA9PiB7XG4gICAgZm9yIChjb25zdCByZW1vdmUgb2YgcmVtb3ZlcnMpIHtcbiAgICAgIHJlbW92ZSgpXG4gICAgfVxuICB9XG59XG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvc3R5bGUnO1xuXG4uZGl0by1hcHAsXG4uZGl0by1yb290IHtcbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogMTAwJTtcbiAgZGlzcGxheTogZmxleDtcbn1cblxuLmRpdG8tcGFnZSB7XG4gIC0tbWF4LWNvbnRlbnQtd2lkdGg6ICN7JGNvbnRlbnQtd2lkdGh9O1xuICAtLW1heC1wYWdlLXdpZHRoOiBjYWxjKHZhcigtLW1heC1jb250ZW50LXdpZHRoKSArIDIgKiAjeyRjb250ZW50LXBhZGRpbmd9KTtcblxuICBmbGV4OiAwIDEgdmFyKC0tbWF4LXBhZ2Utd2lkdGgpO1xuICBiYWNrZ3JvdW5kOiAkY29udGVudC1jb2xvci1iYWNrZ3JvdW5kO1xuICBtaW4td2lkdGg6IDAlO1xuICBtYXgtd2lkdGg6IHZhcigtLW1heC1wYWdlLXdpZHRoKTtcbiAgb3ZlcmZsb3c6IHZpc2libGU7IC8vIEZvciAuZGl0by1oZWFkZXIgZnVsbC13aWR0aCBiYWNrZ3JvdW5kLlxuXG4gICYtLXdpZGUge1xuICAgIC0tbWF4LWNvbnRlbnQtd2lkdGg6ICN7JGNvbnRlbnQtd2lkdGgtd2lkZX07XG4gIH1cbn1cblxuLmRpdG8tYWNjb3VudCxcbi5kaXRvLWxvZ2luIHtcbiAgY3Vyc29yOiBwb2ludGVyO1xufVxuXG4uZGl0by1kcmFnLW92ZXJsYXkge1xuICBwb3NpdGlvbjogZml4ZWQ7XG4gIHRvcDogMDtcbiAgbGVmdDogMDtcbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogMTAwJTtcbiAgei1pbmRleDogJHotaW5kZXgtZHJhZy1vdmVybGF5O1xuICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuMjUpO1xuICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgYmFja2Ryb3AtZmlsdGVyOiBibHVyKDhweCk7XG59XG5cbi5kaXRvLWRyb3AtdGFyZ2V0IHtcbiAgLS1zaGFkb3ctYWxwaGE6IDAuMjU7XG5cbiAgYmFja2dyb3VuZDogJGNvbnRlbnQtY29sb3ItYmFja2dyb3VuZDtcbiAgYm9yZGVyLXJhZGl1czogJGJvcmRlci1yYWRpdXM7XG4gIHotaW5kZXg6ICR6LWluZGV4LWRyYWctb3ZlcmxheSArIDE7XG4gIGZpbHRlcjogZHJvcC1zaGFkb3coMCA0cHggOHB4IHJnYmEoMCwgMCwgMCwgdmFyKC0tc2hhZG93LWFscGhhKSkpO1xufVxuXG4uZGl0by1kcmFnLWVudGVyLWFjdGl2ZSxcbi5kaXRvLWRyYWctbGVhdmUtYWN0aXZlIHtcbiAgJGR1cmF0aW9uOiAwLjE1cztcblxuICB0cmFuc2l0aW9uOlxuICAgIG9wYWNpdHkgJGR1cmF0aW9uLFxuICAgIGJhY2tkcm9wLWZpbHRlciAkZHVyYXRpb247XG5cbiAgfiAqIC5kaXRvLWRyb3AtdGFyZ2V0IHtcbiAgICB0cmFuc2l0aW9uOiBmaWx0ZXIgJGR1cmF0aW9uO1xuICB9XG59XG5cbi5kaXRvLWRyYWctZW50ZXItZnJvbSxcbi5kaXRvLWRyYWctbGVhdmUtdG8ge1xuICBvcGFjaXR5OiAwO1xuICBiYWNrZHJvcC1maWx0ZXI6IGJsdXIoMCk7XG5cbiAgfiAqIC5kaXRvLWRyb3AtdGFyZ2V0IHtcbiAgICAtLXNoYWRvdy1hbHBoYTogMDtcbiAgfVxufVxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG51bC5kaXRvLW1lbnUoXG4gIHYtcmVzaXplPVwib25SZXNpemVcIlxuICA6c3R5bGU9XCJ7ICctLXdpZHRoJzogd2lkdGggPyBgJHt3aWR0aH1weGAgOiBudWxsIH1cIlxuKVxuICBsaShcbiAgICB2LWZvcj1cIml0ZW0gaW4gaXRlbXNcIlxuICApXG4gICAgdGVtcGxhdGUoXG4gICAgICB2LWlmPVwic2hvdWxkUmVuZGVyU2NoZW1hKGl0ZW0pXCJcbiAgICApXG4gICAgICBhLmRpdG8tbGluayhcbiAgICAgICAgOmhyZWY9XCJnZXRJdGVtSHJlZihpdGVtKVwiXG4gICAgICAgIDpjbGFzcz1cImdldEl0ZW1DbGFzcyhpdGVtLCAnZGl0by1zdWItbWVudS1saW5rJylcIlxuICAgICAgICBAY2xpY2sucHJldmVudC5zdG9wPVwib25DbGlja0l0ZW0oaXRlbSlcIlxuICAgICAgKSB7eyBnZXRMYWJlbChpdGVtKSB9fVxuICAgICAgRGl0b01lbnUoXG4gICAgICAgIHYtaWY9XCJpdGVtLml0ZW1zXCJcbiAgICAgICAgOmNsYXNzPVwiZ2V0SXRlbUNsYXNzKGl0ZW0sICdkaXRvLXN1Yi1tZW51JylcIlxuICAgICAgICA6aXRlbXM9XCJpdGVtLml0ZW1zXCJcbiAgICAgICAgOnBhdGg9XCJnZXRJdGVtUGF0aChpdGVtLCBmYWxzZSlcIlxuICAgICAgKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnRGl0b01lbnUnLCB7XG4gIHByb3BzOiB7XG4gICAgaXRlbXM6IHtcbiAgICAgIHR5cGU6IFtPYmplY3QsIEFycmF5XSxcbiAgICAgIGRlZmF1bHQ6ICgpID0+IFtdXG4gICAgfSxcbiAgICBwYXRoOiB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBkZWZhdWx0OiAnJ1xuICAgIH1cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICB3aWR0aDogMFxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgb25SZXNpemUoeyBjb250ZW50UmVjdDogeyB3aWR0aCB9IH0pIHtcbiAgICAgIGlmICh3aWR0aCkge1xuICAgICAgICB0aGlzLndpZHRoID0gd2lkdGhcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZ2V0SXRlbUNsYXNzKGl0ZW0sIHN1Yk1lbnVDbGFzcykge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgW3N1Yk1lbnVDbGFzc106ICEhaXRlbS5pdGVtcyxcbiAgICAgICAgJ2RpdG8tYWN0aXZlJzogdGhpcy5pc0FjdGl2ZUl0ZW0oaXRlbSlcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZ2V0SXRlbVBhdGgoaXRlbSwgZmlyc3RDaGlsZCkge1xuICAgICAgY29uc3QgcGF0aCA9IGl0ZW0ucGF0aCA/IGAke3RoaXMucGF0aH0vJHtpdGVtLnBhdGh9YCA6IG51bGxcbiAgICAgIHJldHVybiBmaXJzdENoaWxkICYmIHBhdGggJiYgaXRlbS5pdGVtc1xuICAgICAgICA/IGAke3BhdGh9JHt0aGlzLmdldEl0ZW1QYXRoKE9iamVjdC52YWx1ZXMoaXRlbS5pdGVtcylbMF0sIGZhbHNlKX1gXG4gICAgICAgIDogcGF0aFxuICAgIH0sXG5cbiAgICBnZXRJdGVtSHJlZihpdGVtKSB7XG4gICAgICBjb25zdCBwYXRoID0gdGhpcy5nZXRJdGVtUGF0aChpdGVtLCB0cnVlKVxuICAgICAgcmV0dXJuIHBhdGggPyB0aGlzLiRyb3V0ZXIucmVzb2x2ZShwYXRoKS5ocmVmIDogbnVsbFxuICAgIH0sXG5cbiAgICBpc0FjdGl2ZUl0ZW0oaXRlbSkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgdGhpcy4kcm91dGUucGF0aC5zdGFydHNXaXRoKHRoaXMuZ2V0SXRlbVBhdGgoaXRlbSwgZmFsc2UpKSB8fFxuICAgICAgICBpdGVtLml0ZW1zICYmIE9iamVjdC52YWx1ZXMoaXRlbS5pdGVtcykuc29tZSh0aGlzLmlzQWN0aXZlSXRlbSlcbiAgICAgIClcbiAgICB9LFxuXG4gICAgb25DbGlja0l0ZW0oaXRlbSkge1xuICAgICAgY29uc3QgcGF0aCA9IHRoaXMuZ2V0SXRlbVBhdGgoaXRlbSwgdHJ1ZSlcbiAgICAgIGlmIChwYXRoKSB7XG4gICAgICAgIHRoaXMuJHJvdXRlci5wdXNoKHsgcGF0aCwgZm9yY2U6IHRydWUgfSlcbiAgICAgIH1cbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AdXNlICdzYXNzOmNvbG9yJztcbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5cbi5kaXRvLW1lbnUge1xuICAkaXRlbS1oZWlnaHQ6ICRtZW51LWZvbnQtc2l6ZSArIDIgKiAkbWVudS1wYWRkaW5nLXZlcjtcblxuICBib3JkZXItcmlnaHQ6ICRib3JkZXItc3R5bGU7XG4gIHBhZGRpbmc6IDAgJG1lbnUtc3BhY2luZztcblxuICBsaSB7XG4gICAgJjpoYXMoLmRpdG8tc3ViLW1lbnU6bm90KC5kaXRvLWFjdGl2ZSkpIHtcbiAgICAgIC8vIFBvcC1vdXQgc3ViLW1lbnVzIG9uIGhvdmVyOlxuICAgICAgJjpob3ZlciB7XG4gICAgICAgIC5kaXRvLXN1Yi1tZW51LWxpbmsge1xuICAgICAgICAgIGJhY2tncm91bmQ6ICRjb2xvci1saWdodGVzdDtcbiAgICAgICAgfVxuXG4gICAgICAgIC5kaXRvLXN1Yi1tZW51IHtcbiAgICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgICAgd2lkdGg6IHZhcigtLXdpZHRoKTtcbiAgICAgICAgICB6LWluZGV4OiAkei1pbmRleC1oZWFkZXI7XG4gICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKGNhbGModmFyKC0td2lkdGgpICsgMiAqICRtZW51LXNwYWNpbmcpKVxuICAgICAgICAgICAgdHJhbnNsYXRlWSgtJGl0ZW0taGVpZ2h0KTtcblxuICAgICAgICAgIGxpOmZpcnN0LWNoaWxkIHtcbiAgICAgICAgICAgIC5kaXRvLWxpbmsge1xuICAgICAgICAgICAgICBtYXJnaW4tdG9wOiAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgICY6OmJlZm9yZSB7XG4gICAgICAgICAgICAvLyBGaWxsIHRoZSBnYXAgdG8gbm90IGxvb3NlIHRoZSBob3ZlciB3aGVuIG1vdmluZyBvdmVyIGl0LlxuICAgICAgICAgICAgY29udGVudDogJyc7XG4gICAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgICAgICB0b3A6IDA7XG4gICAgICAgICAgICBsZWZ0OiAtMiAqICRtZW51LXNwYWNpbmc7XG4gICAgICAgICAgICB3aWR0aDogMiAqICRtZW51LXNwYWNpbmc7XG4gICAgICAgICAgICBoZWlnaHQ6ICRpdGVtLWhlaWdodDtcbiAgICAgICAgICAgIG9wYWNpdHk6IDA7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gLmRpdG8tc3ViLW1lbnUtbGluayxcbiAgICAgICAgLmRpdG8tc3ViLW1lbnUge1xuICAgICAgICAgIGJveC1zaGFkb3c6ICRzaGFkb3ctd2luZG93O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLmRpdG8tbGluayB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgcGFkZGluZzogJG1lbnUtcGFkZGluZztcbiAgICBsaW5lLWhlaWdodDogJG1lbnUtbGluZS1oZWlnaHQ7XG4gICAgYm9yZGVyLXJhZGl1czogJGJvcmRlci1yYWRpdXM7XG4gICAgbWFyZ2luLXRvcDogJG1lbnUtc3BhY2luZztcblxuICAgICY6Zm9jdXM6bm90KDphY3RpdmUsIC5kaXRvLWFjdGl2ZSkge1xuICAgICAgYm94LXNoYWRvdzogJHNoYWRvdy1mb2N1cztcbiAgICB9XG5cbiAgICAmOmhvdmVyIHtcbiAgICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC41KTtcbiAgICB9XG5cbiAgICAmLmRpdG8tYWN0aXZlIHtcbiAgICAgIGNvbG9yOiAkY29sb3Itd2hpdGU7XG4gICAgICBiYWNrZ3JvdW5kOiAkY29sb3ItYWN0aXZlO1xuICAgIH1cbiAgfVxuXG4gIC5kaXRvLXN1Yi1tZW51LWxpbmsge1xuICAgICYuZGl0by1hY3RpdmUge1xuICAgICAgYmFja2dyb3VuZDogY29sb3IuYWRqdXN0KCRjb2xvci1hY3RpdmUsICRhbHBoYTogLTAuMyk7XG4gICAgfVxuICB9XG5cbiAgLmRpdG8tc3ViLW1lbnUge1xuICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgYm9yZGVyLXJpZ2h0OiAwO1xuICAgIHBhZGRpbmc6IDA7XG4gICAgYm9yZGVyLXJhZGl1czogJGJvcmRlci1yYWRpdXM7XG4gICAgYmFja2dyb3VuZDogJGNvbG9yLWxpZ2h0ZXN0O1xuXG4gICAgJi5kaXRvLWFjdGl2ZSB7XG4gICAgICBkaXNwbGF5OiBibG9jaztcbiAgICB9XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuLmRpdG8tdHJhaWxcbiAgdWxcbiAgICBsaShcbiAgICAgIHYtZm9yPVwiY29tcG9uZW50IGluIHRyYWlsXCJcbiAgICApXG4gICAgICBhLmRpdG8tbGluayhcbiAgICAgICAgOmNsYXNzPVwiZ2V0TGlua0NsYXNzKGNvbXBvbmVudClcIlxuICAgICAgICA6aHJlZj1cImdldENvbXBvbmVudEhyZWYoY29tcG9uZW50KVwiXG4gICAgICAgIEBjbGljay5wcmV2ZW50LnN0b3A9XCJvbkNsaWNrQ29tcG9uZW50KGNvbXBvbmVudClcIlxuICAgICAgKVxuICAgICAgICBzcGFuKDpjbGFzcz1cImdldFNwYW5DbGFzcyhjb21wb25lbnQpXCIpXG4gICAgICAgICAgfCB7eyBjb21wb25lbnQuYnJlYWRjcnVtYiB9fVxuICBzbG90XG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdEaXRvVHJhaWwnLCB7XG4gIGNvbXB1dGVkOiB7XG4gICAgdHJhaWwoKSB7XG4gICAgICByZXR1cm4gdGhpcy5hcHBTdGF0ZS5yb3V0ZUNvbXBvbmVudHMuZmlsdGVyKFxuICAgICAgICBjb21wb25lbnQgPT4gISFjb21wb25lbnQucm91dGVSZWNvcmRcbiAgICAgIClcbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGdldENvbXBvbmVudFBhdGgoY29tcG9uZW50KSB7XG4gICAgICAvLyBEbyB0aGUgc2FtZSBhcyBpbiBgRGl0b01lbnVgOiBMaW5rIG1lbnUgaXRlbXMgdG8gdGhlIGZpcnN0IGNoaWxkcmVuLlxuICAgICAgY29uc3QgeyBzY2hlbWEgfSA9IGNvbXBvbmVudFxuICAgICAgcmV0dXJuIHNjaGVtYS50eXBlID09PSAnbWVudSdcbiAgICAgICAgPyBPYmplY3QudmFsdWVzKHNjaGVtYS5pdGVtcylbMF0uZnVsbFBhdGhcbiAgICAgICAgOiBjb21wb25lbnQucGF0aFxuICAgIH0sXG5cbiAgICBnZXRDb21wb25lbnRIcmVmKGNvbXBvbmVudCkge1xuICAgICAgcmV0dXJuIHRoaXMuJHJvdXRlci5yZXNvbHZlKHRoaXMuZ2V0Q29tcG9uZW50UGF0aChjb21wb25lbnQpKS5ocmVmXG4gICAgfSxcblxuICAgIG9uQ2xpY2tDb21wb25lbnQoY29tcG9uZW50KSB7XG4gICAgICB0aGlzLiRyb3V0ZXIucHVzaCh7XG4gICAgICAgIHBhdGg6IHRoaXMuZ2V0Q29tcG9uZW50UGF0aChjb21wb25lbnQpLFxuICAgICAgICBmb3JjZTogdHJ1ZVxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgZ2V0TGlua0NsYXNzKGNvbXBvbmVudCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgJ2RpdG8tYWN0aXZlJzogY29tcG9uZW50LnBhdGggPT09IHRoaXMuJHJvdXRlLnBhdGhcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZ2V0U3BhbkNsYXNzKGNvbXBvbmVudCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgJ2RpdG8tZGlydHknOiBjb21wb25lbnQuaXNEaXJ0eVxuICAgICAgfVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5cbi5kaXRvLXRyYWlsIHtcbiAgZGlzcGxheTogZmxleDtcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgaGVpZ2h0OiAzZW07XG5cbiAgdWwge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gIH1cblxuICBsaSB7XG4gICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgfVxuXG4gIGEge1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICBkaXNwbGF5OiBibG9jaztcblxuICAgICY6aG92ZXIge1xuICAgICAgc3BhbiB7XG4gICAgICAgIGNvbG9yOiAkY29sb3ItbGlnaHQ7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgbGk6bm90KDpsYXN0LWNoaWxkKSBhIHtcbiAgICAkYW5nbGU6IDMzZGVnO1xuXG4gICAgJjo6YmVmb3JlLFxuICAgICY6OmFmdGVyIHtcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgIGNvbnRlbnQ6ICcnO1xuICAgICAgd2lkdGg6IDFweDtcbiAgICAgIGhlaWdodDogMC43NWVtO1xuICAgICAgcmlnaHQ6IC0wLjI1ZW07XG4gICAgICBiYWNrZ3JvdW5kOiAkY29sb3Itd2hpdGU7XG4gICAgICBvcGFjaXR5OiAwLjU7XG4gICAgfVxuXG4gICAgJjo6YmVmb3JlIHtcbiAgICAgIHRvcDogNTAlO1xuICAgICAgdHJhbnNmb3JtOiByb3RhdGUoJGFuZ2xlKTtcbiAgICAgIHRyYW5zZm9ybS1vcmlnaW46IHRvcDtcbiAgICB9XG5cbiAgICAmOjphZnRlciB7XG4gICAgICBib3R0b206IDUwJTtcbiAgICAgIHRyYW5zZm9ybTogcm90YXRlKC0kYW5nbGUpO1xuICAgICAgdHJhbnNmb3JtLW9yaWdpbjogYm90dG9tO1xuICAgIH1cbiAgfVxufVxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG5uYXYuZGl0by1oZWFkZXJcbiAgRGl0b1RyYWlsXG4gICAgRGl0b1NwaW5uZXIoXG4gICAgICB2LWlmPVwiaXNMb2FkaW5nXCJcbiAgICAgIDpzaXplPVwic3Bpbm5lcj8uc2l6ZVwiXG4gICAgICA6Y29sb3I9XCJzcGlubmVyPy5jb2xvclwiXG4gICAgKVxuICAvLy0gVGVsZXBvcnQgdGFyZ2V0IGZvciBgLmRpdG8tc2NoZW1hLWhlYWRlcmA6XG4gIC5kaXRvLWhlYWRlcl9fdGVsZXBvcnRcbiAgc2xvdFxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnRGl0b0hlYWRlcicsIHtcbiAgcHJvcHM6IHtcbiAgICBzcGlubmVyOiB7XG4gICAgICB0eXBlOiBPYmplY3QsXG4gICAgICBkZWZhdWx0OiBudWxsXG4gICAgfSxcbiAgICBpc0xvYWRpbmc6IHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5cbi5kaXRvLWhlYWRlciB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgYmFja2dyb3VuZDogJGNvbG9yLWJsYWNrO1xuICBmb250LXNpemU6ICRoZWFkZXItZm9udC1zaXplO1xuICBsaW5lLWhlaWdodDogJGhlYWRlci1saW5lLWhlaWdodDtcbiAgei1pbmRleDogJHotaW5kZXgtaGVhZGVyO1xuICBAaW5jbHVkZSB1c2VyLXNlbGVjdChub25lKTtcblxuICAmOjphZnRlciB7XG4gICAgLy8gU2V0IHRoZSBmdWxsLXdpZHRoIGhlYWRlciBiYWNrZ3JvdW5kIHRvIHRoZSBoZWFkZXIgY29sb3IuXG4gICAgY29udGVudDogJyc7XG4gICAgaW5zZXQ6IDA7XG4gICAgd2lkdGg6IDEwMHZ3O1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICBiYWNrZ3JvdW5kOiBpbmhlcml0O1xuICAgIHotaW5kZXg6IC0xO1xuICB9XG5cbiAgc3BhbiB7XG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgIHBhZGRpbmc6ICRoZWFkZXItcGFkZGluZztcbiAgICBjb2xvcjogJGNvbG9yLXdoaXRlO1xuXG4gICAgJjplbXB0eSB7XG4gICAgICAmOjphZnRlciB7XG4gICAgICAgIGNvbnRlbnQ6ICdcXDIwMGInO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC5kaXRvLWRpcnR5IHtcbiAgICAmOjphZnRlciB7XG4gICAgICBjb250ZW50OiAnJztcbiAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICRjb2xvci13aGl0ZTtcbiAgICAgIHdpZHRoOiA4cHg7XG4gICAgICBoZWlnaHQ6IDhweDtcbiAgICAgIG1hcmdpbjogMnB4O1xuICAgICAgbWFyZ2luLWxlZnQ6IDAuNWVtO1xuICAgICAgYm9yZGVyLXJhZGl1czogMTAwJTtcbiAgICB9XG4gIH1cblxuICAmX190ZWxlcG9ydCB7XG4gICAgLy8gQWxpZ24gdGhlIHRlbGVwb3J0ZWQgc2NoZW1hIGhlYWRlcnMgb24gdG9wIG9mIHRvIHRoZSBoZWFkZXIgbWVudS5cbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgaW5zZXQ6IDA7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtZW5kO1xuICAgIHBhZGRpbmc6IDAgJGhlYWRlci1wYWRkaW5nLWhvcjtcbiAgICAvLyBUdXJuIG9mZiBwb2ludGVyIGV2ZW50cyBzbyB0aGF0IERpdG9UcmFpbCBrZWVwcyByZWNlaXZpbmcgZXZlbnRzLi4uXG4gICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gICAgLy8gLi4uYnV0IG1vdmUgdGhlbSB0byB0aGUgY2hpbGRyZW4uXG4gICAgPiAqIHtcbiAgICAgIHBvaW50ZXItZXZlbnRzOiBhdXRvO1xuICAgIH1cblxuICAgIC5kaXRvLWJ1dHRvbiB7XG4gICAgICBtYXJnaW46IDAgMCAkdGFiLW1hcmdpbiAkdGFiLW1hcmdpbjtcbiAgICB9XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxubmF2LmRpdG8tbmF2aWdhdGlvbi5kaXRvLXNjcm9sbC1wYXJlbnRcbiAgaDFcbiAgICBSb3V0ZXJMaW5rLmRpdG8tbGluayh0bz1cIi9cIikge3sgYXBwU3RhdGUudGl0bGUgfX1cbiAgRGl0b01lbnUuZGl0by1zY3JvbGwoOml0ZW1zPVwidmlld3NcIilcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ0RpdG9OYXZpZ2F0aW9uJywge30pXG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by1uYXZpZ2F0aW9uIHtcbiAgQGluY2x1ZGUgdXNlci1zZWxlY3Qobm9uZSk7XG5cbiAgZmxleDogMCAwIG1pbi1jb250ZW50O1xuICBmb250LXNpemU6ICRtZW51LWZvbnQtc2l6ZTtcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgYmFja2dyb3VuZDogJGNvbG9yLWxpZ2h0ZXI7XG5cbiAgaDEge1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIGxpbmUtaGVpZ2h0OiAkaGVhZGVyLWxpbmUtaGVpZ2h0O1xuICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xuICAgIGJhY2tncm91bmQ6ICRjb2xvci1kYXJrZXI7XG4gICAgYm9yZGVyLXJpZ2h0OiAkYm9yZGVyLXdpZHRoIHNvbGlkICRjb2xvci1kYXJrZXN0O1xuICAgIGNvbG9yOiAkY29sb3Itd2hpdGU7XG5cbiAgICAuZGl0by1saW5rIHtcbiAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgcGFkZGluZzogJGhlYWRlci1wYWRkaW5nO1xuICAgIH1cbiAgfVxufVxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4uZGl0by1ub3RpZmljYXRpb25zXG4gIC5kaXRvLWhlYWRlclxuICAgIHNwYW5cbiAgLmRpdG8tbm90aWZpY2F0aW9uc19faW5uZXJcbiAgICBWdWVOb3RpZmljYXRpb25zKFxuICAgICAgcmVmPVwibm90aWZpY2F0aW9uc1wiXG4gICAgICBjbGFzc2VzPVwiZGl0by1ub3RpZmljYXRpb25cIlxuICAgICAgOmRhbmdlcm91c2x5U2V0SW5uZXJIdG1sPVwidHJ1ZVwiXG4gICAgICBwb3NpdGlvbj1cIlwiXG4gICAgICB3aWR0aD1cIlwiXG4gICAgKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgeyBhc0FycmF5LCBzdHJpcFRhZ3MgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ0RpdG9Ob3RpZmljYXRpb25zJywge1xuICBub3RpZmljYXRpb25zKCkge1xuICAgIHJldHVybiB0aGlzLmlzTW91bnRlZCAmJiB0aGlzLiRyZWZzLm5vdGlmaWNhdGlvbnNcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgbm90aWZ5KHsgdHlwZSA9ICdpbmZvJywgdGl0bGUsIHRleHQgfSA9IHt9KSB7XG4gICAgICB0aXRsZSB8fD0gKFxuICAgICAgICB7XG4gICAgICAgICAgd2FybmluZzogJ1dhcm5pbmcnLFxuICAgICAgICAgIGVycm9yOiAnRXJyb3InLFxuICAgICAgICAgIGluZm86ICdJbmZvcm1hdGlvbicsXG4gICAgICAgICAgc3VjY2VzczogJ1N1Y2Nlc3MnXG4gICAgICAgIH1bdHlwZV0gfHxcbiAgICAgICAgJ05vdGlmaWNhdGlvbidcbiAgICAgIClcbiAgICAgIHRleHQgPSBgPHA+JHtcbiAgICAgICAgYXNBcnJheSh0ZXh0KS5qb2luKCc8L3A+IDxwPicpXG4gICAgICB9PC9wPmAucmVwbGFjZSgvXFxufFxcclxcbnxcXHIvZywgJzxicj4nKVxuICAgICAgY29uc3QgbG9nID0gKFxuICAgICAgICB7XG4gICAgICAgICAgd2FybmluZzogJ3dhcm4nLFxuICAgICAgICAgIGVycm9yOiAnZXJyb3InLFxuICAgICAgICAgIGluZm86ICdsb2cnLFxuICAgICAgICAgIHN1Y2Nlc3M6ICdsb2cnXG4gICAgICAgIH1bdHlwZV0gfHxcbiAgICAgICAgJ2Vycm9yJ1xuICAgICAgKVxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgIGNvbnNvbGVbbG9nXShzdHJpcFRhZ3ModGV4dCkpXG4gICAgICBjb25zdCB7IG5vdGlmaWNhdGlvbnMgPSB0cnVlIH0gPSB0aGlzLmFwaVxuICAgICAgaWYgKG5vdGlmaWNhdGlvbnMpIHtcbiAgICAgICAgLy8gQ2FsY3VsYXRlIGRpc3BsYXktZHVyYXRpb24gZm9yIHRoZSBub3RpZmljYXRpb24gYmFzZWQgb24gaXRzIGNvbnRlbnRcbiAgICAgICAgLy8gYW5kIHRoZSBzZXR0aW5nIG9mIHRoZSBgZHVyYXRpb25GYWN0b3JgIGNvbmZpZ3VyYXRpb24uIEl0IGRlZmluZXMgdGhlXG4gICAgICAgIC8vIGFtb3VudCBvZiBtaWxsaXNlY29uZHMgbXVsdGlwbGllZCB3aXRoIHRoZSBhbW91bnQgb2YgY2hhcmFjdGVyc1xuICAgICAgICAvLyBkaXNwbGF5ZWQgaW4gdGhlIG5vdGlmaWNhdGlvbiwgcGx1cyA0MCAoNDAgKyB0aXRsZSArIG1lc3NhZ2UpOlxuICAgICAgICBjb25zdCB7IGR1cmF0aW9uRmFjdG9yID0gMjAgfSA9IG5vdGlmaWNhdGlvbnNcbiAgICAgICAgY29uc3QgZHVyYXRpb24gPSAoNDAgKyB0ZXh0Lmxlbmd0aCArIHRpdGxlLmxlbmd0aCkgKiBkdXJhdGlvbkZhY3RvclxuICAgICAgICB0aGlzLiRub3RpZnkoeyB0eXBlLCB0aXRsZSwgdGV4dCwgZHVyYXRpb24gfSlcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZGVzdHJveUFsbCgpIHtcbiAgICAgIHRoaXMubm90aWZpY2F0aW9ucy5kZXN0cm95QWxsKClcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AdXNlICdzYXNzOmNvbG9yJztcbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5cbkBtaXhpbiB0eXBlKCRiYWNrZ3JvdW5kKSB7XG4gIGJhY2tncm91bmQ6IGNvbG9yLmFkanVzdCgkYmFja2dyb3VuZCwgJGxpZ2h0bmVzczogNSUpO1xuICBjb2xvcjogJGNvbG9yLXdoaXRlO1xuICBib3JkZXItbGVmdDogMTJweCBzb2xpZCBjb2xvci5hZGp1c3QoJGJhY2tncm91bmQsICRsaWdodG5lc3M6IC0xMCUpO1xufVxuXG4uZGl0by1ub3RpZmljYXRpb25zIHtcbiAgJG5vdGlmaWNhdGlvbi13aWR0aDogMzAwcHg7XG5cbiAgZmxleDogMTtcbiAgei1pbmRleDogJHotaW5kZXgtbm90aWZpY2F0aW9ucztcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgbWFyZ2luLWxlZnQ6ICRmb3JtLXNwYWNpbmc7XG4gIC8vIEZvciB0aGUgYEBjb250YWluZXJgIHJ1bGUgdG8gd29yazpcbiAgY29udGFpbmVyLXR5cGU6IGlubGluZS1zaXplO1xuXG4gIC5kaXRvLWhlYWRlciB7XG4gICAgc3BhbiB7XG4gICAgICBwYWRkaW5nLWxlZnQ6IDA7XG4gICAgICBwYWRkaW5nLXJpZ2h0OiAwO1xuICAgIH1cbiAgfVxuXG4gICZfX2lubmVyIHtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIH1cblxuICAudnVlLW5vdGlmaWNhdGlvbi1ncm91cCB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIGxlZnQ6IDA7XG4gICAgdG9wOiAwO1xuICAgIHdpZHRoOiAkbm90aWZpY2F0aW9uLXdpZHRoO1xuXG4gICAgQGNvbnRhaW5lciAod2lkdGggPCAjeyRub3RpZmljYXRpb24td2lkdGggKyAkY29udGVudC1wYWRkaW5nfSkge1xuICAgICAgbGVmdDogdW5zZXQ7XG4gICAgICByaWdodDogJGNvbnRlbnQtcGFkZGluZztcbiAgICB9XG4gIH1cblxuICAudnVlLW5vdGlmaWNhdGlvbi13cmFwcGVyIHtcbiAgICBvdmVyZmxvdzogdmlzaWJsZTtcbiAgfVxuXG4gIC5kaXRvLW5vdGlmaWNhdGlvbiB7XG4gICAgcGFkZGluZzogOHB4O1xuICAgIG1hcmdpbjogJGNvbnRlbnQtcGFkZGluZyAwO1xuICAgIGZvbnQtc2l6ZTogaW5oZXJpdDtcbiAgICBjb2xvcjogJGNvbG9yLXdoaXRlO1xuICAgIGJvcmRlci1yYWRpdXM6ICRib3JkZXItcmFkaXVzO1xuICAgIGJveC1zaGFkb3c6ICRzaGFkb3ctd2luZG93O1xuXG4gICAgLm5vdGlmaWNhdGlvbi10aXRsZSB7XG4gICAgICBmb250LXdlaWdodDogYm9sZDtcbiAgICAgIHBhZGRpbmctYm90dG9tOiA4cHg7XG4gICAgfVxuXG4gICAgLm5vdGlmaWNhdGlvbi1jb250ZW50IHtcbiAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICB3b3JkLWJyZWFrOiBicmVhay1hbGw7XG5cbiAgICAgIHAge1xuICAgICAgICBtYXJnaW46IDA7XG5cbiAgICAgICAgJiArIHAge1xuICAgICAgICAgIG1hcmdpbi10b3A6IDhweDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgICYsXG4gICAgJi5pbmZvIHtcbiAgICAgIEBpbmNsdWRlIHR5cGUoJGNvbG9yLWFjdGl2ZSk7XG4gICAgfVxuXG4gICAgJi5zdWNjZXNzIHtcbiAgICAgIEBpbmNsdWRlIHR5cGUoJGNvbG9yLXN1Y2Nlc3MpO1xuICAgIH1cblxuICAgICYud2FybmluZyB7XG4gICAgICBAaW5jbHVkZSB0eXBlKCRjb2xvci13YXJuaW5nKTtcbiAgICB9XG5cbiAgICAmLmVycm9yIHtcbiAgICAgIEBpbmNsdWRlIHR5cGUoJGNvbG9yLWVycm9yKTtcbiAgICB9XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuYXNpZGUuZGl0by1zaWRlYmFyLmRpdG8tc2Nyb2xsLXBhcmVudChcbiAgdi1yZXNpemU9XCJvblJlc2l6ZVNpZGViYXJcIlxuICA6Y2xhc3M9XCJjbGFzc2VzXCJcbilcbiAgbmF2LmRpdG8taGVhZGVyXG4gICAgc2xvdFxuICAuZGl0by1zaWRlYmFyX190ZWxlcG9ydC5kaXRvLXNjcm9sbFxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnRGl0b1NpZGViYXInLCB7XG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHNpZGViYXJXaWR0aDogMFxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIGNsYXNzZXMoKSB7XG4gICAgICBjb25zdCBwcmVmaXggPSAnZGl0by1zaWRlYmFyJ1xuICAgICAgLy8gTk9URTogS2VlcCBzeW5jZWQgd2l0aCAkc2lkZWJhci1tYXgtd2lkdGggaW4gU0NTUzpcbiAgICAgIGNvbnN0IHNpZGViYXJXaWR0aCA9IDM2MFxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgW2Ake3ByZWZpeH0tLXdpZHRoLTk5YF06IHRoaXMuc2lkZWJhcldpZHRoIDwgc2lkZWJhcldpZHRoLFxuICAgICAgICBbYCR7cHJlZml4fS0td2lkdGgtNjBgXTogdGhpcy5zaWRlYmFyV2lkdGggPD0gc2lkZWJhcldpZHRoICogMC42XG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBvblJlc2l6ZVNpZGViYXIoeyBjb250ZW50UmVjdDogeyB3aWR0aCB9IH0pIHtcbiAgICAgIHRoaXMuc2lkZWJhcldpZHRoID0gd2lkdGhcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by1zaWRlYmFyIHtcbiAgZmxleDogMCAxICRzaWRlYmFyLW1heC13aWR0aDtcbiAgbWF4LXdpZHRoOiAkc2lkZWJhci1tYXgtd2lkdGg7XG4gIG1pbi13aWR0aDogJHNpZGViYXItbWluLXdpZHRoO1xufVxuPC9zdHlsZT5cbiIsImltcG9ydCBEb21NaXhpbiBmcm9tICcuL0RvbU1peGluLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQge1xuICBtaXhpbnM6IFtEb21NaXhpbl0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgcHVsbGRvd246IHtcbiAgICAgICAgb3BlbjogZmFsc2UsXG4gICAgICAgIHN0YXJ0VGltZTogMCxcbiAgICAgICAgY2hlY2tUaW1lOiB0cnVlLFxuICAgICAgICBldmVudHM6IHtcbiAgICAgICAgICBtb3VzZWRvd246ICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc2V0UHVsbGRvd25PcGVuKGZhbHNlKVxuICAgICAgICAgICAgdGhpcy5wdWxsZG93bi5oYW5kbGVycy5yZW1vdmUoKVxuICAgICAgICAgIH0sXG5cbiAgICAgICAgICBtb3VzZXVwOiAoKSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5vblB1bGxkb3duTW91c2VVcCgpKSB7XG4gICAgICAgICAgICAgIHRoaXMucHVsbGRvd24uaGFuZGxlcnMucmVtb3ZlKClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGhhbmRsZXJzOiBudWxsXG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBvblB1bGxkb3duTW91c2VEb3duKHZhbHVlID0gbnVsbCkge1xuICAgICAgaWYgKHZhbHVlID09PSBudWxsKSB7XG4gICAgICAgIHRoaXMuc2V0UHVsbGRvd25PcGVuKHRydWUpXG4gICAgICAgIHRoaXMuY2hlY2tUaW1lID0gdHJ1ZVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5jaGVja1RpbWUgPSBmYWxzZVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBvblB1bGxkb3duTW91c2VVcCh2YWx1ZSA9IG51bGwpIHtcbiAgICAgIGNvbnN0IHsgc3RhcnRUaW1lIH0gPSB0aGlzLnB1bGxkb3duXG4gICAgICBpZiAoIXRoaXMuY2hlY2tUaW1lIHx8IHN0YXJ0VGltZSAmJiAoRGF0ZS5ub3coKSAtIHN0YXJ0VGltZSA+IDI1MCkpIHtcbiAgICAgICAgdGhpcy5zZXRQdWxsZG93bk9wZW4oZmFsc2UpXG4gICAgICAgIGlmICh2YWx1ZSAhPT0gbnVsbCkge1xuICAgICAgICAgIHRoaXMub25QdWxsZG93blNlbGVjdCh2YWx1ZSlcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBvblB1bGxkb3duU2VsZWN0KC8qIHZhbHVlICovKSB7XG4gICAgICAvLyBOT1RFOiBUbyBiZSBvdmVycmlkZGVuLlxuICAgIH0sXG5cbiAgICBzZXRQdWxsZG93bk9wZW4ob3Blbikge1xuICAgICAgdGhpcy5wdWxsZG93bi5vcGVuID0gb3BlblxuICAgICAgdGhpcy5wdWxsZG93bi5zdGFydFRpbWUgPSBvcGVuID8gRGF0ZS5ub3coKSA6IDBcbiAgICAgIGlmIChvcGVuKSB7XG4gICAgICAgIHRoaXMucHVsbGRvd24uaGFuZGxlcnMgPSB0aGlzLmRvbU9uKGRvY3VtZW50LCB0aGlzLnB1bGxkb3duLmV2ZW50cylcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4uZGl0by1hY2NvdW50XG4gIGEoXG4gICAgQG1vdXNlZG93bi5zdG9wPVwib25QdWxsZG93bk1vdXNlRG93bigpXCJcbiAgKVxuICAgIHNwYW4ge3sgdXNlci51c2VybmFtZSB9fVxuICB1bC5kaXRvLXB1bGxkb3duKDpjbGFzcz1cInsgJ2RpdG8tb3Blbic6IHB1bGxkb3duLm9wZW4gfVwiKVxuICAgIGxpKFxuICAgICAgdi1mb3I9XCIobGFiZWwsIHZhbHVlKSBvZiBpdGVtc1wiXG4gICAgKVxuICAgICAgYShcbiAgICAgICAgQG1vdXNlZG93bi5zdG9wPVwib25QdWxsZG93bk1vdXNlRG93bih2YWx1ZSlcIlxuICAgICAgICBAbW91c2V1cD1cIm9uUHVsbGRvd25Nb3VzZVVwKHZhbHVlKVwiXG4gICAgICApIHt7IGxhYmVsIH19XG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCBQdWxsZG93bk1peGluIGZyb20gJy4uL21peGlucy9QdWxsZG93bk1peGluLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ0RpdG9BY2NvdW50Jywge1xuICBtaXhpbnM6IFtQdWxsZG93bk1peGluXSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBpdGVtczoge1xuICAgICAgICBzZXR0aW5nczogJ1NldHRpbmdzJyxcbiAgICAgICAgbG9nb3V0OiAnTG9nb3V0J1xuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgb25QdWxsZG93blNlbGVjdCh2YWx1ZSkge1xuICAgICAgc3dpdGNoICh2YWx1ZSkge1xuICAgICAgICBjYXNlICdsb2dvdXQnOlxuICAgICAgICAgIHRoaXMucm9vdENvbXBvbmVudC5sb2dvdXQoKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgJ3NldHRpbmdzJzpcbiAgICAgICAgICBjb25zb2xlLmluZm8oJ1RPRE86IEltcGxlbWVudCBTZXR0aW5ncycpXG4gICAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by1hY2NvdW50IHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG5cbiAgLmRpdG8tcHVsbGRvd24ge1xuICAgIHRvcDogJHB1bGxkb3duLXBhZGRpbmctdmVyO1xuICB9XG59XG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbmNvbXBvbmVudChcbiAgdi1pZj1cIm9wdGlvbnM/LnRleHQgIT0gbnVsbFwiXG4gIDppcz1cInRhZ05hbWVcIlxuICA6Y2xhc3M9XCJjbGFzc2VzXCJcbiAgOnN0eWxlPVwic3R5bGVzXCJcbikge3sgb3B0aW9ucy50ZXh0IH19XG5jb21wb25lbnQoXG4gIHYtZWxzZS1pZj1cIm9wdGlvbnM/Lmh0bWwgIT0gbnVsbFwiXG4gIDppcz1cInRhZ05hbWVcIlxuICA6Y2xhc3M9XCJjbGFzc2VzXCJcbiAgOnN0eWxlPVwic3R5bGVzXCJcbiAgdi1odG1sPVwib3B0aW9ucy5odG1sXCJcbilcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IHsgaXNPYmplY3QsIGlzU3RyaW5nLCBhc0FycmF5IH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdEaXRvRWxlbWVudCcsIHtcbiAgcHJvcHM6IHtcbiAgICB0YWc6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiAnc3BhbicgfSxcbiAgICBjb250ZW50OiB7IHR5cGU6IFtTdHJpbmcsIE9iamVjdF0sIGRlZmF1bHQ6IG51bGwgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgb3B0aW9ucygpIHtcbiAgICAgIGNvbnN0IHsgY29udGVudCB9ID0gdGhpc1xuICAgICAgcmV0dXJuIGNvbnRlbnQgIT0gbnVsbFxuICAgICAgICA/IGlzT2JqZWN0KGNvbnRlbnQpXG4gICAgICAgICAgPyBjb250ZW50XG4gICAgICAgICAgOiB7IHRleHQ6IGNvbnRlbnQgfVxuICAgICAgICA6IG51bGxcbiAgICB9LFxuXG4gICAgdGFnTmFtZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLm9wdGlvbnMudGFnIHx8IHRoaXMudGFnXG4gICAgfSxcblxuICAgIGNsYXNzZXMoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5hc09iamVjdCh0aGlzLiRhdHRycy5jbGFzcyksXG4gICAgICAgIC4uLmFzT2JqZWN0KHRoaXMub3B0aW9ucy5jbGFzcylcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgc3R5bGVzKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uYXNPYmplY3QodGhpcy4kYXR0cnMuc3R5bGUpLFxuICAgICAgICAuLi5hc09iamVjdCh0aGlzLm9wdGlvbnMuc3R5bGUpXG4gICAgICB9XG4gICAgfVxuICB9XG59KVxuXG5mdW5jdGlvbiBhc09iamVjdCh2YWx1ZSkge1xuICByZXR1cm4gYXNBcnJheSh2YWx1ZSkucmVkdWNlKChvYmplY3QsIGVudHJ5KSA9PiB7XG4gICAgaWYgKGlzU3RyaW5nKGVudHJ5KSkge1xuICAgICAgb2JqZWN0W2VudHJ5XSA9IHRydWVcbiAgICB9IGVsc2UgaWYgKGlzT2JqZWN0KGVudHJ5KSkge1xuICAgICAgT2JqZWN0LmFzc2lnbihvYmplY3QsIGVudHJ5KVxuICAgIH1cbiAgICByZXR1cm4gb2JqZWN0XG4gIH0sIHt9KVxufVxuPC9zY3JpcHQ+XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuY29tcG9uZW50LmRpdG8tbGFiZWwoXG4gIHYtaWY9XCJ0ZXh0IHx8IGNvbGxhcHNpYmxlXCJcbiAgOmlzPVwidGFnXCJcbiAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gIDpjbGFzcz1cInsgJ2RpdG8tYWN0aXZlJzogaXNBY3RpdmUgfVwiXG4pXG4gIC5kaXRvLWNoZXZyb24oXG4gICAgdi1pZj1cImNvbGxhcHNpYmxlXCJcbiAgICA6Y2xhc3M9XCJ7ICdkaXRvLW9wZW4nOiAhY29sbGFwc2VkIH1cIlxuICApXG4gIC5kaXRvLWxhYmVsX19pbm5lcihcbiAgICB2LWlmPVwidGV4dCB8fCBwcmVmaXhlcy5sZW5ndGggPiAwIHx8IHN1ZmZpeGVzLmxlbmd0aCA+IDBcIlxuICApXG4gICAgRGl0b0VsZW1lbnQuZGl0by1sYWJlbF9fcHJlZml4KFxuICAgICAgdi1mb3I9XCIocHJlZml4LCBpbmRleCkgb2YgcHJlZml4ZXNcIlxuICAgICAgOmtleT1cImBwcmVmaXgtJHtpbmRleH1gXCJcbiAgICAgIHRhZz1cInNwYW5cIlxuICAgICAgOmNvbnRlbnQ9XCJwcmVmaXhcIlxuICAgIClcbiAgICBsYWJlbChcbiAgICAgIHYtaWY9XCJ0ZXh0XCJcbiAgICAgIDpmb3I9XCJkYXRhUGF0aFwiXG4gICAgICB2LWh0bWw9XCJ0ZXh0XCJcbiAgICApXG4gICAgRGl0b0VsZW1lbnQuZGl0by1sYWJlbF9fc3VmZml4KFxuICAgICAgdi1mb3I9XCIoc3VmZml4LCBpbmRleCkgb2Ygc3VmZml4ZXNcIlxuICAgICAgOmtleT1cImBzdWZmaXgtJHtpbmRleH1gXCJcbiAgICAgIHRhZz1cInNwYW5cIlxuICAgICAgOmNvbnRlbnQ9XCJzdWZmaXhcIlxuICAgIClcbiAgICAuZGl0by1pbmZvKFxuICAgICAgdi1pZj1cImluZm9cIlxuICAgICAgOmRhdGEtaW5mbz1cImluZm9cIlxuICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IHsgaXNPYmplY3QsIGFzQXJyYXkgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ0RpdG9MYWJlbCcsIHtcbiAgZW1pdHM6IFsnb3BlbiddLFxuXG4gIHByb3BzOiB7XG4gICAgbGFiZWw6IHsgdHlwZTogW1N0cmluZywgT2JqZWN0XSwgZGVmYXVsdDogbnVsbCB9LFxuICAgIGRhdGFQYXRoOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogbnVsbCB9LFxuICAgIGNvbGxhcHNlZDogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGNvbGxhcHNpYmxlOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgaW5mbzogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgdGFnKCkge1xuICAgICAgcmV0dXJuIHRoaXMuY29sbGFwc2libGUgPyAnYScgOiAnZGl2J1xuICAgIH0sXG5cbiAgICB0ZXh0KCkge1xuICAgICAgY29uc3QgeyBsYWJlbCB9ID0gdGhpc1xuICAgICAgcmV0dXJuIGlzT2JqZWN0KGxhYmVsKSA/IGxhYmVsPy50ZXh0IDogbGFiZWxcbiAgICB9LFxuXG4gICAgcHJlZml4ZXMoKSB7XG4gICAgICByZXR1cm4gYXNBcnJheSh0aGlzLmxhYmVsPy5wcmVmaXgpXG4gICAgfSxcblxuICAgIHN1ZmZpeGVzKCkge1xuICAgICAgcmV0dXJuIGFzQXJyYXkodGhpcy5sYWJlbD8uc3VmZml4KVxuICAgIH0sXG5cbiAgICBhdHRyaWJ1dGVzKCkge1xuICAgICAgcmV0dXJuIHRoaXMuY29sbGFwc2libGUgPyB7IG9uQ2xpY2s6IHRoaXMub25DbGljayB9IDoge31cbiAgICB9LFxuXG4gICAgaXNBY3RpdmUoKSB7XG4gICAgICByZXR1cm4gdGhpcy5hcHBTdGF0ZS5hY3RpdmVMYWJlbCA9PT0gdGhpc1xuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgb25DbGljaygpIHtcbiAgICAgIHRoaXMuYXBwU3RhdGUuYWN0aXZlTGFiZWwgPSB0aGlzXG4gICAgICB0aGlzLiRlbWl0KCdvcGVuJywgdGhpcy5jb2xsYXBzZWQpXG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLmRpdG8tbGFiZWwge1xuICAkc2VsZjogJjtcblxuICAvLyBGb3IgYnV0dG9ucyBhbmQgY2hldnJvbiB0byBhbGlnbiByaWdodDpcbiAgZGlzcGxheTogZmxleDtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAvLyBWZXJ0aWNhbGx5IGNlbnRlciBhbGwgaXRlbXMgaW4gdGhlIGxhYmVsLCBlLmcuIGNoZXZyb24sIGVkaXQtYnV0dG9ucy5cbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgbWluLWhlaWdodDogJGlucHV0LWhlaWdodDtcbiAgbWFyZ2luLXJpZ2h0OiAkZm9ybS1zcGFjaW5nLWhhbGY7IC8vIFdoZW4gaW5saW5lZC5cblxuICAmOmhhcyguZGl0by1zY2hlbWEtaGVhZGVyKSB7XG4gICAgLy8gVGhlIGNvbnRhaW5lcidzIGxhYmVsIGlzIHVzZWQgYXMgdGVsZXBvcnQgZm9yIGEgbmVzdGVkIHNlY3Rpb24gb3Igb2JqZWN0XG4gICAgLy8gbGFiZWwuIEhpZGUgYCZfX2lubmVyYCwgYXMgaXQgaXMgYmUgZHVwbGljYXRlZCBpbnNpZGUgdGhlIG5lc3RlZCBsYWJlbC5cbiAgICA+ICN7JHNlbGZ9X19pbm5lciB7XG4gICAgICBkaXNwbGF5OiBub25lO1xuICAgIH1cbiAgfVxuXG4gICY6bm90KDpoYXMoKyAuZGl0by10YWJzKSkge1xuICAgIC8vIFRha2UgZnVsbCB3aWR0aCBidXQgb25seSBpZiB0aGVyZSBhcmVuJ3QgYWxzbyB0YWJzIHRvIGJlIGNlbnRlcmVkLlxuICAgIGZsZXg6IDE7XG4gIH1cblxuICAmX19pbm5lciB7XG4gICAgZmxleDogMSAwIDAlO1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuICB9XG5cbiAgbGFiZWwge1xuICAgIGN1cnNvcjogaW5oZXJpdDtcbiAgICBmb250LXdlaWdodDogYm9sZDtcbiAgfVxuXG4gIGxhYmVsLFxuICAmX19wcmVmaXgsXG4gICZfX3N1ZmZpeCB7XG4gICAgQGluY2x1ZGUgdXNlci1zZWxlY3Qobm9uZSk7XG4gICAgQGluY2x1ZGUgZWxsaXBzaXM7XG5cbiAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICAgIGxpbmUtaGVpZ2h0OiAkaW5wdXQtaGVpZ2h0O1xuICB9XG5cbiAgJl9fcHJlZml4ICsgbGFiZWwsXG4gIGxhYmVsICsgJl9fc3VmZml4IHtcbiAgICAmOjpiZWZvcmUge1xuICAgICAgY29udGVudDogJ1xcYTAnOyAvLyAmbmJzcDtcbiAgICB9XG4gIH1cblxuICAuZGl0by1idXR0b25zIHtcbiAgICAvLyBNb3ZlIHRoZSBsYWJlbCBwYWRkaW5nIGluc2lkZSAuZGl0by1idXR0b25zLCBzbyB0aGF0IGl0IGNhcHR1cmVzIGFsbFxuICAgIC8vIG5lYXIgbW91c2UgZXZlbnRzOlxuICAgIG1hcmdpbjogY2FsYygtMSAqIHZhcigtLWxhYmVsLXBhZGRpbmcpKTtcbiAgICBtYXJnaW4tbGVmdDogMDtcbiAgICBwYWRkaW5nOiB2YXIoLS1sYWJlbC1wYWRkaW5nKTtcbiAgfVxuXG4gICYuZGl0by13aWR0aC1maWxsIHtcbiAgICB3aWR0aDogMTAwJTtcblxuICAgIC8vIEluIG9yZGVyIGZvciBlbGxpcHNpcyB0byB3b3JrIG9uIGxhYmVscyB3aXRob3V0IGFmZmVjdGluZyBvdGhlciBsYXlvdXQsXG4gICAgLy8gd2UgbmVlZCB0byBwb3NpdGlvbiBpdCBhYnNvbHV0ZWx5IGluc2lkZSBpdHMgY29udGFpbmVyLiBCdXQgd2UgY2FuIG9ubHlcbiAgICAvLyBkbyBzbyBpZiB0aGVyZSBpcyd0IGFsc28gYSBjaGV2cm9uIG9yIG90aGVyIFVYIGVsZW1lbnRzIGJlc2lkZXMgaXQuXG4gICAgJjpoYXMoPiAjeyRzZWxmfV9faW5uZXI6b25seS1jaGlsZCkge1xuICAgICAgZmxleDogMTsgLy8gV2hlbiBpbiBgLmRpdG8tc2NoZW1hLWhlYWRlcmAuXG5cbiAgICAgID4gI3skc2VsZn1fX2lubmVyIHtcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICBpbnNldDogMDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAmOjphZnRlciB7XG4gICAgICAvLyBTaW5jZSA8bGFiZWw+IHVzZXMgYHBvc2l0aW9uOiBhYnNvbHV0ZWAsIHNldCBjb250ZW50IHRvIGEgemVyby13aWR0aFxuICAgICAgLy8gc3BhY2Ugb24gaXRzIHBhcmVudCB0byBlbmZvcmNlIHRoZSByaWdodCB0ZXh0IGhlaWdodCBpbiB0aGUgY29udGFpbmVyXG4gICAgICBjb250ZW50OiAnXFwyMDBiJzsgLy8gemVyby13aWR0aCBzcGFjZTtcbiAgICB9XG4gIH1cblxuICAuZGl0by1pbmZvIHtcbiAgICBtYXJnaW4tbGVmdDogMC4zNWVtO1xuICB9XG59XG5cbmEuZGl0by1sYWJlbCB7XG4gICY6aG92ZXIge1xuICAgIC5kaXRvLWNoZXZyb24ge1xuICAgICAgY29sb3I6ICRjb2xvci1kYXJrZXI7XG4gICAgfVxuICB9XG5cbiAgJjpmb2N1czpub3QoOmFjdGl2ZSwgLmRpdG8tYWN0aXZlKSB7XG4gICAgLmRpdG8tY2hldnJvbiB7XG4gICAgICAtd2Via2l0LXRleHQtc3Ryb2tlOiAkYm9yZGVyLXdpZHRoICRjb2xvci1hY3RpdmU7XG4gICAgfVxuICAgIC8vIERpc3BsYXkgbGFiZWxzIGluIGNvbXBhY3Qgc2NoZW1hIGFzIGlubGluZS1ibG9ja3MsIHRvIGFsbG93IGNvbXBhY3RcbiAgICAvLyBsYXlvdXRzIHdpdGggYHdpZHRoOiAnYXV0bydgIGVsZW1lbnRzOlxuICAgIC8vIFRPRE86IEZpbmQgYSBiZXR0ZXIgd2F5IHRvIGNvbnRyb2wgdGhpcyBiZWhhdmlvci5cbiAgfVxufVxuXG4uZGl0by1zY2hlbWEtY29tcGFjdCB7XG4gID4gLmRpdG8tc2NoZW1hLWNvbnRlbnQge1xuICAgID4gLmRpdG8tcGFuZSB7XG4gICAgICA+IC5kaXRvLWNvbnRhaW5lcjpub3QoLmRpdG8tY29udGFpbmVyLS1sYWJlbC12ZXJ0aWNhbCkge1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBmbGV4LWZsb3c6IHJvdyB3cmFwO1xuICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuPC9zdHlsZT5cbiIsImltcG9ydCBEaXRvQ29udGV4dCBmcm9tICcuLi9EaXRvQ29udGV4dC5qcydcbmltcG9ydCB7XG4gIGdldEl0ZW1Gb3JtU2NoZW1hLFxuICBnZXRJdGVtSWQsXG4gIGdldEl0ZW1VaWQsXG4gIGlzTGlzdFNvdXJjZVxufSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG5pbXBvcnQgeyBhcHBlbmREYXRhUGF0aCB9IGZyb20gJy4uL3V0aWxzL2RhdGEuanMnXG5pbXBvcnQgeyBpc09iamVjdCwgaXNTdHJpbmcsIGlzRnVuY3Rpb24gfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQge1xuICBtZXRob2RzOiB7XG4gICAgZ2V0SXRlbUZvcm1TY2hlbWEsXG5cbiAgICBnZXRJdGVtVWlkLFxuXG4gICAgZ2V0SXRlbUlkKHNvdXJjZVNjaGVtYSwgaXRlbSwgaW5kZXggPSBudWxsKSB7XG4gICAgICByZXR1cm4gdGhpcy5pc1RyYW5zaWVudCAmJiBpbmRleCAhPT0gbnVsbFxuICAgICAgICA/IFN0cmluZyhpbmRleClcbiAgICAgICAgOiBnZXRJdGVtSWQoc291cmNlU2NoZW1hLCBpdGVtKVxuICAgIH0sXG5cbiAgICBnZXRJdGVtRGF0YVBhdGgoc291cmNlU2NoZW1hLCBpbmRleCkge1xuICAgICAgbGV0IHsgZGF0YVBhdGggfSA9IHRoaXNcbiAgICAgIGlmIChzb3VyY2VTY2hlbWEgIT09IHRoaXMuc2NoZW1hKSB7XG4gICAgICAgIGRhdGFQYXRoID0gYXBwZW5kRGF0YVBhdGgoZGF0YVBhdGgsIHNvdXJjZVNjaGVtYS5uYW1lKVxuICAgICAgfVxuICAgICAgaWYgKGluZGV4ICE9IG51bGwpIHtcbiAgICAgICAgZGF0YVBhdGggPSBhcHBlbmREYXRhUGF0aChkYXRhUGF0aCwgaW5kZXgpXG4gICAgICB9XG4gICAgICByZXR1cm4gZGF0YVBhdGhcbiAgICB9LFxuXG4gICAgZ2V0SXRlbVN0b3JlKHNvdXJjZVNjaGVtYSwgaXRlbSwgaW5kZXgpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldENoaWxkU3RvcmUodGhpcy5nZXRJdGVtVWlkKHNvdXJjZVNjaGVtYSwgaXRlbSksIGluZGV4KVxuICAgIH0sXG5cbiAgICByZW1vdmVJdGVtU3RvcmUoc291cmNlU2NoZW1hLCBpdGVtLCBpbmRleCkge1xuICAgICAgdGhpcy5yZW1vdmVDaGlsZFN0b3JlKHRoaXMuZ2V0SXRlbVVpZChzb3VyY2VTY2hlbWEsIGl0ZW0pLCBpbmRleClcbiAgICB9LFxuXG4gICAgZmluZEl0ZW1JZEluZGV4KHNvdXJjZVNjaGVtYSwgZGF0YSwgaXRlbUlkKSB7XG4gICAgICBjb25zdCBpbmRleCA9IHRoaXMuaXNUcmFuc2llbnRcbiAgICAgICAgPyAvLyBGb3IgdHJhbnNpZW50IGRhdGEsIHRoZSBpbmRleCBpcyB1c2VkIGFzIHRoZSBpZFxuICAgICAgICAgIGl0ZW1JZFxuICAgICAgICA6IGRhdGE/LmZpbmRJbmRleChcbiAgICAgICAgICAgIChpdGVtLCBpbmRleCkgPT4gKFxuICAgICAgICAgICAgICB0aGlzLmdldEl0ZW1JZChzb3VyY2VTY2hlbWEsIGl0ZW0sIGluZGV4KSA9PT0gaXRlbUlkXG4gICAgICAgICAgICApXG4gICAgICAgICAgKVxuICAgICAgcmV0dXJuIGluZGV4ICE9PSAtMSA/IGluZGV4IDogbnVsbFxuICAgIH0sXG5cbiAgICBnZXRJdGVtTGFiZWwoc291cmNlU2NoZW1hLCBpdGVtLCB7XG4gICAgICBpbmRleCA9IG51bGwsXG4gICAgICBleHRlbmRlZCA9IGZhbHNlLFxuICAgICAgYXNPYmplY3QgPSBmYWxzZVxuICAgIH0gPSB7fSkge1xuICAgICAgY29uc3QgeyBpdGVtTGFiZWwgfSA9IHNvdXJjZVNjaGVtYVxuICAgICAgaWYgKCFpdGVtIHx8ICFleHRlbmRlZCAmJiBpdGVtTGFiZWwgPT09IGZhbHNlKSB7XG4gICAgICAgIHJldHVybiBudWxsXG4gICAgICB9XG5cbiAgICAgIGxldCBkYXRhUGF0aFxuICAgICAgY29uc3QgZ2V0RGF0YVBhdGggPSAoKSA9PlxuICAgICAgICAoZGF0YVBhdGggPz89IHRoaXMuZ2V0SXRlbURhdGFQYXRoKHNvdXJjZVNjaGVtYSwgaW5kZXgpKVxuXG4gICAgICBsZXQgZm9ybUxhYmVsXG4gICAgICBjb25zdCBnZXRGb3JtTGFiZWwgPSAoKSA9PlxuICAgICAgICAoZm9ybUxhYmVsID8/PSB0aGlzLmdldExhYmVsKFxuICAgICAgICAgIGdldEl0ZW1Gb3JtU2NoZW1hKHNvdXJjZVNjaGVtYSwgaXRlbSwgdGhpcy5jb250ZXh0KVxuICAgICAgICApKVxuXG4gICAgICBsZXQgdGV4dFxuICAgICAgbGV0IHByZWZpeFxuICAgICAgbGV0IHN1ZmZpeFxuICAgICAgaWYgKGlzRnVuY3Rpb24oaXRlbUxhYmVsKSkge1xuICAgICAgICBjb25zdCBsYWJlbCA9IGl0ZW1MYWJlbC5jYWxsKFxuICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgbmV3IERpdG9Db250ZXh0KHRoaXMsIHtcbiAgICAgICAgICAgIG5lc3RlZDogZmFsc2UsXG4gICAgICAgICAgICBkYXRhOiBpdGVtLFxuICAgICAgICAgICAgdmFsdWU6IGl0ZW0sXG4gICAgICAgICAgICBpbmRleCxcblxuICAgICAgICAgICAgZ2V0IGRhdGFQYXRoKCkge1xuICAgICAgICAgICAgICByZXR1cm4gZ2V0RGF0YVBhdGgoKVxuICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgZ2V0IGZvcm1MYWJlbCgpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGdldEZvcm1MYWJlbCgpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgICAgICBpZiAoaXNPYmplY3QobGFiZWwpKSB7XG4gICAgICAgICAgOyh7IHRleHQsIHByZWZpeCwgc3VmZml4IH0gPSBsYWJlbClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0ZXh0ID0gbGFiZWxcbiAgICAgICAgfVxuICAgICAgICAvLyBJdCdzIHVwIHRvIGBpdGVtTGFiZWwoKWAgZW50aXJlbHkgdG8gcHJvZHVjZSB0aGUgbGFiZWw6XG4gICAgICAgIGV4dGVuZGVkID0gZmFsc2VcbiAgICAgIH0gZWxzZSBpZiAoaXNTdHJpbmcoaXRlbUxhYmVsKSAmJiAhKGl0ZW1MYWJlbCBpbiBpdGVtKSkge1xuICAgICAgICAvLyBgaXRlbUxhYmVsYCBjYW4gYmUgYm90aCBhIGtleSwgb3Igc2ltcGx5IGEgbGFiZWwuXG4gICAgICAgIHRleHQgPSBpdGVtTGFiZWxcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIExvb2sgdXAgdGhlIG5hbWUgb24gdGhlIGl0ZW0sIGJ5IHRoZXNlIHJ1bGVzOlxuICAgICAgICAvLyAxLiBJZiBgaXRlbUxhYmVsYCBpcyBhIHN0cmluZywgdXNlIGl0IGFzIHRoZSBwcm9wZXJ0eSBrZXlcbiAgICAgICAgLy8gMi4gT3RoZXJ3aXNlLCBpZiB0aGVyZSBhcmUgY29sdW1ucywgdXNlIHRoZSB2YWx1ZSBvZiB0aGUgZmlyc3RcbiAgICAgICAgLy8gMy4gT3RoZXJ3aXNlLCBzZWUgaWYgdGhlIGl0ZW0gaGFzIGEgcHJvcGVydHkgbmFtZWQgJ25hbWUnXG4gICAgICAgIGNvbnN0IHsgY29sdW1ucyB9ID0gc291cmNlU2NoZW1hXG4gICAgICAgIGNvbnN0IGtleSA9IChcbiAgICAgICAgICBpc1N0cmluZyhpdGVtTGFiZWwpICYmIGl0ZW1MYWJlbCB8fFxuICAgICAgICAgIGlzTGlzdFNvdXJjZShzb3VyY2VTY2hlbWEpICYmIGNvbHVtbnMgJiYgT2JqZWN0LmtleXMoY29sdW1ucylbMF0gfHxcbiAgICAgICAgICAnbmFtZSdcbiAgICAgICAgKVxuICAgICAgICB0ZXh0ID0gaXRlbVtrZXldXG4gICAgICB9XG4gICAgICBjb25zdCBoYWRMYWJlbCA9ICEhdGV4dFxuICAgICAgLy8gSWYgbm8gbGFiZWwgd2FzIGZvdW5kIHNvIGZhciwgdHJ5IHRvIHByb2R1Y2Ugb25lIGZyb20gdGhlIGluZGV4LlxuICAgICAgaWYgKHRleHQgPT0gbnVsbCkge1xuICAgICAgICAvLyBBbHdheXMgdXNlIGV4dGVuZGVkIHN0eWxlIHdoZW4gYXV0by1nZW5lcmF0aW5nIGxhYmVscyBmcm9tIGluZGV4L2lkOlxuICAgICAgICBleHRlbmRlZCA9IHRydWVcbiAgICAgICAgdGV4dCA9XG4gICAgICAgICAgaXNMaXN0U291cmNlKHNvdXJjZVNjaGVtYSkgJiYgaW5kZXggIT09IG51bGxcbiAgICAgICAgICAgID8gKHRleHQgPSBgJHtpbmRleCArIDF9YClcbiAgICAgICAgICAgIDogJydcbiAgICAgIH1cbiAgICAgIGlmIChleHRlbmRlZCkge1xuICAgICAgICBjb25zdCBmb3JtTGFiZWwgPSBnZXRGb3JtTGFiZWwoKVxuICAgICAgICBpZiAoZm9ybUxhYmVsKSB7XG4gICAgICAgICAgLy8gSWYgYSBsYWJlbCB3YXMgcHJvdmlkZWQsIHB1dCBpbiBxdW90ZXMgd2hlbiBwcmVmaXhlZCB3aXRoIHRoZVxuICAgICAgICAgIC8vIGZvcm0gbGFiZWwgZm9yIHRoZSBleHRlbmRlZCBzdHlsZTpcbiAgICAgICAgICB0ZXh0ID0gYCR7Zm9ybUxhYmVsfSAke2hhZExhYmVsID8gYCcke3RleHR9J2AgOiB0ZXh0fWBcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGFzT2JqZWN0XG4gICAgICAgID8gdGV4dCB8fCBwcmVmaXggfHwgc3VmZml4XG4gICAgICAgICAgPyB7IHRleHQsIHByZWZpeCwgc3VmZml4IH1cbiAgICAgICAgICA6IG51bGxcbiAgICAgICAgOiB0ZXh0XG4gICAgfVxuICB9XG59XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuc2xvdChuYW1lPVwiYmVmb3JlXCIpXG4uZGl0by1zY2hlbWEoXG4gIDpjbGFzcz1cInsgJ2RpdG8tc2Nyb2xsLXBhcmVudCc6IHNjcm9sbGFibGUsICdkaXRvLXNjaGVtYS0tb3Blbic6IG9wZW5lZCB9XCJcbiAgdi1iaW5kPVwiJGF0dHJzXCJcbilcbiAgVGVsZXBvcnQoXG4gICAgdi1pZj1cImlzUG9wdWxhdGVkICYmIHBhbmVsRW50cmllcy5sZW5ndGggPiAwXCJcbiAgICB0bz1cIi5kaXRvLXNpZGViYXJfX3RlbGVwb3J0XCJcbiAgKVxuICAgIERpdG9QYW5lbHMoXG4gICAgICA6cGFuZWxzPVwicGFuZWxFbnRyaWVzXCJcbiAgICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgICA6bWV0YT1cIm1ldGFcIlxuICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgIClcbiAgVGVsZXBvcnQoXG4gICAgdi1pZj1cImhhc0hlYWRlclwiXG4gICAgOnRvPVwiaGVhZGVyVGVsZXBvcnRcIlxuICAgIDpkaXNhYmxlZD1cIiFoZWFkZXJUZWxlcG9ydFwiXG4gIClcbiAgICAuZGl0by1zY2hlbWEtaGVhZGVyXG4gICAgICBEaXRvTGFiZWwoXG4gICAgICAgIHYtaWY9XCJoYXNMYWJlbFwiXG4gICAgICAgIDpsYWJlbD1cImxhYmVsXCJcbiAgICAgICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgICAgICA6Y29sbGFwc2libGU9XCJjb2xsYXBzaWJsZVwiXG4gICAgICAgIDpjb2xsYXBzZWQ9XCIhb3BlbmVkXCJcbiAgICAgICAgQG9wZW49XCJvbk9wZW5cIlxuICAgICAgKVxuICAgICAgVHJhbnNpdGlvbihcbiAgICAgICAgdi1pZj1cInRhYnNcIlxuICAgICAgICBuYW1lPVwiZGl0by1mYWRlXCJcbiAgICAgIClcbiAgICAgICAgRGl0b1RhYnMoXG4gICAgICAgICAgdi1pZj1cIm9wZW5lZFwiXG4gICAgICAgICAgdi1tb2RlbD1cInNlbGVjdGVkVGFiXCJcbiAgICAgICAgICA6dGFicz1cInRhYnNcIlxuICAgICAgICApXG4gICAgICBEaXRvQ2xpcGJvYXJkKFxuICAgICAgICB2LWlmPVwiY2xpcGJvYXJkXCJcbiAgICAgICAgOmNsaXBib2FyZD1cImNsaXBib2FyZFwiXG4gICAgICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgICAgKVxuICAgICAgc2xvdChuYW1lPVwiZWRpdC1idXR0b25zXCIpXG4gIFRyYW5zaXRpb25IZWlnaHQoOmVuYWJsZWQ9XCJpbmxpbmVkXCIpXG4gICAgLmRpdG8tc2NoZW1hLWNvbnRlbnQoXG4gICAgICB2LWlmPVwib3BlbmVkXCJcbiAgICAgIHJlZj1cImNvbnRlbnRcIlxuICAgICAgOmNsYXNzPVwieyAnZGl0by1zY3JvbGwnOiBzY3JvbGxhYmxlIH1cIlxuICAgIClcbiAgICAgIHRlbXBsYXRlKFxuICAgICAgICB2LWlmPVwiaGFzVGFic1wiXG4gICAgICApXG4gICAgICAgIHRlbXBsYXRlKFxuICAgICAgICAgIHYtZm9yPVwiKHRhYlNjaGVtYSwgdGFiKSBpbiB0YWJzXCJcbiAgICAgICAgICA6a2V5PVwidGFiXCJcbiAgICAgICAgKVxuICAgICAgICAgIC8vLSBUT0RPOiBTd2l0Y2ggdG8gdi1pZiBpbnN0ZWFkIG9mIHYtc2hvdywgb25jZSB2YWxpZGF0aW9uIGlzXG4gICAgICAgICAgLy8tIGRlY291cGxlZCBmcm9tIGNvbXBvbmVudHMuXG4gICAgICAgICAgRGl0b1BhbmUuZGl0by1wYW5lX190YWIoXG4gICAgICAgICAgICB2LXNob3c9XCJzZWxlY3RlZFRhYiA9PT0gdGFiXCJcbiAgICAgICAgICAgIHJlZj1cInRhYnNcIlxuICAgICAgICAgICAgOnRhYj1cInRhYlwiXG4gICAgICAgICAgICA6c2NoZW1hPVwidGFiU2NoZW1hXCJcbiAgICAgICAgICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICAgICAgICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgICAgICAgICA6bWV0YT1cIm1ldGFcIlxuICAgICAgICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgICAgICAgICAgOnBhZGRpbmc9XCJwYWRkaW5nXCJcbiAgICAgICAgICAgIDpzaW5nbGU9XCIhaW5saW5lZCAmJiAhaGFzTWFpblBhbmVcIlxuICAgICAgICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgICAgICAgICAgOmdlbmVyYXRlTGFiZWxzPVwiZ2VuZXJhdGVMYWJlbHNcIlxuICAgICAgICAgICAgOmFjY3VtdWxhdGVkQmFzaXM9XCJhY2N1bXVsYXRlZEJhc2lzXCJcbiAgICAgICAgICApXG4gICAgICBEaXRvUGFuZS5kaXRvLXBhbmVfX21haW4oXG4gICAgICAgIHYtaWY9XCJoYXNNYWluUGFuZVwiXG4gICAgICAgIHJlZj1cImNvbXBvbmVudHNcIlxuICAgICAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICAgICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgICAgICA6ZGF0YT1cImRhdGFcIlxuICAgICAgICA6bWV0YT1cIm1ldGFcIlxuICAgICAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgICAgIDpwYWRkaW5nPVwicGFkZGluZ1wiXG4gICAgICAgIDpzaW5nbGU9XCIhaW5saW5lZCAmJiAhaGFzVGFic1wiXG4gICAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICAgICAgOmdlbmVyYXRlTGFiZWxzPVwiZ2VuZXJhdGVMYWJlbHNcIlxuICAgICAgICA6YWNjdW11bGF0ZWRCYXNpcz1cImFjY3VtdWxhdGVkQmFzaXNcIlxuICAgICAgKVxuICAgICAgc2xvdChcbiAgICAgICAgdi1pZj1cIiFpbmxpbmVkICYmIGlzUG9wdWxhdGVkXCJcbiAgICAgICAgbmFtZT1cImJ1dHRvbnNcIlxuICAgICAgKVxuICBzbG90KFxuICAgIHYtaWY9XCJpbmxpbmVkICYmICFoYXNIZWFkZXJcIlxuICAgIG5hbWU9XCJlZGl0LWJ1dHRvbnNcIlxuICApXG5zbG90KG5hbWU9XCJhZnRlclwiKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCB7XG4gIGlzT2JqZWN0LFxuICBpc0FycmF5LFxuICBpc0Z1bmN0aW9uLFxuICBpc1JlZ0V4cCxcbiAgZXF1YWxzLFxuICBwYXJzZURhdGFQYXRoLFxuICBub3JtYWxpemVEYXRhUGF0aCxcbiAgbGFiZWxpemVcbn0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCB7IFRyYW5zaXRpb25IZWlnaHQgfSBmcm9tICdAZGl0b2pzL3VpL3NyYydcbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgSXRlbU1peGluIGZyb20gJy4uL21peGlucy9JdGVtTWl4aW4uanMnXG5pbXBvcnQgeyBhcHBlbmREYXRhUGF0aCwgZ2V0UGFyZW50SXRlbSB9IGZyb20gJy4uL3V0aWxzL2RhdGEuanMnXG5pbXBvcnQge1xuICBnZXROYW1lZFNjaGVtYXMsXG4gIGdldFBhbmVsRW50cmllcyxcbiAgc2V0RGVmYXVsdFZhbHVlcyxcbiAgcHJvY2Vzc0RhdGFcbn0gZnJvbSAnLi4vdXRpbHMvc2NoZW1hLmpzJ1xuaW1wb3J0IHsgZ2V0U2NoZW1hQWNjZXNzb3IsIGdldFN0b3JlQWNjZXNzb3IgfSBmcm9tICcuLi91dGlscy9hY2Nlc3Nvci5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdEaXRvU2NoZW1hJywge1xuICBtaXhpbnM6IFtJdGVtTWl4aW5dLFxuICBjb21wb25lbnRzOiB7IFRyYW5zaXRpb25IZWlnaHQgfSxcbiAgaW5oZXJpdEF0dHJzOiBmYWxzZSxcblxuICBwcm92aWRlKCkge1xuICAgIHJldHVybiB7XG4gICAgICAkc2NoZW1hQ29tcG9uZW50OiAoKSA9PiB0aGlzXG4gICAgfVxuICB9LFxuXG4gIGluamVjdDogW1xuICAgICckc2NoZW1hUGFyZW50Q29tcG9uZW50J1xuICBdLFxuXG4gIHByb3BzOiB7XG4gICAgc2NoZW1hOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBkYXRhUGF0aDogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6ICcnIH0sXG4gICAgZGF0YTogeyB0eXBlOiBPYmplY3QsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBtZXRhOiB7IHR5cGU6IE9iamVjdCwgZGVmYXVsdDogKCkgPT4gKHt9KSB9LFxuICAgIHN0b3JlOiB7IHR5cGU6IE9iamVjdCwgZGVmYXVsdDogKCkgPT4gKHt9KSB9LFxuICAgIGxhYmVsOiB7IHR5cGU6IFtTdHJpbmcsIE9iamVjdF0sIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBwYWRkaW5nOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogbnVsbCB9LFxuICAgIGlubGluZWQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBkaXNhYmxlZDogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGNvbGxhcHNlZDogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGNvbGxhcHNpYmxlOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgc2Nyb2xsYWJsZTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGhhc093bkRhdGE6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBnZW5lcmF0ZUxhYmVsczogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGxhYmVsTm9kZTogeyB0eXBlOiBIVE1MRWxlbWVudCwgZGVmYXVsdDogbnVsbCB9LFxuICAgIGFjY3VtdWxhdGVkQmFzaXM6IHsgdHlwZTogTnVtYmVyLCBkZWZhdWx0OiAxIH1cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIGNvbnN0IHsgZGF0YSB9ID0gdGhpcy5zY2hlbWFcbiAgICByZXR1cm4ge1xuICAgICAgLy8gQWxsb3cgc2NoZW1hIHRvIHByb3ZpZGUgbW9yZSBkYXRhIHRocm91Z2ggYHNjaGVtYS5kYXRhYCwgdnVlLXN0eWxlOlxuICAgICAgLi4uKFxuICAgICAgICBkYXRhICYmIGlzRnVuY3Rpb24oZGF0YSlcbiAgICAgICAgICA/IGRhdGEodGhpcy5jb250ZXh0KVxuICAgICAgICAgIDogZGF0YVxuICAgICAgKSxcbiAgICAgIGN1cnJlbnRUYWI6IG51bGwsXG4gICAgICBjb21wb25lbnRzUmVnaXN0cnk6IHt9LFxuICAgICAgcGFuZXNSZWdpc3RyeToge30sXG4gICAgICBwYW5lbHNSZWdpc3RyeToge30sXG4gICAgICBzY3JvbGxQb3NpdGlvbnM6IHt9XG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgc2NoZW1hQ29tcG9uZW50KCkge1xuICAgICAgLy8gT3ZlcnJpZGUgRGl0b01peGluJ3Mgc2NoZW1hQ29tcG9uZW50KCkgd2hpY2ggdXNlcyB0aGUgaW5qZWN0ZWQgdmFsdWUuXG4gICAgICByZXR1cm4gdGhpc1xuICAgIH0sXG5cbiAgICBwYXJlbnRTY2hlbWFDb21wb25lbnQoKSB7XG4gICAgICAvLyBEb24ndCByZXR1cm4gdGhlIGFjdHVhbCBwYXJlbnQgc2NoZW1hIGlzIHRoaXMgc2NoZW1hIGhhbmRsZXMgaXRzIG93blxuICAgICAgLy8gZGF0YS4gVGhpcyBwcmV2ZW50cyBkZWxlZ2F0aW5nIGV2ZW50cyB0byB0aGUgcGFyZW50LCBhbmQgcmVnaXN0ZXJpbmdcbiAgICAgIC8vIGNvbXBvbmVudHMgd2l0aCB0aGUgcGFyZW50IHRoYXQgd291bGQgY2F1c2UgaXQgdG8gc2V0IGlzRGlydHkgZmxhZ3MuXG4gICAgICByZXR1cm4gdGhpcy5oYXNPd25EYXRhID8gbnVsbCA6IHRoaXMucGFyZW50Q29tcG9uZW50LnNjaGVtYUNvbXBvbmVudFxuICAgIH0sXG5cbiAgICBwYW5lbEVudHJpZXMoKSB7XG4gICAgICByZXR1cm4gZ2V0UGFuZWxFbnRyaWVzKHRoaXMuc2NoZW1hLnBhbmVscywgdGhpcy5kYXRhUGF0aClcbiAgICB9LFxuXG4gICAgdGFicygpIHtcbiAgICAgIHJldHVybiBnZXROYW1lZFNjaGVtYXModGhpcy5zY2hlbWEudGFicylcbiAgICB9LFxuXG4gICAgc2VsZWN0ZWRUYWI6IHtcbiAgICAgIGdldCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY3VycmVudFRhYiB8fCB0aGlzLmRlZmF1bHRUYWIgfHwgbnVsbFxuICAgICAgfSxcblxuICAgICAgc2V0KHNlbGVjdGVkVGFiKSB7XG4gICAgICAgIHRoaXMuY3VycmVudFRhYiA9IHNlbGVjdGVkVGFiXG4gICAgICB9XG4gICAgfSxcblxuICAgIGRlZmF1bHRUYWIoKSB7XG4gICAgICBsZXQgZmlyc3QgPSBudWxsXG4gICAgICBpZiAodGhpcy50YWJzKSB7XG4gICAgICAgIGNvbnN0IHRhYnMgPSBPYmplY3QudmFsdWVzKHRoaXMudGFicykuZmlsdGVyKHRoaXMuc2hvdWxkUmVuZGVyU2NoZW1hKVxuICAgICAgICBmb3IgKGNvbnN0IHsgbmFtZSwgZGVmYXVsdFRhYiB9IG9mIHRhYnMpIHtcbiAgICAgICAgICBpZiAoaXNGdW5jdGlvbihkZWZhdWx0VGFiKSA/IGRlZmF1bHRUYWIodGhpcy5jb250ZXh0KSA6IGRlZmF1bHRUYWIpIHtcbiAgICAgICAgICAgIHJldHVybiBuYW1lXG4gICAgICAgICAgfVxuICAgICAgICAgIGZpcnN0ID8/PSBuYW1lXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBmaXJzdFxuICAgIH0sXG5cbiAgICBjbGlwYm9hcmQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWE/LmNsaXBib2FyZCA/PyBudWxsXG4gICAgfSxcblxuICAgIGhhc0hlYWRlcigpIHtcbiAgICAgIHJldHVybiB0aGlzLmhhc0xhYmVsIHx8IHRoaXMuaGFzVGFicyB8fCAhIXRoaXMuY2xpcGJvYXJkXG4gICAgfSxcblxuICAgIGhlYWRlclRlbGVwb3J0KCkge1xuICAgICAgcmV0dXJuIHRoaXMuaXNSb290U2NoZW1hXG4gICAgICAgID8gJy5kaXRvLWhlYWRlcl9fdGVsZXBvcnQnXG4gICAgICAgIDogdGhpcy5sYWJlbE5vZGVcbiAgICB9LFxuXG4gICAgcGFyZW50RGF0YSgpIHtcbiAgICAgIGNvbnN0IGRhdGEgPSBnZXRQYXJlbnRJdGVtKHRoaXMucm9vdERhdGEsIHRoaXMuZGF0YVBhdGgsIGZhbHNlKVxuICAgICAgcmV0dXJuIGRhdGEgIT09IHRoaXMuZGF0YSA/IGRhdGEgOiBudWxsXG4gICAgfSxcblxuICAgIHByb2Nlc3NlZERhdGEoKSB7XG4gICAgICByZXR1cm4gdGhpcy5wcm9jZXNzRGF0YSh7IHRhcmdldDogJ3NlcnZlcicsIHNjaGVtYU9ubHk6IHRydWUgfSlcbiAgICB9LFxuXG4gICAgY2xpcGJvYXJkRGF0YToge1xuICAgICAgZ2V0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5wcm9jZXNzRGF0YSh7IHRhcmdldDogJ2NsaXBib2FyZCcsIHNjaGVtYU9ubHk6IHRydWUgfSlcbiAgICAgIH0sXG5cbiAgICAgIHNldChkYXRhKSB7XG4gICAgICAgIHRoaXMuc2V0RGF0YShkYXRhKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICAvLyBUaGUgZm9sbG93aW5nIGNvbXB1dGVkIHByb3BlcnRpZXMgYXJlIHNpbWlsYXIgdG8gYERpdG9Db250ZXh0YFxuICAgIC8vIHByb3BlcnRpZXMsIHNvIHRoYXQgd2UgY2FuIGFjY2VzcyB0aGVzZSBvbiBgdGhpc2AgYXMgd2VsbDpcbiAgICAvLyBOT1RFOiBXaGlsZSBpbnRlcm5hbGx5LCB3ZSBzcGVhayBvZiBgZGF0YWAsIGluIHRoZSBBUEkgc3VyZmFjZSB0aGVcbiAgICAvLyB0ZXJtIGBpdGVtYCBpcyB1c2VkIGZvciB0aGUgZGF0YSB0aGF0IHJlbGF0ZXMgdG8gZWRpdGluZyBvYmplY3RzLlxuICAgIC8vIE5PVEU6IFRoaXMgc2hvdWxkIGFsd2F5cyByZXR1cm4gdGhlIHNhbWUgYXM6XG4gICAgLy8gcmV0dXJuIGdldEl0ZW0odGhpcy5yb290RGF0YSwgdGhpcy5kYXRhUGF0aCwgZmFsc2UpXG4gICAgaXRlbSgpIHtcbiAgICAgIHJldHVybiB0aGlzLmRhdGFcbiAgICB9LFxuXG4gICAgcGFyZW50SXRlbSgpIHtcbiAgICAgIHJldHVybiB0aGlzLnBhcmVudERhdGFcbiAgICB9LFxuXG4gICAgcm9vdEl0ZW0oKSB7XG4gICAgICByZXR1cm4gdGhpcy5yb290RGF0YVxuICAgIH0sXG5cbiAgICBwcm9jZXNzZWRJdGVtKCkge1xuICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc2VkRGF0YVxuICAgIH0sXG5cbiAgICBjbGlwYm9hcmRJdGVtKCkge1xuICAgICAgcmV0dXJuIHRoaXMuY2xpcGJvYXJkRGF0YVxuICAgIH0sXG5cbiAgICBmb3JtTGFiZWwoKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRMYWJlbChcbiAgICAgICAgdGhpcy5nZXRJdGVtRm9ybVNjaGVtYSh0aGlzLnNvdXJjZVNjaGVtYSwgdGhpcy5kYXRhLCB0aGlzLmNvbnRleHQpXG4gICAgICApXG4gICAgfSxcblxuICAgIGlzUm9vdFNjaGVtYSgpIHtcbiAgICAgIC8vIFNlY3Rpb24gc2NoZW1hcyBjYW4gc2hhcmUgdGhlIHJvb3QgZGF0YVBhdGggYnV0IHRoZXkgYXJlIGlubGluZWQuXG4gICAgICByZXR1cm4gdGhpcy5kYXRhUGF0aCA9PT0gJycgJiYgIXRoaXMuaW5saW5lZFxuICAgIH0sXG5cbiAgICBpc0RpcnR5KCkge1xuICAgICAgcmV0dXJuIHRoaXMuc29tZUNvbXBvbmVudChpdCA9PiBpdC5pc0RpcnR5KVxuICAgIH0sXG5cbiAgICBpc1RvdWNoZWQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zb21lQ29tcG9uZW50KGl0ID0+IGl0LmlzVG91Y2hlZClcbiAgICB9LFxuXG4gICAgaXNWYWxpZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmV2ZXJ5Q29tcG9uZW50KGl0ID0+IGl0LmlzVmFsaWQpXG4gICAgfSxcblxuICAgIGlzVmFsaWRhdGVkKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZXZlcnlDb21wb25lbnQoaXQgPT4gaXQuaXNWYWxpZGF0ZWQpXG4gICAgfSxcblxuICAgIGhhc0Vycm9ycygpIHtcbiAgICAgIHJldHVybiB0aGlzLnNvbWVDb21wb25lbnQoaXQgPT4gaXQuaGFzRXJyb3JzKVxuICAgIH0sXG5cbiAgICBoYXNEYXRhKCkge1xuICAgICAgcmV0dXJuICEhdGhpcy5kYXRhXG4gICAgfSxcblxuICAgIGhhc0xhYmVsKCkge1xuICAgICAgcmV0dXJuICEhdGhpcy5sYWJlbCB8fCB0aGlzLmNvbGxhcHNpYmxlXG4gICAgfSxcblxuICAgIGhhc1RhYnMoKSB7XG4gICAgICByZXR1cm4gISF0aGlzLnRhYnNcbiAgICB9LFxuXG4gICAgaGFzUm9vdFRhYnMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5oYXNUYWJzICYmIHRoaXMuaXNSb290U2NoZW1hXG4gICAgfSxcblxuICAgIGhhc01haW5QYW5lKCkge1xuICAgICAgY29uc3QgeyBjb21wb25lbnRzIH0gPSB0aGlzLnNjaGVtYVxuICAgICAgcmV0dXJuICEhY29tcG9uZW50cyAmJiBPYmplY3Qua2V5cyhjb21wb25lbnRzKS5sZW5ndGggPiAwXG4gICAgfSxcblxuICAgIG9wZW5lZDogZ2V0U3RvcmVBY2Nlc3Nvcignb3BlbmVkJywge1xuICAgICAgZGVmYXVsdCgpIHtcbiAgICAgICAgcmV0dXJuICF0aGlzLmNvbGxhcHNlZFxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgY29tcG9uZW50cygpIHtcbiAgICAgIHJldHVybiBPYmplY3QudmFsdWVzKHRoaXMuY29tcG9uZW50c1JlZ2lzdHJ5KVxuICAgIH0sXG5cbiAgICBwYW5lcygpIHtcbiAgICAgIHJldHVybiBPYmplY3QudmFsdWVzKHRoaXMucGFuZXNSZWdpc3RyeSlcbiAgICB9LFxuXG4gICAgcGFuZWxzKCkge1xuICAgICAgcmV0dXJuIE9iamVjdC52YWx1ZXModGhpcy5wYW5lbHNSZWdpc3RyeSlcbiAgICB9LFxuXG4gICAgY29tcG9uZW50c0J5RGF0YVBhdGgoKSB7XG4gICAgICByZXR1cm4gdGhpcy5fbGlzdEVudHJpZXNCeURhdGFQYXRoKHRoaXMuY29tcG9uZW50c1JlZ2lzdHJ5KVxuICAgIH0sXG5cbiAgICBwYW5lc0J5RGF0YVBhdGgoKSB7XG4gICAgICByZXR1cm4gdGhpcy5fbGlzdEVudHJpZXNCeURhdGFQYXRoKHRoaXMucGFuZXNSZWdpc3RyeSlcbiAgICB9LFxuXG4gICAgcGFuZWxzQnlEYXRhUGF0aCgpIHtcbiAgICAgIHJldHVybiB0aGlzLl9saXN0RW50cmllc0J5RGF0YVBhdGgodGhpcy5wYW5lbHNSZWdpc3RyeSlcbiAgICB9LFxuXG4gICAgd2lkZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ3dpZGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9KVxuICB9LFxuXG4gIHdhdGNoOiB7XG4gICAgJyRyb3V0ZS5oYXNoJzoge1xuICAgICAgaW1tZWRpYXRlOiB0cnVlLFxuICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3Z1ZWpzL3Z1ZS1yb3V0ZXIvaXNzdWVzLzMzOTMjaXNzdWVjb21tZW50LTExNTg0NzAxNDlcbiAgICAgIGZsdXNoOiAncG9zdCcsXG4gICAgICBoYW5kbGVyKGhhc2gpIHtcbiAgICAgICAgLy8gUmVtZW1iZXIgdGhlIGN1cnJlbnQgcGF0aCB0byBrbm93IGlmIHRhYiBjaGFuZ2VzIHNob3VsZCBzdGlsbCBiZVxuICAgICAgICAvLyBoYW5kbGVkLCBidXQgcmVtb3ZlIHRoZSB0cmFpbGluZyBgL2NyZWF0ZWAgb3IgYC86aWRgIGZyb20gaXQgc28gdGhhdFxuICAgICAgICAvLyB0YWJzIGluZm9ybXMgdGhhdCBzdGF5IG9wZW4gYWZ0ZXIgY3JlYXRpb24gc3RpbGwgd29yay5cbiAgICAgICAgaWYgKHRoaXMuaGFzUm9vdFRhYnMpIHtcbiAgICAgICAgICB0aGlzLmN1cnJlbnRUYWIgPSBoYXNoPy5zbGljZSgxKSB8fCBudWxsXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgJ3NlbGVjdGVkVGFiJyhuZXdUYWIsIG9sZFRhYikge1xuICAgICAgaWYgKHRoaXMuc2Nyb2xsYWJsZSkge1xuICAgICAgICBjb25zdCB7IGNvbnRlbnQgfSA9IHRoaXMuJHJlZnNcbiAgICAgICAgdGhpcy5zY3JvbGxQb3NpdGlvbnNbb2xkVGFiXSA9IGNvbnRlbnQuc2Nyb2xsVG9wXG4gICAgICAgIHRoaXMuJG5leHRUaWNrKCgpID0+IHtcbiAgICAgICAgICBjb250ZW50LnNjcm9sbFRvcCA9IHRoaXMuc2Nyb2xsUG9zaXRpb25zW25ld1RhYl0gPz8gMFxuICAgICAgICB9KVxuICAgICAgfVxuICAgICAgaWYgKHRoaXMuaGFzUm9vdFRhYnMpIHtcbiAgICAgICAgY29uc3QgdGFiID0gdGhpcy5zaG91bGRSZW5kZXJTY2hlbWEodGhpcy50YWJzW25ld1RhYl0pXG4gICAgICAgICAgPyBuZXdUYWJcbiAgICAgICAgICA6IHRoaXMuZGVmYXVsdFRhYlxuICAgICAgICB0aGlzLiRyb3V0ZXIucmVwbGFjZSh7IGhhc2g6IHRhYiA/IGAjJHt0YWJ9YCA6IG51bGwgfSlcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmhhc0Vycm9ycykge1xuICAgICAgICB0aGlzLnJlcG9zaXRpb25FcnJvcnMoKVxuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBjcmVhdGVkKCkge1xuICAgIHRoaXMuX3JlZ2lzdGVyKHRydWUpXG4gICAgdGhpcy5zZXR1cFNjaGVtYUZpZWxkcygpXG4gICAgLy8gRGVsZWdhdGUgY2hhbmdlIGV2ZW50cyB0aHJvdWdoIHRvIHBhcmVudCBzY2hlbWE6XG4gICAgdGhpcy5kZWxlZ2F0ZSgnY2hhbmdlJywgdGhpcy5wYXJlbnRTY2hlbWFDb21wb25lbnQpXG4gICAgdGhpcy5lbWl0RXZlbnQoJ2luaXRpYWxpemUnKSAvLyBOb3QgYCdjcmVhdGUnYCwgc2luY2UgdGhhdCdzIGZvciBkYXRhLlxuICAgIGlmICh0aGlzLnNjcm9sbGFibGUgJiYgdGhpcy53aWRlKSB7XG4gICAgICB0aGlzLmFwcFN0YXRlLnBhZ2VDbGFzcyA9ICdkaXRvLXBhZ2UtLXdpZGUnXG4gICAgfVxuICB9LFxuXG4gIHVubW91bnRlZCgpIHtcbiAgICB0aGlzLmVtaXRFdmVudCgnZGVzdHJveScpXG4gICAgdGhpcy5fcmVnaXN0ZXIoZmFsc2UpXG4gICAgaWYgKHRoaXMuc2Nyb2xsYWJsZSAmJiB0aGlzLndpZGUpIHtcbiAgICAgIHRoaXMuYXBwU3RhdGUucGFnZUNsYXNzID0gbnVsbFxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZ2V0Q29tcG9uZW50c0J5RGF0YVBhdGgoZGF0YVBhdGgpIHtcbiAgICAgIHJldHVybiB0aGlzLl9nZXRFbnRyaWVzQnlEYXRhUGF0aCh0aGlzLmNvbXBvbmVudHNCeURhdGFQYXRoLCBkYXRhUGF0aClcbiAgICB9LFxuXG4gICAgZ2V0Q29tcG9uZW50QnlEYXRhUGF0aChkYXRhUGF0aCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0Q29tcG9uZW50c0J5RGF0YVBhdGgoZGF0YVBhdGgpWzBdIHx8IG51bGxcbiAgICB9LFxuXG4gICAgZ2V0Q29tcG9uZW50c0J5TmFtZShkYXRhUGF0aCkge1xuICAgICAgcmV0dXJuIHRoaXMuX2dldEVudHJpZXNCeU5hbWUodGhpcy5jb21wb25lbnRzQnlEYXRhUGF0aCwgZGF0YVBhdGgpXG4gICAgfSxcblxuICAgIGdldENvbXBvbmVudEJ5TmFtZShuYW1lKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRDb21wb25lbnRzQnlOYW1lKG5hbWUpWzBdIHx8IG51bGxcbiAgICB9LFxuXG4gICAgZ2V0Q29tcG9uZW50cyhkYXRhUGF0aE9yTmFtZSkge1xuICAgICAgcmV0dXJuIHRoaXMuX2dldEVudHJpZXModGhpcy5jb21wb25lbnRzQnlEYXRhUGF0aCwgZGF0YVBhdGhPck5hbWUpXG4gICAgfSxcblxuICAgIGdldENvbXBvbmVudChkYXRhUGF0aE9yTmFtZSkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0Q29tcG9uZW50cyhkYXRhUGF0aE9yTmFtZSlbMF0gfHwgbnVsbFxuICAgIH0sXG5cbiAgICBnZXRQYW5lbHNCeURhdGFQYXRoKGRhdGFQYXRoKSB7XG4gICAgICByZXR1cm4gdGhpcy5fZ2V0RW50cmllc0J5RGF0YVBhdGgodGhpcy5wYW5lbHNCeURhdGFQYXRoLCBkYXRhUGF0aClcbiAgICB9LFxuXG4gICAgZ2V0UGFuZWxCeURhdGFQYXRoKGRhdGFQYXRoKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRQYW5lbHNCeURhdGFQYXRoKGRhdGFQYXRoKVswXSB8fCBudWxsXG4gICAgfSxcblxuICAgIGdldFBhbmVscyhkYXRhUGF0aE9yTmFtZSkge1xuICAgICAgcmV0dXJuIHRoaXMuX2dldEVudHJpZXModGhpcy5wYW5lbHNCeURhdGFQYXRoLCBkYXRhUGF0aE9yTmFtZSlcbiAgICB9LFxuXG4gICAgZ2V0UGFuZWwoZGF0YVBhdGhPck5hbWUpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldFBhbmVscyhkYXRhUGF0aE9yTmFtZSlbMF0gfHwgbnVsbFxuICAgIH0sXG5cbiAgICBzb21lQ29tcG9uZW50KGNhbGxiYWNrKSB7XG4gICAgICByZXR1cm4gdGhpcy5pc1BvcHVsYXRlZCAmJiB0aGlzLmNvbXBvbmVudHMuc29tZShjYWxsYmFjaylcbiAgICB9LFxuXG4gICAgZXZlcnlDb21wb25lbnQoY2FsbGJhY2spIHtcbiAgICAgIHJldHVybiB0aGlzLmlzUG9wdWxhdGVkICYmIHRoaXMuY29tcG9uZW50cy5ldmVyeShjYWxsYmFjaylcbiAgICB9LFxuXG4gICAgb25PcGVuKG9wZW4pIHtcbiAgICAgIHRoaXMuZW1pdEV2ZW50KCdvcGVuJywgeyBjb250ZXh0OiB7IG9wZW4gfSB9KVxuICAgICAgLy8gUHJldmVudCBjbG9zaW5nIHRoZSBzY2hlbWEgd2l0aCBpbnZhbGlkIGRhdGEsIHNpbmNlIHRoZSBpbi1jb21wb25lbnRcbiAgICAgIC8vIHZhbGlkYXRpb24gd2lsbCBub3QgYmUgZXhlY3V0ZWQgb25jZSBpdCdzIGNsb3NlZC5cblxuICAgICAgLy8gVE9ETzogTW92ZSB2YWxpZGF0aW9uIG91dCBvZiBjb21wb25lbnRzLCB0byBzY2hlbWEsIGp1c3QgbGlrZVxuICAgICAgLy8gcHJvY2Vzc2luZywgYW5kIHVzZSBgc2hvd1ZhbGlkYXRpb25FcnJvcnMoKWAgZm9yIHRoZSByZXN1bHRpbmcgZXJyb3JzLFxuICAgICAgLy8gdGhlbiByZW1vdmUgdGhpcyByZXF1aXJlbWVudCwgc2luY2Ugd2UgY2FuIHZhbGlkYXRlIGNsb3NlZCBmb3JtcyBhbmRcbiAgICAgIC8vIHNjaGVtYXMgdGhlbi5cbiAgICAgIGlmICghdGhpcy5vcGVuZWQgfHwgb3BlbiB8fCB0aGlzLnZhbGlkYXRlQWxsKCkpIHtcbiAgICAgICAgdGhpcy5vcGVuZWQgPSBvcGVuXG4gICAgICB9XG4gICAgfSxcblxuICAgIG9uQ2hhbmdlKCkge1xuICAgICAgdGhpcy5lbWl0RXZlbnQoJ2NoYW5nZScpXG4gICAgfSxcblxuICAgIHJlc2V0VmFsaWRhdGlvbigpIHtcbiAgICAgIGZvciAoY29uc3QgY29tcG9uZW50IG9mIHRoaXMuY29tcG9uZW50cykge1xuICAgICAgICBjb21wb25lbnQucmVzZXRWYWxpZGF0aW9uKClcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgY2xlYXJFcnJvcnMoKSB7XG4gICAgICBmb3IgKGNvbnN0IGNvbXBvbmVudCBvZiB0aGlzLmNvbXBvbmVudHMpIHtcbiAgICAgICAgY29tcG9uZW50LmNsZWFyRXJyb3JzKClcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgcmVwb3NpdGlvbkVycm9ycygpIHtcbiAgICAgIC8vIEZpcmUgYSBmYWtlIHNjcm9sbCBldmVudCB0byBmb3JjZSB0aGUgcmVwb3NpdGlvbmluZyBvZiBlcnJvciB0b29sdGlwcyxcbiAgICAgIC8vIGFzIG90aGVyd2lzZSB0aGV5IHNvbWV0aW1lcyBkb24ndCBzaG93IHVwIGluIHRoZSByaWdodCBwbGFjZSBpbml0aWFsbHlcbiAgICAgIC8vIHdoZW4gY2hhbmdpbmcgdGFicy5cbiAgICAgIGNvbnN0IHNjcm9sbENvbnRhaW5lciA9IHRoaXMuJHJlZnMuY29udGVudC5jbG9zZXN0KCcuZGl0by1zY3JvbGwnKVxuICAgICAgY29uc3QgZGlzcGF0Y2ggPSAoKSA9PiBzY3JvbGxDb250YWluZXIuZGlzcGF0Y2hFdmVudChuZXcgRXZlbnQoJ3Njcm9sbCcpKVxuICAgICAgZGlzcGF0Y2goKVxuICAgICAgLy8gVGhpcyBpcyByZXF1aXJlZCB0byBoYW5kbGUgYCYtLWxhYmVsLXZlcnRpY2FsYCBiYXNlZCBsYXlvdXQgY2hhbmdlcy5cbiAgICAgIHNldFRpbWVvdXQoZGlzcGF0Y2gsIDApXG4gICAgfSxcblxuICAgIGZvY3VzKCkge1xuICAgICAgdGhpcy5vcGVuZWQgPSB0cnVlXG4gICAgICByZXR1cm4gdGhpcy5wYXJlbnRTY2hlbWFDb21wb25lbnQ/LmZvY3VzKClcbiAgICB9LFxuXG4gICAgdmFsaWRhdGVBbGwobWF0Y2gsIG5vdGlmeSA9IHRydWUpIHtcbiAgICAgIGNvbnN0IHsgY29tcG9uZW50c0J5RGF0YVBhdGggfSA9IHRoaXNcbiAgICAgIGxldCBkYXRhUGF0aHNcbiAgICAgIGlmIChtYXRjaCkge1xuICAgICAgICBjb25zdCBjaGVjayA9IGlzRnVuY3Rpb24obWF0Y2gpXG4gICAgICAgICAgPyBtYXRjaFxuICAgICAgICAgIDogaXNSZWdFeHAobWF0Y2gpXG4gICAgICAgICAgICA/IGZpZWxkID0+IG1hdGNoLnRlc3QoZmllbGQpXG4gICAgICAgICAgICA6IG51bGxcbiAgICAgICAgZGF0YVBhdGhzID0gY2hlY2tcbiAgICAgICAgICA/IE9iamVjdC5rZXlzKGNvbXBvbmVudHNCeURhdGFQYXRoKS5maWx0ZXIoY2hlY2spXG4gICAgICAgICAgOiBpc0FycmF5KG1hdGNoKVxuICAgICAgICAgICAgPyBtYXRjaFxuICAgICAgICAgICAgOiBbbWF0Y2hdXG4gICAgICB9XG4gICAgICBpZiAobm90aWZ5KSB7XG4gICAgICAgIHRoaXMuY2xlYXJFcnJvcnMoKVxuICAgICAgfVxuICAgICAgbGV0IGlzVmFsaWQgPSB0cnVlXG4gICAgICBsZXQgZmlyc3QgPSB0cnVlXG4gICAgICBkYXRhUGF0aHMgfHw9IE9iamVjdC5rZXlzKGNvbXBvbmVudHNCeURhdGFQYXRoKVxuICAgICAgZm9yIChjb25zdCBkYXRhUGF0aCBvZiBkYXRhUGF0aHMpIHtcbiAgICAgICAgY29uc3QgY29tcG9uZW50cyA9IHRoaXMuZ2V0Q29tcG9uZW50c0J5RGF0YVBhdGgoZGF0YVBhdGgpXG4gICAgICAgIGZvciAoY29uc3QgY29tcG9uZW50IG9mIGNvbXBvbmVudHMpIHtcbiAgICAgICAgICBpZiAoIWNvbXBvbmVudC52YWxpZGF0ZShub3RpZnkpKSB7XG4gICAgICAgICAgICAvLyBGb2N1cyBmaXJzdCBlcnJvciBmaWVsZFxuICAgICAgICAgICAgaWYgKG5vdGlmeSAmJiBmaXJzdCkge1xuICAgICAgICAgICAgICBjb21wb25lbnQuc2Nyb2xsSW50b1ZpZXcoKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZmlyc3QgPSBmYWxzZVxuICAgICAgICAgICAgaXNWYWxpZCA9IGZhbHNlXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAobm90aWZ5ICYmICFpc1ZhbGlkKSB7XG4gICAgICAgIHRoaXMubm90aWZ5RXJyb3JzKClcbiAgICAgIH1cbiAgICAgIHJldHVybiBpc1ZhbGlkXG4gICAgfSxcblxuICAgIHZlcmlmeUFsbChtYXRjaCkge1xuICAgICAgcmV0dXJuIHRoaXMudmFsaWRhdGVBbGwobWF0Y2gsIGZhbHNlKVxuICAgIH0sXG5cbiAgICBhc3luYyBzaG93VmFsaWRhdGlvbkVycm9ycyhlcnJvcnMsIGZvY3VzKSB7XG4gICAgICB0aGlzLmNsZWFyRXJyb3JzKClcbiAgICAgIGxldCBmaXJzdCA9IHRydWVcbiAgICAgIGNvbnN0IHVubWF0Y2hlZCA9IFtdXG4gICAgICBmb3IgKGNvbnN0IFtkYXRhUGF0aCwgZXJyc10gb2YgT2JqZWN0LmVudHJpZXMoZXJyb3JzKSkge1xuICAgICAgICAvLyBJZiB0aGUgc2NoZW1hIGlzIGEgZGF0YS1yb290LCBwcmVmaXggaXRzIG93biBkYXRhUGF0aCB0byBhbGwgZXJyb3JzLFxuICAgICAgICAvLyBzaW5jZSB0aGUgZGF0YSB0aGF0IGl0IHNlbmRzIGFuZCB2YWxpZGF0ZXMgd2lsbCBiZSB1bnByZWZpeGVkLlxuICAgICAgICBjb25zdCBmdWxsRGF0YVBhdGggPSB0aGlzLmhhc093bkRhdGFcbiAgICAgICAgICA/IGFwcGVuZERhdGFQYXRoKHRoaXMuZGF0YVBhdGgsIGRhdGFQYXRoKVxuICAgICAgICAgIDogZGF0YVBhdGhcbiAgICAgICAgLy8gY29uc29sZS5sb2codGhpcywgdGhpcy5kYXRhUGF0aCwgdGhpcy5oYXNPd25EYXRhLCBmdWxsRGF0YVBhdGgpXG4gICAgICAgIC8vIENvbnZlcnQgZnJvbSBKYXZhU2NyaXB0IHByb3BlcnR5IGFjY2VzcyBub3RhdGlvbiwgdG8gb3VyIG93biBmb3JtXG4gICAgICAgIC8vIG9mIHJlbGF0aXZlIEpTT04gcG9pbnRlcnMgYXMgZGF0YS1wYXRoczpcbiAgICAgICAgY29uc3QgZGF0YVBhdGhQYXJ0cyA9IHBhcnNlRGF0YVBhdGgoZnVsbERhdGFQYXRoKVxuICAgICAgICBsZXQgZm91bmQgPSBmYWxzZVxuICAgICAgICBjb25zdCBjb21wb25lbnRzID0gdGhpcy5nZXRDb21wb25lbnRzQnlEYXRhUGF0aChkYXRhUGF0aFBhcnRzKVxuICAgICAgICBmb3IgKGNvbnN0IGNvbXBvbmVudCBvZiBjb21wb25lbnRzKSB7XG4gICAgICAgICAgaWYgKGNvbXBvbmVudC5zaG93VmFsaWRhdGlvbkVycm9ycyhlcnJzLCBmaXJzdCAmJiBmb2N1cykpIHtcbiAgICAgICAgICAgIGZvdW5kID0gdHJ1ZVxuICAgICAgICAgICAgZmlyc3QgPSBmYWxzZVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoIWZvdW5kKSB7XG4gICAgICAgICAgLy8gQ291bGRuJ3QgZmluZCBhIGNvbXBvbmVudCBpbiBhbiBhY3RpdmUgZm9ybSBmb3IgdGhlIGdpdmVuIGRhdGFQYXRoLlxuICAgICAgICAgIC8vIFNlZSBpZiB3ZSBjYW4gZmluZCBhIGNvbXBvbmVudCBzZXJ2aW5nIGEgcGFydCBvZiB0aGUgZGF0YVBhdGgsXG4gICAgICAgICAgLy8gYW5kIHRha2UgaXQgZnJvbSB0aGVyZTpcbiAgICAgICAgICBjb25zdCBwcm9wZXJ0eSA9IGRhdGFQYXRoUGFydHMucG9wKClcbiAgICAgICAgICB3aGlsZSAoZGF0YVBhdGhQYXJ0cy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBjb25zdCBjb21wb25lbnRzID0gdGhpcy5nZXRDb21wb25lbnRzQnlEYXRhUGF0aChkYXRhUGF0aFBhcnRzKVxuICAgICAgICAgICAgZm9yIChjb25zdCBjb21wb25lbnQgb2YgY29tcG9uZW50cykge1xuICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgYXdhaXQgY29tcG9uZW50Lm5hdmlnYXRlVG9Db21wb25lbnQ/LihcbiAgICAgICAgICAgICAgICAgIGZ1bGxEYXRhUGF0aCxcbiAgICAgICAgICAgICAgICAgIHN1YkNvbXBvbmVudHMgPT4ge1xuICAgICAgICAgICAgICAgICAgICBsZXQgZm91bmQgPSBmYWxzZVxuICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGNvbXBvbmVudCBvZiBzdWJDb21wb25lbnRzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgY29uc3QgZXJycyA9IGVycm9yc1tjb21wb25lbnQuZGF0YVBhdGhdXG4gICAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgZXJycyAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50LnNob3dWYWxpZGF0aW9uRXJyb3JzKGVycnMsIGZpcnN0ICYmIGZvY3VzKVxuICAgICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlXG4gICAgICAgICAgICAgICAgICAgICAgICBmaXJzdCA9IGZhbHNlXG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmb3VuZFxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgLy8gRm91bmQgYSBuZXN0ZWQgZm9ybSB0byBkaXNwbGF5IGF0IGxlYXN0IHBhcnRzIGZvIHRoZSBlcnJvcnMuXG4gICAgICAgICAgICAgICAgLy8gV2UgY2FuJ3Qgc2hvdyBhbGwgZXJyb3JzIGF0IG9uY2UsIHNvIHdlJ3JlIGRvbmUuIERvbid0IGNhbGxcbiAgICAgICAgICAgICAgICAvLyBgbm90aWZ5RXJyb3JzKClgIHlldCwgYXMgd2UgY2FuIG9ubHkgZGlzcGxheSBpdCBvbmNlXG4gICAgICAgICAgICAgICAgLy8gYHNob3dWYWxpZGF0aW9uRXJyb3JzKClgIHdhcyBjYWxsZWQgZnJvbSBgRGl0b0Zvcm0ubW91bnRlZCgpYFxuICAgICAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBTdGlsbCBoZXJlLCBzbyBrZWVwIHJlbW92aW5nIHRoZSBsYXN0IHBhcnQgdW50aWwgd2UgZmluZCBhIG1hdGNoLlxuICAgICAgICAgICAgZGF0YVBhdGhQYXJ0cy5wb3AoKVxuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBXaGVuIHRoZSBlcnJvciBjYW4ndCBiZSBtYXRjaGVkLCBhZGQgaXQgdG8gYSBsaXN0IG9mIHVubWF0Y2hlZFxuICAgICAgICAgIC8vIGVycm9ycyB3aXRoIGRlY2VudCBtZXNzYWdlLCB0byByZXBvcnQgYXQgdGhlIGVuZC5cbiAgICAgICAgICBjb25zdCBmaWVsZCA9IGxhYmVsaXplKHByb3BlcnR5KVxuICAgICAgICAgIGZvciAoY29uc3QgZXJyIG9mIGVycnMpIHtcbiAgICAgICAgICAgIGNvbnN0IHByZWZpeCA9IGZpZWxkXG4gICAgICAgICAgICAgID8gYFRoZSBmaWVsZCAke2ZpZWxkfWBcbiAgICAgICAgICAgICAgOiBgVGhlICR7dGhpcy5mb3JtTGFiZWx9YFxuICAgICAgICAgICAgdW5tYXRjaGVkLnB1c2goYCR7cHJlZml4fSAke2Vyci5tZXNzYWdlfWApXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGZpcnN0ID0gZmFsc2VcbiAgICAgIH1cbiAgICAgIGlmICghZmlyc3QpIHtcbiAgICAgICAgdGhpcy5ub3RpZnlFcnJvcnModW5tYXRjaGVkLmpvaW4oJ1xcbicpKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBub3RpZnlFcnJvcnMobWVzc2FnZSkge1xuICAgICAgdGhpcy5ub3RpZnkoe1xuICAgICAgICB0eXBlOiAnZXJyb3InLFxuICAgICAgICB0aXRsZTogJ1ZhbGlkYXRpb24gRXJyb3JzJyxcbiAgICAgICAgdGV4dDogbWVzc2FnZSB8fCAnUGxlYXNlIGNvcnJlY3QgdGhlIGhpZ2hsaWdodGVkIGVycm9ycy4nXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICByZXNldERhdGEoKSB7XG4gICAgICAvLyBXZSBjYW4ndCBzZXQgYHRoaXMuZGF0YSA9IC4uLmAgYmVjYXVzZSBpdCdzIGEgcHJvcGVydHksIGJ1dCB3ZSBjYW4gc2V0XG4gICAgICAvLyBhbGwga25vd24gcHJvcGVydGllcyBvbiBpdCB0byB0aGUgdmFsdWVzIHJldHVybmVkIGJ5XG4gICAgICAvLyBgc2V0RGVmYXVsdFZhbHVlcygpYCwgYXMgdGhleSBhcmUgYWxsIHJlYWN0aXZlIGFscmVhZHkgZnJvbSB0aGUgc3RhcnRzOlxuICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLmRhdGEsIHNldERlZmF1bHRWYWx1ZXModGhpcy5zY2hlbWEsIHt9LCB0aGlzKSlcbiAgICAgIHRoaXMuY2xlYXJFcnJvcnMoKVxuICAgIH0sXG5cbiAgICBzZXREYXRhKGRhdGEpIHtcbiAgICAgIGZvciAoY29uc3QgbmFtZSBpbiBkYXRhKSB7XG4gICAgICAgIGlmIChuYW1lIGluIHRoaXMuZGF0YSkge1xuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSB2dWUvbm8tbXV0YXRpbmctcHJvcHNcbiAgICAgICAgICBpZiAoIWVxdWFscyh0aGlzLmRhdGFbbmFtZV0sIGRhdGFbbmFtZV0pKSB7XG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgdnVlL25vLW11dGF0aW5nLXByb3BzXG4gICAgICAgICAgICB0aGlzLmRhdGFbbmFtZV0gPSBkYXRhW25hbWVdXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGNvbXBvbmVudCBvZiB0aGlzLmdldENvbXBvbmVudHNCeU5hbWUobmFtZSkpIHtcbiAgICAgICAgICAgICAgY29tcG9uZW50Lm1hcmtEaXJ0eSgpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIGZpbHRlckRhdGEoZGF0YSkge1xuICAgICAgLy8gRmlsdGVycyBvdXQgYXJyYXlzIGFuZCBvYmplY3RzIHRoYXQgYXJlIGJhY2sgYnkgZGF0YSByZXNvdXJjZXNcbiAgICAgIC8vIHRoZW1zZWx2ZXMsIGFzIHRob3NlIGFyZSBhbHJlYWR5IHRha2luZyBjYXJlIG9mIHRocm91Z2ggdGhlaXIgb3duIEFQSVxuICAgICAgLy8gcmVzb3VyY2UgZW5kLXBvaW50cyBhbmQgc2hvdWxkbid0IGJlIHNldC5cbiAgICAgIGNvbnN0IGNvcHkgPSB7fVxuICAgICAgZm9yIChjb25zdCBbbmFtZSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGRhdGEpKSB7XG4gICAgICAgIGlmIChpc0FycmF5KHZhbHVlKSB8fCBpc09iamVjdCh2YWx1ZSkpIHtcbiAgICAgICAgICBjb25zdCBjb21wb25lbnRzID0gdGhpcy5nZXRDb21wb25lbnRzQnlOYW1lKG5hbWUpXG4gICAgICAgICAgaWYgKGNvbXBvbmVudHMuc29tZShjb21wb25lbnQgPT4gY29tcG9uZW50LnByb3ZpZGVzRGF0YSkpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvcHlbbmFtZV0gPSB2YWx1ZVxuICAgICAgfVxuICAgICAgcmV0dXJuIGNvcHlcbiAgICB9LFxuXG4gICAgcHJvY2Vzc0RhdGEoeyB0YXJnZXQgPSAnY2xpcGJvYXJkJywgc2NoZW1hT25seSA9IHRydWUgfSA9IHt9KSB7XG4gICAgICByZXR1cm4gcHJvY2Vzc0RhdGEoXG4gICAgICAgIHRoaXMuc2NoZW1hLFxuICAgICAgICB0aGlzLnNvdXJjZVNjaGVtYSxcbiAgICAgICAgdGhpcy5kYXRhLFxuICAgICAgICB0aGlzLmRhdGFQYXRoLFxuICAgICAgICB7XG4gICAgICAgICAgLy8gTmVlZGVkIGZvciBEaXRvQ29udGV4dCBoYW5kbGluZyBpbnNpZGUgYHByb2Nlc3NEYXRhYCBhbmRcbiAgICAgICAgICAvLyBgcHJvY2Vzc1NjaGVtYURhdGEoKWA6XG4gICAgICAgICAgcm9vdERhdGE6IHRoaXMucm9vdERhdGEsXG4gICAgICAgICAgY29tcG9uZW50OiB0aGlzLFxuICAgICAgICAgIHNjaGVtYU9ubHksXG4gICAgICAgICAgdGFyZ2V0XG4gICAgICAgIH1cbiAgICAgIClcbiAgICB9LFxuXG4gICAgX3JlZ2lzdGVyKGFkZCkge1xuICAgICAgLy8gYCRzY2hlbWFQYXJlbnRDb21wb25lbnQoKWAgaXMgb25seSBzZXQgaWYgb25lIG9mIHRoZSBhbmNlc3RvcnMgdXNlc1xuICAgICAgLy8gdGhlIGBTY2hlbWFQYXJlbnRNaXhpbmA6XG4gICAgICB0aGlzLiRzY2hlbWFQYXJlbnRDb21wb25lbnQoKT8uX3JlZ2lzdGVyU2NoZW1hQ29tcG9uZW50KHRoaXMsIGFkZClcbiAgICB9LFxuXG4gICAgX3JlZ2lzdGVyQ29tcG9uZW50KGNvbXBvbmVudCwgYWRkKSB7XG4gICAgICB0aGlzLl9yZWdpc3RlckVudHJ5KHRoaXMuY29tcG9uZW50c1JlZ2lzdHJ5LCBjb21wb25lbnQsIGFkZClcbiAgICAgIC8vIE9ubHkgcmVnaXN0ZXIgd2l0aCB0aGUgcGFyZW50IGlmIHNjaGVtYSBzaGFyZXMgZGF0YSB3aXRoIGl0LlxuICAgICAgdGhpcy5wYXJlbnRTY2hlbWFDb21wb25lbnQ/Ll9yZWdpc3RlckNvbXBvbmVudChjb21wb25lbnQsIGFkZClcbiAgICB9LFxuXG4gICAgX3JlZ2lzdGVyUGFuZShwYW5lLCBhZGQpIHtcbiAgICAgIHRoaXMuX3JlZ2lzdGVyRW50cnkodGhpcy5wYW5lc1JlZ2lzdHJ5LCBwYW5lLCBhZGQpXG4gICAgfSxcblxuICAgIF9yZWdpc3RlclBhbmVsKHBhbmVsLCBhZGQpIHtcbiAgICAgIHRoaXMuX3JlZ2lzdGVyRW50cnkodGhpcy5wYW5lbHNSZWdpc3RyeSwgcGFuZWwsIGFkZClcbiAgICB9LFxuXG4gICAgX3JlZ2lzdGVyRW50cnkocmVnaXN0cnksIGVudHJ5LCBhZGQpIHtcbiAgICAgIGNvbnN0IHVpZCA9IGVudHJ5LiR1aWRcbiAgICAgIGlmIChhZGQpIHtcbiAgICAgICAgcmVnaXN0cnlbdWlkXSA9IGVudHJ5XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkZWxldGUgcmVnaXN0cnlbdWlkXVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBfbGlzdEVudHJpZXNCeURhdGFQYXRoKHJlZ2lzdHJ5KSB7XG4gICAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyhyZWdpc3RyeSkucmVkdWNlKChlbnRyaWVzQnlEYXRhUGF0aCwgZW50cnkpID0+IHtcbiAgICAgICAgLy8gTXVsdGlwbGUgZW50cmllcyBjYW4gYmUgbGlua2VkIHRvIHRoZSBzYW1lIGRhdGEtcGF0aCwgZS5nLiB3aGVuXG4gICAgICAgIC8vIHRoZXJlIGFyZSB0YWJzLiBMaW5rIGVhY2ggZGF0YS1wYXRoIHRvIGFuIGFycmF5IG9mIGVudHJpZXMuXG4gICAgICAgIGNvbnN0IHsgZGF0YVBhdGggfSA9IGVudHJ5XG4gICAgICAgIGNvbnN0IGVudHJpZXMgPSAoZW50cmllc0J5RGF0YVBhdGhbZGF0YVBhdGhdIHx8PSBbXSlcbiAgICAgICAgZW50cmllcy5wdXNoKGVudHJ5KVxuICAgICAgICByZXR1cm4gZW50cmllc0J5RGF0YVBhdGhcbiAgICAgIH0sIHt9KVxuICAgIH0sXG5cbiAgICBfZ2V0RW50cmllcyhlbnRyaWVzQnlEYXRhUGF0aCwgZGF0YVBhdGgpIHtcbiAgICAgIHJldHVybiBub3JtYWxpemVEYXRhUGF0aChkYXRhUGF0aCkuc3RhcnRzV2l0aCh0aGlzLmRhdGFQYXRoKVxuICAgICAgICA/IHRoaXMuX2dldEVudHJpZXNCeURhdGFQYXRoKGVudHJpZXNCeURhdGFQYXRoLCBkYXRhUGF0aClcbiAgICAgICAgOiB0aGlzLl9nZXRFbnRyaWVzQnlOYW1lKGVudHJpZXNCeURhdGFQYXRoLCBkYXRhUGF0aClcbiAgICB9LFxuXG4gICAgX2dldEVudHJpZXNCeURhdGFQYXRoKGVudHJpZXNCeURhdGFQYXRoLCBkYXRhUGF0aCkge1xuICAgICAgcmV0dXJuIGVudHJpZXNCeURhdGFQYXRoW25vcm1hbGl6ZURhdGFQYXRoKGRhdGFQYXRoKV0gfHwgW11cbiAgICB9LFxuXG4gICAgX2dldEVudHJpZXNCeU5hbWUoZW50cmllc0J5RGF0YVBhdGgsIG5hbWUpIHtcbiAgICAgIHJldHVybiBlbnRyaWVzQnlEYXRhUGF0aFthcHBlbmREYXRhUGF0aCh0aGlzLmRhdGFQYXRoLCBuYW1lKV0gfHwgW11cbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by1zY2hlbWEge1xuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuXG4gID4gLmRpdG8tc2NoZW1hLWhlYWRlciArIC5kaXRvLXNjaGVtYS1jb250ZW50ID4gLmRpdG8tcGFuZSB7XG4gICAgbWFyZ2luLXRvcDogJGZvcm0tc3BhY2luZy1oYWxmO1xuICB9XG5cbiAgJjpoYXMoPiAuZGl0by1zY2hlbWEtY29udGVudCArIC5kaXRvLWVkaXQtYnV0dG9ucykge1xuICAgIC8vIERpc3BsYXkgdGhlIGlubGluZWQgZWRpdCBidXR0b25zIHRvIHRoZSByaWdodCBvZiB0aGUgc2NoZW1hOlxuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgZmxleC1kaXJlY3Rpb246IHJvdztcbiAgICBhbGlnbi1pdGVtczogc3RyZXRjaDtcblxuICAgID4gLmRpdG8tZWRpdC1idXR0b25zIHtcbiAgICAgIGZsZXg6IDEgMCAwJTtcbiAgICAgIG1hcmdpbi1sZWZ0OiAkZm9ybS1zcGFjaW5nO1xuICAgIH1cbiAgfVxuXG4gID4gLmRpdG8tc2NoZW1hLWNvbnRlbnQge1xuICAgIGZsZXg6IDAgMSAxMDAlO1xuICAgIG1heC13aWR0aDogMTAwJTtcbiAgICAvLyBTbyB0aGF0IHNjaGVtYSBidXR0b25zIGNhbiBiZSBzdGlja3kgdG8gdGhlIGJvdHRvbS5cbiAgICAvLyBOT1RFOiBXZSBhbHNvIG5lZWQgZ3JpZCBmb3IgYFRyYW5zaXRpb25IZWlnaHRgIHRvIHdvcmsgd2VsbC4gU3dpdGNoaW5nXG4gICAgLy8gdG8gZmxleCBib3ggaGVyZSBjYXVzZXMganVtcHkgY29sbGFwc2luZyB0cmFuc2l0aW9ucy5cbiAgICBkaXNwbGF5OiBncmlkO1xuICAgIGdyaWQtdGVtcGxhdGUtcm93czogbWluLWNvbnRlbnQ7XG4gICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiAxMDAlO1xuXG4gICAgPiA6b25seS1jaGlsZCB7XG4gICAgICBncmlkLXJvdy1lbmQ6IG5vbmU7XG4gICAgfVxuICB9XG59XG5cbi5kaXRvLXNjaGVtYS1oZWFkZXIge1xuICBkaXNwbGF5OiBmbGV4O1xuICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG5cbiAgLmRpdG8taGVhZGVyICYge1xuICAgIC8vIFdoZW4gdGVsZXBvcnRlZCBpbnRvIG1haW4gaGVhZGVyLlxuICAgIGFsaWduLWl0ZW1zOiBmbGV4LWVuZDtcbiAgfVxuXG4gIC5kaXRvLWxhYmVsICYge1xuICAgIC8vIFdoZW4gdGVsZXBvcnRlZCBpbnRvIGNvbnRhaW5lciBsYWJlbC5cbiAgICBmbGV4OiAxO1xuICB9XG5cbiAgPiAuZGl0by1sYWJlbCB7XG4gICAgbWFyZ2luLWJvdHRvbTogMDtcbiAgfVxuXG4gID4gLmRpdG8tYnV0dG9ucyB7XG4gICAgbWFyZ2luLWxlZnQ6IHZhcigtLWJ1dHRvbi1tYXJnaW4sIDApO1xuICB9XG59XG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbkRpdG9TY2hlbWEuZGl0by1zY2hlbWEtaW5saW5lZChcbiAgOmNsYXNzPVwieyAnZGl0by1zY2hlbWEtY29tcGFjdCc6IGlzQ29tcGFjdCB9XCJcbiAgOnNjaGVtYT1cInNjaGVtYVwiXG4gIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgOmRhdGE9XCJkYXRhXCJcbiAgOm1ldGE9XCJtZXRhXCJcbiAgOnN0b3JlPVwic3RvcmVcIlxuICA6bGFiZWw9XCJpc0NvbXBhY3QgPyBudWxsIDogbGFiZWxcIlxuICA6cGFkZGluZz1cInBhZGRpbmcgPz8gJ2lubGluZWQnXCJcbiAgOmlubGluZWQ9XCJ0cnVlXCJcbiAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICA6Y29sbGFwc2VkPVwiY29sbGFwc2VkXCJcbiAgOmNvbGxhcHNpYmxlPVwiY29sbGFwc2libGVcIlxuICA6Z2VuZXJhdGVMYWJlbHM9XCIhaXNDb21wYWN0XCJcbiAgOmxhYmVsTm9kZT1cImxhYmVsTm9kZVwiXG4gIDphY2N1bXVsYXRlZEJhc2lzPVwiYWNjdW11bGF0ZWRCYXNpc1wiXG4pXG4gIC8vLSBSZW5kZXIgZGl0by1lZGl0LWJ1dHRvbnMgZm9yIGlubGluZWQgc2NoZW1hcyBzZXBhcmF0ZWx5IGZyb20gYWxsXG4gIC8vLSBvdGhlcnMgaW4gYFR5cGVMaXN0YCBhcyBhIHNjb3BlLCBmb3IgYmV0dGVyIGhhbmRsaW5nIG9mIGxheW91dC5cbiAgdGVtcGxhdGUoI2VkaXQtYnV0dG9ucylcbiAgICBEaXRvRWRpdEJ1dHRvbnMoXG4gICAgICB2LWlmPVwiZGVsZXRhYmxlIHx8IGRyYWdnYWJsZSB8fCBlZGl0YWJsZVwiXG4gICAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgICA6bWV0YT1cIm1ldGFcIlxuICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgICAgOmRlbGV0YWJsZT1cImRlbGV0YWJsZVwiXG4gICAgICA6ZHJhZ2dhYmxlPVwiZHJhZ2dhYmxlXCJcbiAgICAgIDplZGl0YWJsZT1cImVkaXRhYmxlXCJcbiAgICAgIDplZGl0UGF0aD1cImVkaXRQYXRoXCJcbiAgICAgIEBkZWxldGU9XCIkZW1pdCgnZGVsZXRlJylcIlxuICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IHsgaXNDb21wYWN0IH0gZnJvbSAnLi4vdXRpbHMvc2NoZW1hLmpzJ1xuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdEaXRvU2NoZW1hSW5saW5lZCcsIHtcbiAgZW1pdHM6IFsnZGVsZXRlJ10sXG5cbiAgcHJvcHM6IHtcbiAgICBzY2hlbWE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGRhdGFQYXRoOiB7IHR5cGU6IFN0cmluZywgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBkYXRhOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBtZXRhOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBzdG9yZTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgbGFiZWw6IHsgdHlwZTogW1N0cmluZywgT2JqZWN0XSwgZGVmYXVsdDogbnVsbCB9LFxuICAgIHBhZGRpbmc6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgZGlzYWJsZWQ6IHsgdHlwZTogQm9vbGVhbiwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBjb2xsYXBzZWQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBjb2xsYXBzaWJsZTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGRyYWdnYWJsZTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGVkaXRhYmxlOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgZGVsZXRhYmxlOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgZWRpdFBhdGg6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgbGFiZWxOb2RlOiB7IHR5cGU6IEhUTUxFbGVtZW50LCBkZWZhdWx0OiBudWxsIH0sXG4gICAgYWNjdW11bGF0ZWRCYXNpczogeyB0eXBlOiBOdW1iZXIsIGRlZmF1bHQ6IG51bGwgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgaXNDb21wYWN0KCkge1xuICAgICAgcmV0dXJuIGlzQ29tcGFjdCh0aGlzLnNjaGVtYSlcbiAgICB9LFxuXG4gICAgaGFzTGFiZWwoKSB7XG4gICAgICByZXR1cm4gIXRoaXMuaXNDb21wYWN0ICYmICEhdGhpcy5sYWJlbFxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5cbi5kaXRvLXNjaGVtYS1pbmxpbmVkIHtcbiAgLy8gVXNlIGdyaWQgbGF5b3V0IGZvciB0d28gcmVhc29uczogRm9yIGBUcmFuc2l0aW9uSGVpZ2h0YCB0byB3b3JrIHNtb290aGx5LFxuICAvLyBhbmQgdG8gYWxpZ24gdGhlIGhlYWRlciBhYm92ZSB0aGUgY29udGVudCB3aGVuIHRoZSBoZWFkZXIgaXMgbm90IHRlbGVwb3J0ZWRcbiAgLy8gb3V0c2lkZSBvZiB0aGUgc2NoZW1hLlxuICBkaXNwbGF5OiBncmlkO1xuICBncmlkLXRlbXBsYXRlLXJvd3M6IG1pbi1jb250ZW50O1xuICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IDEwMCU7XG5cbiAgJjpub3QoOmhvdmVyLCAuZGl0by1zY2hlbWEtLW9wZW4pIHtcbiAgICA+IC5kaXRvLXNjaGVtYS1oZWFkZXIge1xuICAgICAgPiAuZGl0by1jbGlwYm9hcmQge1xuICAgICAgICBkaXNwbGF5OiBub25lO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuPC9zdHlsZT5cbiIsIjwhLS0gZXNsaW50LWRpc2FibGUgdnVlL25vLXRlbXBsYXRlLXNoYWRvdyAtLT5cbjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4uZGl0by1wYW5lKFxuICB2LWlmPVwiaXNQb3B1bGF0ZWQgJiYgY29tcG9uZW50U2NoZW1hcy5sZW5ndGggPiAwXCJcbiAgdi1yZXNpemU9XCJvblJlc2l6ZVBhbmVcIlxuICA6Y2xhc3M9XCJjbGFzc2VzXCJcbilcbiAgdGVtcGxhdGUoXG4gICAgdi1mb3I9YHtcbiAgICAgIHNjaGVtYSxcbiAgICAgIGRhdGFQYXRoLFxuICAgICAgbmVzdGVkRGF0YVBhdGgsXG4gICAgICBuZXN0ZWQsXG4gICAgICBzdG9yZVxuICAgIH0sIGluZGV4IGluIGNvbXBvbmVudFNjaGVtYXNgXG4gIClcbiAgICAvLyAtVXNlIDxzcGFuPiBmb3IgLmRpdG8tYnJlYWsgc28gd2UgY2FuIHVzZSBgLmRpdG8tY29udGFpbmVyOmZpcnN0LW9mLXR5cGVgXG4gICAgLy8gc2VsZWN0b3IuXG4gICAgc3Bhbi5kaXRvLWJyZWFrKFxuICAgICAgdi1pZj1cInNjaGVtYS5icmVhayA9PT0gJ2JlZm9yZSdcIlxuICAgIClcbiAgICBEaXRvQ29udGFpbmVyKFxuICAgICAgdi1pZj1cInNob3VsZFJlbmRlclNjaGVtYShzY2hlbWEpXCJcbiAgICAgIHJlZj1cImNvbnRhaW5lcnNcIlxuICAgICAgOmtleT1cIm5lc3RlZERhdGFQYXRoXCJcbiAgICAgIDpkYXRhLWluZGV4PVwiaW5kZXhcIlxuICAgICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgICA6ZGF0YT1cImRhdGFcIlxuICAgICAgOm1ldGE9XCJtZXRhXCJcbiAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgIDpzaW5nbGU9XCJpc1NpbmdsZUNvbXBvbmVudFwiXG4gICAgICA6bmVzdGVkPVwibmVzdGVkXCJcbiAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICAgIDpnZW5lcmF0ZUxhYmVscz1cImdlbmVyYXRlTGFiZWxzXCJcbiAgICAgIDp2ZXJ0aWNhbExhYmVscz1cImlzSW5MYWJlbGVkUm93KGluZGV4KVwiXG4gICAgICA6YWNjdW11bGF0ZWRCYXNpcz1cImFjY3VtdWxhdGVkQmFzaXNcIlxuICAgIClcbiAgICBzcGFuLmRpdG8tYnJlYWsoXG4gICAgICB2LWlmPVwic2NoZW1hLmJyZWFrID09PSAnYWZ0ZXInXCJcbiAgICApXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCB7IGFwcGVuZERhdGFQYXRoIH0gZnJvbSAnLi4vdXRpbHMvZGF0YS5qcydcbmltcG9ydCB7IGlzTmVzdGVkIH0gZnJvbSAnLi4vdXRpbHMvc2NoZW1hLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ0RpdG9QYW5lJywge1xuICBwcm92aWRlKCkge1xuICAgIHJldHVybiB7XG4gICAgICAkdGFiQ29tcG9uZW50OiAoKSA9PiB0aGlzLnRhYkNvbXBvbmVudFxuICAgIH1cbiAgfSxcblxuICBwcm9wczoge1xuICAgIHNjaGVtYTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgZGF0YVBhdGg6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiAnJyB9LFxuICAgIGRhdGE6IHsgdHlwZTogT2JqZWN0LCBkZWZhdWx0OiBudWxsIH0sXG4gICAgbWV0YTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgc3RvcmU6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHRhYjogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBwYWRkaW5nOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogbnVsbCB9LFxuICAgIHNpbmdsZTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGRpc2FibGVkOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgZ2VuZXJhdGVMYWJlbHM6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBhY2N1bXVsYXRlZEJhc2lzOiB7IHR5cGU6IE51bWJlciwgZGVmYXVsdDogbnVsbCB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgcG9zaXRpb25zOiBbXVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIGNsYXNzZXMoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAnZGl0by1wYW5lLS1zaW5nbGUnOiB0aGlzLmlzU2luZ2xlQ29tcG9uZW50LFxuICAgICAgICBbYGRpdG8tcGFuZS0tcGFkZGluZy0ke3RoaXMucGFkZGluZ31gXTogISF0aGlzLnBhZGRpbmdcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgdGFiQ29tcG9uZW50KCkge1xuICAgICAgcmV0dXJuIHRoaXMudGFiID8gdGhpcyA6IHRoaXMuJHRhYkNvbXBvbmVudCgpXG4gICAgfSxcblxuICAgIGNvbXBvbmVudFNjaGVtYXMoKSB7XG4gICAgICAvLyBDb21wdXRlIGEgY29tcG9uZW50cyBsaXN0IHdoaWNoIGhhcyB0aGUgZGF0YVBhdGggYmFrZWQgaW50byBpdHMga2V5c1xuICAgICAgLy8gYW5kIGFkZHMgdGhlIGtleSBhcyB0aGUgbmFtZSB0byBlYWNoIGNvbXBvbmVudCwgdXNlZCBmb3IgbGFiZWxzLCBldGMuXG4gICAgICAvLyBOT1RFOiBzY2hlbWEgY2FuIGJlIG51bGwgd2hpbGUgbXVsdGktZm9ybSBsaXN0cyBsb2FkIHRoZWlyIGRhdGEsXG4gICAgICAvLyBiZWNhdXNlIG9ubHkgdGhlIGF2YWlsYWJsZSBkYXRhIHdpbGwgZGV0ZXJtaW5lIHRoZSB0eXBlIG9mIGZvcm0uXG4gICAgICAvLyBXaGVuIGVkaXRpbmcgcHJpbWl0aXZlIHZhbHVlcyB0aHJvdWdoIGEgZm9ybSwgZG8gbm90IGFwcGVuZCAnbmFtZScgdG9cbiAgICAgIC8vIHRoZSBjb21wb25lbnQncyBkYXRhUGF0aCBzbyBpdCBjYW4gYmUgbWFwcGVkIHRvIGZyb20gdmFsaWRhdGlvbiBlcnJvcnMuXG4gICAgICAvLyBOT1RFOiBOb3QgYWxsIHNjaGVtYXMgLyBjb21wb25lbnRzIGhhdmUgYSBzb3VyY2VTY2hlbWEsIGUuZy4gZGlhbG9ncy5cbiAgICAgIGNvbnN0IHdyYXBQcmltaXRpdmVzID0gdGhpcy5zb3VyY2VTY2hlbWE/LndyYXBQcmltaXRpdmVzXG4gICAgICByZXR1cm4gT2JqZWN0LmVudHJpZXModGhpcy5zY2hlbWE/LmNvbXBvbmVudHMgfHwge30pLm1hcChcbiAgICAgICAgKFtuYW1lLCBzY2hlbWFdKSA9PiB7XG4gICAgICAgICAgLy8gQWx3YXlzIGFkZCBuYW1lIHRvIGNvbXBvbmVudCBzY2hlbWEuXG4gICAgICAgICAgc2NoZW1hLm5hbWUgPSBuYW1lXG4gICAgICAgICAgLy8gU2hhcmUgZGF0YVBhdGggYW5kIHN0b3JlIHdpdGggcGFyZW50IGlmIG5vdCBuZXN0ZWQ6XG4gICAgICAgICAgY29uc3QgbmVzdGVkID0gaXNOZXN0ZWQoc2NoZW1hKVxuICAgICAgICAgIGNvbnN0IG5lc3RlZERhdGFQYXRoID0gYXBwZW5kRGF0YVBhdGgodGhpcy5kYXRhUGF0aCwgbmFtZSlcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgc2NoZW1hLFxuICAgICAgICAgICAgZGF0YVBhdGg6XG4gICAgICAgICAgICAgIG5lc3RlZCAmJiAhd3JhcFByaW1pdGl2ZXNcbiAgICAgICAgICAgICAgICA/IG5lc3RlZERhdGFQYXRoXG4gICAgICAgICAgICAgICAgOiB0aGlzLmRhdGFQYXRoLFxuICAgICAgICAgICAgbmVzdGVkRGF0YVBhdGgsXG4gICAgICAgICAgICBuZXN0ZWQsXG4gICAgICAgICAgICBzdG9yZTogdGhpcy5nZXRDaGlsZFN0b3JlKG5hbWUpXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICApXG4gICAgfSxcblxuICAgIGlzU2luZ2xlQ29tcG9uZW50KCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2luZ2xlICYmIHRoaXMuY29tcG9uZW50U2NoZW1hcy5sZW5ndGggPT09IDFcbiAgICB9LFxuXG4gICAgdmVydGljYWxMYWJlbHNCeUluZGljZXMoKSB7XG4gICAgICBjb25zdCB7IHBvc2l0aW9ucyB9ID0gdGhpc1xuXG4gICAgICBjb25zdCBpc0xhc3RJblJvdyA9IGluZGV4ID0+IChcbiAgICAgICAgcG9zaXRpb25zW2luZGV4XSAmJiAoXG4gICAgICAgICAgaW5kZXggPT09IHBvc2l0aW9ucy5sZW5ndGggLSAxIHx8XG4gICAgICAgICAgZmluZE5leHRQb3NpdGlvbihpbmRleCkudG9wID4gcG9zaXRpb25zW2luZGV4XS50b3BcbiAgICAgICAgKVxuICAgICAgKVxuXG4gICAgICBjb25zdCBmaW5kTmV4dFBvc2l0aW9uID0gaW5kZXggPT4ge1xuICAgICAgICBmb3IgKGxldCBpID0gaW5kZXggKyAxOyBpIDwgcG9zaXRpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgaWYgKHBvc2l0aW9uc1tpXSkgcmV0dXJuIHBvc2l0aW9uc1tpXVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiAwXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHJvd3MgPSBbXVxuICAgICAgbGV0IHJvdyA9IFtdXG4gICAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgcG9zaXRpb25zLmxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgICByb3cucHVzaChpbmRleClcbiAgICAgICAgaWYgKGlzTGFzdEluUm93KGluZGV4KSkge1xuICAgICAgICAgIHJvd3MucHVzaChyb3cpXG4gICAgICAgICAgcm93ID0gW11cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHJvdy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHJvd3MucHVzaChyb3cpXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHZlcnRpY2FsTGFiZWxzQnlJbmRpY2VzID0gW11cblxuICAgICAgZm9yIChjb25zdCByb3cgb2Ygcm93cykge1xuICAgICAgICBsZXQgaGFzTGFiZWxzSW5Sb3cgPSBmYWxzZVxuICAgICAgICBmb3IgKGNvbnN0IGluZGV4IG9mIHJvdykge1xuICAgICAgICAgIGNvbnN0IHBvc2l0aW9uID0gdGhpcy5wb3NpdGlvbnNbaW5kZXhdXG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgcG9zaXRpb24/LmhlaWdodCA+IDIgJiYgKFxuICAgICAgICAgICAgICBwb3NpdGlvbi5ub2RlLm1hdGNoZXMoJzpoYXMoPiAuZGl0by1sYWJlbCknKSB8fFxuICAgICAgICAgICAgICBwb3NpdGlvbi5ub2RlXG4gICAgICAgICAgICAgICAgLmNsb3Nlc3QoJy5kaXRvLWNvbnRhaW5lcicpXG4gICAgICAgICAgICAgICAgLm1hdGNoZXMoJy5kaXRvLWNvbnRhaW5lci0tbGFiZWwtdmVydGljYWwnKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgLy8gVE9ETzogSGFuZGxlIG5lc3RlZCBzY2hlbWFzLCBlLmcuICdzZWN0aW9uJyBvciAnb2JqZWN0JyBhbmRcbiAgICAgICAgICAgIC8vIGRldGVjdCBsYWJlbHMgdGhlcmUgdG9vLlxuICAgICAgICAgICAgaGFzTGFiZWxzSW5Sb3cgPSB0cnVlXG4gICAgICAgICAgICBicmVha1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBmb3IgKGNvbnN0IGluZGV4IG9mIHJvdykge1xuICAgICAgICAgIHZlcnRpY2FsTGFiZWxzQnlJbmRpY2VzW2luZGV4XSA9IGhhc0xhYmVsc0luUm93XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHZlcnRpY2FsTGFiZWxzQnlJbmRpY2VzXG4gICAgfVxuICB9LFxuXG4gIHdhdGNoOiB7XG4gICAgJ2NvbXBvbmVudFNjaGVtYXMubGVuZ3RoJyhsZW5ndGgpIHtcbiAgICAgIHRoaXMucG9zaXRpb25zLmxlbmd0aCA9IGxlbmd0aFxuICAgIH1cbiAgfSxcblxuICBjcmVhdGVkKCkge1xuICAgIHRoaXMuX3JlZ2lzdGVyKHRydWUpXG4gIH0sXG5cbiAgdW5tb3VudGVkKCkge1xuICAgIHRoaXMuX3JlZ2lzdGVyKGZhbHNlKVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBfcmVnaXN0ZXIoYWRkKSB7XG4gICAgICB0aGlzLnNjaGVtYUNvbXBvbmVudC5fcmVnaXN0ZXJQYW5lKHRoaXMsIGFkZClcbiAgICB9LFxuXG4gICAgZm9jdXMoKSB7XG4gICAgICBpZiAodGhpcy50YWIpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuJHJvdXRlci5wdXNoKHsgaGFzaDogYCMke3RoaXMudGFifWAgfSlcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgb25SZXNpemVQYW5lKCkge1xuICAgICAgdGhpcy4kbmV4dFRpY2soKCkgPT4ge1xuICAgICAgICBmb3IgKGNvbnN0IGNvbnRhaW5lciBvZiB0aGlzLiRyZWZzLmNvbnRhaW5lcnMpIHtcbiAgICAgICAgICBjb25zdCBub2RlID0gY29udGFpbmVyLiRlbFxuICAgICAgICAgIGNvbnN0IGluZGV4ID0gK25vZGUuZGF0YXNldC5pbmRleFxuICAgICAgICAgIGNvbnN0IGJvdW5kcyA9IG5vZGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KClcbiAgICAgICAgICBjb25zdCBzdHlsZSA9IGdldENvbXB1dGVkU3R5bGUobm9kZSlcbiAgICAgICAgICBjb25zdCBwYWRkaW5nID0gcGFyc2VGbG9hdChzdHlsZS5wYWRkaW5nKVxuICAgICAgICAgIGNvbnN0IGZvbnRTaXplID0gcGFyc2VGbG9hdChzdHlsZS5mb250U2l6ZSlcbiAgICAgICAgICBjb25zdCBoZWlnaHQgPSBib3VuZHMuaGVpZ2h0IC0gMiAqIHBhZGRpbmdcbiAgICAgICAgICB0aGlzLnBvc2l0aW9uc1tpbmRleF0gPVxuICAgICAgICAgICAgaGVpZ2h0IDw9IDBcbiAgICAgICAgICAgICAgPyBudWxsXG4gICAgICAgICAgICAgIDoge1xuICAgICAgICAgICAgICAgICAgdG9wOiBib3VuZHMueSxcbiAgICAgICAgICAgICAgICAgIGhlaWdodDogaGVpZ2h0IC8gZm9udFNpemUsXG4gICAgICAgICAgICAgICAgICBub2RlXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBpc0luTGFiZWxlZFJvdyhpbmRleCkge1xuICAgICAgcmV0dXJuICEhdGhpcy52ZXJ0aWNhbExhYmVsc0J5SW5kaWNlc1tpbmRleF1cbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by1wYW5lIHtcbiAgJHNlbGY6ICY7XG4gICRyb290LXBhZGRpbmc6ICRjb250ZW50LXBhZGRpbmcgLSAkZm9ybS1zcGFjaW5nLWhhbGY7XG5cbiAgLS1wYW5lLXBhZGRpbmc6IDBweDtcblxuICBkaXNwbGF5OiBmbGV4O1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGZsZXgtZmxvdzogcm93IHdyYXA7XG4gIGFsaWduLWl0ZW1zOiBmbGV4LXN0YXJ0O1xuICBhbGlnbi1jb250ZW50OiBmbGV4LXN0YXJ0O1xuICAvLyBSZW1vdmUgdGhlIHBhZGRpbmcgYWRkZWQgYnkgYC5kaXRvLWNvbnRhaW5lcmAgaW5zaWRlIGAuZGl0by1wYW5lYDpcbiAgbWFyZ2luOiAtJGZvcm0tc3BhY2luZy1oYWxmO1xuICBwYWRkaW5nOiB2YXIoLS1wYW5lLXBhZGRpbmcpO1xuICAvLyBVc2UgYGZsZXg6IDAlYCBmb3IgYWxsIGAuZGl0by1wYW5lYCBleGNlcHQgYC5kaXRvLXBhbmVfX21haW5gLFxuICAvLyBzbyB0aGF0IHRoZSBgLmRpdG8tYnV0dG9ucy1tYWluYCBjYW4gYmUgbW92ZWQgYWxsIHRoZSB3YXkgdG8gdGhlIGJvdHRvbS5cbiAgZmxleDogMCU7XG5cbiAgJl9fbWFpbiB7XG4gICAgZmxleDogMTAwJTtcbiAgfVxuXG4gICYtLXBhZGRpbmctcm9vdCB7XG4gICAgLy8gQSByb290LWxldmVsIHBhbmUgaW5zaWRlIGEgc2Nyb2xsIHZpZXcuIENsZWFyIG5lZ2F0aXZlIG1hcmdpbiBmcm9tIGFib3ZlLlxuICAgIG1hcmdpbjogMDtcbiAgICAvLyBNb3ZlIHRoZSBuZWdhdGl2ZSBtYXJnaW4gdXNlZCB0byByZW1vdmUgdGhlIHBhZGRpbmcgYWRkZWQgYnlcbiAgICAvLyBgLmRpdG8tY29udGFpbmVyYCBpbnNpZGUgYC5kaXRvLXBhbmVgIHRvIHRoZSBwYWRkaW5nOlxuICAgIC0tcGFuZS1wYWRkaW5nOiAjeyRyb290LXBhZGRpbmd9O1xuXG4gICAgJiN7JHNlbGZ9LS1zaW5nbGUge1xuICAgICAgLS1wYW5lLXBhZGRpbmc6ICN7JGNvbnRlbnQtcGFkZGluZ307XG4gICAgfVxuXG4gICAgJjpoYXMoPiAuZGl0by1jb250YWluZXItLWxhYmVsLXZlcnRpY2FsOmZpcnN0LW9mLXR5cGUpIHtcbiAgICAgIC8vIFJlZHVjZSB0b3Agc3BhY2luZyB3aGVuIHRoZSBmaXJzdCByb3cgaGFzIGxhYmVscy5cbiAgICAgIG1hcmdpbi10b3A6IC0kZm9ybS1zcGFjaW5nLWhhbGY7XG4gICAgfVxuXG4gICAgLy8gRGlzcGxheSBhIHJ1bGVyIGJldHdlZW4gdGFiYmVkIGNvbXBvbmVudHMgYW5kIHRvd2FyZHMgdGhlIC5kaXRvLWJ1dHRvbnNcbiAgICAmX190YWIgKyAmX19tYWluIHtcbiAgICAgICY6OmJlZm9yZSB7XG4gICAgICAgIC8vIFVzZSBhIHBzZXVkbyBlbGVtZW50IHRvIGRpc3BsYXkgYSBydWxlciB3aXRoIHByb3BlciBtYXJnaW5zXG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICBjb250ZW50OiAnJztcbiAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgIGJvcmRlci1ib3R0b206ICRib3JkZXItc3R5bGU7XG4gICAgICAgIC8vIFNoaWZ0IHJ1bGVyIHVwIGJ5ICRyb290LXBhZGRpbmcgdG8gZXhjbHVkZSByZW1vdmVkICRmb3JtLXNwYWNpbmctaGFsZlxuICAgICAgICBtYXJnaW46ICgtJHJvb3QtcGFkZGluZykgJGZvcm0tc3BhY2luZy1oYWxmICRyb290LXBhZGRpbmc7XG4gICAgICAgIHBhZGRpbmc6ICRmb3JtLXNwYWNpbmctaGFsZjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAmX19tYWluICsgLmRpdG8tYnV0dG9ucy1tYWluIHtcbiAgICAgIC8vIE5lZWRlZCBmb3JtcyB3aXRoIHN0aWNreSBtYWluIGJ1dHRvbnMuXG4gICAgICBtYXJnaW46ICRjb250ZW50LXBhZGRpbmc7XG4gICAgICBtYXJnaW4tYm90dG9tOiAwO1xuICAgIH1cbiAgfVxuXG4gICYtLXBhZGRpbmctaW5saW5lZCB7XG4gICAgLS1wYW5lLXBhZGRpbmc6IDBweDtcbiAgfVxuXG4gICYtLXBhZGRpbmctbmVzdGVkIHtcbiAgICAtLXBhbmUtcGFkZGluZzogI3skZm9ybS1zcGFjaW5nfTtcblxuICAgICY6aGFzKD4gLmRpdG8tY29udGFpbmVyLS1sYWJlbC12ZXJ0aWNhbDpmaXJzdC1vZi10eXBlKSB7XG4gICAgICAvLyBSZWR1Y2UgdG9wIHNwYWNpbmcgd2hlbiB0aGUgZmlyc3Qgcm93IGhhcyBsYWJlbHMuXG4gICAgICBwYWRkaW5nLXRvcDogJGZvcm0tc3BhY2luZy1oYWxmO1xuICAgIH1cbiAgfVxuXG4gIC5kaXRvLWJyZWFrIHtcbiAgICAvLyBgLmRpdG8tYnJlYWtgIGlzIHJlbmRlcmVkIGFzIDxzcGFuPiBzbyB3ZSBjYW4gdXNlIHRoZVxuICAgIC8vIGAuZGl0by1jb250YWluZXI6Zmlyc3Qtb2YtdHlwZWAgc2VsZWN0b3IgdG8gbWF0Y2ggdGhlIGZpcnN0IGNvbnRhaW5lclxuICAgIC8vIGV2ZW4gaWYgaXQgaGFzIGEgYnJlYWsgYmVmb3JlIGl0LlxuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIGZsZXg6IDEwMCU7XG4gICAgaGVpZ2h0OiAwO1xuICB9XG59XG48L3N0eWxlPlxuIiwiaW1wb3J0IHsgaXNTdHJpbmcgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VGcmFjdGlvbih2YWx1ZSkge1xuICBjb25zdCBtYXRjaCA9IChcbiAgICBpc1N0cmluZyh2YWx1ZSkgJiZcbiAgICB2YWx1ZS5tYXRjaCgvXlxccyooWystXT9cXGQrKVxccypcXC9cXHMqKFsrLV0/XFxkKylcXHMqJC8pXG4gIClcbiAgaWYgKG1hdGNoKSB7XG4gICAgY29uc3QgWywgZGl2aWRlbmQsIGRpdmlzb3JdID0gbWF0Y2hcbiAgICByZXR1cm4gcGFyc2VGbG9hdChkaXZpZGVuZCkgLyBwYXJzZUZsb2F0KGRpdmlzb3IpXG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHBhcnNlRmxvYXQodmFsdWUpXG4gIH1cbn1cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4uZGl0by1jb250YWluZXIoXG4gIHYtc2hvdz1cImNvbXBvbmVudFZpc2libGVcIlxuICA6Y2xhc3M9XCJjb250YWluZXJDbGFzc2VzXCJcbiAgOnN0eWxlPVwiY29udGFpbmVyU3R5bGVzXCJcbilcbiAgVGVsZXBvcnQoXG4gICAgdi1pZj1cImlzTW91bnRlZCAmJiBwYW5lbEVudHJpZXMubGVuZ3RoID4gMFwiXG4gICAgdG89XCIuZGl0by1zaWRlYmFyX190ZWxlcG9ydFwiXG4gIClcbiAgICBEaXRvUGFuZWxzKFxuICAgICAgOnBhbmVscz1cInBhbmVsRW50cmllc1wiXG4gICAgICA6ZGF0YT1cImRhdGFcIlxuICAgICAgOm1ldGE9XCJtZXRhXCJcbiAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICApXG4gIERpdG9MYWJlbChcbiAgICB2LWlmPVwiaGFzTGFiZWxcIlxuICAgIDpjbGFzcz1cImxheW91dENsYXNzZXNcIlxuICAgIDpsYWJlbD1cImxhYmVsXCJcbiAgICA6ZGF0YVBhdGg9XCJsYWJlbERhdGFQYXRoXCJcbiAgICA6aW5mbz1cImluZm9cIlxuICApXG4gIGNvbXBvbmVudC5kaXRvLWNvbXBvbmVudChcbiAgICA6aXM9XCJ0eXBlQ29tcG9uZW50XCJcbiAgICByZWY9XCJjb21wb25lbnRcIlxuICAgIDpjbGFzcz1cImNvbXBvbmVudENsYXNzZXNcIlxuICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICA6ZGF0YT1cImRhdGFcIlxuICAgIDptZXRhPVwibWV0YVwiXG4gICAgOnN0b3JlPVwic3RvcmVcIlxuICAgIDp3aWR0aD1cIndpZHRoXCJcbiAgICA6bGFiZWw9XCJsYWJlbFwiXG4gICAgOnNpbmdsZT1cInNpbmdsZVwiXG4gICAgOm5lc3RlZD1cIm5lc3RlZFwiXG4gICAgOmRpc2FibGVkPVwiY29tcG9uZW50RGlzYWJsZWRcIlxuICAgIDphY2N1bXVsYXRlZEJhc2lzPVwiY29tYmluZWRCYXNpc1wiXG4gICAgQGVycm9ycz1cIm9uRXJyb3JzXCJcbiAgKVxuICBEaXRvRXJyb3JzKDplcnJvcnM9XCJlcnJvcnNcIilcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgeyBpc1N0cmluZywgaXNOdW1iZXIgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCBEaXRvQ29udGV4dCBmcm9tICcuLi9EaXRvQ29udGV4dC5qcydcbmltcG9ydCB7IGdldFNjaGVtYUFjY2Vzc29yIH0gZnJvbSAnLi4vdXRpbHMvYWNjZXNzb3IuanMnXG5pbXBvcnQge1xuICBnZXRBbGxQYW5lbEVudHJpZXMsXG4gIGdldFR5cGVDb21wb25lbnQsXG4gIGhhc0xhYmVsLFxuICBvbWl0U3BhY2luZ1xufSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG5pbXBvcnQgeyBwYXJzZUZyYWN0aW9uIH0gZnJvbSAnLi4vdXRpbHMvbWF0aC5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdEaXRvQ29udGFpbmVyJywge1xuICBwcm9wczoge1xuICAgIHNjaGVtYTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgZGF0YVBhdGg6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiAnJyB9LFxuICAgIGRhdGE6IHsgdHlwZTogW09iamVjdCwgQXJyYXldLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIG1ldGE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHN0b3JlOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBzaW5nbGU6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBuZXN0ZWQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogdHJ1ZSB9LFxuICAgIGRpc2FibGVkOiB7IHR5cGU6IEJvb2xlYW4sIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgZ2VuZXJhdGVMYWJlbHM6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICB2ZXJ0aWNhbExhYmVsczogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGFjY3VtdWxhdGVkQmFzaXM6IHsgdHlwZTogTnVtYmVyLCBkZWZhdWx0OiBudWxsIH1cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBlcnJvcnM6IG51bGxcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBjb250ZXh0KCkge1xuICAgICAgcmV0dXJuIG5ldyBEaXRvQ29udGV4dCh0aGlzLCB7IG5lc3RlZDogdGhpcy5uZXN0ZWQgfSlcbiAgICB9LFxuXG4gICAgdHlwZUNvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiBnZXRUeXBlQ29tcG9uZW50KHRoaXMuc2NoZW1hLnR5cGUpXG4gICAgfSxcblxuICAgIGhhc0xhYmVsKCkge1xuICAgICAgcmV0dXJuIGhhc0xhYmVsKHRoaXMuc2NoZW1hLCB0aGlzLmdlbmVyYXRlTGFiZWxzKVxuICAgIH0sXG5cbiAgICBsYWJlbCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmhhc0xhYmVsID8gdGhpcy5nZXRMYWJlbCh0aGlzLnNjaGVtYSkgOiBudWxsXG4gICAgfSxcblxuICAgIGxhYmVsRGF0YVBhdGgoKSB7XG4gICAgICAvLyBVbm5lc3RlZCB0eXBlcyBkb24ndCBoYXZlIGEgZGF0YVBhdGggZm9yIHRoZW1zZWx2ZXMsIGRvbid0IHVzZSBpdDpcbiAgICAgIHJldHVybiB0aGlzLm5lc3RlZCA/IHRoaXMuZGF0YVBhdGggOiBudWxsXG4gICAgfSxcblxuICAgIGluZm86IGdldFNjaGVtYUFjY2Vzc29yKCdpbmZvJywge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgZGVmYXVsdDogbnVsbFxuICAgIH0pLFxuXG4gICAgd2lkdGg6IGdldFNjaGVtYUFjY2Vzc29yKCd3aWR0aCcsIHtcbiAgICAgIHR5cGU6IFtTdHJpbmcsIE51bWJlcl0sXG4gICAgICBkZWZhdWx0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy50eXBlQ29tcG9uZW50Py5kZWZhdWx0V2lkdGhcbiAgICAgIH0sXG4gICAgICBnZXQod2lkdGgpIHtcbiAgICAgICAgLy8gVXNlIDEwMCUgPT0gMS4wIGFzIGRlZmF1bHQgd2lkdGggd2hlbiBub3RoaW5nIGlzIHNldDpcbiAgICAgICAgcmV0dXJuIHdpZHRoID09PSB1bmRlZmluZWRcbiAgICAgICAgICA/IDEuMFxuICAgICAgICAgIDogaXNTdHJpbmcod2lkdGgpXG4gICAgICAgICAgICA/IHdpZHRoLm1hdGNoKC9eXFxzKls8Pl0/XFxzKiguKikkLylbMV0gLy8gUmVtb3ZlIHdpZHRoIG9wZXJhdG9yXG4gICAgICAgICAgICA6IHdpZHRoXG4gICAgICB9XG4gICAgfSksXG5cbiAgICB3aWR0aE9wZXJhdG9yOiBnZXRTY2hlbWFBY2Nlc3Nvcignd2lkdGgnLCB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBnZXQod2lkdGgpIHtcbiAgICAgICAgcmV0dXJuIGlzU3RyaW5nKHdpZHRoKVxuICAgICAgICAgID8gd2lkdGgubWF0Y2goL15cXHMqKFs8Pl0/KS8pWzFdIHx8IG51bGxcbiAgICAgICAgICA6IG51bGxcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIGNvbXBvbmVudFZpc2libGU6IGdldFNjaGVtYUFjY2Vzc29yKCd2aXNpYmxlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnR5cGVDb21wb25lbnQ/LmRlZmF1bHRWaXNpYmxlXG4gICAgICB9XG4gICAgfSksXG5cbiAgICBjb21wb25lbnREaXNhYmxlZDogZ2V0U2NoZW1hQWNjZXNzb3IoJ2Rpc2FibGVkJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlLFxuICAgICAgZ2V0KGRpc2FibGVkKSB7XG4gICAgICAgIHJldHVybiBkaXNhYmxlZCB8fCB0aGlzLmRpc2FibGVkXG4gICAgICB9XG4gICAgfSksXG5cbiAgICBmbGV4R3JvdygpIHtcbiAgICAgIC8vIEludGVycHJldCAnPjUwJScgYXMgJzUwJSwgZmxleC1ncm93OiAxYFxuICAgICAgcmV0dXJuIChcbiAgICAgICAgdGhpcy53aWR0aE9wZXJhdG9yID09PSAnPicgfHxcbiAgICAgICAgdGhpcy53aWR0aCA9PT0gJ2ZpbGwnXG4gICAgICApXG4gICAgfSxcblxuICAgIGZsZXhTaHJpbmsoKSB7XG4gICAgICAvLyBJbnRlcnByZXQgJzw1MCUnIGFzICc1MCUsIGZsZXgtc2hyaW5rOiAxYFxuICAgICAgcmV0dXJuIHRoaXMud2lkdGhPcGVyYXRvciA9PT0gJzwnXG4gICAgfSxcblxuICAgIGZsZXhCYXNpcygpIHtcbiAgICAgIGNvbnN0IHdpZHRoID0gdGhpcy53aWR0aFxuICAgICAgLy8gJ2F1dG8nID0gbm8gZml0dGluZzpcbiAgICAgIHJldHVybiBbbnVsbCwgJ2F1dG8nLCAnZmlsbCddLmluY2x1ZGVzKHdpZHRoKVxuICAgICAgICA/ICdhdXRvJ1xuICAgICAgICA6IC8lJC8udGVzdCh3aWR0aClcbiAgICAgICAgICA/IHBhcnNlRmxvYXQod2lkdGgpIC8gMTAwIC8vIHBlcmNlbnRhZ2UgLT4gZnJhY3Rpb25cbiAgICAgICAgICA6IC9bYS16XS8udGVzdCh3aWR0aClcbiAgICAgICAgICAgID8gd2lkdGggLy8gbmF0aXZlIHVuaXRzXG4gICAgICAgICAgICA6IHBhcnNlRnJhY3Rpb24od2lkdGgpIC8vIGZyYWN0aW9uXG4gICAgfSxcblxuICAgIGNvbWJpbmVkQmFzaXMoKSB7XG4gICAgICBjb25zdCB7IGFjY3VtdWxhdGVkQmFzaXMsIGZsZXhCYXNpcyB9ID0gdGhpc1xuICAgICAgcmV0dXJuIGlzTnVtYmVyKGFjY3VtdWxhdGVkQmFzaXMpICYmIGlzTnVtYmVyKGZsZXhCYXNpcylcbiAgICAgICAgPyBhY2N1bXVsYXRlZEJhc2lzICogZmxleEJhc2lzXG4gICAgICAgIDogbnVsbFxuICAgIH0sXG5cbiAgICBjb250YWluZXJDbGFzc2VzKCkge1xuICAgICAgY29uc3QgeyBjbGFzczogY2xhc3NlcyB9ID0gdGhpcy5zY2hlbWFcbiAgICAgIGNvbnN0IHByZWZpeCA9ICdkaXRvLWNvbnRhaW5lcidcbiAgICAgIHJldHVybiB7XG4gICAgICAgIFtgJHtwcmVmaXh9LS1zaW5nbGVgXTogdGhpcy5zaW5nbGUsXG4gICAgICAgICdkaXRvLWRpc2FibGVkJzogdGhpcy5jb21wb25lbnREaXNhYmxlZCxcbiAgICAgICAgJ2RpdG8taGFzLWVycm9ycyc6ICEhdGhpcy5lcnJvcnMsXG4gICAgICAgIFtgJHtwcmVmaXh9LS1sYWJlbC12ZXJ0aWNhbGBdOiB0aGlzLnZlcnRpY2FsTGFiZWxzLFxuICAgICAgICBbYCR7cHJlZml4fS0tb21pdC1zcGFjaW5nYF06IG9taXRTcGFjaW5nKHRoaXMuc2NoZW1hKSxcbiAgICAgICAgLi4uKGlzU3RyaW5nKGNsYXNzZXMpID8geyBbY2xhc3Nlc106IHRydWUgfSA6IGNsYXNzZXMpXG4gICAgICB9XG4gICAgfSxcblxuICAgIGNvbnRhaW5lclN0eWxlcygpIHtcbiAgICAgIGNvbnN0IHsgZmxleEJhc2lzLCBjb21iaW5lZEJhc2lzIH0gPSB0aGlzXG4gICAgICByZXR1cm4ge1xuICAgICAgICAnLS1ncm93JzogdGhpcy5mbGV4R3JvdyA/IDEgOiAwLFxuICAgICAgICAnLS1zaHJpbmsnOiB0aGlzLmZsZXhTaHJpbmsgPyAxIDogMCxcbiAgICAgICAgJy0tYmFzaXMnOiBpc051bWJlcihmbGV4QmFzaXMpID8gYCR7ZmxleEJhc2lzICogMTAwfSVgIDogZmxleEJhc2lzLFxuICAgICAgICAnLS1iYXNpcy1tb2JpbGUnOlxuICAgICAgICAgIGlzTnVtYmVyKGNvbWJpbmVkQmFzaXMpICYmIGNvbWJpbmVkQmFzaXMgPD0gMC4yNVxuICAgICAgICAgICAgPyBgJHtmbGV4QmFzaXMgKiAyMDB9JWBcbiAgICAgICAgICAgIDogbnVsbFxuICAgICAgfVxuICAgIH0sXG5cbiAgICBjb21wb25lbnRDbGFzc2VzKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgJ2RpdG8tc2luZ2xlJzogdGhpcy5zaW5nbGUsXG4gICAgICAgIC4uLnRoaXMubGF5b3V0Q2xhc3Nlc1xuICAgICAgfVxuICAgIH0sXG5cbiAgICBsYXlvdXRDbGFzc2VzKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgJ2RpdG8td2lkdGgtZmlsbCc6IHRoaXMud2lkdGggPT09ICdmaWxsJyB8fCB0aGlzLmZsZXhCYXNpcyAhPT0gJ2F1dG8nLFxuICAgICAgICAnZGl0by13aWR0aC1ncm93JzogdGhpcy5mbGV4R3JvdyxcbiAgICAgICAgJ2RpdG8td2lkdGgtc2hyaW5rJzogdGhpcy5mbGV4U2hyaW5rXG4gICAgICB9XG4gICAgfSxcblxuICAgIHBhbmVsRW50cmllcygpIHtcbiAgICAgIHJldHVybiBnZXRBbGxQYW5lbEVudHJpZXMoXG4gICAgICAgIHRoaXMuYXBpLFxuICAgICAgICB0aGlzLnNjaGVtYSxcbiAgICAgICAgdGhpcy5kYXRhUGF0aCxcbiAgICAgICAgdGhpcy4kcmVmcy5jb21wb25lbnQsXG4gICAgICAgIHRoaXMudGFiQ29tcG9uZW50XG4gICAgICApXG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBvbkVycm9ycyhlcnJvcnMpIHtcbiAgICAgIHRoaXMuZXJyb3JzID0gZXJyb3JzXG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLmRpdG8tY29udGFpbmVyIHtcbiAgLS1ncm93OiAwO1xuICAtLXNocmluazogMTtcbiAgLS1iYXNpczogYXV0bztcblxuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXg6IHZhcigtLWdyb3cpIHZhcigtLXNocmluaykgdmFyKC0tYmFzaXMpO1xuICBmbGV4LWZsb3c6IGNvbHVtbjtcbiAgYWxpZ24taXRlbXM6IGZsZXgtc3RhcnQ7XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIC8vIFRvIHByZXZlbnQgbGlzdCB0YWJsZXMgZnJvbSBibG93aW5nIG91dCBvZiB0aGVpciBmbGV4IGJveCBjb250YWluZXJzLlxuICBtYXgtd2lkdGg6IDEwMCU7XG4gIC8vIENhbm5vdCB1c2UgbWFyZ2luIGhlcmUgYXMgaXQgbmVlZHMgdG8gYmUgcGFydCBvZiBib3gtc2l6aW5nIGZvclxuICAvLyBwZXJjZW50YWdlcyBpbiBmbGV4LWJhc2lzIHRvIHdvcmsuXG4gIHBhZGRpbmc6ICRmb3JtLXNwYWNpbmctaGFsZjtcblxuICAuZGl0by1wYW5lID4gJiB7XG4gICAgLmRpdG8tcGFnZS0td2lkdGgtODAgJiB7XG4gICAgICBmbGV4LWdyb3c6IDE7XG4gICAgICBmbGV4LWJhc2lzOiB2YXIoLS1iYXNpcy1tb2JpbGUsIHZhcigtLWJhc2lzKSk7XG4gICAgICAvLyBERUJVRzogYmFja2dyb3VuZDogeWVsbG93O1xuICAgIH1cblxuICAgIC5kaXRvLXBhZ2UtLXdpZHRoLTYwICYge1xuICAgICAgZmxleC1iYXNpczogY2FsYygyICogdmFyKC0tYmFzaXMpKTtcbiAgICAgIC8vIERFQlVHOiBiYWNrZ3JvdW5kOiBvcmFuZ2U7XG4gICAgfVxuXG4gICAgLmRpdG8tc2lkZWJhci0td2lkdGgtOTkgJiB7XG4gICAgICBmbGV4LWdyb3c6IDE7XG4gICAgICAvLyBERUJVRzogYmFja2dyb3VuZDogeWVsbG93O1xuICAgIH1cblxuICAgIC5kaXRvLXNpZGViYXItLXdpZHRoLTYwICYge1xuICAgICAgZmxleC1iYXNpczogY2FsYygyICogdmFyKC0tYmFzaXMpKTtcbiAgICAgIC8vIERFQlVHOiBiYWNrZ3JvdW5kOiBvcmFuZ2U7XG4gICAgfVxuICB9XG5cbiAgJjplbXB0eSB7XG4gICAgcGFkZGluZzogMDtcbiAgfVxuXG4gICYtLXNpbmdsZSB7XG4gICAgaGVpZ2h0OiAxMDAlOyAvLyBTbyB0aGF0IGxpc3QgYnV0dG9ucyBjYW4gYmUgc3RpY2t5IGF0IHRoZSBib3R0b207XG4gICAgLy8gSnVzdCBsaWtlIG9uIERpdG9QYW5lLCBjbGVhciBzZXR0aW5ncyBmcm9tIGFib3ZlLlxuICAgIHBhZGRpbmc6IDA7XG4gIH1cblxuICAmLS1sYWJlbC12ZXJ0aWNhbCB7XG4gICAgLy8gRm9yIHBsYWluIGNvbXBvbmVudHMgd2l0aG91dCBsYWJlbHMgaW4gcm93cyB3aXRoIG90aGVyIGNvbXBvbmVudHMgdGhhdFxuICAgIC8vIGhhdmUgbGFiZWxzLCBhZGQgc29tZSBzcGFjaW5nIHRvIHRoZSB0b3AgdG8gYWxpZ24gd2l0aCB0aGUgb3RoZXJcbiAgICAvLyBjb21wb25lbnRzIChlLmcuICBidXR0b25zKTpcbiAgICA+IC5kaXRvLWNvbXBvbmVudDpmaXJzdC1jaGlsZDpub3QoLmRpdG8tc2VjdGlvbiwgLmRpdG8tbGlzdCwgLmRpdG8tb2JqZWN0KSB7XG4gICAgICBtYXJnaW4tdG9wOiAkaW5wdXQtaGVpZ2h0O1xuICAgIH1cbiAgfVxuXG4gICYtLW9taXQtc3BhY2luZyB7XG4gICAgcGFkZGluZzogMDtcblxuICAgID4gLmRpdG8tbGFiZWwge1xuICAgICAgbWFyZ2luOiAkZm9ybS1zcGFjaW5nLWhhbGYgJGZvcm0tc3BhY2luZy1oYWxmIDA7XG4gICAgfVxuICB9XG59XG5cbi8vIE5PVEU6IFRoaXMgaXMgbm90IG5lc3RlZCBpbnNpZGUgYC5kaXRvLWNvbnRhaW5lcmAgc28gdGhhdCBvdGhlclxuLy8gdHlwZSBjb21wb25lbnRzIGNhbiBvdmVycmlkZSBgLmRpdG8td2lkdGgtZmlsbGAgY2xhc3MgKGZpbHRlciBwcmVjZWRlbmNlKS5cbi5kaXRvLWNvbXBvbmVudCB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcblxuICAmLmRpdG8td2lkdGgtZmlsbCB7XG4gICAgd2lkdGg6IDEwMCU7XG5cbiAgICAmLmRpdG8tY2hlY2tib3gsXG4gICAgJi5kaXRvLXJhZGlvLWJ1dHRvbiB7XG4gICAgICAvLyBXZWJLaXQgZG9lc24ndCBsaWtlIGNoYW5nZWQgd2lkdGggb24gY2hlY2tib3hlcyBhbmQgcmFkaW9zLCBvdmVycmlkZTpcbiAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICAgIHdpZHRoOiBhdXRvO1xuICAgIH1cbiAgfVxufVxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4uZGl0by10YWJzXG4gIHRlbXBsYXRlKFxuICAgIHYtZm9yPVwiKHRhYlNjaGVtYSwga2V5KSBpbiB0YWJzXCJcbiAgKVxuICAgIGEuZGl0by1saW5rKFxuICAgICAgdi1pZj1cInNob3VsZFJlbmRlclNjaGVtYSh0YWJTY2hlbWEpXCJcbiAgICAgIDprZXk9XCJrZXlcIlxuICAgICAgOmNsYXNzPVwieyAnZGl0by1hY3RpdmUnOiBtb2RlbFZhbHVlID09PSBrZXkgfVwiXG4gICAgICBAY2xpY2s9XCIkZW1pdCgndXBkYXRlOm1vZGVsVmFsdWUnLCBrZXkpXCJcbiAgICApIHt7IGdldExhYmVsKHRhYlNjaGVtYSwga2V5KSB9fVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnRGl0b1RhYnMnLCB7XG4gIGVtaXRzOiBbJ3VwZGF0ZTptb2RlbFZhbHVlJ10sXG4gIHByb3BzOiB7XG4gICAgdGFiczogeyB0eXBlOiBPYmplY3QsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBtb2RlbFZhbHVlOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogbnVsbCB9XG4gIH1cbn0pXG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AdXNlICdzYXNzOmNvbG9yJztcbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5cbi5kaXRvLXRhYnMge1xuICBkaXNwbGF5OiBmbGV4O1xuXG4gIC5kaXRvLWxpbmsge1xuICAgIEBpbmNsdWRlIHVzZXItc2VsZWN0KG5vbmUpO1xuXG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcblxuICAgICY6aG92ZXIge1xuICAgICAgYmFja2dyb3VuZDogJGNvbG9yLXdoaXRlO1xuICAgIH1cblxuICAgIC8vIFdoZW4gaW4gbWFpbiBoZWFkZXI6XG4gICAgLmRpdG8taGVhZGVyICYge1xuICAgICAgYmFja2dyb3VuZDogJGNvbG9yLWxpZ2h0O1xuICAgICAgcGFkZGluZzogJHRhYi1wYWRkaW5nLXZlciAkdGFiLXBhZGRpbmctaG9yO1xuICAgICAgbWFyZ2luLWxlZnQ6ICR0YWItbWFyZ2luO1xuICAgICAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogJHRhYi1yYWRpdXM7XG4gICAgICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogJHRhYi1yYWRpdXM7XG5cbiAgICAgICY6YWN0aXZlIHtcbiAgICAgICAgYmFja2dyb3VuZDogJGNvbG9yLWxpZ2h0ZXN0O1xuICAgICAgfVxuXG4gICAgICAmLmRpdG8tYWN0aXZlIHtcbiAgICAgICAgYmFja2dyb3VuZDogJGNvbG9yLWxpZ2h0ZXN0O1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFdoZW4gaW5zaWRlIGEgaW5saW5lIHNjaGVtYTpcbiAgICAuZGl0by1zY2hlbWEtaW5saW5lZCAmLFxuICAgIC5kaXRvLWxhYmVsICYge1xuICAgICAgYmFja2dyb3VuZDogJGNvbG9yLWxpZ2h0ZXI7XG4gICAgICBib3JkZXI6ICRib3JkZXItc3R5bGU7XG4gICAgICBwYWRkaW5nOiAkaW5wdXQtcGFkZGluZztcbiAgICAgIG1hcmdpbi1sZWZ0OiAtJGJvcmRlci13aWR0aDtcbiAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG5cbiAgICAgICY6Zmlyc3QtY2hpbGQge1xuICAgICAgICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAkdGFiLXJhZGl1cztcbiAgICAgICAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogJHRhYi1yYWRpdXM7XG4gICAgICB9XG5cbiAgICAgICY6bGFzdC1jaGlsZCB7XG4gICAgICAgIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAkdGFiLXJhZGl1cztcbiAgICAgICAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6ICR0YWItcmFkaXVzO1xuICAgICAgfVxuXG4gICAgICAmOmFjdGl2ZSB7XG4gICAgICAgIGJhY2tncm91bmQ6ICRjb2xvci1saWdodGVyO1xuICAgICAgfVxuXG4gICAgICAmLmRpdG8tYWN0aXZlIHtcbiAgICAgICAgYmFja2dyb3VuZDogJGNvbG9yLWFjdGl2ZTtcbiAgICAgICAgYm9yZGVyLWNvbG9yOiBjb2xvci5hZGp1c3QoJGNvbG9yLWFjdGl2ZSwgJGxpZ2h0bmVzczogLTEwJSk7XG4gICAgICAgIGNvbG9yOiAkY29sb3Itd2hpdGU7XG4gICAgICAgIHotaW5kZXg6IDE7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLmRpdG8tc2NoZW1hICYge1xuICAgIC8vIFB1c2ggY2xpcGJvYXJkIHRvIHRoZSByaWdodCBpbiB0aGUgZmxleCBsYXlvdXQsIHNlZTpcbiAgICAvLyBodHRwczovL2NvZGVwZW4uaW8vdGhvbGV4L3Blbi9odmVCeC9cbiAgICBtYXJnaW4tbGVmdDogYXV0bztcblxuICAgICY6bGFzdC1jaGlsZCB7XG4gICAgICBtYXJnaW4tcmlnaHQ6IGF1dG87XG4gICAgfVxuICB9XG59XG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbi8vLSBPbmx5IHNob3cgcGFuZWxzIGluIHRhYnMgd2hlbiB0aGUgdGFicyBhcmUgYWxzbyB2aXNpYmxlLlxuY29tcG9uZW50LmRpdG8tcGFuZWwoXG4gIHYtaWY9XCJzaG91bGRSZW5kZXJTY2hlbWEocGFuZWxTY2hlbWEpXCJcbiAgdi1zaG93PVwidmlzaWJsZSAmJiAoIXBhbmVsVGFiQ29tcG9uZW50IHx8IHBhbmVsVGFiQ29tcG9uZW50LnZpc2libGUpXCJcbiAgOmlzPVwicGFuZWxUYWdcIlxuICBAc3VibWl0LnByZXZlbnRcbilcbiAgRGl0b1NjaGVtYS5kaXRvLXBhbmVsX19zY2hlbWEoXG4gICAgOnNjaGVtYT1cInBhbmVsU2NoZW1hXCJcbiAgICA6ZGF0YVBhdGg9XCJwYW5lbERhdGFQYXRoXCJcbiAgICA6ZGF0YT1cInBhbmVsRGF0YVwiXG4gICAgOm1ldGE9XCJtZXRhXCJcbiAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgcGFkZGluZz1cIm5lc3RlZFwiXG4gICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgIDpoYXNPd25EYXRhPVwiaGFzT3duRGF0YVwiXG4gICAgZ2VuZXJhdGVMYWJlbHNcbiAgKVxuICAgIHRlbXBsYXRlKCNiZWZvcmUpXG4gICAgICBoMi5kaXRvLXBhbmVsX19oZWFkZXIoOmNsYXNzPVwieyAnZGl0by1wYW5lbF9faGVhZGVyLS1zdGlja3knOiBzdGlja3kgfVwiKVxuICAgICAgICBzcGFuIHt7IGdldExhYmVsKHNjaGVtYSkgfX1cbiAgICAgICAgRGl0b0J1dHRvbnMuZGl0by1idXR0b25zLXNtYWxsKFxuICAgICAgICAgIDpidXR0b25zPVwicGFuZWxCdXR0b25TY2hlbWFzXCJcbiAgICAgICAgICA6ZGF0YVBhdGg9XCJwYW5lbERhdGFQYXRoXCJcbiAgICAgICAgICA6ZGF0YT1cInBhbmVsRGF0YVwiXG4gICAgICAgICAgOm1ldGE9XCJtZXRhXCJcbiAgICAgICAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgICAgICApXG4gICAgdGVtcGxhdGUoI2J1dHRvbnMpXG4gICAgICBEaXRvQnV0dG9ucyhcbiAgICAgICAgOmJ1dHRvbnM9XCJidXR0b25TY2hlbWFzXCJcbiAgICAgICAgOmRhdGFQYXRoPVwicGFuZWxEYXRhUGF0aFwiXG4gICAgICAgIDpkYXRhPVwicGFuZWxEYXRhXCJcbiAgICAgICAgOm1ldGE9XCJtZXRhXCJcbiAgICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgICApXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IHsgaXNGdW5jdGlvbiB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IFZhbGlkYXRvck1peGluIGZyb20gJy4uL21peGlucy9WYWxpZGF0b3JNaXhpbi5qcydcbmltcG9ydCB7IGdldEJ1dHRvblNjaGVtYXMgfSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG5pbXBvcnQgeyBnZXRTY2hlbWFBY2Nlc3NvciB9IGZyb20gJy4uL3V0aWxzL2FjY2Vzc29yLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ0RpdG9QYW5lbCcsIHtcbiAgbWl4aW5zOiBbVmFsaWRhdG9yTWl4aW5dLFxuXG4gIHByb3ZpZGUoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICRwYW5lbENvbXBvbmVudDogKCkgPT4gdGhpcyxcbiAgICAgICR0YWJDb21wb25lbnQ6ICgpID0+IHRoaXMucGFuZWxUYWJDb21wb25lbnRcbiAgICB9XG4gIH0sXG5cbiAgcHJvcHM6IHtcbiAgICBzY2hlbWE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGRhdGFQYXRoOiB7IHR5cGU6IFN0cmluZywgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBkYXRhOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBtZXRhOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBzdG9yZTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgZGlzYWJsZWQ6IHsgdHlwZTogQm9vbGVhbiwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBwYW5lbFRhYkNvbXBvbmVudDogeyB0eXBlOiBPYmplY3QsIGRlZmF1bHQ6IG51bGwgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG93bkRhdGE6IG51bGxcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBwYW5lbENvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzXG4gICAgfSxcblxuICAgIHRhYkNvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzLnBhbmVsVGFiQ29tcG9uZW50XG4gICAgfSxcblxuICAgIGJ1dHRvblNjaGVtYXMoKSB7XG4gICAgICByZXR1cm4gZ2V0QnV0dG9uU2NoZW1hcyh0aGlzLnNjaGVtYS5idXR0b25zKVxuICAgIH0sXG5cbiAgICBwYW5lbEJ1dHRvblNjaGVtYXMoKSB7XG4gICAgICByZXR1cm4gZ2V0QnV0dG9uU2NoZW1hcyh0aGlzLnNjaGVtYS5wYW5lbEJ1dHRvbnMpXG4gICAgfSxcblxuICAgIGhhc093bkRhdGEoKSB7XG4gICAgICByZXR1cm4gISF0aGlzLm93bkRhdGFcbiAgICB9LFxuXG4gICAgcGFuZWxEYXRhKCkge1xuICAgICAgcmV0dXJuIHRoaXMub3duRGF0YSB8fCB0aGlzLmRhdGFcbiAgICB9LFxuXG4gICAgcGFuZWxTY2hlbWEoKSB7XG4gICAgICBpZiAodGhpcy5oYXNPd25EYXRhKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNjaGVtYVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gUmVtb3ZlIGBkYXRhYCBmcm9tIHRoZSBzY2hlbWEsIHNvIHRoYXQgRGl0b1NjaGVtYSBpc24ndCB1c2luZyBpdCB0b1xuICAgICAgICAvLyBwcm9kdWNlIGl0cyBvd24gZGF0YS4gU2VlICRmaWx0ZXJzIHBhbmVsIGZvciBtb3JlIGRldGFpbHMgb24gZGF0YS5cbiAgICAgICAgY29uc3QgeyBkYXRhLCAuLi5zY2hlbWEgfSA9IHRoaXMuc2NoZW1hXG4gICAgICAgIHJldHVybiBzY2hlbWFcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgcGFuZWxUYWcoKSB7XG4gICAgICAvLyBQYW5lbHMgdGhhdCBwcm92aWRlIHRoZWlyIG93biBkYXRhIG5lZWQgdGhlaXIgb3duIGZvcm0uXG4gICAgICByZXR1cm4gdGhpcy5oYXNPd25EYXRhID8gJ2Zvcm0nIDogJ2RpdidcbiAgICB9LFxuXG4gICAgcGFuZWxEYXRhUGF0aCgpIHtcbiAgICAgIC8vIElmIHRoZSBwYW5lbCBwcm92aWRlcyBpdHMgb3duIGRhdGEsIHRoZW4gaXQgbmVlZHMgdG8gcHJlZml4IGFsbFxuICAgICAgLy8gY29tcG9uZW50cyB3aXRoIGl0cyBkYXRhLXBhdGgsIGJ1dCBpZiBpdCBzaGFyZXMgZGF0YSB3aXRoIHRoZSBzY2hlbWFcbiAgICAgIC8vIGNvbXBvbmVudCwgdGhlbiBpdCBzaG91bGQgc2hhcmUgdGhlIGRhdGEtcGF0aCBuYW1lIHNwYWNlIHRvby5cbiAgICAgIHJldHVybiB0aGlzLmhhc093bkRhdGEgPyB0aGlzLmRhdGFQYXRoIDogdGhpcy5zY2hlbWFDb21wb25lbnQuZGF0YVBhdGhcbiAgICB9LFxuXG4gICAgdmlzaWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ3Zpc2libGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogdHJ1ZVxuICAgIH0pLFxuXG4gICAgc3RpY2t5OiBnZXRTY2hlbWFBY2Nlc3Nvcignc3RpY2t5Jywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfSlcbiAgfSxcblxuICBjcmVhdGVkKCkge1xuICAgIHRoaXMuX3JlZ2lzdGVyKHRydWUpXG4gICAgLy8gTk9URTogVGhpcyBpcyBub3QgdGhlIHNhbWUgYXMgYHNjaGVtYS5kYXRhYCBoYW5kbGluZyBpbiBEaXRvU2NoZW1hLFxuICAgIC8vIHdoZXJlIHRoZSBkYXRhIGlzIGFkZGVkIHRvIHRoZSBhY3R1YWwgY29tcG9uZW50LlxuICAgIGNvbnN0IHsgZGF0YSB9ID0gdGhpcy5zY2hlbWFcbiAgICBpZiAoZGF0YSkge1xuICAgICAgdGhpcy5vd25EYXRhID0gaXNGdW5jdGlvbihkYXRhKVxuICAgICAgICA/IGRhdGEodGhpcy5jb250ZXh0KVxuICAgICAgICA6IGRhdGFcbiAgICB9XG4gIH0sXG5cbiAgdW5tb3VudGVkKCkge1xuICAgIHRoaXMuX3JlZ2lzdGVyKGZhbHNlKVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBfcmVnaXN0ZXIoYWRkKSB7XG4gICAgICAvLyBSZWdpc3RlciB0aGUgcGFuZWxzIHNvIHRoYXQgb3RoZXIgY29tcG9uZW50cyBjYW4gZmluZCB0aGVtIGJ5IHRoZWlyXG4gICAgICAvLyBkYXRhLXBhdGgsIGUuZy4gaW4gVHlwZUxpc3Qub25GaWx0ZXJFcnJvcnMoKVxuICAgICAgdGhpcy5zY2hlbWFDb21wb25lbnQuX3JlZ2lzdGVyUGFuZWwodGhpcywgYWRkKVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5cbi5kaXRvLXBhbmVsIHtcbiAgJjpub3QoOmxhc3QtY2hpbGQpIHtcbiAgICBtYXJnaW4tYm90dG9tOiAkY29udGVudC1wYWRkaW5nO1xuICB9XG5cbiAgJl9faGVhZGVyIHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICBwYWRkaW5nOiAkaW5wdXQtcGFkZGluZztcbiAgICBiYWNrZ3JvdW5kOiAkYnV0dG9uLWNvbG9yO1xuICAgIGJvcmRlcjogJGJvcmRlci1zdHlsZTtcbiAgICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAkYm9yZGVyLXJhZGl1cztcbiAgICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogJGJvcmRlci1yYWRpdXM7XG5cbiAgICAmLS1zdGlja3kge1xuICAgICAgJG1hcmdpbjogJGlucHV0LWhlaWdodC1mYWN0b3IgKiAkbGluZS1oZWlnaHQgKiAkZm9udC1zaXplLXNtYWxsICtcbiAgICAgICAgJGZvcm0tc3BhY2luZztcblxuICAgICAgcG9zaXRpb246IHN0aWNreTtcbiAgICAgIHRvcDogJGNvbnRlbnQtcGFkZGluZztcbiAgICAgIG1hcmdpbi1ib3R0b206ICRtYXJnaW47XG4gICAgICB6LWluZGV4OiAxO1xuXG4gICAgICAmICsgKiB7XG4gICAgICAgIG1hcmdpbi10b3A6IC0kbWFyZ2luO1xuICAgICAgfVxuXG4gICAgICAmOjpiZWZvcmUge1xuICAgICAgICBjb250ZW50OiAnJztcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgYmFja2dyb3VuZDogJGNvbnRlbnQtY29sb3ItYmFja2dyb3VuZDtcbiAgICAgICAgbGVmdDogMDtcbiAgICAgICAgcmlnaHQ6IDA7XG4gICAgICAgIGhlaWdodDogJGNvbnRlbnQtcGFkZGluZztcbiAgICAgICAgdG9wOiAtJGNvbnRlbnQtcGFkZGluZztcbiAgICAgICAgbWFyZ2luOiAtJGJvcmRlci13aWR0aDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAuZGl0by1idXR0b25zIHtcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgIHJpZ2h0OiAkaW5wdXQtcGFkZGluZy12ZXI7XG4gICAgICB0b3A6IDUwJTtcbiAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNTAlKTtcbiAgICB9XG4gIH1cblxuICAmX19zY2hlbWEge1xuICAgIGZvbnQtc2l6ZTogJGZvbnQtc2l6ZS1zbWFsbDtcbiAgICBiYWNrZ3JvdW5kOiAkY29udGVudC1jb2xvci1iYWNrZ3JvdW5kO1xuICAgIGJvcmRlcjogJGJvcmRlci1zdHlsZTtcbiAgICBib3JkZXItdG9wOiAwO1xuICAgIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6ICRib3JkZXItcmFkaXVzO1xuICAgIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAkYm9yZGVyLXJhZGl1cztcblxuICAgID4gLmRpdG8tc2NoZW1hLWNvbnRlbnQge1xuICAgICAgLmRpdG8tb2JqZWN0IHtcbiAgICAgICAgYm9yZGVyOiBub25lO1xuICAgICAgICBwYWRkaW5nOiAwO1xuICAgICAgfVxuXG4gICAgICA+IC5kaXRvLWJ1dHRvbnMge1xuICAgICAgICAtLWJ1dHRvbi1tYXJnaW46ICN7JGZvcm0tc3BhY2luZ307XG5cbiAgICAgICAgcGFkZGluZzogJGZvcm0tc3BhY2luZztcblxuICAgICAgICAuZGl0by1jb250YWluZXIge1xuICAgICAgICAgIHBhZGRpbmc6IDA7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAuZGl0by1sYWJlbCB7XG4gICAgICBsYWJlbCB7XG4gICAgICAgIGZvbnQtd2VpZ2h0OiBub3JtYWw7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbi5kaXRvLXBhbmVscyhcbiAgdi1pZj1cInBhbmVscy5sZW5ndGggPiAwXCJcbilcbiAgdGVtcGxhdGUoXG4gICAgdi1mb3I9XCJ7IHNjaGVtYSwgZGF0YVBhdGgsIHRhYkNvbXBvbmVudCB9IGluIHBhbmVsc1wiXG4gIClcbiAgICBEaXRvUGFuZWwoXG4gICAgICB2LWlmPVwic2hvdWxkUmVuZGVyU2NoZW1hKHNjaGVtYSlcIlxuICAgICAgOmtleT1cImdldFBhbmVsS2V5KGRhdGFQYXRoLCB0YWJDb21wb25lbnQpXCJcbiAgICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgICAgOmRhdGE9XCJkYXRhXCJcbiAgICAgIDptZXRhPVwibWV0YVwiXG4gICAgICA6c3RvcmU9XCJnZXRDaGlsZFN0b3JlKHNjaGVtYS5uYW1lKVwiXG4gICAgICA6ZGlzYWJsZWQ9XCJzY2hlbWEuZGlzYWJsZWQgPz8gZGlzYWJsZWRcIlxuICAgICAgOnBhbmVsVGFiQ29tcG9uZW50PVwidGFiQ29tcG9uZW50XCJcbiAgICApXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdEaXRvUGFuZWxzJywge1xuICBwcm9wczoge1xuICAgIHBhbmVsczogeyB0eXBlOiBBcnJheSwgZGVmYXVsdDogbnVsbCB9LFxuICAgIGRhdGE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIG1ldGE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHN0b3JlOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBkaXNhYmxlZDogeyB0eXBlOiBCb29sZWFuLCByZXF1aXJlZDogdHJ1ZSB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGdldFBhbmVsS2V5KGRhdGFQYXRoLCB0YWJDb21wb25lbnQpIHtcbiAgICAgIC8vIEFsbG93IHNlcGFyYXRlIHRhYnMgdG8gdXNlIHBhbmVscyBvZiB0aGUgc2FtZSBuYW1lLCBieVxuICAgICAgLy8gcHJlZml4aW5nIHRoZWlyIGtleSB3aXRoIHRoZSB0YWIgbmFtZS5cbiAgICAgIHJldHVybiB0YWJDb21wb25lbnQgPyBgJHt0YWJDb21wb25lbnQudGFifV8ke2RhdGFQYXRofWAgOiBkYXRhUGF0aFxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5cbi5kaXRvLXBhbmVscyB7XG4gIG1hcmdpbjogJGNvbnRlbnQtcGFkZGluZztcbiAgbWFyZ2luLWxlZnQ6ICRmb3JtLXNwYWNpbmc7XG59XG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbi5kaXRvLWJ1dHRvbnMoXG4gIHYtaWY9XCJidXR0b25TY2hlbWFzIHx8IGhhc1Nsb3RDb250ZW50KCRzbG90cy5kZWZhdWx0KVwiXG4pXG4gIHRlbXBsYXRlKFxuICAgIHYtZm9yPVwiKGJ1dHRvblNjaGVtYSwgYnV0dG9uRGF0YVBhdGgpIGluIGJ1dHRvblNjaGVtYXNcIlxuICApXG4gICAgRGl0b0NvbnRhaW5lcihcbiAgICAgIHYtaWY9XCJzaG91bGRSZW5kZXJTY2hlbWEoYnV0dG9uU2NoZW1hKVwiXG4gICAgICA6a2V5PVwiYnV0dG9uRGF0YVBhdGhcIlxuICAgICAgOnNjaGVtYT1cImJ1dHRvblNjaGVtYVwiXG4gICAgICA6ZGF0YVBhdGg9XCJidXR0b25EYXRhUGF0aFwiXG4gICAgICA6ZGF0YT1cImRhdGFcIlxuICAgICAgOm1ldGE9XCJtZXRhXCJcbiAgICAgIDpzdG9yZT1cImdldENoaWxkU3RvcmUoYnV0dG9uU2NoZW1hLm5hbWUpXCJcbiAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICApXG4gIHRlbXBsYXRlKFxuICAgIHYtZm9yPVwidm5vZGUgb2YgJHNsb3RzLmRlZmF1bHQ/LigpXCJcbiAgKVxuICAgIC8vLSBSZW5kZXIgZWFjaCBub2RlIGluIHRoZSBkZWZhdWx0IHNsb3QgdGhyb3VnaCBgZGl0by12bm9kZWAsXG4gICAgLy8tIHNvIGl0IGNhbiBiZSB3cmFwcGVkIGluIGEgYC5kaXRvLWNvbnRhaW5lcmAgY2xhc3MuXG4gICAgLmRpdG8tY29udGFpbmVyKFxuICAgICAgdi1pZj1cImhhc1ZOb2RlQ29udGVudCh2bm9kZSlcIlxuICAgIClcbiAgICAgIERpdG9Wbm9kZSg6dm5vZGU9XCJ2bm9kZVwiKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgeyBhcHBlbmREYXRhUGF0aCB9IGZyb20gJy4uL3V0aWxzL2RhdGEuanMnXG5pbXBvcnQgeyBoYXNTbG90Q29udGVudCwgaGFzVk5vZGVDb250ZW50IH0gZnJvbSAnQGRpdG9qcy91aS9zcmMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnRGl0b0J1dHRvbnMnLCB7XG4gIHByb3ZpZGU6IHtcbiAgICAkdGFiQ29tcG9uZW50OiAoKSA9PiBudWxsXG4gIH0sXG5cbiAgcHJvcHM6IHtcbiAgICBidXR0b25zOiB7IHR5cGU6IE9iamVjdCwgZGVmYXVsdDogbnVsbCB9LFxuICAgIGRhdGFQYXRoOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogJycgfSxcbiAgICBkYXRhOiB7IHR5cGU6IFtPYmplY3QsIEFycmF5XSwgZGVmYXVsdDogbnVsbCB9LFxuICAgIG1ldGE6IHsgdHlwZTogT2JqZWN0LCBkZWZhdWx0OiAoKSA9PiAoe30pIH0sXG4gICAgc3RvcmU6IHsgdHlwZTogT2JqZWN0LCBkZWZhdWx0OiAoKSA9PiAoe30pIH0sXG4gICAgZGlzYWJsZWQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgYnV0dG9uU2NoZW1hcygpIHtcbiAgICAgIC8vIENvbXB1dGUgYSBidXR0b25zIGxpc3Qgd2hpY2ggaGFzIHRoZSBkYXRhUGF0aCBiYWtlZCBpbnRvIGl0cyBrZXlzLlxuICAgICAgY29uc3QgeyBkYXRhUGF0aCwgYnV0dG9ucyB9ID0gdGhpc1xuICAgICAgcmV0dXJuIGJ1dHRvbnNcbiAgICAgICAgPyBPYmplY3QudmFsdWVzKGJ1dHRvbnMpLnJlZHVjZSgoc2NoZW1hcywgYnV0dG9uKSA9PiB7XG4gICAgICAgICAgICBzY2hlbWFzW2FwcGVuZERhdGFQYXRoKGRhdGFQYXRoLCBidXR0b24ubmFtZSldID0gYnV0dG9uXG4gICAgICAgICAgICByZXR1cm4gc2NoZW1hc1xuICAgICAgICAgIH0sIHt9KVxuICAgICAgICA6IG51bGxcbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGhhc1Nsb3RDb250ZW50LFxuICAgIGhhc1ZOb2RlQ29udGVudFxuICB9XG59KVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuLmRpdG8tYnV0dG9ucyB7XG4gID4gLmRpdG8tY29udGFpbmVyIHtcbiAgICBwYWRkaW5nOiAwO1xuICB9XG59XG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbi8vLSBTZXQgYEBjbGljay5zdG9wYCB0byBwcmV2ZW50IGNsaWNrIGV2ZW50cyBmcm9tIGJ1YmJsaW5nIHRvIGRpdG8tbGFiZWwuXG5EaXRvQnV0dG9ucy5kaXRvLWVkaXQtYnV0dG9ucy5kaXRvLWJ1dHRvbnMtcm91bmQoXG4gIDpidXR0b25zPVwiYnV0dG9uc1wiXG4gIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgOmRhdGE9XCJkYXRhXCJcbiAgOm1ldGE9XCJtZXRhXCJcbiAgOnN0b3JlPVwic3RvcmVcIlxuICBAY2xpY2suc3RvcFxuKVxuICAvLy0gRmlyZWZveCBkb2Vzbid0IGxpa2UgPGJ1dHRvbj4gaGVyZSwgc28gdXNlIDxhPiBpbnN0ZWFkOlxuICBhLmRpdG8tYnV0dG9uKFxuICAgIHYtaWY9XCJkcmFnZ2FibGVcIlxuICAgIDpjbGFzcz1cInsgJ2RpdG8tZGlzYWJsZWQnOiBpc0RyYWdnYWJsZURpc2FibGVkIH1cIlxuICAgIHYtYmluZD1cImdldEJ1dHRvbkF0dHJpYnV0ZXModmVyYnMuZHJhZylcIlxuICApXG4gIFJvdXRlckxpbmsuZGl0by1idXR0b24oXG4gICAgdi1pZj1cImVkaXRhYmxlXCJcbiAgICA6Y2xhc3M9XCJ7ICdkaXRvLWRpc2FibGVkJzogaXNFZGl0YWJsZURpc2FibGVkIH1cIlxuICAgIDp0bz1cImVkaXRQYXRoID8geyBwYXRoOiBlZGl0UGF0aCB9IDoge31cIlxuICAgIHYtYmluZD1cImdldEJ1dHRvbkF0dHJpYnV0ZXModmVyYnMuZWRpdClcIlxuICApXG4gIERpdG9DcmVhdGVCdXR0b24oXG4gICAgdi1pZj1cImNyZWF0YWJsZVwiXG4gICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgOm1ldGE9XCJtZXRhXCJcbiAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgOnBhdGg9XCJjcmVhdGVQYXRoXCJcbiAgICA6dmVyYj1cInZlcmJzLmNyZWF0ZVwiXG4gICAgOnRleHQ9XCJjcmVhdGVCdXR0b25UZXh0XCJcbiAgICA6ZGlzYWJsZWQ9XCJpc0NyZWF0YWJsZURpc2FibGVkXCJcbiAgKVxuICBidXR0b24uZGl0by1idXR0b24oXG4gICAgdi1pZj1cImRlbGV0YWJsZVwiXG4gICAgdHlwZT1cImJ1dHRvblwiXG4gICAgOmRpc2FibGVkPVwiaXNEZWxldGFibGVEaXNhYmxlZFwiXG4gICAgdi1iaW5kPVwiZ2V0QnV0dG9uQXR0cmlidXRlcyh2ZXJicy5kZWxldGUpXCJcbiAgICBAY2xpY2s9XCIkZW1pdCgnZGVsZXRlJylcIlxuICApXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCB7IGNhcGl0YWxpemUgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ0RpdG9FZGl0QnV0dG9ucycsIHtcbiAgZW1pdHM6IFsnZGVsZXRlJ10sXG5cbiAgcHJvcHM6IHtcbiAgICBidXR0b25zOiB7IHR5cGU6IE9iamVjdCwgZGVmYXVsdDogbnVsbCB9LFxuICAgIHNjaGVtYTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgZGF0YVBhdGg6IHsgdHlwZTogU3RyaW5nLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGRhdGE6IHsgdHlwZTogW09iamVjdCwgQXJyYXldLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgbWV0YTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgc3RvcmU6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGRpc2FibGVkOiB7IHR5cGU6IEJvb2xlYW4sIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgZHJhZ2dhYmxlOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgZWRpdGFibGU6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBjcmVhdGFibGU6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBkZWxldGFibGU6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBlZGl0UGF0aDogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBjcmVhdGVQYXRoOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogbnVsbCB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBmb3JtTGFiZWwoKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRMYWJlbCh0aGlzLnNjaGVtYS5mb3JtKVxuICAgIH0sXG5cbiAgICBpc0RyYWdnYWJsZURpc2FibGVkKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZGlzYWJsZWQgfHwgIXRoaXMuaGFzU2NoZW1hT3B0aW9uKCdkcmFnZ2FibGUnKVxuICAgIH0sXG5cbiAgICBpc0RlbGV0YWJsZURpc2FibGVkKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZGlzYWJsZWQgfHwgIXRoaXMuaGFzU2NoZW1hT3B0aW9uKCdkZWxldGFibGUnKVxuICAgIH0sXG5cbiAgICBpc0VkaXRhYmxlRGlzYWJsZWQoKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICB0aGlzLmRpc2FibGVkIHx8XG4gICAgICAgICF0aGlzLmVkaXRQYXRoIHx8XG4gICAgICAgICF0aGlzLmhhc1NjaGVtYU9wdGlvbignZWRpdGFibGUnKVxuICAgICAgKVxuICAgIH0sXG5cbiAgICBpc0NyZWF0YWJsZURpc2FibGVkKCkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgdGhpcy5kaXNhYmxlZCB8fFxuICAgICAgICAhdGhpcy5jcmVhdGVQYXRoIHx8XG4gICAgICAgICF0aGlzLmhhc1NjaGVtYU9wdGlvbignY3JlYXRhYmxlJylcbiAgICAgIClcbiAgICB9LFxuXG4gICAgY3JlYXRlQnV0dG9uVGV4dCgpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIC8vIEFsbG93IHNjaGVtYSB0byBvdmVycmlkZSBjcmVhdGUgYnV0dG9uIHRocm91Z2ggY3JlYXRhYmxlIG9iamVjdDpcbiAgICAgICAgdGhpcy5zY2hlbWEuY3JlYXRhYmxlPy5sYWJlbCB8fCAoXG4gICAgICAgICAgLy8gQXV0by1nZW5lcmF0ZSBjcmVhdGUgYnV0dG9uIGxhYmVscyBmcm9tIGZyb20gbGFiZWxzIGZvciBsaXN0XG4gICAgICAgICAgLy8gc291cmNlcyB3aXRoIG9ubHkgb25lIGZvcm06XG4gICAgICAgICAgdGhpcy5mb3JtTGFiZWwgJiZcbiAgICAgICAgICBgJHtjYXBpdGFsaXplKHRoaXMudmVyYnMuY3JlYXRlKX0gJHt0aGlzLmZvcm1MYWJlbH1gXG4gICAgICAgICkgfHxcbiAgICAgICAgbnVsbFxuICAgICAgKVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgaGFzU2NoZW1hT3B0aW9uKG5hbWUpIHtcbiAgICAgIC8vIEFsbCBvcHRpb25zIGNhbiBiZSBkaXNhYmxlZCBvbiBhIHBlci1mb3JtIGJhc2lzIGJ5IHNldHRpbmdcbiAgICAgIC8vIGBzY2hlbWFbbmFtZV1gIHRvIGBmYWxzZWAgb3IgYSBjYWxsYmFjayByZXR1cm5pbmcgYGZhbHNlYC5cbiAgICAgIHJldHVybiB0aGlzLmdldFNjaGVtYVZhbHVlKG5hbWUsIHtcbiAgICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgICAgZGVmYXVsdDogdHJ1ZVxuICAgICAgfSlcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG4uZGl0by1lZGl0LWJ1dHRvbnMge1xuICAvLyBPdmVycmlkZSBjdXJzb3IgZnJvbSBjb2xsYXBzaWJsZSBkaXRvLWxhYmVsOlxuICBjdXJzb3I6IGRlZmF1bHQ7XG4gIGZsZXg6IG5vbmU7XG59XG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbi5kaXRvLWNyZWF0ZS1idXR0b25cbiAgYnV0dG9uLmRpdG8tYnV0dG9uKFxuICAgIHYtaWY9XCJjcmVhdGFibGVGb3JtXCJcbiAgICA6dHlwZT1cImlzSW5saW5lZCA/ICdidXR0b24nIDogJ3N1Ym1pdCdcIlxuICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICB2LWJpbmQ9XCJnZXRCdXR0b25BdHRyaWJ1dGVzKHZlcmIpXCJcbiAgICBAY2xpY2s9XCJjcmVhdGVJdGVtKGNyZWF0YWJsZUZvcm0pXCJcbiAgKSB7eyB0ZXh0IH19XG4gIHRlbXBsYXRlKFxuICAgIHYtZWxzZS1pZj1cImNyZWF0YWJsZUZvcm1zXCJcbiAgKVxuICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbihcbiAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgICAgdi1iaW5kPVwiZ2V0QnV0dG9uQXR0cmlidXRlcyh2ZXJiKVwiXG4gICAgICBAbW91c2Vkb3duLnN0b3A9XCJvblB1bGxkb3duTW91c2VEb3duKClcIlxuICAgICkge3sgdGV4dCB9fVxuICAgIHVsLmRpdG8tcHVsbGRvd24oOmNsYXNzPVwieyAnZGl0by1vcGVuJzogcHVsbGRvd24ub3BlbiB9XCIpXG4gICAgICBsaShcbiAgICAgICAgdi1mb3I9XCIoZm9ybSwgdHlwZSkgaW4gY3JlYXRhYmxlRm9ybXNcIlxuICAgICAgKVxuICAgICAgICBhKFxuICAgICAgICAgIHYtc2hvdz1cInNob3VsZFNob3dTY2hlbWEoZm9ybSlcIlxuICAgICAgICAgIDpjbGFzcz1cImdldEZvcm1DbGFzcyhmb3JtLCB0eXBlKVwiXG4gICAgICAgICAgQG1vdXNlZG93bi5zdG9wPVwib25QdWxsZG93bk1vdXNlRG93bih0eXBlKVwiXG4gICAgICAgICAgQG1vdXNldXA9XCJvblB1bGxkb3duTW91c2VVcCh0eXBlKVwiXG4gICAgICAgICkge3sgZ2V0TGFiZWwoZm9ybSkgfX1cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IFB1bGxkb3duTWl4aW4gZnJvbSAnLi4vbWl4aW5zL1B1bGxkb3duTWl4aW4uanMnXG5pbXBvcnQgeyBnZXRGb3JtU2NoZW1hcywgaXNJbmxpbmVkIH0gZnJvbSAnLi4vdXRpbHMvc2NoZW1hLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ0RpdG9DcmVhdGVCdXR0b24nLCB7XG4gIG1peGluczogW1B1bGxkb3duTWl4aW5dLFxuXG4gIHByb3BzOiB7XG4gICAgc2NoZW1hOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICAvLyBUaGUgbmV4dCBmb3VyIHByb3BzIGFyZSB0aGVyZSBmb3IgYERpdG9Db250ZXh0YCBhbmQgdGhlIGBjb250ZXh0KClgXG4gICAgLy8gZ2V0dGVyIGluIGBEaXRvTWl4aW5gLlxuICAgIC8vIFRPRE86IFNob3VsZCB0aGV5IGJlIG1vdmVkIHRvIHNoYXJlZCBtaXhpbiB0aGF0IGRlZmluZXMgdGhlbSBhcyByZXF1aXJlZFxuICAgIC8vIGFuZCBhbHNvIHByb3ZpZGVzIHRoZSBgY29udGV4dCgpYCBnZXR0ZXIsIHBlcmhhcHMgYENvbnRleHRNaXhpbmA/XG4gICAgLy8gYHNjaGVtYWAgY291bGQgYmUgaW5jbHVkZWQgYXMgd2VsbCwgYW5kIGBDb250ZXh0TWl4aW5gIGNvdWxkIGJlIHVzZWQgaW5cbiAgICAvLyBgRGl0b0Zvcm1gLCBgRGl0b1ZpZXdgLCBgRGl0b1BhbmVsYCwgYERpdG9TY2hlbWFgLCBgRGl0b0VkaXRCdXR0b25zYCxcbiAgICAvLyBldGM/IEJ1dCB0aGUgcHJvYmxlbSB3aXRoIHRoZSByb290IGNvbXBvbmVudHMgaXMgdGhhdCB0aGV5IGRvbid0IGhhdmVcbiAgICAvLyB0aGVzZSBwcm9wcy4gV2UgY291bGQgYWRkIGEgYGNvbnRleHRBdHRyaWJ1dGVzKClgIGdldHRlciBmb3IgZWFzeSBwYXNzaW5nXG4gICAgLy8gb24gYXMgYHYtYmluZD1cImNvbnRleHRBdHRyaWJ1dGVzXCJgLlxuICAgIGRhdGFQYXRoOiB7IHR5cGU6IFN0cmluZywgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBkYXRhOiB7IHR5cGU6IFtPYmplY3QsIEFycmF5XSwgZGVmYXVsdDogbnVsbCB9LFxuICAgIG1ldGE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHN0b3JlOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBwYXRoOiB7IHR5cGU6IFN0cmluZywgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICB2ZXJiOiB7IHR5cGU6IFN0cmluZywgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICB0ZXh0OiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogbnVsbCB9LFxuICAgIGRpc2FibGVkOiB7IHR5cGU6IEJvb2xlYW4sIHJlcXVpcmVkOiB0cnVlIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIGZvcm1zKCkge1xuICAgICAgcmV0dXJuIGdldEZvcm1TY2hlbWFzKHRoaXMuc2NoZW1hLCB0aGlzLmNvbnRleHQpXG4gICAgfSxcblxuICAgIGNyZWF0YWJsZUZvcm1zKCkge1xuICAgICAgY29uc3QgZW50cmllcyA9IE9iamVjdC5lbnRyaWVzKHRoaXMuZm9ybXMpLmZpbHRlcihcbiAgICAgICAgKFssIGZvcm1dKSA9PiB0aGlzLmlzRm9ybUNyZWF0YWJsZShmb3JtKVxuICAgICAgKVxuICAgICAgcmV0dXJuIGVudHJpZXMubGVuZ3RoID4gMFxuICAgICAgICA/IE9iamVjdC5mcm9tRW50cmllcyhlbnRyaWVzKVxuICAgICAgICA6IG51bGxcbiAgICB9LFxuXG4gICAgY3JlYXRhYmxlRm9ybSgpIHtcbiAgICAgIGNvbnN0IGZvcm1zID0gdGhpcy5jcmVhdGFibGVGb3Jtc1xuICAgICAgcmV0dXJuIGZvcm1zICYmIE9iamVjdC5rZXlzKGZvcm1zKS5sZW5ndGggPT09IDEgJiYgZm9ybXMuZGVmYXVsdCB8fCBudWxsXG4gICAgfSxcblxuICAgIGlzSW5saW5lZCgpIHtcbiAgICAgIHJldHVybiBpc0lubGluZWQodGhpcy5zY2hlbWEpXG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBpc0Zvcm1DcmVhdGFibGUoZm9ybSkge1xuICAgICAgLy8gRm9ybXMgY2FuIGJlIGV4Y2x1ZGVkIGZyb20gdGhlIGxpc3QgYnkgcHJvdmlkaW5nIGBpZjogZmFsc2VgIG9yXG4gICAgICAvLyBgY3JlYXRhYmxlOiBmYWxzZWAuXG4gICAgICByZXR1cm4gKFxuICAgICAgICB0aGlzLnNob3VsZFJlbmRlclNjaGVtYShmb3JtKSAmJlxuICAgICAgICB0aGlzLmdldFNjaGVtYVZhbHVlKCdjcmVhdGFibGUnLCB7XG4gICAgICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgICAgICBkZWZhdWx0OiB0cnVlLFxuICAgICAgICAgIHNjaGVtYTogZm9ybVxuICAgICAgICB9KVxuICAgICAgKVxuICAgIH0sXG5cbiAgICBjcmVhdGVJdGVtKGZvcm0sIHR5cGUgPSBudWxsKSB7XG4gICAgICBpZiAoIXRoaXMuc2hvdWxkRGlzYWJsZVNjaGVtYShmb3JtKSkge1xuICAgICAgICBpZiAodGhpcy5pc0lubGluZWQpIHtcbiAgICAgICAgICB0aGlzLnNvdXJjZUNvbXBvbmVudC5jcmVhdGVJdGVtKGZvcm0sIHR5cGUpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy4kcm91dGVyLnB1c2goe1xuICAgICAgICAgICAgcGF0aDogYCR7dGhpcy5wYXRofS9jcmVhdGVgLFxuICAgICAgICAgICAgcXVlcnk6IHsgdHlwZSB9XG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdOb3QgYWxsb3dlZCB0byBjcmVhdGUgaXRlbSBmb3IgZ2l2ZW4gZm9ybScpXG4gICAgICB9XG4gICAgfSxcblxuICAgIGdldEZvcm1DbGFzcyhmb3JtLCB0eXBlKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBbYGRpdG8tdHlwZS0ke3R5cGV9YF06IHRydWUsXG4gICAgICAgICdkaXRvLWRpc2FibGVkJzogdGhpcy5zaG91bGREaXNhYmxlU2NoZW1hKGZvcm0pXG4gICAgICB9XG4gICAgfSxcblxuICAgIG9uUHVsbGRvd25TZWxlY3QodHlwZSkge1xuICAgICAgdGhpcy5jcmVhdGVJdGVtKHRoaXMuZm9ybXNbdHlwZV0sIHR5cGUpXG4gICAgICB0aGlzLnNldFB1bGxkb3duT3BlbihmYWxzZSlcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG4uZGl0by1jcmVhdGUtYnV0dG9uIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuXG4gIC5kaXRvLXB1bGxkb3duIHtcbiAgICByaWdodDogMDtcblxuICAgIC5kaXRvLWJ1dHRvbnMtc3RpY2t5ICYge1xuICAgICAgdG9wOiB1bnNldDtcbiAgICAgIHJpZ2h0OiB1bnNldDtcbiAgICAgIGJvdHRvbTogMDtcbiAgICAgIGxlZnQ6IDA7XG4gICAgfVxuICB9XG59XG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbi5kaXRvLWNsaXBib2FyZC5kaXRvLWJ1dHRvbnMuZGl0by1idXR0b25zLXJvdW5kKFxuICB2LWlmPVwiY2xpcGJvYXJkXCJcbilcbiAgYnV0dG9uLmRpdG8tYnV0dG9uLmRpdG8tYnV0dG9uLWNvcHkoXG4gICAgcmVmPVwiY29weURhdGFcIlxuICAgIHR5cGU9XCJidXR0b25cIlxuICAgIHRpdGxlPVwiQ29weSBEYXRhXCJcbiAgICA6ZGlzYWJsZWQ9XCIhY29weUVuYWJsZWRcIlxuICAgIEBjbGljaz1cIm9uQ29weVwiXG4gIClcbiAgYnV0dG9uLmRpdG8tYnV0dG9uLmRpdG8tYnV0dG9uLXBhc3RlKFxuICAgIHR5cGU9XCJidXR0b25cIlxuICAgIHRpdGxlPVwiUGFzdGUgRGF0YVwiXG4gICAgOmRpc2FibGVkPVwiIXBhc3RlRW5hYmxlZFwiXG4gICAgQGNsaWNrPVwib25QYXN0ZVwiXG4gIClcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgeyBpc09iamVjdCwgY2xvbmUsIGRlaW5kZW50IH0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgRG9tTWl4aW4gZnJvbSAnLi4vbWl4aW5zL0RvbU1peGluLmpzJ1xuaW1wb3J0IERpdG9Db250ZXh0IGZyb20gJy4uL0RpdG9Db250ZXh0LmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ0RpdG9DbGlwYm9hcmQnLCB7XG4gIG1peGluczogW0RvbU1peGluXSxcblxuICBwcm9wczoge1xuICAgIGNsaXBib2FyZDogeyB0eXBlOiBbQm9vbGVhbiwgT2JqZWN0XSwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBzY2hlbWE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgY29weUVuYWJsZWQ6IGZhbHNlLFxuICAgICAgcGFzdGVFbmFibGVkOiBmYWxzZVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIGNsaXBib2FyZE9wdGlvbnMoKSB7XG4gICAgICByZXR1cm4gaXNPYmplY3QodGhpcy5jbGlwYm9hcmQpID8gdGhpcy5jbGlwYm9hcmQgOiB7fVxuICAgIH0sXG5cbiAgICBjb3B5RGF0YSgpIHtcbiAgICAgIGNvbnN0IHsgY29weSB9ID0gdGhpcy5jbGlwYm9hcmRPcHRpb25zXG4gICAgICByZXR1cm4gY29weVxuICAgICAgICA/IGNsaXBib2FyZERhdGEgPT5cbiAgICAgICAgICAgIGNvcHkuY2FsbCh0aGlzLCBuZXcgRGl0b0NvbnRleHQodGhpcywgeyBjbGlwYm9hcmREYXRhIH0pKVxuICAgICAgICA6IGNsaXBib2FyZERhdGEgPT4gY2xvbmUoY2xpcGJvYXJkRGF0YSlcbiAgICB9LFxuXG4gICAgcGFzdGVEYXRhKCkge1xuICAgICAgY29uc3QgeyBwYXN0ZSB9ID0gdGhpcy5jbGlwYm9hcmRPcHRpb25zXG4gICAgICByZXR1cm4gcGFzdGVcbiAgICAgICAgPyBjbGlwYm9hcmREYXRhID0+XG4gICAgICAgICAgICBwYXN0ZS5jYWxsKHRoaXMsIG5ldyBEaXRvQ29udGV4dCh0aGlzLCB7IGNsaXBib2FyZERhdGEgfSkpXG4gICAgICAgIDogY2xpcGJvYXJkRGF0YSA9PiBjbGlwYm9hcmREYXRhXG4gICAgfVxuICB9LFxuXG4gIHdhdGNoOiB7XG4gICAgLy8gQ2hlY2sgcmlnaHQgYXdheSBhbHNvIGluIGNhc2UgdGhlcmUncyBhbHJlYWR5IGRhdGEgKGUuZy4gY3JlYXRlIGZvcm0pOlxuICAgICdwYXJlbnRDb21wb25lbnQuaGFzRGF0YSc6IHtcbiAgICAgIGltbWVkaWF0ZTogdHJ1ZSxcbiAgICAgIGhhbmRsZXI6ICd1cGRhdGVDb3B5J1xuICAgIH0sXG5cbiAgICAnYXBwU3RhdGUuY2xpcGJvYXJkRGF0YSc6IHtcbiAgICAgIGltbWVkaWF0ZTogdHJ1ZSxcbiAgICAgIGhhbmRsZXI6ICd1cGRhdGVQYXN0ZSdcbiAgICB9XG4gIH0sXG5cbiAgbW91bnRlZCgpIHtcbiAgICAvLyBDaGVjayBjbGlwYm9hcmQgY29udGVudCB3aGVuZXZlciBzb21ldGhpbmcgZ2V0cyBjb3BpZWQgb3IgdGhlIHdpbmRvdyBnZXRzXG4gICAgLy8gKHJlKWFjdGl2YXRlZCwgYXMgdGhvc2UgYXJlIHRoZSBtb21lbnRzIHdoZW4gdGhlIGNsaXBib2FyZCBjYW4gY2hhbmdlOlxuICAgIHRoaXMuZG9tT24oZG9jdW1lbnQsIHsgY29weTogdGhpcy51cGRhdGVQYXN0ZSB9KVxuICAgIHRoaXMuZG9tT24od2luZG93LCB7IGZvY3VzOiB0aGlzLnVwZGF0ZVBhc3RlIH0pXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGNoZWNrQ2xpcGJvYXJkRGF0YShjbGlwYm9hcmREYXRhKSB7XG4gICAgICBjb25zdCB7ICRzY2hlbWEsIC4uLmRhdGEgfSA9IGNsaXBib2FyZERhdGEgfHwge31cbiAgICAgIHJldHVybiAkc2NoZW1hID09PSB0aGlzLnNjaGVtYS5uYW1lID8gZGF0YSA6IG51bGxcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0Q2xpcGJvYXJkRGF0YShyZXBvcnQpIHtcbiAgICAgIC8vIFVzZSB0aGUgaW50ZXJuYWwgY2xpcGJvYXJkIGFzIGZhbGxiYWNrLlxuICAgICAgbGV0IHsgY2xpcGJvYXJkRGF0YSB9ID0gdGhpcy5hcHBTdGF0ZVxuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QganNvbiA9IGF3YWl0IG5hdmlnYXRvci5jbGlwYm9hcmQ/LnJlYWRUZXh0Py4oKVxuICAgICAgICBpZiAoanNvbikge1xuICAgICAgICAgIGNsaXBib2FyZERhdGEgPSBKU09OLnBhcnNlKGpzb24pXG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBpZiAocmVwb3J0KSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihlcnIsIGVyci5uYW1lLCBlcnIubWVzc2FnZSlcbiAgICAgICAgICBpZiAoZXJyLm5hbWUgPT09ICdTeW50YXhFcnJvcicpIHtcbiAgICAgICAgICAgIGFsZXJ0KGRlaW5kZW50YFxuICAgICAgICAgICAgICBUaGUgZGF0YSBpbiB0aGUgY2xpcGJvYXJkIGFwcGVhcnMgdG8gYmUgbWFsZm9ybWVkOlxuICAgICAgICAgICAgICAke2Vyci5tZXNzYWdlfVxuICAgICAgICAgICAgYClcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLmNoZWNrQ2xpcGJvYXJkRGF0YShjbGlwYm9hcmREYXRhKVxuICAgIH0sXG5cbiAgICB1cGRhdGVDb3B5KCkge1xuICAgICAgdGhpcy5jb3B5RW5hYmxlZCA9IHRoaXMucGFyZW50Q29tcG9uZW50Lmhhc0RhdGFcbiAgICB9LFxuXG4gICAgYXN5bmMgdXBkYXRlUGFzdGUoKSB7XG4gICAgICB0aGlzLnBhc3RlRW5hYmxlZCA9ICEhdGhpcy5jaGVja0NsaXBib2FyZERhdGEodGhpcy5hcHBTdGF0ZS5jbGlwYm9hcmREYXRhKVxuICAgICAgaWYgKCF0aGlzLnBhc3RlRW5hYmxlZCAmJiB0aGlzLmFwcFN0YXRlLmFnZW50LmNocm9tZSkge1xuICAgICAgICAvLyBTZWUgaWYgdGhlIGNsaXBib2FyZCBjb250ZW50IGlzIHZhbGlkIEpTT04gZGF0YSB0aGF0IGlzIGNvbXBhdGlibGVcbiAgICAgICAgLy8gd2l0aCB0aGUgY3VycmVudCB0YXJnZXQgc2NoZW1hLCBhbmQgb25seSB0aGVuIGFjdGl2YXRlIHRoZSBwYXN0aW5nOlxuICAgICAgICBjb25zdCBkYXRhID0gYXdhaXQgdGhpcy5nZXRDbGlwYm9hcmREYXRhKGZhbHNlKSAvLyBEb24ndCByZXBvcnRcbiAgICAgICAgdGhpcy5wYXN0ZUVuYWJsZWQgPSAhIWRhdGFcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYXN5bmMgb25Db3B5KCkge1xuICAgICAgbGV0IGRhdGEgPSB0aGlzLnBhcmVudENvbXBvbmVudC5jbGlwYm9hcmREYXRhXG4gICAgICB0cnkge1xuICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgIGRhdGEgPSB7XG4gICAgICAgICAgICAkc2NoZW1hOiB0aGlzLnNjaGVtYS5uYW1lLFxuICAgICAgICAgICAgLi4udGhpcy5jb3B5RGF0YShkYXRhKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBLZWVwIGFuIGludGVybmFsIGNsaXBib2FyZCBhcyBmYWxsYmFjay5cbiAgICAgICAgdGhpcy5hcHBTdGF0ZS5jbGlwYm9hcmREYXRhID0gZGF0YVxuICAgICAgICB0aGlzLnBhc3RlRW5hYmxlZCA9IHRydWVcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBqc29uID0gSlNPTi5zdHJpbmdpZnkoZGF0YSwgbnVsbCwgMilcbiAgICAgICAgICBhd2FpdCBuYXZpZ2F0b3IuY2xpcGJvYXJkPy53cml0ZVRleHQ/Lihqc29uKVxuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGVyciwgZXJyLm5hbWUsIGVyci5tZXNzYWdlKVxuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKVxuICAgICAgICBhbGVydChlcnJvci5tZXNzYWdlKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBhc3luYyBvblBhc3RlKCkge1xuICAgICAgbGV0IGRhdGEgPSBhd2FpdCB0aGlzLmdldENsaXBib2FyZERhdGEodHJ1ZSkgLy8gUmVwb3J0XG4gICAgICB0cnkge1xuICAgICAgICBkYXRhID0gZGF0YSAmJiB0aGlzLnBhc3RlRGF0YShkYXRhKVxuICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgIHRoaXMucGFyZW50Q29tcG9uZW50LmNsaXBib2FyZERhdGEgPSBkYXRhXG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpXG4gICAgICAgIGFsZXJ0KGVycm9yLm1lc3NhZ2UpXG4gICAgICB9XG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLmRpdG8tY2xpcGJvYXJkIHtcbiAgZGlzcGxheTogZmxleDtcblxuICAuZGl0by1zY2hlbWEgJiB7XG4gICAgLy8gUHVzaCBjbGlwYm9hcmQgdG8gdGhlIHJpZ2h0IGluIHRoZSBmbGV4IGxheW91dCwgc2VlOlxuICAgIC8vIGh0dHBzOi8vY29kZXBlbi5pby90aG9sZXgvcGVuL2h2ZUJ4L1xuICAgIG1hcmdpbi1sZWZ0OiBhdXRvO1xuICB9XG5cbiAgLmRpdG8taGVhZGVyICYge1xuICAgIG1hcmdpbi1sZWZ0OiAwO1xuXG4gICAgLmRpdG8tYnV0dG9uIHtcbiAgICAgIG1hcmdpbjogMCAwICR0YWItbWFyZ2luICR0YWItbWFyZ2luO1xuICAgIH1cbiAgfVxufVxuPC9zdHlsZT5cbiIsIi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCB7XG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlzTG9hZGluZzogZmFsc2VcbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIHNldExvYWRpbmcoaXNMb2FkaW5nLCB7IHVwZGF0ZVJvb3QgPSBmYWxzZSwgdXBkYXRlVmlldyA9IGZhbHNlIH0gPSB7fSkge1xuICAgICAgaWYgKCF0aGlzLmlzTG9hZGluZyBeICFpc0xvYWRpbmcpIHtcbiAgICAgICAgLy8gQm9vbGVhbiB4b3JcbiAgICAgICAgdGhpcy5pc0xvYWRpbmcgPSAhIWlzTG9hZGluZ1xuICAgICAgICBpZiAodXBkYXRlUm9vdCkge1xuICAgICAgICAgIHRoaXMucm9vdENvbXBvbmVudC5yZWdpc3RlckxvYWRpbmcoaXNMb2FkaW5nKVxuICAgICAgICB9XG4gICAgICAgIGlmICh1cGRhdGVWaWV3KSB7XG4gICAgICAgICAgdGhpcy52aWV3Q29tcG9uZW50LnNldExvYWRpbmcodGhpcy5pc0xvYWRpbmcpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiIsImltcG9ydCBJdGVtTWl4aW4gZnJvbSAnLi9JdGVtTWl4aW4uanMnXG5pbXBvcnQgTG9hZGluZ01peGluIGZyb20gJy4vTG9hZGluZ01peGluLmpzJ1xuaW1wb3J0IHsgc2V0RGVmYXVsdFZhbHVlcyB9IGZyb20gJy4uL3V0aWxzL3NjaGVtYS5qcydcbmltcG9ydCB7IGlzT2JqZWN0LCBpc1N0cmluZywgbGFiZWxpemUgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0IHsgZ2V0UmVzb3VyY2UgfSBmcm9tICcuLi91dGlscy9yZXNvdXJjZS5qcydcbmltcG9ydCBEaXRvQ29udGV4dCBmcm9tICcuLi9EaXRvQ29udGV4dC5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IHtcbiAgbWl4aW5zOiBbSXRlbU1peGluLCBMb2FkaW5nTWl4aW5dLFxuXG4gIHByb3ZpZGUoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICRyZXNvdXJjZUNvbXBvbmVudDogKCkgPT4gdGhpcyxcbiAgICAgIC8vIFBhc3MgbG9jYWwgdmVyYnMgb3ZlcnJpZGVzIG9uIHRvIGNoaWxkcmVuLCBzZWUgdmVyYnMoKSBjb21wdXRlZCBwcm9wLlxuICAgICAgJHZlcmJzOiAoKSA9PiB0aGlzLnZlcmJzLFxuICAgICAgJGlzUG9wdWxhdGVkOiAoKSA9PiB0aGlzLmhhc0RhdGFcbiAgICB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbG9hZGVkRGF0YTogbnVsbCxcbiAgICAgIGFib3J0Q29udHJvbGxlcjogbnVsbFxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIHJlc291cmNlQ29tcG9uZW50KCkge1xuICAgICAgcmV0dXJuIHRoaXNcbiAgICB9LFxuXG4gICAgcmVzb3VyY2UoKSB7XG4gICAgICAvLyBSZXR1cm5zIHRoZSByZXNvdXJjZSBvYmplY3QgcmVwcmVzZW50aW5nIHRoZSByZXNvdXJjZSBmb3IgdGhlXG4gICAgICAvLyBhc3NvY2lhdGVkIHNvdXJjZSBzY2hlbWEuXG4gICAgICByZXR1cm4gdGhpcy5nZXRSZXNvdXJjZSgpXG4gICAgfSxcblxuICAgIHByb3ZpZGVzRGF0YSgpIHtcbiAgICAgIC8vIFRoaXMgY29tcG9uZW50IGlzIGEgZGF0YS1zb3VyY2UgaWYgaXQgaGFzIGFuIGFzc29jaWF0ZWQgQVBJIHJlc291cmNlOlxuICAgICAgcmV0dXJuICEhdGhpcy5yZXNvdXJjZVxuICAgIH0sXG5cbiAgICBsaW5rc1RvVmlldygpIHtcbiAgICAgIC8vIFJldHVybnMgYGZhbHNlYGhlcmUsIGJ1dCBpcyBvdmVycmlkZGVuIHRvIHJldHVybiBgdHJ1ZWAgaW5cbiAgICAgIC8vIGBTb3VyY2VNaXhpbmAgZm9yIGNvbXBvbmVudCB0aGF0IGRvIG5vdCBwcm92aWRlIHRoZWlyIG93biBkYXRhLCBidXRcbiAgICAgIC8vIGVkaXQgdGhlaXIgaXRlbXMgdGhyb3VnaCBhIGxpbmtlZCB2aWV3LiAgSW4gdGhpcyBjYXNlLCByZWFsIGlkcyBuZWVkIHRvXG4gICAgICAvLyBiZSB1c2VkLlxuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfSxcblxuICAgIGlzVHJhbnNpZW50KCkge1xuICAgICAgLy8gQ2hlY2sgdGhlIGZvcm0gdGhhdCB0aGlzIGNvbXBvbmVudCBiZWxvbmdzIHRvIGFzIHdlbGwsIHNpbmNlIGl0IG1heSBiZVxuICAgICAgLy8gaW4gY3JlYXRpb24gbW9kZSwgd2hpY2ggbWFrZXMgaXQgdHJhbnNpZW50LlxuICAgICAgLy8gTk9URTogVGhpcyBkb2VzIG5vdCBsb29wIGVuZGxlc3NseSBiZWNhdXNlIERpdG9Gb3JtIHJlZGVmaW5lc1xuICAgICAgLy8gYGlzVHJhbnNpZW50KClgIHRvIG9ubHkgcmV0dXJuIGAhdGhpcy5wcm92aWRlc0RhdGFgLlxuICAgICAgY29uc3QgZm9ybSA9IHRoaXMuZm9ybUNvbXBvbmVudFxuICAgICAgcmV0dXJuIChcbiAgICAgICAgIXRoaXMucHJvdmlkZXNEYXRhICYmXG4gICAgICAgICF0aGlzLmxpbmtzVG9WaWV3IHx8XG4gICAgICAgIGZvcm0gJiYgKFxuICAgICAgICAgIGZvcm0uaXNUcmFuc2llbnQgfHxcbiAgICAgICAgICBmb3JtLmlzQ3JlYXRpbmdcbiAgICAgICAgKVxuICAgICAgKVxuICAgIH0sXG5cbiAgICB0cmFuc2llbnROb3RlKCkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgdGhpcy5pc1RyYW5zaWVudCAmJiAoXG4gICAgICAgICAgJzxiPk5vdGU8L2I+OiB0aGUgcGFyZW50IHN0aWxsIG5lZWRzIHRvIGJlIHNhdmVkICcgK1xuICAgICAgICAgICdpbiBvcmRlciB0byBwZXJzaXN0IHRoaXMgY2hhbmdlLidcbiAgICAgICAgKVxuICAgICAgKVxuICAgIH0sXG5cbiAgICBzaG91bGRMb2FkKCkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgIXRoaXMuaXNUcmFuc2llbnQgJiZcbiAgICAgICAgIXRoaXMuaXNMb2FkaW5nXG4gICAgICApXG4gICAgfSxcblxuICAgIC8vIEBvdmVycmlkYWJsZVxuICAgIGhhc0RhdGEoKSB7XG4gICAgICAvLyBCYXNlIGRlZmluaXRpb24sIHdpbGwgYmUgb3ZlcnJpZGRlbiBieSBEaXRvRm9ybSBhbmQgU291cmNlTWl4aW5cbiAgICAgIHJldHVybiAhIXRoaXMubG9hZGVkRGF0YVxuICAgIH0sXG5cbiAgICB2ZXJicygpIHtcbiAgICAgIC8vIFRoZSBhY3R1YWwgY29kZSBpcyB0aGUgYGdldFZlcmJzKClgIG1ldGhvZCwgZm9yIGVhc2llciBvdmVycmlkaW5nIG9mXG4gICAgICAvLyB0aGlzIGNvbXB1dGVkIHByb3BlcnR5IGluIGNvbXBvbmVudHMgdGhhdCB1c2UgdGhlIFJlc291cmNlTWl4aW4uXG4gICAgICByZXR1cm4gdGhpcy5nZXRWZXJicygpXG4gICAgfSxcblxuICAgIHBhZ2luYXRpb25SYW5nZSgpIHtcbiAgICAgIC8vIE9ubHkgYXBwbHkgcGFnaW5hdGlvbiB0byBsaXN0cy5cbiAgICAgIGNvbnN0IHsgcGFnaW5hdGU6IGFtb3VudCB9ID0gdGhpcy5zb3VyY2VTY2hlbWFcbiAgICAgIGlmICh0aGlzLmlzTGlzdFNvdXJjZSAmJiBhbW91bnQpIHtcbiAgICAgICAgY29uc3QgeyBwYWdlID0gMCB9ID0gdGhpcy5xdWVyeSB8fCB7fVxuICAgICAgICBjb25zdCBzdGFydCA9IHBhZ2UgKiBhbW91bnRcbiAgICAgICAgcmV0dXJuIFtzdGFydCwgc3RhcnQgKyBhbW91bnQgLSAxXVxuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGxcbiAgICB9LFxuXG4gICAgcXVlcnlQYXJhbXMoKSB7XG4gICAgICBjb25zdCByYW5nZSA9IHRoaXMucGFnaW5hdGlvblJhbmdlXG4gICAgICBjb25zdCB7IHBhZ2UsIC4uLnF1ZXJ5IH0gPSB0aGlzLnF1ZXJ5IHx8IHt9XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5xdWVyeSwgLy8gUXVlcnkgbWF5IG92ZXJyaWRlIHNjb3BlLlxuICAgICAgICAuLi4ocmFuZ2UgJiYge1xuICAgICAgICAgIC8vIFBhc3MgcGFnaW5hdGlvbiBhcyByYW5nZSwgc28gdGhhdCB3ZSBhdXRvbWF0aWNhbGx5IGdldCBPYmplY3Rpb24nc1xuICAgICAgICAgIC8vIHJlc3VsdHMgY291bnRpbmc6XG4gICAgICAgICAgcmFuZ2U6IHJhbmdlLmpvaW4oJywnKVxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBjcmVhdGVkKCkge1xuICAgIC8vIFdoZW4gY3JlYXRpbmcgbmVzdGVkIGRhdGEsIHdlIHN0aWxsIG5lZWQgdG8gY2FsbCBzZXR1cERhdGEoKVxuICAgIGlmICh0aGlzLnByb3ZpZGVzRGF0YSB8fCB0aGlzLmlzQ3JlYXRpbmcpIHtcbiAgICAgIHRoaXMuc2V0dXBEYXRhKClcbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGdldFJlc291cmNlKCkge1xuICAgICAgLy8gVGhpcyBpcyBkZWZpbmVkIGFzIGEgbWV0aG9kIHNvIHRoZSBjb21wdXRlZCBgcmVzb3VyY2VgIGdldHRlciBjYW5cbiAgICAgIC8vIGJlIG92ZXJyaWRkZW4gYW5kIGBzdXBlcmAgZnVuY3Rpb25hbGl0eSBjYW4gc3RpbGwgYmUgYWNjZXNzZWQuXG4gICAgICByZXR1cm4gZ2V0UmVzb3VyY2UodGhpcy5zb3VyY2VTY2hlbWE/LnJlc291cmNlLCB7XG4gICAgICAgIHR5cGU6ICdjb2xsZWN0aW9uJyxcbiAgICAgICAgcGFyZW50OiB0aGlzLnBhcmVudEZvcm1Db21wb25lbnQ/LnJlc291cmNlID8/IG51bGxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGdldFZlcmJzKCkge1xuICAgICAgY29uc3QgdmVyYnMgPSB0aGlzLiR2ZXJicygpXG4gICAgICByZXR1cm4gdGhpcy5pc1RyYW5zaWVudFxuICAgICAgICA/IHtcbiAgICAgICAgICAgIC4uLnZlcmJzLFxuICAgICAgICAgICAgLy8gT3ZlcnJpZGUgZGVmYXVsdCB2ZXJicyB3aXRoIHRoZWlyIHRyYW5zaWVudCB2ZXJzaW9uczpcbiAgICAgICAgICAgIGNyZWF0ZTogJ2FkZCcsXG4gICAgICAgICAgICBjcmVhdGVkOiAnYWRkZWQnLFxuICAgICAgICAgICAgc2F2ZTogJ2FwcGx5JyxcbiAgICAgICAgICAgIHNhdmVkOiAnYXBwbGllZCcsXG4gICAgICAgICAgICBkZWxldGU6ICdyZW1vdmUnLFxuICAgICAgICAgICAgZGVsZXRlZDogJ3JlbW92ZWQnXG4gICAgICAgICAgfVxuICAgICAgICA6IHZlcmJzXG4gICAgfSxcblxuICAgIC8vIEBvdmVycmlkYWJsZVxuICAgIGNsZWFyRGF0YSgpIHtcbiAgICAgIHRoaXMubG9hZGVkRGF0YSA9IG51bGxcbiAgICB9LFxuXG4gICAgLy8gQG92ZXJyaWRhYmxlXG4gICAgc2V0RGF0YShkYXRhKSB7XG4gICAgICB0aGlzLmxvYWRlZERhdGEgPSBkYXRhXG4gICAgfSxcblxuICAgIHNldHVwRGF0YSgpIHtcbiAgICAgIC8vIEFjdHVhbCBjb2RlIGlzIGluIHNlcGFyYXRlIGZ1bmN0aW9uIHNvIGl0J3MgZWFzZXIgdG8gb3ZlcnJpZGVcbiAgICAgIC8vIGBzZXR1cERhdGEoKWAgYW5kIGFuZCBjYWxsIGBlbnN1cmVEYXRhKClgIGZyb20gdGhlIG92ZXJyaWRlcyxcbiAgICAgIC8vIHNlZSBEaXRvRm9ybSBhbmQgU291cmNlTWl4aW4uXG4gICAgICB0aGlzLmVuc3VyZURhdGEoKVxuICAgIH0sXG5cbiAgICBlbnN1cmVEYXRhKCkge1xuICAgICAgaWYgKHRoaXMuc2hvdWxkTG9hZCkge1xuICAgICAgICBpZiAodGhpcy5oYXNEYXRhKSB7XG4gICAgICAgICAgdGhpcy5yZWxvYWREYXRhKClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmxvYWREYXRhKHRydWUpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgcmVsb2FkRGF0YSgpIHtcbiAgICAgIHRoaXMubG9hZERhdGEoZmFsc2UpXG4gICAgfSxcblxuICAgIGxvYWREYXRhKGNsZWFyKSB7XG4gICAgICBpZiAoIXRoaXMuaXNUcmFuc2llbnQpIHtcbiAgICAgICAgaWYgKGNsZWFyKSB7XG4gICAgICAgICAgdGhpcy5jbGVhckRhdGEoKVxuICAgICAgICB9XG4gICAgICAgIHRoaXMucmVxdWVzdERhdGEoKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBjcmVhdGVEYXRhKHNjaGVtYSwgdHlwZSkge1xuICAgICAgcmV0dXJuIHNldERlZmF1bHRWYWx1ZXMoc2NoZW1hLCB0eXBlID8geyB0eXBlIH0gOiB7fSwgdGhpcylcbiAgICB9LFxuXG4gICAgcmVxdWVzdERhdGEoKSB7XG4gICAgICBjb25zdCBxdWVyeSA9IHRoaXMucXVlcnlQYXJhbXNcbiAgICAgIHRoaXMuaGFuZGxlUmVxdWVzdCh7IG1ldGhvZDogJ2dldCcsIHF1ZXJ5IH0sIChlcnIsIHJlc3BvbnNlKSA9PiB7XG4gICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICBpZiAocmVzcG9uc2UpIHtcbiAgICAgICAgICAgIGNvbnN0IHsgZGF0YSB9ID0gcmVzcG9uc2VcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgZGF0YT8udHlwZSA9PT0gJ0ZpbHRlclZhbGlkYXRpb24nICYmXG4gICAgICAgICAgICAgIHRoaXMub25GaWx0ZXJFcnJvcnM/LihkYXRhLmVycm9ycylcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmlzVW5hdXRob3JpemVkRXJyb3IocmVzcG9uc2UpKSB7XG4gICAgICAgICAgICAgIC8vIFRPRE86IENhbiB3ZSByZWFsbHkgc3dhbGxvdyB0aGVzZSBlcnJvcnM/XG4gICAgICAgICAgICAgIC8vIElzIGNhbGxpbmcgYGVuc3VyZVVzZXIoKWAgaW4gYG9uQmVmb3JlUmVxdWVzdCgpYCBlbm91Z2g/XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuc2V0RGF0YShyZXNwb25zZS5kYXRhKVxuICAgICAgICAgIHRoaXMuZW1pdFNjaGVtYUV2ZW50KCdsb2FkJylcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgaXNWYWxpZGF0aW9uRXJyb3IocmVzcG9uc2UpIHtcbiAgICAgIHJldHVybiByZXNwb25zZT8uc3RhdHVzID09PSA0MDBcbiAgICB9LFxuXG4gICAgaXNVbmF1dGhvcml6ZWRFcnJvcihyZXNwb25zZSkge1xuICAgICAgcmV0dXJuIHJlc3BvbnNlPy5zdGF0dXMgPT09IDQwMVxuICAgIH0sXG5cbiAgICBhc3luYyBoYW5kbGVSZXF1ZXN0KFxuICAgICAge1xuICAgICAgICBtZXRob2QsXG4gICAgICAgIHJlc291cmNlID0gdGhpcy5yZXNvdXJjZSxcbiAgICAgICAgcXVlcnksXG4gICAgICAgIGRhdGFcbiAgICAgIH0sXG4gICAgICBjYWxsYmFja1xuICAgICkge1xuICAgICAgY29uc3QgbG9hZGluZ09wdGlvbnMgPSB7XG4gICAgICAgIHVwZGF0ZVJvb3Q6IHRydWUsIC8vIERpc3BsYXkgc3Bpbm5lciBpbiBoZWFkZXIgd2hlbiBsb2FkaW5nIGluIHJlc291cmNlc1xuICAgICAgICB1cGRhdGVWaWV3OiB0aGlzLmlzSW5WaWV3IC8vIE5vdGlmeSB2aWV3IG9mIGxvYWRpbmcgZm9yIHZpZXcgY29tcG9uZW50c1xuICAgICAgfVxuICAgICAgdGhpcy5hYm9ydENvbnRyb2xsZXI/LmFib3J0KClcbiAgICAgIGNvbnN0IGNvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKClcbiAgICAgIHRoaXMuYWJvcnRDb250cm9sbGVyID0gY29udHJvbGxlclxuICAgICAgY29uc3QgeyBzaWduYWwgfSA9IGNvbnRyb2xsZXJcbiAgICAgIGNvbnN0IHJlcXVlc3QgPSB7IG1ldGhvZCwgcmVzb3VyY2UsIHF1ZXJ5LCBkYXRhLCBzaWduYWwgfVxuICAgICAgdGhpcy5zZXRMb2FkaW5nKHRydWUsIGxvYWRpbmdPcHRpb25zKVxuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnNlbmRSZXF1ZXN0KHJlcXVlc3QpXG4gICAgICAgIC8vIFBhc3MgYm90aCByZXF1ZXN0IGFuZCByZXNwb25zZSB0byB0aGUgY2FsbGJhY2ssIHNvIHRoZXkgY2FuIGJlXG4gICAgICAgIC8vIGV4cG9zZWQgdG8gZnVydGhlciBjYWxsYmFja3MgdGhyb3VnaCBEaXRvQ29udGV4dC5cbiAgICAgICAgY2FsbGJhY2sobnVsbCwgcmVzcG9uc2UpXG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBpZiAoZXJyb3IubmFtZSAhPT0gJ0Fib3J0RXJyb3InKSB7XG4gICAgICAgICAgLy8gSWYgY2FsbGJhY2sgcmV0dXJucyB0cnVlLCBlcnJvcnMgd2VyZSBhbHJlYWR5IGhhbmRsZWQuXG4gICAgICAgICAgY29uc3QgeyByZXNwb25zZSB9ID0gZXJyb3JcbiAgICAgICAgICBpZiAoIWNhbGxiYWNrKGVycm9yLCByZXNwb25zZSkpIHtcbiAgICAgICAgICAgIGNvbnN0IGRhdGEgPSByZXNwb25zZT8uZGF0YVxuICAgICAgICAgICAgY29uc3QgdGl0bGUgPSBpc1N0cmluZyhkYXRhPy50eXBlKVxuICAgICAgICAgICAgICA/IGxhYmVsaXplKGRhdGEudHlwZSlcbiAgICAgICAgICAgICAgOiAnRXJyb3InXG4gICAgICAgICAgICBjb25zdCB0ZXh0ID0gZGF0YT8ubWVzc2FnZSA/PyBlcnJvclxuICAgICAgICAgICAgdGhpcy5ub3RpZnkoeyB0eXBlOiAnZXJyb3InLCB0aXRsZSwgdGV4dCB9KVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHRoaXMuYWJvcnRDb250cm9sbGVyID09PSBjb250cm9sbGVyKSB7XG4gICAgICAgIC8vIE9ubHkgY2xlYXIgdGhlIGxvYWRpbmcgc3RhdGUgaWYgdGhpcyBpcyBzdGlsbCB0aGUgY3VycmVudCByZXF1ZXN0LlxuICAgICAgICB0aGlzLmFib3J0Q29udHJvbGxlciA9IG51bGxcbiAgICAgICAgdGhpcy5zZXRMb2FkaW5nKGZhbHNlLCBsb2FkaW5nT3B0aW9ucylcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZ2V0UGF5bG9hZERhdGEoYnV0dG9uLCBtZXRob2QpIHtcbiAgICAgIC8vIENvbnZlbnRpb246IG9ubHkgcG9zdCwgcHV0IGFuZCBwYXRjaCByZXF1ZXN0cyBwYXNzIHRoZSBkYXRhIGFzIHBheWxvYWQuXG4gICAgICByZXR1cm4gKFxuICAgICAgICBbJ3Bvc3QnLCAncHV0JywgJ3BhdGNoJ10uaW5jbHVkZXMobWV0aG9kKSAmJiAoXG4gICAgICAgICAgLy8gVE9ETzogVXNlIGBoYW5kbGVEYXRhU2NoZW1hKClgIGFzeW5jaHJvbm91c2x5IGhlcmUgaW5zdGVhZCwgdG9cbiAgICAgICAgICAvLyBvZmZlciB0aGUgc2FtZSBhbW91bnQgb2YgcG9zc2liaWxpdGllcyBmb3IgZGF0YSBsb2FkaW5nLlxuICAgICAgICAgIGJ1dHRvbi5nZXRTY2hlbWFWYWx1ZShbJ3Jlc291cmNlJywgJ2RhdGEnXSkgfHxcbiAgICAgICAgICBidXR0b24ucHJvY2Vzc2VkSXRlbVxuICAgICAgICApXG4gICAgICApXG4gICAgfSxcblxuICAgIGFzeW5jIHN1Ym1pdChidXR0b24pIHtcbiAgICAgIGNvbnN0IHJlc291cmNlID0gZ2V0UmVzb3VyY2UoYnV0dG9uLnNjaGVtYS5yZXNvdXJjZSwge1xuICAgICAgICBwYXJlbnQ6IHRoaXMucmVzb3VyY2VcbiAgICAgIH0pXG4gICAgICBpZiAocmVzb3VyY2UpIHtcbiAgICAgICAgY29uc3QgeyBtZXRob2QgfSA9IHJlc291cmNlXG4gICAgICAgIGNvbnN0IGRhdGEgPSB0aGlzLmdldFBheWxvYWREYXRhKGJ1dHRvbiwgbWV0aG9kKVxuICAgICAgICByZXR1cm4gdGhpcy5zdWJtaXRSZXNvdXJjZShidXR0b24sIHJlc291cmNlLCBtZXRob2QsIGRhdGEpXG4gICAgICB9XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9LFxuXG4gICAgYXN5bmMgc3VibWl0UmVzb3VyY2UoYnV0dG9uLCByZXNvdXJjZSwgbWV0aG9kLCBkYXRhLCB7XG4gICAgICBzZXREYXRhID0gZmFsc2UsXG4gICAgICBvblN1Y2Nlc3MsXG4gICAgICBvbkVycm9yLFxuICAgICAgbm90aWZ5U3VjY2VzcyA9ICgpID0+XG4gICAgICAgIHRoaXMubm90aWZ5KHtcbiAgICAgICAgICB0eXBlOiAnc3VjY2VzcycsXG4gICAgICAgICAgdGl0bGU6ICdSZXF1ZXN0IFN1Y2Nlc3NmdWwnLFxuICAgICAgICAgIHRleHQ6ICdSZXF1ZXN0IHdhcyBzdWNjZXNzZnVsbHkgc2VudC4nXG4gICAgICAgIH0pLFxuICAgICAgbm90aWZ5RXJyb3IgPSBlcnJvciA9PlxuICAgICAgICB0aGlzLm5vdGlmeSh7XG4gICAgICAgICAgdHlwZTogJ2Vycm9yJyxcbiAgICAgICAgICB0aXRsZTogJ1JlcXVlc3QgRXJyb3InLFxuICAgICAgICAgIHRleHQ6IFtcbiAgICAgICAgICAgIGBVbmFibGUgdG8gc2VuZCByZXF1ZXN0JHtlcnJvciA/ICc6JyA6ICcnfWAsXG4gICAgICAgICAgICBlcnJvcj8ubWVzc2FnZSB8fCBlcnJvclxuICAgICAgICAgIF1cbiAgICAgICAgfSlcbiAgICB9ID0ge30pIHtcbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcbiAgICAgICAgdGhpcy5oYW5kbGVSZXF1ZXN0KFxuICAgICAgICAgIHsgbWV0aG9kLCByZXNvdXJjZSwgZGF0YSB9LFxuICAgICAgICAgIGFzeW5jIChlcnIsIHJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBkYXRhID0gcmVzcG9uc2U/LmRhdGFcbiAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgLy8gU2VlIGlmIHdlJ3JlIGRlYWxpbmcgd2l0aCBhIERpdG8gdmFsaWRhdGlvbiBlcnJvcjpcbiAgICAgICAgICAgICAgY29uc3QgZXJyb3JzID0gdGhpcy5pc1ZhbGlkYXRpb25FcnJvcihyZXNwb25zZSkgJiYgZGF0YS5lcnJvcnNcbiAgICAgICAgICAgICAgaWYgKGVycm9ycykge1xuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuc2hvd1ZhbGlkYXRpb25FcnJvcnMoZXJyb3JzLCB0cnVlKVxuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IGVycm9yID0gaXNPYmplY3QoZGF0YSkgPyBkYXRhIDogZXJyXG4gICAgICAgICAgICAgICAgb25FcnJvcj8uKGVycm9yKVxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuZW1pdEJ1dHRvbkV2ZW50KGJ1dHRvbiwgJ2Vycm9yJywge1xuICAgICAgICAgICAgICAgICAgbm90aWZ5OiBub3RpZnlFcnJvcixcbiAgICAgICAgICAgICAgICAgIGVycm9yXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZXNvbHZlKGZhbHNlKVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgLy8gVXBkYXRlIHRoZSB1bmRlcmx5aW5nIGRhdGEgYmVmb3JlIGNhbGxpbmcgYG5vdGlmeSgpYCBvclxuICAgICAgICAgICAgICAvLyBgdGhpcy5pdGVtTGFiZWxgLCBzbyBpZCBpcyBzZXQgYWZ0ZXIgY3JlYXRpbmcgbmV3IGl0ZW1zLlxuICAgICAgICAgICAgICBpZiAoc2V0RGF0YSAmJiBkYXRhKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXREYXRhKGRhdGEpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgb25TdWNjZXNzPy4oKVxuICAgICAgICAgICAgICBhd2FpdCB0aGlzLmVtaXRCdXR0b25FdmVudChidXR0b24sICdzdWNjZXNzJywge1xuICAgICAgICAgICAgICAgIG5vdGlmeTogbm90aWZ5U3VjY2Vzc1xuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICByZXNvbHZlKHRydWUpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICApXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlbWl0QnV0dG9uRXZlbnQoYnV0dG9uLCBldmVudCwgeyBub3RpZnksIGVycm9yIH0pIHtcbiAgICAgIC8vIENyZWF0ZSB0aGUgY29udGV4dCBvdXRzaWRlIG9mIGBlbWl0RXZlbnQoKWAsIHNvIHRoYXRcbiAgICAgIC8vIGBjb250ZXh0Lndhc05vdGlmaWVkYCBjYW4gYmUgY2hlY2tlZCBhZnRlci5cbiAgICAgIGNvbnN0IGNvbnRleHQgPSBuZXcgRGl0b0NvbnRleHQoYnV0dG9uLCB7XG4gICAgICAgIG5lc3RlZDogZmFsc2UsXG4gICAgICAgIGRhdGE6IHRoaXMuZGF0YSxcbiAgICAgICAgaXRlbUxhYmVsOiB0aGlzLml0ZW1MYWJlbCxcbiAgICAgICAgZXJyb3JcbiAgICAgIH0pXG4gICAgICBjb25zdCByZXMgPSBhd2FpdCBidXR0b24uZW1pdEV2ZW50KGV2ZW50LCB7IGNvbnRleHQgfSlcbiAgICAgIGlmIChcbiAgICAgICAgbm90aWZ5ICYmXG4gICAgICAgIC8vIFByZXZlbnQgZGVmYXVsdCBpZiBhbnl0aGluZyB3YXMgcmV0dXJuZWQgZnJvbSB0aGUgZXZlbnQgaGFuZGxlci5cbiAgICAgICAgcmVzID09PSB1bmRlZmluZWQgJiZcbiAgICAgICAgLy8gRG8gbm90IGRpc3BsYXkgZGVmYXVsdCBub3RpZmljYXRpb24gaWYgdGhlIGV2ZW50IGhhbmRsZXIgYWxyZWFkeVxuICAgICAgICAvLyBkaXNwbGF5ZWQgYSBub3RpZmljYXRpb24uXG4gICAgICAgICFjb250ZXh0Lndhc05vdGlmaWVkXG4gICAgICApIHtcbiAgICAgICAgbm90aWZ5KGVycm9yKVxuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc1xuICAgIH1cbiAgfVxufVxuIiwiZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVQYXRoKHBhdGgpIHtcbiAgLy8gRm9yIHBhdGhzIHN0YXJpbmcgd2l0aCBgL2AsIHdlIGNhbiB1c2UgdGhlIG5hdGl2ZSBgVVJMKClgIGNsYXNzIHRvIHJlc29sdmVcbiAgLy8gdGhlIHBhdGgsIHdoaWNoIHdpbGwgYWxzbyBoYW5kbGUgYC4uYCBhbmQgYC5gIHNlZ21lbnRzOlxuICByZXR1cm4gbmV3IFVSTChgZmlsZToke3BhdGh9YCkucGF0aG5hbWVcbn1cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4uZGl0by1mb3JtLmRpdG8tc2Nyb2xsLXBhcmVudChcbiAgOmNsYXNzPVwieyAnZGl0by1mb3JtLW5lc3RlZCc6IGlzTmVzdGVkUm91dGUgfVwiXG4gIDpkYXRhLXJlc291cmNlPVwic291cmNlU2NoZW1hLnBhdGhcIlxuKVxuICAvLy0gTk9URTogTmVzdGVkIGZvcm0gY29tcG9uZW50cyBhcmUga2VwdCBhbGl2ZSBieSB1c2luZyBgdi1zaG93YCBpbnN0ZWFkIG9mXG4gIC8vLSBgdi1pZmAgaGVyZSwgc28gZXZlbnQgaGFuZGxpbmcgYW5kIG90aGVyIHRoaW5ncyBzdGlsbCB3b3JrIHdpdGggbmVzdGVkXG4gIC8vLSBlZGl0aW5nLiBPbmx5IHJlbmRlciBhIHJvdXRlci12aWV3IGhlcmUgaWYgdGhpcyBpc24ndCB0aGUgbGFzdCBkYXRhIHJvdXRlXG4gIC8vLSBhbmQgbm90IGEgbmVzdGVkIGZvcm0gcm91dGUsIHdoaWNoIHdpbGwgYXBwZWFyIGVsc2V3aGVyZSBpbiBpdHMgb3duIHZpZXcuXG4gIFJvdXRlclZpZXcoXG4gICAgdi1pZj1cIiEoaXNMYXN0VW5uZXN0ZWRSb3V0ZSB8fCBpc05lc3RlZFJvdXRlKVwiXG4gICAgdi1zaG93PVwiIWlzQWN0aXZlXCJcbiAgKVxuICAvLy0gVXNlIGEgPGRpdj4gZm9yIGlubGluZWQgZm9ybXMsIGFzIHdlIHNob3VsZG4ndCBuZXN0IGFjdHVhbCA8Zm9ybT4gdGFncy5cbiAgY29tcG9uZW50KFxuICAgIHYtc2hvdz1cImlzQWN0aXZlXCJcbiAgICA6aXM9XCJpc05lc3RlZFJvdXRlID8gJ2RpdicgOiAnZm9ybSdcIlxuICAgIDpjbGFzcz1cInsgJ2RpdG8tc2Nyb2xsLXBhcmVudCc6IGlzUm9vdEZvcm0gfVwiXG4gICAgQHN1Ym1pdC5wcmV2ZW50XG4gIClcbiAgICAvLy0gUHJldmVudCBpbXBsaWNpdCBzdWJtaXNzaW9uIG9mIHRoZSBmb3JtLCBmb3IgZXhhbXBsZSB3aGVuIHR5cGluZyBlbnRlclxuICAgIC8vLSBpbiBhbiBpbnB1dCBmaWVsZC5cbiAgICAvLy0gaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9hLzUxNTA3ODA2XG4gICAgYnV0dG9uKFxuICAgICAgdi1zaG93PVwiZmFsc2VcIlxuICAgICAgdHlwZT1cInN1Ym1pdFwiXG4gICAgICBkaXNhYmxlZFxuICAgIClcbiAgICBEaXRvU2NoZW1hKFxuICAgICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgICA6ZGF0YT1cImRhdGFcIlxuICAgICAgOm1ldGE9XCJtZXRhXCJcbiAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgIDpwYWRkaW5nPVwiaXNOZXN0ZWRSb3V0ZSA/ICduZXN0ZWQnIDogJ3Jvb3QnXCJcbiAgICAgIDpkaXNhYmxlZD1cImlzTG9hZGluZ1wiXG4gICAgICA6c2Nyb2xsYWJsZT1cImlzUm9vdEZvcm1cIlxuICAgICAgZ2VuZXJhdGVMYWJlbHNcbiAgICApXG4gICAgICB0ZW1wbGF0ZSgjYnV0dG9ucylcbiAgICAgICAgRGl0b0J1dHRvbnMuZGl0by1idXR0b25zLXJvdW5kLmRpdG8tYnV0dG9ucy1sYXJnZS5kaXRvLWJ1dHRvbnMtbWFpbihcbiAgICAgICAgICA6Y2xhc3M9XCJ7ICdkaXRvLWJ1dHRvbnMtc3RpY2t5JzogaXNSb290Rm9ybSB9XCJcbiAgICAgICAgICA6YnV0dG9ucz1cImJ1dHRvblNjaGVtYXNcIlxuICAgICAgICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICAgICAgICA6ZGF0YT1cImRhdGFcIlxuICAgICAgICAgIDptZXRhPVwibWV0YVwiXG4gICAgICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgICAgICAgIDpkaXNhYmxlZD1cImlzTG9hZGluZ1wiXG4gICAgICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgeyBjbG9uZSwgY2FwaXRhbGl6ZSwgcGFyc2VEYXRhUGF0aCwgYXNzaWduRGVlcGx5IH0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgUm91dGVNaXhpbiBmcm9tICcuLi9taXhpbnMvUm91dGVNaXhpbi5qcydcbmltcG9ydCBSZXNvdXJjZU1peGluIGZyb20gJy4uL21peGlucy9SZXNvdXJjZU1peGluLmpzJ1xuaW1wb3J0IHsgZ2V0UmVzb3VyY2UsIGdldE1lbWJlclJlc291cmNlIH0gZnJvbSAnLi4vdXRpbHMvcmVzb3VyY2UuanMnXG5pbXBvcnQgeyBnZXRCdXR0b25TY2hlbWFzLCBpc09iamVjdFNvdXJjZSB9IGZyb20gJy4uL3V0aWxzL3NjaGVtYS5qcydcbmltcG9ydCB7IHJlc29sdmVQYXRoIH0gZnJvbSAnLi4vdXRpbHMvcGF0aC5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdEaXRvRm9ybScsIHtcbiAgbWl4aW5zOiBbUm91dGVNaXhpbiwgUmVzb3VyY2VNaXhpbl0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgY3JlYXRlZERhdGE6IG51bGwsXG4gICAgICBjbG9uZWREYXRhOiB1bmRlZmluZWQsXG4gICAgICBzb3VyY2VLZXk6IG51bGwsXG4gICAgICBpc0Zvcm06IHRydWVcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICB2ZXJicygpIHtcbiAgICAgIC8vIEFkZCBzdWJtaXQgLyBzdWJtaXR0ZWQgdG8gdGhlIHZlcmJzIHJldHVybmVkIGJ5IFJlc291cmNlTWl4aW5cbiAgICAgIC8vIE5PVEU6IFRoZXNlIGdldCBwYXNzZWQgb24gdG8gY2hpbGRyZW4gdGhyb3VnaDpcbiAgICAgIC8vIGBwcm92aWRlKCkgLi4uIHsgJHZlcmJzOiAoKSA9PiB0aGlzLnZlcmJzIH1gIGluIFJlc291cmNlTWl4aW5cbiAgICAgIGNvbnN0IHZlcmJzID0gdGhpcy5nZXRWZXJicygpXG4gICAgICBjb25zdCB7IGlzQ3JlYXRpbmcsIHByb3ZpZGVzRGF0YSB9ID0gdGhpc1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4udmVyYnMsXG4gICAgICAgIHN1Ym1pdDogaXNDcmVhdGluZyA/IHZlcmJzLmNyZWF0ZSA6IHZlcmJzLnNhdmUsXG4gICAgICAgIHN1Ym1pdHRlZDogaXNDcmVhdGluZyA/IHZlcmJzLmNyZWF0ZWQgOiB2ZXJicy5zYXZlZCxcbiAgICAgICAgY2FuY2VsOiBwcm92aWRlc0RhdGEgPyB2ZXJicy5jYW5jZWwgOiB2ZXJicy5jbG9zZSxcbiAgICAgICAgY2FuY2VsbGVkOiBwcm92aWRlc0RhdGEgPyB2ZXJicy5jYW5jZWxsZWQgOiB2ZXJicy5jbG9zZWRcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgc2NoZW1hKCkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgdGhpcy5nZXRJdGVtRm9ybVNjaGVtYShcbiAgICAgICAgICB0aGlzLnNvdXJjZVNjaGVtYSxcbiAgICAgICAgICAvLyBJZiB0aGVyZSBpcyBubyBkYXRhIHlldCwgcHJvdmlkZSBhbiBlbXB0eSBvYmplY3Qgd2l0aCBqdXN0IHRoZVxuICAgICAgICAgIC8vIHJpZ2h0IHR5cGUgc2V0LCBzbyB0aGUgZm9ybSBjYW4gYWx3YXlzIGJlIGRldGVybWluZWQuXG4gICAgICAgICAgdGhpcy5kYXRhIHx8IHsgdHlwZTogdGhpcy50eXBlIH0sXG4gICAgICAgICAgdGhpcy5jb250ZXh0XG4gICAgICAgICkgfHwge31cbiAgICAgICkgLy8gQWx3YXlzIHJldHVybiBhIHNjaGVtYSBvYmplY3Qgc28gd2UgZG9uJ3QgbmVlZCB0byBjaGVjayBmb3IgaXQuXG4gICAgfSxcblxuICAgIGJ1dHRvblNjaGVtYXMoKSB7XG4gICAgICByZXR1cm4gZ2V0QnV0dG9uU2NoZW1hcyhcbiAgICAgICAgYXNzaWduRGVlcGx5KFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNhbmNlbDoge1xuICAgICAgICAgICAgICB0eXBlOiAnYnV0dG9uJyxcbiAgICAgICAgICAgICAgZXZlbnRzOiB7XG4gICAgICAgICAgICAgICAgY2xpY2s6ICgpID0+IHRoaXMuY2FuY2VsKClcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgc3VibWl0OiAhdGhpcy5pc011dGF0aW5nICYmIHtcbiAgICAgICAgICAgICAgdHlwZTogJ3N1Ym1pdCcsXG4gICAgICAgICAgICAgIC8vIFN1Ym1pdCBidXR0b25zIGNsb3NlIHRoZSBmb3JtIGJ5IGRlZmF1bHQ6XG4gICAgICAgICAgICAgIGNsb3NlRm9ybTogdHJ1ZSxcbiAgICAgICAgICAgICAgZXZlbnRzOiB7XG4gICAgICAgICAgICAgICAgY2xpY2s6ICh7IGNvbXBvbmVudDogYnV0dG9uIH0pID0+IGJ1dHRvbi5zdWJtaXQoKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICB0aGlzLnNjaGVtYS5idXR0b25zXG4gICAgICAgIClcbiAgICAgIClcbiAgICB9LFxuXG4gICAgaXNSb290Rm9ybSgpIHtcbiAgICAgIHJldHVybiB0aGlzLmRhdGFQYXRoID09PSAnJyAmJiAhdGhpcy5pc05lc3RlZFJvdXRlXG4gICAgfSxcblxuICAgIGlzQWN0aXZlKCkge1xuICAgICAgcmV0dXJuIHRoaXMuaXNMYXN0Um91dGUgfHwgdGhpcy5pc0xhc3RVbm5lc3RlZFJvdXRlXG4gICAgfSxcblxuICAgIGlzVHJhbnNpZW50KCkge1xuICAgICAgcmV0dXJuICF0aGlzLnByb3ZpZGVzRGF0YVxuICAgIH0sXG5cbiAgICBpc0NyZWF0aW5nKCkge1xuICAgICAgLy8gdGhpcy5wYXJhbSBpcyBpbmhlcml0ZWQgZnJvbSBSb3V0ZU1peGluXG4gICAgICByZXR1cm4gdGhpcy5wYXJhbSA9PT0gJ2NyZWF0ZSdcbiAgICB9LFxuXG4gICAgaXNEaXJ0eSgpIHtcbiAgICAgIHJldHVybiAhdGhpcy5pc011dGF0aW5nICYmICEhdGhpcy5tYWluU2NoZW1hQ29tcG9uZW50Py5pc0RpcnR5XG4gICAgfSxcblxuICAgIGlzTXV0YXRpbmcoKSB7XG4gICAgICAvLyBXaGVuIGBzb3VyY2VTY2hlbWEubXV0YXRlYCBpcyB0cnVlLCB0aGUgZm9ybSBlZGl0cyB0aGUgaW5oZXJpdGVkIGRhdGFcbiAgICAgIC8vIGRpcmVjdGx5IGluc3RlYWQgb2YgbWFraW5nIGEgY29weSBmb3IgcGVyc2lzdGVuY2UgdXBvbiBzdWJtaXNzaW9uLlxuICAgICAgLy8gU2VlIGBpbmhlcml0ZWREYXRhKClgIGNvbXB1dGVkIHByb3BlcnR5IGZvciBtb3JlIGRldGFpbHMuXG4gICAgICByZXR1cm4gISF0aGlzLnNvdXJjZVNjaGVtYS5tdXRhdGVcbiAgICB9LFxuXG4gICAgc2VsZWN0ZWRUYWIoKSB7XG4gICAgICByZXR1cm4gdGhpcy5tYWluU2NoZW1hQ29tcG9uZW50Py5zZWxlY3RlZFRhYiB8fCBudWxsXG4gICAgfSxcblxuICAgIHR5cGUoKSB7XG4gICAgICAvLyBUaGUgdHlwZSBvZiBmb3JtIHRvIGNyZWF0ZSwgaWYgdGhlcmUgYXJlIG11bHRpcGxlIGZvcm1zIHRvIGNob29zZSBmcm9tLlxuICAgICAgcmV0dXJuIHRoaXMuJHJvdXRlLnF1ZXJ5LnR5cGVcbiAgICB9LFxuXG4gICAgaXRlbUlkKCkge1xuICAgICAgcmV0dXJuIHRoaXMuaXNDcmVhdGluZ1xuICAgICAgICA/IG51bGxcbiAgICAgICAgOiB0aGlzLnBhcmFtID8/IG51bGxcbiAgICB9LFxuXG4gICAgbWV0aG9kKCkge1xuICAgICAgcmV0dXJuIHRoaXMuaXNDcmVhdGluZyA/ICdwb3N0JyA6ICdwYXRjaCdcbiAgICB9LFxuXG4gICAgcmVzb3VyY2UoKSB7XG4gICAgICBjb25zdCByZXNvdXJjZSA9IHRoaXMuZ2V0UmVzb3VyY2UoKVxuICAgICAgcmV0dXJuIGdldE1lbWJlclJlc291cmNlKHRoaXMuaXRlbUlkLCByZXNvdXJjZSkgfHwgcmVzb3VyY2VcbiAgICB9LFxuXG4gICAgYnJlYWRjcnVtYlByZWZpeCgpIHtcbiAgICAgIHJldHVybiBjYXBpdGFsaXplKHRoaXMuaXNDcmVhdGluZyA/IHRoaXMudmVyYnMuY3JlYXRlIDogdGhpcy52ZXJicy5lZGl0KVxuICAgIH0sXG5cbiAgICBkYXRhKCkge1xuICAgICAgLy8gUmV0dXJuIGRpZmZlcmVudCBkYXRhIFwiY29udGFpbmVyc1wiIGJhc2VkIG9uIGRpZmZlcmVudCBzY2VuYXJpb3M6XG4gICAgICAvLyAxLiBjcmVhdGVkRGF0YSwgaWYgd2UncmUgaW4gYSBmb3JtIGZvciBhIG5ld2x5IGNyZWF0ZWQgb2JqZWN0LlxuICAgICAgLy8gMi4gbG9hZGVkRGF0YSwgaWYgdGhlIGZvcm0gaXRzZWxmIGlzIHRoZSByb290IG9mIHRoZSBkYXRhIChlLmcuIHdoZW5cbiAgICAgIC8vICAgIGRpcmVjdGx5IGxvYWRpbmcgYW4gZWRpdGluZyByb290KS5cbiAgICAgIC8vIDMuIFRoZSBkYXRhIGluaGVyaXRlZCBmcm9tIHRoZSBwYXJlbnQsIHdoaWNoIGl0c2VsZiBtYXkgYmUgZWl0aGVyIGFcbiAgICAgIC8vICAgIHZpZXcgdGhhdCBsb2FkZWQgdGhlIGRhdGEsIG9yIGEgZm9ybSB0aGF0IGVpdGhlciBsb2FkZWQgdGhlIGRhdGEsIG9yXG4gICAgICAvLyAgICBhbHNvIGluaGVyaXRlZCBpdCBmcm9tIGl0cyBwYXJlbnQuIE5vdGUgdGhhdCB3ZSB1c2UgYSBjbG9uZSBvZiBpdCxcbiAgICAgIC8vICAgIHNvLCBkYXRhIGNoYW5nZXMgYXJlbid0IGFwcGxpZWQgdW50aWwgc2V0U291cmNlRGF0YSgpIGlzIGNhbGxlZC5cbiAgICAgIHJldHVybiB0aGlzLmNyZWF0ZWREYXRhIHx8IHRoaXMubG9hZGVkRGF0YSB8fCB0aGlzLmluaGVyaXRlZERhdGEgfHwgbnVsbFxuICAgIH0sXG5cbiAgICBkYXRhUGF0aCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldERhdGFQYXRoRnJvbSh0aGlzLmRhdGFDb21wb25lbnQpXG4gICAgfSxcblxuICAgIHNvdXJjZURhdGEoKSB7XG4gICAgICAvLyBQb3NzaWJsZSBwYXJlbnRzIGFyZSBEaXRvRm9ybSBmb3IgZm9ybXMsIG9yIERpdG9WaWV3IGZvciByb290IGxpc3RzLlxuICAgICAgLy8gQm90aCBoYXZlIGEgZGF0YSBwcm9wZXJ0eSB3aGljaCBhYnN0cmFjdHMgYXdheSBsb2FkaW5nIGFuZCBpbmhlcml0aW5nXG4gICAgICAvLyBvZiBkYXRhLlxuICAgICAgLy8gRm9ybXMgdGhhdCBhcmUgYWJvdXQgdG8gYmUgZGVzdHJveWVkIGR1ZSB0byBuYXZpZ2F0aW9uIGxvb3NlIHRoZWlyXG4gICAgICAvLyByb3V0ZS1yZWNvcmQsIGJ1dCBtaWdodCBzdGlsbCB0cmlnZ2VyIHRoaXMgZ2V0dGVyLiBGaWx0ZXIgdGhvc2Ugb3V0LlxuICAgICAgbGV0IGRhdGEgPSB0aGlzLnJvdXRlUmVjb3JkID8gdGhpcy5wYXJlbnRSb3V0ZUNvbXBvbmVudC5kYXRhIDogbnVsbFxuICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgLy8gSGFuZGxlIG5lc3RlZCBkYXRhIGJ5IHNwbGl0dGluZyB0aGUgZGF0YVBhdGgsIGl0ZXJhdGUgdGhyb3VnaCB0aGVcbiAgICAgICAgLy8gYWN0dWFsIGRhdGEgYW5kIGxvb2sgbmVzdCBjaGlsZC1kYXRhIHVwLlxuICAgICAgICBjb25zdCBkYXRhUGFydHMgPSBwYXJzZURhdGFQYXRoKFxuICAgICAgICAgIHRoaXMuZ2V0RGF0YVBhdGhGcm9tKHRoaXMucGFyZW50Um91dGVDb21wb25lbnQpXG4gICAgICAgIClcbiAgICAgICAgLy8gQ29tcGFyZSBkYXRhUGFydHMgYWdhaW5zdCBtYXRjaGVkIHJvdXRlUGF0aCBwYXJ0cywgdG8gaWRlbnRpZnkgdGhvc2VcbiAgICAgICAgLy8gcGFydHMgdGhhdCBuZWVkIHRvIGJlIHRyZWF0ZWQgbGlrZSBpZHMgYW5kIG1hcHBlZCB0byBpbmRpY2VzIGluIGRhdGEuXG4gICAgICAgIGNvbnN0IHBhdGhQYXJ0cyA9IHRoaXMucm91dGVSZWNvcmQucGF0aC5zcGxpdCgnLycpXG4gICAgICAgIGNvbnN0IHJvdXRlUGFydHMgPSBwYXRoUGFydHMuc2xpY2UocGF0aFBhcnRzLmxlbmd0aCAtIGRhdGFQYXJ0cy5sZW5ndGgpXG4gICAgICAgIC8vIFRPRE86IEZpeCBzaWRlLWVmZmVjdHNcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHZ1ZS9uby1zaWRlLWVmZmVjdHMtaW4tY29tcHV0ZWQtcHJvcGVydGllc1xuICAgICAgICB0aGlzLnNvdXJjZUtleSA9IG51bGxcbiAgICAgICAgY29uc3QgbGFzdERhdGFQYXJ0ID0gZGF0YVBhcnRzW2RhdGFQYXJ0cy5sZW5ndGggLSAxXVxuICAgICAgICBpZiAoaXNPYmplY3RTb3VyY2UodGhpcy5zb3VyY2VTY2hlbWEpICYmIGxhc3REYXRhUGFydCA9PT0gJ2NyZWF0ZScpIHtcbiAgICAgICAgICAvLyBJZiB3ZSBoYXZlIGFuIG9iamVjdCBzb3VyY2UgYW5kIGFyZSBjcmVhdGluZywgdGhlIGRhdGFQYXRoIG5lZWRzIHRvXG4gICAgICAgICAgLy8gYmUgc2hvcnRlbmVkIGJ5IHRoZSAnY3JlYXRlJyBlbnRyeS4gVGhpcyBpc24ndCBuZWVkZWQgZm9yIGxpc3RcbiAgICAgICAgICAvLyBzb3VyY2VzLCBhcyB0aGVyZSB0aGUgcGFyYW1ldGVyIGlzIGFjdHVhbGx5IG1hcHBlZCB0byB0aGUgaXRlbSBpZC5cbiAgICAgICAgICBkYXRhUGFydHMubGVuZ3RoLS1cbiAgICAgICAgfVxuICAgICAgICBmb3IgKGxldCBpID0gMCwgbCA9IGRhdGFQYXJ0cy5sZW5ndGg7IGkgPCBsICYmIGRhdGE7IGkrKykge1xuICAgICAgICAgIGNvbnN0IGRhdGFQYXJ0ID0gZGF0YVBhcnRzW2ldXG4gICAgICAgICAgLy8gSWYgdGhpcyBpcyBhbiA6aWQgcGFydCwgZmluZCB0aGUgaW5kZXggb2YgdGhlIGl0ZW0gd2l0aCBnaXZlbiBpZC5cbiAgICAgICAgICBjb25zdCBrZXkgPSAvXjppZC8udGVzdChyb3V0ZVBhcnRzW2ldKVxuICAgICAgICAgICAgPyBkYXRhUGFydCA9PT0gJ2NyZWF0ZSdcbiAgICAgICAgICAgICAgPyBudWxsIC8vIFRoZXJlJ3Mgbm8gaW5kZXggZm9yIGVudHJpZXMgYWJvdXQgdG8gYmUgY3JlYXRlZFxuICAgICAgICAgICAgICA6IHRoaXMuZmluZEl0ZW1JZEluZGV4KHRoaXMuc291cmNlU2NoZW1hLCBkYXRhLCBkYXRhUGFydClcbiAgICAgICAgICAgIDogZGF0YVBhcnRcbiAgICAgICAgICAvLyBTa2lwIHRoZSBmaW5hbCBsb29rdXAgYnV0IHJlbWVtYmVyIGBzb3VyY2VLZXlgLCBhcyB3ZSB3YW50IHRoZVxuICAgICAgICAgIC8vIHBhcmVudCBkYXRhIHNvIHdlIGNhbiByZXBsYWNlIHRoZSBlbnRyeSBhdCBgc291cmNlS2V5YCBvbiBpdC5cbiAgICAgICAgICBpZiAoaSA9PT0gbCAtIDEpIHtcbiAgICAgICAgICAgIC8vIFRPRE86IEZpeCBzaWRlLWVmZmVjdHNcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZVxuICAgICAgICAgICAgdGhpcy5zb3VyY2VLZXkgPSBrZXlcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZGF0YSA9IGRhdGFba2V5XVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGRhdGFcbiAgICB9LFxuXG4gICAgaW5oZXJpdGVkRGF0YSgpIHtcbiAgICAgIC8vIERhdGEgaW5oZXJpdGVkIGZyb20gcGFyZW50LCBhbmQgY2xvbmVkIHRvIHByb3RlY3QgYWdhaW5zdCByZWFjdGl2ZVxuICAgICAgLy8gY2hhbmdlcyB1bnRpbCBjaGFuZ2VzIGFyZSBhcHBsaWVkIHRocm91Z2ggc2V0U291cmNlRGF0YSgpLCB1bmxlc3NcbiAgICAgIC8vIGBzb3VyY2VTY2hlbWEubXV0YXRlYCBpcyB0cnVlLCBpbiB3aGljaCBjYXNlIGRhdGEgaXMgbXV0YXRlZCBkaXJlY3RseS5cbiAgICAgIGlmIChcbiAgICAgICAgdGhpcy5pc1RyYW5zaWVudCAmJlxuICAgICAgICB0aGlzLmNsb25lZERhdGEgPT09IHVuZGVmaW5lZCAmJlxuICAgICAgICB0aGlzLnNvdXJjZURhdGEgJiZcbiAgICAgICAgdGhpcy5zb3VyY2VLZXkgIT09IG51bGxcbiAgICAgICkge1xuICAgICAgICBsZXQgZGF0YSA9IHRoaXMuc291cmNlRGF0YVt0aGlzLnNvdXJjZUtleV1cbiAgICAgICAgaWYgKCF0aGlzLmlzTXV0YXRpbmcpIHtcbiAgICAgICAgICAvLyBVc2UgYSB0cmljayB0byBzdG9yZSBjbG9uZWQgaW5oZXJpdGVkIGRhdGEgaW4gY2xvbmVkRGF0YSwgdG8gbWFrZVxuICAgICAgICAgIC8vIGl0IHJlYWN0aXZlIGFuZCBwcmV2ZW50IGl0IGZyb20gYmVpbmcgY2xvbmVkIG11bHRpcGxlIHRpbWVzLlxuICAgICAgICAgIC8vIFRPRE86IEZpeCBzaWRlLWVmZmVjdHNcbiAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgdnVlL25vLXNpZGUtZWZmZWN0cy1pbi1jb21wdXRlZC1wcm9wZXJ0aWVzXG4gICAgICAgICAgdGhpcy5jbG9uZWREYXRhID0gZGF0YSA9IGNsb25lKGRhdGEpXG4gICAgICAgIH1cbiAgICAgICAgaWYgKFxuICAgICAgICAgIGRhdGEgPT09IG51bGwgJiZcbiAgICAgICAgICAhdGhpcy5pc0NyZWF0aW5nICYmXG4gICAgICAgICAgaXNPYmplY3RTb3VyY2UodGhpcy5zb3VyY2VTY2hlbWEpXG4gICAgICAgICkge1xuICAgICAgICAgIC8vIElmIGRhdGEgb2YgYW4gb2JqZWN0IHNvdXJjZSBpcyBudWxsLCByZWRpcmVjdCB0byBpdHMgY3JlYXRlIHJvdXRlLlxuICAgICAgICAgIC8vIFRPRE86IEZpeCBzaWRlLWVmZmVjdHNcbiAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgdnVlL25vLXNpZGUtZWZmZWN0cy1pbi1jb21wdXRlZC1wcm9wZXJ0aWVzXG4gICAgICAgICAgdGhpcy4kcm91dGVyLnB1c2goeyBwYXRoOiBgJHt0aGlzLnBhdGh9L2NyZWF0ZWAgfSlcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZGF0YVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMuY2xvbmVkRGF0YVxuICAgIH0sXG5cbiAgICAvLyBAb3ZlcnJpZGUgUmVzb3VyY2VNaXhpbi5oYXNEYXRhKClcbiAgICBoYXNEYXRhKCkge1xuICAgICAgcmV0dXJuICEhdGhpcy5kYXRhXG4gICAgfSxcblxuICAgIGl0ZW1MYWJlbCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldEl0ZW1MYWJlbCh0aGlzLnNvdXJjZVNjaGVtYSwgdGhpcy5kYXRhLCB7IGV4dGVuZGVkOiB0cnVlIH0pXG4gICAgfVxuICB9LFxuXG4gIHdhdGNoOiB7XG4gICAgJHJvdXRlOiB7XG4gICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vdnVlanMvdnVlLXJvdXRlci9pc3N1ZXMvMzM5MyNpc3N1ZWNvbW1lbnQtMTE1ODQ3MDE0OVxuICAgICAgZmx1c2g6ICdwb3N0JyxcbiAgICAgIGhhbmRsZXIodG8sIGZyb20pIHtcbiAgICAgICAgLy8gUmVsb2FkIGZvcm0gZGF0YSB3aGVuIG5hdmlnYXRpbmcgdG8gYSBkaWZmZXJlbnQgZW50aXR5IGluIHNhbWUgZm9ybS5cbiAgICAgICAgY29uc3QgcGFyYW0gPSB0aGlzLm1ldGE/LnBhcmFtXG4gICAgICAgIGlmIChcbiAgICAgICAgICBwYXJhbSAmJlxuICAgICAgICAgIHRoaXMucHJvdmlkZXNEYXRhICYmXG4gICAgICAgICAgLy8gVE9ETzogU2VlIGlmIHdlIGNhbiByZW1vdmUgdGhpcyBkdWUgdG8gYGZsdXNoOiAncG9zdCdgLlxuICAgICAgICAgIGZyb20ubWF0Y2hlZFswXS5wYXRoID09PSB0by5tYXRjaGVkWzBdLnBhdGggJiYgLy8gU3RheWluZyBvbiBzYW1lIGZvcm1cbiAgICAgICAgICBmcm9tLnBhcmFtc1twYXJhbV0gIT09ICdjcmVhdGUnICYmIC8vIEJ1dCBoYXZlbid0IGJlZW4gY3JlYXRpbmdcbiAgICAgICAgICB0by5wYXJhbXNbcGFyYW1dICE9PSBmcm9tLnBhcmFtc1twYXJhbV0gLy8gR29pbmcgdG8gYSBkaWZmZXJlbnQgZW50aXR5XG4gICAgICAgICkge1xuICAgICAgICAgIHRoaXMubG9hZERhdGEodHJ1ZSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBzb3VyY2VEYXRhOiAnY2xlYXJDbG9uZWREYXRhJyxcbiAgICAvLyBOZWVkZWQgZm9yIHRoZSAnY3JlYXRlJyByZWRpcmVjdCBpbiBgaW5oZXJpdGVkRGF0YSgpYCB0byB3b3JrOlxuICAgIGNyZWF0ZTogJ3NldHVwRGF0YSdcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZW1pdFNjaGVtYUV2ZW50KGV2ZW50LCBwYXJhbXMpIHtcbiAgICAgIHJldHVybiB0aGlzLm1haW5TY2hlbWFDb21wb25lbnQuZW1pdEV2ZW50KGV2ZW50LCBwYXJhbXMpXG4gICAgfSxcblxuICAgIGdldERhdGFQYXRoRnJvbShyb3V0ZUNvbXBvbmVudCkge1xuICAgICAgLy8gR2V0IHRoZSBkYXRhIHBhdGggYnkgZGVub3JtYWxpemVQYXRoIHRoZSByZWxhdGl2ZSByb3V0ZSBwYXRoXG4gICAgICByZXR1cm4gdGhpcy5hcGkuZGVub3JtYWxpemVQYXRoKFxuICAgICAgICB0aGlzLnBhdGhcbiAgICAgICAgICAvLyBEaXRvVmlld3MgaGF2ZSBuZXN0ZWQgcm91dGVzLCBzbyBkb24ndCByZW1vdmUgdGhlaXIgcGF0aC5cbiAgICAgICAgICAuc2xpY2UoKHJvdXRlQ29tcG9uZW50LmlzVmlldyA/IDAgOiByb3V0ZUNvbXBvbmVudC5wYXRoLmxlbmd0aCkgKyAxKVxuICAgICAgKVxuICAgIH0sXG5cbiAgICAvLyBAb3ZlcnJpZGUgUmVzb3VyY2VNaXhpbi5zZXR1cERhdGEoKVxuICAgIHNldHVwRGF0YSgpIHtcbiAgICAgIGlmICh0aGlzLmlzQ3JlYXRpbmcpIHtcbiAgICAgICAgdGhpcy5jcmVhdGVkRGF0YSB8fD0gdGhpcy5jcmVhdGVEYXRhKHRoaXMuc2NoZW1hLCB0aGlzLnR5cGUpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmVuc3VyZURhdGEoKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBzZXRTb3VyY2VEYXRhKGRhdGEpIHtcbiAgICAgIGlmICh0aGlzLnNvdXJjZURhdGEgJiYgdGhpcy5zb3VyY2VLZXkgIT09IG51bGwpIHtcbiAgICAgICAgY29uc3QgeyBtYWluU2NoZW1hQ29tcG9uZW50IH0gPSB0aGlzXG4gICAgICAgIHRoaXMuc291cmNlRGF0YVt0aGlzLnNvdXJjZUtleV0gPSBtYWluU2NoZW1hQ29tcG9uZW50LmZpbHRlckRhdGEoZGF0YSlcbiAgICAgICAgbWFpblNjaGVtYUNvbXBvbmVudC5vbkNoYW5nZSgpXG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgICB9XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9LFxuXG4gICAgYWRkU291cmNlRGF0YShkYXRhKSB7XG4gICAgICByZXR1cm4gaXNPYmplY3RTb3VyY2UodGhpcy5zb3VyY2VTY2hlbWEpXG4gICAgICAgID8gdGhpcy5zZXRTb3VyY2VEYXRhKGRhdGEpXG4gICAgICAgIDogISF0aGlzLnNvdXJjZURhdGE/LnB1c2goZGF0YSlcbiAgICB9LFxuXG4gICAgLy8gQG92ZXJyaWRlIFJlc291cmNlTWl4aW4uY2xlYXJEYXRhKClcbiAgICBjbGVhckRhdGEoKSB7XG4gICAgICB0aGlzLnNldERhdGEobnVsbClcbiAgICB9LFxuXG4gICAgLy8gQG92ZXJyaWRlIFJlc291cmNlTWl4aW4uc2V0RGF0YSgpXG4gICAgc2V0RGF0YShkYXRhKSB7XG4gICAgICAvLyBzZXREYXRhKCkgaXMgY2FsbGVkIGFmdGVyIHN1Ym1pdCB3aGVuIGRhdGEgaGFzIGNoYW5nZWQuXG4gICAgICBpZiAodGhpcy5pc1RyYW5zaWVudCkge1xuICAgICAgICAvLyBGb3IgY29tcG9uZW50cyB3aXRoIHRyYW5zaWVudCBkYXRhLCBtb2RpZnkgdGhpcy5zb3VyY2VEYXRhLlxuICAgICAgICB0aGlzLnNldFNvdXJjZURhdGEoZGF0YSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuY3JlYXRlZERhdGEgPSBudWxsXG4gICAgICAgIHRoaXMubG9hZGVkRGF0YSA9IGRhdGFcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgY2xlYXJDbG9uZWREYXRhKHRvLCBmcm9tKSB7XG4gICAgICAvLyBPbmx5IGNsZWFyIGlmIHRoZSB3YXRjaGVkIHNvdXJjZURhdGEgaXRzZWxmIGNoYW5nZXMgaW4gdGhlIGZvcm0uXG4gICAgICBpZiAodG8gIT09IGZyb20pIHtcbiAgICAgICAgdGhpcy5jbG9uZWREYXRhID0gdW5kZWZpbmVkXG4gICAgICB9XG4gICAgfSxcblxuICAgIGFzeW5jIGNhbmNlbCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmNsb3NlKClcbiAgICB9LFxuXG4gICAgYXN5bmMgY2xvc2UoKSB7XG4gICAgICByZXR1cm4gdGhpcy5uYXZpZ2F0ZSh0aGlzLnBhcmVudFJvdXRlQ29tcG9uZW50LnBhdGgpXG4gICAgfSxcblxuICAgIGdldFN1Ym1pdFZlcmIocHJlc2VudCA9IHRydWUpIHtcbiAgICAgIHJldHVybiB0aGlzLmlzQ3JlYXRpbmdcbiAgICAgICAgPyBwcmVzZW50XG4gICAgICAgICAgPyAnY3JlYXRlJ1xuICAgICAgICAgIDogJ2NyZWF0ZWQnXG4gICAgICAgIDogcHJlc2VudFxuICAgICAgICAgID8gJ3N1Ym1pdCdcbiAgICAgICAgICA6ICdzdWJtaXR0ZWQnXG4gICAgfSxcblxuICAgIGFzeW5jIHN1Ym1pdChidXR0b24sIHsgdmFsaWRhdGUgPSB0cnVlLCBjbG9zZUZvcm0gPSBmYWxzZSB9ID0ge30pIHtcbiAgICAgIGlmICh2YWxpZGF0ZSAmJiAhdGhpcy52YWxpZGF0ZUFsbCgpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgfVxuXG4gICAgICBjb25zdCBnZXRWZXJiID0gcHJlc2VudCA9PiB0aGlzLnZlcmJzW3RoaXMuZ2V0U3VibWl0VmVyYihwcmVzZW50KV1cblxuICAgICAgLy8gQWxsb3cgYnV0dG9ucyB0byBvdmVycmlkZSBib3RoIG1ldGhvZCBhbmQgcmVzb3VyY2UgcGF0aCB0byBzdWJtaXQgdG86XG4gICAgICBjb25zdCBidXR0b25SZXNvdXJjZSA9IGdldFJlc291cmNlKGJ1dHRvbi5zY2hlbWEucmVzb3VyY2UsIHtcbiAgICAgICAgcGFyZW50OiB0aGlzLnJlc291cmNlXG4gICAgICB9KVxuICAgICAgY29uc3QgcmVzb3VyY2UgPSBidXR0b25SZXNvdXJjZSB8fCB0aGlzLnJlc291cmNlXG4gICAgICBjb25zdCBtZXRob2QgPSByZXNvdXJjZT8ubWV0aG9kIHx8IHRoaXMubWV0aG9kXG4gICAgICBjb25zdCBkYXRhID0gdGhpcy5nZXRQYXlsb2FkRGF0YShidXR0b24sIG1ldGhvZClcbiAgICAgIGxldCBzdWNjZXNzXG4gICAgICBpZiAoIWJ1dHRvblJlc291cmNlICYmIHRoaXMuaXNUcmFuc2llbnQpIHtcbiAgICAgICAgc3VjY2VzcyA9IGF3YWl0IHRoaXMuc3VibWl0VHJhbnNpZW50KGJ1dHRvbiwgcmVzb3VyY2UsIG1ldGhvZCwgZGF0YSwge1xuICAgICAgICAgIG9uU3VjY2VzczogKCkgPT4gdGhpcy5lbWl0U2NoZW1hRXZlbnQodGhpcy5nZXRTdWJtaXRWZXJiKCkpLFxuICAgICAgICAgIG9uRXJyb3I6IGVycm9yID0+XG4gICAgICAgICAgICB0aGlzLmVtaXRTY2hlbWFFdmVudCgnZXJyb3InLCB7XG4gICAgICAgICAgICAgIGNvbnRleHQ6IHsgZXJyb3IgfVxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgbm90aWZ5U3VjY2VzczogKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgdmVyYiA9IGdldFZlcmIoZmFsc2UpXG4gICAgICAgICAgICB0aGlzLm5vdGlmeSh7XG4gICAgICAgICAgICAgIHR5cGU6ICdpbmZvJyxcbiAgICAgICAgICAgICAgdGl0bGU6IHRoaXMuaXNDcmVhdGluZ1xuICAgICAgICAgICAgICAgID8gYEl0ZW0gJHtjYXBpdGFsaXplKHZlcmIpfWBcbiAgICAgICAgICAgICAgICA6IGBDaGFuZ2UgJHtjYXBpdGFsaXplKHZlcmIpfWAsXG4gICAgICAgICAgICAgIHRleHQ6IFtcbiAgICAgICAgICAgICAgICB0aGlzLmlzQ3JlYXRpbmdcbiAgICAgICAgICAgICAgICAgID8gYCR7dGhpcy5pdGVtTGFiZWx9IHdhcyAke3ZlcmJ9LmBcbiAgICAgICAgICAgICAgICAgIDogYENoYW5nZXMgdG8gJHt0aGlzLml0ZW1MYWJlbH0gd2VyZSAke3ZlcmJ9LmAsXG4gICAgICAgICAgICAgICAgdGhpcy50cmFuc2llbnROb3RlXG4gICAgICAgICAgICAgIF1cbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfSxcbiAgICAgICAgICBub3RpZnlFcnJvcjogKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgdmVyYiA9IGdldFZlcmIodHJ1ZSlcbiAgICAgICAgICAgIHRoaXMubm90aWZ5KHtcbiAgICAgICAgICAgICAgdHlwZTogJ2Vycm9yJyxcbiAgICAgICAgICAgICAgdGl0bGU6ICdSZXF1ZXN0IEVycm9yJyxcbiAgICAgICAgICAgICAgdGV4dDogYFVuYWJsZSB0byAke3ZlcmJ9ICR7dGhpcy5pdGVtTGFiZWx9LmBcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3VjY2VzcyA9IGF3YWl0IHRoaXMuc3VibWl0UmVzb3VyY2UoYnV0dG9uLCByZXNvdXJjZSwgbWV0aG9kLCBkYXRhLCB7XG4gICAgICAgICAgc2V0RGF0YTogdHJ1ZSxcbiAgICAgICAgICBvblN1Y2Nlc3M6ICgpID0+IHRoaXMuZW1pdFNjaGVtYUV2ZW50KHRoaXMuZ2V0U3VibWl0VmVyYigpKSxcbiAgICAgICAgICBvbkVycm9yOiBlcnJvciA9PlxuICAgICAgICAgICAgdGhpcy5lbWl0U2NoZW1hRXZlbnQoJ2Vycm9yJywge1xuICAgICAgICAgICAgICBjb250ZXh0OiB7IGVycm9yIH1cbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgIG5vdGlmeVN1Y2Nlc3M6ICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHZlcmIgPSBnZXRWZXJiKGZhbHNlKVxuICAgICAgICAgICAgdGhpcy5ub3RpZnkoe1xuICAgICAgICAgICAgICB0eXBlOiAnc3VjY2VzcycsXG4gICAgICAgICAgICAgIHRpdGxlOiBgU3VjY2Vzc2Z1bGx5ICR7Y2FwaXRhbGl6ZSh2ZXJiKX1gLFxuICAgICAgICAgICAgICB0ZXh0OiBgJHt0aGlzLml0ZW1MYWJlbH0gd2FzICR7dmVyYn0uYFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9LFxuICAgICAgICAgIG5vdGlmeUVycm9yOiBlcnJvciA9PiB7XG4gICAgICAgICAgICBjb25zdCB2ZXJiID0gZ2V0VmVyYih0cnVlKVxuICAgICAgICAgICAgdGhpcy5ub3RpZnkoe1xuICAgICAgICAgICAgICB0eXBlOiAnZXJyb3InLFxuICAgICAgICAgICAgICB0aXRsZTogJ1JlcXVlc3QgRXJyb3InLFxuICAgICAgICAgICAgICB0ZXh0OiBbXG4gICAgICAgICAgICAgICAgYFVuYWJsZSB0byAke3ZlcmJ9ICR7dGhpcy5pdGVtTGFiZWx9JHtlcnJvciA/ICc6JyA6ICcnfWAsXG4gICAgICAgICAgICAgICAgZXJyb3I/Lm1lc3NhZ2UgfHwgZXJyb3JcbiAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgICBpZiAoc3VjY2Vzcykge1xuICAgICAgICB0aGlzLnJlc2V0VmFsaWRhdGlvbigpXG4gICAgICAgIGlmIChjbG9zZUZvcm0gfHwgYnV0dG9uLmNsb3NlRm9ybSkge1xuICAgICAgICAgIHRoaXMuY2xvc2UoKVxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuaXNDcmVhdGluZykge1xuICAgICAgICAgIC8vIFJlZGlyZWN0IHRvIHRoZSBmb3JtIGVkaXRpbmcgdGhlIG5ld2x5IGNyZWF0ZWQgaXRlbTpcbiAgICAgICAgICBjb25zdCBpZCA9IHRoaXMuZ2V0SXRlbUlkKHRoaXMuc2NoZW1hLCB0aGlzLmRhdGEpXG4gICAgICAgICAgdGhpcy4kcm91dGVyLnJlcGxhY2Uoe1xuICAgICAgICAgICAgcGF0aDogcmVzb2x2ZVBhdGgoYCR7dGhpcy5wYXRofS8uLi8ke2lkfWApLFxuICAgICAgICAgICAgLy8gUHJlc2VydmUgaGFzaCBmb3IgdGFiczpcbiAgICAgICAgICAgIGhhc2g6IHRoaXMuJHJvdXRlLmhhc2hcbiAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gc3VjY2Vzc1xuICAgIH0sXG5cbiAgICBhc3luYyBzdWJtaXRUcmFuc2llbnQoYnV0dG9uLCBfcmVzb3VyY2UsIF9tZXRob2QsIGRhdGEsIHtcbiAgICAgIG9uU3VjY2VzcyxcbiAgICAgIG9uRXJyb3IsXG4gICAgICBub3RpZnlTdWNjZXNzLFxuICAgICAgbm90aWZ5RXJyb3JcbiAgICB9KSB7XG4gICAgICAvLyBIYW5kbGUgdGhlIGRlZmF1bHQgXCJzdWJtaXR0aW5nXCIgb2YgdHJhbnNpZW50LCBuZXN0ZWQgZGF0YTpcbiAgICAgIGNvbnN0IHN1Y2Nlc3MgPSB0aGlzLmlzQ3JlYXRpbmdcbiAgICAgICAgPyB0aGlzLmFkZFNvdXJjZURhdGEoZGF0YSlcbiAgICAgICAgOiB0aGlzLnNldFNvdXJjZURhdGEoZGF0YSlcbiAgICAgIGlmIChzdWNjZXNzKSB7XG4gICAgICAgIG9uU3VjY2Vzcz8uKClcbiAgICAgICAgYXdhaXQgdGhpcy5lbWl0QnV0dG9uRXZlbnQoYnV0dG9uLCAnc3VjY2VzcycsIHtcbiAgICAgICAgICBub3RpZnk6IG5vdGlmeVN1Y2Nlc3NcbiAgICAgICAgfSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGVycm9yID0gJ0NvdWxkIG5vdCBzdWJtaXQgdHJhbnNpZW50IGl0ZW0nXG4gICAgICAgIG9uRXJyb3I/LihlcnJvcilcbiAgICAgICAgYXdhaXQgdGhpcy5lbWl0QnV0dG9uRXZlbnQoYnV0dG9uLCAnZXJyb3InLCB7XG4gICAgICAgICAgbm90aWZ5OiBub3RpZnlFcnJvcixcbiAgICAgICAgICBlcnJvclxuICAgICAgICB9KVxuICAgICAgfVxuICAgICAgcmV0dXJuIHN1Y2Nlc3NcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IERpdG9Gb3JtIGZyb20gJy4vRGl0b0Zvcm0udnVlJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ0RpdG9Gb3JtTmVzdGVkJywge1xuICBleHRlbmRzOiBEaXRvRm9ybVxufSlcbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbi5kaXRvLWZvcm0tbmVzdGVkIHtcbiAgLy8gTm8gc2Nyb2xsaW5nIGluc2lkZSBuZXN0ZWQgZm9ybXMsIGFuZCBwcmV2ZW50IG9wZW4gLm11bHRpc2VsZWN0IGZyb21cbiAgLy8gYmVpbmcgY3JvcHBlZC5cbiAgb3ZlcmZsb3c6IHZpc2libGU7XG59XG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbi5kaXRvLWVycm9ycyhcbiAgdi1pZj1cImVycm9yc1wiXG4pXG4gIHVsXG4gICAgbGkoXG4gICAgICB2LWZvcj1cImVycm9yIG9mIGVycm9yc1wiXG4gICAgKSB7eyBlcnJvciB9fVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCB0aXBweSBmcm9tICd0aXBweS5qcydcbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgeyBtYXJrUmF3IH0gZnJvbSAndnVlJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ0RpdG9FcnJvcnMnLCB7XG4gIHByb3BzOiB7XG4gICAgZXJyb3JzOiB7IHR5cGU6IEFycmF5LCBkZWZhdWx0OiBudWxsIH1cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICB0aXA6IG51bGxcbiAgICB9XG4gIH0sXG5cbiAgd2F0Y2g6IHtcbiAgICBlcnJvcnMoKSB7XG4gICAgICB0aGlzLiRuZXh0VGljayh0aGlzLnVwZGF0ZUVycm9ycylcbiAgICB9XG4gIH0sXG5cbiAgdW5tb3VudGVkKCkge1xuICAgIHRoaXMudGlwPy5kZXN0cm95KClcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgdXBkYXRlRXJyb3JzKCkge1xuICAgICAgbGV0IHsgdGlwIH0gPSB0aGlzXG4gICAgICB0aXA/LmhpZGUoKVxuICAgICAgaWYgKHRoaXMuZXJyb3JzKSB7XG4gICAgICAgIHRpcCA9IHRoaXMudGlwID8/PSBtYXJrUmF3KHRpcHB5KHRoaXMuJGVsLmNsb3Nlc3QoJy5kaXRvLWNvbnRhaW5lcicpKSlcbiAgICAgICAgdGlwLnNldFByb3BzKHtcbiAgICAgICAgICBjb250ZW50OiB0aGlzLmVycm9ycy5qb2luKCdcXG4nKSxcbiAgICAgICAgICB0aGVtZTogJ2Vycm9yJyxcbiAgICAgICAgICB0cmlnZ2VyOiAnbWFudWFsJyxcbiAgICAgICAgICBhcHBlbmRUbzogJ3BhcmVudCcsXG4gICAgICAgICAgcGxhY2VtZW50OiAnYm90dG9tLXN0YXJ0JyxcbiAgICAgICAgICBhbmltYXRpb246ICdzaGlmdC1hd2F5LXN1YnRsZScsXG4gICAgICAgICAgcG9wcGVyT3B0aW9uczoge1xuICAgICAgICAgICAgbW9kaWZpZXJzOiBbXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnZmxpcCcsXG4gICAgICAgICAgICAgICAgZW5hYmxlZDogZmFsc2VcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgXVxuICAgICAgICAgIH0sXG4gICAgICAgICAgaW50ZXJhY3RpdmU6IHRydWUsXG4gICAgICAgICAgaGlkZU9uQ2xpY2s6IGZhbHNlLFxuICAgICAgICAgIG9mZnNldDogWzMsIDNdLCAvLyAxLzIgZm9ybS1zcGFjaW5nXG4gICAgICAgICAgekluZGV4OiAxXG4gICAgICAgIH0pXG4gICAgICAgIHRpcC5wb3BwZXIuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJywgKCkgPT4gdGlwLmhpZGUoKSlcbiAgICAgICAgdGlwLnNob3coKVxuICAgICAgfVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5cbi5kaXRvLWVycm9ycyB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgdmlzaWJpbGl0eTogaGlkZGVuO1xuXG4gIHVsIHtcbiAgICBjb2xvcjogJGNvbG9yLWVycm9yO1xuICB9XG59XG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbi5kaXRvLXNjb3Blc1xuICBSb3V0ZXJMaW5rKFxuICAgIHYtZm9yPVwiKHNjb3BlLCBrZXkpIGluIHNjb3Blc1wiXG4gICAgOmtleT1cImtleVwiXG4gICAgdi1zbG90PVwieyBuYXZpZ2F0ZSB9XCJcbiAgICA6dG89XCJnZXRTY29wZUxpbmsoc2NvcGUpXCJcbiAgICBjdXN0b21cbiAgKVxuICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbihcbiAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgOmNsYXNzPVwieyAnZGl0by1zZWxlY3RlZCc6IHNjb3BlLm5hbWUgPT09IHF1ZXJ5LnNjb3BlIH1cIlxuICAgICAgOnRpdGxlPVwic2NvcGUuaGludCB8fCBnZXRMYWJlbChzY29wZSlcIlxuICAgICAgQGNsaWNrPVwibmF2aWdhdGVcIlxuICAgICkge3sgZ2V0TGFiZWwoc2NvcGUpIH19XG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdEaXRvU2NvcGVzJywge1xuICBwcm9wczoge1xuICAgIHF1ZXJ5OiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBzY29wZXM6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGdldFNjb3BlTGluayhzY29wZSkge1xuICAgICAgY29uc3QgcXVlcnkgPSB7IC4uLnRoaXMucXVlcnksIHNjb3BlOiBzY29wZS5uYW1lIH1cbiAgICAgIGlmIChxdWVyeS5wYWdlKSB7XG4gICAgICAgIHF1ZXJ5LnBhZ2UgPSAwXG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy5nZXRRdWVyeUxpbmsocXVlcnkpXG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLmRpdG8tc2NvcGVzIHtcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgZGlzcGxheTogZmxleDtcblxuICAuZGl0by1idXR0b24ge1xuICAgIEBpbmNsdWRlIGVsbGlwc2lzO1xuXG4gICAgYm9yZGVyLXJhZGl1czogMDtcbiAgICAvLyBBIGJpdCBtb3JlIHRoYW4gdGhlIHdpZHRoIG9mIGVsbGlwc2lzLCB0byBwcmV2ZW50IHJlcGxhY2luZyBzaG9ydCB3b3Jkc1xuICAgIC8vIHdpdGggZWxsaXBzaXMuXG4gICAgbWluLXdpZHRoOiAzZW07XG4gICAgZmxleDogMCAxIGF1dG87XG5cbiAgICAmOmZpcnN0LWNoaWxkIHtcbiAgICAgIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6IDFlbTtcbiAgICAgIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDFlbTtcbiAgICAgIHBhZGRpbmctbGVmdDogMWVtO1xuICAgIH1cblxuICAgICY6bGFzdC1jaGlsZCB7XG4gICAgICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogMWVtO1xuICAgICAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IDFlbTtcbiAgICAgIHBhZGRpbmctcmlnaHQ6IDFlbTtcbiAgICB9XG5cbiAgICAmICsgLmRpdG8tYnV0dG9uIHtcbiAgICAgIG1hcmdpbi1sZWZ0OiAtMXB4O1xuICAgIH0gLy8gRG9uJ3QgY292ZXIgdGhlIGZvY3VzZWQgYm9yZGVyIG9mIGJ1dHRvbnM6XG4gICAgJjpmb2N1cyB7XG4gICAgICB6LWluZGV4OiAxO1xuICAgIH1cbiAgfVxufVxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG5QYWdpbmF0aW9uKFxuICB2LW1vZGVsOnBhZ2U9XCJwYWdlXCJcbiAgOnBhZ2VTaXplPVwibGltaXRcIlxuICA6dG90YWw9XCJ0b3RhbFwiXG4pXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IHsgUGFnaW5hdGlvbiB9IGZyb20gJ0BkaXRvanMvdWkvc3JjJ1xuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdEaXRvUGFnaW5hdGlvbicsIHtcbiAgY29tcG9uZW50czogeyBQYWdpbmF0aW9uIH0sXG5cbiAgcHJvcHM6IHtcbiAgICBxdWVyeTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgbGltaXQ6IHsgdHlwZTogTnVtYmVyLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHRvdGFsOiB7IHR5cGU6IE51bWJlciwgcmVxdWlyZWQ6IHRydWUgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgcGFnZToge1xuICAgICAgZ2V0KCkge1xuICAgICAgICByZXR1cm4gKCt0aGlzLnF1ZXJ5LnBhZ2UgfHwgMCkgKyAxXG4gICAgICB9LFxuXG4gICAgICBzZXQocGFnZSkge1xuICAgICAgICBpZiAodGhpcy5wYWdlICE9PSBwYWdlKSB7XG4gICAgICAgICAgdGhpcy4kcm91dGVyLnB1c2goXG4gICAgICAgICAgICB0aGlzLmdldFF1ZXJ5TGluayh7XG4gICAgICAgICAgICAgIC4uLnRoaXMucXVlcnksXG4gICAgICAgICAgICAgIHBhZ2U6IHBhZ2UgLSAxXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IHtcbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgaXNEcmFnZ2luZzogZmFsc2VcbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGdldERyYWdnYWJsZU9wdGlvbnMoZm9yY2VGYWxsYmFjayA9IGZhbHNlKSB7XG4gICAgICBjb25zdCBwcmVmaXggPSAnZGl0by1kcmFnZ2FibGUnXG4gICAgICByZXR1cm4ge1xuICAgICAgICBhbmltYXRpb246IDE1MCxcbiAgICAgICAgaGFuZGxlOiAnLmRpdG8tYnV0dG9uLWRyYWcnLFxuICAgICAgICBkcmFnQ2xhc3M6IGAke3ByZWZpeH1fX2RyYWdgLFxuICAgICAgICBjaG9zZW5DbGFzczogYCR7cHJlZml4fV9fY2hvc2VuYCxcbiAgICAgICAgZ2hvc3RDbGFzczogYCR7cHJlZml4fV9fZ2hvc3RgLFxuICAgICAgICBmYWxsYmFja0NsYXNzOiBgJHtwcmVmaXh9X19mYWxsYmFja2AsXG4gICAgICAgIGZvcmNlRmFsbGJhY2ssXG4gICAgICAgIG9uU3RhcnQ6IHRoaXMub25TdGFydERyYWcsXG4gICAgICAgIG9uRW5kOiB0aGlzLm9uRW5kRHJhZ1xuICAgICAgfVxuICAgIH0sXG5cbiAgICBvblN0YXJ0RHJhZygpIHtcbiAgICAgIHRoaXMuaXNEcmFnZ2luZyA9IHRydWVcbiAgICB9LFxuXG4gICAgb25FbmREcmFnKHsgb2xkSW5kZXgsIG5ld0luZGV4IH0pIHtcbiAgICAgIHRoaXMuaXNEcmFnZ2luZyA9IGZhbHNlXG4gICAgICBpZiAob2xkSW5kZXggIT09IG5ld0luZGV4KSB7XG4gICAgICAgIHRoaXMub25DaGFuZ2UoKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICB1cGRhdGVPcmRlcihzb3VyY2VTY2hlbWEsIGxpc3QsIHBhZ2luYXRpb25SYW5nZSkge1xuICAgICAgY29uc3QgeyBvcmRlcktleSB9ID0gc291cmNlU2NoZW1hXG4gICAgICBpZiAob3JkZXJLZXkpIHtcbiAgICAgICAgLy8gUmVvcmRlciB0aGUgY2hhbmdlZCBlbnRyaWVzIGJ5IHRoZWlyIG9yZGVyIGtleSwgdGFraW5nIHBhZ2luYXRpb25cbiAgICAgICAgLy8gb2Zmc2V0cyBpbnRvIGFjY291bnQ6XG4gICAgICAgIGNvbnN0IG9mZnNldCA9IHBhZ2luYXRpb25SYW5nZT8uWzBdIHx8IDBcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsaXN0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgbGlzdFtpXVtvcmRlcktleV0gPSBpICsgb2Zmc2V0XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBsaXN0XG4gICAgfVxuICB9XG59XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuLmRpdG8tdHJlZS1pdGVtKFxuICA6aWQ9XCJkYXRhUGF0aFwiXG4gIDpjbGFzcz1ge1xuICAgICdkaXRvLWRyYWdnaW5nJzogaXNEcmFnZ2luZyxcbiAgICAnZGl0by1hY3RpdmUnOiBhY3RpdmVcbiAgfWBcbiAgOnN0eWxlPVwibGV2ZWwgPiAwICYmIHsgJy0tbGV2ZWwnOiBsZXZlbCB9XCJcbilcbiAgLmRpdG8tdHJlZS1oZWFkZXIoXG4gICAgdi1pZj1cImxhYmVsXCJcbiAgKVxuICAgIC5kaXRvLXRyZWUtYnJhbmNoKFxuICAgICAgdi1pZj1cIm51bUVudHJpZXNcIlxuICAgICAgQGNsaWNrLnN0b3A9XCJvcGVuZWQgPSAhb3BlbmVkXCJcbiAgICApXG4gICAgICAuZGl0by1jaGV2cm9uKFxuICAgICAgICB2LWlmPVwibnVtRW50cmllc1wiXG4gICAgICAgIDpjbGFzcz1cInsgJ2RpdG8tb3Blbic6IG9wZW5lZCB9XCJcbiAgICAgIClcbiAgICAgIC5kaXRvLXRyZWUtbGFiZWwoXG4gICAgICAgIHYtaHRtbD1cImxhYmVsXCJcbiAgICAgIClcbiAgICAgIC5kaXRvLXRyZWUtaW5mbyhcbiAgICAgICAgdi1pZj1cImRldGFpbHNcIlxuICAgICAgKSB7eyBkZXRhaWxzIH19XG4gICAgLmRpdG8tdHJlZS1sZWFmKFxuICAgICAgdi1lbHNlXG4gICAgKVxuICAgICAgLmRpdG8tdHJlZS1sYWJlbChcbiAgICAgICAgdi1odG1sPVwibGFiZWxcIlxuICAgICAgKVxuICAgIC5kaXRvLWJ1dHRvbnMuZGl0by1idXR0b25zLXNtYWxsKFxuICAgICAgdi1pZj1cImhhc0VkaXRCdXR0b25zXCJcbiAgICApXG4gICAgICAvLy0gRmlyZWZveCBkb2Vzbid0IGxpa2UgPGJ1dHRvbj4gaGVyZSwgc28gdXNlIDxhPiBpbnN0ZWFkOlxuICAgICAgYS5kaXRvLWJ1dHRvbihcbiAgICAgICAgdi1pZj1cImRyYWdnYWJsZVwiXG4gICAgICAgIHYtYmluZD1cImdldEJ1dHRvbkF0dHJpYnV0ZXModmVyYnMuZHJhZylcIlxuICAgICAgKVxuICAgICAgYnV0dG9uLmRpdG8tYnV0dG9uKFxuICAgICAgICB2LWlmPVwiZWRpdGFibGVcIlxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgdi1iaW5kPVwiZ2V0QnV0dG9uQXR0cmlidXRlcyh2ZXJicy5lZGl0KVwiXG4gICAgICAgIEBjbGljaz1cIm9uRWRpdFwiXG4gICAgICApXG4gICAgICBidXR0b24uZGl0by1idXR0b24oXG4gICAgICAgIHYtaWY9XCJkZWxldGFibGVcIlxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgdi1iaW5kPVwiZ2V0QnV0dG9uQXR0cmlidXRlcyh2ZXJicy5kZWxldGUpXCJcbiAgICAgICAgQGNsaWNrPVwib25EZWxldGVcIlxuICAgICAgKVxuICB0YWJsZS5kaXRvLXByb3BlcnRpZXMoXG4gICAgdi1pZj1cInByb3BlcnRpZXNcIlxuICAgIHYtc2hvdz1cIm9wZW5lZFwiXG4gIClcbiAgICB0cihcbiAgICAgIHYtZm9yPVwicHJvcGVydHkgaW4gcHJvcGVydGllc1wiXG4gICAgKVxuICAgICAgdGRcbiAgICAgICAgRGl0b0xhYmVsKFxuICAgICAgICAgIHYtaWY9XCJwcm9wZXJ0eS5sYWJlbCAhPT0gZmFsc2VcIlxuICAgICAgICAgIDpkYXRhUGF0aD1cImdldFByb3BlcnR5RGF0YVBhdGgocHJvcGVydHkpXCJcbiAgICAgICAgICA6bGFiZWw9XCJnZXRMYWJlbChwcm9wZXJ0eSlcIlxuICAgICAgICApXG4gICAgICBEaXRvVGFibGVDZWxsKFxuICAgICAgICA6Y2VsbD1cInByb3BlcnR5XCJcbiAgICAgICAgOnNjaGVtYT1cInByb3BlcnR5XCJcbiAgICAgICAgOmRhdGFQYXRoPVwiZ2V0UHJvcGVydHlEYXRhUGF0aChwcm9wZXJ0eSlcIlxuICAgICAgICA6ZGF0YT1cImRhdGFcIlxuICAgICAgICA6bWV0YT1cIm5lc3RlZE1ldGFcIlxuICAgICAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICAgIClcbiAgRGl0b0RyYWdnYWJsZShcbiAgICB2LWlmPVwiY2hpbGRyZW5TY2hlbWFcIlxuICAgIHYtc2hvdz1cIm9wZW5lZFwiXG4gICAgOm1vZGVsVmFsdWU9XCJ1cGRhdGVPcmRlcihjaGlsZHJlblNjaGVtYSwgY2hpbGRyZW5MaXN0KVwiXG4gICAgOm9wdGlvbnM9XCJnZXREcmFnZ2FibGVPcHRpb25zKHRydWUpXCJcbiAgICA6ZHJhZ2dhYmxlPVwiY2hpbGRyZW5EcmFnZ2FibGVcIlxuICAgIEB1cGRhdGU6bW9kZWxWYWx1ZT1cInZhbHVlID0+IChjaGlsZHJlbkxpc3QgPSB2YWx1ZSlcIlxuICApXG4gICAgRGl0b1RyZWVJdGVtKFxuICAgICAgdi1mb3I9XCIoaXRlbSwgaW5kZXgpIGluIGNoaWxkcmVuSXRlbXNcIlxuICAgICAgOmtleT1cImdldEl0ZW1VaWQoY2hpbGRyZW5TY2hlbWEsIGl0ZW0uZGF0YSlcIlxuICAgICAgOnNjaGVtYT1cImNoaWxkcmVuU2NoZW1hXCJcbiAgICAgIDpkYXRhUGF0aD1cImdldEl0ZW1EYXRhUGF0aChjaGlsZHJlblNjaGVtYSwgaW5kZXgpXCJcbiAgICAgIDpkYXRhPVwiaXRlbS5kYXRhXCJcbiAgICAgIDpwYXRoPVwiaXRlbS5wYXRoXCJcbiAgICAgIDpvcGVuPVwiaXRlbS5vcGVuXCJcbiAgICAgIDphY3RpdmU9XCJpdGVtLmFjdGl2ZVwiXG4gICAgICA6ZHJhZ2dhYmxlPVwiY2hpbGRyZW5EcmFnZ2FibGVcIlxuICAgICAgOmxhYmVsPVwiZ2V0SXRlbUxhYmVsKGNoaWxkcmVuU2NoZW1hLCBpdGVtLmRhdGEsIHsgaW5kZXggfSlcIlxuICAgICAgOmxldmVsPVwibGV2ZWwgKyAxXCJcbiAgICApXG4gICAgLy8tIFRPRE86IENvbnZlcnQgZGl0by10cmVlLWl0ZW0gdG8gdXNlIGRpdG8tbGFiZWwgaW50ZXJuYWxseSwgYW5kIHRoZW5cbiAgICAvLy0gcGFzcyBgYXNPYmplY3Q6IHRydWVgIGluIHRoZSBgZ2V0SXRlbUxhYmVsKClgIGNhbGwgYWJvdmUuXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCBJdGVtTWl4aW4gZnJvbSAnLi4vbWl4aW5zL0l0ZW1NaXhpbidcbmltcG9ydCBTb3J0YWJsZU1peGluIGZyb20gJy4uL21peGlucy9Tb3J0YWJsZU1peGluLmpzJ1xuaW1wb3J0IHsgYXBwZW5kRGF0YVBhdGggfSBmcm9tICcuLi91dGlscy9kYXRhLmpzJ1xuaW1wb3J0IHsgZ2V0U2NoZW1hQWNjZXNzb3IgfSBmcm9tICcuLi91dGlscy9hY2Nlc3Nvci5qcydcbmltcG9ydCB7IGdldE5hbWVkU2NoZW1hcywgaGFzRm9ybVNjaGVtYSB9IGZyb20gJy4uL3V0aWxzL3NjaGVtYS5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdEaXRvVHJlZUl0ZW0nLCB7XG4gIG1peGluczogW0l0ZW1NaXhpbiwgU29ydGFibGVNaXhpbl0sXG4gIGluamVjdDogWydjb250YWluZXInXSxcblxuICBwcm9wczoge1xuICAgIHNjaGVtYTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgZGF0YVBhdGg6IHsgdHlwZTogU3RyaW5nLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGRhdGE6IHsgdHlwZTogW0FycmF5LCBPYmplY3RdLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgcGF0aDogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6ICcnIH0sXG4gICAgb3BlbjogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGFjdGl2ZTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGRyYWdnYWJsZTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGxhYmVsOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogbnVsbCB9LFxuICAgIGxldmVsOiB7IHR5cGU6IE51bWJlciwgZGVmYXVsdDogMCB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgb3BlbmVkOiB0aGlzLm9wZW4gfHwgdGhpcy5zY2hlbWEub3BlblxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIG1ldGEoKSB7XG4gICAgICByZXR1cm4gdGhpcy5jb250YWluZXIubWV0YVxuICAgIH0sXG5cbiAgICBzdG9yZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLmNvbnRhaW5lci5zdG9yZVxuICAgIH0sXG5cbiAgICBkaXNhYmxlZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmNvbnRhaW5lci5kaXNhYmxlZFxuICAgIH0sXG5cbiAgICBuZXN0ZWRNZXRhKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4udGhpcy5tZXRhLFxuICAgICAgICBzY2hlbWE6IHRoaXMuc2NoZW1hXG4gICAgICB9XG4gICAgfSxcblxuICAgIHByb3BlcnRpZXMoKSB7XG4gICAgICByZXR1cm4gZ2V0TmFtZWRTY2hlbWFzKHRoaXMuc2NoZW1hLnByb3BlcnRpZXMpXG4gICAgfSxcblxuICAgIC8vIFRPRE86IFNob3VsZCB0aGlzIGJlIG5hbWVkIGBzb3VyY2VTY2hlbWFgIGluc3RlYWQ/IFVzZSBTb3VyY2VNaXhpbj9cbiAgICBjaGlsZHJlblNjaGVtYSgpIHtcbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYS5jaGlsZHJlblxuICAgIH0sXG5cbiAgICBjaGlsZHJlbkxpc3Q6IHtcbiAgICAgIGdldCgpIHtcbiAgICAgICAgY29uc3QgbmFtZSA9IHRoaXMuY2hpbGRyZW5TY2hlbWE/Lm5hbWVcbiAgICAgICAgcmV0dXJuIG5hbWUgJiYgdGhpcy5kYXRhW25hbWVdXG4gICAgICB9LFxuXG4gICAgICBzZXQodmFsdWUpIHtcbiAgICAgICAgY29uc3QgbmFtZSA9IHRoaXMuY2hpbGRyZW5TY2hlbWE/Lm5hbWVcbiAgICAgICAgaWYgKG5hbWUpIHtcbiAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgdnVlL25vLW11dGF0aW5nLXByb3BzXG4gICAgICAgICAgdGhpcy5kYXRhW25hbWVdID0gdmFsdWVcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBjaGlsZHJlbkRyYWdnYWJsZSgpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIHRoaXMuY2hpbGRyZW5MaXN0Py5sZW5ndGggPiAxICYmXG4gICAgICAgIHRoaXMuZ2V0U2NoZW1hVmFsdWUoJ2RyYWdnYWJsZScsIHtcbiAgICAgICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgICAgIGRlZmF1bHQ6IGZhbHNlLFxuICAgICAgICAgIHNjaGVtYTogdGhpcy5jaGlsZHJlblNjaGVtYVxuICAgICAgICB9KVxuICAgICAgKVxuICAgIH0sXG5cbiAgICBudW1DaGlsZHJlbigpIHtcbiAgICAgIHJldHVybiB0aGlzLmNoaWxkcmVuTGlzdD8ubGVuZ3RoIHx8IDBcbiAgICB9LFxuXG4gICAgbnVtUHJvcGVydGllcygpIHtcbiAgICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXM/Lmxlbmd0aCB8fCAwXG4gICAgfSxcblxuICAgIG51bUVudHJpZXMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5udW1Qcm9wZXJ0aWVzICsgdGhpcy5udW1DaGlsZHJlblxuICAgIH0sXG5cbiAgICBjaGlsZHJlbkl0ZW1zKCkge1xuICAgICAgY29uc3QgeyBjaGlsZHJlblNjaGVtYSwgY2hpbGRyZW5MaXN0IH0gPSB0aGlzXG4gICAgICBpZiAoY2hpbGRyZW5TY2hlbWEgJiYgY2hpbGRyZW5MaXN0KSB7XG4gICAgICAgIGNvbnN0IHsgZWRpdFBhdGggfSA9IHRoaXMuY29udGFpbmVyXG4gICAgICAgIGNvbnN0IGNoaWxkcmVuT3BlbiA9ICF0aGlzLnBhdGggJiYgY2hpbGRyZW5TY2hlbWEub3BlblxuICAgICAgICAvLyBCdWlsZCBhIGNoaWxkcmVuIGxpc3Qgd2l0aCBjaGlsZCBtZXRhIGluZm9ybWF0aW9uIGZvciB0aGUgdGVtcGxhdGUuXG4gICAgICAgIHJldHVybiB0aGlzLnVwZGF0ZU9yZGVyKFxuICAgICAgICAgIGNoaWxkcmVuU2NoZW1hLFxuICAgICAgICAgIGNoaWxkcmVuTGlzdC5tYXAoKGRhdGEsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBwYXRoID0gKFxuICAgICAgICAgICAgICBjaGlsZHJlblNjaGVtYS5wYXRoICYmXG4gICAgICAgICAgICAgIGAke3RoaXMucGF0aH0vJHtjaGlsZHJlblNjaGVtYS5wYXRofS8ke2luZGV4fWBcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIGNvbnN0IG9wZW4gPSAoXG4gICAgICAgICAgICAgIGNoaWxkcmVuT3BlbiB8fFxuICAgICAgICAgICAgICAvLyBPbmx5IGNvdW50IGFzIFwiaW4gZWRpdCBwYXRoXCIgd2hlbiBpdCdzIG5vdCB0aGUgZnVsbCBlZGl0IHBhdGguXG4gICAgICAgICAgICAgIGVkaXRQYXRoLnN0YXJ0c1dpdGgocGF0aCkgJiYgcGF0aC5sZW5ndGggPCBlZGl0UGF0aC5sZW5ndGhcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIGNvbnN0IGFjdGl2ZSA9IGVkaXRQYXRoID09PSBwYXRoXG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBkYXRhLFxuICAgICAgICAgICAgICBwYXRoLFxuICAgICAgICAgICAgICBvcGVuLFxuICAgICAgICAgICAgICBhY3RpdmVcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KVxuICAgICAgICApXG4gICAgICB9XG4gICAgICByZXR1cm4gW11cbiAgICB9LFxuXG4gICAgZGV0YWlscygpIHtcbiAgICAgIGNvbnN0IHsgbnVtQ2hpbGRyZW4gfSA9IHRoaXNcbiAgICAgIHJldHVybiAoXG4gICAgICAgIG51bUNoaWxkcmVuICYmXG4gICAgICAgIGAke251bUNoaWxkcmVufSAke1xuICAgICAgICAgIG51bUNoaWxkcmVuID09PSAxID8gJ2l0ZW0nIDogJ2l0ZW1zJ1xuICAgICAgICB9YFxuICAgICAgKVxuICAgIH0sXG5cbiAgICBoYXNFZGl0QnV0dG9ucygpIHtcbiAgICAgIHJldHVybiB0aGlzLmRyYWdnYWJsZSB8fCB0aGlzLmVkaXRhYmxlIHx8IHRoaXMuZGVsZXRhYmxlXG4gICAgfSxcblxuICAgIC8vIFRPRE86IFN1cHBvcnQgY3JlYXRhYmxlIVxuICAgIC8vIFRPRE86IEFkZCBzdXBwb3J0IGZvciBjcmVhdGFibGUsIGVkaXRhYmxlIGFuZCBkZWxldGFibGUgb3ZlcnJpZGVzIG9uIHRoZVxuICAgIC8vIGFzc29jaWF0ZWQgZm9ybXMsIGp1c3QgbGlrZSBpbiBgVHlwZUxpc3RgIGFuZCBgVHlwZU9iamVjdGAsIHRocm91Z2hcbiAgICAvLyBgRGl0b0VkaXRCdXR0b25zYC4gSXQgd291bGQgYmUgYmVzdCB0byB1c2UgYERpdG9FZGl0QnV0dG9uc2AgaGVyZSB0b28uXG4gICAgY3JlYXRhYmxlOiBnZXRTY2hlbWFBY2Nlc3NvcignY3JlYXRhYmxlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlLFxuICAgICAgZ2V0KGNyZWF0YWJsZSkge1xuICAgICAgICByZXR1cm4gY3JlYXRhYmxlICYmIGhhc0Zvcm1TY2hlbWEodGhpcy5zY2hlbWEpXG4gICAgICB9XG4gICAgfSksXG5cbiAgICBlZGl0YWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ2VkaXRhYmxlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlLFxuICAgICAgZ2V0KGVkaXRhYmxlKSB7XG4gICAgICAgIHJldHVybiBlZGl0YWJsZSAmJiBoYXNGb3JtU2NoZW1hKHRoaXMuc2NoZW1hKVxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgZGVsZXRhYmxlOiBnZXRTY2hlbWFBY2Nlc3NvcignZGVsZXRhYmxlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfSlcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZ2V0UHJvcGVydHlEYXRhUGF0aChwcm9wZXJ0eSkge1xuICAgICAgcmV0dXJuIGFwcGVuZERhdGFQYXRoKHRoaXMuZGF0YVBhdGgsIHByb3BlcnR5Lm5hbWUpXG4gICAgfSxcblxuICAgIG9uRWRpdCgpIHtcbiAgICAgIC8vIEFsbCB3ZSBnb3QgdG8gZG8gaXMgcHVzaCB0aGUgcmlnaHQgZWRpdCBwYXRoIHRvIHRoZSByb3V0ZXIsIHRoZSByZXN0XG4gICAgICAvLyBpcyBoYW5kbGVkIGJ5IG91ciByb3V0ZXMsIGFsbG93aW5nIHJlbG9hZHMgYXMgd2VsbC5cbiAgICAgIHRoaXMuJHJvdXRlci5wdXNoKHtcbiAgICAgICAgcGF0aDogYCR7dGhpcy5jb250YWluZXIucGF0aH0ke3RoaXMucGF0aH1gLFxuICAgICAgICAvLyBQcmVzZXJ2ZSBjdXJyZW50IHF1ZXJ5XG4gICAgICAgIHF1ZXJ5OiB0aGlzLiRyb3V0ZS5xdWVyeVxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgb25EZWxldGUoKSB7XG4gICAgICAvLyBUT0RPOiBJbXBsZW1lbnQhXG4gICAgfSxcblxuICAgIG9uQ2hhbmdlKCkge1xuICAgICAgdGhpcy5jb250YWluZXIub25DaGFuZ2UoKVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5cbi5kaXRvLXRyZWUtaXRlbSB7XG4gIC0tY2hldnJvbi1pbmRlbnQ6ICN7JGNoZXZyb24taW5kZW50fTtcblxuICA+IC5kaXRvLXRyZWUtaGVhZGVyIHtcbiAgICA+IC5kaXRvLXRyZWUtYnJhbmNoLFxuICAgID4gLmRpdG8tdHJlZS1sZWFmIHtcbiAgICAgIC8vIFVzZSBgLS1sZXZlbGAgQ1NTIHZhcmlhYmxlIHRvIGNhbGN1bGF0ZWQgdGhlIGFjY3VtdWxhdGVkIGluZGVudFxuICAgICAgLy8gcGFkZGluZyBkaXJlY3RseSBpbnN0ZWFkIG9mIGhhdmluZyBpdCBhY2N1bXVsYXRlIGluIG5lc3RlZCBDU1MuXG4gICAgICAvLyBUaGlzIHdheSwgd2UgY2FuIGtlZXAgdGhlIC5kaXRvLWFjdGl2ZSBhcmVhIGNvdmVyIHRoZSBmdWxsIHdpZHRoOlxuICAgICAgcGFkZGluZy1sZWZ0OiBjYWxjKHZhcigtLWNoZXZyb24taW5kZW50KSAqICh2YXIoLS1sZXZlbCwgMSkgLSAxKSk7XG4gICAgfVxuICB9XG5cbiAgLmRpdG8tdHJlZS1icmFuY2gge1xuICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgfVxuXG4gIC5kaXRvLXRyZWUtaGVhZGVyIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgfVxuXG4gIC5kaXRvLXRyZWUtYnJhbmNoLFxuICAuZGl0by10cmVlLWxlYWYge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgZmxleDogYXV0bztcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgbWFyZ2luOiAxcHggMDtcbiAgICBAaW5jbHVkZSB1c2VyLXNlbGVjdChub25lKTtcbiAgfVxuXG4gIC5kaXRvLXRyZWUtbGFiZWwsXG4gIC5kaXRvLXRyZWUtaW5mbyB7XG4gICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgfVxuXG4gIC5kaXRvLXRyZWUtaW5mbyB7XG4gICAgcGFkZGluZy1sZWZ0OiAwLjM1ZW07XG4gICAgY29sb3I6IHJnYmEoJGNvbG9yLWJsYWNrLCAwLjIpO1xuICB9XG5cbiAgLmRpdG8tYnV0dG9ucyB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICB2aXNpYmlsaXR5OiBoaWRkZW47XG4gICAgaGVpZ2h0OiAxMDAlO1xuICAgIG1hcmdpbjogMXB4IDAgMXB4IDFlbTtcbiAgfVxuXG4gIC5kaXRvLXRyZWUtaGVhZGVyOmhvdmVyIHtcbiAgICA+IC5kaXRvLWJ1dHRvbnMge1xuICAgICAgdmlzaWJpbGl0eTogdmlzaWJsZTtcbiAgICB9IC8vIEhpZGUgYnV0dG9ucyBkdXJpbmcgZHJhZ2dpbmdcbiAgfVxuXG4gICYuZGl0by1kcmFnZ2luZyB7XG4gICAgLmRpdG8tdHJlZS1oZWFkZXIge1xuICAgICAgPiAuZGl0by1idXR0b25zIHtcbiAgICAgICAgdmlzaWJpbGl0eTogaGlkZGVuO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gICYuZGl0by1hY3RpdmUge1xuICAgID4gLmRpdG8tdHJlZS1oZWFkZXIge1xuICAgICAgYmFja2dyb3VuZDogJGNvbG9yLWFjdGl2ZTtcbiAgICAgIHBhZGRpbmc6IDAgJGlucHV0LXBhZGRpbmctaG9yO1xuICAgICAgbWFyZ2luOiAwICgtJGlucHV0LXBhZGRpbmctaG9yKTtcblxuICAgICAgPiAuZGl0by10cmVlLWJyYW5jaCB7XG4gICAgICAgID4gLmRpdG8tY2hldnJvbjo6YmVmb3JlIHtcbiAgICAgICAgICBjb2xvcjogJGNvbG9yLXdoaXRlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgID4gKiA+IC5kaXRvLXRyZWUtbGFiZWwge1xuICAgICAgICBjb2xvcjogJGNvbG9yLXdoaXRlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC5kaXRvLXByb3BlcnRpZXMge1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIG1hcmdpbi1sZWZ0OiAkY2hldnJvbi1pbmRlbnQ7XG5cbiAgICA+IHRyIHtcbiAgICAgIHZlcnRpY2FsLWFsaWduOiBiYXNlbGluZTtcbiAgICB9XG5cbiAgICAuZGl0by1sYWJlbCB7XG4gICAgICBtYXJnaW46IDA7XG5cbiAgICAgICY6OmFmdGVyIHtcbiAgICAgICAgY29udGVudDogJzogJztcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxudGhlYWQuZGl0by10YWJsZS1oZWFkXG4gIHRyXG4gICAgdGVtcGxhdGUoXG4gICAgICB2LWZvcj1cImNvbHVtbiBpbiBjb2x1bW5zXCJcbiAgICApXG4gICAgICB0aChcbiAgICAgICAgdi1pZj1cInNob3VsZFJlbmRlclNjaGVtYShjb2x1bW4pXCJcbiAgICAgICAgOmNsYXNzPVwiZ2V0Q29sdW1uQ2xhc3MoY29sdW1uKVwiXG4gICAgICApXG4gICAgICAgIFJvdXRlckxpbmsoXG4gICAgICAgICAgdi1pZj1cImNvbHVtbi5zb3J0YWJsZVwiXG4gICAgICAgICAgdi1zbG90PVwieyBuYXZpZ2F0ZSB9XCJcbiAgICAgICAgICA6dG89XCJnZXRTb3J0TGluayhjb2x1bW4pXCJcbiAgICAgICAgICBjdXN0b21cbiAgICAgICAgKVxuICAgICAgICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbihcbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgOmNsYXNzPVwiZ2V0U29ydENsYXNzKGNvbHVtbilcIlxuICAgICAgICAgICAgQGNsaWNrPVwibmF2aWdhdGVcIlxuICAgICAgICAgIClcbiAgICAgICAgICAgIC5kaXRvLW9yZGVyLWFycm93c1xuICAgICAgICAgICAgc3BhbiB7eyBnZXRMYWJlbChjb2x1bW4pIH19XG4gICAgICAgIHNwYW4oXG4gICAgICAgICAgdi1lbHNlXG4gICAgICAgICkge3sgZ2V0TGFiZWwoY29sdW1uKSB9fVxuICAgIHRoKFxuICAgICAgdi1pZj1cImhhc0VkaXRCdXR0b25zXCJcbiAgICApXG4gICAgICAvLy0gRW1wdHkgPHNwYW4+IGlzIG5lZWRlZCBmb3Igc3R5bGluZywgc2VlIF90YWJsZS5zY3NzXG4gICAgICBzcGFuXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCB7IGh5cGhlbmF0ZSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnRGl0b1RhYmxlSGVhZCcsIHtcbiAgcHJvcHM6IHtcbiAgICBxdWVyeTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgY29sdW1uczogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgaGFzRWRpdEJ1dHRvbnM6IHsgdHlwZTogQm9vbGVhbiwgcmVxdWlyZWQ6IHRydWUgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgc29ydCgpIHtcbiAgICAgIGNvbnN0IG9yZGVyID0gKHRoaXMucXVlcnkub3JkZXIgfHwgJycpLnNwbGl0KC9cXHMrLylcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG5hbWU6IG9yZGVyWzBdLFxuICAgICAgICBvcmRlcjogb3JkZXJbMV1cbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGdldENvbHVtbkNsYXNzKGNvbHVtbikge1xuICAgICAgcmV0dXJuIGBkaXRvLWNvbHVtbi0ke2h5cGhlbmF0ZShjb2x1bW4ubmFtZSl9YFxuICAgIH0sXG5cbiAgICBnZXRTb3J0Q2xhc3MoY29sdW1uKSB7XG4gICAgICByZXR1cm4gdGhpcy5zb3J0Lm5hbWUgPT09IGNvbHVtbi5uYW1lXG4gICAgICAgID8gYGRpdG8tc2VsZWN0ZWQgZGl0by1vcmRlci0ke3RoaXMuc29ydC5vcmRlcn1gXG4gICAgICAgIDogbnVsbFxuICAgIH0sXG5cbiAgICBnZXRTb3J0TGluayhjb2x1bW4pIHtcbiAgICAgIC8vIFRvZ2dsZSBvcmRlciBpZiB0aGUgc2FtZSBjb2x1bW4gaXMgY2xpY2tlZCBhZ2Fpbi5cbiAgICAgIGNvbnN0IG9yZGVyID1cbiAgICAgICAgdGhpcy5zb3J0Lm5hbWUgPT09IGNvbHVtbi5uYW1lICYmIHRoaXMuc29ydC5vcmRlciA9PT0gJ2FzYydcbiAgICAgICAgICA/ICdkZXNjJ1xuICAgICAgICAgIDogJ2FzYydcbiAgICAgIHJldHVybiB0aGlzLmdldFF1ZXJ5TGluayh7XG4gICAgICAgIC4uLnRoaXMucXVlcnksXG4gICAgICAgIG9yZGVyOiBgJHtjb2x1bW4ubmFtZX0gJHtvcmRlcn1gXG4gICAgICB9KVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5cbi5kaXRvLXRhYmxlLWhlYWQge1xuICBAaW5jbHVkZSB1c2VyLXNlbGVjdChub25lKTtcblxuICB0ciB7XG4gICAgdGgge1xuICAgICAgcGFkZGluZzogMDtcbiAgICAgIGZvbnQtd2VpZ2h0OiBub3JtYWw7XG4gICAgICB0ZXh0LWFsaWduOiBsZWZ0O1xuICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcblxuICAgICAgLmRpdG8tYnV0dG9uIHtcbiAgICAgICAgLy8gQ29udmVudGlvbjogTmVzdGVkIHNwYW5zIGhhbmRsZSBwYWRkaW5nLCBzZWUgYmVsb3dcbiAgICAgICAgZGlzcGxheTogYmxvY2s7IC8vIE92ZXJyaWRlIGRlZmF1bHQgaW5saW5lLWZsZXggcG9zaXRpb25pbmcuXG4gICAgICAgIHBhZGRpbmc6IDA7XG4gICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICB0ZXh0LWFsaWduOiBpbmhlcml0O1xuICAgICAgICBib3JkZXItcmFkaXVzOiAwO1xuICAgICAgfVxuXG4gICAgICBzcGFuIHtcbiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgICAgICAvLyBDb252ZW50aW9uOiBOZXN0ZWQgc3BhbnMgaGFuZGxlIHBhZGRpbmdcbiAgICAgICAgcGFkZGluZzogJGlucHV0LXBhZGRpbmc7XG5cbiAgICAgICAgJjplbXB0eTo6YWZ0ZXIge1xuICAgICAgICAgIC8vIFByZXZlbnQgZW1wdHkgPHRoPiBmcm9tIGNvbGxhcHNpbmdcbiAgICAgICAgICBjb250ZW50OiAnXFwyMDBiJzsgLy8gemVyby13aWR0aCBzcGFjZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICA+IHNwYW4ge1xuICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxudGQoXG4gIDpjbGFzcz1cImNlbGwuY2xhc3NcIlxuICA6c3R5bGU9XCJjZWxsLnN0eWxlXCJcbilcbiAgLy8tIFRPRE86IEltcGxlbWVudCBpbmxpbmVkIGNvbXBvbmVudHMgaW4gY2VsbCBtb2RlIVxuICBjb21wb25lbnQoXG4gICAgdi1pZj1cImNlbGwuY29tcG9uZW50XCJcbiAgICA6aXM9XCJjZWxsLmNvbXBvbmVudFwiXG4gICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgOm1ldGE9XCJtZXRhXCJcbiAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgOm5lc3RlZD1cIm5lc3RlZFwiXG4gICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICApXG4gIHNwYW4oXG4gICAgdi1lbHNlXG4gICAgdi1odG1sPVwicmVuZGVyQ2VsbChkYXRhKVwiXG4gIClcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IERpdG9Db250ZXh0IGZyb20gJy4uL0RpdG9Db250ZXh0LmpzJ1xuaW1wb3J0IHsgYXBwZW5kRGF0YVBhdGggfSBmcm9tICcuLi91dGlscy9kYXRhLmpzJ1xuaW1wb3J0IHsgZXNjYXBlSHRtbCB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnRGl0b1RhYmxlQ2VsbCcsIHtcbiAgcHJvcHM6IHtcbiAgICBjZWxsOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBzY2hlbWE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGRhdGFQYXRoOiB7IHR5cGU6IFN0cmluZywgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBkYXRhOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBtZXRhOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBzdG9yZTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgbmVzdGVkOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IHRydWUgfSxcbiAgICBkaXNhYmxlZDogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIHJlbmRlckNlbGwoaXRlbSkge1xuICAgICAgY29uc3QgeyBuYW1lLCByZW5kZXIgfSA9IHRoaXMuY2VsbFxuICAgICAgY29uc3QgdmFsdWUgPSBpdGVtW25hbWVdXG4gICAgICByZXR1cm4gcmVuZGVyXG4gICAgICAgID8gcmVuZGVyLmNhbGwoXG4gICAgICAgICAgICB0aGlzLFxuICAgICAgICAgICAgbmV3IERpdG9Db250ZXh0KHRoaXMsIHtcbiAgICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICAgIGRhdGE6IGl0ZW0sXG4gICAgICAgICAgICAgIGRhdGFQYXRoOiBhcHBlbmREYXRhUGF0aCh0aGlzLmRhdGFQYXRoLCBuYW1lKVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICApXG4gICAgICAgIDogZXNjYXBlSHRtbCh2YWx1ZSlcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4uZGl0by11cGxvYWQtZmlsZVxuICAuZGl0by10aHVtYm5haWwoXG4gICAgdi1pZj1cInRodW1ibmFpbFwiXG4gICAgOmNsYXNzPVwiYGRpdG8tdGh1bWJuYWlsLS0ke3RodW1ibmFpbH1gXCJcbiAgKVxuICAgIC5kaXRvLXRodW1ibmFpbF9faW5uZXJcbiAgICAgIGltZyhcbiAgICAgICAgdi1pZj1cInNvdXJjZVwiXG4gICAgICAgIDpzcmM9XCJzb3VyY2VcIlxuICAgICAgICBjcm9zc29yaWdpbj1cImFub255bW91c1wiXG4gICAgICApXG4gICAgICAuZGl0by10aHVtYm5haWxfX3R5cGUoXG4gICAgICAgIHYtZWxzZVxuICAgICAgKVxuICAgICAgICBzcGFuIHt7IHR5cGUgfX1cbiAgc3BhbiB7eyBmaWxlLm5hbWUgfX1cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ0RpdG9VcGxvYWRGaWxlJywge1xuICBwcm9wczoge1xuICAgIGZpbGU6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHRodW1ibmFpbDogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICB0aHVtYm5haWxVcmw6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiBudWxsIH1cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICB1cGxvYWRVcmw6IG51bGxcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICB0eXBlKCkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgVFlQRVNbdGhpcy5maWxlLnR5cGVdIHx8XG4gICAgICAgIHRoaXMuZmlsZS5uYW1lLnNwbGl0KCcuJykucG9wKCkudG9VcHBlckNhc2UoKVxuICAgICAgKVxuICAgIH0sXG5cbiAgICBzb3VyY2UoKSB7XG4gICAgICByZXR1cm4gdGhpcy51cGxvYWRVcmwgfHwgdGhpcy50aHVtYm5haWxVcmxcbiAgICB9XG4gIH0sXG5cbiAgd2F0Y2g6IHtcbiAgICAnZmlsZS51cGxvYWQuZmlsZSc6IHtcbiAgICAgIGltbWVkaWF0ZTogdHJ1ZSxcbiAgICAgIGhhbmRsZXIoZmlsZSkge1xuICAgICAgICBpZiAodGhpcy50aHVtYm5haWwgJiYgZmlsZT8udHlwZS5zdGFydHNXaXRoKCdpbWFnZS8nKSkge1xuICAgICAgICAgIGNvbnN0IHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKClcbiAgICAgICAgICByZWFkZXIub25sb2FkID0gKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy51cGxvYWRVcmwgPSByZWFkZXIucmVzdWx0XG4gICAgICAgICAgfVxuICAgICAgICAgIHJlYWRlci5yZWFkQXNEYXRhVVJMKGZpbGUpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy51cGxvYWRVcmwgPSBudWxsXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn0pXG5cbmNvbnN0IFRZUEVTID0ge1xuICAndGV4dC9wbGFpbic6ICdUWFQnLFxuICAndGV4dC9odG1sJzogJ0hUTUwnLFxuICAndGV4dC9jc3MnOiAnQ1NTJyxcbiAgJ3RleHQvamF2YXNjcmlwdCc6ICdKUycsXG4gICdpbWFnZS9qcGVnJzogJ0pQRycsXG4gICdpbWFnZS9wbmcnOiAnUE5HJyxcbiAgJ2ltYWdlL2dpZic6ICdHSUYnLFxuICAnaW1hZ2Uvc3ZnK3htbCc6ICdTVkcnLFxuICAnbW92aWUvbXA0JzogJ01QNCcsXG4gICdhdWRpby9tcGVnJzogJ01QMycsXG4gICdhcHBsaWNhdGlvbi9qc29uJzogJ0pTT04nLFxuICAnYXBwbGljYXRpb24veG1sJzogJ1hNTCcsXG4gICdhcHBsaWNhdGlvbi9wZGYnOiAnUERGJyxcbiAgJ2FwcGxpY2F0aW9uL3ppcCc6ICdaSVAnXG59XG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AdXNlICdzYXNzOm1hdGgnO1xuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLmRpdG8tdXBsb2FkLWZpbGUge1xuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQ7XG59XG5cbi5kaXRvLXRodW1ibmFpbCB7XG4gICRzZWxmOiAmO1xuXG4gIC8vIFNtYWxsIHNpemUgYnkgZGVmYXVsdFxuICAtLW1heC1zaXplOiAjezEgKiAkaW5wdXQtaGVpZ2h0fTtcbiAgLS1jb3JuZXItc2l6ZTogY2FsYyh2YXIoLS1tYXgtc2l6ZSkgLyA1KTtcbiAgLS1zaGFkb3ctc2l6ZTogMXB4O1xuICAtLW1pbi1zaXplOiBjYWxjKDIgKiB2YXIoLS1jb3JuZXItc2l6ZSkpO1xuICAtLW1hcmdpbjogMGVtO1xuICAtLWRyb3Atc2hhZG93OiBkcm9wLXNoYWRvdyhcbiAgICAwIGNhbGModmFyKC0tc2hhZG93LXNpemUpICogMC43NSkgdmFyKC0tc2hhZG93LXNpemUpICN7cmdiYShcbiAgICAgICAgJGNvbG9yLWJsYWNrLFxuICAgICAgICAwLjRcbiAgICAgICl9XG4gICk7XG5cbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBtYXJnaW46IHZhcigtLW1hcmdpbik7XG4gIG1hcmdpbi1yaWdodDogMC41ZW07XG4gIGZpbHRlcjogdmFyKC0tZHJvcC1zaGFkb3cpO1xuXG4gICYtLXNtYWxsIHtcbiAgICAtLW1heC1zaXplOiAjezEgKiAkaW5wdXQtaGVpZ2h0fTtcbiAgICAtLW1hcmdpbjogMGVtO1xuICAgIC0tc2hhZG93LXNpemU6IDFweDtcbiAgfVxuXG4gICYtLW1lZGl1bSB7XG4gICAgLS1tYXgtc2l6ZTogI3syICogJGlucHV0LWhlaWdodH07XG4gICAgLS1tYXJnaW46IDAuMjVlbTtcbiAgICAtLXNoYWRvdy1zaXplOiAxLjVweDtcbiAgfVxuXG4gICYtLWxhcmdlIHtcbiAgICAtLW1heC1zaXplOiAjezQgKiAkaW5wdXQtaGVpZ2h0fTtcbiAgICAtLW1hcmdpbjogMC41ZW07XG4gICAgLS1zaGFkb3ctc2l6ZTogMi41cHg7XG4gIH1cblxuICAmX19pbm5lciB7XG4gICAgYmFja2dyb3VuZDogI2ZmZmZmZjtcbiAgICBjbGlwLXBhdGg6IHBvbHlnb24oXG4gICAgICAwIDAsXG4gICAgICBjYWxjKDEwMCUgLSB2YXIoLS1jb3JuZXItc2l6ZSkpIDAsXG4gICAgICAxMDAlIHZhcigtLWNvcm5lci1zaXplKSxcbiAgICAgIDEwMCUgMTAwJSxcbiAgICAgIDAgMTAwJVxuICAgICk7XG5cbiAgICAmOjphZnRlciB7XG4gICAgICBjb250ZW50OiAnJztcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgIHRvcDogMDtcbiAgICAgIHJpZ2h0OiAwO1xuICAgICAgd2lkdGg6IHZhcigtLWNvcm5lci1zaXplKTtcbiAgICAgIGhlaWdodDogdmFyKC0tY29ybmVyLXNpemUpO1xuICAgICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDQ1ZGVnLCAjZmZmZmZmLCAjZWVlZWVlIDQwJSwgI2RkZGRkZCA1MCUpO1xuICAgICAgZmlsdGVyOiB2YXIoLS1kcm9wLXNoYWRvdyk7XG4gICAgfVxuICB9XG5cbiAgJl9fdHlwZSB7XG4gICAgLS1mb250LXNpemU6IHZhcigtLWNvcm5lci1zaXplKTtcblxuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICBtaW4td2lkdGg6IHZhcigtLW1pbi1zaXplKTtcbiAgICBtaW4taGVpZ2h0OiB2YXIoLS1tYXgtc2l6ZSk7XG4gICAgYXNwZWN0LXJhdGlvOiAzIC8gNDtcblxuICAgIHNwYW4ge1xuICAgICAgLS1jb2xvcjogI3skY29sb3ItZ3JleX07XG5cbiAgICAgIGZvbnQtc2l6ZTogbWluKHZhcigtLWZvbnQtc2l6ZSksICN7MS4yNSAqICRmb250LXNpemV9KTtcbiAgICAgIGNvbG9yOiB2YXIoLS1jb2xvcik7XG5cbiAgICAgICN7JHNlbGZ9Om5vdCgjeyRzZWxmfS0tc21hbGwpICYge1xuICAgICAgICBwYWRkaW5nOiAwIGNhbGModmFyKC0tZm9udC1zaXplKSAvIDQpO1xuICAgICAgICBib3JkZXItcmFkaXVzOiBjYWxjKHZhcigtLWZvbnQtc2l6ZSkgLyA0KTtcbiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tY29sb3IpO1xuICAgICAgICBjb2xvcjogI2ZmZmZmZjtcbiAgICAgIH1cblxuICAgICAgI3skc2VsZn0tLW1lZGl1bSAmIHtcbiAgICAgICAgLS1jb2xvcjogI3skY29sb3ItbGlnaHR9O1xuICAgICAgfVxuXG4gICAgICAjeyRzZWxmfS0tbGFyZ2UgJiB7XG4gICAgICAgIC0tY29sb3I6ICN7JGNvbG9yLWxpZ2h0ZXJ9O1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGltZyB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgLy8gU1ZHIGltYWdlcyBuZWVkIDEwMCUgc2V0dGluZ3MgdG8gc2NhbGUgaW50byB0aGUgY29udGFpbmVyLlxuICAgIHdpZHRoOiAxMDAlO1xuICAgIGhlaWdodDogMTAwJTtcbiAgICBtaW4td2lkdGg6IHZhcigtLW1pbi1zaXplKTtcbiAgICBtaW4taGVpZ2h0OiB2YXIoLS1taW4tc2l6ZSk7XG4gICAgbWF4LXdpZHRoOiB2YXIoLS1tYXgtc2l6ZSk7XG4gICAgbWF4LWhlaWdodDogdmFyKC0tbWF4LXNpemUpO1xuICB9XG59XG48L3N0eWxlPlxuIiwiaW1wb3J0IHsgaXNSZWYsIG5leHRUaWNrLCBkZWZpbmVDb21wb25lbnQsIHJlZiwgcmVhY3RpdmUsIGggfSBmcm9tICd2dWUtZGVtaSc7XG5pbXBvcnQgeyB0cnlPbk1vdW50ZWQsIHRyeU9uU2NvcGVEaXNwb3NlLCB1bnJlZkVsZW1lbnQsIGRlZmF1bHREb2N1bWVudCwgdG9WYWx1ZSwgdXNlVk1vZGVsIH0gZnJvbSAnQHZ1ZXVzZS9jb3JlJztcbmltcG9ydCBTb3J0YWJsZSBmcm9tICdzb3J0YWJsZWpzJztcblxuZnVuY3Rpb24gdXNlU29ydGFibGUoZWwsIGxpc3QsIG9wdGlvbnMgPSB7fSkge1xuICBsZXQgc29ydGFibGU7XG4gIGNvbnN0IHsgZG9jdW1lbnQgPSBkZWZhdWx0RG9jdW1lbnQsIC4uLnJlc2V0T3B0aW9ucyB9ID0gb3B0aW9ucztcbiAgY29uc3QgZGVmYXVsdE9wdGlvbnMgPSB7XG4gICAgb25VcGRhdGU6IChlKSA9PiB7XG4gICAgICBtb3ZlQXJyYXlFbGVtZW50KGxpc3QsIGUub2xkSW5kZXgsIGUubmV3SW5kZXgpO1xuICAgIH1cbiAgfTtcbiAgY29uc3Qgc3RhcnQgPSAoKSA9PiB7XG4gICAgY29uc3QgdGFyZ2V0ID0gdHlwZW9mIGVsID09PSBcInN0cmluZ1wiID8gZG9jdW1lbnQ/LnF1ZXJ5U2VsZWN0b3IoZWwpIDogdW5yZWZFbGVtZW50KGVsKTtcbiAgICBpZiAoIXRhcmdldClcbiAgICAgIHJldHVybjtcbiAgICBzb3J0YWJsZSA9IG5ldyBTb3J0YWJsZSh0YXJnZXQsIHsgLi4uZGVmYXVsdE9wdGlvbnMsIC4uLnJlc2V0T3B0aW9ucyB9KTtcbiAgfTtcbiAgY29uc3Qgc3RvcCA9ICgpID0+IHNvcnRhYmxlPy5kZXN0cm95KCk7XG4gIGNvbnN0IG9wdGlvbiA9IChuYW1lLCB2YWx1ZSkgPT4ge1xuICAgIGlmICh2YWx1ZSAhPT0gdm9pZCAwKVxuICAgICAgc29ydGFibGU/Lm9wdGlvbihuYW1lLCB2YWx1ZSk7XG4gICAgZWxzZVxuICAgICAgcmV0dXJuIHNvcnRhYmxlPy5vcHRpb24obmFtZSk7XG4gIH07XG4gIHRyeU9uTW91bnRlZChzdGFydCk7XG4gIHRyeU9uU2NvcGVEaXNwb3NlKHN0b3ApO1xuICByZXR1cm4geyBzdG9wLCBzdGFydCwgb3B0aW9uIH07XG59XG5mdW5jdGlvbiBtb3ZlQXJyYXlFbGVtZW50KGxpc3QsIGZyb20sIHRvKSB7XG4gIGNvbnN0IF92YWx1ZUlzUmVmID0gaXNSZWYobGlzdCk7XG4gIGNvbnN0IGFycmF5ID0gX3ZhbHVlSXNSZWYgPyBbLi4udG9WYWx1ZShsaXN0KV0gOiB0b1ZhbHVlKGxpc3QpO1xuICBpZiAodG8gPj0gMCAmJiB0byA8IGFycmF5Lmxlbmd0aCkge1xuICAgIGNvbnN0IGVsZW1lbnQgPSBhcnJheS5zcGxpY2UoZnJvbSwgMSlbMF07XG4gICAgbmV4dFRpY2soKCkgPT4ge1xuICAgICAgYXJyYXkuc3BsaWNlKHRvLCAwLCBlbGVtZW50KTtcbiAgICAgIGlmIChfdmFsdWVJc1JlZilcbiAgICAgICAgbGlzdC52YWx1ZSA9IGFycmF5O1xuICAgIH0pO1xuICB9XG59XG5cbmNvbnN0IFVzZVNvcnRhYmxlID0gLyogQF9fUFVSRV9fICovIC8qICNfX1BVUkVfXyAqLyBkZWZpbmVDb21wb25lbnQoe1xuICBuYW1lOiBcIlVzZVNvcnRhYmxlXCIsXG4gIG1vZGVsOiB7XG4gICAgLy8gQ29tcGF0aWJsZSB3aXRoIHZ1ZTJcbiAgICBwcm9wOiBcIm1vZGVsVmFsdWVcIixcbiAgICBldmVudDogXCJ1cGRhdGU6bW9kZWxWYWx1ZVwiXG4gIH0sXG4gIHByb3BzOiB7XG4gICAgbW9kZWxWYWx1ZToge1xuICAgICAgdHlwZTogQXJyYXksXG4gICAgICByZXF1aXJlZDogdHJ1ZVxuICAgIH0sXG4gICAgdGFnOiB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBkZWZhdWx0OiBcImRpdlwiXG4gICAgfSxcbiAgICBvcHRpb25zOiB7XG4gICAgICB0eXBlOiBPYmplY3QsXG4gICAgICByZXF1aXJlZDogdHJ1ZVxuICAgIH1cbiAgfSxcbiAgc2V0dXAocHJvcHMsIHsgc2xvdHMgfSkge1xuICAgIGNvbnN0IGxpc3QgPSB1c2VWTW9kZWwocHJvcHMsIFwibW9kZWxWYWx1ZVwiKTtcbiAgICBjb25zdCB0YXJnZXQgPSByZWYoKTtcbiAgICBjb25zdCBkYXRhID0gcmVhY3RpdmUodXNlU29ydGFibGUodGFyZ2V0LCBsaXN0LCBwcm9wcy5vcHRpb25zKSk7XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGlmIChzbG90cy5kZWZhdWx0KVxuICAgICAgICByZXR1cm4gaChwcm9wcy50YWcsIHsgcmVmOiB0YXJnZXQgfSwgc2xvdHMuZGVmYXVsdChkYXRhKSk7XG4gICAgfTtcbiAgfVxufSk7XG5cbmV4cG9ydCB7IFVzZVNvcnRhYmxlIH07XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuVXNlU29ydGFibGUuZGl0by1kcmFnZ2FibGUoXG4gIHYtaWY9XCJkcmFnZ2FibGVcIlxuICA6Y2xhc3M9XCJ7ICdkaXRvLWRyYWdnYWJsZS0tZHJhZ2dpbmcnOiBpc0RyYWdnaW5nIH1cIlxuICA6dGFnPVwidGFnXCJcbiAgOm1vZGVsVmFsdWU9XCJtb2RlbFZhbHVlXCJcbiAgOm9wdGlvbnM9XCJ7IC4uLm9wdGlvbnMsIG9uU3RhcnQsIG9uRW5kIH1cIlxuICBAdXBkYXRlOm1vZGVsVmFsdWU9XCIkZW1pdCgndXBkYXRlOm1vZGVsVmFsdWUnLCAkZXZlbnQpXCJcbilcbiAgc2xvdFxuY29tcG9uZW50KFxuICB2LWVsc2VcbiAgOmlzPVwidGFnXCJcbilcbiAgc2xvdFxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQnXG5pbXBvcnQgRG9tTWl4aW4gZnJvbSAnLi4vbWl4aW5zL0RvbU1peGluLmpzJ1xuaW1wb3J0IHsgVXNlU29ydGFibGUgfSBmcm9tICdAdnVldXNlL2ludGVncmF0aW9ucy91c2VTb3J0YWJsZS9jb21wb25lbnQnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnRGl0b0RyYWdnYWJsZScsIHtcbiAgbWl4aW5zOiBbRG9tTWl4aW5dLFxuICBjb21wb25lbnRzOiB7IFVzZVNvcnRhYmxlIH0sXG4gIGVtaXRzOiBbJ3VwZGF0ZTptb2RlbFZhbHVlJ10sXG5cbiAgcHJvcHM6IHtcbiAgICBtb2RlbFZhbHVlOiB7XG4gICAgICB0eXBlOiBBcnJheSxcbiAgICAgIHJlcXVpcmVkOiB0cnVlXG4gICAgfSxcbiAgICB0YWc6IHtcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIGRlZmF1bHQ6ICdkaXYnXG4gICAgfSxcbiAgICBvcHRpb25zOiB7XG4gICAgICB0eXBlOiBPYmplY3QsXG4gICAgICByZXF1aXJlZDogdHJ1ZVxuICAgIH0sXG4gICAgZHJhZ2dhYmxlOiB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogdHJ1ZVxuICAgIH1cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBtb3VzZUV2ZW50czogbnVsbCxcbiAgICAgIGlzRHJhZ2dpbmc6IGZhbHNlXG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBvblN0YXJ0KGV2ZW50KSB7XG4gICAgICB0aGlzLm9wdGlvbnMub25TdGFydD8uKGV2ZW50KVxuICAgICAgdGhpcy5pc0RyYWdnaW5nID0gdHJ1ZVxuICAgICAgdGhpcy5tb3VzZUV2ZW50cz8ucmVtb3ZlKClcbiAgICB9LFxuXG4gICAgb25FbmQoZXZlbnQpIHtcbiAgICAgIHRoaXMub3B0aW9ucy5vbkVuZD8uKGV2ZW50KVxuICAgICAgLy8gS2VlcCBgaXNEcmFnZ2luZ2AgdHJ1ZSB1bnRpbCB0aGUgbmV4dCBtb3VzZSBpbnRlcmFjdGlvbiBzbyB0aGF0XG4gICAgICAvLyBjb25mdXNlZCBob3ZlciBzdGF0ZXMgYXJlIGNsZWFyZWQgYmVmb3JlIHJlbW92aW5nIHRoZSBob3ZlciBjYXRjaGVyLlxuICAgICAgdGhpcy5tb3VzZUV2ZW50cyA9IHRoaXMuZG9tT24oZG9jdW1lbnQsIHtcbiAgICAgICAgbW91c2Vkb3duOiB0aGlzLm9uTW91c2UsXG4gICAgICAgIG1vdXNlbW92ZTogdGhpcy5vbk1vdXNlLFxuICAgICAgICBtb3VzZWxlYXZlOiB0aGlzLm9uTW91c2VcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIG9uTW91c2UoKSB7XG4gICAgICB0aGlzLmlzRHJhZ2dpbmcgPSBmYWxzZVxuICAgICAgdGhpcy5tb3VzZUV2ZW50cz8ucmVtb3ZlKClcbiAgICAgIHRoaXMubW91c2VFdmVudHMgPSBudWxsXG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLmRpdG8tZHJhZ2dhYmxlIHtcbiAgLy8gT3ZlcmxheSBhIGhvdmVyIGNhdGNoZXIgd2hpbGUgd2UncmUgZHJhZ2dpbmcgdG8gcHJldmVudCBob3ZlciBzdGF0ZXMgZnJvbVxuICAvLyBnZXR0aW5nIHN0dWNrIC8gY29uZnVzZWQuIFNhZmFyaSBzdHJ1Z2dsZXMgd2l0aCB0aGlzLCBzbyBkaXNhYmxlIGl0IHRoZXJlLlxuICBAaW5jbHVkZSBicm93c2VyLXF1ZXJ5KCgnY2hyb21lJywgJ2ZpcmVmb3gnKSkge1xuICAgICY6aGFzKCZfX2Nob3NlbiksXG4gICAgJi0tZHJhZ2dpbmcge1xuICAgICAgPiAqIHtcbiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuXG4gICAgICAgID4gOmZpcnN0LWNoaWxkOjphZnRlciB7XG4gICAgICAgICAgY29udGVudDogJyc7XG4gICAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICAgIGluc2V0OiAwO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgJl9fZmFsbGJhY2sge1xuICAgIGZpbHRlcjogZHJvcC1zaGFkb3coMCAycHggNHB4ICRjb2xvci1zaGFkb3cpO1xuXG4gICAgLy8gTmVzdGVkIDx0ZD4gbmVlZCB0byBhbHNvIHN3aXRjaCB0byBgZGlzcGxheTogZmxleGAgc3R5bGUgZHVyaW5nIGRyYWdnaW5nLlxuICAgICYsXG4gICAgdGQge1xuICAgICAgZGlzcGxheTogZmxleDtcblxuICAgICAgPiAqIHtcbiAgICAgICAgZmxleDogMTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuLmRpdG8tc3Bpbm5lcihcbiAgdi1zaG93PVwibG9hZGluZ1wiXG4gIDpzdHlsZT1cInsgJy0tY29sb3InOiBjb2xvciwgJy0tc2l6ZSc6IHNpemUsICctLW1hcmdpbic6IG1hcmdpbiB9XCJcbilcbiAgLmRpdG8tc3Bpbm5lcl9fcHVsc2UuZGl0by1zcGlubmVyX19wdWxzZTFcbiAgLmRpdG8tc3Bpbm5lcl9fcHVsc2UuZGl0by1zcGlubmVyX19wdWxzZTJcbiAgLmRpdG8tc3Bpbm5lcl9fcHVsc2UuZGl0by1zcGlubmVyX19wdWxzZTNcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ0RpdG9TcGlubmVyJywge1xuICBwcm9wczoge1xuICAgIGxvYWRpbmc6IHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiB0cnVlXG4gICAgfSxcbiAgICBjb2xvcjoge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgZGVmYXVsdDogbnVsbFxuICAgIH0sXG4gICAgc2l6ZToge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgZGVmYXVsdDogbnVsbFxuICAgIH0sXG4gICAgbWFyZ2luOiB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBkZWZhdWx0OiBudWxsXG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuLmRpdG8tc3Bpbm5lciB7XG4gIC0tY29sb3I6ICM5OTk5OTk7XG4gIC0tc2l6ZTogOHB4O1xuICAtLW1hcmdpbjogMnB4O1xuXG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG5cbiAgJl9fcHVsc2Uge1xuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jb2xvcik7XG4gICAgd2lkdGg6IHZhcigtLXNpemUpO1xuICAgIGhlaWdodDogdmFyKC0tc2l6ZSk7XG4gICAgbWFyZ2luOiB2YXIoLS1tYXJnaW4pO1xuICAgIGJvcmRlci1yYWRpdXM6IDEwMCU7XG4gICAgYW5pbWF0aW9uOiBkaXRvLXNwaW5uZXItcHVsc2UgMC43NXMgY3ViaWMtYmV6aWVyKDAuMiwgMC42OCwgMC4xOCwgMS4wOCkgMHNcbiAgICAgIGluZmluaXRlIGJvdGg7XG4gIH1cblxuICAmX19wdWxzZTEge1xuICAgIGFuaW1hdGlvbi1kZWxheTogMC4xMnM7XG4gIH1cblxuICAmX19wdWxzZTIge1xuICAgIGFuaW1hdGlvbi1kZWxheTogMC4yNHM7XG4gIH1cblxuICAmX19wdWxzZTMge1xuICAgIGFuaW1hdGlvbi1kZWxheTogMC4zNnM7XG4gIH1cbn1cblxuQGtleWZyYW1lcyBkaXRvLXNwaW5uZXItcHVsc2Uge1xuICAwJSxcbiAgODAlIHtcbiAgICB0cmFuc2Zvcm06IHNjYWxlKDEpO1xuICAgIG9wYWNpdHk6IDE7XG4gIH1cblxuICA0NSUge1xuICAgIHRyYW5zZm9ybTogc2NhbGUoMC4xKTtcbiAgICBvcGFjaXR5OiAwLjc7XG4gIH1cbn1cblxuQGtleWZyYW1lcyBkaXRvLXNwaW5uZXItcHVsc2Uge1xuICAwJSxcbiAgODAlIHtcbiAgICB0cmFuc2Zvcm06IHNjYWxlKDEpO1xuICAgIG9wYWNpdHk6IDE7XG4gIH1cblxuICA0NSUge1xuICAgIHRyYW5zZm9ybTogc2NhbGUoMC4xKTtcbiAgICBvcGFjaXR5OiAwLjc7XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCI8c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmZ1bmN0aW9uIERpdG9WTm9kZSh7IHZub2RlIH0pIHtcbiAgcmV0dXJuIHZub2RlXG59XG5cbkRpdG9WTm9kZS5wcm9wcyA9IHtcbiAgdm5vZGU6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdEaXRvVm5vZGUnLCBEaXRvVk5vZGUpXG48L3NjcmlwdD5cbiIsIi8vIERpdG9UeXBlQ29tcG9uZW50IGlzIHRoZSBhYnN0cmFjdCBiYXNlIGNvbXBvbmVudCBmb3IgYWxsIG90aGVyIHR5cGVcbi8vIGNvbXBvbmVudHMgaW5zaWRlIHRoZSB0eXBlcy8gZm9sZGVyLiBUaGVyZSdzIGFsc28gYSBzZXBhcmF0ZSBjb25jcmV0ZVxuLy8gYERpdG9UeXBlQ29tcG9uZW50LnZ1ZWAgY29tcG9uZW50LCB1c2UgdG8gcmVuZGVyIGB7IHR5cGU6ICdjb21wb25lbnQnIH1gXG5pbXBvcnQgeyBhc0FycmF5LCBjYW1lbGl6ZSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgVHlwZU1peGluIGZyb20gJy4vbWl4aW5zL1R5cGVNaXhpbi5qcydcbmltcG9ydCB7IHJlZ2lzdGVyVHlwZUNvbXBvbmVudCwgZ2V0VHlwZUNvbXBvbmVudCB9IGZyb20gJy4vdXRpbHMvc2NoZW1hLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQge1xuICBleHRlbmRzOiBEaXRvQ29tcG9uZW50LFxuICBtaXhpbnM6IFtUeXBlTWl4aW5dLFxuXG4gIG5hdGl2ZUZpZWxkOiBmYWxzZSxcbiAgdGV4dEZpZWxkOiBmYWxzZSxcbiAgLy8gU2V0IHJlYXNvbmFibGUgZGVmYXVsdHMgZm9yIGFsbCBvZiB0aGVzZSB0aGF0IGFyZSB1c2VkIGJ5IG1vc3QgdHlwZVxuICAvLyBjb21wb25lbnRzLiBUaGVzZSBvbmx5IG5lZWQgZGVmaW5pbmcgaW4gc3ViLWNsYXNzZXMgd2hlbiB0aGV5IGRpZmZlci5cbiAgZGVmYXVsdFZhbHVlOiBudWxsLFxuICBkZWZhdWx0TmVzdGVkOiB0cnVlLFxuICBkZWZhdWx0VmlzaWJsZTogdHJ1ZSxcbiAgZ2VuZXJhdGVMYWJlbDogdHJ1ZSxcbiAgZXhjbHVkZVZhbHVlOiBmYWxzZSxcbiAgaWdub3JlTWlzc2luZ1ZhbHVlOiBudWxsLFxuICBvbWl0U3BhY2luZzogZmFsc2UsXG5cbiAgY29tcG9uZW50OiBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCxcblxuICBnZXQ6IGdldFR5cGVDb21wb25lbnQsXG5cbiAgcmVnaXN0ZXIodHlwZXMsIGRlZmluaXRpb24gPSB7fSkge1xuICAgIHR5cGVzID0gYXNBcnJheSh0eXBlcylcbiAgICBjb25zdCBjb21wb25lbnQgPSB0aGlzLmNvbXBvbmVudChcbiAgICAgIGBEaXRvVHlwZSR7Y2FtZWxpemUodHlwZXNbMF0sIHRydWUpfWAsXG4gICAgICBkZWZpbml0aW9uXG4gICAgKVxuICAgIGZvciAoY29uc3QgdHlwZSBvZiB0eXBlcykge1xuICAgICAgcmVnaXN0ZXJUeXBlQ29tcG9uZW50KHR5cGUsIGNvbXBvbmVudClcbiAgICB9XG4gICAgcmV0dXJuIGNvbXBvbmVudFxuICB9XG59XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuYnV0dG9uLmRpdG8tYnV0dG9uKFxuICA6aWQ9XCJkYXRhUGF0aFwiXG4gIHJlZj1cImVsZW1lbnRcIlxuICA6dHlwZT1cInR5cGVcIlxuICA6dGl0bGU9XCJ0aXRsZVwiXG4gIDpjbGFzcz1cImJ1dHRvbkNsYXNzXCJcbiAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4pXG4gIC5kaXRvLWJ1dHRvbl9fdGV4dChcbiAgICB2LWlmPVwidGV4dFwiXG4gICkge3sgdGV4dCB9fVxuICAuZGl0by1pbmZvKFxuICAgIHYtaWY9XCIhbGFiZWwgJiYgaW5mb1wiXG4gICAgOmRhdGEtaW5mbz1cImluZm9cIlxuICApXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9UeXBlQ29tcG9uZW50IGZyb20gJy4uL0RpdG9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IHsgZ2V0U2NoZW1hQWNjZXNzb3IgfSBmcm9tICcuLi91dGlscy9hY2Nlc3Nvci5qcydcbmltcG9ydCB7IGhhc1Jlc291cmNlIH0gZnJvbSAnLi4vdXRpbHMvcmVzb3VyY2UuanMnXG5pbXBvcnQgeyBsYWJlbGl6ZSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbmV4cG9ydCBkZWZhdWx0IERpdG9UeXBlQ29tcG9uZW50LnJlZ2lzdGVyKFxuICBbJ2J1dHRvbicsICdzdWJtaXQnXSxcbiAgLy8gQHZ1ZS9jb21wb25lbnRcbiAge1xuICAgIGRlZmF1bHRWYWx1ZTogKCkgPT4gdW5kZWZpbmVkLCAvLyBDYWxsYmFjayB0byBvdmVycmlkZSBgZGVmYXVsdFZhbHVlOiBudWxsYFxuICAgIGV4Y2x1ZGVWYWx1ZTogdHJ1ZSxcbiAgICBkZWZhdWx0V2lkdGg6ICdhdXRvJyxcbiAgICBnZW5lcmF0ZUxhYmVsOiBmYWxzZSxcblxuICAgIGNvbXB1dGVkOiB7XG4gICAgICB2ZXJiKCkge1xuICAgICAgICByZXR1cm4gdGhpcy52ZXJic1t0aGlzLm5hbWVdXG4gICAgICB9LFxuXG4gICAgICBidXR0b25DbGFzcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmVyYiA/IGBkaXRvLWJ1dHRvbi0ke3RoaXMudmVyYn1gIDogbnVsbFxuICAgICAgfSxcblxuICAgICAgdGV4dDogZ2V0U2NoZW1hQWNjZXNzb3IoJ3RleHQnLCB7XG4gICAgICAgIHR5cGU6IFN0cmluZ1xuICAgICAgfSksXG5cbiAgICAgIHRpdGxlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy50ZXh0IHx8IGxhYmVsaXplKHRoaXMudmVyYilcbiAgICAgIH0sXG5cbiAgICAgIGluZm86IGdldFNjaGVtYUFjY2Vzc29yKCdpbmZvJywge1xuICAgICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICAgIGRlZmF1bHQ6IG51bGxcbiAgICAgIH0pLFxuXG4gICAgICBjbG9zZUZvcm06IGdldFNjaGVtYUFjY2Vzc29yKCdjbG9zZUZvcm0nLCB7XG4gICAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBtZXRob2RzOiB7XG4gICAgICAvLyBAb3ZlcnJpZGVcbiAgICAgIGdldEV2ZW50cygpIHtcbiAgICAgICAgY29uc3QgeyBvbkZvY3VzLCBvbkJsdXIsIG9uQ2xpY2sgfSA9IHRoaXNcbiAgICAgICAgcmV0dXJuIHsgb25Gb2N1cywgb25CbHVyLCBvbkNsaWNrIH1cbiAgICAgIH0sXG5cbiAgICAgIGFzeW5jIHN1Ym1pdChvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlc291cmNlQ29tcG9uZW50Py5zdWJtaXQodGhpcywgb3B0aW9ucylcbiAgICAgIH0sXG5cbiAgICAgIGFzeW5jIG9uQ2xpY2soKSB7XG4gICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IHRoaXMuZW1pdEV2ZW50KCdjbGljaycsIHtcbiAgICAgICAgICBwYXJlbnQ6IHRoaXMuc2NoZW1hQ29tcG9uZW50XG4gICAgICAgIH0pXG4gICAgICAgIC8vIEhhdmUgYnV0dG9ucyB0aGF0IGRlZmluZSByZXNvdXJjZXMgY2FsbCBgdGhpcy5zdWJtaXQoKWAgYnkgZGVmYXVsdDpcbiAgICAgICAgaWYgKFxuICAgICAgICAgIHJlcyA9PT0gdW5kZWZpbmVkICYmIC8vIE1lYW5pbmc6IGRvbid0IHByZXZlbnQgZGVmYXVsdC5cbiAgICAgICAgICBoYXNSZXNvdXJjZSh0aGlzLnNjaGVtYSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgYXdhaXQgdGhpcy5zdWJtaXQoKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG4pXG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by1idXR0b24ge1xuICAkc2VsZjogJjtcblxuICAmX190ZXh0IHtcbiAgICBAaW5jbHVkZSBlbGxpcHNpcztcbiAgfVxufVxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4uZGl0by1jaGVja2JveFxuICBpbnB1dChcbiAgICA6aWQ9XCJkYXRhUGF0aFwiXG4gICAgcmVmPVwiZWxlbWVudFwiXG4gICAgdi1tb2RlbD1cInZhbHVlXCJcbiAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICApXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9UeXBlQ29tcG9uZW50IGZyb20gJy4uL0RpdG9UeXBlQ29tcG9uZW50LmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b1R5cGVDb21wb25lbnQucmVnaXN0ZXIoJ2NoZWNrYm94Jywge1xuICBuYXRpdmVGaWVsZDogdHJ1ZVxufSlcbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5cbi5kaXRvLWNoZWNrYm94IHtcbiAgQGV4dGVuZCAlaW5wdXQtYm9yZGVybGVzcztcbn1cbjwvc3R5bGU+XG4iLCJpbXBvcnQge1xuICBpc09iamVjdCxcbiAgaXNGdW5jdGlvbixcbiAgaXNQcm9taXNlLFxuICBub3JtYWxpemVEYXRhUGF0aCxcbiAgZ2V0VmFsdWVBdERhdGFQYXRoXG59IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQgeyByZWFjdGl2ZSB9IGZyb20gJ3Z1ZSdcbmltcG9ydCBMb2FkaW5nTWl4aW4gZnJvbSAnLi9Mb2FkaW5nTWl4aW4uanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCB7XG4gIG1peGluczogW0xvYWRpbmdNaXhpbl0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgaXNMb2FkaW5nOiBmYWxzZSxcbiAgICAgIGFzeW5jRGF0YUVudHJpZXM6IHt9XG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBoYW5kbGVEYXRhU2NoZW1hKHNjaGVtYSwgbmFtZSwgbG9hZGluZ09wdGlvbnMpIHtcbiAgICAgIGlmICghaXNPYmplY3Qoc2NoZW1hKSkge1xuICAgICAgICBzY2hlbWEgPSB7IGRhdGE6IHNjaGVtYSB9XG4gICAgICB9XG4gICAgICBsZXQgeyBkYXRhID0gdW5kZWZpbmVkLCBkYXRhUGF0aCA9IG51bGwgfSA9IHNjaGVtYVxuICAgICAgLy8gU2VlIGlmIHRoZXJlIGlzIGFzeW5jIGRhdGEgbG9hZGluZyBhbHJlYWR5IGluIHByb2Nlc3MuXG4gICAgICBjb25zdCBhc3luY0VudHJ5ID0gKHRoaXMuYXN5bmNEYXRhRW50cmllc1tuYW1lXSB8fD0gcmVhY3RpdmUoe1xuICAgICAgICBkZXBlbmRlbmN5RnVuY3Rpb246IG51bGwsXG4gICAgICAgIHJlc29sdmVkRGF0YTogdW5kZWZpbmVkLFxuICAgICAgICByZXNvbHZpbmc6IGZhbHNlLFxuICAgICAgICByZXNvbHZlZDogZmFsc2VcbiAgICAgIH0pKVxuICAgICAgLy8gSWYgdGhlIGRhdGEgY2FsbGJhY2sgcHJvdmlkZWQgYSBkZXBlbmRlbmN5IGZ1bmN0aW9uIHdoZW4gaXQgd2FzIGNhbGxlZCxcbiAgICAgIC8vIGNhbCBpdCBpbiBldmVyeSBjYWxsIG9mIGBoYW5kbGVEYXRhU2NoZW1hKClgIHRvIGZvcmNlIFZ1ZSB0byBrZWVwIHRyYWNrXG4gICAgICAvLyBvZiB0aGUgYXN5bmMgZGVwZW5kZW5jaWVzLlxuICAgICAgYXN5bmNFbnRyeS5kZXBlbmRlbmN5RnVuY3Rpb24/Lih0aGlzLmNvbnRleHQpXG5cbiAgICAgIGlmIChhc3luY0VudHJ5LnJlc29sdmVkKSB7XG4gICAgICAgIC8vIElmIHRoZSBkYXRhIHdhcyByZXNvbHZlZCBhbHJlYWR5LCByZXR1cm4gaXQgYW5kIGNsZWFyIHRoZSByZXNvbHZlZFxuICAgICAgICAvLyB2YWx1ZS4gVGhpcyB3b3JrcyBiZWNhdXNlIFZ1ZSBjYWNoZXMgdGhlIHJlc3VsdCBvZiBjb21wdXRlZCBnZXR0ZXJzXG4gICAgICAgIC8vIGFuZCBvbmx5IHJlZXZhbHVhdGVzIGlmIG9uZSBvZiB0aGUgZGVwZW5kZW5jaWVzIGNoYW5nZWQuIFRoaXMgaXMgdG9cbiAgICAgICAgLy8gZW5zdXJlIHRoYXQgYSBjYWNoZWQgdmFsdWUgaGVyZSBkb2Vzbid0IGJsb2NrIC8gb3ZlcnJpZGVcbiAgICAgICAgLy8gcmVldmFsdWF0aW9uIHdoZW4gYSBkZXBlbmRlbmN5IGNoYW5nZXM6XG4gICAgICAgIGNvbnN0IHsgcmVzb2x2ZWREYXRhIH0gPSBhc3luY0VudHJ5XG4gICAgICAgIGFzeW5jRW50cnkucmVzb2x2ZWREYXRhID0gdW5kZWZpbmVkXG4gICAgICAgIGFzeW5jRW50cnkucmVzb2x2ZWQgPSBmYWxzZVxuICAgICAgICByZXR1cm4gcmVzb2x2ZWREYXRhXG4gICAgICB9XG4gICAgICAvLyBBdm9pZCBjYWxsaW5nIHRoZSBkYXRhIGZ1bmN0aW9uIHR3aWNlOlxuICAgICAgaWYgKGFzeW5jRW50cnkucmVzb2x2aW5nKSB7XG4gICAgICAgIGRhdGEgPSBudWxsXG4gICAgICB9IGVsc2UgaWYgKGRhdGEpIHtcbiAgICAgICAgaWYgKGlzRnVuY3Rpb24oZGF0YSkpIHtcbiAgICAgICAgICBjb25zdCByZXN1bHQgPSBkYXRhKHRoaXMuY29udGV4dClcbiAgICAgICAgICAvLyBJZiB0aGUgcmVzdWx0IG9mIHRoZSBkYXRhIGZ1bmN0aW9uIGlzIGFub3RoZXIgZnVuY3Rpb24sIHRoZW4gdGhlXG4gICAgICAgICAgLy8gZmlyc3QgZGF0YSBmdW5jdGlvbiBpcyB0aGVyZSB0byB0cmFjayBkZXBlbmRlbmNpZXMgYW5kIHRoZSByZWFsXG4gICAgICAgICAgLy8gZGF0YSBsb2FkaW5nIGhhcHBlbnMgaW4gdGhlIGZ1bmN0aW9uIHRoYXQgaXQgcmV0dXJuZWQuIEtlZXAgdHJhY2tcbiAgICAgICAgICAvLyBpdCBpbiBgZGVwZW5kZW5jeUZ1bmN0aW9uYCBzbyBpdCBjYW4gYmUgY2FsbGVkIG9uIGVhY2ggY2FsbCBvZlxuICAgICAgICAgIC8vIGBoYW5kbGVEYXRhU2NoZW1hKClgIHRvIGtlZXAgdGhlIGRlcGVuZGVuY2llcyBpbnRhY3QsIGFuZCBjYWxsXG4gICAgICAgICAgLy8gdGhlIGZ1bmN0aW9uIHRoYXQgaXQgcmV0dXJuZWQgb25jZSB0byBnZXQgdGhlIGFjdHVhbCBkYXRhOlxuICAgICAgICAgIGlmIChpc0Z1bmN0aW9uKHJlc3VsdCkpIHtcbiAgICAgICAgICAgIGFzeW5jRW50cnkuZGVwZW5kZW5jeUZ1bmN0aW9uID0gZGF0YVxuICAgICAgICAgICAgZGF0YSA9IHJlc3VsdCh0aGlzLmNvbnRleHQpXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGRhdGEgPSByZXN1bHRcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gTk9URTogSWYgdGhlIGRhdGEgaXMgbm90IGEgcHJvbWlzZSwgaXQgaXMgcmVzb2x2ZWQgYWxyZWFkeS5cbiAgICAgICAgaWYgKGlzUHJvbWlzZShkYXRhKSkge1xuICAgICAgICAgIC8vIElmIHRoZSBkYXRhIGlzIGFzeW5jaHJvbm91cywgaXQgY2FuJ3QgYmUgcmV0dXJuZWQgc3RyYWlnaHQgYXdheS5cbiAgICAgICAgICAvLyBCdXQgd2UgY2FuIGNoZWF0IHVzaW5nIGNvbXB1dGVkIHByb3BlcnRpZXMgYW5kIGByZXNvbHZlZERhdGFgLFxuICAgICAgICAgIC8vIHdoaWNoIGlzIGdvaW5nIHRvIHJlY2VpdmUgdGhlIGxvYWRlZCBkYXRhIGFzeW5jaHJvbm91c2x5LFxuICAgICAgICAgIC8vIHRyaWdnZXJpbmcgYSByZWNvbXB1dGUgb2YgdGhlIGNvbXB1dGVkIHByb3BlcnR5IHRoYXQgY2FsbHNcbiAgICAgICAgICAvLyBgaGFuZGxlRGF0YVNjaGVtYSgpYC5cbiAgICAgICAgICBhc3luY0VudHJ5LnJlc29sdmluZyA9IHRydWVcbiAgICAgICAgICB0aGlzLnJlc29sdmVEYXRhKGRhdGEsIGxvYWRpbmdPcHRpb25zKVxuICAgICAgICAgICAgLnRoZW4oZGF0YSA9PiB7XG4gICAgICAgICAgICAgIGFzeW5jRW50cnkucmVzb2x2ZWREYXRhID0gZGF0YVxuICAgICAgICAgICAgICBhc3luY0VudHJ5LnJlc29sdmluZyA9IGZhbHNlXG4gICAgICAgICAgICAgIGFzeW5jRW50cnkucmVzb2x2ZWQgPSB0cnVlXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLmNhdGNoKGVycm9yID0+IHtcbiAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcilcbiAgICAgICAgICAgICAgYXN5bmNFbnRyeS5yZXNvbHZpbmcgPSBmYWxzZVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAvLyBDbGVhciBkYXRhIHVudGlsIHByb21pc2UgaXMgcmVzb2x2ZWQgYW5kIGByZXNvbHZlZERhdGFgIGlzIHNldFxuICAgICAgICAgIGRhdGEgPSBudWxsXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoZGF0YVBhdGgpIHtcbiAgICAgICAgZGF0YSA9IGdldFZhbHVlQXREYXRhUGF0aChcbiAgICAgICAgICB0aGlzLnJvb3REYXRhLFxuICAgICAgICAgIG5vcm1hbGl6ZURhdGFQYXRoKGAke3RoaXMuZGF0YVBhdGh9LyR7ZGF0YVBhdGh9YClcbiAgICAgICAgKVxuICAgICAgfVxuICAgICAgcmV0dXJuIGRhdGFcbiAgICB9LFxuXG4gICAgYXN5bmMgcmVzb2x2ZURhdGEobG9hZCwgbG9hZGluZ09wdGlvbnMgPSB7fSkge1xuICAgICAgLy8gVXNlIGEgdGltZW91dCB0byBhbGxvdyBhbHJlYWR5IHJlc29sdmVkIHByb21pc2VzIHRvIHJldHVybiBkYXRhIHdpdGhvdXRcbiAgICAgIC8vIHNob3dpbmcgYSBsb2FkaW5nIGluZGljYXRvci5cbiAgICAgIGNvbnN0IHRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB0aGlzLnNldExvYWRpbmcodHJ1ZSwgbG9hZGluZ09wdGlvbnMpLCAwKVxuICAgICAgbGV0IGRhdGEgPSBudWxsXG4gICAgICB0cnkge1xuICAgICAgICBkYXRhID0gYXdhaXQgKGlzRnVuY3Rpb24obG9hZCkgPyBsb2FkKCkgOiBsb2FkKVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgdGhpcy5hZGRFcnJvcihlcnJvci5tZXNzYWdlIHx8IGVycm9yKVxuICAgICAgfVxuICAgICAgY2xlYXJUaW1lb3V0KHRpbWVyKVxuICAgICAgdGhpcy5zZXRMb2FkaW5nKGZhbHNlLCBsb2FkaW5nT3B0aW9ucylcbiAgICAgIHJldHVybiBkYXRhXG4gICAgfVxuICB9XG59XG4iLCJpbXBvcnQgRGl0b0NvbnRleHQgZnJvbSAnLi4vRGl0b0NvbnRleHQuanMnXG5pbXBvcnQgRGF0YU1peGluIGZyb20gJy4vRGF0YU1peGluLmpzJ1xuaW1wb3J0IHsgaGFzVmlld1NjaGVtYSwgZ2V0Vmlld0VkaXRQYXRoIH0gZnJvbSAnLi4vdXRpbHMvc2NoZW1hLmpzJ1xuaW1wb3J0IHsgZ2V0U2NoZW1hQWNjZXNzb3IgfSBmcm9tICcuLi91dGlscy9hY2Nlc3Nvci5qcydcbmltcG9ydCB7IHNldFRlbXBvcmFyeUlkLCBpc1JlZmVyZW5jZSB9IGZyb20gJy4uL3V0aWxzL2RhdGEuanMnXG5pbXBvcnQge1xuICBpc09iamVjdCxcbiAgaXNBcnJheSxcbiAgaXNTdHJpbmcsXG4gIGlzRnVuY3Rpb24sXG4gIG5vcm1hbGl6ZURhdGFQYXRoLFxuICBsYWJlbGl6ZSxcbiAgZGVib3VuY2VBc3luY1xufSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQge1xuICBtaXhpbnM6IFtEYXRhTWl4aW5dLFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGhhc09wdGlvbnM6IGZhbHNlXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgc2VsZWN0ZWRWYWx1ZToge1xuICAgICAgZ2V0KCkge1xuICAgICAgICBjb25zdCBjb252ZXJ0VmFsdWUgPSB2YWx1ZSA9PlxuICAgICAgICAgIHRoaXMucmVsYXRlXG4gICAgICAgICAgICA/IHRoaXMuaGFzT3B0aW9uKHZhbHVlKVxuICAgICAgICAgICAgICA/IHRoaXMuZ2V0VmFsdWVGb3JPcHRpb24odmFsdWUpXG4gICAgICAgICAgICAgIDogbnVsbFxuICAgICAgICAgICAgOiB2YWx1ZVxuICAgICAgICBjb25zdCB2YWx1ZSA9IGlzQXJyYXkodGhpcy52YWx1ZSlcbiAgICAgICAgICA/IHRoaXMudmFsdWUubWFwKGNvbnZlcnRWYWx1ZSkuZmlsdGVyKHZhbHVlID0+IHZhbHVlICE9PSBudWxsKVxuICAgICAgICAgIDogY29udmVydFZhbHVlKHRoaXMudmFsdWUpXG4gICAgICAgIGlmIChcbiAgICAgICAgICAvLyBXaGVuIHJlbGF0aW5nIGFuZCBhcyBzb29uIGFzIHRoZSBvcHRpb25zIGFyZSBhdmFpbGFibGUuLi5cbiAgICAgICAgICB0aGlzLnJlbGF0ZSAmJlxuICAgICAgICAgIHRoaXMuaGFzT3B0aW9ucyAmJiAoXG4gICAgICAgICAgICAvLyAuLi5pZiB0aGUgdmFsdWUgaXMgZm9yY2VkIHRvIG51bGwgYmVjYXVzZSBhIGRpc2FwcGVhcmVkIG9wdGlvbi4uLlxuICAgICAgICAgICAgdmFsdWUgPT09IG51bGwgJiYgdGhpcy52YWx1ZSAhPT0gbnVsbCB8fFxuICAgICAgICAgICAgLy8gLi4ub3IgaWYgdGhlIHZhbHVlIGlzIGEgcmVmZXJlbmNlLCByZXBsYWNlIGl0IHdpdGggaXRzIG9wdGlvblxuICAgICAgICAgICAgLy8gdmFsdWUsIHNvIHRoYXQgaXQnbGwgaG9sZCBhY3R1YWwgZGF0YSwgbm90IGp1c3QgYSByZWZlcmVuY2UgaWQuXG4gICAgICAgICAgICBpc1JlZmVyZW5jZSh0aGlzLnZhbHVlKVxuICAgICAgICAgIClcbiAgICAgICAgKSB7XG4gICAgICAgICAgLy8gVE9ETzogRml4IHNpZGUtZWZmZWN0c1xuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSB2dWUvbm8tc2lkZS1lZmZlY3RzLWluLWNvbXB1dGVkLXByb3BlcnRpZXNcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkVmFsdWUgPSB2YWx1ZVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YWx1ZVxuICAgICAgfSxcblxuICAgICAgc2V0KHZhbHVlKSB7XG4gICAgICAgIGNvbnN0IGNvbnZlcnQgPSB2YWx1ZSA9PlxuICAgICAgICAgIHRoaXMucmVsYXRlXG4gICAgICAgICAgICA/IHRoaXMuZ2V0T3B0aW9uRm9yVmFsdWUodmFsdWUpXG4gICAgICAgICAgICA6IHZhbHVlXG4gICAgICAgIHRoaXMudmFsdWUgPSBpc0FycmF5KHZhbHVlKVxuICAgICAgICAgID8gdmFsdWUubWFwKGNvbnZlcnQpXG4gICAgICAgICAgOiBjb252ZXJ0KHZhbHVlKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBzZWxlY3RlZE9wdGlvbigpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldE9wdGlvbkZvclZhbHVlKHRoaXMuc2VsZWN0ZWRWYWx1ZSlcbiAgICB9LFxuXG4gICAgb3B0aW9ucygpIHtcbiAgICAgIGNvbnN0IGRhdGEgPSB0aGlzLmhhbmRsZURhdGFTY2hlbWEodGhpcy5zY2hlbWEub3B0aW9ucywgJ29wdGlvbnMnKSA/PyBbXVxuICAgICAgaWYgKCFpc0FycmF5KGRhdGEpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBvcHRpb25zIGRhdGEsIHNob3VsZCBiZSBhcnJheTogJHtkYXRhfWApXG4gICAgICB9XG4gICAgICAvLyBUT0RPOiBGaXggc2lkZS1lZmZlY3RzXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgdnVlL25vLXNpZGUtZWZmZWN0cy1pbi1jb21wdXRlZC1wcm9wZXJ0aWVzXG4gICAgICB0aGlzLmhhc09wdGlvbnMgPSBkYXRhLmxlbmd0aCA+IDBcbiAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NPcHRpb25zKGRhdGEpXG4gICAgfSxcblxuICAgIGFjdGl2ZU9wdGlvbnMoKSB7XG4gICAgICAvLyBUaGlzIGlzIG92ZXJyaWRkZW4gaW4gYFR5cGVNdWx0aXNlbGVjdGAgdG8gcmV0dXJuIHRoZSBgc2VhcmNoZWRPcHRpb25zYFxuICAgICAgLy8gd2hlbiBhIHNlYXJjaCBmaWx0ZXIgd2FzIGFwcGxpZWQuXG4gICAgICByZXR1cm4gdGhpcy5vcHRpb25zXG4gICAgfSxcblxuICAgIHJlbGF0ZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ3JlbGF0ZScsIHtcbiAgICAgIC8vIFRPRE86IENvbnZlcnQgdG8gYHJlbGF0ZUJ5OiAnaWQnYFxuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlLFxuICAgICAgLy8gV2UgY2Fubm90IHVzZSBzY2hlbWEgYWNjZXNzb3IgY2FsbGJhY2sgbWFnaWMgZm9yIGByZWxhdGVgIGFzIHdlIG5lZWRcbiAgICAgIC8vIHRoaXMgb3V0c2lkZSBvZiB0aGUgY29tcG9uZW50J3MgbGlmZS1zcGFuLCBzZWUgYHByb2Nlc3NEYXRhKClgIGJlbG93LlxuICAgICAgY2FsbGJhY2s6IGZhbHNlXG4gICAgfSksXG5cbiAgICBncm91cEJ5OiBnZXRTY2hlbWFBY2Nlc3NvcignZ3JvdXBCeScsIHtcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIGRlZmF1bHQ6IG51bGxcbiAgICB9KSxcblxuICAgIC8vIFRPRE86IFJlbmFtZSB0byBgb3B0aW9ucy5sYWJlbEtleWAgLyBgb3B0aW9uTGFiZWxLZXlgP1xuICAgIG9wdGlvbkxhYmVsOiBnZXRTY2hlbWFBY2Nlc3Nvcignb3B0aW9ucy5sYWJlbCcsIHtcbiAgICAgIHR5cGU6IFtTdHJpbmcsIEZ1bmN0aW9uXSxcbiAgICAgIGRlZmF1bHQ6IG51bGwsXG4gICAgICBnZXQobGFiZWwpIHtcbiAgICAgICAgLy8gSWYgbm8gYGxhYmVsYCB3YXMgcHJvdmlkZWQgYnV0IHRoZSBvcHRpb25zIGFyZSBvYmplY3RzLCBhc3N1bWUgYVxuICAgICAgICAvLyBkZWZhdWx0IHZhbHVlIG9mICdsYWJlbCc6XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgbGFiZWwgfHxcbiAgICAgICAgICB0aGlzLmdldE9wdGlvbktleSgnbGFiZWwnKSB8fFxuICAgICAgICAgIG51bGxcbiAgICAgICAgKVxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgLy8gVE9ETzogUmVuYW1lIHRvIGBvcHRpb25zLnZhbHVlS2V5YCAvIGBvcHRpb25WYWx1ZUtleWA/XG4gICAgb3B0aW9uVmFsdWU6IGdldFNjaGVtYUFjY2Vzc29yKCdvcHRpb25zLnZhbHVlJywge1xuICAgICAgdHlwZTogW1N0cmluZywgRnVuY3Rpb25dLFxuICAgICAgZGVmYXVsdDogbnVsbCxcbiAgICAgIGdldCh2YWx1ZSkge1xuICAgICAgICAvLyBJZiBubyBgbGFiZWxgIHdhcyBwcm92aWRlZCBidXQgdGhlIG9wdGlvbnMgYXJlIG9iamVjdHMsIGFzc3VtZSBhXG4gICAgICAgIC8vIGRlZmF1bHQgdmFsdWUgb2YgJ3ZhbHVlJzpcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICB2YWx1ZSB8fFxuICAgICAgICAgIHRoaXMucmVsYXRlICYmICdpZCcgfHxcbiAgICAgICAgICB0aGlzLmdldE9wdGlvbktleSgndmFsdWUnKSB8fFxuICAgICAgICAgIG51bGxcbiAgICAgICAgKVxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgLy8gVE9ETzogQ29uc2lkZXIgbW92aW5nIHNlYXJjaCB0byBgb3B0aW9ucy5zZWFyY2hgP1xuICAgIHNlYXJjaEZpbHRlcjogZ2V0U2NoZW1hQWNjZXNzb3IoJ3NlYXJjaCcsIHtcbiAgICAgIHR5cGU6IFtPYmplY3QsIEZ1bmN0aW9uXSxcbiAgICAgIGRlZmF1bHQ6IG51bGwsXG4gICAgICBnZXQoc2VhcmNoKSB7XG4gICAgICAgIGlmIChzZWFyY2gpIHtcbiAgICAgICAgICBjb25zdCB7IGZpbHRlciwgZGVib3VuY2UgfSA9IGlzRnVuY3Rpb24oc2VhcmNoKVxuICAgICAgICAgICAgPyB7IGZpbHRlcjogc2VhcmNoIH1cbiAgICAgICAgICAgIDogc2VhcmNoXG4gICAgICAgICAgcmV0dXJuIGRlYm91bmNlID8gZGVib3VuY2VBc3luYyhmaWx0ZXIsIGRlYm91bmNlKSA6IGZpbHRlclxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSksXG5cbiAgICBlZGl0YWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ2VkaXRhYmxlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlLFxuICAgICAgZ2V0KGVkaXRhYmxlKSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgZWRpdGFibGUgJiZcbiAgICAgICAgICBoYXNWaWV3U2NoZW1hKHRoaXMuc2NoZW1hLCB0aGlzLmNvbnRleHQpXG4gICAgICAgIClcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIGVkaXRQYXRoKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZWRpdGFibGUgJiYgdGhpcy5zZWxlY3RlZFZhbHVlXG4gICAgICAgID8gZ2V0Vmlld0VkaXRQYXRoKHRoaXMuc2NoZW1hLCB0aGlzLnNlbGVjdGVkVmFsdWUsIHRoaXMuY29udGV4dClcbiAgICAgICAgOiBudWxsXG4gICAgfSxcblxuICAgIGdyb3VwQnlMYWJlbCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmdyb3VwQnkgPyAnbGFiZWwnIDogbnVsbFxuICAgIH0sXG5cbiAgICBncm91cEJ5T3B0aW9ucygpIHtcbiAgICAgIHJldHVybiB0aGlzLmdyb3VwQnkgPyAnb3B0aW9ucycgOiBudWxsXG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBnZXRPcHRpb25LZXkoa2V5KSB7XG4gICAgICBjb25zdCBbb3B0aW9uXSA9IHRoaXMuYWN0aXZlT3B0aW9uc1xuICAgICAgcmV0dXJuIGlzT2JqZWN0KG9wdGlvbikgJiYga2V5IGluIG9wdGlvbiA/IGtleSA6IG51bGxcbiAgICB9LFxuXG4gICAgcHJvY2Vzc09wdGlvbnMob3B0aW9ucykge1xuICAgICAgaWYgKG9wdGlvbnMubGVuZ3RoKSB7XG4gICAgICAgIGlmICh0aGlzLnJlbGF0ZSkge1xuICAgICAgICAgIC8vIElmIGlkcyBhcmUgbWlzc2luZyBhbmQgd2Ugd2FudCB0byByZWxhdGUsIHNldCB0ZW1wb3JhcnkgaWRzLlxuICAgICAgICAgIC8vIE5PVEU6IFdlIG5lZWQgdG8gbW9kaWZ5IHRoZSBhY3R1YWwgZGF0YSwgbWFraW5nIGEgY29weSB3b24ndCB3b3JrXG4gICAgICAgICAgLy8gYXMgaXQgd29uJ3QgcHJvcGFnYXRlLlxuICAgICAgICAgIC8vIE5PVEU6IFRoaXMgb25seSBtYWtlcyBzZW5zZSBpZiB0aGUgZGF0YSBpcyBmcm9tIHRoZSBncmFwaCB0aGF0XG4gICAgICAgICAgLy8gd2UncmUgY3VycmVudGx5IGVkaXRpbmcuXG4gICAgICAgICAgZm9yIChjb25zdCBvcHRpb24gb2Ygb3B0aW9ucykge1xuICAgICAgICAgICAgaWYgKCEoJ2lkJyBpbiBvcHRpb24pKSB7XG4gICAgICAgICAgICAgIHNldFRlbXBvcmFyeUlkKG9wdGlvbiwgJ2lkJylcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuZ3JvdXBCeSkge1xuICAgICAgICAgIGNvbnN0IGdyb3VwZWQgPSB7fVxuICAgICAgICAgIG9wdGlvbnMgPSBvcHRpb25zLnJlZHVjZShcbiAgICAgICAgICAgIChyZXN1bHRzLCBvcHRpb24pID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgZ3JvdXAgPSBvcHRpb25bdGhpcy5ncm91cEJ5XVxuICAgICAgICAgICAgICBsZXQgZW50cnkgPSBncm91cGVkW2dyb3VwXVxuICAgICAgICAgICAgICBpZiAoIWVudHJ5KSB7XG4gICAgICAgICAgICAgICAgZW50cnkgPSBncm91cGVkW2dyb3VwXSA9IHtcbiAgICAgICAgICAgICAgICAgIFt0aGlzLmdyb3VwQnlMYWJlbF06IGdyb3VwLFxuICAgICAgICAgICAgICAgICAgW3RoaXMuZ3JvdXBCeU9wdGlvbnNdOiBbXVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXN1bHRzLnB1c2goZW50cnkpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgZW50cnkub3B0aW9ucy5wdXNoKG9wdGlvbilcbiAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdHNcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBbXVxuICAgICAgICAgIClcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIG9wdGlvbnNcbiAgICB9LFxuXG4gICAgaGFzT3B0aW9uKG9wdGlvbikge1xuICAgICAgcmV0dXJuICEhdGhpcy5nZXRPcHRpb25Gb3JWYWx1ZSh0aGlzLmdldFZhbHVlRm9yT3B0aW9uKG9wdGlvbikpXG4gICAgfSxcblxuICAgIGdldE9wdGlvbkZvclZhbHVlKHZhbHVlKSB7XG4gICAgICBjb25zdCBmaW5kT3B0aW9uID0gKG9wdGlvbnMsIHZhbHVlLCBncm91cEJ5KSA9PiB7XG4gICAgICAgIC8vIFNlYXJjaCBmb3IgdGhlIG9wdGlvbiBvYmplY3Qgd2l0aCB0aGUgZ2l2ZW4gdmFsdWUgYW5kIHJldHVybiB0aGVcbiAgICAgICAgLy8gd2hvbGUgb2JqZWN0LlxuICAgICAgICBmb3IgKGNvbnN0IG9wdGlvbiBvZiBvcHRpb25zKSB7XG4gICAgICAgICAgaWYgKGdyb3VwQnkpIHtcbiAgICAgICAgICAgIGNvbnN0IGZvdW5kID0gZmluZE9wdGlvbihvcHRpb24ub3B0aW9ucywgdmFsdWUsIG51bGwpXG4gICAgICAgICAgICBpZiAoZm91bmQpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGZvdW5kXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIGlmICh2YWx1ZSA9PT0gdGhpcy5nZXRWYWx1ZUZvck9wdGlvbihvcHRpb24pKSB7XG4gICAgICAgICAgICByZXR1cm4gb3B0aW9uXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzLm9wdGlvblZhbHVlXG4gICAgICAgID8gZmluZE9wdGlvbih0aGlzLmFjdGl2ZU9wdGlvbnMsIHZhbHVlLCB0aGlzLmdyb3VwQnkpXG4gICAgICAgIDogdmFsdWVcbiAgICB9LFxuXG4gICAgZ2V0VmFsdWVGb3JPcHRpb24ob3B0aW9uKSB7XG4gICAgICBjb25zdCB7IG9wdGlvblZhbHVlIH0gPSB0aGlzXG4gICAgICByZXR1cm4gaXNTdHJpbmcob3B0aW9uVmFsdWUpXG4gICAgICAgID8gb3B0aW9uPy5bb3B0aW9uVmFsdWVdXG4gICAgICAgIDogaXNGdW5jdGlvbihvcHRpb25WYWx1ZSlcbiAgICAgICAgICA/IG9wdGlvblZhbHVlKG5ldyBEaXRvQ29udGV4dCh0aGlzLCB7IG9wdGlvbiB9KSlcbiAgICAgICAgICA6IG9wdGlvblxuICAgIH0sXG5cbiAgICBnZXRMYWJlbEZvck9wdGlvbihvcHRpb24pIHtcbiAgICAgIGNvbnN0IHsgb3B0aW9uTGFiZWwgfSA9IHRoaXNcbiAgICAgIHJldHVybiBpc1N0cmluZyhvcHRpb25MYWJlbClcbiAgICAgICAgPyBvcHRpb24/LltvcHRpb25MYWJlbF1cbiAgICAgICAgOiBpc0Z1bmN0aW9uKG9wdGlvbkxhYmVsKVxuICAgICAgICAgID8gb3B0aW9uTGFiZWwobmV3IERpdG9Db250ZXh0KHRoaXMsIHsgb3B0aW9uIH0pKVxuICAgICAgICAgIDogbGFiZWxpemUoYCR7b3B0aW9ufWApXG4gICAgfVxuICB9LFxuXG4gIHByb2Nlc3NWYWx1ZShzY2hlbWEsIHZhbHVlLCBkYXRhUGF0aCwgZ3JhcGgpIHtcbiAgICBpZiAoc2NoZW1hLnJlbGF0ZSkge1xuICAgICAgLy8gRm9yIGludGVybmFsbHkgcmVsYXRpbmcgZGF0YSAoYHNjaGVtYS5vcHRpb25zLmRhdGFQYXRoYCksIHdlIG5lZWQgdG9cbiAgICAgIC8vIHByb2Nlc3MgYm90aCB0aGUgb3B0aW9ucyAoZm9yICcjcmVmJykgYW5kIHRoZSB2YWx1ZSAoJyNpZCcpLlxuICAgICAgLy8gU2VlIGBEYXRhTWl4aW4uaGFuZGxlRGF0YVNjaGVtYSgpYDpcbiAgICAgIGNvbnN0IHBhdGggPSBzY2hlbWEub3B0aW9ucz8uZGF0YVBhdGhcbiAgICAgIGNvbnN0IHJlbGF0ZWREYXRhUGF0aCA9IHBhdGhcbiAgICAgICAgPyBub3JtYWxpemVEYXRhUGF0aChgJHtkYXRhUGF0aH0vJHtwYXRofWApXG4gICAgICAgIDogbnVsbFxuICAgICAgZ3JhcGguYWRkUmVsYXRpb24oZGF0YVBhdGgsIHJlbGF0ZWREYXRhUGF0aCwgc2NoZW1hKVxuICAgICAgaWYgKHJlbGF0ZWREYXRhUGF0aCkge1xuICAgICAgICBncmFwaC5zZXRTb3VyY2VSZWxhdGVkKHJlbGF0ZWREYXRhUGF0aClcbiAgICAgIH1cbiAgICAgIC8vIENvbnZlcnQgcmVsYXRpbmcgb2JqZWN0cyB0byBhIHNoYWxsb3cgY29weSB3aXRoIG9ubHkgdGhlIGlkIGxlZnQuXG4gICAgICAvLyBUT0RPOiBDb252ZXJ0IHRvIHVzaW5nIGByZWxhdGVCeWA6XG4gICAgICBjb25zdCBwcm9jZXNzUmVsYXRlID0gdmFsdWUgPT4gKHZhbHVlID8geyBpZDogdmFsdWUuaWQgfSA6IHZhbHVlKVxuICAgICAgLy8gU2VsZWN0ZWQgb3B0aW9ucyBjYW4gYmUgYm90aCBvYmplY3RzICYgYXJyYXlzLCBlLmcuICdjaGVja2JveGVzJzpcbiAgICAgIHZhbHVlID0gaXNBcnJheSh2YWx1ZSlcbiAgICAgICAgPyB2YWx1ZS5tYXAocHJvY2Vzc1JlbGF0ZSlcbiAgICAgICAgOiBwcm9jZXNzUmVsYXRlKHZhbHVlKVxuICAgIH1cbiAgICByZXR1cm4gdmFsdWVcbiAgfVxufVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbnVsLmRpdG8tY2hlY2tib3hlcyhcbiAgOmlkPVwiZGF0YVBhdGhcIlxuICA6Y2xhc3M9XCJgZGl0by1sYXlvdXQtJHtzY2hlbWEubGF5b3V0IHx8ICd2ZXJ0aWNhbCd9YFwiXG4pXG4gIGxpKFxuICAgIHYtZm9yPVwib3B0aW9uIGluIG9wdGlvbnNcIlxuICApXG4gICAgbGFiZWxcbiAgICAgIC5kaXRvLWNoZWNrYm94XG4gICAgICAgIGlucHV0KFxuICAgICAgICAgIHJlZj1cImVsZW1lbnRcIlxuICAgICAgICAgIHYtbW9kZWw9XCJzZWxlY3RlZE9wdGlvbnNcIlxuICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgICAgICAgOnZhbHVlPVwiZ2V0VmFsdWVGb3JPcHRpb24ob3B0aW9uKVwiXG4gICAgICAgICAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gICAgICAgIClcbiAgICAgICAgc3BhbiB7eyBnZXRMYWJlbEZvck9wdGlvbihvcHRpb24pIH19XG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9UeXBlQ29tcG9uZW50IGZyb20gJy4uL0RpdG9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IE9wdGlvbnNNaXhpbiBmcm9tICcuLi9taXhpbnMvT3B0aW9uc01peGluLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b1R5cGVDb21wb25lbnQucmVnaXN0ZXIoJ2NoZWNrYm94ZXMnLCB7XG4gIG1peGluczogW09wdGlvbnNNaXhpbl0sXG5cbiAgbmF0aXZlRmllbGQ6IHRydWUsXG4gIGRlZmF1bHRWYWx1ZTogW10sXG4gIGRlZmF1bHRXaWR0aDogJ2F1dG8nLFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgc2VsZWN0ZWRPcHRpb25zOiB7XG4gICAgICBnZXQoKSB7XG4gICAgICAgIHJldHVybiAodGhpcy5zZWxlY3RlZFZhbHVlIHx8IFtdKS5maWx0ZXIodmFsdWUgPT4gdmFsdWUpXG4gICAgICB9LFxuXG4gICAgICBzZXQob3B0aW9uKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZSA9IG9wdGlvbiB8fCBbXVxuICAgICAgfVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5cbi5kaXRvLWNoZWNrYm94ZXMge1xuICBsYWJlbCB7XG4gICAgQGV4dGVuZCAlaW5wdXQtYm9yZGVybGVzcztcbiAgfVxuXG4gIGlucHV0IHtcbiAgICBtYXJnaW4tcmlnaHQ6ICRmb3JtLXNwYWNpbmc7XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuLmRpdG8tY29kZShcbiAgOmlkPVwiZGF0YVBhdGhcIlxuICByZWY9XCJjb2RlXCJcbiAgOnN0eWxlPVwic3R5bGVcIlxuKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvVHlwZUNvbXBvbmVudCBmcm9tICcuLi9EaXRvVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCBEb21NaXhpbiBmcm9tICcuLi9taXhpbnMvRG9tTWl4aW4uanMnXG5pbXBvcnQgQ29kZUZsYXNrIGZyb20gJ2NvZGVmbGFzaydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9UeXBlQ29tcG9uZW50LnJlZ2lzdGVyKCdjb2RlJywge1xuICBtaXhpbnM6IFtEb21NaXhpbl0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBsaW5lcygpIHtcbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYS5saW5lcyB8fCAzXG4gICAgfSxcblxuICAgIHN0eWxlKCkge1xuICAgICAgcmV0dXJuIGBoZWlnaHQ6IGNhbGMoJHt0aGlzLmxpbmVzfWVtICogdmFyKC0tbGluZS1oZWlnaHQpKWBcbiAgICB9XG4gIH0sXG5cbiAgbW91bnRlZCgpIHtcbiAgICBjb25zdCBmbGFzayA9IG5ldyBDb2RlRmxhc2sodGhpcy4kcmVmcy5jb2RlLCB7XG4gICAgICBsYW5ndWFnZTogdGhpcy5zY2hlbWEubGFuZ3VhZ2UgfHwgJ2phdmFzY3JpcHQnLFxuICAgICAgdGFiU2l6ZTogdGhpcy5zY2hlbWEuaW5kZW50U2l6ZSB8fCAyLFxuICAgICAgbGluZU51bWJlcnM6IGZhbHNlXG4gICAgfSlcblxuICAgIGxldCBjaGFuZ2VkID0gZmFsc2VcbiAgICBsZXQgaWdub3JlV2F0Y2ggPSBmYWxzZVxuICAgIGxldCBpZ25vcmVVcGRhdGUgPSBmYWxzZVxuXG4gICAgY29uc3Qgb25DaGFuZ2UgPSAoKSA9PiB7XG4gICAgICBpZiAoIXRoaXMuZm9jdXNlZCAmJiBjaGFuZ2VkKSB7XG4gICAgICAgIGNoYW5nZWQgPSBmYWxzZVxuICAgICAgICB0aGlzLm9uQ2hhbmdlKClcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBvbkZvY3VzID0gKCkgPT4gdGhpcy5vbkZvY3VzKClcblxuICAgIGNvbnN0IG9uQmx1ciA9ICgpID0+IHtcbiAgICAgIHRoaXMub25CbHVyKClcbiAgICAgIG9uQ2hhbmdlKClcbiAgICB9XG5cbiAgICB0aGlzLmRvbU9uKHRoaXMuJHJlZnMuY29kZS5xdWVyeVNlbGVjdG9yKCd0ZXh0YXJlYScpLCB7XG4gICAgICBmb2N1czogb25Gb2N1cyxcbiAgICAgIGJsdXI6IG9uQmx1clxuICAgIH0pXG5cbiAgICBjb25zdCBzZXRDb2RlID0gY29kZSA9PiB7XG4gICAgICBpZiAoY29kZSAhPT0gZmxhc2suY29kZSkge1xuICAgICAgICBpZ25vcmVVcGRhdGUgPSB0cnVlXG4gICAgICAgIGZsYXNrLnVwZGF0ZUNvZGUoY29kZSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBzZXRWYWx1ZSA9IHZhbHVlID0+IHtcbiAgICAgIGlmICh2YWx1ZSAhPT0gdGhpcy52YWx1ZSkge1xuICAgICAgICBpZ25vcmVXYXRjaCA9IHRydWVcbiAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlXG4gICAgICAgIGNoYW5nZWQgPSB0cnVlXG4gICAgICAgIG9uQ2hhbmdlKClcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmbGFzay5vblVwZGF0ZSh2YWx1ZSA9PiB7XG4gICAgICBpZiAoaWdub3JlVXBkYXRlKSB7XG4gICAgICAgIGlnbm9yZVVwZGF0ZSA9IGZhbHNlXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzZXRWYWx1ZSh2YWx1ZSlcbiAgICAgIH1cbiAgICB9KVxuXG4gICAgdGhpcy4kd2F0Y2goJ3ZhbHVlJywgdmFsdWUgPT4ge1xuICAgICAgaWYgKGlnbm9yZVdhdGNoKSB7XG4gICAgICAgIGlnbm9yZVdhdGNoID0gZmFsc2VcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNldENvZGUodmFsdWUgfHwgJycpXG4gICAgICB9XG4gICAgfSlcblxuICAgIHNldENvZGUodGhpcy52YWx1ZSB8fCAnJylcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZm9jdXNFbGVtZW50KCkge1xuICAgICAgdGhpcy4kZWwucXVlcnlTZWxlY3RvcigndGV4dGFyZWEnKT8uZm9jdXMoKVxuICAgIH0sXG5cbiAgICBibHVyRWxlbWVudCgpIHtcbiAgICAgIHRoaXMuJGVsLnF1ZXJ5U2VsZWN0b3IoJ3RleHRhcmVhJyk/LmZvY3VzKClcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by1jb2RlIHtcbiAgQGV4dGVuZCAlaW5wdXQ7XG5cbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAvLyBGb3IgcHJvcGVyIHNpemluZyBvZiBjb250ZW50IGFsb25nIHdpdGggOnN0eWxlPVwic3R5bGVcIiBzZXR0aW5nIGFib3ZlLFxuICAvLyBmb3IgcHJvcGVyIGxpbmUtaGVpZ2h0IGNhbGN1bGF0aW9uLlxuICBwYWRkaW5nOiAkaW5wdXQtcGFkZGluZztcblxuICAuY29kZWZsYXNrIHtcbiAgICBiYWNrZ3JvdW5kOiBub25lO1xuICAgIC8vIElnbm9yZSB0aGUgcGFyZW50IHBhZGRpbmcgZGVmaW5lZCBhYm92ZSB3aGljaCBpcyBvbmx5IG5lZWRlZCB0byBzZXRcbiAgICAvLyB0aGUgZGVzaXJlZCBoZWlnaHQgd2l0aCA6c3R5bGU9XCJzdHlsZVwiLlxuICAgIHRvcDogMDtcbiAgICBsZWZ0OiAwO1xuICB9XG5cbiAgLmNvZGVmbGFza19fdGV4dGFyZWEsXG4gIC5jb2RlZmxhc2tfX3ByZSB7XG4gICAgLy8gVXNlIHNhbWUgcGFkZGluZyBhcyAuZGl0by1jb2RlXG4gICAgcGFkZGluZzogJGlucHV0LXBhZGRpbmc7XG4gIH1cblxuICAuY29kZWZsYXNrX190ZXh0YXJlYSxcbiAgLmNvZGVmbGFza19fY29kZSxcbiAgLmNvZGVmbGFza19fbGluZXMge1xuICAgIGZvbnQtZmFtaWx5OiAkZm9udC1mYW1pbHktbW9ubztcbiAgICBmb250LXNpemU6IHZhcigtLWZvbnQtc2l6ZSk7XG4gICAgbGluZS1oZWlnaHQ6IHZhcigtLWxpbmUtaGVpZ2h0KTtcbiAgfVxuXG4gIC5jb2RlZmxhc2tfX2xpbmVzIHtcbiAgICBwYWRkaW5nOiAkaW5wdXQtcGFkZGluZztcbiAgfVxufVxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG5UcmlnZ2VyLmRpdG8tY29sb3IoXG4gIHYtbW9kZWw6c2hvdz1cInNob3dQb3B1cFwiXG4gIHRyaWdnZXI9XCJmb2N1c1wiXG4pXG4gIHRlbXBsYXRlKCN0cmlnZ2VyKVxuICAgIC5kaXRvLWlucHV0KDpjbGFzcz1cInsgJ2RpdG8tZm9jdXMnOiBzaG93UG9wdXAgfVwiKVxuICAgICAgaW5wdXQoXG4gICAgICAgIDppZD1cImRhdGFQYXRoXCJcbiAgICAgICAgcmVmPVwiZWxlbWVudFwiXG4gICAgICAgIHYtbW9kZWw9XCJoZXhWYWx1ZVwiXG4gICAgICAgIHR5cGU9XCJpbnB1dFwiXG4gICAgICAgIHNpemU9XCI4XCJcbiAgICAgICAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gICAgICApXG4gICAgICAuZGl0by1jb2xvci1wcmV2aWV3LmRpdG8taW5oZXJpdC1mb2N1cyhcbiAgICAgICAgdi1pZj1cInZhbHVlXCJcbiAgICAgIClcbiAgICAgICAgZGl2KDpzdHlsZT1cInsgYmFja2dyb3VuZDogYCMke2hleFZhbHVlIHx8ICcwMDAwMDAwMCd9YCB9XCIpXG4gICAgICBidXR0b24uZGl0by1idXR0b24tY2xlYXIuZGl0by1idXR0b24tb3ZlcmxheShcbiAgICAgICAgdi1pZj1cInNob3dDbGVhckJ1dHRvblwiXG4gICAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICAgICAgQGNsaWNrLnN0b3A9XCJjbGVhclwiXG4gICAgICApXG4gIHRlbXBsYXRlKCNwb3B1cClcbiAgICBTa2V0Y2hQaWNrZXIuZGl0by1jb2xvci1waWNrZXIoXG4gICAgICB2LW1vZGVsPVwiY29sb3JWYWx1ZVwiXG4gICAgICA6ZGlzYWJsZUFscGhhPVwiIWFscGhhXCJcbiAgICAgIDpkaXNhYmxlRmllbGRzPVwiIWlucHV0c1wiXG4gICAgICA6cHJlc2V0Q29sb3JzPVwicHJlc2V0c1wiXG4gICAgKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCB0aW55Y29sb3IgZnJvbSAndGlueWNvbG9yMidcbmltcG9ydCB7IFNrZXRjaCBhcyBTa2V0Y2hQaWNrZXIgfSBmcm9tICdAbGs3Ny92dWUzLWNvbG9yJ1xuaW1wb3J0IERpdG9UeXBlQ29tcG9uZW50IGZyb20gJy4uL0RpdG9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IHsgVHJpZ2dlciB9IGZyb20gJ0BkaXRvanMvdWkvc3JjJ1xuaW1wb3J0IHsgZ2V0U2NoZW1hQWNjZXNzb3IgfSBmcm9tICcuLi91dGlscy9hY2Nlc3Nvci5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9UeXBlQ29tcG9uZW50LnJlZ2lzdGVyKCdjb2xvcicsIHtcbiAgY29tcG9uZW50czogeyBUcmlnZ2VyLCBTa2V0Y2hQaWNrZXIgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBzaG93UG9wdXA6IGZhbHNlLFxuICAgICAgY29udmVydGVkSGV4VmFsdWU6IG51bGxcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBjb2xvclZhbHVlOiB7XG4gICAgICBnZXQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlIHx8IHt9XG4gICAgICB9LFxuXG4gICAgICBzZXQodmFsdWUpIHtcbiAgICAgICAgY29uc3QgZm9ybWF0ID0gdGhpcy5jb2xvckZvcm1hdFxuICAgICAgICBjb25zdCBrZXkgPSAoXG4gICAgICAgICAge1xuICAgICAgICAgICAgLy8gTk9URTogdnVlMy1jb2xvciBjYWxscyBpdCAnaGV4Jywgd2hpbGUgdGlueWNvbG9yIGNhbGxzIGl0ICdoZXg2J1xuICAgICAgICAgICAgaGV4OiB2YWx1ZT8uYSA8IDEgPyAnaGV4OCcgOiAnaGV4JyxcbiAgICAgICAgICAgIHJnYjogJ3JnYmEnXG4gICAgICAgICAgfVtmb3JtYXRdIHx8XG4gICAgICAgICAgZm9ybWF0XG4gICAgICAgIClcbiAgICAgICAgaWYgKGtleSkge1xuICAgICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZVtrZXldXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy52YWx1ZSA9IHRpbnljb2xvcih2YWx1ZSkudG9TdHJpbmcoZm9ybWF0KVxuICAgICAgICB9XG4gICAgICAgIHRoaXMub25DaGFuZ2UoKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBoZXhWYWx1ZToge1xuICAgICAgZ2V0KCkge1xuICAgICAgICBpZiAodGhpcy52YWx1ZSA9PSBudWxsKSB7XG4gICAgICAgICAgLy8gVE9ETzogRml4IHNpZGUtZWZmZWN0c1xuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSB2dWUvbm8tc2lkZS1lZmZlY3RzLWluLWNvbXB1dGVkLXByb3BlcnRpZXNcbiAgICAgICAgICB0aGlzLmNvbnZlcnRlZEhleFZhbHVlID0gbnVsbFxuICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICF0aGlzLmZvY3VzZWQgfHxcbiAgICAgICAgICB0aGlzLiRyZWZzLmVsZW1lbnQuaGFzQXR0cmlidXRlKCdyZWFkb25seScpXG4gICAgICAgICkge1xuICAgICAgICAgIGNvbnN0IGNvbG9yID0gdGlueWNvbG9yKHRoaXMudmFsdWUpXG4gICAgICAgICAgaWYgKGNvbG9yLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgLy8gVE9ETzogRml4IHNpZGUtZWZmZWN0c1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lXG4gICAgICAgICAgICB0aGlzLmNvbnZlcnRlZEhleFZhbHVlID0gY29sb3JcbiAgICAgICAgICAgICAgLnRvU3RyaW5nKGNvbG9yLmdldEFscGhhKCkgPCAxID8gJ2hleDgnIDogJ2hleDYnKVxuICAgICAgICAgICAgICAuc2xpY2UoMSlcbiAgICAgICAgICAgICAgLnRvVXBwZXJDYXNlKClcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuY29udmVydGVkSGV4VmFsdWVcbiAgICAgIH0sXG5cbiAgICAgIHNldCh2YWx1ZSkge1xuICAgICAgICB0aGlzLmNvbnZlcnRlZEhleFZhbHVlID0gdmFsdWVcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgLy8gVE9ETzogYGZvcm1hdGAgY2xhc2hlcyB3aXRoIFR5cGVNaXhpbi5mb3JtYXQoKWAsIHdoaWNoIHNoYWxsIGJlIHJlbmFtZWRcbiAgICAvLyBzb29uIHRvIGBmb3JtYXRWYWx1ZSgpYC4gUmVuYW1lIGBjb2xvckZvcm1hdGAgYmFjayB0byBgZm9ybWF0YCBhZnRlci5cbiAgICBjb2xvckZvcm1hdDogZ2V0U2NoZW1hQWNjZXNzb3IoJ2Zvcm1hdCcsIHtcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIGRlZmF1bHQ6ICdoZXgnXG4gICAgfSksXG5cbiAgICAvLyBUT0RPOiBSZW5hbWUgdG8gYHNob3dBbHBoYWA/XG4gICAgYWxwaGE6IGdldFNjaGVtYUFjY2Vzc29yKCdhbHBoYScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0pLFxuXG4gICAgLy8gVE9ETzogUmVuYW1lIHRvIGBzaG93SW5wdXRzYD9cbiAgICBpbnB1dHM6IGdldFNjaGVtYUFjY2Vzc29yKCdpbnB1dHMnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogdHJ1ZVxuICAgIH0pLFxuXG4gICAgcHJlc2V0czogZ2V0U2NoZW1hQWNjZXNzb3IoJ3ByZXNldHMnLCB7XG4gICAgICB0eXBlOiBBcnJheSxcbiAgICAgIGRlZmF1bHQ6IFtcbiAgICAgICAgJyNmZmZmZmYnLFxuICAgICAgICAnI2MzYzNjMycsXG4gICAgICAgICcjN2Y3ZjdmJyxcbiAgICAgICAgJyMwMDAwMDAnLFxuICAgICAgICAnIzg4MDAxNScsXG4gICAgICAgICcjZWQxYzI0JyxcbiAgICAgICAgJyNmZjdmMjcnLFxuICAgICAgICAnI2ZmZjIwMCcsXG5cbiAgICAgICAgJyMyMmIxNGMnLFxuICAgICAgICAnIzAwYTJlOCcsXG4gICAgICAgICcjM2Y0OGNjJyxcbiAgICAgICAgJyNhMzQ5YTQnLFxuICAgICAgICAnI2I5N2E1NycsXG4gICAgICAgICcjZmZhZWM5JyxcbiAgICAgICAgJyNmZmM5MGUnLFxuICAgICAgICAnIzAwMDAwMDAwJ1xuICAgICAgXVxuICAgIH0pXG4gIH1cbn0pXG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4kY29sb3Itc3dhdGNoLXdpZHRoOiAkcGF0dGVybi10cmFuc3BhcmVuY3ktc2l6ZTtcbiRjb2xvci1zd2F0Y2gtcmFkaXVzOiAkYm9yZGVyLXJhZGl1cyAtICRib3JkZXItd2lkdGg7XG5cbi5kaXRvLWNvbG9yIHtcbiAgLmRpdG8taW5wdXQge1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcblxuICAgIGlucHV0IHtcbiAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgICBmb250LXZhcmlhbnQtbnVtZXJpYzogdGFidWxhci1udW1zO1xuICAgICAgcGFkZGluZy1yaWdodDogJGNvbG9yLXN3YXRjaC13aWR0aDtcbiAgICB9XG4gIH1cblxuICAuZGl0by1idXR0b24tY2xlYXIge1xuICAgIG1hcmdpbi1yaWdodDogJGNvbG9yLXN3YXRjaC13aWR0aDtcbiAgfVxuXG4gIC5kaXRvLWNvbG9yLXBpY2tlciB7XG4gICAgbWFyZ2luOiAkcG9wdXAtbWFyZ2luO1xuICAgIGJvcmRlcjogJGJvcmRlci1zdHlsZTtcbiAgICBib3JkZXItcmFkaXVzOiAkYm9yZGVyLXJhZGl1cztcbiAgICBiYWNrZ3JvdW5kOiAkY29sb3Itd2hpdGU7XG4gICAgYm94LXNoYWRvdzogJHNoYWRvdy13aW5kb3c7XG4gIH1cblxuICAuZGl0by1jb2xvci1wcmV2aWV3IHtcbiAgICBiYWNrZ3JvdW5kOiAkcGF0dGVybi10cmFuc3BhcmVuY3k7XG4gICAgYm9yZGVyLWxlZnQ6ICRib3JkZXItc3R5bGU7XG5cbiAgICAmLFxuICAgIGRpdiB7XG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICB3aWR0aDogJGNvbG9yLXN3YXRjaC13aWR0aDtcbiAgICAgIHRvcDogMDtcbiAgICAgIHJpZ2h0OiAwO1xuICAgICAgYm90dG9tOiAwO1xuICAgICAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6ICRjb2xvci1zd2F0Y2gtcmFkaXVzO1xuICAgICAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6ICRjb2xvci1zd2F0Y2gtcmFkaXVzO1xuICAgIH1cbiAgfVxufVxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG5jb21wb25lbnQoXG4gIDppcz1cInNjaGVtYS5jb21wb25lbnRcIlxuICB2LWJpbmQ9XCIkcHJvcHNcIlxuKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbi8vIFRoaXMgaXMgdGhlIGdlbmVyYWwgcHVycG9zZSAnY29tcG9uZW50JyB0eXBlLCB3aGljaCBjYW4gcmVzb2x2ZSB0byBhbnkgY3VzdG9tXG4vLyBjb21wb25lbnQgdGhyb3VnaCBgc2NoZW1hLmNvbXBvbmVudGAsIHNlZSBgcmVzb2x2ZVNjaGVtYUNvbXBvbmVudCgpYC4gVGhpc1xuLy8gY2FuIGJlIHVzZWQgdG8gbmVzdCBhcmJpdHJhcnkgdnVlIGNvbXBvbmVudHMgaW4gc2NoZW1hOlxuLy8ge1xuLy8gICB0eXBlOiAnY29tcG9uZW50Jyxcbi8vICAgY29tcG9uZW50OiBpbXBvcnQoJy4vY29tcG9uZW50Jylcbi8vIH1cblxuaW1wb3J0IERpdG9UeXBlQ29tcG9uZW50IGZyb20gJy4uL0RpdG9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IHsgcmVzb2x2ZVNjaGVtYUNvbXBvbmVudCB9IGZyb20gJy4uL3V0aWxzL3NjaGVtYS5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9UeXBlQ29tcG9uZW50LnJlZ2lzdGVyKCdjb21wb25lbnQnLCB7XG4gIC8vIE92ZXJyaWRlIHRoZSBzdGFuZGFyZCBgZGVmYXVsdFZhbHVlOiBudWxsYCB0byBub3Qgc2V0IGFueSBkYXRhIGZvciBjdXN0b21cbiAgLy8gY29tcG9uZW50cywgdW5sZXNzIHRoZXkgcHJvdmlkZSBhIGRlZmF1bHQgdmFsdWUuXG4gIGRlZmF1bHRWYWx1ZTogKCkgPT4gdW5kZWZpbmVkLCAvLyBDYWxsYmFjayB0byBvdmVycmlkZSBgZGVmYXVsdFZhbHVlOiBudWxsYFxuICBpZ25vcmVNaXNzaW5nVmFsdWU6IHNjaGVtYSA9PiAhKCdkZWZhdWx0JyBpbiBzY2hlbWEpLFxuXG4gIGFzeW5jIHByb2Nlc3NTY2hlbWEoYXBpLCBzY2hlbWEpIHtcbiAgICBhd2FpdCByZXNvbHZlU2NoZW1hQ29tcG9uZW50KHNjaGVtYSlcbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbi8vLSBUT0RPOiBGaW5kIGEgYmV0dGVyIHdheSB0byB0cmlnZ2VyIGV2YWx1YXRpb24gb2YgYHZhbHVlYCB0aGF0IGRvc2Ugbm90XG4vLy0gaW52b2x2ZSBhY3R1YWxseSByZW5kZXJpbmcgaXQgd2hlbiB0aGUgY29tcG9uZW50IGlzIG5vdCB2aXNpYmxlLlxuaW5wdXQuZGl0by10ZXh0LmRpdG8taW5wdXQoXG4gIDppZD1cImRhdGFQYXRoXCJcbiAgcmVmPVwiZWxlbWVudFwiXG4gIDpuYW1lPVwibmFtZVwiXG4gIHR5cGU9XCJ0ZXh0XCJcbiAgOnZhbHVlPVwidmFsdWVcIlxuICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gIDpyZWFkb25seT1cInRydWVcIlxuKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvVHlwZUNvbXBvbmVudCBmcm9tICcuLi9EaXRvVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCBUeXBlTWl4aW4gZnJvbSAnLi4vbWl4aW5zL1R5cGVNaXhpbi5qcydcbmltcG9ydCBEYXRhTWl4aW4gZnJvbSAnLi4vbWl4aW5zL0RhdGFNaXhpbi5qcydcblxuZXhwb3J0IGRlZmF1bHQgRGl0b1R5cGVDb21wb25lbnQucmVnaXN0ZXIoXG4gIFsnY29tcHV0ZWQnLCAnZGF0YScsICdoaWRkZW4nXSxcbiAgLy8gQHZ1ZS9jb21wb25lbnRcbiAge1xuICAgIG1peGluczogW0RhdGFNaXhpbl0sXG5cbiAgICBkZWZhdWx0VmFsdWU6ICgpID0+IHVuZGVmaW5lZCwgLy8gQ2FsbGJhY2sgdG8gb3ZlcnJpZGUgYGRlZmF1bHRWYWx1ZTogbnVsbGBcbiAgICBkZWZhdWx0VmlzaWJsZTogZmFsc2UsXG5cbiAgICBjb21wdXRlZDoge1xuICAgICAgdmFsdWU6IHtcbiAgICAgICAgZ2V0KCkge1xuICAgICAgICAgIGNvbnN0IHsgc2NoZW1hIH0gPSB0aGlzXG4gICAgICAgICAgaWYgKHNjaGVtYS5kYXRhIHx8IHNjaGVtYS5kYXRhUGF0aCkge1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLmhhbmRsZURhdGFTY2hlbWEoc2NoZW1hLCAnc2NoZW1hJylcbiAgICAgICAgICAgIC8vIFRPRE86IEZpeCBzaWRlLWVmZmVjdHNcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZVxuICAgICAgICAgICAgdGhpcy5kYXRhW3RoaXMubmFtZV0gPSB2YWx1ZVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gVHlwZU1peGluLmNvbXB1dGVkLnZhbHVlLmdldC5jYWxsKHRoaXMpXG4gICAgICAgIH0sXG5cbiAgICAgICAgc2V0KHZhbHVlKSB7XG4gICAgICAgICAgVHlwZU1peGluLmNvbXB1dGVkLnZhbHVlLnNldC5jYWxsKHRoaXMsIHZhbHVlKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG4pXG48L3NjcmlwdD5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4uZGl0by1kYXRlXG4gIGNvbXBvbmVudChcbiAgICA6aXM9XCJnZXRDb21wb25lbnQodHlwZSlcIlxuICAgIDppZD1cImRhdGFQYXRoXCJcbiAgICByZWY9XCJlbGVtZW50XCJcbiAgICB2LW1vZGVsPVwiZGF0ZVZhbHVlXCJcbiAgICA6bG9jYWxlPVwibG9jYWxlXCJcbiAgICA6Zm9ybWF0PVwiZm9ybWF0c1wiXG4gICAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gIClcbiAgICB0ZW1wbGF0ZSgjYWZ0ZXIpXG4gICAgICBidXR0b24uZGl0by1idXR0b24tY2xlYXIuZGl0by1idXR0b24tb3ZlcmxheShcbiAgICAgICAgdi1pZj1cInNob3dDbGVhckJ1dHRvblwiXG4gICAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICAgICAgQGNsaWNrLnN0b3A9XCJjbGVhclwiXG4gICAgICAgIEBtb3VzZWRvd24uc3RvcFxuICAgICAgKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvVHlwZUNvbXBvbmVudCBmcm9tICcuLi9EaXRvVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCB7IGdldFNjaGVtYUFjY2Vzc29yIH0gZnJvbSAnLi4vdXRpbHMvYWNjZXNzb3IuanMnXG5pbXBvcnQgeyBEYXRlUGlja2VyLCBUaW1lUGlja2VyLCBEYXRlVGltZVBpY2tlciB9IGZyb20gJ0BkaXRvanMvdWkvc3JjJ1xuaW1wb3J0IHsgaXNEYXRlLCBhc3NpZ25EZWVwbHkgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG5leHBvcnQgZGVmYXVsdCBEaXRvVHlwZUNvbXBvbmVudC5yZWdpc3RlcihcbiAgWydkYXRlJywgJ2RhdGV0aW1lJywgJ3RpbWUnXSxcbiAgLy8gQHZ1ZS9jb21wb25lbnRcbiAge1xuICAgIGNvbXBvbmVudHM6IHsgRGF0ZVBpY2tlciwgVGltZVBpY2tlciwgRGF0ZVRpbWVQaWNrZXIgfSxcbiAgICAvLyBUT0RPOiBUaGlzIGlzIG9ubHkgaGVyZSBzbyB3ZSBnZXQgcGxhY2Vob2xkZXIgYWRkZWQuIENvbWUgdXAgd2l0aCBhXG4gICAgLy8gYmV0dGVyIHdheSB0byBzdXBwb3J0IGF0dHJpYnV0ZXMgcGVyIGNvbXBvbmVudCAoYSBsaXN0IG9mIGFjdHVhbGx5XG4gICAgLy8gc3VwcG9ydGVkIGF0dHJpYnV0ZXMpXG4gICAgbmF0aXZlRmllbGQ6IHRydWUsXG4gICAgdGV4dEZpZWxkOiB0cnVlLFxuXG4gICAgY29tcHV0ZWQ6IHtcbiAgICAgIGRhdGVWYWx1ZToge1xuICAgICAgICBnZXQoKSB7XG4gICAgICAgICAgY29uc3QgeyB2YWx1ZSB9ID0gdGhpc1xuICAgICAgICAgIHJldHVybiB2YWx1ZSA/IG5ldyBEYXRlKHZhbHVlKSA6IHZhbHVlXG4gICAgICAgIH0sXG5cbiAgICAgICAgc2V0KHZhbHVlKSB7XG4gICAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlXG4gICAgICAgIH1cbiAgICAgIH0sXG5cbiAgICAgIC8vIFRPRE86IFJlbmFtZSB0byBgZm9ybWF0YCwgb25jZSBgc2NoZW1hLmZvcm1hdCgpYCB3YXMgcmVtb3ZlZCB0b1xuICAgICAgLy8gYGZvcm1hdFZhbHVlKClgLlxuICAgICAgZm9ybWF0czogZ2V0U2NoZW1hQWNjZXNzb3IoJ2Zvcm1hdHMnLCB7XG4gICAgICAgIHR5cGU6IE9iamVjdCxcbiAgICAgICAgZGVmYXVsdDogbnVsbCxcbiAgICAgICAgZ2V0KGZvcm1hdHMpIHtcbiAgICAgICAgICBjb25zdCB7IGRhdGUsIHRpbWUgfSA9IGFzc2lnbkRlZXBseSh7fSwgdGhpcy5hcGkuZm9ybWF0cywgZm9ybWF0cylcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZGF0ZTogWydkYXRlJywgJ2RhdGV0aW1lJ10uaW5jbHVkZXModGhpcy50eXBlKSA/IGRhdGUgOiBudWxsLFxuICAgICAgICAgICAgdGltZTogWyd0aW1lJywgJ2RhdGV0aW1lJ10uaW5jbHVkZXModGhpcy50eXBlKSA/IHRpbWUgOiBudWxsXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBtZXRob2RzOiB7XG4gICAgICBnZXRDb21wb25lbnQodHlwZSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGRhdGU6ICdkYXRlLXBpY2tlcicsXG4gICAgICAgICAgdGltZTogJ3RpbWUtcGlja2VyJyxcbiAgICAgICAgICBkYXRldGltZTogJ2RhdGUtdGltZS1waWNrZXInXG4gICAgICAgIH1bdHlwZV1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgcHJvY2Vzc1ZhbHVlKHNjaGVtYSwgdmFsdWUpIHtcbiAgICAgIHJldHVybiBpc0RhdGUodmFsdWUpID8gdmFsdWUudG9JU09TdHJpbmcoKSA6IHZhbHVlXG4gICAgfVxuICB9XG4pXG48L3NjcmlwdD5cbiIsImltcG9ydCB7IGlzQXJyYXksIGFzQXJyYXkgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0UXVlcnkocXVlcnkpIHtcbiAgY29uc3QgZW50cmllcyA9IHF1ZXJ5XG4gICAgPyBpc0FycmF5KHF1ZXJ5KVxuICAgICAgPyBxdWVyeVxuICAgICAgOiBPYmplY3QuZW50cmllcyhxdWVyeSlcbiAgICA6IFtdXG4gIHJldHVybiAoXG4gICAgbmV3IFVSTFNlYXJjaFBhcmFtcyhcbiAgICAgIC8vIEV4cGFuZCBhcnJheSB2YWx1ZXMgaW50byBtdWx0aXBsZSBlbnRyaWVzIHVuZGVyIHRoZSBzYW1lIGtleSwgc29cbiAgICAgIC8vIGBmb3JtYXRRdWVyeSh7IGZvbzogWzEsIDJdLCBiYXI6IDMgfSlgID0+ICdmb289MSZmb289MiZiYXI9MycuXG4gICAgICBlbnRyaWVzLnJlZHVjZShcbiAgICAgICAgKGVudHJpZXMsIFtrZXksIHZhbHVlXSkgPT4ge1xuICAgICAgICAgIGZvciAoY29uc3QgdmFsIG9mIGFzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgICAgICBlbnRyaWVzLnB1c2goW2tleSwgdmFsXSlcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGVudHJpZXNcbiAgICAgICAgfSxcbiAgICAgICAgW11cbiAgICAgIClcbiAgICApXG4gICAgICAudG9TdHJpbmcoKVxuICAgICAgLy8gZGVjb2RlIGFsbCB0aGVzZSBlbmNvZGVkIGNoYXJhY3RlcnMgdG8gaGF2ZSB0aGUgc2FtZSBiZWhhdmlvciBhc1xuICAgICAgLy8gdnVlLXJvdXRlcidzIG93biBxdWVyeSBlbmNvZGluZy5cbiAgICAgIC5yZXBsYWNlQWxsKC8lKD86MjF8MjR8Mjh8Mjl8MkN8MkZ8M0F8M0J8M0R8M0Z8NDApL2csIGRlY29kZVVSSUNvbXBvbmVudClcbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVwbGFjZVJvdXRlKHsgcGF0aCwgcXVlcnksIGhhc2ggfSkge1xuICAvLyBQcmVzZXJ2ZSBgaGlzdG9yeS5zdGF0ZWAsIHNlZTpcbiAgLy8gaHR0cHM6Ly9yb3V0ZXIudnVlanMub3JnL2d1aWRlL21pZ3JhdGlvbi8jdXNhZ2Utb2YtaGlzdG9yeS1zdGF0ZVxuICBoaXN0b3J5LnJlcGxhY2VTdGF0ZShcbiAgICBoaXN0b3J5LnN0YXRlLFxuICAgIG51bGwsXG4gICAgYCR7XG4gICAgICBsb2NhdGlvbi5vcmlnaW5cbiAgICB9JHtcbiAgICAgIHBhdGggPz8gbG9jYXRpb24ucGF0aG5hbWVcbiAgICB9PyR7XG4gICAgICBxdWVyeSA/IGZvcm1hdFF1ZXJ5KHF1ZXJ5KSA6IGxvY2F0aW9uLnNlYXJjaC5zbGljZSgxKVxuICAgIH0ke1xuICAgICAgaGFzaCA/PyBsb2NhdGlvbi5oYXNoXG4gICAgfWBcbiAgKVxufVxuIiwiaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCBJdGVtTWl4aW4gZnJvbSAnLi9JdGVtTWl4aW4uanMnXG5pbXBvcnQgUmVzb3VyY2VNaXhpbiBmcm9tICcuL1Jlc291cmNlTWl4aW4uanMnXG5pbXBvcnQgU2NoZW1hUGFyZW50TWl4aW4gZnJvbSAnLi4vbWl4aW5zL1NjaGVtYVBhcmVudE1peGluLmpzJ1xuaW1wb3J0IHsgZ2V0U2NoZW1hQWNjZXNzb3IsIGdldFN0b3JlQWNjZXNzb3IgfSBmcm9tICcuLi91dGlscy9hY2Nlc3Nvci5qcydcbmltcG9ydCB7IGdldE1lbWJlclJlc291cmNlIH0gZnJvbSAnLi4vdXRpbHMvcmVzb3VyY2UuanMnXG5pbXBvcnQgeyByZXBsYWNlUm91dGUgfSBmcm9tICcuLi91dGlscy9yb3V0ZS5qcydcbmltcG9ydCB7XG4gIHByb2Nlc3NSb3V0ZVNjaGVtYSxcbiAgcHJvY2Vzc0Zvcm1zLFxuICBnZXROYW1lZFNjaGVtYXMsXG4gIGdldEJ1dHRvblNjaGVtYXMsXG4gIGhhc0Zvcm1TY2hlbWEsXG4gIGdldEZvcm1TY2hlbWFzLFxuICBnZXRWaWV3U2NoZW1hLFxuICBpc0NvbXBhY3QsXG4gIGlzSW5saW5lZCxcbiAgaXNPYmplY3RTb3VyY2UsXG4gIGlzTGlzdFNvdXJjZVxufSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG5pbXBvcnQge1xuICBpc09iamVjdCxcbiAgaXNTdHJpbmcsXG4gIGlzQXJyYXksXG4gIGlzTnVtYmVyLFxuICBlcXVhbHMsXG4gIHBhcnNlRGF0YVBhdGgsXG4gIG5vcm1hbGl6ZURhdGFQYXRoXG59IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCB7XG4gIG1peGluczogW0l0ZW1NaXhpbiwgUmVzb3VyY2VNaXhpbiwgU2NoZW1hUGFyZW50TWl4aW5dLFxuXG4gIGRlZmF1bHRWYWx1ZShzY2hlbWEpIHtcbiAgICByZXR1cm4gaXNMaXN0U291cmNlKHNjaGVtYSkgPyBbXSA6IG51bGxcbiAgfSxcblxuICBwcm92aWRlKCkge1xuICAgIHJldHVybiB7XG4gICAgICAkc291cmNlQ29tcG9uZW50OiAoKSA9PiB0aGlzXG4gICAgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHdyYXBwZWRQcmltaXRpdmVzOiBudWxsLFxuICAgICAgdW53cmFwcGluZ1ByaW1pdGl2ZXM6IGZhbHNlXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgc291cmNlQ29tcG9uZW50KCkge1xuICAgICAgcmV0dXJuIHRoaXNcbiAgICB9LFxuXG4gICAgaXNPYmplY3RTb3VyY2UoKSB7XG4gICAgICByZXR1cm4gaXNPYmplY3RTb3VyY2UodGhpcy50eXBlKVxuICAgIH0sXG5cbiAgICBpc0xpc3RTb3VyY2UoKSB7XG4gICAgICByZXR1cm4gaXNMaXN0U291cmNlKHRoaXMudHlwZSlcbiAgICB9LFxuXG4gICAgLy8gQG92ZXJyaWRlIFJlc291cmNlTWl4aW4uaGFzRGF0YSgpXG4gICAgaGFzRGF0YSgpIHtcbiAgICAgIHJldHVybiAhIXRoaXMudmFsdWVcbiAgICB9LFxuXG4gICAgaXNSZWFkeSgpIHtcbiAgICAgIC8vIExpc3RzIHRoYXQgaGF2ZSBubyBkYXRhIGFuZCBubyBhc3NvY2lhdGVkIHJlc291cmNlIHNob3VsZCBzdGlsbCByZW5kZXIsXG4gICAgICAvLyBhcyB0aGV5IG1heSBiZSBnZXR0aW5nIHRoZWlyIGRhdGEgZWxzZXdoZXJlLCBlLmcuIGBjb21wdXRlKClgLlxuICAgICAgcmV0dXJuIHRoaXMuaGFzRGF0YSB8fCAhdGhpcy5wcm92aWRlc0RhdGFcbiAgICB9LFxuXG4gICAgaXNJblZpZXcoKSB7XG4gICAgICByZXR1cm4gISF0aGlzLnZpZXdDb21wb25lbnRcbiAgICB9LFxuXG4gICAgd3JhcFByaW1pdGl2ZXMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWEud3JhcFByaW1pdGl2ZXNcbiAgICB9LFxuXG4gICAgbGlzdERhdGE6IHtcbiAgICAgIGdldCgpIHtcbiAgICAgICAgbGV0IGRhdGEgPSB0aGlzLnZhbHVlXG4gICAgICAgIGlmICh0aGlzLmlzT2JqZWN0U291cmNlKSB7XG4gICAgICAgICAgLy8gQ29udmVydCB0byBsaXN0IGFycmF5LlxuICAgICAgICAgIGRhdGEgPSBkYXRhICE9IG51bGwgPyBbZGF0YV0gOiBbXVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIElmIGRhdGEgZ2V0cyBpbmhlcml0ZWQgZnJvbSBwYXJlbnQsIHVud3JhcHBpbmcgaXMgbm90IGhhcHBlbmluZ1xuICAgICAgICAgIC8vIGF0IHRoZSByb290IGluIGBzZXREYXRhKClgLCBidXQgaGVyZSBpbnN0ZWFkLlxuICAgICAgICAgIGRhdGEgPSB0aGlzLnVud3JhcExpc3REYXRhKGRhdGEpIHx8IGRhdGFcbiAgICAgICAgfVxuICAgICAgICBkYXRhIHx8PSBbXVxuICAgICAgICBjb25zdCB7IHdyYXBQcmltaXRpdmVzIH0gPSB0aGlzXG4gICAgICAgIGlmICh3cmFwUHJpbWl0aXZlcykge1xuICAgICAgICAgIGlmICh0aGlzLnVud3JhcHBpbmdQcmltaXRpdmVzKSB7XG4gICAgICAgICAgICAvLyBXZSdyZSBkb25lIHVud3JhcHBpbmcgb25jZSBgbGlzdERhdGFgIGlzIHJlZXZhbHVhdGVkLCBzbyBzZXRcbiAgICAgICAgICAgIC8vIHRoaXMgdG8gYGZhbHNlYCBhZ2Fpbi4gU2VlIGB3cmFwcGVkUHJpbWl0aXZlc2Agd2F0Y2hlciBhYm92ZS5cbiAgICAgICAgICAgIC8vIFRPRE86IEZpeCBzaWRlLWVmZmVjdHNcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZVxuICAgICAgICAgICAgdGhpcy51bndyYXBwaW5nUHJpbWl0aXZlcyA9IGZhbHNlXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIENvbnZlcnQgZGF0YSB0byBhIGxpc3Qgb2Ygd3JhcHBlZCBwcmltaXRpdmVzLCBhbmQgcmV0dXJuIGl0LlxuICAgICAgICAgICAgLy8gVE9ETzogRml4IHNpZGUtZWZmZWN0c1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lXG4gICAgICAgICAgICB0aGlzLndyYXBwZWRQcmltaXRpdmVzID0gZGF0YS5tYXAodmFsdWUgPT4gKHtcbiAgICAgICAgICAgICAgW3dyYXBQcmltaXRpdmVzXTogdmFsdWVcbiAgICAgICAgICAgIH0pKVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gdGhpcy53cmFwcGVkUHJpbWl0aXZlc1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkYXRhXG4gICAgICB9LFxuXG4gICAgICBzZXQoZGF0YSkge1xuICAgICAgICBpZiAodGhpcy53cmFwUHJpbWl0aXZlcykge1xuICAgICAgICAgIHRoaXMud3JhcHBlZFByaW1pdGl2ZXMgPSBkYXRhXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMuaXNPYmplY3RTb3VyY2VcbiAgICAgICAgICAgID8gZGF0YSAmJiBkYXRhLmxlbmd0aCA+IDBcbiAgICAgICAgICAgICAgPyBkYXRhWzBdXG4gICAgICAgICAgICAgIDogbnVsbFxuICAgICAgICAgICAgOiBkYXRhXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgb2JqZWN0RGF0YToge1xuICAgICAgZ2V0KCkge1xuICAgICAgICAvLyBBbHdheXMgZ28gdGhyb3VnaCBgbGlzdERhdGFgIGludGVybmFsbHksIHdoaWNoIGRvZXMgYWxsIHRoZVxuICAgICAgICAvLyBwcm9jZXNzaW5nIG9mIGB3cmFwUHJpbWl0aXZlc2AsIGV0Yy5cbiAgICAgICAgcmV0dXJuIHRoaXMubGlzdERhdGFbMF0gfHwgbnVsbFxuICAgICAgfSxcblxuICAgICAgc2V0KGRhdGEpIHtcbiAgICAgICAgdGhpcy5saXN0RGF0YSA9IGRhdGEgPyBbZGF0YV0gOiBbXVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBzb3VyY2VTY2hlbWEoKSB7XG4gICAgICAvLyBUaGUgc291cmNlU2NoZW1hIG9mIGEgbGlzdCBpcyB0aGUgbGlzdCdzIHNjaGVtYSBpdHNlbGYuXG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWFcbiAgICB9LFxuXG4gICAgcGF0aCgpIHtcbiAgICAgIC8vIFRoaXMgaXMgdXNlZCBpbiBUeXBlTGlzdCBmb3IgRGl0b0Zvcm1DaG9vc2VyLlxuICAgICAgcmV0dXJuIHRoaXMucm91dGVDb21wb25lbnQuZ2V0Q2hpbGRQYXRoKHRoaXMuc2NoZW1hLnBhdGgpXG4gICAgfSxcblxuICAgIGRlZmF1bHRRdWVyeSgpIHtcbiAgICAgIGNvbnN0IHsgZGVmYXVsdE9yZGVyOiBvcmRlciB9ID0gdGhpc1xuICAgICAgcmV0dXJuIG9yZGVyID8geyBvcmRlciB9IDoge31cbiAgICB9LFxuXG4gICAgcXVlcnk6IGdldFN0b3JlQWNjZXNzb3IoJ3F1ZXJ5Jywge1xuICAgICAgZ2V0KHF1ZXJ5KSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgLi4udGhpcy5kZWZhdWx0UXVlcnksXG4gICAgICAgICAgLi4ucXVlcnlcbiAgICAgICAgfVxuICAgICAgfSxcblxuICAgICAgc2V0KHF1ZXJ5KSB7XG4gICAgICAgIC8vIEFsd2F5cyBrZWVwIHRoZSBkaXNwbGF5ZWQgcXVlcnkgcGFyYW1ldGVycyBpbiBzeW5jIHdpdGggdGhlIHN0b3JlZFxuICAgICAgICAvLyBvbmVzLiBVc2Ugc2NvcGUgYW5kIHBhZ2UgZnJvbSB0aGUgbGlzdCBzY2hlbWEgYXMgZGVmYXVsdHMsIGJ1dCBhbGxvd1xuICAgICAgICAvLyB0aGUgcm91dGUgcXVlcnkgcGFyYW1ldGVycyB0byBvdmVycmlkZSB0aGVtLlxuICAgICAgICBjb25zdCB7XG4gICAgICAgICAgc2NvcGUgPSB0aGlzLmRlZmF1bHRTY29wZT8ubmFtZSxcbiAgICAgICAgICBwYWdlID0gdGhpcy5zY2hlbWEucGFnZVxuICAgICAgICB9ID0gdGhpcy5xdWVyeVxuICAgICAgICAvLyBQcmVzZXJ2ZSAvIG1lcmdlIGN1cnJlbnRseSBzdG9yZWQgdmFsdWVzLlxuICAgICAgICBxdWVyeSA9IHtcbiAgICAgICAgICAuLi50aGlzLnF1ZXJ5LFxuICAgICAgICAgIC4uLihzY29wZSAhPSBudWxsICYmIHsgc2NvcGUgfSksXG4gICAgICAgICAgLi4uKHBhZ2UgIT0gbnVsbCAmJiB7IHBhZ2UgfSksXG4gICAgICAgICAgLi4ucXVlcnlcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWVxdWFscyhxdWVyeSwgdGhpcy4kcm91dGUucXVlcnkpKSB7XG4gICAgICAgICAgLy8gQ2hhbmdlIHRoZSByb3V0ZSBxdWVyeSBwYXJhbWV0ZXJzLCBidXQgZG9uJ3QgdHJpZ2dlciBhIHJvdXRlXG4gICAgICAgICAgLy8gY2hhbmdlLCBhcyB0aGF0IHdvdWxkIGNhdXNlIHRoZSBsaXN0IHRvIHJlbG9hZC5cbiAgICAgICAgICByZXBsYWNlUm91dGUoeyBxdWVyeSB9KVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBxdWVyeSAvLyBMZXQgZ2V0U3RvcmVBY2Nlc3NvcigpIGRvIHRoZSBhY3R1YWwgc2V0dGluZ1xuICAgICAgfVxuICAgIH0pLFxuXG4gICAgdG90YWw6IGdldFN0b3JlQWNjZXNzb3IoJ3RvdGFsJyksXG5cbiAgICBjb2x1bW5zKCkge1xuICAgICAgcmV0dXJuIGdldE5hbWVkU2NoZW1hcyh0aGlzLnNjaGVtYS5jb2x1bW5zKVxuICAgIH0sXG5cbiAgICBzY29wZXMoKSB7XG4gICAgICByZXR1cm4gZ2V0TmFtZWRTY2hlbWFzKHRoaXMuc2NoZW1hLnNjb3BlcylcbiAgICB9LFxuXG4gICAgZGVmYXVsdFNjb3BlKCkge1xuICAgICAgbGV0IGZpcnN0ID0gbnVsbFxuICAgICAgaWYgKHRoaXMuc2NvcGVzKSB7XG4gICAgICAgIGZvciAoY29uc3Qgc2NvcGUgb2YgT2JqZWN0LnZhbHVlcyh0aGlzLnNjb3BlcykpIHtcbiAgICAgICAgICBpZiAoc2NvcGUuZGVmYXVsdFNjb3BlKSB7XG4gICAgICAgICAgICByZXR1cm4gc2NvcGVcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCFmaXJzdCkge1xuICAgICAgICAgICAgZmlyc3QgPSBzY29wZVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGZpcnN0XG4gICAgfSxcblxuICAgIGRlZmF1bHRPcmRlcigpIHtcbiAgICAgIGlmICh0aGlzLmNvbHVtbnMpIHtcbiAgICAgICAgZm9yIChjb25zdCBjb2x1bW4gb2YgT2JqZWN0LnZhbHVlcyh0aGlzLmNvbHVtbnMpKSB7XG4gICAgICAgICAgY29uc3QgeyBkZWZhdWx0U29ydCB9ID0gY29sdW1uXG4gICAgICAgICAgaWYgKGRlZmF1bHRTb3J0KSB7XG4gICAgICAgICAgICBjb25zdCBkaXJlY3Rpb24gPSBpc1N0cmluZyhkZWZhdWx0U29ydCkgPyBkZWZhdWx0U29ydCA6ICdhc2MnXG4gICAgICAgICAgICByZXR1cm4gYCR7Y29sdW1uLm5hbWV9ICR7ZGlyZWN0aW9ufWBcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsXG4gICAgfSxcblxuICAgIG5lc3RlZE1ldGEoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi50aGlzLm1ldGEsXG4gICAgICAgIHNjaGVtYTogdGhpcy5zY2hlbWFcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZm9ybXMoKSB7XG4gICAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyhnZXRGb3JtU2NoZW1hcyh0aGlzLnNjaGVtYSwgdGhpcy5jb250ZXh0KSlcbiAgICB9LFxuXG4gICAgLy8gUmV0dXJucyB0aGUgbGlua2VkIHZpZXcgc2NoZW1hIGlmIHRoaXMgc291cmNlIGVkaXRzIGl0IGl0cyBpdGVtcyB0aHJvdWdoXG4gICAgLy8gYSBsaW5rZWQgdmlldy5cbiAgICB2aWV3KCkge1xuICAgICAgcmV0dXJuIGdldFZpZXdTY2hlbWEodGhpcy5zY2hlbWEsIHRoaXMuY29udGV4dClcbiAgICB9LFxuXG4gICAgbGlua3NUb1ZpZXcoKSB7XG4gICAgICByZXR1cm4gISF0aGlzLnZpZXdcbiAgICB9LFxuXG4gICAgYnV0dG9uU2NoZW1hcygpIHtcbiAgICAgIHJldHVybiBnZXRCdXR0b25TY2hlbWFzKHRoaXMuc2NoZW1hLmJ1dHRvbnMpXG4gICAgfSxcblxuICAgIGlzQ29tcGFjdCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmZvcm1zLmV2ZXJ5KGlzQ29tcGFjdClcbiAgICB9LFxuXG4gICAgaXNJbmxpbmVkKCkge1xuICAgICAgcmV0dXJuIGlzSW5saW5lZCh0aGlzLnNjaGVtYSlcbiAgICB9LFxuXG4gICAgcGFnaW5hdGU6IGdldFNjaGVtYUFjY2Vzc29yKCdwYWdpbmF0ZScsIHtcbiAgICAgIHR5cGU6IE51bWJlclxuICAgIH0pLFxuXG4gICAgcmVuZGVyOiBnZXRTY2hlbWFBY2Nlc3NvcigncmVuZGVyJywge1xuICAgICAgdHlwZTogRnVuY3Rpb24sXG4gICAgICBkZWZhdWx0OiBudWxsXG4gICAgfSksXG5cbiAgICBjcmVhdGFibGU6IGdldFNjaGVtYUFjY2Vzc29yKCdjcmVhdGFibGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2UsXG4gICAgICBnZXQoY3JlYXRhYmxlKSB7XG4gICAgICAgIHJldHVybiBjcmVhdGFibGUgJiYgaGFzRm9ybVNjaGVtYSh0aGlzLnNjaGVtYSlcbiAgICAgICAgICA/IHRoaXMuaXNPYmplY3RTb3VyY2VcbiAgICAgICAgICAgID8gIXRoaXMudmFsdWVcbiAgICAgICAgICAgIDogdHJ1ZVxuICAgICAgICAgIDogZmFsc2VcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIGVkaXRhYmxlOiBnZXRTY2hlbWFBY2Nlc3NvcignZWRpdGFibGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2UsXG4gICAgICBnZXQoZWRpdGFibGUpIHtcbiAgICAgICAgcmV0dXJuIGVkaXRhYmxlICYmICF0aGlzLmlzSW5saW5lZFxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgZGVsZXRhYmxlOiBnZXRTY2hlbWFBY2Nlc3NvcignZGVsZXRhYmxlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfSksXG5cbiAgICBkcmFnZ2FibGU6IGdldFNjaGVtYUFjY2Vzc29yKCdkcmFnZ2FibGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2UsXG4gICAgICBnZXQoZHJhZ2dhYmxlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzTGlzdFNvdXJjZSAmJiB0aGlzLmxpc3REYXRhLmxlbmd0aCA+IDEgJiYgZHJhZ2dhYmxlXG4gICAgICB9XG4gICAgfSksXG5cbiAgICBjb2xsYXBzaWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ2NvbGxhcHNpYmxlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IG51bGwsIC8vIHNvIHRoYXQgYD8/YCBiZWxvdyBjYW4gZG8gaXRzIHRoaW5nOlxuICAgICAgZ2V0KGNvbGxhcHNpYmxlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzSW5saW5lZCAmJiAhIShjb2xsYXBzaWJsZSA/PyB0aGlzLmNvbGxhcHNlZCAhPT0gbnVsbClcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIGNvbGxhcHNlZDogZ2V0U2NoZW1hQWNjZXNzb3IoJ2NvbGxhcHNlZCcsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBudWxsXG4gICAgfSlcbiAgfSxcblxuICB3YXRjaDoge1xuICAgICRyb3V0ZToge1xuICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3Z1ZWpzL3Z1ZS1yb3V0ZXIvaXNzdWVzLzMzOTMjaXNzdWVjb21tZW50LTExNTg0NzAxNDlcbiAgICAgIGZsdXNoOiAncG9zdCcsXG4gICAgICBoYW5kbGVyKHRvLCBmcm9tKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICB0aGlzLnByb3ZpZGVzRGF0YSAmJlxuICAgICAgICAgIGZyb20ucGF0aCA9PT0gdG8ucGF0aCAmJlxuICAgICAgICAgIGZyb20uaGFzaCA9PT0gdG8uaGFzaFxuICAgICAgICApIHtcbiAgICAgICAgICAvLyBQYXRocyBhbmQgaGFzaGVzIHJlbWFpbiB0aGUgc2FtZSwgc28gb25seSBxdWVyaWVzIGhhdmUgY2hhbmdlZC5cbiAgICAgICAgICAvLyBVcGRhdGUgZmlsdGVyIGFuZCByZWxvYWQgZGF0YSB3aXRob3V0IGNsZWFyaW5nLlxuICAgICAgICAgIHRoaXMucXVlcnkgPSB0by5xdWVyeVxuICAgICAgICAgIHRoaXMubG9hZERhdGEoZmFsc2UpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgd3JhcHBlZFByaW1pdGl2ZXM6IHtcbiAgICAgIGRlZXA6IHRydWUsXG4gICAgICBoYW5kbGVyKHRvLCBmcm9tKSB7XG4gICAgICAgIGNvbnN0IHsgd3JhcFByaW1pdGl2ZXMgfSA9IHRoaXNcbiAgICAgICAgLy8gU2tpcCB0aGUgaW5pdGlhbCBzZXR0aW5nIG9mIHdyYXBwZWRQcmltaXRpdmVzIGFycmF5XG4gICAgICAgIGlmICh3cmFwUHJpbWl0aXZlcyAmJiBmcm9tICE9PSBudWxsKSB7XG4gICAgICAgICAgLy8gV2hlbmV2ZXIgdGhlIHdyYXBwZWRQcmltaXRpdmVzIGNoYW5nZSwgbWFwIHRoZWlyIHZhbHVlcyBiYWNrIHRvXG4gICAgICAgICAgLy8gdGhlIGFycmF5IG9mIHByaW1pdGl2ZXMsIGluIGEgcHJpbWl0aXZlIHdheSA6KVxuICAgICAgICAgIC8vIEJ1dCBzZXQgYHVud3JhcHBpbmdQcmltaXRpdmVzID0gdHJ1ZWAsIHNvIHRoZSBgbGlzdERhdGFgIGNvbXB1dGVkXG4gICAgICAgICAgLy8gcHJvcGVydHkga25vd3MgYWJvdXQgaXQsIHdoaWNoIHNldHMgaXQgdG8gYGZhbHNlYCBhZ2Fpbi5cbiAgICAgICAgICB0aGlzLnVud3JhcHBpbmdQcmltaXRpdmVzID0gdHJ1ZVxuICAgICAgICAgIHRoaXMudmFsdWUgPSB0by5tYXAob2JqZWN0ID0+IG9iamVjdFt3cmFwUHJpbWl0aXZlc10pXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIHNldHVwRGF0YSgpIHtcbiAgICAgIHRoaXMucXVlcnkgPSB0aGlzLiRyb3V0ZS5xdWVyeVxuICAgICAgdGhpcy5lbnN1cmVEYXRhKClcbiAgICB9LFxuXG4gICAgLy8gQG92ZXJyaWRlIFJlc291cmNlTWl4aW4uY2xlYXJEYXRhKClcbiAgICBjbGVhckRhdGEoKSB7XG4gICAgICB0aGlzLnRvdGFsID0gMFxuICAgICAgdGhpcy52YWx1ZSA9IG51bGxcbiAgICB9LFxuXG4gICAgLy8gQG92ZXJyaWRlIFJlc291cmNlTWl4aW4uc2V0RGF0YSgpXG4gICAgc2V0RGF0YShkYXRhKSB7XG4gICAgICAvLyBXaGVuIG5ldyBkYXRhIGlzIGxvYWRlZCwgd2UgY2FuIHN0b3JlIGl0IHJpZ2h0IGJhY2sgaW4gdGhlIGRhdGEgb2YgdGhlXG4gICAgICAvLyB2aWV3IG9yIGZvcm0gdGhhdCBjcmVhdGVkIHRoaXMgbGlzdCBjb21wb25lbnQuXG4gICAgICAvLyBTdXBwb3J0IHR3byBmb3JtYXRzIGZvciBsaXN0IGRhdGE6XG4gICAgICAvLyAtIEFycmF5OiBgWy4uLl1gXG4gICAgICAvLyAtIE9iamVjdDogYHsgcmVzdWx0czogWy4uLl0sIHRvdGFsIH1gLCBzZWUgYHVud3JhcExpc3REYXRhKClgXG4gICAgICBpZiAoXG4gICAgICAgICFkYXRhIHx8XG4gICAgICAgIHRoaXMuaXNMaXN0U291cmNlICYmIGlzQXJyYXkoZGF0YSkgfHxcbiAgICAgICAgdGhpcy5pc09iamVjdFNvdXJjZSAmJiBpc09iamVjdChkYXRhKVxuICAgICAgKSB7XG4gICAgICAgIHRoaXMudmFsdWUgPSBkYXRhXG4gICAgICB9IGVsc2UgaWYgKHRoaXMudW53cmFwTGlzdERhdGEoZGF0YSkpIHtcbiAgICAgICAgLy8gVGhlIGZvcm1hdCBkaWRuJ3QgbWF0Y2gsIHNlZSBpZiB3ZSByZWNlaXZlZCBhIGB7IHJlc3VsdHMsIHRvdGFsIH1gXG4gICAgICAgIC8vIG9iamVjdCwgaW4gd2hpY2ggY2FzZSBgdGhpcy52YWx1ZWAgd2FzIGFscmVhZHkgc2V0IGJ5XG4gICAgICAgIC8vIGB1bndyYXBMaXN0RGF0YSgpYCBhbmQgd2UncmUgZG9uZSBub3cuXG4gICAgICB9IGVsc2UgaWYgKGlzT2JqZWN0KGRhdGEpICYmIHRoaXMuaXNJblZpZXcpIHtcbiAgICAgICAgLy8gVGhlIGNvbnRyb2xsZXIgaXMgc2VuZGluZyBkYXRhIGZvciBhIGZ1bGwgbXVsdGktY29tcG9uZW50IHZpZXcsXG4gICAgICAgIC8vIGluY2x1ZGluZyB0aGUgbmVzdGVkIGxpc3QgZGF0YS5cbiAgICAgICAgdGhpcy52aWV3Q29tcG9uZW50LnNldERhdGEoZGF0YSlcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgdW53cmFwTGlzdERhdGEoZGF0YSkge1xuICAgICAgaWYgKFxuICAgICAgICB0aGlzLmlzTGlzdFNvdXJjZSAmJlxuICAgICAgICBpc09iamVjdChkYXRhKSAmJlxuICAgICAgICBpc051bWJlcihkYXRhLnRvdGFsKSAmJlxuICAgICAgICBpc0FycmF5KGRhdGEucmVzdWx0cylcbiAgICAgICkge1xuICAgICAgICAvLyBJZiBAZGl0b2pzL3NlcnZlciBzZW5kcyBkYXRhIGluIHRoZSBmb3JtIG9mIGB7IHJlc3VsdHMsIHRvdGFsIH1gXG4gICAgICAgIC8vIHJlcGxhY2UgdGhlIHZhbHVlIHdpdGggcmVzdWx0LCBidXQgcmVtZW1iZXIgdGhlIHRvdGFsIGluIHRoZSBzdG9yZS5cbiAgICAgICAgdGhpcy50b3RhbCA9IGRhdGEudG90YWxcbiAgICAgICAgdGhpcy52YWx1ZSA9IGRhdGEucmVzdWx0c1xuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBjcmVhdGVJdGVtKHNjaGVtYSwgdHlwZSkge1xuICAgICAgY29uc3QgaXRlbSA9IHRoaXMuY3JlYXRlRGF0YShzY2hlbWEsIHR5cGUpXG4gICAgICBpZiAodGhpcy5pc09iamVjdFNvdXJjZSkge1xuICAgICAgICB0aGlzLm9iamVjdERhdGEgPSBpdGVtXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmxpc3REYXRhLnB1c2goaXRlbSlcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmNvbGxhcHNpYmxlKSB7XG4gICAgICAgIHRoaXMuJG5leHRUaWNrKCgpID0+IHRoaXMub3BlblNjaGVtYUNvbXBvbmVudCgtMSkpXG4gICAgICB9XG4gICAgICB0aGlzLm9uQ2hhbmdlKClcbiAgICAgIHJldHVybiBpdGVtXG4gICAgfSxcblxuICAgIHJlbW92ZUl0ZW0oaXRlbSwgaW5kZXgpIHtcbiAgICAgIGxldCByZW1vdmVkID0gZmFsc2VcbiAgICAgIGlmICh0aGlzLmlzT2JqZWN0U291cmNlKSB7XG4gICAgICAgIHRoaXMub2JqZWN0RGF0YSA9IG51bGxcbiAgICAgICAgcmVtb3ZlZCA9IHRydWVcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHsgbGlzdERhdGEgfSA9IHRoaXNcbiAgICAgICAgaWYgKGluZGV4ID49IDApIHtcbiAgICAgICAgICBsaXN0RGF0YS5zcGxpY2UoaW5kZXgsIDEpXG4gICAgICAgICAgcmVtb3ZlZCA9IHRydWVcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHJlbW92ZWQpIHtcbiAgICAgICAgdGhpcy5yZW1vdmVJdGVtU3RvcmUodGhpcy5zY2hlbWEsIGl0ZW0sIGluZGV4KVxuICAgICAgICB0aGlzLm9uQ2hhbmdlKClcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZGVsZXRlSXRlbShpdGVtLCBpbmRleCkge1xuICAgICAgY29uc3QgbGFiZWwgPSAoXG4gICAgICAgIGl0ZW0gJiZcbiAgICAgICAgdGhpcy5nZXRJdGVtTGFiZWwodGhpcy5zY2hlbWEsIGl0ZW0sIHtcbiAgICAgICAgICBpbmRleCxcbiAgICAgICAgICBleHRlbmRlZDogdHJ1ZVxuICAgICAgICB9KVxuICAgICAgKVxuXG4gICAgICBjb25zdCBub3RpZnkgPSAoKSA9PlxuICAgICAgICB0aGlzLm5vdGlmeSh7XG4gICAgICAgICAgdHlwZTogdGhpcy5pc1RyYW5zaWVudCA/ICdpbmZvJyA6ICdzdWNjZXNzJyxcbiAgICAgICAgICB0aXRsZTogJ1N1Y2Nlc3NmdWxseSBSZW1vdmVkJyxcbiAgICAgICAgICB0ZXh0OiBbXG4gICAgICAgICAgICBgJHtsYWJlbH0gd2FzICR7dGhpcy52ZXJicy5kZWxldGVkfS5gLFxuICAgICAgICAgICAgdGhpcy50cmFuc2llbnROb3RlXG4gICAgICAgICAgXVxuICAgICAgICB9KVxuXG4gICAgICBpZiAoXG4gICAgICAgIGl0ZW0gJiZcbiAgICAgICAgd2luZG93LmNvbmZpcm0oXG4gICAgICAgICAgYERvIHlvdSByZWFsbHkgd2FudCB0byAke3RoaXMudmVyYnMuZGVsZXRlfSAke2xhYmVsfT9gXG4gICAgICAgIClcbiAgICAgICkge1xuICAgICAgICBpZiAodGhpcy5pc1RyYW5zaWVudCkge1xuICAgICAgICAgIHRoaXMucmVtb3ZlSXRlbShpdGVtLCBpbmRleClcbiAgICAgICAgICBub3RpZnkoKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IGl0ZW1JZCA9IHRoaXMuZ2V0SXRlbUlkKHRoaXMuc2NoZW1hLCBpdGVtLCBpbmRleClcbiAgICAgICAgICBjb25zdCByZXNvdXJjZSA9IGdldE1lbWJlclJlc291cmNlKGl0ZW1JZCwgdGhpcy5yZXNvdXJjZSlcbiAgICAgICAgICBpZiAocmVzb3VyY2UpIHtcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlUmVxdWVzdCh7IG1ldGhvZDogJ2RlbGV0ZScsIHJlc291cmNlIH0sIGVyciA9PiB7XG4gICAgICAgICAgICAgIGlmICghZXJyKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZW1vdmVJdGVtKGl0ZW0sIGluZGV4KVxuICAgICAgICAgICAgICAgIG5vdGlmeSgpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgdGhpcy5yZWxvYWREYXRhKClcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIGdldFNjaGVtYUNvbXBvbmVudChpbmRleCkge1xuICAgICAgY29uc3QgeyBzY2hlbWFDb21wb25lbnRzIH0gPSB0aGlzXG4gICAgICBjb25zdCB7IGxlbmd0aCB9ID0gc2NoZW1hQ29tcG9uZW50c1xuICAgICAgcmV0dXJuIHNjaGVtYUNvbXBvbmVudHNbKChpbmRleCAlIGxlbmd0aCkgKyBsZW5ndGgpICUgbGVuZ3RoXVxuICAgIH0sXG5cbiAgICBvcGVuU2NoZW1hQ29tcG9uZW50KGluZGV4KSB7XG4gICAgICBjb25zdCBzY2hlbWFDb21wb25lbnQgPSB0aGlzLmdldFNjaGVtYUNvbXBvbmVudChpbmRleClcbiAgICAgIGlmIChzY2hlbWFDb21wb25lbnQpIHtcbiAgICAgICAgc2NoZW1hQ29tcG9uZW50Lm9wZW5lZCA9IHRydWVcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYXN5bmMgbmF2aWdhdGVUb0NvbXBvbmVudChkYXRhUGF0aCwgb25Db21wbGV0ZSkge1xuICAgICAgaWYgKHRoaXMuY29sbGFwc2libGUpIHtcbiAgICAgICAgY29uc3QgaW5kZXggPSBkYXRhUGF0aC5zdGFydHNXaXRoKHRoaXMuZGF0YVBhdGgpXG4gICAgICAgICAgPyB0aGlzLmlzTGlzdFNvdXJjZVxuICAgICAgICAgICAgPyBwYXJzZURhdGFQYXRoKGRhdGFQYXRoLnNsaWNlKHRoaXMuZGF0YVBhdGgubGVuZ3RoICsgMSkpWzBdID8/IG51bGxcbiAgICAgICAgICAgIDogMFxuICAgICAgICAgIDogbnVsbFxuICAgICAgICBpZiAoaW5kZXggIT09IG51bGwgJiYgaXNOdW1iZXIoK2luZGV4KSkge1xuICAgICAgICAgIGNvbnN0IHNjaGVtYUNvbXBvbmVudCA9IHRoaXMuZ2V0U2NoZW1hQ29tcG9uZW50KCtpbmRleClcbiAgICAgICAgICBpZiAoc2NoZW1hQ29tcG9uZW50KSB7XG4gICAgICAgICAgICBjb25zdCB7IG9wZW5lZCB9ID0gc2NoZW1hQ29tcG9uZW50XG4gICAgICAgICAgICBpZiAoIW9wZW5lZCkge1xuICAgICAgICAgICAgICBzY2hlbWFDb21wb25lbnQub3BlbmVkID0gdHJ1ZVxuICAgICAgICAgICAgICBhd2FpdCB0aGlzLiRuZXh0VGljaygpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBjb21wb25lbnRzID0gc2NoZW1hQ29tcG9uZW50LmdldENvbXBvbmVudHNCeURhdGFQYXRoKGRhdGFQYXRoKVxuICAgICAgICAgICAgaWYgKGNvbXBvbmVudHMubGVuZ3RoID4gMCAmJiAob25Db21wbGV0ZT8uKGNvbXBvbmVudHMpID8/IHRydWUpKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBzY2hlbWFDb21wb25lbnQub3BlbmVkID0gb3BlbmVkXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy5uYXZpZ2F0ZVRvUm91dGVDb21wb25lbnQoZGF0YVBhdGgsIG9uQ29tcGxldGUpXG4gICAgfSxcblxuICAgIG5hdmlnYXRlVG9Sb3V0ZUNvbXBvbmVudChkYXRhUGF0aCwgb25Db21wbGV0ZSkge1xuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgY29uc3QgY2FsbE9uQ29tcGxldGUgPSAoKSA9PiB7XG4gICAgICAgICAgLy8gUmV0cmlldmUgdGhlIGxhc3Qgcm91dGUgY29tcG9uZW50LCB3aGljaCB3aWxsIGJlIHRoZSBjb21wb25lbnQgdGhhdFxuICAgICAgICAgIC8vIHdlIGp1c3QgbmF2aWdhdGVkIHRvLCBhbmQgcGFzcyBpdCBvbiB0byBgb25Db21wbGV0ZSgpYFxuICAgICAgICAgIGNvbnN0IHsgcm91dGVDb21wb25lbnRzIH0gPSB0aGlzLmFwcFN0YXRlXG4gICAgICAgICAgY29uc3Qgcm91dGVDb21wb25lbnQgPSByb3V0ZUNvbXBvbmVudHNbcm91dGVDb21wb25lbnRzLmxlbmd0aCAtIDFdXG4gICAgICAgICAgcmVzb2x2ZShvbkNvbXBsZXRlPy4oW3JvdXRlQ29tcG9uZW50XSkgPz8gdHJ1ZSlcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGRhdGFQYXRoUGFydHMgPSBwYXJzZURhdGFQYXRoKGRhdGFQYXRoKVxuICAgICAgICAvLyBTZWUgaWYgd2UgY2FuIGZpbmQgYSByb3V0ZSB0aGF0IGNhbiBzZXJ2ZSBwYXJ0IG9mIHRoZSBnaXZlbiBkYXRhUGF0aCxcbiAgICAgICAgLy8gYW5kIHRha2UgaXQgZnJvbSB0aGVyZTpcbiAgICAgICAgd2hpbGUgKGRhdGFQYXRoUGFydHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGNvbnN0IHBhdGggPSB0aGlzLnJvdXRlQ29tcG9uZW50LmdldENoaWxkUGF0aChcbiAgICAgICAgICAgIHRoaXMuYXBpLm5vcm1hbGl6ZVBhdGgobm9ybWFsaXplRGF0YVBhdGgoZGF0YVBhdGhQYXJ0cykpXG4gICAgICAgICAgKVxuICAgICAgICAgIC8vIFNlZSBpZiB0aGVyZSBhY3R1YWxseSBpcyBhIHJvdXRlIGZvciB0aGlzIHN1Yi1jb21wb25lbnQ6XG4gICAgICAgICAgY29uc3QgeyBtYXRjaGVkIH0gPSB0aGlzLiRyb3V0ZXIucmVzb2x2ZShwYXRoKVxuICAgICAgICAgIGlmIChtYXRjaGVkLmxlbmd0aCAmJiBtYXRjaGVkWzBdLm5hbWUgIT09ICdjYXRjaC1hbGwnKSB7XG4gICAgICAgICAgICBpZiAodGhpcy4kcm91dGUucGF0aCA9PT0gcGF0aCkge1xuICAgICAgICAgICAgICAvLyBXZSdyZSBhbHJlYWR5IHRoZXJlLCBzbyBqdXN0IGNhbGwgYG9uQ29tcGxldGUoKWA6XG4gICAgICAgICAgICAgIGNhbGxPbkNvbXBsZXRlKClcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIC8vIE5hdmlnYXRlIHRvIHRoZSBjb21wb25lbnQncyBwYXRoLCB0aGVuIGNhbGwgYG9uQ29tcGxldGUoKWBfOlxuICAgICAgICAgICAgICB0aGlzLiRyb3V0ZXJcbiAgICAgICAgICAgICAgICAucHVzaCh7IHBhdGggfSlcbiAgICAgICAgICAgICAgICAuY2F0Y2gocmVqZWN0KVxuICAgICAgICAgICAgICAgIC8vIFdhaXQgZm9yIHRoZSBsYXN0IHJvdXRlIGNvbXBvbmVudCB0byBiZSBtb3VudGVkIGluIHRoZSBuZXh0XG4gICAgICAgICAgICAgICAgLy8gdGljayBiZWZvcmUgY2FsbGluZyBgb25Db21wbGV0ZSgpYFxuICAgICAgICAgICAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgIHRoaXMuJG5leHRUaWNrKGNhbGxPbkNvbXBsZXRlKVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIEtlZXAgcmVtb3ZpbmcgdGhlIGxhc3QgcGFydCB1bnRpbCB3ZSBmaW5kIGEgbWF0Y2guXG4gICAgICAgICAgZGF0YVBhdGhQYXJ0cy5wb3AoKVxuICAgICAgICB9XG4gICAgICAgIHJlc29sdmUoZmFsc2UpXG4gICAgICB9KVxuICAgIH1cbiAgfSwgLy8gZW5kIG9mIGBtZXRob2RzYFxuXG4gIGFzeW5jIHByb2Nlc3NTY2hlbWEoXG4gICAgYXBpLFxuICAgIHNjaGVtYSxcbiAgICBuYW1lLFxuICAgIHJvdXRlcyxcbiAgICBsZXZlbCxcbiAgICBuZXN0ZWQgPSBmYWxzZSxcbiAgICBmbGF0dGVuID0gZmFsc2UsXG4gICAgcHJvY2VzcyA9IG51bGxcbiAgKSB7XG4gICAgcHJvY2Vzc1JvdXRlU2NoZW1hKGFwaSwgc2NoZW1hLCBuYW1lKVxuICAgIGNvbnN0IGlubGluZWQgPSBpc0lubGluZWQoc2NoZW1hKVxuICAgIGlmIChpbmxpbmVkICYmIHNjaGVtYS5yZXNvdXJjZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgTmVzdGVkICR7XG4gICAgICAgICAgdGhpcy5pc0xpc3RTb3VyY2VcbiAgICAgICAgICAgID8gJ2xpc3RzJ1xuICAgICAgICAgICAgOiB0aGlzLmlzT2JqZWN0U291cmNlXG4gICAgICAgICAgICAgID8gJ29iamVjdHMnXG4gICAgICAgICAgICAgIDogJ3NjaGVtYSdcbiAgICAgICAgfSBjYW5ub3QgbG9hZCBkYXRhIGZyb20gdGhlaXIgb3duIHJlc291cmNlc2BcbiAgICAgIClcbiAgICB9XG4gICAgLy8gVXNlIGRpZmZlcmVudGx5IG5hbWVkIHVybCBwYXJhbWV0ZXJzIG9uIGVhY2ggbmVzdGVkIGxldmVsIGZvciBpZCBhc1xuICAgIC8vIG90aGVyd2lzZSB0aGV5IHdvdWxkIGNsYXNoIGFuZCBvdmVycmlkZSBlYWNoIG90aGVyIGluc2lkZSAkcm91dGUucGFyYW1zXG4gICAgLy8gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vdnVlanMvdnVlLXJvdXRlci9pc3N1ZXMvMTM0NVxuICAgIGNvbnN0IHBhcmFtID0gYGlkJHtsZXZlbCArIDF9YFxuICAgIGNvbnN0IG1ldGEgPSB7XG4gICAgICBhcGksXG4gICAgICBzY2hlbWFcbiAgICB9XG4gICAgY29uc3QgZm9ybU1ldGEgPSB7XG4gICAgICAuLi5tZXRhLFxuICAgICAgLy8gV2hlbiBjaGlsZHJlbiBhcmUgZmxhdHRlbmVkIChlLmcuIHRyZWUtbGlzdHMpLCBpbmNsdWRlIHRoZSBgZmxhdHRlbmBcbiAgICAgIC8vIHNldHRpbmcgYWxzbywgZm9yIGZsYXR0ZW5pbmcgYmVsb3cuXG4gICAgICBmbGF0dGVuLFxuICAgICAgbmVzdGVkLFxuICAgICAgcGFyYW1cbiAgICB9XG4gICAgY29uc3QgY2hpbGRSb3V0ZXMgPSBhd2FpdCBwcm9jZXNzRm9ybXMoYXBpLCBzY2hlbWEsIGxldmVsKVxuICAgIGlmIChwcm9jZXNzKSB7XG4gICAgICBhd2FpdCBwcm9jZXNzKGNoaWxkUm91dGVzLCBsZXZlbCArIDEpXG4gICAgfVxuICAgIC8vIElubGluZWQgZm9ybXMgZG9uJ3QgbmVlZCB0byBhY3R1YWxseSBhZGQgcm91dGVzLlxuICAgIGlmIChoYXNGb3JtU2NoZW1hKHNjaGVtYSkgJiYgIWlubGluZWQpIHtcbiAgICAgIC8vIExpc3RzIGluIHNpbmdsZS1jb21wb25lbnQtdmlld3MgKGxldmVsID09PSAwKSB1c2UgdGhlaXIgdmlldydzIHBhdGgsXG4gICAgICAvLyB3aGlsZSBhbGwgb3RoZXJzIG5lZWQgdGhlaXIgcGF0aCBwcmVmaXhlZCB3aXRoIHRoZSBwYXJlbnQncyBwYXRoOlxuICAgICAgY29uc3Qgc291cmNlUGF0aCA9IGxldmVsID09PSAwID8gJycgOiBzY2hlbWEucGF0aFxuICAgICAgY29uc3QgZm9ybVJvdXRlID0ge1xuICAgICAgICBwYXRoOiBnZXRQYXRoV2l0aFBhcmFtKFxuICAgICAgICAgIHNvdXJjZVBhdGgsXG4gICAgICAgICAgLy8gT2JqZWN0IHNvdXJjZXMgZG9uJ3QgbmVlZCBpZCBwYXJhbXMgaW4gdGhlaXIgZm9ybSBwYXRocywgYXMgdGhleVxuICAgICAgICAgIC8vIGRpcmVjdGx5IGVkaXQgb25lIG9iamVjdC5cbiAgICAgICAgICBpc0xpc3RTb3VyY2Uoc2NoZW1hKSA/IHBhcmFtIDogbnVsbFxuICAgICAgICApLFxuICAgICAgICBjb21wb25lbnQ6IERpdG9Db21wb25lbnQuY29tcG9uZW50KFxuICAgICAgICAgIG5lc3RlZCA/ICdEaXRvRm9ybU5lc3RlZCcgOiAnRGl0b0Zvcm0nXG4gICAgICAgICksXG4gICAgICAgIG1ldGE6IGZvcm1NZXRhXG4gICAgICB9XG4gICAgICBpZiAoaXNPYmplY3RTb3VyY2Uoc2NoZW1hKSkge1xuICAgICAgICAvLyBBbHNvIGFkZCBhIHBhcmFtIHJvdXRlLCBzaW1wbHkgdG8gaGFuZGxlICcvY3JlYXRlJyBsaW5rcyB0aGUgc2FtZVxuICAgICAgICAvLyB3YXkgdGhhdCBsaXN0cyBkbywgd2hlcmUgaXQgb3ZlcmxhcHMgd2l0aCA6aWQgZm9yIGl0ZW0gaWRzLlxuICAgICAgICByb3V0ZXMucHVzaCh7XG4gICAgICAgICAgLi4uZm9ybVJvdXRlLFxuICAgICAgICAgIHBhdGg6IGdldFBhdGhXaXRoUGFyYW0oc291cmNlUGF0aCwgcGFyYW0pXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgICBpZiAoc291cmNlUGF0aCkge1xuICAgICAgICAvLyBKdXN0IHJlZGlyZWN0IGJhY2sgdG8gdGhlIHBhcmVudCB3aGVuIGEgbmVzdGVkIHNvdXJjZSByb3V0ZSBpcyBoaXQuXG4gICAgICAgIHJvdXRlcy5wdXNoKHtcbiAgICAgICAgICBwYXRoOiBzb3VyY2VQYXRoLFxuICAgICAgICAgIHJlZGlyZWN0OiAnLicsXG4gICAgICAgICAgbWV0YVxuICAgICAgICB9KVxuICAgICAgfVxuICAgICAgLy8gUGFydGl0aW9uIGNoaWxkUm91dGVzIGludG8gdGhvc2UgdGhhdCBuZWVkIGZsYXR0ZW5pbmcgKGUuZy4gdHJlZS1saXN0cylcbiAgICAgIC8vIGFuZCB0aG9zZSB0aGF0IGRvbid0LCBhbmQgcHJvY2VzcyBlYWNoIGdyb3VwIHNlcGFyYXRlbHkgYWZ0ZXIuXG4gICAgICBjb25zdCBbZmxhdFJvdXRlcywgc3ViUm91dGVzXSA9IGNoaWxkUm91dGVzLnJlZHVjZShcbiAgICAgICAgKHJlcywgcm91dGUpID0+IHtcbiAgICAgICAgICByZXNbcm91dGUubWV0YS5mbGF0dGVuID8gMCA6IDFdLnB1c2gocm91dGUpXG4gICAgICAgICAgcmV0dXJuIHJlc1xuICAgICAgICB9LFxuICAgICAgICBbW10sIFtdXVxuICAgICAgKVxuICAgICAgaWYgKHN1YlJvdXRlcy5sZW5ndGgpIHtcbiAgICAgICAgZm9ybVJvdXRlLmNoaWxkcmVuID0gc3ViUm91dGVzXG4gICAgICB9XG4gICAgICByb3V0ZXMucHVzaChmb3JtUm91dGUpXG4gICAgICAvLyBBZGQgdGhlIHByZWZpeGVkIGZvcm1Sb3V0ZXMgd2l0aCB0aGVpciBjaGlsZHJlbiBmb3IgbmVzdGVkIGxpc3RzLlxuICAgICAgaWYgKGZsYXRSb3V0ZXMubGVuZ3RoKSB7XG4gICAgICAgIGZvciAoY29uc3QgY2hpbGRSb3V0ZSBvZiBmbGF0Um91dGVzKSB7XG4gICAgICAgICAgcm91dGVzLnB1c2goe1xuICAgICAgICAgICAgLi4uKGNoaWxkUm91dGUucmVkaXJlY3QgPyBjaGlsZFJvdXRlIDogZm9ybVJvdXRlKSxcbiAgICAgICAgICAgIHBhdGg6IGAke2Zvcm1Sb3V0ZS5wYXRofS8ke2NoaWxkUm91dGUucGF0aH1gLFxuICAgICAgICAgICAgbWV0YToge1xuICAgICAgICAgICAgICAuLi5jaGlsZFJvdXRlLm1ldGEsXG4gICAgICAgICAgICAgIGZsYXR0ZW5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIHByb2Nlc3NWYWx1ZShzY2hlbWEsIHZhbHVlLCBkYXRhUGF0aCwgZ3JhcGgpIHtcbiAgICBncmFwaC5hZGRTb3VyY2UoZGF0YVBhdGgsIHNjaGVtYSlcbiAgICByZXR1cm4gdmFsdWVcbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRQYXRoV2l0aFBhcmFtKHBhdGgsIHBhcmFtKSB7XG4gIHJldHVybiBwYXJhbVxuICAgID8gcGF0aFxuICAgICAgPyBgJHtwYXRofS86JHtwYXJhbX1gXG4gICAgICA6IGA6JHtwYXJhbX1gXG4gICAgOiBwYXRoXG59XG4iLCJpbXBvcnQgeyBpc0FycmF5LCBhc0FycmF5LCBsYWJlbGl6ZSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQgeyBnZXROYW1lZFNjaGVtYXMsIHByb2Nlc3NOZXN0ZWRTY2hlbWFEZWZhdWx0cyB9IGZyb20gJy4vc2NoZW1hJ1xuXG5leHBvcnQgY29uc3QgZmlsdGVyQ29tcG9uZW50cyA9IHtcbiAgJ3RleHQnKGZpbHRlcikge1xuICAgIGNvbnN0IG9wdGlvbnMgPSBbXG4gICAgICB7XG4gICAgICAgIGxhYmVsOiAnY29udGFpbnMnLFxuICAgICAgICB2YWx1ZTogJ2NvbnRhaW5zJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbGFiZWw6ICdlcXVhbHMnLFxuICAgICAgICB2YWx1ZTogJ2VxdWFscydcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGxhYmVsOiAnc3RhcnRzIHdpdGgnLFxuICAgICAgICB2YWx1ZTogJ3N0YXJ0cy13aXRoJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbGFiZWw6ICdlbmRzIHdpdGgnLFxuICAgICAgICB2YWx1ZTogJ2VuZHMtd2l0aCdcbiAgICAgIH1cbiAgICBdXG4gICAgcmV0dXJuIHtcbiAgICAgIG9wZXJhdG9yOiBmaWx0ZXIub3BlcmF0b3JzXG4gICAgICAgID8ge1xuICAgICAgICAgICAgdHlwZTogJ3NlbGVjdCcsXG4gICAgICAgICAgICB3aWR0aDogJzIvNScsXG4gICAgICAgICAgICBvcHRpb25zOiBpc0FycmF5KGZpbHRlci5vcGVyYXRvcnMpXG4gICAgICAgICAgICAgID8gb3B0aW9ucy5maWx0ZXIoXG4gICAgICAgICAgICAgICAgICBvcHRpb24gPT4gZmlsdGVyLm9wZXJhdG9ycy5pbmNsdWRlcyhvcHRpb24udmFsdWUpXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICA6IG9wdGlvbnMsXG4gICAgICAgICAgICBjbGVhcmFibGU6IHRydWVcbiAgICAgICAgICB9XG4gICAgICAgIDogbnVsbCxcbiAgICAgIHRleHQ6IHtcbiAgICAgICAgdHlwZTogJ3RleHQnLFxuICAgICAgICB3aWR0aDogZmlsdGVyLm9wZXJhdG9ycyA/ICczLzUnIDogJ2ZpbGwnLFxuICAgICAgICBjbGVhcmFibGU6IHRydWVcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgJ2RhdGUtcmFuZ2UnKCkge1xuICAgIGNvbnN0IGRhdGV0aW1lID0ge1xuICAgICAgdHlwZTogJ2RhdGV0aW1lJyxcbiAgICAgIHdpZHRoOiAnMS8yJyxcbiAgICAgIGZvcm1hdHM6IHtcbiAgICAgICAgLy8gVXNlIHNob3J0ZXIgZGF0ZSBmb3JtYXQgaW4gZGF0ZS1yYW5nZSBmaWx0ZXJzOlxuICAgICAgICBkYXRlOiB7XG4gICAgICAgICAgZGF5OiAnMi1kaWdpdCcsXG4gICAgICAgICAgbW9udGg6ICcyLWRpZ2l0JyxcbiAgICAgICAgICB5ZWFyOiAnbnVtZXJpYydcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIGNsZWFyYWJsZTogdHJ1ZVxuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgZnJvbTogZGF0ZXRpbWUsXG4gICAgICB0bzogZGF0ZXRpbWVcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUZpbHRlcnNQYW5lbChhcGksIGZpbHRlcnMsIGRhdGFQYXRoLCBxdWVyeSkge1xuICBjb25zdCB7IHN0aWNreSwgLi4uZmlsdGVyU2NoZW1hcyB9ID0gZmlsdGVyc1xuICBjb25zdCBwYW5lbCA9IHtcbiAgICB0eXBlOiAncGFuZWwnLFxuICAgIGxhYmVsOiAnRmlsdGVycycsXG4gICAgbmFtZTogJyRmaWx0ZXJzJyxcbiAgICAvLyBPdmVycmlkZSB0aGUgZGVmYXVsdCB2YWx1ZVxuICAgIGRpc2FibGVkOiBmYWxzZSxcbiAgICBzdGlja3ksXG5cbiAgICAvLyBOT1RFOiBPbiBwYW5lbHMsIHRoZSBkYXRhKCkgY2FsbGJhY2sgZG9lcyBzb21ldGhpbmcgZWxzZSB0aGFuIG9uIG5vcm1hbFxuICAgIC8vIHNjaGVtYTogSXQgcHJvZHVjZXMgdGhlIGBkYXRhYCBwcm9wZXJ0eSB0byBiZSBwYXNzZWQgdG8gdGhlIHBhbmVsJ3NcbiAgICAvLyBzY2hlbWEsIG5vdCB0aGUgZGF0YSB0byBiZSB1c2VkIGZvciB0aGUgcGFuZWwgY29tcG9uZW50IGRpcmVjdGx5LlxuICAgIGRhdGEoKSB7XG4gICAgICByZXR1cm4gcGFyc2VGaWx0ZXJzRGF0YShcbiAgICAgICAgcGFuZWwsXG4gICAgICAgIHF1ZXJ5LnZhbHVlXG4gICAgICApXG4gICAgfSxcblxuICAgIGNvbXBvbmVudHM6IGNyZWF0ZUZpbHRlcnNDb21wb25lbnRzKGZpbHRlclNjaGVtYXMpLFxuICAgIGJ1dHRvbnM6IGNyZWF0ZUZpbHRlcnNCdXR0b25zKGZhbHNlKSxcbiAgICBwYW5lbEJ1dHRvbnM6IGNyZWF0ZUZpbHRlcnNCdXR0b25zKHRydWUpLFxuXG4gICAgZXZlbnRzOiB7XG4gICAgICBjaGFuZ2UoKSB7XG4gICAgICAgIHRoaXMuYXBwbHlGaWx0ZXJzKClcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgY29tcHV0ZWQ6IHtcbiAgICAgIGZpbHRlcnMoKSB7XG4gICAgICAgIHJldHVybiBmb3JtYXRGaWx0ZXJzRGF0YSh0aGlzLnNjaGVtYSwgdGhpcy5kYXRhKVxuICAgICAgfSxcblxuICAgICAgaGFzRmlsdGVycygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZmlsdGVycy5sZW5ndGggPiAwXG4gICAgICB9XG4gICAgfSxcblxuICAgIG1ldGhvZHM6IHtcbiAgICAgIGFwcGx5RmlsdGVycygpIHtcbiAgICAgICAgcXVlcnkudmFsdWUgPSB7XG4gICAgICAgICAgLi4ucXVlcnkudmFsdWUsXG4gICAgICAgICAgZmlsdGVyOiB0aGlzLmZpbHRlcnMsXG4gICAgICAgICAgLy8gQ2xlYXIgcGFnaW5hdGlvbiB3aGVuIGFwcGx5aW5nIG9yIGNsZWFyaW5nIGZpbHRlcnM6XG4gICAgICAgICAgcGFnZTogdW5kZWZpbmVkXG4gICAgICAgIH1cbiAgICAgIH0sXG5cbiAgICAgIGNsZWFyRmlsdGVycygpIHtcbiAgICAgICAgdGhpcy5yZXNldERhdGEoKVxuICAgICAgICB0aGlzLmFwcGx5RmlsdGVycygpXG4gICAgICB9XG4gICAgfVxuICB9XG4gIHByb2Nlc3NOZXN0ZWRTY2hlbWFEZWZhdWx0cyhhcGksIHBhbmVsKVxuICByZXR1cm4gcGFuZWxcbn1cblxuZnVuY3Rpb24gY3JlYXRlRmlsdGVyc0J1dHRvbnMoc21hbGwpIHtcbiAgcmV0dXJuIHtcbiAgICBjbGVhcjoge1xuICAgICAgdHlwZTogJ2J1dHRvbicsXG4gICAgICB0ZXh0OiBzbWFsbCA/IG51bGwgOiAnQ2xlYXInLFxuICAgICAgZGlzYWJsZWQ6ICh7IHNjaGVtYUNvbXBvbmVudCB9KSA9PiAhc2NoZW1hQ29tcG9uZW50Lmhhc0ZpbHRlcnMsXG4gICAgICBldmVudHM6IHtcbiAgICAgICAgY2xpY2soeyBzY2hlbWFDb21wb25lbnQgfSkge1xuICAgICAgICAgIC8vIFNpbmNlIHBhbmVsIGJ1dHRvbnMgYXJlIG91dHNpZGUgb2YgdGhlIHNjaGVtYSwgd2UgbmVlZCB0byB1c2UgdGhlXG4gICAgICAgICAgLy8gc2NoZW1hIGNvbXBvbmVudCByZWNlaXZlZCBmcm9tIHRoZSBpbml0aWFsaXplIGV2ZW50IGJlbG93OlxuICAgICAgICAgIHNjaGVtYUNvbXBvbmVudC5jbGVhckZpbHRlcnMoKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIHN1Ym1pdDoge1xuICAgICAgdHlwZTogJ3N1Ym1pdCcsXG4gICAgICB0ZXh0OiBzbWFsbCA/IG51bGwgOiAnRmlsdGVyJyxcbiAgICAgIHZpc2libGU6ICFzbWFsbCxcbiAgICAgIGV2ZW50czoge1xuICAgICAgICBjbGljayh7IHNjaGVtYUNvbXBvbmVudCB9KSB7XG4gICAgICAgICAgc2NoZW1hQ29tcG9uZW50LmFwcGx5RmlsdGVycygpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0RGF0YU5hbWUoZmlsdGVyTmFtZSkge1xuICAvLyBQcmVmaXggZmlsdGVyIGRhdGEga2V5cyB3aXRoICckJyB0byBhdm9pZCBjb25mbGljdHMgd2l0aCBvdGhlciBkYXRhIGtleXM6XG4gIHJldHVybiBgJCR7ZmlsdGVyTmFtZX1gXG59XG5cbmZ1bmN0aW9uIGdldEZpbHRlck5hbWUoZGF0YU5hbWUpIHtcbiAgcmV0dXJuIGRhdGFOYW1lLnN0YXJ0c1dpdGgoJyQnKSA/IGRhdGFOYW1lLnNsaWNlKDEpIDogbnVsbFxufVxuXG5mdW5jdGlvbiBjcmVhdGVGaWx0ZXJzQ29tcG9uZW50cyhmaWx0ZXJzKSB7XG4gIGNvbnN0IGNvbXBzID0ge31cbiAgZm9yIChjb25zdCBmaWx0ZXIgb2YgT2JqZWN0LnZhbHVlcyhnZXROYW1lZFNjaGVtYXMoZmlsdGVycykgfHwge30pKSB7XG4gICAgLy8gU3VwcG9ydCBib3RoIGN1c3RvbSBmb3JtcyBhbmQgZGVmYXVsdCBmaWx0ZXIgY29tcG9uZW50cywgdGhyb3VnaCB0aGVcbiAgICAvLyBgZmlsdGVyQ29tcG9uZW50c2AgcmVnaXN0cnkuIEV2ZW4gZm9yIGRlZmF1bHQgZmlsdGVycywgc3RpbGwgdXNlIHRoZVxuICAgIC8vIHByb3BlcnRpZXMgaW4gYGZpbHRlcmAgYXMgdGhlIGJhc2UgZm9yIGBmb3JtYCwgc28gdGhpbmdzIGxpa2UgYGxhYmVsYFxuICAgIC8vIGNhbiBiZSBjaGFuZ2VkIG9uIHRoZSByZXN1bHRpbmcgZm9ybS5cbiAgICBjb25zdCB7IGZpbHRlcjogdHlwZSwgd2lkdGgsIC4uLmZvcm0gfSA9IGZpbHRlclxuICAgIGNvbnN0IGNvbXBvbmVudHMgPSB0eXBlXG4gICAgICA/IGZpbHRlckNvbXBvbmVudHNbdHlwZV0/LihmaWx0ZXIpXG4gICAgICA6IGZpbHRlci5jb21wb25lbnRzXG4gICAgaWYgKGNvbXBvbmVudHMpIHtcbiAgICAgIGZvcm0udHlwZSA9ICdmb3JtJ1xuICAgICAgZm9ybS5jb21wb25lbnRzID0ge31cbiAgICAgIC8vIENvbnZlcnQgbGFiZWxzIHRvIHBsYWNlaG9sZGVyczpcbiAgICAgIGZvciAoY29uc3QgW2tleSwgY29tcG9uZW50XSBvZiBPYmplY3QuZW50cmllcyhjb21wb25lbnRzKSkge1xuICAgICAgICBpZiAoY29tcG9uZW50KSB7XG4gICAgICAgICAgY29uc3QgbGFiZWwgPSBjb21wb25lbnQubGFiZWwgfHwgbGFiZWxpemUoY29tcG9uZW50Lm5hbWUgfHwga2V5KVxuICAgICAgICAgIGZvcm0uY29tcG9uZW50c1trZXldID0ge1xuICAgICAgICAgICAgLi4uY29tcG9uZW50LFxuICAgICAgICAgICAgbGFiZWw6IGZhbHNlLFxuICAgICAgICAgICAgcGxhY2Vob2xkZXI6IGxhYmVsXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBjb21wc1tnZXREYXRhTmFtZShmaWx0ZXIubmFtZSldID0ge1xuICAgICAgICBsYWJlbDogZm9ybS5sYWJlbCA/PyBsYWJlbGl6ZShmaWx0ZXIubmFtZSksXG4gICAgICAgIHR5cGU6ICdvYmplY3QnLFxuICAgICAgICB3aWR0aCxcbiAgICAgICAgZGVmYXVsdDogKCkgPT4gKHt9KSxcbiAgICAgICAgZm9ybSxcbiAgICAgICAgaW5saW5lZDogdHJ1ZVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBJbnZhbGlkIGZpbHRlciAnJHtmaWx0ZXIubmFtZX0nOiBVbmtub3duIGZpbHRlciB0eXBlICcke3R5cGV9Jy5gXG4gICAgICApXG4gICAgfVxuICB9XG4gIHJldHVybiBjb21wc1xufVxuXG5mdW5jdGlvbiBnZXRDb21wb25lbnRzRm9yRmlsdGVyKHNjaGVtYSwgZGF0YU5hbWUpIHtcbiAgY29uc3QgY29tcG9uZW50ID0gc2NoZW1hLmNvbXBvbmVudHNbZGF0YU5hbWVdXG4gIHJldHVybiBjb21wb25lbnQ/LmZvcm0/LmNvbXBvbmVudHNcbn1cblxuZnVuY3Rpb24gZm9ybWF0RmlsdGVyc0RhdGEoc2NoZW1hLCBkYXRhKSB7XG4gIGNvbnN0IGZpbHRlcnMgPSBbXVxuICBmb3IgKGNvbnN0IGRhdGFOYW1lIGluIGRhdGEpIHtcbiAgICBjb25zdCBlbnRyeSA9IGRhdGFbZGF0YU5hbWVdXG4gICAgaWYgKGVudHJ5KSB7XG4gICAgICAvLyBNYXAgY29tcG9uZW50cyBzZXF1ZW5jZSB0byBhcmd1bWVudHM6XG4gICAgICBjb25zdCBhcmdzID0gT2JqZWN0LmtleXMoXG4gICAgICAgIGdldENvbXBvbmVudHNGb3JGaWx0ZXIoc2NoZW1hLCBkYXRhTmFtZSlcbiAgICAgICkubWFwKFxuICAgICAgICBrZXkgPT4gZW50cnlba2V5XSA/PyBudWxsXG4gICAgICApXG4gICAgICAvLyBPbmx5IGFwcGx5IGZpbHRlciBpZiB0aGVyZSBhcmUgc29tZSBhcmd1bWVudHMgdGhhdCBhcmVuJ3QgbnVsbDpcbiAgICAgIGlmIChhcmdzLnNvbWUodmFsdWUgPT4gdmFsdWUgIT09IG51bGwpKSB7XG4gICAgICAgIGZpbHRlcnMucHVzaChcbiAgICAgICAgICBgJHtcbiAgICAgICAgICAgIGdldEZpbHRlck5hbWUoZGF0YU5hbWUpXG4gICAgICAgICAgfToke1xuICAgICAgICAgICAgYXJncy5tYXAoSlNPTi5zdHJpbmdpZnkpLmpvaW4oJywnKVxuICAgICAgICAgIH1gXG4gICAgICAgIClcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIGZpbHRlcnNcbn1cblxuZnVuY3Rpb24gcGFyc2VGaWx0ZXJzRGF0YShzY2hlbWEsIHF1ZXJ5KSB7XG4gIGNvbnN0IGZpbHRlcnMgPSB7fVxuICAvLyBTYW1lIGFzIEBkaXRvanMvc2VydmVyJ3MgUXVlcnlQYXJhbWV0ZXJzLmZpbHRlcjogVHJhbnNsYXRlIHRoZSBzdHJpbmcgZGF0YVxuICAvLyBmcm9tICRyb3V0ZS5xdWVyeSBiYWNrIHRvIHBhcmFtIGxpc3RzIHBlciBmaWx0ZXI6XG4gIGlmIChxdWVyeSkge1xuICAgIGZvciAoY29uc3QgZmlsdGVyIG9mIGFzQXJyYXkocXVlcnkuZmlsdGVyKSkge1xuICAgICAgY29uc3QgWywgZmlsdGVyTmFtZSwganNvbl0gPSBmaWx0ZXIubWF0Y2goL14oXFx3Kyk6KC4qKSQvKVxuICAgICAgdHJ5IHtcbiAgICAgICAgZmlsdGVyc1tmaWx0ZXJOYW1lXSA9IGFzQXJyYXkoSlNPTi5wYXJzZShgWyR7anNvbn1dYCkpXG4gICAgICB9IGNhdGNoIChlcnJvcikge31cbiAgICB9XG4gIH1cbiAgY29uc3QgZmlsdGVyc0RhdGEgPSB7fVxuICBmb3IgKGNvbnN0IGRhdGFOYW1lIGluIHNjaGVtYS5jb21wb25lbnRzKSB7XG4gICAgY29uc3QgZGF0YSA9IHt9XG4gICAgLy8gSWYgd2UgaGF2ZSByZXRyaWV2ZWQgcGFyYW1zIGZyb20gdGhlIHF1ZXJ5LCBmZXRjaCB0aGUgYXNzb2NpYXRlZFxuICAgIC8vIGZvcm0gY29tcG9uZW50cyBzbyB3ZSBjYW4gbWFwIHRoZSB2YWx1ZXMgYmFjayB0byBvYmplY3Qga2V5czpcbiAgICBjb25zdCBhcmdzID0gZmlsdGVyc1tnZXRGaWx0ZXJOYW1lKGRhdGFOYW1lKV1cbiAgICBpZiAoYXJncykge1xuICAgICAgY29uc3QgY29tcG9uZW50cyA9IGdldENvbXBvbmVudHNGb3JGaWx0ZXIoc2NoZW1hLCBkYXRhTmFtZSlcbiAgICAgIGlmIChjb21wb25lbnRzKSB7XG4gICAgICAgIGxldCBpbmRleCA9IDBcbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gY29tcG9uZW50cykge1xuICAgICAgICAgIGRhdGFba2V5XSA9IGFyZ3NbaW5kZXgrK11cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBmaWx0ZXJzRGF0YVtkYXRhTmFtZV0gPSBkYXRhXG4gIH1cbiAgcmV0dXJuIGZpbHRlcnNEYXRhXG59XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuLmRpdG8tbGlzdChcbiAgdi1pZj1cImlzUmVhZHlcIlxuICA6aWQ9XCJkYXRhUGF0aFwiXG4pXG4gIC5kaXRvLWxpc3RfX2hlYWRlcihcbiAgICB2LWlmPVwic2NvcGVzIHx8IGhhc1BhZ2luYXRpb25cIlxuICApXG4gICAgRGl0b1Njb3BlcyhcbiAgICAgIHYtaWY9XCJzY29wZXNcIlxuICAgICAgOnF1ZXJ5PVwicXVlcnlcIlxuICAgICAgOnNjb3Blcz1cInNjb3Blc1wiXG4gICAgKVxuICAgIC8vLSBXaGVuIHRoZXJlJ3Mgb25seSBwYWdpbmF0aW9uIHdpdGhvdXQgc2NvcGVzLCB3ZSBuZWVkIGEgZ29vZCBvbCcgc3BhY2VyXG4gICAgLy8tIGRpdiwgZm9yIHRoZSBsYXlvdXQgbm90IHRvIGJyZWFrLi4uXG4gICAgLmRpdG8tc3BhY2VyKFxuICAgICAgdi1lbHNlLWlmPVwiaGFzUGFnaW5hdGlvblwiXG4gICAgKVxuICAgIERpdG9QYWdpbmF0aW9uKFxuICAgICAgdi1pZj1cImhhc1BhZ2luYXRpb25cIlxuICAgICAgOnF1ZXJ5PVwicXVlcnlcIlxuICAgICAgOmxpbWl0PVwicGFnaW5hdGVcIlxuICAgICAgOnRvdGFsPVwidG90YWwgfHwgMFwiXG4gICAgKVxuICB0YWJsZS5kaXRvLXRhYmxlKFxuICAgIDpjbGFzcz1ge1xuICAgICAgJ2RpdG8tdGFibGUtc2VwYXJhdG9ycyc6IGlzSW5saW5lZCxcbiAgICAgICdkaXRvLXRhYmxlLWxhcmdlci1wYWRkaW5nJzogaGFzRWRpdEJ1dHRvbnMgJiYgIWlzSW5saW5lZCxcbiAgICAgICdkaXRvLXRhYmxlLWFsdGVybmF0ZS1jb2xvcnMnOiAhaXNJbmxpbmVkLFxuICAgICAgJ2RpdG8tdGFibGUtZXZlbi1jb3VudCc6IGhhc0V2ZW5Db3VudFxuICAgIH1gXG4gIClcbiAgICBEaXRvVGFibGVIZWFkKFxuICAgICAgdi1pZj1cImNvbHVtbnNcIlxuICAgICAgOnF1ZXJ5PVwicXVlcnlcIlxuICAgICAgOmNvbHVtbnM9XCJjb2x1bW5zXCJcbiAgICAgIDpoYXNFZGl0QnV0dG9ucz1cImhhc0VkaXRCdXR0b25zXCJcbiAgICApXG4gICAgRGl0b0RyYWdnYWJsZShcbiAgICAgIHRhZz1cInRib2R5XCJcbiAgICAgIDptb2RlbFZhbHVlPVwidXBkYXRlT3JkZXIoc291cmNlU2NoZW1hLCBsaXN0RGF0YSwgcGFnaW5hdGlvblJhbmdlKVwiXG4gICAgICA6b3B0aW9ucz1cImdldERyYWdnYWJsZU9wdGlvbnMoKVwiXG4gICAgICA6ZHJhZ2dhYmxlPVwiZHJhZ2dhYmxlXCJcbiAgICAgIEB1cGRhdGU6bW9kZWxWYWx1ZT1cInZhbHVlID0+IChsaXN0RGF0YSA9IHZhbHVlKVwiXG4gICAgKVxuICAgICAgdHIoXG4gICAgICAgIHYtZm9yPVwiKGl0ZW0sIGluZGV4KSBpbiBsaXN0RGF0YVwiXG4gICAgICAgIDppZD1cImdldERhdGFQYXRoKGluZGV4KVwiXG4gICAgICAgIDprZXk9XCJnZXRJdGVtVWlkKHNjaGVtYSwgaXRlbSlcIlxuICAgICAgKVxuICAgICAgICB0ZW1wbGF0ZShcbiAgICAgICAgICB2LWlmPVwiY29sdW1uc1wiXG4gICAgICAgIClcbiAgICAgICAgICB0ZW1wbGF0ZShcbiAgICAgICAgICAgIHYtZm9yPVwiY29sdW1uIGluIGNvbHVtbnNcIlxuICAgICAgICAgIClcbiAgICAgICAgICAgIERpdG9UYWJsZUNlbGwoXG4gICAgICAgICAgICAgIHYtaWY9XCJzaG91bGRSZW5kZXJTY2hlbWEoY29sdW1uKVwiXG4gICAgICAgICAgICAgIDprZXk9XCJjb2x1bW4ubmFtZVwiXG4gICAgICAgICAgICAgIDpjbGFzcz1cImdldENlbGxDbGFzcyhjb2x1bW4pXCJcbiAgICAgICAgICAgICAgOmNlbGw9XCJjb2x1bW5cIlxuICAgICAgICAgICAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICAgICAgICAgICAgOmRhdGFQYXRoPVwiZ2V0RGF0YVBhdGgoaW5kZXgpXCJcbiAgICAgICAgICAgICAgOmRhdGE9XCJpdGVtXCJcbiAgICAgICAgICAgICAgOm1ldGE9XCJuZXN0ZWRNZXRhXCJcbiAgICAgICAgICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgICAgICAgICAgICA6bmVzdGVkPVwiZmFsc2VcIlxuICAgICAgICAgICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZCB8fCBpc0xvYWRpbmdcIlxuICAgICAgICAgICAgKVxuICAgICAgICB0ZW1wbGF0ZShcbiAgICAgICAgICB2LWVsc2VcbiAgICAgICAgKVxuICAgICAgICAgIHRkXG4gICAgICAgICAgICBEaXRvU2NoZW1hSW5saW5lZChcbiAgICAgICAgICAgICAgdi1pZj1cImlzSW5saW5lZFwiXG4gICAgICAgICAgICAgIDpsYWJlbD1cImdldEl0ZW1MYWJlbChzY2hlbWEsIGl0ZW0sIHsgaW5kZXgsIGFzT2JqZWN0OiB0cnVlIH0pXCJcbiAgICAgICAgICAgICAgOnNjaGVtYT1cImdldEl0ZW1Gb3JtU2NoZW1hKHNjaGVtYSwgaXRlbSwgY29udGV4dClcIlxuICAgICAgICAgICAgICA6ZGF0YVBhdGg9XCJnZXREYXRhUGF0aChpbmRleClcIlxuICAgICAgICAgICAgICA6ZGF0YT1cIml0ZW1cIlxuICAgICAgICAgICAgICA6bWV0YT1cIm5lc3RlZE1ldGFcIlxuICAgICAgICAgICAgICA6c3RvcmU9XCJnZXRJdGVtU3RvcmUoc2NoZW1hLCBpdGVtLCBpbmRleClcIlxuICAgICAgICAgICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZCB8fCBpc0xvYWRpbmdcIlxuICAgICAgICAgICAgICA6Y29sbGFwc2VkPVwiY29sbGFwc2VkXCJcbiAgICAgICAgICAgICAgOmNvbGxhcHNpYmxlPVwiY29sbGFwc2libGVcIlxuICAgICAgICAgICAgICA6ZGVsZXRhYmxlPVwiZGVsZXRhYmxlXCJcbiAgICAgICAgICAgICAgOmRyYWdnYWJsZT1cImRyYWdnYWJsZVwiXG4gICAgICAgICAgICAgIDplZGl0YWJsZT1cImVkaXRhYmxlXCJcbiAgICAgICAgICAgICAgOmVkaXRQYXRoPVwiZ2V0RWRpdFBhdGgoaXRlbSwgaW5kZXgpXCJcbiAgICAgICAgICAgICAgQGRlbGV0ZT1cImRlbGV0ZUl0ZW0oaXRlbSwgaW5kZXgpXCJcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIGNvbXBvbmVudChcbiAgICAgICAgICAgICAgdi1lbHNlLWlmPVwic2NoZW1hLmNvbXBvbmVudFwiXG4gICAgICAgICAgICAgIDppcz1cInNjaGVtYS5jb21wb25lbnRcIlxuICAgICAgICAgICAgICA6ZGF0YVBhdGg9XCJnZXREYXRhUGF0aChpbmRleClcIlxuICAgICAgICAgICAgICA6ZGF0YT1cIml0ZW1cIlxuICAgICAgICAgICAgICA6bmVzdGVkPVwiZmFsc2VcIlxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgc3BhbihcbiAgICAgICAgICAgICAgdi1lbHNlLWlmPVwicmVuZGVyXCJcbiAgICAgICAgICAgICAgdi1odG1sPVwicmVuZGVyKGdldENvbnRleHQoaXRlbSwgaW5kZXgpKVwiXG4gICAgICAgICAgICApXG4gICAgICAgICAgICBzcGFuKFxuICAgICAgICAgICAgICB2LWVsc2VcbiAgICAgICAgICAgICAgdi1odG1sPVwiZ2V0SXRlbUxhYmVsKHNjaGVtYSwgaXRlbSwgeyBpbmRleCB9KVwiXG4gICAgICAgICAgICApXG4gICAgICAgIHRkLmRpdG8tY2VsbC1lZGl0LWJ1dHRvbnMoXG4gICAgICAgICAgdi1pZj1cImhhc0NlbGxFZGl0QnV0dG9uc1wiXG4gICAgICAgIClcbiAgICAgICAgICBEaXRvRWRpdEJ1dHRvbnMoXG4gICAgICAgICAgICA6c2NoZW1hPVwiZ2V0SXRlbUZvcm1TY2hlbWEoc2NoZW1hLCBpdGVtLCBjb250ZXh0KVwiXG4gICAgICAgICAgICA6ZGF0YVBhdGg9XCJnZXREYXRhUGF0aChpbmRleClcIlxuICAgICAgICAgICAgOmRhdGE9XCJpdGVtXCJcbiAgICAgICAgICAgIDptZXRhPVwibmVzdGVkTWV0YVwiXG4gICAgICAgICAgICA6c3RvcmU9XCJnZXRJdGVtU3RvcmUoc2NoZW1hLCBpdGVtLCBpbmRleClcIlxuICAgICAgICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWQgfHwgaXNMb2FkaW5nXCJcbiAgICAgICAgICAgIDpkZWxldGFibGU9XCJkZWxldGFibGVcIlxuICAgICAgICAgICAgOmRyYWdnYWJsZT1cImRyYWdnYWJsZVwiXG4gICAgICAgICAgICA6ZWRpdGFibGU9XCJlZGl0YWJsZVwiXG4gICAgICAgICAgICA6ZWRpdFBhdGg9XCJnZXRFZGl0UGF0aChpdGVtLCBpbmRleClcIlxuICAgICAgICAgICAgQGRlbGV0ZT1cImRlbGV0ZUl0ZW0oaXRlbSwgaW5kZXgpXCJcbiAgICAgICAgICApXG4gICAgLy8tIFJlbmRlciBjcmVhdGUgYnV0dG9ucyBpbnNpZGUgdGFibGUgd2hlbiBub3QgaW4gYSBzaW5nbGUgY29tcG9uZW50IHZpZXc6XG4gICAgdGZvb3QoXG4gICAgICB2LWlmPVwiaGFzTGlzdEJ1dHRvbnMgJiYgIXNpbmdsZVwiXG4gICAgKVxuICAgICAgdHJcbiAgICAgICAgdGQuZGl0by1jZWxsLWVkaXQtYnV0dG9ucyg6Y29sc3Bhbj1cIm51bUNvbHVtbnNcIilcbiAgICAgICAgICBEaXRvRWRpdEJ1dHRvbnMoXG4gICAgICAgICAgICA6YnV0dG9ucz1cImJ1dHRvblNjaGVtYXNcIlxuICAgICAgICAgICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgICAgICAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgICAgICAgICA6ZGF0YT1cImxpc3REYXRhXCJcbiAgICAgICAgICAgIDptZXRhPVwibWV0YVwiXG4gICAgICAgICAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgICAgICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZCB8fCBpc0xvYWRpbmdcIlxuICAgICAgICAgICAgOmNyZWF0YWJsZT1cImNyZWF0YWJsZVwiXG4gICAgICAgICAgICA6Y3JlYXRlUGF0aD1cInBhdGhcIlxuICAgICAgICAgIClcbiAgLy8tIFJlbmRlciBjcmVhdGUgYnV0dG9ucyBvdXRzaWRlIHRhYmxlIHdoZW4gaW4gYSBzaW5nbGUgY29tcG9uZW50IHZpZXc6XG4gIERpdG9FZGl0QnV0dG9ucy5kaXRvLWJ1dHRvbnMtbGFyZ2UuZGl0by1idXR0b25zLW1haW4uZGl0by1idXR0b25zLXN0aWNreShcbiAgICB2LWlmPVwiaGFzTGlzdEJ1dHRvbnMgJiYgc2luZ2xlXCJcbiAgICA6YnV0dG9ucz1cImJ1dHRvblNjaGVtYXNcIlxuICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICA6ZGF0YT1cImxpc3REYXRhXCJcbiAgICA6bWV0YT1cIm1ldGFcIlxuICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZCB8fCBpc0xvYWRpbmdcIlxuICAgIDpjcmVhdGFibGU9XCJjcmVhdGFibGVcIlxuICAgIDpjcmVhdGVQYXRoPVwicGF0aFwiXG4gIClcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b1R5cGVDb21wb25lbnQgZnJvbSAnLi4vRGl0b1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgRGl0b0NvbnRleHQgZnJvbSAnLi4vRGl0b0NvbnRleHQuanMnXG5pbXBvcnQgU291cmNlTWl4aW4gZnJvbSAnLi4vbWl4aW5zL1NvdXJjZU1peGluLmpzJ1xuaW1wb3J0IFNvcnRhYmxlTWl4aW4gZnJvbSAnLi4vbWl4aW5zL1NvcnRhYmxlTWl4aW4uanMnXG5pbXBvcnQge1xuICBnZXRWaWV3RWRpdFBhdGgsXG4gIHJlc29sdmVTY2hlbWFDb21wb25lbnQsXG4gIHJlc29sdmVTY2hlbWFDb21wb25lbnRzXG59IGZyb20gJy4uL3V0aWxzL3NjaGVtYS5qcydcbmltcG9ydCB7IGNyZWF0ZUZpbHRlcnNQYW5lbCB9IGZyb20gJy4uL3V0aWxzL2ZpbHRlci5qcydcbmltcG9ydCB7IGFwcGVuZERhdGFQYXRoIH0gZnJvbSAnLi4vdXRpbHMvZGF0YS5qcydcbmltcG9ydCB7IHBpY2tCeSwgZXF1YWxzLCBoeXBoZW5hdGUgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0IHsgY29tcHV0ZWQgfSBmcm9tICd2dWUnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvVHlwZUNvbXBvbmVudC5yZWdpc3RlcignbGlzdCcsIHtcbiAgbWl4aW5zOiBbU291cmNlTWl4aW4sIFNvcnRhYmxlTWl4aW5dLFxuXG4gIGdldFNvdXJjZVR5cGUodHlwZSkge1xuICAgIC8vIE5vIG5lZWQgZm9yIHRyYW5zZm9ybWF0aW9uIGhlcmUuIFNlZSBUeXBlVHJlZUxpc3QgZm9yIGRldGFpbHMuXG4gICAgcmV0dXJuIHR5cGVcbiAgfSxcblxuICBnZXRQYW5lbFNjaGVtYShhcGksIHNjaGVtYSwgZGF0YVBhdGgsIGNvbXBvbmVudCkge1xuICAgIGNvbnN0IHsgZmlsdGVycyB9ID0gc2NoZW1hXG4gICAgLy8gU2VlIGlmIHRoaXMgbGlzdCBjb21wb25lbnQgd2FudHMgdG8gZGlzcGxheSBhIGZpbHRlciBwYW5lbCwgYW5kIGlmIHNvLFxuICAgIC8vIGNyZWF0ZSB0aGUgcGFuZWwgc2NoZW1hIGZvciBpdCB0aHJvdWdoIGBnZXRGaWx0ZXJzUGFuZWwoKWAuXG4gICAgaWYgKGZpbHRlcnMpIHtcbiAgICAgIHJldHVybiBjcmVhdGVGaWx0ZXJzUGFuZWwoXG4gICAgICAgIGFwaSxcbiAgICAgICAgZmlsdGVycyxcbiAgICAgICAgZGF0YVBhdGgsXG4gICAgICAgIC8vIFBhc3MgYSBjb21wdXRlZCB2YWx1ZSB0byBnZXQgLyBzZXQgdGhlIHF1ZXJ5LCBzZWUgZ2V0RmlsdGVyc1BhbmVsKClcbiAgICAgICAgY29tcHV0ZWQoe1xuICAgICAgICAgIGdldCgpIHtcbiAgICAgICAgICAgIHJldHVybiBjb21wb25lbnQucXVlcnlcbiAgICAgICAgICB9LFxuXG4gICAgICAgICAgc2V0KHF1ZXJ5KSB7XG4gICAgICAgICAgICAvLyBGaWx0ZXIgb3V0IHVuZGVmaW5lZCB2YWx1ZXMgZm9yIGNvbXBhcmluZyB3aXRoIGVxdWFscygpXG4gICAgICAgICAgICBjb25zdCBmaWx0ZXIgPSBvYmogPT4gcGlja0J5KG9iaiwgdmFsdWUgPT4gdmFsdWUgIT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgIGlmICghZXF1YWxzKGZpbHRlcihxdWVyeSksIGZpbHRlcihjb21wb25lbnQucXVlcnkpKSkge1xuICAgICAgICAgICAgICBjb21wb25lbnQucXVlcnkgPSBxdWVyeVxuICAgICAgICAgICAgICBjb21wb25lbnQubG9hZERhdGEoZmFsc2UpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgKVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIGhhc1BhZ2luYXRpb24oKSB7XG4gICAgICByZXR1cm4gISF0aGlzLnBhZ2luYXRlXG4gICAgfSxcblxuICAgIGhhc0xpc3RCdXR0b25zKCkge1xuICAgICAgcmV0dXJuICEhKHRoaXMuYnV0dG9uU2NoZW1hcyB8fCB0aGlzLmNyZWF0YWJsZSlcbiAgICB9LFxuXG4gICAgaGFzRWRpdEJ1dHRvbnMoKSB7XG4gICAgICBjb25zdCB7IGxpc3REYXRhIH0gPSB0aGlzXG4gICAgICByZXR1cm4gKFxuICAgICAgICBsaXN0RGF0YS5sZW5ndGggPiAwICYmIChcbiAgICAgICAgICB0aGlzLmVkaXRhYmxlIHx8XG4gICAgICAgICAgdGhpcy5kZWxldGFibGUgfHxcbiAgICAgICAgICB0aGlzLmRyYWdnYWJsZVxuICAgICAgICApXG4gICAgICApXG4gICAgfSxcblxuICAgIGhhc0NlbGxFZGl0QnV0dG9ucygpIHtcbiAgICAgIHJldHVybiAhdGhpcy5pc0lubGluZWQgJiYgdGhpcy5oYXNFZGl0QnV0dG9uc1xuICAgIH0sXG5cbiAgICBoYXNFdmVuQ291bnQoKSB7XG4gICAgICByZXR1cm4gISh0aGlzLmxpc3REYXRhLmxlbmd0aCAlIDIpXG4gICAgfSxcblxuICAgIG51bUNvbHVtbnMoKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICAodGhpcy5jb2x1bW5zID8gT2JqZWN0LmtleXModGhpcy5jb2x1bW5zKS5sZW5ndGggOiAxKSArXG4gICAgICAgICh0aGlzLmhhc0NlbGxFZGl0QnV0dG9ucyA/IDEgOiAwKVxuICAgICAgKVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZ2V0RGF0YVBhdGgoaW5kZXgpIHtcbiAgICAgIHJldHVybiBhcHBlbmREYXRhUGF0aCh0aGlzLmRhdGFQYXRoLCBpbmRleClcbiAgICB9LFxuXG4gICAgZ2V0RWRpdFBhdGgoaXRlbSwgaW5kZXgpIHtcbiAgICAgIGlmICh0aGlzLmVkaXRhYmxlKSB7XG4gICAgICAgIGNvbnN0IGlkID0gdGhpcy5nZXRJdGVtSWQodGhpcy5zY2hlbWEsIGl0ZW0sIGluZGV4KVxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIGdldFZpZXdFZGl0UGF0aCh0aGlzLnNjaGVtYSwgaWQsIHRoaXMuY29udGV4dCkgfHxcbiAgICAgICAgICBgJHt0aGlzLnBhdGh9LyR7aWR9YFxuICAgICAgICApXG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbFxuICAgIH0sXG5cbiAgICBnZXRDZWxsQ2xhc3MoY29sdW1uKSB7XG4gICAgICByZXR1cm4gYGRpdG8tY2VsbC0ke2h5cGhlbmF0ZShjb2x1bW4ubmFtZSl9YFxuICAgIH0sXG5cbiAgICBnZXRDb250ZXh0KGl0ZW0sIGluZGV4KSB7XG4gICAgICByZXR1cm4gbmV3IERpdG9Db250ZXh0KHRoaXMsIHtcbiAgICAgICAgZGF0YTogaXRlbSxcbiAgICAgICAgdmFsdWU6IGl0ZW0sXG4gICAgICAgIGluZGV4LFxuICAgICAgICBkYXRhUGF0aDogdGhpcy5nZXREYXRhUGF0aChpbmRleClcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIG9uRmlsdGVyRXJyb3JzKGVycm9ycykge1xuICAgICAgY29uc3QgZmlsdGVyc0RhdGFQYXRoID0gYXBwZW5kRGF0YVBhdGgodGhpcy5kYXRhUGF0aCwgJyRmaWx0ZXJzJylcbiAgICAgIGNvbnN0IHBhbmVsID0gdGhpcy5zY2hlbWFDb21wb25lbnQuZ2V0UGFuZWxCeURhdGFQYXRoKGZpbHRlcnNEYXRhUGF0aClcbiAgICAgIGlmIChwYW5lbCkge1xuICAgICAgICBwYW5lbC5zaG93VmFsaWRhdGlvbkVycm9ycyhlcnJvcnMsIHRydWUpXG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIGFzeW5jIHByb2Nlc3NTY2hlbWEoXG4gICAgYXBpLFxuICAgIHNjaGVtYSxcbiAgICBuYW1lLFxuICAgIHJvdXRlcyxcbiAgICBsZXZlbCxcbiAgICBuZXN0ZWQgPSBmYWxzZSxcbiAgICBmbGF0dGVuID0gZmFsc2UsXG4gICAgcHJvY2VzcyA9IG51bGxcbiAgKSB7XG4gICAgYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgICAgcmVzb2x2ZVNjaGVtYUNvbXBvbmVudChzY2hlbWEpLFxuICAgICAgcmVzb2x2ZVNjaGVtYUNvbXBvbmVudHMoc2NoZW1hLmNvbHVtbnMpLFxuICAgICAgU291cmNlTWl4aW4ucHJvY2Vzc1NjaGVtYShcbiAgICAgICAgYXBpLFxuICAgICAgICBzY2hlbWEsXG4gICAgICAgIG5hbWUsXG4gICAgICAgIHJvdXRlcyxcbiAgICAgICAgbGV2ZWwsXG4gICAgICAgIG5lc3RlZCxcbiAgICAgICAgZmxhdHRlbixcbiAgICAgICAgcHJvY2Vzc1xuICAgICAgKVxuICAgIF0pXG4gIH1cbn0pXG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by1saXN0IHtcbiAgJHNlbGY6ICY7XG5cbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuXG4gICZfX2hlYWRlciB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gICAgcGFkZGluZy1ib3R0b206ICRjb250ZW50LXBhZGRpbmctaGFsZjtcbiAgICBAaW5jbHVkZSB1c2VyLXNlbGVjdChub25lKTtcblxuICAgICY6ZW1wdHkge1xuICAgICAgZGlzcGxheTogbm9uZTtcbiAgICB9XG5cbiAgICAuZGl0by1zY29wZXMsXG4gICAgLmRpdG8tcGFnaW5hdGlvbiB7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgZmxleDogMCAxIGF1dG87XG4gICAgICBtaW4td2lkdGg6IDA7XG4gICAgfVxuICB9XG5cbiAgJi5kaXRvLXNpbmdsZSB7XG4gICAgLy8gU28gdGhhdCBsaXN0IGJ1dHRvbnMgY2FuIGJlIHN0aWNreSB0byB0aGUgYm90dG9tOlxuICAgIGRpc3BsYXk6IGdyaWQ7XG4gICAgZ3JpZC10ZW1wbGF0ZS1yb3dzOiBtaW4tY29udGVudDtcbiAgICBoZWlnaHQ6IDEwMCU7XG5cbiAgICAvLyBNYWtlIHNpbmdsZSBsaXN0IGhlYWRlciwgbmF2aWdhdGlvbiBhbmQgYnV0dG9ucyBzdGlja3kgdG8gdGhlIHRvcCBhbmRcbiAgICAvLyBib3R0b206XG4gICAgI3skc2VsZn1fX2hlYWRlciB7XG4gICAgICBwb3NpdGlvbjogc3RpY2t5O1xuICAgICAgdG9wOiAwO1xuICAgICAgbWFyZ2luLXRvcDogLSRjb250ZW50LXBhZGRpbmc7XG4gICAgICBwYWRkaW5nLXRvcDogJGNvbnRlbnQtcGFkZGluZztcbiAgICAgIGJhY2tncm91bmQ6ICRjb250ZW50LWNvbG9yLWJhY2tncm91bmQ7XG4gICAgICB6LWluZGV4OiAxO1xuXG4gICAgICArIC5kaXRvLXRhYmxlIHtcbiAgICAgICAgLmRpdG8tdGFibGUtaGVhZCB7XG4gICAgICAgICAgcG9zaXRpb246IHN0aWNreTtcbiAgICAgICAgICB0b3A6IGNhbGMoJGlucHV0LWhlaWdodCArICRjb250ZW50LXBhZGRpbmcgKyAkY29udGVudC1wYWRkaW5nLWhhbGYpO1xuICAgICAgICAgIGJhY2tncm91bmQ6ICRjb250ZW50LWNvbG9yLWJhY2tncm91bmQ7XG4gICAgICAgICAgei1pbmRleDogMTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG5EaXRvTGFiZWwuZGl0by1sYWJlbC1jb21wb25lbnQoXG4gIDpsYWJlbD1cInZhbHVlXCJcbiAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvVHlwZUNvbXBvbmVudCBmcm9tICcuLi9EaXRvVHlwZUNvbXBvbmVudC5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9UeXBlQ29tcG9uZW50LnJlZ2lzdGVyKCdsYWJlbCcsIHtcbiAgZXhjbHVkZVZhbHVlOiB0cnVlLFxuICBnZW5lcmF0ZUxhYmVsOiBmYWxzZVxufSlcbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbi5kaXRvLWxhYmVsLWNvbXBvbmVudCB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGhlaWdodDogMmVtO1xufVxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4uZGl0by1tYXJrdXAoOmlkPVwiZGF0YVBhdGhcIilcbiAgLmRpdG8tYnV0dG9ucy5kaXRvLWJ1dHRvbnMtdG9vbGJhcihcbiAgICB2LWlmPVwiZ3JvdXBlZEJ1dHRvbnMubGVuZ3RoID4gMFwiXG4gIClcbiAgICAuZGl0by1idXR0b24tZ3JvdXAoXG4gICAgICB2LWZvcj1cImJ1dHRvbnMgaW4gZ3JvdXBlZEJ1dHRvbnNcIlxuICAgIClcbiAgICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbihcbiAgICAgICAgdi1mb3I9XCJ7IG5hbWUsIGljb24sIGlzQWN0aXZlLCBvbkNsaWNrIH0gaW4gYnV0dG9uc1wiXG4gICAgICAgIDprZXk9XCJuYW1lXCJcbiAgICAgICAgOmNsYXNzPVwieyAnZGl0by1hY3RpdmUnOiBpc0FjdGl2ZSB9XCJcbiAgICAgICAgQGNsaWNrPVwib25DbGlja1wiXG4gICAgICApXG4gICAgICAgIEljb24oOm5hbWU9XCJpY29uXCIpXG4gIEVkaXRvckNvbnRlbnQuZGl0by1tYXJrdXAtZWRpdG9yKFxuICAgIHJlZj1cImVkaXRvclwiXG4gICAgOmVkaXRvcj1cImVkaXRvclwiXG4gICAgOnN0eWxlPVwic3R5bGVzXCJcbiAgKVxuICAuZGl0by1yZXNpemUoXG4gICAgdi1pZj1cInJlc2l6YWJsZVwiXG4gICAgQG1vdXNlZG93bi5zdG9wLnByZXZlbnQ9XCJvbkRyYWdSZXNpemVcIlxuICApXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9UeXBlQ29tcG9uZW50IGZyb20gJy4uL0RpdG9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IERvbU1peGluIGZyb20gJy4uL21peGlucy9Eb21NaXhpbi5qcydcbmltcG9ydCB7IGdldFNjaGVtYUFjY2Vzc29yIH0gZnJvbSAnLi4vdXRpbHMvYWNjZXNzb3IuanMnXG5pbXBvcnQgeyBFZGl0b3IsIEVkaXRvckNvbnRlbnQsIE1hcmssIGdldE1hcmtBdHRyaWJ1dGVzIH0gZnJvbSAnQHRpcHRhcC92dWUtMydcbi8vIGltcG9ydCB7IHRvZ2dsZU1hcmsgfSBmcm9tICd0aXB0YXAtY29tbWFuZHMnXG4vLyBFc3NlbnRpYWxzOlxuaW1wb3J0IHsgRG9jdW1lbnQgfSBmcm9tICdAdGlwdGFwL2V4dGVuc2lvbi1kb2N1bWVudCdcbmltcG9ydCB7IFRleHQgfSBmcm9tICdAdGlwdGFwL2V4dGVuc2lvbi10ZXh0J1xuLy8gTWFya3M6XG5pbXBvcnQgeyBCb2xkIH0gZnJvbSAnQHRpcHRhcC9leHRlbnNpb24tYm9sZCdcbmltcG9ydCB7IENvZGUgfSBmcm9tICdAdGlwdGFwL2V4dGVuc2lvbi1jb2RlJ1xuaW1wb3J0IHsgSXRhbGljIH0gZnJvbSAnQHRpcHRhcC9leHRlbnNpb24taXRhbGljJ1xuaW1wb3J0IHsgTGluayB9IGZyb20gJ0B0aXB0YXAvZXh0ZW5zaW9uLWxpbmsnXG5pbXBvcnQgeyBTdHJpa2UgfSBmcm9tICdAdGlwdGFwL2V4dGVuc2lvbi1zdHJpa2UnXG5pbXBvcnQgeyBVbmRlcmxpbmUgfSBmcm9tICdAdGlwdGFwL2V4dGVuc2lvbi11bmRlcmxpbmUnXG4vLyBOb2RlczpcbmltcG9ydCB7IEJsb2NrcXVvdGUgfSBmcm9tICdAdGlwdGFwL2V4dGVuc2lvbi1ibG9ja3F1b3RlJ1xuaW1wb3J0IHsgQ29kZUJsb2NrIH0gZnJvbSAnQHRpcHRhcC9leHRlbnNpb24tY29kZS1ibG9jaydcbmltcG9ydCB7IEhhcmRCcmVhayB9IGZyb20gJ0B0aXB0YXAvZXh0ZW5zaW9uLWhhcmQtYnJlYWsnXG5pbXBvcnQgeyBIZWFkaW5nIH0gZnJvbSAnQHRpcHRhcC9leHRlbnNpb24taGVhZGluZydcbmltcG9ydCB7IFBhcmFncmFwaCB9IGZyb20gJ0B0aXB0YXAvZXh0ZW5zaW9uLXBhcmFncmFwaCdcbmltcG9ydCB7IEhvcml6b250YWxSdWxlIH0gZnJvbSAnQHRpcHRhcC9leHRlbnNpb24taG9yaXpvbnRhbC1ydWxlJ1xuaW1wb3J0IHsgT3JkZXJlZExpc3QgfSBmcm9tICdAdGlwdGFwL2V4dGVuc2lvbi1vcmRlcmVkLWxpc3QnXG5pbXBvcnQgeyBCdWxsZXRMaXN0IH0gZnJvbSAnQHRpcHRhcC9leHRlbnNpb24tYnVsbGV0LWxpc3QnXG5pbXBvcnQgeyBMaXN0SXRlbSB9IGZyb20gJ0B0aXB0YXAvZXh0ZW5zaW9uLWxpc3QtaXRlbSdcbi8vIFRPRE86XG4vLyBpbXBvcnQgeyBJbWFnZSB9IGZyb20gJ0B0aXB0YXAvZXh0ZW5zaW9uLWltYWdlJ1xuLy8gaW1wb3J0IHsgTWVudGlvbiB9IGZyb20gJ0B0aXB0YXAvZXh0ZW5zaW9uLW1lbnRpb24nXG4vLyBpbXBvcnQgeyBDb2RlQmxvY2tIaWdobGlnaHQgfSBmcm9tICdAdGlwdGFwL2V4dGVuc2lvbi1jb2RlLWJsb2NrLWhpZ2hsaWdodCdcbi8vIGltcG9ydCB7IFRhYmxlIH0gZnJvbSAnQHRpcHRhcC9leHRlbnNpb24tdGFibGUnXG4vLyBpbXBvcnQgeyBUYWJsZUNlbGwgfSBmcm9tICdAdGlwdGFwL2V4dGVuc2lvbi10YWJsZS1jZWxsJ1xuLy8gaW1wb3J0IHsgVGFibGVIZWFkZXIgfSBmcm9tICdAdGlwdGFwL2V4dGVuc2lvbi10YWJsZS1oZWFkZXInXG4vLyBpbXBvcnQgeyBUYWJsZU5vZGVzIH0gZnJvbSAnQHRpcHRhcC9leHRlbnNpb24tdGFibGUtbm9kZXMnXG4vLyBpbXBvcnQgeyBUYWJsZVJvdyB9IGZyb20gJ0B0aXB0YXAvZXh0ZW5zaW9uLXRhYmxlLXJvdydcbi8vIGltcG9ydCB7IFRhc2tMaXN0IH0gZnJvbSAnQHRpcHRhcC9leHRlbnNpb24tdGFzay1saXN0J1xuLy8gaW1wb3J0IHsgVGFza0l0ZW0gfSBmcm9tICdAdGlwdGFwL2V4dGVuc2lvbi10YXNrLWl0ZW0nXG4vLyBUb29sczpcbmltcG9ydCB7IEhpc3RvcnkgfSBmcm9tICdAdGlwdGFwL2V4dGVuc2lvbi1oaXN0b3J5J1xuXG5pbXBvcnQgeyBJY29uIH0gZnJvbSAnQGRpdG9qcy91aS9zcmMnXG5pbXBvcnQgeyBpc0FycmF5LCBpc09iamVjdCwgaHlwaGVuYXRlLCBkZWJvdW5jZSwgY2FtZWxpemUgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b1R5cGVDb21wb25lbnQucmVnaXN0ZXIoJ21hcmt1cCcsIHtcbiAgbWl4aW5zOiBbRG9tTWl4aW5dLFxuICBjb21wb25lbnRzOiB7XG4gICAgRWRpdG9yQ29udGVudCxcbiAgICBJY29uXG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgZWRpdG9yOiBudWxsLFxuICAgICAgaGVpZ2h0OiBudWxsXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgbGluZXMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWEubGluZXMgfHwgMTBcbiAgICB9LFxuXG4gICAgc3R5bGVzKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaGVpZ2h0OiB0aGlzLmhlaWdodCB8fCBgY2FsYygke3RoaXMubGluZXN9ZW0gKiB2YXIoLS1saW5lLWhlaWdodCkpYFxuICAgICAgfVxuICAgIH0sXG5cbiAgICBtYXJrQnV0dG9ucygpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldEJ1dHRvbnMoJ21hcmtzJywge1xuICAgICAgICBib2xkOiB0cnVlLFxuICAgICAgICBpdGFsaWM6IHRydWUsXG4gICAgICAgIHVuZGVybGluZTogdHJ1ZSxcbiAgICAgICAgc3RyaWtlOiB0cnVlLFxuICAgICAgICBzbWFsbDogdHJ1ZSxcbiAgICAgICAgY29kZTogdHJ1ZSxcbiAgICAgICAgbGluazoge1xuICAgICAgICAgIG9uQ2xpY2s6IGVkaXRvciA9PiB0aGlzLm9uQ2xpY2tMaW5rKGVkaXRvcilcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYmFzaWNOb2RlQnV0dG9ucygpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldEJ1dHRvbnMoJ25vZGVzJywge1xuICAgICAgICBwYXJhZ3JhcGg6IHtcbiAgICAgICAgICBjb21tYW5kOiAnc2V0UGFyYWdyYXBoJ1xuICAgICAgICB9LFxuICAgICAgICBoZWFkaW5nOiB7XG4gICAgICAgICAgYXR0cmlidXRlOiAnbGV2ZWwnLFxuICAgICAgICAgIHZhbHVlczogWzEsIDIsIDMsIDQsIDUsIDZdXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFkdmFuY2VkTm9kZUJ1dHRvbnMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRCdXR0b25zKCdub2RlcycsIHtcbiAgICAgICAgYnVsbGV0TGlzdDogdHJ1ZSxcbiAgICAgICAgb3JkZXJlZExpc3Q6IHRydWUsXG4gICAgICAgIGJsb2NrcXVvdGU6IHRydWUsXG4gICAgICAgIGNvZGVCbG9jazogdHJ1ZVxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgdG9vbEJ1dHRvbnMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRCdXR0b25zKCd0b29scycsIHtcbiAgICAgICAgdW5kbzogdHJ1ZSxcbiAgICAgICAgcmVkbzogdHJ1ZVxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgZ3JvdXBlZEJ1dHRvbnMoKSB7XG4gICAgICByZXR1cm4gW1xuICAgICAgICB0aGlzLm1hcmtCdXR0b25zLFxuICAgICAgICB0aGlzLmJhc2ljTm9kZUJ1dHRvbnMsXG4gICAgICAgIHRoaXMuYWR2YW5jZWROb2RlQnV0dG9ucyxcbiAgICAgICAgdGhpcy50b29sQnV0dG9uc1xuICAgICAgXS5maWx0ZXIoYnV0dG9ucyA9PiBidXR0b25zLmxlbmd0aCA+IDApXG4gICAgfSxcblxuICAgIHBhcnNlT3B0aW9ucygpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHByZXNlcnZlV2hpdGVzcGFjZToge1xuICAgICAgICAgICdjb2xsYXBzZSc6IGZhbHNlLFxuICAgICAgICAgICdwcmVzZXJ2ZSc6IHRydWUsXG4gICAgICAgICAgJ3ByZXNlcnZlLWFsbCc6ICdmdWxsJ1xuICAgICAgICB9W3RoaXMud2hpdGVzcGFjZV1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZWRpdG9yT3B0aW9ucygpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGVkaXRhYmxlOiAhdGhpcy5yZWFkeW9ubHksXG4gICAgICAgIGF1dG9Gb2N1czogdGhpcy5hdXRvZm9jdXMsXG4gICAgICAgIGRpc2FibGVJbnB1dFJ1bGVzOiAhdGhpcy5lbmFibGVSdWxlcy5pbnB1dCxcbiAgICAgICAgZGlzYWJsZVBhc3RlUnVsZXM6ICF0aGlzLmVuYWJsZVJ1bGVzLnBhc3RlLFxuICAgICAgICBwYXJzZU9wdGlvbnM6IHRoaXMucGFyc2VPcHRpb25zXG4gICAgICB9XG4gICAgfSxcblxuICAgIHJlc2l6YWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ3Jlc2l6YWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0pLFxuXG4gICAgd2hpdGVzcGFjZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ3doaXRlc3BhY2UnLCB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBkZWZhdWx0OiAnY29sbGFwc2UnXG4gICAgICAvLyBQb3NzaWJsZSB2YWx1ZXMgYXJlOiAnY29sbGFwc2UnLCAncHJlc2VydmUnLCAncHJlc2VydmUtYWxsJ1xuICAgIH0pLFxuXG4gICAgZW5hYmxlUnVsZXM6IGdldFNjaGVtYUFjY2Vzc29yKCdlbmFibGVSdWxlcycsIHtcbiAgICAgIHR5cGU6IFtPYmplY3QsIEJvb2xlYW5dLFxuICAgICAgZGVmYXVsdDogZmFsc2UsXG4gICAgICBnZXQoZW5hYmxlUnVsZXMpIHtcbiAgICAgICAgcmV0dXJuIGlzT2JqZWN0KGVuYWJsZVJ1bGVzKVxuICAgICAgICAgID8gZW5hYmxlUnVsZXNcbiAgICAgICAgICA6IHtcbiAgICAgICAgICAgICAgaW5wdXQ6ICEhZW5hYmxlUnVsZXMsXG4gICAgICAgICAgICAgIHBhc3RlOiAhIWVuYWJsZVJ1bGVzXG4gICAgICAgICAgICB9XG4gICAgICB9XG4gICAgfSlcbiAgfSxcblxuICB3YXRjaDoge1xuICAgIHJlYWR5b25seTogJ3VwZGF0ZUVkaXRvck9wdGlvbnMnLFxuICAgIGF1dG9mb2N1czogJ3VwZGF0ZUVkaXRvck9wdGlvbnMnLFxuICAgIGVuYWJsZVJ1bGVzOiAndXBkYXRlRWRpdG9yT3B0aW9ucydcbiAgfSxcblxuICBjcmVhdGVkKCkge1xuICAgIGxldCBjaGFuZ2VkID0gZmFsc2VcbiAgICBsZXQgaWdub3JlV2F0Y2ggPSBmYWxzZVxuXG4gICAgY29uc3Qgb25DaGFuZ2UgPSAoKSA9PiB7XG4gICAgICBpZiAoIXRoaXMuZm9jdXNlZCAmJiBjaGFuZ2VkKSB7XG4gICAgICAgIGNoYW5nZWQgPSBmYWxzZVxuICAgICAgICB0aGlzLm9uQ2hhbmdlKClcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBvbkZvY3VzID0gKCkgPT4gdGhpcy5vbkZvY3VzKClcblxuICAgIGNvbnN0IG9uQmx1ciA9ICgpID0+IHtcbiAgICAgIHRoaXMub25CbHVyKClcbiAgICAgIG9uQ2hhbmdlKClcbiAgICB9XG5cbiAgICBjb25zdCBzZXRWYWx1ZURlYm91bmNlZCA9IGRlYm91bmNlKGVkaXRvciA9PiB7XG4gICAgICBpZ25vcmVXYXRjaCA9IHRydWVcbiAgICAgIHRoaXMudmFsdWUgPSBlZGl0b3IuZ2V0SFRNTCgpXG4gICAgICBjaGFuZ2VkID0gdHJ1ZVxuICAgICAgb25DaGFuZ2UoKVxuICAgIH0sIDEwMClcblxuICAgIGNvbnN0IG9uVXBkYXRlID0gKHsgZWRpdG9yIH0pID0+IHtcbiAgICAgIHNldFZhbHVlRGVib3VuY2VkKGVkaXRvcilcbiAgICAgIHRoaXMub25JbnB1dCgpXG4gICAgfVxuXG4gICAgdGhpcy4kd2F0Y2goJ3ZhbHVlJywgdmFsdWUgPT4ge1xuICAgICAgaWYgKGlnbm9yZVdhdGNoKSB7XG4gICAgICAgIGlnbm9yZVdhdGNoID0gZmFsc2VcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuZWRpdG9yLmNvbW1hbmRzLnNldENvbnRlbnQodmFsdWUsIGZhbHNlLCB0aGlzLnBhcnNlT3B0aW9ucylcbiAgICAgIH1cbiAgICB9KVxuXG4gICAgdGhpcy5lZGl0b3IgPSBuZXcgRWRpdG9yKHtcbiAgICAgIC4uLnRoaXMuZWRpdG9yT3B0aW9ucyxcbiAgICAgIG9uRm9jdXMsXG4gICAgICBvbkJsdXIsXG4gICAgICBvblVwZGF0ZSxcbiAgICAgIGV4dGVuc2lvbnM6IHRoaXMuZ2V0RXh0ZW5zaW9ucygpLFxuICAgICAgY29udGVudDogdGhpcy52YWx1ZSB8fCAnJ1xuICAgIH0pXG4gIH0sXG5cbiAgdW5tb3VudGVkKCkge1xuICAgIHRoaXMuZWRpdG9yLmRlc3Ryb3koKVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBvbkRyYWdSZXNpemUoZXZlbnQpIHtcbiAgICAgIGNvbnN0IGdldFBvaW50ID0gKHsgY2xpZW50WDogeCwgY2xpZW50WTogeSB9KSA9PiAoeyB4LCB5IH0pXG5cbiAgICAgIGxldCBwcmV2WSA9IGdldFBvaW50KGV2ZW50KS55XG4gICAgICBsZXQgaGVpZ2h0ID0gcGFyc2VGbG9hdChnZXRDb21wdXRlZFN0eWxlKHRoaXMuJHJlZnMuZWRpdG9yLiRlbCkuaGVpZ2h0KVxuXG4gICAgICBjb25zdCBtb3VzZW1vdmUgPSBldmVudCA9PiB7XG4gICAgICAgIGNvbnN0IHsgeSB9ID0gZ2V0UG9pbnQoZXZlbnQpXG4gICAgICAgIGhlaWdodCArPSB5IC0gcHJldllcbiAgICAgICAgcHJldlkgPSB5XG4gICAgICAgIHRoaXMuaGVpZ2h0ID0gYCR7TWF0aC5tYXgoaGVpZ2h0LCAwKX1weGBcbiAgICAgIH1cblxuICAgICAgY29uc3QgaGFuZGxlcnMgPSB0aGlzLmRvbU9uKGRvY3VtZW50LCB7XG4gICAgICAgIG1vdXNlbW92ZSxcblxuICAgICAgICBtb3VzZXVwKGV2ZW50KSB7XG4gICAgICAgICAgbW91c2Vtb3ZlKGV2ZW50KVxuICAgICAgICAgIGhhbmRsZXJzLnJlbW92ZSgpXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfSxcblxuICAgIHVwZGF0ZUVkaXRvck9wdGlvbnMoKSB7XG4gICAgICB0aGlzLmVkaXRvci5zZXRPcHRpb25zKHRoaXMuZWRpdG9yT3B0aW9ucylcbiAgICB9LFxuXG4gICAgYXN5bmMgb25DbGlja0xpbmsoZWRpdG9yKSB7XG4gICAgICBjb25zdCBhdHRyaWJ1dGVzID0gYXdhaXQgdGhpcy5yb290Q29tcG9uZW50LnNob3dEaWFsb2coe1xuICAgICAgICBjb21wb25lbnRzOiB7XG4gICAgICAgICAgaHJlZjoge1xuICAgICAgICAgICAgdHlwZTogJ3VybCcsXG4gICAgICAgICAgICBsYWJlbDogJ0xpbmsnLFxuICAgICAgICAgICAgYXV0b2ZvY3VzOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICB0aXRsZToge1xuICAgICAgICAgICAgdHlwZTogJ3RleHQnLFxuICAgICAgICAgICAgbGFiZWw6ICdUaXRsZSdcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGJ1dHRvbnM6IHtcbiAgICAgICAgICBjYW5jZWw6IHt9LFxuICAgICAgICAgIGFwcGx5OiB7IHR5cGU6ICdzdWJtaXQnIH0sXG4gICAgICAgICAgcmVtb3ZlOiB7XG4gICAgICAgICAgICBldmVudHM6IHtcbiAgICAgICAgICAgICAgY2xpY2soeyBkaWFsb2dDb21wb25lbnQgfSkge1xuICAgICAgICAgICAgICAgIGRpYWxvZ0NvbXBvbmVudC5yZXNvbHZlKG51bGwpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGRhdGE6IGdldE1hcmtBdHRyaWJ1dGVzKHRoaXMuZWRpdG9yLnN0YXRlLCAnbGluaycpXG4gICAgICB9KVxuICAgICAgaWYgKGF0dHJpYnV0ZXMpIHtcbiAgICAgICAgbGV0IHsgaHJlZiwgdGl0bGUgfSA9IGF0dHJpYnV0ZXNcbiAgICAgICAgaWYgKGhyZWYpIHtcbiAgICAgICAgICAvLyBTZWUgaWYgYGhyZWZgIGNhbiBiZSBwYXJzZWQgYXMgYSBVUkwsIGFuZCBpZiBub3QsXG4gICAgICAgICAgLy8gcHJlZml4IGl0IHdpdGggYSBkZWZhdWx0IHByb3RvY29sLlxuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbmV3XG4gICAgICAgICAgICBuZXcgVVJMKGhyZWYpXG4gICAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgICBocmVmID0gYGh0dHBzOi8vJHtocmVmfWBcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWRpdG9yLmNvbW1hbmRzLnNldExpbmsoeyBocmVmLCB0aXRsZSB9KVxuICAgICAgfSBlbHNlIGlmIChhdHRyaWJ1dGVzID09PSBudWxsKSB7XG4gICAgICAgIGVkaXRvci5jb21tYW5kcy51bnNldExpbmsoKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBnZXRFeHRlbnNpb25zKCkge1xuICAgICAgY29uc3Qge1xuICAgICAgICBtYXJrcyA9IHt9LFxuICAgICAgICBub2RlcyA9IHt9LFxuICAgICAgICB0b29scyA9IHt9XG4gICAgICB9ID0gdGhpcy5zY2hlbWFcbiAgICAgIHJldHVybiBbXG4gICAgICAgIC8vIEVzc2VudGlhbHM6XG4gICAgICAgIERvY3VtZW50LFxuICAgICAgICBUZXh0LFxuICAgICAgICBQYXJhZ3JhcGgsIC8vIGJ1dHRvbiBjYW4gYmUgY29udHJvbGxlZCwgYnV0IG5vZGUgbmVlZHMgdG8gYmUgb24uXG5cbiAgICAgICAgLy8gTWFya3M6IGBzY2hlbWEubWFya3NgXG4gICAgICAgIG1hcmtzLmJvbGQgJiYgQm9sZCxcbiAgICAgICAgbWFya3MuaXRhbGljICYmIEl0YWxpYyxcbiAgICAgICAgbWFya3MudW5kZXJsaW5lICYmIFVuZGVybGluZSxcbiAgICAgICAgbWFya3Muc3RyaWtlICYmIFN0cmlrZSxcbiAgICAgICAgbWFya3Muc21hbGwgJiYgU21hbGwsXG4gICAgICAgIG1hcmtzLmNvZGUgJiYgQ29kZSxcbiAgICAgICAgbWFya3MubGluayAmJiBMaW5rV2l0aFRpdGxlLFxuXG4gICAgICAgIC8vIE5vZGVzOiBgc2NoZW1hLm5vZGVzYFxuICAgICAgICBub2Rlcy5ibG9ja3F1b3RlICYmIEJsb2NrcXVvdGUsXG4gICAgICAgIG5vZGVzLmNvZGVCbG9jayAmJiBDb2RlQmxvY2ssXG4gICAgICAgIEhhcmRCcmVhaywgLy8gVE9ETzogU2hvdWxkIHRoaXMgYWx3YXlzIG9uP1xuICAgICAgICBub2Rlcy5oZWFkaW5nICYmIEhlYWRpbmcuY29uZmlndXJlKHsgbGV2ZWxzOiBub2Rlcy5oZWFkaW5nIH0pLFxuICAgICAgICBub2Rlcy5ob3Jpem9udGFsUnVsZSAmJiBIb3Jpem9udGFsUnVsZSxcbiAgICAgICAgKG5vZGVzLm9yZGVyZWRMaXN0IHx8IG5vZGVzLmJ1bGxldExpc3QpICYmIExpc3RJdGVtLFxuICAgICAgICBub2Rlcy5idWxsZXRMaXN0ICYmIEJ1bGxldExpc3QsXG4gICAgICAgIG5vZGVzLm9yZGVyZWRMaXN0ICYmIE9yZGVyZWRMaXN0LFxuICAgICAgICAvLyBUT0RPOlxuICAgICAgICAvLyBub2Rlcy50b2RvTGlzdCAmJiBUb2RvSXRlbSxcbiAgICAgICAgLy8gbm9kZXMudG9kb0xpc3QgJiYgVG9kb0xpc3QsXG5cbiAgICAgICAgLy8gVG9vbHM6IGBzY2hlbWEudG9vbHNgXG4gICAgICAgIHRvb2xzLmhpc3RvcnkgJiYgSGlzdG9yeVxuICAgICAgXS5maWx0ZXIoZXh0ZW5zaW9uID0+ICEhZXh0ZW5zaW9uKVxuICAgIH0sXG5cbiAgICBnZXRCdXR0b25zKHNldHRpbmdzTmFtZSwgZGVzY3JpcHRpb25zKSB7XG4gICAgICBjb25zdCBsaXN0ID0gW11cbiAgICAgIGNvbnN0IHsgY29tbWFuZHMgfSA9IHRoaXMuZWRpdG9yXG5cbiAgICAgIGNvbnN0IGFkZEJ1dHRvbiA9ICh7IG5hbWUsIGljb24sIGNvbW1hbmQsIGF0dHJpYnV0ZXMsIG9uQ2xpY2sgfSkgPT4ge1xuICAgICAgICBsaXN0LnB1c2goe1xuICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgaWNvbixcbiAgICAgICAgICBpc0FjdGl2ZTogdGhpcy5lZGl0b3IuaXNBY3RpdmUobmFtZSwgYXR0cmlidXRlcyksXG4gICAgICAgICAgb25DbGljazogKCkgPT4ge1xuICAgICAgICAgICAgY29tbWFuZCA/Pz1cbiAgICAgICAgICAgICAgbmFtZSBpbiBjb21tYW5kc1xuICAgICAgICAgICAgICAgID8gbmFtZVxuICAgICAgICAgICAgICAgIDogYHRvZ2dsZSR7Y2FtZWxpemUobmFtZSwgdHJ1ZSl9YFxuICAgICAgICAgICAgaWYgKGNvbW1hbmQgaW4gY29tbWFuZHMpIHtcbiAgICAgICAgICAgICAgY29uc3QgYXBwbHkgPSBhdHRyaWJ1dGVzID0+XG4gICAgICAgICAgICAgICAgdGhpcy5lZGl0b3IuY2hhaW4oKVtjb21tYW5kXShhdHRyaWJ1dGVzKS5mb2N1cygpLnJ1bigpXG4gICAgICAgICAgICAgIG9uQ2xpY2tcbiAgICAgICAgICAgICAgICA/IG9uQ2xpY2sodGhpcy5lZGl0b3IsIGF0dHJpYnV0ZXMpXG4gICAgICAgICAgICAgICAgOiBhcHBseShhdHRyaWJ1dGVzKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgIH1cblxuICAgICAgY29uc3Qgc2V0dGluZ3MgPSB0aGlzLnNjaGVtYVtzZXR0aW5nc05hbWVdXG4gICAgICBpZiAoc2V0dGluZ3MpIHtcbiAgICAgICAgZm9yIChjb25zdCBbbmFtZSwgZGVzY3JpcHRpb25dIG9mIE9iamVjdC5lbnRyaWVzKGRlc2NyaXB0aW9ucykpIHtcbiAgICAgICAgICBjb25zdCBzZXR0aW5nTmFtZSA9IFsndW5kbycsICdyZWRvJ10uaW5jbHVkZXMobmFtZSkgPyAnaGlzdG9yeScgOiBuYW1lXG4gICAgICAgICAgY29uc3Qgc2V0dGluZyA9IHNldHRpbmdzW3NldHRpbmdOYW1lXVxuICAgICAgICAgIGNvbnN0IGljb24gPSBoeXBoZW5hdGUobmFtZSlcbiAgICAgICAgICBpZiAoc2V0dGluZykge1xuICAgICAgICAgICAgaWYgKGRlc2NyaXB0aW9uID09PSB0cnVlKSB7XG4gICAgICAgICAgICAgIGFkZEJ1dHRvbih7IG5hbWUsIGljb24gfSlcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNPYmplY3QoZGVzY3JpcHRpb24pKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHsgY29tbWFuZCwgYXR0cmlidXRlLCB2YWx1ZXMsIG9uQ2xpY2sgfSA9IGRlc2NyaXB0aW9uXG4gICAgICAgICAgICAgIGlmIChhdHRyaWJ1dGUpIHtcbiAgICAgICAgICAgICAgICBpZiAoaXNBcnJheSh2YWx1ZXMpICYmIGlzQXJyYXkoc2V0dGluZykpIHtcbiAgICAgICAgICAgICAgICAgIC8vIFN1cHBvcnQgaGVhZGluZyBsZXZlbCBhdHRyczpcbiAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgdmFsdWUgb2YgdmFsdWVzKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzZXR0aW5nLmluY2x1ZGVzKHZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICAgIGFkZEJ1dHRvbih7XG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgaWNvbjogYCR7aWNvbn0tJHt2YWx1ZX1gLFxuICAgICAgICAgICAgICAgICAgICAgICAgY29tbWFuZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXM6IHsgW2F0dHJpYnV0ZV06IHZhbHVlIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrXG4gICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBhZGRCdXR0b24oeyBuYW1lLCBpY29uLCBjb21tYW5kLCBvbkNsaWNrIH0pXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBsaXN0XG4gICAgfSxcblxuICAgIGZvY3VzRWxlbWVudCgpIHtcbiAgICAgIHRoaXMuZWRpdG9yLmNvbW1hbmRzLmZvY3VzKClcbiAgICB9LFxuXG4gICAgYmx1ckVsZW1lbnQoKSB7XG4gICAgICB0aGlzLmVkaXRvci5jb21tYW5kcy5ibHVyKClcbiAgICB9XG4gIH1cbn0pXG5cbmNvbnN0IFNtYWxsID0gTWFyay5jcmVhdGUoe1xuICBuYW1lOiAnc21hbGwnLFxuXG4gIHBhcnNlSFRNTCgpIHtcbiAgICByZXR1cm4gW3sgdGFnOiAnc21hbGwnIH1dXG4gIH0sXG5cbiAgcmVuZGVySFRNTCgpIHtcbiAgICByZXR1cm4gWydzbWFsbCcsIDBdXG4gIH0sXG5cbiAgYWRkQ29tbWFuZHMoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHNldFNtYWxsOlxuICAgICAgICBhdHRyaWJ1dGVzID0+XG4gICAgICAgICh7IGNvbW1hbmRzIH0pID0+IHtcbiAgICAgICAgICByZXR1cm4gY29tbWFuZHMuc2V0TWFyayh0aGlzLm5hbWUsIGF0dHJpYnV0ZXMpXG4gICAgICAgIH0sXG4gICAgICB0b2dnbGVTbWFsbDpcbiAgICAgICAgYXR0cmlidXRlcyA9PlxuICAgICAgICAoeyBjb21tYW5kcyB9KSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGNvbW1hbmRzLnRvZ2dsZU1hcmsodGhpcy5uYW1lLCBhdHRyaWJ1dGVzKVxuICAgICAgICB9LFxuICAgICAgdW5zZXRTbWFsbDpcbiAgICAgICAgKCkgPT5cbiAgICAgICAgKHsgY29tbWFuZHMgfSkgPT4ge1xuICAgICAgICAgIHJldHVybiBjb21tYW5kcy51bnNldE1hcmsodGhpcy5uYW1lKVxuICAgICAgICB9XG4gICAgfVxuICB9XG59KVxuXG5jb25zdCBMaW5rV2l0aFRpdGxlID0gTGluay5leHRlbmQoe1xuICBpbmNsdXNpdmU6IGZhbHNlLFxuICBzY2hlbWE6IHtcbiAgICBhdHRyczoge1xuICAgICAgaHJlZjoge1xuICAgICAgICBkZWZhdWx0OiBudWxsXG4gICAgICB9LFxuICAgICAgdGl0bGU6IHtcbiAgICAgICAgZGVmYXVsdDogbnVsbFxuICAgICAgfVxuICAgIH0sXG5cbiAgICBwYXJzZUhUTUwoKSB7XG4gICAgICByZXR1cm4gW1xuICAgICAgICB7XG4gICAgICAgICAgdGFnOiAnYScsXG4gICAgICAgICAgZ2V0QXR0cnM6IGVsZW1lbnQgPT4gKHtcbiAgICAgICAgICAgIGhyZWY6IGVsZW1lbnQuZ2V0QXR0cmlidXRlKCdocmVmJyksXG4gICAgICAgICAgICB0aXRsZTogZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ3RpdGxlJylcbiAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICBdXG4gICAgfSxcblxuICAgIHJlbmRlckhUTUwobm9kZSkge1xuICAgICAgcmV0dXJuIFsnYScsIG5vZGUuYXR0cnMsIDBdXG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLmRpdG8tbWFya3VwIHtcbiAgQGV4dGVuZCAlaW5wdXQ7XG5cbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuXG4gIC5kaXRvLXJlc2l6ZSB7XG4gICAgQGV4dGVuZCAlaWNvbi1yZXNpemU7XG5cbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgdG9wOiB1bnNldDtcbiAgICBsZWZ0OiB1bnNldDtcbiAgICByaWdodDogMDtcbiAgICBib3R0b206IDA7XG4gICAgd2lkdGg6IDFlbTtcbiAgICBoZWlnaHQ6IDFlbTtcbiAgfVxuXG4gIC5Qcm9zZU1pcnJvciB7XG4gICAgaGVpZ2h0OiAxMDAlO1xuICAgIG91dGxpbmU6IG5vbmU7XG4gIH1cblxuICAuZGl0by1tYXJrdXAtZWRpdG9yIHtcbiAgICBvdmVyZmxvdy15OiBzY3JvbGw7XG4gICAgbWFyZ2luLXRvcDogJGlucHV0LXBhZGRpbmctdmVyO1xuICAgIC8vIE1vdmUgcGFkZGluZyBcImluc2lkZVwiIGVkaXRvciB0byBjb3JyZWN0bHkgcG9zaXRpb24gc2Nyb2xsYmFyXG4gICAgbWFyZ2luLXJpZ2h0OiAtJGlucHV0LXBhZGRpbmctaG9yO1xuICAgIHBhZGRpbmctcmlnaHQ6ICRpbnB1dC1wYWRkaW5nLWhvcjtcbiAgfVxuXG4gIC5kaXRvLWJ1dHRvbnMtdG9vbGJhciB7XG4gICAgbWFyZ2luOiAwO1xuICB9XG5cbiAgaDEsXG4gIGgyLFxuICBoMyxcbiAgcCxcbiAgdWwsXG4gIG9sLFxuICBwcmUsXG4gIGJsb2NrcXVvdGUge1xuICAgIG1hcmdpbjogMXJlbSAwO1xuXG4gICAgJjpmaXJzdC1jaGlsZCB7XG4gICAgICBtYXJnaW4tdG9wOiAwO1xuICAgIH1cblxuICAgICY6bGFzdC1jaGlsZCB7XG4gICAgICBtYXJnaW4tYm90dG9tOiAwO1xuICAgIH1cbiAgfVxuXG4gIGgxLFxuICBoMixcbiAgaDMge1xuICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xuICB9XG5cbiAgaDEge1xuICAgIGZvbnQtc2l6ZTogMS40cmVtO1xuICB9XG5cbiAgaDIge1xuICAgIGZvbnQtc2l6ZTogMS4ycmVtO1xuICB9XG5cbiAgdWwge1xuICAgIGxpc3Qtc3R5bGU6IGRpc2M7XG4gIH1cblxuICBjb2RlIHtcbiAgICBmb250LWZhbWlseTogJGZvbnQtZmFtaWx5LW1vbm87XG4gIH1cblxuICBwcmUge1xuICAgIHBhZGRpbmc6IDAuN3JlbSAxcmVtO1xuICAgIGJvcmRlci1yYWRpdXM6ICRib3JkZXItcmFkaXVzO1xuICAgIGJhY2tncm91bmQ6ICRjb2xvci1kYXJrZXI7XG4gICAgY29sb3I6ICRjb2xvci13aGl0ZTtcbiAgICBvdmVyZmxvdy14OiBhdXRvO1xuXG4gICAgY29kZSB7XG4gICAgICBkaXNwbGF5OiBibG9jaztcbiAgICB9XG4gIH1cblxuICBwIGNvZGUge1xuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICBwYWRkaW5nOiAwIDAuM3JlbTtcbiAgICBib3JkZXItcmFkaXVzOiAkYm9yZGVyLXJhZGl1cztcbiAgICBiYWNrZ3JvdW5kOiAkY29sb3ItbGlnaHRlcjtcbiAgfVxuXG4gIGEge1xuICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xuICAgIGN1cnNvcjogZGVmYXVsdDtcbiAgICBjb2xvcjogYmx1ZTtcbiAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcbiAgfVxuXG4gIHVsLFxuICBvbCB7XG4gICAgcGFkZGluZy1sZWZ0OiAycmVtO1xuICB9XG5cbiAgbGkge1xuICAgICYgPiBwLFxuICAgICYgPiBvbCxcbiAgICAmID4gdWwge1xuICAgICAgbWFyZ2luOiAwO1xuICAgIH1cbiAgfVxuXG4gIGJsb2NrcXVvdGUge1xuICAgIGJvcmRlci1sZWZ0OiAzcHggc29saWQgJGNvbG9yLWxpZ2h0ZXI7XG4gICAgcGFkZGluZy1sZWZ0OiAxcmVtO1xuICAgIGZvbnQtc3R5bGU6IGl0YWxpYztcblxuICAgIHAge1xuICAgICAgbWFyZ2luOiAwO1xuICAgIH1cbiAgfVxufVxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4uZGl0by1tdWx0aXNlbGVjdFxuICAuZGl0by1tdWx0aXNlbGVjdF9faW5uZXJcbiAgICBWdWVNdWx0aXNlbGVjdChcbiAgICAgIHJlZj1cImVsZW1lbnRcIlxuICAgICAgdi1tb2RlbD1cInNlbGVjdGVkT3B0aW9uc1wiXG4gICAgICA6Y2xhc3M9YHtcbiAgICAgICAgJ211bHRpc2VsZWN0LS1tdWx0aXBsZSc6IG11bHRpcGxlLFxuICAgICAgICAnbXVsdGlzZWxlY3QtLWxvYWRpbmcnOiBpc0xvYWRpbmcsXG4gICAgICAgICdtdWx0aXNlbGVjdC0taGlnaGxpZ2h0Jzogc2hvd0hpZ2hsaWdodFxuICAgICAgfWBcbiAgICAgIDpzaG93TGFiZWxzPVwiZmFsc2VcIlxuICAgICAgOnBsYWNlaG9sZGVyPVwicGxhY2Vob2xkZXJcIlxuICAgICAgdGFnUGxhY2Vob2xkZXI9XCJQcmVzcyBlbnRlciB0byBhZGQgbmV3IHRhZ1wiXG4gICAgICA6b3B0aW9ucz1cInBvcHVsYXRlICYmIGFjdGl2ZU9wdGlvbnMgfHwgW11cIlxuICAgICAgOmN1c3RvbUxhYmVsPVwiZ2V0TGFiZWxGb3JPcHRpb25cIlxuICAgICAgOnRyYWNrQnk9XCJvcHRpb25WYWx1ZVwiXG4gICAgICA6Z3JvdXBMYWJlbD1cImdyb3VwQnlMYWJlbFwiXG4gICAgICA6Z3JvdXBWYWx1ZXM9XCJncm91cEJ5T3B0aW9uc1wiXG4gICAgICA6bXVsdGlwbGU9XCJtdWx0aXBsZVwiXG4gICAgICA6dGFnZ2FibGU9XCJ0YWdnYWJsZVwiXG4gICAgICA6c2VhcmNoYWJsZT1cInNlYXJjaGFibGVcIlxuICAgICAgOmludGVybmFsU2VhcmNoPVwiIXNlYXJjaEZpbHRlclwiXG4gICAgICA6cHJlc2VydmVTZWFyY2g9XCIhIXNlYXJjaEZpbHRlclwiXG4gICAgICA6Y2xlYXJPblNlbGVjdD1cIiFzZWFyY2hGaWx0ZXJcIlxuICAgICAgOmNsb3NlT25TZWxlY3Q9XCIhc3RheU9wZW5cIlxuICAgICAgOmxvYWRpbmc9XCJpc0xvYWRpbmdcIlxuICAgICAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gICAgICBAb3Blbj1cIm9uT3BlblwiXG4gICAgICBAY2xvc2U9XCJvbkNsb3NlXCJcbiAgICAgIEB0YWc9XCJvbkFkZFRhZ1wiXG4gICAgICBAc2VhcmNoLWNoYW5nZT1cIm9uU2VhcmNoQ2hhbmdlXCJcbiAgICApXG4gICAgYnV0dG9uLmRpdG8tYnV0dG9uLWNsZWFyLmRpdG8tYnV0dG9uLW92ZXJsYXkoXG4gICAgICB2LWlmPVwic2hvd0NsZWFyQnV0dG9uXCJcbiAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgICAgQGNsaWNrPVwiY2xlYXJcIlxuICAgIClcbiAgLy8tIEVkaXQgYnV0dG9uIGlzIG5ldmVyIGRpc2FibGVkLCBldmVuIGlmIHRoZSBmaWVsZCBpcyBkaXNhYmxlZC5cbiAgRGl0b0VkaXRCdXR0b25zKFxuICAgIHYtaWY9XCJlZGl0YWJsZVwiXG4gICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgOm1ldGE9XCJtZXRhXCJcbiAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgOmRpc2FibGVkPVwiZmFsc2VcIlxuICAgIDplZGl0YWJsZT1cImVkaXRhYmxlXCJcbiAgICA6ZWRpdFBhdGg9XCJlZGl0UGF0aFwiXG4gIClcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b1R5cGVDb21wb25lbnQgZnJvbSAnLi4vRGl0b1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgRGl0b0NvbnRleHQgZnJvbSAnLi4vRGl0b0NvbnRleHQuanMnXG5pbXBvcnQgVHlwZU1peGluIGZyb20gJy4uL21peGlucy9UeXBlTWl4aW4uanMnXG5pbXBvcnQgT3B0aW9uc01peGluIGZyb20gJy4uL21peGlucy9PcHRpb25zTWl4aW4uanMnXG5pbXBvcnQgVnVlTXVsdGlzZWxlY3QgZnJvbSAndnVlLW11bHRpc2VsZWN0J1xuaW1wb3J0IHsgZ2V0U2NoZW1hQWNjZXNzb3IgfSBmcm9tICcuLi91dGlscy9hY2Nlc3Nvci5qcydcbmltcG9ydCB7IGlzQm9vbGVhbiB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvVHlwZUNvbXBvbmVudC5yZWdpc3RlcignbXVsdGlzZWxlY3QnLCB7XG4gIG1peGluczogW09wdGlvbnNNaXhpbl0sXG4gIGNvbXBvbmVudHM6IHsgVnVlTXVsdGlzZWxlY3QgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBzZWFyY2hlZE9wdGlvbnM6IG51bGwsXG4gICAgICBwb3B1bGF0ZTogZmFsc2VcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBzZWxlY3RlZE9wdGlvbnM6IHtcbiAgICAgIGdldCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubXVsdGlwbGVcbiAgICAgICAgICA/ICh0aGlzLnNlbGVjdGVkVmFsdWUgfHwgW10pXG4gICAgICAgICAgICAgIC5tYXAoXG4gICAgICAgICAgICAgICAgLy8gSWYgYW4gb3B0aW9uIGNhbm5vdCBiZSBmb3VuZCwgd2UgbWF5IGJlIGluIHRhZ2dhYmxlIG1vZGUgYW5kXG4gICAgICAgICAgICAgICAgLy8gY2FuIGFkZCBpdC5cbiAgICAgICAgICAgICAgICB2YWx1ZSA9PiAoXG4gICAgICAgICAgICAgICAgICB0aGlzLmdldE9wdGlvbkZvclZhbHVlKHZhbHVlKSB8fCB0aGlzLmFkZFRhZ09wdGlvbih2YWx1ZSlcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgLy8gRmlsdGVyIG91dCBvcHRpb25zIHRoYXQgd2UgY291bGRuJ3QgbWF0Y2guXG4gICAgICAgICAgICAgIC8vIFRPRE86IFNob3VsZCB3ZSBkaXNwbGF5IGFuIGVycm9yIGluc3RlYWQ/XG4gICAgICAgICAgICAgIC5maWx0ZXIoQm9vbGVhbilcbiAgICAgICAgICA6IHRoaXMuc2VsZWN0ZWRPcHRpb25cbiAgICAgIH0sXG5cbiAgICAgIHNldChvcHRpb24pIHtcbiAgICAgICAgLy8gQ29udmVydCB2YWx1ZSB0byBvcHRpb25zIG9iamVjdCwgc2luY2UgdnVlLW11bHRpc2VsZWN0IGNhbid0IG1hcCB0aGF0XG4gICAgICAgIC8vIGl0c2VsZiB1bmZvcnR1bmF0ZWx5LiBgdHJhY2stYnlgIGlzIHVzZWQgZm9yIDprZXkgbWFwcGluZyBpdCBzZWVtcy5cbiAgICAgICAgdGhpcy5zZWxlY3RlZFZhbHVlID0gdGhpcy5tdWx0aXBsZVxuICAgICAgICAgID8gKG9wdGlvbiB8fCBbXSkubWFwKHZhbHVlID0+IHRoaXMuZ2V0VmFsdWVGb3JPcHRpb24odmFsdWUpKVxuICAgICAgICAgIDogdGhpcy5nZXRWYWx1ZUZvck9wdGlvbihvcHRpb24pXG4gICAgICAgIHRoaXMub25DaGFuZ2UoKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBhY3RpdmVPcHRpb25zKCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2VhcmNoZWRPcHRpb25zIHx8IHRoaXMub3B0aW9uc1xuICAgIH0sXG5cbiAgICBtdWx0aXBsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ211bHRpcGxlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfSksXG5cbiAgICBzZWFyY2hhYmxlOiBnZXRTY2hlbWFBY2Nlc3Nvcignc2VhcmNoYWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0pLFxuXG4gICAgdGFnZ2FibGU6IGdldFNjaGVtYUFjY2Vzc29yKCd0YWdnYWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0pLFxuXG4gICAgc3RheU9wZW46IGdldFNjaGVtYUFjY2Vzc29yKCdzdGF5T3BlbicsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0pLFxuXG4gICAgcGxhY2Vob2xkZXIoKSB7XG4gICAgICBsZXQgeyBwbGFjZWhvbGRlciwgc2VhcmNoYWJsZSwgdGFnZ2FibGUgfSA9IHRoaXMuc2NoZW1hXG4gICAgICBpZiAoaXNCb29sZWFuKHBsYWNlaG9sZGVyKSkge1xuICAgICAgICBwbGFjZWhvbGRlciA9IHBsYWNlaG9sZGVyID8gdW5kZWZpbmVkIDogbnVsbFxuICAgICAgfVxuICAgICAgcmV0dXJuIHBsYWNlaG9sZGVyID09PSB1bmRlZmluZWRcbiAgICAgICAgPyBzZWFyY2hhYmxlICYmIHRhZ2dhYmxlXG4gICAgICAgICAgPyBgU2VhcmNoIG9yIGFkZCBhICR7dGhpcy5sYWJlbH1gXG4gICAgICAgICAgOiBzZWFyY2hhYmxlXG4gICAgICAgICAgICA/IGBTZWxlY3Qgb3Igc2VhcmNoICR7dGhpcy5sYWJlbH1gXG4gICAgICAgICAgICA6IHVuZGVmaW5lZFxuICAgICAgICA6IHBsYWNlaG9sZGVyXG4gICAgfSxcblxuICAgIHNob3dIaWdobGlnaHQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5pc01vdW50ZWQgJiYgdGhpcy4kcmVmcy5lbGVtZW50LnBvaW50ZXJEaXJ0eVxuICAgIH1cbiAgfSxcblxuICBtb3VudGVkKCkge1xuICAgIGlmICh0aGlzLmF1dG9mb2N1cykge1xuICAgICAgLy8gdnVlLW11bHRpc2VsZWN0IGRvZXNuJ3Qgc3VwcG9ydCB0aGUgYXV0b2ZvY3VzIGF0dHJpYnV0ZS4gV2UgbmVlZCB0b1xuICAgICAgLy8gaGFuZGxlIGl0IGhlcmUuXG4gICAgICB0aGlzLmZvY3VzKClcbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGFkZFRhZ09wdGlvbih0YWcpIHtcbiAgICAgIGlmICh0aGlzLnRhZ2dhYmxlKSB7XG4gICAgICAgIGNvbnN0IHsgb3B0aW9uTGFiZWwsIG9wdGlvblZhbHVlIH0gPSB0aGlzXG4gICAgICAgIGNvbnN0IG9wdGlvbiA9XG4gICAgICAgICAgb3B0aW9uTGFiZWwgJiYgb3B0aW9uVmFsdWVcbiAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgIFtvcHRpb25MYWJlbF06IHRhZyxcbiAgICAgICAgICAgICAgICAvLyBUT0RPOiBEZWZpbmUgYSBzaW1wbGUgc2NoZW1hIG9wdGlvbiB0byBjb252ZXJ0IHRoZSB0YWcgdmFsdWVcbiAgICAgICAgICAgICAgICAvLyB0byBzb21ldGhpbmcgZWxzZSwgZS5nLiBgdG9UYWc6IHRhZyA9PiB1bmRlcnNjb3JlKHRhZylgXG4gICAgICAgICAgICAgICAgW29wdGlvblZhbHVlXTogdGFnXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDogdGFnXG4gICAgICAgIHRoaXMub3B0aW9ucy5wdXNoKG9wdGlvbilcbiAgICAgICAgcmV0dXJuIG9wdGlvblxuICAgICAgfVxuICAgIH0sXG5cbiAgICBmb2N1c0VsZW1lbnQoKSB7XG4gICAgICB0aGlzLiRyZWZzLmVsZW1lbnQuYWN0aXZhdGUoKVxuICAgIH0sXG5cbiAgICBibHVyRWxlbWVudCgpIHtcbiAgICAgIHRoaXMuJHJlZnMuZWxlbWVudC5kZWFjdGl2YXRlKClcbiAgICB9LFxuXG4gICAgb25PcGVuKCkge1xuICAgICAgdGhpcy5wb3B1bGF0ZSA9IHRydWVcbiAgICB9LFxuXG4gICAgb25DbG9zZSgpIHtcbiAgICAgIC8vIFNpbmNlIHdlIGRvbid0IGZpcmUgYmx1ciBldmVudHMgd2hpbGUgdGhlIG11bHRpc2VsZWN0IGlzIG9wZW4gKHNlZVxuICAgICAgLy8gYmVsb3cpLCB3ZSBuZWVkIHRvIGRvIGl0IGhlcmUsIHdoZW4gaXQncyBhY3R1YWxseSBjbG9zZWQuXG4gICAgICBpZiAodGhpcy5mb2N1c2VkKSB7XG4gICAgICAgIHRoaXMub25CbHVyKClcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgb25CbHVyKCkge1xuICAgICAgaWYgKCF0aGlzLiRyZWZzLmVsZW1lbnQuaXNPcGVuKSB7XG4gICAgICAgIFR5cGVNaXhpbi5tZXRob2RzLm9uQmx1ci5jYWxsKHRoaXMpXG4gICAgICB9XG4gICAgfSxcblxuICAgIG9uQWRkVGFnKHRhZykge1xuICAgICAgY29uc3Qgb3B0aW9uID0gdGhpcy5hZGRUYWdPcHRpb24odGFnKVxuICAgICAgaWYgKG9wdGlvbikge1xuICAgICAgICB0aGlzLnZhbHVlLnB1c2godGhpcy5nZXRWYWx1ZUZvck9wdGlvbihvcHRpb24pKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBhc3luYyBvblNlYXJjaENoYW5nZShxdWVyeSkge1xuICAgICAgaWYgKHRoaXMuc2VhcmNoRmlsdGVyKSB7XG4gICAgICAgIGlmIChxdWVyeSkge1xuICAgICAgICAgIC8vIFNldCBgc2VhcmNoZWRPcHRpb25zYCB0byBhbiBlbXB0eSBhcnJheSwgYmVmb3JlIGl0IHdpbGwgYmVcbiAgICAgICAgICAvLyBwb3B1bGF0ZWQgYXN5bmNocm9ub3VzbHkgd2l0aCB0aGUgYWN0dWFsIHJlc3VsdHMuXG4gICAgICAgICAgdGhpcy5zZWFyY2hlZE9wdGlvbnMgPSBbXVxuICAgICAgICAgIHRoaXMuc2VhcmNoZWRPcHRpb25zID0gYXdhaXQgdGhpcy5yZXNvbHZlRGF0YShcbiAgICAgICAgICAgICgpID0+IHRoaXMuc2VhcmNoRmlsdGVyKG5ldyBEaXRvQ29udGV4dCh0aGlzLCB7IHF1ZXJ5IH0pKVxuICAgICAgICAgIClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBDbGVhciBgc2VhcmNoZWRPcHRpb25zYCB3aGVuIHRoZSBxdWVyeSBpcyBjbGVhcmVkLlxuICAgICAgICAgIHRoaXMuc2VhcmNoZWRPcHRpb25zID0gbnVsbFxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcbkBpbXBvcnQgJ3Z1ZS1tdWx0aXNlbGVjdC9kaXN0L3Z1ZS1tdWx0aXNlbGVjdC5jc3MnO1xuXG4kc3Bpbm5lci13aWR0aDogJHNlbGVjdC1hcnJvdy13aWR0aDtcbiR0YWctaWNvbi13aWR0aDogMS44ZW07XG4kdGFnLW1hcmdpbjogMnB4O1xuJHRhZy1wYWRkaW5nOiAzcHg7XG4kdGFnLWxpbmUtaGVpZ2h0OiAxZW07XG5cbi5kaXRvLW11bHRpc2VsZWN0IHtcbiAgZGlzcGxheTogaW5saW5lLWZsZXg7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcblxuICAmX19pbm5lciB7XG4gICAgZmxleDogMTtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIH1cblxuICAuZGl0by1lZGl0LWJ1dHRvbnMge1xuICAgIG1hcmdpbi1sZWZ0OiAkZm9ybS1zcGFjaW5nLWhhbGY7XG4gIH1cblxuICAubXVsdGlzZWxlY3Qge1xuICAgICRzZWxmOiBsYXN0LXNlbGVjdG9yKCYpO1xuXG4gICAgLS1pbnB1dC13aWR0aDogMTAwJTtcblxuICAgIGZvbnQtc2l6ZTogaW5oZXJpdDtcbiAgICBtaW4taGVpZ2h0OiBpbmhlcml0O1xuICAgIGNvbG9yOiAkY29sb3ItYmxhY2s7XG5cbiAgICAmLS1tdWx0aXBsZSB7XG4gICAgICAtLWlucHV0LXdpZHRoOiBhdXRvO1xuICAgIH1cblxuICAgICZfX3RhZ3Mge1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGZvbnQtc2l6ZTogaW5oZXJpdDtcbiAgICAgIG1pbi1oZWlnaHQ6IGluaGVyaXQ7XG4gICAgICBvdmVyZmxvdzogYXV0bztcbiAgICAgIHBhZGRpbmc6IDAgJHNwaW5uZXItd2lkdGggMCAwO1xuICAgICAgLy8gU28gdGFncyBjYW4gZmxvYXQgb24gbXVsdGlwbGUgbGluZXMgYW5kIGhhdmUgcHJvcGVyIG1hcmdpbnM6XG4gICAgICBwYWRkaW5nLWJvdHRvbTogJHRhZy1tYXJnaW47XG5cbiAgICAgIC5kaXRvLWhhcy1lcnJvcnMgJiB7XG4gICAgICAgIGJvcmRlci1jb2xvcjogJGNvbG9yLWVycm9yO1xuICAgICAgfVxuICAgIH1cblxuICAgICZfX3RhZyB7XG4gICAgICBmbG9hdDogbGVmdDtcbiAgICAgIG1hcmdpbjogJHRhZy1tYXJnaW4gMCAwICR0YWctbWFyZ2luO1xuICAgICAgYm9yZGVyLXJhZGl1czogMWVtO1xuICAgICAgcGFkZGluZzogJHRhZy1wYWRkaW5nICR0YWctaWNvbi13aWR0aCAkdGFnLXBhZGRpbmcgMC44ZW07XG4gICAgICBsaW5lLWhlaWdodDogJHRhZy1saW5lLWhlaWdodDtcbiAgICAgIGhlaWdodDogY2FsYygkaW5wdXQtaGVpZ2h0IC0gMiAqICR0YWctcGFkZGluZyk7XG4gICAgfVxuXG4gICAgJl9fdGFncy13cmFwIHtcbiAgICAgIG92ZXJmbG93OiBhdXRvO1xuICAgICAgbGluZS1oZWlnaHQ6IDA7XG4gICAgfVxuXG4gICAgJl9fc2luZ2xlLFxuICAgICZfX3BsYWNlaG9sZGVyLFxuICAgICZfX2lucHV0IHtcbiAgICAgIEBpbmNsdWRlIGVsbGlwc2lzO1xuXG4gICAgICBmbGV4OiAxIDAgMCU7XG4gICAgICB3aWR0aDogMDtcbiAgICAgIG1pbi1oZWlnaHQ6IDA7XG4gICAgICBtYXJnaW46IDAgMCAxcHggMDtcbiAgICAgIGZvbnQtc2l6ZTogaW5oZXJpdDtcbiAgICAgIGxpbmUtaGVpZ2h0OiBpbmhlcml0O1xuICAgICAgLy8gU2FkbHksIHZ1ZS1zZWxlY3Qgc2V0cyBzdHlsZT1cInBhZGRpbmc6IC4uLjtcIiBpbiBhZGRpdGlvbiB0byB1c2luZ1xuICAgICAgLy8gY2xhc3Nlcywgc28gYCFpbXBvcnRhbnRgIGlzIG5lY2Vzc2FyeTpcbiAgICAgIHBhZGRpbmc6ICRpbnB1dC1wYWRkaW5nICFpbXBvcnRhbnQ7XG4gICAgICAvLyBTbyBpbnB1dCBjYW4gZmxvYXQgbmV4dCB0byB0YWdzIGFuZCBoYXZlIHByb3BlciBtYXJnaW5zIHdpdGhcbiAgICAgIC8vICZfX3RhZ3M6XG4gICAgICBwYWRkaW5nLWJvdHRvbTogMCAhaW1wb3J0YW50O1xuICAgICAgYmFja2dyb3VuZDogbm9uZTtcbiAgICB9XG5cbiAgICAmX19wbGFjZWhvbGRlcixcbiAgICAmX19pbnB1dDo6cGxhY2Vob2xkZXIge1xuICAgICAgY29sb3I6ICRjb2xvci1wbGFjZWhvbGRlcjtcbiAgICB9XG5cbiAgICAmX19wbGFjZWhvbGRlciB7XG4gICAgICAmOjphZnRlciB7XG4gICAgICAgIC8vIEVuZm9yY2UgYWN0dWFsIGxpbmUtaGVpZ2h0IGZvciBwb3NpdGlvbmluZy5cbiAgICAgICAgY29udGVudDogJ1xcMjAwYic7XG4gICAgICB9XG4gICAgfVxuXG4gICAgJl9fc2VsZWN0LFxuICAgICZfX3NwaW5uZXIge1xuICAgICAgcGFkZGluZzogMDtcbiAgICAgIC8vICRib3JkZXItd2lkdGggdG8gcHJldmVudCBtYXNraW5nIGJvcmRlciB3aXRoICZfX3NwaW5uZXJcbiAgICAgIHRvcDogJGJvcmRlci13aWR0aDtcbiAgICAgIHJpZ2h0OiAkYm9yZGVyLXdpZHRoO1xuICAgICAgYm90dG9tOiAkYm9yZGVyLXdpZHRoO1xuICAgICAgaGVpZ2h0OiBpbmhlcml0O1xuICAgICAgYm9yZGVyLXJhZGl1czogJGJvcmRlci1yYWRpdXM7XG4gICAgfVxuXG4gICAgJl9fc2VsZWN0IHtcbiAgICAgIHdpZHRoOiAwO1xuICAgICAgbWFyZ2luLXJpZ2h0OiBjYWxjKCRzZWxlY3QtYXJyb3ctd2lkdGggLyAyKTtcblxuICAgICAgJjo6YmVmb3JlIHtcbiAgICAgICAgQGluY2x1ZGUgYXJyb3coJHNlbGVjdC1hcnJvdy1zaXplKTtcblxuICAgICAgICBib3R0b206ICRzZWxlY3QtYXJyb3ctYm90dG9tO1xuICAgICAgICByaWdodDogY2FsYygtMSAqICRzZWxlY3QtYXJyb3ctc2l6ZSAvIDIpO1xuICAgICAgfVxuICAgIH1cblxuICAgICZfX3NwaW5uZXIge1xuICAgICAgd2lkdGg6ICRzcGlubmVyLXdpZHRoO1xuXG4gICAgICAmOjpiZWZvcmUsXG4gICAgICAmOjphZnRlciB7XG4gICAgICAgIC8vIENoYW5nZSB0aGUgd2lkdGggb2YgdGhlIGxvYWRpbmcgc3Bpbm5lclxuICAgICAgICBib3JkZXItd2lkdGg6IDNweDtcbiAgICAgICAgYm9yZGVyLXRvcC1jb2xvcjogJGNvbG9yLWFjdGl2ZTtcbiAgICAgICAgaW5zZXQ6IDA7XG4gICAgICAgIG1hcmdpbjogYXV0bztcbiAgICAgIH1cbiAgICB9XG5cbiAgICAmX19vcHRpb24ge1xuICAgICAgJG9wdGlvbjogbGFzdC1zZWxlY3RvcigmKTtcblxuICAgICAgbWluLWhlaWdodDogdW5zZXQ7XG4gICAgICBoZWlnaHQ6IHVuc2V0O1xuICAgICAgbGluZS1oZWlnaHQ6ICRsaW5lLWhlaWdodDtcbiAgICAgIHBhZGRpbmc6ICRpbnB1dC1wYWRkaW5nO1xuXG4gICAgICAmOjphZnRlciB7XG4gICAgICAgIC8vIEluc3RydWN0aW9uIHRleHQgZm9yIG9wdGlvbnNcbiAgICAgICAgcGFkZGluZzogJGlucHV0LXBhZGRpbmc7XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAkdGFnLWxpbmUtaGVpZ2h0O1xuICAgICAgfVxuXG4gICAgICAvLyBPbmx5IHNob3cgdGhlIGhpZ2hsaWdodCBvbmNlIHRoZSBwdWxsZG93biBoYXMgcmVjZWl2ZWQgbW91c2Ugb3JcbiAgICAgIC8vIGtleWJvYXJkIGludGVyYWN0aW9uLCBpbiB3aGljaCBjYXNlIGAmLS1oaWdobGlnaHRgIHdpbGwgYmUgc2V0LFxuICAgICAgLy8gd2hpY2ggaXMgY29udHJvbGxlZCBieSBgcG9pbnRlckRpcnR5YCBpbiB2dWUtbXVsdGlzZWxlY3QuXG4gICAgICAvLyBVbnRpbCB0aGVuLCBjbGVhciB0aGUgaGlnaGxpZ2h0IHN0eWxlLCBidXQgb25seSBpZiBpdCBpc24ndCBhbHNvXG4gICAgICAvLyBkaXNhYmxlZCBvciBzZWxlY3RlZCwgaW4gd2hpY2ggY2FzZSB3ZSB3YW50IHRvIGtlZXAgdGhlIHN0eWxlLlxuICAgICAgQGF0LXJvb3QgI3skc2VsZn06bm90KCN7JHNlbGZ9LS1oaWdobGlnaHQpXG4gICAgICAgICAgI3skb3B0aW9ufTpub3QoI3skb3B0aW9ufS0tZGlzYWJsZWQpOm5vdCgjeyRvcHRpb259LS1zZWxlY3RlZCkge1xuICAgICAgICBjb2xvcjogJGNvbG9yLXRleHQ7XG4gICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuICAgICAgfVxuXG4gICAgICAmLS1oaWdobGlnaHQge1xuICAgICAgICAmOjphZnRlciB7XG4gICAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuICAgICAgICAgIGNvbG9yOiAkY29sb3Itd2hpdGU7XG4gICAgICAgIH1cblxuICAgICAgICBAYXQtcm9vdCAjeyRzZWxmfSN7JHNlbGZ9LS1oaWdobGlnaHQgI3tsYXN0LXNlbGVjdG9yKCYpfSB7XG4gICAgICAgICAgY29sb3I6ICRjb2xvci10ZXh0LWludmVydGVkO1xuICAgICAgICAgIGJhY2tncm91bmQ6ICRjb2xvci1hY3RpdmU7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgJi0tc2VsZWN0ZWQge1xuICAgICAgICBmb250LXdlaWdodDogbm9ybWFsO1xuICAgICAgICBjb2xvcjogJGNvbG9yLXRleHQ7XG4gICAgICAgIGJhY2tncm91bmQ6ICRjb2xvci1oaWdobGlnaHQ7XG5cbiAgICAgICAgQGF0LXJvb3QgI3skc2VsZn0jeyRzZWxmfS0taGlnaGxpZ2h0ICYjeyRvcHRpb259LS1oaWdobGlnaHQge1xuICAgICAgICAgIGNvbG9yOiAkY29sb3ItdGV4dC1pbnZlcnRlZDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAmLS1kaXNhYmxlZCB7XG4gICAgICAgIGJhY2tncm91bmQ6IG5vbmU7XG4gICAgICAgIGNvbG9yOiAkY29sb3ItZGlzYWJsZWQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgJl9fdGFnIHtcbiAgICAgIGNvbG9yOiAkY29sb3ItdGV4dC1pbnZlcnRlZDtcbiAgICAgIGJhY2tncm91bmQ6ICRjb2xvci1hY3RpdmU7XG4gICAgfVxuXG4gICAgJl9fdGFnLWljb24ge1xuICAgICAgYmFja2dyb3VuZDogbm9uZTtcbiAgICAgIGJvcmRlci1yYWRpdXM6IDFlbTtcbiAgICAgIHdpZHRoOiAkdGFnLWljb24td2lkdGg7XG4gICAgICBtYXJnaW46IDA7XG5cbiAgICAgICY6OmFmdGVyIHtcbiAgICAgICAgQGV4dGVuZCAlaWNvbi1jbGVhcjtcblxuICAgICAgICBmb250LXNpemU6IDAuOWVtO1xuICAgICAgICBjb2xvcjogJGNvbG9yLXRleHQtaW52ZXJ0ZWQ7XG4gICAgICB9XG5cbiAgICAgICY6aG92ZXI6OmFmdGVyIHtcbiAgICAgICAgY29sb3I6ICRjb2xvci10ZXh0O1xuICAgICAgfVxuICAgIH1cblxuICAgICZfX3RhZ3MsXG4gICAgJl9fY29udGVudC13cmFwcGVyIHtcbiAgICAgIGJvcmRlcjogJGJvcmRlci1zdHlsZTtcbiAgICAgIGJvcmRlci1yYWRpdXM6ICRib3JkZXItcmFkaXVzO1xuICAgIH1cblxuICAgICZfX2NvbnRlbnQtd3JhcHBlciB7XG4gICAgICB6LWluZGV4OiAkei1pbmRleC1wb3B1cDtcbiAgICAgIGJvcmRlci1jb2xvcjogJGNvbG9yLWFjdGl2ZTtcbiAgICB9XG5cbiAgICAmOm5vdCgmLS1hYm92ZSkgI3skc2VsZn1fX2NvbnRlbnQtd3JhcHBlciB7XG4gICAgICBtYXJnaW46ICgtJGJvcmRlci13aWR0aCkgMCAwO1xuICAgICAgYm9yZGVyLXRvcC1jb2xvcjogJGJvcmRlci1jb2xvcjtcbiAgICAgIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6IDA7XG4gICAgICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogMDtcbiAgICB9XG5cbiAgICAmLS1hYm92ZSAjeyRzZWxmfV9fY29udGVudC13cmFwcGVyIHtcbiAgICAgIG1hcmdpbjogMCAwICgtJGJvcmRlci13aWR0aCk7XG4gICAgICBib3JkZXItYm90dG9tLWNvbG9yOiAkYm9yZGVyLWNvbG9yO1xuICAgICAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogMDtcbiAgICAgIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAwO1xuICAgIH1cblxuICAgICYtLWFjdGl2ZSB7XG4gICAgICAjeyRzZWxmfV9fcGxhY2Vob2xkZXIge1xuICAgICAgICAvLyBEb24ndCB1c2UgYGRpc3BsYXk6IG5vbmVgIHRvIGhpZGUgcGxhY2UtaG9sZGVyLCBhcyB0aGUgbGF5b3V0IHdvdWxkXG4gICAgICAgIC8vIGNvbGxhcHNlLlxuICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgICAgIHZpc2liaWxpdHk6IGhpZGRlbjtcbiAgICAgIH1cblxuICAgICAgI3skc2VsZn1fX3NpbmdsZSxcbiAgICAgICN7JHNlbGZ9X19pbnB1dCB7XG4gICAgICAgIC8vIFNhZGx5LCB2dWUtc2VsZWN0IHNldHMgYHN0eWxlPVwid2lkdGhcImAgaW4gYWRkaXRpb24gdG8gdXNpbmcgY2xhc3Nlc1xuICAgICAgICAvLyBzbyBgIWltcG9ydGFudGAgaXMgbmVjZXNzYXJ5OlxuICAgICAgICB3aWR0aDogdmFyKC0taW5wdXQtd2lkdGgpICFpbXBvcnRhbnQ7XG4gICAgICB9XG5cbiAgICAgICN7JHNlbGZ9X190YWdzIHtcbiAgICAgICAgYm9yZGVyLWNvbG9yOiAkY29sb3ItYWN0aXZlO1xuICAgICAgICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAwO1xuICAgICAgICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogMDtcbiAgICAgIH1cblxuICAgICAgJiN7JHNlbGZ9LS1hYm92ZSB7XG4gICAgICAgICN7JHNlbGZ9X190YWdzIHtcbiAgICAgICAgICBib3JkZXItcmFkaXVzOiAkYm9yZGVyLXJhZGl1cztcbiAgICAgICAgICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAwO1xuICAgICAgICAgIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAwO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgJi0tbG9hZGluZyB7XG4gICAgICAjeyRzZWxmfV9fdGFncyB7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6ICRib3JkZXItcmFkaXVzO1xuICAgICAgfVxuXG4gICAgICAjeyRzZWxmfV9fY29udGVudC13cmFwcGVyIHtcbiAgICAgICAgZGlzcGxheTogbm9uZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCJpbXBvcnQgeyBnZXRTY2hlbWFBY2Nlc3NvciB9IGZyb20gJy4uL3V0aWxzL2FjY2Vzc29yLmpzJ1xuaW1wb3J0IHsgaXNBcnJheSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCB7XG4gIGNvbXB1dGVkOiB7XG4gICAgaW5wdXRWYWx1ZToge1xuICAgICAgZ2V0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZSAhPT0gbnVsbCA/IHRoaXMudmFsdWUgOiAnJ1xuICAgICAgfSxcblxuICAgICAgc2V0KHZhbHVlKSB7XG4gICAgICAgIHRoaXMudmFsdWUgPVxuICAgICAgICAgIHZhbHVlICE9PSAnJ1xuICAgICAgICAgICAgPyB0aGlzLmlzSW50ZWdlclxuICAgICAgICAgICAgICA/IHBhcnNlSW50KHZhbHVlLCAxMClcbiAgICAgICAgICAgICAgOiBwYXJzZUZsb2F0KHZhbHVlKVxuICAgICAgICAgICAgOiBudWxsXG4gICAgICB9XG4gICAgfSxcblxuICAgIC8vIEBvdmVycmlkYWJsZVxuICAgIGlzSW50ZWdlcigpIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH0sXG5cbiAgICBzdGVwVmFsdWUoKSB7XG4gICAgICAvLyBEb24ndCBzaG93IHN0ZXBzIGlmIHRoZSBpbnB1dCBpcyBhbHNvIGNsZWFyYWJsZSwgc2luY2UgdGhlIHN0ZXAgYnV0dG9uc1xuICAgICAgLy8gd291bGQgY29sbGlkZSB3aXRoIHRoZSBjbGVhciBidXR0b24uXG4gICAgICByZXR1cm4gdGhpcy5jbGVhcmFibGVcbiAgICAgICAgPyBudWxsXG4gICAgICAgIDogdGhpcy5zdGVwID09IG51bGwgJiYgIXRoaXMuaXNJbnRlZ2VyXG4gICAgICAgICAgPyAnYW55J1xuICAgICAgICAgIDogdGhpcy5zdGVwXG4gICAgfSxcblxuICAgIGRlY2ltYWxzOiBnZXRTY2hlbWFBY2Nlc3NvcignZGVjaW1hbHMnLCB7XG4gICAgICB0eXBlOiBOdW1iZXJcbiAgICB9KSxcblxuICAgIHN0ZXA6IGdldFNjaGVtYUFjY2Vzc29yKCdzdGVwJywge1xuICAgICAgdHlwZTogTnVtYmVyLFxuICAgICAgZ2V0KHN0ZXApIHtcbiAgICAgICAgLy8gRm9yIGludGVnZXJzLCByb3VuZCB0aGUgc3RlcHMgdG8gdGhlIG5leHQgYmlnZ2VyIGludGVnZXIgdmFsdWU6XG4gICAgICAgIHJldHVybiB0aGlzLmlzSW50ZWdlciAmJiBzdGVwICE9IG51bGwgPyBNYXRoLmNlaWwoc3RlcCkgOiBzdGVwXG4gICAgICB9XG4gICAgfSksXG5cbiAgICBtaW46IGdldFNjaGVtYUFjY2Vzc29yKCdtaW4nLCB7XG4gICAgICB0eXBlOiBOdW1iZXIsXG4gICAgICBnZXQobWluKSB7XG4gICAgICAgIG1pbiA9XG4gICAgICAgICAgbWluID09PSB1bmRlZmluZWRcbiAgICAgICAgICAgID8gdGhpcy5nZXRTY2hlbWFWYWx1ZSgncmFuZ2UnLCB7IHR5cGU6IEFycmF5IH0pPy5bMF1cbiAgICAgICAgICAgIDogbWluXG4gICAgICAgIHJldHVybiB0aGlzLmlzSW50ZWdlciAmJiBtaW4gIT0gbnVsbCA/IE1hdGguZmxvb3IobWluKSA6IG1pblxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgbWF4OiBnZXRTY2hlbWFBY2Nlc3NvcignbWF4Jywge1xuICAgICAgdHlwZTogTnVtYmVyLFxuICAgICAgZ2V0KG1heCkge1xuICAgICAgICBtYXggPVxuICAgICAgICAgIG1heCA9PT0gdW5kZWZpbmVkXG4gICAgICAgICAgICA/IHRoaXMuZ2V0U2NoZW1hVmFsdWUoJ3JhbmdlJywgeyB0eXBlOiBBcnJheSB9KT8uWzFdXG4gICAgICAgICAgICA6IG1heFxuICAgICAgICByZXR1cm4gdGhpcy5pc0ludGVnZXIgJiYgbWF4ICE9IG51bGwgPyBNYXRoLmNlaWwobWF4KSA6IG1heFxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgcmFuZ2U6IGdldFNjaGVtYUFjY2Vzc29yKCdyYW5nZScsIHtcbiAgICAgIHR5cGU6IEFycmF5LFxuICAgICAgZ2V0KCkge1xuICAgICAgICAvLyBgdGhpcy5taW5gLCBgdGhpcy5tYXhgIGFscmVhZHkgc3VwcG9ydCBgc2NoZW1hLnJhbmdlYCxcbiAgICAgICAgLy8gc28gcmVkaXJlY3QgdGhlcmUuXG4gICAgICAgIGNvbnN0IHsgbWluLCBtYXggfSA9IHRoaXNcbiAgICAgICAgcmV0dXJuIG1pbiAhPSBudWxsICYmIG1heCAhPSBudWxsID8gW21pbiwgbWF4XSA6IHVuZGVmaW5lZFxuICAgICAgfSxcblxuICAgICAgc2V0KHJhbmdlKSB7XG4gICAgICAgIC8vIFByb3ZpZGUgYSBzZXR0ZXIgdGhhdCBkZWxlZ2F0ZXMgdG8gYFt0aGlzLm1pbiwgdGhpcy5tYXhdYCxcbiAgICAgICAgLy8gc2luY2UgdGhvc2UgYWxyZWFkeSBoYW5kbGUgYHNjaGVtYS5yYW5nZWAuXG4gICAgICAgIGlmIChpc0FycmF5KHJhbmdlKSkge1xuICAgICAgICAgIDtbdGhpcy5taW4sIHRoaXMubWF4XSA9IHJhbmdlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBnZXRWYWxpZGF0aW9ucygpIHtcbiAgICAgIGNvbnN0IHZhbGlkYXRpb25zID0ge31cbiAgICAgIGNvbnN0IHsgcmFuZ2UsIG1pbiwgbWF4LCBkZWNpbWFscywgc3RlcCB9ID0gdGhpc1xuICAgICAgaWYgKHJhbmdlKSB7XG4gICAgICAgIHZhbGlkYXRpb25zLnJhbmdlID0gcmFuZ2VcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChtaW4gIT0gbnVsbCkge1xuICAgICAgICAgIHZhbGlkYXRpb25zLm1pbiA9IG1pblxuICAgICAgICB9XG4gICAgICAgIGlmIChtYXggIT0gbnVsbCkge1xuICAgICAgICAgIHZhbGlkYXRpb25zLm1heCA9IG1heFxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoZGVjaW1hbHMgIT0gbnVsbCkge1xuICAgICAgICB2YWxpZGF0aW9ucy5kZWNpbWFscyA9IGRlY2ltYWxzXG4gICAgICB9IGVsc2UgaWYgKHN0ZXApIHtcbiAgICAgICAgY29uc3QgZGVjaW1hbHMgPSAoYCR7c3RlcH1gLnNwbGl0KCcuJylbMV0gfHwgJycpLmxlbmd0aFxuICAgICAgICBpZiAoZGVjaW1hbHMgPiAwKSB7XG4gICAgICAgICAgdmFsaWRhdGlvbnMuZGVjaW1hbHMgPSBkZWNpbWFsc1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZhbGlkYXRpb25zLmludGVnZXIgPSB0cnVlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmlzSW50ZWdlcikge1xuICAgICAgICB2YWxpZGF0aW9ucy5pbnRlZ2VyID0gdHJ1ZVxuICAgICAgfVxuICAgICAgcmV0dXJuIHZhbGlkYXRpb25zXG4gICAgfVxuICB9XG59XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuSW5wdXRGaWVsZC5kaXRvLW51bWJlcihcbiAgOmlkPVwiZGF0YVBhdGhcIlxuICByZWY9XCJlbGVtZW50XCJcbiAgdi1tb2RlbD1cImlucHV0VmFsdWVcIlxuICB0eXBlPVwibnVtYmVyXCJcbiAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gIDptaW49XCJtaW5cIlxuICA6bWF4PVwibWF4XCJcbiAgOnN0ZXA9XCJzdGVwVmFsdWVcIlxuKVxuICB0ZW1wbGF0ZSgjYWZ0ZXIpXG4gICAgYnV0dG9uLmRpdG8tYnV0dG9uLWNsZWFyLmRpdG8tYnV0dG9uLW92ZXJsYXkoXG4gICAgICB2LWlmPVwic2hvd0NsZWFyQnV0dG9uXCJcbiAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICAgIEBjbGljay5zdG9wPVwiY2xlYXJcIlxuICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b1R5cGVDb21wb25lbnQgZnJvbSAnLi4vRGl0b1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgTnVtYmVyTWl4aW4gZnJvbSAnLi4vbWl4aW5zL051bWJlck1peGluLmpzJ1xuaW1wb3J0IHsgSW5wdXRGaWVsZCB9IGZyb20gJ0BkaXRvanMvdWkvc3JjJ1xuXG5leHBvcnQgZGVmYXVsdCBEaXRvVHlwZUNvbXBvbmVudC5yZWdpc3RlcihcbiAgWydudW1iZXInLCAnaW50ZWdlciddLFxuICAvLyBAdnVlL2NvbXBvbmVudFxuICB7XG4gICAgbWl4aW5zOiBbTnVtYmVyTWl4aW5dLFxuICAgIGNvbXBvbmVudHM6IHsgSW5wdXRGaWVsZCB9LFxuICAgIG5hdGl2ZUZpZWxkOiB0cnVlLFxuICAgIHRleHRGaWVsZDogdHJ1ZSxcblxuICAgIGNvbXB1dGVkOiB7XG4gICAgICBpc0ludGVnZXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnR5cGUgPT09ICdpbnRlZ2VyJ1xuICAgICAgfVxuICAgIH1cbiAgfVxuKVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuLy8gT25seSBzaG93IHNwaW4gYnV0dG9ucyBpZiB0aGUgbnVtYmVyIGNvbXBvbmVudCBkZWZpbmVzIGEgc3RlcCBzaXplLlxuaW5wdXRbdHlwZT0nbnVtYmVyJ106bm90KFtzdGVwXSkge1xuICAmOjotd2Via2l0LWlubmVyLXNwaW4tYnV0dG9uLFxuICAmOjotd2Via2l0LW91dGVyLXNwaW4tYnV0dG9uIHtcbiAgICAtd2Via2l0LWFwcGVhcmFuY2U6IG5vbmU7XG4gICAgbWFyZ2luOiAwO1xuICB9XG59XG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbi5kaXRvLW9iamVjdChcbiAgdi1pZj1cImlzUmVhZHlcIlxuICA6aWQ9XCJkYXRhUGF0aFwiXG4pXG4gIC5kaXRvLW9iamVjdC1jb250ZW50KFxuICAgIHYtaWY9XCJvYmplY3REYXRhXCJcbiAgKVxuICAgIC8vLSBTdXBwb3J0IHRoZSBzYW1lIHJlbmRlcmluZyBvcHRpb25zIGFzIFR5cGVMaXN0OlxuICAgIERpdG9TY2hlbWFJbmxpbmVkKFxuICAgICAgdi1pZj1cImlzSW5saW5lZFwiXG4gICAgICA6bGFiZWw9XCJvYmplY3RMYWJlbFwiXG4gICAgICA6c2NoZW1hPVwiZ2V0SXRlbUZvcm1TY2hlbWEoc2NoZW1hLCBvYmplY3REYXRhLCBjb250ZXh0KVwiXG4gICAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgICA6ZGF0YT1cIm9iamVjdERhdGFcIlxuICAgICAgOm1ldGE9XCJuZXN0ZWRNZXRhXCJcbiAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkIHx8IGlzTG9hZGluZ1wiXG4gICAgICA6Y29sbGFwc2VkPVwiY29sbGFwc2VkXCJcbiAgICAgIDpjb2xsYXBzaWJsZT1cImNvbGxhcHNpYmxlXCJcbiAgICAgIDpkZWxldGFibGU9XCJvYmplY3REYXRhICYmIGRlbGV0YWJsZVwiXG4gICAgICA6ZWRpdGFibGU9XCJvYmplY3REYXRhICYmIGVkaXRhYmxlXCJcbiAgICAgIDplZGl0UGF0aD1cInBhdGhcIlxuICAgICAgOmFjY3VtdWxhdGVkQmFzaXM9XCJhY2N1bXVsYXRlZEJhc2lzXCJcbiAgICAgIEBkZWxldGU9XCJkZWxldGVJdGVtKG9iamVjdERhdGEpXCJcbiAgICApXG4gICAgY29tcG9uZW50KFxuICAgICAgdi1lbHNlLWlmPVwic2NoZW1hLmNvbXBvbmVudFwiXG4gICAgICA6aXM9XCJzY2hlbWEuY29tcG9uZW50XCJcbiAgICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICAgIDpkYXRhPVwib2JqZWN0RGF0YVwiXG4gICAgICA6bmVzdGVkPVwiZmFsc2VcIlxuICAgIClcbiAgICBzcGFuKFxuICAgICAgdi1lbHNlLWlmPVwicmVuZGVyXCJcbiAgICAgIHYtaHRtbD1cInJlbmRlcihnZXRDb250ZXh0KCkpXCJcbiAgICApXG4gICAgc3BhbihcbiAgICAgIHYtZWxzZVxuICAgICAgdi1odG1sPVwiZ2V0SXRlbUxhYmVsKHNjaGVtYSwgb2JqZWN0RGF0YSlcIlxuICAgIClcbiAgLy8tIE5PVEU6IGBEaXRvRWRpdEJ1dHRvbnNgIGhlcmUgb25seSBoYW5kbGUgdGhlIGNyZWF0ZSBidXR0b24gb3V0c2lkZSBvZiB0aGVcbiAgLy8tIHNjaGVtYSwgdGhlIGVkaXQgYnV0dG9ucyBpbnNpZGUgYXJlIGhhbmRsZWQgYnkgYERpdG9TY2hlbWFJbmxpbmVkYC5cbiAgRGl0b0VkaXRCdXR0b25zKFxuICAgIDpidXR0b25zPVwiYnV0dG9uU2NoZW1hc1wiXG4gICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgIDpkYXRhPVwib2JqZWN0RGF0YVwiXG4gICAgOnBhdGg9XCJwYXRoXCJcbiAgICA6bWV0YT1cIm1ldGFcIlxuICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZCB8fCBpc0xvYWRpbmdcIlxuICAgIDpjcmVhdGFibGU9XCJjcmVhdGFibGVcIlxuICAgIDpjcmVhdGVQYXRoPVwicGF0aFwiXG4gIClcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b1R5cGVDb21wb25lbnQgZnJvbSAnLi4vRGl0b1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgRGl0b0NvbnRleHQgZnJvbSAnLi4vRGl0b0NvbnRleHQuanMnXG5pbXBvcnQgU291cmNlTWl4aW4gZnJvbSAnLi4vbWl4aW5zL1NvdXJjZU1peGluLmpzJ1xuaW1wb3J0IHsgcmVzb2x2ZVNjaGVtYUNvbXBvbmVudCB9IGZyb20gJy4uL3V0aWxzL3NjaGVtYS5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9UeXBlQ29tcG9uZW50LnJlZ2lzdGVyKCdvYmplY3QnLCB7XG4gIG1peGluczogW1NvdXJjZU1peGluXSxcblxuICBnZXRTb3VyY2VUeXBlKHR5cGUpIHtcbiAgICAvLyBObyBuZWVkIGZvciB0cmFuc2Zvcm1hdGlvbiBoZXJlLiBTZWUgVHlwZVRyZWVMaXN0IGZvciBkZXRhaWxzLlxuICAgIHJldHVybiB0eXBlXG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBvYmplY3RMYWJlbCgpIHtcbiAgICAgIC8vIE9ubHkgc2hvdyBhIGxhYmVsIGlmIHRoZSBvYmplY3QgaXMgY29sbGFwc2libGUuXG4gICAgICByZXR1cm4gdGhpcy5jb2xsYXBzaWJsZVxuICAgICAgICA/IHRoaXMuZ2V0SXRlbUxhYmVsKHRoaXMuc2NoZW1hLCB0aGlzLm9iamVjdERhdGEsIHsgYXNPYmplY3Q6IHRydWUgfSlcbiAgICAgICAgOiBudWxsXG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBnZXRDb250ZXh0KCkge1xuICAgICAgcmV0dXJuIG5ldyBEaXRvQ29udGV4dCh0aGlzLCB7IGRhdGE6IHRoaXMub2JqZWN0RGF0YSB9KVxuICAgIH1cbiAgfSxcblxuICBhc3luYyBwcm9jZXNzU2NoZW1hKFxuICAgIGFwaSxcbiAgICBzY2hlbWEsXG4gICAgbmFtZSxcbiAgICByb3V0ZXMsXG4gICAgbGV2ZWwsXG4gICAgbmVzdGVkID0gZmFsc2UsXG4gICAgZmxhdHRlbiA9IGZhbHNlLFxuICAgIHByb2Nlc3MgPSBudWxsXG4gICkge1xuICAgIGF3YWl0IFByb21pc2UuYWxsKFtcbiAgICAgIHJlc29sdmVTY2hlbWFDb21wb25lbnQoc2NoZW1hKSxcbiAgICAgIFNvdXJjZU1peGluLnByb2Nlc3NTY2hlbWEoXG4gICAgICAgIGFwaSxcbiAgICAgICAgc2NoZW1hLFxuICAgICAgICBuYW1lLFxuICAgICAgICByb3V0ZXMsXG4gICAgICAgIGxldmVsLFxuICAgICAgICBuZXN0ZWQsXG4gICAgICAgIGZsYXR0ZW4sXG4gICAgICAgIHByb2Nlc3NcbiAgICAgIClcbiAgICBdKVxuICB9XG59KVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLmRpdG8tb2JqZWN0IHtcbiAgZGlzcGxheTogZmxleDtcbiAgYm9yZGVyOiAkYm9yZGVyLXN0eWxlO1xuICBib3JkZXItcmFkaXVzOiAkYm9yZGVyLXJhZGl1cztcbiAgbWFyZ2luOiAwO1xuICBwYWRkaW5nOiAkZm9ybS1zcGFjaW5nO1xuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICBtaW4td2lkdGg6IG1pbi1jb250ZW50O1xuXG4gIC5kaXRvLW9iamVjdC1jb250ZW50IHtcbiAgICBmbGV4OiAwIDEgMTAwJTtcbiAgfVxuXG4gID4gLmRpdG8tZWRpdC1idXR0b25zIHtcbiAgICBmbGV4OiAxIDAgMCU7XG4gICAgbWFyZ2luLWxlZnQ6ICRmb3JtLXNwYWNpbmc7XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCI8c2NyaXB0PlxuaW1wb3J0IERpdG9UeXBlQ29tcG9uZW50IGZyb20gJy4uL0RpdG9UeXBlQ29tcG9uZW50LmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b1R5cGVDb21wb25lbnQucmVnaXN0ZXIoJ3BhbmVsJywge1xuICBkZWZhdWx0VmFsdWU6ICgpID0+IHVuZGVmaW5lZCwgLy8gQ2FsbGJhY2sgdG8gb3ZlcnJpZGUgYGRlZmF1bHRWYWx1ZTogbnVsbGBcbiAgZXhjbHVkZVZhbHVlOiB0cnVlLFxuICBnZW5lcmF0ZUxhYmVsOiBmYWxzZSxcbiAgb21pdFNwYWNpbmc6IHRydWUsXG5cbiAgZ2V0UGFuZWxTY2hlbWEoYXBpLCBzY2hlbWEpIHtcbiAgICAvLyBGb3IgYSBUeXBlUGFuZWwsIHRoZSBjb21wb25lbnQgc2NoZW1hIGlzIGFsc28gdGhlIHBhbmVsIHNjaGVtYSwgYnV0XG4gICAgLy8gcmVtb3ZlIHRoZSBhZGRlZCBuYW1lLCBzbyBpdCBkb2Vzbid0IGdldCBhcHBlbmRlZCB0d2ljZSB0byBkYXRhLXBhdGguXG4gICAgY29uc3QgeyBuYW1lLCAuLi5wYW5lbCB9ID0gc2NoZW1hXG4gICAgcmV0dXJuIHBhbmVsXG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG5wcm9ncmVzcy5kaXRvLXByb2dyZXNzKFxuICA6aWQ9XCJkYXRhUGF0aFwiXG4gIHJlZj1cImVsZW1lbnRcIlxuICA6dmFsdWU9XCJwcm9ncmVzc1ZhbHVlXCJcbiAgOm1heD1cInByb2dyZXNzTWF4XCJcbiAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4pXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9UeXBlQ29tcG9uZW50IGZyb20gJy4uL0RpdG9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IE51bWJlck1peGluIGZyb20gJy4uL21peGlucy9OdW1iZXJNaXhpbi5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9UeXBlQ29tcG9uZW50LnJlZ2lzdGVyKCdwcm9ncmVzcycsIHtcbiAgbWl4aW5zOiBbTnVtYmVyTWl4aW5dLFxuICBjb21wdXRlZDoge1xuICAgIHByb2dyZXNzVmFsdWUoKSB7XG4gICAgICBsZXQgeyB2YWx1ZSwgcmFuZ2UsIHN0ZXAgfSA9IHRoaXNcbiAgICAgIGlmICh2YWx1ZSAhPT0gbnVsbCkge1xuICAgICAgICBpZiAocmFuZ2UpIHtcbiAgICAgICAgICB2YWx1ZSAtPSByYW5nZVswXVxuICAgICAgICB9XG4gICAgICAgIGlmIChzdGVwKSB7XG4gICAgICAgICAgdmFsdWUgPSBNYXRoLnJvdW5kKHZhbHVlIC8gc3RlcCkgKiBzdGVwXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhbHVlID0gJydcbiAgICAgIH1cbiAgICAgIHJldHVybiB2YWx1ZVxuICAgIH0sXG5cbiAgICBwcm9ncmVzc01heCgpIHtcbiAgICAgIGNvbnN0IHsgcmFuZ2UgfSA9IHRoaXNcbiAgICAgIHJldHVybiByYW5nZSA/IHJhbmdlWzFdIC0gcmFuZ2VbMF0gOiBudWxsXG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxudWwuZGl0by1yYWRpby1idXR0b25zKFxuICA6aWQ9XCJkYXRhUGF0aFwiXG4gIDpjbGFzcz1cImBkaXRvLWxheW91dC0ke3NjaGVtYS5sYXlvdXQgfHwgJ3ZlcnRpY2FsJ31gXCJcbilcbiAgbGkoXG4gICAgdi1mb3I9XCJvcHRpb24gaW4gb3B0aW9uc1wiXG4gIClcbiAgICBsYWJlbFxuICAgICAgaW5wdXQuZGl0by1yYWRpby1idXR0b24oXG4gICAgICAgIHJlZj1cImVsZW1lbnRcIlxuICAgICAgICB2LW1vZGVsPVwic2VsZWN0ZWRWYWx1ZVwiXG4gICAgICAgIHR5cGU9XCJyYWRpb1wiXG4gICAgICAgIDp2YWx1ZT1cImdldFZhbHVlRm9yT3B0aW9uKG9wdGlvbilcIlxuICAgICAgICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgICAgIClcbiAgICAgIHwge3sgZ2V0TGFiZWxGb3JPcHRpb24ob3B0aW9uKSB9fVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvVHlwZUNvbXBvbmVudCBmcm9tICcuLi9EaXRvVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCBPcHRpb25zTWl4aW4gZnJvbSAnLi4vbWl4aW5zL09wdGlvbnNNaXhpbi5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9UeXBlQ29tcG9uZW50LnJlZ2lzdGVyKCdyYWRpbycsIHtcbiAgbWl4aW5zOiBbT3B0aW9uc01peGluXSxcblxuICBuYXRpdmVGaWVsZDogdHJ1ZSxcbiAgZGVmYXVsdFdpZHRoOiAnYXV0bydcbn0pXG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by1yYWRpby1idXR0b25zIHtcbiAgbGFiZWwge1xuICAgIEBleHRlbmQgJWlucHV0LWJvcmRlcmxlc3M7XG4gIH1cblxuICAuZGl0by1yYWRpby1idXR0b24ge1xuICAgIG1hcmdpbi1yaWdodDogJGZvcm0tc3BhY2luZztcbiAgfVxufVxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4uZGl0by1zZWN0aW9uKDpjbGFzcz1cInsgJ2RpdG8tc2VjdGlvbi0tbGFiZWxsZWQnOiBoYXNMYWJlbCB9XCIpXG4gIERpdG9TY2hlbWFJbmxpbmVkLmRpdG8tc2VjdGlvbl9fc2NoZW1hKFxuICAgIDpsYWJlbD1cImxhYmVsXCJcbiAgICA6c2NoZW1hPVwiZ2V0SXRlbUZvcm1TY2hlbWEoc2NoZW1hLCBpdGVtLCBjb250ZXh0KVwiXG4gICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgIDpkYXRhPVwiaXRlbVwiXG4gICAgOm1ldGE9XCJtZXRhXCJcbiAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgOnBhZGRpbmc9XCJoYXNMYWJlbCA/ICduZXN0ZWQnIDogJ2lubGluZWQnXCJcbiAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgOmNvbGxhcHNlZD1cImNvbGxhcHNlZFwiXG4gICAgOmNvbGxhcHNpYmxlPVwiY29sbGFwc2libGVcIlxuICAgIDpsYWJlbE5vZGU9XCJsYWJlbE5vZGVcIlxuICApXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9UeXBlQ29tcG9uZW50IGZyb20gJy4uL0RpdG9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IHsgZ2V0U2NoZW1hQWNjZXNzb3IgfSBmcm9tICcuLi91dGlscy9hY2Nlc3Nvci5qcydcbmltcG9ydCB7IGdldEl0ZW1Gb3JtU2NoZW1hLCBwcm9jZXNzU2NoZW1hQ29tcG9uZW50cyB9IGZyb20gJy4uL3V0aWxzL3NjaGVtYS5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9UeXBlQ29tcG9uZW50LnJlZ2lzdGVyKCdzZWN0aW9uJywge1xuICBkZWZhdWx0VmFsdWU6ICgpID0+IHVuZGVmaW5lZCwgLy8gQ2FsbGJhY2sgdG8gb3ZlcnJpZGUgYGRlZmF1bHRWYWx1ZTogbnVsbGBcbiAgaWdub3JlTWlzc2luZ1ZhbHVlOiBzY2hlbWEgPT4gIXNjaGVtYS5uZXN0ZWQgJiYgISgnZGVmYXVsdCcgaW4gc2NoZW1hKSxcbiAgZGVmYXVsdE5lc3RlZDogZmFsc2UsXG4gIGdlbmVyYXRlTGFiZWw6IGZhbHNlLFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgaXRlbSgpIHtcbiAgICAgIHJldHVybiB0aGlzLm5lc3RlZCA/IHRoaXMudmFsdWUgOiB0aGlzLmRhdGFcbiAgICB9LFxuXG4gICAgaGFzTGFiZWwoKSB7XG4gICAgICByZXR1cm4gISF0aGlzLnNjaGVtYS5sYWJlbFxuICAgIH0sXG5cbiAgICBjb2xsYXBzaWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ2NvbGxhcHNpYmxlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IG51bGwsIC8vIHNvIHRoYXQgYD8/YCBiZWxvdyBjYW4gZG8gaXRzIHRoaW5nOlxuICAgICAgZ2V0KGNvbGxhcHNpYmxlKSB7XG4gICAgICAgIHJldHVybiAhIShjb2xsYXBzaWJsZSA/PyB0aGlzLmNvbGxhcHNlZCAhPT0gbnVsbClcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIGNvbGxhcHNlZDogZ2V0U2NoZW1hQWNjZXNzb3IoJ2NvbGxhcHNlZCcsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBudWxsXG4gICAgfSlcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZ2V0SXRlbUZvcm1TY2hlbWFcbiAgfSxcblxuICBhc3luYyBwcm9jZXNzU2NoZW1hKGFwaSwgc2NoZW1hLCBuYW1lLCByb3V0ZXMsIGxldmVsKSB7XG4gICAgLy8gUHJvY2VzcyBzZWN0aW9uIGNvbXBvbmVudHMgc28gdGhlaXIgZm9ybXMgZ2V0IHJlc29sdmVkIHRvby5cbiAgICBhd2FpdCBwcm9jZXNzU2NoZW1hQ29tcG9uZW50cyhhcGksIHNjaGVtYSwgcm91dGVzLCBsZXZlbClcbiAgfVxufSlcbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5cbi5kaXRvLXNlY3Rpb24ge1xuICAmLS1sYWJlbGxlZCB7XG4gICAgYm9yZGVyOiAkYm9yZGVyLXdpZHRoIHNvbGlkIHRyYW5zcGFyZW50O1xuICAgIGJvcmRlci1yYWRpdXM6ICRib3JkZXItcmFkaXVzO1xuICAgIHRyYW5zaXRpb246IGJvcmRlci1jb2xvciAwLjJzICRlYXNlLW91dC1xdWFydDtcbiAgICBtYXJnaW4tdG9wOiAkZm9ybS1zcGFjaW5nLWhhbGY7XG5cbiAgICAmOmhhcyguZGl0by1zY2hlbWEtLW9wZW4pIHtcbiAgICAgIGJvcmRlci1jb2xvcjogJGJvcmRlci1jb2xvcjtcbiAgICB9XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuLy8tIE5lc3RpbmcgaXMgbmVlZGVkIHRvIG1ha2UgYW4gYXJyb3cgYXBwZWFyIG92ZXIgdGhlIHNlbGVjdCBpdGVtOlxuLmRpdG8tc2VsZWN0XG4gIC5kaXRvLXNlbGVjdF9faW5uZXJcbiAgICBzZWxlY3QoXG4gICAgICA6aWQ9XCJkYXRhUGF0aFwiXG4gICAgICByZWY9XCJlbGVtZW50XCJcbiAgICAgIHYtbW9kZWw9XCJzZWxlY3RlZFZhbHVlXCJcbiAgICAgIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICAgICAgQG1vdXNlZG93bj1cInBvcHVsYXRlID0gdHJ1ZVwiXG4gICAgICBAZm9jdXM9XCJwb3B1bGF0ZSA9IHRydWVcIlxuICAgIClcbiAgICAgIHRlbXBsYXRlKFxuICAgICAgICB2LWlmPVwicG9wdWxhdGVcIlxuICAgICAgKVxuICAgICAgICB0ZW1wbGF0ZShcbiAgICAgICAgICB2LWZvcj1cIm9wdGlvbiBpbiBvcHRpb25zXCJcbiAgICAgICAgKVxuICAgICAgICAgIG9wdGdyb3VwKFxuICAgICAgICAgICAgdi1pZj1cImdyb3VwQnlcIlxuICAgICAgICAgICAgOmxhYmVsPVwib3B0aW9uW2dyb3VwQnlMYWJlbF1cIlxuICAgICAgICAgIClcbiAgICAgICAgICAgIG9wdGlvbihcbiAgICAgICAgICAgICAgdi1mb3I9XCJvcHQgaW4gb3B0aW9uW2dyb3VwQnlPcHRpb25zXVwiXG4gICAgICAgICAgICAgIDp2YWx1ZT1cImdldFZhbHVlRm9yT3B0aW9uKG9wdClcIlxuICAgICAgICAgICAgKSB7eyBnZXRMYWJlbEZvck9wdGlvbihvcHQpIH19XG4gICAgICAgICAgb3B0aW9uKFxuICAgICAgICAgICAgdi1lbHNlXG4gICAgICAgICAgICA6dmFsdWU9XCJnZXRWYWx1ZUZvck9wdGlvbihvcHRpb24pXCJcbiAgICAgICAgICApIHt7IGdldExhYmVsRm9yT3B0aW9uKG9wdGlvbikgfX1cbiAgICAgIHRlbXBsYXRlKFxuICAgICAgICB2LWVsc2UtaWY9XCJzZWxlY3RlZE9wdGlvblwiXG4gICAgICApXG4gICAgICAgIG9wdGlvbig6dmFsdWU9XCJzZWxlY3RlZFZhbHVlXCIpIHt7IGdldExhYmVsRm9yT3B0aW9uKHNlbGVjdGVkT3B0aW9uKSB9fVxuICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbi1jbGVhci5kaXRvLWJ1dHRvbi1vdmVybGF5KFxuICAgICAgdi1pZj1cInNob3dDbGVhckJ1dHRvblwiXG4gICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgICBAY2xpY2s9XCJjbGVhclwiXG4gICAgKVxuICAvLy0gRWRpdCBidXR0b24gaXMgbmV2ZXIgZGlzYWJsZWQsIGV2ZW4gaWYgdGhlIGZpZWxkIGlzIGRpc2FibGVkLlxuICBEaXRvRWRpdEJ1dHRvbnMoXG4gICAgdi1pZj1cImVkaXRhYmxlXCJcbiAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgOmRhdGE9XCJkYXRhXCJcbiAgICA6bWV0YT1cIm1ldGFcIlxuICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICA6ZGlzYWJsZWQ9XCJmYWxzZVwiXG4gICAgOmVkaXRhYmxlPVwiZWRpdGFibGVcIlxuICAgIDplZGl0UGF0aD1cImVkaXRQYXRoXCJcbiAgKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvVHlwZUNvbXBvbmVudCBmcm9tICcuLi9EaXRvVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCBPcHRpb25zTWl4aW4gZnJvbSAnLi4vbWl4aW5zL09wdGlvbnNNaXhpbi5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9UeXBlQ29tcG9uZW50LnJlZ2lzdGVyKCdzZWxlY3QnLCB7XG4gIG1peGluczogW09wdGlvbnNNaXhpbl0sXG5cbiAgbmF0aXZlRmllbGQ6IHRydWUsXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgLy8gRGlzYWJsZSBsYXp5LXBvcHVsYXRpb24gZm9yIG5vdy5cbiAgICAgIC8vIFRPRE86IFNldCB0byBgZmFsc2VgIE9uY2UgbGluZXRvIGUyZSB0ZXN0cyBhZGRyZXNzIHRoZWlyIGlzc3Vlcy5cbiAgICAgIHBvcHVsYXRlOiB0cnVlXG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLy8gVE9ETzogTW92ZSB0byBkaXRvLXVpXG4kc2VsZWN0LWFycm93LXJpZ2h0OiBjYWxjKCgkc2VsZWN0LWFycm93LXdpZHRoIC0gJHNlbGVjdC1hcnJvdy1zaXplKSAvIDIpO1xuXG4uZGl0by1zZWxlY3Qge1xuICBkaXNwbGF5OiBpbmxpbmUtZmxleDtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuXG4gIHNlbGVjdCB7XG4gICAgQGV4dGVuZCAlaW5wdXQ7XG5cbiAgICBwYWRkaW5nLXJpZ2h0OiAkc2VsZWN0LWFycm93LXdpZHRoO1xuICB9XG5cbiAgLy8gYCZfX19pbm5lcmAgaXMgbmVlZGVkIHRvIG1ha2UgdGhlIGVkaXQgYnV0dG9ucyBhcHBlYXIgdG8gdGhlIHJpZ2h0IG9mIHRoZVxuICAvLyBzZWxlY3Q6XG4gICZfX2lubmVyIHtcbiAgICBmbGV4OiAxO1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcblxuICAgICY6OmJlZm9yZSB7XG4gICAgICBAaW5jbHVkZSBhcnJvdygkc2VsZWN0LWFycm93LXNpemUpO1xuXG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICBib3R0b206ICRzZWxlY3QtYXJyb3ctYm90dG9tO1xuICAgICAgcmlnaHQ6IGNhbGMoI3skc2VsZWN0LWFycm93LXJpZ2h0fSArICN7JGJvcmRlci13aWR0aH0pO1xuICAgIH1cbiAgfVxuXG4gIC5kaXRvLWVkaXQtYnV0dG9ucyB7XG4gICAgbWFyZ2luLWxlZnQ6ICRmb3JtLXNwYWNpbmctaGFsZjtcbiAgfVxuXG4gIC8vIEhhbmRsZSAuZGl0by13aWR0aC1maWxsIHNlcGFyYXRlbHkgZHVlIHRvIHJlcXVpcmVkIG5lc3Rpbmcgb2Ygc2VsZWN0OlxuICAmLmRpdG8td2lkdGgtZmlsbCB7XG4gICAgc2VsZWN0IHtcbiAgICAgIHdpZHRoOiAxMDAlO1xuICAgIH1cbiAgfVxuXG4gICYuZGl0by1kaXNhYmxlZDo6YWZ0ZXIge1xuICAgIGJvcmRlci1jb2xvcjogJGJvcmRlci1jb2xvcjtcbiAgfVxufVxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4uZGl0by1zbGlkZXJcbiAgaW5wdXQuZGl0by1yYW5nZShcbiAgICA6aWQ9XCJkYXRhUGF0aFwiXG4gICAgcmVmPVwiZWxlbWVudFwiXG4gICAgdi1tb2RlbD1cImlucHV0VmFsdWVcIlxuICAgIHR5cGU9XCJyYW5nZVwiXG4gICAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gICAgOm1pbj1cIm1pblwiXG4gICAgOm1heD1cIm1heFwiXG4gICAgOnN0ZXA9XCJzdGVwVmFsdWVcIlxuICApXG4gIElucHV0RmllbGQuZGl0by1udW1iZXIoXG4gICAgdi1pZj1cImlucHV0XCJcbiAgICB2LW1vZGVsPVwiaW5wdXRWYWx1ZVwiXG4gICAgdHlwZT1cIm51bWJlclwiXG4gICAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gICAgOm1pbj1cIm1pblwiXG4gICAgOm1heD1cIm1heFwiXG4gICAgOnN0ZXA9XCJzdGVwVmFsdWVcIlxuICApXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9UeXBlQ29tcG9uZW50IGZyb20gJy4uL0RpdG9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IE51bWJlck1peGluIGZyb20gJy4uL21peGlucy9OdW1iZXJNaXhpbi5qcydcbmltcG9ydCB7IGdldFNjaGVtYUFjY2Vzc29yIH0gZnJvbSAnLi4vdXRpbHMvYWNjZXNzb3IuanMnXG5pbXBvcnQgeyBJbnB1dEZpZWxkIH0gZnJvbSAnQGRpdG9qcy91aS9zcmMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvVHlwZUNvbXBvbmVudC5yZWdpc3Rlcignc2xpZGVyJywge1xuICBtaXhpbnM6IFtOdW1iZXJNaXhpbl0sXG4gIGNvbXBvbmVudHM6IHsgSW5wdXRGaWVsZCB9LFxuICBuYXRpdmVGaWVsZDogdHJ1ZSxcblxuICBjb21wdXRlZDoge1xuICAgIC8vIFRPRE86IFJlbmFtZSB0byBgc2hvd0lucHV0YD9cbiAgICBpbnB1dDogZ2V0U2NoZW1hQWNjZXNzb3IoJ2lucHV0Jywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IHRydWVcbiAgICB9KVxuICB9XG59KVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLmRpdG8tc2xpZGVyIHtcbiAgQGV4dGVuZCAlaW5wdXQ7XG5cbiAgZGlzcGxheTogZmxleDtcblxuICAuZGl0by1yYW5nZSB7XG4gICAgZmxleDogYXV0bztcbiAgICBoZWlnaHQ6IGNhbGMoMWVtICogdmFyKC0tbGluZS1oZWlnaHQpKTtcbiAgfVxuXG4gIC5kaXRvLW51bWJlciB7XG4gICAgYm9yZGVyOiAwO1xuICAgIHBhZGRpbmc6IDA7XG4gICAgdGV4dC1hbGlnbjogcmlnaHQ7XG4gICAgZm9udC12YXJpYW50LW51bWVyaWM6IHRhYnVsYXItbnVtcztcbiAgfVxufVxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG5Td2l0Y2hCdXR0b24uZGl0by1zd2l0Y2goXG4gIDppZD1cImRhdGFQYXRoXCJcbiAgcmVmPVwiZWxlbWVudFwiXG4gIHYtbW9kZWw9XCJ2YWx1ZVwiXG4gIDpsYWJlbHM9XCJsYWJlbHNcIlxuICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbilcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b1R5cGVDb21wb25lbnQgZnJvbSAnLi4vRGl0b1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgeyBTd2l0Y2hCdXR0b24gfSBmcm9tICdAZGl0b2pzL3VpL3NyYydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9UeXBlQ29tcG9uZW50LnJlZ2lzdGVyKCdzd2l0Y2gnLCB7XG4gIGRlZmF1bHRWYWx1ZTogZmFsc2UsXG4gIGRlZmF1bHRXaWR0aDogJ2F1dG8nLFxuXG4gIGNvbXBvbmVudHM6IHtcbiAgICBTd2l0Y2hCdXR0b25cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIGxhYmVscygpIHtcbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYS5sYWJlbHNcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by1zd2l0Y2gge1xuICAuZGl0by1zd2l0Y2gtbGFiZWwge1xuICAgIGZvbnQtc2l6ZTogJGZvbnQtc2l6ZS1zbWFsbDtcbiAgfVxufVxuPC9zdHlsZT5cbiIsImltcG9ydCB7IGlzU3RyaW5nIH0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCB7IGdldERlZmF1bHRWYWx1ZSB9IGZyb20gJy4uL3V0aWxzL3NjaGVtYS5qcydcbmltcG9ydCB7IGdldFNjaGVtYUFjY2Vzc29yIH0gZnJvbSAnLi4vdXRpbHMvYWNjZXNzb3IuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCB7XG4gIGNvbXB1dGVkOiB7XG4gICAgdHJpbTogZ2V0U2NoZW1hQWNjZXNzb3IoJ3RyaW0nLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9KVxuICB9LFxuXG4gIHByb2Nlc3NWYWx1ZShzY2hlbWEsIHZhbHVlKSB7XG4gICAgaWYgKHNjaGVtYS50cmltICYmIHZhbHVlICE9IG51bGwgJiYgaXNTdHJpbmcodmFsdWUpKSB7XG4gICAgICAvLyBUZXh0IGZpZWxkcyBkb24ndCBuZWNlc3NhcmlseSBoYXZlIGEgYFN0cmluZ2AgdmFsdWUgd2hlbiBgZm9ybWF0KClgXG4gICAgICAvLyB3aXRob3V0IGBwYXJzZSgpYCBpcyB1c2VkLlxuICAgICAgdmFsdWUgPSB2YWx1ZS50cmltKClcbiAgICB9XG4gICAgaWYgKHZhbHVlID09PSAnJykge1xuICAgICAgdmFsdWUgPSBnZXREZWZhdWx0VmFsdWUoc2NoZW1hKVxuICAgIH1cbiAgICByZXR1cm4gdmFsdWVcbiAgfVxufVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbklucHV0RmllbGQuZGl0by10ZXh0KFxuICA6aWQ9XCJkYXRhUGF0aFwiXG4gIHJlZj1cImVsZW1lbnRcIlxuICB2LW1vZGVsPVwiaW5wdXRWYWx1ZVwiXG4gIDp0eXBlPVwiaW5wdXRUeXBlXCJcbiAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4pXG4gIHRlbXBsYXRlKCNhZnRlcilcbiAgICBidXR0b24uZGl0by1idXR0b24tY2xlYXIuZGl0by1idXR0b24tb3ZlcmxheShcbiAgICAgIHYtaWY9XCJzaG93Q2xlYXJCdXR0b25cIlxuICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgICAgQGNsaWNrLnN0b3A9XCJjbGVhclwiXG4gICAgKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvVHlwZUNvbXBvbmVudCBmcm9tICcuLi9EaXRvVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCBUZXh0TWl4aW4gZnJvbSAnLi4vbWl4aW5zL1RleHRNaXhpbidcbmltcG9ydCB7IElucHV0RmllbGQgfSBmcm9tICdAZGl0b2pzL3VpL3NyYydcblxuY29uc3QgbWFza2VkUGFzc3dvcmQgPSAnKioqKioqKioqKioqKioqKidcblxuZXhwb3J0IGRlZmF1bHQgRGl0b1R5cGVDb21wb25lbnQucmVnaXN0ZXIoXG4gIFtcbiAgICAndGV4dCcsXG4gICAgJ2VtYWlsJyxcbiAgICAndXJsJyxcbiAgICAnaG9zdG5hbWUnLFxuICAgICdkb21haW4nLFxuICAgICd0ZWwnLFxuICAgICdwYXNzd29yZCcsXG4gICAgJ2NyZWRpdGNhcmQnXG4gIF0sXG4gIC8vIEB2dWUvY29tcG9uZW50XG4gIHtcbiAgICBtaXhpbnM6IFtUZXh0TWl4aW5dLFxuICAgIGNvbXBvbmVudHM6IHsgSW5wdXRGaWVsZCB9LFxuICAgIG5hdGl2ZUZpZWxkOiB0cnVlLFxuICAgIHRleHRGaWVsZDogdHJ1ZSxcbiAgICBpZ25vcmVNaXNzaW5nVmFsdWU6IHNjaGVtYSA9PiBzY2hlbWEudHlwZSA9PT0gJ3Bhc3N3b3JkJyxcblxuICAgIGNvbXB1dGVkOiB7XG4gICAgICBpbnB1dFR5cGUoKSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAge1xuICAgICAgICAgICAgY3JlZGl0Y2FyZDogJ3RleHQnLFxuICAgICAgICAgICAgaG9zdG5hbWU6ICd0ZXh0JyxcbiAgICAgICAgICAgIGRvbWFpbjogJ3RleHQnXG4gICAgICAgICAgfVt0aGlzLnR5cGVdIHx8XG4gICAgICAgICAgdGhpcy50eXBlXG4gICAgICAgIClcbiAgICAgIH0sXG5cbiAgICAgIGlucHV0VmFsdWU6IHtcbiAgICAgICAgZ2V0KCkge1xuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICB0aGlzLnR5cGUgPT09ICdwYXNzd29yZCcgJiZcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICAgIXRoaXMuZm9jdXNlZFxuICAgICAgICAgIClcbiAgICAgICAgICAgID8gbWFza2VkUGFzc3dvcmRcbiAgICAgICAgICAgIDogdGhpcy52YWx1ZVxuICAgICAgICB9LFxuXG4gICAgICAgIHNldCh2YWx1ZSkge1xuICAgICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIG1ldGhvZHM6IHtcbiAgICAgIGdldFZhbGlkYXRpb25zKCkge1xuICAgICAgICBjb25zdCBydWxlID0ge1xuICAgICAgICAgIGVtYWlsOiAnZW1haWwnLFxuICAgICAgICAgIHVybDogJ3VybCcsXG4gICAgICAgICAgaG9zdG5hbWU6ICdob3N0bmFtZScsXG4gICAgICAgICAgZG9tYWluOiAnZG9tYWluJyxcbiAgICAgICAgICBwYXNzd29yZDogJ3Bhc3N3b3JkJyxcbiAgICAgICAgICBjcmVkaXRjYXJkOiAnY3JlZGl0Y2FyZCdcbiAgICAgICAgfVt0aGlzLnR5cGVdXG4gICAgICAgIHJldHVybiBydWxlID8geyBbcnVsZV06IHRydWUgfSA6IHt9XG4gICAgICB9XG4gICAgfVxuICB9XG4pXG48L3NjcmlwdD5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG50ZXh0YXJlYS5kaXRvLXRleHRhcmVhLmRpdG8taW5wdXQoXG4gIDppZD1cImRhdGFQYXRoXCJcbiAgcmVmPVwiZWxlbWVudFwiXG4gIHYtbW9kZWw9XCJ2YWx1ZVwiXG4gIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICA6cm93cz1cImxpbmVzXCJcbiAgOmNsYXNzPVwieyAnZGl0by1yZXNpemFibGUnOiByZXNpemFibGUgfVwiXG4pXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9UeXBlQ29tcG9uZW50IGZyb20gJy4uL0RpdG9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IFRleHRNaXhpbiBmcm9tICcuLi9taXhpbnMvVGV4dE1peGluJ1xuaW1wb3J0IHsgZ2V0U2NoZW1hQWNjZXNzb3IgfSBmcm9tICcuLi91dGlscy9hY2Nlc3Nvci5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9UeXBlQ29tcG9uZW50LnJlZ2lzdGVyKCd0ZXh0YXJlYScsIHtcbiAgbWl4aW5zOiBbVGV4dE1peGluXSxcbiAgbmF0aXZlRmllbGQ6IHRydWUsXG4gIHRleHRGaWVsZDogdHJ1ZSxcblxuICBjb21wdXRlZDoge1xuICAgIGxpbmVzKCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hLmxpbmVzIHx8IDRcbiAgICB9LFxuXG4gICAgcmVzaXphYmxlOiBnZXRTY2hlbWFBY2Nlc3NvcigncmVzaXphYmxlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfSlcbiAgfVxufSlcbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5cbi5kaXRvLXRleHRhcmVhIHtcbiAgZGlzcGxheTogYmxvY2s7XG4gIHJlc2l6ZTogbm9uZTtcbiAgbWluLWhlaWdodDogY2FsYygxZW0gKiB2YXIoLS1saW5lLWhlaWdodCkgKyAjezIgKiAkaW5wdXQtcGFkZGluZy12ZXJ9KTtcblxuICAmLmRpdG8tcmVzaXphYmxlIHtcbiAgICByZXNpemU6IHZlcnRpY2FsO1xuICB9XG59XG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbi5kaXRvLXRyZWUtbGlzdFxuICBEaXRvU2NvcGVzKFxuICAgIHYtaWY9XCJzY29wZXNcIlxuICAgIDpxdWVyeT1cInF1ZXJ5XCJcbiAgICA6c2NvcGVzPVwic2NvcGVzXCJcbiAgKVxuICAuZGl0by10cmVlLXBhbmVsXG4gICAgRGl0b1RyZWVJdGVtKFxuICAgICAgOnNjaGVtYT1cInRyZWVTY2hlbWFcIlxuICAgICAgOmRhdGFQYXRoPVwidHJlZURhdGFQYXRoXCJcbiAgICAgIDpkYXRhPVwidHJlZURhdGFcIlxuICAgICAgOmRyYWdnYWJsZT1cImRyYWdnYWJsZVwiXG4gICAgICA6b3Blbj1cInRydWVcIlxuICAgIClcbiAgICAuZGl0by10cmVlLWZvcm0tY29udGFpbmVyKFxuICAgICAgdi1pZj1cImhhc0VkaXRhYmxlRm9ybXNcIlxuICAgIClcbiAgICAgIC8vLSBJbmNsdWRlIGEgcm91dGVyLXZpZXcgZm9yIHRoZSBvcHRpb25hbCBEaXRvRm9ybUlubGluZWRcbiAgICAgIFJvdXRlclZpZXdcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b1R5cGVDb21wb25lbnQgZnJvbSAnLi4vRGl0b1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgU291cmNlTWl4aW4gZnJvbSAnLi4vbWl4aW5zL1NvdXJjZU1peGluLmpzJ1xuaW1wb3J0IHtcbiAgaGFzRm9ybVNjaGVtYSxcbiAgZ2V0Rm9ybVNjaGVtYXMsXG4gIHJlc29sdmVTY2hlbWFDb21wb25lbnRzXG59IGZyb20gJy4uL3V0aWxzL3NjaGVtYS5qcydcblxuZXhwb3J0IGRlZmF1bHQgRGl0b1R5cGVDb21wb25lbnQucmVnaXN0ZXIoXG4gIFsndHJlZS1saXN0JywgJ3RyZWUtb2JqZWN0J10sXG4gIC8vIEB2dWUvY29tcG9uZW50XG4gIHtcbiAgICBtaXhpbnM6IFtTb3VyY2VNaXhpbl0sXG5cbiAgICBwcm92aWRlKCkge1xuICAgICAgcmV0dXJuIHsgY29udGFpbmVyOiB0aGlzIH1cbiAgICB9LFxuXG4gICAgZ2V0U291cmNlVHlwZSh0eXBlKSB7XG4gICAgICByZXR1cm4gdHlwZSA9PT0gJ3RyZWUtb2JqZWN0JyA/ICdvYmplY3QnIDogJ2xpc3QnXG4gICAgfSxcblxuICAgIGNvbXB1dGVkOiB7XG4gICAgICBwYXRoKCkge1xuICAgICAgICAvLyBBY2Nlc3NlZCBmcm9tIERpdG9UcmVlSXRlbSB0aHJvdWdoIGBjb250YWluZXIucGF0aGA6XG4gICAgICAgIHJldHVybiB0aGlzLmZvcm1Db21wb25lbnQ/LnBhdGhcbiAgICAgIH0sXG5cbiAgICAgIGVkaXRQYXRoKCkge1xuICAgICAgICAvLyBBY2Nlc3NlZCBmcm9tIERpdG9UcmVlSXRlbSB0aHJvdWdoIGBjb250YWluZXIuZWRpdFBhdGhgOlxuICAgICAgICByZXR1cm4gdGhpcy4kcm91dGUucGF0aC5zbGljZSh0aGlzLnBhdGg/Lmxlbmd0aClcbiAgICAgIH0sXG5cbiAgICAgIHRyZWVEYXRhKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5pc0xpc3RTb3VyY2VcbiAgICAgICAgICA/IHsgW3RoaXMubmFtZV06IHRoaXMudmFsdWUgfVxuICAgICAgICAgIDogdGhpcy52YWx1ZVxuICAgICAgfSxcblxuICAgICAgdHJlZURhdGFQYXRoKCkge1xuICAgICAgICAvLyBSZW1vdmUgYG5hbWVgIGZyb20gYGRhdGFQYXRoYCwgYXMgaXQgaXMgYWRkZWRcbiAgICAgICAgLy8gdG8gYHRyZWVEYXRhYCBhbmQgYHRyZWVTY2hlbWFgXG4gICAgICAgIHJldHVybiB0aGlzLmlzTGlzdFNvdXJjZVxuICAgICAgICAgID8gdGhpcy5kYXRhUGF0aC5zbGljZSgwLCB0aGlzLmRhdGFQYXRoLmxlbmd0aCAtIHRoaXMubmFtZS5sZW5ndGgpXG4gICAgICAgICAgOiB0aGlzLmRhdGFQYXRoXG4gICAgICB9LFxuXG4gICAgICB0cmVlU2NoZW1hKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5pc0xpc3RTb3VyY2VcbiAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgY2hpbGRyZW46IHtcbiAgICAgICAgICAgICAgICBuYW1lOiB0aGlzLm5hbWUsXG4gICAgICAgICAgICAgICAgLi4udGhpcy5zY2hlbWFcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIDogdGhpcy5zY2hlbWFcbiAgICAgIH0sXG5cbiAgICAgIGhhc0VkaXRhYmxlRm9ybXMoKSB7XG4gICAgICAgIGNvbnN0IGhhc0VkaXRhYmxlRm9ybXMgPSBzY2hlbWEgPT4ge1xuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICBoYXNGb3JtU2NoZW1hKHNjaGVtYSkgJiYgKFxuICAgICAgICAgICAgICB0aGlzLmdldFNjaGVtYVZhbHVlKCdlZGl0YWJsZScsIHtcbiAgICAgICAgICAgICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgIHNjaGVtYVxuICAgICAgICAgICAgICB9KSB8fFxuICAgICAgICAgICAgICBzY2hlbWEuY2hpbGRyZW4gJiZcbiAgICAgICAgICAgICAgaGFzRWRpdGFibGVGb3JtcyhzY2hlbWEuY2hpbGRyZW4pXG4gICAgICAgICAgICApXG4gICAgICAgICAgKVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBoYXNFZGl0YWJsZUZvcm1zKHRoaXMuc2NoZW1hKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBhc3luYyBwcm9jZXNzU2NoZW1hKFxuICAgICAgYXBpLFxuICAgICAgc2NoZW1hLFxuICAgICAgbmFtZSxcbiAgICAgIHJvdXRlcyxcbiAgICAgIGxldmVsLFxuICAgICAgbmVzdGVkID0gdHJ1ZSxcbiAgICAgIGZsYXR0ZW4gPSBmYWxzZSxcbiAgICAgIHByb2Nlc3MgPSBudWxsXG4gICAgKSB7XG4gICAgICBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgICAgIHJlc29sdmVTY2hlbWFDb21wb25lbnRzKHNjaGVtYS5wcm9wZXJ0aWVzKSxcbiAgICAgICAgU291cmNlTWl4aW4ucHJvY2Vzc1NjaGVtYShcbiAgICAgICAgICBhcGksXG4gICAgICAgICAgc2NoZW1hLFxuICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgcm91dGVzLFxuICAgICAgICAgIGxldmVsLFxuICAgICAgICAgIG5lc3RlZCxcbiAgICAgICAgICBmbGF0dGVuLFxuICAgICAgICAgIC8vIFBhc3MgcHJvY2VzcygpIHRvIGFkZCBtb3JlIHJvdXRlcyB0byBjaGlsZFJvdXRlczpcbiAgICAgICAgICAoY2hpbGRSb3V0ZXMsIGxldmVsKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB7IGNoaWxkcmVuIH0gPSBzY2hlbWFcbiAgICAgICAgICAgIGlmIChjaGlsZHJlbikge1xuICAgICAgICAgICAgICAvLyBBZGQgYHR5cGVgIHRvIHRoZSBuZXN0ZWQgdHJlZSBsaXN0LlxuICAgICAgICAgICAgICBjaGlsZHJlbi50eXBlID0gJ3RyZWUtbGlzdCdcbiAgICAgICAgICAgICAgLy8gUmVjdXJzaXZlbHkgY2FsbCBgcHJvY2Vzc1NjaGVtYSgpYCBmb3IgdGhlIG5lc3RlZCB0cmVlIGxpc3Q6XG4gICAgICAgICAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NTY2hlbWEoXG4gICAgICAgICAgICAgICAgYXBpLFxuICAgICAgICAgICAgICAgIGNoaWxkcmVuLFxuICAgICAgICAgICAgICAgIGNoaWxkcmVuLm5hbWUsXG4gICAgICAgICAgICAgICAgY2hpbGRSb3V0ZXMsXG4gICAgICAgICAgICAgICAgbGV2ZWwsXG4gICAgICAgICAgICAgICAgbmVzdGVkLFxuICAgICAgICAgICAgICAgIHRydWUsIC8vIFBhc3MgYHRydWVgIGZvciBgZmxhdHRlbmAgaW4gdHJlZSBsaXN0cy5cbiAgICAgICAgICAgICAgICBwcm9jZXNzXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIClcbiAgICAgIF0pXG4gICAgfSxcblxuICAgIGdldEZvcm1TY2hlbWFzRm9yUHJvY2Vzc2luZyhzY2hlbWEsIGNvbnRleHQpIHtcbiAgICAgIC8vIENvbnZlcnQgbmVzdGVkIGNoaWxkcmVuIHNjaGVtYSB0byBzdGFuZC1hbG9uZSBzY2hlbWEgY29tcG9uZW50LFxuICAgICAgLy8gcHJlc2VudCBpbiBlYWNoIG9mIHRoZSBmb3JtcywgYXMgcmVxdWlyZWQgYnkgYHByb2Nlc3NTY2hlbWFEYXRhKClgXG4gICAgICBjb25zdCB7IGNoaWxkcmVuIH0gPSBzY2hlbWFcbiAgICAgIHJldHVybiBnZXRGb3JtU2NoZW1hcyhcbiAgICAgICAgc2NoZW1hLFxuICAgICAgICBjb250ZXh0LFxuICAgICAgICBjaGlsZHJlblxuICAgICAgICAgID8gZm9ybSA9PiAoe1xuICAgICAgICAgICAgICAuLi5mb3JtLFxuICAgICAgICAgICAgICBjb21wb25lbnRzOiB7XG4gICAgICAgICAgICAgICAgLi4uZm9ybS5jb21wb25lbnRzLFxuICAgICAgICAgICAgICAgIFtjaGlsZHJlbi5uYW1lXTogY2hpbGRyZW5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICA6IG51bGxcbiAgICAgIClcbiAgICB9XG4gIH1cbilcbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5cbi5kaXRvLXRyZWUtbGlzdCB7XG4gIEBleHRlbmQgJWZpZWxkO1xuXG4gIC5kaXRvLXRyZWUtcGFuZWwge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuXG4gICAgPiAuZGl0by10cmVlLWl0ZW0ge1xuICAgICAgZmxleDogMSAxIDI1JTtcbiAgICB9XG5cbiAgICA+IC5kaXRvLXRyZWUtZm9ybS1jb250YWluZXIge1xuICAgICAgZmxleDogMCAxIDc1JTtcbiAgICAgIGFsaWduLXNlbGY6IHN0cmV0Y2g7XG4gICAgICBiYWNrZ3JvdW5kOiAkY29udGVudC1jb2xvci1iYWNrZ3JvdW5kO1xuICAgICAgYm9yZGVyLWxlZnQ6ICRib3JkZXItc3R5bGU7XG4gICAgICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogJGJvcmRlci1yYWRpdXMgLSAxO1xuICAgICAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6ICRib3JkZXItcmFkaXVzIC0gMTtcbiAgICAgIG1hcmdpbjogKC0kaW5wdXQtcGFkZGluZy12ZXIpICgtJGlucHV0LXBhZGRpbmctaG9yKTtcbiAgICAgIG1hcmdpbi1sZWZ0OiAkaW5wdXQtcGFkZGluZy1ob3I7XG4gICAgfVxuICB9XG59XG48L3N0eWxlPlxuIiwiaW1wb3J0IHsgZmlsZXNpemUgfSBmcm9tICdmaWxlc2l6ZSdcblxuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdEZpbGVTaXplKHNpemUpIHtcbiAgcmV0dXJuIGZpbGVzaXplKHNpemUsIHsgYmFzZTogMTAgfSlcbn1cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4uZGl0by11cGxvYWRcbiAgLy8tIEluIG9yZGVyIHRvIGhhbmRsZSB1cGxvYWQgYnV0dG9ucyBpbiBtdWx0aXBsZSBwb3NzaWJsZSBwbGFjZXMsIGRlcGVuZGluZ1xuICAvLy0gb24gd2hldGhlciB0aGV5IGhhbmRsZSBzaW5nbGUgb3IgbXVsdGlwbGUgdXBsb2FkcywgcmVuZGVyIHRoZSB1cGxvYWRcbiAgLy8tIGNvbXBvbmVudCBpbnZpc2libHkgYXQgdGhlIHJvb3QsIGFuZCBkZWxlZ2F0ZSB0aGUgY2xpY2sgZXZlbnRzIHRvIGl0IGZyb21cbiAgLy8tIHRoZSBidXR0b25zIHJlbmRlcmVkIGZ1cnRoZXIgYmVsb3cuIEx1Y2tpbHkgdGhpcyB3b3JrcyBzdXJwcmlzaW5nbHkgd2VsbC5cbiAgVnVlVXBsb2FkLmRpdG8tdXBsb2FkX19pbnB1dChcbiAgICByZWY9XCJ1cGxvYWRcIlxuICAgIHYtbW9kZWw9XCJ1cGxvYWRzXCJcbiAgICA6aW5wdXRJZD1cImRhdGFQYXRoXCJcbiAgICA6bmFtZT1cImRhdGFQYXRoXCJcbiAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgOnBvc3RBY3Rpb249XCJ1cGxvYWRQYXRoXCJcbiAgICA6ZXh0ZW5zaW9ucz1cImV4dGVuc2lvbnNcIlxuICAgIDphY2NlcHQ9XCJhY2NlcHRcIlxuICAgIDptdWx0aXBsZT1cIm11bHRpcGxlXCJcbiAgICA6c2l6ZT1cIm1heFNpemVcIlxuICAgIDpkcm9wPVwiJGVsPy5jbG9zZXN0KCcuZGl0by1jb250YWluZXInKVwiXG4gICAgOmRyb3BEaXJlY3Rvcnk9XCJ0cnVlXCJcbiAgICBAaW5wdXQtZmlsdGVyPVwib25JbnB1dEZpbHRlclwiXG4gICAgQGlucHV0LWZpbGU9XCJvbklucHV0RmlsZVwiXG4gIClcbiAgdGFibGUuZGl0by10YWJsZS5kaXRvLXRhYmxlLXNlcGFyYXRvcnMuZGl0by10YWJsZS1iYWNrZ3JvdW5kXG4gICAgLy8tIFN0eWxpbmcgY29tZXMgZnJvbSBgRGl0b1RhYmxlSGVhZGBcbiAgICB0aGVhZC5kaXRvLXRhYmxlLWhlYWRcbiAgICAgIHRyXG4gICAgICAgIHRoXG4gICAgICAgICAgc3BhbiBGaWxlXG4gICAgICAgIHRoXG4gICAgICAgICAgc3BhbiBTaXplXG4gICAgICAgIHRoXG4gICAgICAgICAgc3BhbiBTdGF0dXNcbiAgICAgICAgdGhcbiAgICAgICAgICBzcGFuXG4gICAgRGl0b0RyYWdnYWJsZShcbiAgICAgIHYtbW9kZWw9XCJmaWxlc1wiXG4gICAgICB0YWc9XCJ0Ym9keVwiXG4gICAgICA6b3B0aW9ucz1cImdldERyYWdnYWJsZU9wdGlvbnMoKVwiXG4gICAgICA6ZHJhZ2dhYmxlPVwiZHJhZ2dhYmxlXCJcbiAgICApXG4gICAgICB0ZW1wbGF0ZShcbiAgICAgICAgdi1pZj1cIm11bHRpcGxlIHx8ICFpc1VwbG9hZEFjdGl2ZVwiXG4gICAgICApXG4gICAgICAgIHRyKFxuICAgICAgICAgIHYtZm9yPVwiKGZpbGUsIGluZGV4KSBpbiBmaWxlc1wiXG4gICAgICAgICAgOmtleT1cImZpbGUubmFtZVwiXG4gICAgICAgIClcbiAgICAgICAgICB0ZChcbiAgICAgICAgICAgIHYtaWY9XCJyZW5kZXJcIlxuICAgICAgICAgICAgdi1odG1sPVwicmVuZGVyRmlsZShmaWxlLCBpbmRleClcIlxuICAgICAgICAgIClcbiAgICAgICAgICB0ZChcbiAgICAgICAgICAgIHYtZWxzZS1pZj1cImRvd25sb2FkVXJsc1tpbmRleF1cIlxuICAgICAgICAgIClcbiAgICAgICAgICAgIGEoXG4gICAgICAgICAgICAgIDpkb3dubG9hZD1cImZpbGUubmFtZVwiXG4gICAgICAgICAgICAgIDpocmVmPVwiZG93bmxvYWRVcmxzW2luZGV4XVwiXG4gICAgICAgICAgICAgIHRhcmdldD1cIl9ibGFua1wiXG4gICAgICAgICAgICAgIEBjbGljay5wcmV2ZW50PVwib25DbGlja0Rvd25sb2FkKGZpbGUsIGluZGV4KVwiXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAgIERpdG9VcGxvYWRGaWxlKFxuICAgICAgICAgICAgICAgIDpmaWxlPVwiZmlsZVwiXG4gICAgICAgICAgICAgICAgOnRodW1ibmFpbD1cInRodW1ibmFpbHNcIlxuICAgICAgICAgICAgICAgIDp0aHVtYm5haWxVcmw9XCJ0aHVtYm5haWxVcmxzW2luZGV4XVwiXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICB0ZChcbiAgICAgICAgICAgIHYtZWxzZVxuICAgICAgICAgIClcbiAgICAgICAgICAgIERpdG9VcGxvYWRGaWxlKFxuICAgICAgICAgICAgICA6ZmlsZT1cImZpbGVcIlxuICAgICAgICAgICAgICA6dGh1bWJuYWlsPVwidGh1bWJuYWlsc1wiXG4gICAgICAgICAgICAgIDp0aHVtYm5haWxVcmw9XCJ0aHVtYm5haWxVcmxzW2luZGV4XVwiXG4gICAgICAgICAgICApXG4gICAgICAgICAgdGQuZGl0by11cGxvYWRfX3NpemUge3sgZm9ybWF0RmlsZVNpemUoZmlsZS5zaXplKSB9fVxuICAgICAgICAgIHRkLmRpdG8tdXBsb2FkX19zdGF0dXNcbiAgICAgICAgICAgIHRlbXBsYXRlKFxuICAgICAgICAgICAgICB2LWlmPVwiZmlsZS51cGxvYWRcIlxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgICB0ZW1wbGF0ZShcbiAgICAgICAgICAgICAgICB2LWlmPVwiZmlsZS51cGxvYWQuZXJyb3JcIlxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgfCBFcnJvcjoge3sgZmlsZS51cGxvYWQuZXJyb3IgfX1cbiAgICAgICAgICAgICAgdGVtcGxhdGUoXG4gICAgICAgICAgICAgICAgdi1lbHNlLWlmPVwiZmlsZS51cGxvYWQuYWN0aXZlXCJcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIHwgVXBsb2FkaW5nLi4uXG4gICAgICAgICAgICAgIHRlbXBsYXRlKFxuICAgICAgICAgICAgICAgIHYtZWxzZS1pZj1cImZpbGUudXBsb2FkLnN1Y2Nlc3NcIlxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgfCBVcGxvYWRlZFxuICAgICAgICAgICAgdGVtcGxhdGUoXG4gICAgICAgICAgICAgIHYtZWxzZVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgICB8IFN0b3JlZFxuICAgICAgICAgIHRkLmRpdG8tY2VsbC1lZGl0LWJ1dHRvbnNcbiAgICAgICAgICAgIC5kaXRvLWJ1dHRvbnMuZGl0by1idXR0b25zLXJvdW5kXG4gICAgICAgICAgICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbi5kaXRvLWJ1dHRvbi11cGxvYWQoXG4gICAgICAgICAgICAgICAgdi1pZj1cIiFtdWx0aXBsZVwiXG4gICAgICAgICAgICAgICAgOnRpdGxlPVwidXBsb2FkVGl0bGVcIlxuICAgICAgICAgICAgICAgIEBjbGljaz1cIm9uQ2xpY2tVcGxvYWRcIlxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIC8vLSBGaXJlZm94IGRvZXNuJ3QgbGlrZSA8YnV0dG9uPiBoZXJlLCBzbyB1c2UgPGE+IGluc3RlYWQ6XG4gICAgICAgICAgICAgIGEuZGl0by1idXR0b24oXG4gICAgICAgICAgICAgICAgdi1pZj1cImRyYWdnYWJsZVwiXG4gICAgICAgICAgICAgICAgdi1iaW5kPVwiZ2V0QnV0dG9uQXR0cmlidXRlcyh2ZXJicy5kcmFnKVwiXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgYnV0dG9uLmRpdG8tYnV0dG9uKFxuICAgICAgICAgICAgICAgIHYtaWY9XCJkZWxldGFibGVcIlxuICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgIHYtYmluZD1cImdldEJ1dHRvbkF0dHJpYnV0ZXModmVyYnMuZGVsZXRlKVwiXG4gICAgICAgICAgICAgICAgQGNsaWNrPVwiZGVsZXRlRmlsZShmaWxlLCBpbmRleClcIlxuICAgICAgICAgICAgICApXG4gICAgdGZvb3QoXG4gICAgICB2LWlmPVwibXVsdGlwbGUgfHwgaXNVcGxvYWRBY3RpdmUgfHwgIWhhc0ZpbGVzXCJcbiAgICApXG4gICAgICB0clxuICAgICAgICB0ZCg6Y29sc3Bhbj1cIjRcIilcbiAgICAgICAgICAuZGl0by11cGxvYWQtZm9vdGVyXG4gICAgICAgICAgICBwcm9ncmVzcy5kaXRvLXByb2dyZXNzKFxuICAgICAgICAgICAgICB2LWlmPVwiaXNVcGxvYWRBY3RpdmVcIlxuICAgICAgICAgICAgICA6dmFsdWU9XCJ1cGxvYWRQcm9ncmVzc1wiXG4gICAgICAgICAgICAgIG1heD1cIjEwMFwiXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuZGl0by1idXR0b25zLmRpdG8tYnV0dG9ucy1yb3VuZFxuICAgICAgICAgICAgICBidXR0b24uZGl0by1idXR0b24oXG4gICAgICAgICAgICAgICAgdi1pZj1cImlzVXBsb2FkQWN0aXZlXCJcbiAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICBAY2xpY2sucHJldmVudD1cInVwbG9hZC5hY3RpdmUgPSBmYWxzZVwiXG4gICAgICAgICAgICAgICkgQ2FuY2VsXG4gICAgICAgICAgICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbi5kaXRvLWJ1dHRvbi11cGxvYWQoXG4gICAgICAgICAgICAgICAgdi1pZj1cIm11bHRpcGxlIHx8ICFoYXNGaWxlc1wiXG4gICAgICAgICAgICAgICAgOnRpdGxlPVwidXBsb2FkVGl0bGVcIlxuICAgICAgICAgICAgICAgIEBjbGljaz1cIm9uQ2xpY2tVcGxvYWRcIlxuICAgICAgICAgICAgICApXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9UeXBlQ29tcG9uZW50IGZyb20gJy4uL0RpdG9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IERpdG9Db250ZXh0IGZyb20gJy4uL0RpdG9Db250ZXh0LmpzJ1xuaW1wb3J0IFNvcnRhYmxlTWl4aW4gZnJvbSAnLi4vbWl4aW5zL1NvcnRhYmxlTWl4aW4uanMnXG5pbXBvcnQgcGFyc2VGaWxlU2l6ZSBmcm9tICdmaWxlc2l6ZS1wYXJzZXInXG5pbXBvcnQgeyBnZXRTY2hlbWFBY2Nlc3NvciB9IGZyb20gJy4uL3V0aWxzL2FjY2Vzc29yLmpzJ1xuaW1wb3J0IHsgZm9ybWF0RmlsZVNpemUgfSBmcm9tICcuLi91dGlscy91bml0cy5qcydcbmltcG9ydCB7IGFwcGVuZERhdGFQYXRoIH0gZnJvbSAnLi4vdXRpbHMvZGF0YS5qcydcbmltcG9ydCB7IGlzQXJyYXksIGFzQXJyYXkgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0IFZ1ZVVwbG9hZCBmcm9tICd2dWUtdXBsb2FkLWNvbXBvbmVudCdcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9UeXBlQ29tcG9uZW50LnJlZ2lzdGVyKCd1cGxvYWQnLCB7XG4gIG1peGluczogW1NvcnRhYmxlTWl4aW5dLFxuICBjb21wb25lbnRzOiB7IFZ1ZVVwbG9hZCB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHVwbG9hZHM6IFtdXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgdXBsb2FkKCkge1xuICAgICAgcmV0dXJuIHRoaXMuJHJlZnMudXBsb2FkXG4gICAgfSxcblxuICAgIHVwbG9hZFRpdGxlKCkge1xuICAgICAgcmV0dXJuIHRoaXMubXVsdGlwbGUgPyAnVXBsb2FkIEZpbGVzJyA6ICdVcGxvYWQgRmlsZSdcbiAgICB9LFxuXG4gICAgZmlsZXMoKSB7XG4gICAgICByZXR1cm4gYXNGaWxlcyh0aGlzLnZhbHVlKVxuICAgIH0sXG5cbiAgICBkb3dubG9hZFVybHMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5maWxlcy5tYXAoKGZpbGUsIGluZGV4KSA9PiB0aGlzLmdldERvd25sb2FkVXJsKGZpbGUsIGluZGV4KSlcbiAgICB9LFxuXG4gICAgdGh1bWJuYWlsVXJscygpIHtcbiAgICAgIHJldHVybiB0aGlzLmZpbGVzLm1hcCgoZmlsZSwgaW5kZXgpID0+IHRoaXMuZ2V0VGh1bWJuYWlsVXJsKGZpbGUsIGluZGV4KSlcbiAgICB9LFxuXG4gICAgbXVsdGlwbGU6IGdldFNjaGVtYUFjY2Vzc29yKCdtdWx0aXBsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICAgIC8vIE5vIGNhbGxiYWNrIGFzIGl0J3MgdXNlZCBpbiBgcHJvY2Vzc1ZhbHVlKClgXG4gICAgICBjYWxsYmFjazogZmFsc2VcbiAgICB9KSxcblxuICAgIGV4dGVuc2lvbnM6IGdldFNjaGVtYUFjY2Vzc29yKCdleHRlbnNpb25zJywge1xuICAgICAgdHlwZTogW0FycmF5LCBTdHJpbmcsIFJlZ0V4cF1cbiAgICB9KSxcblxuICAgIGFjY2VwdDogZ2V0U2NoZW1hQWNjZXNzb3IoJ2FjY2VwdCcsIHtcbiAgICAgIHR5cGU6IEFycmF5LFxuICAgICAgZ2V0KGFjY2VwdCkge1xuICAgICAgICByZXR1cm4gaXNBcnJheShhY2NlcHQpID8gYWNjZXB0LmpvaW4oJywnKSA6IGFjY2VwdFxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgbWF4U2l6ZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ21heFNpemUnLCB7XG4gICAgICB0eXBlOiBbU3RyaW5nLCBOdW1iZXJdLFxuICAgICAgZ2V0KG1heFNpemUpIHtcbiAgICAgICAgcmV0dXJuIG1heFNpemUgPyBwYXJzZUZpbGVTaXplKG1heFNpemUpIDogdW5kZWZpbmVkXG4gICAgICB9XG4gICAgfSksXG5cbiAgICBkcmFnZ2FibGU6IGdldFNjaGVtYUFjY2Vzc29yKCdkcmFnZ2FibGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2UsXG4gICAgICBnZXQoZHJhZ2dhYmxlKSB7XG4gICAgICAgIHJldHVybiBkcmFnZ2FibGUgJiYgdGhpcy5maWxlcy5sZW5ndGggPiAxXG4gICAgICB9XG4gICAgfSksXG5cbiAgICBkZWxldGFibGU6IGdldFNjaGVtYUFjY2Vzc29yKCdkZWxldGFibGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9KSxcblxuICAgIHJlbmRlcjogZ2V0U2NoZW1hQWNjZXNzb3IoJ3JlbmRlcicsIHtcbiAgICAgIHR5cGU6IEZ1bmN0aW9uLFxuICAgICAgZGVmYXVsdDogbnVsbFxuICAgIH0pLFxuXG4gICAgdGh1bWJuYWlsczogZ2V0U2NoZW1hQWNjZXNzb3IoJ3RodW1ibmFpbHMnLCB7XG4gICAgICB0eXBlOiBbQm9vbGVhbiwgU3RyaW5nXSxcbiAgICAgIGRlZmF1bHQodGh1bWJuYWlscykge1xuICAgICAgICByZXR1cm4gdGh1bWJuYWlscyA/PyAhIXRoaXMuc2NoZW1hLnRodW1ibmFpbFVybFxuICAgICAgfSxcbiAgICAgIGdldCh0aHVtYm5haWxzKSB7XG4gICAgICAgIHJldHVybiB0aHVtYm5haWxzID09PSB0cnVlID8gJ21lZGl1bScgOiB0aHVtYm5haWxzIHx8IG51bGxcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIGhhc0ZpbGVzKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZmlsZXMubGVuZ3RoID4gMFxuICAgIH0sXG5cbiAgICBoYXNVcGxvYWRzKCkge1xuICAgICAgcmV0dXJuIHRoaXMudXBsb2Fkcy5sZW5ndGggPiAwXG4gICAgfSxcblxuICAgIGlzVXBsb2FkUmVhZHkoKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICB0aGlzLmhhc1VwbG9hZHMgJiZcbiAgICAgICAgISh0aGlzLnVwbG9hZC5hY3RpdmUgfHwgdGhpcy51cGxvYWQudXBsb2FkZWQpXG4gICAgICApXG4gICAgfSxcblxuICAgIGlzVXBsb2FkQWN0aXZlKCkge1xuICAgICAgcmV0dXJuIHRoaXMuaGFzVXBsb2FkcyAmJiB0aGlzLnVwbG9hZC5hY3RpdmVcbiAgICB9LFxuXG4gICAgdXBsb2FkUHJvZ3Jlc3MoKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICB0aGlzLnVwbG9hZHMucmVkdWNlKCh0b3RhbCwgZmlsZSkgPT4gdG90YWwgKyArZmlsZS5wcm9ncmVzcywgMCkgL1xuICAgICAgICB0aGlzLnVwbG9hZHMubGVuZ3RoXG4gICAgICApXG4gICAgfSxcblxuICAgIHVwbG9hZFBhdGgoKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRSZXNvdXJjZVVybCh7XG4gICAgICAgIHR5cGU6ICd1cGxvYWQnLFxuICAgICAgICBwYXRoOiB0aGlzLmFwaS5ub3JtYWxpemVQYXRoKHRoaXMuZGF0YVBhdGgpXG4gICAgICB9KVxuICAgIH1cbiAgfSxcblxuICB3YXRjaDoge1xuICAgIGlzVXBsb2FkUmVhZHkocmVhZHkpIHtcbiAgICAgIGlmIChyZWFkeSkge1xuICAgICAgICAvLyBBdXRvLXVwbG9hZC5cbiAgICAgICAgdGhpcy4kbmV4dFRpY2soKCkgPT4ge1xuICAgICAgICAgIHRoaXMudXBsb2FkLmFjdGl2ZSA9IHRydWVcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGZvcm1hdEZpbGVTaXplLFxuXG4gICAgZ2V0RmlsZUNvbnRleHQoZmlsZSwgaW5kZXgpIHtcbiAgICAgIHJldHVybiB0aGlzLm11bHRpcGxlXG4gICAgICAgID8gbmV3IERpdG9Db250ZXh0KHRoaXMsIHtcbiAgICAgICAgICAgIHZhbHVlOiBmaWxlLFxuICAgICAgICAgICAgZGF0YTogdGhpcy5maWxlcyxcbiAgICAgICAgICAgIGluZGV4LFxuICAgICAgICAgICAgZGF0YVBhdGg6IGFwcGVuZERhdGFQYXRoKHRoaXMuZGF0YVBhdGgsIGluZGV4KVxuICAgICAgICAgIH0pXG4gICAgICAgIDogdGhpcy5jb250ZXh0XG4gICAgfSxcblxuICAgIHJlbmRlckZpbGUoZmlsZSwgaW5kZXgpIHtcbiAgICAgIHJldHVybiB0aGlzLnJlbmRlcih0aGlzLmdldEZpbGVDb250ZXh0KGZpbGUsIGluZGV4KSlcbiAgICB9LFxuXG4gICAgZ2V0RG93bmxvYWRVcmwoZmlsZSwgaW5kZXgpIHtcbiAgICAgIHJldHVybiBmaWxlLnVybFxuICAgICAgICA/IGZpbGUudXJsXG4gICAgICAgIDogIWZpbGUudXBsb2FkIHx8IGZpbGUudXBsb2FkLnN1Y2Nlc3NcbiAgICAgICAgICA/IHRoaXMuZ2V0U2NoZW1hVmFsdWUoJ2Rvd25sb2FkVXJsJywge1xuICAgICAgICAgICAgICB0eXBlOiAnU3RyaW5nJyxcbiAgICAgICAgICAgICAgZGVmYXVsdDogbnVsbCxcbiAgICAgICAgICAgICAgY29udGV4dDogdGhpcy5nZXRGaWxlQ29udGV4dChmaWxlLCBpbmRleClcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgOiBudWxsXG4gICAgfSxcblxuICAgIGdldFRodW1ibmFpbFVybChmaWxlLCBpbmRleCkge1xuICAgICAgcmV0dXJuICFmaWxlLnVwbG9hZCB8fCBmaWxlLnVwbG9hZC5zdWNjZXNzXG4gICAgICAgID8gdGhpcy5nZXRTY2hlbWFWYWx1ZSgndGh1bWJuYWlsVXJsJywge1xuICAgICAgICAgICAgdHlwZTogJ1N0cmluZycsXG4gICAgICAgICAgICBkZWZhdWx0OiBudWxsLFxuICAgICAgICAgICAgY29udGV4dDogdGhpcy5nZXRGaWxlQ29udGV4dChmaWxlLCBpbmRleClcbiAgICAgICAgICB9KSB8fCAoXG4gICAgICAgICAgICBmaWxlLnR5cGUuc3RhcnRzV2l0aCgnaW1hZ2UvJylcbiAgICAgICAgICAgICAgPyBmaWxlLnVybFxuICAgICAgICAgICAgICA6IG51bGxcbiAgICAgICAgICApXG4gICAgICAgIDogbnVsbFxuICAgIH0sXG5cbiAgICBkZWxldGVGaWxlKGZpbGUsIGluZGV4KSB7XG4gICAgICBjb25zdCB7IG5hbWUgfSA9IGZpbGVcblxuICAgICAgaWYgKFxuICAgICAgICBmaWxlICYmXG4gICAgICAgIHdpbmRvdy5jb25maXJtKFxuICAgICAgICAgIGBEbyB5b3UgcmVhbGx5IHdhbnQgdG8gJHt0aGlzLnZlcmJzLnJlbW92ZX0gJHtuYW1lfT9gXG4gICAgICAgIClcbiAgICAgICkge1xuICAgICAgICBpZiAodGhpcy5tdWx0aXBsZSkge1xuICAgICAgICAgIHRoaXMudmFsdWUuc3BsaWNlKGluZGV4LCAxKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMudmFsdWUgPSBudWxsXG4gICAgICAgIH1cbiAgICAgICAgaWYgKGZpbGUudXBsb2FkKSB7XG4gICAgICAgICAgdGhpcy51cGxvYWQucmVtb3ZlKGZpbGUudXBsb2FkKVxuICAgICAgICB9XG4gICAgICAgIHRoaXMub25DaGFuZ2UoKVxuICAgICAgICB0aGlzLm5vdGlmeSh7XG4gICAgICAgICAgdHlwZTogJ2luZm8nLFxuICAgICAgICAgIHRpdGxlOiAnU3VjY2Vzc2Z1bGx5IFJlbW92ZWQnLFxuICAgICAgICAgIHRleHQ6IGAke25hbWV9IHdhcyAke3RoaXMudmVyYnMuZGVsZXRlZH0uYFxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBnZXRGaWxlSW5kZXgoZmlsZSkge1xuICAgICAgcmV0dXJuIHRoaXMubXVsdGlwbGUgJiYgdGhpcy52YWx1ZVxuICAgICAgICA/IHRoaXMudmFsdWUuZmluZEluZGV4KGl0ID0+IGl0LmlkID09PSBmaWxlLmlkKVxuICAgICAgICA6IC0xXG4gICAgfSxcblxuICAgIGFkZEZpbGUoZmlsZSkge1xuICAgICAgaWYgKHRoaXMubXVsdGlwbGUpIHtcbiAgICAgICAgaWYgKHRoaXMudmFsdWUpIHtcbiAgICAgICAgICB0aGlzLnZhbHVlLnB1c2goZmlsZSlcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnZhbHVlID0gW2ZpbGVdXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMudmFsdWUgPSBmaWxlXG4gICAgICB9XG4gICAgfSxcblxuICAgIHJlcGxhY2VGaWxlKGZpbGUsIG5ld0ZpbGUpIHtcbiAgICAgIGlmICh0aGlzLm11bHRpcGxlKSB7XG4gICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5nZXRGaWxlSW5kZXgoZmlsZSlcbiAgICAgICAgaWYgKGluZGV4ID49IDApIHtcbiAgICAgICAgICBpZiAobmV3RmlsZSkge1xuICAgICAgICAgICAgdGhpcy52YWx1ZVtpbmRleF0gPSBuZXdGaWxlXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMudmFsdWUuc3BsaWNlKGluZGV4LCAxKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy52YWx1ZSA9IG5ld0ZpbGVcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgcmVtb3ZlRmlsZShmaWxlKSB7XG4gICAgICB0aGlzLnJlcGxhY2VGaWxlKGZpbGUsIG51bGwpXG4gICAgfSxcblxuICAgIG9uSW5wdXRGaWxlKG5ld0ZpbGUsIG9sZEZpbGUpIHtcbiAgICAgIGlmIChuZXdGaWxlICYmICFvbGRGaWxlKSB7XG4gICAgICAgIGNvbnN0IHsgaWQsIG5hbWUsIHNpemUgfSA9IG5ld0ZpbGVcbiAgICAgICAgdGhpcy5hZGRGaWxlKHsgaWQsIG5hbWUsIHNpemUsIHVwbG9hZDogbmV3RmlsZSB9KVxuICAgICAgfVxuICAgICAgaWYgKG5ld0ZpbGUgJiYgb2xkRmlsZSkge1xuICAgICAgICBjb25zdCB7IHN1Y2Nlc3MsIGVycm9yIH0gPSBuZXdGaWxlXG4gICAgICAgIGlmIChzdWNjZXNzKSB7XG4gICAgICAgICAgdGhpcy5vbkNoYW5nZSgpXG4gICAgICAgICAgY29uc3QgZmlsZSA9IG5ld0ZpbGUucmVzcG9uc2VbMF1cbiAgICAgICAgICBpZiAoZmlsZSkge1xuICAgICAgICAgICAgZmlsZS51cGxvYWQgPSBuZXdGaWxlXG4gICAgICAgICAgICAvLyBSZXBsYWNlIHRoZSB1cGxvYWQgZmlsZSBvYmplY3Qgd2l0aCB0aGUgZmlsZSBvYmplY3QgcmVjZWl2ZWRcbiAgICAgICAgICAgIC8vIGZyb20gdGhlIHVwbG9hZCByZXNwb25zZS5cbiAgICAgICAgICAgIHRoaXMucmVwbGFjZUZpbGUobmV3RmlsZSwgZmlsZSlcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5yZW1vdmVGaWxlKG5ld0ZpbGUpXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGVycm9yKSB7XG4gICAgICAgICAgdGhpcy5yZW1vdmVGaWxlKG5ld0ZpbGUpXG4gICAgICAgICAgY29uc3QgdGV4dCA9IChcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgYWJvcnQ6ICdVcGxvYWQgYWJvcnRlZCcsXG4gICAgICAgICAgICAgIGRlbmllZDogJ1VwbG9hZCBkZW5pZWQnLFxuICAgICAgICAgICAgICBleHRlbnNpb246IGBVbnN1cHBvcnRlZCBmaWxlLXR5cGU6ICR7bmV3RmlsZS5uYW1lfWAsXG4gICAgICAgICAgICAgIG5ldHdvcms6ICdOZXR3b3JrIGVycm9yIGVuY291bnRlcmVkIGR1cmluZyB1cGxvYWQnLFxuICAgICAgICAgICAgICBzZXJ2ZXI6ICdTZXJ2ZXIgZXJyb3Igb2NjdXJyZWQgZHVyaW5nIHVwbG9hZCcsXG4gICAgICAgICAgICAgIHNpemU6IGBGaWxlIGlzIHRvbyBsYXJnZTogJHtmb3JtYXRGaWxlU2l6ZShuZXdGaWxlLnNpemUpfWAsXG4gICAgICAgICAgICAgIHRpbWVvdXQ6ICdUaW1lb3V0IG9jY3VycmVkIGR1cmluZyB1cGxvYWQnXG4gICAgICAgICAgICB9W2Vycm9yXSB8fFxuICAgICAgICAgICAgYFVua25vd24gRmlsZSBVcGxvYWQgRXJyb3I6ICcke2Vycm9yfSdgXG4gICAgICAgICAgKVxuICAgICAgICAgIHRoaXMubm90aWZ5KHtcbiAgICAgICAgICAgIHR5cGU6ICdlcnJvcicsXG4gICAgICAgICAgICB0aXRsZTogJ0ZpbGUgVXBsb2FkIEVycm9yJyxcbiAgICAgICAgICAgIHRleHRcbiAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIG9uSW5wdXRGaWx0ZXIobmV3RmlsZSAvKiwgb2xkRmlsZSwgcHJldmVudCAqLykge1xuICAgICAgY29uc3QgeGhyID0gbmV3RmlsZT8ueGhyXG4gICAgICBpZiAodGhpcy5hcGkuY29ycz8uY3JlZGVudGlhbHMgJiYgeGhyICYmICF4aHIud2l0aENyZWRlbnRpYWxzKSB7XG4gICAgICAgIHhoci53aXRoQ3JlZGVudGlhbHMgPSB0cnVlXG4gICAgICB9XG4gICAgfSxcblxuICAgIGFzeW5jIG9uQ2xpY2tEb3dubG9hZChmaWxlLCBpbmRleCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaCh0aGlzLmRvd25sb2FkVXJsc1tpbmRleF0pXG4gICAgICAgIGNvbnN0IGJsb2IgPSBhd2FpdCByZXNwb25zZS5ibG9iKClcbiAgICAgICAgdGhpcy5kb3dubG9hZCh7XG4gICAgICAgICAgZmlsZW5hbWU6IGZpbGUubmFtZSxcbiAgICAgICAgICB1cmw6IFVSTC5jcmVhdGVPYmplY3RVUkwoYmxvYilcbiAgICAgICAgfSlcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpXG4gICAgICB9XG4gICAgfSxcblxuICAgIG9uQ2xpY2tVcGxvYWQoZXZlbnQpIHtcbiAgICAgIC8vIERlbGVnYXRlIHRoZSBjbGljayBldmVudCB0byB0aGUgaGlkZGVuIGZpbGUgaW5wdXQuXG4gICAgICB0aGlzLnVwbG9hZC4kZWwucXVlcnlTZWxlY3RvcignaW5wdXQnKS5kaXNwYXRjaEV2ZW50KFxuICAgICAgICBuZXcgZXZlbnQuY29uc3RydWN0b3IoZXZlbnQudHlwZSwgZXZlbnQpXG4gICAgICApXG4gICAgfVxuICB9LFxuXG4gIHByb2Nlc3NWYWx1ZShzY2hlbWEsIHZhbHVlKSB7XG4gICAgLy8gRmlsdGVyIG91dCBhbGwgbmV3bHkgYWRkZWQgZmlsZXMgdGhhdCB3ZXJlbid0IGFjdHVhbGx5IHVwbG9hZGVkLlxuICAgIGNvbnN0IGZpbGVzID0gYXNGaWxlcyh2YWx1ZSlcbiAgICAgIC5tYXAoKHsgdXBsb2FkLCAuLi5maWxlIH0pID0+ICghdXBsb2FkIHx8IHVwbG9hZC5zdWNjZXNzID8gZmlsZSA6IG51bGwpKVxuICAgICAgLmZpbHRlcihmaWxlID0+IGZpbGUpXG4gICAgcmV0dXJuIHNjaGVtYS5tdWx0aXBsZSA/IGZpbGVzIDogZmlsZXNbMF0gfHwgbnVsbFxuICB9XG59KVxuXG5mdW5jdGlvbiBhc0ZpbGVzKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSA/IGFzQXJyYXkodmFsdWUpIDogW11cbn1cbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5cbi5kaXRvLXVwbG9hZCB7XG4gIC5kaXRvLXRhYmxlIHtcbiAgICB0cixcbiAgICAuZGl0by1jZWxsLWVkaXQtYnV0dG9ucyB7XG4gICAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICAgIH1cbiAgfVxuXG4gICZfX3NpemUsXG4gICZfX3N0YXR1cyB7XG4gICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgfVxuXG4gICYgJl9faW5wdXQge1xuICAgIC8vIFNlZSBgb25DbGlja1VwbG9hZCgpYCBtZXRob2QgZm9yIGRldGFpbHMuXG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gIH1cblxuICAmX19mb290ZXIge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuXG4gICAgLmRpdG8tcHJvZ3Jlc3Mge1xuICAgICAgZmxleDogYXV0bztcbiAgICAgIG1hcmdpbi1yaWdodDogJGZvcm0tc3BhY2luZztcbiAgICB9XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCJpbXBvcnQgeyBhc0FycmF5IH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuZXhwb3J0IGRlZmF1bHQge1xuICBtb3VudGVkKG5vZGUsIGJpbmRpbmcpIHtcbiAgICBvYnNlcnZlUmVzaXplKG5vZGUsIGJpbmRpbmcudmFsdWUsIGJpbmRpbmcuYXJnKVxuICB9LFxuXG4gIHVubW91bnRlZChub2RlLCBiaW5kaW5nKSB7XG4gICAgdW5vYnNlcnZlUmVzaXplKG5vZGUsIGJpbmRpbmcudmFsdWUsIGJpbmRpbmcuYXJnKVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBvYnNlcnZlUmVzaXplKG5vZGUsIGhhbmRsZXIsIG9wdGlvbnMpIHtcbiAgT2JzZXJ2ZXIuZ2V0T2JzZXJ2ZXIob3B0aW9ucykub2JzZXJ2ZShub2RlLCBoYW5kbGVyKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gdW5vYnNlcnZlUmVzaXplKG5vZGUsIGhhbmRsZXIsIG9wdGlvbnMpIHtcbiAgT2JzZXJ2ZXIuZ2V0T2JzZXJ2ZXIob3B0aW9ucykudW5vYnNlcnZlKG5vZGUsIGhhbmRsZXIpXG59XG5cbmV4cG9ydCBjb25zdCBpc1Jlc2l6ZVN1cHBvcnRlZCA9IHR5cGVvZiBSZXNpemVPYnNlcnZlciAhPT0gJ3VuZGVmaW5lZCdcblxuY29uc3Qgb2JzZXJ2ZXJzID0ge31cblxuY2xhc3MgT2JzZXJ2ZXIge1xuICBjb25zdHJ1Y3RvcihrZXksIG9wdGlvbnMpIHtcbiAgICB0aGlzLmtleSA9IGtleVxuICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnNcbiAgICB0aGlzLm9ic2VydmVyID0gaXNSZXNpemVTdXBwb3J0ZWRcbiAgICAgID8gbmV3IFJlc2l6ZU9ic2VydmVyKGVudHJpZXMgPT4gdGhpcy5oYW5kbGUoZW50cmllcykpXG4gICAgICA6IG51bGxcbiAgICB0aGlzLmhhbmRsZXJzQnlOb2RlID0gbmV3IFdlYWtNYXAoKVxuICAgIHRoaXMubm9kZUNvdW50ID0gMFxuICB9XG5cbiAgb2JzZXJ2ZShub2RlLCBoYW5kbGVyKSB7XG4gICAgbGV0IGhhbmRsZXJzID0gdGhpcy5oYW5kbGVyc0J5Tm9kZS5nZXQobm9kZSlcbiAgICBpZiAoIWhhbmRsZXJzKSB7XG4gICAgICBoYW5kbGVycyA9IG5ldyBTZXQoKVxuICAgICAgdGhpcy5oYW5kbGVyc0J5Tm9kZS5zZXQobm9kZSwgaGFuZGxlcnMpXG4gICAgICB0aGlzLm9ic2VydmVyPy5vYnNlcnZlKG5vZGUsIHRoaXMub3B0aW9ucylcbiAgICAgIHRoaXMubm9kZUNvdW50KytcbiAgICB9XG4gICAgaGFuZGxlcnMuYWRkKGhhbmRsZXIpXG4gIH1cblxuICB1bm9ic2VydmUobm9kZSwgaGFuZGxlcikge1xuICAgIGNvbnN0IGhhbmRsZXJzID0gdGhpcy5oYW5kbGVyc0J5Tm9kZS5nZXQobm9kZSlcbiAgICBpZiAoaGFuZGxlcnM/LmRlbGV0ZShoYW5kbGVyKSAmJiBoYW5kbGVycy5zaXplID09PSAwKSB7XG4gICAgICB0aGlzLmhhbmRsZXJzQnlOb2RlLmRlbGV0ZShub2RlKVxuICAgICAgdGhpcy5vYnNlcnZlcj8udW5vYnNlcnZlKG5vZGUpXG4gICAgICBpZiAoLS10aGlzLm5vZGVDb3VudCA9PT0gMCkge1xuICAgICAgICBkZWxldGUgb2JzZXJ2ZXJzW3RoaXMua2V5XVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGhhbmRsZShlbnRyaWVzKSB7XG4gICAgZm9yIChjb25zdCBlbnRyeSBvZiBlbnRyaWVzKSB7XG4gICAgICBjb25zdCBoYW5kbGVycyA9IHRoaXMuaGFuZGxlcnNCeU5vZGUuZ2V0KGVudHJ5LnRhcmdldClcbiAgICAgIGlmIChoYW5kbGVycykge1xuICAgICAgICBjb25zdCBldmVudCA9IHtcbiAgICAgICAgICB0YXJnZXQ6IGVudHJ5LnRhcmdldCxcbiAgICAgICAgICBjb250ZW50UmVjdDogZW50cnkuY29udGVudFJlY3QsXG4gICAgICAgICAgLy8gVXNlIGBhc0FycmF5YCBzaW5jZSBGaXJlZm94IGJlZm9yZSB2OTIgcmV0dXJucyB0aGVzZSBhcyBvYmplY3RzOlxuICAgICAgICAgIGJvcmRlckJveFNpemU6IGFzQXJyYXkoZW50cnkuYm9yZGVyQm94U2l6ZSksXG4gICAgICAgICAgY29udGVudEJveFNpemU6IGFzQXJyYXkoZW50cnkuY29udGVudEJveFNpemUpLFxuICAgICAgICAgIGRldmljZVBpeGVsQ29udGVudEJveFNpemU6IGFzQXJyYXkoZW50cnkuZGV2aWNlUGl4ZWxDb250ZW50Qm94U2l6ZSlcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGNvbnN0IGhhbmRsZXIgb2YgaGFuZGxlcnMpIHtcbiAgICAgICAgICBoYW5kbGVyKGV2ZW50KVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIGdldE9ic2VydmVyKHsgYm94ID0gJ2NvbnRlbnQtYm94JyB9ID0ge30pIHtcbiAgICBjb25zdCBvcHRpb25zID0geyBib3ggfVxuICAgIGNvbnN0IGtleSA9IEpTT04uc3RyaW5naWZ5KG9wdGlvbnMpXG4gICAgb2JzZXJ2ZXJzW2tleV0gfHw9IG5ldyBPYnNlcnZlcihrZXksIG9wdGlvbnMpXG4gICAgcmV0dXJuIG9ic2VydmVyc1trZXldXG4gIH1cbn1cbiIsImV4cG9ydCBkZWZhdWx0IFtcbiAgJ2NyZWF0ZScsICdjcmVhdGVkJyxcbiAgJ3NhdmUnLCAnc2F2ZWQnLFxuICAnYXBwbHknLCAnYXBwbGllZCcsXG4gICdzdWJtaXQnLCAnc3VibWl0dGVkJyxcbiAgJ2RlbGV0ZScsICdkZWxldGVkJyxcbiAgJ3JlbW92ZScsICdyZW1vdmVkJyxcbiAgJ2NsZWFyJywgJ2NsZWFyZWQnLFxuICAnZWRpdCcsICdlZGl0ZWQnLFxuICAnY2xvc2UnLCAnY2xvc2VkJyxcbiAgJ2NhbmNlbCcsICdjYW5jZWxsZWQnLFxuICAnZHJhZycsICdkcmFnZ2VkJyxcbiAgJ2xvZ2luJywgJ2xvZ2dlZCBpbidcbl0ucmVkdWNlKCh2ZXJicywgdmVyYikgPT4ge1xuICB2ZXJic1t2ZXJiXSA9IHZlcmJcbiAgcmV0dXJuIHZlcmJzXG59LCB7fSlcbiIsImltcG9ydCB7IGNyZWF0ZUFwcCwgaCBhcyBjcmVhdGVFbGVtZW50IH0gZnJvbSAndnVlJ1xuaW1wb3J0IHsgY3JlYXRlUm91dGVyLCBjcmVhdGVXZWJIaXN0b3J5IH0gZnJvbSAndnVlLXJvdXRlcidcbmltcG9ydCBWdWVOb3RpZmljYXRpb25zIGZyb20gJ0BreXZnL3Z1ZTMtbm90aWZpY2F0aW9uJ1xuaW1wb3J0IHtcbiAgaXNTdHJpbmcsXG4gIGlzQWJzb2x1dGVVcmwsXG4gIGFzc2lnbkRlZXBseSxcbiAgaHlwaGVuYXRlLFxuICBjYW1lbGl6ZSxcbiAgZGVmYXVsdEZvcm1hdHMsXG4gIGRlcHJlY2F0ZVxufSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0ICogYXMgY29tcG9uZW50cyBmcm9tICcuL2NvbXBvbmVudHMvaW5kZXguanMnXG5pbXBvcnQgKiBhcyB0eXBlcyBmcm9tICcuL3R5cGVzL2luZGV4LmpzJ1xuaW1wb3J0IERpdG9Sb290IGZyb20gJy4vY29tcG9uZW50cy9EaXRvUm9vdC52dWUnXG5pbXBvcnQgRGl0b1R5cGVDb21wb25lbnQgZnJvbSAnLi9EaXRvVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCBSZXNpemVEaXJlY3RpdmUgZnJvbSAnLi9kaXJlY3RpdmVzL3Jlc2l6ZS5qcydcbmltcG9ydCB7IGdldFJlc291cmNlIH0gZnJvbSAnLi91dGlscy9yZXNvdXJjZS5qcydcbmltcG9ydCB7IGZvcm1hdFF1ZXJ5IH0gZnJvbSAnLi91dGlscy9yb3V0ZS5qcydcbmltcG9ydCB2ZXJicyBmcm9tICcuL3ZlcmJzLmpzJ1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEaXRvQWRtaW4ge1xuICBjb25zdHJ1Y3RvcihlbCwge1xuICAgIC8vIGBkaXRvYCBjb250YWlucyB0aGUgYmFzZSBhbmQgYXBpIHNldHRpbmdzIHBhc3NlZCBmcm9tIGBBZG1pbkNvbnRyb2xsZXJgXG4gICAgZGl0byA9IHt9LFxuICAgIGFwaSxcbiAgICB2aWV3cyA9IHt9LFxuICAgIC4uLm9wdGlvbnNcbiAgfSA9IHt9KSB7XG4gICAgdGhpcy5lbCA9IGVsXG4gICAgLy8gTWVyZ2UgaW4gYGFwaWAgc2V0dGluZ3MgYXMgcGFzc2VkIGZyb20gYGNvbmZpZy5hZG1pbmAgYW5kIHRocm91Z2ggdGhlXG4gICAgLy8gYEFkbWluQ29udHJvbGxlcmAgd2l0aCBgYXBpYCB2YWx1ZXMgZnJvbSBmcm9tICdhZG1pbi9pbmRleC5qcydcbiAgICAvLyBOT1RFOiBgQWRtaW5Db250cm9sbGVyYCBwcm92aWRlcyBgZGl0by5hcGkuYmFzZWBcbiAgICB0aGlzLmFwaSA9IGFwaSA9IGFzc2lnbkRlZXBseSh7IGJhc2U6ICcvJyB9LCBkaXRvLmFwaSwgYXBpKVxuICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnNcblxuICAgIC8vIFNldHVwIGRlZmF1bHQgYXBpIHNldHRpbmdzOlxuICAgIGFwaS5sb2NhbGUgfHw9ICdlbi1VUydcbiAgICBhcGkuZm9ybWF0cyA9IGFzc2lnbkRlZXBseSh7fSwgZGVmYXVsdEZvcm1hdHMsIGFwaS5mb3JtYXRzKVxuICAgIGFwaS5yZXF1ZXN0IHx8PSBvcHRpb25zID0+IHJlcXVlc3QoYXBpLCBvcHRpb25zKVxuICAgIGFwaS5nZXRBcGlVcmwgfHw9IG9wdGlvbnMgPT4gZ2V0QXBpVXJsKGFwaSwgb3B0aW9ucylcbiAgICBhcGkuaXNBcGlVcmwgfHw9IHVybCA9PiBpc0FwaVVybChhcGksIHVybClcbiAgICAvLyBTZXR0aW5nIGBhcGkubm9ybWFsaXplUGF0aHMgPSB0cnVlIChwbHVyYWwpIHNldHMgYm90aDpcbiAgICAvLyBgYXBpLm5vcm1hbGl6ZVBhdGggPSBoeXBoZW5hdGVgIGFuZCBgYXBpLmRlbm9ybWFsaXplUGF0aCA9IGNhbWVsaXplYFxuICAgIGFwaS5ub3JtYWxpemVQYXRoIHx8PSBhcGkubm9ybWFsaXplUGF0aHMgPyBoeXBoZW5hdGUgOiB2YWwgPT4gdmFsXG4gICAgYXBpLmRlbm9ybWFsaXplUGF0aCB8fD0gYXBpLm5vcm1hbGl6ZVBhdGhzID8gY2FtZWxpemUgOiB2YWwgPT4gdmFsXG5cbiAgICAvLyBBbGxvdyBkZWZpbml0aW9uIG9mIGRlZmF1bHRzIGZvciBhZG1pbiBjb21wb25lbnQgdHlwZXMsIG5lc3RlZCBwZXIgdHlwZTpcbiAgICAvLyBhcGkuZGVmYXVsdHMgPSB7XG4gICAgLy8gICAnbXVsdGlzZWxlY3QnOiB7XG4gICAgLy8gICAgIHNlbGVjdGFibGU6IHRydWVcbiAgICAvLyAgIH0sXG4gICAgLy8gICAnZmFrZS10eXBlJzogc2NoZW1hID0+IHtcbiAgICAvLyAgICAgLy8gUmV0dXJuIGRlZmF1bHRzLCBvciBkaXJlY3RseSBtb2RpZnkgdGhlIHNjaGVtYTpcbiAgICAvLyAgICAgT2JqZWN0LmFzc2lnbihzY2hlbWEsIHtcbiAgICAvLyAgICAgICB0eXBlOiAncmVhbC10eXBlJyxcbiAgICAvLyAgICAgICBmb3JtYXQ6ICh7IHZhbHVlIH0pID0+IGBGb3JtYXR0ZWQgJHt2YWx1ZX1gLFxuICAgIC8vICAgICAgIHByb2Nlc3M6ICh7IHZhbHVlIH0pID0+IGBQcm9jZXNzZWQgJHt2YWx1ZX1gXG4gICAgLy8gICAgIH0pXG4gICAgLy8gICB9XG4gICAgLy8gfVxuXG4gICAgYXBpLmRlZmF1bHRzIHx8PSB7fVxuXG4gICAgLy8gQWxsb3cgdGhlIGNvbmZpZ3VyYXRpb24gb2YgYWxsIGF1dGggcmVzb3VyY2VzLCBsaWtlIHNvOlxuICAgIC8vIGFwaS51c2VycyA9IHtcbiAgICAvLyAgIHBhdGg6ICcvYWRtaW5zJyxcbiAgICAvLyAgIC8vIFRoZXNlIGFyZSB0aGUgZGVmYXVsdHM6XG4gICAgLy8gICBsb2dpbjoge1xuICAgIC8vICAgICBwYXRoOiAnbG9naW4nLFxuICAgIC8vICAgICBtZXRob2Q6ICdwb3N0J1xuICAgIC8vICAgfSxcbiAgICAvLyAgIGxvZ291dDoge1xuICAgIC8vICAgICBwYXRoOiAnbG9nb3V0JyxcbiAgICAvLyAgICAgbWV0aG9kOiAncG9zdCdcbiAgICAvLyAgIH0sXG4gICAgLy8gICBzZXNzaW9uOiB7XG4gICAgLy8gICAgIHBhdGg6ICdzZXNzaW9uJyxcbiAgICAvLyAgICAgbWV0aG9kOiAnZ2V0J1xuICAgIC8vICAgfVxuICAgIC8vIH1cbiAgICBjb25zdCB1c2VycyA9IGdldFJlc291cmNlKGFwaS51c2Vycywge1xuICAgICAgdHlwZTogJ2NvbGxlY3Rpb24nXG4gICAgfSkgfHwge31cbiAgICB1c2Vycy5sb2dpbiA9IGdldFJlc291cmNlKHVzZXJzLmxvZ2luIHx8ICdsb2dpbicsIHtcbiAgICAgIG1ldGhvZDogJ3Bvc3QnLFxuICAgICAgcGFyZW50OiB1c2Vyc1xuICAgIH0pXG4gICAgdXNlcnMubG9nb3V0ID0gZ2V0UmVzb3VyY2UodXNlcnMubG9nb3V0IHx8ICdsb2dvdXQnLCB7XG4gICAgICBtZXRob2Q6ICdwb3N0JyxcbiAgICAgIHBhcmVudDogdXNlcnNcbiAgICB9KVxuICAgIHVzZXJzLnNlc3Npb24gPSBnZXRSZXNvdXJjZSh1c2Vycy5zZXNzaW9uIHx8ICdzZXNzaW9uJywge1xuICAgICAgbWV0aG9kOiAnZ2V0JyxcbiAgICAgIHBhcmVudDogdXNlcnNcbiAgICB9KVxuICAgIGFwaS51c2VycyA9IHVzZXJzXG5cbiAgICAvLyBBbGxvdyBvdmVycmlkaW5nIG9mIHJlc291cmNlIHBhdGggaGFuZGxlcnM6XG4gICAgLy8gYXBpLnJlc291cmNlcyA9IHtcbiAgICAvLyAgIGNvbGxlY3Rpb24ocmVzb3VyY2UpIHtcbiAgICAvLyAgICAgcmV0dXJuIHJlc291cmNlLnBhcmVudFxuICAgIC8vICAgICAgID8gYCR7cmVzb3VyY2UucGF0aH0/JHtyZXNvdXJjZS5wYXJlbnQucGF0aH1faWQ9JHtcbiAgICAvLyAgICAgICAgICByZXNvdXJjZS5wYXJlbnQuaWR9YFxuICAgIC8vICAgICAgIDogcmVzb3VyY2UucGF0aFxuICAgIC8vICAgfVxuICAgIC8vIH1cblxuICAgIGFwaS5yZXNvdXJjZXMgPSB7XG4gICAgICBhbnkocmVzb3VyY2UpIHtcbiAgICAgICAgY29uc3QgaGFuZGxlciA9IHRoaXNbcmVzb3VyY2U/LnR5cGVdIHx8IHRoaXMuZGVmYXVsdFxuICAgICAgICByZXR1cm4gcmVzb3VyY2UgJiYgaGFuZGxlci5jYWxsKHRoaXMsIHJlc291cmNlKVxuICAgICAgfSxcblxuICAgICAgZGVmYXVsdChyZXNvdXJjZSkge1xuICAgICAgICBjb25zdCBwYXJlbnRQYXRoID0gdGhpcy5hbnkocmVzb3VyY2UucGFyZW50KVxuICAgICAgICByZXR1cm4gcGFyZW50UGF0aFxuICAgICAgICAgID8gYCR7cGFyZW50UGF0aH0vJHtyZXNvdXJjZS5wYXRofWBcbiAgICAgICAgICA6IHJlc291cmNlLnBhdGhcbiAgICAgIH0sXG5cbiAgICAgIGNvbGxlY3Rpb24ocmVzb3VyY2UpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdChyZXNvdXJjZSlcbiAgICAgIH0sXG5cbiAgICAgIG1lbWJlcihyZXNvdXJjZSkge1xuICAgICAgICAvLyBOT1RFOiBXZSBhc3N1bWUgdGhhdCBhbGwgbWVtYmVycyBoYXZlIHJvb3QtbGV2ZWwgY29sbGVjdGlvbiByb3V0ZXMsXG4gICAgICAgIC8vIHRvIGF2b2lkIGV4Y2Vzc2l2ZSBuZXN0aW5nIG9mIChzdWItKWNvbGxlY3Rpb24gcm91dGVzLlxuICAgICAgICByZXR1cm4gYCR7cmVzb3VyY2UucGF0aH0vJHtyZXNvdXJjZS5pZH1gXG4gICAgICB9LFxuXG4gICAgICB1cGxvYWQocmVzb3VyY2UpIHtcbiAgICAgICAgLy8gRGl0byBTZXJ2ZXIgaGFuZGxlcyB1cGxvYWQgcm91dGVzIG9uIHRoZSBjb2xsZWN0aW9uIHJlc291cmNlOlxuICAgICAgICByZXR1cm4gYCR7dGhpcy5jb2xsZWN0aW9uKHJlc291cmNlLnBhcmVudCl9L3VwbG9hZC8ke3Jlc291cmNlLnBhdGh9YFxuICAgICAgfSxcblxuICAgICAgLi4uYXBpLnJlc291cmNlc1xuICAgIH1cblxuICAgIC8vIEFsbG93IG92ZXJyaWRpbmcgLyBleHRlbmRpbmcgb2YgaGVhZGVyczpcbiAgICAvLyBhcGkuaGVhZGVycyA9IHtcbiAgICAvLyAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbidcbiAgICAvLyB9XG4gICAgYXBpLmhlYWRlcnMgPSB7XG4gICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgLi4uYXBpLmhlYWRlcnNcbiAgICB9XG5cbiAgICBpZiAoaXNTdHJpbmcoZWwpKSB7XG4gICAgICBlbCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoZWwpXG4gICAgfVxuXG4gICAgY29uc3QgYXBwID0gKHRoaXMuYXBwID0gY3JlYXRlQXBwKHtcbiAgICAgIGNvbXBvbmVudHM6IHtcbiAgICAgICAgRGl0b1Jvb3QsXG4gICAgICAgIFZ1ZU5vdGlmaWNhdGlvbnMsXG4gICAgICAgIC8vIFRoaXMgbWF5IG9ubHkgYmUgbmVlZGVkIHRvIGF2b2lkIHRyZWUtc2hhY2tpbmcgb2YgdGhlc2UgY29tcG9uZW50cyxcbiAgICAgICAgLy8gc2luY2UgdGhleSBhY3R1YWxseSBoYW5kbGUgcmVnaXN0cnkgaW50ZXJuYWxseSBhbHJlYWR5LlxuICAgICAgICAvLyBUT0RPOiBSZW1vdmUgdGhpcyBvbmNlIHdlIGhhdmUgYSBiZXR0ZXIgc29sdXRpb24uXG4gICAgICAgIC4uLmNvbXBvbmVudHMsXG4gICAgICAgIC4uLnR5cGVzXG4gICAgICB9LFxuXG4gICAgICAvLyBNb3N0IGluamVjdHMgYXJlIGRlZmluZWQgYXMgZnVuY3Rpb25zLCB0byBwcmVzZXJ2ZSByZWFjdGl2ZW5lc3MgYWNyb3NzXG4gICAgICAvLyBwcm92aWRlL2luamVjdCwgc2VlOlxuICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3Z1ZWpzL3Z1ZS9pc3N1ZXMvNzAxNyNpc3N1ZWNvbW1lbnQtNDgwOTA2NjkxXG4gICAgICBwcm92aWRlOiB7XG4gICAgICAgIGFwaSxcbiAgICAgICAgLy8gQSBkZWZhdWx0IGxpc3Qgb2YgdmVyYnMgYXJlIHByb3ZpZGVkIGJ5ICR2ZXJicygpIGFuZCBjYW4gYmVcbiAgICAgICAgLy8gb3ZlcnJpZGRlbiBhdCBhbnkgcG9pbnQgaW4gdGhlIGNvbXBvbmVudCBoaWVyYXJjaHkuXG4gICAgICAgICR2ZXJiczogKCkgPT4gdmVyYnMsXG4gICAgICAgIC8vIFByb3ZpZGUgZGVmYXVsdHMgc28gRGl0b01peGluIGNhbiBpbmplY3QgdGhlbSBmb3IgYWxsIGNvbXBvbmVudHM6XG4gICAgICAgIC8vICAgaW5qZWN0OiBbICAnJGlzUG9wdWxhdGVkJywgJyRzY2hlbWFDb21wb25lbnQnLCAnJHJvdXRlQ29tcG9uZW50JyBdXG4gICAgICAgICR2aWV3czogKCkgPT4ge30sXG4gICAgICAgICRpc1BvcHVsYXRlZDogKCkgPT4gdHJ1ZSxcbiAgICAgICAgJHBhcmVudENvbXBvbmVudDogKCkgPT4gbnVsbCxcbiAgICAgICAgJHNjaGVtYUNvbXBvbmVudDogKCkgPT4gbnVsbCxcbiAgICAgICAgJHNjaGVtYVBhcmVudENvbXBvbmVudDogKCkgPT4gbnVsbCxcbiAgICAgICAgJHJvdXRlQ29tcG9uZW50OiAoKSA9PiBudWxsLFxuICAgICAgICAkZGF0YUNvbXBvbmVudDogKCkgPT4gbnVsbCxcbiAgICAgICAgJHNvdXJjZUNvbXBvbmVudDogKCkgPT4gbnVsbCxcbiAgICAgICAgJHJlc291cmNlQ29tcG9uZW50OiAoKSA9PiBudWxsLFxuICAgICAgICAkZGlhbG9nQ29tcG9uZW50OiAoKSA9PiBudWxsLFxuICAgICAgICAkcGFuZWxDb21wb25lbnQ6ICgpID0+IG51bGwsXG4gICAgICAgICR0YWJDb21wb25lbnQ6ICgpID0+IG51bGxcbiAgICAgIH0sXG5cbiAgICAgIHJlbmRlcjogKCkgPT5cbiAgICAgICAgY3JlYXRlRWxlbWVudChEaXRvUm9vdCwge1xuICAgICAgICAgIHJlZjogJ3Jvb3QnLFxuICAgICAgICAgIGNsYXNzOiBkaXRvLnNldHRpbmdzLnJvb3RDbGFzcyxcbiAgICAgICAgICB1bnJlc29sdmVkVmlld3M6IHZpZXdzLFxuICAgICAgICAgIG9wdGlvbnNcbiAgICAgICAgfSlcbiAgICB9KSlcblxuICAgIC8vIFByZXZlbnQgZW5kbGVzcyBsb29wcyBvZiBlcnJvciBtZXNzYWdlcyBkdXJpbmcgcmVuZGVyIGZ1bmN0aW9ucyBieVxuICAgIC8vIHNldHRpbmcgYSBjdXN0b20gZXJyb3IgaGFuZGxlci5cbiAgICBhcHAuY29uZmlnLmVycm9ySGFuZGxlciA9IGNvbnNvbGUuZXJyb3JcblxuICAgIGFwcC51c2UoVnVlTm90aWZpY2F0aW9ucywge1xuICAgICAgY29tcG9uZW50TmFtZTogJ1Z1ZU5vdGlmaWNhdGlvbnMnLFxuICAgICAgbmFtZTogJ25vdGlmeSdcbiAgICB9KVxuXG4gICAgYXBwLmRpcmVjdGl2ZSgncmVzaXplJywgUmVzaXplRGlyZWN0aXZlKVxuXG4gICAgYXBwLnVzZShcbiAgICAgIGNyZWF0ZVJvdXRlcih7XG4gICAgICAgIC8vIFN0YXJ0IHdpdGggYSBjYXRjaC1hbGwgcm91dGUsIHRvIGJlIHJlcGxhY2VkIGJ5IHRoZSBhY3R1YWwgcm91dGVzXG4gICAgICAgIC8vIG9uY2UgdGhlIHNjaGVtYXMgYXJlIGxvYWRlZCwgdG8gcHJldmVudCB2dWUtcm91dGVyIGZyb20gY29tcGxhaW5pbmcsXG4gICAgICAgIC8vIHNlZTogYHJlc29sdmVWaWV3cygpYCBpbiBgRGl0b1Jvb3RgIGZvciB0aGUgYWN0dWFsIHJvdXRlIHNldHVwLlxuICAgICAgICByb3V0ZXM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiAnY2F0Y2gtYWxsJyxcbiAgICAgICAgICAgIHBhdGg6ICcvOl8oLiopJyxcbiAgICAgICAgICAgIGNvbXBvbmVudHM6IHt9XG4gICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICBoaXN0b3J5OiBjcmVhdGVXZWJIaXN0b3J5KGRpdG8uYmFzZSksXG4gICAgICAgIGxpbmtBY3RpdmVDbGFzczogJycsXG4gICAgICAgIGxpbmtFeGFjdEFjdGl2ZUNsYXNzOiAnJ1xuICAgICAgfSlcbiAgICApXG5cbiAgICBlbC5jbGFzc0xpc3QuYWRkKCdkaXRvLWFwcCcpXG4gICAgYXBwLm1vdW50KGVsKVxuICB9XG5cbiAgcmVnaXN0ZXIodHlwZSwgb3B0aW9ucykge1xuICAgIHJldHVybiBEaXRvVHlwZUNvbXBvbmVudC5yZWdpc3Rlcih0eXBlLCBvcHRpb25zKVxuICB9XG59XG5cbmNsYXNzIFJlcXVlc3RFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgY29uc3RydWN0b3IocmVzcG9uc2UpIHtcbiAgICBzdXBlcihcbiAgICAgIGBSZXF1ZXN0IGZhaWxlZCB3aXRoIHN0YXR1cyBjb2RlOiAke3Jlc3BvbnNlLnN0YXR1c30gKCR7XG4gICAgICAgIHJlc3BvbnNlLnN0YXR1c1RleHRcbiAgICAgIH0pYFxuICAgIClcbiAgICB0aGlzLnJlc3BvbnNlID0gcmVzcG9uc2VcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiByZXF1ZXN0KGFwaSwge1xuICB1cmwsXG4gIG1ldGhvZCA9ICdnZXQnLFxuICAvLyBUT0RPOiBgcmVxdWVzdC5wYXJhbXNgIHdhcyBkZXByZWNhdGVkIGluIGZhdm91ciBvZiBgcXVlcnlgIG9uIDIwMjItMTEtMDEsXG4gIC8vIHJlbW92ZSBvbmNlIG5vdCBpbiB1c2UgYW55d2hlcmUgYW55IG1vcmUuXG4gIHBhcmFtcyA9IG51bGwsXG4gIHF1ZXJ5ID0gcGFyYW1zIHx8IG51bGwsXG4gIGhlYWRlcnMgPSBudWxsLFxuICBkYXRhID0gbnVsbCxcbiAgc2lnbmFsID0gbnVsbFxufSkge1xuICBpZiAocGFyYW1zKSB7XG4gICAgZGVwcmVjYXRlKFxuICAgICAgYHJlcXVlc3QucGFyYW1zIGlzIGRlcHJlY2F0ZWQuIFVzZSBhY3Rpb24ubWV0aG9kIGFuZCBhY3Rpb24ucGF0aCBpbnN0ZWFkLmBcbiAgICApXG4gIH1cblxuICBjb25zdCBpc0FwaVVybCA9IGFwaS5pc0FwaVVybCh1cmwpXG5cbiAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaChhcGkuZ2V0QXBpVXJsKHsgdXJsLCBxdWVyeSB9KSwge1xuICAgIG1ldGhvZDogbWV0aG9kLnRvVXBwZXJDYXNlKCksXG4gICAgLi4uKGRhdGEgJiYgeyBib2R5OiBKU09OLnN0cmluZ2lmeShkYXRhKSB9KSxcbiAgICBoZWFkZXJzOiB7XG4gICAgICAuLi4oaXNBcGlVcmwgJiYgYXBpLmhlYWRlcnMpLFxuICAgICAgLi4uaGVhZGVyc1xuICAgIH0sXG4gICAgY3JlZGVudGlhbHM6XG4gICAgICBpc0FwaVVybCAmJiBhcGkuY29ycz8uY3JlZGVudGlhbHNcbiAgICAgICAgPyAnaW5jbHVkZSdcbiAgICAgICAgOiAnc2FtZS1vcmlnaW4nLFxuICAgIHNpZ25hbFxuICB9KVxuXG4gIGlmIChyZXNwb25zZS5oZWFkZXJzLmdldCgnQ29udGVudC1UeXBlJyk/LmluY2x1ZGVzKCdhcHBsaWNhdGlvbi9qc29uJykpIHtcbiAgICByZXNwb25zZS5kYXRhID0gYXdhaXQgcmVzcG9uc2UuanNvbigpXG4gIH1cblxuICBpZiAoIXJlc3BvbnNlLm9rKSB7XG4gICAgdGhyb3cgbmV3IFJlcXVlc3RFcnJvcihyZXNwb25zZSlcbiAgfVxuICByZXR1cm4gcmVzcG9uc2Vcbn1cblxuZnVuY3Rpb24gaXNBcGlVcmwoYXBpLCB1cmwpIHtcbiAgcmV0dXJuICFpc0Fic29sdXRlVXJsKHVybCkgfHwgdXJsLnN0YXJ0c1dpdGgoYXBpLnVybClcbn1cblxuZnVuY3Rpb24gZ2V0QXBpVXJsKGFwaSwgeyB1cmwsIHF1ZXJ5IH0pIHtcbiAgaWYgKCF1cmwuc3RhcnRzV2l0aChhcGkudXJsKSAmJiAhaXNBYnNvbHV0ZVVybCh1cmwpKSB7XG4gICAgdXJsID0gY29tYmluZVVybHMoYXBpLnVybCwgdXJsKVxuICB9XG4gIC8vIFN1cHBvcnQgb3B0aW9uYWwgcXVlcnkgcGFyYW1ldGVycywgdG8gYmUgYXJlIGFkZGVkIHRvIHRoZSBVUkwuXG4gIGNvbnN0IHNlYXJjaCA9IGZvcm1hdFF1ZXJ5KHF1ZXJ5KVxuICByZXR1cm4gc2VhcmNoID8gYCR7dXJsfSR7dXJsLmluY2x1ZGVzKCc/JykgPyAnJicgOiAnPyd9JHtzZWFyY2h9YCA6IHVybFxufVxuXG5mdW5jdGlvbiBjb21iaW5lVXJscyhiYXNlVXJsLCByZWxhdGl2ZVVybCkge1xuICAvLyBVc2Ugc2FtZSBhcHByb2FjaCBhcyBheGlvcyBgY29tYmluZVVSTHMoKWAgdG8gam9pbiBiYXNlVXJsICYgcmVsYXRpdmVVcmw6XG4gIHJldHVybiBgJHtiYXNlVXJsLnJlcGxhY2UoL1xcLyskLywgJycpfS8ke3JlbGF0aXZlVXJsLnJlcGxhY2UoL15cXC8rLywgJycpfWBcbn1cbiJdLCJuYW1lcyI6WyJwYXJzZVVzZXJBZ2VudCIsInVzZXJBZ2VudCIsImFnZW50IiwidWEiLCJvcyIsInBsYXRmb3JtIiwibWF0Y2giLCJicm93c2VyIiwidjEiLCJ2MiIsInJ2IiwidmVyc2lvbiIsImFwcFN0YXRlIiwicmVhY3RpdmUiLCJhcHBlbmREYXRhUGF0aCIsImRhdGFQYXRoIiwidG9rZW4iLCJwYXJzZVBhcmVudERhdGFQYXRoIiwicGF0aCIsInBhcnNlRGF0YVBhdGgiLCJwYXJzZUl0ZW1EYXRhUGF0aCIsIm5lc3RlZCIsImdldEl0ZW1EYXRhUGF0aCIsIm5vcm1hbGl6ZURhdGFQYXRoIiwicGFyc2VQYXJlbnRJdGVtRGF0YVBhdGgiLCJpc0ludGVnZXIiLCJnZXRQYXJlbnRJdGVtRGF0YVBhdGgiLCJnZXRJdGVtIiwicm9vdEl0ZW0iLCJnZXRWYWx1ZUF0RGF0YVBhdGgiLCJnZXRQYXJlbnRJdGVtIiwiZ2V0TGFzdERhdGFQYXRoVG9rZW4iLCJnZXRMYXN0RGF0YVBhdGhOYW1lIiwiZ2V0TGFzdERhdGFQYXRoSW5kZXgiLCJpbmRleCIsInRlbXBvcmFyeUlkIiwic2V0VGVtcG9yYXJ5SWQiLCJkYXRhIiwiaWRLZXkiLCJpc1RlbXBvcmFyeUlkIiwiaWQiLCJpc1JlZmVyZW5jZSIsImhhc093blByb3BlcnR5IiwiY29udGV4dHMiLCJnZXQiLCJjb250ZXh0Iiwia2V5IiwiZGVmYXVsdFZhbHVlIiwib2JqZWN0IiwidG9SYXciLCJ2YWx1ZSIsImlzRnVuY3Rpb24iLCJzZXQiLCJEaXRvQ29udGV4dCIsImNvbXBvbmVudCIsIml0ZW0iLCJvcHRpb25zIiwibG9jYXRpb24iLCJyZXNvdXJjZSIsIkVtaXR0ZXJNaXhpbiIsImV2ZW50IiwiY2FsbGJhY2siLCJpc0FycmF5IiwiZXYiLCJpc1BsYWluT2JqZWN0IiwibGlzdGVuZXJzIiwiY2FsbGJhY2tzIiwib24iLCJhcmdzIiwiZW50cnkiLCJfYSIsImNiIiwicXVldWUiLCJyZXNvbHZlIiwibmV4dCIsInJlc3VsdCIsInJlcyIsImVycm9yIiwidGFyZ2V0IiwiY3JlZGl0Y2FyZCIsImlzQ3JlZGl0Q2FyZCIsImRlY2ltYWxzIiwiZW1haWwiLCJpc0VtYWlsIiwiaG9zdG5hbWUiLCJpc0hvc3RuYW1lIiwiZG9tYWluIiwiaXNEb21haW4iLCJpbnRlZ2VyIiwibWF4IiwibWluIiwicGFzc3dvcmQiLCJyYW5nZSIsInJlcXVpcmVkIiwic2V0dGluZ3MiLCJ1cmwiLCJpc1VybCIsIlZhbGlkYXRpb25NaXhpbiIsIm5vdGlmeSIsImlzVmFsaWQiLCJydWxlIiwic2V0dGluZyIsInZhbGlkYXRvciIsInZhbGlkYXRpb25zIiwidmFsaWRhdGUiLCJtZXNzYWdlIiwiYWRkTGFiZWwiLCJlcnJvcnMiLCJmb2N1cyIsImdldFNjaGVtYUFjY2Vzc29yIiwia2V5T3JEYXRhUGF0aCIsInR5cGUiLCJkZWYiLCJpc1N0cmluZyIsIm5hbWUiLCJnZXRTdG9yZUFjY2Vzc29yIiwiVHlwZU1peGluIiwiY29tcHV0ZVZhbHVlIiwiZm9ybWF0IiwicGFyc2UiLCJzY2hlbWFDb21wb25lbnQiLCJub2RlIiwiZXZlbnRzIiwiY2FtZWxpemUiLCJuYXRpdmVGaWVsZCIsInRleHRGaWVsZCIsImF0dHJpYnV0ZXMiLCJhZGQiLCJvbkZvY3VzIiwib25CbHVyIiwib25JbnB1dCIsIm9uQ2hhbmdlIiwiX2IiLCJlbGVtZW50IiwiYXNBcnJheSIsInVpZE1hcCIsInVpZCIsImdldFVpZCIsImdldEl0ZW1JZCIsInJhdyIsIlNjaGVtYUdyYXBoIiwiX19wdWJsaWNGaWVsZCIsImRlZmF1bHRzIiwic3ViR3JhcGgiLCJwYXJ0Iiwic2NoZW1hIiwicmVsYXRlZERhdGFQYXRoIiwibmFub2lkIiwiZmxhdHRlbiIsImdyYXBoIiwiZW50cmllcyIsIiRzZXR0aW5ncyIsInN1YktleSIsInNvdXJjZVNjaGVtYSIsImNsaXBib2FyZCIsImludGVybmFsIiwicmVsYXRlZCIsInJlZmVyZW5jZSIsInNvdXJjZSIsInJlbGF0aW9uIiwidmFsdWVzIiwicmVtb3ZlSWQiLCJyZWZlcmVuY2VJZCIsInJlZktleSIsInJldlZhbHVlIiwidHlwZUNoZWNrZXJzIiwiaXNCb29sZWFuIiwiaXNOdW1iZXIiLCJpc0RhdGUiLCJpc09iamVjdCIsImlzUmVnRXhwIiwidG9Cb29sZWFuIiwidG9OdW1iZXIiLCJ0b1N0cmluZyIsInRvRGF0ZSIsInRvQXJyYXkiLCJ0b09iamVjdCIsInRvUmVnRXhwIiwidHlwZUNvbnZlcnRlcnMiLCJpc01hdGNoaW5nVHlwZSIsInR5cGVzIiwiY29udmVydFR5cGUiLCJjb252ZXJ0ZXIiLCJ0eXBlQ29tcG9uZW50cyIsInVua25vd25UeXBlUmVwb3J0ZWQiLCJyZWdpc3RlclR5cGVDb21wb25lbnQiLCJnZXRUeXBlQ29tcG9uZW50IiwiYWxsb3dOdWxsIiwiaXRlcmF0ZVNjaGVtYUNvbXBvbmVudHMiLCJzY2hlbWFzIiwiaXNTaW5nbGVDb21wb25lbnRWaWV3IiwiaXNTY2hlbWEiLCJpdGVyYXRlTmVzdGVkU2NoZW1hQ29tcG9uZW50cyIsImdldFRhYlNjaGVtYXMiLCJmaW5kTmVzdGVkU2NoZW1hQ29tcG9uZW50Iiwic29tZU5lc3RlZFNjaGVtYUNvbXBvbmVudCIsImhhc05lc3RlZFNjaGVtYUNvbXBvbmVudHMiLCJpc0Zvcm0iLCJpc1ZpZXciLCJpc1RhYiIsImlzUGFuZWwiLCJpc01lbnUiLCJnZXRTY2hlbWFJZGVudGlmaWVyIiwicmVzb2x2ZVNjaGVtYSIsInVud3JhcE1vZHVsZSIsImlzUHJvbWlzZSIsImlzTW9kdWxlIiwia2V5cyIsInJlc29sdmVTY2hlbWFzIiwidW5yZXNvbHZlZFNjaGVtYXMiLCJyZXNvbHZlSXRlbSIsIm1hcENvbmN1cnJlbnRseSIsInJlc29sdmVWaWV3cyIsInVucmVzb2x2ZWRWaWV3cyIsImZsYXR0ZW5WaWV3cyIsInZpZXdzIiwicmVzb2x2ZVNjaGVtYUNvbXBvbmVudCIsIm1hcmtSYXciLCJEaXRvTWl4aW4iLCJyZXNvbHZlU2NoZW1hQ29tcG9uZW50cyIsInByb2Nlc3NTY2hlbWFDb21wb25lbnRzIiwiYXBpIiwicm91dGVzIiwibGV2ZWwiLCJwcm9taXNlcyIsInByb2Nlc3MiLCJyZWxhdGl2ZUxldmVsIiwicHJvY2Vzc1NjaGVtYUNvbXBvbmVudCIsImdldFBhbmVsU2NoZW1hcyIsInByb2Nlc3NTY2hlbWFEZWZhdWx0cyIsInBhbmVsIiwiZ2V0VHlwZU9wdGlvbnMiLCJwcm9jZXNzVmlldyIsImZ1bGxQYXRoIiwicHJvY2Vzc1JvdXRlU2NoZW1hIiwiY2hpbGRyZW4iLCJwcm9jZXNzTmVzdGVkU2NoZW1hcyIsImFzc2lnbkRlZXBseSIsInByb2Nlc3NOZXN0ZWRTY2hlbWFEZWZhdWx0cyIsImZvcm1zIiwiZ2V0Rm9ybVNjaGVtYXMiLCJmb3JtIiwicHJvY2Vzc0Zvcm1zIiwiY29tcG9uZW50cyIsInByb2Nlc3NGb3JtIiwicHJvY2Vzc1RhYiIsInByb2Nlc3NQYW5lbCIsInRhYnMiLCJwYW5lbHMiLCJ0YWIiLCJoYXNGb3JtU2NoZW1hIiwiaGFzTXVsdGlwbGVGb3JtU2NoZW1hcyIsImdldFZpZXdGb3JtU2NoZW1hIiwidmlldyIsInZpZXdTY2hlbWEiLCJnZXRWaWV3U2NoZW1hIiwiaGFzVmlld1NjaGVtYSIsImdldFZpZXdFZGl0UGF0aCIsIm1vZGlmeUZvcm0iLCJjb21wYWN0IiwiZ2V0SXRlbUZvcm1TY2hlbWFGcm9tRm9ybXMiLCJnZXRJdGVtRm9ybVNjaGVtYSIsImlzQ29tcGFjdCIsImlzSW5saW5lZCIsImlzTmVzdGVkIiwiaGFzTGFiZWwiLCJnZW5lcmF0ZUxhYmVscyIsImxhYmVsIiwib21pdFNwYWNpbmciLCJnZXRTY2hlbWFWYWx1ZSIsImNvbnZlcnRlZCIsInNob3VsZFJlbmRlclNjaGVtYSIsImdldERlZmF1bHRWYWx1ZSIsImNsb25lIiwiaWdub3JlTWlzc2luZ1ZhbHVlIiwidHlwZU9wdGlvbnMiLCJzZXREZWZhdWx0VmFsdWVzIiwicHJvY2Vzc1NjaGVtYURhdGEiLCJyb290RGF0YSIsImNvbXB1dGUiLCJjbG9uZUl0ZW0iLCJjb3B5Iiwib3JkZXJLZXkiLCJwcm9jZXNzRGF0YSIsInNjaGVtYU9ubHkiLCJwcm9jZXNzZWREYXRhIiwid3JhcFByaW1pdGl2ZXMiLCJhIiwiYiIsImlkMSIsImlkMiIsImV4Y2x1ZGUiLCJnZXRDb250ZXh0IiwicHJvY2Vzc1ZhbHVlIiwicHJvY2Vzc0JlZm9yZSIsInByb2Nlc3NBZnRlciIsInByb2Nlc3NDb21wb25lbnRzIiwiZ2V0RGF0YVBhdGgiLCJjb21wb25lbnRTY2hlbWEiLCJjb21wb25lbnREYXRhUGF0aCIsInByb2Nlc3NJdGVtIiwiaXRlbURhdGFQYXRoIiwicHJvY2Vzc2VkSXRlbSIsImdldE5hbWVkU2NoZW1hcyIsImFycmF5IiwidG9TY2hlbWEiLCJnZXRCdXR0b25TY2hlbWFzIiwiYnV0dG9ucyIsImdldFR5cGUiLCJzY2hlbWFPclR5cGUiLCJnZXRTb3VyY2VUeXBlIiwiZ2V0UGFuZWxFbnRyeSIsInRhYkNvbXBvbmVudCIsImdldFBhbmVsRW50cmllcyIsInBhbmVsU2NoZW1hcyIsInBhbmVsRW50cmllcyIsImdldEFsbFBhbmVsRW50cmllcyIsInBhbmVsU2NoZW1hIiwiaXNPYmplY3RTb3VyY2UiLCJpc0xpc3RTb3VyY2UiLCJnZXRJdGVtVWlkIiwiaGFzUmVzb3VyY2UiLCJnZXRSZXNvdXJjZSIsInBhcmVudCIsImRlZnMiLCJnZXRNZW1iZXJSZXNvdXJjZSIsInBpY2tCeSIsInNlbGYiLCJuZXh0VWlkIiwibGFiZWxpemUiLCJzdG9yZSIsIm9sZEtleSIsInZlcmIiLCJxdWVyeSIsIm1ldGhvZCIsInNpZ25hbCIsImNoZWNrVXNlciIsInJlc3BvbnNlIiwiZXF1YWxzIiwiY2FjaGUiLCJjYWNoZVBhcmVudCIsImxvYWRDYWNoZSIsImNhY2hlS2V5IiwibG9jYWxlIiwiYm9keSIsImdldENvbXB1dGVkQWNjZXNzb3IiLCJnZXR0ZXIiLCJjb21wdXRlZCIsImFjY2Vzc29yIiwid2F0Y2giLCJoYW5kbGVycyIsImV4cHIiLCJhZGRFdmVudCIsImh5cGhlbmF0ZSIsImhhc0xpc3RlbmVycyIsInBhcmVudEhhc0xpc3RlbmVycyIsInBhcmFtcyIsInJlc29sdmVNZXJnZWRPcHRpb25zIiwibWl4aW5zIiwibWVyZ2VPcHRpb25zIiwidG8iLCJmcm9tIiwibWl4aW4iLCJkaXRvT3B0aW9uS2V5cyIsIkRpdG9Db21wb25lbnQiLCJkZWZpbml0aW9uIiwiZGVzY3JpYmVEYXRlIiwiZGF0ZSIsImFsdGVyRGF0ZSIsIm92ZXJyaWRlcyIsInBhcnNlRGF0ZSIsInN0cmluZyIsInRpbWUiLCJ0aW1lRGVmYXVsdCIsImRheSIsInNlcDEiLCJtb250aCIsInNlcDIiLCJ5ZWFyIiwiaG91ciIsIm1pbnV0ZSIsInNlY29uZCIsIm1pbGxpc2Vjb25kIiwiZ2V0RGF0ZVBhcnRzIiwiZ2V0TW9udGhJbmRleCIsImlzVmFsaWRUaW1lUGFydCIsImdldERhdGVQYXJ0QXRQb3NpdGlvbiIsInBvc2l0aW9uIiwicGFydHMiLCJnZXRQb3NpdGlvbiIsImxlbmd0aCIsInBvcyIsIm9mZnNldCIsImlzVVMiLCJzdGFydCIsImVuZCIsInNob3J0Rm9ybWF0IiwibG9uZ0Zvcm1hdCIsIl9zZmNfbWFpbiIsIndlZWtkYXlOYW1lcyIsIm1vbnRoTmFtZXMiLCJnZXRMb2NhbGVOYW1lcyIsIm1vZGUiLCJ1cGRhdGUiLCJzdGVwIiwiY3VycmVudFZhbHVlIiwiZW50ZXIiLCJzdGFydFllYXIiLCJpIiwiZmlyc3REYXlXZWVrIiwibnVtRGF5cyIsInByZXZNb250aCIsInByZXZNb250aE51bURheXMiLCJub3ciLCJpc0RheSIsInN0YXRlIiwibmV4dE1vbnRoTmVlZCIsIm5leHRNb250aCIsImxvY2FsZU5hbWVzIiwibmFtZXMiLCJhZGRFdmVudHMiLCJ0YXJnZXRzIiwiaGFuZGxlciIsImNvbWJpbmVFdmVudHMiLCJnZXRLZXkiLCJnZXRLZXlOYXZpZ2F0aW9uIiwiZ2V0VGFyZ2V0IiwiY2xhc3NlcyIsInNob3ciLCJ0cmlnZ2VyIiwicG9wdXAiLCJfYyIsImVsIiwiYm91bmRzIiwidHJpZ2dlckxlZnQiLCJ0cmlnZ2VyVG9wIiwidHJpZ2dlcldpZHRoIiwidHJpZ2dlckhlaWdodCIsInBvcHVwV2lkdGgiLCJwb3B1cEhlaWdodCIsInBhcnQxIiwicGFydDIiLCJ3aW5XaWR0aCIsIndpbkhlaWdodCIsImxlZnQiLCJ0b3AiLCJ0cmlnZ2VyQm91bmRzIiwiaW5wdXQiLCJfIiwic2l6ZSIsImdldExlbmd0aCIsIl9vcGVuQmxvY2siLCJfY3JlYXRlRWxlbWVudEJsb2NrIiwic2V0U2VsZWN0aW9uIiwiZ2V0U2VsZWN0aW9uIiwiVHJpZ2dlciIsIkNhbGVuZGFyIiwiSW5wdXRGaWVsZCIsIkljb24iLCJkZWZhdWx0Rm9ybWF0cyIsImdldERhdGVQYXJ0IiwiY2FsZW5kYXIiLCJ0b2dnbGUiLCJzZWxlY3Rpb24iLCJzbW9vdGgiLCJzY3JvbGwiLCJyZWYiLCJsaW5lSGVpZ2h0IiwiZGlzdGFuY2UiLCJjb3VudCIsImlzRGlnaXQiLCJjaGFyIiwiRGF0ZVBpY2tlciIsIlRpbWVQaWNrZXIiLCJ0cmFuc2l0aW9uIiwiZGlzYWJsZWQiLCJ0ZXh0Iiwic2hvd1ByZXYiLCJzaG93TmV4dCIsImN1cnJlbnRQYWdlIiwibnVtUGFnZXMiLCJzaG93TGVuZ3RoIiwicGFnZSIsImJ1dHRvbiIsImNoZWNrZWQiLCJ1bmNoZWNrZWQiLCJtb2RlbFZhbHVlIiwiVHJhbnNpdGlvbkhlaWdodCIsImVuYWJsZWQiLCJzbG90cyIsImNyZWF0ZUVsZW1lbnQiLCJUcmFuc2l0aW9uIiwicHJvcHMiLCJzZXRTdHlsZSIsInN0eWxlIiwibmV4dFRpbWVvdXQiLCJmb3JjZVJlcGFpbnQiLCJ3aWR0aCIsImhlaWdodCIsImhhc1ZOb2RlQ29udGVudCIsInZub2RlIiwiQ29tbWVudCIsImhhc1Nsb3RDb250ZW50Iiwic2xvdCIsInVzZVNsb3RzIiwiRG9tTWl4aW4iLCJyZW1vdmUiLCJEaXRvVXNlciIsInJvbGVzIiwicm9sZSIsIlNjaGVtYVBhcmVudE1peGluIiwic2NoZW1hQ29tcG9uZW50cyIsIlZhbGlkYXRvck1peGluIiwiaXQiLCJSb3V0ZU1peGluIiwicm91dGVDb21wb25lbnQiLCJtYXRjaGVkIiwicmVjb3JkIiwiYnJlYWRjcnVtYiIsInJvdXRlQ29tcG9uZW50cyIsIm9rIiwicmVjb3JkUGF0aCIsInJvb3RQYXRoIiwiZ2V0Q29tbW9uUHJlZml4IiwiaXNMb2FkaW5nIiwiVXNlRm9jdXNUcmFwIiwiZGVmaW5lQ29tcG9uZW50IiwidHJhcCIsImFjdGl2YXRlIiwiZGVhY3RpdmF0ZSIsInVucmVmRWxlbWVudCIsImNyZWF0ZUZvY3VzVHJhcCIsIm9uU2NvcGVEaXNwb3NlIiwiaCIsImRpYWxvZ0RhdGEiLCJEaXRvRGlhbG9nIiwicHJlZml4IiwidGlwcHlEZWxlZ2F0ZSIsImluc3RhbmNlIiwiZXJyIiwiZHJhZ0NvdW50IiwidXBsb2FkcyIsInRvZ2dsZURyb3BUYXJnZXRDbGFzcyIsInVwbG9hZCIsInNldERyYWdnaW5nRmlsZXMiLCJoYXNVcGxvYWRzIiwiY2FuRHJvcCIsInRpdGxlIiwicmVqZWN0IiwiZGlhbG9nSWQiLCJhZGRpdGlvbmFsQ29tcG9uZW50cyIsInJlZGlyZWN0QWZ0ZXJMb2dpbiIsImxvZ2luRGF0YSIsInVzZXIiLCJEaXRvVmlldyIsImFkZFJvdXRlcyIsInJvdXRlciIsInJlbW92ZXJzIiwicm91dGUiLCJzdWJNZW51Q2xhc3MiLCJmaXJzdENoaWxkIiwibG9nIiwic3RyaXBUYWdzIiwibm90aWZpY2F0aW9ucyIsImR1cmF0aW9uRmFjdG9yIiwiZHVyYXRpb24iLCJQdWxsZG93bk1peGluIiwic3RhcnRUaW1lIiwib3BlbiIsImNvbnRlbnQiLCJhc09iamVjdCIsIkl0ZW1NaXhpbiIsIml0ZW1JZCIsImV4dGVuZGVkIiwiaXRlbUxhYmVsIiwiZm9ybUxhYmVsIiwiZ2V0Rm9ybUxhYmVsIiwic3VmZml4IiwiY29sdW1ucyIsImhhZExhYmVsIiwic2VsZWN0ZWRUYWIiLCJmaXJzdCIsImRlZmF1bHRUYWIiLCJoYXNoIiwibmV3VGFiIiwib2xkVGFiIiwiZGF0YVBhdGhPck5hbWUiLCJzY3JvbGxDb250YWluZXIiLCJkaXNwYXRjaCIsImNvbXBvbmVudHNCeURhdGFQYXRoIiwiZGF0YVBhdGhzIiwiY2hlY2siLCJmaWVsZCIsInVubWF0Y2hlZCIsImVycnMiLCJmdWxsRGF0YVBhdGgiLCJkYXRhUGF0aFBhcnRzIiwiZm91bmQiLCJwcm9wZXJ0eSIsInN1YkNvbXBvbmVudHMiLCJwYW5lIiwicmVnaXN0cnkiLCJlbnRyaWVzQnlEYXRhUGF0aCIsIl93aXRoRGlyZWN0aXZlcyIsIl9GcmFnbWVudCIsIl9yZW5kZXJMaXN0IiwiX2N0eCIsIl9ob2lzdGVkXzEiLCJfY3JlYXRlQmxvY2siLCJfY29tcG9uZW50X0RpdG9Db250YWluZXIiLCJuZXN0ZWREYXRhUGF0aCIsIl9ob2lzdGVkXzIiLCJwb3NpdGlvbnMiLCJpc0xhc3RJblJvdyIsImZpbmROZXh0UG9zaXRpb24iLCJyb3dzIiwicm93IiwidmVydGljYWxMYWJlbHNCeUluZGljZXMiLCJoYXNMYWJlbHNJblJvdyIsImNvbnRhaW5lciIsInBhZGRpbmciLCJmb250U2l6ZSIsInBhcnNlRnJhY3Rpb24iLCJkaXZpZGVuZCIsImRpdmlzb3IiLCJhY2N1bXVsYXRlZEJhc2lzIiwiZmxleEJhc2lzIiwiY29tYmluZWRCYXNpcyIsImNhcGl0YWxpemUiLCJjbGlwYm9hcmREYXRhIiwicGFzdGUiLCIkc2NoZW1hIiwicmVwb3J0IiwianNvbiIsImRlaW5kZW50IiwiTG9hZGluZ01peGluIiwidXBkYXRlUm9vdCIsInVwZGF0ZVZpZXciLCJSZXNvdXJjZU1peGluIiwiYW1vdW50IiwidmVyYnMiLCJjbGVhciIsImxvYWRpbmdPcHRpb25zIiwiY29udHJvbGxlciIsInJlcXVlc3QiLCJzZXREYXRhIiwib25TdWNjZXNzIiwib25FcnJvciIsIm5vdGlmeVN1Y2Nlc3MiLCJub3RpZnlFcnJvciIsInJlc29sdmVQYXRoIiwiaXNDcmVhdGluZyIsInByb3ZpZGVzRGF0YSIsImRhdGFQYXJ0cyIsInBhdGhQYXJ0cyIsInJvdXRlUGFydHMiLCJsYXN0RGF0YVBhcnQiLCJsIiwiZGF0YVBhcnQiLCJwYXJhbSIsIm1haW5TY2hlbWFDb21wb25lbnQiLCJwcmVzZW50IiwiY2xvc2VGb3JtIiwiZ2V0VmVyYiIsImJ1dHRvblJlc291cmNlIiwic3VjY2VzcyIsIl9yZXNvdXJjZSIsIl9tZXRob2QiLCJEaXRvRm9ybSIsInRpcCIsInRpcHB5Iiwic2NvcGUiLCJQYWdpbmF0aW9uIiwiU29ydGFibGVNaXhpbiIsImZvcmNlRmFsbGJhY2siLCJvbGRJbmRleCIsIm5ld0luZGV4IiwibGlzdCIsInBhZ2luYXRpb25SYW5nZSIsIl9ub3JtYWxpemVTdHlsZSIsIl9jYWNoZSIsIl93aXRoTW9kaWZpZXJzIiwiJGV2ZW50IiwiX25vcm1hbGl6ZUNsYXNzIiwiX2NyZWF0ZUVsZW1lbnRWTm9kZSIsIl9ob2lzdGVkXzQiLCJfdG9EaXNwbGF5U3RyaW5nIiwiX2hvaXN0ZWRfNSIsIl9ob2lzdGVkXzciLCJfbWVyZ2VQcm9wcyIsIl9ob2lzdGVkXzgiLCJfY29tcG9uZW50X0RpdG9MYWJlbCIsIl9jcmVhdGVWTm9kZSIsIl9jb21wb25lbnRfRGl0b1RhYmxlQ2VsbCIsIl9jb21wb25lbnRfRGl0b0RyYWdnYWJsZSIsIl9jb21wb25lbnRfRGl0b1RyZWVJdGVtIiwiY2hpbGRyZW5TY2hlbWEiLCJjaGlsZHJlbkxpc3QiLCJlZGl0UGF0aCIsImNoaWxkcmVuT3BlbiIsIm51bUNoaWxkcmVuIiwiY3JlYXRhYmxlIiwiZWRpdGFibGUiLCJvcmRlciIsImNvbHVtbiIsInJlbmRlciIsImVzY2FwZUh0bWwiLCJUWVBFUyIsImZpbGUiLCJyZWFkZXIiLCJ1c2VTb3J0YWJsZSIsInNvcnRhYmxlIiwiZG9jdW1lbnQiLCJkZWZhdWx0RG9jdW1lbnQiLCJyZXNldE9wdGlvbnMiLCJkZWZhdWx0T3B0aW9ucyIsImUiLCJtb3ZlQXJyYXlFbGVtZW50IiwiU29ydGFibGUiLCJzdG9wIiwib3B0aW9uIiwidHJ5T25Nb3VudGVkIiwidHJ5T25TY29wZURpc3Bvc2UiLCJfdmFsdWVJc1JlZiIsImlzUmVmIiwidG9WYWx1ZSIsIm5leHRUaWNrIiwiVXNlU29ydGFibGUiLCJ1c2VWTW9kZWwiLCJEaXRvVk5vZGUiLCJEaXRvVHlwZUNvbXBvbmVudCQxIiwiRGl0b1R5cGVDb21wb25lbnQiLCJvbkNsaWNrIiwiRGF0YU1peGluIiwiYXN5bmNFbnRyeSIsInJlc29sdmVkRGF0YSIsImxvYWQiLCJ0aW1lciIsIk9wdGlvbnNNaXhpbiIsImNvbnZlcnRWYWx1ZSIsImNvbnZlcnQiLCJzZWFyY2giLCJmaWx0ZXIiLCJkZWJvdW5jZSIsImRlYm91bmNlQXN5bmMiLCJncm91cGVkIiwicmVzdWx0cyIsImdyb3VwIiwiZmluZE9wdGlvbiIsImdyb3VwQnkiLCJvcHRpb25WYWx1ZSIsIm9wdGlvbkxhYmVsIiwicHJvY2Vzc1JlbGF0ZSIsImZsYXNrIiwiQ29kZUZsYXNrIiwiY2hhbmdlZCIsImlnbm9yZVdhdGNoIiwiaWdub3JlVXBkYXRlIiwic2V0Q29kZSIsImNvZGUiLCJzZXRWYWx1ZSIsIlNrZXRjaFBpY2tlciIsInRpbnljb2xvciIsImNvbG9yIiwiRGF0ZVRpbWVQaWNrZXIiLCJmb3JtYXRzIiwiZm9ybWF0UXVlcnkiLCJ2YWwiLCJyZXBsYWNlUm91dGUiLCJTb3VyY2VNaXhpbiIsImRlZmF1bHRTb3J0IiwiZGlyZWN0aW9uIiwiZHJhZ2dhYmxlIiwiY29sbGFwc2libGUiLCJyZW1vdmVkIiwibGlzdERhdGEiLCJvbkNvbXBsZXRlIiwib3BlbmVkIiwiY2FsbE9uQ29tcGxldGUiLCJpbmxpbmVkIiwibWV0YSIsImZvcm1NZXRhIiwiY2hpbGRSb3V0ZXMiLCJzb3VyY2VQYXRoIiwiZm9ybVJvdXRlIiwiZ2V0UGF0aFdpdGhQYXJhbSIsImZsYXRSb3V0ZXMiLCJzdWJSb3V0ZXMiLCJjaGlsZFJvdXRlIiwiZmlsdGVyQ29tcG9uZW50cyIsImRhdGV0aW1lIiwiY3JlYXRlRmlsdGVyc1BhbmVsIiwiZmlsdGVycyIsInN0aWNreSIsImZpbHRlclNjaGVtYXMiLCJwYXJzZUZpbHRlcnNEYXRhIiwiY3JlYXRlRmlsdGVyc0NvbXBvbmVudHMiLCJjcmVhdGVGaWx0ZXJzQnV0dG9ucyIsImZvcm1hdEZpbHRlcnNEYXRhIiwic21hbGwiLCJnZXREYXRhTmFtZSIsImZpbHRlck5hbWUiLCJnZXRGaWx0ZXJOYW1lIiwiZGF0YU5hbWUiLCJjb21wcyIsImdldENvbXBvbmVudHNGb3JGaWx0ZXIiLCJmaWx0ZXJzRGF0YSIsIl9jb21wb25lbnRfRGl0b1RhYmxlSGVhZCIsIl9jb21wb25lbnRfRGl0b1NjaGVtYUlubGluZWQiLCJfcmVzb2x2ZUR5bmFtaWNDb21wb25lbnQiLCJfY29tcG9uZW50X0RpdG9FZGl0QnV0dG9ucyIsIl9ob2lzdGVkXzkiLCJvYmoiLCJmaWx0ZXJzRGF0YVBhdGgiLCJFZGl0b3JDb250ZW50IiwiZWRpdG9yIiwiZW5hYmxlUnVsZXMiLCJzZXRWYWx1ZURlYm91bmNlZCIsIm9uVXBkYXRlIiwiRWRpdG9yIiwiZ2V0UG9pbnQiLCJ4IiwieSIsInByZXZZIiwibW91c2Vtb3ZlIiwiZGlhbG9nQ29tcG9uZW50IiwiZ2V0TWFya0F0dHJpYnV0ZXMiLCJocmVmIiwibWFya3MiLCJub2RlcyIsInRvb2xzIiwiRG9jdW1lbnQiLCJUZXh0IiwiUGFyYWdyYXBoIiwiQm9sZCIsIkl0YWxpYyIsIlVuZGVybGluZSIsIlN0cmlrZSIsIlNtYWxsIiwiQ29kZSIsIkxpbmtXaXRoVGl0bGUiLCJCbG9ja3F1b3RlIiwiQ29kZUJsb2NrIiwiSGFyZEJyZWFrIiwiSGVhZGluZyIsIkhvcml6b250YWxSdWxlIiwiTGlzdEl0ZW0iLCJCdWxsZXRMaXN0IiwiT3JkZXJlZExpc3QiLCJIaXN0b3J5IiwiZXh0ZW5zaW9uIiwic2V0dGluZ3NOYW1lIiwiZGVzY3JpcHRpb25zIiwiY29tbWFuZHMiLCJhZGRCdXR0b24iLCJpY29uIiwiY29tbWFuZCIsImRlc2NyaXB0aW9uIiwic2V0dGluZ05hbWUiLCJhdHRyaWJ1dGUiLCJNYXJrIiwiTGluayIsIl9jb21wb25lbnRfVnVlTXVsdGlzZWxlY3QiLCJWdWVNdWx0aXNlbGVjdCIsInBsYWNlaG9sZGVyIiwic2VhcmNoYWJsZSIsInRhZ2dhYmxlIiwidGFnIiwiTnVtYmVyTWl4aW4iLCJTd2l0Y2hCdXR0b24iLCJUZXh0TWl4aW4iLCJtYXNrZWRQYXNzd29yZCIsImhhc0VkaXRhYmxlRm9ybXMiLCJmb3JtYXRGaWxlU2l6ZSIsImZpbGVzaXplIiwiVnVlVXBsb2FkIiwiYXNGaWxlcyIsImFjY2VwdCIsIm1heFNpemUiLCJwYXJzZUZpbGVTaXplIiwidGh1bWJuYWlscyIsInRvdGFsIiwicmVhZHkiLCJuZXdGaWxlIiwib2xkRmlsZSIsInhociIsImJsb2IiLCJmaWxlcyIsIlJlc2l6ZURpcmVjdGl2ZSIsImJpbmRpbmciLCJvYnNlcnZlUmVzaXplIiwidW5vYnNlcnZlUmVzaXplIiwiT2JzZXJ2ZXIiLCJpc1Jlc2l6ZVN1cHBvcnRlZCIsIm9ic2VydmVycyIsImJveCIsIkRpdG9BZG1pbiIsImRpdG8iLCJnZXRBcGlVcmwiLCJpc0FwaVVybCIsInVzZXJzIiwicGFyZW50UGF0aCIsImFwcCIsImNyZWF0ZUFwcCIsIkRpdG9Sb290IiwiVnVlTm90aWZpY2F0aW9ucyIsImNyZWF0ZVJvdXRlciIsImNyZWF0ZVdlYkhpc3RvcnkiLCJSZXF1ZXN0RXJyb3IiLCJoZWFkZXJzIiwiZGVwcmVjYXRlIiwiaXNBYnNvbHV0ZVVybCIsImNvbWJpbmVVcmxzIiwiYmFzZVVybCIsInJlbGF0aXZlVXJsIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFHTyxTQUFTQSxHQUFlQyxJQUFZLElBQUk7QUFDN0MsUUFBTUMsSUFBUSxDQUFFLEdBRVZDLElBQUtGLEVBQVUsWUFBYSxHQUM1QixDQUFDRyxDQUFFLElBQ1Asa0VBQWtFO0FBQUEsSUFDaEVEO0FBQUEsRUFDTixLQUFTLENBQUUsR0FDSEUsSUFDSjtBQUFBLElBQ0UsUUFBVTtBQUFBLElBQ1YsUUFBVTtBQUFBLElBQ1YsTUFBUTtBQUFBLElBQ1Isa0JBQWtCO0FB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
|