@plait/core 0.0.58 → 0.1.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 (59) hide show
  1. package/board/board.component.d.ts +7 -8
  2. package/board/board.component.interface.d.ts +4 -1
  3. package/constants/index.d.ts +1 -0
  4. package/core/element/context.d.ts +0 -1
  5. package/core/element/element.component.d.ts +1 -2
  6. package/core/element/plugin-element.d.ts +0 -1
  7. package/core/toolbar/toolbar.component.d.ts +1 -1
  8. package/esm2020/board/board.component.interface.mjs +1 -1
  9. package/esm2020/board/board.component.mjs +58 -42
  10. package/esm2020/constants/index.mjs +2 -1
  11. package/esm2020/core/element/context.mjs +1 -1
  12. package/esm2020/core/element/element.component.mjs +4 -6
  13. package/esm2020/core/element/plugin-element.mjs +10 -4
  14. package/esm2020/core/toolbar/toolbar.component.mjs +6 -6
  15. package/esm2020/interfaces/board.mjs +26 -2
  16. package/esm2020/interfaces/element.mjs +7 -2
  17. package/esm2020/interfaces/index.mjs +2 -2
  18. package/esm2020/interfaces/point.mjs +1 -1
  19. package/esm2020/interfaces/rectangle-client.mjs +25 -0
  20. package/esm2020/interfaces/selection.mjs +13 -2
  21. package/esm2020/plugins/create-board.mjs +9 -6
  22. package/esm2020/plugins/with-hand.mjs +9 -14
  23. package/esm2020/plugins/with-selection.mjs +59 -24
  24. package/esm2020/transforms/board.mjs +3 -3
  25. package/esm2020/transforms/general.mjs +2 -3
  26. package/esm2020/utils/board.mjs +4 -3
  27. package/esm2020/utils/draw/arrow.mjs +23 -0
  28. package/esm2020/utils/draw/rectangle.mjs +31 -0
  29. package/esm2020/utils/element.mjs +36 -0
  30. package/esm2020/utils/index.mjs +6 -2
  31. package/esm2020/utils/math.mjs +7 -1
  32. package/esm2020/utils/matrix.mjs +9 -9
  33. package/esm2020/utils/selected-element.mjs +35 -0
  34. package/esm2020/utils/tree.mjs +7 -0
  35. package/esm2020/utils/weak-maps.mjs +7 -3
  36. package/fesm2015/plait-core.mjs +362 -121
  37. package/fesm2015/plait-core.mjs.map +1 -1
  38. package/fesm2020/plait-core.mjs +361 -119
  39. package/fesm2020/plait-core.mjs.map +1 -1
  40. package/interfaces/board.d.ts +21 -5
  41. package/interfaces/element.d.ts +4 -0
  42. package/interfaces/index.d.ts +1 -1
  43. package/interfaces/point.d.ts +4 -0
  44. package/interfaces/rectangle-client.d.ts +16 -0
  45. package/interfaces/selection.d.ts +9 -1
  46. package/package.json +1 -1
  47. package/plugins/create-board.d.ts +1 -1
  48. package/utils/draw/arrow.d.ts +8 -0
  49. package/utils/draw/rectangle.d.ts +14 -0
  50. package/utils/element.d.ts +3 -0
  51. package/utils/index.d.ts +5 -1
  52. package/utils/math.d.ts +2 -0
  53. package/utils/selected-element.d.ts +8 -0
  54. package/utils/tree.d.ts +4 -0
  55. package/utils/weak-maps.d.ts +8 -2
  56. package/esm2020/interfaces/graph.mjs +0 -2
  57. package/esm2020/utils/graph.mjs +0 -11
  58. package/interfaces/graph.d.ts +0 -6
  59. package/utils/graph.d.ts +0 -3
@@ -6,7 +6,7 @@ import { PlaitElement } from '../interfaces/element';
6
6
  import { PlaitPlugin } from '../interfaces/plugin';
7
7
  import { Viewport } from '../interfaces/viewport';
8
8
  import { BoardComponentInterface } from './board.component.interface';
9
- import { RectangleClient } from '../interfaces/graph';
9
+ import { RectangleClient } from '../interfaces/rectangle-client';
10
10
  import * as i0 from "@angular/core";
11
11
  export declare class PlaitBoardComponent implements BoardComponentInterface, OnInit, OnChanges, AfterViewInit, OnDestroy {
12
12
  cdr: ChangeDetectorRef;
@@ -15,9 +15,8 @@ export declare class PlaitBoardComponent implements BoardComponentInterface, OnI
15
15
  hasInitialized: boolean;
16
16
  board: PlaitBoard;
17
17
  roughSVG: RoughSVG;
18
- destroy$: Subject<any>;
18
+ destroy$: Subject<void>;
19
19
  viewportState: PlaitBoardViewport;
20
- isMoving: boolean;
21
20
  private resizeObserver;
22
21
  plaitValue: PlaitElement[];
23
22
  plaitViewport: Viewport;
@@ -25,22 +24,23 @@ export declare class PlaitBoardComponent implements BoardComponentInterface, OnI
25
24
  plaitOptions: PlaitBoardOptions;
26
25
  plaitChange: EventEmitter<PlaitBoardChangeEvent>;
27
26
  plaitBoardInitialized: EventEmitter<PlaitBoard>;
28
- get host(): SVGElement;
29
27
  get isFocused(): import("@plait/core").Selection | null;
28
+ get host(): SVGSVGElement;
30
29
  get hostClass(): string;
31
30
  get readonly(): boolean;
32
- get moving(): boolean;
33
31
  get focused(): import("@plait/core").Selection | null;
32
+ get nativeElement(): HTMLElement;
34
33
  svg: ElementRef;
35
34
  toolbarTemplateRef: TemplateRef<any>;
36
35
  viewportContainer: ElementRef;
37
- constructor(cdr: ChangeDetectorRef, renderer2: Renderer2, elementRef: ElementRef);
36
+ constructor(cdr: ChangeDetectorRef, renderer2: Renderer2, elementRef: ElementRef<HTMLElement>);
38
37
  ngOnInit(): void;
39
38
  ngOnChanges(changes: SimpleChanges): void;
40
39
  ngAfterViewInit(): void;
41
40
  private initializePlugins;
42
41
  private initializeEvents;
43
- resizeElement(): void;
42
+ private viewportScrollListener;
43
+ private elementResizeListener;
44
44
  private updateViewportState;
45
45
  initViewportContainer(): void;
46
46
  initViewport(viewport?: import("../interfaces/viewport").BaseViewport): void;
@@ -57,7 +57,6 @@ export declare class PlaitBoardComponent implements BoardComponentInterface, OnI
57
57
  zoomInHandle(): void;
58
58
  zoomOutHandle(): void;
59
59
  resetZoomHandel(): void;
60
- movingChange(isMoving: boolean): void;
61
60
  ngOnDestroy(): void;
62
61
  markForCheck(): void;
63
62
  scrollToRectangle(client: RectangleClient): void;
@@ -1,5 +1,8 @@
1
- import { RectangleClient } from "../interfaces/graph";
1
+ import { ChangeDetectorRef } from '@angular/core';
2
+ import { RectangleClient } from '../interfaces/rectangle-client';
2
3
  export interface BoardComponentInterface {
3
4
  markForCheck: () => void;
4
5
  scrollToRectangle: (client: RectangleClient) => void;
6
+ cdr: ChangeDetectorRef;
7
+ nativeElement: HTMLElement;
5
8
  }
@@ -1,2 +1,3 @@
1
1
  export declare const CLIP_BOARD_FORMAT_KEY = "x-plait-fragment";
2
2
  export declare const SCROLL_BAR_WIDTH = 20;
3
+ export declare const MAX_RADIUS = 16;
@@ -3,5 +3,4 @@ export interface PlaitPluginElementContext<T extends PlaitElement = PlaitElement
3
3
  element: T;
4
4
  selection: Selection | null;
5
5
  board: PlaitBoard;
6
- host: SVGElement;
7
6
  }
@@ -18,7 +18,6 @@ export declare class PlaitElementComponent implements OnInit, OnChanges, OnDestr
18
18
  board: PlaitBoard;
19
19
  viewport: Viewport;
20
20
  selection: Selection | null;
21
- host: SVGElement;
22
21
  constructor(renderer2: Renderer2, viewContainerRef: ViewContainerRef);
23
22
  ngOnInit(): void;
24
23
  initialize(): void;
@@ -30,5 +29,5 @@ export declare class PlaitElementComponent implements OnInit, OnChanges, OnDestr
30
29
  };
31
30
  ngOnDestroy(): void;
32
31
  static ɵfac: i0.ɵɵFactoryDeclaration<PlaitElementComponent, never>;
33
- static ɵcmp: i0.ɵɵComponentDeclaration<PlaitElementComponent, "plait-element", never, { "index": "index"; "element": "element"; "board": "board"; "viewport": "viewport"; "selection": "selection"; "host": "host"; }, {}, never, never>;
32
+ static ɵcmp: i0.ɵɵComponentDeclaration<PlaitElementComponent, "plait-element", never, { "index": "index"; "element": "element"; "board": "board"; "viewport": "viewport"; "selection": "selection"; }, {}, never, never>;
34
33
  }
@@ -11,7 +11,6 @@ export declare abstract class PlaitPluginElementComponent<T extends PlaitElement
11
11
  get element(): T;
12
12
  get selection(): import("../../interfaces").Selection | null;
13
13
  get board(): import("../../interfaces").PlaitBoard;
14
- get host(): SVGElement;
15
14
  constructor(cdr: ChangeDetectorRef);
16
15
  onContextChange(): void;
17
16
  ngOnInit(): void;
