@talrace/ngx-noder 0.0.2 → 0.0.4
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/esm2022/lib/+shared/add-link-dialog/add-link-dialog.component.mjs +67 -0
- package/esm2022/lib/+shared/editor/core/edit.session.mjs +7 -10
- package/esm2022/lib/+shared/editor/core/editor.mjs +7 -5
- package/esm2022/lib/+shared/editor/core/helpers/paragraph.helper.mjs +53 -16
- package/esm2022/lib/+shared/editor/core/helpers/position.helper.mjs +4 -1
- package/esm2022/lib/+shared/editor/core/models/line-info.model.mjs +1 -1
- package/esm2022/lib/+shared/editor/core/paging/pages.wrap.mjs +19 -12
- package/esm2022/lib/+shared/editor/core/paging/paragraph.mjs +3 -3
- package/esm2022/lib/+shared/editor/core/paging/text-line-info.mjs +3 -3
- package/esm2022/lib/+shared/editor/custom-components/external-element/models/external-element.model.mjs +3 -2
- package/esm2022/lib/+shared/editor/custom-components/shared/services/custom-content/custom-content.service.mjs +4 -3
- package/esm2022/lib/+shared/editor/custom-components/table/cell-resizer/cell-resizer.mjs +4 -4
- package/esm2022/lib/+shared/editor/custom-components/table/components/table.component.mjs +116 -10
- package/esm2022/lib/+shared/editor/custom-components/table/selection/table-selection.mjs +7 -1
- package/esm2022/lib/+shared/editor/editor.component.mjs +6 -4
- package/esm2022/lib/+shared/editor/execution/regulator.service.mjs +3 -3
- package/esm2022/lib/+shared/editor/operations/helpers/table-operations.helper.mjs +6 -3
- package/esm2022/lib/+shared/helpers/revision.helper.mjs +91 -0
- package/esm2022/lib/+shared/helpers/validation.helper.mjs +7 -0
- package/esm2022/lib/models/generated/cell.model.mjs +1 -1
- package/esm2022/public-api.mjs +5 -2
- package/fesm2022/talrace-ngx-noder.mjs +384 -79
- package/fesm2022/talrace-ngx-noder.mjs.map +1 -1
- package/lib/+shared/add-link-dialog/add-link-dialog.component.d.ts +26 -0
- package/lib/+shared/editor/core/editor.d.ts +2 -1
- package/lib/+shared/editor/core/helpers/paragraph.helper.d.ts +5 -2
- package/lib/+shared/editor/core/models/line-info.model.d.ts +1 -0
- package/lib/+shared/editor/core/paging/pages.wrap.d.ts +6 -5
- package/lib/+shared/editor/core/paging/paragraph.d.ts +5 -2
- package/lib/+shared/editor/core/paging/text-line-info.d.ts +2 -0
- package/lib/+shared/editor/custom-components/external-element/models/external-element.model.d.ts +2 -1
- package/lib/+shared/editor/custom-components/shared/services/custom-content/custom-content.service.d.ts +2 -1
- package/lib/+shared/editor/custom-components/table/cell-resizer/cell-resizer.d.ts +1 -0
- package/lib/+shared/editor/custom-components/table/components/table.component.d.ts +18 -1
- package/lib/+shared/editor/editor.component.d.ts +2 -1
- package/lib/+shared/editor/execution/regulator.service.d.ts +1 -1
- package/lib/+shared/helpers/revision.helper.d.ts +15 -0
- package/lib/+shared/helpers/validation.helper.d.ts +5 -0
- package/lib/models/generated/cell.model.d.ts +1 -0
- package/package.json +1 -1
- package/public-api.d.ts +4 -1
- package/src/lib/+shared/confirm-dialog/_theme.scss +30 -0
- package/src/lib/+shared/editor/_theme.scss +7 -0
- package/src/lib/+shared/editor-toolbar/_theme.scss +7 -0
- package/src/scss/_fonts.scss +3 -0
- package/src/scss/_mixins.scss +49 -0
- package/src/scss/_variables.scss +1 -0
|
@@ -25,10 +25,14 @@ export class NoderTableComponent extends BaseNoderComponent {
|
|
|
25
25
|
this.el = el;
|
|
26
26
|
this.overlayService = overlayService;
|
|
27
27
|
this.rowMatrix = [];
|
|
28
|
+
this.splits = [];
|
|
28
29
|
this.minRowHeight = 19;
|
|
29
|
-
this.borderSize =
|
|
30
|
+
this.borderSize = 1;
|
|
30
31
|
this.startResizing = (cellResizerParameters) => {
|
|
31
|
-
|
|
32
|
+
const splitRowIndex = this.getSplitRowIndex(cellResizerParameters.rowIndex);
|
|
33
|
+
this.resizer.resizerHeight = this.getRowsHeightBetweenSplits(splitRowIndex);
|
|
34
|
+
this.resizer.startY = this.getRowsHeightBefore(splitRowIndex);
|
|
35
|
+
this.resizer.splitRowIndex = splitRowIndex;
|
|
32
36
|
this.resizer.tableInsertIndex = this.insertIndex;
|
|
33
37
|
this.resizer.onStartResizing(cellResizerParameters);
|
|
34
38
|
};
|
|
@@ -38,7 +42,8 @@ export class NoderTableComponent extends BaseNoderComponent {
|
|
|
38
42
|
if (tableRow.hRule === HRule.Exact) {
|
|
39
43
|
return;
|
|
40
44
|
}
|
|
41
|
-
const
|
|
45
|
+
const rowIndexWithSplit = this.getIndexIncludingSplitRows(this.rowMatrix[rowIndex].row);
|
|
46
|
+
const row = this.tableEl.rows[rowIndexWithSplit];
|
|
42
47
|
const currentHeight = row.offsetHeight;
|
|
43
48
|
const cellHeights = this.rowMatrix[rowIndex].cells.map(x => x.cellContentHeight);
|
|
44
49
|
const maxCellContentHeigh = Math.max(...cellHeights, height);
|
|
@@ -79,6 +84,14 @@ export class NoderTableComponent extends BaseNoderComponent {
|
|
|
79
84
|
} while (i < cellSpanCount);
|
|
80
85
|
return width;
|
|
81
86
|
}
|
|
87
|
+
getAdjustedWidth(tableRow, cellIndex, absoluteCellIndex) {
|
|
88
|
+
const cellWidth = this.getCellWidth(tableRow, cellIndex, absoluteCellIndex);
|
|
89
|
+
if (tableRow.cells[cellIndex].widthType === 'pct') {
|
|
90
|
+
tableRow.cells[cellIndex].widthType = 'dxa';
|
|
91
|
+
return (cellWidth * this._width) / 5000; // 5000 is equal to 100% in docx units of measurement
|
|
92
|
+
}
|
|
93
|
+
return cellWidth;
|
|
94
|
+
}
|
|
82
95
|
createResizer() {
|
|
83
96
|
this.resizerEl = document.createElement('div');
|
|
84
97
|
this.resizerEl.className = 'resizer-border';
|
|
@@ -102,6 +115,7 @@ export class NoderTableComponent extends BaseNoderComponent {
|
|
|
102
115
|
this.initialize();
|
|
103
116
|
}
|
|
104
117
|
insertRows(rowsCount, targetIndex) {
|
|
118
|
+
this._width = this.getTableWidth();
|
|
105
119
|
let rowIndex = 0;
|
|
106
120
|
while (rowIndex < rowsCount) {
|
|
107
121
|
const targetRowIndex = targetIndex + rowIndex;
|
|
@@ -149,7 +163,7 @@ export class NoderTableComponent extends BaseNoderComponent {
|
|
|
149
163
|
rowIndex,
|
|
150
164
|
cellIndex: modelCellIndex,
|
|
151
165
|
columnIndex: currentTargetIndex,
|
|
152
|
-
width: this.
|
|
166
|
+
width: this.getAdjustedWidth(this.table.rows[rowIndex], modelCellIndex, currentTargetIndex),
|
|
153
167
|
heightChanged: this.cellHeightChanged,
|
|
154
168
|
startResizing: this.startResizing,
|
|
155
169
|
properties: this.properties
|
|
@@ -274,20 +288,112 @@ export class NoderTableComponent extends BaseNoderComponent {
|
|
|
274
288
|
}
|
|
275
289
|
this._height = rowsHeight + bordersHeight;
|
|
276
290
|
}
|
|
291
|
+
processSplit(leftSpaceOnPage, spaceBetweenPagesContent, contentHeight) {
|
|
292
|
+
this.removeSplits();
|
|
293
|
+
if (leftSpaceOnPage >= this.height) {
|
|
294
|
+
return { splitsCount: 0, tableHeight: this.height, leftHeight: 0 };
|
|
295
|
+
}
|
|
296
|
+
if (leftSpaceOnPage < this.rowMatrix[0].height) {
|
|
297
|
+
return { splitsCount: 1, tableHeight: this.height, leftHeight: this.height };
|
|
298
|
+
}
|
|
299
|
+
return this.splitTable(leftSpaceOnPage, spaceBetweenPagesContent, contentHeight);
|
|
300
|
+
}
|
|
301
|
+
splitTable(leftSpaceOnPage, spaceBetweenPagesContent, contentHeight) {
|
|
302
|
+
let leftHeight = 0, tableHeightWithSplits = this.height, rowIndex = 0;
|
|
303
|
+
while (rowIndex < this.rowMatrix.length) {
|
|
304
|
+
let { index, rowsHeight } = this.getRowIndexByHeight(rowIndex, leftSpaceOnPage);
|
|
305
|
+
rowIndex = index;
|
|
306
|
+
if (index === this.rowMatrix.length) {
|
|
307
|
+
break;
|
|
308
|
+
}
|
|
309
|
+
leftHeight = this.rowMatrix
|
|
310
|
+
.slice(index)
|
|
311
|
+
.map(x => x.height)
|
|
312
|
+
.reduce((partialSum, curr) => partialSum + curr + this.borderSize);
|
|
313
|
+
const splitRowHeight = spaceBetweenPagesContent + leftSpaceOnPage - rowsHeight;
|
|
314
|
+
this.createSplitRow(index + this.splits.length, splitRowHeight);
|
|
315
|
+
this.splits.push(index + this.splits.length);
|
|
316
|
+
tableHeightWithSplits += splitRowHeight;
|
|
317
|
+
leftSpaceOnPage = contentHeight;
|
|
318
|
+
}
|
|
319
|
+
return {
|
|
320
|
+
splitsCount: this.splits.length,
|
|
321
|
+
tableHeight: tableHeightWithSplits,
|
|
322
|
+
leftHeight
|
|
323
|
+
};
|
|
324
|
+
}
|
|
325
|
+
getRowIndexByHeight(startIndex, height) {
|
|
326
|
+
if (startIndex >= this.rowMatrix.length) {
|
|
327
|
+
return { index: this.rowMatrix.length, rowsHeight: 0 };
|
|
328
|
+
}
|
|
329
|
+
let tableHeight = this.rowMatrix[startIndex].height + this.borderSize, i = startIndex;
|
|
330
|
+
while (tableHeight < height) {
|
|
331
|
+
tableHeight += this.rowMatrix[i + 1]?.height + this.borderSize;
|
|
332
|
+
i++;
|
|
333
|
+
}
|
|
334
|
+
return { index: i, rowsHeight: tableHeight - this.rowMatrix[i]?.height };
|
|
335
|
+
}
|
|
336
|
+
createSplitRow(index, height) {
|
|
337
|
+
this.tableEl.insertRow(index);
|
|
338
|
+
this.tableEl.rows[index].style.height = `${height}px`;
|
|
339
|
+
this.tableEl.rows[index].classList.add('split-row');
|
|
340
|
+
}
|
|
341
|
+
removeSplits() {
|
|
342
|
+
this.splits = [];
|
|
343
|
+
while (this.tableEl.querySelector('.split-row')) {
|
|
344
|
+
const el = this.tableEl.querySelector('.split-row');
|
|
345
|
+
el.remove();
|
|
346
|
+
}
|
|
347
|
+
}
|
|
277
348
|
calculateProperties() {
|
|
278
349
|
if (!this.tableEl) {
|
|
279
350
|
return;
|
|
280
351
|
}
|
|
281
352
|
this.setTableHeight();
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
this.
|
|
353
|
+
}
|
|
354
|
+
getTableWidth() {
|
|
355
|
+
return this.table.columns.reduce((prev, next) => prev + next.width + this.borderSize, 1);
|
|
356
|
+
}
|
|
357
|
+
getSplitRowIndex(rowIndex) {
|
|
358
|
+
return this.getIndexIncludingSplitRows(this.rowMatrix[rowIndex].row);
|
|
359
|
+
}
|
|
360
|
+
getIndexIncludingSplitRows(row) {
|
|
361
|
+
return Array.from(this.tableEl.rows).indexOf(row);
|
|
362
|
+
}
|
|
363
|
+
getRowsHeightBefore(rowIndex) {
|
|
364
|
+
let index = 0;
|
|
365
|
+
for (const element of this.splits) {
|
|
366
|
+
if (rowIndex < element) {
|
|
367
|
+
break;
|
|
368
|
+
}
|
|
369
|
+
index = element + 1;
|
|
370
|
+
}
|
|
371
|
+
return this.getRowsHeight(0, index);
|
|
372
|
+
}
|
|
373
|
+
getRowsHeightBetweenSplits(rowIndex) {
|
|
374
|
+
let startIndex = 0;
|
|
375
|
+
let endIndex = this.tableEl.rows.length;
|
|
376
|
+
for (const element of this.splits) {
|
|
377
|
+
if (rowIndex < element) {
|
|
378
|
+
endIndex = element;
|
|
379
|
+
break;
|
|
380
|
+
}
|
|
381
|
+
startIndex = element + 1;
|
|
382
|
+
}
|
|
383
|
+
return this.getRowsHeight(startIndex, endIndex);
|
|
384
|
+
}
|
|
385
|
+
getRowsHeight(start, end) {
|
|
386
|
+
let sum = 0;
|
|
387
|
+
for (let i = start; i < end; i++) {
|
|
388
|
+
sum += this.tableEl.rows[i].offsetHeight;
|
|
389
|
+
}
|
|
390
|
+
return sum;
|
|
285
391
|
}
|
|
286
392
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.1", ngImport: i0, type: NoderTableComponent, deps: [{ token: i1.ComponentService }, { token: i2.EditorService }, { token: i0.ElementRef }, { token: i3.OverlayService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
287
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.2.1", type: NoderTableComponent, selector: "app-noder-table", usesInheritance: true, ngImport: i0, template: '', isInline: true, styles: [":host
|
|
393
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.2.1", type: NoderTableComponent, selector: "app-noder-table", usesInheritance: true, ngImport: i0, template: '', isInline: true, styles: [":host{position:relative}:host::ng-deep table{position:relative;border-collapse:collapse;background:transparent;empty-cells:show;border-spacing:0;overflow:visible;table-layout:fixed}:host::ng-deep td{position:relative;vertical-align:top;border:1px solid #000;margin:0;padding:0;height:inherit}:host::ng-deep .hidden-cell{display:none;cursor:not-allowed}:host::ng-deep .resizer-border{position:absolute;border:solid .5px blue;z-index:1}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
288
394
|
}
|
|
289
395
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.1", ngImport: i0, type: NoderTableComponent, decorators: [{
|
|
290
396
|
type: Component,
|
|
291
|
-
args: [{ selector: 'app-noder-table', template: '', changeDetection: ChangeDetectionStrategy.OnPush, styles: [":host
|
|
397
|
+
args: [{ selector: 'app-noder-table', template: '', changeDetection: ChangeDetectionStrategy.OnPush, styles: [":host{position:relative}:host::ng-deep table{position:relative;border-collapse:collapse;background:transparent;empty-cells:show;border-spacing:0;overflow:visible;table-layout:fixed}:host::ng-deep td{position:relative;vertical-align:top;border:1px solid #000;margin:0;padding:0;height:inherit}:host::ng-deep .hidden-cell{display:none;cursor:not-allowed}:host::ng-deep .resizer-border{position:absolute;border:solid .5px blue;z-index:1}\n"] }]
|
|
292
398
|
}], ctorParameters: () => [{ type: i1.ComponentService }, { type: i2.EditorService }, { type: i0.ElementRef }, { type: i3.OverlayService }] });
|
|
293
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LW5vZGVyL3NyYy9saWIvK3NoYXJlZC9lZGl0b3IvY3VzdG9tLWNvbXBvbmVudHMvdGFibGUvY29tcG9uZW50cy90YWJsZS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBeUIsTUFBTSxlQUFlLENBQUM7QUFFMUYsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDMUUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzFELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQU0zRCxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDdkQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFFakUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBR3hELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUM5RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sOEJBQThCLENBQUM7Ozs7O0FBUTdELE1BQU0sT0FBTyxtQkFBb0IsU0FBUSxrQkFBa0I7SUFDdkQsSUFBSSxLQUFLO1FBQ0wsT0FBTyxJQUFJLENBQUMsT0FBcUIsQ0FBQztJQUN0QyxDQUFDO0lBQ0QsSUFBSSxLQUFLLENBQUMsR0FBZTtRQUNyQixJQUFJLENBQUMsT0FBTyxHQUFHLEdBQUcsQ0FBQztJQUN2QixDQUFDO0lBa0JELFlBQ1ksZ0JBQWtDLEVBQ2xDLGFBQTRCLEVBQzVCLEVBQWMsRUFDZCxjQUE4QjtRQUV0QyxLQUFLLEVBQUUsQ0FBQztRQUxBLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUFDbEMsa0JB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O1lBQzVCLFVBQVUsSUFBSSxHQUFHLENBQUMsTUFBTSxDQUFDO1lBRXpCLElBQUksR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsRUFBRTtnQkFDbEUsYUFBYSxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUM7YUFDcEM7U0FDSjtRQUVELElBQUksQ0FBQyxPQUFPLEdBQUcsVUFBVSxHQUFHLGFBQWEsQ0FBQztJQUM5QyxDQUFDO0lBUVMsbUJBQW1CO1FBQ3pCLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFO1lBQ2YsT0FBTztTQUNWO1FBRUQsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBRXRCLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDO1FBQ2hFLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQzlFLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxHQUFHLFdBQVcsQ0FBQztJQUN0QyxDQUFDOzhHQTFVUSxtQkFBbUI7a0dBQW5CLG1CQUFtQiw4RUFKbEIsRUFBRTs7MkZBSUgsbUJBQW1CO2tCQU4vQixTQUFTOytCQUNJLGlCQUFpQixZQUNqQixFQUFFLG1CQUVLLHVCQUF1QixDQUFDLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBPbkRlc3Ryb3kgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgQmFzZU5vZGVyQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vc2hhcmVkL2Fic3RyYWN0L2Jhc2UuY29tcG9uZW50JztcbmltcG9ydCB7IENlbGxEYXRhTW9kZWwgfSBmcm9tICcuLi9tb2RlbHMvY2VsbC1kYXRhLm1vZGVsJztcbmltcG9ydCB7IENlbGxSZXNpemVyIH0gZnJvbSAnLi4vY2VsbC1yZXNpemVyL2NlbGwtcmVzaXplcic7XG5pbXBvcnQgeyBDZWxsUmVzaXplclBhcmFtZXRlcnNNb2RlbCB9IGZyb20gJy4uL21vZGVscy9jZWxsLXJlc2l6ZXItcGFyYW1ldGVycy5tb2RlbCc7XG5pbXBvcnQgeyBDb21wb25lbnRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2hhcmVkL3NlcnZpY2VzL2NvbXBvbmVudC9jb21wb25lbnQuc2VydmljZSc7XG5pbXBvcnQgeyBFZGl0U2Vzc2lvbiB9IGZyb20gJy4uLy4uLy4uL2NvcmUvZWRpdC5zZXNzaW9uJztcbmltcG9ydCB7IEVkaXRvclNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9pbnRlcmFjdGlvbi9lZGl0b3Iuc2VydmljZSc7XG5pbXBvcnQgeyBHZW5lcmFsUHJvcGVydGllc01vZGVsIH0gZnJvbSAnLi4vLi4vLi4vZXhlY3V0aW9uL21vZGVscy9nZW5lcmFsLXByb3BlcnRpZXMubW9kZWwnO1xuaW1wb3J0IHsgSFJ1bGUgfSBmcm9tICcuLi8uLi8uLi9jb3JlL2VudW1zL2hydWxlLmVudW0nO1xuaW1wb3J0IHsgTm9kZXJUYWJsZUNlbGxDb21wb25lbnQgfSBmcm9tICcuL3RhYmxlLWNlbGwuY29tcG9uZW50JztcbmltcG9ydCB7IE92ZXJsYXlTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2hhcmVkL3NlcnZpY2VzL292ZXJsYXkvb3ZlcmxheS5zZXJ2aWNlJztcbmltcG9ydCB7IFJvd0RhdGFNb2RlbCB9IGZyb20gJy4uL21vZGVscy9yb3ctZGF0YS5tb2RlbCc7XG5pbXBvcnQgeyBSb3dNb2RlbCB9IGZyb20gJy4uLy4uLy4uLy4uLy4uL21vZGVscy9nZW5lcmF0ZWQvcm93Lm1vZGVsJztcbmltcG9ydCB7IFRhYmxlTW9kZWwgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi9tb2RlbHMvZ2VuZXJhdGVkL3RhYmxlLm1vZGVsJztcbmltcG9ydCB7IFRhYmxlU2VsZWN0aW9uIH0gZnJvbSAnLi4vc2VsZWN0aW9uL3RhYmxlLXNlbGVjdGlvbic7XG5pbXBvcnQgeyBWZXJ0aWNhbE1lcmdlIH0gZnJvbSAnLi4vZW51bXMvdmVydGljYWwtbWVyZ2UuZW51bSc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnYXBwLW5vZGVyLXRhYmxlJyxcbiAgICB0ZW1wbGF0ZTogJycsXG4gICAgc3R5bGVVcmxzOiBbJy4vdGFibGUuY29tcG9uZW50LnNjc3MnXSxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxufSlcbmV4cG9ydCBjbGFzcyBOb2RlclRhYmxlQ29tcG9uZW50IGV4dGVuZHMgQmFzZU5vZGVyQ29tcG9uZW50IGltcGxlbWVudHMgT25EZXN0cm95IHtcbiAgICBnZXQgdGFibGUoKTogVGFibGVNb2RlbCB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbnRlbnQgYXMgVGFibGVNb2RlbDtcbiAgICB9XG4gICAgc2V0IHRhYmxlKHZhbDogVGFibGVNb2RlbCkge1xuICAgICAgICB0aGlzLmNvbnRlbnQgPSB2YWw7XG4gICAgfVxuXG4gICAgdGFibGVTZWxlY3Rpb246IFRhYmxlU2VsZWN0aW9uO1xuXG4gICAgdGFibGVFbDogSFRNTFRhYmxlRWxlbWVudDtcblxuICAgIHJlc2l6ZXI6IENlbGxSZXNpemVyO1xuXG4gICAgcmVzaXplckVsOiBIVE1MRGl2RWxlbWVudDtcblxuICAgIHJvd01hdHJpeDogUm93RGF0YU1vZGVsW10gPSBbXTtcblxuICAgIHByb3BlcnRpZXM6IEdlbmVyYWxQcm9wZXJ0aWVzTW9kZWw7XG5cbiAgICByZWFkb25seSBtaW5Sb3dIZWlnaHQgPSAxOTtcblxuICAgIHJlYWRvbmx5IGJvcmRlclNpemUgPSAwLjg7XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSBjb21wb25lbnRTZXJ2aWNlOiBDb21wb25lbnRTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIGVkaXRvclNlcnZpY2U6IEVkaXRvclNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgZWw6IEVsZW1lbnRSZWYsXG4gICAgICAgIHByaXZhdGUgb3ZlcmxheVNlcnZpY2U6IE92ZXJsYXlTZXJ2aWNlXG4gICAgKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgfVxuXG4gICAgb3ZlcnJpZGUgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHN1cGVyLm5nT25EZXN0cm95KCk7XG4gICAgICAgIHRoaXMudGFibGVTZWxlY3Rpb24/LmRlc3Ryb3koKTtcbiAgICB9XG5cbiAgICBpbml0aWFsaXplKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmNyZWF0ZVRhYmxlKCk7XG4gICAgICAgIHRoaXMuY2FsY3VsYXRlUHJvcGVydGllcygpO1xuICAgICAgICB0aGlzLmNyZWF0ZVJlc2l6ZXIoKTtcbiAgICAgICAgdGhpcy5lbC5uYXRpdmVFbGVtZW50LmFwcGVuZENoaWxkKHRoaXMucmVzaXplckVsKTtcbiAgICAgICAgdGhpcy5lbC5uYXRpdmVFbGVtZW50LmFwcGVuZENoaWxkKHRoaXMudGFibGVFbCk7XG4gICAgICAgIHRoaXMudGFibGVTZWxlY3Rpb24gPSBuZXcgVGFibGVTZWxlY3Rpb24oXG4gICAgICAgICAgICB0aGlzLmVkaXRvclNlcnZpY2UsXG4gICAgICAgICAgICB0aGlzLm92ZXJsYXlTZXJ2aWNlLFxuICAgICAgICAgICAgdGhpcy5yb3dNYXRyaXgsXG4gICAgICAgICAgICB0aGlzLnRhYmxlLFxuICAgICAgICAgICAgdGhpcy50YWJsZUVsLFxuICAgICAgICAgICAgdGhpcy5zZXNzaW9uSWRcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBnZXRDZWxsU2Vzc2lvbihyb3c6IG51bWJlciwgY29sdW1uOiBudW1iZXIpOiBFZGl0U2Vzc2lvbiB7XG4gICAgICAgIHJldHVybiB0aGlzLnJvd01hdHJpeFtyb3ddLmNlbGxzW2NvbHVtbl0uY29tcG9uZW50UmVmLmluc3RhbmNlLnNlc3Npb247XG4gICAgfVxuXG4gICAgZ2V0Q2VsbFdpZHRoKHRhYmxlUm93OiBSb3dNb2RlbCwgY2VsbEluZGV4OiBudW1iZXIsIGFic29sdXRlQ2VsbEluZGV4OiBudW1iZXIpOiBudW1iZXIge1xuICAgICAgICBpZiAodGFibGVSb3cuY2VsbHNbY2VsbEluZGV4XS53aWR0aCkge1xuICAgICAgICAgICAgcmV0dXJuIHRhYmxlUm93LmNlbGxzW2NlbGxJbmRleF0ud2lkdGg7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgd2lkdGggPSAwO1xuICAgICAgICBsZXQgaSA9IGFic29sdXRlQ2VsbEluZGV4O1xuICAgICAgICBjb25zdCBjZWxsU3BhbkNvdW50ID0gYWJzb2x1dGVDZWxsSW5kZXggKyB0YWJsZVJvdy5jZWxsc1tjZWxsSW5kZXhdLmhvcml6b250YWxNZXJnZTtcblxuICAgICAgICBkbyB7XG4gICAgICAgICAgICB3aWR0aCArPSB0aGlzLnRhYmxlLmNvbHVtbnNbaV0ud2lkdGg7XG4gICAgICAgICAgICBpKys7XG4gICAgICAgIH0gd2hpbGUgKGkgPCBjZWxsU3BhbkNvdW50KTtcblxuICAgICAgICByZXR1cm4gd2lkdGg7XG4gICAgfVxuXG4gICAgY3JlYXRlUmVzaXplcigpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5yZXNpemVyRWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgdGhpcy5yZXNpemVyRWwuY2xhc3NOYW1lID0gJ3Jlc2l6ZXItYm9yZGVyJztcbiAgICAgICAgdGhpcy5yZXNpemVyRWwuc2V0QXR0cmlidXRlKCdzdHlsZScsIGBkaXNwbGF5Om5vbmU7YCk7XG4gICAgICAgIHRoaXMucmVzaXplciA9IG5ldyBDZWxsUmVzaXplcih0aGlzLnRhYmxlLCB0aGlzLnRhYmxlRWwsIHRoaXMuZWRpdG9yU2VydmljZSwgdGhpcy5yZXNpemVyRWwpO1xuICAgICAgICB0aGlzLnJlc2l6ZXIuc2Vzc2lvbklkID0gdGhpcy5zZXNzaW9uSWQ7XG4gICAgfVxuXG4gICAgY3JlYXRlVGFibGUoKTogdm9pZCB7XG4gICAgICAgIHRoaXMudGFibGVFbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RhYmxlJyk7XG4gICAgICAgIHRoaXMuc2V0Q29sZ3JvdXAoKTtcbiAgICAgICAgdGhpcy5pbnNlcnRSb3dzKHRoaXMudGFibGUucm93cy5sZW5ndGgsIDApO1xuICAgICAgICB0aGlzLmZpbGxUYWJsZUNlbGxzKCk7XG4gICAgfVxuXG4gICAgdXBkYXRlVGFibGUoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGNlbGxzID0gW10uY29uY2F0KC4uLnRoaXMucm93TWF0cml4Lm1hcCh4ID0+IHguY2VsbHMpKSBhcyBDZWxsRGF0YU1vZGVsW107XG4gICAgICAgIGNvbnN0IHVuaXFDZWxscyA9IG5ldyBTZXQoY2VsbHMubWFwKHggPT4geC5jb21wb25lbnRSZWYpKTtcbiAgICAgICAgdW5pcUNlbGxzLmZvckVhY2goeCA9PiB0aGlzLmNvbXBvbmVudFNlcnZpY2UucmVtb3ZlQ29tcG9uZW50KHgpKTtcbiAgICAgICAgdGhpcy50YWJsZVNlbGVjdGlvbi5kZXN0cm95KCk7XG4gICAgICAgIHRoaXMucm93TWF0cml4ID0gW107XG4gICAgICAgIHRoaXMudGFibGVFbC5yZW1vdmUoKTtcbiAgICAgICAgdGhpcy5pbml0aWFsaXplKCk7XG4gICAgfVxuXG4gICAgaW5zZXJ0Um93cyhyb3dzQ291bnQ6IG51bWJlciwgdGFyZ2V0SW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgICAgICBsZXQgcm93SW5kZXggPSAwO1xuXG4gICAgICAgIHdoaWxlIChyb3dJbmRleCA8IHJvd3NDb3VudCkge1xuICAgICAgICAgICAgY29uc3QgdGFyZ2V0Um93SW5kZXggPSB0YXJnZXRJbmRleCArIHJvd0luZGV4O1xuICAgICAgICAgICAgY29uc3Qgcm93ID0gdGhpcy50YWJsZUVsLmluc2VydFJvdyh0YXJnZXRSb3dJbmRleCk7XG4gICAgICAgICAgICB0aGlzLnJvd01hdHJpeC5zcGxpY2UodGFyZ2V0Um93SW5kZXgsIDAsIG5ldyBSb3dEYXRhTW9kZWwocm93LCAwLCBbXSkpO1xuICAgICAgICAgICAgdGhpcy5pbnNlcnRDZWxscyh0YXJnZXRSb3dJbmRleCwgdGhpcy50YWJsZS5yb3dzW3RhcmdldFJvd0luZGV4XS5jZWxscy5sZW5ndGgsIDApO1xuICAgICAgICAgICAgcm93SW5kZXgrKztcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZmlsbFRhYmxlUm93KCk7XG4gICAgfVxuXG4gICAgaW5zZXJ0Q2VsbHMocm93SW5kZXg6IG51bWJlciwgY2VsbHNDb3VudDogbnVtYmVyLCB0YXJnZXRJbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIGxldCBtb2RlbFRhcmdldEluZGV4ID0gdGhpcy5nZXRNb2RlbFRhcmdldEluZGV4KHJvd0luZGV4LCB0YXJnZXRJbmRleCk7XG4gICAgICAgIHRoaXMuYWRkQ2VsbHMocm93SW5kZXgsIGNlbGxzQ291bnQsIHRhcmdldEluZGV4LCBtb2RlbFRhcmdldEluZGV4KTtcbiAgICB9XG5cbiAgICBnZXRNb2RlbFRhcmdldEluZGV4KHJvd0luZGV4OiBudW1iZXIsIHRhcmdldEluZGV4OiBudW1iZXIpOiBudW1iZXIge1xuICAgICAgICBsZXQgYWJzb2x1dGVNb2RlbENlbGxDb3VudCA9IDA7XG4gICAgICAgIGxldCBtb2RlbFRhcmdldEluZGV4ID0gMDtcblxuICAgICAgICB3aGlsZSAoYWJzb2x1dGVNb2RlbENlbGxDb3VudCA8IHRhcmdldEluZGV4KSB7XG4gICAgICAgICAgICBhYnNvbHV0ZU1vZGVsQ2VsbENvdW50ICs9IHRoaXMudGFibGUucm93c1tyb3dJbmRleF0uY2VsbHNbbW9kZWxUYXJnZXRJbmRleF0uaG9yaXpvbnRhbE1lcmdlID8/IDE7XG5cbiAgICAgICAgICAgIGlmIChhYnNvbHV0ZU1vZGVsQ2VsbENvdW50ID4gdGFyZ2V0SW5kZXgpIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbW9kZWxUYXJnZXRJbmRleCsrO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG1vZGVsVGFyZ2V0SW5kZXg7XG4gICAgfVxuXG4gICAgYWRkQ2VsbHMocm93SW5kZXg6IG51bWJlciwgY2VsbHNDb3VudDogbnVtYmVyLCB0YXJnZXRJbmRleDogbnVtYmVyLCBtb2RlbFRhcmdldEluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgbGV0IGkgPSAwO1xuICAgICAgICBsZXQgY3VycmVudFRhcmdldEluZGV4ID0gdGFyZ2V0SW5kZXg7XG5cbiAgICAgICAgd2hpbGUgKGkgPCBjZWxsc0NvdW50KSB7XG4gICAgICAgICAgICBjb25zdCBtb2RlbENlbGxJbmRleCA9IG1vZGVsVGFyZ2V0SW5kZXggKyBpO1xuXG4gICAgICAgICAgICBpZiAoKHRoaXMudGFibGUucm93c1tyb3dJbmRleF0uY2VsbHNbbW9kZWxDZWxsSW5kZXhdLnZlcnRpY2FsTWVyZ2UgYXMgVmVydGljYWxNZXJnZSkgPT09IFZlcnRpY2FsTWVyZ2UuTWVyZ2UpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBpbmhlcml0Q2VsbERhdGEgPSB0aGlzLnJvd01hdHJpeFtyb3dJbmRleCAtIDFdLmNlbGxzW2N1cnJlbnRUYXJnZXRJbmRleF07XG4gICAgICAgICAgICAgICAgY29uc3QgY291bnQgPSB0aGlzLnRhYmxlLnJvd3Nbcm93SW5kZXhdLmNlbGxzW21vZGVsQ2VsbEluZGV4XS5ob3Jpem9udGFsTWVyZ2UgPz8gMTtcbiAgICAgICAgICAgICAgICB0aGlzLmFkZEFkZGl0aW9uYWxDZWxscyhyb3dJbmRleCwgY3VycmVudFRhcmdldEluZGV4LCBjb3VudCwgaW5oZXJpdENlbGxEYXRhKTtcbiAgICAgICAgICAgICAgICBjdXJyZW50VGFyZ2V0SW5kZXggKz0gY291bnQ7XG4gICAgICAgICAgICAgICAgaSsrO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBjZWxsID0gdGhpcy50YWJsZUVsLnJvd3Nbcm93SW5kZXhdLmluc2VydENlbGwoY3VycmVudFRhcmdldEluZGV4KTtcbiAgICAgICAgICAgIGNvbnN0IGNvbXBvbmVudFJlZiA9IHRoaXMuY29tcG9uZW50U2VydmljZS5nZW5lcmF0ZUFuZEF0dGFjaENvbXBvbmVudChjZWxsLCBOb2RlclRhYmxlQ2VsbENvbXBvbmVudCwge1xuICAgICAgICAgICAgICAgIHRhYmxlOiB0aGlzLnRhYmxlLFxuICAgICAgICAgICAgICAgIGNlbGw6IHRoaXMudGFibGUucm93c1tyb3dJbmRleF0uY2VsbHNbbW9kZWxDZWxsSW5kZXhdLFxuICAgICAgICAgICAgICAgIHBhcmVudFNlc3Npb25JZDogdGhpcy5zZXNzaW9uSWQsXG4gICAgICAgICAgICAgICAgcm93SW5kZXgsXG4gICAgICAgICAgICAgICAgY2VsbEluZGV4OiBtb2RlbENlbGxJbmRleCxcbiAgICAgICAgICAgICAgICBjb2x1bW5JbmRleDogY3VycmVudFRhcmdldEluZGV4LFxuICAgICAgICAgICAgICAgIHdpZHRoOiB0aGlzLmdldENlbGxXaWR0aCh0aGlzLnRhYmxlLnJvd3Nbcm93SW5kZXhdLCBtb2RlbENlbGxJbmRleCwgY3VycmVudFRhcmdldEluZGV4KSxcbiAgICAgICAgICAgICAgICBoZWlnaHRDaGFuZ2VkOiB0aGlzLmNlbGxIZWlnaHRDaGFuZ2VkLFxuICAgICAgICAgICAgICAgIHN0YXJ0UmVzaXppbmc6IHRoaXMuc3RhcnRSZXNpemluZyxcbiAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzOiB0aGlzLnByb3BlcnRpZXNcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgY29uc3QgY2VsbENvbnRlbnRIZWlnaHQgPSBjb21wb25lbnRSZWYuaW5zdGFuY2UuZ2V0Q2VsbENvbnRlbnRIZWlnaHQoKTtcbiAgICAgICAgICAgIGNvbnN0IGNlbGxEYXRhID0gbmV3IENlbGxEYXRhTW9kZWwoY2VsbCwgY2VsbENvbnRlbnRIZWlnaHQsIGNvbXBvbmVudFJlZik7XG4gICAgICAgICAgICB0aGlzLnJvd01hdHJpeFtyb3dJbmRleF0uY2VsbHMuc3BsaWNlKGN1cnJlbnRUYXJnZXRJbmRleCwgMCwgY2VsbERhdGEpO1xuICAgICAgICAgICAgY3VycmVudFRhcmdldEluZGV4Kys7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLnRhYmxlLnJvd3Nbcm93SW5kZXhdLmNlbGxzW21vZGVsQ2VsbEluZGV4XS5ob3Jpem9udGFsTWVyZ2UgPiAxKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY291bnQgPSB0aGlzLnRhYmxlLnJvd3Nbcm93SW5kZXhdLmNlbGxzW21vZGVsQ2VsbEluZGV4XS5ob3Jpem9udGFsTWVyZ2UgLSAxO1xuICAgICAgICAgICAgICAgIHRoaXMuYWRkQWRkaXRpb25hbENlbGxzKHJvd0luZGV4LCBjdXJyZW50VGFyZ2V0SW5kZXgsIGNvdW50LCBjZWxsRGF0YSk7XG4gICAgICAgICAgICAgICAgY3VycmVudFRhcmdldEluZGV4ICs9IGNvdW50O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpKys7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBhZGRBZGRpdGlvbmFsQ2VsbHMocm93SW5kZXg6IG51bWJlciwgY2VsbEluZGV4OiBudW1iZXIsIGNlbGxzQ291bnQ6IG51bWJlciwgb3JpZ2luYWxDZWxsRGF0YTogQ2VsbERhdGFNb2RlbCk6IHZvaWQge1xuICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGNlbGxzQ291bnQ7IGorKykge1xuICAgICAgICAgICAgY29uc3QgYWRkaXRpb25hbENlbGwgPSB0aGlzLnRhYmxlRWwucm93c1tyb3dJbmRleF0uaW5zZXJ0Q2VsbChjZWxsSW5kZXgpO1xuICAgICAgICAgICAgYWRkaXRpb25hbENlbGwuY2xhc3NMaXN0LmFkZCgnaGlkZGVuLWNlbGwnKTtcbiAgICAgICAgICAgIGNvbnN0IGNlbGxEYXRhID0gbmV3IENlbGxEYXRhTW9kZWwob3JpZ2luYWxDZWxsRGF0YS5jZWxsLCBvcmlnaW5hbENlbGxEYXRhLmNlbGxDb250ZW50SGVpZ2h0LCBvcmlnaW5hbENlbGxEYXRhLmNvbXBvbmVudFJlZik7XG4gICAgICAgICAgICB0aGlzLnJvd01hdHJpeFtyb3dJbmRleF0uY2VsbHMuc3BsaWNlKGNlbGxJbmRleCwgMCwgY2VsbERhdGEpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc2V0Q29sZ3JvdXAoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IG9sZENvbEdyb3VwcyA9IHRoaXMudGFibGVFbC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnY29sZ3JvdXAnKTtcblxuICAgICAgICBpZiAob2xkQ29sR3JvdXBzLmxlbmd0aCkge1xuICAgICAgICAgICAgdGhpcy50YWJsZUVsLnJlbW92ZUNoaWxkKG9sZENvbEdyb3Vwc1swXSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBjb2xncm91cCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NvbGdyb3VwJyk7XG4gICAgICAgIGxldCBpID0gMDtcblxuICAgICAgICB3aGlsZSAoaSA8IHRoaXMudGFibGUuY29sdW1ucy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGNvbnN0IGNvbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NvbCcpO1xuICAgICAgICAgICAgY29sLnN0eWxlLndpZHRoID0gYCR7dGhpcy50YWJsZS5jb2x1bW5zW2ldLndpZHRofXB4YDtcbiAgICAgICAgICAgIGNvbGdyb3VwLmFwcGVuZENoaWxkKGNvbCk7XG4gICAgICAgICAgICBpKys7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnRhYmxlRWwuaW5zZXJ0QWRqYWNlbnRFbGVtZW50KCdhZnRlcmJlZ2luJywgY29sZ3JvdXApO1xuICAgIH1cblxuICAgIGZpbGxUYWJsZVJvdygpOiB2b2lkIHtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnRhYmxlLnJvd3MubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHN3aXRjaCAodGhpcy50YWJsZS5yb3dzW2ldLmhSdWxlKSB7XG4gICAgICAgICAgICAgICAgY2FzZSBIUnVsZS5BdExlYXN0OiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJvd0hlaWdodCA9IHRoaXMuZ2V0Um93SGVpZ2h0KGkpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnRhYmxlRWwucm93c1tpXS5zdHlsZS5taW5IZWlnaHQgPSBgJHt0aGlzLnRhYmxlLnJvd3NbaV0uaGVpZ2h0fXB4YDtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50YWJsZUVsLnJvd3NbaV0uc3R5bGUuaGVpZ2h0ID0gYCR7cm93SGVpZ2h0fXB4YDtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yb3dNYXRyaXhbaV0uaGVpZ2h0ID0gcm93SGVpZ2h0O1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FzZSBIUnVsZS5FeGFjdDpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50YWJsZUVsLnJvd3NbaV0uc3R5bGUuaGVpZ2h0ID0gYCR7dGhpcy50YWJsZS5yb3dzW2ldLmhlaWdodH1weGA7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucm93TWF0cml4W2ldLmhlaWdodCA9IHRoaXMudGFibGUucm93c1tpXS5oZWlnaHQ7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgcm93SGVpZ2h0ID0gdGhpcy5nZXRSb3dIZWlnaHQoaSk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG1pblJvd0hlaWdodCA9IHRoaXMudGFibGUucm93c1tpXS5oZWlnaHQgPz8gdGhpcy5taW5Sb3dIZWlnaHQ7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdEhlaWdodCA9IG1pblJvd0hlaWdodCA+IHJvd0hlaWdodCA/IG1pblJvd0hlaWdodCA6IHJvd0hlaWdodDtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50YWJsZUVsLnJvd3NbaV0uc3R5bGUuaGVpZ2h0ID0gYCR7cmVzdWx0SGVpZ2h0fXB4YDtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yb3dNYXRyaXhbaV0uaGVpZ2h0ID0gcmVzdWx0SGVpZ2h0O1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXRSb3dIZWlnaHQocm93SW5kZXg6IG51bWJlcik6IG51bWJlciB7XG4gICAgICAgIGNvbnN0IGNlbGxIZWlnaHRzID0gdGhpcy5yb3dNYXRyaXhbcm93SW5kZXhdLmNlbGxzLm1hcCgoeCwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgIGlmICgoeC5jb21wb25lbnRSZWYuaW5zdGFuY2UuY2VsbC52ZXJ0aWNhbE1lcmdlIGFzIFZlcnRpY2FsTWVyZ2UpID09PSBWZXJ0aWNhbE1lcmdlLlJlc3RhcnQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBpc0xhc3RWZXJ0aWNhbE1lcmdlZENlbGwgPSB4LmNlbGwgIT09IHRoaXMucm93TWF0cml4W3Jvd0luZGV4ICsgMV0/LmNlbGxzW2luZGV4XS5jZWxsO1xuXG4gICAgICAgICAgICAgICAgaWYgKGlzTGFzdFZlcnRpY2FsTWVyZ2VkQ2VsbCkge1xuICAgICAgICAgICAgICAgICAgICBsZXQgaSA9IHJvd0luZGV4IC0gMTtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGN1cnJlbnRIZWlnaHQgPSB4LmNlbGxDb250ZW50SGVpZ2h0O1xuXG4gICAgICAgICAgICAgICAgICAgIHdoaWxlICh4LmNlbGwgPT09IHRoaXMucm93TWF0cml4W2ldPy5jZWxsc1tpbmRleF0uY2VsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudEhlaWdodCAtPSB0aGlzLnJvd01hdHJpeFtpXS5oZWlnaHQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBpLS07XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3VycmVudEhlaWdodDtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHguY2VsbENvbnRlbnRIZWlnaHQ7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiBNYXRoLm1heCguLi5jZWxsSGVpZ2h0cyk7XG4gICAgfVxuXG4gICAgZmlsbFRhYmxlQ2VsbHMoKTogdm9pZCB7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5yb3dNYXRyaXgubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgdGhpcy5yb3dNYXRyaXhbaV0uY2VsbHMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucm93TWF0cml4W2kgLSAxXT8uY2VsbHNbal0/LmNlbGwgPT09IHRoaXMucm93TWF0cml4W2ldLmNlbGxzW2pdLmNlbGwgfHxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yb3dNYXRyaXhbaV0uY2VsbHNbal0uY2VsbCA9PT0gdGhpcy5yb3dNYXRyaXhbaV0uY2VsbHNbaiAtIDFdPy5jZWxsIHx8XG4gICAgICAgICAgICAgICAgICAgICh0aGlzLnJvd01hdHJpeFtpXS5jZWxsc1tqXS5jb21wb25lbnRSZWYuaW5zdGFuY2UuY2VsbC52ZXJ0aWNhbE1lcmdlIGFzIFZlcnRpY2FsTWVyZ2UpID09PSBWZXJ0aWNhbE1lcmdlLk1lcmdlXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRoaXMucm93TWF0cml4W2ldLmNlbGxzW2pdLmNlbGwuY29sU3BhbiA9IHRoaXMucm93TWF0cml4W2ldLmNlbGxzW2pdLmNvbXBvbmVudFJlZi5pbnN0YW5jZS5jZWxsLmhvcml6b250YWxNZXJnZTtcbiAgICAgICAgICAgICAgICB0aGlzLnJvd01hdHJpeFtpXS5jZWxsc1tqXS5jZWxsLnN0eWxlLmJhY2tncm91bmRDb2xvciA9XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucm93TWF0cml4W2ldLmNlbGxzW2pdLmNvbXBvbmVudFJlZi5pbnN0YW5jZS5jZWxsLmJhY2tncm91bmRDb2xvcjtcbiAgICAgICAgICAgICAgICB0aGlzLnNldENlbGxSb3dTcGFuKGksIGopO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgc2V0Q2VsbFJvd1NwYW4ocm93SW5kZXg6IG51bWJlciwgYWJzb2x1dGVDZWxsSW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgICAgICB0aGlzLnJvd01hdHJpeFtyb3dJbmRleF0uY2VsbHNbYWJzb2x1dGVDZWxsSW5kZXhdLmNlbGwucm93U3BhbiA9IDE7XG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgKHRoaXMucm93TWF0cml4W3Jvd0luZGV4XS5jZWxsc1thYnNvbHV0ZUNlbGxJbmRleF0uY29tcG9uZW50UmVmLmluc3RhbmNlLmNlbGwudmVydGljYWxNZXJnZSBhcyBWZXJ0aWNhbE1lcmdlKSAhPT1cbiAgICAgICAgICAgIFZlcnRpY2FsTWVyZ2UuUmVzdGFydFxuICAgICAgICApIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAobGV0IGkgPSByb3dJbmRleCArIDE7IGkgPCB0aGlzLnJvd01hdHJpeC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKHRoaXMucm93TWF0cml4W2ldLmNlbGxzW2Fic29sdXRlQ2VsbEluZGV4XS5jZWxsID09PSB0aGlzLnJvd01hdHJpeFtyb3dJbmRleF0uY2VsbHNbYWJzb2x1dGVDZWxsSW5kZXhdLmNlbGwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJvd01hdHJpeFtyb3dJbmRleF0uY2VsbHNbYWJzb2x1dGVDZWxsSW5kZXhdLmNlbGwucm93U3BhbisrO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHNldFRhYmxlSGVpZ2h0KCk6IHZvaWQge1xuICAgICAgICBsZXQgYm9yZGVyc0hlaWdodCA9IDA7XG4gICAgICAgIGxldCByb3dzSGVpZ2h0ID0gMTtcblxuICAgICAgICBmb3IgKGxldCByb3cgb2YgdGhpcy5yb3dNYXRyaXgpIHtcbiAgICAgICAgICAgIHJvd3NIZWlnaHQgKz0gcm93LmhlaWdodDtcblxuICAgICAgICAgICAgaWYgKHJvdy5jZWxscy5zb21lKHggPT4gIXguY29tcG9uZW50UmVmLmluc3RhbmNlLmNlbGwudmVydGljYWxNZXJnZSkpIHtcbiAgICAgICAgICAgICAgICBib3JkZXJzSGVpZ2h0ICs9IHRoaXMuYm9yZGVyU2l6ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2hlaWdodCA9IHJvd3NIZWlnaHQgKyBib3JkZXJzSGVpZ2h0O1xuICAgIH1cblxuICAgIHN0YXJ0UmVzaXppbmcgPSAoY2VsbFJlc2l6ZXJQYXJhbWV0ZXJzOiBDZWxsUmVzaXplclBhcmFtZXRlcnNNb2RlbCk6IHZvaWQgPT4ge1xuICAgICAgICB0aGlzLnJlc2l6ZXIucmVzaXplckhlaWdodCA9IHRoaXMuaGVpZ2h0O1xuICAgICAgICB0aGlzLnJlc2l6ZXIudGFibGVJbnNlcnRJbmRleCA9IHRoaXMuaW5zZXJ0SW5kZXg7XG4gICAgICAgIHRoaXMucmVzaXplci5vblN0YXJ0UmVzaXppbmcoY2VsbFJlc2l6ZXJQYXJhbWV0ZXJzKTtcbiAgICB9O1xuXG4gICAgcHJvdGVjdGVkIGNhbGN1bGF0ZVByb3BlcnRpZXMoKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy50YWJsZUVsKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnNldFRhYmxlSGVpZ2h0KCk7XG5cbiAgICAgICAgY29uc3QgYm9yZGVyc1NpemUgPSB0aGlzLmJvcmRlclNpemUgKiB0aGlzLnRhYmxlLmNvbHVtbnMubGVuZ3RoO1xuICAgICAgICBjb25zdCB3aWR0aCA9IHRoaXMudGFibGUuY29sdW1ucy5yZWR1Y2UoKHByZXYsIG5leHQpID0+IHByZXYgKyBuZXh0LndpZHRoLCAxKTtcbiAgICAgICAgdGhpcy5fd2lkdGggPSB3aWR0aCArIGJvcmRlcnNTaXplO1xuICAgIH1cblxuICAgIHByaXZhdGUgY2VsbEhlaWdodENoYW5nZWQgPSAocm93SW5kZXg6IG51bWJlciwgY2VsbEluZGV4OiBudW1iZXIsIGhlaWdodDogbnVtYmVyKTogdm9pZCA9PiB7XG4gICAgICAgIGNvbnN0IHRhYmxlUm93ID0gdGhpcy50YWJsZS5yb3dzW3Jvd0luZGV4XTtcbiAgICAgICAgdGhpcy5yb3dNYXRyaXhbcm93SW5kZXhdLmNlbGxzW2NlbGxJbmRleF0uY2VsbENvbnRlbnRIZWlnaHQgPSBoZWlnaHQgPCB0aGlzLm1pblJvd0hlaWdodCA/IHRoaXMubWluUm93SGVpZ2h0IDogaGVpZ2h0O1xuXG4gICAgICAgIGlmICh0YWJsZVJvdy5oUnVsZSA9PT0gSFJ1bGUuRXhhY3QpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHJvdyA9IHRoaXMudGFibGVFbC5yb3dzW3Jvd0luZGV4XTtcbiAgICAgICAgY29uc3QgY3VycmVudEhlaWdodCA9IHJvdy5vZmZzZXRIZWlnaHQ7XG4gICAgICAgIGNvbnN0IGNlbGxIZWlnaHRzID0gdGhpcy5yb3dNYXRyaXhbcm93SW5kZXhdLmNlbGxzLm1hcCh4ID0+IHguY2VsbENvbnRlbnRIZWlnaHQpO1xuICAgICAgICBjb25zdCBtYXhDZWxsQ29udGVudEhlaWdoID0gTWF0aC5tYXgoLi4uY2VsbEhlaWdodHMsIGhlaWdodCk7XG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgbWF4Q2VsbENvbnRlbnRIZWlnaCA+IGN1cnJlbnRIZWlnaHQgfHxcbiAgICAgICAgICAgIChtYXhDZWxsQ29udGVudEhlaWdoIDwgY3VycmVudEhlaWdodCAmJiAoIXRhYmxlUm93LmhlaWdodCB8fCB0YWJsZVJvdy5oZWlnaHQgPD0gbWF4Q2VsbENvbnRlbnRIZWlnaCkpXG4gICAgICAgICkge1xuICAgICAgICAgICAgcm93LnN0eWxlLmhlaWdodCA9IGAke21heENlbGxDb250ZW50SGVpZ2h9cHhgO1xuICAgICAgICAgICAgdGhpcy5yb3dNYXRyaXhbcm93SW5kZXhdLmhlaWdodCA9IG1heENlbGxDb250ZW50SGVpZ2g7XG4gICAgICAgICAgICB0aGlzLnNldFRhYmxlSGVpZ2h0KCk7XG4gICAgICAgICAgICB0aGlzLmVkaXRvclNlcnZpY2UuY2hhbmdlZFRhYmxlU2l6ZSh0aGlzLmluc2VydEluZGV4LCB0aGlzLnNlc3Npb25JZCk7XG4gICAgICAgIH1cbiAgICB9O1xufVxuIl19
|
|
399
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LW5vZGVyL3NyYy9saWIvK3NoYXJlZC9lZGl0b3IvY3VzdG9tLWNvbXBvbmVudHMvdGFibGUvY29tcG9uZW50cy90YWJsZS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBeUIsTUFBTSxlQUFlLENBQUM7QUFFMUYsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDMUUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzFELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQU0zRCxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDdkQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFFakUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBR3hELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUM5RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sOEJBQThCLENBQUM7Ozs7O0FBUTdELE1BQU0sT0FBTyxtQkFBb0IsU0FBUSxrQkFBa0I7SUFDdkQsSUFBSSxLQUFLO1FBQ0wsT0FBTyxJQUFJLENBQUMsT0FBcUIsQ0FBQztJQUN0QyxDQUFDO0lBQ0QsSUFBSSxLQUFLLENBQUMsR0FBZTtRQUNyQixJQUFJLENBQUMsT0FBTyxHQUFHLEdBQUcsQ0FBQztJQUN2QixDQUFDO0lBb0JELFlBQ1ksZ0JBQWtDLEVBQ2xDLGFBQTRCLEVBQzVCLEVBQWMsRUFDZCxjQUE4QjtRQUV0QyxLQUFLLEVBQUUsQ0FBQztRQUxBLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUFDbEMsa0JB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LE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxVQUFVLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDcEQsQ0FBQztJQUVPLGFBQWEsQ0FBQyxLQUFhLEVBQUUsR0FBVztRQUM1QyxJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUM7UUFDWixLQUFLLElBQUksQ0FBQyxHQUFHLEtBQUssRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQzlCLEdBQUcsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUM7U0FDNUM7UUFFRCxPQUFPLEdBQUcsQ0FBQztJQUNmLENBQUM7OEdBcGZRLG1CQUFtQjtrR0FBbkIsbUJBQW1CLDhFQUpsQixFQUFFOzsyRkFJSCxtQkFBbUI7a0JBTi9CLFNBQVM7K0JBQ0ksaUJBQWlCLFlBQ2pCLEVBQUUsbUJBRUssdUJBQXVCLENBQUMsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIEVsZW1lbnRSZWYsIE9uRGVzdHJveSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBCYXNlTm9kZXJDb21wb25lbnQgfSBmcm9tICcuLi8uLi9zaGFyZWQvYWJzdHJhY3QvYmFzZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ2VsbERhdGFNb2RlbCB9IGZyb20gJy4uL21vZGVscy9jZWxsLWRhdGEubW9kZWwnO1xuaW1wb3J0IHsgQ2VsbFJlc2l6ZXIgfSBmcm9tICcuLi9jZWxsLXJlc2l6ZXIvY2VsbC1yZXNpemVyJztcbmltcG9ydCB7IENlbGxSZXNpemVyUGFyYW1ldGVyc01vZGVsIH0gZnJvbSAnLi4vbW9kZWxzL2NlbGwtcmVzaXplci1wYXJhbWV0ZXJzLm1vZGVsJztcbmltcG9ydCB7IENvbXBvbmVudFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zaGFyZWQvc2VydmljZXMvY29tcG9uZW50L2NvbXBvbmVudC5zZXJ2aWNlJztcbmltcG9ydCB7IEVkaXRTZXNzaW9uIH0gZnJvbSAnLi4vLi4vLi4vY29yZS9lZGl0LnNlc3Npb24nO1xuaW1wb3J0IHsgRWRpdG9yU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL2ludGVyYWN0aW9uL2VkaXRvci5zZXJ2aWNlJztcbmltcG9ydCB7IEdlbmVyYWxQcm9wZXJ0aWVzTW9kZWwgfSBmcm9tICcuLi8uLi8uLi9leGVjdXRpb24vbW9kZWxzL2dlbmVyYWwtcHJvcGVydGllcy5tb2RlbCc7XG5pbXBvcnQgeyBIUnVsZSB9IGZyb20gJy4uLy4uLy4uL2NvcmUvZW51bXMvaHJ1bGUuZW51bSc7XG5pbXBvcnQgeyBOb2RlclRhYmxlQ2VsbENvbXBvbmVudCB9IGZyb20gJy4vdGFibGUtY2VsbC5jb21wb25lbnQnO1xuaW1wb3J0IHsgT3ZlcmxheVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zaGFyZWQvc2VydmljZXMvb3ZlcmxheS9vdmVybGF5LnNlcnZpY2UnO1xuaW1wb3J0IHsgUm93RGF0YU1vZGVsIH0gZnJvbSAnLi4vbW9kZWxzL3Jvdy1kYXRhLm1vZGVsJztcbmltcG9ydCB7IFJvd01vZGVsIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vbW9kZWxzL2dlbmVyYXRlZC9yb3cubW9kZWwnO1xuaW1wb3J0IHsgVGFibGVNb2RlbCB9IGZyb20gJy4uLy4uLy4uLy4uLy4uL21vZGVscy9nZW5lcmF0ZWQvdGFibGUubW9kZWwnO1xuaW1wb3J0IHsgVGFibGVTZWxlY3Rpb24gfSBmcm9tICcuLi9zZWxlY3Rpb24vdGFibGUtc2VsZWN0aW9uJztcbmltcG9ydCB7IFZlcnRpY2FsTWVyZ2UgfSBmcm9tICcuLi9lbnVtcy92ZXJ0aWNhbC1tZXJnZS5lbnVtJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdhcHAtbm9kZXItdGFibGUnLFxuICAgIHRlbXBsYXRlOiAnJyxcbiAgICBzdHlsZVVybHM6IFsnLi90YWJsZS5jb21wb25lbnQuc2NzcyddLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXG59KVxuZXhwb3J0IGNsYXNzIE5vZGVyVGFibGVDb21wb25lbnQgZXh0ZW5kcyBCYXNlTm9kZXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuICAgIGdldCB0YWJsZSgpOiBUYWJsZU1vZGVsIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29udGVudCBhcyBUYWJsZU1vZGVsO1xuICAgIH1cbiAgICBzZXQgdGFibGUodmFsOiBUYWJsZU1vZGVsKSB7XG4gICAgICAgIHRoaXMuY29udGVudCA9IHZhbDtcbiAgICB9XG5cbiAgICB0YWJsZVNlbGVjdGlvbjogVGFibGVTZWxlY3Rpb247XG5cbiAgICB0YWJsZUVsOiBIVE1MVGFibGVFbGVtZW50O1xuXG4gICAgcmVzaXplcjogQ2VsbFJlc2l6ZXI7XG5cbiAgICByZXNpemVyRWw6IEhUTUxEaXZFbGVtZW50O1xuXG4gICAgcm93TWF0cml4OiBSb3dEYXRhTW9kZWxbXSA9IFtdO1xuXG4gICAgcHJvcGVydGllczogR2VuZXJhbFByb3BlcnRpZXNNb2RlbDtcblxuICAgIHNwbGl0czogbnVtYmVyW10gPSBbXTtcblxuICAgIHJlYWRvbmx5IG1pblJvd0hlaWdodCA9IDE5O1xuXG4gICAgcmVhZG9ubHkgYm9yZGVyU2l6ZSA9IDE7XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSBjb21wb25lbnRTZXJ2aWNlOiBDb21wb25lbnRTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIGVkaXRvclNlcnZpY2U6IEVkaXRvclNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgZWw6IEVsZW1lbnRSZWYsXG4gICAgICAgIHByaXZhdGUgb3ZlcmxheVNlcnZpY2U6IE92ZXJsYXlTZXJ2aWNlXG4gICAgKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgfVxuXG4gICAgb3ZlcnJpZGUgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHN1cGVyLm5nT25EZXN0cm95KCk7XG4gICAgICAgIHRoaXMudGFibGVTZWxlY3Rpb24/LmRlc3Ryb3koKTtcbiAgICB9XG5cbiAgICBpbml0aWFsaXplKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmNyZWF0ZVRhYmxlKCk7XG4gICAgICAgIHRoaXMuY2FsY3VsYXRlUHJvcGVydGllcygpO1xuICAgICAgICB0aGlzLmNyZWF0ZVJlc2l6ZXIoKTtcbiAgICAgICAgdGhpcy5lbC5uYXRpdmVFbGVtZW50LmFwcGVuZENoaWxkKHRoaXMucmVzaXplckVsKTtcbiAgICAgICAgdGhpcy5lbC5uYXRpdmVFbGVtZW50LmFwcGVuZENoaWxkKHRoaXMudGFibGVFbCk7XG4gICAgICAgIHRoaXMudGFibGVTZWxlY3Rpb24gPSBuZXcgVGFibGVTZWxlY3Rpb24oXG4gICAgICAgICAgICB0aGlzLmVkaXRvclNlcnZpY2UsXG4gICAgICAgICAgICB0aGlzLm92ZXJsYXlTZXJ2aWNlLFxuICAgICAgICAgICAgdGhpcy5yb3dNYXRyaXgsXG4gICAgICAgICAgICB0aGlzLnRhYmxlLFxuICAgICAgICAgICAgdGhpcy50YWJsZUVsLFxuICAgICAgICAgICAgdGhpcy5zZXNzaW9uSWRcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBnZXRDZWxsU2Vzc2lvbihyb3c6IG51bWJlciwgY29sdW1uOiBudW1iZXIpOiBFZGl0U2Vzc2lvbiB7XG4gICAgICAgIHJldHVybiB0aGlzLnJvd01hdHJpeFtyb3ddLmNlbGxzW2NvbHVtbl0uY29tcG9uZW50UmVmLmluc3RhbmNlLnNlc3Npb247XG4gICAgfVxuXG4gICAgZ2V0Q2VsbFdpZHRoKHRhYmxlUm93OiBSb3dNb2RlbCwgY2VsbEluZGV4OiBudW1iZXIsIGFic29sdXRlQ2VsbEluZGV4OiBudW1iZXIpOiBudW1iZXIge1xuICAgICAgICBpZiAodGFibGVSb3cuY2VsbHNbY2VsbEluZGV4XS53aWR0aCkge1xuICAgICAgICAgICAgcmV0dXJuIHRhYmxlUm93LmNlbGxzW2NlbGxJbmRleF0ud2lkdGg7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgd2lkdGggPSAwO1xuICAgICAgICBsZXQgaSA9IGFic29sdXRlQ2VsbEluZGV4O1xuICAgICAgICBjb25zdCBjZWxsU3BhbkNvdW50ID0gYWJzb2x1dGVDZWxsSW5kZXggKyB0YWJsZVJvdy5jZWxsc1tjZWxsSW5kZXhdLmhvcml6b250YWxNZXJnZTtcblxuICAgICAgICBkbyB7XG4gICAgICAgICAgICB3aWR0aCArPSB0aGlzLnRhYmxlLmNvbHVtbnNbaV0ud2lkdGg7XG4gICAgICAgICAgICBpKys7XG4gICAgICAgIH0gd2hpbGUgKGkgPCBjZWxsU3BhbkNvdW50KTtcblxuICAgICAgICByZXR1cm4gd2lkdGg7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRBZGp1c3RlZFdpZHRoKHRhYmxlUm93OiBSb3dNb2RlbCwgY2VsbEluZGV4OiBudW1iZXIsIGFic29sdXRlQ2VsbEluZGV4OiBudW1iZXIpOiBudW1iZXIge1xuICAgICAgICBjb25zdCBjZWxsV2lkdGggPSB0aGlzLmdldENlbGxXaWR0aCh0YWJsZVJvdywgY2VsbEluZGV4LCBhYnNvbHV0ZUNlbGxJbmRleCk7XG5cbiAgICAgICAgaWYgKHRhYmxlUm93LmNlbGxzW2NlbGxJbmRleF0ud2lkdGhUeXBlID09PSAncGN0Jykge1xuICAgICAgICAgICAgdGFibGVSb3cuY2VsbHNbY2VsbEluZGV4XS53aWR0aFR5cGUgPSAnZHhhJztcbiAgICAgICAgICAgIHJldHVybiAoY2VsbFdpZHRoICogdGhpcy5fd2lkdGgpIC8gNTAwMDsgLy8gNTAwMCBpcyBlcXVhbCB0byAxMDAlIGluIGRvY3ggdW5pdHMgb2YgbWVhc3VyZW1lbnRcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBjZWxsV2lkdGg7XG4gICAgfVxuXG4gICAgY3JlYXRlUmVzaXplcigpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5yZXNpemVyRWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgdGhpcy5yZXNpemVyRWwuY2xhc3NOYW1lID0gJ3Jlc2l6ZXItYm9yZGVyJztcbiAgICAgICAgdGhpcy5yZXNpemVyRWwuc2V0QXR0cmlidXRlKCdzdHlsZScsIGBkaXNwbGF5Om5vbmU7YCk7XG4gICAgICAgIHRoaXMucmVzaXplciA9IG5ldyBDZWxsUmVzaXplcih0aGlzLnRhYmxlLCB0aGlzLnRhYmxlRWwsIHRoaXMuZWRpdG9yU2VydmljZSwgdGhpcy5yZXNpemVyRWwpO1xuICAgICAgICB0aGlzLnJlc2l6ZXIuc2Vzc2lvbklkID0gdGhpcy5zZXNzaW9uSWQ7XG4gICAgfVxuXG4gICAgY3JlYXRlVGFibGUoKTogdm9pZCB7XG4gICAgICAgIHRoaXMudGFibGVFbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RhYmxlJyk7XG4gICAgICAgIHRoaXMuc2V0Q29sZ3JvdXAoKTtcbiAgICAgICAgdGhpcy5pbnNlcnRSb3dzKHRoaXMudGFibGUucm93cy5sZW5ndGgsIDApO1xuICAgICAgICB0aGlzLmZpbGxUYWJsZUNlbGxzKCk7XG4gICAgfVxuXG4gICAgdXBkYXRlVGFibGUoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGNlbGxzID0gW10uY29uY2F0KC4uLnRoaXMucm93TWF0cml4Lm1hcCh4ID0+IHguY2VsbHMpKSBhcyBDZWxsRGF0YU1vZGVsW107XG4gICAgICAgIGNvbnN0IHVuaXFDZWxscyA9IG5ldyBTZXQoY2VsbHMubWFwKHggPT4geC5jb21wb25lbnRSZWYpKTtcbiAgICAgICAgdW5pcUNlbGxzLmZvckVhY2goeCA9PiB0aGlzLmNvbXBvbmVudFNlcnZpY2UucmVtb3ZlQ29tcG9uZW50KHgpKTtcbiAgICAgICAgdGhpcy50YWJsZVNlbGVjdGlvbi5kZXN0cm95KCk7XG4gICAgICAgIHRoaXMucm93TWF0cml4ID0gW107XG4gICAgICAgIHRoaXMudGFibGVFbC5yZW1vdmUoKTtcbiAgICAgICAgdGhpcy5pbml0aWFsaXplKCk7XG4gICAgfVxuXG4gICAgaW5zZXJ0Um93cyhyb3dzQ291bnQ6IG51bWJlciwgdGFyZ2V0SW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgICAgICB0aGlzLl93aWR0aCA9IHRoaXMuZ2V0VGFibGVXaWR0aCgpO1xuICAgICAgICBsZXQgcm93SW5kZXggPSAwO1xuXG4gICAgICAgIHdoaWxlIChyb3dJbmRleCA8IHJvd3NDb3VudCkge1xuICAgICAgICAgICAgY29uc3QgdGFyZ2V0Um93SW5kZXggPSB0YXJnZXRJbmRleCArIHJvd0luZGV4O1xuICAgICAgICAgICAgY29uc3Qgcm93ID0gdGhpcy50YWJsZUVsLmluc2VydFJvdyh0YXJnZXRSb3dJbmRleCk7XG4gICAgICAgICAgICB0aGlzLnJvd01hdHJpeC5zcGxpY2UodGFyZ2V0Um93SW5kZXgsIDAsIG5ldyBSb3dEYXRhTW9kZWwocm93LCAwLCBbXSkpO1xuICAgICAgICAgICAgdGhpcy5pbnNlcnRDZWxscyh0YXJnZXRSb3dJbmRleCwgdGhpcy50YWJsZS5yb3dzW3RhcmdldFJvd0luZGV4XS5jZWxscy5sZW5ndGgsIDApO1xuICAgICAgICAgICAgcm93SW5kZXgrKztcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZmlsbFRhYmxlUm93KCk7XG4gICAgfVxuXG4gICAgaW5zZXJ0Q2VsbHMocm93SW5kZXg6IG51bWJlciwgY2VsbHNDb3VudDogbnVtYmVyLCB0YXJnZXRJbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIGxldCBtb2RlbFRhcmdldEluZGV4ID0gdGhpcy5nZXRNb2RlbFRhcmdldEluZGV4KHJvd0luZGV4LCB0YXJnZXRJbmRleCk7XG4gICAgICAgIHRoaXMuYWRkQ2VsbHMocm93SW5kZXgsIGNlbGxzQ291bnQsIHRhcmdldEluZGV4LCBtb2RlbFRhcmdldEluZGV4KTtcbiAgICB9XG5cbiAgICBnZXRNb2RlbFRhcmdldEluZGV4KHJvd0luZGV4OiBudW1iZXIsIHRhcmdldEluZGV4OiBudW1iZXIpOiBudW1iZXIge1xuICAgICAgICBsZXQgYWJzb2x1dGVNb2RlbENlbGxDb3VudCA9IDA7XG4gICAgICAgIGxldCBtb2RlbFRhcmdldEluZGV4ID0gMDtcblxuICAgICAgICB3aGlsZSAoYWJzb2x1dGVNb2RlbENlbGxDb3VudCA8IHRhcmdldEluZGV4KSB7XG4gICAgICAgICAgICBhYnNvbHV0ZU1vZGVsQ2VsbENvdW50ICs9IHRoaXMudGFibGUucm93c1tyb3dJbmRleF0uY2VsbHNbbW9kZWxUYXJnZXRJbmRleF0uaG9yaXpvbnRhbE1lcmdlID8/IDE7XG5cbiAgICAgICAgICAgIGlmIChhYnNvbHV0ZU1vZGVsQ2VsbENvdW50ID4gdGFyZ2V0SW5kZXgpIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbW9kZWxUYXJnZXRJbmRleCsrO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG1vZGVsVGFyZ2V0SW5kZXg7XG4gICAgfVxuXG4gICAgYWRkQ2VsbHMocm93SW5kZXg6IG51bWJlciwgY2VsbHNDb3VudDogbnVtYmVyLCB0YXJnZXRJbmRleDogbnVtYmVyLCBtb2RlbFRhcmdldEluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgbGV0IGkgPSAwO1xuICAgICAgICBsZXQgY3VycmVudFRhcmdldEluZGV4ID0gdGFyZ2V0SW5kZXg7XG5cbiAgICAgICAgd2hpbGUgKGkgPCBjZWxsc0NvdW50KSB7XG4gICAgICAgICAgICBjb25zdCBtb2RlbENlbGxJbmRleCA9IG1vZGVsVGFyZ2V0SW5kZXggKyBpO1xuXG4gICAgICAgICAgICBpZiAoKHRoaXMudGFibGUucm93c1tyb3dJbmRleF0uY2VsbHNbbW9kZWxDZWxsSW5kZXhdLnZlcnRpY2FsTWVyZ2UgYXMgVmVydGljYWxNZXJnZSkgPT09IFZlcnRpY2FsTWVyZ2UuTWVyZ2UpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBpbmhlcml0Q2VsbERhdGEgPSB0aGlzLnJvd01hdHJpeFtyb3dJbmRleCAtIDFdLmNlbGxzW2N1cnJlbnRUYXJnZXRJbmRleF07XG4gICAgICAgICAgICAgICAgY29uc3QgY291bnQgPSB0aGlzLnRhYmxlLnJvd3Nbcm93SW5kZXhdLmNlbGxzW21vZGVsQ2VsbEluZGV4XS5ob3Jpem9udGFsTWVyZ2UgPz8gMTtcbiAgICAgICAgICAgICAgICB0aGlzLmFkZEFkZGl0aW9uYWxDZWxscyhyb3dJbmRleCwgY3VycmVudFRhcmdldEluZGV4LCBjb3VudCwgaW5oZXJpdENlbGxEYXRhKTtcbiAgICAgICAgICAgICAgICBjdXJyZW50VGFyZ2V0SW5kZXggKz0gY291bnQ7XG4gICAgICAgICAgICAgICAgaSsrO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBjZWxsID0gdGhpcy50YWJsZUVsLnJvd3Nbcm93SW5kZXhdLmluc2VydENlbGwoY3VycmVudFRhcmdldEluZGV4KTtcbiAgICAgICAgICAgIGNvbnN0IGNvbXBvbmVudFJlZiA9IHRoaXMuY29tcG9uZW50U2VydmljZS5nZW5lcmF0ZUFuZEF0dGFjaENvbXBvbmVudChjZWxsLCBOb2RlclRhYmxlQ2VsbENvbXBvbmVudCwge1xuICAgICAgICAgICAgICAgIHRhYmxlOiB0aGlzLnRhYmxlLFxuICAgICAgICAgICAgICAgIGNlbGw6IHRoaXMudGFibGUucm93c1tyb3dJbmRleF0uY2VsbHNbbW9kZWxDZWxsSW5kZXhdLFxuICAgICAgICAgICAgICAgIHBhcmVudFNlc3Npb25JZDogdGhpcy5zZXNzaW9uSWQsXG4gICAgICAgICAgICAgICAgcm93SW5kZXgsXG4gICAgICAgICAgICAgICAgY2VsbEluZGV4OiBtb2RlbENlbGxJbmRleCxcbiAgICAgICAgICAgICAgICBjb2x1bW5JbmRleDogY3VycmVudFRhcmdldEluZGV4LFxuICAgICAgICAgICAgICAgIHdpZHRoOiB0aGlzLmdldEFkanVzdGVkV2lkdGgodGhpcy50YWJsZS5yb3dzW3Jvd0luZGV4XSwgbW9kZWxDZWxsSW5kZXgsIGN1cnJlbnRUYXJnZXRJbmRleCksXG4gICAgICAgICAgICAgICAgaGVpZ2h0Q2hhbmdlZDogdGhpcy5jZWxsSGVpZ2h0Q2hhbmdlZCxcbiAgICAgICAgICAgICAgICBzdGFydFJlc2l6aW5nOiB0aGlzLnN0YXJ0UmVzaXppbmcsXG4gICAgICAgICAgICAgICAgcHJvcGVydGllczogdGhpcy5wcm9wZXJ0aWVzXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGNvbnN0IGNlbGxDb250ZW50SGVpZ2h0ID0gY29tcG9uZW50UmVmLmluc3RhbmNlLmdldENlbGxDb250ZW50SGVpZ2h0KCk7XG4gICAgICAgICAgICBjb25zdCBjZWxsRGF0YSA9IG5ldyBDZWxsRGF0YU1vZGVsKGNlbGwsIGNlbGxDb250ZW50SGVpZ2h0LCBjb21wb25lbnRSZWYpO1xuICAgICAgICAgICAgdGhpcy5yb3dNYXRyaXhbcm93SW5kZXhdLmNlbGxzLnNwbGljZShjdXJyZW50VGFyZ2V0SW5kZXgsIDAsIGNlbGxEYXRhKTtcbiAgICAgICAgICAgIGN1cnJlbnRUYXJnZXRJbmRleCsrO1xuXG4gICAgICAgICAgICBpZiAodGhpcy50YWJsZS5yb3dzW3Jvd0luZGV4XS5jZWxsc1ttb2RlbENlbGxJbmRleF0uaG9yaXpvbnRhbE1lcmdlID4gMSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvdW50ID0gdGhpcy50YWJsZS5yb3dzW3Jvd0luZGV4XS5jZWxsc1ttb2RlbENlbGxJbmRleF0uaG9yaXpvbnRhbE1lcmdlIC0gMTtcbiAgICAgICAgICAgICAgICB0aGlzLmFkZEFkZGl0aW9uYWxDZWxscyhyb3dJbmRleCwgY3VycmVudFRhcmdldEluZGV4LCBjb3VudCwgY2VsbERhdGEpO1xuICAgICAgICAgICAgICAgIGN1cnJlbnRUYXJnZXRJbmRleCArPSBjb3VudDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaSsrO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgYWRkQWRkaXRpb25hbENlbGxzKHJvd0luZGV4OiBudW1iZXIsIGNlbGxJbmRleDogbnVtYmVyLCBjZWxsc0NvdW50OiBudW1iZXIsIG9yaWdpbmFsQ2VsbERhdGE6IENlbGxEYXRhTW9kZWwpOiB2b2lkIHtcbiAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBjZWxsc0NvdW50OyBqKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGFkZGl0aW9uYWxDZWxsID0gdGhpcy50YWJsZUVsLnJvd3Nbcm93SW5kZXhdLmluc2VydENlbGwoY2VsbEluZGV4KTtcbiAgICAgICAgICAgIGFkZGl0aW9uYWxDZWxsLmNsYXNzTGlzdC5hZGQoJ2hpZGRlbi1jZWxsJyk7XG4gICAgICAgICAgICBjb25zdCBjZWxsRGF0YSA9IG5ldyBDZWxsRGF0YU1vZGVsKG9yaWdpbmFsQ2VsbERhdGEuY2VsbCwgb3JpZ2luYWxDZWxsRGF0YS5jZWxsQ29udGVudEhlaWdodCwgb3JpZ2luYWxDZWxsRGF0YS5jb21wb25lbnRSZWYpO1xuICAgICAgICAgICAgdGhpcy5yb3dNYXRyaXhbcm93SW5kZXhdLmNlbGxzLnNwbGljZShjZWxsSW5kZXgsIDAsIGNlbGxEYXRhKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHNldENvbGdyb3VwKCk6IHZvaWQge1xuICAgICAgICBjb25zdCBvbGRDb2xHcm91cHMgPSB0aGlzLnRhYmxlRWwuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2NvbGdyb3VwJyk7XG5cbiAgICAgICAgaWYgKG9sZENvbEdyb3Vwcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRoaXMudGFibGVFbC5yZW1vdmVDaGlsZChvbGRDb2xHcm91cHNbMF0pO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgY29sZ3JvdXAgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjb2xncm91cCcpO1xuICAgICAgICBsZXQgaSA9IDA7XG5cbiAgICAgICAgd2hpbGUgKGkgPCB0aGlzLnRhYmxlLmNvbHVtbnMubGVuZ3RoKSB7XG4gICAgICAgICAgICBjb25zdCBjb2wgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjb2wnKTtcbiAgICAgICAgICAgIGNvbC5zdHlsZS53aWR0aCA9IGAke3RoaXMudGFibGUuY29sdW1uc1tpXS53aWR0aH1weGA7XG4gICAgICAgICAgICBjb2xncm91cC5hcHBlbmRDaGlsZChjb2wpO1xuICAgICAgICAgICAgaSsrO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy50YWJsZUVsLmluc2VydEFkamFjZW50RWxlbWVudCgnYWZ0ZXJiZWdpbicsIGNvbGdyb3VwKTtcbiAgICB9XG5cbiAgICBmaWxsVGFibGVSb3coKTogdm9pZCB7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy50YWJsZS5yb3dzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBzd2l0Y2ggKHRoaXMudGFibGUucm93c1tpXS5oUnVsZSkge1xuICAgICAgICAgICAgICAgIGNhc2UgSFJ1bGUuQXRMZWFzdDoge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCByb3dIZWlnaHQgPSB0aGlzLmdldFJvd0hlaWdodChpKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50YWJsZUVsLnJvd3NbaV0uc3R5bGUubWluSGVpZ2h0ID0gYCR7dGhpcy50YWJsZS5yb3dzW2ldLmhlaWdodH1weGA7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudGFibGVFbC5yb3dzW2ldLnN0eWxlLmhlaWdodCA9IGAke3Jvd0hlaWdodH1weGA7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucm93TWF0cml4W2ldLmhlaWdodCA9IHJvd0hlaWdodDtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhc2UgSFJ1bGUuRXhhY3Q6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudGFibGVFbC5yb3dzW2ldLnN0eWxlLmhlaWdodCA9IGAke3RoaXMudGFibGUucm93c1tpXS5oZWlnaHR9cHhgO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJvd01hdHJpeFtpXS5oZWlnaHQgPSB0aGlzLnRhYmxlLnJvd3NbaV0uaGVpZ2h0O1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJvd0hlaWdodCA9IHRoaXMuZ2V0Um93SGVpZ2h0KGkpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBtaW5Sb3dIZWlnaHQgPSB0aGlzLnRhYmxlLnJvd3NbaV0uaGVpZ2h0ID8/IHRoaXMubWluUm93SGVpZ2h0O1xuICAgICAgICAgICAgICAgICAgICBjb25zdCByZXN1bHRIZWlnaHQgPSBtaW5Sb3dIZWlnaHQgPiByb3dIZWlnaHQgPyBtaW5Sb3dIZWlnaHQgOiByb3dIZWlnaHQ7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudGFibGVFbC5yb3dzW2ldLnN0eWxlLmhlaWdodCA9IGAke3Jlc3VsdEhlaWdodH1weGA7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucm93TWF0cml4W2ldLmhlaWdodCA9IHJlc3VsdEhlaWdodDtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2V0Um93SGVpZ2h0KHJvd0luZGV4OiBudW1iZXIpOiBudW1iZXIge1xuICAgICAgICBjb25zdCBjZWxsSGVpZ2h0cyA9IHRoaXMucm93TWF0cml4W3Jvd0luZGV4XS5jZWxscy5tYXAoKHgsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICBpZiAoKHguY29tcG9uZW50UmVmLmluc3RhbmNlLmNlbGwudmVydGljYWxNZXJnZSBhcyBWZXJ0aWNhbE1lcmdlKSA9PT0gVmVydGljYWxNZXJnZS5SZXN0YXJ0KSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaXNMYXN0VmVydGljYWxNZXJnZWRDZWxsID0geC5jZWxsICE9PSB0aGlzLnJvd01hdHJpeFtyb3dJbmRleCArIDFdPy5jZWxsc1tpbmRleF0uY2VsbDtcblxuICAgICAgICAgICAgICAgIGlmIChpc0xhc3RWZXJ0aWNhbE1lcmdlZENlbGwpIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGkgPSByb3dJbmRleCAtIDE7XG4gICAgICAgICAgICAgICAgICAgIGxldCBjdXJyZW50SGVpZ2h0ID0geC5jZWxsQ29udGVudEhlaWdodDtcblxuICAgICAgICAgICAgICAgICAgICB3aGlsZSAoeC5jZWxsID09PSB0aGlzLnJvd01hdHJpeFtpXT8uY2VsbHNbaW5kZXhdLmNlbGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRIZWlnaHQgLT0gdGhpcy5yb3dNYXRyaXhbaV0uaGVpZ2h0O1xuICAgICAgICAgICAgICAgICAgICAgICAgaS0tO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnRIZWlnaHQ7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiB4LmNlbGxDb250ZW50SGVpZ2h0O1xuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gTWF0aC5tYXgoLi4uY2VsbEhlaWdodHMpO1xuICAgIH1cblxuICAgIGZpbGxUYWJsZUNlbGxzKCk6IHZvaWQge1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucm93TWF0cml4Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHRoaXMucm93TWF0cml4W2ldLmNlbGxzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICB0aGlzLnJvd01hdHJpeFtpIC0gMV0/LmNlbGxzW2pdPy5jZWxsID09PSB0aGlzLnJvd01hdHJpeFtpXS5jZWxsc1tqXS5jZWxsIHx8XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucm93TWF0cml4W2ldLmNlbGxzW2pdLmNlbGwgPT09IHRoaXMucm93TWF0cml4W2ldLmNlbGxzW2ogLSAxXT8uY2VsbCB8fFxuICAgICAgICAgICAgICAgICAgICAodGhpcy5yb3dNYXRyaXhbaV0uY2VsbHNbal0uY29tcG9uZW50UmVmLmluc3RhbmNlLmNlbGwudmVydGljYWxNZXJnZSBhcyBWZXJ0aWNhbE1lcmdlKSA9PT0gVmVydGljYWxNZXJnZS5NZXJnZVxuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0aGlzLnJvd01hdHJpeFtpXS5jZWxsc1tqXS5jZWxsLmNvbFNwYW4gPSB0aGlzLnJvd01hdHJpeFtpXS5jZWxsc1tqXS5jb21wb25lbnRSZWYuaW5zdGFuY2UuY2VsbC5ob3Jpem9udGFsTWVyZ2U7XG4gICAgICAgICAgICAgICAgdGhpcy5yb3dNYXRyaXhbaV0uY2VsbHNbal0uY2VsbC5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPVxuICAgICAgICAgICAgICAgICAgICB0aGlzLnJvd01hdHJpeFtpXS5jZWxsc1tqXS5jb21wb25lbnRSZWYuaW5zdGFuY2UuY2VsbC5iYWNrZ3JvdW5kQ29sb3I7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRDZWxsUm93U3BhbihpLCBqKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHNldENlbGxSb3dTcGFuKHJvd0luZGV4OiBudW1iZXIsIGFic29sdXRlQ2VsbEluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5yb3dNYXRyaXhbcm93SW5kZXhdLmNlbGxzW2Fic29sdXRlQ2VsbEluZGV4XS5jZWxsLnJvd1NwYW4gPSAxO1xuXG4gICAgICAgIGlmIChcbiAgICAgICAgICAgICh0aGlzLnJvd01hdHJpeFtyb3dJbmRleF0uY2VsbHNbYWJzb2x1dGVDZWxsSW5kZXhdLmNvbXBvbmVudFJlZi5pbnN0YW5jZS5jZWxsLnZlcnRpY2FsTWVyZ2UgYXMgVmVydGljYWxNZXJnZSkgIT09XG4gICAgICAgICAgICBWZXJ0aWNhbE1lcmdlLlJlc3RhcnRcbiAgICAgICAgKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGxldCBpID0gcm93SW5kZXggKyAxOyBpIDwgdGhpcy5yb3dNYXRyaXgubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnJvd01hdHJpeFtpXS5jZWxsc1thYnNvbHV0ZUNlbGxJbmRleF0uY2VsbCA9PT0gdGhpcy5yb3dNYXRyaXhbcm93SW5kZXhdLmNlbGxzW2Fic29sdXRlQ2VsbEluZGV4XS5jZWxsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yb3dNYXRyaXhbcm93SW5kZXhdLmNlbGxzW2Fic29sdXRlQ2VsbEluZGV4XS5jZWxsLnJvd1NwYW4rKztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzZXRUYWJsZUhlaWdodCgpOiB2b2lkIHtcbiAgICAgICAgbGV0IGJvcmRlcnNIZWlnaHQgPSAwO1xuICAgICAgICBsZXQgcm93c0hlaWdodCA9IDE7XG5cbiAgICAgICAgZm9yIChsZXQgcm93IG9mIHRoaXMucm93TWF0cml4KSB7XG4gICAgICAgICAgICByb3dzSGVpZ2h0ICs9IHJvdy5oZWlnaHQ7XG5cbiAgICAgICAgICAgIGlmIChyb3cuY2VsbHMuc29tZSh4ID0+ICF4LmNvbXBvbmVudFJlZi5pbnN0YW5jZS5jZWxsLnZlcnRpY2FsTWVyZ2UpKSB7XG4gICAgICAgICAgICAgICAgYm9yZGVyc0hlaWdodCArPSB0aGlzLmJvcmRlclNpemU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9oZWlnaHQgPSByb3dzSGVpZ2h0ICsgYm9yZGVyc0hlaWdodDtcbiAgICB9XG5cbiAgICBzdGFydFJlc2l6aW5nID0gKGNlbGxSZXNpemVyUGFyYW1ldGVyczogQ2VsbFJlc2l6ZXJQYXJhbWV0ZXJzTW9kZWwpOiB2b2lkID0+IHtcbiAgICAgICAgY29uc3Qgc3BsaXRSb3dJbmRleCA9IHRoaXMuZ2V0U3BsaXRSb3dJbmRleChjZWxsUmVzaXplclBhcmFtZXRlcnMucm93SW5kZXgpO1xuICAgICAgICB0aGlzLnJlc2l6ZXIucmVzaXplckhlaWdodCA9IHRoaXMuZ2V0Um93c0hlaWdodEJldHdlZW5TcGxpdHMoc3BsaXRSb3dJbmRleCk7XG4gICAgICAgIHRoaXMucmVzaXplci5zdGFydFkgPSB0aGlzLmdldFJvd3NIZWlnaHRCZWZvcmUoc3BsaXRSb3dJbmRleCk7XG4gICAgICAgIHRoaXMucmVzaXplci5zcGxpdFJvd0luZGV4ID0gc3BsaXRSb3dJbmRleDtcbiAgICAgICAgdGhpcy5yZXNpemVyLnRhYmxlSW5zZXJ0SW5kZXggPSB0aGlzLmluc2VydEluZGV4O1xuICAgICAgICB0aGlzLnJlc2l6ZXIub25TdGFydFJlc2l6aW5nKGNlbGxSZXNpemVyUGFyYW1ldGVycyk7XG4gICAgfTtcblxuICAgIHByb2Nlc3NTcGxpdChcbiAgICAgICAgbGVmdFNwYWNlT25QYWdlOiBudW1iZXIsXG4gICAgICAgIHNwYWNlQmV0d2VlblBhZ2VzQ29udGVudDogbnVtYmVyLFxuICAgICAgICBjb250ZW50SGVpZ2h0OiBudW1iZXJcbiAgICApOiB7IHNwbGl0c0NvdW50OiBudW1iZXI7IHRhYmxlSGVpZ2h0OiBudW1iZXI7IGxlZnRIZWlnaHQ6IG51bWJlciB9IHtcbiAgICAgICAgdGhpcy5yZW1vdmVTcGxpdHMoKTtcblxuICAgICAgICBpZiAobGVmdFNwYWNlT25QYWdlID49IHRoaXMuaGVpZ2h0KSB7XG4gICAgICAgICAgICByZXR1cm4geyBzcGxpdHNDb3VudDogMCwgdGFibGVIZWlnaHQ6IHRoaXMuaGVpZ2h0LCBsZWZ0SGVpZ2h0OiAwIH07XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobGVmdFNwYWNlT25QYWdlIDwgdGhpcy5yb3dNYXRyaXhbMF0uaGVpZ2h0KSB7XG4gICAgICAgICAgICByZXR1cm4geyBzcGxpdHNDb3VudDogMSwgdGFibGVIZWlnaHQ6IHRoaXMuaGVpZ2h0LCBsZWZ0SGVpZ2h0OiB0aGlzLmhlaWdodCB9O1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuc3BsaXRUYWJsZShsZWZ0U3BhY2VPblBhZ2UsIHNwYWNlQmV0d2VlblBhZ2VzQ29udGVudCwgY29udGVudEhlaWdodCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzcGxpdFRhYmxlKFxuICAgICAgICBsZWZ0U3BhY2VPblBhZ2U6IG51bWJlcixcbiAgICAgICAgc3BhY2VCZXR3ZWVuUGFnZXNDb250ZW50OiBudW1iZXIsXG4gICAgICAgIGNvbnRlbnRIZWlnaHQ6IG51bWJlclxuICAgICk6IHsgc3BsaXRzQ291bnQ6IG51bWJlcjsgdGFibGVIZWlnaHQ6IG51bWJlcjsgbGVmdEhlaWdodDogbnVtYmVyIH0ge1xuICAgICAgICBsZXQgbGVmdEhlaWdodCA9IDAsXG4gICAgICAgICAgICB0YWJsZUhlaWdodFdpdGhTcGxpdHMgPSB0aGlzLmhlaWdodCxcbiAgICAgICAgICAgIHJvd0luZGV4ID0gMDtcbiAgICAgICAgd2hpbGUgKHJvd0luZGV4IDwgdGhpcy5yb3dNYXRyaXgubGVuZ3RoKSB7XG4gICAgICAgICAgICBsZXQgeyBpbmRleCwgcm93c0hlaWdodCB9ID0gdGhpcy5nZXRSb3dJbmRleEJ5SGVpZ2h0KHJvd0luZGV4LCBsZWZ0U3BhY2VPblBhZ2UpO1xuICAgICAgICAgICAgcm93SW5kZXggPSBpbmRleDtcbiAgICAgICAgICAgIGlmIChpbmRleCA9PT0gdGhpcy5yb3dNYXRyaXgubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGxlZnRIZWlnaHQgPSB0aGlzLnJvd01hdHJpeFxuICAgICAgICAgICAgICAgIC5zbGljZShpbmRleClcbiAgICAgICAgICAgICAgICAubWFwKHggPT4geC5oZWlnaHQpXG4gICAgICAgICAgICAgICAgLnJlZHVjZSgocGFydGlhbFN1bSwgY3VycikgPT4gcGFydGlhbFN1bSArIGN1cnIgKyB0aGlzLmJvcmRlclNpemUpO1xuXG4gICAgICAgICAgICBjb25zdCBzcGxpdFJvd0hlaWdodCA9IHNwYWNlQmV0d2VlblBhZ2VzQ29udGVudCArIGxlZnRTcGFjZU9uUGFnZSAtIHJvd3NIZWlnaHQ7XG4gICAgICAgICAgICB0aGlzLmNyZWF0ZVNwbGl0Um93KGluZGV4ICsgdGhpcy5zcGxpdHMubGVuZ3RoLCBzcGxpdFJvd0hlaWdodCk7XG4gICAgICAgICAgICB0aGlzLnNwbGl0cy5wdXNoKGluZGV4ICsgdGhpcy5zcGxpdHMubGVuZ3RoKTtcbiAgICAgICAgICAgIHRhYmxlSGVpZ2h0V2l0aFNwbGl0cyArPSBzcGxpdFJvd0hlaWdodDtcbiAgICAgICAgICAgIGxlZnRTcGFjZU9uUGFnZSA9IGNvbnRlbnRIZWlnaHQ7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgc3BsaXRzQ291bnQ6IHRoaXMuc3BsaXRzLmxlbmd0aCxcbiAgICAgICAgICAgIHRhYmxlSGVpZ2h0OiB0YWJsZUhlaWdodFdpdGhTcGxpdHMsXG4gICAgICAgICAgICBsZWZ0SGVpZ2h0XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRSb3dJbmRleEJ5SGVpZ2h0KHN0YXJ0SW5kZXg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIpOiB7IGluZGV4OiBudW1iZXI7IHJvd3NIZWlnaHQ6IG51bWJlciB9IHtcbiAgICAgICAgaWYgKHN0YXJ0SW5kZXggPj0gdGhpcy5yb3dNYXRyaXgubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4geyBpbmRleDogdGhpcy5yb3dNYXRyaXgubGVuZ3RoLCByb3dzSGVpZ2h0OiAwIH07XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgdGFibGVIZWlnaHQgPSB0aGlzLnJvd01hdHJpeFtzdGFydEluZGV4XS5oZWlnaHQgKyB0aGlzLmJvcmRlclNpemUsXG4gICAgICAgICAgICBpID0gc3RhcnRJbmRleDtcblxuICAgICAgICB3aGlsZSAodGFibGVIZWlnaHQgPCBoZWlnaHQpIHtcbiAgICAgICAgICAgIHRhYmxlSGVpZ2h0ICs9IHRoaXMucm93TWF0cml4W2kgKyAxXT8uaGVpZ2h0ICsgdGhpcy5ib3JkZXJTaXplO1xuICAgICAgICAgICAgaSsrO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHsgaW5kZXg6IGksIHJvd3NIZWlnaHQ6IHRhYmxlSGVpZ2h0IC0gdGhpcy5yb3dNYXRyaXhbaV0/LmhlaWdodCB9O1xuICAgIH1cblxuICAgIHByaXZhdGUgY3JlYXRlU3BsaXRSb3coaW5kZXg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgdGhpcy50YWJsZUVsLmluc2VydFJvdyhpbmRleCk7XG4gICAgICAgIHRoaXMudGFibGVFbC5yb3dzW2luZGV4XS5zdHlsZS5oZWlnaHQgPSBgJHtoZWlnaHR9cHhgO1xuICAgICAgICB0aGlzLnRhYmxlRWwucm93c1tpbmRleF0uY2xhc3NMaXN0LmFkZCgnc3BsaXQtcm93Jyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZW1vdmVTcGxpdHMoKSB7XG4gICAgICAgIHRoaXMuc3BsaXRzID0gW107XG4gICAgICAgIHdoaWxlICh0aGlzLnRhYmxlRWwucXVlcnlTZWxlY3RvcignLnNwbGl0LXJvdycpKSB7XG4gICAgICAgICAgICBjb25zdCBlbCA9IHRoaXMudGFibGVFbC5xdWVyeVNlbGVjdG9yKCcuc3BsaXQtcm93Jyk7XG4gICAgICAgICAgICBlbC5yZW1vdmUoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByb3RlY3RlZCBjYWxjdWxhdGVQcm9wZXJ0aWVzKCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMudGFibGVFbCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5zZXRUYWJsZUhlaWdodCgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0VGFibGVXaWR0aCgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy50YWJsZS5jb2x1bW5zLnJlZHVjZSgocHJldiwgbmV4dCkgPT4gcHJldiArIG5leHQud2lkdGggKyB0aGlzLmJvcmRlclNpemUsIDEpO1xuICAgIH1cblxuICAgIHByaXZhdGUgY2VsbEhlaWdodENoYW5nZWQgPSAocm93SW5kZXg6IG51bWJlciwgY2VsbEluZGV4OiBudW1iZXIsIGhlaWdodDogbnVtYmVyKTogdm9pZCA9PiB7XG4gICAgICAgIGNvbnN0IHRhYmxlUm93ID0gdGhpcy50YWJsZS5yb3dzW3Jvd0luZGV4XTtcbiAgICAgICAgdGhpcy5yb3dNYXRyaXhbcm93SW5kZXhdLmNlbGxzW2NlbGxJbmRleF0uY2VsbENvbnRlbnRIZWlnaHQgPSBoZWlnaHQgPCB0aGlzLm1pblJvd0hlaWdodCA/IHRoaXMubWluUm93SGVpZ2h0IDogaGVpZ2h0O1xuXG4gICAgICAgIGlmICh0YWJsZVJvdy5oUnVsZSA9PT0gSFJ1bGUuRXhhY3QpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHJvd0luZGV4V2l0aFNwbGl0ID0gdGhpcy5nZXRJbmRleEluY2x1ZGluZ1NwbGl0Um93cyh0aGlzLnJvd01hdHJpeFtyb3dJbmRleF0ucm93KTtcblxuICAgICAgICBjb25zdCByb3cgPSB0aGlzLnRhYmxlRWwucm93c1tyb3dJbmRleFdpdGhTcGxpdF07XG4gICAgICAgIGNvbnN0IGN1cnJlbnRIZWlnaHQgPSByb3cub2Zmc2V0SGVpZ2h0O1xuICAgICAgICBjb25zdCBjZWxsSGVpZ2h0cyA9IHRoaXMucm93TWF0cml4W3Jvd0luZGV4XS5jZWxscy5tYXAoeCA9PiB4LmNlbGxDb250ZW50SGVpZ2h0KTtcbiAgICAgICAgY29uc3QgbWF4Q2VsbENvbnRlbnRIZWlnaCA9IE1hdGgubWF4KC4uLmNlbGxIZWlnaHRzLCBoZWlnaHQpO1xuXG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIG1heENlbGxDb250ZW50SGVpZ2ggPiBjdXJyZW50SGVpZ2h0IHx8XG4gICAgICAgICAgICAobWF4Q2VsbENvbnRlbnRIZWlnaCA8IGN1cnJlbnRIZWlnaHQgJiYgKCF0YWJsZVJvdy5oZWlnaHQgfHwgdGFibGVSb3cuaGVpZ2h0IDw9IG1heENlbGxDb250ZW50SGVpZ2gpKVxuICAgICAgICApIHtcbiAgICAgICAgICAgIHJvdy5zdHlsZS5oZWlnaHQgPSBgJHttYXhDZWxsQ29udGVudEhlaWdofXB4YDtcbiAgICAgICAgICAgIHRoaXMucm93TWF0cml4W3Jvd0luZGV4XS5oZWlnaHQgPSBtYXhDZWxsQ29udGVudEhlaWdoO1xuICAgICAgICAgICAgdGhpcy5zZXRUYWJsZUhlaWdodCgpO1xuICAgICAgICAgICAgdGhpcy5lZGl0b3JTZXJ2aWNlLmNoYW5nZWRUYWJsZVNpemUodGhpcy5pbnNlcnRJbmRleCwgdGhpcy5zZXNzaW9uSWQpO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIHByaXZhdGUgZ2V0U3BsaXRSb3dJbmRleChyb3dJbmRleDogbnVtYmVyKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldEluZGV4SW5jbHVkaW5nU3BsaXRSb3dzKHRoaXMucm93TWF0cml4W3Jvd0luZGV4XS5yb3cpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0SW5kZXhJbmNsdWRpbmdTcGxpdFJvd3Mocm93OiBIVE1MVGFibGVSb3dFbGVtZW50KTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIEFycmF5LmZyb20odGhpcy50YWJsZUVsLnJvd3MpLmluZGV4T2Yocm93KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFJvd3NIZWlnaHRCZWZvcmUocm93SW5kZXg6IG51bWJlcik6IG51bWJlciB7XG4gICAgICAgIGxldCBpbmRleCA9IDA7XG4gICAgICAgIGZvciAoY29uc3QgZWxlbWVudCBvZiB0aGlzLnNwbGl0cykge1xuICAgICAgICAgICAgaWYgKHJvd0luZGV4IDwgZWxlbWVudCkge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpbmRleCA9IGVsZW1lbnQgKyAxO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0Um93c0hlaWdodCgwLCBpbmRleCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRSb3dzSGVpZ2h0QmV0d2VlblNwbGl0cyhyb3dJbmRleDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICAgICAgbGV0IHN0YXJ0SW5kZXggPSAwO1xuICAgICAgICBsZXQgZW5kSW5kZXggPSB0aGlzLnRhYmxlRWwucm93cy5sZW5ndGg7XG4gICAgICAgIGZvciAoY29uc3QgZWxlbWVudCBvZiB0aGlzLnNwbGl0cykge1xuICAgICAgICAgICAgaWYgKHJvd0luZGV4IDwgZWxlbWVudCkge1xuICAgICAgICAgICAgICAgIGVuZEluZGV4ID0gZWxlbWVudDtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgc3RhcnRJbmRleCA9IGVsZW1lbnQgKyAxO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0Um93c0hlaWdodChzdGFydEluZGV4LCBlbmRJbmRleCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRSb3dzSGVpZ2h0KHN0YXJ0OiBudW1iZXIsIGVuZDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICAgICAgbGV0IHN1bSA9IDA7XG4gICAgICAgIGZvciAobGV0IGkgPSBzdGFydDsgaSA8IGVuZDsgaSsrKSB7XG4gICAgICAgICAgICBzdW0gKz0gdGhpcy50YWJsZUVsLnJvd3NbaV0ub2Zmc2V0SGVpZ2h0O1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHN1bTtcbiAgICB9XG59XG4iXX0=
|
|
@@ -32,6 +32,9 @@ export class TableSelection {
|
|
|
32
32
|
return;
|
|
33
33
|
}
|
|
34
34
|
const selectionRange = this.getSelectionRangeForMenuOverlay(event.target);
|
|
35
|
+
if (!selectionRange) {
|
|
36
|
+
return;
|
|
37
|
+
}
|
|
35
38
|
const targets = this.getTargetsForMenuOverlay(selectionRange);
|
|
36
39
|
const canRemoveRows = selectionRange.rowIndexes.endIndex - selectionRange.rowIndexes.startIndex + 1 < this.rowMatrix.length;
|
|
37
40
|
const canRemoveColumns = selectionRange.cellIndexes.endIndex - selectionRange.cellIndexes.startIndex + 1 < this.rowMatrix[0].cells.length;
|
|
@@ -256,6 +259,9 @@ export class TableSelection {
|
|
|
256
259
|
}
|
|
257
260
|
getSelectionRangeForMenuOverlay(element) {
|
|
258
261
|
const selectedCell = this.getCellIndexes(element);
|
|
262
|
+
if (!selectedCell) {
|
|
263
|
+
return null;
|
|
264
|
+
}
|
|
259
265
|
const isCellInSelection = this.selectionRange &&
|
|
260
266
|
this.selectionRange.rowIndexes.startIndex <= selectedCell.rowIndex &&
|
|
261
267
|
this.selectionRange.rowIndexes.endIndex >= selectedCell.rowIndex &&
|
|
@@ -355,4 +361,4 @@ export class TableSelection {
|
|
|
355
361
|
return index;
|
|
356
362
|
}
|
|
357
363
|
}
|
|
358
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtc2VsZWN0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LW5vZGVyL3NyYy9saWIvK3NoYXJlZC9lZGl0b3IvY3VzdG9tLWNvbXBvbmVudHMvdGFibGUvc2VsZWN0aW9uL3RhYmxlLXNlbGVjdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFnQixZQUFZLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFJN0QsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBR3BFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBRXRFLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBRW5GLE1BQU0sT0FBTyxjQUFjO0lBcUJ2QixZQUNZLGFBQTRCLEVBQzVCLGNBQThCLEVBQzlCLFNBQXlCLEVBQ3pCLEtBQWlCLEVBQ2pCLE9BQXlCLEVBQ3pCLFNBQWlCO1FBTGpCLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBQzVCLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQUM5QixjQUFTLEdBQVQsU0FBUyxDQUFnQjtRQUN6QixVQUFLLEdBQUwsS0FBSyxDQUFZO1FBQ2pCLFlBQU8sR0FBUCxPQUFPLENBQWtCO1FBQ3pCLGNBQVMsR0FBVCxTQUFTLENBQVE7UUFacEIsa0JBQWEsR0FBRyxZQUFZLENBQUM7UUFFN0IsZ0JBQVcsR0FBRyxJQUFJLENBQUM7UUFFbkIseUJBQW9CLEdBQUcsQ0FBQyxhQUFhLENBQUMsQ0FBQztRQVU1QyxJQUFJLENBQUMsZ0NBQWdDLEVBQUUsQ0FBQztRQUN4QyxJQUFJLENBQUMsOEJBQThCLEVBQUUsQ0FBQztJQUMxQyxDQUFDO0lBRUQsT0FBTztRQUNILElBQUksSUFBSSxDQUFDLGlCQUFpQixFQUFFLFdBQVcsRUFBRTtZQUNyQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsV0FBVyxFQUFFLENBQUM7U0FDeEM7UUFFRCxJQUFJLElBQUksQ0FBQyxlQUFlLEVBQUUsV0FBVyxFQUFFO1lBQ25DLElBQUksQ0FBQyxlQUFlLENBQUMsV0FBVyxFQUFFLENBQUM7U0FDdEM7UUFFRCxJQUFJLENBQUMsd0JBQXdCLEVBQUUsQ0FBQztJQUNwQyxDQUFDO0lBRUQsZ0NBQWdDO1FBQzVCLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxTQUFTLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxhQUFhLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxLQUFtQixFQUFFLEVBQUU7WUFDOUYsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ3ZCLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxVQUFVLEVBQUU7Z0JBQy9CLE9BQU87YUFDVjtZQUVELE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQywrQkFBK0IsQ0FBQyxLQUFLLENBQUMsTUFBcUIsQ0FBQyxDQUFDO1lBQ3pGLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxjQUFjLENBQUMsQ0FBQztZQUM5RCxNQUFNLGFBQWEsR0FBRyxjQUFjLENBQUMsVUFBVSxDQUFDLFFBQVEsR0FBRyxjQUFjLENBQUMsVUFBVSxDQUFDLFVBQVUsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUM7WUFDNUgsTUFBTSxnQkFBZ0IsR0FDbEIsY0FBYyxDQUFDLFdBQVcsQ0FBQyxRQUFRLEdBQUcsY0FBYyxDQUFDLFdBQVcsQ0FBQyxVQUFVLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQztZQUNySCxNQUFNLElBQUksR0FBRztnQkFDVCxjQUFjO2dCQUNkLE9BQU87Z0JBQ1AsYUFBYTtnQkFDYixnQkFBZ0I7Z0JBQ2hCLGdCQUFnQixFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVztnQkFDeEMsU0FBUyxFQUFFLElBQUksQ0FBQyxTQUFTO2FBQzVCLENBQUM7WUFDRixJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyx5QkFBeUIsRUFBRSxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDaEYsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQsOEJBQThCO1FBQzFCLElBQUksQ0FBQyxlQUFlLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsV0FBVyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsS0FBaUIsRUFBRSxFQUFFO1lBQ3hGLElBQUssS0FBSyxDQUFDLE1BQXNCLEtBQUssV0FBVyxDQUFDLEtBQUssSUFBSSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsTUFBcUIsQ0FBQyxFQUFFO2dCQUM3RyxPQUFPO2FBQ1Y7WUFFRCxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQzVCLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxDQUFDO1lBQ2hDLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxDQUFDO1lBQ2hDLElBQUksQ0FBQyxxQ0FBcUMsRUFBRSxDQUFDO1lBQzdDLE1BQU0sa0JBQWtCLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsTUFBcUIsQ0FBQyxDQUFDO1lBQzVFLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxFQUFFLEdBQUcsa0JBQWtCLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxDQUFDO1FBQ3pFLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELHFDQUFxQztRQUNqQyxJQUFJLENBQUMsa0JBQWtCLEdBQUcsU0FBUyxDQUFDLFFBQVEsRUFBRSxXQUFXLENBQUM7YUFDckQsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQzthQUN2QixTQUFTLENBQUMsQ0FBQyxLQUFpQixFQUFFLEVBQUU7WUFDN0IsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2pDLENBQUMsQ0FBQyxDQUFDO1FBRVAsSUFBSSxDQUFDLGdCQUFnQixHQUFHLFNBQVMsQ0FBQyxRQUFRLEVBQUUsU0FBUyxDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRTtZQUNsRSxJQUFJLENBQUMsd0JBQXdCLEVBQUUsQ0FBQztZQUNoQyxJQUFJLENBQUMsaUNBQWlDLEVBQUUsQ0FBQztRQUM3QyxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCxpQ0FBaUM7UUFDN0IsSUFBSSxDQUFDLGtCQUFrQixHQUFHLFNBQVMsQ0FBQyxRQUFRLEVBQUUsV0FBVyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsS0FBaUIsRUFBRSxFQUFFO1lBQ3ZGLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxNQUFxQixDQUFDLElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsTUFBcUIsQ0FBQyxFQUFFO2dCQUN4RyxPQUFPO2FBQ1Y7WUFFRCxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQzVCLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxDQUFDO1lBQ2hDLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLENBQUM7WUFDL0IsSUFBSSxDQUFDLHdCQUF3QixFQUFFLENBQUM7UUFDcEMsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQsd0JBQXdCO1FBQ3BCLElBQUksSUFBSSxDQUFDLGtCQUFrQixFQUFFLFdBQVcsRUFBRTtZQUN0QyxJQUFJLENBQUMsa0JBQWtCLENBQUMsV0FBVyxFQUFFLENBQUM7U0FDekM7UUFFRCxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxXQUFXLEVBQUU7WUFDcEMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFdBQVcsRUFBRSxDQUFDO1NBQ3ZDO1FBRUQsSUFBSSxJQUFJLENBQUMsa0JBQWtCLEVBQUUsV0FBVyxFQUFFO1lBQ3RDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxXQUFXLEVBQUUsQ0FBQztTQUN6QztJQUNMLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxLQUFpQjtRQUM5QixJQUFJLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxTQUFTLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ2pFLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFFBQVEsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsU0FBUyxDQUFDLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDM0csSUFBSSxDQUFDLGFBQWEsQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUNuQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztTQUM3QztRQUVELElBQUksQ0FBQyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsU0FBUyxFQUFFO1lBQ3JDLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUN2QztJQUNMLENBQUM7SUFFRCx1QkFBdUIsQ0FBQyxLQUFpQjtRQUNyQyxJQUFJLENBQUMsSUFBSSxDQUFDLGtCQUFrQixFQUFFO1lBQzFCLE9BQU87U0FDVjtRQUVELE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLE1BQXFCLENBQUMsSUFBSSxJQUFJLENBQUMsMEJBQTBCLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFaEgsSUFBSSxDQUFDLFlBQVksRUFBRTtZQUNmLE9BQU87U0FDVjtRQUVELElBQUksQ0FBQyx3QkFBd0IsRUFBRSxDQUFDO1FBRWhDLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsUUFBUSxFQUFFLFlBQVksQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUN2RyxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFNBQVMsRUFBRSxZQUFZLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDMUcsTUFBTSxLQUFLLEdBQW9CLEVBQUUsQ0FBQztRQUNsQyxJQUFJLGVBQWUsR0FBRyxVQUFVLENBQUMsVUFBVSxDQUFDO1FBRTVDLE9BQU8sZUFBZSxJQUFJLFVBQVUsQ0FBQyxRQUFRLEVBQUU7WUFDM0MsSUFBSSxnQkFBZ0IsR0FBRyxXQUFXLENBQUMsVUFBVSxDQUFDO1lBRTlDLE9BQU8sZ0JBQWdCLElBQUksV0FBVyxDQUFDLFFBQVEsRUFBRTtnQkFDN0MsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLGVBQWUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUM7Z0JBQ3BFLGdCQUFnQixFQUFFLENBQUM7YUFDdEI7WUFFRCxlQUFlLEVBQUUsQ0FBQztTQUNyQjtRQUVELE1BQU0sU0FBUyxHQUFHLElBQUksR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2pDLFNBQVMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQztRQUNoRCxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksbUJBQW1CLENBQUMsVUFBVSxFQUFFLFdBQVcsQ0FBQyxDQUFDO0lBQzNFLENBQUM7SUFFRCxjQUFjLENBQUMsT0FBb0I7UUFDL0IsSUFBSSxjQUFjLEdBQUcsT0FBTyxDQUFDO1FBQzdCLElBQUksWUFBWSxHQUFtRCxJQUFJLENBQUM7UUFFeEUsT0FBTyxDQUFDLFlBQVksSUFBSSxjQUFjLEVBQUU7WUFDcEMsSUFBSSxjQUFjLENBQUMsT0FBTyxLQUFLLElBQUksQ0FBQyxXQUFXLEVBQUU7Z0JBQzdDLFlBQVksR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLGNBQWMsQ0FBQyxDQUFDO2FBQ3ZEO1lBRUQsY0FBYyxHQUFHLGNBQWMsQ0FBQyxhQUFhLENBQUM7U0FDakQ7UUFFRCxPQUFPLFlBQVksQ0FBQztJQUN4QixDQUFDO0lBRUQsZUFBZSxDQUFDLEVBQWU7UUFDM0IsSUFBSSxZQUFZLEdBQW1ELElBQUksQ0FBQztRQUV4RSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxRQUFRLEVBQUUsRUFBRTtZQUNsQyxNQUFNLFNBQVMsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssRUFBRSxDQUFDLENBQUM7WUFFMUQsSUFBSSxTQUFTLEdBQUcsQ0FBQyxDQUFDLEVBQUU7Z0JBQ2hCLFlBQVksR0FBRyxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsQ0FBQztnQkFDdkMsT0FBTyxJQUFJLENBQUM7YUFDZjtZQUVELE9BQU8sS0FBSyxDQUFDO1FBQ2pCLENBQUMsQ0FBQyxDQUFDO1FBRUgsT0FBTyxZQUFZLENBQUM7SUFDeEIsQ0FBQztJQUVELDBCQUEwQixDQUFDLEtBQWlCO1FBQ3hDLElBQUksWUFBWSxHQUFtRCxJQUFJLENBQUM7UUFDeEUsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1FBRXhELElBQUksS0FBSyxDQUFDLE9BQU8sSUFBSSxVQUFVLENBQUMsR0FBRyxJQUFJLEtBQUssQ0FBQyxPQUFPLElBQUksVUFBVSxDQUFDLE1BQU0sRUFBRTtZQUN2RSxJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztTQUNqQzthQUFNLElBQUksS0FBSyxDQUFDLE9BQU8sSUFBSSxVQUFVLENBQUMsSUFBSSxFQUFFO1lBQ3pDLFlBQVksR0FBRyxJQUFJLENBQUMsOEJBQThCLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDN0Q7YUFBTSxJQUFJLEtBQUssQ0FBQyxPQUFPLElBQUksVUFBVSxDQUFDLEtBQUssRUFBRTtZQUMxQyxZQUFZLEdBQUcsSUFBSSxDQUFDLGdDQUFnQyxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQy9EO1FBRUQsT0FBTyxZQUFZLENBQUM7SUFDeEIsQ0FBQztJQUVELDhCQUE4QixDQUFDLEtBQWlCO1FBQzVDLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNoRCxPQUFPLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxDQUFDLEVBQUUsQ0FBQztJQUN0QyxDQUFDO0lBRUQsZ0NBQWdDLENBQUMsS0FBaUI7UUFDOUMsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRWhELE9BQU87WUFDSCxRQUFRO1lBQ1IsU0FBUyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDO1NBQ3ZELENBQUM7SUFDTixDQUFDO0lBRUQsa0JBQWtCLENBQUMsS0FBaUI7UUFDaEMsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUM7UUFDL0IsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7UUFDcEMsSUFBSSxRQUFRLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFFbEIsR0FBRztZQUNDLFFBQVEsRUFBRSxDQUFDO1lBQ1gsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLHFCQUFxQixFQUFFLENBQUM7WUFFeEQsSUFBSSxLQUFLLENBQUMsT0FBTyxJQUFJLFFBQVEsQ0FBQyxHQUFHLElBQUksS0FBSyxDQUFDLE9BQU8sSUFBSSxRQUFRLENBQUMsTUFBTSxFQUFFO2dCQUNuRSxNQUFNO2FBQ1Q7U0FDSixRQUFRLFFBQVEsR0FBRyxXQUFXLEVBQUU7UUFFakMsT0FBTyxRQUFRLENBQUM7SUFDcEIsQ0FBQztJQUVELHNCQUFzQjtRQUNsQixJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRTtZQUN6QixHQUFHLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRTtnQkFDckIsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQ3pCLENBQUMsQ0FBQyxDQUFDO1FBQ1AsQ0FBQyxDQUFDLENBQUM7UUFDSCxNQUFNLFVBQVUsR0FBRztZQUNmLFVBQVUsRUFBRSxDQUFDO1lBQ2IsUUFBUSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxHQUFHLENBQUM7U0FDdEMsQ0FBQztRQUNGLE1BQU0sV0FBVyxHQUFHO1lBQ2hCLFVBQVUsRUFBRSxDQUFDO1lBQ2IsUUFBUSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7U0FDakUsQ0FBQztRQUNGLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxtQkFBbUIsQ0FBQyxVQUFVLEVBQUUsV0FBVyxDQUFDLENBQUM7SUFDM0UsQ0FBQztJQUVELHdCQUF3QjtRQUNwQixJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRTtZQUN6QixHQUFHLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRTtnQkFDckIsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7WUFDL0IsQ0FBQyxDQUFDLENBQUM7UUFDUCxDQUFDLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDO0lBQy9CLENBQUM7SUFFRCxxQkFBcUIsQ0FBQyxXQUFtQixFQUFFLFlBQW9CO1FBQzNELE1BQU0sT0FBTyxHQUFHLENBQUMsV0FBVyxFQUFFLFlBQVksQ0FBQyxDQUFDO1FBQzVDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFFOUIsT0FBTyxFQUFFLFVBQVUsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0lBQzVELENBQUM7SUFFRCxZQUFZLENBQUMsS0FBaUI7UUFDMUIsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsTUFBcUIsQ0FBQyxDQUFDO1FBRXRFLElBQUksQ0FBQyxZQUFZLElBQUksQ0FBQyxJQUFJLENBQUMsa0JBQWtCLEVBQUU7WUFDM0MsT0FBTyxLQUFLLENBQUM7U0FDaEI7UUFFRCxPQUFPLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxRQUFRLEtBQUssWUFBWSxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsa0JBQWtCLENBQUMsU0FBUyxLQUFLLFlBQVksQ0FBQyxTQUFTLENBQUM7SUFDdEksQ0FBQztJQUVELGVBQWUsQ0FBQyxPQUFvQjtRQUNoQyxJQUFJLGNBQWMsR0FBRyxPQUFPLENBQUM7UUFDN0IsSUFBSSxlQUFlLEdBQUcsS0FBSyxDQUFDO1FBRTVCLE9BQU8sQ0FBQyxlQUFlLElBQUksY0FBYyxFQUFFO1lBQ3ZDLGVBQWUsR0FBRyxjQUFjLENBQUMsT0FBTyxLQUFLLElBQUksQ0FBQyxhQUFhLENBQUM7WUFDaEUsY0FBYyxHQUFHLGNBQWMsQ0FBQyxhQUFhLENBQUM7U0FDakQ7UUFFRCxPQUFPLGVBQWUsQ0FBQztJQUMzQixDQUFDO0lBRUQsY0FBYyxDQUFDLE9BQW9CO1FBQy9CLElBQUksY0FBYyxHQUFHLE9BQU8sQ0FBQztRQUM3QixJQUFJLGNBQWMsR0FBRyxLQUFLLENBQUM7UUFFM0IsT0FBTyxDQUFDLGNBQWMsSUFBSSxjQUFjLEVBQUU7WUFDdEMsY0FBYyxHQUFHLGNBQWMsS0FBSyxJQUFJLENBQUMsT0FBTyxDQUFDO1lBQ2pELGNBQWMsR0FBRyxjQUFjLENBQUMsYUFBYSxDQUFDO1NBQ2pEO1FBRUQsT0FBTyxjQUFjLENBQUM7SUFDMUIsQ0FBQztJQUVELGlCQUFpQixDQUFDLE9BQW9CO1FBQ2xDLElBQUksY0FBYyxHQUFHLE9BQU8sQ0FBQztRQUM3QixJQUFJLGlCQUFpQixHQUFHLEtBQUssQ0FBQztRQUU5QixPQUFPLENBQUMsaUJBQWlCLElBQUksY0FBYyxFQUFFO1lBQ3pDLElBQUksSUFBSSxDQUFDLG9CQUFvQixDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLEVBQUU7Z0JBQzVELE1BQU07YUFDVDtZQUVELGlCQUFpQixHQUFHLGNBQWMsQ0FBQyxPQUFPLEtBQUssSUFBSSxDQUFDLFdBQVcsQ0FBQztZQUNoRSxjQUFjLEdBQUcsY0FBYyxDQUFDLGFBQWEsQ0FBQztTQUNqRDtRQUVELE9BQU8saUJBQWlCLENBQUM7SUFDN0IsQ0FBQztJQUVELCtCQUErQixDQUFDLE9BQW9CO1FBQ2hELE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLENBQUM7UUFFbEQsTUFBTSxpQkFBaUIsR0FDbkIsSUFBSSxDQUFDLGNBQWM7WUFDbkIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxVQUFVLENBQUMsVUFBVSxJQUFJLFlBQVksQ0FBQyxRQUFRO1lBQ2xFLElBQUksQ0FBQyxjQUFjLENBQUMsVUFBVSxDQUFDLFFBQVEsSUFBSSxZQUFZLENBQUMsUUFBUTtZQUNoRSxJQUFJLENBQUMsY0FBYyxDQUFDLFdBQVcsQ0FBQyxVQUFVLElBQUksWUFBWSxDQUFDLFNBQVM7WUFDcEUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxXQUFXLENBQUMsUUFBUSxJQUFJLFlBQVksQ0FBQyxTQUFTLENBQUM7UUFFdkUsSUFBSSxDQUFDLGlCQUFpQixJQUFJLElBQUksQ0FBQyxjQUFjLEVBQUU7WUFDM0MsSUFBSSxDQUFDLHdCQUF3QixFQUFFLENBQUM7U0FDbkM7UUFFRCxJQUFJLGlCQUFpQixFQUFFO1lBQ25CLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQztTQUM5QjtRQUVELElBQUksV0FBVyxHQUFHLFlBQVksQ0FBQyxRQUFRLENBQUM7UUFDeEMsSUFBSSxjQUFjLEdBQUcsWUFBWSxDQUFDLFNBQVMsQ0FBQztRQUU1QyxPQUNJLElBQUksQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQyxJQUFJO1lBQzlELElBQUksQ0FBQyxTQUFTLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLENBQUMsSUFBSSxFQUNyRTtZQUNFLFdBQVcsRUFBRSxDQUFDO1NBQ2pCO1FBRUQsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUMsQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxLQUFLLENBQUMsY0FBYyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRTtZQUMzSCxjQUFjLEVBQUUsQ0FBQztTQUNwQjtRQUVELE9BQU8sSUFBSSxtQkFBbUIsQ0FDMUIsRUFBRSxVQUFVLEVBQUUsWUFBWSxDQUFDLFFBQVEsRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFFLEVBQzVELEVBQUUsVUFBVSxFQUFFLFlBQVksQ0FBQyxTQUFTLEVBQUUsUUFBUSxFQUFFLGNBQWMsRUFBRSxDQUNuRSxDQUFDO0lBQ04sQ0FBQztJQUVELHdCQUF3QixDQUFDLGNBQW1DO1FBQ3hELE9BQU8sSUFBSSxtQkFBbUIsQ0FDMUI7WUFDSSxVQUFVLEVBQUUsSUFBSSxDQUFDLHNCQUFzQixDQUFDLGNBQWMsQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDO1lBQzdFLFFBQVEsRUFBRSxJQUFJLENBQUMsb0JBQW9CLENBQUMsY0FBYyxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUM7U0FDMUUsRUFDRDtZQUNJLFVBQVUsRUFBRSxJQUFJLENBQUMseUJBQXlCLENBQ3RDLGNBQWMsQ0FBQyxVQUFVLENBQUMsVUFBVSxFQUNwQyxjQUFjLENBQUMsVUFBVSxDQUFDLFFBQVEsRUFDbEMsY0FBYyxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQ3hDO1lBQ0QsUUFBUSxFQUFFLElBQUksQ0FBQyx1QkFBdUIsQ0FDbEMsY0FBYyxDQUFDLFVBQVUsQ0FBQyxVQUFVLEVBQ3BDLGNBQWMsQ0FBQyxVQUFVLENBQUMsUUFBUSxFQUNsQyxjQUFjLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FDdEM7U0FDSixDQUNKLENBQUM7SUFDTixDQUFDO0lBRUQsc0JBQXNCLENBQUMsVUFBa0I7UUFDckMsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUMxRCxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUN4RSxDQUFDO1FBRUYsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLEVBQUU7WUFDeEIsT0FBTyxVQUFVLENBQUM7U0FDckI7UUFFRCxNQUFNLFNBQVMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUMxQyxJQUFJLEtBQUssR0FBRyxVQUFVLENBQUM7UUFFdkIsR0FBRztZQUNDLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyxDQUFDO1lBRTFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFO2dCQUMxQyxLQUFLLEVBQUUsQ0FBQztnQkFDUixNQUFNO2FBQ1Q7WUFFRCxLQUFLLEVBQUUsQ0FBQztTQUNYLFFBQVEsS0FBSyxJQUFJLENBQUMsRUFBRTtRQUVyQixPQUFPLEtBQUssQ0FBQztJQUNqQixDQUFDO0lBRUQsb0JBQW9CLENBQUMsUUFBZ0I7UUFDakMsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUVwSSxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sRUFBRTtZQUN4QixPQUFPLFFBQVEsR0FBRyxDQUFDLENBQUM7U0FDdkI7UUFFRCxNQUFNLFNBQVMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUMxQyxJQUFJLEtBQUssR0FBRyxRQUFRLENBQUM7UUFFckIsR0FBRztZQUNDLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLEVBQUUsS0FBSyxDQUFDO1lBRTNDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFO2dCQUMzQyxNQUFNO2FBQ1Q7WUFFRCxLQUFLLEVBQUUsQ0FBQztTQUNYLFFBQVEsS0FBSyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFFO1FBRXpDLE9BQU8sS0FBSyxDQUFDO0lBQ2pCLENBQUM7SUFFRCx5QkFBeUIsQ0FBQyxhQUFxQixFQUFFLFdBQW1CLEVBQUUsY0FBc0I7UUFDeEYsSUFBSSxLQUFLLEdBQUcsY0FBYyxDQUFDO1FBRTNCLEtBQUssSUFBSSxDQUFDLEdBQUcsYUFBYSxFQUFFLENBQUMsSUFBSSxXQUFXLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDL0MsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxHQUFHLENBQUMsRUFBRTtnQkFDMUQsSUFBSSxTQUFTLEdBQUcsY0FBYyxDQUFDO2dCQUUvQixHQUFHO29CQUNDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxLQUFLLENBQUMsRUFBRTt3QkFDOUYsTUFBTTtxQkFDVDtvQkFFRCxNQUFNLFFBQVEsR0FBRyxTQUFTLENBQUM7b0JBQzNCLEtBQUssR0FBRyxLQUFLLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQztvQkFDNUMsU0FBUyxFQUFFLENBQUM7aUJBQ2YsUUFBUSxTQUFTLElBQUksQ0FBQyxFQUFFO2FBQzVCO1NBQ0o7UUFFRCxPQUFPLEtBQUssQ0FBQztJQUNqQixDQUFDO0lBRUQsdUJBQXVCLENBQUMsYUFBcUIsRUFBRSxXQUFtQixFQUFFLFlBQW9CO1FBQ3BGLElBQUksS0FBSyxHQUFHLFlBQVksR0FBRyxDQUFDLENBQUM7UUFFN0IsS0FBSyxJQUFJLENBQUMsR0FBRyxXQUFXLEVBQUUsQ0FBQyxJQUFJLGFBQWEsRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUMvQyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLEdBQUcsQ0FBQyxFQUFFO2dCQUN4RCxJQUFJLFNBQVMsR0FBRyxZQUFZLENBQUM7Z0JBRTdCLEdBQUc7b0JBQ0MsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLEtBQUssQ0FBQyxFQUFFO3dCQUM5RixNQUFNO3FCQUNUO29CQUVELE1BQU0sUUFBUSxHQUFHLFNBQVMsR0FBRyxDQUFDLENBQUM7b0JBQy9CLEtBQUssR0FBRyxLQUFLLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQztvQkFDNUMsU0FBUyxFQUFFLENBQUM7aUJBQ2YsUUFBUSxTQUFTLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFO2FBQ3pEO1NBQ0o7UUFFRCxPQUFPLEtBQUssQ0FBQztJQUNqQixDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBmcm9tRXZlbnQsIFN1YnNjcmlwdGlvbiwgdGhyb3R0bGVUaW1lIH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IENlbGxEYXRhTW9kZWwgfSBmcm9tICcuLi9tb2RlbHMvY2VsbC1kYXRhLm1vZGVsJztcbmltcG9ydCB7IEVkaXRvclNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9pbnRlcmFjdGlvbi9lZGl0b3Iuc2VydmljZSc7XG5pbXBvcnQgeyBNb3VzZUJ1dHRvbiB9IGZyb20gJy4uLy4uLy4uL2NvcmUvZW51bXMvbW91c2UtYnV0dG9uLmVudW0nO1xuaW1wb3J0IHsgT3ZlcmxheVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zaGFyZWQvc2VydmljZXMvb3ZlcmxheS9vdmVybGF5LnNlcnZpY2UnO1xuaW1wb3J0IHsgUm93RGF0YU1vZGVsIH0gZnJvbSAnLi4vbW9kZWxzL3Jvdy1kYXRhLm1vZGVsJztcbmltcG9ydCB7IFNlbGVjdGlvblJhbmdlTW9kZWwgfSBmcm9tICcuLi9tb2RlbHMvc2VsZWN0aW9uLXJhbmdlLm1vZGVsJztcbmltcG9ydCB7IFRhYmxlTW9kZWwgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi9tb2RlbHMvZ2VuZXJhdGVkL3RhYmxlLm1vZGVsJztcbmltcG9ydCB7IFRhYmxlT3ZlcmxheU1lbnVDb21wb25lbnQgfSBmcm9tICcuLi9vdmVybGF5LW1lbnUvb3ZlcmxheS1tZW51LmNvbXBvbmVudCc7XG5cbmV4cG9ydCBjbGFzcyBUYWJsZVNlbGVjdGlvbiB7XG4gICAgb3JpZ2luU2VsZWN0ZWRDZWxsOiB7IHJvd0luZGV4OiBudW1iZXI7IGNlbGxJbmRleDogbnVtYmVyOyBpc0ZvY3VzZWQ6IGJvb2xlYW4gfTtcblxuICAgIHRhYmxlQ29udGV4dE1lbnUkOiBTdWJzY3JpcHRpb247XG5cbiAgICB0YWJsZU1vdXNlRG93biQ6IFN1YnNjcmlwdGlvbjtcblxuICAgIGRvY3VtZW50TW91c2VEb3duJDogU3Vic2NyaXB0aW9uO1xuXG4gICAgZG9jdW1lbnRNb3VzZU1vdmUkOiBTdWJzY3JpcHRpb247XG5cbiAgICBkb2N1bWVudE1vdXNlVXAkOiBTdWJzY3JpcHRpb247XG5cbiAgICBzZWxlY3Rpb25SYW5nZTogU2VsZWN0aW9uUmFuZ2VNb2RlbCB8IG51bGw7XG5cbiAgICByZWFkb25seSBlZGl0b3JUYWdOYW1lID0gJ0FQUC1FRElUT1InO1xuXG4gICAgcmVhZG9ubHkgY2VsbFRhZ05hbWUgPSAnVEQnO1xuXG4gICAgcmVhZG9ubHkgZHJhZ2dhYmxlQ2VsbENvbnRlbnQgPSBbJ0FQUC1SRVNJWkVSJ107XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSBlZGl0b3JTZXJ2aWNlOiBFZGl0b3JTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIG92ZXJsYXlTZXJ2aWNlOiBPdmVybGF5U2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSByb3dNYXRyaXg6IFJvd0RhdGFNb2RlbFtdLFxuICAgICAgICBwcml2YXRlIHRhYmxlOiBUYWJsZU1vZGVsLFxuICAgICAgICBwcml2YXRlIHRhYmxlRWw6IEhUTUxUYWJsZUVsZW1lbnQsXG4gICAgICAgIHByaXZhdGUgc2Vzc2lvbklkOiBudW1iZXJcbiAgICApIHtcbiAgICAgICAgdGhpcy5hZGRUYWJsZUNvbnRleHRNZW51U3Vic2NyaXB0aW9ucygpO1xuICAgICAgICB0aGlzLmFkZFRhYmxlTW91c2VEb3duU3Vic2NyaXB0aW9ucygpO1xuICAgIH1cblxuICAgIGRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLnRhYmxlQ29udGV4dE1lbnUkPy51bnN1YnNjcmliZSkge1xuICAgICAgICAgICAgdGhpcy50YWJsZUNvbnRleHRNZW51JC51bnN1YnNjcmliZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMudGFibGVNb3VzZURvd24kPy51bnN1YnNjcmliZSkge1xuICAgICAgICAgICAgdGhpcy50YWJsZU1vdXNlRG93biQudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMucmVtb3ZlTW91c2VTdWJzY3JpcHRpb25zKCk7XG4gICAgfVxuXG4gICAgYWRkVGFibGVDb250ZXh0TWVudVN1YnNjcmlwdGlvbnMoKTogdm9pZCB7XG4gICAgICAgIHRoaXMudGFibGVDb250ZXh0TWVudSQgPSBmcm9tRXZlbnQodGhpcy50YWJsZUVsLCAnY29udGV4dG1lbnUnKS5zdWJzY3JpYmUoKGV2ZW50OiBQb2ludGVyRXZlbnQpID0+IHtcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICBpZiAodGhpcy5lZGl0b3JTZXJ2aWNlLmlzVmlld09ubHkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IHNlbGVjdGlvblJhbmdlID0gdGhpcy5nZXRTZWxlY3Rpb25SYW5nZUZvck1lbnVPdmVybGF5KGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudCk7XG4gICAgICAgICAgICBjb25zdCB0YXJnZXRzID0gdGhpcy5nZXRUYXJnZXRzRm9yTWVudU92ZXJsYXkoc2VsZWN0aW9uUmFuZ2UpO1xuICAgICAgICAgICAgY29uc3QgY2FuUmVtb3ZlUm93cyA9IHNlbGVjdGlvblJhbmdlLnJvd0luZGV4ZXMuZW5kSW5kZXggLSBzZWxlY3Rpb25SYW5nZS5yb3dJbmRleGVzLnN0YXJ0SW5kZXggKyAxIDwgdGhpcy5yb3dNYXRyaXgubGVuZ3RoO1xuICAgICAgICAgICAgY29uc3QgY2FuUmVtb3ZlQ29sdW1ucyA9XG4gICAgICAgICAgICAgICAgc2VsZWN0aW9uUmFuZ2UuY2VsbEluZGV4ZXMuZW5kSW5kZXggLSBzZWxlY3Rpb25SYW5nZS5jZWxsSW5kZXhlcy5zdGFydEluZGV4ICsgMSA8IHRoaXMucm93TWF0cml4WzBdLmNlbGxzLmxlbmd0aDtcbiAgICAgICAgICAgIGNvbnN0IGRhdGEgPSB7XG4gICAgICAgICAgICAgICAgc2VsZWN0aW9uUmFuZ2UsXG4gICAgICAgICAgICAgICAgdGFyZ2V0cyxcbiAgICAgICAgICAgICAgICBjYW5SZW1vdmVSb3dzLFxuICAgICAgICAgICAgICAgIGNhblJlbW92ZUNvbHVtbnMsXG4gICAgICAgICAgICAgICAgdGFibGVJbnNlcnRJbmRleDogdGhpcy50YWJsZS5pbnNlcnRJbmRleCxcbiAgICAgICAgICAgICAgICBzZXNzaW9uSWQ6IHRoaXMuc2Vzc2lvbklkXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgdGhpcy5vdmVybGF5U2VydmljZS5vcGVuKFRhYmxlT3ZlcmxheU1lbnVDb21wb25lbnQsIGRhdGEsIGV2ZW50LngsIGV2ZW50LnkpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBhZGRUYWJsZU1vdXNlRG93blN1YnNjcmlwdGlvbnMoKTogdm9pZCB7XG4gICAgICAgIHRoaXMudGFibGVNb3VzZURvd24kID0gZnJvbUV2ZW50KHRoaXMudGFibGVFbCwgJ21vdXNlZG93bicpLnN1YnNjcmliZSgoZXZlbnQ6IE1vdXNlRXZlbnQpID0+IHtcbiAgICAgICAgICAgIGlmICgoZXZlbnQuYnV0dG9uIGFzIE1vdXNlQnV0dG9uKSA9PT0gTW91c2VCdXR0b24uUmlnaHQgfHwgIXRoaXMuY2FuU3RhcnRTZWxlY3Rpb24oZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50KSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5vdmVybGF5U2VydmljZS5jbG9zZSgpO1xuICAgICAgICAgICAgdGhpcy5yZW1vdmVNb3VzZVN1YnNjcmlwdGlvbnMoKTtcbiAgICAgICAgICAgIHRoaXMuY2xlYXJTZWxlY3Rpb25JbkFsbENlbGxzKCk7XG4gICAgICAgICAgICB0aGlzLmFkZERvY3VtZW50TW91c2VNb3ZlbWVudFN1YnNjcmlwdGlvbnMoKTtcbiAgICAgICAgICAgIGNvbnN0IG9yaWdpblNlbGVjdGVkQ2VsbCA9IHRoaXMuZ2V0Q2VsbEluZGV4ZXMoZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50KTtcbiAgICAgICAgICAgIHRoaXMub3JpZ2luU2VsZWN0ZWRDZWxsID0geyAuLi5vcmlnaW5TZWxlY3RlZENlbGwsIGlzRm9jdXNlZDogdHJ1ZSB9O1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBhZGREb2N1bWVudE1vdXNlTW92ZW1lbnRTdWJzY3JpcHRpb25zKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmRvY3VtZW50TW91c2VNb3ZlJCA9IGZyb21FdmVudChkb2N1bWVudCwgJ21vdXNlbW92ZScpXG4gICAgICAgICAgICAucGlwZSh0aHJvdHRsZVRpbWUoMTAwKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKGV2ZW50OiBNb3VzZUV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5wcm9jZXNzTW91c2VNb3ZlKGV2ZW50KTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuZG9jdW1lbnRNb3VzZVVwJCA9IGZyb21FdmVudChkb2N1bWVudCwgJ21vdXNldXAnKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5yZW1vdmVNb3VzZVN1YnNjcmlwdGlvbnMoKTtcbiAgICAgICAgICAgIHRoaXMuYWRkRG9jdW1lbnRNb3VzZURvd25TdWJzY3JpcHRpb25zKCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGFkZERvY3VtZW50TW91c2VEb3duU3Vic2NyaXB0aW9ucygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5kb2N1bWVudE1vdXNlRG93biQgPSBmcm9tRXZlbnQoZG9jdW1lbnQsICdtb3VzZWRvd24nKS5zdWJzY3JpYmUoKGV2ZW50OiBNb3VzZUV2ZW50KSA9PiB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuaXNPbkVkaXRvckNsaWNrKGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudCkgfHwgdGhpcy5pc09uVGFibGVDbGljayhldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLm92ZXJsYXlTZXJ2aWNlLmNsb3NlKCk7XG4gICAgICAgICAgICB0aGlzLmNsZWFyU2VsZWN0aW9uSW5BbGxDZWxscygpO1xuICAgICAgICAgICAgdGhpcy5vcmlnaW5TZWxlY3RlZENlbGwgPSBudWxsO1xuICAgICAgICAgICAgdGhpcy5yZW1vdmVNb3VzZVN1YnNjcmlwdGlvbnMoKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmVtb3ZlTW91c2VTdWJzY3JpcHRpb25zKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5kb2N1bWVudE1vdXNlTW92ZSQ/LnVuc3Vic2NyaWJlKSB7XG4gICAgICAgICAgICB0aGlzLmRvY3VtZW50TW91c2VNb3ZlJC51bnN1YnNjcmliZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuZG9jdW1lbnRNb3VzZVVwJD8udW5zdWJzY3JpYmUpIHtcbiAgICAgICAgICAgIHRoaXMuZG9jdW1lbnRNb3VzZVVwJC51bnN1YnNjcmliZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuZG9jdW1lbnRNb3VzZURvd24kPy51bnN1YnNjcmliZSkge1xuICAgICAgICAgICAgdGhpcy5kb2N1bWVudE1vdXNlRG93biQudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByb2Nlc3NNb3VzZU1vdmUoZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMub3JpZ2luU2VsZWN0ZWRDZWxsPy5pc0ZvY3VzZWQgJiYgIXRoaXMuaXNPcmlnaW5DZWxsKGV2ZW50KSkge1xuICAgICAgICAgICAgdGhpcy5yb3dNYXRyaXhbdGhpcy5vcmlnaW5TZWxlY3RlZENlbGwucm93SW5kZXhdLmNlbGxzW3RoaXMub3JpZ2luU2VsZWN0ZWRDZWxsLmNlbGxJbmRleF0uY2xlYXJTZWxlY3Rpb24oKTtcbiAgICAgICAgICAgIHRoaXMuZWRpdG9yU2VydmljZS5lbmRNb3VzZVByZXNzKCk7XG4gICAgICAgICAgICB0aGlzLm9yaWdpblNlbGVjdGVkQ2VsbC5pc0ZvY3VzZWQgPSBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGhpcy5vcmlnaW5TZWxlY3RlZENlbGw/LmlzRm9jdXNlZCkge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RBbGxDZWxsc0luQmV0d2VlbihldmVudCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzZWxlY3RBbGxDZWxsc0luQmV0d2VlbihldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMub3JpZ2luU2VsZWN0ZWRDZWxsKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBzZWxlY3RlZENlbGwgPSB0aGlzLmdldENlbGxJbmRleGVzKGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudCkgfHwgdGhpcy5nZXRDZWxsSW5kZXhlc091dHNpZGVUYWJsZShldmVudCk7XG5cbiAgICAgICAgaWYgKCFzZWxlY3RlZENlbGwpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY2xlYXJTZWxlY3Rpb25JbkFsbENlbGxzKCk7XG5cbiAgICAgICAgY29uc3Qgcm93SW5kZXhlcyA9IHRoaXMuZ2V0U3RhcnRBbmRFbmRJbmRleGVzKHRoaXMub3JpZ2luU2VsZWN0ZWRDZWxsLnJvd0luZGV4LCBzZWxlY3RlZENlbGwucm93SW5kZXgpO1xuICAgICAgICBjb25zdCBjZWxsSW5kZXhlcyA9IHRoaXMuZ2V0U3RhcnRBbmRFbmRJbmRleGVzKHRoaXMub3JpZ2luU2VsZWN0ZWRDZWxsLmNlbGxJbmRleCwgc2VsZWN0ZWRDZWxsLmNlbGxJbmRleCk7XG4gICAgICAgIGNvbnN0IGNlbGxzOiBDZWxsRGF0YU1vZGVsW10gPSBbXTtcbiAgICAgICAgbGV0IGN1cnJlbnRSb3dJbmRleCA9IHJvd0luZGV4ZXMuc3RhcnRJbmRleDtcblxuICAgICAgICB3aGlsZSAoY3VycmVudFJvd0luZGV4IDw9IHJvd0luZGV4ZXMuZW5kSW5kZXgpIHtcbiAgICAgICAgICAgIGxldCBjdXJyZW50Q2VsbEluZGV4ID0gY2VsbEluZGV4ZXMuc3RhcnRJbmRleDtcblxuICAgICAgICAgICAgd2hpbGUgKGN1cnJlbnRDZWxsSW5kZXggPD0gY2VsbEluZGV4ZXMuZW5kSW5kZXgpIHtcbiAgICAgICAgICAgICAgICBjZWxscy5wdXNoKHRoaXMucm93TWF0cml4W2N1cnJlbnRSb3dJbmRleF0uY2VsbHNbY3VycmVudENlbGxJbmRleF0pO1xuICAgICAgICAgICAgICAgIGN1cnJlbnRDZWxsSW5kZXgrKztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY3VycmVudFJvd0luZGV4Kys7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB1bmlxQ2VsbHMgPSBuZXcgU2V0KGNlbGxzKTtcbiAgICAgICAgdW5pcUNlbGxzLmZvckVhY2goY2VsbCA9PiBjZWxsLmhpZ2hsaWdodENlbGwoKSk7XG4gICAgICAgIHRoaXMuc2VsZWN0aW9uUmFuZ2UgPSBuZXcgU2VsZWN0aW9uUmFuZ2VNb2RlbChyb3dJbmRleGVzLCBjZWxsSW5kZXhlcyk7XG4gICAgfVxuXG4gICAgZ2V0Q2VsbEluZGV4ZXMoZWxlbWVudDogSFRNTEVsZW1lbnQpOiB7IHJvd0luZGV4OiBudW1iZXI7IGNlbGxJbmRleDogbnVtYmVyIH0gfCBudWxsIHtcbiAgICAgICAgbGV0IGN1cnJlbnRFbGVtZW50ID0gZWxlbWVudDtcbiAgICAgICAgbGV0IHNlbGVjdGVkQ2VsbDogeyByb3dJbmRleDogbnVtYmVyOyBjZWxsSW5kZXg6IG51bWJlciB9IHwgbnVsbCA9IG51bGw7XG5cbiAgICAgICAgd2hpbGUgKCFzZWxlY3RlZENlbGwgJiYgY3VycmVudEVsZW1lbnQpIHtcbiAgICAgICAgICAgIGlmIChjdXJyZW50RWxlbWVudC50YWdOYW1lID09PSB0aGlzLmNlbGxUYWdOYW1lKSB7XG4gICAgICAgICAgICAgICAgc2VsZWN0ZWRDZWxsID0gdGhpcy5nZXRTZWxlY3RlZENlbGwoY3VycmVudEVsZW1lbnQpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjdXJyZW50RWxlbWVudCA9IGN1cnJlbnRFbGVtZW50LnBhcmVudEVsZW1lbnQ7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gc2VsZWN0ZWRDZWxsO1xuICAgIH1cblxuICAgIGdldFNlbGVjdGVkQ2VsbChlbDogSFRNTEVsZW1lbnQpOiB7IHJvd0luZGV4OiBudW1iZXI7IGNlbGxJbmRleDogbnVtYmVyIH0gfCBudWxsIHtcbiAgICAgICAgbGV0IHNlbGVjdGVkQ2VsbDogeyByb3dJbmRleDogbnVtYmVyOyBjZWxsSW5kZXg6IG51bWJlciB9IHwgbnVsbCA9IG51bGw7XG5cbiAgICAgICAgdGhpcy5yb3dNYXRyaXguc29tZSgocm93LCByb3dJbmRleCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgY2VsbEluZGV4ID0gcm93LmNlbGxzLmZpbmRJbmRleCh4ID0+IHguY2VsbCA9PT0gZWwpO1xuXG4gICAgICAgICAgICBpZiAoY2VsbEluZGV4ID4gLTEpIHtcbiAgICAgICAgICAgICAgICBzZWxlY3RlZENlbGwgPSB7IHJvd0luZGV4LCBjZWxsSW5kZXggfTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gc2VsZWN0ZWRDZWxsO1xuICAgIH1cblxuICAgIGdldENlbGxJbmRleGVzT3V0c2lkZVRhYmxlKGV2ZW50OiBNb3VzZUV2ZW50KTogeyByb3dJbmRleDogbnVtYmVyOyBjZWxsSW5kZXg6IG51bWJlciB9IHwgbnVsbCB7XG4gICAgICAgIGxldCBzZWxlY3RlZENlbGw6IHsgcm93SW5kZXg6IG51bWJlcjsgY2VsbEluZGV4OiBudW1iZXIgfSB8IG51bGwgPSBudWxsO1xuICAgICAgICBjb25zdCB0YWJsZVJlYWN0ID0gdGhpcy50YWJsZUVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXG4gICAgICAgIGlmIChldmVudC5jbGllbnRZIDw9IHRhYmxlUmVhY3QudG9wIHx8IGV2ZW50LmNsaWVudFkgPj0gdGFibGVSZWFjdC5ib3R0b20pIHtcbiAgICAgICAgICAgIHRoaXMuYWRkU2VsZWN0aW9uSW5BbGxDZWxscygpO1xuICAgICAgICB9IGVsc2UgaWYgKGV2ZW50LmNsaWVudFggPD0gdGFibGVSZWFjdC5sZWZ0KSB7XG4gICAgICAgICAgICBzZWxlY3RlZENlbGwgPSB0aGlzLmdldENlbGxJbmRleGVzT3V0c2lkZVRhYmxlTGVmdChldmVudCk7XG4gICAgICAgIH0gZWxzZSBpZiAoZXZlbnQuY2xpZW50WCA+PSB0YWJsZVJlYWN0LnJpZ2h0KSB7XG4gICAgICAgICAgICBzZWxlY3RlZENlbGwgPSB0aGlzLmdldENlbGxJbmRleGVzT3V0c2lkZVRhYmxlUmlnaHRzKGV2ZW50KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBzZWxlY3RlZENlbGw7XG4gICAgfVxuXG4gICAgZ2V0Q2VsbEluZGV4ZXNPdXRzaWRlVGFibGVMZWZ0KGV2ZW50OiBNb3VzZUV2ZW50KTogeyByb3dJbmRleDogbnVtYmVyOyBjZWxsSW5kZXg6IG51bWJlciB9IHtcbiAgICAgICAgY29uc3Qgcm93SW5kZXggPSB0aGlzLmdldE5lYXJlc3RSb3dJbmRleChldmVudCk7XG4gICAgICAgIHJldHVybiB7IHJvd0luZGV4LCBjZWxsSW5kZXg6IDAgfTtcbiAgICB9XG5cbiAgICBnZXRDZWxsSW5kZXhlc091dHNpZGVUYWJsZVJpZ2h0cyhldmVudDogTW91c2VFdmVudCk6IHsgcm93SW5kZXg6IG51bWJlcjsgY2VsbEluZGV4OiBudW1iZXIgfSB7XG4gICAgICAgIGNvbnN0IHJvd0luZGV4ID0gdGhpcy5nZXROZWFyZXN0Um93SW5kZXgoZXZlbnQpO1xuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICByb3dJbmRleCxcbiAgICAgICAgICAgIGNlbGxJbmRleDogdGhpcy5yb3dNYXRyaXhbcm93SW5kZXhdLmNlbGxzLmxlbmd0aCAtIDFcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBnZXROZWFyZXN0Um93SW5kZXgoZXZlbnQ6IE1vdXNlRXZlbnQpOiBudW1iZXIge1xuICAgICAgICBjb25zdCByb3dzID0gdGhpcy50YWJsZUVsLnJvd3M7XG4gICAgICAgIGNvbnN0IG1heFJvd0luZGV4ID0gcm93cy5sZW5ndGggLSAxO1xuICAgICAgICBsZXQgcm93SW5kZXggPSAtMTtcblxuICAgICAgICBkbyB7XG4gICAgICAgICAgICByb3dJbmRleCsrO1xuICAgICAgICAgICAgY29uc3Qgcm93UmVhY3QgPSByb3dzW3Jvd0luZGV4XS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblxuICAgICAgICAgICAgaWYgKGV2ZW50LmNsaWVudFkgPj0gcm93UmVhY3QudG9wICYmIGV2ZW50LmNsaWVudFkgPD0gcm93UmVhY3QuYm90dG9tKSB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gd2hpbGUgKHJvd0luZGV4IDwgbWF4Um93SW5kZXgpO1xuXG4gICAgICAgIHJldHVybiByb3dJbmRleDtcbiAgICB9XG5cbiAgICBhZGRTZWxlY3Rpb25JbkFsbENlbGxzKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnJvd01hdHJpeC5mb3JFYWNoKHJvdyA9PiB7XG4gICAgICAgICAgICByb3cuY2VsbHMuZm9yRWFjaChjZWxsID0+IHtcbiAgICAgICAgICAgICAgICBjZWxsLmhpZ2hsaWdodENlbGwoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgICAgY29uc3Qgcm93SW5kZXhlcyA9IHtcbiAgICAgICAgICAgIHN0YXJ0SW5kZXg6IDAsXG4gICAgICAgICAgICBlbmRJbmRleDogdGhpcy5yb3dNYXRyaXgubGVuZ3RoIC0gMVxuICAgICAgICB9O1xuICAgICAgICBjb25zdCBjZWxsSW5kZXhlcyA9IHtcbiAgICAgICAgICAgIHN0YXJ0SW5kZXg6IDAsXG4gICAgICAgICAgICBlbmRJbmRleDogTWF0aC5tYXgoLi4udGhpcy5yb3dNYXRyaXgubWFwKHggPT4geC5jZWxscy5sZW5ndGgpKVxuICAgICAgICB9O1xuICAgICAgICB0aGlzLnNlbGVjdGlvblJhbmdlID0gbmV3IFNlbGVjdGlvblJhbmdlTW9kZWwocm93SW5kZXhlcywgY2VsbEluZGV4ZXMpO1xuICAgIH1cblxuICAgIGNsZWFyU2VsZWN0aW9uSW5BbGxDZWxscygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5yb3dNYXRyaXguZm9yRWFjaChyb3cgPT4ge1xuICAgICAgICAgICAgcm93LmNlbGxzLmZvckVhY2goY2VsbCA9PiB7XG4gICAgICAgICAgICAgICAgY2VsbC5yZW1vdmVIaWdobGlnaHRDZWxsKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuc2VsZWN0aW9uUmFuZ2UgPSBudWxsO1xuICAgIH1cblxuICAgIGdldFN0YXJ0QW5kRW5kSW5kZXhlcyhvcmlnaW5JbmRleDogbnVtYmVyLCBjdXJyZW50SW5kZXg6IG51bWJlcik6IHsgc3RhcnRJbmRleDogbnVtYmVyOyBlbmRJbmRleDogbnVtYmVyIH0ge1xuICAgICAgICBjb25zdCBpbmRleGVzID0gW29yaWdpbkluZGV4LCBjdXJyZW50SW5kZXhdO1xuICAgICAgICBpbmRleGVzLnNvcnQoKGEsIGIpID0+IGEgLSBiKTtcblxuICAgICAgICByZXR1cm4geyBzdGFydEluZGV4OiBpbmRleGVzWzBdLCBlbmRJbmRleDogaW5kZXhlc1sxXSB9O1xuICAgIH1cblxuICAgIGlzT3JpZ2luQ2VsbChldmVudDogTW91c2VFdmVudCk6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCBzZWxlY3RlZENlbGwgPSB0aGlzLmdldENlbGxJbmRleGVzKGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudCk7XG5cbiAgICAgICAgaWYgKCFzZWxlY3RlZENlbGwgfHwgIXRoaXMub3JpZ2luU2VsZWN0ZWRDZWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5vcmlnaW5TZWxlY3RlZENlbGwucm93SW5kZXggPT09IHNlbGVjdGVkQ2VsbC5yb3dJbmRleCAmJiB0aGlzLm9yaWdpblNlbGVjdGVkQ2VsbC5jZWxsSW5kZXggPT09IHNlbGVjdGVkQ2VsbC5jZWxsSW5kZXg7XG4gICAgfVxuXG4gICAgaXNPbkVkaXRvckNsaWNrKGVsZW1lbnQ6IEhUTUxFbGVtZW50KTogYm9vbGVhbiB7XG4gICAgICAgIGxldCBjdXJyZW50RWxlbWVudCA9IGVsZW1lbnQ7XG4gICAgICAgIGxldCBpc09uRWRpdG9yQ2xpY2sgPSBmYWxzZTtcblxuICAgICAgICB3aGlsZSAoIWlzT25FZGl0b3JDbGljayAmJiBjdXJyZW50RWxlbWVudCkge1xuICAgICAgICAgICAgaXNPbkVkaXRvckNsaWNrID0gY3VycmVudEVsZW1lbnQudGFnTmFtZSA9PT0gdGhpcy5lZGl0b3JUYWdOYW1lO1xuICAgICAgICAgICAgY3VycmVudEVsZW1lbnQgPSBjdXJyZW50RWxlbWVudC5wYXJlbnRFbGVtZW50O1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGlzT25FZGl0b3JDbGljaztcbiAgICB9XG5cbiAgICBpc09uVGFibGVDbGljayhlbGVtZW50OiBIVE1MRWxlbWVudCk6IGJvb2xlYW4ge1xuICAgICAgICBsZXQgY3VycmVudEVsZW1lbnQgPSBlbGVtZW50O1xuICAgICAgICBsZXQgaXNPblRhYmxlQ2xpY2sgPSBmYWxzZTtcblxuICAgICAgICB3aGlsZSAoIWlzT25UYWJsZUNsaWNrICYmIGN1cnJlbnRFbGVtZW50KSB7XG4gICAgICAgICAgICBpc09uVGFibGVDbGljayA9IGN1cnJlbnRFbGVtZW50ID09PSB0aGlzLnRhYmxlRWw7XG4gICAgICAgICAgICBjdXJyZW50RWxlbWVudCA9IGN1cnJlbnRFbGVtZW50LnBhcmVudEVsZW1lbnQ7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gaXNPblRhYmxlQ2xpY2s7XG4gICAgfVxuXG4gICAgY2FuU3RhcnRTZWxlY3Rpb24oZWxlbWVudDogSFRNTEVsZW1lbnQpOiBib29sZWFuIHtcbiAgICAgICAgbGV0IGN1cnJlbnRFbGVtZW50ID0gZWxlbWVudDtcbiAgICAgICAgbGV0IGNhblN0YXJ0U2VsZWN0aW9uID0gZmFsc2U7XG5cbiAgICAgICAgd2hpbGUgKCFjYW5TdGFydFNlbGVjdGlvbiAmJiBjdXJyZW50RWxlbWVudCkge1xuICAgICAgICAgICAgaWYgKHRoaXMuZHJhZ2dhYmxlQ2VsbENvbnRlbnQuaW5jbHVkZXMoY3VycmVudEVsZW1lbnQudGFnTmFtZSkpIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY2FuU3RhcnRTZWxlY3Rpb24gPSBjdXJyZW50RWxlbWVudC50YWdOYW1lID09PSB0aGlzLmNlbGxUYWdOYW1lO1xuICAgICAgICAgICAgY3VycmVudEVsZW1lbnQgPSBjdXJyZW50RWxlbWVudC5wYXJlbnRFbGVtZW50O1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNhblN0YXJ0U2VsZWN0aW9uO1xuICAgIH1cblxuICAgIGdldFNlbGVjdGlvblJhbmdlRm9yTWVudU92ZXJsYXkoZWxlbWVudDogSFRNTEVsZW1lbnQpOiBTZWxlY3Rpb25SYW5nZU1vZGVsIHtcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRDZWxsID0gdGhpcy5nZXRDZWxsSW5kZXhlcyhlbGVtZW50KTtcblxuICAgICAgICBjb25zdCBpc0NlbGxJblNlbGVjdGlvbiA9XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvblJhbmdlICYmXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvblJhbmdlLnJvd0luZGV4ZXMuc3RhcnRJbmRleCA8PSBzZWxlY3RlZENlbGwucm93SW5kZXggJiZcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uUmFuZ2Uucm93SW5kZXhlcy5lbmRJbmRleCA+PSBzZWxlY3RlZENlbGwucm93SW5kZXggJiZcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uUmFuZ2UuY2VsbEluZGV4ZXMuc3RhcnRJbmRleCA8PSBzZWxlY3RlZENlbGwuY2VsbEluZGV4ICYmXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvblJhbmdlLmNlbGxJbmRleGVzLmVuZEluZGV4ID49IHNlbGVjdGVkQ2VsbC5jZWxsSW5kZXg7XG5cbiAgICAgICAgaWYgKCFpc0NlbGxJblNlbGVjdGlvbiAmJiB0aGlzLnNlbGVjdGlvblJhbmdlKSB7XG4gICAgICAgICAgICB0aGlzLmNsZWFyU2VsZWN0aW9uSW5BbGxDZWxscygpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGlzQ2VsbEluU2VsZWN0aW9uKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zZWxlY3Rpb25SYW5nZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCByb3dFbmRJbmRleCA9IHNlbGVjdGVkQ2VsbC5yb3dJbmRleDtcbiAgICAgICAgbGV0IGNvbHVtbkVuZEluZGV4ID0gc2VsZWN0ZWRDZWxsLmNlbGxJbmRleDtcblxuICAgICAgICB3aGlsZSAoXG4gICAgICAgICAgICB0aGlzLnJvd01hdHJpeFtyb3dFbmRJbmRleF0uY2VsbHNbc2VsZWN0ZWRDZWxsLmNlbGxJbmRleF0uY2VsbCA9PT1cbiAgICAgICAgICAgIHRoaXMucm93TWF0cml4W3Jvd0VuZEluZGV4ICsgMV0/LmNlbGxzW3NlbGVjdGVkQ2VsbC5jZWxsSW5kZXhdLmNlbGxcbiAgICAgICAgKSB7XG4gICAgICAgICAgICByb3dFbmRJbmRleCsrO1xuICAgICAgICB9XG5cbiAgICAgICAgd2hpbGUgKHRoaXMucm93TWF0cml4W3Jvd0VuZEluZGV4XS5jZWxsc1tjb2x1bW5FbmRJbmRleF0uY2VsbCA9PT0gdGhpcy5yb3dNYXRyaXhbcm93RW5kSW5kZXhdLmNlbGxzW2NvbHVtbkVuZEluZGV4ICsgMV0/LmNlbGwpIHtcbiAgICAgICAgICAgIGNvbHVtbkVuZEluZGV4Kys7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbmV3IFNlbGVjdGlvblJhbmdlTW9kZWwoXG4gICAgICAgICAgICB7IHN0YXJ0SW5kZXg6IHNlbGVjdGVkQ2VsbC5yb3dJbmRleCwgZW5kSW5kZXg6IHJvd0VuZEluZGV4IH0sXG4gICAgICAgICAgICB7IHN0YXJ0SW5kZXg6IHNlbGVjdGVkQ2VsbC5jZWxsSW5kZXgsIGVuZEluZGV4OiBjb2x1bW5FbmRJbmRleCB9XG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZ2V0VGFyZ2V0c0Zvck1lbnVPdmVybGF5KHNlbGVjdGlvblJhbmdlOiBTZWxlY3Rpb25SYW5nZU1vZGVsKTogU2VsZWN0aW9uUmFuZ2VNb2RlbCB7XG4gICAgICAgIHJldHVybiBuZXcgU2VsZWN0aW9uUmFuZ2VNb2RlbChcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBzdGFydEluZGV4OiB0aGlzLmdldFRhcmdldFJvd1N0YXJ0SW5kZXgoc2VsZWN0aW9uUmFuZ2Uucm93SW5kZXhlcy5zdGFydEluZGV4KSxcbiAgICAgICAgICAgICAgICBlbmRJbmRleDogdGhpcy5nZXRUYXJnZXRSb3dFbmRJbmRleChzZWxlY3Rpb25SYW5nZS5yb3dJbmRleGVzLmVuZEluZGV4KVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBzdGFydEluZGV4OiB0aGlzLmdldFRhcmdldENvbHVtblN0YXJ0SW5kZXgoXG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvblJhbmdlLnJvd0luZGV4ZXMuc3RhcnRJbmRleCxcbiAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uUmFuZ2Uucm93SW5kZXhlcy5lbmRJbmRleCxcbiAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uUmFuZ2UuY2VsbEluZGV4ZXMuc3RhcnRJbmRleFxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgZW5kSW5kZXg6IHRoaXMuZ2V0VGFyZ2V0Q29sdW1uRW5kSW5kZXgoXG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvblJhbmdlLnJvd0luZGV4ZXMuc3RhcnRJbmRleCxcbiAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uUmFuZ2Uucm93SW5kZXhlcy5lbmRJbmRleCxcbiAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uUmFuZ2UuY2VsbEluZGV4ZXMuZW5kSW5kZXhcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZ2V0VGFyZ2V0Um93U3RhcnRJbmRleChzdGFydEluZGV4OiBudW1iZXIpOiBudW1iZXIge1xuICAgICAgICBjb25zdCBtZXJnZWRSb3dDZWxscyA9IHRoaXMucm93TWF0cml4W3N0YXJ0SW5kZXhdLmNlbGxzLmZpbHRlcihcbiAgICAgICAgICAgIHggPT4geC5jZWxsLnJvd1NwYW4gPiAxICYmIHguY29tcG9uZW50UmVmLmluc3RhbmNlLmNlbGwudmVydGljYWxNZXJnZVxuICAgICAgICApO1xuXG4gICAgICAgIGlmICghbWVyZ2VkUm93Q2VsbHMubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gc3RhcnRJbmRleDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHVuaXFDZWxscyA9IG5ldyBTZXQobWVyZ2VkUm93Q2VsbHMpO1xuICAgICAgICBsZXQgaW5kZXggPSBzdGFydEluZGV4O1xuXG4gICAgICAgIGRvIHtcbiAgICAgICAgICAgIGNvbnN0IGNlbGxzID0gdGhpcy5yb3dNYXRyaXhbaW5kZXhdLmNlbGxzO1xuXG4gICAgICAgICAgICBpZiAoIWNlbGxzLnNvbWUoY2VsbCA9PiB1bmlxQ2VsbHMuaGFzKGNlbGwpKSkge1xuICAgICAgICAgICAgICAgIGluZGV4Kys7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGluZGV4LS07XG4gICAgICAgIH0gd2hpbGUgKGluZGV4ID49IDApO1xuXG4gICAgICAgIHJldHVybiBpbmRleDtcbiAgICB9XG5cbiAgICBnZXRUYXJnZXRSb3dFbmRJbmRleChlbmRJbmRleDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICAgICAgY29uc3QgbWVyZ2VkUm93Q2VsbHMgPSB0aGlzLnJvd01hdHJpeFtlbmRJbmRleF0uY2VsbHMuZmlsdGVyKHggPT4geC5jZWxsLnJvd1NwYW4gPiAxICYmIHguY29tcG9uZW50UmVmLmluc3RhbmNlLmNlbGwudmVydGljYWxNZXJnZSk7XG5cbiAgICAgICAgaWYgKCFtZXJnZWRSb3dDZWxscy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiBlbmRJbmRleCArIDE7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB1bmlxQ2VsbHMgPSBuZXcgU2V0KG1lcmdlZFJvd0NlbGxzKTtcbiAgICAgICAgbGV0IGluZGV4ID0gZW5kSW5kZXg7XG5cbiAgICAgICAgZG8ge1xuICAgICAgICAgICAgY29uc3QgY2VsbHMgPSB0aGlzLnJvd01hdHJpeFtpbmRleF0/LmNlbGxzO1xuXG4gICAgICAgICAgICBpZiAoIWNlbGxzPy5zb21lKGNlbGwgPT4gdW5pcUNlbGxzLmhhcyhjZWxsKSkpIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaW5kZXgrKztcbiAgICAgICAgfSB3aGlsZSAoaW5kZXggPD0gdGhpcy5yb3dNYXRyaXgubGVuZ3RoKTtcblxuICAgICAgICByZXR1cm4gaW5kZXg7XG4gICAgfVxuXG4gICAgZ2V0VGFyZ2V0Q29sdW1uU3RhcnRJbmRleChyb3dTdGFydEluZGV4OiBudW1iZXIsIHJvd0VuZEluZGV4OiBudW1iZXIsIGNlbGxTdGFydEluZGV4OiBudW1iZXIpOiBudW1iZXIge1xuICAgICAgICBsZXQgaW5kZXggPSBjZWxsU3RhcnRJbmRleDtcblxuICAgICAgICBmb3IgKGxldCBpID0gcm93U3RhcnRJbmRleDsgaSA8PSByb3dFbmRJbmRleDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5yb3dNYXRyaXhbaV0uY2VsbHNbY2VsbFN0YXJ0SW5kZXhdLmNlbGwuY29sU3BhbiA+IDEpIHtcbiAgICAgICAgICAgICAgICBsZXQgY2VsbEluZGV4ID0gY2VsbFN0YXJ0SW5kZXg7XG5cbiAgICAgICAgICAgICAgICBkbyB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5yb3dNYXRyaXhbaV0uY2VsbHNbY2VsbEluZGV4XSB8fCB0aGlzLnJvd01hdHJpeFtpXS5jZWxsc1tjZWxsSW5kZXhdLmNlbGwuY29sU3BhbiA9PT0gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXdJbmRleCA9IGNlbGxJbmRleDtcbiAgICAgICAgICAgICAgICAgICAgaW5kZXggPSBpbmRleCA8IG5ld0luZGV4ID8gaW5kZXggOiBuZXdJbmRleDtcbiAgICAgICAgICAgICAgICAgICAgY2VsbEluZGV4LS07XG4gICAgICAgICAgICAgICAgfSB3aGlsZSAoY2VsbEluZGV4ID49IDApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGluZGV4O1xuICAgIH1cblxuICAgIGdldFRhcmdldENvbHVtbkVuZEluZGV4KHJvd1N0YXJ0SW5kZXg6IG51bWJlciwgcm93RW5kSW5kZXg6IG51bWJlciwgY2VsbEVuZEluZGV4OiBudW1iZXIpOiBudW1iZXIge1xuICAgICAgICBsZXQgaW5kZXggPSBjZWxsRW5kSW5kZXggKyAxO1xuXG4gICAgICAgIGZvciAobGV0IGkgPSByb3dFbmRJbmRleDsgaSA+PSByb3dTdGFydEluZGV4OyBpLS0pIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnJvd01hdHJpeFtpXS5jZWxsc1tjZWxsRW5kSW5kZXhdLmNlbGwuY29sU3BhbiA+IDEpIHtcbiAgICAgICAgICAgICAgICBsZXQgY2VsbEluZGV4ID0gY2VsbEVuZEluZGV4O1xuXG4gICAgICAgICAgICAgICAgZG8ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMucm93TWF0cml4W2ldLmNlbGxzW2NlbGxJbmRleF0gfHwgdGhpcy5yb3dNYXRyaXhbaV0uY2VsbHNbY2VsbEluZGV4XS5jZWxsLmNvbFNwYW4gPT09IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV3SW5kZXggPSBjZWxsSW5kZXggKyAxO1xuICAgICAgICAgICAgICAgICAgICBpbmRleCA9IGluZGV4ID4gbmV3SW5kZXggPyBpbmRleCA6IG5ld0luZGV4O1xuICAgICAgICAgICAgICAgICAgICBjZWxsSW5kZXgrKztcbiAgICAgICAgICAgICAgICB9IHdoaWxlIChjZWxsSW5kZXggPD0gdGhpcy5yb3dNYXRyaXhbaV0uY2VsbHMubGVuZ3RoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBpbmRleDtcbiAgICB9XG59XG4iXX0=
|
|
364
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtc2VsZWN0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LW5vZGVyL3NyYy9saWIvK3NoYXJlZC9lZGl0b3IvY3VzdG9tLWNvbXBvbmVudHMvdGFibGUvc2VsZWN0aW9uL3RhYmxlLXNlbGVjdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFnQixZQUFZLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFJN0QsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBR3BFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBRXRFLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBRW5GLE1BQU0sT0FBTyxjQUFjO0lBcUJ2QixZQUNZLGFBQTRCLEVBQzVCLGNBQThCLEVBQzlCLFNBQXlCLEVBQ3pCLEtBQWlCLEVBQ2pCLE9BQXlCLEVBQ3pCLFNBQWlCO1FBTGpCLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBQzVCLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQUM5QixjQUFTLEdBQVQsU0FBUyxDQUFnQjtRQUN6QixVQUFLLEdBQUwsS0FBSyxDQUFZO1FBQ2pCLFlBQU8sR0FBUCxPQUFPLENBQWtCO1FBQ3pCLGNBQVMsR0FBVCxTQUFTLENBQVE7UUFacEIsa0JBQWEsR0FBRyxZQUFZLENBQUM7UUFFN0IsZ0JBQVcsR0FBRyxJQUFJLENBQUM7UUFFbkIseUJBQW9CLEdBQUcsQ0FBQyxhQUFhLENBQUMsQ0FBQztRQVU1QyxJQUFJLENBQUMsZ0NBQWdDLEVBQUUsQ0FBQztRQUN4QyxJQUFJLENBQUMsOEJBQThCLEVBQUUsQ0FBQztJQUMxQyxDQUFDO0lBRUQsT0FBTztRQUNILElBQUksSUFBSSxDQUFDLGlCQUFpQixFQUFFLFdBQVcsRUFBRTtZQUNyQyxJQUFJLENBQUMsaUJB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QUFTLEVBQUUsQ0FBQztpQkFDZixRQUFRLFNBQVMsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUU7YUFDekQ7U0FDSjtRQUVELE9BQU8sS0FBSyxDQUFDO0lBQ2pCLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGZyb21FdmVudCwgU3Vic2NyaXB0aW9uLCB0aHJvdHRsZVRpbWUgfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgQ2VsbERhdGFNb2RlbCB9IGZyb20gJy4uL21vZGVscy9jZWxsLWRhdGEubW9kZWwnO1xuaW1wb3J0IHsgRWRpdG9yU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL2ludGVyYWN0aW9uL2VkaXRvci5zZXJ2aWNlJztcbmltcG9ydCB7IE1vdXNlQnV0dG9uIH0gZnJvbSAnLi4vLi4vLi4vY29yZS9lbnVtcy9tb3VzZS1idXR0b24uZW51bSc7XG5pbXBvcnQgeyBPdmVybGF5U2VydmljZSB9IGZyb20gJy4uLy4uL3NoYXJlZC9zZXJ2aWNlcy9vdmVybGF5L292ZXJsYXkuc2VydmljZSc7XG5pbXBvcnQgeyBSb3dEYXRhTW9kZWwgfSBmcm9tICcuLi9tb2RlbHMvcm93LWRhdGEubW9kZWwnO1xuaW1wb3J0IHsgU2VsZWN0aW9uUmFuZ2VNb2RlbCB9IGZyb20gJy4uL21vZGVscy9zZWxlY3Rpb24tcmFuZ2UubW9kZWwnO1xuaW1wb3J0IHsgVGFibGVNb2RlbCB9IGZyb20gJy4uLy4uLy4uLy4uLy4uL21vZGVscy9nZW5lcmF0ZWQvdGFibGUubW9kZWwnO1xuaW1wb3J0IHsgVGFibGVPdmVybGF5TWVudUNvbXBvbmVudCB9IGZyb20gJy4uL292ZXJsYXktbWVudS9vdmVybGF5LW1lbnUuY29tcG9uZW50JztcblxuZXhwb3J0IGNsYXNzIFRhYmxlU2VsZWN0aW9uIHtcbiAgICBvcmlnaW5TZWxlY3RlZENlbGw6IHsgcm93SW5kZXg6IG51bWJlcjsgY2VsbEluZGV4OiBudW1iZXI7IGlzRm9jdXNlZDogYm9vbGVhbiB9O1xuXG4gICAgdGFibGVDb250ZXh0TWVudSQ6IFN1YnNjcmlwdGlvbjtcblxuICAgIHRhYmxlTW91c2VEb3duJDogU3Vic2NyaXB0aW9uO1xuXG4gICAgZG9jdW1lbnRNb3VzZURvd24kOiBTdWJzY3JpcHRpb247XG5cbiAgICBkb2N1bWVudE1vdXNlTW92ZSQ6IFN1YnNjcmlwdGlvbjtcblxuICAgIGRvY3VtZW50TW91c2VVcCQ6IFN1YnNjcmlwdGlvbjtcblxuICAgIHNlbGVjdGlvblJhbmdlOiBTZWxlY3Rpb25SYW5nZU1vZGVsIHwgbnVsbDtcblxuICAgIHJlYWRvbmx5IGVkaXRvclRhZ05hbWUgPSAnQVBQLUVESVRPUic7XG5cbiAgICByZWFkb25seSBjZWxsVGFnTmFtZSA9ICdURCc7XG5cbiAgICByZWFkb25seSBkcmFnZ2FibGVDZWxsQ29udGVudCA9IFsnQVBQLVJFU0laRVInXTtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIGVkaXRvclNlcnZpY2U6IEVkaXRvclNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgb3ZlcmxheVNlcnZpY2U6IE92ZXJsYXlTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHJvd01hdHJpeDogUm93RGF0YU1vZGVsW10sXG4gICAgICAgIHByaXZhdGUgdGFibGU6IFRhYmxlTW9kZWwsXG4gICAgICAgIHByaXZhdGUgdGFibGVFbDogSFRNTFRhYmxlRWxlbWVudCxcbiAgICAgICAgcHJpdmF0ZSBzZXNzaW9uSWQ6IG51bWJlclxuICAgICkge1xuICAgICAgICB0aGlzLmFkZFRhYmxlQ29udGV4dE1lbnVTdWJzY3JpcHRpb25zKCk7XG4gICAgICAgIHRoaXMuYWRkVGFibGVNb3VzZURvd25TdWJzY3JpcHRpb25zKCk7XG4gICAgfVxuXG4gICAgZGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMudGFibGVDb250ZXh0TWVudSQ/LnVuc3Vic2NyaWJlKSB7XG4gICAgICAgICAgICB0aGlzLnRhYmxlQ29udGV4dE1lbnUkLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy50YWJsZU1vdXNlRG93biQ/LnVuc3Vic2NyaWJlKSB7XG4gICAgICAgICAgICB0aGlzLnRhYmxlTW91c2VEb3duJC51bnN1YnNjcmliZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5yZW1vdmVNb3VzZVN1YnNjcmlwdGlvbnMoKTtcbiAgICB9XG5cbiAgICBhZGRUYWJsZUNvbnRleHRNZW51U3Vic2NyaXB0aW9ucygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy50YWJsZUNvbnRleHRNZW51JCA9IGZyb21FdmVudCh0aGlzLnRhYmxlRWwsICdjb250ZXh0bWVudScpLnN1YnNjcmliZSgoZXZlbnQ6IFBvaW50ZXJFdmVudCkgPT4ge1xuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIGlmICh0aGlzLmVkaXRvclNlcnZpY2UuaXNWaWV3T25seSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3Qgc2VsZWN0aW9uUmFuZ2UgPSB0aGlzLmdldFNlbGVjdGlvblJhbmdlRm9yTWVudU92ZXJsYXkoZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50KTtcbiAgICAgICAgICAgIGlmICghc2VsZWN0aW9uUmFuZ2UpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IHRhcmdldHMgPSB0aGlzLmdldFRhcmdldHNGb3JNZW51T3ZlcmxheShzZWxlY3Rpb25SYW5nZSk7XG4gICAgICAgICAgICBjb25zdCBjYW5SZW1vdmVSb3dzID0gc2VsZWN0aW9uUmFuZ2Uucm93SW5kZXhlcy5lbmRJbmRleCAtIHNlbGVjdGlvblJhbmdlLnJvd0luZGV4ZXMuc3RhcnRJbmRleCArIDEgPCB0aGlzLnJvd01hdHJpeC5sZW5ndGg7XG4gICAgICAgICAgICBjb25zdCBjYW5SZW1vdmVDb2x1bW5zID1cbiAgICAgICAgICAgICAgICBzZWxlY3Rpb25SYW5nZS5jZWxsSW5kZXhlcy5lbmRJbmRleCAtIHNlbGVjdGlvblJhbmdlLmNlbGxJbmRleGVzLnN0YXJ0SW5kZXggKyAxIDwgdGhpcy5yb3dNYXRyaXhbMF0uY2VsbHMubGVuZ3RoO1xuICAgICAgICAgICAgY29uc3QgZGF0YSA9IHtcbiAgICAgICAgICAgICAgICBzZWxlY3Rpb25SYW5nZSxcbiAgICAgICAgICAgICAgICB0YXJnZXRzLFxuICAgICAgICAgICAgICAgIGNhblJlbW92ZVJvd3MsXG4gICAgICAgICAgICAgICAgY2FuUmVtb3ZlQ29sdW1ucyxcbiAgICAgICAgICAgICAgICB0YWJsZUluc2VydEluZGV4OiB0aGlzLnRhYmxlLmluc2VydEluZGV4LFxuICAgICAgICAgICAgICAgIHNlc3Npb25JZDogdGhpcy5zZXNzaW9uSWRcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICB0aGlzLm92ZXJsYXlTZXJ2aWNlLm9wZW4oVGFibGVPdmVybGF5TWVudUNvbXBvbmVudCwgZGF0YSwgZXZlbnQueCwgZXZlbnQueSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGFkZFRhYmxlTW91c2VEb3duU3Vic2NyaXB0aW9ucygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy50YWJsZU1vdXNlRG93biQgPSBmcm9tRXZlbnQodGhpcy50YWJsZUVsLCAnbW91c2Vkb3duJykuc3Vic2NyaWJlKChldmVudDogTW91c2VFdmVudCkgPT4ge1xuICAgICAgICAgICAgaWYgKChldmVudC5idXR0b24gYXMgTW91c2VCdXR0b24pID09PSBNb3VzZUJ1dHRvbi5SaWdodCB8fCAhdGhpcy5jYW5TdGFydFNlbGVjdGlvbihldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLm92ZXJsYXlTZXJ2aWNlLmNsb3NlKCk7XG4gICAgICAgICAgICB0aGlzLnJlbW92ZU1vdXNlU3Vic2NyaXB0aW9ucygpO1xuICAgICAgICAgICAgdGhpcy5jbGVhclNlbGVjdGlvbkluQWxsQ2VsbHMoKTtcbiAgICAgICAgICAgIHRoaXMuYWRkRG9jdW1lbnRNb3VzZU1vdmVtZW50U3Vic2NyaXB0aW9ucygpO1xuICAgICAgICAgICAgY29uc3Qgb3JpZ2luU2VsZWN0ZWRDZWxsID0gdGhpcy5nZXRDZWxsSW5kZXhlcyhldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQpO1xuICAgICAgICAgICAgdGhpcy5vcmlnaW5TZWxlY3RlZENlbGwgPSB7IC4uLm9yaWdpblNlbGVjdGVkQ2VsbCwgaXNGb2N1c2VkOiB0cnVlIH07XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGFkZERvY3VtZW50TW91c2VNb3ZlbWVudFN1YnNjcmlwdGlvbnMoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZG9jdW1lbnRNb3VzZU1vdmUkID0gZnJvbUV2ZW50KGRvY3VtZW50LCAnbW91c2Vtb3ZlJylcbiAgICAgICAgICAgIC5waXBlKHRocm90dGxlVGltZSgxMDApKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoZXZlbnQ6IE1vdXNlRXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnByb2Nlc3NNb3VzZU1vdmUoZXZlbnQpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5kb2N1bWVudE1vdXNlVXAkID0gZnJvbUV2ZW50KGRvY3VtZW50LCAnbW91c2V1cCcpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnJlbW92ZU1vdXNlU3Vic2NyaXB0aW9ucygpO1xuICAgICAgICAgICAgdGhpcy5hZGREb2N1bWVudE1vdXNlRG93blN1YnNjcmlwdGlvbnMoKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgYWRkRG9jdW1lbnRNb3VzZURvd25TdWJzY3JpcHRpb25zKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmRvY3VtZW50TW91c2VEb3duJCA9IGZyb21FdmVudChkb2N1bWVudCwgJ21vdXNlZG93bicpLnN1YnNjcmliZSgoZXZlbnQ6IE1vdXNlRXZlbnQpID0+IHtcbiAgICAgICAgICAgIGlmICghdGhpcy5pc09uRWRpdG9yQ2xpY2soZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50KSB8fCB0aGlzLmlzT25UYWJsZUNsaWNrKGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMub3ZlcmxheVNlcnZpY2UuY2xvc2UoKTtcbiAgICAgICAgICAgIHRoaXMuY2xlYXJTZWxlY3Rpb25JbkFsbENlbGxzKCk7XG4gICAgICAgICAgICB0aGlzLm9yaWdpblNlbGVjdGVkQ2VsbCA9IG51bGw7XG4gICAgICAgICAgICB0aGlzLnJlbW92ZU1vdXNlU3Vic2NyaXB0aW9ucygpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICByZW1vdmVNb3VzZVN1YnNjcmlwdGlvbnMoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmRvY3VtZW50TW91c2VNb3ZlJD8udW5zdWJzY3JpYmUpIHtcbiAgICAgICAgICAgIHRoaXMuZG9jdW1lbnRNb3VzZU1vdmUkLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5kb2N1bWVudE1vdXNlVXAkPy51bnN1YnNjcmliZSkge1xuICAgICAgICAgICAgdGhpcy5kb2N1bWVudE1vdXNlVXAkLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5kb2N1bWVudE1vdXNlRG93biQ/LnVuc3Vic2NyaWJlKSB7XG4gICAgICAgICAgICB0aGlzLmRvY3VtZW50TW91c2VEb3duJC51bnN1YnNjcmliZSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJvY2Vzc01vdXNlTW92ZShldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5vcmlnaW5TZWxlY3RlZENlbGw/LmlzRm9jdXNlZCAmJiAhdGhpcy5pc09yaWdpbkNlbGwoZXZlbnQpKSB7XG4gICAgICAgICAgICB0aGlzLnJvd01hdHJpeFt0aGlzLm9yaWdpblNlbGVjdGVkQ2VsbC5yb3dJbmRleF0uY2VsbHNbdGhpcy5vcmlnaW5TZWxlY3RlZENlbGwuY2VsbEluZGV4XS5jbGVhclNlbGVjdGlvbigpO1xuICAgICAgICAgICAgdGhpcy5lZGl0b3JTZXJ2aWNlLmVuZE1vdXNlUHJlc3MoKTtcbiAgICAgICAgICAgIHRoaXMub3JpZ2luU2VsZWN0ZWRDZWxsLmlzRm9jdXNlZCA9IGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF0aGlzLm9yaWdpblNlbGVjdGVkQ2VsbD8uaXNGb2N1c2VkKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdEFsbENlbGxzSW5CZXR3ZWVuKGV2ZW50KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHNlbGVjdEFsbENlbGxzSW5CZXR3ZWVuKGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5vcmlnaW5TZWxlY3RlZENlbGwpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHNlbGVjdGVkQ2VsbCA9IHRoaXMuZ2V0Q2VsbEluZGV4ZXMoZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50KSB8fCB0aGlzLmdldENlbGxJbmRleGVzT3V0c2lkZVRhYmxlKGV2ZW50KTtcblxuICAgICAgICBpZiAoIXNlbGVjdGVkQ2VsbCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5jbGVhclNlbGVjdGlvbkluQWxsQ2VsbHMoKTtcblxuICAgICAgICBjb25zdCByb3dJbmRleGVzID0gdGhpcy5nZXRTdGFydEFuZEVuZEluZGV4ZXModGhpcy5vcmlnaW5TZWxlY3RlZENlbGwucm93SW5kZXgsIHNlbGVjdGVkQ2VsbC5yb3dJbmRleCk7XG4gICAgICAgIGNvbnN0IGNlbGxJbmRleGVzID0gdGhpcy5nZXRTdGFydEFuZEVuZEluZGV4ZXModGhpcy5vcmlnaW5TZWxlY3RlZENlbGwuY2VsbEluZGV4LCBzZWxlY3RlZENlbGwuY2VsbEluZGV4KTtcbiAgICAgICAgY29uc3QgY2VsbHM6IENlbGxEYXRhTW9kZWxbXSA9IFtdO1xuICAgICAgICBsZXQgY3VycmVudFJvd0luZGV4ID0gcm93SW5kZXhlcy5zdGFydEluZGV4O1xuXG4gICAgICAgIHdoaWxlIChjdXJyZW50Um93SW5kZXggPD0gcm93SW5kZXhlcy5lbmRJbmRleCkge1xuICAgICAgICAgICAgbGV0IGN1cnJlbnRDZWxsSW5kZXggPSBjZWxsSW5kZXhlcy5zdGFydEluZGV4O1xuXG4gICAgICAgICAgICB3aGlsZSAoY3VycmVudENlbGxJbmRleCA8PSBjZWxsSW5kZXhlcy5lbmRJbmRleCkge1xuICAgICAgICAgICAgICAgIGNlbGxzLnB1c2godGhpcy5yb3dNYXRyaXhbY3VycmVudFJvd0luZGV4XS5jZWxsc1tjdXJyZW50Q2VsbEluZGV4XSk7XG4gICAgICAgICAgICAgICAgY3VycmVudENlbGxJbmRleCsrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjdXJyZW50Um93SW5kZXgrKztcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHVuaXFDZWxscyA9IG5ldyBTZXQoY2VsbHMpO1xuICAgICAgICB1bmlxQ2VsbHMuZm9yRWFjaChjZWxsID0+IGNlbGwuaGlnaGxpZ2h0Q2VsbCgpKTtcbiAgICAgICAgdGhpcy5zZWxlY3Rpb25SYW5nZSA9IG5ldyBTZWxlY3Rpb25SYW5nZU1vZGVsKHJvd0luZGV4ZXMsIGNlbGxJbmRleGVzKTtcbiAgICB9XG5cbiAgICBnZXRDZWxsSW5kZXhlcyhlbGVtZW50OiBIVE1MRWxlbWVudCk6IHsgcm93SW5kZXg6IG51bWJlcjsgY2VsbEluZGV4OiBudW1iZXIgfSB8IG51bGwge1xuICAgICAgICBsZXQgY3VycmVudEVsZW1lbnQgPSBlbGVtZW50O1xuICAgICAgICBsZXQgc2VsZWN0ZWRDZWxsOiB7IHJvd0luZGV4OiBudW1iZXI7IGNlbGxJbmRleDogbnVtYmVyIH0gfCBudWxsID0gbnVsbDtcblxuICAgICAgICB3aGlsZSAoIXNlbGVjdGVkQ2VsbCAmJiBjdXJyZW50RWxlbWVudCkge1xuICAgICAgICAgICAgaWYgKGN1cnJlbnRFbGVtZW50LnRhZ05hbWUgPT09IHRoaXMuY2VsbFRhZ05hbWUpIHtcbiAgICAgICAgICAgICAgICBzZWxlY3RlZENlbGwgPSB0aGlzLmdldFNlbGVjdGVkQ2VsbChjdXJyZW50RWxlbWVudCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGN1cnJlbnRFbGVtZW50ID0gY3VycmVudEVsZW1lbnQucGFyZW50RWxlbWVudDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBzZWxlY3RlZENlbGw7XG4gICAgfVxuXG4gICAgZ2V0U2VsZWN0ZWRDZWxsKGVsOiBIVE1MRWxlbWVudCk6IHsgcm93SW5kZXg6IG51bWJlcjsgY2VsbEluZGV4OiBudW1iZXIgfSB8IG51bGwge1xuICAgICAgICBsZXQgc2VsZWN0ZWRDZWxsOiB7IHJvd0luZGV4OiBudW1iZXI7IGNlbGxJbmRleDogbnVtYmVyIH0gfCBudWxsID0gbnVsbDtcblxuICAgICAgICB0aGlzLnJvd01hdHJpeC5zb21lKChyb3csIHJvd0luZGV4KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBjZWxsSW5kZXggPSByb3cuY2VsbHMuZmluZEluZGV4KHggPT4geC5jZWxsID09PSBlbCk7XG5cbiAgICAgICAgICAgIGlmIChjZWxsSW5kZXggPiAtMSkge1xuICAgICAgICAgICAgICAgIHNlbGVjdGVkQ2VsbCA9IHsgcm93SW5kZXgsIGNlbGxJbmRleCB9O1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiBzZWxlY3RlZENlbGw7XG4gICAgfVxuXG4gICAgZ2V0Q2VsbEluZGV4ZXNPdXRzaWRlVGFibGUoZXZlbnQ6IE1vdXNlRXZlbnQpOiB7IHJvd0luZGV4OiBudW1iZXI7IGNlbGxJbmRleDogbnVtYmVyIH0gfCBudWxsIHtcbiAgICAgICAgbGV0IHNlbGVjdGVkQ2VsbDogeyByb3dJbmRleDogbnVtYmVyOyBjZWxsSW5kZXg6IG51bWJlciB9IHwgbnVsbCA9IG51bGw7XG4gICAgICAgIGNvbnN0IHRhYmxlUmVhY3QgPSB0aGlzLnRhYmxlRWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cbiAgICAgICAgaWYgKGV2ZW50LmNsaWVudFkgPD0gdGFibGVSZWFjdC50b3AgfHwgZXZlbnQuY2xpZW50WSA+PSB0YWJsZVJlYWN0LmJvdHRvbSkge1xuICAgICAgICAgICAgdGhpcy5hZGRTZWxlY3Rpb25JbkFsbENlbGxzKCk7XG4gICAgICAgIH0gZWxzZSBpZiAoZXZlbnQuY2xpZW50WCA8PSB0YWJsZVJlYWN0LmxlZnQpIHtcbiAgICAgICAgICAgIHNlbGVjdGVkQ2VsbCA9IHRoaXMuZ2V0Q2VsbEluZGV4ZXNPdXRzaWRlVGFibGVMZWZ0KGV2ZW50KTtcbiAgICAgICAgfSBlbHNlIGlmIChldmVudC5jbGllbnRYID49IHRhYmxlUmVhY3QucmlnaHQpIHtcbiAgICAgICAgICAgIHNlbGVjdGVkQ2VsbCA9IHRoaXMuZ2V0Q2VsbEluZGV4ZXNPdXRzaWRlVGFibGVSaWdodHMoZXZlbnQpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHNlbGVjdGVkQ2VsbDtcbiAgICB9XG5cbiAgICBnZXRDZWxsSW5kZXhlc091dHNpZGVUYWJsZUxlZnQoZXZlbnQ6IE1vdXNlRXZlbnQpOiB7IHJvd0luZGV4OiBudW1iZXI7IGNlbGxJbmRleDogbnVtYmVyIH0ge1xuICAgICAgICBjb25zdCByb3dJbmRleCA9IHRoaXMuZ2V0TmVhcmVzdFJvd0luZGV4KGV2ZW50KTtcbiAgICAgICAgcmV0dXJuIHsgcm93SW5kZXgsIGNlbGxJbmRleDogMCB9O1xuICAgIH1cblxuICAgIGdldENlbGxJbmRleGVzT3V0c2lkZVRhYmxlUmlnaHRzKGV2ZW50OiBNb3VzZUV2ZW50KTogeyByb3dJbmRleDogbnVtYmVyOyBjZWxsSW5kZXg6IG51bWJlciB9IHtcbiAgICAgICAgY29uc3Qgcm93SW5kZXggPSB0aGlzLmdldE5lYXJlc3RSb3dJbmRleChldmVudCk7XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHJvd0luZGV4LFxuICAgICAgICAgICAgY2VsbEluZGV4OiB0aGlzLnJvd01hdHJpeFtyb3dJbmRleF0uY2VsbHMubGVuZ3RoIC0gMVxuICAgICAgICB9O1xuICAgIH1cblxuICAgIGdldE5lYXJlc3RSb3dJbmRleChldmVudDogTW91c2VFdmVudCk6IG51bWJlciB7XG4gICAgICAgIGNvbnN0IHJvd3MgPSB0aGlzLnRhYmxlRWwucm93cztcbiAgICAgICAgY29uc3QgbWF4Um93SW5kZXggPSByb3dzLmxlbmd0aCAtIDE7XG4gICAgICAgIGxldCByb3dJbmRleCA9IC0xO1xuXG4gICAgICAgIGRvIHtcbiAgICAgICAgICAgIHJvd0luZGV4Kys7XG4gICAgICAgICAgICBjb25zdCByb3dSZWFjdCA9IHJvd3Nbcm93SW5kZXhdLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXG4gICAgICAgICAgICBpZiAoZXZlbnQuY2xpZW50WSA+PSByb3dSZWFjdC50b3AgJiYgZXZlbnQuY2xpZW50WSA8PSByb3dSZWFjdC5ib3R0b20pIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSB3aGlsZSAocm93SW5kZXggPCBtYXhSb3dJbmRleCk7XG5cbiAgICAgICAgcmV0dXJuIHJvd0luZGV4O1xuICAgIH1cblxuICAgIGFkZFNlbGVjdGlvbkluQWxsQ2VsbHMoKTogdm9pZCB7XG4gICAgICAgIHRoaXMucm93TWF0cml4LmZvckVhY2gocm93ID0+IHtcbiAgICAgICAgICAgIHJvdy5jZWxscy5mb3JFYWNoKGNlbGwgPT4ge1xuICAgICAgICAgICAgICAgIGNlbGwuaGlnaGxpZ2h0Q2VsbCgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCByb3dJbmRleGVzID0ge1xuICAgICAgICAgICAgc3RhcnRJbmRleDogMCxcbiAgICAgICAgICAgIGVuZEluZGV4OiB0aGlzLnJvd01hdHJpeC5sZW5ndGggLSAxXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IGNlbGxJbmRleGVzID0ge1xuICAgICAgICAgICAgc3RhcnRJbmRleDogMCxcbiAgICAgICAgICAgIGVuZEluZGV4OiBNYXRoLm1heCguLi50aGlzLnJvd01hdHJpeC5tYXAoeCA9PiB4LmNlbGxzLmxlbmd0aCkpXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuc2VsZWN0aW9uUmFuZ2UgPSBuZXcgU2VsZWN0aW9uUmFuZ2VNb2RlbChyb3dJbmRleGVzLCBjZWxsSW5kZXhlcyk7XG4gICAgfVxuXG4gICAgY2xlYXJTZWxlY3Rpb25JbkFsbENlbGxzKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnJvd01hdHJpeC5mb3JFYWNoKHJvdyA9PiB7XG4gICAgICAgICAgICByb3cuY2VsbHMuZm9yRWFjaChjZWxsID0+IHtcbiAgICAgICAgICAgICAgICBjZWxsLnJlbW92ZUhpZ2hsaWdodENlbGwoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5zZWxlY3Rpb25SYW5nZSA9IG51bGw7XG4gICAgfVxuXG4gICAgZ2V0U3RhcnRBbmRFbmRJbmRleGVzKG9yaWdpbkluZGV4OiBudW1iZXIsIGN1cnJlbnRJbmRleDogbnVtYmVyKTogeyBzdGFydEluZGV4OiBudW1iZXI7IGVuZEluZGV4OiBudW1iZXIgfSB7XG4gICAgICAgIGNvbnN0IGluZGV4ZXMgPSBbb3JpZ2luSW5kZXgsIGN1cnJlbnRJbmRleF07XG4gICAgICAgIGluZGV4ZXMuc29ydCgoYSwgYikgPT4gYSAtIGIpO1xuXG4gICAgICAgIHJldHVybiB7IHN0YXJ0SW5kZXg6IGluZGV4ZXNbMF0sIGVuZEluZGV4OiBpbmRleGVzWzFdIH07XG4gICAgfVxuXG4gICAgaXNPcmlnaW5DZWxsKGV2ZW50OiBNb3VzZUV2ZW50KTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IHNlbGVjdGVkQ2VsbCA9IHRoaXMuZ2V0Q2VsbEluZGV4ZXMoZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50KTtcblxuICAgICAgICBpZiAoIXNlbGVjdGVkQ2VsbCB8fCAhdGhpcy5vcmlnaW5TZWxlY3RlZENlbGwpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLm9yaWdpblNlbGVjdGVkQ2VsbC5yb3dJbmRleCA9PT0gc2VsZWN0ZWRDZWxsLnJvd0luZGV4ICYmIHRoaXMub3JpZ2luU2VsZWN0ZWRDZWxsLmNlbGxJbmRleCA9PT0gc2VsZWN0ZWRDZWxsLmNlbGxJbmRleDtcbiAgICB9XG5cbiAgICBpc09uRWRpdG9yQ2xpY2soZWxlbWVudDogSFRNTEVsZW1lbnQpOiBib29sZWFuIHtcbiAgICAgICAgbGV0IGN1cnJlbnRFbGVtZW50ID0gZWxlbWVudDtcbiAgICAgICAgbGV0IGlzT25FZGl0b3JDbGljayA9IGZhbHNlO1xuXG4gICAgICAgIHdoaWxlICghaXNPbkVkaXRvckNsaWNrICYmIGN1cnJlbnRFbGVtZW50KSB7XG4gICAgICAgICAgICBpc09uRWRpdG9yQ2xpY2sgPSBjdXJyZW50RWxlbWVudC50YWdOYW1lID09PSB0aGlzLmVkaXRvclRhZ05hbWU7XG4gICAgICAgICAgICBjdXJyZW50RWxlbWVudCA9IGN1cnJlbnRFbGVtZW50LnBhcmVudEVsZW1lbnQ7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gaXNPbkVkaXRvckNsaWNrO1xuICAgIH1cblxuICAgIGlzT25UYWJsZUNsaWNrKGVsZW1lbnQ6IEhUTUxFbGVtZW50KTogYm9vbGVhbiB7XG4gICAgICAgIGxldCBjdXJyZW50RWxlbWVudCA9IGVsZW1lbnQ7XG4gICAgICAgIGxldCBpc09uVGFibGVDbGljayA9IGZhbHNlO1xuXG4gICAgICAgIHdoaWxlICghaXNPblRhYmxlQ2xpY2sgJiYgY3VycmVudEVsZW1lbnQpIHtcbiAgICAgICAgICAgIGlzT25UYWJsZUNsaWNrID0gY3VycmVudEVsZW1lbnQgPT09IHRoaXMudGFibGVFbDtcbiAgICAgICAgICAgIGN1cnJlbnRFbGVtZW50ID0gY3VycmVudEVsZW1lbnQucGFyZW50RWxlbWVudDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBpc09uVGFibGVDbGljaztcbiAgICB9XG5cbiAgICBjYW5TdGFydFNlbGVjdGlvbihlbGVtZW50OiBIVE1MRWxlbWVudCk6IGJvb2xlYW4ge1xuICAgICAgICBsZXQgY3VycmVudEVsZW1lbnQgPSBlbGVtZW50O1xuICAgICAgICBsZXQgY2FuU3RhcnRTZWxlY3Rpb24gPSBmYWxzZTtcblxuICAgICAgICB3aGlsZSAoIWNhblN0YXJ0U2VsZWN0aW9uICYmIGN1cnJlbnRFbGVtZW50KSB7XG4gICAgICAgICAgICBpZiAodGhpcy5kcmFnZ2FibGVDZWxsQ29udGVudC5pbmNsdWRlcyhjdXJyZW50RWxlbWVudC50YWdOYW1lKSkge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjYW5TdGFydFNlbGVjdGlvbiA9IGN1cnJlbnRFbGVtZW50LnRhZ05hbWUgPT09IHRoaXMuY2VsbFRhZ05hbWU7XG4gICAgICAgICAgICBjdXJyZW50RWxlbWVudCA9IGN1cnJlbnRFbGVtZW50LnBhcmVudEVsZW1lbnQ7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gY2FuU3RhcnRTZWxlY3Rpb247XG4gICAgfVxuXG4gICAgZ2V0U2VsZWN0aW9uUmFuZ2VGb3JNZW51T3ZlcmxheShlbGVtZW50OiBIVE1MRWxlbWVudCk6IFNlbGVjdGlvblJhbmdlTW9kZWwge1xuICAgICAgICBjb25zdCBzZWxlY3RlZENlbGwgPSB0aGlzLmdldENlbGxJbmRleGVzKGVsZW1lbnQpO1xuICAgICAgICBpZiAoIXNlbGVjdGVkQ2VsbCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBpc0NlbGxJblNlbGVjdGlvbiA9XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvblJhbmdlICYmXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvblJhbmdlLnJvd0luZGV4ZXMuc3RhcnRJbmRleCA8PSBzZWxlY3RlZENlbGwucm93SW5kZXggJiZcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uUmFuZ2Uucm93SW5kZXhlcy5lbmRJbmRleCA+PSBzZWxlY3RlZENlbGwucm93SW5kZXggJiZcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uUmFuZ2UuY2VsbEluZGV4ZXMuc3RhcnRJbmRleCA8PSBzZWxlY3RlZENlbGwuY2VsbEluZGV4ICYmXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvblJhbmdlLmNlbGxJbmRleGVzLmVuZEluZGV4ID49IHNlbGVjdGVkQ2VsbC5jZWxsSW5kZXg7XG5cbiAgICAgICAgaWYgKCFpc0NlbGxJblNlbGVjdGlvbiAmJiB0aGlzLnNlbGVjdGlvblJhbmdlKSB7XG4gICAgICAgICAgICB0aGlzLmNsZWFyU2VsZWN0aW9uSW5BbGxDZWxscygpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGlzQ2VsbEluU2VsZWN0aW9uKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zZWxlY3Rpb25SYW5nZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCByb3dFbmRJbmRleCA9IHNlbGVjdGVkQ2VsbC5yb3dJbmRleDtcbiAgICAgICAgbGV0IGNvbHVtbkVuZEluZGV4ID0gc2VsZWN0ZWRDZWxsLmNlbGxJbmRleDtcblxuICAgICAgICB3aGlsZSAoXG4gICAgICAgICAgICB0aGlzLnJvd01hdHJpeFtyb3dFbmRJbmRleF0uY2VsbHNbc2VsZWN0ZWRDZWxsLmNlbGxJbmRleF0uY2VsbCA9PT1cbiAgICAgICAgICAgIHRoaXMucm93TWF0cml4W3Jvd0VuZEluZGV4ICsgMV0/LmNlbGxzW3NlbGVjdGVkQ2VsbC5jZWxsSW5kZXhdLmNlbGxcbiAgICAgICAgKSB7XG4gICAgICAgICAgICByb3dFbmRJbmRleCsrO1xuICAgICAgICB9XG5cbiAgICAgICAgd2hpbGUgKHRoaXMucm93TWF0cml4W3Jvd0VuZEluZGV4XS5jZWxsc1tjb2x1bW5FbmRJbmRleF0uY2VsbCA9PT0gdGhpcy5yb3dNYXRyaXhbcm93RW5kSW5kZXhdLmNlbGxzW2NvbHVtbkVuZEluZGV4ICsgMV0/LmNlbGwpIHtcbiAgICAgICAgICAgIGNvbHVtbkVuZEluZGV4Kys7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbmV3IFNlbGVjdGlvblJhbmdlTW9kZWwoXG4gICAgICAgICAgICB7IHN0YXJ0SW5kZXg6IHNlbGVjdGVkQ2VsbC5yb3dJbmRleCwgZW5kSW5kZXg6IHJvd0VuZEluZGV4IH0sXG4gICAgICAgICAgICB7IHN0YXJ0SW5kZXg6IHNlbGVjdGVkQ2VsbC5jZWxsSW5kZXgsIGVuZEluZGV4OiBjb2x1bW5FbmRJbmRleCB9XG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZ2V0VGFyZ2V0c0Zvck1lbnVPdmVybGF5KHNlbGVjdGlvblJhbmdlOiBTZWxlY3Rpb25SYW5nZU1vZGVsKTogU2VsZWN0aW9uUmFuZ2VNb2RlbCB7XG4gICAgICAgIHJldHVybiBuZXcgU2VsZWN0aW9uUmFuZ2VNb2RlbChcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBzdGFydEluZGV4OiB0aGlzLmdldFRhcmdldFJvd1N0YXJ0SW5kZXgoc2VsZWN0aW9uUmFuZ2Uucm93SW5kZXhlcy5zdGFydEluZGV4KSxcbiAgICAgICAgICAgICAgICBlbmRJbmRleDogdGhpcy5nZXRUYXJnZXRSb3dFbmRJbmRleChzZWxlY3Rpb25SYW5nZS5yb3dJbmRleGVzLmVuZEluZGV4KVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBzdGFydEluZGV4OiB0aGlzLmdldFRhcmdldENvbHVtblN0YXJ0SW5kZXgoXG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvblJhbmdlLnJvd0luZGV4ZXMuc3RhcnRJbmRleCxcbiAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uUmFuZ2Uucm93SW5kZXhlcy5lbmRJbmRleCxcbiAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uUmFuZ2UuY2VsbEluZGV4ZXMuc3RhcnRJbmRleFxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgZW5kSW5kZXg6IHRoaXMuZ2V0VGFyZ2V0Q29sdW1uRW5kSW5kZXgoXG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvblJhbmdlLnJvd0luZGV4ZXMuc3RhcnRJbmRleCxcbiAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uUmFuZ2Uucm93SW5kZXhlcy5lbmRJbmRleCxcbiAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uUmFuZ2UuY2VsbEluZGV4ZXMuZW5kSW5kZXhcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZ2V0VGFyZ2V0Um93U3RhcnRJbmRleChzdGFydEluZGV4OiBudW1iZXIpOiBudW1iZXIge1xuICAgICAgICBjb25zdCBtZXJnZWRSb3dDZWxscyA9IHRoaXMucm93TWF0cml4W3N0YXJ0SW5kZXhdLmNlbGxzLmZpbHRlcihcbiAgICAgICAgICAgIHggPT4geC5jZWxsLnJvd1NwYW4gPiAxICYmIHguY29tcG9uZW50UmVmLmluc3RhbmNlLmNlbGwudmVydGljYWxNZXJnZVxuICAgICAgICApO1xuXG4gICAgICAgIGlmICghbWVyZ2VkUm93Q2VsbHMubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gc3RhcnRJbmRleDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHVuaXFDZWxscyA9IG5ldyBTZXQobWVyZ2VkUm93Q2VsbHMpO1xuICAgICAgICBsZXQgaW5kZXggPSBzdGFydEluZGV4O1xuXG4gICAgICAgIGRvIHtcbiAgICAgICAgICAgIGNvbnN0IGNlbGxzID0gdGhpcy5yb3dNYXRyaXhbaW5kZXhdLmNlbGxzO1xuXG4gICAgICAgICAgICBpZiAoIWNlbGxzLnNvbWUoY2VsbCA9PiB1bmlxQ2VsbHMuaGFzKGNlbGwpKSkge1xuICAgICAgICAgICAgICAgIGluZGV4Kys7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGluZGV4LS07XG4gICAgICAgIH0gd2hpbGUgKGluZGV4ID49IDApO1xuXG4gICAgICAgIHJldHVybiBpbmRleDtcbiAgICB9XG5cbiAgICBnZXRUYXJnZXRSb3dFbmRJbmRleChlbmRJbmRleDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICAgICAgY29uc3QgbWVyZ2VkUm93Q2VsbHMgPSB0aGlzLnJvd01hdHJpeFtlbmRJbmRleF0uY2VsbHMuZmlsdGVyKHggPT4geC5jZWxsLnJvd1NwYW4gPiAxICYmIHguY29tcG9uZW50UmVmLmluc3RhbmNlLmNlbGwudmVydGljYWxNZXJnZSk7XG5cbiAgICAgICAgaWYgKCFtZXJnZWRSb3dDZWxscy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiBlbmRJbmRleCArIDE7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB1bmlxQ2VsbHMgPSBuZXcgU2V0KG1lcmdlZFJvd0NlbGxzKTtcbiAgICAgICAgbGV0IGluZGV4ID0gZW5kSW5kZXg7XG5cbiAgICAgICAgZG8ge1xuICAgICAgICAgICAgY29uc3QgY2VsbHMgPSB0aGlzLnJvd01hdHJpeFtpbmRleF0/LmNlbGxzO1xuXG4gICAgICAgICAgICBpZiAoIWNlbGxzPy5zb21lKGNlbGwgPT4gdW5pcUNlbGxzLmhhcyhjZWxsKSkpIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaW5kZXgrKztcbiAgICAgICAgfSB3aGlsZSAoaW5kZXggPD0gdGhpcy5yb3dNYXRyaXgubGVuZ3RoKTtcblxuICAgICAgICByZXR1cm4gaW5kZXg7XG4gICAgfVxuXG4gICAgZ2V0VGFyZ2V0Q29sdW1uU3RhcnRJbmRleChyb3dTdGFydEluZGV4OiBudW1iZXIsIHJvd0VuZEluZGV4OiBudW1iZXIsIGNlbGxTdGFydEluZGV4OiBudW1iZXIpOiBudW1iZXIge1xuICAgICAgICBsZXQgaW5kZXggPSBjZWxsU3RhcnRJbmRleDtcblxuICAgICAgICBmb3IgKGxldCBpID0gcm93U3RhcnRJbmRleDsgaSA8PSByb3dFbmRJbmRleDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5yb3dNYXRyaXhbaV0uY2VsbHNbY2VsbFN0YXJ0SW5kZXhdLmNlbGwuY29sU3BhbiA+IDEpIHtcbiAgICAgICAgICAgICAgICBsZXQgY2VsbEluZGV4ID0gY2VsbFN0YXJ0SW5kZXg7XG5cbiAgICAgICAgICAgICAgICBkbyB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5yb3dNYXRyaXhbaV0uY2VsbHNbY2VsbEluZGV4XSB8fCB0aGlzLnJvd01hdHJpeFtpXS5jZWxsc1tjZWxsSW5kZXhdLmNlbGwuY29sU3BhbiA9PT0gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXdJbmRleCA9IGNlbGxJbmRleDtcbiAgICAgICAgICAgICAgICAgICAgaW5kZXggPSBpbmRleCA8IG5ld0luZGV4ID8gaW5kZXggOiBuZXdJbmRleDtcbiAgICAgICAgICAgICAgICAgICAgY2VsbEluZGV4LS07XG4gICAgICAgICAgICAgICAgfSB3aGlsZSAoY2VsbEluZGV4ID49IDApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGluZGV4O1xuICAgIH1cblxuICAgIGdldFRhcmdldENvbHVtbkVuZEluZGV4KHJvd1N0YXJ0SW5kZXg6IG51bWJlciwgcm93RW5kSW5kZXg6IG51bWJlciwgY2VsbEVuZEluZGV4OiBudW1iZXIpOiBudW1iZXIge1xuICAgICAgICBsZXQgaW5kZXggPSBjZWxsRW5kSW5kZXggKyAxO1xuXG4gICAgICAgIGZvciAobGV0IGkgPSByb3dFbmRJbmRleDsgaSA+PSByb3dTdGFydEluZGV4OyBpLS0pIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnJvd01hdHJpeFtpXS5jZWxsc1tjZWxsRW5kSW5kZXhdLmNlbGwuY29sU3BhbiA+IDEpIHtcbiAgICAgICAgICAgICAgICBsZXQgY2VsbEluZGV4ID0gY2VsbEVuZEluZGV4O1xuXG4gICAgICAgICAgICAgICAgZG8ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMucm93TWF0cml4W2ldLmNlbGxzW2NlbGxJbmRleF0gfHwgdGhpcy5yb3dNYXRyaXhbaV0uY2VsbHNbY2VsbEluZGV4XS5jZWxsLmNvbFNwYW4gPT09IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV3SW5kZXggPSBjZWxsSW5kZXggKyAxO1xuICAgICAgICAgICAgICAgICAgICBpbmRleCA9IGluZGV4ID4gbmV3SW5kZXggPyBpbmRleCA6IG5ld0luZGV4O1xuICAgICAgICAgICAgICAgICAgICBjZWxsSW5kZXgrKztcbiAgICAgICAgICAgICAgICB9IHdoaWxlIChjZWxsSW5kZXggPD0gdGhpcy5yb3dNYXRyaXhbaV0uY2VsbHMubGVuZ3RoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBpbmRleDtcbiAgICB9XG59XG4iXX0=
|