tiny-markdown-editor 0.2.4 → 0.2.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/tiny-mde.js CHANGED
@@ -1984,6 +1984,7 @@
1984
1984
  }
1985
1985
  }
1986
1986
  this.e.addEventListener("input", e => this.handleInputEvent(e));
1987
+ this.e.addEventListener("beforeinput", e => this.handleBeforeInputEvent(e));
1987
1988
  this.e.addEventListener("compositionend", e => this.handleInputEvent(e));
1988
1989
  document.addEventListener("selectionchange", e => {
1989
1990
  if (this.hasFocus) {
@@ -2317,14 +2318,83 @@
2317
2318
  });
2318
2319
  }
2319
2320
  }
2321
+ /**
2322
+ * beforeinput handler, exclusively to handle insertParagraph and
2323
+ * insertLineBreak events. These used to be handled in the input event,
2324
+ * but that caused issues with Firefox where the input event would be
2325
+ * sometimes not be fired for these input types.
2326
+ * @param event The input event
2327
+ * @returns nothing
2328
+ */
2329
+ handleBeforeInputEvent(event) {
2330
+ const beforeInputEvent = event;
2331
+ if (beforeInputEvent.inputType !== "insertParagraph" && beforeInputEvent.inputType !== "insertLineBreak") return;
2332
+ if (!this.isRestoringHistory) this.pushHistory();
2333
+ event.preventDefault();
2334
+ this.clearDirtyFlag();
2335
+ const focus = this.getSelection();
2336
+ const anchor = this.getSelection(true);
2337
+ if (!focus || !anchor) return;
2338
+ // If focus and anchor are in different lines, simply remove everything
2339
+ // after the beginning of the selection and before the end of the selection
2340
+ // and remove any lines in between
2341
+ if (focus.row !== anchor.row) {
2342
+ const beginning = focus.row < anchor.row ? focus : anchor;
2343
+ const end = focus.row < anchor.row ? anchor : focus;
2344
+ this.lines[beginning.row] = this.lines[beginning.row].substring(0, beginning.col);
2345
+ this.lines[end.row] = this.lines[end.row].substring(end.col);
2346
+ this.spliceLines(beginning.row + 1, end.row - beginning.row - 1);
2347
+ focus.row = beginning.row + 1;
2348
+ focus.col = 0;
2349
+ } else {
2350
+ let continuableType = false;
2351
+ switch (this.lineTypes[focus.row]) {
2352
+ case "TMUL":
2353
+ continuableType = "TMUL";
2354
+ break;
2355
+ case "TMOL":
2356
+ continuableType = "TMOL";
2357
+ break;
2358
+ case "TMIndentedCode":
2359
+ continuableType = "TMIndentedCode";
2360
+ break;
2361
+ }
2362
+ const lineBeforeBreak = this.lines[focus.row].substring(0, focus.col <= anchor.col ? focus.col : anchor.col);
2363
+ const lineAfterBreak = this.lines[focus.row].substring(focus.col <= anchor.col ? anchor.col : focus.col);
2364
+ this.spliceLines(focus.row, 1, [lineBeforeBreak, lineAfterBreak]);
2365
+ focus.row += 1;
2366
+ focus.col = 0;
2367
+ if (continuableType) {
2368
+ let capture = lineGrammar[continuableType].regexp.exec(this.lines[focus.row - 1]);
2369
+ if (capture) {
2370
+ if (capture[2]) {
2371
+ if (continuableType === "TMOL") {
2372
+ capture[1] = capture[1].replace(/\d{1,9}/, result => {
2373
+ return (parseInt(result) + 1).toString();
2374
+ });
2375
+ }
2376
+ this.lines[focus.row] = `${capture[1]}${this.lines[focus.row]}`;
2377
+ this.lineDirty[focus.row] = true;
2378
+ focus.col = capture[1].length;
2379
+ } else {
2380
+ this.lines[focus.row - 1] = "";
2381
+ this.lineDirty[focus.row - 1] = true;
2382
+ }
2383
+ }
2384
+ }
2385
+ }
2386
+ this.updateFormatting();
2387
+ this.setSelection(focus);
2388
+ this.fireChange();
2389
+ }
2320
2390
  handleInputEvent(event) {
2321
2391
  const inputEvent = event;
2322
2392
  if (inputEvent.inputType === "insertCompositionText") return;
2323
2393
  if (!this.isRestoringHistory) this.pushHistory();
2324
2394
  let focus = this.getSelection();
2325
2395
  if ((inputEvent.inputType === "insertParagraph" || inputEvent.inputType === "insertLineBreak") && focus) {
2326
- this.clearDirtyFlag();
2327
- this.processNewParagraph(focus);
2396
+ // This should never happen since these are handled by the beforeinput handler
2397
+ return;
2328
2398
  } else {
2329
2399
  if (!this.e.firstChild) {
2330
2400
  this.e.innerHTML = '<div class="TMBlankLine"><br></div>';
@@ -2619,48 +2689,6 @@
2619
2689
  }
2620
2690
  }
2621
2691
  }
2622
- processNewParagraph(sel) {
2623
- if (!sel) return;
2624
- this.updateLineContents();
2625
- let continuableType = false;
2626
- let checkLine = sel.col > 0 ? sel.row : sel.row - 1;
2627
- switch (this.lineTypes[checkLine]) {
2628
- case "TMUL":
2629
- continuableType = "TMUL";
2630
- break;
2631
- case "TMOL":
2632
- continuableType = "TMOL";
2633
- break;
2634
- case "TMIndentedCode":
2635
- continuableType = "TMIndentedCode";
2636
- break;
2637
- }
2638
- let lines = this.lines[sel.row].replace(/\n\n$/, "\n").split(/(?:\r\n|\n|\r)/);
2639
- if (lines.length > 1) {
2640
- this.spliceLines(sel.row, 1, lines, true);
2641
- sel.row++;
2642
- sel.col = 0;
2643
- }
2644
- if (continuableType) {
2645
- let capture = lineGrammar[continuableType].regexp.exec(this.lines[sel.row - 1]);
2646
- if (capture) {
2647
- if (capture[2]) {
2648
- if (continuableType === "TMOL") {
2649
- capture[1] = capture[1].replace(/\d{1,9}/, result => {
2650
- return (parseInt(result) + 1).toString();
2651
- });
2652
- }
2653
- this.lines[sel.row] = `${capture[1]}${this.lines[sel.row]}`;
2654
- this.lineDirty[sel.row] = true;
2655
- sel.col = capture[1].length;
2656
- } else {
2657
- this.lines[sel.row - 1] = "";
2658
- this.lineDirty[sel.row - 1] = true;
2659
- }
2660
- }
2661
- }
2662
- this.updateFormatting();
2663
- }
2664
2692
  spliceLines(startLine) {
2665
2693
  let linesToDelete = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
2666
2694
  let linesToInsert = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [];
@@ -3221,4 +3249,4 @@
3221
3249
  }));
3222
3250
  //# sourceMappingURL=index.js.map
3223
3251
 
