@plait/mind 0.3.0 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (64) hide show
  1. package/drawer/{emoji.drawer.d.ts → emojis.drawer.d.ts} +2 -1
  2. package/esm2020/base/emoji-base.component.mjs +3 -3
  3. package/esm2020/drawer/emojis.drawer.mjs +73 -0
  4. package/esm2020/interfaces/element.mjs +6 -1
  5. package/esm2020/mind.component.mjs +3 -3
  6. package/esm2020/mind.module.mjs +4 -4
  7. package/esm2020/node.component.mjs +11 -15
  8. package/esm2020/plugins/with-abstract-resize.mjs +6 -2
  9. package/esm2020/plugins/with-mind-create.mjs +5 -4
  10. package/esm2020/plugins/with-mind.mjs +9 -4
  11. package/esm2020/plugins/with-node-dnd.mjs +13 -12
  12. package/esm2020/transforms/index.mjs +4 -3
  13. package/esm2020/transforms/node.mjs +11 -8
  14. package/esm2020/utils/dnd/common.mjs +29 -1
  15. package/esm2020/utils/dnd/detector.mjs +1 -7
  16. package/esm2020/utils/draw/abstract-outline.mjs +75 -0
  17. package/esm2020/utils/draw/node-dnd.mjs +133 -0
  18. package/esm2020/utils/draw/node-link/abstract-link.mjs +54 -0
  19. package/esm2020/utils/draw/node-link/draw-link.mjs +9 -0
  20. package/esm2020/utils/draw/node-link/indented-link.mjs +54 -0
  21. package/esm2020/utils/draw/node-link/logic-link.mjs +67 -0
  22. package/esm2020/utils/draw/node-shape.mjs +21 -0
  23. package/esm2020/utils/draw/node-topic.mjs +32 -0
  24. package/esm2020/utils/index.mjs +4 -2
  25. package/esm2020/utils/mind.mjs +2 -27
  26. package/esm2020/utils/node/common.mjs +6 -0
  27. package/esm2020/utils/node/index.mjs +4 -0
  28. package/esm2020/utils/node/right-node-count.mjs +45 -0
  29. package/esm2020/utils/node-style/branch.mjs +6 -1
  30. package/fesm2015/plait-mind.mjs +985 -911
  31. package/fesm2015/plait-mind.mjs.map +1 -1
  32. package/fesm2020/plait-mind.mjs +1005 -931
  33. package/fesm2020/plait-mind.mjs.map +1 -1
  34. package/interfaces/element.d.ts +5 -0
  35. package/node.component.d.ts +1 -1
  36. package/package.json +1 -1
  37. package/transforms/index.d.ts +1 -0
  38. package/transforms/node.d.ts +2 -0
  39. package/utils/dnd/common.d.ts +5 -1
  40. package/utils/dnd/detector.d.ts +0 -6
  41. package/{draw/abstract.d.ts → utils/draw/abstract-outline.d.ts} +2 -2
  42. package/utils/{dnd/draw.d.ts → draw/node-dnd.d.ts} +1 -5
  43. package/{draw/link → utils/draw/node-link}/abstract-link.d.ts +1 -1
  44. package/utils/draw/node-link/draw-link.d.ts +3 -0
  45. package/{draw → utils/draw/node-link}/indented-link.d.ts +1 -1
  46. package/utils/draw/node-link/logic-link.d.ts +3 -0
  47. package/{draw/node.d.ts → utils/draw/node-shape.d.ts} +2 -2
  48. package/{draw/topic.d.ts → utils/draw/node-topic.d.ts} +3 -3
  49. package/utils/index.d.ts +3 -1
  50. package/utils/mind.d.ts +0 -2
  51. package/utils/{node.d.ts → node/common.d.ts} +1 -1
  52. package/utils/node/index.d.ts +3 -0
  53. package/utils/node/right-node-count.d.ts +9 -0
  54. package/utils/node-style/branch.d.ts +1 -0
  55. package/draw/link/logic-link.d.ts +0 -3
  56. package/esm2020/draw/abstract.mjs +0 -75
  57. package/esm2020/draw/indented-link.mjs +0 -45
  58. package/esm2020/draw/link/abstract-link.mjs +0 -38
  59. package/esm2020/draw/link/logic-link.mjs +0 -54
  60. package/esm2020/draw/node.mjs +0 -21
  61. package/esm2020/draw/topic.mjs +0 -32
  62. package/esm2020/drawer/emoji.drawer.mjs +0 -73
  63. package/esm2020/utils/dnd/draw.mjs +0 -161
  64. package/esm2020/utils/node.mjs +0 -6
@@ -2,7 +2,7 @@ import { ComponentRef, ViewContainerRef } from '@angular/core';
2
2
  import { EmojiData, EmojiItem, MindElement } from '../interfaces';
3
3
  import { MindEmojiBaseComponent } from '../base/emoji-base.component';
4
4
  import { PlaitMindBoard } from '../plugins/with-mind.board';
