@media-quest/engine 0.0.4 → 0.0.6
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/public-api.js +26 -10
- package/dist/public-api.mjs +26 -10
- package/package.json +4 -3
- package/src/engine/SchemaEngine.ts +182 -180
- package/src/player/dplayer.ts +72 -49
- package/src/services/DMedia-manager.ts +146 -149
package/dist/public-api.js
CHANGED
|
@@ -695,10 +695,6 @@ var DMediaManager = class _DMediaManager {
|
|
|
695
695
|
}
|
|
696
696
|
}
|
|
697
697
|
async playSequence(seq) {
|
|
698
|
-
console.log(this.TAG + "SEQUENCE STARTED -- TODO EVENT FOR THIS??");
|
|
699
|
-
console.log(this.TAG + "SEQUENCE STARTED -- TODO EVENT FOR THIS??");
|
|
700
|
-
console.log(this.TAG + "SEQUENCE STARTED -- TODO EVENT FOR THIS??");
|
|
701
|
-
console.log(this.TAG + "SEQUENCE STARTED -- TODO EVENT FOR THIS??");
|
|
702
698
|
const elements = seq.items;
|
|
703
699
|
const testClone = [...elements];
|
|
704
700
|
const first = testClone.pop();
|
|
@@ -1139,7 +1135,30 @@ var DPlayer = class {
|
|
|
1139
1135
|
this.nextQue.resetQue(data.pages);
|
|
1140
1136
|
}
|
|
1141
1137
|
saveHistory(pageHistory) {
|
|
1138
|
+
console.log("SAVE HISTORY", pageHistory);
|
|
1142
1139
|
this.history.addToHistory(pageHistory);
|
|
1140
|
+
const facts = this.history.getFacts();
|
|
1141
|
+
const result = this.ruleEngine.solveAll(this.data.rules, facts);
|
|
1142
|
+
const matchingRules = result.matching;
|
|
1143
|
+
const actions = matchingRules.map((r) => r.actionList).flat(1);
|
|
1144
|
+
actions.forEach((a) => {
|
|
1145
|
+
console.log(a.payload);
|
|
1146
|
+
switch (a.kind) {
|
|
1147
|
+
case "PAGE_QUE_JUMP_TO_PAGE_COMMAND":
|
|
1148
|
+
this.nextQue.jumpToPageById(a.payload.pageId);
|
|
1149
|
+
break;
|
|
1150
|
+
case "PAGE_QUE_EXCLUDE_BY_PAGE_ID_COMMAND":
|
|
1151
|
+
this.nextQue.removeByPageId(a.payload.pageIds);
|
|
1152
|
+
break;
|
|
1153
|
+
case "PAGE_QUE_EXCLUDE_BY_TAG_COMMAND":
|
|
1154
|
+
this.nextQue.removeByTag(a.payload.tagIds);
|
|
1155
|
+
break;
|
|
1156
|
+
default:
|
|
1157
|
+
console.log("UNKNOWN ACTION", a);
|
|
1158
|
+
const check = a;
|
|
1159
|
+
}
|
|
1160
|
+
});
|
|
1161
|
+
console.log(actions);
|
|
1143
1162
|
}
|
|
1144
1163
|
getResults() {
|
|
1145
1164
|
return this.history.getAnswers();
|
|
@@ -2023,6 +2042,8 @@ var SchemaEngine = class {
|
|
|
2023
2042
|
this.nextPage();
|
|
2024
2043
|
}
|
|
2025
2044
|
if (command.kind === "ENGINE_LEAVE_PAGE_COMMAND") {
|
|
2045
|
+
console.log(this.TAG + "SEQUENCE STARTED -- TODO EVENT FOR THIS??");
|
|
2046
|
+
console.log(command);
|
|
2026
2047
|
const pageId = command.payload.pageId;
|
|
2027
2048
|
const facts = command.payload.factsCollected;
|
|
2028
2049
|
const timestamp = DTimestamp.now();
|
|
@@ -2054,12 +2075,8 @@ var SchemaEngine = class {
|
|
|
2054
2075
|
makeStatic(this.mediaContainer);
|
|
2055
2076
|
}
|
|
2056
2077
|
nextPage() {
|
|
2057
|
-
const currPageId = this.currentPage ? this.currentPage.id : "NO_PAGE";
|
|
2058
|
-
console.log(this.TAG + " NEXT_PAGE STARTED AT: " + currPageId);
|
|
2059
2078
|
this.mediaManager.clearAllMedia();
|
|
2060
2079
|
const nextPage = this.player.getNextPage();
|
|
2061
|
-
const state = this.stateService.getState();
|
|
2062
|
-
console.log(state);
|
|
2063
2080
|
if (this.currentPage) {
|
|
2064
2081
|
this.currentPage.destroy();
|
|
2065
2082
|
this.uiContainer.innerHTML = "";
|
|
@@ -2076,8 +2093,6 @@ var SchemaEngine = class {
|
|
|
2076
2093
|
newPage.appendYourself(this.uiContainer);
|
|
2077
2094
|
this.mediaManager.setPage(nextPage);
|
|
2078
2095
|
const s1 = this.stateService.getState();
|
|
2079
|
-
console.log(s1);
|
|
2080
|
-
console.log("Next-page: " + newPage.id);
|
|
2081
2096
|
return true;
|
|
2082
2097
|
}
|
|
2083
2098
|
destroy() {
|
|
@@ -2185,3 +2200,4 @@ var BooleanStateProperty = class _BooleanStateProperty {
|
|
|
2185
2200
|
SchemaDto,
|
|
2186
2201
|
SchemaEngine
|
|
2187
2202
|
});
|
|
2203
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3JjL3B1YmxpYy1hcGkudHMiLCAiLi4vc3JjL2R0by9TY2hlbWFEdG8udHMiLCAiLi4vc3JjL2NvbW1vbi9EVGltZXN0YW1wLnRzIiwgIi4uL3NyYy91dGlscy9EVXRpbC50cyIsICIuLi9zcmMvRGVsZW1lbnQvY3NzLnRzIiwgIi4uL3NyYy9EZWxlbWVudC9EU3R5bGUudHMiLCAiLi4vc3JjL0RlbGVtZW50L1ZpZGVvQ29udGFpbmVyLnRzIiwgIi4uL3NyYy9EZWxlbWVudC9BdWRpb0NvbnRhaW5lci50cyIsICIuLi9zcmMvc2VydmljZXMvRE1lZGlhLW1hbmFnZXIudHMiLCAiLi4vc3JjL2NvbW1hbmRzL0RDb21tYW5kQnVzLnRzIiwgIi4uL3NyYy9ldmVudHMvZXZlbnQtYnVzLnRzIiwgIi4uL3NyYy9wbGF5ZXIvaGlzdG9yeS1xdWUudHMiLCAiLi4vc3JjL3J1bGVzL2NvbmRpdGlvbi50cyIsICIuLi9zcmMvcnVsZXMvcnVsZS50cyIsICIuLi9zcmMvcnVsZXMvcnVsZS1lbmdpbmUudHMiLCAiLi4vc3JjL3BsYXllci9uZXh0LXF1ZS50cyIsICIuLi9zcmMvcGxheWVyL2RwbGF5ZXIudHMiLCAiLi4vc3JjL2V2ZW50LWhhbmRsZXJzL0RFdmVudEhhbmRsZXIudHMiLCAiLi4vc3JjL0RlbGVtZW50L0RFbGVtZW50LnRzIiwgIi4uL3NyYy9EZWxlbWVudC9EZGl2LnRzIiwgIi4uL3NyYy9EZWxlbWVudC9ESW1nLnRzIiwgIi4uL3NyYy9EZWxlbWVudC9EVGV4dC50cyIsICIuLi9zcmMvZW5naW5lL2VsZW1lbnQtZmFjdG9yeS50cyIsICIuLi9zcmMvZW5naW5lL0RQYWdlLnRzIiwgIi4uL3NyYy9lbmdpbmUvc2NhbGUudHMiLCAiLi4vc3JjL3NlcnZpY2VzL3Jlc291cmNlLXByb3ZpZGVyLnRzIiwgIi4uL3NyYy9jb21tb24vcmVzdWx0LnRzIiwgIi4uL3NyYy9zdGF0ZS9Ec3RhdGUudHMiLCAiLi4vc3JjL3N0YXRlL3N0YXRlLXNlcnZpY2UudHMiLCAiLi4vc3JjL2VuZ2luZS9TY2hlbWFFbmdpbmUudHMiLCAiLi4vc3JjL3N0YXRlL2Jvb2xlYW4tcHJvcGVydHkudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImV4cG9ydCB7IFNjaGVtYUVuZ2luZSB9IGZyb20gXCIuL2VuZ2luZS9TY2hlbWFFbmdpbmVcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2R0by9TY2hlbWFEdG9cIjtcbmV4cG9ydCAqIGZyb20gXCIuL2R0by9BbmltYXRpb25EdG9cIjtcbmV4cG9ydCAqIGZyb20gXCIuL2R0by9ERWxlbWVudC5kdG9cIjtcbmV4cG9ydCAqIGZyb20gXCIuL2V2ZW50LWhhbmRsZXJzL0RFdmVudEhhbmRsZXJcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2NvbW1hbmRzL0RDb21tYW5kXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9ldmVudHMvREV2ZW50c1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vcnVsZXMvcnVsZVwiO1xuZXhwb3J0ICogZnJvbSBcIi4vcnVsZXMvZmFjdFwiO1xuZXhwb3J0ICogZnJvbSBcIi4vcnVsZXMvcnVsZS1lbmdpbmVcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3J1bGVzL2NvbmRpdGlvblwiO1xuZXhwb3J0ICogZnJvbSBcIi4vc3RhdGUvYm9vbGVhbi1wcm9wZXJ0eVwiO1xuZXhwb3J0ICogZnJvbSBcIi4vc3RhdGUvRHN0YXRlXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9EZWxlbWVudC9EU3R5bGVcIjtcbmV4cG9ydCAqIGZyb20gXCIuL0RlbGVtZW50L0RBdXRvLXBsYXlcIjtcbmV4cG9ydCAqIGZyb20gXCIuL0RlbGVtZW50L2Nzc1wiO1xuXG5leHBvcnQgKiBmcm9tIFwiLi91dGlscy9EVXRpbFwiO1xuIiwgImltcG9ydCB7IERBdXRvUGxheVNlcXVlbmNlIH0gZnJvbSBcIi4uL0RlbGVtZW50L0RBdXRvLXBsYXlcIjtcbmltcG9ydCB7IERBdWRpb0R0bywgREVsZW1lbnREdG8sIERJbWdEdG8sIERWaWRlb0R0byB9IGZyb20gXCIuL0RFbGVtZW50LmR0b1wiO1xuaW1wb3J0IHsgUnVsZSB9IGZyb20gXCIuLi9ydWxlcy9ydWxlXCI7XG5pbXBvcnQgeyBGYWN0IH0gZnJvbSBcIi4uL3J1bGVzL2ZhY3RcIjtcbmltcG9ydCB7IFBhZ2VRdWVDb21tYW5kIH0gZnJvbSBcIi4uL2NvbW1hbmRzL0RDb21tYW5kXCI7XG5pbXBvcnQgeyBEU3RhdGUgfSBmcm9tIFwiLi4vc3RhdGUvRHN0YXRlXCI7XG5cbmV4cG9ydCB0eXBlIFBhZ2VRdWVSdWxlcyA9IFJ1bGU8UGFnZVF1ZUNvbW1hbmQsIG5ldmVyPjtcbmV4cG9ydCBpbnRlcmZhY2UgUGFnZUR0byB7XG4gICAgcmVhZG9ubHkgaWQ6IHN0cmluZztcbiAgICByZWFkb25seSBlbGVtZW50czogQXJyYXk8REVsZW1lbnREdG8+O1xuICAgIHJlYWRvbmx5IHRhZ3M/OiBzdHJpbmdbXTtcbiAgICByZWFkb25seSBtYWluVmlkZW9JZD86IHN0cmluZztcbiAgICByZWFkb25seSBiYWNrZ3JvdW5kQ29sb3I/OiBzdHJpbmc7XG4gICAgcmVhZG9ubHkgdmlkZW8/OiBBcnJheTxEVmlkZW9EdG8+O1xuICAgIHJlYWRvbmx5IGF1ZGlvPzogQXJyYXk8REF1ZGlvRHRvPjtcbiAgICByZWFkb25seSBhdXRvUGxheVNlcXVlbmNlPzogREF1dG9QbGF5U2VxdWVuY2U7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUGFnZVNlcXVlbmNlRHRvIHtcbiAgICByZWFkb25seSBpZDogc3RyaW5nO1xuICAgIHJlYWRvbmx5IHJ1bGVzOiBBcnJheTxQYWdlUXVlUnVsZXM+O1xuICAgIHJlYWRvbmx5IHBhZ2VzOiBBcnJheTxQYWdlRHRvPjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTY2hlbWFEdG8ge1xuICAgIHJlYWRvbmx5IGlkOiBzdHJpbmc7XG4gICAgcmVhZG9ubHkgcHJlZml4OiBzdHJpbmc7XG4gICAgcmVhZG9ubHkgYmFzZUhlaWdodDogbnVtYmVyO1xuICAgIHJlYWRvbmx5IGJhc2VXaWR0aDogbnVtYmVyO1xuICAgIHJlYWRvbmx5IGJhY2tncm91bmRDb2xvcjogc3RyaW5nO1xuICAgIHJlYWRvbmx5IHBhZ2VzOiBQYWdlRHRvW107XG4gICAgcmVhZG9ubHkgcnVsZXM6IEFycmF5PFBhZ2VRdWVSdWxlcz47XG4gICAgcmVhZG9ubHkgc3RhdGVQcm9wcz86IFJlYWRvbmx5QXJyYXk8RFN0YXRlLlByb3A+O1xuICAgIHJlYWRvbmx5IHN0YXRlUXVlcmllcz86IFJlYWRvbmx5QXJyYXk8RFN0YXRlLlN0YXRlUXVlcnk+O1xuICAgIHJlYWRvbmx5IHN0YXRlRnJvbUV2ZW50OiBSZWFkb25seUFycmF5PERTdGF0ZS5mcm9tRXZlbnRIYW5kbGVyPjtcbiAgICByZWFkb25seSBwYWdlU2VxdWVuY2VzPzogQXJyYXk8UGFnZVNlcXVlbmNlRHRvPjtcbiAgICByZWFkb25seSBwcmVkZWZpbmVkRmFjdHM/OiBSZWFkb25seUFycmF5PEZhY3Q+O1xufVxuXG5leHBvcnQgbmFtZXNwYWNlIFNjaGVtYUR0byB7XG4gICAgZXhwb3J0IGNvbnN0IGdldFJlc291cmNlcyA9IChcbiAgICAgICAgc2NoZW1hOiBTY2hlbWFEdG9cbiAgICApOiB7XG4gICAgICAgIHZpZGVvTGlzdDogUmVhZG9ubHlBcnJheTxEVmlkZW9EdG8+O1xuICAgICAgICBhdWRpb0xpc3Q6IFJlYWRvbmx5QXJyYXk8REF1ZGlvRHRvPjtcbiAgICAgICAgaW1hZ2VMaXN0OiBSZWFkb25seUFycmF5PERJbWdEdG8+O1xuICAgIH0gPT4ge1xuICAgICAgICBjb25zdCB7IHBhZ2VzIH0gPSBzY2hlbWE7XG4gICAgICAgIGNvbnN0IHZpZGVvTGlzdCA9IHBhZ2VzLnJlZHVjZTxBcnJheTxEVmlkZW9EdG8+PigoYWNjLCBjdXJyKSA9PiB7XG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShjdXJyLnZpZGVvKSkge1xuICAgICAgICAgICAgICAgIGFjYy5wdXNoKC4uLmN1cnIudmlkZW8pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgICAgfSwgW10pO1xuICAgICAgICBjb25zdCBhdWRpb0xpc3Q6IEFycmF5PERBdWRpb0R0bz4gPSBwYWdlcy5yZWR1Y2U8QXJyYXk8REF1ZGlvRHRvPj4oKGFjYywgY3VycikgPT4ge1xuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoY3Vyci5hdWRpbykpIHtcbiAgICAgICAgICAgICAgICBhY2MucHVzaCguLi5jdXJyLmF1ZGlvKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBhY2M7XG4gICAgICAgIH0sIFtdKTtcblxuICAgICAgICByZXR1cm4geyB2aWRlb0xpc3QsIGF1ZGlvTGlzdCwgaW1hZ2VMaXN0OiBbXSB9O1xuICAgIH07XG59XG4iLCAiZXhwb3J0IHR5cGUgRFRpbWVzdGFtcCA9IG51bWJlciAmIHsgX190aW1lc3RhbXBfXzogdHJ1ZSB9O1xuZXhwb3J0IG5hbWVzcGFjZSBEVGltZXN0YW1wIHtcbiAgICBleHBvcnQgY29uc3Qgbm93ID0gKCkgPT4gRGF0ZS5ub3coKSBhcyBEVGltZXN0YW1wO1xuICAgIGV4cG9ydCB0eXBlIERpZmYgPSBudW1iZXIgJiB7IF9fZGlmZl9fOiB0cnVlIH07XG5cbiAgICBleHBvcnQgY29uc3QgYWRkTWlsbHMgPSAodDogRFRpbWVzdGFtcCwgbXM6IG51bWJlcik6IERUaW1lc3RhbXAgPT4ge1xuICAgICAgICBjb25zdCByZXMgPSB0ICsgTWF0aC5hYnMobXMpO1xuICAgICAgICByZXR1cm4gcmVzIGFzIERUaW1lc3RhbXA7XG4gICAgfTtcblxuICAgIGV4cG9ydCBjb25zdCBkaWZmID0gKHQxOiBEVGltZXN0YW1wLCB0MjogRFRpbWVzdGFtcCk6IERpZmYgPT4ge1xuICAgICAgICBjb25zdCB0MUFicyA9IE1hdGguYWJzKHQxKTtcbiAgICAgICAgY29uc3QgdDJBYnMgPSBNYXRoLmFicyh0Mik7XG4gICAgICAgIHJldHVybiBNYXRoLmFicyh0MUFicyAtIHQyQWJzKSBhcyBEaWZmO1xuICAgIH07XG5cbiAgICBleHBvcnQgY29uc3QgZGlmZk5vdyA9ICh0OiBEVGltZXN0YW1wKTogRGlmZiA9PiB7XG4gICAgICAgIHJldHVybiBkaWZmKHQsIG5vdygpKTtcbiAgICB9O1xufVxuIiwgImV4cG9ydCB0eXBlIFJhbmRvbU9iamVjdElkID0gc3RyaW5nICYgeyByYW5kb21PYmplY3RJZDogdHJ1ZSB9O1xuZXhwb3J0IG5hbWVzcGFjZSBEVXRpbCB7XG4gICAgZXhwb3J0IGNvbnN0IHJhbmRvbVN0cmluZyA9IChsZW5ndGg6IG51bWJlcik6IHN0cmluZyA9PiB7XG4gICAgICAgIGNvbnN0IGxldHRlcnMgPSBcImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ4eXpcIjtcbiAgICAgICAgY29uc3QgdXBwZXJjYXNlID0gbGV0dGVycy50b1VwcGVyQ2FzZSgpO1xuICAgICAgICBjb25zdCBhbGwgPSBsZXR0ZXJzICsgdXBwZXJjYXNlO1xuICAgICAgICBjb25zdCBhYnMgPSBNYXRoLmFicyhsZW5ndGgpO1xuICAgICAgICBsZXQgcmVzdWx0ID0gXCJcIjtcblxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFiczsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBjaGFyID0gYWxsLmNoYXJBdChNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiBhbGwubGVuZ3RoKSk7XG4gICAgICAgICAgICByZXN1bHQgKz0gY2hhcjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH07XG5cbiAgICBleHBvcnQgY29uc3QgcmFuZG9tT2JqZWN0SWQgPSAoKSA9PiByYW5kb21TdHJpbmcoMzIpIGFzIFJhbmRvbU9iamVjdElkO1xuXG4gICAgZXhwb3J0IGNvbnN0IGRlbGV0ZVByb3AgPSA8T2JqLCBLZXkgZXh0ZW5kcyBrZXlvZiBPYmo+KG9iajogT2JqLCBrZXk6IEtleSk6IE9taXQ8T2JqLCBLZXk+ID0+IHtcbiAgICAgICAgZGVsZXRlIG9ialtrZXldO1xuICAgICAgICByZXR1cm4gb2JqO1xuICAgIH07XG5cbiAgICBleHBvcnQgY29uc3QgaXNJblJhbmdlID0gKG1pbjogbnVtYmVyLCBtYXg6IG51bWJlcikgPT4ge1xuICAgICAgICByZXR1cm4gKHZhbHVlOiBudW1iZXIpID0+IHZhbHVlID49IG1pbiAmJiB2YWx1ZSA8PSBtYXg7XG4gICAgfTtcbiAgICBleHBvcnQgY29uc3QgaXNJbmZpbml0eSA9IChudW1iZXI6IG51bWJlcikgPT4ge1xuICAgICAgICByZXR1cm4gbnVtYmVyID09PSBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkgfHwgbnVtYmVyID09PSBOdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFkgfHwgbnVtYmVyID09PSBJbmZpbml0eTtcbiAgICB9O1xuICAgIGV4cG9ydCB0eXBlIE5vbkVtcHR5QXJyYXk8VD4gPSBbVCwgLi4uVFtdXTtcbiAgICBleHBvcnQgY29uc3QgaXNOb25FbXB0eUFycmF5ID0gPFQ+KGFycmF5OiBBcnJheTxUPik6IGFycmF5IGlzIE5vbkVtcHR5QXJyYXk8VD4gPT4ge1xuICAgICAgICByZXR1cm4gYXJyYXkubGVuZ3RoID4gMDtcbiAgICB9O1xuXG4gICAgZXhwb3J0IGNvbnN0IG5ldmVyQ2hlY2sgPSAoYXJnczogbmV2ZXIpID0+IHtcbiAgICAgICAgY29uc29sZS5sb2coXCJPT1BTOiBUaGlzIHZhbHVlIHNsaXBwZWQgdGhyb3VnaCB0aGUgbmV2ZXItY2hlY2tcIiwgYXJncyk7XG4gICAgfTtcblxuICAgIGV4cG9ydCBjb25zdCBpc1N0cmluZyA9IChzdHI6IHVua25vd24pOiBzdHIgaXMgc3RyaW5nID0+IHR5cGVvZiBzdHIgPT09IFwic3RyaW5nXCI7XG5cbiAgICBleHBvcnQgY29uc3QgaGFzS2V5ID0gPFQgZXh0ZW5kcyBzdHJpbmc+KG9iajogdW5rbm93biwga2V5OiBUKTogb2JqIGlzIFJlY29yZDx0eXBlb2Yga2V5LCB1bmtub3duPiA9PiB7XG4gICAgICAgIGlmICghaXNSZWNvcmQob2JqKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBrZXkpO1xuICAgIH07XG5cbiAgICBleHBvcnQgY29uc3QgaXNSZWNvcmQgPSAob2JqOiB1bmtub3duKTogb2JqIGlzIFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0+IHtcbiAgICAgICAgaWYgKCFvYmopIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KG9iaikpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlb2Ygb2JqICE9PSBcIm9iamVjdFwiKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAob2JqID09PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfTtcblxuICAgIGV4cG9ydCBjb25zdCBpc0Jvb2wgPSAob2JqOiBib29sZWFuKTogb2JqIGlzIGJvb2xlYW4gPT4gdHlwZW9mIG9iaiA9PT0gXCJib29sZWFuXCI7XG5cbiAgICBleHBvcnQgY29uc3QgaXNUcnVlID0gKGJvb2w6IGJvb2xlYW4pOiBib29sIGlzIHRydWUgPT4gYm9vbCA9PT0gdHJ1ZTtcblxuICAgIGV4cG9ydCBjb25zdCBpc0ZhbHNlID0gKGJvb2w6IGJvb2xlYW4pOiBib29sIGlzIGZhbHNlID0+IGJvb2wgPT09IGZhbHNlO1xuXG4gICAgZXhwb3J0IGNvbnN0IGlzRGVmaW5lZCA9IChvYmo6IHVua25vd24pOiBib29sZWFuID0+IHtcbiAgICAgICAgY29uc3Qgbm90TnVsbCA9IG9iaiAhPT0gbnVsbDtcbiAgICAgICAgY29uc3Qgbm90VW5kZWZpbmVkID0gb2JqICE9PSB1bmRlZmluZWQ7XG4gICAgICAgIHJldHVybiBub3ROdWxsICYmIG5vdFVuZGVmaW5lZDtcbiAgICB9O1xuXG4gICAgZXhwb3J0IGNvbnN0IGhhc0tpbmQgPSAob2JqOiB1bmtub3duKTogb2JqIGlzIHsgcmVhZG9ubHkga2luZDogc3RyaW5nIH0gPT4ge1xuICAgICAgICBpZiAoIWhhc0tleShvYmosIFwia2luZFwiKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2Ygb2JqLmtpbmQgIT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gb2JqLmtpbmQubGVuZ3RoID4gMDtcbiAgICB9O1xuXG4gICAgZXhwb3J0IGNvbnN0IGhhc1ZhbHVlID0gKG9iajogdW5rbm93bik6IG9iaiBpcyB7IHZhbHVlOiB1bmtub3duIH0gPT4ge1xuICAgICAgICByZXR1cm4gaGFzS2V5KG9iaiwgXCJ2YWx1ZVwiKTtcbiAgICB9O1xuICAgIGV4cG9ydCBjb25zdCBpc051bWJlciA9ICh2YWx1ZT86IG51bWJlcik6IHZhbHVlIGlzIG51bWJlciA9PiB7XG4gICAgICAgIGNvbnN0IGlzTnVtYmVyID0gdHlwZW9mIHZhbHVlID09PSBcIm51bWJlclwiO1xuICAgICAgICBjb25zdCBub3ROYU4gPSAhTnVtYmVyLmlzTmFOKHZhbHVlKTtcbiAgICAgICAgcmV0dXJuIGlzTnVtYmVyICYmIG5vdE5hTjtcbiAgICB9O1xuXG4gICAgZXhwb3J0IGNvbnN0IG1heEZuID0gKHVwcGVyTGltaXQ6IG51bWJlcikgPT4ge1xuICAgICAgICByZXR1cm4gKHZhbHVlOiBudW1iZXIpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBNYXRoLm1pbih2YWx1ZSwgdXBwZXJMaW1pdCk7XG4gICAgICAgIH07XG4gICAgfTtcblxuICAgIGV4cG9ydCBjb25zdCBtaW5GbiA9IChsb3dlckxpbWl0OiBudW1iZXIpID0+IHtcbiAgICAgICAgcmV0dXJuICh2YWx1ZTogbnVtYmVyKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gTWF0aC5taW4odmFsdWUsIGxvd2VyTGltaXQpO1xuICAgICAgICB9O1xuICAgIH07XG59XG4iLCAiaW1wb3J0IHsgRFV0aWwgfSBmcm9tIFwiLi4vdXRpbHMvRFV0aWxcIjtcblxuZXhwb3J0IG5hbWVzcGFjZSBEQ3NzIHtcbiAgICBleHBvcnQgaW50ZXJmYWNlIFB4IHtcbiAgICAgICAgcmVhZG9ubHkgX3VuaXQ6IFwicHhcIjtcbiAgICAgICAgcmVhZG9ubHkgdmFsdWU6IG51bWJlcjtcbiAgICB9XG5cbiAgICBleHBvcnQgdHlwZSBMZW5ndGhTdHJpbmcgPSBgJHtudW1iZXJ9cHhgIHwgYCR7bnVtYmVyfSVgO1xuICAgIGV4cG9ydCBpbnRlcmZhY2UgUGVyY2VudCB7XG4gICAgICAgIHJlYWRvbmx5IF91bml0OiBcInBlcmNlbnRcIjtcbiAgICAgICAgcmVhZG9ubHkgdmFsdWU6IG51bWJlcjtcbiAgICB9XG5cbiAgICBleHBvcnQgdHlwZSBMZW5ndGhVbml0ID0gUHggfCBQZXJjZW50O1xuXG4gICAgLyoqXG4gICAgICogV2lsbCBzY2FsZSB0byAzJSBvZiBiYXNlU2NhbGVcbiAgICAgKiBAcGFyYW0gdW5pdFxuICAgICAqIEBwYXJhbSBzY2FsZVxuICAgICAqL1xuICAgIGV4cG9ydCBjb25zdCB0b1N0cmluZyA9ICh1bml0OiBSZWFkb25seTxMZW5ndGhVbml0Piwgc2NhbGU6IG51bWJlcik6IExlbmd0aFN0cmluZyA9PiB7XG4gICAgICAgIGNvbnN0IGNsYW1wZWRTY2FsZSA9IE1hdGgubWF4KHNjYWxlLCAwLjAzKTtcbiAgICAgICAgaWYgKHVuaXQuX3VuaXQgPT09IFwicHhcIikge1xuICAgICAgICAgICAgaWYgKHVuaXQudmFsdWUgPCAwLjEpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gXCIwcHhcIjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3Qgcm91bmRlZCA9IE1hdGgucm91bmQodW5pdC52YWx1ZSAqIGNsYW1wZWRTY2FsZSk7XG4gICAgICAgICAgICBjb25zdCBjbGFtcGVkID0gTWF0aC5tYXgocm91bmRlZCwgMSk7XG4gICAgICAgICAgICByZXR1cm4gKGNsYW1wZWQgKyBcInB4XCIpIGFzIExlbmd0aFN0cmluZztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gKHVuaXQudmFsdWUgKyBcIiVcIikgYXMgTGVuZ3RoU3RyaW5nO1xuICAgIH07XG5cbiAgICBleHBvcnQgY29uc3QgaXNMZW5ndGhVbml0ID0gKHVuaXQ/OiBMZW5ndGhVbml0KTogdW5pdCBpcyBMZW5ndGhVbml0ID0+IHtcbiAgICAgICAgaWYgKCF1bml0KSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdW5pdEtleToga2V5b2YgTGVuZ3RoVW5pdCA9IFwiX3VuaXRcIjtcbiAgICAgICAgY29uc3QgdmFsdWVLZXk6IGtleW9mIExlbmd0aFVuaXQgPSBcInZhbHVlXCI7XG4gICAgICAgIGNvbnN0IGhhc1VuaXRLZXkgPSBEVXRpbC5oYXNLZXkodW5pdCwgdW5pdEtleSk7XG4gICAgICAgIGNvbnN0IGhhc1ZhbHVlS2V5ID0gRFV0aWwuaGFzS2V5KHVuaXQsIHZhbHVlS2V5KTtcbiAgICAgICAgcmV0dXJuIGhhc1VuaXRLZXkgJiYgaGFzVmFsdWVLZXk7XG4gICAgfTtcbn1cbiIsICJpbXBvcnQgeyBEQ3NzIH0gZnJvbSBcIi4vY3NzXCI7XG5pbXBvcnQgeyBFbGVtZW50S2V5TmFtZXMgfSBmcm9tIFwiLi9EU3R5bGUtdXRpbHNcIjtcbmltcG9ydCB7IERVdGlsIH0gZnJvbSBcIi4uL3V0aWxzL0RVdGlsXCI7XG5cbnR5cGUgRFN0eWxlMiA9IENTU1N0eWxlRGVjbGFyYXRpb247XG5leHBvcnQgaW50ZXJmYWNlIERTdHlsZSB7XG4gICAgb3BhY2l0eTogbnVtYmVyO1xuICAgIGJhY2tncm91bmRDb2xvcjogc3RyaW5nO1xuICAgIHZpc2liaWxpdHk6IFwidmlzaWJsZVwiIHwgXCJoaWRkZW5cIjtcbiAgICBjdXJzb3I6XG4gICAgICAgIHwgXCJwb2ludGVyXCJcbiAgICAgICAgfCBcImhlbHBcIlxuICAgICAgICB8IFwiY29weVwiXG4gICAgICAgIHwgXCJ3YWl0XCJcbiAgICAgICAgfCBcIm5vdC1hbGxvd2VkXCJcbiAgICAgICAgfCBcImNvbnRleHQtbWVudVwiXG4gICAgICAgIHwgXCJtb3ZlXCJcbiAgICAgICAgfCBcImdyYWJiaW5nXCJcbiAgICAgICAgfCBcImdyYWJcIlxuICAgICAgICB8IFwiem9vbS1pblwiXG4gICAgICAgIHwgXCJ6b29tLW91dFwiXG4gICAgICAgIHwgXCJub25lXCJcbiAgICAgICAgfCBcImF1dG9cIlxuICAgICAgICB8IFwiZGVmYXVsdFwiO1xuXG4gICAgLy8gUE9TSVRJT05cbiAgICBoOiBudW1iZXI7XG4gICAgdzogbnVtYmVyO1xuICAgIHg6IG51bWJlcjtcbiAgICB5OiBudW1iZXI7XG5cbiAgICAvLyBCT1JERVJTXG4gICAgYm9yZGVyU3R5bGU6IFwic29saWRcIiB8IFwibm9uZVwiIHwgXCJkb3R0ZWRcIiB8IFwiZGFzaGVkXCI7XG4gICAgYm9yZGVyUmFkaXVzOiBEQ3NzLlB4IHwgRENzcy5QZXJjZW50O1xuICAgIGJvcmRlcldpZHRoOiBEQ3NzLlB4O1xuICAgIGJvcmRlckNvbG9yOiBzdHJpbmc7XG5cbiAgICBtYXJnaW46IERDc3MuUHggfCBEQ3NzLlBlcmNlbnQ7XG4gICAgcGFkZGluZzogRENzcy5QeCB8IERDc3MuUGVyY2VudDtcblxuICAgIC8vIFRyYW5zbGF0ZVxuICAgIHRyYW5zZm9ybTogc3RyaW5nO1xuICAgIHRyYW5zbGF0ZTogc3RyaW5nO1xuXG4gICAgLy8gVEVYVFxuICAgIGZvbnRTaXplOiBEQ3NzLlB4O1xuICAgIHRleHRDb2xvcjogc3RyaW5nO1xuICAgIGZvbnRXZWlnaHQ6IDEwMCB8IDIwMCB8IDMwMCB8IDQwMCB8IDUwMCB8IDYwMCB8IDcwMCB8IDgwMCB8IDkwMDtcbiAgICB0ZXh0QWxpZ246IFwicmlnaHRcIiB8IFwibGVmdFwiIHwgXCJjZW50ZXJcIjtcbiAgICBsZXR0ZXJTcGFjaW5nOiBEQ3NzLlB4O1xufVxuXG5leHBvcnQgbmFtZXNwYWNlIERTdHlsZSB7XG4gICAgZXhwb3J0IGNvbnN0IG5vcm1hbGl6ZSA9IDxUIGV4dGVuZHMgSFRNTEVsZW1lbnQ+KGVsOiBUKTogVCA9PiB7XG4gICAgICAgIGVsLnN0eWxlLnBhZGRpbmcgPSBcIjBcIjtcbiAgICAgICAgZWwuc3R5bGUubWFyZ2luID0gXCIwXCI7XG4gICAgICAgIGVsLnN0eWxlLnBvc2l0aW9uID0gXCJhYnNvbHV0ZVwiO1xuICAgICAgICBlbC5zdHlsZS5ib3hTaXppbmcgPSBcImJvcmRlci1ib3hcIjtcbiAgICAgICAgcmV0dXJuIGVsO1xuICAgIH07XG5cbiAgICBleHBvcnQgY29uc3QgYXBwbHlTdHlsZXMgPSA8VCBleHRlbmRzIEhUTUxFbGVtZW50PihlbDogVCwgc3R5bGU6IFBhcnRpYWw8RFN0eWxlPiwgc2NhbGU6IG51bWJlcik6IFQgPT4ge1xuICAgICAgICAvLyBjb25zdCBzY2FsZVB4ID0gRENzcy50b1N0cmluZ0NyZSh0aGlzLnNjYWxlKTtcbiAgICAgICAgY29uc3Qge1xuICAgICAgICAgICAgeCxcbiAgICAgICAgICAgIHksXG4gICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3IsXG4gICAgICAgICAgICBib3JkZXJDb2xvcixcbiAgICAgICAgICAgIGJvcmRlcldpZHRoLFxuICAgICAgICAgICAgYm9yZGVyUmFkaXVzLFxuICAgICAgICAgICAgYm9yZGVyU3R5bGUsXG4gICAgICAgICAgICB3LFxuICAgICAgICAgICAgb3BhY2l0eSxcbiAgICAgICAgICAgIGN1cnNvcixcbiAgICAgICAgICAgIGZvbnRTaXplLFxuICAgICAgICAgICAgZm9udFdlaWdodCxcbiAgICAgICAgICAgIHRleHRDb2xvcixcbiAgICAgICAgICAgIHRleHRBbGlnbixcbiAgICAgICAgICAgIHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIG1hcmdpbixcbiAgICAgICAgICAgIHBhZGRpbmcsXG4gICAgICAgICAgICBsZXR0ZXJTcGFjaW5nLFxuICAgICAgICAgICAgaCxcbiAgICAgICAgICAgIHRyYW5zZm9ybSxcbiAgICAgICAgICAgIHZpc2liaWxpdHksXG4gICAgICAgIH0gPSBzdHlsZTtcblxuICAgICAgICAvLyB0aGlzLmVsLnN0eWxlLmZvbnRXZWlnaHQgPSAnOTAwJztcbiAgICAgICAgaWYgKGJhY2tncm91bmRDb2xvcikge1xuICAgICAgICAgICAgZWwuc3R5bGUuYmFja2dyb3VuZENvbG9yID0gYmFja2dyb3VuZENvbG9yO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGN1cnNvcikge1xuICAgICAgICAgICAgZWwuc3R5bGUuY3Vyc29yID0gY3Vyc29yO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRyYW5zZm9ybSkge1xuICAgICAgICAgICAgZWwuc3R5bGUudHJhbnNmb3JtID0gdHJhbnNmb3JtO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRleHRDb2xvcikge1xuICAgICAgICAgICAgZWwuc3R5bGUuY29sb3IgPSB0ZXh0Q29sb3I7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRleHRBbGlnbikge1xuICAgICAgICAgICAgZWwuc3R5bGUudGV4dEFsaWduID0gdGV4dEFsaWduO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGJvcmRlckNvbG9yKSB7XG4gICAgICAgICAgICBlbC5zdHlsZS5ib3JkZXJDb2xvciA9IGJvcmRlckNvbG9yO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGJvcmRlcldpZHRoKSB7XG4gICAgICAgICAgICBlbC5zdHlsZS5ib3JkZXJXaWR0aCA9IERDc3MudG9TdHJpbmcoYm9yZGVyV2lkdGgsIHNjYWxlKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZm9udFdlaWdodCkge1xuICAgICAgICAgICAgZWwuc3R5bGUuZm9udFdlaWdodCA9IGZvbnRXZWlnaHQgKyBcIlwiO1xuICAgICAgICB9XG4gICAgICAgIGlmIChib3JkZXJTdHlsZSkge1xuICAgICAgICAgICAgZWwuc3R5bGUuYm9yZGVyU3R5bGUgPSBib3JkZXJTdHlsZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZm9udFNpemUpIHtcbiAgICAgICAgICAgIGVsLnN0eWxlLmZvbnRTaXplID0gRENzcy50b1N0cmluZyhmb250U2l6ZSwgc2NhbGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKERVdGlsLmlzTnVtYmVyKHgpKSB7XG4gICAgICAgICAgICBlbC5zdHlsZS5sZWZ0ID0geCArIFwiJVwiO1xuICAgICAgICB9XG4gICAgICAgIGlmIChEVXRpbC5pc051bWJlcih5KSkge1xuICAgICAgICAgICAgZWwuc3R5bGUuYm90dG9tID0geSArIFwiJVwiO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKERVdGlsLmlzTnVtYmVyKGgpKSB7XG4gICAgICAgICAgICBlbC5zdHlsZS5oZWlnaHQgPSBoICsgXCIlXCI7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKERVdGlsLmlzTnVtYmVyKHcpKSB7XG4gICAgICAgICAgICBlbC5zdHlsZS53aWR0aCA9IHcgKyBcIiVcIjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChEQ3NzLmlzTGVuZ3RoVW5pdChib3JkZXJSYWRpdXMpKSB7XG4gICAgICAgICAgICBlbC5zdHlsZS5ib3JkZXJSYWRpdXMgPSBEQ3NzLnRvU3RyaW5nKGJvcmRlclJhZGl1cywgc2NhbGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGxldHRlclNwYWNpbmcpIHtcbiAgICAgICAgICAgIGVsLnN0eWxlLmxldHRlclNwYWNpbmcgPSBEQ3NzLnRvU3RyaW5nKGxldHRlclNwYWNpbmcsIHNjYWxlKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobWFyZ2luKSB7XG4gICAgICAgICAgICBlbC5zdHlsZS5tYXJnaW4gPSBEQ3NzLnRvU3RyaW5nKG1hcmdpbiwgc2NhbGUpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwYWRkaW5nKSB7XG4gICAgICAgICAgICBlbC5zdHlsZS5wYWRkaW5nID0gRENzcy50b1N0cmluZyhwYWRkaW5nLCBzY2FsZSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoRFV0aWwuaXNOdW1iZXIob3BhY2l0eSkpIHtcbiAgICAgICAgICAgIGVsLnN0eWxlLm9wYWNpdHkgPSBvcGFjaXR5ICsgXCJcIjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh2aXNpYmlsaXR5KSB7XG4gICAgICAgICAgICBlbC5zdHlsZS52aXNpYmlsaXR5ID0gdmlzaWJpbGl0eTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBlbDtcbiAgICB9O1xuICAgIC8vIGNvbnN0IHByb3BOYW1lcyA9IG5ldyBTZXQoLi4uRWxlbWVudEtleU5hbWVzKTtcbiAgICAvLyBleHBvcnQgY29uc3QgdmFsaWRLZXkgPSAoa2V5TmFtZTogc3RyaW5nKSA9PiBwcm9wTmFtZXMuaGFzKGtleU5hbWUpO1xufVxuIiwgImltcG9ydCB7IERWaWRlb0R0byB9IGZyb20gXCIuLi9kdG8vREVsZW1lbnQuZHRvXCI7XG5pbXBvcnQgeyBEVGltZXN0YW1wIH0gZnJvbSBcIi4uL2NvbW1vbi9EVGltZXN0YW1wXCI7XG5pbXBvcnQgeyBERXZlbnREaXNwYXRjaGVyIH0gZnJvbSBcIi4uL2V2ZW50cy9ldmVudC1idXNcIjtcbmltcG9ydCB7IFNjYWxlU2VydmljZSB9IGZyb20gXCIuLi9lbmdpbmUvc2NhbGVcIjtcbmltcG9ydCB7IERTdHlsZSB9IGZyb20gXCIuL0RTdHlsZVwiO1xuaW1wb3J0IHsgRFV0aWwgfSBmcm9tIFwiLi4vdXRpbHMvRFV0aWxcIjtcblxuY29uc3QgQUJPUlRfUExBWV9UT19FTkQgPSBcIkFCT1JUX1BMQVlfVE9fRU5EXCI7XG5leHBvcnQgaW50ZXJmYWNlIENhblBsYXlUb0VuZCB7XG4gICAgcGxheVRvRW5kKCk6IFByb21pc2U8Ym9vbGVhbj47XG59XG5cbmV4cG9ydCBjbGFzcyBWaWRlb0NvbnRhaW5lciBpbXBsZW1lbnRzIENhblBsYXlUb0VuZCB7XG4gICAgcHJpdmF0ZSByZWFkb25seSBUQUc6IHN0cmluZztcbiAgICBwcml2YXRlIGR0bz86IERWaWRlb0R0bztcbiAgICBwcml2YXRlIGRlZmF1bHRTdHlsZXM6IFBhcnRpYWw8RFN0eWxlPiA9IHsgaDogNDUsIHc6IDEwMCwgdmlzaWJpbGl0eTogXCJoaWRkZW5cIiwgeTogNTUgfTtcblxuICAgIHBhdXNlKCkge1xuICAgICAgICB0aGlzLmV2ZW50QnVzLmVtaXQoe1xuICAgICAgICAgICAga2luZDogXCJWSURFT19QQVVTRURfRVZFTlRcIixcbiAgICAgICAgICAgIGRhdGE6IHt9LFxuICAgICAgICAgICAgcHJvZHVjZXI6IFwiRFZpZGVvXCIsXG4gICAgICAgICAgICBwcm9kdWNlcklkOiB0aGlzLmlkLFxuICAgICAgICAgICAgdGltZXN0YW1wOiBEVGltZXN0YW1wLm5vdygpLFxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5lbC5wYXVzZSgpO1xuICAgIH1cblxuICAgIHBsYXkodXJsOiBzdHJpbmcpIHtcbiAgICAgICAgaWYgKHRoaXMuZWwuc3JjICE9PSB1cmwpIHtcbiAgICAgICAgICAgIHRoaXMuZWwuc3JjID0gdXJsO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHByb2R1Y2VySWQgPSB0aGlzLmR0bz8uaWQgPz8gXCJEVmlkZW9cIjtcbiAgICAgICAgdGhpcy5ldmVudEJ1cy5lbWl0KHtcbiAgICAgICAgICAgIGtpbmQ6IFwiVklERU9fUExBWV9FVkVOVFwiLFxuICAgICAgICAgICAgZGF0YToge30sXG4gICAgICAgICAgICBwcm9kdWNlcjogXCJEVmlkZW9cIixcbiAgICAgICAgICAgIHByb2R1Y2VySWQsXG4gICAgICAgICAgICB0aW1lc3RhbXA6IERUaW1lc3RhbXAubm93KCksXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmVsXG4gICAgICAgICAgICAucGxheSgpXG4gICAgICAgICAgICAudGhlbigocmVzKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2cocmVzKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuY2F0Y2goKGUpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhlKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAvLyBpZih0aGlzLmVsLnNyYyAhPT0gdXJsKSB7XG4gICAgICAgIC8vICAgICB0aGlzLlxuICAgICAgICAvLyB9XG4gICAgfVxuXG4gICAgYXN5bmMgcGxheVRvRW5kKCkge1xuICAgICAgICB0aGlzLmVsLnZvbHVtZSA9IDE7XG4gICAgICAgIGNvbnN0IHVybCA9IHRoaXMuZHRvPy51cmw7XG4gICAgICAgIGlmICghdXJsKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgZW5kZWRPckVycm9yZWQgPSBuZXcgUHJvbWlzZTxib29sZWFuPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5lbC5hZGRFdmVudExpc3RlbmVyKFxuICAgICAgICAgICAgICAgICAgICBcImVuZGVkXCIsXG4gICAgICAgICAgICAgICAgICAgIChfKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHRydWUpO1xuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB7IG9uY2U6IHRydWUgfVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgdGhpcy5lbC5hZGRFdmVudExpc3RlbmVyKFxuICAgICAgICAgICAgICAgICAgICBcImVycm9yXCIsXG4gICAgICAgICAgICAgICAgICAgIChfKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgeyBvbmNlOiB0cnVlIH1cbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIHRoaXMuZWwuYWRkRXZlbnRMaXN0ZW5lcihcbiAgICAgICAgICAgICAgICAgICAgQUJPUlRfUExBWV9UT19FTkQsXG4gICAgICAgICAgICAgICAgICAgICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiQ0FUQ0hFRCBBQkJPUlQuXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KFwiQWJvcnRlZFwiKTtcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgeyBvbmNlOiB0cnVlIH1cbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhcIlBMQVlcIik7XG4gICAgICAgICAgICB0aGlzLnBsYXkodXJsKTtcbiAgICAgICAgICAgIGF3YWl0IGVuZGVkT3JFcnJvcmVkO1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGUpO1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgY29uc29sZS5sb2codGhpcy5UQUcgKyBcIiBmaW5hbGx5IGJsb2NrIHBsYXlUb0VuZCgpIGNvbXBsZXRlZCB2aWRlb0lkOiBcIiArIHRoaXMuZHRvPy5pZCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBlbDogSFRNTFZpZGVvRWxlbWVudCxcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBldmVudEJ1czogREV2ZW50RGlzcGF0Y2hlcixcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBzY2FsZTogU2NhbGVTZXJ2aWNlIC8vIGR0bz86IERWaWRlb0R0b1xuICAgICkge1xuICAgICAgICB0aGlzLlRBRyA9IFwiWyBEX1ZpZGVvIF0gOiBcIjtcbiAgICAgICAgdGhpcy5lbC5jb250cm9scyA9IGZhbHNlO1xuICAgICAgICBEU3R5bGUubm9ybWFsaXplKHRoaXMuZWwpO1xuICAgICAgICBEU3R5bGUuYXBwbHlTdHlsZXModGhpcy5lbCwgdGhpcy5kZWZhdWx0U3R5bGVzLCB0aGlzLnNjYWxlLnNjYWxlKTtcblxuICAgICAgICB0aGlzLmVsLm9uZW5kZWQgPSAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmV2ZW50QnVzLmVtaXQoe1xuICAgICAgICAgICAgICAgIGtpbmQ6IFwiVklERU9fRU5ERURfRVZFTlRcIixcbiAgICAgICAgICAgICAgICB0aW1lc3RhbXA6IERUaW1lc3RhbXAubm93KCksXG4gICAgICAgICAgICAgICAgcHJvZHVjZXI6IFwiRFZpZGVvXCIsXG4gICAgICAgICAgICAgICAgcHJvZHVjZXJJZDogdGhpcy5pZCxcbiAgICAgICAgICAgICAgICBkYXRhOiB7fSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9O1xuICAgICAgICB0aGlzLmVsLm9ucGxheSA9ICgpID0+IHtcbiAgICAgICAgICAgIC8vIFRPRE8gTE9HRyBJTlRFUk5BTCBTVEFURV9DSEFOR0VTLlxuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMuZWwub25wYXVzZSA9ICgpID0+IHt9O1xuICAgICAgICB0aGlzLmVsLm9uZXJyb3IgPSAoKSA9PiB7fTtcbiAgICAgICAgdGhpcy5lbC5vbmNhbnBsYXkgPSAoKSA9PiB7XG4gICAgICAgICAgICAvLyBjb25zb2xlLmdyb3VwQ29sbGFwc2VkKHRoaXMuVEFHICsgXCJSRUFEWSBUTyBQTEFZXCIpO1xuICAgICAgICAgICAgLy8gY29uc29sZS5sb2coXCJEdXJhdGlvbjogXCIgKyB0aGlzLmVsLmR1cmF0aW9uKTtcbiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKFwiSWQ6IFwiICsgdGhpcy5pZCk7XG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhcIkN1cnJlbnQgVGltZTogXCIgKyB0aGlzLmVsLmN1cnJlbnRUaW1lKTtcbiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKFwiQXVkb1BsYXk6IFwiICsgdGhpcy5lbC5hdXRvcGxheSk7XG4gICAgICAgICAgICAvLyBjb25zb2xlLmdyb3VwRW5kKCk7XG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuZWwub25sb2FkZWRtZXRhZGF0YSA9ICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGR1cmF0aW9uID0gdGhpcy5lbC5kdXJhdGlvbjtcbiAgICAgICAgICAgIGNvbnN0IGlzSW5maW5pdHkgPSBEVXRpbC5pc0luZmluaXR5KGR1cmF0aW9uKTtcbiAgICAgICAgICAgIHRoaXMuZXZlbnRCdXMuZW1pdCh7XG4gICAgICAgICAgICAgICAga2luZDogXCJWSURFT19MT0FERURfTUVUQURBVEFfRVZFTlRcIixcbiAgICAgICAgICAgICAgICB0aW1lc3RhbXA6IERUaW1lc3RhbXAubm93KCksXG4gICAgICAgICAgICAgICAgcHJvZHVjZXI6IFwiRFZpZGVvXCIsXG4gICAgICAgICAgICAgICAgcHJvZHVjZXJJZDogdGhpcy5pZCxcbiAgICAgICAgICAgICAgICBkYXRhOiB7IGR1cmF0aW9uLCBpc0luZmluaXR5IH0sXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfTtcbiAgICAgICAgLy8gVE9ETyBVU0UgVEhJUyBTWU5UQVg/XG4gICAgICAgIHRoaXMuZWwub25kdXJhdGlvbmNoYW5nZSA9ICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGR1cmF0aW9uID0gdGhpcy5lbC5kdXJhdGlvbjtcbiAgICAgICAgICAgIGNvbnN0IGlzSW5maW5pdHkgPSBEVXRpbC5pc0luZmluaXR5KGR1cmF0aW9uKTtcbiAgICAgICAgICAgIHRoaXMuZXZlbnRCdXMuZW1pdCh7XG4gICAgICAgICAgICAgICAga2luZDogXCJWSURFT19EVVJBVElPTl9DSEFOR0VfRVZFTlRcIixcbiAgICAgICAgICAgICAgICBwcm9kdWNlcjogXCJEVmlkZW9cIixcbiAgICAgICAgICAgICAgICBwcm9kdWNlcklkOiB0aGlzLmlkLFxuICAgICAgICAgICAgICAgIHRpbWVzdGFtcDogRFRpbWVzdGFtcC5ub3coKSxcbiAgICAgICAgICAgICAgICBkYXRhOiB7IGR1cmF0aW9uLCBpc0luZmluaXR5IH0sXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBnZXRTdGF0cygpIHtcbiAgICAgICAgY29uc3QgZHVyYXRpb24gPSB0aGlzLmVsLmR1cmF0aW9uO1xuICAgICAgICBjb25zdCBjdXJyZW50VGltZSA9IHRoaXMuZWwuY3VycmVudFRpbWU7XG4gICAgICAgIGNvbnN0IHZvbHVtZSA9IHRoaXMuZWwudm9sdW1lO1xuICAgICAgICBjb25zdCBpc0Nvbm5lY3RlZCA9IHRoaXMuZWwuaXNDb25uZWN0ZWQ7XG4gICAgICAgIGNvbnN0IHBsYXliYWNrUXVhbGl0eSA9IHRoaXMuZWwuZ2V0VmlkZW9QbGF5YmFja1F1YWxpdHkoKTtcbiAgICAgICAgY29uc3QgZGVmYXVsdFBsYXliYWNrUmF0ZSA9IHRoaXMuZWwuZGVmYXVsdFBsYXliYWNrUmF0ZTtcbiAgICAgICAgY29uc3QgcGF1c2VkID0gdGhpcy5lbC5wYXVzZWQ7XG4gICAgICAgIGNvbnN0IHBsYXllZCA9IHRoaXMuZWwucGxheWVkO1xuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBkdXJhdGlvbixcbiAgICAgICAgICAgIHBhdXNlZCxcbiAgICAgICAgICAgIHBsYXllZCxcbiAgICAgICAgICAgIGN1cnJlbnRUaW1lLFxuICAgICAgICAgICAgdm9sdW1lLFxuICAgICAgICAgICAgaXNDb25uZWN0ZWQsXG4gICAgICAgICAgICBwbGF5YmFja1F1YWxpdHksXG4gICAgICAgICAgICBkZWZhdWx0UGxheWJhY2tSYXRlLFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHNldER0byhkdG86IERWaWRlb0R0bykge1xuICAgICAgICB0aGlzLmR0byA9IGR0bztcbiAgICAgICAgdGhpcy5lbC52b2x1bWUgPSAxO1xuICAgICAgICB0aGlzLnNldFN0eWxlKGR0by5zdHlsZSk7XG4gICAgICAgIHRoaXMuZWwuc3JjID0gZHRvLnVybDtcbiAgICAgICAgdGhpcy5lbC5sb2FkKCk7XG4gICAgfVxuXG4gICAgZ2V0Q3VycmVudER0bygpOiBEVmlkZW9EdG8gfCBmYWxzZSB7XG4gICAgICAgIHJldHVybiB0aGlzLmR0byA/PyBmYWxzZTtcbiAgICB9XG5cbiAgICBzZXRTdHlsZShzdHlsZXM6IFBhcnRpYWw8RFN0eWxlPikge1xuICAgICAgICBEU3R5bGUuYXBwbHlTdHlsZXModGhpcy5lbCwgc3R5bGVzLCB0aGlzLnNjYWxlLnNjYWxlKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldCBpZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZHRvPy5pZCA/PyBcIkRWaWRlb1wiO1xuICAgIH1cblxuICAgIGRlc3Ryb3koKSB7fVxufVxuIiwgImltcG9ydCB7IENhblBsYXlUb0VuZCB9IGZyb20gXCIuL1ZpZGVvQ29udGFpbmVyXCI7XG5pbXBvcnQgeyBEQXVkaW9EdG8gfSBmcm9tIFwiLi4vZHRvL0RFbGVtZW50LmR0b1wiO1xuaW1wb3J0IHsgREV2ZW50RGlzcGF0Y2hlciB9IGZyb20gXCIuLi9ldmVudHMvZXZlbnQtYnVzXCI7XG5pbXBvcnQgeyBEVGltZXN0YW1wIH0gZnJvbSBcIi4uL2NvbW1vbi9EVGltZXN0YW1wXCI7XG5cbmV4cG9ydCBjbGFzcyBBdWRpb0NvbnRhaW5lciBpbXBsZW1lbnRzIENhblBsYXlUb0VuZCB7XG4gICAgcHJpdmF0ZSByZWFkb25seSBUQUcgPSBcIlsgREF1ZGlvIF06IFwiO1xuICAgIHByb3RlY3RlZCBkdG86IERBdWRpb0R0byB8IG51bGwgPSBudWxsO1xuICAgIHByaXZhdGUgZWw6IEhUTUxBdWRpb0VsZW1lbnQ7XG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBldmVudEJ1czogREV2ZW50RGlzcGF0Y2hlcikge1xuICAgICAgICB0aGlzLmVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImF1ZGlvXCIpO1xuICAgICAgICB0aGlzLmVsLnN0eWxlLnBvc2l0aW9uID0gXCJhYnNvbHV0ZVwiO1xuICAgICAgICB0aGlzLmVsLnN0eWxlLnZpc2liaWxpdHkgPSBcImhpZGRlblwiO1xuICAgICAgICAvLyB0aGlzLmVsLm9uXG4gICAgICAgIHRoaXMub25Mb2FkID0gdGhpcy5vbkxvYWQuYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5lbC5vbmxvYWQgPSB0aGlzLm9uTG9hZDtcbiAgICAgICAgdGhpcy5vbkxvYWRlZE1ldGFkYXRhID0gdGhpcy5vbkxvYWRlZE1ldGFkYXRhLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuZWwub25sb2FkZWRtZXRhZGF0YSA9IHRoaXMub25Mb2FkZWRNZXRhZGF0YTtcbiAgICAgICAgdGhpcy5lbC5vbnBsYXkgPSAoKSA9PiB7XG4gICAgICAgICAgICAvLyBUT0RPXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMub25DYW5QbGF5VGhyb3VnaCA9IHRoaXMub25DYW5QbGF5VGhyb3VnaC5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLmVsLm9uY2FucGxheXRocm91Z2ggPSB0aGlzLm9uQ2FuUGxheVRocm91Z2g7XG4gICAgICAgIHRoaXMuZWwub25lbmRlZCA9IChfKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB1cmwgPSB0aGlzLmVsLnNyYztcbiAgICAgICAgICAgIHRoaXMuZXZlbnRCdXMuZW1pdCh7XG4gICAgICAgICAgICAgICAga2luZDogXCJBVURJT19FTkRFRF9FVkVOVFwiLFxuICAgICAgICAgICAgICAgIGRhdGE6IHsgdXJsIH0sXG4gICAgICAgICAgICAgICAgcHJvZHVjZXI6IFwiREF1ZGlvXCIsXG4gICAgICAgICAgICAgICAgdGltZXN0YW1wOiBEVGltZXN0YW1wLm5vdygpLFxuICAgICAgICAgICAgICAgIHByb2R1Y2VySWQ6IHRoaXMuaWQsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5lbC5vbmR1cmF0aW9uY2hhbmdlID0gKF86IEV2ZW50KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBkdXJhdGlvbiA9IHRoaXMuZWwuZHVyYXRpb247XG4gICAgICAgICAgICBjb25zdCBpc0luZmluaXR5ID0gZHVyYXRpb24gPT09IE51bWJlci5QT1NJVElWRV9JTkZJTklUWTtcbiAgICAgICAgICAgIHRoaXMuZXZlbnRCdXMuZW1pdCh7XG4gICAgICAgICAgICAgICAga2luZDogXCJBVURJT19EVVJBVElPTl9DSEFOR0VfRVZFTlRcIixcbiAgICAgICAgICAgICAgICB0aW1lc3RhbXA6IERUaW1lc3RhbXAubm93KCksXG4gICAgICAgICAgICAgICAgcHJvZHVjZXI6IFwiREF1ZGlvXCIsXG4gICAgICAgICAgICAgICAgcHJvZHVjZXJJZDogdGhpcy5pZCxcbiAgICAgICAgICAgICAgICBkYXRhOiB7IGR1cmF0aW9uOiB0aGlzLmVsLmR1cmF0aW9uLCBpc0luZmluaXR5IH0sXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBzZXRBdWRpbyhkdG86IERBdWRpb0R0bykge1xuICAgICAgICB0aGlzLmR0byA9IGR0bztcbiAgICAgICAgdGhpcy5lbC5zcmMgPSBkdG8udXJsO1xuICAgICAgICB0aGlzLmVsLmxvYWQoKTtcbiAgICB9XG5cbiAgICBkZXN0cm95KCkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgdGhpcy5lbC5wYXVzZSgpO1xuICAgICAgICAgICAgdGhpcy5lbC5zcmMgPSBcIlwiO1xuICAgICAgICAgICAgdGhpcy5lbC5sb2FkKCk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcGF1c2UoKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICB0aGlzLmVsLnBhdXNlKCk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIC8vIFRPRE8gRU1JVCBFUlJPUiBFVkVOVC5cbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcGxheSh1cmw6IHN0cmluZykge1xuICAgICAgICBpZiAodGhpcy5lbC5zcmMgIT09IHVybCkge1xuICAgICAgICAgICAgdGhpcy5lbC5zcmMgPSB1cmw7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5ldmVudEJ1cy5lbWl0KHtcbiAgICAgICAgICAgIGtpbmQ6IFwiQVVESU9fUExBWV9FVkVOVFwiLFxuICAgICAgICAgICAgcHJvZHVjZXJJZDogdGhpcy5pZCxcbiAgICAgICAgICAgIGRhdGE6IHt9LFxuICAgICAgICAgICAgcHJvZHVjZXI6IFwiREF1ZGlvXCIsXG4gICAgICAgICAgICB0aW1lc3RhbXA6IERUaW1lc3RhbXAubm93KCksXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmVsXG4gICAgICAgICAgICAucGxheSgpXG4gICAgICAgICAgICAudGhlbigocmVzKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2cocmVzKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuY2F0Y2goKGUpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhlKTtcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIG9uTG9hZGVkTWV0YWRhdGEoXzogRXZlbnQpIHtcbiAgICAgICAgdGhpcy5ldmVudEJ1cy5lbWl0KHtcbiAgICAgICAgICAgIGtpbmQ6IFwiQVVESU9fTUVUQURBVEFfTE9BREVEX0VWRU5UXCIsXG4gICAgICAgICAgICB0aW1lc3RhbXA6IERUaW1lc3RhbXAubm93KCksXG4gICAgICAgICAgICBwcm9kdWNlcjogXCJEQXVkaW9cIixcbiAgICAgICAgICAgIHByb2R1Y2VySWQ6IHRoaXMuaWQsXG4gICAgICAgICAgICBkYXRhOiB7fSxcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgb25Mb2FkKF86IEV2ZW50KSB7XG4gICAgICAgIHRoaXMuZXZlbnRCdXMuZW1pdCh7XG4gICAgICAgICAgICBraW5kOiBcIkFVRElPX0xPQURfRVZFTlRcIixcbiAgICAgICAgICAgIHRpbWVzdGFtcDogRFRpbWVzdGFtcC5ub3coKSxcbiAgICAgICAgICAgIHByb2R1Y2VyOiBcIkRBdWRpb1wiLFxuICAgICAgICAgICAgcHJvZHVjZXJJZDogdGhpcy5pZCxcbiAgICAgICAgICAgIGRhdGE6IHt9LFxuICAgICAgICB9KTtcbiAgICAgICAgLy8gY29uc29sZS5sb2codGhpcy5UQUcgKyBldmVudC50eXBlKTtcbiAgICB9XG5cbiAgICBnZXQgaWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmR0bz8uaWQgPz8gXCJEQXVkaW9cIjtcbiAgICB9XG5cbiAgICBwcml2YXRlIG9uQ2FuUGxheVRocm91Z2goXzogRXZlbnQpIHtcbiAgICAgICAgdGhpcy5ldmVudEJ1cy5lbWl0KHtcbiAgICAgICAgICAgIGtpbmQ6IFwiQVVESU9fQ0FOX1BMQVlfVEhST1VHSF9FVkVOVFwiLFxuICAgICAgICAgICAgZGF0YToge30sXG4gICAgICAgICAgICBwcm9kdWNlcjogXCJEQXVkaW9cIixcbiAgICAgICAgICAgIHRpbWVzdGFtcDogRFRpbWVzdGFtcC5ub3coKSxcbiAgICAgICAgICAgIHByb2R1Y2VySWQ6IHRoaXMuaWQsXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIHByaXZhdGUgb25QbGF5KF86IEV2ZW50KSB7fVxuXG4gICAgYXN5bmMgcGxheVRvRW5kKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgICAgICBjb25zdCBlbmRlZE9yRXJyb3JlZCA9IG5ldyBQcm9taXNlPGJvb2xlYW4+KChyZXNvbHZlKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmVsLmFkZEV2ZW50TGlzdGVuZXIoXG4gICAgICAgICAgICAgICAgXCJlbmRlZFwiLFxuICAgICAgICAgICAgICAgIChfKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKGUpO1xuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHRydWUpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgeyBvbmNlOiB0cnVlIH1cbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICB0aGlzLmVsLmFkZEV2ZW50TGlzdGVuZXIoXG4gICAgICAgICAgICAgICAgXCJlcnJvclwiLFxuICAgICAgICAgICAgICAgIChfKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKGUpO1xuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGZhbHNlKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHsgb25jZTogdHJ1ZSB9XG4gICAgICAgICAgICApO1xuICAgICAgICB9KTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHRoaXMucGxheSh0aGlzLmVsLnNyYyk7XG4gICAgICAgICAgICBhd2FpdCBlbmRlZE9yRXJyb3JlZDtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAvLyBUT0RPIExFVCBQQVJFTlQgREVBTCBXSVRIIEVSUk9SUz8gVEhFIE1BTkFHRVI/PyBNQU5BR0VSUyBDQUxMIEFCT1JULlxuICAgICAgICAgICAgY29uc29sZS5sb2coZSk7XG4gICAgICAgICAgICB0aGlzLmV2ZW50QnVzLmVtaXQoe1xuICAgICAgICAgICAgICAgIGtpbmQ6IFwiQVVESU9fRVJST1JfRVZFTlRcIixcbiAgICAgICAgICAgICAgICB0aW1lc3RhbXA6IERUaW1lc3RhbXAubm93KCksXG4gICAgICAgICAgICAgICAgcHJvZHVjZXI6IFwiREF1ZGlvXCIsXG4gICAgICAgICAgICAgICAgcHJvZHVjZXJJZDogdGhpcy5pZCxcbiAgICAgICAgICAgICAgICBkYXRhOiB7IGVycm9yOiBlIH0sXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoZmFsc2UpO1xuICAgIH1cbn1cbiIsICJpbXBvcnQgeyBQYWdlRHRvIH0gZnJvbSBcIi4uL2R0by9TY2hlbWFEdG9cIjtcbmltcG9ydCB7IFZpZGVvQ29udGFpbmVyIH0gZnJvbSBcIi4uL0RlbGVtZW50L1ZpZGVvQ29udGFpbmVyXCI7XG5pbXBvcnQgeyBBdWRpb0NvbnRhaW5lciB9IGZyb20gXCIuLi9EZWxlbWVudC9BdWRpb0NvbnRhaW5lclwiO1xuaW1wb3J0IHsgQXV0b1BsYXlFbGVtZW50LCBEQXV0b1BsYXlTZXF1ZW5jZSB9IGZyb20gXCIuLi9EZWxlbWVudC9EQXV0by1wbGF5XCI7XG5pbXBvcnQgeyBEQ29tbWFuZEJ1cyB9IGZyb20gXCIuLi9jb21tYW5kcy9EQ29tbWFuZEJ1c1wiO1xuaW1wb3J0IHsgRENvbW1hbmQgfSBmcm9tIFwiLi4vY29tbWFuZHMvRENvbW1hbmRcIjtcbmltcG9ydCB7IERUaW1lc3RhbXAgfSBmcm9tIFwiLi4vY29tbW9uL0RUaW1lc3RhbXBcIjtcbmltcG9ydCB7IEV2ZW50QnVzIH0gZnJvbSBcIi4uL2V2ZW50cy9ldmVudC1idXNcIjtcbmltcG9ydCB7IFNjYWxlU2VydmljZSB9IGZyb20gXCIuLi9lbmdpbmUvc2NhbGVcIjtcbmltcG9ydCB7IFJlc291cmNlUHJvdmlkZXIgfSBmcm9tIFwiLi9yZXNvdXJjZS1wcm92aWRlclwiO1xuaW1wb3J0IHsgQXV0b3BsYXlUYXNrLCBTZXF1ZW5jZU1hbmFnZXIgfSBmcm9tIFwiLi9zZXF1ZW5jZS1tYW5hZ2VyXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSU1lZGlhTWFuYWdlciB7XG4gIHNldFBhZ2UocGFnZTogUGFnZUR0byk6IHZvaWQ7XG4gIGRlc3Ryb3koKTogdm9pZDtcbn1cblxuZXhwb3J0IGNsYXNzIERNZWRpYU1hbmFnZXIgaW1wbGVtZW50cyBJTWVkaWFNYW5hZ2VyIHtcbiAgcHJpdmF0ZSBzdGF0aWMgSU5TVEFOQ0VfQ09VTlQgPSAwO1xuICBwcml2YXRlIHJlYWRvbmx5IGluc3RhbmNlTnVtYmVyOiBudW1iZXI7XG4gIHByaXZhdGUgcmVhZG9ubHkgVEFHID0gXCJbIE1FRElBX01BTkFHRVIgXSA6IFwiO1xuICBwcml2YXRlIHJlYWRvbmx5IHZpZGVvQ29udGFpbmVyOiBWaWRlb0NvbnRhaW5lcjtcbiAgcHJpdmF0ZSByZWFkb25seSBhdWRpb0NvbnRhaW5lcjogQXVkaW9Db250YWluZXI7XG4gIHByaXZhdGUgcGFnZUVudGVyOiBEVGltZXN0YW1wO1xuICBwcml2YXRlIHNpbmNlUGFnZUVudGVyOiBEVGltZXN0YW1wLkRpZmY7XG4gIHByaXZhdGUgY3VycmVudFBhZ2U6IFBhZ2VEdG8gfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSByZWFkb25seSB1bnN1YnNjcmliZUNvbW1hbmRzOiAoKSA9PiB2b2lkO1xuICBwcml2YXRlIHJlYWRvbmx5IHRpY2tlclJlZjogbnVtYmVyO1xuICBwcml2YXRlIHJlYWRvbmx5IHNlcXVlbmNlTWFuYWdlcjogU2VxdWVuY2VNYW5hZ2VyIHwgZmFsc2UgPSBmYWxzZTtcbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBob3N0RWw6IEhUTUxEaXZFbGVtZW50LFxuICAgIHByaXZhdGUgcmVhZG9ubHkgY29tbWFuZEJ1czogRENvbW1hbmRCdXMsXG4gICAgcHJpdmF0ZSByZWFkb25seSBldmVudEJ1czogRXZlbnRCdXMsXG4gICAgcHJpdmF0ZSByZWFkb25seSByZXNvdXJjZVByb3ZpZGVyOiBSZXNvdXJjZVByb3ZpZGVyLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgc2NhbGU6IFNjYWxlU2VydmljZSxcbiAgKSB7XG4gICAgRE1lZGlhTWFuYWdlci5JTlNUQU5DRV9DT1VOVCA9IERNZWRpYU1hbmFnZXIuSU5TVEFOQ0VfQ09VTlQgKyAxO1xuICAgIHRoaXMuaW5zdGFuY2VOdW1iZXIgPSBETWVkaWFNYW5hZ2VyLklOU1RBTkNFX0NPVU5UO1xuICAgIGNvbnN0IHZpZGVvRWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwidmlkZW9cIik7XG4gICAgdGhpcy5ob3N0RWwuYXBwZW5kKHZpZGVvRWwpO1xuICAgIHRoaXMudmlkZW9Db250YWluZXIgPSBuZXcgVmlkZW9Db250YWluZXIodmlkZW9FbCwgZXZlbnRCdXMsIHRoaXMuc2NhbGUpO1xuICAgIHRoaXMuYXVkaW9Db250YWluZXIgPSBuZXcgQXVkaW9Db250YWluZXIodGhpcy5ldmVudEJ1cyk7XG4gICAgdGhpcy50aWNrID0gdGhpcy50aWNrLmJpbmQodGhpcyk7XG4gICAgdGhpcy52aWRlb0NvbnRhaW5lci5zZXRTdHlsZSh7IHZpc2liaWxpdHk6IFwiaGlkZGVuXCIgfSk7XG4gICAgY29uc3Qgbm93ID0gRFRpbWVzdGFtcC5ub3coKTtcbiAgICB0aGlzLnBhZ2VFbnRlciA9IG5vdztcbiAgICB0aGlzLnNpbmNlUGFnZUVudGVyID0gRFRpbWVzdGFtcC5kaWZmKG5vdywgbm93KTtcbiAgICB0aGlzLnVuc3Vic2NyaWJlQ29tbWFuZHMgPSB0aGlzLmNvbW1hbmRCdXMuc3Vic2NyaWJlKChhY3Rpb24pID0+IHtcbiAgICAgIHRoaXMuY29tbWFuZEhhbmRsZXIoYWN0aW9uKTtcbiAgICB9LCB0aGlzLlRBRyk7XG5cbiAgICB0aGlzLnRpY2tlclJlZiA9IHdpbmRvdy5zZXRJbnRlcnZhbCgoKSA9PiB7fSwgMTAwMCk7XG4gIH1cblxuICAvKipcbiAgICogU3RvcCBhbGwgbWVkaWEgdGhhdCBpcyBwbGF5aW5nXG4gICAqL1xuICBjbGVhckFsbE1lZGlhKCkge1xuICAgIHRoaXMudmlkZW9Db250YWluZXIucGF1c2UoKTtcbiAgICB0aGlzLmF1ZGlvQ29udGFpbmVyLnBhdXNlKCk7XG4gIH1cbiAgZGVzdHJveSgpIHtcbiAgICBjb25zb2xlLmxvZyhcIlRPRE8gREVTVFJPWSBBTEwgTUVESUFcIik7XG4gICAgdGhpcy51bnN1YnNjcmliZUNvbW1hbmRzKCk7XG4gICAgLy8gY29uc29sZS5sb2codGhpcy50aWNrZXJSZWYpO1xuICAgIHdpbmRvdy5jbGVhckludGVydmFsKHRoaXMudGlja2VyUmVmKTtcbiAgICB0aGlzLmF1ZGlvQ29udGFpbmVyLmRlc3Ryb3koKTtcbiAgICB0aGlzLnZpZGVvQ29udGFpbmVyLmRlc3Ryb3koKTtcbiAgfVxuXG4gIHNldFBhZ2UocGFnZTogUGFnZUR0bykge1xuICAgIC8vIFRPRE8gU1RPUCBWSURFTy9BVURJTyBUSEFUIE1JR0hUIEJFIFBMQVlJTkcgSU4gVEhFIERPTT8/XG4gICAgdGhpcy5jdXJyZW50UGFnZSA9IHBhZ2U7XG4gICAgdGhpcy52aWRlb0NvbnRhaW5lci5wYXVzZSgpO1xuICAgIHRoaXMucGFnZUVudGVyID0gRFRpbWVzdGFtcC5ub3coKTtcbiAgICAvLyBUT0RPIFRIaXMgbWlnaHQgYmUgYSBidWcgaWYgc29tZW9uZVxuXG4gICAgY29uc3Qgc2VxID0gcGFnZS5hdXRvUGxheVNlcXVlbmNlO1xuICAgIC8vIHRoaXMuc2VxdWVuY2UgPSBzZXEgPyBbLi4uc2VxLml0ZW1zXSA6IFtdO1xuICAgIGNvbnN0IHsgbWFpblZpZGVvSWQsIGF1ZGlvIH0gPSBwYWdlO1xuICAgIGNvbnN0IGF1ZGlvRWxlbWVudHMgPSBwYWdlLmF1ZGlvO1xuXG4gICAgaWYgKG1haW5WaWRlb0lkKSB7XG4gICAgICBjb25zdCBkdG8gPSB0aGlzLnJlc291cmNlUHJvdmlkZXIuZ2V0VmlkZW9CeUlkKG1haW5WaWRlb0lkKTtcbiAgICAgIGlmIChkdG8pIHtcbiAgICAgICAgdGhpcy52aWRlb0NvbnRhaW5lci5zZXREdG8oZHRvKTtcbiAgICAgICAgdGhpcy52aWRlb0NvbnRhaW5lci5zZXRTdHlsZSh7IC4uLmR0by5zdHlsZSwgdmlzaWJpbGl0eTogXCJ2aXNpYmxlXCIgfSk7XG4gICAgICB9XG4gICAgICAvLyB0aGlzLnZpZGVvQ29udGFpbmVyLnBsYXlUb0VuZCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnZpZGVvQ29udGFpbmVyLnNldFN0eWxlKHsgdmlzaWJpbGl0eTogXCJoaWRkZW5cIiB9KTtcbiAgICAgIC8vIEhJREU/XG4gICAgfVxuICAgIGlmIChhdWRpb0VsZW1lbnRzKSB7XG4gICAgICBjb25zdCBmaXJzdCA9IGF1ZGlvRWxlbWVudHNbMF07XG4gICAgICBpZiAoZmlyc3QpIHtcbiAgICAgICAgdGhpcy5hdWRpb0NvbnRhaW5lci5zZXRBdWRpbyhmaXJzdCk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChzZXEpIHtcbiAgICAgIHRoaXMucGxheVNlcXVlbmNlKHNlcSk7XG4gICAgfVxuICAgIC8vIGNvbnN0IGhhc1ZpZGVvID1cbiAgfVxuXG4gIHByaXZhdGUgY29tbWFuZEhhbmRsZXIoY29tbWFuZDogRENvbW1hbmQpIHtcbiAgICBpZiAoY29tbWFuZC5raW5kID09PSBcIlZJREVPX1BMQVlfQ09NTUFORFwiKSB7XG4gICAgICBjb25zdCB2aWRlbyA9IGNvbW1hbmQudGFyZ2V0SWQ7XG4gICAgICBjb25zdCBkdG8gPSB0aGlzLnZpZGVvQ29udGFpbmVyLmdldEN1cnJlbnREdG8oKTtcblxuICAgICAgaWYgKGR0byAmJiBkdG8uaWQgPT09IGNvbW1hbmQudGFyZ2V0SWQpIHtcbiAgICAgICAgY29uc29sZS5sb2codmlkZW8pO1xuICAgICAgICB0aGlzLnZpZGVvQ29udGFpbmVyLnBsYXkoZHRvLnVybCk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChjb21tYW5kLmtpbmQgPT09IFwiVklERU9fUEFVU0VfQ09NTUFORFwiKSB7XG4gICAgICB0aGlzLnZpZGVvQ29udGFpbmVyLnBhdXNlKCk7XG4gICAgfVxuICAgIGlmIChjb21tYW5kLmtpbmQgPT09IFwiQVVESU9fUExBWV9DT01NQU5EXCIpIHtcbiAgICAgIHRoaXMuYXVkaW9Db250YWluZXJcbiAgICAgICAgLnBsYXlUb0VuZCgpXG4gICAgICAgIC50aGVuKCgpID0+IHt9KVxuICAgICAgICAuY2F0Y2goKVxuICAgICAgICAuZmluYWxseSgoKSA9PiB7fSk7XG4gICAgfVxuXG4gICAgaWYgKGNvbW1hbmQua2luZCA9PT0gXCJBVURJT19QQVVTRV9DT01NQU5EXCIpIHtcbiAgICAgIC8vIHRoaXMuYXVkaW9Db250YWluZXIuXG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBwbGF5U2VxdWVuY2Uoc2VxOiBEQXV0b1BsYXlTZXF1ZW5jZSkge1xuICAgIC8vIGNvbnNvbGUubG9nKHRoaXMuVEFHICsgXCJTRVFVRU5DRSBTVEFSVEVEIC0tIFRPRE8gRVZFTlQgRk9SIFRISVM/P1wiKTtcblxuICAgIGNvbnN0IGVsZW1lbnRzID0gc2VxLml0ZW1zO1xuICAgIGNvbnN0IHRlc3RDbG9uZSA9IFsuLi5lbGVtZW50c107XG4gICAgY29uc3QgZmlyc3QgPSB0ZXN0Q2xvbmUucG9wKCk7XG5cbiAgICBpZiAoIWZpcnN0KSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGNvbnN0IG5vdyA9IERUaW1lc3RhbXAubm93KCk7XG4gICAgc2VxLnN0YXJ0Q29tbWFuZHMuZm9yRWFjaCgoYykgPT4ge1xuICAgICAgY29uc29sZS5sb2coYyk7XG4gICAgICB0aGlzLmNvbW1hbmRCdXMuZW1pdChjKTtcbiAgICB9KTtcbiAgICAvLyB0aGlzLmNvbW1hbmRCdXMuZW1pdChEU3RhdGVQcm9wcy5tZWRpYUJsb2NrZWRCeVNlcXVlbmNlLnNldFRydWVDb21tYW5kKTtcbiAgICAvLyBpZiAoc2VxLmJsb2NrVXNlcklucHV0KSB7XG4gICAgLy8gICAgIHRoaXMuY29tbWFuZEJ1cy5lbWl0KERTdGF0ZVByb3BzLmlucHV0QmxvY2tpbmdCeVNlcXVlbmNlLmdldFNldFRydWVDb21tYW5kKCkpO1xuICAgIC8vIH1cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGVsZW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBpdGVtID0gZWxlbWVudHNbaV07XG4gICAgICBpZiAoaXRlbS5raW5kID09PSBcImF1dG9wbGF5LXZpZGVvXCIpIHtcbiAgICAgICAgY29uc3QgZHRvID0gdGhpcy5yZXNvdXJjZVByb3ZpZGVyLmdldFZpZGVvQnlJZChpdGVtLnZpZGVvSWQpO1xuICAgICAgICBpZiAoZHRvKSB0aGlzLnZpZGVvQ29udGFpbmVyLnNldER0byhkdG8pO1xuICAgICAgICBhd2FpdCB0aGlzLnZpZGVvQ29udGFpbmVyLnBsYXlUb0VuZCgpO1xuICAgICAgfVxuICAgICAgaWYgKGl0ZW0ua2luZCA9PT0gXCJhdXRvcGxheS1hdWRpb1wiKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGl0ZW0pO1xuICAgICAgICBjb25zdCBkdG8gPSB0aGlzLnJlc291cmNlUHJvdmlkZXIuZ2V0QXVkaW9CeUlkKGl0ZW0uYXVkaW9JZCk7XG4gICAgICAgIGlmIChkdG8pIHRoaXMuYXVkaW9Db250YWluZXIuc2V0QXVkaW8oZHRvKTtcbiAgICAgICAgYXdhaXQgdGhpcy5hdWRpb0NvbnRhaW5lci5wbGF5VG9FbmQoKTtcbiAgICAgIH1cbiAgICB9XG4gICAgc2VxLmVuZENvbW1hbmRzLmZvckVhY2goKGMpID0+IHtcbiAgICAgIHRoaXMuY29tbWFuZEJ1cy5lbWl0KGMpO1xuICAgIH0pO1xuICAgIC8vIHRoaXMuYWN0aW9uU2VydmljZS5lbWl0KERTdGF0ZVByb3BzLm1lZGlhQmxvY2tlZEJ5U2VxdWVuY2Uuc2V0RmFsc2VDb21tYW5kKTtcbiAgICAvLyB0aGlzLmFjdGlvblNlcnZpY2UuZW1pdChEU3RhdGVQcm9wcy5pbnB1dEJsb2NraW5nQnlTZXF1ZW5jZS5zZXRGYWxzZUNvbW1hbmQpO1xuICAgIGNvbnNvbGUubG9nKHRoaXMuVEFHICsgXCJTRVFVRU5DRSBFTkRFRFwiKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8vIHNldFBhZ2UoKVxuXG4gIHByaXZhdGUgdGljaygpIHtcbiAgICAvLyBjb25zb2xlLmxvZyh0aGlzLnZpZGVvMS5nZXRTdGF0cygpKTtcbiAgfVxufVxuIiwgImltcG9ydCB7IERDb21tYW5kIH0gZnJvbSBcIi4vRENvbW1hbmRcIjtcbmltcG9ydCB7IERUaW1lc3RhbXAgfSBmcm9tIFwiLi4vY29tbW9uL0RUaW1lc3RhbXBcIjtcblxuZXhwb3J0IGludGVyZmFjZSBEQ29tbWFuZFN0b3JlIHtcbiAgc3Vic2NyaWJlKGNhbGxiYWNrOiAoKSA9PiB2b2lkLCBzdWJzY3JpYmVySWQ6IHN0cmluZyk6IHZvaWQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRENvbW1hbmREaXNwYXRjaGVyIHtcbiAgZW1pdChjb21tYW5kOiBEQ29tbWFuZCk6IHZvaWQ7XG59XG5cbmludGVyZmFjZSBDb21tYW5kU3Vic2NyaWJlckRhdGEge1xuICByZWFkb25seSBzdWJzY3JpYmVySWQ6IHN0cmluZztcbiAgcmVhZG9ubHkgY2FsbGJhY2s6IChjb21tYW5kOiBEQ29tbWFuZCkgPT4gdm9pZDtcbn1cbmV4cG9ydCBjbGFzcyBEQ29tbWFuZEJ1cyBpbXBsZW1lbnRzIERDb21tYW5kU3RvcmUsIERDb21tYW5kRGlzcGF0Y2hlciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgVEFHID0gXCJbIENPTU1BTkRfQlVTIF0gXCI7XG4gIGxvZ0NvbW1hbmRzID0gZmFsc2U7XG4gIHByaXZhdGUgcmVhZG9ubHkgY29tbWFuZExvZzogQXJyYXk8RENvbW1hbmQgJiB7IHRpbWVzdGFtcDogRFRpbWVzdGFtcCB9PiA9IFtdO1xuICByZWFkb25seSBzdWJzY3JpYmVycyA9IG5ldyBTZXQ8Q29tbWFuZFN1YnNjcmliZXJEYXRhPigpO1xuICAvLyByZWFkb25seSBzdWJcblxuICBzdWJzY3JpYmUoY2I6IChjb21tYW5kOiBEQ29tbWFuZCkgPT4gdm9pZCwgc3Vic2NyaWJlcklkOiBzdHJpbmcpIHtcbiAgICBjb25zdCBzdWI6IENvbW1hbmRTdWJzY3JpYmVyRGF0YSA9IHtcbiAgICAgIHN1YnNjcmliZXJJZCxcbiAgICAgIGNhbGxiYWNrOiBjYixcbiAgICB9O1xuXG4gICAgdGhpcy5zdWJzY3JpYmVycy5hZGQoc3ViKTtcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgdGhpcy5zdWJzY3JpYmVycy5kZWxldGUoc3ViKTtcbiAgICB9O1xuICB9XG5cbiAgZW1pdChjb21tYW5kOiBEQ29tbWFuZCkge1xuICAgIGNvbnN0IHRpbWVzdGFtcCA9IERUaW1lc3RhbXAubm93KCk7XG4gICAgdGhpcy5jb21tYW5kTG9nLnB1c2goeyAuLi5jb21tYW5kLCB0aW1lc3RhbXAgfSk7XG4gICAgaWYgKHRoaXMubG9nQ29tbWFuZHMpIHtcbiAgICAgIHRoaXMubG9nQ29tbWFuZChjb21tYW5kKTtcbiAgICB9XG4gICAgdGhpcy5zdWJzY3JpYmVycy5mb3JFYWNoKChzdWJzY3JpYmVyKSA9PiB7XG4gICAgICBzdWJzY3JpYmVyLmNhbGxiYWNrKGNvbW1hbmQpO1xuICAgIH0pO1xuICB9XG5cbiAgZ2V0U3RhdHMoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGNvbW1hbmRzOiBbLi4udGhpcy5jb21tYW5kTG9nXSxcbiAgICAgIHN1YnNjcmliZXJzOiBbLi4udGhpcy5zdWJzY3JpYmVyc10sXG4gICAgICBzdWJzY3JpYmVyc0NvdW50OiB0aGlzLnN1YnNjcmliZXJzLnNpemUsXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgbG9nQ29tbWFuZChjb21tYW5kOiBEQ29tbWFuZCkge1xuICAgIGNvbnNvbGUuZ3JvdXBDb2xsYXBzZWQodGhpcy5UQUcgKyBcIiBcIiArIGNvbW1hbmQua2luZCk7XG4gICAgY29uc29sZS5sb2coXCJUYXJnZXRJRCA6IFwiICsgY29tbWFuZC50YXJnZXRJZCk7XG4gICAgY29uc29sZS5sb2coY29tbWFuZC5wYXlsb2FkKTtcbiAgICBjb25zb2xlLmdyb3VwRW5kKCk7XG4gIH1cbn1cbiIsICJpbXBvcnQgeyBERXZlbnQgfSBmcm9tIFwiLi9ERXZlbnRzXCI7XG5cbmludGVyZmFjZSBTdWJzY3JpYmVyRGF0YSB7XG4gICAgcmVhZG9ubHkgc3Vic2NyaWJlcklkOiBzdHJpbmc7XG4gICAgcmVhZG9ubHkgY2I6IChldmVudDogREV2ZW50KSA9PiB2b2lkO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIERFdmVudFN0b3JlIHtcbiAgICBzdWJzY3JpYmUoY2I6IChldmVudDogREV2ZW50KSA9PiB2b2lkLCBzdWJzY3JpYmVySWQ6IHN0cmluZyk6IHZvaWQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgREV2ZW50RGlzcGF0Y2hlciB7XG4gICAgZW1pdChldmVudDogREV2ZW50KTogdm9pZDtcbn1cbmV4cG9ydCBjbGFzcyBFdmVudEJ1cyBpbXBsZW1lbnRzIERFdmVudFN0b3JlLCBERXZlbnREaXNwYXRjaGVyIHtcbiAgICBwcml2YXRlIHJlYWRvbmx5IFRBRyA9IFwiWyAgRVZFTlRfQlVTICBdIDpcIjtcbiAgICAvLyBwcml2YXRlIHJlYWRvbmx5IHN1YnNjcmliZXJzID0gbmV3IFNldDwoZXZlbnQ6IERFdmVudCkgPT4gdm9pZD4oKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IHN1YnNjcmliZXJzID0gbmV3IFNldDxTdWJzY3JpYmVyRGF0YT4oKTtcblxuICAgIC8qKlxuICAgICAqIEVtaXQgb24gbW9kdWxlIGVuZC5cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgZXZlbnRMb2c6IERFdmVudFtdID0gW107XG4gICAgY29uc29sZUxvZ0V2ZW50cyA9IGZhbHNlO1xuICAgIC8vIHJlYWRvbmx5IHN1YlxuXG4gICAgc3Vic2NyaWJlKGNiOiAoZXZlbnQ6IERFdmVudCkgPT4gdm9pZCwgc3Vic2NyaWJlcklkOiBzdHJpbmcpIHtcbiAgICAgICAgLy8gdGhpcy5zdWJzY3JpYmVycy5hZGQoY2IpO1xuICAgICAgICBjb25zdCBzdWJzY3JpYmVyRGF0YTogU3Vic2NyaWJlckRhdGEgPSB7XG4gICAgICAgICAgICBzdWJzY3JpYmVySWQsXG4gICAgICAgICAgICBjYixcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5zdWJzY3JpYmVycy5hZGQoc3Vic2NyaWJlckRhdGEpO1xuICAgICAgICBpZiAodGhpcy5jb25zb2xlTG9nRXZlbnRzKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyh0aGlzLlRBRyArIFwic3Vic2NyaXB0aW9uIGFkZGVkOiBcIiArIHN1YnNjcmliZXJJZCk7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyh0aGlzLlRBRyArIFwic3Vic2NyaXB0aW9uIGNvdW50OiBcIiArIHRoaXMuc3Vic2NyaWJlcnMuc2l6ZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLmNvbnNvbGVMb2dFdmVudHMpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyh0aGlzLlRBRyArIFwic3Vic2NyaXB0aW9uIHJlbW92ZWQ6IFwiICsgc3Vic2NyaWJlcklkKTtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyh0aGlzLlRBRyArIFwic3Vic2NyaXB0aW9uIGNvdW50ICA6IFwiICsgdGhpcy5zdWJzY3JpYmVycy5zaXplKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIHRoaXMuc3Vic2NyaWJlcnMuZGVsZXRlKGNiKTtcbiAgICAgICAgICAgIHRoaXMuc3Vic2NyaWJlcnMuZGVsZXRlKHN1YnNjcmliZXJEYXRhKTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBnZXRTdGF0cygpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHN1YnNjcmliZXJzQ291bnQ6IHRoaXMuc3Vic2NyaWJlcnMuc2l6ZSxcbiAgICAgICAgICAgIGV2ZW50TG9nOiBbLi4udGhpcy5ldmVudExvZ10sXG4gICAgICAgICAgICBzdWJzY3JpYmVyczogWy4uLnRoaXMuc3Vic2NyaWJlcnNdLFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIGVtaXQoZXZlbnQ6IERFdmVudCkge1xuICAgICAgICBpZiAodGhpcy5jb25zb2xlTG9nRXZlbnRzKSB7XG4gICAgICAgICAgICB0aGlzLmxvZ0V2ZW50KGV2ZW50KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmV2ZW50TG9nLnB1c2goZXZlbnQpO1xuICAgICAgICB0aGlzLnN1YnNjcmliZXJzLmZvckVhY2goKGRhdGEpID0+IHtcbiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCdDQUxMSU5HIEVNSVQnKTtcbiAgICAgICAgICAgIGRhdGEuY2IoZXZlbnQpO1xuICAgICAgICB9KTtcbiAgICAgICAgLy8gdGhpcy5sb2dFdmVudHMoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGxvZ0V2ZW50KGV2ZW50OiBERXZlbnQpIHtcbiAgICAgICAgY29uc29sZS5ncm91cENvbGxhcHNlZCh0aGlzLlRBRyArIFwiIFwiICsgZXZlbnQua2luZCk7XG4gICAgICAgIGNvbnNvbGUubG9nKFwiUHJvZHVjZXJJZDogXCIgKyBldmVudC5wcm9kdWNlcklkKTtcbiAgICAgICAgY29uc29sZS5sb2coZXZlbnQuZGF0YSk7XG4gICAgICAgIGNvbnNvbGUuZ3JvdXBFbmQoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGxvZ0V2ZW50cygpIHtcbiAgICAgICAgY29uc29sZS5ncm91cCh0aGlzLlRBRyArIFwiTE9HR1wiKTtcbiAgICAgICAgY29uc29sZS50YWJsZSh0aGlzLmV2ZW50TG9nKTtcbiAgICAgICAgY29uc29sZS5ncm91cEVuZCgpO1xuICAgIH1cbn1cbiIsICJpbXBvcnQgeyBGYWN0IH0gZnJvbSBcIi4uL3J1bGVzL2ZhY3RcIjtcbmltcG9ydCB7IERUaW1lc3RhbXAgfSBmcm9tIFwiLi4vY29tbW9uL0RUaW1lc3RhbXBcIjtcblxuZXhwb3J0IGludGVyZmFjZSBBbnN3ZXJlZFF1ZXN0aW9uIHtcbiAgICByZWFkb25seSB0aW1lc3RhbXA6IERUaW1lc3RhbXA7XG4gICAgcmVhZG9ubHkgZmFjdDogRmFjdDtcbn1cblxuZXhwb3J0IG5hbWVzcGFjZSBBbnN3ZXJlZFF1ZXN0aW9uIHtcbiAgICBleHBvcnQgY29uc3QgZXEgPSAoYTogQW5zd2VyZWRRdWVzdGlvbiwgYjogQW5zd2VyZWRRdWVzdGlvbik6IGJvb2xlYW4gPT4ge1xuICAgICAgICByZXR1cm4gYS5mYWN0ID09PSBiLmZhY3Q7XG4gICAgfTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQYWdlSGlzdG9yeSB7XG4gICAgcmVhZG9ubHkgcGFnZUlkOiBzdHJpbmc7XG4gICAgcmVhZG9ubHkgYW5zd2VyZWRRdWVzdGlvbnM6IEFuc3dlcmVkUXVlc3Rpb25bXTtcbn1cblxuZXhwb3J0IGNsYXNzIEhpc3RvcnlRdWUge1xuICAgIHByaXZhdGUgaGlzdG9yeTogUGFnZUhpc3RvcnlbXSA9IFtdO1xuXG4gICAgZ2V0RmFjdHMoKTogQXJyYXk8RmFjdD4ge1xuICAgICAgICBjb25zdCBhbnN3ZXJzID0gdGhpcy5oaXN0b3J5Lm1hcCgoaCkgPT4gaC5hbnN3ZXJlZFF1ZXN0aW9ucykuZmxhdCgxKTtcbiAgICAgICAgY29uc3QgZmFjdHMgPSBhbnN3ZXJzLm1hcCgoYSkgPT4gYS5mYWN0KTtcbiAgICAgICAgLy8gVE9ETyBGSU5EIExBVEVTVCBGQUNUIChhbnN3ZXIpIGlmIGhhdmUgbXVsdGlwbGUuXG4gICAgICAgIHJldHVybiBmYWN0cztcbiAgICB9XG5cbiAgICBnZXRBbnN3ZXJzKCk6IEFycmF5PEFuc3dlcmVkUXVlc3Rpb24+IHtcbiAgICAgICAgY29uc3QgYW5zd2VycyA9IHRoaXMuaGlzdG9yeS5tYXAoKGgpID0+IGguYW5zd2VyZWRRdWVzdGlvbnMpLmZsYXQoMSk7XG4gICAgICAgIHJldHVybiBhbnN3ZXJzO1xuICAgIH1cblxuICAgIGFkZFRvSGlzdG9yeShwYWdlOiBQYWdlSGlzdG9yeSkge1xuICAgICAgICB0aGlzLmhpc3RvcnkucHVzaChwYWdlKTtcbiAgICB9XG59XG4iLCAiaW1wb3J0IHsgRmFjdCB9IGZyb20gXCIuL2ZhY3RcIjtcbmltcG9ydCB7IERVdGlsIH0gZnJvbSBcIi4uL3V0aWxzL0RVdGlsXCI7XG5leHBvcnQgdHlwZSBDb25kaXRpb24gPSBDb25kaXRpb24uU3RyaW5nIHwgQ29uZGl0aW9uLk51bWVyaWMgfCBDb25kaXRpb24uQ29tcGxleDtcblxuZXhwb3J0IG5hbWVzcGFjZSBDb25kaXRpb24ge1xuICAgIGV4cG9ydCB0eXBlIFN0cmluZ09wZXJhdG9yID0gXCJlcVwiIHwgXCJub3QtZXFcIiB8IFwibG9uZ2VyLXRoZW5cIiB8IFwic2hvcnRlci10aGVuXCI7XG5cbiAgICBleHBvcnQgdHlwZSBOdW1lcmljT3BlcmF0b3IgPVxuICAgICAgICB8IFwiZXFcIlxuICAgICAgICB8IFwibm90LWVxXCJcbiAgICAgICAgfCBcImdyZWF0ZXItdGhlblwiXG4gICAgICAgIHwgXCJsZXNzLXRoZW5cIlxuICAgICAgICB8IFwiZ3JlYXRlci10aGVuLWluY2x1c2l2ZVwiXG4gICAgICAgIHwgXCJsZXNzLXRoZW4taW5jbHVzaXZlXCI7XG5cbiAgICBleHBvcnQgaW50ZXJmYWNlIE51bWVyaWMge1xuICAgICAgICByZWFkb25seSByZWZlcmVuY2VJZDogc3RyaW5nO1xuICAgICAgICByZWFkb25seSByZWZlcmVuY2VMYWJlbDogc3RyaW5nO1xuICAgICAgICByZWFkb25seSB2YWx1ZUxhYmVsOiBzdHJpbmc7XG4gICAgICAgIHJlYWRvbmx5IGtpbmQ6IFwibnVtZXJpYy1jb25kaXRpb25cIjtcbiAgICAgICAgcmVhZG9ubHkgb3BlcmF0b3I6IE51bWVyaWNPcGVyYXRvcjtcbiAgICAgICAgcmVhZG9ubHkgdmFsdWU6IG51bWJlcjtcbiAgICB9XG4gICAgZXhwb3J0IGludGVyZmFjZSBTdHJpbmcge1xuICAgICAgICByZWFkb25seSByZWZlcmVuY2VJZDogc3RyaW5nO1xuICAgICAgICByZWFkb25seSByZWZlcmVuY2VMYWJlbDogc3RyaW5nO1xuICAgICAgICByZWFkb25seSB2YWx1ZUxhYmVsOiBzdHJpbmc7XG4gICAgICAgIHJlYWRvbmx5IGtpbmQ6IFwic3RyaW5nLWNvbmRpdGlvblwiO1xuICAgICAgICByZWFkb25seSBvcGVyYXRvcjogU3RyaW5nT3BlcmF0b3I7XG4gICAgICAgIHJlYWRvbmx5IHZhbHVlOiBzdHJpbmc7XG4gICAgfVxuXG4gICAgZXhwb3J0IGludGVyZmFjZSBDb21wbGV4IHtcbiAgICAgICAgcmVhZG9ubHkga2luZDogXCJjb21wbGV4LWNvbmRpdGlvblwiO1xuICAgICAgICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG4gICAgICAgIHJlYWRvbmx5IGFsbDogUmVhZG9ubHlBcnJheTxDb25kaXRpb24uU2ltcGxlPjtcbiAgICAgICAgcmVhZG9ubHkgc29tZTogUmVhZG9ubHlBcnJheTxDb25kaXRpb24uU2ltcGxlPjtcbiAgICB9XG5cbiAgICBleHBvcnQgdHlwZSBTaW1wbGUgPSBDb25kaXRpb24uU3RyaW5nIHwgQ29uZGl0aW9uLk51bWVyaWM7XG5cbiAgICAvKipcbiAgICAgKiBBbiBlbXB0eSBjb25kaXRpb24gd2lsbCBldmFsdWF0ZSB0byBmYWxzZSxcbiAgICAgKiBAcGFyYW0gY29uZGl0aW9uOiBDb25kaXRpb24uQW55XG4gICAgICogQHBhcmFtIGZhY3RzXG4gICAgICovXG4gICAgZXhwb3J0IGNvbnN0IGV2YWx1YXRlID0gKGNvbmRpdGlvbjogQ29uZGl0aW9uLCBmYWN0czogUmVhZG9ubHlBcnJheTxGYWN0PikgPT4ge1xuICAgICAgICBsZXQgcmVzdWx0OiBib29sZWFuID0gZmFsc2U7XG4gICAgICAgIHN3aXRjaCAoY29uZGl0aW9uLmtpbmQpIHtcbiAgICAgICAgICAgIGNhc2UgXCJzdHJpbmctY29uZGl0aW9uXCI6XG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gZXZhbHVhdGVTaW1wbGUoY29uZGl0aW9uLCBmYWN0cyk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwibnVtZXJpYy1jb25kaXRpb25cIjpcbiAgICAgICAgICAgICAgICByZXN1bHQgPSBldmFsdWF0ZVNpbXBsZShjb25kaXRpb24sIGZhY3RzKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJjb21wbGV4LWNvbmRpdGlvblwiOlxuICAgICAgICAgICAgICAgIHJlc3VsdCA9IGV2YWx1YXRlQ29tcGxleChjb25kaXRpb24sIGZhY3RzKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgY29uc3QgY2hlY2s6IG5ldmVyID0gY29uZGl0aW9uO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfTtcblxuICAgIGNvbnN0IGV2YWx1YXRlQ29tcGxleCA9IChjb25kaXRpb246IENvbmRpdGlvbi5Db21wbGV4LCBmYWN0czogUmVhZG9ubHlBcnJheTxGYWN0Pik6IGJvb2xlYW4gPT4ge1xuICAgICAgICBpZiAoY29uZGl0aW9uLnNvbWUubGVuZ3RoID09PSAwICYmIGNvbmRpdGlvbi5hbGwubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYWxsU29sdmVkID0gY29uZGl0aW9uLmFsbC5tYXAoKGNvbmRpdGlvbikgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGV2YWx1YXRlU2ltcGxlKGNvbmRpdGlvbiwgZmFjdHMpO1xuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCBzb21lRXZhbHVhdGVkID0gY29uZGl0aW9uLnNvbWUubWFwKChjb25kaXRpb24pID0+IHtcbiAgICAgICAgICAgIHJldHVybiBldmFsdWF0ZVNpbXBsZShjb25kaXRpb24sIGZhY3RzKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IGFsbFJlc3VsdCA9IGFsbFNvbHZlZC5ldmVyeShEVXRpbC5pc1RydWUpO1xuICAgICAgICBjb25zdCBzb21lUmVzdWx0ID0gc29tZUV2YWx1YXRlZC5sZW5ndGggPT09IDAgfHwgc29tZUV2YWx1YXRlZC5zb21lKERVdGlsLmlzVHJ1ZSk7XG4gICAgICAgIHJldHVybiBzb21lUmVzdWx0ICYmIGFsbFJlc3VsdDtcbiAgICB9O1xuXG4gICAgY29uc3QgZXZhbHVhdGVTaW1wbGUgPSAoY29uZGl0aW9uOiBDb25kaXRpb24uU2ltcGxlLCBmYWN0czogUmVhZG9ubHlBcnJheTxGYWN0Pik6IGJvb2xlYW4gPT4ge1xuICAgICAgICBjb25zdCBmYWN0ID0gZmFjdHMuZmluZCgoZikgPT4gZi5yZWZlcmVuY2VJZCA9PT0gY29uZGl0aW9uLnJlZmVyZW5jZUlkKTtcbiAgICAgICAgaWYgKCFmYWN0KSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHJlcyA9IGZhbHNlO1xuICAgICAgICBzd2l0Y2ggKGNvbmRpdGlvbi5raW5kKSB7XG4gICAgICAgICAgICBjYXNlIFwibnVtZXJpYy1jb25kaXRpb25cIjpcbiAgICAgICAgICAgICAgICBpZiAoZmFjdC5raW5kID09PSBcIm51bWVyaWMtZmFjdFwiKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlcyA9IGV2YWx1YXRlTnVtZXJpYyhjb25kaXRpb24sIGZhY3QudmFsdWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJzdHJpbmctY29uZGl0aW9uXCI6XG4gICAgICAgICAgICAgICAgaWYgKGZhY3Qua2luZCA9PT0gXCJzdHJpbmctZmFjdFwiKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlcyA9IGV2YWx1YXRlU3RyaW5nKGNvbmRpdGlvbiwgZmFjdC52YWx1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICBjb25zdCBjaGVjazogbmV2ZXIgPSBjb25kaXRpb247XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9O1xuXG4gICAgZXhwb3J0IGNvbnN0IGlzRW1wdHkgPSAoY29tcGxleDogQ29tcGxleCkgPT4ge1xuICAgICAgICByZXR1cm4gY29tcGxleC5hbGwubGVuZ3RoID09PSAwICYmIGNvbXBsZXguc29tZS5sZW5ndGggPT09IDA7XG4gICAgfTtcblxuICAgIGNvbnN0IGV2YWx1YXRlU3RyaW5nID0gKGNvbmRpdGlvbjogUmVhZG9ubHk8Q29uZGl0aW9uLlN0cmluZz4sIHZhbHVlOiBzdHJpbmcpOiBib29sZWFuID0+IHtcbiAgICAgICAgY29uc3Qgb3BlcmF0b3IgPSBjb25kaXRpb24ub3BlcmF0b3I7XG4gICAgICAgIGxldCByZXN1bHQgPSBmYWxzZTtcbiAgICAgICAgc3dpdGNoIChvcGVyYXRvcikge1xuICAgICAgICAgICAgY2FzZSBcImVxXCI6XG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gY29uZGl0aW9uLnZhbHVlID09PSB2YWx1ZTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJub3QtZXFcIjpcbiAgICAgICAgICAgICAgICByZXN1bHQgPSBjb25kaXRpb24udmFsdWUgIT09IHZhbHVlO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcInNob3J0ZXItdGhlblwiOlxuICAgICAgICAgICAgICAgIHJlc3VsdCA9IGNvbmRpdGlvbi52YWx1ZSAhPT0gdmFsdWU7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwibG9uZ2VyLXRoZW5cIjpcbiAgICAgICAgICAgICAgICByZXN1bHQgPSBjb25kaXRpb24udmFsdWUgIT09IHZhbHVlO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICBjb25zdCBjaGVjazogbmV2ZXIgPSBvcGVyYXRvcjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH07XG5cbiAgICBjb25zdCBldmFsdWF0ZU51bWVyaWMgPSAoY29uZGl0aW9uOiBOdW1lcmljLCB2YWx1ZTogbnVtYmVyKTogYm9vbGVhbiA9PiB7XG4gICAgICAgIGNvbnN0IG9wID0gY29uZGl0aW9uLm9wZXJhdG9yO1xuICAgICAgICBjb25zdCBjb25kaXRpb25WYWx1ZSA9IGNvbmRpdGlvbi52YWx1ZTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IGZhbHNlO1xuICAgICAgICBzd2l0Y2ggKG9wKSB7XG4gICAgICAgICAgICBjYXNlIFwiZXFcIjpcbiAgICAgICAgICAgICAgICByZXN1bHQgPSB2YWx1ZSA9PT0gY29uZGl0aW9uVmFsdWU7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwibm90LWVxXCI6XG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gdmFsdWUgIT09IGNvbmRpdGlvblZhbHVlO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcImdyZWF0ZXItdGhlblwiOlxuICAgICAgICAgICAgICAgIHJlc3VsdCA9IHZhbHVlID4gY29uZGl0aW9uVmFsdWU7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwiZ3JlYXRlci10aGVuLWluY2x1c2l2ZVwiOlxuICAgICAgICAgICAgICAgIHJlc3VsdCA9IHZhbHVlID49IGNvbmRpdGlvblZhbHVlO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcImxlc3MtdGhlblwiOlxuICAgICAgICAgICAgICAgIHJlc3VsdCA9IHZhbHVlIDwgY29uZGl0aW9uVmFsdWU7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwibGVzcy10aGVuLWluY2x1c2l2ZVwiOlxuICAgICAgICAgICAgICAgIHJlc3VsdCA9IHZhbHVlIDw9IGNvbmRpdGlvblZhbHVlO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICBjb25zdCBjaGVjazogbmV2ZXIgPSBvcDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH07XG5cbiAgICBjb25zdCBfZ2V0QWxsU2ltcGxlID0gKGNvbmRpdGlvbjogQ29uZGl0aW9uKTogUmVhZG9ubHlBcnJheTxDb25kaXRpb24uU2ltcGxlPiA9PiB7XG4gICAgICAgIGNvbnN0IHNpbXBsZTogQXJyYXk8Q29uZGl0aW9uLlNpbXBsZT4gPSBbXTtcbiAgICAgICAgc3dpdGNoIChjb25kaXRpb24ua2luZCkge1xuICAgICAgICAgICAgY2FzZSBcImNvbXBsZXgtY29uZGl0aW9uXCI6XG4gICAgICAgICAgICAgICAgc2ltcGxlLnB1c2goLi4uY29uZGl0aW9uLmFsbCk7XG4gICAgICAgICAgICAgICAgc2ltcGxlLnB1c2goLi4uY29uZGl0aW9uLnNvbWUpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcIm51bWVyaWMtY29uZGl0aW9uXCI6XG4gICAgICAgICAgICAgICAgc2ltcGxlLnB1c2goY29uZGl0aW9uKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJzdHJpbmctY29uZGl0aW9uXCI6XG4gICAgICAgICAgICAgICAgc2ltcGxlLnB1c2goY29uZGl0aW9uKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgRFV0aWwubmV2ZXJDaGVjayhjb25kaXRpb24pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzaW1wbGU7XG4gICAgfTtcblxuICAgIGV4cG9ydCBjb25zdCBnZXRBbGxTaW1wbGVDb25kaXRpb25zID0gKFxuICAgICAgICBjb25kaXRpb246IENvbmRpdGlvbiB8IEFycmF5PENvbmRpdGlvbj5cbiAgICApOiBSZWFkb25seUFycmF5PENvbmRpdGlvbi5TaW1wbGU+ID0+IHtcbiAgICAgICAgY29uc3Qgc2ltcGxlOiBBcnJheTxDb25kaXRpb24uU2ltcGxlPiA9IFtdO1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShjb25kaXRpb24pKSB7XG4gICAgICAgICAgICBjb25kaXRpb24uZm9yRWFjaCgoYykgPT4ge1xuICAgICAgICAgICAgICAgIHNpbXBsZS5wdXNoKC4uLl9nZXRBbGxTaW1wbGUoYykpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzaW1wbGUucHVzaCguLi5fZ2V0QWxsU2ltcGxlKGNvbmRpdGlvbikpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzaW1wbGU7XG4gICAgfTtcbn1cbiIsICJpbXBvcnQgeyBDb25kaXRpb24gfSBmcm9tIFwiLi9jb25kaXRpb25cIjtcbmltcG9ydCB7IEZhY3QgfSBmcm9tIFwiLi9mYWN0XCI7XG5pbXBvcnQgeyBEVXRpbCB9IGZyb20gXCIuLi91dGlscy9EVXRpbFwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIFJ1bGU8T25TdWNjZXNzQWN0aW9uLCBPbkZhaWx1cmVBY3Rpb24+IHtcbiAgcmVhZG9ubHkgaWQ/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IGRlc2NyaXB0aW9uOiBzdHJpbmc7XG4gIHJlYWRvbmx5IGFsbDogUmVhZG9ubHlBcnJheTxDb25kaXRpb24+O1xuICByZWFkb25seSBzb21lOiBSZWFkb25seUFycmF5PENvbmRpdGlvbj47XG4gIHJlYWRvbmx5IG9uU3VjY2VzczogUmVhZG9ubHlBcnJheTxPblN1Y2Nlc3NBY3Rpb24+O1xuICByZWFkb25seSBvbkZhaWx1cmU6IFJlYWRvbmx5QXJyYXk8T25GYWlsdXJlQWN0aW9uPjtcbn1cblxuZXhwb3J0IG5hbWVzcGFjZSBSdWxlIHtcbiAgLyoqXG4gICAqIFZhbGlkYXRlcyB0aGF0IHRoZSBydWxlIGlzIHZhbGlkLlxuICAgKiBAcGFyYW0gcnVsZVxuICAgKi9cblxuICBleHBvcnQgY29uc3QgaXNFbXB0eSA9IChydWxlOiBSdWxlPGFueSwgYW55Pik6IGJvb2xlYW4gPT4ge1xuICAgIGNvbnN0IGVtcHR5Q29uZGl0aW9ucyA9IHJ1bGUuYWxsLmxlbmd0aCA9PT0gMCAmJiBydWxlLnNvbWUubGVuZ3RoID09PSAwO1xuICAgIGNvbnN0IGVtcHR5QWN0aW9ucyA9IHJ1bGUub25TdWNjZXNzLmxlbmd0aCA9PT0gMCAmJiBydWxlLm9uRmFpbHVyZS5sZW5ndGggPT09IDA7XG4gICAgcmV0dXJuIGVtcHR5Q29uZGl0aW9ucyB8fCBlbXB0eUFjdGlvbnM7XG4gIH07XG5cbiAgZXhwb3J0IGNvbnN0IHNvbHZlID0gKHJ1bGU6IFJ1bGU8YW55LCBhbnk+LCBmYWN0czogUmVhZG9ubHlBcnJheTxGYWN0Pik6IGJvb2xlYW4gPT4ge1xuICAgIGlmIChydWxlLnNvbWUubGVuZ3RoID09PSAwICYmIHJ1bGUuYWxsLmxlbmd0aCA9PT0gMCkge1xuICAgICAgLy8gVE9ETyBSRVRVUk4gV0FSTklORz8gT1IgTE9HR0lORyA/XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgY29uc3Qgc29tZVNvbHZlZCA9IHJ1bGUuc29tZS5tYXAoKGNvbmRpdGlvbikgPT4gQ29uZGl0aW9uLmV2YWx1YXRlKGNvbmRpdGlvbiwgZmFjdHMpKTtcblxuICAgIGNvbnN0IHNvbWVSZXN1bHQgPSBzb21lU29sdmVkLmxlbmd0aCA9PT0gMCB8fCBzb21lU29sdmVkLnNvbWUoRFV0aWwuaXNUcnVlKTtcblxuICAgIGNvbnN0IGFsbFNvbHZlZCA9IHJ1bGUuYWxsLm1hcCgoY29uZGl0aW9uKSA9PiBDb25kaXRpb24uZXZhbHVhdGUoY29uZGl0aW9uLCBmYWN0cykpLmV2ZXJ5KERVdGlsLmlzVHJ1ZSk7XG5cbiAgICByZXR1cm4gYWxsU29sdmVkICYmIHNvbWVSZXN1bHQ7XG4gIH07XG59XG4iLCAiaW1wb3J0IHsgRmFjdCB9IGZyb20gXCIuL2ZhY3RcIjtcbmltcG9ydCB7IFJ1bGUgfSBmcm9tIFwiLi9ydWxlXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgU29sdmVSZXN1bHQ8UywgRj4ge1xuICBtYXRjaGluZzogUmVhZG9ubHlBcnJheTxNYXRjaDxTLCBGPj47XG4gIGVycm9yczogUmVhZG9ubHlBcnJheTxSdWxlRW5naW5lRXJyb3I+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE1hdGNoPFMsIEY+IHtcbiAgcmVhZG9ubHkgbWF0Y2hpbmdSdWxlSWQ6IHN0cmluZztcbiAgcmVhZG9ubHkgcnVsZURlc2NyaXB0aW9uOiBzdHJpbmc7XG4gIHJlYWRvbmx5IGFjdGlvbkxpc3Q6IFJlYWRvbmx5QXJyYXk8Uz4gfCBSZWFkb25seUFycmF5PEY+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJ1bGVFbmdpbmVFcnJvciB7XG4gIHJlYWRvbmx5IGtpbmQ/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IG1lc3NhZ2U6IHN0cmluZztcbn1cblxuZXhwb3J0IGNsYXNzIFJ1bGVFbmdpbmU8UywgRj4ge1xuICBjb25zdHJ1Y3RvcigpIHt9XG5cbiAgc29sdmVBbGwocnVsZXM6IFJ1bGU8UywgRj5bXSwgZmFjdHM6IEZhY3RbXSk6IFNvbHZlUmVzdWx0PFMsIEY+IHtcbiAgICBjb25zdCBlcnJvcnM6IFJ1bGVFbmdpbmVFcnJvcltdID0gW107XG4gICAgY29uc3QgbWF0Y2hpbmc6IE1hdGNoPFMsIEY+W10gPSBbXTtcbiAgICBydWxlcy5mb3JFYWNoKChydWxlKSA9PiB7XG4gICAgICBpZiAoUnVsZS5pc0VtcHR5KHJ1bGUpKSB7XG4gICAgICAgIGVycm9ycy5wdXNoKHsgbWVzc2FnZTogXCJFbXB0eSBydWxlOiBcIiArIHJ1bGUuaWQgfSk7XG4gICAgICB9IGVsc2UgaWYgKFJ1bGUuc29sdmUocnVsZSwgZmFjdHMpKSB7XG4gICAgICAgIGNvbnN0IG1hdGNoOiBNYXRjaDxTLCBGPiA9IHtcbiAgICAgICAgICBydWxlRGVzY3JpcHRpb246IHJ1bGUuZGVzY3JpcHRpb24sXG4gICAgICAgICAgbWF0Y2hpbmdSdWxlSWQ6IHJ1bGUuaWQgPz8gXCJuby1pZC1naXZlblwiLFxuICAgICAgICAgIGFjdGlvbkxpc3Q6IFsuLi5ydWxlLm9uU3VjY2Vzc10sXG4gICAgICAgIH07XG4gICAgICAgIG1hdGNoaW5nLnB1c2gobWF0Y2gpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiB7IG1hdGNoaW5nLCBlcnJvcnMgfTtcbiAgfVxuXG4gIHNvbHZlKHJ1bGU6IFJ1bGU8UywgRj4sIGZhY3RzOiBGYWN0W10pOiBib29sZWFuIHtcbiAgICAvLyBUT0RPIFZhbGlkYXRlLCBhbmQgUmV0dXJuIHJlc3VsdFxuICAgIHJldHVybiBSdWxlLnNvbHZlKHJ1bGUsIGZhY3RzKTtcbiAgfVxufVxuIiwgImltcG9ydCB7IFBhZ2VEdG8gfSBmcm9tIFwiLi4vZHRvL1NjaGVtYUR0b1wiO1xuXG5leHBvcnQgY2xhc3MgTmV4dFF1ZSB7XG4gICAgcHJpdmF0ZSBvcmlnaW5hbE9yZGVyOiBSZWFkb25seUFycmF5PHN0cmluZz4gPSBbXTtcbiAgICBwcml2YXRlIGFsbFBhZ2VzOiBQYWdlRHRvW10gPSBbXTtcbiAgICBwcml2YXRlIGV4Y2x1ZGVkVGFncyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICAgIHByaXZhdGUgZXhjbHVkZWRCeVBhZ2VJZCA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICAgIHByaXZhdGUgcmVtYWluaW5nOiBQYWdlRHRvW10gPSBbXTtcbiAgICBjb25zdHJ1Y3RvcihwYWdlczogUGFnZUR0b1tdID0gW10pIHtcbiAgICAgICAgdGhpcy5yZXNldFF1ZShwYWdlcyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogV2lsbCByZXNldCBxdWUgd2l0aCB0aGUgbmV3IHBhZ2VzLlxuICAgICAqIEBwYXJhbSBwYWdlc1xuICAgICAqL1xuICAgIHJlc2V0UXVlKHBhZ2VzOiBQYWdlRHRvW10pIHtcbiAgICAgICAgdGhpcy5hbGxQYWdlcyA9IFsuLi5wYWdlc107XG4gICAgICAgIHRoaXMucmVtYWluaW5nID0gWy4uLnBhZ2VzXTtcbiAgICAgICAgdGhpcy5leGNsdWRlZFRhZ3MgPSBuZXcgU2V0KCk7XG4gICAgICAgIHRoaXMuZXhjbHVkZWRCeVBhZ2VJZCA9IG5ldyBTZXQoKTtcbiAgICAgICAgdGhpcy5vcmlnaW5hbE9yZGVyID0gdGhpcy5hbGxQYWdlcy5tYXAoKHApID0+IHAuaWQpO1xuICAgIH1cblxuICAgIHBvcCgpOiBQYWdlRHRvIHwgZmFsc2Uge1xuICAgICAgICBjb25zdCBuZXh0ID0gdGhpcy5yZW1haW5pbmcuc2hpZnQoKTtcbiAgICAgICAgLy8gVE9ETyBDTE9ORT8/XG4gICAgICAgIHJldHVybiBuZXh0ID8/IGZhbHNlO1xuICAgIH1cblxuICAgIHBlZWsoKTogUGFnZUR0byB8IGZhbHNlIHtcbiAgICAgICAgY29uc3QgbmV4dCA9IHRoaXMucmVtYWluaW5nWzBdO1xuICAgICAgICByZXR1cm4gbmV4dCA/PyBmYWxzZTtcbiAgICB9XG5cbiAgICBqdW1wVG9QYWdlQnlJZChwYWdlSWQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMucmVtYWluaW5nLmZpbmRJbmRleCgocCkgPT4gcC5pZCA9PT0gcGFnZUlkKTtcbiAgICAgICAgaWYgKGluZGV4IDwgMCkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucmVtYWluaW5nID0gdGhpcy5yZW1haW5pbmcuc2xpY2UoaW5kZXgpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICByZW1vdmVCeVRhZyh0YWc6IHN0cmluZyB8IHN0cmluZ1tdKSB7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHRhZykpIHtcbiAgICAgICAgICAgIHRhZy5mb3JFYWNoKCh0YWcpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmV4Y2x1ZGVkVGFncy5hZGQodGFnKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5leGNsdWRlZFRhZ3MuYWRkKHRhZyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5maWx0ZXJSZW1haW5pbmcoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBXaWxsIG5vdCBiZSBpbmNsdWRlZFxuICAgICAqIEBwYXJhbSBwYWdlc1xuICAgICAqL1xuICAgIGluc2VydEFzTmV4dEJ5Rm9yY2UocGFnZXM6IFBhZ2VEdG9bXSkge1xuICAgICAgICB0aGlzLnJlbWFpbmluZy51bnNoaWZ0KC4uLnBhZ2VzKTtcbiAgICB9XG5cbiAgICByZW1vdmVCeVBhZ2VJZChwYWdlSWQ6IHN0cmluZyB8IHN0cmluZ1tdKSB7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHBhZ2VJZCkpIHtcbiAgICAgICAgICAgIHBhZ2VJZC5mb3JFYWNoKChpZCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuZXhjbHVkZWRCeVBhZ2VJZC5hZGQoaWQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmV4Y2x1ZGVkQnlQYWdlSWQuYWRkKHBhZ2VJZCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5maWx0ZXJSZW1haW5pbmcoKTtcbiAgICAgICAgLy8gdGhpcy5leGNsdWRlZEJ5UGFnZUlkLmFkZChwYWdlSWQpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZmlsdGVyUmVtYWluaW5nKCkge1xuICAgICAgICB0aGlzLnJlbWFpbmluZyA9IHRoaXMucmVtYWluaW5nLmZpbHRlcigocCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgdGFncyA9IHAudGFncyA/PyBbXTtcbiAgICAgICAgICAgIGNvbnN0IGlzSW5jbHVlZGVkQnlUYWcgPSAhdGFncy5zb21lKCh0YWcpID0+IHRoaXMuZXhjbHVkZWRUYWdzLmhhcyh0YWcpKTtcbiAgICAgICAgICAgIGNvbnN0IGlzSW5jbHVkZWRCeVBhZ2VJZCA9ICF0aGlzLmV4Y2x1ZGVkQnlQYWdlSWQuaGFzKHAuaWQpO1xuICAgICAgICAgICAgcmV0dXJuIGlzSW5jbHVkZWRCeVBhZ2VJZCAmJiBpc0luY2x1ZWRlZEJ5VGFnO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgZ2V0IGlzRW1wdHkoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlbWFpbmluZy5sZW5ndGggPT09IDA7XG4gICAgfVxuICAgIGdldCBzaXplKCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlbWFpbmluZy5sZW5ndGg7XG4gICAgfVxuICAgIGdldCBwYWdlQ291bnQoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3JpZ2luYWxPcmRlci5sZW5ndGg7XG4gICAgfVxufVxuIiwgImltcG9ydCB7IEFuc3dlcmVkUXVlc3Rpb24sIEhpc3RvcnlRdWUsIFBhZ2VIaXN0b3J5IH0gZnJvbSBcIi4vaGlzdG9yeS1xdWVcIjtcbmltcG9ydCB7IFJ1bGVFbmdpbmUgfSBmcm9tIFwiLi4vcnVsZXMvcnVsZS1lbmdpbmVcIjtcbmltcG9ydCB7IE5leHRRdWUgfSBmcm9tIFwiLi9uZXh0LXF1ZVwiO1xuaW1wb3J0IHsgUGFnZUR0bywgU2NoZW1hRHRvIH0gZnJvbSBcIi4uL2R0by9TY2hlbWFEdG9cIjtcbmltcG9ydCB7IE5hdmlnYXRpb25Db21tYW5kLCBQYWdlUXVlQ29tbWFuZCB9IGZyb20gXCIuLi9jb21tYW5kcy9EQ29tbWFuZFwiO1xuaW1wb3J0IHsgRFV0aWwgfSBmcm9tIFwiLi4vdXRpbHMvRFV0aWxcIjtcblxuZXhwb3J0IHR5cGUgRFBsYXllckRhdGEgPSBQaWNrPFNjaGVtYUR0bywgXCJwYWdlc1wiIHwgXCJwYWdlU2VxdWVuY2VzXCIgfCBcInJ1bGVzXCI+O1xuZXhwb3J0IGNsYXNzIERQbGF5ZXIge1xuICBwcml2YXRlIGhpc3RvcnkgPSBuZXcgSGlzdG9yeVF1ZSgpO1xuICBwcml2YXRlIHJ1bGVFbmdpbmUgPSBuZXcgUnVsZUVuZ2luZTxQYWdlUXVlQ29tbWFuZCwgUGFnZVF1ZUNvbW1hbmQ+KCk7XG4gIHByaXZhdGUgbmV4dFF1ZSA9IG5ldyBOZXh0UXVlKCk7XG4gIHByaXZhdGUgZGF0YTogRFBsYXllckRhdGE7XG5cbiAgY29uc3RydWN0b3IoZGF0YTogRFBsYXllckRhdGEpIHtcbiAgICB0aGlzLmRhdGEgPSBkYXRhO1xuICAgIHRoaXMubmV4dFF1ZS5yZXNldFF1ZShkYXRhLnBhZ2VzKTtcbiAgfVxuXG4gIHNhdmVIaXN0b3J5KHBhZ2VIaXN0b3J5OiBQYWdlSGlzdG9yeSkge1xuICAgIGNvbnNvbGUubG9nKFwiU0FWRSBISVNUT1JZXCIsIHBhZ2VIaXN0b3J5KTtcbiAgICB0aGlzLmhpc3RvcnkuYWRkVG9IaXN0b3J5KHBhZ2VIaXN0b3J5KTtcbiAgICBjb25zdCBmYWN0cyA9IHRoaXMuaGlzdG9yeS5nZXRGYWN0cygpO1xuICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMucnVsZUVuZ2luZS5zb2x2ZUFsbCh0aGlzLmRhdGEucnVsZXMsIGZhY3RzKTtcbiAgICBjb25zdCBtYXRjaGluZ1J1bGVzID0gcmVzdWx0Lm1hdGNoaW5nO1xuICAgIGNvbnN0IGFjdGlvbnMgPSBtYXRjaGluZ1J1bGVzLm1hcCgocikgPT4gci5hY3Rpb25MaXN0KS5mbGF0KDEpO1xuICAgIGFjdGlvbnMuZm9yRWFjaCgoYSkgPT4ge1xuICAgICAgY29uc29sZS5sb2coYS5wYXlsb2FkKTtcbiAgICAgIHN3aXRjaCAoYS5raW5kKSB7XG4gICAgICAgIGNhc2UgXCJQQUdFX1FVRV9KVU1QX1RPX1BBR0VfQ09NTUFORFwiOlxuICAgICAgICAgIHRoaXMubmV4dFF1ZS5qdW1wVG9QYWdlQnlJZChhLnBheWxvYWQucGFnZUlkKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIlBBR0VfUVVFX0VYQ0xVREVfQllfUEFHRV9JRF9DT01NQU5EXCI6XG4gICAgICAgICAgdGhpcy5uZXh0UXVlLnJlbW92ZUJ5UGFnZUlkKGEucGF5bG9hZC5wYWdlSWRzKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIlBBR0VfUVVFX0VYQ0xVREVfQllfVEFHX0NPTU1BTkRcIjpcbiAgICAgICAgICB0aGlzLm5leHRRdWUucmVtb3ZlQnlUYWcoYS5wYXlsb2FkLnRhZ0lkcyk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgY29uc29sZS5sb2coXCJVTktOT1dOIEFDVElPTlwiLCBhKTtcbiAgICAgICAgICBjb25zdCBjaGVjazogbmV2ZXIgPSBhO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGNvbnNvbGUubG9nKGFjdGlvbnMpO1xuICB9XG5cbiAgZ2V0UmVzdWx0cygpOiBBbnN3ZXJlZFF1ZXN0aW9uW10ge1xuICAgIHJldHVybiB0aGlzLmhpc3RvcnkuZ2V0QW5zd2VycygpO1xuICB9XG5cbiAgcHJpdmF0ZSBnb1RvUGFnZUJ5SWQocGFnZUlkOiBzdHJpbmcpIHtcbiAgICB0aGlzLm5leHRRdWUuanVtcFRvUGFnZUJ5SWQocGFnZUlkKTtcbiAgfVxuXG4gIGhhbmRsZU5hdmlnYXRpb25Db21tYW5kKGNvbW1hbmQ6IE5hdmlnYXRpb25Db21tYW5kKSB7XG4gICAgc3dpdGNoIChjb21tYW5kLmtpbmQpIHtcbiAgICAgIGNhc2UgXCJQQUdFX1FVRV9ORVhUX1BBR0VfQ09NTUFORFwiOlxuICAgICAgICAvLyBOTyBORUVEIFRPIERPIEFOWVRISU5HXG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcIlBBR0VfUVVFX0dPX1RPX1BBR0VfQ09NTUFORFwiOlxuICAgICAgICB0aGlzLmdvVG9QYWdlQnlJZChjb21tYW5kLnBheWxvYWQucGFnZUlkKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwiUEFHRV9RVUVfR09fVE9fU0VRVUVOQ0VfQ09NTUFORFwiOlxuICAgICAgICB0aGlzLmluc2VydFNlcXVlbmNlQnlJZChjb21tYW5kLnBheWxvYWQuc2VxdWVuY2VJZCk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICBEVXRpbC5uZXZlckNoZWNrKGNvbW1hbmQpO1xuICAgIH1cbiAgfVxuXG4gIGdldE5leHRQYWdlKCk6IFBhZ2VEdG8gfCBmYWxzZSB7XG4gICAgLy8gVE9ETyBIQU5ETEUgUlVMRVMhIVxuICAgIHJldHVybiB0aGlzLm5leHRRdWUucG9wKCk7XG4gIH1cblxuICBwcml2YXRlIGluc2VydFNlcXVlbmNlQnlJZChpZDogc3RyaW5nKSB7XG4gICAgY29uc3Qgc2VxID0gdGhpcy5kYXRhLnBhZ2VTZXF1ZW5jZXM/LmZpbmQoKHMpID0+IHMuaWQgPT09IGlkKTtcbiAgICBpZiAoc2VxKSB7XG4gICAgICB0aGlzLm5leHRRdWUuaW5zZXJ0QXNOZXh0QnlGb3JjZShbLi4uc2VxLnBhZ2VzXSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIEhPVyBUTyBIQU5ETEUgSU5WQUxJRCBJRF9SRUZTPz8gTE9HR0VSPz9cbiAgICAgIC8vIExPRyBJTlZBTElEIENPTU1BTkQuXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFRvdGFsIG51bWJlciBvZiBwYWdlcy5cbiAgICovXG4gIGdldCBwYWdlQ291bnQoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5uZXh0UXVlLnBhZ2VDb3VudDtcbiAgfVxufVxuIiwgImltcG9ydCB7IERDb21tYW5kLCBFbGVtZW50Q29tbWFuZCwgU3RhdGVDb21tYW5kIH0gZnJvbSBcIi4uL2NvbW1hbmRzL0RDb21tYW5kXCI7XG5pbXBvcnQgeyBERXZlbnQgfSBmcm9tIFwiLi4vZXZlbnRzL0RFdmVudHNcIjtcbmltcG9ydCB7IENvbmRpdGlvbiB9IGZyb20gXCIuLi9ydWxlcy9jb25kaXRpb25cIjtcblxuZXhwb3J0IGludGVyZmFjZSBERXZlbnRIYW5kbGVyPEUgZXh0ZW5kcyBERXZlbnQgPSBERXZlbnQ+IHtcbiAgICByZWFkb25seSBvbkV2ZW50OiBFW1wia2luZFwiXTtcbiAgICByZWFkb25seSB3aGVuPzogeyBwcm9kdWNlcklkPzogc3RyaW5nOyBjb25kaXRpb24/OiBDb25kaXRpb24gfTtcbiAgICByZWFkb25seSB0aGVuRXhlY3V0ZTogUmVhZG9ubHlBcnJheTxEQ29tbWFuZD47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUXVlcnlDaGFuZ2VkSGFuZGxlciB7XG4gICAgcmVhZG9ubHkgcXVlcnlOYW1lOiBzdHJpbmc7XG4gICAgcmVhZG9ubHkgd2hlblRydWU6IFJlYWRvbmx5QXJyYXk8RWxlbWVudENvbW1hbmQ+O1xuICAgIHJlYWRvbmx5IHdoZW5GYWxzZTogUmVhZG9ubHlBcnJheTxFbGVtZW50Q29tbWFuZD47XG59XG5cbmV4cG9ydCBuYW1lc3BhY2UgREV2ZW50SGFuZGxlciB7XG4gICAgZXhwb3J0IHR5cGUgTG9va1VwID0gTWFwPERFdmVudEhhbmRsZXJbXCJvbkV2ZW50XCJdLCBBcnJheTxERXZlbnRIYW5kbGVyPj47XG4gICAgZXhwb3J0IGNvbnN0IGNyZWF0ZUxvb2tVcCA9IChoYW5kbGVycz86IFJlYWRvbmx5QXJyYXk8REV2ZW50SGFuZGxlcj4pOiBMb29rVXAgPT4ge1xuICAgICAgICBjb25zdCBtYXAgPSBuZXcgTWFwPERFdmVudEhhbmRsZXJbXCJvbkV2ZW50XCJdLCBBcnJheTxERXZlbnRIYW5kbGVyPj4oKTtcbiAgICAgICAgaGFuZGxlcnM/LmZvckVhY2goKGgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGtpbmQgPSBoLm9uRXZlbnQ7XG4gICAgICAgICAgICBjb25zdCBjdXJyZW50ID0gbWFwLmdldChraW5kKTtcbiAgICAgICAgICAgIGNvbnN0IGFjdGlvbnMgPSBjdXJyZW50ID8gWy4uLmN1cnJlbnQsIGhdIDogW2hdO1xuICAgICAgICAgICAgbWFwLnNldChraW5kLCBhY3Rpb25zKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBtYXA7XG4gICAgfTtcbn1cbiIsICJpbXBvcnQgeyBEU3R5bGUgfSBmcm9tIFwiLi9EU3R5bGVcIjtcbmltcG9ydCB7IERFbGVtZW50QmFzZUR0byB9IGZyb20gXCIuLi9kdG8vREVsZW1lbnQuZHRvXCI7XG5pbXBvcnQgeyBEQ29tbWFuZCwgRWxlbWVudENvbW1hbmQgfSBmcm9tIFwiLi4vY29tbWFuZHMvRENvbW1hbmRcIjtcbmltcG9ydCB7IERDb21tYW5kQnVzIH0gZnJvbSBcIi4uL2NvbW1hbmRzL0RDb21tYW5kQnVzXCI7XG5pbXBvcnQgeyBERXZlbnRIYW5kbGVyIH0gZnJvbSBcIi4uL2V2ZW50LWhhbmRsZXJzL0RFdmVudEhhbmRsZXJcIjtcbmltcG9ydCB7IERVdGlsIH0gZnJvbSBcIi4uL3V0aWxzL0RVdGlsXCI7XG5pbXBvcnQgeyBFdmVudEJ1cyB9IGZyb20gXCIuLi9ldmVudHMvZXZlbnQtYnVzXCI7XG5pbXBvcnQgeyBEVGltZXN0YW1wIH0gZnJvbSBcIi4uL2NvbW1vbi9EVGltZXN0YW1wXCI7XG5pbXBvcnQgeyBBbmltYXRpb25EdG8gfSBmcm9tIFwiLi4vZHRvL0FuaW1hdGlvbkR0b1wiO1xuaW1wb3J0IHsgU2NhbGVTZXJ2aWNlIH0gZnJvbSBcIi4uL2VuZ2luZS9zY2FsZVwiO1xuaW1wb3J0IHsgRFN0YXRlIH0gZnJvbSBcIi4uL3N0YXRlL0RzdGF0ZVwiO1xuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgREVsZW1lbnQ8VCBleHRlbmRzIEhUTUxFbGVtZW50PiB7XG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IGVsOiBUO1xuICAgIHByaXZhdGUgY2xpY2tIYW5kbGVySXNFbmFibGVkID0gdHJ1ZTtcbiAgICByZWFkb25seSBpZDogc3RyaW5nO1xuICAgIHByaXZhdGUgaXNBbmltYXRpbmdTZWxmID0gZmFsc2U7XG4gICAgcHJvdGVjdGVkIGN1cnJTdHlsZTogUGFydGlhbDxEU3R5bGU+ID0ge1xuICAgICAgICBmb250U2l6ZTogeyBfdW5pdDogXCJweFwiLCB2YWx1ZTogMTAwIH0sXG4gICAgICAgIGZvbnRXZWlnaHQ6IDUwMCxcbiAgICAgICAgdGV4dENvbG9yOiBcImJsYWNrXCIsXG4gICAgICAgIG9wYWNpdHk6IDEsXG4gICAgfTtcblxuICAgIC8vIHByaXZhdGUgcmVhZG9ubHkgb25RdWVyeUNoYW5nZWRIYW5kbGVycyA9XG4gICAgcHJpdmF0ZSByZWFkb25seSBldmVudEhhbmRsZXJzOiBERXZlbnRIYW5kbGVyLkxvb2tVcDtcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgY29tbWFuZEJ1czogRENvbW1hbmRCdXM7XG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IGV2ZW50QnVzOiBFdmVudEJ1cztcbiAgICBwcm90ZWN0ZWQgc2NhbGU6IFNjYWxlU2VydmljZTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGJhc2VEdG86IERFbGVtZW50QmFzZUR0bztcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgc3Vic2NyaXB0aW9ucyA9IG5ldyBTZXQ8KCkgPT4gdm9pZD4oKTtcblxuICAgIHByb3RlY3RlZCBjb25zdHJ1Y3RvcihcbiAgICAgICAgZWw6IFQsXG4gICAgICAgIGV2ZW50QnVzOiBFdmVudEJ1cyxcbiAgICAgICAgY29tbWFuZEJ1czogRENvbW1hbmRCdXMsXG4gICAgICAgIGR0bzogREVsZW1lbnRCYXNlRHRvLFxuICAgICAgICBzY2FsZTogU2NhbGVTZXJ2aWNlXG4gICAgKSB7XG4gICAgICAgIHRoaXMuZWwgPSBlbDtcbiAgICAgICAgdGhpcy5pZCA9IGR0by5pZDtcbiAgICAgICAgdGhpcy5iYXNlRHRvID0gZHRvO1xuICAgICAgICAvLyB0aGlzLmVsLnN0eWxlLnBvc2l0aW9uID0gXCJhYnNvbHV0ZVwiO1xuICAgICAgICB0aGlzLmNvbW1hbmRCdXMgPSBjb21tYW5kQnVzO1xuICAgICAgICB0aGlzLmV2ZW50QnVzID0gZXZlbnRCdXM7XG4gICAgICAgIHRoaXMuZXZlbnRIYW5kbGVycyA9IERFdmVudEhhbmRsZXIuY3JlYXRlTG9va1VwKGR0by5ldmVudEhhbmRsZXJzKTtcbiAgICAgICAgdGhpcy5zY2FsZSA9IHNjYWxlO1xuICAgICAgICAvLyBDTElDS1xuICAgICAgICB0aGlzLm9uQ2xpY2tIYW5kbGVyID0gdGhpcy5vbkNsaWNrSGFuZGxlci5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLmVsLm9uY2xpY2sgPSB0aGlzLm9uQ2xpY2tIYW5kbGVyO1xuXG4gICAgICAgIC8vIEhPVkVSXG4gICAgICAgIHRoaXMub25Nb3VzZU92ZXIgPSB0aGlzLm9uTW91c2VPdmVyLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuZWwub25tb3VzZW92ZXIgPSB0aGlzLm9uTW91c2VPdmVyO1xuXG4gICAgICAgIGlmIChkdG8pIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlU3R5bGVzKGR0bz8uc3R5bGUpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNvbW1hbmRTdWJzY3JpcHRpb24gPSB0aGlzLmNvbW1hbmRCdXMuc3Vic2NyaWJlKChjKSA9PiB7XG4gICAgICAgICAgICBpZiAoYy5raW5kID09PSBcIkVMRU1FTlRfU1RZTEVfQ09NTUFORFwiICYmIGMudGFyZ2V0SWQgPT09IHRoaXMuaWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN0eWxlKGMucGF5bG9hZC5jaGFuZ2VzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChjLmtpbmQgPT09IFwiRUxFTUVOVF9ESVNBQkxFX0NMSUNLX0NPTU1BTkRcIiAmJiBjLnRhcmdldElkID09PSB0aGlzLmlkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jbGlja0hhbmRsZXJJc0VuYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChjLmtpbmQgPT09IFwiRUxFTUVOVF9FTkFCTEVfQ0xJQ0tfQ09NTUFORFwiICYmIGMudGFyZ2V0SWQgPT09IHRoaXMuaWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNsaWNrSGFuZGxlcklzRW5hYmxlZCA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoYy5raW5kID09PSBcIkVMRU1FTlRfQU5JTUFURV9DT01NQU5EXCIgJiYgYy50YXJnZXRJZCA9PT0gdGhpcy5pZCkge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiVE9ETyBJTVBMRU1FTlQgQU5JTUFUSU9OX0hBTkRMRVIgSU4gREVsZW1lbnQuXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LCB0aGlzLmlkKTtcbiAgICAgICAgLy8gVE9ETyBNRU1PUlkgTEVBS1xuICAgICAgICBjb25zdCBldmVudFN1YnNjcmlwdGlvbiA9IHRoaXMuZXZlbnRCdXMuc3Vic2NyaWJlKChldmVudCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgaGFuZGxlcnMgPSB0aGlzLmV2ZW50SGFuZGxlcnMuZ2V0KGV2ZW50LmtpbmQpID8/IFtdO1xuICAgICAgICAgICAgLy8gVE9ETyBBcHBseSBDb25kaXRpb25zIGluIFdIRU4uXG4gICAgICAgICAgICBjb25zdCBjb21tYW5kcyA9IGhhbmRsZXJzLm1hcCgoaCkgPT4gaC50aGVuRXhlY3V0ZSkuZmxhdCgxKTtcbiAgICAgICAgICAgIGNvbW1hbmRzLmZvckVhY2goKGNvbW1hbmQpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbW1hbmRCdXMuZW1pdChjb21tYW5kKTtcbiAgICAgICAgICAgICAgICAvLyB0aGlzLmRvQWN0aW9uKGNvbW1hbmQpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGlmIChldmVudC5raW5kID09PSBcIkhPU1RfU0NBTEVfQ0hBTkdFRF9FVkVOVFwiKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJIQU5ETEUgVEhJUyBTQ0FMRSBDSEFOR0UhIVwiKTtcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVN0eWxlcyh7fSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChldmVudC5raW5kID09PSBcIlNUQVRFX1FVRVJZX1JFU1VMVF9DSEFOR0VEX0VWRU5UXCIpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnF1ZXJ5Q2hhbmdlZEhhbmRsZXIoZXZlbnQuZGF0YSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sIFwiRUxFTUVOVDogXCIpO1xuICAgICAgICB0aGlzLm5vcm1hbGl6ZSgpO1xuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMuYWRkKGNvbW1hbmRTdWJzY3JpcHRpb24pO1xuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMuYWRkKGV2ZW50U3Vic2NyaXB0aW9uKTtcbiAgICB9XG5cbiAgICBhYnN0cmFjdCBkZXN0cm95KCk6IHZvaWQ7XG5cbiAgICAvLyBhYnN0cmFjdCBzZXRTY2FsZShzY2FsZTogbnVtYmVyKTogdm9pZDtcblxuICAgIC8vIC8qKlxuICAgIC8vICAqIFRoZSBwdXJwb3NlIG9mIHRoaXMgZnVuY3Rpb24gaXMgdG8gcmUtZW1pdCBjb21tYW5kcyBmcm9tIGV2ZW50LWhhbmRsZXJzP1xuICAgIC8vICAqIEBwYXJhbSBjb21tYW5kXG4gICAgLy8gICogQHByaXZhdGVcbiAgICAvLyAgKi9cbiAgICAvLyBwcml2YXRlIGhhbmRsZUNvbW1hbmRzRW1pdHRlZEJ5UHJpdmF0ZUV2ZW50SGFuZGxlcnMoY29tbWFuZDogRENvbW1hbmQpIHtcbiAgICAvLyAgICAgY29uc29sZS5sb2coY29tbWFuZCk7XG4gICAgLy8gICAgIHN3aXRjaCAoY29tbWFuZC5raW5kKSB7XG4gICAgLy8gICAgICAgICBjYXNlIFwiRUxFTUVOVF9TVFlMRV9DT01NQU5EXCI6XG4gICAgLy8gICAgICAgICAgICAgaWYgKGNvbW1hbmQudGFyZ2V0SWQgPT09IHRoaXMuaWQpIHtcbiAgICAvLyAgICAgICAgICAgICAgICAgdGhpcy51cGRhdGVTdHlsZXMoY29tbWFuZC5wYXlsb2FkLmNoYW5nZXMpO1xuICAgIC8vICAgICAgICAgICAgIH1cbiAgICAvLyAgICAgICAgICAgICBicmVhaztcbiAgICAvLyAgICAgICAgIGNhc2UgXCJFTEVNRU5UX0FOSU1BVEVfQ09NTUFORFwiOlxuICAgIC8vICAgICAgICAgICAgIC8vIFRPRE8gQ0hFQ0sgRk9SIFRBUkdFVCBJRFxuICAgIC8vICAgICAgICAgICAgIHRoaXMuaGFuZGxlQW5pbWF0ZVNlbGZBY3Rpb24oY29tbWFuZC5wYXlsb2FkKTtcbiAgICAvLyAgICAgICAgICAgICBicmVhaztcbiAgICAvLyAgICAgICAgIGNhc2UgXCJFTEVNRU5UX0VOQUJMRV9DTElDS19DT01NQU5EXCI6XG4gICAgLy8gICAgICAgICAgICAgdGhpcy5jbGlja0hhbmRsZXJJc0VuYWJsZWQgPSB0cnVlO1xuICAgIC8vICAgICAgICAgICAgIC8vIHRoaXMudXBkYXRlU3R5bGVzKGNvbW1hbmQucGF5bG9hZC5jaGFuZ2VzKTtcbiAgICAvLyAgICAgICAgICAgICBicmVhaztcbiAgICAvLyAgICAgICAgIGNhc2UgXCJFTEVNRU5UX0RJU0FCTEVfQ0xJQ0tfQ09NTUFORFwiOlxuICAgIC8vICAgICAgICAgICAgIHRoaXMuY2xpY2tIYW5kbGVySXNFbmFibGVkID0gZmFsc2U7XG4gICAgLy8gICAgICAgICAgICAgLy8gdGhpcy5oYW5kbGVBbmltYXRlU2VsZkFjdGlvbihjb21tYW5kLnBheWxvYWQpO1xuICAgIC8vICAgICAgICAgICAgIGJyZWFrO1xuICAgIC8vICAgICAgICAgY2FzZSBcIlZJREVPX1BMQVlfQ09NTUFORFwiOlxuICAgIC8vICAgICAgICAgICAgIHRoaXMuY29tbWFuZEJ1cy5lbWl0KGNvbW1hbmQpO1xuICAgIC8vICAgICAgICAgICAgIGJyZWFrO1xuICAgIC8vICAgICAgICAgY2FzZSBcIlZJREVPX1BBVVNFX0NPTU1BTkRcIjpcbiAgICAvLyAgICAgICAgICAgICB0aGlzLmNvbW1hbmRCdXMuZW1pdChjb21tYW5kKTtcbiAgICAvLyAgICAgICAgICAgICBicmVhaztcbiAgICAvLyAgICAgICAgIGNhc2UgXCJFTkdJTkVfTEVBVkVfUEFHRV9DT01NQU5EXCI6XG4gICAgLy8gICAgICAgICAgICAgdGhpcy5jb21tYW5kQnVzLmVtaXQoY29tbWFuZCk7XG4gICAgLy8gICAgICAgICAgICAgYnJlYWs7XG4gICAgLy8gICAgICAgICBjYXNlIFwiVklERU9fSlVNUF9UT19DT01NQU5EXCI6XG4gICAgLy8gICAgICAgICAgICAgdGhpcy5jb21tYW5kQnVzLmVtaXQoY29tbWFuZCk7XG4gICAgLy8gICAgICAgICAgICAgYnJlYWs7XG4gICAgLy8gICAgICAgICBjYXNlIFwiVklERU9fU0VUX1ZPTFVNRV9DT01NQU5EXCI6XG4gICAgLy8gICAgICAgICAgICAgdGhpcy5jb21tYW5kQnVzLmVtaXQoY29tbWFuZCk7XG4gICAgLy8gICAgICAgICAgICAgYnJlYWs7XG4gICAgLy8gICAgICAgICBjYXNlIFwiQVVESU9fUExBWV9DT01NQU5EXCI6XG4gICAgLy8gICAgICAgICAgICAgdGhpcy5jb21tYW5kQnVzLmVtaXQoY29tbWFuZCk7XG4gICAgLy8gICAgICAgICAgICAgYnJlYWs7XG4gICAgLy8gICAgICAgICBjYXNlIFwiQVVESU9fUEFVU0VfQ09NTUFORFwiOlxuICAgIC8vICAgICAgICAgICAgIHRoaXMuY29tbWFuZEJ1cy5lbWl0KGNvbW1hbmQpO1xuICAgIC8vICAgICAgICAgICAgIGJyZWFrO1xuICAgIC8vICAgICAgICAgY2FzZSBcIkFVRElPX1NFVF9WT0xVTUVfQ09NTUFORFwiOlxuICAgIC8vICAgICAgICAgICAgIHRoaXMuY29tbWFuZEJ1cy5lbWl0KGNvbW1hbmQpO1xuICAgIC8vICAgICAgICAgICAgIGJyZWFrO1xuICAgIC8vICAgICAgICAgY2FzZSBcIlBBR0VfUVVFX05FWFRfUEFHRV9DT01NQU5EXCI6XG4gICAgLy8gICAgICAgICAgICAgdGhpcy5jb21tYW5kQnVzLmVtaXQoY29tbWFuZCk7XG4gICAgLy8gICAgICAgICAgICAgYnJlYWs7XG4gICAgLy8gICAgICAgICBjYXNlIFwiUEFHRV9RVUVfR09fVE9fU0VRVUVOQ0VfQ09NTUFORFwiOlxuICAgIC8vICAgICAgICAgICAgIHRoaXMuY29tbWFuZEJ1cy5lbWl0KGNvbW1hbmQpO1xuICAgIC8vICAgICAgICAgICAgIGJyZWFrO1xuICAgIC8vICAgICAgICAgY2FzZSBcIlBBR0VfUVVFX0dPX1RPX1BBR0VfQ09NTUFORFwiOlxuICAgIC8vICAgICAgICAgICAgIHRoaXMuY29tbWFuZEJ1cy5lbWl0KGNvbW1hbmQpO1xuICAgIC8vICAgICAgICAgICAgIGJyZWFrO1xuICAgIC8vICAgICAgICAgY2FzZSBcIlBBR0VfUVVFX0VYQ0xVREVfQllfUEFHRV9JRF9DT01NQU5EXCI6XG4gICAgLy8gICAgICAgICAgICAgdGhpcy5jb21tYW5kQnVzLmVtaXQoY29tbWFuZCk7XG4gICAgLy8gICAgICAgICAgICAgYnJlYWs7XG4gICAgLy8gICAgICAgICBjYXNlIFwiUEFHRV9RVUVfSlVNUF9UT19QQUdFX0NPTU1BTkRcIjpcbiAgICAvLyAgICAgICAgICAgICB0aGlzLmNvbW1hbmRCdXMuZW1pdChjb21tYW5kKTtcbiAgICAvLyAgICAgICAgICAgICBicmVhaztcbiAgICAvLyAgICAgICAgIGNhc2UgXCJQQUdFX1FVRV9FWENMVURFX0JZX1RBR19DT01NQU5EXCI6XG4gICAgLy8gICAgICAgICAgICAgdGhpcy5jb21tYW5kQnVzLmVtaXQoY29tbWFuZCk7XG4gICAgLy8gICAgICAgICAgICAgYnJlYWs7XG4gICAgLy8gICAgICAgICBjYXNlIFwiU1RBVEVfTVVUQVRFX0NPTU1BTkRcIjpcbiAgICAvLyAgICAgICAgICAgICB0aGlzLmNvbW1hbmRCdXMuZW1pdChjb21tYW5kKTtcbiAgICAvLyAgICAgICAgICAgICBicmVhaztcbiAgICAvLyAgICAgICAgIGRlZmF1bHQ6XG4gICAgLy8gICAgICAgICAgICAgRFV0aWwubmV2ZXJDaGVjayhjb21tYW5kKTtcbiAgICAvLyAgICAgfVxuICAgIC8vIH1cblxuICAgIHByaXZhdGUgcXVlcnlDaGFuZ2VkSGFuZGxlcihyZXN1bHQ6IERTdGF0ZS5TdGF0ZVF1ZXJ5UmVzdWx0KSB7XG4gICAgICAgIGNvbnN0IG1heWJlSGFuZGxlcnMgPSB0aGlzLmJhc2VEdG8ub25TdGF0ZUNoYW5nZTtcbiAgICAgICAgaWYgKCFtYXliZUhhbmRsZXJzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcXVlcnlIYW5kbGVycyA9IG1heWJlSGFuZGxlcnMuZmlsdGVyKChoKSA9PiBoLnF1ZXJ5TmFtZSA9PT0gcmVzdWx0LnF1ZXJ5TmFtZSk7XG4gICAgICAgIHF1ZXJ5SGFuZGxlcnMuZm9yRWFjaCgoaCkgPT4ge1xuICAgICAgICAgICAgaWYgKHJlc3VsdC5jdXJyKSB7XG4gICAgICAgICAgICAgICAgaC53aGVuVHJ1ZS5mb3JFYWNoKChjb21tYW5kKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIC8vIHRoaXMuZG9BY3Rpb24oY29tbWFuZCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY29tbWFuZEJ1cy5lbWl0KGNvbW1hbmQpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBoLndoZW5GYWxzZS5mb3JFYWNoKChjb21tYW5kKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIC8vIHRoaXMuZG9BY3Rpb24oY29tbWFuZCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY29tbWFuZEJ1cy5lbWl0KGNvbW1hbmQpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgLy8gY29uc29sZS5sb2coZmluZEJ5UXVlcnksIHZhbHVlKTtcbiAgICAgICAgLy8gY29uc3QgYWxsID0gdGhpcy5iYXNlRHRvLnN0YXRlUXVlcnlDaGFuZ2UgPz8gW107XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBvbkNsaWNrSGFuZGxlcihfOiBNb3VzZUV2ZW50KSB7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKCk7XG4gICAgICAgIGlmICghdGhpcy5jbGlja0hhbmRsZXJJc0VuYWJsZWQpIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKHRoaXMuaWQgKyBcIkNsaWNrIGRpc2FibGVkXCIpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNsaWNrQWN0aW9uID0gdGhpcy5iYXNlRHRvLm9uQ2xpY2s7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKFwiTkFUSVZFIENMSUNLIEVMRU1FTlQ6IEhhbmRsZXJzIFwiICsgY2xpY2tBY3Rpb24/Lmxlbmd0aCk7XG4gICAgICAgIGlmIChjbGlja0FjdGlvbiAmJiBjbGlja0FjdGlvbi5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhcIlRBUkdFVElEOiBcIiArIGNsaWNrQWN0aW9uWzBdLnRhcmdldElkICsgXCIgXCIgKyB0aGlzLmlkKTtcbiAgICAgICAgICAgIHRoaXMuZXZlbnRCdXMuZW1pdCh7XG4gICAgICAgICAgICAgICAga2luZDogXCJVU0VSX0NMSUNLRURfRVZFTlRcIixcbiAgICAgICAgICAgICAgICBwcm9kdWNlcjogXCJEVXNlclwiLFxuICAgICAgICAgICAgICAgIHByb2R1Y2VySWQ6IHRoaXMuaWQsXG4gICAgICAgICAgICAgICAgZGF0YTogeyBlbGVtZW50SWQ6IHRoaXMuaWQgfSxcbiAgICAgICAgICAgICAgICB0aW1lc3RhbXA6IERUaW1lc3RhbXAubm93KCksXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGNsaWNrQWN0aW9uLmZvckVhY2goKGNvbW1hbmQpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbW1hbmRCdXMuZW1pdChjb21tYW5kKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBvbk1vdXNlT3ZlcihfOiBNb3VzZUV2ZW50KSB7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKGV2KTtcbiAgICB9XG5cbiAgICBzZXRTdHlsZShzdHlsZTogUGFydGlhbDxEU3R5bGU+KSB7XG4gICAgICAgIHRoaXMudXBkYXRlU3R5bGVzKHN0eWxlKTtcbiAgICB9XG5cbiAgICBhcHBlbmRZb3Vyc2VsZihwYXJlbnQ6IEhUTUxFbGVtZW50KSB7XG4gICAgICAgIHBhcmVudC5hcHBlbmQodGhpcy5lbCk7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKHBhcmVudCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBoYW5kbGVBbmltYXRlU2VsZkFjdGlvbihkdG86IEFuaW1hdGlvbkR0bykge1xuICAgICAgICB0aGlzLmlzQW5pbWF0aW5nU2VsZiA9IHRydWU7XG4gICAgICAgIGNvbnN0IHsga2V5ZnJhbWVzLCBvcHRpb25zIH0gPSBkdG87XG5cbiAgICAgICAgY29uc3QgYW5pbWF0aW9uID0gdGhpcy5lbC5hbmltYXRlKGtleWZyYW1lcywgb3B0aW9ucy5kdXJhdGlvbik7XG4gICAgICAgIGFuaW1hdGlvbi5vbmZpbmlzaCA9IChlOiBBbmltYXRpb25QbGF5YmFja0V2ZW50KSA9PiB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhlLnR5cGUpO1xuICAgICAgICAgICAgdGhpcy5pc0FuaW1hdGluZ1NlbGYgPSBmYWxzZTtcbiAgICAgICAgfTtcbiAgICAgICAgYW5pbWF0aW9uLm9ucmVtb3ZlID0gKCkgPT4ge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKFwiQU5JTUFUSU9OIFJFTU9WRUQ6IFwiICsgYW5pbWF0aW9uLmlkKTtcbiAgICAgICAgICAgIHRoaXMuaXNBbmltYXRpbmdTZWxmID0gZmFsc2U7XG4gICAgICAgIH07XG4gICAgICAgIGFuaW1hdGlvbi5vbmNhbmNlbCA9ICgpID0+IHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybihcIkFOSU1BVElPTiBDQU5DRUxFRDogXCIgKyBhbmltYXRpb24uaWQpO1xuICAgICAgICAgICAgdGhpcy5pc0FuaW1hdGluZ1NlbGYgPSBmYWxzZTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBwcml2YXRlIG5vcm1hbGl6ZSgpIHtcbiAgICAgICAgRFN0eWxlLm5vcm1hbGl6ZSh0aGlzLmVsKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgdXBkYXRlU3R5bGVzKHN0eWxlOiBQYXJ0aWFsPERTdHlsZT4pIHtcbiAgICAgICAgdGhpcy5jdXJyU3R5bGUgPSBPYmplY3QuYXNzaWduKHRoaXMuY3VyclN0eWxlLCBzdHlsZSk7XG4gICAgICAgIERTdHlsZS5hcHBseVN0eWxlcyh0aGlzLmVsLCB0aGlzLmN1cnJTdHlsZSwgdGhpcy5zY2FsZS5zY2FsZSk7XG4gICAgICAgIHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHRoaXMuZWwpO1xuICAgIH1cbn1cbiIsICJpbXBvcnQgeyBERWxlbWVudCB9IGZyb20gXCIuL0RFbGVtZW50XCI7XG5pbXBvcnQgeyBERGl2RHRvIH0gZnJvbSBcIi4uL2R0by9ERWxlbWVudC5kdG9cIjtcbmltcG9ydCB7IERUZXh0IH0gZnJvbSBcIi4vRFRleHRcIjtcbmltcG9ydCB7IERJbWcgfSBmcm9tIFwiLi9ESW1nXCI7XG5pbXBvcnQgeyBEQ29tbWFuZEJ1cyB9IGZyb20gXCIuLi9jb21tYW5kcy9EQ29tbWFuZEJ1c1wiO1xuaW1wb3J0IHsgRXZlbnRCdXMgfSBmcm9tIFwiLi4vZXZlbnRzL2V2ZW50LWJ1c1wiO1xuaW1wb3J0IHsgU2NhbGVTZXJ2aWNlIH0gZnJvbSBcIi4uL2VuZ2luZS9zY2FsZVwiO1xuXG5leHBvcnQgY2xhc3MgRERpdiBleHRlbmRzIERFbGVtZW50PEhUTUxEaXZFbGVtZW50PiB7XG4gICAgcHJpdmF0ZSByZWFkb25seSBUQUcgPSBcIlsgRERpdiBdOiBcIjtcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgZGVmYXVsdFN0eWxlID0geyB4OiAyMiwgeTogNCB9O1xuICAgIHByaXZhdGUgY2hpbGRyZW46IEFycmF5PERUZXh0IHwgREltZz4gPSBbXTtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBkdG86IEREaXZEdG8sXG4gICAgICAgIGV2ZW50QnVzOiBFdmVudEJ1cyxcbiAgICAgICAgYWN0aW9uU2VydmljZTogRENvbW1hbmRCdXMsXG4gICAgICAgIHNjYWxlOiBTY2FsZVNlcnZpY2UsXG4gICAgICAgIGNoaWxkcmVuOiBBcnJheTxEVGV4dCB8IERJbWc+XG4gICAgKSB7XG4gICAgICAgIGNvbnN0IGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgICAgICBzdXBlcihkLCBldmVudEJ1cywgYWN0aW9uU2VydmljZSwgZHRvLCBzY2FsZSk7XG4gICAgICAgIHRoaXMuY2hpbGRyZW4gPSBjaGlsZHJlbjtcblxuICAgICAgICB0aGlzLmNoaWxkcmVuLmZvckVhY2goKGNoaWxkKSA9PiB7XG4gICAgICAgICAgICBjaGlsZC5hcHBlbmRZb3Vyc2VsZih0aGlzLmVsKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgZGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLmZvckVhY2goKHVuc3Vic2NyaWJlKSA9PiB7XG4gICAgICAgICAgICB1bnN1YnNjcmliZSgpO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5jaGlsZHJlbi5mb3JFYWNoKChjaGlsZCkgPT4ge1xuICAgICAgICAgICAgY2hpbGQuZGVzdHJveSgpO1xuICAgICAgICB9KTtcbiAgICB9XG59XG4iLCAiaW1wb3J0IHsgREVsZW1lbnQgfSBmcm9tIFwiLi9ERWxlbWVudFwiO1xuaW1wb3J0IHsgREltZ0R0byB9IGZyb20gXCIuLi9kdG8vREVsZW1lbnQuZHRvXCI7XG5pbXBvcnQgeyBEQ29tbWFuZEJ1cyB9IGZyb20gXCIuLi9jb21tYW5kcy9EQ29tbWFuZEJ1c1wiO1xuaW1wb3J0IHsgRXZlbnRCdXMgfSBmcm9tIFwiLi4vZXZlbnRzL2V2ZW50LWJ1c1wiO1xuaW1wb3J0IHsgU2NhbGVTZXJ2aWNlIH0gZnJvbSBcIi4uL2VuZ2luZS9zY2FsZVwiO1xuaW1wb3J0IHsgRFRpbWVzdGFtcCB9IGZyb20gXCIuLi9jb21tb24vRFRpbWVzdGFtcFwiO1xuXG5leHBvcnQgY2xhc3MgREltZyBleHRlbmRzIERFbGVtZW50PEhUTUxJbWFnZUVsZW1lbnQ+IHtcbiAgICBwcml2YXRlIHN0YXRpYyBJTUFHRV9DT1VOVCA9IDA7XG4gICAgcHJpdmF0ZSByZWFkb25seSBpbWFnZUNvdW50OiBudW1iZXI7XG4gICAgcmVhZG9ubHkgVEFHOiBzdHJpbmc7XG4gICAgcmVhZG9ubHkgVElNSU5HX1RBRzogc3RyaW5nO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgbG9hZFN0YXJ0OiBEVGltZXN0YW1wO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgZHRvOiBESW1nRHRvLFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IGFjdGlvblN1YmplY3Q6IERDb21tYW5kQnVzLFxuICAgICAgICByZWFkb25seSBldmVudEJ1czogRXZlbnRCdXMsXG4gICAgICAgIHJlYWRvbmx5IHNjYWxlU2VydmljZTogU2NhbGVTZXJ2aWNlXG4gICAgKSB7XG4gICAgICAgIHN1cGVyKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJpbWdcIiksIGV2ZW50QnVzLCBhY3Rpb25TdWJqZWN0LCBkdG8sIHNjYWxlU2VydmljZSk7XG4gICAgICAgIERJbWcuSU1BR0VfQ09VTlQgKz0gMTtcbiAgICAgICAgdGhpcy5pbWFnZUNvdW50ID0gREltZy5JTUFHRV9DT1VOVDtcbiAgICAgICAgdGhpcy5UQUcgPSBcIltEX0lNRyBcIiArIERJbWcuSU1BR0VfQ09VTlQgKyBcIiBdOiBcIjtcbiAgICAgICAgdGhpcy5USU1JTkdfVEFHID0gXCJsb2FkLXRpbWUgKFwiICsgREltZy5JTUFHRV9DT1VOVCArIFwiKSBcIjtcbiAgICAgICAgdGhpcy5lbC5sb2FkaW5nID0gXCJlYWdlclwiO1xuICAgICAgICB0aGlzLmVsLnN0eWxlLnBvc2l0aW9uID0gXCJhYnNvbHV0ZVwiO1xuICAgICAgICB0aGlzLnNldFN0eWxlKGR0by5zdHlsZSk7XG4gICAgICAgIHRoaXMubG9hZFN0YXJ0ID0gRFRpbWVzdGFtcC5ub3coKTtcbiAgICAgICAgLy8gQmluZCBIYW5kbGVyc1xuICAgICAgICB0aGlzLm9uRXJyb3IgPSB0aGlzLm9uRXJyb3IuYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5vbkxvYWQgPSB0aGlzLm9uTG9hZC5iaW5kKHRoaXMpO1xuICAgICAgICAvLyB0aGlzLm9uQ2xpY2sgPSB0aGlzLm9uQ2xpY2suYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5lbC5vbmxvYWQgPSB0aGlzLm9uTG9hZDtcbiAgICAgICAgdGhpcy5lbC5vbmVycm9yID0gdGhpcy5vbkVycm9yO1xuICAgICAgICAvLyB0aGlzLmVsLm9uY2xpY2sgPSB0aGlzLm9uQ2xpY2s7XG4gICAgICAgIHRoaXMuZWwuc3JjID0gZHRvLnVybDtcbiAgICAgICAgY29uc29sZS50aW1lKHRoaXMuVElNSU5HX1RBRyk7XG4gICAgfVxuXG4gICAgbG9nKCk6IHZvaWQge31cblxuICAgIHNldFNjYWxlKHNjYWxlOiBudW1iZXIpIHtcbiAgICAgICAgY29uc29sZS5sb2coc2NhbGUpO1xuICAgICAgICB0aGlzLnNldFN0eWxlKHRoaXMuY3VyclN0eWxlKTtcbiAgICB9XG4gICAgZGVzdHJveSgpIHtcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLmZvckVhY2goKHVuc3Vic2NyaWJlKSA9PiB7XG4gICAgICAgICAgICB1bnN1YnNjcmliZSgpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIG9uRXJyb3IoZXY6IEV2ZW50IHwgc3RyaW5nKSB7XG4gICAgICAgIGlmIChldiBpbnN0YW5jZW9mIEV2ZW50KSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyh0aGlzLlRBRyArIFwiIFwiICsgZXYudHlwZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyh0aGlzLlRBRyArIGV2KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgb25Mb2FkKF86IEV2ZW50KSB7XG4gICAgICAgIGNvbnN0IGxvYWRUaW1lID0gRFRpbWVzdGFtcC5kaWZmTm93KHRoaXMubG9hZFN0YXJ0KTtcblxuICAgICAgICB0aGlzLmV2ZW50QnVzLmVtaXQoe1xuICAgICAgICAgICAga2luZDogXCJJTUFHRV9MT0FERURfRVZFTlRcIixcbiAgICAgICAgICAgIHByb2R1Y2VyOiBcIkRJbWFnZVwiLFxuICAgICAgICAgICAgcHJvZHVjZXJJZDogdGhpcy5pZCxcbiAgICAgICAgICAgIHRpbWVzdGFtcDogRFRpbWVzdGFtcC5ub3coKSxcbiAgICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgICAgICBsb2FkVGltZSxcbiAgICAgICAgICAgICAgICBuYXR1cmFsSGVpZ2h0OiB0aGlzLmVsLm5hdHVyYWxIZWlnaHQsXG4gICAgICAgICAgICAgICAgbmF0dXJhbFdpZHRoOiB0aGlzLmVsLm5hdHVyYWxXaWR0aCxcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IHRoaXMuZWwuaGVpZ2h0LFxuICAgICAgICAgICAgICAgIHdpZHRoOiB0aGlzLmVsLndpZHRoLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgfVxufVxuIiwgImltcG9ydCB7IERFbGVtZW50IH0gZnJvbSBcIi4vREVsZW1lbnRcIjtcbmltcG9ydCB7IERUZXh0RHRvIH0gZnJvbSBcIi4uL2R0by9ERWxlbWVudC5kdG9cIjtcbmltcG9ydCB7IERDb21tYW5kQnVzIH0gZnJvbSBcIi4uL2NvbW1hbmRzL0RDb21tYW5kQnVzXCI7XG5pbXBvcnQgeyBFdmVudEJ1cyB9IGZyb20gXCIuLi9ldmVudHMvZXZlbnQtYnVzXCI7XG5pbXBvcnQgeyBTY2FsZVNlcnZpY2UgfSBmcm9tIFwiLi4vZW5naW5lL3NjYWxlXCI7XG5cbmV4cG9ydCBjbGFzcyBEVGV4dCBleHRlbmRzIERFbGVtZW50PEhUTUxQYXJhZ3JhcGhFbGVtZW50PiB7XG4gICAgcHJpdmF0ZSByZWFkb25seSBUQUcgPSBcIlsgRFBhcmFncmFwaCBdOiBcIjtcbiAgICBwcm90ZWN0ZWQgZGVmYXVsdFN0eWxlID0ge307XG5cbiAgICBjb25zdHJ1Y3RvcihkdG86IERUZXh0RHRvLCBldmVudEJ1czogRXZlbnRCdXMsIGFjdGlvblNlcnZpY2U6IERDb21tYW5kQnVzLCBzY2FsZTogU2NhbGVTZXJ2aWNlKSB7XG4gICAgICAgIHN1cGVyKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJwXCIpLCBldmVudEJ1cywgYWN0aW9uU2VydmljZSwgZHRvLCBzY2FsZSk7XG4gICAgICAgIHRoaXMuZWwuc3R5bGUucG9zaXRpb24gPSBcImFic29sdXRlXCI7XG4gICAgICAgIHRoaXMuZWwuaW5uZXJUZXh0ID0gXCJcIiArIGR0by50ZXh0O1xuICAgICAgICB0aGlzLnNldFN0eWxlKGR0by5zdHlsZSk7XG4gICAgfVxuXG4gICAgc2V0U2NhbGUoc2NhbGU6IG51bWJlcikge1xuICAgICAgICB0aGlzLnNldFN0eWxlKHRoaXMuY3VyclN0eWxlKTtcbiAgICAgICAgY29uc3QgZm9udFNpemUgPSB0aGlzLmVsLnN0eWxlLmZvbnRTaXplO1xuICAgICAgICBjb25zb2xlLmxvZyh0aGlzLlRBRyArIFwic2NhbGU6IFwiICsgc2NhbGUgKyBcIiBGb250c2l6ZTogXCIgKyBmb250U2l6ZSk7XG4gICAgfVxuXG4gICAgZGVzdHJveSgpIHtcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLmZvckVhY2goKHVuc3Vic2NyaWJlKSA9PiB7XG4gICAgICAgICAgICB1bnN1YnNjcmliZSgpO1xuICAgICAgICB9KTtcbiAgICB9XG59XG4iLCAiaW1wb3J0IHsgREVsZW1lbnQgfSBmcm9tIFwiLi4vRGVsZW1lbnQvREVsZW1lbnRcIjtcbmltcG9ydCB7IEREaXYgfSBmcm9tIFwiLi4vRGVsZW1lbnQvRGRpdlwiO1xuaW1wb3J0IHsgREltZyB9IGZyb20gXCIuLi9EZWxlbWVudC9ESW1nXCI7XG5pbXBvcnQgeyBEVGV4dCB9IGZyb20gXCIuLi9EZWxlbWVudC9EVGV4dFwiO1xuaW1wb3J0IHsgRERpdkR0bywgREVsZW1lbnREdG8gfSBmcm9tIFwiLi4vZHRvL0RFbGVtZW50LmR0b1wiO1xuaW1wb3J0IHsgRENvbW1hbmRCdXMgfSBmcm9tIFwiLi4vY29tbWFuZHMvRENvbW1hbmRCdXNcIjtcbmltcG9ydCB7IEV2ZW50QnVzIH0gZnJvbSBcIi4uL2V2ZW50cy9ldmVudC1idXNcIjtcbmltcG9ydCB7IFNjYWxlU2VydmljZSB9IGZyb20gXCIuL3NjYWxlXCI7XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVERWxlbWVudCA9IChcbiAgICBkdG86IERFbGVtZW50RHRvLFxuICAgIGFjdGlvbkJ1czogRENvbW1hbmRCdXMsXG4gICAgZXZlbnRCdXM6IEV2ZW50QnVzLFxuICAgIHNjYWxlOiBTY2FsZVNlcnZpY2Vcbik6IERFbGVtZW50PGFueT4gPT4ge1xuICAgIHN3aXRjaCAoZHRvLl90YWcpIHtcbiAgICAgICAgY2FzZSBcImRpdlwiOlxuICAgICAgICAgICAgY29uc3QgY2hpbGRFbHMgPSBjcmVhdGVDaGlsZHJlbkZvckRpdihkdG8sIGFjdGlvbkJ1cywgZXZlbnRCdXMsIHNjYWxlKTtcbiAgICAgICAgICAgIGNvbnN0IG5ld0RpdiA9IG5ldyBERGl2KGR0bywgZXZlbnRCdXMsIGFjdGlvbkJ1cywgc2NhbGUsIGNoaWxkRWxzKTtcbiAgICAgICAgICAgIHJldHVybiBuZXdEaXY7XG4gICAgICAgIGNhc2UgXCJpbWdcIjpcbiAgICAgICAgICAgIHJldHVybiBuZXcgREltZyhkdG8sIGFjdGlvbkJ1cywgZXZlbnRCdXMsIHNjYWxlKTtcbiAgICAgICAgY2FzZSBcInBcIjpcbiAgICAgICAgICAgIHJldHVybiBuZXcgRFRleHQoZHRvLCBldmVudEJ1cywgYWN0aW9uQnVzLCBzY2FsZSk7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBjb25zdCBjaGVjazogbmV2ZXIgPSBkdG87XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJVbmtub3duIGR0byBnaXZlbiB0byB0aGUgY3JlYXRlREVsZW1lbnQgZnVuY3Rpb24uXCIpO1xuICAgICAgICAvLyBUT0RPIExPR0dJTkcgb3IgY3JlYXRlIGFueSBIVE1MLUVMRU1FTlQ/P1xuICAgIH1cbn07XG5cbmNvbnN0IGNyZWF0ZUNoaWxkcmVuRm9yRGl2ID0gKFxuICAgIGR0bzogRERpdkR0byxcbiAgICBhY3Rpb25TdWJqZWN0OiBEQ29tbWFuZEJ1cyxcbiAgICBldmVudEJ1czogRXZlbnRCdXMsXG4gICAgc2NhbGU6IFNjYWxlU2VydmljZVxuKTogRERpdltcImNoaWxkcmVuXCJdID0+IHtcbiAgICBjb25zdCBjaGlsZER0byA9IGR0by5jaGlsZHJlbjtcbiAgICBjb25zdCBjaGlsZEVsczogQXJyYXk8REltZyB8IERUZXh0PiA9IFtdO1xuICAgIC8vIGNvbnNvbGUubG9nKGNoaWxkRWxlbWVudHMpO1xuICAgIGNoaWxkRHRvLmZvckVhY2goKGR0bykgPT4ge1xuICAgICAgICBpZiAoZHRvLl90YWcgPT09IFwicFwiKSB7XG4gICAgICAgICAgICBjb25zdCBuZXdUZXh0ID0gbmV3IERUZXh0KGR0bywgZXZlbnRCdXMsIGFjdGlvblN1YmplY3QsIHNjYWxlKTtcbiAgICAgICAgICAgIGNoaWxkRWxzLnB1c2gobmV3VGV4dCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGR0by5fdGFnID09PSBcImltZ1wiKSB7XG4gICAgICAgICAgICBjb25zdCBuZXdJbWFnZSA9IG5ldyBESW1nKGR0bywgYWN0aW9uU3ViamVjdCwgZXZlbnRCdXMsIHNjYWxlKTtcbiAgICAgICAgICAgIGNoaWxkRWxzLnB1c2gobmV3SW1hZ2UpO1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIGNoaWxkRWxzO1xufTtcbiIsICJpbXBvcnQgeyBERWxlbWVudCB9IGZyb20gXCIuLi9EZWxlbWVudC9ERWxlbWVudFwiO1xuaW1wb3J0IHsgUGFnZUR0byB9IGZyb20gXCIuLi9kdG8vU2NoZW1hRHRvXCI7XG5pbXBvcnQgeyBjcmVhdGVERWxlbWVudCB9IGZyb20gXCIuL2VsZW1lbnQtZmFjdG9yeVwiO1xuaW1wb3J0IHsgRXZlbnRCdXMgfSBmcm9tIFwiLi4vZXZlbnRzL2V2ZW50LWJ1c1wiO1xuaW1wb3J0IHsgRENvbW1hbmRCdXMgfSBmcm9tIFwiLi4vY29tbWFuZHMvRENvbW1hbmRCdXNcIjtcbmltcG9ydCB7IERUaW1lc3RhbXAgfSBmcm9tIFwiLi4vY29tbW9uL0RUaW1lc3RhbXBcIjtcbmltcG9ydCB7IFNjYWxlU2VydmljZSB9IGZyb20gXCIuL3NjYWxlXCI7XG5cbmV4cG9ydCBjbGFzcyBEUGFnZSB7XG4gICAgcHJpdmF0ZSByZWFkb25seSBUQUcgPSBcIlsgRFBhZ2UgXTogXCI7XG4gICAgcHJpdmF0ZSBlbGVtZW50czogREVsZW1lbnQ8SFRNTEVsZW1lbnQ+W10gPSBbXTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGV2ZW50QnVzO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgY29tbWFuZEJ1cztcbiAgICBwcml2YXRlIHJlYWRvbmx5IHNjYWxlOiBTY2FsZVNlcnZpY2U7XG4gICAgLy8gVG9kbyBHTE9CQUwgRVZFTlRfQlVTUyBBTkQgUEFHRSBFVkVOVFM6XG5cbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IGR0bzogUGFnZUR0bywgZXZlbnRCdXM6IEV2ZW50QnVzLCBjb21tYW5kQnVzOiBEQ29tbWFuZEJ1cywgc2NhbGU6IFNjYWxlU2VydmljZSkge1xuICAgICAgICB0aGlzLmV2ZW50QnVzID0gZXZlbnRCdXM7XG4gICAgICAgIHRoaXMuY29tbWFuZEJ1cyA9IGNvbW1hbmRCdXM7XG4gICAgICAgIHRoaXMuc2NhbGUgPSBzY2FsZTtcbiAgICAgICAgdGhpcy5lbGVtZW50cyA9IGR0by5lbGVtZW50cy5tYXAoKGR0bykgPT4gY3JlYXRlREVsZW1lbnQoZHRvLCB0aGlzLmNvbW1hbmRCdXMsIHRoaXMuZXZlbnRCdXMsIHRoaXMuc2NhbGUpKTtcbiAgICB9XG5cbiAgICBhcHBlbmRZb3Vyc2VsZihwYXJlbnQ6IEhUTUxFbGVtZW50KSB7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKHRoaXMuVEFHICsgXCIgQVBQRU5ESU5HIFRPIFBBUkVOVFwiKTtcbiAgICAgICAgdGhpcy5lbGVtZW50cy5mb3JFYWNoKChlbCkgPT4ge1xuICAgICAgICAgICAgZWwuYXBwZW5kWW91cnNlbGYocGFyZW50KTtcbiAgICAgICAgICAgIC8vIHBhcmVudC5hcHBlbmRDaGlsZChlbC5lbCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIGlmICghcHJlbG9hZE1vZGUpIHtcbiAgICAgICAgdGhpcy5ldmVudEJ1cy5lbWl0KHtcbiAgICAgICAgICAgIGtpbmQ6IFwiUEFHRV9FTlRFUl9FVkVOVFwiLFxuICAgICAgICAgICAgdGltZXN0YW1wOiBEVGltZXN0YW1wLm5vdygpLFxuICAgICAgICAgICAgcHJvZHVjZXI6IFwiRFBhZ2VcIixcbiAgICAgICAgICAgIHByb2R1Y2VySWQ6IHRoaXMuaWQsXG4gICAgICAgICAgICBkYXRhOiB7IHBhZ2VJZDogdGhpcy5pZCB9LFxuICAgICAgICB9KTtcbiAgICAgICAgLy8gfVxuICAgIH1cblxuICAgIGRlc3Ryb3koKSB7XG4gICAgICAgIHRoaXMuZWxlbWVudHMuZm9yRWFjaCgoZWwpID0+IHtcbiAgICAgICAgICAgIGVsLmRlc3Ryb3koKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgbG9nKCk6IHZvaWQge1xuICAgICAgICAvLyBjb25zb2xlLmxvZyh0aGlzLlRBRyArICdzY2FsZSAtICcgKyB0aGlzLnNjYWxlKTtcbiAgICB9XG5cbiAgICBnZXQgaWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmR0by5pZDtcbiAgICB9XG59XG4iLCAiZXhwb3J0IGNsYXNzIFNjYWxlU2VydmljZSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgYmFzZUhlaWdodDtcbiAgcHJpdmF0ZSByZWFkb25seSBiYXNlV2lkdGg7XG4gIHByaXZhdGUgY29udGFpbmVySGVpZ2h0ID0gMTMwMDtcbiAgcHJpdmF0ZSBjb250YWluZXJXaWR0aCA9IDEzMDA7XG5cbiAgZ2V0IHNjYWxlKCkge1xuICAgIHJldHVybiB0aGlzLl9zY2FsZTtcbiAgfVxuXG4gIGdldCBwYWdlSGVpZ2h0KCkge1xuICAgIHJldHVybiB0aGlzLmJhc2VIZWlnaHQgKiB0aGlzLnNjYWxlO1xuICB9XG4gIGdldCBwYWdlV2lkdGgoKSB7XG4gICAgcmV0dXJuIHRoaXMuYmFzZVdpZHRoICogdGhpcy5fc2NhbGU7XG4gIH1cblxuICBwcml2YXRlIF9zY2FsZSA9IDE7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBzdWJzY3JpYmVycyA9IG5ldyBTZXQ8KHNjYWxlOiBudW1iZXIpID0+IHZvaWQ+KCk7XG5cbiAgY29uc3RydWN0b3IoY29uZmlnOiB7IGJhc2VIZWlnaHQ6IG51bWJlcjsgYmFzZVdpZHRoOiBudW1iZXI7IGNvbnRhaW5lckhlaWdodDogbnVtYmVyOyBjb250YWluZXJXaWR0aDogbnVtYmVyIH0pIHtcbiAgICB0aGlzLmJhc2VIZWlnaHQgPSBjb25maWcuYmFzZUhlaWdodDtcbiAgICB0aGlzLmJhc2VXaWR0aCA9IGNvbmZpZy5iYXNlV2lkdGg7XG4gICAgdGhpcy5jb250YWluZXJIZWlnaHQgPSBjb25maWcuY29udGFpbmVySGVpZ2h0O1xuICAgIHRoaXMuY29udGFpbmVyV2lkdGggPSBjb25maWcuY29udGFpbmVyV2lkdGg7XG4gICAgdGhpcy51cGRhdGVTY2FsZSgpO1xuICB9XG5cbiAgc2V0Q29udGFpbmVyQm91bmRzKGJvdW5kczogeyBoZWlnaHQ6IG51bWJlcjsgd2lkdGg6IG51bWJlciB9KSB7XG4gICAgdGhpcy5jb250YWluZXJXaWR0aCA9IGJvdW5kcy53aWR0aDtcbiAgICB0aGlzLmNvbnRhaW5lckhlaWdodCA9IGJvdW5kcy5oZWlnaHQ7XG4gICAgdGhpcy51cGRhdGVTY2FsZSgpO1xuICB9XG4gIHByaXZhdGUgdXBkYXRlU2NhbGUoKSB7XG4gICAgY29uc3Qgc2NhbGVGbiA9IFNjYWxlLmNhbGModGhpcy5iYXNlSGVpZ2h0LCB0aGlzLmJhc2VXaWR0aCk7XG4gICAgY29uc3Qgc2NhbGUgPSBzY2FsZUZuKHsgaGVpZ2h0OiB0aGlzLmNvbnRhaW5lckhlaWdodCwgd2lkdGg6IHRoaXMuY29udGFpbmVyV2lkdGggfSk7XG4gICAgY29uc3QgaGFzQ2hhbmdlZCA9IHRoaXMuc2NhbGUgIT09IHNjYWxlO1xuICAgIHRoaXMuX3NjYWxlID0gc2NhbGU7XG4gICAgaWYgKGhhc0NoYW5nZWQpIHtcbiAgICAgIHRoaXMuc3Vic2NyaWJlcnMuZm9yRWFjaCgoZm4pID0+IHtcbiAgICAgICAgZm4odGhpcy5fc2NhbGUpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgb25DaGFuZ2Uoc2NhbGVDaGFuZ2VIYW5kbGVyOiAoc2NhbGU6IG51bWJlcikgPT4gdm9pZCwgc3Vic2NyaWJlcklkOiBzdHJpbmcpIHtcbiAgICAvLyBjb25zb2xlLmxvZyhzdWJzY3JpYmVySWQpO1xuICAgIHRoaXMuc3Vic2NyaWJlcnMuYWRkKHNjYWxlQ2hhbmdlSGFuZGxlcik7XG4gICAgc2NhbGVDaGFuZ2VIYW5kbGVyKHRoaXMuX3NjYWxlKTtcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgdGhpcy5zdWJzY3JpYmVycy5kZWxldGUoc2NhbGVDaGFuZ2VIYW5kbGVyKTtcbiAgICB9O1xuICB9XG59XG5leHBvcnQgbmFtZXNwYWNlIFNjYWxlIHtcbiAgZXhwb3J0IGNvbnN0IGNhbGMgPSAoYmFzZUhlaWdodDogbnVtYmVyLCBiYXNlV2lkdGg6IG51bWJlcikgPT4ge1xuICAgIHJldHVybiAoY29udGFpbmVyOiB7IGhlaWdodDogbnVtYmVyOyB3aWR0aDogbnVtYmVyIH0pID0+IHtcbiAgICAgIGNvbnN0IGhlaWdodFJhdGlvID0gY29udGFpbmVyLmhlaWdodCAvIGJhc2VIZWlnaHQ7XG4gICAgICBjb25zdCB3aWR0aFJhdGlvID0gY29udGFpbmVyLndpZHRoIC8gYmFzZVdpZHRoO1xuICAgICAgcmV0dXJuIE1hdGgubWluKGhlaWdodFJhdGlvLCB3aWR0aFJhdGlvKTtcbiAgICB9O1xuICB9O1xuXG4gIHR5cGUgU2NhbGVQb3NJbnB1dCA9IHsgeDogbnVtYmVyOyB5OiBudW1iZXI7IGg6IG51bWJlcjsgdzogbnVtYmVyIH07XG5cbiAgZXhwb3J0IGNvbnN0IHNjYWxlRnVuY3Rpb25DcmVhdG9yID0gKHNjYWxlOiBudW1iZXIpID0+IHtcbiAgICByZXR1cm4gKHZhbHVlOiBudW1iZXIpID0+IHZhbHVlICogc2NhbGU7XG4gIH07XG59XG4iLCAiaW1wb3J0IHsgREF1ZGlvRHRvLCBESW1nRHRvLCBEVmlkZW9EdG8gfSBmcm9tIFwiLi4vZHRvL0RFbGVtZW50LmR0b1wiO1xuXG5leHBvcnQgY2xhc3MgUmVzb3VyY2VQcm92aWRlciB7XG4gICAgcHJpdmF0ZSByZWFkb25seSBUQUcgPSBcIlsgUkVTT1VSQ0VfUFJPVklERVIgXTogXCI7XG4gICAgcHJpdmF0ZSByZWFkb25seSB2aWRlb01hcCA9IG5ldyBNYXA8c3RyaW5nLCBEVmlkZW9EdG8+KCk7XG4gICAgcHJpdmF0ZSByZWFkb25seSBhdWRpb01hcCA9IG5ldyBNYXA8c3RyaW5nLCBEQXVkaW9EdG8+KCk7XG4gICAgY29uc3RydWN0b3IoZGF0YTogeyB2aWRlb3M6IFJlYWRvbmx5QXJyYXk8RFZpZGVvRHRvPjsgYXVkaW86IFJlYWRvbmx5QXJyYXk8REF1ZGlvRHRvPiB9KSB7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKHRoaXMuVEFHICsgXCJWSURFT19DT1VOVCBcIiArIGRhdGEudmlkZW9zLmxlbmd0aCk7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKHRoaXMuVEFHICsgXCJBVURJT19DT1VOVCBcIiArIGRhdGEuYXVkaW8ubGVuZ3RoKTtcbiAgICAgICAgZGF0YS52aWRlb3MuZm9yRWFjaCgodmlkZW8pID0+IHtcbiAgICAgICAgICAgIHRoaXMudmlkZW9NYXAuc2V0KHZpZGVvLmlkLCB2aWRlbyk7XG4gICAgICAgIH0pO1xuICAgICAgICBkYXRhLmF1ZGlvLmZvckVhY2goKGF1ZGlvKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmF1ZGlvTWFwLnNldChhdWRpby5pZCwgYXVkaW8pO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBnZXRBdWRpb0J5SWQoaWQ6IHN0cmluZyk6IERBdWRpb0R0byB8IGZhbHNlIHtcbiAgICAgICAgY29uc3QgbWF5YmVBdWRpbyA9IHRoaXMuYXVkaW9NYXAuZ2V0KGlkKTtcbiAgICAgICAgaWYgKCFtYXliZUF1ZGlvKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKHRoaXMuVEFHICsgXCJBdWRpbyBieSBpZCBcIiArIGlkICsgXCIgZG9udCBleGlzdFwiKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbWF5YmVBdWRpbyA/PyBmYWxzZTtcbiAgICB9XG5cbiAgICBnZXRWaWRlb0J5SWQoaWQ6IHN0cmluZyk6IERWaWRlb0R0byB8IGZhbHNlIHtcbiAgICAgICAgY29uc3QgbWF5YmVWaWRlbyA9IHRoaXMudmlkZW9NYXAuZ2V0KGlkKTtcbiAgICAgICAgaWYgKCFtYXliZVZpZGVvKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKHRoaXMuVEFHICsgXCJWaWRlbyBieSBpZCBcIiArIGlkICsgXCIgZG9udCBleGlzdFwiKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbWF5YmVWaWRlbyA/PyBmYWxzZTtcbiAgICB9XG59XG4iLCAiZXhwb3J0IGNsYXNzIE9rPFQ+IGltcGxlbWVudHMgSVJlc3VsdDxUPiB7XG4gICAgY29uc3RydWN0b3IocmVhZG9ubHkgdmFsdWU6IFQpIHt9XG4gICAgaXNPaygpOiB0aGlzIGlzIE9rPFQ+IHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGlzRmFpbHVyZSgpOiB0aGlzIGlzIEZhaWx1cmU8VD4ge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgbWFwPEE+KGY6ICh0OiBUKSA9PiBBKTogSVJlc3VsdDxBPiB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gZih0aGlzLnZhbHVlKTtcbiAgICAgICAgcmV0dXJuIG5ldyBPazxBPih2YWx1ZSk7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgRmFpbHVyZTxUPiBpbXBsZW1lbnRzIElSZXN1bHQ8VD4ge1xuICAgIGNvbnN0cnVjdG9yKHJlYWRvbmx5IG1lc3NhZ2U6IHN0cmluZykge31cbiAgICBpc0ZhaWx1cmUoKTogdGhpcyBpcyBGYWlsdXJlPFQ+IHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgaXNPaygpOiB0aGlzIGlzIE9rPFQ+IHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIG1hcDxBPihfZjogKHQ6IFQpID0+IEEpOiBJUmVzdWx0PEE+IHtcbiAgICAgICAgcmV0dXJuIG5ldyBGYWlsdXJlPEE+KHRoaXMubWVzc2FnZSk7XG4gICAgfVxufVxuXG5pbnRlcmZhY2UgSVJlc3VsdDxUPiB7XG4gICAgaXNPaygpOiB0aGlzIGlzIE9rPFQ+O1xuICAgIGlzRmFpbHVyZSgpOiB0aGlzIGlzIEZhaWx1cmU8VD47XG4gICAgbWFwPEE+KGY6ICh0OiBUKSA9PiBBKTogSVJlc3VsdDxBPjtcbn1cblxuZXhwb3J0IHR5cGUgUmVzdWx0PFQ+ID0gRmFpbHVyZTxUPiB8IE9rPFQ+O1xuZXhwb3J0IG5hbWVzcGFjZSBSZXN1bHQge1xuICAgIGV4cG9ydCBjb25zdCBvayA9IDxUPih2YWx1ZTogVCkgPT4gbmV3IE9rPFQ+KHZhbHVlKTtcbiAgICBleHBvcnQgY29uc3QgZmFpbHVyZSA9IDxUPihtZXNzYWdlOiBzdHJpbmcpID0+IG5ldyBGYWlsdXJlPFQ+KG1lc3NhZ2UpO1xufVxuIiwgImltcG9ydCB7IEZhY3QgfSBmcm9tIFwiLi4vcnVsZXMvZmFjdFwiO1xuaW1wb3J0IHsgQ29uZGl0aW9uIH0gZnJvbSBcIi4uL3J1bGVzL2NvbmRpdGlvblwiO1xuaW1wb3J0IHsgREV2ZW50IH0gZnJvbSBcIi4uL2V2ZW50cy9ERXZlbnRzXCI7XG5pbXBvcnQgeyBTdGF0ZUNvbW1hbmQgfSBmcm9tIFwiLi4vY29tbWFuZHMvRENvbW1hbmRcIjtcblxuZXhwb3J0IG5hbWVzcGFjZSBEU3RhdGUge1xuICAgIGludGVyZmFjZSBQcm9wRGVmaW5pdGlvbjxUeXBlTmFtZSwgVHlwZSBleHRlbmRzIHN0cmluZyB8IG51bWJlcj4ge1xuICAgICAgICByZWFkb25seSBfdHlwZTogVHlwZU5hbWU7XG4gICAgICAgIHJlYWRvbmx5IHByb3BOYW1lOiBzdHJpbmc7XG4gICAgICAgIHJlYWRvbmx5IHByb3BEZXNjcmlwdGlvbjogc3RyaW5nO1xuICAgICAgICByZWFkb25seSBpbml0aWFsVmFsdWU/OiBUeXBlO1xuICAgICAgICByZWFkb25seSBvcHRpb25zPzogUmVhZG9ubHlBcnJheTxQcm9wVmFsdWU8VHlwZT4+O1xuICAgIH1cblxuICAgIGV4cG9ydCB0eXBlIE51bWVyaWNQcm9wID0gUHJvcERlZmluaXRpb248XCJudW1iZXJcIiwgbnVtYmVyPjtcbiAgICBleHBvcnQgdHlwZSBTdHJpbmdQcm9wID0gUHJvcERlZmluaXRpb248XCJzdHJpbmdcIiwgc3RyaW5nPjtcblxuICAgIGV4cG9ydCBpbnRlcmZhY2UgZnJvbUV2ZW50SGFuZGxlciB7XG4gICAgICAgIHJlYWRvbmx5IG9uRXZlbnQ6IERFdmVudFtcImtpbmRcIl07XG4gICAgICAgIHJlYWRvbmx5IHRoZW5FeGVjdXRlOiBSZWFkb25seUFycmF5PFN0YXRlQ29tbWFuZD47XG4gICAgfVxuXG4gICAgZXhwb3J0IGludGVyZmFjZSBQcm9wVmFsdWU8VD4ge1xuICAgICAgICByZWFkb25seSB2YWx1ZTogVDtcbiAgICAgICAgcmVhZG9ubHkgdmFsdWVMYWJlbDogc3RyaW5nO1xuICAgIH1cbiAgICBleHBvcnQgdHlwZSBQcm9wID0gTnVtZXJpY1Byb3AgfCBTdHJpbmdQcm9wO1xuXG4gICAgZXhwb3J0IGludGVyZmFjZSBTZXRTdHJpbmdNdXRhdGlvbiB7XG4gICAgICAgIHJlYWRvbmx5IGtpbmQ6IFwic2V0LXN0cmluZ1wiO1xuICAgICAgICByZWFkb25seSBwcm9wTmFtZTogc3RyaW5nO1xuICAgICAgICByZWFkb25seSB2YWx1ZTogc3RyaW5nO1xuICAgIH1cblxuICAgIGV4cG9ydCBpbnRlcmZhY2UgSW5jcmVtZW50TnVtYmVyTXV0YXRpb24ge1xuICAgICAgICByZWFkb25seSBraW5kOiBcImluY3JlbWVudC1udW1iZXJcIjtcbiAgICAgICAgcmVhZG9ubHkgcHJvcE5hbWU6IHN0cmluZztcbiAgICAgICAgcmVhZG9ubHkgc3RlcFNpemU6IG51bWJlcjtcbiAgICAgICAgcmVhZG9ubHkgaWZOb3RFeGlzdFRoZW5TZXRUbzogbnVtYmVyO1xuICAgIH1cbiAgICBleHBvcnQgaW50ZXJmYWNlIERlY3JlbWVudE51bWJlck11dGF0aW9uIHtcbiAgICAgICAgcmVhZG9ubHkga2luZDogXCJkZWNyZW1lbnQtbnVtYmVyXCI7XG4gICAgICAgIHJlYWRvbmx5IHByb3BOYW1lOiBzdHJpbmc7XG4gICAgICAgIHJlYWRvbmx5IHN0ZXBTaXplOiBudW1iZXI7XG4gICAgICAgIHJlYWRvbmx5IGlmTm90RXhpc3RUaGVuU2V0VG86IG51bWJlcjtcbiAgICB9XG5cbiAgICBleHBvcnQgaW50ZXJmYWNlIFNldE51bWJlck11dGF0aW9uIHtcbiAgICAgICAgcmVhZG9ubHkga2luZDogXCJzZXQtbnVtYmVyXCI7XG4gICAgICAgIHJlYWRvbmx5IHByb3BOYW1lOiBzdHJpbmc7XG4gICAgICAgIHJlYWRvbmx5IHZhbHVlOiBudW1iZXI7XG4gICAgfVxuICAgIGV4cG9ydCB0eXBlIE51bWJlck11dGF0aW9ucyA9IEluY3JlbWVudE51bWJlck11dGF0aW9uIHwgRGVjcmVtZW50TnVtYmVyTXV0YXRpb24gfCBTZXROdW1iZXJNdXRhdGlvbjtcblxuICAgIGV4cG9ydCB0eXBlIFN0YXRlTXV0YXRpb24gPSBTZXRTdHJpbmdNdXRhdGlvbiB8IE51bWJlck11dGF0aW9ucztcblxuICAgIGV4cG9ydCBjb25zdCBpc051bWJlck11dGF0aW9uID0gKG11dGF0aW9uczogU3RhdGVNdXRhdGlvbik6IG11dGF0aW9ucyBpcyBOdW1iZXJNdXRhdGlvbnMgPT4ge1xuICAgICAgICBpZiAoIW11dGF0aW9ucykge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIG11dGF0aW9ucy5raW5kID09PSBcInNldC1udW1iZXJcIiB8fFxuICAgICAgICAgICAgbXV0YXRpb25zLmtpbmQgPT09IFwiZGVjcmVtZW50LW51bWJlclwiIHx8XG4gICAgICAgICAgICBtdXRhdGlvbnMua2luZCA9PT0gXCJpbmNyZW1lbnQtbnVtYmVyXCJcbiAgICAgICAgKTtcbiAgICB9O1xuXG4gICAgZXhwb3J0IGNvbnN0IGlzU3RyaW5nTXV0YXRpb24gPSAobXV0YXRpb246IFN0YXRlTXV0YXRpb24pOiBtdXRhdGlvbiBpcyBTZXRTdHJpbmdNdXRhdGlvbiA9PiB7XG4gICAgICAgIHJldHVybiBtdXRhdGlvbiAmJiBtdXRhdGlvbi5raW5kID09PSBcInNldC1zdHJpbmdcIjtcbiAgICB9O1xuXG4gICAgZXhwb3J0IGludGVyZmFjZSBTdGF0ZVF1ZXJ5IHtcbiAgICAgICAgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuICAgICAgICByZWFkb25seSBjb25kaXRpb246IENvbmRpdGlvbjtcbiAgICB9XG5cbiAgICBleHBvcnQgaW50ZXJmYWNlIFN0YXRlUXVlcnlSZXN1bHQge1xuICAgICAgICByZWFkb25seSBxdWVyeU5hbWU6IHN0cmluZztcbiAgICAgICAgcmVhZG9ubHkgcHJldjogYm9vbGVhbjtcbiAgICAgICAgcmVhZG9ubHkgY3VycjogYm9vbGVhbjtcbiAgICB9XG5cbiAgICBleHBvcnQgY29uc3QgbnVtZXJpY1Byb3BUb0ZhY3QgPSAocHJvcDogTnVtZXJpY1Byb3AsIHZhbHVlOiBudW1iZXIpID0+IHtcbiAgICAgICAgY29uc3QgZmFjdDogRmFjdC5OdW1lcmljID0ge1xuICAgICAgICAgICAga2luZDogXCJudW1lcmljLWZhY3RcIixcbiAgICAgICAgICAgIHJlZmVyZW5jZUlkOiBwcm9wLnByb3BOYW1lLFxuICAgICAgICAgICAgcmVmZXJlbmNlTGFiZWw6IHByb3AucHJvcERlc2NyaXB0aW9uID8/IFwiIFtTVEFURV9QUk9QRVJUWV0gOiBcIiArIHByb3AucHJvcE5hbWUsXG4gICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICAgIGxhYmVsOiBcIiBbVkFMVUVdIDogXCIgKyB2YWx1ZSxcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIGZhY3Q7XG4gICAgfTtcblxuICAgIGV4cG9ydCBjb25zdCBzdHJpbmdQcm9wVG9GYWN0ID0gKHByb3A6IFN0cmluZ1Byb3AsIHZhbHVlOiBzdHJpbmcpID0+IHtcbiAgICAgICAgY29uc3QgZmFjdDogRmFjdC5TdHJpbmcgPSB7XG4gICAgICAgICAgICBraW5kOiBcInN0cmluZy1mYWN0XCIsXG4gICAgICAgICAgICByZWZlcmVuY2VJZDogcHJvcC5wcm9wTmFtZSxcbiAgICAgICAgICAgIHJlZmVyZW5jZUxhYmVsOiBcIiBbU1RBVEVfUFJPUEVSVFldIDogXCIgKyBwcm9wLnByb3BOYW1lLFxuICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICBsYWJlbDogXCIgW1ZBTFVFXSA6IFwiICsgdmFsdWUsXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBmYWN0O1xuICAgIH07XG59XG4iLCAiaW1wb3J0IHsgRmFjdCB9IGZyb20gXCIuLi9ydWxlcy9mYWN0XCI7XG5pbXBvcnQgeyBSZXN1bHQgfSBmcm9tIFwiLi4vY29tbW9uL3Jlc3VsdFwiO1xuaW1wb3J0IHsgQ29uZGl0aW9uIH0gZnJvbSBcIi4uL3J1bGVzL2NvbmRpdGlvblwiO1xuaW1wb3J0IHsgRFN0YXRlIH0gZnJvbSBcIi4vRHN0YXRlXCI7XG5pbXBvcnQgeyBERXZlbnREaXNwYXRjaGVyIH0gZnJvbSBcIi4uL2V2ZW50cy9ldmVudC1idXNcIjtcbmltcG9ydCB7IERUaW1lc3RhbXAgfSBmcm9tIFwiLi4vY29tbW9uL0RUaW1lc3RhbXBcIjtcbmltcG9ydCB7IFF1ZXJ5Q2hhbmdlZEV2ZW50IH0gZnJvbSBcIi4uL2V2ZW50cy9ERXZlbnRzXCI7XG5pbXBvcnQgeyBEQ29tbWFuZEJ1cyB9IGZyb20gXCIuLi9jb21tYW5kcy9EQ29tbWFuZEJ1c1wiO1xuXG5leHBvcnQgY2xhc3MgU3RhdGVTZXJ2aWNlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBUQUcgPSBcIiBbIFNUQVRFX1NFUlZJQ0UgXSA6XCI7XG4gIHByaXZhdGUgcmVhZG9ubHkgZmFjdHNTdHJpbmcgPSBuZXcgTWFwPHN0cmluZywgRmFjdC5TdHJpbmc+KCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgZmFjdHNOdW1lcmljID0gbmV3IE1hcDxzdHJpbmcsIEZhY3QuTnVtZXJpYz4oKTtcbiAgcHJpdmF0ZSByZWFkb25seSBwcm9wRGVmaW5pdGlvbnMgPSBuZXcgTWFwPHN0cmluZywgRFN0YXRlLlByb3A+KCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgcXVlcmllcyA9IG5ldyBNYXA8c3RyaW5nLCB7IHF1ZXJ5OiBEU3RhdGUuU3RhdGVRdWVyeTsgbGFzdFJlc3VsdDogYm9vbGVhbiB9PigpO1xuICBwcml2YXRlIHJlYWRvbmx5IHVuc3Vic2NyaWJlQ29tbWFuZHM6ICgpID0+IHZvaWQ7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgZXZlbnRCdXM6IERFdmVudERpc3BhdGNoZXIsXG4gICAgcHJpdmF0ZSByZWFkb25seSBjb21tYW5kQnVzOiBEQ29tbWFuZEJ1cyxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHByb3BzOiBSZWFkb25seUFycmF5PERTdGF0ZS5Qcm9wPixcbiAgICBwcml2YXRlIHJlYWRvbmx5IHF1ZXJ5TGlzdDogUmVhZG9ubHlBcnJheTxEU3RhdGUuU3RhdGVRdWVyeT4gPSBbXSxcbiAgKSB7XG4gICAgcHJvcHMuZm9yRWFjaCgocHJvcCkgPT4ge1xuICAgICAgdGhpcy5yZWdpc3RlclByb3BlcnR5KHByb3ApO1xuICAgIH0pO1xuICAgIGNvbnN0IGZhY3RzID0gdGhpcy5nZXRBbGxGYWN0cygpO1xuICAgIHF1ZXJ5TGlzdC5mb3JFYWNoKChkZWZpbml0aW9uKSA9PiB7XG4gICAgICB0aGlzLnJlZ2lzdGVyUXVlcnkoZGVmaW5pdGlvbiwgZmFjdHMpO1xuICAgIH0pO1xuXG4gICAgdGhpcy5ldmFsdWF0ZVF1ZXJpZXMoKTtcbiAgICB0aGlzLnVuc3Vic2NyaWJlQ29tbWFuZHMgPSB0aGlzLmNvbW1hbmRCdXMuc3Vic2NyaWJlKChjb21tYW5kKSA9PiB7XG4gICAgICBpZiAoY29tbWFuZC5raW5kID09PSBcIlNUQVRFX01VVEFURV9DT01NQU5EXCIpIHtcbiAgICAgICAgdGhpcy5tdXRhdGlvbihjb21tYW5kLnBheWxvYWQubXV0YXRpb24pO1xuICAgICAgfVxuICAgIH0sIHRoaXMuVEFHKTtcbiAgfVxuXG4gIGRlc3Ryb3koKSB7XG4gICAgdGhpcy51bnN1YnNjcmliZUNvbW1hbmRzKCk7XG4gIH1cblxuICBwcml2YXRlIHJlZ2lzdGVyUXVlcnkocXVlcnk6IERTdGF0ZS5TdGF0ZVF1ZXJ5LCBjdXJyZW50RmFjdHM6IFJlYWRvbmx5QXJyYXk8RmFjdD4pIHtcbiAgICBjb25zdCByZXN1bHQgPSBDb25kaXRpb24uZXZhbHVhdGUocXVlcnkuY29uZGl0aW9uLCBjdXJyZW50RmFjdHMpO1xuICAgIHRoaXMucXVlcmllcy5zZXQocXVlcnkubmFtZSwgeyBxdWVyeTogcXVlcnksIGxhc3RSZXN1bHQ6IHJlc3VsdCB9KTtcbiAgICB0aGlzLmVtaXRRdWVyeUNoYW5nZWRFdmVudCh7IHF1ZXJ5TmFtZTogcXVlcnkubmFtZSwgcHJldjogcmVzdWx0LCBjdXJyOiByZXN1bHQgfSk7XG4gIH1cblxuICBwcml2YXRlIHJlZ2lzdGVyUHJvcGVydHkocHJvcDogRFN0YXRlLlByb3ApIHtcbiAgICBpZiAodGhpcy5wcm9wRGVmaW5pdGlvbnMuaGFzKHByb3AucHJvcE5hbWUpKSB7XG4gICAgICAvLyBMT0dHSU5HXG4gICAgICBjb25zb2xlLndhcm4oXCJQcm9wIGV4Y2lzdHMgYWxyZWFkeS5cIiwgcHJvcC5wcm9wTmFtZSk7XG4gICAgfVxuXG4gICAgdGhpcy5wcm9wRGVmaW5pdGlvbnMuc2V0KHByb3AucHJvcE5hbWUsIHByb3ApO1xuXG4gICAgaWYgKHByb3AuaW5pdGlhbFZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAocHJvcC5fdHlwZSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgY29uc3QgZmFjdCA9IERTdGF0ZS5zdHJpbmdQcm9wVG9GYWN0KHByb3AsIHByb3AuaW5pdGlhbFZhbHVlKTtcbiAgICAgIHRoaXMuZmFjdHNTdHJpbmcuc2V0KGZhY3QucmVmZXJlbmNlSWQsIGZhY3QpO1xuICAgIH1cbiAgICBpZiAocHJvcC5fdHlwZSA9PT0gXCJudW1iZXJcIikge1xuICAgICAgY29uc3QgZmFjdCA9IERTdGF0ZS5udW1lcmljUHJvcFRvRmFjdChwcm9wLCBwcm9wLmluaXRpYWxWYWx1ZSk7XG4gICAgICB0aGlzLmZhY3RzTnVtZXJpYy5zZXQoZmFjdC5yZWZlcmVuY2VJZCwgZmFjdCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBtdXRhdGVTdHJpbmcocHJvcDogRFN0YXRlLlN0cmluZ1Byb3AsIHZhbHVlOiBzdHJpbmcpIHtcbiAgICBjb25zdCBjdXJyID0gdGhpcy5mYWN0c1N0cmluZy5nZXQocHJvcC5wcm9wTmFtZSk7XG4gICAgaWYgKGN1cnIpIHtcbiAgICAgIGNvbnN0IHVwZGF0ZWQ6IEZhY3QuU3RyaW5nID0geyAuLi5jdXJyLCB2YWx1ZSB9O1xuICAgICAgdGhpcy5zZXRGYWN0KHVwZGF0ZWQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBjcmVhdGVkOiBGYWN0LlN0cmluZyA9IHtcbiAgICAgICAga2luZDogXCJzdHJpbmctZmFjdFwiLFxuICAgICAgICByZWZlcmVuY2VJZDogcHJvcC5wcm9wTmFtZSxcbiAgICAgICAgcmVmZXJlbmNlTGFiZWw6IFwibGFiZWwgZm9yOiBcIiArIHByb3AucHJvcE5hbWUsXG4gICAgICAgIHZhbHVlLFxuICAgICAgICBsYWJlbDogXCJWYWx1ZTogXCIgKyB2YWx1ZSxcbiAgICAgIH07XG4gICAgICB0aGlzLnNldEZhY3QoY3JlYXRlZCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBtdXRhdGVOdW1iZXIocHJvcDogRFN0YXRlLk51bWVyaWNQcm9wLCBtdXRhdGlvbjogRFN0YXRlLk51bWJlck11dGF0aW9ucykge1xuICAgIGNvbnN0IGN1cnIgPSB0aGlzLmZhY3RzTnVtZXJpYy5nZXQocHJvcC5wcm9wTmFtZSk7XG4gICAgaWYgKCFjdXJyKSB7XG4gICAgICBzd2l0Y2ggKG11dGF0aW9uLmtpbmQpIHtcbiAgICAgICAgY2FzZSBcInNldC1udW1iZXJcIjpcbiAgICAgICAgICB0aGlzLnNldEZhY3QoRFN0YXRlLm51bWVyaWNQcm9wVG9GYWN0KHByb3AsIG11dGF0aW9uLnZhbHVlKSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJkZWNyZW1lbnQtbnVtYmVyXCI6XG4gICAgICAgICAgdGhpcy5zZXRGYWN0KERTdGF0ZS5udW1lcmljUHJvcFRvRmFjdChwcm9wLCBtdXRhdGlvbi5pZk5vdEV4aXN0VGhlblNldFRvKSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJpbmNyZW1lbnQtbnVtYmVyXCI6XG4gICAgICAgICAgdGhpcy5zZXRGYWN0KERTdGF0ZS5udW1lcmljUHJvcFRvRmFjdChwcm9wLCBtdXRhdGlvbi5pZk5vdEV4aXN0VGhlblNldFRvKSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgY29uc3QgY2hlY2s6IG5ldmVyID0gbXV0YXRpb247XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChjdXJyKSB7XG4gICAgICBzd2l0Y2ggKG11dGF0aW9uLmtpbmQpIHtcbiAgICAgICAgY2FzZSBcInNldC1udW1iZXJcIjpcbiAgICAgICAgICB0aGlzLnNldEZhY3QoeyAuLi5jdXJyLCB2YWx1ZTogbXV0YXRpb24udmFsdWUgfSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJkZWNyZW1lbnQtbnVtYmVyXCI6XG4gICAgICAgICAgdGhpcy5zZXRGYWN0KHsgLi4uY3VyciwgdmFsdWU6IGN1cnIudmFsdWUgLSBtdXRhdGlvbi5zdGVwU2l6ZSB9KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcImluY3JlbWVudC1udW1iZXJcIjpcbiAgICAgICAgICB0aGlzLnNldEZhY3QoeyAuLi5jdXJyLCB2YWx1ZTogY3Vyci52YWx1ZSArIG11dGF0aW9uLnN0ZXBTaXplIH0pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGNvbnN0IGNoZWNrOiBuZXZlciA9IG11dGF0aW9uO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZXZhbHVhdGVRdWVyaWVzKCk6IFJlYWRvbmx5QXJyYXk8eyBxdWVyeU5hbWU6IHN0cmluZzsgcHJldjogYm9vbGVhbjsgY3VycjogYm9vbGVhbjsgZGlkQ2hhbmdlOiBib29sZWFuIH0+IHtcbiAgICBjb25zdCBmYWN0cyA9IHRoaXMuZ2V0QWxsRmFjdHMoKTtcbiAgICBjb25zdCBhbGw6IEFycmF5PHsgcXVlcnlOYW1lOiBzdHJpbmc7IHByZXY6IGJvb2xlYW47IGN1cnI6IGJvb2xlYW47IGRpZENoYW5nZTogYm9vbGVhbiB9PiA9IFtdO1xuICAgIHRoaXMucXVlcmllcy5mb3JFYWNoKChxKSA9PiB7XG4gICAgICBjb25zdCBwcmV2ID0gcS5sYXN0UmVzdWx0O1xuXG4gICAgICBjb25zdCBjdXJyID0gQ29uZGl0aW9uLmV2YWx1YXRlKHEucXVlcnkuY29uZGl0aW9uLCBmYWN0cyk7XG4gICAgICBjb25zdCBkaWRDaGFuZ2UgPSBwcmV2ICE9PSBjdXJyO1xuICAgICAgcS5sYXN0UmVzdWx0ID0gY3VycjtcbiAgICAgIGFsbC5wdXNoKHsgcXVlcnlOYW1lOiBxLnF1ZXJ5Lm5hbWUsIHByZXYsIGN1cnIsIGRpZENoYW5nZSB9KTtcbiAgICAgIC8vIGRlZi52YWx1ZSA9IHZhbHVlO1xuICAgIH0pO1xuICAgIHJldHVybiBhbGw7XG4gIH1cblxuICBwcml2YXRlIG11dGF0aW9uKG11dGF0aW9uOiBEU3RhdGUuU3RhdGVNdXRhdGlvbik6IHsgc3VjY2VzczogYm9vbGVhbiB9IHtcbiAgICBjb25zdCBwcm9wRGVmID0gdGhpcy5wcm9wRGVmaW5pdGlvbnMuZ2V0KG11dGF0aW9uLnByb3BOYW1lKTtcbiAgICBpZiAoIXByb3BEZWYpIHtcbiAgICAgIC8vIFRPRE8gTE9HR0lOR1xuICAgICAgcmV0dXJuIHsgc3VjY2VzczogZmFsc2UgfTtcbiAgICB9XG5cbiAgICBpZiAocHJvcERlZi5fdHlwZSA9PT0gXCJzdHJpbmdcIiAmJiBEU3RhdGUuaXNTdHJpbmdNdXRhdGlvbihtdXRhdGlvbikpIHtcbiAgICAgIHRoaXMubXV0YXRlU3RyaW5nKHByb3BEZWYsIG11dGF0aW9uLnZhbHVlKTtcbiAgICB9XG5cbiAgICBpZiAocHJvcERlZi5fdHlwZSA9PT0gXCJudW1iZXJcIiAmJiBEU3RhdGUuaXNOdW1iZXJNdXRhdGlvbihtdXRhdGlvbikpIHtcbiAgICAgIHRoaXMubXV0YXRlTnVtYmVyKHByb3BEZWYsIG11dGF0aW9uKTtcbiAgICB9XG4gICAgY29uc3QgcXVlcnlSZXN1bHRzID0gdGhpcy5ldmFsdWF0ZVF1ZXJpZXMoKTtcbiAgICBjb25zdCBjaGFuZ2VkUmVzdWx0ID0gcXVlcnlSZXN1bHRzLmZpbHRlcigocikgPT4gci5kaWRDaGFuZ2UpO1xuICAgIGNoYW5nZWRSZXN1bHQuZm9yRWFjaCgocmVzKSA9PiB7XG4gICAgICB0aGlzLmVtaXRRdWVyeUNoYW5nZWRFdmVudCh7IHF1ZXJ5TmFtZTogcmVzLnF1ZXJ5TmFtZSwgcHJldjogcmVzLnByZXYsIGN1cnI6IHJlcy5jdXJyIH0pO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIHsgc3VjY2VzczogdHJ1ZSB9O1xuICB9XG5cbiAgcHJpdmF0ZSBlbWl0UXVlcnlDaGFuZ2VkRXZlbnQoZGF0YTogeyBxdWVyeU5hbWU6IHN0cmluZzsgcHJldjogYm9vbGVhbjsgY3VycjogYm9vbGVhbiB9KSB7XG4gICAgY29uc3QgcXVlcnlDaGFuZ2VkRXZlbnQ6IFF1ZXJ5Q2hhbmdlZEV2ZW50ID0ge1xuICAgICAga2luZDogXCJTVEFURV9RVUVSWV9SRVNVTFRfQ0hBTkdFRF9FVkVOVFwiLFxuICAgICAgcHJvZHVjZXI6IFwiU1RBVEUtU0VSVklDRVwiLFxuICAgICAgcHJvZHVjZXJJZDogXCJTVEFURS1TRVJWSUNFXCIsXG4gICAgICB0aW1lc3RhbXA6IERUaW1lc3RhbXAubm93KCksXG4gICAgICBkYXRhLFxuICAgIH07XG4gICAgY29uc3QgeyBxdWVyeU5hbWUsIGN1cnIsIHByZXYgfSA9IHF1ZXJ5Q2hhbmdlZEV2ZW50LmRhdGE7XG4gICAgLy8gY29uc29sZS5sb2coXCJbIFFVRVJZX0NIQU5HRUQgXCIgKyBxdWVyeU5hbWUgKyBcIl0gOiBcIiArIHByZXYgKyBcIiAtPiBcIiArIGN1cnIpO1xuICAgIHRoaXMuZXZlbnRCdXMuZW1pdChxdWVyeUNoYW5nZWRFdmVudCk7XG4gIH1cblxuICBnZXRQcm9wQXNGYWN0KHByb3BOYW1lOiBzdHJpbmcpOiBSZXN1bHQ8RmFjdD4ge1xuICAgIGNvbnN0IHByb3BEZWYgPSB0aGlzLnByb3BEZWZpbml0aW9ucy5nZXQocHJvcE5hbWUpO1xuICAgIGlmICghcHJvcERlZikge1xuICAgICAgcmV0dXJuIFJlc3VsdC5mYWlsdXJlKFxuICAgICAgICBcIk5vIGRlZmluaXRpb24gZm9ybSBwcm9wZXJ0eSBueSBuYW1lIFwiICsgcHJvcE5hbWUgKyBcIiBpcyByZWdpc3RlcmVkLiAoUGFzcyBpbiBjb25zdHJ1Y3Rvci4pXCIsXG4gICAgICApO1xuICAgIH1cbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZmFjdHNTdHJpbmcuZ2V0KHByb3BOYW1lKSA/PyB0aGlzLmZhY3RzTnVtZXJpYy5nZXQocHJvcE5hbWUpO1xuXG4gICAgcmV0dXJuIHZhbHVlID8gUmVzdWx0Lm9rKHZhbHVlKSA6IFJlc3VsdC5mYWlsdXJlKFwiUHJvcGVydHkgXCIgKyBwcm9wTmFtZSArIFwiIGhhcyBubyB2YWx1ZS5cIik7XG4gIH1cblxuICBwcml2YXRlIHNldEZhY3QoZmFjdDogRmFjdCkge1xuICAgIHN3aXRjaCAoZmFjdC5raW5kKSB7XG4gICAgICBjYXNlIFwibnVtZXJpYy1mYWN0XCI6XG4gICAgICAgIHRoaXMuZmFjdHNOdW1lcmljLnNldChmYWN0LnJlZmVyZW5jZUlkLCBmYWN0KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwic3RyaW5nLWZhY3RcIjpcbiAgICAgICAgdGhpcy5mYWN0c1N0cmluZy5zZXQoZmFjdC5yZWZlcmVuY2VJZCwgZmFjdCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgY29uc3QgY2hlY2s6IG5ldmVyID0gZmFjdDtcbiAgICB9XG4gIH1cblxuICBnZXRTdGF0ZSgpIHtcbiAgICBjb25zdCBwcm9wczogUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgbnVtYmVyIHwgbnVsbCB8IGJvb2xlYW4+ID0ge307XG4gICAgdGhpcy5wcm9wRGVmaW5pdGlvbnMuZm9yRWFjaCgoZGVmKSA9PiB7XG4gICAgICBsZXQgdmFsdWU6IHN0cmluZyB8IG51bWJlciB8IG51bGwgPSBudWxsO1xuICAgICAgY29uc3QgbWF5YmVGYWN0ID0gdGhpcy5nZXRBbnlGYWN0KGRlZi5wcm9wTmFtZSk7XG4gICAgICBpZiAobWF5YmVGYWN0KSB7XG4gICAgICAgIHZhbHVlID0gbWF5YmVGYWN0LnZhbHVlO1xuICAgICAgfVxuICAgICAgcHJvcHNbZGVmLnByb3BOYW1lXSA9IHZhbHVlO1xuICAgIH0pO1xuICAgIHRoaXMucXVlcmllcy5mb3JFYWNoKChxdWVyeSkgPT4ge1xuICAgICAgcHJvcHNbcXVlcnkucXVlcnkubmFtZV0gPSBxdWVyeS5sYXN0UmVzdWx0O1xuICAgIH0pO1xuXG4gICAgY29uc3QgcHJvcE5hbWVzID0gT2JqZWN0LmtleXMocHJvcHMpO1xuICAgIGNvbnN0IHByb3BDb3VudCA9IHByb3BOYW1lcy5sZW5ndGg7XG4gICAgY29uc3QgcHJvcEFycmF5ID0gWy4uLnRoaXMucHJvcERlZmluaXRpb25zLnZhbHVlcygpXTtcblxuICAgIHJldHVybiB7IHByb3BDb3VudCwgcHJvcE5hbWVzLCBwcm9wQXJyYXksIHN0YXRlOiBwcm9wcyB9O1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRBbnlGYWN0KHByb3BOYW1lOiBzdHJpbmcpOiBGYWN0IHwgZmFsc2Uge1xuICAgIHJldHVybiB0aGlzLmZhY3RzU3RyaW5nLmdldChwcm9wTmFtZSkgPz8gdGhpcy5mYWN0c051bWVyaWMuZ2V0KHByb3BOYW1lKSA/PyBmYWxzZTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0QWxsRmFjdHMoKTogUmVhZG9ubHlBcnJheTxGYWN0PiB7XG4gICAgcmV0dXJuIFsuLi50aGlzLmZhY3RzTnVtZXJpYy52YWx1ZXMoKSwgLi4udGhpcy5mYWN0c1N0cmluZy52YWx1ZXMoKV07XG4gIH1cblxuICAvKipcbiAgICogV2lsbCBjaGVjayB0aGF0IGFsbCByZWZlcmVuY2VJZHMgdXNlZCBpbiBDb25kaXRpb24gaXMgcmVnaXN0ZXJlZCBhcyBhIHZhbGlkIHByb3BlcnR5IGluIHN0YXRlLlxuICAgKiBAcGFyYW0gY29uZGl0aW9uXG4gICAqL1xuICBjYW5CZU1hdGNoZWQoY29uZGl0aW9uOiBDb25kaXRpb24pOiBib29sZWFuIHtcbiAgICBjb25zdCBzaW1wbGVDb25kaXRpb25zID0gQ29uZGl0aW9uLmdldEFsbFNpbXBsZUNvbmRpdGlvbnMoY29uZGl0aW9uKTtcbiAgICBsZXQgaGFzQWxsID0gdHJ1ZTtcblxuICAgIGNvbnN0IGFsbElkcyA9IHNpbXBsZUNvbmRpdGlvbnMubWFwKChjKSA9PiBjLnJlZmVyZW5jZUlkKTtcblxuICAgIGNvbnN0IG1pc3NpbmdJZHM6IHN0cmluZ1tdID0gW107XG4gICAgYWxsSWRzLmZvckVhY2goKGlkKSA9PiB7XG4gICAgICBpZiAoIXRoaXMucHJvcERlZmluaXRpb25zLmhhcyhpZCkpIHtcbiAgICAgICAgaGFzQWxsID0gZmFsc2U7XG4gICAgICAgIG1pc3NpbmdJZHMucHVzaChpZCk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgY29uc29sZS5sb2codGhpcy5UQUcsIG1pc3NpbmdJZHMpO1xuXG4gICAgcmV0dXJuIGhhc0FsbDtcbiAgfVxuICBpc01hdGNoZWQoY29uZGl0aW9uOiBDb25kaXRpb24pIHtcbiAgICByZXR1cm4gQ29uZGl0aW9uLmV2YWx1YXRlKGNvbmRpdGlvbiwgdGhpcy5nZXRBbGxGYWN0cygpKTtcbiAgfVxufVxuIiwgImltcG9ydCB7IFNjaGVtYUR0byB9IGZyb20gXCIuLi9kdG8vU2NoZW1hRHRvXCI7XG5pbXBvcnQgeyBETWVkaWFNYW5hZ2VyIH0gZnJvbSBcIi4uL3NlcnZpY2VzL0RNZWRpYS1tYW5hZ2VyXCI7XG5pbXBvcnQgeyBEQ29tbWFuZEJ1cyB9IGZyb20gXCIuLi9jb21tYW5kcy9EQ29tbWFuZEJ1c1wiO1xuaW1wb3J0IHsgRXZlbnRCdXMgfSBmcm9tIFwiLi4vZXZlbnRzL2V2ZW50LWJ1c1wiO1xuaW1wb3J0IHsgRFBsYXllciB9IGZyb20gXCIuLi9wbGF5ZXIvZHBsYXllclwiO1xuaW1wb3J0IHsgQW5zd2VyZWRRdWVzdGlvbiB9IGZyb20gXCIuLi9wbGF5ZXIvaGlzdG9yeS1xdWVcIjtcbmltcG9ydCB7IERUaW1lc3RhbXAgfSBmcm9tIFwiLi4vY29tbW9uL0RUaW1lc3RhbXBcIjtcbmltcG9ydCB7IERQYWdlIH0gZnJvbSBcIi4vRFBhZ2VcIjtcbmltcG9ydCB7IFNjYWxlU2VydmljZSB9IGZyb20gXCIuL3NjYWxlXCI7XG5pbXBvcnQgeyBSZXNvdXJjZVByb3ZpZGVyIH0gZnJvbSBcIi4uL3NlcnZpY2VzL3Jlc291cmNlLXByb3ZpZGVyXCI7XG5pbXBvcnQgeyBTdGF0ZVNlcnZpY2UgfSBmcm9tIFwiLi4vc3RhdGUvc3RhdGUtc2VydmljZVwiO1xuaW1wb3J0IHsgRENvbW1hbmQsIFN0YXRlQ29tbWFuZCB9IGZyb20gXCIuLi9jb21tYW5kcy9EQ29tbWFuZFwiO1xuaW1wb3J0IHsgREV2ZW50IH0gZnJvbSBcIi4uL2V2ZW50cy9ERXZlbnRzXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRW5naW5lTG9nZ2VyIHtcbiAgZXJyb3IobWVzc2FnZTogc3RyaW5nKTogdm9pZDtcbiAgd2FybihtZXNzYWdlOiBzdHJpbmcpOiB2b2lkO1xuICBhcHBFdmVudChldmVudDogREV2ZW50KTogdm9pZDtcbiAgYXBwQ29tbWFuZChjb21tYW5kOiBEQ29tbWFuZCk6IHZvaWQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2NoZW1hUmVzdWx0IHtcbiAgcmVhZG9ubHkgZXZlbnRMb2c6IFJlYWRvbmx5QXJyYXk8REV2ZW50PjtcbiAgcmVhZG9ubHkgY29tbWFuZExvZzogUmVhZG9ubHlBcnJheTxEQ29tbWFuZD47XG4gIHJlYWRvbmx5IGFuc3dlcnM6IFJlYWRvbmx5QXJyYXk8YW55Pjtcbn1cbmV4cG9ydCBpbnRlcmZhY2UgSVNjaGVtYUVuZ2luZSB7XG4gIG9uQ29tcGxldGUoaGFuZGxlcjogKHJlc3VsdDogU2NoZW1hUmVzdWx0KSA9PiB2b2lkKTogdm9pZDtcbiAgb25Db21tYW5kT3JFdmVudChpdGVtOiBERXZlbnQgfCBEQ29tbWFuZCk6IHZvaWQ7XG4gIHNldFNjaGVtYShzY2hlbWE6IFNjaGVtYUR0byk6IHZvaWQ7XG4gIG9uRmF0YWxFcnJvcihoYW5kbGVyOiAoZXJyb3I6IHsgbWVzc2FnZTogc3RyaW5nIH0pID0+IHZvaWQpOiB2b2lkO1xufVxuXG5leHBvcnQgY2xhc3MgU2NoZW1hRW5naW5lIGltcGxlbWVudHMgSVNjaGVtYUVuZ2luZSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgVEFHID0gXCJbIFNDSEVNQV9FTkdJTkUgXSA6XCI7XG4gIHByaXZhdGUgcmVhZG9ubHkgY29tbWFuZEJ1cyA9IG5ldyBEQ29tbWFuZEJ1cygpO1xuICBwcml2YXRlIHJlYWRvbmx5IGV2ZW50QnVzID0gbmV3IEV2ZW50QnVzKCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgbWVkaWFNYW5hZ2VyOiBETWVkaWFNYW5hZ2VyO1xuICBwcml2YXRlIHJlYWRvbmx5IHNjYWxlOiBTY2FsZVNlcnZpY2U7XG4gIHByaXZhdGUgcmVhZG9ubHkgaG9zdEVsZW1lbnQ6IEhUTUxEaXZFbGVtZW50O1xuICBwcml2YXRlIHJlYWRvbmx5IHVpQ29udGFpbmVyOiBIVE1MRGl2RWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gIHByaXZhdGUgcmVhZG9ubHkgbWVkaWFDb250YWluZXI6IEhUTUxEaXZFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgcHJpdmF0ZSByZWFkb25seSByZXNvdXJjZVByb3ZpZGVyOiBSZXNvdXJjZVByb3ZpZGVyO1xuICBwcml2YXRlIHJlYWRvbmx5IHN0YXRlU2VydmljZTogU3RhdGVTZXJ2aWNlO1xuICBwcml2YXRlIHJlYWRvbmx5IGdsb2JhbEV2ZW50VG9TdGF0ZUhhbmRsZXJzID0gbmV3IE1hcDxzdHJpbmcsIFJlYWRvbmx5QXJyYXk8U3RhdGVDb21tYW5kPj4oKTtcbiAgcHJpdmF0ZSBwbGF5ZXI6IERQbGF5ZXI7XG4gIHByaXZhdGUgY3VycmVudFBhZ2U6IERQYWdlIHwgZmFsc2UgPSBmYWxzZTtcbiAgcHJpdmF0ZSByZWFkb25seSBzdWJzOiBBcnJheTwoKSA9PiB2b2lkPiA9IFtdO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIGhvc3RFbDogSFRNTERpdkVsZW1lbnQsXG4gICAgcHJpdmF0ZSByZWFkb25seSBoZWlnaHQ6IG51bWJlcixcbiAgICBwcml2YXRlIHJlYWRvbmx5IHdpZHRoOiBudW1iZXIsXG4gICAgcHJpdmF0ZSByZWFkb25seSBzY2hlbWE6IFNjaGVtYUR0byxcbiAgKSB7XG4gICAgdGhpcy5ob3N0RWxlbWVudCA9IGhvc3RFbDtcbiAgICB0aGlzLmhvc3RFbGVtZW50LmFwcGVuZENoaWxkKHRoaXMudWlDb250YWluZXIpO1xuICAgIHRoaXMuaG9zdEVsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy5tZWRpYUNvbnRhaW5lcik7XG4gICAgY29uc3Qgc3RhdGVQcm9wcyA9IHRoaXMuc2NoZW1hLnN0YXRlUHJvcHMgPz8gW107XG4gICAgY29uc3Qgc3RhdGVRdWVyaWVzID0gdGhpcy5zY2hlbWEuc3RhdGVRdWVyaWVzID8/IFtdO1xuICAgIHRoaXMuc3RhdGVTZXJ2aWNlID0gbmV3IFN0YXRlU2VydmljZSh0aGlzLmV2ZW50QnVzLCB0aGlzLmNvbW1hbmRCdXMsIHN0YXRlUHJvcHMsIHN0YXRlUXVlcmllcyk7XG4gICAgdGhpcy5zY2FsZSA9IG5ldyBTY2FsZVNlcnZpY2Uoe1xuICAgICAgYmFzZUhlaWdodDogc2NoZW1hLmJhc2VIZWlnaHQsXG4gICAgICBiYXNlV2lkdGg6IHNjaGVtYS5iYXNlV2lkdGgsXG4gICAgICBjb250YWluZXJXaWR0aDogd2lkdGgsXG4gICAgICBjb250YWluZXJIZWlnaHQ6IGhlaWdodCxcbiAgICB9KTtcbiAgICAvLyB0aGlzLmNvbW1hbmRCdXMubG9nQ29tbWFuZHMgPSB0cnVlO1xuICAgIGNvbnN0IGdsb2JhbEV2ZW50SGFuZGxlcnMgPSBzY2hlbWEuc3RhdGVGcm9tRXZlbnQgPz8gW107XG5cbiAgICBnbG9iYWxFdmVudEhhbmRsZXJzLmZvckVhY2goKGgpID0+IHtcbiAgICAgIHRoaXMuZ2xvYmFsRXZlbnRUb1N0YXRlSGFuZGxlcnMuc2V0KGgub25FdmVudCwgaC50aGVuRXhlY3V0ZSk7XG4gICAgfSk7XG5cbiAgICBjb25zdCByZXNvdXJjZXMgPSBTY2hlbWFEdG8uZ2V0UmVzb3VyY2VzKHRoaXMuc2NoZW1hKTtcbiAgICB0aGlzLnJlc291cmNlUHJvdmlkZXIgPSBuZXcgUmVzb3VyY2VQcm92aWRlcih7IHZpZGVvczogcmVzb3VyY2VzLnZpZGVvTGlzdCwgYXVkaW86IHJlc291cmNlcy5hdWRpb0xpc3QgfSk7XG4gICAgdGhpcy5tZWRpYU1hbmFnZXIgPSBuZXcgRE1lZGlhTWFuYWdlcihcbiAgICAgIHRoaXMubWVkaWFDb250YWluZXIsXG4gICAgICB0aGlzLmNvbW1hbmRCdXMsXG4gICAgICB0aGlzLmV2ZW50QnVzLFxuICAgICAgdGhpcy5yZXNvdXJjZVByb3ZpZGVyLFxuICAgICAgdGhpcy5zY2FsZSxcbiAgICApO1xuICAgIHRoaXMucGxheWVyID0gbmV3IERQbGF5ZXIodGhpcy5zY2hlbWEpO1xuICAgIHRoaXMuc3R5bGVTZWxmKCk7XG4gICAgdGhpcy5uZXh0UGFnZSgpO1xuICAgIHRoaXMuaG9va1VwTGlzdGVuZXJzKCk7XG4gIH1cblxuICBwcml2YXRlIGhvb2tVcExpc3RlbmVycygpIHtcbiAgICBjb25zdCBldmVudFN1YnNjcmlwdGlvbiA9IHRoaXMuZXZlbnRCdXMuc3Vic2NyaWJlKChldikgPT4ge1xuICAgICAgdGhpcy5vbkNvbW1hbmRPckV2ZW50KGV2KTtcbiAgICAgIGNvbnN0IGdsb2JhbEhhbmRsZXJzID0gdGhpcy5nbG9iYWxFdmVudFRvU3RhdGVIYW5kbGVycy5nZXQoZXYua2luZCkgPz8gW107XG4gICAgICBnbG9iYWxIYW5kbGVycy5mb3JFYWNoKChzdGF0ZUNvbW1hbmQpID0+IHtcbiAgICAgICAgdGhpcy5jb21tYW5kQnVzLmVtaXQoc3RhdGVDb21tYW5kKTtcbiAgICAgIH0pO1xuICAgIH0sIHRoaXMuVEFHICsgXCJIT09LX1VQX0xJU1RFTkVSU1wiKTtcbiAgICBjb25zdCBjb21tYW5kU3Vic2NyaXB0aW9uID0gdGhpcy5jb21tYW5kQnVzLnN1YnNjcmliZSgoY29tbWFuZCkgPT4ge1xuICAgICAgLy8gc3dpdGNoIChjb21tYW5kLmtpbmQpIHtcbiAgICAgIC8vXG4gICAgICAvLyB9XG4gICAgICB0aGlzLm9uQ29tbWFuZE9yRXZlbnQoY29tbWFuZCk7XG4gICAgICBpZiAoY29tbWFuZC5raW5kID09PSBcIlBBR0VfUVVFX05FWFRfUEFHRV9DT01NQU5EXCIpIHtcbiAgICAgICAgdGhpcy5uZXh0UGFnZSgpO1xuICAgICAgfVxuXG4gICAgICBpZiAoY29tbWFuZC5raW5kID09PSBcIkVOR0lORV9MRUFWRV9QQUdFX0NPTU1BTkRcIikge1xuICAgICAgICBjb25zb2xlLmxvZyh0aGlzLlRBRyArIFwiU0VRVUVOQ0UgU1RBUlRFRCAtLSBUT0RPIEVWRU5UIEZPUiBUSElTPz9cIik7XG4gICAgICAgIGNvbnNvbGUubG9nKGNvbW1hbmQpO1xuICAgICAgICBjb25zdCBwYWdlSWQgPSBjb21tYW5kLnBheWxvYWQucGFnZUlkO1xuICAgICAgICBjb25zdCBmYWN0cyA9IGNvbW1hbmQucGF5bG9hZC5mYWN0c0NvbGxlY3RlZDtcbiAgICAgICAgY29uc3QgdGltZXN0YW1wID0gRFRpbWVzdGFtcC5ub3coKTtcbiAgICAgICAgY29uc3QgYW5zOiBBbnN3ZXJlZFF1ZXN0aW9uW10gPSBmYWN0cy5tYXAoKGYpID0+ICh7XG4gICAgICAgICAgdGltZXN0YW1wLFxuICAgICAgICAgIGZhY3Q6IGYsXG4gICAgICAgIH0pKTtcbiAgICAgICAgdGhpcy5wbGF5ZXIuc2F2ZUhpc3Rvcnkoe1xuICAgICAgICAgIGFuc3dlcmVkUXVlc3Rpb25zOiBhbnMsXG4gICAgICAgICAgcGFnZUlkLFxuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLm5leHRQYWdlKCk7XG4gICAgICAgIC8vIGNvbnN0IGhpc3Rvcnk6IFBhZ2VIaXN0b3J5ID0geyBwYWdlOiB7fSwgYW5zd2VyZWRRdWVzdGlvbnM6IFtdIH07XG4gICAgICB9XG4gICAgfSwgdGhpcy5UQUcpO1xuXG4gICAgdGhpcy5zdWJzLnB1c2goY29tbWFuZFN1YnNjcmlwdGlvbik7XG4gICAgdGhpcy5zdWJzLnB1c2goZXZlbnRTdWJzY3JpcHRpb24pO1xuICB9XG5cbiAgcHJpdmF0ZSBzdHlsZVNlbGYoKSB7XG4gICAgdGhpcy5ob3N0RWxlbWVudC5zdHlsZS5oZWlnaHQgPSB0aGlzLnNjYWxlLnBhZ2VIZWlnaHQgKyBcInB4XCI7XG4gICAgdGhpcy5ob3N0RWxlbWVudC5zdHlsZS53aWR0aCA9IHRoaXMuc2NhbGUucGFnZVdpZHRoICsgXCJweFwiO1xuICAgIHRoaXMuaG9zdEVsZW1lbnQuc3R5bGUuYmFja2dyb3VuZENvbG9yID0gdGhpcy5zY2hlbWEuYmFja2dyb3VuZENvbG9yID8/IFwid2hpdGVcIjtcbiAgICB0aGlzLmhvc3RFbGVtZW50LnN0eWxlLnBvc2l0aW9uID0gXCJyZWxhdGl2ZVwiO1xuICAgIC8vIHRoaXMuaG9zdEVsZW1lbnQuc3R5bGUub3ZlcmZsb3cgPSBcImhpZGRlblwiO1xuICAgIGNvbnN0IG1ha2VTdGF0aWMgPSAoZGl2OiBIVE1MRGl2RWxlbWVudCkgPT4ge1xuICAgICAgZGl2LnN0eWxlLmhlaWdodCA9IFwiMHB4XCI7XG4gICAgICBkaXYuc3R5bGUud2lkdGggPSBcIjBweFwiO1xuICAgICAgZGl2LnN0eWxlLnBvc2l0aW9uID0gXCJzdGF0aWNcIjtcbiAgICB9O1xuXG4gICAgbWFrZVN0YXRpYyh0aGlzLnVpQ29udGFpbmVyKTtcbiAgICBtYWtlU3RhdGljKHRoaXMubWVkaWFDb250YWluZXIpO1xuICB9XG5cbiAgcHJpdmF0ZSBuZXh0UGFnZSgpIHtcbiAgICAvLyBUT0RPIFNIT1VMRCBUSElTIEJFIFBBUlQgT0YgVEhFIFNDSEVNQT8/IFRISVMgSVMgQ0xFQU5VUCBMT0dJQ1xuICAgIC8vIHRoaXMuY29tbWFuZEJ1cy5lbWl0KHsga2luZDogXCJWSURFT19QQVVTRV9DT01NQU5EXCIsIHRhcmdldDogXCJWSURFT1wiLCB0YXJnZXRJZDogXCJWSURFT1wiLCBwYXlsb2FkOiB7fSB9KTtcbiAgICAvLyB0aGlzLmNvbW1hbmRCdXMuZW1pdCh7IGtpbmQ6IFwiQVVESU9fUEFVU0VfQ09NTUFORFwiLCB0YXJnZXQ6IFwiQVVESU9cIiwgdGFyZ2V0SWQ6IFwiQVVESU9cIiwgcGF5bG9hZDoge30gfSk7XG4gICAgLy8gY29uc3QgY3VyclBhZ2VJZCA9IHRoaXMuY3VycmVudFBhZ2UgPyB0aGlzLmN1cnJlbnRQYWdlLmlkIDogXCJOT19QQUdFXCI7XG4gICAgLy8gY29uc29sZS5ncm91cENvbGxhcHNlZChcIk5FWFRfUEFHRSBGUk9NOiBcIiArIGN1cnJQYWdlSWQpO1xuICAgIC8vIGNvbnNvbGUubG9nKHRoaXMuVEFHICsgXCIgTkVYVF9QQUdFIFNUQVJURUQgQVQ6IFwiICsgY3VyclBhZ2VJZCk7XG4gICAgdGhpcy5tZWRpYU1hbmFnZXIuY2xlYXJBbGxNZWRpYSgpO1xuICAgIGNvbnN0IG5leHRQYWdlID0gdGhpcy5wbGF5ZXIuZ2V0TmV4dFBhZ2UoKTtcbiAgICAvLyBjb25zdCBzdGF0ZSA9IHRoaXMuc3RhdGVTZXJ2aWNlLmdldFN0YXRlKCk7XG4gICAgLy8gY29uc29sZS5sb2coc3RhdGUpO1xuICAgIC8vIFRPRE8gQ0xFQU4gVVAgUEFHRSBDT01QT05FTlRTIHRoaXMucGFnZS5DbGVhblVwKClcbiAgICBpZiAodGhpcy5jdXJyZW50UGFnZSkge1xuICAgICAgdGhpcy5jdXJyZW50UGFnZS5kZXN0cm95KCk7XG4gICAgICB0aGlzLnVpQ29udGFpbmVyLmlubmVySFRNTCA9IFwiXCI7XG4gICAgfVxuICAgIGlmICghbmV4dFBhZ2UpIHtcbiAgICAgIC8vIFRPRE8gRklHVVJFIE9VVCBXSEFRVCBUTyBETyBBVCBFTkQgT0YgVEVTVCEhIFN0YXJ0IG92ZXI/P1xuICAgICAgdGhpcy5wbGF5ZXIgPSBuZXcgRFBsYXllcih0aGlzLnNjaGVtYSk7XG4gICAgICBpZiAodGhpcy5zY2hlbWEucGFnZXMubGVuZ3RoID4gMCkge1xuICAgICAgICB0aGlzLm5leHRQYWdlKCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGNvbnN0IG5ld1BhZ2UgPSBuZXcgRFBhZ2UobmV4dFBhZ2UsIHRoaXMuZXZlbnRCdXMsIHRoaXMuY29tbWFuZEJ1cywgdGhpcy5zY2FsZSk7XG5cbiAgICB0aGlzLmN1cnJlbnRQYWdlID0gbmV3UGFnZTtcbiAgICBuZXdQYWdlLmFwcGVuZFlvdXJzZWxmKHRoaXMudWlDb250YWluZXIpO1xuXG4gICAgdGhpcy5tZWRpYU1hbmFnZXIuc2V0UGFnZShuZXh0UGFnZSk7XG4gICAgY29uc3QgczEgPSB0aGlzLnN0YXRlU2VydmljZS5nZXRTdGF0ZSgpO1xuICAgIC8vIGNvbnNvbGUubG9nKHMxKTtcbiAgICAvLyBjb25zb2xlLmxvZyhcIk5leHQtcGFnZTogXCIgKyBuZXdQYWdlLmlkKTtcbiAgICAvLyBjb25zb2xlLmdyb3VwRW5kKCk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBkZXN0cm95KCkge1xuICAgIGlmICh0aGlzLmN1cnJlbnRQYWdlKSB7XG4gICAgICB0aGlzLmN1cnJlbnRQYWdlLmRlc3Ryb3koKTtcbiAgICAgIHRoaXMudWlDb250YWluZXIuaW5uZXJIVE1MID0gXCJcIjtcbiAgICB9XG4gICAgdGhpcy5tZWRpYU1hbmFnZXIuZGVzdHJveSgpO1xuICAgIHRoaXMuc3RhdGVTZXJ2aWNlLmRlc3Ryb3koKTtcbiAgICB0aGlzLnN1YnMuZm9yRWFjaCgoc3ViKSA9PiB7XG4gICAgICBzdWIoKTtcbiAgICB9KTtcbiAgICBjb25zdCBldlN0YXRzID0gdGhpcy5ldmVudEJ1cy5nZXRTdGF0cygpO1xuICAgIGNvbnN0IGNtZFN0YXRzID0gdGhpcy5jb21tYW5kQnVzLmdldFN0YXRzKCk7XG4gICAgY29uc29sZS5hc3NlcnQoZXZTdGF0cy5zdWJzY3JpYmVyc0NvdW50ID09PSAwLCB0aGlzLlRBRyArIFwiIEV2ZW50YnVzIHNob3VsZCBoYXZlIG5vIHN1YnNjcmliZXJzIFwiLCBldlN0YXRzKTtcbiAgICBjb25zb2xlLmFzc2VydChjbWRTdGF0cy5zdWJzY3JpYmVyc0NvdW50ID09PSAwLCB0aGlzLlRBRyArIFwiQ29tbWFuZGJ1cyBzaG91bGQgaGF2ZSBubyBzdWJzY3JpYmVyc1wiLCBjbWRTdGF0cyk7XG4gIH1cbiAgb25Db21wbGV0ZShoYW5kbGVyOiAocmVzdWx0OiBTY2hlbWFSZXN1bHQpID0+IHZvaWQpIHtcbiAgICBjb25zb2xlLmxvZyhoYW5kbGVyKTtcbiAgfVxuXG4gIG9uRmF0YWxFcnJvcihoYW5kbGVyOiAoZXJyb3I6IHsgbWVzc2FnZTogc3RyaW5nIH0pID0+IHZvaWQpOiB2b2lkIHtcbiAgICBjb25zb2xlLmxvZyhoYW5kbGVyKTtcbiAgfVxuXG4gIG9uQ29tbWFuZE9yRXZlbnQoX2V2ZW50X29yX2NvbW1hbmQ6IERFdmVudCB8IERDb21tYW5kKSB7fVxuXG4gIHNldFNjaGVtYShzY2hlbWE6IFNjaGVtYUR0byk6IHZvaWQge1xuICAgIGNvbnNvbGUubG9nKHNjaGVtYSk7XG4gIH1cbn1cbiIsICJpbXBvcnQgeyBEU3RhdGUgfSBmcm9tIFwiLi9Ec3RhdGVcIjtcbmltcG9ydCB7IENvbmRpdGlvbiB9IGZyb20gXCIuLi9ydWxlcy9jb25kaXRpb25cIjtcbmltcG9ydCB7IFN0YXRlQ29tbWFuZCB9IGZyb20gXCIuLi9jb21tYW5kcy9EQ29tbWFuZFwiO1xuXG5leHBvcnQgY2xhc3MgQm9vbGVhblN0YXRlUHJvcGVydHk8UHJvcE5hbWUgZXh0ZW5kcyBzdHJpbmc+IHtcbiAgICByZWFkb25seSBwcm9wTmFtZTogUHJvcE5hbWU7XG4gICAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgVFJVRSA9IHsgdmFsdWU6IDEsIGxhYmVsOiBcIlRSVUVcIiB9O1xuICAgIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IEZBTFNFID0geyB2YWx1ZTogMCwgbGFiZWw6IFwiRkFMU0VcIiB9O1xuICAgIHJlYWRvbmx5IHByb3BEZWZpbml0aW9uOiBEU3RhdGUuTnVtZXJpY1Byb3A7XG5cbiAgICBnZXRJc1RydWVDb25kaXRpb24oKTogQ29uZGl0aW9uLk51bWVyaWMge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAga2luZDogXCJudW1lcmljLWNvbmRpdGlvblwiLFxuICAgICAgICAgICAgcmVmZXJlbmNlSWQ6IHRoaXMucHJvcE5hbWUsXG4gICAgICAgICAgICByZWZlcmVuY2VMYWJlbDogdGhpcy5wcm9wTmFtZSArIFwiWyBCT09MRUFOIF1cIixcbiAgICAgICAgICAgIHZhbHVlTGFiZWw6IEJvb2xlYW5TdGF0ZVByb3BlcnR5LlRSVUUubGFiZWwsXG4gICAgICAgICAgICB2YWx1ZTogQm9vbGVhblN0YXRlUHJvcGVydHkuVFJVRS52YWx1ZSxcbiAgICAgICAgICAgIG9wZXJhdG9yOiBcImVxXCIsXG4gICAgICAgIH07XG4gICAgfVxuICAgIGdldElzRmFsc2VDb25kaXRpb24oKTogQ29uZGl0aW9uLk51bWVyaWMge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAga2luZDogXCJudW1lcmljLWNvbmRpdGlvblwiLFxuICAgICAgICAgICAgcmVmZXJlbmNlSWQ6IHRoaXMucHJvcE5hbWUsXG4gICAgICAgICAgICByZWZlcmVuY2VMYWJlbDogdGhpcy5wcm9wTmFtZSArIFwiWyBCT09MRUFOIF1cIixcbiAgICAgICAgICAgIHZhbHVlTGFiZWw6IEJvb2xlYW5TdGF0ZVByb3BlcnR5LkZBTFNFLmxhYmVsLFxuICAgICAgICAgICAgdmFsdWU6IEJvb2xlYW5TdGF0ZVByb3BlcnR5LkZBTFNFLnZhbHVlLFxuICAgICAgICAgICAgb3BlcmF0b3I6IFwiZXFcIixcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBnZXRTZXRUcnVlQ29tbWFuZCgpOiBTdGF0ZUNvbW1hbmQge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAga2luZDogXCJTVEFURV9NVVRBVEVfQ09NTUFORFwiLFxuICAgICAgICAgICAgdGFyZ2V0OiBcIlNUQVRFXCIsXG4gICAgICAgICAgICB0YXJnZXRJZDogXCJTVEFURVwiLFxuICAgICAgICAgICAgcGF5bG9hZDoge1xuICAgICAgICAgICAgICAgIG11dGF0aW9uOiB7IHByb3BOYW1lOiB0aGlzLnByb3BOYW1lLCBraW5kOiBcInNldC1udW1iZXJcIiwgdmFsdWU6IDEgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgZ2V0U2V0RmFsc2VDb21tYW5kKCk6IFN0YXRlQ29tbWFuZCB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBraW5kOiBcIlNUQVRFX01VVEFURV9DT01NQU5EXCIsXG4gICAgICAgICAgICB0YXJnZXQ6IFwiU1RBVEVcIixcbiAgICAgICAgICAgIHRhcmdldElkOiBcIlNUQVRFXCIsXG4gICAgICAgICAgICBwYXlsb2FkOiB7XG4gICAgICAgICAgICAgICAgbXV0YXRpb246IHsgcHJvcE5hbWU6IHRoaXMucHJvcE5hbWUsIGtpbmQ6IFwic2V0LW51bWJlclwiLCB2YWx1ZTogMCB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihwcm9wTmFtZTogUHJvcE5hbWUsIHByaXZhdGUgcmVhZG9ubHkgaW5pdGlhbFZhbHVlOiBib29sZWFuLCBkZXNjcmlwdGlvbjogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMucHJvcE5hbWUgPSBwcm9wTmFtZTtcbiAgICAgICAgY29uc3QgaW5pdGlhbCA9IGluaXRpYWxWYWx1ZSA/IDEgOiAwO1xuICAgICAgICBjb25zdCBwcm9wRGVzY3JpcHRpb24gPSBkZXNjcmlwdGlvbiA/IGRlc2NyaXB0aW9uIDogXCJObyBkZXNjcmlwdGlvbiBnaXZlblwiO1xuICAgICAgICB0aGlzLnByb3BEZWZpbml0aW9uID0ge1xuICAgICAgICAgICAgcHJvcERlc2NyaXB0aW9uLFxuICAgICAgICAgICAgcHJvcE5hbWU6IHByb3BOYW1lLFxuICAgICAgICAgICAgaW5pdGlhbFZhbHVlOiBpbml0aWFsLFxuICAgICAgICAgICAgb3B0aW9uczogW1xuICAgICAgICAgICAgICAgIHsgdmFsdWU6IEJvb2xlYW5TdGF0ZVByb3BlcnR5LkZBTFNFLnZhbHVlLCB2YWx1ZUxhYmVsOiBCb29sZWFuU3RhdGVQcm9wZXJ0eS5GQUxTRS5sYWJlbCB9LFxuICAgICAgICAgICAgICAgIHsgdmFsdWU6IEJvb2xlYW5TdGF0ZVByb3BlcnR5LlRSVUUudmFsdWUsIHZhbHVlTGFiZWw6IEJvb2xlYW5TdGF0ZVByb3BlcnR5LlRSVUUubGFiZWwgfSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBfdHlwZTogXCJudW1iZXJcIixcbiAgICAgICAgfTtcbiAgICB9XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7O0FDd0NPLElBQVU7QUFBQSxDQUFWLENBQVVBLGVBQVY7QUFDSSxFQUFNQSxXQUFBLGVBQWUsQ0FDeEIsV0FLQztBQUNELFVBQU0sRUFBRSxNQUFNLElBQUk7QUFDbEIsVUFBTSxZQUFZLE1BQU0sT0FBeUIsQ0FBQyxLQUFLLFNBQVM7QUFDNUQsVUFBSSxNQUFNLFFBQVEsS0FBSyxLQUFLLEdBQUc7QUFDM0IsWUFBSSxLQUFLLEdBQUcsS0FBSyxLQUFLO0FBQUEsTUFDMUI7QUFDQSxhQUFPO0FBQUEsSUFDWCxHQUFHLENBQUMsQ0FBQztBQUNMLFVBQU0sWUFBOEIsTUFBTSxPQUF5QixDQUFDLEtBQUssU0FBUztBQUM5RSxVQUFJLE1BQU0sUUFBUSxLQUFLLEtBQUssR0FBRztBQUMzQixZQUFJLEtBQUssR0FBRyxLQUFLLEtBQUs7QUFBQSxNQUMxQjtBQUNBLGFBQU87QUFBQSxJQUNYLEdBQUcsQ0FBQyxDQUFDO0FBRUwsV0FBTyxFQUFFLFdBQVcsV0FBVyxX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Q0o7QUFBQSxFQUVBLG9CQUFrQztBQUM5QixXQUFPO0FBQUEsTUFDSCxNQUFNO0FBQUEsTUFDTixRQUFRO0FBQUEsTUFDUixVQUFVO0FBQUEsTUFDVixTQUFTO0FBQUEsUUFDTCxVQUFVLEVBQUUsVUFBVSxLQUFLLFVBQVUsTUFBTSxjQUFjLE9BQU8sRUFBRTtBQUFBLE1BQ3RFO0FBQUEsSUFDSjtBQUFBLEVBQ0o7QUFBQSxFQUVBLHFCQUFtQztBQUMvQixXQUFPO0FBQUEsTUFDSCxNQUFNO0FBQUEsTUFDTixRQUFRO0FBQUEsTUFDUixVQUFVO0FBQUEsTUFDVixTQUFTO0FBQUEsUUFDTCxVQUFVLEVBQUUsVUFBVSxLQUFLLFVBQVUsTUFBTSxjQUFjLE9BQU8sRUFBRTtBQUFBLE1BQ3RFO0FBQUEsSUFDSjtBQUFBLEVBQ0o7QUFpQko7IiwKICAibmFtZXMiOiBbIlNjaGVtYUR0byIsICJEVGltZXN0YW1wIiwgIkRVdGlsIiwgImlzTnVtYmVyIiwgIkRDc3MiLCAiRFN0eWxlIiwgIkFuc3dlcmVkUXVlc3Rpb24iLCAiQ29uZGl0aW9uIiwgImNvbmRpdGlvbiIsICJSdWxlIiwgInRhZyIsICJERXZlbnRIYW5kbGVyIiwgImR0byIsICJkdG8iLCAiU2NhbGUiLCAiUmVzdWx0IiwgIkRTdGF0ZSJdCn0K
|