@plait/core 0.0.37 → 0.0.39
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/board/board.component.d.ts +11 -13
- package/core/toolbar/toolbar.component.d.ts +4 -5
- package/esm2020/board/board.component.mjs +47 -47
- package/esm2020/core/toolbar/toolbar.component.mjs +13 -9
- package/esm2020/interfaces/board.mjs +1 -1
- package/esm2020/interfaces/cursor.mjs +1 -2
- package/esm2020/interfaces/operation.mjs +4 -13
- package/esm2020/utils/board.mjs +6 -1
- package/fesm2015/plait-core.mjs +66 -68
- package/fesm2015/plait-core.mjs.map +1 -1
- package/fesm2020/plait-core.mjs +65 -67
- package/fesm2020/plait-core.mjs.map +1 -1
- package/interfaces/board.d.ts +2 -2
- package/interfaces/cursor.d.ts +0 -1
- package/package.json +1 -1
- package/utils/board.d.ts +2 -1
|
@@ -1,26 +1,26 @@
|
|
|
1
1
|
import { AfterViewInit, ChangeDetectorRef, ElementRef, EventEmitter, OnDestroy, OnInit, Renderer2, TemplateRef } from '@angular/core';
|
|
2
2
|
import { RoughSVG } from 'roughjs/bin/svg';
|
|
3
3
|
import { Subject } from 'rxjs';
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
4
|
+
import { BaseCursorStatus } from '../interfaces';
|
|
5
|
+
import { PlaitBoardMove, PlaitBoard, PlaitBoardChangeEvent } from '../interfaces/board';
|
|
6
6
|
import { PlaitElement } from '../interfaces/element';
|
|
7
7
|
import { PlaitPlugin } from '../interfaces/plugin';
|
|
8
8
|
import { Viewport } from '../interfaces/viewport';
|
|
9
9
|
import * as i0 from "@angular/core";
|
|
10
10
|
export declare class PlaitBoardComponent implements OnInit, AfterViewInit, OnDestroy {
|
|
11
11
|
private cdr;
|
|
12
|
+
private elementRef;
|
|
12
13
|
private renderer2;
|
|
13
|
-
hostClass: string;
|
|
14
|
+
get hostClass(): string;
|
|
14
15
|
board: PlaitBoard;
|
|
15
16
|
roughSVG: RoughSVG;
|
|
16
17
|
destroy$: Subject<any>;
|
|
17
18
|
svg: ElementRef;
|
|
18
19
|
toolbarTemplateRef: TemplateRef<any>;
|
|
19
|
-
get isDragMoveModel(): boolean;
|
|
20
|
-
cursorStatus: CursorStatus;
|
|
21
20
|
private _viewZoom;
|
|
22
21
|
get viewZoom(): number;
|
|
23
|
-
|
|
22
|
+
plaitBoardMove: PlaitBoardMove;
|
|
23
|
+
get isMoveMode(): boolean;
|
|
24
24
|
get host(): SVGElement;
|
|
25
25
|
get isFocused(): import("../interfaces").Selection | null;
|
|
26
26
|
plaitValue: PlaitElement[];
|
|
@@ -31,7 +31,7 @@ export declare class PlaitBoardComponent implements OnInit, AfterViewInit, OnDes
|
|
|
31
31
|
plaitChange: EventEmitter<PlaitBoardChangeEvent>;
|
|
32
32
|
plaitBoardInitialized: EventEmitter<PlaitBoard>;
|
|
33
33
|
get focused(): import("../interfaces").Selection | null;
|
|
34
|
-
constructor(cdr: ChangeDetectorRef, renderer2: Renderer2);
|
|
34
|
+
constructor(cdr: ChangeDetectorRef, elementRef: ElementRef, renderer2: Renderer2);
|
|
35
35
|
ngOnInit(): void;
|
|
36
36
|
ngAfterViewInit(): void;
|
|
37
37
|
initializePlugins(): void;
|
|
@@ -39,12 +39,10 @@ export declare class PlaitBoardComponent implements OnInit, AfterViewInit, OnDes
|
|
|
39
39
|
refreshViewport(): void;
|
|
40
40
|
updateViewport(): void;
|
|
41
41
|
trackBy: (index: number, element: PlaitElement) => number;
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
dragMoveEnd(e: MouseEvent): void;
|
|
47
|
-
dragMoveHandle(): void;
|
|
42
|
+
initMove(e: MouseEvent): void;
|
|
43
|
+
moving(e: MouseEvent): void;
|
|
44
|
+
moveEnd(): void;
|
|
45
|
+
changeMoveMode(cursorStatus: BaseCursorStatus): void;
|
|
48
46
|
adaptHandle(): void;
|
|
49
47
|
zoomInHandle(): void;
|
|
50
48
|
zoomOutHandle(): void;
|
|
@@ -1,12 +1,11 @@
|
|
|
1
1
|
import { EventEmitter } from '@angular/core';
|
|
2
|
-
import {
|
|
2
|
+
import { BaseCursorStatus, CursorStatus } from '../../interfaces';
|
|
3
3
|
import * as i0 from "@angular/core";
|
|
4
4
|
export declare class PlaitToolbarComponent {
|
|
5
5
|
hostClass: string;
|
|
6
|
-
|
|
6
|
+
cursorStatus: CursorStatus;
|
|
7
7
|
viewZoom: number;
|
|
8
|
-
|
|
9
|
-
dragMoveHandle: EventEmitter<any>;
|
|
8
|
+
moveHandle: EventEmitter<BaseCursorStatus>;
|
|
10
9
|
adaptHandle: EventEmitter<any>;
|
|
11
10
|
zoomInHandle: EventEmitter<any>;
|
|
12
11
|
zoomOutHandle: EventEmitter<any>;
|
|
@@ -17,5 +16,5 @@ export declare class PlaitToolbarComponent {
|
|
|
17
16
|
zoomOut(): void;
|
|
18
17
|
resetZoom(): void;
|
|
19
18
|
static ɵfac: i0.ɵɵFactoryDeclaration<PlaitToolbarComponent, never>;
|
|
20
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<PlaitToolbarComponent, "plait-toolbar", never, { "
|
|
19
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<PlaitToolbarComponent, "plait-toolbar", never, { "cursorStatus": "cursorStatus"; "viewZoom": "viewZoom"; }, { "moveHandle": "moveHandle"; "adaptHandle": "adaptHandle"; "zoomInHandle": "zoomInHandle"; "zoomOutHandle": "zoomOutHandle"; "resetZoomHandel": "resetZoomHandel"; }, never, never>;
|
|
21
20
|
}
|
|
@@ -9,22 +9,21 @@ import { withBoard } from '../plugins/with-board';
|
|
|
9
9
|
import { withHistroy } from '../plugins/with-history';
|
|
10
10
|
import { withSelection } from '../plugins/with-selection';
|
|
11
11
|
import { Transforms } from '../transfroms';
|
|
12
|
-
import { getViewBox, transformViewZoom, transformZoom } from '../utils/board';
|
|
12
|
+
import { getViewBox, transformViewZoom, transformZoom, updateCursorStatus } from '../utils/board';
|
|
13
13
|
import { BOARD_TO_ON_CHANGE, HOST_TO_ROUGH_SVG, IS_TEXT_EDITABLE } from '../utils/weak-maps';
|
|
14
14
|
import * as i0 from "@angular/core";
|
|
15
15
|
import * as i1 from "../core/toolbar/toolbar.component";
|
|
16
16
|
import * as i2 from "../core/element/element.component";
|
|
17
17
|
import * as i3 from "@angular/common";
|
|
18
18
|
export class PlaitBoardComponent {
|
|
19
|
-
constructor(cdr, renderer2) {
|
|
19
|
+
constructor(cdr, elementRef, renderer2) {
|
|
20
20
|
this.cdr = cdr;
|
|
21
|
+
this.elementRef = elementRef;
|
|
21
22
|
this.renderer2 = renderer2;
|
|
22
|
-
this.hostClass = `plait-board-container`;
|
|
23
23
|
this.destroy$ = new Subject();
|
|
24
|
-
this.cursorStatus = BaseCursorStatus.select;
|
|
25
24
|
this._viewZoom = 100;
|
|
26
|
-
this.
|
|
27
|
-
|
|
25
|
+
this.plaitBoardMove = {
|
|
26
|
+
isMoving: false,
|
|
28
27
|
x: 0,
|
|
29
28
|
y: 0
|
|
30
29
|
};
|
|
@@ -38,8 +37,8 @@ export class PlaitBoardComponent {
|
|
|
38
37
|
return index;
|
|
39
38
|
};
|
|
40
39
|
}
|
|
41
|
-
get
|
|
42
|
-
return this.
|
|
40
|
+
get hostClass() {
|
|
41
|
+
return `plait-board-container ${this.board.cursor}`;
|
|
43
42
|
}
|
|
44
43
|
get viewZoom() {
|
|
45
44
|
const vZoom = transformZoom(this.board.viewport.zoom);
|
|
@@ -48,10 +47,16 @@ export class PlaitBoardComponent {
|
|
|
48
47
|
}
|
|
49
48
|
return vZoom;
|
|
50
49
|
}
|
|
50
|
+
get isMoveMode() {
|
|
51
|
+
return this.board.cursor === BaseCursorStatus.move;
|
|
52
|
+
}
|
|
51
53
|
get host() {
|
|
52
54
|
return this.svg.nativeElement;
|
|
53
55
|
}
|
|
54
56
|
get isFocused() {
|
|
57
|
+
if (!this.board?.selection && this.board.cursor === BaseCursorStatus.move) {
|
|
58
|
+
this.changeMoveMode(BaseCursorStatus.select);
|
|
59
|
+
}
|
|
55
60
|
return this.board?.selection;
|
|
56
61
|
}
|
|
57
62
|
get focused() {
|
|
@@ -97,19 +102,19 @@ export class PlaitBoardComponent {
|
|
|
97
102
|
.pipe(takeUntil(this.destroy$))
|
|
98
103
|
.subscribe((event) => {
|
|
99
104
|
this.board.mousedown(event);
|
|
100
|
-
this.isFocused && this.
|
|
105
|
+
this.isFocused && this.isMoveMode && this.initMove(event);
|
|
101
106
|
});
|
|
102
107
|
fromEvent(this.host, 'mousemove')
|
|
103
108
|
.pipe(takeUntil(this.destroy$))
|
|
104
109
|
.subscribe((event) => {
|
|
105
110
|
this.board.mousemove(event);
|
|
106
|
-
this.isFocused && this.
|
|
111
|
+
this.isFocused && this.isMoveMode && this.plaitBoardMove.isMoving && this.moving(event);
|
|
107
112
|
});
|
|
108
113
|
fromEvent(document, 'mouseup')
|
|
109
114
|
.pipe(takeUntil(this.destroy$))
|
|
110
115
|
.subscribe((event) => {
|
|
111
116
|
this.board.globalMouseup(event);
|
|
112
|
-
this.isFocused && this.
|
|
117
|
+
this.isFocused && this.moveEnd();
|
|
113
118
|
});
|
|
114
119
|
fromEvent(this.host, 'dblclick')
|
|
115
120
|
.pipe(takeUntil(this.destroy$))
|
|
@@ -135,7 +140,10 @@ export class PlaitBoardComponent {
|
|
|
135
140
|
}))
|
|
136
141
|
.subscribe((event) => {
|
|
137
142
|
this.board?.keydown(event);
|
|
138
|
-
this.isFocused && event.code === 'Space'
|
|
143
|
+
if (this.isFocused && event.code === 'Space') {
|
|
144
|
+
this.changeMoveMode(BaseCursorStatus.move);
|
|
145
|
+
event.preventDefault();
|
|
146
|
+
}
|
|
139
147
|
});
|
|
140
148
|
fromEvent(document, 'keyup')
|
|
141
149
|
.pipe(takeUntil(this.destroy$), filter(() => {
|
|
@@ -143,7 +151,7 @@ export class PlaitBoardComponent {
|
|
|
143
151
|
}))
|
|
144
152
|
.subscribe((event) => {
|
|
145
153
|
this.board?.keyup(event);
|
|
146
|
-
this.isFocused && event.code === 'Space' && this.
|
|
154
|
+
this.isFocused && event.code === 'Space' && this.changeMoveMode(BaseCursorStatus.select);
|
|
147
155
|
});
|
|
148
156
|
fromEvent(document, 'copy')
|
|
149
157
|
.pipe(takeUntil(this.destroy$), filter(() => {
|
|
@@ -182,37 +190,31 @@ export class PlaitBoardComponent {
|
|
|
182
190
|
const viewBox = getViewBox(this.board);
|
|
183
191
|
this.renderer2.setAttribute(this.host, 'viewBox', `${viewBox.minX}, ${viewBox.minY}, ${viewBox.width}, ${viewBox.height}`);
|
|
184
192
|
}
|
|
185
|
-
|
|
186
|
-
this.
|
|
193
|
+
initMove(e) {
|
|
194
|
+
this.plaitBoardMove.isMoving = true;
|
|
195
|
+
this.plaitBoardMove.x = e.x;
|
|
196
|
+
this.plaitBoardMove.y = e.y;
|
|
187
197
|
this.cdr.detectChanges();
|
|
188
198
|
}
|
|
189
|
-
|
|
190
|
-
this.cursorStatus = BaseCursorStatus.select;
|
|
191
|
-
this.cdr.detectChanges();
|
|
192
|
-
}
|
|
193
|
-
initDragMove(e) {
|
|
194
|
-
this.dragMove.isDragMoving = true;
|
|
195
|
-
this.dragMove.x = e.x;
|
|
196
|
-
this.dragMove.y = e.y;
|
|
197
|
-
}
|
|
198
|
-
dragMoving(e) {
|
|
199
|
+
moving(e) {
|
|
199
200
|
const viewport = this.board?.viewport;
|
|
200
201
|
Transforms.setViewport(this.board, {
|
|
201
202
|
...viewport,
|
|
202
|
-
offsetX: viewport.offsetX + ((e.x - this.
|
|
203
|
-
offsetY: viewport.offsetY + ((e.y - this.
|
|
203
|
+
offsetX: viewport.offsetX + ((e.x - this.plaitBoardMove.x) * 100) / this._viewZoom,
|
|
204
|
+
offsetY: viewport.offsetY + ((e.y - this.plaitBoardMove.y) * 100) / this._viewZoom
|
|
204
205
|
});
|
|
205
|
-
this.
|
|
206
|
-
this.
|
|
206
|
+
this.plaitBoardMove.x = e.x;
|
|
207
|
+
this.plaitBoardMove.y = e.y;
|
|
207
208
|
}
|
|
208
|
-
|
|
209
|
-
this.
|
|
210
|
-
this.
|
|
211
|
-
this.
|
|
209
|
+
moveEnd() {
|
|
210
|
+
this.plaitBoardMove.isMoving = false;
|
|
211
|
+
this.plaitBoardMove.x = 0;
|
|
212
|
+
this.plaitBoardMove.y = 0;
|
|
212
213
|
}
|
|
213
214
|
// 拖拽模式
|
|
214
|
-
|
|
215
|
-
this.
|
|
215
|
+
changeMoveMode(cursorStatus) {
|
|
216
|
+
updateCursorStatus(this.board, cursorStatus);
|
|
217
|
+
this.cdr.markForCheck();
|
|
216
218
|
}
|
|
217
219
|
// 适应画布
|
|
218
220
|
adaptHandle() {
|
|
@@ -257,21 +259,20 @@ export class PlaitBoardComponent {
|
|
|
257
259
|
HOST_TO_ROUGH_SVG.delete(this.host);
|
|
258
260
|
}
|
|
259
261
|
}
|
|
260
|
-
PlaitBoardComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: PlaitBoardComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Component });
|
|
262
|
+
PlaitBoardComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: PlaitBoardComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i0.ElementRef }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Component });
|
|
261
263
|
PlaitBoardComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.11", type: PlaitBoardComponent, selector: "plait-board", inputs: { plaitValue: "plaitValue", plaitViewport: "plaitViewport", plaitPlugins: "plaitPlugins", plaitReadonly: "plaitReadonly", plaitAllowClearBoard: "plaitAllowClearBoard" }, outputs: { plaitChange: "plaitChange", plaitBoardInitialized: "plaitBoardInitialized" }, host: { properties: { "class": "this.hostClass", "class.focused": "this.focused" } }, queries: [{ propertyName: "toolbarTemplateRef", first: true, predicate: ["plaitToolbar"], descendants: true }], viewQueries: [{ propertyName: "svg", first: true, predicate: ["svg"], descendants: true, static: true }], ngImport: i0, template: `
|
|
262
264
|
<svg
|
|
263
265
|
#svg
|
|
264
266
|
width="100%"
|
|
265
267
|
height="100%"
|
|
266
268
|
style="position: relative"
|
|
267
|
-
[style.cursor]="
|
|
269
|
+
[style.cursor]="isMoveMode ? (plaitBoardMove.isMoving ? 'grabbing' : 'grab') : 'auto'"
|
|
268
270
|
></svg>
|
|
269
271
|
<plait-toolbar
|
|
270
272
|
*ngIf="isFocused && !toolbarTemplateRef"
|
|
271
|
-
[
|
|
273
|
+
[cursorStatus]="board.cursor"
|
|
272
274
|
[viewZoom]="viewZoom"
|
|
273
|
-
|
|
274
|
-
(dragMoveHandle)="dragMoveHandle()"
|
|
275
|
+
(moveHandle)="changeMoveMode($event)"
|
|
275
276
|
(adaptHandle)="adaptHandle()"
|
|
276
277
|
(zoomInHandle)="zoomInHandle()"
|
|
277
278
|
(zoomOutHandle)="zoomOutHandle()"
|
|
@@ -287,7 +288,7 @@ PlaitBoardComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", ve
|
|
|
287
288
|
[host]="host"
|
|
288
289
|
></plait-element>
|
|
289
290
|
<ng-content></ng-content>
|
|
290
|
-
`, isInline: true, components: [{ type: i1.PlaitToolbarComponent, selector: "plait-toolbar", inputs: ["
|
|
291
|
+
`, isInline: true, components: [{ type: i1.PlaitToolbarComponent, selector: "plait-toolbar", inputs: ["cursorStatus", "viewZoom"], outputs: ["moveHandle", "adaptHandle", "zoomInHandle", "zoomOutHandle", "resetZoomHandel"] }, { type: i2.PlaitElementComponent, selector: "plait-element", inputs: ["index", "element", "board", "viewport", "selection", "host"] }], directives: [{ type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
291
292
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: PlaitBoardComponent, decorators: [{
|
|
292
293
|
type: Component,
|
|
293
294
|
args: [{
|
|
@@ -298,14 +299,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImpo
|
|
|
298
299
|
width="100%"
|
|
299
300
|
height="100%"
|
|
300
301
|
style="position: relative"
|
|
301
|
-
[style.cursor]="
|
|
302
|
+
[style.cursor]="isMoveMode ? (plaitBoardMove.isMoving ? 'grabbing' : 'grab') : 'auto'"
|
|
302
303
|
></svg>
|
|
303
304
|
<plait-toolbar
|
|
304
305
|
*ngIf="isFocused && !toolbarTemplateRef"
|
|
305
|
-
[
|
|
306
|
+
[cursorStatus]="board.cursor"
|
|
306
307
|
[viewZoom]="viewZoom"
|
|
307
|
-
|
|
308
|
-
(dragMoveHandle)="dragMoveHandle()"
|
|
308
|
+
(moveHandle)="changeMoveMode($event)"
|
|
309
309
|
(adaptHandle)="adaptHandle()"
|
|
310
310
|
(zoomInHandle)="zoomInHandle()"
|
|
311
311
|
(zoomOutHandle)="zoomOutHandle()"
|
|
@@ -324,7 +324,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImpo
|
|
|
324
324
|
`,
|
|
325
325
|
changeDetection: ChangeDetectionStrategy.OnPush
|
|
326
326
|
}]
|
|
327
|
-
}], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: i0.Renderer2 }]; }, propDecorators: { hostClass: [{
|
|
327
|
+
}], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: i0.ElementRef }, { type: i0.Renderer2 }]; }, propDecorators: { hostClass: [{
|
|
328
328
|
type: HostBinding,
|
|
329
329
|
args: ['class']
|
|
330
330
|
}], svg: [{
|
|
@@ -351,4 +351,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImpo
|
|
|
351
351
|
type: HostBinding,
|
|
352
352
|
args: ['class.focused']
|
|
353
353
|
}] } });
|
|
354
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm9hcmQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcGFja2FnZXMvcGxhaXQvc3JjL2JvYXJkL2JvYXJkLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUgsdUJBQXVCLEVBRXZCLFNBQVMsRUFDVCxZQUFZLEVBRVosWUFBWSxFQUNaLFdBQVcsRUFDWCxLQUFLLEVBR0wsTUFBTSxFQUdOLFNBQVMsRUFDWixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEtBQUssTUFBTSxtQkFBbUIsQ0FBQztBQUV0QyxPQUFPLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMxQyxPQUFPLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxnQkFBZ0IsRUFBZ0IsTUFBTSxlQUFlLENBQUM7QUFHL0QsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBR3pELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDbEQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3RELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxVQUFVLEVBQUUsaUJBQWlCLEVBQUUsYUFBYSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDOUUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLGlCQUFpQixFQUFFLGdCQUFnQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7Ozs7O0FBb0M3RixNQUFNLE9BQU8sbUJBQW1CO0lBZ0U1QixZQUFvQixHQUFzQixFQUFVLFNBQW9CO1FBQXBELFFB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QkFBQztvQkFDUCxRQUFRLEVBQUUsYUFBYTtvQkFDdkIsUUFBUSxFQUFFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztLQTZCVDtvQkFDRCxlQUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTtpQkFDbEQ7Z0lBRXlCLFNBQVM7c0JBQTlCLFdBQVc7dUJBQUMsT0FBTztnQkFTcEIsR0FBRztzQkFERixTQUFTO3VCQUFDLEtBQUssRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBSTNCLGtCQUFrQjtzQkFEeEIsWUFBWTt1QkFBQyxjQUFjO2dCQWlDbkIsVUFBVTtzQkFBbEIsS0FBSztnQkFFRyxhQUFhO3NCQUFyQixLQUFLO2dCQUVHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBRUcsYUFBYTtzQkFBckIsS0FBSztnQkFFRyxvQkFBb0I7c0JBQTVCLEtBQUs7Z0JBRUksV0FBVztzQkFBcEIsTUFBTTtnQkFFRyxxQkFBcUI7c0JBQTlCLE1BQU07Z0JBR0gsT0FBTztzQkFEVixXQUFXO3VCQUFDLGVBQWUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIEFmdGVyVmlld0luaXQsXG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQ29tcG9uZW50LFxuICAgIENvbnRlbnRDaGlsZCxcbiAgICBFbGVtZW50UmVmLFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBIb3N0QmluZGluZyxcbiAgICBJbnB1dCxcbiAgICBPbkRlc3Ryb3ksXG4gICAgT25Jbml0LFxuICAgIE91dHB1dCxcbiAgICBSZW5kZXJlcjIsXG4gICAgVGVtcGxhdGVSZWYsXG4gICAgVmlld0NoaWxkXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHJvdWdoIGZyb20gJ3JvdWdoanMvYmluL3JvdWdoJztcbmltcG9ydCB7IFJvdWdoU1ZHIH0gZnJvbSAncm91Z2hqcy9iaW4vc3ZnJztcbmltcG9ydCB7IGZyb21FdmVudCwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZmlsdGVyLCB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBCYXNlQ3Vyc29yU3RhdHVzLCBDdXJzb3JTdGF0dXMgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IERyYWdNb3ZlLCBQbGFpdEJvYXJkLCBQbGFpdEJvYXJkQ2hhbmdlRXZlbnQsIFBsYWl0Qm9hcmRPcHRpb25zIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9ib2FyZCc7XG5pbXBvcnQgeyBQbGFpdEVsZW1lbnQgfSBmcm9tICcuLi9pbnRlcmZhY2VzL2VsZW1lbnQnO1xuaW1wb3J0IHsgUGxhaXRPcGVyYXRpb24gfSBmcm9tICcuLi9pbnRlcmZhY2VzL29wZXJhdGlvbic7XG5pbXBvcnQgeyBQbGFpdFBsdWdpbiB9IGZyb20gJy4uL2ludGVyZmFjZXMvcGx1Z2luJztcbmltcG9ydCB7IFZpZXdwb3J0IH0gZnJvbSAnLi4vaW50ZXJmYWNlcy92aWV3cG9ydCc7XG5pbXBvcnQgeyBjcmVhdGVCb2FyZCB9IGZyb20gJy4uL3BsdWdpbnMvY3JlYXRlLWJvYXJkJztcbmltcG9ydCB7IHdpdGhCb2FyZCB9IGZyb20gJy4uL3BsdWdpbnMvd2l0aC1ib2FyZCc7XG5pbXBvcnQgeyB3aXRoSGlzdHJveSB9IGZyb20gJy4uL3BsdWdpbnMvd2l0aC1oaXN0b3J5JztcbmltcG9ydCB7IHdpdGhTZWxlY3Rpb24gfSBmcm9tICcuLi9wbHVnaW5zL3dpdGgtc2VsZWN0aW9uJztcbmltcG9ydCB7IFRyYW5zZm9ybXMgfSBmcm9tICcuLi90cmFuc2Zyb21zJztcbmltcG9ydCB7IGdldFZpZXdCb3gsIHRyYW5zZm9ybVZpZXdab29tLCB0cmFuc2Zvcm1ab29tIH0gZnJvbSAnLi4vdXRpbHMvYm9hcmQnO1xuaW1wb3J0IHsgQk9BUkRfVE9fT05fQ0hBTkdFLCBIT1NUX1RPX1JPVUdIX1NWRywgSVNfVEVYVF9FRElUQUJMRSB9IGZyb20gJy4uL3V0aWxzL3dlYWstbWFwcyc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAncGxhaXQtYm9hcmQnLFxuICAgIHRlbXBsYXRlOiBgXG4gICAgICAgIDxzdmdcbiAgICAgICAgICAgICNzdmdcbiAgICAgICAgICAgIHdpZHRoPVwiMTAwJVwiXG4gICAgICAgICAgICBoZWlnaHQ9XCIxMDAlXCJcbiAgICAgICAgICAgIHN0eWxlPVwicG9zaXRpb246IHJlbGF0aXZlXCJcbiAgICAgICAgICAgIFtzdHlsZS5jdXJzb3JdPVwiaXNEcmFnTW92ZU1vZGVsID8gKGRyYWdNb3ZlLmlzRHJhZ01vdmluZyA/ICdncmFiYmluZycgOiAnZ3JhYicpIDogJ2F1dG8nXCJcbiAgICAgICAgPjwvc3ZnPlxuICAgICAgICA8cGxhaXQtdG9vbGJhclxuICAgICAgICAgICAgKm5nSWY9XCJpc0ZvY3VzZWQgJiYgIXRvb2xiYXJUZW1wbGF0ZVJlZlwiXG4gICAgICAgICAgICBbYm9hcmRdPVwiYm9hcmRcIlxuICAgICAgICAgICAgW3ZpZXdab29tXT1cInZpZXdab29tXCJcbiAgICAgICAgICAgIFtpc0RyYWdNb3ZlTW9kZWxdPVwiaXNEcmFnTW92ZU1vZGVsXCJcbiAgICAgICAgICAgIChkcmFnTW92ZUhhbmRsZSk9XCJkcmFnTW92ZUhhbmRsZSgpXCJcbiAgICAgICAgICAgIChhZGFwdEhhbmRsZSk9XCJhZGFwdEhhbmRsZSgpXCJcbiAgICAgICAgICAgICh6b29tSW5IYW5kbGUpPVwiem9vbUluSGFuZGxlKClcIlxuICAgICAgICAgICAgKHpvb21PdXRIYW5kbGUpPVwiem9vbU91dEhhbmRsZSgpXCJcbiAgICAgICAgICAgIChyZXNldFpvb21IYW5kZWwpPVwicmVzZXRab29tSGFuZGVsKClcIlxuICAgICAgICA+PC9wbGFpdC10b29sYmFyPlxuICAgICAgICA8cGxhaXQtZWxlbWVudFxuICAgICAgICAgICAgKm5nRm9yPVwibGV0IGl0ZW0gb2YgYm9hcmQuY2hpbGRyZW47IGxldCBpbmRleCA9IGluZGV4OyB0cmFja0J5OiB0cmFja0J5XCJcbiAgICAgICAgICAgIFtpbmRleF09XCJpbmRleFwiXG4gICAgICAgICAgICBbZWxlbWVudF09XCJpdGVtXCJcbiAgICAgICAgICAgIFtib2FyZF09XCJib2FyZFwiXG4gICAgICAgICAgICBbdmlld3BvcnRdPVwiYm9hcmQudmlld3BvcnRcIlxuICAgICAgICAgICAgW3NlbGVjdGlvbl09XCJib2FyZC5zZWxlY3Rpb25cIlxuICAgICAgICAgICAgW2hvc3RdPVwiaG9zdFwiXG4gICAgICAgID48L3BsYWl0LWVsZW1lbnQ+XG4gICAgICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbiAgICBgLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXG59KVxuZXhwb3J0IGNsYXNzIFBsYWl0Qm9hcmRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSB7XG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcycpIGhvc3RDbGFzcyA9IGBwbGFpdC1ib2FyZC1jb250YWluZXJgO1xuXG4gICAgYm9hcmQhOiBQbGFpdEJvYXJkO1xuXG4gICAgcm91Z2hTVkchOiBSb3VnaFNWRztcblxuICAgIGRlc3Ryb3kkOiBTdWJqZWN0PGFueT4gPSBuZXcgU3ViamVjdCgpO1xuXG4gICAgQFZpZXdDaGlsZCgnc3ZnJywgeyBzdGF0aWM6IHRydWUgfSlcbiAgICBzdmchOiBFbGVtZW50UmVmO1xuXG4gICAgQENvbnRlbnRDaGlsZCgncGxhaXRUb29sYmFyJylcbiAgICBwdWJsaWMgdG9vbGJhclRlbXBsYXRlUmVmITogVGVtcGxhdGVSZWY8YW55PjtcblxuICAgIHB1YmxpYyBnZXQgaXNEcmFnTW92ZU1vZGVsKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5jdXJzb3JTdGF0dXMgPT09IEJhc2VDdXJzb3JTdGF0dXMuZHJhZztcbiAgICB9XG5cbiAgICBwdWJsaWMgY3Vyc29yU3RhdHVzOiBDdXJzb3JTdGF0dXMgPSBCYXNlQ3Vyc29yU3RhdHVzLnNlbGVjdDtcblxuICAgIHByaXZhdGUgX3ZpZXdab29tOiBudW1iZXIgPSAxMDA7XG5cbiAgICBwdWJsaWMgZ2V0IHZpZXdab29tKCk6IG51bWJlciB7XG4gICAgICAgIGNvbnN0IHZab29tID0gdHJhbnNmb3JtWm9vbSh0aGlzLmJvYXJkLnZpZXdwb3J0Lnpvb20pO1xuICAgICAgICBpZiAodGhpcy5fdmlld1pvb20gIT09IHZab29tKSB7XG4gICAgICAgICAgICB0aGlzLl92aWV3Wm9vbSA9IHZab29tO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2Wm9vbTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZHJhZ01vdmU6IERyYWdNb3ZlID0ge1xuICAgICAgICBpc0RyYWdNb3Zpbmc6IGZhbHNlLFxuICAgICAgICB4OiAwLFxuICAgICAgICB5OiAwXG4gICAgfTtcblxuICAgIGdldCBob3N0KCk6IFNWR0VsZW1lbnQge1xuICAgICAgICByZXR1cm4gdGhpcy5zdmcubmF0aXZlRWxlbWVudDtcbiAgICB9XG5cbiAgICBnZXQgaXNGb2N1c2VkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5ib2FyZD8uc2VsZWN0aW9uO1xuICAgIH1cblxuICAgIEBJbnB1dCgpIHBsYWl0VmFsdWU6IFBsYWl0RWxlbWVudFtdID0gW107XG5cbiAgICBASW5wdXQoKSBwbGFpdFZpZXdwb3J0ITogVmlld3BvcnQ7XG5cbiAgICBASW5wdXQoKSBwbGFpdFBsdWdpbnM6IFBsYWl0UGx1Z2luW10gPSBbXTtcblxuICAgIEBJbnB1dCgpIHBsYWl0UmVhZG9ubHkgPSBmYWxzZTtcblxuICAgIEBJbnB1dCgpIHBsYWl0QWxsb3dDbGVhckJvYXJkID0gZmFsc2U7XG5cbiAgICBAT3V0cHV0KCkgcGxhaXRDaGFuZ2U6IEV2ZW50RW1pdHRlcjxQbGFpdEJvYXJkQ2hhbmdlRXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gICAgQE91dHB1dCgpIHBsYWl0Qm9hcmRJbml0aWFsaXplZDogRXZlbnRFbWl0dGVyPFBsYWl0Qm9hcmQ+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5mb2N1c2VkJylcbiAgICBnZXQgZm9jdXNlZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNGb2N1c2VkO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZiwgcHJpdmF0ZSByZW5kZXJlcjI6IFJlbmRlcmVyMikge31cblxuICAgIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICBjb25zdCByb3VnaFNWRyA9IHJvdWdoLnN2Zyh0aGlzLmhvc3QgYXMgU1ZHU1ZHRWxlbWVudCwgeyBvcHRpb25zOiB7IHJvdWdobmVzczogMCwgc3Ryb2tlV2lkdGg6IDEgfSB9KTtcbiAgICAgICAgSE9TVF9UT19ST1VHSF9TVkcuc2V0KHRoaXMuaG9zdCwgcm91Z2hTVkcpO1xuICAgICAgICB0aGlzLmluaXRpYWxpemVQbHVnaW5zKCk7XG4gICAgICAgIHRoaXMuaW5pdGlhbGl6ZUV2ZW50cygpO1xuICAgICAgICB0aGlzLnVwZGF0ZVZpZXdwb3J0KCk7XG4gICAgICAgIEJPQVJEX1RPX09OX0NIQU5HRS5zZXQodGhpcy5ib2FyZCwgKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgY29uc3QgY2hhbmdlRXZlbnQ6IFBsYWl0Qm9hcmRDaGFuZ2VFdmVudCA9IHtcbiAgICAgICAgICAgICAgICBjaGlsZHJlbjogdGhpcy5ib2FyZC5jaGlsZHJlbixcbiAgICAgICAgICAgICAgICBvcGVyYXRpb25zOiB0aGlzLmJvYXJkLm9wZXJhdGlvbnMsXG4gICAgICAgICAgICAgICAgdmlld3BvcnQ6IHRoaXMuYm9hcmQudmlld3BvcnQsXG4gICAgICAgICAgICAgICAgc2VsZWN0aW9uOiB0aGlzLmJvYXJkLnNlbGVjdGlvblxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIC8vIHVwZGF0ZSB2aWV3Qm94XG4gICAgICAgICAgICBpZiAodGhpcy5ib2FyZC5vcGVyYXRpb25zLnNvbWUob3AgPT4gUGxhaXRPcGVyYXRpb24uaXNTZXRWaWV3cG9ydE9wZXJhdGlvbihvcCkpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVWaWV3cG9ydCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5wbGFpdENoYW5nZS5lbWl0KGNoYW5nZUV2ZW50KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLnBsYWl0Qm9hcmRJbml0aWFsaXplZC5lbWl0KHRoaXMuYm9hcmQpO1xuICAgIH1cblxuICAgIGluaXRpYWxpemVQbHVnaW5zKCkge1xuICAgICAgICBjb25zdCBvcHRpb25zOiBQbGFpdEJvYXJkT3B0aW9ucyA9IHsgcmVhZG9ubHk6IHRoaXMucGxhaXRSZWFkb25seSwgYWxsb3dDbGVhckJvYXJkOiB0aGlzLnBsYWl0QWxsb3dDbGVhckJvYXJkIH07XG4gICAgICAgIGxldCBib2FyZCA9IHdpdGhIaXN0cm95KHdpdGhTZWxlY3Rpb24od2l0aEJvYXJkKGNyZWF0ZUJvYXJkKHRoaXMuaG9zdCwgdGhpcy5wbGFpdFZhbHVlLCBvcHRpb25zKSkpKTtcbiAgICAgICAgdGhpcy5wbGFpdFBsdWdpbnMuZm9yRWFjaChwbHVnaW4gPT4ge1xuICAgICAgICAgICAgYm9hcmQgPSBwbHVnaW4oYm9hcmQpO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5ib2FyZCA9IGJvYXJkO1xuICAgICAgICBpZiAodGhpcy5wbGFpdFZpZXdwb3J0KSB7XG4gICAgICAgICAgICB0aGlzLmJvYXJkLnZpZXdwb3J0ID0gdGhpcy5wbGFpdFZpZXdwb3J0O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaW5pdGlhbGl6ZUV2ZW50cygpIHtcbiAgICAgICAgZnJvbUV2ZW50PE1vdXNlRXZlbnQ+KHRoaXMuaG9zdCwgJ21vdXNlZG93bicpXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChldmVudDogTW91c2VFdmVudCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuYm9hcmQubW91c2Vkb3duKGV2ZW50KTtcbiAgICAgICAgICAgICAgICB0aGlzLmlzRm9jdXNlZCAmJiB0aGlzLmlzRHJhZ01vdmVNb2RlbCAmJiB0aGlzLmluaXREcmFnTW92ZShldmVudCk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICBmcm9tRXZlbnQ8TW91c2VFdmVudD4odGhpcy5ob3N0LCAnbW91c2Vtb3ZlJylcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKGV2ZW50OiBNb3VzZUV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5ib2FyZC5tb3VzZW1vdmUoZXZlbnQpO1xuICAgICAgICAgICAgICAgIHRoaXMuaXNGb2N1c2VkICYmIHRoaXMuaXNEcmFnTW92ZU1vZGVsICYmIHRoaXMuZHJhZ01vdmUuaXNEcmFnTW92aW5nICYmIHRoaXMuZHJhZ01vdmluZyhldmVudCk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICBmcm9tRXZlbnQ8TW91c2VFdmVudD4oZG9jdW1lbnQsICdtb3VzZXVwJylcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKGV2ZW50OiBNb3VzZUV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5ib2FyZC5nbG9iYWxNb3VzZXVwKGV2ZW50KTtcbiAgICAgICAgICAgICAgICB0aGlzLmlzRm9jdXNlZCAmJiB0aGlzLmRyYWdNb3ZlRW5kKGV2ZW50KTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIGZyb21FdmVudDxNb3VzZUV2ZW50Pih0aGlzLmhvc3QsICdkYmxjbGljaycpXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChldmVudDogTW91c2VFdmVudCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuYm9hcmQuZGJsY2xpY2soZXZlbnQpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgZnJvbUV2ZW50PFdoZWVsRXZlbnQ+KHRoaXMuaG9zdCwgJ3doZWVsJylcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKGV2ZW50OiBXaGVlbEV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNGb2N1c2VkKSB7XG4gICAgICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHZpZXdwb3J0ID0gdGhpcy5ib2FyZC52aWV3cG9ydDtcbiAgICAgICAgICAgICAgICAgICAgVHJhbnNmb3Jtcy5zZXRWaWV3cG9ydCh0aGlzLmJvYXJkLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAuLi52aWV3cG9ydCxcbiAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldFg6IHZpZXdwb3J0Py5vZmZzZXRYIC0gZXZlbnQuZGVsdGFYLFxuICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0WTogdmlld3BvcnQ/Lm9mZnNldFkgLSBldmVudC5kZWx0YVlcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgZnJvbUV2ZW50PEtleWJvYXJkRXZlbnQ+KGRvY3VtZW50LCAna2V5ZG93bicpXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICB0YWtlVW50aWwodGhpcy5kZXN0cm95JCksXG4gICAgICAgICAgICAgICAgZmlsdGVyKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICFJU19URVhUX0VESVRBQkxFLmdldCh0aGlzLmJvYXJkKSAmJiAhIXRoaXMuYm9hcmQuc2VsZWN0aW9uO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChldmVudDogS2V5Ym9hcmRFdmVudCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuYm9hcmQ/LmtleWRvd24oZXZlbnQpO1xuICAgICAgICAgICAgICAgIHRoaXMuaXNGb2N1c2VkICYmIGV2ZW50LmNvZGUgPT09ICdTcGFjZScgJiYgdGhpcy5vcGVuRHJhZ01vdmVNb2RlbCgpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgZnJvbUV2ZW50PEtleWJvYXJkRXZlbnQ+KGRvY3VtZW50LCAna2V5dXAnKVxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMuZGVzdHJveSQpLFxuICAgICAgICAgICAgICAgIGZpbHRlcigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAhSVNfVEVYVF9FRElUQUJMRS5nZXQodGhpcy5ib2FyZCkgJiYgISF0aGlzLmJvYXJkLnNlbGVjdGlvbjtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoZXZlbnQ6IEtleWJvYXJkRXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmJvYXJkPy5rZXl1cChldmVudCk7XG4gICAgICAgICAgICAgICAgdGhpcy5pc0ZvY3VzZWQgJiYgZXZlbnQuY29kZSA9PT0gJ1NwYWNlJyAmJiB0aGlzLmNsb3NlRHJhZ01vdmVNb2RlbCgpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgZnJvbUV2ZW50PENsaXBib2FyZEV2ZW50Pihkb2N1bWVudCwgJ2NvcHknKVxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMuZGVzdHJveSQpLFxuICAgICAgICAgICAgICAgIGZpbHRlcigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAhSVNfVEVYVF9FRElUQUJMRS5nZXQodGhpcy5ib2FyZCkgJiYgISF0aGlzLmJvYXJkLnNlbGVjdGlvbjtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoZXZlbnQ6IENsaXBib2FyZEV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICB0aGlzLmJvYXJkPy5zZXRGcmFnbWVudChldmVudC5jbGlwYm9hcmREYXRhKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIGZyb21FdmVudDxDbGlwYm9hcmRFdmVudD4oZG9jdW1lbnQsICdwYXN0ZScpXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICB0YWtlVW50aWwodGhpcy5kZXN0cm95JCksXG4gICAgICAgICAgICAgICAgZmlsdGVyKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICFJU19URVhUX0VESVRBQkxFLmdldCh0aGlzLmJvYXJkKSAmJiAhIXRoaXMuYm9hcmQuc2VsZWN0aW9uO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChldmVudDogQ2xpcGJvYXJkRXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmJvYXJkPy5pbnNlcnRGcmFnbWVudChldmVudC5jbGlwYm9hcmREYXRhKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIGZyb21FdmVudDxDbGlwYm9hcmRFdmVudD4oZG9jdW1lbnQsICdjdXQnKVxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMuZGVzdHJveSQpLFxuICAgICAgICAgICAgICAgIGZpbHRlcigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAhSVNfVEVYVF9FRElUQUJMRS5nZXQodGhpcy5ib2FyZCkgJiYgISF0aGlzLmJvYXJkLnNlbGVjdGlvbjtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoZXZlbnQ6IENsaXBib2FyZEV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICB0aGlzLmJvYXJkPy5zZXRGcmFnbWVudChldmVudC5jbGlwYm9hcmREYXRhKTtcbiAgICAgICAgICAgICAgICB0aGlzLmJvYXJkPy5kZWxldGVGcmFnbWVudChldmVudC5jbGlwYm9hcmREYXRhKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIHdpbmRvdy5vbnJlc2l6ZSA9ICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMucmVmcmVzaFZpZXdwb3J0KCk7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcmVmcmVzaFZpZXdwb3J0KCkge1xuICAgICAgICBjb25zdCB2aWV3Qm94TW9kZWwgPSBnZXRWaWV3Qm94KHRoaXMuYm9hcmQpO1xuICAgICAgICBjb25zdCB2aWV3Qm94VmFsdWVzID0gdGhpcy5ob3N0LmdldEF0dHJpYnV0ZSgndmlld0JveCcpPy5zcGxpdCgnLCcpIGFzIHN0cmluZ1tdO1xuICAgICAgICB0aGlzLnJlbmRlcmVyMi5zZXRBdHRyaWJ1dGUoXG4gICAgICAgICAgICB0aGlzLmhvc3QsXG4gICAgICAgICAgICAndmlld0JveCcsXG4gICAgICAgICAgICBgJHt2aWV3Qm94VmFsdWVzWzBdLnRyaW0oKX0sICR7dmlld0JveFZhbHVlc1sxXS50cmltKCl9LCAke3ZpZXdCb3hNb2RlbC53aWR0aH0sICR7dmlld0JveE1vZGVsLmhlaWdodH1gXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgdXBkYXRlVmlld3BvcnQoKSB7XG4gICAgICAgIGNvbnN0IHZpZXdCb3ggPSBnZXRWaWV3Qm94KHRoaXMuYm9hcmQpO1xuICAgICAgICB0aGlzLnJlbmRlcmVyMi5zZXRBdHRyaWJ1dGUodGhpcy5ob3N0LCAndmlld0JveCcsIGAke3ZpZXdCb3gubWluWH0sICR7dmlld0JveC5taW5ZfSwgJHt2aWV3Qm94LndpZHRofSwgJHt2aWV3Qm94LmhlaWdodH1gKTtcbiAgICB9XG5cbiAgICB0cmFja0J5ID0gKGluZGV4OiBudW1iZXIsIGVsZW1lbnQ6IFBsYWl0RWxlbWVudCkgPT4ge1xuICAgICAgICByZXR1cm4gaW5kZXg7XG4gICAgfTtcblxuICAgIG9wZW5EcmFnTW92ZU1vZGVsKCkge1xuICAgICAgICB0aGlzLmN1cnNvclN0YXR1cyA9IEJhc2VDdXJzb3JTdGF0dXMuZHJhZztcbiAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cblxuICAgIGNsb3NlRHJhZ01vdmVNb2RlbCgpIHtcbiAgICAgICAgdGhpcy5jdXJzb3JTdGF0dXMgPSBCYXNlQ3Vyc29yU3RhdHVzLnNlbGVjdDtcbiAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cblxuICAgIGluaXREcmFnTW92ZShlOiBNb3VzZUV2ZW50KSB7XG4gICAgICAgIHRoaXMuZHJhZ01vdmUuaXNEcmFnTW92aW5nID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5kcmFnTW92ZS54ID0gZS54O1xuICAgICAgICB0aGlzLmRyYWdNb3ZlLnkgPSBlLnk7XG4gICAgfVxuXG4gICAgZHJhZ01vdmluZyhlOiBNb3VzZUV2ZW50KSB7XG4gICAgICAgIGNvbnN0IHZpZXdwb3J0ID0gdGhpcy5ib2FyZD8udmlld3BvcnQgYXMgVmlld3BvcnQ7XG4gICAgICAgIFRyYW5zZm9ybXMuc2V0Vmlld3BvcnQodGhpcy5ib2FyZCwge1xuICAgICAgICAgICAgLi4udmlld3BvcnQsXG4gICAgICAgICAgICBvZmZzZXRYOiB2aWV3cG9ydC5vZmZzZXRYICsgKChlLnggLSB0aGlzLmRyYWdNb3ZlLngpICogMTAwKSAvIHRoaXMuX3ZpZXdab29tLFxuICAgICAgICAgICAgb2Zmc2V0WTogdmlld3BvcnQub2Zmc2V0WSArICgoZS55IC0gdGhpcy5kcmFnTW92ZS55KSAqIDEwMCkgLyB0aGlzLl92aWV3Wm9vbVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5kcmFnTW92ZS54ID0gZS54O1xuICAgICAgICB0aGlzLmRyYWdNb3ZlLnkgPSBlLnk7XG4gICAgfVxuXG4gICAgZHJhZ01vdmVFbmQoZTogTW91c2VFdmVudCkge1xuICAgICAgICB0aGlzLmRyYWdNb3ZlLmlzRHJhZ01vdmluZyA9IGZhbHNlO1xuICAgICAgICB0aGlzLmRyYWdNb3ZlLnggPSAwO1xuICAgICAgICB0aGlzLmRyYWdNb3ZlLnkgPSAwO1xuICAgIH1cblxuICAgIC8vIOaLluaLveaooeW8j1xuICAgIGRyYWdNb3ZlSGFuZGxlKCkge1xuICAgICAgICB0aGlzLmlzRHJhZ01vdmVNb2RlbCA/IHRoaXMuY2xvc2VEcmFnTW92ZU1vZGVsKCkgOiB0aGlzLm9wZW5EcmFnTW92ZU1vZGVsKCk7XG4gICAgfVxuXG4gICAgLy8g6YCC5bqU55S75biDXG4gICAgYWRhcHRIYW5kbGUoKSB7XG4gICAgICAgIGNvbnN0IHZpZXdwb3J0ID0gdGhpcy5ib2FyZD8udmlld3BvcnQgYXMgVmlld3BvcnQ7XG4gICAgICAgIFRyYW5zZm9ybXMuc2V0Vmlld3BvcnQodGhpcy5ib2FyZCwge1xuICAgICAgICAgICAgLi4udmlld3BvcnQsXG4gICAgICAgICAgICBvZmZzZXRYOiAwLFxuICAgICAgICAgICAgb2Zmc2V0WTogMFxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5yZXNldFpvb21IYW5kZWwoKTtcbiAgICB9XG5cbiAgICAvLyDmlL7lpKdcbiAgICB6b29tSW5IYW5kbGUoKSB7XG4gICAgICAgIGlmICh0aGlzLl92aWV3Wm9vbSA+PSA0MDApIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl92aWV3Wm9vbSArPSAxMDtcbiAgICAgICAgdGhpcy56b29tQ2hhbmdlKCk7XG4gICAgfVxuXG4gICAgLy8g57yp5bCPXG4gICAgem9vbU91dEhhbmRsZSgpIHtcbiAgICAgICAgaWYgKHRoaXMuX3ZpZXdab29tIDw9IDIwKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fdmlld1pvb20gLT0gMTA7XG4gICAgICAgIHRoaXMuem9vbUNoYW5nZSgpO1xuICAgIH1cblxuICAgIHJlc2V0Wm9vbUhhbmRlbCgpIHtcbiAgICAgICAgdGhpcy5fdmlld1pvb20gPSAxMDA7XG4gICAgICAgIHRoaXMuem9vbUNoYW5nZSgpO1xuICAgIH1cblxuICAgIHpvb21DaGFuZ2UoKSB7XG4gICAgICAgIGNvbnN0IHZpZXdwb3J0ID0gdGhpcy5ib2FyZD8udmlld3BvcnQgYXMgVmlld3BvcnQ7XG4gICAgICAgIFRyYW5zZm9ybXMuc2V0Vmlld3BvcnQodGhpcy5ib2FyZCwge1xuICAgICAgICAgICAgLi4udmlld3BvcnQsXG4gICAgICAgICAgICB6b29tOiB0cmFuc2Zvcm1WaWV3Wm9vbSh0aGlzLl92aWV3Wm9vbSlcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZGVzdHJveSQubmV4dCgpO1xuICAgICAgICB0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCk7XG4gICAgICAgIEhPU1RfVE9fUk9VR0hfU1ZHLmRlbGV0ZSh0aGlzLmhvc3QpO1xuICAgIH1cbn1cbiJdfQ==
|
|
354
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm9hcmQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcGFja2FnZXMvcGxhaXQvc3JjL2JvYXJkL2JvYXJkLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUgsdUJBQXVCLEVBRXZCLFNBQVMsRUFDVCxZQUFZLEVBRVosWUFBWSxFQUNaLFdBQVcsRUFDWCxLQUFLLEVBR0wsTUFBTSxFQUdOLFNBQVMsRUFDWixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEtBQUssTUFBTSxtQkFBbUIsQ0FBQztBQUV0QyxPQUFPLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMxQyxPQUFPLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUdqRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFHekQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3RELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUNsRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDdEQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzFELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLFVBQVUsRUFBRSxpQkFBaUIsRUFBRSxhQUFhLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNsRyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsaUJBQWlCLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQzs7Ozs7QUFtQzdGLE1BQU0sT0FBTyxtQkFBbUI7SUFvRTVCLFlBQW9CLEdBQXNCLEVBQVUsVUFBc0IsRUFBVSxTQUFvQjtRQUFwRixRQUFHLEdBQUgsR0FBRyxDQUFtQjtRQUFVLGVBQVUsR0FBVixVQUFVLENBQVk7UUFBVSxjQUFTLEdBQVQsU0FBUyxDQUFXO1FBMUR4RyxhQUFRLEdBQWlCLElBQUksT0FBTyxFQUFFLENBQUM7UUFRL0IsY0FBUyxHQUFXLEdBQUcsQ0FBQztRQVV6QixtQkFBYyxHQUFtQjtZQUNwQyxRQUFRLEVBQUUsS0FBSztZQUNmLENBQUMsRUFBRSxDQUFDO1lBQ0osQ0FBQyxFQUFFLENBQUM7U0FDUCxDQUFDO1FBaUJPLGVBQVUsR0FBbUIsRUFBRSxDQUFDO1FBSWhDLGlCQUFZLEdBQWtCLEVBQUUsQ0FBQztRQUVqQyxrQkFBYSxHQUFHLEtBQUssQ0FBQztRQUV0Qix5QkFBb0IsR0FBRyxLQUFLLENBQUM7UUFFNUIsZ0JBQVcsR0FBd0MsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUV0RSwwQkFBcUIsR0FBNkIsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQTRLL0UsWUFBTyxHQUFHLENBQUMsS0FBYSxFQUFFLE9BQXFCLEVBQUUsRUFBRTtZQUMvQyxPQUFPLEtBQUssQ0FBQztRQUNqQixDQUFDLENBQUM7SUF2S3lHLENBQUM7SUFuRTVHLElBQ0ksU0FBUztRQUNULE9BQU8seUJBQXlCLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUM7SUFDeEQsQ0FBQztJQWdCRCxJQUFXLFFBQVE7UUFDZixNQUFNLEtBQUssR0FBRyxhQUFhLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDdEQsSUFBSSxJQUFJLENBQUMsU0FBUyxLQUFLLEtBQUssRUFBRTtZQUMxQixJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztTQUMxQjtRQUNELE9BQU8sS0FBSyxDQUFDO0lBQ2pCLENBQUM7SUFRRCxJQUFXLFVBQVU7UUFDakIsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sS0FBSyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUM7SUFDdkQsQ0FBQztJQUVELElBQUksSUFBSTtRQUNKLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUM7SUFDbEMsQ0FBQztJQUVELElBQUksU0FBUztRQUNULElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLFNBQVMsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sS0FBSyxnQkFBZ0IsQ0FBQyxJQUFJLEVBQUU7WUFDdkUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztTQUNoRDtRQUNELE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBRSxTQUFTLENBQUM7SUFDakMsQ0FBQztJQWdCRCxJQUNJLE9BQU87UUFDUCxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUM7SUFDMUIsQ0FBQztJQUlELFFBQVE7UUFDSixNQUFNLFFBQVEsR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFxQixFQUFFLEVBQUUsT0FBTyxFQUFFLEVBQUUsU0FBUyxFQUFFLENBQUMsRUFBRSxXQUFXLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ3RHLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQzNDLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1FBQ3hCLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUN0QixrQkFBa0IsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxHQUFHLEVBQUU7WUFDcEMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUN6QixNQUFNLFdBQVcsR0FBMEI7Z0JBQ3ZDLFFBQVEsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVE7Z0JBQzdCLFVBQVUsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVU7Z0JBQ2pDLFFBQVEsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVE7Z0JBQzdCLFNBQVMsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVM7YUFDbEMsQ0FBQztZQUNGLGlCQUFpQjtZQUNqQixJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLGNBQWMsQ0FBQyxzQkFBc0IsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFO2dCQUM3RSxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7YUFDekI7WUFDRCxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUN2QyxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCxlQUFlO1FBQ1gsSUFBSSxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDaEQsQ0FBQztJQUVELGlCQUFpQjtRQUNiLE1BQU0sT0FBTyxHQUFzQixFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsYUFBYSxFQUFFLGVBQWUsRUFBRSxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztRQUNoSCxJQUFJLEtBQUssR0FBRyxXQUFXLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsVUFBVSxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3BHLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFO1lBQy9CLEtBQUssR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDMUIsQ0FBQyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztRQUNuQixJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUU7WUFDcEIsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQztTQUM1QztJQUNMLENBQUM7SUFFRCxnQkFBZ0I7UUFDWixTQUFTLENBQWEsSUFBSSxDQUFDLElBQUksRUFBRSxXQUFXLENBQUM7YUFDeEMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7YUFDOUIsU0FBUyxDQUFDLENBQUMsS0FBaUIsRUFBRSxFQUFFO1lBQzdCLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzVCLElBQUksQ0FBQyxTQUFTLElBQUksSUFBSSxDQUFDLFVBQVUsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzlELENBQUMsQ0FBQyxDQUFDO1FBRVAsU0FBUyxDQUFhLElBQUksQ0FBQyxJQUFJLEVBQUUsV0FBVyxDQUFDO2FBQ3hDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO2FBQzlCLFNBQVMsQ0FBQyxDQUFDLEtBQWlCLEVBQUUsRUFBRTtZQUM3QixJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUM1QixJQUFJLENBQUMsU0FBUyxJQUFJLElBQUksQ0FBQyxVQUFVLElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM1RixDQUFDLENBQUMsQ0FBQztRQUVQLFNBQVMsQ0FBYSxRQUFRLEVBQUUsU0FBUyxDQUFDO2FBQ3JDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO2FBQzlCLFNBQVMsQ0FBQyxDQUFDLEtBQWlCLEVBQUUsRUFBRTtZQUM3QixJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNoQyxJQUFJLENBQUMsU0FBUyxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNyQyxDQUFDLENBQUMsQ0FBQztRQUVQLFNBQVMsQ0FBYSxJQUFJLENBQUMsSUFBSSxFQUFFLFVBQVUsQ0FBQzthQUN2QyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQzthQUM5QixTQUFTLENBQUMsQ0FBQyxLQUFpQixFQUFFLEVBQUU7WUFDN0IsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDL0IsQ0FBQyxDQUFDLENBQUM7UUFFUCxTQUFTLENBQWEsSUFBSSxDQUFDLElBQUksRUFBRSxPQUFPLENBQUM7YUFDcEMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7YUFDOUIsU0FBUyxDQUFDLENBQUMsS0FBaUIsRUFBRSxFQUFFO1lBQzdCLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRTtnQkFDaEIsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO2dCQUN2QixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQztnQkFDckMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFO29CQUMvQixHQUFHLFFBQVE7b0JBQ1gsT0FBTyxFQUFFLFFBQVEsRUFBRSxPQUFPLEdBQUcsS0FBSyxDQUFDLE1BQU07b0JBQ3pDLE9BQU8sRUFBRSxRQUFRLEVBQUUsT0FBTyxHQUFHLEtBQUssQ0FBQyxNQUFNO2lCQUM1QyxDQUFDLENBQUM7YUFDTjtRQUNMLENBQUMsQ0FBQyxDQUFDO1FBRVAsU0FBUyxDQUFnQixRQUFRLEVBQUUsU0FBUyxDQUFDO2FBQ3hDLElBQUksQ0FDRCxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUN4QixNQUFNLENBQUMsR0FBRyxFQUFFO1lBQ1IsT0FBTyxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDO1FBQ3ZFLENBQUMsQ0FBQyxDQUNMO2FBQ0EsU0FBUyxDQUFDLENBQUMsS0FBb0IsRUFBRSxFQUFFO1lBQ2hDLElBQUksQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzNCLElBQUksSUFBSSxDQUFDLFNBQVMsSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLE9BQU8sRUFBRTtnQkFDMUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDM0MsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO2FBQzFCO1FBQ0wsQ0FBQyxDQUFDLENBQUM7UUFFUCxTQUFTLENBQWdCLFFBQVEsRUFBRSxPQUFPLENBQUM7YUFDdEMsSUFBSSxDQUNELFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQ3hCLE1BQU0sQ0FBQyxHQUFHLEVBQUU7WUFDUixPQUFPLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUM7UUFDdkUsQ0FBQyxDQUFDLENBQ0w7YUFDQSxTQUFTLENBQUMsQ0FBQyxLQUFvQixFQUFFLEVBQUU7WUFDaEMsSUFBSSxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDekIsSUFBSSxDQUFDLFNBQVMsSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLE9BQU8sSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzdGLENBQUMsQ0FBQyxDQUFDO1FBRVAsU0FBUyxDQUFpQixRQUFRLEVBQUUsTUFBTSxDQUFDO2FBQ3RDLElBQUksQ0FDRCxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUN4QixNQUFNLENBQUMsR0FBRyxFQUFFO1lBQ1IsT0FBTyxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDO1FBQ3ZFLENBQUMsQ0FBQyxDQUNMO2FBQ0EsU0FBUyxDQUFDLENBQUMsS0FBcUIsRUFBRSxFQUFFO1lBQ2pDLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUN2QixJQUFJLENBQUMsS0FBSyxFQUFFLFdBQVcsQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDakQsQ0FBQyxDQUFDLENBQUM7UUFFUCxTQUFTLENBQWlCLFFBQVEsRUFBRSxPQUFPLENBQUM7YUFDdkMsSUFBSSxDQUNELFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQ3hCLE1BQU0sQ0FBQyxHQUFHLEVBQUU7WUFDUixPQUFPLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUM7UUFDdkUsQ0FBQyxDQUFDLENBQ0w7YUFDQSxTQUFTLENBQUMsQ0FBQyxLQUFxQixFQUFFLEVBQUU7WUFDakMsSUFBSSxDQUFDLEtBQUssRUFBRSxjQUFjLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ3BELENBQUMsQ0FBQyxDQUFDO1FBRVAsU0FBUyxDQUFpQixRQUFRLEVBQUUsS0FBSyxDQUFDO2FBQ3JDLElBQUksQ0FDRCxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUN4QixNQUFNLENBQUMsR0FBRyxFQUFFO1lBQ1IsT0FBTyxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDO1FBQ3ZFLENBQUMsQ0FBQyxDQUNMO2FBQ0EsU0FBUyxDQUFDLENBQUMsS0FBcUIsRUFBRSxFQUFFO1lBQ2pDLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUN2QixJQUFJLENBQUMsS0FBSyxFQUFFLFdBQVcsQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLENBQUM7WUFDN0MsSUFBSSxDQUFDLEtBQUssRUFBRSxjQUFjLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ3BELENBQUMsQ0FBQyxDQUFDO1FBRVAsTUFBTSxDQUFDLFFBQVEsR0FBRyxHQUFHLEVBQUU7WUFDbkIsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQzNCLENBQUMsQ0FBQztJQUNOLENBQUM7SUFFRCxlQUFlO1FBQ1gsTUFBTSxZQUFZLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM1QyxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsRUFBRSxLQUFLLENBQUMsR0FBRyxDQUFhLENBQUM7UUFDaEYsSUFBSSxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQ3ZCLElBQUksQ0FBQyxJQUFJLEVBQ1QsU0FBUyxFQUNULEdBQUcsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxLQUFLLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsS0FBSyxZQUFZLENBQUMsS0FBSyxLQUFLLFlBQVksQ0FBQyxNQUFNLEVBQUUsQ0FDMUcsQ0FBQztJQUNOLENBQUM7SUFFRCxjQUFjO1FBQ1YsTUFBTSxPQUFPLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN2QyxJQUFJLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLFNBQVMsRUFBRSxHQUFHLE9BQU8sQ0FBQyxJQUFJLEtBQUssT0FBTyxDQUFDLElBQUksS0FBSyxPQUFPLENBQUMsS0FBSyxLQUFLLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO0lBQy9ILENBQUM7SUFNRCxRQUFRLENBQUMsQ0FBYTtRQUNsQixJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7UUFDcEMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM1QixJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzVCLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDN0IsQ0FBQztJQUVELE1BQU0sQ0FBQyxDQUFhO1FBQ2hCLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxLQUFLLEVBQUUsUUFBb0IsQ0FBQztRQUNsRCxVQUFVLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUU7WUFDL0IsR0FBRyxRQUFRO1lBQ1gsT0FBTyxFQUFFLFFBQVEsQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsU0FBUztZQUNsRixPQUFPLEVBQUUsUUFBUSxDQUFDLE9BQU8sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxTQUFTO1NBQ3JGLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDNUIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBRUQsT0FBTztRQUNILElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztRQUNyQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDMUIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzlCLENBQUM7SUFFRCxPQUFPO0lBQ1AsY0FBYyxDQUFDLFlBQThCO1FBQ3pDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsWUFBWSxDQUFDLENBQUM7UUFDN0MsSUFBSSxDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUM1QixDQUFDO0lBRUQsT0FBTztJQUNQLFdBQVc7UUFDUCxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsS0FBSyxFQUFFLFFBQW9CLENBQUM7UUFDbEQsVUFBVSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFO1lBQy9CLEdBQUcsUUFBUTtZQUNYLE9BQU8sRUFBRSxDQUFDO1lBQ1YsT0FBTyxFQUFFLENBQUM7U0FDYixDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7SUFDM0IsQ0FBQztJQUVELEtBQUs7SUFDTCxZQUFZO1FBQ1IsSUFBSSxJQUFJLENBQUMsU0FBUyxJQUFJLEdBQUcsRUFBRTtZQUN2QixPQUFPO1NBQ1Y7UUFDRCxJQUFJLENBQUMsU0FBUyxJQUFJLEVBQUUsQ0FBQztRQUNyQixJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7SUFDdEIsQ0FBQztJQUVELEtBQUs7SUFDTCxhQUFhO1FBQ1QsSUFBSSxJQUFJLENBQUMsU0FBUyxJQUFJLEVBQUUsRUFBRTtZQUN0QixPQUFPO1NBQ1Y7UUFDRCxJQUFJLENBQUMsU0FBUyxJQUFJLEVBQUUsQ0FBQztRQUNyQixJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7SUFDdEIsQ0FBQztJQUVELGVBQWU7UUFDWCxJQUFJLENBQUMsU0FBUyxHQUFHLEdBQUcsQ0FBQztRQUNyQixJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7SUFDdEIsQ0FBQztJQUVELFVBQVU7UUFDTixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsS0FBSyxFQUFFLFFBQW9CLENBQUM7UUFDbEQsVUFBVSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFO1lBQy9CLEdBQUcsUUFBUTtZQUNYLElBQUksRUFBRSxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDO1NBQzFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCxXQUFXO1FBQ1AsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNyQixJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ3pCLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDeEMsQ0FBQzs7aUhBelRRLG1CQUFtQjtxR0FBbkIsbUJBQW1CLDhtQkEvQmxCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0tBNEJUOzRGQUdRLG1CQUFtQjtrQkFqQy9CLFNBQVM7bUJBQUM7b0JBQ1AsUUFBUSxFQUFFLGFBQWE7b0JBQ3ZCLFFBQVEsRUFBRTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztLQTRCVDtvQkFDRCxlQUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTtpQkFDbEQ7eUpBR08sU0FBUztzQkFEWixXQUFXO3VCQUFDLE9BQU87Z0JBWXBCLEdBQUc7c0JBREYsU0FBUzt1QkFBQyxLQUFLLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQUkzQixrQkFBa0I7c0JBRHhCLFlBQVk7dUJBQUMsY0FBYztnQkFrQ25CLFVBQVU7c0JBQWxCLEtBQUs7Z0JBRUcsYUFBYTtzQkFBckIsS0FBSztnQkFFRyxZQUFZO3NCQUFwQixLQUFLO2dCQUVHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBRUcsb0JBQW9CO3NCQUE1QixLQUFLO2dCQUVJLFdBQVc7c0JBQXBCLE1BQU07Z0JBRUcscUJBQXFCO3NCQUE5QixNQUFNO2dCQUdILE9BQU87c0JBRFYsV0FBVzt1QkFBQyxlQUFlIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBBZnRlclZpZXdJbml0LFxuICAgIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICAgIENoYW5nZURldGVjdG9yUmVmLFxuICAgIENvbXBvbmVudCxcbiAgICBDb250ZW50Q2hpbGQsXG4gICAgRWxlbWVudFJlZixcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgSG9zdEJpbmRpbmcsXG4gICAgSW5wdXQsXG4gICAgT25EZXN0cm95LFxuICAgIE9uSW5pdCxcbiAgICBPdXRwdXQsXG4gICAgUmVuZGVyZXIyLFxuICAgIFRlbXBsYXRlUmVmLFxuICAgIFZpZXdDaGlsZFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCByb3VnaCBmcm9tICdyb3VnaGpzL2Jpbi9yb3VnaCc7XG5pbXBvcnQgeyBSb3VnaFNWRyB9IGZyb20gJ3JvdWdoanMvYmluL3N2Zyc7XG5pbXBvcnQgeyBmcm9tRXZlbnQsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGZpbHRlciwgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgQmFzZUN1cnNvclN0YXR1cyB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgUGxhaXRCb2FyZE1vdmUsIFBsYWl0Qm9hcmQsIFBsYWl0Qm9hcmRDaGFuZ2VFdmVudCwgUGxhaXRCb2FyZE9wdGlvbnMgfSBmcm9tICcuLi9pbnRlcmZhY2VzL2JvYXJkJztcbmltcG9ydCB7IFBsYWl0RWxlbWVudCB9IGZyb20gJy4uL2ludGVyZmFjZXMvZWxlbWVudCc7XG5pbXBvcnQgeyBQbGFpdE9wZXJhdGlvbiB9IGZyb20gJy4uL2ludGVyZmFjZXMvb3BlcmF0aW9uJztcbmltcG9ydCB7IFBsYWl0UGx1Z2luIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9wbHVnaW4nO1xuaW1wb3J0IHsgVmlld3BvcnQgfSBmcm9tICcuLi9pbnRlcmZhY2VzL3ZpZXdwb3J0JztcbmltcG9ydCB7IGNyZWF0ZUJvYXJkIH0gZnJvbSAnLi4vcGx1Z2lucy9jcmVhdGUtYm9hcmQnO1xuaW1wb3J0IHsgd2l0aEJvYXJkIH0gZnJvbSAnLi4vcGx1Z2lucy93aXRoLWJvYXJkJztcbmltcG9ydCB7IHdpdGhIaXN0cm95IH0gZnJvbSAnLi4vcGx1Z2lucy93aXRoLWhpc3RvcnknO1xuaW1wb3J0IHsgd2l0aFNlbGVjdGlvbiB9IGZyb20gJy4uL3BsdWdpbnMvd2l0aC1zZWxlY3Rpb24nO1xuaW1wb3J0IHsgVHJhbnNmb3JtcyB9IGZyb20gJy4uL3RyYW5zZnJvbXMnO1xuaW1wb3J0IHsgZ2V0Vmlld0JveCwgdHJhbnNmb3JtVmlld1pvb20sIHRyYW5zZm9ybVpvb20sIHVwZGF0ZUN1cnNvclN0YXR1cyB9IGZyb20gJy4uL3V0aWxzL2JvYXJkJztcbmltcG9ydCB7IEJPQVJEX1RPX09OX0NIQU5HRSwgSE9TVF9UT19ST1VHSF9TVkcsIElTX1RFWFRfRURJVEFCTEUgfSBmcm9tICcuLi91dGlscy93ZWFrLW1hcHMnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ3BsYWl0LWJvYXJkJyxcbiAgICB0ZW1wbGF0ZTogYFxuICAgICAgICA8c3ZnXG4gICAgICAgICAgICAjc3ZnXG4gICAgICAgICAgICB3aWR0aD1cIjEwMCVcIlxuICAgICAgICAgICAgaGVpZ2h0PVwiMTAwJVwiXG4gICAgICAgICAgICBzdHlsZT1cInBvc2l0aW9uOiByZWxhdGl2ZVwiXG4gICAgICAgICAgICBbc3R5bGUuY3Vyc29yXT1cImlzTW92ZU1vZGUgPyAocGxhaXRCb2FyZE1vdmUuaXNNb3ZpbmcgPyAnZ3JhYmJpbmcnIDogJ2dyYWInKSA6ICdhdXRvJ1wiXG4gICAgICAgID48L3N2Zz5cbiAgICAgICAgPHBsYWl0LXRvb2xiYXJcbiAgICAgICAgICAgICpuZ0lmPVwiaXNGb2N1c2VkICYmICF0b29sYmFyVGVtcGxhdGVSZWZcIlxuICAgICAgICAgICAgW2N1cnNvclN0YXR1c109XCJib2FyZC5jdXJzb3JcIlxuICAgICAgICAgICAgW3ZpZXdab29tXT1cInZpZXdab29tXCJcbiAgICAgICAgICAgIChtb3ZlSGFuZGxlKT1cImNoYW5nZU1vdmVNb2RlKCRldmVudClcIlxuICAgICAgICAgICAgKGFkYXB0SGFuZGxlKT1cImFkYXB0SGFuZGxlKClcIlxuICAgICAgICAgICAgKHpvb21JbkhhbmRsZSk9XCJ6b29tSW5IYW5kbGUoKVwiXG4gICAgICAgICAgICAoem9vbU91dEhhbmRsZSk9XCJ6b29tT3V0SGFuZGxlKClcIlxuICAgICAgICAgICAgKHJlc2V0Wm9vbUhhbmRlbCk9XCJyZXNldFpvb21IYW5kZWwoKVwiXG4gICAgICAgID48L3BsYWl0LXRvb2xiYXI+XG4gICAgICAgIDxwbGFpdC1lbGVtZW50XG4gICAgICAgICAgICAqbmdGb3I9XCJsZXQgaXRlbSBvZiBib2FyZC5jaGlsZHJlbjsgbGV0IGluZGV4ID0gaW5kZXg7IHRyYWNrQnk6IHRyYWNrQnlcIlxuICAgICAgICAgICAgW2luZGV4XT1cImluZGV4XCJcbiAgICAgICAgICAgIFtlbGVtZW50XT1cIml0ZW1cIlxuICAgICAgICAgICAgW2JvYXJkXT1cImJvYXJkXCJcbiAgICAgICAgICAgIFt2aWV3cG9ydF09XCJib2FyZC52aWV3cG9ydFwiXG4gICAgICAgICAgICBbc2VsZWN0aW9uXT1cImJvYXJkLnNlbGVjdGlvblwiXG4gICAgICAgICAgICBbaG9zdF09XCJob3N0XCJcbiAgICAgICAgPjwvcGxhaXQtZWxlbWVudD5cbiAgICAgICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuICAgIGAsXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcbn0pXG5leHBvcnQgY2xhc3MgUGxhaXRCb2FyZENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95IHtcbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzJylcbiAgICBnZXQgaG9zdENsYXNzKCkge1xuICAgICAgICByZXR1cm4gYHBsYWl0LWJvYXJkLWNvbnRhaW5lciAke3RoaXMuYm9hcmQuY3Vyc29yfWA7XG4gICAgfVxuXG4gICAgYm9hcmQhOiBQbGFpdEJvYXJkO1xuXG4gICAgcm91Z2hTVkchOiBSb3VnaFNWRztcblxuICAgIGRlc3Ryb3kkOiBTdWJqZWN0PGFueT4gPSBuZXcgU3ViamVjdCgpO1xuXG4gICAgQFZpZXdDaGlsZCgnc3ZnJywgeyBzdGF0aWM6IHRydWUgfSlcbiAgICBzdmchOiBFbGVtZW50UmVmO1xuXG4gICAgQENvbnRlbnRDaGlsZCgncGxhaXRUb29sYmFyJylcbiAgICBwdWJsaWMgdG9vbGJhclRlbXBsYXRlUmVmITogVGVtcGxhdGVSZWY8YW55PjtcblxuICAgIHByaXZhdGUgX3ZpZXdab29tOiBudW1iZXIgPSAxMDA7XG5cbiAgICBwdWJsaWMgZ2V0IHZpZXdab29tKCk6IG51bWJlciB7XG4gICAgICAgIGNvbnN0IHZab29tID0gdHJhbnNmb3JtWm9vbSh0aGlzLmJvYXJkLnZpZXdwb3J0Lnpvb20pO1xuICAgICAgICBpZiAodGhpcy5fdmlld1pvb20gIT09IHZab29tKSB7XG4gICAgICAgICAgICB0aGlzLl92aWV3Wm9vbSA9IHZab29tO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2Wm9vbTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcGxhaXRCb2FyZE1vdmU6IFBsYWl0Qm9hcmRNb3ZlID0ge1xuICAgICAgICBpc01vdmluZzogZmFsc2UsXG4gICAgICAgIHg6IDAsXG4gICAgICAgIHk6IDBcbiAgICB9O1xuXG4gICAgcHVibGljIGdldCBpc01vdmVNb2RlKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5ib2FyZC5jdXJzb3IgPT09IEJhc2VDdXJzb3JTdGF0dXMubW92ZTtcbiAgICB9XG5cbiAgICBnZXQgaG9zdCgpOiBTVkdFbGVtZW50IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3ZnLm5hdGl2ZUVsZW1lbnQ7XG4gICAgfVxuXG4gICAgZ2V0IGlzRm9jdXNlZCgpIHtcbiAgICAgICAgaWYgKCF0aGlzLmJvYXJkPy5zZWxlY3Rpb24gJiYgdGhpcy5ib2FyZC5jdXJzb3IgPT09IEJhc2VDdXJzb3JTdGF0dXMubW92ZSkge1xuICAgICAgICAgICAgdGhpcy5jaGFuZ2VNb3ZlTW9kZShCYXNlQ3Vyc29yU3RhdHVzLnNlbGVjdCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuYm9hcmQ/LnNlbGVjdGlvbjtcbiAgICB9XG5cbiAgICBASW5wdXQoKSBwbGFpdFZhbHVlOiBQbGFpdEVsZW1lbnRbXSA9IFtdO1xuXG4gICAgQElucHV0KCkgcGxhaXRWaWV3cG9ydCE6IFZpZXdwb3J0O1xuXG4gICAgQElucHV0KCkgcGxhaXRQbHVnaW5zOiBQbGFpdFBsdWdpbltdID0gW107XG5cbiAgICBASW5wdXQoKSBwbGFpdFJlYWRvbmx5ID0gZmFsc2U7XG5cbiAgICBASW5wdXQoKSBwbGFpdEFsbG93Q2xlYXJCb2FyZCA9IGZhbHNlO1xuXG4gICAgQE91dHB1dCgpIHBsYWl0Q2hhbmdlOiBFdmVudEVtaXR0ZXI8UGxhaXRCb2FyZENoYW5nZUV2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAgIEBPdXRwdXQoKSBwbGFpdEJvYXJkSW5pdGlhbGl6ZWQ6IEV2ZW50RW1pdHRlcjxQbGFpdEJvYXJkPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAgIEBIb3N0QmluZGluZygnY2xhc3MuZm9jdXNlZCcpXG4gICAgZ2V0IGZvY3VzZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzRm9jdXNlZDtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsIHByaXZhdGUgZWxlbWVudFJlZjogRWxlbWVudFJlZiwgcHJpdmF0ZSByZW5kZXJlcjI6IFJlbmRlcmVyMikge31cblxuICAgIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICBjb25zdCByb3VnaFNWRyA9IHJvdWdoLnN2Zyh0aGlzLmhvc3QgYXMgU1ZHU1ZHRWxlbWVudCwgeyBvcHRpb25zOiB7IHJvdWdobmVzczogMCwgc3Ryb2tlV2lkdGg6IDEgfSB9KTtcbiAgICAgICAgSE9TVF9UT19ST1VHSF9TVkcuc2V0KHRoaXMuaG9zdCwgcm91Z2hTVkcpO1xuICAgICAgICB0aGlzLmluaXRpYWxpemVQbHVnaW5zKCk7XG4gICAgICAgIHRoaXMuaW5pdGlhbGl6ZUV2ZW50cygpO1xuICAgICAgICB0aGlzLnVwZGF0ZVZpZXdwb3J0KCk7XG4gICAgICAgIEJPQVJEX1RPX09OX0NIQU5HRS5zZXQodGhpcy5ib2FyZCwgKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgY29uc3QgY2hhbmdlRXZlbnQ6IFBsYWl0Qm9hcmRDaGFuZ2VFdmVudCA9IHtcbiAgICAgICAgICAgICAgICBjaGlsZHJlbjogdGhpcy5ib2FyZC5jaGlsZHJlbixcbiAgICAgICAgICAgICAgICBvcGVyYXRpb25zOiB0aGlzLmJvYXJkLm9wZXJhdGlvbnMsXG4gICAgICAgICAgICAgICAgdmlld3BvcnQ6IHRoaXMuYm9hcmQudmlld3BvcnQsXG4gICAgICAgICAgICAgICAgc2VsZWN0aW9uOiB0aGlzLmJvYXJkLnNlbGVjdGlvblxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIC8vIHVwZGF0ZSB2aWV3Qm94XG4gICAgICAgICAgICBpZiAodGhpcy5ib2FyZC5vcGVyYXRpb25zLnNvbWUob3AgPT4gUGxhaXRPcGVyYXRpb24uaXNTZXRWaWV3cG9ydE9wZXJhdGlvbihvcCkpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVWaWV3cG9ydCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5wbGFpdENoYW5nZS5lbWl0KGNoYW5nZUV2ZW50KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLnBsYWl0Qm9hcmRJbml0aWFsaXplZC5lbWl0KHRoaXMuYm9hcmQpO1xuICAgIH1cblxuICAgIGluaXRpYWxpemVQbHVnaW5zKCkge1xuICAgICAgICBjb25zdCBvcHRpb25zOiBQbGFpdEJvYXJkT3B0aW9ucyA9IHsgcmVhZG9ubHk6IHRoaXMucGxhaXRSZWFkb25seSwgYWxsb3dDbGVhckJvYXJkOiB0aGlzLnBsYWl0QWxsb3dDbGVhckJvYXJkIH07XG4gICAgICAgIGxldCBib2FyZCA9IHdpdGhIaXN0cm95KHdpdGhTZWxlY3Rpb24od2l0aEJvYXJkKGNyZWF0ZUJvYXJkKHRoaXMuaG9zdCwgdGhpcy5wbGFpdFZhbHVlLCBvcHRpb25zKSkpKTtcbiAgICAgICAgdGhpcy5wbGFpdFBsdWdpbnMuZm9yRWFjaChwbHVnaW4gPT4ge1xuICAgICAgICAgICAgYm9hcmQgPSBwbHVnaW4oYm9hcmQpO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5ib2FyZCA9IGJvYXJkO1xuICAgICAgICBpZiAodGhpcy5wbGFpdFZpZXdwb3J0KSB7XG4gICAgICAgICAgICB0aGlzLmJvYXJkLnZpZXdwb3J0ID0gdGhpcy5wbGFpdFZpZXdwb3J0O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaW5pdGlhbGl6ZUV2ZW50cygpIHtcbiAgICAgICAgZnJvbUV2ZW50PE1vdXNlRXZlbnQ+KHRoaXMuaG9zdCwgJ21vdXNlZG93bicpXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChldmVudDogTW91c2VFdmVudCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuYm9hcmQubW91c2Vkb3duKGV2ZW50KTtcbiAgICAgICAgICAgICAgICB0aGlzLmlzRm9jdXNlZCAmJiB0aGlzLmlzTW92ZU1vZGUgJiYgdGhpcy5pbml0TW92ZShldmVudCk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICBmcm9tRXZlbnQ8TW91c2VFdmVudD4odGhpcy5ob3N0LCAnbW91c2Vtb3ZlJylcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKGV2ZW50OiBNb3VzZUV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5ib2FyZC5tb3VzZW1vdmUoZXZlbnQpO1xuICAgICAgICAgICAgICAgIHRoaXMuaXNGb2N1c2VkICYmIHRoaXMuaXNNb3ZlTW9kZSAmJiB0aGlzLnBsYWl0Qm9hcmRNb3ZlLmlzTW92aW5nICYmIHRoaXMubW92aW5nKGV2ZW50KTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIGZyb21FdmVudDxNb3VzZUV2ZW50Pihkb2N1bWVudCwgJ21vdXNldXAnKVxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoZXZlbnQ6IE1vdXNlRXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmJvYXJkLmdsb2JhbE1vdXNldXAoZXZlbnQpO1xuICAgICAgICAgICAgICAgIHRoaXMuaXNGb2N1c2VkICYmIHRoaXMubW92ZUVuZCgpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgZnJvbUV2ZW50PE1vdXNlRXZlbnQ+KHRoaXMuaG9zdCwgJ2RibGNsaWNrJylcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKGV2ZW50OiBNb3VzZUV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5ib2FyZC5kYmxjbGljayhldmVudCk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICBmcm9tRXZlbnQ8V2hlZWxFdmVudD4odGhpcy5ob3N0LCAnd2hlZWwnKVxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoZXZlbnQ6IFdoZWVsRXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5pc0ZvY3VzZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgdmlld3BvcnQgPSB0aGlzLmJvYXJkLnZpZXdwb3J0O1xuICAgICAgICAgICAgICAgICAgICBUcmFuc2Zvcm1zLnNldFZpZXdwb3J0KHRoaXMuYm9hcmQsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLnZpZXdwb3J0LFxuICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0WDogdmlld3BvcnQ/Lm9mZnNldFggLSBldmVudC5kZWx0YVgsXG4gICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXRZOiB2aWV3cG9ydD8ub2Zmc2V0WSAtIGV2ZW50LmRlbHRhWVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICBmcm9tRXZlbnQ8S2V5Ym9hcmRFdmVudD4oZG9jdW1lbnQsICdrZXlkb3duJylcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSxcbiAgICAgICAgICAgICAgICBmaWx0ZXIoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gIUlTX1RFWFRfRURJVEFCTEUuZ2V0KHRoaXMuYm9hcmQpICYmICEhdGhpcy5ib2FyZC5zZWxlY3Rpb247XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKGV2ZW50OiBLZXlib2FyZEV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5ib2FyZD8ua2V5ZG93bihldmVudCk7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNGb2N1c2VkICYmIGV2ZW50LmNvZGUgPT09ICdTcGFjZScpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jaGFuZ2VNb3ZlTW9kZShCYXNlQ3Vyc29yU3RhdHVzLm1vdmUpO1xuICAgICAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIGZyb21FdmVudDxLZXlib2FyZEV2ZW50Pihkb2N1bWVudCwgJ2tleXVwJylcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSxcbiAgICAgICAgICAgICAgICBmaWx0ZXIoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gIUlTX1RFWFRfRURJVEFCTEUuZ2V0KHRoaXMuYm9hcmQpICYmICEhdGhpcy5ib2FyZC5zZWxlY3Rpb247XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKGV2ZW50OiBLZXlib2FyZEV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5ib2FyZD8ua2V5dXAoZXZlbnQpO1xuICAgICAgICAgICAgICAgIHRoaXMuaXNGb2N1c2VkICYmIGV2ZW50LmNvZGUgPT09ICdTcGFjZScgJiYgdGhpcy5jaGFuZ2VNb3ZlTW9kZShCYXNlQ3Vyc29yU3RhdHVzLnNlbGVjdCk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICBmcm9tRXZlbnQ8Q2xpcGJvYXJkRXZlbnQ+KGRvY3VtZW50LCAnY29weScpXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICB0YWtlVW50aWwodGhpcy5kZXN0cm95JCksXG4gICAgICAgICAgICAgICAgZmlsdGVyKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICFJU19URVhUX0VESVRBQkxFLmdldCh0aGlzLmJvYXJkKSAmJiAhIXRoaXMuYm9hcmQuc2VsZWN0aW9uO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChldmVudDogQ2xpcGJvYXJkRXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgIHRoaXMuYm9hcmQ/LnNldEZyYWdtZW50KGV2ZW50LmNsaXBib2FyZERhdGEpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgZnJvbUV2ZW50PENsaXBib2FyZEV2ZW50Pihkb2N1bWVudCwgJ3Bhc3RlJylcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSxcbiAgICAgICAgICAgICAgICBmaWx0ZXIoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gIUlTX1RFWFRfRURJVEFCTEUuZ2V0KHRoaXMuYm9hcmQpICYmICEhdGhpcy5ib2FyZC5zZWxlY3Rpb247XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKGV2ZW50OiBDbGlwYm9hcmRFdmVudCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuYm9hcmQ/Lmluc2VydEZyYWdtZW50KGV2ZW50LmNsaXBib2FyZERhdGEpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgZnJvbUV2ZW50PENsaXBib2FyZEV2ZW50Pihkb2N1bWVudCwgJ2N1dCcpXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICB0YWtlVW50aWwodGhpcy5kZXN0cm95JCksXG4gICAgICAgICAgICAgICAgZmlsdGVyKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICFJU19URVhUX0VESVRBQkxFLmdldCh0aGlzLmJvYXJkKSAmJiAhIXRoaXMuYm9hcmQuc2VsZWN0aW9uO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChldmVudDogQ2xpcGJvYXJkRXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgIHRoaXMuYm9hcmQ/LnNldEZyYWdtZW50KGV2ZW50LmNsaXBib2FyZERhdGEpO1xuICAgICAgICAgICAgICAgIHRoaXMuYm9hcmQ/LmRlbGV0ZUZyYWdtZW50KGV2ZW50LmNsaXBib2FyZERhdGEpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgd2luZG93Lm9ucmVzaXplID0gKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5yZWZyZXNoVmlld3BvcnQoKTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICByZWZyZXNoVmlld3BvcnQoKSB7XG4gICAgICAgIGNvbnN0IHZpZXdCb3hNb2RlbCA9IGdldFZpZXdCb3godGhpcy5ib2FyZCk7XG4gICAgICAgIGNvbnN0IHZpZXdCb3hWYWx1ZXMgPSB0aGlzLmhvc3QuZ2V0QXR0cmlidXRlKCd2aWV3Qm94Jyk/LnNwbGl0KCcsJykgYXMgc3RyaW5nW107XG4gICAgICAgIHRoaXMucmVuZGVyZXIyLnNldEF0dHJpYnV0ZShcbiAgICAgICAgICAgIHRoaXMuaG9zdCxcbiAgICAgICAgICAgICd2aWV3Qm94JyxcbiAgICAgICAgICAgIGAke3ZpZXdCb3hWYWx1ZXNbMF0udHJpbSgpfSwgJHt2aWV3Qm94VmFsdWVzWzFdLnRyaW0oKX0sICR7dmlld0JveE1vZGVsLndpZHRofSwgJHt2aWV3Qm94TW9kZWwuaGVpZ2h0fWBcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICB1cGRhdGVWaWV3cG9ydCgpIHtcbiAgICAgICAgY29uc3Qgdmlld0JveCA9IGdldFZpZXdCb3godGhpcy5ib2FyZCk7XG4gICAgICAgIHRoaXMucmVuZGVyZXIyLnNldEF0dHJpYnV0ZSh0aGlzLmhvc3QsICd2aWV3Qm94JywgYCR7dmlld0JveC5taW5YfSwgJHt2aWV3Qm94Lm1pbll9LCAke3ZpZXdCb3gud2lkdGh9LCAke3ZpZXdCb3guaGVpZ2h0fWApO1xuICAgIH1cblxuICAgIHRyYWNrQnkgPSAoaW5kZXg6IG51bWJlciwgZWxlbWVudDogUGxhaXRFbGVtZW50KSA9PiB7XG4gICAgICAgIHJldHVybiBpbmRleDtcbiAgICB9O1xuXG4gICAgaW5pdE1vdmUoZTogTW91c2VFdmVudCkge1xuICAgICAgICB0aGlzLnBsYWl0Qm9hcmRNb3ZlLmlzTW92aW5nID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5wbGFpdEJvYXJkTW92ZS54ID0gZS54O1xuICAgICAgICB0aGlzLnBsYWl0Qm9hcmRNb3ZlLnkgPSBlLnk7XG4gICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG5cbiAgICBtb3ZpbmcoZTogTW91c2VFdmVudCkge1xuICAgICAgICBjb25zdCB2aWV3cG9ydCA9IHRoaXMuYm9hcmQ/LnZpZXdwb3J0IGFzIFZpZXdwb3J0O1xuICAgICAgICBUcmFuc2Zvcm1zLnNldFZpZXdwb3J0KHRoaXMuYm9hcmQsIHtcbiAgICAgICAgICAgIC4uLnZpZXdwb3J0LFxuICAgICAgICAgICAgb2Zmc2V0WDogdmlld3BvcnQub2Zmc2V0WCArICgoZS54IC0gdGhpcy5wbGFpdEJvYXJkTW92ZS54KSAqIDEwMCkgLyB0aGlzLl92aWV3Wm9vbSxcbiAgICAgICAgICAgIG9mZnNldFk6IHZpZXdwb3J0Lm9mZnNldFkgKyAoKGUueSAtIHRoaXMucGxhaXRCb2FyZE1vdmUueSkgKiAxMDApIC8gdGhpcy5fdmlld1pvb21cbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMucGxhaXRCb2FyZE1vdmUueCA9IGUueDtcbiAgICAgICAgdGhpcy5wbGFpdEJvYXJkTW92ZS55ID0gZS55O1xuICAgIH1cblxuICAgIG1vdmVFbmQoKSB7XG4gICAgICAgIHRoaXMucGxhaXRCb2FyZE1vdmUuaXNNb3ZpbmcgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5wbGFpdEJvYXJkTW92ZS54ID0gMDtcbiAgICAgICAgdGhpcy5wbGFpdEJvYXJkTW92ZS55ID0gMDtcbiAgICB9XG5cbiAgICAvLyDmi5bmi73mqKHlvI9cbiAgICBjaGFuZ2VNb3ZlTW9kZShjdXJzb3JTdGF0dXM6IEJhc2VDdXJzb3JTdGF0dXMpIHtcbiAgICAgICAgdXBkYXRlQ3Vyc29yU3RhdHVzKHRoaXMuYm9hcmQsIGN1cnNvclN0YXR1cyk7XG4gICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cblxuICAgIC8vIOmAguW6lOeUu+W4g1xuICAgIGFkYXB0SGFuZGxlKCkge1xuICAgICAgICBjb25zdCB2aWV3cG9ydCA9IHRoaXMuYm9hcmQ/LnZpZXdwb3J0IGFzIFZpZXdwb3J0O1xuICAgICAgICBUcmFuc2Zvcm1zLnNldFZpZXdwb3J0KHRoaXMuYm9hcmQsIHtcbiAgICAgICAgICAgIC4uLnZpZXdwb3J0LFxuICAgICAgICAgICAgb2Zmc2V0WDogMCxcbiAgICAgICAgICAgIG9mZnNldFk6IDBcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMucmVzZXRab29tSGFuZGVsKCk7XG4gICAgfVxuXG4gICAgLy8g5pS+5aSnXG4gICAgem9vbUluSGFuZGxlKCkge1xuICAgICAgICBpZiAodGhpcy5fdmlld1pvb20gPj0gNDAwKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fdmlld1pvb20gKz0gMTA7XG4gICAgICAgIHRoaXMuem9vbUNoYW5nZSgpO1xuICAgIH1cblxuICAgIC8vIOe8qeWwj1xuICAgIHpvb21PdXRIYW5kbGUoKSB7XG4gICAgICAgIGlmICh0aGlzLl92aWV3Wm9vbSA8PSAyMCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3ZpZXdab29tIC09IDEwO1xuICAgICAgICB0aGlzLnpvb21DaGFuZ2UoKTtcbiAgICB9XG5cbiAgICByZXNldFpvb21IYW5kZWwoKSB7XG4gICAgICAgIHRoaXMuX3ZpZXdab29tID0gMTAwO1xuICAgICAgICB0aGlzLnpvb21DaGFuZ2UoKTtcbiAgICB9XG5cbiAgICB6b29tQ2hhbmdlKCkge1xuICAgICAgICBjb25zdCB2aWV3cG9ydCA9IHRoaXMuYm9hcmQ/LnZpZXdwb3J0IGFzIFZpZXdwb3J0O1xuICAgICAgICBUcmFuc2Zvcm1zLnNldFZpZXdwb3J0KHRoaXMuYm9hcmQsIHtcbiAgICAgICAgICAgIC4uLnZpZXdwb3J0LFxuICAgICAgICAgICAgem9vbTogdHJhbnNmb3JtVmlld1pvb20odGhpcy5fdmlld1pvb20pXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmRlc3Ryb3kkLm5leHQoKTtcbiAgICAgICAgdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpO1xuICAgICAgICBIT1NUX1RPX1JPVUdIX1NWRy5kZWxldGUodGhpcy5ob3N0KTtcbiAgICB9XG59XG4iXX0=
|