5
- export declare class EmojiDrawer {
5
+ declare class EmojiDrawer {
6
6
  private board;
7
7
  private viewContainerRef;
8
8
  componentRef: ComponentRef<MindEmojiBaseComponent> | null;
@@ -20,3 +20,4 @@ export declare class EmojisDrawer {
20
20
  drawEmojis(element: MindElement): SVGGElement | undefined;
21
21
  destroy(): void;
22
22
  }
23
+ export {};
@@ -12,9 +12,9 @@ export class MindEmojiBaseComponent {
12
12
  this.elementRef.nativeElement.style.fontSize = `${this.fontSize}px`;
13
13
  }
14
14
  }
15
- MindEmojiBaseComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: MindEmojiBaseComponent, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive });
16
- MindEmojiBaseComponent.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.2", type: MindEmojiBaseComponent, inputs: { fontSize: "fontSize", emojiItem: "emojiItem", board: "board", element: "element" }, host: { classAttribute: "mind-node-emoji" }, ngImport: i0 });
17
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: MindEmojiBaseComponent, decorators: [{
15
+ MindEmojiBaseComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.5", ngImport: i0, type: MindEmojiBaseComponent, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive });
16
+ MindEmojiBaseComponent.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.5", type: MindEmojiBaseComponent, inputs: { fontSize: "fontSize", emojiItem: "emojiItem", board: "board", element: "element" }, host: { classAttribute: "mind-node-emoji" }, ngImport: i0 });
17
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.5", ngImport: i0, type: MindEmojiBaseComponent, decorators: [{
18
18
  type: Directive,
19
19
  args: [{
20
20
  host: {
@@ -0,0 +1,73 @@
1
+ import { MindElement } from '../interfaces';
2
+ import { createForeignObject } from '@plait/richtext';
3
+ import { createG } from '@plait/core';
4
+ import { getEmojiFontSize } from '../utils/space/emoji';
5
+ import { getEmojiForeignRectangle } from '../utils/position/emoji';
6
+ class EmojiDrawer {
7
+ constructor(board, viewContainerRef) {
8
+ this.board = board;
9
+ this.viewContainerRef = viewContainerRef;
10
+ this.componentRef = null;
11
+ }
12
+ draw(emoji, element) {
13
+ this.destroy();
14
+ const componentType = this.board.drawEmoji(emoji, element);
15
+ this.componentRef = this.viewContainerRef.createComponent(componentType);
16
+ this.componentRef.instance.emojiItem = emoji;
17
+ this.componentRef.instance.board = this.board;
18
+ this.componentRef.instance.element = element;
19
+ this.componentRef.instance.fontSize = getEmojiFontSize(element);
20
+ }
21
+ get nativeElement() {
22
+ if (this.componentRef) {
23
+ return this.componentRef.instance.nativeElement;
24
+ }
25
+ else {
26
+ return null;
27
+ }
28
+ }
29
+ destroy() {
30
+ if (this.componentRef) {
31
+ this.componentRef.destroy();
32
+ this.componentRef = null;
33
+ }
34
+ }
35
+ }
36
+ export class EmojisDrawer {
37
+ constructor(board, viewContainerRef) {
38
+ this.board = board;
39
+ this.viewContainerRef = viewContainerRef;
40
+ this.emojiDrawers = [];
41
+ }
42
+ drawEmojis(element) {
43
+ this.destroy();
44
+ if (MindElement.hasEmojis(element)) {
45
+ this.g = createG();
46
+ this.g.classList.add('emojis');
47
+ const foreignRectangle = getEmojiForeignRectangle(this.board, element);
48
+ const foreignObject = createForeignObject(foreignRectangle.x, foreignRectangle.y, foreignRectangle.width, foreignRectangle.height);
49
+ this.g.append(foreignObject);
50
+ const container = document.createElement('div');
51
+ container.classList.add('node-emojis-container');
52
+ foreignObject.append(container);
53
+ this.emojiDrawers = element.data.emojis.map(emojiItem => {
54
+ const drawer = new EmojiDrawer(this.board, this.viewContainerRef);
55
+ drawer.draw(emojiItem, element);
56
+ return drawer;
57
+ });
58
+ this.emojiDrawers.forEach(drawer => {
59
+ container.append(drawer.nativeElement);
60
+ });
61
+ return this.g;
62
+ }
63
+ return undefined;
64
+ }
65
+ destroy() {
66
+ if (this.g) {
67
+ this.g.remove();
68
+ }
69
+ this.emojiDrawers.forEach(drawer => drawer.destroy());
70
+ this.emojiDrawers = [];
71
+ }
72
+ }
73
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW1vamlzLmRyYXdlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL21pbmQvc3JjL2RyYXdlci9lbW9qaXMuZHJhd2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBd0IsV0FBVyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRWxFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDdEMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDeEQsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFHbkUsTUFBTSxXQUFXO0lBR2IsWUFBb0IsS0FBcUIsRUFBVSxnQkFBa0M7UUFBakUsVUFBSyxHQUFMLEtBQUssQ0FBZ0I7UUFBVSxxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBRnJGLGlCQUFZLEdBQWdELElBQUksQ0FBQztJQUV1QixDQUFDO0lBRXpGLElBQUksQ0FBQyxLQUFnQixFQUFFLE9BQStCO1FBQ2xELElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNmLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQztRQUMzRCxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxlQUFlLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDekUsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztRQUM3QyxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztRQUM5QyxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO1FBQzdDLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLFFBQVEsR0FBRyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNwRSxDQUFDO0lBRUQsSUFBSSxhQUFhO1FBQ2IsSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFO1lBQ25CLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDO1NBQ25EO2FBQU07WUFDSCxPQUFPLElBQUksQ0FBQztTQUNmO0lBQ0wsQ0FBQztJQUVELE9BQU87UUFDSCxJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUU7WUFDbkIsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUM1QixJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQztTQUM1QjtJQUNMLENBQUM7Q0FDSjtBQUVELE1BQU0sT0FBTyxZQUFZO0lBS3JCLFlBQW9CLEtBQXFCLEVBQVUsZ0JBQWtDO1FBQWpFLFVBQUssR0FBTCxLQUFLLENBQWdCO1FBQVUscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQUpyRixpQkFBWSxHQUFrQixFQUFFLENBQUM7SUFJdUQsQ0FBQztJQUV6RixVQUFVLENBQUMsT0FBb0I7UUFDM0IsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ2YsSUFBSSxXQUFXLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQ2hDLElBQUksQ0FBQyxDQUFDLEdBQUcsT0FBTyxFQUFFLENBQUM7WUFDbkIsSUFBSSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQy9CLE1BQU0sZ0JBQWdCLEdBQUcsd0JBQXdCLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQztZQUN2RSxNQUFNLGFBQWEsR0FBRyxtQkFBbUIsQ0FDckMsZ0JBQWdCLENBQUMsQ0FBQyxFQUNsQixnQkFBZ0IsQ0FBQyxDQUFDLEVBQ2xCLGdCQUFnQixDQUFDLEtBQUssRUFDdEIsZ0JBQWdCLENBQUMsTUFBTSxDQUMxQixDQUFDO1lBQ0YsSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLENBQUM7WUFDN0IsTUFBTSxTQUFTLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNoRCxTQUFTLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO1lBQ2pELGFBQWEsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDaEMsSUFBSSxDQUFDLFlBQVksR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLEVBQUU7Z0JBQ3BELE1BQU0sTUFBTSxHQUFHLElBQUksV0FBVyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7Z0JBQ2xFLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxDQUFDO2dCQUNoQyxPQUFPLE1BQU0sQ0FBQztZQUNsQixDQUFDLENBQUMsQ0FBQztZQUNILElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFO2dCQUMvQixTQUFTLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxhQUFjLENBQUMsQ0FBQztZQUM1QyxDQUFDLENBQUMsQ0FBQztZQUNILE9BQU8sSUFBSSxDQUFDLENBQUMsQ0FBQztTQUNqQjtRQUNELE9BQU8sU0FBUyxDQUFDO0lBQ3JCLENBQUM7SUFFRCxPQUFPO1FBQ0gsSUFBSSxJQUFJLENBQUMsQ0FBQyxFQUFFO1lBQ1IsSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztTQUNuQjtRQUNELElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7UUFDdEQsSUFBSSxDQUFDLFlBQVksR0FBRyxFQUFFLENBQUM7SUFDM0IsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50UmVmLCBWaWV3Q29udGFpbmVyUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBFbW9qaURhdGEsIEVtb2ppSXRlbSwgTWluZEVsZW1lbnQgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IE1pbmRFbW9qaUJhc2VDb21wb25lbnQgfSBmcm9tICcuLi9iYXNlL2Vtb2ppLWJhc2UuY29tcG9uZW50JztcbmltcG9ydCB7IGNyZWF0ZUZvcmVpZ25PYmplY3QgfSBmcm9tICdAcGxhaXQvcmljaHRleHQnO1xuaW1wb3J0IHsgY3JlYXRlRyB9IGZyb20gJ0BwbGFpdC9jb3JlJztcbmltcG9ydCB7IGdldEVtb2ppRm9udFNpemUgfSBmcm9tICcuLi91dGlscy9zcGFjZS9lbW9qaSc7XG5pbXBvcnQgeyBnZXRFbW9qaUZvcmVpZ25SZWN0YW5nbGUgfSBmcm9tICcuLi91dGlscy9wb3NpdGlvbi9lbW9qaSc7XG5pbXBvcnQgeyBQbGFpdE1pbmRCb2FyZCB9IGZyb20gJy4uL3BsdWdpbnMvd2l0aC1taW5kLmJvYXJkJztcblxuY2xhc3MgRW1vamlEcmF3ZXIge1xuICAgIGNvbXBvbmVudFJlZjogQ29tcG9uZW50UmVmPE1pbmRFbW9qaUJhc2VDb21wb25lbnQ+IHwgbnVsbCA9IG51bGw7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIGJvYXJkOiBQbGFpdE1pbmRCb2FyZCwgcHJpdmF0ZSB2aWV3Q29udGFpbmVyUmVmOiBWaWV3Q29udGFpbmVyUmVmKSB7fVxuXG4gICAgZHJhdyhlbW9qaTogRW1vamlJdGVtLCBlbGVtZW50OiBNaW5kRWxlbWVudDxFbW9qaURhdGE+KSB7XG4gICAgICAgIHRoaXMuZGVzdHJveSgpO1xuICAgICAgICBjb25zdCBjb21wb25lbnRUeXBlID0gdGhpcy5ib2FyZC5kcmF3RW1vamkoZW1vamksIGVsZW1lbnQpO1xuICAgICAgICB0aGlzLmNvbXBvbmVudFJlZiA9IHRoaXMudmlld0NvbnRhaW5lclJlZi5jcmVhdGVDb21wb25lbnQoY29tcG9uZW50VHlwZSk7XG4gICAgICAgIHRoaXMuY29tcG9uZW50UmVmLmluc3RhbmNlLmVtb2ppSXRlbSA9IGVtb2ppO1xuICAgICAgICB0aGlzLmNvbXBvbmVudFJlZi5pbnN0YW5jZS5ib2FyZCA9IHRoaXMuYm9hcmQ7XG4gICAgICAgIHRoaXMuY29tcG9uZW50UmVmLmluc3RhbmNlLmVsZW1lbnQgPSBlbGVtZW50O1xuICAgICAgICB0aGlzLmNvbXBvbmVudFJlZi5pbnN0YW5jZS5mb250U2l6ZSA9IGdldEVtb2ppRm9udFNpemUoZWxlbWVudCk7XG4gICAgfVxuXG4gICAgZ2V0IG5hdGl2ZUVsZW1lbnQoKSB7XG4gICAgICAgIGlmICh0aGlzLmNvbXBvbmVudFJlZikge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29tcG9uZW50UmVmLmluc3RhbmNlLm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGRlc3Ryb3koKSB7XG4gICAgICAgIGlmICh0aGlzLmNvbXBvbmVudFJlZikge1xuICAgICAgICAgICAgdGhpcy5jb21wb25lbnRSZWYuZGVzdHJveSgpO1xuICAgICAgICAgICAgdGhpcy5jb21wb25lbnRSZWYgPSBudWxsO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgRW1vamlzRHJhd2VyIHtcbiAgICBlbW9qaURyYXdlcnM6IEVtb2ppRHJhd2VyW10gPSBbXTtcblxuICAgIGc/OiBTVkdHRWxlbWVudDtcblxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgYm9hcmQ6IFBsYWl0TWluZEJvYXJkLCBwcml2YXRlIHZpZXdDb250YWluZXJSZWY6IFZpZXdDb250YWluZXJSZWYpIHt9XG5cbiAgICBkcmF3RW1vamlzKGVsZW1lbnQ6IE1pbmRFbGVtZW50KSB7XG4gICAgICAgIHRoaXMuZGVzdHJveSgpO1xuICAgICAgICBpZiAoTWluZEVsZW1lbnQuaGFzRW1vamlzKGVsZW1lbnQpKSB7XG4gICAgICAgICAgICB0aGlzLmcgPSBjcmVhdGVHKCk7XG4gICAgICAgICAgICB0aGlzLmcuY2xhc3NMaXN0LmFkZCgnZW1vamlzJyk7XG4gICAgICAgICAgICBjb25zdCBmb3JlaWduUmVjdGFuZ2xlID0gZ2V0RW1vamlGb3JlaWduUmVjdGFuZ2xlKHRoaXMuYm9hcmQsIGVsZW1lbnQpO1xuICAgICAgICAgICAgY29uc3QgZm9yZWlnbk9iamVjdCA9IGNyZWF0ZUZvcmVpZ25PYmplY3QoXG4gICAgICAgICAgICAgICAgZm9yZWlnblJlY3RhbmdsZS54LFxuICAgICAgICAgICAgICAgIGZvcmVpZ25SZWN0YW5nbGUueSxcbiAgICAgICAgICAgICAgICBmb3JlaWduUmVjdGFuZ2xlLndpZHRoLFxuICAgICAgICAgICAgICAgIGZvcmVpZ25SZWN0YW5nbGUuaGVpZ2h0XG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgdGhpcy5nLmFwcGVuZChmb3JlaWduT2JqZWN0KTtcbiAgICAgICAgICAgIGNvbnN0IGNvbnRhaW5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgY29udGFpbmVyLmNsYXNzTGlzdC5hZGQoJ25vZGUtZW1vamlzLWNvbnRhaW5lcicpO1xuICAgICAgICAgICAgZm9yZWlnbk9iamVjdC5hcHBlbmQoY29udGFpbmVyKTtcbiAgICAgICAgICAgIHRoaXMuZW1vamlEcmF3ZXJzID0gZWxlbWVudC5kYXRhLmVtb2ppcy5tYXAoZW1vamlJdGVtID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBkcmF3ZXIgPSBuZXcgRW1vamlEcmF3ZXIodGhpcy5ib2FyZCwgdGhpcy52aWV3Q29udGFpbmVyUmVmKTtcbiAgICAgICAgICAgICAgICBkcmF3ZXIuZHJhdyhlbW9qaUl0ZW0sIGVsZW1lbnQpO1xuICAgICAgICAgICAgICAgIHJldHVybiBkcmF3ZXI7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMuZW1vamlEcmF3ZXJzLmZvckVhY2goZHJhd2VyID0+IHtcbiAgICAgICAgICAgICAgICBjb250YWluZXIuYXBwZW5kKGRyYXdlci5uYXRpdmVFbGVtZW50ISk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmc7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBkZXN0cm95KCkge1xuICAgICAgICBpZiAodGhpcy5nKSB7XG4gICAgICAgICAgICB0aGlzLmcucmVtb3ZlKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5lbW9qaURyYXdlcnMuZm9yRWFjaChkcmF3ZXIgPT4gZHJhd2VyLmRlc3Ryb3koKSk7XG4gICAgICAgIHRoaXMuZW1vamlEcmF3ZXJzID0gW107XG4gICAgfVxufVxuIl19
@@ -86,4 +86,9 @@ export var MindElementShape;
86
86
  MindElementShape["roundRectangle"] = "round-rectangle";
87
87
  MindElementShape["underline"] = "underline";
88
88
  })(MindElementShape || (MindElementShape = {}));
89
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWxlbWVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL21pbmQvc3JjL2ludGVyZmFjZXMvZWxlbWVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsZ0JBQWdCLEVBQWtCLE1BQU0sZ0JBQWdCLENBQUM7QUFDbEUsT0FBTyxFQUFFLGNBQWMsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFnQixTQUFTLEVBQVMsTUFBTSxhQUFhLENBQUM7QUFDL0YsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUN6QyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBa0MzQyxNQUFNLENBQUMsTUFBTSxTQUFTLEdBQUc7SUFDckIsTUFBTSxFQUFFLENBQUMsS0FBVSxFQUFzQixFQUFFO1FBQ3ZDLE9BQU8sS0FBSyxDQUFDLElBQUksS0FBSyxTQUFTLENBQUM7SUFDcEMsQ0FBQztDQUNKLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxXQUFXLEdBQUc7SUFDdkIsU0FBUyxDQUFDLEtBQWtCLEVBQUUsTUFBc0I7UUFDaEQsTUFBTSxPQUFPLEdBQUcsV0FBVyxDQUFDLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3RELE9BQU8sT0FBTyxLQUFLLE1BQU0sQ0FBQztJQUM5QixDQUFDO0lBQ0QsZ0JBQWdCLENBQUMsS0FBa0I7UUFDL0IsTUFBTSxPQUFPLEdBQUcsV0FBVyxDQUFDLGtCQUFrQixDQUFDLEtBQUssQ0FBbUIsQ0FBQztRQUN4RSxPQUFPLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3JDLENBQUM7SUFDRCxhQUFhLENBQUMsS0FBaUIsRUFBRSxPQUFxQjtRQUNsRCxNQUFNLElBQUksR0FBRyxVQUFVLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQztRQUNqRCxNQUFNLFdBQVcsR0FBRyxTQUFTLENBQUMsR0FBRyxDQUFD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LENBQUM7SUFDL0IsQ0FBQztDQUNKLENBQUM7QUFFRixNQUFNLENBQU4sSUFBWSxnQkFHWDtBQUhELFdBQVksZ0JBQWdCO0lBQ3hCLHNEQUFrQyxDQUFBO0lBQ2xDLDJDQUF1QixDQUFBO0FBQzNCLENBQUMsRUFIVyxnQkFBZ0IsS0FBaEIsZ0JBQWdCLFFBRzNCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaXNJbmRlbnRlZExheW91dCwgTWluZExheW91dFR5cGUgfSBmcm9tICdAcGxhaXQvbGF5b3V0cyc7XG5pbXBvcnQgeyBOT0RFX1RPX1BBUkVOVCwgUGF0aCwgUGxhaXRCb2FyZCwgUGxhaXRFbGVtZW50LCBQbGFpdE5vZGUsIFBvaW50IH0gZnJvbSAnQHBsYWl0L2NvcmUnO1xuaW1wb3J0IHsgTWluZFF1ZXJpZXMgfSBmcm9tICcuLi9xdWVyaWVzJztcbmltcG9ydCB7IEVMRU1FTlRfVE9fTk9ERSB9IGZyb20gJy4uL3V0aWxzJztcbmltcG9ydCB7IEJhc2VEYXRhLCBFbW9qaURhdGEgfSBmcm9tICcuL2VsZW1lbnQtZGF0YSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTWluZEVsZW1lbnQ8VCA9IEJhc2VEYXRhPiBleHRlbmRzIFBsYWl0RWxlbWVudCB7XG4gICAgZGF0YTogVDtcbiAgICBjaGlsZHJlbjogTWluZEVsZW1lbnRbXTtcbiAgICByaWdodE5vZGVDb3VudD86IG51bWJlcjtcbiAgICB3aWR0aDogbnVtYmVyO1xuICAgIGhlaWdodDogbnVtYmVyO1xuICAgIGlzUm9vdD86IGJvb2xlYW47XG5cbiAgICAvLyBub2RlIHN0eWxlIGF0dHJpYnV0ZXNcbiAgICBmaWxsPzogc3RyaW5nO1xuICAgIHN0cm9rZUNvbG9yPzogc3RyaW5nO1xuICAgIHN0cm9rZVdpZHRoPzogbnVtYmVyO1xuICAgIHNoYXBlPzogTWluZEVsZW1lbnRTaGFwZTtcblxuICAgIC8vIGxpbmsgc3R5bGUgYXR0cmlidXRlc1xuICAgIGJyYW5jaENvbG9yPzogc3RyaW5nO1xuICAgIGJyYW5jaFdpZHRoPzogbnVtYmVyO1xuXG4gICAgLy8gbGF5b3V0XG4gICAgbGF5b3V0PzogTWluZExheW91dFR5cGU7XG4gICAgaXNDb2xsYXBzZWQ/OiBib29sZWFuO1xuXG4gICAgc3RhcnQ/OiBudW1iZXI7XG4gICAgZW5kPzogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFBsYWl0TWluZCBleHRlbmRzIE1pbmRFbGVtZW50IHtcbiAgICB0eXBlOiAnbWluZG1hcCc7XG4gICAgcG9pbnRzOiBQb2ludFtdO1xufVxuXG5leHBvcnQgY29uc3QgUGxhaXRNaW5kID0ge1xuICAgIGlzTWluZDogKHZhbHVlOiBhbnkpOiB2YWx1ZSBpcyBQbGFpdE1pbmQgPT4ge1xuICAgICAgICByZXR1cm4gdmFsdWUudHlwZSA9PT0gJ21pbmRtYXAnO1xuICAgIH1cbn07XG5cbmV4cG9ydCBjb25zdCBNaW5kRWxlbWVudCA9IHtcbiAgICBoYXNMYXlvdXQodmFsdWU6IE1pbmRFbGVtZW50LCBsYXlvdXQ6IE1pbmRMYXlvdXRUeXBlKSB7XG4gICAgICAgIGNvbnN0IF9sYXlvdXQgPSBNaW5kUXVlcmllcy5nZXRMYXlvdXRCeUVsZW1lbnQodmFsdWUpO1xuICAgICAgICByZXR1cm4gX2xheW91dCA9PT0gbGF5b3V0O1xuICAgIH0sXG4gICAgaXNJbmRlbnRlZExheW91dCh2YWx1ZTogTWluZEVsZW1lbnQpIHtcbiAgICAgICAgY29uc3QgX2xheW91dCA9IE1pbmRRdWVyaWVzLmdldExheW91dEJ5RWxlbWVudCh2YWx1ZSkgYXMgTWluZExheW91dFR5cGU7XG4gICAgICAgIHJldHVybiBpc0luZGVudGVkTGF5b3V0KF9sYXlvdXQpO1xuICAgIH0sXG4gICAgaXNNaW5kRWxlbWVudChib2FyZDogUGxhaXRCb2FyZCwgZWxlbWVudDogUGxhaXRFbGVtZW50KTogZWxlbWVudCBpcyBNaW5kRWxlbWVudCB7XG4gICAgICAgIGNvbnN0IHBhdGggPSBQbGFpdEJvYXJkLmZpbmRQYXRoKGJvYXJkLCBlbGVtZW50KTtcbiAgICAgICAgY29uc3Qgcm9vdEVsZW1lbnQgPSBQbGFpdE5vZGUuZ2V0KGJvYXJkLCBwYXRoLnNsaWNlKDAsIDEpKTtcbiAgICAgICAgaWYgKFBsYWl0TWluZC5pc01pbmQocm9vdEVsZW1lbnQpKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgIH0sXG4gICAgZ2V0UGFyZW50KG5vZGU6IE1pbmRFbGVtZW50KSB7XG4gICAgICAgIGlmIChQbGFpdE1pbmQuaXNNaW5kKG5vZGUpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ21pbmQgcm9vdCBub2RlIGNhbiBub3QgZ2V0IHBhcmVudCcpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHBhcmVudCA9IE5PREVfVE9fUEFSRU5ULmdldChub2RlKSBhcyBNaW5kRWxlbWVudDtcbiAgICAgICAgcmV0dXJuIHBhcmVudDtcbiAgICB9LFxuICAgIGZpbmRQYXJlbnQobm9kZTogTWluZEVsZW1lbnQpIHtcbiAgICAgICAgaWYgKFBsYWl0TWluZC5pc01pbmQobm9kZSkpIHtcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcGFyZW50ID0gTk9ERV9UT19QQVJFTlQuZ2V0KG5vZGUpIGFzIE1pbmRFbGVtZW50O1xuICAgICAgICByZXR1cm4gcGFyZW50O1xuICAgIH0sXG4gICAgZ2V0Um9vdChib2FyZDogUGxhaXRCb2FyZCwgZWxlbWVudDogTWluZEVsZW1lbnQpIHtcbiAgICAgICAgY29uc3QgcGF0aCA9IFBsYWl0Qm9hcmQuZmluZFBhdGgoYm9hcmQsIGVsZW1lbnQpO1xuICAgICAgICByZXR1cm4gUGxhaXROb2RlLmdldChib2FyZCwgcGF0aC5zbGljZSgwLCAxKSkgYXMgUGxhaXRNaW5kO1xuICAgIH0sXG4gICAgZ2V0QW5jZXN0b3JzKGJvYXJkOiBQbGFpdEJvYXJkLCBlbGVtZW50OiBNaW5kRWxlbWVudCkge1xuICAgICAgICBjb25zdCBwYXRoID0gUGxhaXRCb2FyZC5maW5kUGF0aChib2FyZCwgZWxlbWVudCk7XG4gICAgICAgIGNvbnN0IHBhcmVudHM6IFBsYWl0RWxlbWVudFtdID0gW107XG4gICAgICAgIGZvciAoY29uc3QgcCBvZiBQYXRoLmFuY2VzdG9ycyhwYXRoLCB7IHJldmVyc2U6IHRydWUgfSkpIHtcbiAgICAgICAgICAgIGNvbnN0IG4gPSBQbGFpdE5vZGUuZ2V0KGJvYXJkLCBwKTtcbiAgICAgICAgICAgIGlmIChuICYmICFQbGFpdEJvYXJkLmlzQm9hcmQobikpIHtcbiAgICAgICAgICAgICAgICBwYXJlbnRzLnB1c2gobik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHBhcmVudHM7XG4gICAgfSxcbiAgICBnZXROb2RlKGVsZW1lbnQ6IE1pbmRFbGVtZW50KSB7XG4gICAgICAgIGNvbnN0IG5vZGUgPSBFTEVNRU5UX1RPX05PREUuZ2V0KGVsZW1lbnQpO1xuICAgICAgICBpZiAoIW5vZGUpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgY2FuIG5vdCBnZXQgbm9kZSBmcm9tICR7SlNPTi5zdHJpbmdpZnkoZWxlbWVudCl9YCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5vZGU7XG4gICAgfSxcbiAgICBmaW5kUGFyZW50Tm9kZShlbGVtZW50OiBNaW5kRWxlbWVudCkge1xuICAgICAgICBpZiAoUGxhaXRNaW5kLmlzTWluZChlbGVtZW50KSkge1xuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwYXJlbnQgPSBNaW5kRWxlbWVudC5nZXRQYXJlbnQoZWxlbWVudCk7XG4gICAgICAgIHJldHVybiBNaW5kRWxlbWVudC5nZXROb2RlKHBhcmVudCk7XG4gICAgfSxcbiAgICBoYXNFbW9qaXMoZWxlbWVudDogTWluZEVsZW1lbnQpOiBlbGVtZW50IGlzIE1pbmRFbGVtZW50PEVtb2ppRGF0YT4ge1xuICAgICAgICBpZiAoZWxlbWVudC5kYXRhLmVtb2ppcykge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIGdldEVtb2ppcyhlbGVtZW50OiBNaW5kRWxlbWVudDxFbW9qaURhdGE+KSB7XG4gICAgICAgIHJldHVybiBlbGVtZW50LmRhdGEuZW1vamlzO1xuICAgIH1cbn07XG5cbmV4cG9ydCBlbnVtIE1pbmRFbGVtZW50U2hhcGUge1xuICAgIHJvdW5kUmVjdGFuZ2xlID0gJ3JvdW5kLXJlY3RhbmdsZScsXG4gICAgdW5kZXJsaW5lID0gJ3VuZGVybGluZSdcbn1cbiJdfQ==
89
+ export var BranchShape;
90
+ (function (BranchShape) {
91
+ BranchShape["bight"] = "bight";
92
+ BranchShape["polyline"] = "polyline";
93
+ })(BranchShape || (BranchShape = {}));
94
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWxlbWVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL21pbmQvc3JjL2ludGVyZmFjZXMvZWxlbWVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsZ0JBQWdCLEVBQWtCLE1BQU0sZ0JBQWdCLENBQUM7QUFDbEUsT0FBTyxFQUFFLGNBQWMsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFnQixTQUFTLEVBQVMsTUFBTSxhQUFhLENBQUM7QUFDL0YsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUN6QyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBbUMzQyxNQUFNLENBQUMsTUFBTSxTQUFTLEdBQUc7SUFDckIsTUFBTSxFQUFFLENBQUMsS0FBVSxFQUFzQixFQUFFO1FBQ3ZDLE9BQU8sS0FBSyxDQUFDLElBQUksS0FBSyxTQUFTLENBQUM7SUFDcEMsQ0FBQztDQUNKLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxXQUFXLEdBQUc7SUFDdkIsU0FBUyxDQUFDLEtBQWtCLEVBQUUsTUFBc0I7UUFDaEQsTUFBTSxPQUFPLEdBQUcsV0FBVyxDQUFDLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3RELE9BQU8sT0FBTyxLQUFLLE1BQU0sQ0FBQztJQUM5QixDQUFDO0lBQ0QsZ0JBQWdCLENBQUMsS0FBa0I7UUFDL0IsTUFBTSxPQUFPLEdBQUcsV0FBVyxDQUFDLGtCQUFrQixDQUFDLEtBQUssQ0FBbUIsQ0FBQztRQUN4RSxPQUFPLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3JDLENBQUM7SUFDRCxhQUFhLENBQUMsS0FBaUIsRUFBRSxPQUFxQjtRQUNsRCxNQUFNLElBQUksR0FBRyxVQUFVLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQztRQUNqRCxNQUFNLFdBQVcsR0FBRyxTQUFTLENBQUMsR0FBRyxDQUFD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LENBQUM7SUFDL0IsQ0FBQztDQUNKLENBQUM7QUFFRixNQUFNLENBQU4sSUFBWSxnQkFHWDtBQUhELFdBQVksZ0JBQWdCO0lBQ3hCLHNEQUFrQyxDQUFBO0lBQ2xDLDJDQUF1QixDQUFBO0FBQzNCLENBQUMsRUFIVyxnQkFBZ0IsS0FBaEIsZ0JBQWdCLFFBRzNCO0FBRUQsTUFBTSxDQUFOLElBQVksV0FHWDtBQUhELFdBQVksV0FBVztJQUNuQiw4QkFBZSxDQUFBO0lBQ2Ysb0NBQXFCLENBQUE7QUFDekIsQ0FBQyxFQUhXLFdBQVcsS0FBWCxXQUFXLFFBR3RCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaXNJbmRlbnRlZExheW91dCwgTWluZExheW91dFR5cGUgfSBmcm9tICdAcGxhaXQvbGF5b3V0cyc7XG5pbXBvcnQgeyBOT0RFX1RPX1BBUkVOVCwgUGF0aCwgUGxhaXRCb2FyZCwgUGxhaXRFbGVtZW50LCBQbGFpdE5vZGUsIFBvaW50IH0gZnJvbSAnQHBsYWl0L2NvcmUnO1xuaW1wb3J0IHsgTWluZFF1ZXJpZXMgfSBmcm9tICcuLi9xdWVyaWVzJztcbmltcG9ydCB7IEVMRU1FTlRfVE9fTk9ERSB9IGZyb20gJy4uL3V0aWxzJztcbmltcG9ydCB7IEJhc2VEYXRhLCBFbW9qaURhdGEgfSBmcm9tICcuL2VsZW1lbnQtZGF0YSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTWluZEVsZW1lbnQ8VCA9IEJhc2VEYXRhPiBleHRlbmRzIFBsYWl0RWxlbWVudCB7XG4gICAgZGF0YTogVDtcbiAgICBjaGlsZHJlbjogTWluZEVsZW1lbnRbXTtcbiAgICByaWdodE5vZGVDb3VudD86IG51bWJlcjtcbiAgICB3aWR0aDogbnVtYmVyO1xuICAgIGhlaWdodDogbnVtYmVyO1xuICAgIGlzUm9vdD86IGJvb2xlYW47XG5cbiAgICAvLyBub2RlIHN0eWxlIGF0dHJpYnV0ZXNcbiAgICBmaWxsPzogc3RyaW5nO1xuICAgIHN0cm9rZUNvbG9yPzogc3RyaW5nO1xuICAgIHN0cm9rZVdpZHRoPzogbnVtYmVyO1xuICAgIHNoYXBlPzogTWluZEVsZW1lbnRTaGFwZTtcblxuICAgIC8vIGxpbmsgc3R5bGUgYXR0cmlidXRlc1xuICAgIGJyYW5jaENvbG9yPzogc3RyaW5nO1xuICAgIGJyYW5jaFdpZHRoPzogbnVtYmVyO1xuICAgIGJyYW5jaFNoYXBlPzogQnJhbmNoU2hhcGU7XG5cbiAgICAvLyBsYXlvdXRcbiAgICBsYXlvdXQ/OiBNaW5kTGF5b3V0VHlwZTtcbiAgICBpc0NvbGxhcHNlZD86IGJvb2xlYW47XG5cbiAgICBzdGFydD86IG51bWJlcjtcbiAgICBlbmQ/OiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUGxhaXRNaW5kIGV4dGVuZHMgTWluZEVsZW1lbnQge1xuICAgIHR5cGU6ICdtaW5kbWFwJztcbiAgICBwb2ludHM6IFBvaW50W107XG59XG5cbmV4cG9ydCBjb25zdCBQbGFpdE1pbmQgPSB7XG4gICAgaXNNaW5kOiAodmFsdWU6IGFueSk6IHZhbHVlIGlzIFBsYWl0TWluZCA9PiB7XG4gICAgICAgIHJldHVybiB2YWx1ZS50eXBlID09PSAnbWluZG1hcCc7XG4gICAgfVxufTtcblxuZXhwb3J0IGNvbnN0IE1pbmRFbGVtZW50ID0ge1xuICAgIGhhc0xheW91dCh2YWx1ZTogTWluZEVsZW1lbnQsIGxheW91dDogTWluZExheW91dFR5cGUpIHtcbiAgICAgICAgY29uc3QgX2xheW91dCA9IE1pbmRRdWVyaWVzLmdldExheW91dEJ5RWxlbWVudCh2YWx1ZSk7XG4gICAgICAgIHJldHVybiBfbGF5b3V0ID09PSBsYXlvdXQ7XG4gICAgfSxcbiAgICBpc0luZGVudGVkTGF5b3V0KHZhbHVlOiBNaW5kRWxlbWVudCkge1xuICAgICAgICBjb25zdCBfbGF5b3V0ID0gTWluZFF1ZXJpZXMuZ2V0TGF5b3V0QnlFbGVtZW50KHZhbHVlKSBhcyBNaW5kTGF5b3V0VHlwZTtcbiAgICAgICAgcmV0dXJuIGlzSW5kZW50ZWRMYXlvdXQoX2xheW91dCk7XG4gICAgfSxcbiAgICBpc01pbmRFbGVtZW50KGJvYXJkOiBQbGFpdEJvYXJkLCBlbGVtZW50OiBQbGFpdEVsZW1lbnQpOiBlbGVtZW50IGlzIE1pbmRFbGVtZW50IHtcbiAgICAgICAgY29uc3QgcGF0aCA9IFBsYWl0Qm9hcmQuZmluZFBhdGgoYm9hcmQsIGVsZW1lbnQpO1xuICAgICAgICBjb25zdCByb290RWxlbWVudCA9IFBsYWl0Tm9kZS5nZXQoYm9hcmQsIHBhdGguc2xpY2UoMCwgMSkpO1xuICAgICAgICBpZiAoUGxhaXRNaW5kLmlzTWluZChyb290RWxlbWVudCkpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfSxcbiAgICBnZXRQYXJlbnQobm9kZTogTWluZEVsZW1lbnQpIHtcbiAgICAgICAgaWYgKFBsYWl0TWluZC5pc01pbmQobm9kZSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignbWluZCByb290IG5vZGUgY2FuIG5vdCBnZXQgcGFyZW50Jyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcGFyZW50ID0gTk9ERV9UT19QQVJFTlQuZ2V0KG5vZGUpIGFzIE1pbmRFbGVtZW50O1xuICAgICAgICByZXR1cm4gcGFyZW50O1xuICAgIH0sXG4gICAgZmluZFBhcmVudChub2RlOiBNaW5kRWxlbWVudCkge1xuICAgICAgICBpZiAoUGxhaXRNaW5kLmlzTWluZChub2RlKSkge1xuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwYXJlbnQgPSBOT0RFX1RPX1BBUkVOVC5nZXQobm9kZSkgYXMgTWluZEVsZW1lbnQ7XG4gICAgICAgIHJldHVybiBwYXJlbnQ7XG4gICAgfSxcbiAgICBnZXRSb290KGJvYXJkOiBQbGFpdEJvYXJkLCBlbGVtZW50OiBNaW5kRWxlbWVudCkge1xuICAgICAgICBjb25zdCBwYXRoID0gUGxhaXRCb2FyZC5maW5kUGF0aChib2FyZCwgZWxlbWVudCk7XG4gICAgICAgIHJldHVybiBQbGFpdE5vZGUuZ2V0KGJvYXJkLCBwYXRoLnNsaWNlKDAsIDEpKSBhcyBQbGFpdE1pbmQ7XG4gICAgfSxcbiAgICBnZXRBbmNlc3RvcnMoYm9hcmQ6IFBsYWl0Qm9hcmQsIGVsZW1lbnQ6IE1pbmRFbGVtZW50KSB7XG4gICAgICAgIGNvbnN0IHBhdGggPSBQbGFpdEJvYXJkLmZpbmRQYXRoKGJvYXJkLCBlbGVtZW50KTtcbiAgICAgICAgY29uc3QgcGFyZW50czogUGxhaXRFbGVtZW50W10gPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBwIG9mIFBhdGguYW5jZXN0b3JzKHBhdGgsIHsgcmV2ZXJzZTogdHJ1ZSB9KSkge1xuICAgICAgICAgICAgY29uc3QgbiA9IFBsYWl0Tm9kZS5nZXQoYm9hcmQsIHApO1xuICAgICAgICAgICAgaWYgKG4gJiYgIVBsYWl0Qm9hcmQuaXNCb2FyZChuKSkge1xuICAgICAgICAgICAgICAgIHBhcmVudHMucHVzaChuKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcGFyZW50cztcbiAgICB9LFxuICAgIGdldE5vZGUoZWxlbWVudDogTWluZEVsZW1lbnQpIHtcbiAgICAgICAgY29uc3Qgbm9kZSA9IEVMRU1FTlRfVE9fTk9ERS5nZXQoZWxlbWVudCk7XG4gICAgICAgIGlmICghbm9kZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBjYW4gbm90IGdldCBub2RlIGZyb20gJHtKU09OLnN0cmluZ2lmeShlbGVtZW50KX1gKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbm9kZTtcbiAgICB9LFxuICAgIGZpbmRQYXJlbnROb2RlKGVsZW1lbnQ6IE1pbmRFbGVtZW50KSB7XG4gICAgICAgIGlmIChQbGFpdE1pbmQuaXNNaW5kKGVsZW1lbnQpKSB7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHBhcmVudCA9IE1pbmRFbGVtZW50LmdldFBhcmVudChlbGVtZW50KTtcbiAgICAgICAgcmV0dXJuIE1pbmRFbGVtZW50LmdldE5vZGUocGFyZW50KTtcbiAgICB9LFxuICAgIGhhc0Vtb2ppcyhlbGVtZW50OiBNaW5kRWxlbWVudCk6IGVsZW1lbnQgaXMgTWluZEVsZW1lbnQ8RW1vamlEYXRhPiB7XG4gICAgICAgIGlmIChlbGVtZW50LmRhdGEuZW1vamlzKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgIH0sXG4gICAgZ2V0RW1vamlzKGVsZW1lbnQ6IE1pbmRFbGVtZW50PEVtb2ppRGF0YT4pIHtcbiAgICAgICAgcmV0dXJuIGVsZW1lbnQuZGF0YS5lbW9qaXM7XG4gICAgfVxufTtcblxuZXhwb3J0IGVudW0gTWluZEVsZW1lbnRTaGFwZSB7XG4gICAgcm91bmRSZWN0YW5nbGUgPSAncm91bmQtcmVjdGFuZ2xlJyxcbiAgICB1bmRlcmxpbmUgPSAndW5kZXJsaW5lJ1xufVxuXG5leHBvcnQgZW51bSBCcmFuY2hTaGFwZSB7XG4gICAgYmlnaHQgPSAnYmlnaHQnLFxuICAgIHBvbHlsaW5lID0gJ3BvbHlsaW5lJ1xufVxuIl19
@@ -33,11 +33,11 @@ export class PlaitMindComponent extends MindNodeComponent {
33
33
  });
34
34
  }
35
35
  }
36
- PlaitMindComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: PlaitMindComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
37
- PlaitMindComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.2", type: PlaitMindComponent, selector: "plait-mind", usesInheritance: true, ngImport: i0, template: `
36
+ PlaitMindComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.5", ngImport: i0, type: PlaitMindComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
37
+ PlaitMindComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.5", type: PlaitMindComponent, selector: "plait-mind", usesInheritance: true, ngImport: i0, template: `
38
38
  <plait-children [board]="board" [parent]="element" [effect]="effect" [parentG]="rootG"></plait-children>