3224
- //# 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+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIERyb3BFdmVudCB7XG4gIGRhdGFUcmFuc2ZlcjogRGF0YVRyYW5zZmVyO1xufVxuXG50eXBlIEV2ZW50VHlwZSA9ICdjaGFuZ2UnIHwgJ3NlbGVjdGlvbicgfCAnZHJvcCc7XG50eXBlIEV2ZW50SGFuZGxlcjxUPiA9IChldmVudDogVCkgPT4gdm9pZDtcblxuZXhwb3J0IGNsYXNzIEVkaXRvciB7XG4gIHB1YmxpYyBlOiBIVE1MRGl2RWxlbWVudCB8IG51bGwgPSBudWxsO1xuICBwdWJsaWMgdGV4dGFyZWE6IEhUTUxUZXh0QXJlYUVsZW1lbnQgfCBudWxsID0gbnVsbDtcbiAgcHVibGljIGxpbmVzOiBzdHJpbmdbXSA9IFtdO1xuICBwdWJsaWMgbGluZUVsZW1lbnRzOiBOb2RlTGlzdE9mPENoaWxkTm9kZT4gfCBIVE1MQ29sbGVjdGlvbiB8IENoaWxkTm9kZVtdID0gW107XG4gIHB1YmxpYyBsaW5lVHlwZXM6IHN0cmluZ1tdID0gW107XG4gIHB1YmxpYyBsaW5lQ2FwdHVyZXM6IFJlZ0V4cEV4ZWNBcnJheVtdID0gW107XG4gIHB1YmxpYyBsaW5lUmVwbGFjZW1lbnRzOiBzdHJpbmdbXSA9IFtdO1xuICBwdWJsaWMgbGlua0xhYmVsczogc3RyaW5nW10gPSBbXTtcbiAgcHVibGljIGxpbmVEaXJ0eTogYm9vbGVhbltdID0gW107XG4gIHB1YmxpYyBsYXN0Q29tbWFuZFN0YXRlOiBSZWNvcmQ8c3RyaW5nLCBib29sZWFuIHwgbnVsbD4gfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBjdXN0b21JbmxpbmVHcmFtbWFyOiBSZWNvcmQ8c3RyaW5nLCBHcmFtbWFyUnVsZT4gPSB7fTtcbiAgcHJpdmF0ZSBtZXJnZWRJbmxpbmVHcmFtbWFyOiBSZWNvcmQ8c3RyaW5nLCBHcmFtbWFyUnVsZT4gPSBpbmxpbmVHcmFtbWFyO1xuICBwcml2YXRlIGhhc0ZvY3VzOiBib29sZWFuID0gdHJ1ZTtcblxuICBwdWJsaWMgbGlzdGVuZXJzOiB7XG4gICAgY2hhbmdlOiBFdmVudEhhbmRsZXI8Q2hhbmdlRXZlbnQ+W107XG4gICAgc2VsZWN0aW9uOiBFdmVudEhhbmRsZXI8U2VsZWN0aW9uRXZlbnQ+W107XG4gICAgZHJvcDogRXZlbnRIYW5kbGVyPERyb3BFdmVudD5bXTtcbiAgfSA9IHtcbiAgICBjaGFuZ2U6IFtdLFxuICAgIHNlbGVjdGlvbjogW10sXG4gICAgZHJvcDogW10sXG4gIH07XG5cbiAgcHJpdmF0ZSB1bmRvU3RhY2s6IEhpc3RvcnlTdGF0ZVtdID0gW107XG4gIHByaXZhdGUgcmVkb1N0YWNrOiBIaXN0b3J5U3RhdGVbXSA9IFtdO1xuICBwcml2YXRlIGlzUmVzdG9yaW5nSGlzdG9yeTogYm9vbGVhbiA9IGZhbHNlO1xuICBwcml2YXRlIG1heEhpc3Rvcnk6IG51bWJlciA9IDEwMDtcblxuICBjb25zdHJ1Y3Rvcihwcm9wczogRWRpdG9yUHJvcHMgPSB7fSkge1xuICAgIHRoaXMuZSA9IG51bGw7XG4gICAgdGhpcy50ZXh0YXJlYSA9IG51bGw7XG4gICAgdGhpcy5saW5lcyA9IFtdO1xuICAgIHRoaXMubGluZUVsZW1lbnRzID0gW10gYXMgQ2hpbGROb2RlW107XG4gICAgdGhpcy5saW5lVHlwZXMgPSBbXTtcbiAgICB0aGlzLmxpbmVDYXB0dXJlcyA9IFtdO1xuICAgIHRoaXMubGluZVJlcGxhY2VtZW50cyA9IFtdO1xuICAgIHRoaXMubGlua0xhYmVscyA9IFtdO1xuICAgIHRoaXMubGluZURpcnR5ID0gW107XG4gICAgdGhpcy5sYXN0Q29tbWFuZFN0YXRlID0gbnVsbDtcbiAgICB0aGlzLmhhc0ZvY3VzID0gdHJ1ZTtcbiAgICB0aGlzLmN1c3RvbUlubGluZUdyYW1tYXIgPSBwcm9wcy5jdXN0b21JbmxpbmVHcmFtbWFyIHx8IHt9O1xuICAgIHRoaXMubWVyZ2VkSW5saW5lR3JhbW1hciA9IGNyZWF0ZU1lcmdlZElubGluZUdyYW1tYXIodGhpcy5jdXN0b21JbmxpbmVHcmFtbWFyKTtcblxuICAgIHRoaXMubGlzdGVuZXJzID0ge1xuICAgICAgY2hhbmdlOiBbXSxcbiAgICAgIHNlbGVjdGlvbjogW10sXG4gICAgICBkcm9wOiBbXSxcbiAgICB9O1xuXG4gICAgbGV0IGVsZW1lbnQ6IEhUTUxFbGVtZW50IHwgbnVsbCA9IG51bGw7XG4gICAgaWYgKHR5cGVvZiBwcm9wcy5lbGVtZW50ID09PSAnc3RyaW5nJykge1xuICAgICAgZWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHByb3BzLmVsZW1lbnQpO1xuICAgIH0gZWxzZSBpZiAocHJvcHMuZWxlbWVudCkge1xuICAgICAgZWxlbWVudCA9IHByb3BzLmVsZW1lbnQ7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBwcm9wcy50ZXh0YXJlYSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHRoaXMudGV4dGFyZWEgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChwcm9wcy50ZXh0YXJlYSkgYXMgSFRNTFRleHRBcmVhRWxlbWVudDtcbiAgICB9IGVsc2UgaWYgKHByb3BzLnRleHRhcmVhKSB7XG4gICAgICB0aGlzLnRleHRhcmVhID0gcHJvcHMudGV4dGFyZWE7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMudGV4dGFyZWEpIHtcbiAgICAgIGlmICghZWxlbWVudCkgZWxlbWVudCA9IHRoaXMudGV4dGFyZWE7XG4gICAgfVxuXG4gICAgaWYgKCFlbGVtZW50KSB7XG4gICAgICBlbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJib2R5XCIpWzBdO1xuICAgIH1cbiAgICBpZiAoZWxlbWVudCAmJiBlbGVtZW50LnRhZ05hbWUgPT09IFwiVEVYVEFSRUFcIikge1xuICAgICAgdGhpcy50ZXh0YXJlYSA9IGVsZW1lbnQgYXMgSFRNTFRleHRBcmVhRWxlbWVudDtcbiAgICAgIGVsZW1lbnQgPSB0aGlzLnRleHRhcmVhLnBhcmVudE5vZGUgYXMgSFRNTEVsZW1lbnQ7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMudGV4dGFyZWEpIHtcbiAgICAgIHRoaXMudGV4dGFyZWEuc3R5bGUuZGlzcGxheSA9IFwibm9uZVwiO1xuICAgIH1cblxuICAgIHRoaXMudW5kb1N0YWNrID0gW107XG4gICAgdGhpcy5yZWRvU3RhY2sgPSBbXTtcbiAgICB0aGlzLmlzUmVzdG9yaW5nSGlzdG9yeSA9IGZhbHNlO1xuICAgIHRoaXMubWF4SGlzdG9yeSA9IDEwMDtcblxuICAgIHRoaXMuY3JlYXRlRWRpdG9yRWxlbWVudChlbGVtZW50LCBwcm9wcyk7XG4gICAgdGhpcy5zZXRDb250ZW50KFxuICAgICAgdHlwZW9mIHByb3BzLmNvbnRlbnQgPT09IFwic3RyaW5nXCJcbiAgICAgICAgPyBwcm9wcy5jb250ZW50XG4gICAgICAgIDogdGhpcy50ZXh0YXJlYVxuICAgICAgICA/IHRoaXMudGV4dGFyZWEudmFsdWVcbiAgICAgICAgOiBcIiMgSGVsbG8gVGlueU1ERSFcXG5FZGl0ICoqaGVyZSoqXCJcbiAgICApO1xuICAgIFxuICAgIHRoaXMuZSEuYWRkRXZlbnRMaXN0ZW5lcihcImtleWRvd25cIiwgKGUpID0+IHRoaXMuaGFuZGxlVW5kb1JlZG9LZXkoZSkpO1xuICB9XG5cbiAgZ2V0IGNhblVuZG8oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMudW5kb1N0YWNrLmxlbmd0aCA+PSAyO1xuICB9XG5cbiAgZ2V0IGNhblJlZG8oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMucmVkb1N0YWNrLmxlbmd0aCA+IDA7XG4gIH1cblxuICBwcml2YXRlIHB1c2hIaXN0b3J5KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmlzUmVzdG9yaW5nSGlzdG9yeSkgcmV0dXJuO1xuICAgIHRoaXMucHVzaEN1cnJlbnRTdGF0ZSgpO1xuICAgIHRoaXMucmVkb1N0YWNrID0gW107XG4gIH1cblxuICBwcml2YXRlIHB1c2hDdXJyZW50U3RhdGUoKTogdm9pZCB7XG4gICAgdGhpcy51bmRvU3RhY2sucHVzaCh7XG4gICAgICBjb250ZW50OiB0aGlzLmdldENvbnRlbnQoKSxcbiAgICAgIHNlbGVjdGlvbjogdGhpcy5nZXRTZWxlY3Rpb24oKSxcbiAgICAgIGFuY2hvcjogdGhpcy5nZXRTZWxlY3Rpb24odHJ1ZSksXG4gICAgfSk7XG4gICAgaWYgKHRoaXMudW5kb1N0YWNrLmxlbmd0aCA+IHRoaXMubWF4SGlzdG9yeSkgdGhpcy51bmRvU3RhY2suc2hpZnQoKTtcbiAgfVxuXG4gIHB1YmxpYyB1bmRvKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnVuZG9TdGFjay5sZW5ndGggPCAyKSByZXR1cm47XG4gICAgdGhpcy5pc1Jlc3RvcmluZ0hpc3RvcnkgPSB0cnVlO1xuICAgIHRoaXMucHVzaEN1cnJlbnRTdGF0ZSgpO1xuICAgIGNvbnN0IGN1cnJlbnQgPSB0aGlzLnVuZG9TdGFjay5wb3AoKSE7XG4gICAgdGhpcy5yZWRvU3RhY2sucHVzaChjdXJyZW50KTtcbiAgICBjb25zdCBwcmV2ID0gdGhpcy51bmRvU3RhY2tbdGhpcy51bmRvU3RhY2subGVuZ3RoIC0gMV07XG4gICAgdGhpcy5zZXRDb250ZW50KHByZXYuY29udGVudCk7XG4gICAgaWYgKHByZXYuc2VsZWN0aW9uKSB0aGlzLnNldFNlbGVjdGlvbihwcmV2LnNlbGVjdGlvbiwgcHJldi5hbmNob3IpO1xuICAgIHRoaXMudW5kb1N0YWNrLnBvcCgpO1xuICAgIHRoaXMuaXNSZXN0b3JpbmdIaXN0b3J5ID0gZmFsc2U7XG4gIH1cblxuICBwdWJsaWMgcmVkbygpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMucmVkb1N0YWNrLmxlbmd0aCkgcmV0dXJuO1xuICAgIHRoaXMuaXNSZXN0b3JpbmdIaXN0b3J5ID0gdHJ1ZTtcbiAgICB0aGlzLnB1c2hDdXJyZW50U3RhdGUoKTtcbiAgICBjb25zdCBuZXh0ID0gdGhpcy5yZWRvU3RhY2sucG9wKCkhO1xuICAgIHRoaXMuc2V0Q29udGVudChuZXh0LmNvbnRlbnQpO1xuICAgIGlmIChuZXh0LnNlbGVjdGlvbikgdGhpcy5zZXRTZWxlY3Rpb24obmV4dC5zZWxlY3Rpb24sIG5leHQuYW5jaG9yKTtcbiAgICB0aGlzLmlzUmVzdG9yaW5nSGlzdG9yeSA9IGZhbHNlO1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVVbmRvUmVkb0tleShlOiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgY29uc3QgaXNNYWMgPSAvTWFjfGlQb2R8aVBob25lfGlQYWQvLnRlc3QobmF2aWdhdG9yLnBsYXRmb3JtKTtcbiAgICBjb25zdCBjdHJsID0gaXNNYWMgPyBlLm1ldGFLZXkgOiBlLmN0cmxLZXk7XG4gICAgaWYgKGN0cmwgJiYgIWUuYWx0S2V5KSB7XG4gICAgICBpZiAoZS5rZXkgPT09IFwielwiIHx8IGUua2V5ID09PSBcIlpcIikge1xuICAgICAgICBpZiAoZS5zaGlmdEtleSkge1xuICAgICAgICAgIHRoaXMucmVkbygpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMudW5kbygpO1xuICAgICAgICB9XG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgIH0gZWxzZSBpZiAoZS5rZXkgPT09IFwieVwiIHx8IGUua2V5ID09PSBcIllcIikge1xuICAgICAgICB0aGlzLnJlZG8oKTtcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlRWRpdG9yRWxlbWVudChlbGVtZW50OiBIVE1MRWxlbWVudCwgcHJvcHM6IEVkaXRvclByb3BzKTogdm9pZCB7XG4gICAgaWYgKHByb3BzICYmIHByb3BzLmVkaXRvciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAodHlwZW9mIHByb3BzLmVkaXRvciA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgdGhpcy5lID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQocHJvcHMuZWRpdG9yKSBhcyBIVE1MRGl2RWxlbWVudDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuZSA9IHByb3BzLmVkaXRvciBhcyBIVE1MRGl2RWxlbWVudDtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5lID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICB9XG5cbiAgICB0aGlzLmUuY2xhc3NMaXN0LmFkZChcIlRpbnlNREVcIik7XG4gICAgdGhpcy5lLmNvbnRlbnRFZGl0YWJsZSA9IFwidHJ1ZVwiO1xuICAgIHRoaXMuZS5zdHlsZS53aGl0ZVNwYWNlID0gXCJwcmUtd3JhcFwiO1xuICAgICh0aGlzLmUuc3R5bGUgYXMgYW55KS53ZWJraXRVc2VyTW9kaWZ5ID0gXCJyZWFkLXdyaXRlLXBsYWludGV4dC1vbmx5XCI7XG5cbiAgICBpZiAocHJvcHMuZWRpdG9yID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmIChcbiAgICAgICAgdGhpcy50ZXh0YXJlYSAmJlxuICAgICAgICB0aGlzLnRleHRhcmVhLnBhcmVudE5vZGUgPT09IGVsZW1lbnQgJiZcbiAgICAgICAgdGhpcy50ZXh0YXJlYS5uZXh0U2libGluZ1xuICAgICAgKSB7XG4gICAgICAgIGVsZW1lbnQuaW5zZXJ0QmVmb3JlKHRoaXMuZSwgdGhpcy50ZXh0YXJlYS5uZXh0U2libGluZyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBlbGVtZW50LmFwcGVuZENoaWxkKHRoaXMuZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5lLmFkZEV2ZW50TGlzdGVuZXIoXCJpbnB1dFwiLCAoZSkgPT4gdGhpcy5oYW5kbGVJbnB1dEV2ZW50KGUpKTtcbiAgICB0aGlzLmUuYWRkRXZlbnRMaXN0ZW5lcihcImNvbXBvc2l0aW9uZW5kXCIsIChlKSA9PiB0aGlzLmhhbmRsZUlucHV0RXZlbnQoZSkpO1xuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJzZWxlY3Rpb25jaGFuZ2VcIiwgKGUpID0+IHtcbiAgICAgIGlmICh0aGlzLmhhc0ZvY3VzKSB7IHRoaXMuaGFuZGxlU2VsZWN0aW9uQ2hhbmdlRXZlbnQoZSk7IH1cbiAgICAgIH1cbiAgICApO1xuICAgIHRoaXMuZS5hZGRFdmVudExpc3RlbmVyKFwiYmx1clwiLCAoKSA9PiB0aGlzLmhhc0ZvY3VzID0gZmFsc2UgKTtcbiAgICB0aGlzLmUuYWRkRXZlbnRMaXN0ZW5lcihcImZvY3VzXCIsICgpID0+IHRoaXMuaGFzRm9jdXMgPSB0cnVlICk7XG4gICAgdGhpcy5lLmFkZEV2ZW50TGlzdGVuZXIoXCJwYXN0ZVwiLCAoZSkgPT4gdGhpcy5oYW5kbGVQYXN0ZShlKSk7XG4gICAgdGhpcy5lLmFkZEV2ZW50TGlzdGVuZXIoXCJkcm9wXCIsIChlKSA9PiB0aGlzLmhhbmRsZURyb3AoZSkpO1xuICAgIHRoaXMubGluZUVsZW1lbnRzID0gdGhpcy5lLmNoaWxkTm9kZXM7XG4gIH1cblxuICBwdWJsaWMgc2V0Q29udGVudChjb250ZW50OiBzdHJpbmcpOiB2b2lkIHtcbiAgICB3aGlsZSAodGhpcy5lIS5maXJzdENoaWxkKSB7XG4gICAgICB0aGlzLmUhLnJlbW92ZUNoaWxkKHRoaXMuZSEuZmlyc3RDaGlsZCk7XG4gICAgfVxuICAgIHRoaXMubGluZXMgPSBjb250ZW50LnNwbGl0KC8oPzpcXHJcXG58XFxyfFxcbikvKTtcbiAgICB0aGlzLmxpbmVEaXJ0eSA9IFtdO1xuICAgIGZvciAobGV0IGxpbmVOdW0gPSAwOyBsaW5lTnVtIDwgdGhpcy5saW5lcy5sZW5ndGg7IGxpbmVOdW0rKykge1xuICAgICAgbGV0IGxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICAgIHRoaXMuZSEuYXBwZW5kQ2hpbGQobGUpO1xuICAgICAgdGhpcy5saW5lRGlydHkucHVzaCh0cnVlKTtcbiAgICB9XG4gICAgdGhpcy5saW5lVHlwZXMgPSBuZXcgQXJyYXkodGhpcy5saW5lcy5sZW5ndGgpO1xuICAgIHRoaXMudXBkYXRlRm9ybWF0dGluZygpO1xuICAgIHRoaXMuZmlyZUNoYW5nZSgpO1xuICAgIGlmICghdGhpcy5pc1Jlc3RvcmluZ0hpc3RvcnkpIHRoaXMucHVzaEhpc3RvcnkoKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRDb250ZW50KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMubGluZXMuam9pbihcIlxcblwiKTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlRm9ybWF0dGluZygpOiB2b2lkIHtcbiAgICB0aGlzLnVwZGF0ZUxpbmVUeXBlcygpO1xuICAgIHRoaXMudXBkYXRlTGlua0xhYmVscygpO1xuICAgIHRoaXMuYXBwbHlMaW5lVHlwZXMoKTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlTGlua0xhYmVscygpOiB2b2lkIHtcbiAgICB0aGlzLmxpbmtMYWJlbHMgPSBbXTtcbiAgICBmb3IgKGxldCBsID0gMDsgbCA8IHRoaXMubGluZXMubGVuZ3RoOyBsKyspIHtcbiAgICAgIGlmICh0aGlzLmxpbmVUeXBlc1tsXSA9PT0gXCJUTUxpbmtSZWZlcmVuY2VEZWZpbml0aW9uXCIpIHtcbiAgICAgICAgdGhpcy5saW5rTGFiZWxzLnB1c2goXG4gICAgICAgICAgdGhpcy5saW5lQ2FwdHVyZXNbbF1bXG4gICAgICAgICAgICBsaW5lR3JhbW1hci5UTUxpbmtSZWZlcmVuY2VEZWZpbml0aW9uLmxhYmVsUGxhY2Vob2xkZXIhXG4gICAgICAgICAgXVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgcmVwbGFjZShyZXBsYWNlbWVudDogc3RyaW5nLCBjYXB0dXJlOiBSZWdFeHBFeGVjQXJyYXkpOiBzdHJpbmcge1xuICAgIHJldHVybiByZXBsYWNlbWVudC5yZXBsYWNlKC8oXFwkezEsMn0pKFswLTldKS9nLCAoc3RyLCBwMSwgcDIpID0+IHtcbiAgICAgIGlmIChwMSA9PT0gXCIkXCIpIHJldHVybiBodG1sZXNjYXBlKGNhcHR1cmVbcGFyc2VJbnQocDIpXSk7XG4gICAgICBlbHNlXG4gICAgICAgIHJldHVybiBgPHNwYW4gY2xhc3M9XCJUTUlubGluZUZvcm1hdHRlZFwiPiR7dGhpcy5wcm9jZXNzSW5saW5lU3R5bGVzKFxuICAgICAgICAgIGNhcHR1cmVbcGFyc2VJbnQocDIpXVxuICAgICAgICApfTwvc3Bhbj5gO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBhcHBseUxpbmVUeXBlcygpOiB2b2lkIHtcbiAgICBmb3IgKGxldCBsaW5lTnVtID0gMDsgbGluZU51bSA8IHRoaXMubGluZXMubGVuZ3RoOyBsaW5lTnVtKyspIHtcbiAgICAgIGlmICh0aGlzLmxpbmVEaXJ0eVtsaW5lTnVtXSkge1xuICAgICAgICBsZXQgY29udGVudEhUTUwgPSB0aGlzLnJlcGxhY2UoXG4gICAgICAgICAgdGhpcy5saW5lUmVwbGFjZW1lbnRzW2xpbmVOdW1dLFxuICAgICAgICAgIHRoaXMubGluZUNhcHR1cmVzW2xpbmVOdW1dXG4gICAgICAgICk7XG4gICAgICAgICh0aGlzLmxpbmVFbGVtZW50c1tsaW5lTnVtXSBhcyBIVE1MRWxlbWVudCkuY2xhc3NOYW1lID0gdGhpcy5saW5lVHlwZXNbbGluZU51bV07XG4gICAgICAgICh0aGlzLmxpbmVFbGVtZW50c1tsaW5lTnVtXSBhcyBIVE1MRWxlbWVudCkucmVtb3ZlQXR0cmlidXRlKFwic3R5bGVcIik7XG4gICAgICAgICh0aGlzLmxpbmVFbGVtZW50c1tsaW5lTnVtXSBhcyBIVE1MRWxlbWVudCkuaW5uZXJIVE1MID1cbiAgICAgICAgICBjb250ZW50SFRNTCA9PT0gXCJcIiA/IFwiPGJyIC8+XCIgOiBjb250ZW50SFRNTDtcbiAgICAgIH1cbiAgICAgICh0aGlzLmxpbmVFbGVtZW50c1tsaW5lTnVtXSBhcyBIVE1MRWxlbWVudCkuZGF0YXNldC5saW5lTnVtID0gbGluZU51bS50b1N0cmluZygpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlTGluZVR5cGVzKCk6IHZvaWQge1xuICAgIGxldCBjb2RlQmxvY2tUeXBlOiBzdHJpbmcgfCBmYWxzZSA9IGZhbHNlO1xuICAgIGxldCBjb2RlQmxvY2tTZXFMZW5ndGggPSAwO1xuICAgIGxldCBodG1sQmxvY2s6IEhUTUxCbG9ja1J1bGUgfCBmYWxzZSA9IGZhbHNlO1xuXG4gICAgZm9yIChsZXQgbGluZU51bSA9IDA7IGxpbmVOdW0gPCB0aGlzLmxpbmVzLmxlbmd0aDsgbGluZU51bSsrKSB7XG4gICAgICBsZXQgbGluZVR5cGUgPSBcIlRNUGFyYVwiO1xuICAgICAgbGV0IGxpbmVDYXB0dXJlOiBSZWdFeHBFeGVjQXJyYXkgPSBbdGhpcy5saW5lc1tsaW5lTnVtXV0gYXMgUmVnRXhwRXhlY0FycmF5O1xuICAgICAgbGV0IGxpbmVSZXBsYWNlbWVudCA9IFwiJCQwXCI7XG5cbiAgICAgIC8vIENoZWNrIG9uZ29pbmcgY29kZSBibG9ja3NcbiAgICAgIGlmIChjb2RlQmxvY2tUeXBlID09PSBcIlRNQ29kZUZlbmNlQmFja3RpY2tPcGVuXCIpIHtcbiAgICAgICAgbGV0IGNhcHR1cmUgPSBsaW5lR3JhbW1hci5UTUNvZGVGZW5jZUJhY2t0aWNrQ2xvc2UucmVnZXhwLmV4ZWModGhpcy5saW5lc1tsaW5lTnVtXSk7XG4gICAgICAgIGlmIChjYXB0dXJlICYmIGNhcHR1cmUuZ3JvdXBzIVtcInNlcVwiXS5sZW5ndGggPj0gY29kZUJsb2NrU2VxTGVuZ3RoKSB7XG4gICAgICAgICAgbGluZVR5cGUgPSBcIlRNQ29kZUZlbmNlQmFja3RpY2tDbG9zZVwiO1xuICAgICAgICAgIGxpbmVSZXBsYWNlbWVudCA9IGxpbmVHcmFtbWFyLlRNQ29kZUZlbmNlQmFja3RpY2tDbG9zZS5yZXBsYWNlbWVudDtcbiAgICAgICAgICBsaW5lQ2FwdHVyZSA9IGNhcHR1cmU7XG4gICAgICAgICAgY29kZUJsb2NrVHlwZSA9IGZhbHNlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGxpbmVUeXBlID0gXCJUTUZlbmNlZENvZGVCYWNrdGlja1wiO1xuICAgICAgICAgIGxpbmVSZXBsYWNlbWVudCA9ICc8c3BhbiBjbGFzcz1cIlRNRmVuY2VkQ29kZVwiPiQwPGJyIC8+PC9zcGFuPic7XG4gICAgICAgICAgbGluZUNhcHR1cmUgPSBbdGhpcy5saW5lc1tsaW5lTnVtXV0gYXMgUmVnRXhwRXhlY0FycmF5O1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGNvZGVCbG9ja1R5cGUgPT09IFwiVE1Db2RlRmVuY2VUaWxkZU9wZW5cIikge1xuICAgICAgICBsZXQgY2FwdHVyZSA9IGxpbmVHcmFtbWFyLlRNQ29kZUZlbmNlVGlsZGVDbG9zZS5yZWdleHAuZXhlYyh0aGlzLmxpbmVzW2xpbmVOdW1dKTtcbiAgICAgICAgaWYgKGNhcHR1cmUgJiYgY2FwdHVyZS5ncm91cHMhW1wic2VxXCJdLmxlbmd0aCA+PSBjb2RlQmxvY2tTZXFMZW5ndGgpIHtcbiAgICAgICAgICBsaW5lVHlwZSA9IFwiVE1Db2RlRmVuY2VUaWxkZUNsb3NlXCI7XG4gICAgICAgICAgbGluZVJlcGxhY2VtZW50ID0gbGluZUdyYW1tYXIuVE1Db2RlRmVuY2VUaWxkZUNsb3NlLnJlcGxhY2VtZW50O1xuICAgICAgICAgIGxpbmVDYXB0dXJlID0gY2FwdHVyZTtcbiAgICAgICAgICBjb2RlQmxvY2tUeXBlID0gZmFsc2U7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbGluZVR5cGUgPSBcIlRNRmVuY2VkQ29kZVRpbGRlXCI7XG4gICAgICAgICAgbGluZVJlcGxhY2VtZW50ID0gJzxzcGFuIGNsYXNzPVwiVE1GZW5jZWRDb2RlXCI+JDA8YnIgLz48L3NwYW4+JztcbiAgICAgICAgICBsaW5lQ2FwdHVyZSA9IFt0aGlzLmxpbmVzW2xpbmVOdW1dXSBhcyBSZWdFeHBFeGVjQXJyYXk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gQ2hlY2sgSFRNTCBibG9jayB0eXBlc1xuICAgICAgaWYgKGxpbmVUeXBlID09PSBcIlRNUGFyYVwiICYmIGh0bWxCbG9jayA9PT0gZmFsc2UpIHtcbiAgICAgICAgZm9yIChsZXQgaHRtbEJsb2NrVHlwZSBvZiBodG1sQmxvY2tHcmFtbWFyKSB7XG4gICAgICAgICAgaWYgKHRoaXMubGluZXNbbGluZU51bV0ubWF0Y2goaHRtbEJsb2NrVHlwZS5zdGFydCkpIHtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgaHRtbEJsb2NrVHlwZS5wYXJhSW50ZXJydXB0IHx8XG4gICAgICAgICAgICAgIGxpbmVOdW0gPT09IDAgfHxcbiAgICAgICAgICAgICAgIShcbiAgICAgICAgICAgICAgICB0aGlzLmxpbmVUeXBlc1tsaW5lTnVtIC0gMV0gPT09IFwiVE1QYXJhXCIgfHxcbiAgICAgICAgICAgICAgICB0aGlzLmxpbmVUeXBlc1tsaW5lTnVtIC0gMV0gPT09IFwiVE1VTFwiIHx8XG4gICAgICAgICAgICAgICAgdGhpcy5saW5lVHlwZXNbbGluZU51bSAtIDFdID09PSBcIlRNT0xcIiB8fFxuICAgICAgICAgICAgICAgIHRoaXMubGluZVR5cGVzW2xpbmVOdW0gLSAxXSA9PT0gXCJUTUJsb2NrcXVvdGVcIlxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgaHRtbEJsb2NrID0gaHRtbEJsb2NrVHlwZTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChodG1sQmxvY2sgIT09IGZhbHNlKSB7XG4gICAgICAgIGxpbmVUeXBlID0gXCJUTUhUTUxCbG9ja1wiO1xuICAgICAgICBsaW5lUmVwbGFjZW1lbnQgPSAnPHNwYW4gY2xhc3M9XCJUTUhUTUxDb250ZW50XCI+JDA8YnIgLz48L3NwYW4+JztcbiAgICAgICAgbGluZUNhcHR1cmUgPSBbdGhpcy5saW5lc1tsaW5lTnVtXV0gYXMgUmVnRXhwRXhlY0FycmF5O1xuXG4gICAgICAgIGlmIChodG1sQmxvY2suZW5kKSB7XG4gICAgICAgICAgaWYgKHRoaXMubGluZXNbbGluZU51bV0ubWF0Y2goaHRtbEJsb2NrLmVuZCkpIHtcbiAgICAgICAgICAgIGh0bWxCbG9jayA9IGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBsaW5lTnVtID09PSB0aGlzLmxpbmVzLmxlbmd0aCAtIDEgfHxcbiAgICAgICAgICAgIHRoaXMubGluZXNbbGluZU51bSArIDFdLm1hdGNoKGxpbmVHcmFtbWFyLlRNQmxhbmtMaW5lLnJlZ2V4cClcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIGh0bWxCbG9jayA9IGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBDaGVjayBhbGwgcmVnZXhwcyBpZiB3ZSBoYXZlbid0IGFwcGxpZWQgb25lIG9mIHRoZSBjb2RlIGJsb2NrIHR5cGVzXG4gICAgICBpZiAobGluZVR5cGUgPT09IFwiVE1QYXJhXCIpIHtcbiAgICAgICAgZm9yIChsZXQgdHlwZSBpbiBsaW5lR3JhbW1hcikge1xuICAgICAgICAgIGlmIChsaW5lR3JhbW1hclt0eXBlXS5yZWdleHApIHtcbiAgICAgICAgICAgIGxldCBjYXB0dXJlID0gbGluZUdyYW1tYXJbdHlwZV0ucmVnZXhwLmV4ZWModGhpcy5saW5lc1tsaW5lTnVtXSk7XG4gICAgICAgICAgICBpZiAoY2FwdHVyZSkge1xuICAgICAgICAgICAgICBsaW5lVHlwZSA9IHR5cGU7XG4gICAgICAgICAgICAgIGxpbmVSZXBsYWNlbWVudCA9IGxpbmVHcmFtbWFyW3R5cGVdLnJlcGxhY2VtZW50O1xuICAgICAgICAgICAgICBsaW5lQ2FwdHVyZSA9IGNhcHR1cmU7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBJZiB3ZSd2ZSBvcGVuZWQgYSBjb2RlIGJsb2NrLCByZW1lbWJlciB0aGF0XG4gICAgICBpZiAobGluZVR5cGUgPT09IFwiVE1Db2RlRmVuY2VCYWNrdGlja09wZW5cIiB8fCBsaW5lVHlwZSA9PT0gXCJUTUNvZGVGZW5jZVRpbGRlT3BlblwiKSB7XG4gICAgICAgIGNvZGVCbG9ja1R5cGUgPSBsaW5lVHlwZTtcbiAgICAgICAgY29kZUJsb2NrU2VxTGVuZ3RoID0gbGluZUNhcHR1cmUuZ3JvdXBzIVtcInNlcVwiXS5sZW5ndGg7XG4gICAgICB9XG5cbiAgICAgIC8vIExpbmsgcmVmZXJlbmNlIGRlZmluaXRpb24gYW5kIGluZGVudGVkIGNvZGUgY2FuJ3QgaW50ZXJydXB0IGEgcGFyYWdyYXBoXG4gICAgICBpZiAoXG4gICAgICAgIChsaW5lVHlwZSA9PT0gXCJUTUluZGVudGVkQ29kZVwiIHx8IGxpbmVUeXBlID09PSBcIlRNTGlua1JlZmVyZW5jZURlZmluaXRpb25cIikgJiZcbiAgICAgICAgbGluZU51bSA+IDAgJiZcbiAgICAgICAgKHRoaXMubGluZVR5cGVzW2xpbmVOdW0gLSAxXSA9PT0gXCJUTVBhcmFcIiB8fFxuICAgICAgICAgIHRoaXMubGluZVR5cGVzW2xpbmVOdW0gLSAxXSA9PT0gXCJUTVVMXCIgfHxcbiAgICAgICAgICB0aGlzLmxpbmVUeXBlc1tsaW5lTnVtIC0gMV0gPT09IFwiVE1PTFwiIHx8XG4gICAgICAgICAgdGhpcy5saW5lVHlwZXNbbGluZU51bSAtIDFdID09PSBcIlRNQmxvY2txdW90ZVwiKVxuICAgICAgKSB7XG4gICAgICAgIGxpbmVUeXBlID0gXCJUTVBhcmFcIjtcbiAgICAgICAgbGluZUNhcHR1cmUgPSBbdGhpcy5saW5lc1tsaW5lTnVtXV0gYXMgUmVnRXhwRXhlY0FycmF5O1xuICAgICAgICBsaW5lUmVwbGFjZW1lbnQgPSBcIiQkMFwiO1xuICAgICAgfVxuXG4gICAgICAvLyBTZXRleHQgSDIgbWFya2VycyB0aGF0IGNhbiBhbHNvIGJlIGludGVycHJldGVkIGFzIGFuIGVtcHR5IGxpc3QgaXRlbSBzaG91bGQgYmUgcmVnYXJkZWQgYXMgc3VjaFxuICAgICAgaWYgKGxpbmVUeXBlID09PSBcIlRNU2V0ZXh0SDJNYXJrZXJcIikge1xuICAgICAgICBsZXQgY2FwdHVyZSA9IGxpbmVHcmFtbWFyLlRNVUwucmVnZXhwLmV4ZWModGhpcy5saW5lc1tsaW5lTnVtXSk7XG4gICAgICAgIGlmIChjYXB0dXJlKSB7XG4gICAgICAgICAgbGluZVR5cGUgPSBcIlRNVUxcIjtcbiAgICAgICAgICBsaW5lUmVwbGFjZW1lbnQgPSBsaW5lR3JhbW1hci5UTVVMLnJlcGxhY2VtZW50O1xuICAgICAgICAgIGxpbmVDYXB0dXJlID0gY2FwdHVyZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBTZXRleHQgaGVhZGluZ3MgYXJlIG9ubHkgdmFsaWQgaWYgcHJlY2VkZWQgYnkgYSBwYXJhZ3JhcGhcbiAgICAgIGlmIChsaW5lVHlwZSA9PT0gXCJUTVNldGV4dEgxTWFya2VyXCIgfHwgbGluZVR5cGUgPT09IFwiVE1TZXRleHRIMk1hcmtlclwiKSB7XG4gICAgICAgIGlmIChsaW5lTnVtID09PSAwIHx8IHRoaXMubGluZVR5cGVzW2xpbmVOdW0gLSAxXSAhPT0gXCJUTVBhcmFcIikge1xuICAgICAgICAgIGxldCBjYXB0dXJlID0gbGluZUdyYW1tYXIuVE1IUi5yZWdleHAuZXhlYyh0aGlzLmxpbmVzW2xpbmVOdW1dKTtcbiAgICAgICAgICBpZiAoY2FwdHVyZSkge1xuICAgICAgICAgICAgbGluZVR5cGUgPSBcIlRNSFJcIjtcbiAgICAgICAgICAgIGxpbmVDYXB0dXJlID0gY2FwdHVyZTtcbiAgICAgICAgICAgIGxpbmVSZXBsYWNlbWVudCA9IGxpbmVHcmFtbWFyLlRNSFIucmVwbGFjZW1lbnQ7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxpbmVUeXBlID0gXCJUTVBhcmFcIjtcbiAgICAgICAgICAgIGxpbmVDYXB0dXJlID0gW3RoaXMubGluZXNbbGluZU51bV1dIGFzIFJlZ0V4cEV4ZWNBcnJheTtcbiAgICAgICAgICAgIGxpbmVSZXBsYWNlbWVudCA9IFwiJCQwXCI7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGxldCBoZWFkaW5nTGluZSA9IGxpbmVOdW0gLSAxO1xuICAgICAgICAgIGNvbnN0IGhlYWRpbmdMaW5lVHlwZSA9IGxpbmVUeXBlID09PSBcIlRNU2V0ZXh0SDFNYXJrZXJcIiA/IFwiVE1TZXRleHRIMVwiIDogXCJUTVNldGV4dEgyXCI7XG4gICAgICAgICAgZG8ge1xuICAgICAgICAgICAgaWYgKHRoaXMubGluZVR5cGVzW2hlYWRpbmdMaW5lXSAhPT0gaGVhZGluZ0xpbmVUeXBlKSB7XG4gICAgICAgICAgICAgIHRoaXMubGluZVR5cGVzW2hlYWRpbmdMaW5lXSA9IGhlYWRpbmdMaW5lVHlwZTtcbiAgICAgICAgICAgICAgdGhpcy5saW5lRGlydHlbaGVhZGluZ0xpbmVdID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMubGluZVJlcGxhY2VtZW50c1toZWFkaW5nTGluZV0gPSBcIiQkMFwiO1xuICAgICAgICAgICAgdGhpcy5saW5lQ2FwdHVyZXNbaGVhZGluZ0xpbmVdID0gW3RoaXMubGluZXNbaGVhZGluZ0xpbmVdXSBhcyBSZWdFeHBFeGVjQXJyYXk7XG4gICAgICAgICAgICBoZWFkaW5nTGluZS0tO1xuICAgICAgICAgIH0gd2hpbGUgKGhlYWRpbmdMaW5lID49IDAgJiYgdGhpcy5saW5lVHlwZXNbaGVhZGluZ0xpbmVdID09PSBcIlRNUGFyYVwiKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5saW5lVHlwZXNbbGluZU51bV0gIT09IGxpbmVUeXBlKSB7XG4gICAgICAgIHRoaXMubGluZVR5cGVzW2xpbmVOdW1dID0gbGluZVR5cGU7XG4gICAgICAgIHRoaXMubGluZURpcnR5W2xpbmVOdW1dID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIHRoaXMubGluZVJlcGxhY2VtZW50c1tsaW5lTnVtXSA9IGxpbmVSZXBsYWNlbWVudDtcbiAgICAgIHRoaXMubGluZUNhcHR1cmVzW2xpbmVOdW1dID0gbGluZUNhcHR1cmU7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGdldFNlbGVjdGlvbihnZXRBbmNob3I6IGJvb2xlYW4gPSBmYWxzZSk6IFBvc2l0aW9uIHwgbnVsbCB7XG4gICAgY29uc3Qgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpO1xuICAgIGxldCBzdGFydE5vZGUgPSBnZXRBbmNob3IgPyBzZWxlY3Rpb24hLmFuY2hvck5vZGUgOiBzZWxlY3Rpb24hLmZvY3VzTm9kZTtcbiAgICBpZiAoIXN0YXJ0Tm9kZSkgcmV0dXJuIG51bGw7XG4gICAgbGV0IG9mZnNldCA9IGdldEFuY2hvciA/IHNlbGVjdGlvbiEuYW5jaG9yT2Zmc2V0IDogc2VsZWN0aW9uIS5mb2N1c09mZnNldDtcbiAgICBpZiAoc3RhcnROb2RlID09PSB0aGlzLmUpIHtcbiAgICAgIGlmIChvZmZzZXQgPCB0aGlzLmxpbmVzLmxlbmd0aClcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICByb3c6IG9mZnNldCxcbiAgICAgICAgICBjb2w6IDAsXG4gICAgICAgIH07XG4gICAgICByZXR1cm4ge1xuICAgICAgICByb3c6IG9mZnNldCAtIDEsXG4gICAgICAgIGNvbDogdGhpcy5saW5lc1tvZmZzZXQgLSAxXS5sZW5ndGgsXG4gICAgICB9O1xuICAgIH1cblxuICAgIGxldCBjb2wgPSB0aGlzLmNvbXB1dGVDb2x1bW4oc3RhcnROb2RlLCBvZmZzZXQpO1xuICAgIGlmIChjb2wgPT09IG51bGwpIHJldHVybiBudWxsO1xuXG4gICAgbGV0IG5vZGUgPSBzdGFydE5vZGU7XG4gICAgd2hpbGUgKG5vZGUucGFyZW50RWxlbWVudCAhPT0gdGhpcy5lKSB7XG4gICAgICBub2RlID0gbm9kZS5wYXJlbnRFbGVtZW50ITtcbiAgICB9XG5cbiAgICBsZXQgcm93ID0gMDtcbiAgICAvLyBJZiB0aGUgbm9kZSBkb2Vzbid0IGhhdmUgYSBwcmV2aW91cyBzaWJsaW5nLCBpdCBtdXN0IGJlIHRoZSBmaXJzdCBsaW5lXG4gICAgaWYgKG5vZGUucHJldmlvdXNTaWJsaW5nKSB7XG4gICAgICBjb25zdCBjdXJyZW50TGluZU51bURhdGEgPSAobm9kZSBhcyBIVE1MRWxlbWVudCkuZGF0YXNldD8ubGluZU51bTtcbiAgICAgIGNvbnN0IHByZXZpb3VzTGluZU51bURhdGEgPSAobm9kZS5wcmV2aW91c1NpYmxpbmcgYXMgSFRNTEVsZW1lbnQpLmRhdGFzZXQ/LmxpbmVOdW07XG5cbiAgICAgIGlmIChjdXJyZW50TGluZU51bURhdGEgJiYgcHJldmlvdXNMaW5lTnVtRGF0YSkge1xuICAgICAgICBjb25zdCBjdXJyZW50TGluZU51bSA9IHBhcnNlSW50KGN1cnJlbnRMaW5lTnVtRGF0YSk7XG4gICAgICAgIGNvbnN0IHByZXZpb3VzTGluZU51bSA9IHBhcnNlSW50KHByZXZpb3VzTGluZU51bURhdGEpO1xuICAgICAgICBpZiAoY3VycmVudExpbmVOdW0gPT09IHByZXZpb3VzTGluZU51bSArIDEpIHtcbiAgICAgICAgICByb3cgPSBjdXJyZW50TGluZU51bTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBJZiB0aGUgY3VycmVudCBsaW5lIGlzIE5PVCB0aGUgcHJldmlvdXMgbGluZSArIDEsIHRoZW4gZWl0aGVyIFxuICAgICAgICAgIC8vIHRoZSBjdXJyZW50IGxpbmUgZ290IHNwbGl0IGluIHR3byBvciBtZXJnZWQgd2l0aCB0aGUgcHJldmlvdXMgbGluZVxuICAgICAgICAgIC8vIEVpdGhlciB3YXksIHdlIG5lZWQgdG8gcmVjYWxjdWxhdGUgdGhlIHJvdyBudW1iZXJcbiAgICAgICAgICB3aGlsZSAobm9kZS5wcmV2aW91c1NpYmxpbmcpIHtcbiAgICAgICAgICAgIHJvdysrO1xuICAgICAgICAgICAgbm9kZSA9IG5vZGUucHJldmlvdXNTaWJsaW5nO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBcbiAgICByZXR1cm4geyByb3c6IHJvdywgY29sOiBjb2wgfTtcbiAgfVxuXG4gIHB1YmxpYyBzZXRTZWxlY3Rpb24oZm9jdXM6IFBvc2l0aW9uLCBhbmNob3I6IFBvc2l0aW9uIHwgbnVsbCA9IG51bGwpOiB2b2lkIHtcbiAgICBpZiAoIWZvY3VzKSByZXR1cm47XG5cbiAgICBsZXQgeyBub2RlOiBmb2N1c05vZGUsIG9mZnNldDogZm9jdXNPZmZzZXQgfSA9IHRoaXMuY29tcHV0ZU5vZGVBbmRPZmZzZXQoXG4gICAgICBmb2N1cy5yb3csXG4gICAgICBmb2N1cy5jb2wsXG4gICAgICBhbmNob3IgPyBhbmNob3Iucm93ID09PSBmb2N1cy5yb3cgJiYgYW5jaG9yLmNvbCA+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+IHN0YXJ0LnJvdyAmJiBlbmQuY29sID09PSAwKSB7XG4gICAgICAgIGVuZC5yb3ctLTtcbiAgICAgIH1cblxuICAgICAgZm9yIChsZXQgbGluZSA9IHN0YXJ0LnJvdzsgbGluZSA8PSBlbmQucm93OyBsaW5lKyspIHtcbiAgICAgICAgaWYgKHN0YXRlICYmIHRoaXMubGluZVR5cGVzW2xpbmVdICE9PSBjb21tYW5kc1tjb21tYW5kXS5jbGFzc05hbWUpIHtcbiAgICAgICAgICB0aGlzLmxpbmVzW2xpbmVdID0gdGhpcy5saW5lc1tsaW5lXS5yZXBsYWNlKFxuICAgICAgICAgICAgY29tbWFuZHNbY29tbWFuZF0uc2V0LnBhdHRlcm4sXG4gICAgICAgICAgICBjb21tYW5kc1tjb21tYW5kXS5zZXQucmVwbGFjZW1lbnQucmVwbGFjZShcIiQjXCIsIChsaW5lIC0gc3RhcnQucm93ICsgMSkudG9TdHJpbmcoKSlcbiAgICAgICAgICApO1xuICAgICAgICAgIHRoaXMubGluZURpcnR5W2xpbmVdID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXN0YXRlICYmIHRoaXMubGluZVR5cGVzW2xpbmVdID09PSBjb21tYW5kc1tjb21tYW5kXS5jbGFzc05hbWUpIHtcbiAgICAgICAgICB0aGlzLmxpbmVzW2xpbmVdID0gdGhpcy5saW5lc1tsaW5lXS5yZXBsYWNlKFxuICAgICAgICAgICAgY29tbWFuZHNbY29tbWFuZF0udW5zZXQucGF0dGVybixcbiAgICAgICAgICAgIGNvbW1hbmRzW2NvbW1hbmRdLnVuc2V0LnJlcGxhY2VtZW50XG4gICAgICAgICAgKTtcbiAgICAgICAgICB0aGlzLmxpbmVEaXJ0eVtsaW5lXSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHRoaXMudXBkYXRlRm9ybWF0dGluZygpO1xuICAgICAgdGhpcy5zZXRTZWxlY3Rpb24oXG4gICAgICAgIHsgcm93OiBlbmQucm93LCBjb2w6IHRoaXMubGluZXNbZW5kLnJvd10ubGVuZ3RoIH0sXG4gICAgICAgIHsgcm93OiBzdGFydC5yb3csIGNvbDogMCB9XG4gICAgICApO1xuICAgICAgdGhpcy5maXJlQ2hhbmdlKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBpc0lubGluZUZvcm1hdHRpbmdBbGxvd2VkKCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHNlbCA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcbiAgICBpZiAoIXNlbCB8fCAhc2VsLmZvY3VzTm9kZSB8fCAhc2VsLmFuY2hvck5vZGUpIHJldHVybiBmYWxzZTtcblxuICAgIGlmIChcbiAgICAgIHNlbC5pc0NvbGxhcHNlZCAmJlxuICAgICAgc2VsLmZvY3VzTm9kZS5ub2RlVHlwZSA9PT0gMyAmJlxuICAgICAgc2VsLmZvY3VzT2Zmc2V0ID09PSBzZWwuZm9jdXNOb2RlLm5vZGVWYWx1ZSEubGVuZ3RoXG4gICAgKSB7XG4gICAgICBsZXQgbm9kZTtcbiAgICAgIGZvciAobm9kZSA9IHNlbC5mb2N1c05vZGU7IG5vZGUgJiYgbm9kZS5uZXh0U2libGluZyA9PT0gbnVsbDsgbm9kZSA9IG5vZGUucGFyZW50Tm9kZSEpO1xuICAgICAgaWYgKFxuICAgICAgICBub2RlICYmXG4gICAgICAgIG5vZGUubmV4dFNpYmxpbmcgJiZcbiAgICAgICAgKG5vZGUubmV4dFNpYmxpbmcgYXMgSFRNTEVsZW1lbnQpLmNsYXNzTmFtZSAmJlxuICAgICAgICAobm9kZS5uZXh0U2libGluZyBhcyBIVE1MRWxlbWVudCkuY2xhc3NOYW1lLmluY2x1ZGVzKFwiVE1JbmxpbmVGb3JtYXR0ZWRcIilcbiAgICAgIClcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgbGV0IGFuY2VzdG9yID0gdGhpcy5jb21wdXRlQ29tbW9uQW5jZXN0b3Ioc2VsLmZvY3VzTm9kZSwgc2VsLmFuY2hvck5vZGUpO1xuICAgIGlmICghYW5jZXN0b3IpIHJldHVybiBmYWxzZTtcblxuICAgIHdoaWxlIChhbmNlc3RvciAmJiBhbmNlc3RvciAhPT0gdGhpcy5lKSB7XG4gICAgICBpZiAoXG4gICAgICAgIChhbmNlc3RvciBhcyBIVE1MRWxlbWVudCkuY2xhc3NOYW1lICYmXG4gICAgICAgIHR5cGVvZiAoYW5jZXN0b3IgYXMgSFRNTEVsZW1lbnQpLmNsYXNzTmFtZS5pbmNsdWRlcyA9PT0gXCJmdW5jdGlvblwiICYmXG4gICAgICAgICgoYW5jZXN0b3IgYXMgSFRNTEVsZW1lbnQpLmNsYXNzTmFtZS5pbmNsdWRlcyhcIlRNSW5saW5lRm9ybWF0dGVkXCIpIHx8XG4gICAgICAgICAgKGFuY2VzdG9yIGFzIEhUTUxFbGVtZW50KS5jbGFzc05hbWUuaW5jbHVkZXMoXCJUTUJsYW5rTGluZVwiKSlcbiAgICAgIClcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICBhbmNlc3RvciA9IGFuY2VzdG9yLnBhcmVudE5vZGUhO1xuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHB1YmxpYyB0b2dnbGVDb21tYW5kU3RhdGUoY29tbWFuZDogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmxhc3RDb21tYW5kU3RhdGUpIHRoaXMubGFzdENvbW1hbmRTdGF0ZSA9IHRoaXMuZ2V0Q29tbWFuZFN0YXRlKCk7XG4gICAgdGhpcy5zZXRDb21tYW5kU3RhdGUoY29tbWFuZCwgIXRoaXMubGFzdENvbW1hbmRTdGF0ZVtjb21tYW5kXSk7XG4gIH1cblxuICBwcml2YXRlIGZpcmVEcm9wKGRhdGFUcmFuc2ZlcjogRGF0YVRyYW5zZmVyKTogdm9pZCB7XG4gICAgZm9yIChsZXQgbGlzdGVuZXIgb2YgdGhpcy5saXN0ZW5lcnMuZHJvcCkge1xuICAgICAgbGlzdGVuZXIoeyBkYXRhVHJhbnNmZXIgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBmaXJlU2VsZWN0aW9uKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmxpc3RlbmVycy5zZWxlY3Rpb24gJiYgdGhpcy5saXN0ZW5lcnMuc2VsZWN0aW9uLmxlbmd0aCkge1xuICAgICAgbGV0IGZvY3VzID0gdGhpcy5nZXRTZWxlY3Rpb24oZmFsc2UpO1xuICAgICAgbGV0IGFuY2hvciA9IHRoaXMuZ2V0U2VsZWN0aW9uKHRydWUpO1xuICAgICAgbGV0IGNvbW1hbmRTdGF0ZSA9IHRoaXMuZ2V0Q29tbWFuZFN0YXRlKGZvY3VzLCBhbmNob3IpO1xuICAgICAgaWYgKHRoaXMubGFzdENvbW1hbmRTdGF0ZSkge1xuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMubGFzdENvbW1hbmRTdGF0ZSwgY29tbWFuZFN0YXRlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMubGFzdENvbW1hbmRTdGF0ZSA9IE9iamVjdC5hc3NpZ24oe30sIGNvbW1hbmRTdGF0ZSk7XG4gICAgICB9XG4gICAgICBmb3IgKGxldCBsaXN0ZW5lciBvZiB0aGlzLmxpc3RlbmVycy5zZWxlY3Rpb24pIHtcbiAgICAgICAgbGlzdGVuZXIoe1xuICAgICAgICAgIGZvY3VzOiBmb2N1cyEsXG4gICAgICAgICAgYW5jaG9yOiBhbmNob3IhLFxuICAgICAgICAgIGNvbW1hbmRTdGF0ZTogdGhpcy5sYXN0Q29tbWFuZFN0YXRlLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgRWRpdG9yO1xuIl0sIm5hbWVzIjpbInN2ZyIsImJsb2NrcXVvdGUiLCJib2xkIiwiY2xlYXJfZm9ybWF0dGluZyIsImNvZGUiLCJoMSIsImgyIiwiaHIiLCJpbWFnZSIsIml0YWxpYyIsImxpbmsiLCJvbCIsInJlZG8iLCJzdHJpa2V0aHJvdWdoIiwidWwiLCJ1bmRvIiwiaXNNYWNMaWtlIiwidGVzdCIsIm5hdmlnYXRvciIsInBsYXRmb3JtIiwiRGVmYXVsdENvbW1hbmRzIiwibmFtZSIsImFjdGlvbiIsImlubmVySFRNTCIsInRpdGxlIiwiaG90a2V5IiwiaW5zZXJ0TGluayIsImVkaXRvciIsImlzSW5saW5lRm9ybWF0dGluZ0FsbG93ZWQiLCJ3cmFwU2VsZWN0aW9uIiwiZW5hYmxlZCIsImZvY3VzIiwiYW5jaG9yIiwiaW5zZXJ0SW1hZ2UiLCJwYXN0ZSIsImNhblVuZG8iLCJjYW5SZWRvIiwiQ29tbWFuZEJhciIsImNvbnN0cnVjdG9yIiwicHJvcHMiLCJlIiwiY29tbWFuZHMiLCJidXR0b25zIiwic3RhdGUiLCJob3RrZXlzIiwiZWxlbWVudCIsImRvY3VtZW50IiwiZ2V0RWxlbWVudEJ5SWQiLCJib2R5IiwiY3JlYXRlQ29tbWFuZEJhckVsZW1lbnQiLCJhZGRFdmVudExpc3RlbmVyIiwiaGFuZGxlS2V5ZG93biIsInNldEVkaXRvciIsInBhcmVudEVsZW1lbnQiLCJjcmVhdGVFbGVtZW50IiwiY2xhc3NOYW1lIiwiY29tbWFuZCIsImVsIiwiYXBwZW5kQ2hpbGQiLCJjb21tYW5kTmFtZSIsIk9iamVjdCIsImFzc2lnbiIsImtleXMiLCJzcGxpdCIsIm1vZGlmaWVycyIsIm1vZGlmaWVyZXhwbGFuYXRpb24iLCJpIiwibGVuZ3RoIiwicHVzaCIsIm1hdGNoIiwia2V5IiwidG9Mb3dlckNhc2UiLCJjb25jYXQiLCJqb2luIiwiaGFuZGxlQ2xpY2siLCJldmVudCIsInByZXZlbnREZWZhdWx0Iiwic2V0Q29tbWFuZFN0YXRlIiwiaGFuZGxlU2VsZWN0aW9uIiwiY29tbWFuZFN0YXRlIiwidW5kZWZpbmVkIiwib3V0ZXIiLCJtb2RpZmllciIsImdsb2JhbCIsInRoaXMiLCJyZXF1aXJlJCQwIiwicmVxdWlyZSQkMSIsInJlcXVpcmUkJDIiLCJzaGFyZWRTdG9yZU1vZHVsZSIsInJlcXVpcmUkJDMiLCJyZXF1aXJlJCQ0IiwicmVxdWlyZSQkNSIsInJlcXVpcmUkJDYiLCJyZXF1aXJlJCQ3IiwibWFrZUJ1aWx0SW4iLCJtYWtlQnVpbHRJbk1vZHVsZSIsInJlcGxhY2VtZW50cyIsIkFTQ0lJUHVuY3R1YXRpb24iLCJOb3RUcmlnZ2VyQ2hhciIsIlNjaGVtZSIsIkVtYWlsIiwiSFRNTE9wZW5UYWciLCJIVE1MQ2xvc2VUYWciLCJIVE1MVGFnTmFtZSIsIkhUTUxDb21tZW50IiwiSFRNTFBJIiwiSFRNTERlY2xhcmF0aW9uIiwiSFRNTENEQVRBIiwiSFRNTEF0dHJpYnV0ZSIsIkhUTUxBdHRWYWx1ZSIsIktub3duVGFnIiwicHVuY3R1YXRpb25MZWFkaW5nIiwiUmVnRXhwIiwicHVuY3R1YXRpb25UcmFpbGluZyIsImxpbmVHcmFtbWFyIiwiVE1IMSIsInJlZ2V4cCIsInJlcGxhY2VtZW50IiwiVE1IMiIsIlRNSDMiLCJUTUg0IiwiVE1INSIsIlRNSDYiLCJUTUJsb2NrcXVvdGUiLCJUTUNvZGVGZW5jZUJhY2t0aWNrT3BlbiIsIlRNQ29kZUZlbmNlVGlsZGVPcGVuIiwiVE1Db2RlRmVuY2VCYWNrdGlja0Nsb3NlIiwiVE1Db2RlRmVuY2VUaWxkZUNsb3NlIiwiVE1CbGFua0xpbmUiLCJUTVNldGV4dEgxTWFya2VyIiwiVE1TZXRleHRIMk1hcmtlciIsIlRNSFIiLCJUTVVMIiwiVE1PTCIsIlRNSW5kZW50ZWRDb2RlIiwiVE1MaW5rUmVmZXJlbmNlRGVmaW5pdGlvbiIsImxhYmVsUGxhY2Vob2xkZXIiLCJodG1sQmxvY2tHcmFtbWFyIiwic3RhcnQiLCJlbmQiLCJwYXJhSW50ZXJydXB0IiwiaW5saW5lR3JhbW1hciIsImVzY2FwZSIsImF1dG9saW5rIiwiaHRtbCIsImxpbmtPcGVuIiwiaW1hZ2VPcGVuIiwibGlua0xhYmVsIiwiZGVmYXVsdCIsInJlcGxhY2VtZW50UmVnZXhwIiwiaW5saW5lUnVsZXMiLCJydWxlIiwicmUiLCJzb3VyY2UiLCJyZXBsYWNlIiwic3RyaW5nIiwiZmxhZ3MiLCJjcmVhdGVNZXJnZWRJbmxpbmVHcmFtbWFyIiwiY3VzdG9tUnVsZXMiLCJhcmd1bWVudHMiLCJtZXJnZWQiLCJydWxlTmFtZSIsImVudHJpZXMiLCJwcm9jZXNzZWRSdWxlIiwicmVnZXhwU291cmNlIiwiaHRtbGVzY2FwZSIsInR5cGUiLCJzZXQiLCJwcmUiLCJwb3N0IiwidW5zZXQiLCJwcmVQYXR0ZXJuIiwicG9zdFBhdHRlcm4iLCJwYXR0ZXJuIiwiaDMiLCJoNCIsImg1IiwiaDYiLCJFZGl0b3IiLCJ0ZXh0YXJlYSIsImxpbmVzIiwibGluZUVsZW1lbnRzIiwibGluZVR5cGVzIiwibGluZUNhcHR1cmVzIiwibGluZVJlcGxhY2VtZW50cyIsImxpbmtMYWJlbHMiLCJsaW5lRGlydHkiLCJsYXN0Q29tbWFuZFN0YXRlIiwiY3VzdG9tSW5saW5lR3JhbW1hciIsIm1lcmdlZElubGluZUdyYW1tYXIiLCJoYXNGb2N1cyIsImxpc3RlbmVycyIsImNoYW5nZSIsInNlbGVjdGlvbiIsImRyb3AiLCJ1bmRvU3RhY2siLCJyZWRvU3RhY2siLCJpc1Jlc3RvcmluZ0hpc3RvcnkiLCJtYXhIaXN0b3J5IiwiZ2V0RWxlbWVudHNCeVRhZ05hbWUiLCJ0YWdOYW1lIiwicGFyZW50Tm9kZSIsInN0eWxlIiwiZGlzcGxheSIsImNyZWF0ZUVkaXRvckVsZW1lbnQiLCJzZXRDb250ZW50IiwiY29udGVudCIsInZhbHVlIiwiaGFuZGxlVW5kb1JlZG9LZXkiLCJwdXNoSGlzdG9yeSIsInB1c2hDdXJyZW50U3RhdGUiLCJnZXRDb250ZW50IiwiZ2V0U2VsZWN0aW9uIiwic2hpZnQiLCJjdXJyZW50IiwicG9wIiwicHJldiIsInNldFNlbGVjdGlvbiIsIm5leHQiLCJpc01hYyIsImN0cmwiLCJtZXRhS2V5IiwiY3RybEtleSIsImFsdEtleSIsInNoaWZ0S2V5IiwiY2xhc3NMaXN0IiwiYWRkIiwiY29udGVudEVkaXRhYmxlIiwid2hpdGVTcGFjZSIsIndlYmtpdFVzZXJNb2RpZnkiLCJuZXh0U2libGluZyIsImluc2VydEJlZm9yZSIsImhhbmRsZUlucHV0RXZlbnQiLCJoYW5kbGVTZWxlY3Rpb25DaGFuZ2VFdmVudCIsImhhbmRsZVBhc3RlIiwiaGFuZGxlRHJvcCIsImNoaWxkTm9kZXMiLCJmaXJzdENoaWxkIiwicmVtb3ZlQ2hpbGQiLCJsaW5lTnVtIiwibGUiLCJBcnJheSIsInVwZGF0ZUZvcm1hdHRpbmciLCJmaXJlQ2hhbmdlIiwidXBkYXRlTGluZVR5cGVzIiwidXBkYXRlTGlua0xhYmVscyIsImFwcGx5TGluZVR5cGVzIiwibCIsImNhcHR1cmUiLCJzdHIiLCJwMSIsInAyIiwicGFyc2VJbnQiLCJwcm9jZXNzSW5saW5lU3R5bGVzIiwiY29udGVudEhUTUwiLCJyZW1vdmVBdHRyaWJ1dGUiLCJkYXRhc2V0IiwidG9TdHJpbmciLCJjb2RlQmxvY2tUeXBlIiwiY29kZUJsb2NrU2VxTGVuZ3RoIiwiaHRtbEJsb2NrIiwibGluZVR5cGUiLCJsaW5lQ2FwdHVyZSIsImxpbmVSZXBsYWNlbWVudCIsImV4ZWMiLCJncm91cHMiLCJodG1sQmxvY2tUeXBlIiwiaGVhZGluZ0xpbmUiLCJoZWFkaW5nTGluZVR5cGUiLCJnZXRBbmNob3IiLCJ3aW5kb3ciLCJzdGFydE5vZGUiLCJhbmNob3JOb2RlIiwiZm9jdXNOb2RlIiwib2Zmc2V0IiwiYW5jaG9yT2Zmc2V0IiwiZm9jdXNPZmZzZXQiLCJyb3ciLCJjb2wiLCJjb21wdXRlQ29sdW1uIiwibm9kZSIsInByZXZpb3VzU2libGluZyIsImN1cnJlbnRMaW5lTnVtRGF0YSIsIl9hIiwicHJldmlvdXNMaW5lTnVtRGF0YSIsIl9iIiwiY3VycmVudExpbmVOdW0iLCJwcmV2aW91c0xpbmVOdW0iLCJjb21wdXRlTm9kZUFuZE9mZnNldCIsIndpbmRvd1NlbGVjdGlvbiIsInNldEJhc2VBbmRFeHRlbnQiLCJ0ZXh0IiwiYmVnaW5uaW5nIiwiaW5zZXJ0ZWRMaW5lcyIsImxpbmVCZWZvcmUiLCJzdWJzdHIiLCJsaW5lRW5kIiwiZW5kQ29sUG9zIiwic3BsaWNlTGluZXMiLCJzdGFydENvbCIsImVuZENvbCIsImxlZnQiLCJtaWQiLCJyaWdodCIsImxpc3RlbmVyIiwibGluZXNEaXJ0eSIsImlucHV0RXZlbnQiLCJpbnB1dFR5cGUiLCJjbGVhckRpcnR5RmxhZyIsInByb2Nlc3NOZXdQYXJhZ3JhcGgiLCJmaXhOb2RlSGllcmFyY2h5IiwidXBkYXRlTGluZUNvbnRlbnRzQW5kRm9ybWF0dGluZyIsIl9lIiwiZmlyZVNlbGVjdGlvbiIsImNsaXBib2FyZERhdGEiLCJnZXREYXRhIiwiZmlyZURyb3AiLCJkYXRhVHJhbnNmZXIiLCJvcmlnaW5hbFN0cmluZyIsInByb2Nlc3NlZCIsInN0YWNrIiwiY2FwIiwicG90ZW50aWFsTGluayIsInBvdGVudGlhbEltYWdlIiwicmVzdWx0IiwicGFyc2VMaW5rT3JJbWFnZSIsIm91dHB1dCIsImNoYXJDb3VudCIsImRlbGltQ291bnQiLCJkZWxpbVN0cmluZyIsImN1cnJlbnREZWxpbWl0ZXIiLCJwcmVjZWRpbmciLCJmb2xsb3dpbmciLCJwdW5jdHVhdGlvbkZvbGxvd3MiLCJwdW5jdHVhdGlvblByZWNlZGVzIiwid2hpdGVzcGFjZUZvbGxvd3MiLCJ3aGl0ZXNwYWNlUHJlY2VkZXMiLCJjYW5PcGVuIiwiY2FuQ2xvc2UiLCJzdGFja1BvaW50ZXIiLCJkZWxpbWl0ZXIiLCJlbnRyeSIsImNvdW50IiwiY29uc3VtZWQiLCJub2RlVHlwZSIsIk5vZGUiLCJURVhUX05PREUiLCJ0ZXh0Q29udGVudCIsImJpbmRSaWdodCIsImNoaWxkcmVuQ29tcGxldGUiLCJydiIsIm5vZGVWYWx1ZSIsInVwZGF0ZUxpbmVDb250ZW50cyIsImxpbmVEZWx0YSIsImNoaWxkRWxlbWVudENvdW50IiwiZmlyc3RDaGFuZ2VkTGluZSIsImxhc3RDaGFuZ2VkTGluZSIsImxpbmVzVG9EZWxldGUiLCJsaW5lc1RvQWRkIiwibGluZSIsImN0Iiwic2VsIiwiY29udGludWFibGVUeXBlIiwiY2hlY2tMaW5lIiwic3RhcnRMaW5lIiwibGluZXNUb0luc2VydCIsImFkanVzdExpbmVFbGVtZW50cyIsImluc2VydGVkQmxhbmsiLCJpbnNlcnRlZERpcnR5Iiwic3BsaWNlIiwib3JpZ2luYWxDaGlsZHJlbiIsImZyb20iLCJyZXBsYWNlQ2hpbGQiLCJjaGlsZCIsInBhcmVudCIsIl9sZW4iLCJuZXdDaGlsZHJlbiIsIl9rZXkiLCJmb3JFYWNoIiwibmV3Q2hpbGQiLCJFTEVNRU5UX05PREUiLCJkaXZXcmFwcGVyIiwiZ3JhbmRDaGlsZHJlbiIsInNvbWUiLCJncmFuZENoaWxkIiwiaXNJbWFnZSIsInRleHRPZmZzZXQiLCJvcGVuZXIiLCJjdXJyZW50T2Zmc2V0IiwiYnJhY2tldExldmVsIiwibGlua1RleHQiLCJsaW5rUmVmIiwibGlua0RldGFpbHMiLCJ0ZXh0T3V0ZXIiLCJuZXh0Q2hhciIsInRyaW0iLCJwYXJlbnRoZXNpc0xldmVsIiwiaW5saW5lT3V0ZXIiLCJ2YWxpZCIsImxhYmVsIiwibGFiZWxDbGFzcyIsImNvbXB1dGVDb21tb25BbmNlc3RvciIsIm5vZGUxIiwibm9kZTIiLCJhbmNlc3RyeSIsInVuc2hpZnQiLCJhbmNlc3RyeTEiLCJhbmNlc3RyeTIiLCJjb21wdXRlRW5jbG9zaW5nTWFya3VwTm9kZSIsImluY2x1ZGVzIiwiZ2V0Q29tbWFuZFN0YXRlIiwiY21kIiwibWFya3VwTm9kZSIsImxlbiIsImxlYWRpbmciLCJ0cmFpbGluZyIsImlzQ29sbGFwc2VkIiwiYW5jZXN0b3IiLCJ0b2dnbGVDb21tYW5kU3RhdGUiXSwibWFwcGluZ3MiOiI7Ozs7OztJQUFBLE1BQU1BLEdBQUcsR0FBMkI7SUFDbENDLEVBQUFBLFVBQVUsRUFBRSxDQUEyUix5UkFBQSxDQUFBO0lBQ3ZTQyxFQUFBQSxJQUFJLEVBQUUsQ0FBMFksd1lBQUEsQ0FBQTtJQUNoWkMsRUFDQUMsSUFBSSxFQUFFLENBQStVLDZVQUFBLENBQUE7SUFDclZDLEVBQUFBLEVBQUUsRUFBRSxDQUFnSyw4SkFBQSxDQUFBO0lBQ3BLQyxFQUFBQSxFQUFFLEVBQUUsQ0FBa0ssZ0tBQUEsQ0FBQTtJQUN0S0MsRUFBQUEsRUFBRSxFQUFFLENBQWlJLCtIQUFBLENBQUE7SUFDcklDLEVBQUFBLEtBQUssRUFBRSxDQUErSCw2SEFBQSxDQUFBO0lBQ3RJQyxFQUFBQSxNQUFNLEVBQUUsQ0FBaUgsK0dBQUEsQ0FBQTtJQUN6SEMsRUFBQUEsSUFBSSxFQUFFLENBQTJ1Qyx5dUNBQUEsQ0FBQTtJQUNqdkNDLEVBQUFBLEVBQUUsRUFBRSxDQUFxdEIsbXRCQUFBLENBQUE7SUFDenRCQyxFQUFBQSxJQUFJLEVBQUUsQ0FBc3NCLG9zQkFBQSxDQUFBO0lBQzVzQkMsRUFBQUEsYUFBYSxFQUFFLENBQTRYLDBYQUFBLENBQUE7SUFDM1lDLEVBQUFBLEVBQUUsRUFBRSxDQUE2USwyUUFBQSxDQUFBO0lBQ2pSQyxFQUFBQSxJQUFJLEVBQUUsQ0FBQTtBQUNQO0tBQ0E7O0lDZEQsTUFBTUMsU0FBUyxHQUFHLHlCQUF5QixDQUFDQyxJQUFJLENBQzlD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YlEsUUFBUSxHQUFHQSxRQUFRLENBQUN4TixVQUFXO0lBQ2pDO0lBRUEsSUFBQSxPQUFPLEtBQUs7SUFDZDtNQUVPeU4sa0JBQWtCQSxDQUFDMVcsT0FBZSxFQUFBO0lBQ3ZDLElBQUEsSUFBSSxDQUFDLElBQUksQ0FBQ21JLGdCQUFnQixFQUFFLElBQUksQ0FBQ0EsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDK04sZUFBZSxFQUFFO0lBQzFFLElBQUEsSUFBSSxDQUFDN1UsZUFBZSxDQUFDckIsT0FBTyxFQUFFLENBQUMsSUFBSSxDQUFDbUksZ0JBQWdCLENBQUNuSSxPQUFPLENBQUMsQ0FBQztJQUNoRTtNQUVRb1EsUUFBUUEsQ0FBQ0MsWUFBMEIsRUFBQTtRQUN6QyxLQUFLLElBQUliLFFBQVEsSUFBSSxJQUFJLENBQUNqSCxTQUFTLENBQUNHLElBQUksRUFBRTtJQUN4QzhHLE1BQUFBLFFBQVEsQ0FBQztJQUFFYSxRQUFBQTtJQUFZLE9BQUUsQ0FBQztJQUM1QjtJQUNGO0lBRVFKLEVBQUFBLGFBQWFBLEdBQUE7SUFDbkIsSUFBQSxJQUFJLElBQUksQ0FBQzFILFNBQVMsQ0FBQ0UsU0FBUyxJQUFJLElBQUksQ0FBQ0YsU0FBUyxDQUFDRSxTQUFTLENBQUM5SCxNQUFNLEVBQUU7SUFDL0QsTUFBQSxJQUFJcEMsS0FBSyxHQUFHLElBQUksQ0FBQ3FMLFlBQVksQ0FBQyxLQUFLLENBQUM7SUFDcEMsTUFBQSxJQUFJcEwsTUFBTSxHQUFHLElBQUksQ0FBQ29MLFlBQVksQ0FBQyxJQUFJLENBQUM7VUFDcEMsSUFBSXJJLFlBQVksR0FBRyxJQUFJLENBQUMyVSxlQUFlLENBQUMzWCxLQUFLLEVBQUVDLE1BQU0sQ0FBQztVQUN0RCxJQUFJLElBQUksQ0FBQzJKLGdCQUFnQixFQUFFO1lBQ3pCL0gsTUFBTSxDQUFDQyxNQUFNLENBQUMsSUFBSSxDQUFDOEgsZ0JBQWdCLEVBQUU1RyxZQUFZLENBQUM7SUFDcEQsT0FBQyxNQUFNO1lBQ0wsSUFBSSxDQUFDNEcsZ0JBQWdCLEdBQUcvSCxNQUFNLENBQUNDLE1BQU0sQ0FBQyxFQUFFLEVBQUVrQixZQUFZLENBQUM7SUFDekQ7VUFDQSxLQUFLLElBQUlpTyxRQUFRLElBQUksSUFBSSxDQUFDakgsU0FBUyxDQUFDRSxTQUFTLEVBQUU7SUFDN0MrRyxRQUFBQSxRQUFRLENBQUM7SUFDUGpSLFVBQUFBLEtBQUssRUFBRUEsS0FBTTtJQUNiQyxVQUFBQSxNQUFNLEVBQUVBLE1BQU87Y0FDZitDLFlBQVksRUFBRSxJQUFJLENBQUM0RztJQUNwQixTQUFBLENBQUM7SUFDSjtJQUNGO0lBQ0Y7SUFDRDs7Ozs7Ozs7OyIsInhfZ29vZ2xlX2lnbm9yZUxpc3QiOlsyLDMsNCw1LDYsNyw4LDksMTAsMTEsMTIsMTMsMTQsMTUsMTYsMTcsMTgsMTksMjAsMjEsMjIsMjMsMjQsMjUsMjYsMjcsMjgsMjksMzAsMzEsMzIsMzMsMzQsMzUsMzYsMzcsMzgsMzksNDAsNDEsNDIsNDMsNDQsNDUsNDYsNDcsNDgsNDldfQ=={"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\">&lt;</span><span class=\"TMAutolink\">$1</span><span class=\"TMMark TMMark_TMAutolink\">&gt;</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, '&amp;')\n .replace(/</g, '&lt;')\n .replace(/>/g, '&gt;');\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 private hasFocus: boolean = true;\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.hasFocus = true;\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 if (this.hasFocus) { this.handleSelectionChangeEvent(e); }\n }\n );\n this.e.addEventListener(\"blur\", () => this.hasFocus = false );\n this.e.addEventListener(\"focus\", () => this.hasFocus = true );\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 the node doesn't have a previous sibling, it must be the first line\n if (node.previousSibling) {\n const currentLineNumData = (node as HTMLElement).dataset?.lineNum;\n const previousLineNumData = (node.previousSibling as HTMLElement).dataset?.lineNum;\n\n if (currentLineNumData && previousLineNumData) {\n const currentLineNum = parseInt(currentLineNumData);\n const previousLineNum = parseInt(previousLineNumData);\n if (currentLineNum === previousLineNum + 1) {\n row = currentLineNum;\n } else {\n // If the current line is NOT the previous line + 1, then either \n // the current line got split in two or merged with the previous line\n // Either way, we need to recalculate the row number\n while (node.previousSibling) {\n row++;\n node = node.previousSibling;\n }\n }\n }\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;\n"],"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","hasFocus","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","currentLineNumData","_a","previousLineNumData","_b","currentLineNum","previousLineNum","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]}
3252
+ //# 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+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIERyb3BFdmVudCB7XG4gIGRhdGFUcmFuc2ZlcjogRGF0YVRyYW5zZmVyO1xufVxuXG50eXBlIEV2ZW50VHlwZSA9ICdjaGFuZ2UnIHwgJ3NlbGVjdGlvbicgfCAnZHJvcCc7XG50eXBlIEV2ZW50SGFuZGxlcjxUPiA9IChldmVudDogVCkgPT4gdm9pZDtcblxuZXhwb3J0IGNsYXNzIEVkaXRvciB7XG4gIHB1YmxpYyBlOiBIVE1MRGl2RWxlbWVudCB8IG51bGwgPSBudWxsO1xuICBwdWJsaWMgdGV4dGFyZWE6IEhUTUxUZXh0QXJlYUVsZW1lbnQgfCBudWxsID0gbnVsbDtcbiAgcHVibGljIGxpbmVzOiBzdHJpbmdbXSA9IFtdO1xuICBwdWJsaWMgbGluZUVsZW1lbnRzOiBOb2RlTGlzdE9mPENoaWxkTm9kZT4gfCBIVE1MQ29sbGVjdGlvbiB8IENoaWxkTm9kZVtdID0gW107XG4gIHB1YmxpYyBsaW5lVHlwZXM6IHN0cmluZ1tdID0gW107XG4gIHB1YmxpYyBsaW5lQ2FwdHVyZXM6IFJlZ0V4cEV4ZWNBcnJheVtdID0gW107XG4gIHB1YmxpYyBsaW5lUmVwbGFjZW1lbnRzOiBzdHJpbmdbXSA9IFtdO1xuICBwdWJsaWMgbGlua0xhYmVsczogc3RyaW5nW10gPSBbXTtcbiAgcHVibGljIGxpbmVEaXJ0eTogYm9vbGVhbltdID0gW107XG4gIHB1YmxpYyBsYXN0Q29tbWFuZFN0YXRlOiBSZWNvcmQ8c3RyaW5nLCBib29sZWFuIHwgbnVsbD4gfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBjdXN0b21JbmxpbmVHcmFtbWFyOiBSZWNvcmQ8c3RyaW5nLCBHcmFtbWFyUnVsZT4gPSB7fTtcbiAgcHJpdmF0ZSBtZXJnZWRJbmxpbmVHcmFtbWFyOiBSZWNvcmQ8c3RyaW5nLCBHcmFtbWFyUnVsZT4gPSBpbmxpbmVHcmFtbWFyO1xuICBwcml2YXRlIGhhc0ZvY3VzOiBib29sZWFuID0gdHJ1ZTtcblxuICBwdWJsaWMgbGlzdGVuZXJzOiB7XG4gICAgY2hhbmdlOiBFdmVudEhhbmRsZXI8Q2hhbmdlRXZlbnQ+W107XG4gICAgc2VsZWN0aW9uOiBFdmVudEhhbmRsZXI8U2VsZWN0aW9uRXZlbnQ+W107XG4gICAgZHJvcDogRXZlbnRIYW5kbGVyPERyb3BFdmVudD5bXTtcbiAgfSA9IHtcbiAgICBjaGFuZ2U6IFtdLFxuICAgIHNlbGVjdGlvbjogW10sXG4gICAgZHJvcDogW10sXG4gIH07XG5cbiAgcHJpdmF0ZSB1bmRvU3RhY2s6IEhpc3RvcnlTdGF0ZVtdID0gW107XG4gIHByaXZhdGUgcmVkb1N0YWNrOiBIaXN0b3J5U3RhdGVbXSA9IFtdO1xuICBwcml2YXRlIGlzUmVzdG9yaW5nSGlzdG9yeTogYm9vbGVhbiA9IGZhbHNlO1xuICBwcml2YXRlIG1heEhpc3Rvcnk6IG51bWJlciA9IDEwMDtcblxuICBjb25zdHJ1Y3Rvcihwcm9wczogRWRpdG9yUHJvcHMgPSB7fSkge1xuICAgIHRoaXMuZSA9IG51bGw7XG4gICAgdGhpcy50ZXh0YXJlYSA9IG51bGw7XG4gICAgdGhpcy5saW5lcyA9IFtdO1xuICAgIHRoaXMubGluZUVsZW1lbnRzID0gW10gYXMgQ2hpbGROb2RlW107XG4gICAgdGhpcy5saW5lVHlwZXMgPSBbXTtcbiAgICB0aGlzLmxpbmVDYXB0dXJlcyA9IFtdO1xuICAgIHRoaXMubGluZVJlcGxhY2VtZW50cyA9IFtdO1xuICAgIHRoaXMubGlua0xhYmVscyA9IFtdO1xuICAgIHRoaXMubGluZURpcnR5ID0gW107XG4gICAgdGhpcy5sYXN0Q29tbWFuZFN0YXRlID0gbnVsbDtcbiAgICB0aGlzLmhhc0ZvY3VzID0gdHJ1ZTtcbiAgICB0aGlzLmN1c3RvbUlubGluZUdyYW1tYXIgPSBwcm9wcy5jdXN0b21JbmxpbmVHcmFtbWFyIHx8IHt9O1xuICAgIHRoaXMubWVyZ2VkSW5saW5lR3JhbW1hciA9IGNyZWF0ZU1lcmdlZElubGluZUdyYW1tYXIodGhpcy5jdXN0b21JbmxpbmVHcmFtbWFyKTtcblxuICAgIHRoaXMubGlzdGVuZXJzID0ge1xuICAgICAgY2hhbmdlOiBbXSxcbiAgICAgIHNlbGVjdGlvbjogW10sXG4gICAgICBkcm9wOiBbXSxcbiAgICB9O1xuXG4gICAgbGV0IGVsZW1lbnQ6IEhUTUxFbGVtZW50IHwgbnVsbCA9IG51bGw7XG4gICAgaWYgKHR5cGVvZiBwcm9wcy5lbGVtZW50ID09PSAnc3RyaW5nJykge1xuICAgICAgZWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHByb3BzLmVsZW1lbnQpO1xuICAgIH0gZWxzZSBpZiAocHJvcHMuZWxlbWVudCkge1xuICAgICAgZWxlbWVudCA9IHByb3BzLmVsZW1lbnQ7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBwcm9wcy50ZXh0YXJlYSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHRoaXMudGV4dGFyZWEgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChwcm9wcy50ZXh0YXJlYSkgYXMgSFRNTFRleHRBcmVhRWxlbWVudDtcbiAgICB9IGVsc2UgaWYgKHByb3BzLnRleHRhcmVhKSB7XG4gICAgICB0aGlzLnRleHRhcmVhID0gcHJvcHMudGV4dGFyZWE7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMudGV4dGFyZWEpIHtcbiAgICAgIGlmICghZWxlbWVudCkgZWxlbWVudCA9IHRoaXMudGV4dGFyZWE7XG4gICAgfVxuXG4gICAgaWYgKCFlbGVtZW50KSB7XG4gICAgICBlbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJib2R5XCIpWzBdO1xuICAgIH1cbiAgICBpZiAoZWxlbWVudCAmJiBlbGVtZW50LnRhZ05hbWUgPT09IFwiVEVYVEFSRUFcIikge1xuICAgICAgdGhpcy50ZXh0YXJlYSA9IGVsZW1lbnQgYXMgSFRNTFRleHRBcmVhRWxlbWVudDtcbiAgICAgIGVsZW1lbnQgPSB0aGlzLnRleHRhcmVhLnBhcmVudE5vZGUgYXMgSFRNTEVsZW1lbnQ7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMudGV4dGFyZWEpIHtcbiAgICAgIHRoaXMudGV4dGFyZWEuc3R5bGUuZGlzcGxheSA9IFwibm9uZVwiO1xuICAgIH1cblxuICAgIHRoaXMudW5kb1N0YWNrID0gW107XG4gICAgdGhpcy5yZWRvU3RhY2sgPSBbXTtcbiAgICB0aGlzLmlzUmVzdG9yaW5nSGlzdG9yeSA9IGZhbHNlO1xuICAgIHRoaXMubWF4SGlzdG9yeSA9IDEwMDtcblxuICAgIHRoaXMuY3JlYXRlRWRpdG9yRWxlbWVudChlbGVtZW50LCBwcm9wcyk7XG4gICAgdGhpcy5zZXRDb250ZW50KFxuICAgICAgdHlwZW9mIHByb3BzLmNvbnRlbnQgPT09IFwic3RyaW5nXCJcbiAgICAgICAgPyBwcm9wcy5jb250ZW50XG4gICAgICAgIDogdGhpcy50ZXh0YXJlYVxuICAgICAgICA/IHRoaXMudGV4dGFyZWEudmFsdWVcbiAgICAgICAgOiBcIiMgSGVsbG8gVGlueU1ERSFcXG5FZGl0ICoqaGVyZSoqXCJcbiAgICApO1xuICAgIFxuICAgIHRoaXMuZSEuYWRkRXZlbnRMaXN0ZW5lcihcImtleWRvd25cIiwgKGUpID0+IHRoaXMuaGFuZGxlVW5kb1JlZG9LZXkoZSkpO1xuICB9XG5cbiAgZ2V0IGNhblVuZG8oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMudW5kb1N0YWNrLmxlbmd0aCA+PSAyO1xuICB9XG5cbiAgZ2V0IGNhblJlZG8oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMucmVkb1N0YWNrLmxlbmd0aCA+IDA7XG4gIH1cblxuICBwcml2YXRlIHB1c2hIaXN0b3J5KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmlzUmVzdG9yaW5nSGlzdG9yeSkgcmV0dXJuO1xuICAgIHRoaXMucHVzaEN1cnJlbnRTdGF0ZSgpO1xuICAgIHRoaXMucmVkb1N0YWNrID0gW107XG4gIH1cblxuICBwcml2YXRlIHB1c2hDdXJyZW50U3RhdGUoKTogdm9pZCB7XG4gICAgdGhpcy51bmRvU3RhY2sucHVzaCh7XG4gICAgICBjb250ZW50OiB0aGlzLmdldENvbnRlbnQoKSxcbiAgICAgIHNlbGVjdGlvbjogdGhpcy5nZXRTZWxlY3Rpb24oKSxcbiAgICAgIGFuY2hvcjogdGhpcy5nZXRTZWxlY3Rpb24odHJ1ZSksXG4gICAgfSk7XG4gICAgaWYgKHRoaXMudW5kb1N0YWNrLmxlbmd0aCA+IHRoaXMubWF4SGlzdG9yeSkgdGhpcy51bmRvU3RhY2suc2hpZnQoKTtcbiAgfVxuXG4gIHB1YmxpYyB1bmRvKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnVuZG9TdGFjay5sZW5ndGggPCAyKSByZXR1cm47XG4gICAgdGhpcy5pc1Jlc3RvcmluZ0hpc3RvcnkgPSB0cnVlO1xuICAgIHRoaXMucHVzaEN1cnJlbnRTdGF0ZSgpO1xuICAgIGNvbnN0IGN1cnJlbnQgPSB0aGlzLnVuZG9TdGFjay5wb3AoKSE7XG4gICAgdGhpcy5yZWRvU3RhY2sucHVzaChjdXJyZW50KTtcbiAgICBjb25zdCBwcmV2ID0gdGhpcy51bmRvU3RhY2tbdGhpcy51bmRvU3RhY2subGVuZ3RoIC0gMV07XG4gICAgdGhpcy5zZXRDb250ZW50KHByZXYuY29udGVudCk7XG4gICAgaWYgKHByZXYuc2VsZWN0aW9uKSB0aGlzLnNldFNlbGVjdGlvbihwcmV2LnNlbGVjdGlvbiwgcHJldi5hbmNob3IpO1xuICAgIHRoaXMudW5kb1N0YWNrLnBvcCgpO1xuICAgIHRoaXMuaXNSZXN0b3JpbmdIaXN0b3J5ID0gZmFsc2U7XG4gIH1cblxuICBwdWJsaWMgcmVkbygpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMucmVkb1N0YWNrLmxlbmd0aCkgcmV0dXJuO1xuICAgIHRoaXMuaXNSZXN0b3JpbmdIaXN0b3J5ID0gdHJ1ZTtcbiAgICB0aGlzLnB1c2hDdXJyZW50U3RhdGUoKTtcbiAgICBjb25zdCBuZXh0ID0gdGhpcy5yZWRvU3RhY2sucG9wKCkhO1xuICAgIHRoaXMuc2V0Q29udGVudChuZXh0LmNvbnRlbnQpO1xuICAgIGlmIChuZXh0LnNlbGVjdGlvbikgdGhpcy5zZXRTZWxlY3Rpb24obmV4dC5zZWxlY3Rpb24sIG5leHQuYW5jaG9yKTtcbiAgICB0aGlzLmlzUmVzdG9yaW5nSGlzdG9yeSA9IGZhbHNlO1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVVbmRvUmVkb0tleShlOiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgY29uc3QgaXNNYWMgPSAvTWFjfGlQb2R8aVBob25lfGlQYWQvLnRlc3QobmF2aWdhdG9yLnBsYXRmb3JtKTtcbiAgICBjb25zdCBjdHJsID0gaXNNYWMgPyBlLm1ldGFLZXkgOiBlLmN0cmxLZXk7XG4gICAgaWYgKGN0cmwgJiYgIWUuYWx0S2V5KSB7XG4gICAgICBpZiAoZS5rZXkgPT09IFwielwiIHx8IGUua2V5ID09PSBcIlpcIikge1xuICAgICAgICBpZiAoZS5zaGlmdEtleSkge1xuICAgICAgICAgIHRoaXMucmVkbygpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMudW5kbygpO1xuICAgICAgICB9XG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgIH0gZWxzZSBpZiAoZS5rZXkgPT09IFwieVwiIHx8IGUua2V5ID09PSBcIllcIikge1xuICAgICAgICB0aGlzLnJlZG8oKTtcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlRWRpdG9yRWxlbWVudChlbGVtZW50OiBIVE1MRWxlbWVudCwgcHJvcHM6IEVkaXRvclByb3BzKTogdm9pZCB7XG4gICAgaWYgKHByb3BzICYmIHByb3BzLmVkaXRvciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAodHlwZW9mIHByb3BzLmVkaXRvciA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgdGhpcy5lID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQocHJvcHMuZWRpdG9yKSBhcyBIVE1MRGl2RWxlbWVudDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuZSA9IHByb3BzLmVkaXRvciBhcyBIVE1MRGl2RWxlbWVudDtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5lID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICB9XG5cbiAgICB0aGlzLmUuY2xhc3NMaXN0LmFkZChcIlRpbnlNREVcIik7XG4gICAgdGhpcy5lLmNvbnRlbnRFZGl0YWJsZSA9IFwidHJ1ZVwiO1xuICAgIHRoaXMuZS5zdHlsZS53aGl0ZVNwYWNlID0gXCJwcmUtd3JhcFwiO1xuICAgICh0aGlzLmUuc3R5bGUgYXMgYW55KS53ZWJraXRVc2VyTW9kaWZ5ID0gXCJyZWFkLXdyaXRlLXBsYWludGV4dC1vbmx5XCI7XG5cbiAgICBpZiAocHJvcHMuZWRpdG9yID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmIChcbiAgICAgICAgdGhpcy50ZXh0YXJlYSAmJlxuICAgICAgICB0aGlzLnRleHRhcmVhLnBhcmVudE5vZGUgPT09IGVsZW1lbnQgJiZcbiAgICAgICAgdGhpcy50ZXh0YXJlYS5uZXh0U2libGluZ1xuICAgICAgKSB7XG4gICAgICAgIGVsZW1lbnQuaW5zZXJ0QmVmb3JlKHRoaXMuZSwgdGhpcy50ZXh0YXJlYS5uZXh0U2libGluZyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBlbGVtZW50LmFwcGVuZENoaWxkKHRoaXMuZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5lLmFkZEV2ZW50TGlzdGVuZXIoXCJpbnB1dFwiLCAoZSkgPT4gdGhpcy5oYW5kbGVJbnB1dEV2ZW50KGUpKTtcbiAgICB0aGlzLmUuYWRkRXZlbnRMaXN0ZW5lcihcImJlZm9yZWlucHV0XCIsIChlKSA9PiB0aGlzLmhhbmRsZUJlZm9yZUlucHV0RXZlbnQoZSkpO1xuICAgIHRoaXMuZS5hZGRFdmVudExpc3RlbmVyKFwiY29tcG9zaXRpb25lbmRcIiwgKGUpID0+IHRoaXMuaGFuZGxlSW5wdXRFdmVudChlKSk7XG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcInNlbGVjdGlvbmNoYW5nZVwiLCAoZSkgPT4ge1xuICAgICAgaWYgKHRoaXMuaGFzRm9jdXMpIHsgdGhpcy5oYW5kbGVTZWxlY3Rpb25DaGFuZ2VFdmVudChlKTsgfVxuICAgICAgfVxuICAgICk7XG4gICAgdGhpcy5lLmFkZEV2ZW50TGlzdGVuZXIoXCJibHVyXCIsICgpID0+IHRoaXMuaGFzRm9jdXMgPSBmYWxzZSApO1xuICAgIHRoaXMuZS5hZGRFdmVudExpc3RlbmVyKFwiZm9jdXNcIiwgKCkgPT4gdGhpcy5oYXNGb2N1cyA9IHRydWUgKTtcbiAgICB0aGlzLmUuYWRkRXZlbnRMaXN0ZW5lcihcInBhc3RlXCIsIChlKSA9PiB0aGlzLmhhbmRsZVBhc3RlKGUpKTtcbiAgICB0aGlzLmUuYWRkRXZlbnRMaXN0ZW5lcihcImRyb3BcIiwgKGUpID0+IHRoaXMuaGFuZGxlRHJvcChlKSk7XG4gICAgdGhpcy5saW5lRWxlbWVudHMgPSB0aGlzLmUuY2hpbGROb2RlcztcbiAgfVxuXG4gIHB1YmxpYyBzZXRDb250ZW50KGNvbnRlbnQ6IHN0cmluZyk6IHZvaWQge1xuICAgIHdoaWxlICh0aGlzLmUhLmZpcnN0Q2hpbGQpIHtcbiAgICAgIHRoaXMuZSEucmVtb3ZlQ2hpbGQodGhpcy5lIS5maXJzdENoaWxkKTtcbiAgICB9XG4gICAgdGhpcy5saW5lcyA9IGNvbnRlbnQuc3BsaXQoLyg/OlxcclxcbnxcXHJ8XFxuKS8pO1xuICAgIHRoaXMubGluZURpcnR5ID0gW107XG4gICAgZm9yIChsZXQgbGluZU51bSA9IDA7IGxpbmVOdW0gPCB0aGlzLmxpbmVzLmxlbmd0aDsgbGluZU51bSsrKSB7XG4gICAgICBsZXQgbGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgICAgdGhpcy5lIS5hcHBlbmRDaGlsZChsZSk7XG4gICAgICB0aGlzLmxpbmVEaXJ0eS5wdXNoKHRydWUpO1xuICAgIH1cbiAgICB0aGlzLmxpbmVUeXBlcyA9IG5ldyBBcnJheSh0aGlzLmxpbmVzLmxlbmd0aCk7XG4gICAgdGhpcy51cGRhdGVGb3JtYXR0aW5nKCk7XG4gICAgdGhpcy5maXJlQ2hhbmdlKCk7XG4gICAgaWYgKCF0aGlzLmlzUmVzdG9yaW5nSGlzdG9yeSkgdGhpcy5wdXNoSGlzdG9yeSgpO1xuICB9XG5cbiAgcHVibGljIGdldENvbnRlbnQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5saW5lcy5qb2luKFwiXFxuXCIpO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVGb3JtYXR0aW5nKCk6IHZvaWQge1xuICAgIHRoaXMudXBkYXRlTGluZVR5cGVzKCk7XG4gICAgdGhpcy51cGRhdGVMaW5rTGFiZWxzKCk7XG4gICAgdGhpcy5hcHBseUxpbmVUeXBlcygpO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVMaW5rTGFiZWxzKCk6IHZvaWQge1xuICAgIHRoaXMubGlua0xhYmVscyA9IFtdO1xuICAgIGZvciAobGV0IGwgPSAwOyBsIDwgdGhpcy5saW5lcy5sZW5ndGg7IGwrKykge1xuICAgICAgaWYgKHRoaXMubGluZVR5cGVzW2xdID09PSBcIlRNTGlua1JlZmVyZW5jZURlZmluaXRpb25cIikge1xuICAgICAgICB0aGlzLmxpbmtMYWJlbHMucHVzaChcbiAgICAgICAgICB0aGlzLmxpbmVDYXB0dXJlc1tsXVtcbiAgICAgICAgICAgIGxpbmVHcmFtbWFyLlRNTGlua1JlZmVyZW5jZURlZmluaXRpb24ubGFiZWxQbGFjZWhvbGRlciFcbiAgICAgICAgICBdXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSByZXBsYWNlKHJlcGxhY2VtZW50OiBzdHJpbmcsIGNhcHR1cmU6IFJlZ0V4cEV4ZWNBcnJheSk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHJlcGxhY2VtZW50LnJlcGxhY2UoLyhcXCR7MSwyfSkoWzAtOV0pL2csIChzdHIsIHAxLCBwMikgPT4ge1xuICAgICAgaWYgKHAxID09PSBcIiRcIikgcmV0dXJuIGh0bWxlc2NhcGUoY2FwdHVyZVtwYXJzZUludChwMildKTtcbiAgICAgIGVsc2VcbiAgICAgICAgcmV0dXJuIGA8c3BhbiBjbGFzcz1cIlRNSW5saW5lRm9ybWF0dGVkXCI+JHt0aGlzLnByb2Nlc3NJbmxpbmVTdHlsZXMoXG4gICAgICAgICAgY2FwdHVyZVtwYXJzZUludChwMildXG4gICAgICAgICl9PC9zcGFuPmA7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGFwcGx5TGluZVR5cGVzKCk6IHZvaWQge1xuICAgIGZvciAobGV0IGxpbmVOdW0gPSAwOyBsaW5lTnVtIDwgdGhpcy5saW5lcy5sZW5ndGg7IGxpbmVOdW0rKykge1xuICAgICAgaWYgKHRoaXMubGluZURpcnR5W2xpbmVOdW1dKSB7XG4gICAgICAgIGxldCBjb250ZW50SFRNTCA9IHRoaXMucmVwbGFjZShcbiAgICAgICAgICB0aGlzLmxpbmVSZXBsYWNlbWVudHNbbGluZU51bV0sXG4gICAgICAgICAgdGhpcy5saW5lQ2FwdHVyZXNbbGluZU51bV1cbiAgICAgICAgKTtcbiAgICAgICAgKHRoaXMubGluZUVsZW1lbnRzW2xpbmVOdW1dIGFzIEhUTUxFbGVtZW50KS5jbGFzc05hbWUgPSB0aGlzLmxpbmVUeXBlc1tsaW5lTnVtXTtcbiAgICAgICAgKHRoaXMubGluZUVsZW1lbnRzW2xpbmVOdW1dIGFzIEhUTUxFbGVtZW50KS5yZW1vdmVBdHRyaWJ1dGUoXCJzdHlsZVwiKTtcbiAgICAgICAgKHRoaXMubGluZUVsZW1lbnRzW2xpbmVOdW1dIGFzIEhUTUxFbGVtZW50KS5pbm5lckhUTUwgPVxuICAgICAgICAgIGNvbnRlbnRIVE1MID09PSBcIlwiID8gXCI8YnIgLz5cIiA6IGNvbnRlbnRIVE1MO1xuICAgICAgfVxuICAgICAgKHRoaXMubGluZUVsZW1lbnRzW2xpbmVOdW1dIGFzIEhUTUxFbGVtZW50KS5kYXRhc2V0LmxpbmVOdW0gPSBsaW5lTnVtLnRvU3RyaW5nKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVMaW5lVHlwZXMoKTogdm9pZCB7XG4gICAgbGV0IGNvZGVCbG9ja1R5cGU6IHN0cmluZyB8IGZhbHNlID0gZmFsc2U7XG4gICAgbGV0IGNvZGVCbG9ja1NlcUxlbmd0aCA9IDA7XG4gICAgbGV0IGh0bWxCbG9jazogSFRNTEJsb2NrUnVsZSB8IGZhbHNlID0gZmFsc2U7XG5cbiAgICBmb3IgKGxldCBsaW5lTnVtID0gMDsgbGluZU51bSA8IHRoaXMubGluZXMubGVuZ3RoOyBsaW5lTnVtKyspIHtcbiAgICAgIGxldCBsaW5lVHlwZSA9IFwiVE1QYXJhXCI7XG4gICAgICBsZXQgbGluZUNhcHR1cmU6IFJlZ0V4cEV4ZWNBcnJheSA9IFt0aGlzLmxpbmVzW2xpbmVOdW1dXSBhcyBSZWdFeHBFeGVjQXJyYXk7XG4gICAgICBsZXQgbGluZVJlcGxhY2VtZW50ID0gXCIkJDBcIjtcblxuICAgICAgLy8gQ2hlY2sgb25nb2luZyBjb2RlIGJsb2Nrc1xuICAgICAgaWYgKGNvZGVCbG9ja1R5cGUgPT09IFwiVE1Db2RlRmVuY2VCYWNrdGlja09wZW5cIikge1xuICAgICAgICBsZXQgY2FwdHVyZSA9IGxpbmVHcmFtbWFyLlRNQ29kZUZlbmNlQmFja3RpY2tDbG9zZS5yZWdleHAuZXhlYyh0aGlzLmxpbmVzW2xpbmVOdW1dKTtcbiAgICAgICAgaWYgKGNhcHR1cmUgJiYgY2FwdHVyZS5ncm91cHMhW1wic2VxXCJdLmxlbmd0aCA+PSBjb2RlQmxvY2tTZXFMZW5ndGgpIHtcbiAgICAgICAgICBsaW5lVHlwZSA9IFwiVE1Db2RlRmVuY2VCYWNrdGlja0Nsb3NlXCI7XG4gICAgICAgICAgbGluZVJlcGxhY2VtZW50ID0gbGluZUdyYW1tYXIuVE1Db2RlRmVuY2VCYWNrdGlja0Nsb3NlLnJlcGxhY2VtZW50O1xuICAgICAgICAgIGxpbmVDYXB0dXJlID0gY2FwdHVyZTtcbiAgICAgICAgICBjb2RlQmxvY2tUeXBlID0gZmFsc2U7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbGluZVR5cGUgPSBcIlRNRmVuY2VkQ29kZUJhY2t0aWNrXCI7XG4gICAgICAgICAgbGluZVJlcGxhY2VtZW50ID0gJzxzcGFuIGNsYXNzPVwiVE1GZW5jZWRDb2RlXCI+JDA8YnIgLz48L3NwYW4+JztcbiAgICAgICAgICBsaW5lQ2FwdHVyZSA9IFt0aGlzLmxpbmVzW2xpbmVOdW1dXSBhcyBSZWdFeHBFeGVjQXJyYXk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoY29kZUJsb2NrVHlwZSA9PT0gXCJUTUNvZGVGZW5jZVRpbGRlT3BlblwiKSB7XG4gICAgICAgIGxldCBjYXB0dXJlID0gbGluZUdyYW1tYXIuVE1Db2RlRmVuY2VUaWxkZUNsb3NlLnJlZ2V4cC5leGVjKHRoaXMubGluZXNbbGluZU51bV0pO1xuICAgICAgICBpZiAoY2FwdHVyZSAmJiBjYXB0dXJlLmdyb3VwcyFbXCJzZXFcIl0ubGVuZ3RoID49IGNvZGVCbG9ja1NlcUxlbmd0aCkge1xuICAgICAgICAgIGxpbmVUeXBlID0gXCJUTUNvZGVGZW5jZVRpbGRlQ2xvc2VcIjtcbiAgICAgICAgICBsaW5lUmVwbGFjZW1lbnQgPSBsaW5lR3JhbW1hci5UTUNvZGVGZW5jZVRpbGRlQ2xvc2UucmVwbGFjZW1lbnQ7XG4gICAgICAgICAgbGluZUNhcHR1cmUgPSBjYXB0dXJlO1xuICAgICAgICAgIGNvZGVCbG9ja1R5cGUgPSBmYWxzZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBsaW5lVHlwZSA9IFwiVE1GZW5jZWRDb2RlVGlsZGVcIjtcbiAgICAgICAgICBsaW5lUmVwbGFjZW1lbnQgPSAnPHNwYW4gY2xhc3M9XCJUTUZlbmNlZENvZGVcIj4kMDxiciAvPjwvc3Bhbj4nO1xuICAgICAgICAgIGxpbmVDYXB0dXJlID0gW3RoaXMubGluZXNbbGluZU51bV1dIGFzIFJlZ0V4cEV4ZWNBcnJheTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBDaGVjayBIVE1MIGJsb2NrIHR5cGVzXG4gICAgICBpZiAobGluZVR5cGUgPT09IFwiVE1QYXJhXCIgJiYgaHRtbEJsb2NrID09PSBmYWxzZSkge1xuICAgICAgICBmb3IgKGxldCBodG1sQmxvY2tUeXBlIG9mIGh0bWxCbG9ja0dyYW1tYXIpIHtcbiAgICAgICAgICBpZiAodGhpcy5saW5lc1tsaW5lTnVtXS5tYXRjaChodG1sQmxvY2tUeXBlLnN0YXJ0KSkge1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICBodG1sQmxvY2tUeXBlLnBhcmFJbnRlcnJ1cHQgfHxcbiAgICAgICAgICAgICAgbGluZU51bSA9PT0gMCB8fFxuICAgICAgICAgICAgICAhKFxuICAgICAgICAgICAgICAgIHRoaXMubGluZVR5cGVzW2xpbmVOdW0gLSAxXSA9PT0gXCJUTVBhcmFcIiB8fFxuICAgICAgICAgICAgICAgIHRoaXMubGluZVR5cGVzW2xpbmVOdW0gLSAxXSA9PT0gXCJUTVVMXCIgfHxcbiAgICAgICAgICAgICAgICB0aGlzLmxpbmVUeXBlc1tsaW5lTnVtIC0gMV0gPT09IFwiVE1PTFwiIHx8XG4gICAgICAgICAgICAgICAgdGhpcy5saW5lVHlwZXNbbGluZU51bSAtIDFdID09PSBcIlRNQmxvY2txdW90ZVwiXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICBodG1sQmxvY2sgPSBodG1sQmxvY2tUeXBlO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGh0bWxCbG9jayAhPT0gZmFsc2UpIHtcbiAgICAgICAgbGluZVR5cGUgPSBcIlRNSFRNTEJsb2NrXCI7XG4gICAgICAgIGxpbmVSZXBsYWNlbWVudCA9ICc8c3BhbiBjbGFzcz1cIlRNSFRNTENvbnRlbnRcIj4kMDxiciAvPjwvc3Bhbj4nO1xuICAgICAgICBsaW5lQ2FwdHVyZSA9IFt0aGlzLmxpbmVzW2xpbmVOdW1dXSBhcyBSZWdFeHBFeGVjQXJyYXk7XG5cbiAgICAgICAgaWYgKGh0bWxCbG9jay5lbmQpIHtcbiAgICAgICAgICBpZiAodGhpcy5saW5lc1tsaW5lTnVtXS5tYXRjaChodG1sQmxvY2suZW5kKSkge1xuICAgICAgICAgICAgaHRtbEJsb2NrID0gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIGxpbmVOdW0gPT09IHRoaXMubGluZXMubGVuZ3RoIC0gMSB8fFxuICAgICAgICAgICAgdGhpcy5saW5lc1tsaW5lTnVtICsgMV0ubWF0Y2gobGluZUdyYW1tYXIuVE1CbGFua0xpbmUucmVnZXhwKVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgaHRtbEJsb2NrID0gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIENoZWNrIGFsbCByZWdleHBzIGlmIHdlIGhhdmVuJ3QgYXBwbGllZCBvbmUgb2YgdGhlIGNvZGUgYmxvY2sgdHlwZXNcbiAgICAgIGlmIChsaW5lVHlwZSA9PT0gXCJUTVBhcmFcIikge1xuICAgICAgICBmb3IgKGxldCB0eXBlIGluIGxpbmVHcmFtbWFyKSB7XG4gICAgICAgICAgaWYgKGxpbmVHcmFtbWFyW3R5cGVdLnJlZ2V4cCkge1xuICAgICAgICAgICAgbGV0IGNhcHR1cmUgPSBsaW5lR3JhbW1hclt0eXBlXS5yZWdleHAuZXhlYyh0aGlzLmxpbmVzW2xpbmVOdW1dKTtcbiAgICAgICAgICAgIGlmIChjYXB0dXJlKSB7XG4gICAgICAgICAgICAgIGxpbmVUeXBlID0gdHlwZTtcbiAgICAgICAgICAgICAgbGluZVJlcGxhY2VtZW50ID0gbGluZUdyYW1tYXJbdHlwZV0ucmVwbGFjZW1lbnQ7XG4gICAgICAgICAgICAgIGxpbmVDYXB0dXJlID0gY2FwdHVyZTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIElmIHdlJ3ZlIG9wZW5lZCBhIGNvZGUgYmxvY2ssIHJlbWVtYmVyIHRoYXRcbiAgICAgIGlmIChsaW5lVHlwZSA9PT0gXCJUTUNvZGVGZW5jZUJhY2t0aWNrT3BlblwiIHx8IGxpbmVUeXBlID09PSBcIlRNQ29kZUZlbmNlVGlsZGVPcGVuXCIpIHtcbiAgICAgICAgY29kZUJsb2NrVHlwZSA9IGxpbmVUeXBlO1xuICAgICAgICBjb2RlQmxvY2tTZXFMZW5ndGggPSBsaW5lQ2FwdHVyZS5ncm91cHMhW1wic2VxXCJdLmxlbmd0aDtcbiAgICAgIH1cblxuICAgICAgLy8gTGluayByZWZlcmVuY2UgZGVmaW5pdGlvbiBhbmQgaW5kZW50ZWQgY29kZSBjYW4ndCBpbnRlcnJ1cHQgYSBwYXJhZ3JhcGhcbiAgICAgIGlmIChcbiAgICAgICAgKGxpbmVUeXBlID09PSBcIlRNSW5kZW50ZWRDb2RlXCIgfHwgbGluZVR5cGUgPT09IFwiVE1MaW5rUmVmZXJlbmNlRGVmaW5pdGlvblwiKSAmJlxuICAgICAgICBsaW5lTnVtID4gMCAmJlxuICAgICAgICAodGhpcy5saW5lVHlwZXNbbGluZU51bSAtIDFdID09PSBcIlRNUGFyYVwiIHx8XG4gICAgICAgICAgdGhpcy5saW5lVHlwZXNbbGluZU51bSAtIDFdID09PSBcIlRNVUxcIiB8fFxuICAgICAgICAgIHRoaXMubGluZVR5cGVzW2xpbmVOdW0gLSAxXSA9PT0gXCJUTU9MXCIgfHxcbiAgICAgICAgICB0aGlzLmxpbmVUeXBlc1tsaW5lTnVtIC0gMV0gPT09IFwiVE1CbG9ja3F1b3RlXCIpXG4gICAgICApIHtcbiAgICAgICAgbGluZVR5cGUgPSBcIlRNUGFyYVwiO1xuICAgICAgICBsaW5lQ2FwdHVyZSA9IFt0aGlzLmxpbmVzW2xpbmVOdW1dXSBhcyBSZWdFeHBFeGVjQXJyYXk7XG4gICAgICAgIGxpbmVSZXBsYWNlbWVudCA9IFwiJCQwXCI7XG4gICAgICB9XG5cbiAgICAgIC8vIFNldGV4dCBIMiBtYXJrZXJzIHRoYXQgY2FuIGFsc28gYmUgaW50ZXJwcmV0ZWQgYXMgYW4gZW1wdHkgbGlzdCBpdGVtIHNob3VsZCBiZSByZWdhcmRlZCBhcyBzdWNoXG4gICAgICBpZiAobGluZVR5cGUgPT09IFwiVE1TZXRleHRIMk1hcmtlclwiKSB7XG4gICAgICAgIGxldCBjYXB0dXJlID0gbGluZUdyYW1tYXIuVE1VTC5yZWdleHAuZXhlYyh0aGlzLmxpbmVzW2xpbmVOdW1dKTtcbiAgICAgICAgaWYgKGNhcHR1cmUpIHtcbiAgICAgICAgICBsaW5lVHlwZSA9IFwiVE1VTFwiO1xuICAgICAgICAgIGxpbmVSZXBsYWNlbWVudCA9IGxpbmVHcmFtbWFyLlRNVUwucmVwbGFjZW1lbnQ7XG4gICAgICAgICAgbGluZUNhcHR1cmUgPSBjYXB0dXJlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIFNldGV4dCBoZWFkaW5ncyBhcmUgb25seSB2YWxpZCBpZiBwcmVjZWRlZCBieSBhIHBhcmFncmFwaFxuICAgICAgaWYgKGxpbmVUeXBlID09PSBcIlRNU2V0ZXh0SDFNYXJrZXJcIiB8fCBsaW5lVHlwZSA9PT0gXCJUTVNldGV4dEgyTWFya2VyXCIpIHtcbiAgICAgICAgaWYgKGxpbmVOdW0gPT09IDAgfHwgdGhpcy5saW5lVHlwZXNbbGluZU51bSAtIDFdICE9PSBcIlRNUGFyYVwiKSB7XG4gICAgICAgICAgbGV0IGNhcHR1cmUgPSBsaW5lR3JhbW1hci5UTUhSLnJlZ2V4cC5leGVjKHRoaXMubGluZXNbbGluZU51bV0pO1xuICAgICAgICAgIGlmIChjYXB0dXJlKSB7XG4gICAgICAgICAgICBsaW5lVHlwZSA9IFwiVE1IUlwiO1xuICAgICAgICAgICAgbGluZUNhcHR1cmUgPSBjYXB0dXJlO1xuICAgICAgICAgICAgbGluZVJlcGxhY2VtZW50ID0gbGluZUdyYW1tYXIuVE1IUi5yZXBsYWNlbWVudDtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbGluZVR5cGUgPSBcIlRNUGFyYVwiO1xuICAgICAgICAgICAgbGluZUNhcHR1cmUgPSBbdGhpcy5saW5lc1tsaW5lTnVtXV0gYXMgUmVnRXhwRXhlY0FycmF5O1xuICAgICAgICAgICAgbGluZVJlcGxhY2VtZW50ID0gXCIkJDBcIjtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbGV0IGhlYWRpbmdMaW5lID0gbGluZU51bSAtIDE7XG4gICAgICAgICAgY29uc3QgaGVhZGluZ0xpbmVUeXBlID0gbGluZVR5cGUgPT09IFwiVE1TZXRleHRIMU1hcmtlclwiID8gXCJUTVNldGV4dEgxXCIgOiBcIlRNU2V0ZXh0SDJcIjtcbiAgICAgICAgICBkbyB7XG4gICAgICAgICAgICBpZiAodGhpcy5saW5lVHlwZXNbaGVhZGluZ0xpbmVdICE9PSBoZWFkaW5nTGluZVR5cGUpIHtcbiAgICAgICAgICAgICAgdGhpcy5saW5lVHlwZXNbaGVhZGluZ0xpbmVdID0gaGVhZGluZ0xpbmVUeXBlO1xuICAgICAgICAgICAgICB0aGlzLmxpbmVEaXJ0eVtoZWFkaW5nTGluZV0gPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5saW5lUmVwbGFjZW1lbnRzW2hlYWRpbmdMaW5lXSA9IFwiJCQwXCI7XG4gICAgICAgICAgICB0aGlzLmxpbmVDYXB0dXJlc1toZWFkaW5nTGluZV0gPSBbdGhpcy5saW5lc1toZWFkaW5nTGluZV1dIGFzIFJlZ0V4cEV4ZWNBcnJheTtcbiAgICAgICAgICAgIGhlYWRpbmdMaW5lLS07XG4gICAgICAgICAgfSB3aGlsZSAoaGVhZGluZ0xpbmUgPj0gMCAmJiB0aGlzLmxpbmVUeXBlc1toZWFkaW5nTGluZV0gPT09IFwiVE1QYXJhXCIpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLmxpbmVUeXBlc1tsaW5lTnVtXSAhPT0gbGluZVR5cGUpIHtcbiAgICAgICAgdGhpcy5saW5lVHlwZXNbbGluZU51bV0gPSBsaW5lVHlwZTtcbiAgICAgICAgdGhpcy5saW5lRGlydHlbbGluZU51bV0gPSB0cnVlO1xuICAgICAgfVxuICAgICAgdGhpcy5saW5lUmVwbGFjZW1lbnRzW2xpbmVOdW1dID0gbGluZVJlcGxhY2VtZW50O1xuICAgICAgdGhpcy5saW5lQ2FwdHVyZXNbbGluZU51bV0gPSBsaW5lQ2FwdHVyZTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZ2V0U2VsZWN0aW9uKGdldEFuY2hvcjogYm9vbGVhbiA9IGZhbHNlKTogUG9zaXRpb24gfCBudWxsIHtcbiAgICBjb25zdCBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XG4gICAgbGV0IHN0YXJ0Tm9kZSA9IGdldEFuY2hvciA/IHNlbGVjdGlvbiEuYW5jaG9yTm9kZSA6IHNlbGVjdGlvbiEuZm9jdXNOb2RlO1xuICAgIGlmICghc3RhcnROb2RlKSByZXR1cm4gbnVsbDtcbiAgICBsZXQgb2Zmc2V0ID0gZ2V0QW5jaG9yID8gc2VsZWN0aW9uIS5hbmNob3JPZmZzZXQgOiBzZWxlY3Rpb24hLmZvY3VzT2Zmc2V0O1xuICAgIGlmIChzdGFydE5vZGUgPT09IHRoaXMuZSkge1xuICAgICAgaWYgKG9mZnNldCA8IHRoaXMubGluZXMubGVuZ3RoKVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHJvdzogb2Zmc2V0LFxuICAgICAgICAgIGNvbDogMCxcbiAgICAgICAgfTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHJvdzogb2Zmc2V0IC0gMSxcbiAgICAgICAgY29sOiB0aGlzLmxpbmVzW29mZnNldCAtIDFdLmxlbmd0aCxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgbGV0IGNvbCA9IHRoaXMuY29tcHV0ZUNvbHVtbihzdGFydE5vZGUsIG9mZnNldCk7XG4gICAgaWYgKGNvbCA9PT0gbnVsbCkgcmV0dXJuIG51bGw7XG5cbiAgICBsZXQgbm9kZSA9IHN0YXJ0Tm9kZTtcbiAgICB3aGlsZSAobm9kZS5wYXJlbnRFbGVtZW50ICE9PSB0aGlzLmUpIHtcbiAgICAgIG5vZGUgPSBub2RlLnBhcmVudEVsZW1lbnQhO1xuICAgIH1cblxuICAgIGxldCByb3cgPSAwO1xuICAgIC8vIElmIHRoZSBub2RlIGRvZXNuJ3QgaGF2ZSBhIHByZXZpb3VzIHNpYmxpbmcsIGl0IG11c3QgYmUgdGhlIGZpcnN0IGxpbmVcbiAgICBpZiAobm9kZS5wcmV2aW91c1NpYmxpbmcpIHtcbiAgICAgIGNvbnN0IGN1cnJlbnRMaW5lTnVtRGF0YSA9IChub2RlIGFzIEhUTUxFbGVtZW50KS5kYXRhc2V0Py5saW5lTnVtO1xuICAgICAgY29uc3QgcHJldmlvdXNMaW5lTnVtRGF0YSA9IChub2RlLnByZXZpb3VzU2libGluZyBhcyBIVE1MRWxlbWVudCkuZGF0YXNldD8ubGluZU51bTtcblxuICAgICAgaWYgKGN1cnJlbnRMaW5lTnVtRGF0YSAmJiBwcmV2aW91c0xpbmVOdW1EYXRhKSB7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRMaW5lTnVtID0gcGFyc2VJbnQoY3VycmVudExpbmVOdW1EYXRhKTtcbiAgICAgICAgY29uc3QgcHJldmlvdXNMaW5lTnVtID0gcGFyc2VJbnQocHJldmlvdXNMaW5lTnVtRGF0YSk7XG4gICAgICAgIGlmIChjdXJyZW50TGluZU51bSA9PT0gcHJldmlvdXNMaW5lTnVtICsgMSkge1xuICAgICAgICAgIHJvdyA9IGN1cnJlbnRMaW5lTnVtO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIElmIHRoZSBjdXJyZW50IGxpbmUgaXMgTk9UIHRoZSBwcmV2aW91cyBsaW5lICsgMSwgdGhlbiBlaXRoZXIgXG4gICAgICAgICAgLy8gdGhlIGN1cnJlbnQgbGluZSBnb3Qgc3BsaXQgaW4gdHdvIG9yIG1lcmdlZCB3aXRoIHRoZSBwcmV2aW91cyBsaW5lXG4gICAgICAgICAgLy8gRWl0aGVyIHdheSwgd2UgbmVlZCB0byByZWNhbGN1bGF0ZSB0aGUgcm93IG51bWJlclxuICAgICAgICAgIHdoaWxlIChub2RlLnByZXZpb3VzU2libGluZykge1xuICAgICAgICAgICAgcm93Kys7XG4gICAgICAgICAgICBub2RlID0gbm9kZS5wcmV2aW91c1NpYmxpbmc7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIFxuICAgIHJldHVybiB7IHJvdzogcm93LCBjb2w6IGNvbCB9O1xuICB9XG5cbiAgcHVibGljIHNldFNlbGVjdGlvbihmb2N1czogUG9zaXRpb24sIGFuY2hvcjogUG9zaXRpb24gfCBudWxsID0gbnVsbCk6IHZvaWQge1xuICAgIGlmICghZm9jdXMpIHJldHVybjtcblxuICAgIGxldCB7IG5vZGU6IGZvY3VzTm9kZSwgb2Zmc2V0OiBmb2N1c09mZnNldCB9ID0gdGhpcy5jb21wdXRlTm9kZUFuZE9mZnNldChcbiAgICAgIGZvY3VzLnJvdyxcbiAgICAgIGZvY3VzLmNvbCxcbiAgICAgIGFuY2hvciA/IGFuY2hvci5yb3cgPT09IGZvY3VzLnJvdyAmJiBhbmNob3IuY29sID4gZm9jdXMuY29sIDogZmFsc2VcbiAgICApO1xuICAgIGxldCBhbmNob3JOb2RlID0gbnVsbCxcbiAgICAgIGFuY2hvck9mZnNldCA9IG51bGw7XG4gICAgaWYgKGFuY2hvciAmJiAoYW5jaG9yLnJvdyAhPT0gZm9jdXMucm93IHx8IGFuY2hvci5jb2wgIT09IGZvY3VzLmNvbCkpIHtcbiAgICAgIGxldCB7IG5vZGUsIG9mZnNldCB9ID0gdGhpcy5jb21wdXRlTm9kZUFuZE9mZnNldChcbiAgICAgICAgYW5jaG9yLnJvdyxcbiAgICAgICAgYW5jaG9yLmNvbCxcbiAgICAgICAgZm9jdXMucm93ID09PSBhbmNob3Iucm93ICYmIGZvY3VzLmNvbCA+IGFuY2hvci5jb2xcbiAgICAgICk7XG4gICAgICBhbmNob3JOb2RlID0gbm9kZTtcbiAgICAgIGFuY2hvck9mZnNldCA9IG9mZnNldDtcbiAgICB9XG5cbiAgICBsZXQgd2luZG93U2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpO1xuICAgIHdpbmRvd1NlbGVjdGlvbiEuc2V0QmFzZUFuZEV4dGVudChcbiAgICAgIGZvY3VzTm9kZSxcbiAgICAgIGZvY3VzT2Zmc2V0LFxuICAgICAgYW5jaG9yTm9kZSB8fCBmb2N1c05vZGUsXG4gICAgICBhbmNob3JOb2RlID8gYW5jaG9yT2Zmc2V0ISA6IGZvY3VzT2Zmc2V0XG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBwYXN0ZSh0ZXh0OiBzdHJpbmcsIGFuY2hvcjogUG9zaXRpb24gfCBudWxsID0gbnVsbCwgZm9jdXM6IFBvc2l0aW9uIHwgbnVsbCA9IG51bGwpOiB2b2lkIHtcbiAgICBpZiAoIWFuY2hvcikgYW5jaG9yID0gdGhpcy5nZXRTZWxlY3Rpb24odHJ1ZSk7XG4gICAgaWYgKCFmb2N1cykgZm9jdXMgPSB0aGlzLmdldFNlbGVjdGlvbihmYWxzZSk7XG4gICAgbGV0IGJlZ2lubmluZzogUG9zaXRpb24sIGVuZDogUG9zaXRpb247XG4gICAgaWYgKCFmb2N1cykge1xuICAgICAgZm9jdXMgPSB7XG4gICAgICAgIHJvdzogdGhpcy5saW5lcy5sZW5ndGggLSAxLFxuICAgICAgICBjb2w6IHRoaXMubGluZXNbdGhpcy5saW5lcy5sZW5ndGggLSAxXS5sZW5ndGgsXG4gICAgICB9O1xuICAgIH1cbiAgICBpZiAoIWFuY2hvcikge1xuICAgICAgYW5jaG9yID0gZm9jdXM7XG4gICAgfVxuICAgIGlmIChcbiAgICAgIGFuY2hvci5yb3cgPCBmb2N1cy5yb3cgfHxcbiAgICAgIChhbmNob3Iucm93ID09PSBmb2N1cy5yb3cgJiYgYW5jaG9yLmNvbCA8PSBmb2N1cy5jb2wpXG4gICAgKSB7XG4gICAgICBiZWdpbm5pbmcgPSBhbmNob3I7XG4gICAgICBlbmQgPSBmb2N1cztcbiAgICB9IGVsc2Uge1xuICAgICAgYmVnaW5uaW5nID0gZm9jdXM7XG4gICAgICBlbmQgPSBhbmNob3I7XG4gICAgfVxuICAgIGxldCBpbnNlcnRlZExpbmVzID0gdGV4dC5zcGxpdCgvKD86XFxyXFxufFxccnxcXG4pLyk7XG4gICAgbGV0IGxpbmVCZWZvcmUgPSB0aGlzLmxpbmVzW2JlZ2lubmluZy5yb3ddLnN1YnN0cigwLCBiZWdpbm5pbmcuY29sKTtcbiAgICBsZXQgbGluZUVuZCA9IHRoaXMubGluZXNbZW5kLnJvd10uc3Vic3RyKGVuZC5jb2wpO1xuICAgIGluc2VydGVkTGluZXNbMF0gPSBsaW5lQmVmb3JlLmNvbmNhdChpbnNlcnRlZExpbmVzWzBdKTtcbiAgICBsZXQgZW5kQ29sUG9zID0gaW5zZXJ0ZWRMaW5lc1tpbnNlcnRlZExpbmVzLmxlbmd0aCAtIDFdLmxlbmd0aDtcbiAgICBpbnNlcnRlZExpbmVzW2luc2VydGVkTGluZXMubGVuZ3RoIC0gMV0gPSBpbnNlcnRlZExpbmVzW2luc2VydGVkTGluZXMubGVuZ3RoIC0gMV0uY29uY2F0KGxpbmVFbmQpO1xuICAgIHRoaXMuc3BsaWNlTGluZXMoYmVnaW5uaW5nLnJvdywgMSArIGVuZC5yb3cgLSBiZWdpbm5pbmcucm93LCBpbnNlcnRlZExpbmVzKTtcbiAgICBmb2N1cy5yb3cgPSBiZWdpbm5pbmcucm93ICsgaW5zZXJ0ZWRMaW5lcy5sZW5ndGggLSAxO1xuICAgIGZvY3VzLmNvbCA9IGVuZENvbFBvcztcbiAgICB0aGlzLnVwZGF0ZUZvcm1hdHRpbmcoKTtcbiAgICB0aGlzLnNldFNlbGVjdGlvbihmb2N1cyk7XG4gICAgdGhpcy5maXJlQ2hhbmdlKCk7XG4gIH1cblxuICBwdWJsaWMgd3JhcFNlbGVjdGlvbihwcmU6IHN0cmluZywgcG9zdDogc3RyaW5nLCBmb2N1czogUG9zaXRpb24gfCBudWxsID0gbnVsbCwgYW5jaG9yOiBQb3NpdGlvbiB8IG51bGwgPSBudWxsKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmlzUmVzdG9yaW5nSGlzdG9yeSkgdGhpcy5wdXNoSGlzdG9yeSgpO1xuICAgIGlmICghZm9jdXMpIGZvY3VzID0gdGhpcy5nZXRTZWxlY3Rpb24oZmFsc2UpO1xuICAgIGlmICghYW5jaG9yKSBhbmNob3IgPSB0aGlzLmdldFNlbGVjdGlvbih0cnVlKTtcbiAgICBpZiAoIWZvY3VzIHx8ICFhbmNob3IgfHwgZm9jdXMucm93ICE9PSBhbmNob3Iucm93KSByZXR1cm47XG4gICAgdGhpcy5saW5lRGlydHlbZm9jdXMucm93XSA9IHRydWU7XG5cbiAgICBjb25zdCBzdGFydENvbCA9IGZvY3VzLmNvbCA8IGFuY2hvci5jb2wgPyBmb2N1cy5jb2wgOiBhbmNob3IuY29sO1xuICAgIGNvbnN0IGVuZENvbCA9IGZvY3VzLmNvbCA8IGFuY2hvci5jb2wgPyBhbmNob3IuY29sIDogZm9jdXMuY29sO1xuICAgIGNvbnN0IGxlZnQgPSB0aGlzLmxpbmVzW2ZvY3VzLnJvd10uc3Vic3RyKDAsIHN0YXJ0Q29sKS5jb25jYXQocHJlKTtcbiAgICBjb25zdCBtaWQgPSBlbmRDb2wgPT09IHN0YXJ0Q29sID8gXCJcIiA6IHRoaXMubGluZXNbZm9jdXMucm93XS5zdWJzdHIoc3RhcnRDb2wsIGVuZENvbCAtIHN0YXJ0Q29sKTtcbiAgICBjb25zdCByaWdodCA9IHBvc3QuY29uY2F0KHRoaXMubGluZXNbZm9jdXMucm93XS5zdWJzdHIoZW5kQ29sKSk7XG4gICAgdGhpcy5saW5lc1tmb2N1cy5yb3ddID0gbGVmdC5jb25jYXQobWlkLCByaWdodCk7XG4gICAgYW5jaG9yLmNvbCA9IGxlZnQubGVuZ3RoO1xuICAgIGZvY3VzLmNvbCA9IGFuY2hvci5jb2wgKyBtaWQubGVuZ3RoO1xuXG4gICAgdGhpcy51cGRhdGVGb3JtYXR0aW5nKCk7XG4gICAgdGhpcy5zZXRTZWxlY3Rpb24oZm9jdXMsIGFuY2hvcik7XG4gIH1cblxuICBwdWJsaWMgYWRkRXZlbnRMaXN0ZW5lcjxUIGV4dGVuZHMgRXZlbnRUeXBlPihcbiAgICB0eXBlOiBULFxuICAgIGxpc3RlbmVyOiBUIGV4dGVuZHMgJ2NoYW5nZScgPyBFdmVudEhhbmRsZXI8Q2hhbmdlRXZlbnQ+IDpcbiAgICAgICAgICAgICBUIGV4dGVuZHMgJ3NlbGVjdGlvbicgPyBFdmVudEhhbmRsZXI8U2VsZWN0aW9uRXZlbnQ+IDpcbiAgICAgICAgICAgICBUIGV4dGVuZHMgJ2Ryb3AnID8gRXZlbnRIYW5kbGVyPERyb3BFdmVudD4gOiBuZXZlclxuICApOiB2b2lkIHtcbiAgICBpZiAodHlwZS5tYXRjaCgvXig/OmNoYW5nZXxpbnB1dCkkL2kpKSB7XG4gICAgICB0aGlzLmxpc3RlbmVycy5jaGFuZ2UucHVzaChsaXN0ZW5lciBhcyBFdmVudEhhbmRsZXI8Q2hhbmdlRXZlbnQ+KTtcbiAgICB9XG4gICAgaWYgKHR5cGUubWF0Y2goL14oPzpzZWxlY3Rpb258c2VsZWN0aW9uY2hhbmdlKSQvaSkpIHtcbiAgICAgIHRoaXMubGlzdGVuZXJzLnNlbGVjdGlvbi5wdXNoKGxpc3RlbmVyIGFzIEV2ZW50SGFuZGxlcjxTZWxlY3Rpb25FdmVudD4pO1xuICAgIH1cbiAgICBpZiAodHlwZS5tYXRjaCgvXig/OmRyb3ApJC9pKSkge1xuICAgICAgdGhpcy5saXN0ZW5lcnMuZHJvcC5wdXNoKGxpc3RlbmVyIGFzIEV2ZW50SGFuZGxlcjxEcm9wRXZlbnQ+KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGZpcmVDaGFuZ2UoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnRleHRhcmVhICYmICF0aGlzLmxpc3RlbmVycy5jaGFuZ2UubGVuZ3RoKSByZXR1cm47XG4gICAgY29uc3QgY29udGVudCA9IHRoaXMuZ2V0Q29udGVudCgpO1xuICAgIGlmICh0aGlzLnRleHRhcmVhKSB0aGlzLnRleHRhcmVhLnZhbHVlID0gY29udGVudDtcbiAgICBmb3IgKGxldCBsaXN0ZW5lciBvZiB0aGlzLmxpc3RlbmVycy5jaGFuZ2UpIHtcbiAgICAgIGxpc3RlbmVyKHtcbiAgICAgICAgY29udGVudDogY29udGVudCxcbiAgICAgICAgbGluZXNEaXJ0eTogWy4uLnRoaXMubGluZURpcnR5XSxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBiZWZvcmVpbnB1dCBoYW5kbGVyLCBleGNsdXNpdmVseSB0byBoYW5kbGUgaW5zZXJ0UGFyYWdyYXBoIGFuZFxuICAgKiBpbnNlcnRMaW5lQnJlYWsgZXZlbnRzLiBUaGVzZSB1c2VkIHRvIGJlIGhhbmRsZWQgaW4gdGhlIGlucHV0IGV2ZW50LFxuICAgKiBidXQgdGhhdCBjYXVzZWQgaXNzdWVzIHdpdGggRmlyZWZveCB3aGVyZSB0aGUgaW5wdXQgZXZlbnQgd291bGQgYmVcbiAgICogc29tZXRpbWVzIG5vdCBiZSBmaXJlZCBmb3IgdGhlc2UgaW5wdXQgdHlwZXMuXG4gICAqIEBwYXJhbSBldmVudCBUaGUgaW5wdXQgZXZlbnRcbiAgICogQHJldHVybnMgbm90aGluZ1xuICAgKi9cbiAgcHJpdmF0ZSBoYW5kbGVCZWZvcmVJbnB1dEV2ZW50KGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IGJlZm9yZUlucHV0RXZlbnQgPSBldmVudCBhcyBJbnB1dEV2ZW50O1xuICAgIGlmIChcbiAgICAgIGJlZm9yZUlucHV0RXZlbnQuaW5wdXRUeXBlICE9PSBcImluc2VydFBhcmFncmFwaFwiICYmXG4gICAgICBiZWZvcmVJbnB1dEV2ZW50LmlucHV0VHlwZSAhPT0gXCJpbnNlcnRMaW5lQnJlYWtcIlxuICAgICkgcmV0dXJuO1xuICAgIGlmICghdGhpcy5pc1Jlc3RvcmluZ0hpc3RvcnkpIHRoaXMucHVzaEhpc3RvcnkoKTtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIHRoaXMuY2xlYXJEaXJ0eUZsYWcoKTtcblxuICAgIGNvbnN0IGZvY3VzID0gdGhpcy5nZXRTZWxlY3Rpb24oKTtcbiAgICBjb25zdCBhbmNob3IgPSB0aGlzLmdldFNlbGVjdGlvbih0cnVlKTtcblxuICAgIGlmICghZm9jdXMgfHwgIWFuY2hvcikgcmV0dXJuO1xuICAgIFxuICAgIC8vIElmIGZvY3VzIGFuZCBhbmNob3IgYXJlIGluIGRpZmZlcmVudCBsaW5lcywgc2ltcGx5IHJlbW92ZSBldmVyeXRoaW5nIFxuICAgIC8vIGFmdGVyIHRoZSBiZWdpbm5pbmcgb2YgdGhlIHNlbGVjdGlvbiBhbmQgYmVmb3JlIHRoZSBlbmQgb2YgdGhlIHNlbGVjdGlvblxuICAgIC8vIGFuZCByZW1vdmUgYW55IGxpbmVzIGluIGJldHdlZW5cbiAgICBpZiAoZm9jdXMucm93ICE9PSBhbmNob3Iucm93KSB7XG4gICAgICBjb25zdCBiZWdpbm5pbmcgPSBmb2N1cy5yb3cgPCBhbmNob3Iucm93ID8gZm9jdXMgOiBhbmNob3I7XG4gICAgICBjb25zdCBlbmQgPSBmb2N1cy5yb3cgPCBhbmNob3Iucm93ID8gYW5jaG9yIDogZm9jdXM7XG4gICAgICB0aGlzLmxpbmVzW2JlZ2lubmluZy5yb3ddID0gdGhpcy5saW5lc1tiZWdpbm5pbmcucm93XS5zdWJzdHJpbmcoMCwgYmVnaW5uaW5nLmNvbCk7XG4gICAgICB0aGlzLmxpbmVzW2VuZC5yb3ddID0gdGhpcy5saW5lc1tlbmQucm93XS5zdWJzdHJpbmcoZW5kLmNvbCk7XG4gICAgICB0aGlzLnNwbGljZUxpbmVzKGJlZ2lubmluZy5yb3cgKyAxLCBlbmQucm93IC0gYmVnaW5uaW5nLnJvdyAtIDEpO1xuICAgICAgZm9jdXMucm93ID0gYmVnaW5uaW5nLnJvdyArIDE7XG4gICAgICBmb2N1cy5jb2wgPSAwO1xuICAgIH0gZWxzZSB7XG4gICAgICBsZXQgY29udGludWFibGVUeXBlOiBzdHJpbmcgfCBmYWxzZSA9IGZhbHNlO1xuICAgICAgc3dpdGNoICh0aGlzLmxpbmVUeXBlc1tmb2N1cy5yb3ddKSB7XG4gICAgICAgIGNhc2UgXCJUTVVMXCI6XG4gICAgICAgICAgY29udGludWFibGVUeXBlID0gXCJUTVVMXCI7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJUTU9MXCI6XG4gICAgICAgICAgY29udGludWFibGVUeXBlID0gXCJUTU9MXCI7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJUTUluZGVudGVkQ29kZVwiOlxuICAgICAgICAgIGNvbnRpbnVhYmxlVHlwZSA9IFwiVE1JbmRlbnRlZENvZGVcIjtcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiBcbiAgICAgIGNvbnN0IGxpbmVCZWZvcmVCcmVhayA9IHRoaXMubGluZXNbZm9jdXMucm93XS5zdWJzdHJpbmcoMCwgZm9jdXMuY29sIDw9IGFuY2hvci5jb2wgPyBmb2N1cy5jb2wgOiBhbmNob3IuY29sKTtcbiAgICAgIGNvbnN0IGxpbmVBZnRlckJyZWFrID0gdGhpcy5saW5lc1tmb2N1cy5yb3ddLnN1YnN0cmluZyhmb2N1cy5jb2wgPD0gYW5jaG9yLmNvbCA/IGFuY2hvci5jb2wgOiBmb2N1cy5jb2wpO1xuICAgICAgdGhpcy5zcGxpY2VMaW5lcyhmb2N1cy5yb3csIDEsIFtsaW5lQmVmb3JlQnJlYWssIGxpbmVBZnRlckJyZWFrXSk7XG5cbiAgICAgIGZvY3VzLnJvdyArPSAxO1xuICAgICAgZm9jdXMuY29sID0gMDtcblxuICAgICAgaWYgKGNvbnRpbnVhYmxlVHlwZSkge1xuICAgICAgICBsZXQgY2FwdHVyZSA9IGxpbmVHcmFtbWFyW2NvbnRpbnVhYmxlVHlwZV0ucmVnZXhwLmV4ZWModGhpcy5saW5lc1tmb2N1cy5yb3cgLSAxXSk7XG4gICAgICAgIGlmIChjYXB0dXJlKSB7XG4gICAgICAgICAgaWYgKGNhcHR1cmVbMl0pIHtcbiAgICAgICAgICAgIGlmIChjb250aW51YWJsZVR5cGUgPT09IFwiVE1PTFwiKSB7XG4gICAgICAgICAgICAgIGNhcHR1cmVbMV0gPSBjYXB0dXJlWzFdLnJlcGxhY2UoL1xcZHsxLDl9LywgKHJlc3VsdCkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiAocGFyc2VJbnQocmVzdWx0KSArIDEpLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5saW5lc1tmb2N1cy5yb3ddID0gYCR7Y2FwdHVyZVsxXX0ke3RoaXMubGluZXNbZm9jdXMucm93XX1gO1xuICAgICAgICAgICAgdGhpcy5saW5lRGlydHlbZm9jdXMucm93XSA9IHRydWU7XG4gICAgICAgICAgICBmb2N1cy5jb2wgPSBjYXB0dXJlWzFdLmxlbmd0aDtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5saW5lc1tmb2N1cy5yb3cgLSAxXSA9IFwiXCI7XG4gICAgICAgICAgICB0aGlzLmxpbmVEaXJ0eVtmb2N1cy5yb3cgLSAxXSA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMudXBkYXRlRm9ybWF0dGluZygpO1xuICAgIHRoaXMuc2V0U2VsZWN0aW9uKGZvY3VzKTtcbiAgICB0aGlzLmZpcmVDaGFuZ2UoKTtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlSW5wdXRFdmVudChldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICBjb25zdCBpbnB1dEV2ZW50ID0gZXZlbnQgYXMgSW5wdXRFdmVudDtcbiAgICBpZiAoaW5wdXRFdmVudC5pbnB1dFR5cGUgPT09IFwiaW5zZXJ0Q29tcG9zaXRpb25UZXh0XCIpIHJldHVybjtcbiAgICBpZiAoIXRoaXMuaXNSZXN0b3JpbmdIaXN0b3J5KSB0aGlzLnB1c2hIaXN0b3J5KCk7XG5cbiAgICBsZXQgZm9jdXMgPSB0aGlzLmdldFNlbGVjdGlvbigpO1xuXG4gICAgaWYgKChpbnB1dEV2ZW50LmlucHV0VHlwZSA9PT0gXCJpbnNlcnRQYXJhZ3JhcGhcIiB8fCBpbnB1dEV2ZW50LmlucHV0VHlwZSA9PT0gXCJpbnNlcnRMaW5lQnJlYWtcIikgJiYgZm9jdXMpIHtcbiAgICAgIC8vIFRoaXMgc2hvdWxkIG5ldmVyIGhhcHBlbiBzaW5jZSB0aGVzZSBhcmUgaGFuZGxlZCBieSB0aGUgYmVmb3JlaW5wdXQgaGFuZGxlclxuICAgICAgcmV0dXJuO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoIXRoaXMuZSEuZmlyc3RDaGlsZCkge1xuICAgICAgICB0aGlzLmUhLmlubmVySFRNTCA9ICc8ZGl2IGNsYXNzPVwiVE1CbGFua0xpbmVcIj48YnI+PC9kaXY+JztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuZml4Tm9kZUhpZXJhcmNoeSgpO1xuICAgICAgfVxuICAgICAgdGhpcy51cGRhdGVMaW5lQ29udGVudHNBbmRGb3JtYXR0aW5nKCk7XG4gICAgfVxuICAgIGlmIChmb2N1cykge1xuICAgICAgdGhpcy5zZXRTZWxlY3Rpb24oZm9jdXMpO1xuICAgIH1cblxuICAgIHRoaXMuZmlyZUNoYW5nZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVTZWxlY3Rpb25DaGFuZ2VFdmVudChfZTogRXZlbnQpOiB2b2lkIHtcbiAgICB0aGlzLmZpcmVTZWxlY3Rpb24oKTtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlUGFzdGUoZXZlbnQ6IENsaXBib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmlzUmVzdG9yaW5nSGlzdG9yeSkgdGhpcy5wdXNoSGlzdG9yeSgpO1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICBsZXQgdGV4dCA9IChldmVudCBhcyBhbnkpLmNsaXBib2FyZERhdGEuZ2V0RGF0YShcInRleHQvcGxhaW5cIik7XG4gICAgdGhpcy5wYXN0ZSh0ZXh0KTtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlRHJvcChldmVudDogRHJhZ0V2ZW50KTogdm9pZCB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB0aGlzLmZpcmVEcm9wKGV2ZW50LmRhdGFUcmFuc2ZlciEpO1xuICB9XG5cbiAgcHJpdmF0ZSBwcm9jZXNzSW5saW5lU3R5bGVzKG9yaWdpbmFsU3RyaW5nOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGxldCBwcm9jZXNzZWQgPSBcIlwiO1xuICAgIGxldCBzdGFjazogQXJyYXk8e2RlbGltaXRlcjogc3RyaW5nLCBkZWxpbVN0cmluZzogc3RyaW5nLCBjb3VudDogbnVtYmVyLCBvdXRwdXQ6IHN0cmluZ30+ID0gW107XG4gICAgbGV0IG9mZnNldCA9IDA7XG4gICAgbGV0IHN0cmluZyA9IG9yaWdpbmFsU3RyaW5nO1xuXG4gICAgb3V0ZXI6IHdoaWxlIChzdHJpbmcpIHtcbiAgICAgIC8vIFByb2Nlc3Mgc2ltcGxlIHJ1bGVzIChub24tZGVsaW1pdGVyKVxuICAgICAgZm9yIChsZXQgcnVsZSBvZiBbXCJlc2NhcGVcIiwgXCJjb2RlXCIsIFwiYXV0b2xpbmtcIiwgXCJodG1sXCJdKSB7XG4gICAgICAgIGlmICh0aGlzLm1lcmdlZElubGluZUdyYW1tYXJbcnVsZV0pIHtcbiAgICAgICAgICBsZXQgY2FwID0gdGhpcy5tZXJnZWRJbmxpbmVHcmFtbWFyW3J1bGVdLnJlZ2V4cC5leGVjKHN0cmluZyk7XG4gICAgICAgICAgaWYgKGNhcCkge1xuICAgICAgICAgICAgc3RyaW5nID0gc3RyaW5nLnN1YnN0cihjYXBbMF0ubGVuZ3RoKTtcbiAgICAgICAgICAgIG9mZnNldCArPSBjYXBbMF0ubGVuZ3RoO1xuICAgICAgICAgICAgcHJvY2Vzc2VkICs9IHRoaXMubWVyZ2VkSW5saW5lR3JhbW1hcltydWxlXS5yZXBsYWNlbWVudC5yZXBsYWNlKC9cXCQoWzEtOV0pL2csIChzdHIsIHAxKSA9PiBodG1sZXNjYXBlKGNhcFtwMV0pKTtcbiAgICAgICAgICAgIGNvbnRpbnVlIG91dGVyO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgXG4gICAgICAvLyBQcm9jZXNzIGN1c3RvbSBpbmxpbmUgZ3JhbW1hciBydWxlc1xuICAgICAgZm9yIChsZXQgcnVsZSBpbiB0aGlzLmN1c3RvbUlubGluZUdyYW1tYXIpIHtcbiAgICAgICAgaWYgKHJ1bGUgIT09IFwiZXNjYXBlXCIgJiYgcnVsZSAhPT0gXCJjb2RlXCIgJiYgcnVsZSAhPT0gXCJhdXRvbGlua1wiICYmIHJ1bGUgIT09IFwiaHRtbFwiICYmIHJ1bGUgIT09IFwibGlua09wZW5cIiAmJiBydWxlICE9PSBcImltYWdlT3BlblwiICYmIHJ1bGUgIT09IFwibGlua0xhYmVsXCIgJiYgcnVsZSAhPT0gXCJkZWZhdWx0XCIpIHtcbiAgICAgICAgICBsZXQgY2FwID0gdGhpcy5tZXJnZWRJbmxpbmVHcmFtbWFyW3J1bGVdLnJlZ2V4cC5leGVjKHN0cmluZyk7XG4gICAgICAgICAgaWYgKGNhcCkge1xuICAgICAgICAgICAgc3RyaW5nID0gc3RyaW5nLnN1YnN0cihjYXBbMF0ubGVuZ3RoKTtcbiAgICAgICAgICAgIG9mZnNldCArPSBjYXBbMF0ubGVuZ3RoO1xuICAgICAgICAgICAgcHJvY2Vzc2VkICs9IHRoaXMubWVyZ2VkSW5saW5lR3JhbW1hcltydWxlXS5yZXBsYWNlbWVudC5yZXBsYWNlKC9cXCQoWzEtOV0pL2csIChzdHIsIHAxKSA9PiBodG1sZXNjYXBlKGNhcFtwMV0pKTtcbiAgICAgICAgICAgIGNvbnRpbnVlIG91dGVyO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBDaGVjayBmb3IgbGlua3MgLyBpbWFnZXNcbiAgICAgIGxldCBwb3RlbnRpYWxMaW5rID0gc3RyaW5nLm1hdGNoKHRoaXMubWVyZ2VkSW5saW5lR3JhbW1hci5saW5rT3Blbi5yZWdleHApO1xuICAgICAgbGV0IHBvdGVudGlhbEltYWdlID0gc3RyaW5nLm1hdGNoKHRoaXMubWVyZ2VkSW5saW5lR3JhbW1hci5pbWFnZU9wZW4ucmVnZXhwKTtcbiAgICAgIGlmIChwb3RlbnRpYWxJbWFnZSB8fCBwb3RlbnRpYWxMaW5rKSB7XG4gICAgICAgIGxldCByZXN1bHQgPSB0aGlzLnBhcnNlTGlua09ySW1hZ2Uoc3RyaW5nLCAhIXBvdGVudGlhbEltYWdlKTtcbiAgICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICAgIHByb2Nlc3NlZCA9IGAke3Byb2Nlc3NlZH0ke3Jlc3VsdC5vdXRwdXR9YDtcbiAgICAgICAgICBzdHJpbmcgPSBzdHJpbmcuc3Vic3RyKHJlc3VsdC5jaGFyQ291bnQpO1xuICAgICAgICAgIG9mZnNldCArPSByZXN1bHQuY2hhckNvdW50O1xuICAgICAgICAgIGNvbnRpbnVlIG91dGVyO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIENoZWNrIGZvciBlbSAvIHN0cm9uZyBkZWxpbWl0ZXJzXG4gICAgICBsZXQgY2FwID0gLyheXFwqKyl8KF5fKykvLmV4ZWMoc3RyaW5nKTtcbiAgICAgIGlmIChjYXApIHtcbiAgICAgICAgbGV0IGRlbGltQ291bnQgPSBjYXBbMF0ubGVuZ3RoO1xuICAgICAgICBjb25zdCBkZWxpbVN0cmluZyA9IGNhcFswXTtcbiAgICAgICAgY29uc3QgY3VycmVudERlbGltaXRlciA9IGNhcFswXVswXTtcblxuICAgICAgICBzdHJpbmcgPSBzdHJpbmcuc3Vic3RyKGNhcFswXS5sZW5ndGgpO1xuXG4gICAgICAgIGNvbnN0IHByZWNlZGluZyA9IG9mZnNldCA+IDAgPyBvcmlnaW5hbFN0cmluZy5zdWJzdHIoMCwgb2Zmc2V0KSA6IFwiIFwiO1xuICAgICAgICBjb25zdCBmb2xsb3dpbmcgPSBvZmZzZXQgKyBjYXBbMF0ubGVuZ3RoIDwgb3JpZ2luYWxTdHJpbmcubGVuZ3RoID8gc3RyaW5nIDogXCIgXCI7XG5cbiAgICAgICAgY29uc3QgcHVuY3R1YXRpb25Gb2xsb3dzID0gZm9sbG93aW5nLm1hdGNoKHB1bmN0dWF0aW9uTGVhZGluZyk7XG4gICAgICAgIGNvbnN0IHB1bmN0dWF0aW9uUHJlY2VkZXMgPSBwcmVjZWRpbmcubWF0Y2gocHVuY3R1YXRpb25UcmFpbGluZyk7XG4gICAgICAgIGNvbnN0IHdoaXRlc3BhY2VGb2xsb3dzID0gZm9sbG93aW5nLm1hdGNoKC9eXFxzLyk7XG4gICAgICAgIGNvbnN0IHdoaXRlc3BhY2VQcmVjZWRlcyA9IHByZWNlZGluZy5tYXRjaCgvXFxzJC8pO1xuXG4gICAgICAgIGxldCBjYW5PcGVuID0gIXdoaXRlc3BhY2VGb2xsb3dzICYmICghcHVuY3R1YXRpb25Gb2xsb3dzIHx8ICEhd2hpdGVzcGFjZVByZWNlZGVzIHx8ICEhcHVuY3R1YXRpb25QcmVjZWRlcyk7XG4gICAgICAgIGxldCBjYW5DbG9zZSA9ICF3aGl0ZXNwYWNlUHJlY2VkZXMgJiYgKCFwdW5jdHVhdGlvblByZWNlZGVzIHx8ICEhd2hpdGVzcGFjZUZvbGxvd3MgfHwgISFwdW5jdHVhdGlvbkZvbGxvd3MpO1xuXG4gICAgICAgIGlmIChjdXJyZW50RGVsaW1pdGVyID09PSBcIl9cIiAmJiBjYW5PcGVuICYmIGNhbkNsb3NlKSB7XG4gICAgICAgICAgY2FuT3BlbiA9ICEhcHVuY3R1YXRpb25QcmVjZWRlcztcbiAgICAgICAgICBjYW5DbG9zZSA9ICEhcHVuY3R1YXRpb25Gb2xsb3dzO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNhbkNsb3NlKSB7XG4gICAgICAgICAgbGV0IHN0YWNrUG9pbnRlciA9IHN0YWNrLmxlbmd0aCAtIDE7XG4gICAgICAgICAgd2hpbGUgKGRlbGltQ291bnQgJiYgc3RhY2tQb2ludGVyID49IDApIHtcbiAgICAgICAgICAgIGlmIChzdGFja1tzdGFja1BvaW50ZXJdLmRlbGltaXRlciA9PT0gY3VycmVudERlbGltaXRlcikge1xuICAgICAgICAgICAgICB3aGlsZSAoc3RhY2tQb2ludGVyIDwgc3RhY2subGVuZ3RoIC0gMSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGVudHJ5ID0gc3RhY2sucG9wKCkhO1xuICAgICAgICAgICAgICAgIHByb2Nlc3NlZCA9IGAke2VudHJ5Lm91dHB1dH0ke2VudHJ5LmRlbGltU3RyaW5nLnN1YnN0cigwLCBlbnRyeS5jb3VudCl9JHtwcm9jZXNzZWR9YDtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmIChkZWxpbUNvdW50ID49IDIgJiYgc3RhY2tbc3RhY2tQb2ludGVyXS5jb3VudCA+PSAyKSB7XG4gICAgICAgICAgICAgICAgcHJvY2Vzc2VkID0gYDxzcGFuIGNsYXNzPVwiVE1NYXJrXCI+JHtjdXJyZW50RGVsaW1pdGVyfSR7Y3VycmVudERlbGltaXRlcn08L3NwYW4+PHN0cm9uZyBjbGFzcz1cIlRNU3Ryb25nXCI+JHtwcm9jZXNzZWR9PC9zdHJvbmc+PHNwYW4gY2xhc3M9XCJUTU1hcmtcIj4ke2N1cnJlbnREZWxpbWl0ZXJ9JHtjdXJyZW50RGVsaW1pdGVyfTwvc3Bhbj5gO1xuICAgICAgICAgICAgICAgIGRlbGltQ291bnQgLT0gMjtcbiAgICAgICAgICAgICAgICBzdGFja1tzdGFja1BvaW50ZXJdLmNvdW50IC09IDI7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcHJvY2Vzc2VkID0gYDxzcGFuIGNsYXNzPVwiVE1NYXJrXCI+JHtjdXJyZW50RGVsaW1pdGVyfTwvc3Bhbj48ZW0gY2xhc3M9XCJUTUVtXCI+JHtwcm9jZXNzZWR9PC9lbT48c3BhbiBjbGFzcz1cIlRNTWFya1wiPiR7Y3VycmVudERlbGltaXRlcn08L3NwYW4+YDtcbiAgICAgICAgICAgICAgICBkZWxpbUNvdW50IC09IDE7XG4gICAgICAgICAgICAgICAgc3RhY2tbc3RhY2tQb2ludGVyXS5jb3VudCAtPSAxO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaWYgKHN0YWNrW3N0YWNrUG9pbnRlcl0uY291bnQgPT09IDApIHtcbiAgICAgICAgICAgICAgICBsZXQgZW50cnkgPSBzdGFjay5wb3AoKSE7XG4gICAgICAgICAgICAgICAgcHJvY2Vzc2VkID0gYCR7ZW50cnkub3V0cHV0fSR7cHJvY2Vzc2VkfWA7XG4gICAgICAgICAgICAgICAgc3RhY2tQb2ludGVyLS07XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHN0YWNrUG9pbnRlci0tO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChkZWxpbUNvdW50ICYmIGNhbk9wZW4pIHtcbiAgICAgICAgICBzdGFjay5wdXNoKHtcbiAgICAgICAgICAgIGRlbGltaXRlcjogY3VycmVudERlbGltaXRlcixcbiAgICAgICAgICAgIGRlbGltU3RyaW5nOiBkZWxpbVN0cmluZyxcbiAgICAgICAgICAgIGNvdW50OiBkZWxpbUNvdW50LFxuICAgICAgICAgICAgb3V0cHV0OiBwcm9jZXNzZWQsXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcHJvY2Vzc2VkID0gXCJcIjtcbiAgICAgICAgICBkZWxpbUNvdW50ID0gMDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChkZWxpbUNvdW50KSB7XG4gICAgICAgICAgcHJvY2Vzc2VkID0gYCR7cHJvY2Vzc2VkfSR7ZGVsaW1TdHJpbmcuc3Vic3RyKDAsIGRlbGltQ291bnQpfWA7XG4gICAgICAgIH1cblxuICAgICAgICBvZmZzZXQgKz0gY2FwWzBdLmxlbmd0aDtcbiAgICAgICAgY29udGludWUgb3V0ZXI7XG4gICAgICB9XG5cbiAgICAgIC8vIENoZWNrIGZvciBzdHJpa2V0aHJvdWdoIGRlbGltaXRlclxuICAgICAgY2FwID0gL15+fi8uZXhlYyhzdHJpbmcpO1xuICAgICAgaWYgKGNhcCkge1xuICAgICAgICBsZXQgY29uc3VtZWQgPSBmYWxzZTtcbiAgICAgICAgbGV0IHN0YWNrUG9pbnRlciA9IHN0YWNrLmxlbmd0aCAtIDE7XG4gICAgICAgIHdoaWxlICghY29uc3VtZWQgJiYgc3RhY2tQb2ludGVyID49IDApIHtcbiAgICAgICAgICBpZiAoc3RhY2tbc3RhY2tQb2ludGVyXS5kZWxpbWl0ZXIgPT09IFwiflwiKSB7XG4gICAgICAgICAgICB3aGlsZSAoc3RhY2tQb2ludGVyIDwgc3RhY2subGVuZ3RoIC0gMSkge1xuICAgICAgICAgICAgICBjb25zdCBlbnRyeSA9IHN0YWNrLnBvcCgpITtcbiAgICAgICAgICAgICAgcHJvY2Vzc2VkID0gYCR7ZW50cnkub3V0cHV0fSR7ZW50cnkuZGVsaW1TdHJpbmcuc3Vic3RyKDAsIGVudHJ5LmNvdW50KX0ke3Byb2Nlc3NlZH1gO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBwcm9jZXNzZWQgPSBgPHNwYW4gY2xhc3M9XCJUTU1hcmtcIj5+fjwvc3Bhbj48ZGVsIGNsYXNzPVwiVE1TdHJpa2V0aHJvdWdoXCI+JHtwcm9jZXNzZWR9PC9kZWw+PHNwYW4gY2xhc3M9XCJUTU1hcmtcIj5+fjwvc3Bhbj5gO1xuICAgICAgICAgICAgbGV0IGVudHJ5ID0gc3RhY2sucG9wKCkhO1xuICAgICAgICAgICAgcHJvY2Vzc2VkID0gYCR7ZW50cnkub3V0cHV0fSR7cHJvY2Vzc2VkfWA7XG4gICAgICAgICAgICBjb25zdW1lZCA9IHRydWU7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHN0YWNrUG9pbnRlci0tO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghY29uc3VtZWQpIHtcbiAgICAgICAgICBzdGFjay5wdXNoKHtcbiAgICAgICAgICAgIGRlbGltaXRlcjogXCJ+XCIsXG4gICAgICAgICAgICBkZWxpbVN0cmluZzogXCJ+flwiLFxuICAgICAgICAgICAgY291bnQ6IDIsXG4gICAgICAgICAgICBvdXRwdXQ6IHByb2Nlc3NlZCxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBwcm9jZXNzZWQgPSBcIlwiO1xuICAgICAgICB9XG5cbiAgICAgICAgb2Zmc2V0ICs9IGNhcFswXS5sZW5ndGg7XG4gICAgICAgIHN0cmluZyA9IHN0cmluZy5zdWJzdHIoY2FwWzBdLmxlbmd0aCk7XG4gICAgICAgIGNvbnRpbnVlIG91dGVyO1xuICAgICAgfVxuXG4gICAgICAvLyBQcm9jZXNzICdkZWZhdWx0JyBydWxlXG4gICAgICBjYXAgPSB0aGlzLm1lcmdlZElubGluZUdyYW1tYXIuZGVmYXVsdC5yZWdleHAuZXhlYyhzdHJpbmcpO1xuICAgICAgaWYgKGNhcCkge1xuICAgICAgICBzdHJpbmcgPSBzdHJpbmcuc3Vic3RyKGNhcFswXS5sZW5ndGgpO1xuICAgICAgICBvZmZzZXQgKz0gY2FwWzBdLmxlbmd0aDtcbiAgICAgICAgcHJvY2Vzc2VkICs9IHRoaXMubWVyZ2VkSW5saW5lR3JhbW1hci5kZWZhdWx0LnJlcGxhY2VtZW50LnJlcGxhY2UoL1xcJChbMS05XSkvZywgKHN0ciwgcDEpID0+IGh0bWxlc2NhcGUoY2FwW3AxXSkpO1xuICAgICAgICBjb250aW51ZSBvdXRlcjtcbiAgICAgIH1cbiAgICAgIHRocm93IFwiSW5maW5pdGUgbG9vcCFcIjtcbiAgICB9XG5cbiAgICB3aGlsZSAoc3RhY2subGVuZ3RoKSB7XG4gICAgICBjb25zdCBlbnRyeSA9IHN0YWNrLnBvcCgpITtcbiAgICAgIHByb2Nlc3NlZCA9IGAke2VudHJ5Lm91dHB1dH0ke2VudHJ5LmRlbGltU3RyaW5nLnN1YnN0cigwLCBlbnRyeS5jb3VudCl9JHtwcm9jZXNzZWR9YDtcbiAgICB9XG5cbiAgICByZXR1cm4gcHJvY2Vzc2VkO1xuICB9XG5cbiAgcHJpdmF0ZSBjb21wdXRlQ29sdW1uKHN0YXJ0Tm9kZTogTm9kZSwgb2Zmc2V0OiBudW1iZXIpOiBudW1iZXIgfCBudWxsIHtcbiAgICBsZXQgbm9kZSA9IHN0YXJ0Tm9kZTtcbiAgICBsZXQgY29sOiBudW1iZXI7XG4gICAgd2hpbGUgKG5vZGUgJiYgbm9kZS5wYXJlbnROb2RlICE9PSB0aGlzLmUpIHtcbiAgICAgIG5vZGUgPSBub2RlLnBhcmVudE5vZGUhO1xuICAgIH1cbiAgICBpZiAobm9kZSA9PT0gbnVsbCkgcmV0dXJuIG51bGw7XG5cbiAgICBpZiAoc3RhcnROb2RlLm5vZGVUeXBlID09PSBOb2RlLlRFWFRfTk9ERSB8fCBvZmZzZXQgPT09IDApIHtcbiAgICAgIGNvbCA9IG9mZnNldDtcbiAgICAgIG5vZGUgPSBzdGFydE5vZGU7XG4gICAgfSBlbHNlIGlmIChvZmZzZXQgPiAwKSB7XG4gICAgICBub2RlID0gc3RhcnROb2RlLmNoaWxkTm9kZXNbb2Zmc2V0IC0gMV07XG4gICAgICBjb2wgPSBub2RlLnRleHRDb250ZW50IS5sZW5ndGg7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbCA9IDA7XG4gICAgICBub2RlID0gc3RhcnROb2RlO1xuICAgIH1cbiAgICB3aGlsZSAobm9kZS5wYXJlbnROb2RlICE9PSB0aGlzLmUpIHtcbiAgICAgIGlmIChub2RlLnByZXZpb3VzU2libGluZykge1xuICAgICAgICBub2RlID0gbm9kZS5wcmV2aW91c1NpYmxpbmc7XG4gICAgICAgIGNvbCArPSBub2RlLnRleHRDb250ZW50IS5sZW5ndGg7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBub2RlID0gbm9kZS5wYXJlbnROb2RlIGFzIHVua25vd24gYXMgQ2hpbGROb2RlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gY29sO1xuICB9XG5cbiAgcHJpdmF0ZSBjb21wdXRlTm9kZUFuZE9mZnNldChyb3c6IG51bWJlciwgY29sOiBudW1iZXIsIGJpbmRSaWdodDogYm9vbGVhbiA9IGZhbHNlKToge25vZGU6IE5vZGUsIG9mZnNldDogbnVtYmVyfSB7XG4gICAgaWYgKHJvdyA+PSB0aGlzLmxpbmVFbGVtZW50cy5sZW5ndGgpIHtcbiAgICAgIHJvdyA9IHRoaXMubGluZUVsZW1lbnRzLmxlbmd0aCAtIDE7XG4gICAgICBjb2wgPSB0aGlzLmxpbmVzW3Jvd10ubGVuZ3RoO1xuICAgIH1cbiAgICBpZiAoY29sID4gdGhpcy5saW5lc1tyb3ddLmxlbmd0aCkge1xuICAgICAgY29sID0gdGhpcy5saW5lc1tyb3ddLmxlbmd0aDtcbiAgICB9XG4gICAgY29uc3QgcGFyZW50Tm9kZSA9IHRoaXMubGluZUVsZW1lbnRzW3Jvd10gYXMgSFRNTEVsZW1lbnQ7XG4gICAgbGV0IG5vZGUgPSBwYXJlbnROb2RlLmZpcnN0Q2hpbGQ7XG5cbiAgICBsZXQgY2hpbGRyZW5Db21wbGV0ZSA9IGZhbHNlO1xuICAgIGxldCBydiA9IHtcbiAgICAgIG5vZGU6IHBhcmVudE5vZGUuZmlyc3RDaGlsZCA/IHBhcmVudE5vZGUuZmlyc3RDaGlsZCA6IHBhcmVudE5vZGUsXG4gICAgICBvZmZzZXQ6IDAsXG4gICAgfTtcblxuICAgIHdoaWxlIChub2RlICE9PSBwYXJlbnROb2RlKSB7XG4gICAgICBpZiAoIWNoaWxkcmVuQ29tcGxldGUgJiYgbm9kZSEubm9kZVR5cGUgPT09IE5vZGUuVEVYVF9OT0RFKSB7XG4gICAgICAgIGlmIChub2RlIS5ub2RlVmFsdWUhLmxlbmd0aCA+PSBjb2wpIHtcbiAgICAgICAgICBpZiAoYmluZFJpZ2h0ICYmIG5vZGUhLm5vZGVWYWx1ZSEubGVuZ3RoID09PSBjb2wpIHtcbiAgICAgICAgICAgIHJ2ID0geyBub2RlOiBub2RlISwgb2Zmc2V0OiBjb2wgfTtcbiAgICAgICAgICAgIGNvbCA9IDA7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB7IG5vZGU6IG5vZGUhLCBvZmZzZXQ6IGNvbCB9O1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb2wgLT0gbm9kZSEubm9kZVZhbHVlIS5sZW5ndGg7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICghY2hpbGRyZW5Db21wbGV0ZSAmJiBub2RlIS5maXJzdENoaWxkKSB7XG4gICAgICAgIG5vZGUgPSBub2RlIS5maXJzdENoaWxkO1xuICAgICAgfSBlbHNlIGlmIChub2RlIS5uZXh0U2libGluZykge1xuICAgICAgICBjaGlsZHJlbkNvbXBsZXRlID0gZmFsc2U7XG4gICAgICAgIG5vZGUgPSBub2RlIS5uZXh0U2libGluZztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNoaWxkcmVuQ29tcGxldGUgPSB0cnVlO1xuICAgICAgICBub2RlID0gbm9kZSEucGFyZW50Tm9kZSBhcyB1bmtub3duIGFzIENoaWxkTm9kZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcnY7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZUxpbmVDb250ZW50c0FuZEZvcm1hdHRpbmcoKTogdm9pZCB7XG4gICAgdGhpcy5jbGVhckRpcnR5RmxhZygpO1xuICAgIHRoaXMudXBkYXRlTGluZUNvbnRlbnRzKCk7XG4gICAgdGhpcy51cGRhdGVGb3JtYXR0aW5nKCk7XG4gIH1cblxuICBwcml2YXRlIGNsZWFyRGlydHlGbGFnKCk6IHZvaWQge1xuICAgIHRoaXMubGluZURpcnR5ID0gbmV3IEFycmF5KHRoaXMubGluZXMubGVuZ3RoKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMubGluZURpcnR5Lmxlbmd0aDsgaSsrKSB7XG4gICAgICB0aGlzLmxpbmVEaXJ0eVtpXSA9IGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlTGluZUNvbnRlbnRzKCk6IHZvaWQge1xuICAgIGxldCBsaW5lRGVsdGEgPSB0aGlzLmUhLmNoaWxkRWxlbWVudENvdW50IC0gdGhpcy5saW5lcy5sZW5ndGg7XG4gICAgaWYgKGxpbmVEZWx0YSkge1xuICAgICAgbGV0IGZpcnN0Q2hhbmdlZExpbmUgPSAwO1xuICAgICAgd2hpbGUgKFxuICAgICAgICBmaXJzdENoYW5nZWRMaW5lIDw9IHRoaXMubGluZXMubGVuZ3RoICYmXG4gICAgICAgIGZpcnN0Q2hhbmdlZExpbmUgPD0gdGhpcy5saW5lRWxlbWVudHMubGVuZ3RoICYmXG4gICAgICAgIHRoaXMubGluZUVsZW1lbnRzW2ZpcnN0Q2hhbmdlZExpbmVdICYmXG4gICAgICAgIHRoaXMubGluZXNbZmlyc3RDaGFuZ2VkTGluZV0gPT09ICh0aGlzLmxpbmVFbGVtZW50c1tmaXJzdENoYW5nZWRMaW5lXSBhcyBIVE1MRWxlbWVudCkudGV4dENvbnRlbnQgJiZcbiAgICAgICAgdGhpcy5saW5lVHlwZXNbZmlyc3RDaGFuZ2VkTGluZV0gPT09ICh0aGlzLmxpbmVFbGVtZW50c1tmaXJzdENoYW5nZWRMaW5lXSBhcyBIVE1MRWxlbWVudCkuY2xhc3NOYW1lXG4gICAgICApIHtcbiAgICAgICAgZmlyc3RDaGFuZ2VkTGluZSsrO1xuICAgICAgfVxuXG4gICAgICBsZXQgbGFzdENoYW5nZWRMaW5lID0gLTE7XG4gICAgICB3aGlsZSAoXG4gICAgICAgIC1sYXN0Q2hhbmdlZExpbmUgPCB0aGlzLmxpbmVzLmxlbmd0aCAmJlxuICAgICAgICAtbGFzdENoYW5nZWRMaW5lIDwgdGhpcy5saW5lRWxlbWVudHMubGVuZ3RoICYmXG4gICAgICAgIHRoaXMubGluZXNbdGhpcy5saW5lcy5sZW5ndGggKyBsYXN0Q2hhbmdlZExpbmVdID09PVxuICAgICAgICAgICh0aGlzLmxpbmVFbGVtZW50c1t0aGlzLmxpbmVFbGVtZW50cy5sZW5ndGggKyBsYXN0Q2hhbmdlZExpbmVdIGFzIEhUTUxFbGVtZW50KS50ZXh0Q29udGVudCAmJlxuICAgICAgICB0aGlzLmxpbmVUeXBlc1t0aGlzLmxpbmVzLmxlbmd0aCArIGxhc3RDaGFuZ2VkTGluZV0gPT09XG4gICAgICAgICAgKHRoaXMubGluZUVsZW1lbnRzW3RoaXMubGluZUVsZW1lbnRzLmxlbmd0aCArIGxhc3RDaGFuZ2VkTGluZV0gYXMgSFRNTEVsZW1lbnQpLmNsYXNzTmFtZVxuICAgICAgKSB7XG4gICAgICAgIGxhc3RDaGFuZ2VkTGluZS0tO1xuICAgICAgfVxuXG4gICAgICBsZXQgbGluZXNUb0RlbGV0ZSA9IHRoaXMubGluZXMubGVuZ3RoICsgbGFzdENoYW5nZWRMaW5lICsgMSAtIGZpcnN0Q2hhbmdlZExpbmU7XG4gICAgICBpZiAobGluZXNUb0RlbGV0ZSA8IC1saW5lRGVsdGEpIGxpbmVzVG9EZWxldGUgPSAtbGluZURlbHRhO1xuICAgICAgaWYgKGxpbmVzVG9EZWxldGUgPCAwKSBsaW5lc1RvRGVsZXRlID0gMDtcblxuICAgICAgbGV0IGxpbmVzVG9BZGQgPSBbXTtcbiAgICAgIGZvciAobGV0IGwgPSAwOyBsIDwgbGluZXNUb0RlbGV0ZSArIGxpbmVEZWx0YTsgbCsrKSB7XG4gICAgICAgIGxpbmVzVG9BZGQucHVzaCgodGhpcy5saW5lRWxlbWVudHNbZmlyc3RDaGFuZ2VkTGluZSArIGxdIGFzIEhUTUxFbGVtZW50KS50ZXh0Q29udGVudCB8fCBcIlwiKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuc3BsaWNlTGluZXMoZmlyc3RDaGFuZ2VkTGluZSwgbGluZXNUb0RlbGV0ZSwgbGluZXNUb0FkZCwgZmFsc2UpO1xuICAgIH0gZWxzZSB7XG4gICAgICBmb3IgKGxldCBsaW5lID0gMDsgbGluZSA8IHRoaXMubGluZUVsZW1lbnRzLmxlbmd0aDsgbGluZSsrKSB7XG4gICAgICAgIGxldCBlID0gdGhpcy5saW5lRWxlbWVudHNbbGluZV0gYXMgSFRNTEVsZW1lbnQ7XG4gICAgICAgIGxldCBjdCA9IGUudGV4dENvbnRlbnQgfHwgXCJcIjtcbiAgICAgICAgaWYgKHRoaXMubGluZXNbbGluZV0gIT09IGN0IHx8IHRoaXMubGluZVR5cGVzW2xpbmVdICE9PSBlLmNsYXNzTmFtZSkge1xuICAgICAgICAgIHRoaXMubGluZXNbbGluZV0gPSBjdDtcbiAgICAgICAgICB0aGlzLmxpbmVUeXBlc1tsaW5lXSA9IGUuY2xhc3NOYW1lO1xuICAgICAgICAgIHRoaXMubGluZURpcnR5W2xpbmVdID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc3BsaWNlTGluZXMoXG4gICAgc3RhcnRMaW5lOiBudW1iZXIsXG4gICAgbGluZXNUb0RlbGV0ZTogbnVtYmVyID0gMCxcbiAgICBsaW5lc1RvSW5zZXJ0OiBzdHJpbmdbXSA9IFtdLFxuICAgIGFkanVzdExpbmVFbGVtZW50czogYm9vbGVhbiA9IHRydWVcbiAgKTogdm9pZCB7XG4gICAgaWYgKGFkanVzdExpbmVFbGVtZW50cykge1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsaW5lc1RvRGVsZXRlOyBpKyspIHtcbiAgICAgICAgdGhpcy5lIS5yZW1vdmVDaGlsZCh0aGlzLmUhLmNoaWxkTm9kZXNbc3RhcnRMaW5lXSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgbGV0IGluc2VydGVkQmxhbmsgPSBbXTtcbiAgICBsZXQgaW5zZXJ0ZWREaXJ0eSA9IFtdO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsaW5lc1RvSW5zZXJ0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICBpbnNlcnRlZEJsYW5rLnB1c2goXCJcIik7XG4gICAgICBpbnNlcnRlZERpcnR5LnB1c2godHJ1ZSk7XG4gICAgICBpZiAoYWRqdXN0TGluZUVsZW1lbnRzKSB7XG4gICAgICAgIGlmICh0aGlzLmUhLmNoaWxkTm9kZXNbc3RhcnRMaW5lXSlcbiAgICAgICAgICB0aGlzLmUhLmluc2VydEJlZm9yZShkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpLCB0aGlzLmUhLmNoaWxkTm9kZXNbc3RhcnRMaW5lXSk7XG4gICAgICAgIGVsc2UgdGhpcy5lIS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmxpbmVzLnNwbGljZShzdGFydExpbmUsIGxpbmVzVG9EZWxldGUsIC4uLmxpbmVzVG9JbnNlcnQpO1xuICAgIHRoaXMubGluZVR5cGVzLnNwbGljZShzdGFydExpbmUsIGxpbmVzVG9EZWxldGUsIC4uLmluc2VydGVkQmxhbmspO1xuICAgIHRoaXMubGluZURpcnR5LnNwbGljZShzdGFydExpbmUsIGxpbmVzVG9EZWxldGUsIC4uLmluc2VydGVkRGlydHkpO1xuICB9XG5cbiAgcHJpdmF0ZSBmaXhOb2RlSGllcmFyY2h5KCk6IHZvaWQge1xuICAgIGNvbnN0IG9yaWdpbmFsQ2hpbGRyZW4gPSBBcnJheS5mcm9tKHRoaXMuZSEuY2hpbGROb2Rlcyk7XG5cbiAgICBjb25zdCByZXBsYWNlQ2hpbGQgPSAoY2hpbGQ6IE5vZGUsIC4uLm5ld0NoaWxkcmVuOiBOb2RlW10pID0+IHtcbiAgICAgIGNvbnN0IHBhcmVudCA9IGNoaWxkLnBhcmVudEVsZW1lbnQhO1xuICAgICAgY29uc3QgbmV4dFNpYmxpbmcgPSBjaGlsZC5uZXh0U2libGluZztcbiAgICAgIHBhcmVudC5yZW1vdmVDaGlsZChjaGlsZCk7XG4gICAgICBuZXdDaGlsZHJlbi5mb3JFYWNoKChuZXdDaGlsZCkgPT5cbiAgICAgICAgbmV4dFNpYmxpbmcgPyBwYXJlbnQuaW5zZXJ0QmVmb3JlKG5ld0NoaWxkLCBuZXh0U2libGluZykgOiBwYXJlbnQuYXBwZW5kQ2hpbGQobmV3Q2hpbGQpXG4gICAgICApO1xuICAgIH07XG5cbiAgICBvcmlnaW5hbENoaWxkcmVuLmZvckVhY2goKGNoaWxkKSA9PiB7XG4gICAgICBpZiAoY2hpbGQubm9kZVR5cGUgIT09IE5vZGUuRUxFTUVOVF9OT0RFIHx8IChjaGlsZCBhcyBIVE1MRWxlbWVudCkudGFnTmFtZSAhPT0gXCJESVZcIikge1xuICAgICAgICBjb25zdCBkaXZXcmFwcGVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICAgICAgcmVwbGFjZUNoaWxkKGNoaWxkLCBkaXZXcmFwcGVyKTtcbiAgICAgICAgZGl2V3JhcHBlci5hcHBlbmRDaGlsZChjaGlsZCk7XG4gICAgICB9IGVsc2UgaWYgKGNoaWxkLmNoaWxkTm9kZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIGNoaWxkLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJiclwiKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBncmFuZENoaWxkcmVuID0gQXJyYXkuZnJvbShjaGlsZC5jaGlsZE5vZGVzKTtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIGdyYW5kQ2hpbGRyZW4uc29tZShcbiAgICAgICAgICAgIChncmFuZENoaWxkKSA9PlxuICAgICAgICAgICAgICBncmFuZENoaWxkLm5vZGVUeXBlID09PSBOb2RlLkVMRU1FTlRfTk9ERSAmJiAoZ3JhbmRDaGlsZCBhcyBIVE1MRWxlbWVudCkudGFnTmFtZSA9PT0gXCJESVZcIlxuICAgICAgICAgIClcbiAgICAgICAgKSB7XG4gICAgICAgICAgcmV0dXJuIHJlcGxhY2VDaGlsZChjaGlsZCwgLi4uZ3JhbmRDaGlsZHJlbik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgcGFyc2VMaW5rT3JJbWFnZShvcmlnaW5hbFN0cmluZzogc3RyaW5nLCBpc0ltYWdlOiBib29sZWFuKToge291dHB1dDogc3RyaW5nLCBjaGFyQ291bnQ6IG51bWJlcn0gfCBmYWxzZSB7XG4gICAgLy8gU2tpcCB0aGUgb3BlbmluZyBicmFja2V0XG4gICAgbGV0IHRleHRPZmZzZXQgPSBpc0ltYWdlID8gMiA6IDE7XG4gICAgbGV0IG9wZW5lciA9IG9yaWdpbmFsU3RyaW5nLnN1YnN0cigwLCB0ZXh0T2Zmc2V0KTtcbiAgICBsZXQgdHlwZSA9IGlzSW1hZ2UgPyBcIlRNSW1hZ2VcIiA6IFwiVE1MaW5rXCI7XG4gICAgbGV0IGN1cnJlbnRPZmZzZXQgPSB0ZXh0T2Zmc2V0O1xuXG4gICAgbGV0IGJyYWNrZXRMZXZlbCA9IDE7XG4gICAgbGV0IGxpbmtUZXh0OiBzdHJpbmcgfCBmYWxzZSA9IGZhbHNlO1xuICAgIGxldCBsaW5rUmVmOiBzdHJpbmcgfCBmYWxzZSA9IGZhbHNlO1xuICAgIGxldCBsaW5rTGFiZWw6IHN0cmluZ1tdID0gW107XG4gICAgbGV0IGxpbmtEZXRhaWxzOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgdGV4dE91dGVyOiB3aGlsZSAoXG4gICAgICBjdXJyZW50T2Zmc2V0IDwgb3JpZ2luYWxTdHJpbmcubGVuZ3RoICYmXG4gICAgICBsaW5rVGV4dCA9PT0gZmFsc2VcbiAgICApIHtcbiAgICAgIGxldCBzdHJpbmcgPSBvcmlnaW5hbFN0cmluZy5zdWJzdHIoY3VycmVudE9mZnNldCk7XG5cbiAgICAgIC8vIENhcHR1cmUgYW55IGVzY2FwZXMgYW5kIGNvZGUgYmxvY2tzIGF0IGN1cnJlbnQgcG9zaXRpb25cbiAgICAgIGZvciAobGV0IHJ1bGUgb2YgW1wiZXNjYXBlXCIsIFwiY29kZVwiLCBcImF1dG9saW5rXCIsIFwiaHRtbFwiXSkge1xuICAgICAgICBsZXQgY2FwID0gdGhpcy5tZXJnZWRJbmxpbmVHcmFtbWFyW3J1bGVdLnJlZ2V4cC5leGVjKHN0cmluZyk7XG4gICAgICAgIGlmIChjYXApIHtcbiAgICAgICAgICBjdXJyZW50T2Zmc2V0ICs9IGNhcFswXS5sZW5ndGg7XG4gICAgICAgICAgY29udGludWUgdGV4dE91dGVyO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIENoZWNrIGZvciBpbWFnZVxuICAgICAgaWYgKHN0cmluZy5tYXRjaCh0aGlzLm1lcmdlZElubGluZUdyYW1tYXIuaW1hZ2VPcGVuLnJlZ2V4cCkpIHtcbiAgICAgICAgYnJhY2tldExldmVsKys7XG4gICAgICAgIGN1cnJlbnRPZmZzZXQgKz0gMjtcbiAgICAgICAgY29udGludWUgdGV4dE91dGVyO1xuICAgICAgfVxuXG4gICAgICAvLyBDaGVjayBmb3IgbGlua1xuICAgICAgaWYgKHN0cmluZy5tYXRjaCh0aGlzLm1lcmdlZElubGluZUdyYW1tYXIubGlua09wZW4ucmVnZXhwKSkge1xuICAgICAgICBicmFja2V0TGV2ZWwrKztcbiAgICAgICAgaWYgKCFpc0ltYWdlKSB7XG4gICAgICAgICAgaWYgKHRoaXMucGFyc2VMaW5rT3JJbWFnZShzdHJpbmcsIGZhbHNlKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjdXJyZW50T2Zmc2V0ICs9IDE7XG4gICAgICAgIGNvbnRpbnVlIHRleHRPdXRlcjtcbiAgICAgIH1cblxuICAgICAgLy8gQ2hlY2sgZm9yIGNsb3NpbmcgYnJhY2tldFxuICAgICAgaWYgKHN0cmluZy5tYXRjaCgvXlxcXS8pKSB7XG4gICAgICAgIGJyYWNrZXRMZXZlbC0tO1xuICAgICAgICBpZiAoYnJhY2tldExldmVsID09PSAwKSB7XG4gICAgICAgICAgbGlua1RleHQgPSBvcmlnaW5hbFN0cmluZy5zdWJzdHIodGV4dE9mZnNldCwgY3VycmVudE9mZnNldCAtIHRleHRPZmZzZXQpO1xuICAgICAgICAgIGN1cnJlbnRPZmZzZXQrKztcbiAgICAgICAgICBjb250aW51ZSB0ZXh0T3V0ZXI7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gTm90aGluZyBtYXRjaGVzLCBwcm9jZWVkIHRvIG5leHQgY2hhclxuICAgICAgY3VycmVudE9mZnNldCsrO1xuICAgIH1cblxuICAgIC8vIERpZCB3ZSBmaW5kIGEgbGluayB0ZXh0P1xuICAgIGlmIChsaW5rVGV4dCA9PT0gZmFsc2UpIHJldHVybiBmYWxzZTtcblxuICAgIC8vIENoZWNrIHdoYXQgdHlwZSBvZiBsaW5rIHRoaXMgaXNcbiAgICBsZXQgbmV4dENoYXIgPSBjdXJyZW50T2Zmc2V0IDwgb3JpZ2luYWxTdHJpbmcubGVuZ3RoID8gb3JpZ2luYWxTdHJpbmcuc3Vic3RyKGN1cnJlbnRPZmZzZXQsIDEpIDogXCJcIjtcblxuICAgIC8vIFJFRkVSRU5DRSBMSU5LU1xuICAgIGlmIChuZXh0Q2hhciA9PT0gXCJbXCIpIHtcbiAgICAgIGxldCBzdHJpbmcgPSBvcmlnaW5hbFN0cmluZy5zdWJzdHIoY3VycmVudE9mZnNldCk7XG4gICAgICBsZXQgY2FwID0gdGhpcy5tZXJnZWRJbmxpbmVHcmFtbWFyLmxpbmtMYWJlbC5yZWdleHAuZXhlYyhzdHJpbmcpO1xuICAgICAgaWYgKGNhcCkge1xuICAgICAgICBjdXJyZW50T2Zmc2V0ICs9IGNhcFswXS5sZW5ndGg7XG4gICAgICAgIGxpbmtMYWJlbC5wdXNoKGNhcFsxXSwgY2FwWzJdLCBjYXBbM10pO1xuICAgICAgICBpZiAoY2FwW3RoaXMubWVyZ2VkSW5saW5lR3JhbW1hci5saW5rTGFiZWwubGFiZWxQbGFjZWhvbGRlciFdKSB7XG4gICAgICAgICAgbGlua1JlZiA9IGNhcFt0aGlzLm1lcmdlZElubGluZUdyYW1tYXIubGlua0xhYmVsLmxhYmVsUGxhY2Vob2xkZXIhXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBsaW5rUmVmID0gbGlua1RleHQudHJpbSgpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChuZXh0Q2hhciAhPT0gXCIoXCIpIHtcbiAgICAgIC8vIFNob3J0Y3V0IHJlZiBsaW5rXG4gICAgICBsaW5rUmVmID0gbGlua1RleHQudHJpbSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBJTkxJTkUgTElOS1NcbiAgICAgIGN1cnJlbnRPZmZzZXQrKztcbiAgICAgIGxldCBwYXJlbnRoZXNpc0xldmVsID0gMTtcblxuICAgICAgaW5saW5lT3V0ZXI6IHdoaWxlIChjdXJyZW50T2Zmc2V0IDwgb3JpZ2luYWxTdHJpbmcubGVuZ3RoICYmIHBhcmVudGhlc2lzTGV2ZWwgPiAwKSB7XG4gICAgICAgIGxldCBzdHJpbmcgPSBvcmlnaW5hbFN0cmluZy5zdWJzdHIoY3VycmVudE9mZnNldCk7XG5cbiAgICAgICAgLy8gUHJvY2VzcyB3aGl0ZXNwYWNlXG4gICAgICAgIGxldCBjYXAgPSAvXlxccysvLmV4ZWMoc3RyaW5nKTtcbiAgICAgICAgaWYgKGNhcCkge1xuICAgICAgICAgIHN3aXRjaCAobGlua0RldGFpbHMubGVuZ3RoKSB7XG4gICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgIGxpbmtEZXRhaWxzLnB1c2goY2FwWzBdKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgIGxpbmtEZXRhaWxzLnB1c2goY2FwWzBdKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgIGlmIChsaW5rRGV0YWlsc1swXS5tYXRjaCgvPC8pKSB7XG4gICAgICAgICAgICAgICAgbGlua0RldGFpbHNbMV0gPSBsaW5rRGV0YWlsc1sxXS5jb25jYXQoY2FwWzBdKTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAocGFyZW50aGVzaXNMZXZlbCAhPT0gMSkgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIGxpbmtEZXRhaWxzLnB1c2goXCJcIik7XG4gICAgICAgICAgICAgICAgbGlua0RldGFpbHMucHVzaChjYXBbMF0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgICBsaW5rRGV0YWlscy5wdXNoKGNhcFswXSk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSA0OlxuICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgICAgIGxpbmtEZXRhaWxzLnB1c2goXCJcIik7XG4gICAgICAgICAgICBjYXNlIDY6XG4gICAgICAgICAgICAgIGxpbmtEZXRhaWxzWzVdID0gbGlua0RldGFpbHNbNV0uY29uY2F0KGNhcFswXSk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSA3OlxuICAgICAgICAgICAgICBsaW5rRGV0YWlsc1s2XSA9IGxpbmtEZXRhaWxzWzZdLmNvbmNhdChjYXBbMF0pO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY3VycmVudE9mZnNldCArPSBjYXBbMF0ubGVuZ3RoO1xuICAgICAgICAgIGNvbnRpbnVlIGlubGluZU91dGVyO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gUHJvY2VzcyBiYWNrc2xhc2ggZXNjYXBlc1xuICAgICAgICBjYXAgPSB0aGlzLm1lcmdlZElubGluZUdyYW1tYXIuZXNjYXBlLnJlZ2V4cC5leGVjKHN0cmluZyk7XG4gICAgICAgIGlmIChjYXApIHtcbiAgICAgICAgICBzd2l0Y2ggKGxpbmtEZXRhaWxzLmxlbmd0aCkge1xuICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICBsaW5rRGV0YWlscy5wdXNoKFwiXCIpO1xuICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICBsaW5rRGV0YWlscy5wdXNoKGNhcFswXSk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICBsaW5rRGV0YWlsc1sxXSA9IGxpbmtEZXRhaWxzWzFdLmNvbmNhdChjYXBbMF0pO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgY2FzZSA0OlxuICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgICAgIGxpbmtEZXRhaWxzLnB1c2goXCJcIik7XG4gICAgICAgICAgICBjYXNlIDY6XG4gICAgICAgICAgICAgIGxpbmtEZXRhaWxzWzVdID0gbGlua0RldGFpbHNbNV0uY29uY2F0KGNhcFswXSk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjdXJyZW50T2Zmc2V0ICs9IGNhcFswXS5sZW5ndGg7XG4gICAgICAgICAgY29udGludWUgaW5saW5lT3V0ZXI7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBQcm9jZXNzIG9wZW5pbmcgYW5nbGUgYnJhY2tldFxuICAgICAgICBpZiAobGlua0RldGFpbHMubGVuZ3RoIDwgMiAmJiBzdHJpbmcubWF0Y2goL148LykpIHtcbiAgICAgICAgICBpZiAobGlua0RldGFpbHMubGVuZ3RoID09PSAwKSBsaW5rRGV0YWlscy5wdXNoKFwiXCIpO1xuICAgICAgICAgIGxpbmtEZXRhaWxzWzBdID0gbGlua0RldGFpbHNbMF0uY29uY2F0KFwiPFwiKTtcbiAgICAgICAgICBjdXJyZW50T2Zmc2V0Kys7XG4gICAgICAgICAgY29udGludWUgaW5saW5lT3V0ZXI7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBQcm9jZXNzIGNsb3NpbmcgYW5nbGUgYnJhY2tldFxuICAgICAgICBpZiAoKGxpbmtEZXRhaWxzLmxlbmd0aCA9PT0gMSB8fCBsaW5rRGV0YWlscy5sZW5ndGggPT09IDIpICYmIHN0cmluZy5tYXRjaCgvXj4vKSkge1xuICAgICAgICAgIGlmIChsaW5rRGV0YWlscy5sZW5ndGggPT09IDEpIGxpbmtEZXRhaWxzLnB1c2goXCJcIik7XG4gICAgICAgICAgbGlua0RldGFpbHMucHVzaChcIj5cIik7XG4gICAgICAgICAgY3VycmVudE9mZnNldCsrO1xuICAgICAgICAgIGNvbnRpbnVlIGlubGluZU91dGVyO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gUHJvY2VzcyBub24tcGFyZW50aGVzaXMgZGVsaW1pdGVyIGZvciB0aXRsZVxuICAgICAgICBjYXAgPSAvXltcIiddLy5leGVjKHN0cmluZyk7XG4gICAgICAgIGlmIChjYXAgJiYgKGxpbmtEZXRhaWxzLmxlbmd0aCA9PT0gMCB8fCBsaW5rRGV0YWlscy5sZW5ndGggPT09IDEgfHwgbGlua0RldGFpbHMubGVuZ3RoID09PSA0KSkge1xuICAgICAgICAgIHdoaWxlIChsaW5rRGV0YWlscy5sZW5ndGggPCA0KSBsaW5rRGV0YWlscy5wdXNoKFwiXCIpO1xuICAgICAgICAgIGxpbmtEZXRhaWxzLnB1c2goY2FwWzBdKTtcbiAgICAgICAgICBjdXJyZW50T2Zmc2V0Kys7XG4gICAgICAgICAgY29udGludWUgaW5saW5lT3V0ZXI7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY2FwICYmIChsaW5rRGV0YWlscy5sZW5ndGggPT09IDUgfHwgbGlua0RldGFpbHMubGVuZ3RoID09PSA2KSAmJiBsaW5rRGV0YWlsc1s0XSA9PT0gY2FwWzBdKSB7XG4gICAgICAgICAgaWYgKGxpbmtEZXRhaWxzLmxlbmd0aCA9PT0gNSkgbGlua0RldGFpbHMucHVzaChcIlwiKTtcbiAgICAgICAgICBsaW5rRGV0YWlscy5wdXNoKGNhcFswXSk7XG4gICAgICAgICAgY3VycmVudE9mZnNldCsrO1xuICAgICAgICAgIGNvbnRpbnVlIGlubGluZU91dGVyO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gUHJvY2VzcyBvcGVuaW5nIHBhcmVudGhlc2lzXG4gICAgICAgIGlmIChzdHJpbmcubWF0Y2goL15cXCgvKSkge1xuICAgICAgICAgIHN3aXRjaCAobGlua0RldGFpbHMubGVuZ3RoKSB7XG4gICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgIGxpbmtEZXRhaWxzLnB1c2goXCJcIik7XG4gICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgIGxpbmtEZXRhaWxzLnB1c2goXCJcIik7XG4gICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgIGxpbmtEZXRhaWxzWzFdID0gbGlua0RldGFpbHNbMV0uY29uY2F0KFwiKFwiKTtcbiAgICAgICAgICAgICAgaWYgKCFsaW5rRGV0YWlsc1swXS5tYXRjaCgvPCQvKSkgcGFyZW50aGVzaXNMZXZlbCsrO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgICAgbGlua0RldGFpbHMucHVzaChcIlwiKTtcbiAgICAgICAgICAgIGNhc2UgNDpcbiAgICAgICAgICAgICAgbGlua0RldGFpbHMucHVzaChcIihcIik7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSA1OlxuICAgICAgICAgICAgICBsaW5rRGV0YWlscy5wdXNoKFwiXCIpO1xuICAgICAgICAgICAgY2FzZSA2OlxuICAgICAgICAgICAgICBpZiAobGlua0RldGFpbHNbNF0gPT09IFwiKFwiKSByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgIGxpbmtEZXRhaWxzWzVdID0gbGlua0RldGFpbHNbNV0uY29uY2F0KFwiKFwiKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICAgIGN1cnJlbnRPZmZzZXQrKztcbiAgICAgICAgICBjb250aW51ZSBpbmxpbmVPdXRlcjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFByb2Nlc3MgY2xvc2luZyBwYXJlbnRoZXNpc1xuICAgICAgICBpZiAoc3RyaW5nLm1hdGNoKC9eXFwpLykpIHtcbiAgICAgICAgICBpZiAobGlua0RldGFpbHMubGVuZ3RoIDw9IDIpIHtcbiAgICAgICAgICAgIHdoaWxlIChsaW5rRGV0YWlscy5sZW5ndGggPCAyKSBsaW5rRGV0YWlscy5wdXNoKFwiXCIpO1xuICAgICAgICAgICAgaWYgKCFsaW5rRGV0YWlsc1swXS5tYXRjaCgvPCQvKSkgcGFyZW50aGVzaXNMZXZlbC0tO1xuICAgICAgICAgICAgaWYgKHBhcmVudGhlc2lzTGV2ZWwgPiAwKSB7XG4gICAgICAgICAgICAgIGxpbmtEZXRhaWxzWzFdID0gbGlua0RldGFpbHNbMV0uY29uY2F0KFwiKVwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2UgaWYgKGxpbmtEZXRhaWxzLmxlbmd0aCA9PT0gNSB8fCBsaW5rRGV0YWlscy5sZW5ndGggPT09IDYpIHtcbiAgICAgICAgICAgIGlmIChsaW5rRGV0YWlsc1s0XSA9PT0gXCIoXCIpIHtcbiAgICAgICAgICAgICAgaWYgKGxpbmtEZXRhaWxzLmxlbmd0aCA9PT0gNSkgbGlua0RldGFpbHMucHVzaChcIlwiKTtcbiAgICAgICAgICAgICAgbGlua0RldGFpbHMucHVzaChcIilcIik7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBpZiAobGlua0RldGFpbHMubGVuZ3RoID09PSA1KSBsaW5rRGV0YWlscy5wdXNoKFwiKVwiKTtcbiAgICAgICAgICAgICAgZWxzZSBsaW5rRGV0YWlsc1s1XSA9IGxpbmtEZXRhaWxzWzVdLmNvbmNhdChcIilcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHBhcmVudGhlc2lzTGV2ZWwtLTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAocGFyZW50aGVzaXNMZXZlbCA9PT0gMCkge1xuICAgICAgICAgICAgd2hpbGUgKGxpbmtEZXRhaWxzLmxlbmd0aCA8IDcpIGxpbmtEZXRhaWxzLnB1c2goXCJcIik7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY3VycmVudE9mZnNldCsrO1xuICAgICAgICAgIGNvbnRpbnVlIGlubGluZU91dGVyO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQW55IG9sZCBjaGFyYWN0ZXJcbiAgICAgICAgY2FwID0gL14uLy5leGVjKHN0cmluZyk7XG4gICAgICAgIGlmIChjYXApIHtcbiAgICAgICAgICBzd2l0Y2ggKGxpbmtEZXRhaWxzLmxlbmd0aCkge1xuICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICBsaW5rRGV0YWlscy5wdXNoKFwiXCIpO1xuICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICBsaW5rRGV0YWlscy5wdXNoKGNhcFswXSk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICBsaW5rRGV0YWlsc1sxXSA9IGxpbmtEZXRhaWxzWzFdLmNvbmNhdChjYXBbMF0pO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgY2FzZSA0OlxuICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgICAgIGxpbmtEZXRhaWxzLnB1c2goXCJcIik7XG4gICAgICAgICAgICBjYXNlIDY6XG4gICAgICAgICAgICAgIGxpbmtEZXRhaWxzWzVdID0gbGlua0RldGFpbHNbNV0uY29uY2F0KGNhcFswXSk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjdXJyZW50T2Zmc2V0ICs9IGNhcFswXS5sZW5ndGg7XG4gICAgICAgICAgY29udGludWUgaW5saW5lT3V0ZXI7XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgXCJJbmZpbml0ZSBsb29wXCI7XG4gICAgICB9XG4gICAgICBpZiAocGFyZW50aGVzaXNMZXZlbCA+IDApIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAobGlua1JlZiAhPT0gZmFsc2UpIHtcbiAgICAgIC8vIFJlZmVyZW5jZSBsaW5rOyBjaGVjayB0aGF0IGxpbmtSZWYgaXMgdmFsaWRcbiAgICAgIGxldCB2YWxpZCA9IGZhbHNlO1xuICAgICAgZm9yIChsZXQgbGFiZWwgb2YgdGhpcy5saW5rTGFiZWxzKSB7XG4gICAgICAgIGlmIChsYWJlbCA9PT0gbGlua1JlZikge1xuICAgICAgICAgIHZhbGlkID0gdHJ1ZTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgbGV0IGxhYmVsQ2xhc3MgPSB2YWxpZCA/IFwiVE1MaW5rTGFiZWwgVE1MaW5rTGFiZWxfVmFsaWRcIiA6IFwiVE1MaW5rTGFiZWwgVE1MaW5rTGFiZWxfSW52YWxpZFwiO1xuICAgICAgbGV0IG91dHB1dCA9IGA8c3BhbiBjbGFzcz1cIlRNTWFyayBUTU1hcmtfJHt0eXBlfVwiPiR7b3BlbmVyfTwvc3Bhbj48c3BhbiBjbGFzcz1cIiR7dHlwZX0gJHtcbiAgICAgICAgbGlua0xhYmVsLmxlbmd0aCA8IDMgfHwgIWxpbmtMYWJlbFsxXSA/IGxhYmVsQ2xhc3MgOiBcIlwiXG4gICAgICB9XCI+JHt0aGlzLnByb2Nlc3NJbmxpbmVTdHlsZXMobGlua1RleHQpfTwvc3Bhbj48c3BhbiBjbGFzcz1cIlRNTWFyayBUTU1hcmtfJHt0eXBlfVwiPl08L3NwYW4+YDtcblxuICAgICAgaWYgKGxpbmtMYWJlbC5sZW5ndGggPj0gMykge1xuICAgICAgICBvdXRwdXQgPSBvdXRwdXQuY29uY2F0KFxuICAgICAgICAgIGA8c3BhbiBjbGFzcz1cIlRNTWFyayBUTU1hcmtfJHt0eXBlfVwiPiR7bGlua0xhYmVsWzBdfTwvc3Bhbj5gLFxuICAgICAgICAgIGA8c3BhbiBjbGFzcz1cIiR7bGFiZWxDbGFzc31cIj4ke2xpbmtMYWJlbFsxXX08L3NwYW4+YCxcbiAgICAgICAgICBgPHNwYW4gY2xhc3M9XCJUTU1hcmsgVE1NYXJrXyR7dHlwZX1cIj4ke2xpbmtMYWJlbFsyXX08L3NwYW4+YFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgb3V0cHV0OiBvdXRwdXQsXG4gICAgICAgIGNoYXJDb3VudDogY3VycmVudE9mZnNldCxcbiAgICAgIH07XG4gICAgfSBlbHNlIGlmIChsaW5rRGV0YWlscy5sZW5ndGggPiAwKSB7XG4gICAgICAvLyBJbmxpbmUgbGlua1xuICAgICAgd2hpbGUgKGxpbmtEZXRhaWxzLmxlbmd0aCA8IDcpIHtcbiAgICAgICAgbGlua0RldGFpbHMucHVzaChcIlwiKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgb3V0cHV0OiBgPHNwYW4gY2xhc3M9XCJUTU1hcmsgVE1NYXJrXyR7dHlwZX1cIj4ke29wZW5lcn08L3NwYW4+PHNwYW4gY2xhc3M9XCIke3R5cGV9XCI+JHt0aGlzLnByb2Nlc3NJbmxpbmVTdHlsZXMoXG4gICAgICAgICAgbGlua1RleHRcbiAgICAgICAgKX08L3NwYW4+PHNwYW4gY2xhc3M9XCJUTU1hcmsgVE1NYXJrXyR7dHlwZX1cIj5dKCR7XG4gICAgICAgICAgbGlua0RldGFpbHNbMF1cbiAgICAgICAgfTwvc3Bhbj48c3BhbiBjbGFzcz1cIiR7dHlwZX1EZXN0aW5hdGlvblwiPiR7XG4gICAgICAgICAgbGlua0RldGFpbHNbMV1cbiAgICAgICAgfTwvc3Bhbj48c3BhbiBjbGFzcz1cIlRNTWFyayBUTU1hcmtfJHt0eXBlfVwiPiR7bGlua0RldGFpbHNbMl19JHtcbiAgICAgICAgICBsaW5rRGV0YWlsc1szXVxuICAgICAgICB9JHtsaW5rRGV0YWlsc1s0XX08L3NwYW4+PHNwYW4gY2xhc3M9XCIke3R5cGV9VGl0bGVcIj4ke1xuICAgICAgICAgIGxpbmtEZXRhaWxzWzVdXG4gICAgICAgIH08L3NwYW4+PHNwYW4gY2xhc3M9XCJUTU1hcmsgVE1NYXJrXyR7dHlwZX1cIj4ke2xpbmtEZXRhaWxzWzZdfSk8L3NwYW4+YCxcbiAgICAgICAgY2hhckNvdW50OiBjdXJyZW50T2Zmc2V0LFxuICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBwcml2YXRlIGNvbXB1dGVDb21tb25BbmNlc3Rvcihub2RlMTogTm9kZSB8IG51bGwsIG5vZGUyOiBOb2RlIHwgbnVsbCk6IE5vZGUgfCBudWxsIHtcbiAgICBpZiAoIW5vZGUxIHx8ICFub2RlMikgcmV0dXJuIG51bGw7XG4gICAgaWYgKG5vZGUxID09PSBub2RlMikgcmV0dXJuIG5vZGUxO1xuICAgIGNvbnN0IGFuY2VzdHJ5ID0gKG5vZGU6IE5vZGUpID0+IHtcbiAgICAgIGxldCBhbmNlc3RyeSA9IFtdO1xuICAgICAgd2hpbGUgKG5vZGUpIHtcbiAgICAgICAgYW5jZXN0cnkudW5zaGlmdChub2RlKTtcbiAgICAgICAgbm9kZSA9IG5vZGUucGFyZW50Tm9kZSE7XG4gICAgICB9XG4gICAgICByZXR1cm4gYW5jZXN0cnk7XG4gICAgfTtcblxuICAgIGNvbnN0IGFuY2VzdHJ5MSA9IGFuY2VzdHJ5KG5vZGUxKTtcbiAgICBjb25zdCBhbmNlc3RyeTIgPSBhbmNlc3RyeShub2RlMik7XG5cbiAgICBpZiAoYW5jZXN0cnkxWzBdICE9PSBhbmNlc3RyeTJbMF0pIHJldHVybiBudWxsO1xuICAgIGxldCBpO1xuICAgIGZvciAoaSA9IDA7IGFuY2VzdHJ5MVtpXSA9PT0gYW5jZXN0cnkyW2ldOyBpKyspO1xuICAgIHJldHVybiBhbmNlc3RyeTFbaSAtIDFdO1xuICB9XG5cbiAgcHJpdmF0ZSBjb21wdXRlRW5jbG9zaW5nTWFya3VwTm9kZShmb2N1czogUG9zaXRpb24sIGFuY2hvcjogUG9zaXRpb24gfCBudWxsLCBjbGFzc05hbWU6IHN0cmluZyk6IE5vZGUgfCBudWxsIHtcbiAgICBsZXQgbm9kZSA9IG51bGw7XG4gICAgaWYgKCFmb2N1cykgcmV0dXJuIG51bGw7XG4gICAgaWYgKCFhbmNob3IpIHtcbiAgICAgIGNvbnN0IHNlbCA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcbiAgICAgIGlmICghc2VsIHx8ICFzZWwuZm9jdXNOb2RlKSByZXR1cm4gbnVsbDtcbiAgICAgIG5vZGUgPSBzZWwuZm9jdXNOb2RlO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoZm9jdXMucm93ICE9PSBhbmNob3Iucm93KSByZXR1cm4gbnVsbDtcbiAgICAgIGNvbnN0IHNlbCA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcbiAgICAgIGlmICghc2VsKSByZXR1cm4gbnVsbDtcbiAgICAgIG5vZGUgPSB0aGlzLmNvbXB1dGVDb21tb25BbmNlc3RvcihzZWwuZm9jdXNOb2RlLCBzZWwuYW5jaG9yTm9kZSk7XG4gICAgfVxuICAgIGlmICghbm9kZSkgcmV0dXJuIG51bGw7XG4gICAgd2hpbGUgKG5vZGUgIT09IHRoaXMuZSkge1xuICAgICAgaWYgKChub2RlIGFzIEhUTUxFbGVtZW50KS5jbGFzc05hbWUgJiYgKG5vZGUgYXMgSFRNTEVsZW1lbnQpLmNsYXNzTmFtZS5pbmNsdWRlcyhjbGFzc05hbWUpKSByZXR1cm4gbm9kZTtcbiAgICAgIG5vZGUgPSBub2RlLnBhcmVudE5vZGUhO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHB1YmxpYyBnZXRDb21tYW5kU3RhdGUoZm9jdXM6IFBvc2l0aW9uIHwgbnVsbCA9IG51bGwsIGFuY2hvcjogUG9zaXRpb24gfCBudWxsID0gbnVsbCk6IFJlY29yZDxzdHJpbmcsIGJvb2xlYW4gfCBudWxsPiB7XG4gICAgbGV0IGNvbW1hbmRTdGF0ZTogUmVjb3JkPHN0cmluZywgYm9vbGVhbiB8IG51bGw+ID0ge307XG4gICAgaWYgKCFmb2N1cykgZm9jdXMgPSB0aGlzLmdldFNlbGVjdGlvbihmYWxzZSk7XG4gICAgaWYgKCFhbmNob3IpIGFuY2hvciA9IHRoaXMuZ2V0U2VsZWN0aW9uKHRydWUpO1xuICAgIGlmICghZm9jdXMpIHtcbiAgICAgIGZvciAobGV0IGNtZCBpbiBjb21tYW5kcykge1xuICAgICAgICBjb21tYW5kU3RhdGVbY21kXSA9IG51bGw7XG4gICAgICB9XG4gICAgICByZXR1cm4gY29tbWFuZFN0YXRlO1xuICAgIH1cbiAgICBpZiAoIWFuY2hvcikgYW5jaG9yID0gZm9jdXM7XG5cbiAgICBsZXQgc3RhcnQ6IFBvc2l0aW9uLCBlbmQ6IFBvc2l0aW9uO1xuICAgIGlmIChhbmNob3Iucm93IDwgZm9jdXMucm93IHx8IChhbmNob3Iucm93ID09PSBmb2N1cy5yb3cgJiYgYW5jaG9yLmNvbCA8IGZvY3VzLmNvbCkpIHtcbiAgICAgIHN0YXJ0ID0gYW5jaG9yO1xuICAgICAgZW5kID0gZm9jdXM7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0YXJ0ID0gZm9jdXM7XG4gICAgICBlbmQgPSBhbmNob3I7XG4gICAgfVxuICAgIGlmIChlbmQucm93ID4gc3RhcnQucm93ICYmIGVuZC5jb2wgPT09IDApIHtcbiAgICAgIGVuZC5yb3ctLTtcbiAgICAgIGVuZC5jb2wgPSB0aGlzLmxpbmVzW2VuZC5yb3ddLmxlbmd0aDtcbiAgICB9XG5cbiAgICBmb3IgKGxldCBjbWQgaW4gY29tbWFuZHMpIHtcbiAgICAgIGlmIChjb21tYW5kc1tjbWRdLnR5cGUgPT09IFwiaW5saW5lXCIpIHtcbiAgICAgICAgaWYgKCFmb2N1cyB8fCBmb2N1cy5yb3cgIT09IGFuY2hvciEucm93IHx8ICF0aGlzLmlzSW5saW5lRm9ybWF0dGluZ0FsbG93ZWQoKSkge1xuICAgICAgICAgIGNvbW1hbmRTdGF0ZVtjbWRdID0gbnVsbDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb21tYW5kU3RhdGVbY21kXSA9XG4gICAgICAgICAgICAhIXRoaXMuY29tcHV0ZUVuY2xvc2luZ01hcmt1cE5vZGUoZm9jdXMsIGFuY2hvciwgY29tbWFuZHNbY21kXS5jbGFzc05hbWUpIHx8XG4gICAgICAgICAgICAoZm9jdXMuY29sID09PSBhbmNob3IhLmNvbCAmJlxuICAgICAgICAgICAgICAhIXRoaXMubGluZXNbZm9jdXMucm93XS5zdWJzdHIoMCwgZm9jdXMuY29sKS5tYXRjaChjb21tYW5kc1tjbWRdLnVuc2V0LnByZVBhdHRlcm4pICYmXG4gICAgICAgICAgICAgICEhdGhpcy5saW5lc1tmb2N1cy5yb3ddLnN1YnN0cihmb2N1cy5jb2wpLm1hdGNoKGNvbW1hbmRzW2NtZF0udW5zZXQucG9zdFBhdHRlcm4pKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGNvbW1hbmRzW2NtZF0udHlwZSA9PT0gXCJsaW5lXCIpIHtcbiAgICAgICAgaWYgKCFmb2N1cykge1xuICAgICAgICAgIGNvbW1hbmRTdGF0ZVtjbWRdID0gbnVsbDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBsZXQgc3RhdGU6IGJvb2xlYW4gfCBudWxsID0gdGhpcy5saW5lVHlwZXNbc3RhcnQucm93XSA9PT0gY29tbWFuZHNbY21kXS5jbGFzc05hbWU7XG4gICAgICAgICAgZm9yIChsZXQgbGluZSA9IHN0YXJ0LnJvdzsgbGluZSA8PSBlbmQucm93OyBsaW5lKyspIHtcbiAgICAgICAgICAgIGlmICgodGhpcy5saW5lVHlwZXNbbGluZV0gPT09IGNvbW1hbmRzW2NtZF0uY2xhc3NOYW1lKSAhPT0gc3RhdGUpIHtcbiAgICAgICAgICAgICAgc3RhdGUgPSBudWxsO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgY29tbWFuZFN0YXRlW2NtZF0gPSBzdGF0ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gY29tbWFuZFN0YXRlO1xuICB9XG5cbiAgcHVibGljIHNldENvbW1hbmRTdGF0ZShjb21tYW5kOiBzdHJpbmcsIHN0YXRlOiBib29sZWFuKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmlzUmVzdG9yaW5nSGlzdG9yeSkgdGhpcy5wdXNoSGlzdG9yeSgpO1xuICAgIGlmIChjb21tYW5kc1tjb21tYW5kXS50eXBlID09PSBcImlubGluZVwiKSB7XG4gICAgICBsZXQgYW5jaG9yID0gdGhpcy5nZXRTZWxlY3Rpb24odHJ1ZSk7XG4gICAgICBsZXQgZm9jdXMgPSB0aGlzLmdldFNlbGVjdGlvbihmYWxzZSk7XG4gICAgICBpZiAoIWFuY2hvcikgYW5jaG9yID0gZm9jdXM7XG4gICAgICBpZiAoIWFuY2hvcikgcmV0dXJuO1xuICAgICAgaWYgKGFuY2hvci5yb3cgIT09IGZvY3VzIS5yb3cpIHJldHVybjtcbiAgICAgIGlmICghdGhpcy5pc0lubGluZUZvcm1hdHRpbmdBbGxvd2VkKCkpIHJldHVybjtcbiAgICAgIGxldCBtYXJrdXBOb2RlID0gdGhpcy5jb21wdXRlRW5jbG9zaW5nTWFya3VwTm9kZShmb2N1cyEsIGFuY2hvciwgY29tbWFuZHNbY29tbWFuZF0uY2xhc3NOYW1lKTtcbiAgICAgIHRoaXMuY2xlYXJEaXJ0eUZsYWcoKTtcblxuICAgICAgaWYgKG1hcmt1cE5vZGUpIHtcbiAgICAgICAgdGhpcy5saW5lRGlydHlbZm9jdXMhLnJvd10gPSB0cnVlO1xuICAgICAgICBjb25zdCBzdGFydENvbCA9IHRoaXMuY29tcHV0ZUNvbHVtbihtYXJrdXBOb2RlLCAwKSE7XG4gICAgICAgIGNvbnN0IGxlbiA9IG1hcmt1cE5vZGUudGV4dENvbnRlbnQhLmxlbmd0aDtcbiAgICAgICAgY29uc3QgbGVmdCA9IHRoaXMubGluZXNbZm9jdXMhLnJvd11cbiAgICAgICAgICAuc3Vic3RyKDAsIHN0YXJ0Q29sKVxuICAgICAgICAgIC5yZXBsYWNlKGNvbW1hbmRzW2NvbW1hbmRdLnVuc2V0LnByZVBhdHRlcm4sIFwiXCIpO1xuICAgICAgICBjb25zdCBtaWQgPSB0aGlzLmxpbmVzW2ZvY3VzIS5yb3ddLnN1YnN0cihzdGFydENvbCwgbGVuKTtcbiAgICAgICAgY29uc3QgcmlnaHQgPSB0aGlzLmxpbmVzW2ZvY3VzIS5yb3ddXG4gICAgICAgICAgLnN1YnN0cihzdGFydENvbCArIGxlbilcbiAgICAgICAgICAucmVwbGFjZShjb21tYW5kc1tjb21tYW5kXS51bnNldC5wb3N0UGF0dGVybiwgXCJcIik7XG4gICAgICAgIHRoaXMubGluZXNbZm9jdXMhLnJvd10gPSBsZWZ0LmNvbmNhdChtaWQsIHJpZ2h0KTtcbiAgICAgICAgYW5jaG9yLmNvbCA9IGxlZnQubGVuZ3RoO1xuICAgICAgICBmb2N1cyEuY29sID0gYW5jaG9yLmNvbCArIGxlbjtcbiAgICAgICAgdGhpcy51cGRhdGVGb3JtYXR0aW5nKCk7XG4gICAgICAgIHRoaXMuc2V0U2VsZWN0aW9uKGZvY3VzISwgYW5jaG9yKTtcbiAgICAgICAgdGhpcy5maXJlQ2hhbmdlKCk7XG4gICAgICB9IGVsc2UgaWYgKFxuICAgICAgICBmb2N1cyEuY29sID09PSBhbmNob3IuY29sICYmXG4gICAgICAgICEhdGhpcy5saW5lc1tmb2N1cyEucm93XS5zdWJzdHIoMCwgZm9jdXMhLmNvbCkubWF0Y2goY29tbWFuZHNbY29tbWFuZF0udW5zZXQucHJlUGF0dGVybikgJiZcbiAgICAgICAgISF0aGlzLmxpbmVzW2ZvY3VzIS5yb3ddLnN1YnN0cihmb2N1cyEuY29sKS5tYXRjaChjb21tYW5kc1tjb21tYW5kXS51bnNldC5wb3N0UGF0dGVybilcbiAgICAgICkge1xuICAgICAgICB0aGlzLmxpbmVEaXJ0eVtmb2N1cyEucm93XSA9IHRydWU7XG4gICAgICAgIGNvbnN0IGxlZnQgPSB0aGlzLmxpbmVzW2ZvY3VzIS5yb3ddXG4gICAgICAgICAgLnN1YnN0cigwLCBmb2N1cyEuY29sKVxuICAgICAgICAgIC5yZXBsYWNlKGNvbW1hbmRzW2NvbW1hbmRdLnVuc2V0LnByZVBhdHRlcm4sIFwiXCIpO1xuICAgICAgICBjb25zdCByaWdodCA9IHRoaXMubGluZXNbZm9jdXMhLnJvd11cbiAgICAgICAgICAuc3Vic3RyKGZvY3VzIS5jb2wpXG4gICAgICAgICAgLnJlcGxhY2UoY29tbWFuZHNbY29tbWFuZF0udW5zZXQucG9zdFBhdHRlcm4sIFwiXCIpO1xuICAgICAgICB0aGlzLmxpbmVzW2ZvY3VzIS5yb3ddID0gbGVmdC5jb25jYXQocmlnaHQpO1xuICAgICAgICBmb2N1cyEuY29sID0gYW5jaG9yLmNvbCA9IGxlZnQubGVuZ3RoO1xuICAgICAgICB0aGlzLnVwZGF0ZUZvcm1hdHRpbmcoKTtcbiAgICAgICAgdGhpcy5zZXRTZWxlY3Rpb24oZm9jdXMhLCBhbmNob3IpO1xuICAgICAgICB0aGlzLmZpcmVDaGFuZ2UoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxldCB7IHN0YXJ0Q29sLCBlbmRDb2wgfSA9XG4gICAgICAgICAgZm9jdXMhLmNvbCA8IGFuY2hvci5jb2xcbiAgICAgICAgICAgID8geyBzdGFydENvbDogZm9jdXMhLmNvbCwgZW5kQ29sOiBhbmNob3IuY29sIH1cbiAgICAgICAgICAgIDogeyBzdGFydENvbDogYW5jaG9yLmNvbCwgZW5kQ29sOiBmb2N1cyEuY29sIH07XG5cbiAgICAgICAgbGV0IG1hdGNoID0gdGhpcy5saW5lc1tmb2N1cyEucm93XVxuICAgICAgICAgIC5zdWJzdHIoc3RhcnRDb2wsIGVuZENvbCAtIHN0YXJ0Q29sKVxuICAgICAgICAgIC5tYXRjaCgvXig/PGxlYWRpbmc+XFxzKikuKlxcUyg/PHRyYWlsaW5nPlxccyopJC8pO1xuICAgICAgICBpZiAobWF0Y2gpIHtcbiAgICAgICAgICBzdGFydENvbCArPSBtYXRjaC5ncm91cHMhLmxlYWRpbmcubGVuZ3RoO1xuICAgICAgICAgIGVuZENvbCAtPSBtYXRjaC5ncm91cHMhLnRyYWlsaW5nLmxlbmd0aDtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvY3VzIS5jb2wgPSBzdGFydENvbDtcbiAgICAgICAgYW5jaG9yLmNvbCA9IGVuZENvbDtcblxuICAgICAgICB0aGlzLndyYXBTZWxlY3Rpb24oY29tbWFuZHNbY29tbWFuZF0uc2V0LnByZSwgY29tbWFuZHNbY29tbWFuZF0uc2V0LnBvc3QsIGZvY3VzLCBhbmNob3IpO1xuICAgICAgICB0aGlzLmZpcmVDaGFuZ2UoKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGNvbW1hbmRzW2NvbW1hbmRdLnR5cGUgPT09IFwibGluZVwiKSB7XG4gICAgICBsZXQgYW5jaG9yID0gdGhpcy5nZXRTZWxlY3Rpb24odHJ1ZSk7XG4gICAgICBsZXQgZm9jdXMgPSB0aGlzLmdldFNlbGVjdGlvbihmYWxzZSk7XG4gICAgICBpZiAoIWFuY2hvcikgYW5jaG9yID0gZm9jdXM7XG4gICAgICBpZiAoIWZvY3VzKSByZXR1cm47XG4gICAgICB0aGlzLmNsZWFyRGlydHlGbGFnKCk7XG4gICAgICBsZXQgc3RhcnQgPSBhbmNob3IhLnJvdyA+IGZvY3VzIS5yb3cgPyBmb2N1cyEgOiBhbmNob3IhO1xuICAgICAgbGV0IGVuZCA9IGFuY2hvciEucm93ID4gZm9jdXMhLnJvdyA/IGFuY2hvciEgOiBmb2N1cyE7XG4gICAgICBpZiAoZW5kLnJvdyA+IHN0YXJ0LnJvdyAmJiBlbmQuY29sID09PSAwKSB7XG4gICAgICAgIGVuZC5yb3ctLTtcbiAgICAgIH1cblxuICAgICAgZm9yIChsZXQgbGluZSA9IHN0YXJ0LnJvdzsgbGluZSA8PSBlbmQucm93OyBsaW5lKyspIHtcbiAgICAgICAgaWYgKHN0YXRlICYmIHRoaXMubGluZVR5cGVzW2xpbmVdICE9PSBjb21tYW5kc1tjb21tYW5kXS5jbGFzc05hbWUpIHtcbiAgICAgICAgICB0aGlzLmxpbmVzW2xpbmVdID0gdGhpcy5saW5lc1tsaW5lXS5yZXBsYWNlKFxuICAgICAgICAgICAgY29tbWFuZHNbY29tbWFuZF0uc2V0LnBhdHRlcm4sXG4gICAgICAgICAgICBjb21tYW5kc1tjb21tYW5kXS5zZXQucmVwbGFjZW1lbnQucmVwbGFjZShcIiQjXCIsIChsaW5lIC0gc3RhcnQucm93ICsgMSkudG9TdHJpbmcoKSlcbiAgICAgICAgICApO1xuICAgICAgICAgIHRoaXMubGluZURpcnR5W2xpbmVdID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXN0YXRlICYmIHRoaXMubGluZVR5cGVzW2xpbmVdID09PSBjb21tYW5kc1tjb21tYW5kXS5jbGFzc05hbWUpIHtcbiAgICAgICAgICB0aGlzLmxpbmVzW2xpbmVdID0gdGhpcy5saW5lc1tsaW5lXS5yZXBsYWNlKFxuICAgICAgICAgICAgY29tbWFuZHNbY29tbWFuZF0udW5zZXQucGF0dGVybixcbiAgICAgICAgICAgIGNvbW1hbmRzW2NvbW1hbmRdLnVuc2V0LnJlcGxhY2VtZW50XG4gICAgICAgICAgKTtcbiAgICAgICAgICB0aGlzLmxpbmVEaXJ0eVtsaW5lXSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHRoaXMudXBkYXRlRm9ybWF0dGluZygpO1xuICAgICAgdGhpcy5zZXRTZWxlY3Rpb24oXG4gICAgICAgIHsgcm93OiBlbmQucm93LCBjb2w6IHRoaXMubGluZXNbZW5kLnJvd10ubGVuZ3RoIH0sXG4gICAgICAgIHsgcm93OiBzdGFydC5yb3csIGNvbDogMCB9XG4gICAgICApO1xuICAgICAgdGhpcy5maXJlQ2hhbmdlKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBpc0lubGluZUZvcm1hdHRpbmdBbGxvd2VkKCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHNlbCA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcbiAgICBpZiAoIXNlbCB8fCAhc2VsLmZvY3VzTm9kZSB8fCAhc2VsLmFuY2hvck5vZGUpIHJldHVybiBmYWxzZTtcblxuICAgIGlmIChcbiAgICAgIHNlbC5pc0NvbGxhcHNlZCAmJlxuICAgICAgc2VsLmZvY3VzTm9kZS5ub2RlVHlwZSA9PT0gMyAmJlxuICAgICAgc2VsLmZvY3VzT2Zmc2V0ID09PSBzZWwuZm9jdXNOb2RlLm5vZGVWYWx1ZSEubGVuZ3RoXG4gICAgKSB7XG4gICAgICBsZXQgbm9kZTtcbiAgICAgIGZvciAobm9kZSA9IHNlbC5mb2N1c05vZGU7IG5vZGUgJiYgbm9kZS5uZXh0U2libGluZyA9PT0gbnVsbDsgbm9kZSA9IG5vZGUucGFyZW50Tm9kZSEpO1xuICAgICAgaWYgKFxuICAgICAgICBub2RlICYmXG4gICAgICAgIG5vZGUubmV4dFNpYmxpbmcgJiZcbiAgICAgICAgKG5vZGUubmV4dFNpYmxpbmcgYXMgSFRNTEVsZW1lbnQpLmNsYXNzTmFtZSAmJlxuICAgICAgICAobm9kZS5uZXh0U2libGluZyBhcyBIVE1MRWxlbWVudCkuY2xhc3NOYW1lLmluY2x1ZGVzKFwiVE1JbmxpbmVGb3JtYXR0ZWRcIilcbiAgICAgIClcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgbGV0IGFuY2VzdG9yID0gdGhpcy5jb21wdXRlQ29tbW9uQW5jZXN0b3Ioc2VsLmZvY3VzTm9kZSwgc2VsLmFuY2hvck5vZGUpO1xuICAgIGlmICghYW5jZXN0b3IpIHJldHVybiBmYWxzZTtcblxuICAgIHdoaWxlIChhbmNlc3RvciAmJiBhbmNlc3RvciAhPT0gdGhpcy5lKSB7XG4gICAgICBpZiAoXG4gICAgICAgIChhbmNlc3RvciBhcyBIVE1MRWxlbWVudCkuY2xhc3NOYW1lICYmXG4gICAgICAgIHR5cGVvZiAoYW5jZXN0b3IgYXMgSFRNTEVsZW1lbnQpLmNsYXNzTmFtZS5pbmNsdWRlcyA9PT0gXCJmdW5jdGlvblwiICYmXG4gICAgICAgICgoYW5jZXN0b3IgYXMgSFRNTEVsZW1lbnQpLmNsYXNzTmFtZS5pbmNsdWRlcyhcIlRNSW5saW5lRm9ybWF0dGVkXCIpIHx8XG4gICAgICAgICAgKGFuY2VzdG9yIGFzIEhUTUxFbGVtZW50KS5jbGFzc05hbWUuaW5jbHVkZXMoXCJUTUJsYW5rTGluZVwiKSlcbiAgICAgIClcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICBhbmNlc3RvciA9IGFuY2VzdG9yLnBhcmVudE5vZGUhO1xuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHB1YmxpYyB0b2dnbGVDb21tYW5kU3RhdGUoY29tbWFuZDogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmxhc3RDb21tYW5kU3RhdGUpIHRoaXMubGFzdENvbW1hbmRTdGF0ZSA9IHRoaXMuZ2V0Q29tbWFuZFN0YXRlKCk7XG4gICAgdGhpcy5zZXRDb21tYW5kU3RhdGUoY29tbWFuZCwgIXRoaXMubGFzdENvbW1hbmRTdGF0ZVtjb21tYW5kXSk7XG4gIH1cblxuICBwcml2YXRlIGZpcmVEcm9wKGRhdGFUcmFuc2ZlcjogRGF0YVRyYW5zZmVyKTogdm9pZCB7XG4gICAgZm9yIChsZXQgbGlzdGVuZXIgb2YgdGhpcy5saXN0ZW5lcnMuZHJvcCkge1xuICAgICAgbGlzdGVuZXIoeyBkYXRhVHJhbnNmZXIgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBmaXJlU2VsZWN0aW9uKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmxpc3RlbmVycy5zZWxlY3Rpb24gJiYgdGhpcy5saXN0ZW5lcnMuc2VsZWN0aW9uLmxlbmd0aCkge1xuICAgICAgbGV0IGZvY3VzID0gdGhpcy5nZXRTZWxlY3Rpb24oZmFsc2UpO1xuICAgICAgbGV0IGFuY2hvciA9IHRoaXMuZ2V0U2VsZWN0aW9uKHRydWUpO1xuICAgICAgbGV0IGNvbW1hbmRTdGF0ZSA9IHRoaXMuZ2V0Q29tbWFuZFN0YXRlKGZvY3VzLCBhbmNob3IpO1xuICAgICAgaWYgKHRoaXMubGFzdENvbW1hbmRTdGF0ZSkge1xuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMubGFzdENvbW1hbmRTdGF0ZSwgY29tbWFuZFN0YXRlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMubGFzdENvbW1hbmRTdGF0ZSA9IE9iamVjdC5hc3NpZ24oe30sIGNvbW1hbmRTdGF0ZSk7XG4gICAgICB9XG4gICAgICBmb3IgKGxldCBsaXN0ZW5lciBvZiB0aGlzLmxpc3RlbmVycy5zZWxlY3Rpb24pIHtcbiAgICAgICAgbGlzdGVuZXIoe1xuICAgICAgICAgIGZvY3VzOiBmb2N1cyEsXG4gICAgICAgICAgYW5jaG9yOiBhbmNob3IhLFxuICAgICAgICAgIGNvbW1hbmRTdGF0ZTogdGhpcy5sYXN0Q29tbWFuZFN0YXRlLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgRWRpdG9yO1xuIl0sIm5hbWVzIjpbInN2ZyIsImJsb2NrcXVvdGUiLCJib2xkIiwiY2xlYXJfZm9ybWF0dGluZyIsImNvZGUiLCJoMSIsImgyIiwiaHIiLCJpbWFnZSIsIml0YWxpYyIsImxpbmsiLCJvbCIsInJlZG8iLCJzdHJpa2V0aHJvdWdoIiwidWwiLCJ1bmRvIiwiaXNNYWNMaWtlIiwidGVzdCIsIm5hdmlnYXRvciIsInBsYXRmb3JtIiwiRGVmYXVsdENvbW1hbmRzIiwibmFtZSIsImFjdGlvbiIsImlubmVySFRNTCIsInRpdGxlIiwiaG90a2V5IiwiaW5zZXJ0TGluayIsImVkaXRvciIsImlzSW5saW5lRm9ybWF0dGluZ0FsbG93ZWQiLCJ3cmFwU2VsZWN0aW9uIiwiZW5hYmxlZCIsImZvY3VzIiwiYW5jaG9yIiwiaW5zZXJ0SW1hZ2UiLCJwYXN0ZSIsImNhblVuZG8iLCJjYW5SZWRvIiwiQ29tbWFuZEJhciIsImNvbnN0cnVjdG9yIiwicHJvcHMiLCJlIiwiY29tbWFuZHMiLCJidXR0b25zIiwic3RhdGUiLCJob3RrZXlzIiwiZWxlbWVudCIsImRvY3VtZW50IiwiZ2V0RWxlbWVudEJ5SWQiLCJib2R5IiwiY3JlYXRlQ29tbWFuZEJhckVsZW1lbnQiLCJhZGRFdmVudExpc3RlbmVyIiwiaGFuZGxlS2V5ZG93biIsInNldEVkaXRvciIsInBhcmVudEVsZW1lbnQiLCJjcmVhdGVFbGVtZW50IiwiY2xhc3NOYW1lIiwiY29tbWFuZCIsImVsIiwiYXBwZW5kQ2hpbGQiLCJjb21tYW5kTmFtZSIsIk9iamVjdCIsImFzc2lnbiIsImtleXMiLCJzcGxpdCIsIm1vZGlmaWVycyIsIm1vZGlmaWVyZXhwbGFuYXRpb24iLCJpIiwibGVuZ3RoIiwicHVzaCIsIm1hdGNoIiwia2V5IiwidG9Mb3dlckNhc2UiLCJjb25jYXQiLCJqb2luIiwiaGFuZGxlQ2xpY2siLCJldmVudCIsInByZXZlbnREZWZhdWx0Iiwic2V0Q29tbWFuZFN0YXRlIiwiaGFuZGxlU2VsZWN0aW9uIiwiY29tbWFuZFN0YXRlIiwidW5kZWZpbmVkIiwib3V0ZXIiLCJtb2RpZmllciIsImdsb2JhbCIsInRoaXMiLCJyZXF1aXJlJCQwIiwicmVxdWlyZSQkMSIsInJlcXVpcmUkJDIiLCJzaGFyZWRTdG9yZU1vZHVsZSIsInJlcXVpcmUkJDMiLCJyZXF1aXJlJCQ0IiwicmVxdWlyZSQkNSIsInJlcXVpcmUkJDYiLCJyZXF1aXJlJCQ3IiwibWFrZUJ1aWx0SW4iLCJtYWtlQnVpbHRJbk1vZHVsZSIsInJlcGxhY2VtZW50cyIsIkFTQ0lJUHVuY3R1YXRpb24iLCJOb3RUcmlnZ2VyQ2hhciIsIlNjaGVtZSIsIkVtYWlsIiwiSFRNTE9wZW5UYWciLCJIVE1MQ2xvc2VUYWciLCJIVE1MVGFnTmFtZSIsIkhUTUxDb21tZW50IiwiSFRNTFBJIiwiSFRNTERlY2xhcmF0aW9uIiwiSFRNTENEQVRBIiwiSFRNTEF0dHJpYnV0ZSIsIkhUTUxBdHRWYWx1ZSIsIktub3duVGFnIiwicHVuY3R1YXRpb25MZWFkaW5nIiwiUmVnRXhwIiwicHVuY3R1YXRpb25UcmFpbGluZyIsImxpbmVHcmFtbWFyIiwiVE1IMSIsInJlZ2V4cCIsInJlcGxhY2VtZW50IiwiVE1IMiIsIlRNSDMiLCJUTUg0IiwiVE1INSIsIlRNSDYiLCJUTUJsb2NrcXVvdGUiLCJUTUNvZGVGZW5jZUJhY2t0aWNrT3BlbiIsIlRNQ29kZUZlbmNlVGlsZGVPcGVuIiwiVE1Db2RlRmVuY2VCYWNrdGlja0Nsb3NlIiwiVE1Db2RlRmVuY2VUaWxkZUNsb3NlIiwiVE1CbGFua0xpbmUiLCJUTVNldGV4dEgxTWFya2VyIiwiVE1TZXRleHRIMk1hcmtlciIsIlRNSFIiLCJUTVVMIiwiVE1PTCIsIlRNSW5kZW50ZWRDb2RlIiwiVE1MaW5rUmVmZXJlbmNlRGVmaW5pdGlvbiIsImxhYmVsUGxhY2Vob2xkZXIiLCJodG1sQmxvY2tHcmFtbWFyIiwic3RhcnQiLCJlbmQiLCJwYXJhSW50ZXJydXB0IiwiaW5saW5lR3JhbW1hciIsImVzY2FwZSIsImF1dG9saW5rIiwiaHRtbCIsImxpbmtPcGVuIiwiaW1hZ2VPcGVuIiwibGlua0xhYmVsIiwiZGVmYXVsdCIsInJlcGxhY2VtZW50UmVnZXhwIiwiaW5saW5lUnVsZXMiLCJydWxlIiwicmUiLCJzb3VyY2UiLCJyZXBsYWNlIiwic3RyaW5nIiwiZmxhZ3MiLCJjcmVhdGVNZXJnZWRJbmxpbmVHcmFtbWFyIiwiY3VzdG9tUnVsZXMiLCJhcmd1bWVudHMiLCJtZXJnZWQiLCJydWxlTmFtZSIsImVudHJpZXMiLCJwcm9jZXNzZWRSdWxlIiwicmVnZXhwU291cmNlIiwiaHRtbGVzY2FwZSIsInR5cGUiLCJzZXQiLCJwcmUiLCJwb3N0IiwidW5zZXQiLCJwcmVQYXR0ZXJuIiwicG9zdFBhdHRlcm4iLCJwYXR0ZXJuIiwiaDMiLCJoNCIsImg1IiwiaDYiLCJFZGl0b3IiLCJ0ZXh0YXJlYSIsImxpbmVzIiwibGluZUVsZW1lbnRzIiwibGluZVR5cGVzIiwibGluZUNhcHR1cmVzIiwibGluZVJlcGxhY2VtZW50cyIsImxpbmtMYWJlbHMiLCJsaW5lRGlydHkiLCJsYXN0Q29tbWFuZFN0YXRlIiwiY3VzdG9tSW5saW5lR3JhbW1hciIsIm1lcmdlZElubGluZUdyYW1tYXIiLCJoYXNGb2N1cyIsImxpc3RlbmVycyIsImNoYW5nZSIsInNlbGVjdGlvbiIsImRyb3AiLCJ1bmRvU3RhY2siLCJyZWRvU3RhY2siLCJpc1Jlc3RvcmluZ0hpc3RvcnkiLCJtYXhIaXN0b3J5IiwiZ2V0RWxlbWVudHNCeVRhZ05hbWUiLCJ0YWdOYW1lIiwicGFyZW50Tm9kZSIsInN0eWxlIiwiZGlzcGxheSIsImNyZWF0ZUVkaXRvckVsZW1lbnQiLCJzZXRDb250ZW50IiwiY29udGVudCIsInZhbHVlIiwiaGFuZGxlVW5kb1JlZG9LZXkiLCJwdXNoSGlzdG9yeSIsInB1c2hDdXJyZW50U3RhdGUiLCJnZXRDb250ZW50IiwiZ2V0U2VsZWN0aW9uIiwic2hpZnQiLCJjdXJyZW50IiwicG9wIiwicHJldiIsInNldFNlbGVjdGlvbiIsIm5leHQiLCJpc01hYyIsImN0cmwiLCJtZXRhS2V5IiwiY3RybEtleSIsImFsdEtleSIsInNoaWZ0S2V5IiwiY2xhc3NMaXN0IiwiYWRkIiwiY29udGVudEVkaXRhYmxlIiwid2hpdGVTcGFjZSIsIndlYmtpdFVzZXJNb2RpZnkiLCJuZXh0U2libGluZyIsImluc2VydEJlZm9yZSIsImhhbmRsZUlucHV0RXZlbnQiLCJoYW5kbGVCZWZvcmVJbnB1dEV2ZW50IiwiaGFuZGxlU2VsZWN0aW9uQ2hhbmdlRXZlbnQiLCJoYW5kbGVQYXN0ZSIsImhhbmRsZURyb3AiLCJjaGlsZE5vZGVzIiwiZmlyc3RDaGlsZCIsInJlbW92ZUNoaWxkIiwibGluZU51bSIsImxlIiwiQXJyYXkiLCJ1cGRhdGVGb3JtYXR0aW5nIiwiZmlyZUNoYW5nZSIsInVwZGF0ZUxpbmVUeXBlcyIsInVwZGF0ZUxpbmtMYWJlbHMiLCJhcHBseUxpbmVUeXBlcyIsImwiLCJjYXB0dXJlIiwic3RyIiwicDEiLCJwMiIsInBhcnNlSW50IiwicHJvY2Vzc0lubGluZVN0eWxlcyIsImNvbnRlbnRIVE1MIiwicmVtb3ZlQXR0cmlidXRlIiwiZGF0YXNldCIsInRvU3RyaW5nIiwiY29kZUJsb2NrVHlwZSIsImNvZGVCbG9ja1NlcUxlbmd0aCIsImh0bWxCbG9jayIsImxpbmVUeXBlIiwibGluZUNhcHR1cmUiLCJsaW5lUmVwbGFjZW1lbnQiLCJleGVjIiwiZ3JvdXBzIiwiaHRtbEJsb2NrVHlwZSIsImhlYWRpbmdMaW5lIiwiaGVhZGluZ0xpbmVUeXBlIiwiZ2V0QW5jaG9yIiwid2luZG93Iiwic3RhcnROb2RlIiwiYW5jaG9yTm9kZSIsImZvY3VzTm9kZSIsIm9mZnNldCIsImFuY2hvck9mZnNldCIsImZvY3VzT2Zmc2V0Iiwicm93IiwiY29sIiwiY29tcHV0ZUNvbHVtbiIsIm5vZGUiLCJwcmV2aW91c1NpYmxpbmciLCJjdXJyZW50TGluZU51bURhdGEiLCJfYSIsInByZXZpb3VzTGluZU51bURhdGEiLCJfYiIsImN1cnJlbnRMaW5lTnVtIiwicHJldmlvdXNMaW5lTnVtIiwiY29tcHV0ZU5vZGVBbmRPZmZzZXQiLCJ3aW5kb3dTZWxlY3Rpb24iLCJzZXRCYXNlQW5kRXh0ZW50IiwidGV4dCIsImJlZ2lubmluZyIsImluc2VydGVkTGluZXMiLCJsaW5lQmVmb3JlIiwic3Vic3RyIiwibGluZUVuZCIsImVuZENvbFBvcyIsInNwbGljZUxpbmVzIiwic3RhcnRDb2wiLCJlbmRDb2wiLCJsZWZ0IiwibWlkIiwicmlnaHQiLCJsaXN0ZW5lciIsImxpbmVzRGlydHkiLCJiZWZvcmVJbnB1dEV2ZW50IiwiaW5wdXRUeXBlIiwiY2xlYXJEaXJ0eUZsYWciLCJzdWJzdHJpbmciLCJjb250aW51YWJsZVR5cGUiLCJsaW5lQmVmb3JlQnJlYWsiLCJsaW5lQWZ0ZXJCcmVhayIsInJlc3VsdCIsImlucHV0RXZlbnQiLCJmaXhOb2RlSGllcmFyY2h5IiwidXBkYXRlTGluZUNvbnRlbnRzQW5kRm9ybWF0dGluZyIsIl9lIiwiZmlyZVNlbGVjdGlvbiIsImNsaXBib2FyZERhdGEiLCJnZXREYXRhIiwiZmlyZURyb3AiLCJkYXRhVHJhbnNmZXIiLCJvcmlnaW5hbFN0cmluZyIsInByb2Nlc3NlZCIsInN0YWNrIiwiY2FwIiwicG90ZW50aWFsTGluayIsInBvdGVudGlhbEltYWdlIiwicGFyc2VMaW5rT3JJbWFnZSIsIm91dHB1dCIsImNoYXJDb3VudCIsImRlbGltQ291bnQiLCJkZWxpbVN0cmluZyIsImN1cnJlbnREZWxpbWl0ZXIiLCJwcmVjZWRpbmciLCJmb2xsb3dpbmciLCJwdW5jdHVhdGlvbkZvbGxvd3MiLCJwdW5jdHVhdGlvblByZWNlZGVzIiwid2hpdGVzcGFjZUZvbGxvd3MiLCJ3aGl0ZXNwYWNlUHJlY2VkZXMiLCJjYW5PcGVuIiwiY2FuQ2xvc2UiLCJzdGFja1BvaW50ZXIiLCJkZWxpbWl0ZXIiLCJlbnRyeSIsImNvdW50IiwiY29uc3VtZWQiLCJub2RlVHlwZSIsIk5vZGUiLCJURVhUX05PREUiLCJ0ZXh0Q29udGVudCIsImJpbmRSaWdodCIsImNoaWxkcmVuQ29tcGxldGUiLCJydiIsIm5vZGVWYWx1ZSIsInVwZGF0ZUxpbmVDb250ZW50cyIsImxpbmVEZWx0YSIsImNoaWxkRWxlbWVudENvdW50IiwiZmlyc3RDaGFuZ2VkTGluZSIsImxhc3RDaGFuZ2VkTGluZSIsImxpbmVzVG9EZWxldGUiLCJsaW5lc1RvQWRkIiwibGluZSIsImN0Iiwic3RhcnRMaW5lIiwibGluZXNUb0luc2VydCIsImFkanVzdExpbmVFbGVtZW50cyIsImluc2VydGVkQmxhbmsiLCJpbnNlcnRlZERpcnR5Iiwic3BsaWNlIiwib3JpZ2luYWxDaGlsZHJlbiIsImZyb20iLCJyZXBsYWNlQ2hpbGQiLCJjaGlsZCIsInBhcmVudCIsIl9sZW4iLCJuZXdDaGlsZHJlbiIsIl9rZXkiLCJmb3JFYWNoIiwibmV3Q2hpbGQiLCJFTEVNRU5UX05PREUiLCJkaXZXcmFwcGVyIiwiZ3JhbmRDaGlsZHJlbiIsInNvbWUiLCJncmFuZENoaWxkIiwiaXNJbWFnZSIsInRleHRPZmZzZXQiLCJvcGVuZXIiLCJjdXJyZW50T2Zmc2V0IiwiYnJhY2tldExldmVsIiwibGlua1RleHQiLCJsaW5rUmVmIiwibGlua0RldGFpbHMiLCJ0ZXh0T3V0ZXIiLCJuZXh0Q2hhciIsInRyaW0iLCJwYXJlbnRoZXNpc0xldmVsIiwiaW5saW5lT3V0ZXIiLCJ2YWxpZCIsImxhYmVsIiwibGFiZWxDbGFzcyIsImNvbXB1dGVDb21tb25BbmNlc3RvciIsIm5vZGUxIiwibm9kZTIiLCJhbmNlc3RyeSIsInVuc2hpZnQiLCJhbmNlc3RyeTEiLCJhbmNlc3RyeTIiLCJjb21wdXRlRW5jbG9zaW5nTWFya3VwTm9kZSIsInNlbCIsImluY2x1ZGVzIiwiZ2V0Q29tbWFuZFN0YXRlIiwiY21kIiwibWFya3VwTm9kZSIsImxlbiIsImxlYWRpbmciLCJ0cmFpbGluZyIsImlzQ29sbGFwc2VkIiwiYW5jZXN0b3IiLCJ0b2dnbGVDb21tYW5kU3RhdGUiXSwibWFwcGluZ3MiOiI7Ozs7OztJQUFBLE1BQU1BLEdBQUcsR0FBMkI7SUFDbENDLEVBQUFBLFVBQVUsRUFBRSxDQUEyUix5UkFBQSxDQUFBO0lBQ3ZTQyxFQUFBQSxJQUFJLEVBQUUsQ0FBMFksd1lBQUEsQ0FBQTtJQUNoWkMsRUFDQUMsSUFBSSxFQUFFLENBQStVLDZVQUFBLENBQUE7SUFDclZDLEVBQUFBLEVBQUUsRUFBRSxDQUFnSyw4SkFBQSxDQUFBO0lBQ3BLQyxFQUFBQSxFQUFFLEVBQUUsQ0FBa0ssZ0tBQUEsQ0FBQTtJQUN0S0MsRUFBQUEsRUFBRSxFQUFFLENBQWlJLCtIQUFBLENBQUE7SUFDcklDLEVBQUFBLEtBQUssRUFBRSxDQUErSCw2SEFBQSxDQUFBO0lBQ3RJQyxFQUFBQSxNQUFNLEVBQUUsQ0FBaUgsK0dBQUEsQ0FBQTtJQUN6SEMsRUFBQUEsSUFBSSxFQUFFLENBQTJ1Qyx5dUNBQUEsQ0FBQTtJQUNqdkNDLEVBQUFBLEVBQUUsRUFBRSxDQUFxdEIsbXRCQUFBLENBQUE7SUFDenRCQyxFQUFBQSxJQUFJLEVBQUUsQ0FBc3NCLG9zQkFBQSxDQUFBO0lBQzVzQkMsRUFBQUEsYUFBYSxFQUFFLENBQTRYLDBYQUFBLENBQUE7SUFDM1lDLEVBQUFBLEVBQUUsRUFBRSxDQUE2USwyUUFBQSxDQUFBO0lBQ2pSQyxFQUFBQSxJQUFJLEVBQUUsQ0FBQTtBQUNQO0tBQ0E7O0lDZEQsTUFBTUMsU0FBUyxHQUFHLHlCQUF5QixDQUFDQyxJQUFJLENBQzlDLE9BQU9DLFNBQVMsS0FBSyxXQUFXLEdB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RjtJQUVRSixFQUFBQSxhQUFhQSxHQUFBO0lBQ25CLElBQUEsSUFBSSxJQUFJLENBQUNoSSxTQUFTLENBQUNFLFNBQVMsSUFBSSxJQUFJLENBQUNGLFNBQVMsQ0FBQ0UsU0FBUyxDQUFDOUgsTUFBTSxFQUFFO0lBQy9ELE1BQUEsSUFBSXBDLEtBQUssR0FBRyxJQUFJLENBQUNxTCxZQUFZLENBQUMsS0FBSyxDQUFDO0lBQ3BDLE1BQUEsSUFBSXBMLE1BQU0sR0FBRyxJQUFJLENBQUNvTCxZQUFZLENBQUMsSUFBSSxDQUFDO1VBQ3BDLElBQUlySSxZQUFZLEdBQUcsSUFBSSxDQUFDOFUsZUFBZSxDQUFDOVgsS0FBSyxFQUFFQyxNQUFNLENBQUM7VUFDdEQsSUFBSSxJQUFJLENBQUMySixnQkFBZ0IsRUFBRTtZQUN6Qi9ILE1BQU0sQ0FBQ0MsTUFBTSxDQUFDLElBQUksQ0FBQzhILGdCQUFnQixFQUFFNUcsWUFBWSxDQUFDO0lBQ3BELE9BQUMsTUFBTTtZQUNMLElBQUksQ0FBQzRHLGdCQUFnQixHQUFHL0gsTUFBTSxDQUFDQyxNQUFNLENBQUMsRUFBRSxFQUFFa0IsWUFBWSxDQUFDO0lBQ3pEO1VBQ0EsS0FBSyxJQUFJa08sUUFBUSxJQUFJLElBQUksQ0FBQ2xILFNBQVMsQ0FBQ0UsU0FBUyxFQUFFO0lBQzdDZ0gsUUFBQUEsUUFBUSxDQUFDO0lBQ1BsUixVQUFBQSxLQUFLLEVBQUVBLEtBQU07SUFDYkMsVUFBQUEsTUFBTSxFQUFFQSxNQUFPO2NBQ2YrQyxZQUFZLEVBQUUsSUFBSSxDQUFDNEc7SUFDcEIsU0FBQSxDQUFDO0lBQ0o7SUFDRjtJQUNGO0lBQ0Q7Ozs7Ozs7OzsiLCJ4X2dvb2dsZV9pZ25vcmVMaXN0IjpbMiwzLDQsNSw2LDcsOCw5LDEwLDExLDEyLDEzLDE0LDE1LDE2LDE3LDE4LDE5LDIwLDIxLDIyLDIzLDI0LDI1LDI2LDI3LDI4LDI5LDMwLDMxLDMyLDMzLDM0LDM1LDM2LDM3LDM4LDM5LDQwLDQxLDQyLDQzLDQ0LDQ1LDQ2LDQ3LDQ4LDQ5XX0={"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\">&lt;</span><span class=\"TMAutolink\">$1</span><span class=\"TMMark TMMark_TMAutolink\">&gt;</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, '&amp;')\n .replace(/</g, '&lt;')\n .replace(/>/g, '&gt;');\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 private hasFocus: boolean = true;\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.hasFocus = true;\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(\"beforeinput\", (e) => this.handleBeforeInputEvent(e));\n this.e.addEventListener(\"compositionend\", (e) => this.handleInputEvent(e));\n document.addEventListener(\"selectionchange\", (e) => {\n if (this.hasFocus) { this.handleSelectionChangeEvent(e); }\n }\n );\n this.e.addEventListener(\"blur\", () => this.hasFocus = false );\n this.e.addEventListener(\"focus\", () => this.hasFocus = true );\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 the node doesn't have a previous sibling, it must be the first line\n if (node.previousSibling) {\n const currentLineNumData = (node as HTMLElement).dataset?.lineNum;\n const previousLineNumData = (node.previousSibling as HTMLElement).dataset?.lineNum;\n\n if (currentLineNumData && previousLineNumData) {\n const currentLineNum = parseInt(currentLineNumData);\n const previousLineNum = parseInt(previousLineNumData);\n if (currentLineNum === previousLineNum + 1) {\n row = currentLineNum;\n } else {\n // If the current line is NOT the previous line + 1, then either \n // the current line got split in two or merged with the previous line\n // Either way, we need to recalculate the row number\n while (node.previousSibling) {\n row++;\n node = node.previousSibling;\n }\n }\n }\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 /**\n * beforeinput handler, exclusively to handle insertParagraph and\n * insertLineBreak events. These used to be handled in the input event,\n * but that caused issues with Firefox where the input event would be\n * sometimes not be fired for these input types.\n * @param event The input event\n * @returns nothing\n */\n private handleBeforeInputEvent(event: Event): void {\n const beforeInputEvent = event as InputEvent;\n if (\n beforeInputEvent.inputType !== \"insertParagraph\" &&\n beforeInputEvent.inputType !== \"insertLineBreak\"\n ) return;\n if (!this.isRestoringHistory) this.pushHistory();\n event.preventDefault();\n this.clearDirtyFlag();\n\n const focus = this.getSelection();\n const anchor = this.getSelection(true);\n\n if (!focus || !anchor) return;\n \n // If focus and anchor are in different lines, simply remove everything \n // after the beginning of the selection and before the end of the selection\n // and remove any lines in between\n if (focus.row !== anchor.row) {\n const beginning = focus.row < anchor.row ? focus : anchor;\n const end = focus.row < anchor.row ? anchor : focus;\n this.lines[beginning.row] = this.lines[beginning.row].substring(0, beginning.col);\n this.lines[end.row] = this.lines[end.row].substring(end.col);\n this.spliceLines(beginning.row + 1, end.row - beginning.row - 1);\n focus.row = beginning.row + 1;\n focus.col = 0;\n } else {\n let continuableType: string | false = false;\n switch (this.lineTypes[focus.row]) {\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 const lineBeforeBreak = this.lines[focus.row].substring(0, focus.col <= anchor.col ? focus.col : anchor.col);\n const lineAfterBreak = this.lines[focus.row].substring(focus.col <= anchor.col ? anchor.col : focus.col);\n this.spliceLines(focus.row, 1, [lineBeforeBreak, lineAfterBreak]);\n\n focus.row += 1;\n focus.col = 0;\n\n if (continuableType) {\n let capture = lineGrammar[continuableType].regexp.exec(this.lines[focus.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[focus.row] = `${capture[1]}${this.lines[focus.row]}`;\n this.lineDirty[focus.row] = true;\n focus.col = capture[1].length;\n } else {\n this.lines[focus.row - 1] = \"\";\n this.lineDirty[focus.row - 1] = true;\n }\n }\n }\n }\n this.updateFormatting();\n this.setSelection(focus);\n this.fireChange();\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 should never happen since these are handled by the beforeinput handler\n return;\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 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;\n"],"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","hasFocus","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","handleBeforeInputEvent","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","currentLineNumData","_a","previousLineNumData","_b","currentLineNum","previousLineNum","computeNodeAndOffset","windowSelection","setBaseAndExtent","text","beginning","insertedLines","lineBefore","substr","lineEnd","endColPos","spliceLines","startCol","endCol","left","mid","right","listener","linesDirty","beforeInputEvent","inputType","clearDirtyFlag","substring","continuableType","lineBeforeBreak","lineAfterBreak","result","inputEvent","fixNodeHierarchy","updateLineContentsAndFormatting","_e","fireSelection","clipboardData","getData","fireDrop","dataTransfer","originalString","processed","stack","cap","potentialLink","potentialImage","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","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","sel","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]}