@@ -6,7 +6,7 @@ export declare class PlaitToolbarComponent {
6
6
  hostClass: string;
7
7
  board: PlaitBoard;
8
8
  get zoom(): number;
9
- get pointerType(): PlaitPointerType;
9
+ get isHand(): boolean;
10
10
  adaptHandle: EventEmitter<any>;
11
11
  zoomInHandle: EventEmitter<any>;
12
12
  zoomOutHandle: EventEmitter<any>;
@@ -1,2 +1,2 @@
1
1
  export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm9hcmQuY29tcG9uZW50LmludGVyZmFjZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL3BsYWl0L3NyYy9ib2FyZC9ib2FyZC5jb21wb25lbnQuaW50ZXJmYWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBSZWN0YW5nbGVDbGllbnQgfSBmcm9tIFwiLi4vaW50ZXJmYWNlcy9ncmFwaFwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIEJvYXJkQ29tcG9uZW50SW50ZXJmYWNlIHtcbiAgICBtYXJrRm9yQ2hlY2s6ICgpID0+IHZvaWQ7XG4gICAgc2Nyb2xsVG9SZWN0YW5nbGU6IChjbGllbnQ6IFJlY3RhbmdsZUNsaWVudCkgPT4gdm9pZDtcbn1cbiJdfQ==
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm9hcmQuY29tcG9uZW50LmludGVyZmFjZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL3BsYWl0L3NyYy9ib2FyZC9ib2FyZC5jb21wb25lbnQuaW50ZXJmYWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3RvclJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgUmVjdGFuZ2xlQ2xpZW50IH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9yZWN0YW5nbGUtY2xpZW50JztcblxuZXhwb3J0IGludGVyZmFjZSBCb2FyZENvbXBvbmVudEludGVyZmFjZSB7XG4gICAgbWFya0ZvckNoZWNrOiAoKSA9PiB2b2lkO1xuICAgIHNjcm9sbFRvUmVjdGFuZ2xlOiAoY2xpZW50OiBSZWN0YW5nbGVDbGllbnQpID0+IHZvaWQ7XG4gICAgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZjtcbiAgICBuYXRpdmVFbGVtZW50OiBIVE1MRWxlbWVudDtcbn1cbiJdfQ==
@@ -9,13 +9,13 @@ import { withHistory } from '../plugins/with-history';
9
9
  import { withHandPointer } from '../plugins/with-hand';
10
10
  import { withSelection } from '../plugins/with-selection';
11
11
  import { Transforms } from '../transforms';
12
- import { getRootGroupBBox, clampZoomLevel, convertToViewportCoordinates, getViewportContainerBox, invertViewportCoordinates, transformMat3, getBoardClientBox } from '../utils';
13
- import { BOARD_TO_ON_CHANGE, HOST_TO_ROUGH_SVG, IS_TEXT_EDITABLE, PLAIT_BOARD_TO_COMPONENT } from '../utils/weak-maps';
14
- import { PlaitPointerType } from '../interfaces/pointer';
12
+ import { getRootGroupBBox, clampZoomLevel, convertToViewportCoordinates, getViewportContainerBox, invertViewportCoordinates, transformMat3, getBoardClientBox, toPoint, transformPoint, distanceBetweenPointAndRectangle } from '../utils';
13
+ import { BOARD_TO_ON_CHANGE, IS_TEXT_EDITABLE, BOARD_TO_COMPONENT, BOARD_TO_ELEMENT_HOST, BOARD_TO_HOST, BOARD_TO_ROUGH_SVG, BOARD_TO_MOVING_POINT } from '../utils/weak-maps';
15
14
  import * as i0 from "@angular/core";
16
15
  import * as i1 from "../core/element/element.component";
17
16
  import * as i2 from "../core/toolbar/toolbar.component";
18
17
  import * as i3 from "@angular/common";
18
+ const ElementHostClass = 'element-host';
19
19
  export class PlaitBoardComponent {
20
20
  constructor(cdr, renderer2, elementRef) {
21
21
  this.cdr = cdr;
@@ -27,7 +27,6 @@ export class PlaitBoardComponent {
27
27
  zoom: 1,
28
28
  autoFitPadding: 8
29
29
  };
30
- this.isMoving = false;
31
30
  this.plaitValue = [];
32
31
  this.plaitPlugins = [];
33
32
  this.plaitChange = new EventEmitter();
@@ -36,32 +35,37 @@ export class PlaitBoardComponent {
36
35
  return index;
37
36
  };
38
37
  }
39
- get host() {
40
- return this.svg.nativeElement;
41
- }
42
38
  get isFocused() {
43
39
  return this.board?.selection;
44
40
  }
41
+ get host() {
42
+ return this.svg.nativeElement;
43
+ }
45
44
  get hostClass() {
46
45
  return `plait-board-container ${this.board.pointer}`;
47
46
  }
48
47
  get readonly() {
49
48
  return this.board.options.readonly;
50
49
  }
51
- get moving() {
52
- return this.board.pointer === PlaitPointerType.hand && this.isMoving;
53
- }
54
50
  get focused() {
55
51
  return this.isFocused;
56
52
  }
53
+ get nativeElement() {
54
+ return this.elementRef.nativeElement;
55
+ }
57
56
  ngOnInit() {
57
+ const elementHost = this.host.querySelector(`.${ElementHostClass}`);
58
58
  const roughSVG = rough.svg(this.host, {
59
59
  options: { roughness: 0, strokeWidth: 1 }
60
60
  });
61
- HOST_TO_ROUGH_SVG.set(this.host, roughSVG);
62
61
  this.initializePlugins();
63
62
  this.initializeEvents();
64
- PLAIT_BOARD_TO_COMPONENT.set(this.board, this);
63
+ this.viewportScrollListener();
64
+ this.elementResizeListener();
65
+ BOARD_TO_COMPONENT.set(this.board, this);
66
+ BOARD_TO_ROUGH_SVG.set(this.board, roughSVG);
67
+ BOARD_TO_HOST.set(this.board, this.host);
68
+ BOARD_TO_ELEMENT_HOST.set(this.board, elementHost);
65
69
  BOARD_TO_ON_CHANGE.set(this.board, () => {
66
70
  this.cdr.detectChanges();
67
71
  const changeEvent = {
@@ -93,7 +97,7 @@ export class PlaitBoardComponent {
93
97
  this.initViewport();
94
98
  }
95
99
  initializePlugins() {
96
- let board = withHandPointer(withHistory(withSelection(withBoard(createBoard(this.host, this.plaitValue, this.plaitOptions)))));
100
+ let board = withHandPointer(withHistory(withSelection(withBoard(createBoard(this.plaitValue, this.plaitOptions)))));
97
101
  this.plaitPlugins.forEach(plugin => {
98
102
  board = plugin(board);
99
103
  });
@@ -116,6 +120,17 @@ export class PlaitBoardComponent {
116
120
  .subscribe((event) => {
117
121
  this.board.mousemove(event);
118
122
  });
123
+ fromEvent(document, 'mousemove')
124
+ .pipe(takeUntil(this.destroy$))
125
+ .subscribe((event) => {
126
+ BOARD_TO_MOVING_POINT.set(this.board, [event.x, event.y]);
127
+ this.board.globalMousemove(event);
128
+ });
129
+ fromEvent(this.host, 'mouseup')
130
+ .pipe(takeUntil(this.destroy$))
131
+ .subscribe((event) => {
132
+ this.board.mouseup(event);
133
+ });
119
134
  fromEvent(document, 'mouseup')
120
135
  .pipe(takeUntil(this.destroy$))
121
136
  .subscribe((event) => {
@@ -150,10 +165,15 @@ export class PlaitBoardComponent {
150
165
  });
151
166
  fromEvent(document, 'paste')
152
167
  .pipe(takeUntil(this.destroy$), filter(() => {
153
- return !IS_TEXT_EDITABLE.get(this.board) && !!this.board.selection;
168
+ return !IS_TEXT_EDITABLE.get(this.board) && !!this.board.selection && !this.readonly;
154
169
  }))
155
- .subscribe((event) => {
156
- this.board?.insertFragment(event.clipboardData);
170
+ .subscribe((clipboardEvent) => {
171
+ const mousePoint = BOARD_TO_MOVING_POINT.get(this.board);
172
+ const rect = this.nativeElement.getBoundingClientRect();
173
+ if (mousePoint && distanceBetweenPointAndRectangle(mousePoint[0], mousePoint[1], rect) === 0) {
174
+ const targetPoint = transformPoint(this.board, toPoint(mousePoint[0], mousePoint[1], this.host));
175
+ this.board.insertFragment(clipboardEvent.clipboardData, targetPoint);
176
+ }
157
177
  });
158
178
  fromEvent(document, 'cut')
159
179
  .pipe(takeUntil(this.destroy$), filter(() => {
@@ -164,6 +184,8 @@ export class PlaitBoardComponent {
164
184
  this.board?.setFragment(event.clipboardData);
165
185
  this.board?.deleteFragment(event.clipboardData);
166
186
  });
187
+ }
188
+ viewportScrollListener() {
167
189
  fromEvent(this.viewportContainer.nativeElement, 'scroll')
168
190
  .pipe(takeUntil(this.destroy$), filter(() => {
169
191
  return !!this.isFocused;
@@ -178,19 +200,16 @@ export class PlaitBoardComponent {
178
200
  this.setViewport();
179
201
  }
180
202
  });
181
- this.resizeElement();
182
- }
183
- resizeElement() {
184
- this.resizeObserver = new ResizeObserver(entries => {
185
- for (let entry of entries) {
186
- this.initViewportContainer();
187
- this.calcViewBox(this.board.viewport.zoom);
188
- this.updateViewBoxStyles();
189
- this.updateViewportScrolling();
190
- this.setViewport();
191
- }
203
+ }
204
+ elementResizeListener() {
205
+ this.resizeObserver = new ResizeObserver(() => {
206
+ this.initViewportContainer();
207
+ this.calcViewBox(this.board.viewport.zoom);
208
+ this.updateViewBoxStyles();
209
+ this.updateViewportScrolling();
210
+ this.setViewport();
192
211
  });
193
- this.resizeObserver.observe(this.elementRef.nativeElement);
212
+ this.resizeObserver.observe(this.nativeElement);
194
213
  }
195
214
  updateViewportState(state) {
196
215
  this.viewportState = {
@@ -364,16 +383,18 @@ export class PlaitBoardComponent {
364
383
  this.updateViewportScrolling();
365
384
  this.setViewport();
366
385
  }
367
- movingChange(isMoving) {
368
- this.isMoving = isMoving;
369
- }
370
386
  ngOnDestroy() {
371
387
  this.destroy$.next();
372
388
  this.destroy$.complete();
373
- HOST_TO_ROUGH_SVG.delete(this.host);
374
389
  if (this.resizeObserver) {
375
390
  this.resizeObserver.disconnect();
376
391
  }
392
+ BOARD_TO_ROUGH_SVG.delete(this.board);
393
+ BOARD_TO_COMPONENT.delete(this.board);
394
+ BOARD_TO_ROUGH_SVG.delete(this.board);
395
+ BOARD_TO_HOST.delete(this.board);
396
+ BOARD_TO_ELEMENT_HOST.delete(this.board);
397
+ BOARD_TO_ON_CHANGE.delete(this.board);
377
398
  }
378
399
  markForCheck() {
379
400
  this.cdr.markForCheck();
@@ -411,16 +432,15 @@ export class PlaitBoardComponent {
411
432
  }
412
433
  }
413
434
  PlaitBoardComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: PlaitBoardComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i0.Renderer2 }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
414
- PlaitBoardComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.11", type: PlaitBoardComponent, selector: "plait-board", inputs: { plaitValue: "plaitValue", plaitViewport: "plaitViewport", plaitPlugins: "plaitPlugins", plaitOptions: "plaitOptions" }, outputs: { plaitChange: "plaitChange", plaitBoardInitialized: "plaitBoardInitialized" }, host: { properties: { "class": "this.hostClass", "class.readonly": "this.readonly", "class.moving": "this.moving", "class.focused": "this.focused" } }, queries: [{ propertyName: "toolbarTemplateRef", first: true, predicate: ["plaitToolbar"], descendants: true }], viewQueries: [{ propertyName: "svg", first: true, predicate: ["svg"], descendants: true, static: true }, { propertyName: "viewportContainer", first: true, predicate: ["viewportContainer"], descendants: true, read: ElementRef, static: true }], usesOnChanges: true, ngImport: i0, template: `
435
+ PlaitBoardComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.11", type: PlaitBoardComponent, selector: "plait-board", inputs: { plaitValue: "plaitValue", plaitViewport: "plaitViewport", plaitPlugins: "plaitPlugins", plaitOptions: "plaitOptions" }, outputs: { plaitChange: "plaitChange", plaitBoardInitialized: "plaitBoardInitialized" }, host: { properties: { "class": "this.hostClass", "class.readonly": "this.readonly", "class.focused": "this.focused" } }, queries: [{ propertyName: "toolbarTemplateRef", first: true, predicate: ["plaitToolbar"], descendants: true }], viewQueries: [{ propertyName: "svg", first: true, predicate: ["svg"], descendants: true, static: true }, { propertyName: "viewportContainer", first: true, predicate: ["viewportContainer"], descendants: true, read: ElementRef, static: true }], usesOnChanges: true, ngImport: i0, template: `
415
436
  <div class="viewport-container" #viewportContainer>
416
- <svg #svg width="100%" height="100%" style="position: relative;"></svg>
437
+ <svg #svg width="100%" height="100%" style="position: relative;"><g class="element-host"></g></svg>
417
438
  <plait-element
418
439
  *ngFor="let item of board.children; let index = index; trackBy: trackBy"
419
440
  [index]="index"
420
441
  [element]="item"
421
442
  [board]="board"
422
443
  [selection]="board.selection"
423
- [host]="host"
424
444
  ></plait-element>
425
445
  </div>
426
446
  <plait-toolbar
@@ -432,21 +452,20 @@ PlaitBoardComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", ve
432
452
  (resetZoomHandel)="resetZoomHandel()"
433
453
  ></plait-toolbar>
434
454
  <ng-content></ng-content>
435
- `, isInline: true, components: [{ type: i1.PlaitElementComponent, selector: "plait-element", inputs: ["index", "element", "board", "viewport", "selection", "host"] }, { type: i2.PlaitToolbarComponent, selector: "plait-toolbar", inputs: ["board"], outputs: ["adaptHandle", "zoomInHandle", "zoomOutHandle", "resetZoomHandel"] }], directives: [{ type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
455
+ `, isInline: true, components: [{ type: i1.PlaitElementComponent, selector: "plait-element", inputs: ["index", "element", "board", "viewport", "selection"] }, { type: i2.PlaitToolbarComponent, selector: "plait-toolbar", inputs: ["board"], outputs: ["adaptHandle", "zoomInHandle", "zoomOutHandle", "resetZoomHandel"] }], directives: [{ type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
436
456
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: PlaitBoardComponent, decorators: [{
437
457
  type: Component,
438
458
  args: [{
439
459
  selector: 'plait-board',
440
460
  template: `
441
461
  <div class="viewport-container" #viewportContainer>
442
- <svg #svg width="100%" height="100%" style="position: relative;"></svg>
462
+ <svg #svg width="100%" height="100%" style="position: relative;"><g class="element-host"></g></svg>
443
463
  <plait-element
444
464
  *ngFor="let item of board.children; let index = index; trackBy: trackBy"
445
465
  [index]="index"
446
466
  [element]="item"
447
467
  [board]="board"
448
468
  [selection]="board.selection"
449
- [host]="host"
450
469
  ></plait-element>
451
470
  </div>
452
471
  <plait-toolbar
@@ -479,9 +498,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImpo
479
498
  }], readonly: [{
480
499
  type: HostBinding,
481
500
  args: ['class.readonly']
482
- }], moving: [{
483
- type: HostBinding,
484
- args: ['class.moving']
485
501
  }], focused: [{
486
502
  type: HostBinding,
487
503
  args: ['class.focused']
@@ -495,4 +511,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImpo
495
511
  type: ViewChild,
496
512
  args: ['viewportContainer', { read: ElementRef, static: true }]
497
513
  }] } });
498
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm9hcmQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcGFja2FnZXMvcGxhaXQvc3JjL2JvYXJkL2JvYXJkLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUgsdUJBQXVCLEVBRXZCLFNBQVMsRUFDVCxZQUFZLEVBQ1osVUFBVSxFQUNWLFlBQVksRUFDWixXQUFXLEVBQ1gsS0FBSyxFQUlMLE1BQU0sRUFJTixTQUFTLEVBQ1osTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxLQUFLLE1BQU0sbUJBQW1CLENBQUM7QUFFdEMsT0FBTyxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDMUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNuRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFLaEQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3RELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUNsRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDdEQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFDSCxnQkFBZ0IsRUFDaEIsY0FBYyxFQUNkLDRCQUE0QixFQUM1Qix1QkFBdUIsRUFDdkIseUJBQXlCLEVBQ3pCLGFBQWEsRUFDYixpQkFBaUIsRUFDcEIsTUFBTSxVQUFVLENBQUM7QUFDbEIsT0FBTyxFQUFFLGtCQUFrQixFQUFFLGlCQUFpQixFQUFFLGdCQUFnQixFQUFFLHdCQUF3QixFQUFFLE1BQU0sb0JBQW9C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Q0FBQyxLQUFpQixFQUFFLEVBQUU7WUFDN0IsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDL0IsQ0FBQyxDQUFDLENBQUM7UUFFUCxTQUFTLENBQWdCLFFBQVEsRUFBRSxTQUFTLENBQUM7YUFDeEMsSUFBSSxDQUNELFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQ3hCLE1BQU0sQ0FBQyxHQUFHLEVBQUU7WUFDUixPQUFPLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUM7UUFDdkUsQ0FBQyxDQUFDLENBQ0w7YUFDQSxTQUFTLENBQUMsQ0FBQyxLQUFvQixFQUFFLEVBQUU7WUFDaEMsSUFBSSxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDL0IsQ0FBQyxDQUFDLENBQUM7UUFFUCxTQUFTLENBQWdCLFFBQVEsRUFBRSxPQUFPLENBQUM7YUFDdEMsSUFBSSxDQUNELFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQ3hCLE1BQU0sQ0FBQyxHQUFHLEVBQUU7WUFDUixPQUFPLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUM7UUFDdkUsQ0FBQyxDQUFDLENBQ0w7YUFDQSxTQUFTLENBQUMsQ0FBQyxLQUFvQixFQUFFLEVBQUU7WUFDaEMsSUFBSSxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDN0IsQ0FBQyxDQUFDLENBQUM7UUFFUCxTQUFTLENBQWlCLFFBQVEsRUFBRSxNQUFNLENBQUM7YUFDdEMsSUFBSSxDQUNELFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQ3hCLE1BQU0sQ0FBQyxHQUFHLEVBQUU7WUFDUixPQUFPLENBQUMsZ0JBQWdC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LE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQzthQUNuQztTQUNKO0lBQ0wsQ0FBQzs7aUhBamZRLG1CQUFtQjtxR0FBbkIsbUJBQW1CLG90QkFnRVksVUFBVSxnRUF4RnhDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7S0FxQlQ7NEZBR1EsbUJBQW1CO2tCQTFCL0IsU0FBUzttQkFBQztvQkFDUCxRQUFRLEVBQUUsYUFBYTtvQkFDdkIsUUFBUSxFQUFFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7S0FxQlQ7b0JBQ0QsZUFBZSxFQUFFLHVCQUF1QixDQUFDLE1BQU07aUJBQ2xEO3lKQW1CWSxVQUFVO3NCQUFsQixLQUFLO2dCQUVHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBRUcsWUFBWTtzQkFBcEIsS0FBSztnQkFFRyxZQUFZO3NCQUFwQixLQUFLO2dCQUVJLFdBQVc7c0JBQXBCLE1BQU07Z0JBRUcscUJBQXFCO3NCQUE5QixNQUFNO2dCQVdILFNBQVM7c0JBRFosV0FBVzt1QkFBQyxPQUFPO2dCQU1oQixRQUFRO3NCQURYLFdBQVc7dUJBQUMsZ0JBQWdCO2dCQU16QixNQUFNO3NCQURULFdBQVc7dUJBQUMsY0FBYztnQkFNdkIsT0FBTztzQkFEVixXQUFXO3VCQUFDLGVBQWU7Z0JBTTVCLEdBQUc7c0JBREYsU0FBUzt1QkFBQyxLQUFLLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQUkzQixrQkFBa0I7c0JBRHhCLFlBQVk7dUJBQUMsY0FBYztnQkFJNUIsaUJBQWlCO3NCQURoQixTQUFTO3VCQUFDLG1CQUFtQixFQUFFLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBBZnRlclZpZXdJbml0LFxuICAgIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICAgIENoYW5nZURldGVjdG9yUmVmLFxuICAgIENvbXBvbmVudCxcbiAgICBDb250ZW50Q2hpbGQsXG4gICAgRWxlbWVudFJlZixcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgSG9zdEJpbmRpbmcsXG4gICAgSW5wdXQsXG4gICAgT25DaGFuZ2VzLFxuICAgIE9uRGVzdHJveSxcbiAgICBPbkluaXQsXG4gICAgT3V0cHV0LFxuICAgIFJlbmRlcmVyMixcbiAgICBTaW1wbGVDaGFuZ2VzLFxuICAgIFRlbXBsYXRlUmVmLFxuICAgIFZpZXdDaGlsZFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCByb3VnaCBmcm9tICdyb3VnaGpzL2Jpbi9yb3VnaCc7XG5pbXBvcnQgeyBSb3VnaFNWRyB9IGZyb20gJ3JvdWdoanMvYmluL3N2Zyc7XG5pbXBvcnQgeyBmcm9tRXZlbnQsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGZpbHRlciwgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgU0NST0xMX0JBUl9XSURUSCB9IGZyb20gJy4uL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBQbGFpdEJvYXJkLCBQbGFpdEJvYXJkQ2hhbmdlRXZlbnQsIFBsYWl0Qm9hcmRPcHRpb25zLCBQbGFpdEJvYXJkVmlld3BvcnQgfSBmcm9tICcuLi9pbnRlcmZhY2VzL2JvYXJkJztcbmltcG9ydCB7IFBsYWl0RWxlbWVudCB9IGZyb20gJy4uL2ludGVyZmFjZXMvZWxlbWVudCc7XG5pbXBvcnQgeyBQbGFpdFBsdWdpbiB9IGZyb20gJy4uL2ludGVyZmFjZXMvcGx1Z2luJztcbmltcG9ydCB7IFZpZXdwb3J0IH0gZnJvbSAnLi4vaW50ZXJmYWNlcy92aWV3cG9ydCc7XG5pbXBvcnQgeyBjcmVhdGVCb2FyZCB9IGZyb20gJy4uL3BsdWdpbnMvY3JlYXRlLWJvYXJkJztcbmltcG9ydCB7IHdpdGhCb2FyZCB9IGZyb20gJy4uL3BsdWdpbnMvd2l0aC1ib2FyZCc7XG5pbXBvcnQgeyB3aXRoSGlzdG9yeSB9IGZyb20gJy4uL3BsdWdpbnMvd2l0aC1oaXN0b3J5JztcbmltcG9ydCB7IHdpdGhIYW5kUG9pbnRlciB9IGZyb20gJy4uL3BsdWdpbnMvd2l0aC1oYW5kJztcbmltcG9ydCB7IHdpdGhTZWxlY3Rpb24gfSBmcm9tICcuLi9wbHVnaW5zL3dpdGgtc2VsZWN0aW9uJztcbmltcG9ydCB7IFRyYW5zZm9ybXMgfSBmcm9tICcuLi90cmFuc2Zvcm1zJztcbmltcG9ydCB7XG4gICAgZ2V0Um9vdEdyb3VwQkJveCxcbiAgICBjbGFtcFpvb21MZXZlbCxcbiAgICBjb252ZXJ0VG9WaWV3cG9ydENvb3JkaW5hdGVzLFxuICAgIGdldFZpZXdwb3J0Q29udGFpbmVyQm94LFxuICAgIGludmVydFZpZXdwb3J0Q29vcmRpbmF0ZXMsXG4gICAgdHJhbnNmb3JtTWF0MyxcbiAgICBnZXRCb2FyZENsaWVudEJveFxufSBmcm9tICcuLi91dGlscyc7XG5pbXBvcnQgeyBCT0FSRF9UT19PTl9DSEFOR0UsIEhPU1RfVE9fUk9VR0hfU1ZHLCBJU19URVhUX0VESVRBQkxFLCBQTEFJVF9CT0FSRF9UT19DT01QT05FTlQgfSBmcm9tICcuLi91dGlscy93ZWFrLW1hcHMnO1xuaW1wb3J0IHsgQm9hcmRDb21wb25lbnRJbnRlcmZhY2UgfSBmcm9tICcuL2JvYXJkLmNvbXBvbmVudC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgUmVjdGFuZ2xlQ2xpZW50IH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9ncmFwaCc7XG5pbXBvcnQgeyBQbGFpdFBvaW50ZXJUeXBlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9wb2ludGVyJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdwbGFpdC1ib2FyZCcsXG4gICAgdGVtcGxhdGU6IGBcbiAgICAgICAgPGRpdiBjbGFzcz1cInZpZXdwb3J0LWNvbnRhaW5lclwiICN2aWV3cG9ydENvbnRhaW5lcj5cbiAgICAgICAgICAgIDxzdmcgI3N2ZyB3aWR0aD1cIjEwMCVcIiBoZWlnaHQ9XCIxMDAlXCIgc3R5bGU9XCJwb3NpdGlvbjogcmVsYXRpdmU7XCI+PC9zdmc+XG4gICAgICAgICAgICA8cGxhaXQtZWxlbWVudFxuICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBpdGVtIG9mIGJvYXJkLmNoaWxkcmVuOyBsZXQgaW5kZXggPSBpbmRleDsgdHJhY2tCeTogdHJhY2tCeVwiXG4gICAgICAgICAgICAgICAgW2luZGV4XT1cImluZGV4XCJcbiAgICAgICAgICAgICAgICBbZWxlbWVudF09XCJpdGVtXCJcbiAgICAgICAgICAgICAgICBbYm9hcmRdPVwiYm9hcmRcIlxuICAgICAgICAgICAgICAgIFtzZWxlY3Rpb25dPVwiYm9hcmQuc2VsZWN0aW9uXCJcbiAgICAgICAgICAgICAgICBbaG9zdF09XCJob3N0XCJcbiAgICAgICAgICAgID48L3BsYWl0LWVsZW1lbnQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8cGxhaXQtdG9vbGJhclxuICAgICAgICAgICAgKm5nSWY9XCJpc0ZvY3VzZWQgJiYgIXRvb2xiYXJUZW1wbGF0ZVJlZlwiXG4gICAgICAgICAgICBbYm9hcmRdPVwiYm9hcmRcIlxuICAgICAgICAgICAgKGFkYXB0SGFuZGxlKT1cImFkYXB0SGFuZGxlKClcIlxuICAgICAgICAgICAgKHpvb21JbkhhbmRsZSk9XCJ6b29tSW5IYW5kbGUoKVwiXG4gICAgICAgICAgICAoem9vbU91dEhhbmRsZSk9XCJ6b29tT3V0SGFuZGxlKClcIlxuICAgICAgICAgICAgKHJlc2V0Wm9vbUhhbmRlbCk9XCJyZXNldFpvb21IYW5kZWwoKVwiXG4gICAgICAgID48L3BsYWl0LXRvb2xiYXI+XG4gICAgICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbiAgICBgLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXG59KVxuZXhwb3J0IGNsYXNzIFBsYWl0Qm9hcmRDb21wb25lbnQgaW1wbGVtZW50cyBCb2FyZENvbXBvbmVudEludGVyZmFjZSwgT25Jbml0LCBPbkNoYW5nZXMsIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSB7XG4gICAgaGFzSW5pdGlhbGl6ZWQgPSBmYWxzZTtcblxuICAgIGJvYXJkITogUGxhaXRCb2FyZDtcblxuICAgIHJvdWdoU1ZHITogUm91Z2hTVkc7XG5cbiAgICBkZXN0cm95JDogU3ViamVjdDxhbnk+ID0gbmV3IFN1YmplY3QoKTtcblxuICAgIHZpZXdwb3J0U3RhdGU6IFBsYWl0Qm9hcmRWaWV3cG9ydCA9IHtcbiAgICAgICAgem9vbTogMSxcbiAgICAgICAgYXV0b0ZpdFBhZGRpbmc6IDhcbiAgICB9O1xuXG4gICAgcHVibGljIGlzTW92aW5nID0gZmFsc2U7XG5cbiAgICBwcml2YXRlIHJlc2l6ZU9ic2VydmVyITogUmVzaXplT2JzZXJ2ZXI7XG5cbiAgICBASW5wdXQoKSBwbGFpdFZhbHVlOiBQbGFpdEVsZW1lbnRbXSA9IFtdO1xuXG4gICAgQElucHV0KCkgcGxhaXRWaWV3cG9ydCE6IFZpZXdwb3J0O1xuXG4gICAgQElucHV0KCkgcGxhaXRQbHVnaW5zOiBQbGFpdFBsdWdpbltdID0gW107XG5cbiAgICBASW5wdXQoKSBwbGFpdE9wdGlvbnMhOiBQbGFpdEJvYXJkT3B0aW9ucztcblxuICAgIEBPdXRwdXQoKSBwbGFpdENoYW5nZTogRXZlbnRFbWl0dGVyPFBsYWl0Qm9hcmRDaGFuZ2VFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgICBAT3V0cHV0KCkgcGxhaXRCb2FyZEluaXRpYWxpemVkOiBFdmVudEVtaXR0ZXI8UGxhaXRCb2FyZD4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgICBnZXQgaG9zdCgpOiBTVkdFbGVtZW50IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3ZnLm5hdGl2ZUVsZW1lbnQ7XG4gICAgfVxuXG4gICAgZ2V0IGlzRm9jdXNlZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYm9hcmQ/LnNlbGVjdGlvbjtcbiAgICB9XG5cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzJylcbiAgICBnZXQgaG9zdENsYXNzKCkge1xuICAgICAgICByZXR1cm4gYHBsYWl0LWJvYXJkLWNvbnRhaW5lciAke3RoaXMuYm9hcmQucG9pbnRlcn1gO1xuICAgIH1cblxuICAgIEBIb3N0QmluZGluZygnY2xhc3MucmVhZG9ubHknKVxuICAgIGdldCByZWFkb25seSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYm9hcmQub3B0aW9ucy5yZWFkb25seTtcbiAgICB9XG5cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLm1vdmluZycpXG4gICAgZ2V0IG1vdmluZygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYm9hcmQucG9pbnRlciA9PT0gUGxhaXRQb2ludGVyVHlwZS5oYW5kICYmIHRoaXMuaXNNb3Zpbmc7XG4gICAgfVxuXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5mb2N1c2VkJylcbiAgICBnZXQgZm9jdXNlZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNGb2N1c2VkO1xuICAgIH1cblxuICAgIEBWaWV3Q2hpbGQoJ3N2ZycsIHsgc3RhdGljOiB0cnVlIH0pXG4gICAgc3ZnITogRWxlbWVudFJlZjtcblxuICAgIEBDb250ZW50Q2hpbGQoJ3BsYWl0VG9vbGJhcicpXG4gICAgcHVibGljIHRvb2xiYXJUZW1wbGF0ZVJlZiE6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgICBAVmlld0NoaWxkKCd2aWV3cG9ydENvbnRhaW5lcicsIHsgcmVhZDogRWxlbWVudFJlZiwgc3RhdGljOiB0cnVlIH0pXG4gICAgdmlld3BvcnRDb250YWluZXIhOiBFbGVtZW50UmVmO1xuXG4gICAgY29uc3RydWN0b3IocHVibGljIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsIHByaXZhdGUgcmVuZGVyZXIyOiBSZW5kZXJlcjIsIHByaXZhdGUgZWxlbWVudFJlZjogRWxlbWVudFJlZikge31cblxuICAgIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICBjb25zdCByb3VnaFNWRyA9IHJvdWdoLnN2Zyh0aGlzLmhvc3QgYXMgU1ZHU1ZHRWxlbWVudCwge1xuICAgICAgICAgICAgb3B0aW9uczogeyByb3VnaG5lc3M6IDAsIHN0cm9rZVdpZHRoOiAxIH1cbiAgICAgICAgfSk7XG4gICAgICAgIEhPU1RfVE9fUk9VR0hfU1ZHLnNldCh0aGlzLmhvc3QsIHJvdWdoU1ZHKTtcbiAgICAgICAgdGhpcy5pbml0aWFsaXplUGx1Z2lucygpO1xuICAgICAgICB0aGlzLmluaXRpYWxpemVFdmVudHMoKTtcbiAgICAgICAgUExBSVRfQk9BUkRfVE9fQ09NUE9ORU5ULnNldCh0aGlzLmJvYXJkLCB0aGlzKTtcbiAgICAgICAgQk9BUkRfVE9fT05fQ0hBTkdFLnNldCh0aGlzLmJvYXJkLCAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgICBjb25zdCBjaGFuZ2VFdmVudDogUGxhaXRCb2FyZENoYW5nZUV2ZW50ID0ge1xuICAgICAgICAgICAgICAgIGNoaWxkcmVuOiB0aGlzLmJvYXJkLmNoaWxkcmVuLFxuICAgICAgICAgICAgICAgIG9wZXJhdGlvbnM6IHRoaXMuYm9hcmQub3BlcmF0aW9ucyxcbiAgICAgICAgICAgICAgICB2aWV3cG9ydDogdGhpcy5ib2FyZC52aWV3cG9ydCxcbiAgICAgICAgICAgICAgICBzZWxlY3Rpb246IHRoaXMuYm9hcmQuc2VsZWN0aW9uXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgdGhpcy5wbGFpdENoYW5nZS5lbWl0KGNoYW5nZUV2ZW50KTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuaGFzSW5pdGlhbGl6ZWQgPSB0cnVlO1xuICAgIH1cblxuICAgIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcbiAgICAgICAgaWYgKHRoaXMuaGFzSW5pdGlhbGl6ZWQpIHtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlQ2hhbmdlID0gY2hhbmdlc1sncGxhaXRWYWx1ZSddO1xuICAgICAgICAgICAgY29uc3Qgb3B0aW9ucyA9IGNoYW5nZXNbJ3BsYWl0T3B0aW9ucyddO1xuXG4gICAgICAgICAgICBpZiAodmFsdWVDaGFuZ2UpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmJvYXJkLmNoaWxkcmVuID0gdmFsdWVDaGFuZ2UuY3VycmVudFZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG9wdGlvbnMpIHRoaXMuYm9hcmQub3B0aW9ucyA9IG9wdGlvbnMuY3VycmVudFZhbHVlO1xuICAgICAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMucGxhaXRCb2FyZEluaXRpYWxpemVkLmVtaXQodGhpcy5ib2FyZCk7XG4gICAgICAgIHRoaXMuaW5pdFZpZXdwb3J0Q29udGFpbmVyKCk7XG4gICAgICAgIHRoaXMuY2FsY1ZpZXdCb3godGhpcy52aWV3cG9ydFN0YXRlLnpvb20pO1xuICAgICAgICB0aGlzLmluaXRWaWV3cG9ydCgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgaW5pdGlhbGl6ZVBsdWdpbnMoKSB7XG4gICAgICAgIGxldCBib2FyZCA9IHdpdGhIYW5kUG9pbnRlcih3aXRoSGlzdG9yeSh3aXRoU2VsZWN0aW9uKHdpdGhCb2FyZChjcmVhdGVCb2FyZCh0aGlzLmhvc3QsIHRoaXMucGxhaXRWYWx1ZSwgdGhpcy5wbGFpdE9wdGlvbnMpKSkpKTtcbiAgICAgICAgdGhpcy5wbGFpdFBsdWdpbnMuZm9yRWFjaChwbHVnaW4gPT4ge1xuICAgICAgICAgICAgYm9hcmQgPSBwbHVnaW4oYm9hcmQpO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5ib2FyZCA9IGJvYXJkO1xuXG4gICAgICAgIGlmICh0aGlzLnBsYWl0Vmlld3BvcnQpIHtcbiAgICAgICAgICAgIHRoaXMuYm9hcmQudmlld3BvcnQgPSB0aGlzLnBsYWl0Vmlld3BvcnQ7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVZpZXdwb3J0U3RhdGUoe1xuICAgICAgICAgICAgICAgIHpvb206IHRoaXMucGxhaXRWaWV3cG9ydD8uem9vbSA/PyAxXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgaW5pdGlhbGl6ZUV2ZW50cygpIHtcbiAgICAgICAgZnJvbUV2ZW50PE1vdXNlRXZlbnQ+KHRoaXMuaG9zdCwgJ21vdXNlZG93bicpXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChldmVudDogTW91c2VFdmVudCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuYm9hcmQubW91c2Vkb3duKGV2ZW50KTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIGZyb21FdmVudDxNb3VzZUV2ZW50Pih0aGlzLmhvc3QsICdtb3VzZW1vdmUnKVxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoZXZlbnQ6IE1vdXNlRXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmJvYXJkLm1vdXNlbW92ZShldmVudCk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICBmcm9tRXZlbnQ8TW91c2VFdmVudD4oZG9jdW1lbnQsICdtb3VzZXVwJylcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKGV2ZW50OiBNb3VzZUV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5ib2FyZC5nbG9iYWxNb3VzZXVwKGV2ZW50KTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIGZyb21FdmVudDxNb3VzZUV2ZW50Pih0aGlzLmhvc3QsICdkYmxjbGljaycpXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChldmVudDogTW91c2VFdmVudCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuYm9hcmQuZGJsY2xpY2soZXZlbnQpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgZnJvbUV2ZW50PEtleWJvYXJkRXZlbnQ+KGRvY3VtZW50LCAna2V5ZG93bicpXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICB0YWtlVW50aWwodGhpcy5kZXN0cm95JCksXG4gICAgICAgICAgICAgICAgZmlsdGVyKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICFJU19URVhUX0VESVRBQkxFLmdldCh0aGlzLmJvYXJkKSAmJiAhIXRoaXMuYm9hcmQuc2VsZWN0aW9uO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChldmVudDogS2V5Ym9hcmRFdmVudCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuYm9hcmQ/LmtleWRvd24oZXZlbnQpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgZnJvbUV2ZW50PEtleWJvYXJkRXZlbnQ+KGRvY3VtZW50LCAna2V5dXAnKVxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMuZGVzdHJveSQpLFxuICAgICAgICAgICAgICAgIGZpbHRlcigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAhSVNfVEVYVF9FRElUQUJMRS5nZXQodGhpcy5ib2FyZCkgJiYgISF0aGlzLmJvYXJkLnNlbGVjdGlvbjtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoZXZlbnQ6IEtleWJvYXJkRXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmJvYXJkPy5rZXl1cChldmVudCk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICBmcm9tRXZlbnQ8Q2xpcGJvYXJkRXZlbnQ+KGRvY3VtZW50LCAnY29weScpXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICB0YWtlVW50aWwodGhpcy5kZXN0cm95JCksXG4gICAgICAgICAgICAgICAgZmlsdGVyKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICFJU19URVhUX0VESVRBQkxFLmdldCh0aGlzLmJvYXJkKSAmJiAhIXRoaXMuYm9hcmQuc2VsZWN0aW9uO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChldmVudDogQ2xpcGJvYXJkRXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgIHRoaXMuYm9hcmQ/LnNldEZyYWdtZW50KGV2ZW50LmNsaXBib2FyZERhdGEpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgZnJvbUV2ZW50PENsaXBib2FyZEV2ZW50Pihkb2N1bWVudCwgJ3Bhc3RlJylcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSxcbiAgICAgICAgICAgICAgICBmaWx0ZXIoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gIUlTX1RFWFRfRURJVEFCTEUuZ2V0KHRoaXMuYm9hcmQpICYmICEhdGhpcy5ib2FyZC5zZWxlY3Rpb247XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKGV2ZW50OiBDbGlwYm9hcmRFdmVudCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuYm9hcmQ/Lmluc2VydEZyYWdtZW50KGV2ZW50LmNsaXBib2FyZERhdGEpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgZnJvbUV2ZW50PENsaXBib2FyZEV2ZW50Pihkb2N1bWVudCwgJ2N1dCcpXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICB0YWtlVW50aWwodGhpcy5kZXN0cm95JCksXG4gICAgICAgICAgICAgICAgZmlsdGVyKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICFJU19URVhUX0VESVRBQkxFLmdldCh0aGlzLmJvYXJkKSAmJiAhIXRoaXMuYm9hcmQuc2VsZWN0aW9uO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChldmVudDogQ2xpcGJvYXJkRXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgIHRoaXMuYm9hcmQ/LnNldEZyYWdtZW50KGV2ZW50LmNsaXBib2FyZERhdGEpO1xuICAgICAgICAgICAgICAgIHRoaXMuYm9hcmQ/LmRlbGV0ZUZyYWdtZW50KGV2ZW50LmNsaXBib2FyZERhdGEpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgZnJvbUV2ZW50PE1vdXNlRXZlbnQ+KHRoaXMudmlld3BvcnRDb250YWluZXIubmF0aXZlRWxlbWVudCwgJ3Njcm9sbCcpXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICB0YWtlVW50aWwodGhpcy5kZXN0cm95JCksXG4gICAgICAgICAgICAgICAgZmlsdGVyKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICEhdGhpcy5pc0ZvY3VzZWQ7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKGV2ZW50OiBFdmVudCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHsgc2Nyb2xsTGVmdCwgc2Nyb2xsVG9wIH0gPSBldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQ7XG4gICAgICAgICAgICAgICAgY29uc3QgbGVmdCA9IHRoaXMudmlld3BvcnRTdGF0ZS5zY3JvbGxMZWZ0ITtcbiAgICAgICAgICAgICAgICBjb25zdCB0b3AgPSB0aGlzLnZpZXdwb3J0U3RhdGUuc2Nyb2xsVG9wITtcbiAgICAgICAgICAgICAgICBpZiAoTWF0aC5hYnMobGVmdCAtIHNjcm9sbExlZnQpID49IDEgfHwgTWF0aC5hYnModG9wIC0gc2Nyb2xsVG9wKSA+PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0U2Nyb2xsTGVmdChzY3JvbGxMZWZ0KTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTY3JvbGxUb3Aoc2Nyb2xsVG9wKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRWaWV3cG9ydCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB0aGlzLnJlc2l6ZUVsZW1lbnQoKTtcbiAgICB9XG5cbiAgICByZXNpemVFbGVtZW50KCkge1xuICAgICAgICB0aGlzLnJlc2l6ZU9ic2VydmVyID0gbmV3IFJlc2l6ZU9ic2VydmVyKGVudHJpZXMgPT4ge1xuICAgICAgICAgICAgZm9yIChsZXQgZW50cnkgb2YgZW50cmllcykge1xuICAgICAgICAgICAgICAgIHRoaXMuaW5pdFZpZXdwb3J0Q29udGFpbmVyKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5jYWxjVmlld0JveCh0aGlzLmJvYXJkLnZpZXdwb3J0Lnpvb20pO1xuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlVmlld0JveFN0eWxlcygpO1xuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlVmlld3BvcnRTY3JvbGxpbmcoKTtcbiAgICAgICAgICAgICAgICB0aGlzLnNldFZpZXdwb3J0KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnJlc2l6ZU9ic2VydmVyLm9ic2VydmUodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQpO1xuICAgIH1cblxuICAgIHByaXZhdGUgdXBkYXRlVmlld3BvcnRTdGF0ZShzdGF0ZTogUGFydGlhbDxQbGFpdEJvYXJkVmlld3BvcnQ+KSB7XG4gICAgICAgIHRoaXMudmlld3BvcnRTdGF0ZSA9IHtcbiAgICAgICAgICAgIC4uLnRoaXMudmlld3BvcnRTdGF0ZSxcbiAgICAgICAgICAgIC4uLnN0YXRlXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgaW5pdFZpZXdwb3J0Q29udGFpbmVyKCkge1xuICAgICAgICBjb25zdCB7IHdpZHRoLCBoZWlnaHQgfSA9IGdldEJvYXJkQ2xpZW50Qm94KHRoaXMuYm9hcmQpO1xuICAgICAgICB0aGlzLnJlbmRlcmVyMi5zZXRTdHlsZSh0aGlzLnZpZXdwb3J0Q29udGFpbmVyLm5hdGl2ZUVsZW1lbnQsICd3aWR0aCcsIGAke3dpZHRofXB4YCk7XG4gICAgICAgIHRoaXMucmVuZGVyZXIyLnNldFN0eWxlKHRoaXMudmlld3BvcnRDb250YWluZXIubmF0aXZlRWxlbWVudCwgJ2hlaWdodCcsIGAke2hlaWdodH1weGApO1xuICAgIH1cblxuICAgIGluaXRWaWV3cG9ydCh2aWV3cG9ydCA9IHRoaXMuYm9hcmQudmlld3BvcnQpIHtcbiAgICAgICAgY29uc3Qgb3JpZ2luYXRpb25Db29yZCA9IHZpZXdwb3J0Py5vcmlnaW5hdGlvbkNvb3JkO1xuICAgICAgICBjb25zdCB6b29tID0gdmlld3BvcnQ/Lnpvb20gPz8gdGhpcy52aWV3cG9ydFN0YXRlLnpvb207XG5cbiAgICAgICAgaWYgKG9yaWdpbmF0aW9uQ29vcmQpIHtcbiAgICAgICAgICAgIGNvbnN0IG1hdHJpeCA9IHRoaXMuZ2V0TWF0cml4KCk7XG4gICAgICAgICAgICBjb25zdCBbcG9pbnRYLCBwb2ludFldID0gaW52ZXJ0Vmlld3BvcnRDb29yZGluYXRlcyhbMCwgMF0sIG1hdHJpeCk7XG4gICAgICAgICAgICBjb25zdCBzY3JvbGxMZWZ0ID0gdGhpcy52aWV3cG9ydFN0YXRlLnNjcm9sbExlZnQhO1xuICAgICAgICAgICAgY29uc3Qgc2Nyb2xsVG9wID0gdGhpcy52aWV3cG9ydFN0YXRlLnNjcm9sbFRvcCE7XG4gICAgICAgICAgICBjb25zdCBsZWZ0ID0gc2Nyb2xsTGVmdCArIChvcmlnaW5hdGlvbkNvb3JkWzBdIC0gcG9pbnRYKSAqIHpvb207XG4gICAgICAgICAgICBjb25zdCB0b3AgPSBzY3JvbGxUb3AgKyAob3JpZ2luYXRpb25Db29yZFsxXSAtIHBvaW50WSkgKiB6b29tO1xuICAgICAgICAgICAgdGhpcy5zZXRTY3JvbGwobGVmdCwgdG9wKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuYWRhcHRIYW5kbGUoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNhbGNWaWV3Qm94KHpvb20gPSB0aGlzLnZpZXdwb3J0U3RhdGUuem9vbSkge1xuICAgICAgICB6b29tID0gY2xhbXBab29tTGV2ZWwoem9vbSk7XG5cbiAgICAgICAgY29uc3Qgc2Nyb2xsQmFyV2lkdGggPSB0aGlzLnBsYWl0T3B0aW9ucz8uaGlkZVNjcm9sbGJhciA/IFNDUk9MTF9CQVJfV0lEVEggOiAwO1xuICAgICAgICBjb25zdCB2aWV3cG9ydENvbnRhaW5lckJveCA9IGdldFZpZXdwb3J0Q29udGFpbmVyQm94KHRoaXMuYm9hcmQpO1xuICAgICAgICBjb25zdCBncm91cEJCb3ggPSBnZXRSb290R3JvdXBCQm94KHRoaXMuYm9hcmQsIHpvb20pO1xuICAgICAgICBjb25zdCBob3Jpem9udGFsUGFkZGluZyA9IHZpZXdwb3J0Q29udGFpbmVyQm94LndpZHRoIC8gMjtcbiAgICAgICAgY29uc3QgdmVydGljYWxQYWRkaW5nID0gdmlld3BvcnRDb250YWluZXJCb3guaGVpZ2h0IC8gMjtcbiAgICAgICAgY29uc3Qgdmlld3BvcnRXaWR0aCA9IChncm91cEJCb3gucmlnaHQgLSBncm91cEJCb3gubGVmdCkgKiB6b29tICsgMiAqIGhvcml6b250YWxQYWRkaW5nICsgc2Nyb2xsQmFyV2lkdGg7XG4gICAgICAgIGNvbnN0IHZpZXdwb3J0SGVpZ2h0ID0gKGdyb3VwQkJveC5ib3R0b20gLSBncm91cEJCb3gudG9wKSAqIHpvb20gKyAyICogdmVydGljYWxQYWRkaW5nICsgc2Nyb2xsQmFyV2lkdGg7XG5cbiAgICAgICAgY29uc3Qgdmlld0JveCA9IFtcbiAgICAgICAgICAgIGdyb3VwQkJveC5sZWZ0IC0gaG9yaXpvbnRhbFBhZGRpbmcgLyB6b29tLFxuICAgICAgICAgICAgZ3JvdXBCQm94LnRvcCAtIHZlcnRpY2FsUGFkZGluZyAvIHpvb20sXG4gICAgICAgICAgICB2aWV3cG9ydFdpZHRoIC8gem9vbSxcbiAgICAgICAgICAgIHZpZXdwb3J0SGVpZ2h0IC8gem9vbVxuICAgICAgICBdO1xuICAgICAgICBjb25zdCBtYXRyaXggPSB0aGlzLmdldE1hdHJpeCgpO1xuICAgICAgICBsZXQgc2Nyb2xsTGVmdDtcbiAgICAgICAgbGV0IHNjcm9sbFRvcDtcblxuICAgICAgICBpZiAobWF0cml4Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIC8vIGZvY3VzUG9pbnRcbiAgICAgICAgICAgIGNvbnN0IGZvY3VzWCA9IHZpZXdwb3J0Q29udGFpbmVyQm94LnggKyB2aWV3cG9ydENvbnRhaW5lckJveC53aWR0aCAvIDI7XG4gICAgICAgICAgICBjb25zdCBmb2N1c1kgPSB2aWV3cG9ydENvbnRhaW5lckJveC55ICsgdmlld3BvcnRDb250YWluZXJCb3guaGVpZ2h0IC8gMjtcbiAgICAgICAgICAgIGNvbnN0IHZpZXdwb3J0Q29udGFpbmVyUG9pbnQgPSBbZm9jdXNYIC0gdmlld3BvcnRDb250YWluZXJCb3gueCwgZm9jdXNZIC0gdmlld3BvcnRDb250YWluZXJCb3gueSwgMV07XG4gICAgICAgICAgICBjb25zdCBwb2ludCA9IGludmVydFZpZXdwb3J0Q29vcmRpbmF0ZXMoW3ZpZXdwb3J0Q29udGFpbmVyUG9pbnRbMF0sIHZpZXdwb3J0Q29udGFpbmVyUG9pbnRbMV1dLCBtYXRyaXgpO1xuICAgICAgICAgICAgY29uc3QgbmV3TWF0cml4ID0gW3pvb20sIDAsIDAsIDAsIHpvb20sIDAsIC16b29tICogdmlld0JveFswXSwgLXpvb20gKiB2aWV3Qm94WzFdLCAxXTtcbiAgICAgICAgICAgIGNvbnN0IG5ld1BvaW50ID0gdHJhbnNmb3JtTWF0MyhbXSwgcG9pbnQsIG5ld01hdHJpeCk7XG5cbiAgICAgICAgICAgIHNjcm9sbExlZnQgPSBuZXdQb2ludFswXSAtIHZpZXdwb3J0Q29udGFpbmVyUG9pbnRbMF07XG4gICAgICAgICAgICBzY3JvbGxUb3AgPSBuZXdQb2ludFsxXSAtIHZpZXdwb3J0Q29udGFpbmVyUG9pbnRbMV07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzY3JvbGxMZWZ0ID0gaG9yaXpvbnRhbFBhZGRpbmc7XG4gICAgICAgICAgICBzY3JvbGxUb3AgPSB2ZXJ0aWNhbFBhZGRpbmc7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy51cGRhdGVWaWV3cG9ydFN0YXRlKHtcbiAgICAgICAgICAgIHZpZXdwb3J0V2lkdGgsXG4gICAgICAgICAgICB2aWV3cG9ydEhlaWdodCxcbiAgICAgICAgICAgIHpvb20sXG4gICAgICAgICAgICB2aWV3Qm94XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnNldFNjcm9sbExlZnQoc2Nyb2xsTGVmdCk7XG4gICAgICAgIHRoaXMuc2V0U2Nyb2xsVG9wKHNjcm9sbFRvcCk7XG4gICAgfVxuXG4gICAgZ2V0TWF0cml4KCk6IG51bWJlcltdIHtcbiAgICAgICAgY29uc3QgeyB2aWV3Qm94LCB6b29tLCBzY3JvbGxMZWZ0LCBzY3JvbGxUb3AgfSA9IHRoaXMudmlld3BvcnRTdGF0ZTtcbiAgICAgICAgaWYgKHNjcm9sbExlZnQhID49IDAgJiYgc2Nyb2xsVG9wISA+PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gW3pvb20sIDAsIDAsIDAsIHpvb20sIDAsIC1zY3JvbGxMZWZ0ISAtIHpvb20gKiB2aWV3Qm94IVswXSwgLXNjcm9sbFRvcCEgLSB6b29tICogdmlld0JveCFbMV0sIDFdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICBzZXRTY3JvbGxMZWZ0KGxlZnQ6IG51bWJlcikge1xuICAgICAgICBjb25zdCB2aWV3cG9ydENvbnRhaW5lckJveCA9IGdldFZpZXdwb3J0Q29udGFpbmVyQm94KHRoaXMuYm9hcmQpO1xuICAgICAgICBjb25zdCBzY3JvbGxCYXJXaWR0aCA9IHRoaXMucGxhaXRPcHRpb25zPy5oaWRlU2Nyb2xsYmFyID8gU0NST0xMX0JBUl9XSURUSCA6IDA7XG4gICAgICAgIGNvbnN0IHsgdmlld3BvcnRXaWR0aCB9ID0gdGhpcy52aWV3cG9ydFN0YXRlO1xuICAgICAgICBjb25zdCB3aWR0aCA9IHZpZXdwb3J0V2lkdGghIC0gdmlld3BvcnRDb250YWluZXJCb3gud2lkdGggKyBzY3JvbGxCYXJXaWR0aDtcbiAgICAgICAgdGhpcy52aWV3cG9ydFN0YXRlLnNjcm9sbExlZnQgPSBsZWZ0IDwgMCA/IDAgOiBsZWZ0ID4gd2lkdGggPyB3aWR0aCA6IGxlZnQ7XG4gICAgfVxuXG4gICAgc2V0U2Nyb2xsVG9wKHRvcDogbnVtYmVyKSB7XG4gICAgICAgIGNvbnN0IHZpZXdwb3J0Q29udGFpbmVyQm94ID0gZ2V0Vmlld3BvcnRDb250YWluZXJCb3godGhpcy5ib2FyZCk7XG4gICAgICAgIGNvbnN0IHNjcm9sbEJhcldpZHRoID0gdGhpcy5wbGFpdE9wdGlvbnM/LmhpZGVTY3JvbGxiYXIgPyBTQ1JPTExfQkFSX1dJRFRIIDogMDtcbiAgICAgICAgY29uc3QgeyB2aWV3cG9ydEhlaWdodCB9ID0gdGhpcy52aWV3cG9ydFN0YXRlO1xuICAgICAgICBjb25zdCBoZWlnaHQgPSB2aWV3cG9ydEhlaWdodCEgLSB2aWV3cG9ydENvbnRhaW5lckJveC5oZWlnaHQgKyBzY3JvbGxCYXJXaWR0aDtcbiAgICAgICAgdGhpcy52aWV3cG9ydFN0YXRlLnNjcm9sbFRvcCA9IHRvcCA8IDAgPyAwIDogdG9wID4gaGVpZ2h0ID8gaGVpZ2h0IDogdG9wO1xuICAgIH1cblxuICAgIHNldFNjcm9sbChsZWZ0OiBudW1iZXIsIHRvcDogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMuc2V0U2Nyb2xsTGVmdChsZWZ0KTtcbiAgICAgICAgdGhpcy5zZXRTY3JvbGxUb3AodG9wKTtcbiAgICAgICAgdGhpcy51cGRhdGVWaWV3Qm94U3R5bGVzKCk7XG4gICAgICAgIHRoaXMudXBkYXRlVmlld3BvcnRTY3JvbGxpbmcoKTtcbiAgICAgICAgdGhpcy5zZXRWaWV3cG9ydCgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgdXBkYXRlVmlld0JveFN0eWxlcygpIHtcbiAgICAgICAgY29uc3QgeyBob3N0LCB2aWV3cG9ydFN0YXRlIH0gPSB0aGlzO1xuICAgICAgICBjb25zdCB7IHZpZXdwb3J0V2lkdGgsIHZpZXdwb3J0SGVpZ2h0LCB2aWV3Qm94IH0gPSB2aWV3cG9ydFN0YXRlO1xuXG4gICAgICAgIHRoaXMucmVuZGVyZXIyLnNldFN0eWxlKGhvc3QsICdkaXNwbGF5JywgJ2Jsb2NrJyk7XG4gICAgICAgIHRoaXMucmVuZGVyZXIyLnNldFN0eWxlKGhvc3QsICd3aWR0aCcsIGAke3ZpZXdwb3J0V2lkdGh9cHhgKTtcbiAgICAgICAgdGhpcy5yZW5kZXJlcjIuc2V0U3R5bGUoaG9zdCwgJ2hlaWdodCcsIGAke3ZpZXdwb3J0SGVpZ2h0fXB4YCk7XG5cbiAgICAgICAgaWYgKHZpZXdCb3ggJiYgdmlld0JveFsyXSA+IDAgJiYgdmlld0JveFszXSA+IDApIHtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIyLnNldEF0dHJpYnV0ZShob3N0LCAndmlld0JveCcsIHZpZXdCb3guam9pbignICcpKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgdXBkYXRlVmlld3BvcnRTY3JvbGxpbmcoKSB7XG4gICAgICAgIGNvbnN0IHsgdmlld3BvcnRDb250YWluZXIsIHZpZXdwb3J0U3RhdGUgfSA9IHRoaXM7XG4gICAgICAgIGNvbnN0IHsgc2Nyb2xsTGVmdCwgc2Nyb2xsVG9wIH0gPSB2aWV3cG9ydFN0YXRlO1xuICAgICAgICB2aWV3cG9ydENvbnRhaW5lci5uYXRpdmVFbGVtZW50LnNjcm9sbExlZnQgPSBzY3JvbGxMZWZ0ITtcbiAgICAgICAgdmlld3BvcnRDb250YWluZXIubmF0aXZlRWxlbWVudC5zY3JvbGxUb3AgPSBzY3JvbGxUb3AhO1xuICAgIH1cblxuICAgIHNldFZpZXdwb3J0KCkge1xuICAgICAgICBjb25zdCB2aWV3cG9ydCA9IHRoaXMuYm9hcmQ/LnZpZXdwb3J0O1xuICAgICAgICBjb25zdCBvbGRPcmlnaW5hdGlvbkNvb3JkID0gdmlld3BvcnQ/Lm9yaWdpbmF0aW9uQ29vcmQgPz8gW107XG4gICAgICAgIGNvbnN0IG1hdHJpeCA9IHRoaXMuZ2V0TWF0cml4KCk7XG4gICAgICAgIGNvbnN0IG9yaWdpbmF0aW9uQ29vcmQgPSBpbnZlcnRWaWV3cG9ydENvb3JkaW5hdGVzKFswLCAwXSwgbWF0cml4KTtcblxuICAgICAgICBpZiAoIW9yaWdpbmF0aW9uQ29vcmQuZXZlcnkoKGl0ZW0sIGluZGV4KSA9PiBpdGVtID09PSBvbGRPcmlnaW5hdGlvbkNvb3JkW2luZGV4XSkpIHtcbiAgICAgICAgICAgIFRyYW5zZm9ybXMuc2V0Vmlld3BvcnQodGhpcy5ib2FyZCwge1xuICAgICAgICAgICAgICAgIC4uLnZpZXdwb3J0LFxuICAgICAgICAgICAgICAgIHpvb206IHRoaXMudmlld3BvcnRTdGF0ZS56b29tLFxuICAgICAgICAgICAgICAgIG9yaWdpbmF0aW9uQ29vcmRcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdHJhY2tCeSA9IChpbmRleDogbnVtYmVyLCBlbGVtZW50OiBQbGFpdEVsZW1lbnQpID0+IHtcbiAgICAgICAgcmV0dXJuIGluZGV4O1xuICAgIH07XG5cbiAgICBhZGFwdEhhbmRsZSgpIHtcbiAgICAgICAgY29uc3QgY29udGFpbmVyQm94ID0gZ2V0Vmlld3BvcnRDb250YWluZXJCb3godGhpcy5ib2FyZCk7XG4gICAgICAgIGNvbnN0IHJvb3RHcm91cCA9IHRoaXMuaG9zdC5maXJzdENoaWxkIGFzIFNWR0dyYXBoaWNzRWxlbWVudDtcbiAgICAgICAgY29uc3QgbWF0cml4ID0gdGhpcy5nZXRNYXRyaXgoKTtcblxuICAgICAgICBjb25zdCByb290R3JvdXBCb3ggPSByb290R3JvdXAuZ2V0QkJveCgpO1xuICAgICAgICBjb25zdCBjZW50ZXJQb2ludCA9IFtjb250YWluZXJCb3gud2lkdGggLyAyLCBjb250YWluZXJCb3guaGVpZ2h0IC8gMl07XG4gICAgICAgIGNvbnN0IHJvb3RHcm91cENlbnRlclggPSByb290R3JvdXBCb3gueCArIHJvb3RHcm91cEJveC53aWR0aCAvIDI7XG4gICAgICAgIGNvbnN0IHJvb3RHcm91cENlbnRlclkgPSByb290R3JvdXBCb3gueSArIHJvb3RHcm91cEJveC5oZWlnaHQgLyAyO1xuICAgICAgICBjb25zdCB0cmFuc2Zvcm1lZFBvaW50ID0gdHJhbnNmb3JtTWF0MyhbXSwgW3Jvb3RHcm91cENlbnRlclgsIHJvb3RHcm91cENlbnRlclksIDFdLCBtYXRyaXgpO1xuXG4gICAgICAgIGNvbnN0IG9mZnNldExlZnQgPSBjZW50ZXJQb2ludFswXSAtIHRyYW5zZm9ybWVkUG9pbnRbMF07XG4gICAgICAgIGNvbnN0IG9mZnNldFRvcCA9IGNlbnRlclBvaW50WzFdIC0gdHJhbnNmb3JtZWRQb2ludFsxXTtcblxuICAgICAgICBjb25zdCB7IGF1dG9GaXRQYWRkaW5nLCB6b29tLCBzY3JvbGxMZWZ0LCBzY3JvbGxUb3AgfSA9IHRoaXMudmlld3BvcnRTdGF0ZTtcbiAgICAgICAgY29uc3Qgdmlld3BvcnRXaWR0aCA9IGNvbnRhaW5lckJveC53aWR0aCAtIDIgKiBhdXRvRml0UGFkZGluZztcbiAgICAgICAgY29uc3Qgdmlld3BvcnRIZWlnaHQgPSBjb250YWluZXJCb3guaGVpZ2h0IC0gMiAqIGF1dG9GaXRQYWRkaW5nO1xuICAgICAgICBsZXQgbmV3Wm9vbSA9IHpvb207XG4gICAgICAgIGlmICh2aWV3cG9ydFdpZHRoIDwgcm9vdEdyb3VwQm94LndpZHRoIHx8IHZpZXdwb3J0SGVpZ2h0IDwgcm9vdEdyb3VwQm94LmhlaWdodCkge1xuICAgICAgICAgICAgbmV3Wm9vbSA9IE1hdGgubWluKHZpZXdwb3J0V2lkdGggLyByb290R3JvdXBCb3gud2lkdGgsIHZpZXdwb3J0SGVpZ2h0IC8gcm9vdEdyb3VwQm94LmhlaWdodCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBuZXdab29tID0gMTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc2V0U2Nyb2xsTGVmdChzY3JvbGxMZWZ0ISAtIG9mZnNldExlZnQpO1xuICAgICAgICB0aGlzLnNldFNjcm9sbFRvcChzY3JvbGxUb3AhIC0gb2Zmc2V0VG9wKTtcbiAgICAgICAgdGhpcy5jYWxjVmlld0JveChuZXdab29tKTtcbiAgICAgICAgdGhpcy51cGRhdGVWaWV3Qm94U3R5bGVzKCk7XG4gICAgICAgIHRoaXMudXBkYXRlVmlld3BvcnRTY3JvbGxpbmcoKTtcbiAgICAgICAgdGhpcy5zZXRWaWV3cG9ydCgpO1xuICAgIH1cblxuICAgIHpvb21JbkhhbmRsZSgpIHtcbiAgICAgICAgdGhpcy5jYWxjVmlld0JveCh0aGlzLnZpZXdwb3J0U3RhdGUuem9vbSArIDAuMSk7XG4gICAgICAgIHRoaXMudXBkYXRlVmlld0JveFN0eWxlcygpO1xuICAgICAgICB0aGlzLnVwZGF0ZVZpZXdwb3J0U2Nyb2xsaW5nKCk7XG4gICAgICAgIHRoaXMuc2V0Vmlld3BvcnQoKTtcbiAgICB9XG5cbiAgICB6b29tT3V0SGFuZGxlKCkge1xuICAgICAgICB0aGlzLmNhbGNWaWV3Qm94KHRoaXMudmlld3BvcnRTdGF0ZS56b29tIC0gMC4xKTtcbiAgICAgICAgdGhpcy51cGRhdGVWaWV3Qm94U3R5bGVzKCk7XG4gICAgICAgIHRoaXMudXBkYXRlVmlld3BvcnRTY3JvbGxpbmcoKTtcbiAgICAgICAgdGhpcy5zZXRWaWV3cG9ydCgpO1xuICAgIH1cblxuICAgIHJlc2V0Wm9vbUhhbmRlbCgpIHtcbiAgICAgICAgdGhpcy5jYWxjVmlld0JveCgxKTtcbiAgICAgICAgdGhpcy51cGRhdGVWaWV3Qm94U3R5bGVzKCk7XG4gICAgICAgIHRoaXMudXBkYXRlVmlld3BvcnRTY3JvbGxpbmcoKTtcbiAgICAgICAgdGhpcy5zZXRWaWV3cG9ydCgpO1xuICAgIH1cblxuICAgIG1vdmluZ0NoYW5nZShpc01vdmluZzogYm9vbGVhbikge1xuICAgICAgICB0aGlzLmlzTW92aW5nID0gaXNNb3Zpbmc7XG4gICAgfVxuXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZGVzdHJveSQubmV4dCgpO1xuICAgICAgICB0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCk7XG4gICAgICAgIEhPU1RfVE9fUk9VR0hfU1ZHLmRlbGV0ZSh0aGlzLmhvc3QpO1xuICAgICAgICBpZiAodGhpcy5yZXNpemVPYnNlcnZlcikge1xuICAgICAgICAgICAgdGhpcy5yZXNpemVPYnNlcnZlci5kaXNjb25uZWN0KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBtYXJrRm9yQ2hlY2soKSB7XG4gICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cblxuICAgIHNjcm9sbFRvUmVjdGFuZ2xlKGNsaWVudDogUmVjdGFuZ2xlQ2xpZW50KSB7XG4gICAgICAgIHRoaXMuY2FsY1ZpZXdCb3goKTtcbiAgICAgICAgdGhpcy51cGRhdGVWaWV3Qm94U3R5bGVzKCk7XG4gICAgICAgIHRoaXMudXBkYXRlVmlld3BvcnRTY3JvbGxpbmcoKTtcbiAgICAgICAgdGhpcy5zZXRWaWV3cG9ydCgpO1xuXG4gICAgICAgIGNvbnN0IHN2Z1JlY3QgPSB0aGlzLmhvc3QuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICAgIGNvbnN0IHZpZXdwb3J0Q29udGFpbmVyQm94ID0gZ2V0Vmlld3BvcnRDb250YWluZXJCb3godGhpcy5ib2FyZCk7XG5cbiAgICAgICAgaWYgKHN2Z1JlY3Qud2lkdGggPiB2aWV3cG9ydENvbnRhaW5lckJveC53aWR0aCB8fCBzdmdSZWN0LmhlaWdodCA+IHZpZXdwb3J0Q29udGFpbmVyQm94LmhlaWdodCkge1xuICAgICAgICAgICAgY29uc3Qgc2Nyb2xsQmFyV2lkdGggPSB0aGlzLnBsYWl0T3B0aW9ucz8uaGlkZVNjcm9sbGJhciA/IFNDUk9MTF9CQVJfV0lEVEggOiAwO1xuICAgICAgICAgICAgY29uc3QgbWF0cml4ID0gdGhpcy5nZXRNYXRyaXgoKTtcbiAgICAgICAgICAgIGNvbnN0IFtub2RlUG9pbnRYLCBub2RlUG9pbnRZXSA9IGNvbnZlcnRUb1ZpZXdwb3J0Q29vcmRpbmF0ZXMoW2NsaWVudC54LCBjbGllbnQueV0sIG1hdHJpeCk7XG4gICAgICAgICAgICBjb25zdCBbZnVsbE5vZGVQb2ludFgsIGZ1bGxOb2RlUG9pbnRZXSA9IGNvbnZlcnRUb1ZpZXdwb3J0Q29vcmRpbmF0ZXMoXG4gICAgICAgICAgICAgICAgW2NsaWVudC54ICsgY2xpZW50LndpZHRoLCBjbGllbnQueSArIGNsaWVudC5oZWlnaHRdLFxuICAgICAgICAgICAgICAgIG1hdHJpeFxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgbGV0IG5ld0xlZnQgPSB0aGlzLnZpZXdwb3J0U3RhdGUuc2Nyb2xsTGVmdCE7XG4gICAgICAgICAgICBsZXQgbmV3VG9wID0gdGhpcy52aWV3cG9ydFN0YXRlLnNjcm9sbFRvcCE7XG5cbiAgICAgICAgICAgIGlmIChub2RlUG9pbnRYIDwgMCkge1xuICAgICAgICAgICAgICAgIG5ld0xlZnQgLT0gTWF0aC5hYnMobm9kZVBvaW50WCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobm9kZVBvaW50WCA+IDAgJiYgZnVsbE5vZGVQb2ludFggPiB2aWV3cG9ydENvbnRhaW5lckJveC53aWR0aCkge1xuICAgICAgICAgICAgICAgIG5ld0xlZnQgKz0gZnVsbE5vZGVQb2ludFggLSB2aWV3cG9ydENvbnRhaW5lckJveC53aWR0aCArIHNjcm9sbEJhcldpZHRoO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAobm9kZVBvaW50WSA8IDApIHtcbiAgICAgICAgICAgICAgICBuZXdUb3AgLT0gTWF0aC5hYnMobm9kZVBvaW50WSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobm9kZVBvaW50WSA+IDAgJiYgZnVsbE5vZGVQb2ludFkgPiB2aWV3cG9ydENvbnRhaW5lckJveC5oZWlnaHQpIHtcbiAgICAgICAgICAgICAgICBuZXdUb3AgKz0gZnVsbE5vZGVQb2ludFkgLSB2aWV3cG9ydENvbnRhaW5lckJveC5oZWlnaHQgKyBzY3JvbGxCYXJXaWR0aDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKG5ld0xlZnQgIT09IHRoaXMudmlld3BvcnRTdGF0ZS5zY3JvbGxMZWZ0ISB8fCBuZXdUb3AgIT09IHRoaXMudmlld3BvcnRTdGF0ZS5zY3JvbGxUb3AhKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTY3JvbGwobmV3TGVmdCwgbmV3VG9wKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cbiJdfQ==
514
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm9hcmQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcGFja2FnZXMvcGxhaXQvc3JjL2JvYXJkL2JvYXJkLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUgsdUJBQXVCLEVBRXZCLFNBQVMsRUFDVCxZQUFZLEVBQ1osVUFBVSxFQUNWLFlBQVksRUFDWixXQUFXLEVBQ1gsS0FBSyxFQUlMLE1BQU0sRUFJTixTQUFTLEVBQ1osTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxLQUFLLE1BQU0sbUJBQW1CLENBQUM7QUFFdEMsT0FBTyxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDMUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNuRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFLaEQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3RELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUNsRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDdEQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFDSCxnQkFBZ0IsRUFDaEIsY0FBYyxFQUNkLDRCQUE0QixFQUM1Qix1QkFBdUIsRUFDdkIseUJBQXlCLEVBQ3pCLGFBQWEsRUFDYixpQkFBaUIsRUFDakIsT0FBTyxFQUNQLGNBQWMsRUFDZCxnQ0FBZ0MsRUFDbkMsTUFBTSxVQUFVLENBQUM7QUFDbEIsT0FBTyxFQUNILGtCQUFrQixFQUNsQixnQkFBZ0IsRUFDaEIs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LFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQ3hCLE1BQU0sQ0FBQyxHQUFHLEVBQUU7WUFDUixPQUFPLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUM7UUFDdkUsQ0FBQyxDQUFDLENBQ0w7YUFDQSxTQUFTLENBQUMsQ0FBQyxLQUFvQixFQUFFLEVBQUU7WUFDaEMsSUFBSSxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDL0IsQ0FBQyxDQUFDLENBQUM7UUFFUCxTQUFTLENBQWdCLFFBQVEsRUFBRSxPQUFPLENBQUM7YUFDdEMsSUFBSSxDQUNELFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQ3hCLE1BQU0sQ0FBQyxHQUFHLEVBQUU7WUFDUixPQUFPLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUM7UUFDdkUsQ0FBQyxDQUFDLENBQ0w7YUFDQSxTQUFTLENBQUMsQ0FBQyxLQUFvQixFQUFFLEVBQUU7WUFDaEMsSUFBSSxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDN0IsQ0FBQyxDQUFDLENBQUM7UUFFUCxTQUFTLENBQWlCLFFBQVEsRUFBRSxNQUFNLENBQUM7YUFDdEMsSUFBSSxDQUNELFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQ3hCLE1BQU0sQ0FBQyxHQUFHLEVBQUU7WUFDUixPQUFPLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUM7UUFDdkUsQ0FBQyxDQUFDLENBQ0w7YUFDQSxTQUFTLENBQUMsQ0FBQyxLQUFxQixFQUFFLEVBQUU7WUFDakMs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QUFlO2dCQVU1QixHQUFHO3NCQURGLFNBQVM7dUJBQUMsS0FBSyxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFJM0Isa0JBQWtCO3NCQUR4QixZQUFZO3VCQUFDLGNBQWM7Z0JBSTVCLGlCQUFpQjtzQkFEaEIsU0FBUzt1QkFBQyxtQkFBbUIsRUFBRSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQWZ0ZXJWaWV3SW5pdCxcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBDb21wb25lbnQsXG4gICAgQ29udGVudENoaWxkLFxuICAgIEVsZW1lbnRSZWYsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIEhvc3RCaW5kaW5nLFxuICAgIElucHV0LFxuICAgIE9uQ2hhbmdlcyxcbiAgICBPbkRlc3Ryb3ksXG4gICAgT25Jbml0LFxuICAgIE91dHB1dCxcbiAgICBSZW5kZXJlcjIsXG4gICAgU2ltcGxlQ2hhbmdlcyxcbiAgICBUZW1wbGF0ZVJlZixcbiAgICBWaWV3Q2hpbGRcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgcm91Z2ggZnJvbSAncm91Z2hqcy9iaW4vcm91Z2gnO1xuaW1wb3J0IHsgUm91Z2hTVkcgfSBmcm9tICdyb3VnaGpzL2Jpbi9zdmcnO1xuaW1wb3J0IHsgZnJvbUV2ZW50LCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBmaWx0ZXIsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IFNDUk9MTF9CQVJfV0lEVEggfSBmcm9tICcuLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgUGxhaXRCb2FyZCwgUGxhaXRCb2FyZENoYW5nZUV2ZW50LCBQbGFpdEJvYXJkT3B0aW9ucywgUGxhaXRCb2FyZFZpZXdwb3J0IH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9ib2FyZCc7XG5pbXBvcnQgeyBQbGFpdEVsZW1lbnQgfSBmcm9tICcuLi9pbnRlcmZhY2VzL2VsZW1lbnQnO1xuaW1wb3J0IHsgUGxhaXRQbHVnaW4gfSBmcm9tICcuLi9pbnRlcmZhY2VzL3BsdWdpbic7XG5pbXBvcnQgeyBWaWV3cG9ydCB9IGZyb20gJy4uL2ludGVyZmFjZXMvdmlld3BvcnQnO1xuaW1wb3J0IHsgY3JlYXRlQm9hcmQgfSBmcm9tICcuLi9wbHVnaW5zL2NyZWF0ZS1ib2FyZCc7XG5pbXBvcnQgeyB3aXRoQm9hcmQgfSBmcm9tICcuLi9wbHVnaW5zL3dpdGgtYm9hcmQnO1xuaW1wb3J0IHsgd2l0aEhpc3RvcnkgfSBmcm9tICcuLi9wbHVnaW5zL3dpdGgtaGlzdG9yeSc7XG5pbXBvcnQgeyB3aXRoSGFuZFBvaW50ZXIgfSBmcm9tICcuLi9wbHVnaW5zL3dpdGgtaGFuZCc7XG5pbXBvcnQgeyB3aXRoU2VsZWN0aW9uIH0gZnJvbSAnLi4vcGx1Z2lucy93aXRoLXNlbGVjdGlvbic7XG5pbXBvcnQgeyBUcmFuc2Zvcm1zIH0gZnJvbSAnLi4vdHJhbnNmb3Jtcyc7XG5pbXBvcnQge1xuICAgIGdldFJvb3RHcm91cEJCb3gsXG4gICAgY2xhbXBab29tTGV2ZWwsXG4gICAgY29udmVydFRvVmlld3BvcnRDb29yZGluYXRlcyxcbiAgICBnZXRWaWV3cG9ydENvbnRhaW5lckJveCxcbiAgICBpbnZlcnRWaWV3cG9ydENvb3JkaW5hdGVzLFxuICAgIHRyYW5zZm9ybU1hdDMsXG4gICAgZ2V0Qm9hcmRDbGllbnRCb3gsXG4gICAgdG9Qb2ludCxcbiAgICB0cmFuc2Zvcm1Qb2ludCxcbiAgICBkaXN0YW5jZUJldHdlZW5Qb2ludEFuZFJlY3RhbmdsZVxufSBmcm9tICcuLi91dGlscyc7XG5pbXBvcnQge1xuICAgIEJPQVJEX1RPX09OX0NIQU5HRSxcbiAgICBJU19URVhUX0VESVRBQkxFLFxuICAgIEJPQVJEX1RPX0NPTVBPTkVOVCxcbiAgICBCT0FSRF9UT19FTEVNRU5UX0hPU1QsXG4gICAgQk9BUkRfVE9fSE9TVCxcbiAgICBCT0FSRF9UT19ST1VHSF9TVkcsXG4gICAgQk9BUkRfVE9fTU9WSU5HX1BPSU5UXG59IGZyb20gJy4uL3V0aWxzL3dlYWstbWFwcyc7XG5pbXBvcnQgeyBCb2FyZENvbXBvbmVudEludGVyZmFjZSB9IGZyb20gJy4vYm9hcmQuY29tcG9uZW50LmludGVyZmFjZSc7XG5pbXBvcnQgeyBSZWN0YW5nbGVDbGllbnQgfSBmcm9tICcuLi9pbnRlcmZhY2VzL3JlY3RhbmdsZS1jbGllbnQnO1xuaW1wb3J0IHsgUGxhaXRQb2ludGVyVHlwZSB9IGZyb20gJy4uL2ludGVyZmFjZXMvcG9pbnRlcic7XG5cbmNvbnN0IEVsZW1lbnRIb3N0Q2xhc3MgPSAnZWxlbWVudC1ob3N0JztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdwbGFpdC1ib2FyZCcsXG4gICAgdGVtcGxhdGU6IGBcbiAgICAgICAgPGRpdiBjbGFzcz1cInZpZXdwb3J0LWNvbnRhaW5lclwiICN2aWV3cG9ydENvbnRhaW5lcj5cbiAgICAgICAgICAgIDxzdmcgI3N2ZyB3aWR0aD1cIjEwMCVcIiBoZWlnaHQ9XCIxMDAlXCIgc3R5bGU9XCJwb3NpdGlvbjogcmVsYXRpdmU7XCI+PGcgY2xhc3M9XCJlbGVtZW50LWhvc3RcIj48L2c+PC9zdmc+XG4gICAgICAgICAgICA8cGxhaXQtZWxlbWVudFxuICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBpdGVtIG9mIGJvYXJkLmNoaWxkcmVuOyBsZXQgaW5kZXggPSBpbmRleDsgdHJhY2tCeTogdHJhY2tCeVwiXG4gICAgICAgICAgICAgICAgW2luZGV4XT1cImluZGV4XCJcbiAgICAgICAgICAgICAgICBbZWxlbWVudF09XCJpdGVtXCJcbiAgICAgICAgICAgICAgICBbYm9hcmRdPVwiYm9hcmRcIlxuICAgICAgICAgICAgICAgIFtzZWxlY3Rpb25dPVwiYm9hcmQuc2VsZWN0aW9uXCJcbiAgICAgICAgICAgID48L3BsYWl0LWVsZW1lbnQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8cGxhaXQtdG9vbGJhclxuICAgICAgICAgICAgKm5nSWY9XCJpc0ZvY3VzZWQgJiYgIXRvb2xiYXJUZW1wbGF0ZVJlZlwiXG4gICAgICAgICAgICBbYm9hcmRdPVwiYm9hcmRcIlxuICAgICAgICAgICAgKGFkYXB0SGFuZGxlKT1cImFkYXB0SGFuZGxlKClcIlxuICAgICAgICAgICAgKHpvb21JbkhhbmRsZSk9XCJ6b29tSW5IYW5kbGUoKVwiXG4gICAgICAgICAgICAoem9vbU91dEhhbmRsZSk9XCJ6b29tT3V0SGFuZGxlKClcIlxuICAgICAgICAgICAgKHJlc2V0Wm9vbUhhbmRlbCk9XCJyZXNldFpvb21IYW5kZWwoKVwiXG4gICAgICAgID48L3BsYWl0LXRvb2xiYXI+XG4gICAgICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbiAgICBgLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXG59KVxuZXhwb3J0IGNsYXNzIFBsYWl0Qm9hcmRDb21wb25lbnQgaW1wbGVtZW50cyBCb2FyZENvbXBvbmVudEludGVyZmFjZSwgT25Jbml0LCBPbkNoYW5nZXMsIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSB7XG4gICAgaGFzSW5pdGlhbGl6ZWQgPSBmYWxzZTtcblxuICAgIGJvYXJkITogUGxhaXRCb2FyZDtcblxuICAgIHJvdWdoU1ZHITogUm91Z2hTVkc7XG5cbiAgICBkZXN0cm95JCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgICB2aWV3cG9ydFN0YXRlOiBQbGFpdEJvYXJkVmlld3BvcnQgPSB7XG4gICAgICAgIHpvb206IDEsXG4gICAgICAgIGF1dG9GaXRQYWRkaW5nOiA4XG4gICAgfTtcblxuICAgIHByaXZhdGUgcmVzaXplT2JzZXJ2ZXIhOiBSZXNpemVPYnNlcnZlcjtcblxuICAgIEBJbnB1dCgpIHBsYWl0VmFsdWU6IFBsYWl0RWxlbWVudFtdID0gW107XG5cbiAgICBASW5wdXQoKSBwbGFpdFZpZXdwb3J0ITogVmlld3BvcnQ7XG5cbiAgICBASW5wdXQoKSBwbGFpdFBsdWdpbnM6IFBsYWl0UGx1Z2luW10gPSBbXTtcblxuICAgIEBJbnB1dCgpIHBsYWl0T3B0aW9ucyE6IFBsYWl0Qm9hcmRPcHRpb25zO1xuXG4gICAgQE91dHB1dCgpIHBsYWl0Q2hhbmdlOiBFdmVudEVtaXR0ZXI8UGxhaXRCb2FyZENoYW5nZUV2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAgIEBPdXRwdXQoKSBwbGFpdEJvYXJkSW5pdGlhbGl6ZWQ6IEV2ZW50RW1pdHRlcjxQbGFpdEJvYXJkPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAgIGdldCBpc0ZvY3VzZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmJvYXJkPy5zZWxlY3Rpb247XG4gICAgfVxuXG4gICAgZ2V0IGhvc3QoKTogU1ZHU1ZHRWxlbWVudCB7XG4gICAgICAgIHJldHVybiB0aGlzLnN2Zy5uYXRpdmVFbGVtZW50O1xuICAgIH1cblxuICAgIEBIb3N0QmluZGluZygnY2xhc3MnKVxuICAgIGdldCBob3N0Q2xhc3MoKSB7XG4gICAgICAgIHJldHVybiBgcGxhaXQtYm9hcmQtY29udGFpbmVyICR7dGhpcy5ib2FyZC5wb2ludGVyfWA7XG4gICAgfVxuXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5yZWFkb25seScpXG4gICAgZ2V0IHJlYWRvbmx5KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5ib2FyZC5vcHRpb25zLnJlYWRvbmx5O1xuICAgIH1cblxuICAgIEBIb3N0QmluZGluZygnY2xhc3MuZm9jdXNlZCcpXG4gICAgZ2V0IGZvY3VzZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzRm9jdXNlZDtcbiAgICB9XG5cbiAgICBnZXQgbmF0aXZlRWxlbWVudCgpOiBIVE1MRWxlbWVudCB7XG4gICAgICAgIHJldHVybiB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtcbiAgICB9XG5cbiAgICBAVmlld0NoaWxkKCdzdmcnLCB7IHN0YXRpYzogdHJ1ZSB9KVxuICAgIHN2ZyE6IEVsZW1lbnRSZWY7XG5cbiAgICBAQ29udGVudENoaWxkKCdwbGFpdFRvb2xiYXInKVxuICAgIHB1YmxpYyB0b29sYmFyVGVtcGxhdGVSZWYhOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gICAgQFZpZXdDaGlsZCgndmlld3BvcnRDb250YWluZXInLCB7IHJlYWQ6IEVsZW1lbnRSZWYsIHN0YXRpYzogdHJ1ZSB9KVxuICAgIHZpZXdwb3J0Q29udGFpbmVyITogRWxlbWVudFJlZjtcblxuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyBjZHI6IENoYW5nZURldGVjdG9yUmVmLCBwcml2YXRlIHJlbmRlcmVyMjogUmVuZGVyZXIyLCBwcml2YXRlIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+KSB7fVxuXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGVsZW1lbnRIb3N0ID0gdGhpcy5ob3N0LnF1ZXJ5U2VsZWN0b3IoYC4ke0VsZW1lbnRIb3N0Q2xhc3N9YCkgYXMgU1ZHR0VsZW1lbnQ7XG4gICAgICAgIGNvbnN0IHJvdWdoU1ZHID0gcm91Z2guc3ZnKHRoaXMuaG9zdCBhcyBTVkdTVkdFbGVtZW50LCB7XG4gICAgICAgICAgICBvcHRpb25zOiB7IHJvdWdobmVzczogMCwgc3Ryb2tlV2lkdGg6IDEgfVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5pbml0aWFsaXplUGx1Z2lucygpO1xuICAgICAgICB0aGlzLmluaXRpYWxpemVFdmVudHMoKTtcbiAgICAgICAgdGhpcy52aWV3cG9ydFNjcm9sbExpc3RlbmVyKCk7XG4gICAgICAgIHRoaXMuZWxlbWVudFJlc2l6ZUxpc3RlbmVyKCk7XG4gICAgICAgIEJPQVJEX1RPX0NPTVBPTkVOVC5zZXQodGhpcy5ib2FyZCwgdGhpcyk7XG4gICAgICAgIEJPQVJEX1RPX1JPVUdIX1NWRy5zZXQodGhpcy5ib2FyZCwgcm91Z2hTVkcpO1xuICAgICAgICBCT0FSRF9UT19IT1NULnNldCh0aGlzLmJvYXJkLCB0aGlzLmhvc3QpO1xuICAgICAgICBCT0FSRF9UT19FTEVNRU5UX0hPU1Quc2V0KHRoaXMuYm9hcmQsIGVsZW1lbnRIb3N0KTtcbiAgICAgICAgQk9BUkRfVE9fT05fQ0hBTkdFLnNldCh0aGlzLmJvYXJkLCAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgICBjb25zdCBjaGFuZ2VFdmVudDogUGxhaXRCb2FyZENoYW5nZUV2ZW50ID0ge1xuICAgICAgICAgICAgICAgIGNoaWxkcmVuOiB0aGlzLmJvYXJkLmNoaWxkcmVuLFxuICAgICAgICAgICAgICAgIG9wZXJhdGlvbnM6IHRoaXMuYm9hcmQub3BlcmF0aW9ucyxcbiAgICAgICAgICAgICAgICB2aWV3cG9ydDogdGhpcy5ib2FyZC52aWV3cG9ydCxcbiAgICAgICAgICAgICAgICBzZWxlY3Rpb246IHRoaXMuYm9hcmQuc2VsZWN0aW9uXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgdGhpcy5wbGFpdENoYW5nZS5lbWl0KGNoYW5nZUV2ZW50KTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuaGFzSW5pdGlhbGl6ZWQgPSB0cnVlO1xuICAgIH1cblxuICAgIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcbiAgICAgICAgaWYgKHRoaXMuaGFzSW5pdGlhbGl6ZWQpIHtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlQ2hhbmdlID0gY2hhbmdlc1sncGxhaXRWYWx1ZSddO1xuICAgICAgICAgICAgY29uc3Qgb3B0aW9ucyA9IGNoYW5nZXNbJ3BsYWl0T3B0aW9ucyddO1xuXG4gICAgICAgICAgICBpZiAodmFsdWVDaGFuZ2UpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmJvYXJkLmNoaWxkcmVuID0gdmFsdWVDaGFuZ2UuY3VycmVudFZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG9wdGlvbnMpIHRoaXMuYm9hcmQub3B0aW9ucyA9IG9wdGlvbnMuY3VycmVudFZhbHVlO1xuICAgICAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMucGxhaXRCb2FyZEluaXRpYWxpemVkLmVtaXQodGhpcy5ib2FyZCk7XG4gICAgICAgIHRoaXMuaW5pdFZpZXdwb3J0Q29udGFpbmVyKCk7XG4gICAgICAgIHRoaXMuY2FsY1ZpZXdCb3godGhpcy52aWV3cG9ydFN0YXRlLnpvb20pO1xuICAgICAgICB0aGlzLmluaXRWaWV3cG9ydCgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgaW5pdGlhbGl6ZVBsdWdpbnMoKSB7XG4gICAgICAgIGxldCBib2FyZCA9IHdpdGhIYW5kUG9pbnRlcih3aXRoSGlzdG9yeSh3aXRoU2VsZWN0aW9uKHdpdGhCb2FyZChjcmVhdGVCb2FyZCh0aGlzLnBsYWl0VmFsdWUsIHRoaXMucGxhaXRPcHRpb25zKSkpKSk7XG4gICAgICAgIHRoaXMucGxhaXRQbHVnaW5zLmZvckVhY2gocGx1Z2luID0+IHtcbiAgICAgICAgICAgIGJvYXJkID0gcGx1Z2luKGJvYXJkKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuYm9hcmQgPSBib2FyZDtcblxuICAgICAgICBpZiAodGhpcy5wbGFpdFZpZXdwb3J0KSB7XG4gICAgICAgICAgICB0aGlzLmJvYXJkLnZpZXdwb3J0ID0gdGhpcy5wbGFpdFZpZXdwb3J0O1xuICAgICAgICAgICAgdGhpcy51cGRhdGVWaWV3cG9ydFN0YXRlKHtcbiAgICAgICAgICAgICAgICB6b29tOiB0aGlzLnBsYWl0Vmlld3BvcnQ/Lnpvb20gPz8gMVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGluaXRpYWxpemVFdmVudHMoKSB7XG4gICAgICAgIGZyb21FdmVudDxNb3VzZUV2ZW50Pih0aGlzLmhvc3QsICdtb3VzZWRvd24nKVxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoZXZlbnQ6IE1vdXNlRXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmJvYXJkLm1vdXNlZG93bihldmVudCk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICBmcm9tRXZlbnQ8TW91c2VFdmVudD4odGhpcy5ob3N0LCAnbW91c2Vtb3ZlJylcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKGV2ZW50OiBNb3VzZUV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5ib2FyZC5tb3VzZW1vdmUoZXZlbnQpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgZnJvbUV2ZW50PE1vdXNlRXZlbnQ+KGRvY3VtZW50LCAnbW91c2Vtb3ZlJylcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKGV2ZW50OiBNb3VzZUV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgQk9BUkRfVE9fTU9WSU5HX1BPSU5ULnNldCh0aGlzLmJvYXJkLCBbZXZlbnQueCwgZXZlbnQueV0pO1xuICAgICAgICAgICAgICAgIHRoaXMuYm9hcmQuZ2xvYmFsTW91c2Vtb3ZlKGV2ZW50KTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIGZyb21FdmVudDxNb3VzZUV2ZW50Pih0aGlzLmhvc3QsICdtb3VzZXVwJylcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKGV2ZW50OiBNb3VzZUV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5ib2FyZC5tb3VzZXVwKGV2ZW50KTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIGZyb21FdmVudDxNb3VzZUV2ZW50Pihkb2N1bWVudCwgJ21vdXNldXAnKVxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoZXZlbnQ6IE1vdXNlRXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmJvYXJkLmdsb2JhbE1vdXNldXAoZXZlbnQpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgZnJvbUV2ZW50PE1vdXNlRXZlbnQ+KHRoaXMuaG9zdCwgJ2RibGNsaWNrJylcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKGV2ZW50OiBNb3VzZUV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5ib2FyZC5kYmxjbGljayhldmVudCk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICBmcm9tRXZlbnQ8S2V5Ym9hcmRFdmVudD4oZG9jdW1lbnQsICdrZXlkb3duJylcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSxcbiAgICAgICAgICAgICAgICBmaWx0ZXIoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gIUlTX1RFWFRfRURJVEFCTEUuZ2V0KHRoaXMuYm9hcmQpICYmICEhdGhpcy5ib2FyZC5zZWxlY3Rpb247XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKGV2ZW50OiBLZXlib2FyZEV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5ib2FyZD8ua2V5ZG93bihldmVudCk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICBmcm9tRXZlbnQ8S2V5Ym9hcmRFdmVudD4oZG9jdW1lbnQsICdrZXl1cCcpXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICB0YWtlVW50aWwodGhpcy5kZXN0cm95JCksXG4gICAgICAgICAgICAgICAgZmlsdGVyKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICFJU19URVhUX0VESVRBQkxFLmdldCh0aGlzLmJvYXJkKSAmJiAhIXRoaXMuYm9hcmQuc2VsZWN0aW9uO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChldmVudDogS2V5Ym9hcmRFdmVudCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuYm9hcmQ/LmtleXVwKGV2ZW50KTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIGZyb21FdmVudDxDbGlwYm9hcmRFdmVudD4oZG9jdW1lbnQsICdjb3B5JylcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSxcbiAgICAgICAgICAgICAgICBmaWx0ZXIoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gIUlTX1RFWFRfRURJVEFCTEUuZ2V0KHRoaXMuYm9hcmQpICYmICEhdGhpcy5ib2FyZC5zZWxlY3Rpb247XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKGV2ZW50OiBDbGlwYm9hcmRFdmVudCkgPT4ge1xuICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgdGhpcy5ib2FyZD8uc2V0RnJhZ21lbnQoZXZlbnQuY2xpcGJvYXJkRGF0YSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICBmcm9tRXZlbnQ8Q2xpcGJvYXJkRXZlbnQ+KGRvY3VtZW50LCAncGFzdGUnKVxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMuZGVzdHJveSQpLFxuICAgICAgICAgICAgICAgIGZpbHRlcigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAhSVNfVEVYVF9FRElUQUJMRS5nZXQodGhpcy5ib2FyZCkgJiYgISF0aGlzLmJvYXJkLnNlbGVjdGlvbiAmJiAhdGhpcy5yZWFkb25seTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoY2xpcGJvYXJkRXZlbnQ6IENsaXBib2FyZEV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgbW91c2VQb2ludCA9IEJPQVJEX1RPX01PVklOR19QT0lOVC5nZXQodGhpcy5ib2FyZCk7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVjdCA9IHRoaXMubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgICAgICAgICBpZiAobW91c2VQb2ludCAmJiBkaXN0YW5jZUJldHdlZW5Qb2ludEFuZFJlY3RhbmdsZShtb3VzZVBvaW50WzBdLCBtb3VzZVBvaW50WzFdLCByZWN0KSA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB0YXJnZXRQb2ludCA9IHRyYW5zZm9ybVBvaW50KHRoaXMuYm9hcmQsIHRvUG9pbnQobW91c2VQb2ludFswXSwgbW91c2VQb2ludFsxXSwgdGhpcy5ob3N0KSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYm9hcmQuaW5zZXJ0RnJhZ21lbnQoY2xpcGJvYXJkRXZlbnQuY2xpcGJvYXJkRGF0YSwgdGFyZ2V0UG9pbnQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIGZyb21FdmVudDxDbGlwYm9hcmRFdmVudD4oZG9jdW1lbnQsICdjdXQnKVxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMuZGVzdHJveSQpLFxuICAgICAgICAgICAgICAgIGZpbHRlcigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAhSVNfVEVYVF9FRElUQUJMRS5nZXQodGhpcy5ib2FyZCkgJiYgISF0aGlzLmJvYXJkLnNlbGVjdGlvbjtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoZXZlbnQ6IENsaXBib2FyZEV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICB0aGlzLmJvYXJkPy5zZXRGcmFnbWVudChldmVudC5jbGlwYm9hcmREYXRhKTtcbiAgICAgICAgICAgICAgICB0aGlzLmJvYXJkPy5kZWxldGVGcmFnbWVudChldmVudC5jbGlwYm9hcmREYXRhKTtcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgdmlld3BvcnRTY3JvbGxMaXN0ZW5lcigpIHtcbiAgICAgICAgZnJvbUV2ZW50PE1vdXNlRXZlbnQ+KHRoaXMudmlld3BvcnRDb250YWluZXIubmF0aXZlRWxlbWVudCwgJ3Njcm9sbCcpXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICB0YWtlVW50aWwodGhpcy5kZXN0cm95JCksXG4gICAgICAgICAgICAgICAgZmlsdGVyKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICEhdGhpcy5pc0ZvY3VzZWQ7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKGV2ZW50OiBFdmVudCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHsgc2Nyb2xsTGVmdCwgc2Nyb2xsVG9wIH0gPSBldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQ7XG4gICAgICAgICAgICAgICAgY29uc3QgbGVmdCA9IHRoaXMudmlld3BvcnRTdGF0ZS5zY3JvbGxMZWZ0ITtcbiAgICAgICAgICAgICAgICBjb25zdCB0b3AgPSB0aGlzLnZpZXdwb3J0U3RhdGUuc2Nyb2xsVG9wITtcbiAgICAgICAgICAgICAgICBpZiAoTWF0aC5hYnMobGVmdCAtIHNjcm9sbExlZnQpID49IDEgfHwgTWF0aC5hYnModG9wIC0gc2Nyb2xsVG9wKSA+PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0U2Nyb2xsTGVmdChzY3JvbGxMZWZ0KTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTY3JvbGxUb3Aoc2Nyb2xsVG9wKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRWaWV3cG9ydCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgZWxlbWVudFJlc2l6ZUxpc3RlbmVyKCkge1xuICAgICAgICB0aGlzLnJlc2l6ZU9ic2VydmVyID0gbmV3IFJlc2l6ZU9ic2VydmVyKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuaW5pdFZpZXdwb3J0Q29udGFpbmVyKCk7XG4gICAgICAgICAgICB0aGlzLmNhbGNWaWV3Qm94KHRoaXMuYm9hcmQudmlld3BvcnQuem9vbSk7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVZpZXdCb3hTdHlsZXMoKTtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlVmlld3BvcnRTY3JvbGxpbmcoKTtcbiAgICAgICAgICAgIHRoaXMuc2V0Vmlld3BvcnQoKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMucmVzaXplT2JzZXJ2ZXIub2JzZXJ2ZSh0aGlzLm5hdGl2ZUVsZW1lbnQpO1xuICAgIH1cblxuICAgIHByaXZhdGUgdXBkYXRlVmlld3BvcnRTdGF0ZShzdGF0ZTogUGFydGlhbDxQbGFpdEJvYXJkVmlld3BvcnQ+KSB7XG4gICAgICAgIHRoaXMudmlld3BvcnRTdGF0ZSA9IHtcbiAgICAgICAgICAgIC4uLnRoaXMudmlld3BvcnRTdGF0ZSxcbiAgICAgICAgICAgIC4uLnN0YXRlXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgaW5pdFZpZXdwb3J0Q29udGFpbmVyKCkge1xuICAgICAgICBjb25zdCB7IHdpZHRoLCBoZWlnaHQgfSA9IGdldEJvYXJkQ2xpZW50Qm94KHRoaXMuYm9hcmQpO1xuICAgICAgICB0aGlzLnJlbmRlcmVyMi5zZXRTdHlsZSh0aGlzLnZpZXdwb3J0Q29udGFpbmVyLm5hdGl2ZUVsZW1lbnQsICd3aWR0aCcsIGAke3dpZHRofXB4YCk7XG4gICAgICAgIHRoaXMucmVuZGVyZXIyLnNldFN0eWxlKHRoaXMudmlld3BvcnRDb250YWluZXIubmF0aXZlRWxlbWVudCwgJ2hlaWdodCcsIGAke2hlaWdodH1weGApO1xuICAgIH1cblxuICAgIGluaXRWaWV3cG9ydCh2aWV3cG9ydCA9IHRoaXMuYm9hcmQudmlld3BvcnQpIHtcbiAgICAgICAgY29uc3Qgb3JpZ2luYXRpb25Db29yZCA9IHZpZXdwb3J0Py5vcmlnaW5hdGlvbkNvb3JkO1xuICAgICAgICBjb25zdCB6b29tID0gdmlld3BvcnQ/Lnpvb20gPz8gdGhpcy52aWV3cG9ydFN0YXRlLnpvb207XG5cbiAgICAgICAgaWYgKG9yaWdpbmF0aW9uQ29vcmQpIHtcbiAgICAgICAgICAgIGNvbnN0IG1hdHJpeCA9IHRoaXMuZ2V0TWF0cml4KCk7XG4gICAgICAgICAgICBjb25zdCBbcG9pbnRYLCBwb2ludFldID0gaW52ZXJ0Vmlld3BvcnRDb29yZGluYXRlcyhbMCwgMF0sIG1hdHJpeCk7XG4gICAgICAgICAgICBjb25zdCBzY3JvbGxMZWZ0ID0gdGhpcy52aWV3cG9ydFN0YXRlLnNjcm9sbExlZnQhO1xuICAgICAgICAgICAgY29uc3Qgc2Nyb2xsVG9wID0gdGhpcy52aWV3cG9ydFN0YXRlLnNjcm9sbFRvcCE7XG4gICAgICAgICAgICBjb25zdCBsZWZ0ID0gc2Nyb2xsTGVmdCArIChvcmlnaW5hdGlvbkNvb3JkWzBdIC0gcG9pbnRYKSAqIHpvb207XG4gICAgICAgICAgICBjb25zdCB0b3AgPSBzY3JvbGxUb3AgKyAob3JpZ2luYXRpb25Db29yZFsxXSAtIHBvaW50WSkgKiB6b29tO1xuICAgICAgICAgICAgdGhpcy5zZXRTY3JvbGwobGVmdCwgdG9wKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuYWRhcHRIYW5kbGUoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNhbGNWaWV3Qm94KHpvb20gPSB0aGlzLnZpZXdwb3J0U3RhdGUuem9vbSkge1xuICAgICAgICB6b29tID0gY2xhbXBab29tTGV2ZWwoem9vbSk7XG5cbiAgICAgICAgY29uc3Qgc2Nyb2xsQmFyV2lkdGggPSB0aGlzLnBsYWl0T3B0aW9ucz8uaGlkZVNjcm9sbGJhciA/IFNDUk9MTF9CQVJfV0lEVEggOiAwO1xuICAgICAgICBjb25zdCB2aWV3cG9ydENvbnRhaW5lckJveCA9IGdldFZpZXdwb3J0Q29udGFpbmVyQm94KHRoaXMuYm9hcmQpO1xuICAgICAgICBjb25zdCBncm91cEJCb3ggPSBnZXRSb290R3JvdXBCQm94KHRoaXMuYm9hcmQsIHpvb20pO1xuICAgICAgICBjb25zdCBob3Jpem9udGFsUGFkZGluZyA9IHZpZXdwb3J0Q29udGFpbmVyQm94LndpZHRoIC8gMjtcbiAgICAgICAgY29uc3QgdmVydGljYWxQYWRkaW5nID0gdmlld3BvcnRDb250YWluZXJCb3guaGVpZ2h0IC8gMjtcbiAgICAgICAgY29uc3Qgdmlld3BvcnRXaWR0aCA9IChncm91cEJCb3gucmlnaHQgLSBncm91cEJCb3gubGVmdCkgKiB6b29tICsgMiAqIGhvcml6b250YWxQYWRkaW5nICsgc2Nyb2xsQmFyV2lkdGg7XG4gICAgICAgIGNvbnN0IHZpZXdwb3J0SGVpZ2h0ID0gKGdyb3VwQkJveC5ib3R0b20gLSBncm91cEJCb3gudG9wKSAqIHpvb20gKyAyICogdmVydGljYWxQYWRkaW5nICsgc2Nyb2xsQmFyV2lkdGg7XG5cbiAgICAgICAgY29uc3Qgdmlld0JveCA9IFtcbiAgICAgICAgICAgIGdyb3VwQkJveC5sZWZ0IC0gaG9yaXpvbnRhbFBhZGRpbmcgLyB6b29tLFxuICAgICAgICAgICAgZ3JvdXBCQm94LnRvcCAtIHZlcnRpY2FsUGFkZGluZyAvIHpvb20sXG4gICAgICAgICAgICB2aWV3cG9ydFdpZHRoIC8gem9vbSxcbiAgICAgICAgICAgIHZpZXdwb3J0SGVpZ2h0IC8gem9vbVxuICAgICAgICBdO1xuICAgICAgICBjb25zdCBtYXRyaXggPSB0aGlzLmdldE1hdHJpeCgpO1xuICAgICAgICBsZXQgc2Nyb2xsTGVmdDtcbiAgICAgICAgbGV0IHNjcm9sbFRvcDtcblxuICAgICAgICBpZiAobWF0cml4Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIC8vIGZvY3VzUG9pbnRcbiAgICAgICAgICAgIGNvbnN0IGZvY3VzWCA9IHZpZXdwb3J0Q29udGFpbmVyQm94LnggKyB2aWV3cG9ydENvbnRhaW5lckJveC53aWR0aCAvIDI7XG4gICAgICAgICAgICBjb25zdCBmb2N1c1kgPSB2aWV3cG9ydENvbnRhaW5lckJveC55ICsgdmlld3BvcnRDb250YWluZXJCb3guaGVpZ2h0IC8gMjtcbiAgICAgICAgICAgIGNvbnN0IHZpZXdwb3J0Q29udGFpbmVyUG9pbnQgPSBbZm9jdXNYIC0gdmlld3BvcnRDb250YWluZXJCb3gueCwgZm9jdXNZIC0gdmlld3BvcnRDb250YWluZXJCb3gueSwgMV07XG4gICAgICAgICAgICBjb25zdCBwb2ludCA9IGludmVydFZpZXdwb3J0Q29vcmRpbmF0ZXMoW3ZpZXdwb3J0Q29udGFpbmVyUG9pbnRbMF0sIHZpZXdwb3J0Q29udGFpbmVyUG9pbnRbMV1dLCBtYXRyaXgpO1xuICAgICAgICAgICAgY29uc3QgbmV3TWF0cml4ID0gW3pvb20sIDAsIDAsIDAsIHpvb20sIDAsIC16b29tICogdmlld0JveFswXSwgLXpvb20gKiB2aWV3Qm94WzFdLCAxXTtcbiAgICAgICAgICAgIGNvbnN0IG5ld1BvaW50ID0gdHJhbnNmb3JtTWF0MyhbXSwgcG9pbnQsIG5ld01hdHJpeCk7XG5cbiAgICAgICAgICAgIHNjcm9sbExlZnQgPSBuZXdQb2ludFswXSAtIHZpZXdwb3J0Q29udGFpbmVyUG9pbnRbMF07XG4gICAgICAgICAgICBzY3JvbGxUb3AgPSBuZXdQb2ludFsxXSAtIHZpZXdwb3J0Q29udGFpbmVyUG9pbnRbMV07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzY3JvbGxMZWZ0ID0gaG9yaXpvbnRhbFBhZGRpbmc7XG4gICAgICAgICAgICBzY3JvbGxUb3AgPSB2ZXJ0aWNhbFBhZGRpbmc7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy51cGRhdGVWaWV3cG9ydFN0YXRlKHtcbiAgICAgICAgICAgIHZpZXdwb3J0V2lkdGgsXG4gICAgICAgICAgICB2aWV3cG9ydEhlaWdodCxcbiAgICAgICAgICAgIHpvb20sXG4gICAgICAgICAgICB2aWV3Qm94XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnNldFNjcm9sbExlZnQoc2Nyb2xsTGVmdCk7XG4gICAgICAgIHRoaXMuc2V0U2Nyb2xsVG9wKHNjcm9sbFRvcCk7XG4gICAgfVxuXG4gICAgZ2V0TWF0cml4KCk6IG51bWJlcltdIHtcbiAgICAgICAgY29uc3QgeyB2aWV3Qm94LCB6b29tLCBzY3JvbGxMZWZ0LCBzY3JvbGxUb3AgfSA9IHRoaXMudmlld3BvcnRTdGF0ZTtcbiAgICAgICAgaWYgKHNjcm9sbExlZnQhID49IDAgJiYgc2Nyb2xsVG9wISA+PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gW3pvb20sIDAsIDAsIDAsIHpvb20sIDAsIC1zY3JvbGxMZWZ0ISAtIHpvb20gKiB2aWV3Qm94IVswXSwgLXNjcm9sbFRvcCEgLSB6b29tICogdmlld0JveCFbMV0sIDFdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICBzZXRTY3JvbGxMZWZ0KGxlZnQ6IG51bWJlcikge1xuICAgICAgICBjb25zdCB2aWV3cG9ydENvbnRhaW5lckJveCA9IGdldFZpZXdwb3J0Q29udGFpbmVyQm94KHRoaXMuYm9hcmQpO1xuICAgICAgICBjb25zdCBzY3JvbGxCYXJXaWR0aCA9IHRoaXMucGxhaXRPcHRpb25zPy5oaWRlU2Nyb2xsYmFyID8gU0NST0xMX0JBUl9XSURUSCA6IDA7XG4gICAgICAgIGNvbnN0IHsgdmlld3BvcnRXaWR0aCB9ID0gdGhpcy52aWV3cG9ydFN0YXRlO1xuICAgICAgICBjb25zdCB3aWR0aCA9IHZpZXdwb3J0V2lkdGghIC0gdmlld3BvcnRDb250YWluZXJCb3gud2lkdGggKyBzY3JvbGxCYXJXaWR0aDtcbiAgICAgICAgdGhpcy52aWV3cG9ydFN0YXRlLnNjcm9sbExlZnQgPSBsZWZ0IDwgMCA/IDAgOiBsZWZ0ID4gd2lkdGggPyB3aWR0aCA6IGxlZnQ7XG4gICAgfVxuXG4gICAgc2V0U2Nyb2xsVG9wKHRvcDogbnVtYmVyKSB7XG4gICAgICAgIGNvbnN0IHZpZXdwb3J0Q29udGFpbmVyQm94ID0gZ2V0Vmlld3BvcnRDb250YWluZXJCb3godGhpcy5ib2FyZCk7XG4gICAgICAgIGNvbnN0IHNjcm9sbEJhcldpZHRoID0gdGhpcy5wbGFpdE9wdGlvbnM/LmhpZGVTY3JvbGxiYXIgPyBTQ1JPTExfQkFSX1dJRFRIIDogMDtcbiAgICAgICAgY29uc3QgeyB2aWV3cG9ydEhlaWdodCB9ID0gdGhpcy52aWV3cG9ydFN0YXRlO1xuICAgICAgICBjb25zdCBoZWlnaHQgPSB2aWV3cG9ydEhlaWdodCEgLSB2aWV3cG9ydENvbnRhaW5lckJveC5oZWlnaHQgKyBzY3JvbGxCYXJXaWR0aDtcbiAgICAgICAgdGhpcy52aWV3cG9ydFN0YXRlLnNjcm9sbFRvcCA9IHRvcCA8IDAgPyAwIDogdG9wID4gaGVpZ2h0ID8gaGVpZ2h0IDogdG9wO1xuICAgIH1cblxuICAgIHNldFNjcm9sbChsZWZ0OiBudW1iZXIsIHRvcDogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMuc2V0U2Nyb2xsTGVmdChsZWZ0KTtcbiAgICAgICAgdGhpcy5zZXRTY3JvbGxUb3AodG9wKTtcbiAgICAgICAgdGhpcy51cGRhdGVWaWV3Qm94U3R5bGVzKCk7XG4gICAgICAgIHRoaXMudXBkYXRlVmlld3BvcnRTY3JvbGxpbmcoKTtcbiAgICAgICAgdGhpcy5zZXRWaWV3cG9ydCgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgdXBkYXRlVmlld0JveFN0eWxlcygpIHtcbiAgICAgICAgY29uc3QgeyBob3N0LCB2aWV3cG9ydFN0YXRlIH0gPSB0aGlzO1xuICAgICAgICBjb25zdCB7IHZpZXdwb3J0V2lkdGgsIHZpZXdwb3J0SGVpZ2h0LCB2aWV3Qm94IH0gPSB2aWV3cG9ydFN0YXRlO1xuXG4gICAgICAgIHRoaXMucmVuZGVyZXIyLnNldFN0eWxlKGhvc3QsICdkaXNwbGF5JywgJ2Jsb2NrJyk7XG4gICAgICAgIHRoaXMucmVuZGVyZXIyLnNldFN0eWxlKGhvc3QsICd3aWR0aCcsIGAke3ZpZXdwb3J0V2lkdGh9cHhgKTtcbiAgICAgICAgdGhpcy5yZW5kZXJlcjIuc2V0U3R5bGUoaG9zdCwgJ2hlaWdodCcsIGAke3ZpZXdwb3J0SGVpZ2h0fXB4YCk7XG5cbiAgICAgICAgaWYgKHZpZXdCb3ggJiYgdmlld0JveFsyXSA+IDAgJiYgdmlld0JveFszXSA+IDApIHtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIyLnNldEF0dHJpYnV0ZShob3N0LCAndmlld0JveCcsIHZpZXdCb3guam9pbignICcpKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgdXBkYXRlVmlld3BvcnRTY3JvbGxpbmcoKSB7XG4gICAgICAgIGNvbnN0IHsgdmlld3BvcnRDb250YWluZXIsIHZpZXdwb3J0U3RhdGUgfSA9IHRoaXM7XG4gICAgICAgIGNvbnN0IHsgc2Nyb2xsTGVmdCwgc2Nyb2xsVG9wIH0gPSB2aWV3cG9ydFN0YXRlO1xuICAgICAgICB2aWV3cG9ydENvbnRhaW5lci5uYXRpdmVFbGVtZW50LnNjcm9sbExlZnQgPSBzY3JvbGxMZWZ0ITtcbiAgICAgICAgdmlld3BvcnRDb250YWluZXIubmF0aXZlRWxlbWVudC5zY3JvbGxUb3AgPSBzY3JvbGxUb3AhO1xuICAgIH1cblxuICAgIHNldFZpZXdwb3J0KCkge1xuICAgICAgICBjb25zdCB2aWV3cG9ydCA9IHRoaXMuYm9hcmQ/LnZpZXdwb3J0O1xuICAgICAgICBjb25zdCBvbGRPcmlnaW5hdGlvbkNvb3JkID0gdmlld3BvcnQ/Lm9yaWdpbmF0aW9uQ29vcmQgPz8gW107XG4gICAgICAgIGNvbnN0IG1hdHJpeCA9IHRoaXMuZ2V0TWF0cml4KCk7XG4gICAgICAgIGNvbnN0IG9yaWdpbmF0aW9uQ29vcmQgPSBpbnZlcnRWaWV3cG9ydENvb3JkaW5hdGVzKFswLCAwXSwgbWF0cml4KTtcblxuICAgICAgICBpZiAoIW9yaWdpbmF0aW9uQ29vcmQuZXZlcnkoKGl0ZW0sIGluZGV4KSA9PiBpdGVtID09PSBvbGRPcmlnaW5hdGlvbkNvb3JkW2luZGV4XSkpIHtcbiAgICAgICAgICAgIFRyYW5zZm9ybXMuc2V0Vmlld3BvcnQodGhpcy5ib2FyZCwge1xuICAgICAgICAgICAgICAgIC4uLnZpZXdwb3J0LFxuICAgICAgICAgICAgICAgIHpvb206IHRoaXMudmlld3BvcnRTdGF0ZS56b29tLFxuICAgICAgICAgICAgICAgIG9yaWdpbmF0aW9uQ29vcmRcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdHJhY2tCeSA9IChpbmRleDogbnVtYmVyLCBlbGVtZW50OiBQbGFpdEVsZW1lbnQpID0+IHtcbiAgICAgICAgcmV0dXJuIGluZGV4O1xuICAgIH07XG5cbiAgICBhZGFwdEhhbmRsZSgpIHtcbiAgICAgICAgY29uc3QgY29udGFpbmVyQm94ID0gZ2V0Vmlld3BvcnRDb250YWluZXJCb3godGhpcy5ib2FyZCk7XG4gICAgICAgIGNvbnN0IHJvb3RHcm91cCA9IHRoaXMuaG9zdC5maXJzdENoaWxkIGFzIFNWR0dyYXBoaWNzRWxlbWVudDtcbiAgICAgICAgY29uc3QgbWF0cml4ID0gdGhpcy5nZXRNYXRyaXgoKTtcblxuICAgICAgICBjb25zdCByb290R3JvdXBCb3ggPSByb290R3JvdXAuZ2V0QkJveCgpO1xuICAgICAgICBjb25zdCBjZW50ZXJQb2ludCA9IFtjb250YWluZXJCb3gud2lkdGggLyAyLCBjb250YWluZXJCb3guaGVpZ2h0IC8gMl07XG4gICAgICAgIGNvbnN0IHJvb3RHcm91cENlbnRlclggPSByb290R3JvdXBCb3gueCArIHJvb3RHcm91cEJveC53aWR0aCAvIDI7XG4gICAgICAgIGNvbnN0IHJvb3RHcm91cENlbnRlclkgPSByb290R3JvdXBCb3gueSArIHJvb3RHcm91cEJveC5oZWlnaHQgLyAyO1xuICAgICAgICBjb25zdCB0cmFuc2Zvcm1lZFBvaW50ID0gdHJhbnNmb3JtTWF0MyhbXSwgW3Jvb3RHcm91cENlbnRlclgsIHJvb3RHcm91cENlbnRlclksIDFdLCBtYXRyaXgpO1xuXG4gICAgICAgIGNvbnN0IG9mZnNldExlZnQgPSBjZW50ZXJQb2ludFswXSAtIHRyYW5zZm9ybWVkUG9pbnRbMF07XG4gICAgICAgIGNvbnN0IG9mZnNldFRvcCA9IGNlbnRlclBvaW50WzFdIC0gdHJhbnNmb3JtZWRQb2ludFsxXTtcblxuICAgICAgICBjb25zdCB7IGF1dG9GaXRQYWRkaW5nLCB6b29tLCBzY3JvbGxMZWZ0LCBzY3JvbGxUb3AgfSA9IHRoaXMudmlld3BvcnRTdGF0ZTtcbiAgICAgICAgY29uc3Qgdmlld3BvcnRXaWR0aCA9IGNvbnRhaW5lckJveC53aWR0aCAtIDIgKiBhdXRvRml0UGFkZGluZztcbiAgICAgICAgY29uc3Qgdmlld3BvcnRIZWlnaHQgPSBjb250YWluZXJCb3guaGVpZ2h0IC0gMiAqIGF1dG9GaXRQYWRkaW5nO1xuICAgICAgICBsZXQgbmV3Wm9vbSA9IHpvb207XG4gICAgICAgIGlmICh2aWV3cG9ydFdpZHRoIDwgcm9vdEdyb3VwQm94LndpZHRoIHx8IHZpZXdwb3J0SGVpZ2h0IDwgcm9vdEdyb3VwQm94LmhlaWdodCkge1xuICAgICAgICAgICAgbmV3Wm9vbSA9IE1hdGgubWluKHZpZXdwb3J0V2lkdGggLyByb290R3JvdXBCb3gud2lkdGgsIHZpZXdwb3J0SGVpZ2h0IC8gcm9vdEdyb3VwQm94LmhlaWdodCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBuZXdab29tID0gMTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc2V0U2Nyb2xsTGVmdChzY3JvbGxMZWZ0ISAtIG9mZnNldExlZnQpO1xuICAgICAgICB0aGlzLnNldFNjcm9sbFRvcChzY3JvbGxUb3AhIC0gb2Zmc2V0VG9wKTtcbiAgICAgICAgdGhpcy5jYWxjVmlld0JveChuZXdab29tKTtcbiAgICAgICAgdGhpcy51cGRhdGVWaWV3Qm94U3R5bGVzKCk7XG4gICAgICAgIHRoaXMudXBkYXRlVmlld3BvcnRTY3JvbGxpbmcoKTtcbiAgICAgICAgdGhpcy5zZXRWaWV3cG9ydCgpO1xuICAgIH1cblxuICAgIHpvb21JbkhhbmRsZSgpIHtcbiAgICAgICAgdGhpcy5jYWxjVmlld0JveCh0aGlzLnZpZXdwb3J0U3RhdGUuem9vbSArIDAuMSk7XG4gICAgICAgIHRoaXMudXBkYXRlVmlld0JveFN0eWxlcygpO1xuICAgICAgICB0aGlzLnVwZGF0ZVZpZXdwb3J0U2Nyb2xsaW5nKCk7XG4gICAgICAgIHRoaXMuc2V0Vmlld3BvcnQoKTtcbiAgICB9XG5cbiAgICB6b29tT3V0SGFuZGxlKCkge1xuICAgICAgICB0aGlzLmNhbGNWaWV3Qm94KHRoaXMudmlld3BvcnRTdGF0ZS56b29tIC0gMC4xKTtcbiAgICAgICAgdGhpcy51cGRhdGVWaWV3Qm94U3R5bGVzKCk7XG4gICAgICAgIHRoaXMudXBkYXRlVmlld3BvcnRTY3JvbGxpbmcoKTtcbiAgICAgICAgdGhpcy5zZXRWaWV3cG9ydCgpO1xuICAgIH1cblxuICAgIHJlc2V0Wm9vbUhhbmRlbCgpIHtcbiAgICAgICAgdGhpcy5jYWxjVmlld0JveCgxKTtcbiAgICAgICAgdGhpcy51cGRhdGVWaWV3Qm94U3R5bGVzKCk7XG4gICAgICAgIHRoaXMudXBkYXRlVmlld3BvcnRTY3JvbGxpbmcoKTtcbiAgICAgICAgdGhpcy5zZXRWaWV3cG9ydCgpO1xuICAgIH1cblxuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmRlc3Ryb3kkLm5leHQoKTtcbiAgICAgICAgdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpO1xuICAgICAgICBpZiAodGhpcy5yZXNpemVPYnNlcnZlcikge1xuICAgICAgICAgICAgdGhpcy5yZXNpemVPYnNlcnZlci5kaXNjb25uZWN0KCk7XG4gICAgICAgIH1cbiAgICAgICAgQk9BUkRfVE9fUk9VR0hfU1ZHLmRlbGV0ZSh0aGlzLmJvYXJkKTtcbiAgICAgICAgQk9BUkRfVE9fQ09NUE9ORU5ULmRlbGV0ZSh0aGlzLmJvYXJkKTtcbiAgICAgICAgQk9BUkRfVE9fUk9VR0hfU1ZHLmRlbGV0ZSh0aGlzLmJvYXJkKTtcbiAgICAgICAgQk9BUkRfVE9fSE9TVC5kZWxldGUodGhpcy5ib2FyZCk7XG4gICAgICAgIEJPQVJEX1RPX0VMRU1FTlRfSE9TVC5kZWxldGUodGhpcy5ib2FyZCk7XG4gICAgICAgIEJPQVJEX1RPX09OX0NIQU5HRS5kZWxldGUodGhpcy5ib2FyZCk7XG4gICAgfVxuXG4gICAgbWFya0ZvckNoZWNrKCkge1xuICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG5cbiAgICBzY3JvbGxUb1JlY3RhbmdsZShjbGllbnQ6IFJlY3RhbmdsZUNsaWVudCkge1xuICAgICAgICB0aGlzLmNhbGNWaWV3Qm94KCk7XG4gICAgICAgIHRoaXMudXBkYXRlVmlld0JveFN0eWxlcygpO1xuICAgICAgICB0aGlzLnVwZGF0ZVZpZXdwb3J0U2Nyb2xsaW5nKCk7XG4gICAgICAgIHRoaXMuc2V0Vmlld3BvcnQoKTtcblxuICAgICAgICBjb25zdCBzdmdSZWN0ID0gdGhpcy5ob3N0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICBjb25zdCB2aWV3cG9ydENvbnRhaW5lckJveCA9IGdldFZpZXdwb3J0Q29udGFpbmVyQm94KHRoaXMuYm9hcmQpO1xuXG4gICAgICAgIGlmIChzdmdSZWN0LndpZHRoID4gdmlld3BvcnRDb250YWluZXJCb3gud2lkdGggfHwgc3ZnUmVjdC5oZWlnaHQgPiB2aWV3cG9ydENvbnRhaW5lckJveC5oZWlnaHQpIHtcbiAgICAgICAgICAgIGNvbnN0IHNjcm9sbEJhcldpZHRoID0gdGhpcy5wbGFpdE9wdGlvbnM/LmhpZGVTY3JvbGxiYXIgPyBTQ1JPTExfQkFSX1dJRFRIIDogMDtcbiAgICAgICAgICAgIGNvbnN0IG1hdHJpeCA9IHRoaXMuZ2V0TWF0cml4KCk7XG4gICAgICAgICAgICBjb25zdCBbbm9kZVBvaW50WCwgbm9kZVBvaW50WV0gPSBjb252ZXJ0VG9WaWV3cG9ydENvb3JkaW5hdGVzKFtjbGllbnQueCwgY2xpZW50LnldLCBtYXRyaXgpO1xuICAgICAgICAgICAgY29uc3QgW2Z1bGxOb2RlUG9pbnRYLCBmdWxsTm9kZVBvaW50WV0gPSBjb252ZXJ0VG9WaWV3cG9ydENvb3JkaW5hdGVzKFxuICAgICAgICAgICAgICAgIFtjbGllbnQueCArIGNsaWVudC53aWR0aCwgY2xpZW50LnkgKyBjbGllbnQuaGVpZ2h0XSxcbiAgICAgICAgICAgICAgICBtYXRyaXhcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIGxldCBuZXdMZWZ0ID0gdGhpcy52aWV3cG9ydFN0YXRlLnNjcm9sbExlZnQhO1xuICAgICAgICAgICAgbGV0IG5ld1RvcCA9IHRoaXMudmlld3BvcnRTdGF0ZS5zY3JvbGxUb3AhO1xuXG4gICAgICAgICAgICBpZiAobm9kZVBvaW50WCA8IDApIHtcbiAgICAgICAgICAgICAgICBuZXdMZWZ0IC09IE1hdGguYWJzKG5vZGVQb2ludFgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG5vZGVQb2ludFggPiAwICYmIGZ1bGxOb2RlUG9pbnRYID4gdmlld3BvcnRDb250YWluZXJCb3gud2lkdGgpIHtcbiAgICAgICAgICAgICAgICBuZXdMZWZ0ICs9IGZ1bGxOb2RlUG9pbnRYIC0gdmlld3BvcnRDb250YWluZXJCb3gud2lkdGggKyBzY3JvbGxCYXJXaWR0aDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKG5vZGVQb2ludFkgPCAwKSB7XG4gICAgICAgICAgICAgICAgbmV3VG9wIC09IE1hdGguYWJzKG5vZGVQb2ludFkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG5vZGVQb2ludFkgPiAwICYmIGZ1bGxOb2RlUG9pbnRZID4gdmlld3BvcnRDb250YWluZXJCb3guaGVpZ2h0KSB7XG4gICAgICAgICAgICAgICAgbmV3VG9wICs9IGZ1bGxOb2RlUG9pbnRZIC0gdmlld3BvcnRDb250YWluZXJCb3guaGVpZ2h0ICsgc2Nyb2xsQmFyV2lkdGg7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChuZXdMZWZ0ICE9PSB0aGlzLnZpZXdwb3J0U3RhdGUuc2Nyb2xsTGVmdCEgfHwgbmV3VG9wICE9PSB0aGlzLnZpZXdwb3J0U3RhdGUuc2Nyb2xsVG9wISkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0U2Nyb2xsKG5ld0xlZnQsIG5ld1RvcCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG4iXX0=
@@ -1,3 +1,4 @@
1
1
  export const CLIP_BOARD_FORMAT_KEY = 'x-plait-fragment';
2
2
  export const SCROLL_BAR_WIDTH = 20;
3
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9wbGFpdC9zcmMvY29uc3RhbnRzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sQ0FBQyxNQUFNLHFCQUFxQixHQUFHLGtCQUFrQixDQUFDO0FBQ3hELE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixHQUFHLEVBQUUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjb25zdCBDTElQX0JPQVJEX0ZPUk1BVF9LRVkgPSAneC1wbGFpdC1mcmFnbWVudCc7XG5leHBvcnQgY29uc3QgU0NST0xMX0JBUl9XSURUSCA9IDIwO1xuIl19
3
+ export const MAX_RADIUS = 16;
4
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9wbGFpdC9zcmMvY29uc3RhbnRzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sQ0FBQyxNQUFNLHFCQUFxQixHQUFHLGtCQUFrQixDQUFDO0FBRXhELE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixHQUFHLEVBQUUsQ0FBQztBQUVuQyxNQUFNLENBQUMsTUFBTSxVQUFVLEdBQUcsRUFBRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNvbnN0IENMSVBfQk9BUkRfRk9STUFUX0tFWSA9ICd4LXBsYWl0LWZyYWdtZW50JztcblxuZXhwb3J0IGNvbnN0IFNDUk9MTF9CQVJfV0lEVEggPSAyMDtcblxuZXhwb3J0IGNvbnN0IE1BWF9SQURJVVMgPSAxNjtcbiJdfQ==
@@ -1,2 +1,2 @@
1
1
  export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGV4dC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3BsYWl0L3NyYy9jb3JlL2VsZW1lbnQvY29udGV4dC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUGxhaXRCb2FyZCwgUGxhaXRFbGVtZW50LCBTZWxlY3Rpb24gfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzJztcblxuZXhwb3J0IGludGVyZmFjZSBQbGFpdFBsdWdpbkVsZW1lbnRDb250ZXh0PFQgZXh0ZW5kcyBQbGFpdEVsZW1lbnQgPSBQbGFpdEVsZW1lbnQ+IHtcbiAgICBlbGVtZW50OiBUO1xuICAgIHNlbGVjdGlvbjogU2VsZWN0aW9uIHwgbnVsbDtcbiAgICBib2FyZDogUGxhaXRCb2FyZDtcbiAgICBob3N0OiBTVkdFbGVtZW50O1xufVxuIl19
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGV4dC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3BsYWl0L3NyYy9jb3JlL2VsZW1lbnQvY29udGV4dC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUGxhaXRCb2FyZCwgUGxhaXRFbGVtZW50LCBTZWxlY3Rpb24gfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzJztcblxuZXhwb3J0IGludGVyZmFjZSBQbGFpdFBsdWdpbkVsZW1lbnRDb250ZXh0PFQgZXh0ZW5kcyBQbGFpdEVsZW1lbnQgPSBQbGFpdEVsZW1lbnQ+IHtcbiAgICBlbGVtZW50OiBUO1xuICAgIHNlbGVjdGlvbjogU2VsZWN0aW9uIHwgbnVsbDtcbiAgICBib2FyZDogUGxhaXRCb2FyZDtcbn1cbiJdfQ==