39
39
  `, isInline: true, dependencies: [{ kind: "component", type: i1.PlaitChildrenElement, selector: "plait-children", inputs: ["board", "parent", "effect", "parentG"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
40
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: PlaitMindComponent, decorators: [{
40
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.5", ngImport: i0, type: PlaitMindComponent, decorators: [{
41
41
  type: Component,
42
42
  args: [{
43
43
  selector: 'plait-mind',
@@ -7,10 +7,10 @@ import { PlaitMindComponent } from './mind.component';
7
7
  import * as i0 from "@angular/core";
8
8
  export class MindModule {
9
9
  }
10
- MindModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: MindModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
11
- MindModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.2.2", ngImport: i0, type: MindModule, declarations: [PlaitMindComponent, MindNodeComponent], imports: [CommonModule, RichtextModule, PlaitModule], exports: [PlaitMindComponent, MindNodeComponent] });
12
- MindModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: MindModule, imports: [CommonModule, RichtextModule, PlaitModule] });
13
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: MindModule, decorators: [{
10
+ MindModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.5", ngImport: i0, type: MindModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
11
+ MindModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.2.5", ngImport: i0, type: MindModule, declarations: [PlaitMindComponent, MindNodeComponent], imports: [CommonModule, RichtextModule, PlaitModule], exports: [PlaitMindComponent, MindNodeComponent] });
12
+ MindModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.2.5", ngImport: i0, type: MindModule, imports: [CommonModule, RichtextModule, PlaitModule] });
13
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.5", ngImport: i0, type: MindModule, decorators: [{
14
14
  type: NgModule,
15
15
  args: [{
16
16
  declarations: [PlaitMindComponent, MindNodeComponent],
@@ -7,10 +7,8 @@ import { debounceTime, filter, take, takeUntil } from 'rxjs/operators';
7
7
  import { Editor, Operation } from 'slate';
8
8
  import { EXTEND_OFFSET, EXTEND_RADIUS, PRIMARY_COLOR } from './constants';
9
9
  import { NODE_MIN_WIDTH } from './constants/node-rule';
10
- import { drawIndentedLink } from './draw/indented-link';
11
- import { drawLogicLink } from './draw/link/logic-link';
12
- import { drawTopicByNode, updateMindNodeTopicSize } from './draw/topic';
13
- import { drawRoundRectangleByNode } from './draw/node';
10
+ import { drawTopicByNode, updateMindNodeTopicSize } from './utils/draw/node-topic';
11
+ import { drawRoundRectangleByNode } from './utils/draw/node-shape';
14
12
  import { MindElement, PlaitMind } from './interfaces/element';
15
13
  import { MindQueries } from './queries';
16
14
  import { getRectangleByNode, isHitMindElement } from './utils/position/node';
@@ -18,14 +16,15 @@ import { getChildrenCount } from './utils/mind';
18
16
  import { getShapeByElement } from './utils/node-style/shape';
19
17
  import { ELEMENT_TO_NODE } from './utils/weak-maps';
20
18
  import { getRichtextContentSize } from '@plait/richtext';
21
- import { drawAbstractLink } from './draw/link/abstract-link';
22
- import { EmojisDrawer } from './drawer/emoji.drawer';
19
+ import { drawAbstractLink } from './utils/draw/node-link/abstract-link';
20
+ import { EmojisDrawer } from './drawer/emojis.drawer';
23
21
  import { MindTransforms } from './transforms';
24
- import { drawAbstractIncludedOutline } from './draw/abstract';
22
+ import { drawAbstractIncludedOutline } from './utils/draw/abstract-outline';
25
23
  import { MindElementShape } from './interfaces';
26
24
  import { QuickInsertDrawer } from './drawer/quick-insert.drawer';
27
25
  import { hasAfterDraw } from './base/base.drawer';
28
26
  import { getBranchColorByMindElement, getBranchWidthByMindElement } from './utils/node-style/branch';
27
+ import { drawLink } from './utils/draw/node-link/draw-link';
29
28
  import * as i0 from "@angular/core";
30
29
  import * as i1 from "@angular/common";
31
30
  import * as i2 from "@plait/core";
@@ -145,11 +144,8 @@ export class MindNodeComponent extends PlaitPluginElementComponent {
145
144
  if (AbstractNode.isAbstract(this.node.origin)) {
146
145
  this.linkG = drawAbstractLink(this.board, this.node, isHorizontalLayout(layout));
147
146
  }
148
- else if (MindElement.isIndentedLayout(parent)) {
149
- this.linkG = drawIndentedLink(this.board, parentNode, this.node);
150
- }
151
147
  else {
152
- this.linkG = drawLogicLink(this.board, this.node, parentNode, isHorizontalLayout(layout));
148
+ this.linkG = drawLink(this.board, parentNode, this.node, isHorizontalLayout(layout));
153
149
  }
154
150
  this.g.append(this.linkG);
155
151
  }
@@ -548,8 +544,8 @@ export class MindNodeComponent extends PlaitPluginElementComponent {
548
544
  }
549
545
  }
550
546
  }
551
- MindNodeComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: MindNodeComponent, deps: [{ token: i0.ViewContainerRef }, { token: i0.ChangeDetectorRef }, { token: i0.Renderer2 }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Component });
552
- MindNodeComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.2", type: MindNodeComponent, selector: "plait-mind-node", usesInheritance: true, ngImport: i0, template: `
547
+ MindNodeComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.5", ngImport: i0, type: MindNodeComponent, deps: [{ token: i0.ViewContainerRef }, { token: i0.ChangeDetectorRef }, { token: i0.Renderer2 }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Component });
548
+ MindNodeComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.5", type: MindNodeComponent, selector: "plait-mind-node", usesInheritance: true, ngImport: i0, template: `
553
549
  <plait-children
554
550
  *ngIf="!element.isCollapsed"
555
551
  [board]="board"
@@ -558,7 +554,7 @@ MindNodeComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", vers
558
554
  [parentG]="parentG"
559
555
  ></plait-children>
