tiny-markdown-editor 0.2.0 → 0.2.1
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/README.md +88 -0
- package/dist/tiny-mde.js +67 -18
- package/dist/tiny-mde.min.js +1 -1
- package/dist/tiny-mde.tiny.js +1 -1
- package/lib/TinyMDE.d.ts +4 -0
- package/lib/TinyMDE.js +35 -17
- package/lib/grammar.d.ts +7 -0
- package/lib/grammar.js +27 -0
- package/package.json +1 -1
package/dist/tiny-mde.js
CHANGED
|
@@ -1619,6 +1619,37 @@
|
|
|
1619
1619
|
}
|
|
1620
1620
|
rule.start = new RegExp(re, rule.start.flags);
|
|
1621
1621
|
}
|
|
1622
|
+
/**
|
|
1623
|
+
* Creates a merged inline grammar by combining the default inline grammar with custom rules.
|
|
1624
|
+
* Custom rules are processed and their regexp patterns are expanded with replacements.
|
|
1625
|
+
* @param customRules - Object containing custom inline grammar rules
|
|
1626
|
+
* @returns Merged inline grammar object
|
|
1627
|
+
*/
|
|
1628
|
+
function createMergedInlineGrammar() {
|
|
1629
|
+
let customRules = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
1630
|
+
const merged = {
|
|
1631
|
+
...inlineGrammar
|
|
1632
|
+
};
|
|
1633
|
+
// Process custom rules
|
|
1634
|
+
for (const [ruleName, rule] of Object.entries(customRules)) {
|
|
1635
|
+
// Copy the rule to avoid modifying the original
|
|
1636
|
+
const processedRule = {
|
|
1637
|
+
...rule
|
|
1638
|
+
};
|
|
1639
|
+
// Process replacements in the regexp
|
|
1640
|
+
let regexpSource = rule.regexp.source;
|
|
1641
|
+
const replacementRegexp = new RegExp(Object.keys(replacements).join('|'));
|
|
1642
|
+
// Replace while there is something to replace
|
|
1643
|
+
while (regexpSource.match(replacementRegexp)) {
|
|
1644
|
+
regexpSource = regexpSource.replace(replacementRegexp, match => {
|
|
1645
|
+
return replacements[match].source;
|
|
1646
|
+
});
|
|
1647
|
+
}
|
|
1648
|
+
processedRule.regexp = new RegExp(regexpSource, rule.regexp.flags);
|
|
1649
|
+
merged[ruleName] = processedRule;
|
|
1650
|
+
}
|
|
1651
|
+
return merged;
|
|
1652
|
+
}
|
|
1622
1653
|
/**
|
|
1623
1654
|
* Escapes HTML special characters (<, >, and &) in the string.
|
|
1624
1655
|
* @param {string} string The raw string to be escaped
|
|
@@ -1812,6 +1843,8 @@
|
|
|
1812
1843
|
this.linkLabels = [];
|
|
1813
1844
|
this.lineDirty = [];
|
|
1814
1845
|
this.lastCommandState = null;
|
|
1846
|
+
this.customInlineGrammar = {};
|
|
1847
|
+
this.mergedInlineGrammar = inlineGrammar;
|
|
1815
1848
|
this.listeners = {
|
|
1816
1849
|
change: [],
|
|
1817
1850
|
selection: [],
|
|
@@ -1831,6 +1864,8 @@
|
|
|
1831
1864
|
this.linkLabels = [];
|
|
1832
1865
|
this.lineDirty = [];
|
|
1833
1866
|
this.lastCommandState = null;
|
|
1867
|
+
this.customInlineGrammar = props.customInlineGrammar || {};
|
|
1868
|
+
this.mergedInlineGrammar = createMergedInlineGrammar(this.customInlineGrammar);
|
|
1834
1869
|
this.listeners = {
|
|
1835
1870
|
change: [],
|
|
1836
1871
|
selection: [],
|
|
@@ -2304,17 +2339,31 @@
|
|
|
2304
2339
|
outer: while (string) {
|
|
2305
2340
|
// Process simple rules (non-delimiter)
|
|
2306
2341
|
for (let rule of ["escape", "code", "autolink", "html"]) {
|
|
2307
|
-
|
|
2308
|
-
|
|
2309
|
-
|
|
2310
|
-
|
|
2311
|
-
|
|
2312
|
-
|
|
2342
|
+
if (this.mergedInlineGrammar[rule]) {
|
|
2343
|
+
let cap = this.mergedInlineGrammar[rule].regexp.exec(string);
|
|
2344
|
+
if (cap) {
|
|
2345
|
+
string = string.substr(cap[0].length);
|
|
2346
|
+
offset += cap[0].length;
|
|
2347
|
+
processed += this.mergedInlineGrammar[rule].replacement.replace(/\$([1-9])/g, (str, p1) => htmlescape(cap[p1]));
|
|
2348
|
+
continue outer;
|
|
2349
|
+
}
|
|
2350
|
+
}
|
|
2351
|
+
}
|
|
2352
|
+
// Process custom inline grammar rules
|
|
2353
|
+
for (let rule in this.customInlineGrammar) {
|
|
2354
|
+
if (rule !== "escape" && rule !== "code" && rule !== "autolink" && rule !== "html" && rule !== "linkOpen" && rule !== "imageOpen" && rule !== "linkLabel" && rule !== "default") {
|
|
2355
|
+
let cap = this.mergedInlineGrammar[rule].regexp.exec(string);
|
|
2356
|
+
if (cap) {
|
|
2357
|
+
string = string.substr(cap[0].length);
|
|
2358
|
+
offset += cap[0].length;
|
|
2359
|
+
processed += this.mergedInlineGrammar[rule].replacement.replace(/\$([1-9])/g, (str, p1) => htmlescape(cap[p1]));
|
|
2360
|
+
continue outer;
|
|
2361
|
+
}
|
|
2313
2362
|
}
|
|
2314
2363
|
}
|
|
2315
2364
|
// Check for links / images
|
|
2316
|
-
let potentialLink = string.match(
|
|
2317
|
-
let potentialImage = string.match(
|
|
2365
|
+
let potentialLink = string.match(this.mergedInlineGrammar.linkOpen.regexp);
|
|
2366
|
+
let potentialImage = string.match(this.mergedInlineGrammar.imageOpen.regexp);
|
|
2318
2367
|
if (potentialImage || potentialLink) {
|
|
2319
2368
|
let result = this.parseLinkOrImage(string, !!potentialImage);
|
|
2320
2369
|
if (result) {
|
|
@@ -2419,11 +2468,11 @@
|
|
|
2419
2468
|
continue outer;
|
|
2420
2469
|
}
|
|
2421
2470
|
// Process 'default' rule
|
|
2422
|
-
cap =
|
|
2471
|
+
cap = this.mergedInlineGrammar.default.regexp.exec(string);
|
|
2423
2472
|
if (cap) {
|
|
2424
2473
|
string = string.substr(cap[0].length);
|
|
2425
2474
|
offset += cap[0].length;
|
|
2426
|
-
processed +=
|
|
2475
|
+
processed += this.mergedInlineGrammar.default.replacement.replace(/\$([1-9])/g, (str, p1) => htmlescape(cap[p1]));
|
|
2427
2476
|
continue outer;
|
|
2428
2477
|
}
|
|
2429
2478
|
throw "Infinite loop!";
|
|
@@ -2655,20 +2704,20 @@
|
|
|
2655
2704
|
let string = originalString.substr(currentOffset);
|
|
2656
2705
|
// Capture any escapes and code blocks at current position
|
|
2657
2706
|
for (let rule of ["escape", "code", "autolink", "html"]) {
|
|
2658
|
-
let cap =
|
|
2707
|
+
let cap = this.mergedInlineGrammar[rule].regexp.exec(string);
|
|
2659
2708
|
if (cap) {
|
|
2660
2709
|
currentOffset += cap[0].length;
|
|
2661
2710
|
continue textOuter;
|
|
2662
2711
|
}
|
|
2663
2712
|
}
|
|
2664
2713
|
// Check for image
|
|
2665
|
-
if (string.match(
|
|
2714
|
+
if (string.match(this.mergedInlineGrammar.imageOpen.regexp)) {
|
|
2666
2715
|
bracketLevel++;
|
|
2667
2716
|
currentOffset += 2;
|
|
2668
2717
|
continue textOuter;
|
|
2669
2718
|
}
|
|
2670
2719
|
// Check for link
|
|
2671
|
-
if (string.match(
|
|
2720
|
+
if (string.match(this.mergedInlineGrammar.linkOpen.regexp)) {
|
|
2672
2721
|
bracketLevel++;
|
|
2673
2722
|
if (!isImage) {
|
|
2674
2723
|
if (this.parseLinkOrImage(string, false)) {
|
|
@@ -2697,12 +2746,12 @@
|
|
|
2697
2746
|
// REFERENCE LINKS
|
|
2698
2747
|
if (nextChar === "[") {
|
|
2699
2748
|
let string = originalString.substr(currentOffset);
|
|
2700
|
-
let cap =
|
|
2749
|
+
let cap = this.mergedInlineGrammar.linkLabel.regexp.exec(string);
|
|
2701
2750
|
if (cap) {
|
|
2702
2751
|
currentOffset += cap[0].length;
|
|
2703
2752
|
linkLabel.push(cap[1], cap[2], cap[3]);
|
|
2704
|
-
if (cap[
|
|
2705
|
-
linkRef = cap[
|
|
2753
|
+
if (cap[this.mergedInlineGrammar.linkLabel.labelPlaceholder]) {
|
|
2754
|
+
linkRef = cap[this.mergedInlineGrammar.linkLabel.labelPlaceholder];
|
|
2706
2755
|
} else {
|
|
2707
2756
|
linkRef = linkText.trim();
|
|
2708
2757
|
}
|
|
@@ -2757,7 +2806,7 @@
|
|
|
2757
2806
|
continue inlineOuter;
|
|
2758
2807
|
}
|
|
2759
2808
|
// Process backslash escapes
|
|
2760
|
-
cap =
|
|
2809
|
+
cap = this.mergedInlineGrammar.escape.regexp.exec(string);
|
|
2761
2810
|
if (cap) {
|
|
2762
2811
|
switch (linkDetails.length) {
|
|
2763
2812
|
case 0:
|
|
@@ -3152,4 +3201,4 @@
|
|
|
3152
3201
|
}));
|
|
3153
3202
|
//# sourceMappingURL=index.js.map
|
|
3154
3203
|
|
|
3155
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VzIjpbInNyYy9zdmcvc3ZnLnRzIiwic3JjL1RpbnlNREVDb21tYW5kQmFyLnRzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2dsb2JhbC10aGlzLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2ZhaWxzLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2Rlc2NyaXB0b3JzLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtbmF0aXZlLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcy5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pcy1jYWxsYWJsZS5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pcy1udWxsLW9yLXVuZGVmaW5lZC5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9yZXF1aXJlLW9iamVjdC1jb2VyY2libGUuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tb2JqZWN0LmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHkuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZnVuY3Rpb24tbmFtZS5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pcy1wdXJlLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2RlZmluZS1nbG9iYWwtcHJvcGVydHkuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2hhcmVkLXN0b3JlLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2luc3BlY3Qtc291cmNlLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3dlYWstbWFwLWJhc2ljLWRldGVjdGlvbi5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pcy1vYmplY3QuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZG9jdW1lbnQtY3JlYXRlLWVsZW1lbnQuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaWU4LWRvbS1kZWZpbmUuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdjgtcHJvdG90eXBlLWRlZmluZS1idWcuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvYW4tb2JqZWN0LmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZW52aXJvbm1lbnQtdXNlci1hZ2VudC5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9lbnZpcm9ubWVudC12OC12ZXJzaW9uLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3N5bWJvbC1jb25zdHJ1Y3Rvci1kZXRlY3Rpb24uanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdXNlLXN5bWJvbC1hcy11aWQuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXMtc3ltYm9sLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RyeS10by1zdHJpbmcuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvYS1jYWxsYWJsZS5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9nZXQtbWV0aG9kLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29yZGluYXJ5LXRvLXByaW1pdGl2ZS5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zaGFyZWQuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdWlkLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RvLXByaW1pdGl2ZS5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy90by1wcm9wZXJ0eS1rZXkuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eS5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHktZGVzY3JpcHRvci5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHkuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2hhcmVkLWtleS5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9oaWRkZW4ta2V5cy5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pbnRlcm5hbC1zdGF0ZS5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9tYWtlLWJ1aWx0LWluLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbi1hY2Nlc3Nvci5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9yZWdleHAtZmxhZ3MuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnJlZ2V4cC5mbGFncy5qcyIsInNyYy9ncmFtbWFyLnRzIiwic3JjL1RpbnlNREUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiY29uc3Qgc3ZnOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuICBibG9ja3F1b3RlOiBgPHN2ZyBoZWlnaHQ9XCIxOFwiIHdpZHRoPVwiMThcIj48cmVjdCB3aWR0aD1cIjVcIiBoZWlnaHQ9XCI1XCIgeD1cIjNcIiB5PVwiNFwiIHJ5PVwiMVwiLz48cmVjdCByeT1cIjFcIiB5PVwiNFwiIHg9XCIxMFwiIGhlaWdodD1cIjVcIiB3aWR0aD1cIjVcIi8+PHBhdGggZD1cIk04IDYuOTk5djNjMCAxLTEgMy0xIDNzLS4zMzEgMS0xLjMzMSAxaC0xYy0xIDAtLjY2OS0xLS42NjktMXMxLTIgMS0zdi0zem03IDB2M2MwIDEtMSAzLTEgM3MtLjMzMSAxLTEuMzMxIDFoLTFjLTEgMC0uNjY5LTEtLjY2OS0xczEtMiAxLTN2LTN6XCIvPjwvc3ZnPmAsXG4gIGJvbGQ6IGA8c3ZnIGhlaWdodD1cIjE4XCIgd2lkdGg9XCIxOFwiPjxwYXRoIGQ9XCJNNCAyYTEgMSAwIDAwLTEgMXYxMmExIDEgMCAwMDEgMWg2YzQgMCA1LTIgNS00IDAtMS4zMjItLjQzNC0yLjYzNi0xLjg4NS0zLjM4MUMxMy43NzIgNy44ODUgMTQgNi45NDUgMTQgNmMwLTItMS00LTUtNHptMSAyaDRjMS42NjggMCAyLjMyLjM5MyAyLjYuNjcyLjI4LjI3OS40LjY2Mi40IDEuMzI4cy0uMTIgMS4wNTctLjQgMS4zMzhjLS4yNzUuMjc0LTEuMDE0LjY0Ni0yLjYuNjYySDV6bTUgNmMxLjY2Ni4wMDUgMi4zMTguMzg4IDIuNTk2LjY2Ni4yNzcuMjc4LjQwNC42NjcuNDA0IDEuMzM0cy0uMTI3IDEuMDYtLjQwNCAxLjMzOGMtLjI3OC4yNzgtLjkzLjY2LTIuNTk2LjY2MmwtNC45OTIuMDA0TDUgMTB6XCIvPjwvc3ZnPmAsXG4gIGNsZWFyX2Zvcm1hdHRpbmc6IGA8c3ZnIGhlaWdodD1cIjE4XCIgd2lkdGg9XCIxOFwiPjxwYXRoIGQ9XCJNMTEuMDMgMWExIDEgMCAwMC0uNzQuM2wtOSA5YTEgMSAwIDAwMCAxLjRsNCA0QTEgMSAwIDAwNiAxNmgyYTEgMSAwIDAwLjctLjNsOC04YTEgMSAwIDAwMC0xLjRsLTUtNWExIDEgMCAwMC0uNjctLjN6TTguNyA1LjdsMy41OCAzLjZMNy42IDE0SDYuNGwtMy0zIDUuMy01LjN6XCIvPjxyZWN0IHJ5PVwiLjhcIiByeD1cIi44XCIgeT1cIjE0XCIgeD1cIjE2XCIgaGVpZ2h0PVwiMlwiIHdpZHRoPVwiMlwiLz48cmVjdCB3aWR0aD1cIjJcIiBoZWlnaHQ9XCIyXCIgeD1cIjEzXCIgeT1cIjE0XCIgcng9XCIuOFwiIHJ5PVwiLjhcIi8+PHJlY3Qgcnk9XCIuOFwiIHJ4PVwiLjhcIiB5PVwiMTRcIiB4PVwiMTBcIiBoZWlnaHQ9XCIyXCIgd2lkdGg9XCIyXCIvPjwvc3ZnPmAsXG4gIGNvZGU6IGA8c3ZnIGhlaWdodD1cIjE4XCIgd2lkdGg9XCIxOFwiPjxwYXRoIGQ9XCJNMTMuNSAyLjk5NGEuNS41IDAgMDAtLjUuNS41LjUgMCAwMDAgLjAzNFY0LjUzYTUuOTkzIDUuOTkzIDAgMDAtNy40NTEtLjQ0NUE2IDYgMCAxMDEyLjQ1IDEzLjlhNS45OSA1Ljk5IDAgMDAxLjM0Ni0xLjMzNC41LjUgMCAwMC4wOTYtLjEwMS41LjUgMCAwMC0uMTItLjY5OC41LjUgMCAwMC0uNjk3LjEybC0uMDA0LS4wMDVhNSA1IDAgMDEtMS4xOTcgMS4yIDUgNSAwIDExMS4yMTUtNi45NjUuNS41IDAgMDAuNjk3LjEyLjUuNSAwIDAwLjIxMS0uNDRWNC43NDVIMTRWMy40OTNhLjUuNSAwIDAwLS41LS41elwiLz48L3N2Zz5gLFxuICBoMTogYDxzdmcgaGVpZ2h0PVwiMThcIiB3aWR0aD1cIjE4XCI+PHBhdGggZD1cIk0zIDJzMC0xIDEtMWgxYzEgMCAxIDEgMSAxdjZoNlYyczAtMSAxLTFoMWMxIDAgMSAxIDEgMXYxNHMwIDEtMSAxaC0xYy0xIDAtMS0xLTEtMXYtNkg2djZzMCAxLTEgMUg0Yy0xIDAtMS0xLTEtMXpcIi8+PC9zdmc+YCxcbiAgaDI6IGA8c3ZnIGhlaWdodD1cIjE4XCIgd2lkdGg9XCIxOFwiPjxwYXRoIGQ9XCJNNCAyczAtMSAxLTEgMSAxIDEgMXY2YzEtMSAyLTEgNC0xIDMgMCA0IDIgNCA0djVzMCAxLTEgMS0xLTEtMS0xdi01YzAtMS4wOTQtMS0yLTItMi0yIDAtMyAwLTQgMnY1czAgMS0xIDEtMS0xLTEtMXpcIi8+PC9zdmc+YCxcbiAgaHI6IGA8c3ZnIGhlaWdodD1cIjE4XCIgd2lkdGg9XCIxOFwiPjxyZWN0IHJ5PVwiMVwiIHk9XCI4XCIgaGVpZ2h0PVwiMlwiIHdpZHRoPVwiMThcIiBzdHlsZT1cImZvbnQtdmFyaWF0aW9uLXNldHRpbmdzOm5vcm1hbDttYXJrZXI6bm9uZVwiLz48L3N2Zz5gLFxuICBpbWFnZTogYDxzdmcgaGVpZ2h0PVwiMThcIiB3aWR0aD1cIjE4XCI+PHBhdGggZD1cIk0xIDJ2MTRoMTZWMkgxem0yIDJoMTJ2N2wtMy0zLTQgNC0yLTItMyAzVjR6XCIvPjxjaXJjbGUgcj1cIjEuNVwiIGN5PVwiNi41XCIgY3g9XCI1LjVcIi8+PC9zdmc+YCxcbiAgaXRhbGljOiBgPHN2ZyBoZWlnaHQ9XCIxOFwiIHdpZHRoPVwiMThcIj48cGF0aCBkPVwiTTkgMmExIDEgMCAwMDAgMkw3IDE0YTEgMSAwIDEwMCAyaDJhMSAxIDAgMDAwLTJsMi0xMGExIDEgMCAxMDAtMnpcIi8+PC9zdmc+YCxcbiAgbGluazogYDxzdmcgaGVpZ2h0PVwiMThcIiB3aWR0aD1cIjE4XCI+PHBhdGggZD1cIk05LjA3IDUuMThhMy45IDMuOSAwIDAwLTEuNTIuNDNDNi4zMSA2LjIyIDUuMyA3LjI5IDQuMyA4LjI5Yy0xIDEtMi4wNyAyLjAyLTIuNjggMy4yNi0uMzEuNjItLjUgMS4zMy0uNDEgMi4wNy4wOS43NS40OCAxLjQ3IDEuMSAyLjA5LjYxLjYxIDEuMzMgMSAyLjA4IDEuMS43NC4wOSAxLjQ1LS4xIDIuMDctLjQyIDEuMjQtLjYxIDIuMjYtMS42OCAzLjI2LTIuNjguNDYtLjQ3Ljk0LS45NCAxLjM5LTEuNDRsLS40My4yNmMtLjY4LjM0LTEuNDkuNTYtMi4zNi40Ni0uMi0uMDMtLjQtLjA4LS42LS4xNC0uNzkuNzYtMS41NSAxLjQ1LTIuMTYgMS43Ni0uMzguMTktLjY3LjI0LS45Mi4yMS0uMjYtLjAzLS41NC0uMTQtLjkyLS41My0uMzktLjM4LS41LS42Ni0uNTMtLjkxLS4wMy0uMjYuMDItLjU1LjIxLS45My4zOS0uNzYgMS4zMi0xLjc0IDIuMzItMi43NCAxLTEgMS45OC0xLjkzIDIuNzQtMi4zMi4zOC0uMTkuNjctLjI0LjkzLS4yMS4yNS4wMy41My4xNC45MS41My4zOS4zOC41LjY2LjUzLjkydi4wNmwxLjEyLTEuMDYuNDQtLjQ3Yy0uMTgtLjMtLjQtLjYtLjY3LS44Ny0uNjItLjYxLTEuMzQtMS0yLjA5LTEuMWEzLjA4IDMuMDggMCAwMC0uNTUtLjAxelwiLz48cGF0aCBkPVwiTTEzLjA3Ljg2YTMuOSAzLjkgMCAwMC0xLjUyLjQzYy0xLjI0LjYyLTIuMjYgMS42OS0zLjI2IDIuNjktLjQ2LjQ3LS45NC45NC0xLjM5IDEuNDMuMTUtLjA4LjI4LS4xOC40My0uMjVhNC40IDQuNCAwIDAxMi4zNi0uNDZjLjIuMDIuNC4wNy42LjE0Ljc5LS43NyAxLjU1LTEuNDYgMi4xNi0xLjc2LjM4LS4xOS42Ny0uMjUuOTMtLjIxLjI1LjAzLjUzLjE0LjkxLjUyLjM5LjM4LjUuNjYuNTMuOTIuMDMuMjYtLjAyLjU1LS4yMS45My0uMzkuNzYtMS4zMiAxLjc0LTIuMzIgMi43NC0xIDEtMS45OCAxLjkzLTIuNzQgMi4zMS0uMzguMi0uNjcuMjUtLjkzLjIyLS4yNS0uMDQtLjUzLS4xNS0uOTEtLjUzLS4zOS0uMzgtLjUtLjY2LS41My0uOTJWOWMtLjM2LjMzLS43My42Ny0xLjEyIDEuMDZsLS40My40NmMuMTcuMy40LjYuNjYuODcuNjIuNjIgMS4zNCAxIDIuMDggMS4xLjc1LjEgMS40Ni0uMSAyLjA4LS40MSAxLjI0LS42MiAyLjI2LTEuNjkgMy4yNi0yLjY5czIuMDctMi4wMiAyLjY4LTMuMjZjLjMxLS42Mi41LTEuMzIuNDEtMi4wN2EzLjYzIDMuNjMgMCAwMC0xLjEtMi4wOGMtLjYxLS42Mi0xLjMzLTEtMi4wNy0xLjFhMy4wOCAzLjA4IDAgMDAtLjU2LS4wMnpcIi8+PC9zdmc+YCxcbiAgb2w6IGA8c3ZnIGhlaWdodD1cIjE4XCIgd2lkdGg9XCIxOFwiPjxwYXRoIGQ9XCJNMS41IDdhLjUuNSAwIDEwMCAxaDFhLjUuNSAwIDAxLjUuNWMwIC4xNjQtLjA4LjMxLS4xNC4zNTVsLTEuNjU1IDEuMjVBLjQ5Mi40OTIgMCAwMDEgMTAuNWEuNS41IDAgMDAuNS41aDJhLjUuNSAwIDAwMC0xSDNsLjM5OC0uMjk5QTEuNSAxLjUgMCAwMDIuNSA3elwiLz48cGF0aCBkPVwiTTEuNSAxMmMtLjY2NyAwLS42NjcgMSAwIDFoMS4yNWMuMzMzIDAgLjMzMy41IDAgLjVIMi41Yy0uNjY3IDAtLjY2NyAxIDAgMWguMjVjLjMzMyAwIC4zMzMuNSAwIC41SDEuNWMtLjY2NyAwLS42NjcgMSAwIDFoMWMuMzk4IDAgLjc4LS4xMzEgMS4wNi0uMzY1LjI4Mi0uMjM1LjQ0LS41NTQuNDQtLjg4NWExLjEyMSAxLjEyMSAwIDAwLS4zMDMtLjc1Yy4xOTEtLjIwNC4zLS40Ny4zMDMtLjc1IDAtLjMzMi0uMTU4LS42NTEtLjQ0LS44ODUtLjMtLjI0MS0uNjc1LS4zNy0xLjA2LS4zNjV6XCIvPjxyZWN0IHk9XCIxM1wiIHg9XCI2XCIgaGVpZ2h0PVwiMlwiIHdpZHRoPVwiMTJcIiByeT1cIjFcIi8+PHJlY3Qgcnk9XCIxXCIgd2lkdGg9XCIxMlwiIGhlaWdodD1cIjJcIiB4PVwiNlwiIHk9XCI4XCIvPjxyZWN0IHk9XCIzXCIgeD1cIjZcIiBoZWlnaHQ9XCIyXCIgd2lkdGg9XCIxMlwiIHJ5PVwiMVwiLz48cGF0aCBkPVwiTTEuNSAyYS41LjUgMCAxMDAgMUgydjJoLS41YS41LjUgMCAxMDAgMWgyYS41LjUgMCAxMDAtMUgzVjIuNWMwLS4yNzctLjIyMy0uNS0uNS0uNXpcIi8+PC9zdmc+YCxcbiAgcmVkbzogYDxzdmcgaGVpZ2h0PVwiMThcIiB3aWR0aD1cIjE4XCI+PHBhdGggZD1cIk0gNy4yNjk1MzA4LDIuNzA1MDc4MSBDIDguMTEyODc1NSwyLjcwODE1ODEgOC45NTI5ODk1LDIuODcxMjE1NiA5LjczMDQ2OSwzLjEzNDc2NTYgMTEuNDA4ODc0LDMuNzAzNzEyMSAxMi45MDE0Miw0LjY4NDcxMDQgMTQsNS42MzY3MTg4IFYgNCBoIDIgViA5IEggMTEgViA3IGggMS41MDk3NjUgQyAxMS41OTA3NSw2LjI0ODUxNzMgMTAuMzQwMjA4LDUuNDUzODA4IDkuMDg3ODkwNCw1LjAyOTI5NjkgNy40MzA5Mzk4LDQuNDY3NjIzMSA1Ljk0NTM0NTgsNC40Njg3MTcgNC43MDcwMzA4LDUuNzA3MDMxMiBjIC0xLjIyNTAxNCwxLjIyNTAxNDIgLTEuNDA5NzY5LDIuNzIwNjk1MyAtMC43NzkyOTcsNC4yOTY4NzQ4IDAuNjMwNDcyLDEuNTc2MTggMi4xNjc0NzUsMy4xNTgwMDYgNC40NDMzNTk4LDQuMDY4MzYgbCAtMC43NDIxODc4LDEuODU1NDY4IGMgLTIuNzI0MTE1LC0xLjA4OTY0NiAtNC42ODcxMTIsLTMuMDA3ODIgLTUuNTU2NjQsLTUuMTgxNjQgLTAuODY5NTI4LC0yLjE3MzgyMDYgLTAuNTU0MjgzLC00LjY3ODEzOTMgMS4yMjA3MDMsLTYuNDUzMTI1MiAwLjkyMzg1NywtMC45MjM4NTY4IDIuMDE1Mzg4LC0xLjM4ODgyOCAzLjEzNDc2NSwtMS41MzUxNTYzIDAuMjc5ODQ1LC0wLjAzNjU4MiAwLjU2MDY4MiwtMC4wNTM3NjEgMC44NDE3OTcsLTAuMDUyNzM0IHpcIiAvPjwvc3ZnPmAsXG4gIHN0cmlrZXRocm91Z2g6IGA8c3ZnIHdpZHRoPVwiMThcIiBoZWlnaHQ9XCIxOFwiPjxwYXRoIGQ9XCJNMTAgMkM2IDIgNCA0IDQgNmMwIC4zMzguMDguNjcyLjE5MyAxaDIuMzRDNi4xMTMgNi42MjkgNiA2LjI5NSA2IDZjMC0uMzM0LjExNy0uNzI1LjY5MS0xLjE1NEM3LjI2NSA0LjQxNiA4LjMzMSA0IDEwIDRoM2ExIDEgMCAwMDAtMnptMS40NzcgOWMuNDEzLjM2OC41MjMuNzA2LjUyMyAxIDAgLjMzNC0uMTI3LjcxMi0uNzAxIDEuMTQzLS41NzUuNDMtMS42MzIuODUtMy4yOTkuODU3bC0xLjAwNi4wMDdWMTRINWExIDEgMCAwMDAgMmgzYzQgMCA2LTIgNi00IDAtLjMzOC0uMDgxLS42NzItLjE5NS0xelwiLz48cmVjdCByeT1cIjFcIiB5PVwiOFwiIHg9XCIxXCIgaGVpZ2h0PVwiMlwiIHdpZHRoPVwiMTZcIi8+PC9zdmc+YCxcbiAgdWw6IGA8c3ZnIGhlaWdodD1cIjE4XCIgd2lkdGg9XCIxOFwiPjxjaXJjbGUgY3g9XCIyXCIgY3k9XCI5XCIgcj1cIjJcIi8+PGNpcmNsZSBjeT1cIjRcIiBjeD1cIjJcIiByPVwiMlwiLz48cmVjdCB5PVwiM1wiIHg9XCI2XCIgaGVpZ2h0PVwiMlwiIHdpZHRoPVwiMTJcIiByeT1cIjFcIi8+PGNpcmNsZSBjeD1cIjJcIiBjeT1cIjE0XCIgcj1cIjJcIi8+PHJlY3Qgcnk9XCIxXCIgd2lkdGg9XCIxMlwiIGhlaWdodD1cIjJcIiB4PVwiNlwiIHk9XCI4XCIvPjxyZWN0IHk9XCIxM1wiIHg9XCI2XCIgaGVpZ2h0PVwiMlwiIHdpZHRoPVwiMTJcIiByeT1cIjFcIi8+PC9zdmc+YCxcbiAgdW5kbzogYDxzdmcgaGVpZ2h0PVwiMThcIiB3aWR0aD1cIjE4XCI+PHBhdGggZD1cIk0gMTAuNzMwNDY5IDIuNzA1MDc4MSBDIDkuODg3MTI0MyAyLjcwODE1OTQgOS4wNDcwMTAzIDIuODcxMjE1NiA4LjI2OTUzMTIgMy4xMzQ3NjU2IEMgNi41OTExMjU2IDMuNzAzNzEyMSA1LjA5ODU3OTcgNC42ODQ3MTA0IDQgNS42MzY3MTg4IEwgNCA0IEwgMiA0IEwgMiA5IEwgNyA5IEwgNyA3IEwgNS40OTAyMzQ0IDcgQyA2LjQwOTI0OTkgNi4yNDg1MTczIDcuNjU5NzkxNCA1LjQ1MzgwOCA4LjkxMjEwOTQgNS4wMjkyOTY5IEMgMTAuNTY5MDYgNC40Njc2MjMxIDEyLjA1NDY1NCA0LjQ2ODcxNyAxMy4yOTI5NjkgNS43MDcwMzEyIEMgMTQuNTE3OTgzIDYuOTMyMDQ1NCAxNC43MDI3MzggOC40Mjc3MjY1IDE0LjA3MjI2NiAxMC4wMDM5MDYgQyAxMy40NDE3OTQgMTEuNTgwMDg2IDExLjkwNDc5MSAxMy4xNjE5MTIgOS42Mjg5MDYyIDE0LjA3MjI2NiBMIDEwLjM3MTA5NCAxNS45Mjc3MzQgQyAxMy4wOTUyMDkgMTQuODM4MDg4IDE1LjA1ODIwNiAxMi45MTk5MTQgMTUuOTI3NzM0IDEwLjc0NjA5NCBDIDE2Ljc5NzI2MiA4LjU3MjI3MzQgMTYuNDgyMDE3IDYuMDY3OTU0NyAxNC43MDcwMzEgNC4yOTI5Njg4IEMgMTMuNzgzMTc0IDMuMzY5MTEyIDEyLjY5MTY0MyAyLjkwNDE0MDggMTEuNTcyMjY2IDIuNzU3ODEyNSBDIDExLjI5MjQyMSAyLjcyMTIzMDQgMTEuMDExNTg0IDIuNzA0MDUxIDEwLjczMDQ2OSAyLjcwNTA3ODEgeiBcIiAvPjwvc3ZnPlxuYFxufTtcblxuZXhwb3J0IGRlZmF1bHQgc3ZnOyIsImltcG9ydCBzdmcgZnJvbSBcIi4vc3ZnL3N2Z1wiO1xuaW1wb3J0IHsgRWRpdG9yLCBQb3NpdGlvbiwgU2VsZWN0aW9uRXZlbnQgfSBmcm9tIFwiLi9UaW55TURFXCI7XG5cbmNvbnN0IGlzTWFjTGlrZSA9IC8oTWFjfGlQaG9uZXxpUG9kfGlQYWQpL2kudGVzdChcbiAgdHlwZW9mIG5hdmlnYXRvciAhPT0gXCJ1bmRlZmluZWRcIiA/IG5hdmlnYXRvci5wbGF0Zm9ybSA6IFwiXCJcbik7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29tbWFuZEFjdGlvbiB7XG4gIChlZGl0b3I6IEVkaXRvcik6IHZvaWQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29tbWFuZEVuYWJsZWQge1xuICAoZWRpdG9yOiBFZGl0b3IsIGZvY3VzPzogUG9zaXRpb24sIGFuY2hvcj86IFBvc2l0aW9uKTogYm9vbGVhbiB8IG51bGw7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29tbWFuZERlZmluaXRpb24ge1xuICBuYW1lOiBzdHJpbmc7XG4gIGFjdGlvbjogc3RyaW5nIHwgQ29tbWFuZEFjdGlvbjtcbiAgaW5uZXJIVE1MOiBzdHJpbmc7XG4gIHRpdGxlOiBzdHJpbmc7XG4gIGhvdGtleT86IHN0cmluZztcbiAgZW5hYmxlZD86IENvbW1hbmRFbmFibGVkO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENvbW1hbmRCYXJQcm9wcyB7XG4gIGVsZW1lbnQ/OiBzdHJpbmcgfCBIVE1MRWxlbWVudDtcbiAgZWRpdG9yPzogRWRpdG9yO1xuICBjb21tYW5kcz86IChzdHJpbmcgfCBDb21tYW5kRGVmaW5pdGlvbilbXTtcbn1cblxuaW50ZXJmYWNlIEhvdGtleSB7XG4gIG1vZGlmaWVyczogc3RyaW5nW107XG4gIGNvbW1hbmQ6IHN0cmluZztcbiAga2V5Pzogc3RyaW5nO1xuICBjb2RlPzogc3RyaW5nO1xufVxuXG5jb25zdCBEZWZhdWx0Q29tbWFuZHM6IFJlY29yZDxzdHJpbmcsIENvbW1hbmREZWZpbml0aW9uPiA9IHtcbiAgYm9sZDoge1xuICAgIG5hbWU6IFwiYm9sZFwiLFxuICAgIGFjdGlvbjogXCJib2xkXCIsXG4gICAgaW5uZXJIVE1MOiBzdmcuYm9sZCxcbiAgICB0aXRsZTogXCJCb2xkXCIsXG4gICAgaG90a2V5OiBcIk1vZC1CXCIsXG4gIH0sXG4gIGl0YWxpYzoge1xuICAgIG5hbWU6IFwiaXRhbGljXCIsXG4gICAgYWN0aW9uOiBcIml0YWxpY1wiLFxuICAgIGlubmVySFRNTDogc3ZnLml0YWxpYyxcbiAgICB0aXRsZTogXCJJdGFsaWNcIixcbiAgICBob3RrZXk6IFwiTW9kLUlcIixcbiAgfSxcbiAgc3RyaWtldGhyb3VnaDoge1xuICAgIG5hbWU6IFwic3RyaWtldGhyb3VnaFwiLFxuICAgIGFjdGlvbjogXCJzdHJpa2V0aHJvdWdoXCIsXG4gICAgaW5uZXJIVE1MOiBzdmcuc3RyaWtldGhyb3VnaCxcbiAgICB0aXRsZTogXCJTdHJpa2V0aHJvdWdoXCIsXG4gICAgaG90a2V5OiBcIk1vZDItU2hpZnQtNVwiLFxuICB9LFxuICBjb2RlOiB7XG4gICAgbmFtZTogXCJjb2RlXCIsXG4gICAgYWN0aW9uOiBcImNvZGVcIixcbiAgICBpbm5lckhUTUw6IHN2Zy5jb2RlLFxuICAgIHRpdGxlOiBcIkZvcm1hdCBhcyBjb2RlXCIsXG4gIH0sXG4gIGgxOiB7XG4gICAgbmFtZTogXCJoMVwiLFxuICAgIGFjdGlvbjogXCJoMVwiLFxuICAgIGlubmVySFRNTDogc3ZnLmgxLFxuICAgIHRpdGxlOiBcIkxldmVsIDEgaGVhZGluZ1wiLFxuICAgIGhvdGtleTogXCJNb2QtU2hpZnQtMVwiLFxuICB9LFxuICBoMjoge1xuICAgIG5hbWU6IFwiaDJcIixcbiAgICBhY3Rpb246IFwiaDJcIixcbiAgICBpbm5lckhUTUw6IHN2Zy5oMixcbiAgICB0aXRsZTogXCJMZXZlbCAyIGhlYWRpbmdcIixcbiAgICBob3RrZXk6IFwiTW9kLVNoaWZ0LTJcIixcbiAgfSxcbiAgdWw6IHtcbiAgICBuYW1lOiBcInVsXCIsXG4gICAgYWN0aW9uOiBcInVsXCIsXG4gICAgaW5uZXJIVE1MOiBzdmcudWwsXG4gICAgdGl0bGU6IFwiQnVsbGV0ZWQgbGlzdFwiLFxuICB9LFxuICBvbDoge1xuICAgIG5hbWU6IFwib2xcIixcbiAgICBhY3Rpb246IFwib2xcIixcbiAgICBpbm5lckhUTUw6IHN2Zy5vbCxcbiAgICB0aXRsZTogXCJOdW1iZXJlZCBsaXN0XCIsXG4gIH0sXG4gIGJsb2NrcXVvdGU6IHtcbiAgICBuYW1lOiBcImJsb2NrcXVvdGVcIixcbiAgICBhY3Rpb246IFwiYmxvY2txdW90ZVwiLFxuICAgIGlubmVySFRNTDogc3ZnLmJsb2NrcXVvdGUsXG4gICAgdGl0bGU6IFwiUXVvdGVcIixcbiAgICBob3RrZXk6IFwiTW9kMi1TaGlmdC1RXCIsXG4gIH0sXG4gIGluc2VydExpbms6IHtcbiAgICBuYW1lOiBcImluc2VydExpbmtcIixcbiAgICBhY3Rpb246IChlZGl0b3I6IEVkaXRvcikgPT4ge1xuICAgICAgaWYgKChlZGl0b3IgYXMgYW55KS5pc0lubGluZUZvcm1hdHRpbmdBbGxvd2VkKCkpIGVkaXRvci53cmFwU2VsZWN0aW9uKFwiW1wiLCBcIl0oKVwiKTtcbiAgICB9LFxuICAgIGVuYWJsZWQ6IChlZGl0b3I6IEVkaXRvciwgZm9jdXM/OiBQb3NpdGlvbiwgYW5jaG9yPzogUG9zaXRpb24pID0+XG4gICAgICAoZWRpdG9yIGFzIGFueSkuaXNJbmxpbmVGb3JtYXR0aW5nQWxsb3dlZChmb2N1cywgYW5jaG9yKSA/IGZhbHNlIDogbnVsbCxcbiAgICBpbm5lckhUTUw6IHN2Zy5saW5rLFxuICAgIHRpdGxlOiBcIkluc2VydCBsaW5rXCIsXG4gICAgaG90a2V5OiBcIk1vZC1LXCIsXG4gIH0sXG4gIGluc2VydEltYWdlOiB7XG4gICAgbmFtZTogXCJpbnNlcnRJbWFnZVwiLFxuICAgIGFjdGlvbjogKGVkaXRvcjogRWRpdG9yKSA9PiB7XG4gICAgICBpZiAoKGVkaXRvciBhcyBhbnkpLmlzSW5saW5lRm9ybWF0dGluZ0FsbG93ZWQoKSkgZWRpdG9yLndyYXBTZWxlY3Rpb24oXCIhW1wiLCBcIl0oKVwiKTtcbiAgICB9LFxuICAgIGVuYWJsZWQ6IChlZGl0b3I6IEVkaXRvciwgZm9jdXM/OiBQb3NpdGlvbiwgYW5jaG9yPzogUG9zaXRpb24pID0+XG4gICAgICAoZWRpdG9yIGFzIGFueSkuaXNJbmxpbmVGb3JtYXR0aW5nQWxsb3dlZChmb2N1cywgYW5jaG9yKSA/IGZhbHNlIDogbnVsbCxcbiAgICBpbm5lckhUTUw6IHN2Zy5pbWFnZSxcbiAgICB0aXRsZTogXCJJbnNlcnQgaW1hZ2VcIixcbiAgICBob3RrZXk6IFwiTW9kMi1TaGlmdC1JXCIsXG4gIH0sXG4gIGhyOiB7XG4gICAgbmFtZTogXCJoclwiLFxuICAgIGFjdGlvbjogKGVkaXRvcjogRWRpdG9yKSA9PiBlZGl0b3IucGFzdGUoXCJcXG4qKipcXG5cIiksXG4gICAgZW5hYmxlZDogKCkgPT4gZmFsc2UsXG4gICAgaW5uZXJIVE1MOiBzdmcuaHIsXG4gICAgdGl0bGU6IFwiSW5zZXJ0IGhvcml6b250YWwgbGluZVwiLFxuICAgIGhvdGtleTogXCJNb2QyLVNoaWZ0LUxcIixcbiAgfSxcbiAgdW5kbzoge1xuICAgIG5hbWU6IFwidW5kb1wiLFxuICAgIGFjdGlvbjogKGVkaXRvcjogRWRpdG9yKSA9PiBlZGl0b3IudW5kbygpLFxuICAgIGVuYWJsZWQ6IChlZGl0b3I6IEVkaXRvcikgPT4gKGVkaXRvci5jYW5VbmRvID8gZmFsc2UgOiBudWxsKSxcbiAgICBpbm5lckhUTUw6IHN2Zy51bmRvLFxuICAgIHRpdGxlOiBcIlVuZG9cIixcbiAgfSxcbiAgcmVkbzoge1xuICAgIG5hbWU6IFwicmVkb1wiLFxuICAgIGFjdGlvbjogKGVkaXRvcjogRWRpdG9yKSA9PiBlZGl0b3IucmVkbygpLFxuICAgIGVuYWJsZWQ6IChlZGl0b3I6IEVkaXRvcikgPT4gKGVkaXRvci5jYW5SZWRvID8gZmFsc2UgOiBudWxsKSxcbiAgICBpbm5lckhUTUw6IHN2Zy5yZWRvLFxuICAgIHRpdGxlOiBcIlJlZG9cIixcbiAgfSxcbn07XG5cbmV4cG9ydCBjbGFzcyBDb21tYW5kQmFyIHtcbiAgcHVibGljIGU6IEhUTUxEaXZFbGVtZW50IHwgbnVsbCA9IG51bGw7XG4gIHB1YmxpYyBlZGl0b3I6IEVkaXRvciB8IG51bGwgPSBudWxsO1xuICBwdWJsaWMgY29tbWFuZHM6IFJlY29yZDxzdHJpbmcsIENvbW1hbmREZWZpbml0aW9uPiA9IHt9O1xuICBwdWJsaWMgYnV0dG9uczogUmVjb3JkPHN0cmluZywgSFRNTERpdkVsZW1lbnQ+ID0ge307XG4gIHB1YmxpYyBzdGF0ZTogUmVjb3JkPHN0cmluZywgYm9vbGVhbiB8IG51bGw+ID0ge307XG4gIHByaXZhdGUgaG90a2V5czogSG90a2V5W10gPSBbXTtcblxuICBjb25zdHJ1Y3Rvcihwcm9wczogQ29tbWFuZEJhclByb3BzKSB7XG4gICAgdGhpcy5lID0gbnVsbDtcbiAgICB0aGlzLmVkaXRvciA9IG51bGw7XG4gICAgdGhpcy5jb21tYW5kcyA9IHt9O1xuICAgIHRoaXMuYnV0dG9ucyA9IHt9O1xuICAgIHRoaXMuc3RhdGUgPSB7fTtcbiAgICB0aGlzLmhvdGtleXMgPSBbXTtcblxuICAgIGxldCBlbGVtZW50OiBIVE1MRWxlbWVudCB8IG51bGwgPSBudWxsO1xuICAgIGlmICh0eXBlb2YgcHJvcHMuZWxlbWVudCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChwcm9wcy5lbGVtZW50KTtcbiAgICB9IGVsc2UgaWYgKHByb3BzLmVsZW1lbnQpIHtcbiAgICAgIGVsZW1lbnQgPSBwcm9wcy5lbGVtZW50O1xuICAgIH1cbiAgICBcbiAgICBpZiAoIWVsZW1lbnQpIHtcbiAgICAgIGVsZW1lbnQgPSBkb2N1bWVudC5ib2R5O1xuICAgIH1cblxuICAgIHRoaXMuY3JlYXRlQ29tbWFuZEJhckVsZW1lbnQoXG4gICAgICBlbGVtZW50LFxuICAgICAgcHJvcHMuY29tbWFuZHMgfHwgW1xuICAgICAgICBcImJvbGRcIixcbiAgICAgICAgXCJpdGFsaWNcIixcbiAgICAgICAgXCJzdHJpa2V0aHJvdWdoXCIsXG4gICAgICAgIFwifFwiLFxuICAgICAgICBcImNvZGVcIixcbiAgICAgICAgXCJ8XCIsXG4gICAgICAgIFwiaDFcIixcbiAgICAgICAgXCJoMlwiLFxuICAgICAgICBcInxcIixcbiAgICAgICAgXCJ1bFwiLFxuICAgICAgICBcIm9sXCIsXG4gICAgICAgIFwifFwiLFxuICAgICAgICBcImJsb2NrcXVvdGVcIixcbiAgICAgICAgXCJoclwiLFxuICAgICAgICBcInxcIixcbiAgICAgICAgXCJ1bmRvXCIsXG4gICAgICAgIFwicmVkb1wiLFxuICAgICAgICBcInxcIixcbiAgICAgICAgXCJpbnNlcnRMaW5rXCIsXG4gICAgICAgIFwiaW5zZXJ0SW1hZ2VcIixcbiAgICAgIF1cbiAgICApO1xuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJrZXlkb3duXCIsIChlKSA9PiB0aGlzLmhhbmRsZUtleWRvd24oZSkpO1xuICAgIGlmIChwcm9wcy5lZGl0b3IpIHRoaXMuc2V0RWRpdG9yKHByb3BzLmVkaXRvcik7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZUNvbW1hbmRCYXJFbGVtZW50KHBhcmVudEVsZW1lbnQ6IEhUTUxFbGVtZW50LCBjb21tYW5kczogKHN0cmluZyB8IENvbW1hbmREZWZpbml0aW9uKVtdKTogdm9pZCB7XG4gICAgdGhpcy5lID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICB0aGlzLmUuY2xhc3NOYW1lID0gXCJUTUNvbW1hbmRCYXJcIjtcblxuICAgIGZvciAobGV0IGNvbW1hbmQgb2YgY29tbWFuZHMpIHtcbiAgICAgIGlmIChjb21tYW5kID09PSBcInxcIikge1xuICAgICAgICBsZXQgZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgICAgICBlbC5jbGFzc05hbWUgPSBcIlRNQ29tbWFuZERpdmlkZXJcIjtcbiAgICAgICAgdGhpcy5lLmFwcGVuZENoaWxkKGVsKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxldCBjb21tYW5kTmFtZTogc3RyaW5nO1xuICAgICAgICBpZiAodHlwZW9mIGNvbW1hbmQgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICBpZiAoRGVmYXVsdENvbW1hbmRzW2NvbW1hbmRdKSB7XG4gICAgICAgICAgICBjb21tYW5kTmFtZSA9IGNvbW1hbmQ7XG4gICAgICAgICAgICB0aGlzLmNvbW1hbmRzW2NvbW1hbmROYW1lXSA9IERlZmF1bHRDb21tYW5kc1tjb21tYW5kTmFtZV07XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgY29tbWFuZCA9PT0gXCJvYmplY3RcIiAmJiBjb21tYW5kLm5hbWUpIHtcbiAgICAgICAgICBjb21tYW5kTmFtZSA9IGNvbW1hbmQubmFtZTtcbiAgICAgICAgICB0aGlzLmNvbW1hbmRzW2NvbW1hbmROYW1lXSA9IHt9IGFzIENvbW1hbmREZWZpbml0aW9uO1xuICAgICAgICAgIGlmIChEZWZhdWx0Q29tbWFuZHNbY29tbWFuZE5hbWVdKSB7XG4gICAgICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMuY29tbWFuZHNbY29tbWFuZE5hbWVdLCBEZWZhdWx0Q29tbWFuZHNbY29tbWFuZE5hbWVdKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLmNvbW1hbmRzW2NvbW1hbmROYW1lXSwgY29tbWFuZCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgdGl0bGUgPSB0aGlzLmNvbW1hbmRzW2NvbW1hbmROYW1lXS50aXRsZSB8fCBjb21tYW5kTmFtZTtcblxuICAgICAgICBpZiAodGhpcy5jb21tYW5kc1tjb21tYW5kTmFtZV0uaG90a2V5KSB7XG4gICAgICAgICAgY29uc3Qga2V5cyA9IHRoaXMuY29tbWFuZHNbY29tbWFuZE5hbWVdLmhvdGtleSEuc3BsaXQoXCItXCIpO1xuICAgICAgICAgIGxldCBtb2RpZmllcnM6IHN0cmluZ1tdID0gW107XG4gICAgICAgICAgbGV0IG1vZGlmaWVyZXhwbGFuYXRpb246IHN0cmluZ1tdID0gW107XG4gICAgICAgICAgXG4gICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aCAtIDE7IGkrKykge1xuICAgICAgICAgICAgc3dpdGNoIChrZXlzW2ldKSB7XG4gICAgICAgICAgICAgIGNhc2UgXCJDdHJsXCI6XG4gICAgICAgICAgICAgICAgbW9kaWZpZXJzLnB1c2goXCJjdHJsS2V5XCIpO1xuICAgICAgICAgICAgICAgIG1vZGlmaWVyZXhwbGFuYXRpb24ucHVzaChcIkN0cmxcIik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGNhc2UgXCJDbWRcIjpcbiAgICAgICAgICAgICAgICBtb2RpZmllcnMucHVzaChcIm1ldGFLZXlcIik7XG4gICAgICAgICAgICAgICAgbW9kaWZpZXJleHBsYW5hdGlvbi5wdXNoKFwi4oyYXCIpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlIFwiQWx0XCI6XG4gICAgICAgICAgICAgICAgbW9kaWZpZXJzLnB1c2goXCJhbHRLZXlcIik7XG4gICAgICAgICAgICAgICAgbW9kaWZpZXJleHBsYW5hdGlvbi5wdXNoKFwiQWx0XCIpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlIFwiT3B0aW9uXCI6XG4gICAgICAgICAgICAgICAgbW9kaWZpZXJzLnB1c2goXCJhbHRLZXlcIik7XG4gICAgICAgICAgICAgICAgbW9kaWZpZXJleHBsYW5hdGlvbi5wdXNoKFwi4oylXCIpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlIFwiV2luXCI6XG4gICAgICAgICAgICAgICAgbW9kaWZpZXJzLnB1c2goXCJtZXRhS2V5XCIpO1xuICAgICAgICAgICAgICAgIG1vZGlmaWVyZXhwbGFuYXRpb24ucHVzaChcIuKKniBXaW5cIik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGNhc2UgXCJTaGlmdFwiOlxuICAgICAgICAgICAgICAgIG1vZGlmaWVycy5wdXNoKFwic2hpZnRLZXlcIik7XG4gICAgICAgICAgICAgICAgbW9kaWZpZXJleHBsYW5hdGlvbi5wdXNoKFwi4oenXCIpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlIFwiTW9kXCI6XG4gICAgICAgICAgICAgICAgaWYgKGlzTWFjTGlrZSkge1xuICAgICAgICAgICAgICAgICAgbW9kaWZpZXJzLnB1c2goXCJtZXRhS2V5XCIpO1xuICAgICAgICAgICAgICAgICAgbW9kaWZpZXJleHBsYW5hdGlvbi5wdXNoKFwi4oyYXCIpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICBtb2RpZmllcnMucHVzaChcImN0cmxLZXlcIik7XG4gICAgICAgICAgICAgICAgICBtb2RpZmllcmV4cGxhbmF0aW9uLnB1c2goXCJDdHJsXCIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgY2FzZSBcIk1vZDJcIjpcbiAgICAgICAgICAgICAgICBtb2RpZmllcnMucHVzaChcImFsdEtleVwiKTtcbiAgICAgICAgICAgICAgICBpZiAoaXNNYWNMaWtlKSBtb2RpZmllcmV4cGxhbmF0aW9uLnB1c2goXCLijKVcIik7XG4gICAgICAgICAgICAgICAgZWxzZSBtb2RpZmllcmV4cGxhbmF0aW9uLnB1c2goXCJBbHRcIik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIFxuICAgICAgICAgIG1vZGlmaWVyZXhwbGFuYXRpb24ucHVzaChrZXlzW2tleXMubGVuZ3RoIC0gMV0pO1xuICAgICAgICAgIGxldCBob3RrZXk6IEhvdGtleSA9IHtcbiAgICAgICAgICAgIG1vZGlmaWVyczogbW9kaWZpZXJzLFxuICAgICAgICAgICAgY29tbWFuZDogY29tbWFuZE5hbWUsXG4gICAgICAgICAgfTtcbiAgICAgICAgICBcbiAgICAgICAgICBpZiAoa2V5c1trZXlzLmxlbmd0aCAtIDFdLm1hdGNoKC9eWzAtOV0kLykpIHtcbiAgICAgICAgICAgIGhvdGtleS5jb2RlID0gYERpZ2l0JHtrZXlzW2tleXMubGVuZ3RoIC0gMV19YDtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaG90a2V5LmtleSA9IGtleXNba2V5cy5sZW5ndGggLSAxXS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLmhvdGtleXMucHVzaChob3RrZXkpO1xuICAgICAgICAgIHRpdGxlID0gdGl0bGUuY29uY2F0KGAgKCR7bW9kaWZpZXJleHBsYW5hdGlvbi5qb2luKFwiK1wiKX0pYCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmJ1dHRvbnNbY29tbWFuZE5hbWVdID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICAgICAgdGhpcy5idXR0b25zW2NvbW1hbmROYW1lXS5jbGFzc05hbWUgPSBcIlRNQ29tbWFuZEJ1dHRvbiBUTUNvbW1hbmRCdXR0b25fRGlzYWJsZWRcIjtcbiAgICAgICAgdGhpcy5idXR0b25zW2NvbW1hbmROYW1lXS50aXRsZSA9IHRpdGxlO1xuICAgICAgICB0aGlzLmJ1dHRvbnNbY29tbWFuZE5hbWVdLmlubmVySFRNTCA9IHRoaXMuY29tbWFuZHNbY29tbWFuZE5hbWVdLmlubmVySFRNTDtcblxuICAgICAgICB0aGlzLmJ1dHRvbnNbY29tbWFuZE5hbWVdLmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZWRvd25cIiwgKGUpID0+XG4gICAgICAgICAgdGhpcy5oYW5kbGVDbGljayhjb21tYW5kTmFtZSwgZSlcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5lLmFwcGVuZENoaWxkKHRoaXMuYnV0dG9uc1tjb21tYW5kTmFtZV0pO1xuICAgICAgfVxuICAgIH1cbiAgICBwYXJlbnRFbGVtZW50LmFwcGVuZENoaWxkKHRoaXMuZSk7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZUNsaWNrKGNvbW1hbmROYW1lOiBzdHJpbmcsIGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5lZGl0b3IpIHJldHVybjtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGlmICh0eXBlb2YgdGhpcy5jb21tYW5kc1tjb21tYW5kTmFtZV0uYWN0aW9uID09PSBcInN0cmluZ1wiKSB7XG4gICAgICBpZiAodGhpcy5zdGF0ZVtjb21tYW5kTmFtZV0gPT09IGZhbHNlKVxuICAgICAgICAodGhpcy5lZGl0b3IgYXMgYW55KS5zZXRDb21tYW5kU3RhdGUoY29tbWFuZE5hbWUsIHRydWUpO1xuICAgICAgZWxzZSAodGhpcy5lZGl0b3IgYXMgYW55KS5zZXRDb21tYW5kU3RhdGUoY29tbWFuZE5hbWUsIGZhbHNlKTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiB0aGlzLmNvbW1hbmRzW2NvbW1hbmROYW1lXS5hY3Rpb24gPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgKHRoaXMuY29tbWFuZHNbY29tbWFuZE5hbWVdLmFjdGlvbiBhcyBDb21tYW5kQWN0aW9uKSh0aGlzLmVkaXRvcik7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHNldEVkaXRvcihlZGl0b3I6IEVkaXRvcik6IHZvaWQge1xuICAgIHRoaXMuZWRpdG9yID0gZWRpdG9yO1xuICAgIGVkaXRvci5hZGRFdmVudExpc3RlbmVyKFwic2VsZWN0aW9uXCIsIChlKSA9PiB0aGlzLmhhbmRsZVNlbGVjdGlvbihlKSk7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZVNlbGVjdGlvbihldmVudDogU2VsZWN0aW9uRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAoZXZlbnQuY29tbWFuZFN0YXRlKSB7XG4gICAgICBmb3IgKGxldCBjb21tYW5kIGluIHRoaXMuY29tbWFuZHMpIHtcbiAgICAgICAgaWYgKGV2ZW50LmNvbW1hbmRTdGF0ZVtjb21tYW5kXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgaWYgKHRoaXMuY29tbWFuZHNbY29tbWFuZF0uZW5hYmxlZCkge1xuICAgICAgICAgICAgdGhpcy5zdGF0ZVtjb21tYW5kXSA9IHRoaXMuY29tbWFuZHNbY29tbWFuZF0uZW5hYmxlZCEoXG4gICAgICAgICAgICAgIHRoaXMuZWRpdG9yISxcbiAgICAgICAgICAgICAgZXZlbnQuZm9jdXMsXG4gICAgICAgICAgICAgIGV2ZW50LmFuY2hvclxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zdGF0ZVtjb21tYW5kXSA9IGV2ZW50LmZvY3VzID8gZmFsc2UgOiBudWxsO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnN0YXRlW2NvbW1hbmRdID0gZXZlbnQuY29tbWFuZFN0YXRlW2NvbW1hbmRdO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuc3RhdGVbY29tbWFuZF0gPT09IHRydWUpIHtcbiAgICAgICAgICB0aGlzLmJ1dHRvbnNbY29tbWFuZF0uY2xhc3NOYW1lID0gXCJUTUNvbW1hbmRCdXR0b24gVE1Db21tYW5kQnV0dG9uX0FjdGl2ZVwiO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuc3RhdGVbY29tbWFuZF0gPT09IGZhbHNlKSB7XG4gICAgICAgICAgdGhpcy5idXR0b25zW2NvbW1hbmRdLmNsYXNzTmFtZSA9IFwiVE1Db21tYW5kQnV0dG9uIFRNQ29tbWFuZEJ1dHRvbl9JbmFjdGl2ZVwiO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuYnV0dG9uc1tjb21tYW5kXS5jbGFzc05hbWUgPSBcIlRNQ29tbWFuZEJ1dHRvbiBUTUNvbW1hbmRCdXR0b25fRGlzYWJsZWRcIjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlS2V5ZG93bihldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgIG91dGVyOiBmb3IgKGxldCBob3RrZXkgb2YgdGhpcy5ob3RrZXlzKSB7XG4gICAgICBpZiAoXG4gICAgICAgIChob3RrZXkua2V5ICYmIGV2ZW50LmtleS50b0xvd2VyQ2FzZSgpID09PSBob3RrZXkua2V5KSB8fFxuICAgICAgICAoaG90a2V5LmNvZGUgJiYgZXZlbnQuY29kZSA9PT0gaG90a2V5LmNvZGUpXG4gICAgICApIHtcbiAgICAgICAgZm9yIChsZXQgbW9kaWZpZXIgb2YgaG90a2V5Lm1vZGlmaWVycykge1xuICAgICAgICAgIGlmICghKGV2ZW50IGFzIGFueSlbbW9kaWZpZXJdKSBjb250aW51ZSBvdXRlcjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmhhbmRsZUNsaWNrKGhvdGtleS5jb21tYW5kLCBldmVudCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgQ29tbWFuZEJhcjsiLCIndXNlIHN0cmljdCc7XG52YXIgY2hlY2sgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGl0ICYmIGl0Lk1hdGggPT09IE1hdGggJiYgaXQ7XG59O1xuXG4vLyBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvODYjaXNzdWVjb21tZW50LTExNTc1OTAyOFxubW9kdWxlLmV4cG9ydHMgPVxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tZ2xvYmFsLXRoaXMgLS0gc2FmZVxuICBjaGVjayh0eXBlb2YgZ2xvYmFsVGhpcyA9PSAnb2JqZWN0JyAmJiBnbG9iYWxUaGlzKSB8fFxuICBjaGVjayh0eXBlb2Ygd2luZG93ID09ICdvYmplY3QnICYmIHdpbmRvdykgfHxcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXJlc3RyaWN0ZWQtZ2xvYmFscyAtLSBzYWZlXG4gIGNoZWNrKHR5cGVvZiBzZWxmID09ICdvYmplY3QnICYmIHNlbGYpIHx8XG4gIGNoZWNrKHR5cGVvZiBnbG9iYWwgPT0gJ29iamVjdCcgJiYgZ2xvYmFsKSB8fFxuICBjaGVjayh0eXBlb2YgdGhpcyA9PSAnb2JqZWN0JyAmJiB0aGlzKSB8fFxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbmV3LWZ1bmMgLS0gZmFsbGJhY2tcbiAgKGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0pKCkgfHwgRnVuY3Rpb24oJ3JldHVybiB0aGlzJykoKTtcbiIsIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGV4ZWMpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gISFleGVjKCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcblxuLy8gRGV0ZWN0IElFOCdzIGluY29tcGxldGUgZGVmaW5lUHJvcGVydHkgaW1wbGVtZW50YXRpb25cbm1vZHVsZS5leHBvcnRzID0gIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xuICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHt9LCAxLCB7IGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gNzsgfSB9KVsxXSAhPT0gNztcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLWZ1bmN0aW9uLXByb3RvdHlwZS1iaW5kIC0tIHNhZmVcbiAgdmFyIHRlc3QgPSAoZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9KS5iaW5kKCk7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wcm90b3R5cGUtYnVpbHRpbnMgLS0gc2FmZVxuICByZXR1cm4gdHlwZW9mIHRlc3QgIT0gJ2Z1bmN0aW9uJyB8fCB0ZXN0Lmhhc093blByb3BlcnR5KCdwcm90b3R5cGUnKTtcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIE5BVElWRV9CSU5EID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtbmF0aXZlJyk7XG5cbnZhciBGdW5jdGlvblByb3RvdHlwZSA9IEZ1bmN0aW9uLnByb3RvdHlwZTtcbnZhciBjYWxsID0gRnVuY3Rpb25Qcm90b3R5cGUuY2FsbDtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1mdW5jdGlvbi1wcm90b3R5cGUtYmluZCAtLSBzYWZlXG52YXIgdW5jdXJyeVRoaXNXaXRoQmluZCA9IE5BVElWRV9CSU5EICYmIEZ1bmN0aW9uUHJvdG90eXBlLmJpbmQuYmluZChjYWxsLCBjYWxsKTtcblxubW9kdWxlLmV4cG9ydHMgPSBOQVRJVkVfQklORCA/IHVuY3VycnlUaGlzV2l0aEJpbmQgOiBmdW5jdGlvbiAoZm4pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gY2FsbC5hcHBseShmbiwgYXJndW1lbnRzKTtcbiAgfTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLUlzSFRNTEREQS1pbnRlcm5hbC1zbG90XG52YXIgZG9jdW1lbnRBbGwgPSB0eXBlb2YgZG9jdW1lbnQgPT0gJ29iamVjdCcgJiYgZG9jdW1lbnQuYWxsO1xuXG4vLyBgSXNDYWxsYWJsZWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWlzY2FsbGFibGVcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSB1bmljb3JuL25vLXR5cGVvZi11bmRlZmluZWQgLS0gcmVxdWlyZWQgZm9yIHRlc3Rpbmdcbm1vZHVsZS5leHBvcnRzID0gdHlwZW9mIGRvY3VtZW50QWxsID09ICd1bmRlZmluZWQnICYmIGRvY3VtZW50QWxsICE9PSB1bmRlZmluZWQgPyBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgcmV0dXJuIHR5cGVvZiBhcmd1bWVudCA9PSAnZnVuY3Rpb24nIHx8IGFyZ3VtZW50ID09PSBkb2N1bWVudEFsbDtcbn0gOiBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgcmV0dXJuIHR5cGVvZiBhcmd1bWVudCA9PSAnZnVuY3Rpb24nO1xufTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIHdlIGNhbid0IHVzZSBqdXN0IGBpdCA9PSBudWxsYCBzaW5jZSBvZiBgZG9jdW1lbnQuYWxsYCBzcGVjaWFsIGNhc2Vcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtSXNIVE1MRERBLWludGVybmFsLXNsb3QtYWVjXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaXQgPT09IG51bGwgfHwgaXQgPT09IHVuZGVmaW5lZDtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgaXNOdWxsT3JVbmRlZmluZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtbnVsbC1vci11bmRlZmluZWQnKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbi8vIGBSZXF1aXJlT2JqZWN0Q29lcmNpYmxlYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtcmVxdWlyZW9iamVjdGNvZXJjaWJsZVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKGlzTnVsbE9yVW5kZWZpbmVkKGl0KSkgdGhyb3cgbmV3ICRUeXBlRXJyb3IoXCJDYW4ndCBjYWxsIG1ldGhvZCBvbiBcIiArIGl0KTtcbiAgcmV0dXJuIGl0O1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciByZXF1aXJlT2JqZWN0Q29lcmNpYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlcXVpcmUtb2JqZWN0LWNvZXJjaWJsZScpO1xuXG52YXIgJE9iamVjdCA9IE9iamVjdDtcblxuLy8gYFRvT2JqZWN0YCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtdG9vYmplY3Rcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHJldHVybiAkT2JqZWN0KHJlcXVpcmVPYmplY3RDb2VyY2libGUoYXJndW1lbnQpKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tb2JqZWN0Jyk7XG5cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IHVuY3VycnlUaGlzKHt9Lmhhc093blByb3BlcnR5KTtcblxuLy8gYEhhc093blByb3BlcnR5YCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtaGFzb3ducHJvcGVydHlcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtaGFzb3duIC0tIHNhZmVcbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0Lmhhc093biB8fCBmdW5jdGlvbiBoYXNPd24oaXQsIGtleSkge1xuICByZXR1cm4gaGFzT3duUHJvcGVydHkodG9PYmplY3QoaXQpLCBrZXkpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG5cbnZhciBGdW5jdGlvblByb3RvdHlwZSA9IEZ1bmN0aW9uLnByb3RvdHlwZTtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yIC0tIHNhZmVcbnZhciBnZXREZXNjcmlwdG9yID0gREVTQ1JJUFRPUlMgJiYgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcblxudmFyIEVYSVNUUyA9IGhhc093bihGdW5jdGlvblByb3RvdHlwZSwgJ25hbWUnKTtcbi8vIGFkZGl0aW9uYWwgcHJvdGVjdGlvbiBmcm9tIG1pbmlmaWVkIC8gbWFuZ2xlZCAvIGRyb3BwZWQgZnVuY3Rpb24gbmFtZXNcbnZhciBQUk9QRVIgPSBFWElTVFMgJiYgKGZ1bmN0aW9uIHNvbWV0aGluZygpIHsgLyogZW1wdHkgKi8gfSkubmFtZSA9PT0gJ3NvbWV0aGluZyc7XG52YXIgQ09ORklHVVJBQkxFID0gRVhJU1RTICYmICghREVTQ1JJUFRPUlMgfHwgKERFU0NSSVBUT1JTICYmIGdldERlc2NyaXB0b3IoRnVuY3Rpb25Qcm90b3R5cGUsICduYW1lJykuY29uZmlndXJhYmxlKSk7XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBFWElTVFM6IEVYSVNUUyxcbiAgUFJPUEVSOiBQUk9QRVIsXG4gIENPTkZJR1VSQUJMRTogQ09ORklHVVJBQkxFXG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSBmYWxzZTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gc2FmZVxudmFyIGRlZmluZVByb3BlcnR5ID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG4gIHRyeSB7XG4gICAgZGVmaW5lUHJvcGVydHkoZ2xvYmFsVGhpcywga2V5LCB7IHZhbHVlOiB2YWx1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBnbG9iYWxUaGlzW2tleV0gPSB2YWx1ZTtcbiAgfSByZXR1cm4gdmFsdWU7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIElTX1BVUkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtcHVyZScpO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcbnZhciBkZWZpbmVHbG9iYWxQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtZ2xvYmFsLXByb3BlcnR5Jyk7XG5cbnZhciBTSEFSRUQgPSAnX19jb3JlLWpzX3NoYXJlZF9fJztcbnZhciBzdG9yZSA9IG1vZHVsZS5leHBvcnRzID0gZ2xvYmFsVGhpc1tTSEFSRURdIHx8IGRlZmluZUdsb2JhbFByb3BlcnR5KFNIQVJFRCwge30pO1xuXG4oc3RvcmUudmVyc2lvbnMgfHwgKHN0b3JlLnZlcnNpb25zID0gW10pKS5wdXNoKHtcbiAgdmVyc2lvbjogJzMuNDIuMCcsXG4gIG1vZGU6IElTX1BVUkUgPyAncHVyZScgOiAnZ2xvYmFsJyxcbiAgY29weXJpZ2h0OiAnwqkgMjAxNC0yMDI1IERlbmlzIFB1c2hrYXJldiAoemxvaXJvY2sucnUpJyxcbiAgbGljZW5zZTogJ2h0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2Jsb2IvdjMuNDIuMC9MSUNFTlNFJyxcbiAgc291cmNlOiAnaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMnXG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgc3RvcmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkLXN0b3JlJyk7XG5cbnZhciBmdW5jdGlvblRvU3RyaW5nID0gdW5jdXJyeVRoaXMoRnVuY3Rpb24udG9TdHJpbmcpO1xuXG4vLyB0aGlzIGhlbHBlciBicm9rZW4gaW4gYGNvcmUtanNAMy40LjEtMy40LjRgLCBzbyB3ZSBjYW4ndCB1c2UgYHNoYXJlZGAgaGVscGVyXG5pZiAoIWlzQ2FsbGFibGUoc3RvcmUuaW5zcGVjdFNvdXJjZSkpIHtcbiAgc3RvcmUuaW5zcGVjdFNvdXJjZSA9IGZ1bmN0aW9uIChpdCkge1xuICAgIHJldHVybiBmdW5jdGlvblRvU3RyaW5nKGl0KTtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzdG9yZS5pbnNwZWN0U291cmNlO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG5cbnZhciBXZWFrTWFwID0gZ2xvYmFsVGhpcy5XZWFrTWFwO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGlzQ2FsbGFibGUoV2Vha01hcCkgJiYgL25hdGl2ZSBjb2RlLy50ZXN0KFN0cmluZyhXZWFrTWFwKSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gdHlwZW9mIGl0ID09ICdvYmplY3QnID8gaXQgIT09IG51bGwgOiBpc0NhbGxhYmxlKGl0KTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xuXG52YXIgZG9jdW1lbnQgPSBnbG9iYWxUaGlzLmRvY3VtZW50O1xuLy8gdHlwZW9mIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQgaXMgJ29iamVjdCcgaW4gb2xkIElFXG52YXIgRVhJU1RTID0gaXNPYmplY3QoZG9jdW1lbnQpICYmIGlzT2JqZWN0KGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gRVhJU1RTID8gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChpdCkgOiB7fTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGNyZWF0ZUVsZW1lbnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZG9jdW1lbnQtY3JlYXRlLWVsZW1lbnQnKTtcblxuLy8gVGhhbmtzIHRvIElFOCBmb3IgaXRzIGZ1bm55IGRlZmluZVByb3BlcnR5XG5tb2R1bGUuZXhwb3J0cyA9ICFERVNDUklQVE9SUyAmJiAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnR5IC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG4gIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoY3JlYXRlRWxlbWVudCgnZGl2JyksICdhJywge1xuICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gNzsgfVxuICB9KS5hICE9PSA3O1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xuXG4vLyBWOCB+IENocm9tZSAzNi1cbi8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTMzMzRcbm1vZHVsZS5leHBvcnRzID0gREVTQ1JJUFRPUlMgJiYgZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnR5IC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG4gIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9LCAncHJvdG90eXBlJywge1xuICAgIHZhbHVlOiA0MixcbiAgICB3cml0YWJsZTogZmFsc2VcbiAgfSkucHJvdG90eXBlICE9PSA0Mjtcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xuXG52YXIgJFN0cmluZyA9IFN0cmluZztcbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG4vLyBgQXNzZXJ0OiBUeXBlKGFyZ3VtZW50KSBpcyBPYmplY3RgXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICBpZiAoaXNPYmplY3QoYXJndW1lbnQpKSByZXR1cm4gYXJndW1lbnQ7XG4gIHRocm93IG5ldyAkVHlwZUVycm9yKCRTdHJpbmcoYXJndW1lbnQpICsgJyBpcyBub3QgYW4gb2JqZWN0Jyk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIE5BVElWRV9CSU5EID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtbmF0aXZlJyk7XG5cbnZhciBjYWxsID0gRnVuY3Rpb24ucHJvdG90eXBlLmNhbGw7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tZnVuY3Rpb24tcHJvdG90eXBlLWJpbmQgLS0gc2FmZVxubW9kdWxlLmV4cG9ydHMgPSBOQVRJVkVfQklORCA/IGNhbGwuYmluZChjYWxsKSA6IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIGNhbGwuYXBwbHkoY2FsbCwgYXJndW1lbnRzKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcblxudmFyIGFGdW5jdGlvbiA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICByZXR1cm4gaXNDYWxsYWJsZShhcmd1bWVudCkgPyBhcmd1bWVudCA6IHVuZGVmaW5lZDtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG5hbWVzcGFjZSwgbWV0aG9kKSB7XG4gIHJldHVybiBhcmd1bWVudHMubGVuZ3RoIDwgMiA/IGFGdW5jdGlvbihnbG9iYWxUaGlzW25hbWVzcGFjZV0pIDogZ2xvYmFsVGhpc1tuYW1lc3BhY2VdICYmIGdsb2JhbFRoaXNbbmFtZXNwYWNlXVttZXRob2RdO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSB1bmN1cnJ5VGhpcyh7fS5pc1Byb3RvdHlwZU9mKTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG5cbnZhciBuYXZpZ2F0b3IgPSBnbG9iYWxUaGlzLm5hdmlnYXRvcjtcbnZhciB1c2VyQWdlbnQgPSBuYXZpZ2F0b3IgJiYgbmF2aWdhdG9yLnVzZXJBZ2VudDtcblxubW9kdWxlLmV4cG9ydHMgPSB1c2VyQWdlbnQgPyBTdHJpbmcodXNlckFnZW50KSA6ICcnO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcbnZhciB1c2VyQWdlbnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW52aXJvbm1lbnQtdXNlci1hZ2VudCcpO1xuXG52YXIgcHJvY2VzcyA9IGdsb2JhbFRoaXMucHJvY2VzcztcbnZhciBEZW5vID0gZ2xvYmFsVGhpcy5EZW5vO1xudmFyIHZlcnNpb25zID0gcHJvY2VzcyAmJiBwcm9jZXNzLnZlcnNpb25zIHx8IERlbm8gJiYgRGVuby52ZXJzaW9uO1xudmFyIHY4ID0gdmVyc2lvbnMgJiYgdmVyc2lvbnMudjg7XG52YXIgbWF0Y2gsIHZlcnNpb247XG5cbmlmICh2OCkge1xuICBtYXRjaCA9IHY4LnNwbGl0KCcuJyk7XG4gIC8vIGluIG9sZCBDaHJvbWUsIHZlcnNpb25zIG9mIFY4IGlzbid0IFY4ID0gQ2hyb21lIC8gMTBcbiAgLy8gYnV0IHRoZWlyIGNvcnJlY3QgdmVyc2lvbnMgYXJlIG5vdCBpbnRlcmVzdGluZyBmb3IgdXNcbiAgdmVyc2lvbiA9IG1hdGNoWzBdID4gMCAmJiBtYXRjaFswXSA8IDQgPyAxIDogKyhtYXRjaFswXSArIG1hdGNoWzFdKTtcbn1cblxuLy8gQnJvd3NlckZTIE5vZGVKUyBgcHJvY2Vzc2AgcG9seWZpbGwgaW5jb3JyZWN0bHkgc2V0IGAudjhgIHRvIGAwLjBgXG4vLyBzbyBjaGVjayBgdXNlckFnZW50YCBldmVuIGlmIGAudjhgIGV4aXN0cywgYnV0IDBcbmlmICghdmVyc2lvbiAmJiB1c2VyQWdlbnQpIHtcbiAgbWF0Y2ggPSB1c2VyQWdlbnQubWF0Y2goL0VkZ2VcXC8oXFxkKykvKTtcbiAgaWYgKCFtYXRjaCB8fCBtYXRjaFsxXSA+PSA3NCkge1xuICAgIG1hdGNoID0gdXNlckFnZW50Lm1hdGNoKC9DaHJvbWVcXC8oXFxkKykvKTtcbiAgICBpZiAobWF0Y2gpIHZlcnNpb24gPSArbWF0Y2hbMV07XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSB2ZXJzaW9uO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLyogZXNsaW50LWRpc2FibGUgZXMvbm8tc3ltYm9sIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nICovXG52YXIgVjhfVkVSU0lPTiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbnZpcm9ubWVudC12OC12ZXJzaW9uJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG5cbnZhciAkU3RyaW5nID0gZ2xvYmFsVGhpcy5TdHJpbmc7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHlzeW1ib2xzIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG5tb2R1bGUuZXhwb3J0cyA9ICEhT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyAmJiAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICB2YXIgc3ltYm9sID0gU3ltYm9sKCdzeW1ib2wgZGV0ZWN0aW9uJyk7XG4gIC8vIENocm9tZSAzOCBTeW1ib2wgaGFzIGluY29ycmVjdCB0b1N0cmluZyBjb252ZXJzaW9uXG4gIC8vIGBnZXQtb3duLXByb3BlcnR5LXN5bWJvbHNgIHBvbHlmaWxsIHN5bWJvbHMgY29udmVydGVkIHRvIG9iamVjdCBhcmUgbm90IFN5bWJvbCBpbnN0YW5jZXNcbiAgLy8gbmI6IERvIG5vdCBjYWxsIGBTdHJpbmdgIGRpcmVjdGx5IHRvIGF2b2lkIHRoaXMgYmVpbmcgb3B0aW1pemVkIG91dCB0byBgc3ltYm9sKycnYCB3aGljaCB3aWxsLFxuICAvLyBvZiBjb3Vyc2UsIGZhaWwuXG4gIHJldHVybiAhJFN0cmluZyhzeW1ib2wpIHx8ICEoT2JqZWN0KHN5bWJvbCkgaW5zdGFuY2VvZiBTeW1ib2wpIHx8XG4gICAgLy8gQ2hyb21lIDM4LTQwIHN5bWJvbHMgYXJlIG5vdCBpbmhlcml0ZWQgZnJvbSBET00gY29sbGVjdGlvbnMgcHJvdG90eXBlcyB0byBpbnN0YW5jZXNcbiAgICAhU3ltYm9sLnNoYW0gJiYgVjhfVkVSU0lPTiAmJiBWOF9WRVJTSU9OIDwgNDE7XG59KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8qIGVzbGludC1kaXNhYmxlIGVzL25vLXN5bWJvbCAtLSByZXF1aXJlZCBmb3IgdGVzdGluZyAqL1xudmFyIE5BVElWRV9TWU1CT0wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3ltYm9sLWNvbnN0cnVjdG9yLWRldGVjdGlvbicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IE5BVElWRV9TWU1CT0wgJiZcbiAgIVN5bWJvbC5zaGFtICYmXG4gIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT0gJ3N5bWJvbCc7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgaXNQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtaXMtcHJvdG90eXBlLW9mJyk7XG52YXIgVVNFX1NZTUJPTF9BU19VSUQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdXNlLXN5bWJvbC1hcy11aWQnKTtcblxudmFyICRPYmplY3QgPSBPYmplY3Q7XG5cbm1vZHVsZS5leHBvcnRzID0gVVNFX1NZTUJPTF9BU19VSUQgPyBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIHR5cGVvZiBpdCA9PSAnc3ltYm9sJztcbn0gOiBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyICRTeW1ib2wgPSBnZXRCdWlsdEluKCdTeW1ib2wnKTtcbiAgcmV0dXJuIGlzQ2FsbGFibGUoJFN5bWJvbCkgJiYgaXNQcm90b3R5cGVPZigkU3ltYm9sLnByb3RvdHlwZSwgJE9iamVjdChpdCkpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkU3RyaW5nID0gU3RyaW5nO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICB0cnkge1xuICAgIHJldHVybiAkU3RyaW5nKGFyZ3VtZW50KTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gJ09iamVjdCc7XG4gIH1cbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIHRyeVRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RyeS10by1zdHJpbmcnKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbi8vIGBBc3NlcnQ6IElzQ2FsbGFibGUoYXJndW1lbnQpIGlzIHRydWVgXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICBpZiAoaXNDYWxsYWJsZShhcmd1bWVudCkpIHJldHVybiBhcmd1bWVudDtcbiAgdGhyb3cgbmV3ICRUeXBlRXJyb3IodHJ5VG9TdHJpbmcoYXJndW1lbnQpICsgJyBpcyBub3QgYSBmdW5jdGlvbicpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBhQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1jYWxsYWJsZScpO1xudmFyIGlzTnVsbE9yVW5kZWZpbmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW51bGwtb3ItdW5kZWZpbmVkJyk7XG5cbi8vIGBHZXRNZXRob2RgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1nZXRtZXRob2Rcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKFYsIFApIHtcbiAgdmFyIGZ1bmMgPSBWW1BdO1xuICByZXR1cm4gaXNOdWxsT3JVbmRlZmluZWQoZnVuYykgPyB1bmRlZmluZWQgOiBhQ2FsbGFibGUoZnVuYyk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbi8vIGBPcmRpbmFyeVRvUHJpbWl0aXZlYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb3JkaW5hcnl0b3ByaW1pdGl2ZVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaW5wdXQsIHByZWYpIHtcbiAgdmFyIGZuLCB2YWw7XG4gIGlmIChwcmVmID09PSAnc3RyaW5nJyAmJiBpc0NhbGxhYmxlKGZuID0gaW5wdXQudG9TdHJpbmcpICYmICFpc09iamVjdCh2YWwgPSBjYWxsKGZuLCBpbnB1dCkpKSByZXR1cm4gdmFsO1xuICBpZiAoaXNDYWxsYWJsZShmbiA9IGlucHV0LnZhbHVlT2YpICYmICFpc09iamVjdCh2YWwgPSBjYWxsKGZuLCBpbnB1dCkpKSByZXR1cm4gdmFsO1xuICBpZiAocHJlZiAhPT0gJ3N0cmluZycgJiYgaXNDYWxsYWJsZShmbiA9IGlucHV0LnRvU3RyaW5nKSAmJiAhaXNPYmplY3QodmFsID0gY2FsbChmbiwgaW5wdXQpKSkgcmV0dXJuIHZhbDtcbiAgdGhyb3cgbmV3ICRUeXBlRXJyb3IoXCJDYW4ndCBjb252ZXJ0IG9iamVjdCB0byBwcmltaXRpdmUgdmFsdWVcIik7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHN0b3JlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZC1zdG9yZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG4gIHJldHVybiBzdG9yZVtrZXldIHx8IChzdG9yZVtrZXldID0gdmFsdWUgfHwge30pO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcblxudmFyIGlkID0gMDtcbnZhciBwb3N0Zml4ID0gTWF0aC5yYW5kb20oKTtcbnZhciB0b1N0cmluZyA9IHVuY3VycnlUaGlzKDEuMC50b1N0cmluZyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSkge1xuICByZXR1cm4gJ1N5bWJvbCgnICsgKGtleSA9PT0gdW5kZWZpbmVkID8gJycgOiBrZXkpICsgJylfJyArIHRvU3RyaW5nKCsraWQgKyBwb3N0Zml4LCAzNik7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcbnZhciBzaGFyZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkJyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciB1aWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdWlkJyk7XG52YXIgTkFUSVZFX1NZTUJPTCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zeW1ib2wtY29uc3RydWN0b3ItZGV0ZWN0aW9uJyk7XG52YXIgVVNFX1NZTUJPTF9BU19VSUQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdXNlLXN5bWJvbC1hcy11aWQnKTtcblxudmFyIFN5bWJvbCA9IGdsb2JhbFRoaXMuU3ltYm9sO1xudmFyIFdlbGxLbm93blN5bWJvbHNTdG9yZSA9IHNoYXJlZCgnd2tzJyk7XG52YXIgY3JlYXRlV2VsbEtub3duU3ltYm9sID0gVVNFX1NZTUJPTF9BU19VSUQgPyBTeW1ib2xbJ2ZvciddIHx8IFN5bWJvbCA6IFN5bWJvbCAmJiBTeW1ib2wud2l0aG91dFNldHRlciB8fCB1aWQ7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgaWYgKCFoYXNPd24oV2VsbEtub3duU3ltYm9sc1N0b3JlLCBuYW1lKSkge1xuICAgIFdlbGxLbm93blN5bWJvbHNTdG9yZVtuYW1lXSA9IE5BVElWRV9TWU1CT0wgJiYgaGFzT3duKFN5bWJvbCwgbmFtZSlcbiAgICAgID8gU3ltYm9sW25hbWVdXG4gICAgICA6IGNyZWF0ZVdlbGxLbm93blN5bWJvbCgnU3ltYm9sLicgKyBuYW1lKTtcbiAgfSByZXR1cm4gV2VsbEtub3duU3ltYm9sc1N0b3JlW25hbWVdO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciBpc1N5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1zeW1ib2wnKTtcbnZhciBnZXRNZXRob2QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LW1ldGhvZCcpO1xudmFyIG9yZGluYXJ5VG9QcmltaXRpdmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb3JkaW5hcnktdG8tcHJpbWl0aXZlJyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xudmFyIFRPX1BSSU1JVElWRSA9IHdlbGxLbm93blN5bWJvbCgndG9QcmltaXRpdmUnKTtcblxuLy8gYFRvUHJpbWl0aXZlYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtdG9wcmltaXRpdmVcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGlucHV0LCBwcmVmKSB7XG4gIGlmICghaXNPYmplY3QoaW5wdXQpIHx8IGlzU3ltYm9sKGlucHV0KSkgcmV0dXJuIGlucHV0O1xuICB2YXIgZXhvdGljVG9QcmltID0gZ2V0TWV0aG9kKGlucHV0LCBUT19QUklNSVRJVkUpO1xuICB2YXIgcmVzdWx0O1xuICBpZiAoZXhvdGljVG9QcmltKSB7XG4gICAgaWYgKHByZWYgPT09IHVuZGVmaW5lZCkgcHJlZiA9ICdkZWZhdWx0JztcbiAgICByZXN1bHQgPSBjYWxsKGV4b3RpY1RvUHJpbSwgaW5wdXQsIHByZWYpO1xuICAgIGlmICghaXNPYmplY3QocmVzdWx0KSB8fCBpc1N5bWJvbChyZXN1bHQpKSByZXR1cm4gcmVzdWx0O1xuICAgIHRocm93IG5ldyAkVHlwZUVycm9yKFwiQ2FuJ3QgY29udmVydCBvYmplY3QgdG8gcHJpbWl0aXZlIHZhbHVlXCIpO1xuICB9XG4gIGlmIChwcmVmID09PSB1bmRlZmluZWQpIHByZWYgPSAnbnVtYmVyJztcbiAgcmV0dXJuIG9yZGluYXJ5VG9QcmltaXRpdmUoaW5wdXQsIHByZWYpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciB0b1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1wcmltaXRpdmUnKTtcbnZhciBpc1N5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1zeW1ib2wnKTtcblxuLy8gYFRvUHJvcGVydHlLZXlgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy10b3Byb3BlcnR5a2V5XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICB2YXIga2V5ID0gdG9QcmltaXRpdmUoYXJndW1lbnQsICdzdHJpbmcnKTtcbiAgcmV0dXJuIGlzU3ltYm9sKGtleSkgPyBrZXkgOiBrZXkgKyAnJztcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBJRThfRE9NX0RFRklORSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pZTgtZG9tLWRlZmluZScpO1xudmFyIFY4X1BST1RPVFlQRV9ERUZJTkVfQlVHID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3Y4LXByb3RvdHlwZS1kZWZpbmUtYnVnJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgdG9Qcm9wZXJ0eUtleSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1wcm9wZXJ0eS1rZXknKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnR5IC0tIHNhZmVcbnZhciAkZGVmaW5lUHJvcGVydHkgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5ZGVzY3JpcHRvciAtLSBzYWZlXG52YXIgJGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG52YXIgRU5VTUVSQUJMRSA9ICdlbnVtZXJhYmxlJztcbnZhciBDT05GSUdVUkFCTEUgPSAnY29uZmlndXJhYmxlJztcbnZhciBXUklUQUJMRSA9ICd3cml0YWJsZSc7XG5cbi8vIGBPYmplY3QuZGVmaW5lUHJvcGVydHlgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZGVmaW5lcHJvcGVydHlcbmV4cG9ydHMuZiA9IERFU0NSSVBUT1JTID8gVjhfUFJPVE9UWVBFX0RFRklORV9CVUcgPyBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0eShPLCBQLCBBdHRyaWJ1dGVzKSB7XG4gIGFuT2JqZWN0KE8pO1xuICBQID0gdG9Qcm9wZXJ0eUtleShQKTtcbiAgYW5PYmplY3QoQXR0cmlidXRlcyk7XG4gIGlmICh0eXBlb2YgTyA9PT0gJ2Z1bmN0aW9uJyAmJiBQID09PSAncHJvdG90eXBlJyAmJiAndmFsdWUnIGluIEF0dHJpYnV0ZXMgJiYgV1JJVEFCTEUgaW4gQXR0cmlidXRlcyAmJiAhQXR0cmlidXRlc1tXUklUQUJMRV0pIHtcbiAgICB2YXIgY3VycmVudCA9ICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywgUCk7XG4gICAgaWYgKGN1cnJlbnQgJiYgY3VycmVudFtXUklUQUJMRV0pIHtcbiAgICAgIE9bUF0gPSBBdHRyaWJ1dGVzLnZhbHVlO1xuICAgICAgQXR0cmlidXRlcyA9IHtcbiAgICAgICAgY29uZmlndXJhYmxlOiBDT05GSUdVUkFCTEUgaW4gQXR0cmlidXRlcyA/IEF0dHJpYnV0ZXNbQ09ORklHVVJBQkxFXSA6IGN1cnJlbnRbQ09ORklHVVJBQkxFXSxcbiAgICAgICAgZW51bWVyYWJsZTogRU5VTUVSQUJMRSBpbiBBdHRyaWJ1dGVzID8gQXR0cmlidXRlc1tFTlVNRVJBQkxFXSA6IGN1cnJlbnRbRU5VTUVSQUJMRV0sXG4gICAgICAgIHdyaXRhYmxlOiBmYWxzZVxuICAgICAgfTtcbiAgICB9XG4gIH0gcmV0dXJuICRkZWZpbmVQcm9wZXJ0eShPLCBQLCBBdHRyaWJ1dGVzKTtcbn0gOiAkZGVmaW5lUHJvcGVydHkgOiBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0eShPLCBQLCBBdHRyaWJ1dGVzKSB7XG4gIGFuT2JqZWN0KE8pO1xuICBQID0gdG9Qcm9wZXJ0eUtleShQKTtcbiAgYW5PYmplY3QoQXR0cmlidXRlcyk7XG4gIGlmIChJRThfRE9NX0RFRklORSkgdHJ5IHtcbiAgICByZXR1cm4gJGRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpO1xuICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG4gIGlmICgnZ2V0JyBpbiBBdHRyaWJ1dGVzIHx8ICdzZXQnIGluIEF0dHJpYnV0ZXMpIHRocm93IG5ldyAkVHlwZUVycm9yKCdBY2Nlc3NvcnMgbm90IHN1cHBvcnRlZCcpO1xuICBpZiAoJ3ZhbHVlJyBpbiBBdHRyaWJ1dGVzKSBPW1BdID0gQXR0cmlidXRlcy52YWx1ZTtcbiAgcmV0dXJuIE87XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYml0bWFwLCB2YWx1ZSkge1xuICByZXR1cm4ge1xuICAgIGVudW1lcmFibGU6ICEoYml0bWFwICYgMSksXG4gICAgY29uZmlndXJhYmxlOiAhKGJpdG1hcCAmIDIpLFxuICAgIHdyaXRhYmxlOiAhKGJpdG1hcCAmIDQpLFxuICAgIHZhbHVlOiB2YWx1ZVxuICB9O1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGRlZmluZVByb3BlcnR5TW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKTtcbnZhciBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcblxubW9kdWxlLmV4cG9ydHMgPSBERVNDUklQVE9SUyA/IGZ1bmN0aW9uIChvYmplY3QsIGtleSwgdmFsdWUpIHtcbiAgcmV0dXJuIGRlZmluZVByb3BlcnR5TW9kdWxlLmYob2JqZWN0LCBrZXksIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvcigxLCB2YWx1ZSkpO1xufSA6IGZ1bmN0aW9uIChvYmplY3QsIGtleSwgdmFsdWUpIHtcbiAgb2JqZWN0W2tleV0gPSB2YWx1ZTtcbiAgcmV0dXJuIG9iamVjdDtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgc2hhcmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZCcpO1xudmFyIHVpZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy91aWQnKTtcblxudmFyIGtleXMgPSBzaGFyZWQoJ2tleXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5KSB7XG4gIHJldHVybiBrZXlzW2tleV0gfHwgKGtleXNba2V5XSA9IHVpZChrZXkpKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IHt9O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIE5BVElWRV9XRUFLX01BUCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWFrLW1hcC1iYXNpYy1kZXRlY3Rpb24nKTtcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1ub24tZW51bWVyYWJsZS1wcm9wZXJ0eScpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgc2hhcmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZC1zdG9yZScpO1xudmFyIHNoYXJlZEtleSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQta2V5Jyk7XG52YXIgaGlkZGVuS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oaWRkZW4ta2V5cycpO1xuXG52YXIgT0JKRUNUX0FMUkVBRFlfSU5JVElBTElaRUQgPSAnT2JqZWN0IGFscmVhZHkgaW5pdGlhbGl6ZWQnO1xudmFyIFR5cGVFcnJvciA9IGdsb2JhbFRoaXMuVHlwZUVycm9yO1xudmFyIFdlYWtNYXAgPSBnbG9iYWxUaGlzLldlYWtNYXA7XG52YXIgc2V0LCBnZXQsIGhhcztcblxudmFyIGVuZm9yY2UgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGhhcyhpdCkgPyBnZXQoaXQpIDogc2V0KGl0LCB7fSk7XG59O1xuXG52YXIgZ2V0dGVyRm9yID0gZnVuY3Rpb24gKFRZUEUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIChpdCkge1xuICAgIHZhciBzdGF0ZTtcbiAgICBpZiAoIWlzT2JqZWN0KGl0KSB8fCAoc3RhdGUgPSBnZXQoaXQpKS50eXBlICE9PSBUWVBFKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbmNvbXBhdGlibGUgcmVjZWl2ZXIsICcgKyBUWVBFICsgJyByZXF1aXJlZCcpO1xuICAgIH0gcmV0dXJuIHN0YXRlO1xuICB9O1xufTtcblxuaWYgKE5BVElWRV9XRUFLX01BUCB8fCBzaGFyZWQuc3RhdGUpIHtcbiAgdmFyIHN0b3JlID0gc2hhcmVkLnN0YXRlIHx8IChzaGFyZWQuc3RhdGUgPSBuZXcgV2Vha01hcCgpKTtcbiAgLyogZXNsaW50LWRpc2FibGUgbm8tc2VsZi1hc3NpZ24gLS0gcHJvdG90eXBlIG1ldGhvZHMgcHJvdGVjdGlvbiAqL1xuICBzdG9yZS5nZXQgPSBzdG9yZS5nZXQ7XG4gIHN0b3JlLmhhcyA9IHN0b3JlLmhhcztcbiAgc3RvcmUuc2V0ID0gc3RvcmUuc2V0O1xuICAvKiBlc2xpbnQtZW5hYmxlIG5vLXNlbGYtYXNzaWduIC0tIHByb3RvdHlwZSBtZXRob2RzIHByb3RlY3Rpb24gKi9cbiAgc2V0ID0gZnVuY3Rpb24gKGl0LCBtZXRhZGF0YSkge1xuICAgIGlmIChzdG9yZS5oYXMoaXQpKSB0aHJvdyBuZXcgVHlwZUVycm9yKE9CSkVDVF9BTFJFQURZX0lOSVRJQUxJWkVEKTtcbiAgICBtZXRhZGF0YS5mYWNhZGUgPSBpdDtcbiAgICBzdG9yZS5zZXQoaXQsIG1ldGFkYXRhKTtcbiAgICByZXR1cm4gbWV0YWRhdGE7XG4gIH07XG4gIGdldCA9IGZ1bmN0aW9uIChpdCkge1xuICAgIHJldHVybiBzdG9yZS5nZXQoaXQpIHx8IHt9O1xuICB9O1xuICBoYXMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgICByZXR1cm4gc3RvcmUuaGFzKGl0KTtcbiAgfTtcbn0gZWxzZSB7XG4gIHZhciBTVEFURSA9IHNoYXJlZEtleSgnc3RhdGUnKTtcbiAgaGlkZGVuS2V5c1tTVEFURV0gPSB0cnVlO1xuICBzZXQgPSBmdW5jdGlvbiAoaXQsIG1ldGFkYXRhKSB7XG4gICAgaWYgKGhhc093bihpdCwgU1RBVEUpKSB0aHJvdyBuZXcgVHlwZUVycm9yKE9CSkVDVF9BTFJFQURZX0lOSVRJQUxJWkVEKTtcbiAgICBtZXRhZGF0YS5mYWNhZGUgPSBpdDtcbiAgICBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkoaXQsIFNUQVRFLCBtZXRhZGF0YSk7XG4gICAgcmV0dXJuIG1ldGFkYXRhO1xuICB9O1xuICBnZXQgPSBmdW5jdGlvbiAoaXQpIHtcbiAgICByZXR1cm4gaGFzT3duKGl0LCBTVEFURSkgPyBpdFtTVEFURV0gOiB7fTtcbiAgfTtcbiAgaGFzID0gZnVuY3Rpb24gKGl0KSB7XG4gICAgcmV0dXJuIGhhc093bihpdCwgU1RBVEUpO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgc2V0OiBzZXQsXG4gIGdldDogZ2V0LFxuICBoYXM6IGhhcyxcbiAgZW5mb3JjZTogZW5mb3JjZSxcbiAgZ2V0dGVyRm9yOiBnZXR0ZXJGb3Jcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIENPTkZJR1VSQUJMRV9GVU5DVElPTl9OQU1FID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLW5hbWUnKS5DT05GSUdVUkFCTEU7XG52YXIgaW5zcGVjdFNvdXJjZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbnNwZWN0LXNvdXJjZScpO1xudmFyIEludGVybmFsU3RhdGVNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW50ZXJuYWwtc3RhdGUnKTtcblxudmFyIGVuZm9yY2VJbnRlcm5hbFN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5lbmZvcmNlO1xudmFyIGdldEludGVybmFsU3RhdGUgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLmdldDtcbnZhciAkU3RyaW5nID0gU3RyaW5nO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSBzYWZlXG52YXIgZGVmaW5lUHJvcGVydHkgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG52YXIgc3RyaW5nU2xpY2UgPSB1bmN1cnJ5VGhpcygnJy5zbGljZSk7XG52YXIgcmVwbGFjZSA9IHVuY3VycnlUaGlzKCcnLnJlcGxhY2UpO1xudmFyIGpvaW4gPSB1bmN1cnJ5VGhpcyhbXS5qb2luKTtcblxudmFyIENPTkZJR1VSQUJMRV9MRU5HVEggPSBERVNDUklQVE9SUyAmJiAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gZGVmaW5lUHJvcGVydHkoZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9LCAnbGVuZ3RoJywgeyB2YWx1ZTogOCB9KS5sZW5ndGggIT09IDg7XG59KTtcblxudmFyIFRFTVBMQVRFID0gU3RyaW5nKFN0cmluZykuc3BsaXQoJ1N0cmluZycpO1xuXG52YXIgbWFrZUJ1aWx0SW4gPSBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh2YWx1ZSwgbmFtZSwgb3B0aW9ucykge1xuICBpZiAoc3RyaW5nU2xpY2UoJFN0cmluZyhuYW1lKSwgMCwgNykgPT09ICdTeW1ib2woJykge1xuICAgIG5hbWUgPSAnWycgKyByZXBsYWNlKCRTdHJpbmcobmFtZSksIC9eU3ltYm9sXFwoKFteKV0qKVxcKS4qJC8sICckMScpICsgJ10nO1xuICB9XG4gIGlmIChvcHRpb25zICYmIG9wdGlvbnMuZ2V0dGVyKSBuYW1lID0gJ2dldCAnICsgbmFtZTtcbiAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5zZXR0ZXIpIG5hbWUgPSAnc2V0ICcgKyBuYW1lO1xuICBpZiAoIWhhc093bih2YWx1ZSwgJ25hbWUnKSB8fCAoQ09ORklHVVJBQkxFX0ZVTkNUSU9OX05BTUUgJiYgdmFsdWUubmFtZSAhPT0gbmFtZSkpIHtcbiAgICBpZiAoREVTQ1JJUFRPUlMpIGRlZmluZVByb3BlcnR5KHZhbHVlLCAnbmFtZScsIHsgdmFsdWU6IG5hbWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9KTtcbiAgICBlbHNlIHZhbHVlLm5hbWUgPSBuYW1lO1xuICB9XG4gIGlmIChDT05GSUdVUkFCTEVfTEVOR1RIICYmIG9wdGlvbnMgJiYgaGFzT3duKG9wdGlvbnMsICdhcml0eScpICYmIHZhbHVlLmxlbmd0aCAhPT0gb3B0aW9ucy5hcml0eSkge1xuICAgIGRlZmluZVByb3BlcnR5KHZhbHVlLCAnbGVuZ3RoJywgeyB2YWx1ZTogb3B0aW9ucy5hcml0eSB9KTtcbiAgfVxuICB0cnkge1xuICAgIGlmIChvcHRpb25zICYmIGhhc093bihvcHRpb25zLCAnY29uc3RydWN0b3InKSAmJiBvcHRpb25zLmNvbnN0cnVjdG9yKSB7XG4gICAgICBpZiAoREVTQ1JJUFRPUlMpIGRlZmluZVByb3BlcnR5KHZhbHVlLCAncHJvdG90eXBlJywgeyB3cml0YWJsZTogZmFsc2UgfSk7XG4gICAgLy8gaW4gVjggfiBDaHJvbWUgNTMsIHByb3RvdHlwZXMgb2Ygc29tZSBtZXRob2RzLCBsaWtlIGBBcnJheS5wcm90b3R5cGUudmFsdWVzYCwgYXJlIG5vbi13cml0YWJsZVxuICAgIH0gZWxzZSBpZiAodmFsdWUucHJvdG90eXBlKSB2YWx1ZS5wcm90b3R5cGUgPSB1bmRlZmluZWQ7XG4gIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbiAgdmFyIHN0YXRlID0gZW5mb3JjZUludGVybmFsU3RhdGUodmFsdWUpO1xuICBpZiAoIWhhc093bihzdGF0ZSwgJ3NvdXJjZScpKSB7XG4gICAgc3RhdGUuc291cmNlID0gam9pbihURU1QTEFURSwgdHlwZW9mIG5hbWUgPT0gJ3N0cmluZycgPyBuYW1lIDogJycpO1xuICB9IHJldHVybiB2YWx1ZTtcbn07XG5cbi8vIGFkZCBmYWtlIEZ1bmN0aW9uI3RvU3RyaW5nIGZvciBjb3JyZWN0IHdvcmsgd3JhcHBlZCBtZXRob2RzIC8gY29uc3RydWN0b3JzIHdpdGggbWV0aG9kcyBsaWtlIExvRGFzaCBpc05hdGl2ZVxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWV4dGVuZC1uYXRpdmUgLS0gcmVxdWlyZWRcbkZ1bmN0aW9uLnByb3RvdHlwZS50b1N0cmluZyA9IG1ha2VCdWlsdEluKGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICByZXR1cm4gaXNDYWxsYWJsZSh0aGlzKSAmJiBnZXRJbnRlcm5hbFN0YXRlKHRoaXMpLnNvdXJjZSB8fCBpbnNwZWN0U291cmNlKHRoaXMpO1xufSwgJ3RvU3RyaW5nJyk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgbWFrZUJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbWFrZS1idWlsdC1pbicpO1xudmFyIGRlZmluZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodGFyZ2V0LCBuYW1lLCBkZXNjcmlwdG9yKSB7XG4gIGlmIChkZXNjcmlwdG9yLmdldCkgbWFrZUJ1aWx0SW4oZGVzY3JpcHRvci5nZXQsIG5hbWUsIHsgZ2V0dGVyOiB0cnVlIH0pO1xuICBpZiAoZGVzY3JpcHRvci5zZXQpIG1ha2VCdWlsdEluKGRlc2NyaXB0b3Iuc2V0LCBuYW1lLCB7IHNldHRlcjogdHJ1ZSB9KTtcbiAgcmV0dXJuIGRlZmluZVByb3BlcnR5LmYodGFyZ2V0LCBuYW1lLCBkZXNjcmlwdG9yKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG5cbi8vIGBSZWdFeHAucHJvdG90eXBlLmZsYWdzYCBnZXR0ZXIgaW1wbGVtZW50YXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtZ2V0LXJlZ2V4cC5wcm90b3R5cGUuZmxhZ3Ncbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkge1xuICB2YXIgdGhhdCA9IGFuT2JqZWN0KHRoaXMpO1xuICB2YXIgcmVzdWx0ID0gJyc7XG4gIGlmICh0aGF0Lmhhc0luZGljZXMpIHJlc3VsdCArPSAnZCc7XG4gIGlmICh0aGF0Lmdsb2JhbCkgcmVzdWx0ICs9ICdnJztcbiAgaWYgKHRoYXQuaWdub3JlQ2FzZSkgcmVzdWx0ICs9ICdpJztcbiAgaWYgKHRoYXQubXVsdGlsaW5lKSByZXN1bHQgKz0gJ20nO1xuICBpZiAodGhhdC5kb3RBbGwpIHJlc3VsdCArPSAncyc7XG4gIGlmICh0aGF0LnVuaWNvZGUpIHJlc3VsdCArPSAndSc7XG4gIGlmICh0aGF0LnVuaWNvZGVTZXRzKSByZXN1bHQgKz0gJ3YnO1xuICBpZiAodGhhdC5zdGlja3kpIHJlc3VsdCArPSAneSc7XG4gIHJldHVybiByZXN1bHQ7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGRlZmluZUJ1aWx0SW5BY2Nlc3NvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4tYWNjZXNzb3InKTtcbnZhciByZWdFeHBGbGFncyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZWdleHAtZmxhZ3MnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xuXG4vLyBiYWJlbC1taW5pZnkgYW5kIENsb3N1cmUgQ29tcGlsZXIgdHJhbnNwaWxlcyBSZWdFeHAoJy4nLCAnZCcpIC0+IC8uL2QgYW5kIGl0IGNhdXNlcyBTeW50YXhFcnJvclxudmFyIFJlZ0V4cCA9IGdsb2JhbFRoaXMuUmVnRXhwO1xudmFyIFJlZ0V4cFByb3RvdHlwZSA9IFJlZ0V4cC5wcm90b3R5cGU7XG5cbnZhciBGT1JDRUQgPSBERVNDUklQVE9SUyAmJiBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHZhciBJTkRJQ0VTX1NVUFBPUlQgPSB0cnVlO1xuICB0cnkge1xuICAgIFJlZ0V4cCgnLicsICdkJyk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgSU5ESUNFU19TVVBQT1JUID0gZmFsc2U7XG4gIH1cblxuICB2YXIgTyA9IHt9O1xuICAvLyBtb2Rlcm4gVjggYnVnXG4gIHZhciBjYWxscyA9ICcnO1xuICB2YXIgZXhwZWN0ZWQgPSBJTkRJQ0VTX1NVUFBPUlQgPyAnZGdpbXN5JyA6ICdnaW1zeSc7XG5cbiAgdmFyIGFkZEdldHRlciA9IGZ1bmN0aW9uIChrZXksIGNocikge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gc2FmZVxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCBrZXksIHsgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICBjYWxscyArPSBjaHI7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IH0pO1xuICB9O1xuXG4gIHZhciBwYWlycyA9IHtcbiAgICBkb3RBbGw6ICdzJyxcbiAgICBnbG9iYWw6ICdnJyxcbiAgICBpZ25vcmVDYXNlOiAnaScsXG4gICAgbXVsdGlsaW5lOiAnbScsXG4gICAgc3RpY2t5OiAneSdcbiAgfTtcblxuICBpZiAoSU5ESUNFU19TVVBQT1JUKSBwYWlycy5oYXNJbmRpY2VzID0gJ2QnO1xuXG4gIGZvciAodmFyIGtleSBpbiBwYWlycykgYWRkR2V0dGVyKGtleSwgcGFpcnNba2V5XSk7XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3IgLS0gc2FmZVxuICB2YXIgcmVzdWx0ID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihSZWdFeHBQcm90b3R5cGUsICdmbGFncycpLmdldC5jYWxsKE8pO1xuXG4gIHJldHVybiByZXN1bHQgIT09IGV4cGVjdGVkIHx8IGNhbGxzICE9PSBleHBlY3RlZDtcbn0pO1xuXG4vLyBgUmVnRXhwLnByb3RvdHlwZS5mbGFnc2AgZ2V0dGVyXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWdldC1yZWdleHAucHJvdG90eXBlLmZsYWdzXG5pZiAoRk9SQ0VEKSBkZWZpbmVCdWlsdEluQWNjZXNzb3IoUmVnRXhwUHJvdG90eXBlLCAnZmxhZ3MnLCB7XG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgZ2V0OiByZWdFeHBGbGFnc1xufSk7XG4iLCJleHBvcnQgaW50ZXJmYWNlIEdyYW1tYXJSdWxlIHtcbiAgcmVnZXhwOiBSZWdFeHA7XG4gIHJlcGxhY2VtZW50OiBzdHJpbmc7XG4gIGxhYmVsUGxhY2Vob2xkZXI/OiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSFRNTEJsb2NrUnVsZSB7XG4gIHN0YXJ0OiBSZWdFeHA7XG4gIGVuZDogUmVnRXhwIHwgZmFsc2U7XG4gIHBhcmFJbnRlcnJ1cHQ6IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSW5saW5lQ29tbWFuZCB7XG4gIHR5cGU6ICdpbmxpbmUnO1xuICBjbGFzc05hbWU6IHN0cmluZztcbiAgc2V0OiB7XG4gICAgcHJlOiBzdHJpbmc7XG4gICAgcG9zdDogc3RyaW5nO1xuICB9O1xuICB1bnNldDoge1xuICAgIHByZVBhdHRlcm46IFJlZ0V4cDtcbiAgICBwb3N0UGF0dGVybjogUmVnRXhwO1xuICB9O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIExpbmVDb21tYW5kIHtcbiAgdHlwZTogJ2xpbmUnO1xuICBjbGFzc05hbWU6IHN0cmluZztcbiAgc2V0OiB7XG4gICAgcGF0dGVybjogUmVnRXhwO1xuICAgIHJlcGxhY2VtZW50OiBzdHJpbmc7XG4gIH07XG4gIHVuc2V0OiB7XG4gICAgcGF0dGVybjogUmVnRXhwO1xuICAgIHJlcGxhY2VtZW50OiBzdHJpbmc7XG4gIH07XG59XG5cbmV4cG9ydCB0eXBlIENvbW1hbmQgPSBJbmxpbmVDb21tYW5kIHwgTGluZUNvbW1hbmQ7XG5cbmNvbnN0IHJlcGxhY2VtZW50czogUmVjb3JkPHN0cmluZywgUmVnRXhwPiA9IHtcbiAgQVNDSUlQdW5jdHVhdGlvbjogL1shXCIjJCUmJygpKissXFwtLi86Ozw9Pj9AW1xcXV5fYHt8fX5cXFxcXS8sICBcbiAgTm90VHJpZ2dlckNoYXI6IC9bXmBfKltcXF0oKTw+IX5dLyxcbiAgU2NoZW1lOiAvW0EtWmEtel1bQS1aYS16MC05Ky4tXXsxLDMxfS8sXG4gIEVtYWlsOiAvW2EtekEtWjAtOS4hIyQlJicqKy89P15fYHt8fX4tXStAW2EtekEtWjAtOV0oPzpbYS16QS1aMC05LV17MCw2MX1bYS16QS1aMC05XSk/KD86XFwuW2EtekEtWjAtOV0oPzpbYS16QS1aMC05LV17MCw2MX1bYS16QS1aMC05XSk/KSovLCAvLyBGcm9tIENvbW1vbk1hcmsgc3BlY1xuICBIVE1MT3BlblRhZzogLzxIVE1MVGFnTmFtZSg/OkhUTUxBdHRyaWJ1dGUpKlxccypcXC8/Pi8sXG4gIEhUTUxDbG9zZVRhZzogLzxcXC9IVE1MVGFnTmFtZVxccyo+LyxcbiAgSFRNTFRhZ05hbWU6IC9bQS1aYS16XVtBLVphLXowLTktXSovLCBcbiAgSFRNTENvbW1lbnQ6IC88IS0tKD86W14+LV18KD86W14+LV0oPzpbXi1dfC1bXi1dKSpbXi1dKSktLT4vLFxuICBIVE1MUEk6IC88XFw/KD86fC58KD86W14/XXxcXD9bXj5dKSopXFw/Pi8sXG4gIEhUTUxEZWNsYXJhdGlvbjogLzwhW0EtWl0rXFxzW14+XSo+LyxcbiAgSFRNTENEQVRBOiAvPCFcXFtDREFUQVxcWy4qP1xcXVxcXT4vLFxuICBIVE1MQXR0cmlidXRlOiAvXFxzK1tBLVphLXpfOl1bQS1aYS16MC05Xy46LV0qKD86SFRNTEF0dFZhbHVlKT8vLFxuICBIVE1MQXR0VmFsdWU6IC9cXHMqPVxccyooPzooPzonW14nXSonKXwoPzpcIlteXCJdKlwiKXwoPzpbXlxcc1wiJz08PmBdKykpLyxcbiAgS25vd25UYWc6IC9hZGRyZXNzfGFydGljbGV8YXNpZGV8YmFzZXxiYXNlZm9udHxibG9ja3F1b3RlfGJvZHl8Y2FwdGlvbnxjZW50ZXJ8Y29sfGNvbGdyb3VwfGRkfGRldGFpbHN8ZGlhbG9nfGRpcnxkaXZ8ZGx8ZHR8ZmllbGRzZXR8ZmlnY2FwdGlvbnxmaWd1cmV8Zm9vdGVyfGZvcm18ZnJhbWV8ZnJhbWVzZXR8aDF8aDJ8aDN8aDR8aDV8aDZ8aGVhZHxoZWFkZXJ8aHJ8aHRtbHxpZnJhbWV8bGVnZW5kfGxpfGxpbmt8bWFpbnxtZW51fG1lbnVpdGVtfG5hdnxub2ZyYW1lc3xvbHxvcHRncm91cHxvcHRpb258cHxwYXJhbXxzZWN0aW9ufHNvdXJjZXxzdW1tYXJ5fHRhYmxlfHRib2R5fHRkfHRmb290fHRofHRoZWFkfHRpdGxlfHRyfHRyYWNrfHVsL1xufTtcblxuLy8gRnJvbSBDb21tb25NYXJrLmpzLiBcbmV4cG9ydCBjb25zdCBwdW5jdHVhdGlvbkxlYWRpbmcgPSBuZXcgUmVnRXhwKC9eKD86WyFcIiMkJSYnKCkqKyxcXC0uLzo7PD0+P0BbXFxdXFxcXF5fYHt8fX5cXHhBMVxceEE3XFx4QUJcXHhCNlxceEI3XFx4QkJcXHhCRlxcdTAzN0VcXHUwMzg3XFx1MDU1QS1cXHUwNTVGXFx1MDU4OVxcdTA1OEFcXHUwNUJFXFx1MDVDMFxcdTA1QzNcXHUwNUM2XFx1MDVGM1xcdTA1RjRcXHUwNjA5XFx1MDYwQVxcdTA2MENcXHUwNjBEXFx1MDYxQlxcdTA2MUVcXHUwNjFGXFx1MDY2QS1cXHUwNjZEXFx1MDZENFxcdTA3MDAtXFx1MDcwRFxcdTA3RjctXFx1MDdGOVxcdTA4MzAtXFx1MDgzRVxcdTA4NUVcXHUwOTY0XFx1MDk2NVxcdTA5NzBcXHUwQUYwXFx1MERGNFxcdTBFNEZcXHUwRTVBXFx1MEU1QlxcdTBGMDQtXFx1MEYxMlxcdTBGMTRcXHUwRjNBLVxcdTBGM0RcXHUwRjg1XFx1MEZEMC1cXHUwRkQ0XFx1MEZEOVxcdTBGREFcXHUxMDRBLVxcdTEwNEZcXHUxMEZCXFx1MTM2MC1cXHUxMzY4XFx1MTQwMFxcdTE2NkRcXHUxNjZFXFx1MTY5QlxcdTE2OUNcXHUxNkVCLVxcdTE2RURcXHUxNzM1XFx1MTczNlxcdTE3RDQtXFx1MTdENlxcdTE3RDgtXFx1MTdEQVxcdTE4MDAtXFx1MTgwQVxcdTE5NDRcXHUxOTQ1XFx1MUExRVxcdTFBMUZcXHUxQUEwLVxcdTFBQTZcXHUxQUE4LVxcdTFBQURcXHUxQjVBLVxcdTFCNjBcXHUxQkZDLVxcdTFCRkZcXHUxQzNCLVxcdTFDM0ZcXHUxQzdFXFx1MUM3RlxcdTFDQzAtXFx1MUNDN1xcdTFDRDNcXHUyMDEwLVxcdTIwMjdcXHUyMDMwLVxcdTIwNDNcXHUyMDQ1LVxcdTIwNTFcXHUyMDUzLVxcdTIwNUVcXHUyMDdEXFx1MjA3RVxcdTIwOERcXHUyMDhFXFx1MjMwOC1cXHUyMzBCXFx1MjMyOVxcdTIzMkFcXHUyNzY4LVxcdTI3NzVcXHUyN0M1XFx1MjdDNlxcdTI3RTYtXFx1MjdFRlxcdTI5ODMtXFx1Mjk5OFxcdTI5RDgtXFx1MjlEQlxcdTI5RkNcXHUyOUZEXFx1MkNGOS1cXHUyQ0ZDXFx1MkNGRVxcdTJDRkZcXHUyRDcwXFx1MkUwMC1cXHUyRTJFXFx1MkUzMC1cXHUyRTQyXFx1MzAwMS1cXHUzMDAzXFx1MzAwOC1cXHUzMDExXFx1MzAxNC1cXHUzMDFGXFx1MzAzMFxcdTMwM0RcXHUzMEEwXFx1MzBGQlxcdUE0RkVcXHVBNEZGXFx1QTYwRC1cXHVBNjBGXFx1QTY3M1xcdUE2N0VcXHVBNkYyLVxcdUE2RjdcXHVBODc0LVxcdUE4NzdcXHVBOENFXFx1QThDRlxcdUE4RjgtXFx1QThGQVxcdUE4RkNcXHVBOTJFXFx1QTkyRlxcdUE5NUZcXHVBOUMxLVxcdUE5Q0RcXHVBOURFXFx1QTlERlxcdUFBNUMtXFx1QUE1RlxcdUFBREVcXHVBQURGXFx1QUFGMFxcdUFBRjFcXHVBQkVCXFx1RkQzRVxcdUZEM0ZcXHVGRTEwLVxcdUZFMTlcXHVGRTMwLVxcdUZFNTJcXHVGRTU0LVxcdUZFNjFcXHVGRTYzXFx1RkU2OFxcdUZFNkFcXHVGRTZCXFx1RkYwMS1cXHVGRjAzXFx1RkYwNS1cXHVGRjBBXFx1RkYwQy1cXHVGRjBGXFx1RkYxQVxcdUZGMUJcXHVGRjFGXFx1RkYyMFxcdUZGM0ItXFx1RkYzRFxcdUZGM0ZcXHVGRjVCXFx1RkY1RFxcdUZGNUYtXFx1RkY2NV18XFx1RDgwMFtcXHVERDAwLVxcdUREMDJcXHVERjlGXFx1REZEMF18XFx1RDgwMVxcdURENkZ8XFx1RDgwMltcXHVEQzU3XFx1REQxRlxcdUREM0ZcXHVERTUwLVxcdURFNThcXHVERTdGXFx1REVGMC1cXHVERUY2XFx1REYzOS1cXHVERjNGXFx1REY5OS1cXHVERjlDXXxcXHVEODA0W1xcdURDNDctXFx1REM0RFxcdURDQkJcXHVEQ0JDXFx1RENCRS1cXHVEQ0MxXFx1REQ0MC1cXHVERDQzXFx1REQ3NFxcdURENzVcXHVEREM1LVxcdUREQzlcXHVERENEXFx1REREQlxcdUREREQtXFx1RERERlxcdURFMzgtXFx1REUzRFxcdURFQTldfFxcdUQ4MDVbXFx1RENDNlxcdUREQzEtXFx1REREN1xcdURFNDEtXFx1REU0M1xcdURGM0MtXFx1REYzRV18XFx1RDgwOVtcXHVEQzcwLVxcdURDNzRdfFxcdUQ4MUFbXFx1REU2RVxcdURFNkZcXHVERUY1XFx1REYzNy1cXHVERjNCXFx1REY0NF18XFx1RDgyRlxcdURDOUZ8XFx1RDgzNltcXHVERTg3LVxcdURFOEJdKS8pO1xuXG5leHBvcnQgY29uc3QgcHVuY3R1YXRpb25UcmFpbGluZyA9IG5ldyBSZWdFeHAoLyg/OlshXCIjJCUmJygpKissXFwtLi86Ozw9Pj9AW1xcXVxcXFxeX2B7fH1+XFx4QTFcXHhBN1xceEFCXFx4QjZcXHhCN1xceEJCXFx4QkZcXHUwMzdFXFx1MDM4N1xcdTA1NUEtXFx1MDU1RlxcdTA1ODlcXHUwNThBXFx1MDVCRVxcdTA1QzBcXHUwNUMzXFx1MDVDNlxcdTA1RjNcXHUwNUY0XFx1MDYwOVxcdTA2MEFcXHUwNjBDXFx1MDYwRFxcdTA2MUJcXHUwNjFFXFx1MDYxRlxcdTA2NkEtXFx1MDY2RFxcdTA2RDRcXHUwNzAwLVxcdTA3MERcXHUwN0Y3LVxcdTA3RjlcXHUwODMwLVxcdTA4M0VcXHUwODVFXFx1MDk2NFxcdTA5NjVcXHUwOTcwXFx1MEFGMFxcdTBERjRcXHUwRTRGXFx1MEU1QVxcdTBFNUJcXHUwRjA0LVxcdTBGMTJcXHUwRjE0XFx1MEYzQS1cXHUwRjNEXFx1MEY4NVxcdTBGRDAtXFx1MEZENFxcdTBGRDlcXHUwRkRBXFx1MTA0QS1cXHUxMDRGXFx1MTBGQlxcdTEzNjAtXFx1MTM2OFxcdTE0MDBcXHUxNjZEXFx1MTY2RVxcdTE2OUJcXHUxNjlDXFx1MTZFQi1cXHUxNkVEXFx1MTczNVxcdTE3MzZcXHUxN0Q0LVxcdTE3RDZcXHUxN0Q4LVxcdTE3REFcXHUxODAwLVxcdTE4MEFcXHUxOTQ0XFx1MTk0NVxcdTFBMUVcXHUxQTFGXFx1MUFBMC1cXHUxQUE2XFx1MUFBOC1cXHUxQUFEXFx1MUI1QS1cXHUxQjYwXFx1MUJGQy1cXHUxQkZGXFx1MUMzQi1cXHUxQzNGXFx1MUM3RVxcdTFDN0ZcXHUxQ0MwLVxcdTFDQzdcXHUxQ0QzXFx1MjAxMC1cXHUyMDI3XFx1MjAzMC1cXHUyMDQzXFx1MjA0NS1cXHUyMDUxXFx1MjA1My1cXHUyMDVFXFx1MjA3RFxcdTIwN0VcXHUyMDhEXFx1MjA4RVxcdTIzMDgtXFx1MjMwQlxcdTIzMjlcXHUyMzJBXFx1Mjc2OC1cXHUyNzc1XFx1MjdDNVxcdTI3QzZcXHUyN0U2LVxcdTI3RUZcXHUyOTgzLVxcdTI5OThcXHUyOUQ4LVxcdTI5REJcXHUyOUZDXFx1MjlGRFxcdTJDRjktXFx1MkNGQ1xcdTJDRkVcXHUyQ0ZGXFx1MkQ3MFxcdTJFMDAtXFx1MkUyRVxcdTJFMzAtXFx1MkU0MlxcdTMwMDEtXFx1MzAwM1xcdTMwMDgtXFx1MzAxMVxcdTMwMTQtXFx1MzAxRlxcdTMwMzBcXHUzMDNEXFx1MzBBMFxcdTMwRkJcXHVBNEZFXFx1QTRGRlxcdUE2MEQtXFx1QTYwRlxcdUE2NzNcXHVBNjdFXFx1QTZGMi1cXHVBNkY3XFx1QTg3NC1cXHVBODc3XFx1QThDRVxcdUE4Q0ZcXHVBOEY4LVxcdUE4RkFcXHVBOEZDXFx1QTkyRVxcdUE5MkZcXHVBOTVGXFx1QTlDMS1cXHVBOUNEXFx1QTlERVxcdUE5REZcXHVBQTVDLVxcdUFBNUZcXHVBQURFXFx1QUFERlxcdUFBRjBcXHVBQUYxXFx1QUJFQlxcdUZEM0VcXHVGRDNGXFx1RkUxMC1cXHVGRTE5XFx1RkUzMC1cXHVGRTUyXFx1RkU1NC1cXHVGRTYxXFx1RkU2M1xcdUZFNjhcXHVGRTZBXFx1RkU2QlxcdUZGMDEtXFx1RkYwM1xcdUZGMDUtXFx1RkYwQVxcdUZGMEMtXFx1RkYwRlxcdUZGMUFcXHVGRjFCXFx1RkYxRlxcdUZGMjBcXHVGRjNCLVxcdUZGM0RcXHVGRjNGXFx1RkY1QlxcdUZGNURcXHVGRjVGLVxcdUZGNjVdfFxcdUQ4MDBbXFx1REQwMC1cXHVERDAyXFx1REY5RlxcdURGRDBdfFxcdUQ4MDFcXHVERDZGfFxcdUQ4MDJbXFx1REM1N1xcdUREMUZcXHVERDNGXFx1REU1MC1cXHVERTU4XFx1REU3RlxcdURFRjAtXFx1REVGNlxcdURGMzktXFx1REYzRlxcdURGOTktXFx1REY5Q118XFx1RDgwNFtcXHVEQzQ3LVxcdURDNERcXHVEQ0JCXFx1RENCQ1xcdURDQkUtXFx1RENDMVxcdURENDAtXFx1REQ0M1xcdURENzRcXHVERDc1XFx1RERDNS1cXHVEREM5XFx1RERDRFxcdUREREJcXHVERERELVxcdUREREZcXHVERTM4LVxcdURFM0RcXHVERUE5XXxcXHVEODA1W1xcdURDQzZcXHVEREMxLVxcdURERDdcXHVERTQxLVxcdURFNDNcXHVERjNDLVxcdURGM0VdfFxcdUQ4MDlbXFx1REM3MC1cXHVEQzc0XXxcXHVEODFBW1xcdURFNkVcXHVERTZGXFx1REVGNVxcdURGMzctXFx1REYzQlxcdURGNDRdfFxcdUQ4MkZcXHVEQzlGfFxcdUQ4MzZbXFx1REU4Ny1cXHVERThCXSkkLyk7XG5cbi8qKlxuICogVGhpcyBpcyBDb21tb25NYXJrJ3MgYmxvY2sgZ3JhbW1hciwgYnV0IHdlJ3JlIGlnbm9yaW5nIG5lc3RlZCBibG9ja3MgaGVyZS4gIFxuICovIFxuZXhwb3J0IGNvbnN0IGxpbmVHcmFtbWFyOiBSZWNvcmQ8c3RyaW5nLCBHcmFtbWFyUnVsZT4gPSB7IFxuICBUTUgxOiB7IFxuICAgIHJlZ2V4cDogL14oIHswLDN9I1xccykoLio/KSgoPzpcXHMrIytcXHMqKT8pJC8sIFxuICAgIHJlcGxhY2VtZW50OiAnPHNwYW4gY2xhc3M9XCJUTU1hcmsgVE1NYXJrX1RNSDFcIj4kMTwvc3Bhbj4kJDI8c3BhbiBjbGFzcz1cIlRNTWFyayBUTU1hcmtfVE1IMVwiPiQzPC9zcGFuPidcbiAgfSxcbiAgVE1IMjogeyBcbiAgICByZWdleHA6IC9eKCB7MCwzfSMjXFxzKSguKj8pKCg/OlxccysjK1xccyopPykkLywgXG4gICAgcmVwbGFjZW1lbnQ6ICc8c3BhbiBjbGFzcz1cIlRNTWFyayBUTU1hcmtfVE1IMlwiPiQxPC9zcGFuPiQkMjxzcGFuIGNsYXNzPVwiVE1NYXJrIFRNTWFya19UTUgyXCI+JDM8L3NwYW4+J1xuICB9LFxuICBUTUgzOiB7IFxuICAgIHJlZ2V4cDogL14oIHswLDN9IyMjXFxzKSguKj8pKCg/OlxccysjK1xccyopPykkLywgXG4gICAgcmVwbGFjZW1lbnQ6ICc8c3BhbiBjbGFzcz1cIlRNTWFyayBUTU1hcmtfVE1IM1wiPiQxPC9zcGFuPiQkMjxzcGFuIGNsYXNzPVwiVE1NYXJrIFRNTWFya19UTUgzXCI+JDM8L3NwYW4+J1xuICB9LFxuICBUTUg0OiB7IFxuICAgIHJlZ2V4cDogL14oIHswLDN9IyMjI1xccykoLio/KSgoPzpcXHMrIytcXHMqKT8pJC8sIFxuICAgIHJlcGxhY2VtZW50OiAnPHNwYW4gY2xhc3M9XCJUTU1hcmsgVE1NYXJrX1RNSDRcIj4kMTwvc3Bhbj4kJDI8c3BhbiBjbGFzcz1cIlRNTWFyayBUTU1hcmtfVE1INFwiPiQzPC9zcGFuPidcbiAgfSxcbiAgVE1INTogeyBcbiAgICByZWdleHA6IC9eKCB7MCwzfSMjIyMjXFxzKSguKj8pKCg/OlxccysjK1xccyopPykkLywgXG4gICAgcmVwbGFjZW1lbnQ6ICc8c3BhbiBjbGFzcz1cIlRNTWFyayBUTU1hcmtfVE1INVwiPiQxPC9zcGFuPiQkMjxzcGFuIGNsYXNzPVwiVE1NYXJrIFRNTWFya19UTUg1XCI+JDM8L3NwYW4+J1xuICB9LFxuICBUTUg2OiB7IFxuICAgIHJlZ2V4cDogL14oIHswLDN9IyMjIyMjXFxzKSguKj8pKCg/OlxccysjK1xccyopPykkLywgXG4gICAgcmVwbGFjZW1lbnQ6ICc8c3BhbiBjbGFzcz1cIlRNTWFyayBUTU1hcmtfVE1INlwiPiQxPC9zcGFuPiQkMjxzcGFuIGNsYXNzPVwiVE1NYXJrIFRNTWFya19UTUg2XCI+JDM8L3NwYW4+J1xuICB9LFxuICBUTUJsb2NrcXVvdGU6IHsgXG4gICAgcmVnZXhwOiAvXiggezAsM30+WyBdPykoLiopJC8sIFxuICAgIHJlcGxhY2VtZW50OiAnPHNwYW4gY2xhc3M9XCJUTU1hcmsgVE1NYXJrX1RNQmxvY2txdW90ZVwiPiQxPC9zcGFuPiQkMidcbiAgfSxcbiAgVE1Db2RlRmVuY2VCYWNrdGlja09wZW46IHsgXG4gICAgcmVnZXhwOiAvXiggezAsM30oPzxzZXE+YGBgYCopXFxzKikoW15gXSo/KShcXHMqKSQvLCBcbiAgICByZXBsYWNlbWVudDogJzxzcGFuIGNsYXNzPVwiVE1NYXJrIFRNTWFya19UTUNvZGVGZW5jZUJhY2t0aWNrXCI+JDE8L3NwYW4+PHNwYW4gY2xhc3M9XCJUTUluZm9TdHJpbmdcIj4kMzwvc3Bhbj4kNCdcbiAgfSxcbiAgVE1Db2RlRmVuY2VUaWxkZU9wZW46IHsgXG4gICAgcmVnZXhwOiAvXiggezAsM30oPzxzZXE+fn5+fiopXFxzKikoLio/KShcXHMqKSQvLCBcbiAgICByZXBsYWNlbWVudDogJzxzcGFuIGNsYXNzPVwiVE1NYXJrIFRNTWFya19UTUNvZGVGZW5jZVRpbGRlXCI+JDE8L3NwYW4+PHNwYW4gY2xhc3M9XCJUTUluZm9TdHJpbmdcIj4kMzwvc3Bhbj4kNCdcbiAgfSxcbiAgVE1Db2RlRmVuY2VCYWNrdGlja0Nsb3NlOiB7IFxuICAgIHJlZ2V4cDogL14oIHswLDN9KD88c2VxPmBgYGAqKSkoXFxzKikkLywgXG4gICAgcmVwbGFjZW1lbnQ6ICc8c3BhbiBjbGFzcz1cIlRNTWFyayBUTU1hcmtfVE1Db2RlRmVuY2VCYWNrdGlja1wiPiQxPC9zcGFuPiQzJ1xuICB9LFxuICBUTUNvZGVGZW5jZVRpbGRlQ2xvc2U6IHsgXG4gICAgcmVnZXhwOiAvXiggezAsM30oPzxzZXE+fn5+fiopKShcXHMqKSQvLCBcbiAgICByZXBsYWNlbWVudDogJzxzcGFuIGNsYXNzPVwiVE1NYXJrIFRNTWFya19UTUNvZGVGZW5jZVRpbGRlXCI+JDE8L3NwYW4+JDMnXG4gIH0sXG4gIFRNQmxhbmtMaW5lOiB7IFxuICAgIHJlZ2V4cDogL14oWyBcXHRdKikkLywgXG4gICAgcmVwbGFjZW1lbnQ6ICckMCdcbiAgfSxcbiAgVE1TZXRleHRIMU1hcmtlcjogeyBcbiAgICByZWdleHA6IC9eIHswLDN9PStcXHMqJC8sIFxuICAgIHJlcGxhY2VtZW50OiAnPHNwYW4gY2xhc3M9XCJUTU1hcmsgVE1NYXJrX1RNU2V0ZXh0SDFNYXJrZXJcIj4kMDwvc3Bhbj4nXG4gIH0sXG4gIFRNU2V0ZXh0SDJNYXJrZXI6IHsgXG4gICAgcmVnZXhwOiAvXiB7MCwzfS0rXFxzKiQvLCBcbiAgICByZXBsYWNlbWVudDogJzxzcGFuIGNsYXNzPVwiVE1NYXJrIFRNTWFya19UTVNldGV4dEgxTWFya2VyXCI+JDA8L3NwYW4+J1xuICB9LFxuICBUTUhSOiB7IFxuICAgIHJlZ2V4cDogL14oIHswLDN9KFxcKlsgXFx0XSpcXCpbIFxcdF0qXFwqWyBcXHQqXSopfCgtWyBcXHRdKi1bIFxcdF0qLVsgXFx0LV0qKXwoX1sgXFx0XSpfWyBcXHRdKl9bIFxcdF9dKikpJC8sIFxuICAgIHJlcGxhY2VtZW50OiAnPHNwYW4gY2xhc3M9XCJUTU1hcmsgVE1NYXJrX1RNSFJcIj4kMDwvc3Bhbj4nXG4gIH0sXG4gIFRNVUw6IHsgXG4gICAgcmVnZXhwOiAvXiggezAsM31bKyotXSB7MSw0fSkoLiopJC8sIFxuICAgIHJlcGxhY2VtZW50OiAnPHNwYW4gY2xhc3M9XCJUTU1hcmsgVE1NYXJrX1RNVUxcIj4kMTwvc3Bhbj4kJDInXG4gIH0sXG4gIFRNT0w6IHsgXG4gICAgcmVnZXhwOiAvXiggezAsM31cXGR7MSw5fVsuKV0gezEsNH0pKC4qKSQvLCBcbiAgICByZXBsYWNlbWVudDogJzxzcGFuIGNsYXNzPVwiVE1NYXJrIFRNTWFya19UTU9MXCI+JDE8L3NwYW4+JCQyJ1xuICB9LFxuICAvLyBUT0RPOiBUaGlzIGlzIGN1cnJlbnRseSBwcmV2ZW50aW5nIHN1Ymxpc3RzIChhbmQgYW55IGNvbnRlbnQgd2l0aGluIGxpc3QgaXRlbXMsIHJlYWxseSkgZnJvbSB3b3JraW5nXG4gIFRNSW5kZW50ZWRDb2RlOiB7IFxuICAgIHJlZ2V4cDogL14oIHs0fXxcXHQpKC4qKSQvLCBcbiAgICByZXBsYWNlbWVudDogJzxzcGFuIGNsYXNzPVwiVE1NYXJrIFRNTWFya19UTUluZGVudGVkQ29kZVwiPiQxPC9zcGFuPiQyJ1xuICB9LFxuICBUTUxpbmtSZWZlcmVuY2VEZWZpbml0aW9uOiB7XG4gICAgLy8gVE9ETzogTGluayBkZXN0aW5hdGlvbiBjYW4ndCBpbmNsdWRlIHVuYmFsYW5jZWQgcGFyYW50aGVzZXMsIGJ1dCB3ZSBqdXN0IGlnbm9yZSB0aGF0IGhlcmUgXG4gICAgcmVnZXhwOiAvXiggezAsM31cXFtcXHMqKShbXlxcc1xcXV0oPzpbXlxcXV18XFxcXFxcXSkqPykoXFxzKlxcXTpcXHMqKSgoPzpbXlxcczw+XSspfCg/OjwoPzpbXjw+XFxcXF18XFxcXC4pKj4pKT8oXFxzKikoKD86XFwoKD86W14oKVxcXFxdfFxcXFwuKSpcXCkpfCg/OlwiKD86W15cIlxcXFxdfFxcXFwuKSpcIil8KD86Jyg/OlteJ1xcXFxdfFxcXFwuKSonKSk/KFxccyopJC8sIFxuICAgIHJlcGxhY2VtZW50OiAnPHNwYW4gY2xhc3M9XCJUTU1hcmsgVE1NYXJrX1RNTGlua1JlZmVyZW5jZURlZmluaXRpb25cIj4kMTwvc3Bhbj48c3BhbiBjbGFzcz1cIlRNTGlua0xhYmVsIFRNTGlua0xhYmVsX0RlZmluaXRpb25cIj4kMjwvc3Bhbj48c3BhbiBjbGFzcz1cIlRNTWFyayBUTU1hcmtfVE1MaW5rUmVmZXJlbmNlRGVmaW5pdGlvblwiPiQzPC9zcGFuPjxzcGFuIGNsYXNzPVwiVE1MaW5rRGVzdGluYXRpb25cIj4kNDwvc3Bhbj4kNTxzcGFuIGNsYXNzPVwiVE1MaW5rVGl0bGVcIj4kNjwvc3Bhbj4kNycsXG4gICAgbGFiZWxQbGFjZWhvbGRlcjogMiwgLy8gdGhpcyBkZWZpbmVzIHdoaWNoIHBsYWNlaG9sZGVyIGluIHRoZSBhYm92ZSByZWdleCBpcyB0aGUgbGluayBcImxhYmVsXCJcbiAgfSxcbn07XG5cbi8qKlxuICogSFRNTCBibG9ja3MgaGF2ZSBtdWx0aXBsZSBkaWZmZXJlbnQgY2xhc3NlcyBvZiBvcGVuZXIgYW5kIGNsb3Nlci4gVGhpcyBhcnJheSBkZWZpbmVzIGFsbCB0aGUgY2FzZXNcbiAqL1xuZXhwb3J0IGNvbnN0IGh0bWxCbG9ja0dyYW1tYXI6IEhUTUxCbG9ja1J1bGVbXSA9IFtcbiAgeyBzdGFydDogL14gezAsM308KD86c2NyaXB0fHByZXxzdHlsZSkoPzpcXHN8PnwkKS9pLCBlbmQ6IC8oPzo8XFwvc2NyaXB0Pnw8XFwvcHJlPnw8XFwvc3R5bGU+KS9pLCBwYXJhSW50ZXJydXB0OiB0cnVlIH0sXG4gIHsgc3RhcnQ6IC9eIHswLDN9PCEtLS8sIGVuZDogLy0tPi8sIHBhcmFJbnRlcnJ1cHQ6IHRydWUgfSxcbiAgeyBzdGFydDogL14gezAsM308XFw/LywgZW5kOiAvXFw/Pi8sIHBhcmFJbnRlcnJ1cHQ6IHRydWUgfSxcbiAgeyBzdGFydDogL14gezAsM308IVtBLVpdLywgZW5kOiAvPi8sIHBhcmFJbnRlcnJ1cHQgOiB0cnVlfSxcbiAgeyBzdGFydDogL14gezAsM308IVxcW0NEQVRBXFxbLywgZW5kOiAvXFxdXFxdPi8sIHBhcmFJbnRlcnJ1cHQgOiB0cnVlfSxcbiAgeyBzdGFydDogL14gezAsM30oPzo8fDxcXC8pKD86S25vd25UYWcpKD86XFxzfD58XFwvPnwkKS9pLCBlbmQ6IGZhbHNlLCBwYXJhSW50ZXJydXB0OiB0cnVlfSxcbiAgeyBzdGFydDogL14gezAsM30oPzpIVE1MT3BlblRhZ3xIVE1MQ2xvc2VUYWcpXFxzKiQvLCBlbmQ6IGZhbHNlLCBwYXJhSW50ZXJydXB0OiBmYWxzZX0sXG5dO1xuXG4vKipcbiAqIFN0cnVjdHVyZSBvZiB0aGUgb2JqZWN0OlxuICogVG9wIGxldmVsIGVudHJpZXMgYXJlIHJ1bGVzLCBlYWNoIGNvbnNpc3Rpbmcgb2YgYSByZWd1bGFyIGV4cHJlc3Npb25zIChpbiBzdHJpbmcgZm9ybWF0KSBhcyB3ZWxsIGFzIGEgcmVwbGFjZW1lbnQuXG4gKiBJbiB0aGUgcmVndWxhciBleHByZXNzaW9ucywgcmVwbGFjZW1lbnRzIGZyb20gdGhlIG9iamVjdCAncmVwbGFjZW1lbnRzJyB3aWxsIGJlIHByb2Nlc3NlZCBiZWZvcmUgY29tcGlsaW5nIGludG8gdGhlIHByb3BlcnR5IHJlZ2V4cC5cbiAqL1xuZXhwb3J0IGNvbnN0IGlubGluZUdyYW1tYXI6IFJlY29yZDxzdHJpbmcsIEdyYW1tYXJSdWxlPiA9IHtcbiAgZXNjYXBlIDoge1xuICAgIHJlZ2V4cDogL15cXFxcKEFTQ0lJUHVuY3R1YXRpb24pLyxcbiAgICByZXBsYWNlbWVudCA6ICc8c3BhbiBjbGFzcz1cIlRNTWFyayBUTU1hcmtfVE1Fc2NhcGVcIj5cXFxcPC9zcGFuPiQxJ1xuICB9LFxuICBjb2RlIDoge1xuICAgIHJlZ2V4cDogL14oYCspKCg/OlteYF0pfCg/OlteYF0uKj9bXmBdKSkoXFwxKS8sXG4gICAgcmVwbGFjZW1lbnQgOiAnPHNwYW4gY2xhc3M9XCJUTU1hcmsgVE1NYXJrX1RNQ29kZVwiPiQxPC9zcGFuPjxjb2RlIGNsYXNzPVwiVE1Db2RlXCI+JDI8L2NvZGU+PHNwYW4gY2xhc3M9XCJUTU1hcmsgVE1NYXJrX1RNQ29kZVwiPiQzPC9zcGFuPicgXG4gIH0sXG4gIGF1dG9saW5rIDoge1xuICAgIHJlZ2V4cDogL148KCg/OlNjaGVtZTpbXlxcczw+XSopfCg/OkVtYWlsKSk+LyxcbiAgICByZXBsYWNlbWVudDogJzxzcGFuIGNsYXNzPVwiVE1NYXJrIFRNTWFya19UTUF1dG9saW5rXCI+Jmx0Ozwvc3Bhbj48c3BhbiBjbGFzcz1cIlRNQXV0b2xpbmtcIj4kMTwvc3Bhbj48c3BhbiBjbGFzcz1cIlRNTWFyayBUTU1hcmtfVE1BdXRvbGlua1wiPiZndDs8L3NwYW4+J1xuICB9LFxuICBodG1sIDoge1xuICAgIHJlZ2V4cDogL14oKD86SFRNTE9wZW5UYWcpfCg/OkhUTUxDbG9zZVRhZyl8KD86SFRNTENvbW1lbnQpfCg/OkhUTUxQSSl8KD86SFRNTERlY2xhcmF0aW9uKXwoPzpIVE1MQ0RBVEEpKS8sXG4gICAgcmVwbGFjZW1lbnQ6ICc8c3BhbiBjbGFzcz1cIlRNSFRNTFwiPiQxPC9zcGFuPicsXG4gIH0sXG4gIGxpbmtPcGVuIDoge1xuICAgIHJlZ2V4cDogL15cXFsvLFxuICAgIHJlcGxhY2VtZW50OiAnJ1xuICB9LFxuICBpbWFnZU9wZW4gOiB7XG4gICAgcmVnZXhwOiAvXiFcXFsvLFxuICAgIHJlcGxhY2VtZW50IDogJydcbiAgfSxcbiAgbGlua0xhYmVsIDoge1xuICAgIHJlZ2V4cDogL14oXFxbXFxzKikoW15cXF1dKj8pKFxccypcXF0pLyxcbiAgICByZXBsYWNlbWVudDogJycsXG4gICAgbGFiZWxQbGFjZWhvbGRlcjogMlxuICB9LFxuICBkZWZhdWx0IDoge1xuICAgIHJlZ2V4cDogL14oLnwoPzpOb3RUcmlnZ2VyQ2hhcispKS8sXG4gICAgcmVwbGFjZW1lbnQ6ICckMSdcbiAgfVxufTtcblxuLy8gUHJvY2VzcyByZXBsYWNlbWVudHMgaW4gcmVnZXhwc1xuY29uc3QgcmVwbGFjZW1lbnRSZWdleHAgPSBuZXcgUmVnRXhwKE9iamVjdC5rZXlzKHJlcGxhY2VtZW50cykuam9pbignfCcpKTtcblxuLy8gSW5saW5lXG5jb25zdCBpbmxpbmVSdWxlcyA9IFsuLi5PYmplY3Qua2V5cyhpbmxpbmVHcmFtbWFyKV07XG5mb3IgKGxldCBydWxlIG9mIGlubGluZVJ1bGVzKSB7XG4gIGxldCByZSA9IGlubGluZUdyYW1tYXJbcnVsZV0ucmVnZXhwLnNvdXJjZTtcbiAgLy8gUmVwbGFjZSB3aGlsZSB0aGVyZSBpcyBzb21ldGhpbmcgdG8gcmVwbGFjZS4gVGhpcyBtZWFucyBpdCBhbHNvIHdvcmtzIG92ZXIgbXVsdGlwbGUgbGV2ZWxzIChyZXBsYWNlbWVudHMgY29udGFpbmluZyByZXBsYWNlbWVudHMpXG4gIHdoaWxlIChyZS5tYXRjaChyZXBsYWNlbWVudFJlZ2V4cCkpIHtcbiAgICByZSA9IHJlLnJlcGxhY2UocmVwbGFjZW1lbnRSZWdleHAsIChzdHJpbmcpID0+IHsgcmV0dXJuIHJlcGxhY2VtZW50c1tzdHJpbmddLnNvdXJjZTsgfSk7XG4gIH1cbiAgaW5saW5lR3JhbW1hcltydWxlXS5yZWdleHAgPSBuZXcgUmVnRXhwKHJlLCBpbmxpbmVHcmFtbWFyW3J1bGVdLnJlZ2V4cC5mbGFncyk7XG59XG5cbi8vIEhUTUwgQmxvY2sgKG9ubHkgb3BlbmluZyBydWxlIGlzIHByb2Nlc3NlZCBjdXJyZW50bHkpXG5mb3IgKGxldCBydWxlIG9mIGh0bWxCbG9ja0dyYW1tYXIpIHtcbiAgbGV0IHJlID0gcnVsZS5zdGFydC5zb3VyY2U7XG4gIC8vIFJlcGxhY2Ugd2hpbGUgdGhlcmUgaXMgc29tZXRoaW5nIHRvIHJlcGxhY2UuIFRoaXMgbWVhbnMgaXQgYWxzbyB3b3JrcyBvdmVyIG11bHRpcGxlIGxldmVscyAocmVwbGFjZW1lbnRzIGNvbnRhaW5pbmcgcmVwbGFjZW1lbnRzKVxuICB3aGlsZSAocmUubWF0Y2gocmVwbGFjZW1lbnRSZWdleHApKSB7XG4gICAgcmUgPSByZS5yZXBsYWNlKHJlcGxhY2VtZW50UmVnZXhwLCAoc3RyaW5nKSA9PiB7IHJldHVybiByZXBsYWNlbWVudHNbc3RyaW5nXS5zb3VyY2U7IH0pO1xuICB9XG4gIHJ1bGUuc3RhcnQgPSBuZXcgUmVnRXhwKHJlLCBydWxlLnN0YXJ0LmZsYWdzKTtcbn1cblxuLyoqXG4gKiBFc2NhcGVzIEhUTUwgc3BlY2lhbCBjaGFyYWN0ZXJzICg8LCA+LCBhbmQgJikgaW4gdGhlIHN0cmluZy5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzdHJpbmcgVGhlIHJhdyBzdHJpbmcgdG8gYmUgZXNjYXBlZFxuICogQHJldHVybnMge3N0cmluZ30gVGhlIHN0cmluZywgcmVhZHkgdG8gYmUgdXNlZCBpbiBIVE1MXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBodG1sZXNjYXBlKHN0cmluZzogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIChzdHJpbmcgPyBzdHJpbmcgOiAnJylcbiAgICAucmVwbGFjZSgvJi9nLCAnJmFtcDsnKVxuICAgIC5yZXBsYWNlKC88L2csICcmbHQ7JylcbiAgICAucmVwbGFjZSgvPi9nLCAnJmd0OycpO1xufVxuXG4vKipcbiAqIENvbnRhaW5zIHRoZSBjb21tYW5kcyB0aGF0IGNhbiBiZSBzZW50IHRvIHRoZSBlZGl0b3IuIENvbnRhaW5zIG9iamVjdHMgd2l0aCBhIG5hbWUgcmVwcmVzZW50aW5nIHRoZSBuYW1lIG9mIHRoZSBjb21tYW5kLlxuICogRWFjaCBvZiB0aGUgb2JqZWN0cyBjb250YWlucyB0aGUgZm9sbG93aW5nIGtleXM6XG4gKiBcbiAqICAgLSB0eXBlOiBDYW4gYmUgZWl0aGVyIGlubGluZSAoZm9yIGlubGluZSBmb3JtYXR0aW5nKSBvciBsaW5lIChmb3IgYmxvY2sgLyBsaW5lIGZvcm1hdHRpbmcpLlxuICogICAtIGNsYXNzTmFtZTogVXNlZCB0byBkZXRlcm1pbmUgd2hldGhlciB0aGUgY29tbWFuZCBpcyBhY3RpdmUgYXQgYSBnaXZlbiBwb3NpdGlvbi4gXG4gKiAgICAgRm9yIGxpbmUgZm9ybWF0dGluZywgdGhpcyBsb29rcyBhdCB0aGUgY2xhc3Mgb2YgdGhlIGxpbmUgZWxlbWVudC4gRm9yIGlubGluZSBlbGVtZW50cywgdHJpZXMgdG8gZmluZCBhbiBlbmNsb3NpbmcgZWxlbWVudCB3aXRoIHRoYXQgY2xhc3MuXG4gKiAgIC0gc2V0IC8gdW5zZXQ6IENvbnRhaW4gaW5zdHJ1Y3Rpb25zIGhvdyB0byBzZXQgYW5kIHVuc2V0IHRoZSBjb21tYW5kLiBGb3IgbGluZSB0eXBlIGNvbW1hbmRzLCBib3RoIGNvbnNpc3Qgb2YgYSBwYXR0ZXJuIGFuZCByZXBsYWNlbWVudCB0aGF0IFxuICogICAgIHdpbGwgYmUgYXBwbGllZCB0byBlYWNoIGxpbmUgKHVzaW5nIFN0cmluZy5yZXBsYWNlKS4gRm9yIGlubGluZSB0eXBlIGNvbW1hbmRzLCB0aGUgc2V0IG9iamVjdCBjb250YWlucyBhIHByZSBhbmQgcG9zdCBzdHJpbmcgd2hpY2ggd2lsbFxuICogICAgIGJlIGluc2VydGVkIGJlZm9yZSBhbmQgYWZ0ZXIgdGhlIHNlbGVjdGlvbi4gVGhlIHVuc2V0IG9iamVjdCBjb250YWlucyBhIHByZVBhdHRlcm4gYW5kIGEgcG9zdFBhdHRlcm4uIEJvdGggc2hvdWxkIGJlIHJlZ3VsYXIgZXhwcmVzc2lvbnMgYW5kIFxuICogICAgIHRoZXkgd2lsbCBiZSBhcHBsaWVkIHRvIHRoZSBwb3J0aW9uIG9mIHRoZSBsaW5lIGJlZm9yZSBhbmQgYWZ0ZXIgdGhlIHNlbGVjdGlvbiAodXNpbmcgU3RyaW5nLnJlcGxhY2UsIHdpdGggYW4gZW1wdHkgcmVwbGFjZW1lbnQgc3RyaW5nKS5cbiAqL1xuZXhwb3J0IGNvbnN0IGNvbW1hbmRzOiBSZWNvcmQ8c3RyaW5nLCBDb21tYW5kPiA9IHtcbiAgLy8gUmVwbGFjZW1lbnRzIGZvciB1bnNldCBmb3IgaW5saW5lIGNvbW1hbmRzIGFyZSAnJyBieSBkZWZhdWx0XG4gIGJvbGQ6IHtcbiAgICB0eXBlOiAnaW5saW5lJywgXG4gICAgY2xhc3NOYW1lOiAnVE1TdHJvbmcnLCBcbiAgICBzZXQ6IHtwcmU6ICcqKicsIHBvc3Q6ICcqKid9LCBcbiAgICB1bnNldDoge3ByZVBhdHRlcm46IC8oPzpcXCpcXCp8X18pJC8sIHBvc3RQYXR0ZXJuOiAvXig/OlxcKlxcKnxfXykvfVxuICB9LCBcbiAgaXRhbGljOiB7XG4gICAgdHlwZTogJ2lubGluZScsIFxuICAgIGNsYXNzTmFtZTogJ1RNRW0nLCBcbiAgICBzZXQ6IHtwcmU6ICcqJywgcG9zdDogJyonfSwgXG4gICAgdW5zZXQ6IHtwcmVQYXR0ZXJuOiAvKD86XFwqfF8pJC8sIHBvc3RQYXR0ZXJuOiAvXig/OlxcKnxfKS99XG4gIH0sXG4gIGNvZGU6IHtcbiAgICB0eXBlOiAnaW5saW5lJywgXG4gICAgY2xhc3NOYW1lOiAnVE1Db2RlJywgXG4gICAgc2V0OiB7cHJlOiAnYCcsIHBvc3Q6ICdgJ30sIFxuICAgIHVuc2V0OiB7cHJlUGF0dGVybjogL2ArJC8sIHBvc3RQYXR0ZXJuOiAvXmArL30gLy8gRklYTUUgdGhpcyBkb2Vzbid0IGVuc3VyZSBiYWxhbmNlZCBiYWNrdGlja3MgcmlnaHQgbm93XG4gIH0sIFxuICBzdHJpa2V0aHJvdWdoOiB7XG4gICAgdHlwZTogJ2lubGluZScsIFxuICAgIGNsYXNzTmFtZTogJ1RNU3RyaWtldGhyb3VnaCcsIFxuICAgIHNldDoge3ByZTogJ35+JywgcG9zdDogJ35+J30sIFxuICAgIHVuc2V0OiB7cHJlUGF0dGVybjovfn4kLywgcG9zdFBhdHRlcm46IC9efn4vIH1cbiAgfSxcbiAgaDE6IHtcbiAgICB0eXBlOiAnbGluZScsIFxuICAgIGNsYXNzTmFtZTogJ1RNSDEnLCBcbiAgICBzZXQ6IHtwYXR0ZXJuOiAvXiggezAsM30oPzooPzojK3xbMC05XXsxLDl9WykuXXxbPlxcLSorXSlcXHMrKT8pKC4qKSQvLCByZXBsYWNlbWVudDogJyMgJDInfSwgXG4gICAgdW5zZXQ6IHtwYXR0ZXJuOiAvXiggezAsM30jXFxzKykoLio/KSgoPzpcXHMrIytcXHMqKT8pJC8sIHJlcGxhY2VtZW50OiAnJDInfVxuICB9LFxuICBoMjoge1xuICAgIHR5cGU6ICdsaW5lJywgXG4gICAgY2xhc3NOYW1lOiAnVE1IMicsIFxuICAgIHNldDoge3BhdHRlcm46IC9eKCB7MCwzfSg/Oig/OiMrfFswLTldezEsOX1bKS5dfFs+XFwtKitdKVxccyspPykoLiopJC8sIHJlcGxhY2VtZW50OiAnIyMgJDInfSwgXG4gICAgdW5zZXQ6IHtwYXR0ZXJuOiAvXiggezAsM30jI1xccyspKC4qPykoKD86XFxzKyMrXFxzKik/KSQvLCByZXBsYWNlbWVudDogJyQyJ31cbiAgfSxcbiAgaDM6IHtcbiAgICB0eXBlOiAnbGluZScsIFxuICAgIGNsYXNzTmFtZTogJ1RNSDMnLCBcbiAgICBzZXQ6IHtwYXR0ZXJuOiAvXiggezAsM30oPzooPzojK3xbMC05XXsxLDl9WykuXXxbPlxcLSorXSlcXHMrKT8pKC4qKSQvLCByZXBsYWNlbWVudDogJyMjIyAkMid9LCBcbiAgICB1bnNldDoge3BhdHRlcm46IC9eKCB7MCwzfSMjI1xccyspKC4qPykoKD86XFxzKyMrXFxzKik/KSQvLCByZXBsYWNlbWVudDogJyQyJ31cbiAgfSxcbiAgaDQ6IHtcbiAgICB0eXBlOiAnbGluZScsIFxuICAgIGNsYXNzTmFtZTogJ1RNSDQnLCBcbiAgICBzZXQ6IHtwYXR0ZXJuOiAvXiggezAsM30oPzooPzojK3xbMC05XXsxLDl9WykuXXxbPlxcLSorXSlcXHMrKT8pKC4qKSQvLCByZXBsYWNlbWVudDogJyMjIyMgJDInfSwgXG4gICAgdW5zZXQ6IHtwYXR0ZXJuOiAvXiggezAsM30jIyMjXFxzKykoLio/KSgoPzpcXHMrIytcXHMqKT8pJC8sIHJlcGxhY2VtZW50OiAnJDInfVxuICB9LFxuICBoNToge1xuICAgIHR5cGU6ICdsaW5lJywgXG4gICAgY2xhc3NOYW1lOiAnVE1INScsIFxuICAgIHNldDoge3BhdHRlcm46IC9eKCB7MCwzfSg/Oig/OiMrfFswLTldezEsOX1bKS5dfFs+XFwtKitdKVxccyspPykoLiopJC8sIHJlcGxhY2VtZW50OiAnIyMjIyMgJDInfSwgXG4gICAgdW5zZXQ6IHtwYXR0ZXJuOiAvXiggezAsM30jIyMjI1xccyspKC4qPykoKD86XFxzKyMrXFxzKik/KSQvLCByZXBsYWNlbWVudDogJyQyJ31cbiAgfSxcbiAgaDY6IHtcbiAgICB0eXBlOiAnbGluZScsIFxuICAgIGNsYXNzTmFtZTogJ1RNSDYnLCBcbiAgICBzZXQ6IHtwYXR0ZXJuOiAvXiggezAsM30oPzooPzojK3xbMC05XXsxLDl9WykuXXxbPlxcLSorXSlcXHMrKT8pKC4qKSQvLCByZXBsYWNlbWVudDogJyMjIyMjIyAkMid9LCBcbiAgICB1bnNldDoge3BhdHRlcm46IC9eKCB7MCwzfSMjIyMjI1xccyspKC4qPykoKD86XFxzKyMrXFxzKik/KSQvLCByZXBsYWNlbWVudDogJyQyJ31cbiAgfSxcbiAgdWw6IHtcbiAgICB0eXBlOiAnbGluZScsIFxuICAgIGNsYXNzTmFtZTogJ1RNVUwnLCBcbiAgICBzZXQ6IHtwYXR0ZXJuOiAvXiggezAsM30oPzooPzojK3xbMC05XXsxLDl9WykuXXxbPlxcLSorXSlcXHMrKT8pKC4qKSQvLCByZXBsYWNlbWVudDogJy0gJDInfSwgXG4gICAgdW5zZXQ6IHtwYXR0ZXJuOiAvXiggezAsM31bKyotXSB7MSw0fSkoLiopJC8sIHJlcGxhY2VtZW50OiAnJDInfVxuICB9LFxuICBvbDoge1xuICAgIHR5cGU6ICdsaW5lJywgXG4gICAgY2xhc3NOYW1lOiAnVE1PTCcsIFxuICAgIHNldDoge3BhdHRlcm46IC9eKCB7MCwzfSg/Oig/OiMrfFswLTldezEsOX1bKS5dfFs+XFwtKitdKVxccyspPykoLiopJC8sIHJlcGxhY2VtZW50OiAnJCMuICQyJ30sIFxuICAgIHVuc2V0OiB7cGF0dGVybjogL14oIHswLDN9XFxkezEsOX1bLildIHsxLDR9KSguKikkLywgcmVwbGFjZW1lbnQ6ICckMid9XG4gIH0sIFxuICBibG9ja3F1b3RlOiB7XG4gICAgdHlwZTogJ2xpbmUnLCBcbiAgICBjbGFzc05hbWU6ICdUTUJsb2NrcXVvdGUnLCBcbiAgICBzZXQ6IHtwYXR0ZXJuOiAvXiggezAsM30oPzooPzojK3xbMC05XXsxLDl9WykuXXxbPlxcLSorXSlcXHMrKT8pKC4qKSQvLCByZXBsYWNlbWVudDogJz4gJDInfSwgXG4gICAgdW5zZXQ6IHtwYXR0ZXJuOiAvXiggezAsM30+WyBdPykoLiopJC8sIHJlcGxhY2VtZW50OiAnJDInfVxuICB9LFxufTsiLCJpbXBvcnQge1xuICBpbmxpbmVHcmFtbWFyLFxuICBsaW5lR3JhbW1hcixcbiAgcHVuY3R1YXRpb25MZWFkaW5nLFxuICBwdW5jdHVhdGlvblRyYWlsaW5nLFxuICBodG1sZXNjYXBlLFxuICBodG1sQmxvY2tHcmFtbWFyLFxuICBjb21tYW5kcyxcbiAgSFRNTEJsb2NrUnVsZSxcbiAgQ29tbWFuZCxcbn0gZnJvbSBcIi4vZ3JhbW1hclwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIEVkaXRvclByb3BzIHtcbiAgZWxlbWVudD86IHN0cmluZyB8IEhUTUxFbGVtZW50O1xuICBlZGl0b3I/OiBzdHJpbmcgfCBIVE1MRWxlbWVudDtcbiAgY29udGVudD86IHN0cmluZztcbiAgdGV4dGFyZWE/OiBzdHJpbmcgfCBIVE1MVGV4dEFyZWFFbGVtZW50O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFBvc2l0aW9uIHtcbiAgcm93OiBudW1iZXI7XG4gIGNvbDogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEhpc3RvcnlTdGF0ZSB7XG4gIGNvbnRlbnQ6IHN0cmluZztcbiAgc2VsZWN0aW9uOiBQb3NpdGlvbiB8IG51bGw7XG4gIGFuY2hvcjogUG9zaXRpb24gfCBudWxsO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENoYW5nZUV2ZW50IHtcbiAgY29udGVudDogc3RyaW5nO1xuICBsaW5lc0RpcnR5OiBib29sZWFuW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2VsZWN0aW9uRXZlbnQge1xuICBmb2N1czogUG9zaXRpb247XG4gIGFuY2hvcjogUG9zaXRpb247XG4gIGNvbW1hbmRTdGF0ZTogUmVjb3JkPHN0cmluZywgYm9vbGVhbiB8IG51bGw+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIERyb3BFdmVudCB7XG4gIGRhdGFUcmFuc2ZlcjogRGF0YVRyYW5zZmVyO1xufVxuXG50eXBlIEV2ZW50VHlwZSA9ICdjaGFuZ2UnIHwgJ3NlbGVjdGlvbicgfCAnZHJvcCc7XG50eXBlIEV2ZW50SGFuZGxlcjxUPiA9IChldmVudDogVCkgPT4gdm9pZDtcblxuZXhwb3J0IGNsYXNzIEVkaXRvciB7XG4gIHB1YmxpYyBlOiBIVE1MRGl2RWxlbWVudCB8IG51bGwgPSBudWxsO1xuICBwdWJsaWMgdGV4dGFyZWE6IEhUTUxUZXh0QXJlYUVsZW1lbnQgfCBudWxsID0gbnVsbDtcbiAgcHVibGljIGxpbmVzOiBzdHJpbmdbXSA9IFtdO1xuICBwdWJsaWMgbGluZUVsZW1lbnRzOiBOb2RlTGlzdE9mPENoaWxkTm9kZT4gfCBIVE1MQ29sbGVjdGlvbiB8IENoaWxkTm9kZVtdID0gW107XG4gIHB1YmxpYyBsaW5lVHlwZXM6IHN0cmluZ1tdID0gW107XG4gIHB1YmxpYyBsaW5lQ2FwdHVyZXM6IFJlZ0V4cEV4ZWNBcnJheVtdID0gW107XG4gIHB1YmxpYyBsaW5lUmVwbGFjZW1lbnRzOiBzdHJpbmdbXSA9IFtdO1xuICBwdWJsaWMgbGlua0xhYmVsczogc3RyaW5nW10gPSBbXTtcbiAgcHVibGljIGxpbmVEaXJ0eTogYm9vbGVhbltdID0gW107XG4gIHB1YmxpYyBsYXN0Q29tbWFuZFN0YXRlOiBSZWNvcmQ8c3RyaW5nLCBib29sZWFuIHwgbnVsbD4gfCBudWxsID0gbnVsbDtcblxuICBwdWJsaWMgbGlzdGVuZXJzOiB7XG4gICAgY2hhbmdlOiBFdmVudEhhbmRsZXI8Q2hhbmdlRXZlbnQ+W107XG4gICAgc2VsZWN0aW9uOiBFdmVudEhhbmRsZXI8U2VsZWN0aW9uRXZlbnQ+W107XG4gICAgZHJvcDogRXZlbnRIYW5kbGVyPERyb3BFdmVudD5bXTtcbiAgfSA9IHtcbiAgICBjaGFuZ2U6IFtdLFxuICAgIHNlbGVjdGlvbjogW10sXG4gICAgZHJvcDogW10sXG4gIH07XG5cbiAgcHJpdmF0ZSB1bmRvU3RhY2s6IEhpc3RvcnlTdGF0ZVtdID0gW107XG4gIHByaXZhdGUgcmVkb1N0YWNrOiBIaXN0b3J5U3RhdGVbXSA9IFtdO1xuICBwcml2YXRlIGlzUmVzdG9yaW5nSGlzdG9yeTogYm9vbGVhbiA9IGZhbHNlO1xuICBwcml2YXRlIG1heEhpc3Rvcnk6IG51bWJlciA9IDEwMDtcblxuICBjb25zdHJ1Y3Rvcihwcm9wczogRWRpdG9yUHJvcHMgPSB7fSkge1xuICAgIHRoaXMuZSA9IG51bGw7XG4gICAgdGhpcy50ZXh0YXJlYSA9IG51bGw7XG4gICAgdGhpcy5saW5lcyA9IFtdO1xuICAgIHRoaXMubGluZUVsZW1lbnRzID0gW10gYXMgQ2hpbGROb2RlW107XG4gICAgdGhpcy5saW5lVHlwZXMgPSBbXTtcbiAgICB0aGlzLmxpbmVDYXB0dXJlcyA9IFtdO1xuICAgIHRoaXMubGluZVJlcGxhY2VtZW50cyA9IFtdO1xuICAgIHRoaXMubGlua0xhYmVscyA9IFtdO1xuICAgIHRoaXMubGluZURpcnR5ID0gW107XG4gICAgdGhpcy5sYXN0Q29tbWFuZFN0YXRlID0gbnVsbDtcblxuICAgIHRoaXMubGlzdGVuZXJzID0ge1xuICAgICAgY2hhbmdlOiBbXSxcbiAgICAgIHNlbGVjdGlvbjogW10sXG4gICAgICBkcm9wOiBbXSxcbiAgICB9O1xuXG4gICAgbGV0IGVsZW1lbnQ6IEhUTUxFbGVtZW50IHwgbnVsbCA9IG51bGw7XG4gICAgaWYgKHR5cGVvZiBwcm9wcy5lbGVtZW50ID09PSAnc3RyaW5nJykge1xuICAgICAgZWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHByb3BzLmVsZW1lbnQpO1xuICAgIH0gZWxzZSBpZiAocHJvcHMuZWxlbWVudCkge1xuICAgICAgZWxlbWVudCA9IHByb3BzLmVsZW1lbnQ7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBwcm9wcy50ZXh0YXJlYSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHRoaXMudGV4dGFyZWEgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChwcm9wcy50ZXh0YXJlYSkgYXMgSFRNTFRleHRBcmVhRWxlbWVudDtcbiAgICB9IGVsc2UgaWYgKHByb3BzLnRleHRhcmVhKSB7XG4gICAgICB0aGlzLnRleHRhcmVhID0gcHJvcHMudGV4dGFyZWE7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMudGV4dGFyZWEpIHtcbiAgICAgIGlmICghZWxlbWVudCkgZWxlbWVudCA9IHRoaXMudGV4dGFyZWE7XG4gICAgfVxuXG4gICAgaWYgKCFlbGVtZW50KSB7XG4gICAgICBlbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJib2R5XCIpWzBdO1xuICAgIH1cbiAgICBpZiAoZWxlbWVudCAmJiBlbGVtZW50LnRhZ05hbWUgPT09IFwiVEVYVEFSRUFcIikge1xuICAgICAgdGhpcy50ZXh0YXJlYSA9IGVsZW1lbnQgYXMgSFRNTFRleHRBcmVhRWxlbWVudDtcbiAgICAgIGVsZW1lbnQgPSB0aGlzLnRleHRhcmVhLnBhcmVudE5vZGUgYXMgSFRNTEVsZW1lbnQ7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMudGV4dGFyZWEpIHtcbiAgICAgIHRoaXMudGV4dGFyZWEuc3R5bGUuZGlzcGxheSA9IFwibm9uZVwiO1xuICAgIH1cblxuICAgIHRoaXMudW5kb1N0YWNrID0gW107XG4gICAgdGhpcy5yZWRvU3RhY2sgPSBbXTtcbiAgICB0aGlzLmlzUmVzdG9yaW5nSGlzdG9yeSA9IGZhbHNlO1xuICAgIHRoaXMubWF4SGlzdG9yeSA9IDEwMDtcblxuICAgIHRoaXMuY3JlYXRlRWRpdG9yRWxlbWVudChlbGVtZW50LCBwcm9wcyk7XG4gICAgdGhpcy5zZXRDb250ZW50KFxuICAgICAgdHlwZW9mIHByb3BzLmNvbnRlbnQgPT09IFwic3RyaW5nXCJcbiAgICAgICAgPyBwcm9wcy5jb250ZW50XG4gICAgICAgIDogdGhpcy50ZXh0YXJlYVxuICAgICAgICA/IHRoaXMudGV4dGFyZWEudmFsdWVcbiAgICAgICAgOiBcIiMgSGVsbG8gVGlueU1ERSFcXG5FZGl0ICoqaGVyZSoqXCJcbiAgICApO1xuICAgIFxuICAgIHRoaXMuZSEuYWRkRXZlbnRMaXN0ZW5lcihcImtleWRvd25cIiwgKGUpID0+IHRoaXMuaGFuZGxlVW5kb1JlZG9LZXkoZSkpO1xuICB9XG5cbiAgZ2V0IGNhblVuZG8oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMudW5kb1N0YWNrLmxlbmd0aCA+PSAyO1xuICB9XG5cbiAgZ2V0IGNhblJlZG8oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMucmVkb1N0YWNrLmxlbmd0aCA+IDA7XG4gIH1cblxuICBwcml2YXRlIHB1c2hIaXN0b3J5KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmlzUmVzdG9yaW5nSGlzdG9yeSkgcmV0dXJuO1xuICAgIHRoaXMucHVzaEN1cnJlbnRTdGF0ZSgpO1xuICAgIHRoaXMucmVkb1N0YWNrID0gW107XG4gIH1cblxuICBwcml2YXRlIHB1c2hDdXJyZW50U3RhdGUoKTogdm9pZCB7XG4gICAgdGhpcy51bmRvU3RhY2sucHVzaCh7XG4gICAgICBjb250ZW50OiB0aGlzLmdldENvbnRlbnQoKSxcbiAgICAgIHNlbGVjdGlvbjogdGhpcy5nZXRTZWxlY3Rpb24oKSxcbiAgICAgIGFuY2hvcjogdGhpcy5nZXRTZWxlY3Rpb24odHJ1ZSksXG4gICAgfSk7XG4gICAgaWYgKHRoaXMudW5kb1N0YWNrLmxlbmd0aCA+IHRoaXMubWF4SGlzdG9yeSkgdGhpcy51bmRvU3RhY2suc2hpZnQoKTtcbiAgfVxuXG4gIHB1YmxpYyB1bmRvKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnVuZG9TdGFjay5sZW5ndGggPCAyKSByZXR1cm47XG4gICAgdGhpcy5pc1Jlc3RvcmluZ0hpc3RvcnkgPSB0cnVlO1xuICAgIHRoaXMucHVzaEN1cnJlbnRTdGF0ZSgpO1xuICAgIGNvbnN0IGN1cnJlbnQgPSB0aGlzLnVuZG9TdGFjay5wb3AoKSE7XG4gICAgdGhpcy5yZWRvU3RhY2sucHVzaChjdXJyZW50KTtcbiAgICBjb25zdCBwcmV2ID0gdGhpcy51bmRvU3RhY2tbdGhpcy51bmRvU3RhY2subGVuZ3RoIC0gMV07XG4gICAgdGhpcy5zZXRDb250ZW50KHByZXYuY29udGVudCk7XG4gICAgaWYgKHByZXYuc2VsZWN0aW9uKSB0aGlzLnNldFNlbGVjdGlvbihwcmV2LnNlbGVjdGlvbiwgcHJldi5hbmNob3IpO1xuICAgIHRoaXMudW5kb1N0YWNrLnBvcCgpO1xuICAgIHRoaXMuaXNSZXN0b3JpbmdIaXN0b3J5ID0gZmFsc2U7XG4gIH1cblxuICBwdWJsaWMgcmVkbygpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMucmVkb1N0YWNrLmxlbmd0aCkgcmV0dXJuO1xuICAgIHRoaXMuaXNSZXN0b3JpbmdIaXN0b3J5ID0gdHJ1ZTtcbiAgICB0aGlzLnB1c2hDdXJyZW50U3RhdGUoKTtcbiAgICBjb25zdCBuZXh0ID0gdGhpcy5yZWRvU3RhY2sucG9wKCkhO1xuICAgIHRoaXMuc2V0Q29udGVudChuZXh0LmNvbnRlbnQpO1xuICAgIGlmIChuZXh0LnNlbGVjdGlvbikgdGhpcy5zZXRTZWxlY3Rpb24obmV4dC5zZWxlY3Rpb24sIG5leHQuYW5jaG9yKTtcbiAgICB0aGlzLmlzUmVzdG9yaW5nSGlzdG9yeSA9IGZhbHNlO1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVVbmRvUmVkb0tleShlOiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgY29uc3QgaXNNYWMgPSAvTWFjfGlQb2R8aVBob25lfGlQYWQvLnRlc3QobmF2aWdhdG9yLnBsYXRmb3JtKTtcbiAgICBjb25zdCBjdHJsID0gaXNNYWMgPyBlLm1ldGFLZXkgOiBlLmN0cmxLZXk7XG4gICAgaWYgKGN0cmwgJiYgIWUuYWx0S2V5KSB7XG4gICAgICBpZiAoZS5rZXkgPT09IFwielwiIHx8IGUua2V5ID09PSBcIlpcIikge1xuICAgICAgICBpZiAoZS5zaGlmdEtleSkge1xuICAgICAgICAgIHRoaXMucmVkbygpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMudW5kbygpO1xuICAgICAgICB9XG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgIH0gZWxzZSBpZiAoZS5rZXkgPT09IFwieVwiIHx8IGUua2V5ID09PSBcIllcIikge1xuICAgICAgICB0aGlzLnJlZG8oKTtcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlRWRpdG9yRWxlbWVudChlbGVtZW50OiBIVE1MRWxlbWVudCwgcHJvcHM6IEVkaXRvclByb3BzKTogdm9pZCB7XG4gICAgaWYgKHByb3BzICYmIHByb3BzLmVkaXRvciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAodHlwZW9mIHByb3BzLmVkaXRvciA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgdGhpcy5lID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQocHJvcHMuZWRpdG9yKSBhcyBIVE1MRGl2RWxlbWVudDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuZSA9IHByb3BzLmVkaXRvciBhcyBIVE1MRGl2RWxlbWVudDtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5lID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICB9XG5cbiAgICB0aGlzLmUuY2xhc3NMaXN0LmFkZChcIlRpbnlNREVcIik7XG4gICAgdGhpcy5lLmNvbnRlbnRFZGl0YWJsZSA9IFwidHJ1ZVwiO1xuICAgIHRoaXMuZS5zdHlsZS53aGl0ZVNwYWNlID0gXCJwcmUtd3JhcFwiO1xuICAgICh0aGlzLmUuc3R5bGUgYXMgYW55KS53ZWJraXRVc2VyTW9kaWZ5ID0gXCJyZWFkLXdyaXRlLXBsYWludGV4dC1vbmx5XCI7XG5cbiAgICBpZiAocHJvcHMuZWRpdG9yID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmIChcbiAgICAgICAgdGhpcy50ZXh0YXJlYSAmJlxuICAgICAgICB0aGlzLnRleHRhcmVhLnBhcmVudE5vZGUgPT09IGVsZW1lbnQgJiZcbiAgICAgICAgdGhpcy50ZXh0YXJlYS5uZXh0U2libGluZ1xuICAgICAgKSB7XG4gICAgICAgIGVsZW1lbnQuaW5zZXJ0QmVmb3JlKHRoaXMuZSwgdGhpcy50ZXh0YXJlYS5uZXh0U2libGluZyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBlbGVtZW50LmFwcGVuZENoaWxkKHRoaXMuZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5lLmFkZEV2ZW50TGlzdGVuZXIoXCJpbnB1dFwiLCAoZSkgPT4gdGhpcy5oYW5kbGVJbnB1dEV2ZW50KGUpKTtcbiAgICB0aGlzLmUuYWRkRXZlbnRMaXN0ZW5lcihcImNvbXBvc2l0aW9uZW5kXCIsIChlKSA9PiB0aGlzLmhhbmRsZUlucHV0RXZlbnQoZSkpO1xuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJzZWxlY3Rpb25jaGFuZ2VcIiwgKGUpID0+XG4gICAgICB0aGlzLmhhbmRsZVNlbGVjdGlvbkNoYW5nZUV2ZW50KGUpXG4gICAgKTtcbiAgICB0aGlzLmUuYWRkRXZlbnRMaXN0ZW5lcihcInBhc3RlXCIsIChlKSA9PiB0aGlzLmhhbmRsZVBhc3RlKGUpKTtcbiAgICB0aGlzLmUuYWRkRXZlbnRMaXN0ZW5lcihcImRyb3BcIiwgKGUpID0+IHRoaXMuaGFuZGxlRHJvcChlKSk7XG4gICAgdGhpcy5saW5lRWxlbWVudHMgPSB0aGlzLmUuY2hpbGROb2RlcztcbiAgfVxuXG4gIHB1YmxpYyBzZXRDb250ZW50KGNvbnRlbnQ6IHN0cmluZyk6IHZvaWQge1xuICAgIHdoaWxlICh0aGlzLmUhLmZpcnN0Q2hpbGQpIHtcbiAgICAgIHRoaXMuZSEucmVtb3ZlQ2hpbGQodGhpcy5lIS5maXJzdENoaWxkKTtcbiAgICB9XG4gICAgdGhpcy5saW5lcyA9IGNvbnRlbnQuc3BsaXQoLyg/OlxcclxcbnxcXHJ8XFxuKS8pO1xuICAgIHRoaXMubGluZURpcnR5ID0gW107XG4gICAgZm9yIChsZXQgbGluZU51bSA9IDA7IGxpbmVOdW0gPCB0aGlzLmxpbmVzLmxlbmd0aDsgbGluZU51bSsrKSB7XG4gICAgICBsZXQgbGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgICAgdGhpcy5lIS5hcHBlbmRDaGlsZChsZSk7XG4gICAgICB0aGlzLmxpbmVEaXJ0eS5wdXNoKHRydWUpO1xuICAgIH1cbiAgICB0aGlzLmxpbmVUeXBlcyA9IG5ldyBBcnJheSh0aGlzLmxpbmVzLmxlbmd0aCk7XG4gICAgdGhpcy51cGRhdGVGb3JtYXR0aW5nKCk7XG4gICAgdGhpcy5maXJlQ2hhbmdlKCk7XG4gICAgaWYgKCF0aGlzLmlzUmVzdG9yaW5nSGlzdG9yeSkgdGhpcy5wdXNoSGlzdG9yeSgpO1xuICB9XG5cbiAgcHVibGljIGdldENvbnRlbnQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5saW5lcy5qb2luKFwiXFxuXCIpO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVGb3JtYXR0aW5nKCk6IHZvaWQge1xuICAgIHRoaXMudXBkYXRlTGluZVR5cGVzKCk7XG4gICAgdGhpcy51cGRhdGVMaW5rTGFiZWxzKCk7XG4gICAgdGhpcy5hcHBseUxpbmVUeXBlcygpO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVMaW5rTGFiZWxzKCk6IHZvaWQge1xuICAgIHRoaXMubGlua0xhYmVscyA9IFtdO1xuICAgIGZvciAobGV0IGwgPSAwOyBsIDwgdGhpcy5saW5lcy5sZW5ndGg7IGwrKykge1xuICAgICAgaWYgKHRoaXMubGluZVR5cGVzW2xdID09PSBcIlRNTGlua1JlZmVyZW5jZURlZmluaXRpb25cIikge1xuICAgICAgICB0aGlzLmxpbmtMYWJlbHMucHVzaChcbiAgICAgICAgICB0aGlzLmxpbmVDYXB0dXJlc1tsXVtcbiAgICAgICAgICAgIGxpbmVHcmFtbWFyLlRNTGlua1JlZmVyZW5jZURlZmluaXRpb24ubGFiZWxQbGFjZWhvbGRlciFcbiAgICAgICAgICBdXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSByZXBsYWNlKHJlcGxhY2VtZW50OiBzdHJpbmcsIGNhcHR1cmU6IFJlZ0V4cEV4ZWNBcnJheSk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHJlcGxhY2VtZW50LnJlcGxhY2UoLyhcXCR7MSwyfSkoWzAtOV0pL2csIChzdHIsIHAxLCBwMikgPT4ge1xuICAgICAgaWYgKHAxID09PSBcIiRcIikgcmV0dXJuIGh0bWxlc2NhcGUoY2FwdHVyZVtwYXJzZUludChwMildKTtcbiAgICAgIGVsc2VcbiAgICAgICAgcmV0dXJuIGA8c3BhbiBjbGFzcz1cIlRNSW5saW5lRm9ybWF0dGVkXCI+JHt0aGlzLnByb2Nlc3NJbmxpbmVTdHlsZXMoXG4gICAgICAgICAgY2FwdHVyZVtwYXJzZUludChwMildXG4gICAgICAgICl9PC9zcGFuPmA7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGFwcGx5TGluZVR5cGVzKCk6IHZvaWQge1xuICAgIGZvciAobGV0IGxpbmVOdW0gPSAwOyBsaW5lTnVtIDwgdGhpcy5saW5lcy5sZW5ndGg7IGxpbmVOdW0rKykge1xuICAgICAgaWYgKHRoaXMubGluZURpcnR5W2xpbmVOdW1dKSB7XG4gICAgICAgIGxldCBjb250ZW50SFRNTCA9IHRoaXMucmVwbGFjZShcbiAgICAgICAgICB0aGlzLmxpbmVSZXBsYWNlbWVudHNbbGluZU51bV0sXG4gICAgICAgICAgdGhpcy5saW5lQ2FwdHVyZXNbbGluZU51bV1cbiAgICAgICAgKTtcbiAgICAgICAgKHRoaXMubGluZUVsZW1lbnRzW2xpbmVOdW1dIGFzIEhUTUxFbGVtZW50KS5jbGFzc05hbWUgPSB0aGlzLmxpbmVUeXBlc1tsaW5lTnVtXTtcbiAgICAgICAgKHRoaXMubGluZUVsZW1lbnRzW2xpbmVOdW1dIGFzIEhUTUxFbGVtZW50KS5yZW1vdmVBdHRyaWJ1dGUoXCJzdHlsZVwiKTtcbiAgICAgICAgKHRoaXMubGluZUVsZW1lbnRzW2xpbmVOdW1dIGFzIEhUTUxFbGVtZW50KS5pbm5lckhUTUwgPVxuICAgICAgICAgIGNvbnRlbnRIVE1MID09PSBcIlwiID8gXCI8YnIgLz5cIiA6IGNvbnRlbnRIVE1MO1xuICAgICAgfVxuICAgICAgKHRoaXMubGluZUVsZW1lbnRzW2xpbmVOdW1dIGFzIEhUTUxFbGVtZW50KS5kYXRhc2V0LmxpbmVOdW0gPSBsaW5lTnVtLnRvU3RyaW5nKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVMaW5lVHlwZXMoKTogdm9pZCB7XG4gICAgbGV0IGNvZGVCbG9ja1R5cGU6IHN0cmluZyB8IGZhbHNlID0gZmFsc2U7XG4gICAgbGV0IGNvZGVCbG9ja1NlcUxlbmd0aCA9IDA7XG4gICAgbGV0IGh0bWxCbG9jazogSFRNTEJsb2NrUnVsZSB8IGZhbHNlID0gZmFsc2U7XG5cbiAgICBmb3IgKGxldCBsaW5lTnVtID0gMDsgbGluZU51bSA8IHRoaXMubGluZXMubGVuZ3RoOyBsaW5lTnVtKyspIHtcbiAgICAgIGxldCBsaW5lVHlwZSA9IFwiVE1QYXJhXCI7XG4gICAgICBsZXQgbGluZUNhcHR1cmU6IFJlZ0V4cEV4ZWNBcnJheSA9IFt0aGlzLmxpbmVzW2xpbmVOdW1dXSBhcyBSZWdFeHBFeGVjQXJyYXk7XG4gICAgICBsZXQgbGluZVJlcGxhY2VtZW50ID0gXCIkJDBcIjtcblxuICAgICAgLy8gQ2hlY2sgb25nb2luZyBjb2RlIGJsb2Nrc1xuICAgICAgaWYgKGNvZGVCbG9ja1R5cGUgPT09IFwiVE1Db2RlRmVuY2VCYWNrdGlja09wZW5cIikge1xuICAgICAgICBsZXQgY2FwdHVyZSA9IGxpbmVHcmFtbWFyLlRNQ29kZUZlbmNlQmFja3RpY2tDbG9zZS5yZWdleHAuZXhlYyh0aGlzLmxpbmVzW2xpbmVOdW1dKTtcbiAgICAgICAgaWYgKGNhcHR1cmUgJiYgY2FwdHVyZS5ncm91cHMhW1wic2VxXCJdLmxlbmd0aCA+PSBjb2RlQmxvY2tTZXFMZW5ndGgpIHtcbiAgICAgICAgICBsaW5lVHlwZSA9IFwiVE1Db2RlRmVuY2VCYWNrdGlja0Nsb3NlXCI7XG4gICAgICAgICAgbGluZVJlcGxhY2VtZW50ID0gbGluZUdyYW1tYXIuVE1Db2RlRmVuY2VCYWNrdGlja0Nsb3NlLnJlcGxhY2VtZW50O1xuICAgICAgICAgIGxpbmVDYXB0dXJlID0gY2FwdHVyZTtcbiAgICAgICAgICBjb2RlQmxvY2tUeXBlID0gZmFsc2U7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbGluZVR5cGUgPSBcIlRNRmVuY2VkQ29kZUJhY2t0aWNrXCI7XG4gICAgICAgICAgbGluZVJlcGxhY2VtZW50ID0gJzxzcGFuIGNsYXNzPVwiVE1GZW5jZWRDb2RlXCI+JDA8YnIgLz48L3NwYW4+JztcbiAgICAgICAgICBsaW5lQ2FwdHVyZSA9IFt0aGlzLmxpbmVzW2xpbmVOdW1dXSBhcyBSZWdFeHBFeGVjQXJyYXk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoY29kZUJsb2NrVHlwZSA9PT0gXCJUTUNvZGVGZW5jZVRpbGRlT3BlblwiKSB7XG4gICAgICAgIGxldCBjYXB0dXJlID0gbGluZUdyYW1tYXIuVE1Db2RlRmVuY2VUaWxkZUNsb3NlLnJlZ2V4cC5leGVjKHRoaXMubGluZXNbbGluZU51bV0pO1xuICAgICAgICBpZiAoY2FwdHVyZSAmJiBjYXB0dXJlLmdyb3VwcyFbXCJzZXFcIl0ubGVuZ3RoID49IGNvZGVCbG9ja1NlcUxlbmd0aCkge1xuICAgICAgICAgIGxpbmVUeXBlID0gXCJUTUNvZGVGZW5jZVRpbGRlQ2xvc2VcIjtcbiAgICAgICAgICBsaW5lUmVwbGFjZW1lbnQgPSBsaW5lR3JhbW1hci5UTUNvZGVGZW5jZVRpbGRlQ2xvc2UucmVwbGFjZW1lbnQ7XG4gICAgICAgICAgbGluZUNhcHR1cmUgPSBjYXB0dXJlO1xuICAgICAgICAgIGNvZGVCbG9ja1R5cGUgPSBmYWxzZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBsaW5lVHlwZSA9IFwiVE1GZW5jZWRDb2RlVGlsZGVcIjtcbiAgICAgICAgICBsaW5lUmVwbGFjZW1lbnQgPSAnPHNwYW4gY2xhc3M9XCJUTUZlbmNlZENvZGVcIj4kMDxiciAvPjwvc3Bhbj4nO1xuICAgICAgICAgIGxpbmVDYXB0dXJlID0gW3RoaXMubGluZXNbbGluZU51bV1dIGFzIFJlZ0V4cEV4ZWNBcnJheTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBDaGVjayBIVE1MIGJsb2NrIHR5cGVzXG4gICAgICBpZiAobGluZVR5cGUgPT09IFwiVE1QYXJhXCIgJiYgaHRtbEJsb2NrID09PSBmYWxzZSkge1xuICAgICAgICBmb3IgKGxldCBodG1sQmxvY2tUeXBlIG9mIGh0bWxCbG9ja0dyYW1tYXIpIHtcbiAgICAgICAgICBpZiAodGhpcy5saW5lc1tsaW5lTnVtXS5tYXRjaChodG1sQmxvY2tUeXBlLnN0YXJ0KSkge1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICBodG1sQmxvY2tUeXBlLnBhcmFJbnRlcnJ1cHQgfHxcbiAgICAgICAgICAgICAgbGluZU51bSA9PT0gMCB8fFxuICAgICAgICAgICAgICAhKFxuICAgICAgICAgICAgICAgIHRoaXMubGluZVR5cGVzW2xpbmVOdW0gLSAxXSA9PT0gXCJUTVBhcmFcIiB8fFxuICAgICAgICAgICAgICAgIHRoaXMubGluZVR5cGVzW2xpbmVOdW0gLSAxXSA9PT0gXCJUTVVMXCIgfHxcbiAgICAgICAgICAgICAgICB0aGlzLmxpbmVUeXBlc1tsaW5lTnVtIC0gMV0gPT09IFwiVE1PTFwiIHx8XG4gICAgICAgICAgICAgICAgdGhpcy5saW5lVHlwZXNbbGluZU51bSAtIDFdID09PSBcIlRNQmxvY2txdW90ZVwiXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICBodG1sQmxvY2sgPSBodG1sQmxvY2tUeXBlO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGh0bWxCbG9jayAhPT0gZmFsc2UpIHtcbiAgICAgICAgbGluZVR5cGUgPSBcIlRNSFRNTEJsb2NrXCI7XG4gICAgICAgIGxpbmVSZXBsYWNlbWVudCA9ICc8c3BhbiBjbGFzcz1cIlRNSFRNTENvbnRlbnRcIj4kMDxiciAvPjwvc3Bhbj4nO1xuICAgICAgICBsaW5lQ2FwdHVyZSA9IFt0aGlzLmxpbmVzW2xpbmVOdW1dXSBhcyBSZWdFeHBFeGVjQXJyYXk7XG5cbiAgICAgICAgaWYgKGh0bWxCbG9jay5lbmQpIHtcbiAgICAgICAgICBpZiAodGhpcy5saW5lc1tsaW5lTnVtXS5tYXRjaChodG1sQmxvY2suZW5kKSkge1xuICAgICAgICAgICAgaHRtbEJsb2NrID0gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIGxpbmVOdW0gPT09IHRoaXMubGluZXMubGVuZ3RoIC0gMSB8fFxuICAgICAgICAgICAgdGhpcy5saW5lc1tsaW5lTnVtICsgMV0ubWF0Y2gobGluZUdyYW1tYXIuVE1CbGFua0xpbmUucmVnZXhwKVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgaHRtbEJsb2NrID0gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIENoZWNrIGFsbCByZWdleHBzIGlmIHdlIGhhdmVuJ3QgYXBwbGllZCBvbmUgb2YgdGhlIGNvZGUgYmxvY2sgdHlwZXNcbiAgICAgIGlmIChsaW5lVHlwZSA9PT0gXCJUTVBhcmFcIikge1xuICAgICAgICBmb3IgKGxldCB0eXBlIGluIGxpbmVHcmFtbWFyKSB7XG4gICAgICAgICAgaWYgKGxpbmVHcmFtbWFyW3R5cGVdLnJlZ2V4cCkge1xuICAgICAgICAgICAgbGV0IGNhcHR1cmUgPSBsaW5lR3JhbW1hclt0eXBlXS5yZWdleHAuZXhlYyh0aGlzLmxpbmVzW2xpbmVOdW1dKTtcbiAgICAgICAgICAgIGlmIChjYXB0dXJlKSB7XG4gICAgICAgICAgICAgIGxpbmVUeXBlID0gdHlwZTtcbiAgICAgICAgICAgICAgbGluZVJlcGxhY2VtZW50ID0gbGluZUdyYW1tYXJbdHlwZV0ucmVwbGFjZW1lbnQ7XG4gICAgICAgICAgICAgIGxpbmVDYXB0dXJlID0gY2FwdHVyZTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIElmIHdlJ3ZlIG9wZW5lZCBhIGNvZGUgYmxvY2ssIHJlbWVtYmVyIHRoYXRcbiAgICAgIGlmIChsaW5lVHlwZSA9PT0gXCJUTUNvZGVGZW5jZUJhY2t0aWNrT3BlblwiIHx8IGxpbmVUeXBlID09PSBcIlRNQ29kZUZlbmNlVGlsZGVPcGVuXCIpIHtcbiAgICAgICAgY29kZUJsb2NrVHlwZSA9IGxpbmVUeXBlO1xuICAgICAgICBjb2RlQmxvY2tTZXFMZW5ndGggPSBsaW5lQ2FwdHVyZS5ncm91cHMhW1wic2VxXCJdLmxlbmd0aDtcbiAgICAgIH1cblxuICAgICAgLy8gTGluayByZWZlcmVuY2UgZGVmaW5pdGlvbiBhbmQgaW5kZW50ZWQgY29kZSBjYW4ndCBpbnRlcnJ1cHQgYSBwYXJhZ3JhcGhcbiAgICAgIGlmIChcbiAgICAgICAgKGxpbmVUeXBlID09PSBcIlRNSW5kZW50ZWRDb2RlXCIgfHwgbGluZVR5cGUgPT09IFwiVE1MaW5rUmVmZXJlbmNlRGVmaW5pdGlvblwiKSAmJlxuICAgICAgICBsaW5lTnVtID4gMCAmJlxuICAgICAgICAodGhpcy5saW5lVHlwZXNbbGluZU51bSAtIDFdID09PSBcIlRNUGFyYVwiIHx8XG4gICAgICAgICAgdGhpcy5saW5lVHlwZXNbbGluZU51bSAtIDFdID09PSBcIlRNVUxcIiB8fFxuICAgICAgICAgIHRoaXMubGluZVR5cGVzW2xpbmVOdW0gLSAxXSA9PT0gXCJUTU9MXCIgfHxcbiAgICAgICAgICB0aGlzLmxpbmVUeXBlc1tsaW5lTnVtIC0gMV0gPT09IFwiVE1CbG9ja3F1b3RlXCIpXG4gICAgICApIHtcbiAgICAgICAgbGluZVR5cGUgPSBcIlRNUGFyYVwiO1xuICAgICAgICBsaW5lQ2FwdHVyZSA9IFt0aGlzLmxpbmVzW2xpbmVOdW1dXSBhcyBSZWdFeHBFeGVjQXJyYXk7XG4gICAgICAgIGxpbmVSZXBsYWNlbWVudCA9IFwiJCQwXCI7XG4gICAgICB9XG5cbiAgICAgIC8vIFNldGV4dCBIMiBtYXJrZXJzIHRoYXQgY2FuIGFsc28gYmUgaW50ZXJwcmV0ZWQgYXMgYW4gZW1wdHkgbGlzdCBpdGVtIHNob3VsZCBiZSByZWdhcmRlZCBhcyBzdWNoXG4gICAgICBpZiAobGluZVR5cGUgPT09IFwiVE1TZXRleHRIMk1hcmtlclwiKSB7XG4gICAgICAgIGxldCBjYXB0dXJlID0gbGluZUdyYW1tYXIuVE1VTC5yZWdleHAuZXhlYyh0aGlzLmxpbmVzW2xpbmVOdW1dKTtcbiAgICAgICAgaWYgKGNhcHR1cmUpIHtcbiAgICAgICAgICBsaW5lVHlwZSA9IFwiVE1VTFwiO1xuICAgICAgICAgIGxpbmVSZXBsYWNlbWVudCA9IGxpbmVHcmFtbWFyLlRNVUwucmVwbGFjZW1lbnQ7XG4gICAgICAgICAgbGluZUNhcHR1cmUgPSBjYXB0dXJlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIFNldGV4dCBoZWFkaW5ncyBhcmUgb25seSB2YWxpZCBpZiBwcmVjZWRlZCBieSBhIHBhcmFncmFwaFxuICAgICAgaWYgKGxpbmVUeXBlID09PSBcIlRNU2V0ZXh0SDFNYXJrZXJcIiB8fCBsaW5lVHlwZSA9PT0gXCJUTVNldGV4dEgyTWFya2VyXCIpIHtcbiAgICAgICAgaWYgKGxpbmVOdW0gPT09IDAgfHwgdGhpcy5saW5lVHlwZXNbbGluZU51bSAtIDFdICE9PSBcIlRNUGFyYVwiKSB7XG4gICAgICAgICAgbGV0IGNhcHR1cmUgPSBsaW5lR3JhbW1hci5UTUhSLnJlZ2V4cC5leGVjKHRoaXMubGluZXNbbGluZU51bV0pO1xuICAgICAgICAgIGlmIChjYXB0dXJlKSB7XG4gICAgICAgICAgICBsaW5lVHlwZSA9IFwiVE1IUlwiO1xuICAgICAgICAgICAgbGluZUNhcHR1cmUgPSBjYXB0dXJlO1xuICAgICAgICAgICAgbGluZVJlcGxhY2VtZW50ID0gbGluZUdyYW1tYXIuVE1IUi5yZXBsYWNlbWVudDtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbGluZVR5cGUgPSBcIlRNUGFyYVwiO1xuICAgICAgICAgICAgbGluZUNhcHR1cmUgPSBbdGhpcy5saW5lc1tsaW5lTnVtXV0gYXMgUmVnRXhwRXhlY0FycmF5O1xuICAgICAgICAgICAgbGluZVJlcGxhY2VtZW50ID0gXCIkJDBcIjtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbGV0IGhlYWRpbmdMaW5lID0gbGluZU51bSAtIDE7XG4gICAgICAgICAgY29uc3QgaGVhZGluZ0xpbmVUeXBlID0gbGluZVR5cGUgPT09IFwiVE1TZXRleHRIMU1hcmtlclwiID8gXCJUTVNldGV4dEgxXCIgOiBcIlRNU2V0ZXh0SDJcIjtcbiAgICAgICAgICBkbyB7XG4gICAgICAgICAgICBpZiAodGhpcy5saW5lVHlwZXNbaGVhZGluZ0xpbmVdICE9PSBoZWFkaW5nTGluZVR5cGUpIHtcbiAgICAgICAgICAgICAgdGhpcy5saW5lVHlwZXNbaGVhZGluZ0xpbmVdID0gaGVhZGluZ0xpbmVUeXBlO1xuICAgICAgICAgICAgICB0aGlzLmxpbmVEaXJ0eVtoZWFkaW5nTGluZV0gPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5saW5lUmVwbGFjZW1lbnRzW2hlYWRpbmdMaW5lXSA9IFwiJCQwXCI7XG4gICAgICAgICAgICB0aGlzLmxpbmVDYXB0dXJlc1toZWFkaW5nTGluZV0gPSBbdGhpcy5saW5lc1toZWFkaW5nTGluZV1dIGFzIFJlZ0V4cEV4ZWNBcnJheTtcbiAgICAgICAgICAgIGhlYWRpbmdMaW5lLS07XG4gICAgICAgICAgfSB3aGlsZSAoaGVhZGluZ0xpbmUgPj0gMCAmJiB0aGlzLmxpbmVUeXBlc1toZWFkaW5nTGluZV0gPT09IFwiVE1QYXJhXCIpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLmxpbmVUeXBlc1tsaW5lTnVtXSAhPT0gbGluZVR5cGUpIHtcbiAgICAgICAgdGhpcy5saW5lVHlwZXNbbGluZU51bV0gPSBsaW5lVHlwZTtcbiAgICAgICAgdGhpcy5saW5lRGlydHlbbGluZU51bV0gPSB0cnVlO1xuICAgICAgfVxuICAgICAgdGhpcy5saW5lUmVwbGFjZW1lbnRzW2xpbmVOdW1dID0gbGluZVJlcGxhY2VtZW50O1xuICAgICAgdGhpcy5saW5lQ2FwdHVyZXNbbGluZU51bV0gPSBsaW5lQ2FwdHVyZTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZ2V0U2VsZWN0aW9uKGdldEFuY2hvcjogYm9vbGVhbiA9IGZhbHNlKTogUG9zaXRpb24gfCBudWxsIHtcbiAgICBjb25zdCBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XG4gICAgbGV0IHN0YXJ0Tm9kZSA9IGdldEFuY2hvciA/IHNlbGVjdGlvbiEuYW5jaG9yTm9kZSA6IHNlbGVjdGlvbiEuZm9jdXNOb2RlO1xuICAgIGlmICghc3RhcnROb2RlKSByZXR1cm4gbnVsbDtcbiAgICBsZXQgb2Zmc2V0ID0gZ2V0QW5jaG9yID8gc2VsZWN0aW9uIS5hbmNob3JPZmZzZXQgOiBzZWxlY3Rpb24hLmZvY3VzT2Zmc2V0O1xuICAgIGlmIChzdGFydE5vZGUgPT09IHRoaXMuZSkge1xuICAgICAgaWYgKG9mZnNldCA8IHRoaXMubGluZXMubGVuZ3RoKVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHJvdzogb2Zmc2V0LFxuICAgICAgICAgIGNvbDogMCxcbiAgICAgICAgfTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHJvdzogb2Zmc2V0IC0gMSxcbiAgICAgICAgY29sOiB0aGlzLmxpbmVzW29mZnNldCAtIDFdLmxlbmd0aCxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgbGV0IGNvbCA9IHRoaXMuY29tcHV0ZUNvbHVtbihzdGFydE5vZGUsIG9mZnNldCk7XG4gICAgaWYgKGNvbCA9PT0gbnVsbCkgcmV0dXJuIG51bGw7XG5cbiAgICBsZXQgbm9kZSA9IHN0YXJ0Tm9kZTtcbiAgICB3aGlsZSAobm9kZS5wYXJlbnRFbGVtZW50ICE9PSB0aGlzLmUpIHtcbiAgICAgIG5vZGUgPSBub2RlLnBhcmVudEVsZW1lbnQhO1xuICAgIH1cblxuICAgIGxldCByb3cgPSAwO1xuICAgIGlmIChcbiAgICAgIChub2RlIGFzIEhUTUxFbGVtZW50KS5kYXRhc2V0ICYmXG4gICAgICAobm9kZSBhcyBIVE1MRWxlbWVudCkuZGF0YXNldC5saW5lTnVtICYmXG4gICAgICAoIW5vZGUucHJldmlvdXNTaWJsaW5nIHx8XG4gICAgICAgICgobm9kZS5wcmV2aW91c1NpYmxpbmcgYXMgSFRNTEVsZW1lbnQpLmRhdGFzZXQ/LmxpbmVOdW0gIT09IChub2RlIGFzIEhUTUxFbGVtZW50KS5kYXRhc2V0LmxpbmVOdW0pKVxuICAgICkge1xuICAgICAgcm93ID0gcGFyc2VJbnQoKG5vZGUgYXMgSFRNTEVsZW1lbnQpLmRhdGFzZXQubGluZU51bSEpO1xuICAgIH0gZWxzZSB7XG4gICAgICB3aGlsZSAobm9kZS5wcmV2aW91c1NpYmxpbmcpIHtcbiAgICAgICAgcm93Kys7XG4gICAgICAgIG5vZGUgPSBub2RlLnByZXZpb3VzU2libGluZztcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHsgcm93OiByb3csIGNvbDogY29sIH07XG4gIH1cblxuICBwdWJsaWMgc2V0U2VsZWN0aW9uKGZvY3VzOiBQb3NpdGlvbiwgYW5jaG9yOiBQb3NpdGlvbiB8IG51bGwgPSBudWxsKTogdm9pZCB7XG4gICAgaWYgKCFmb2N1cykgcmV0dXJuO1xuXG4gICAgbGV0IHsgbm9kZTogZm9jdXNOb2RlLCBvZmZzZXQ6IGZvY3VzT2Zmc2V0IH0gPSB0aGlzLmNvbXB1dGVOb2RlQW5kT2Zmc2V0KFxuICAgICAgZm9jdXMucm93LFxuICAgICAgZm9jdXMuY29sLFxuICAgICAgYW5jaG9yID8gYW5jaG9yLnJvdyA9PT0gZm9jdXMucm93ICYmIGFuY2hvci5jb2wgPiBmb2N1cy5jb2wgOiBmYWxzZVxuICAgICk7XG4gICAgbGV0IGFuY2hvck5vZGUgPSBudWxsLFxuICAgICAgYW5jaG9yT2Zmc2V0ID0gbnVsbDtcbiAgICBpZiAoYW5jaG9yICYmIChhbmNob3Iucm93ICE9PSBmb2N1cy5yb3cgfHwgYW5jaG9yLmNvbCAhPT0gZm9jdXMuY29sKSkge1xuICAgICAgbGV0IHsgbm9kZSwgb2Zmc2V0IH0gPSB0aGlzLmNvbXB1dGVOb2RlQW5kT2Zmc2V0KFxuICAgICAgICBhbmNob3Iucm93LFxuICAgICAgICBhbmNob3IuY29sLFxuICAgICAgICBmb2N1cy5yb3cgPT09IGFuY2hvci5yb3cgJiYgZm9jdXMuY29sID4gYW5jaG9yLmNvbFxuICAgICAgKTtcbiAgICAgIGFuY2hvck5vZGUgPSBub2RlO1xuICAgICAgYW5jaG9yT2Zmc2V0ID0gb2Zmc2V0O1xuICAgIH1cblxuICAgIGxldCB3aW5kb3dTZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XG4gICAgd2luZG93U2VsZWN0aW9uIS5zZXRCYXNlQW5kRXh0ZW50KFxuICAgICAgZm9jdXNOb2RlLFxuICAgICAgZm9jdXNPZmZzZXQsXG4gICAgICBhbmNob3JOb2RlIHx8IGZvY3VzTm9kZSxcbiAgICAgIGFuY2hvck5vZGUgPyBhbmNob3JPZmZzZXQhIDogZm9jdXNPZmZzZXRcbiAgICApO1xuICB9XG5cbiAgcHVibGljIHBhc3RlKHRleHQ6IHN0cmluZywgYW5jaG9yOiBQb3NpdGlvbiB8IG51bGwgPSBudWxsLCBmb2N1czogUG9zaXRpb24gfCBudWxsID0gbnVsbCk6IHZvaWQge1xuICAgIGlmICghYW5jaG9yKSBhbmNob3IgPSB0aGlzLmdldFNlbGVjdGlvbih0cnVlKTtcbiAgICBpZiAoIWZvY3VzKSBmb2N1cyA9IHRoaXMuZ2V0U2VsZWN0aW9uKGZhbHNlKTtcbiAgICBsZXQgYmVnaW5uaW5nOiBQb3NpdGlvbiwgZW5kOiBQb3NpdGlvbjtcbiAgICBpZiAoIWZvY3VzKSB7XG4gICAgICBmb2N1cyA9IHtcbiAgICAgICAgcm93OiB0aGlzLmxpbmVzLmxlbmd0aCAtIDEsXG4gICAgICAgIGNvbDogdGhpcy5saW5lc1t0aGlzLmxpbmVzLmxlbmd0aCAtIDFdLmxlbmd0aCxcbiAgICAgIH07XG4gICAgfVxuICAgIGlmICghYW5jaG9yKSB7XG4gICAgICBhbmNob3IgPSBmb2N1cztcbiAgICB9XG4gICAgaWYgKFxuICAgICAgYW5jaG9yLnJvdyA8IGZvY3VzLnJvdyB8fFxuICAgICAgKGFuY2hvci5yb3cgPT09IGZvY3VzLnJvdyAmJiBhbmNob3IuY29sIDw9IGZvY3VzLmNvbClcbiAgICApIHtcbiAgICAgIGJlZ2lubmluZyA9IGFuY2hvcjtcbiAgICAgIGVuZCA9IGZvY3VzO1xuICAgIH0gZWxzZSB7XG4gICAgICBiZWdpbm5pbmcgPSBmb2N1cztcbiAgICAgIGVuZCA9IGFuY2hvcjtcbiAgICB9XG4gICAgbGV0IGluc2VydGVkTGluZXMgPSB0ZXh0LnNwbGl0KC8oPzpcXHJcXG58XFxyfFxcbikvKTtcbiAgICBsZXQgbGluZUJlZm9yZSA9IHRoaXMubGluZXNbYmVnaW5uaW5nLnJvd10uc3Vic3RyKDAsIGJlZ2lubmluZy5jb2wpO1xuICAgIGxldCBsaW5lRW5kID0gdGhpcy5saW5lc1tlbmQucm93XS5zdWJzdHIoZW5kLmNvbCk7XG4gICAgaW5zZXJ0ZWRMaW5lc1swXSA9IGxpbmVCZWZvcmUuY29uY2F0KGluc2VydGVkTGluZXNbMF0pO1xuICAgIGxldCBlbmRDb2xQb3MgPSBpbnNlcnRlZExpbmVzW2luc2VydGVkTGluZXMubGVuZ3RoIC0gMV0ubGVuZ3RoO1xuICAgIGluc2VydGVkTGluZXNbaW5zZXJ0ZWRMaW5lcy5sZW5ndGggLSAxXSA9IGluc2VydGVkTGluZXNbaW5zZXJ0ZWRMaW5lcy5sZW5ndGggLSAxXS5jb25jYXQobGluZUVuZCk7XG4gICAgdGhpcy5zcGxpY2VMaW5lcyhiZWdpbm5pbmcucm93LCAxICsgZW5kLnJvdyAtIGJlZ2lubmluZy5yb3csIGluc2VydGVkTGluZXMpO1xuICAgIGZvY3VzLnJvdyA9IGJlZ2lubmluZy5yb3cgKyBpbnNlcnRlZExpbmVzLmxlbmd0aCAtIDE7XG4gICAgZm9jdXMuY29sID0gZW5kQ29sUG9zO1xuICAgIHRoaXMudXBkYXRlRm9ybWF0dGluZygpO1xuICAgIHRoaXMuc2V0U2VsZWN0aW9uKGZvY3VzKTtcbiAgICB0aGlzLmZpcmVDaGFuZ2UoKTtcbiAgfVxuXG4gIHB1YmxpYyB3cmFwU2VsZWN0aW9uKHByZTogc3RyaW5nLCBwb3N0OiBzdHJpbmcsIGZvY3VzOiBQb3NpdGlvbiB8IG51bGwgPSBudWxsLCBhbmNob3I6IFBvc2l0aW9uIHwgbnVsbCA9IG51bGwpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuaXNSZXN0b3JpbmdIaXN0b3J5KSB0aGlzLnB1c2hIaXN0b3J5KCk7XG4gICAgaWYgKCFmb2N1cykgZm9jdXMgPSB0aGlzLmdldFNlbGVjdGlvbihmYWxzZSk7XG4gICAgaWYgKCFhbmNob3IpIGFuY2hvciA9IHRoaXMuZ2V0U2VsZWN0aW9uKHRydWUpO1xuICAgIGlmICghZm9jdXMgfHwgIWFuY2hvciB8fCBmb2N1cy5yb3cgIT09IGFuY2hvci5yb3cpIHJldHVybjtcbiAgICB0aGlzLmxpbmVEaXJ0eVtmb2N1cy5yb3ddID0gdHJ1ZTtcblxuICAgIGNvbnN0IHN0YXJ0Q29sID0gZm9jdXMuY29sIDwgYW5jaG9yLmNvbCA/IGZvY3VzLmNvbCA6IGFuY2hvci5jb2w7XG4gICAgY29uc3QgZW5kQ29sID0gZm9jdXMuY29sIDwgYW5jaG9yLmNvbCA/IGFuY2hvci5jb2wgOiBmb2N1cy5jb2w7XG4gICAgY29uc3QgbGVmdCA9IHRoaXMubGluZXNbZm9jdXMucm93XS5zdWJzdHIoMCwgc3RhcnRDb2wpLmNvbmNhdChwcmUpO1xuICAgIGNvbnN0IG1pZCA9IGVuZENvbCA9PT0gc3RhcnRDb2wgPyBcIlwiIDogdGhpcy5saW5lc1tmb2N1cy5yb3ddLnN1YnN0cihzdGFydENvbCwgZW5kQ29sIC0gc3RhcnRDb2wpO1xuICAgIGNvbnN0IHJpZ2h0ID0gcG9zdC5jb25jYXQodGhpcy5saW5lc1tmb2N1cy5yb3ddLnN1YnN0cihlbmRDb2wpKTtcbiAgICB0aGlzLmxpbmVzW2ZvY3VzLnJvd10gPSBsZWZ0LmNvbmNhdChtaWQsIHJpZ2h0KTtcbiAgICBhbmNob3IuY29sID0gbGVmdC5sZW5ndGg7XG4gICAgZm9jdXMuY29sID0gYW5jaG9yLmNvbCArIG1pZC5sZW5ndGg7XG5cbiAgICB0aGlzLnVwZGF0ZUZvcm1hdHRpbmcoKTtcbiAgICB0aGlzLnNldFNlbGVjdGlvbihmb2N1cywgYW5jaG9yKTtcbiAgfVxuXG4gIHB1YmxpYyBhZGRFdmVudExpc3RlbmVyPFQgZXh0ZW5kcyBFdmVudFR5cGU+KFxuICAgIHR5cGU6IFQsXG4gICAgbGlzdGVuZXI6IFQgZXh0ZW5kcyAnY2hhbmdlJyA/IEV2ZW50SGFuZGxlcjxDaGFuZ2VFdmVudD4gOlxuICAgICAgICAgICAgIFQgZXh0ZW5kcyAnc2VsZWN0aW9uJyA/IEV2ZW50SGFuZGxlcjxTZWxlY3Rpb25FdmVudD4gOlxuICAgICAgICAgICAgIFQgZXh0ZW5kcyAnZHJvcCcgPyBFdmVudEhhbmRsZXI8RHJvcEV2ZW50PiA6IG5ldmVyXG4gICk6IHZvaWQge1xuICAgIGlmICh0eXBlLm1hdGNoKC9eKD86Y2hhbmdlfGlucHV0KSQvaSkpIHtcbiAgICAgIHRoaXMubGlzdGVuZXJzLmNoYW5nZS5wdXNoKGxpc3RlbmVyIGFzIEV2ZW50SGFuZGxlcjxDaGFuZ2VFdmVudD4pO1xuICAgIH1cbiAgICBpZiAodHlwZS5tYXRjaCgvXig/OnNlbGVjdGlvbnxzZWxlY3Rpb25jaGFuZ2UpJC9pKSkge1xuICAgICAgdGhpcy5saXN0ZW5lcnMuc2VsZWN0aW9uLnB1c2gobGlzdGVuZXIgYXMgRXZlbnRIYW5kbGVyPFNlbGVjdGlvbkV2ZW50Pik7XG4gICAgfVxuICAgIGlmICh0eXBlLm1hdGNoKC9eKD86ZHJvcCkkL2kpKSB7XG4gICAgICB0aGlzLmxpc3RlbmVycy5kcm9wLnB1c2gobGlzdGVuZXIgYXMgRXZlbnRIYW5kbGVyPERyb3BFdmVudD4pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZmlyZUNoYW5nZSgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMudGV4dGFyZWEgJiYgIXRoaXMubGlzdGVuZXJzLmNoYW5nZS5sZW5ndGgpIHJldHVybjtcbiAgICBjb25zdCBjb250ZW50ID0gdGhpcy5nZXRDb250ZW50KCk7XG4gICAgaWYgKHRoaXMudGV4dGFyZWEpIHRoaXMudGV4dGFyZWEudmFsdWUgPSBjb250ZW50O1xuICAgIGZvciAobGV0IGxpc3RlbmVyIG9mIHRoaXMubGlzdGVuZXJzLmNoYW5nZSkge1xuICAgICAgbGlzdGVuZXIoe1xuICAgICAgICBjb250ZW50OiBjb250ZW50LFxuICAgICAgICBsaW5lc0RpcnR5OiBbLi4udGhpcy5saW5lRGlydHldLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVJbnB1dEV2ZW50KGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IGlucHV0RXZlbnQgPSBldmVudCBhcyBJbnB1dEV2ZW50O1xuICAgIGlmIChpbnB1dEV2ZW50LmlucHV0VHlwZSA9PT0gXCJpbnNlcnRDb21wb3NpdGlvblRleHRcIikgcmV0dXJuO1xuICAgIGlmICghdGhpcy5pc1Jlc3RvcmluZ0hpc3RvcnkpIHRoaXMucHVzaEhpc3RvcnkoKTtcblxuICAgIGxldCBmb2N1cyA9IHRoaXMuZ2V0U2VsZWN0aW9uKCk7XG5cbiAgICBpZiAoKGlucHV0RXZlbnQuaW5wdXRUeXBlID09PSBcImluc2VydFBhcmFncmFwaFwiIHx8IGlucHV0RXZlbnQuaW5wdXRUeXBlID09PSBcImluc2VydExpbmVCcmVha1wiKSAmJiBmb2N1cykge1xuICAgICAgdGhpcy5jbGVhckRpcnR5RmxhZygpO1xuICAgICAgdGhpcy5wcm9jZXNzTmV3UGFyYWdyYXBoKGZvY3VzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKCF0aGlzLmUhLmZpcnN0Q2hpbGQpIHtcbiAgICAgICAgdGhpcy5lIS5pbm5lckhUTUwgPSAnPGRpdiBjbGFzcz1cIlRNQmxhbmtMaW5lXCI+PGJyPjwvZGl2Pic7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmZpeE5vZGVIaWVyYXJjaHkoKTtcbiAgICAgIH1cbiAgICAgIHRoaXMudXBkYXRlTGluZUNvbnRlbnRzQW5kRm9ybWF0dGluZygpO1xuICAgIH1cbiAgICBpZiAoZm9jdXMpIHtcbiAgICAgIHRoaXMuc2V0U2VsZWN0aW9uKGZvY3VzKTtcbiAgICB9XG5cbiAgICB0aGlzLmZpcmVDaGFuZ2UoKTtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlU2VsZWN0aW9uQ2hhbmdlRXZlbnQoX2U6IEV2ZW50KTogdm9pZCB7XG4gICAgdGhpcy5maXJlU2VsZWN0aW9uKCk7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZVBhc3RlKGV2ZW50OiBDbGlwYm9hcmRFdmVudCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5pc1Jlc3RvcmluZ0hpc3RvcnkpIHRoaXMucHVzaEhpc3RvcnkoKTtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgbGV0IHRleHQgPSAoZXZlbnQgYXMgYW55KS5jbGlwYm9hcmREYXRhLmdldERhdGEoXCJ0ZXh0L3BsYWluXCIpO1xuICAgIHRoaXMucGFzdGUodGV4dCk7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZURyb3AoZXZlbnQ6IERyYWdFdmVudCk6IHZvaWQge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgdGhpcy5maXJlRHJvcChldmVudC5kYXRhVHJhbnNmZXIhKTtcbiAgfVxuXG4gIHByaXZhdGUgcHJvY2Vzc0lubGluZVN0eWxlcyhvcmlnaW5hbFN0cmluZzogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBsZXQgcHJvY2Vzc2VkID0gXCJcIjtcbiAgICBsZXQgc3RhY2s6IEFycmF5PHtkZWxpbWl0ZXI6IHN0cmluZywgZGVsaW1TdHJpbmc6IHN0cmluZywgY291bnQ6IG51bWJlciwgb3V0cHV0OiBzdHJpbmd9PiA9IFtdO1xuICAgIGxldCBvZmZzZXQgPSAwO1xuICAgIGxldCBzdHJpbmcgPSBvcmlnaW5hbFN0cmluZztcblxuICAgIG91dGVyOiB3aGlsZSAoc3RyaW5nKSB7XG4gICAgICAvLyBQcm9jZXNzIHNpbXBsZSBydWxlcyAobm9uLWRlbGltaXRlcilcbiAgICAgIGZvciAobGV0IHJ1bGUgb2YgW1wiZXNjYXBlXCIsIFwiY29kZVwiLCBcImF1dG9saW5rXCIsIFwiaHRtbFwiXSkge1xuICAgICAgICBsZXQgY2FwID0gaW5saW5lR3JhbW1hcltydWxlXS5yZWdleHAuZXhlYyhzdHJpbmcpO1xuICAgICAgICBpZiAoY2FwKSB7XG4gICAgICAgICAgc3RyaW5nID0gc3RyaW5nLnN1YnN0cihjYXBbMF0ubGVuZ3RoKTtcbiAgICAgICAgICBvZmZzZXQgKz0gY2FwWzBdLmxlbmd0aDtcbiAgICAgICAgICBwcm9jZXNzZWQgKz0gaW5saW5lR3JhbW1hcltydWxlXS5yZXBsYWNlbWVudC5yZXBsYWNlKC9cXCQoWzEtOV0pL2csIChzdHIsIHAxKSA9PiBodG1sZXNjYXBlKGNhcFtwMV0pKTtcbiAgICAgICAgICBjb250aW51ZSBvdXRlcjtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBDaGVjayBmb3IgbGlua3MgLyBpbWFnZXNcbiAgICAgIGxldCBwb3RlbnRpYWxMaW5rID0gc3RyaW5nLm1hdGNoKGlubGluZUdyYW1tYXIubGlua09wZW4ucmVnZXhwKTtcbiAgICAgIGxldCBwb3RlbnRpYWxJbWFnZSA9IHN0cmluZy5tYXRjaChpbmxpbmVHcmFtbWFyLmltYWdlT3Blbi5yZWdleHApO1xuICAgICAgaWYgKHBvdGVudGlhbEltYWdlIHx8IHBvdGVudGlhbExpbmspIHtcbiAgICAgICAgbGV0IHJlc3VsdCA9IHRoaXMucGFyc2VMaW5rT3JJbWFnZShzdHJpbmcsICEhcG90ZW50aWFsSW1hZ2UpO1xuICAgICAgICBpZiAocmVzdWx0KSB7XG4gICAgICAgICAgcHJvY2Vzc2VkID0gYCR7cHJvY2Vzc2VkfSR7cmVzdWx0Lm91dHB1dH1gO1xuICAgICAgICAgIHN0cmluZyA9IHN0cmluZy5zdWJzdHIocmVzdWx0LmNoYXJDb3VudCk7XG4gICAgICAgICAgb2Zmc2V0ICs9IHJlc3VsdC5jaGFyQ291bnQ7XG4gICAgICAgICAgY29udGludWUgb3V0ZXI7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gQ2hlY2sgZm9yIGVtIC8gc3Ryb25nIGRlbGltaXRlcnNcbiAgICAgIGxldCBjYXAgPSAvKF5cXCorKXwoXl8rKS8uZXhlYyhzdHJpbmcpO1xuICAgICAgaWYgKGNhcCkge1xuICAgICAgICBsZXQgZGVsaW1Db3VudCA9IGNhcFswXS5sZW5ndGg7XG4gICAgICAgIGNvbnN0IGRlbGltU3RyaW5nID0gY2FwWzBdO1xuICAgICAgICBjb25zdCBjdXJyZW50RGVsaW1pdGVyID0gY2FwWzBdWzBdO1xuXG4gICAgICAgIHN0cmluZyA9IHN0cmluZy5zdWJzdHIoY2FwWzBdLmxlbmd0aCk7XG5cbiAgICAgICAgY29uc3QgcHJlY2VkaW5nID0gb2Zmc2V0ID4gMCA/IG9yaWdpbmFsU3RyaW5nLnN1YnN0cigwLCBvZmZzZXQpIDogXCIgXCI7XG4gICAgICAgIGNvbnN0IGZvbGxvd2luZyA9IG9mZnNldCArIGNhcFswXS5sZW5ndGggPCBvcmlnaW5hbFN0cmluZy5sZW5ndGggPyBzdHJpbmcgOiBcIiBcIjtcblxuICAgICAgICBjb25zdCBwdW5jdHVhdGlvbkZvbGxvd3MgPSBmb2xsb3dpbmcubWF0Y2gocHVuY3R1YXRpb25MZWFkaW5nKTtcbiAgICAgICAgY29uc3QgcHVuY3R1YXRpb25QcmVjZWRlcyA9IHByZWNlZGluZy5tYXRjaChwdW5jdHVhdGlvblRyYWlsaW5nKTtcbiAgICAgICAgY29uc3Qgd2hpdGVzcGFjZUZvbGxvd3MgPSBmb2xsb3dpbmcubWF0Y2goL15cXHMvKTtcbiAgICAgICAgY29uc3Qgd2hpdGVzcGFjZVByZWNlZGVzID0gcHJlY2VkaW5nLm1hdGNoKC9cXHMkLyk7XG5cbiAgICAgICAgbGV0IGNhbk9wZW4gPSAhd2hpdGVzcGFjZUZvbGxvd3MgJiYgKCFwdW5jdHVhdGlvbkZvbGxvd3MgfHwgISF3aGl0ZXNwYWNlUHJlY2VkZXMgfHwgISFwdW5jdHVhdGlvblByZWNlZGVzKTtcbiAgICAgICAgbGV0IGNhbkNsb3NlID0gIXdoaXRlc3BhY2VQcmVjZWRlcyAmJiAoIXB1bmN0dWF0aW9uUHJlY2VkZXMgfHwgISF3aGl0ZXNwYWNlRm9sbG93cyB8fCAhIXB1bmN0dWF0aW9uRm9sbG93cyk7XG5cbiAgICAgICAgaWYgKGN1cnJlbnREZWxpbWl0ZXIgPT09IFwiX1wiICYmIGNhbk9wZW4gJiYgY2FuQ2xvc2UpIHtcbiAgICAgICAgICBjYW5PcGVuID0gISFwdW5jdHVhdGlvblByZWNlZGVzO1xuICAgICAgICAgIGNhbkNsb3NlID0gISFwdW5jdHVhdGlvbkZvbGxvd3M7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY2FuQ2xvc2UpIHtcbiAgICAgICAgICBsZXQgc3RhY2tQb2ludGVyID0gc3RhY2subGVuZ3RoIC0gMTtcbiAgICAgICAgICB3aGlsZSAoZGVsaW1Db3VudCAmJiBzdGFja1BvaW50ZXIgPj0gMCkge1xuICAgICAgICAgICAgaWYgKHN0YWNrW3N0YWNrUG9pbnRlcl0uZGVsaW1pdGVyID09PSBjdXJyZW50RGVsaW1pdGVyKSB7XG4gICAgICAgICAgICAgIHdoaWxlIChzdGFja1BvaW50ZXIgPCBzdGFjay5sZW5ndGggLSAxKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZW50cnkgPSBzdGFjay5wb3AoKSE7XG4gICAgICAgICAgICAgICAgcHJvY2Vzc2VkID0gYCR7ZW50cnkub3V0cHV0fSR7ZW50cnkuZGVsaW1TdHJpbmcuc3Vic3RyKDAsIGVudHJ5LmNvdW50KX0ke3Byb2Nlc3NlZH1gO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaWYgKGRlbGltQ291bnQgPj0gMiAmJiBzdGFja1tzdGFja1BvaW50ZXJdLmNvdW50ID49IDIpIHtcbiAgICAgICAgICAgICAgICBwcm9jZXNzZWQgPSBgPHNwYW4gY2xhc3M9XCJUTU1hcmtcIj4ke2N1cnJlbnREZWxpbWl0ZXJ9JHtjdXJyZW50RGVsaW1pdGVyfTwvc3Bhbj48c3Ryb25nIGNsYXNzPVwiVE1TdHJvbmdcIj4ke3Byb2Nlc3NlZH08L3N0cm9uZz48c3BhbiBjbGFzcz1cIlRNTWFya1wiPiR7Y3VycmVudERlbGltaXRlcn0ke2N1cnJlbnREZWxpbWl0ZXJ9PC9zcGFuPmA7XG4gICAgICAgICAgICAgICAgZGVsaW1Db3VudCAtPSAyO1xuICAgICAgICAgICAgICAgIHN0YWNrW3N0YWNrUG9pbnRlcl0uY291bnQgLT0gMjtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBwcm9jZXNzZWQgPSBgPHNwYW4gY2xhc3M9XCJUTU1hcmtcIj4ke2N1cnJlbnREZWxpbWl0ZXJ9PC9zcGFuPjxlbSBjbGFzcz1cIlRNRW1cIj4ke3Byb2Nlc3NlZH08L2VtPjxzcGFuIGNsYXNzPVwiVE1NYXJrXCI+JHtjdXJyZW50RGVsaW1pdGVyfTwvc3Bhbj5gO1xuICAgICAgICAgICAgICAgIGRlbGltQ291bnQgLT0gMTtcbiAgICAgICAgICAgICAgICBzdGFja1tzdGFja1BvaW50ZXJdLmNvdW50IC09IDE7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBpZiAoc3RhY2tbc3RhY2tQb2ludGVyXS5jb3VudCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIGxldCBlbnRyeSA9IHN0YWNrLnBvcCgpITtcbiAgICAgICAgICAgICAgICBwcm9jZXNzZWQgPSBgJHtlbnRyeS5vdXRwdXR9JHtwcm9jZXNzZWR9YDtcbiAgICAgICAgICAgICAgICBzdGFja1BvaW50ZXItLTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgc3RhY2tQb2ludGVyLS07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGRlbGltQ291bnQgJiYgY2FuT3Blbikge1xuICAgICAgICAgIHN0YWNrLnB1c2goe1xuICAgICAgICAgICAgZGVsaW1pdGVyOiBjdXJyZW50RGVsaW1pdGVyLFxuICAgICAgICAgICAgZGVsaW1TdHJpbmc6IGRlbGltU3RyaW5nLFxuICAgICAgICAgICAgY291bnQ6IGRlbGltQ291bnQsXG4gICAgICAgICAgICBvdXRwdXQ6IHByb2Nlc3NlZCxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBwcm9jZXNzZWQgPSBcIlwiO1xuICAgICAgICAgIGRlbGltQ291bnQgPSAwO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGRlbGltQ291bnQpIHtcbiAgICAgICAgICBwcm9jZXNzZWQgPSBgJHtwcm9jZXNzZWR9JHtkZWxpbVN0cmluZy5zdWJzdHIoMCwgZGVsaW1Db3VudCl9YDtcbiAgICAgICAgfVxuXG4gICAgICAgIG9mZnNldCArPSBjYXBbMF0ubGVuZ3RoO1xuICAgICAgICBjb250aW51ZSBvdXRlcjtcbiAgICAgIH1cblxuICAgICAgLy8gQ2hlY2sgZm9yIHN0cmlrZXRocm91Z2ggZGVsaW1pdGVyXG4gICAgICBjYXAgPSAvXn5+Ly5leGVjKHN0cmluZyk7XG4gICAgICBpZiAoY2FwKSB7XG4gICAgICAgIGxldCBjb25zdW1lZCA9IGZhbHNlO1xuICAgICAgICBsZXQgc3RhY2tQb2ludGVyID0gc3RhY2subGVuZ3RoIC0gMTtcbiAgICAgICAgd2hpbGUgKCFjb25zdW1lZCAmJiBzdGFja1BvaW50ZXIgPj0gMCkge1xuICAgICAgICAgIGlmIChzdGFja1tzdGFja1BvaW50ZXJdLmRlbGltaXRlciA9PT0gXCJ+XCIpIHtcbiAgICAgICAgICAgIHdoaWxlIChzdGFja1BvaW50ZXIgPCBzdGFjay5sZW5ndGggLSAxKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGVudHJ5ID0gc3RhY2sucG9wKCkhO1xuICAgICAgICAgICAgICBwcm9jZXNzZWQgPSBgJHtlbnRyeS5vdXRwdXR9JHtlbnRyeS5kZWxpbVN0cmluZy5zdWJzdHIoMCwgZW50cnkuY291bnQpfSR7cHJvY2Vzc2VkfWA7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHByb2Nlc3NlZCA9IGA8c3BhbiBjbGFzcz1cIlRNTWFya1wiPn5+PC9zcGFuPjxkZWwgY2xhc3M9XCJUTVN0cmlrZXRocm91Z2hcIj4ke3Byb2Nlc3NlZH08L2RlbD48c3BhbiBjbGFzcz1cIlRNTWFya1wiPn5+PC9zcGFuPmA7XG4gICAgICAgICAgICBsZXQgZW50cnkgPSBzdGFjay5wb3AoKSE7XG4gICAgICAgICAgICBwcm9jZXNzZWQgPSBgJHtlbnRyeS5vdXRwdXR9JHtwcm9jZXNzZWR9YDtcbiAgICAgICAgICAgIGNvbnN1bWVkID0gdHJ1ZTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc3RhY2tQb2ludGVyLS07XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFjb25zdW1lZCkge1xuICAgICAgICAgIHN0YWNrLnB1c2goe1xuICAgICAgICAgICAgZGVsaW1pdGVyOiBcIn5cIixcbiAgICAgICAgICAgIGRlbGltU3RyaW5nOiBcIn5+XCIsXG4gICAgICAgICAgICBjb3VudDogMixcbiAgICAgICAgICAgIG91dHB1dDogcHJvY2Vzc2VkLFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHByb2Nlc3NlZCA9IFwiXCI7XG4gICAgICAgIH1cblxuICAgICAgICBvZmZzZXQgKz0gY2FwWzBdLmxlbmd0aDtcbiAgICAgICAgc3RyaW5nID0gc3RyaW5nLnN1YnN0cihjYXBbMF0ubGVuZ3RoKTtcbiAgICAgICAgY29udGludWUgb3V0ZXI7XG4gICAgICB9XG5cbiAgICAgIC8vIFByb2Nlc3MgJ2RlZmF1bHQnIHJ1bGVcbiAgICAgIGNhcCA9IGlubGluZUdyYW1tYXIuZGVmYXVsdC5yZWdleHAuZXhlYyhzdHJpbmcpO1xuICAgICAgaWYgKGNhcCkge1xuICAgICAgICBzdHJpbmcgPSBzdHJpbmcuc3Vic3RyKGNhcFswXS5sZW5ndGgpO1xuICAgICAgICBvZmZzZXQgKz0gY2FwWzBdLmxlbmd0aDtcbiAgICAgICAgcHJvY2Vzc2VkICs9IGlubGluZUdyYW1tYXIuZGVmYXVsdC5yZXBsYWNlbWVudC5yZXBsYWNlKC9cXCQoWzEtOV0pL2csIChzdHIsIHAxKSA9PiBodG1sZXNjYXBlKGNhcFtwMV0pKTtcbiAgICAgICAgY29udGludWUgb3V0ZXI7XG4gICAgICB9XG4gICAgICB0aHJvdyBcIkluZmluaXRlIGxvb3AhXCI7XG4gICAgfVxuXG4gICAgd2hpbGUgKHN0YWNrLmxlbmd0aCkge1xuICAgICAgY29uc3QgZW50cnkgPSBzdGFjay5wb3AoKSE7XG4gICAgICBwcm9jZXNzZWQgPSBgJHtlbnRyeS5vdXRwdXR9JHtlbnRyeS5kZWxpbVN0cmluZy5zdWJzdHIoMCwgZW50cnkuY291bnQpfSR7cHJvY2Vzc2VkfWA7XG4gICAgfVxuXG4gICAgcmV0dXJuIHByb2Nlc3NlZDtcbiAgfVxuXG4gIHByaXZhdGUgY29tcHV0ZUNvbHVtbihzdGFydE5vZGU6IE5vZGUsIG9mZnNldDogbnVtYmVyKTogbnVtYmVyIHwgbnVsbCB7XG4gICAgbGV0IG5vZGUgPSBzdGFydE5vZGU7XG4gICAgbGV0IGNvbDogbnVtYmVyO1xuICAgIHdoaWxlIChub2RlICYmIG5vZGUucGFyZW50Tm9kZSAhPT0gdGhpcy5lKSB7XG4gICAgICBub2RlID0gbm9kZS5wYXJlbnROb2RlITtcbiAgICB9XG4gICAgaWYgKG5vZGUgPT09IG51bGwpIHJldHVybiBudWxsO1xuXG4gICAgaWYgKHN0YXJ0Tm9kZS5ub2RlVHlwZSA9PT0gTm9kZS5URVhUX05PREUgfHwgb2Zmc2V0ID09PSAwKSB7XG4gICAgICBjb2wgPSBvZmZzZXQ7XG4gICAgICBub2RlID0gc3RhcnROb2RlO1xuICAgIH0gZWxzZSBpZiAob2Zmc2V0ID4gMCkge1xuICAgICAgbm9kZSA9IHN0YXJ0Tm9kZS5jaGlsZE5vZGVzW29mZnNldCAtIDFdO1xuICAgICAgY29sID0gbm9kZS50ZXh0Q29udGVudCEubGVuZ3RoO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb2wgPSAwO1xuICAgICAgbm9kZSA9IHN0YXJ0Tm9kZTtcbiAgICB9XG4gICAgd2hpbGUgKG5vZGUucGFyZW50Tm9kZSAhPT0gdGhpcy5lKSB7XG4gICAgICBpZiAobm9kZS5wcmV2aW91c1NpYmxpbmcpIHtcbiAgICAgICAgbm9kZSA9IG5vZGUucHJldmlvdXNTaWJsaW5nO1xuICAgICAgICBjb2wgKz0gbm9kZS50ZXh0Q29udGVudCEubGVuZ3RoO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbm9kZSA9IG5vZGUucGFyZW50Tm9kZSBhcyB1bmtub3duIGFzIENoaWxkTm9kZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGNvbDtcbiAgfVxuXG4gIHByaXZhdGUgY29tcHV0ZU5vZGVBbmRPZmZzZXQocm93OiBudW1iZXIsIGNvbDogbnVtYmVyLCBiaW5kUmlnaHQ6IGJvb2xlYW4gPSBmYWxzZSk6IHtub2RlOiBOb2RlLCBvZmZzZXQ6IG51bWJlcn0ge1xuICAgIGlmIChyb3cgPj0gdGhpcy5saW5lRWxlbWVudHMubGVuZ3RoKSB7XG4gICAgICByb3cgPSB0aGlzLmxpbmVFbGVtZW50cy5sZW5ndGggLSAxO1xuICAgICAgY29sID0gdGhpcy5saW5lc1tyb3ddLmxlbmd0aDtcbiAgICB9XG4gICAgaWYgKGNvbCA+IHRoaXMubGluZXNbcm93XS5sZW5ndGgpIHtcbiAgICAgIGNvbCA9IHRoaXMubGluZXNbcm93XS5sZW5ndGg7XG4gICAgfVxuICAgIGNvbnN0IHBhcmVudE5vZGUgPSB0aGlzLmxpbmVFbGVtZW50c1tyb3ddIGFzIEhUTUxFbGVtZW50O1xuICAgIGxldCBub2RlID0gcGFyZW50Tm9kZS5maXJzdENoaWxkO1xuXG4gICAgbGV0IGNoaWxkcmVuQ29tcGxldGUgPSBmYWxzZTtcbiAgICBsZXQgcnYgPSB7XG4gICAgICBub2RlOiBwYXJlbnROb2RlLmZpcnN0Q2hpbGQgPyBwYXJlbnROb2RlLmZpcnN0Q2hpbGQgOiBwYXJlbnROb2RlLFxuICAgICAgb2Zmc2V0OiAwLFxuICAgIH07XG5cbiAgICB3aGlsZSAobm9kZSAhPT0gcGFyZW50Tm9kZSkge1xuICAgICAgaWYgKCFjaGlsZHJlbkNvbXBsZXRlICYmIG5vZGUhLm5vZGVUeXBlID09PSBOb2RlLlRFWFRfTk9ERSkge1xuICAgICAgICBpZiAobm9kZSEubm9kZVZhbHVlIS5sZW5ndGggPj0gY29sKSB7XG4gICAgICAgICAgaWYgKGJpbmRSaWdodCAmJiBub2RlIS5ub2RlVmFsdWUhLmxlbmd0aCA9PT0gY29sKSB7XG4gICAgICAgICAgICBydiA9IHsgbm9kZTogbm9kZSEsIG9mZnNldDogY29sIH07XG4gICAgICAgICAgICBjb2wgPSAwO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4geyBub2RlOiBub2RlISwgb2Zmc2V0OiBjb2wgfTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29sIC09IG5vZGUhLm5vZGVWYWx1ZSEubGVuZ3RoO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoIWNoaWxkcmVuQ29tcGxldGUgJiYgbm9kZSEuZmlyc3RDaGlsZCkge1xuICAgICAgICBub2RlID0gbm9kZSEuZmlyc3RDaGlsZDtcbiAgICAgIH0gZWxzZSBpZiAobm9kZSEubmV4dFNpYmxpbmcpIHtcbiAgICAgICAgY2hpbGRyZW5Db21wbGV0ZSA9IGZhbHNlO1xuICAgICAgICBub2RlID0gbm9kZSEubmV4dFNpYmxpbmc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjaGlsZHJlbkNvbXBsZXRlID0gdHJ1ZTtcbiAgICAgICAgbm9kZSA9IG5vZGUhLnBhcmVudE5vZGUgYXMgdW5rbm93biBhcyBDaGlsZE5vZGU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHJ2O1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVMaW5lQ29udGVudHNBbmRGb3JtYXR0aW5nKCk6IHZvaWQge1xuICAgIHRoaXMuY2xlYXJEaXJ0eUZsYWcoKTtcbiAgICB0aGlzLnVwZGF0ZUxpbmVDb250ZW50cygpO1xuICAgIHRoaXMudXBkYXRlRm9ybWF0dGluZygpO1xuICB9XG5cbiAgcHJpdmF0ZSBjbGVhckRpcnR5RmxhZygpOiB2b2lkIHtcbiAgICB0aGlzLmxpbmVEaXJ0eSA9IG5ldyBBcnJheSh0aGlzLmxpbmVzLmxlbmd0aCk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmxpbmVEaXJ0eS5sZW5ndGg7IGkrKykge1xuICAgICAgdGhpcy5saW5lRGlydHlbaV0gPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZUxpbmVDb250ZW50cygpOiB2b2lkIHtcbiAgICBsZXQgbGluZURlbHRhID0gdGhpcy5lIS5jaGlsZEVsZW1lbnRDb3VudCAtIHRoaXMubGluZXMubGVuZ3RoO1xuICAgIGlmIChsaW5lRGVsdGEpIHtcbiAgICAgIGxldCBmaXJzdENoYW5nZWRMaW5lID0gMDtcbiAgICAgIHdoaWxlIChcbiAgICAgICAgZmlyc3RDaGFuZ2VkTGluZSA8PSB0aGlzLmxpbmVzLmxlbmd0aCAmJlxuICAgICAgICBmaXJzdENoYW5nZWRMaW5lIDw9IHRoaXMubGluZUVsZW1lbnRzLmxlbmd0aCAmJlxuICAgICAgICB0aGlzLmxpbmVFbGVtZW50c1tmaXJzdENoYW5nZWRMaW5lXSAmJlxuICAgICAgICB0aGlzLmxpbmVzW2ZpcnN0Q2hhbmdlZExpbmVdID09PSAodGhpcy5saW5lRWxlbWVudHNbZmlyc3RDaGFuZ2VkTGluZV0gYXMgSFRNTEVsZW1lbnQpLnRleHRDb250ZW50ICYmXG4gICAgICAgIHRoaXMubGluZVR5cGVzW2ZpcnN0Q2hhbmdlZExpbmVdID09PSAodGhpcy5saW5lRWxlbWVudHNbZmlyc3RDaGFuZ2VkTGluZV0gYXMgSFRNTEVsZW1lbnQpLmNsYXNzTmFtZVxuICAgICAgKSB7XG4gICAgICAgIGZpcnN0Q2hhbmdlZExpbmUrKztcbiAgICAgIH1cblxuICAgICAgbGV0IGxhc3RDaGFuZ2VkTGluZSA9IC0xO1xuICAgICAgd2hpbGUgKFxuICAgICAgICAtbGFzdENoYW5nZWRMaW5lIDwgdGhpcy5saW5lcy5sZW5ndGggJiZcbiAgICAgICAgLWxhc3RDaGFuZ2VkTGluZSA8IHRoaXMubGluZUVsZW1lbnRzLmxlbmd0aCAmJlxuICAgICAgICB0aGlzLmxpbmVzW3RoaXMubGluZXMubGVuZ3RoICsgbGFzdENoYW5nZWRMaW5lXSA9PT1cbiAgICAgICAgICAodGhpcy5saW5lRWxlbWVudHNbdGhpcy5saW5lRWxlbWVudHMubGVuZ3RoICsgbGFzdENoYW5nZWRMaW5lXSBhcyBIVE1MRWxlbWVudCkudGV4dENvbnRlbnQgJiZcbiAgICAgICAgdGhpcy5saW5lVHlwZXNbdGhpcy5saW5lcy5sZW5ndGggKyBsYXN0Q2hhbmdlZExpbmVdID09PVxuICAgICAgICAgICh0aGlzLmxpbmVFbGVtZW50c1t0aGlzLmxpbmVFbGVtZW50cy5sZW5ndGggKyBsYXN0Q2hhbmdlZExpbmVdIGFzIEhUTUxFbGVtZW50KS5jbGFzc05hbWVcbiAgICAgICkge1xuICAgICAgICBsYXN0Q2hhbmdlZExpbmUtLTtcbiAgICAgIH1cblxuICAgICAgbGV0IGxpbmVzVG9EZWxldGUgPSB0aGlzLmxpbmVzLmxlbmd0aCArIGxhc3RDaGFuZ2VkTGluZSArIDEgLSBmaXJzdENoYW5nZWRMaW5lO1xuICAgICAgaWYgKGxpbmVzVG9EZWxldGUgPCAtbGluZURlbHRhKSBsaW5lc1RvRGVsZXRlID0gLWxpbmVEZWx0YTtcbiAgICAgIGlmIChsaW5lc1RvRGVsZXRlIDwgMCkgbGluZXNUb0RlbGV0ZSA9IDA7XG5cbiAgICAgIGxldCBsaW5lc1RvQWRkID0gW107XG4gICAgICBmb3IgKGxldCBsID0gMDsgbCA8IGxpbmVzVG9EZWxldGUgKyBsaW5lRGVsdGE7IGwrKykge1xuICAgICAgICBsaW5lc1RvQWRkLnB1c2goKHRoaXMubGluZUVsZW1lbnRzW2ZpcnN0Q2hhbmdlZExpbmUgKyBsXSBhcyBIVE1MRWxlbWVudCkudGV4dENvbnRlbnQgfHwgXCJcIik7XG4gICAgICB9XG4gICAgICB0aGlzLnNwbGljZUxpbmVzKGZpcnN0Q2hhbmdlZExpbmUsIGxpbmVzVG9EZWxldGUsIGxpbmVzVG9BZGQsIGZhbHNlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZm9yIChsZXQgbGluZSA9IDA7IGxpbmUgPCB0aGlzLmxpbmVFbGVtZW50cy5sZW5ndGg7IGxpbmUrKykge1xuICAgICAgICBsZXQgZSA9IHRoaXMubGluZUVsZW1lbnRzW2xpbmVdIGFzIEhUTUxFbGVtZW50O1xuICAgICAgICBsZXQgY3QgPSBlLnRleHRDb250ZW50IHx8IFwiXCI7XG4gICAgICAgIGlmICh0aGlzLmxpbmVzW2xpbmVdICE9PSBjdCB8fCB0aGlzLmxpbmVUeXBlc1tsaW5lXSAhPT0gZS5jbGFzc05hbWUpIHtcbiAgICAgICAgICB0aGlzLmxpbmVzW2xpbmVdID0gY3Q7XG4gICAgICAgICAgdGhpcy5saW5lVHlwZXNbbGluZV0gPSBlLmNsYXNzTmFtZTtcbiAgICAgICAgICB0aGlzLmxpbmVEaXJ0eVtsaW5lXSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHByb2Nlc3NOZXdQYXJhZ3JhcGgoc2VsOiBQb3NpdGlvbik6IHZvaWQge1xuICAgIGlmICghc2VsKSByZXR1cm47XG5cbiAgICB0aGlzLnVwZGF0ZUxpbmVDb250ZW50cygpO1xuXG4gICAgbGV0IGNvbnRpbnVhYmxlVHlwZTogc3RyaW5nIHwgZmFsc2UgPSBmYWxzZTtcbiAgICBsZXQgY2hlY2tMaW5lID0gc2VsLmNvbCA+IDAgPyBzZWwucm93IDogc2VsLnJvdyAtIDE7XG4gICAgc3dpdGNoICh0aGlzLmxpbmVUeXBlc1tjaGVja0xpbmVdKSB7XG4gICAgICBjYXNlIFwiVE1VTFwiOlxuICAgICAgICBjb250aW51YWJsZVR5cGUgPSBcIlRNVUxcIjtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwiVE1PTFwiOlxuICAgICAgICBjb250aW51YWJsZVR5cGUgPSBcIlRNT0xcIjtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwiVE1JbmRlbnRlZENvZGVcIjpcbiAgICAgICAgY29udGludWFibGVUeXBlID0gXCJUTUluZGVudGVkQ29kZVwiO1xuICAgICAgICBicmVhaztcbiAgICB9XG5cbiAgICBsZXQgbGluZXMgPSB0aGlzLmxpbmVzW3NlbC5yb3ddLnJlcGxhY2UoL1xcblxcbiQvLCBcIlxcblwiKS5zcGxpdCgvKD86XFxyXFxufFxcbnxcXHIpLyk7XG4gICAgaWYgKGxpbmVzLmxlbmd0aCA+IDEpIHtcbiAgICAgIHRoaXMuc3BsaWNlTGluZXMoc2VsLnJvdywgMSwgbGluZXMsIHRydWUpO1xuICAgICAgc2VsLnJvdysrO1xuICAgICAgc2VsLmNvbCA9IDA7XG4gICAgfVxuXG4gICAgaWYgKGNvbnRpbnVhYmxlVHlwZSkge1xuICAgICAgbGV0IGNhcHR1cmUgPSBsaW5lR3JhbW1hcltjb250aW51YWJsZVR5cGVdLnJlZ2V4cC5leGVjKHRoaXMubGluZXNbc2VsLnJvdyAtIDFdKTtcbiAgICAgIGlmIChjYXB0dXJlKSB7XG4gICAgICAgIGlmIChjYXB0dXJlWzJdKSB7XG4gICAgICAgICAgaWYgKGNvbnRpbnVhYmxlVHlwZSA9PT0gXCJUTU9MXCIpIHtcbiAgICAgICAgICAgIGNhcHR1cmVbMV0gPSBjYXB0dXJlWzFdLnJlcGxhY2UoL1xcZHsxLDl9LywgKHJlc3VsdCkgPT4ge1xuICAgICAgICAgICAgICByZXR1cm4gKHBhcnNlSW50KHJlc3VsdCkgKyAxKS50b1N0cmluZygpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMubGluZXNbc2VsLnJvd10gPSBgJHtjYXB0dXJlWzFdfSR7dGhpcy5saW5lc1tzZWwucm93XX1gO1xuICAgICAgICAgIHRoaXMubGluZURpcnR5W3NlbC5yb3ddID0gdHJ1ZTtcbiAgICAgICAgICBzZWwuY29sID0gY2FwdHVyZVsxXS5sZW5ndGg7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5saW5lc1tzZWwucm93IC0gMV0gPSBcIlwiO1xuICAgICAgICAgIHRoaXMubGluZURpcnR5W3NlbC5yb3cgLSAxXSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy51cGRhdGVGb3JtYXR0aW5nKCk7XG4gIH1cblxuICBwcml2YXRlIHNwbGljZUxpbmVzKFxuICAgIHN0YXJ0TGluZTogbnVtYmVyLFxuICAgIGxpbmVzVG9EZWxldGU6IG51bWJlciA9IDAsXG4gICAgbGluZXNUb0luc2VydDogc3RyaW5nW10gPSBbXSxcbiAgICBhZGp1c3RMaW5lRWxlbWVudHM6IGJvb2xlYW4gPSB0cnVlXG4gICk6IHZvaWQge1xuICAgIGlmIChhZGp1c3RMaW5lRWxlbWVudHMpIHtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGluZXNUb0RlbGV0ZTsgaSsrKSB7XG4gICAgICAgIHRoaXMuZSEucmVtb3ZlQ2hpbGQodGhpcy5lIS5jaGlsZE5vZGVzW3N0YXJ0TGluZV0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIGxldCBpbnNlcnRlZEJsYW5rID0gW107XG4gICAgbGV0IGluc2VydGVkRGlydHkgPSBbXTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGluZXNUb0luc2VydC5sZW5ndGg7IGkrKykge1xuICAgICAgaW5zZXJ0ZWRCbGFuay5wdXNoKFwiXCIpO1xuICAgICAgaW5zZXJ0ZWREaXJ0eS5wdXNoKHRydWUpO1xuICAgICAgaWYgKGFkanVzdExpbmVFbGVtZW50cykge1xuICAgICAgICBpZiAodGhpcy5lIS5jaGlsZE5vZGVzW3N0YXJ0TGluZV0pXG4gICAgICAgICAgdGhpcy5lIS5pbnNlcnRCZWZvcmUoZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKSwgdGhpcy5lIS5jaGlsZE5vZGVzW3N0YXJ0TGluZV0pO1xuICAgICAgICBlbHNlIHRoaXMuZSEuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5saW5lcy5zcGxpY2Uoc3RhcnRMaW5lLCBsaW5lc1RvRGVsZXRlLCAuLi5saW5lc1RvSW5zZXJ0KTtcbiAgICB0aGlzLmxpbmVUeXBlcy5zcGxpY2Uoc3RhcnRMaW5lLCBsaW5lc1RvRGVsZXRlLCAuLi5pbnNlcnRlZEJsYW5rKTtcbiAgICB0aGlzLmxpbmVEaXJ0eS5zcGxpY2Uoc3RhcnRMaW5lLCBsaW5lc1RvRGVsZXRlLCAuLi5pbnNlcnRlZERpcnR5KTtcbiAgfVxuXG4gIHByaXZhdGUgZml4Tm9kZUhpZXJhcmNoeSgpOiB2b2lkIHtcbiAgICBjb25zdCBvcmlnaW5hbENoaWxkcmVuID0gQXJyYXkuZnJvbSh0aGlzLmUhLmNoaWxkTm9kZXMpO1xuXG4gICAgY29uc3QgcmVwbGFjZUNoaWxkID0gKGNoaWxkOiBOb2RlLCAuLi5uZXdDaGlsZHJlbjogTm9kZVtdKSA9PiB7XG4gICAgICBjb25zdCBwYXJlbnQgPSBjaGlsZC5wYXJlbnRFbGVtZW50ITtcbiAgICAgIGNvbnN0IG5leHRTaWJsaW5nID0gY2hpbGQubmV4dFNpYmxpbmc7XG4gICAgICBwYXJlbnQucmVtb3ZlQ2hpbGQoY2hpbGQpO1xuICAgICAgbmV3Q2hpbGRyZW4uZm9yRWFjaCgobmV3Q2hpbGQpID0+XG4gICAgICAgIG5leHRTaWJsaW5nID8gcGFyZW50Lmluc2VydEJlZm9yZShuZXdDaGlsZCwgbmV4dFNpYmxpbmcpIDogcGFyZW50LmFwcGVuZENoaWxkKG5ld0NoaWxkKVxuICAgICAgKTtcbiAgICB9O1xuXG4gICAgb3JpZ2luYWxDaGlsZHJlbi5mb3JFYWNoKChjaGlsZCkgPT4ge1xuICAgICAgaWYgKGNoaWxkLm5vZGVUeXBlICE9PSBOb2RlLkVMRU1FTlRfTk9ERSB8fCAoY2hpbGQgYXMgSFRNTEVsZW1lbnQpLnRhZ05hbWUgIT09IFwiRElWXCIpIHtcbiAgICAgICAgY29uc3QgZGl2V3JhcHBlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgICAgIHJlcGxhY2VDaGlsZChjaGlsZCwgZGl2V3JhcHBlcik7XG4gICAgICAgIGRpdldyYXBwZXIuYXBwZW5kQ2hpbGQoY2hpbGQpO1xuICAgICAgfSBlbHNlIGlmIChjaGlsZC5jaGlsZE5vZGVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBjaGlsZC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiYnJcIikpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgZ3JhbmRDaGlsZHJlbiA9IEFycmF5LmZyb20oY2hpbGQuY2hpbGROb2Rlcyk7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBncmFuZENoaWxkcmVuLnNvbWUoXG4gICAgICAgICAgICAoZ3JhbmRDaGlsZCkgPT5cbiAgICAgICAgICAgICAgZ3JhbmRDaGlsZC5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREUgJiYgKGdyYW5kQ2hpbGQgYXMgSFRNTEVsZW1lbnQpLnRhZ05hbWUgPT09IFwiRElWXCJcbiAgICAgICAgICApXG4gICAgICAgICkge1xuICAgICAgICAgIHJldHVybiByZXBsYWNlQ2hpbGQoY2hpbGQsIC4uLmdyYW5kQ2hpbGRyZW4pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHBhcnNlTGlua09ySW1hZ2Uob3JpZ2luYWxTdHJpbmc6IHN0cmluZywgaXNJbWFnZTogYm9vbGVhbik6IHtvdXRwdXQ6IHN0cmluZywgY2hhckNvdW50OiBudW1iZXJ9IHwgZmFsc2Uge1xuICAgIC8vIFNraXAgdGhlIG9wZW5pbmcgYnJhY2tldFxuICAgIGxldCB0ZXh0T2Zmc2V0ID0gaXNJbWFnZSA/IDIgOiAxO1xuICAgIGxldCBvcGVuZXIgPSBvcmlnaW5hbFN0cmluZy5zdWJzdHIoMCwgdGV4dE9mZnNldCk7XG4gICAgbGV0IHR5cGUgPSBpc0ltYWdlID8gXCJUTUltYWdlXCIgOiBcIlRNTGlua1wiO1xuICAgIGxldCBjdXJyZW50T2Zmc2V0ID0gdGV4dE9mZnNldDtcblxuICAgIGxldCBicmFja2V0TGV2ZWwgPSAxO1xuICAgIGxldCBsaW5rVGV4dDogc3RyaW5nIHwgZmFsc2UgPSBmYWxzZTtcbiAgICBsZXQgbGlua1JlZjogc3RyaW5nIHwgZmFsc2UgPSBmYWxzZTtcbiAgICBsZXQgbGlua0xhYmVsOiBzdHJpbmdbXSA9IFtdO1xuICAgIGxldCBsaW5rRGV0YWlsczogc3RyaW5nW10gPSBbXTtcblxuICAgIHRleHRPdXRlcjogd2hpbGUgKFxuICAgICAgY3VycmVudE9mZnNldCA8IG9yaWdpbmFsU3RyaW5nLmxlbmd0aCAmJlxuICAgICAgbGlua1RleHQgPT09IGZhbHNlXG4gICAgKSB7XG4gICAgICBsZXQgc3RyaW5nID0gb3JpZ2luYWxTdHJpbmcuc3Vic3RyKGN1cnJlbnRPZmZzZXQpO1xuXG4gICAgICAvLyBDYXB0dXJlIGFueSBlc2NhcGVzIGFuZCBjb2RlIGJsb2NrcyBhdCBjdXJyZW50IHBvc2l0aW9uXG4gICAgICBmb3IgKGxldCBydWxlIG9mIFtcImVzY2FwZVwiLCBcImNvZGVcIiwgXCJhdXRvbGlua1wiLCBcImh0bWxcIl0pIHtcbiAgICAgICAgbGV0IGNhcCA9IGlubGluZUdyYW1tYXJbcnVsZV0ucmVnZXhwLmV4ZWMoc3RyaW5nKTtcbiAgICAgICAgaWYgKGNhcCkge1xuICAgICAgICAgIGN1cnJlbnRPZmZzZXQgKz0gY2FwWzBdLmxlbmd0aDtcbiAgICAgICAgICBjb250aW51ZSB0ZXh0T3V0ZXI7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gQ2hlY2sgZm9yIGltYWdlXG4gICAgICBpZiAoc3RyaW5nLm1hdGNoKGlubGluZUdyYW1tYXIuaW1hZ2VPcGVuLnJlZ2V4cCkpIHtcbiAgICAgICAgYnJhY2tldExldmVsKys7XG4gICAgICAgIGN1cnJlbnRPZmZzZXQgKz0gMjtcbiAgICAgICAgY29udGludWUgdGV4dE91dGVyO1xuICAgICAgfVxuXG4gICAgICAvLyBDaGVjayBmb3IgbGlua1xuICAgICAgaWYgKHN0cmluZy5tYXRjaChpbmxpbmVHcmFtbWFyLmxpbmtPcGVuLnJlZ2V4cCkpIHtcbiAgICAgICAgYnJhY2tldExldmVsKys7XG4gICAgICAgIGlmICghaXNJbWFnZSkge1xuICAgICAgICAgIGlmICh0aGlzLnBhcnNlTGlua09ySW1hZ2Uoc3RyaW5nLCBmYWxzZSkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY3VycmVudE9mZnNldCArPSAxO1xuICAgICAgICBjb250aW51ZSB0ZXh0T3V0ZXI7XG4gICAgICB9XG5cbiAgICAgIC8vIENoZWNrIGZvciBjbG9zaW5nIGJyYWNrZXRcbiAgICAgIGlmIChzdHJpbmcubWF0Y2goL15cXF0vKSkge1xuICAgICAgICBicmFja2V0TGV2ZWwtLTtcbiAgICAgICAgaWYgKGJyYWNrZXRMZXZlbCA9PT0gMCkge1xuICAgICAgICAgIGxpbmtUZXh0ID0gb3JpZ2luYWxTdHJpbmcuc3Vic3RyKHRleHRPZmZzZXQsIGN1cnJlbnRPZmZzZXQgLSB0ZXh0T2Zmc2V0KTtcbiAgICAgICAgICBjdXJyZW50T2Zmc2V0Kys7XG4gICAgICAgICAgY29udGludWUgdGV4dE91dGVyO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIE5vdGhpbmcgbWF0Y2hlcywgcHJvY2VlZCB0byBuZXh0IGNoYXJcbiAgICAgIGN1cnJlbnRPZmZzZXQrKztcbiAgICB9XG5cbiAgICAvLyBEaWQgd2UgZmluZCBhIGxpbmsgdGV4dD9cbiAgICBpZiAobGlua1RleHQgPT09IGZhbHNlKSByZXR1cm4gZmFsc2U7XG5cbiAgICAvLyBDaGVjayB3aGF0IHR5cGUgb2YgbGluayB0aGlzIGlzXG4gICAgbGV0IG5leHRDaGFyID0gY3VycmVudE9mZnNldCA8IG9yaWdpbmFsU3RyaW5nLmxlbmd0aCA/IG9yaWdpbmFsU3RyaW5nLnN1YnN0cihjdXJyZW50T2Zmc2V0LCAxKSA6IFwiXCI7XG5cbiAgICAvLyBSRUZFUkVOQ0UgTElOS1NcbiAgICBpZiAobmV4dENoYXIgPT09IFwiW1wiKSB7XG4gICAgICBsZXQgc3RyaW5nID0gb3JpZ2luYWxTdHJpbmcuc3Vic3RyKGN1cnJlbnRPZmZzZXQpO1xuICAgICAgbGV0IGNhcCA9IGlubGluZUdyYW1tYXIubGlua0xhYmVsLnJlZ2V4cC5leGVjKHN0cmluZyk7XG4gICAgICBpZiAoY2FwKSB7XG4gICAgICAgIGN1cnJlbnRPZmZzZXQgKz0gY2FwWzBdLmxlbmd0aDtcbiAgICAgICAgbGlua0xhYmVsLnB1c2goY2FwWzFdLCBjYXBbMl0sIGNhcFszXSk7XG4gICAgICAgIGlmIChjYXBbaW5saW5lR3JhbW1hci5saW5rTGFiZWwubGFiZWxQbGFjZWhvbGRlciFdKSB7XG4gICAgICAgICAgbGlua1JlZiA9IGNhcFtpbmxpbmVHcmFtbWFyLmxpbmtMYWJlbC5sYWJlbFBsYWNlaG9sZGVyIV07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbGlua1JlZiA9IGxpbmtUZXh0LnRyaW0oKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAobmV4dENoYXIgIT09IFwiKFwiKSB7XG4gICAgICAvLyBTaG9ydGN1dCByZWYgbGlua1xuICAgICAgbGlua1JlZiA9IGxpbmtUZXh0LnRyaW0oKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gSU5MSU5FIExJTktTXG4gICAgICBjdXJyZW50T2Zmc2V0Kys7XG4gICAgICBsZXQgcGFyZW50aGVzaXNMZXZlbCA9IDE7XG5cbiAgICAgIGlubGluZU91dGVyOiB3aGlsZSAoY3VycmVudE9mZnNldCA8IG9yaWdpbmFsU3RyaW5nLmxlbmd0aCAmJiBwYXJlbnRoZXNpc0xldmVsID4gMCkge1xuICAgICAgICBsZXQgc3RyaW5nID0gb3JpZ2luYWxTdHJpbmcuc3Vic3RyKGN1cnJlbnRPZmZzZXQpO1xuXG4gICAgICAgIC8vIFByb2Nlc3Mgd2hpdGVzcGFjZVxuICAgICAgICBsZXQgY2FwID0gL15cXHMrLy5leGVjKHN0cmluZyk7XG4gICAgICAgIGlmIChjYXApIHtcbiAgICAgICAgICBzd2l0Y2ggKGxpbmtEZXRhaWxzLmxlbmd0aCkge1xuICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICBsaW5rRGV0YWlscy5wdXNoKGNhcFswXSk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICBsaW5rRGV0YWlscy5wdXNoKGNhcFswXSk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICBpZiAobGlua0RldGFpbHNbMF0ubWF0Y2goLzwvKSkge1xuICAgICAgICAgICAgICAgIGxpbmtEZXRhaWxzWzFdID0gbGlua0RldGFpbHNbMV0uY29uY2F0KGNhcFswXSk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKHBhcmVudGhlc2lzTGV2ZWwgIT09IDEpIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICBsaW5rRGV0YWlscy5wdXNoKFwiXCIpO1xuICAgICAgICAgICAgICAgIGxpbmtEZXRhaWxzLnB1c2goY2FwWzBdKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgICAgbGlua0RldGFpbHMucHVzaChjYXBbMF0pO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgNDpcbiAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgY2FzZSA1OlxuICAgICAgICAgICAgICBsaW5rRGV0YWlscy5wdXNoKFwiXCIpO1xuICAgICAgICAgICAgY2FzZSA2OlxuICAgICAgICAgICAgICBsaW5rRGV0YWlsc1s1XSA9IGxpbmtEZXRhaWxzWzVdLmNvbmNhdChjYXBbMF0pO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgNzpcbiAgICAgICAgICAgICAgbGlua0RldGFpbHNbNl0gPSBsaW5rRGV0YWlsc1s2XS5jb25jYXQoY2FwWzBdKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICAgIGN1cnJlbnRPZmZzZXQgKz0gY2FwWzBdLmxlbmd0aDtcbiAgICAgICAgICBjb250aW51ZSBpbmxpbmVPdXRlcjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFByb2Nlc3MgYmFja3NsYXNoIGVzY2FwZXNcbiAgICAgICAgY2FwID0gaW5saW5lR3JhbW1hci5lc2NhcGUucmVnZXhwLmV4ZWMoc3RyaW5nKTtcbiAgICAgICAgaWYgKGNhcCkge1xuICAgICAgICAgIHN3aXRjaCAobGlua0RldGFpbHMubGVuZ3RoKSB7XG4gICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgIGxpbmtEZXRhaWxzLnB1c2goXCJcIik7XG4gICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgIGxpbmtEZXRhaWxzLnB1c2goY2FwWzBdKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgIGxpbmtEZXRhaWxzWzFdID0gbGlua0RldGFpbHNbMV0uY29uY2F0KGNhcFswXSk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIGNhc2UgNTpcbiAgICAgICAgICAgICAgbGlua0RldGFpbHMucHVzaChcIlwiKTtcbiAgICAgICAgICAgIGNhc2UgNjpcbiAgICAgICAgICAgICAgbGlua0RldGFpbHNbNV0gPSBsaW5rRGV0YWlsc1s1XS5jb25jYXQoY2FwWzBdKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICAgIGN1cnJlbnRPZmZzZXQgKz0gY2FwWzBdLmxlbmd0aDtcbiAgICAgICAgICBjb250aW51ZSBpbmxpbmVPdXRlcjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFByb2Nlc3Mgb3BlbmluZyBhbmdsZSBicmFja2V0XG4gICAgICAgIGlmIChsaW5rRGV0YWlscy5sZW5ndGggPCAyICYmIHN0cmluZy5tYXRjaCgvXjwvKSkge1xuICAgICAgICAgIGlmIChsaW5rRGV0YWlscy5sZW5ndGggPT09IDApIGxpbmtEZXRhaWxzLnB1c2goXCJcIik7XG4gICAgICAgICAgbGlua0RldGFpbHNbMF0gPSBsaW5rRGV0YWlsc1swXS5jb25jYXQoXCI8XCIpO1xuICAgICAgICAgIGN1cnJlbnRPZmZzZXQrKztcbiAgICAgICAgICBjb250aW51ZSBpbmxpbmVPdXRlcjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFByb2Nlc3MgY2xvc2luZyBhbmdsZSBicmFja2V0XG4gICAgICAgIGlmICgobGlua0RldGFpbHMubGVuZ3RoID09PSAxIHx8IGxpbmtEZXRhaWxzLmxlbmd0aCA9PT0gMikgJiYgc3RyaW5nLm1hdGNoKC9ePi8pKSB7XG4gICAgICAgICAgaWYgKGxpbmtEZXRhaWxzLmxlbmd0aCA9PT0gMSkgbGlua0RldGFpbHMucHVzaChcIlwiKTtcbiAgICAgICAgICBsaW5rRGV0YWlscy5wdXNoKFwiPlwiKTtcbiAgICAgICAgICBjdXJyZW50T2Zmc2V0Kys7XG4gICAgICAgICAgY29udGludWUgaW5saW5lT3V0ZXI7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBQcm9jZXNzIG5vbi1wYXJlbnRoZXNpcyBkZWxpbWl0ZXIgZm9yIHRpdGxlXG4gICAgICAgIGNhcCA9IC9eW1wiJ10vLmV4ZWMoc3RyaW5nKTtcbiAgICAgICAgaWYgKGNhcCAmJiAobGlua0RldGFpbHMubGVuZ3RoID09PSAwIHx8IGxpbmtEZXRhaWxzLmxlbmd0aCA9PT0gMSB8fCBsaW5rRGV0YWlscy5sZW5ndGggPT09IDQpKSB7XG4gICAgICAgICAgd2hpbGUgKGxpbmtEZXRhaWxzLmxlbmd0aCA8IDQpIGxpbmtEZXRhaWxzLnB1c2goXCJcIik7XG4gICAgICAgICAgbGlua0RldGFpbHMucHVzaChjYXBbMF0pO1xuICAgICAgICAgIGN1cnJlbnRPZmZzZXQrKztcbiAgICAgICAgICBjb250aW51ZSBpbmxpbmVPdXRlcjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjYXAgJiYgKGxpbmtEZXRhaWxzLmxlbmd0aCA9PT0gNSB8fCBsaW5rRGV0YWlscy5sZW5ndGggPT09IDYpICYmIGxpbmtEZXRhaWxzWzRdID09PSBjYXBbMF0pIHtcbiAgICAgICAgICBpZiAobGlua0RldGFpbHMubGVuZ3RoID09PSA1KSBsaW5rRGV0YWlscy5wdXNoKFwiXCIpO1xuICAgICAgICAgIGxpbmtEZXRhaWxzLnB1c2goY2FwWzBdKTtcbiAgICAgICAgICBjdXJyZW50T2Zmc2V0Kys7XG4gICAgICAgICAgY29udGludWUgaW5saW5lT3V0ZXI7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBQcm9jZXNzIG9wZW5pbmcgcGFyZW50aGVzaXNcbiAgICAgICAgaWYgKHN0cmluZy5tYXRjaCgvXlxcKC8pKSB7XG4gICAgICAgICAgc3dpdGNoIChsaW5rRGV0YWlscy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgbGlua0RldGFpbHMucHVzaChcIlwiKTtcbiAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgbGlua0RldGFpbHMucHVzaChcIlwiKTtcbiAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgbGlua0RldGFpbHNbMV0gPSBsaW5rRGV0YWlsc1sxXS5jb25jYXQoXCIoXCIpO1xuICAgICAgICAgICAgICBpZiAoIWxpbmtEZXRhaWxzWzBdLm1hdGNoKC88JC8pKSBwYXJlbnRoZXNpc0xldmVsKys7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgICBsaW5rRGV0YWlscy5wdXNoKFwiXCIpO1xuICAgICAgICAgICAgY2FzZSA0OlxuICAgICAgICAgICAgICBsaW5rRGV0YWlscy5wdXNoKFwiKFwiKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgICAgIGxpbmtEZXRhaWxzLnB1c2goXCJcIik7XG4gICAgICAgICAgICBjYXNlIDY6XG4gICAgICAgICAgICAgIGlmIChsaW5rRGV0YWlsc1s0XSA9PT0gXCIoXCIpIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgbGlua0RldGFpbHNbNV0gPSBsaW5rRGV0YWlsc1s1XS5jb25jYXQoXCIoXCIpO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY3VycmVudE9mZnNldCsrO1xuICAgICAgICAgIGNvbnRpbnVlIGlubGluZU91dGVyO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gUHJvY2VzcyBjbG9zaW5nIHBhcmVudGhlc2lzXG4gICAgICAgIGlmIChzdHJpbmcubWF0Y2goL15cXCkvKSkge1xuICAgICAgICAgIGlmIChsaW5rRGV0YWlscy5sZW5ndGggPD0gMikge1xuICAgICAgICAgICAgd2hpbGUgKGxpbmtEZXRhaWxzLmxlbmd0aCA8IDIpIGxpbmtEZXRhaWxzLnB1c2goXCJcIik7XG4gICAgICAgICAgICBpZiAoIWxpbmtEZXRhaWxzWzBdLm1hdGNoKC88JC8pKSBwYXJlbnRoZXNpc0xldmVsLS07XG4gICAgICAgICAgICBpZiAocGFyZW50aGVzaXNMZXZlbCA+IDApIHtcbiAgICAgICAgICAgICAgbGlua0RldGFpbHNbMV0gPSBsaW5rRGV0YWlsc1sxXS5jb25jYXQoXCIpXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSBpZiAobGlua0RldGFpbHMubGVuZ3RoID09PSA1IHx8IGxpbmtEZXRhaWxzLmxlbmd0aCA9PT0gNikge1xuICAgICAgICAgICAgaWYgKGxpbmtEZXRhaWxzWzRdID09PSBcIihcIikge1xuICAgICAgICAgICAgICBpZiAobGlua0RldGFpbHMubGVuZ3RoID09PSA1KSBsaW5rRGV0YWlscy5wdXNoKFwiXCIpO1xuICAgICAgICAgICAgICBsaW5rRGV0YWlscy5wdXNoKFwiKVwiKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGlmIChsaW5rRGV0YWlscy5sZW5ndGggPT09IDUpIGxpbmtEZXRhaWxzLnB1c2goXCIpXCIpO1xuICAgICAgICAgICAgICBlbHNlIGxpbmtEZXRhaWxzWzVdID0gbGlua0RldGFpbHNbNV0uY29uY2F0KFwiKVwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcGFyZW50aGVzaXNMZXZlbC0tO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChwYXJlbnRoZXNpc0xldmVsID09PSAwKSB7XG4gICAgICAgICAgICB3aGlsZSAobGlua0RldGFpbHMubGVuZ3RoIDwgNykgbGlua0RldGFpbHMucHVzaChcIlwiKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjdXJyZW50T2Zmc2V0Kys7XG4gICAgICAgICAgY29udGludWUgaW5saW5lT3V0ZXI7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBBbnkgb2xkIGNoYXJhY3RlclxuICAgICAgICBjYXAgPSAvXi4vLmV4ZWMoc3RyaW5nKTtcbiAgICAgICAgaWYgKGNhcCkge1xuICAgICAgICAgIHN3aXRjaCAobGlua0RldGFpbHMubGVuZ3RoKSB7XG4gICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgIGxpbmtEZXRhaWxzLnB1c2goXCJcIik7XG4gICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgIGxpbmtEZXRhaWxzLnB1c2goY2FwWzBdKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgIGxpbmtEZXRhaWxzWzFdID0gbGlua0RldGFpbHNbMV0uY29uY2F0KGNhcFswXSk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIGNhc2UgNTpcbiAgICAgICAgICAgICAgbGlua0RldGFpbHMucHVzaChcIlwiKTtcbiAgICAgICAgICAgIGNhc2UgNjpcbiAgICAgICAgICAgICAgbGlua0RldGFpbHNbNV0gPSBsaW5rRGV0YWlsc1s1XS5jb25jYXQoY2FwWzBdKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICAgIGN1cnJlbnRPZmZzZXQgKz0gY2FwWzBdLmxlbmd0aDtcbiAgICAgICAgICBjb250aW51ZSBpbmxpbmVPdXRlcjtcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBcIkluZmluaXRlIGxvb3BcIjtcbiAgICAgIH1cbiAgICAgIGlmIChwYXJlbnRoZXNpc0xldmVsID4gMCkgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlmIChsaW5rUmVmICE9PSBmYWxzZSkge1xuICAgICAgLy8gUmVmZXJlbmNlIGxpbms7IGNoZWNrIHRoYXQgbGlua1JlZiBpcyB2YWxpZFxuICAgICAgbGV0IHZhbGlkID0gZmFsc2U7XG4gICAgICBmb3IgKGxldCBsYWJlbCBvZiB0aGlzLmxpbmtMYWJlbHMpIHtcbiAgICAgICAgaWYgKGxhYmVsID09PSBsaW5rUmVmKSB7XG4gICAgICAgICAgdmFsaWQgPSB0cnVlO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBsZXQgbGFiZWxDbGFzcyA9IHZhbGlkID8gXCJUTUxpbmtMYWJlbCBUTUxpbmtMYWJlbF9WYWxpZFwiIDogXCJUTUxpbmtMYWJlbCBUTUxpbmtMYWJlbF9JbnZhbGlkXCI7XG4gICAgICBsZXQgb3V0cHV0ID0gYDxzcGFuIGNsYXNzPVwiVE1NYXJrIFRNTWFya18ke3R5cGV9XCI+JHtvcGVuZXJ9PC9zcGFuPjxzcGFuIGNsYXNzPVwiJHt0eXBlfSAke1xuICAgICAgICBsaW5rTGFiZWwubGVuZ3RoIDwgMyB8fCAhbGlua0xhYmVsWzFdID8gbGFiZWxDbGFzcyA6IFwiXCJcbiAgICAgIH1cIj4ke3RoaXMucHJvY2Vzc0lubGluZVN0eWxlcyhsaW5rVGV4dCl9PC9zcGFuPjxzcGFuIGNsYXNzPVwiVE1NYXJrIFRNTWFya18ke3R5cGV9XCI+XTwvc3Bhbj5gO1xuXG4gICAgICBpZiAobGlua0xhYmVsLmxlbmd0aCA+PSAzKSB7XG4gICAgICAgIG91dHB1dCA9IG91dHB1dC5jb25jYXQoXG4gICAgICAgICAgYDxzcGFuIGNsYXNzPVwiVE1NYXJrIFRNTWFya18ke3R5cGV9XCI+JHtsaW5rTGFiZWxbMF19PC9zcGFuPmAsXG4gICAgICAgICAgYDxzcGFuIGNsYXNzPVwiJHtsYWJlbENsYXNzfVwiPiR7bGlua0xhYmVsWzFdfTwvc3Bhbj5gLFxuICAgICAgICAgIGA8c3BhbiBjbGFzcz1cIlRNTWFyayBUTU1hcmtfJHt0eXBlfVwiPiR7bGlua0xhYmVsWzJdfTwvc3Bhbj5gXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICByZXR1cm4ge1xuICAgICAgICBvdXRwdXQ6IG91dHB1dCxcbiAgICAgICAgY2hhckNvdW50OiBjdXJyZW50T2Zmc2V0LFxuICAgICAgfTtcbiAgICB9IGVsc2UgaWYgKGxpbmtEZXRhaWxzLmxlbmd0aCA+IDApIHtcbiAgICAgIC8vIElubGluZSBsaW5rXG4gICAgICB3aGlsZSAobGlua0RldGFpbHMubGVuZ3RoIDwgNykge1xuICAgICAgICBsaW5rRGV0YWlscy5wdXNoKFwiXCIpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBvdXRwdXQ6IGA8c3BhbiBjbGFzcz1cIlRNTWFyayBUTU1hcmtfJHt0eXBlfVwiPiR7b3BlbmVyfTwvc3Bhbj48c3BhbiBjbGFzcz1cIiR7dHlwZX1cIj4ke3RoaXMucHJvY2Vzc0lubGluZVN0eWxlcyhcbiAgICAgICAgICBsaW5rVGV4dFxuICAgICAgICApfTwvc3Bhbj48c3BhbiBjbGFzcz1cIlRNTWFyayBUTU1hcmtfJHt0eXBlfVwiPl0oJHtcbiAgICAgICAgICBsaW5rRGV0YWlsc1swXVxuICAgICAgICB9PC9zcGFuPjxzcGFuIGNsYXNzPVwiJHt0eXBlfURlc3RpbmF0aW9uXCI+JHtcbiAgICAgICAgICBsaW5rRGV0YWlsc1sxXVxuICAgICAgICB9PC9zcGFuPjxzcGFuIGNsYXNzPVwiVE1NYXJrIFRNTWFya18ke3R5cGV9XCI+JHtsaW5rRGV0YWlsc1syXX0ke1xuICAgICAgICAgIGxpbmtEZXRhaWxzWzNdXG4gICAgICAgIH0ke2xpbmtEZXRhaWxzWzRdfTwvc3Bhbj48c3BhbiBjbGFzcz1cIiR7dHlwZX1UaXRsZVwiPiR7XG4gICAgICAgICAgbGlua0RldGFpbHNbNV1cbiAgICAgICAgfTwvc3Bhbj48c3BhbiBjbGFzcz1cIlRNTWFyayBUTU1hcmtfJHt0eXBlfVwiPiR7bGlua0RldGFpbHNbNl19KTwvc3Bhbj5gLFxuICAgICAgICBjaGFyQ291bnQ6IGN1cnJlbnRPZmZzZXQsXG4gICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHByaXZhdGUgY29tcHV0ZUNvbW1vbkFuY2VzdG9yKG5vZGUxOiBOb2RlIHwgbnVsbCwgbm9kZTI6IE5vZGUgfCBudWxsKTogTm9kZSB8IG51bGwge1xuICAgIGlmICghbm9kZTEgfHwgIW5vZGUyKSByZXR1cm4gbnVsbDtcbiAgICBpZiAobm9kZTEgPT09IG5vZGUyKSByZXR1cm4gbm9kZTE7XG4gICAgY29uc3QgYW5jZXN0cnkgPSAobm9kZTogTm9kZSkgPT4ge1xuICAgICAgbGV0IGFuY2VzdHJ5ID0gW107XG4gICAgICB3aGlsZSAobm9kZSkge1xuICAgICAgICBhbmNlc3RyeS51bnNoaWZ0KG5vZGUpO1xuICAgICAgICBub2RlID0gbm9kZS5wYXJlbnROb2RlITtcbiAgICAgIH1cbiAgICAgIHJldHVybiBhbmNlc3RyeTtcbiAgICB9O1xuXG4gICAgY29uc3QgYW5jZXN0cnkxID0gYW5jZXN0cnkobm9kZTEpO1xuICAgIGNvbnN0IGFuY2VzdHJ5MiA9IGFuY2VzdHJ5KG5vZGUyKTtcblxuICAgIGlmIChhbmNlc3RyeTFbMF0gIT09IGFuY2VzdHJ5MlswXSkgcmV0dXJuIG51bGw7XG4gICAgbGV0IGk7XG4gICAgZm9yIChpID0gMDsgYW5jZXN0cnkxW2ldID09PSBhbmNlc3RyeTJbaV07IGkrKyk7XG4gICAgcmV0dXJuIGFuY2VzdHJ5MVtpIC0gMV07XG4gIH1cblxuICBwcml2YXRlIGNvbXB1dGVFbmNsb3NpbmdNYXJrdXBOb2RlKGZvY3VzOiBQb3NpdGlvbiwgYW5jaG9yOiBQb3NpdGlvbiB8IG51bGwsIGNsYXNzTmFtZTogc3RyaW5nKTogTm9kZSB8IG51bGwge1xuICAgIGxldCBub2RlID0gbnVsbDtcbiAgICBpZiAoIWZvY3VzKSByZXR1cm4gbnVsbDtcbiAgICBpZiAoIWFuY2hvcikge1xuICAgICAgY29uc3Qgc2VsID0gd2luZG93LmdldFNlbGVjdGlvbigpO1xuICAgICAgaWYgKCFzZWwgfHwgIXNlbC5mb2N1c05vZGUpIHJldHVybiBudWxsO1xuICAgICAgbm9kZSA9IHNlbC5mb2N1c05vZGU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChmb2N1cy5yb3cgIT09IGFuY2hvci5yb3cpIHJldHVybiBudWxsO1xuICAgICAgY29uc3Qgc2VsID0gd2luZG93LmdldFNlbGVjdGlvbigpO1xuICAgICAgaWYgKCFzZWwpIHJldHVybiBudWxsO1xuICAgICAgbm9kZSA9IHRoaXMuY29tcHV0ZUNvbW1vbkFuY2VzdG9yKHNlbC5mb2N1c05vZGUsIHNlbC5hbmNob3JOb2RlKTtcbiAgICB9XG4gICAgaWYgKCFub2RlKSByZXR1cm4gbnVsbDtcbiAgICB3aGlsZSAobm9kZSAhPT0gdGhpcy5lKSB7XG4gICAgICBpZiAoKG5vZGUgYXMgSFRNTEVsZW1lbnQpLmNsYXNzTmFtZSAmJiAobm9kZSBhcyBIVE1MRWxlbWVudCkuY2xhc3NOYW1lLmluY2x1ZGVzKGNsYXNzTmFtZSkpIHJldHVybiBub2RlO1xuICAgICAgbm9kZSA9IG5vZGUucGFyZW50Tm9kZSE7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcHVibGljIGdldENvbW1hbmRTdGF0ZShmb2N1czogUG9zaXRpb24gfCBudWxsID0gbnVsbCwgYW5jaG9yOiBQb3NpdGlvbiB8IG51bGwgPSBudWxsKTogUmVjb3JkPHN0cmluZywgYm9vbGVhbiB8IG51bGw+IHtcbiAgICBsZXQgY29tbWFuZFN0YXRlOiBSZWNvcmQ8c3RyaW5nLCBib29sZWFuIHwgbnVsbD4gPSB7fTtcbiAgICBpZiAoIWZvY3VzKSBmb2N1cyA9IHRoaXMuZ2V0U2VsZWN0aW9uKGZhbHNlKTtcbiAgICBpZiAoIWFuY2hvcikgYW5jaG9yID0gdGhpcy5nZXRTZWxlY3Rpb24odHJ1ZSk7XG4gICAgaWYgKCFmb2N1cykge1xuICAgICAgZm9yIChsZXQgY21kIGluIGNvbW1hbmRzKSB7XG4gICAgICAgIGNvbW1hbmRTdGF0ZVtjbWRdID0gbnVsbDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBjb21tYW5kU3RhdGU7XG4gICAgfVxuICAgIGlmICghYW5jaG9yKSBhbmNob3IgPSBmb2N1cztcblxuICAgIGxldCBzdGFydDogUG9zaXRpb24sIGVuZDogUG9zaXRpb247XG4gICAgaWYgKGFuY2hvci5yb3cgPCBmb2N1cy5yb3cgfHwgKGFuY2hvci5yb3cgPT09IGZvY3VzLnJvdyAmJiBhbmNob3IuY29sIDwgZm9jdXMuY29sKSkge1xuICAgICAgc3RhcnQgPSBhbmNob3I7XG4gICAgICBlbmQgPSBmb2N1cztcbiAgICB9IGVsc2Uge1xuICAgICAgc3RhcnQgPSBmb2N1cztcbiAgICAgIGVuZCA9IGFuY2hvcjtcbiAgICB9XG4gICAgaWYgKGVuZC5yb3cgPiBzdGFydC5yb3cgJiYgZW5kLmNvbCA9PT0gMCkge1xuICAgICAgZW5kLnJvdy0tO1xuICAgICAgZW5kLmNvbCA9IHRoaXMubGluZXNbZW5kLnJvd10ubGVuZ3RoO1xuICAgIH1cblxuICAgIGZvciAobGV0IGNtZCBpbiBjb21tYW5kcykge1xuICAgICAgaWYgKGNvbW1hbmRzW2NtZF0udHlwZSA9PT0gXCJpbmxpbmVcIikge1xuICAgICAgICBpZiAoIWZvY3VzIHx8IGZvY3VzLnJvdyAhPT0gYW5jaG9yIS5yb3cgfHwgIXRoaXMuaXNJbmxpbmVGb3JtYXR0aW5nQWxsb3dlZCgpKSB7XG4gICAgICAgICAgY29tbWFuZFN0YXRlW2NtZF0gPSBudWxsO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbW1hbmRTdGF0ZVtjbWRdID1cbiAgICAgICAgICAgICEhdGhpcy5jb21wdXRlRW5jbG9zaW5nTWFya3VwTm9kZShmb2N1cywgYW5jaG9yLCBjb21tYW5kc1tjbWRdLmNsYXNzTmFtZSkgfHxcbiAgICAgICAgICAgIChmb2N1cy5jb2wgPT09IGFuY2hvciEuY29sICYmXG4gICAgICAgICAgICAgICEhdGhpcy5saW5lc1tmb2N1cy5yb3ddLnN1YnN0cigwLCBmb2N1cy5jb2wpLm1hdGNoKGNvbW1hbmRzW2NtZF0udW5zZXQucHJlUGF0dGVybikgJiZcbiAgICAgICAgICAgICAgISF0aGlzLmxpbmVzW2ZvY3VzLnJvd10uc3Vic3RyKGZvY3VzLmNvbCkubWF0Y2goY29tbWFuZHNbY21kXS51bnNldC5wb3N0UGF0dGVybikpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoY29tbWFuZHNbY21kXS50eXBlID09PSBcImxpbmVcIikge1xuICAgICAgICBpZiAoIWZvY3VzKSB7XG4gICAgICAgICAgY29tbWFuZFN0YXRlW2NtZF0gPSBudWxsO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGxldCBzdGF0ZTogYm9vbGVhbiB8IG51bGwgPSB0aGlzLmxpbmVUeXBlc1tzdGFydC5yb3ddID09PSBjb21tYW5kc1tjbWRdLmNsYXNzTmFtZTtcbiAgICAgICAgICBmb3IgKGxldCBsaW5lID0gc3RhcnQucm93OyBsaW5lIDw9IGVuZC5yb3c7IGxpbmUrKykge1xuICAgICAgICAgICAgaWYgKCh0aGlzLmxpbmVUeXBlc1tsaW5lXSA9PT0gY29tbWFuZHNbY21kXS5jbGFzc05hbWUpICE9PSBzdGF0ZSkge1xuICAgICAgICAgICAgICBzdGF0ZSA9IG51bGw7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBjb21tYW5kU3RhdGVbY21kXSA9IHN0YXRlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBjb21tYW5kU3RhdGU7XG4gIH1cblxuICBwdWJsaWMgc2V0Q29tbWFuZFN0YXRlKGNvbW1hbmQ6IHN0cmluZywgc3RhdGU6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuaXNSZXN0b3JpbmdIaXN0b3J5KSB0aGlzLnB1c2hIaXN0b3J5KCk7XG4gICAgaWYgKGNvbW1hbmRzW2NvbW1hbmRdLnR5cGUgPT09IFwiaW5saW5lXCIpIHtcbiAgICAgIGxldCBhbmNob3IgPSB0aGlzLmdldFNlbGVjdGlvbih0cnVlKTtcbiAgICAgIGxldCBmb2N1cyA9IHRoaXMuZ2V0U2VsZWN0aW9uKGZhbHNlKTtcbiAgICAgIGlmICghYW5jaG9yKSBhbmNob3IgPSBmb2N1cztcbiAgICAgIGlmICghYW5jaG9yKSByZXR1cm47XG4gICAgICBpZiAoYW5jaG9yLnJvdyAhPT0gZm9jdXMhLnJvdykgcmV0dXJuO1xuICAgICAgaWYgKCF0aGlzLmlzSW5saW5lRm9ybWF0dGluZ0FsbG93ZWQoKSkgcmV0dXJuO1xuICAgICAgbGV0IG1hcmt1cE5vZGUgPSB0aGlzLmNvbXB1dGVFbmNsb3NpbmdNYXJrdXBOb2RlKGZvY3VzISwgYW5jaG9yLCBjb21tYW5kc1tjb21tYW5kXS5jbGFzc05hbWUpO1xuICAgICAgdGhpcy5jbGVhckRpcnR5RmxhZygpO1xuXG4gICAgICBpZiAobWFya3VwTm9kZSkge1xuICAgICAgICB0aGlzLmxpbmVEaXJ0eVtmb2N1cyEucm93XSA9IHRydWU7XG4gICAgICAgIGNvbnN0IHN0YXJ0Q29sID0gdGhpcy5jb21wdXRlQ29sdW1uKG1hcmt1cE5vZGUsIDApITtcbiAgICAgICAgY29uc3QgbGVuID0gbWFya3VwTm9kZS50ZXh0Q29udGVudCEubGVuZ3RoO1xuICAgICAgICBjb25zdCBsZWZ0ID0gdGhpcy5saW5lc1tmb2N1cyEucm93XVxuICAgICAgICAgIC5zdWJzdHIoMCwgc3RhcnRDb2wpXG4gICAgICAgICAgLnJlcGxhY2UoY29tbWFuZHNbY29tbWFuZF0udW5zZXQucHJlUGF0dGVybiwgXCJcIik7XG4gICAgICAgIGNvbnN0IG1pZCA9IHRoaXMubGluZXNbZm9jdXMhLnJvd10uc3Vic3RyKHN0YXJ0Q29sLCBsZW4pO1xuICAgICAgICBjb25zdCByaWdodCA9IHRoaXMubGluZXNbZm9jdXMhLnJvd11cbiAgICAgICAgICAuc3Vic3RyKHN0YXJ0Q29sICsgbGVuKVxuICAgICAgICAgIC5yZXBsYWNlKGNvbW1hbmRzW2NvbW1hbmRdLnVuc2V0LnBvc3RQYXR0ZXJuLCBcIlwiKTtcbiAgICAgICAgdGhpcy5saW5lc1tmb2N1cyEucm93XSA9IGxlZnQuY29uY2F0KG1pZCwgcmlnaHQpO1xuICAgICAgICBhbmNob3IuY29sID0gbGVmdC5sZW5ndGg7XG4gICAgICAgIGZvY3VzIS5jb2wgPSBhbmNob3IuY29sICsgbGVuO1xuICAgICAgICB0aGlzLnVwZGF0ZUZvcm1hdHRpbmcoKTtcbiAgICAgICAgdGhpcy5zZXRTZWxlY3Rpb24oZm9jdXMhLCBhbmNob3IpO1xuICAgICAgICB0aGlzLmZpcmVDaGFuZ2UoKTtcbiAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgIGZvY3VzIS5jb2wgPT09IGFuY2hvci5jb2wgJiZcbiAgICAgICAgISF0aGlzLmxpbmVzW2ZvY3VzIS5yb3ddLnN1YnN0cigwLCBmb2N1cyEuY29sKS5tYXRjaChjb21tYW5kc1tjb21tYW5kXS51bnNldC5wcmVQYXR0ZXJuKSAmJlxuICAgICAgICAhIXRoaXMubGluZXNbZm9jdXMhLnJvd10uc3Vic3RyKGZvY3VzIS5jb2wpLm1hdGNoKGNvbW1hbmRzW2NvbW1hbmRdLnVuc2V0LnBvc3RQYXR0ZXJuKVxuICAgICAgKSB7XG4gICAgICAgIHRoaXMubGluZURpcnR5W2ZvY3VzIS5yb3ddID0gdHJ1ZTtcbiAgICAgICAgY29uc3QgbGVmdCA9IHRoaXMubGluZXNbZm9jdXMhLnJvd11cbiAgICAgICAgICAuc3Vic3RyKDAsIGZvY3VzIS5jb2wpXG4gICAgICAgICAgLnJlcGxhY2UoY29tbWFuZHNbY29tbWFuZF0udW5zZXQucHJlUGF0dGVybiwgXCJcIik7XG4gICAgICAgIGNvbnN0IHJpZ2h0ID0gdGhpcy5saW5lc1tmb2N1cyEucm93XVxuICAgICAgICAgIC5zdWJzdHIoZm9jdXMhLmNvbClcbiAgICAgICAgICAucmVwbGFjZShjb21tYW5kc1tjb21tYW5kXS51bnNldC5wb3N0UGF0dGVybiwgXCJcIik7XG4gICAgICAgIHRoaXMubGluZXNbZm9jdXMhLnJvd10gPSBsZWZ0LmNvbmNhdChyaWdodCk7XG4gICAgICAgIGZvY3VzIS5jb2wgPSBhbmNob3IuY29sID0gbGVmdC5sZW5ndGg7XG4gICAgICAgIHRoaXMudXBkYXRlRm9ybWF0dGluZygpO1xuICAgICAgICB0aGlzLnNldFNlbGVjdGlvbihmb2N1cyEsIGFuY2hvcik7XG4gICAgICAgIHRoaXMuZmlyZUNoYW5nZSgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbGV0IHsgc3RhcnRDb2wsIGVuZENvbCB9ID1cbiAgICAgICAgICBmb2N1cyEuY29sIDwgYW5jaG9yLmNvbFxuICAgICAgICAgICAgPyB7IHN0YXJ0Q29sOiBmb2N1cyEuY29sLCBlbmRDb2w6IGFuY2hvci5jb2wgfVxuICAgICAgICAgICAgOiB7IHN0YXJ0Q29sOiBhbmNob3IuY29sLCBlbmRDb2w6IGZvY3VzIS5jb2wgfTtcblxuICAgICAgICBsZXQgbWF0Y2ggPSB0aGlzLmxpbmVzW2ZvY3VzIS5yb3ddXG4gICAgICAgICAgLnN1YnN0cihzdGFydENvbCwgZW5kQ29sIC0gc3RhcnRDb2wpXG4gICAgICAgICAgLm1hdGNoKC9eKD88bGVhZGluZz5cXHMqKS4qXFxTKD88dHJhaWxpbmc+XFxzKikkLyk7XG4gICAgICAgIGlmIChtYXRjaCkge1xuICAgICAgICAgIHN0YXJ0Q29sICs9IG1hdGNoLmdyb3VwcyEubGVhZGluZy5sZW5ndGg7XG4gICAgICAgICAgZW5kQ29sIC09IG1hdGNoLmdyb3VwcyEudHJhaWxpbmcubGVuZ3RoO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9jdXMhLmNvbCA9IHN0YXJ0Q29sO1xuICAgICAgICBhbmNob3IuY29sID0gZW5kQ29sO1xuXG4gICAgICAgIHRoaXMud3JhcFNlbGVjdGlvbihjb21tYW5kc1tjb21tYW5kXS5zZXQucHJlLCBjb21tYW5kc1tjb21tYW5kXS5zZXQucG9zdCwgZm9jdXMsIGFuY2hvcik7XG4gICAgICAgIHRoaXMuZmlyZUNoYW5nZSgpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoY29tbWFuZHNbY29tbWFuZF0udHlwZSA9PT0gXCJsaW5lXCIpIHtcbiAgICAgIGxldCBhbmNob3IgPSB0aGlzLmdldFNlbGVjdGlvbih0cnVlKTtcbiAgICAgIGxldCBmb2N1cyA9IHRoaXMuZ2V0U2VsZWN0aW9uKGZhbHNlKTtcbiAgICAgIGlmICghYW5jaG9yKSBhbmNob3IgPSBmb2N1cztcbiAgICAgIGlmICghZm9jdXMpIHJldHVybjtcbiAgICAgIHRoaXMuY2xlYXJEaXJ0eUZsYWcoKTtcbiAgICAgIGxldCBzdGFydCA9IGFuY2hvciEucm93ID4gZm9jdXMhLnJvdyA/IGZvY3VzISA6IGFuY2hvciE7XG4gICAgICBsZXQgZW5kID0gYW5jaG9yIS5yb3cgPiBmb2N1cyEucm93ID8gYW5jaG9yISA6IGZvY3VzITtcbiAgICAgIGlmIChlbmQucm93ID4gc3RhcnQucm93ICYmIGVuZC5jb2wgPT09IDApIHtcbiAgICAgICAgZW5kLnJvdy0tO1xuICAgICAgfVxuXG4gICAgICBmb3IgKGxldCBsaW5lID0gc3RhcnQucm93OyBsaW5lIDw9IGVuZC5yb3c7IGxpbmUrKykge1xuICAgICAgICBpZiAoc3RhdGUgJiYgdGhpcy5saW5lVHlwZXNbbGluZV0gIT09IGNvbW1hbmRzW2NvbW1hbmRdLmNsYXNzTmFtZSkge1xuICAgICAgICAgIHRoaXMubGluZXNbbGluZV0gPSB0aGlzLmxpbmVzW2xpbmVdLnJlcGxhY2UoXG4gICAgICAgICAgICBjb21tYW5kc1tjb21tYW5kXS5zZXQucGF0dGVybixcbiAgICAgICAgICAgIGNvbW1hbmRzW2NvbW1hbmRdLnNldC5yZXBsYWNlbWVudC5yZXBsYWNlKFwiJCNcIiwgKGxpbmUgLSBzdGFydC5yb3cgKyAxKS50b1N0cmluZygpKVxuICAgICAgICAgICk7XG4gICAgICAgICAgdGhpcy5saW5lRGlydHlbbGluZV0gPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmICghc3RhdGUgJiYgdGhpcy5saW5lVHlwZXNbbGluZV0gPT09IGNvbW1hbmRzW2NvbW1hbmRdLmNsYXNzTmFtZSkge1xuICAgICAgICAgIHRoaXMubGluZXNbbGluZV0gPSB0aGlzLmxpbmVzW2xpbmVdLnJlcGxhY2UoXG4gICAgICAgICAgICBjb21tYW5kc1tjb21tYW5kXS51bnNldC5wYXR0ZXJuLFxuICAgICAgICAgICAgY29tbWFuZHNbY29tbWFuZF0udW5zZXQucmVwbGFjZW1lbnRcbiAgICAgICAgICApO1xuICAgICAgICAgIHRoaXMubGluZURpcnR5W2xpbmVdID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdGhpcy51cGRhdGVGb3JtYXR0aW5nKCk7XG4gICAgICB0aGlzLnNldFNlbGVjdGlvbihcbiAgICAgICAgeyByb3c6IGVuZC5yb3csIGNvbDogdGhpcy5saW5lc1tlbmQucm93XS5sZW5ndGggfSxcbiAgICAgICAgeyByb3c6IHN0YXJ0LnJvdywgY29sOiAwIH1cbiAgICAgICk7XG4gICAgICB0aGlzLmZpcmVDaGFuZ2UoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGlzSW5saW5lRm9ybWF0dGluZ0FsbG93ZWQoKTogYm9vbGVhbiB7XG4gICAgY29uc3Qgc2VsID0gd2luZG93LmdldFNlbGVjdGlvbigpO1xuICAgIGlmICghc2VsIHx8ICFzZWwuZm9jdXNOb2RlIHx8ICFzZWwuYW5jaG9yTm9kZSkgcmV0dXJuIGZhbHNlO1xuXG4gICAgaWYgKFxuICAgICAgc2VsLmlzQ29sbGFwc2VkICYmXG4gICAgICBzZWwuZm9jdXNOb2RlLm5vZGVUeXBlID09PSAzICYmXG4gICAgICBzZWwuZm9jdXNPZmZzZXQgPT09IHNlbC5mb2N1c05vZGUubm9kZVZhbHVlIS5sZW5ndGhcbiAgICApIHtcbiAgICAgIGxldCBub2RlO1xuICAgICAgZm9yIChub2RlID0gc2VsLmZvY3VzTm9kZTsgbm9kZSAmJiBub2RlLm5leHRTaWJsaW5nID09PSBudWxsOyBub2RlID0gbm9kZS5wYXJlbnROb2RlISk7XG4gICAgICBpZiAoXG4gICAgICAgIG5vZGUgJiZcbiAgICAgICAgbm9kZS5uZXh0U2libGluZyAmJlxuICAgICAgICAobm9kZS5uZXh0U2libGluZyBhcyBIVE1MRWxlbWVudCkuY2xhc3NOYW1lICYmXG4gICAgICAgIChub2RlLm5leHRTaWJsaW5nIGFzIEhUTUxFbGVtZW50KS5jbGFzc05hbWUuaW5jbHVkZXMoXCJUTUlubGluZUZvcm1hdHRlZFwiKVxuICAgICAgKVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBsZXQgYW5jZXN0b3IgPSB0aGlzLmNvbXB1dGVDb21tb25BbmNlc3RvcihzZWwuZm9jdXNOb2RlLCBzZWwuYW5jaG9yTm9kZSk7XG4gICAgaWYgKCFhbmNlc3RvcikgcmV0dXJuIGZhbHNlO1xuXG4gICAgd2hpbGUgKGFuY2VzdG9yICYmIGFuY2VzdG9yICE9PSB0aGlzLmUpIHtcbiAgICAgIGlmIChcbiAgICAgICAgKGFuY2VzdG9yIGFzIEhUTUxFbGVtZW50KS5jbGFzc05hbWUgJiZcbiAgICAgICAgdHlwZW9mIChhbmNlc3RvciBhcyBIVE1MRWxlbWVudCkuY2xhc3NOYW1lLmluY2x1ZGVzID09PSBcImZ1bmN0aW9uXCIgJiZcbiAgICAgICAgKChhbmNlc3RvciBhcyBIVE1MRWxlbWVudCkuY2xhc3NOYW1lLmluY2x1ZGVzKFwiVE1JbmxpbmVGb3JtYXR0ZWRcIikgfHxcbiAgICAgICAgICAoYW5jZXN0b3IgYXMgSFRNTEVsZW1lbnQpLmNsYXNzTmFtZS5pbmNsdWRlcyhcIlRNQmxhbmtMaW5lXCIpKVxuICAgICAgKVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIGFuY2VzdG9yID0gYW5jZXN0b3IucGFyZW50Tm9kZSE7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcHVibGljIHRvZ2dsZUNvbW1hbmRTdGF0ZShjb21tYW5kOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMubGFzdENvbW1hbmRTdGF0ZSkgdGhpcy5sYXN0Q29tbWFuZFN0YXRlID0gdGhpcy5nZXRDb21tYW5kU3RhdGUoKTtcbiAgICB0aGlzLnNldENvbW1hbmRTdGF0ZShjb21tYW5kLCAhdGhpcy5sYXN0Q29tbWFuZFN0YXRlW2NvbW1hbmRdKTtcbiAgfVxuXG4gIHByaXZhdGUgZmlyZURyb3AoZGF0YVRyYW5zZmVyOiBEYXRhVHJhbnNmZXIpOiB2b2lkIHtcbiAgICBmb3IgKGxldCBsaXN0ZW5lciBvZiB0aGlzLmxpc3RlbmVycy5kcm9wKSB7XG4gICAgICBsaXN0ZW5lcih7IGRhdGFUcmFuc2ZlciB9KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGZpcmVTZWxlY3Rpb24oKTogdm9pZCB7XG4gICAgaWYgKHRoaXMubGlzdGVuZXJzLnNlbGVjdGlvbiAmJiB0aGlzLmxpc3RlbmVycy5zZWxlY3Rpb24ubGVuZ3RoKSB7XG4gICAgICBsZXQgZm9jdXMgPSB0aGlzLmdldFNlbGVjdGlvbihmYWxzZSk7XG4gICAgICBsZXQgYW5jaG9yID0gdGhpcy5nZXRTZWxlY3Rpb24odHJ1ZSk7XG4gICAgICBsZXQgY29tbWFuZFN0YXRlID0gdGhpcy5nZXRDb21tYW5kU3RhdGUoZm9jdXMsIGFuY2hvcik7XG4gICAgICBpZiAodGhpcy5sYXN0Q29tbWFuZFN0YXRlKSB7XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcy5sYXN0Q29tbWFuZFN0YXRlLCBjb21tYW5kU3RhdGUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5sYXN0Q29tbWFuZFN0YXRlID0gT2JqZWN0LmFzc2lnbih7fSwgY29tbWFuZFN0YXRlKTtcbiAgICAgIH1cbiAgICAgIGZvciAobGV0IGxpc3RlbmVyIG9mIHRoaXMubGlzdGVuZXJzLnNlbGVjdGlvbikge1xuICAgICAgICBsaXN0ZW5lcih7XG4gICAgICAgICAgZm9jdXM6IGZvY3VzISxcbiAgICAgICAgICBhbmNob3I6IGFuY2hvciEsXG4gICAgICAgICAgY29tbWFuZFN0YXRlOiB0aGlzLmxhc3RDb21tYW5kU3RhdGUsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBFZGl0b3I7Il0sIm5hbWVzIjpbInN2ZyIsImJsb2NrcXVvdGUiLCJib2xkIiwiY2xlYXJfZm9ybWF0dGluZyIsImNvZGUiLCJoMSIsImgyIiwiaHIiLCJpbWFnZSIsIml0YWxpYyIsImxpbmsiLCJvbCIsInJlZG8iLCJzdHJpa2V0aHJvdWdoIiwidWwiLCJ1bmRvIiwiaXNNYWNMaWtlIiwidGVzdCIsIm5hdmlnYXRvciIsInBsYXRmb3JtIiwiRGVmYXVsdENvbW1hbmRzIiwibmFtZSIsImFjdGlvbiIsImlubmVySFRNTCIsInRpdGxlIiwiaG90a2V5IiwiaW5zZXJ0TGluayIsImVkaXRvciIsImlzSW5saW5lRm9ybWF0dGluZ0FsbG93ZWQiLCJ3cmFwU2VsZWN0aW9uIiwiZW5hYmxlZCIsImZvY3VzIiwiYW5jaG9yIiwiaW5zZXJ0SW1hZ2UiLCJwYXN0ZSIsImNhblVuZG8iLCJjYW5SZWRvIiwiQ29tbWFuZEJhciIsImNvbnN0cnVjdG9yIiwicHJvcHMiLCJlIiwiY29tbWFuZHMiLCJidXR0b25zIiwic3RhdGUiLCJob3RrZXlzIiwiZWxlbWVudCIsImRvY3VtZW50IiwiZ2V0RWxlbWVudEJ5SWQiLCJib2R5IiwiY3JlYXRlQ29tbWFuZEJhckVsZW1lbnQiLCJhZGRFdmVudExpc3RlbmVyIiwiaGFuZGxlS2V5ZG93biIsInNldEVkaXRvciIsInBhcmVudEVsZW1lbnQiLCJjcmVhdGVFbGVtZW50IiwiY2xhc3NOYW1lIiwiY29tbWFuZCIsImVsIiwiYXBwZW5kQ2hpbGQiLCJjb21tYW5kTmFtZSIsIk9iamVjdCIsImFzc2lnbiIsImtleXMiLCJzcGxpdCIsIm1vZGlmaWVycyIsIm1vZGlmaWVyZXhwbGFuYXRpb24iLCJpIiwibGVuZ3RoIiwicHVzaCIsIm1hdGNoIiwia2V5IiwidG9Mb3dlckNhc2UiLCJjb25jYXQiLCJqb2luIiwiaGFuZGxlQ2xpY2siLCJldmVudCIsInByZXZlbnREZWZhdWx0Iiwic2V0Q29tbWFuZFN0YXRlIiwiaGFuZGxlU2VsZWN0aW9uIiwiY29tbWFuZFN0YXRlIiwidW5kZWZpbmVkIiwib3V0ZXIiLCJtb2RpZmllciIsImdsb2JhbCIsInRoaXMiLCJyZXF1aXJlJCQwIiwicmVxdWlyZSQkMSIsInJlcXVpcmUkJDIiLCJzaGFyZWRTdG9yZU1vZHVsZSIsInJlcXVpcmUkJDMiLCJyZXF1aXJlJCQ0IiwicmVxdWlyZSQkNSIsInJlcXVpcmUkJDYiLCJyZXF1aXJlJCQ3IiwibWFrZUJ1aWx0SW4iLCJtYWtlQnVpbHRJbk1vZHVsZSIsInJlcGxhY2VtZW50cyIsIkFTQ0lJUHVuY3R1YXRpb24iLCJOb3RUcmlnZ2VyQ2hhciIsIlNjaGVtZSIsIkVtYWlsIiwiSFRNTE9wZW5UYWciLCJIVE1MQ2xvc2VUYWciLCJIVE1MVGFnTmFtZSIsIkhUTUxDb21tZW50IiwiSFRNTFBJIiwiSFRNTERlY2xhcmF0aW9uIiwiSFRNTENEQVRBIiwiSFRNTEF0dHJpYnV0ZSIsIkhUTUxBdHRWYWx1ZSIsIktub3duVGFnIiwicHVuY3R1YXRpb25MZWFkaW5nIiwiUmVnRXhwIiwicHVuY3R1YXRpb25UcmFpbGluZyIsImxpbmVHcmFtbWFyIiwiVE1IMSIsInJlZ2V4cCIsInJlcGxhY2VtZW50IiwiVE1IMiIsIlRNSDMiLCJUTUg0IiwiVE1INSIsIlRNSDYiLCJUTUJsb2NrcXVvdGUiLCJUTUNvZGVGZW5jZUJhY2t0aWNrT3BlbiIsIlRNQ29kZUZlbmNlVGlsZGVPcGVuIiwiVE1Db2RlRmVuY2VCYWNrdGlja0Nsb3NlIiwiVE1Db2RlRmVuY2VUaWxkZUNsb3NlIiwiVE1CbGFua0xpbmUiLCJUTVNldGV4dEgxTWFya2VyIiwiVE1TZXRleHRIMk1hcmtlciIsIlRNSFIiLCJUTVVMIiwiVE1PTCIsIlRNSW5kZW50ZWRDb2RlIiwiVE1MaW5rUmVmZXJlbmNlRGVmaW5pdGlvbiIsImxhYmVsUGxhY2Vob2xkZXIiLCJodG1sQmxvY2tHcmFtbWFyIiwic3RhcnQiLCJlbmQiLCJwYXJhSW50ZXJydXB0IiwiaW5saW5lR3JhbW1hciIsImVzY2FwZSIsImF1dG9saW5rIiwiaHRtbCIsImxpbmtPcGVuIiwiaW1hZ2VPcGVuIiwibGlua0xhYmVsIiwiZGVmYXVsdCIsInJlcGxhY2VtZW50UmVnZXhwIiwiaW5saW5lUnVsZXMiLCJydWxlIiwicmUiLCJzb3VyY2UiLCJyZXBsYWNlIiwic3RyaW5nIiwiZmxhZ3MiLCJodG1sZXNjYXBlIiwidHlwZSIsInNldCIsInByZSIsInBvc3QiLCJ1bnNldCIsInByZVBhdHRlcm4iLCJwb3N0UGF0dGVybiIsInBhdHRlcm4iLCJoMyIsImg0IiwiaDUiLCJoNiIsIkVkaXRvciIsInRleHRhcmVhIiwibGluZXMiLCJsaW5lRWxlbWVudHMiLCJsaW5lVHlwZXMiLCJsaW5lQ2FwdHVyZXMiLCJsaW5lUmVwbGFjZW1lbnRzIiwibGlua0xhYmVscyIsImxpbmVEaXJ0eSIsImxhc3RDb21tYW5kU3RhdGUiLCJsaXN0ZW5lcnMiLCJjaGFuZ2UiLCJzZWxlY3Rpb24iLCJkcm9wIiwidW5kb1N0YWNrIiwicmVkb1N0YWNrIiwiaXNSZXN0b3JpbmdIaXN0b3J5IiwibWF4SGlzdG9yeSIsImdldEVsZW1lbnRzQnlUYWdOYW1lIiwidGFnTmFtZSIsInBhcmVudE5vZGUiLCJzdHlsZSIsImRpc3BsYXkiLCJjcmVhdGVFZGl0b3JFbGVtZW50Iiwic2V0Q29udGVudCIsImNvbnRlbnQiLCJ2YWx1ZSIsImhhbmRsZVVuZG9SZWRvS2V5IiwicHVzaEhpc3RvcnkiLCJwdXNoQ3VycmVudFN0YXRlIiwiZ2V0Q29udGVudCIsImdldFNlbGVjdGlvbiIsInNoaWZ0IiwiY3VycmVudCIsInBvcCIsInByZXYiLCJzZXRTZWxlY3Rpb24iLCJuZXh0IiwiaXNNYWMiLCJjdHJsIiwibWV0YUtleSIsImN0cmxLZXkiLCJhbHRLZXkiLCJzaGlmdEtleSIsImNsYXNzTGlzdCIsImFkZCIsImNvbnRlbnRFZGl0YWJsZSIsIndoaXRlU3BhY2UiLCJ3ZWJraXRVc2VyTW9kaWZ5IiwibmV4dFNpYmxpbmciLCJpbnNlcnRCZWZvcmUiLCJoYW5kbGVJbnB1dEV2ZW50IiwiaGFuZGxlU2VsZWN0aW9uQ2hhbmdlRXZlbnQiLCJoYW5kbGVQYXN0ZSIsImhhbmRsZURyb3AiLCJjaGlsZE5vZGVzIiwiZmlyc3RDaGlsZCIsInJlbW92ZUNoaWxkIiwibGluZU51bSIsImxlIiwiQXJyYXkiLCJ1cGRhdGVGb3JtYXR0aW5nIiwiZmlyZUNoYW5nZSIsInVwZGF0ZUxpbmVUeXBlcyIsInVwZGF0ZUxpbmtMYWJlbHMiLCJhcHBseUxpbmVUeXBlcyIsImwiLCJjYXB0dXJlIiwic3RyIiwicDEiLCJwMiIsInBhcnNlSW50IiwicHJvY2Vzc0lubGluZVN0eWxlcyIsImNvbnRlbnRIVE1MIiwicmVtb3ZlQXR0cmlidXRlIiwiZGF0YXNldCIsInRvU3RyaW5nIiwiY29kZUJsb2NrVHlwZSIsImNvZGVCbG9ja1NlcUxlbmd0aCIsImh0bWxCbG9jayIsImxpbmVUeXBlIiwibGluZUNhcHR1cmUiLCJsaW5lUmVwbGFjZW1lbnQiLCJleGVjIiwiZ3JvdXBzIiwiaHRtbEJsb2NrVHlwZSIsImhlYWRpbmdMaW5lIiwiaGVhZGluZ0xpbmVUeXBlIiwiZ2V0QW5jaG9yIiwid2luZG93Iiwic3RhcnROb2RlIiwiYW5jaG9yTm9kZSIsImZvY3VzTm9kZSIsIm9mZnNldCIsImFuY2hvck9mZnNldCIsImZvY3VzT2Zmc2V0Iiwicm93IiwiY29sIiwiY29tcHV0ZUNvbHVtbiIsIm5vZGUiLCJwcmV2aW91c1NpYmxpbmciLCJfYSIsImFyZ3VtZW50cyIsImNvbXB1dGVOb2RlQW5kT2Zmc2V0Iiwid2luZG93U2VsZWN0aW9uIiwic2V0QmFzZUFuZEV4dGVudCIsInRleHQiLCJiZWdpbm5pbmciLCJpbnNlcnRlZExpbmVzIiwibGluZUJlZm9yZSIsInN1YnN0ciIsImxpbmVFbmQiLCJlbmRDb2xQb3MiLCJzcGxpY2VMaW5lcyIsInN0YXJ0Q29sIiwiZW5kQ29sIiwibGVmdCIsIm1pZCIsInJpZ2h0IiwibGlzdGVuZXIiLCJsaW5lc0RpcnR5IiwiaW5wdXRFdmVudCIsImlucHV0VHlwZSIsImNsZWFyRGlydHlGbGFnIiwicHJvY2Vzc05ld1BhcmFncmFwaCIsImZpeE5vZGVIaWVyYXJjaHkiLCJ1cGRhdGVMaW5lQ29udGVudHNBbmRGb3JtYXR0aW5nIiwiX2UiLCJmaXJlU2VsZWN0aW9uIiwiY2xpcGJvYXJkRGF0YSIsImdldERhdGEiLCJmaXJlRHJvcCIsImRhdGFUcmFuc2ZlciIsIm9yaWdpbmFsU3RyaW5nIiwicHJvY2Vzc2VkIiwic3RhY2siLCJjYXAiLCJwb3RlbnRpYWxMaW5rIiwicG90ZW50aWFsSW1hZ2UiLCJyZXN1bHQiLCJwYXJzZUxpbmtPckltYWdlIiwib3V0cHV0IiwiY2hhckNvdW50IiwiZGVsaW1Db3VudCIsImRlbGltU3RyaW5nIiwiY3VycmVudERlbGltaXRlciIsInByZWNlZGluZyIsImZvbGxvd2luZyIsInB1bmN0dWF0aW9uRm9sbG93cyIsInB1bmN0dWF0aW9uUHJlY2VkZXMiLCJ3aGl0ZXNwYWNlRm9sbG93cyIsIndoaXRlc3BhY2VQcmVjZWRlcyIsImNhbk9wZW4iLCJjYW5DbG9zZSIsInN0YWNrUG9pbnRlciIsImRlbGltaXRlciIsImVudHJ5IiwiY291bnQiLCJjb25zdW1lZCIsIm5vZGVUeXBlIiwiTm9kZSIsIlRFWFRfTk9ERSIsInRleHRDb250ZW50IiwiYmluZFJpZ2h0IiwiY2hpbGRyZW5Db21wbGV0ZSIsInJ2Iiwibm9kZVZhbHVlIiwidXBkYXRlTGluZUNvbnRlbnRzIiwibGluZURlbHRhIiwiY2hpbGRFbGVtZW50Q291bnQiLCJmaXJzdENoYW5nZWRMaW5lIiwibGFzdENoYW5nZWRMaW5lIiwibGluZXNUb0RlbGV0ZSIsImxpbmVzVG9BZGQiLCJsaW5lIiwiY3QiLCJzZWwiLCJjb250aW51YWJsZVR5cGUiLCJjaGVja0xpbmUiLCJzdGFydExpbmUiLCJsaW5lc1RvSW5zZXJ0IiwiYWRqdXN0TGluZUVsZW1lbnRzIiwiaW5zZXJ0ZWRCbGFuayIsImluc2VydGVkRGlydHkiLCJzcGxpY2UiLCJvcmlnaW5hbENoaWxkcmVuIiwiZnJvbSIsInJlcGxhY2VDaGlsZCIsImNoaWxkIiwicGFyZW50IiwiX2xlbiIsIm5ld0NoaWxkcmVuIiwiX2tleSIsImZvckVhY2giLCJuZXdDaGlsZCIsIkVMRU1FTlRfTk9ERSIsImRpdldyYXBwZXIiLCJncmFuZENoaWxkcmVuIiwic29tZSIsImdyYW5kQ2hpbGQiLCJpc0ltYWdlIiwidGV4dE9mZnNldCIsIm9wZW5lciIsImN1cnJlbnRPZmZzZXQiLCJicmFja2V0TGV2ZWwiLCJsaW5rVGV4dCIsImxpbmtSZWYiLCJsaW5rRGV0YWlscyIsInRleHRPdXRlciIsIm5leHRDaGFyIiwidHJpbSIsInBhcmVudGhlc2lzTGV2ZWwiLCJpbmxpbmVPdXRlciIsInZhbGlkIiwibGFiZWwiLCJsYWJlbENsYXNzIiwiY29tcHV0ZUNvbW1vbkFuY2VzdG9yIiwibm9kZTEiLCJub2RlMiIsImFuY2VzdHJ5IiwidW5zaGlmdCIsImFuY2VzdHJ5MSIsImFuY2VzdHJ5MiIsImNvbXB1dGVFbmNsb3NpbmdNYXJrdXBOb2RlIiwiaW5jbHVkZXMiLCJnZXRDb21tYW5kU3RhdGUiLCJjbWQiLCJtYXJrdXBOb2RlIiwibGVuIiwibGVhZGluZyIsInRyYWlsaW5nIiwiaXNDb2xsYXBzZWQiLCJhbmNlc3RvciIsInRvZ2dsZUNvbW1hbmRTdGF0ZSJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0lBQUEsTUFBTUEsR0FBRyxHQUEyQjtJQUNsQ0MsRUFBQUEsVUFBVSxFQUFFLENBQTJSLHlSQUFBLENBQUE7SUFDdlNDLEVBQUFBLElBQUksRUFBRSxDQUEwWSx3WUFBQSxDQUFBO0lBQ2haQyxFQUNBQyxJQUFJLEVBQUUsQ0FBK1UsNlVBQUEsQ0FBQTtJQUNyVkMsRUFBQUEsRUFBRSxFQUFFLENBQWdLLDhKQUFBLENBQUE7SUFDcEtDLEVBQUFBLEVBQUUsRUFBRSxDQUFrSyxnS0FBQSxDQUFBO0lBQ3RLQyxFQUFBQSxFQUFFLEVBQUUsQ0FBaUksK0hBQUEsQ0FBQTtJQUNySUMsRUFBQUEsS0FBSyxFQUFFLENBQStILDZIQUFBLENBQUE7SUFDdElDLEVBQUFBLE1BQU0sRUFBRSxDQUFpSCwrR0FBQSxDQUFBO0lBQ3pIQyxFQUFBQSxJQUFJLEVBQUUsQ0FBMnVDLHl1Q0FBQSxDQUFBO0lBQ2p2Q0MsRUFBQUEsRUFBRSxFQUFFLENBQXF0QixtdEJBQUEsQ0FBQTtJQUN6dEJDLEVBQUFBLElBQUksRUFBRSxDQUFzc0Isb3NCQUFBLENBQUE7SUFDNXNCQyxFQUFBQSxhQUFhLEVBQUUsQ0FBNFgsMFhBQUEsQ0FBQTtJQUMzWUMsRUFBQUEsRUFBRSxFQUFFLENBQTZRLDJR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QWdCLEVBQUU7WUFDekJ2SCxNQUFNLENBQUNDLE1BQU0sQ0FBQyxJQUFJLENBQUNzSCxnQkFBZ0IsRUFBRXBHLFlBQVksQ0FBQztJQUNwRCxPQUFDLE1BQU07WUFDTCxJQUFJLENBQUNvRyxnQkFBZ0IsR0FBR3ZILE1BQU0sQ0FBQ0MsTUFBTSxDQUFDLEVBQUUsRUFBRWtCLFlBQVksQ0FBQztJQUN6RDtVQUNBLEtBQUssSUFBSWtOLFFBQVEsSUFBSSxJQUFJLENBQUM3RyxTQUFTLENBQUNFLFNBQVMsRUFBRTtJQUM3QzJHLFFBQUFBLFFBQVEsQ0FBQztJQUNQbFEsVUFBQUEsS0FBSyxFQUFFQSxLQUFNO0lBQ2JDLFVBQUFBLE1BQU0sRUFBRUEsTUFBTztjQUNmK0MsWUFBWSxFQUFFLElBQUksQ0FBQ29HO0lBQ3BCLFNBQUEsQ0FBQztJQUNKO0lBQ0Y7SUFDRjtJQUNEOzs7Ozs7Ozs7IiwieF9nb29nbGVfaWdub3JlTGlzdCI6WzIsMyw0LDUsNiw3LDgsOSwxMCwxMSwxMiwxMywxNCwxNSwxNiwxNywxOCwxOSwyMCwyMSwyMiwyMywyNCwyNSwyNiwyNywyOCwyOSwzMCwzMSwzMiwzMywzNCwzNSwzNiwzNywzOCwzOSw0MCw0MSw0Miw0Myw0NCw0NSw0Niw0Nyw0OCw0OV19{"version":3,"file":"index.js","sources":["src/svg/svg.ts","src/TinyMDECommandBar.ts","node_modules/core-js/internals/global-this.js","node_modules/core-js/internals/fails.js","node_modules/core-js/internals/descriptors.js","node_modules/core-js/internals/function-bind-native.js","node_modules/core-js/internals/function-uncurry-this.js","node_modules/core-js/internals/is-callable.js","node_modules/core-js/internals/is-null-or-undefined.js","node_modules/core-js/internals/require-object-coercible.js","node_modules/core-js/internals/to-object.js","node_modules/core-js/internals/has-own-property.js","node_modules/core-js/internals/function-name.js","node_modules/core-js/internals/is-pure.js","node_modules/core-js/internals/define-global-property.js","node_modules/core-js/internals/shared-store.js","node_modules/core-js/internals/inspect-source.js","node_modules/core-js/internals/weak-map-basic-detection.js","node_modules/core-js/internals/is-object.js","node_modules/core-js/internals/document-create-element.js","node_modules/core-js/internals/ie8-dom-define.js","node_modules/core-js/internals/v8-prototype-define-bug.js","node_modules/core-js/internals/an-object.js","node_modules/core-js/internals/function-call.js","node_modules/core-js/internals/get-built-in.js","node_modules/core-js/internals/object-is-prototype-of.js","node_modules/core-js/internals/environment-user-agent.js","node_modules/core-js/internals/environment-v8-version.js","node_modules/core-js/internals/symbol-constructor-detection.js","node_modules/core-js/internals/use-symbol-as-uid.js","node_modules/core-js/internals/is-symbol.js","node_modules/core-js/internals/try-to-string.js","node_modules/core-js/internals/a-callable.js","node_modules/core-js/internals/get-method.js","node_modules/core-js/internals/ordinary-to-primitive.js","node_modules/core-js/internals/shared.js","node_modules/core-js/internals/uid.js","node_modules/core-js/internals/well-known-symbol.js","node_modules/core-js/internals/to-primitive.js","node_modules/core-js/internals/to-property-key.js","node_modules/core-js/internals/object-define-property.js","node_modules/core-js/internals/create-property-descriptor.js","node_modules/core-js/internals/create-non-enumerable-property.js","node_modules/core-js/internals/shared-key.js","node_modules/core-js/internals/hidden-keys.js","node_modules/core-js/internals/internal-state.js","node_modules/core-js/internals/make-built-in.js","node_modules/core-js/internals/define-built-in-accessor.js","node_modules/core-js/internals/regexp-flags.js","node_modules/core-js/modules/es.regexp.flags.js","src/grammar.ts","src/TinyMDE.ts"],"sourcesContent":["const svg: Record<string, string> = {\n blockquote: `<svg height=\"18\" width=\"18\"><rect width=\"5\" height=\"5\" x=\"3\" y=\"4\" ry=\"1\"/><rect ry=\"1\" y=\"4\" x=\"10\" height=\"5\" width=\"5\"/><path d=\"M8 6.999v3c0 1-1 3-1 3s-.331 1-1.331 1h-1c-1 0-.669-1-.669-1s1-2 1-3v-3zm7 0v3c0 1-1 3-1 3s-.331 1-1.331 1h-1c-1 0-.669-1-.669-1s1-2 1-3v-3z\"/></svg>`,\n bold: `<svg height=\"18\" width=\"18\"><path d=\"M4 2a1 1 0 00-1 1v12a1 1 0 001 1h6c4 0 5-2 5-4 0-1.322-.434-2.636-1.885-3.381C13.772 7.885 14 6.945 14 6c0-2-1-4-5-4zm1 2h4c1.668 0 2.32.393 2.6.672.28.279.4.662.4 1.328s-.12 1.057-.4 1.338c-.275.274-1.014.646-2.6.662H5zm5 6c1.666.005 2.318.388 2.596.666.277.278.404.667.404 1.334s-.127 1.06-.404 1.338c-.278.278-.93.66-2.596.662l-4.992.004L5 10z\"/></svg>`,\n clear_formatting: `<svg height=\"18\" width=\"18\"><path d=\"M11.03 1a1 1 0 00-.74.3l-9 9a1 1 0 000 1.4l4 4A1 1 0 006 16h2a1 1 0 00.7-.3l8-8a1 1 0 000-1.4l-5-5a1 1 0 00-.67-.3zM8.7 5.7l3.58 3.6L7.6 14H6.4l-3-3 5.3-5.3z\"/><rect ry=\".8\" rx=\".8\" y=\"14\" x=\"16\" height=\"2\" width=\"2\"/><rect width=\"2\" height=\"2\" x=\"13\" y=\"14\" rx=\".8\" ry=\".8\"/><rect ry=\".8\" rx=\".8\" y=\"14\" x=\"10\" height=\"2\" width=\"2\"/></svg>`,\n code: `<svg height=\"18\" width=\"18\"><path d=\"M13.5 2.994a.5.5 0 00-.5.5.5.5 0 000 .034V4.53a5.993 5.993 0 00-7.451-.445A6 6 0 1012.45 13.9a5.99 5.99 0 001.346-1.334.5.5 0 00.096-.101.5.5 0 00-.12-.698.5.5 0 00-.697.12l-.004-.005a5 5 0 01-1.197 1.2 5 5 0 111.215-6.965.5.5 0 00.697.12.5.5 0 00.211-.44V4.745H14V3.493a.5.5 0 00-.5-.5z\"/></svg>`,\n h1: `<svg height=\"18\" width=\"18\"><path d=\"M3 2s0-1 1-1h1c1 0 1 1 1 1v6h6V2s0-1 1-1h1c1 0 1 1 1 1v14s0 1-1 1h-1c-1 0-1-1-1-1v-6H6v6s0 1-1 1H4c-1 0-1-1-1-1z\"/></svg>`,\n h2: `<svg height=\"18\" width=\"18\"><path d=\"M4 2s0-1 1-1 1 1 1 1v6c1-1 2-1 4-1 3 0 4 2 4 4v5s0 1-1 1-1-1-1-1v-5c0-1.094-1-2-2-2-2 0-3 0-4 2v5s0 1-1 1-1-1-1-1z\"/></svg>`,\n hr: `<svg height=\"18\" width=\"18\"><rect ry=\"1\" y=\"8\" height=\"2\" width=\"18\" style=\"font-variation-settings:normal;marker:none\"/></svg>`,\n image: `<svg height=\"18\" width=\"18\"><path d=\"M1 2v14h16V2H1zm2 2h12v7l-3-3-4 4-2-2-3 3V4z\"/><circle r=\"1.5\" cy=\"6.5\" cx=\"5.5\"/></svg>`,\n italic: `<svg height=\"18\" width=\"18\"><path d=\"M9 2a1 1 0 000 2L7 14a1 1 0 100 2h2a1 1 0 000-2l2-10a1 1 0 100-2z\"/></svg>`,\n link: `<svg height=\"18\" width=\"18\"><path d=\"M9.07 5.18a3.9 3.9 0 00-1.52.43C6.31 6.22 5.3 7.29 4.3 8.29c-1 1-2.07 2.02-2.68 3.26-.31.62-.5 1.33-.41 2.07.09.75.48 1.47 1.1 2.09.61.61 1.33 1 2.08 1.1.74.09 1.45-.1 2.07-.42 1.24-.61 2.26-1.68 3.26-2.68.46-.47.94-.94 1.39-1.44l-.43.26c-.68.34-1.49.56-2.36.46-.2-.03-.4-.08-.6-.14-.79.76-1.55 1.45-2.16 1.76-.38.19-.67.24-.92.21-.26-.03-.54-.14-.92-.53-.39-.38-.5-.66-.53-.91-.03-.26.02-.55.21-.93.39-.76 1.32-1.74 2.32-2.74 1-1 1.98-1.93 2.74-2.32.38-.19.67-.24.93-.21.25.03.53.14.91.53.39.38.5.66.53.92v.06l1.12-1.06.44-.47c-.18-.3-.4-.6-.67-.87-.62-.61-1.34-1-2.09-1.1a3.08 3.08 0 00-.55-.01z\"/><path d=\"M13.07.86a3.9 3.9 0 00-1.52.43c-1.24.62-2.26 1.69-3.26 2.69-.46.47-.94.94-1.39 1.43.15-.08.28-.18.43-.25a4.4 4.4 0 012.36-.46c.2.02.4.07.6.14.79-.77 1.55-1.46 2.16-1.76.38-.19.67-.25.93-.21.25.03.53.14.91.52.39.38.5.66.53.92.03.26-.02.55-.21.93-.39.76-1.32 1.74-2.32 2.74-1 1-1.98 1.93-2.74 2.31-.38.2-.67.25-.93.22-.25-.04-.53-.15-.91-.53-.39-.38-.5-.66-.53-.92V9c-.36.33-.73.67-1.12 1.06l-.43.46c.17.3.4.6.66.87.62.62 1.34 1 2.08 1.1.75.1 1.46-.1 2.08-.41 1.24-.62 2.26-1.69 3.26-2.69s2.07-2.02 2.68-3.26c.31-.62.5-1.32.41-2.07a3.63 3.63 0 00-1.1-2.08c-.61-.62-1.33-1-2.07-1.1a3.08 3.08 0 00-.56-.02z\"/></svg>`,\n ol: `<svg height=\"18\" width=\"18\"><path d=\"M1.5 7a.5.5 0 100 1h1a.5.5 0 01.5.5c0 .164-.08.31-.14.355l-1.655 1.25A.492.492 0 001 10.5a.5.5 0 00.5.5h2a.5.5 0 000-1H3l.398-.299A1.5 1.5 0 002.5 7z\"/><path d=\"M1.5 12c-.667 0-.667 1 0 1h1.25c.333 0 .333.5 0 .5H2.5c-.667 0-.667 1 0 1h.25c.333 0 .333.5 0 .5H1.5c-.667 0-.667 1 0 1h1c.398 0 .78-.131 1.06-.365.282-.235.44-.554.44-.885a1.121 1.121 0 00-.303-.75c.191-.204.3-.47.303-.75 0-.332-.158-.651-.44-.885-.3-.241-.675-.37-1.06-.365z\"/><rect y=\"13\" x=\"6\" height=\"2\" width=\"12\" ry=\"1\"/><rect ry=\"1\" width=\"12\" height=\"2\" x=\"6\" y=\"8\"/><rect y=\"3\" x=\"6\" height=\"2\" width=\"12\" ry=\"1\"/><path d=\"M1.5 2a.5.5 0 100 1H2v2h-.5a.5.5 0 100 1h2a.5.5 0 100-1H3V2.5c0-.277-.223-.5-.5-.5z\"/></svg>`,\n redo: `<svg height=\"18\" width=\"18\"><path d=\"M 7.2695308,2.7050781 C 8.1128755,2.7081581 8.9529895,2.8712156 9.730469,3.1347656 11.408874,3.7037121 12.90142,4.6847104 14,5.6367188 V 4 h 2 V 9 H 11 V 7 h 1.509765 C 11.59075,6.2485173 10.340208,5.453808 9.0878904,5.0292969 7.4309398,4.4676231 5.9453458,4.468717 4.7070308,5.7070312 c -1.225014,1.2250142 -1.409769,2.7206953 -0.779297,4.2968748 0.630472,1.57618 2.167475,3.158006 4.4433598,4.06836 l -0.7421878,1.855468 c -2.724115,-1.089646 -4.687112,-3.00782 -5.55664,-5.18164 -0.869528,-2.1738206 -0.554283,-4.6781393 1.220703,-6.4531252 0.923857,-0.9238568 2.015388,-1.388828 3.134765,-1.5351563 0.279845,-0.036582 0.560682,-0.053761 0.841797,-0.052734 z\" /></svg>`,\n strikethrough: `<svg width=\"18\" height=\"18\"><path d=\"M10 2C6 2 4 4 4 6c0 .338.08.672.193 1h2.34C6.113 6.629 6 6.295 6 6c0-.334.117-.725.691-1.154C7.265 4.416 8.331 4 10 4h3a1 1 0 000-2zm1.477 9c.413.368.523.706.523 1 0 .334-.127.712-.701 1.143-.575.43-1.632.85-3.299.857l-1.006.007V14H5a1 1 0 000 2h3c4 0 6-2 6-4 0-.338-.081-.672-.195-1z\"/><rect ry=\"1\" y=\"8\" x=\"1\" height=\"2\" width=\"16\"/></svg>`,\n ul: `<svg height=\"18\" width=\"18\"><circle cx=\"2\" cy=\"9\" r=\"2\"/><circle cy=\"4\" cx=\"2\" r=\"2\"/><rect y=\"3\" x=\"6\" height=\"2\" width=\"12\" ry=\"1\"/><circle cx=\"2\" cy=\"14\" r=\"2\"/><rect ry=\"1\" width=\"12\" height=\"2\" x=\"6\" y=\"8\"/><rect y=\"13\" x=\"6\" height=\"2\" width=\"12\" ry=\"1\"/></svg>`,\n undo: `<svg height=\"18\" width=\"18\"><path d=\"M 10.730469 2.7050781 C 9.8871243 2.7081594 9.0470103 2.8712156 8.2695312 3.1347656 C 6.5911256 3.7037121 5.0985797 4.6847104 4 5.6367188 L 4 4 L 2 4 L 2 9 L 7 9 L 7 7 L 5.4902344 7 C 6.4092499 6.2485173 7.6597914 5.453808 8.9121094 5.0292969 C 10.56906 4.4676231 12.054654 4.468717 13.292969 5.7070312 C 14.517983 6.9320454 14.702738 8.4277265 14.072266 10.003906 C 13.441794 11.580086 11.904791 13.161912 9.6289062 14.072266 L 10.371094 15.927734 C 13.095209 14.838088 15.058206 12.919914 15.927734 10.746094 C 16.797262 8.5722734 16.482017 6.0679547 14.707031 4.2929688 C 13.783174 3.369112 12.691643 2.9041408 11.572266 2.7578125 C 11.292421 2.7212304 11.011584 2.704051 10.730469 2.7050781 z \" /></svg>\n`\n};\n\nexport default svg;","import svg from \"./svg/svg\";\nimport { Editor, Position, SelectionEvent } from \"./TinyMDE\";\n\nconst isMacLike = /(Mac|iPhone|iPod|iPad)/i.test(\n typeof navigator !== \"undefined\" ? navigator.platform : \"\"\n);\n\nexport interface CommandAction {\n (editor: Editor): void;\n}\n\nexport interface CommandEnabled {\n (editor: Editor, focus?: Position, anchor?: Position): boolean | null;\n}\n\nexport interface CommandDefinition {\n name: string;\n action: string | CommandAction;\n innerHTML: string;\n title: string;\n hotkey?: string;\n enabled?: CommandEnabled;\n}\n\nexport interface CommandBarProps {\n element?: string | HTMLElement;\n editor?: Editor;\n commands?: (string | CommandDefinition)[];\n}\n\ninterface Hotkey {\n modifiers: string[];\n command: string;\n key?: string;\n code?: string;\n}\n\nconst DefaultCommands: Record<string, CommandDefinition> = {\n bold: {\n name: \"bold\",\n action: \"bold\",\n innerHTML: svg.bold,\n title: \"Bold\",\n hotkey: \"Mod-B\",\n },\n italic: {\n name: \"italic\",\n action: \"italic\",\n innerHTML: svg.italic,\n title: \"Italic\",\n hotkey: \"Mod-I\",\n },\n strikethrough: {\n name: \"strikethrough\",\n action: \"strikethrough\",\n innerHTML: svg.strikethrough,\n title: \"Strikethrough\",\n hotkey: \"Mod2-Shift-5\",\n },\n code: {\n name: \"code\",\n action: \"code\",\n innerHTML: svg.code,\n title: \"Format as code\",\n },\n h1: {\n name: \"h1\",\n action: \"h1\",\n innerHTML: svg.h1,\n title: \"Level 1 heading\",\n hotkey: \"Mod-Shift-1\",\n },\n h2: {\n name: \"h2\",\n action: \"h2\",\n innerHTML: svg.h2,\n title: \"Level 2 heading\",\n hotkey: \"Mod-Shift-2\",\n },\n ul: {\n name: \"ul\",\n action: \"ul\",\n innerHTML: svg.ul,\n title: \"Bulleted list\",\n },\n ol: {\n name: \"ol\",\n action: \"ol\",\n innerHTML: svg.ol,\n title: \"Numbered list\",\n },\n blockquote: {\n name: \"blockquote\",\n action: \"blockquote\",\n innerHTML: svg.blockquote,\n title: \"Quote\",\n hotkey: \"Mod2-Shift-Q\",\n },\n insertLink: {\n name: \"insertLink\",\n action: (editor: Editor) => {\n if ((editor as any).isInlineFormattingAllowed()) editor.wrapSelection(\"[\", \"]()\");\n },\n enabled: (editor: Editor, focus?: Position, anchor?: Position) =>\n (editor as any).isInlineFormattingAllowed(focus, anchor) ? false : null,\n innerHTML: svg.link,\n title: \"Insert link\",\n hotkey: \"Mod-K\",\n },\n insertImage: {\n name: \"insertImage\",\n action: (editor: Editor) => {\n if ((editor as any).isInlineFormattingAllowed()) editor.wrapSelection(\"![\", \"]()\");\n },\n enabled: (editor: Editor, focus?: Position, anchor?: Position) =>\n (editor as any).isInlineFormattingAllowed(focus, anchor) ? false : null,\n innerHTML: svg.image,\n title: \"Insert image\",\n hotkey: \"Mod2-Shift-I\",\n },\n hr: {\n name: \"hr\",\n action: (editor: Editor) => editor.paste(\"\\n***\\n\"),\n enabled: () => false,\n innerHTML: svg.hr,\n title: \"Insert horizontal line\",\n hotkey: \"Mod2-Shift-L\",\n },\n undo: {\n name: \"undo\",\n action: (editor: Editor) => editor.undo(),\n enabled: (editor: Editor) => (editor.canUndo ? false : null),\n innerHTML: svg.undo,\n title: \"Undo\",\n },\n redo: {\n name: \"redo\",\n action: (editor: Editor) => editor.redo(),\n enabled: (editor: Editor) => (editor.canRedo ? false : null),\n innerHTML: svg.redo,\n title: \"Redo\",\n },\n};\n\nexport class CommandBar {\n public e: HTMLDivElement | null = null;\n public editor: Editor | null = null;\n public commands: Record<string, CommandDefinition> = {};\n public buttons: Record<string, HTMLDivElement> = {};\n public state: Record<string, boolean | null> = {};\n private hotkeys: Hotkey[] = [];\n\n constructor(props: CommandBarProps) {\n this.e = null;\n this.editor = null;\n this.commands = {};\n this.buttons = {};\n this.state = {};\n this.hotkeys = [];\n\n let element: HTMLElement | null = null;\n if (typeof props.element === 'string') {\n element = document.getElementById(props.element);\n } else if (props.element) {\n element = props.element;\n }\n \n if (!element) {\n element = document.body;\n }\n\n this.createCommandBarElement(\n element,\n props.commands || [\n \"bold\",\n \"italic\",\n \"strikethrough\",\n \"|\",\n \"code\",\n \"|\",\n \"h1\",\n \"h2\",\n \"|\",\n \"ul\",\n \"ol\",\n \"|\",\n \"blockquote\",\n \"hr\",\n \"|\",\n \"undo\",\n \"redo\",\n \"|\",\n \"insertLink\",\n \"insertImage\",\n ]\n );\n document.addEventListener(\"keydown\", (e) => this.handleKeydown(e));\n if (props.editor) this.setEditor(props.editor);\n }\n\n private createCommandBarElement(parentElement: HTMLElement, commands: (string | CommandDefinition)[]): void {\n this.e = document.createElement(\"div\");\n this.e.className = \"TMCommandBar\";\n\n for (let command of commands) {\n if (command === \"|\") {\n let el = document.createElement(\"div\");\n el.className = \"TMCommandDivider\";\n this.e.appendChild(el);\n } else {\n let commandName: string;\n if (typeof command === \"string\") {\n if (DefaultCommands[command]) {\n commandName = command;\n this.commands[commandName] = DefaultCommands[commandName];\n } else {\n continue;\n }\n } else if (typeof command === \"object\" && command.name) {\n commandName = command.name;\n this.commands[commandName] = {} as CommandDefinition;\n if (DefaultCommands[commandName]) {\n Object.assign(this.commands[commandName], DefaultCommands[commandName]);\n }\n Object.assign(this.commands[commandName], command);\n } else {\n continue;\n }\n\n let title = this.commands[commandName].title || commandName;\n\n if (this.commands[commandName].hotkey) {\n const keys = this.commands[commandName].hotkey!.split(\"-\");\n let modifiers: string[] = [];\n let modifierexplanation: string[] = [];\n \n for (let i = 0; i < keys.length - 1; i++) {\n switch (keys[i]) {\n case \"Ctrl\":\n modifiers.push(\"ctrlKey\");\n modifierexplanation.push(\"Ctrl\");\n break;\n case \"Cmd\":\n modifiers.push(\"metaKey\");\n modifierexplanation.push(\"⌘\");\n break;\n case \"Alt\":\n modifiers.push(\"altKey\");\n modifierexplanation.push(\"Alt\");\n break;\n case \"Option\":\n modifiers.push(\"altKey\");\n modifierexplanation.push(\"⌥\");\n break;\n case \"Win\":\n modifiers.push(\"metaKey\");\n modifierexplanation.push(\"⊞ Win\");\n break;\n case \"Shift\":\n modifiers.push(\"shiftKey\");\n modifierexplanation.push(\"⇧\");\n break;\n case \"Mod\":\n if (isMacLike) {\n modifiers.push(\"metaKey\");\n modifierexplanation.push(\"⌘\");\n } else {\n modifiers.push(\"ctrlKey\");\n modifierexplanation.push(\"Ctrl\");\n }\n break;\n case \"Mod2\":\n modifiers.push(\"altKey\");\n if (isMacLike) modifierexplanation.push(\"⌥\");\n else modifierexplanation.push(\"Alt\");\n break;\n }\n }\n \n modifierexplanation.push(keys[keys.length - 1]);\n let hotkey: Hotkey = {\n modifiers: modifiers,\n command: commandName,\n };\n \n if (keys[keys.length - 1].match(/^[0-9]$/)) {\n hotkey.code = `Digit${keys[keys.length - 1]}`;\n } else {\n hotkey.key = keys[keys.length - 1].toLowerCase();\n }\n this.hotkeys.push(hotkey);\n title = title.concat(` (${modifierexplanation.join(\"+\")})`);\n }\n\n this.buttons[commandName] = document.createElement(\"div\");\n this.buttons[commandName].className = \"TMCommandButton TMCommandButton_Disabled\";\n this.buttons[commandName].title = title;\n this.buttons[commandName].innerHTML = this.commands[commandName].innerHTML;\n\n this.buttons[commandName].addEventListener(\"mousedown\", (e) =>\n this.handleClick(commandName, e)\n );\n this.e.appendChild(this.buttons[commandName]);\n }\n }\n parentElement.appendChild(this.e);\n }\n\n private handleClick(commandName: string, event: Event): void {\n if (!this.editor) return;\n event.preventDefault();\n if (typeof this.commands[commandName].action === \"string\") {\n if (this.state[commandName] === false)\n (this.editor as any).setCommandState(commandName, true);\n else (this.editor as any).setCommandState(commandName, false);\n } else if (typeof this.commands[commandName].action === \"function\") {\n (this.commands[commandName].action as CommandAction)(this.editor);\n }\n }\n\n public setEditor(editor: Editor): void {\n this.editor = editor;\n editor.addEventListener(\"selection\", (e) => this.handleSelection(e));\n }\n\n private handleSelection(event: SelectionEvent): void {\n if (event.commandState) {\n for (let command in this.commands) {\n if (event.commandState[command] === undefined) {\n if (this.commands[command].enabled) {\n this.state[command] = this.commands[command].enabled!(\n this.editor!,\n event.focus,\n event.anchor\n );\n } else {\n this.state[command] = event.focus ? false : null;\n }\n } else {\n this.state[command] = event.commandState[command];\n }\n\n if (this.state[command] === true) {\n this.buttons[command].className = \"TMCommandButton TMCommandButton_Active\";\n } else if (this.state[command] === false) {\n this.buttons[command].className = \"TMCommandButton TMCommandButton_Inactive\";\n } else {\n this.buttons[command].className = \"TMCommandButton TMCommandButton_Disabled\";\n }\n }\n }\n }\n\n private handleKeydown(event: KeyboardEvent): void {\n outer: for (let hotkey of this.hotkeys) {\n if (\n (hotkey.key && event.key.toLowerCase() === hotkey.key) ||\n (hotkey.code && event.code === hotkey.code)\n ) {\n for (let modifier of hotkey.modifiers) {\n if (!(event as any)[modifier]) continue outer;\n }\n this.handleClick(hotkey.command, event);\n return;\n }\n }\n }\n}\n\nexport default CommandBar;","'use strict';\nvar check = function (it) {\n return it && it.Math === Math && it;\n};\n\n// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\nmodule.exports =\n // eslint-disable-next-line es/no-global-this -- safe\n check(typeof globalThis == 'object' && globalThis) ||\n check(typeof window == 'object' && window) ||\n // eslint-disable-next-line no-restricted-globals -- safe\n check(typeof self == 'object' && self) ||\n check(typeof global == 'object' && global) ||\n check(typeof this == 'object' && this) ||\n // eslint-disable-next-line no-new-func -- fallback\n (function () { return this; })() || Function('return this')();\n","'use strict';\nmodule.exports = function (exec) {\n try {\n return !!exec();\n } catch (error) {\n return true;\n }\n};\n","'use strict';\nvar fails = require('../internals/fails');\n\n// Detect IE8's incomplete defineProperty implementation\nmodule.exports = !fails(function () {\n // eslint-disable-next-line es/no-object-defineproperty -- required for testing\n return Object.defineProperty({}, 1, { get: function () { return 7; } })[1] !== 7;\n});\n","'use strict';\nvar fails = require('../internals/fails');\n\nmodule.exports = !fails(function () {\n // eslint-disable-next-line es/no-function-prototype-bind -- safe\n var test = (function () { /* empty */ }).bind();\n // eslint-disable-next-line no-prototype-builtins -- safe\n return typeof test != 'function' || test.hasOwnProperty('prototype');\n});\n","'use strict';\nvar NATIVE_BIND = require('../internals/function-bind-native');\n\nvar FunctionPrototype = Function.prototype;\nvar call = FunctionPrototype.call;\n// eslint-disable-next-line es/no-function-prototype-bind -- safe\nvar uncurryThisWithBind = NATIVE_BIND && FunctionPrototype.bind.bind(call, call);\n\nmodule.exports = NATIVE_BIND ? uncurryThisWithBind : function (fn) {\n return function () {\n return call.apply(fn, arguments);\n };\n};\n","'use strict';\n// https://tc39.es/ecma262/#sec-IsHTMLDDA-internal-slot\nvar documentAll = typeof document == 'object' && document.all;\n\n// `IsCallable` abstract operation\n// https://tc39.es/ecma262/#sec-iscallable\n// eslint-disable-next-line unicorn/no-typeof-undefined -- required for testing\nmodule.exports = typeof documentAll == 'undefined' && documentAll !== undefined ? function (argument) {\n return typeof argument == 'function' || argument === documentAll;\n} : function (argument) {\n return typeof argument == 'function';\n};\n","'use strict';\n// we can't use just `it == null` since of `document.all` special case\n// https://tc39.es/ecma262/#sec-IsHTMLDDA-internal-slot-aec\nmodule.exports = function (it) {\n return it === null || it === undefined;\n};\n","'use strict';\nvar isNullOrUndefined = require('../internals/is-null-or-undefined');\n\nvar $TypeError = TypeError;\n\n// `RequireObjectCoercible` abstract operation\n// https://tc39.es/ecma262/#sec-requireobjectcoercible\nmodule.exports = function (it) {\n if (isNullOrUndefined(it)) throw new $TypeError(\"Can't call method on \" + it);\n return it;\n};\n","'use strict';\nvar requireObjectCoercible = require('../internals/require-object-coercible');\n\nvar $Object = Object;\n\n// `ToObject` abstract operation\n// https://tc39.es/ecma262/#sec-toobject\nmodule.exports = function (argument) {\n return $Object(requireObjectCoercible(argument));\n};\n","'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar toObject = require('../internals/to-object');\n\nvar hasOwnProperty = uncurryThis({}.hasOwnProperty);\n\n// `HasOwnProperty` abstract operation\n// https://tc39.es/ecma262/#sec-hasownproperty\n// eslint-disable-next-line es/no-object-hasown -- safe\nmodule.exports = Object.hasOwn || function hasOwn(it, key) {\n return hasOwnProperty(toObject(it), key);\n};\n","'use strict';\nvar DESCRIPTORS = require('../internals/descriptors');\nvar hasOwn = require('../internals/has-own-property');\n\nvar FunctionPrototype = Function.prototype;\n// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\nvar getDescriptor = DESCRIPTORS && Object.getOwnPropertyDescriptor;\n\nvar EXISTS = hasOwn(FunctionPrototype, 'name');\n// additional protection from minified / mangled / dropped function names\nvar PROPER = EXISTS && (function something() { /* empty */ }).name === 'something';\nvar CONFIGURABLE = EXISTS && (!DESCRIPTORS || (DESCRIPTORS && getDescriptor(FunctionPrototype, 'name').configurable));\n\nmodule.exports = {\n EXISTS: EXISTS,\n PROPER: PROPER,\n CONFIGURABLE: CONFIGURABLE\n};\n","'use strict';\nmodule.exports = false;\n","'use strict';\nvar globalThis = require('../internals/global-this');\n\n// eslint-disable-next-line es/no-object-defineproperty -- safe\nvar defineProperty = Object.defineProperty;\n\nmodule.exports = function (key, value) {\n try {\n defineProperty(globalThis, key, { value: value, configurable: true, writable: true });\n } catch (error) {\n globalThis[key] = value;\n } return value;\n};\n","'use strict';\nvar IS_PURE = require('../internals/is-pure');\nvar globalThis = require('../internals/global-this');\nvar defineGlobalProperty = require('../internals/define-global-property');\n\nvar SHARED = '__core-js_shared__';\nvar store = module.exports = globalThis[SHARED] || defineGlobalProperty(SHARED, {});\n\n(store.versions || (store.versions = [])).push({\n version: '3.42.0',\n mode: IS_PURE ? 'pure' : 'global',\n copyright: '© 2014-2025 Denis Pushkarev (zloirock.ru)',\n license: 'https://github.com/zloirock/core-js/blob/v3.42.0/LICENSE',\n source: 'https://github.com/zloirock/core-js'\n});\n","'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar isCallable = require('../internals/is-callable');\nvar store = require('../internals/shared-store');\n\nvar functionToString = uncurryThis(Function.toString);\n\n// this helper broken in `core-js@3.4.1-3.4.4`, so we can't use `shared` helper\nif (!isCallable(store.inspectSource)) {\n store.inspectSource = function (it) {\n return functionToString(it);\n };\n}\n\nmodule.exports = store.inspectSource;\n","'use strict';\nvar globalThis = require('../internals/global-this');\nvar isCallable = require('../internals/is-callable');\n\nvar WeakMap = globalThis.WeakMap;\n\nmodule.exports = isCallable(WeakMap) && /native code/.test(String(WeakMap));\n","'use strict';\nvar isCallable = require('../internals/is-callable');\n\nmodule.exports = function (it) {\n return typeof it == 'object' ? it !== null : isCallable(it);\n};\n","'use strict';\nvar globalThis = require('../internals/global-this');\nvar isObject = require('../internals/is-object');\n\nvar document = globalThis.document;\n// typeof document.createElement is 'object' in old IE\nvar EXISTS = isObject(document) && isObject(document.createElement);\n\nmodule.exports = function (it) {\n return EXISTS ? document.createElement(it) : {};\n};\n","'use strict';\nvar DESCRIPTORS = require('../internals/descriptors');\nvar fails = require('../internals/fails');\nvar createElement = require('../internals/document-create-element');\n\n// Thanks to IE8 for its funny defineProperty\nmodule.exports = !DESCRIPTORS && !fails(function () {\n // eslint-disable-next-line es/no-object-defineproperty -- required for testing\n return Object.defineProperty(createElement('div'), 'a', {\n get: function () { return 7; }\n }).a !== 7;\n});\n","'use strict';\nvar DESCRIPTORS = require('../internals/descriptors');\nvar fails = require('../internals/fails');\n\n// V8 ~ Chrome 36-\n// https://bugs.chromium.org/p/v8/issues/detail?id=3334\nmodule.exports = DESCRIPTORS && fails(function () {\n // eslint-disable-next-line es/no-object-defineproperty -- required for testing\n return Object.defineProperty(function () { /* empty */ }, 'prototype', {\n value: 42,\n writable: false\n }).prototype !== 42;\n});\n","'use strict';\nvar isObject = require('../internals/is-object');\n\nvar $String = String;\nvar $TypeError = TypeError;\n\n// `Assert: Type(argument) is Object`\nmodule.exports = function (argument) {\n if (isObject(argument)) return argument;\n throw new $TypeError($String(argument) + ' is not an object');\n};\n","'use strict';\nvar NATIVE_BIND = require('../internals/function-bind-native');\n\nvar call = Function.prototype.call;\n// eslint-disable-next-line es/no-function-prototype-bind -- safe\nmodule.exports = NATIVE_BIND ? call.bind(call) : function () {\n return call.apply(call, arguments);\n};\n","'use strict';\nvar globalThis = require('../internals/global-this');\nvar isCallable = require('../internals/is-callable');\n\nvar aFunction = function (argument) {\n return isCallable(argument) ? argument : undefined;\n};\n\nmodule.exports = function (namespace, method) {\n return arguments.length < 2 ? aFunction(globalThis[namespace]) : globalThis[namespace] && globalThis[namespace][method];\n};\n","'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\n\nmodule.exports = uncurryThis({}.isPrototypeOf);\n","'use strict';\nvar globalThis = require('../internals/global-this');\n\nvar navigator = globalThis.navigator;\nvar userAgent = navigator && navigator.userAgent;\n\nmodule.exports = userAgent ? String(userAgent) : '';\n","'use strict';\nvar globalThis = require('../internals/global-this');\nvar userAgent = require('../internals/environment-user-agent');\n\nvar process = globalThis.process;\nvar Deno = globalThis.Deno;\nvar versions = process && process.versions || Deno && Deno.version;\nvar v8 = versions && versions.v8;\nvar match, version;\n\nif (v8) {\n match = v8.split('.');\n // in old Chrome, versions of V8 isn't V8 = Chrome / 10\n // but their correct versions are not interesting for us\n version = match[0] > 0 && match[0] < 4 ? 1 : +(match[0] + match[1]);\n}\n\n// BrowserFS NodeJS `process` polyfill incorrectly set `.v8` to `0.0`\n// so check `userAgent` even if `.v8` exists, but 0\nif (!version && userAgent) {\n match = userAgent.match(/Edge\\/(\\d+)/);\n if (!match || match[1] >= 74) {\n match = userAgent.match(/Chrome\\/(\\d+)/);\n if (match) version = +match[1];\n }\n}\n\nmodule.exports = version;\n","'use strict';\n/* eslint-disable es/no-symbol -- required for testing */\nvar V8_VERSION = require('../internals/environment-v8-version');\nvar fails = require('../internals/fails');\nvar globalThis = require('../internals/global-this');\n\nvar $String = globalThis.String;\n\n// eslint-disable-next-line es/no-object-getownpropertysymbols -- required for testing\nmodule.exports = !!Object.getOwnPropertySymbols && !fails(function () {\n var symbol = Symbol('symbol detection');\n // Chrome 38 Symbol has incorrect toString conversion\n // `get-own-property-symbols` polyfill symbols converted to object are not Symbol instances\n // nb: Do not call `String` directly to avoid this being optimized out to `symbol+''` which will,\n // of course, fail.\n return !$String(symbol) || !(Object(symbol) instanceof Symbol) ||\n // Chrome 38-40 symbols are not inherited from DOM collections prototypes to instances\n !Symbol.sham && V8_VERSION && V8_VERSION < 41;\n});\n","'use strict';\n/* eslint-disable es/no-symbol -- required for testing */\nvar NATIVE_SYMBOL = require('../internals/symbol-constructor-detection');\n\nmodule.exports = NATIVE_SYMBOL &&\n !Symbol.sham &&\n typeof Symbol.iterator == 'symbol';\n","'use strict';\nvar getBuiltIn = require('../internals/get-built-in');\nvar isCallable = require('../internals/is-callable');\nvar isPrototypeOf = require('../internals/object-is-prototype-of');\nvar USE_SYMBOL_AS_UID = require('../internals/use-symbol-as-uid');\n\nvar $Object = Object;\n\nmodule.exports = USE_SYMBOL_AS_UID ? function (it) {\n return typeof it == 'symbol';\n} : function (it) {\n var $Symbol = getBuiltIn('Symbol');\n return isCallable($Symbol) && isPrototypeOf($Symbol.prototype, $Object(it));\n};\n","'use strict';\nvar $String = String;\n\nmodule.exports = function (argument) {\n try {\n return $String(argument);\n } catch (error) {\n return 'Object';\n }\n};\n","'use strict';\nvar isCallable = require('../internals/is-callable');\nvar tryToString = require('../internals/try-to-string');\n\nvar $TypeError = TypeError;\n\n// `Assert: IsCallable(argument) is true`\nmodule.exports = function (argument) {\n if (isCallable(argument)) return argument;\n throw new $TypeError(tryToString(argument) + ' is not a function');\n};\n","'use strict';\nvar aCallable = require('../internals/a-callable');\nvar isNullOrUndefined = require('../internals/is-null-or-undefined');\n\n// `GetMethod` abstract operation\n// https://tc39.es/ecma262/#sec-getmethod\nmodule.exports = function (V, P) {\n var func = V[P];\n return isNullOrUndefined(func) ? undefined : aCallable(func);\n};\n","'use strict';\nvar call = require('../internals/function-call');\nvar isCallable = require('../internals/is-callable');\nvar isObject = require('../internals/is-object');\n\nvar $TypeError = TypeError;\n\n// `OrdinaryToPrimitive` abstract operation\n// https://tc39.es/ecma262/#sec-ordinarytoprimitive\nmodule.exports = function (input, pref) {\n var fn, val;\n if (pref === 'string' && isCallable(fn = input.toString) && !isObject(val = call(fn, input))) return val;\n if (isCallable(fn = input.valueOf) && !isObject(val = call(fn, input))) return val;\n if (pref !== 'string' && isCallable(fn = input.toString) && !isObject(val = call(fn, input))) return val;\n throw new $TypeError(\"Can't convert object to primitive value\");\n};\n","'use strict';\nvar store = require('../internals/shared-store');\n\nmodule.exports = function (key, value) {\n return store[key] || (store[key] = value || {});\n};\n","'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\n\nvar id = 0;\nvar postfix = Math.random();\nvar toString = uncurryThis(1.0.toString);\n\nmodule.exports = function (key) {\n return 'Symbol(' + (key === undefined ? '' : key) + ')_' + toString(++id + postfix, 36);\n};\n","'use strict';\nvar globalThis = require('../internals/global-this');\nvar shared = require('../internals/shared');\nvar hasOwn = require('../internals/has-own-property');\nvar uid = require('../internals/uid');\nvar NATIVE_SYMBOL = require('../internals/symbol-constructor-detection');\nvar USE_SYMBOL_AS_UID = require('../internals/use-symbol-as-uid');\n\nvar Symbol = globalThis.Symbol;\nvar WellKnownSymbolsStore = shared('wks');\nvar createWellKnownSymbol = USE_SYMBOL_AS_UID ? Symbol['for'] || Symbol : Symbol && Symbol.withoutSetter || uid;\n\nmodule.exports = function (name) {\n if (!hasOwn(WellKnownSymbolsStore, name)) {\n WellKnownSymbolsStore[name] = NATIVE_SYMBOL && hasOwn(Symbol, name)\n ? Symbol[name]\n : createWellKnownSymbol('Symbol.' + name);\n } return WellKnownSymbolsStore[name];\n};\n","'use strict';\nvar call = require('../internals/function-call');\nvar isObject = require('../internals/is-object');\nvar isSymbol = require('../internals/is-symbol');\nvar getMethod = require('../internals/get-method');\nvar ordinaryToPrimitive = require('../internals/ordinary-to-primitive');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar $TypeError = TypeError;\nvar TO_PRIMITIVE = wellKnownSymbol('toPrimitive');\n\n// `ToPrimitive` abstract operation\n// https://tc39.es/ecma262/#sec-toprimitive\nmodule.exports = function (input, pref) {\n if (!isObject(input) || isSymbol(input)) return input;\n var exoticToPrim = getMethod(input, TO_PRIMITIVE);\n var result;\n if (exoticToPrim) {\n if (pref === undefined) pref = 'default';\n result = call(exoticToPrim, input, pref);\n if (!isObject(result) || isSymbol(result)) return result;\n throw new $TypeError(\"Can't convert object to primitive value\");\n }\n if (pref === undefined) pref = 'number';\n return ordinaryToPrimitive(input, pref);\n};\n","'use strict';\nvar toPrimitive = require('../internals/to-primitive');\nvar isSymbol = require('../internals/is-symbol');\n\n// `ToPropertyKey` abstract operation\n// https://tc39.es/ecma262/#sec-topropertykey\nmodule.exports = function (argument) {\n var key = toPrimitive(argument, 'string');\n return isSymbol(key) ? key : key + '';\n};\n","'use strict';\nvar DESCRIPTORS = require('../internals/descriptors');\nvar IE8_DOM_DEFINE = require('../internals/ie8-dom-define');\nvar V8_PROTOTYPE_DEFINE_BUG = require('../internals/v8-prototype-define-bug');\nvar anObject = require('../internals/an-object');\nvar toPropertyKey = require('../internals/to-property-key');\n\nvar $TypeError = TypeError;\n// eslint-disable-next-line es/no-object-defineproperty -- safe\nvar $defineProperty = Object.defineProperty;\n// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\nvar $getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\nvar ENUMERABLE = 'enumerable';\nvar CONFIGURABLE = 'configurable';\nvar WRITABLE = 'writable';\n\n// `Object.defineProperty` method\n// https://tc39.es/ecma262/#sec-object.defineproperty\nexports.f = DESCRIPTORS ? V8_PROTOTYPE_DEFINE_BUG ? function defineProperty(O, P, Attributes) {\n anObject(O);\n P = toPropertyKey(P);\n anObject(Attributes);\n if (typeof O === 'function' && P === 'prototype' && 'value' in Attributes && WRITABLE in Attributes && !Attributes[WRITABLE]) {\n var current = $getOwnPropertyDescriptor(O, P);\n if (current && current[WRITABLE]) {\n O[P] = Attributes.value;\n Attributes = {\n configurable: CONFIGURABLE in Attributes ? Attributes[CONFIGURABLE] : current[CONFIGURABLE],\n enumerable: ENUMERABLE in Attributes ? Attributes[ENUMERABLE] : current[ENUMERABLE],\n writable: false\n };\n }\n } return $defineProperty(O, P, Attributes);\n} : $defineProperty : function defineProperty(O, P, Attributes) {\n anObject(O);\n P = toPropertyKey(P);\n anObject(Attributes);\n if (IE8_DOM_DEFINE) try {\n return $defineProperty(O, P, Attributes);\n } catch (error) { /* empty */ }\n if ('get' in Attributes || 'set' in Attributes) throw new $TypeError('Accessors not supported');\n if ('value' in Attributes) O[P] = Attributes.value;\n return O;\n};\n","'use strict';\nmodule.exports = function (bitmap, value) {\n return {\n enumerable: !(bitmap & 1),\n configurable: !(bitmap & 2),\n writable: !(bitmap & 4),\n value: value\n };\n};\n","'use strict';\nvar DESCRIPTORS = require('../internals/descriptors');\nvar definePropertyModule = require('../internals/object-define-property');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\n\nmodule.exports = DESCRIPTORS ? function (object, key, value) {\n return definePropertyModule.f(object, key, createPropertyDescriptor(1, value));\n} : function (object, key, value) {\n object[key] = value;\n return object;\n};\n","'use strict';\nvar shared = require('../internals/shared');\nvar uid = require('../internals/uid');\n\nvar keys = shared('keys');\n\nmodule.exports = function (key) {\n return keys[key] || (keys[key] = uid(key));\n};\n","'use strict';\nmodule.exports = {};\n","'use strict';\nvar NATIVE_WEAK_MAP = require('../internals/weak-map-basic-detection');\nvar globalThis = require('../internals/global-this');\nvar isObject = require('../internals/is-object');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar hasOwn = require('../internals/has-own-property');\nvar shared = require('../internals/shared-store');\nvar sharedKey = require('../internals/shared-key');\nvar hiddenKeys = require('../internals/hidden-keys');\n\nvar OBJECT_ALREADY_INITIALIZED = 'Object already initialized';\nvar TypeError = globalThis.TypeError;\nvar WeakMap = globalThis.WeakMap;\nvar set, get, has;\n\nvar enforce = function (it) {\n return has(it) ? get(it) : set(it, {});\n};\n\nvar getterFor = function (TYPE) {\n return function (it) {\n var state;\n if (!isObject(it) || (state = get(it)).type !== TYPE) {\n throw new TypeError('Incompatible receiver, ' + TYPE + ' required');\n } return state;\n };\n};\n\nif (NATIVE_WEAK_MAP || shared.state) {\n var store = shared.state || (shared.state = new WeakMap());\n /* eslint-disable no-self-assign -- prototype methods protection */\n store.get = store.get;\n store.has = store.has;\n store.set = store.set;\n /* eslint-enable no-self-assign -- prototype methods protection */\n set = function (it, metadata) {\n if (store.has(it)) throw new TypeError(OBJECT_ALREADY_INITIALIZED);\n metadata.facade = it;\n store.set(it, metadata);\n return metadata;\n };\n get = function (it) {\n return store.get(it) || {};\n };\n has = function (it) {\n return store.has(it);\n };\n} else {\n var STATE = sharedKey('state');\n hiddenKeys[STATE] = true;\n set = function (it, metadata) {\n if (hasOwn(it, STATE)) throw new TypeError(OBJECT_ALREADY_INITIALIZED);\n metadata.facade = it;\n createNonEnumerableProperty(it, STATE, metadata);\n return metadata;\n };\n get = function (it) {\n return hasOwn(it, STATE) ? it[STATE] : {};\n };\n has = function (it) {\n return hasOwn(it, STATE);\n };\n}\n\nmodule.exports = {\n set: set,\n get: get,\n has: has,\n enforce: enforce,\n getterFor: getterFor\n};\n","'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar fails = require('../internals/fails');\nvar isCallable = require('../internals/is-callable');\nvar hasOwn = require('../internals/has-own-property');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar CONFIGURABLE_FUNCTION_NAME = require('../internals/function-name').CONFIGURABLE;\nvar inspectSource = require('../internals/inspect-source');\nvar InternalStateModule = require('../internals/internal-state');\n\nvar enforceInternalState = InternalStateModule.enforce;\nvar getInternalState = InternalStateModule.get;\nvar $String = String;\n// eslint-disable-next-line es/no-object-defineproperty -- safe\nvar defineProperty = Object.defineProperty;\nvar stringSlice = uncurryThis(''.slice);\nvar replace = uncurryThis(''.replace);\nvar join = uncurryThis([].join);\n\nvar CONFIGURABLE_LENGTH = DESCRIPTORS && !fails(function () {\n return defineProperty(function () { /* empty */ }, 'length', { value: 8 }).length !== 8;\n});\n\nvar TEMPLATE = String(String).split('String');\n\nvar makeBuiltIn = module.exports = function (value, name, options) {\n if (stringSlice($String(name), 0, 7) === 'Symbol(') {\n name = '[' + replace($String(name), /^Symbol\\(([^)]*)\\).*$/, '$1') + ']';\n }\n if (options && options.getter) name = 'get ' + name;\n if (options && options.setter) name = 'set ' + name;\n if (!hasOwn(value, 'name') || (CONFIGURABLE_FUNCTION_NAME && value.name !== name)) {\n if (DESCRIPTORS) defineProperty(value, 'name', { value: name, configurable: true });\n else value.name = name;\n }\n if (CONFIGURABLE_LENGTH && options && hasOwn(options, 'arity') && value.length !== options.arity) {\n defineProperty(value, 'length', { value: options.arity });\n }\n try {\n if (options && hasOwn(options, 'constructor') && options.constructor) {\n if (DESCRIPTORS) defineProperty(value, 'prototype', { writable: false });\n // in V8 ~ Chrome 53, prototypes of some methods, like `Array.prototype.values`, are non-writable\n } else if (value.prototype) value.prototype = undefined;\n } catch (error) { /* empty */ }\n var state = enforceInternalState(value);\n if (!hasOwn(state, 'source')) {\n state.source = join(TEMPLATE, typeof name == 'string' ? name : '');\n } return value;\n};\n\n// add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative\n// eslint-disable-next-line no-extend-native -- required\nFunction.prototype.toString = makeBuiltIn(function toString() {\n return isCallable(this) && getInternalState(this).source || inspectSource(this);\n}, 'toString');\n","'use strict';\nvar makeBuiltIn = require('../internals/make-built-in');\nvar defineProperty = require('../internals/object-define-property');\n\nmodule.exports = function (target, name, descriptor) {\n if (descriptor.get) makeBuiltIn(descriptor.get, name, { getter: true });\n if (descriptor.set) makeBuiltIn(descriptor.set, name, { setter: true });\n return defineProperty.f(target, name, descriptor);\n};\n","'use strict';\nvar anObject = require('../internals/an-object');\n\n// `RegExp.prototype.flags` getter implementation\n// https://tc39.es/ecma262/#sec-get-regexp.prototype.flags\nmodule.exports = function () {\n var that = anObject(this);\n var result = '';\n if (that.hasIndices) result += 'd';\n if (that.global) result += 'g';\n if (that.ignoreCase) result += 'i';\n if (that.multiline) result += 'm';\n if (that.dotAll) result += 's';\n if (that.unicode) result += 'u';\n if (that.unicodeSets) result += 'v';\n if (that.sticky) result += 'y';\n return result;\n};\n","'use strict';\nvar globalThis = require('../internals/global-this');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar defineBuiltInAccessor = require('../internals/define-built-in-accessor');\nvar regExpFlags = require('../internals/regexp-flags');\nvar fails = require('../internals/fails');\n\n// babel-minify and Closure Compiler transpiles RegExp('.', 'd') -> /./d and it causes SyntaxError\nvar RegExp = globalThis.RegExp;\nvar RegExpPrototype = RegExp.prototype;\n\nvar FORCED = DESCRIPTORS && fails(function () {\n var INDICES_SUPPORT = true;\n try {\n RegExp('.', 'd');\n } catch (error) {\n INDICES_SUPPORT = false;\n }\n\n var O = {};\n // modern V8 bug\n var calls = '';\n var expected = INDICES_SUPPORT ? 'dgimsy' : 'gimsy';\n\n var addGetter = function (key, chr) {\n // eslint-disable-next-line es/no-object-defineproperty -- safe\n Object.defineProperty(O, key, { get: function () {\n calls += chr;\n return true;\n } });\n };\n\n var pairs = {\n dotAll: 's',\n global: 'g',\n ignoreCase: 'i',\n multiline: 'm',\n sticky: 'y'\n };\n\n if (INDICES_SUPPORT) pairs.hasIndices = 'd';\n\n for (var key in pairs) addGetter(key, pairs[key]);\n\n // eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\n var result = Object.getOwnPropertyDescriptor(RegExpPrototype, 'flags').get.call(O);\n\n return result !== expected || calls !== expected;\n});\n\n// `RegExp.prototype.flags` getter\n// https://tc39.es/ecma262/#sec-get-regexp.prototype.flags\nif (FORCED) defineBuiltInAccessor(RegExpPrototype, 'flags', {\n configurable: true,\n get: regExpFlags\n});\n","export interface GrammarRule {\n regexp: RegExp;\n replacement: string;\n labelPlaceholder?: number;\n}\n\nexport interface HTMLBlockRule {\n start: RegExp;\n end: RegExp | false;\n paraInterrupt: boolean;\n}\n\nexport interface InlineCommand {\n type: 'inline';\n className: string;\n set: {\n pre: string;\n post: string;\n };\n unset: {\n prePattern: RegExp;\n postPattern: RegExp;\n };\n}\n\nexport interface LineCommand {\n type: 'line';\n className: string;\n set: {\n pattern: RegExp;\n replacement: string;\n };\n unset: {\n pattern: RegExp;\n replacement: string;\n };\n}\n\nexport type Command = InlineCommand | LineCommand;\n\nconst replacements: Record<string, RegExp> = {\n ASCIIPunctuation: /[!\"#$%&'()*+,\\-./:;<=>?@[\\]^_`{|}~\\\\]/, \n NotTriggerChar: /[^`_*[\\]()<>!~]/,\n Scheme: /[A-Za-z][A-Za-z0-9+.-]{1,31}/,\n Email: /[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*/, // From CommonMark spec\n HTMLOpenTag: /<HTMLTagName(?:HTMLAttribute)*\\s*\\/?>/,\n HTMLCloseTag: /<\\/HTMLTagName\\s*>/,\n HTMLTagName: /[A-Za-z][A-Za-z0-9-]*/, \n HTMLComment: /<!--(?:[^>-]|(?:[^>-](?:[^-]|-[^-])*[^-]))-->/,\n HTMLPI: /<\\?(?:|.|(?:[^?]|\\?[^>])*)\\?>/,\n HTMLDeclaration: /<![A-Z]+\\s[^>]*>/,\n HTMLCDATA: /<!\\[CDATA\\[.*?\\]\\]>/,\n HTMLAttribute: /\\s+[A-Za-z_:][A-Za-z0-9_.:-]*(?:HTMLAttValue)?/,\n HTMLAttValue: /\\s*=\\s*(?:(?:'[^']*')|(?:\"[^\"]*\")|(?:[^\\s\"'=<>`]+))/,\n KnownTag: /address|article|aside|base|basefont|blockquote|body|caption|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption|figure|footer|form|frame|frameset|h1|h2|h3|h4|h5|h6|head|header|hr|html|iframe|legend|li|link|main|menu|menuitem|nav|noframes|ol|optgroup|option|p|param|section|source|summary|table|tbody|td|tfoot|th|thead|title|tr|track|ul/\n};\n\n// From CommonMark.js. \nexport const punctuationLeading = new RegExp(/^(?:[!\"#$%&'()*+,\\-./:;<=>?@[\\]\\\\^_`{|}~\\xA1\\xA7\\xAB\\xB6\\xB7\\xBB\\xBF\\u037E\\u0387\\u055A-\\u055F\\u0589\\u058A\\u05BE\\u05C0\\u05C3\\u05C6\\u05F3\\u05F4\\u0609\\u060A\\u060C\\u060D\\u061B\\u061E\\u061F\\u066A-\\u066D\\u06D4\\u0700-\\u070D\\u07F7-\\u07F9\\u0830-\\u083E\\u085E\\u0964\\u0965\\u0970\\u0AF0\\u0DF4\\u0E4F\\u0E5A\\u0E5B\\u0F04-\\u0F12\\u0F14\\u0F3A-\\u0F3D\\u0F85\\u0FD0-\\u0FD4\\u0FD9\\u0FDA\\u104A-\\u104F\\u10FB\\u1360-\\u1368\\u1400\\u166D\\u166E\\u169B\\u169C\\u16EB-\\u16ED\\u1735\\u1736\\u17D4-\\u17D6\\u17D8-\\u17DA\\u1800-\\u180A\\u1944\\u1945\\u1A1E\\u1A1F\\u1AA0-\\u1AA6\\u1AA8-\\u1AAD\\u1B5A-\\u1B60\\u1BFC-\\u1BFF\\u1C3B-\\u1C3F\\u1C7E\\u1C7F\\u1CC0-\\u1CC7\\u1CD3\\u2010-\\u2027\\u2030-\\u2043\\u2045-\\u2051\\u2053-\\u205E\\u207D\\u207E\\u208D\\u208E\\u2308-\\u230B\\u2329\\u232A\\u2768-\\u2775\\u27C5\\u27C6\\u27E6-\\u27EF\\u2983-\\u2998\\u29D8-\\u29DB\\u29FC\\u29FD\\u2CF9-\\u2CFC\\u2CFE\\u2CFF\\u2D70\\u2E00-\\u2E2E\\u2E30-\\u2E42\\u3001-\\u3003\\u3008-\\u3011\\u3014-\\u301F\\u3030\\u303D\\u30A0\\u30FB\\uA4FE\\uA4FF\\uA60D-\\uA60F\\uA673\\uA67E\\uA6F2-\\uA6F7\\uA874-\\uA877\\uA8CE\\uA8CF\\uA8F8-\\uA8FA\\uA8FC\\uA92E\\uA92F\\uA95F\\uA9C1-\\uA9CD\\uA9DE\\uA9DF\\uAA5C-\\uAA5F\\uAADE\\uAADF\\uAAF0\\uAAF1\\uABEB\\uFD3E\\uFD3F\\uFE10-\\uFE19\\uFE30-\\uFE52\\uFE54-\\uFE61\\uFE63\\uFE68\\uFE6A\\uFE6B\\uFF01-\\uFF03\\uFF05-\\uFF0A\\uFF0C-\\uFF0F\\uFF1A\\uFF1B\\uFF1F\\uFF20\\uFF3B-\\uFF3D\\uFF3F\\uFF5B\\uFF5D\\uFF5F-\\uFF65]|\\uD800[\\uDD00-\\uDD02\\uDF9F\\uDFD0]|\\uD801\\uDD6F|\\uD802[\\uDC57\\uDD1F\\uDD3F\\uDE50-\\uDE58\\uDE7F\\uDEF0-\\uDEF6\\uDF39-\\uDF3F\\uDF99-\\uDF9C]|\\uD804[\\uDC47-\\uDC4D\\uDCBB\\uDCBC\\uDCBE-\\uDCC1\\uDD40-\\uDD43\\uDD74\\uDD75\\uDDC5-\\uDDC9\\uDDCD\\uDDDB\\uDDDD-\\uDDDF\\uDE38-\\uDE3D\\uDEA9]|\\uD805[\\uDCC6\\uDDC1-\\uDDD7\\uDE41-\\uDE43\\uDF3C-\\uDF3E]|\\uD809[\\uDC70-\\uDC74]|\\uD81A[\\uDE6E\\uDE6F\\uDEF5\\uDF37-\\uDF3B\\uDF44]|\\uD82F\\uDC9F|\\uD836[\\uDE87-\\uDE8B])/);\n\nexport const punctuationTrailing = new RegExp(/(?:[!\"#$%&'()*+,\\-./:;<=>?@[\\]\\\\^_`{|}~\\xA1\\xA7\\xAB\\xB6\\xB7\\xBB\\xBF\\u037E\\u0387\\u055A-\\u055F\\u0589\\u058A\\u05BE\\u05C0\\u05C3\\u05C6\\u05F3\\u05F4\\u0609\\u060A\\u060C\\u060D\\u061B\\u061E\\u061F\\u066A-\\u066D\\u06D4\\u0700-\\u070D\\u07F7-\\u07F9\\u0830-\\u083E\\u085E\\u0964\\u0965\\u0970\\u0AF0\\u0DF4\\u0E4F\\u0E5A\\u0E5B\\u0F04-\\u0F12\\u0F14\\u0F3A-\\u0F3D\\u0F85\\u0FD0-\\u0FD4\\u0FD9\\u0FDA\\u104A-\\u104F\\u10FB\\u1360-\\u1368\\u1400\\u166D\\u166E\\u169B\\u169C\\u16EB-\\u16ED\\u1735\\u1736\\u17D4-\\u17D6\\u17D8-\\u17DA\\u1800-\\u180A\\u1944\\u1945\\u1A1E\\u1A1F\\u1AA0-\\u1AA6\\u1AA8-\\u1AAD\\u1B5A-\\u1B60\\u1BFC-\\u1BFF\\u1C3B-\\u1C3F\\u1C7E\\u1C7F\\u1CC0-\\u1CC7\\u1CD3\\u2010-\\u2027\\u2030-\\u2043\\u2045-\\u2051\\u2053-\\u205E\\u207D\\u207E\\u208D\\u208E\\u2308-\\u230B\\u2329\\u232A\\u2768-\\u2775\\u27C5\\u27C6\\u27E6-\\u27EF\\u2983-\\u2998\\u29D8-\\u29DB\\u29FC\\u29FD\\u2CF9-\\u2CFC\\u2CFE\\u2CFF\\u2D70\\u2E00-\\u2E2E\\u2E30-\\u2E42\\u3001-\\u3003\\u3008-\\u3011\\u3014-\\u301F\\u3030\\u303D\\u30A0\\u30FB\\uA4FE\\uA4FF\\uA60D-\\uA60F\\uA673\\uA67E\\uA6F2-\\uA6F7\\uA874-\\uA877\\uA8CE\\uA8CF\\uA8F8-\\uA8FA\\uA8FC\\uA92E\\uA92F\\uA95F\\uA9C1-\\uA9CD\\uA9DE\\uA9DF\\uAA5C-\\uAA5F\\uAADE\\uAADF\\uAAF0\\uAAF1\\uABEB\\uFD3E\\uFD3F\\uFE10-\\uFE19\\uFE30-\\uFE52\\uFE54-\\uFE61\\uFE63\\uFE68\\uFE6A\\uFE6B\\uFF01-\\uFF03\\uFF05-\\uFF0A\\uFF0C-\\uFF0F\\uFF1A\\uFF1B\\uFF1F\\uFF20\\uFF3B-\\uFF3D\\uFF3F\\uFF5B\\uFF5D\\uFF5F-\\uFF65]|\\uD800[\\uDD00-\\uDD02\\uDF9F\\uDFD0]|\\uD801\\uDD6F|\\uD802[\\uDC57\\uDD1F\\uDD3F\\uDE50-\\uDE58\\uDE7F\\uDEF0-\\uDEF6\\uDF39-\\uDF3F\\uDF99-\\uDF9C]|\\uD804[\\uDC47-\\uDC4D\\uDCBB\\uDCBC\\uDCBE-\\uDCC1\\uDD40-\\uDD43\\uDD74\\uDD75\\uDDC5-\\uDDC9\\uDDCD\\uDDDB\\uDDDD-\\uDDDF\\uDE38-\\uDE3D\\uDEA9]|\\uD805[\\uDCC6\\uDDC1-\\uDDD7\\uDE41-\\uDE43\\uDF3C-\\uDF3E]|\\uD809[\\uDC70-\\uDC74]|\\uD81A[\\uDE6E\\uDE6F\\uDEF5\\uDF37-\\uDF3B\\uDF44]|\\uD82F\\uDC9F|\\uD836[\\uDE87-\\uDE8B])$/);\n\n/**\n * This is CommonMark's block grammar, but we're ignoring nested blocks here. \n */ \nexport const lineGrammar: Record<string, GrammarRule> = { \n TMH1: { \n regexp: /^( {0,3}#\\s)(.*?)((?:\\s+#+\\s*)?)$/, \n replacement: '<span class=\"TMMark TMMark_TMH1\">$1</span>$$2<span class=\"TMMark TMMark_TMH1\">$3</span>'\n },\n TMH2: { \n regexp: /^( {0,3}##\\s)(.*?)((?:\\s+#+\\s*)?)$/, \n replacement: '<span class=\"TMMark TMMark_TMH2\">$1</span>$$2<span class=\"TMMark TMMark_TMH2\">$3</span>'\n },\n TMH3: { \n regexp: /^( {0,3}###\\s)(.*?)((?:\\s+#+\\s*)?)$/, \n replacement: '<span class=\"TMMark TMMark_TMH3\">$1</span>$$2<span class=\"TMMark TMMark_TMH3\">$3</span>'\n },\n TMH4: { \n regexp: /^( {0,3}####\\s)(.*?)((?:\\s+#+\\s*)?)$/, \n replacement: '<span class=\"TMMark TMMark_TMH4\">$1</span>$$2<span class=\"TMMark TMMark_TMH4\">$3</span>'\n },\n TMH5: { \n regexp: /^( {0,3}#####\\s)(.*?)((?:\\s+#+\\s*)?)$/, \n replacement: '<span class=\"TMMark TMMark_TMH5\">$1</span>$$2<span class=\"TMMark TMMark_TMH5\">$3</span>'\n },\n TMH6: { \n regexp: /^( {0,3}######\\s)(.*?)((?:\\s+#+\\s*)?)$/, \n replacement: '<span class=\"TMMark TMMark_TMH6\">$1</span>$$2<span class=\"TMMark TMMark_TMH6\">$3</span>'\n },\n TMBlockquote: { \n regexp: /^( {0,3}>[ ]?)(.*)$/, \n replacement: '<span class=\"TMMark TMMark_TMBlockquote\">$1</span>$$2'\n },\n TMCodeFenceBacktickOpen: { \n regexp: /^( {0,3}(?<seq>````*)\\s*)([^`]*?)(\\s*)$/, \n replacement: '<span class=\"TMMark TMMark_TMCodeFenceBacktick\">$1</span><span class=\"TMInfoString\">$3</span>$4'\n },\n TMCodeFenceTildeOpen: { \n regexp: /^( {0,3}(?<seq>~~~~*)\\s*)(.*?)(\\s*)$/, \n replacement: '<span class=\"TMMark TMMark_TMCodeFenceTilde\">$1</span><span class=\"TMInfoString\">$3</span>$4'\n },\n TMCodeFenceBacktickClose: { \n regexp: /^( {0,3}(?<seq>````*))(\\s*)$/, \n replacement: '<span class=\"TMMark TMMark_TMCodeFenceBacktick\">$1</span>$3'\n },\n TMCodeFenceTildeClose: { \n regexp: /^( {0,3}(?<seq>~~~~*))(\\s*)$/, \n replacement: '<span class=\"TMMark TMMark_TMCodeFenceTilde\">$1</span>$3'\n },\n TMBlankLine: { \n regexp: /^([ \\t]*)$/, \n replacement: '$0'\n },\n TMSetextH1Marker: { \n regexp: /^ {0,3}=+\\s*$/, \n replacement: '<span class=\"TMMark TMMark_TMSetextH1Marker\">$0</span>'\n },\n TMSetextH2Marker: { \n regexp: /^ {0,3}-+\\s*$/, \n replacement: '<span class=\"TMMark TMMark_TMSetextH1Marker\">$0</span>'\n },\n TMHR: { \n regexp: /^( {0,3}(\\*[ \\t]*\\*[ \\t]*\\*[ \\t*]*)|(-[ \\t]*-[ \\t]*-[ \\t-]*)|(_[ \\t]*_[ \\t]*_[ \\t_]*))$/, \n replacement: '<span class=\"TMMark TMMark_TMHR\">$0</span>'\n },\n TMUL: { \n regexp: /^( {0,3}[+*-] {1,4})(.*)$/, \n replacement: '<span class=\"TMMark TMMark_TMUL\">$1</span>$$2'\n },\n TMOL: { \n regexp: /^( {0,3}\\d{1,9}[.)] {1,4})(.*)$/, \n replacement: '<span class=\"TMMark TMMark_TMOL\">$1</span>$$2'\n },\n // TODO: This is currently preventing sublists (and any content within list items, really) from working\n TMIndentedCode: { \n regexp: /^( {4}|\\t)(.*)$/, \n replacement: '<span class=\"TMMark TMMark_TMIndentedCode\">$1</span>$2'\n },\n TMLinkReferenceDefinition: {\n // TODO: Link destination can't include unbalanced parantheses, but we just ignore that here \n regexp: /^( {0,3}\\[\\s*)([^\\s\\]](?:[^\\]]|\\\\\\])*?)(\\s*\\]:\\s*)((?:[^\\s<>]+)|(?:<(?:[^<>\\\\]|\\\\.)*>))?(\\s*)((?:\\((?:[^()\\\\]|\\\\.)*\\))|(?:\"(?:[^\"\\\\]|\\\\.)*\")|(?:'(?:[^'\\\\]|\\\\.)*'))?(\\s*)$/, \n replacement: '<span class=\"TMMark TMMark_TMLinkReferenceDefinition\">$1</span><span class=\"TMLinkLabel TMLinkLabel_Definition\">$2</span><span class=\"TMMark TMMark_TMLinkReferenceDefinition\">$3</span><span class=\"TMLinkDestination\">$4</span>$5<span class=\"TMLinkTitle\">$6</span>$7',\n labelPlaceholder: 2, // this defines which placeholder in the above regex is the link \"label\"\n },\n};\n\n/**\n * HTML blocks have multiple different classes of opener and closer. This array defines all the cases\n */\nexport const htmlBlockGrammar: HTMLBlockRule[] = [\n { start: /^ {0,3}<(?:script|pre|style)(?:\\s|>|$)/i, end: /(?:<\\/script>|<\\/pre>|<\\/style>)/i, paraInterrupt: true },\n { start: /^ {0,3}<!--/, end: /-->/, paraInterrupt: true },\n { start: /^ {0,3}<\\?/, end: /\\?>/, paraInterrupt: true },\n { start: /^ {0,3}<![A-Z]/, end: />/, paraInterrupt : true},\n { start: /^ {0,3}<!\\[CDATA\\[/, end: /\\]\\]>/, paraInterrupt : true},\n { start: /^ {0,3}(?:<|<\\/)(?:KnownTag)(?:\\s|>|\\/>|$)/i, end: false, paraInterrupt: true},\n { start: /^ {0,3}(?:HTMLOpenTag|HTMLCloseTag)\\s*$/, end: false, paraInterrupt: false},\n];\n\n/**\n * Structure of the object:\n * Top level entries are rules, each consisting of a regular expressions (in string format) as well as a replacement.\n * In the regular expressions, replacements from the object 'replacements' will be processed before compiling into the property regexp.\n */\nexport const inlineGrammar: Record<string, GrammarRule> = {\n escape : {\n regexp: /^\\\\(ASCIIPunctuation)/,\n replacement : '<span class=\"TMMark TMMark_TMEscape\">\\\\</span>$1'\n },\n code : {\n regexp: /^(`+)((?:[^`])|(?:[^`].*?[^`]))(\\1)/,\n replacement : '<span class=\"TMMark TMMark_TMCode\">$1</span><code class=\"TMCode\">$2</code><span class=\"TMMark TMMark_TMCode\">$3</span>' \n },\n autolink : {\n regexp: /^<((?:Scheme:[^\\s<>]*)|(?:Email))>/,\n replacement: '<span class=\"TMMark TMMark_TMAutolink\"><</span><span class=\"TMAutolink\">$1</span><span class=\"TMMark TMMark_TMAutolink\">></span>'\n },\n html : {\n regexp: /^((?:HTMLOpenTag)|(?:HTMLCloseTag)|(?:HTMLComment)|(?:HTMLPI)|(?:HTMLDeclaration)|(?:HTMLCDATA))/,\n replacement: '<span class=\"TMHTML\">$1</span>',\n },\n linkOpen : {\n regexp: /^\\[/,\n replacement: ''\n },\n imageOpen : {\n regexp: /^!\\[/,\n replacement : ''\n },\n linkLabel : {\n regexp: /^(\\[\\s*)([^\\]]*?)(\\s*\\])/,\n replacement: '',\n labelPlaceholder: 2\n },\n default : {\n regexp: /^(.|(?:NotTriggerChar+))/,\n replacement: '$1'\n }\n};\n\n// Process replacements in regexps\nconst replacementRegexp = new RegExp(Object.keys(replacements).join('|'));\n\n// Inline\nconst inlineRules = [...Object.keys(inlineGrammar)];\nfor (let rule of inlineRules) {\n let re = inlineGrammar[rule].regexp.source;\n // Replace while there is something to replace. This means it also works over multiple levels (replacements containing replacements)\n while (re.match(replacementRegexp)) {\n re = re.replace(replacementRegexp, (string) => { return replacements[string].source; });\n }\n inlineGrammar[rule].regexp = new RegExp(re, inlineGrammar[rule].regexp.flags);\n}\n\n// HTML Block (only opening rule is processed currently)\nfor (let rule of htmlBlockGrammar) {\n let re = rule.start.source;\n // Replace while there is something to replace. This means it also works over multiple levels (replacements containing replacements)\n while (re.match(replacementRegexp)) {\n re = re.replace(replacementRegexp, (string) => { return replacements[string].source; });\n }\n rule.start = new RegExp(re, rule.start.flags);\n}\n\n/**\n * Escapes HTML special characters (<, >, and &) in the string.\n * @param {string} string The raw string to be escaped\n * @returns {string} The string, ready to be used in HTML\n */\nexport function htmlescape(string: string): string {\n return (string ? string : '')\n .replace(/&/g, '&')\n .replace(/</g, '<')\n .replace(/>/g, '>');\n}\n\n/**\n * Contains the commands that can be sent to the editor. Contains objects with a name representing the name of the command.\n * Each of the objects contains the following keys:\n * \n * - type: Can be either inline (for inline formatting) or line (for block / line formatting).\n * - className: Used to determine whether the command is active at a given position. \n * For line formatting, this looks at the class of the line element. For inline elements, tries to find an enclosing element with that class.\n * - set / unset: Contain instructions how to set and unset the command. For line type commands, both consist of a pattern and replacement that \n * will be applied to each line (using String.replace). For inline type commands, the set object contains a pre and post string which will\n * be inserted before and after the selection. The unset object contains a prePattern and a postPattern. Both should be regular expressions and \n * they will be applied to the portion of the line before and after the selection (using String.replace, with an empty replacement string).\n */\nexport const commands: Record<string, Command> = {\n // Replacements for unset for inline commands are '' by default\n bold: {\n type: 'inline', \n className: 'TMStrong', \n set: {pre: '**', post: '**'}, \n unset: {prePattern: /(?:\\*\\*|__)$/, postPattern: /^(?:\\*\\*|__)/}\n }, \n italic: {\n type: 'inline', \n className: 'TMEm', \n set: {pre: '*', post: '*'}, \n unset: {prePattern: /(?:\\*|_)$/, postPattern: /^(?:\\*|_)/}\n },\n code: {\n type: 'inline', \n className: 'TMCode', \n set: {pre: '`', post: '`'}, \n unset: {prePattern: /`+$/, postPattern: /^`+/} // FIXME this doesn't ensure balanced backticks right now\n }, \n strikethrough: {\n type: 'inline', \n className: 'TMStrikethrough', \n set: {pre: '~~', post: '~~'}, \n unset: {prePattern:/~~$/, postPattern: /^~~/ }\n },\n h1: {\n type: 'line', \n className: 'TMH1', \n set: {pattern: /^( {0,3}(?:(?:#+|[0-9]{1,9}[).]|[>\\-*+])\\s+)?)(.*)$/, replacement: '# $2'}, \n unset: {pattern: /^( {0,3}#\\s+)(.*?)((?:\\s+#+\\s*)?)$/, replacement: '$2'}\n },\n h2: {\n type: 'line', \n className: 'TMH2', \n set: {pattern: /^( {0,3}(?:(?:#+|[0-9]{1,9}[).]|[>\\-*+])\\s+)?)(.*)$/, replacement: '## $2'}, \n unset: {pattern: /^( {0,3}##\\s+)(.*?)((?:\\s+#+\\s*)?)$/, replacement: '$2'}\n },\n h3: {\n type: 'line', \n className: 'TMH3', \n set: {pattern: /^( {0,3}(?:(?:#+|[0-9]{1,9}[).]|[>\\-*+])\\s+)?)(.*)$/, replacement: '### $2'}, \n unset: {pattern: /^( {0,3}###\\s+)(.*?)((?:\\s+#+\\s*)?)$/, replacement: '$2'}\n },\n h4: {\n type: 'line', \n className: 'TMH4', \n set: {pattern: /^( {0,3}(?:(?:#+|[0-9]{1,9}[).]|[>\\-*+])\\s+)?)(.*)$/, replacement: '#### $2'}, \n unset: {pattern: /^( {0,3}####\\s+)(.*?)((?:\\s+#+\\s*)?)$/, replacement: '$2'}\n },\n h5: {\n type: 'line', \n className: 'TMH5', \n set: {pattern: /^( {0,3}(?:(?:#+|[0-9]{1,9}[).]|[>\\-*+])\\s+)?)(.*)$/, replacement: '##### $2'}, \n unset: {pattern: /^( {0,3}#####\\s+)(.*?)((?:\\s+#+\\s*)?)$/, replacement: '$2'}\n },\n h6: {\n type: 'line', \n className: 'TMH6', \n set: {pattern: /^( {0,3}(?:(?:#+|[0-9]{1,9}[).]|[>\\-*+])\\s+)?)(.*)$/, replacement: '###### $2'}, \n unset: {pattern: /^( {0,3}######\\s+)(.*?)((?:\\s+#+\\s*)?)$/, replacement: '$2'}\n },\n ul: {\n type: 'line', \n className: 'TMUL', \n set: {pattern: /^( {0,3}(?:(?:#+|[0-9]{1,9}[).]|[>\\-*+])\\s+)?)(.*)$/, replacement: '- $2'}, \n unset: {pattern: /^( {0,3}[+*-] {1,4})(.*)$/, replacement: '$2'}\n },\n ol: {\n type: 'line', \n className: 'TMOL', \n set: {pattern: /^( {0,3}(?:(?:#+|[0-9]{1,9}[).]|[>\\-*+])\\s+)?)(.*)$/, replacement: '$#. $2'}, \n unset: {pattern: /^( {0,3}\\d{1,9}[.)] {1,4})(.*)$/, replacement: '$2'}\n }, \n blockquote: {\n type: 'line', \n className: 'TMBlockquote', \n set: {pattern: /^( {0,3}(?:(?:#+|[0-9]{1,9}[).]|[>\\-*+])\\s+)?)(.*)$/, replacement: '> $2'}, \n unset: {pattern: /^( {0,3}>[ ]?)(.*)$/, replacement: '$2'}\n },\n};","import {\n inlineGrammar,\n lineGrammar,\n punctuationLeading,\n punctuationTrailing,\n htmlescape,\n htmlBlockGrammar,\n commands,\n HTMLBlockRule,\n Command,\n} from \"./grammar\";\n\nexport interface EditorProps {\n element?: string | HTMLElement;\n editor?: string | HTMLElement;\n content?: string;\n textarea?: string | HTMLTextAreaElement;\n}\n\nexport interface Position {\n row: number;\n col: number;\n}\n\nexport interface HistoryState {\n content: string;\n selection: Position | null;\n anchor: Position | null;\n}\n\nexport interface ChangeEvent {\n content: string;\n linesDirty: boolean[];\n}\n\nexport interface SelectionEvent {\n focus: Position;\n anchor: Position;\n commandState: Record<string, boolean | null>;\n}\n\nexport interface DropEvent {\n dataTransfer: DataTransfer;\n}\n\ntype EventType = 'change' | 'selection' | 'drop';\ntype EventHandler<T> = (event: T) => void;\n\nexport class Editor {\n public e: HTMLDivElement | null = null;\n public textarea: HTMLTextAreaElement | null = null;\n public lines: string[] = [];\n public lineElements: NodeListOf<ChildNode> | HTMLCollection | ChildNode[] = [];\n public lineTypes: string[] = [];\n public lineCaptures: RegExpExecArray[] = [];\n public lineReplacements: string[] = [];\n public linkLabels: string[] = [];\n public lineDirty: boolean[] = [];\n public lastCommandState: Record<string, boolean | null> | null = null;\n\n public listeners: {\n change: EventHandler<ChangeEvent>[];\n selection: EventHandler<SelectionEvent>[];\n drop: EventHandler<DropEvent>[];\n } = {\n change: [],\n selection: [],\n drop: [],\n };\n\n private undoStack: HistoryState[] = [];\n private redoStack: HistoryState[] = [];\n private isRestoringHistory: boolean = false;\n private maxHistory: number = 100;\n\n constructor(props: EditorProps = {}) {\n this.e = null;\n this.textarea = null;\n this.lines = [];\n this.lineElements = [] as ChildNode[];\n this.lineTypes = [];\n this.lineCaptures = [];\n this.lineReplacements = [];\n this.linkLabels = [];\n this.lineDirty = [];\n this.lastCommandState = null;\n\n this.listeners = {\n change: [],\n selection: [],\n drop: [],\n };\n\n let element: HTMLElement | null = null;\n if (typeof props.element === 'string') {\n element = document.getElementById(props.element);\n } else if (props.element) {\n element = props.element;\n }\n\n if (typeof props.textarea === 'string') {\n this.textarea = document.getElementById(props.textarea) as HTMLTextAreaElement;\n } else if (props.textarea) {\n this.textarea = props.textarea;\n }\n\n if (this.textarea) {\n if (!element) element = this.textarea;\n }\n\n if (!element) {\n element = document.getElementsByTagName(\"body\")[0];\n }\n if (element && element.tagName === \"TEXTAREA\") {\n this.textarea = element as HTMLTextAreaElement;\n element = this.textarea.parentNode as HTMLElement;\n }\n\n if (this.textarea) {\n this.textarea.style.display = \"none\";\n }\n\n this.undoStack = [];\n this.redoStack = [];\n this.isRestoringHistory = false;\n this.maxHistory = 100;\n\n this.createEditorElement(element, props);\n this.setContent(\n typeof props.content === \"string\"\n ? props.content\n : this.textarea\n ? this.textarea.value\n : \"# Hello TinyMDE!\\nEdit **here**\"\n );\n \n this.e!.addEventListener(\"keydown\", (e) => this.handleUndoRedoKey(e));\n }\n\n get canUndo(): boolean {\n return this.undoStack.length >= 2;\n }\n\n get canRedo(): boolean {\n return this.redoStack.length > 0;\n }\n\n private pushHistory(): void {\n if (this.isRestoringHistory) return;\n this.pushCurrentState();\n this.redoStack = [];\n }\n\n private pushCurrentState(): void {\n this.undoStack.push({\n content: this.getContent(),\n selection: this.getSelection(),\n anchor: this.getSelection(true),\n });\n if (this.undoStack.length > this.maxHistory) this.undoStack.shift();\n }\n\n public undo(): void {\n if (this.undoStack.length < 2) return;\n this.isRestoringHistory = true;\n this.pushCurrentState();\n const current = this.undoStack.pop()!;\n this.redoStack.push(current);\n const prev = this.undoStack[this.undoStack.length - 1];\n this.setContent(prev.content);\n if (prev.selection) this.setSelection(prev.selection, prev.anchor);\n this.undoStack.pop();\n this.isRestoringHistory = false;\n }\n\n public redo(): void {\n if (!this.redoStack.length) return;\n this.isRestoringHistory = true;\n this.pushCurrentState();\n const next = this.redoStack.pop()!;\n this.setContent(next.content);\n if (next.selection) this.setSelection(next.selection, next.anchor);\n this.isRestoringHistory = false;\n }\n\n private handleUndoRedoKey(e: KeyboardEvent): void {\n const isMac = /Mac|iPod|iPhone|iPad/.test(navigator.platform);\n const ctrl = isMac ? e.metaKey : e.ctrlKey;\n if (ctrl && !e.altKey) {\n if (e.key === \"z\" || e.key === \"Z\") {\n if (e.shiftKey) {\n this.redo();\n } else {\n this.undo();\n }\n e.preventDefault();\n } else if (e.key === \"y\" || e.key === \"Y\") {\n this.redo();\n e.preventDefault();\n }\n }\n }\n\n private createEditorElement(element: HTMLElement, props: EditorProps): void {\n if (props && props.editor !== undefined) {\n if (typeof props.editor === 'string') {\n this.e = document.getElementById(props.editor) as HTMLDivElement;\n } else {\n this.e = props.editor as HTMLDivElement;\n }\n } else {\n this.e = document.createElement(\"div\");\n }\n\n this.e.classList.add(\"TinyMDE\");\n this.e.contentEditable = \"true\";\n this.e.style.whiteSpace = \"pre-wrap\";\n (this.e.style as any).webkitUserModify = \"read-write-plaintext-only\";\n\n if (props.editor === undefined) {\n if (\n this.textarea &&\n this.textarea.parentNode === element &&\n this.textarea.nextSibling\n ) {\n element.insertBefore(this.e, this.textarea.nextSibling);\n } else {\n element.appendChild(this.e);\n }\n }\n\n this.e.addEventListener(\"input\", (e) => this.handleInputEvent(e));\n this.e.addEventListener(\"compositionend\", (e) => this.handleInputEvent(e));\n document.addEventListener(\"selectionchange\", (e) =>\n this.handleSelectionChangeEvent(e)\n );\n this.e.addEventListener(\"paste\", (e) => this.handlePaste(e));\n this.e.addEventListener(\"drop\", (e) => this.handleDrop(e));\n this.lineElements = this.e.childNodes;\n }\n\n public setContent(content: string): void {\n while (this.e!.firstChild) {\n this.e!.removeChild(this.e!.firstChild);\n }\n this.lines = content.split(/(?:\\r\\n|\\r|\\n)/);\n this.lineDirty = [];\n for (let lineNum = 0; lineNum < this.lines.length; lineNum++) {\n let le = document.createElement(\"div\");\n this.e!.appendChild(le);\n this.lineDirty.push(true);\n }\n this.lineTypes = new Array(this.lines.length);\n this.updateFormatting();\n this.fireChange();\n if (!this.isRestoringHistory) this.pushHistory();\n }\n\n public getContent(): string {\n return this.lines.join(\"\\n\");\n }\n\n private updateFormatting(): void {\n this.updateLineTypes();\n this.updateLinkLabels();\n this.applyLineTypes();\n }\n\n private updateLinkLabels(): void {\n this.linkLabels = [];\n for (let l = 0; l < this.lines.length; l++) {\n if (this.lineTypes[l] === \"TMLinkReferenceDefinition\") {\n this.linkLabels.push(\n this.lineCaptures[l][\n lineGrammar.TMLinkReferenceDefinition.labelPlaceholder!\n ]\n );\n }\n }\n }\n\n private replace(replacement: string, capture: RegExpExecArray): string {\n return replacement.replace(/(\\${1,2})([0-9])/g, (str, p1, p2) => {\n if (p1 === \"$\") return htmlescape(capture[parseInt(p2)]);\n else\n return `<span class=\"TMInlineFormatted\">${this.processInlineStyles(\n capture[parseInt(p2)]\n )}</span>`;\n });\n }\n\n private applyLineTypes(): void {\n for (let lineNum = 0; lineNum < this.lines.length; lineNum++) {\n if (this.lineDirty[lineNum]) {\n let contentHTML = this.replace(\n this.lineReplacements[lineNum],\n this.lineCaptures[lineNum]\n );\n (this.lineElements[lineNum] as HTMLElement).className = this.lineTypes[lineNum];\n (this.lineElements[lineNum] as HTMLElement).removeAttribute(\"style\");\n (this.lineElements[lineNum] as HTMLElement).innerHTML =\n contentHTML === \"\" ? \"<br />\" : contentHTML;\n }\n (this.lineElements[lineNum] as HTMLElement).dataset.lineNum = lineNum.toString();\n }\n }\n\n private updateLineTypes(): void {\n let codeBlockType: string | false = false;\n let codeBlockSeqLength = 0;\n let htmlBlock: HTMLBlockRule | false = false;\n\n for (let lineNum = 0; lineNum < this.lines.length; lineNum++) {\n let lineType = \"TMPara\";\n let lineCapture: RegExpExecArray = [this.lines[lineNum]] as RegExpExecArray;\n let lineReplacement = \"$$0\";\n\n // Check ongoing code blocks\n if (codeBlockType === \"TMCodeFenceBacktickOpen\") {\n let capture = lineGrammar.TMCodeFenceBacktickClose.regexp.exec(this.lines[lineNum]);\n if (capture && capture.groups![\"seq\"].length >= codeBlockSeqLength) {\n lineType = \"TMCodeFenceBacktickClose\";\n lineReplacement = lineGrammar.TMCodeFenceBacktickClose.replacement;\n lineCapture = capture;\n codeBlockType = false;\n } else {\n lineType = \"TMFencedCodeBacktick\";\n lineReplacement = '<span class=\"TMFencedCode\">$0<br /></span>';\n lineCapture = [this.lines[lineNum]] as RegExpExecArray;\n }\n } else if (codeBlockType === \"TMCodeFenceTildeOpen\") {\n let capture = lineGrammar.TMCodeFenceTildeClose.regexp.exec(this.lines[lineNum]);\n if (capture && capture.groups![\"seq\"].length >= codeBlockSeqLength) {\n lineType = \"TMCodeFenceTildeClose\";\n lineReplacement = lineGrammar.TMCodeFenceTildeClose.replacement;\n lineCapture = capture;\n codeBlockType = false;\n } else {\n lineType = \"TMFencedCodeTilde\";\n lineReplacement = '<span class=\"TMFencedCode\">$0<br /></span>';\n lineCapture = [this.lines[lineNum]] as RegExpExecArray;\n }\n }\n\n // Check HTML block types\n if (lineType === \"TMPara\" && htmlBlock === false) {\n for (let htmlBlockType of htmlBlockGrammar) {\n if (this.lines[lineNum].match(htmlBlockType.start)) {\n if (\n htmlBlockType.paraInterrupt ||\n lineNum === 0 ||\n !(\n this.lineTypes[lineNum - 1] === \"TMPara\" ||\n this.lineTypes[lineNum - 1] === \"TMUL\" ||\n this.lineTypes[lineNum - 1] === \"TMOL\" ||\n this.lineTypes[lineNum - 1] === \"TMBlockquote\"\n )\n ) {\n htmlBlock = htmlBlockType;\n break;\n }\n }\n }\n }\n\n if (htmlBlock !== false) {\n lineType = \"TMHTMLBlock\";\n lineReplacement = '<span class=\"TMHTMLContent\">$0<br /></span>';\n lineCapture = [this.lines[lineNum]] as RegExpExecArray;\n\n if (htmlBlock.end) {\n if (this.lines[lineNum].match(htmlBlock.end)) {\n htmlBlock = false;\n }\n } else {\n if (\n lineNum === this.lines.length - 1 ||\n this.lines[lineNum + 1].match(lineGrammar.TMBlankLine.regexp)\n ) {\n htmlBlock = false;\n }\n }\n }\n\n // Check all regexps if we haven't applied one of the code block types\n if (lineType === \"TMPara\") {\n for (let type in lineGrammar) {\n if (lineGrammar[type].regexp) {\n let capture = lineGrammar[type].regexp.exec(this.lines[lineNum]);\n if (capture) {\n lineType = type;\n lineReplacement = lineGrammar[type].replacement;\n lineCapture = capture;\n break;\n }\n }\n }\n }\n\n // If we've opened a code block, remember that\n if (lineType === \"TMCodeFenceBacktickOpen\" || lineType === \"TMCodeFenceTildeOpen\") {\n codeBlockType = lineType;\n codeBlockSeqLength = lineCapture.groups![\"seq\"].length;\n }\n\n // Link reference definition and indented code can't interrupt a paragraph\n if (\n (lineType === \"TMIndentedCode\" || lineType === \"TMLinkReferenceDefinition\") &&\n lineNum > 0 &&\n (this.lineTypes[lineNum - 1] === \"TMPara\" ||\n this.lineTypes[lineNum - 1] === \"TMUL\" ||\n this.lineTypes[lineNum - 1] === \"TMOL\" ||\n this.lineTypes[lineNum - 1] === \"TMBlockquote\")\n ) {\n lineType = \"TMPara\";\n lineCapture = [this.lines[lineNum]] as RegExpExecArray;\n lineReplacement = \"$$0\";\n }\n\n // Setext H2 markers that can also be interpreted as an empty list item should be regarded as such\n if (lineType === \"TMSetextH2Marker\") {\n let capture = lineGrammar.TMUL.regexp.exec(this.lines[lineNum]);\n if (capture) {\n lineType = \"TMUL\";\n lineReplacement = lineGrammar.TMUL.replacement;\n lineCapture = capture;\n }\n }\n\n // Setext headings are only valid if preceded by a paragraph\n if (lineType === \"TMSetextH1Marker\" || lineType === \"TMSetextH2Marker\") {\n if (lineNum === 0 || this.lineTypes[lineNum - 1] !== \"TMPara\") {\n let capture = lineGrammar.TMHR.regexp.exec(this.lines[lineNum]);\n if (capture) {\n lineType = \"TMHR\";\n lineCapture = capture;\n lineReplacement = lineGrammar.TMHR.replacement;\n } else {\n lineType = \"TMPara\";\n lineCapture = [this.lines[lineNum]] as RegExpExecArray;\n lineReplacement = \"$$0\";\n }\n } else {\n let headingLine = lineNum - 1;\n const headingLineType = lineType === \"TMSetextH1Marker\" ? \"TMSetextH1\" : \"TMSetextH2\";\n do {\n if (this.lineTypes[headingLine] !== headingLineType) {\n this.lineTypes[headingLine] = headingLineType;\n this.lineDirty[headingLine] = true;\n }\n this.lineReplacements[headingLine] = \"$$0\";\n this.lineCaptures[headingLine] = [this.lines[headingLine]] as RegExpExecArray;\n headingLine--;\n } while (headingLine >= 0 && this.lineTypes[headingLine] === \"TMPara\");\n }\n }\n\n if (this.lineTypes[lineNum] !== lineType) {\n this.lineTypes[lineNum] = lineType;\n this.lineDirty[lineNum] = true;\n }\n this.lineReplacements[lineNum] = lineReplacement;\n this.lineCaptures[lineNum] = lineCapture;\n }\n }\n\n public getSelection(getAnchor: boolean = false): Position | null {\n const selection = window.getSelection();\n let startNode = getAnchor ? selection!.anchorNode : selection!.focusNode;\n if (!startNode) return null;\n let offset = getAnchor ? selection!.anchorOffset : selection!.focusOffset;\n if (startNode === this.e) {\n if (offset < this.lines.length)\n return {\n row: offset,\n col: 0,\n };\n return {\n row: offset - 1,\n col: this.lines[offset - 1].length,\n };\n }\n\n let col = this.computeColumn(startNode, offset);\n if (col === null) return null;\n\n let node = startNode;\n while (node.parentElement !== this.e) {\n node = node.parentElement!;\n }\n\n let row = 0;\n if (\n (node as HTMLElement).dataset &&\n (node as HTMLElement).dataset.lineNum &&\n (!node.previousSibling ||\n ((node.previousSibling as HTMLElement).dataset?.lineNum !== (node as HTMLElement).dataset.lineNum))\n ) {\n row = parseInt((node as HTMLElement).dataset.lineNum!);\n } else {\n while (node.previousSibling) {\n row++;\n node = node.previousSibling;\n }\n }\n return { row: row, col: col };\n }\n\n public setSelection(focus: Position, anchor: Position | null = null): void {\n if (!focus) return;\n\n let { node: focusNode, offset: focusOffset } = this.computeNodeAndOffset(\n focus.row,\n focus.col,\n anchor ? anchor.row === focus.row && anchor.col > focus.col : false\n );\n let anchorNode = null,\n anchorOffset = null;\n if (anchor && (anchor.row !== focus.row || anchor.col !== focus.col)) {\n let { node, offset } = this.computeNodeAndOffset(\n anchor.row,\n anchor.col,\n focus.row === anchor.row && focus.col > anchor.col\n );\n anchorNode = node;\n anchorOffset = offset;\n }\n\n let windowSelection = window.getSelection();\n windowSelection!.setBaseAndExtent(\n focusNode,\n focusOffset,\n anchorNode || focusNode,\n anchorNode ? anchorOffset! : focusOffset\n );\n }\n\n public paste(text: string, anchor: Position | null = null, focus: Position | null = null): void {\n if (!anchor) anchor = this.getSelection(true);\n if (!focus) focus = this.getSelection(false);\n let beginning: Position, end: Position;\n if (!focus) {\n focus = {\n row: this.lines.length - 1,\n col: this.lines[this.lines.length - 1].length,\n };\n }\n if (!anchor) {\n anchor = focus;\n }\n if (\n anchor.row < focus.row ||\n (anchor.row === focus.row && anchor.col <= focus.col)\n ) {\n beginning = anchor;\n end = focus;\n } else {\n beginning = focus;\n end = anchor;\n }\n let insertedLines = text.split(/(?:\\r\\n|\\r|\\n)/);\n let lineBefore = this.lines[beginning.row].substr(0, beginning.col);\n let lineEnd = this.lines[end.row].substr(end.col);\n insertedLines[0] = lineBefore.concat(insertedLines[0]);\n let endColPos = insertedLines[insertedLines.length - 1].length;\n insertedLines[insertedLines.length - 1] = insertedLines[insertedLines.length - 1].concat(lineEnd);\n this.spliceLines(beginning.row, 1 + end.row - beginning.row, insertedLines);\n focus.row = beginning.row + insertedLines.length - 1;\n focus.col = endColPos;\n this.updateFormatting();\n this.setSelection(focus);\n this.fireChange();\n }\n\n public wrapSelection(pre: string, post: string, focus: Position | null = null, anchor: Position | null = null): void {\n if (!this.isRestoringHistory) this.pushHistory();\n if (!focus) focus = this.getSelection(false);\n if (!anchor) anchor = this.getSelection(true);\n if (!focus || !anchor || focus.row !== anchor.row) return;\n this.lineDirty[focus.row] = true;\n\n const startCol = focus.col < anchor.col ? focus.col : anchor.col;\n const endCol = focus.col < anchor.col ? anchor.col : focus.col;\n const left = this.lines[focus.row].substr(0, startCol).concat(pre);\n const mid = endCol === startCol ? \"\" : this.lines[focus.row].substr(startCol, endCol - startCol);\n const right = post.concat(this.lines[focus.row].substr(endCol));\n this.lines[focus.row] = left.concat(mid, right);\n anchor.col = left.length;\n focus.col = anchor.col + mid.length;\n\n this.updateFormatting();\n this.setSelection(focus, anchor);\n }\n\n public addEventListener<T extends EventType>(\n type: T,\n listener: T extends 'change' ? EventHandler<ChangeEvent> :\n T extends 'selection' ? EventHandler<SelectionEvent> :\n T extends 'drop' ? EventHandler<DropEvent> : never\n ): void {\n if (type.match(/^(?:change|input)$/i)) {\n this.listeners.change.push(listener as EventHandler<ChangeEvent>);\n }\n if (type.match(/^(?:selection|selectionchange)$/i)) {\n this.listeners.selection.push(listener as EventHandler<SelectionEvent>);\n }\n if (type.match(/^(?:drop)$/i)) {\n this.listeners.drop.push(listener as EventHandler<DropEvent>);\n }\n }\n\n private fireChange(): void {\n if (!this.textarea && !this.listeners.change.length) return;\n const content = this.getContent();\n if (this.textarea) this.textarea.value = content;\n for (let listener of this.listeners.change) {\n listener({\n content: content,\n linesDirty: [...this.lineDirty],\n });\n }\n }\n\n private handleInputEvent(event: Event): void {\n const inputEvent = event as InputEvent;\n if (inputEvent.inputType === \"insertCompositionText\") return;\n if (!this.isRestoringHistory) this.pushHistory();\n\n let focus = this.getSelection();\n\n if ((inputEvent.inputType === \"insertParagraph\" || inputEvent.inputType === \"insertLineBreak\") && focus) {\n this.clearDirtyFlag();\n this.processNewParagraph(focus);\n } else {\n if (!this.e!.firstChild) {\n this.e!.innerHTML = '<div class=\"TMBlankLine\"><br></div>';\n } else {\n this.fixNodeHierarchy();\n }\n this.updateLineContentsAndFormatting();\n }\n if (focus) {\n this.setSelection(focus);\n }\n\n this.fireChange();\n }\n\n private handleSelectionChangeEvent(_e: Event): void {\n this.fireSelection();\n }\n\n private handlePaste(event: ClipboardEvent): void {\n if (!this.isRestoringHistory) this.pushHistory();\n event.preventDefault();\n\n let text = (event as any).clipboardData.getData(\"text/plain\");\n this.paste(text);\n }\n\n private handleDrop(event: DragEvent): void {\n event.preventDefault();\n this.fireDrop(event.dataTransfer!);\n }\n\n private processInlineStyles(originalString: string): string {\n let processed = \"\";\n let stack: Array<{delimiter: string, delimString: string, count: number, output: string}> = [];\n let offset = 0;\n let string = originalString;\n\n outer: while (string) {\n // Process simple rules (non-delimiter)\n for (let rule of [\"escape\", \"code\", \"autolink\", \"html\"]) {\n let cap = inlineGrammar[rule].regexp.exec(string);\n if (cap) {\n string = string.substr(cap[0].length);\n offset += cap[0].length;\n processed += inlineGrammar[rule].replacement.replace(/\\$([1-9])/g, (str, p1) => htmlescape(cap[p1]));\n continue outer;\n }\n }\n\n // Check for links / images\n let potentialLink = string.match(inlineGrammar.linkOpen.regexp);\n let potentialImage = string.match(inlineGrammar.imageOpen.regexp);\n if (potentialImage || potentialLink) {\n let result = this.parseLinkOrImage(string, !!potentialImage);\n if (result) {\n processed = `${processed}${result.output}`;\n string = string.substr(result.charCount);\n offset += result.charCount;\n continue outer;\n }\n }\n\n // Check for em / strong delimiters\n let cap = /(^\\*+)|(^_+)/.exec(string);\n if (cap) {\n let delimCount = cap[0].length;\n const delimString = cap[0];\n const currentDelimiter = cap[0][0];\n\n string = string.substr(cap[0].length);\n\n const preceding = offset > 0 ? originalString.substr(0, offset) : \" \";\n const following = offset + cap[0].length < originalString.length ? string : \" \";\n\n const punctuationFollows = following.match(punctuationLeading);\n const punctuationPrecedes = preceding.match(punctuationTrailing);\n const whitespaceFollows = following.match(/^\\s/);\n const whitespacePrecedes = preceding.match(/\\s$/);\n\n let canOpen = !whitespaceFollows && (!punctuationFollows || !!whitespacePrecedes || !!punctuationPrecedes);\n let canClose = !whitespacePrecedes && (!punctuationPrecedes || !!whitespaceFollows || !!punctuationFollows);\n\n if (currentDelimiter === \"_\" && canOpen && canClose) {\n canOpen = !!punctuationPrecedes;\n canClose = !!punctuationFollows;\n }\n\n if (canClose) {\n let stackPointer = stack.length - 1;\n while (delimCount && stackPointer >= 0) {\n if (stack[stackPointer].delimiter === currentDelimiter) {\n while (stackPointer < stack.length - 1) {\n const entry = stack.pop()!;\n processed = `${entry.output}${entry.delimString.substr(0, entry.count)}${processed}`;\n }\n\n if (delimCount >= 2 && stack[stackPointer].count >= 2) {\n processed = `<span class=\"TMMark\">${currentDelimiter}${currentDelimiter}</span><strong class=\"TMStrong\">${processed}</strong><span class=\"TMMark\">${currentDelimiter}${currentDelimiter}</span>`;\n delimCount -= 2;\n stack[stackPointer].count -= 2;\n } else {\n processed = `<span class=\"TMMark\">${currentDelimiter}</span><em class=\"TMEm\">${processed}</em><span class=\"TMMark\">${currentDelimiter}</span>`;\n delimCount -= 1;\n stack[stackPointer].count -= 1;\n }\n\n if (stack[stackPointer].count === 0) {\n let entry = stack.pop()!;\n processed = `${entry.output}${processed}`;\n stackPointer--;\n }\n } else {\n stackPointer--;\n }\n }\n }\n\n if (delimCount && canOpen) {\n stack.push({\n delimiter: currentDelimiter,\n delimString: delimString,\n count: delimCount,\n output: processed,\n });\n processed = \"\";\n delimCount = 0;\n }\n\n if (delimCount) {\n processed = `${processed}${delimString.substr(0, delimCount)}`;\n }\n\n offset += cap[0].length;\n continue outer;\n }\n\n // Check for strikethrough delimiter\n cap = /^~~/.exec(string);\n if (cap) {\n let consumed = false;\n let stackPointer = stack.length - 1;\n while (!consumed && stackPointer >= 0) {\n if (stack[stackPointer].delimiter === \"~\") {\n while (stackPointer < stack.length - 1) {\n const entry = stack.pop()!;\n processed = `${entry.output}${entry.delimString.substr(0, entry.count)}${processed}`;\n }\n\n processed = `<span class=\"TMMark\">~~</span><del class=\"TMStrikethrough\">${processed}</del><span class=\"TMMark\">~~</span>`;\n let entry = stack.pop()!;\n processed = `${entry.output}${processed}`;\n consumed = true;\n } else {\n stackPointer--;\n }\n }\n\n if (!consumed) {\n stack.push({\n delimiter: \"~\",\n delimString: \"~~\",\n count: 2,\n output: processed,\n });\n processed = \"\";\n }\n\n offset += cap[0].length;\n string = string.substr(cap[0].length);\n continue outer;\n }\n\n // Process 'default' rule\n cap = inlineGrammar.default.regexp.exec(string);\n if (cap) {\n string = string.substr(cap[0].length);\n offset += cap[0].length;\n processed += inlineGrammar.default.replacement.replace(/\\$([1-9])/g, (str, p1) => htmlescape(cap[p1]));\n continue outer;\n }\n throw \"Infinite loop!\";\n }\n\n while (stack.length) {\n const entry = stack.pop()!;\n processed = `${entry.output}${entry.delimString.substr(0, entry.count)}${processed}`;\n }\n\n return processed;\n }\n\n private computeColumn(startNode: Node, offset: number): number | null {\n let node = startNode;\n let col: number;\n while (node && node.parentNode !== this.e) {\n node = node.parentNode!;\n }\n if (node === null) return null;\n\n if (startNode.nodeType === Node.TEXT_NODE || offset === 0) {\n col = offset;\n node = startNode;\n } else if (offset > 0) {\n node = startNode.childNodes[offset - 1];\n col = node.textContent!.length;\n } else {\n col = 0;\n node = startNode;\n }\n while (node.parentNode !== this.e) {\n if (node.previousSibling) {\n node = node.previousSibling;\n col += node.textContent!.length;\n } else {\n node = node.parentNode as unknown as ChildNode;\n }\n }\n return col;\n }\n\n private computeNodeAndOffset(row: number, col: number, bindRight: boolean = false): {node: Node, offset: number} {\n if (row >= this.lineElements.length) {\n row = this.lineElements.length - 1;\n col = this.lines[row].length;\n }\n if (col > this.lines[row].length) {\n col = this.lines[row].length;\n }\n const parentNode = this.lineElements[row] as HTMLElement;\n let node = parentNode.firstChild;\n\n let childrenComplete = false;\n let rv = {\n node: parentNode.firstChild ? parentNode.firstChild : parentNode,\n offset: 0,\n };\n\n while (node !== parentNode) {\n if (!childrenComplete && node!.nodeType === Node.TEXT_NODE) {\n if (node!.nodeValue!.length >= col) {\n if (bindRight && node!.nodeValue!.length === col) {\n rv = { node: node!, offset: col };\n col = 0;\n } else {\n return { node: node!, offset: col };\n }\n } else {\n col -= node!.nodeValue!.length;\n }\n }\n if (!childrenComplete && node!.firstChild) {\n node = node!.firstChild;\n } else if (node!.nextSibling) {\n childrenComplete = false;\n node = node!.nextSibling;\n } else {\n childrenComplete = true;\n node = node!.parentNode as unknown as ChildNode;\n }\n }\n\n return rv;\n }\n\n private updateLineContentsAndFormatting(): void {\n this.clearDirtyFlag();\n this.updateLineContents();\n this.updateFormatting();\n }\n\n private clearDirtyFlag(): void {\n this.lineDirty = new Array(this.lines.length);\n for (let i = 0; i < this.lineDirty.length; i++) {\n this.lineDirty[i] = false;\n }\n }\n\n private updateLineContents(): void {\n let lineDelta = this.e!.childElementCount - this.lines.length;\n if (lineDelta) {\n let firstChangedLine = 0;\n while (\n firstChangedLine <= this.lines.length &&\n firstChangedLine <= this.lineElements.length &&\n this.lineElements[firstChangedLine] &&\n this.lines[firstChangedLine] === (this.lineElements[firstChangedLine] as HTMLElement).textContent &&\n this.lineTypes[firstChangedLine] === (this.lineElements[firstChangedLine] as HTMLElement).className\n ) {\n firstChangedLine++;\n }\n\n let lastChangedLine = -1;\n while (\n -lastChangedLine < this.lines.length &&\n -lastChangedLine < this.lineElements.length &&\n this.lines[this.lines.length + lastChangedLine] ===\n (this.lineElements[this.lineElements.length + lastChangedLine] as HTMLElement).textContent &&\n this.lineTypes[this.lines.length + lastChangedLine] ===\n (this.lineElements[this.lineElements.length + lastChangedLine] as HTMLElement).className\n ) {\n lastChangedLine--;\n }\n\n let linesToDelete = this.lines.length + lastChangedLine + 1 - firstChangedLine;\n if (linesToDelete < -lineDelta) linesToDelete = -lineDelta;\n if (linesToDelete < 0) linesToDelete = 0;\n\n let linesToAdd = [];\n for (let l = 0; l < linesToDelete + lineDelta; l++) {\n linesToAdd.push((this.lineElements[firstChangedLine + l] as HTMLElement).textContent || \"\");\n }\n this.spliceLines(firstChangedLine, linesToDelete, linesToAdd, false);\n } else {\n for (let line = 0; line < this.lineElements.length; line++) {\n let e = this.lineElements[line] as HTMLElement;\n let ct = e.textContent || \"\";\n if (this.lines[line] !== ct || this.lineTypes[line] !== e.className) {\n this.lines[line] = ct;\n this.lineTypes[line] = e.className;\n this.lineDirty[line] = true;\n }\n }\n }\n }\n\n private processNewParagraph(sel: Position): void {\n if (!sel) return;\n\n this.updateLineContents();\n\n let continuableType: string | false = false;\n let checkLine = sel.col > 0 ? sel.row : sel.row - 1;\n switch (this.lineTypes[checkLine]) {\n case \"TMUL\":\n continuableType = \"TMUL\";\n break;\n case \"TMOL\":\n continuableType = \"TMOL\";\n break;\n case \"TMIndentedCode\":\n continuableType = \"TMIndentedCode\";\n break;\n }\n\n let lines = this.lines[sel.row].replace(/\\n\\n$/, \"\\n\").split(/(?:\\r\\n|\\n|\\r)/);\n if (lines.length > 1) {\n this.spliceLines(sel.row, 1, lines, true);\n sel.row++;\n sel.col = 0;\n }\n\n if (continuableType) {\n let capture = lineGrammar[continuableType].regexp.exec(this.lines[sel.row - 1]);\n if (capture) {\n if (capture[2]) {\n if (continuableType === \"TMOL\") {\n capture[1] = capture[1].replace(/\\d{1,9}/, (result) => {\n return (parseInt(result) + 1).toString();\n });\n }\n this.lines[sel.row] = `${capture[1]}${this.lines[sel.row]}`;\n this.lineDirty[sel.row] = true;\n sel.col = capture[1].length;\n } else {\n this.lines[sel.row - 1] = \"\";\n this.lineDirty[sel.row - 1] = true;\n }\n }\n }\n this.updateFormatting();\n }\n\n private spliceLines(\n startLine: number,\n linesToDelete: number = 0,\n linesToInsert: string[] = [],\n adjustLineElements: boolean = true\n ): void {\n if (adjustLineElements) {\n for (let i = 0; i < linesToDelete; i++) {\n this.e!.removeChild(this.e!.childNodes[startLine]);\n }\n }\n\n let insertedBlank = [];\n let insertedDirty = [];\n\n for (let i = 0; i < linesToInsert.length; i++) {\n insertedBlank.push(\"\");\n insertedDirty.push(true);\n if (adjustLineElements) {\n if (this.e!.childNodes[startLine])\n this.e!.insertBefore(document.createElement(\"div\"), this.e!.childNodes[startLine]);\n else this.e!.appendChild(document.createElement(\"div\"));\n }\n }\n\n this.lines.splice(startLine, linesToDelete, ...linesToInsert);\n this.lineTypes.splice(startLine, linesToDelete, ...insertedBlank);\n this.lineDirty.splice(startLine, linesToDelete, ...insertedDirty);\n }\n\n private fixNodeHierarchy(): void {\n const originalChildren = Array.from(this.e!.childNodes);\n\n const replaceChild = (child: Node, ...newChildren: Node[]) => {\n const parent = child.parentElement!;\n const nextSibling = child.nextSibling;\n parent.removeChild(child);\n newChildren.forEach((newChild) =>\n nextSibling ? parent.insertBefore(newChild, nextSibling) : parent.appendChild(newChild)\n );\n };\n\n originalChildren.forEach((child) => {\n if (child.nodeType !== Node.ELEMENT_NODE || (child as HTMLElement).tagName !== \"DIV\") {\n const divWrapper = document.createElement(\"div\");\n replaceChild(child, divWrapper);\n divWrapper.appendChild(child);\n } else if (child.childNodes.length === 0) {\n child.appendChild(document.createElement(\"br\"));\n } else {\n const grandChildren = Array.from(child.childNodes);\n if (\n grandChildren.some(\n (grandChild) =>\n grandChild.nodeType === Node.ELEMENT_NODE && (grandChild as HTMLElement).tagName === \"DIV\"\n )\n ) {\n return replaceChild(child, ...grandChildren);\n }\n }\n });\n }\n\n private parseLinkOrImage(originalString: string, isImage: boolean): {output: string, charCount: number} | false {\n // Skip the opening bracket\n let textOffset = isImage ? 2 : 1;\n let opener = originalString.substr(0, textOffset);\n let type = isImage ? \"TMImage\" : \"TMLink\";\n let currentOffset = textOffset;\n\n let bracketLevel = 1;\n let linkText: string | false = false;\n let linkRef: string | false = false;\n let linkLabel: string[] = [];\n let linkDetails: string[] = [];\n\n textOuter: while (\n currentOffset < originalString.length &&\n linkText === false\n ) {\n let string = originalString.substr(currentOffset);\n\n // Capture any escapes and code blocks at current position\n for (let rule of [\"escape\", \"code\", \"autolink\", \"html\"]) {\n let cap = inlineGrammar[rule].regexp.exec(string);\n if (cap) {\n currentOffset += cap[0].length;\n continue textOuter;\n }\n }\n\n // Check for image\n if (string.match(inlineGrammar.imageOpen.regexp)) {\n bracketLevel++;\n currentOffset += 2;\n continue textOuter;\n }\n\n // Check for link\n if (string.match(inlineGrammar.linkOpen.regexp)) {\n bracketLevel++;\n if (!isImage) {\n if (this.parseLinkOrImage(string, false)) {\n return false;\n }\n }\n currentOffset += 1;\n continue textOuter;\n }\n\n // Check for closing bracket\n if (string.match(/^\\]/)) {\n bracketLevel--;\n if (bracketLevel === 0) {\n linkText = originalString.substr(textOffset, currentOffset - textOffset);\n currentOffset++;\n continue textOuter;\n }\n }\n\n // Nothing matches, proceed to next char\n currentOffset++;\n }\n\n // Did we find a link text?\n if (linkText === false) return false;\n\n // Check what type of link this is\n let nextChar = currentOffset < originalString.length ? originalString.substr(currentOffset, 1) : \"\";\n\n // REFERENCE LINKS\n if (nextChar === \"[\") {\n let string = originalString.substr(currentOffset);\n let cap = inlineGrammar.linkLabel.regexp.exec(string);\n if (cap) {\n currentOffset += cap[0].length;\n linkLabel.push(cap[1], cap[2], cap[3]);\n if (cap[inlineGrammar.linkLabel.labelPlaceholder!]) {\n linkRef = cap[inlineGrammar.linkLabel.labelPlaceholder!];\n } else {\n linkRef = linkText.trim();\n }\n } else {\n return false;\n }\n } else if (nextChar !== \"(\") {\n // Shortcut ref link\n linkRef = linkText.trim();\n } else {\n // INLINE LINKS\n currentOffset++;\n let parenthesisLevel = 1;\n\n inlineOuter: while (currentOffset < originalString.length && parenthesisLevel > 0) {\n let string = originalString.substr(currentOffset);\n\n // Process whitespace\n let cap = /^\\s+/.exec(string);\n if (cap) {\n switch (linkDetails.length) {\n case 0:\n linkDetails.push(cap[0]);\n break;\n case 1:\n linkDetails.push(cap[0]);\n break;\n case 2:\n if (linkDetails[0].match(/</)) {\n linkDetails[1] = linkDetails[1].concat(cap[0]);\n } else {\n if (parenthesisLevel !== 1) return false;\n linkDetails.push(\"\");\n linkDetails.push(cap[0]);\n }\n break;\n case 3:\n linkDetails.push(cap[0]);\n break;\n case 4:\n return false;\n case 5:\n linkDetails.push(\"\");\n case 6:\n linkDetails[5] = linkDetails[5].concat(cap[0]);\n break;\n case 7:\n linkDetails[6] = linkDetails[6].concat(cap[0]);\n break;\n default:\n return false;\n }\n currentOffset += cap[0].length;\n continue inlineOuter;\n }\n\n // Process backslash escapes\n cap = inlineGrammar.escape.regexp.exec(string);\n if (cap) {\n switch (linkDetails.length) {\n case 0:\n linkDetails.push(\"\");\n case 1:\n linkDetails.push(cap[0]);\n break;\n case 2:\n linkDetails[1] = linkDetails[1].concat(cap[0]);\n break;\n case 3:\n return false;\n case 4:\n return false;\n case 5:\n linkDetails.push(\"\");\n case 6:\n linkDetails[5] = linkDetails[5].concat(cap[0]);\n break;\n default:\n return false;\n }\n currentOffset += cap[0].length;\n continue inlineOuter;\n }\n\n // Process opening angle bracket\n if (linkDetails.length < 2 && string.match(/^</)) {\n if (linkDetails.length === 0) linkDetails.push(\"\");\n linkDetails[0] = linkDetails[0].concat(\"<\");\n currentOffset++;\n continue inlineOuter;\n }\n\n // Process closing angle bracket\n if ((linkDetails.length === 1 || linkDetails.length === 2) && string.match(/^>/)) {\n if (linkDetails.length === 1) linkDetails.push(\"\");\n linkDetails.push(\">\");\n currentOffset++;\n continue inlineOuter;\n }\n\n // Process non-parenthesis delimiter for title\n cap = /^[\"']/.exec(string);\n if (cap && (linkDetails.length === 0 || linkDetails.length === 1 || linkDetails.length === 4)) {\n while (linkDetails.length < 4) linkDetails.push(\"\");\n linkDetails.push(cap[0]);\n currentOffset++;\n continue inlineOuter;\n }\n\n if (cap && (linkDetails.length === 5 || linkDetails.length === 6) && linkDetails[4] === cap[0]) {\n if (linkDetails.length === 5) linkDetails.push(\"\");\n linkDetails.push(cap[0]);\n currentOffset++;\n continue inlineOuter;\n }\n\n // Process opening parenthesis\n if (string.match(/^\\(/)) {\n switch (linkDetails.length) {\n case 0:\n linkDetails.push(\"\");\n case 1:\n linkDetails.push(\"\");\n case 2:\n linkDetails[1] = linkDetails[1].concat(\"(\");\n if (!linkDetails[0].match(/<$/)) parenthesisLevel++;\n break;\n case 3:\n linkDetails.push(\"\");\n case 4:\n linkDetails.push(\"(\");\n break;\n case 5:\n linkDetails.push(\"\");\n case 6:\n if (linkDetails[4] === \"(\") return false;\n linkDetails[5] = linkDetails[5].concat(\"(\");\n break;\n default:\n return false;\n }\n currentOffset++;\n continue inlineOuter;\n }\n\n // Process closing parenthesis\n if (string.match(/^\\)/)) {\n if (linkDetails.length <= 2) {\n while (linkDetails.length < 2) linkDetails.push(\"\");\n if (!linkDetails[0].match(/<$/)) parenthesisLevel--;\n if (parenthesisLevel > 0) {\n linkDetails[1] = linkDetails[1].concat(\")\");\n }\n } else if (linkDetails.length === 5 || linkDetails.length === 6) {\n if (linkDetails[4] === \"(\") {\n if (linkDetails.length === 5) linkDetails.push(\"\");\n linkDetails.push(\")\");\n } else {\n if (linkDetails.length === 5) linkDetails.push(\")\");\n else linkDetails[5] = linkDetails[5].concat(\")\");\n }\n } else {\n parenthesisLevel--;\n }\n\n if (parenthesisLevel === 0) {\n while (linkDetails.length < 7) linkDetails.push(\"\");\n }\n\n currentOffset++;\n continue inlineOuter;\n }\n\n // Any old character\n cap = /^./.exec(string);\n if (cap) {\n switch (linkDetails.length) {\n case 0:\n linkDetails.push(\"\");\n case 1:\n linkDetails.push(cap[0]);\n break;\n case 2:\n linkDetails[1] = linkDetails[1].concat(cap[0]);\n break;\n case 3:\n return false;\n case 4:\n return false;\n case 5:\n linkDetails.push(\"\");\n case 6:\n linkDetails[5] = linkDetails[5].concat(cap[0]);\n break;\n default:\n return false;\n }\n currentOffset += cap[0].length;\n continue inlineOuter;\n }\n throw \"Infinite loop\";\n }\n if (parenthesisLevel > 0) return false;\n }\n\n if (linkRef !== false) {\n // Reference link; check that linkRef is valid\n let valid = false;\n for (let label of this.linkLabels) {\n if (label === linkRef) {\n valid = true;\n break;\n }\n }\n let labelClass = valid ? \"TMLinkLabel TMLinkLabel_Valid\" : \"TMLinkLabel TMLinkLabel_Invalid\";\n let output = `<span class=\"TMMark TMMark_${type}\">${opener}</span><span class=\"${type} ${\n linkLabel.length < 3 || !linkLabel[1] ? labelClass : \"\"\n }\">${this.processInlineStyles(linkText)}</span><span class=\"TMMark TMMark_${type}\">]</span>`;\n\n if (linkLabel.length >= 3) {\n output = output.concat(\n `<span class=\"TMMark TMMark_${type}\">${linkLabel[0]}</span>`,\n `<span class=\"${labelClass}\">${linkLabel[1]}</span>`,\n `<span class=\"TMMark TMMark_${type}\">${linkLabel[2]}</span>`\n );\n }\n return {\n output: output,\n charCount: currentOffset,\n };\n } else if (linkDetails.length > 0) {\n // Inline link\n while (linkDetails.length < 7) {\n linkDetails.push(\"\");\n }\n\n return {\n output: `<span class=\"TMMark TMMark_${type}\">${opener}</span><span class=\"${type}\">${this.processInlineStyles(\n linkText\n )}</span><span class=\"TMMark TMMark_${type}\">](${\n linkDetails[0]\n }</span><span class=\"${type}Destination\">${\n linkDetails[1]\n }</span><span class=\"TMMark TMMark_${type}\">${linkDetails[2]}${\n linkDetails[3]\n }${linkDetails[4]}</span><span class=\"${type}Title\">${\n linkDetails[5]\n }</span><span class=\"TMMark TMMark_${type}\">${linkDetails[6]})</span>`,\n charCount: currentOffset,\n };\n }\n\n return false;\n }\n\n private computeCommonAncestor(node1: Node | null, node2: Node | null): Node | null {\n if (!node1 || !node2) return null;\n if (node1 === node2) return node1;\n const ancestry = (node: Node) => {\n let ancestry = [];\n while (node) {\n ancestry.unshift(node);\n node = node.parentNode!;\n }\n return ancestry;\n };\n\n const ancestry1 = ancestry(node1);\n const ancestry2 = ancestry(node2);\n\n if (ancestry1[0] !== ancestry2[0]) return null;\n let i;\n for (i = 0; ancestry1[i] === ancestry2[i]; i++);\n return ancestry1[i - 1];\n }\n\n private computeEnclosingMarkupNode(focus: Position, anchor: Position | null, className: string): Node | null {\n let node = null;\n if (!focus) return null;\n if (!anchor) {\n const sel = window.getSelection();\n if (!sel || !sel.focusNode) return null;\n node = sel.focusNode;\n } else {\n if (focus.row !== anchor.row) return null;\n const sel = window.getSelection();\n if (!sel) return null;\n node = this.computeCommonAncestor(sel.focusNode, sel.anchorNode);\n }\n if (!node) return null;\n while (node !== this.e) {\n if ((node as HTMLElement).className && (node as HTMLElement).className.includes(className)) return node;\n node = node.parentNode!;\n }\n return null;\n }\n\n public getCommandState(focus: Position | null = null, anchor: Position | null = null): Record<string, boolean | null> {\n let commandState: Record<string, boolean | null> = {};\n if (!focus) focus = this.getSelection(false);\n if (!anchor) anchor = this.getSelection(true);\n if (!focus) {\n for (let cmd in commands) {\n commandState[cmd] = null;\n }\n return commandState;\n }\n if (!anchor) anchor = focus;\n\n let start: Position, end: Position;\n if (anchor.row < focus.row || (anchor.row === focus.row && anchor.col < focus.col)) {\n start = anchor;\n end = focus;\n } else {\n start = focus;\n end = anchor;\n }\n if (end.row > start.row && end.col === 0) {\n end.row--;\n end.col = this.lines[end.row].length;\n }\n\n for (let cmd in commands) {\n if (commands[cmd].type === \"inline\") {\n if (!focus || focus.row !== anchor!.row || !this.isInlineFormattingAllowed()) {\n commandState[cmd] = null;\n } else {\n commandState[cmd] =\n !!this.computeEnclosingMarkupNode(focus, anchor, commands[cmd].className) ||\n (focus.col === anchor!.col &&\n !!this.lines[focus.row].substr(0, focus.col).match(commands[cmd].unset.prePattern) &&\n !!this.lines[focus.row].substr(focus.col).match(commands[cmd].unset.postPattern));\n }\n }\n if (commands[cmd].type === \"line\") {\n if (!focus) {\n commandState[cmd] = null;\n } else {\n let state: boolean | null = this.lineTypes[start.row] === commands[cmd].className;\n for (let line = start.row; line <= end.row; line++) {\n if ((this.lineTypes[line] === commands[cmd].className) !== state) {\n state = null;\n break;\n }\n }\n commandState[cmd] = state;\n }\n }\n }\n return commandState;\n }\n\n public setCommandState(command: string, state: boolean): void {\n if (!this.isRestoringHistory) this.pushHistory();\n if (commands[command].type === \"inline\") {\n let anchor = this.getSelection(true);\n let focus = this.getSelection(false);\n if (!anchor) anchor = focus;\n if (!anchor) return;\n if (anchor.row !== focus!.row) return;\n if (!this.isInlineFormattingAllowed()) return;\n let markupNode = this.computeEnclosingMarkupNode(focus!, anchor, commands[command].className);\n this.clearDirtyFlag();\n\n if (markupNode) {\n this.lineDirty[focus!.row] = true;\n const startCol = this.computeColumn(markupNode, 0)!;\n const len = markupNode.textContent!.length;\n const left = this.lines[focus!.row]\n .substr(0, startCol)\n .replace(commands[command].unset.prePattern, \"\");\n const mid = this.lines[focus!.row].substr(startCol, len);\n const right = this.lines[focus!.row]\n .substr(startCol + len)\n .replace(commands[command].unset.postPattern, \"\");\n this.lines[focus!.row] = left.concat(mid, right);\n anchor.col = left.length;\n focus!.col = anchor.col + len;\n this.updateFormatting();\n this.setSelection(focus!, anchor);\n this.fireChange();\n } else if (\n focus!.col === anchor.col &&\n !!this.lines[focus!.row].substr(0, focus!.col).match(commands[command].unset.prePattern) &&\n !!this.lines[focus!.row].substr(focus!.col).match(commands[command].unset.postPattern)\n ) {\n this.lineDirty[focus!.row] = true;\n const left = this.lines[focus!.row]\n .substr(0, focus!.col)\n .replace(commands[command].unset.prePattern, \"\");\n const right = this.lines[focus!.row]\n .substr(focus!.col)\n .replace(commands[command].unset.postPattern, \"\");\n this.lines[focus!.row] = left.concat(right);\n focus!.col = anchor.col = left.length;\n this.updateFormatting();\n this.setSelection(focus!, anchor);\n this.fireChange();\n } else {\n let { startCol, endCol } =\n focus!.col < anchor.col\n ? { startCol: focus!.col, endCol: anchor.col }\n : { startCol: anchor.col, endCol: focus!.col };\n\n let match = this.lines[focus!.row]\n .substr(startCol, endCol - startCol)\n .match(/^(?<leading>\\s*).*\\S(?<trailing>\\s*)$/);\n if (match) {\n startCol += match.groups!.leading.length;\n endCol -= match.groups!.trailing.length;\n }\n\n focus!.col = startCol;\n anchor.col = endCol;\n\n this.wrapSelection(commands[command].set.pre, commands[command].set.post, focus, anchor);\n this.fireChange();\n }\n } else if (commands[command].type === \"line\") {\n let anchor = this.getSelection(true);\n let focus = this.getSelection(false);\n if (!anchor) anchor = focus;\n if (!focus) return;\n this.clearDirtyFlag();\n let start = anchor!.row > focus!.row ? focus! : anchor!;\n let end = anchor!.row > focus!.row ? anchor! : focus!;\n if (end.row > start.row && end.col === 0) {\n end.row--;\n }\n\n for (let line = start.row; line <= end.row; line++) {\n if (state && this.lineTypes[line] !== commands[command].className) {\n this.lines[line] = this.lines[line].replace(\n commands[command].set.pattern,\n commands[command].set.replacement.replace(\"$#\", (line - start.row + 1).toString())\n );\n this.lineDirty[line] = true;\n }\n if (!state && this.lineTypes[line] === commands[command].className) {\n this.lines[line] = this.lines[line].replace(\n commands[command].unset.pattern,\n commands[command].unset.replacement\n );\n this.lineDirty[line] = true;\n }\n }\n this.updateFormatting();\n this.setSelection(\n { row: end.row, col: this.lines[end.row].length },\n { row: start.row, col: 0 }\n );\n this.fireChange();\n }\n }\n\n private isInlineFormattingAllowed(): boolean {\n const sel = window.getSelection();\n if (!sel || !sel.focusNode || !sel.anchorNode) return false;\n\n if (\n sel.isCollapsed &&\n sel.focusNode.nodeType === 3 &&\n sel.focusOffset === sel.focusNode.nodeValue!.length\n ) {\n let node;\n for (node = sel.focusNode; node && node.nextSibling === null; node = node.parentNode!);\n if (\n node &&\n node.nextSibling &&\n (node.nextSibling as HTMLElement).className &&\n (node.nextSibling as HTMLElement).className.includes(\"TMInlineFormatted\")\n )\n return true;\n }\n\n let ancestor = this.computeCommonAncestor(sel.focusNode, sel.anchorNode);\n if (!ancestor) return false;\n\n while (ancestor && ancestor !== this.e) {\n if (\n (ancestor as HTMLElement).className &&\n typeof (ancestor as HTMLElement).className.includes === \"function\" &&\n ((ancestor as HTMLElement).className.includes(\"TMInlineFormatted\") ||\n (ancestor as HTMLElement).className.includes(\"TMBlankLine\"))\n )\n return true;\n ancestor = ancestor.parentNode!;\n }\n\n return false;\n }\n\n public toggleCommandState(command: string): void {\n if (!this.lastCommandState) this.lastCommandState = this.getCommandState();\n this.setCommandState(command, !this.lastCommandState[command]);\n }\n\n private fireDrop(dataTransfer: DataTransfer): void {\n for (let listener of this.listeners.drop) {\n listener({ dataTransfer });\n }\n }\n\n private fireSelection(): void {\n if (this.listeners.selection && this.listeners.selection.length) {\n let focus = this.getSelection(false);\n let anchor = this.getSelection(true);\n let commandState = this.getCommandState(focus, anchor);\n if (this.lastCommandState) {\n Object.assign(this.lastCommandState, commandState);\n } else {\n this.lastCommandState = Object.assign({}, commandState);\n }\n for (let listener of this.listeners.selection) {\n listener({\n focus: focus!,\n anchor: anchor!,\n commandState: this.lastCommandState,\n });\n }\n }\n }\n}\n\nexport default Editor;"],"names":["svg","blockquote","bold","clear_formatting","code","h1","h2","hr","image","italic","link","ol","redo","strikethrough","ul","undo","isMacLike","test","navigator","platform","DefaultCommands","name","action","innerHTML","title","hotkey","insertLink","editor","isInlineFormattingAllowed","wrapSelection","enabled","focus","anchor","insertImage","paste","canUndo","canRedo","CommandBar","constructor","props","e","commands","buttons","state","hotkeys","element","document","getElementById","body","createCommandBarElement","addEventListener","handleKeydown","setEditor","parentElement","createElement","className","command","el","appendChild","commandName","Object","assign","keys","split","modifiers","modifierexplanation","i","length","push","match","key","toLowerCase","concat","join","handleClick","event","preventDefault","setCommandState","handleSelection","commandState","undefined","outer","modifier","global","this","require$$0","require$$1","require$$2","sharedStoreModule","require$$3","require$$4","require$$5","require$$6","require$$7","makeBuiltIn","makeBuiltInModule","replacements","ASCIIPunctuation","NotTriggerChar","Scheme","Email","HTMLOpenTag","HTMLCloseTag","HTMLTagName","HTMLComment","HTMLPI","HTMLDeclaration","HTMLCDATA","HTMLAttribute","HTMLAttValue","KnownTag","punctuationLeading","RegExp","punctuationTrailing","lineGrammar","TMH1","regexp","replacement","TMH2","TMH3","TMH4","TMH5","TMH6","TMBlockquote","TMCodeFenceBacktickOpen","TMCodeFenceTildeOpen","TMCodeFenceBacktickClose","TMCodeFenceTildeClose","TMBlankLine","TMSetextH1Marker","TMSetextH2Marker","TMHR","TMUL","TMOL","TMIndentedCode","TMLinkReferenceDefinition","labelPlaceholder","htmlBlockGrammar","start","end","paraInterrupt","inlineGrammar","escape","autolink","html","linkOpen","imageOpen","linkLabel","default","replacementRegexp","inlineRules","rule","re","source","replace","string","flags","htmlescape","type","set","pre","post","unset","prePattern","postPattern","pattern","h3","h4","h5","h6","Editor","textarea","lines","lineElements","lineTypes","lineCaptures","lineReplacements","linkLabels","lineDirty","lastCommandState","listeners","change","selection","drop","undoStack","redoStack","isRestoringHistory","maxHistory","getElementsByTagName","tagName","parentNode","style","display","createEditorElement","setContent","content","value","handleUndoRedoKey","pushHistory","pushCurrentState","getContent","getSelection","shift","current","pop","prev","setSelection","next","isMac","ctrl","metaKey","ctrlKey","altKey","shiftKey","classList","add","contentEditable","whiteSpace","webkitUserModify","nextSibling","insertBefore","handleInputEvent","handleSelectionChangeEvent","handlePaste","handleDrop","childNodes","firstChild","removeChild","lineNum","le","Array","updateFormatting","fireChange","updateLineTypes","updateLinkLabels","applyLineTypes","l","capture","str","p1","p2","parseInt","processInlineStyles","contentHTML","removeAttribute","dataset","toString","codeBlockType","codeBlockSeqLength","htmlBlock","lineType","lineCapture","lineReplacement","exec","groups","htmlBlockType","headingLine","headingLineType","getAnchor","window","startNode","anchorNode","focusNode","offset","anchorOffset","focusOffset","row","col","computeColumn","node","previousSibling","_a","arguments","computeNodeAndOffset","windowSelection","setBaseAndExtent","text","beginning","insertedLines","lineBefore","substr","lineEnd","endColPos","spliceLines","startCol","endCol","left","mid","right","listener","linesDirty","inputEvent","inputType","clearDirtyFlag","processNewParagraph","fixNodeHierarchy","updateLineContentsAndFormatting","_e","fireSelection","clipboardData","getData","fireDrop","dataTransfer","originalString","processed","stack","cap","potentialLink","potentialImage","result","parseLinkOrImage","output","charCount","delimCount","delimString","currentDelimiter","preceding","following","punctuationFollows","punctuationPrecedes","whitespaceFollows","whitespacePrecedes","canOpen","canClose","stackPointer","delimiter","entry","count","consumed","nodeType","Node","TEXT_NODE","textContent","bindRight","childrenComplete","rv","nodeValue","updateLineContents","lineDelta","childElementCount","firstChangedLine","lastChangedLine","linesToDelete","linesToAdd","line","ct","sel","continuableType","checkLine","startLine","linesToInsert","adjustLineElements","insertedBlank","insertedDirty","splice","originalChildren","from","replaceChild","child","parent","_len","newChildren","_key","forEach","newChild","ELEMENT_NODE","divWrapper","grandChildren","some","grandChild","isImage","textOffset","opener","currentOffset","bracketLevel","linkText","linkRef","linkDetails","textOuter","nextChar","trim","parenthesisLevel","inlineOuter","valid","label","labelClass","computeCommonAncestor","node1","node2","ancestry","unshift","ancestry1","ancestry2","computeEnclosingMarkupNode","includes","getCommandState","cmd","markupNode","len","leading","trailing","isCollapsed","ancestor","toggleCommandState"],"mappings":"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","x_google_ignoreList":[2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49]}
|
|
3204
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VzIjpbInNyYy9zdmcvc3ZnLnRzIiwic3JjL1RpbnlNREVDb21tYW5kQmFyLnRzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2dsb2JhbC10aGlzLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2ZhaWxzLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2Rlc2NyaXB0b3JzLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtbmF0aXZlLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcy5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pcy1jYWxsYWJsZS5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pcy1udWxsLW9yLXVuZGVmaW5lZC5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9yZXF1aXJlLW9iamVjdC1jb2VyY2libGUuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tb2JqZWN0LmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHkuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZnVuY3Rpb24tbmFtZS5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pcy1wdXJlLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2RlZmluZS1nbG9iYWwtcHJvcGVydHkuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2hhcmVkLXN0b3JlLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2luc3BlY3Qtc291cmNlLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3dlYWstbWFwLWJhc2ljLWRldGVjdGlvbi5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pcy1vYmplY3QuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZG9jdW1lbnQtY3JlYXRlLWVsZW1lbnQuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaWU4LWRvbS1kZWZpbmUuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdjgtcHJvdG90eXBlLWRlZmluZS1idWcuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvYW4tb2JqZWN0LmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZW52aXJvbm1lbnQtdXNlci1hZ2VudC5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9lbnZpcm9ubWVudC12OC12ZXJzaW9uLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3N5bWJvbC1jb25zdHJ1Y3Rvci1kZXRlY3Rpb24uanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdXNlLXN5bWJvbC1hcy11aWQuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXMtc3ltYm9sLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RyeS10by1zdHJpbmcuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvYS1jYWxsYWJsZS5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9nZXQtbWV0aG9kLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29yZGluYXJ5LXRvLXByaW1pdGl2ZS5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zaGFyZWQuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdWlkLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RvLXByaW1pdGl2ZS5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy90by1wcm9wZXJ0eS1rZXkuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eS5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHktZGVzY3JpcHRvci5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHkuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2hhcmVkLWtleS5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9oaWRkZW4ta2V5cy5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pbnRlcm5hbC1zdGF0ZS5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9tYWtlLWJ1aWx0LWluLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbi1hY2Nlc3Nvci5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9yZWdleHAtZmxhZ3MuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnJlZ2V4cC5mbGFncy5qcyIsInNyYy9ncmFtbWFyLnRzIiwic3JjL1RpbnlNREUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiY29uc3Qgc3ZnOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuICBibG9ja3F1b3RlOiBgPHN2ZyBoZWlnaHQ9XCIxOFwiIHdpZHRoPVwiMThcIj48cmVjdCB3aWR0aD1cIjVcIiBoZWlnaHQ9XCI1XCIgeD1cIjNcIiB5PVwiNFwiIHJ5PVwiMVwiLz48cmVjdCByeT1cIjFcIiB5PVwiNFwiIHg9XCIxMFwiIGhlaWdodD1cIjVcIiB3aWR0aD1cIjVcIi8+PHBhdGggZD1cIk04IDYuOTk5djNjMCAxLTEgMy0xIDNzLS4zMzEgMS0xLjMzMSAxaC0xYy0xIDAtLjY2OS0xLS42NjktMXMxLTIgMS0zdi0zem03IDB2M2MwIDEtMSAzLTEgM3MtLjMzMSAxLTEuMzMxIDFoLTFjLTEgMC0uNjY5LTEtLjY2OS0xczEtMiAxLTN2LTN6XCIvPjwvc3ZnPmAsXG4gIGJvbGQ6IGA8c3ZnIGhlaWdodD1cIjE4XCIgd2lkdGg9XCIxOFwiPjxwYXRoIGQ9XCJNNCAyYTEgMSAwIDAwLTEgMXYxMmExIDEgMCAwMDEgMWg2YzQgMCA1LTIgNS00IDAtMS4zMjItLjQzNC0yLjYzNi0xLjg4NS0zLjM4MUMxMy43NzIgNy44ODUgMTQgNi45NDUgMTQgNmMwLTItMS00LTUtNHptMSAyaDRjMS42NjggMCAyLjMyLjM5MyAyLjYuNjcyLjI4LjI3OS40LjY2Mi40IDEuMzI4cy0uMTIgMS4wNTctLjQgMS4zMzhjLS4yNzUuMjc0LTEuMDE0LjY0Ni0yLjYuNjYySDV6bTUgNmMxLjY2Ni4wMDUgMi4zMTguMzg4IDIuNTk2LjY2Ni4yNzcuMjc4LjQwNC42NjcuNDA0IDEuMzM0cy0uMTI3IDEuMDYtLjQwNCAxLjMzOGMtLjI3OC4yNzgtLjkzLjY2LTIuNTk2LjY2MmwtNC45OTIuMDA0TDUgMTB6XCIvPjwvc3ZnPmAsXG4gIGNsZWFyX2Zvcm1hdHRpbmc6IGA8c3ZnIGhlaWdodD1cIjE4XCIgd2lkdGg9XCIxOFwiPjxwYXRoIGQ9XCJNMTEuMDMgMWExIDEgMCAwMC0uNzQuM2wtOSA5YTEgMSAwIDAwMCAxLjRsNCA0QTEgMSAwIDAwNiAxNmgyYTEgMSAwIDAwLjctLjNsOC04YTEgMSAwIDAwMC0xLjRsLTUtNWExIDEgMCAwMC0uNjctLjN6TTguNyA1LjdsMy41OCAzLjZMNy42IDE0SDYuNGwtMy0zIDUuMy01LjN6XCIvPjxyZWN0IHJ5PVwiLjhcIiByeD1cIi44XCIgeT1cIjE0XCIgeD1cIjE2XCIgaGVpZ2h0PVwiMlwiIHdpZHRoPVwiMlwiLz48cmVjdCB3aWR0aD1cIjJcIiBoZWlnaHQ9XCIyXCIgeD1cIjEzXCIgeT1cIjE0XCIgcng9XCIuOFwiIHJ5PVwiLjhcIi8+PHJlY3Qgcnk9XCIuOFwiIHJ4PVwiLjhcIiB5PVwiMTRcIiB4PVwiMTBcIiBoZWlnaHQ9XCIyXCIgd2lkdGg9XCIyXCIvPjwvc3ZnPmAsXG4gIGNvZGU6IGA8c3ZnIGhlaWdodD1cIjE4XCIgd2lkdGg9XCIxOFwiPjxwYXRoIGQ9XCJNMTMuNSAyLjk5NGEuNS41IDAgMDAtLjUuNS41LjUgMCAwMDAgLjAzNFY0LjUzYTUuOTkzIDUuOTkzIDAgMDAtNy40NTEtLjQ0NUE2IDYgMCAxMDEyLjQ1IDEzLjlhNS45OSA1Ljk5IDAgMDAxLjM0Ni0xLjMzNC41LjUgMCAwMC4wOTYtLjEwMS41LjUgMCAwMC0uMTItLjY5OC41LjUgMCAwMC0uNjk3LjEybC0uMDA0LS4wMDVhNSA1IDAgMDEtMS4xOTcgMS4yIDUgNSAwIDExMS4yMTUtNi45NjUuNS41IDAgMDAuNjk3LjEyLjUuNSAwIDAwLjIxMS0uNDRWNC43NDVIMTRWMy40OTNhLjUuNSAwIDAwLS41LS41elwiLz48L3N2Zz5gLFxuICBoMTogYDxzdmcgaGVpZ2h0PVwiMThcIiB3aWR0aD1cIjE4XCI+PHBhdGggZD1cIk0zIDJzMC0xIDEtMWgxYzEgMCAxIDEgMSAxdjZoNlYyczAtMSAxLTFoMWMxIDAgMSAxIDEgMXYxNHMwIDEtMSAxaC0xYy0xIDAtMS0xLTEtMXYtNkg2djZzMCAxLTEgMUg0Yy0xIDAtMS0xLTEtMXpcIi8+PC9zdmc+YCxcbiAgaDI6IGA8c3ZnIGhlaWdodD1cIjE4XCIgd2lkdGg9XCIxOFwiPjxwYXRoIGQ9XCJNNCAyczAtMSAxLTEgMSAxIDEgMXY2YzEtMSAyLTEgNC0xIDMgMCA0IDIgNCA0djVzMCAxLTEgMS0xLTEtMS0xdi01YzAtMS4wOTQtMS0yLTItMi0yIDAtMyAwLTQgMnY1czAgMS0xIDEtMS0xLTEtMXpcIi8+PC9zdmc+YCxcbiAgaHI6IGA8c3ZnIGhlaWdodD1cIjE4XCIgd2lkdGg9XCIxOFwiPjxyZWN0IHJ5PVwiMVwiIHk9XCI4XCIgaGVpZ2h0PVwiMlwiIHdpZHRoPVwiMThcIiBzdHlsZT1cImZvbnQtdmFyaWF0aW9uLXNldHRpbmdzOm5vcm1hbDttYXJrZXI6bm9uZVwiLz48L3N2Zz5gLFxuICBpbWFnZTogYDxzdmcgaGVpZ2h0PVwiMThcIiB3aWR0aD1cIjE4XCI+PHBhdGggZD1cIk0xIDJ2MTRoMTZWMkgxem0yIDJoMTJ2N2wtMy0zLTQgNC0yLTItMyAzVjR6XCIvPjxjaXJjbGUgcj1cIjEuNVwiIGN5PVwiNi41XCIgY3g9XCI1LjVcIi8+PC9zdmc+YCxcbiAgaXRhbGljOiBgPHN2ZyBoZWlnaHQ9XCIxOFwiIHdpZHRoPVwiMThcIj48cGF0aCBkPVwiTTkgMmExIDEgMCAwMDAgMkw3IDE0YTEgMSAwIDEwMCAyaDJhMSAxIDAgMDAwLTJsMi0xMGExIDEgMCAxMDAtMnpcIi8+PC9zdmc+YCxcbiAgbGluazogYDxzdmcgaGVpZ2h0PVwiMThcIiB3aWR0aD1cIjE4XCI+PHBhdGggZD1cIk05LjA3IDUuMThhMy45IDMuOSAwIDAwLTEuNTIuNDNDNi4zMSA2LjIyIDUuMyA3LjI5IDQuMyA4LjI5Yy0xIDEtMi4wNyAyLjAyLTIuNjggMy4yNi0uMzEuNjItLjUgMS4zMy0uNDEgMi4wNy4wOS43NS40OCAxLjQ3IDEuMSAyLjA5LjYxLjYxIDEuMzMgMSAyLjA4IDEuMS43NC4wOSAxLjQ1LS4xIDIuMDctLjQyIDEuMjQtLjYxIDIuMjYtMS42OCAzLjI2LTIuNjguNDYtLjQ3Ljk0LS45NCAxLjM5LTEuNDRsLS40My4yNmMtLjY4LjM0LTEuNDkuNTYtMi4zNi40Ni0uMi0uMDMtLjQtLjA4LS42LS4xNC0uNzkuNzYtMS41NSAxLjQ1LTIuMTYgMS43Ni0uMzguMTktLjY3LjI0LS45Mi4yMS0uMjYtLjAzLS41NC0uMTQtLjkyLS41My0uMzktLjM4LS41LS42Ni0uNTMtLjkxLS4wMy0uMjYuMDItLjU1LjIxLS45My4zOS0uNzYgMS4zMi0xLjc0IDIuMzItMi43NCAxLTEgMS45OC0xLjkzIDIuNzQtMi4zMi4zOC0uMTkuNjctLjI0LjkzLS4yMS4yNS4wMy41My4xNC45MS41My4zOS4zOC41LjY2LjUzLjkydi4wNmwxLjEyLTEuMDYuNDQtLjQ3Yy0uMTgtLjMtLjQtLjYtLjY3LS44Ny0uNjItLjYxLTEuMzQtMS0yLjA5LTEuMWEzLjA4IDMuMDggMCAwMC0uNTUtLjAxelwiLz48cGF0aCBkPVwiTTEzLjA3Ljg2YTMuOSAzLjkgMCAwMC0xLjUyLjQzYy0xLjI0LjYyLTIuMjYgMS42OS0zLjI2IDIuNjktLjQ2LjQ3LS45NC45NC0xLjM5IDEuNDMuMTUtLjA4LjI4LS4xOC40My0uMjVhNC40IDQuNCAwIDAxMi4zNi0uNDZjLjIuMDIuNC4wNy42LjE0Ljc5LS43NyAxLjU1LTEuNDYgMi4xNi0xLjc2LjM4LS4xOS42Ny0uMjUuOTMtLjIxLjI1LjAzLjUzLjE0LjkxLjUyLjM5LjM4LjUuNjYuNTMuOTIuMDMuMjYtLjAyLjU1LS4yMS45My0uMzkuNzYtMS4zMiAxLjc0LTIuMzIgMi43NC0xIDEtMS45OCAxLjkzLTIuNzQgMi4zMS0uMzguMi0uNjcuMjUtLjkzLjIyLS4yNS0uMDQtLjUzLS4xNS0uOTEtLjUzLS4zOS0uMzgtLjUtLjY2LS41My0uOTJWOWMtLjM2LjMzLS43My42Ny0xLjEyIDEuMDZsLS40My40NmMuMTcuMy40LjYuNjYuODcuNjIuNjIgMS4zNCAxIDIuMDggMS4xLjc1LjEgMS40Ni0uMSAyLjA4LS40MSAxLjI0LS42MiAyLjI2LTEuNjkgMy4yNi0yLjY5czIuMDctMi4wMiAyLjY4LTMuMjZjLjMxLS42Mi41LTEuMzIuNDEtMi4wN2EzLjYzIDMuNjMgMCAwMC0xLjEtMi4wOGMtLjYxLS42Mi0xLjMzLTEtMi4wNy0xLjFhMy4wOCAzLjA4IDAgMDAtLjU2LS4wMnpcIi8+PC9zdmc+YCxcbiAgb2w6IGA8c3ZnIGhlaWdodD1cIjE4XCIgd2lkdGg9XCIxOFwiPjxwYXRoIGQ9XCJNMS41IDdhLjUuNSAwIDEwMCAxaDFhLjUuNSAwIDAxLjUuNWMwIC4xNjQtLjA4LjMxLS4xNC4zNTVsLTEuNjU1IDEuMjVBLjQ5Mi40OTIgMCAwMDEgMTAuNWEuNS41IDAgMDAuNS41aDJhLjUuNSAwIDAwMC0xSDNsLjM5OC0uMjk5QTEuNSAxLjUgMCAwMDIuNSA3elwiLz48cGF0aCBkPVwiTTEuNSAxMmMtLjY2NyAwLS42NjcgMSAwIDFoMS4yNWMuMzMzIDAgLjMzMy41IDAgLjVIMi41Yy0uNjY3IDAtLjY2NyAxIDAgMWguMjVjLjMzMyAwIC4zMzMuNSAwIC41SDEuNWMtLjY2NyAwLS42NjcgMSAwIDFoMWMuMzk4IDAgLjc4LS4xMzEgMS4wNi0uMzY1LjI4Mi0uMjM1LjQ0LS41NTQuNDQtLjg4NWExLjEyMSAxLjEyMSAwIDAwLS4zMDMtLjc1Yy4xOTEtLjIwNC4zLS40Ny4zMDMtLjc1IDAtLjMzMi0uMTU4LS42NTEtLjQ0LS44ODUtLjMtLjI0MS0uNjc1LS4zNy0xLjA2LS4zNjV6XCIvPjxyZWN0IHk9XCIxM1wiIHg9XCI2XCIgaGVpZ2h0PVwiMlwiIHdpZHRoPVwiMTJcIiByeT1cIjFcIi8+PHJlY3Qgcnk9XCIxXCIgd2lkdGg9XCIxMlwiIGhlaWdodD1cIjJcIiB4PVwiNlwiIHk9XCI4XCIvPjxyZWN0IHk9XCIzXCIgeD1cIjZcIiBoZWlnaHQ9XCIyXCIgd2lkdGg9XCIxMlwiIHJ5PVwiMVwiLz48cGF0aCBkPVwiTTEuNSAyYS41LjUgMCAxMDAgMUgydjJoLS41YS41LjUgMCAxMDAgMWgyYS41LjUgMCAxMDAtMUgzVjIuNWMwLS4yNzctLjIyMy0uNS0uNS0uNXpcIi8+PC9zdmc+YCxcbiAgcmVkbzogYDxzdmcgaGVpZ2h0PVwiMThcIiB3aWR0aD1cIjE4XCI+PHBhdGggZD1cIk0gNy4yNjk1MzA4LDIuNzA1MDc4MSBDIDguMTEyODc1NSwyLjcwODE1ODEgOC45NTI5ODk1LDIuODcxMjE1NiA5LjczMDQ2OSwzLjEzNDc2NTYgMTEuNDA4ODc0LDMuNzAzNzEyMSAxMi45MDE0Miw0LjY4NDcxMDQgMTQsNS42MzY3MTg4IFYgNCBoIDIgViA5IEggMTEgViA3IGggMS41MDk3NjUgQyAxMS41OTA3NSw2LjI0ODUxNzMgMTAuMzQwMjA4LDUuNDUzODA4IDkuMDg3ODkwNCw1LjAyOTI5NjkgNy40MzA5Mzk4LDQuNDY3NjIzMSA1Ljk0NTM0NTgsNC40Njg3MTcgNC43MDcwMzA4LDUuNzA3MDMxMiBjIC0xLjIyNTAxNCwxLjIyNTAxNDIgLTEuNDA5NzY5LDIuNzIwNjk1MyAtMC43NzkyOTcsNC4yOTY4NzQ4IDAuNjMwNDcyLDEuNTc2MTggMi4xNjc0NzUsMy4xNTgwMDYgNC40NDMzNTk4LDQuMDY4MzYgbCAtMC43NDIxODc4LDEuODU1NDY4IGMgLTIuNzI0MTE1LC0xLjA4OTY0NiAtNC42ODcxMTIsLTMuMDA3ODIgLTUuNTU2NjQsLTUuMTgxNjQgLTAuODY5NTI4LC0yLjE3MzgyMDYgLTAuNTU0MjgzLC00LjY3ODEzOTMgMS4yMjA3MDMsLTYuNDUzMTI1MiAwLjkyMzg1NywtMC45MjM4NTY4IDIuMDE1Mzg4LC0xLjM4ODgyOCAzLjEzNDc2NSwtMS41MzUxNTYzIDAuMjc5ODQ1LC0wLjAzNjU4MiAwLjU2MDY4MiwtMC4wNTM3NjEgMC44NDE3OTcsLTAuMDUyNzM0IHpcIiAvPjwvc3ZnPmAsXG4gIHN0cmlrZXRocm91Z2g6IGA8c3ZnIHdpZHRoPVwiMThcIiBoZWlnaHQ9XCIxOFwiPjxwYXRoIGQ9XCJNMTAgMkM2IDIgNCA0IDQgNmMwIC4zMzguMDguNjcyLjE5MyAxaDIuMzRDNi4xMTMgNi42MjkgNiA2LjI5NSA2IDZjMC0uMzM0LjExNy0uNzI1LjY5MS0xLjE1NEM3LjI2NSA0LjQxNiA4LjMzMSA0IDEwIDRoM2ExIDEgMCAwMDAtMnptMS40NzcgOWMuNDEzLjM2OC41MjMuNzA2LjUyMyAxIDAgLjMzNC0uMTI3LjcxMi0uNzAxIDEuMTQzLS41NzUuNDMtMS42MzIuODUtMy4yOTkuODU3bC0xLjAwNi4wMDdWMTRINWExIDEgMCAwMDAgMmgzYzQgMCA2LTIgNi00IDAtLjMzOC0uMDgxLS42NzItLjE5NS0xelwiLz48cmVjdCByeT1cIjFcIiB5PVwiOFwiIHg9XCIxXCIgaGVpZ2h0PVwiMlwiIHdpZHRoPVwiMTZcIi8+PC9zdmc+YCxcbiAgdWw6IGA8c3ZnIGhlaWdodD1cIjE4XCIgd2lkdGg9XCIxOFwiPjxjaXJjbGUgY3g9XCIyXCIgY3k9XCI5XCIgcj1cIjJcIi8+PGNpcmNsZSBjeT1cIjRcIiBjeD1cIjJcIiByPVwiMlwiLz48cmVjdCB5PVwiM1wiIHg9XCI2XCIgaGVpZ2h0PVwiMlwiIHdpZHRoPVwiMTJcIiByeT1cIjFcIi8+PGNpcmNsZSBjeD1cIjJcIiBjeT1cIjE0XCIgcj1cIjJcIi8+PHJlY3Qgcnk9XCIxXCIgd2lkdGg9XCIxMlwiIGhlaWdodD1cIjJcIiB4PVwiNlwiIHk9XCI4XCIvPjxyZWN0IHk9XCIxM1wiIHg9XCI2XCIgaGVpZ2h0PVwiMlwiIHdpZHRoPVwiMTJcIiByeT1cIjFcIi8+PC9zdmc+YCxcbiAgdW5kbzogYDxzdmcgaGVpZ2h0PVwiMThcIiB3aWR0aD1cIjE4XCI+PHBhdGggZD1cIk0gMTAuNzMwNDY5IDIuNzA1MDc4MSBDIDkuODg3MTI0MyAyLjcwODE1OTQgOS4wNDcwMTAzIDIuODcxMjE1NiA4LjI2OTUzMTIgMy4xMzQ3NjU2IEMgNi41OTExMjU2IDMuNzAzNzEyMSA1LjA5ODU3OTcgNC42ODQ3MTA0IDQgNS42MzY3MTg4IEwgNCA0IEwgMiA0IEwgMiA5IEwgNyA5IEwgNyA3IEwgNS40OTAyMzQ0IDcgQyA2LjQwOTI0OTkgNi4yNDg1MTczIDcuNjU5NzkxNCA1LjQ1MzgwOCA4LjkxMjEwOTQgNS4wMjkyOTY5IEMgMTAuNTY5MDYgNC40Njc2MjMxIDEyLjA1NDY1NCA0LjQ2ODcxNyAxMy4yOTI5NjkgNS43MDcwMzEyIEMgMTQuNTE3OTgzIDYuOTMyMDQ1NCAxNC43MDI3MzggOC40Mjc3MjY1IDE0LjA3MjI2NiAxMC4wMDM5MDYgQyAxMy40NDE3OTQgMTEuNTgwMDg2IDExLjkwNDc5MSAxMy4xNjE5MTIgOS42Mjg5MDYyIDE0LjA3MjI2NiBMIDEwLjM3MTA5NCAxNS45Mjc3MzQgQyAxMy4wOTUyMDkgMTQuODM4MDg4IDE1LjA1ODIwNiAxMi45MTk5MTQgMTUuOTI3NzM0IDEwLjc0NjA5NCBDIDE2Ljc5NzI2MiA4LjU3MjI3MzQgMTYuNDgyMDE3IDYuMDY3OTU0NyAxNC43MDcwMzEgNC4yOTI5Njg4IEMgMTMuNzgzMTc0IDMuMzY5MTEyIDEyLjY5MTY0MyAyLjkwNDE0MDggMTEuNTcyMjY2IDIuNzU3ODEyNSBDIDExLjI5MjQyMSAyLjcyMTIzMDQgMTEuMDExNTg0IDIuNzA0MDUxIDEwLjczMDQ2OSAyLjcwNTA3ODEgeiBcIiAvPjwvc3ZnPlxuYFxufTtcblxuZXhwb3J0IGRlZmF1bHQgc3ZnOyIsImltcG9ydCBzdmcgZnJvbSBcIi4vc3ZnL3N2Z1wiO1xuaW1wb3J0IHsgRWRpdG9yLCBQb3NpdGlvbiwgU2VsZWN0aW9uRXZlbnQgfSBmcm9tIFwiLi9UaW55TURFXCI7XG5cbmNvbnN0IGlzTWFjTGlrZSA9IC8oTWFjfGlQaG9uZXxpUG9kfGlQYWQpL2kudGVzdChcbiAgdHlwZW9mIG5hdmlnYXRvciAhPT0gXCJ1bmRlZmluZWRcIiA/IG5hdmlnYXRvci5wbGF0Zm9ybSA6IFwiXCJcbik7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29tbWFuZEFjdGlvbiB7XG4gIChlZGl0b3I6IEVkaXRvcik6IHZvaWQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29tbWFuZEVuYWJsZWQge1xuICAoZWRpdG9yOiBFZGl0b3IsIGZvY3VzPzogUG9zaXRpb24sIGFuY2hvcj86IFBvc2l0aW9uKTogYm9vbGVhbiB8IG51bGw7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29tbWFuZERlZmluaXRpb24ge1xuICBuYW1lOiBzdHJpbmc7XG4gIGFjdGlvbjogc3RyaW5nIHwgQ29tbWFuZEFjdGlvbjtcbiAgaW5uZXJIVE1MOiBzdHJpbmc7XG4gIHRpdGxlOiBzdHJpbmc7XG4gIGhvdGtleT86IHN0cmluZztcbiAgZW5hYmxlZD86IENvbW1hbmRFbmFibGVkO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENvbW1hbmRCYXJQcm9wcyB7XG4gIGVsZW1lbnQ/OiBzdHJpbmcgfCBIVE1MRWxlbWVudDtcbiAgZWRpdG9yPzogRWRpdG9yO1xuICBjb21tYW5kcz86IChzdHJpbmcgfCBDb21tYW5kRGVmaW5pdGlvbilbXTtcbn1cblxuaW50ZXJmYWNlIEhvdGtleSB7XG4gIG1vZGlmaWVyczogc3RyaW5nW107XG4gIGNvbW1hbmQ6IHN0cmluZztcbiAga2V5Pzogc3RyaW5nO1xuICBjb2RlPzogc3RyaW5nO1xufVxuXG5jb25zdCBEZWZhdWx0Q29tbWFuZHM6IFJlY29yZDxzdHJpbmcsIENvbW1hbmREZWZpbml0aW9uPiA9IHtcbiAgYm9sZDoge1xuICAgIG5hbWU6IFwiYm9sZFwiLFxuICAgIGFjdGlvbjogXCJib2xkXCIsXG4gICAgaW5uZXJIVE1MOiBzdmcuYm9sZCxcbiAgICB0aXRsZTogXCJCb2xkXCIsXG4gICAgaG90a2V5OiBcIk1vZC1CXCIsXG4gIH0sXG4gIGl0YWxpYzoge1xuICAgIG5hbWU6IFwiaXRhbGljXCIsXG4gICAgYWN0aW9uOiBcIml0YWxpY1wiLFxuICAgIGlubmVySFRNTDogc3ZnLml0YWxpYyxcbiAgICB0aXRsZTogXCJJdGFsaWNcIixcbiAgICBob3RrZXk6IFwiTW9kLUlcIixcbiAgfSxcbiAgc3RyaWtldGhyb3VnaDoge1xuICAgIG5hbWU6IFwic3RyaWtldGhyb3VnaFwiLFxuICAgIGFjdGlvbjogXCJzdHJpa2V0aHJvdWdoXCIsXG4gICAgaW5uZXJIVE1MOiBzdmcuc3RyaWtldGhyb3VnaCxcbiAgICB0aXRsZTogXCJTdHJpa2V0aHJvdWdoXCIsXG4gICAgaG90a2V5OiBcIk1vZDItU2hpZnQtNVwiLFxuICB9LFxuICBjb2RlOiB7XG4gICAgbmFtZTogXCJjb2RlXCIsXG4gICAgYWN0aW9uOiBcImNvZGVcIixcbiAgICBpbm5lckhUTUw6IHN2Zy5jb2RlLFxuICAgIHRpdGxlOiBcIkZvcm1hdCBhcyBjb2RlXCIsXG4gIH0sXG4gIGgxOiB7XG4gICAgbmFtZTogXCJoMVwiLFxuICAgIGFjdGlvbjogXCJoMVwiLFxuICAgIGlubmVySFRNTDogc3ZnLmgxLFxuICAgIHRpdGxlOiBcIkxldmVsIDEgaGVhZGluZ1wiLFxuICAgIGhvdGtleTogXCJNb2QtU2hpZnQtMVwiLFxuICB9LFxuICBoMjoge1xuICAgIG5hbWU6IFwiaDJcIixcbiAgICBhY3Rpb246IFwiaDJcIixcbiAgICBpbm5lckhUTUw6IHN2Zy5oMixcbiAgICB0aXRsZTogXCJMZXZlbCAyIGhlYWRpbmdcIixcbiAgICBob3RrZXk6IFwiTW9kLVNoaWZ0LTJcIixcbiAgfSxcbiAgdWw6IHtcbiAgICBuYW1lOiBcInVsXCIsXG4gICAgYWN0aW9uOiBcInVsXCIsXG4gICAgaW5uZXJIVE1MOiBzdmcudWwsXG4gICAgdGl0bGU6IFwiQnVsbGV0ZWQgbGlzdFwiLFxuICB9LFxuICBvbDoge1xuICAgIG5hbWU6IFwib2xcIixcbiAgICBhY3Rpb246IFwib2xcIixcbiAgICBpbm5lckhUTUw6IHN2Zy5vbCxcbiAgICB0aXRsZTogXCJOdW1iZXJlZCBsaXN0XCIsXG4gIH0sXG4gIGJsb2NrcXVvdGU6IHtcbiAgICBuYW1lOiBcImJsb2NrcXVvdGVcIixcbiAgICBhY3Rpb246IFwiYmxvY2txdW90ZVwiLFxuICAgIGlubmVySFRNTDogc3ZnLmJsb2NrcXVvdGUsXG4gICAgdGl0bGU6IFwiUXVvdGVcIixcbiAgICBob3RrZXk6IFwiTW9kMi1TaGlmdC1RXCIsXG4gIH0sXG4gIGluc2VydExpbms6IHtcbiAgICBuYW1lOiBcImluc2VydExpbmtcIixcbiAgICBhY3Rpb246IChlZGl0b3I6IEVkaXRvcikgPT4ge1xuICAgICAgaWYgKChlZGl0b3IgYXMgYW55KS5pc0lubGluZUZvcm1hdHRpbmdBbGxvd2VkKCkpIGVkaXRvci53cmFwU2VsZWN0aW9uKFwiW1wiLCBcIl0oKVwiKTtcbiAgICB9LFxuICAgIGVuYWJsZWQ6IChlZGl0b3I6IEVkaXRvciwgZm9jdXM/OiBQb3NpdGlvbiwgYW5jaG9yPzogUG9zaXRpb24pID0+XG4gICAgICAoZWRpdG9yIGFzIGFueSkuaXNJbmxpbmVGb3JtYXR0aW5nQWxsb3dlZChmb2N1cywgYW5jaG9yKSA/IGZhbHNlIDogbnVsbCxcbiAgICBpbm5lckhUTUw6IHN2Zy5saW5rLFxuICAgIHRpdGxlOiBcIkluc2VydCBsaW5rXCIsXG4gICAgaG90a2V5OiBcIk1vZC1LXCIsXG4gIH0sXG4gIGluc2VydEltYWdlOiB7XG4gICAgbmFtZTogXCJpbnNlcnRJbWFnZVwiLFxuICAgIGFjdGlvbjogKGVkaXRvcjogRWRpdG9yKSA9PiB7XG4gICAgICBpZiAoKGVkaXRvciBhcyBhbnkpLmlzSW5saW5lRm9ybWF0dGluZ0FsbG93ZWQoKSkgZWRpdG9yLndyYXBTZWxlY3Rpb24oXCIhW1wiLCBcIl0oKVwiKTtcbiAgICB9LFxuICAgIGVuYWJsZWQ6IChlZGl0b3I6IEVkaXRvciwgZm9jdXM/OiBQb3NpdGlvbiwgYW5jaG9yPzogUG9zaXRpb24pID0+XG4gICAgICAoZWRpdG9yIGFzIGFueSkuaXNJbmxpbmVGb3JtYXR0aW5nQWxsb3dlZChmb2N1cywgYW5jaG9yKSA/IGZhbHNlIDogbnVsbCxcbiAgICBpbm5lckhUTUw6IHN2Zy5pbWFnZSxcbiAgICB0aXRsZTogXCJJbnNlcnQgaW1hZ2VcIixcbiAgICBob3RrZXk6IFwiTW9kMi1TaGlmdC1JXCIsXG4gIH0sXG4gIGhyOiB7XG4gICAgbmFtZTogXCJoclwiLFxuICAgIGFjdGlvbjogKGVkaXRvcjogRWRpdG9yKSA9PiBlZGl0b3IucGFzdGUoXCJcXG4qKipcXG5cIiksXG4gICAgZW5hYmxlZDogKCkgPT4gZmFsc2UsXG4gICAgaW5uZXJIVE1MOiBzdmcuaHIsXG4gICAgdGl0bGU6IFwiSW5zZXJ0IGhvcml6b250YWwgbGluZVwiLFxuICAgIGhvdGtleTogXCJNb2QyLVNoaWZ0LUxcIixcbiAgfSxcbiAgdW5kbzoge1xuICAgIG5hbWU6IFwidW5kb1wiLFxuICAgIGFjdGlvbjogKGVkaXRvcjogRWRpdG9yKSA9PiBlZGl0b3IudW5kbygpLFxuICAgIGVuYWJsZWQ6IChlZGl0b3I6IEVkaXRvcikgPT4gKGVkaXRvci5jYW5VbmRvID8gZmFsc2UgOiBudWxsKSxcbiAgICBpbm5lckhUTUw6IHN2Zy51bmRvLFxuICAgIHRpdGxlOiBcIlVuZG9cIixcbiAgfSxcbiAgcmVkbzoge1xuICAgIG5hbWU6IFwicmVkb1wiLFxuICAgIGFjdGlvbjogKGVkaXRvcjogRWRpdG9yKSA9PiBlZGl0b3IucmVkbygpLFxuICAgIGVuYWJsZWQ6IChlZGl0b3I6IEVkaXRvcikgPT4gKGVkaXRvci5jYW5SZWRvID8gZmFsc2UgOiBudWxsKSxcbiAgICBpbm5lckhUTUw6IHN2Zy5yZWRvLFxuICAgIHRpdGxlOiBcIlJlZG9cIixcbiAgfSxcbn07XG5cbmV4cG9ydCBjbGFzcyBDb21tYW5kQmFyIHtcbiAgcHVibGljIGU6IEhUTUxEaXZFbGVtZW50IHwgbnVsbCA9IG51bGw7XG4gIHB1YmxpYyBlZGl0b3I6IEVkaXRvciB8IG51bGwgPSBudWxsO1xuICBwdWJsaWMgY29tbWFuZHM6IFJlY29yZDxzdHJpbmcsIENvbW1hbmREZWZpbml0aW9uPiA9IHt9O1xuICBwdWJsaWMgYnV0dG9uczogUmVjb3JkPHN0cmluZywgSFRNTERpdkVsZW1lbnQ+ID0ge307XG4gIHB1YmxpYyBzdGF0ZTogUmVjb3JkPHN0cmluZywgYm9vbGVhbiB8IG51bGw+ID0ge307XG4gIHByaXZhdGUgaG90a2V5czogSG90a2V5W10gPSBbXTtcblxuICBjb25zdHJ1Y3Rvcihwcm9wczogQ29tbWFuZEJhclByb3BzKSB7XG4gICAgdGhpcy5lID0gbnVsbDtcbiAgICB0aGlzLmVkaXRvciA9IG51bGw7XG4gICAgdGhpcy5jb21tYW5kcyA9IHt9O1xuICAgIHRoaXMuYnV0dG9ucyA9IHt9O1xuICAgIHRoaXMuc3RhdGUgPSB7fTtcbiAgICB0aGlzLmhvdGtleXMgPSBbXTtcblxuICAgIGxldCBlbGVtZW50OiBIVE1MRWxlbWVudCB8IG51bGwgPSBudWxsO1xuICAgIGlmICh0eXBlb2YgcHJvcHMuZWxlbWVudCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChwcm9wcy5lbGVtZW50KTtcbiAgICB9IGVsc2UgaWYgKHByb3BzLmVsZW1lbnQpIHtcbiAgICAgIGVsZW1lbnQgPSBwcm9wcy5lbGVtZW50O1xuICAgIH1cbiAgICBcbiAgICBpZiAoIWVsZW1lbnQpIHtcbiAgICAgIGVsZW1lbnQgPSBkb2N1bWVudC5ib2R5O1xuICAgIH1cblxuICAgIHRoaXMuY3JlYXRlQ29tbWFuZEJhckVsZW1lbnQoXG4gICAgICBlbGVtZW50LFxuICAgICAgcHJvcHMuY29tbWFuZHMgfHwgW1xuICAgICAgICBcImJvbGRcIixcbiAgICAgICAgXCJpdGFsaWNcIixcbiAgICAgICAgXCJzdHJpa2V0aHJvdWdoXCIsXG4gICAgICAgIFwifFwiLFxuICAgICAgICBcImNvZGVcIixcbiAgICAgICAgXCJ8XCIsXG4gICAgICAgIFwiaDFcIixcbiAgICAgICAgXCJoMlwiLFxuICAgICAgICBcInxcIixcbiAgICAgICAgXCJ1bFwiLFxuICAgICAgICBcIm9sXCIsXG4gICAgICAgIFwifFwiLFxuICAgICAgICBcImJsb2NrcXVvdGVcIixcbiAgICAgICAgXCJoclwiLFxuICAgICAgICBcInxcIixcbiAgICAgICAgXCJ1bmRvXCIsXG4gICAgICAgIFwicmVkb1wiLFxuICAgICAgICBcInxcIixcbiAgICAgICAgXCJpbnNlcnRMaW5rXCIsXG4gICAgICAgIFwiaW5zZXJ0SW1hZ2VcIixcbiAgICAgIF1cbiAgICApO1xuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJrZXlkb3duXCIsIChlKSA9PiB0aGlzLmhhbmRsZUtleWRvd24oZSkpO1xuICAgIGlmIChwcm9wcy5lZGl0b3IpIHRoaXMuc2V0RWRpdG9yKHByb3BzLmVkaXRvcik7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZUNvbW1hbmRCYXJFbGVtZW50KHBhcmVudEVsZW1lbnQ6IEhUTUxFbGVtZW50LCBjb21tYW5kczogKHN0cmluZyB8IENvbW1hbmREZWZpbml0aW9uKVtdKTogdm9pZCB7XG4gICAgdGhpcy5lID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICB0aGlzLmUuY2xhc3NOYW1lID0gXCJUTUNvbW1hbmRCYXJcIjtcblxuICAgIGZvciAobGV0IGNvbW1hbmQgb2YgY29tbWFuZHMpIHtcbiAgICAgIGlmIChjb21tYW5kID09PSBcInxcIikge1xuICAgICAgICBsZXQgZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgICAgICBlbC5jbGFzc05hbWUgPSBcIlRNQ29tbWFuZERpdmlkZXJcIjtcbiAgICAgICAgdGhpcy5lLmFwcGVuZENoaWxkKGVsKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxldCBjb21tYW5kTmFtZTogc3RyaW5nO1xuICAgICAgICBpZiAodHlwZW9mIGNvbW1hbmQgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICBpZiAoRGVmYXVsdENvbW1hbmRzW2NvbW1hbmRdKSB7XG4gICAgICAgICAgICBjb21tYW5kTmFtZSA9IGNvbW1hbmQ7XG4gICAgICAgICAgICB0aGlzLmNvbW1hbmRzW2NvbW1hbmROYW1lXSA9IERlZmF1bHRDb21tYW5kc1tjb21tYW5kTmFtZV07XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgY29tbWFuZCA9PT0gXCJvYmplY3RcIiAmJiBjb21tYW5kLm5hbWUpIHtcbiAgICAgICAgICBjb21tYW5kTmFtZSA9IGNvbW1hbmQubmFtZTtcbiAgICAgICAgICB0aGlzLmNvbW1hbmRzW2NvbW1hbmROYW1lXSA9IHt9IGFzIENvbW1hbmREZWZpbml0aW9uO1xuICAgICAgICAgIGlmIChEZWZhdWx0Q29tbWFuZHNbY29tbWFuZE5hbWVdKSB7XG4gICAgICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMuY29tbWFuZHNbY29tbWFuZE5hbWVdLCBEZWZhdWx0Q29tbWFuZHNbY29tbWFuZE5hbWVdKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLmNvbW1hbmRzW2NvbW1hbmROYW1lXSwgY29tbWFuZCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgdGl0bGUgPSB0aGlzLmNvbW1hbmRzW2NvbW1hbmROYW1lXS50aXRsZSB8fCBjb21tYW5kTmFtZTtcblxuICAgICAgICBpZiAodGhpcy5jb21tYW5kc1tjb21tYW5kTmFtZV0uaG90a2V5KSB7XG4gICAgICAgICAgY29uc3Qga2V5cyA9IHRoaXMuY29tbWFuZHNbY29tbWFuZE5hbWVdLmhvdGtleSEuc3BsaXQoXCItXCIpO1xuICAgICAgICAgIGxldCBtb2RpZmllcnM6IHN0cmluZ1tdID0gW107XG4gICAgICAgICAgbGV0IG1vZGlmaWVyZXhwbGFuYXRpb246IHN0cmluZ1tdID0gW107XG4gICAgICAgICAgXG4gICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aCAtIDE7IGkrKykge1xuICAgICAgICAgICAgc3dpdGNoIChrZXlzW2ldKSB7XG4gICAgICAgICAgICAgIGNhc2UgXCJDdHJsXCI6XG4gICAgICAgICAgICAgICAgbW9kaWZpZXJzLnB1c2goXCJjdHJsS2V5XCIpO1xuICAgICAgICAgICAgICAgIG1vZGlmaWVyZXhwbGFuYXRpb24ucHVzaChcIkN0cmxcIik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGNhc2UgXCJDbWRcIjpcbiAgICAgICAgICAgICAgICBtb2RpZmllcnMucHVzaChcIm1ldGFLZXlcIik7XG4gICAgICAgICAgICAgICAgbW9kaWZpZXJleHBsYW5hdGlvbi5wdXNoKFwi4oyYXCIpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlIFwiQWx0XCI6XG4gICAgICAgICAgICAgICAgbW9kaWZpZXJzLnB1c2goXCJhbHRLZXlcIik7XG4gICAgICAgICAgICAgICAgbW9kaWZpZXJleHBsYW5hdGlvbi5wdXNoKFwiQWx0XCIpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlIFwiT3B0aW9uXCI6XG4gICAgICAgICAgICAgICAgbW9kaWZpZXJzLnB1c2goXCJhbHRLZXlcIik7XG4gICAgICAgICAgICAgICAgbW9kaWZpZXJleHBsYW5hdGlvbi5wdXNoKFwi4oylXCIpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlIFwiV2luXCI6XG4gICAgICAgICAgICAgICAgbW9kaWZpZXJzLnB1c2goXCJtZXRhS2V5XCIpO1xuICAgICAgICAgICAgICAgIG1vZGlmaWVyZXhwbGFuYXRpb24ucHVzaChcIuKKniBXaW5cIik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGNhc2UgXCJTaGlmdFwiOlxuICAgICAgICAgICAgICAgIG1vZGlmaWVycy5wdXNoKFwic2hpZnRLZXlcIik7XG4gICAgICAgICAgICAgICAgbW9kaWZpZXJleHBsYW5hdGlvbi5wdXNoKFwi4oenXCIpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlIFwiTW9kXCI6XG4gICAgICAgICAgICAgICAgaWYgKGlzTWFjTGlrZSkge1xuICAgICAgICAgICAgICAgICAgbW9kaWZpZXJzLnB1c2goXCJtZXRhS2V5XCIpO1xuICAgICAgICAgICAgICAgICAgbW9kaWZpZXJleHBsYW5hdGlvbi5wdXNoKFwi4oyYXCIpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICBtb2RpZmllcnMucHVzaChcImN0cmxLZXlcIik7XG4gICAgICAgICAgICAgICAgICBtb2RpZmllcmV4cGxhbmF0aW9uLnB1c2goXCJDdHJsXCIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgY2FzZSBcIk1vZDJcIjpcbiAgICAgICAgICAgICAgICBtb2RpZmllcnMucHVzaChcImFsdEtleVwiKTtcbiAgICAgICAgICAgICAgICBpZiAoaXNNYWNMaWtlKSBtb2RpZmllcmV4cGxhbmF0aW9uLnB1c2goXCLijKVcIik7XG4gICAgICAgICAgICAgICAgZWxzZSBtb2RpZmllcmV4cGxhbmF0aW9uLnB1c2goXCJBbHRcIik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIFxuICAgICAgICAgIG1vZGlmaWVyZXhwbGFuYXRpb24ucHVzaChrZXlzW2tleXMubGVuZ3RoIC0gMV0pO1xuICAgICAgICAgIGxldCBob3RrZXk6IEhvdGtleSA9IHtcbiAgICAgICAgICAgIG1vZGlmaWVyczogbW9kaWZpZXJzLFxuICAgICAgICAgICAgY29tbWFuZDogY29tbWFuZE5hbWUsXG4gICAgICAgICAgfTtcbiAgICAgICAgICBcbiAgICAgICAgICBpZiAoa2V5c1trZXlzLmxlbmd0aCAtIDFdLm1hdGNoKC9eWzAtOV0kLykpIHtcbiAgICAgICAgICAgIGhvdGtleS5jb2RlID0gYERpZ2l0JHtrZXlzW2tleXMubGVuZ3RoIC0gMV19YDtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaG90a2V5LmtleSA9IGtleXNba2V5cy5sZW5ndGggLSAxXS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLmhvdGtleXMucHVzaChob3RrZXkpO1xuICAgICAgICAgIHRpdGxlID0gdGl0bGUuY29uY2F0KGAgKCR7bW9kaWZpZXJleHBsYW5hdGlvbi5qb2luKFwiK1wiKX0pYCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmJ1dHRvbnNbY29tbWFuZE5hbWVdID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICAgICAgdGhpcy5idXR0b25zW2NvbW1hbmROYW1lXS5jbGFzc05hbWUgPSBcIlRNQ29tbWFuZEJ1dHRvbiBUTUNvbW1hbmRCdXR0b25fRGlzYWJsZWRcIjtcbiAgICAgICAgdGhpcy5idXR0b25zW2NvbW1hbmROYW1lXS50aXRsZSA9IHRpdGxlO1xuICAgICAgICB0aGlzLmJ1dHRvbnNbY29tbWFuZE5hbWVdLmlubmVySFRNTCA9IHRoaXMuY29tbWFuZHNbY29tbWFuZE5hbWVdLmlubmVySFRNTDtcblxuICAgICAgICB0aGlzLmJ1dHRvbnNbY29tbWFuZE5hbWVdLmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZWRvd25cIiwgKGUpID0+XG4gICAgICAgICAgdGhpcy5oYW5kbGVDbGljayhjb21tYW5kTmFtZSwgZSlcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5lLmFwcGVuZENoaWxkKHRoaXMuYnV0dG9uc1tjb21tYW5kTmFtZV0pO1xuICAgICAgfVxuICAgIH1cbiAgICBwYXJlbnRFbGVtZW50LmFwcGVuZENoaWxkKHRoaXMuZSk7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZUNsaWNrKGNvbW1hbmROYW1lOiBzdHJpbmcsIGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5lZGl0b3IpIHJldHVybjtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGlmICh0eXBlb2YgdGhpcy5jb21tYW5kc1tjb21tYW5kTmFtZV0uYWN0aW9uID09PSBcInN0cmluZ1wiKSB7XG4gICAgICBpZiAodGhpcy5zdGF0ZVtjb21tYW5kTmFtZV0gPT09IGZhbHNlKVxuICAgICAgICAodGhpcy5lZGl0b3IgYXMgYW55KS5zZXRDb21tYW5kU3RhdGUoY29tbWFuZE5hbWUsIHRydWUpO1xuICAgICAgZWxzZSAodGhpcy5lZGl0b3IgYXMgYW55KS5zZXRDb21tYW5kU3RhdGUoY29tbWFuZE5hbWUsIGZhbHNlKTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiB0aGlzLmNvbW1hbmRzW2NvbW1hbmROYW1lXS5hY3Rpb24gPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgKHRoaXMuY29tbWFuZHNbY29tbWFuZE5hbWVdLmFjdGlvbiBhcyBDb21tYW5kQWN0aW9uKSh0aGlzLmVkaXRvcik7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHNldEVkaXRvcihlZGl0b3I6IEVkaXRvcik6IHZvaWQge1xuICAgIHRoaXMuZWRpdG9yID0gZWRpdG9yO1xuICAgIGVkaXRvci5hZGRFdmVudExpc3RlbmVyKFwic2VsZWN0aW9uXCIsIChlKSA9PiB0aGlzLmhhbmRsZVNlbGVjdGlvbihlKSk7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZVNlbGVjdGlvbihldmVudDogU2VsZWN0aW9uRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAoZXZlbnQuY29tbWFuZFN0YXRlKSB7XG4gICAgICBmb3IgKGxldCBjb21tYW5kIGluIHRoaXMuY29tbWFuZHMpIHtcbiAgICAgICAgaWYgKGV2ZW50LmNvbW1hbmRTdGF0ZVtjb21tYW5kXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgaWYgKHRoaXMuY29tbWFuZHNbY29tbWFuZF0uZW5hYmxlZCkge1xuICAgICAgICAgICAgdGhpcy5zdGF0ZVtjb21tYW5kXSA9IHRoaXMuY29tbWFuZHNbY29tbWFuZF0uZW5hYmxlZCEoXG4gICAgICAgICAgICAgIHRoaXMuZWRpdG9yISxcbiAgICAgICAgICAgICAgZXZlbnQuZm9jdXMsXG4gICAgICAgICAgICAgIGV2ZW50LmFuY2hvclxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zdGF0ZVtjb21tYW5kXSA9IGV2ZW50LmZvY3VzID8gZmFsc2UgOiBudWxsO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnN0YXRlW2NvbW1hbmRdID0gZXZlbnQuY29tbWFuZFN0YXRlW2NvbW1hbmRdO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuc3RhdGVbY29tbWFuZF0gPT09IHRydWUpIHtcbiAgICAgICAgICB0aGlzLmJ1dHRvbnNbY29tbWFuZF0uY2xhc3NOYW1lID0gXCJUTUNvbW1hbmRCdXR0b24gVE1Db21tYW5kQnV0dG9uX0FjdGl2ZVwiO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuc3RhdGVbY29tbWFuZF0gPT09IGZhbHNlKSB7XG4gICAgICAgICAgdGhpcy5idXR0b25zW2NvbW1hbmRdLmNsYXNzTmFtZSA9IFwiVE1Db21tYW5kQnV0dG9uIFRNQ29tbWFuZEJ1dHRvbl9JbmFjdGl2ZVwiO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuYnV0dG9uc1tjb21tYW5kXS5jbGFzc05hbWUgPSBcIlRNQ29tbWFuZEJ1dHRvbiBUTUNvbW1hbmRCdXR0b25fRGlzYWJsZWRcIjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlS2V5ZG93bihldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgIG91dGVyOiBmb3IgKGxldCBob3RrZXkgb2YgdGhpcy5ob3RrZXlzKSB7XG4gICAgICBpZiAoXG4gICAgICAgIChob3RrZXkua2V5ICYmIGV2ZW50LmtleS50b0xvd2VyQ2FzZSgpID09PSBob3RrZXkua2V5KSB8fFxuICAgICAgICAoaG90a2V5LmNvZGUgJiYgZXZlbnQuY29kZSA9PT0gaG90a2V5LmNvZGUpXG4gICAgICApIHtcbiAgICAgICAgZm9yIChsZXQgbW9kaWZpZXIgb2YgaG90a2V5Lm1vZGlmaWVycykge1xuICAgICAgICAgIGlmICghKGV2ZW50IGFzIGFueSlbbW9kaWZpZXJdKSBjb250aW51ZSBvdXRlcjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmhhbmRsZUNsaWNrKGhvdGtleS5jb21tYW5kLCBldmVudCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgQ29tbWFuZEJhcjsiLCIndXNlIHN0cmljdCc7XG52YXIgY2hlY2sgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGl0ICYmIGl0Lk1hdGggPT09IE1hdGggJiYgaXQ7XG59O1xuXG4vLyBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvODYjaXNzdWVjb21tZW50LTExNTc1OTAyOFxubW9kdWxlLmV4cG9ydHMgPVxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tZ2xvYmFsLXRoaXMgLS0gc2FmZVxuICBjaGVjayh0eXBlb2YgZ2xvYmFsVGhpcyA9PSAnb2JqZWN0JyAmJiBnbG9iYWxUaGlzKSB8fFxuICBjaGVjayh0eXBlb2Ygd2luZG93ID09ICdvYmplY3QnICYmIHdpbmRvdykgfHxcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXJlc3RyaWN0ZWQtZ2xvYmFscyAtLSBzYWZlXG4gIGNoZWNrKHR5cGVvZiBzZWxmID09ICdvYmplY3QnICYmIHNlbGYpIHx8XG4gIGNoZWNrKHR5cGVvZiBnbG9iYWwgPT0gJ29iamVjdCcgJiYgZ2xvYmFsKSB8fFxuICBjaGVjayh0eXBlb2YgdGhpcyA9PSAnb2JqZWN0JyAmJiB0aGlzKSB8fFxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbmV3LWZ1bmMgLS0gZmFsbGJhY2tcbiAgKGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0pKCkgfHwgRnVuY3Rpb24oJ3JldHVybiB0aGlzJykoKTtcbiIsIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGV4ZWMpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gISFleGVjKCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcblxuLy8gRGV0ZWN0IElFOCdzIGluY29tcGxldGUgZGVmaW5lUHJvcGVydHkgaW1wbGVtZW50YXRpb25cbm1vZHVsZS5leHBvcnRzID0gIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xuICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHt9LCAxLCB7IGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gNzsgfSB9KVsxXSAhPT0gNztcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLWZ1bmN0aW9uLXByb3RvdHlwZS1iaW5kIC0tIHNhZmVcbiAgdmFyIHRlc3QgPSAoZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9KS5iaW5kKCk7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wcm90b3R5cGUtYnVpbHRpbnMgLS0gc2FmZVxuICByZXR1cm4gdHlwZW9mIHRlc3QgIT0gJ2Z1bmN0aW9uJyB8fCB0ZXN0Lmhhc093blByb3BlcnR5KCdwcm90b3R5cGUnKTtcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIE5BVElWRV9CSU5EID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtbmF0aXZlJyk7XG5cbnZhciBGdW5jdGlvblByb3RvdHlwZSA9IEZ1bmN0aW9uLnByb3RvdHlwZTtcbnZhciBjYWxsID0gRnVuY3Rpb25Qcm90b3R5cGUuY2FsbDtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1mdW5jdGlvbi1wcm90b3R5cGUtYmluZCAtLSBzYWZlXG52YXIgdW5jdXJyeVRoaXNXaXRoQmluZCA9IE5BVElWRV9CSU5EICYmIEZ1bmN0aW9uUHJvdG90eXBlLmJpbmQuYmluZChjYWxsLCBjYWxsKTtcblxubW9kdWxlLmV4cG9ydHMgPSBOQVRJVkVfQklORCA/IHVuY3VycnlUaGlzV2l0aEJpbmQgOiBmdW5jdGlvbiAoZm4pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gY2FsbC5hcHBseShmbiwgYXJndW1lbnRzKTtcbiAgfTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLUlzSFRNTEREQS1pbnRlcm5hbC1zbG90XG52YXIgZG9jdW1lbnRBbGwgPSB0eXBlb2YgZG9jdW1lbnQgPT0gJ29iamVjdCcgJiYgZG9jdW1lbnQuYWxsO1xuXG4vLyBgSXNDYWxsYWJsZWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWlzY2FsbGFibGVcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSB1bmljb3JuL25vLXR5cGVvZi11bmRlZmluZWQgLS0gcmVxdWlyZWQgZm9yIHRlc3Rpbmdcbm1vZHVsZS5leHBvcnRzID0gdHlwZW9mIGRvY3VtZW50QWxsID09ICd1bmRlZmluZWQnICYmIGRvY3VtZW50QWxsICE9PSB1bmRlZmluZWQgPyBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgcmV0dXJuIHR5cGVvZiBhcmd1bWVudCA9PSAnZnVuY3Rpb24nIHx8IGFyZ3VtZW50ID09PSBkb2N1bWVudEFsbDtcbn0gOiBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgcmV0dXJuIHR5cGVvZiBhcmd1bWVudCA9PSAnZnVuY3Rpb24nO1xufTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIHdlIGNhbid0IHVzZSBqdXN0IGBpdCA9PSBudWxsYCBzaW5jZSBvZiBgZG9jdW1lbnQuYWxsYCBzcGVjaWFsIGNhc2Vcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtSXNIVE1MRERBLWludGVybmFsLXNsb3QtYWVjXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaXQgPT09IG51bGwgfHwgaXQgPT09IHVuZGVmaW5lZDtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgaXNOdWxsT3JVbmRlZmluZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtbnVsbC1vci11bmRlZmluZWQnKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbi8vIGBSZXF1aXJlT2JqZWN0Q29lcmNpYmxlYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtcmVxdWlyZW9iamVjdGNvZXJjaWJsZVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKGlzTnVsbE9yVW5kZWZpbmVkKGl0KSkgdGhyb3cgbmV3ICRUeXBlRXJyb3IoXCJDYW4ndCBjYWxsIG1ldGhvZCBvbiBcIiArIGl0KTtcbiAgcmV0dXJuIGl0O1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciByZXF1aXJlT2JqZWN0Q29lcmNpYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlcXVpcmUtb2JqZWN0LWNvZXJjaWJsZScpO1xuXG52YXIgJE9iamVjdCA9IE9iamVjdDtcblxuLy8gYFRvT2JqZWN0YCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtdG9vYmplY3Rcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHJldHVybiAkT2JqZWN0KHJlcXVpcmVPYmplY3RDb2VyY2libGUoYXJndW1lbnQpKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tb2JqZWN0Jyk7XG5cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IHVuY3VycnlUaGlzKHt9Lmhhc093blByb3BlcnR5KTtcblxuLy8gYEhhc093blByb3BlcnR5YCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtaGFzb3ducHJvcGVydHlcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtaGFzb3duIC0tIHNhZmVcbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0Lmhhc093biB8fCBmdW5jdGlvbiBoYXNPd24oaXQsIGtleSkge1xuICByZXR1cm4gaGFzT3duUHJvcGVydHkodG9PYmplY3QoaXQpLCBrZXkpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG5cbnZhciBGdW5jdGlvblByb3RvdHlwZSA9IEZ1bmN0aW9uLnByb3RvdHlwZTtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yIC0tIHNhZmVcbnZhciBnZXREZXNjcmlwdG9yID0gREVTQ1JJUFRPUlMgJiYgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcblxudmFyIEVYSVNUUyA9IGhhc093bihGdW5jdGlvblByb3RvdHlwZSwgJ25hbWUnKTtcbi8vIGFkZGl0aW9uYWwgcHJvdGVjdGlvbiBmcm9tIG1pbmlmaWVkIC8gbWFuZ2xlZCAvIGRyb3BwZWQgZnVuY3Rpb24gbmFtZXNcbnZhciBQUk9QRVIgPSBFWElTVFMgJiYgKGZ1bmN0aW9uIHNvbWV0aGluZygpIHsgLyogZW1wdHkgKi8gfSkubmFtZSA9PT0gJ3NvbWV0aGluZyc7XG52YXIgQ09ORklHVVJBQkxFID0gRVhJU1RTICYmICghREVTQ1JJUFRPUlMgfHwgKERFU0NSSVBUT1JTICYmIGdldERlc2NyaXB0b3IoRnVuY3Rpb25Qcm90b3R5cGUsICduYW1lJykuY29uZmlndXJhYmxlKSk7XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBFWElTVFM6IEVYSVNUUyxcbiAgUFJPUEVSOiBQUk9QRVIsXG4gIENPTkZJR1VSQUJMRTogQ09ORklHVVJBQkxFXG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSBmYWxzZTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gc2FmZVxudmFyIGRlZmluZVByb3BlcnR5ID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG4gIHRyeSB7XG4gICAgZGVmaW5lUHJvcGVydHkoZ2xvYmFsVGhpcywga2V5LCB7IHZhbHVlOiB2YWx1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBnbG9iYWxUaGlzW2tleV0gPSB2YWx1ZTtcbiAgfSByZXR1cm4gdmFsdWU7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIElTX1BVUkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtcHVyZScpO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcbnZhciBkZWZpbmVHbG9iYWxQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtZ2xvYmFsLXByb3BlcnR5Jyk7XG5cbnZhciBTSEFSRUQgPSAnX19jb3JlLWpzX3NoYXJlZF9fJztcbnZhciBzdG9yZSA9IG1vZHVsZS5leHBvcnRzID0gZ2xvYmFsVGhpc1tTSEFSRURdIHx8IGRlZmluZUdsb2JhbFByb3BlcnR5KFNIQVJFRCwge30pO1xuXG4oc3RvcmUudmVyc2lvbnMgfHwgKHN0b3JlLnZlcnNpb25zID0gW10pKS5wdXNoKHtcbiAgdmVyc2lvbjogJzMuNDIuMCcsXG4gIG1vZGU6IElTX1BVUkUgPyAncHVyZScgOiAnZ2xvYmFsJyxcbiAgY29weXJpZ2h0OiAnwqkgMjAxNC0yMDI1IERlbmlzIFB1c2hrYXJldiAoemxvaXJvY2sucnUpJyxcbiAgbGljZW5zZTogJ2h0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2Jsb2IvdjMuNDIuMC9MSUNFTlNFJyxcbiAgc291cmNlOiAnaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMnXG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgc3RvcmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkLXN0b3JlJyk7XG5cbnZhciBmdW5jdGlvblRvU3RyaW5nID0gdW5jdXJyeVRoaXMoRnVuY3Rpb24udG9TdHJpbmcpO1xuXG4vLyB0aGlzIGhlbHBlciBicm9rZW4gaW4gYGNvcmUtanNAMy40LjEtMy40LjRgLCBzbyB3ZSBjYW4ndCB1c2UgYHNoYXJlZGAgaGVscGVyXG5pZiAoIWlzQ2FsbGFibGUoc3RvcmUuaW5zcGVjdFNvdXJjZSkpIHtcbiAgc3RvcmUuaW5zcGVjdFNvdXJjZSA9IGZ1bmN0aW9uIChpdCkge1xuICAgIHJldHVybiBmdW5jdGlvblRvU3RyaW5nKGl0KTtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzdG9yZS5pbnNwZWN0U291cmNlO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG5cbnZhciBXZWFrTWFwID0gZ2xvYmFsVGhpcy5XZWFrTWFwO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGlzQ2FsbGFibGUoV2Vha01hcCkgJiYgL25hdGl2ZSBjb2RlLy50ZXN0KFN0cmluZyhXZWFrTWFwKSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gdHlwZW9mIGl0ID09ICdvYmplY3QnID8gaXQgIT09IG51bGwgOiBpc0NhbGxhYmxlKGl0KTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xuXG52YXIgZG9jdW1lbnQgPSBnbG9iYWxUaGlzLmRvY3VtZW50O1xuLy8gdHlwZW9mIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQgaXMgJ29iamVjdCcgaW4gb2xkIElFXG52YXIgRVhJU1RTID0gaXNPYmplY3QoZG9jdW1lbnQpICYmIGlzT2JqZWN0KGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gRVhJU1RTID8gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChpdCkgOiB7fTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGNyZWF0ZUVsZW1lbnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZG9jdW1lbnQtY3JlYXRlLWVsZW1lbnQnKTtcblxuLy8gVGhhbmtzIHRvIElFOCBmb3IgaXRzIGZ1bm55IGRlZmluZVByb3BlcnR5XG5tb2R1bGUuZXhwb3J0cyA9ICFERVNDUklQVE9SUyAmJiAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnR5IC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG4gIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoY3JlYXRlRWxlbWVudCgnZGl2JyksICdhJywge1xuICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gNzsgfVxuICB9KS5hICE9PSA3O1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xuXG4vLyBWOCB+IENocm9tZSAzNi1cbi8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTMzMzRcbm1vZHVsZS5leHBvcnRzID0gREVTQ1JJUFRPUlMgJiYgZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnR5IC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG4gIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9LCAncHJvdG90eXBlJywge1xuICAgIHZhbHVlOiA0MixcbiAgICB3cml0YWJsZTogZmFsc2VcbiAgfSkucHJvdG90eXBlICE9PSA0Mjtcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xuXG52YXIgJFN0cmluZyA9IFN0cmluZztcbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG4vLyBgQXNzZXJ0OiBUeXBlKGFyZ3VtZW50KSBpcyBPYmplY3RgXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICBpZiAoaXNPYmplY3QoYXJndW1lbnQpKSByZXR1cm4gYXJndW1lbnQ7XG4gIHRocm93IG5ldyAkVHlwZUVycm9yKCRTdHJpbmcoYXJndW1lbnQpICsgJyBpcyBub3QgYW4gb2JqZWN0Jyk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIE5BVElWRV9CSU5EID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtbmF0aXZlJyk7XG5cbnZhciBjYWxsID0gRnVuY3Rpb24ucHJvdG90eXBlLmNhbGw7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tZnVuY3Rpb24tcHJvdG90eXBlLWJpbmQgLS0gc2FmZVxubW9kdWxlLmV4cG9ydHMgPSBOQVRJVkVfQklORCA/IGNhbGwuYmluZChjYWxsKSA6IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIGNhbGwuYXBwbHkoY2FsbCwgYXJndW1lbnRzKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcblxudmFyIGFGdW5jdGlvbiA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICByZXR1cm4gaXNDYWxsYWJsZShhcmd1bWVudCkgPyBhcmd1bWVudCA6IHVuZGVmaW5lZDtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG5hbWVzcGFjZSwgbWV0aG9kKSB7XG4gIHJldHVybiBhcmd1bWVudHMubGVuZ3RoIDwgMiA/IGFGdW5jdGlvbihnbG9iYWxUaGlzW25hbWVzcGFjZV0pIDogZ2xvYmFsVGhpc1tuYW1lc3BhY2VdICYmIGdsb2JhbFRoaXNbbmFtZXNwYWNlXVttZXRob2RdO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSB1bmN1cnJ5VGhpcyh7fS5pc1Byb3RvdHlwZU9mKTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG5cbnZhciBuYXZpZ2F0b3IgPSBnbG9iYWxUaGlzLm5hdmlnYXRvcjtcbnZhciB1c2VyQWdlbnQgPSBuYXZpZ2F0b3IgJiYgbmF2aWdhdG9yLnVzZXJBZ2VudDtcblxubW9kdWxlLmV4cG9ydHMgPSB1c2VyQWdlbnQgPyBTdHJpbmcodXNlckFnZW50KSA6ICcnO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcbnZhciB1c2VyQWdlbnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW52aXJvbm1lbnQtdXNlci1hZ2VudCcpO1xuXG52YXIgcHJvY2VzcyA9IGdsb2JhbFRoaXMucHJvY2VzcztcbnZhciBEZW5vID0gZ2xvYmFsVGhpcy5EZW5vO1xudmFyIHZlcnNpb25zID0gcHJvY2VzcyAmJiBwcm9jZXNzLnZlcnNpb25zIHx8IERlbm8gJiYgRGVuby52ZXJzaW9uO1xudmFyIHY4ID0gdmVyc2lvbnMgJiYgdmVyc2lvbnMudjg7XG52YXIgbWF0Y2gsIHZlcnNpb247XG5cbmlmICh2OCkge1xuICBtYXRjaCA9IHY4LnNwbGl0KCcuJyk7XG4gIC8vIGluIG9sZCBDaHJvbWUsIHZlcnNpb25zIG9mIFY4IGlzbid0IFY4ID0gQ2hyb21lIC8gMTBcbiAgLy8gYnV0IHRoZWlyIGNvcnJlY3QgdmVyc2lvbnMgYXJlIG5vdCBpbnRlcmVzdGluZyBmb3IgdXNcbiAgdmVyc2lvbiA9IG1hdGNoWzBdID4gMCAmJiBtYXRjaFswXSA8IDQgPyAxIDogKyhtYXRjaFswXSArIG1hdGNoWzFdKTtcbn1cblxuLy8gQnJvd3NlckZTIE5vZGVKUyBgcHJvY2Vzc2AgcG9seWZpbGwgaW5jb3JyZWN0bHkgc2V0IGAudjhgIHRvIGAwLjBgXG4vLyBzbyBjaGVjayBgdXNlckFnZW50YCBldmVuIGlmIGAudjhgIGV4aXN0cywgYnV0IDBcbmlmICghdmVyc2lvbiAmJiB1c2VyQWdlbnQpIHtcbiAgbWF0Y2ggPSB1c2VyQWdlbnQubWF0Y2goL0VkZ2VcXC8oXFxkKykvKTtcbiAgaWYgKCFtYXRjaCB8fCBtYXRjaFsxXSA+PSA3NCkge1xuICAgIG1hdGNoID0gdXNlckFnZW50Lm1hdGNoKC9DaHJvbWVcXC8oXFxkKykvKTtcbiAgICBpZiAobWF0Y2gpIHZlcnNpb24gPSArbWF0Y2hbMV07XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSB2ZXJzaW9uO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLyogZXNsaW50LWRpc2FibGUgZXMvbm8tc3ltYm9sIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nICovXG52YXIgVjhfVkVSU0lPTiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbnZpcm9ubWVudC12OC12ZXJzaW9uJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG5cbnZhciAkU3RyaW5nID0gZ2xvYmFsVGhpcy5TdHJpbmc7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHlzeW1ib2xzIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG5tb2R1bGUuZXhwb3J0cyA9ICEhT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyAmJiAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICB2YXIgc3ltYm9sID0gU3ltYm9sKCdzeW1ib2wgZGV0ZWN0aW9uJyk7XG4gIC8vIENocm9tZSAzOCBTeW1ib2wgaGFzIGluY29ycmVjdCB0b1N0cmluZyBjb252ZXJzaW9uXG4gIC8vIGBnZXQtb3duLXByb3BlcnR5LXN5bWJvbHNgIHBvbHlmaWxsIHN5bWJvbHMgY29udmVydGVkIHRvIG9iamVjdCBhcmUgbm90IFN5bWJvbCBpbnN0YW5jZXNcbiAgLy8gbmI6IERvIG5vdCBjYWxsIGBTdHJpbmdgIGRpcmVjdGx5IHRvIGF2b2lkIHRoaXMgYmVpbmcgb3B0aW1pemVkIG91dCB0byBgc3ltYm9sKycnYCB3aGljaCB3aWxsLFxuICAvLyBvZiBjb3Vyc2UsIGZhaWwuXG4gIHJldHVybiAhJFN0cmluZyhzeW1ib2wpIHx8ICEoT2JqZWN0KHN5bWJvbCkgaW5zdGFuY2VvZiBTeW1ib2wpIHx8XG4gICAgLy8gQ2hyb21lIDM4LTQwIHN5bWJvbHMgYXJlIG5vdCBpbmhlcml0ZWQgZnJvbSBET00gY29sbGVjdGlvbnMgcHJvdG90eXBlcyB0byBpbnN0YW5jZXNcbiAgICAhU3ltYm9sLnNoYW0gJiYgVjhfVkVSU0lPTiAmJiBWOF9WRVJTSU9OIDwgNDE7XG59KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8qIGVzbGludC1kaXNhYmxlIGVzL25vLXN5bWJvbCAtLSByZXF1aXJlZCBmb3IgdGVzdGluZyAqL1xudmFyIE5BVElWRV9TWU1CT0wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3ltYm9sLWNvbnN0cnVjdG9yLWRldGVjdGlvbicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IE5BVElWRV9TWU1CT0wgJiZcbiAgIVN5bWJvbC5zaGFtICYmXG4gIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT0gJ3N5bWJvbCc7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgaXNQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtaXMtcHJvdG90eXBlLW9mJyk7XG52YXIgVVNFX1NZTUJPTF9BU19VSUQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdXNlLXN5bWJvbC1hcy11aWQnKTtcblxudmFyICRPYmplY3QgPSBPYmplY3Q7XG5cbm1vZHVsZS5leHBvcnRzID0gVVNFX1NZTUJPTF9BU19VSUQgPyBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIHR5cGVvZiBpdCA9PSAnc3ltYm9sJztcbn0gOiBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyICRTeW1ib2wgPSBnZXRCdWlsdEluKCdTeW1ib2wnKTtcbiAgcmV0dXJuIGlzQ2FsbGFibGUoJFN5bWJvbCkgJiYgaXNQcm90b3R5cGVPZigkU3ltYm9sLnByb3RvdHlwZSwgJE9iamVjdChpdCkpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkU3RyaW5nID0gU3RyaW5nO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICB0cnkge1xuICAgIHJldHVybiAkU3RyaW5nKGFyZ3VtZW50KTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gJ09iamVjdCc7XG4gIH1cbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIHRyeVRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RyeS10by1zdHJpbmcnKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbi8vIGBBc3NlcnQ6IElzQ2FsbGFibGUoYXJndW1lbnQpIGlzIHRydWVgXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICBpZiAoaXNDYWxsYWJsZShhcmd1bWVudCkpIHJldHVybiBhcmd1bWVudDtcbiAgdGhyb3cgbmV3ICRUeXBlRXJyb3IodHJ5VG9TdHJpbmcoYXJndW1lbnQpICsgJyBpcyBub3QgYSBmdW5jdGlvbicpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBhQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1jYWxsYWJsZScpO1xudmFyIGlzTnVsbE9yVW5kZWZpbmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW51bGwtb3ItdW5kZWZpbmVkJyk7XG5cbi8vIGBHZXRNZXRob2RgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1nZXRtZXRob2Rcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKFYsIFApIHtcbiAgdmFyIGZ1bmMgPSBWW1BdO1xuICByZXR1cm4gaXNOdWxsT3JVbmRlZmluZWQoZnVuYykgPyB1bmRlZmluZWQgOiBhQ2FsbGFibGUoZnVuYyk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbi8vIGBPcmRpbmFyeVRvUHJpbWl0aXZlYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb3JkaW5hcnl0b3ByaW1pdGl2ZVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaW5wdXQsIHByZWYpIHtcbiAgdmFyIGZuLCB2YWw7XG4gIGlmIChwcmVmID09PSAnc3RyaW5nJyAmJiBpc0NhbGxhYmxlKGZuID0gaW5wdXQudG9TdHJpbmcpICYmICFpc09iamVjdCh2YWwgPSBjYWxsKGZuLCBpbnB1dCkpKSByZXR1cm4gdmFsO1xuICBpZiAoaXNDYWxsYWJsZShmbiA9IGlucHV0LnZhbHVlT2YpICYmICFpc09iamVjdCh2YWwgPSBjYWxsKGZuLCBpbnB1dCkpKSByZXR1cm4gdmFsO1xuICBpZiAocHJlZiAhPT0gJ3N0cmluZycgJiYgaXNDYWxsYWJsZShmbiA9IGlucHV0LnRvU3RyaW5nKSAmJiAhaXNPYmplY3QodmFsID0gY2FsbChmbiwgaW5wdXQpKSkgcmV0dXJuIHZhbDtcbiAgdGhyb3cgbmV3ICRUeXBlRXJyb3IoXCJDYW4ndCBjb252ZXJ0IG9iamVjdCB0byBwcmltaXRpdmUgdmFsdWVcIik7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHN0b3JlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZC1zdG9yZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG4gIHJldHVybiBzdG9yZVtrZXldIHx8IChzdG9yZVtrZXldID0gdmFsdWUgfHwge30pO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcblxudmFyIGlkID0gMDtcbnZhciBwb3N0Zml4ID0gTWF0aC5yYW5kb20oKTtcbnZhciB0b1N0cmluZyA9IHVuY3VycnlUaGlzKDEuMC50b1N0cmluZyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSkge1xuICByZXR1cm4gJ1N5bWJvbCgnICsgKGtleSA9PT0gdW5kZWZpbmVkID8gJycgOiBrZXkpICsgJylfJyArIHRvU3RyaW5nKCsraWQgKyBwb3N0Zml4LCAzNik7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcbnZhciBzaGFyZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkJyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciB1aWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdWlkJyk7XG52YXIgTkFUSVZFX1NZTUJPTCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zeW1ib2wtY29uc3RydWN0b3ItZGV0ZWN0aW9uJyk7XG52YXIgVVNFX1NZTUJPTF9BU19VSUQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdXNlLXN5bWJvbC1hcy11aWQnKTtcblxudmFyIFN5bWJvbCA9IGdsb2JhbFRoaXMuU3ltYm9sO1xudmFyIFdlbGxLbm93blN5bWJvbHNTdG9yZSA9IHNoYXJlZCgnd2tzJyk7XG52YXIgY3JlYXRlV2VsbEtub3duU3ltYm9sID0gVVNFX1NZTUJPTF9BU19VSUQgPyBTeW1ib2xbJ2ZvciddIHx8IFN5bWJvbCA6IFN5bWJvbCAmJiBTeW1ib2wud2l0aG91dFNldHRlciB8fCB1aWQ7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgaWYgKCFoYXNPd24oV2VsbEtub3duU3ltYm9sc1N0b3JlLCBuYW1lKSkge1xuICAgIFdlbGxLbm93blN5bWJvbHNTdG9yZVtuYW1lXSA9IE5BVElWRV9TWU1CT0wgJiYgaGFzT3duKFN5bWJvbCwgbmFtZSlcbiAgICAgID8gU3ltYm9sW25hbWVdXG4gICAgICA6IGNyZWF0ZVdlbGxLbm93blN5bWJvbCgnU3ltYm9sLicgKyBuYW1lKTtcbiAgfSByZXR1cm4gV2VsbEtub3duU3ltYm9sc1N0b3JlW25hbWVdO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciBpc1N5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1zeW1ib2wnKTtcbnZhciBnZXRNZXRob2QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LW1ldGhvZCcpO1xudmFyIG9yZGluYXJ5VG9QcmltaXRpdmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb3JkaW5hcnktdG8tcHJpbWl0aXZlJyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xudmFyIFRPX1BSSU1JVElWRSA9IHdlbGxLbm93blN5bWJvbCgndG9QcmltaXRpdmUnKTtcblxuLy8gYFRvUHJpbWl0aXZlYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtdG9wcmltaXRpdmVcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGlucHV0LCBwcmVmKSB7XG4gIGlmICghaXNPYmplY3QoaW5wdXQpIHx8IGlzU3ltYm9sKGlucHV0KSkgcmV0dXJuIGlucHV0O1xuICB2YXIgZXhvdGljVG9QcmltID0gZ2V0TWV0aG9kKGlucHV0LCBUT19QUklNSVRJVkUpO1xuICB2YXIgcmVzdWx0O1xuICBpZiAoZXhvdGljVG9QcmltKSB7XG4gICAgaWYgKHByZWYgPT09IHVuZGVmaW5lZCkgcHJlZiA9ICdkZWZhdWx0JztcbiAgICByZXN1bHQgPSBjYWxsKGV4b3RpY1RvUHJpbSwgaW5wdXQsIHByZWYpO1xuICAgIGlmICghaXNPYmplY3QocmVzdWx0KSB8fCBpc1N5bWJvbChyZXN1bHQpKSByZXR1cm4gcmVzdWx0O1xuICAgIHRocm93IG5ldyAkVHlwZUVycm9yKFwiQ2FuJ3QgY29udmVydCBvYmplY3QgdG8gcHJpbWl0aXZlIHZhbHVlXCIpO1xuICB9XG4gIGlmIChwcmVmID09PSB1bmRlZmluZWQpIHByZWYgPSAnbnVtYmVyJztcbiAgcmV0dXJuIG9yZGluYXJ5VG9QcmltaXRpdmUoaW5wdXQsIHByZWYpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciB0b1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1wcmltaXRpdmUnKTtcbnZhciBpc1N5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1zeW1ib2wnKTtcblxuLy8gYFRvUHJvcGVydHlLZXlgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy10b3Byb3BlcnR5a2V5XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICB2YXIga2V5ID0gdG9QcmltaXRpdmUoYXJndW1lbnQsICdzdHJpbmcnKTtcbiAgcmV0dXJuIGlzU3ltYm9sKGtleSkgPyBrZXkgOiBrZXkgKyAnJztcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBJRThfRE9NX0RFRklORSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pZTgtZG9tLWRlZmluZScpO1xudmFyIFY4X1BST1RPVFlQRV9ERUZJTkVfQlVHID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3Y4LXByb3RvdHlwZS1kZWZpbmUtYnVnJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgdG9Qcm9wZXJ0eUtleSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1wcm9wZXJ0eS1rZXknKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnR5IC0tIHNhZmVcbnZhciAkZGVmaW5lUHJvcGVydHkgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5ZGVzY3JpcHRvciAtLSBzYWZlXG52YXIgJGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG52YXIgRU5VTUVSQUJMRSA9ICdlbnVtZXJhYmxlJztcbnZhciBDT05GSUdVUkFCTEUgPSAnY29uZmlndXJhYmxlJztcbnZhciBXUklUQUJMRSA9ICd3cml0YWJsZSc7XG5cbi8vIGBPYmplY3QuZGVmaW5lUHJvcGVydHlgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZGVmaW5lcHJvcGVydHlcbmV4cG9ydHMuZiA9IERFU0NSSVBUT1JTID8gVjhfUFJPVE9UWVBFX0RFRklORV9CVUcgPyBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0eShPLCBQLCBBdHRyaWJ1dGVzKSB7XG4gIGFuT2JqZWN0KE8pO1xuICBQID0gdG9Qcm9wZXJ0eUtleShQKTtcbiAgYW5PYmplY3QoQXR0cmlidXRlcyk7XG4gIGlmICh0eXBlb2YgTyA9PT0gJ2Z1bmN0aW9uJyAmJiBQID09PSAncHJvdG90eXBlJyAmJiAndmFsdWUnIGluIEF0dHJpYnV0ZXMgJiYgV1JJVEFCTEUgaW4gQXR0cmlidXRlcyAmJiAhQXR0cmlidXRlc1tXUklUQUJMRV0pIHtcbiAgICB2YXIgY3VycmVudCA9ICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywgUCk7XG4gICAgaWYgKGN1cnJlbnQgJiYgY3VycmVudFtXUklUQUJMRV0pIHtcbiAgICAgIE9bUF0gPSBBdHRyaWJ1dGVzLnZhbHVlO1xuICAgICAgQXR0cmlidXRlcyA9IHtcbiAgICAgICAgY29uZmlndXJhYmxlOiBDT05GSUdVUkFCTEUgaW4gQXR0cmlidXRlcyA/IEF0dHJpYnV0ZXNbQ09ORklHVVJBQkxFXSA6IGN1cnJlbnRbQ09ORklHVVJBQkxFXSxcbiAgICAgICAgZW51bWVyYWJsZTogRU5VTUVSQUJMRSBpbiBBdHRyaWJ1dGVzID8gQXR0cmlidXRlc1tFTlVNRVJBQkxFXSA6IGN1cnJlbnRbRU5VTUVSQUJMRV0sXG4gICAgICAgIHdyaXRhYmxlOiBmYWxzZVxuICAgICAgfTtcbiAgICB9XG4gIH0gcmV0dXJuICRkZWZpbmVQcm9wZXJ0eShPLCBQLCBBdHRyaWJ1dGVzKTtcbn0gOiAkZGVmaW5lUHJvcGVydHkgOiBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0eShPLCBQLCBBdHRyaWJ1dGVzKSB7XG4gIGFuT2JqZWN0KE8pO1xuICBQID0gdG9Qcm9wZXJ0eUtleShQKTtcbiAgYW5PYmplY3QoQXR0cmlidXRlcyk7XG4gIGlmIChJRThfRE9NX0RFRklORSkgdHJ5IHtcbiAgICByZXR1cm4gJGRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpO1xuICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG4gIGlmICgnZ2V0JyBpbiBBdHRyaWJ1dGVzIHx8ICdzZXQnIGluIEF0dHJpYnV0ZXMpIHRocm93IG5ldyAkVHlwZUVycm9yKCdBY2Nlc3NvcnMgbm90IHN1cHBvcnRlZCcpO1xuICBpZiAoJ3ZhbHVlJyBpbiBBdHRyaWJ1dGVzKSBPW1BdID0gQXR0cmlidXRlcy52YWx1ZTtcbiAgcmV0dXJuIE87XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYml0bWFwLCB2YWx1ZSkge1xuICByZXR1cm4ge1xuICAgIGVudW1lcmFibGU6ICEoYml0bWFwICYgMSksXG4gICAgY29uZmlndXJhYmxlOiAhKGJpdG1hcCAmIDIpLFxuICAgIHdyaXRhYmxlOiAhKGJpdG1hcCAmIDQpLFxuICAgIHZhbHVlOiB2YWx1ZVxuICB9O1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGRlZmluZVByb3BlcnR5TW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKTtcbnZhciBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcblxubW9kdWxlLmV4cG9ydHMgPSBERVNDUklQVE9SUyA/IGZ1bmN0aW9uIChvYmplY3QsIGtleSwgdmFsdWUpIHtcbiAgcmV0dXJuIGRlZmluZVByb3BlcnR5TW9kdWxlLmYob2JqZWN0LCBrZXksIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvcigxLCB2YWx1ZSkpO1xufSA6IGZ1bmN0aW9uIChvYmplY3QsIGtleSwgdmFsdWUpIHtcbiAgb2JqZWN0W2tleV0gPSB2YWx1ZTtcbiAgcmV0dXJuIG9iamVjdDtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgc2hhcmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZCcpO1xudmFyIHVpZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy91aWQnKTtcblxudmFyIGtleXMgPSBzaGFyZWQoJ2tleXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5KSB7XG4gIHJldHVybiBrZXlzW2tleV0gfHwgKGtleXNba2V5XSA9IHVpZChrZXkpKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IHt9O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIE5BVElWRV9XRUFLX01BUCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWFrLW1hcC1iYXNpYy1kZXRlY3Rpb24nKTtcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1ub24tZW51bWVyYWJsZS1wcm9wZXJ0eScpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgc2hhcmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZC1zdG9yZScpO1xudmFyIHNoYXJlZEtleSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQta2V5Jyk7XG52YXIgaGlkZGVuS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oaWRkZW4ta2V5cycpO1xuXG52YXIgT0JKRUNUX0FMUkVBRFlfSU5JVElBTElaRUQgPSAnT2JqZWN0IGFscmVhZHkgaW5pdGlhbGl6ZWQnO1xudmFyIFR5cGVFcnJvciA9IGdsb2JhbFRoaXMuVHlwZUVycm9yO1xudmFyIFdlYWtNYXAgPSBnbG9iYWxUaGlzLldlYWtNYXA7XG52YXIgc2V0LCBnZXQsIGhhcztcblxudmFyIGVuZm9yY2UgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGhhcyhpdCkgPyBnZXQoaXQpIDogc2V0KGl0LCB7fSk7XG59O1xuXG52YXIgZ2V0dGVyRm9yID0gZnVuY3Rpb24gKFRZUEUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIChpdCkge1xuICAgIHZhciBzdGF0ZTtcbiAgICBpZiAoIWlzT2JqZWN0KGl0KSB8fCAoc3RhdGUgPSBnZXQoaXQpKS50eXBlICE9PSBUWVBFKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbmNvbXBhdGlibGUgcmVjZWl2ZXIsICcgKyBUWVBFICsgJyByZXF1aXJlZCcpO1xuICAgIH0gcmV0dXJuIHN0YXRlO1xuICB9O1xufTtcblxuaWYgKE5BVElWRV9XRUFLX01BUCB8fCBzaGFyZWQuc3RhdGUpIHtcbiAgdmFyIHN0b3JlID0gc2hhcmVkLnN0YXRlIHx8IChzaGFyZWQuc3RhdGUgPSBuZXcgV2Vha01hcCgpKTtcbiAgLyogZXNsaW50LWRpc2FibGUgbm8tc2VsZi1hc3NpZ24gLS0gcHJvdG90eXBlIG1ldGhvZHMgcHJvdGVjdGlvbiAqL1xuICBzdG9yZS5nZXQgPSBzdG9yZS5nZXQ7XG4gIHN0b3JlLmhhcyA9IHN0b3JlLmhhcztcbiAgc3RvcmUuc2V0ID0gc3RvcmUuc2V0O1xuICAvKiBlc2xpbnQtZW5hYmxlIG5vLXNlbGYtYXNzaWduIC0tIHByb3RvdHlwZSBtZXRob2RzIHByb3RlY3Rpb24gKi9cbiAgc2V0ID0gZnVuY3Rpb24gKGl0LCBtZXRhZGF0YSkge1xuICAgIGlmIChzdG9yZS5oYXMoaXQpKSB0aHJvdyBuZXcgVHlwZUVycm9yKE9CSkVDVF9BTFJFQURZX0lOSVRJQUxJWkVEKTtcbiAgICBtZXRhZGF0YS5mYWNhZGUgPSBpdDtcbiAgICBzdG9yZS5zZXQoaXQsIG1ldGFkYXRhKTtcbiAgICByZXR1cm4gbWV0YWRhdGE7XG4gIH07XG4gIGdldCA9IGZ1bmN0aW9uIChpdCkge1xuICAgIHJldHVybiBzdG9yZS5nZXQoaXQpIHx8IHt9O1xuICB9O1xuICBoYXMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgICByZXR1cm4gc3RvcmUuaGFzKGl0KTtcbiAgfTtcbn0gZWxzZSB7XG4gIHZhciBTVEFURSA9IHNoYXJlZEtleSgnc3RhdGUnKTtcbiAgaGlkZGVuS2V5c1tTVEFURV0gPSB0cnVlO1xuICBzZXQgPSBmdW5jdGlvbiAoaXQsIG1ldGFkYXRhKSB7XG4gICAgaWYgKGhhc093bihpdCwgU1RBVEUpKSB0aHJvdyBuZXcgVHlwZUVycm9yKE9CSkVDVF9BTFJFQURZX0lOSVRJQUxJWkVEKTtcbiAgICBtZXRhZGF0YS5mYWNhZGUgPSBpdDtcbiAgICBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkoaXQsIFNUQVRFLCBtZXRhZGF0YSk7XG4gICAgcmV0dXJuIG1ldGFkYXRhO1xuICB9O1xuICBnZXQgPSBmdW5jdGlvbiAoaXQpIHtcbiAgICByZXR1cm4gaGFzT3duKGl0LCBTVEFURSkgPyBpdFtTVEFURV0gOiB7fTtcbiAgfTtcbiAgaGFzID0gZnVuY3Rpb24gKGl0KSB7XG4gICAgcmV0dXJuIGhhc093bihpdCwgU1RBVEUpO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgc2V0OiBzZXQsXG4gIGdldDogZ2V0LFxuICBoYXM6IGhhcyxcbiAgZW5mb3JjZTogZW5mb3JjZSxcbiAgZ2V0dGVyRm9yOiBnZXR0ZXJGb3Jcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIENPTkZJR1VSQUJMRV9GVU5DVElPTl9OQU1FID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLW5hbWUnKS5DT05GSUdVUkFCTEU7XG52YXIgaW5zcGVjdFNvdXJjZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbnNwZWN0LXNvdXJjZScpO1xudmFyIEludGVybmFsU3RhdGVNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW50ZXJuYWwtc3RhdGUnKTtcblxudmFyIGVuZm9yY2VJbnRlcm5hbFN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5lbmZvcmNlO1xudmFyIGdldEludGVybmFsU3RhdGUgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLmdldDtcbnZhciAkU3RyaW5nID0gU3RyaW5nO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSBzYWZlXG52YXIgZGVmaW5lUHJvcGVydHkgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG52YXIgc3RyaW5nU2xpY2UgPSB1bmN1cnJ5VGhpcygnJy5zbGljZSk7XG52YXIgcmVwbGFjZSA9IHVuY3VycnlUaGlzKCcnLnJlcGxhY2UpO1xudmFyIGpvaW4gPSB1bmN1cnJ5VGhpcyhbXS5qb2luKTtcblxudmFyIENPTkZJR1VSQUJMRV9MRU5HVEggPSBERVNDUklQVE9SUyAmJiAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gZGVmaW5lUHJvcGVydHkoZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9LCAnbGVuZ3RoJywgeyB2YWx1ZTogOCB9KS5sZW5ndGggIT09IDg7XG59KTtcblxudmFyIFRFTVBMQVRFID0gU3RyaW5nKFN0cmluZykuc3BsaXQoJ1N0cmluZycpO1xuXG52YXIgbWFrZUJ1aWx0SW4gPSBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh2YWx1ZSwgbmFtZSwgb3B0aW9ucykge1xuICBpZiAoc3RyaW5nU2xpY2UoJFN0cmluZyhuYW1lKSwgMCwgNykgPT09ICdTeW1ib2woJykge1xuICAgIG5hbWUgPSAnWycgKyByZXBsYWNlKCRTdHJpbmcobmFtZSksIC9eU3ltYm9sXFwoKFteKV0qKVxcKS4qJC8sICckMScpICsgJ10nO1xuICB9XG4gIGlmIChvcHRpb25zICYmIG9wdGlvbnMuZ2V0dGVyKSBuYW1lID0gJ2dldCAnICsgbmFtZTtcbiAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5zZXR0ZXIpIG5hbWUgPSAnc2V0ICcgKyBuYW1lO1xuICBpZiAoIWhhc093bih2YWx1ZSwgJ25hbWUnKSB8fCAoQ09ORklHVVJBQkxFX0ZVTkNUSU9OX05BTUUgJiYgdmFsdWUubmFtZSAhPT0gbmFtZSkpIHtcbiAgICBpZiAoREVTQ1JJUFRPUlMpIGRlZmluZVByb3BlcnR5KHZhbHVlLCAnbmFtZScsIHsgdmFsdWU6IG5hbWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9KTtcbiAgICBlbHNlIHZhbHVlLm5hbWUgPSBuYW1lO1xuICB9XG4gIGlmIChDT05GSUdVUkFCTEVfTEVOR1RIICYmIG9wdGlvbnMgJiYgaGFzT3duKG9wdGlvbnMsICdhcml0eScpICYmIHZhbHVlLmxlbmd0aCAhPT0gb3B0aW9ucy5hcml0eSkge1xuICAgIGRlZmluZVByb3BlcnR5KHZhbHVlLCAnbGVuZ3RoJywgeyB2YWx1ZTogb3B0aW9ucy5hcml0eSB9KTtcbiAgfVxuICB0cnkge1xuICAgIGlmIChvcHRpb25zICYmIGhhc093bihvcHRpb25zLCAnY29uc3RydWN0b3InKSAmJiBvcHRpb25zLmNvbnN0cnVjdG9yKSB7XG4gICAgICBpZiAoREVTQ1JJUFRPUlMpIGRlZmluZVByb3BlcnR5KHZhbHVlLCAncHJvdG90eXBlJywgeyB3cml0YWJsZTogZmFsc2UgfSk7XG4gICAgLy8gaW4gVjggfiBDaHJvbWUgNTMsIHByb3RvdHlwZXMgb2Ygc29tZSBtZXRob2RzLCBsaWtlIGBBcnJheS5wcm90b3R5cGUudmFsdWVzYCwgYXJlIG5vbi13cml0YWJsZVxuICAgIH0gZWxzZSBpZiAodmFsdWUucHJvdG90eXBlKSB2YWx1ZS5wcm90b3R5cGUgPSB1bmRlZmluZWQ7XG4gIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbiAgdmFyIHN0YXRlID0gZW5mb3JjZUludGVybmFsU3RhdGUodmFsdWUpO1xuICBpZiAoIWhhc093bihzdGF0ZSwgJ3NvdXJjZScpKSB7XG4gICAgc3RhdGUuc291cmNlID0gam9pbihURU1QTEFURSwgdHlwZW9mIG5hbWUgPT0gJ3N0cmluZycgPyBuYW1lIDogJycpO1xuICB9IHJldHVybiB2YWx1ZTtcbn07XG5cbi8vIGFkZCBmYWtlIEZ1bmN0aW9uI3RvU3RyaW5nIGZvciBjb3JyZWN0IHdvcmsgd3JhcHBlZCBtZXRob2RzIC8gY29uc3RydWN0b3JzIHdpdGggbWV0aG9kcyBsaWtlIExvRGFzaCBpc05hdGl2ZVxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWV4dGVuZC1uYXRpdmUgLS0gcmVxdWlyZWRcbkZ1bmN0aW9uLnByb3RvdHlwZS50b1N0cmluZyA9IG1ha2VCdWlsdEluKGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICByZXR1cm4gaXNDYWxsYWJsZSh0aGlzKSAmJiBnZXRJbnRlcm5hbFN0YXRlKHRoaXMpLnNvdXJjZSB8fCBpbnNwZWN0U291cmNlKHRoaXMpO1xufSwgJ3RvU3RyaW5nJyk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgbWFrZUJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbWFrZS1idWlsdC1pbicpO1xudmFyIGRlZmluZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodGFyZ2V0LCBuYW1lLCBkZXNjcmlwdG9yKSB7XG4gIGlmIChkZXNjcmlwdG9yLmdldCkgbWFrZUJ1aWx0SW4oZGVzY3JpcHRvci5nZXQsIG5hbWUsIHsgZ2V0dGVyOiB0cnVlIH0pO1xuICBpZiAoZGVzY3JpcHRvci5zZXQpIG1ha2VCdWlsdEluKGRlc2NyaXB0b3Iuc2V0LCBuYW1lLCB7IHNldHRlcjogdHJ1ZSB9KTtcbiAgcmV0dXJuIGRlZmluZVByb3BlcnR5LmYodGFyZ2V0LCBuYW1lLCBkZXNjcmlwdG9yKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG5cbi8vIGBSZWdFeHAucHJvdG90eXBlLmZsYWdzYCBnZXR0ZXIgaW1wbGVtZW50YXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtZ2V0LXJlZ2V4cC5wcm90b3R5cGUuZmxhZ3Ncbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkge1xuICB2YXIgdGhhdCA9IGFuT2JqZWN0KHRoaXMpO1xuICB2YXIgcmVzdWx0ID0gJyc7XG4gIGlmICh0aGF0Lmhhc0luZGljZXMpIHJlc3VsdCArPSAnZCc7XG4gIGlmICh0aGF0Lmdsb2JhbCkgcmVzdWx0ICs9ICdnJztcbiAgaWYgKHRoYXQuaWdub3JlQ2FzZSkgcmVzdWx0ICs9ICdpJztcbiAgaWYgKHRoYXQubXVsdGlsaW5lKSByZXN1bHQgKz0gJ20nO1xuICBpZiAodGhhdC5kb3RBbGwpIHJlc3VsdCArPSAncyc7XG4gIGlmICh0aGF0LnVuaWNvZGUpIHJlc3VsdCArPSAndSc7XG4gIGlmICh0aGF0LnVuaWNvZGVTZXRzKSByZXN1bHQgKz0gJ3YnO1xuICBpZiAodGhhdC5zdGlja3kpIHJlc3VsdCArPSAneSc7XG4gIHJldHVybiByZXN1bHQ7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGRlZmluZUJ1aWx0SW5BY2Nlc3NvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4tYWNjZXNzb3InKTtcbnZhciByZWdFeHBGbGFncyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZWdleHAtZmxhZ3MnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xuXG4vLyBiYWJlbC1taW5pZnkgYW5kIENsb3N1cmUgQ29tcGlsZXIgdHJhbnNwaWxlcyBSZWdFeHAoJy4nLCAnZCcpIC0+IC8uL2QgYW5kIGl0IGNhdXNlcyBTeW50YXhFcnJvclxudmFyIFJlZ0V4cCA9IGdsb2JhbFRoaXMuUmVnRXhwO1xudmFyIFJlZ0V4cFByb3RvdHlwZSA9IFJlZ0V4cC5wcm90b3R5cGU7XG5cbnZhciBGT1JDRUQgPSBERVNDUklQVE9SUyAmJiBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHZhciBJTkRJQ0VTX1NVUFBPUlQgPSB0cnVlO1xuICB0cnkge1xuICAgIFJlZ0V4cCgnLicsICdkJyk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgSU5ESUNFU19TVVBQT1JUID0gZmFsc2U7XG4gIH1cblxuICB2YXIgTyA9IHt9O1xuICAvLyBtb2Rlcm4gVjggYnVnXG4gIHZhciBjYWxscyA9ICcnO1xuICB2YXIgZXhwZWN0ZWQgPSBJTkRJQ0VTX1NVUFBPUlQgPyAnZGdpbXN5JyA6ICdnaW1zeSc7XG5cbiAgdmFyIGFkZEdldHRlciA9IGZ1bmN0aW9uIChrZXksIGNocikge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gc2FmZVxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCBrZXksIHsgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICBjYWxscyArPSBjaHI7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IH0pO1xuICB9O1xuXG4gIHZhciBwYWlycyA9IHtcbiAgICBkb3RBbGw6ICdzJyxcbiAgICBnbG9iYWw6ICdnJyxcbiAgICBpZ25vcmVDYXNlOiAnaScsXG4gICAgbXVsdGlsaW5lOiAnbScsXG4gICAgc3RpY2t5OiAneSdcbiAgfTtcblxuICBpZiAoSU5ESUNFU19TVVBQT1JUKSBwYWlycy5oYXNJbmRpY2VzID0gJ2QnO1xuXG4gIGZvciAodmFyIGtleSBpbiBwYWlycykgYWRkR2V0dGVyKGtleSwgcGFpcnNba2V5XSk7XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3IgLS0gc2FmZVxuICB2YXIgcmVzdWx0ID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihSZWdFeHBQcm90b3R5cGUsICdmbGFncycpLmdldC5jYWxsKE8pO1xuXG4gIHJldHVybiByZXN1bHQgIT09IGV4cGVjdGVkIHx8IGNhbGxzICE9PSBleHBlY3RlZDtcbn0pO1xuXG4vLyBgUmVnRXhwLnByb3RvdHlwZS5mbGFnc2AgZ2V0dGVyXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWdldC1yZWdleHAucHJvdG90eXBlLmZsYWdzXG5pZiAoRk9SQ0VEKSBkZWZpbmVCdWlsdEluQWNjZXNzb3IoUmVnRXhwUHJvdG90eXBlLCAnZmxhZ3MnLCB7XG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgZ2V0OiByZWdFeHBGbGFnc1xufSk7XG4iLCJleHBvcnQgaW50ZXJmYWNlIEdyYW1tYXJSdWxlIHtcbiAgcmVnZXhwOiBSZWdFeHA7XG4gIHJlcGxhY2VtZW50OiBzdHJpbmc7XG4gIGxhYmVsUGxhY2Vob2xkZXI/OiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSFRNTEJsb2NrUnVsZSB7XG4gIHN0YXJ0OiBSZWdFeHA7XG4gIGVuZDogUmVnRXhwIHwgZmFsc2U7XG4gIHBhcmFJbnRlcnJ1cHQ6IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSW5saW5lQ29tbWFuZCB7XG4gIHR5cGU6ICdpbmxpbmUnO1xuICBjbGFzc05hbWU6IHN0cmluZztcbiAgc2V0OiB7XG4gICAgcHJlOiBzdHJpbmc7XG4gICAgcG9zdDogc3RyaW5nO1xuICB9O1xuICB1bnNldDoge1xuICAgIHByZVBhdHRlcm46IFJlZ0V4cDtcbiAgICBwb3N0UGF0dGVybjogUmVnRXhwO1xuICB9O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIExpbmVDb21tYW5kIHtcbiAgdHlwZTogJ2xpbmUnO1xuICBjbGFzc05hbWU6IHN0cmluZztcbiAgc2V0OiB7XG4gICAgcGF0dGVybjogUmVnRXhwO1xuICAgIHJlcGxhY2VtZW50OiBzdHJpbmc7XG4gIH07XG4gIHVuc2V0OiB7XG4gICAgcGF0dGVybjogUmVnRXhwO1xuICAgIHJlcGxhY2VtZW50OiBzdHJpbmc7XG4gIH07XG59XG5cbmV4cG9ydCB0eXBlIENvbW1hbmQgPSBJbmxpbmVDb21tYW5kIHwgTGluZUNvbW1hbmQ7XG5cbmNvbnN0IHJlcGxhY2VtZW50czogUmVjb3JkPHN0cmluZywgUmVnRXhwPiA9IHtcbiAgQVNDSUlQdW5jdHVhdGlvbjogL1shXCIjJCUmJygpKissXFwtLi86Ozw9Pj9AW1xcXV5fYHt8fX5cXFxcXS8sICBcbiAgTm90VHJpZ2dlckNoYXI6IC9bXmBfKltcXF0oKTw+IX5dLyxcbiAgU2NoZW1lOiAvW0EtWmEtel1bQS1aYS16MC05Ky4tXXsxLDMxfS8sXG4gIEVtYWlsOiAvW2EtekEtWjAtOS4hIyQlJicqKy89P15fYHt8fX4tXStAW2EtekEtWjAtOV0oPzpbYS16QS1aMC05LV17MCw2MX1bYS16QS1aMC05XSk/KD86XFwuW2EtekEtWjAtOV0oPzpbYS16QS1aMC05LV17MCw2MX1bYS16QS1aMC05XSk/KSovLCAvLyBGcm9tIENvbW1vbk1hcmsgc3BlY1xuICBIVE1MT3BlblRhZzogLzxIVE1MVGFnTmFtZSg/OkhUTUxBdHRyaWJ1dGUpKlxccypcXC8/Pi8sXG4gIEhUTUxDbG9zZVRhZzogLzxcXC9IVE1MVGFnTmFtZVxccyo+LyxcbiAgSFRNTFRhZ05hbWU6IC9bQS1aYS16XVtBLVphLXowLTktXSovLCBcbiAgSFRNTENvbW1lbnQ6IC88IS0tKD86W14+LV18KD86W14+LV0oPzpbXi1dfC1bXi1dKSpbXi1dKSktLT4vLFxuICBIVE1MUEk6IC88XFw/KD86fC58KD86W14/XXxcXD9bXj5dKSopXFw/Pi8sXG4gIEhUTUxEZWNsYXJhdGlvbjogLzwhW0EtWl0rXFxzW14+XSo+LyxcbiAgSFRNTENEQVRBOiAvPCFcXFtDREFUQVxcWy4qP1xcXVxcXT4vLFxuICBIVE1MQXR0cmlidXRlOiAvXFxzK1tBLVphLXpfOl1bQS1aYS16MC05Xy46LV0qKD86SFRNTEF0dFZhbHVlKT8vLFxuICBIVE1MQXR0VmFsdWU6IC9cXHMqPVxccyooPzooPzonW14nXSonKXwoPzpcIlteXCJdKlwiKXwoPzpbXlxcc1wiJz08PmBdKykpLyxcbiAgS25vd25UYWc6IC9hZGRyZXNzfGFydGljbGV8YXNpZGV8YmFzZXxiYXNlZm9udHxibG9ja3F1b3RlfGJvZHl8Y2FwdGlvbnxjZW50ZXJ8Y29sfGNvbGdyb3VwfGRkfGRldGFpbHN8ZGlhbG9nfGRpcnxkaXZ8ZGx8ZHR8ZmllbGRzZXR8ZmlnY2FwdGlvbnxmaWd1cmV8Zm9vdGVyfGZvcm18ZnJhbWV8ZnJhbWVzZXR8aDF8aDJ8aDN8aDR8aDV8aDZ8aGVhZHxoZWFkZXJ8aHJ8aHRtbHxpZnJhbWV8bGVnZW5kfGxpfGxpbmt8bWFpbnxtZW51fG1lbnVpdGVtfG5hdnxub2ZyYW1lc3xvbHxvcHRncm91cHxvcHRpb258cHxwYXJhbXxzZWN0aW9ufHNvdXJjZXxzdW1tYXJ5fHRhYmxlfHRib2R5fHRkfHRmb290fHRofHRoZWFkfHRpdGxlfHRyfHRyYWNrfHVsL1xufTtcblxuLy8gRnJvbSBDb21tb25NYXJrLmpzLiBcbmV4cG9ydCBjb25zdCBwdW5jdHVhdGlvbkxlYWRpbmcgPSBuZXcgUmVnRXhwKC9eKD86WyFcIiMkJSYnKCkqKyxcXC0uLzo7PD0+P0BbXFxdXFxcXF5fYHt8fX5cXHhBMVxceEE3XFx4QUJcXHhCNlxceEI3XFx4QkJcXHhCRlxcdTAzN0VcXHUwMzg3XFx1MDU1QS1cXHUwNTVGXFx1MDU4OVxcdTA1OEFcXHUwNUJFXFx1MDVDMFxcdTA1QzNcXHUwNUM2XFx1MDVGM1xcdTA1RjRcXHUwNjA5XFx1MDYwQVxcdTA2MENcXHUwNjBEXFx1MDYxQlxcdTA2MUVcXHUwNjFGXFx1MDY2QS1cXHUwNjZEXFx1MDZENFxcdTA3MDAtXFx1MDcwRFxcdTA3RjctXFx1MDdGOVxcdTA4MzAtXFx1MDgzRVxcdTA4NUVcXHUwOTY0XFx1MDk2NVxcdTA5NzBcXHUwQUYwXFx1MERGNFxcdTBFNEZcXHUwRTVBXFx1MEU1QlxcdTBGMDQtXFx1MEYxMlxcdTBGMTRcXHUwRjNBLVxcdTBGM0RcXHUwRjg1XFx1MEZEMC1cXHUwRkQ0XFx1MEZEOVxcdTBGREFcXHUxMDRBLVxcdTEwNEZcXHUxMEZCXFx1MTM2MC1cXHUxMzY4XFx1MTQwMFxcdTE2NkRcXHUxNjZFXFx1MTY5QlxcdTE2OUNcXHUxNkVCLVxcdTE2RURcXHUxNzM1XFx1MTczNlxcdTE3RDQtXFx1MTdENlxcdTE3RDgtXFx1MTdEQVxcdTE4MDAtXFx1MTgwQVxcdTE5NDRcXHUxOTQ1XFx1MUExRVxcdTFBMUZcXHUxQUEwLVxcdTFBQTZcXHUxQUE4LVxcdTFBQURcXHUxQjVBLVxcdTFCNjBcXHUxQkZDLVxcdTFCRkZcXHUxQzNCLVxcdTFDM0ZcXHUxQzdFXFx1MUM3RlxcdTFDQzAtXFx1MUNDN1xcdTFDRDNcXHUyMDEwLVxcdTIwMjdcXHUyMDMwLVxcdTIwNDNcXHUyMDQ1LVxcdTIwNTFcXHUyMDUzLVxcdTIwNUVcXHUyMDdEXFx1MjA3RVxcdTIwOERcXHUyMDhFXFx1MjMwOC1cXHUyMzBCXFx1MjMyOVxcdTIzMkFcXHUyNzY4LVxcdTI3NzVcXHUyN0M1XFx1MjdDNlxcdTI3RTYtXFx1MjdFRlxcdTI5ODMtXFx1Mjk5OFxcdTI5RDgtXFx1MjlEQlxcdTI5RkNcXHUyOUZEXFx1MkNGOS1cXHUyQ0ZDXFx1MkNGRVxcdTJDRkZcXHUyRDcwXFx1MkUwMC1cXHUyRTJFXFx1MkUzMC1cXHUyRTQyXFx1MzAwMS1cXHUzMDAzXFx1MzAwOC1cXHUzMDExXFx1MzAxNC1cXHUzMDFGXFx1MzAzMFxcdTMwM0RcXHUzMEEwXFx1MzBGQlxcdUE0RkVcXHVBNEZGXFx1QTYwRC1cXHVBNjBGXFx1QTY3M1xcdUE2N0VcXHVBNkYyLVxcdUE2RjdcXHVBODc0LVxcdUE4NzdcXHVBOENFXFx1QThDRlxcdUE4RjgtXFx1QThGQVxcdUE4RkNcXHVBOTJFXFx1QTkyRlxcdUE5NUZcXHVBOUMxLVxcdUE5Q0RcXHVBOURFXFx1QTlERlxcdUFBNUMtXFx1QUE1RlxcdUFBREVcXHVBQURGXFx1QUFGMFxcdUFBRjFcXHVBQkVCXFx1RkQzRVxcdUZEM0ZcXHVGRTEwLVxcdUZFMTlcXHVGRTMwLVxcdUZFNTJcXHVGRTU0LVxcdUZFNjFcXHVGRTYzXFx1RkU2OFxcdUZFNkFcXHVGRTZCXFx1RkYwMS1cXHVGRjAzXFx1RkYwNS1cXHVGRjBBXFx1RkYwQy1cXHVGRjBGXFx1RkYxQVxcdUZGMUJcXHVGRjFGXFx1RkYyMFxcdUZGM0ItXFx1RkYzRFxcdUZGM0ZcXHVGRjVCXFx1RkY1RFxcdUZGNUYtXFx1RkY2NV18XFx1RDgwMFtcXHVERDAwLVxcdUREMDJcXHVERjlGXFx1REZEMF18XFx1RDgwMVxcdURENkZ8XFx1RDgwMltcXHVEQzU3XFx1REQxRlxcdUREM0ZcXHVERTUwLVxcdURFNThcXHVERTdGXFx1REVGMC1cXHVERUY2XFx1REYzOS1cXHVERjNGXFx1REY5OS1cXHVERjlDXXxcXHVEODA0W1xcdURDNDctXFx1REM0RFxcdURDQkJcXHVEQ0JDXFx1RENCRS1cXHVEQ0MxXFx1REQ0MC1cXHVERDQzXFx1REQ3NFxcdURENzVcXHVEREM1LVxcdUREQzlcXHVERENEXFx1REREQlxcdUREREQtXFx1RERERlxcdURFMzgtXFx1REUzRFxcdURFQTldfFxcdUQ4MDVbXFx1RENDNlxcdUREQzEtXFx1REREN1xcdURFNDEtXFx1REU0M1xcdURGM0MtXFx1REYzRV18XFx1RDgwOVtcXHVEQzcwLVxcdURDNzRdfFxcdUQ4MUFbXFx1REU2RVxcdURFNkZcXHVERUY1XFx1REYzNy1cXHVERjNCXFx1REY0NF18XFx1RDgyRlxcdURDOUZ8XFx1RDgzNltcXHVERTg3LVxcdURFOEJdKS8pO1xuXG5leHBvcnQgY29uc3QgcHVuY3R1YXRpb25UcmFpbGluZyA9IG5ldyBSZWdFeHAoLyg/OlshXCIjJCUmJygpKissXFwtLi86Ozw9Pj9AW1xcXVxcXFxeX2B7fH1+XFx4QTFcXHhBN1xceEFCXFx4QjZcXHhCN1xceEJCXFx4QkZcXHUwMzdFXFx1MDM4N1xcdTA1NUEtXFx1MDU1RlxcdTA1ODlcXHUwNThBXFx1MDVCRVxcdTA1QzBcXHUwNUMzXFx1MDVDNlxcdTA1RjNcXHUwNUY0XFx1MDYwOVxcdTA2MEFcXHUwNjBDXFx1MDYwRFxcdTA2MUJcXHUwNjFFXFx1MDYxRlxcdTA2NkEtXFx1MDY2RFxcdTA2RDRcXHUwNzAwLVxcdTA3MERcXHUwN0Y3LVxcdTA3RjlcXHUwODMwLVxcdTA4M0VcXHUwODVFXFx1MDk2NFxcdTA5NjVcXHUwOTcwXFx1MEFGMFxcdTBERjRcXHUwRTRGXFx1MEU1QVxcdTBFNUJcXHUwRjA0LVxcdTBGMTJcXHUwRjE0XFx1MEYzQS1cXHUwRjNEXFx1MEY4NVxcdTBGRDAtXFx1MEZENFxcdTBGRDlcXHUwRkRBXFx1MTA0QS1cXHUxMDRGXFx1MTBGQlxcdTEzNjAtXFx1MTM2OFxcdTE0MDBcXHUxNjZEXFx1MTY2RVxcdTE2OUJcXHUxNjlDXFx1MTZFQi1cXHUxNkVEXFx1MTczNVxcdTE3MzZcXHUxN0Q0LVxcdTE3RDZcXHUxN0Q4LVxcdTE3REFcXHUxODAwLVxcdTE4MEFcXHUxOTQ0XFx1MTk0NVxcdTFBMUVcXHUxQTFGXFx1MUFBMC1cXHUxQUE2XFx1MUFBOC1cXHUxQUFEXFx1MUI1QS1cXHUxQjYwXFx1MUJGQy1cXHUxQkZGXFx1MUMzQi1cXHUxQzNGXFx1MUM3RVxcdTFDN0ZcXHUxQ0MwLVxcdTFDQzdcXHUxQ0QzXFx1MjAxMC1cXHUyMDI3XFx1MjAzMC1cXHUyMDQzXFx1MjA0NS1cXHUyMDUxXFx1MjA1My1cXHUyMDVFXFx1MjA3RFxcdTIwN0VcXHUyMDhEXFx1MjA4RVxcdTIzMDgtXFx1MjMwQlxcdTIzMjlcXHUyMzJBXFx1Mjc2OC1cXHUyNzc1XFx1MjdDNVxcdTI3QzZcXHUyN0U2LVxcdTI3RUZcXHUyOTgzLVxcdTI5OThcXHUyOUQ4LVxcdTI5REJcXHUyOUZDXFx1MjlGRFxcdTJDRjktXFx1MkNGQ1xcdTJDRkVcXHUyQ0ZGXFx1MkQ3MFxcdTJFMDAtXFx1MkUyRVxcdTJFMzAtXFx1MkU0MlxcdTMwMDEtXFx1MzAwM1xcdTMwMDgtXFx1MzAxMVxcdTMwMTQtXFx1MzAxRlxcdTMwMzBcXHUzMDNEXFx1MzBBMFxcdTMwRkJcXHVBNEZFXFx1QTRGRlxcdUE2MEQtXFx1QTYwRlxcdUE2NzNcXHVBNjdFXFx1QTZGMi1cXHVBNkY3XFx1QTg3NC1cXHVBODc3XFx1QThDRVxcdUE4Q0ZcXHVBOEY4LVxcdUE4RkFcXHVBOEZDXFx1QTkyRVxcdUE5MkZcXHVBOTVGXFx1QTlDMS1cXHVBOUNEXFx1QTlERVxcdUE5REZcXHVBQTVDLVxcdUFBNUZcXHVBQURFXFx1QUFERlxcdUFBRjBcXHVBQUYxXFx1QUJFQlxcdUZEM0VcXHVGRDNGXFx1RkUxMC1cXHVGRTE5XFx1RkUzMC1cXHVGRTUyXFx1RkU1NC1cXHVGRTYxXFx1RkU2M1xcdUZFNjhcXHVGRTZBXFx1RkU2QlxcdUZGMDEtXFx1RkYwM1xcdUZGMDUtXFx1RkYwQVxcdUZGMEMtXFx1RkYwRlxcdUZGMUFcXHVGRjFCXFx1RkYxRlxcdUZGMjBcXHVGRjNCLVxcdUZGM0RcXHVGRjNGXFx1RkY1QlxcdUZGNURcXHVGRjVGLVxcdUZGNjVdfFxcdUQ4MDBbXFx1REQwMC1cXHVERDAyXFx1REY5RlxcdURGRDBdfFxcdUQ4MDFcXHVERDZGfFxcdUQ4MDJbXFx1REM1N1xcdUREMUZcXHVERDNGXFx1REU1MC1cXHVERTU4XFx1REU3RlxcdURFRjAtXFx1REVGNlxcdURGMzktXFx1REYzRlxcdURGOTktXFx1REY5Q118XFx1RDgwNFtcXHVEQzQ3LVxcdURDNERcXHVEQ0JCXFx1RENCQ1xcdURDQkUtXFx1RENDMVxcdURENDAtXFx1REQ0M1xcdURENzRcXHVERDc1XFx1RERDNS1cXHVEREM5XFx1RERDRFxcdUREREJcXHVERERELVxcdUREREZcXHVERTM4LVxcdURFM0RcXHVERUE5XXxcXHVEODA1W1xcdURDQzZcXHVEREMxLVxcdURERDdcXHVERTQxLVxcdURFNDNcXHVERjNDLVxcdURGM0VdfFxcdUQ4MDlbXFx1REM3MC1cXHVEQzc0XXxcXHVEODFBW1xcdURFNkVcXHVERTZGXFx1REVGNVxcdURGMzctXFx1REYzQlxcdURGNDRdfFxcdUQ4MkZcXHVEQzlGfFxcdUQ4MzZbXFx1REU4Ny1cXHVERThCXSkkLyk7XG5cbi8qKlxuICogVGhpcyBpcyBDb21tb25NYXJrJ3MgYmxvY2sgZ3JhbW1hciwgYnV0IHdlJ3JlIGlnbm9yaW5nIG5lc3RlZCBibG9ja3MgaGVyZS4gIFxuICovIFxuZXhwb3J0IGNvbnN0IGxpbmVHcmFtbWFyOiBSZWNvcmQ8c3RyaW5nLCBHcmFtbWFyUnVsZT4gPSB7IFxuICBUTUgxOiB7IFxuICAgIHJlZ2V4cDogL14oIHswLDN9I1xccykoLio/KSgoPzpcXHMrIytcXHMqKT8pJC8sIFxuICAgIHJlcGxhY2VtZW50OiAnPHNwYW4gY2xhc3M9XCJUTU1hcmsgVE1NYXJrX1RNSDFcIj4kMTwvc3Bhbj4kJDI8c3BhbiBjbGFzcz1cIlRNTWFyayBUTU1hcmtfVE1IMVwiPiQzPC9zcGFuPidcbiAgfSxcbiAgVE1IMjogeyBcbiAgICByZWdleHA6IC9eKCB7MCwzfSMjXFxzKSguKj8pKCg/OlxccysjK1xccyopPykkLywgXG4gICAgcmVwbGFjZW1lbnQ6ICc8c3BhbiBjbGFzcz1cIlRNTWFyayBUTU1hcmtfVE1IMlwiPiQxPC9zcGFuPiQkMjxzcGFuIGNsYXNzPVwiVE1NYXJrIFRNTWFya19UTUgyXCI+JDM8L3NwYW4+J1xuICB9LFxuICBUTUgzOiB7IFxuICAgIHJlZ2V4cDogL14oIHswLDN9IyMjXFxzKSguKj8pKCg/OlxccysjK1xccyopPykkLywgXG4gICAgcmVwbGFjZW1lbnQ6ICc8c3BhbiBjbGFzcz1cIlRNTWFyayBUTU1hcmtfVE1IM1wiPiQxPC9zcGFuPiQkMjxzcGFuIGNsYXNzPVwiVE1NYXJrIFRNTWFya19UTUgzXCI+JDM8L3NwYW4+J1xuICB9LFxuICBUTUg0OiB7IFxuICAgIHJlZ2V4cDogL14oIHswLDN9IyMjI1xccykoLio/KSgoPzpcXHMrIytcXHMqKT8pJC8sIFxuICAgIHJlcGxhY2VtZW50OiAnPHNwYW4gY2xhc3M9XCJUTU1hcmsgVE1NYXJrX1RNSDRcIj4kMTwvc3Bhbj4kJDI8c3BhbiBjbGFzcz1cIlRNTWFyayBUTU1hcmtfVE1INFwiPiQzPC9zcGFuPidcbiAgfSxcbiAgVE1INTogeyBcbiAgICByZWdleHA6IC9eKCB7MCwzfSMjIyMjXFxzKSguKj8pKCg/OlxccysjK1xccyopPykkLywgXG4gICAgcmVwbGFjZW1lbnQ6ICc8c3BhbiBjbGFzcz1cIlRNTWFyayBUTU1hcmtfVE1INVwiPiQxPC9zcGFuPiQkMjxzcGFuIGNsYXNzPVwiVE1NYXJrIFRNTWFya19UTUg1XCI+JDM8L3NwYW4+J1xuICB9LFxuICBUTUg2OiB7IFxuICAgIHJlZ2V4cDogL14oIHswLDN9IyMjIyMjXFxzKSguKj8pKCg/OlxccysjK1xccyopPykkLywgXG4gICAgcmVwbGFjZW1lbnQ6ICc8c3BhbiBjbGFzcz1cIlRNTWFyayBUTU1hcmtfVE1INlwiPiQxPC9zcGFuPiQkMjxzcGFuIGNsYXNzPVwiVE1NYXJrIFRNTWFya19UTUg2XCI+JDM8L3NwYW4+J1xuICB9LFxuICBUTUJsb2NrcXVvdGU6IHsgXG4gICAgcmVnZXhwOiAvXiggezAsM30+WyBdPykoLiopJC8sIFxuICAgIHJlcGxhY2VtZW50OiAnPHNwYW4gY2xhc3M9XCJUTU1hcmsgVE1NYXJrX1RNQmxvY2txdW90ZVwiPiQxPC9zcGFuPiQkMidcbiAgfSxcbiAgVE1Db2RlRmVuY2VCYWNrdGlja09wZW46IHsgXG4gICAgcmVnZXhwOiAvXiggezAsM30oPzxzZXE+YGBgYCopXFxzKikoW15gXSo/KShcXHMqKSQvLCBcbiAgICByZXBsYWNlbWVudDogJzxzcGFuIGNsYXNzPVwiVE1NYXJrIFRNTWFya19UTUNvZGVGZW5jZUJhY2t0aWNrXCI+JDE8L3NwYW4+PHNwYW4gY2xhc3M9XCJUTUluZm9TdHJpbmdcIj4kMzwvc3Bhbj4kNCdcbiAgfSxcbiAgVE1Db2RlRmVuY2VUaWxkZU9wZW46IHsgXG4gICAgcmVnZXhwOiAvXiggezAsM30oPzxzZXE+fn5+fiopXFxzKikoLio/KShcXHMqKSQvLCBcbiAgICByZXBsYWNlbWVudDogJzxzcGFuIGNsYXNzPVwiVE1NYXJrIFRNTWFya19UTUNvZGVGZW5jZVRpbGRlXCI+JDE8L3NwYW4+PHNwYW4gY2xhc3M9XCJUTUluZm9TdHJpbmdcIj4kMzwvc3Bhbj4kNCdcbiAgfSxcbiAgVE1Db2RlRmVuY2VCYWNrdGlja0Nsb3NlOiB7IFxuICAgIHJlZ2V4cDogL14oIHswLDN9KD88c2VxPmBgYGAqKSkoXFxzKikkLywgXG4gICAgcmVwbGFjZW1lbnQ6ICc8c3BhbiBjbGFzcz1cIlRNTWFyayBUTU1hcmtfVE1Db2RlRmVuY2VCYWNrdGlja1wiPiQxPC9zcGFuPiQzJ1xuICB9LFxuICBUTUNvZGVGZW5jZVRpbGRlQ2xvc2U6IHsgXG4gICAgcmVnZXhwOiAvXiggezAsM30oPzxzZXE+fn5+fiopKShcXHMqKSQvLCBcbiAgICByZXBsYWNlbWVudDogJzxzcGFuIGNsYXNzPVwiVE1NYXJrIFRNTWFya19UTUNvZGVGZW5jZVRpbGRlXCI+JDE8L3NwYW4+JDMnXG4gIH0sXG4gIFRNQmxhbmtMaW5lOiB7IFxuICAgIHJlZ2V4cDogL14oWyBcXHRdKikkLywgXG4gICAgcmVwbGFjZW1lbnQ6ICckMCdcbiAgfSxcbiAgVE1TZXRleHRIMU1hcmtlcjogeyBcbiAgICByZWdleHA6IC9eIHswLDN9PStcXHMqJC8sIFxuICAgIHJlcGxhY2VtZW50OiAnPHNwYW4gY2xhc3M9XCJUTU1hcmsgVE1NYXJrX1RNU2V0ZXh0SDFNYXJrZXJcIj4kMDwvc3Bhbj4nXG4gIH0sXG4gIFRNU2V0ZXh0SDJNYXJrZXI6IHsgXG4gICAgcmVnZXhwOiAvXiB7MCwzfS0rXFxzKiQvLCBcbiAgICByZXBsYWNlbWVudDogJzxzcGFuIGNsYXNzPVwiVE1NYXJrIFRNTWFya19UTVNldGV4dEgxTWFya2VyXCI+JDA8L3NwYW4+J1xuICB9LFxuICBUTUhSOiB7IFxuICAgIHJlZ2V4cDogL14oIHswLDN9KFxcKlsgXFx0XSpcXCpbIFxcdF0qXFwqWyBcXHQqXSopfCgtWyBcXHRdKi1bIFxcdF0qLVsgXFx0LV0qKXwoX1sgXFx0XSpfWyBcXHRdKl9bIFxcdF9dKikpJC8sIFxuICAgIHJlcGxhY2VtZW50OiAnPHNwYW4gY2xhc3M9XCJUTU1hcmsgVE1NYXJrX1RNSFJcIj4kMDwvc3Bhbj4nXG4gIH0sXG4gIFRNVUw6IHsgXG4gICAgcmVnZXhwOiAvXiggezAsM31bKyotXSB7MSw0fSkoLiopJC8sIFxuICAgIHJlcGxhY2VtZW50OiAnPHNwYW4gY2xhc3M9XCJUTU1hcmsgVE1NYXJrX1RNVUxcIj4kMTwvc3Bhbj4kJDInXG4gIH0sXG4gIFRNT0w6IHsgXG4gICAgcmVnZXhwOiAvXiggezAsM31cXGR7MSw5fVsuKV0gezEsNH0pKC4qKSQvLCBcbiAgICByZXBsYWNlbWVudDogJzxzcGFuIGNsYXNzPVwiVE1NYXJrIFRNTWFya19UTU9MXCI+JDE8L3NwYW4+JCQyJ1xuICB9LFxuICAvLyBUT0RPOiBUaGlzIGlzIGN1cnJlbnRseSBwcmV2ZW50aW5nIHN1Ymxpc3RzIChhbmQgYW55IGNvbnRlbnQgd2l0aGluIGxpc3QgaXRlbXMsIHJlYWxseSkgZnJvbSB3b3JraW5nXG4gIFRNSW5kZW50ZWRDb2RlOiB7IFxuICAgIHJlZ2V4cDogL14oIHs0fXxcXHQpKC4qKSQvLCBcbiAgICByZXBsYWNlbWVudDogJzxzcGFuIGNsYXNzPVwiVE1NYXJrIFRNTWFya19UTUluZGVudGVkQ29kZVwiPiQxPC9zcGFuPiQyJ1xuICB9LFxuICBUTUxpbmtSZWZlcmVuY2VEZWZpbml0aW9uOiB7XG4gICAgLy8gVE9ETzogTGluayBkZXN0aW5hdGlvbiBjYW4ndCBpbmNsdWRlIHVuYmFsYW5jZWQgcGFyYW50aGVzZXMsIGJ1dCB3ZSBqdXN0IGlnbm9yZSB0aGF0IGhlcmUgXG4gICAgcmVnZXhwOiAvXiggezAsM31cXFtcXHMqKShbXlxcc1xcXV0oPzpbXlxcXV18XFxcXFxcXSkqPykoXFxzKlxcXTpcXHMqKSgoPzpbXlxcczw+XSspfCg/OjwoPzpbXjw+XFxcXF18XFxcXC4pKj4pKT8oXFxzKikoKD86XFwoKD86W14oKVxcXFxdfFxcXFwuKSpcXCkpfCg/OlwiKD86W15cIlxcXFxdfFxcXFwuKSpcIil8KD86Jyg/OlteJ1xcXFxdfFxcXFwuKSonKSk/KFxccyopJC8sIFxuICAgIHJlcGxhY2VtZW50OiAnPHNwYW4gY2xhc3M9XCJUTU1hcmsgVE1NYXJrX1RNTGlua1JlZmVyZW5jZURlZmluaXRpb25cIj4kMTwvc3Bhbj48c3BhbiBjbGFzcz1cIlRNTGlua0xhYmVsIFRNTGlua0xhYmVsX0RlZmluaXRpb25cIj4kMjwvc3Bhbj48c3BhbiBjbGFzcz1cIlRNTWFyayBUTU1hcmtfVE1MaW5rUmVmZXJlbmNlRGVmaW5pdGlvblwiPiQzPC9zcGFuPjxzcGFuIGNsYXNzPVwiVE1MaW5rRGVzdGluYXRpb25cIj4kNDwvc3Bhbj4kNTxzcGFuIGNsYXNzPVwiVE1MaW5rVGl0bGVcIj4kNjwvc3Bhbj4kNycsXG4gICAgbGFiZWxQbGFjZWhvbGRlcjogMiwgLy8gdGhpcyBkZWZpbmVzIHdoaWNoIHBsYWNlaG9sZGVyIGluIHRoZSBhYm92ZSByZWdleCBpcyB0aGUgbGluayBcImxhYmVsXCJcbiAgfSxcbn07XG5cbi8qKlxuICogSFRNTCBibG9ja3MgaGF2ZSBtdWx0aXBsZSBkaWZmZXJlbnQgY2xhc3NlcyBvZiBvcGVuZXIgYW5kIGNsb3Nlci4gVGhpcyBhcnJheSBkZWZpbmVzIGFsbCB0aGUgY2FzZXNcbiAqL1xuZXhwb3J0IGNvbnN0IGh0bWxCbG9ja0dyYW1tYXI6IEhUTUxCbG9ja1J1bGVbXSA9IFtcbiAgeyBzdGFydDogL14gezAsM308KD86c2NyaXB0fHByZXxzdHlsZSkoPzpcXHN8PnwkKS9pLCBlbmQ6IC8oPzo8XFwvc2NyaXB0Pnw8XFwvcHJlPnw8XFwvc3R5bGU+KS9pLCBwYXJhSW50ZXJydXB0OiB0cnVlIH0sXG4gIHsgc3RhcnQ6IC9eIHswLDN9PCEtLS8sIGVuZDogLy0tPi8sIHBhcmFJbnRlcnJ1cHQ6IHRydWUgfSxcbiAgeyBzdGFydDogL14gezAsM308XFw/LywgZW5kOiAvXFw/Pi8sIHBhcmFJbnRlcnJ1cHQ6IHRydWUgfSxcbiAgeyBzdGFydDogL14gezAsM308IVtBLVpdLywgZW5kOiAvPi8sIHBhcmFJbnRlcnJ1cHQgOiB0cnVlfSxcbiAgeyBzdGFydDogL14gezAsM308IVxcW0NEQVRBXFxbLywgZW5kOiAvXFxdXFxdPi8sIHBhcmFJbnRlcnJ1cHQgOiB0cnVlfSxcbiAgeyBzdGFydDogL14gezAsM30oPzo8fDxcXC8pKD86S25vd25UYWcpKD86XFxzfD58XFwvPnwkKS9pLCBlbmQ6IGZhbHNlLCBwYXJhSW50ZXJydXB0OiB0cnVlfSxcbiAgeyBzdGFydDogL14gezAsM30oPzpIVE1MT3BlblRhZ3xIVE1MQ2xvc2VUYWcpXFxzKiQvLCBlbmQ6IGZhbHNlLCBwYXJhSW50ZXJydXB0OiBmYWxzZX0sXG5dO1xuXG4vKipcbiAqIFN0cnVjdHVyZSBvZiB0aGUgb2JqZWN0OlxuICogVG9wIGxldmVsIGVudHJpZXMgYXJlIHJ1bGVzLCBlYWNoIGNvbnNpc3Rpbmcgb2YgYSByZWd1bGFyIGV4cHJlc3Npb25zIChpbiBzdHJpbmcgZm9ybWF0KSBhcyB3ZWxsIGFzIGEgcmVwbGFjZW1lbnQuXG4gKiBJbiB0aGUgcmVndWxhciBleHByZXNzaW9ucywgcmVwbGFjZW1lbnRzIGZyb20gdGhlIG9iamVjdCAncmVwbGFjZW1lbnRzJyB3aWxsIGJlIHByb2Nlc3NlZCBiZWZvcmUgY29tcGlsaW5nIGludG8gdGhlIHByb3BlcnR5IHJlZ2V4cC5cbiAqL1xuZXhwb3J0IGNvbnN0IGlubGluZUdyYW1tYXI6IFJlY29yZDxzdHJpbmcsIEdyYW1tYXJSdWxlPiA9IHtcbiAgZXNjYXBlIDoge1xuICAgIHJlZ2V4cDogL15cXFxcKEFTQ0lJUHVuY3R1YXRpb24pLyxcbiAgICByZXBsYWNlbWVudCA6ICc8c3BhbiBjbGFzcz1cIlRNTWFyayBUTU1hcmtfVE1Fc2NhcGVcIj5cXFxcPC9zcGFuPiQxJ1xuICB9LFxuICBjb2RlIDoge1xuICAgIHJlZ2V4cDogL14oYCspKCg/OlteYF0pfCg/OlteYF0uKj9bXmBdKSkoXFwxKS8sXG4gICAgcmVwbGFjZW1lbnQgOiAnPHNwYW4gY2xhc3M9XCJUTU1hcmsgVE1NYXJrX1RNQ29kZVwiPiQxPC9zcGFuPjxjb2RlIGNsYXNzPVwiVE1Db2RlXCI+JDI8L2NvZGU+PHNwYW4gY2xhc3M9XCJUTU1hcmsgVE1NYXJrX1RNQ29kZVwiPiQzPC9zcGFuPicgXG4gIH0sXG4gIGF1dG9saW5rIDoge1xuICAgIHJlZ2V4cDogL148KCg/OlNjaGVtZTpbXlxcczw+XSopfCg/OkVtYWlsKSk+LyxcbiAgICByZXBsYWNlbWVudDogJzxzcGFuIGNsYXNzPVwiVE1NYXJrIFRNTWFya19UTUF1dG9saW5rXCI+Jmx0Ozwvc3Bhbj48c3BhbiBjbGFzcz1cIlRNQXV0b2xpbmtcIj4kMTwvc3Bhbj48c3BhbiBjbGFzcz1cIlRNTWFyayBUTU1hcmtfVE1BdXRvbGlua1wiPiZndDs8L3NwYW4+J1xuICB9LFxuICBodG1sIDoge1xuICAgIHJlZ2V4cDogL14oKD86SFRNTE9wZW5UYWcpfCg/OkhUTUxDbG9zZVRhZyl8KD86SFRNTENvbW1lbnQpfCg/OkhUTUxQSSl8KD86SFRNTERlY2xhcmF0aW9uKXwoPzpIVE1MQ0RBVEEpKS8sXG4gICAgcmVwbGFjZW1lbnQ6ICc8c3BhbiBjbGFzcz1cIlRNSFRNTFwiPiQxPC9zcGFuPicsXG4gIH0sXG4gIGxpbmtPcGVuIDoge1xuICAgIHJlZ2V4cDogL15cXFsvLFxuICAgIHJlcGxhY2VtZW50OiAnJ1xuICB9LFxuICBpbWFnZU9wZW4gOiB7XG4gICAgcmVnZXhwOiAvXiFcXFsvLFxuICAgIHJlcGxhY2VtZW50IDogJydcbiAgfSxcbiAgbGlua0xhYmVsIDoge1xuICAgIHJlZ2V4cDogL14oXFxbXFxzKikoW15cXF1dKj8pKFxccypcXF0pLyxcbiAgICByZXBsYWNlbWVudDogJycsXG4gICAgbGFiZWxQbGFjZWhvbGRlcjogMlxuICB9LFxuICBkZWZhdWx0IDoge1xuICAgIHJlZ2V4cDogL14oLnwoPzpOb3RUcmlnZ2VyQ2hhcispKS8sXG4gICAgcmVwbGFjZW1lbnQ6ICckMSdcbiAgfVxufTtcblxuLy8gUHJvY2VzcyByZXBsYWNlbWVudHMgaW4gcmVnZXhwc1xuY29uc3QgcmVwbGFjZW1lbnRSZWdleHAgPSBuZXcgUmVnRXhwKE9iamVjdC5rZXlzKHJlcGxhY2VtZW50cykuam9pbignfCcpKTtcblxuLy8gSW5saW5lXG5jb25zdCBpbmxpbmVSdWxlcyA9IFsuLi5PYmplY3Qua2V5cyhpbmxpbmVHcmFtbWFyKV07XG5mb3IgKGxldCBydWxlIG9mIGlubGluZVJ1bGVzKSB7XG4gIGxldCByZSA9IGlubGluZUdyYW1tYXJbcnVsZV0ucmVnZXhwLnNvdXJjZTtcbiAgLy8gUmVwbGFjZSB3aGlsZSB0aGVyZSBpcyBzb21ldGhpbmcgdG8gcmVwbGFjZS4gVGhpcyBtZWFucyBpdCBhbHNvIHdvcmtzIG92ZXIgbXVsdGlwbGUgbGV2ZWxzIChyZXBsYWNlbWVudHMgY29udGFpbmluZyByZXBsYWNlbWVudHMpXG4gIHdoaWxlIChyZS5tYXRjaChyZXBsYWNlbWVudFJlZ2V4cCkpIHtcbiAgICByZSA9IHJlLnJlcGxhY2UocmVwbGFjZW1lbnRSZWdleHAsIChzdHJpbmcpID0+IHsgcmV0dXJuIHJlcGxhY2VtZW50c1tzdHJpbmddLnNvdXJjZTsgfSk7XG4gIH1cbiAgaW5saW5lR3JhbW1hcltydWxlXS5yZWdleHAgPSBuZXcgUmVnRXhwKHJlLCBpbmxpbmVHcmFtbWFyW3J1bGVdLnJlZ2V4cC5mbGFncyk7XG59XG5cbi8vIEhUTUwgQmxvY2sgKG9ubHkgb3BlbmluZyBydWxlIGlzIHByb2Nlc3NlZCBjdXJyZW50bHkpXG5mb3IgKGxldCBydWxlIG9mIGh0bWxCbG9ja0dyYW1tYXIpIHtcbiAgbGV0IHJlID0gcnVsZS5zdGFydC5zb3VyY2U7XG4gIC8vIFJlcGxhY2Ugd2hpbGUgdGhlcmUgaXMgc29tZXRoaW5nIHRvIHJlcGxhY2UuIFRoaXMgbWVhbnMgaXQgYWxzbyB3b3JrcyBvdmVyIG11bHRpcGxlIGxldmVscyAocmVwbGFjZW1lbnRzIGNvbnRhaW5pbmcgcmVwbGFjZW1lbnRzKVxuICB3aGlsZSAocmUubWF0Y2gocmVwbGFjZW1lbnRSZWdleHApKSB7XG4gICAgcmUgPSByZS5yZXBsYWNlKHJlcGxhY2VtZW50UmVnZXhwLCAoc3RyaW5nKSA9PiB7IHJldHVybiByZXBsYWNlbWVudHNbc3RyaW5nXS5zb3VyY2U7IH0pO1xuICB9XG4gIHJ1bGUuc3RhcnQgPSBuZXcgUmVnRXhwKHJlLCBydWxlLnN0YXJ0LmZsYWdzKTtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgbWVyZ2VkIGlubGluZSBncmFtbWFyIGJ5IGNvbWJpbmluZyB0aGUgZGVmYXVsdCBpbmxpbmUgZ3JhbW1hciB3aXRoIGN1c3RvbSBydWxlcy5cbiAqIEN1c3RvbSBydWxlcyBhcmUgcHJvY2Vzc2VkIGFuZCB0aGVpciByZWdleHAgcGF0dGVybnMgYXJlIGV4cGFuZGVkIHdpdGggcmVwbGFjZW1lbnRzLlxuICogQHBhcmFtIGN1c3RvbVJ1bGVzIC0gT2JqZWN0IGNvbnRhaW5pbmcgY3VzdG9tIGlubGluZSBncmFtbWFyIHJ1bGVzXG4gKiBAcmV0dXJucyBNZXJnZWQgaW5saW5lIGdyYW1tYXIgb2JqZWN0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVNZXJnZWRJbmxpbmVHcmFtbWFyKGN1c3RvbVJ1bGVzOiBSZWNvcmQ8c3RyaW5nLCBHcmFtbWFyUnVsZT4gPSB7fSk6IFJlY29yZDxzdHJpbmcsIEdyYW1tYXJSdWxlPiB7XG4gIGNvbnN0IG1lcmdlZCA9IHsgLi4uaW5saW5lR3JhbW1hciB9O1xuICBcbiAgLy8gUHJvY2VzcyBjdXN0b20gcnVsZXNcbiAgZm9yIChjb25zdCBbcnVsZU5hbWUsIHJ1bGVdIG9mIE9iamVjdC5lbnRyaWVzKGN1c3RvbVJ1bGVzKSkge1xuICAgIC8vIENvcHkgdGhlIHJ1bGUgdG8gYXZvaWQgbW9kaWZ5aW5nIHRoZSBvcmlnaW5hbFxuICAgIGNvbnN0IHByb2Nlc3NlZFJ1bGUgPSB7IC4uLnJ1bGUgfTtcbiAgICBcbiAgICAvLyBQcm9jZXNzIHJlcGxhY2VtZW50cyBpbiB0aGUgcmVnZXhwXG4gICAgbGV0IHJlZ2V4cFNvdXJjZSA9IHJ1bGUucmVnZXhwLnNvdXJjZTtcbiAgICBjb25zdCByZXBsYWNlbWVudFJlZ2V4cCA9IG5ldyBSZWdFeHAoT2JqZWN0LmtleXMocmVwbGFjZW1lbnRzKS5qb2luKCd8JykpO1xuICAgIFxuICAgIC8vIFJlcGxhY2Ugd2hpbGUgdGhlcmUgaXMgc29tZXRoaW5nIHRvIHJlcGxhY2VcbiAgICB3aGlsZSAocmVnZXhwU291cmNlLm1hdGNoKHJlcGxhY2VtZW50UmVnZXhwKSkge1xuICAgICAgcmVnZXhwU291cmNlID0gcmVnZXhwU291cmNlLnJlcGxhY2UocmVwbGFjZW1lbnRSZWdleHAsIChtYXRjaCkgPT4ge1xuICAgICAgICByZXR1cm4gcmVwbGFjZW1lbnRzW21hdGNoXS5zb3VyY2U7XG4gICAgICB9KTtcbiAgICB9XG4gICAgXG4gICAgcHJvY2Vzc2VkUnVsZS5yZWdleHAgPSBuZXcgUmVnRXhwKHJlZ2V4cFNvdXJjZSwgcnVsZS5yZWdleHAuZmxhZ3MpO1xuICAgIG1lcmdlZFtydWxlTmFtZV0gPSBwcm9jZXNzZWRSdWxlO1xuICB9XG4gIFxuICByZXR1cm4gbWVyZ2VkO1xufVxuXG4vKipcbiAqIEVzY2FwZXMgSFRNTCBzcGVjaWFsIGNoYXJhY3RlcnMgKDwsID4sIGFuZCAmKSBpbiB0aGUgc3RyaW5nLlxuICogQHBhcmFtIHtzdHJpbmd9IHN0cmluZyBUaGUgcmF3IHN0cmluZyB0byBiZSBlc2NhcGVkXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgc3RyaW5nLCByZWFkeSB0byBiZSB1c2VkIGluIEhUTUxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGh0bWxlc2NhcGUoc3RyaW5nOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gKHN0cmluZyA/IHN0cmluZyA6ICcnKVxuICAgIC5yZXBsYWNlKC8mL2csICcmYW1wOycpXG4gICAgLnJlcGxhY2UoLzwvZywgJyZsdDsnKVxuICAgIC5yZXBsYWNlKC8+L2csICcmZ3Q7Jyk7XG59XG5cbi8qKlxuICogQ29udGFpbnMgdGhlIGNvbW1hbmRzIHRoYXQgY2FuIGJlIHNlbnQgdG8gdGhlIGVkaXRvci4gQ29udGFpbnMgb2JqZWN0cyB3aXRoIGEgbmFtZSByZXByZXNlbnRpbmcgdGhlIG5hbWUgb2YgdGhlIGNvbW1hbmQuXG4gKiBFYWNoIG9mIHRoZSBvYmplY3RzIGNvbnRhaW5zIHRoZSBmb2xsb3dpbmcga2V5czpcbiAqIFxuICogICAtIHR5cGU6IENhbiBiZSBlaXRoZXIgaW5saW5lIChmb3IgaW5saW5lIGZvcm1hdHRpbmcpIG9yIGxpbmUgKGZvciBibG9jayAvIGxpbmUgZm9ybWF0dGluZykuXG4gKiAgIC0gY2xhc3NOYW1lOiBVc2VkIHRvIGRldGVybWluZSB3aGV0aGVyIHRoZSBjb21tYW5kIGlzIGFjdGl2ZSBhdCBhIGdpdmVuIHBvc2l0aW9uLiBcbiAqICAgICBGb3IgbGluZSBmb3JtYXR0aW5nLCB0aGlzIGxvb2tzIGF0IHRoZSBjbGFzcyBvZiB0aGUgbGluZSBlbGVtZW50LiBGb3IgaW5saW5lIGVsZW1lbnRzLCB0cmllcyB0byBmaW5kIGFuIGVuY2xvc2luZyBlbGVtZW50IHdpdGggdGhhdCBjbGFzcy5cbiAqICAgLSBzZXQgLyB1bnNldDogQ29udGFpbiBpbnN0cnVjdGlvbnMgaG93IHRvIHNldCBhbmQgdW5zZXQgdGhlIGNvbW1hbmQuIEZvciBsaW5lIHR5cGUgY29tbWFuZHMsIGJvdGggY29uc2lzdCBvZiBhIHBhdHRlcm4gYW5kIHJlcGxhY2VtZW50IHRoYXQgXG4gKiAgICAgd2lsbCBiZSBhcHBsaWVkIHRvIGVhY2ggbGluZSAodXNpbmcgU3RyaW5nLnJlcGxhY2UpLiBGb3IgaW5saW5lIHR5cGUgY29tbWFuZHMsIHRoZSBzZXQgb2JqZWN0IGNvbnRhaW5zIGEgcHJlIGFuZCBwb3N0IHN0cmluZyB3aGljaCB3aWxsXG4gKiAgICAgYmUgaW5zZXJ0ZWQgYmVmb3JlIGFuZCBhZnRlciB0aGUgc2VsZWN0aW9uLiBUaGUgdW5zZXQgb2JqZWN0IGNvbnRhaW5zIGEgcHJlUGF0dGVybiBhbmQgYSBwb3N0UGF0dGVybi4gQm90aCBzaG91bGQgYmUgcmVndWxhciBleHByZXNzaW9ucyBhbmQgXG4gKiAgICAgdGhleSB3aWxsIGJlIGFwcGxpZWQgdG8gdGhlIHBvcnRpb24gb2YgdGhlIGxpbmUgYmVmb3JlIGFuZCBhZnRlciB0aGUgc2VsZWN0aW9uICh1c2luZyBTdHJpbmcucmVwbGFjZSwgd2l0aCBhbiBlbXB0eSByZXBsYWNlbWVudCBzdHJpbmcpLlxuICovXG5leHBvcnQgY29uc3QgY29tbWFuZHM6IFJlY29yZDxzdHJpbmcsIENvbW1hbmQ+ID0ge1xuICAvLyBSZXBsYWNlbWVudHMgZm9yIHVuc2V0IGZvciBpbmxpbmUgY29tbWFuZHMgYXJlICcnIGJ5IGRlZmF1bHRcbiAgYm9sZDoge1xuICAgIHR5cGU6ICdpbmxpbmUnLCBcbiAgICBjbGFzc05hbWU6ICdUTVN0cm9uZycsIFxuICAgIHNldDoge3ByZTogJyoqJywgcG9zdDogJyoqJ30sIFxuICAgIHVuc2V0OiB7cHJlUGF0dGVybjogLyg/OlxcKlxcKnxfXykkLywgcG9zdFBhdHRlcm46IC9eKD86XFwqXFwqfF9fKS99XG4gIH0sIFxuICBpdGFsaWM6IHtcbiAgICB0eXBlOiAnaW5saW5lJywgXG4gICAgY2xhc3NOYW1lOiAnVE1FbScsIFxuICAgIHNldDoge3ByZTogJyonLCBwb3N0OiAnKid9LCBcbiAgICB1bnNldDoge3ByZVBhdHRlcm46IC8oPzpcXCp8XykkLywgcG9zdFBhdHRlcm46IC9eKD86XFwqfF8pL31cbiAgfSxcbiAgY29kZToge1xuICAgIHR5cGU6ICdpbmxpbmUnLCBcbiAgICBjbGFzc05hbWU6ICdUTUNvZGUnLCBcbiAgICBzZXQ6IHtwcmU6ICdgJywgcG9zdDogJ2AnfSwgXG4gICAgdW5zZXQ6IHtwcmVQYXR0ZXJuOiAvYCskLywgcG9zdFBhdHRlcm46IC9eYCsvfSAvLyBGSVhNRSB0aGlzIGRvZXNuJ3QgZW5zdXJlIGJhbGFuY2VkIGJhY2t0aWNrcyByaWdodCBub3dcbiAgfSwgXG4gIHN0cmlrZXRocm91Z2g6IHtcbiAgICB0eXBlOiAnaW5saW5lJywgXG4gICAgY2xhc3NOYW1lOiAnVE1TdHJpa2V0aHJvdWdoJywgXG4gICAgc2V0OiB7cHJlOiAnfn4nLCBwb3N0OiAnfn4nfSwgXG4gICAgdW5zZXQ6IHtwcmVQYXR0ZXJuOi9+fiQvLCBwb3N0UGF0dGVybjogL15+fi8gfVxuICB9LFxuICBoMToge1xuICAgIHR5cGU6ICdsaW5lJywgXG4gICAgY2xhc3NOYW1lOiAnVE1IMScsIFxuICAgIHNldDoge3BhdHRlcm46IC9eKCB7MCwzfSg/Oig/OiMrfFswLTldezEsOX1bKS5dfFs+XFwtKitdKVxccyspPykoLiopJC8sIHJlcGxhY2VtZW50OiAnIyAkMid9LCBcbiAgICB1bnNldDoge3BhdHRlcm46IC9eKCB7MCwzfSNcXHMrKSguKj8pKCg/OlxccysjK1xccyopPykkLywgcmVwbGFjZW1lbnQ6ICckMid9XG4gIH0sXG4gIGgyOiB7XG4gICAgdHlwZTogJ2xpbmUnLCBcbiAgICBjbGFzc05hbWU6ICdUTUgyJywgXG4gICAgc2V0OiB7cGF0dGVybjogL14oIHswLDN9KD86KD86Iyt8WzAtOV17MSw5fVspLl18Wz5cXC0qK10pXFxzKyk/KSguKikkLywgcmVwbGFjZW1lbnQ6ICcjIyAkMid9LCBcbiAgICB1bnNldDoge3BhdHRlcm46IC9eKCB7MCwzfSMjXFxzKykoLio/KSgoPzpcXHMrIytcXHMqKT8pJC8sIHJlcGxhY2VtZW50OiAnJDInfVxuICB9LFxuICBoMzoge1xuICAgIHR5cGU6ICdsaW5lJywgXG4gICAgY2xhc3NOYW1lOiAnVE1IMycsIFxuICAgIHNldDoge3BhdHRlcm46IC9eKCB7MCwzfSg/Oig/OiMrfFswLTldezEsOX1bKS5dfFs+XFwtKitdKVxccyspPykoLiopJC8sIHJlcGxhY2VtZW50OiAnIyMjICQyJ30sIFxuICAgIHVuc2V0OiB7cGF0dGVybjogL14oIHswLDN9IyMjXFxzKykoLio/KSgoPzpcXHMrIytcXHMqKT8pJC8sIHJlcGxhY2VtZW50OiAnJDInfVxuICB9LFxuICBoNDoge1xuICAgIHR5cGU6ICdsaW5lJywgXG4gICAgY2xhc3NOYW1lOiAnVE1INCcsIFxuICAgIHNldDoge3BhdHRlcm46IC9eKCB7MCwzfSg/Oig/OiMrfFswLTldezEsOX1bKS5dfFs+XFwtKitdKVxccyspPykoLiopJC8sIHJlcGxhY2VtZW50OiAnIyMjIyAkMid9LCBcbiAgICB1bnNldDoge3BhdHRlcm46IC9eKCB7MCwzfSMjIyNcXHMrKSguKj8pKCg/OlxccysjK1xccyopPykkLywgcmVwbGFjZW1lbnQ6ICckMid9XG4gIH0sXG4gIGg1OiB7XG4gICAgdHlwZTogJ2xpbmUnLCBcbiAgICBjbGFzc05hbWU6ICdUTUg1JywgXG4gICAgc2V0OiB7cGF0dGVybjogL14oIHswLDN9KD86KD86Iyt8WzAtOV17MSw5fVspLl18Wz5cXC0qK10pXFxzKyk/KSguKikkLywgcmVwbGFjZW1lbnQ6ICcjIyMjIyAkMid9LCBcbiAgICB1bnNldDoge3BhdHRlcm46IC9eKCB7MCwzfSMjIyMjXFxzKykoLio/KSgoPzpcXHMrIytcXHMqKT8pJC8sIHJlcGxhY2VtZW50OiAnJDInfVxuICB9LFxuICBoNjoge1xuICAgIHR5cGU6ICdsaW5lJywgXG4gICAgY2xhc3NOYW1lOiAnVE1INicsIFxuICAgIHNldDoge3BhdHRlcm46IC9eKCB7MCwzfSg/Oig/OiMrfFswLTldezEsOX1bKS5dfFs+XFwtKitdKVxccyspPykoLiopJC8sIHJlcGxhY2VtZW50OiAnIyMjIyMjICQyJ30sIFxuICAgIHVuc2V0OiB7cGF0dGVybjogL14oIHswLDN9IyMjIyMjXFxzKykoLio/KSgoPzpcXHMrIytcXHMqKT8pJC8sIHJlcGxhY2VtZW50OiAnJDInfVxuICB9LFxuICB1bDoge1xuICAgIHR5cGU6ICdsaW5lJywgXG4gICAgY2xhc3NOYW1lOiAnVE1VTCcsIFxuICAgIHNldDoge3BhdHRlcm46IC9eKCB7MCwzfSg/Oig/OiMrfFswLTldezEsOX1bKS5dfFs+XFwtKitdKVxccyspPykoLiopJC8sIHJlcGxhY2VtZW50OiAnLSAkMid9LCBcbiAgICB1bnNldDoge3BhdHRlcm46IC9eKCB7MCwzfVsrKi1dIHsxLDR9KSguKikkLywgcmVwbGFjZW1lbnQ6ICckMid9XG4gIH0sXG4gIG9sOiB7XG4gICAgdHlwZTogJ2xpbmUnLCBcbiAgICBjbGFzc05hbWU6ICdUTU9MJywgXG4gICAgc2V0OiB7cGF0dGVybjogL14oIHswLDN9KD86KD86Iyt8WzAtOV17MSw5fVspLl18Wz5cXC0qK10pXFxzKyk/KSguKikkLywgcmVwbGFjZW1lbnQ6ICckIy4gJDInfSwgXG4gICAgdW5zZXQ6IHtwYXR0ZXJuOiAvXiggezAsM31cXGR7MSw5fVsuKV0gezEsNH0pKC4qKSQvLCByZXBsYWNlbWVudDogJyQyJ31cbiAgfSwgXG4gIGJsb2NrcXVvdGU6IHtcbiAgICB0eXBlOiAnbGluZScsIFxuICAgIGNsYXNzTmFtZTogJ1RNQmxvY2txdW90ZScsIFxuICAgIHNldDoge3BhdHRlcm46IC9eKCB7MCwzfSg/Oig/OiMrfFswLTldezEsOX1bKS5dfFs+XFwtKitdKVxccyspPykoLiopJC8sIHJlcGxhY2VtZW50OiAnPiAkMid9LCBcbiAgICB1bnNldDoge3BhdHRlcm46IC9eKCB7MCwzfT5bIF0/KSguKikkLywgcmVwbGFjZW1lbnQ6ICckMid9XG4gIH0sXG59OyIsImltcG9ydCB7XG4gIGlubGluZUdyYW1tYXIsXG4gIGxpbmVHcmFtbWFyLFxuICBwdW5jdHVhdGlvbkxlYWRpbmcsXG4gIHB1bmN0dWF0aW9uVHJhaWxpbmcsXG4gIGh0bWxlc2NhcGUsXG4gIGh0bWxCbG9ja0dyYW1tYXIsXG4gIGNvbW1hbmRzLFxuICBIVE1MQmxvY2tSdWxlLFxuICBDb21tYW5kLFxuICBHcmFtbWFyUnVsZSxcbiAgY3JlYXRlTWVyZ2VkSW5saW5lR3JhbW1hcixcbn0gZnJvbSBcIi4vZ3JhbW1hclwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIEVkaXRvclByb3BzIHtcbiAgZWxlbWVudD86IHN0cmluZyB8IEhUTUxFbGVtZW50O1xuICBlZGl0b3I/OiBzdHJpbmcgfCBIVE1MRWxlbWVudDtcbiAgY29udGVudD86IHN0cmluZztcbiAgdGV4dGFyZWE/OiBzdHJpbmcgfCBIVE1MVGV4dEFyZWFFbGVtZW50O1xuICBjdXN0b21JbmxpbmVHcmFtbWFyPzogUmVjb3JkPHN0cmluZywgR3JhbW1hclJ1bGU+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFBvc2l0aW9uIHtcbiAgcm93OiBudW1iZXI7XG4gIGNvbDogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEhpc3RvcnlTdGF0ZSB7XG4gIGNvbnRlbnQ6IHN0cmluZztcbiAgc2VsZWN0aW9uOiBQb3NpdGlvbiB8IG51bGw7XG4gIGFuY2hvcjogUG9zaXRpb24gfCBudWxsO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENoYW5nZUV2ZW50IHtcbiAgY29udGVudDogc3RyaW5nO1xuICBsaW5lc0RpcnR5OiBib29sZWFuW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2VsZWN0aW9uRXZlbnQge1xuICBmb2N1czogUG9zaXRpb247XG4gIGFuY2hvcjogUG9zaXRpb247XG4gIGNvbW1hbmRTdGF0ZTogUmVjb3JkPHN0cmluZywgYm9vbGVhbiB8IG51bGw+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIERyb3BFdmVudCB7XG4gIGRhdGFUcmFuc2ZlcjogRGF0YVRyYW5zZmVyO1xufVxuXG50eXBlIEV2ZW50VHlwZSA9ICdjaGFuZ2UnIHwgJ3NlbGVjdGlvbicgfCAnZHJvcCc7XG50eXBlIEV2ZW50SGFuZGxlcjxUPiA9IChldmVudDogVCkgPT4gdm9pZDtcblxuZXhwb3J0IGNsYXNzIEVkaXRvciB7XG4gIHB1YmxpYyBlOiBIVE1MRGl2RWxlbWVudCB8IG51bGwgPSBudWxsO1xuICBwdWJsaWMgdGV4dGFyZWE6IEhUTUxUZXh0QXJlYUVsZW1lbnQgfCBudWxsID0gbnVsbDtcbiAgcHVibGljIGxpbmVzOiBzdHJpbmdbXSA9IFtdO1xuICBwdWJsaWMgbGluZUVsZW1lbnRzOiBOb2RlTGlzdE9mPENoaWxkTm9kZT4gfCBIVE1MQ29sbGVjdGlvbiB8IENoaWxkTm9kZVtdID0gW107XG4gIHB1YmxpYyBsaW5lVHlwZXM6IHN0cmluZ1tdID0gW107XG4gIHB1YmxpYyBsaW5lQ2FwdHVyZXM6IFJlZ0V4cEV4ZWNBcnJheVtdID0gW107XG4gIHB1YmxpYyBsaW5lUmVwbGFjZW1lbnRzOiBzdHJpbmdbXSA9IFtdO1xuICBwdWJsaWMgbGlua0xhYmVsczogc3RyaW5nW10gPSBbXTtcbiAgcHVibGljIGxpbmVEaXJ0eTogYm9vbGVhbltdID0gW107XG4gIHB1YmxpYyBsYXN0Q29tbWFuZFN0YXRlOiBSZWNvcmQ8c3RyaW5nLCBib29sZWFuIHwgbnVsbD4gfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBjdXN0b21JbmxpbmVHcmFtbWFyOiBSZWNvcmQ8c3RyaW5nLCBHcmFtbWFyUnVsZT4gPSB7fTtcbiAgcHJpdmF0ZSBtZXJnZWRJbmxpbmVHcmFtbWFyOiBSZWNvcmQ8c3RyaW5nLCBHcmFtbWFyUnVsZT4gPSBpbmxpbmVHcmFtbWFyO1xuXG4gIHB1YmxpYyBsaXN0ZW5lcnM6IHtcbiAgICBjaGFuZ2U6IEV2ZW50SGFuZGxlcjxDaGFuZ2VFdmVudD5bXTtcbiAgICBzZWxlY3Rpb246IEV2ZW50SGFuZGxlcjxTZWxlY3Rpb25FdmVudD5bXTtcbiAgICBkcm9wOiBFdmVudEhhbmRsZXI8RHJvcEV2ZW50PltdO1xuICB9ID0ge1xuICAgIGNoYW5nZTogW10sXG4gICAgc2VsZWN0aW9uOiBbXSxcbiAgICBkcm9wOiBbXSxcbiAgfTtcblxuICBwcml2YXRlIHVuZG9TdGFjazogSGlzdG9yeVN0YXRlW10gPSBbXTtcbiAgcHJpdmF0ZSByZWRvU3RhY2s6IEhpc3RvcnlTdGF0ZVtdID0gW107XG4gIHByaXZhdGUgaXNSZXN0b3JpbmdIaXN0b3J5OiBib29sZWFuID0gZmFsc2U7XG4gIHByaXZhdGUgbWF4SGlzdG9yeTogbnVtYmVyID0gMTAwO1xuXG4gIGNvbnN0cnVjdG9yKHByb3BzOiBFZGl0b3JQcm9wcyA9IHt9KSB7XG4gICAgdGhpcy5lID0gbnVsbDtcbiAgICB0aGlzLnRleHRhcmVhID0gbnVsbDtcbiAgICB0aGlzLmxpbmVzID0gW107XG4gICAgdGhpcy5saW5lRWxlbWVudHMgPSBbXSBhcyBDaGlsZE5vZGVbXTtcbiAgICB0aGlzLmxpbmVUeXBlcyA9IFtdO1xuICAgIHRoaXMubGluZUNhcHR1cmVzID0gW107XG4gICAgdGhpcy5saW5lUmVwbGFjZW1lbnRzID0gW107XG4gICAgdGhpcy5saW5rTGFiZWxzID0gW107XG4gICAgdGhpcy5saW5lRGlydHkgPSBbXTtcbiAgICB0aGlzLmxhc3RDb21tYW5kU3RhdGUgPSBudWxsO1xuICAgIHRoaXMuY3VzdG9tSW5saW5lR3JhbW1hciA9IHByb3BzLmN1c3RvbUlubGluZUdyYW1tYXIgfHwge307XG4gICAgdGhpcy5tZXJnZWRJbmxpbmVHcmFtbWFyID0gY3JlYXRlTWVyZ2VkSW5saW5lR3JhbW1hcih0aGlzLmN1c3RvbUlubGluZUdyYW1tYXIpO1xuXG4gICAgdGhpcy5saXN0ZW5lcnMgPSB7XG4gICAgICBjaGFuZ2U6IFtdLFxuICAgICAgc2VsZWN0aW9uOiBbXSxcbiAgICAgIGRyb3A6IFtdLFxuICAgIH07XG5cbiAgICBsZXQgZWxlbWVudDogSFRNTEVsZW1lbnQgfCBudWxsID0gbnVsbDtcbiAgICBpZiAodHlwZW9mIHByb3BzLmVsZW1lbnQgPT09ICdzdHJpbmcnKSB7XG4gICAgICBlbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQocHJvcHMuZWxlbWVudCk7XG4gICAgfSBlbHNlIGlmIChwcm9wcy5lbGVtZW50KSB7XG4gICAgICBlbGVtZW50ID0gcHJvcHMuZWxlbWVudDtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIHByb3BzLnRleHRhcmVhID09PSAnc3RyaW5nJykge1xuICAgICAgdGhpcy50ZXh0YXJlYSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHByb3BzLnRleHRhcmVhKSBhcyBIVE1MVGV4dEFyZWFFbGVtZW50O1xuICAgIH0gZWxzZSBpZiAocHJvcHMudGV4dGFyZWEpIHtcbiAgICAgIHRoaXMudGV4dGFyZWEgPSBwcm9wcy50ZXh0YXJlYTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy50ZXh0YXJlYSkge1xuICAgICAgaWYgKCFlbGVtZW50KSBlbGVtZW50ID0gdGhpcy50ZXh0YXJlYTtcbiAgICB9XG5cbiAgICBpZiAoIWVsZW1lbnQpIHtcbiAgICAgIGVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZShcImJvZHlcIilbMF07XG4gICAgfVxuICAgIGlmIChlbGVtZW50ICYmIGVsZW1lbnQudGFnTmFtZSA9PT0gXCJURVhUQVJFQVwiKSB7XG4gICAgICB0aGlzLnRleHRhcmVhID0gZWxlbWVudCBhcyBIVE1MVGV4dEFyZWFFbGVtZW50O1xuICAgICAgZWxlbWVudCA9IHRoaXMudGV4dGFyZWEucGFyZW50Tm9kZSBhcyBIVE1MRWxlbWVudDtcbiAgICB9XG5cbiAgICBpZiAodGhpcy50ZXh0YXJlYSkge1xuICAgICAgdGhpcy50ZXh0YXJlYS5zdHlsZS5kaXNwbGF5ID0gXCJub25lXCI7XG4gICAgfVxuXG4gICAgdGhpcy51bmRvU3RhY2sgPSBbXTtcbiAgICB0aGlzLnJlZG9TdGFjayA9IFtdO1xuICAgIHRoaXMuaXNSZXN0b3JpbmdIaXN0b3J5ID0gZmFsc2U7XG4gICAgdGhpcy5tYXhIaXN0b3J5ID0gMTAwO1xuXG4gICAgdGhpcy5jcmVhdGVFZGl0b3JFbGVtZW50KGVsZW1lbnQsIHByb3BzKTtcbiAgICB0aGlzLnNldENvbnRlbnQoXG4gICAgICB0eXBlb2YgcHJvcHMuY29udGVudCA9PT0gXCJzdHJpbmdcIlxuICAgICAgICA/IHByb3BzLmNvbnRlbnRcbiAgICAgICAgOiB0aGlzLnRleHRhcmVhXG4gICAgICAgID8gdGhpcy50ZXh0YXJlYS52YWx1ZVxuICAgICAgICA6IFwiIyBIZWxsbyBUaW55TURFIVxcbkVkaXQgKipoZXJlKipcIlxuICAgICk7XG4gICAgXG4gICAgdGhpcy5lIS5hZGRFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLCAoZSkgPT4gdGhpcy5oYW5kbGVVbmRvUmVkb0tleShlKSk7XG4gIH1cblxuICBnZXQgY2FuVW5kbygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy51bmRvU3RhY2subGVuZ3RoID49IDI7XG4gIH1cblxuICBnZXQgY2FuUmVkbygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5yZWRvU3RhY2subGVuZ3RoID4gMDtcbiAgfVxuXG4gIHByaXZhdGUgcHVzaEhpc3RvcnkoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaXNSZXN0b3JpbmdIaXN0b3J5KSByZXR1cm47XG4gICAgdGhpcy5wdXNoQ3VycmVudFN0YXRlKCk7XG4gICAgdGhpcy5yZWRvU3RhY2sgPSBbXTtcbiAgfVxuXG4gIHByaXZhdGUgcHVzaEN1cnJlbnRTdGF0ZSgpOiB2b2lkIHtcbiAgICB0aGlzLnVuZG9TdGFjay5wdXNoKHtcbiAgICAgIGNvbnRlbnQ6IHRoaXMuZ2V0Q29udGVudCgpLFxuICAgICAgc2VsZWN0aW9uOiB0aGlzLmdldFNlbGVjdGlvbigpLFxuICAgICAgYW5jaG9yOiB0aGlzLmdldFNlbGVjdGlvbih0cnVlKSxcbiAgICB9KTtcbiAgICBpZiAodGhpcy51bmRvU3RhY2subGVuZ3RoID4gdGhpcy5tYXhIaXN0b3J5KSB0aGlzLnVuZG9TdGFjay5zaGlmdCgpO1xuICB9XG5cbiAgcHVibGljIHVuZG8oKTogdm9pZCB7XG4gICAgaWYgKHRoaXMudW5kb1N0YWNrLmxlbmd0aCA8IDIpIHJldHVybjtcbiAgICB0aGlzLmlzUmVzdG9yaW5nSGlzdG9yeSA9IHRydWU7XG4gICAgdGhpcy5wdXNoQ3VycmVudFN0YXRlKCk7XG4gICAgY29uc3QgY3VycmVudCA9IHRoaXMudW5kb1N0YWNrLnBvcCgpITtcbiAgICB0aGlzLnJlZG9TdGFjay5wdXNoKGN1cnJlbnQpO1xuICAgIGNvbnN0IHByZXYgPSB0aGlzLnVuZG9TdGFja1t0aGlzLnVuZG9TdGFjay5sZW5ndGggLSAxXTtcbiAgICB0aGlzLnNldENvbnRlbnQocHJldi5jb250ZW50KTtcbiAgICBpZiAocHJldi5zZWxlY3Rpb24pIHRoaXMuc2V0U2VsZWN0aW9uKHByZXYuc2VsZWN0aW9uLCBwcmV2LmFuY2hvcik7XG4gICAgdGhpcy51bmRvU3RhY2sucG9wKCk7XG4gICAgdGhpcy5pc1Jlc3RvcmluZ0hpc3RvcnkgPSBmYWxzZTtcbiAgfVxuXG4gIHB1YmxpYyByZWRvKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5yZWRvU3RhY2subGVuZ3RoKSByZXR1cm47XG4gICAgdGhpcy5pc1Jlc3RvcmluZ0hpc3RvcnkgPSB0cnVlO1xuICAgIHRoaXMucHVzaEN1cnJlbnRTdGF0ZSgpO1xuICAgIGNvbnN0IG5leHQgPSB0aGlzLnJlZG9TdGFjay5wb3AoKSE7XG4gICAgdGhpcy5zZXRDb250ZW50KG5leHQuY29udGVudCk7XG4gICAgaWYgKG5leHQuc2VsZWN0aW9uKSB0aGlzLnNldFNlbGVjdGlvbihuZXh0LnNlbGVjdGlvbiwgbmV4dC5hbmNob3IpO1xuICAgIHRoaXMuaXNSZXN0b3JpbmdIaXN0b3J5ID0gZmFsc2U7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZVVuZG9SZWRvS2V5KGU6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICBjb25zdCBpc01hYyA9IC9NYWN8aVBvZHxpUGhvbmV8aVBhZC8udGVzdChuYXZpZ2F0b3IucGxhdGZvcm0pO1xuICAgIGNvbnN0IGN0cmwgPSBpc01hYyA/IGUubWV0YUtleSA6IGUuY3RybEtleTtcbiAgICBpZiAoY3RybCAmJiAhZS5hbHRLZXkpIHtcbiAgICAgIGlmIChlLmtleSA9PT0gXCJ6XCIgfHwgZS5rZXkgPT09IFwiWlwiKSB7XG4gICAgICAgIGlmIChlLnNoaWZ0S2V5KSB7XG4gICAgICAgICAgdGhpcy5yZWRvKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy51bmRvKCk7XG4gICAgICAgIH1cbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgfSBlbHNlIGlmIChlLmtleSA9PT0gXCJ5XCIgfHwgZS5rZXkgPT09IFwiWVwiKSB7XG4gICAgICAgIHRoaXMucmVkbygpO1xuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVFZGl0b3JFbGVtZW50KGVsZW1lbnQ6IEhUTUxFbGVtZW50LCBwcm9wczogRWRpdG9yUHJvcHMpOiB2b2lkIHtcbiAgICBpZiAocHJvcHMgJiYgcHJvcHMuZWRpdG9yICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmICh0eXBlb2YgcHJvcHMuZWRpdG9yID09PSAnc3RyaW5nJykge1xuICAgICAgICB0aGlzLmUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChwcm9wcy5lZGl0b3IpIGFzIEhUTUxEaXZFbGVtZW50O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5lID0gcHJvcHMuZWRpdG9yIGFzIEhUTUxEaXZFbGVtZW50O1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgIH1cblxuICAgIHRoaXMuZS5jbGFzc0xpc3QuYWRkKFwiVGlueU1ERVwiKTtcbiAgICB0aGlzLmUuY29udGVudEVkaXRhYmxlID0gXCJ0cnVlXCI7XG4gICAgdGhpcy5lLnN0eWxlLndoaXRlU3BhY2UgPSBcInByZS13cmFwXCI7XG4gICAgKHRoaXMuZS5zdHlsZSBhcyBhbnkpLndlYmtpdFVzZXJNb2RpZnkgPSBcInJlYWQtd3JpdGUtcGxhaW50ZXh0LW9ubHlcIjtcblxuICAgIGlmIChwcm9wcy5lZGl0b3IgPT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKFxuICAgICAgICB0aGlzLnRleHRhcmVhICYmXG4gICAgICAgIHRoaXMudGV4dGFyZWEucGFyZW50Tm9kZSA9PT0gZWxlbWVudCAmJlxuICAgICAgICB0aGlzLnRleHRhcmVhLm5leHRTaWJsaW5nXG4gICAgICApIHtcbiAgICAgICAgZWxlbWVudC5pbnNlcnRCZWZvcmUodGhpcy5lLCB0aGlzLnRleHRhcmVhLm5leHRTaWJsaW5nKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGVsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy5lKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmUuYWRkRXZlbnRMaXN0ZW5lcihcImlucHV0XCIsIChlKSA9PiB0aGlzLmhhbmRsZUlucHV0RXZlbnQoZSkpO1xuICAgIHRoaXMuZS5hZGRFdmVudExpc3RlbmVyKFwiY29tcG9zaXRpb25lbmRcIiwgKGUpID0+IHRoaXMuaGFuZGxlSW5wdXRFdmVudChlKSk7XG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcInNlbGVjdGlvbmNoYW5nZVwiLCAoZSkgPT5cbiAgICAgIHRoaXMuaGFuZGxlU2VsZWN0aW9uQ2hhbmdlRXZlbnQoZSlcbiAgICApO1xuICAgIHRoaXMuZS5hZGRFdmVudExpc3RlbmVyKFwicGFzdGVcIiwgKGUpID0+IHRoaXMuaGFuZGxlUGFzdGUoZSkpO1xuICAgIHRoaXMuZS5hZGRFdmVudExpc3RlbmVyKFwiZHJvcFwiLCAoZSkgPT4gdGhpcy5oYW5kbGVEcm9wKGUpKTtcbiAgICB0aGlzLmxpbmVFbGVtZW50cyA9IHRoaXMuZS5jaGlsZE5vZGVzO1xuICB9XG5cbiAgcHVibGljIHNldENvbnRlbnQoY29udGVudDogc3RyaW5nKTogdm9pZCB7XG4gICAgd2hpbGUgKHRoaXMuZSEuZmlyc3RDaGlsZCkge1xuICAgICAgdGhpcy5lIS5yZW1vdmVDaGlsZCh0aGlzLmUhLmZpcnN0Q2hpbGQpO1xuICAgIH1cbiAgICB0aGlzLmxpbmVzID0gY29udGVudC5zcGxpdCgvKD86XFxyXFxufFxccnxcXG4pLyk7XG4gICAgdGhpcy5saW5lRGlydHkgPSBbXTtcbiAgICBmb3IgKGxldCBsaW5lTnVtID0gMDsgbGluZU51bSA8IHRoaXMubGluZXMubGVuZ3RoOyBsaW5lTnVtKyspIHtcbiAgICAgIGxldCBsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgICB0aGlzLmUhLmFwcGVuZENoaWxkKGxlKTtcbiAgICAgIHRoaXMubGluZURpcnR5LnB1c2godHJ1ZSk7XG4gICAgfVxuICAgIHRoaXMubGluZVR5cGVzID0gbmV3IEFycmF5KHRoaXMubGluZXMubGVuZ3RoKTtcbiAgICB0aGlzLnVwZGF0ZUZvcm1hdHRpbmcoKTtcbiAgICB0aGlzLmZpcmVDaGFuZ2UoKTtcbiAgICBpZiAoIXRoaXMuaXNSZXN0b3JpbmdIaXN0b3J5KSB0aGlzLnB1c2hIaXN0b3J5KCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0Q29udGVudCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmxpbmVzLmpvaW4oXCJcXG5cIik7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZUZvcm1hdHRpbmcoKTogdm9pZCB7XG4gICAgdGhpcy51cGRhdGVMaW5lVHlwZXMoKTtcbiAgICB0aGlzLnVwZGF0ZUxpbmtMYWJlbHMoKTtcbiAgICB0aGlzLmFwcGx5TGluZVR5cGVzKCk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZUxpbmtMYWJlbHMoKTogdm9pZCB7XG4gICAgdGhpcy5saW5rTGFiZWxzID0gW107XG4gICAgZm9yIChsZXQgbCA9IDA7IGwgPCB0aGlzLmxpbmVzLmxlbmd0aDsgbCsrKSB7XG4gICAgICBpZiAodGhpcy5saW5lVHlwZXNbbF0gPT09IFwiVE1MaW5rUmVmZXJlbmNlRGVmaW5pdGlvblwiKSB7XG4gICAgICAgIHRoaXMubGlua0xhYmVscy5wdXNoKFxuICAgICAgICAgIHRoaXMubGluZUNhcHR1cmVzW2xdW1xuICAgICAgICAgICAgbGluZUdyYW1tYXIuVE1MaW5rUmVmZXJlbmNlRGVmaW5pdGlvbi5sYWJlbFBsYWNlaG9sZGVyIVxuICAgICAgICAgIF1cbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHJlcGxhY2UocmVwbGFjZW1lbnQ6IHN0cmluZywgY2FwdHVyZTogUmVnRXhwRXhlY0FycmF5KTogc3RyaW5nIHtcbiAgICByZXR1cm4gcmVwbGFjZW1lbnQucmVwbGFjZSgvKFxcJHsxLDJ9KShbMC05XSkvZywgKHN0ciwgcDEsIHAyKSA9PiB7XG4gICAgICBpZiAocDEgPT09IFwiJFwiKSByZXR1cm4gaHRtbGVzY2FwZShjYXB0dXJlW3BhcnNlSW50KHAyKV0pO1xuICAgICAgZWxzZVxuICAgICAgICByZXR1cm4gYDxzcGFuIGNsYXNzPVwiVE1JbmxpbmVGb3JtYXR0ZWRcIj4ke3RoaXMucHJvY2Vzc0lubGluZVN0eWxlcyhcbiAgICAgICAgICBjYXB0dXJlW3BhcnNlSW50KHAyKV1cbiAgICAgICAgKX08L3NwYW4+YDtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgYXBwbHlMaW5lVHlwZXMoKTogdm9pZCB7XG4gICAgZm9yIChsZXQgbGluZU51bSA9IDA7IGxpbmVOdW0gPCB0aGlzLmxpbmVzLmxlbmd0aDsgbGluZU51bSsrKSB7XG4gICAgICBpZiAodGhpcy5saW5lRGlydHlbbGluZU51bV0pIHtcbiAgICAgICAgbGV0IGNvbnRlbnRIVE1MID0gdGhpcy5yZXBsYWNlKFxuICAgICAgICAgIHRoaXMubGluZVJlcGxhY2VtZW50c1tsaW5lTnVtXSxcbiAgICAgICAgICB0aGlzLmxpbmVDYXB0dXJlc1tsaW5lTnVtXVxuICAgICAgICApO1xuICAgICAgICAodGhpcy5saW5lRWxlbWVudHNbbGluZU51bV0gYXMgSFRNTEVsZW1lbnQpLmNsYXNzTmFtZSA9IHRoaXMubGluZVR5cGVzW2xpbmVOdW1dO1xuICAgICAgICAodGhpcy5saW5lRWxlbWVudHNbbGluZU51bV0gYXMgSFRNTEVsZW1lbnQpLnJlbW92ZUF0dHJpYnV0ZShcInN0eWxlXCIpO1xuICAgICAgICAodGhpcy5saW5lRWxlbWVudHNbbGluZU51bV0gYXMgSFRNTEVsZW1lbnQpLmlubmVySFRNTCA9XG4gICAgICAgICAgY29udGVudEhUTUwgPT09IFwiXCIgPyBcIjxiciAvPlwiIDogY29udGVudEhUTUw7XG4gICAgICB9XG4gICAgICAodGhpcy5saW5lRWxlbWVudHNbbGluZU51bV0gYXMgSFRNTEVsZW1lbnQpLmRhdGFzZXQubGluZU51bSA9IGxpbmVOdW0udG9TdHJpbmcoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZUxpbmVUeXBlcygpOiB2b2lkIHtcbiAgICBsZXQgY29kZUJsb2NrVHlwZTogc3RyaW5nIHwgZmFsc2UgPSBmYWxzZTtcbiAgICBsZXQgY29kZUJsb2NrU2VxTGVuZ3RoID0gMDtcbiAgICBsZXQgaHRtbEJsb2NrOiBIVE1MQmxvY2tSdWxlIHwgZmFsc2UgPSBmYWxzZTtcblxuICAgIGZvciAobGV0IGxpbmVOdW0gPSAwOyBsaW5lTnVtIDwgdGhpcy5saW5lcy5sZW5ndGg7IGxpbmVOdW0rKykge1xuICAgICAgbGV0IGxpbmVUeXBlID0gXCJUTVBhcmFcIjtcbiAgICAgIGxldCBsaW5lQ2FwdHVyZTogUmVnRXhwRXhlY0FycmF5ID0gW3RoaXMubGluZXNbbGluZU51bV1dIGFzIFJlZ0V4cEV4ZWNBcnJheTtcbiAgICAgIGxldCBsaW5lUmVwbGFjZW1lbnQgPSBcIiQkMFwiO1xuXG4gICAgICAvLyBDaGVjayBvbmdvaW5nIGNvZGUgYmxvY2tzXG4gICAgICBpZiAoY29kZUJsb2NrVHlwZSA9PT0gXCJUTUNvZGVGZW5jZUJhY2t0aWNrT3BlblwiKSB7XG4gICAgICAgIGxldCBjYXB0dXJlID0gbGluZUdyYW1tYXIuVE1Db2RlRmVuY2VCYWNrdGlja0Nsb3NlLnJlZ2V4cC5leGVjKHRoaXMubGluZXNbbGluZU51bV0pO1xuICAgICAgICBpZiAoY2FwdHVyZSAmJiBjYXB0dXJlLmdyb3VwcyFbXCJzZXFcIl0ubGVuZ3RoID49IGNvZGVCbG9ja1NlcUxlbmd0aCkge1xuICAgICAgICAgIGxpbmVUeXBlID0gXCJUTUNvZGVGZW5jZUJhY2t0aWNrQ2xvc2VcIjtcbiAgICAgICAgICBsaW5lUmVwbGFjZW1lbnQgPSBsaW5lR3JhbW1hci5UTUNvZGVGZW5jZUJhY2t0aWNrQ2xvc2UucmVwbGFjZW1lbnQ7XG4gICAgICAgICAgbGluZUNhcHR1cmUgPSBjYXB0dXJlO1xuICAgICAgICAgIGNvZGVCbG9ja1R5cGUgPSBmYWxzZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBsaW5lVHlwZSA9IFwiVE1GZW5jZWRDb2RlQmFja3RpY2tcIjtcbiAgICAgICAgICBsaW5lUmVwbGFjZW1lbnQgPSAnPHNwYW4gY2xhc3M9XCJUTUZlbmNlZENvZGVcIj4kMDxiciAvPjwvc3Bhbj4nO1xuICAgICAgICAgIGxpbmVDYXB0dXJlID0gW3RoaXMubGluZXNbbGluZU51bV1dIGFzIFJlZ0V4cEV4ZWNBcnJheTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChjb2RlQmxvY2tUeXBlID09PSBcIlRNQ29kZUZlbmNlVGlsZGVPcGVuXCIpIHtcbiAgICAgICAgbGV0IGNhcHR1cmUgPSBsaW5lR3JhbW1hci5UTUNvZGVGZW5jZVRpbGRlQ2xvc2UucmVnZXhwLmV4ZWModGhpcy5saW5lc1tsaW5lTnVtXSk7XG4gICAgICAgIGlmIChjYXB0dXJlICYmIGNhcHR1cmUuZ3JvdXBzIVtcInNlcVwiXS5sZW5ndGggPj0gY29kZUJsb2NrU2VxTGVuZ3RoKSB7XG4gICAgICAgICAgbGluZVR5cGUgPSBcIlRNQ29kZUZlbmNlVGlsZGVDbG9zZVwiO1xuICAgICAgICAgIGxpbmVSZXBsYWNlbWVudCA9IGxpbmVHcmFtbWFyLlRNQ29kZUZlbmNlVGlsZGVDbG9zZS5yZXBsYWNlbWVudDtcbiAgICAgICAgICBsaW5lQ2FwdHVyZSA9IGNhcHR1cmU7XG4gICAgICAgICAgY29kZUJsb2NrVHlwZSA9IGZhbHNlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGxpbmVUeXBlID0gXCJUTUZlbmNlZENvZGVUaWxkZVwiO1xuICAgICAgICAgIGxpbmVSZXBsYWNlbWVudCA9ICc8c3BhbiBjbGFzcz1cIlRNRmVuY2VkQ29kZVwiPiQwPGJyIC8+PC9zcGFuPic7XG4gICAgICAgICAgbGluZUNhcHR1cmUgPSBbdGhpcy5saW5lc1tsaW5lTnVtXV0gYXMgUmVnRXhwRXhlY0FycmF5O1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIENoZWNrIEhUTUwgYmxvY2sgdHlwZXNcbiAgICAgIGlmIChsaW5lVHlwZSA9PT0gXCJUTVBhcmFcIiAmJiBodG1sQmxvY2sgPT09IGZhbHNlKSB7XG4gICAgICAgIGZvciAobGV0IGh0bWxCbG9ja1R5cGUgb2YgaHRtbEJsb2NrR3JhbW1hcikge1xuICAgICAgICAgIGlmICh0aGlzLmxpbmVzW2xpbmVOdW1dLm1hdGNoKGh0bWxCbG9ja1R5cGUuc3RhcnQpKSB7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIGh0bWxCbG9ja1R5cGUucGFyYUludGVycnVwdCB8fFxuICAgICAgICAgICAgICBsaW5lTnVtID09PSAwIHx8XG4gICAgICAgICAgICAgICEoXG4gICAgICAgICAgICAgICAgdGhpcy5saW5lVHlwZXNbbGluZU51bSAtIDFdID09PSBcIlRNUGFyYVwiIHx8XG4gICAgICAgICAgICAgICAgdGhpcy5saW5lVHlwZXNbbGluZU51bSAtIDFdID09PSBcIlRNVUxcIiB8fFxuICAgICAgICAgICAgICAgIHRoaXMubGluZVR5cGVzW2xpbmVOdW0gLSAxXSA9PT0gXCJUTU9MXCIgfHxcbiAgICAgICAgICAgICAgICB0aGlzLmxpbmVUeXBlc1tsaW5lTnVtIC0gMV0gPT09IFwiVE1CbG9ja3F1b3RlXCJcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIGh0bWxCbG9jayA9IGh0bWxCbG9ja1R5cGU7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoaHRtbEJsb2NrICE9PSBmYWxzZSkge1xuICAgICAgICBsaW5lVHlwZSA9IFwiVE1IVE1MQmxvY2tcIjtcbiAgICAgICAgbGluZVJlcGxhY2VtZW50ID0gJzxzcGFuIGNsYXNzPVwiVE1IVE1MQ29udGVudFwiPiQwPGJyIC8+PC9zcGFuPic7XG4gICAgICAgIGxpbmVDYXB0dXJlID0gW3RoaXMubGluZXNbbGluZU51bV1dIGFzIFJlZ0V4cEV4ZWNBcnJheTtcblxuICAgICAgICBpZiAoaHRtbEJsb2NrLmVuZCkge1xuICAgICAgICAgIGlmICh0aGlzLmxpbmVzW2xpbmVOdW1dLm1hdGNoKGh0bWxCbG9jay5lbmQpKSB7XG4gICAgICAgICAgICBodG1sQmxvY2sgPSBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgbGluZU51bSA9PT0gdGhpcy5saW5lcy5sZW5ndGggLSAxIHx8XG4gICAgICAgICAgICB0aGlzLmxpbmVzW2xpbmVOdW0gKyAxXS5tYXRjaChsaW5lR3JhbW1hci5UTUJsYW5rTGluZS5yZWdleHApXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBodG1sQmxvY2sgPSBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gQ2hlY2sgYWxsIHJlZ2V4cHMgaWYgd2UgaGF2ZW4ndCBhcHBsaWVkIG9uZSBvZiB0aGUgY29kZSBibG9jayB0eXBlc1xuICAgICAgaWYgKGxpbmVUeXBlID09PSBcIlRNUGFyYVwiKSB7XG4gICAgICAgIGZvciAobGV0IHR5cGUgaW4gbGluZUdyYW1tYXIpIHtcbiAgICAgICAgICBpZiAobGluZUdyYW1tYXJbdHlwZV0ucmVnZXhwKSB7XG4gICAgICAgICAgICBsZXQgY2FwdHVyZSA9IGxpbmVHcmFtbWFyW3R5cGVdLnJlZ2V4cC5leGVjKHRoaXMubGluZXNbbGluZU51bV0pO1xuICAgICAgICAgICAgaWYgKGNhcHR1cmUpIHtcbiAgICAgICAgICAgICAgbGluZVR5cGUgPSB0eXBlO1xuICAgICAgICAgICAgICBsaW5lUmVwbGFjZW1lbnQgPSBsaW5lR3JhbW1hclt0eXBlXS5yZXBsYWNlbWVudDtcbiAgICAgICAgICAgICAgbGluZUNhcHR1cmUgPSBjYXB0dXJlO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gSWYgd2UndmUgb3BlbmVkIGEgY29kZSBibG9jaywgcmVtZW1iZXIgdGhhdFxuICAgICAgaWYgKGxpbmVUeXBlID09PSBcIlRNQ29kZUZlbmNlQmFja3RpY2tPcGVuXCIgfHwgbGluZVR5cGUgPT09IFwiVE1Db2RlRmVuY2VUaWxkZU9wZW5cIikge1xuICAgICAgICBjb2RlQmxvY2tUeXBlID0gbGluZVR5cGU7XG4gICAgICAgIGNvZGVCbG9ja1NlcUxlbmd0aCA9IGxpbmVDYXB0dXJlLmdyb3VwcyFbXCJzZXFcIl0ubGVuZ3RoO1xuICAgICAgfVxuXG4gICAgICAvLyBMaW5rIHJlZmVyZW5jZSBkZWZpbml0aW9uIGFuZCBpbmRlbnRlZCBjb2RlIGNhbid0IGludGVycnVwdCBhIHBhcmFncmFwaFxuICAgICAgaWYgKFxuICAgICAgICAobGluZVR5cGUgPT09IFwiVE1JbmRlbnRlZENvZGVcIiB8fCBsaW5lVHlwZSA9PT0gXCJUTUxpbmtSZWZlcmVuY2VEZWZpbml0aW9uXCIpICYmXG4gICAgICAgIGxpbmVOdW0gPiAwICYmXG4gICAgICAgICh0aGlzLmxpbmVUeXBlc1tsaW5lTnVtIC0gMV0gPT09IFwiVE1QYXJhXCIgfHxcbiAgICAgICAgICB0aGlzLmxpbmVUeXBlc1tsaW5lTnVtIC0gMV0gPT09IFwiVE1VTFwiIHx8XG4gICAgICAgICAgdGhpcy5saW5lVHlwZXNbbGluZU51bSAtIDFdID09PSBcIlRNT0xcIiB8fFxuICAgICAgICAgIHRoaXMubGluZVR5cGVzW2xpbmVOdW0gLSAxXSA9PT0gXCJUTUJsb2NrcXVvdGVcIilcbiAgICAgICkge1xuICAgICAgICBsaW5lVHlwZSA9IFwiVE1QYXJhXCI7XG4gICAgICAgIGxpbmVDYXB0dXJlID0gW3RoaXMubGluZXNbbGluZU51bV1dIGFzIFJlZ0V4cEV4ZWNBcnJheTtcbiAgICAgICAgbGluZVJlcGxhY2VtZW50ID0gXCIkJDBcIjtcbiAgICAgIH1cblxuICAgICAgLy8gU2V0ZXh0IEgyIG1hcmtlcnMgdGhhdCBjYW4gYWxzbyBiZSBpbnRlcnByZXRlZCBhcyBhbiBlbXB0eSBsaXN0IGl0ZW0gc2hvdWxkIGJlIHJlZ2FyZGVkIGFzIHN1Y2hcbiAgICAgIGlmIChsaW5lVHlwZSA9PT0gXCJUTVNldGV4dEgyTWFya2VyXCIpIHtcbiAgICAgICAgbGV0IGNhcHR1cmUgPSBsaW5lR3JhbW1hci5UTVVMLnJlZ2V4cC5leGVjKHRoaXMubGluZXNbbGluZU51bV0pO1xuICAgICAgICBpZiAoY2FwdHVyZSkge1xuICAgICAgICAgIGxpbmVUeXBlID0gXCJUTVVMXCI7XG4gICAgICAgICAgbGluZVJlcGxhY2VtZW50ID0gbGluZUdyYW1tYXIuVE1VTC5yZXBsYWNlbWVudDtcbiAgICAgICAgICBsaW5lQ2FwdHVyZSA9IGNhcHR1cmU7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gU2V0ZXh0IGhlYWRpbmdzIGFyZSBvbmx5IHZhbGlkIGlmIHByZWNlZGVkIGJ5IGEgcGFyYWdyYXBoXG4gICAgICBpZiAobGluZVR5cGUgPT09IFwiVE1TZXRleHRIMU1hcmtlclwiIHx8IGxpbmVUeXBlID09PSBcIlRNU2V0ZXh0SDJNYXJrZXJcIikge1xuICAgICAgICBpZiAobGluZU51bSA9PT0gMCB8fCB0aGlzLmxpbmVUeXBlc1tsaW5lTnVtIC0gMV0gIT09IFwiVE1QYXJhXCIpIHtcbiAgICAgICAgICBsZXQgY2FwdHVyZSA9IGxpbmVHcmFtbWFyLlRNSFIucmVnZXhwLmV4ZWModGhpcy5saW5lc1tsaW5lTnVtXSk7XG4gICAgICAgICAgaWYgKGNhcHR1cmUpIHtcbiAgICAgICAgICAgIGxpbmVUeXBlID0gXCJUTUhSXCI7XG4gICAgICAgICAgICBsaW5lQ2FwdHVyZSA9IGNhcHR1cmU7XG4gICAgICAgICAgICBsaW5lUmVwbGFjZW1lbnQgPSBsaW5lR3JhbW1hci5UTUhSLnJlcGxhY2VtZW50O1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsaW5lVHlwZSA9IFwiVE1QYXJhXCI7XG4gICAgICAgICAgICBsaW5lQ2FwdHVyZSA9IFt0aGlzLmxpbmVzW2xpbmVOdW1dXSBhcyBSZWdFeHBFeGVjQXJyYXk7XG4gICAgICAgICAgICBsaW5lUmVwbGFjZW1lbnQgPSBcIiQkMFwiO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBsZXQgaGVhZGluZ0xpbmUgPSBsaW5lTnVtIC0gMTtcbiAgICAgICAgICBjb25zdCBoZWFkaW5nTGluZVR5cGUgPSBsaW5lVHlwZSA9PT0gXCJUTVNldGV4dEgxTWFya2VyXCIgPyBcIlRNU2V0ZXh0SDFcIiA6IFwiVE1TZXRleHRIMlwiO1xuICAgICAgICAgIGRvIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmxpbmVUeXBlc1toZWFkaW5nTGluZV0gIT09IGhlYWRpbmdMaW5lVHlwZSkge1xuICAgICAgICAgICAgICB0aGlzLmxpbmVUeXBlc1toZWFkaW5nTGluZV0gPSBoZWFkaW5nTGluZVR5cGU7XG4gICAgICAgICAgICAgIHRoaXMubGluZURpcnR5W2hlYWRpbmdMaW5lXSA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmxpbmVSZXBsYWNlbWVudHNbaGVhZGluZ0xpbmVdID0gXCIkJDBcIjtcbiAgICAgICAgICAgIHRoaXMubGluZUNhcHR1cmVzW2hlYWRpbmdMaW5lXSA9IFt0aGlzLmxpbmVzW2hlYWRpbmdMaW5lXV0gYXMgUmVnRXhwRXhlY0FycmF5O1xuICAgICAgICAgICAgaGVhZGluZ0xpbmUtLTtcbiAgICAgICAgICB9IHdoaWxlIChoZWFkaW5nTGluZSA+PSAwICYmIHRoaXMubGluZVR5cGVzW2hlYWRpbmdMaW5lXSA9PT0gXCJUTVBhcmFcIik7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMubGluZVR5cGVzW2xpbmVOdW1dICE9PSBsaW5lVHlwZSkge1xuICAgICAgICB0aGlzLmxpbmVUeXBlc1tsaW5lTnVtXSA9IGxpbmVUeXBlO1xuICAgICAgICB0aGlzLmxpbmVEaXJ0eVtsaW5lTnVtXSA9IHRydWU7XG4gICAgICB9XG4gICAgICB0aGlzLmxpbmVSZXBsYWNlbWVudHNbbGluZU51bV0gPSBsaW5lUmVwbGFjZW1lbnQ7XG4gICAgICB0aGlzLmxpbmVDYXB0dXJlc1tsaW5lTnVtXSA9IGxpbmVDYXB0dXJlO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBnZXRTZWxlY3Rpb24oZ2V0QW5jaG9yOiBib29sZWFuID0gZmFsc2UpOiBQb3NpdGlvbiB8IG51bGwge1xuICAgIGNvbnN0IHNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcbiAgICBsZXQgc3RhcnROb2RlID0gZ2V0QW5jaG9yID8gc2VsZWN0aW9uIS5hbmNob3JOb2RlIDogc2VsZWN0aW9uIS5mb2N1c05vZGU7XG4gICAgaWYgKCFzdGFydE5vZGUpIHJldHVybiBudWxsO1xuICAgIGxldCBvZmZzZXQgPSBnZXRBbmNob3IgPyBzZWxlY3Rpb24hLmFuY2hvck9mZnNldCA6IHNlbGVjdGlvbiEuZm9jdXNPZmZzZXQ7XG4gICAgaWYgKHN0YXJ0Tm9kZSA9PT0gdGhpcy5lKSB7XG4gICAgICBpZiAob2Zmc2V0IDwgdGhpcy5saW5lcy5sZW5ndGgpXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgcm93OiBvZmZzZXQsXG4gICAgICAgICAgY29sOiAwLFxuICAgICAgICB9O1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgcm93OiBvZmZzZXQgLSAxLFxuICAgICAgICBjb2w6IHRoaXMubGluZXNbb2Zmc2V0IC0gMV0ubGVuZ3RoLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICBsZXQgY29sID0gdGhpcy5jb21wdXRlQ29sdW1uKHN0YXJ0Tm9kZSwgb2Zmc2V0KTtcbiAgICBpZiAoY29sID09PSBudWxsKSByZXR1cm4gbnVsbDtcblxuICAgIGxldCBub2RlID0gc3RhcnROb2RlO1xuICAgIHdoaWxlIChub2RlLnBhcmVudEVsZW1lbnQgIT09IHRoaXMuZSkge1xuICAgICAgbm9kZSA9IG5vZGUucGFyZW50RWxlbWVudCE7XG4gICAgfVxuXG4gICAgbGV0IHJvdyA9IDA7XG4gICAgaWYgKFxuICAgICAgKG5vZGUgYXMgSFRNTEVsZW1lbnQpLmRhdGFzZXQgJiZcbiAgICAgIChub2RlIGFzIEhUTUxFbGVtZW50KS5kYXRhc2V0LmxpbmVOdW0gJiZcbiAgICAgICghbm9kZS5wcmV2aW91c1NpYmxpbmcgfHxcbiAgICAgICAgKChub2RlLnByZXZpb3VzU2libGluZyBhcyBIVE1MRWxlbWVudCkuZGF0YXNldD8ubGluZU51bSAhPT0gKG5vZGUgYXMgSFRNTEVsZW1lbnQpLmRhdGFzZXQubGluZU51bSkpXG4gICAgKSB7XG4gICAgICByb3cgPSBwYXJzZUludCgobm9kZSBhcyBIVE1MRWxlbWVudCkuZGF0YXNldC5saW5lTnVtISk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHdoaWxlIChub2RlLnByZXZpb3VzU2libGluZykge1xuICAgICAgICByb3crKztcbiAgICAgICAgbm9kZSA9IG5vZGUucHJldmlvdXNTaWJsaW5nO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4geyByb3c6IHJvdywgY29sOiBjb2wgfTtcbiAgfVxuXG4gIHB1YmxpYyBzZXRTZWxlY3Rpb24oZm9jdXM6IFBvc2l0aW9uLCBhbmNob3I6IFBvc2l0aW9uIHwgbnVsbCA9IG51bGwpOiB2b2lkIHtcbiAgICBpZiAoIWZvY3VzKSByZXR1cm47XG5cbiAgICBsZXQgeyBub2RlOiBmb2N1c05vZGUsIG9mZnNldDogZm9jdXNPZmZzZXQgfSA9IHRoaXMuY29tcHV0ZU5vZGVBbmRPZmZzZXQoXG4gICAgICBmb2N1cy5yb3csXG4gICAgICBmb2N1cy5jb2wsXG4gICAgICBhbmNob3IgPyBhbmNob3Iucm93ID09PSBmb2N1cy5yb3cgJiYgYW5jaG9yLmNvbCA+IGZvY3VzLmNvbCA6IGZhbHNlXG4gICAgKTtcbiAgICBsZXQgYW5jaG9yTm9kZSA9IG51bGwsXG4gICAgICBhbmNob3JPZmZzZXQgPSBudWxsO1xuICAgIGlmIChhbmNob3IgJiYgKGFuY2hvci5yb3cgIT09IGZvY3VzLnJvdyB8fCBhbmNob3IuY29sICE9PSBmb2N1cy5jb2wpKSB7XG4gICAgICBsZXQgeyBub2RlLCBvZmZzZXQgfSA9IHRoaXMuY29tcHV0ZU5vZGVBbmRPZmZzZXQoXG4gICAgICAgIGFuY2hvci5yb3csXG4gICAgICAgIGFuY2hvci5jb2wsXG4gICAgICAgIGZvY3VzLnJvdyA9PT0gYW5jaG9yLnJvdyAmJiBmb2N1cy5jb2wgPiBhbmNob3IuY29sXG4gICAgICApO1xuICAgICAgYW5jaG9yTm9kZSA9IG5vZGU7XG4gICAgICBhbmNob3JPZmZzZXQgPSBvZmZzZXQ7XG4gICAgfVxuXG4gICAgbGV0IHdpbmRvd1NlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcbiAgICB3aW5kb3dTZWxlY3Rpb24hLnNldEJhc2VBbmRFeHRlbnQoXG4gICAgICBmb2N1c05vZGUsXG4gICAgICBmb2N1c09mZnNldCxcbiAgICAgIGFuY2hvck5vZGUgfHwgZm9jdXNOb2RlLFxuICAgICAgYW5jaG9yTm9kZSA/IGFuY2hvck9mZnNldCEgOiBmb2N1c09mZnNldFxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgcGFzdGUodGV4dDogc3RyaW5nLCBhbmNob3I6IFBvc2l0aW9uIHwgbnVsbCA9IG51bGwsIGZvY3VzOiBQb3NpdGlvbiB8IG51bGwgPSBudWxsKTogdm9pZCB7XG4gICAgaWYgKCFhbmNob3IpIGFuY2hvciA9IHRoaXMuZ2V0U2VsZWN0aW9uKHRydWUpO1xuICAgIGlmICghZm9jdXMpIGZvY3VzID0gdGhpcy5nZXRTZWxlY3Rpb24oZmFsc2UpO1xuICAgIGxldCBiZWdpbm5pbmc6IFBvc2l0aW9uLCBlbmQ6IFBvc2l0aW9uO1xuICAgIGlmICghZm9jdXMpIHtcbiAgICAgIGZvY3VzID0ge1xuICAgICAgICByb3c6IHRoaXMubGluZXMubGVuZ3RoIC0gMSxcbiAgICAgICAgY29sOiB0aGlzLmxpbmVzW3RoaXMubGluZXMubGVuZ3RoIC0gMV0ubGVuZ3RoLFxuICAgICAgfTtcbiAgICB9XG4gICAgaWYgKCFhbmNob3IpIHtcbiAgICAgIGFuY2hvciA9IGZvY3VzO1xuICAgIH1cbiAgICBpZiAoXG4gICAgICBhbmNob3Iucm93IDwgZm9jdXMucm93IHx8XG4gICAgICAoYW5jaG9yLnJvdyA9PT0gZm9jdXMucm93ICYmIGFuY2hvci5jb2wgPD0gZm9jdXMuY29sKVxuICAgICkge1xuICAgICAgYmVnaW5uaW5nID0gYW5jaG9yO1xuICAgICAgZW5kID0gZm9jdXM7XG4gICAgfSBlbHNlIHtcbiAgICAgIGJlZ2lubmluZyA9IGZvY3VzO1xuICAgICAgZW5kID0gYW5jaG9yO1xuICAgIH1cbiAgICBsZXQgaW5zZXJ0ZWRMaW5lcyA9IHRleHQuc3BsaXQoLyg/OlxcclxcbnxcXHJ8XFxuKS8pO1xuICAgIGxldCBsaW5lQmVmb3JlID0gdGhpcy5saW5lc1tiZWdpbm5pbmcucm93XS5zdWJzdHIoMCwgYmVnaW5uaW5nLmNvbCk7XG4gICAgbGV0IGxpbmVFbmQgPSB0aGlzLmxpbmVzW2VuZC5yb3ddLnN1YnN0cihlbmQuY29sKTtcbiAgICBpbnNlcnRlZExpbmVzWzBdID0gbGluZUJlZm9yZS5jb25jYXQoaW5zZXJ0ZWRMaW5lc1swXSk7XG4gICAgbGV0IGVuZENvbFBvcyA9IGluc2VydGVkTGluZXNbaW5zZXJ0ZWRMaW5lcy5sZW5ndGggLSAxXS5sZW5ndGg7XG4gICAgaW5zZXJ0ZWRMaW5lc1tpbnNlcnRlZExpbmVzLmxlbmd0aCAtIDFdID0gaW5zZXJ0ZWRMaW5lc1tpbnNlcnRlZExpbmVzLmxlbmd0aCAtIDFdLmNvbmNhdChsaW5lRW5kKTtcbiAgICB0aGlzLnNwbGljZUxpbmVzKGJlZ2lubmluZy5yb3csIDEgKyBlbmQucm93IC0gYmVnaW5uaW5nLnJvdywgaW5zZXJ0ZWRMaW5lcyk7XG4gICAgZm9jdXMucm93ID0gYmVnaW5uaW5nLnJvdyArIGluc2VydGVkTGluZXMubGVuZ3RoIC0gMTtcbiAgICBmb2N1cy5jb2wgPSBlbmRDb2xQb3M7XG4gICAgdGhpcy51cGRhdGVGb3JtYXR0aW5nKCk7XG4gICAgdGhpcy5zZXRTZWxlY3Rpb24oZm9jdXMpO1xuICAgIHRoaXMuZmlyZUNoYW5nZSgpO1xuICB9XG5cbiAgcHVibGljIHdyYXBTZWxlY3Rpb24ocHJlOiBzdHJpbmcsIHBvc3Q6IHN0cmluZywgZm9jdXM6IFBvc2l0aW9uIHwgbnVsbCA9IG51bGwsIGFuY2hvcjogUG9zaXRpb24gfCBudWxsID0gbnVsbCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5pc1Jlc3RvcmluZ0hpc3RvcnkpIHRoaXMucHVzaEhpc3RvcnkoKTtcbiAgICBpZiAoIWZvY3VzKSBmb2N1cyA9IHRoaXMuZ2V0U2VsZWN0aW9uKGZhbHNlKTtcbiAgICBpZiAoIWFuY2hvcikgYW5jaG9yID0gdGhpcy5nZXRTZWxlY3Rpb24odHJ1ZSk7XG4gICAgaWYgKCFmb2N1cyB8fCAhYW5jaG9yIHx8IGZvY3VzLnJvdyAhPT0gYW5jaG9yLnJvdykgcmV0dXJuO1xuICAgIHRoaXMubGluZURpcnR5W2ZvY3VzLnJvd10gPSB0cnVlO1xuXG4gICAgY29uc3Qgc3RhcnRDb2wgPSBmb2N1cy5jb2wgPCBhbmNob3IuY29sID8gZm9jdXMuY29sIDogYW5jaG9yLmNvbDtcbiAgICBjb25zdCBlbmRDb2wgPSBmb2N1cy5jb2wgPCBhbmNob3IuY29sID8gYW5jaG9yLmNvbCA6IGZvY3VzLmNvbDtcbiAgICBjb25zdCBsZWZ0ID0gdGhpcy5saW5lc1tmb2N1cy5yb3ddLnN1YnN0cigwLCBzdGFydENvbCkuY29uY2F0KHByZSk7XG4gICAgY29uc3QgbWlkID0gZW5kQ29sID09PSBzdGFydENvbCA/IFwiXCIgOiB0aGlzLmxpbmVzW2ZvY3VzLnJvd10uc3Vic3RyKHN0YXJ0Q29sLCBlbmRDb2wgLSBzdGFydENvbCk7XG4gICAgY29uc3QgcmlnaHQgPSBwb3N0LmNvbmNhdCh0aGlzLmxpbmVzW2ZvY3VzLnJvd10uc3Vic3RyKGVuZENvbCkpO1xuICAgIHRoaXMubGluZXNbZm9jdXMucm93XSA9IGxlZnQuY29uY2F0KG1pZCwgcmlnaHQpO1xuICAgIGFuY2hvci5jb2wgPSBsZWZ0Lmxlbmd0aDtcbiAgICBmb2N1cy5jb2wgPSBhbmNob3IuY29sICsgbWlkLmxlbmd0aDtcblxuICAgIHRoaXMudXBkYXRlRm9ybWF0dGluZygpO1xuICAgIHRoaXMuc2V0U2VsZWN0aW9uKGZvY3VzLCBhbmNob3IpO1xuICB9XG5cbiAgcHVibGljIGFkZEV2ZW50TGlzdGVuZXI8VCBleHRlbmRzIEV2ZW50VHlwZT4oXG4gICAgdHlwZTogVCxcbiAgICBsaXN0ZW5lcjogVCBleHRlbmRzICdjaGFuZ2UnID8gRXZlbnRIYW5kbGVyPENoYW5nZUV2ZW50PiA6XG4gICAgICAgICAgICAgVCBleHRlbmRzICdzZWxlY3Rpb24nID8gRXZlbnRIYW5kbGVyPFNlbGVjdGlvbkV2ZW50PiA6XG4gICAgICAgICAgICAgVCBleHRlbmRzICdkcm9wJyA/IEV2ZW50SGFuZGxlcjxEcm9wRXZlbnQ+IDogbmV2ZXJcbiAgKTogdm9pZCB7XG4gICAgaWYgKHR5cGUubWF0Y2goL14oPzpjaGFuZ2V8aW5wdXQpJC9pKSkge1xuICAgICAgdGhpcy5saXN0ZW5lcnMuY2hhbmdlLnB1c2gobGlzdGVuZXIgYXMgRXZlbnRIYW5kbGVyPENoYW5nZUV2ZW50Pik7XG4gICAgfVxuICAgIGlmICh0eXBlLm1hdGNoKC9eKD86c2VsZWN0aW9ufHNlbGVjdGlvbmNoYW5nZSkkL2kpKSB7XG4gICAgICB0aGlzLmxpc3RlbmVycy5zZWxlY3Rpb24ucHVzaChsaXN0ZW5lciBhcyBFdmVudEhhbmRsZXI8U2VsZWN0aW9uRXZlbnQ+KTtcbiAgICB9XG4gICAgaWYgKHR5cGUubWF0Y2goL14oPzpkcm9wKSQvaSkpIHtcbiAgICAgIHRoaXMubGlzdGVuZXJzLmRyb3AucHVzaChsaXN0ZW5lciBhcyBFdmVudEhhbmRsZXI8RHJvcEV2ZW50Pik7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBmaXJlQ2hhbmdlKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy50ZXh0YXJlYSAmJiAhdGhpcy5saXN0ZW5lcnMuY2hhbmdlLmxlbmd0aCkgcmV0dXJuO1xuICAgIGNvbnN0IGNvbnRlbnQgPSB0aGlzLmdldENvbnRlbnQoKTtcbiAgICBpZiAodGhpcy50ZXh0YXJlYSkgdGhpcy50ZXh0YXJlYS52YWx1ZSA9IGNvbnRlbnQ7XG4gICAgZm9yIChsZXQgbGlzdGVuZXIgb2YgdGhpcy5saXN0ZW5lcnMuY2hhbmdlKSB7XG4gICAgICBsaXN0ZW5lcih7XG4gICAgICAgIGNvbnRlbnQ6IGNvbnRlbnQsXG4gICAgICAgIGxpbmVzRGlydHk6IFsuLi50aGlzLmxpbmVEaXJ0eV0sXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZUlucHV0RXZlbnQoZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgY29uc3QgaW5wdXRFdmVudCA9IGV2ZW50IGFzIElucHV0RXZlbnQ7XG4gICAgaWYgKGlucHV0RXZlbnQuaW5wdXRUeXBlID09PSBcImluc2VydENvbXBvc2l0aW9uVGV4dFwiKSByZXR1cm47XG4gICAgaWYgKCF0aGlzLmlzUmVzdG9yaW5nSGlzdG9yeSkgdGhpcy5wdXNoSGlzdG9yeSgpO1xuXG4gICAgbGV0IGZvY3VzID0gdGhpcy5nZXRTZWxlY3Rpb24oKTtcblxuICAgIGlmICgoaW5wdXRFdmVudC5pbnB1dFR5cGUgPT09IFwiaW5zZXJ0UGFyYWdyYXBoXCIgfHwgaW5wdXRFdmVudC5pbnB1dFR5cGUgPT09IFwiaW5zZXJ0TGluZUJyZWFrXCIpICYmIGZvY3VzKSB7XG4gICAgICB0aGlzLmNsZWFyRGlydHlGbGFnKCk7XG4gICAgICB0aGlzLnByb2Nlc3NOZXdQYXJhZ3JhcGgoZm9jdXMpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoIXRoaXMuZSEuZmlyc3RDaGlsZCkge1xuICAgICAgICB0aGlzLmUhLmlubmVySFRNTCA9ICc8ZGl2IGNsYXNzPVwiVE1CbGFua0xpbmVcIj48YnI+PC9kaXY+JztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuZml4Tm9kZUhpZXJhcmNoeSgpO1xuICAgICAgfVxuICAgICAgdGhpcy51cGRhdGVMaW5lQ29udGVudHNBbmRGb3JtYXR0aW5nKCk7XG4gICAgfVxuICAgIGlmIChmb2N1cykge1xuICAgICAgdGhpcy5zZXRTZWxlY3Rpb24oZm9jdXMpO1xuICAgIH1cblxuICAgIHRoaXMuZmlyZUNoYW5nZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVTZWxlY3Rpb25DaGFuZ2VFdmVudChfZTogRXZlbnQpOiB2b2lkIHtcbiAgICB0aGlzLmZpcmVTZWxlY3Rpb24oKTtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlUGFzdGUoZXZlbnQ6IENsaXBib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmlzUmVzdG9yaW5nSGlzdG9yeSkgdGhpcy5wdXNoSGlzdG9yeSgpO1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICBsZXQgdGV4dCA9IChldmVudCBhcyBhbnkpLmNsaXBib2FyZERhdGEuZ2V0RGF0YShcInRleHQvcGxhaW5cIik7XG4gICAgdGhpcy5wYXN0ZSh0ZXh0KTtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlRHJvcChldmVudDogRHJhZ0V2ZW50KTogdm9pZCB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB0aGlzLmZpcmVEcm9wKGV2ZW50LmRhdGFUcmFuc2ZlciEpO1xuICB9XG5cbiAgcHJpdmF0ZSBwcm9jZXNzSW5saW5lU3R5bGVzKG9yaWdpbmFsU3RyaW5nOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGxldCBwcm9jZXNzZWQgPSBcIlwiO1xuICAgIGxldCBzdGFjazogQXJyYXk8e2RlbGltaXRlcjogc3RyaW5nLCBkZWxpbVN0cmluZzogc3RyaW5nLCBjb3VudDogbnVtYmVyLCBvdXRwdXQ6IHN0cmluZ30+ID0gW107XG4gICAgbGV0IG9mZnNldCA9IDA7XG4gICAgbGV0IHN0cmluZyA9IG9yaWdpbmFsU3RyaW5nO1xuXG4gICAgb3V0ZXI6IHdoaWxlIChzdHJpbmcpIHtcbiAgICAgIC8vIFByb2Nlc3Mgc2ltcGxlIHJ1bGVzIChub24tZGVsaW1pdGVyKVxuICAgICAgZm9yIChsZXQgcnVsZSBvZiBbXCJlc2NhcGVcIiwgXCJjb2RlXCIsIFwiYXV0b2xpbmtcIiwgXCJodG1sXCJdKSB7XG4gICAgICAgIGlmICh0aGlzLm1lcmdlZElubGluZUdyYW1tYXJbcnVsZV0pIHtcbiAgICAgICAgICBsZXQgY2FwID0gdGhpcy5tZXJnZWRJbmxpbmVHcmFtbWFyW3J1bGVdLnJlZ2V4cC5leGVjKHN0cmluZyk7XG4gICAgICAgICAgaWYgKGNhcCkge1xuICAgICAgICAgICAgc3RyaW5nID0gc3RyaW5nLnN1YnN0cihjYXBbMF0ubGVuZ3RoKTtcbiAgICAgICAgICAgIG9mZnNldCArPSBjYXBbMF0ubGVuZ3RoO1xuICAgICAgICAgICAgcHJvY2Vzc2VkICs9IHRoaXMubWVyZ2VkSW5saW5lR3JhbW1hcltydWxlXS5yZXBsYWNlbWVudC5yZXBsYWNlKC9cXCQoWzEtOV0pL2csIChzdHIsIHAxKSA9PiBodG1sZXNjYXBlKGNhcFtwMV0pKTtcbiAgICAgICAgICAgIGNvbnRpbnVlIG91dGVyO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgXG4gICAgICAvLyBQcm9jZXNzIGN1c3RvbSBpbmxpbmUgZ3JhbW1hciBydWxlc1xuICAgICAgZm9yIChsZXQgcnVsZSBpbiB0aGlzLmN1c3RvbUlubGluZUdyYW1tYXIpIHtcbiAgICAgICAgaWYgKHJ1bGUgIT09IFwiZXNjYXBlXCIgJiYgcnVsZSAhPT0gXCJjb2RlXCIgJiYgcnVsZSAhPT0gXCJhdXRvbGlua1wiICYmIHJ1bGUgIT09IFwiaHRtbFwiICYmIHJ1bGUgIT09IFwibGlua09wZW5cIiAmJiBydWxlICE9PSBcImltYWdlT3BlblwiICYmIHJ1bGUgIT09IFwibGlua0xhYmVsXCIgJiYgcnVsZSAhPT0gXCJkZWZhdWx0XCIpIHtcbiAgICAgICAgICBsZXQgY2FwID0gdGhpcy5tZXJnZWRJbmxpbmVHcmFtbWFyW3J1bGVdLnJlZ2V4cC5leGVjKHN0cmluZyk7XG4gICAgICAgICAgaWYgKGNhcCkge1xuICAgICAgICAgICAgc3RyaW5nID0gc3RyaW5nLnN1YnN0cihjYXBbMF0ubGVuZ3RoKTtcbiAgICAgICAgICAgIG9mZnNldCArPSBjYXBbMF0ubGVuZ3RoO1xuICAgICAgICAgICAgcHJvY2Vzc2VkICs9IHRoaXMubWVyZ2VkSW5saW5lR3JhbW1hcltydWxlXS5yZXBsYWNlbWVudC5yZXBsYWNlKC9cXCQoWzEtOV0pL2csIChzdHIsIHAxKSA9PiBodG1sZXNjYXBlKGNhcFtwMV0pKTtcbiAgICAgICAgICAgIGNvbnRpbnVlIG91dGVyO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBDaGVjayBmb3IgbGlua3MgLyBpbWFnZXNcbiAgICAgIGxldCBwb3RlbnRpYWxMaW5rID0gc3RyaW5nLm1hdGNoKHRoaXMubWVyZ2VkSW5saW5lR3JhbW1hci5saW5rT3Blbi5yZWdleHApO1xuICAgICAgbGV0IHBvdGVudGlhbEltYWdlID0gc3RyaW5nLm1hdGNoKHRoaXMubWVyZ2VkSW5saW5lR3JhbW1hci5pbWFnZU9wZW4ucmVnZXhwKTtcbiAgICAgIGlmIChwb3RlbnRpYWxJbWFnZSB8fCBwb3RlbnRpYWxMaW5rKSB7XG4gICAgICAgIGxldCByZXN1bHQgPSB0aGlzLnBhcnNlTGlua09ySW1hZ2Uoc3RyaW5nLCAhIXBvdGVudGlhbEltYWdlKTtcbiAgICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICAgIHByb2Nlc3NlZCA9IGAke3Byb2Nlc3NlZH0ke3Jlc3VsdC5vdXRwdXR9YDtcbiAgICAgICAgICBzdHJpbmcgPSBzdHJpbmcuc3Vic3RyKHJlc3VsdC5jaGFyQ291bnQpO1xuICAgICAgICAgIG9mZnNldCArPSByZXN1bHQuY2hhckNvdW50O1xuICAgICAgICAgIGNvbnRpbnVlIG91dGVyO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIENoZWNrIGZvciBlbSAvIHN0cm9uZyBkZWxpbWl0ZXJzXG4gICAgICBsZXQgY2FwID0gLyheXFwqKyl8KF5fKykvLmV4ZWMoc3RyaW5nKTtcbiAgICAgIGlmIChjYXApIHtcbiAgICAgICAgbGV0IGRlbGltQ291bnQgPSBjYXBbMF0ubGVuZ3RoO1xuICAgICAgICBjb25zdCBkZWxpbVN0cmluZyA9IGNhcFswXTtcbiAgICAgICAgY29uc3QgY3VycmVudERlbGltaXRlciA9IGNhcFswXVswXTtcblxuICAgICAgICBzdHJpbmcgPSBzdHJpbmcuc3Vic3RyKGNhcFswXS5sZW5ndGgpO1xuXG4gICAgICAgIGNvbnN0IHByZWNlZGluZyA9IG9mZnNldCA+IDAgPyBvcmlnaW5hbFN0cmluZy5zdWJzdHIoMCwgb2Zmc2V0KSA6IFwiIFwiO1xuICAgICAgICBjb25zdCBmb2xsb3dpbmcgPSBvZmZzZXQgKyBjYXBbMF0ubGVuZ3RoIDwgb3JpZ2luYWxTdHJpbmcubGVuZ3RoID8gc3RyaW5nIDogXCIgXCI7XG5cbiAgICAgICAgY29uc3QgcHVuY3R1YXRpb25Gb2xsb3dzID0gZm9sbG93aW5nLm1hdGNoKHB1bmN0dWF0aW9uTGVhZGluZyk7XG4gICAgICAgIGNvbnN0IHB1bmN0dWF0aW9uUHJlY2VkZXMgPSBwcmVjZWRpbmcubWF0Y2gocHVuY3R1YXRpb25UcmFpbGluZyk7XG4gICAgICAgIGNvbnN0IHdoaXRlc3BhY2VGb2xsb3dzID0gZm9sbG93aW5nLm1hdGNoKC9eXFxzLyk7XG4gICAgICAgIGNvbnN0IHdoaXRlc3BhY2VQcmVjZWRlcyA9IHByZWNlZGluZy5tYXRjaCgvXFxzJC8pO1xuXG4gICAgICAgIGxldCBjYW5PcGVuID0gIXdoaXRlc3BhY2VGb2xsb3dzICYmICghcHVuY3R1YXRpb25Gb2xsb3dzIHx8ICEhd2hpdGVzcGFjZVByZWNlZGVzIHx8ICEhcHVuY3R1YXRpb25QcmVjZWRlcyk7XG4gICAgICAgIGxldCBjYW5DbG9zZSA9ICF3aGl0ZXNwYWNlUHJlY2VkZXMgJiYgKCFwdW5jdHVhdGlvblByZWNlZGVzIHx8ICEhd2hpdGVzcGFjZUZvbGxvd3MgfHwgISFwdW5jdHVhdGlvbkZvbGxvd3MpO1xuXG4gICAgICAgIGlmIChjdXJyZW50RGVsaW1pdGVyID09PSBcIl9cIiAmJiBjYW5PcGVuICYmIGNhbkNsb3NlKSB7XG4gICAgICAgICAgY2FuT3BlbiA9ICEhcHVuY3R1YXRpb25QcmVjZWRlcztcbiAgICAgICAgICBjYW5DbG9zZSA9ICEhcHVuY3R1YXRpb25Gb2xsb3dzO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNhbkNsb3NlKSB7XG4gICAgICAgICAgbGV0IHN0YWNrUG9pbnRlciA9IHN0YWNrLmxlbmd0aCAtIDE7XG4gICAgICAgICAgd2hpbGUgKGRlbGltQ291bnQgJiYgc3RhY2tQb2ludGVyID49IDApIHtcbiAgICAgICAgICAgIGlmIChzdGFja1tzdGFja1BvaW50ZXJdLmRlbGltaXRlciA9PT0gY3VycmVudERlbGltaXRlcikge1xuICAgICAgICAgICAgICB3aGlsZSAoc3RhY2tQb2ludGVyIDwgc3RhY2subGVuZ3RoIC0gMSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGVudHJ5ID0gc3RhY2sucG9wKCkhO1xuICAgICAgICAgICAgICAgIHByb2Nlc3NlZCA9IGAke2VudHJ5Lm91dHB1dH0ke2VudHJ5LmRlbGltU3RyaW5nLnN1YnN0cigwLCBlbnRyeS5jb3VudCl9JHtwcm9jZXNzZWR9YDtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmIChkZWxpbUNvdW50ID49IDIgJiYgc3RhY2tbc3RhY2tQb2ludGVyXS5jb3VudCA+PSAyKSB7XG4gICAgICAgICAgICAgICAgcHJvY2Vzc2VkID0gYDxzcGFuIGNsYXNzPVwiVE1NYXJrXCI+JHtjdXJyZW50RGVsaW1pdGVyfSR7Y3VycmVudERlbGltaXRlcn08L3NwYW4+PHN0cm9uZyBjbGFzcz1cIlRNU3Ryb25nXCI+JHtwcm9jZXNzZWR9PC9zdHJvbmc+PHNwYW4gY2xhc3M9XCJUTU1hcmtcIj4ke2N1cnJlbnREZWxpbWl0ZXJ9JHtjdXJyZW50RGVsaW1pdGVyfTwvc3Bhbj5gO1xuICAgICAgICAgICAgICAgIGRlbGltQ291bnQgLT0gMjtcbiAgICAgICAgICAgICAgICBzdGFja1tzdGFja1BvaW50ZXJdLmNvdW50IC09IDI7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcHJvY2Vzc2VkID0gYDxzcGFuIGNsYXNzPVwiVE1NYXJrXCI+JHtjdXJyZW50RGVsaW1pdGVyfTwvc3Bhbj48ZW0gY2xhc3M9XCJUTUVtXCI+JHtwcm9jZXNzZWR9PC9lbT48c3BhbiBjbGFzcz1cIlRNTWFya1wiPiR7Y3VycmVudERlbGltaXRlcn08L3NwYW4+YDtcbiAgICAgICAgICAgICAgICBkZWxpbUNvdW50IC09IDE7XG4gICAgICAgICAgICAgICAgc3RhY2tbc3RhY2tQb2ludGVyXS5jb3VudCAtPSAxO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaWYgKHN0YWNrW3N0YWNrUG9pbnRlcl0uY291bnQgPT09IDApIHtcbiAgICAgICAgICAgICAgICBsZXQgZW50cnkgPSBzdGFjay5wb3AoKSE7XG4gICAgICAgICAgICAgICAgcHJvY2Vzc2VkID0gYCR7ZW50cnkub3V0cHV0fSR7cHJvY2Vzc2VkfWA7XG4gICAgICAgICAgICAgICAgc3RhY2tQb2ludGVyLS07XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHN0YWNrUG9pbnRlci0tO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChkZWxpbUNvdW50ICYmIGNhbk9wZW4pIHtcbiAgICAgICAgICBzdGFjay5wdXNoKHtcbiAgICAgICAgICAgIGRlbGltaXRlcjogY3VycmVudERlbGltaXRlcixcbiAgICAgICAgICAgIGRlbGltU3RyaW5nOiBkZWxpbVN0cmluZyxcbiAgICAgICAgICAgIGNvdW50OiBkZWxpbUNvdW50LFxuICAgICAgICAgICAgb3V0cHV0OiBwcm9jZXNzZWQsXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcHJvY2Vzc2VkID0gXCJcIjtcbiAgICAgICAgICBkZWxpbUNvdW50ID0gMDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChkZWxpbUNvdW50KSB7XG4gICAgICAgICAgcHJvY2Vzc2VkID0gYCR7cHJvY2Vzc2VkfSR7ZGVsaW1TdHJpbmcuc3Vic3RyKDAsIGRlbGltQ291bnQpfWA7XG4gICAgICAgIH1cblxuICAgICAgICBvZmZzZXQgKz0gY2FwWzBdLmxlbmd0aDtcbiAgICAgICAgY29udGludWUgb3V0ZXI7XG4gICAgICB9XG5cbiAgICAgIC8vIENoZWNrIGZvciBzdHJpa2V0aHJvdWdoIGRlbGltaXRlclxuICAgICAgY2FwID0gL15+fi8uZXhlYyhzdHJpbmcpO1xuICAgICAgaWYgKGNhcCkge1xuICAgICAgICBsZXQgY29uc3VtZWQgPSBmYWxzZTtcbiAgICAgICAgbGV0IHN0YWNrUG9pbnRlciA9IHN0YWNrLmxlbmd0aCAtIDE7XG4gICAgICAgIHdoaWxlICghY29uc3VtZWQgJiYgc3RhY2tQb2ludGVyID49IDApIHtcbiAgICAgICAgICBpZiAoc3RhY2tbc3RhY2tQb2ludGVyXS5kZWxpbWl0ZXIgPT09IFwiflwiKSB7XG4gICAgICAgICAgICB3aGlsZSAoc3RhY2tQb2ludGVyIDwgc3RhY2subGVuZ3RoIC0gMSkge1xuICAgICAgICAgICAgICBjb25zdCBlbnRyeSA9IHN0YWNrLnBvcCgpITtcbiAgICAgICAgICAgICAgcHJvY2Vzc2VkID0gYCR7ZW50cnkub3V0cHV0fSR7ZW50cnkuZGVsaW1TdHJpbmcuc3Vic3RyKDAsIGVudHJ5LmNvdW50KX0ke3Byb2Nlc3NlZH1gO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBwcm9jZXNzZWQgPSBgPHNwYW4gY2xhc3M9XCJUTU1hcmtcIj5+fjwvc3Bhbj48ZGVsIGNsYXNzPVwiVE1TdHJpa2V0aHJvdWdoXCI+JHtwcm9jZXNzZWR9PC9kZWw+PHNwYW4gY2xhc3M9XCJUTU1hcmtcIj5+fjwvc3Bhbj5gO1xuICAgICAgICAgICAgbGV0IGVudHJ5ID0gc3RhY2sucG9wKCkhO1xuICAgICAgICAgICAgcHJvY2Vzc2VkID0gYCR7ZW50cnkub3V0cHV0fSR7cHJvY2Vzc2VkfWA7XG4gICAgICAgICAgICBjb25zdW1lZCA9IHRydWU7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHN0YWNrUG9pbnRlci0tO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghY29uc3VtZWQpIHtcbiAgICAgICAgICBzdGFjay5wdXNoKHtcbiAgICAgICAgICAgIGRlbGltaXRlcjogXCJ+XCIsXG4gICAgICAgICAgICBkZWxpbVN0cmluZzogXCJ+flwiLFxuICAgICAgICAgICAgY291bnQ6IDIsXG4gICAgICAgICAgICBvdXRwdXQ6IHByb2Nlc3NlZCxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBwcm9jZXNzZWQgPSBcIlwiO1xuICAgICAgICB9XG5cbiAgICAgICAgb2Zmc2V0ICs9IGNhcFswXS5sZW5ndGg7XG4gICAgICAgIHN0cmluZyA9IHN0cmluZy5zdWJzdHIoY2FwWzBdLmxlbmd0aCk7XG4gICAgICAgIGNvbnRpbnVlIG91dGVyO1xuICAgICAgfVxuXG4gICAgICAvLyBQcm9jZXNzICdkZWZhdWx0JyBydWxlXG4gICAgICBjYXAgPSB0aGlzLm1lcmdlZElubGluZUdyYW1tYXIuZGVmYXVsdC5yZWdleHAuZXhlYyhzdHJpbmcpO1xuICAgICAgaWYgKGNhcCkge1xuICAgICAgICBzdHJpbmcgPSBzdHJpbmcuc3Vic3RyKGNhcFswXS5sZW5ndGgpO1xuICAgICAgICBvZmZzZXQgKz0gY2FwWzBdLmxlbmd0aDtcbiAgICAgICAgcHJvY2Vzc2VkICs9IHRoaXMubWVyZ2VkSW5saW5lR3JhbW1hci5kZWZhdWx0LnJlcGxhY2VtZW50LnJlcGxhY2UoL1xcJChbMS05XSkvZywgKHN0ciwgcDEpID0+IGh0bWxlc2NhcGUoY2FwW3AxXSkpO1xuICAgICAgICBjb250aW51ZSBvdXRlcjtcbiAgICAgIH1cbiAgICAgIHRocm93IFwiSW5maW5pdGUgbG9vcCFcIjtcbiAgICB9XG5cbiAgICB3aGlsZSAoc3RhY2subGVuZ3RoKSB7XG4gICAgICBjb25zdCBlbnRyeSA9IHN0YWNrLnBvcCgpITtcbiAgICAgIHByb2Nlc3NlZCA9IGAke2VudHJ5Lm91dHB1dH0ke2VudHJ5LmRlbGltU3RyaW5nLnN1YnN0cigwLCBlbnRyeS5jb3VudCl9JHtwcm9jZXNzZWR9YDtcbiAgICB9XG5cbiAgICByZXR1cm4gcHJvY2Vzc2VkO1xuICB9XG5cbiAgcHJpdmF0ZSBjb21wdXRlQ29sdW1uKHN0YXJ0Tm9kZTogTm9kZSwgb2Zmc2V0OiBudW1iZXIpOiBudW1iZXIgfCBudWxsIHtcbiAgICBsZXQgbm9kZSA9IHN0YXJ0Tm9kZTtcbiAgICBsZXQgY29sOiBudW1iZXI7XG4gICAgd2hpbGUgKG5vZGUgJiYgbm9kZS5wYXJlbnROb2RlICE9PSB0aGlzLmUpIHtcbiAgICAgIG5vZGUgPSBub2RlLnBhcmVudE5vZGUhO1xuICAgIH1cbiAgICBpZiAobm9kZSA9PT0gbnVsbCkgcmV0dXJuIG51bGw7XG5cbiAgICBpZiAoc3RhcnROb2RlLm5vZGVUeXBlID09PSBOb2RlLlRFWFRfTk9ERSB8fCBvZmZzZXQgPT09IDApIHtcbiAgICAgIGNvbCA9IG9mZnNldDtcbiAgICAgIG5vZGUgPSBzdGFydE5vZGU7XG4gICAgfSBlbHNlIGlmIChvZmZzZXQgPiAwKSB7XG4gICAgICBub2RlID0gc3RhcnROb2RlLmNoaWxkTm9kZXNbb2Zmc2V0IC0gMV07XG4gICAgICBjb2wgPSBub2RlLnRleHRDb250ZW50IS5sZW5ndGg7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbCA9IDA7XG4gICAgICBub2RlID0gc3RhcnROb2RlO1xuICAgIH1cbiAgICB3aGlsZSAobm9kZS5wYXJlbnROb2RlICE9PSB0aGlzLmUpIHtcbiAgICAgIGlmIChub2RlLnByZXZpb3VzU2libGluZykge1xuICAgICAgICBub2RlID0gbm9kZS5wcmV2aW91c1NpYmxpbmc7XG4gICAgICAgIGNvbCArPSBub2RlLnRleHRDb250ZW50IS5sZW5ndGg7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBub2RlID0gbm9kZS5wYXJlbnROb2RlIGFzIHVua25vd24gYXMgQ2hpbGROb2RlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gY29sO1xuICB9XG5cbiAgcHJpdmF0ZSBjb21wdXRlTm9kZUFuZE9mZnNldChyb3c6IG51bWJlciwgY29sOiBudW1iZXIsIGJpbmRSaWdodDogYm9vbGVhbiA9IGZhbHNlKToge25vZGU6IE5vZGUsIG9mZnNldDogbnVtYmVyfSB7XG4gICAgaWYgKHJvdyA+PSB0aGlzLmxpbmVFbGVtZW50cy5sZW5ndGgpIHtcbiAgICAgIHJvdyA9IHRoaXMubGluZUVsZW1lbnRzLmxlbmd0aCAtIDE7XG4gICAgICBjb2wgPSB0aGlzLmxpbmVzW3Jvd10ubGVuZ3RoO1xuICAgIH1cbiAgICBpZiAoY29sID4gdGhpcy5saW5lc1tyb3ddLmxlbmd0aCkge1xuICAgICAgY29sID0gdGhpcy5saW5lc1tyb3ddLmxlbmd0aDtcbiAgICB9XG4gICAgY29uc3QgcGFyZW50Tm9kZSA9IHRoaXMubGluZUVsZW1lbnRzW3Jvd10gYXMgSFRNTEVsZW1lbnQ7XG4gICAgbGV0IG5vZGUgPSBwYXJlbnROb2RlLmZpcnN0Q2hpbGQ7XG5cbiAgICBsZXQgY2hpbGRyZW5Db21wbGV0ZSA9IGZhbHNlO1xuICAgIGxldCBydiA9IHtcbiAgICAgIG5vZGU6IHBhcmVudE5vZGUuZmlyc3RDaGlsZCA/IHBhcmVudE5vZGUuZmlyc3RDaGlsZCA6IHBhcmVudE5vZGUsXG4gICAgICBvZmZzZXQ6IDAsXG4gICAgfTtcblxuICAgIHdoaWxlIChub2RlICE9PSBwYXJlbnROb2RlKSB7XG4gICAgICBpZiAoIWNoaWxkcmVuQ29tcGxldGUgJiYgbm9kZSEubm9kZVR5cGUgPT09IE5vZGUuVEVYVF9OT0RFKSB7XG4gICAgICAgIGlmIChub2RlIS5ub2RlVmFsdWUhLmxlbmd0aCA+PSBjb2wpIHtcbiAgICAgICAgICBpZiAoYmluZFJpZ2h0ICYmIG5vZGUhLm5vZGVWYWx1ZSEubGVuZ3RoID09PSBjb2wpIHtcbiAgICAgICAgICAgIHJ2ID0geyBub2RlOiBub2RlISwgb2Zmc2V0OiBjb2wgfTtcbiAgICAgICAgICAgIGNvbCA9IDA7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB7IG5vZGU6IG5vZGUhLCBvZmZzZXQ6IGNvbCB9O1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb2wgLT0gbm9kZSEubm9kZVZhbHVlIS5sZW5ndGg7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICghY2hpbGRyZW5Db21wbGV0ZSAmJiBub2RlIS5maXJzdENoaWxkKSB7XG4gICAgICAgIG5vZGUgPSBub2RlIS5maXJzdENoaWxkO1xuICAgICAgfSBlbHNlIGlmIChub2RlIS5uZXh0U2libGluZykge1xuICAgICAgICBjaGlsZHJlbkNvbXBsZXRlID0gZmFsc2U7XG4gICAgICAgIG5vZGUgPSBub2RlIS5uZXh0U2libGluZztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNoaWxkcmVuQ29tcGxldGUgPSB0cnVlO1xuICAgICAgICBub2RlID0gbm9kZSEucGFyZW50Tm9kZSBhcyB1bmtub3duIGFzIENoaWxkTm9kZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcnY7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZUxpbmVDb250ZW50c0FuZEZvcm1hdHRpbmcoKTogdm9pZCB7XG4gICAgdGhpcy5jbGVhckRpcnR5RmxhZygpO1xuICAgIHRoaXMudXBkYXRlTGluZUNvbnRlbnRzKCk7XG4gICAgdGhpcy51cGRhdGVGb3JtYXR0aW5nKCk7XG4gIH1cblxuICBwcml2YXRlIGNsZWFyRGlydHlGbGFnKCk6IHZvaWQge1xuICAgIHRoaXMubGluZURpcnR5ID0gbmV3IEFycmF5KHRoaXMubGluZXMubGVuZ3RoKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMubGluZURpcnR5Lmxlbmd0aDsgaSsrKSB7XG4gICAgICB0aGlzLmxpbmVEaXJ0eVtpXSA9IGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlTGluZUNvbnRlbnRzKCk6IHZvaWQge1xuICAgIGxldCBsaW5lRGVsdGEgPSB0aGlzLmUhLmNoaWxkRWxlbWVudENvdW50IC0gdGhpcy5saW5lcy5sZW5ndGg7XG4gICAgaWYgKGxpbmVEZWx0YSkge1xuICAgICAgbGV0IGZpcnN0Q2hhbmdlZExpbmUgPSAwO1xuICAgICAgd2hpbGUgKFxuICAgICAgICBmaXJzdENoYW5nZWRMaW5lIDw9IHRoaXMubGluZXMubGVuZ3RoICYmXG4gICAgICAgIGZpcnN0Q2hhbmdlZExpbmUgPD0gdGhpcy5saW5lRWxlbWVudHMubGVuZ3RoICYmXG4gICAgICAgIHRoaXMubGluZUVsZW1lbnRzW2ZpcnN0Q2hhbmdlZExpbmVdICYmXG4gICAgICAgIHRoaXMubGluZXNbZmlyc3RDaGFuZ2VkTGluZV0gPT09ICh0aGlzLmxpbmVFbGVtZW50c1tmaXJzdENoYW5nZWRMaW5lXSBhcyBIVE1MRWxlbWVudCkudGV4dENvbnRlbnQgJiZcbiAgICAgICAgdGhpcy5saW5lVHlwZXNbZmlyc3RDaGFuZ2VkTGluZV0gPT09ICh0aGlzLmxpbmVFbGVtZW50c1tmaXJzdENoYW5nZWRMaW5lXSBhcyBIVE1MRWxlbWVudCkuY2xhc3NOYW1lXG4gICAgICApIHtcbiAgICAgICAgZmlyc3RDaGFuZ2VkTGluZSsrO1xuICAgICAgfVxuXG4gICAgICBsZXQgbGFzdENoYW5nZWRMaW5lID0gLTE7XG4gICAgICB3aGlsZSAoXG4gICAgICAgIC1sYXN0Q2hhbmdlZExpbmUgPCB0aGlzLmxpbmVzLmxlbmd0aCAmJlxuICAgICAgICAtbGFzdENoYW5nZWRMaW5lIDwgdGhpcy5saW5lRWxlbWVudHMubGVuZ3RoICYmXG4gICAgICAgIHRoaXMubGluZXNbdGhpcy5saW5lcy5sZW5ndGggKyBsYXN0Q2hhbmdlZExpbmVdID09PVxuICAgICAgICAgICh0aGlzLmxpbmVFbGVtZW50c1t0aGlzLmxpbmVFbGVtZW50cy5sZW5ndGggKyBsYXN0Q2hhbmdlZExpbmVdIGFzIEhUTUxFbGVtZW50KS50ZXh0Q29udGVudCAmJlxuICAgICAgICB0aGlzLmxpbmVUeXBlc1t0aGlzLmxpbmVzLmxlbmd0aCArIGxhc3RDaGFuZ2VkTGluZV0gPT09XG4gICAgICAgICAgKHRoaXMubGluZUVsZW1lbnRzW3RoaXMubGluZUVsZW1lbnRzLmxlbmd0aCArIGxhc3RDaGFuZ2VkTGluZV0gYXMgSFRNTEVsZW1lbnQpLmNsYXNzTmFtZVxuICAgICAgKSB7XG4gICAgICAgIGxhc3RDaGFuZ2VkTGluZS0tO1xuICAgICAgfVxuXG4gICAgICBsZXQgbGluZXNUb0RlbGV0ZSA9IHRoaXMubGluZXMubGVuZ3RoICsgbGFzdENoYW5nZWRMaW5lICsgMSAtIGZpcnN0Q2hhbmdlZExpbmU7XG4gICAgICBpZiAobGluZXNUb0RlbGV0ZSA8IC1saW5lRGVsdGEpIGxpbmVzVG9EZWxldGUgPSAtbGluZURlbHRhO1xuICAgICAgaWYgKGxpbmVzVG9EZWxldGUgPCAwKSBsaW5lc1RvRGVsZXRlID0gMDtcblxuICAgICAgbGV0IGxpbmVzVG9BZGQgPSBbXTtcbiAgICAgIGZvciAobGV0IGwgPSAwOyBsIDwgbGluZXNUb0RlbGV0ZSArIGxpbmVEZWx0YTsgbCsrKSB7XG4gICAgICAgIGxpbmVzVG9BZGQucHVzaCgodGhpcy5saW5lRWxlbWVudHNbZmlyc3RDaGFuZ2VkTGluZSArIGxdIGFzIEhUTUxFbGVtZW50KS50ZXh0Q29udGVudCB8fCBcIlwiKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuc3BsaWNlTGluZXMoZmlyc3RDaGFuZ2VkTGluZSwgbGluZXNUb0RlbGV0ZSwgbGluZXNUb0FkZCwgZmFsc2UpO1xuICAgIH0gZWxzZSB7XG4gICAgICBmb3IgKGxldCBsaW5lID0gMDsgbGluZSA8IHRoaXMubGluZUVsZW1lbnRzLmxlbmd0aDsgbGluZSsrKSB7XG4gICAgICAgIGxldCBlID0gdGhpcy5saW5lRWxlbWVudHNbbGluZV0gYXMgSFRNTEVsZW1lbnQ7XG4gICAgICAgIGxldCBjdCA9IGUudGV4dENvbnRlbnQgfHwgXCJcIjtcbiAgICAgICAgaWYgKHRoaXMubGluZXNbbGluZV0gIT09IGN0IHx8IHRoaXMubGluZVR5cGVzW2xpbmVdICE9PSBlLmNsYXNzTmFtZSkge1xuICAgICAgICAgIHRoaXMubGluZXNbbGluZV0gPSBjdDtcbiAgICAgICAgICB0aGlzLmxpbmVUeXBlc1tsaW5lXSA9IGUuY2xhc3NOYW1lO1xuICAgICAgICAgIHRoaXMubGluZURpcnR5W2xpbmVdID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgcHJvY2Vzc05ld1BhcmFncmFwaChzZWw6IFBvc2l0aW9uKTogdm9pZCB7XG4gICAgaWYgKCFzZWwpIHJldHVybjtcblxuICAgIHRoaXMudXBkYXRlTGluZUNvbnRlbnRzKCk7XG5cbiAgICBsZXQgY29udGludWFibGVUeXBlOiBzdHJpbmcgfCBmYWxzZSA9IGZhbHNlO1xuICAgIGxldCBjaGVja0xpbmUgPSBzZWwuY29sID4gMCA/IHNlbC5yb3cgOiBzZWwucm93IC0gMTtcbiAgICBzd2l0Y2ggKHRoaXMubGluZVR5cGVzW2NoZWNrTGluZV0pIHtcbiAgICAgIGNhc2UgXCJUTVVMXCI6XG4gICAgICAgIGNvbnRpbnVhYmxlVHlwZSA9IFwiVE1VTFwiO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgXCJUTU9MXCI6XG4gICAgICAgIGNvbnRpbnVhYmxlVHlwZSA9IFwiVE1PTFwiO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgXCJUTUluZGVudGVkQ29kZVwiOlxuICAgICAgICBjb250aW51YWJsZVR5cGUgPSBcIlRNSW5kZW50ZWRDb2RlXCI7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIGxldCBsaW5lcyA9IHRoaXMubGluZXNbc2VsLnJvd10ucmVwbGFjZSgvXFxuXFxuJC8sIFwiXFxuXCIpLnNwbGl0KC8oPzpcXHJcXG58XFxufFxccikvKTtcbiAgICBpZiAobGluZXMubGVuZ3RoID4gMSkge1xuICAgICAgdGhpcy5zcGxpY2VMaW5lcyhzZWwucm93LCAxLCBsaW5lcywgdHJ1ZSk7XG4gICAgICBzZWwucm93Kys7XG4gICAgICBzZWwuY29sID0gMDtcbiAgICB9XG5cbiAgICBpZiAoY29udGludWFibGVUeXBlKSB7XG4gICAgICBsZXQgY2FwdHVyZSA9IGxpbmVHcmFtbWFyW2NvbnRpbnVhYmxlVHlwZV0ucmVnZXhwLmV4ZWModGhpcy5saW5lc1tzZWwucm93IC0gMV0pO1xuICAgICAgaWYgKGNhcHR1cmUpIHtcbiAgICAgICAgaWYgKGNhcHR1cmVbMl0pIHtcbiAgICAgICAgICBpZiAoY29udGludWFibGVUeXBlID09PSBcIlRNT0xcIikge1xuICAgICAgICAgICAgY2FwdHVyZVsxXSA9IGNhcHR1cmVbMV0ucmVwbGFjZSgvXFxkezEsOX0vLCAocmVzdWx0KSA9PiB7XG4gICAgICAgICAgICAgIHJldHVybiAocGFyc2VJbnQocmVzdWx0KSArIDEpLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5saW5lc1tzZWwucm93XSA9IGAke2NhcHR1cmVbMV19JHt0aGlzLmxpbmVzW3NlbC5yb3ddfWA7XG4gICAgICAgICAgdGhpcy5saW5lRGlydHlbc2VsLnJvd10gPSB0cnVlO1xuICAgICAgICAgIHNlbC5jb2wgPSBjYXB0dXJlWzFdLmxlbmd0aDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmxpbmVzW3NlbC5yb3cgLSAxXSA9IFwiXCI7XG4gICAgICAgICAgdGhpcy5saW5lRGlydHlbc2VsLnJvdyAtIDFdID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLnVwZGF0ZUZvcm1hdHRpbmcoKTtcbiAgfVxuXG4gIHByaXZhdGUgc3BsaWNlTGluZXMoXG4gICAgc3RhcnRMaW5lOiBudW1iZXIsXG4gICAgbGluZXNUb0RlbGV0ZTogbnVtYmVyID0gMCxcbiAgICBsaW5lc1RvSW5zZXJ0OiBzdHJpbmdbXSA9IFtdLFxuICAgIGFkanVzdExpbmVFbGVtZW50czogYm9vbGVhbiA9IHRydWVcbiAgKTogdm9pZCB7XG4gICAgaWYgKGFkanVzdExpbmVFbGVtZW50cykge1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsaW5lc1RvRGVsZXRlOyBpKyspIHtcbiAgICAgICAgdGhpcy5lIS5yZW1vdmVDaGlsZCh0aGlzLmUhLmNoaWxkTm9kZXNbc3RhcnRMaW5lXSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgbGV0IGluc2VydGVkQmxhbmsgPSBbXTtcbiAgICBsZXQgaW5zZXJ0ZWREaXJ0eSA9IFtdO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsaW5lc1RvSW5zZXJ0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICBpbnNlcnRlZEJsYW5rLnB1c2goXCJcIik7XG4gICAgICBpbnNlcnRlZERpcnR5LnB1c2godHJ1ZSk7XG4gICAgICBpZiAoYWRqdXN0TGluZUVsZW1lbnRzKSB7XG4gICAgICAgIGlmICh0aGlzLmUhLmNoaWxkTm9kZXNbc3RhcnRMaW5lXSlcbiAgICAgICAgICB0aGlzLmUhLmluc2VydEJlZm9yZShkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpLCB0aGlzLmUhLmNoaWxkTm9kZXNbc3RhcnRMaW5lXSk7XG4gICAgICAgIGVsc2UgdGhpcy5lIS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmxpbmVzLnNwbGljZShzdGFydExpbmUsIGxpbmVzVG9EZWxldGUsIC4uLmxpbmVzVG9JbnNlcnQpO1xuICAgIHRoaXMubGluZVR5cGVzLnNwbGljZShzdGFydExpbmUsIGxpbmVzVG9EZWxldGUsIC4uLmluc2VydGVkQmxhbmspO1xuICAgIHRoaXMubGluZURpcnR5LnNwbGljZShzdGFydExpbmUsIGxpbmVzVG9EZWxldGUsIC4uLmluc2VydGVkRGlydHkpO1xuICB9XG5cbiAgcHJpdmF0ZSBmaXhOb2RlSGllcmFyY2h5KCk6IHZvaWQge1xuICAgIGNvbnN0IG9yaWdpbmFsQ2hpbGRyZW4gPSBBcnJheS5mcm9tKHRoaXMuZSEuY2hpbGROb2Rlcyk7XG5cbiAgICBjb25zdCByZXBsYWNlQ2hpbGQgPSAoY2hpbGQ6IE5vZGUsIC4uLm5ld0NoaWxkcmVuOiBOb2RlW10pID0+IHtcbiAgICAgIGNvbnN0IHBhcmVudCA9IGNoaWxkLnBhcmVudEVsZW1lbnQhO1xuICAgICAgY29uc3QgbmV4dFNpYmxpbmcgPSBjaGlsZC5uZXh0U2libGluZztcbiAgICAgIHBhcmVudC5yZW1vdmVDaGlsZChjaGlsZCk7XG4gICAgICBuZXdDaGlsZHJlbi5mb3JFYWNoKChuZXdDaGlsZCkgPT5cbiAgICAgICAgbmV4dFNpYmxpbmcgPyBwYXJlbnQuaW5zZXJ0QmVmb3JlKG5ld0NoaWxkLCBuZXh0U2libGluZykgOiBwYXJlbnQuYXBwZW5kQ2hpbGQobmV3Q2hpbGQpXG4gICAgICApO1xuICAgIH07XG5cbiAgICBvcmlnaW5hbENoaWxkcmVuLmZvckVhY2goKGNoaWxkKSA9PiB7XG4gICAgICBpZiAoY2hpbGQubm9kZVR5cGUgIT09IE5vZGUuRUxFTUVOVF9OT0RFIHx8IChjaGlsZCBhcyBIVE1MRWxlbWVudCkudGFnTmFtZSAhPT0gXCJESVZcIikge1xuICAgICAgICBjb25zdCBkaXZXcmFwcGVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICAgICAgcmVwbGFjZUNoaWxkKGNoaWxkLCBkaXZXcmFwcGVyKTtcbiAgICAgICAgZGl2V3JhcHBlci5hcHBlbmRDaGlsZChjaGlsZCk7XG4gICAgICB9IGVsc2UgaWYgKGNoaWxkLmNoaWxkTm9kZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIGNoaWxkLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJiclwiKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBncmFuZENoaWxkcmVuID0gQXJyYXkuZnJvbShjaGlsZC5jaGlsZE5vZGVzKTtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIGdyYW5kQ2hpbGRyZW4uc29tZShcbiAgICAgICAgICAgIChncmFuZENoaWxkKSA9PlxuICAgICAgICAgICAgICBncmFuZENoaWxkLm5vZGVUeXBlID09PSBOb2RlLkVMRU1FTlRfTk9ERSAmJiAoZ3JhbmRDaGlsZCBhcyBIVE1MRWxlbWVudCkudGFnTmFtZSA9PT0gXCJESVZcIlxuICAgICAgICAgIClcbiAgICAgICAgKSB7XG4gICAgICAgICAgcmV0dXJuIHJlcGxhY2VDaGlsZChjaGlsZCwgLi4uZ3JhbmRDaGlsZHJlbik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgcGFyc2VMaW5rT3JJbWFnZShvcmlnaW5hbFN0cmluZzogc3RyaW5nLCBpc0ltYWdlOiBib29sZWFuKToge291dHB1dDogc3RyaW5nLCBjaGFyQ291bnQ6IG51bWJlcn0gfCBmYWxzZSB7XG4gICAgLy8gU2tpcCB0aGUgb3BlbmluZyBicmFja2V0XG4gICAgbGV0IHRleHRPZmZzZXQgPSBpc0ltYWdlID8gMiA6IDE7XG4gICAgbGV0IG9wZW5lciA9IG9yaWdpbmFsU3RyaW5nLnN1YnN0cigwLCB0ZXh0T2Zmc2V0KTtcbiAgICBsZXQgdHlwZSA9IGlzSW1hZ2UgPyBcIlRNSW1hZ2VcIiA6IFwiVE1MaW5rXCI7XG4gICAgbGV0IGN1cnJlbnRPZmZzZXQgPSB0ZXh0T2Zmc2V0O1xuXG4gICAgbGV0IGJyYWNrZXRMZXZlbCA9IDE7XG4gICAgbGV0IGxpbmtUZXh0OiBzdHJpbmcgfCBmYWxzZSA9IGZhbHNlO1xuICAgIGxldCBsaW5rUmVmOiBzdHJpbmcgfCBmYWxzZSA9IGZhbHNlO1xuICAgIGxldCBsaW5rTGFiZWw6IHN0cmluZ1tdID0gW107XG4gICAgbGV0IGxpbmtEZXRhaWxzOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgdGV4dE91dGVyOiB3aGlsZSAoXG4gICAgICBjdXJyZW50T2Zmc2V0IDwgb3JpZ2luYWxTdHJpbmcubGVuZ3RoICYmXG4gICAgICBsaW5rVGV4dCA9PT0gZmFsc2VcbiAgICApIHtcbiAgICAgIGxldCBzdHJpbmcgPSBvcmlnaW5hbFN0cmluZy5zdWJzdHIoY3VycmVudE9mZnNldCk7XG5cbiAgICAgIC8vIENhcHR1cmUgYW55IGVzY2FwZXMgYW5kIGNvZGUgYmxvY2tzIGF0IGN1cnJlbnQgcG9zaXRpb25cbiAgICAgIGZvciAobGV0IHJ1bGUgb2YgW1wiZXNjYXBlXCIsIFwiY29kZVwiLCBcImF1dG9saW5rXCIsIFwiaHRtbFwiXSkge1xuICAgICAgICBsZXQgY2FwID0gdGhpcy5tZXJnZWRJbmxpbmVHcmFtbWFyW3J1bGVdLnJlZ2V4cC5leGVjKHN0cmluZyk7XG4gICAgICAgIGlmIChjYXApIHtcbiAgICAgICAgICBjdXJyZW50T2Zmc2V0ICs9IGNhcFswXS5sZW5ndGg7XG4gICAgICAgICAgY29udGludWUgdGV4dE91dGVyO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIENoZWNrIGZvciBpbWFnZVxuICAgICAgaWYgKHN0cmluZy5tYXRjaCh0aGlzLm1lcmdlZElubGluZUdyYW1tYXIuaW1hZ2VPcGVuLnJlZ2V4cCkpIHtcbiAgICAgICAgYnJhY2tldExldmVsKys7XG4gICAgICAgIGN1cnJlbnRPZmZzZXQgKz0gMjtcbiAgICAgICAgY29udGludWUgdGV4dE91dGVyO1xuICAgICAgfVxuXG4gICAgICAvLyBDaGVjayBmb3IgbGlua1xuICAgICAgaWYgKHN0cmluZy5tYXRjaCh0aGlzLm1lcmdlZElubGluZUdyYW1tYXIubGlua09wZW4ucmVnZXhwKSkge1xuICAgICAgICBicmFja2V0TGV2ZWwrKztcbiAgICAgICAgaWYgKCFpc0ltYWdlKSB7XG4gICAgICAgICAgaWYgKHRoaXMucGFyc2VMaW5rT3JJbWFnZShzdHJpbmcsIGZhbHNlKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjdXJyZW50T2Zmc2V0ICs9IDE7XG4gICAgICAgIGNvbnRpbnVlIHRleHRPdXRlcjtcbiAgICAgIH1cblxuICAgICAgLy8gQ2hlY2sgZm9yIGNsb3NpbmcgYnJhY2tldFxuICAgICAgaWYgKHN0cmluZy5tYXRjaCgvXlxcXS8pKSB7XG4gICAgICAgIGJyYWNrZXRMZXZlbC0tO1xuICAgICAgICBpZiAoYnJhY2tldExldmVsID09PSAwKSB7XG4gICAgICAgICAgbGlua1RleHQgPSBvcmlnaW5hbFN0cmluZy5zdWJzdHIodGV4dE9mZnNldCwgY3VycmVudE9mZnNldCAtIHRleHRPZmZzZXQpO1xuICAgICAgICAgIGN1cnJlbnRPZmZzZXQrKztcbiAgICAgICAgICBjb250aW51ZSB0ZXh0T3V0ZXI7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gTm90aGluZyBtYXRjaGVzLCBwcm9jZWVkIHRvIG5leHQgY2hhclxuICAgICAgY3VycmVudE9mZnNldCsrO1xuICAgIH1cblxuICAgIC8vIERpZCB3ZSBmaW5kIGEgbGluayB0ZXh0P1xuICAgIGlmIChsaW5rVGV4dCA9PT0gZmFsc2UpIHJldHVybiBmYWxzZTtcblxuICAgIC8vIENoZWNrIHdoYXQgdHlwZSBvZiBsaW5rIHRoaXMgaXNcbiAgICBsZXQgbmV4dENoYXIgPSBjdXJyZW50T2Zmc2V0IDwgb3JpZ2luYWxTdHJpbmcubGVuZ3RoID8gb3JpZ2luYWxTdHJpbmcuc3Vic3RyKGN1cnJlbnRPZmZzZXQsIDEpIDogXCJcIjtcblxuICAgIC8vIFJFRkVSRU5DRSBMSU5LU1xuICAgIGlmIChuZXh0Q2hhciA9PT0gXCJbXCIpIHtcbiAgICAgIGxldCBzdHJpbmcgPSBvcmlnaW5hbFN0cmluZy5zdWJzdHIoY3VycmVudE9mZnNldCk7XG4gICAgICBsZXQgY2FwID0gdGhpcy5tZXJnZWRJbmxpbmVHcmFtbWFyLmxpbmtMYWJlbC5yZWdleHAuZXhlYyhzdHJpbmcpO1xuICAgICAgaWYgKGNhcCkge1xuICAgICAgICBjdXJyZW50T2Zmc2V0ICs9IGNhcFswXS5sZW5ndGg7XG4gICAgICAgIGxpbmtMYWJlbC5wdXNoKGNhcFsxXSwgY2FwWzJdLCBjYXBbM10pO1xuICAgICAgICBpZiAoY2FwW3RoaXMubWVyZ2VkSW5saW5lR3JhbW1hci5saW5rTGFiZWwubGFiZWxQbGFjZWhvbGRlciFdKSB7XG4gICAgICAgICAgbGlua1JlZiA9IGNhcFt0aGlzLm1lcmdlZElubGluZUdyYW1tYXIubGlua0xhYmVsLmxhYmVsUGxhY2Vob2xkZXIhXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBsaW5rUmVmID0gbGlua1RleHQudHJpbSgpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChuZXh0Q2hhciAhPT0gXCIoXCIpIHtcbiAgICAgIC8vIFNob3J0Y3V0IHJlZiBsaW5rXG4gICAgICBsaW5rUmVmID0gbGlua1RleHQudHJpbSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBJTkxJTkUgTElOS1NcbiAgICAgIGN1cnJlbnRPZmZzZXQrKztcbiAgICAgIGxldCBwYXJlbnRoZXNpc0xldmVsID0gMTtcblxuICAgICAgaW5saW5lT3V0ZXI6IHdoaWxlIChjdXJyZW50T2Zmc2V0IDwgb3JpZ2luYWxTdHJpbmcubGVuZ3RoICYmIHBhcmVudGhlc2lzTGV2ZWwgPiAwKSB7XG4gICAgICAgIGxldCBzdHJpbmcgPSBvcmlnaW5hbFN0cmluZy5zdWJzdHIoY3VycmVudE9mZnNldCk7XG5cbiAgICAgICAgLy8gUHJvY2VzcyB3aGl0ZXNwYWNlXG4gICAgICAgIGxldCBjYXAgPSAvXlxccysvLmV4ZWMoc3RyaW5nKTtcbiAgICAgICAgaWYgKGNhcCkge1xuICAgICAgICAgIHN3aXRjaCAobGlua0RldGFpbHMubGVuZ3RoKSB7XG4gICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgIGxpbmtEZXRhaWxzLnB1c2goY2FwWzBdKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgIGxpbmtEZXRhaWxzLnB1c2goY2FwWzBdKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgIGlmIChsaW5rRGV0YWlsc1swXS5tYXRjaCgvPC8pKSB7XG4gICAgICAgICAgICAgICAgbGlua0RldGFpbHNbMV0gPSBsaW5rRGV0YWlsc1sxXS5jb25jYXQoY2FwWzBdKTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAocGFyZW50aGVzaXNMZXZlbCAhPT0gMSkgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIGxpbmtEZXRhaWxzLnB1c2goXCJcIik7XG4gICAgICAgICAgICAgICAgbGlua0RldGFpbHMucHVzaChjYXBbMF0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgICBsaW5rRGV0YWlscy5wdXNoKGNhcFswXSk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSA0OlxuICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgICAgIGxpbmtEZXRhaWxzLnB1c2goXCJcIik7XG4gICAgICAgICAgICBjYXNlIDY6XG4gICAgICAgICAgICAgIGxpbmtEZXRhaWxzWzVdID0gbGlua0RldGFpbHNbNV0uY29uY2F0KGNhcFswXSk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSA3OlxuICAgICAgICAgICAgICBsaW5rRGV0YWlsc1s2XSA9IGxpbmtEZXRhaWxzWzZdLmNvbmNhdChjYXBbMF0pO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY3VycmVudE9mZnNldCArPSBjYXBbMF0ubGVuZ3RoO1xuICAgICAgICAgIGNvbnRpbnVlIGlubGluZU91dGVyO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gUHJvY2VzcyBiYWNrc2xhc2ggZXNjYXBlc1xuICAgICAgICBjYXAgPSB0aGlzLm1lcmdlZElubGluZUdyYW1tYXIuZXNjYXBlLnJlZ2V4cC5leGVjKHN0cmluZyk7XG4gICAgICAgIGlmIChjYXApIHtcbiAgICAgICAgICBzd2l0Y2ggKGxpbmtEZXRhaWxzLmxlbmd0aCkge1xuICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICBsaW5rRGV0YWlscy5wdXNoKFwiXCIpO1xuICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICBsaW5rRGV0YWlscy5wdXNoKGNhcFswXSk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICBsaW5rRGV0YWlsc1sxXSA9IGxpbmtEZXRhaWxzWzFdLmNvbmNhdChjYXBbMF0pO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgY2FzZSA0OlxuICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgICAgIGxpbmtEZXRhaWxzLnB1c2goXCJcIik7XG4gICAgICAgICAgICBjYXNlIDY6XG4gICAgICAgICAgICAgIGxpbmtEZXRhaWxzWzVdID0gbGlua0RldGFpbHNbNV0uY29uY2F0KGNhcFswXSk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjdXJyZW50T2Zmc2V0ICs9IGNhcFswXS5sZW5ndGg7XG4gICAgICAgICAgY29udGludWUgaW5saW5lT3V0ZXI7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBQcm9jZXNzIG9wZW5pbmcgYW5nbGUgYnJhY2tldFxuICAgICAgICBpZiAobGlua0RldGFpbHMubGVuZ3RoIDwgMiAmJiBzdHJpbmcubWF0Y2goL148LykpIHtcbiAgICAgICAgICBpZiAobGlua0RldGFpbHMubGVuZ3RoID09PSAwKSBsaW5rRGV0YWlscy5wdXNoKFwiXCIpO1xuICAgICAgICAgIGxpbmtEZXRhaWxzWzBdID0gbGlua0RldGFpbHNbMF0uY29uY2F0KFwiPFwiKTtcbiAgICAgICAgICBjdXJyZW50T2Zmc2V0Kys7XG4gICAgICAgICAgY29udGludWUgaW5saW5lT3V0ZXI7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBQcm9jZXNzIGNsb3NpbmcgYW5nbGUgYnJhY2tldFxuICAgICAgICBpZiAoKGxpbmtEZXRhaWxzLmxlbmd0aCA9PT0gMSB8fCBsaW5rRGV0YWlscy5sZW5ndGggPT09IDIpICYmIHN0cmluZy5tYXRjaCgvXj4vKSkge1xuICAgICAgICAgIGlmIChsaW5rRGV0YWlscy5sZW5ndGggPT09IDEpIGxpbmtEZXRhaWxzLnB1c2goXCJcIik7XG4gICAgICAgICAgbGlua0RldGFpbHMucHVzaChcIj5cIik7XG4gICAgICAgICAgY3VycmVudE9mZnNldCsrO1xuICAgICAgICAgIGNvbnRpbnVlIGlubGluZU91dGVyO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gUHJvY2VzcyBub24tcGFyZW50aGVzaXMgZGVsaW1pdGVyIGZvciB0aXRsZVxuICAgICAgICBjYXAgPSAvXltcIiddLy5leGVjKHN0cmluZyk7XG4gICAgICAgIGlmIChjYXAgJiYgKGxpbmtEZXRhaWxzLmxlbmd0aCA9PT0gMCB8fCBsaW5rRGV0YWlscy5sZW5ndGggPT09IDEgfHwgbGlua0RldGFpbHMubGVuZ3RoID09PSA0KSkge1xuICAgICAgICAgIHdoaWxlIChsaW5rRGV0YWlscy5sZW5ndGggPCA0KSBsaW5rRGV0YWlscy5wdXNoKFwiXCIpO1xuICAgICAgICAgIGxpbmtEZXRhaWxzLnB1c2goY2FwWzBdKTtcbiAgICAgICAgICBjdXJyZW50T2Zmc2V0Kys7XG4gICAgICAgICAgY29udGludWUgaW5saW5lT3V0ZXI7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY2FwICYmIChsaW5rRGV0YWlscy5sZW5ndGggPT09IDUgfHwgbGlua0RldGFpbHMubGVuZ3RoID09PSA2KSAmJiBsaW5rRGV0YWlsc1s0XSA9PT0gY2FwWzBdKSB7XG4gICAgICAgICAgaWYgKGxpbmtEZXRhaWxzLmxlbmd0aCA9PT0gNSkgbGlua0RldGFpbHMucHVzaChcIlwiKTtcbiAgICAgICAgICBsaW5rRGV0YWlscy5wdXNoKGNhcFswXSk7XG4gICAgICAgICAgY3VycmVudE9mZnNldCsrO1xuICAgICAgICAgIGNvbnRpbnVlIGlubGluZU91dGVyO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gUHJvY2VzcyBvcGVuaW5nIHBhcmVudGhlc2lzXG4gICAgICAgIGlmIChzdHJpbmcubWF0Y2goL15cXCgvKSkge1xuICAgICAgICAgIHN3aXRjaCAobGlua0RldGFpbHMubGVuZ3RoKSB7XG4gICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgIGxpbmtEZXRhaWxzLnB1c2goXCJcIik7XG4gICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgIGxpbmtEZXRhaWxzLnB1c2goXCJcIik7XG4gICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgIGxpbmtEZXRhaWxzWzFdID0gbGlua0RldGFpbHNbMV0uY29uY2F0KFwiKFwiKTtcbiAgICAgICAgICAgICAgaWYgKCFsaW5rRGV0YWlsc1swXS5tYXRjaCgvPCQvKSkgcGFyZW50aGVzaXNMZXZlbCsrO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgICAgbGlua0RldGFpbHMucHVzaChcIlwiKTtcbiAgICAgICAgICAgIGNhc2UgNDpcbiAgICAgICAgICAgICAgbGlua0RldGFpbHMucHVzaChcIihcIik7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSA1OlxuICAgICAgICAgICAgICBsaW5rRGV0YWlscy5wdXNoKFwiXCIpO1xuICAgICAgICAgICAgY2FzZSA2OlxuICAgICAgICAgICAgICBpZiAobGlua0RldGFpbHNbNF0gPT09IFwiKFwiKSByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgIGxpbmtEZXRhaWxzWzVdID0gbGlua0RldGFpbHNbNV0uY29uY2F0KFwiKFwiKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICAgIGN1cnJlbnRPZmZzZXQrKztcbiAgICAgICAgICBjb250aW51ZSBpbmxpbmVPdXRlcjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFByb2Nlc3MgY2xvc2luZyBwYXJlbnRoZXNpc1xuICAgICAgICBpZiAoc3RyaW5nLm1hdGNoKC9eXFwpLykpIHtcbiAgICAgICAgICBpZiAobGlua0RldGFpbHMubGVuZ3RoIDw9IDIpIHtcbiAgICAgICAgICAgIHdoaWxlIChsaW5rRGV0YWlscy5sZW5ndGggPCAyKSBsaW5rRGV0YWlscy5wdXNoKFwiXCIpO1xuICAgICAgICAgICAgaWYgKCFsaW5rRGV0YWlsc1swXS5tYXRjaCgvPCQvKSkgcGFyZW50aGVzaXNMZXZlbC0tO1xuICAgICAgICAgICAgaWYgKHBhcmVudGhlc2lzTGV2ZWwgPiAwKSB7XG4gICAgICAgICAgICAgIGxpbmtEZXRhaWxzWzFdID0gbGlua0RldGFpbHNbMV0uY29uY2F0KFwiKVwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2UgaWYgKGxpbmtEZXRhaWxzLmxlbmd0aCA9PT0gNSB8fCBsaW5rRGV0YWlscy5sZW5ndGggPT09IDYpIHtcbiAgICAgICAgICAgIGlmIChsaW5rRGV0YWlsc1s0XSA9PT0gXCIoXCIpIHtcbiAgICAgICAgICAgICAgaWYgKGxpbmtEZXRhaWxzLmxlbmd0aCA9PT0gNSkgbGlua0RldGFpbHMucHVzaChcIlwiKTtcbiAgICAgICAgICAgICAgbGlua0RldGFpbHMucHVzaChcIilcIik7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBpZiAobGlua0RldGFpbHMubGVuZ3RoID09PSA1KSBsaW5rRGV0YWlscy5wdXNoKFwiKVwiKTtcbiAgICAgICAgICAgICAgZWxzZSBsaW5rRGV0YWlsc1s1XSA9IGxpbmtEZXRhaWxzWzVdLmNvbmNhdChcIilcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHBhcmVudGhlc2lzTGV2ZWwtLTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAocGFyZW50aGVzaXNMZXZlbCA9PT0gMCkge1xuICAgICAgICAgICAgd2hpbGUgKGxpbmtEZXRhaWxzLmxlbmd0aCA8IDcpIGxpbmtEZXRhaWxzLnB1c2goXCJcIik7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY3VycmVudE9mZnNldCsrO1xuICAgICAgICAgIGNvbnRpbnVlIGlubGluZU91dGVyO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQW55IG9sZCBjaGFyYWN0ZXJcbiAgICAgICAgY2FwID0gL14uLy5leGVjKHN0cmluZyk7XG4gICAgICAgIGlmIChjYXApIHtcbiAgICAgICAgICBzd2l0Y2ggKGxpbmtEZXRhaWxzLmxlbmd0aCkge1xuICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICBsaW5rRGV0YWlscy5wdXNoKFwiXCIpO1xuICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICBsaW5rRGV0YWlscy5wdXNoKGNhcFswXSk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICBsaW5rRGV0YWlsc1sxXSA9IGxpbmtEZXRhaWxzWzFdLmNvbmNhdChjYXBbMF0pO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgY2FzZSA0OlxuICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgICAgIGxpbmtEZXRhaWxzLnB1c2goXCJcIik7XG4gICAgICAgICAgICBjYXNlIDY6XG4gICAgICAgICAgICAgIGxpbmtEZXRhaWxzWzVdID0gbGlua0RldGFpbHNbNV0uY29uY2F0KGNhcFswXSk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjdXJyZW50T2Zmc2V0ICs9IGNhcFswXS5sZW5ndGg7XG4gICAgICAgICAgY29udGludWUgaW5saW5lT3V0ZXI7XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgXCJJbmZpbml0ZSBsb29wXCI7XG4gICAgICB9XG4gICAgICBpZiAocGFyZW50aGVzaXNMZXZlbCA+IDApIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAobGlua1JlZiAhPT0gZmFsc2UpIHtcbiAgICAgIC8vIFJlZmVyZW5jZSBsaW5rOyBjaGVjayB0aGF0IGxpbmtSZWYgaXMgdmFsaWRcbiAgICAgIGxldCB2YWxpZCA9IGZhbHNlO1xuICAgICAgZm9yIChsZXQgbGFiZWwgb2YgdGhpcy5saW5rTGFiZWxzKSB7XG4gICAgICAgIGlmIChsYWJlbCA9PT0gbGlua1JlZikge1xuICAgICAgICAgIHZhbGlkID0gdHJ1ZTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgbGV0IGxhYmVsQ2xhc3MgPSB2YWxpZCA/IFwiVE1MaW5rTGFiZWwgVE1MaW5rTGFiZWxfVmFsaWRcIiA6IFwiVE1MaW5rTGFiZWwgVE1MaW5rTGFiZWxfSW52YWxpZFwiO1xuICAgICAgbGV0IG91dHB1dCA9IGA8c3BhbiBjbGFzcz1cIlRNTWFyayBUTU1hcmtfJHt0eXBlfVwiPiR7b3BlbmVyfTwvc3Bhbj48c3BhbiBjbGFzcz1cIiR7dHlwZX0gJHtcbiAgICAgICAgbGlua0xhYmVsLmxlbmd0aCA8IDMgfHwgIWxpbmtMYWJlbFsxXSA/IGxhYmVsQ2xhc3MgOiBcIlwiXG4gICAgICB9XCI+JHt0aGlzLnByb2Nlc3NJbmxpbmVTdHlsZXMobGlua1RleHQpfTwvc3Bhbj48c3BhbiBjbGFzcz1cIlRNTWFyayBUTU1hcmtfJHt0eXBlfVwiPl08L3NwYW4+YDtcblxuICAgICAgaWYgKGxpbmtMYWJlbC5sZW5ndGggPj0gMykge1xuICAgICAgICBvdXRwdXQgPSBvdXRwdXQuY29uY2F0KFxuICAgICAgICAgIGA8c3BhbiBjbGFzcz1cIlRNTWFyayBUTU1hcmtfJHt0eXBlfVwiPiR7bGlua0xhYmVsWzBdfTwvc3Bhbj5gLFxuICAgICAgICAgIGA8c3BhbiBjbGFzcz1cIiR7bGFiZWxDbGFzc31cIj4ke2xpbmtMYWJlbFsxXX08L3NwYW4+YCxcbiAgICAgICAgICBgPHNwYW4gY2xhc3M9XCJUTU1hcmsgVE1NYXJrXyR7dHlwZX1cIj4ke2xpbmtMYWJlbFsyXX08L3NwYW4+YFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgb3V0cHV0OiBvdXRwdXQsXG4gICAgICAgIGNoYXJDb3VudDogY3VycmVudE9mZnNldCxcbiAgICAgIH07XG4gICAgfSBlbHNlIGlmIChsaW5rRGV0YWlscy5sZW5ndGggPiAwKSB7XG4gICAgICAvLyBJbmxpbmUgbGlua1xuICAgICAgd2hpbGUgKGxpbmtEZXRhaWxzLmxlbmd0aCA8IDcpIHtcbiAgICAgICAgbGlua0RldGFpbHMucHVzaChcIlwiKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgb3V0cHV0OiBgPHNwYW4gY2xhc3M9XCJUTU1hcmsgVE1NYXJrXyR7dHlwZX1cIj4ke29wZW5lcn08L3NwYW4+PHNwYW4gY2xhc3M9XCIke3R5cGV9XCI+JHt0aGlzLnByb2Nlc3NJbmxpbmVTdHlsZXMoXG4gICAgICAgICAgbGlua1RleHRcbiAgICAgICAgKX08L3NwYW4+PHNwYW4gY2xhc3M9XCJUTU1hcmsgVE1NYXJrXyR7dHlwZX1cIj5dKCR7XG4gICAgICAgICAgbGlua0RldGFpbHNbMF1cbiAgICAgICAgfTwvc3Bhbj48c3BhbiBjbGFzcz1cIiR7dHlwZX1EZXN0aW5hdGlvblwiPiR7XG4gICAgICAgICAgbGlua0RldGFpbHNbMV1cbiAgICAgICAgfTwvc3Bhbj48c3BhbiBjbGFzcz1cIlRNTWFyayBUTU1hcmtfJHt0eXBlfVwiPiR7bGlua0RldGFpbHNbMl19JHtcbiAgICAgICAgICBsaW5rRGV0YWlsc1szXVxuICAgICAgICB9JHtsaW5rRGV0YWlsc1s0XX08L3NwYW4+PHNwYW4gY2xhc3M9XCIke3R5cGV9VGl0bGVcIj4ke1xuICAgICAgICAgIGxpbmtEZXRhaWxzWzVdXG4gICAgICAgIH08L3NwYW4+PHNwYW4gY2xhc3M9XCJUTU1hcmsgVE1NYXJrXyR7dHlwZX1cIj4ke2xpbmtEZXRhaWxzWzZdfSk8L3NwYW4+YCxcbiAgICAgICAgY2hhckNvdW50OiBjdXJyZW50T2Zmc2V0LFxuICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBwcml2YXRlIGNvbXB1dGVDb21tb25BbmNlc3Rvcihub2RlMTogTm9kZSB8IG51bGwsIG5vZGUyOiBOb2RlIHwgbnVsbCk6IE5vZGUgfCBudWxsIHtcbiAgICBpZiAoIW5vZGUxIHx8ICFub2RlMikgcmV0dXJuIG51bGw7XG4gICAgaWYgKG5vZGUxID09PSBub2RlMikgcmV0dXJuIG5vZGUxO1xuICAgIGNvbnN0IGFuY2VzdHJ5ID0gKG5vZGU6IE5vZGUpID0+IHtcbiAgICAgIGxldCBhbmNlc3RyeSA9IFtdO1xuICAgICAgd2hpbGUgKG5vZGUpIHtcbiAgICAgICAgYW5jZXN0cnkudW5zaGlmdChub2RlKTtcbiAgICAgICAgbm9kZSA9IG5vZGUucGFyZW50Tm9kZSE7XG4gICAgICB9XG4gICAgICByZXR1cm4gYW5jZXN0cnk7XG4gICAgfTtcblxuICAgIGNvbnN0IGFuY2VzdHJ5MSA9IGFuY2VzdHJ5KG5vZGUxKTtcbiAgICBjb25zdCBhbmNlc3RyeTIgPSBhbmNlc3RyeShub2RlMik7XG5cbiAgICBpZiAoYW5jZXN0cnkxWzBdICE9PSBhbmNlc3RyeTJbMF0pIHJldHVybiBudWxsO1xuICAgIGxldCBpO1xuICAgIGZvciAoaSA9IDA7IGFuY2VzdHJ5MVtpXSA9PT0gYW5jZXN0cnkyW2ldOyBpKyspO1xuICAgIHJldHVybiBhbmNlc3RyeTFbaSAtIDFdO1xuICB9XG5cbiAgcHJpdmF0ZSBjb21wdXRlRW5jbG9zaW5nTWFya3VwTm9kZShmb2N1czogUG9zaXRpb24sIGFuY2hvcjogUG9zaXRpb24gfCBudWxsLCBjbGFzc05hbWU6IHN0cmluZyk6IE5vZGUgfCBudWxsIHtcbiAgICBsZXQgbm9kZSA9IG51bGw7XG4gICAgaWYgKCFmb2N1cykgcmV0dXJuIG51bGw7XG4gICAgaWYgKCFhbmNob3IpIHtcbiAgICAgIGNvbnN0IHNlbCA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcbiAgICAgIGlmICghc2VsIHx8ICFzZWwuZm9jdXNOb2RlKSByZXR1cm4gbnVsbDtcbiAgICAgIG5vZGUgPSBzZWwuZm9jdXNOb2RlO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoZm9jdXMucm93ICE9PSBhbmNob3Iucm93KSByZXR1cm4gbnVsbDtcbiAgICAgIGNvbnN0IHNlbCA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcbiAgICAgIGlmICghc2VsKSByZXR1cm4gbnVsbDtcbiAgICAgIG5vZGUgPSB0aGlzLmNvbXB1dGVDb21tb25BbmNlc3RvcihzZWwuZm9jdXNOb2RlLCBzZWwuYW5jaG9yTm9kZSk7XG4gICAgfVxuICAgIGlmICghbm9kZSkgcmV0dXJuIG51bGw7XG4gICAgd2hpbGUgKG5vZGUgIT09IHRoaXMuZSkge1xuICAgICAgaWYgKChub2RlIGFzIEhUTUxFbGVtZW50KS5jbGFzc05hbWUgJiYgKG5vZGUgYXMgSFRNTEVsZW1lbnQpLmNsYXNzTmFtZS5pbmNsdWRlcyhjbGFzc05hbWUpKSByZXR1cm4gbm9kZTtcbiAgICAgIG5vZGUgPSBub2RlLnBhcmVudE5vZGUhO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHB1YmxpYyBnZXRDb21tYW5kU3RhdGUoZm9jdXM6IFBvc2l0aW9uIHwgbnVsbCA9IG51bGwsIGFuY2hvcjogUG9zaXRpb24gfCBudWxsID0gbnVsbCk6IFJlY29yZDxzdHJpbmcsIGJvb2xlYW4gfCBudWxsPiB7XG4gICAgbGV0IGNvbW1hbmRTdGF0ZTogUmVjb3JkPHN0cmluZywgYm9vbGVhbiB8IG51bGw+ID0ge307XG4gICAgaWYgKCFmb2N1cykgZm9jdXMgPSB0aGlzLmdldFNlbGVjdGlvbihmYWxzZSk7XG4gICAgaWYgKCFhbmNob3IpIGFuY2hvciA9IHRoaXMuZ2V0U2VsZWN0aW9uKHRydWUpO1xuICAgIGlmICghZm9jdXMpIHtcbiAgICAgIGZvciAobGV0IGNtZCBpbiBjb21tYW5kcykge1xuICAgICAgICBjb21tYW5kU3RhdGVbY21kXSA9IG51bGw7XG4gICAgICB9XG4gICAgICByZXR1cm4gY29tbWFuZFN0YXRlO1xuICAgIH1cbiAgICBpZiAoIWFuY2hvcikgYW5jaG9yID0gZm9jdXM7XG5cbiAgICBsZXQgc3RhcnQ6IFBvc2l0aW9uLCBlbmQ6IFBvc2l0aW9uO1xuICAgIGlmIChhbmNob3Iucm93IDwgZm9jdXMucm93IHx8IChhbmNob3Iucm93ID09PSBmb2N1cy5yb3cgJiYgYW5jaG9yLmNvbCA8IGZvY3VzLmNvbCkpIHtcbiAgICAgIHN0YXJ0ID0gYW5jaG9yO1xuICAgICAgZW5kID0gZm9jdXM7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0YXJ0ID0gZm9jdXM7XG4gICAgICBlbmQgPSBhbmNob3I7XG4gICAgfVxuICAgIGlmIChlbmQucm93ID4gc3RhcnQucm93ICYmIGVuZC5jb2wgPT09IDApIHtcbiAgICAgIGVuZC5yb3ctLTtcbiAgICAgIGVuZC5jb2wgPSB0aGlzLmxpbmVzW2VuZC5yb3ddLmxlbmd0aDtcbiAgICB9XG5cbiAgICBmb3IgKGxldCBjbWQgaW4gY29tbWFuZHMpIHtcbiAgICAgIGlmIChjb21tYW5kc1tjbWRdLnR5cGUgPT09IFwiaW5saW5lXCIpIHtcbiAgICAgICAgaWYgKCFmb2N1cyB8fCBmb2N1cy5yb3cgIT09IGFuY2hvciEucm93IHx8ICF0aGlzLmlzSW5saW5lRm9ybWF0dGluZ0FsbG93ZWQoKSkge1xuICAgICAgICAgIGNvbW1hbmRTdGF0ZVtjbWRdID0gbnVsbDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb21tYW5kU3RhdGVbY21kXSA9XG4gICAgICAgICAgICAhIXRoaXMuY29tcHV0ZUVuY2xvc2luZ01hcmt1cE5vZGUoZm9jdXMsIGFuY2hvciwgY29tbWFuZHNbY21kXS5jbGFzc05hbWUpIHx8XG4gICAgICAgICAgICAoZm9jdXMuY29sID09PSBhbmNob3IhLmNvbCAmJlxuICAgICAgICAgICAgICAhIXRoaXMubGluZXNbZm9jdXMucm93XS5zdWJzdHIoMCwgZm9jdXMuY29sKS5tYXRjaChjb21tYW5kc1tjbWRdLnVuc2V0LnByZVBhdHRlcm4pICYmXG4gICAgICAgICAgICAgICEhdGhpcy5saW5lc1tmb2N1cy5yb3ddLnN1YnN0cihmb2N1cy5jb2wpLm1hdGNoKGNvbW1hbmRzW2NtZF0udW5zZXQucG9zdFBhdHRlcm4pKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGNvbW1hbmRzW2NtZF0udHlwZSA9PT0gXCJsaW5lXCIpIHtcbiAgICAgICAgaWYgKCFmb2N1cykge1xuICAgICAgICAgIGNvbW1hbmRTdGF0ZVtjbWRdID0gbnVsbDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBsZXQgc3RhdGU6IGJvb2xlYW4gfCBudWxsID0gdGhpcy5saW5lVHlwZXNbc3RhcnQucm93XSA9PT0gY29tbWFuZHNbY21kXS5jbGFzc05hbWU7XG4gICAgICAgICAgZm9yIChsZXQgbGluZSA9IHN0YXJ0LnJvdzsgbGluZSA8PSBlbmQucm93OyBsaW5lKyspIHtcbiAgICAgICAgICAgIGlmICgodGhpcy5saW5lVHlwZXNbbGluZV0gPT09IGNvbW1hbmRzW2NtZF0uY2xhc3NOYW1lKSAhPT0gc3RhdGUpIHtcbiAgICAgICAgICAgICAgc3RhdGUgPSBudWxsO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgY29tbWFuZFN0YXRlW2NtZF0gPSBzdGF0ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gY29tbWFuZFN0YXRlO1xuICB9XG5cbiAgcHVibGljIHNldENvbW1hbmRTdGF0ZShjb21tYW5kOiBzdHJpbmcsIHN0YXRlOiBib29sZWFuKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmlzUmVzdG9yaW5nSGlzdG9yeSkgdGhpcy5wdXNoSGlzdG9yeSgpO1xuICAgIGlmIChjb21tYW5kc1tjb21tYW5kXS50eXBlID09PSBcImlubGluZVwiKSB7XG4gICAgICBsZXQgYW5jaG9yID0gdGhpcy5nZXRTZWxlY3Rpb24odHJ1ZSk7XG4gICAgICBsZXQgZm9jdXMgPSB0aGlzLmdldFNlbGVjdGlvbihmYWxzZSk7XG4gICAgICBpZiAoIWFuY2hvcikgYW5jaG9yID0gZm9jdXM7XG4gICAgICBpZiAoIWFuY2hvcikgcmV0dXJuO1xuICAgICAgaWYgKGFuY2hvci5yb3cgIT09IGZvY3VzIS5yb3cpIHJldHVybjtcbiAgICAgIGlmICghdGhpcy5pc0lubGluZUZvcm1hdHRpbmdBbGxvd2VkKCkpIHJldHVybjtcbiAgICAgIGxldCBtYXJrdXBOb2RlID0gdGhpcy5jb21wdXRlRW5jbG9zaW5nTWFya3VwTm9kZShmb2N1cyEsIGFuY2hvciwgY29tbWFuZHNbY29tbWFuZF0uY2xhc3NOYW1lKTtcbiAgICAgIHRoaXMuY2xlYXJEaXJ0eUZsYWcoKTtcblxuICAgICAgaWYgKG1hcmt1cE5vZGUpIHtcbiAgICAgICAgdGhpcy5saW5lRGlydHlbZm9jdXMhLnJvd10gPSB0cnVlO1xuICAgICAgICBjb25zdCBzdGFydENvbCA9IHRoaXMuY29tcHV0ZUNvbHVtbihtYXJrdXBOb2RlLCAwKSE7XG4gICAgICAgIGNvbnN0IGxlbiA9IG1hcmt1cE5vZGUudGV4dENvbnRlbnQhLmxlbmd0aDtcbiAgICAgICAgY29uc3QgbGVmdCA9IHRoaXMubGluZXNbZm9jdXMhLnJvd11cbiAgICAgICAgICAuc3Vic3RyKDAsIHN0YXJ0Q29sKVxuICAgICAgICAgIC5yZXBsYWNlKGNvbW1hbmRzW2NvbW1hbmRdLnVuc2V0LnByZVBhdHRlcm4sIFwiXCIpO1xuICAgICAgICBjb25zdCBtaWQgPSB0aGlzLmxpbmVzW2ZvY3VzIS5yb3ddLnN1YnN0cihzdGFydENvbCwgbGVuKTtcbiAgICAgICAgY29uc3QgcmlnaHQgPSB0aGlzLmxpbmVzW2ZvY3VzIS5yb3ddXG4gICAgICAgICAgLnN1YnN0cihzdGFydENvbCArIGxlbilcbiAgICAgICAgICAucmVwbGFjZShjb21tYW5kc1tjb21tYW5kXS51bnNldC5wb3N0UGF0dGVybiwgXCJcIik7XG4gICAgICAgIHRoaXMubGluZXNbZm9jdXMhLnJvd10gPSBsZWZ0LmNvbmNhdChtaWQsIHJpZ2h0KTtcbiAgICAgICAgYW5jaG9yLmNvbCA9IGxlZnQubGVuZ3RoO1xuICAgICAgICBmb2N1cyEuY29sID0gYW5jaG9yLmNvbCArIGxlbjtcbiAgICAgICAgdGhpcy51cGRhdGVGb3JtYXR0aW5nKCk7XG4gICAgICAgIHRoaXMuc2V0U2VsZWN0aW9uKGZvY3VzISwgYW5jaG9yKTtcbiAgICAgICAgdGhpcy5maXJlQ2hhbmdlKCk7XG4gICAgICB9IGVsc2UgaWYgKFxuICAgICAgICBmb2N1cyEuY29sID09PSBhbmNob3IuY29sICYmXG4gICAgICAgICEhdGhpcy5saW5lc1tmb2N1cyEucm93XS5zdWJzdHIoMCwgZm9jdXMhLmNvbCkubWF0Y2goY29tbWFuZHNbY29tbWFuZF0udW5zZXQucHJlUGF0dGVybikgJiZcbiAgICAgICAgISF0aGlzLmxpbmVzW2ZvY3VzIS5yb3ddLnN1YnN0cihmb2N1cyEuY29sKS5tYXRjaChjb21tYW5kc1tjb21tYW5kXS51bnNldC5wb3N0UGF0dGVybilcbiAgICAgICkge1xuICAgICAgICB0aGlzLmxpbmVEaXJ0eVtmb2N1cyEucm93XSA9IHRydWU7XG4gICAgICAgIGNvbnN0IGxlZnQgPSB0aGlzLmxpbmVzW2ZvY3VzIS5yb3ddXG4gICAgICAgICAgLnN1YnN0cigwLCBmb2N1cyEuY29sKVxuICAgICAgICAgIC5yZXBsYWNlKGNvbW1hbmRzW2NvbW1hbmRdLnVuc2V0LnByZVBhdHRlcm4sIFwiXCIpO1xuICAgICAgICBjb25zdCByaWdodCA9IHRoaXMubGluZXNbZm9jdXMhLnJvd11cbiAgICAgICAgICAuc3Vic3RyKGZvY3VzIS5jb2wpXG4gICAgICAgICAgLnJlcGxhY2UoY29tbWFuZHNbY29tbWFuZF0udW5zZXQucG9zdFBhdHRlcm4sIFwiXCIpO1xuICAgICAgICB0aGlzLmxpbmVzW2ZvY3VzIS5yb3ddID0gbGVmdC5jb25jYXQocmlnaHQpO1xuICAgICAgICBmb2N1cyEuY29sID0gYW5jaG9yLmNvbCA9IGxlZnQubGVuZ3RoO1xuICAgICAgICB0aGlzLnVwZGF0ZUZvcm1hdHRpbmcoKTtcbiAgICAgICAgdGhpcy5zZXRTZWxlY3Rpb24oZm9jdXMhLCBhbmNob3IpO1xuICAgICAgICB0aGlzLmZpcmVDaGFuZ2UoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxldCB7IHN0YXJ0Q29sLCBlbmRDb2wgfSA9XG4gICAgICAgICAgZm9jdXMhLmNvbCA8IGFuY2hvci5jb2xcbiAgICAgICAgICAgID8geyBzdGFydENvbDogZm9jdXMhLmNvbCwgZW5kQ29sOiBhbmNob3IuY29sIH1cbiAgICAgICAgICAgIDogeyBzdGFydENvbDogYW5jaG9yLmNvbCwgZW5kQ29sOiBmb2N1cyEuY29sIH07XG5cbiAgICAgICAgbGV0IG1hdGNoID0gdGhpcy5saW5lc1tmb2N1cyEucm93XVxuICAgICAgICAgIC5zdWJzdHIoc3RhcnRDb2wsIGVuZENvbCAtIHN0YXJ0Q29sKVxuICAgICAgICAgIC5tYXRjaCgvXig/PGxlYWRpbmc+XFxzKikuKlxcUyg/PHRyYWlsaW5nPlxccyopJC8pO1xuICAgICAgICBpZiAobWF0Y2gpIHtcbiAgICAgICAgICBzdGFydENvbCArPSBtYXRjaC5ncm91cHMhLmxlYWRpbmcubGVuZ3RoO1xuICAgICAgICAgIGVuZENvbCAtPSBtYXRjaC5ncm91cHMhLnRyYWlsaW5nLmxlbmd0aDtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvY3VzIS5jb2wgPSBzdGFydENvbDtcbiAgICAgICAgYW5jaG9yLmNvbCA9IGVuZENvbDtcblxuICAgICAgICB0aGlzLndyYXBTZWxlY3Rpb24oY29tbWFuZHNbY29tbWFuZF0uc2V0LnByZSwgY29tbWFuZHNbY29tbWFuZF0uc2V0LnBvc3QsIGZvY3VzLCBhbmNob3IpO1xuICAgICAgICB0aGlzLmZpcmVDaGFuZ2UoKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGNvbW1hbmRzW2NvbW1hbmRdLnR5cGUgPT09IFwibGluZVwiKSB7XG4gICAgICBsZXQgYW5jaG9yID0gdGhpcy5nZXRTZWxlY3Rpb24odHJ1ZSk7XG4gICAgICBsZXQgZm9jdXMgPSB0aGlzLmdldFNlbGVjdGlvbihmYWxzZSk7XG4gICAgICBpZiAoIWFuY2hvcikgYW5jaG9yID0gZm9jdXM7XG4gICAgICBpZiAoIWZvY3VzKSByZXR1cm47XG4gICAgICB0aGlzLmNsZWFyRGlydHlGbGFnKCk7XG4gICAgICBsZXQgc3RhcnQgPSBhbmNob3IhLnJvdyA+IGZvY3VzIS5yb3cgPyBmb2N1cyEgOiBhbmNob3IhO1xuICAgICAgbGV0IGVuZCA9IGFuY2hvciEucm93ID4gZm9jdXMhLnJvdyA/IGFuY2hvciEgOiBmb2N1cyE7XG4gICAgICBpZiAoZW5kLnJvdyA+IHN0YXJ0LnJvdyAmJiBlbmQuY29sID09PSAwKSB7XG4gICAgICAgIGVuZC5yb3ctLTtcbiAgICAgIH1cblxuICAgICAgZm9yIChsZXQgbGluZSA9IHN0YXJ0LnJvdzsgbGluZSA8PSBlbmQucm93OyBsaW5lKyspIHtcbiAgICAgICAgaWYgKHN0YXRlICYmIHRoaXMubGluZVR5cGVzW2xpbmVdICE9PSBjb21tYW5kc1tjb21tYW5kXS5jbGFzc05hbWUpIHtcbiAgICAgICAgICB0aGlzLmxpbmVzW2xpbmVdID0gdGhpcy5saW5lc1tsaW5lXS5yZXBsYWNlKFxuICAgICAgICAgICAgY29tbWFuZHNbY29tbWFuZF0uc2V0LnBhdHRlcm4sXG4gICAgICAgICAgICBjb21tYW5kc1tjb21tYW5kXS5zZXQucmVwbGFjZW1lbnQucmVwbGFjZShcIiQjXCIsIChsaW5lIC0gc3RhcnQucm93ICsgMSkudG9TdHJpbmcoKSlcbiAgICAgICAgICApO1xuICAgICAgICAgIHRoaXMubGluZURpcnR5W2xpbmVdID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXN0YXRlICYmIHRoaXMubGluZVR5cGVzW2xpbmVdID09PSBjb21tYW5kc1tjb21tYW5kXS5jbGFzc05hbWUpIHtcbiAgICAgICAgICB0aGlzLmxpbmVzW2xpbmVdID0gdGhpcy5saW5lc1tsaW5lXS5yZXBsYWNlKFxuICAgICAgICAgICAgY29tbWFuZHNbY29tbWFuZF0udW5zZXQucGF0dGVybixcbiAgICAgICAgICAgIGNvbW1hbmRzW2NvbW1hbmRdLnVuc2V0LnJlcGxhY2VtZW50XG4gICAgICAgICAgKTtcbiAgICAgICAgICB0aGlzLmxpbmVEaXJ0eVtsaW5lXSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHRoaXMudXBkYXRlRm9ybWF0dGluZygpO1xuICAgICAgdGhpcy5zZXRTZWxlY3Rpb24oXG4gICAgICAgIHsgcm93OiBlbmQucm93LCBjb2w6IHRoaXMubGluZXNbZW5kLnJvd10ubGVuZ3RoIH0sXG4gICAgICAgIHsgcm93OiBzdGFydC5yb3csIGNvbDogMCB9XG4gICAgICApO1xuICAgICAgdGhpcy5maXJlQ2hhbmdlKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBpc0lubGluZUZvcm1hdHRpbmdBbGxvd2VkKCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHNlbCA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcbiAgICBpZiAoIXNlbCB8fCAhc2VsLmZvY3VzTm9kZSB8fCAhc2VsLmFuY2hvck5vZGUpIHJldHVybiBmYWxzZTtcblxuICAgIGlmIChcbiAgICAgIHNlbC5pc0NvbGxhcHNlZCAmJlxuICAgICAgc2VsLmZvY3VzTm9kZS5ub2RlVHlwZSA9PT0gMyAmJlxuICAgICAgc2VsLmZvY3VzT2Zmc2V0ID09PSBzZWwuZm9jdXNOb2RlLm5vZGVWYWx1ZSEubGVuZ3RoXG4gICAgKSB7XG4gICAgICBsZXQgbm9kZTtcbiAgICAgIGZvciAobm9kZSA9IHNlbC5mb2N1c05vZGU7IG5vZGUgJiYgbm9kZS5uZXh0U2libGluZyA9PT0gbnVsbDsgbm9kZSA9IG5vZGUucGFyZW50Tm9kZSEpO1xuICAgICAgaWYgKFxuICAgICAgICBub2RlICYmXG4gICAgICAgIG5vZGUubmV4dFNpYmxpbmcgJiZcbiAgICAgICAgKG5vZGUubmV4dFNpYmxpbmcgYXMgSFRNTEVsZW1lbnQpLmNsYXNzTmFtZSAmJlxuICAgICAgICAobm9kZS5uZXh0U2libGluZyBhcyBIVE1MRWxlbWVudCkuY2xhc3NOYW1lLmluY2x1ZGVzKFwiVE1JbmxpbmVGb3JtYXR0ZWRcIilcbiAgICAgIClcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgbGV0IGFuY2VzdG9yID0gdGhpcy5jb21wdXRlQ29tbW9uQW5jZXN0b3Ioc2VsLmZvY3VzTm9kZSwgc2VsLmFuY2hvck5vZGUpO1xuICAgIGlmICghYW5jZXN0b3IpIHJldHVybiBmYWxzZTtcblxuICAgIHdoaWxlIChhbmNlc3RvciAmJiBhbmNlc3RvciAhPT0gdGhpcy5lKSB7XG4gICAgICBpZiAoXG4gICAgICAgIChhbmNlc3RvciBhcyBIVE1MRWxlbWVudCkuY2xhc3NOYW1lICYmXG4gICAgICAgIHR5cGVvZiAoYW5jZXN0b3IgYXMgSFRNTEVsZW1lbnQpLmNsYXNzTmFtZS5pbmNsdWRlcyA9PT0gXCJmdW5jdGlvblwiICYmXG4gICAgICAgICgoYW5jZXN0b3IgYXMgSFRNTEVsZW1lbnQpLmNsYXNzTmFtZS5pbmNsdWRlcyhcIlRNSW5saW5lRm9ybWF0dGVkXCIpIHx8XG4gICAgICAgICAgKGFuY2VzdG9yIGFzIEhUTUxFbGVtZW50KS5jbGFzc05hbWUuaW5jbHVkZXMoXCJUTUJsYW5rTGluZVwiKSlcbiAgICAgIClcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICBhbmNlc3RvciA9IGFuY2VzdG9yLnBhcmVudE5vZGUhO1xuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHB1YmxpYyB0b2dnbGVDb21tYW5kU3RhdGUoY29tbWFuZDogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmxhc3RDb21tYW5kU3RhdGUpIHRoaXMubGFzdENvbW1hbmRTdGF0ZSA9IHRoaXMuZ2V0Q29tbWFuZFN0YXRlKCk7XG4gICAgdGhpcy5zZXRDb21tYW5kU3RhdGUoY29tbWFuZCwgIXRoaXMubGFzdENvbW1hbmRTdGF0ZVtjb21tYW5kXSk7XG4gIH1cblxuICBwcml2YXRlIGZpcmVEcm9wKGRhdGFUcmFuc2ZlcjogRGF0YVRyYW5zZmVyKTogdm9pZCB7XG4gICAgZm9yIChsZXQgbGlzdGVuZXIgb2YgdGhpcy5saXN0ZW5lcnMuZHJvcCkge1xuICAgICAgbGlzdGVuZXIoeyBkYXRhVHJhbnNmZXIgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBmaXJlU2VsZWN0aW9uKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmxpc3RlbmVycy5zZWxlY3Rpb24gJiYgdGhpcy5saXN0ZW5lcnMuc2VsZWN0aW9uLmxlbmd0aCkge1xuICAgICAgbGV0IGZvY3VzID0gdGhpcy5nZXRTZWxlY3Rpb24oZmFsc2UpO1xuICAgICAgbGV0IGFuY2hvciA9IHRoaXMuZ2V0U2VsZWN0aW9uKHRydWUpO1xuICAgICAgbGV0IGNvbW1hbmRTdGF0ZSA9IHRoaXMuZ2V0Q29tbWFuZFN0YXRlKGZvY3VzLCBhbmNob3IpO1xuICAgICAgaWYgKHRoaXMubGFzdENvbW1hbmRTdGF0ZSkge1xuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMubGFzdENvbW1hbmRTdGF0ZSwgY29tbWFuZFN0YXRlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMubGFzdENvbW1hbmRTdGF0ZSA9IE9iamVjdC5hc3NpZ24oe30sIGNvbW1hbmRTdGF0ZSk7XG4gICAgICB9XG4gICAgICBmb3IgKGxldCBsaXN0ZW5lciBvZiB0aGlzLmxpc3RlbmVycy5zZWxlY3Rpb24pIHtcbiAgICAgICAgbGlzdGVuZXIoe1xuICAgICAgICAgIGZvY3VzOiBmb2N1cyEsXG4gICAgICAgICAgYW5jaG9yOiBhbmNob3IhLFxuICAgICAgICAgIGNvbW1hbmRTdGF0ZTogdGhpcy5sYXN0Q29tbWFuZFN0YXRlLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgRWRpdG9yOyJdLCJuYW1lcyI6WyJzdmciLCJibG9ja3F1b3RlIiwiYm9sZCIsImNsZWFyX2Zvcm1hdHRpbmciLCJjb2RlIiwiaDEiLCJoMiIsImhyIiwiaW1hZ2UiLCJpdGFsaWMiLCJsaW5rIiwib2wiLCJyZWRvIiwic3RyaWtldGhyb3VnaCIsInVsIiwidW5kbyIsImlzTWFjTGlrZSIsInRlc3QiLCJuYXZpZ2F0b3IiLCJwbGF0Zm9ybSIsIkRlZmF1bHRDb21tYW5kcyIsIm5hbWUiLCJhY3Rpb24iLCJpbm5lckhUTUwiLCJ0aXRsZSIsImhvdGtleSIsImluc2VydExpbmsiLCJlZGl0b3IiLCJpc0lubGluZUZvcm1hdHRpbmdBbGxvd2VkIiwid3JhcFNlbGVjdGlvbiIsImVuYWJsZWQiLCJmb2N1cyIsImFuY2hvciIsImluc2VydEltYWdlIiwicGFzdGUiLCJjYW5VbmRvIiwiY2FuUmVkbyIsIkNvbW1hbmRCYXIiLCJjb25zdHJ1Y3RvciIsInByb3BzIiwiZSIsImNvbW1hbmRzIiwiYnV0dG9ucyIsInN0YXRlIiwiaG90a2V5cyIsImVsZW1lbnQiLCJkb2N1bWVudCIsImdldEVsZW1lbnRCeUlkIiwiYm9keSIsImNyZWF0ZUNvbW1hbmRCYXJFbGVtZW50IiwiYWRkRXZlbnRMaXN0ZW5lciIsImhhbmRsZUtleWRvd24iLCJzZXRFZGl0b3IiLCJwYXJlbnRFbGVtZW50IiwiY3JlYXRlRWxlbWVudCIsImNsYXNzTmFtZSIsImNvbW1hbmQiLCJlbCIsImFwcGVuZENoaWxkIiwiY29tbWFuZE5hbWUiLCJPYmplY3QiLCJhc3NpZ24iLCJrZXlzIiwic3BsaXQiLCJtb2RpZmllcnMiLCJtb2RpZmllcmV4cGxhbmF0aW9uIiwiaSIsImxlbmd0aCIsInB1c2giLCJtYXRjaCIsImtleSIsInRvTG93ZXJDYXNlIiwiY29uY2F0Iiwiam9pbiIsImhhbmRsZUNsaWNrIiwiZXZlbnQiLCJwcmV2ZW50RGVmYXVsdCIsInNldENvbW1hbmRTdGF0ZSIsImhhbmRsZVNlbGVjdGlvbiIsImNvbW1hbmRTdGF0ZSIsInVuZGVmaW5lZCIsIm91dGVyIiwibW9kaWZpZXIiLCJnbG9iYWwiLCJ0aGlzIiwicmVxdWlyZSQkMCIsInJlcXVpcmUkJDEiLCJyZXF1aXJlJCQyIiwic2hhcmVkU3RvcmVNb2R1bGUiLCJyZXF1aXJlJCQzIiwicmVxdWlyZSQkNCIsInJlcXVpcmUkJDUiLCJyZXF1aXJlJCQ2IiwicmVxdWlyZSQkNyIsIm1ha2VCdWlsdEluIiwibWFrZUJ1aWx0SW5Nb2R1bGUiLCJyZXBsYWNlbWVudHMiLCJBU0NJSVB1bmN0dWF0aW9uIiwiTm90VHJpZ2dlckNoYXIiLCJTY2hlbWUiLCJFbWFpbCIsIkhUTUxPcGVuVGFnIiwiSFRNTENsb3NlVGFnIiwiSFRNTFRhZ05hbWUiLCJIVE1MQ29tbWVudCIsIkhUTUxQSSIsIkhUTUxEZWNsYXJhdGlvbiIsIkhUTUxDREFUQSIsIkhUTUxBdHRyaWJ1dGUiLCJIVE1MQXR0VmFsdWUiLCJLbm93blRhZyIsInB1bmN0dWF0aW9uTGVhZGluZyIsIlJlZ0V4cCIsInB1bmN0dWF0aW9uVHJhaWxpbmciLCJsaW5lR3JhbW1hciIsIlRNSDEiLCJyZWdleHAiLCJyZXBsYWNlbWVudCIsIlRNSDIiLCJUTUgzIiwiVE1INCIsIlRNSDUiLCJUTUg2IiwiVE1CbG9ja3F1b3RlIiwiVE1Db2RlRmVuY2VCYWNrdGlja09wZW4iLCJUTUNvZGVGZW5jZVRpbGRlT3BlbiIsIlRNQ29kZUZlbmNlQmFja3RpY2tDbG9zZSIsIlRNQ29kZUZlbmNlVGlsZGVDbG9zZSIsIlRNQmxhbmtMaW5lIiwiVE1TZXRleHRIMU1hcmtlciIsIlRNU2V0ZXh0SDJNYXJrZXIiLCJUTUhSIiwiVE1VTCIsIlRNT0wiLCJUTUluZGVudGVkQ29kZSIsIlRNTGlua1JlZmVyZW5jZURlZmluaXRpb24iLCJsYWJlbFBsYWNlaG9sZGVyIiwiaHRtbEJsb2NrR3JhbW1hciIsInN0YXJ0IiwiZW5kIiwicGFyYUludGVycnVwdCIsImlubGluZUdyYW1tYXIiLCJlc2NhcGUiLCJhdXRvbGluayIsImh0bWwiLCJsaW5rT3BlbiIsImltYWdlT3BlbiIsImxpbmtMYWJlbCIsImRlZmF1bHQiLCJyZXBsYWNlbWVudFJlZ2V4cCIsImlubGluZVJ1bGVzIiwicnVsZSIsInJlIiwic291cmNlIiwicmVwbGFjZSIsInN0cmluZyIsImZsYWdzIiwiY3JlYXRlTWVyZ2VkSW5saW5lR3JhbW1hciIsImN1c3RvbVJ1bGVzIiwiYXJndW1lbnRzIiwibWVyZ2VkIiwicnVsZU5hbWUiLCJlbnRyaWVzIiwicHJvY2Vzc2VkUnVsZSIsInJlZ2V4cFNvdXJjZSIsImh0bWxlc2NhcGUiLCJ0eXBlIiwic2V0IiwicHJlIiwicG9zdCIsInVuc2V0IiwicHJlUGF0dGVybiIsInBvc3RQYXR0ZXJuIiwicGF0dGVybiIsImgzIiwiaDQiLCJoNSIsImg2IiwiRWRpdG9yIiwidGV4dGFyZWEiLCJsaW5lcyIsImxpbmVFbGVtZW50cyIsImxpbmVUeXBlcyIsImxpbmVDYXB0dXJlcyIsImxpbmVSZXBsYWNlbWVudHMiLCJsaW5rTGFiZWxzIiwibGluZURpcnR5IiwibGFzdENvbW1hbmRTdGF0ZSIsImN1c3RvbUlubGluZUdyYW1tYXIiLCJtZXJnZWRJbmxpbmVHcmFtbWFyIiwibGlzdGVuZXJzIiwiY2hhbmdlIiwic2VsZWN0aW9uIiwiZHJvcCIsInVuZG9TdGFjayIsInJlZG9TdGFjayIsImlzUmVzdG9yaW5nSGlzdG9yeSIsIm1heEhpc3RvcnkiLCJnZXRFbGVtZW50c0J5VGFnTmFtZSIsInRhZ05hbWUiLCJwYXJlbnROb2RlIiwic3R5bGUiLCJkaXNwbGF5IiwiY3JlYXRlRWRpdG9yRWxlbWVudCIsInNldENvbnRlbnQiLCJjb250ZW50IiwidmFsdWUiLCJoYW5kbGVVbmRvUmVkb0tleSIsInB1c2hIaXN0b3J5IiwicHVzaEN1cnJlbnRTdGF0ZSIsImdldENvbnRlbnQiLCJnZXRTZWxlY3Rpb24iLCJzaGlmdCIsImN1cnJlbnQiLCJwb3AiLCJwcmV2Iiwic2V0U2VsZWN0aW9uIiwibmV4dCIsImlzTWFjIiwiY3RybCIsIm1ldGFLZXkiLCJjdHJsS2V5IiwiYWx0S2V5Iiwic2hpZnRLZXkiLCJjbGFzc0xpc3QiLCJhZGQiLCJjb250ZW50RWRpdGFibGUiLCJ3aGl0ZVNwYWNlIiwid2Via2l0VXNlck1vZGlmeSIsIm5leHRTaWJsaW5nIiwiaW5zZXJ0QmVmb3JlIiwiaGFuZGxlSW5wdXRFdmVudCIsImhhbmRsZVNlbGVjdGlvbkNoYW5nZUV2ZW50IiwiaGFuZGxlUGFzdGUiLCJoYW5kbGVEcm9wIiwiY2hpbGROb2RlcyIsImZpcnN0Q2hpbGQiLCJyZW1vdmVDaGlsZCIsImxpbmVOdW0iLCJsZSIsIkFycmF5IiwidXBkYXRlRm9ybWF0dGluZyIsImZpcmVDaGFuZ2UiLCJ1cGRhdGVMaW5lVHlwZXMiLCJ1cGRhdGVMaW5rTGFiZWxzIiwiYXBwbHlMaW5lVHlwZXMiLCJsIiwiY2FwdHVyZSIsInN0ciIsInAxIiwicDIiLCJwYXJzZUludCIsInByb2Nlc3NJbmxpbmVTdHlsZXMiLCJjb250ZW50SFRNTCIsInJlbW92ZUF0dHJpYnV0ZSIsImRhdGFzZXQiLCJ0b1N0cmluZyIsImNvZGVCbG9ja1R5cGUiLCJjb2RlQmxvY2tTZXFMZW5ndGgiLCJodG1sQmxvY2siLCJsaW5lVHlwZSIsImxpbmVDYXB0dXJlIiwibGluZVJlcGxhY2VtZW50IiwiZXhlYyIsImdyb3VwcyIsImh0bWxCbG9ja1R5cGUiLCJoZWFkaW5nTGluZSIsImhlYWRpbmdMaW5lVHlwZSIsImdldEFuY2hvciIsIndpbmRvdyIsInN0YXJ0Tm9kZSIsImFuY2hvck5vZGUiLCJmb2N1c05vZGUiLCJvZmZzZXQiLCJhbmNob3JPZmZzZXQiLCJmb2N1c09mZnNldCIsInJvdyIsImNvbCIsImNvbXB1dGVDb2x1bW4iLCJub2RlIiwicHJldmlvdXNTaWJsaW5nIiwiX2EiLCJjb21wdXRlTm9kZUFuZE9mZnNldCIsIndpbmRvd1NlbGVjdGlvbiIsInNldEJhc2VBbmRFeHRlbnQiLCJ0ZXh0IiwiYmVnaW5uaW5nIiwiaW5zZXJ0ZWRMaW5lcyIsImxpbmVCZWZvcmUiLCJzdWJzdHIiLCJsaW5lRW5kIiwiZW5kQ29sUG9zIiwic3BsaWNlTGluZXMiLCJzdGFydENvbCIsImVuZENvbCIsImxlZnQiLCJtaWQiLCJyaWdodCIsImxpc3RlbmVyIiwibGluZXNEaXJ0eSIsImlucHV0RXZlbnQiLCJpbnB1dFR5cGUiLCJjbGVhckRpcnR5RmxhZyIsInByb2Nlc3NOZXdQYXJhZ3JhcGgiLCJmaXhOb2RlSGllcmFyY2h5IiwidXBkYXRlTGluZUNvbnRlbnRzQW5kRm9ybWF0dGluZyIsIl9lIiwiZmlyZVNlbGVjdGlvbiIsImNsaXBib2FyZERhdGEiLCJnZXREYXRhIiwiZmlyZURyb3AiLCJkYXRhVHJhbnNmZXIiLCJvcmlnaW5hbFN0cmluZyIsInByb2Nlc3NlZCIsInN0YWNrIiwiY2FwIiwicG90ZW50aWFsTGluayIsInBvdGVudGlhbEltYWdlIiwicmVzdWx0IiwicGFyc2VMaW5rT3JJbWFnZSIsIm91dHB1dCIsImNoYXJDb3VudCIsImRlbGltQ291bnQiLCJkZWxpbVN0cmluZyIsImN1cnJlbnREZWxpbWl0ZXIiLCJwcmVjZWRpbmciLCJmb2xsb3dpbmciLCJwdW5jdHVhdGlvbkZvbGxvd3MiLCJwdW5jdHVhdGlvblByZWNlZGVzIiwid2hpdGVzcGFjZUZvbGxvd3MiLCJ3aGl0ZXNwYWNlUHJlY2VkZXMiLCJjYW5PcGVuIiwiY2FuQ2xvc2UiLCJzdGFja1BvaW50ZXIiLCJkZWxpbWl0ZXIiLCJlbnRyeSIsImNvdW50IiwiY29uc3VtZWQiLCJub2RlVHlwZSIsIk5vZGUiLCJURVhUX05PREUiLCJ0ZXh0Q29udGVudCIsImJpbmRSaWdodCIsImNoaWxkcmVuQ29tcGxldGUiLCJydiIsIm5vZGVWYWx1ZSIsInVwZGF0ZUxpbmVDb250ZW50cyIsImxpbmVEZWx0YSIsImNoaWxkRWxlbWVudENvdW50IiwiZmlyc3RDaGFuZ2VkTGluZSIsImxhc3RDaGFuZ2VkTGluZSIsImxpbmVzVG9EZWxldGUiLCJsaW5lc1RvQWRkIiwibGluZSIsImN0Iiwic2VsIiwiY29udGludWFibGVUeXBlIiwiY2hlY2tMaW5lIiwic3RhcnRMaW5lIiwibGluZXNUb0luc2VydCIsImFkanVzdExpbmVFbGVtZW50cyIsImluc2VydGVkQmxhbmsiLCJpbnNlcnRlZERpcnR5Iiwic3BsaWNlIiwib3JpZ2luYWxDaGlsZHJlbiIsImZyb20iLCJyZXBsYWNlQ2hpbGQiLCJjaGlsZCIsInBhcmVudCIsIl9sZW4iLCJuZXdDaGlsZHJlbiIsIl9rZXkiLCJmb3JFYWNoIiwibmV3Q2hpbGQiLCJFTEVNRU5UX05PREUiLCJkaXZXcmFwcGVyIiwiZ3JhbmRDaGlsZHJlbiIsInNvbWUiLCJncmFuZENoaWxkIiwiaXNJbWFnZSIsInRleHRPZmZzZXQiLCJvcGVuZXIiLCJjdXJyZW50T2Zmc2V0IiwiYnJhY2tldExldmVsIiwibGlua1RleHQiLCJsaW5rUmVmIiwibGlua0RldGFpbHMiLCJ0ZXh0T3V0ZXIiLCJuZXh0Q2hhciIsInRyaW0iLCJwYXJlbnRoZXNpc0xldmVsIiwiaW5saW5lT3V0ZXIiLCJ2YWxpZCIsImxhYmVsIiwibGFiZWxDbGFzcyIsImNvbXB1dGVDb21tb25BbmNlc3RvciIsIm5vZGUxIiwibm9kZTIiLCJhbmNlc3RyeSIsInVuc2hpZnQiLCJhbmNlc3RyeTEiLCJhbmNlc3RyeTIiLCJjb21wdXRlRW5jbG9zaW5nTWFya3VwTm9kZSIsImluY2x1ZGVzIiwiZ2V0Q29tbWFuZFN0YXRlIiwiY21kIiwibWFya3VwTm9kZSIsImxlbiIsImxlYWRpbmciLCJ0cmFpbGluZyIsImlzQ29sbGFwc2VkIiwiYW5jZXN0b3IiLCJ0b2dnbGVDb21tYW5kU3RhdGUiXSwibWFwcGluZ3MiOiI7Ozs7OztJQUFBLE1BQU1BLEdBQUcsR0FBMkI7SUFDbENDLEVBQUFBLFVBQVUsRUFBRSxDQUEyUix5UkFBQSxDQUFBO0lBQ3ZTQyxFQUFBQSxJQUFJLEVBQUUsQ0FBMFksd1lBQUEsQ0FBQTtJQUNoWkMsRUFDQUMsSUFBSSxFQUFFLENBQStVLDZVQUFBLENBQUE7SUFDclZDLEVBQUFBLEVBQUUsRUFBRSxDQUFnSyw4SkFBQSxDQUFBO0lBQ3BLQyxFQUFBQSxFQUFFLEVBQUUsQ0FBa0ssZ0tBQUEsQ0FBQTtJQUN0S0MsRUFBQUEsRUFBRSxFQUFFLENBQWlJLCtIQUFBLENBQUE7SUFDcklDLEVBQUFBLEtBQUssRUFBRSxDQUErSCw2SEFBQSxDQUFBO0lBQ3RJQyxFQUFBQSxNQUFNLEVBQUUsQ0FBaUgsK0dBQUEsQ0FBQTtJQUN6SEMsRUFBQUEsSUFBSSxFQUFFLENBQTJ1Qyx5dUNBQUEsQ0FBQTtJQUNqdkNDLEVBQUFBLEVBQUUsRUFBRSxDQUFxdEIsbXRCQUFBLENBQUE7SUFDenRCQyxFQUFBQSxJQUFJLEVBQUUsQ0FBc3NCLG9zQkFBQSxDQUFBO0lBQzVzQkMsRUFBQUEsYUFBYSxFQUFFLENBQTRYLDBYQUFBLENBQUE7SUFDM1lDLEVBQUFBLEVBQUUsRUFBRSxDQUE2USwyUUFBQSxDQUFBO0lBQ2pSQyxFQUFBQSxJQUFJLEVBQUUs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Q3JILFNBQVMsQ0FBQ0UsU0FBUyxJQUFJLElBQUksQ0FBQ0YsU0FBUyxDQUFDRSxTQUFTLENBQUM3SCxNQUFNLEVBQUU7SUFDL0QsTUFBQSxJQUFJcEMsS0FBSyxHQUFHLElBQUksQ0FBQ29MLFlBQVksQ0FBQyxLQUFLLENBQUM7SUFDcEMsTUFBQSxJQUFJbkwsTUFBTSxHQUFHLElBQUksQ0FBQ21MLFlBQVksQ0FBQyxJQUFJLENBQUM7VUFDcEMsSUFBSXBJLFlBQVksR0FBRyxJQUFJLENBQUNxVSxlQUFlLENBQUNyWCxLQUFLLEVBQUVDLE1BQU0sQ0FBQztVQUN0RCxJQUFJLElBQUksQ0FBQzJKLGdCQUFnQixFQUFFO1lBQ3pCL0gsTUFBTSxDQUFDQyxNQUFNLENBQUMsSUFBSSxDQUFDOEgsZ0JBQWdCLEVBQUU1RyxZQUFZLENBQUM7SUFDcEQsT0FBQyxNQUFNO1lBQ0wsSUFBSSxDQUFDNEcsZ0JBQWdCLEdBQUcvSCxNQUFNLENBQUNDLE1BQU0sQ0FBQyxFQUFFLEVBQUVrQixZQUFZLENBQUM7SUFDekQ7VUFDQSxLQUFLLElBQUkyTixRQUFRLElBQUksSUFBSSxDQUFDNUcsU0FBUyxDQUFDRSxTQUFTLEVBQUU7SUFDN0MwRyxRQUFBQSxRQUFRLENBQUM7SUFDUDNRLFVBQUFBLEtBQUssRUFBRUEsS0FBTTtJQUNiQyxVQUFBQSxNQUFNLEVBQUVBLE1BQU87Y0FDZitDLFlBQVksRUFBRSxJQUFJLENBQUM0RztJQUNwQixTQUFBLENBQUM7SUFDSjtJQUNGO0lBQ0Y7SUFDRDs7Ozs7Ozs7OyIsInhfZ29vZ2xlX2lnbm9yZUxpc3QiOlsyLDMsNCw1LDYsNyw4LDksMTAsMTEsMTIsMTMsMTQsMTUsMTYsMTcsMTgsMTksMjAsMjEsMjIsMjMsMjQsMjUsMjYsMjcsMjgsMjksMzAsMzEsMzIsMzMsMzQsMzUsMzYsMzcsMzgsMzksNDAsNDEsNDIsNDMsNDQsNDUsNDYsNDcsNDgsNDldfQ=={"version":3,"file":"index.js","sources":["src/svg/svg.ts","src/TinyMDECommandBar.ts","node_modules/core-js/internals/global-this.js","node_modules/core-js/internals/fails.js","node_modules/core-js/internals/descriptors.js","node_modules/core-js/internals/function-bind-native.js","node_modules/core-js/internals/function-uncurry-this.js","node_modules/core-js/internals/is-callable.js","node_modules/core-js/internals/is-null-or-undefined.js","node_modules/core-js/internals/require-object-coercible.js","node_modules/core-js/internals/to-object.js","node_modules/core-js/internals/has-own-property.js","node_modules/core-js/internals/function-name.js","node_modules/core-js/internals/is-pure.js","node_modules/core-js/internals/define-global-property.js","node_modules/core-js/internals/shared-store.js","node_modules/core-js/internals/inspect-source.js","node_modules/core-js/internals/weak-map-basic-detection.js","node_modules/core-js/internals/is-object.js","node_modules/core-js/internals/document-create-element.js","node_modules/core-js/internals/ie8-dom-define.js","node_modules/core-js/internals/v8-prototype-define-bug.js","node_modules/core-js/internals/an-object.js","node_modules/core-js/internals/function-call.js","node_modules/core-js/internals/get-built-in.js","node_modules/core-js/internals/object-is-prototype-of.js","node_modules/core-js/internals/environment-user-agent.js","node_modules/core-js/internals/environment-v8-version.js","node_modules/core-js/internals/symbol-constructor-detection.js","node_modules/core-js/internals/use-symbol-as-uid.js","node_modules/core-js/internals/is-symbol.js","node_modules/core-js/internals/try-to-string.js","node_modules/core-js/internals/a-callable.js","node_modules/core-js/internals/get-method.js","node_modules/core-js/internals/ordinary-to-primitive.js","node_modules/core-js/internals/shared.js","node_modules/core-js/internals/uid.js","node_modules/core-js/internals/well-known-symbol.js","node_modules/core-js/internals/to-primitive.js","node_modules/core-js/internals/to-property-key.js","node_modules/core-js/internals/object-define-property.js","node_modules/core-js/internals/create-property-descriptor.js","node_modules/core-js/internals/create-non-enumerable-property.js","node_modules/core-js/internals/shared-key.js","node_modules/core-js/internals/hidden-keys.js","node_modules/core-js/internals/internal-state.js","node_modules/core-js/internals/make-built-in.js","node_modules/core-js/internals/define-built-in-accessor.js","node_modules/core-js/internals/regexp-flags.js","node_modules/core-js/modules/es.regexp.flags.js","src/grammar.ts","src/TinyMDE.ts"],"sourcesContent":["const svg: Record<string, string> = {\n blockquote: `<svg height=\"18\" width=\"18\"><rect width=\"5\" height=\"5\" x=\"3\" y=\"4\" ry=\"1\"/><rect ry=\"1\" y=\"4\" x=\"10\" height=\"5\" width=\"5\"/><path d=\"M8 6.999v3c0 1-1 3-1 3s-.331 1-1.331 1h-1c-1 0-.669-1-.669-1s1-2 1-3v-3zm7 0v3c0 1-1 3-1 3s-.331 1-1.331 1h-1c-1 0-.669-1-.669-1s1-2 1-3v-3z\"/></svg>`,\n bold: `<svg height=\"18\" width=\"18\"><path d=\"M4 2a1 1 0 00-1 1v12a1 1 0 001 1h6c4 0 5-2 5-4 0-1.322-.434-2.636-1.885-3.381C13.772 7.885 14 6.945 14 6c0-2-1-4-5-4zm1 2h4c1.668 0 2.32.393 2.6.672.28.279.4.662.4 1.328s-.12 1.057-.4 1.338c-.275.274-1.014.646-2.6.662H5zm5 6c1.666.005 2.318.388 2.596.666.277.278.404.667.404 1.334s-.127 1.06-.404 1.338c-.278.278-.93.66-2.596.662l-4.992.004L5 10z\"/></svg>`,\n clear_formatting: `<svg height=\"18\" width=\"18\"><path d=\"M11.03 1a1 1 0 00-.74.3l-9 9a1 1 0 000 1.4l4 4A1 1 0 006 16h2a1 1 0 00.7-.3l8-8a1 1 0 000-1.4l-5-5a1 1 0 00-.67-.3zM8.7 5.7l3.58 3.6L7.6 14H6.4l-3-3 5.3-5.3z\"/><rect ry=\".8\" rx=\".8\" y=\"14\" x=\"16\" height=\"2\" width=\"2\"/><rect width=\"2\" height=\"2\" x=\"13\" y=\"14\" rx=\".8\" ry=\".8\"/><rect ry=\".8\" rx=\".8\" y=\"14\" x=\"10\" height=\"2\" width=\"2\"/></svg>`,\n code: `<svg height=\"18\" width=\"18\"><path d=\"M13.5 2.994a.5.5 0 00-.5.5.5.5 0 000 .034V4.53a5.993 5.993 0 00-7.451-.445A6 6 0 1012.45 13.9a5.99 5.99 0 001.346-1.334.5.5 0 00.096-.101.5.5 0 00-.12-.698.5.5 0 00-.697.12l-.004-.005a5 5 0 01-1.197 1.2 5 5 0 111.215-6.965.5.5 0 00.697.12.5.5 0 00.211-.44V4.745H14V3.493a.5.5 0 00-.5-.5z\"/></svg>`,\n h1: `<svg height=\"18\" width=\"18\"><path d=\"M3 2s0-1 1-1h1c1 0 1 1 1 1v6h6V2s0-1 1-1h1c1 0 1 1 1 1v14s0 1-1 1h-1c-1 0-1-1-1-1v-6H6v6s0 1-1 1H4c-1 0-1-1-1-1z\"/></svg>`,\n h2: `<svg height=\"18\" width=\"18\"><path d=\"M4 2s0-1 1-1 1 1 1 1v6c1-1 2-1 4-1 3 0 4 2 4 4v5s0 1-1 1-1-1-1-1v-5c0-1.094-1-2-2-2-2 0-3 0-4 2v5s0 1-1 1-1-1-1-1z\"/></svg>`,\n hr: `<svg height=\"18\" width=\"18\"><rect ry=\"1\" y=\"8\" height=\"2\" width=\"18\" style=\"font-variation-settings:normal;marker:none\"/></svg>`,\n image: `<svg height=\"18\" width=\"18\"><path d=\"M1 2v14h16V2H1zm2 2h12v7l-3-3-4 4-2-2-3 3V4z\"/><circle r=\"1.5\" cy=\"6.5\" cx=\"5.5\"/></svg>`,\n italic: `<svg height=\"18\" width=\"18\"><path d=\"M9 2a1 1 0 000 2L7 14a1 1 0 100 2h2a1 1 0 000-2l2-10a1 1 0 100-2z\"/></svg>`,\n link: `<svg height=\"18\" width=\"18\"><path d=\"M9.07 5.18a3.9 3.9 0 00-1.52.43C6.31 6.22 5.3 7.29 4.3 8.29c-1 1-2.07 2.02-2.68 3.26-.31.62-.5 1.33-.41 2.07.09.75.48 1.47 1.1 2.09.61.61 1.33 1 2.08 1.1.74.09 1.45-.1 2.07-.42 1.24-.61 2.26-1.68 3.26-2.68.46-.47.94-.94 1.39-1.44l-.43.26c-.68.34-1.49.56-2.36.46-.2-.03-.4-.08-.6-.14-.79.76-1.55 1.45-2.16 1.76-.38.19-.67.24-.92.21-.26-.03-.54-.14-.92-.53-.39-.38-.5-.66-.53-.91-.03-.26.02-.55.21-.93.39-.76 1.32-1.74 2.32-2.74 1-1 1.98-1.93 2.74-2.32.38-.19.67-.24.93-.21.25.03.53.14.91.53.39.38.5.66.53.92v.06l1.12-1.06.44-.47c-.18-.3-.4-.6-.67-.87-.62-.61-1.34-1-2.09-1.1a3.08 3.08 0 00-.55-.01z\"/><path d=\"M13.07.86a3.9 3.9 0 00-1.52.43c-1.24.62-2.26 1.69-3.26 2.69-.46.47-.94.94-1.39 1.43.15-.08.28-.18.43-.25a4.4 4.4 0 012.36-.46c.2.02.4.07.6.14.79-.77 1.55-1.46 2.16-1.76.38-.19.67-.25.93-.21.25.03.53.14.91.52.39.38.5.66.53.92.03.26-.02.55-.21.93-.39.76-1.32 1.74-2.32 2.74-1 1-1.98 1.93-2.74 2.31-.38.2-.67.25-.93.22-.25-.04-.53-.15-.91-.53-.39-.38-.5-.66-.53-.92V9c-.36.33-.73.67-1.12 1.06l-.43.46c.17.3.4.6.66.87.62.62 1.34 1 2.08 1.1.75.1 1.46-.1 2.08-.41 1.24-.62 2.26-1.69 3.26-2.69s2.07-2.02 2.68-3.26c.31-.62.5-1.32.41-2.07a3.63 3.63 0 00-1.1-2.08c-.61-.62-1.33-1-2.07-1.1a3.08 3.08 0 00-.56-.02z\"/></svg>`,\n ol: `<svg height=\"18\" width=\"18\"><path d=\"M1.5 7a.5.5 0 100 1h1a.5.5 0 01.5.5c0 .164-.08.31-.14.355l-1.655 1.25A.492.492 0 001 10.5a.5.5 0 00.5.5h2a.5.5 0 000-1H3l.398-.299A1.5 1.5 0 002.5 7z\"/><path d=\"M1.5 12c-.667 0-.667 1 0 1h1.25c.333 0 .333.5 0 .5H2.5c-.667 0-.667 1 0 1h.25c.333 0 .333.5 0 .5H1.5c-.667 0-.667 1 0 1h1c.398 0 .78-.131 1.06-.365.282-.235.44-.554.44-.885a1.121 1.121 0 00-.303-.75c.191-.204.3-.47.303-.75 0-.332-.158-.651-.44-.885-.3-.241-.675-.37-1.06-.365z\"/><rect y=\"13\" x=\"6\" height=\"2\" width=\"12\" ry=\"1\"/><rect ry=\"1\" width=\"12\" height=\"2\" x=\"6\" y=\"8\"/><rect y=\"3\" x=\"6\" height=\"2\" width=\"12\" ry=\"1\"/><path d=\"M1.5 2a.5.5 0 100 1H2v2h-.5a.5.5 0 100 1h2a.5.5 0 100-1H3V2.5c0-.277-.223-.5-.5-.5z\"/></svg>`,\n redo: `<svg height=\"18\" width=\"18\"><path d=\"M 7.2695308,2.7050781 C 8.1128755,2.7081581 8.9529895,2.8712156 9.730469,3.1347656 11.408874,3.7037121 12.90142,4.6847104 14,5.6367188 V 4 h 2 V 9 H 11 V 7 h 1.509765 C 11.59075,6.2485173 10.340208,5.453808 9.0878904,5.0292969 7.4309398,4.4676231 5.9453458,4.468717 4.7070308,5.7070312 c -1.225014,1.2250142 -1.409769,2.7206953 -0.779297,4.2968748 0.630472,1.57618 2.167475,3.158006 4.4433598,4.06836 l -0.7421878,1.855468 c -2.724115,-1.089646 -4.687112,-3.00782 -5.55664,-5.18164 -0.869528,-2.1738206 -0.554283,-4.6781393 1.220703,-6.4531252 0.923857,-0.9238568 2.015388,-1.388828 3.134765,-1.5351563 0.279845,-0.036582 0.560682,-0.053761 0.841797,-0.052734 z\" /></svg>`,\n strikethrough: `<svg width=\"18\" height=\"18\"><path d=\"M10 2C6 2 4 4 4 6c0 .338.08.672.193 1h2.34C6.113 6.629 6 6.295 6 6c0-.334.117-.725.691-1.154C7.265 4.416 8.331 4 10 4h3a1 1 0 000-2zm1.477 9c.413.368.523.706.523 1 0 .334-.127.712-.701 1.143-.575.43-1.632.85-3.299.857l-1.006.007V14H5a1 1 0 000 2h3c4 0 6-2 6-4 0-.338-.081-.672-.195-1z\"/><rect ry=\"1\" y=\"8\" x=\"1\" height=\"2\" width=\"16\"/></svg>`,\n ul: `<svg height=\"18\" width=\"18\"><circle cx=\"2\" cy=\"9\" r=\"2\"/><circle cy=\"4\" cx=\"2\" r=\"2\"/><rect y=\"3\" x=\"6\" height=\"2\" width=\"12\" ry=\"1\"/><circle cx=\"2\" cy=\"14\" r=\"2\"/><rect ry=\"1\" width=\"12\" height=\"2\" x=\"6\" y=\"8\"/><rect y=\"13\" x=\"6\" height=\"2\" width=\"12\" ry=\"1\"/></svg>`,\n undo: `<svg height=\"18\" width=\"18\"><path d=\"M 10.730469 2.7050781 C 9.8871243 2.7081594 9.0470103 2.8712156 8.2695312 3.1347656 C 6.5911256 3.7037121 5.0985797 4.6847104 4 5.6367188 L 4 4 L 2 4 L 2 9 L 7 9 L 7 7 L 5.4902344 7 C 6.4092499 6.2485173 7.6597914 5.453808 8.9121094 5.0292969 C 10.56906 4.4676231 12.054654 4.468717 13.292969 5.7070312 C 14.517983 6.9320454 14.702738 8.4277265 14.072266 10.003906 C 13.441794 11.580086 11.904791 13.161912 9.6289062 14.072266 L 10.371094 15.927734 C 13.095209 14.838088 15.058206 12.919914 15.927734 10.746094 C 16.797262 8.5722734 16.482017 6.0679547 14.707031 4.2929688 C 13.783174 3.369112 12.691643 2.9041408 11.572266 2.7578125 C 11.292421 2.7212304 11.011584 2.704051 10.730469 2.7050781 z \" /></svg>\n`\n};\n\nexport default svg;","import svg from \"./svg/svg\";\nimport { Editor, Position, SelectionEvent } from \"./TinyMDE\";\n\nconst isMacLike = /(Mac|iPhone|iPod|iPad)/i.test(\n typeof navigator !== \"undefined\" ? navigator.platform : \"\"\n);\n\nexport interface CommandAction {\n (editor: Editor): void;\n}\n\nexport interface CommandEnabled {\n (editor: Editor, focus?: Position, anchor?: Position): boolean | null;\n}\n\nexport interface CommandDefinition {\n name: string;\n action: string | CommandAction;\n innerHTML: string;\n title: string;\n hotkey?: string;\n enabled?: CommandEnabled;\n}\n\nexport interface CommandBarProps {\n element?: string | HTMLElement;\n editor?: Editor;\n commands?: (string | CommandDefinition)[];\n}\n\ninterface Hotkey {\n modifiers: string[];\n command: string;\n key?: string;\n code?: string;\n}\n\nconst DefaultCommands: Record<string, CommandDefinition> = {\n bold: {\n name: \"bold\",\n action: \"bold\",\n innerHTML: svg.bold,\n title: \"Bold\",\n hotkey: \"Mod-B\",\n },\n italic: {\n name: \"italic\",\n action: \"italic\",\n innerHTML: svg.italic,\n title: \"Italic\",\n hotkey: \"Mod-I\",\n },\n strikethrough: {\n name: \"strikethrough\",\n action: \"strikethrough\",\n innerHTML: svg.strikethrough,\n title: \"Strikethrough\",\n hotkey: \"Mod2-Shift-5\",\n },\n code: {\n name: \"code\",\n action: \"code\",\n innerHTML: svg.code,\n title: \"Format as code\",\n },\n h1: {\n name: \"h1\",\n action: \"h1\",\n innerHTML: svg.h1,\n title: \"Level 1 heading\",\n hotkey: \"Mod-Shift-1\",\n },\n h2: {\n name: \"h2\",\n action: \"h2\",\n innerHTML: svg.h2,\n title: \"Level 2 heading\",\n hotkey: \"Mod-Shift-2\",\n },\n ul: {\n name: \"ul\",\n action: \"ul\",\n innerHTML: svg.ul,\n title: \"Bulleted list\",\n },\n ol: {\n name: \"ol\",\n action: \"ol\",\n innerHTML: svg.ol,\n title: \"Numbered list\",\n },\n blockquote: {\n name: \"blockquote\",\n action: \"blockquote\",\n innerHTML: svg.blockquote,\n title: \"Quote\",\n hotkey: \"Mod2-Shift-Q\",\n },\n insertLink: {\n name: \"insertLink\",\n action: (editor: Editor) => {\n if ((editor as any).isInlineFormattingAllowed()) editor.wrapSelection(\"[\", \"]()\");\n },\n enabled: (editor: Editor, focus?: Position, anchor?: Position) =>\n (editor as any).isInlineFormattingAllowed(focus, anchor) ? false : null,\n innerHTML: svg.link,\n title: \"Insert link\",\n hotkey: \"Mod-K\",\n },\n insertImage: {\n name: \"insertImage\",\n action: (editor: Editor) => {\n if ((editor as any).isInlineFormattingAllowed()) editor.wrapSelection(\"![\", \"]()\");\n },\n enabled: (editor: Editor, focus?: Position, anchor?: Position) =>\n (editor as any).isInlineFormattingAllowed(focus, anchor) ? false : null,\n innerHTML: svg.image,\n title: \"Insert image\",\n hotkey: \"Mod2-Shift-I\",\n },\n hr: {\n name: \"hr\",\n action: (editor: Editor) => editor.paste(\"\\n***\\n\"),\n enabled: () => false,\n innerHTML: svg.hr,\n title: \"Insert horizontal line\",\n hotkey: \"Mod2-Shift-L\",\n },\n undo: {\n name: \"undo\",\n action: (editor: Editor) => editor.undo(),\n enabled: (editor: Editor) => (editor.canUndo ? false : null),\n innerHTML: svg.undo,\n title: \"Undo\",\n },\n redo: {\n name: \"redo\",\n action: (editor: Editor) => editor.redo(),\n enabled: (editor: Editor) => (editor.canRedo ? false : null),\n innerHTML: svg.redo,\n title: \"Redo\",\n },\n};\n\nexport class CommandBar {\n public e: HTMLDivElement | null = null;\n public editor: Editor | null = null;\n public commands: Record<string, CommandDefinition> = {};\n public buttons: Record<string, HTMLDivElement> = {};\n public state: Record<string, boolean | null> = {};\n private hotkeys: Hotkey[] = [];\n\n constructor(props: CommandBarProps) {\n this.e = null;\n this.editor = null;\n this.commands = {};\n this.buttons = {};\n this.state = {};\n this.hotkeys = [];\n\n let element: HTMLElement | null = null;\n if (typeof props.element === 'string') {\n element = document.getElementById(props.element);\n } else if (props.element) {\n element = props.element;\n }\n \n if (!element) {\n element = document.body;\n }\n\n this.createCommandBarElement(\n element,\n props.commands || [\n \"bold\",\n \"italic\",\n \"strikethrough\",\n \"|\",\n \"code\",\n \"|\",\n \"h1\",\n \"h2\",\n \"|\",\n \"ul\",\n \"ol\",\n \"|\",\n \"blockquote\",\n \"hr\",\n \"|\",\n \"undo\",\n \"redo\",\n \"|\",\n \"insertLink\",\n \"insertImage\",\n ]\n );\n document.addEventListener(\"keydown\", (e) => this.handleKeydown(e));\n if (props.editor) this.setEditor(props.editor);\n }\n\n private createCommandBarElement(parentElement: HTMLElement, commands: (string | CommandDefinition)[]): void {\n this.e = document.createElement(\"div\");\n this.e.className = \"TMCommandBar\";\n\n for (let command of commands) {\n if (command === \"|\") {\n let el = document.createElement(\"div\");\n el.className = \"TMCommandDivider\";\n this.e.appendChild(el);\n } else {\n let commandName: string;\n if (typeof command === \"string\") {\n if (DefaultCommands[command]) {\n commandName = command;\n this.commands[commandName] = DefaultCommands[commandName];\n } else {\n continue;\n }\n } else if (typeof command === \"object\" && command.name) {\n commandName = command.name;\n this.commands[commandName] = {} as CommandDefinition;\n if (DefaultCommands[commandName]) {\n Object.assign(this.commands[commandName], DefaultCommands[commandName]);\n }\n Object.assign(this.commands[commandName], command);\n } else {\n continue;\n }\n\n let title = this.commands[commandName].title || commandName;\n\n if (this.commands[commandName].hotkey) {\n const keys = this.commands[commandName].hotkey!.split(\"-\");\n let modifiers: string[] = [];\n let modifierexplanation: string[] = [];\n \n for (let i = 0; i < keys.length - 1; i++) {\n switch (keys[i]) {\n case \"Ctrl\":\n modifiers.push(\"ctrlKey\");\n modifierexplanation.push(\"Ctrl\");\n break;\n case \"Cmd\":\n modifiers.push(\"metaKey\");\n modifierexplanation.push(\"⌘\");\n break;\n case \"Alt\":\n modifiers.push(\"altKey\");\n modifierexplanation.push(\"Alt\");\n break;\n case \"Option\":\n modifiers.push(\"altKey\");\n modifierexplanation.push(\"⌥\");\n break;\n case \"Win\":\n modifiers.push(\"metaKey\");\n modifierexplanation.push(\"⊞ Win\");\n break;\n case \"Shift\":\n modifiers.push(\"shiftKey\");\n modifierexplanation.push(\"⇧\");\n break;\n case \"Mod\":\n if (isMacLike) {\n modifiers.push(\"metaKey\");\n modifierexplanation.push(\"⌘\");\n } else {\n modifiers.push(\"ctrlKey\");\n modifierexplanation.push(\"Ctrl\");\n }\n break;\n case \"Mod2\":\n modifiers.push(\"altKey\");\n if (isMacLike) modifierexplanation.push(\"⌥\");\n else modifierexplanation.push(\"Alt\");\n break;\n }\n }\n \n modifierexplanation.push(keys[keys.length - 1]);\n let hotkey: Hotkey = {\n modifiers: modifiers,\n command: commandName,\n };\n \n if (keys[keys.length - 1].match(/^[0-9]$/)) {\n hotkey.code = `Digit${keys[keys.length - 1]}`;\n } else {\n hotkey.key = keys[keys.length - 1].toLowerCase();\n }\n this.hotkeys.push(hotkey);\n title = title.concat(` (${modifierexplanation.join(\"+\")})`);\n }\n\n this.buttons[commandName] = document.createElement(\"div\");\n this.buttons[commandName].className = \"TMCommandButton TMCommandButton_Disabled\";\n this.buttons[commandName].title = title;\n this.buttons[commandName].innerHTML = this.commands[commandName].innerHTML;\n\n this.buttons[commandName].addEventListener(\"mousedown\", (e) =>\n this.handleClick(commandName, e)\n );\n this.e.appendChild(this.buttons[commandName]);\n }\n }\n parentElement.appendChild(this.e);\n }\n\n private handleClick(commandName: string, event: Event): void {\n if (!this.editor) return;\n event.preventDefault();\n if (typeof this.commands[commandName].action === \"string\") {\n if (this.state[commandName] === false)\n (this.editor as any).setCommandState(commandName, true);\n else (this.editor as any).setCommandState(commandName, false);\n } else if (typeof this.commands[commandName].action === \"function\") {\n (this.commands[commandName].action as CommandAction)(this.editor);\n }\n }\n\n public setEditor(editor: Editor): void {\n this.editor = editor;\n editor.addEventListener(\"selection\", (e) => this.handleSelection(e));\n }\n\n private handleSelection(event: SelectionEvent): void {\n if (event.commandState) {\n for (let command in this.commands) {\n if (event.commandState[command] === undefined) {\n if (this.commands[command].enabled) {\n this.state[command] = this.commands[command].enabled!(\n this.editor!,\n event.focus,\n event.anchor\n );\n } else {\n this.state[command] = event.focus ? false : null;\n }\n } else {\n this.state[command] = event.commandState[command];\n }\n\n if (this.state[command] === true) {\n this.buttons[command].className = \"TMCommandButton TMCommandButton_Active\";\n } else if (this.state[command] === false) {\n this.buttons[command].className = \"TMCommandButton TMCommandButton_Inactive\";\n } else {\n this.buttons[command].className = \"TMCommandButton TMCommandButton_Disabled\";\n }\n }\n }\n }\n\n private handleKeydown(event: KeyboardEvent): void {\n outer: for (let hotkey of this.hotkeys) {\n if (\n (hotkey.key && event.key.toLowerCase() === hotkey.key) ||\n (hotkey.code && event.code === hotkey.code)\n ) {\n for (let modifier of hotkey.modifiers) {\n if (!(event as any)[modifier]) continue outer;\n }\n this.handleClick(hotkey.command, event);\n return;\n }\n }\n }\n}\n\nexport default CommandBar;","'use strict';\nvar check = function (it) {\n return it && it.Math === Math && it;\n};\n\n// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\nmodule.exports =\n // eslint-disable-next-line es/no-global-this -- safe\n check(typeof globalThis == 'object' && globalThis) ||\n check(typeof window == 'object' && window) ||\n // eslint-disable-next-line no-restricted-globals -- safe\n check(typeof self == 'object' && self) ||\n check(typeof global == 'object' && global) ||\n check(typeof this == 'object' && this) ||\n // eslint-disable-next-line no-new-func -- fallback\n (function () { return this; })() || Function('return this')();\n","'use strict';\nmodule.exports = function (exec) {\n try {\n return !!exec();\n } catch (error) {\n return true;\n }\n};\n","'use strict';\nvar fails = require('../internals/fails');\n\n// Detect IE8's incomplete defineProperty implementation\nmodule.exports = !fails(function () {\n // eslint-disable-next-line es/no-object-defineproperty -- required for testing\n return Object.defineProperty({}, 1, { get: function () { return 7; } })[1] !== 7;\n});\n","'use strict';\nvar fails = require('../internals/fails');\n\nmodule.exports = !fails(function () {\n // eslint-disable-next-line es/no-function-prototype-bind -- safe\n var test = (function () { /* empty */ }).bind();\n // eslint-disable-next-line no-prototype-builtins -- safe\n return typeof test != 'function' || test.hasOwnProperty('prototype');\n});\n","'use strict';\nvar NATIVE_BIND = require('../internals/function-bind-native');\n\nvar FunctionPrototype = Function.prototype;\nvar call = FunctionPrototype.call;\n// eslint-disable-next-line es/no-function-prototype-bind -- safe\nvar uncurryThisWithBind = NATIVE_BIND && FunctionPrototype.bind.bind(call, call);\n\nmodule.exports = NATIVE_BIND ? uncurryThisWithBind : function (fn) {\n return function () {\n return call.apply(fn, arguments);\n };\n};\n","'use strict';\n// https://tc39.es/ecma262/#sec-IsHTMLDDA-internal-slot\nvar documentAll = typeof document == 'object' && document.all;\n\n// `IsCallable` abstract operation\n// https://tc39.es/ecma262/#sec-iscallable\n// eslint-disable-next-line unicorn/no-typeof-undefined -- required for testing\nmodule.exports = typeof documentAll == 'undefined' && documentAll !== undefined ? function (argument) {\n return typeof argument == 'function' || argument === documentAll;\n} : function (argument) {\n return typeof argument == 'function';\n};\n","'use strict';\n// we can't use just `it == null` since of `document.all` special case\n// https://tc39.es/ecma262/#sec-IsHTMLDDA-internal-slot-aec\nmodule.exports = function (it) {\n return it === null || it === undefined;\n};\n","'use strict';\nvar isNullOrUndefined = require('../internals/is-null-or-undefined');\n\nvar $TypeError = TypeError;\n\n// `RequireObjectCoercible` abstract operation\n// https://tc39.es/ecma262/#sec-requireobjectcoercible\nmodule.exports = function (it) {\n if (isNullOrUndefined(it)) throw new $TypeError(\"Can't call method on \" + it);\n return it;\n};\n","'use strict';\nvar requireObjectCoercible = require('../internals/require-object-coercible');\n\nvar $Object = Object;\n\n// `ToObject` abstract operation\n// https://tc39.es/ecma262/#sec-toobject\nmodule.exports = function (argument) {\n return $Object(requireObjectCoercible(argument));\n};\n","'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar toObject = require('../internals/to-object');\n\nvar hasOwnProperty = uncurryThis({}.hasOwnProperty);\n\n// `HasOwnProperty` abstract operation\n// https://tc39.es/ecma262/#sec-hasownproperty\n// eslint-disable-next-line es/no-object-hasown -- safe\nmodule.exports = Object.hasOwn || function hasOwn(it, key) {\n return hasOwnProperty(toObject(it), key);\n};\n","'use strict';\nvar DESCRIPTORS = require('../internals/descriptors');\nvar hasOwn = require('../internals/has-own-property');\n\nvar FunctionPrototype = Function.prototype;\n// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\nvar getDescriptor = DESCRIPTORS && Object.getOwnPropertyDescriptor;\n\nvar EXISTS = hasOwn(FunctionPrototype, 'name');\n// additional protection from minified / mangled / dropped function names\nvar PROPER = EXISTS && (function something() { /* empty */ }).name === 'something';\nvar CONFIGURABLE = EXISTS && (!DESCRIPTORS || (DESCRIPTORS && getDescriptor(FunctionPrototype, 'name').configurable));\n\nmodule.exports = {\n EXISTS: EXISTS,\n PROPER: PROPER,\n CONFIGURABLE: CONFIGURABLE\n};\n","'use strict';\nmodule.exports = false;\n","'use strict';\nvar globalThis = require('../internals/global-this');\n\n// eslint-disable-next-line es/no-object-defineproperty -- safe\nvar defineProperty = Object.defineProperty;\n\nmodule.exports = function (key, value) {\n try {\n defineProperty(globalThis, key, { value: value, configurable: true, writable: true });\n } catch (error) {\n globalThis[key] = value;\n } return value;\n};\n","'use strict';\nvar IS_PURE = require('../internals/is-pure');\nvar globalThis = require('../internals/global-this');\nvar defineGlobalProperty = require('../internals/define-global-property');\n\nvar SHARED = '__core-js_shared__';\nvar store = module.exports = globalThis[SHARED] || defineGlobalProperty(SHARED, {});\n\n(store.versions || (store.versions = [])).push({\n version: '3.42.0',\n mode: IS_PURE ? 'pure' : 'global',\n copyright: '© 2014-2025 Denis Pushkarev (zloirock.ru)',\n license: 'https://github.com/zloirock/core-js/blob/v3.42.0/LICENSE',\n source: 'https://github.com/zloirock/core-js'\n});\n","'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar isCallable = require('../internals/is-callable');\nvar store = require('../internals/shared-store');\n\nvar functionToString = uncurryThis(Function.toString);\n\n// this helper broken in `core-js@3.4.1-3.4.4`, so we can't use `shared` helper\nif (!isCallable(store.inspectSource)) {\n store.inspectSource = function (it) {\n return functionToString(it);\n };\n}\n\nmodule.exports = store.inspectSource;\n","'use strict';\nvar globalThis = require('../internals/global-this');\nvar isCallable = require('../internals/is-callable');\n\nvar WeakMap = globalThis.WeakMap;\n\nmodule.exports = isCallable(WeakMap) && /native code/.test(String(WeakMap));\n","'use strict';\nvar isCallable = require('../internals/is-callable');\n\nmodule.exports = function (it) {\n return typeof it == 'object' ? it !== null : isCallable(it);\n};\n","'use strict';\nvar globalThis = require('../internals/global-this');\nvar isObject = require('../internals/is-object');\n\nvar document = globalThis.document;\n// typeof document.createElement is 'object' in old IE\nvar EXISTS = isObject(document) && isObject(document.createElement);\n\nmodule.exports = function (it) {\n return EXISTS ? document.createElement(it) : {};\n};\n","'use strict';\nvar DESCRIPTORS = require('../internals/descriptors');\nvar fails = require('../internals/fails');\nvar createElement = require('../internals/document-create-element');\n\n// Thanks to IE8 for its funny defineProperty\nmodule.exports = !DESCRIPTORS && !fails(function () {\n // eslint-disable-next-line es/no-object-defineproperty -- required for testing\n return Object.defineProperty(createElement('div'), 'a', {\n get: function () { return 7; }\n }).a !== 7;\n});\n","'use strict';\nvar DESCRIPTORS = require('../internals/descriptors');\nvar fails = require('../internals/fails');\n\n// V8 ~ Chrome 36-\n// https://bugs.chromium.org/p/v8/issues/detail?id=3334\nmodule.exports = DESCRIPTORS && fails(function () {\n // eslint-disable-next-line es/no-object-defineproperty -- required for testing\n return Object.defineProperty(function () { /* empty */ }, 'prototype', {\n value: 42,\n writable: false\n }).prototype !== 42;\n});\n","'use strict';\nvar isObject = require('../internals/is-object');\n\nvar $String = String;\nvar $TypeError = TypeError;\n\n// `Assert: Type(argument) is Object`\nmodule.exports = function (argument) {\n if (isObject(argument)) return argument;\n throw new $TypeError($String(argument) + ' is not an object');\n};\n","'use strict';\nvar NATIVE_BIND = require('../internals/function-bind-native');\n\nvar call = Function.prototype.call;\n// eslint-disable-next-line es/no-function-prototype-bind -- safe\nmodule.exports = NATIVE_BIND ? call.bind(call) : function () {\n return call.apply(call, arguments);\n};\n","'use strict';\nvar globalThis = require('../internals/global-this');\nvar isCallable = require('../internals/is-callable');\n\nvar aFunction = function (argument) {\n return isCallable(argument) ? argument : undefined;\n};\n\nmodule.exports = function (namespace, method) {\n return arguments.length < 2 ? aFunction(globalThis[namespace]) : globalThis[namespace] && globalThis[namespace][method];\n};\n","'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\n\nmodule.exports = uncurryThis({}.isPrototypeOf);\n","'use strict';\nvar globalThis = require('../internals/global-this');\n\nvar navigator = globalThis.navigator;\nvar userAgent = navigator && navigator.userAgent;\n\nmodule.exports = userAgent ? String(userAgent) : '';\n","'use strict';\nvar globalThis = require('../internals/global-this');\nvar userAgent = require('../internals/environment-user-agent');\n\nvar process = globalThis.process;\nvar Deno = globalThis.Deno;\nvar versions = process && process.versions || Deno && Deno.version;\nvar v8 = versions && versions.v8;\nvar match, version;\n\nif (v8) {\n match = v8.split('.');\n // in old Chrome, versions of V8 isn't V8 = Chrome / 10\n // but their correct versions are not interesting for us\n version = match[0] > 0 && match[0] < 4 ? 1 : +(match[0] + match[1]);\n}\n\n// BrowserFS NodeJS `process` polyfill incorrectly set `.v8` to `0.0`\n// so check `userAgent` even if `.v8` exists, but 0\nif (!version && userAgent) {\n match = userAgent.match(/Edge\\/(\\d+)/);\n if (!match || match[1] >= 74) {\n match = userAgent.match(/Chrome\\/(\\d+)/);\n if (match) version = +match[1];\n }\n}\n\nmodule.exports = version;\n","'use strict';\n/* eslint-disable es/no-symbol -- required for testing */\nvar V8_VERSION = require('../internals/environment-v8-version');\nvar fails = require('../internals/fails');\nvar globalThis = require('../internals/global-this');\n\nvar $String = globalThis.String;\n\n// eslint-disable-next-line es/no-object-getownpropertysymbols -- required for testing\nmodule.exports = !!Object.getOwnPropertySymbols && !fails(function () {\n var symbol = Symbol('symbol detection');\n // Chrome 38 Symbol has incorrect toString conversion\n // `get-own-property-symbols` polyfill symbols converted to object are not Symbol instances\n // nb: Do not call `String` directly to avoid this being optimized out to `symbol+''` which will,\n // of course, fail.\n return !$String(symbol) || !(Object(symbol) instanceof Symbol) ||\n // Chrome 38-40 symbols are not inherited from DOM collections prototypes to instances\n !Symbol.sham && V8_VERSION && V8_VERSION < 41;\n});\n","'use strict';\n/* eslint-disable es/no-symbol -- required for testing */\nvar NATIVE_SYMBOL = require('../internals/symbol-constructor-detection');\n\nmodule.exports = NATIVE_SYMBOL &&\n !Symbol.sham &&\n typeof Symbol.iterator == 'symbol';\n","'use strict';\nvar getBuiltIn = require('../internals/get-built-in');\nvar isCallable = require('../internals/is-callable');\nvar isPrototypeOf = require('../internals/object-is-prototype-of');\nvar USE_SYMBOL_AS_UID = require('../internals/use-symbol-as-uid');\n\nvar $Object = Object;\n\nmodule.exports = USE_SYMBOL_AS_UID ? function (it) {\n return typeof it == 'symbol';\n} : function (it) {\n var $Symbol = getBuiltIn('Symbol');\n return isCallable($Symbol) && isPrototypeOf($Symbol.prototype, $Object(it));\n};\n","'use strict';\nvar $String = String;\n\nmodule.exports = function (argument) {\n try {\n return $String(argument);\n } catch (error) {\n return 'Object';\n }\n};\n","'use strict';\nvar isCallable = require('../internals/is-callable');\nvar tryToString = require('../internals/try-to-string');\n\nvar $TypeError = TypeError;\n\n// `Assert: IsCallable(argument) is true`\nmodule.exports = function (argument) {\n if (isCallable(argument)) return argument;\n throw new $TypeError(tryToString(argument) + ' is not a function');\n};\n","'use strict';\nvar aCallable = require('../internals/a-callable');\nvar isNullOrUndefined = require('../internals/is-null-or-undefined');\n\n// `GetMethod` abstract operation\n// https://tc39.es/ecma262/#sec-getmethod\nmodule.exports = function (V, P) {\n var func = V[P];\n return isNullOrUndefined(func) ? undefined : aCallable(func);\n};\n","'use strict';\nvar call = require('../internals/function-call');\nvar isCallable = require('../internals/is-callable');\nvar isObject = require('../internals/is-object');\n\nvar $TypeError = TypeError;\n\n// `OrdinaryToPrimitive` abstract operation\n// https://tc39.es/ecma262/#sec-ordinarytoprimitive\nmodule.exports = function (input, pref) {\n var fn, val;\n if (pref === 'string' && isCallable(fn = input.toString) && !isObject(val = call(fn, input))) return val;\n if (isCallable(fn = input.valueOf) && !isObject(val = call(fn, input))) return val;\n if (pref !== 'string' && isCallable(fn = input.toString) && !isObject(val = call(fn, input))) return val;\n throw new $TypeError(\"Can't convert object to primitive value\");\n};\n","'use strict';\nvar store = require('../internals/shared-store');\n\nmodule.exports = function (key, value) {\n return store[key] || (store[key] = value || {});\n};\n","'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\n\nvar id = 0;\nvar postfix = Math.random();\nvar toString = uncurryThis(1.0.toString);\n\nmodule.exports = function (key) {\n return 'Symbol(' + (key === undefined ? '' : key) + ')_' + toString(++id + postfix, 36);\n};\n","'use strict';\nvar globalThis = require('../internals/global-this');\nvar shared = require('../internals/shared');\nvar hasOwn = require('../internals/has-own-property');\nvar uid = require('../internals/uid');\nvar NATIVE_SYMBOL = require('../internals/symbol-constructor-detection');\nvar USE_SYMBOL_AS_UID = require('../internals/use-symbol-as-uid');\n\nvar Symbol = globalThis.Symbol;\nvar WellKnownSymbolsStore = shared('wks');\nvar createWellKnownSymbol = USE_SYMBOL_AS_UID ? Symbol['for'] || Symbol : Symbol && Symbol.withoutSetter || uid;\n\nmodule.exports = function (name) {\n if (!hasOwn(WellKnownSymbolsStore, name)) {\n WellKnownSymbolsStore[name] = NATIVE_SYMBOL && hasOwn(Symbol, name)\n ? Symbol[name]\n : createWellKnownSymbol('Symbol.' + name);\n } return WellKnownSymbolsStore[name];\n};\n","'use strict';\nvar call = require('../internals/function-call');\nvar isObject = require('../internals/is-object');\nvar isSymbol = require('../internals/is-symbol');\nvar getMethod = require('../internals/get-method');\nvar ordinaryToPrimitive = require('../internals/ordinary-to-primitive');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar $TypeError = TypeError;\nvar TO_PRIMITIVE = wellKnownSymbol('toPrimitive');\n\n// `ToPrimitive` abstract operation\n// https://tc39.es/ecma262/#sec-toprimitive\nmodule.exports = function (input, pref) {\n if (!isObject(input) || isSymbol(input)) return input;\n var exoticToPrim = getMethod(input, TO_PRIMITIVE);\n var result;\n if (exoticToPrim) {\n if (pref === undefined) pref = 'default';\n result = call(exoticToPrim, input, pref);\n if (!isObject(result) || isSymbol(result)) return result;\n throw new $TypeError(\"Can't convert object to primitive value\");\n }\n if (pref === undefined) pref = 'number';\n return ordinaryToPrimitive(input, pref);\n};\n","'use strict';\nvar toPrimitive = require('../internals/to-primitive');\nvar isSymbol = require('../internals/is-symbol');\n\n// `ToPropertyKey` abstract operation\n// https://tc39.es/ecma262/#sec-topropertykey\nmodule.exports = function (argument) {\n var key = toPrimitive(argument, 'string');\n return isSymbol(key) ? key : key + '';\n};\n","'use strict';\nvar DESCRIPTORS = require('../internals/descriptors');\nvar IE8_DOM_DEFINE = require('../internals/ie8-dom-define');\nvar V8_PROTOTYPE_DEFINE_BUG = require('../internals/v8-prototype-define-bug');\nvar anObject = require('../internals/an-object');\nvar toPropertyKey = require('../internals/to-property-key');\n\nvar $TypeError = TypeError;\n// eslint-disable-next-line es/no-object-defineproperty -- safe\nvar $defineProperty = Object.defineProperty;\n// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\nvar $getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\nvar ENUMERABLE = 'enumerable';\nvar CONFIGURABLE = 'configurable';\nvar WRITABLE = 'writable';\n\n// `Object.defineProperty` method\n// https://tc39.es/ecma262/#sec-object.defineproperty\nexports.f = DESCRIPTORS ? V8_PROTOTYPE_DEFINE_BUG ? function defineProperty(O, P, Attributes) {\n anObject(O);\n P = toPropertyKey(P);\n anObject(Attributes);\n if (typeof O === 'function' && P === 'prototype' && 'value' in Attributes && WRITABLE in Attributes && !Attributes[WRITABLE]) {\n var current = $getOwnPropertyDescriptor(O, P);\n if (current && current[WRITABLE]) {\n O[P] = Attributes.value;\n Attributes = {\n configurable: CONFIGURABLE in Attributes ? Attributes[CONFIGURABLE] : current[CONFIGURABLE],\n enumerable: ENUMERABLE in Attributes ? Attributes[ENUMERABLE] : current[ENUMERABLE],\n writable: false\n };\n }\n } return $defineProperty(O, P, Attributes);\n} : $defineProperty : function defineProperty(O, P, Attributes) {\n anObject(O);\n P = toPropertyKey(P);\n anObject(Attributes);\n if (IE8_DOM_DEFINE) try {\n return $defineProperty(O, P, Attributes);\n } catch (error) { /* empty */ }\n if ('get' in Attributes || 'set' in Attributes) throw new $TypeError('Accessors not supported');\n if ('value' in Attributes) O[P] = Attributes.value;\n return O;\n};\n","'use strict';\nmodule.exports = function (bitmap, value) {\n return {\n enumerable: !(bitmap & 1),\n configurable: !(bitmap & 2),\n writable: !(bitmap & 4),\n value: value\n };\n};\n","'use strict';\nvar DESCRIPTORS = require('../internals/descriptors');\nvar definePropertyModule = require('../internals/object-define-property');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\n\nmodule.exports = DESCRIPTORS ? function (object, key, value) {\n return definePropertyModule.f(object, key, createPropertyDescriptor(1, value));\n} : function (object, key, value) {\n object[key] = value;\n return object;\n};\n","'use strict';\nvar shared = require('../internals/shared');\nvar uid = require('../internals/uid');\n\nvar keys = shared('keys');\n\nmodule.exports = function (key) {\n return keys[key] || (keys[key] = uid(key));\n};\n","'use strict';\nmodule.exports = {};\n","'use strict';\nvar NATIVE_WEAK_MAP = require('../internals/weak-map-basic-detection');\nvar globalThis = require('../internals/global-this');\nvar isObject = require('../internals/is-object');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar hasOwn = require('../internals/has-own-property');\nvar shared = require('../internals/shared-store');\nvar sharedKey = require('../internals/shared-key');\nvar hiddenKeys = require('../internals/hidden-keys');\n\nvar OBJECT_ALREADY_INITIALIZED = 'Object already initialized';\nvar TypeError = globalThis.TypeError;\nvar WeakMap = globalThis.WeakMap;\nvar set, get, has;\n\nvar enforce = function (it) {\n return has(it) ? get(it) : set(it, {});\n};\n\nvar getterFor = function (TYPE) {\n return function (it) {\n var state;\n if (!isObject(it) || (state = get(it)).type !== TYPE) {\n throw new TypeError('Incompatible receiver, ' + TYPE + ' required');\n } return state;\n };\n};\n\nif (NATIVE_WEAK_MAP || shared.state) {\n var store = shared.state || (shared.state = new WeakMap());\n /* eslint-disable no-self-assign -- prototype methods protection */\n store.get = store.get;\n store.has = store.has;\n store.set = store.set;\n /* eslint-enable no-self-assign -- prototype methods protection */\n set = function (it, metadata) {\n if (store.has(it)) throw new TypeError(OBJECT_ALREADY_INITIALIZED);\n metadata.facade = it;\n store.set(it, metadata);\n return metadata;\n };\n get = function (it) {\n return store.get(it) || {};\n };\n has = function (it) {\n return store.has(it);\n };\n} else {\n var STATE = sharedKey('state');\n hiddenKeys[STATE] = true;\n set = function (it, metadata) {\n if (hasOwn(it, STATE)) throw new TypeError(OBJECT_ALREADY_INITIALIZED);\n metadata.facade = it;\n createNonEnumerableProperty(it, STATE, metadata);\n return metadata;\n };\n get = function (it) {\n return hasOwn(it, STATE) ? it[STATE] : {};\n };\n has = function (it) {\n return hasOwn(it, STATE);\n };\n}\n\nmodule.exports = {\n set: set,\n get: get,\n has: has,\n enforce: enforce,\n getterFor: getterFor\n};\n","'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar fails = require('../internals/fails');\nvar isCallable = require('../internals/is-callable');\nvar hasOwn = require('../internals/has-own-property');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar CONFIGURABLE_FUNCTION_NAME = require('../internals/function-name').CONFIGURABLE;\nvar inspectSource = require('../internals/inspect-source');\nvar InternalStateModule = require('../internals/internal-state');\n\nvar enforceInternalState = InternalStateModule.enforce;\nvar getInternalState = InternalStateModule.get;\nvar $String = String;\n// eslint-disable-next-line es/no-object-defineproperty -- safe\nvar defineProperty = Object.defineProperty;\nvar stringSlice = uncurryThis(''.slice);\nvar replace = uncurryThis(''.replace);\nvar join = uncurryThis([].join);\n\nvar CONFIGURABLE_LENGTH = DESCRIPTORS && !fails(function () {\n return defineProperty(function () { /* empty */ }, 'length', { value: 8 }).length !== 8;\n});\n\nvar TEMPLATE = String(String).split('String');\n\nvar makeBuiltIn = module.exports = function (value, name, options) {\n if (stringSlice($String(name), 0, 7) === 'Symbol(') {\n name = '[' + replace($String(name), /^Symbol\\(([^)]*)\\).*$/, '$1') + ']';\n }\n if (options && options.getter) name = 'get ' + name;\n if (options && options.setter) name = 'set ' + name;\n if (!hasOwn(value, 'name') || (CONFIGURABLE_FUNCTION_NAME && value.name !== name)) {\n if (DESCRIPTORS) defineProperty(value, 'name', { value: name, configurable: true });\n else value.name = name;\n }\n if (CONFIGURABLE_LENGTH && options && hasOwn(options, 'arity') && value.length !== options.arity) {\n defineProperty(value, 'length', { value: options.arity });\n }\n try {\n if (options && hasOwn(options, 'constructor') && options.constructor) {\n if (DESCRIPTORS) defineProperty(value, 'prototype', { writable: false });\n // in V8 ~ Chrome 53, prototypes of some methods, like `Array.prototype.values`, are non-writable\n } else if (value.prototype) value.prototype = undefined;\n } catch (error) { /* empty */ }\n var state = enforceInternalState(value);\n if (!hasOwn(state, 'source')) {\n state.source = join(TEMPLATE, typeof name == 'string' ? name : '');\n } return value;\n};\n\n// add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative\n// eslint-disable-next-line no-extend-native -- required\nFunction.prototype.toString = makeBuiltIn(function toString() {\n return isCallable(this) && getInternalState(this).source || inspectSource(this);\n}, 'toString');\n","'use strict';\nvar makeBuiltIn = require('../internals/make-built-in');\nvar defineProperty = require('../internals/object-define-property');\n\nmodule.exports = function (target, name, descriptor) {\n if (descriptor.get) makeBuiltIn(descriptor.get, name, { getter: true });\n if (descriptor.set) makeBuiltIn(descriptor.set, name, { setter: true });\n return defineProperty.f(target, name, descriptor);\n};\n","'use strict';\nvar anObject = require('../internals/an-object');\n\n// `RegExp.prototype.flags` getter implementation\n// https://tc39.es/ecma262/#sec-get-regexp.prototype.flags\nmodule.exports = function () {\n var that = anObject(this);\n var result = '';\n if (that.hasIndices) result += 'd';\n if (that.global) result += 'g';\n if (that.ignoreCase) result += 'i';\n if (that.multiline) result += 'm';\n if (that.dotAll) result += 's';\n if (that.unicode) result += 'u';\n if (that.unicodeSets) result += 'v';\n if (that.sticky) result += 'y';\n return result;\n};\n","'use strict';\nvar globalThis = require('../internals/global-this');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar defineBuiltInAccessor = require('../internals/define-built-in-accessor');\nvar regExpFlags = require('../internals/regexp-flags');\nvar fails = require('../internals/fails');\n\n// babel-minify and Closure Compiler transpiles RegExp('.', 'd') -> /./d and it causes SyntaxError\nvar RegExp = globalThis.RegExp;\nvar RegExpPrototype = RegExp.prototype;\n\nvar FORCED = DESCRIPTORS && fails(function () {\n var INDICES_SUPPORT = true;\n try {\n RegExp('.', 'd');\n } catch (error) {\n INDICES_SUPPORT = false;\n }\n\n var O = {};\n // modern V8 bug\n var calls = '';\n var expected = INDICES_SUPPORT ? 'dgimsy' : 'gimsy';\n\n var addGetter = function (key, chr) {\n // eslint-disable-next-line es/no-object-defineproperty -- safe\n Object.defineProperty(O, key, { get: function () {\n calls += chr;\n return true;\n } });\n };\n\n var pairs = {\n dotAll: 's',\n global: 'g',\n ignoreCase: 'i',\n multiline: 'm',\n sticky: 'y'\n };\n\n if (INDICES_SUPPORT) pairs.hasIndices = 'd';\n\n for (var key in pairs) addGetter(key, pairs[key]);\n\n // eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\n var result = Object.getOwnPropertyDescriptor(RegExpPrototype, 'flags').get.call(O);\n\n return result !== expected || calls !== expected;\n});\n\n// `RegExp.prototype.flags` getter\n// https://tc39.es/ecma262/#sec-get-regexp.prototype.flags\nif (FORCED) defineBuiltInAccessor(RegExpPrototype, 'flags', {\n configurable: true,\n get: regExpFlags\n});\n","export interface GrammarRule {\n regexp: RegExp;\n replacement: string;\n labelPlaceholder?: number;\n}\n\nexport interface HTMLBlockRule {\n start: RegExp;\n end: RegExp | false;\n paraInterrupt: boolean;\n}\n\nexport interface InlineCommand {\n type: 'inline';\n className: string;\n set: {\n pre: string;\n post: string;\n };\n unset: {\n prePattern: RegExp;\n postPattern: RegExp;\n };\n}\n\nexport interface LineCommand {\n type: 'line';\n className: string;\n set: {\n pattern: RegExp;\n replacement: string;\n };\n unset: {\n pattern: RegExp;\n replacement: string;\n };\n}\n\nexport type Command = InlineCommand | LineCommand;\n\nconst replacements: Record<string, RegExp> = {\n ASCIIPunctuation: /[!\"#$%&'()*+,\\-./:;<=>?@[\\]^_`{|}~\\\\]/, \n NotTriggerChar: /[^`_*[\\]()<>!~]/,\n Scheme: /[A-Za-z][A-Za-z0-9+.-]{1,31}/,\n Email: /[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*/, // From CommonMark spec\n HTMLOpenTag: /<HTMLTagName(?:HTMLAttribute)*\\s*\\/?>/,\n HTMLCloseTag: /<\\/HTMLTagName\\s*>/,\n HTMLTagName: /[A-Za-z][A-Za-z0-9-]*/, \n HTMLComment: /<!--(?:[^>-]|(?:[^>-](?:[^-]|-[^-])*[^-]))-->/,\n HTMLPI: /<\\?(?:|.|(?:[^?]|\\?[^>])*)\\?>/,\n HTMLDeclaration: /<![A-Z]+\\s[^>]*>/,\n HTMLCDATA: /<!\\[CDATA\\[.*?\\]\\]>/,\n HTMLAttribute: /\\s+[A-Za-z_:][A-Za-z0-9_.:-]*(?:HTMLAttValue)?/,\n HTMLAttValue: /\\s*=\\s*(?:(?:'[^']*')|(?:\"[^\"]*\")|(?:[^\\s\"'=<>`]+))/,\n KnownTag: /address|article|aside|base|basefont|blockquote|body|caption|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption|figure|footer|form|frame|frameset|h1|h2|h3|h4|h5|h6|head|header|hr|html|iframe|legend|li|link|main|menu|menuitem|nav|noframes|ol|optgroup|option|p|param|section|source|summary|table|tbody|td|tfoot|th|thead|title|tr|track|ul/\n};\n\n// From CommonMark.js. \nexport const punctuationLeading = new RegExp(/^(?:[!\"#$%&'()*+,\\-./:;<=>?@[\\]\\\\^_`{|}~\\xA1\\xA7\\xAB\\xB6\\xB7\\xBB\\xBF\\u037E\\u0387\\u055A-\\u055F\\u0589\\u058A\\u05BE\\u05C0\\u05C3\\u05C6\\u05F3\\u05F4\\u0609\\u060A\\u060C\\u060D\\u061B\\u061E\\u061F\\u066A-\\u066D\\u06D4\\u0700-\\u070D\\u07F7-\\u07F9\\u0830-\\u083E\\u085E\\u0964\\u0965\\u0970\\u0AF0\\u0DF4\\u0E4F\\u0E5A\\u0E5B\\u0F04-\\u0F12\\u0F14\\u0F3A-\\u0F3D\\u0F85\\u0FD0-\\u0FD4\\u0FD9\\u0FDA\\u104A-\\u104F\\u10FB\\u1360-\\u1368\\u1400\\u166D\\u166E\\u169B\\u169C\\u16EB-\\u16ED\\u1735\\u1736\\u17D4-\\u17D6\\u17D8-\\u17DA\\u1800-\\u180A\\u1944\\u1945\\u1A1E\\u1A1F\\u1AA0-\\u1AA6\\u1AA8-\\u1AAD\\u1B5A-\\u1B60\\u1BFC-\\u1BFF\\u1C3B-\\u1C3F\\u1C7E\\u1C7F\\u1CC0-\\u1CC7\\u1CD3\\u2010-\\u2027\\u2030-\\u2043\\u2045-\\u2051\\u2053-\\u205E\\u207D\\u207E\\u208D\\u208E\\u2308-\\u230B\\u2329\\u232A\\u2768-\\u2775\\u27C5\\u27C6\\u27E6-\\u27EF\\u2983-\\u2998\\u29D8-\\u29DB\\u29FC\\u29FD\\u2CF9-\\u2CFC\\u2CFE\\u2CFF\\u2D70\\u2E00-\\u2E2E\\u2E30-\\u2E42\\u3001-\\u3003\\u3008-\\u3011\\u3014-\\u301F\\u3030\\u303D\\u30A0\\u30FB\\uA4FE\\uA4FF\\uA60D-\\uA60F\\uA673\\uA67E\\uA6F2-\\uA6F7\\uA874-\\uA877\\uA8CE\\uA8CF\\uA8F8-\\uA8FA\\uA8FC\\uA92E\\uA92F\\uA95F\\uA9C1-\\uA9CD\\uA9DE\\uA9DF\\uAA5C-\\uAA5F\\uAADE\\uAADF\\uAAF0\\uAAF1\\uABEB\\uFD3E\\uFD3F\\uFE10-\\uFE19\\uFE30-\\uFE52\\uFE54-\\uFE61\\uFE63\\uFE68\\uFE6A\\uFE6B\\uFF01-\\uFF03\\uFF05-\\uFF0A\\uFF0C-\\uFF0F\\uFF1A\\uFF1B\\uFF1F\\uFF20\\uFF3B-\\uFF3D\\uFF3F\\uFF5B\\uFF5D\\uFF5F-\\uFF65]|\\uD800[\\uDD00-\\uDD02\\uDF9F\\uDFD0]|\\uD801\\uDD6F|\\uD802[\\uDC57\\uDD1F\\uDD3F\\uDE50-\\uDE58\\uDE7F\\uDEF0-\\uDEF6\\uDF39-\\uDF3F\\uDF99-\\uDF9C]|\\uD804[\\uDC47-\\uDC4D\\uDCBB\\uDCBC\\uDCBE-\\uDCC1\\uDD40-\\uDD43\\uDD74\\uDD75\\uDDC5-\\uDDC9\\uDDCD\\uDDDB\\uDDDD-\\uDDDF\\uDE38-\\uDE3D\\uDEA9]|\\uD805[\\uDCC6\\uDDC1-\\uDDD7\\uDE41-\\uDE43\\uDF3C-\\uDF3E]|\\uD809[\\uDC70-\\uDC74]|\\uD81A[\\uDE6E\\uDE6F\\uDEF5\\uDF37-\\uDF3B\\uDF44]|\\uD82F\\uDC9F|\\uD836[\\uDE87-\\uDE8B])/);\n\nexport const punctuationTrailing = new RegExp(/(?:[!\"#$%&'()*+,\\-./:;<=>?@[\\]\\\\^_`{|}~\\xA1\\xA7\\xAB\\xB6\\xB7\\xBB\\xBF\\u037E\\u0387\\u055A-\\u055F\\u0589\\u058A\\u05BE\\u05C0\\u05C3\\u05C6\\u05F3\\u05F4\\u0609\\u060A\\u060C\\u060D\\u061B\\u061E\\u061F\\u066A-\\u066D\\u06D4\\u0700-\\u070D\\u07F7-\\u07F9\\u0830-\\u083E\\u085E\\u0964\\u0965\\u0970\\u0AF0\\u0DF4\\u0E4F\\u0E5A\\u0E5B\\u0F04-\\u0F12\\u0F14\\u0F3A-\\u0F3D\\u0F85\\u0FD0-\\u0FD4\\u0FD9\\u0FDA\\u104A-\\u104F\\u10FB\\u1360-\\u1368\\u1400\\u166D\\u166E\\u169B\\u169C\\u16EB-\\u16ED\\u1735\\u1736\\u17D4-\\u17D6\\u17D8-\\u17DA\\u1800-\\u180A\\u1944\\u1945\\u1A1E\\u1A1F\\u1AA0-\\u1AA6\\u1AA8-\\u1AAD\\u1B5A-\\u1B60\\u1BFC-\\u1BFF\\u1C3B-\\u1C3F\\u1C7E\\u1C7F\\u1CC0-\\u1CC7\\u1CD3\\u2010-\\u2027\\u2030-\\u2043\\u2045-\\u2051\\u2053-\\u205E\\u207D\\u207E\\u208D\\u208E\\u2308-\\u230B\\u2329\\u232A\\u2768-\\u2775\\u27C5\\u27C6\\u27E6-\\u27EF\\u2983-\\u2998\\u29D8-\\u29DB\\u29FC\\u29FD\\u2CF9-\\u2CFC\\u2CFE\\u2CFF\\u2D70\\u2E00-\\u2E2E\\u2E30-\\u2E42\\u3001-\\u3003\\u3008-\\u3011\\u3014-\\u301F\\u3030\\u303D\\u30A0\\u30FB\\uA4FE\\uA4FF\\uA60D-\\uA60F\\uA673\\uA67E\\uA6F2-\\uA6F7\\uA874-\\uA877\\uA8CE\\uA8CF\\uA8F8-\\uA8FA\\uA8FC\\uA92E\\uA92F\\uA95F\\uA9C1-\\uA9CD\\uA9DE\\uA9DF\\uAA5C-\\uAA5F\\uAADE\\uAADF\\uAAF0\\uAAF1\\uABEB\\uFD3E\\uFD3F\\uFE10-\\uFE19\\uFE30-\\uFE52\\uFE54-\\uFE61\\uFE63\\uFE68\\uFE6A\\uFE6B\\uFF01-\\uFF03\\uFF05-\\uFF0A\\uFF0C-\\uFF0F\\uFF1A\\uFF1B\\uFF1F\\uFF20\\uFF3B-\\uFF3D\\uFF3F\\uFF5B\\uFF5D\\uFF5F-\\uFF65]|\\uD800[\\uDD00-\\uDD02\\uDF9F\\uDFD0]|\\uD801\\uDD6F|\\uD802[\\uDC57\\uDD1F\\uDD3F\\uDE50-\\uDE58\\uDE7F\\uDEF0-\\uDEF6\\uDF39-\\uDF3F\\uDF99-\\uDF9C]|\\uD804[\\uDC47-\\uDC4D\\uDCBB\\uDCBC\\uDCBE-\\uDCC1\\uDD40-\\uDD43\\uDD74\\uDD75\\uDDC5-\\uDDC9\\uDDCD\\uDDDB\\uDDDD-\\uDDDF\\uDE38-\\uDE3D\\uDEA9]|\\uD805[\\uDCC6\\uDDC1-\\uDDD7\\uDE41-\\uDE43\\uDF3C-\\uDF3E]|\\uD809[\\uDC70-\\uDC74]|\\uD81A[\\uDE6E\\uDE6F\\uDEF5\\uDF37-\\uDF3B\\uDF44]|\\uD82F\\uDC9F|\\uD836[\\uDE87-\\uDE8B])$/);\n\n/**\n * This is CommonMark's block grammar, but we're ignoring nested blocks here. \n */ \nexport const lineGrammar: Record<string, GrammarRule> = { \n TMH1: { \n regexp: /^( {0,3}#\\s)(.*?)((?:\\s+#+\\s*)?)$/, \n replacement: '<span class=\"TMMark TMMark_TMH1\">$1</span>$$2<span class=\"TMMark TMMark_TMH1\">$3</span>'\n },\n TMH2: { \n regexp: /^( {0,3}##\\s)(.*?)((?:\\s+#+\\s*)?)$/, \n replacement: '<span class=\"TMMark TMMark_TMH2\">$1</span>$$2<span class=\"TMMark TMMark_TMH2\">$3</span>'\n },\n TMH3: { \n regexp: /^( {0,3}###\\s)(.*?)((?:\\s+#+\\s*)?)$/, \n replacement: '<span class=\"TMMark TMMark_TMH3\">$1</span>$$2<span class=\"TMMark TMMark_TMH3\">$3</span>'\n },\n TMH4: { \n regexp: /^( {0,3}####\\s)(.*?)((?:\\s+#+\\s*)?)$/, \n replacement: '<span class=\"TMMark TMMark_TMH4\">$1</span>$$2<span class=\"TMMark TMMark_TMH4\">$3</span>'\n },\n TMH5: { \n regexp: /^( {0,3}#####\\s)(.*?)((?:\\s+#+\\s*)?)$/, \n replacement: '<span class=\"TMMark TMMark_TMH5\">$1</span>$$2<span class=\"TMMark TMMark_TMH5\">$3</span>'\n },\n TMH6: { \n regexp: /^( {0,3}######\\s)(.*?)((?:\\s+#+\\s*)?)$/, \n replacement: '<span class=\"TMMark TMMark_TMH6\">$1</span>$$2<span class=\"TMMark TMMark_TMH6\">$3</span>'\n },\n TMBlockquote: { \n regexp: /^( {0,3}>[ ]?)(.*)$/, \n replacement: '<span class=\"TMMark TMMark_TMBlockquote\">$1</span>$$2'\n },\n TMCodeFenceBacktickOpen: { \n regexp: /^( {0,3}(?<seq>````*)\\s*)([^`]*?)(\\s*)$/, \n replacement: '<span class=\"TMMark TMMark_TMCodeFenceBacktick\">$1</span><span class=\"TMInfoString\">$3</span>$4'\n },\n TMCodeFenceTildeOpen: { \n regexp: /^( {0,3}(?<seq>~~~~*)\\s*)(.*?)(\\s*)$/, \n replacement: '<span class=\"TMMark TMMark_TMCodeFenceTilde\">$1</span><span class=\"TMInfoString\">$3</span>$4'\n },\n TMCodeFenceBacktickClose: { \n regexp: /^( {0,3}(?<seq>````*))(\\s*)$/, \n replacement: '<span class=\"TMMark TMMark_TMCodeFenceBacktick\">$1</span>$3'\n },\n TMCodeFenceTildeClose: { \n regexp: /^( {0,3}(?<seq>~~~~*))(\\s*)$/, \n replacement: '<span class=\"TMMark TMMark_TMCodeFenceTilde\">$1</span>$3'\n },\n TMBlankLine: { \n regexp: /^([ \\t]*)$/, \n replacement: '$0'\n },\n TMSetextH1Marker: { \n regexp: /^ {0,3}=+\\s*$/, \n replacement: '<span class=\"TMMark TMMark_TMSetextH1Marker\">$0</span>'\n },\n TMSetextH2Marker: { \n regexp: /^ {0,3}-+\\s*$/, \n replacement: '<span class=\"TMMark TMMark_TMSetextH1Marker\">$0</span>'\n },\n TMHR: { \n regexp: /^( {0,3}(\\*[ \\t]*\\*[ \\t]*\\*[ \\t*]*)|(-[ \\t]*-[ \\t]*-[ \\t-]*)|(_[ \\t]*_[ \\t]*_[ \\t_]*))$/, \n replacement: '<span class=\"TMMark TMMark_TMHR\">$0</span>'\n },\n TMUL: { \n regexp: /^( {0,3}[+*-] {1,4})(.*)$/, \n replacement: '<span class=\"TMMark TMMark_TMUL\">$1</span>$$2'\n },\n TMOL: { \n regexp: /^( {0,3}\\d{1,9}[.)] {1,4})(.*)$/, \n replacement: '<span class=\"TMMark TMMark_TMOL\">$1</span>$$2'\n },\n // TODO: This is currently preventing sublists (and any content within list items, really) from working\n TMIndentedCode: { \n regexp: /^( {4}|\\t)(.*)$/, \n replacement: '<span class=\"TMMark TMMark_TMIndentedCode\">$1</span>$2'\n },\n TMLinkReferenceDefinition: {\n // TODO: Link destination can't include unbalanced parantheses, but we just ignore that here \n regexp: /^( {0,3}\\[\\s*)([^\\s\\]](?:[^\\]]|\\\\\\])*?)(\\s*\\]:\\s*)((?:[^\\s<>]+)|(?:<(?:[^<>\\\\]|\\\\.)*>))?(\\s*)((?:\\((?:[^()\\\\]|\\\\.)*\\))|(?:\"(?:[^\"\\\\]|\\\\.)*\")|(?:'(?:[^'\\\\]|\\\\.)*'))?(\\s*)$/, \n replacement: '<span class=\"TMMark TMMark_TMLinkReferenceDefinition\">$1</span><span class=\"TMLinkLabel TMLinkLabel_Definition\">$2</span><span class=\"TMMark TMMark_TMLinkReferenceDefinition\">$3</span><span class=\"TMLinkDestination\">$4</span>$5<span class=\"TMLinkTitle\">$6</span>$7',\n labelPlaceholder: 2, // this defines which placeholder in the above regex is the link \"label\"\n },\n};\n\n/**\n * HTML blocks have multiple different classes of opener and closer. This array defines all the cases\n */\nexport const htmlBlockGrammar: HTMLBlockRule[] = [\n { start: /^ {0,3}<(?:script|pre|style)(?:\\s|>|$)/i, end: /(?:<\\/script>|<\\/pre>|<\\/style>)/i, paraInterrupt: true },\n { start: /^ {0,3}<!--/, end: /-->/, paraInterrupt: true },\n { start: /^ {0,3}<\\?/, end: /\\?>/, paraInterrupt: true },\n { start: /^ {0,3}<![A-Z]/, end: />/, paraInterrupt : true},\n { start: /^ {0,3}<!\\[CDATA\\[/, end: /\\]\\]>/, paraInterrupt : true},\n { start: /^ {0,3}(?:<|<\\/)(?:KnownTag)(?:\\s|>|\\/>|$)/i, end: false, paraInterrupt: true},\n { start: /^ {0,3}(?:HTMLOpenTag|HTMLCloseTag)\\s*$/, end: false, paraInterrupt: false},\n];\n\n/**\n * Structure of the object:\n * Top level entries are rules, each consisting of a regular expressions (in string format) as well as a replacement.\n * In the regular expressions, replacements from the object 'replacements' will be processed before compiling into the property regexp.\n */\nexport const inlineGrammar: Record<string, GrammarRule> = {\n escape : {\n regexp: /^\\\\(ASCIIPunctuation)/,\n replacement : '<span class=\"TMMark TMMark_TMEscape\">\\\\</span>$1'\n },\n code : {\n regexp: /^(`+)((?:[^`])|(?:[^`].*?[^`]))(\\1)/,\n replacement : '<span class=\"TMMark TMMark_TMCode\">$1</span><code class=\"TMCode\">$2</code><span class=\"TMMark TMMark_TMCode\">$3</span>' \n },\n autolink : {\n regexp: /^<((?:Scheme:[^\\s<>]*)|(?:Email))>/,\n replacement: '<span class=\"TMMark TMMark_TMAutolink\"><</span><span class=\"TMAutolink\">$1</span><span class=\"TMMark TMMark_TMAutolink\">></span>'\n },\n html : {\n regexp: /^((?:HTMLOpenTag)|(?:HTMLCloseTag)|(?:HTMLComment)|(?:HTMLPI)|(?:HTMLDeclaration)|(?:HTMLCDATA))/,\n replacement: '<span class=\"TMHTML\">$1</span>',\n },\n linkOpen : {\n regexp: /^\\[/,\n replacement: ''\n },\n imageOpen : {\n regexp: /^!\\[/,\n replacement : ''\n },\n linkLabel : {\n regexp: /^(\\[\\s*)([^\\]]*?)(\\s*\\])/,\n replacement: '',\n labelPlaceholder: 2\n },\n default : {\n regexp: /^(.|(?:NotTriggerChar+))/,\n replacement: '$1'\n }\n};\n\n// Process replacements in regexps\nconst replacementRegexp = new RegExp(Object.keys(replacements).join('|'));\n\n// Inline\nconst inlineRules = [...Object.keys(inlineGrammar)];\nfor (let rule of inlineRules) {\n let re = inlineGrammar[rule].regexp.source;\n // Replace while there is something to replace. This means it also works over multiple levels (replacements containing replacements)\n while (re.match(replacementRegexp)) {\n re = re.replace(replacementRegexp, (string) => { return replacements[string].source; });\n }\n inlineGrammar[rule].regexp = new RegExp(re, inlineGrammar[rule].regexp.flags);\n}\n\n// HTML Block (only opening rule is processed currently)\nfor (let rule of htmlBlockGrammar) {\n let re = rule.start.source;\n // Replace while there is something to replace. This means it also works over multiple levels (replacements containing replacements)\n while (re.match(replacementRegexp)) {\n re = re.replace(replacementRegexp, (string) => { return replacements[string].source; });\n }\n rule.start = new RegExp(re, rule.start.flags);\n}\n\n/**\n * Creates a merged inline grammar by combining the default inline grammar with custom rules.\n * Custom rules are processed and their regexp patterns are expanded with replacements.\n * @param customRules - Object containing custom inline grammar rules\n * @returns Merged inline grammar object\n */\nexport function createMergedInlineGrammar(customRules: Record<string, GrammarRule> = {}): Record<string, GrammarRule> {\n const merged = { ...inlineGrammar };\n \n // Process custom rules\n for (const [ruleName, rule] of Object.entries(customRules)) {\n // Copy the rule to avoid modifying the original\n const processedRule = { ...rule };\n \n // Process replacements in the regexp\n let regexpSource = rule.regexp.source;\n const replacementRegexp = new RegExp(Object.keys(replacements).join('|'));\n \n // Replace while there is something to replace\n while (regexpSource.match(replacementRegexp)) {\n regexpSource = regexpSource.replace(replacementRegexp, (match) => {\n return replacements[match].source;\n });\n }\n \n processedRule.regexp = new RegExp(regexpSource, rule.regexp.flags);\n merged[ruleName] = processedRule;\n }\n \n return merged;\n}\n\n/**\n * Escapes HTML special characters (<, >, and &) in the string.\n * @param {string} string The raw string to be escaped\n * @returns {string} The string, ready to be used in HTML\n */\nexport function htmlescape(string: string): string {\n return (string ? string : '')\n .replace(/&/g, '&')\n .replace(/</g, '<')\n .replace(/>/g, '>');\n}\n\n/**\n * Contains the commands that can be sent to the editor. Contains objects with a name representing the name of the command.\n * Each of the objects contains the following keys:\n * \n * - type: Can be either inline (for inline formatting) or line (for block / line formatting).\n * - className: Used to determine whether the command is active at a given position. \n * For line formatting, this looks at the class of the line element. For inline elements, tries to find an enclosing element with that class.\n * - set / unset: Contain instructions how to set and unset the command. For line type commands, both consist of a pattern and replacement that \n * will be applied to each line (using String.replace). For inline type commands, the set object contains a pre and post string which will\n * be inserted before and after the selection. The unset object contains a prePattern and a postPattern. Both should be regular expressions and \n * they will be applied to the portion of the line before and after the selection (using String.replace, with an empty replacement string).\n */\nexport const commands: Record<string, Command> = {\n // Replacements for unset for inline commands are '' by default\n bold: {\n type: 'inline', \n className: 'TMStrong', \n set: {pre: '**', post: '**'}, \n unset: {prePattern: /(?:\\*\\*|__)$/, postPattern: /^(?:\\*\\*|__)/}\n }, \n italic: {\n type: 'inline', \n className: 'TMEm', \n set: {pre: '*', post: '*'}, \n unset: {prePattern: /(?:\\*|_)$/, postPattern: /^(?:\\*|_)/}\n },\n code: {\n type: 'inline', \n className: 'TMCode', \n set: {pre: '`', post: '`'}, \n unset: {prePattern: /`+$/, postPattern: /^`+/} // FIXME this doesn't ensure balanced backticks right now\n }, \n strikethrough: {\n type: 'inline', \n className: 'TMStrikethrough', \n set: {pre: '~~', post: '~~'}, \n unset: {prePattern:/~~$/, postPattern: /^~~/ }\n },\n h1: {\n type: 'line', \n className: 'TMH1', \n set: {pattern: /^( {0,3}(?:(?:#+|[0-9]{1,9}[).]|[>\\-*+])\\s+)?)(.*)$/, replacement: '# $2'}, \n unset: {pattern: /^( {0,3}#\\s+)(.*?)((?:\\s+#+\\s*)?)$/, replacement: '$2'}\n },\n h2: {\n type: 'line', \n className: 'TMH2', \n set: {pattern: /^( {0,3}(?:(?:#+|[0-9]{1,9}[).]|[>\\-*+])\\s+)?)(.*)$/, replacement: '## $2'}, \n unset: {pattern: /^( {0,3}##\\s+)(.*?)((?:\\s+#+\\s*)?)$/, replacement: '$2'}\n },\n h3: {\n type: 'line', \n className: 'TMH3', \n set: {pattern: /^( {0,3}(?:(?:#+|[0-9]{1,9}[).]|[>\\-*+])\\s+)?)(.*)$/, replacement: '### $2'}, \n unset: {pattern: /^( {0,3}###\\s+)(.*?)((?:\\s+#+\\s*)?)$/, replacement: '$2'}\n },\n h4: {\n type: 'line', \n className: 'TMH4', \n set: {pattern: /^( {0,3}(?:(?:#+|[0-9]{1,9}[).]|[>\\-*+])\\s+)?)(.*)$/, replacement: '#### $2'}, \n unset: {pattern: /^( {0,3}####\\s+)(.*?)((?:\\s+#+\\s*)?)$/, replacement: '$2'}\n },\n h5: {\n type: 'line', \n className: 'TMH5', \n set: {pattern: /^( {0,3}(?:(?:#+|[0-9]{1,9}[).]|[>\\-*+])\\s+)?)(.*)$/, replacement: '##### $2'}, \n unset: {pattern: /^( {0,3}#####\\s+)(.*?)((?:\\s+#+\\s*)?)$/, replacement: '$2'}\n },\n h6: {\n type: 'line', \n className: 'TMH6', \n set: {pattern: /^( {0,3}(?:(?:#+|[0-9]{1,9}[).]|[>\\-*+])\\s+)?)(.*)$/, replacement: '###### $2'}, \n unset: {pattern: /^( {0,3}######\\s+)(.*?)((?:\\s+#+\\s*)?)$/, replacement: '$2'}\n },\n ul: {\n type: 'line', \n className: 'TMUL', \n set: {pattern: /^( {0,3}(?:(?:#+|[0-9]{1,9}[).]|[>\\-*+])\\s+)?)(.*)$/, replacement: '- $2'}, \n unset: {pattern: /^( {0,3}[+*-] {1,4})(.*)$/, replacement: '$2'}\n },\n ol: {\n type: 'line', \n className: 'TMOL', \n set: {pattern: /^( {0,3}(?:(?:#+|[0-9]{1,9}[).]|[>\\-*+])\\s+)?)(.*)$/, replacement: '$#. $2'}, \n unset: {pattern: /^( {0,3}\\d{1,9}[.)] {1,4})(.*)$/, replacement: '$2'}\n }, \n blockquote: {\n type: 'line', \n className: 'TMBlockquote', \n set: {pattern: /^( {0,3}(?:(?:#+|[0-9]{1,9}[).]|[>\\-*+])\\s+)?)(.*)$/, replacement: '> $2'}, \n unset: {pattern: /^( {0,3}>[ ]?)(.*)$/, replacement: '$2'}\n },\n};","import {\n inlineGrammar,\n lineGrammar,\n punctuationLeading,\n punctuationTrailing,\n htmlescape,\n htmlBlockGrammar,\n commands,\n HTMLBlockRule,\n Command,\n GrammarRule,\n createMergedInlineGrammar,\n} from \"./grammar\";\n\nexport interface EditorProps {\n element?: string | HTMLElement;\n editor?: string | HTMLElement;\n content?: string;\n textarea?: string | HTMLTextAreaElement;\n customInlineGrammar?: Record<string, GrammarRule>;\n}\n\nexport interface Position {\n row: number;\n col: number;\n}\n\nexport interface HistoryState {\n content: string;\n selection: Position | null;\n anchor: Position | null;\n}\n\nexport interface ChangeEvent {\n content: string;\n linesDirty: boolean[];\n}\n\nexport interface SelectionEvent {\n focus: Position;\n anchor: Position;\n commandState: Record<string, boolean | null>;\n}\n\nexport interface DropEvent {\n dataTransfer: DataTransfer;\n}\n\ntype EventType = 'change' | 'selection' | 'drop';\ntype EventHandler<T> = (event: T) => void;\n\nexport class Editor {\n public e: HTMLDivElement | null = null;\n public textarea: HTMLTextAreaElement | null = null;\n public lines: string[] = [];\n public lineElements: NodeListOf<ChildNode> | HTMLCollection | ChildNode[] = [];\n public lineTypes: string[] = [];\n public lineCaptures: RegExpExecArray[] = [];\n public lineReplacements: string[] = [];\n public linkLabels: string[] = [];\n public lineDirty: boolean[] = [];\n public lastCommandState: Record<string, boolean | null> | null = null;\n private customInlineGrammar: Record<string, GrammarRule> = {};\n private mergedInlineGrammar: Record<string, GrammarRule> = inlineGrammar;\n\n public listeners: {\n change: EventHandler<ChangeEvent>[];\n selection: EventHandler<SelectionEvent>[];\n drop: EventHandler<DropEvent>[];\n } = {\n change: [],\n selection: [],\n drop: [],\n };\n\n private undoStack: HistoryState[] = [];\n private redoStack: HistoryState[] = [];\n private isRestoringHistory: boolean = false;\n private maxHistory: number = 100;\n\n constructor(props: EditorProps = {}) {\n this.e = null;\n this.textarea = null;\n this.lines = [];\n this.lineElements = [] as ChildNode[];\n this.lineTypes = [];\n this.lineCaptures = [];\n this.lineReplacements = [];\n this.linkLabels = [];\n this.lineDirty = [];\n this.lastCommandState = null;\n this.customInlineGrammar = props.customInlineGrammar || {};\n this.mergedInlineGrammar = createMergedInlineGrammar(this.customInlineGrammar);\n\n this.listeners = {\n change: [],\n selection: [],\n drop: [],\n };\n\n let element: HTMLElement | null = null;\n if (typeof props.element === 'string') {\n element = document.getElementById(props.element);\n } else if (props.element) {\n element = props.element;\n }\n\n if (typeof props.textarea === 'string') {\n this.textarea = document.getElementById(props.textarea) as HTMLTextAreaElement;\n } else if (props.textarea) {\n this.textarea = props.textarea;\n }\n\n if (this.textarea) {\n if (!element) element = this.textarea;\n }\n\n if (!element) {\n element = document.getElementsByTagName(\"body\")[0];\n }\n if (element && element.tagName === \"TEXTAREA\") {\n this.textarea = element as HTMLTextAreaElement;\n element = this.textarea.parentNode as HTMLElement;\n }\n\n if (this.textarea) {\n this.textarea.style.display = \"none\";\n }\n\n this.undoStack = [];\n this.redoStack = [];\n this.isRestoringHistory = false;\n this.maxHistory = 100;\n\n this.createEditorElement(element, props);\n this.setContent(\n typeof props.content === \"string\"\n ? props.content\n : this.textarea\n ? this.textarea.value\n : \"# Hello TinyMDE!\\nEdit **here**\"\n );\n \n this.e!.addEventListener(\"keydown\", (e) => this.handleUndoRedoKey(e));\n }\n\n get canUndo(): boolean {\n return this.undoStack.length >= 2;\n }\n\n get canRedo(): boolean {\n return this.redoStack.length > 0;\n }\n\n private pushHistory(): void {\n if (this.isRestoringHistory) return;\n this.pushCurrentState();\n this.redoStack = [];\n }\n\n private pushCurrentState(): void {\n this.undoStack.push({\n content: this.getContent(),\n selection: this.getSelection(),\n anchor: this.getSelection(true),\n });\n if (this.undoStack.length > this.maxHistory) this.undoStack.shift();\n }\n\n public undo(): void {\n if (this.undoStack.length < 2) return;\n this.isRestoringHistory = true;\n this.pushCurrentState();\n const current = this.undoStack.pop()!;\n this.redoStack.push(current);\n const prev = this.undoStack[this.undoStack.length - 1];\n this.setContent(prev.content);\n if (prev.selection) this.setSelection(prev.selection, prev.anchor);\n this.undoStack.pop();\n this.isRestoringHistory = false;\n }\n\n public redo(): void {\n if (!this.redoStack.length) return;\n this.isRestoringHistory = true;\n this.pushCurrentState();\n const next = this.redoStack.pop()!;\n this.setContent(next.content);\n if (next.selection) this.setSelection(next.selection, next.anchor);\n this.isRestoringHistory = false;\n }\n\n private handleUndoRedoKey(e: KeyboardEvent): void {\n const isMac = /Mac|iPod|iPhone|iPad/.test(navigator.platform);\n const ctrl = isMac ? e.metaKey : e.ctrlKey;\n if (ctrl && !e.altKey) {\n if (e.key === \"z\" || e.key === \"Z\") {\n if (e.shiftKey) {\n this.redo();\n } else {\n this.undo();\n }\n e.preventDefault();\n } else if (e.key === \"y\" || e.key === \"Y\") {\n this.redo();\n e.preventDefault();\n }\n }\n }\n\n private createEditorElement(element: HTMLElement, props: EditorProps): void {\n if (props && props.editor !== undefined) {\n if (typeof props.editor === 'string') {\n this.e = document.getElementById(props.editor) as HTMLDivElement;\n } else {\n this.e = props.editor as HTMLDivElement;\n }\n } else {\n this.e = document.createElement(\"div\");\n }\n\n this.e.classList.add(\"TinyMDE\");\n this.e.contentEditable = \"true\";\n this.e.style.whiteSpace = \"pre-wrap\";\n (this.e.style as any).webkitUserModify = \"read-write-plaintext-only\";\n\n if (props.editor === undefined) {\n if (\n this.textarea &&\n this.textarea.parentNode === element &&\n this.textarea.nextSibling\n ) {\n element.insertBefore(this.e, this.textarea.nextSibling);\n } else {\n element.appendChild(this.e);\n }\n }\n\n this.e.addEventListener(\"input\", (e) => this.handleInputEvent(e));\n this.e.addEventListener(\"compositionend\", (e) => this.handleInputEvent(e));\n document.addEventListener(\"selectionchange\", (e) =>\n this.handleSelectionChangeEvent(e)\n );\n this.e.addEventListener(\"paste\", (e) => this.handlePaste(e));\n this.e.addEventListener(\"drop\", (e) => this.handleDrop(e));\n this.lineElements = this.e.childNodes;\n }\n\n public setContent(content: string): void {\n while (this.e!.firstChild) {\n this.e!.removeChild(this.e!.firstChild);\n }\n this.lines = content.split(/(?:\\r\\n|\\r|\\n)/);\n this.lineDirty = [];\n for (let lineNum = 0; lineNum < this.lines.length; lineNum++) {\n let le = document.createElement(\"div\");\n this.e!.appendChild(le);\n this.lineDirty.push(true);\n }\n this.lineTypes = new Array(this.lines.length);\n this.updateFormatting();\n this.fireChange();\n if (!this.isRestoringHistory) this.pushHistory();\n }\n\n public getContent(): string {\n return this.lines.join(\"\\n\");\n }\n\n private updateFormatting(): void {\n this.updateLineTypes();\n this.updateLinkLabels();\n this.applyLineTypes();\n }\n\n private updateLinkLabels(): void {\n this.linkLabels = [];\n for (let l = 0; l < this.lines.length; l++) {\n if (this.lineTypes[l] === \"TMLinkReferenceDefinition\") {\n this.linkLabels.push(\n this.lineCaptures[l][\n lineGrammar.TMLinkReferenceDefinition.labelPlaceholder!\n ]\n );\n }\n }\n }\n\n private replace(replacement: string, capture: RegExpExecArray): string {\n return replacement.replace(/(\\${1,2})([0-9])/g, (str, p1, p2) => {\n if (p1 === \"$\") return htmlescape(capture[parseInt(p2)]);\n else\n return `<span class=\"TMInlineFormatted\">${this.processInlineStyles(\n capture[parseInt(p2)]\n )}</span>`;\n });\n }\n\n private applyLineTypes(): void {\n for (let lineNum = 0; lineNum < this.lines.length; lineNum++) {\n if (this.lineDirty[lineNum]) {\n let contentHTML = this.replace(\n this.lineReplacements[lineNum],\n this.lineCaptures[lineNum]\n );\n (this.lineElements[lineNum] as HTMLElement).className = this.lineTypes[lineNum];\n (this.lineElements[lineNum] as HTMLElement).removeAttribute(\"style\");\n (this.lineElements[lineNum] as HTMLElement).innerHTML =\n contentHTML === \"\" ? \"<br />\" : contentHTML;\n }\n (this.lineElements[lineNum] as HTMLElement).dataset.lineNum = lineNum.toString();\n }\n }\n\n private updateLineTypes(): void {\n let codeBlockType: string | false = false;\n let codeBlockSeqLength = 0;\n let htmlBlock: HTMLBlockRule | false = false;\n\n for (let lineNum = 0; lineNum < this.lines.length; lineNum++) {\n let lineType = \"TMPara\";\n let lineCapture: RegExpExecArray = [this.lines[lineNum]] as RegExpExecArray;\n let lineReplacement = \"$$0\";\n\n // Check ongoing code blocks\n if (codeBlockType === \"TMCodeFenceBacktickOpen\") {\n let capture = lineGrammar.TMCodeFenceBacktickClose.regexp.exec(this.lines[lineNum]);\n if (capture && capture.groups![\"seq\"].length >= codeBlockSeqLength) {\n lineType = \"TMCodeFenceBacktickClose\";\n lineReplacement = lineGrammar.TMCodeFenceBacktickClose.replacement;\n lineCapture = capture;\n codeBlockType = false;\n } else {\n lineType = \"TMFencedCodeBacktick\";\n lineReplacement = '<span class=\"TMFencedCode\">$0<br /></span>';\n lineCapture = [this.lines[lineNum]] as RegExpExecArray;\n }\n } else if (codeBlockType === \"TMCodeFenceTildeOpen\") {\n let capture = lineGrammar.TMCodeFenceTildeClose.regexp.exec(this.lines[lineNum]);\n if (capture && capture.groups![\"seq\"].length >= codeBlockSeqLength) {\n lineType = \"TMCodeFenceTildeClose\";\n lineReplacement = lineGrammar.TMCodeFenceTildeClose.replacement;\n lineCapture = capture;\n codeBlockType = false;\n } else {\n lineType = \"TMFencedCodeTilde\";\n lineReplacement = '<span class=\"TMFencedCode\">$0<br /></span>';\n lineCapture = [this.lines[lineNum]] as RegExpExecArray;\n }\n }\n\n // Check HTML block types\n if (lineType === \"TMPara\" && htmlBlock === false) {\n for (let htmlBlockType of htmlBlockGrammar) {\n if (this.lines[lineNum].match(htmlBlockType.start)) {\n if (\n htmlBlockType.paraInterrupt ||\n lineNum === 0 ||\n !(\n this.lineTypes[lineNum - 1] === \"TMPara\" ||\n this.lineTypes[lineNum - 1] === \"TMUL\" ||\n this.lineTypes[lineNum - 1] === \"TMOL\" ||\n this.lineTypes[lineNum - 1] === \"TMBlockquote\"\n )\n ) {\n htmlBlock = htmlBlockType;\n break;\n }\n }\n }\n }\n\n if (htmlBlock !== false) {\n lineType = \"TMHTMLBlock\";\n lineReplacement = '<span class=\"TMHTMLContent\">$0<br /></span>';\n lineCapture = [this.lines[lineNum]] as RegExpExecArray;\n\n if (htmlBlock.end) {\n if (this.lines[lineNum].match(htmlBlock.end)) {\n htmlBlock = false;\n }\n } else {\n if (\n lineNum === this.lines.length - 1 ||\n this.lines[lineNum + 1].match(lineGrammar.TMBlankLine.regexp)\n ) {\n htmlBlock = false;\n }\n }\n }\n\n // Check all regexps if we haven't applied one of the code block types\n if (lineType === \"TMPara\") {\n for (let type in lineGrammar) {\n if (lineGrammar[type].regexp) {\n let capture = lineGrammar[type].regexp.exec(this.lines[lineNum]);\n if (capture) {\n lineType = type;\n lineReplacement = lineGrammar[type].replacement;\n lineCapture = capture;\n break;\n }\n }\n }\n }\n\n // If we've opened a code block, remember that\n if (lineType === \"TMCodeFenceBacktickOpen\" || lineType === \"TMCodeFenceTildeOpen\") {\n codeBlockType = lineType;\n codeBlockSeqLength = lineCapture.groups![\"seq\"].length;\n }\n\n // Link reference definition and indented code can't interrupt a paragraph\n if (\n (lineType === \"TMIndentedCode\" || lineType === \"TMLinkReferenceDefinition\") &&\n lineNum > 0 &&\n (this.lineTypes[lineNum - 1] === \"TMPara\" ||\n this.lineTypes[lineNum - 1] === \"TMUL\" ||\n this.lineTypes[lineNum - 1] === \"TMOL\" ||\n this.lineTypes[lineNum - 1] === \"TMBlockquote\")\n ) {\n lineType = \"TMPara\";\n lineCapture = [this.lines[lineNum]] as RegExpExecArray;\n lineReplacement = \"$$0\";\n }\n\n // Setext H2 markers that can also be interpreted as an empty list item should be regarded as such\n if (lineType === \"TMSetextH2Marker\") {\n let capture = lineGrammar.TMUL.regexp.exec(this.lines[lineNum]);\n if (capture) {\n lineType = \"TMUL\";\n lineReplacement = lineGrammar.TMUL.replacement;\n lineCapture = capture;\n }\n }\n\n // Setext headings are only valid if preceded by a paragraph\n if (lineType === \"TMSetextH1Marker\" || lineType === \"TMSetextH2Marker\") {\n if (lineNum === 0 || this.lineTypes[lineNum - 1] !== \"TMPara\") {\n let capture = lineGrammar.TMHR.regexp.exec(this.lines[lineNum]);\n if (capture) {\n lineType = \"TMHR\";\n lineCapture = capture;\n lineReplacement = lineGrammar.TMHR.replacement;\n } else {\n lineType = \"TMPara\";\n lineCapture = [this.lines[lineNum]] as RegExpExecArray;\n lineReplacement = \"$$0\";\n }\n } else {\n let headingLine = lineNum - 1;\n const headingLineType = lineType === \"TMSetextH1Marker\" ? \"TMSetextH1\" : \"TMSetextH2\";\n do {\n if (this.lineTypes[headingLine] !== headingLineType) {\n this.lineTypes[headingLine] = headingLineType;\n this.lineDirty[headingLine] = true;\n }\n this.lineReplacements[headingLine] = \"$$0\";\n this.lineCaptures[headingLine] = [this.lines[headingLine]] as RegExpExecArray;\n headingLine--;\n } while (headingLine >= 0 && this.lineTypes[headingLine] === \"TMPara\");\n }\n }\n\n if (this.lineTypes[lineNum] !== lineType) {\n this.lineTypes[lineNum] = lineType;\n this.lineDirty[lineNum] = true;\n }\n this.lineReplacements[lineNum] = lineReplacement;\n this.lineCaptures[lineNum] = lineCapture;\n }\n }\n\n public getSelection(getAnchor: boolean = false): Position | null {\n const selection = window.getSelection();\n let startNode = getAnchor ? selection!.anchorNode : selection!.focusNode;\n if (!startNode) return null;\n let offset = getAnchor ? selection!.anchorOffset : selection!.focusOffset;\n if (startNode === this.e) {\n if (offset < this.lines.length)\n return {\n row: offset,\n col: 0,\n };\n return {\n row: offset - 1,\n col: this.lines[offset - 1].length,\n };\n }\n\n let col = this.computeColumn(startNode, offset);\n if (col === null) return null;\n\n let node = startNode;\n while (node.parentElement !== this.e) {\n node = node.parentElement!;\n }\n\n let row = 0;\n if (\n (node as HTMLElement).dataset &&\n (node as HTMLElement).dataset.lineNum &&\n (!node.previousSibling ||\n ((node.previousSibling as HTMLElement).dataset?.lineNum !== (node as HTMLElement).dataset.lineNum))\n ) {\n row = parseInt((node as HTMLElement).dataset.lineNum!);\n } else {\n while (node.previousSibling) {\n row++;\n node = node.previousSibling;\n }\n }\n return { row: row, col: col };\n }\n\n public setSelection(focus: Position, anchor: Position | null = null): void {\n if (!focus) return;\n\n let { node: focusNode, offset: focusOffset } = this.computeNodeAndOffset(\n focus.row,\n focus.col,\n anchor ? anchor.row === focus.row && anchor.col > focus.col : false\n );\n let anchorNode = null,\n anchorOffset = null;\n if (anchor && (anchor.row !== focus.row || anchor.col !== focus.col)) {\n let { node, offset } = this.computeNodeAndOffset(\n anchor.row,\n anchor.col,\n focus.row === anchor.row && focus.col > anchor.col\n );\n anchorNode = node;\n anchorOffset = offset;\n }\n\n let windowSelection = window.getSelection();\n windowSelection!.setBaseAndExtent(\n focusNode,\n focusOffset,\n anchorNode || focusNode,\n anchorNode ? anchorOffset! : focusOffset\n );\n }\n\n public paste(text: string, anchor: Position | null = null, focus: Position | null = null): void {\n if (!anchor) anchor = this.getSelection(true);\n if (!focus) focus = this.getSelection(false);\n let beginning: Position, end: Position;\n if (!focus) {\n focus = {\n row: this.lines.length - 1,\n col: this.lines[this.lines.length - 1].length,\n };\n }\n if (!anchor) {\n anchor = focus;\n }\n if (\n anchor.row < focus.row ||\n (anchor.row === focus.row && anchor.col <= focus.col)\n ) {\n beginning = anchor;\n end = focus;\n } else {\n beginning = focus;\n end = anchor;\n }\n let insertedLines = text.split(/(?:\\r\\n|\\r|\\n)/);\n let lineBefore = this.lines[beginning.row].substr(0, beginning.col);\n let lineEnd = this.lines[end.row].substr(end.col);\n insertedLines[0] = lineBefore.concat(insertedLines[0]);\n let endColPos = insertedLines[insertedLines.length - 1].length;\n insertedLines[insertedLines.length - 1] = insertedLines[insertedLines.length - 1].concat(lineEnd);\n this.spliceLines(beginning.row, 1 + end.row - beginning.row, insertedLines);\n focus.row = beginning.row + insertedLines.length - 1;\n focus.col = endColPos;\n this.updateFormatting();\n this.setSelection(focus);\n this.fireChange();\n }\n\n public wrapSelection(pre: string, post: string, focus: Position | null = null, anchor: Position | null = null): void {\n if (!this.isRestoringHistory) this.pushHistory();\n if (!focus) focus = this.getSelection(false);\n if (!anchor) anchor = this.getSelection(true);\n if (!focus || !anchor || focus.row !== anchor.row) return;\n this.lineDirty[focus.row] = true;\n\n const startCol = focus.col < anchor.col ? focus.col : anchor.col;\n const endCol = focus.col < anchor.col ? anchor.col : focus.col;\n const left = this.lines[focus.row].substr(0, startCol).concat(pre);\n const mid = endCol === startCol ? \"\" : this.lines[focus.row].substr(startCol, endCol - startCol);\n const right = post.concat(this.lines[focus.row].substr(endCol));\n this.lines[focus.row] = left.concat(mid, right);\n anchor.col = left.length;\n focus.col = anchor.col + mid.length;\n\n this.updateFormatting();\n this.setSelection(focus, anchor);\n }\n\n public addEventListener<T extends EventType>(\n type: T,\n listener: T extends 'change' ? EventHandler<ChangeEvent> :\n T extends 'selection' ? EventHandler<SelectionEvent> :\n T extends 'drop' ? EventHandler<DropEvent> : never\n ): void {\n if (type.match(/^(?:change|input)$/i)) {\n this.listeners.change.push(listener as EventHandler<ChangeEvent>);\n }\n if (type.match(/^(?:selection|selectionchange)$/i)) {\n this.listeners.selection.push(listener as EventHandler<SelectionEvent>);\n }\n if (type.match(/^(?:drop)$/i)) {\n this.listeners.drop.push(listener as EventHandler<DropEvent>);\n }\n }\n\n private fireChange(): void {\n if (!this.textarea && !this.listeners.change.length) return;\n const content = this.getContent();\n if (this.textarea) this.textarea.value = content;\n for (let listener of this.listeners.change) {\n listener({\n content: content,\n linesDirty: [...this.lineDirty],\n });\n }\n }\n\n private handleInputEvent(event: Event): void {\n const inputEvent = event as InputEvent;\n if (inputEvent.inputType === \"insertCompositionText\") return;\n if (!this.isRestoringHistory) this.pushHistory();\n\n let focus = this.getSelection();\n\n if ((inputEvent.inputType === \"insertParagraph\" || inputEvent.inputType === \"insertLineBreak\") && focus) {\n this.clearDirtyFlag();\n this.processNewParagraph(focus);\n } else {\n if (!this.e!.firstChild) {\n this.e!.innerHTML = '<div class=\"TMBlankLine\"><br></div>';\n } else {\n this.fixNodeHierarchy();\n }\n this.updateLineContentsAndFormatting();\n }\n if (focus) {\n this.setSelection(focus);\n }\n\n this.fireChange();\n }\n\n private handleSelectionChangeEvent(_e: Event): void {\n this.fireSelection();\n }\n\n private handlePaste(event: ClipboardEvent): void {\n if (!this.isRestoringHistory) this.pushHistory();\n event.preventDefault();\n\n let text = (event as any).clipboardData.getData(\"text/plain\");\n this.paste(text);\n }\n\n private handleDrop(event: DragEvent): void {\n event.preventDefault();\n this.fireDrop(event.dataTransfer!);\n }\n\n private processInlineStyles(originalString: string): string {\n let processed = \"\";\n let stack: Array<{delimiter: string, delimString: string, count: number, output: string}> = [];\n let offset = 0;\n let string = originalString;\n\n outer: while (string) {\n // Process simple rules (non-delimiter)\n for (let rule of [\"escape\", \"code\", \"autolink\", \"html\"]) {\n if (this.mergedInlineGrammar[rule]) {\n let cap = this.mergedInlineGrammar[rule].regexp.exec(string);\n if (cap) {\n string = string.substr(cap[0].length);\n offset += cap[0].length;\n processed += this.mergedInlineGrammar[rule].replacement.replace(/\\$([1-9])/g, (str, p1) => htmlescape(cap[p1]));\n continue outer;\n }\n }\n }\n \n // Process custom inline grammar rules\n for (let rule in this.customInlineGrammar) {\n if (rule !== \"escape\" && rule !== \"code\" && rule !== \"autolink\" && rule !== \"html\" && rule !== \"linkOpen\" && rule !== \"imageOpen\" && rule !== \"linkLabel\" && rule !== \"default\") {\n let cap = this.mergedInlineGrammar[rule].regexp.exec(string);\n if (cap) {\n string = string.substr(cap[0].length);\n offset += cap[0].length;\n processed += this.mergedInlineGrammar[rule].replacement.replace(/\\$([1-9])/g, (str, p1) => htmlescape(cap[p1]));\n continue outer;\n }\n }\n }\n\n // Check for links / images\n let potentialLink = string.match(this.mergedInlineGrammar.linkOpen.regexp);\n let potentialImage = string.match(this.mergedInlineGrammar.imageOpen.regexp);\n if (potentialImage || potentialLink) {\n let result = this.parseLinkOrImage(string, !!potentialImage);\n if (result) {\n processed = `${processed}${result.output}`;\n string = string.substr(result.charCount);\n offset += result.charCount;\n continue outer;\n }\n }\n\n // Check for em / strong delimiters\n let cap = /(^\\*+)|(^_+)/.exec(string);\n if (cap) {\n let delimCount = cap[0].length;\n const delimString = cap[0];\n const currentDelimiter = cap[0][0];\n\n string = string.substr(cap[0].length);\n\n const preceding = offset > 0 ? originalString.substr(0, offset) : \" \";\n const following = offset + cap[0].length < originalString.length ? string : \" \";\n\n const punctuationFollows = following.match(punctuationLeading);\n const punctuationPrecedes = preceding.match(punctuationTrailing);\n const whitespaceFollows = following.match(/^\\s/);\n const whitespacePrecedes = preceding.match(/\\s$/);\n\n let canOpen = !whitespaceFollows && (!punctuationFollows || !!whitespacePrecedes || !!punctuationPrecedes);\n let canClose = !whitespacePrecedes && (!punctuationPrecedes || !!whitespaceFollows || !!punctuationFollows);\n\n if (currentDelimiter === \"_\" && canOpen && canClose) {\n canOpen = !!punctuationPrecedes;\n canClose = !!punctuationFollows;\n }\n\n if (canClose) {\n let stackPointer = stack.length - 1;\n while (delimCount && stackPointer >= 0) {\n if (stack[stackPointer].delimiter === currentDelimiter) {\n while (stackPointer < stack.length - 1) {\n const entry = stack.pop()!;\n processed = `${entry.output}${entry.delimString.substr(0, entry.count)}${processed}`;\n }\n\n if (delimCount >= 2 && stack[stackPointer].count >= 2) {\n processed = `<span class=\"TMMark\">${currentDelimiter}${currentDelimiter}</span><strong class=\"TMStrong\">${processed}</strong><span class=\"TMMark\">${currentDelimiter}${currentDelimiter}</span>`;\n delimCount -= 2;\n stack[stackPointer].count -= 2;\n } else {\n processed = `<span class=\"TMMark\">${currentDelimiter}</span><em class=\"TMEm\">${processed}</em><span class=\"TMMark\">${currentDelimiter}</span>`;\n delimCount -= 1;\n stack[stackPointer].count -= 1;\n }\n\n if (stack[stackPointer].count === 0) {\n let entry = stack.pop()!;\n processed = `${entry.output}${processed}`;\n stackPointer--;\n }\n } else {\n stackPointer--;\n }\n }\n }\n\n if (delimCount && canOpen) {\n stack.push({\n delimiter: currentDelimiter,\n delimString: delimString,\n count: delimCount,\n output: processed,\n });\n processed = \"\";\n delimCount = 0;\n }\n\n if (delimCount) {\n processed = `${processed}${delimString.substr(0, delimCount)}`;\n }\n\n offset += cap[0].length;\n continue outer;\n }\n\n // Check for strikethrough delimiter\n cap = /^~~/.exec(string);\n if (cap) {\n let consumed = false;\n let stackPointer = stack.length - 1;\n while (!consumed && stackPointer >= 0) {\n if (stack[stackPointer].delimiter === \"~\") {\n while (stackPointer < stack.length - 1) {\n const entry = stack.pop()!;\n processed = `${entry.output}${entry.delimString.substr(0, entry.count)}${processed}`;\n }\n\n processed = `<span class=\"TMMark\">~~</span><del class=\"TMStrikethrough\">${processed}</del><span class=\"TMMark\">~~</span>`;\n let entry = stack.pop()!;\n processed = `${entry.output}${processed}`;\n consumed = true;\n } else {\n stackPointer--;\n }\n }\n\n if (!consumed) {\n stack.push({\n delimiter: \"~\",\n delimString: \"~~\",\n count: 2,\n output: processed,\n });\n processed = \"\";\n }\n\n offset += cap[0].length;\n string = string.substr(cap[0].length);\n continue outer;\n }\n\n // Process 'default' rule\n cap = this.mergedInlineGrammar.default.regexp.exec(string);\n if (cap) {\n string = string.substr(cap[0].length);\n offset += cap[0].length;\n processed += this.mergedInlineGrammar.default.replacement.replace(/\\$([1-9])/g, (str, p1) => htmlescape(cap[p1]));\n continue outer;\n }\n throw \"Infinite loop!\";\n }\n\n while (stack.length) {\n const entry = stack.pop()!;\n processed = `${entry.output}${entry.delimString.substr(0, entry.count)}${processed}`;\n }\n\n return processed;\n }\n\n private computeColumn(startNode: Node, offset: number): number | null {\n let node = startNode;\n let col: number;\n while (node && node.parentNode !== this.e) {\n node = node.parentNode!;\n }\n if (node === null) return null;\n\n if (startNode.nodeType === Node.TEXT_NODE || offset === 0) {\n col = offset;\n node = startNode;\n } else if (offset > 0) {\n node = startNode.childNodes[offset - 1];\n col = node.textContent!.length;\n } else {\n col = 0;\n node = startNode;\n }\n while (node.parentNode !== this.e) {\n if (node.previousSibling) {\n node = node.previousSibling;\n col += node.textContent!.length;\n } else {\n node = node.parentNode as unknown as ChildNode;\n }\n }\n return col;\n }\n\n private computeNodeAndOffset(row: number, col: number, bindRight: boolean = false): {node: Node, offset: number} {\n if (row >= this.lineElements.length) {\n row = this.lineElements.length - 1;\n col = this.lines[row].length;\n }\n if (col > this.lines[row].length) {\n col = this.lines[row].length;\n }\n const parentNode = this.lineElements[row] as HTMLElement;\n let node = parentNode.firstChild;\n\n let childrenComplete = false;\n let rv = {\n node: parentNode.firstChild ? parentNode.firstChild : parentNode,\n offset: 0,\n };\n\n while (node !== parentNode) {\n if (!childrenComplete && node!.nodeType === Node.TEXT_NODE) {\n if (node!.nodeValue!.length >= col) {\n if (bindRight && node!.nodeValue!.length === col) {\n rv = { node: node!, offset: col };\n col = 0;\n } else {\n return { node: node!, offset: col };\n }\n } else {\n col -= node!.nodeValue!.length;\n }\n }\n if (!childrenComplete && node!.firstChild) {\n node = node!.firstChild;\n } else if (node!.nextSibling) {\n childrenComplete = false;\n node = node!.nextSibling;\n } else {\n childrenComplete = true;\n node = node!.parentNode as unknown as ChildNode;\n }\n }\n\n return rv;\n }\n\n private updateLineContentsAndFormatting(): void {\n this.clearDirtyFlag();\n this.updateLineContents();\n this.updateFormatting();\n }\n\n private clearDirtyFlag(): void {\n this.lineDirty = new Array(this.lines.length);\n for (let i = 0; i < this.lineDirty.length; i++) {\n this.lineDirty[i] = false;\n }\n }\n\n private updateLineContents(): void {\n let lineDelta = this.e!.childElementCount - this.lines.length;\n if (lineDelta) {\n let firstChangedLine = 0;\n while (\n firstChangedLine <= this.lines.length &&\n firstChangedLine <= this.lineElements.length &&\n this.lineElements[firstChangedLine] &&\n this.lines[firstChangedLine] === (this.lineElements[firstChangedLine] as HTMLElement).textContent &&\n this.lineTypes[firstChangedLine] === (this.lineElements[firstChangedLine] as HTMLElement).className\n ) {\n firstChangedLine++;\n }\n\n let lastChangedLine = -1;\n while (\n -lastChangedLine < this.lines.length &&\n -lastChangedLine < this.lineElements.length &&\n this.lines[this.lines.length + lastChangedLine] ===\n (this.lineElements[this.lineElements.length + lastChangedLine] as HTMLElement).textContent &&\n this.lineTypes[this.lines.length + lastChangedLine] ===\n (this.lineElements[this.lineElements.length + lastChangedLine] as HTMLElement).className\n ) {\n lastChangedLine--;\n }\n\n let linesToDelete = this.lines.length + lastChangedLine + 1 - firstChangedLine;\n if (linesToDelete < -lineDelta) linesToDelete = -lineDelta;\n if (linesToDelete < 0) linesToDelete = 0;\n\n let linesToAdd = [];\n for (let l = 0; l < linesToDelete + lineDelta; l++) {\n linesToAdd.push((this.lineElements[firstChangedLine + l] as HTMLElement).textContent || \"\");\n }\n this.spliceLines(firstChangedLine, linesToDelete, linesToAdd, false);\n } else {\n for (let line = 0; line < this.lineElements.length; line++) {\n let e = this.lineElements[line] as HTMLElement;\n let ct = e.textContent || \"\";\n if (this.lines[line] !== ct || this.lineTypes[line] !== e.className) {\n this.lines[line] = ct;\n this.lineTypes[line] = e.className;\n this.lineDirty[line] = true;\n }\n }\n }\n }\n\n private processNewParagraph(sel: Position): void {\n if (!sel) return;\n\n this.updateLineContents();\n\n let continuableType: string | false = false;\n let checkLine = sel.col > 0 ? sel.row : sel.row - 1;\n switch (this.lineTypes[checkLine]) {\n case \"TMUL\":\n continuableType = \"TMUL\";\n break;\n case \"TMOL\":\n continuableType = \"TMOL\";\n break;\n case \"TMIndentedCode\":\n continuableType = \"TMIndentedCode\";\n break;\n }\n\n let lines = this.lines[sel.row].replace(/\\n\\n$/, \"\\n\").split(/(?:\\r\\n|\\n|\\r)/);\n if (lines.length > 1) {\n this.spliceLines(sel.row, 1, lines, true);\n sel.row++;\n sel.col = 0;\n }\n\n if (continuableType) {\n let capture = lineGrammar[continuableType].regexp.exec(this.lines[sel.row - 1]);\n if (capture) {\n if (capture[2]) {\n if (continuableType === \"TMOL\") {\n capture[1] = capture[1].replace(/\\d{1,9}/, (result) => {\n return (parseInt(result) + 1).toString();\n });\n }\n this.lines[sel.row] = `${capture[1]}${this.lines[sel.row]}`;\n this.lineDirty[sel.row] = true;\n sel.col = capture[1].length;\n } else {\n this.lines[sel.row - 1] = \"\";\n this.lineDirty[sel.row - 1] = true;\n }\n }\n }\n this.updateFormatting();\n }\n\n private spliceLines(\n startLine: number,\n linesToDelete: number = 0,\n linesToInsert: string[] = [],\n adjustLineElements: boolean = true\n ): void {\n if (adjustLineElements) {\n for (let i = 0; i < linesToDelete; i++) {\n this.e!.removeChild(this.e!.childNodes[startLine]);\n }\n }\n\n let insertedBlank = [];\n let insertedDirty = [];\n\n for (let i = 0; i < linesToInsert.length; i++) {\n insertedBlank.push(\"\");\n insertedDirty.push(true);\n if (adjustLineElements) {\n if (this.e!.childNodes[startLine])\n this.e!.insertBefore(document.createElement(\"div\"), this.e!.childNodes[startLine]);\n else this.e!.appendChild(document.createElement(\"div\"));\n }\n }\n\n this.lines.splice(startLine, linesToDelete, ...linesToInsert);\n this.lineTypes.splice(startLine, linesToDelete, ...insertedBlank);\n this.lineDirty.splice(startLine, linesToDelete, ...insertedDirty);\n }\n\n private fixNodeHierarchy(): void {\n const originalChildren = Array.from(this.e!.childNodes);\n\n const replaceChild = (child: Node, ...newChildren: Node[]) => {\n const parent = child.parentElement!;\n const nextSibling = child.nextSibling;\n parent.removeChild(child);\n newChildren.forEach((newChild) =>\n nextSibling ? parent.insertBefore(newChild, nextSibling) : parent.appendChild(newChild)\n );\n };\n\n originalChildren.forEach((child) => {\n if (child.nodeType !== Node.ELEMENT_NODE || (child as HTMLElement).tagName !== \"DIV\") {\n const divWrapper = document.createElement(\"div\");\n replaceChild(child, divWrapper);\n divWrapper.appendChild(child);\n } else if (child.childNodes.length === 0) {\n child.appendChild(document.createElement(\"br\"));\n } else {\n const grandChildren = Array.from(child.childNodes);\n if (\n grandChildren.some(\n (grandChild) =>\n grandChild.nodeType === Node.ELEMENT_NODE && (grandChild as HTMLElement).tagName === \"DIV\"\n )\n ) {\n return replaceChild(child, ...grandChildren);\n }\n }\n });\n }\n\n private parseLinkOrImage(originalString: string, isImage: boolean): {output: string, charCount: number} | false {\n // Skip the opening bracket\n let textOffset = isImage ? 2 : 1;\n let opener = originalString.substr(0, textOffset);\n let type = isImage ? \"TMImage\" : \"TMLink\";\n let currentOffset = textOffset;\n\n let bracketLevel = 1;\n let linkText: string | false = false;\n let linkRef: string | false = false;\n let linkLabel: string[] = [];\n let linkDetails: string[] = [];\n\n textOuter: while (\n currentOffset < originalString.length &&\n linkText === false\n ) {\n let string = originalString.substr(currentOffset);\n\n // Capture any escapes and code blocks at current position\n for (let rule of [\"escape\", \"code\", \"autolink\", \"html\"]) {\n let cap = this.mergedInlineGrammar[rule].regexp.exec(string);\n if (cap) {\n currentOffset += cap[0].length;\n continue textOuter;\n }\n }\n\n // Check for image\n if (string.match(this.mergedInlineGrammar.imageOpen.regexp)) {\n bracketLevel++;\n currentOffset += 2;\n continue textOuter;\n }\n\n // Check for link\n if (string.match(this.mergedInlineGrammar.linkOpen.regexp)) {\n bracketLevel++;\n if (!isImage) {\n if (this.parseLinkOrImage(string, false)) {\n return false;\n }\n }\n currentOffset += 1;\n continue textOuter;\n }\n\n // Check for closing bracket\n if (string.match(/^\\]/)) {\n bracketLevel--;\n if (bracketLevel === 0) {\n linkText = originalString.substr(textOffset, currentOffset - textOffset);\n currentOffset++;\n continue textOuter;\n }\n }\n\n // Nothing matches, proceed to next char\n currentOffset++;\n }\n\n // Did we find a link text?\n if (linkText === false) return false;\n\n // Check what type of link this is\n let nextChar = currentOffset < originalString.length ? originalString.substr(currentOffset, 1) : \"\";\n\n // REFERENCE LINKS\n if (nextChar === \"[\") {\n let string = originalString.substr(currentOffset);\n let cap = this.mergedInlineGrammar.linkLabel.regexp.exec(string);\n if (cap) {\n currentOffset += cap[0].length;\n linkLabel.push(cap[1], cap[2], cap[3]);\n if (cap[this.mergedInlineGrammar.linkLabel.labelPlaceholder!]) {\n linkRef = cap[this.mergedInlineGrammar.linkLabel.labelPlaceholder!];\n } else {\n linkRef = linkText.trim();\n }\n } else {\n return false;\n }\n } else if (nextChar !== \"(\") {\n // Shortcut ref link\n linkRef = linkText.trim();\n } else {\n // INLINE LINKS\n currentOffset++;\n let parenthesisLevel = 1;\n\n inlineOuter: while (currentOffset < originalString.length && parenthesisLevel > 0) {\n let string = originalString.substr(currentOffset);\n\n // Process whitespace\n let cap = /^\\s+/.exec(string);\n if (cap) {\n switch (linkDetails.length) {\n case 0:\n linkDetails.push(cap[0]);\n break;\n case 1:\n linkDetails.push(cap[0]);\n break;\n case 2:\n if (linkDetails[0].match(/</)) {\n linkDetails[1] = linkDetails[1].concat(cap[0]);\n } else {\n if (parenthesisLevel !== 1) return false;\n linkDetails.push(\"\");\n linkDetails.push(cap[0]);\n }\n break;\n case 3:\n linkDetails.push(cap[0]);\n break;\n case 4:\n return false;\n case 5:\n linkDetails.push(\"\");\n case 6:\n linkDetails[5] = linkDetails[5].concat(cap[0]);\n break;\n case 7:\n linkDetails[6] = linkDetails[6].concat(cap[0]);\n break;\n default:\n return false;\n }\n currentOffset += cap[0].length;\n continue inlineOuter;\n }\n\n // Process backslash escapes\n cap = this.mergedInlineGrammar.escape.regexp.exec(string);\n if (cap) {\n switch (linkDetails.length) {\n case 0:\n linkDetails.push(\"\");\n case 1:\n linkDetails.push(cap[0]);\n break;\n case 2:\n linkDetails[1] = linkDetails[1].concat(cap[0]);\n break;\n case 3:\n return false;\n case 4:\n return false;\n case 5:\n linkDetails.push(\"\");\n case 6:\n linkDetails[5] = linkDetails[5].concat(cap[0]);\n break;\n default:\n return false;\n }\n currentOffset += cap[0].length;\n continue inlineOuter;\n }\n\n // Process opening angle bracket\n if (linkDetails.length < 2 && string.match(/^</)) {\n if (linkDetails.length === 0) linkDetails.push(\"\");\n linkDetails[0] = linkDetails[0].concat(\"<\");\n currentOffset++;\n continue inlineOuter;\n }\n\n // Process closing angle bracket\n if ((linkDetails.length === 1 || linkDetails.length === 2) && string.match(/^>/)) {\n if (linkDetails.length === 1) linkDetails.push(\"\");\n linkDetails.push(\">\");\n currentOffset++;\n continue inlineOuter;\n }\n\n // Process non-parenthesis delimiter for title\n cap = /^[\"']/.exec(string);\n if (cap && (linkDetails.length === 0 || linkDetails.length === 1 || linkDetails.length === 4)) {\n while (linkDetails.length < 4) linkDetails.push(\"\");\n linkDetails.push(cap[0]);\n currentOffset++;\n continue inlineOuter;\n }\n\n if (cap && (linkDetails.length === 5 || linkDetails.length === 6) && linkDetails[4] === cap[0]) {\n if (linkDetails.length === 5) linkDetails.push(\"\");\n linkDetails.push(cap[0]);\n currentOffset++;\n continue inlineOuter;\n }\n\n // Process opening parenthesis\n if (string.match(/^\\(/)) {\n switch (linkDetails.length) {\n case 0:\n linkDetails.push(\"\");\n case 1:\n linkDetails.push(\"\");\n case 2:\n linkDetails[1] = linkDetails[1].concat(\"(\");\n if (!linkDetails[0].match(/<$/)) parenthesisLevel++;\n break;\n case 3:\n linkDetails.push(\"\");\n case 4:\n linkDetails.push(\"(\");\n break;\n case 5:\n linkDetails.push(\"\");\n case 6:\n if (linkDetails[4] === \"(\") return false;\n linkDetails[5] = linkDetails[5].concat(\"(\");\n break;\n default:\n return false;\n }\n currentOffset++;\n continue inlineOuter;\n }\n\n // Process closing parenthesis\n if (string.match(/^\\)/)) {\n if (linkDetails.length <= 2) {\n while (linkDetails.length < 2) linkDetails.push(\"\");\n if (!linkDetails[0].match(/<$/)) parenthesisLevel--;\n if (parenthesisLevel > 0) {\n linkDetails[1] = linkDetails[1].concat(\")\");\n }\n } else if (linkDetails.length === 5 || linkDetails.length === 6) {\n if (linkDetails[4] === \"(\") {\n if (linkDetails.length === 5) linkDetails.push(\"\");\n linkDetails.push(\")\");\n } else {\n if (linkDetails.length === 5) linkDetails.push(\")\");\n else linkDetails[5] = linkDetails[5].concat(\")\");\n }\n } else {\n parenthesisLevel--;\n }\n\n if (parenthesisLevel === 0) {\n while (linkDetails.length < 7) linkDetails.push(\"\");\n }\n\n currentOffset++;\n continue inlineOuter;\n }\n\n // Any old character\n cap = /^./.exec(string);\n if (cap) {\n switch (linkDetails.length) {\n case 0:\n linkDetails.push(\"\");\n case 1:\n linkDetails.push(cap[0]);\n break;\n case 2:\n linkDetails[1] = linkDetails[1].concat(cap[0]);\n break;\n case 3:\n return false;\n case 4:\n return false;\n case 5:\n linkDetails.push(\"\");\n case 6:\n linkDetails[5] = linkDetails[5].concat(cap[0]);\n break;\n default:\n return false;\n }\n currentOffset += cap[0].length;\n continue inlineOuter;\n }\n throw \"Infinite loop\";\n }\n if (parenthesisLevel > 0) return false;\n }\n\n if (linkRef !== false) {\n // Reference link; check that linkRef is valid\n let valid = false;\n for (let label of this.linkLabels) {\n if (label === linkRef) {\n valid = true;\n break;\n }\n }\n let labelClass = valid ? \"TMLinkLabel TMLinkLabel_Valid\" : \"TMLinkLabel TMLinkLabel_Invalid\";\n let output = `<span class=\"TMMark TMMark_${type}\">${opener}</span><span class=\"${type} ${\n linkLabel.length < 3 || !linkLabel[1] ? labelClass : \"\"\n }\">${this.processInlineStyles(linkText)}</span><span class=\"TMMark TMMark_${type}\">]</span>`;\n\n if (linkLabel.length >= 3) {\n output = output.concat(\n `<span class=\"TMMark TMMark_${type}\">${linkLabel[0]}</span>`,\n `<span class=\"${labelClass}\">${linkLabel[1]}</span>`,\n `<span class=\"TMMark TMMark_${type}\">${linkLabel[2]}</span>`\n );\n }\n return {\n output: output,\n charCount: currentOffset,\n };\n } else if (linkDetails.length > 0) {\n // Inline link\n while (linkDetails.length < 7) {\n linkDetails.push(\"\");\n }\n\n return {\n output: `<span class=\"TMMark TMMark_${type}\">${opener}</span><span class=\"${type}\">${this.processInlineStyles(\n linkText\n )}</span><span class=\"TMMark TMMark_${type}\">](${\n linkDetails[0]\n }</span><span class=\"${type}Destination\">${\n linkDetails[1]\n }</span><span class=\"TMMark TMMark_${type}\">${linkDetails[2]}${\n linkDetails[3]\n }${linkDetails[4]}</span><span class=\"${type}Title\">${\n linkDetails[5]\n }</span><span class=\"TMMark TMMark_${type}\">${linkDetails[6]})</span>`,\n charCount: currentOffset,\n };\n }\n\n return false;\n }\n\n private computeCommonAncestor(node1: Node | null, node2: Node | null): Node | null {\n if (!node1 || !node2) return null;\n if (node1 === node2) return node1;\n const ancestry = (node: Node) => {\n let ancestry = [];\n while (node) {\n ancestry.unshift(node);\n node = node.parentNode!;\n }\n return ancestry;\n };\n\n const ancestry1 = ancestry(node1);\n const ancestry2 = ancestry(node2);\n\n if (ancestry1[0] !== ancestry2[0]) return null;\n let i;\n for (i = 0; ancestry1[i] === ancestry2[i]; i++);\n return ancestry1[i - 1];\n }\n\n private computeEnclosingMarkupNode(focus: Position, anchor: Position | null, className: string): Node | null {\n let node = null;\n if (!focus) return null;\n if (!anchor) {\n const sel = window.getSelection();\n if (!sel || !sel.focusNode) return null;\n node = sel.focusNode;\n } else {\n if (focus.row !== anchor.row) return null;\n const sel = window.getSelection();\n if (!sel) return null;\n node = this.computeCommonAncestor(sel.focusNode, sel.anchorNode);\n }\n if (!node) return null;\n while (node !== this.e) {\n if ((node as HTMLElement).className && (node as HTMLElement).className.includes(className)) return node;\n node = node.parentNode!;\n }\n return null;\n }\n\n public getCommandState(focus: Position | null = null, anchor: Position | null = null): Record<string, boolean | null> {\n let commandState: Record<string, boolean | null> = {};\n if (!focus) focus = this.getSelection(false);\n if (!anchor) anchor = this.getSelection(true);\n if (!focus) {\n for (let cmd in commands) {\n commandState[cmd] = null;\n }\n return commandState;\n }\n if (!anchor) anchor = focus;\n\n let start: Position, end: Position;\n if (anchor.row < focus.row || (anchor.row === focus.row && anchor.col < focus.col)) {\n start = anchor;\n end = focus;\n } else {\n start = focus;\n end = anchor;\n }\n if (end.row > start.row && end.col === 0) {\n end.row--;\n end.col = this.lines[end.row].length;\n }\n\n for (let cmd in commands) {\n if (commands[cmd].type === \"inline\") {\n if (!focus || focus.row !== anchor!.row || !this.isInlineFormattingAllowed()) {\n commandState[cmd] = null;\n } else {\n commandState[cmd] =\n !!this.computeEnclosingMarkupNode(focus, anchor, commands[cmd].className) ||\n (focus.col === anchor!.col &&\n !!this.lines[focus.row].substr(0, focus.col).match(commands[cmd].unset.prePattern) &&\n !!this.lines[focus.row].substr(focus.col).match(commands[cmd].unset.postPattern));\n }\n }\n if (commands[cmd].type === \"line\") {\n if (!focus) {\n commandState[cmd] = null;\n } else {\n let state: boolean | null = this.lineTypes[start.row] === commands[cmd].className;\n for (let line = start.row; line <= end.row; line++) {\n if ((this.lineTypes[line] === commands[cmd].className) !== state) {\n state = null;\n break;\n }\n }\n commandState[cmd] = state;\n }\n }\n }\n return commandState;\n }\n\n public setCommandState(command: string, state: boolean): void {\n if (!this.isRestoringHistory) this.pushHistory();\n if (commands[command].type === \"inline\") {\n let anchor = this.getSelection(true);\n let focus = this.getSelection(false);\n if (!anchor) anchor = focus;\n if (!anchor) return;\n if (anchor.row !== focus!.row) return;\n if (!this.isInlineFormattingAllowed()) return;\n let markupNode = this.computeEnclosingMarkupNode(focus!, anchor, commands[command].className);\n this.clearDirtyFlag();\n\n if (markupNode) {\n this.lineDirty[focus!.row] = true;\n const startCol = this.computeColumn(markupNode, 0)!;\n const len = markupNode.textContent!.length;\n const left = this.lines[focus!.row]\n .substr(0, startCol)\n .replace(commands[command].unset.prePattern, \"\");\n const mid = this.lines[focus!.row].substr(startCol, len);\n const right = this.lines[focus!.row]\n .substr(startCol + len)\n .replace(commands[command].unset.postPattern, \"\");\n this.lines[focus!.row] = left.concat(mid, right);\n anchor.col = left.length;\n focus!.col = anchor.col + len;\n this.updateFormatting();\n this.setSelection(focus!, anchor);\n this.fireChange();\n } else if (\n focus!.col === anchor.col &&\n !!this.lines[focus!.row].substr(0, focus!.col).match(commands[command].unset.prePattern) &&\n !!this.lines[focus!.row].substr(focus!.col).match(commands[command].unset.postPattern)\n ) {\n this.lineDirty[focus!.row] = true;\n const left = this.lines[focus!.row]\n .substr(0, focus!.col)\n .replace(commands[command].unset.prePattern, \"\");\n const right = this.lines[focus!.row]\n .substr(focus!.col)\n .replace(commands[command].unset.postPattern, \"\");\n this.lines[focus!.row] = left.concat(right);\n focus!.col = anchor.col = left.length;\n this.updateFormatting();\n this.setSelection(focus!, anchor);\n this.fireChange();\n } else {\n let { startCol, endCol } =\n focus!.col < anchor.col\n ? { startCol: focus!.col, endCol: anchor.col }\n : { startCol: anchor.col, endCol: focus!.col };\n\n let match = this.lines[focus!.row]\n .substr(startCol, endCol - startCol)\n .match(/^(?<leading>\\s*).*\\S(?<trailing>\\s*)$/);\n if (match) {\n startCol += match.groups!.leading.length;\n endCol -= match.groups!.trailing.length;\n }\n\n focus!.col = startCol;\n anchor.col = endCol;\n\n this.wrapSelection(commands[command].set.pre, commands[command].set.post, focus, anchor);\n this.fireChange();\n }\n } else if (commands[command].type === \"line\") {\n let anchor = this.getSelection(true);\n let focus = this.getSelection(false);\n if (!anchor) anchor = focus;\n if (!focus) return;\n this.clearDirtyFlag();\n let start = anchor!.row > focus!.row ? focus! : anchor!;\n let end = anchor!.row > focus!.row ? anchor! : focus!;\n if (end.row > start.row && end.col === 0) {\n end.row--;\n }\n\n for (let line = start.row; line <= end.row; line++) {\n if (state && this.lineTypes[line] !== commands[command].className) {\n this.lines[line] = this.lines[line].replace(\n commands[command].set.pattern,\n commands[command].set.replacement.replace(\"$#\", (line - start.row + 1).toString())\n );\n this.lineDirty[line] = true;\n }\n if (!state && this.lineTypes[line] === commands[command].className) {\n this.lines[line] = this.lines[line].replace(\n commands[command].unset.pattern,\n commands[command].unset.replacement\n );\n this.lineDirty[line] = true;\n }\n }\n this.updateFormatting();\n this.setSelection(\n { row: end.row, col: this.lines[end.row].length },\n { row: start.row, col: 0 }\n );\n this.fireChange();\n }\n }\n\n private isInlineFormattingAllowed(): boolean {\n const sel = window.getSelection();\n if (!sel || !sel.focusNode || !sel.anchorNode) return false;\n\n if (\n sel.isCollapsed &&\n sel.focusNode.nodeType === 3 &&\n sel.focusOffset === sel.focusNode.nodeValue!.length\n ) {\n let node;\n for (node = sel.focusNode; node && node.nextSibling === null; node = node.parentNode!);\n if (\n node &&\n node.nextSibling &&\n (node.nextSibling as HTMLElement).className &&\n (node.nextSibling as HTMLElement).className.includes(\"TMInlineFormatted\")\n )\n return true;\n }\n\n let ancestor = this.computeCommonAncestor(sel.focusNode, sel.anchorNode);\n if (!ancestor) return false;\n\n while (ancestor && ancestor !== this.e) {\n if (\n (ancestor as HTMLElement).className &&\n typeof (ancestor as HTMLElement).className.includes === \"function\" &&\n ((ancestor as HTMLElement).className.includes(\"TMInlineFormatted\") ||\n (ancestor as HTMLElement).className.includes(\"TMBlankLine\"))\n )\n return true;\n ancestor = ancestor.parentNode!;\n }\n\n return false;\n }\n\n public toggleCommandState(command: string): void {\n if (!this.lastCommandState) this.lastCommandState = this.getCommandState();\n this.setCommandState(command, !this.lastCommandState[command]);\n }\n\n private fireDrop(dataTransfer: DataTransfer): void {\n for (let listener of this.listeners.drop) {\n listener({ dataTransfer });\n }\n }\n\n private fireSelection(): void {\n if (this.listeners.selection && this.listeners.selection.length) {\n let focus = this.getSelection(false);\n let anchor = this.getSelection(true);\n let commandState = this.getCommandState(focus, anchor);\n if (this.lastCommandState) {\n Object.assign(this.lastCommandState, commandState);\n } else {\n this.lastCommandState = Object.assign({}, commandState);\n }\n for (let listener of this.listeners.selection) {\n listener({\n focus: focus!,\n anchor: anchor!,\n commandState: this.lastCommandState,\n });\n }\n }\n }\n}\n\nexport default Editor;"],"names":["svg","blockquote","bold","clear_formatting","code","h1","h2","hr","image","italic","link","ol","redo","strikethrough","ul","undo","isMacLike","test","navigator","platform","DefaultCommands","name","action","innerHTML","title","hotkey","insertLink","editor","isInlineFormattingAllowed","wrapSelection","enabled","focus","anchor","insertImage","paste","canUndo","canRedo","CommandBar","constructor","props","e","commands","buttons","state","hotkeys","element","document","getElementById","body","createCommandBarElement","addEventListener","handleKeydown","setEditor","parentElement","createElement","className","command","el","appendChild","commandName","Object","assign","keys","split","modifiers","modifierexplanation","i","length","push","match","key","toLowerCase","concat","join","handleClick","event","preventDefault","setCommandState","handleSelection","commandState","undefined","outer","modifier","global","this","require$$0","require$$1","require$$2","sharedStoreModule","require$$3","require$$4","require$$5","require$$6","require$$7","makeBuiltIn","makeBuiltInModule","replacements","ASCIIPunctuation","NotTriggerChar","Scheme","Email","HTMLOpenTag","HTMLCloseTag","HTMLTagName","HTMLComment","HTMLPI","HTMLDeclaration","HTMLCDATA","HTMLAttribute","HTMLAttValue","KnownTag","punctuationLeading","RegExp","punctuationTrailing","lineGrammar","TMH1","regexp","replacement","TMH2","TMH3","TMH4","TMH5","TMH6","TMBlockquote","TMCodeFenceBacktickOpen","TMCodeFenceTildeOpen","TMCodeFenceBacktickClose","TMCodeFenceTildeClose","TMBlankLine","TMSetextH1Marker","TMSetextH2Marker","TMHR","TMUL","TMOL","TMIndentedCode","TMLinkReferenceDefinition","labelPlaceholder","htmlBlockGrammar","start","end","paraInterrupt","inlineGrammar","escape","autolink","html","linkOpen","imageOpen","linkLabel","default","replacementRegexp","inlineRules","rule","re","source","replace","string","flags","createMergedInlineGrammar","customRules","arguments","merged","ruleName","entries","processedRule","regexpSource","htmlescape","type","set","pre","post","unset","prePattern","postPattern","pattern","h3","h4","h5","h6","Editor","textarea","lines","lineElements","lineTypes","lineCaptures","lineReplacements","linkLabels","lineDirty","lastCommandState","customInlineGrammar","mergedInlineGrammar","listeners","change","selection","drop","undoStack","redoStack","isRestoringHistory","maxHistory","getElementsByTagName","tagName","parentNode","style","display","createEditorElement","setContent","content","value","handleUndoRedoKey","pushHistory","pushCurrentState","getContent","getSelection","shift","current","pop","prev","setSelection","next","isMac","ctrl","metaKey","ctrlKey","altKey","shiftKey","classList","add","contentEditable","whiteSpace","webkitUserModify","nextSibling","insertBefore","handleInputEvent","handleSelectionChangeEvent","handlePaste","handleDrop","childNodes","firstChild","removeChild","lineNum","le","Array","updateFormatting","fireChange","updateLineTypes","updateLinkLabels","applyLineTypes","l","capture","str","p1","p2","parseInt","processInlineStyles","contentHTML","removeAttribute","dataset","toString","codeBlockType","codeBlockSeqLength","htmlBlock","lineType","lineCapture","lineReplacement","exec","groups","htmlBlockType","headingLine","headingLineType","getAnchor","window","startNode","anchorNode","focusNode","offset","anchorOffset","focusOffset","row","col","computeColumn","node","previousSibling","_a","computeNodeAndOffset","windowSelection","setBaseAndExtent","text","beginning","insertedLines","lineBefore","substr","lineEnd","endColPos","spliceLines","startCol","endCol","left","mid","right","listener","linesDirty","inputEvent","inputType","clearDirtyFlag","processNewParagraph","fixNodeHierarchy","updateLineContentsAndFormatting","_e","fireSelection","clipboardData","getData","fireDrop","dataTransfer","originalString","processed","stack","cap","potentialLink","potentialImage","result","parseLinkOrImage","output","charCount","delimCount","delimString","currentDelimiter","preceding","following","punctuationFollows","punctuationPrecedes","whitespaceFollows","whitespacePrecedes","canOpen","canClose","stackPointer","delimiter","entry","count","consumed","nodeType","Node","TEXT_NODE","textContent","bindRight","childrenComplete","rv","nodeValue","updateLineContents","lineDelta","childElementCount","firstChangedLine","lastChangedLine","linesToDelete","linesToAdd","line","ct","sel","continuableType","checkLine","startLine","linesToInsert","adjustLineElements","insertedBlank","insertedDirty","splice","originalChildren","from","replaceChild","child","parent","_len","newChildren","_key","forEach","newChild","ELEMENT_NODE","divWrapper","grandChildren","some","grandChild","isImage","textOffset","opener","currentOffset","bracketLevel","linkText","linkRef","linkDetails","textOuter","nextChar","trim","parenthesisLevel","inlineOuter","valid","label","labelClass","computeCommonAncestor","node1","node2","ancestry","unshift","ancestry1","ancestry2","computeEnclosingMarkupNode","includes","getCommandState","cmd","markupNode","len","leading","trailing","isCollapsed","ancestor","toggleCommandState"],"mappings":"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","x_google_ignoreList":[2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49]}
|