560
556
  `, isInline: true, dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.PlaitChildrenElement, selector: "plait-children", inputs: ["board", "parent", "effect", "parentG"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
561
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: MindNodeComponent, decorators: [{
557
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.5", ngImport: i0, type: MindNodeComponent, decorators: [{
562
558
  type: Component,
563
559
  args: [{
564
560
  selector: 'plait-mind-node',
@@ -574,4 +570,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
574
570
  changeDetection: ChangeDetectionStrategy.OnPush
575
571
  }]
576
572
  }], ctorParameters: function () { return [{ type: i0.ViewContainerRef }, { type: i0.ChangeDetectorRef }, { type: i0.Renderer2 }, { type: i0.NgZone }]; } });
577
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9kZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9wYWNrYWdlcy9taW5kL3NyYy9ub2RlLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsdUJBQXVCLEVBRXZCLFNBQVMsRUFPWixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQ0gsZ0JBQWdCLEVBQ2hCLE9BQU8sRUFDUCxVQUFVLEVBQ1YsZ0JBQWdCLEVBQ2hCLE9BQU8sRUFDUCxVQUFVLEVBQ1YsT0FBTyxFQUNQLGNBQWMsRUFDZCxVQUFVLEVBQ1Ysa0JBQWtCLEVBQ2xCLDJCQUEyQixFQUMzQixZQUFZLEVBQ1osYUFBYSxFQUdiLGVBQWUsRUFDbEIsTUFBTSxhQUFhLENBQUM7QUFDckIsT0FBTyxFQUNILGNBQWMsRUFDZCxrQkFBa0IsRUFDbEIsZ0JBQWdCLEVBQ2hCLFlBQVksRUFDWixZQUFZLEVBQ1osYUFBYSxFQUNiLFdBQVcsRUFFZCxNQUFNLGdCQUFnQixDQUFDO0FBQ3hCLE9BQU8sRUFBRSxpQkFBaUIsRUFBMEIsd0JBQXdCLEVBQUUsY0FBYyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFdEgsT0FBTyxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ2pELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN2RSxPQUFPLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBUSxNQUFNLE9BQU8sQ0FBQztBQUNoRCxPQUFPLEVBQUUsYUFBYSxFQUFFLGFBQWEsRUFBRSxhQUFhLEVBQWdCLE1BQU0sYUFBYSxDQUFDO0FBQ3hGLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN4RCxPQUFPLEVB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bXBvcnQge1xuICAgIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICAgIENoYW5nZURldGVjdG9yUmVmLFxuICAgIENvbXBvbmVudCxcbiAgICBDb21wb25lbnRSZWYsXG4gICAgTmdab25lLFxuICAgIE9uRGVzdHJveSxcbiAgICBPbkluaXQsXG4gICAgUmVuZGVyZXIyLFxuICAgIFZpZXdDb250YWluZXJSZWZcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICAgIFBsYWl0UG9pbnRlclR5cGUsXG4gICAgY3JlYXRlRyxcbiAgICBjcmVhdGVUZXh0LFxuICAgIElTX1RFWFRfRURJVEFCTEUsXG4gICAgTUVSR0lORyxcbiAgICBQbGFpdEJvYXJkLFxuICAgIHRvUG9pbnQsXG4gICAgdHJhbnNmb3JtUG9pbnQsXG4gICAgVHJhbnNmb3JtcyxcbiAgICBkcmF3Um91bmRSZWN0YW5nbGUsXG4gICAgUGxhaXRQbHVnaW5FbGVtZW50Q29tcG9uZW50LFxuICAgIFBsYWl0RWxlbWVudCxcbiAgICBOT0RFX1RPX0lOREVYLFxuICAgIFBsYWl0UGx1Z2luRWxlbWVudENvbnRleHQsXG4gICAgT25Db250ZXh0Q2hhbmdlZCxcbiAgICBSZWN0YW5nbGVDbGllbnRcbn0gZnJvbSAnQHBsYWl0L2NvcmUnO1xuaW1wb3J0IHtcbiAgICBpc0JvdHRvbUxheW91dCxcbiAgICBpc0hvcml6b250YWxMYXlvdXQsXG4gICAgaXNJbmRlbnRlZExheW91dCxcbiAgICBpc0xlZnRMYXlvdXQsXG4gICAgQWJzdHJhY3ROb2RlLFxuICAgIGlzUmlnaHRMYXlvdXQsXG4gICAgaXNUb3BMYXlvdXQsXG4gICAgTWluZExheW91dFR5cGVcbn0gZnJvbSAnQHBsYWl0L2xheW91dHMnO1xuaW1wb3J0IHsgaGFzRWRpdGFibGVUYXJnZXQsIFBsYWl0UmljaHRleHRDb21wb25lbnQsIHNldEZ1bGxTZWxlY3Rpb25BbmRGb2N1cywgdXBkYXRlUmljaFRleHQgfSBmcm9tICdAcGxhaXQvcmljaHRleHQnO1xuaW1wb3J0IHsgUm91Z2hTVkcgfSBmcm9tICdyb3VnaGpzL2Jpbi9zdmcnO1xuaW1wb3J0IHsgZnJvbUV2ZW50LCBTdWJqZWN0LCB0aW1lciB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZGVib3VuY2VUaW1lLCBmaWx0ZXIsIHRha2UsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IEVkaXRvciwgT3BlcmF0aW9uLCBUZXh0IH0gZnJvbSAnc2xhdGUnO1xuaW1wb3J0IHsgRVhURU5EX09GRlNFVCwgRVhURU5EX1JBRElVUywgUFJJTUFSWV9DT0xPUiwgU1RST0tFX1dJRFRIIH0gZnJvbSAnLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgTk9ERV9NSU5fV0lEVEggfSBmcm9tICcuL2NvbnN0YW50cy9ub2RlLXJ1bGUnO1xuaW1wb3J0IHsgZHJhd0luZGVudGVkTGluayB9IGZyb20gJy4vZHJhdy9pbmRlbnRlZC1saW5rJztcbmltcG9ydCB7IGRyYXdMb2dpY0xpbmsgfSBmcm9tICcuL2RyYXcvbGluay9sb2dpYy1saW5rJztcbmltcG9ydCB7IGRyYXdUb3BpY0J5Tm9kZSwgdXBkYXRlTWluZE5vZGVUb3BpY1NpemUgfSBmcm9tICcuL2RyYXcvdG9waWMnO1xuaW1wb3J0IHsgZHJhd1JvdW5kUmVjdGFuZ2xlQnlOb2RlIH0gZnJvbSAnLi9kcmF3L25vZGUnO1xuaW1wb3J0IHsgTWluZEVsZW1lbnQsIFBsYWl0TWluZCB9IGZyb20gJy4vaW50ZXJmYWNlcy9lbGVtZW50JztcbmltcG9ydCB7IE1pbmROb2RlIH0gZnJvbSAnLi9pbnRlcmZhY2VzL25vZGUnO1xuaW1wb3J0IHsgTWluZFF1ZXJpZXMgfSBmcm9tICcuL3F1ZXJpZXMnO1xuaW1wb3J0IHsgZ2V0UmVjdGFuZ2xlQnlOb2RlLCBpc0hpdE1pbmRFbGVtZW50IH0gZnJvbSAnLi91dGlscy9wb3NpdGlvbi9ub2RlJztcbmltcG9ydCB7IGdldENoaWxkcmVuQ291bnQgfSBmcm9tICcuL3V0aWxzL21pbmQnO1xuaW1wb3J0IHsgZ2V0U2hhcGVCeUVsZW1lbnQgfSBmcm9tICcuL3V0aWxzL25vZGUtc3R5bGUvc2hhcGUnO1xuaW1wb3J0IHsgRUxFTUVOVF9UT19OT0RFIH0gZnJvbSAnLi91dGlscy93ZWFrLW1hcHMnO1xuaW1wb3J0IHsgZ2V0UmljaHRleHRDb250ZW50U2l6ZSB9IGZyb20gJ0BwbGFpdC9yaWNodGV4dCc7XG5pbXBvcnQgeyBkcmF3QWJzdHJhY3RMaW5rIH0gZnJvbSAnLi9kcmF3L2xpbmsvYWJzdHJhY3QtbGluayc7XG5pbXBvcnQgeyBFbW9qaXNEcmF3ZXIgfSBmcm9tICcuL2RyYXdlci9lbW9qaS5kcmF3ZXInO1xuaW1wb3J0IHsgTWluZFRyYW5zZm9ybXMgfSBmcm9tICcuL3RyYW5zZm9ybXMnO1xuaW1wb3J0IHsgZHJhd0Fic3RyYWN0SW5jbHVkZWRPdXRsaW5lIH0gZnJvbSAnLi9kcmF3L2Fic3RyYWN0JztcbmltcG9ydCB7IE1pbmRFbGVtZW50U2hhcGUgfSBmcm9tICcuL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgUXVpY2tJbnNlcnREcmF3ZXIgfSBmcm9tICcuL2RyYXdlci9xdWljay1pbnNlcnQuZHJhd2VyJztcbmltcG9ydCB7IGhhc0FmdGVyRHJhdyB9IGZyb20gJy4vYmFzZS9iYXNlLmRyYXdlcic7XG5pbXBvcnQgeyBnZXRCcmFuY2hDb2xvckJ5TWluZEVsZW1lbnQsIGdldEJyYW5jaFdpZHRoQnlNaW5kRWxlbWVudCB9IGZyb20gJy4vdXRpbHMvbm9kZS1zdHlsZS9icmFuY2gnO1xuaW1wb3J0IHsgUGxhaXRNaW5kQm9hcmQgfSBmcm9tICcuL3BsdWdpbnMvd2l0aC1taW5kLmJvYXJkJztcbmltcG9ydCB7IEFic3RyYWN0SGFuZGxlUG9zaXRpb24gfSBmcm9tICcuL3BsdWdpbnMvd2l0aC1hYnN0cmFjdC1yZXNpemUuYm9hcmQnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ3BsYWl0LW1pbmQtbm9kZScsXG4gICAgdGVtcGxhdGU6IGBcbiAgICAgICAgPHBsYWl0LWNoaWxkcmVuXG4gICAgICAgICAgICAqbmdJZj1cIiFlbGVtZW50LmlzQ29sbGFwc2VkXCJcbiAgICAgICAgICAgIFtib2FyZF09XCJib2FyZFwiXG4gICAgICAgICAgICBbcGFyZW50XT1cImVsZW1lbnRcIlxuICAgICAgICAgICAgW2VmZmVjdF09XCJlZmZlY3RcIlxuICAgICAgICAgICAgW3BhcmVudEddPVwicGFyZW50R1wiXG4gICAgICAgID48L3BsYWl0LWNoaWxkcmVuPlxuICAgIGAsXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcbn0pXG5leHBvcnQgY2xhc3MgTWluZE5vZGVDb21wb25lbnQgZXh0ZW5kcyBQbGFpdFBsdWdpbkVsZW1lbnRDb21wb25lbnQ8TWluZEVsZW1lbnQsIFBsYWl0TWluZEJvYXJkPlxuICAgIGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3ksIE9uQ29udGV4dENoYW5nZWQ8TWluZEVsZW1lbnQsIFBsYWl0TWluZEJvYXJkPiB7XG4gICAgaXNFZGl0YWJsZSA9IGZhbHNlO1xuXG4gICAgcm91Z2hTVkchOiBSb3VnaFNWRztcblxuICAgIG5vZGUhOiBNaW5kTm9kZTtcblxuICAgIGluZGV4ITogbnVtYmVyO1xuXG4gICAgYWJzdHJhY3RJbmNsdWRlZE91dGxpbmVHPzogU1ZHR0VsZW1lbnQ7XG5cbiAgICBwYXJlbnRHITogU1ZHR0VsZW1lbnQ7XG5cbiAgICBhY3RpdmVHOiBTVkdHRWxlbWVudFtdID0gW107XG5cbiAgICBzaGFwZUc6IFNWR0dFbGVtZW50IHwgbnVsbCA9IG51bGw7XG5cbiAgICBsaW5rRz86IFNWR0dFbGVtZW50O1xuXG4gICAgcmljaHRleHRHPzogU1ZHR0VsZW1lbnQ7XG5cbiAgICBmb3JlaWduT2JqZWN0PzogU1ZHRm9yZWlnbk9iamVjdEVsZW1lbnQ7XG5cbiAgICBleHRlbmRHPzogU1ZHR0VsZW1lbnQ7XG5cbiAgICBtYXNrRyE6IFNWR0dFbGVtZW50O1xuXG4gICAgcmljaHRleHRDb21wb25lbnRSZWY/OiBDb21wb25lbnRSZWY8UGxhaXRSaWNodGV4dENvbXBvbmVudD47XG5cbiAgICBkZXN0cm95JCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgICBlbW9qaXNEcmF3ZXIhOiBFbW9qaXNEcmF3ZXI7XG5cbiAgICBxdWlja0luc2VydERyYXdlciE6IFF1aWNrSW5zZXJ0RHJhd2VyO1xuXG4gICAgcHVibGljIGdldCBoYW5kQWN0aXZlKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5ib2FyZC5wb2ludGVyID09PSBQbGFpdFBvaW50ZXJUeXBlLmhhbmQ7XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgdmlld0NvbnRhaW5lclJlZjogVmlld0NvbnRhaW5lclJlZixcbiAgICAgICAgcHJvdGVjdGVkIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgICAgIHByaXZhdGUgcmVuZGVyMjogUmVuZGVyZXIyLFxuICAgICAgICBwcml2YXRlIG5nWm9uZTogTmdab25lXG4gICAgKSB7XG4gICAgICAgIHN1cGVyKGNkcik7XG4gICAgfVxuXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZW1vamlzRHJhd2VyID0gbmV3IEVtb2ppc0RyYXdlcih0aGlzLmJvYXJkLCB0aGlzLnZpZXdDb250YWluZXJSZWYpO1xuICAgICAgICB0aGlzLnF1aWNrSW5zZXJ0RHJhd2VyID0gbmV3IFF1aWNrSW5zZXJ0RHJhd2VyKHRoaXMuYm9hcmQpO1xuICAgICAgICBzdXBlci5uZ09uSW5pdCgpO1xuICAgICAgICB0aGlzLm5vZGUgPSBNaW5kRWxlbWVudC5nZXROb2RlKHRoaXMuZWxlbWVudCk7XG4gICAgICAgIHRoaXMuaW5kZXggPSBOT0RFX1RPX0lOREVYLmdldCh0aGlzLmVsZW1lbnQpIHx8IDA7XG4gICAgICAgIHRoaXMucm91Z2hTVkcgPSBQbGFpdEJvYXJkLmdldFJvdWdoU1ZHKHRoaXMuYm9hcmQpO1xuICAgICAgICB0aGlzLnBhcmVudEcgPSBQbGFpdEVsZW1lbnQuZ2V0Q29tcG9uZW50KE1pbmRFbGVtZW50LmdldFJvb3QodGhpcy5ib2FyZCwgdGhpcy5lbGVtZW50KSkucm9vdEcgYXMgU1ZHR0VsZW1lbnQ7XG4gICAgICAgIHRoaXMuZHJhd1NoYXBlKCk7XG4gICAgICAgIHRoaXMuZHJhd0xpbmsoKTtcbiAgICAgICAgdGhpcy5kcmF3UmljaHRleHQoKTtcbiAgICAgICAgdGhpcy5kcmF3QWN0aXZlRygpO1xuICAgICAgICB0aGlzLnVwZGF0ZUFjdGl2ZUNsYXNzKCk7XG4gICAgICAgIHRoaXMuZHJhd01hc2tHKCk7XG4gICAgICAgIHRoaXMuZHJhd0Vtb2ppcygpO1xuICAgICAgICB0aGlzLmRyYXdFeHRlbmQoKTtcbiAgICAgICAgdGhpcy5kcmF3UXVpY2tJbnNlcnQoKTtcbiAgICB9XG5cbiAgICBvbkNvbnRleHRDaGFuZ2VkKFxuICAgICAgICB2YWx1ZTogUGxhaXRQbHVnaW5FbGVtZW50Q29udGV4dDxNaW5kRWxlbWVudCwgUGxhaXRNaW5kQm9hcmQ+LFxuICAgICAgICBwcmV2aW91czogUGxhaXRQbHVnaW5FbGVtZW50Q29udGV4dDxNaW5kRWxlbWVudCwgUGxhaXRNaW5kQm9hcmQ+XG4gICAgKSB7XG4gICAgICAgIGNvbnN0IG5ld05vZGUgPSBNaW5kRWxlbWVudC5nZXROb2RlKHZhbHVlLmVsZW1lbnQpO1xuXG4gICAgICAgIC8vIHJlc29sdmUgbW92ZSBub2RlIHJpY2h0ZXh0IGxvc2UgaXNzdWVcbiAgICAgICAgaWYgKHRoaXMubm9kZSAhPT0gbmV3Tm9kZSkge1xuICAgICAgICAgICAgaWYgKHRoaXMuZm9yZWlnbk9iamVjdCAmJiB0aGlzLmZvcmVpZ25PYmplY3QuY2hpbGRyZW4ubGVuZ3RoIDw9IDApIHtcbiAgICAgICAgICAgICAgICB0aGlzLmZvcmVpZ25PYmplY3Q/LmFwcGVuZENoaWxkKHRoaXMucmljaHRleHRDb21wb25lbnRSZWY/Lmluc3RhbmNlLmVkaXRhYmxlIGFzIEhUTUxFbGVtZW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGlzRXF1YWxOb2RlID0gUmVjdGFuZ2xlQ2xpZW50LmlzRXF1YWwodGhpcy5ub2RlLCBuZXdOb2RlKTtcbiAgICAgICAgdGhpcy5ub2RlID0gbmV3Tm9kZTtcblxuICAgICAgICBpZiAoIWlzRXF1YWxOb2RlIHx8IHZhbHVlLmVsZW1lbnQgIT09IHByZXZpb3VzLmVsZW1lbnQpIHtcbiAgICAgICAgICAgIHRoaXMuZHJhd0FjdGl2ZUcoKTtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlQWN0aXZlQ2xhc3MoKTtcbiAgICAgICAgICAgIHRoaXMuZHJhd1NoYXBlKCk7XG4gICAgICAgICAgICB0aGlzLmRyYXdMaW5rKCk7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVJpY2h0ZXh0KCk7XG4gICAgICAgICAgICB0aGlzLmRyYXdNYXNrRygpO1xuICAgICAgICAgICAgdGhpcy5kcmF3RXh0ZW5kKCk7XG4gICAgICAgICAgICB0aGlzLmRyYXdRdWlja0luc2VydCgpO1xuICAgICAgICAgICAgdGhpcy5kcmF3RW1vamlzKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBoYXNTYW1lU2VsZWN0ZWQgPSB2YWx1ZS5zZWxlY3RlZCA9PT0gcHJldmlvdXMuc2VsZWN0ZWQ7XG4gICAgICAgICAgICBjb25zdCBoYXNTYW1lUGFyZW50ID0gdmFsdWUucGFyZW50ID09PSBwcmV2aW91cy5wYXJlbnQ7XG4gICAgICAgICAgICBpZiAoIWhhc1NhbWVTZWxlY3RlZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuZHJhd0FjdGl2ZUcoKTtcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZUFjdGl2ZUNsYXNzKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIWhhc1NhbWVQYXJlbnQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRyYXdMaW5rKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBkcmF3RW1vamlzKCkge1xuICAgICAgICBjb25zdCBnID0gdGhpcy5lbW9qaXNEcmF3ZXIuZHJhd0Vtb2ppcyh0aGlzLmVsZW1lbnQpO1xuICAgICAgICBpZiAoZykge1xuICAgICAgICAgICAgdGhpcy5nLmFwcGVuZChnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGRyYXdRdWlja0luc2VydCgpIHtcbiAgICAgICAgdGhpcy5xdWlja0luc2VydERyYXdlci5kZXN0cm95KCk7XG4gICAgICAgIGlmICh0aGlzLnF1aWNrSW5zZXJ0RHJhd2VyLmNhbkRyYXcodGhpcy5lbGVtZW50KSkge1xuICAgICAgICAgICAgY29uc3QgZyA9IHRoaXMucXVpY2tJbnNlcnREcmF3ZXIuZHJhdyh0aGlzLmVsZW1lbnQpO1xuICAgICAgICAgICAgaWYgKGhhc0FmdGVyRHJhdyh0aGlzLnF1aWNrSW5zZXJ0RHJhd2VyKSkge1xuICAgICAgICAgICAgICAgIHRoaXMucXVpY2tJbnNlcnREcmF3ZXIuYWZ0ZXJEcmF3KHRoaXMuZWxlbWVudCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmV4dGVuZEc/LmFwcGVuZENoaWxkKGcpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZHJhd1NoYXBlKCkge1xuICAgICAgICB0aGlzLmRlc3Ryb3lTaGFwZSgpO1xuICAgICAgICBjb25zdCBzaGFwZSA9IGdldFNoYXBlQnlFbGVtZW50KHRoaXMuYm9hcmQsIHRoaXMubm9kZS5vcmlnaW4pIGFzIE1pbmRFbGVtZW50U2hhcGU7XG4gICAgICAgIHN3aXRjaCAoc2hhcGUpIHtcbiAgICAgICAgICAgIGNhc2UgTWluZEVsZW1lbnRTaGFwZS5yb3VuZFJlY3RhbmdsZTpcbiAgICAgICAgICAgICAgICB0aGlzLnNoYXBlRyA9IGRyYXdSb3VuZFJlY3RhbmdsZUJ5Tm9kZSh0aGlzLmJvYXJkLCB0aGlzLm5vZGUgYXMgTWluZE5vZGUpO1xuICAgICAgICAgICAgICAgIHRoaXMuZy5wcmVwZW5kKHRoaXMuc2hhcGVHKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBkZXN0cm95U2hhcGUoKSB7XG4gICAgICAgIGlmICh0aGlzLnNoYXBlRykge1xuICAgICAgICAgICAgdGhpcy5zaGFwZUcucmVtb3ZlKCk7XG4gICAgICAgICAgICB0aGlzLnNoYXBlRyA9IG51bGw7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBkcmF3TGluaygpIHtcbiAgICAgICAgaWYgKFBsYWl0TWluZC5pc01pbmQodGhpcy5lbGVtZW50KSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcGFyZW50ID0gTWluZEVsZW1lbnQuZ2V0UGFyZW50KHRoaXMuZWxlbWVudCk7XG4gICAgICAgIGNvbnN0IHBhcmVudE5vZGUgPSBNaW5kRWxlbWVudC5nZXROb2RlKHBhcmVudCk7XG5cbiAgICAgICAgaWYgKHRoaXMubGlua0cpIHtcbiAgICAgICAgICAgIHRoaXMubGlua0cucmVtb3ZlKCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBsYXlvdXQgPSBNaW5kUXVlcmllcy5nZXRMYXlvdXRCeUVsZW1lbnQocGFyZW50KSBhcyBNaW5kTGF5b3V0VHlwZTtcbiAgICAgICAgaWYgKEFic3RyYWN0Tm9kZS5pc0Fic3RyYWN0KHRoaXMubm9kZS5vcmlnaW4pKSB7XG4gICAgICAgICAgICB0aGlzLmxpbmtHID0gZHJhd0Fic3RyYWN0TGluayh0aGlzLmJvYXJkLCB0aGlzLm5vZGUsIGlzSG9yaXpvbnRhbExheW91dChsYXlvdXQpKTtcbiAgICAgICAgfSBlbHNlIGlmIChNaW5kRWxlbWVudC5pc0luZGVudGVkTGF5b3V0KHBhcmVudCkpIHtcbiAgICAgICAgICAgIHRoaXMubGlua0cgPSBkcmF3SW5kZW50ZWRMaW5rKHRoaXMuYm9hcmQsIHBhcmVudE5vZGUsIHRoaXMubm9kZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmxpbmtHID0gZHJhd0xvZ2ljTGluayh0aGlzLmJvYXJkLCB0aGlzLm5vZGUsIHBhcmVudE5vZGUsIGlzSG9yaXpvbnRhbExheW91dChsYXlvdXQpKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmcuYXBwZW5kKHRoaXMubGlua0cpO1xuICAgIH1cblxuICAgIGRlc3Ryb3lMaW5lKCkge1xuICAgICAgICBpZiAodGhpcy5saW5rRykge1xuICAgICAgICAgICAgdGhpcy5saW5rRy5yZW1vdmUoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGRyYXdNYXNrRygpIHtcbiAgICAgICAgdGhpcy5kZXN0cm95TWFza0coKTtcbiAgICAgICAgY29uc3QgbGluZVdpZHRoT2Zmc2V0ID0gMjtcbiAgICAgICAgY29uc3QgZXh0ZW5kT2Zmc2V0ID0gMTU7XG4gICAgICAgIGNvbnN0IG5vZGVMYXlvdXQgPSBNaW5kUXVlcmllcy5nZXRMYXlvdXRCeUVsZW1lbnQodGhpcy5ub2RlLm9yaWdpbikgYXMgTWluZExheW91dFR5cGU7XG4gICAgICAgIGNvbnN0IGlzVG9wID0gaXNUb3BMYXlvdXQobm9kZUxheW91dCk7XG4gICAgICAgIGNvbnN0IGlzUmlnaHQgPSBpc1JpZ2h0TGF5b3V0KG5vZGVMYXlvdXQpO1xuICAgICAgICBjb25zdCBpc0JvdHRvbSA9IGlzQm90dG9tTGF5b3V0KG5vZGVMYXlvdXQpO1xuICAgICAgICBjb25zdCBpc0xlZnQgPSBpc0xlZnRMYXlvdXQobm9kZUxheW91dCk7XG4gICAgICAgIGNvbnN0IHsgeCwgeSwgd2lkdGgsIGhlaWdodCB9ID0gZ2V0UmVjdGFuZ2xlQnlOb2RlKHRoaXMubm9kZSBhcyBNaW5kTm9kZSk7XG5cbiAgICAgICAgbGV0IGRyYXdYID0geDtcbiAgICAgICAgbGV0IGRyYXdZID0geTtcbiAgICAgICAgbGV0IGRyYXdXaWR0aCA9IHggKyB3aWR0aDtcbiAgICAgICAgbGV0IGRyYXdIZWlnaHQgPSB5ICsgaGVpZ2h0O1xuXG4gICAgICAgIHN3aXRjaCAodHJ1ZSkge1xuICAgICAgICAgICAgY2FzZSBpc1RvcDpcbiAgICAgICAgICAgICAgICBkcmF3WCA9IHggLSBsaW5lV2lkdGhPZmZzZXQ7XG4gICAgICAgICAgICAgICAgZHJhd1kgPSB5IC0gZXh0ZW5kT2Zmc2V0O1xuICAgICAgICAgICAgICAgIGRyYXdXaWR0aCA9IHggKyB3aWR0aCArIGxpbmVXaWR0aE9mZnNldDtcbiAgICAgICAgICAgICAgICBkcmF3SGVpZ2h0ID0geSArIGhlaWdodCArIGxpbmVXaWR0aE9mZnNldDtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgaXNCb3R0b206XG4gICAgICAgICAgICAgICAgZHJhd1ggPSB4IC0gbGluZVdpZHRoT2Zmc2V0O1xuICAgICAgICAgICAgICAgIGRyYXdZID0geSAtIGxpbmVXaWR0aE9mZnNldDtcbiAgICAgICAgICAgICAgICBkcmF3V2lkdGggPSB4ICsgd2lkdGggKyBsaW5lV2lkdGhPZmZzZXQ7XG4gICAgICAgICAgICAgICAgZHJhd0hlaWdodCA9IHkgKyBoZWlnaHQgKyBleHRlbmRPZmZzZXQ7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIGlzTGVmdDpcbiAgICAgICAgICAgICAgICBkcmF3WCA9IHggLSBleHRlbmRPZmZzZXQ7XG4gICAgICAgICAgICAgICAgZHJhd1kgPSB5IC0gbGluZVdpZHRoT2Zmc2V0O1xuICAgICAgICAgICAgICAgIGRyYXdXaWR0aCA9IHggKyB3aWR0aCArIGxpbmVXaWR0aE9mZnNldDtcbiAgICAgICAgICAgICAgICBkcmF3SGVpZ2h0ID0geSArIGhlaWdodCArIGxpbmVXaWR0aE9mZnNldDtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgaXNSaWdodDpcbiAgICAgICAgICAgICAgICBkcmF3WCA9IHggLSBsaW5lV2lkdGhPZmZzZXQ7XG4gICAgICAgICAgICAgICAgZHJhd1kgPSB5IC0gbGluZVdpZHRoT2Zmc2V0O1xuICAgICAgICAgICAgICAgIGRyYXdXaWR0aCA9IHggKyB3aWR0aCArIGV4dGVuZE9mZnNldDtcbiAgICAgICAgICAgICAgICBkcmF3SGVpZ2h0ID0geSArIGhlaWdodCArIGxpbmVXaWR0aE9mZnNldDtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm1hc2tHID0gZHJhd1JvdW5kUmVjdGFuZ2xlKFxuICAgICAgICAgICAgdGhpcy5yb3VnaFNWRyBhcyBSb3VnaFNWRyxcbiAgICAgICAgICAgIGRyYXdYLFxuICAgICAgICAgICAgZHJhd1ksXG4gICAgICAgICAgICBkcmF3V2lkdGgsXG4gICAgICAgICAgICBkcmF3SGVpZ2h0LFxuICAgICAgICAgICAgeyBzdHJva2U6ICdub25lJywgZmlsbDogJ3JnYmEoMjU1LDI1NSwyNTUsMCknLCBmaWxsU3R5bGU6ICdzb2xpZCcgfSxcbiAgICAgICAgICAgIHRydWVcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5tYXNrRy5jbGFzc0xpc3QuYWRkKCdtYXNrJyk7XG4gICAgICAgIHRoaXMubWFza0cuc2V0QXR0cmlidXRlKCd2aXNpYmlsaXR5JywgJ3Zpc2libGUnKTtcbiAgICAgICAgdGhpcy5nLmFwcGVuZCh0aGlzLm1hc2tHKTtcblxuICAgICAgICBpZiAodGhpcy5pc0VkaXRhYmxlKSB7XG4gICAgICAgICAgICB0aGlzLmRpc2FibGVkTWFza0coKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZyb21FdmVudDxNb3VzZUV2ZW50Pih0aGlzLm1hc2tHLCAnbW91c2VlbnRlcicpXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICB0YWtlVW50aWwodGhpcy5kZXN0cm95JCksXG4gICAgICAgICAgICAgICAgZmlsdGVyKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFBsYWl0Qm9hcmQuaXNGb2N1cyh0aGlzLmJvYXJkKSAmJiAhdGhpcy5lbGVtZW50LmlzQ29sbGFwc2VkICYmICF0aGlzLmhhbmRBY3RpdmU7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuZy5jbGFzc0xpc3QuYWRkKCdob3ZlcmVkJyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgZnJvbUV2ZW50PE1vdXNlRXZlbnQ+KHRoaXMubWFza0csICdtb3VzZWxlYXZlJylcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSxcbiAgICAgICAgICAgICAgICBmaWx0ZXIoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gUGxhaXRCb2FyZC5pc0ZvY3VzKHRoaXMuYm9hcmQpICYmICF0aGlzLmVsZW1lbnQuaXNDb2xsYXBzZWQ7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuZy5jbGFzc0xpc3QucmVtb3ZlKCdob3ZlcmVkJyk7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBkZXN0cm95TWFza0coKSB7XG4gICAgICAgIGlmICh0aGlzLm1hc2tHKSB7XG4gICAgICAgICAgICB0aGlzLm1hc2tHLnJlbW92ZSgpO1xuICAgICAgICAgICAgdGhpcy5nLmNsYXNzTGlzdC5yZW1vdmUoJ2hvdmVyZWQnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGVuYWJsZU1hc2tHKCkge1xuICAgICAgICBpZiAodGhpcy5tYXNrRykge1xuICAgICAgICAgICAgdGhpcy5tYXNrRy5zZXRBdHRyaWJ1dGUoJ3Zpc2liaWxpdHknLCAndmlzaWJsZScpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZGlzYWJsZWRNYXNrRygpIHtcbiAgICAgICAgaWYgKHRoaXMubWFza0cpIHtcbiAgICAgICAgICAgIHRoaXMubWFza0cuc2V0QXR0cmlidXRlKCd2aXNpYmlsaXR5JywgJ2hpZGRlbicpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZHJhd0FjdGl2ZUcoKSB7XG4gICAgICAgIHRoaXMuZGVzdHJveUFjdGl2ZUcoKTtcbiAgICAgICAgdGhpcy5hYnN0cmFjdEluY2x1ZGVkT3V0bGluZUc/LnJlbW92ZSgpO1xuICAgICAgICBpZiAodGhpcy5zZWxlY3RlZCkge1xuICAgICAgICAgICAgaWYgKEFic3RyYWN0Tm9kZS5pc0Fic3RyYWN0KHRoaXMuZWxlbWVudCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZUFic3RyYWN0SW5jbHVkZWRPdXRsaW5lKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsZXQgeyB4LCB5LCB3aWR0aCwgaGVpZ2h0IH0gPSBnZXRSZWN0YW5nbGVCeU5vZGUodGhpcy5ub2RlIGFzIE1pbmROb2RlKTtcbiAgICAgICAgICAgIGNvbnN0IHNlbGVjdGVkU3Ryb2tlRyA9IGRyYXdSb3VuZFJlY3RhbmdsZShcbiAgICAgICAgICAgICAgICB0aGlzLnJvdWdoU1ZHIGFzIFJvdWdoU1ZHLFxuICAgICAgICAgICAgICAgIHggLSAyLFxuICAgICAgICAgICAgICAgIHkgLSAyLFxuICAgICAgICAgICAgICAgIHggKyB3aWR0aCArIDIsXG4gICAgICAgICAgICAgICAgeSArIGhlaWdodCArIDIsXG4gICAgICAgICAgICAgICAgeyBzdHJva2U6IFBSSU1BUllfQ09MT1IsIHN0cm9rZVdpZHRoOiAyLCBmaWxsOiAnJyB9LFxuICAgICAgICAgICAgICAgIHRydWVcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICAvLyDlvbHlk40gbWFzayDnp7vlhaXnp7vlh7rkuovku7ZcbiAgICAgICAgICAgIHNlbGVjdGVkU3Ryb2tlRy5zdHlsZS5wb2ludGVyRXZlbnRzID0gJ25vbmUnO1xuICAgICAgICAgICAgdGhpcy5nLmFwcGVuZENoaWxkKHNlbGVjdGVkU3Ryb2tlRyk7XG4gICAgICAgICAgICB0aGlzLmFjdGl2ZUcucHVzaChzZWxlY3RlZFN0cm9rZUcpO1xuICAgICAgICAgICAgaWYgKHRoaXMucmljaHRleHRDb21wb25lbnRSZWY/Lmluc3RhbmNlLnBsYWl0UmVhZG9ubHkgPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBzZWxlY3RlZEJhY2tncm91bmRHID0gZHJhd1JvdW5kUmVjdGFuZ2xlKFxuICAgICAgICAgICAgICAgICAgICB0aGlzLnJvdWdoU1ZHIGFzIFJvdWdoU1ZHLFxuICAgICAgICAgICAgICAgICAgICB4IC0gMixcbiAgICAgICAgICAgICAgICAgICAgeSAtIDIsXG4gICAgICAgICAgICAgICAgICAgIHggKyB3aWR0aCArIDIsXG4gICAgICAgICAgICAgICAgICAgIHkgKyBoZWlnaHQgKyAyLFxuICAgICAgICAgICAgICAgICAgICB7IHN0cm9rZTogUFJJTUFSWV9DT0xPUiwgZmlsbDogUFJJTUFSWV9DT0xPUiwgZmlsbFN0eWxlOiAnc29saWQnIH0sXG4gICAgICAgICAgICAgICAgICAgIHRydWVcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIHNlbGVjdGVkQmFja2dyb3VuZEcuc3R5bGUub3BhY2l0eSA9ICcwLjE1JztcbiAgICAgICAgICAgICAgICAvLyDlvbHlk43lj4zlh7vkuovku7ZcbiAgICAgICAgICAgICAgICBzZWxlY3RlZEJhY2tncm91bmRHLnN0eWxlLnBvaW50ZXJFdmVudHMgPSAnbm9uZSc7XG4gICAgICAgICAgICAgICAgdGhpcy5nLmFwcGVuZENoaWxkKHNlbGVjdGVkQmFja2dyb3VuZEcpO1xuICAgICAgICAgICAgICAgIHRoaXMuYWN0aXZlRy5wdXNoKHNlbGVjdGVkQmFja2dyb3VuZEcsIHNlbGVjdGVkU3Ryb2tlRyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBkZXN0cm95QWN0aXZlRygpIHtcbiAgICAgICAgdGhpcy5hY3RpdmVHLmZvckVhY2goZyA9PiBnLnJlbW92ZSgpKTtcbiAgICAgICAgdGhpcy5hY3RpdmVHID0gW107XG4gICAgfVxuXG4gICAgdXBkYXRlQWN0aXZlQ2xhc3MoKSB7XG4gICAgICAgIGlmICghdGhpcy5nKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWQpIHtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyMi5hZGRDbGFzcyh0aGlzLmcsICdhY3RpdmUnKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyMi5yZW1vdmVDbGFzcyh0aGlzLmcsICdhY3RpdmUnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGRyYXdSaWNodGV4dCgpIHtcbiAgICAgICAgY29uc3QgeyByaWNodGV4dEcsIHJpY2h0ZXh0Q29tcG9uZW50UmVmLCBmb3JlaWduT2JqZWN0IH0gPSBkcmF3VG9waWNCeU5vZGUodGhpcy5ib2FyZCwgdGhpcy5ub2RlLCB0aGlzLnZpZXdDb250YWluZXJSZWYpO1xuICAgICAgICB0aGlzLnJpY2h0ZXh0Q29tcG9uZW50UmVmID0gcmljaHRleHRDb21wb25lbnRSZWY7XG4gICAgICAgIHRoaXMucmljaHRleHRHID0gcmljaHRleHRHO1xuICAgICAgICB0aGlzLmZvcmVpZ25PYmplY3QgPSBmb3JlaWduT2JqZWN0O1xuICAgICAgICB0aGlzLnJlbmRlcjIuYWRkQ2xhc3MocmljaHRleHRHLCAncmljaHRleHQnKTtcbiAgICAgICAgdGhpcy5nLmFwcGVuZChyaWNodGV4dEcpO1xuICAgIH1cblxuICAgIGRyYXdFeHRlbmQoKSB7XG4gICAgICAgIHRoaXMuZGVzdHJveUV4dGVuZCgpO1xuICAgICAgICAvLyBjcmVhdGUgZXh0ZW5kXG4gICAgICAgIHRoaXMuZXh0ZW5kRyA9IGNyZWF0ZUcoKTtcbiAgICAgICAgY29uc3QgY29sbGFwc2VHID0gY3JlYXRlRygpO1xuICAgICAgICB0aGlzLmV4dGVuZEcuY2xhc3NMaXN0LmFkZCgnZXh0ZW5kJyk7XG4gICAgICAgIGNvbGxhcHNlRy5jbGFzc0xpc3QuYWRkKCdjb2xsYXBzZS1jb250YWluZXInKTtcbiAgICAgICAgdGhpcy5nLmFwcGVuZCh0aGlzLmV4dGVuZEcpO1xuICAgICAgICB0aGlzLmV4dGVuZEcuYXBwZW5kKGNvbGxhcHNlRyk7XG4gICAgICAgIGlmICh0aGlzLm5vZGUub3JpZ2luLmlzUm9vdCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8vIGludGVyYWN0aXZlXG4gICAgICAgIGZyb21FdmVudChjb2xsYXBzZUcsICdtb3VzZXVwJylcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIGZpbHRlcigoKSA9PiAhdGhpcy5oYW5kQWN0aXZlIHx8ICFQbGFpdEJvYXJkLmlzUmVhZG9ubHkodGhpcy5ib2FyZCkpLFxuICAgICAgICAgICAgICAgIHRha2UoMSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGlzQ29sbGFwc2VkID0gIXRoaXMubm9kZS5vcmlnaW4uaXNDb2xsYXBzZWQ7XG4gICAgICAgICAgICAgICAgY29uc3QgbmV3RWxlbWVudDogUGFydGlhbDxNaW5kRWxlbWVudD4gPSB7IGlzQ29sbGFwc2VkIH07XG4gICAgICAgICAgICAgICAgY29uc3QgcGF0aCA9IFBsYWl0Qm9hcmQuZmluZFBhdGgodGhpcy5ib2FyZCwgdGhpcy5lbGVtZW50KTtcbiAgICAgICAgICAgICAgICBUcmFuc2Zvcm1zLnNldE5vZGUodGhpcy5ib2FyZCwgbmV3RWxlbWVudCwgcGF0aCk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCB7IHgsIHksIHdpZHRoLCBoZWlnaHQgfSA9IGdldFJlY3RhbmdsZUJ5Tm9kZSh0aGlzLm5vZGUpO1xuICAgICAgICBjb25zdCBzdHJva2UgPSBnZXRCcmFuY2hDb2xvckJ5TWluZEVsZW1lbnQodGhpcy5ib2FyZCwgdGhpcy5lbGVtZW50KTtcbiAgICAgICAgY29uc3QgYnJhbmNoV2lkdGggPSBnZXRCcmFuY2hXaWR0aEJ5TWluZEVsZW1lbnQodGhpcy5ib2FyZCwgdGhpcy5lbGVtZW50KTtcbiAgICAgICAgY29uc3QgZXh0ZW5kWSA9IHkgKyBoZWlnaHQgLyAyO1xuICAgICAgICBjb25zdCBub2RlTGF5b3V0ID0gTWluZFF1ZXJpZXMuZ2V0Q29ycmVjdExheW91dEJ5RWxlbWVudCh0aGlzLmJvYXJkLCB0aGlzLmVsZW1lbnQpIGFzIE1pbmRMYXlvdXRUeXBlO1xuXG4gICAgICAgIGxldCBleHRlbmRMaW5lWFkgPSBbXG4gICAgICAgICAgICBbeCArIHdpZHRoLCBleHRlbmRZXSxcbiAgICAgICAgICAgIFt4ICsgd2lkdGggKyBFWFRFTkRfT0ZGU0VULCBleHRlbmRZXVxuICAgICAgICBdO1xuXG4gICAgICAgIGxldCBhcnJvd1lPZmZzZXQgPSBbLTQsIDEsIC0wLjYsIDRdO1xuICAgICAgICBsZXQgYXJyb3dYT2Zmc2V0ID0gWzEwLCA1LjUsIDUuNSwgMTBdO1xuXG4gICAgICAgIGxldCBleHRlbmRMaW5lWE9mZnNldCA9IFswLCAwXTtcbiAgICAgICAgbGV0IGV4dGVuZExpbmVZT2Zmc2V0ID0gWzAsIDBdO1xuXG4gICAgICAgIGxldCBjaXJjbGVPZmZzZXQgPSBbRVhURU5EX1JBRElVUyAvIDIsIDBdO1xuXG4gICAgICAgIGlmIChpc0hvcml6b250YWxMYXlvdXQobm9kZUxheW91dCkgJiYgIWlzSW5kZW50ZWRMYXlvdXQobm9kZUxheW91dCkpIHtcbiAgICAgICAgICAgIGV4dGVuZExpbmVZT2Zmc2V0ID1cbiAgICAgICAgICAgICAgICAoZ2V0U2hhcGVCeUVsZW1lbnQodGhpcy5ib2FyZCwgdGhpcy5ub2RlLm9yaWdpbikgYXMgTWluZEVsZW1lbnRTaGFwZSkgPT09IE1pbmRFbGVtZW50U2hhcGUucm91bmRSZWN0YW5nbGVcbiAgICAgICAgICAgICAgICAgICAgPyBbMCwgMF1cbiAgICAgICAgICAgICAgICAgICAgOiBbaGVpZ2h0IC8gMiwgaGVpZ2h0IC8gMl07XG4gICAgICAgICAgICBpZiAoaXNMZWZ0TGF5b3V0KG5vZGVMYXlvdXQpKSB7XG4gICAgICAgICAgICAgICAgLy/lt6ZcbiAgICAgICAgICAgICAgICBleHRlbmRMaW5lWE9mZnNldCA9IFstd2lkdGgsIC13aWR0aCAtIEVYVEVORF9PRkZTRVQgKiAyXTtcbiAgICAgICAgICAgICAgICBjaXJjbGVPZmZzZXQgPSBbLUVYVEVORF9SQURJVVMgLyAyLCAwXTtcbiAgICAgICAgICAgICAgICBhcnJvd1hPZmZzZXQgPSBbLTEwLCAtNS41LCAtNS41LCAtMTBdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYXJyb3dYT2Zmc2V0ID0gWy00LCAwLjYsIC0xLCA0XTtcbiAgICAgICAgICAgIGlmIChpc1RvcExheW91dChub2RlTGF5b3V0KSkge1xuICAgICAgICAgICAgICAgIC8v5LiKXG4gICAgICAgICAgICAgICAgZXh0ZW5kTGluZVhPZmZzZXQgPSBbLXdpZHRoIC8gMiwgLXdpZHRoIC8gMiAtIEVYVEVORF9PRkZTRVRdO1xuICAgICAgICAgICAgICAgIGV4dGVuZExpbmVZT2Zmc2V0ID0gWy1oZWlnaHQgLyAyLCAtaGVpZ2h0IC8gMiAtIEVYVEVORF9PRkZTRVRdO1xuICAgICAgICAgICAgICAgIGFycm93WU9mZnNldCA9IFstMTAsIC01LjUsIC01LjUsIC0xMF07XG4gICAgICAgICAgICAgICAgY2lyY2xlT2Zmc2V0ID0gWzAsIC1FWFRFTkRfUkFESVVTIC8gMl07XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8v5LiLXG4gICAgICAgICAgICAgICAgZXh0ZW5kTGluZVhPZmZzZXQgPSBbLXdpZHRoIC8gMiwgLXdpZHRoIC8gMiAtIEVYVEVORF9PRkZTRVRdO1xuICAgICAgICAgICAgICAgIGV4dGVuZExpbmVZT2Zmc2V0ID0gW2hlaWdodCAvIDIsIGhlaWdodCAvIDIgKyBFWFRFTkRfT0ZGU0VUXTtcbiAgICAgICAgICAgICAgICBhcnJvd1lPZmZzZXQgPSBbMTAsIDUuNSwgNS41LCAxMF07XG4gICAgICAgICAgICAgICAgY2lyY2xlT2Zmc2V0ID0gWzAsIEVYVEVORF9SQURJVVMgLyAyXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGV4dGVuZExpbmVYWSA9IFtcbiAgICAgICAgICAgIFtleHRlbmRMaW5lWFlbMF1bMF0gKyBleHRlbmRMaW5lWE9mZnNldFswXSwgZXh0ZW5kTGluZVhZWzBdWzFdICsgZXh0ZW5kTGluZVlPZmZzZXRbMF1dLFxuICAgICAgICAgICAgW2V4dGVuZExpbmVYWVsxXVswXSArIGV4dGVuZExpbmVYT2Zmc2V0WzFdLCBleHRlbmRMaW5lWFlbMV1bMV0gKyBleHRlbmRMaW5lWU9mZnNldFsxXV1cbiAgICAgICAgXTtcblxuICAgICAgICBjb25zdCBleHRlbmRMaW5lID0gdGhpcy5yb3VnaFNWRy5saW5lKGV4dGVuZExpbmVYWVswXVswXSwgZXh0ZW5kTGluZVhZWzBdWzFdLCBleHRlbmRMaW5lWFlbMV1bMF0sIGV4dGVuZExpbmVYWVsxXVsxXSwge1xuICAgICAgICAgICAgc3Ryb2tlV2lkdGg6IGJyYW5jaFdpZHRoLFxuICAgICAgICAgICAgc3Ryb2tlXG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8v57uY5Yi2566t5aS0XG4gICAgICAgIGNvbnN0IGhpZGVBcnJvd1RvcExpbmUgPSB0aGlzLnJvdWdoU1ZHLmxpbmUoXG4gICAgICAgICAgICBleHRlbmRMaW5lWFlbMV1bMF0gKyBhcnJvd1hPZmZzZXRbMF0sXG4gICAgICAgICAgICBleHRlbmRMaW5lWFlbMV1bMV0gKyBhcnJvd1lPZmZzZXRbMF0sXG4gICAgICAgICAgICBleHRlbmRMaW5lWFlbMV1bMF0gKyBhcnJvd1hPZmZzZXRbMV0sXG4gICAgICAgICAgICBleHRlbmRMaW5lWFlbMV1bMV0gKyBhcnJvd1lPZmZzZXRbMV0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgc3Ryb2tlLFxuICAgICAgICAgICAgICAgIHN0cm9rZVdpZHRoOiAyXG4gICAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IGhpZGVBcnJvd0JvdHRvbUxpbmUgPSB0aGlzLnJvdWdoU1ZHLmxpbmUoXG4gICAgICAgICAgICBleHRlbmRMaW5lWFlbMV1bMF0gKyBhcnJvd1hPZmZzZXRbMl0sXG4gICAgICAgICAgICBleHRlbmRMaW5lWFlbMV1bMV0gKyBhcnJvd1lPZmZzZXRbMl0sXG4gICAgICAgICAgICBleHRlbmRMaW5lWFlbMV1bMF0gKyBhcnJvd1hPZmZzZXRbM10sXG4gICAgICAgICAgICBleHRlbmRMaW5lWFlbMV1bMV0gKyBhcnJvd1lPZmZzZXRbM10sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgc3Ryb2tlLFxuICAgICAgICAgICAgICAgIHN0cm9rZVdpZHRoOiAyXG4gICAgICAgICAgICB9XG4gICAgICAgICk7XG5cbiAgICAgICAgaWYgKHRoaXMubm9kZS5vcmlnaW4uaXNDb2xsYXBzZWQpIHtcbiAgICAgICAgICAgIGNvbnN0IGJhZGdlID0gdGhpcy5yb3VnaFNWRy5jaXJjbGUoZXh0ZW5kTGluZVhZWzFdWzBdICsgY2lyY2xlT2Zmc2V0WzBdLCBleHRlbmRMaW5lWFlbMV1bMV0gKyBjaXJjbGVPZmZzZXRbMV0sIEVYVEVORF9SQURJVVMsIHtcbiAgICAgICAgICAgICAgICBmaWxsOiBzdHJva2UsXG4gICAgICAgICAgICAgICAgc3Ryb2tlLFxuICAgICAgICAgICAgICAgIGZpbGxTdHlsZTogJ3NvbGlkJ1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGxldCBudW1iZXJPZmZzZXQgPSAwO1xuICAgICAgICAgICAgaWYgKGdldENoaWxkcmVuQ291bnQodGhpcy5ub2RlLm9yaWdpbikgPj0gMTApIG51bWJlck9mZnNldCA9IC0yO1xuICAgICAgICAgICAgaWYgKGdldENoaWxkcmVuQ291bnQodGhpcy5ub2RlLm9yaWdpbikgPT09IDEpIG51bWJlck9mZnNldCA9IDE7XG5cbiAgICAgICAgICAgIGNvbnN0IGJhZGdlVGV4dCA9IGNyZWF0ZVRleHQoXG4gICAgICAgICAgICAgICAgZXh0ZW5kTGluZVhZWzFdWzBdICsgY2lyY2xlT2Zmc2V0WzBdIC0gNCArIG51bWJlck9mZnNldCxcbiAgICAgICAgICAgICAgICBleHRlbmRMaW5lWFlbMV1bMV0gKyBjaXJjbGVPZmZzZXRbMV0gKyA0LFxuICAgICAgICAgICAgICAgIHN0cm9rZSxcbiAgICAgICAgICAgICAgICBgJHtnZXRDaGlsZHJlbkNvdW50KHRoaXMubm9kZS5vcmlnaW4pfWBcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIHRoaXMuZy5jbGFzc0xpc3QuYWRkKCdjb2xsYXBzZWQnKTtcbiAgICAgICAgICAgIGJhZGdlLnNldEF0dHJpYnV0ZSgnc3R5bGUnLCAnb3BhY2l0eTogMC4xNScpO1xuICAgICAgICAgICAgYmFkZ2VUZXh0LnNldEF0dHJpYnV0ZSgnc3R5bGUnLCAnZm9udC1zaXplOiAxMnB4Jyk7XG4gICAgICAgICAgICBjb2xsYXBzZUcuYXBwZW5kQ2hpbGQoYmFkZ2UpO1xuICAgICAgICAgICAgY29sbGFwc2VHLmFwcGVuZENoaWxkKGJhZGdlVGV4dCk7XG4gICAgICAgICAgICBjb2xsYXBzZUcuYXBwZW5kQ2hpbGQoZXh0ZW5kTGluZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmcuY2xhc3NMaXN0LnJlbW92ZSgnY29sbGFwc2VkJyk7XG4gICAgICAgICAgICBpZiAodGhpcy5ub2RlLm9yaWdpbi5jaGlsZHJlbi5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaGlkZUNpcmNsZUcgPSB0aGlzLnJvdWdoU1ZHLmNpcmNsZShcbiAgICAgICAgICAgICAgICAgICAgZXh0ZW5kTGluZVhZWzFdWzBdICsgY2lyY2xlT2Zmc2V0WzBdLFxuICAgICAgICAgICAgICAgICAgICBleHRlbmRMaW5lWFlbMV1bMV0gKyBjaXJjbGVPZmZzZXRbMV0sXG4gICAgICAgICAgICAgICAgICAgIEVYVEVORF9SQURJVVMgLSAxLFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmaWxsOiAnI2ZmZicsXG4gICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UsXG4gICAgICAgICAgICAgICAgICAgICAgICBzdHJva2VXaWR0aDogYnJhbmNoV2lkdGgsXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWxsU3R5bGU6ICdzb2xpZCdcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgY29sbGFwc2VHLmFwcGVuZENoaWxkKGhpZGVDaXJjbGVHKTtcbiAgICAgICAgICAgICAgICBjb2xsYXBzZUcuYXBwZW5kQ2hpbGQoaGlkZUFycm93VG9wTGluZSk7XG4gICAgICAgICAgICAgICAgY29sbGFwc2VHLmFwcGVuZENoaWxkKGhpZGVBcnJvd0JvdHRvbUxpbmUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgZGVzdHJveUV4dGVuZCgpIHtcbiAgICAgICAgaWYgKHRoaXMuZXh0ZW5kRykge1xuICAgICAgICAgICAgdGhpcy5leHRlbmRHLnJlbW92ZSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZGVzdHJveVJpY2h0ZXh0KCkge1xuICAgICAgICBpZiAodGhpcy5yaWNodGV4dEcpIHtcbiAgICAgICAgICAgIHRoaXMucmljaHRleHRHLnJlbW92ZSgpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnJpY2h0ZXh0Q29tcG9uZW50UmVmKSB7XG4gICAgICAgICAgICB0aGlzLnJpY2h0ZXh0Q29tcG9uZW50UmVmLmRlc3Ryb3koKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHVwZGF0ZUFic3RyYWN0SW5jbHVkZWRPdXRsaW5lKGFjdGl2ZUhhbmRsZVBvc2l0aW9uPzogQWJzdHJhY3RIYW5kbGVQb3NpdGlvbiwgcmVzaXppbmdMb2NhdGlvbj86IG51bWJlcikge1xuICAgICAgICB0aGlzLmFic3RyYWN0SW5jbHVkZWRPdXRsaW5lRz8ucmVtb3ZlKCk7XG4gICAgICAgIHRoaXMuYWJzdHJhY3RJbmNsdWRlZE91dGxpbmVHID0gZHJhd0Fic3RyYWN0SW5jbHVkZWRPdXRsaW5lKFxuICAgICAgICAgICAgdGhpcy5ib2FyZCxcbiAgICAgICAgICAgIHRoaXMucm91Z2hTVkcsXG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQsXG4gICAgICAgICAgICBhY3RpdmVIYW5kbGVQb3NpdGlvbixcbiAgICAgICAgICAgIHJlc2l6aW5nTG9jYXRpb25cbiAgICAgICAgKTtcbiAgICAgICAgUGxhaXRCb2FyZC5nZXRIb3N0KHRoaXMuYm9hcmQpLmFwcGVuZCh0aGlzLmFic3RyYWN0SW5jbHVkZWRPdXRsaW5lRyk7XG4gICAgfVxuXG4gICAgdXBkYXRlUmljaHRleHQoKSB7XG4gICAgICAgIHVwZGF0ZVJpY2hUZXh0KHRoaXMubm9kZS5vcmlnaW4uZGF0YS50b3BpYywgdGhpcy5yaWNodGV4dENvbXBvbmVudFJlZiEpO1xuICAgICAgICB1cGRhdGVNaW5kTm9kZVRvcGljU2l6ZSh0aGlzLmJvYXJkLCB0aGlzLm5vZGUsIHRoaXMucmljaHRleHRHIGFzIFNWR0dFbGVtZW50LCB0aGlzLmlzRWRpdGFibGUpO1xuICAgIH1cblxuICAgIHN0YXJ0RWRpdFRleHQoaXNFbmQ6IGJvb2xlYW4sIGlzQ2xlYXI6IGJvb2xlYW4pIHtcbiAgICAgICAgaWYgKCF0aGlzLnJpY2h0ZXh0Q29tcG9uZW50UmVmKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3VuZGVmaW5lZCByaWNodGV4dENvbXBvbmVudFJlZicpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJpY2h0ZXh0SW5zdGFuY2UgPSB0aGlzLnJpY2h0ZXh0Q29tcG9uZW50UmVmLmluc3RhbmNlO1xuXG4gICAgICAgIHRoaXMuaXNFZGl0YWJsZSA9IHRydWU7XG4gICAgICAgIElTX1RFWFRfRURJVEFCTEUuc2V0KHRoaXMuYm9hcmQsIHRydWUpO1xuICAgICAgICB0aGlzLmRpc2FibGVkTWFza0coKTtcbiAgICAgICAgdXBkYXRlTWluZE5vZGVUb3BpY1NpemUodGhpcy5ib2FyZCwgdGhpcy5ub2RlLCB0aGlzLnJpY2h0ZXh0RyBhcyBTVkdHRWxlbWVudCwgdGhpcy5pc0VkaXRhYmxlKTtcbiAgICAgICAgaWYgKHJpY2h0ZXh0SW5zdGFuY2UucGxhaXRSZWFkb25seSkge1xuICAgICAgICAgICAgcmljaHRleHRJbnN0YW5jZS5wbGFpdFJlYWRvbmx5ID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLnJpY2h0ZXh0Q29tcG9uZW50UmVmLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgIHRoaXMuZHJhd0FjdGl2ZUcoKTtcbiAgICAgICAgICAgIGNvbnN0IGxvY2F0aW9uID0gaXNFbmQgPyBFZGl0b3IuZW5kKHJpY2h0ZXh0SW5zdGFuY2UuZWRpdG9yLCBbMF0pIDogWzBdO1xuICAgICAgICAgICAgc2V0RnVsbFNlbGVjdGlvbkFuZEZvY3VzKHJpY2h0ZXh0SW5zdGFuY2UuZWRpdG9yLCBsb2NhdGlvbik7XG4gICAgICAgICAgICBpZiAoaXNDbGVhcikge1xuICAgICAgICAgICAgICAgIEVkaXRvci5kZWxldGVCYWNrd2FyZChyaWNodGV4dEluc3RhbmNlLmVkaXRvcik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBoYW5kbGUgaW52YWxpZCB3aWR0aCBhbmQgaGVpZ2h0IChvbGQgZGF0YSlcbiAgICAgICAgICAgIGxldCB7IHdpZHRoLCBoZWlnaHQgfSA9IGdldFJpY2h0ZXh0Q29udGVudFNpemUocmljaHRleHRJbnN0YW5jZS5lZGl0YWJsZSk7XG4gICAgICAgICAgICBpZiAod2lkdGggIT09IHRoaXMuZWxlbWVudC53aWR0aCB8fCBoZWlnaHQgIT09IHRoaXMuZWxlbWVudC5oZWlnaHQpIHtcbiAgICAgICAgICAgICAgICBNaW5kVHJhbnNmb3Jtcy5zZXRUb3BpY1NpemUodGhpcy5ib2FyZCwgdGhpcy5lbGVtZW50LCB3aWR0aCwgaGVpZ2h0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBsZXQgcmljaHRleHQgPSByaWNodGV4dEluc3RhbmNlLnBsYWl0VmFsdWU7XG4gICAgICAgIC8vIHVzZSBkZWJvdW5jZVRpbWUgdG8gd2FpdCBET00gcmVuZGVyIGNvbXBsZXRlXG4gICAgICAgIGNvbnN0IHZhbHVlQ2hhbmdlJCA9IHJpY2h0ZXh0SW5zdGFuY2UucGxhaXRDaGFuZ2VcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIGRlYm91bmNlVGltZSgwKSxcbiAgICAgICAgICAgICAgICBmaWx0ZXIoZXZlbnQgPT4ge1xuICAgICAgICAgICAgICAgICAgICAvLyDov4fmu6Tmjokgb3BlcmF0aW9ucyDkuK3lhajmmK8gc2V0X3NlbGVjdGlvbiDnmoTmk43kvZxcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICFldmVudC5vcGVyYXRpb25zLmV2ZXJ5KG9wID0+IE9wZXJhdGlvbi5pc1NlbGVjdGlvbk9wZXJhdGlvbihvcCkpO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc3Vic2NyaWJlKGV2ZW50ID0+IHtcbiAgICAgICAgICAgICAgICBpZiAocmljaHRleHQgPT09IGV2ZW50LnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVSaWNodGV4dCgpO1xuICAgICAgICAgICAgICAgIC8vIOabtOaWsOWvjOaWh+acrOOAgeabtOaWsOWuvemrmFxuICAgICAgICAgICAgICAgIGxldCB7IHdpZHRoLCBoZWlnaHQgfSA9IGdldFJpY2h0ZXh0Q29udGVudFNpemUocmljaHRleHRJbnN0YW5jZS5lZGl0YWJsZSk7XG4gICAgICAgICAgICAgICAgTWluZFRyYW5zZm9ybXMuc2V0VG9waWModGhpcy5ib2FyZCwgdGhpcy5lbGVtZW50LCBldmVudC52YWx1ZSwgd2lkdGgsIGhlaWdodCk7XG4gICAgICAgICAgICAgICAgTUVSR0lORy5zZXQodGhpcy5ib2FyZCwgdHJ1ZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgY29tcG9zaXRpb24kID0gcmljaHRleHRJbnN0YW5jZS5wbGFpdENvbXBvc2l0aW9uLnBpcGUoZGVib3VuY2VUaW1lKDApKS5zdWJzY3JpYmUoZXZlbnQgPT4ge1xuICAgICAgICAgICAgbGV0IHsgd2lkdGgsIGhlaWdodCB9ID0gZ2V0UmljaHRleHRDb250ZW50U2l6ZShyaWNodGV4dEluc3RhbmNlLmVkaXRhYmxlKTtcbiAgICAgICAgICAgIGlmICh3aWR0aCA8IE5PREVfTUlOX1dJRFRIKSB7XG4gICAgICAgICAgICAgICAgd2lkdGggPSBOT0RFX01JTl9XSURUSDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChldmVudC5pc0NvbXBvc2luZyAmJiAod2lkdGggIT09IHRoaXMubm9kZS5vcmlnaW4ud2lkdGggfHwgaGVpZ2h0ICE9PSB0aGlzLm5vZGUub3JpZ2luLmhlaWdodCkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBuZXdFbGVtZW50OiBQYXJ0aWFsPE1pbmRFbGVtZW50PiA9IHtcbiAgICAgICAgICAgICAgICAgICAgd2lkdGg6IHdpZHRoIC8gdGhpcy5ib2FyZC52aWV3cG9ydC56b29tLFxuICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IGhlaWdodCAvIHRoaXMuYm9hcmQudmlld3BvcnQuem9vbVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgY29uc3QgcGF0aCA9IFBsYWl0Qm9hcmQuZmluZFBhdGgodGhpcy5ib2FyZCwgdGhpcy5lbGVtZW50KTtcbiAgICAgICAgICAgICAgICBUcmFuc2Zvcm1zLnNldE5vZGUodGhpcy5ib2FyZCwgbmV3RWxlbWVudCwgcGF0aCk7XG4gICAgICAgICAgICAgICAgTUVSR0lORy5zZXQodGhpcy5ib2FyZCwgdHJ1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBtb3VzZWRvd24kID0gZnJvbUV2ZW50PE1vdXNlRXZlbnQ+KGRvY3VtZW50LCAnbW91c2Vkb3duJykuc3Vic2NyaWJlKChldmVudDogTW91c2VFdmVudCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgcG9pbnQgPSB0cmFuc2Zvcm1Qb2ludCh0aGlzLmJvYXJkLCB0b1BvaW50KGV2ZW50LngsIGV2ZW50LnksIFBsYWl0Qm9hcmQuZ2V0SG9zdCh0aGlzLmJvYXJkKSkpO1xuICAgICAgICAgICAgY29uc3QgY2xpY2tJbk5vZGUgPSBpc0hpdE1pbmRFbGVtZW50KHRoaXMuYm9hcmQsIHBvaW50LCB0aGlzLmVsZW1lbnQpO1xuICAgICAgICAgICAgaWYgKGNsaWNrSW5Ob2RlICYmICFoYXNFZGl0YWJsZVRhcmdldChyaWNodGV4dEluc3RhbmNlLmVkaXRvciwgZXZlbnQudGFyZ2V0KSkge1xuICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKCFjbGlja0luTm9kZSkge1xuICAgICAgICAgICAgICAgIC8vIGhhbmRsZSBjb21wb3NpdGlvbiBpbnB1dCBzdGF0ZSwgbGlrZTogQ2hpbmVzZSBJTUUgQ29tcG9zaXRpb24gSW5wdXRcbiAgICAgICAgICAgICAgICB0aW1lcigwKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBleGl0SGFuZGxlKCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZW5hYmxlTWFza0coKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IGVkaXRvciA9IHJpY2h0ZXh0SW5zdGFuY2UuZWRpdG9yO1xuICAgICAgICBjb25zdCB7IGtleWRvd24gfSA9IGVkaXRvcjtcbiAgICAgICAgZWRpdG9yLmtleWRvd24gPSAoZXZlbnQ6IEtleWJvYXJkRXZlbnQpID0+IHtcbiAgICAgICAgICAgIGlmIChldmVudC5pc0NvbXBvc2luZykge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChldmVudC5rZXkgPT09ICdFc2NhcGUnKSB7XG4gICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgICAgICBleGl0SGFuZGxlKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5kcmF3QWN0aXZlRygpO1xuICAgICAgICAgICAgICAgIHRoaXMuZW5hYmxlTWFza0coKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZXZlbnQua2V5ID09PSAnRW50ZXInICYmICFldmVudC5zaGlmdEtleSkge1xuICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgICAgICAgZXhpdEhhbmRsZSgpO1xuICAgICAgICAgICAgICAgIHRoaXMuZHJhd0FjdGl2ZUcoKTtcbiAgICAgICAgICAgICAgICB0aGlzLmVuYWJsZU1hc2tHKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGV2ZW50LmtleSA9PT0gJ1RhYicpIHtcbiAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgICAgIGV4aXRIYW5kbGUoKTtcbiAgICAgICAgICAgICAgICB0aGlzLmRyYXdBY3RpdmVHKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5kcmF3TWFza0coKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgZXhpdEhhbmRsZSA9ICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMubmdab25lLnJ1bigoKSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gdW5zdWJzY3JpYmVcbiAgICAgICAgICAgICAgICB2YWx1ZUNoYW5nZSQudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgICAgICBjb21wb3NpdGlvbiQudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgICAgICBtb3VzZWRvd24kLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICAgICAgZWRpdG9yLmtleWRvd24gPSBrZXlkb3duOyAvLyByZXNldCBrZXlkb3duXG4gICAgICAgICAgICAgICAgLy8gZWRpdGFibGUgc3RhdHVzXG4gICAgICAgICAgICAgICAgTUVSR0lORy5zZXQodGhpcy5ib2FyZCwgZmFsc2UpO1xuICAgICAgICAgICAgICAgIHJpY2h0ZXh0SW5zdGFuY2UucGxhaXRSZWFkb25seSA9IHRydWU7XG4gICAgICAgICAgICAgICAgdGhpcy5yaWNodGV4dENvbXBvbmVudFJlZj8uY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5pc0VkaXRhYmxlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdXBkYXRlTWluZE5vZGVUb3BpY1NpemUodGhpcy5ib2FyZCwgdGhpcy5ub2RlLCB0aGlzLnJpY2h0ZXh0RyBhcyBTVkdHRWxlbWVudCwgdGhpcy5pc0VkaXRhYmxlKTtcbiAgICAgICAgICAgICAgICBJU19URVhUX0VESVRBQkxFLnNldCh0aGlzLmJvYXJkLCBmYWxzZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICB0cmFja0J5ID0gKGluZGV4OiBudW1iZXIsIG5vZGU6IE1pbmROb2RlKSA9PiB7XG4gICAgICAgIHJldHVybiBub2RlLm9yaWdpbi5pZDtcbiAgICB9O1xuXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHN1cGVyLm5nT25EZXN0cm95KCk7XG4gICAgICAgIHRoaXMuYWJzdHJhY3RJbmNsdWRlZE91dGxpbmVHPy5yZW1vdmUoKTtcbiAgICAgICAgdGhpcy5kZXN0cm95UmljaHRleHQoKTtcbiAgICAgICAgdGhpcy5lbW9qaXNEcmF3ZXIuZGVzdHJveSgpO1xuICAgICAgICB0aGlzLmRlc3Ryb3kkLm5leHQoKTtcbiAgICAgICAgdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpO1xuICAgICAgICBpZiAoRUxFTUVOVF9UT19OT0RFLmdldCh0aGlzLmVsZW1lbnQpID09PSB0aGlzLm5vZGUpIHtcbiAgICAgICAgICAgIEVMRU1FTlRfVE9fTk9ERS5kZWxldGUodGhpcy5lbGVtZW50KTtcbiAgICAgICAgfVxuICAgIH1cbn1cbiJdfQ==
573
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9kZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9wYWNrYWdlcy9taW5kL3NyYy9ub2RlLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsdUJBQXVCLEVBRXZCLFNBQVMsRUFPWixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQ0gsZ0JBQWdCLEVBQ2hCLE9BQU8sRUFDUCxVQUFVLEVBQ1YsZ0JBQWdCLEVBQ2hCLE9BQU8sRUFDUCxVQUFVLEVBQ1YsT0FBTyxFQUNQLGNBQWMsRUFDZCxVQUFVLEVBQ1Ysa0JBQWtCLEVBQ2xCLDJCQUEyQixFQUMzQixZQUFZLEVBQ1osYUFBYSxFQUdiLGVBQWUsRUFDbEIsTUFBTSxhQUFhLENBQUM7QUFDckIsT0FBTyxFQUNILGNBQWMsRUFDZCxrQkFBa0IsRUFDbEIsZ0JBQWdCLEVBQ2hCLFlBQVksRUFDWixZQUFZLEVBQ1osYUFBYSxFQUNiLFdBQVcsRUFFZCxNQUFNLGdCQUFnQixDQUFDO0FBQ3hCLE9BQU8sRUFBRSxpQkFBaUIsRUFBMEIsd0JBQXdCLEVBQUUsY0FBYyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFdEgsT0FBTyxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ2pELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN2RSxPQUFPLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxNQUFNLE9BQU8sQ0FBQztBQUMxQyxPQUFPLEVBQUUsYUFBYSxFQUFFLGFBQWEsRUFBRSxhQUFhLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDMUUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxlQUFlLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNu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QUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO2dCQUMvRixnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztZQUM1QyxDQUFDLENBQUMsQ0FBQztRQUNQLENBQUMsQ0FBQztJQUNOLENBQUM7SUFNRCxXQUFXO1FBQ1AsS0FBSyxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ3BCLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxNQUFNLEVBQUUsQ0FBQztRQUN4QyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDdkIsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUM1QixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDekIsSUFBSSxlQUFlLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxJQUFJLENBQUMsSUFBSSxFQUFFO1lBQ2pELGVBQWUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1NBQ3hDO0lBQ0wsQ0FBQzs7OEdBN29CUSxpQkFBaUI7a0dBQWpCLGlCQUFpQiw4RUFYaEI7Ozs7Ozs7O0tBUVQ7MkZBR1EsaUJBQWlCO2tCQWI3QixTQUFTO21CQUFDO29CQUNQLFFBQVEsRUFBRSxpQkFBaUI7b0JBQzNCLFFBQVEsRUFBRTs7Ozs7Ozs7S0FRVDtvQkFDRCxlQUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTtpQkFDbEQiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICAgIENoYW5nZURldGVjdG9yUmVmLFxuICAgIENvbXBvbmVudCxcbiAgICBDb21wb25lbnRSZWYsXG4gICAgTmdab25lLFxuICAgIE9uRGVzdHJveSxcbiAgICBPbkluaXQsXG4gICAgUmVuZGVyZXIyLFxuICAgIFZpZXdDb250YWluZXJSZWZcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICAgIFBsYWl0UG9pbnRlclR5cGUsXG4gICAgY3JlYXRlRyxcbiAgICBjcmVhdGVUZXh0LFxuICAgIElTX1RFWFRfRURJVEFCTEUsXG4gICAgTUVSR0lORyxcbiAgICBQbGFpdEJvYXJkLFxuICAgIHRvUG9pbnQsXG4gICAgdHJhbnNmb3JtUG9pbnQsXG4gICAgVHJhbnNmb3JtcyxcbiAgICBkcmF3Um91bmRSZWN0YW5nbGUsXG4gICAgUGxhaXRQbHVnaW5FbGVtZW50Q29tcG9uZW50LFxuICAgIFBsYWl0RWxlbWVudCxcbiAgICBOT0RFX1RPX0lOREVYLFxuICAgIFBsYWl0UGx1Z2luRWxlbWVudENvbnRleHQsXG4gICAgT25Db250ZXh0Q2hhbmdlZCxcbiAgICBSZWN0YW5nbGVDbGllbnRcbn0gZnJvbSAnQHBsYWl0L2NvcmUnO1xuaW1wb3J0IHtcbiAgICBpc0JvdHRvbUxheW91dCxcbiAgICBpc0hvcml6b250YWxMYXlvdXQsXG4gICAgaXNJbmRlbnRlZExheW91dCxcbiAgICBpc0xlZnRMYXlvdXQsXG4gICAgQWJzdHJhY3ROb2RlLFxuICAgIGlzUmlnaHRMYXlvdXQsXG4gICAgaXNUb3BMYXlvdXQsXG4gICAgTWluZExheW91dFR5cGVcbn0gZnJvbSAnQHBsYWl0L2xheW91dHMnO1xuaW1wb3J0IHsgaGFzRWRpdGFibGVUYXJnZXQsIFBsYWl0UmljaHRleHRDb21wb25lbnQsIHNldEZ1bGxTZWxlY3Rpb25BbmRGb2N1cywgdXBkYXRlUmljaFRleHQgfSBmcm9tICdAcGxhaXQvcmljaHRleHQnO1xuaW1wb3J0IHsgUm91Z2hTVkcgfSBmcm9tICdyb3VnaGpzL2Jpbi9zdmcnO1xuaW1wb3J0IHsgZnJvbUV2ZW50LCBTdWJqZWN0LCB0aW1lciB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZGVib3VuY2VUaW1lLCBmaWx0ZXIsIHRha2UsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IEVkaXRvciwgT3BlcmF0aW9uIH0gZnJvbSAnc2xhdGUnO1xuaW1wb3J0IHsgRVhURU5EX09GRlNFVCwgRVhURU5EX1JBRElVUywgUFJJTUFSWV9DT0xPUiB9IGZyb20gJy4vY29uc3RhbnRzJztcbmltcG9ydCB7IE5PREVfTUlOX1dJRFRIIH0gZnJvbSAnLi9jb25zdGFudHMvbm9kZS1ydWxlJztcbmltcG9ydCB7IGRyYXdUb3BpY0J5Tm9kZSwgdXBkYXRlTWluZE5vZGVUb3BpY1NpemUgfSBmcm9tICcuL3V0aWxzL2RyYXcvbm9kZS10b3BpYyc7XG5pbXBvcnQgeyBkcmF3Um91bmRSZWN0YW5nbGVCeU5vZGUgfSBmcm9tICcuL3V0aWxzL2RyYXcvbm9kZS1zaGFwZSc7XG5pbXBvcnQgeyBNaW5kRWxlbWVudCwgUGxhaXRNaW5kIH0gZnJvbSAnLi9pbnRlcmZhY2VzL2VsZW1lbnQnO1xuaW1wb3J0IHsgTWluZE5vZGUgfSBmcm9tICcuL2ludGVyZmFjZXMvbm9kZSc7XG5pbXBvcnQgeyBNaW5kUXVlcmllcyB9IGZyb20gJy4vcXVlcmllcyc7XG5pbXBvcnQgeyBnZXRSZWN0YW5nbGVCeU5vZGUsIGlzSGl0TWluZEVsZW1lbnQgfSBmcm9tICcuL3V0aWxzL3Bvc2l0aW9uL25vZGUnO1xuaW1wb3J0IHsgZ2V0Q2hpbGRyZW5Db3VudCB9IGZyb20gJy4vdXRpbHMvbWluZCc7XG5pbXBvcnQgeyBnZXRTaGFwZUJ5RWxlbWVudCB9IGZyb20gJy4vdXRpbHMvbm9kZS1zdHlsZS9zaGFwZSc7XG5pbXBvcnQgeyBFTEVNRU5UX1RPX05PREUgfSBmcm9tICcuL3V0aWxzL3dlYWstbWFwcyc7XG5pbXBvcnQgeyBnZXRSaWNodGV4dENvbnRlbnRTaXplIH0gZnJvbSAnQHBsYWl0L3JpY2h0ZXh0JztcbmltcG9ydCB7IGRyYXdBYnN0cmFjdExpbmsgfSBmcm9tICcuL3V0aWxzL2RyYXcvbm9kZS1saW5rL2Fic3RyYWN0LWxpbmsnO1xuaW1wb3J0IHsgRW1vamlzRHJhd2VyIH0gZnJvbSAnLi9kcmF3ZXIvZW1vamlzLmRyYXdlcic7XG5pbXBvcnQgeyBNaW5kVHJhbnNmb3JtcyB9IGZyb20gJy4vdHJhbnNmb3Jtcyc7XG5pbXBvcnQgeyBkcmF3QWJzdHJhY3RJbmNsdWRlZE91dGxpbmUgfSBmcm9tICcuL3V0aWxzL2RyYXcvYWJzdHJhY3Qtb3V0bGluZSc7XG5pbXBvcnQgeyBNaW5kRWxlbWVudFNoYXBlIH0gZnJvbSAnLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IFF1aWNrSW5zZXJ0RHJhd2VyIH0gZnJvbSAnLi9kcmF3ZXIvcXVpY2staW5zZXJ0LmRyYXdlcic7XG5pbXBvcnQgeyBoYXNBZnRlckRyYXcgfSBmcm9tICcuL2Jhc2UvYmFzZS5kcmF3ZXInO1xuaW1wb3J0IHsgZ2V0QnJhbmNoQ29sb3JCeU1pbmRFbGVtZW50LCBnZXRCcmFuY2hXaWR0aEJ5TWluZEVsZW1lbnQgfSBmcm9tICcuL3V0aWxzL25vZGUtc3R5bGUvYnJhbmNoJztcbmltcG9ydCB7IFBsYWl0TWluZEJvYXJkIH0gZnJvbSAnLi9wbHVnaW5zL3dpdGgtbWluZC5ib2FyZCc7XG5pbXBvcnQgeyBBYnN0cmFjdEhhbmRsZVBvc2l0aW9uIH0gZnJvbSAnLi9wbHVnaW5zL3dpdGgtYWJzdHJhY3QtcmVzaXplLmJvYXJkJztcbmltcG9ydCB7IGRyYXdMaW5rIH0gZnJvbSAnLi91dGlscy9kcmF3L25vZGUtbGluay9kcmF3LWxpbmsnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ3BsYWl0LW1pbmQtbm9kZScsXG4gICAgdGVtcGxhdGU6IGBcbiAgICAgICAgPHBsYWl0LWNoaWxkcmVuXG4gICAgICAgICAgICAqbmdJZj1cIiFlbGVtZW50LmlzQ29sbGFwc2VkXCJcbiAgICAgICAgICAgIFtib2FyZF09XCJib2FyZFwiXG4gICAgICAgICAgICBbcGFyZW50XT1cImVsZW1lbnRcIlxuICAgICAgICAgICAgW2VmZmVjdF09XCJlZmZlY3RcIlxuICAgICAgICAgICAgW3BhcmVudEddPVwicGFyZW50R1wiXG4gICAgICAgID48L3BsYWl0LWNoaWxkcmVuPlxuICAgIGAsXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcbn0pXG5leHBvcnQgY2xhc3MgTWluZE5vZGVDb21wb25lbnQgZXh0ZW5kcyBQbGFpdFBsdWdpbkVsZW1lbnRDb21wb25lbnQ8TWluZEVsZW1lbnQsIFBsYWl0TWluZEJvYXJkPlxuICAgIGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3ksIE9uQ29udGV4dENoYW5nZWQ8TWluZEVsZW1lbnQsIFBsYWl0TWluZEJvYXJkPiB7XG4gICAgaXNFZGl0YWJsZSA9IGZhbHNlO1xuXG4gICAgcm91Z2hTVkchOiBSb3VnaFNWRztcblxuICAgIG5vZGUhOiBNaW5kTm9kZTtcblxuICAgIGluZGV4ITogbnVtYmVyO1xuXG4gICAgYWJzdHJhY3RJbmNsdWRlZE91dGxpbmVHPzogU1ZHR0VsZW1lbnQ7XG5cbiAgICBwYXJlbnRHITogU1ZHR0VsZW1lbnQ7XG5cbiAgICBhY3RpdmVHOiBTVkdHRWxlbWVudFtdID0gW107XG5cbiAgICBzaGFwZUc6IFNWR0dFbGVtZW50IHwgbnVsbCA9IG51bGw7XG5cbiAgICBsaW5rRz86IFNWR0dFbGVtZW50O1xuXG4gICAgcmljaHRleHRHPzogU1ZHR0VsZW1lbnQ7XG5cbiAgICBmb3JlaWduT2JqZWN0PzogU1ZHRm9yZWlnbk9iamVjdEVsZW1lbnQ7XG5cbiAgICBleHRlbmRHPzogU1ZHR0VsZW1lbnQ7XG5cbiAgICBtYXNrRyE6IFNWR0dFbGVtZW50O1xuXG4gICAgcmljaHRleHRDb21wb25lbnRSZWY/OiBDb21wb25lbnRSZWY8UGxhaXRSaWNodGV4dENvbXBvbmVudD47XG5cbiAgICBkZXN0cm95JCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgICBlbW9qaXNEcmF3ZXIhOiBFbW9qaXNEcmF3ZXI7XG5cbiAgICBxdWlja0luc2VydERyYXdlciE6IFF1aWNrSW5zZXJ0RHJhd2VyO1xuXG4gICAgcHVibGljIGdldCBoYW5kQWN0aXZlKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5ib2FyZC5wb2ludGVyID09PSBQbGFpdFBvaW50ZXJUeXBlLmhhbmQ7XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgdmlld0NvbnRhaW5lclJlZjogVmlld0NvbnRhaW5lclJlZixcbiAgICAgICAgcHJvdGVjdGVkIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgICAgIHByaXZhdGUgcmVuZGVyMjogUmVuZGVyZXIyLFxuICAgICAgICBwcml2YXRlIG5nWm9uZTogTmdab25lXG4gICAgKSB7XG4gICAgICAgIHN1cGVyKGNkcik7XG4gICAgfVxuXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZW1vamlzRHJhd2VyID0gbmV3IEVtb2ppc0RyYXdlcih0aGlzLmJvYXJkLCB0aGlzLnZpZXdDb250YWluZXJSZWYpO1xuICAgICAgICB0aGlzLnF1aWNrSW5zZXJ0RHJhd2VyID0gbmV3IFF1aWNrSW5zZXJ0RHJhd2VyKHRoaXMuYm9hcmQpO1xuICAgICAgICBzdXBlci5uZ09uSW5pdCgpO1xuICAgICAgICB0aGlzLm5vZGUgPSBNaW5kRWxlbWVudC5nZXROb2RlKHRoaXMuZWxlbWVudCk7XG4gICAgICAgIHRoaXMuaW5kZXggPSBOT0RFX1RPX0lOREVYLmdldCh0aGlzLmVsZW1lbnQpIHx8IDA7XG4gICAgICAgIHRoaXMucm91Z2hTVkcgPSBQbGFpdEJvYXJkLmdldFJvdWdoU1ZHKHRoaXMuYm9hcmQpO1xuICAgICAgICB0aGlzLnBhcmVudEcgPSBQbGFpdEVsZW1lbnQuZ2V0Q29tcG9uZW50KE1pbmRFbGVtZW50LmdldFJvb3QodGhpcy5ib2FyZCwgdGhpcy5lbGVtZW50KSkucm9vdEcgYXMgU1ZHR0VsZW1lbnQ7XG4gICAgICAgIHRoaXMuZHJhd1NoYXBlKCk7XG4gICAgICAgIHRoaXMuZHJhd0xpbmsoKTtcbiAgICAgICAgdGhpcy5kcmF3UmljaHRleHQoKTtcbiAgICAgICAgdGhpcy5kcmF3QWN0aXZlRygpO1xuICAgICAgICB0aGlzLnVwZGF0ZUFjdGl2ZUNsYXNzKCk7XG4gICAgICAgIHRoaXMuZHJhd01hc2tHKCk7XG4gICAgICAgIHRoaXMuZHJhd0Vtb2ppcygpO1xuICAgICAgICB0aGlzLmRyYXdFeHRlbmQoKTtcbiAgICAgICAgdGhpcy5kcmF3UXVpY2tJbnNlcnQoKTtcbiAgICB9XG5cbiAgICBvbkNvbnRleHRDaGFuZ2VkKFxuICAgICAgICB2YWx1ZTogUGxhaXRQbHVnaW5FbGVtZW50Q29udGV4dDxNaW5kRWxlbWVudCwgUGxhaXRNaW5kQm9hcmQ+LFxuICAgICAgICBwcmV2aW91czogUGxhaXRQbHVnaW5FbGVtZW50Q29udGV4dDxNaW5kRWxlbWVudCwgUGxhaXRNaW5kQm9hcmQ+XG4gICAgKSB7XG4gICAgICAgIGNvbnN0IG5ld05vZGUgPSBNaW5kRWxlbWVudC5nZXROb2RlKHZhbHVlLmVsZW1lbnQpO1xuXG4gICAgICAgIC8vIHJlc29sdmUgbW92ZSBub2RlIHJpY2h0ZXh0IGxvc2UgaXNzdWVcbiAgICAgICAgaWYgKHRoaXMubm9kZSAhPT0gbmV3Tm9kZSkge1xuICAgICAgICAgICAgaWYgKHRoaXMuZm9yZWlnbk9iamVjdCAmJiB0aGlzLmZvcmVpZ25PYmplY3QuY2hpbGRyZW4ubGVuZ3RoIDw9IDApIHtcbiAgICAgICAgICAgICAgICB0aGlzLmZvcmVpZ25PYmplY3Q/LmFwcGVuZENoaWxkKHRoaXMucmljaHRleHRDb21wb25lbnRSZWY/Lmluc3RhbmNlLmVkaXRhYmxlIGFzIEhUTUxFbGVtZW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGlzRXF1YWxOb2RlID0gUmVjdGFuZ2xlQ2xpZW50LmlzRXF1YWwodGhpcy5ub2RlLCBuZXdOb2RlKTtcbiAgICAgICAgdGhpcy5ub2RlID0gbmV3Tm9kZTtcblxuICAgICAgICBpZiAoIWlzRXF1YWxOb2RlIHx8IHZhbHVlLmVsZW1lbnQgIT09IHByZXZpb3VzLmVsZW1lbnQpIHtcbiAgICAgICAgICAgIHRoaXMuZHJhd0FjdGl2ZUcoKTtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlQWN0aXZlQ2xhc3MoKTtcbiAgICAgICAgICAgIHRoaXMuZHJhd1NoYXBlKCk7XG4gICAgICAgICAgICB0aGlzLmRyYXdMaW5rKCk7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVJpY2h0ZXh0KCk7XG4gICAgICAgICAgICB0aGlzLmRyYXdNYXNrRygpO1xuICAgICAgICAgICAgdGhpcy5kcmF3RXh0ZW5kKCk7XG4gICAgICAgICAgICB0aGlzLmRyYXdRdWlja0luc2VydCgpO1xuICAgICAgICAgICAgdGhpcy5kcmF3RW1vamlzKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBoYXNTYW1lU2VsZWN0ZWQgPSB2YWx1ZS5zZWxlY3RlZCA9PT0gcHJldmlvdXMuc2VsZWN0ZWQ7XG4gICAgICAgICAgICBjb25zdCBoYXNTYW1lUGFyZW50ID0gdmFsdWUucGFyZW50ID09PSBwcmV2aW91cy5wYXJlbnQ7XG4gICAgICAgICAgICBpZiAoIWhhc1NhbWVTZWxlY3RlZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuZHJhd0FjdGl2ZUcoKTtcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZUFjdGl2ZUNsYXNzKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIWhhc1NhbWVQYXJlbnQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRyYXdMaW5rKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBkcmF3RW1vamlzKCkge1xuICAgICAgICBjb25zdCBnID0gdGhpcy5lbW9qaXNEcmF3ZXIuZHJhd0Vtb2ppcyh0aGlzLmVsZW1lbnQpO1xuICAgICAgICBpZiAoZykge1xuICAgICAgICAgICAgdGhpcy5nLmFwcGVuZChnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGRyYXdRdWlja0luc2VydCgpIHtcbiAgICAgICAgdGhpcy5xdWlja0luc2VydERyYXdlci5kZXN0cm95KCk7XG4gICAgICAgIGlmICh0aGlzLnF1aWNrSW5zZXJ0RHJhd2VyLmNhbkRyYXcodGhpcy5lbGVtZW50KSkge1xuICAgICAgICAgICAgY29uc3QgZyA9IHRoaXMucXVpY2tJbnNlcnREcmF3ZXIuZHJhdyh0aGlzLmVsZW1lbnQpO1xuICAgICAgICAgICAgaWYgKGhhc0FmdGVyRHJhdyh0aGlzLnF1aWNrSW5zZXJ0RHJhd2VyKSkge1xuICAgICAgICAgICAgICAgIHRoaXMucXVpY2tJbnNlcnREcmF3ZXIuYWZ0ZXJEcmF3KHRoaXMuZWxlbWVudCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmV4dGVuZEc/LmFwcGVuZENoaWxkKGcpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZHJhd1NoYXBlKCkge1xuICAgICAgICB0aGlzLmRlc3Ryb3lTaGFwZSgpO1xuICAgICAgICBjb25zdCBzaGFwZSA9IGdldFNoYXBlQnlFbGVtZW50KHRoaXMuYm9hcmQsIHRoaXMubm9kZS5vcmlnaW4pIGFzIE1pbmRFbGVtZW50U2hhcGU7XG4gICAgICAgIHN3aXRjaCAoc2hhcGUpIHtcbiAgICAgICAgICAgIGNhc2UgTWluZEVsZW1lbnRTaGFwZS5yb3VuZFJlY3RhbmdsZTpcbiAgICAgICAgICAgICAgICB0aGlzLnNoYXBlRyA9IGRyYXdSb3VuZFJlY3RhbmdsZUJ5Tm9kZSh0aGlzLmJvYXJkLCB0aGlzLm5vZGUgYXMgTWluZE5vZGUpO1xuICAgICAgICAgICAgICAgIHRoaXMuZy5wcmVwZW5kKHRoaXMuc2hhcGVHKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBkZXN0cm95U2hhcGUoKSB7XG4gICAgICAgIGlmICh0aGlzLnNoYXBlRykge1xuICAgICAgICAgICAgdGhpcy5zaGFwZUcucmVtb3ZlKCk7XG4gICAgICAgICAgICB0aGlzLnNoYXBlRyA9IG51bGw7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBkcmF3TGluaygpIHtcbiAgICAgICAgaWYgKFBsYWl0TWluZC5pc01pbmQodGhpcy5lbGVtZW50KSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcGFyZW50ID0gTWluZEVsZW1lbnQuZ2V0UGFyZW50KHRoaXMuZWxlbWVudCk7XG4gICAgICAgIGNvbnN0IHBhcmVudE5vZGUgPSBNaW5kRWxlbWVudC5nZXROb2RlKHBhcmVudCk7XG5cbiAgICAgICAgaWYgKHRoaXMubGlua0cpIHtcbiAgICAgICAgICAgIHRoaXMubGlua0cucmVtb3ZlKCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBsYXlvdXQgPSBNaW5kUXVlcmllcy5nZXRMYXlvdXRCeUVsZW1lbnQocGFyZW50KSBhcyBNaW5kTGF5b3V0VHlwZTtcbiAgICAgICAgaWYgKEFic3RyYWN0Tm9kZS5pc0Fic3RyYWN0KHRoaXMubm9kZS5vcmlnaW4pKSB7XG4gICAgICAgICAgICB0aGlzLmxpbmtHID0gZHJhd0Fic3RyYWN0TGluayh0aGlzLmJvYXJkLCB0aGlzLm5vZGUsIGlzSG9yaXpvbnRhbExheW91dChsYXlvdXQpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMubGlua0cgPSBkcmF3TGluayh0aGlzLmJvYXJkLCBwYXJlbnROb2RlLCB0aGlzLm5vZGUsIGlzSG9yaXpvbnRhbExheW91dChsYXlvdXQpKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmcuYXBwZW5kKHRoaXMubGlua0cpO1xuICAgIH1cblxuICAgIGRlc3Ryb3lMaW5lKCkge1xuICAgICAgICBpZiAodGhpcy5saW5rRykge1xuICAgICAgICAgICAgdGhpcy5saW5rRy5yZW1vdmUoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGRyYXdNYXNrRygpIHtcbiAgICAgICAgdGhpcy5kZXN0cm95TWFza0coKTtcbiAgICAgICAgY29uc3QgbGluZVdpZHRoT2Zmc2V0ID0gMjtcbiAgICAgICAgY29uc3QgZXh0ZW5kT2Zmc2V0ID0gMTU7XG4gICAgICAgIGNvbnN0IG5vZGVMYXlvdXQgPSBNaW5kUXVlcmllcy5nZXRMYXlvdXRCeUVsZW1lbnQodGhpcy5ub2RlLm9yaWdpbikgYXMgTWluZExheW91dFR5cGU7XG4gICAgICAgIGNvbnN0IGlzVG9wID0gaXNUb3BMYXlvdXQobm9kZUxheW91dCk7XG4gICAgICAgIGNvbnN0IGlzUmlnaHQgPSBpc1JpZ2h0TGF5b3V0KG5vZGVMYXlvdXQpO1xuICAgICAgICBjb25zdCBpc0JvdHRvbSA9IGlzQm90dG9tTGF5b3V0KG5vZGVMYXlvdXQpO1xuICAgICAgICBjb25zdCBpc0xlZnQgPSBpc0xlZnRMYXlvdXQobm9kZUxheW91dCk7XG4gICAgICAgIGNvbnN0IHsgeCwgeSwgd2lkdGgsIGhlaWdodCB9ID0gZ2V0UmVjdGFuZ2xlQnlOb2RlKHRoaXMubm9kZSBhcyBNaW5kTm9kZSk7XG5cbiAgICAgICAgbGV0IGRyYXdYID0geDtcbiAgICAgICAgbGV0IGRyYXdZID0geTtcbiAgICAgICAgbGV0IGRyYXdXaWR0aCA9IHggKyB3aWR0aDtcbiAgICAgICAgbGV0IGRyYXdIZWlnaHQgPSB5ICsgaGVpZ2h0O1xuXG4gICAgICAgIHN3aXRjaCAodHJ1ZSkge1xuICAgICAgICAgICAgY2FzZSBpc1RvcDpcbiAgICAgICAgICAgICAgICBkcmF3WCA9IHggLSBsaW5lV2lkdGhPZmZzZXQ7XG4gICAgICAgICAgICAgICAgZHJhd1kgPSB5IC0gZXh0ZW5kT2Zmc2V0O1xuICAgICAgICAgICAgICAgIGRyYXdXaWR0aCA9IHggKyB3aWR0aCArIGxpbmVXaWR0aE9mZnNldDtcbiAgICAgICAgICAgICAgICBkcmF3SGVpZ2h0ID0geSArIGhlaWdodCArIGxpbmVXaWR0aE9mZnNldDtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgaXNCb3R0b206XG4gICAgICAgICAgICAgICAgZHJhd1ggPSB4IC0gbGluZVdpZHRoT2Zmc2V0O1xuICAgICAgICAgICAgICAgIGRyYXdZID0geSAtIGxpbmVXaWR0aE9mZnNldDtcbiAgICAgICAgICAgICAgICBkcmF3V2lkdGggPSB4ICsgd2lkdGggKyBsaW5lV2lkdGhPZmZzZXQ7XG4gICAgICAgICAgICAgICAgZHJhd0hlaWdodCA9IHkgKyBoZWlnaHQgKyBleHRlbmRPZmZzZXQ7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIGlzTGVmdDpcbiAgICAgICAgICAgICAgICBkcmF3WCA9IHggLSBleHRlbmRPZmZzZXQ7XG4gICAgICAgICAgICAgICAgZHJhd1kgPSB5IC0gbGluZVdpZHRoT2Zmc2V0O1xuICAgICAgICAgICAgICAgIGRyYXdXaWR0aCA9IHggKyB3aWR0aCArIGxpbmVXaWR0aE9mZnNldDtcbiAgICAgICAgICAgICAgICBkcmF3SGVpZ2h0ID0geSArIGhlaWdodCArIGxpbmVXaWR0aE9mZnNldDtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgaXNSaWdodDpcbiAgICAgICAgICAgICAgICBkcmF3WCA9IHggLSBsaW5lV2lkdGhPZmZzZXQ7XG4gICAgICAgICAgICAgICAgZHJhd1kgPSB5IC0gbGluZVdpZHRoT2Zmc2V0O1xuICAgICAgICAgICAgICAgIGRyYXdXaWR0aCA9IHggKyB3aWR0aCArIGV4dGVuZE9mZnNldDtcbiAgICAgICAgICAgICAgICBkcmF3SGVpZ2h0ID0geSArIGhlaWdodCArIGxpbmVXaWR0aE9mZnNldDtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm1hc2tHID0gZHJhd1JvdW5kUmVjdGFuZ2xlKFxuICAgICAgICAgICAgdGhpcy5yb3VnaFNWRyBhcyBSb3VnaFNWRyxcbiAgICAgICAgICAgIGRyYXdYLFxuICAgICAgICAgICAgZHJhd1ksXG4gICAgICAgICAgICBkcmF3V2lkdGgsXG4gICAgICAgICAgICBkcmF3SGVpZ2h0LFxuICAgICAgICAgICAgeyBzdHJva2U6ICdub25lJywgZmlsbDogJ3JnYmEoMjU1LDI1NSwyNTUsMCknLCBmaWxsU3R5bGU6ICdzb2xpZCcgfSxcbiAgICAgICAgICAgIHRydWVcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5tYXNrRy5jbGFzc0xpc3QuYWRkKCdtYXNrJyk7XG4gICAgICAgIHRoaXMubWFza0cuc2V0QXR0cmlidXRlKCd2aXNpYmlsaXR5JywgJ3Zpc2libGUnKTtcbiAgICAgICAgdGhpcy5nLmFwcGVuZCh0aGlzLm1hc2tHKTtcblxuICAgICAgICBpZiAodGhpcy5pc0VkaXRhYmxlKSB7XG4gICAgICAgICAgICB0aGlzLmRpc2FibGVkTWFza0coKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZyb21FdmVudDxNb3VzZUV2ZW50Pih0aGlzLm1hc2tHLCAnbW91c2VlbnRlcicpXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICB0YWtlVW50aWwodGhpcy5kZXN0cm95JCksXG4gICAgICAgICAgICAgICAgZmlsdGVyKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFBsYWl0Qm9hcmQuaXNGb2N1cyh0aGlzLmJvYXJkKSAmJiAhdGhpcy5lbGVtZW50LmlzQ29sbGFwc2VkICYmICF0aGlzLmhhbmRBY3RpdmU7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuZy5jbGFzc0xpc3QuYWRkKCdob3ZlcmVkJyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgZnJvbUV2ZW50PE1vdXNlRXZlbnQ+KHRoaXMubWFza0csICdtb3VzZWxlYXZlJylcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSxcbiAgICAgICAgICAgICAgICBmaWx0ZXIoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gUGxhaXRCb2FyZC5pc0ZvY3VzKHRoaXMuYm9hcmQpICYmICF0aGlzLmVsZW1lbnQuaXNDb2xsYXBzZWQ7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuZy5jbGFzc0xpc3QucmVtb3ZlKCdob3ZlcmVkJyk7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBkZXN0cm95TWFza0coKSB7XG4gICAgICAgIGlmICh0aGlzLm1hc2tHKSB7XG4gICAgICAgICAgICB0aGlzLm1hc2tHLnJlbW92ZSgpO1xuICAgICAgICAgICAgdGhpcy5nLmNsYXNzTGlzdC5yZW1vdmUoJ2hvdmVyZWQnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGVuYWJsZU1hc2tHKCkge1xuICAgICAgICBpZiAodGhpcy5tYXNrRykge1xuICAgICAgICAgICAgdGhpcy5tYXNrRy5zZXRBdHRyaWJ1dGUoJ3Zpc2liaWxpdHknLCAndmlzaWJsZScpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZGlzYWJsZWRNYXNrRygpIHtcbiAgICAgICAgaWYgKHRoaXMubWFza0cpIHtcbiAgICAgICAgICAgIHRoaXMubWFza0cuc2V0QXR0cmlidXRlKCd2aXNpYmlsaXR5JywgJ2hpZGRlbicpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZHJhd0FjdGl2ZUcoKSB7XG4gICAgICAgIHRoaXMuZGVzdHJveUFjdGl2ZUcoKTtcbiAgICAgICAgdGhpcy5hYnN0cmFjdEluY2x1ZGVkT3V0bGluZUc/LnJlbW92ZSgpO1xuICAgICAgICBpZiAodGhpcy5zZWxlY3RlZCkge1xuICAgICAgICAgICAgaWYgKEFic3RyYWN0Tm9kZS5pc0Fic3RyYWN0KHRoaXMuZWxlbWVudCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZUFic3RyYWN0SW5jbHVkZWRPdXRsaW5lKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsZXQgeyB4LCB5LCB3aWR0aCwgaGVpZ2h0IH0gPSBnZXRSZWN0YW5nbGVCeU5vZGUodGhpcy5ub2RlIGFzIE1pbmROb2RlKTtcbiAgICAgICAgICAgIGNvbnN0IHNlbGVjdGVkU3Ryb2tlRyA9IGRyYXdSb3VuZFJlY3RhbmdsZShcbiAgICAgICAgICAgICAgICB0aGlzLnJvdWdoU1ZHIGFzIFJvdWdoU1ZHLFxuICAgICAgICAgICAgICAgIHggLSAyLFxuICAgICAgICAgICAgICAgIHkgLSAyLFxuICAgICAgICAgICAgICAgIHggKyB3aWR0aCArIDIsXG4gICAgICAgICAgICAgICAgeSArIGhlaWdodCArIDIsXG4gICAgICAgICAgICAgICAgeyBzdHJva2U6IFBSSU1BUllfQ09MT1IsIHN0cm9rZVdpZHRoOiAyLCBmaWxsOiAnJyB9LFxuICAgICAgICAgICAgICAgIHRydWVcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICAvLyDlvbHlk40gbWFzayDnp7vlhaXnp7vlh7rkuovku7ZcbiAgICAgICAgICAgIHNlbGVjdGVkU3Ryb2tlRy5zdHlsZS5wb2ludGVyRXZlbnRzID0gJ25vbmUnO1xuICAgICAgICAgICAgdGhpcy5nLmFwcGVuZENoaWxkKHNlbGVjdGVkU3Ryb2tlRyk7XG4gICAgICAgICAgICB0aGlzLmFjdGl2ZUcucHVzaChzZWxlY3RlZFN0cm9rZUcpO1xuICAgICAgICAgICAgaWYgKHRoaXMucmljaHRleHRDb21wb25lbnRSZWY/Lmluc3RhbmNlLnBsYWl0UmVhZG9ubHkgPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBzZWxlY3RlZEJhY2tncm91bmRHID0gZHJhd1JvdW5kUmVjdGFuZ2xlKFxuICAgICAgICAgICAgICAgICAgICB0aGlzLnJvdWdoU1ZHIGFzIFJvdWdoU1ZHLFxuICAgICAgICAgICAgICAgICAgICB4IC0gMixcbiAgICAgICAgICAgICAgICAgICAgeSAtIDIsXG4gICAgICAgICAgICAgICAgICAgIHggKyB3aWR0aCArIDIsXG4gICAgICAgICAgICAgICAgICAgIHkgKyBoZWlnaHQgKyAyLFxuICAgICAgICAgICAgICAgICAgICB7IHN0cm9rZTogUFJJTUFSWV9DT0xPUiwgZmlsbDogUFJJTUFSWV9DT0xPUiwgZmlsbFN0eWxlOiAnc29saWQnIH0sXG4gICAgICAgICAgICAgICAgICAgIHRydWVcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIHNlbGVjdGVkQmFja2dyb3VuZEcuc3R5bGUub3BhY2l0eSA9ICcwLjE1JztcbiAgICAgICAgICAgICAgICAvLyDlvbHlk43lj4zlh7vkuovku7ZcbiAgICAgICAgICAgICAgICBzZWxlY3RlZEJhY2tncm91bmRHLnN0eWxlLnBvaW50ZXJFdmVudHMgPSAnbm9uZSc7XG4gICAgICAgICAgICAgICAgdGhpcy5nLmFwcGVuZENoaWxkKHNlbGVjdGVkQmFja2dyb3VuZEcpO1xuICAgICAgICAgICAgICAgIHRoaXMuYWN0aXZlRy5wdXNoKHNlbGVjdGVkQmFja2dyb3VuZEcsIHNlbGVjdGVkU3Ryb2tlRyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBkZXN0cm95QWN0aXZlRygpIHtcbiAgICAgICAgdGhpcy5hY3RpdmVHLmZvckVhY2goZyA9PiBnLnJlbW92ZSgpKTtcbiAgICAgICAgdGhpcy5hY3RpdmVHID0gW107XG4gICAgfVxuXG4gICAgdXBkYXRlQWN0aXZlQ2xhc3MoKSB7XG4gICAgICAgIGlmICghdGhpcy5nKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWQpIHtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyMi5hZGRDbGFzcyh0aGlzLmcsICdhY3RpdmUnKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyMi5yZW1vdmVDbGFzcyh0aGlzLmcsICdhY3RpdmUnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGRyYXdSaWNodGV4dCgpIHtcbiAgICAgICAgY29uc3QgeyByaWNodGV4dEcsIHJpY2h0ZXh0Q29tcG9uZW50UmVmLCBmb3JlaWduT2JqZWN0IH0gPSBkcmF3VG9waWNCeU5vZGUodGhpcy5ib2FyZCwgdGhpcy5ub2RlLCB0aGlzLnZpZXdDb250YWluZXJSZWYpO1xuICAgICAgICB0aGlzLnJpY2h0ZXh0Q29tcG9uZW50UmVmID0gcmljaHRleHRDb21wb25lbnRSZWY7XG4gICAgICAgIHRoaXMucmljaHRleHRHID0gcmljaHRleHRHO1xuICAgICAgICB0aGlzLmZvcmVpZ25PYmplY3QgPSBmb3JlaWduT2JqZWN0O1xuICAgICAgICB0aGlzLnJlbmRlcjIuYWRkQ2xhc3MocmljaHRleHRHLCAncmljaHRleHQnKTtcbiAgICAgICAgdGhpcy5nLmFwcGVuZChyaWNodGV4dEcpO1xuICAgIH1cblxuICAgIGRyYXdFeHRlbmQoKSB7XG4gICAgICAgIHRoaXMuZGVzdHJveUV4dGVuZCgpO1xuICAgICAgICAvLyBjcmVhdGUgZXh0ZW5kXG4gICAgICAgIHRoaXMuZXh0ZW5kRyA9IGNyZWF0ZUcoKTtcbiAgICAgICAgY29uc3QgY29sbGFwc2VHID0gY3JlYXRlRygpO1xuICAgICAgICB0aGlzLmV4dGVuZEcuY2xhc3NMaXN0LmFkZCgnZXh0ZW5kJyk7XG4gICAgICAgIGNvbGxhcHNlRy5jbGFzc0xpc3QuYWRkKCdjb2xsYXBzZS1jb250YWluZXInKTtcbiAgICAgICAgdGhpcy5nLmFwcGVuZCh0aGlzLmV4dGVuZEcpO1xuICAgICAgICB0aGlzLmV4dGVuZEcuYXBwZW5kKGNvbGxhcHNlRyk7XG4gICAgICAgIGlmICh0aGlzLm5vZGUub3JpZ2luLmlzUm9vdCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8vIGludGVyYWN0aXZlXG4gICAgICAgIGZyb21FdmVudChjb2xsYXBzZUcsICdtb3VzZXVwJylcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIGZpbHRlcigoKSA9PiAhdGhpcy5oYW5kQWN0aXZlIHx8ICFQbGFpdEJvYXJkLmlzUmVhZG9ubHkodGhpcy5ib2FyZCkpLFxuICAgICAgICAgICAgICAgIHRha2UoMSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGlzQ29sbGFwc2VkID0gIXRoaXMubm9kZS5vcmlnaW4uaXNDb2xsYXBzZWQ7XG4gICAgICAgICAgICAgICAgY29uc3QgbmV3RWxlbWVudDogUGFydGlhbDxNaW5kRWxlbWVudD4gPSB7IGlzQ29sbGFwc2VkIH07XG4gICAgICAgICAgICAgICAgY29uc3QgcGF0aCA9IFBsYWl0Qm9hcmQuZmluZFBhdGgodGhpcy5ib2FyZCwgdGhpcy5lbGVtZW50KTtcbiAgICAgICAgICAgICAgICBUcmFuc2Zvcm1zLnNldE5vZGUodGhpcy5ib2FyZCwgbmV3RWxlbWVudCwgcGF0aCk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCB7IHgsIHksIHdpZHRoLCBoZWlnaHQgfSA9IGdldFJlY3RhbmdsZUJ5Tm9kZSh0aGlzLm5vZGUpO1xuICAgICAgICBjb25zdCBzdHJva2UgPSBnZXRCcmFuY2hDb2xvckJ5TWluZEVsZW1lbnQodGhpcy5ib2FyZCwgdGhpcy5lbGVtZW50KTtcbiAgICAgICAgY29uc3QgYnJhbmNoV2lkdGggPSBnZXRCcmFuY2hXaWR0aEJ5TWluZEVsZW1lbnQodGhpcy5ib2FyZCwgdGhpcy5lbGVtZW50KTtcbiAgICAgICAgY29uc3QgZXh0ZW5kWSA9IHkgKyBoZWlnaHQgLyAyO1xuICAgICAgICBjb25zdCBub2RlTGF5b3V0ID0gTWluZFF1ZXJpZXMuZ2V0Q29ycmVjdExheW91dEJ5RWxlbWVudCh0aGlzLmJvYXJkLCB0aGlzLmVsZW1lbnQpIGFzIE1pbmRMYXlvdXRUeXBlO1xuXG4gICAgICAgIGxldCBleHRlbmRMaW5lWFkgPSBbXG4gICAgICAgICAgICBbeCArIHdpZHRoLCBleHRlbmRZXSxcbiAgICAgICAgICAgIFt4ICsgd2lkdGggKyBFWFRFTkRfT0ZGU0VULCBleHRlbmRZXVxuICAgICAgICBdO1xuXG4gICAgICAgIGxldCBhcnJvd1lPZmZzZXQgPSBbLTQsIDEsIC0wLjYsIDRdO1xuICAgICAgICBsZXQgYXJyb3dYT2Zmc2V0ID0gWzEwLCA1LjUsIDUuNSwgMTBdO1xuXG4gICAgICAgIGxldCBleHRlbmRMaW5lWE9mZnNldCA9IFswLCAwXTtcbiAgICAgICAgbGV0IGV4dGVuZExpbmVZT2Zmc2V0ID0gWzAsIDBdO1xuXG4gICAgICAgIGxldCBjaXJjbGVPZmZzZXQgPSBbRVhURU5EX1JBRElVUyAvIDIsIDBdO1xuXG4gICAgICAgIGlmIChpc0hvcml6b250YWxMYXlvdXQobm9kZUxheW91dCkgJiYgIWlzSW5kZW50ZWRMYXlvdXQobm9kZUxheW91dCkpIHtcbiAgICAgICAgICAgIGV4dGVuZExpbmVZT2Zmc2V0ID1cbiAgICAgICAgICAgICAgICAoZ2V0U2hhcGVCeUVsZW1lbnQodGhpcy5ib2FyZCwgdGhpcy5ub2RlLm9yaWdpbikgYXMgTWluZEVsZW1lbnRTaGFwZSkgPT09IE1pbmRFbGVtZW50U2hhcGUucm91bmRSZWN0YW5nbGVcbiAgICAgICAgICAgICAgICAgICAgPyBbMCwgMF1cbiAgICAgICAgICAgICAgICAgICAgOiBbaGVpZ2h0IC8gMiwgaGVpZ2h0IC8gMl07XG4gICAgICAgICAgICBpZiAoaXNMZWZ0TGF5b3V0KG5vZGVMYXlvdXQpKSB7XG4gICAgICAgICAgICAgICAgLy/lt6ZcbiAgICAgICAgICAgICAgICBleHRlbmRMaW5lWE9mZnNldCA9IFstd2lkdGgsIC13aWR0aCAtIEVYVEVORF9PRkZTRVQgKiAyXTtcbiAgICAgICAgICAgICAgICBjaXJjbGVPZmZzZXQgPSBbLUVYVEVORF9SQURJVVMgLyAyLCAwXTtcbiAgICAgICAgICAgICAgICBhcnJvd1hPZmZzZXQgPSBbLTEwLCAtNS41LCAtNS41LCAtMTBdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYXJyb3dYT2Zmc2V0ID0gWy00LCAwLjYsIC0xLCA0XTtcbiAgICAgICAgICAgIGlmIChpc1RvcExheW91dChub2RlTGF5b3V0KSkge1xuICAgICAgICAgICAgICAgIC8v5LiKXG4gICAgICAgICAgICAgICAgZXh0ZW5kTGluZVhPZmZzZXQgPSBbLXdpZHRoIC8gMiwgLXdpZHRoIC8gMiAtIEVYVEVORF9PRkZTRVRdO1xuICAgICAgICAgICAgICAgIGV4dGVuZExpbmVZT2Zmc2V0ID0gWy1oZWlnaHQgLyAyLCAtaGVpZ2h0IC8gMiAtIEVYVEVORF9PRkZTRVRdO1xuICAgICAgICAgICAgICAgIGFycm93WU9mZnNldCA9IFstMTAsIC01LjUsIC01LjUsIC0xMF07XG4gICAgICAgICAgICAgICAgY2lyY2xlT2Zmc2V0ID0gWzAsIC1FWFRFTkRfUkFESVVTIC8gMl07XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8v5LiLXG4gICAgICAgICAgICAgICAgZXh0ZW5kTGluZVhPZmZzZXQgPSBbLXdpZHRoIC8gMiwgLXdpZHRoIC8gMiAtIEVYVEVORF9PRkZTRVRdO1xuICAgICAgICAgICAgICAgIGV4dGVuZExpbmVZT2Zmc2V0ID0gW2hlaWdodCAvIDIsIGhlaWdodCAvIDIgKyBFWFRFTkRfT0ZGU0VUXTtcbiAgICAgICAgICAgICAgICBhcnJvd1lPZmZzZXQgPSBbMTAsIDUuNSwgNS41LCAxMF07XG4gICAgICAgICAgICAgICAgY2lyY2xlT2Zmc2V0ID0gWzAsIEVYVEVORF9SQURJVVMgLyAyXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGV4dGVuZExpbmVYWSA9IFtcbiAgICAgICAgICAgIFtleHRlbmRMaW5lWFlbMF1bMF0gKyBleHRlbmRMaW5lWE9mZnNldFswXSwgZXh0ZW5kTGluZVhZWzBdWzFdICsgZXh0ZW5kTGluZVlPZmZzZXRbMF1dLFxuICAgICAgICAgICAgW2V4dGVuZExpbmVYWVsxXVswXSArIGV4dGVuZExpbmVYT2Zmc2V0WzFdLCBleHRlbmRMaW5lWFlbMV1bMV0gKyBleHRlbmRMaW5lWU9mZnNldFsxXV1cbiAgICAgICAgXTtcblxuICAgICAgICBjb25zdCBleHRlbmRMaW5lID0gdGhpcy5yb3VnaFNWRy5saW5lKGV4dGVuZExpbmVYWVswXVswXSwgZXh0ZW5kTGluZVhZWzBdWzFdLCBleHRlbmRMaW5lWFlbMV1bMF0sIGV4dGVuZExpbmVYWVsxXVsxXSwge1xuICAgICAgICAgICAgc3Ryb2tlV2lkdGg6IGJyYW5jaFdpZHRoLFxuICAgICAgICAgICAgc3Ryb2tlXG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8v57uY5Yi2566t5aS0XG4gICAgICAgIGNvbnN0IGhpZGVBcnJvd1RvcExpbmUgPSB0aGlzLnJvdWdoU1ZHLmxpbmUoXG4gICAgICAgICAgICBleHRlbmRMaW5lWFlbMV1bMF0gKyBhcnJvd1hPZmZzZXRbMF0sXG4gICAgICAgICAgICBleHRlbmRMaW5lWFlbMV1bMV0gKyBhcnJvd1lPZmZzZXRbMF0sXG4gICAgICAgICAgICBleHRlbmRMaW5lWFlbMV1bMF0gKyBhcnJvd1hPZmZzZXRbMV0sXG4gICAgICAgICAgICBleHRlbmRMaW5lWFlbMV1bMV0gKyBhcnJvd1lPZmZzZXRbMV0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgc3Ryb2tlLFxuICAgICAgICAgICAgICAgIHN0cm9rZVdpZHRoOiAyXG4gICAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IGhpZGVBcnJvd0JvdHRvbUxpbmUgPSB0aGlzLnJvdWdoU1ZHLmxpbmUoXG4gICAgICAgICAgICBleHRlbmRMaW5lWFlbMV1bMF0gKyBhcnJvd1hPZmZzZXRbMl0sXG4gICAgICAgICAgICBleHRlbmRMaW5lWFlbMV1bMV0gKyBhcnJvd1lPZmZzZXRbMl0sXG4gICAgICAgICAgICBleHRlbmRMaW5lWFlbMV1bMF0gKyBhcnJvd1hPZmZzZXRbM10sXG4gICAgICAgICAgICBleHRlbmRMaW5lWFlbMV1bMV0gKyBhcnJvd1lPZmZzZXRbM10sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgc3Ryb2tlLFxuICAgICAgICAgICAgICAgIHN0cm9rZVdpZHRoOiAyXG4gICAgICAgICAgICB9XG4gICAgICAgICk7XG5cbiAgICAgICAgaWYgKHRoaXMubm9kZS5vcmlnaW4uaXNDb2xsYXBzZWQpIHtcbiAgICAgICAgICAgIGNvbnN0IGJhZGdlID0gdGhpcy5yb3VnaFNWRy5jaXJjbGUoZXh0ZW5kTGluZVhZWzFdWzBdICsgY2lyY2xlT2Zmc2V0WzBdLCBleHRlbmRMaW5lWFlbMV1bMV0gKyBjaXJjbGVPZmZzZXRbMV0sIEVYVEVORF9SQURJVVMsIHtcbiAgICAgICAgICAgICAgICBmaWxsOiBzdHJva2UsXG4gICAgICAgICAgICAgICAgc3Ryb2tlLFxuICAgICAgICAgICAgICAgIGZpbGxTdHlsZTogJ3NvbGlkJ1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGxldCBudW1iZXJPZmZzZXQgPSAwO1xuICAgICAgICAgICAgaWYgKGdldENoaWxkcmVuQ291bnQodGhpcy5ub2RlLm9yaWdpbikgPj0gMTApIG51bWJlck9mZnNldCA9IC0yO1xuICAgICAgICAgICAgaWYgKGdldENoaWxkcmVuQ291bnQodGhpcy5ub2RlLm9yaWdpbikgPT09IDEpIG51bWJlck9mZnNldCA9IDE7XG5cbiAgICAgICAgICAgIGNvbnN0IGJhZGdlVGV4dCA9IGNyZWF0ZVRleHQoXG4gICAgICAgICAgICAgICAgZXh0ZW5kTGluZVhZWzFdWzBdICsgY2lyY2xlT2Zmc2V0WzBdIC0gNCArIG51bWJlck9mZnNldCxcbiAgICAgICAgICAgICAgICBleHRlbmRMaW5lWFlbMV1bMV0gKyBjaXJjbGVPZmZzZXRbMV0gKyA0LFxuICAgICAgICAgICAgICAgIHN0cm9rZSxcbiAgICAgICAgICAgICAgICBgJHtnZXRDaGlsZHJlbkNvdW50KHRoaXMubm9kZS5vcmlnaW4pfWBcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIHRoaXMuZy5jbGFzc0xpc3QuYWRkKCdjb2xsYXBzZWQnKTtcbiAgICAgICAgICAgIGJhZGdlLnNldEF0dHJpYnV0ZSgnc3R5bGUnLCAnb3BhY2l0eTogMC4xNScpO1xuICAgICAgICAgICAgYmFkZ2VUZXh0LnNldEF0dHJpYnV0ZSgnc3R5bGUnLCAnZm9udC1zaXplOiAxMnB4Jyk7XG4gICAgICAgICAgICBjb2xsYXBzZUcuYXBwZW5kQ2hpbGQoYmFkZ2UpO1xuICAgICAgICAgICAgY29sbGFwc2VHLmFwcGVuZENoaWxkKGJhZGdlVGV4dCk7XG4gICAgICAgICAgICBjb2xsYXBzZUcuYXBwZW5kQ2hpbGQoZXh0ZW5kTGluZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmcuY2xhc3NMaXN0LnJlbW92ZSgnY29sbGFwc2VkJyk7XG4gICAgICAgICAgICBpZiAodGhpcy5ub2RlLm9yaWdpbi5jaGlsZHJlbi5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaGlkZUNpcmNsZUcgPSB0aGlzLnJvdWdoU1ZHLmNpcmNsZShcbiAgICAgICAgICAgICAgICAgICAgZXh0ZW5kTGluZVhZWzFdWzBdICsgY2lyY2xlT2Zmc2V0WzBdLFxuICAgICAgICAgICAgICAgICAgICBleHRlbmRMaW5lWFlbMV1bMV0gKyBjaXJjbGVPZmZzZXRbMV0sXG4gICAgICAgICAgICAgICAgICAgIEVYVEVORF9SQURJVVMgLSAxLFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmaWxsOiAnI2ZmZicsXG4gICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UsXG4gICAgICAgICAgICAgICAgICAgICAgICBzdHJva2VXaWR0aDogYnJhbmNoV2lkdGgsXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWxsU3R5bGU6ICdzb2xpZCdcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgY29sbGFwc2VHLmFwcGVuZENoaWxkKGhpZGVDaXJjbGVHKTtcbiAgICAgICAgICAgICAgICBjb2xsYXBzZUcuYXBwZW5kQ2hpbGQoaGlkZUFycm93VG9wTGluZSk7XG4gICAgICAgICAgICAgICAgY29sbGFwc2VHLmFwcGVuZENoaWxkKGhpZGVBcnJvd0JvdHRvbUxpbmUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgZGVzdHJveUV4dGVuZCgpIHtcbiAgICAgICAgaWYgKHRoaXMuZXh0ZW5kRykge1xuICAgICAgICAgICAgdGhpcy5leHRlbmRHLnJlbW92ZSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZGVzdHJveVJpY2h0ZXh0KCkge1xuICAgICAgICBpZiAodGhpcy5yaWNodGV4dEcpIHtcbiAgICAgICAgICAgIHRoaXMucmljaHRleHRHLnJlbW92ZSgpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnJpY2h0ZXh0Q29tcG9uZW50UmVmKSB7XG4gICAgICAgICAgICB0aGlzLnJpY2h0ZXh0Q29tcG9uZW50UmVmLmRlc3Ryb3koKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHVwZGF0ZUFic3RyYWN0SW5jbHVkZWRPdXRsaW5lKGFjdGl2ZUhhbmRsZVBvc2l0aW9uPzogQWJzdHJhY3RIYW5kbGVQb3NpdGlvbiwgcmVzaXppbmdMb2NhdGlvbj86IG51bWJlcikge1xuICAgICAgICB0aGlzLmFic3RyYWN0SW5jbHVkZWRPdXRsaW5lRz8ucmVtb3ZlKCk7XG4gICAgICAgIHRoaXMuYWJzdHJhY3RJbmNsdWRlZE91dGxpbmVHID0gZHJhd0Fic3RyYWN0SW5jbHVkZWRPdXRsaW5lKFxuICAgICAgICAgICAgdGhpcy5ib2FyZCxcbiAgICAgICAgICAgIHRoaXMucm91Z2hTVkcsXG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQsXG4gICAgICAgICAgICBhY3RpdmVIYW5kbGVQb3NpdGlvbixcbiAgICAgICAgICAgIHJlc2l6aW5nTG9jYXRpb25cbiAgICAgICAgKTtcbiAgICAgICAgUGxhaXRCb2FyZC5nZXRIb3N0KHRoaXMuYm9hcmQpLmFwcGVuZCh0aGlzLmFic3RyYWN0SW5jbHVkZWRPdXRsaW5lRyk7XG4gICAgfVxuXG4gICAgdXBkYXRlUmljaHRleHQoKSB7XG4gICAgICAgIHVwZGF0ZVJpY2hUZXh0KHRoaXMubm9kZS5vcmlnaW4uZGF0YS50b3BpYywgdGhpcy5yaWNodGV4dENvbXBvbmVudFJlZiEpO1xuICAgICAgICB1cGRhdGVNaW5kTm9kZVRvcGljU2l6ZSh0aGlzLmJvYXJkLCB0aGlzLm5vZGUsIHRoaXMucmljaHRleHRHIGFzIFNWR0dFbGVtZW50LCB0aGlzLmlzRWRpdGFibGUpO1xuICAgIH1cblxuICAgIHN0YXJ0RWRpdFRleHQoaXNFbmQ6IGJvb2xlYW4sIGlzQ2xlYXI6IGJvb2xlYW4pIHtcbiAgICAgICAgaWYgKCF0aGlzLnJpY2h0ZXh0Q29tcG9uZW50UmVmKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3VuZGVmaW5lZCByaWNodGV4dENvbXBvbmVudFJlZicpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJpY2h0ZXh0SW5zdGFuY2UgPSB0aGlzLnJpY2h0ZXh0Q29tcG9uZW50UmVmLmluc3RhbmNlO1xuXG4gICAgICAgIHRoaXMuaXNFZGl0YWJsZSA9IHRydWU7XG4gICAgICAgIElTX1RFWFRfRURJVEFCTEUuc2V0KHRoaXMuYm9hcmQsIHRydWUpO1xuICAgICAgICB0aGlzLmRpc2FibGVkTWFza0coKTtcbiAgICAgICAgdXBkYXRlTWluZE5vZGVUb3BpY1NpemUodGhpcy5ib2FyZCwgdGhpcy5ub2RlLCB0aGlzLnJpY2h0ZXh0RyBhcyBTVkdHRWxlbWVudCwgdGhpcy5pc0VkaXRhYmxlKTtcbiAgICAgICAgaWYgKHJpY2h0ZXh0SW5zdGFuY2UucGxhaXRSZWFkb25seSkge1xuICAgICAgICAgICAgcmljaHRleHRJbnN0YW5jZS5wbGFpdFJlYWRvbmx5ID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLnJpY2h0ZXh0Q29tcG9uZW50UmVmLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgIHRoaXMuZHJhd0FjdGl2ZUcoKTtcbiAgICAgICAgICAgIGNvbnN0IGxvY2F0aW9uID0gaXNFbmQgPyBFZGl0b3IuZW5kKHJpY2h0ZXh0SW5zdGFuY2UuZWRpdG9yLCBbMF0pIDogWzBdO1xuICAgICAgICAgICAgc2V0RnVsbFNlbGVjdGlvbkFuZEZvY3VzKHJpY2h0ZXh0SW5zdGFuY2UuZWRpdG9yLCBsb2NhdGlvbik7XG4gICAgICAgICAgICBpZiAoaXNDbGVhcikge1xuICAgICAgICAgICAgICAgIEVkaXRvci5kZWxldGVCYWNrd2FyZChyaWNodGV4dEluc3RhbmNlLmVkaXRvcik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBoYW5kbGUgaW52YWxpZCB3aWR0aCBhbmQgaGVpZ2h0IChvbGQgZGF0YSlcbiAgICAgICAgICAgIGxldCB7IHdpZHRoLCBoZWlnaHQgfSA9IGdldFJpY2h0ZXh0Q29udGVudFNpemUocmljaHRleHRJbnN0YW5jZS5lZGl0YWJsZSk7XG4gICAgICAgICAgICBpZiAod2lkdGggIT09IHRoaXMuZWxlbWVudC53aWR0aCB8fCBoZWlnaHQgIT09IHRoaXMuZWxlbWVudC5oZWlnaHQpIHtcbiAgICAgICAgICAgICAgICBNaW5kVHJhbnNmb3Jtcy5zZXRUb3BpY1NpemUodGhpcy5ib2FyZCwgdGhpcy5lbGVtZW50LCB3aWR0aCwgaGVpZ2h0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBsZXQgcmljaHRleHQgPSByaWNodGV4dEluc3RhbmNlLnBsYWl0VmFsdWU7XG4gICAgICAgIC8vIHVzZSBkZWJvdW5jZVRpbWUgdG8gd2FpdCBET00gcmVuZGVyIGNvbXBsZXRlXG4gICAgICAgIGNvbnN0IHZhbHVlQ2hhbmdlJCA9IHJpY2h0ZXh0SW5zdGFuY2UucGxhaXRDaGFuZ2VcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIGRlYm91bmNlVGltZSgwKSxcbiAgICAgICAgICAgICAgICBmaWx0ZXIoZXZlbnQgPT4ge1xuICAgICAgICAgICAgICAgICAgICAvLyDov4fmu6Tmjokgb3BlcmF0aW9ucyDkuK3lhajmmK8gc2V0X3NlbGVjdGlvbiDnmoTmk43kvZxcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICFldmVudC5vcGVyYXRpb25zLmV2ZXJ5KG9wID0+IE9wZXJhdGlvbi5pc1NlbGVjdGlvbk9wZXJhdGlvbihvcCkpO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc3Vic2NyaWJlKGV2ZW50ID0+IHtcbiAgICAgICAgICAgICAgICBpZiAocmljaHRleHQgPT09IGV2ZW50LnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVSaWNodGV4dCgpO1xuICAgICAgICAgICAgICAgIC8vIOabtOaWsOWvjOaWh+acrOOAgeabtOaWsOWuvemrmFxuICAgICAgICAgICAgICAgIGxldCB7IHdpZHRoLCBoZWlnaHQgfSA9IGdldFJpY2h0ZXh0Q29udGVudFNpemUocmljaHRleHRJbnN0YW5jZS5lZGl0YWJsZSk7XG4gICAgICAgICAgICAgICAgTWluZFRyYW5zZm9ybXMuc2V0VG9waWModGhpcy5ib2FyZCwgdGhpcy5lbGVtZW50LCBldmVudC52YWx1ZSwgd2lkdGgsIGhlaWdodCk7XG4gICAgICAgICAgICAgICAgTUVSR0lORy5zZXQodGhpcy5ib2FyZCwgdHJ1ZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgY29tcG9zaXRpb24kID0gcmljaHRleHRJbnN0YW5jZS5wbGFpdENvbXBvc2l0aW9uLnBpcGUoZGVib3VuY2VUaW1lKDApKS5zdWJzY3JpYmUoZXZlbnQgPT4ge1xuICAgICAgICAgICAgbGV0IHsgd2lkdGgsIGhlaWdodCB9ID0gZ2V0UmljaHRleHRDb250ZW50U2l6ZShyaWNodGV4dEluc3RhbmNlLmVkaXRhYmxlKTtcbiAgICAgICAgICAgIGlmICh3aWR0aCA8IE5PREVfTUlOX1dJRFRIKSB7XG4gICAgICAgICAgICAgICAgd2lkdGggPSBOT0RFX01JTl9XSURUSDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChldmVudC5pc0NvbXBvc2luZyAmJiAod2lkdGggIT09IHRoaXMubm9kZS5vcmlnaW4ud2lkdGggfHwgaGVpZ2h0ICE9PSB0aGlzLm5vZGUub3JpZ2luLmhlaWdodCkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBuZXdFbGVtZW50OiBQYXJ0aWFsPE1pbmRFbGVtZW50PiA9IHtcbiAgICAgICAgICAgICAgICAgICAgd2lkdGg6IHdpZHRoIC8gdGhpcy5ib2FyZC52aWV3cG9ydC56b29tLFxuICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IGhlaWdodCAvIHRoaXMuYm9hcmQudmlld3BvcnQuem9vbVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgY29uc3QgcGF0aCA9IFBsYWl0Qm9hcmQuZmluZFBhdGgodGhpcy5ib2FyZCwgdGhpcy5lbGVtZW50KTtcbiAgICAgICAgICAgICAgICBUcmFuc2Zvcm1zLnNldE5vZGUodGhpcy5ib2FyZCwgbmV3RWxlbWVudCwgcGF0aCk7XG4gICAgICAgICAgICAgICAgTUVSR0lORy5zZXQodGhpcy5ib2FyZCwgdHJ1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBtb3VzZWRvd24kID0gZnJvbUV2ZW50PE1vdXNlRXZlbnQ+KGRvY3VtZW50LCAnbW91c2Vkb3duJykuc3Vic2NyaWJlKChldmVudDogTW91c2VFdmVudCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgcG9pbnQgPSB0cmFuc2Zvcm1Qb2ludCh0aGlzLmJvYXJkLCB0b1BvaW50KGV2ZW50LngsIGV2ZW50LnksIFBsYWl0Qm9hcmQuZ2V0SG9zdCh0aGlzLmJvYXJkKSkpO1xuICAgICAgICAgICAgY29uc3QgY2xpY2tJbk5vZGUgPSBpc0hpdE1pbmRFbGVtZW50KHRoaXMuYm9hcmQsIHBvaW50LCB0aGlzLmVsZW1lbnQpO1xuICAgICAgICAgICAgaWYgKGNsaWNrSW5Ob2RlICYmICFoYXNFZGl0YWJsZVRhcmdldChyaWNodGV4dEluc3RhbmNlLmVkaXRvciwgZXZlbnQudGFyZ2V0KSkge1xuICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKCFjbGlja0luTm9kZSkge1xuICAgICAgICAgICAgICAgIC8vIGhhbmRsZSBjb21wb3NpdGlvbiBpbnB1dCBzdGF0ZSwgbGlrZTogQ2hpbmVzZSBJTUUgQ29tcG9zaXRpb24gSW5wdXRcbiAgICAgICAgICAgICAgICB0aW1lcigwKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBleGl0SGFuZGxlKCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZW5hYmxlTWFza0coKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IGVkaXRvciA9IHJpY2h0ZXh0SW5zdGFuY2UuZWRpdG9yO1xuICAgICAgICBjb25zdCB7IGtleWRvd24gfSA9IGVkaXRvcjtcbiAgICAgICAgZWRpdG9yLmtleWRvd24gPSAoZXZlbnQ6IEtleWJvYXJkRXZlbnQpID0+IHtcbiAgICAgICAgICAgIGlmIChldmVudC5pc0NvbXBvc2luZykge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChldmVudC5rZXkgPT09ICdFc2NhcGUnKSB7XG4gICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgICAgICBleGl0SGFuZGxlKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5kcmF3QWN0aXZlRygpO1xuICAgICAgICAgICAgICAgIHRoaXMuZW5hYmxlTWFza0coKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZXZlbnQua2V5ID09PSAnRW50ZXInICYmICFldmVudC5zaGlmdEtleSkge1xuICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgICAgICAgZXhpdEhhbmRsZSgpO1xuICAgICAgICAgICAgICAgIHRoaXMuZHJhd0FjdGl2ZUcoKTtcbiAgICAgICAgICAgICAgICB0aGlzLmVuYWJsZU1hc2tHKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGV2ZW50LmtleSA9PT0gJ1RhYicpIHtcbiAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgICAgIGV4aXRIYW5kbGUoKTtcbiAgICAgICAgICAgICAgICB0aGlzLmRyYXdBY3RpdmVHKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5kcmF3TWFza0coKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgZXhpdEhhbmRsZSA9ICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMubmdab25lLnJ1bigoKSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gdW5zdWJzY3JpYmVcbiAgICAgICAgICAgICAgICB2YWx1ZUNoYW5nZSQudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgICAgICBjb21wb3NpdGlvbiQudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgICAgICBtb3VzZWRvd24kLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICAgICAgZWRpdG9yLmtleWRvd24gPSBrZXlkb3duOyAvLyByZXNldCBrZXlkb3duXG4gICAgICAgICAgICAgICAgLy8gZWRpdGFibGUgc3RhdHVzXG4gICAgICAgICAgICAgICAgTUVSR0lORy5zZXQodGhpcy5ib2FyZCwgZmFsc2UpO1xuICAgICAgICAgICAgICAgIHJpY2h0ZXh0SW5zdGFuY2UucGxhaXRSZWFkb25seSA9IHRydWU7XG4gICAgICAgICAgICAgICAgdGhpcy5yaWNodGV4dENvbXBvbmVudFJlZj8uY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5pc0VkaXRhYmxlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdXBkYXRlTWluZE5vZGVUb3BpY1NpemUodGhpcy5ib2FyZCwgdGhpcy5ub2RlLCB0aGlzLnJpY2h0ZXh0RyBhcyBTVkdHRWxlbWVudCwgdGhpcy5pc0VkaXRhYmxlKTtcbiAgICAgICAgICAgICAgICBJU19URVhUX0VESVRBQkxFLnNldCh0aGlzLmJvYXJkLCBmYWxzZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICB0cmFja0J5ID0gKGluZGV4OiBudW1iZXIsIG5vZGU6IE1pbmROb2RlKSA9PiB7XG4gICAgICAgIHJldHVybiBub2RlLm9yaWdpbi5pZDtcbiAgICB9O1xuXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHN1cGVyLm5nT25EZXN0cm95KCk7XG4gICAgICAgIHRoaXMuYWJzdHJhY3RJbmNsdWRlZE91dGxpbmVHPy5yZW1vdmUoKTtcbiAgICAgICAgdGhpcy5kZXN0cm95UmljaHRleHQoKTtcbiAgICAgICAgdGhpcy5lbW9qaXNEcmF3ZXIuZGVzdHJveSgpO1xuICAgICAgICB0aGlzLmRlc3Ryb3kkLm5leHQoKTtcbiAgICAgICAgdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpO1xuICAgICAgICBpZiAoRUxFTUVOVF9UT19OT0RFLmdldCh0aGlzLmVsZW1lbnQpID09PSB0aGlzLm5vZGUpIHtcbiAgICAgICAgICAgIEVMRU1FTlRfVE9fTk9ERS5kZWxldGUodGhpcy5lbGVtZW50KTtcbiAgICAgICAgfVxuICAgIH1cbn1cbiJdfQ==