@fundamental-ngx/platform 0.43.59 → 0.43.61
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/esm2020/smart-filter-bar/components/smart-filter-bar-settings-dialog/smart-filter-bar-settings-dialog.component.mjs +1 -1
- package/esm2020/smart-filter-bar/smart-filter-bar.component.mjs +1 -1
- package/esm2020/table/components/table-p13-dialog/columns/columns.component.mjs +1 -1
- package/esm2020/table/components/table-toolbar/table-toolbar.component.mjs +5 -3
- package/esm2020/table/table.component.mjs +3 -3
- package/esm2020/table-helpers/directives/table-draggable.directive.mjs +45 -4
- package/esm2020/table-helpers/directives/table-virtual-scroll.directive.mjs +7 -3
- package/esm2020/upload-collection/upload-collection/upload-collection.component.mjs +1 -1
- package/esm2020/value-help-dialog/value-help-dialog/value-help-dialog.component.mjs +1 -1
- package/fesm2015/fundamental-ngx-platform-smart-filter-bar.mjs +2 -2
- package/fesm2015/fundamental-ngx-platform-smart-filter-bar.mjs.map +1 -1
- package/fesm2015/fundamental-ngx-platform-table-helpers.mjs +49 -5
- package/fesm2015/fundamental-ngx-platform-table-helpers.mjs.map +1 -1
- package/fesm2015/fundamental-ngx-platform-table.mjs +7 -5
- package/fesm2015/fundamental-ngx-platform-table.mjs.map +1 -1
- package/fesm2015/fundamental-ngx-platform-upload-collection.mjs +1 -1
- package/fesm2015/fundamental-ngx-platform-upload-collection.mjs.map +1 -1
- package/fesm2015/fundamental-ngx-platform-value-help-dialog.mjs +1 -1
- package/fesm2015/fundamental-ngx-platform-value-help-dialog.mjs.map +1 -1
- package/fesm2020/fundamental-ngx-platform-smart-filter-bar.mjs +2 -2
- package/fesm2020/fundamental-ngx-platform-smart-filter-bar.mjs.map +1 -1
- package/fesm2020/fundamental-ngx-platform-table-helpers.mjs +48 -5
- package/fesm2020/fundamental-ngx-platform-table-helpers.mjs.map +1 -1
- package/fesm2020/fundamental-ngx-platform-table.mjs +7 -5
- package/fesm2020/fundamental-ngx-platform-table.mjs.map +1 -1
- package/fesm2020/fundamental-ngx-platform-upload-collection.mjs +1 -1
- package/fesm2020/fundamental-ngx-platform-upload-collection.mjs.map +1 -1
- package/fesm2020/fundamental-ngx-platform-value-help-dialog.mjs +1 -1
- package/fesm2020/fundamental-ngx-platform-value-help-dialog.mjs.map +1 -1
- package/fundamental-ngx-platform-v0.43.61.tgz +0 -0
- package/package.json +4 -4
- package/schematics/ng-add/index.js +1 -1
- package/table/components/table-toolbar/table-toolbar.component.d.ts +6 -1
- package/table-helpers/directives/table-draggable.directive.d.ts +10 -2
- package/table-helpers/directives/table-virtual-scroll.directive.d.ts +2 -0
- package/fundamental-ngx-platform-v0.43.59.tgz +0 -0
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
/* eslint-disable @typescript-eslint/member-ordering */
|
|
2
2
|
import { ChangeDetectorRef, Directive, EventEmitter, forwardRef, HostBinding, inject, Input, NgZone, Output } from '@angular/core';
|
|
3
|
+
import { KeyUtil } from '@fundamental-ngx/cdk/utils';
|
|
3
4
|
import { take } from 'rxjs/operators';
|
|
4
5
|
import { FDP_TABLE_DRAGGABLE_DIRECTIVE } from '../constants';
|
|
5
6
|
import { TableRowType } from '../enums';
|
|
6
7
|
import { findRowChildren, getRowParents } from '../helpers';
|
|
7
8
|
import { TableRowsRearrangeEvent } from '../models';
|
|
8
9
|
import { TableDraggable } from '../models/directives';
|
|
10
|
+
import { DOWN_ARROW, END, HOME, LEFT_ARROW, PAGE_DOWN, PAGE_UP, RIGHT_ARROW, SPACE, UP_ARROW } from '@angular/cdk/keycodes';
|
|
9
11
|
import * as i0 from "@angular/core";
|
|
10
12
|
export class TableDraggableDirective extends TableDraggable {
|
|
11
13
|
constructor() {
|
|
@@ -33,6 +35,10 @@ export class TableDraggableDirective extends TableDraggable {
|
|
|
33
35
|
get _rowsDraggable() {
|
|
34
36
|
return this.isTreeTable && this.enableRowReordering;
|
|
35
37
|
}
|
|
38
|
+
/** @hidden */
|
|
39
|
+
ngOnDestroy() {
|
|
40
|
+
this._setDragInProgress(false);
|
|
41
|
+
}
|
|
36
42
|
/** Sets table reference. */
|
|
37
43
|
setTable(table) {
|
|
38
44
|
this._table = table;
|
|
@@ -41,7 +47,7 @@ export class TableDraggableDirective extends TableDraggable {
|
|
|
41
47
|
* Initiates drag&drop sequence.
|
|
42
48
|
*/
|
|
43
49
|
dragDropStart() {
|
|
44
|
-
this.
|
|
50
|
+
this._setDragInProgress(true);
|
|
45
51
|
}
|
|
46
52
|
/** Method called when dnd performed with the keyboard. */
|
|
47
53
|
dragRowFromKeyboard(dir, event, currentRowIndex, mode) {
|
|
@@ -69,14 +75,16 @@ export class TableDraggableDirective extends TableDraggable {
|
|
|
69
75
|
dropCancelled() {
|
|
70
76
|
/** After timeout to make click event handled first */
|
|
71
77
|
this._ngZone.runOutsideAngular(() => {
|
|
72
|
-
setTimeout(() =>
|
|
78
|
+
setTimeout(() => {
|
|
79
|
+
this._setDragInProgress(false);
|
|
80
|
+
});
|
|
73
81
|
});
|
|
74
82
|
}
|
|
75
83
|
/** Method called when dragged item being dropped. */
|
|
76
84
|
dragDropItemDrop(event) {
|
|
77
85
|
/** After timeout to make click event handled first */
|
|
78
86
|
this._ngZone.runOutsideAngular(() => {
|
|
79
|
-
setTimeout(() =>
|
|
87
|
+
setTimeout(() => this._setDragInProgress(false));
|
|
80
88
|
});
|
|
81
89
|
this._onZoneFree(() => {
|
|
82
90
|
if (this.isTreeTable && event.draggedItemIndex !== event.replacedItemIndex) {
|
|
@@ -115,6 +123,11 @@ export class TableDraggableDirective extends TableDraggable {
|
|
|
115
123
|
this.rowsRearrange.emit(new TableRowsRearrangeEvent(row.value, dropRow.value, event.draggedItemIndex, event.replacedItemIndex, event.insertAt, event.mode, rows));
|
|
116
124
|
}
|
|
117
125
|
/** @hidden */
|
|
126
|
+
_setDragInProgress(dragging) {
|
|
127
|
+
this.dragDropInProgress = dragging;
|
|
128
|
+
dragging ? this._blockScrolling() : this._enableScrolling();
|
|
129
|
+
}
|
|
130
|
+
/** @hidden */
|
|
118
131
|
_isDroppedInsideItself(dropRow, dragRow) {
|
|
119
132
|
const dropRowParents = getRowParents(dropRow);
|
|
120
133
|
return !!dropRowParents.find((row) => row === dragRow);
|
|
@@ -207,6 +220,24 @@ export class TableDraggableDirective extends TableDraggable {
|
|
|
207
220
|
callback();
|
|
208
221
|
});
|
|
209
222
|
}
|
|
223
|
+
/** @hidden */
|
|
224
|
+
_blockScrolling() {
|
|
225
|
+
this._table._focusableGrid._preventKeydown = true;
|
|
226
|
+
this._table.tableContainer.nativeElement.addEventListener('DOMMouseScroll', preventDefault, false);
|
|
227
|
+
this._table.tableContainer.nativeElement.addEventListener('wheel', preventDefault, { passive: false });
|
|
228
|
+
this._table.tableContainer.nativeElement.addEventListener('mousewheel', preventDefault, { passive: false });
|
|
229
|
+
this._table.tableContainer.nativeElement.addEventListener('touchmove', preventDefault, { passive: false });
|
|
230
|
+
this._table.tableContainer.nativeElement.addEventListener('keydown', preventDefaultForScrollKeys, false);
|
|
231
|
+
}
|
|
232
|
+
/** @hidden */
|
|
233
|
+
_enableScrolling() {
|
|
234
|
+
this._table._focusableGrid._preventKeydown = false;
|
|
235
|
+
this._table.tableContainer.nativeElement.removeEventListener('DOMMouseScroll', preventDefault, false);
|
|
236
|
+
this._table.tableContainer.nativeElement.removeEventListener('wheel', preventDefault);
|
|
237
|
+
this._table.tableContainer.nativeElement.removeEventListener('mousewheel', preventDefault);
|
|
238
|
+
this._table.tableContainer.nativeElement.removeEventListener('touchmove', preventDefault);
|
|
239
|
+
this._table.tableContainer.nativeElement.removeEventListener('keydown', preventDefaultForScrollKeys, false);
|
|
240
|
+
}
|
|
210
241
|
}
|
|
211
242
|
TableDraggableDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: TableDraggableDirective, deps: null, target: i0.ɵɵFactoryTarget.Directive });
|
|
212
243
|
TableDraggableDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.9", type: TableDraggableDirective, isStandalone: true, selector: "fdp-table[isTreeTable], fdp-table[enableRowReordering]", inputs: { enableRowReordering: "enableRowReordering", isTreeTable: "isTreeTable", dropMode: "dropMode", dropPredicate: "dropPredicate", dragoverPredicate: "dragoverPredicate" }, outputs: { rowsRearrange: "rowsRearrange" }, host: { properties: { "class.fd-table--tree": "this.isTreeTable" } }, providers: [
|
|
@@ -244,4 +275,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
|
|
|
244
275
|
}], rowsRearrange: [{
|
|
245
276
|
type: Output
|
|
246
277
|
}] } });
|
|
247
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtZHJhZ2dhYmxlLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvcGxhdGZvcm0vc3JjL2xpYi90YWJsZS1oZWxwZXJzL2RpcmVjdGl2ZXMvdGFibGUtZHJhZ2dhYmxlLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSx1REFBdUQ7QUFDdkQsT0FBTyxFQUNILGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsWUFBWSxFQUNaLFVBQVUsRUFDVixXQUFXLEVBQ1gsTUFBTSxFQUNOLEtBQUssRUFDTCxNQUFNLEVBQ04sTUFBTSxFQUNULE1BQU0sZUFBZSxDQUFDO0FBUXZCLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN0QyxPQUFPLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDN0QsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUN4QyxPQUFPLEVBQUUsZUFBZSxFQUFFLGFBQWEsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUM1RCxPQUFPLEVBQVksdUJBQXVCLEVBQTBCLE1BQU0sV0FBVyxDQUFDO0FBQ3RGLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQzs7QUFjdEQsTUFBTSxPQUFPLHVCQUFpQyxTQUFRLGNBQWlCO0lBWHZFOztRQVlJLDRFQUE0RTtRQUU1RSx3QkFBbUIsR0FBRyxJQUFJLENBQUM7UUFFM0Isb0NBQW9DO1FBR3BDLGdCQUFXLEdBQUcsS0FBSyxDQUFDO1FBRXBCOztXQUVHO1FBRUgsYUFBUSxHQUFrQixNQUFNLENBQUM7UUFhakMseUhBQXlIO1FBRWhILGtCQUFhLEdBQUcsSUFBSSxZQUFZLEVBQThCLENBQUM7UUFVeEUsY0FBYztRQUNHLFlBQU8sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7UUFFMUMsY0FBYztRQUNHLFNBQUksR0FBRyxNQUFNLENBQUMsaUJB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QURoQixLQUFLO2dCQUtHLGFBQWE7c0JBRHJCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbWVtYmVyLW9yZGVyaW5nICovXG5pbXBvcnQge1xuICAgIENoYW5nZURldGVjdG9yUmVmLFxuICAgIERpcmVjdGl2ZSxcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgZm9yd2FyZFJlZixcbiAgICBIb3N0QmluZGluZyxcbiAgICBpbmplY3QsXG4gICAgSW5wdXQsXG4gICAgTmdab25lLFxuICAgIE91dHB1dFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gICAgRHJhZ292ZXJQcmVkaWNhdGUsXG4gICAgRHJvcFByZWRpY2F0ZSxcbiAgICBGZERuZERyb3BFdmVudE1vZGUsXG4gICAgRmREbmREcm9wVHlwZSxcbiAgICBGZERyb3BFdmVudFxufSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2Nkay91dGlscyc7XG5pbXBvcnQgeyB0YWtlIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgRkRQX1RBQkxFX0RSQUdHQUJMRV9ESVJFQ1RJVkUgfSBmcm9tICcuLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgVGFibGVSb3dUeXBlIH0gZnJvbSAnLi4vZW51bXMnO1xuaW1wb3J0IHsgZmluZFJvd0NoaWxkcmVuLCBnZXRSb3dQYXJlbnRzIH0gZnJvbSAnLi4vaGVscGVycyc7XG5pbXBvcnQgeyBUYWJsZVJvdywgVGFibGVSb3dzUmVhcnJhbmdlRXZlbnQsIFVwZGF0ZWREbmRSb3dzUG9zaXRpb24gfSBmcm9tICcuLi9tb2RlbHMnO1xuaW1wb3J0IHsgVGFibGVEcmFnZ2FibGUgfSBmcm9tICcuLi9tb2RlbHMvZGlyZWN0aXZlcyc7XG5pbXBvcnQgeyBUYWJsZSB9IGZyb20gJy4uL3RhYmxlJztcblxuQERpcmVjdGl2ZSh7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9kaXJlY3RpdmUtc2VsZWN0b3JcbiAgICBzZWxlY3RvcjogJ2ZkcC10YWJsZVtpc1RyZWVUYWJsZV0sIGZkcC10YWJsZVtlbmFibGVSb3dSZW9yZGVyaW5nXScsXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBwcm92aWRlcnM6IFtcbiAgICAgICAge1xuICAgICAgICAgICAgcHJvdmlkZTogRkRQX1RBQkxFX0RSQUdHQUJMRV9ESVJFQ1RJVkUsXG4gICAgICAgICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBUYWJsZURyYWdnYWJsZURpcmVjdGl2ZSlcbiAgICAgICAgfVxuICAgIF1cbn0pXG5leHBvcnQgY2xhc3MgVGFibGVEcmFnZ2FibGVEaXJlY3RpdmU8VCA9IGFueT4gZXh0ZW5kcyBUYWJsZURyYWdnYWJsZTxUPiB7XG4gICAgLyoqIFdoZXRoZXIgdG8gYWxsb3cgZm9yIHJvdyByZW9yZGVyaW5nIG9uIHRyZWUgdGFibGVzIHZpYSBkcmFnIGFuZCBkcm9wLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgZW5hYmxlUm93UmVvcmRlcmluZyA9IHRydWU7XG5cbiAgICAvKiogV2hldGhlciB0cmVlIG1vZGUgaXMgZW5hYmxlZC4gKi9cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLmZkLXRhYmxlLS10cmVlJylcbiAgICBASW5wdXQoKVxuICAgIGlzVHJlZVRhYmxlID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBSb3cgZHJvcCBtb2RlLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgZHJvcE1vZGU6IEZkRG5kRHJvcFR5cGUgPSAnYXV0byc7XG5cbiAgICAvKiogUHJlZGljYXRlIGZ1bmN0aW9uIHRoYXQgY2hlY2tzIHdoZXRoZXIgdGhlIGl0ZW0gY2FuIGJlIGRyb3BwZWQgb3ZlciBhbm90aGVyIGl0ZW0uICovXG4gICAgQElucHV0KClcbiAgICBkcm9wUHJlZGljYXRlOiBEcm9wUHJlZGljYXRlPFRhYmxlUm93PFQ+PjtcblxuICAgIC8qKlxuICAgICAqIFByZWRpY2F0ZSBmdW5jdGlvbiB0aGF0IGNoZWNrcyB3aGV0aGVyIHRoZSBpdGVtIGNhbiBiZSBkcmFnZ2VkIG92ZXIgYW5vdGhlciBpdGVtLlxuICAgICAqIElmIHRoZSBmdW5jdGlvbiByZXR1cm5zIGBmYWxzZWAsIGRyYWdnZWQgb3ZlciBpdGVtIHdpbGwgbm90IGJlIGhpZ2hsaWdodGVkLCBhbmQgZHJvcCBldmVudCB3aWxsIGJlIGNhbmNlbGVkLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgZHJhZ292ZXJQcmVkaWNhdGU6IERyYWdvdmVyUHJlZGljYXRlPFRhYmxlUm93PFQ+PjtcblxuICAgIC8qKiBFdmVudCBmaXJlZCB3aGVuIHRyZWUgcm93cyByZWFycmFuZ2VkIHRocm91Z2ggZHJhZyAmIGRyb3AuIENvbnNpZGVyIHRoYXQgcm93cyByZWFycmFuZ2VkIHdpdGggdGhlaXIgY2hpbGRyZW4gcm93cy4gKi9cbiAgICBAT3V0cHV0KClcbiAgICByZWFkb25seSByb3dzUmVhcnJhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxUYWJsZVJvd3NSZWFycmFuZ2VFdmVudDxUPj4oKTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgZ2V0IF9yb3dzRHJhZ2dhYmxlKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5pc1RyZWVUYWJsZSAmJiB0aGlzLmVuYWJsZVJvd1Jlb3JkZXJpbmc7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF90YWJsZTogVGFibGU7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX25nWm9uZSA9IGluamVjdChOZ1pvbmUpO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IF9jZHIgPSBpbmplY3QoQ2hhbmdlRGV0ZWN0b3JSZWYsIHtcbiAgICAgICAgaG9zdDogdHJ1ZVxuICAgIH0pO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBkcmFnRHJvcEluUHJvZ3Jlc3MgPSBmYWxzZTtcblxuICAgIC8qKiBTZXRzIHRhYmxlIHJlZmVyZW5jZS4gKi9cbiAgICBzZXRUYWJsZSh0YWJsZTogVGFibGUpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fdGFibGUgPSB0YWJsZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBJbml0aWF0ZXMgZHJhZyZkcm9wIHNlcXVlbmNlLlxuICAgICAqL1xuICAgIGRyYWdEcm9wU3RhcnQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZHJhZ0Ryb3BJblByb2dyZXNzID0gdHJ1ZTtcbiAgICB9XG5cbiAgICAvKiogTWV0aG9kIGNhbGxlZCB3aGVuIGRuZCBwZXJmb3JtZWQgd2l0aCB0aGUga2V5Ym9hcmQuICovXG4gICAgZHJhZ1Jvd0Zyb21LZXlib2FyZChkaXI6IHN0cmluZywgZXZlbnQ6IEV2ZW50LCBjdXJyZW50Um93SW5kZXg6IG51bWJlciwgbW9kZTogJ3NoaWZ0JyB8ICdncm91cCcpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLl9yb3dzRHJhZ2dhYmxlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgbGV0IHJlcGxhY2VkSW5kZXg7XG4gICAgICAgIGRpciA9PT0gJ3VwJyA/IChyZXBsYWNlZEluZGV4ID0gY3VycmVudFJvd0luZGV4IC0gMSkgOiAocmVwbGFjZWRJbmRleCA9IGN1cnJlbnRSb3dJbmRleCArIDEpO1xuXG4gICAgICAgIGlmICh0aGlzLl90YWJsZS5fdGFibGVSb3dzVmlzaWJsZVtyZXBsYWNlZEluZGV4XSkge1xuICAgICAgICAgICAgY29uc3QgZHJhZ0Ryb3BFdmVudDogRmREcm9wRXZlbnQ8VGFibGVSb3c8VD4+ID0ge1xuICAgICAgICAgICAgICAgIGl0ZW1zOiB0aGlzLl90YWJsZS5fdGFibGVSb3dzVmlzaWJsZSxcbiAgICAgICAgICAgICAgICBkcmFnZ2VkSXRlbUluZGV4OiBjdXJyZW50Um93SW5kZXgsXG4gICAgICAgICAgICAgICAgcmVwbGFjZWRJdGVtSW5kZXg6IHJlcGxhY2VkSW5kZXgsXG4gICAgICAgICAgICAgICAgaW5zZXJ0QXQ6IGRpciA9PT0gJ2Rvd24nID8gJ2FmdGVyJyA6ICdiZWZvcmUnLFxuICAgICAgICAgICAgICAgIG1vZGVcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICB0aGlzLmRyYWdEcm9wSXRlbURyb3AoZHJhZ0Ryb3BFdmVudCk7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAoZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50KS5mb2N1cygpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogTWV0aG9kIGNhbGxlZCB3aGVuIGRyYWcmZHJvcCBldmVudCBiZWluZyBjYW5jZWxsZWQuICovXG4gICAgZHJvcENhbmNlbGxlZCgpOiB2b2lkIHtcbiAgICAgICAgLyoqIEFmdGVyIHRpbWVvdXQgdG8gbWFrZSBjbGljayBldmVudCBoYW5kbGVkIGZpcnN0ICovXG4gICAgICAgIHRoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+ICh0aGlzLmRyYWdEcm9wSW5Qcm9ncmVzcyA9IGZhbHNlKSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKiBNZXRob2QgY2FsbGVkIHdoZW4gZHJhZ2dlZCBpdGVtIGJlaW5nIGRyb3BwZWQuICovXG4gICAgZHJhZ0Ryb3BJdGVtRHJvcChldmVudDogRmREcm9wRXZlbnQ8VGFibGVSb3c+KTogdm9pZCB7XG4gICAgICAgIC8qKiBBZnRlciB0aW1lb3V0IHRvIG1ha2UgY2xpY2sgZXZlbnQgaGFuZGxlZCBmaXJzdCAqL1xuICAgICAgICB0aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiAodGhpcy5kcmFnRHJvcEluUHJvZ3Jlc3MgPSBmYWxzZSkpO1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLl9vblpvbmVGcmVlKCgpID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLmlzVHJlZVRhYmxlICYmIGV2ZW50LmRyYWdnZWRJdGVtSW5kZXggIT09IGV2ZW50LnJlcGxhY2VkSXRlbUluZGV4KSB7XG4gICAgICAgICAgICAgICAgZXZlbnQuZHJhZ2dlZEl0ZW1JbmRleCA9IHRoaXMuX3RhYmxlLl90YWJsZVJvd3NJblZpZXdQb3J0UGxhY2Vob2xkZXJbZXZlbnQuZHJhZ2dlZEl0ZW1JbmRleF07XG4gICAgICAgICAgICAgICAgZXZlbnQucmVwbGFjZWRJdGVtSW5kZXggPSB0aGlzLl90YWJsZS5fdGFibGVSb3dzSW5WaWV3UG9ydFBsYWNlaG9sZGVyW2V2ZW50LnJlcGxhY2VkSXRlbUluZGV4XTtcbiAgICAgICAgICAgICAgICBjb25zdCBkcmFnUm93ID0gdGhpcy5fdGFibGUuX3RhYmxlUm93cy5maW5kKFxuICAgICAgICAgICAgICAgICAgICAocm93KSA9PiByb3cgPT09IHRoaXMuX3RhYmxlLl90YWJsZVJvd3NWaXNpYmxlW2V2ZW50LmRyYWdnZWRJdGVtSW5kZXhdXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBjb25zdCBkcm9wUm93ID0gdGhpcy5fdGFibGUuX3RhYmxlUm93cy5maW5kKFxuICAgICAgICAgICAgICAgICAgICAocm93KSA9PiByb3cgPT09IHRoaXMuX3RhYmxlLl90YWJsZVJvd3NWaXNpYmxlW2V2ZW50LnJlcGxhY2VkSXRlbUluZGV4XVxuICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgICBpZiAoIWRyYWdSb3cgfHwgIWRyb3BSb3cgfHwgdGhpcy5faXNEcm9wcGVkSW5zaWRlSXRzZWxmKGRyb3BSb3csIGRyYWdSb3cpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5fZHJhZ0Ryb3BVcGRhdGVEcmFnUGFyZW50Um93QXR0cmlidXRlcyhkcmFnUm93KTtcbiAgICAgICAgICAgICAgICB0aGlzLl9kcmFnRHJvcFJlYXJyYW5nZVRyZWVSb3dzKGRyYWdSb3csIGRyb3BSb3csIGV2ZW50KTtcbiAgICAgICAgICAgICAgICB0aGlzLl9kcmFnRHJvcFVwZGF0ZURyb3BSb3dBdHRyaWJ1dGVzKGRyYWdSb3csIGRyb3BSb3csIGV2ZW50Lm1vZGUpO1xuXG4gICAgICAgICAgICAgICAgaWYgKCFkcm9wUm93LmV4cGFuZGVkICYmIGV2ZW50Lm1vZGUgPT09ICdncm91cCcpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fdGFibGUudG9nZ2xlRXhwYW5kYWJsZVRhYmxlUm93KGRyb3BSb3csIHRydWUpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3RhYmxlLm9uVGFibGVSb3dzQ2hhbmdlZCgpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRoaXMuX2Nkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5fZW1pdFJvd3NSZWFycmFuZ2VFdmVudChkcmFnUm93LCBkcm9wUm93LCBldmVudCk7XG4gICAgICAgICAgICAgICAgdGhpcy5fdGFibGUucmVmcmVzaERuZExpc3QoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIENyZWF0ZSB0YWJsZSByb3dzIHJlYXJyYW5nZSBldmVudFxuICAgICAqL1xuICAgIF9lbWl0Um93c1JlYXJyYW5nZUV2ZW50KHJvdzogVGFibGVSb3csIGRyb3BSb3c6IFRhYmxlUm93LCBldmVudDogRmREcm9wRXZlbnQ8VGFibGVSb3c+KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHJvd3M6IGFueVtdID0gW107XG5cbiAgICAgICAgdGhpcy5fdGFibGUuX3RhYmxlUm93cy5mb3JFYWNoKChyLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgci5pbmRleCA9IGluZGV4O1xuICAgICAgICAgICAgcm93cy5wdXNoKHIudmFsdWUpO1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLnJvd3NSZWFycmFuZ2UuZW1pdChcbiAgICAgICAgICAgIG5ldyBUYWJsZVJvd3NSZWFycmFuZ2VFdmVudChcbiAgICAgICAgICAgICAgICByb3cudmFsdWUsXG4gICAgICAgICAgICAgICAgZHJvcFJvdy52YWx1ZSxcbiAgICAgICAgICAgICAgICBldmVudC5kcmFnZ2VkSXRlbUluZGV4LFxuICAgICAgICAgICAgICAgIGV2ZW50LnJlcGxhY2VkSXRlbUluZGV4LFxuICAgICAgICAgICAgICAgIGV2ZW50Lmluc2VydEF0LFxuICAgICAgICAgICAgICAgIGV2ZW50Lm1vZGUsXG4gICAgICAgICAgICAgICAgcm93c1xuICAgICAgICAgICAgKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfaXNEcm9wcGVkSW5zaWRlSXRzZWxmKGRyb3BSb3c6IFRhYmxlUm93LCBkcmFnUm93OiBUYWJsZVJvdyk6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCBkcm9wUm93UGFyZW50cyA9IGdldFJvd1BhcmVudHMoZHJvcFJvdyk7XG4gICAgICAgIHJldHVybiAhIWRyb3BSb3dQYXJlbnRzLmZpbmQoKHJvdykgPT4gcm93ID09PSBkcmFnUm93KTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2RyYWdEcm9wVXBkYXRlRHJhZ1BhcmVudFJvd0F0dHJpYnV0ZXMoZHJhZ1JvdzogVGFibGVSb3cpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgcGFyZW50Um93ID0gZHJhZ1Jvdy5wYXJlbnQ7XG5cbiAgICAgICAgaWYgKCFwYXJlbnRSb3cpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHBhcmVudFJvd0NoaWxkcmVuID0gZmluZFJvd0NoaWxkcmVuKHBhcmVudFJvdywgdGhpcy5fdGFibGUuX3RhYmxlUm93cyk7XG4gICAgICAgIGNvbnN0IGRyYWdSb3dDaGlsZHJlbiA9IGZpbmRSb3dDaGlsZHJlbihkcmFnUm93LCB0aGlzLl90YWJsZS5fdGFibGVSb3dzKTtcblxuICAgICAgICBpZiAocGFyZW50Um93Q2hpbGRyZW4ubGVuZ3RoIC0gKGRyYWdSb3dDaGlsZHJlbi5sZW5ndGggKyAxKSA9PT0gMCkge1xuICAgICAgICAgICAgcGFyZW50Um93LnNldFJvd1R5cGUoVGFibGVSb3dUeXBlLklURU0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9kcmFnRHJvcFVwZGF0ZURyb3BSb3dBdHRyaWJ1dGVzKGRyYWdSb3c6IFRhYmxlUm93LCBkcm9wUm93OiBUYWJsZVJvdywgbW9kZTogRmREbmREcm9wRXZlbnRNb2RlKTogdm9pZCB7XG4gICAgICAgIGlmIChkcmFnUm93LnBhcmVudCkge1xuICAgICAgICAgICAgLy8gUmVtb3ZlIGNoaWxkIHJvdyBmcm9tIHByZXZpb3VzIHBhcmVudCByb3cuXG4gICAgICAgICAgICBkcmFnUm93LnBhcmVudC5jaGlsZHJlbi5zcGxpY2UoZHJhZ1Jvdy5wYXJlbnQuY2hpbGRyZW4uaW5kZXhPZihkcmFnUm93KSwgMSk7XG4gICAgICAgIH1cbiAgICAgICAgZHJhZ1Jvdy5sZXZlbCA9IGRyb3BSb3cubGV2ZWwgKyAobW9kZSA9PT0gJ2dyb3VwJyA/IDEgOiAwKTtcblxuICAgICAgICBpZiAobW9kZSA9PT0gJ2dyb3VwJykge1xuICAgICAgICAgICAgZHJhZ1Jvdy5wYXJlbnQgPSBkcm9wUm93O1xuICAgICAgICAgICAgaWYgKCFkcm9wUm93LmlzVHJlZSkge1xuICAgICAgICAgICAgICAgIGRyb3BSb3cuc2V0Um93VHlwZShUYWJsZVJvd1R5cGUuVFJFRSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGRyb3BSb3cuY2hpbGRyZW4ucHVzaChkcmFnUm93KTtcbiAgICAgICAgICAgIGRyb3BSb3cubGFzdENoaWxkID0gZHJhZ1JvdztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGRyYWdSb3cucGFyZW50ID0gZHJvcFJvdy5wYXJlbnQ7XG4gICAgICAgICAgICBkcm9wUm93LnBhcmVudD8uY2hpbGRyZW4ucHVzaChkcmFnUm93KTtcbiAgICAgICAgICAgIGlmIChkcm9wUm93LnBhcmVudCkge1xuICAgICAgICAgICAgICAgIGRyb3BSb3cucGFyZW50Lmxhc3RDaGlsZCA9IGRyYWdSb3c7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBjaGlsZHJlbiA9IGZpbmRSb3dDaGlsZHJlbihkcmFnUm93LCB0aGlzLl90YWJsZS5fdGFibGVSb3dzKTtcbiAgICAgICAgY2hpbGRyZW4uZm9yRWFjaCgocm93KSA9PiB7XG4gICAgICAgICAgICByb3cubGV2ZWwgPSBnZXRSb3dQYXJlbnRzKHJvdykubGVuZ3RoO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2RyYWdEcm9wUmVhcnJhbmdlVHJlZVJvd3MoZHJhZ1JvdzogVGFibGVSb3csIGRyb3BSb3c6IFRhYmxlUm93LCBldmVudDogRmREcm9wRXZlbnQ8VGFibGVSb3c+KTogdm9pZCB7XG4gICAgICAgIGlmIChldmVudC5tb2RlID09PSAnc2hpZnQnKSB7XG4gICAgICAgICAgICB0aGlzLl9oYW5kbGVTaGlmdERyb3BBY3Rpb24oZHJhZ1JvdywgZHJvcFJvdywgZXZlbnQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5faGFuZGxlUmVwbGFjZURyb3BBY3Rpb24oZHJhZ1JvdywgZHJvcFJvdyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2dldE5ld0RyYWdEcm9wUm93c1Bvc2l0aW9uKGRyYWdSb3c6IFRhYmxlUm93LCBkcm9wUm93OiBUYWJsZVJvdyk6IFVwZGF0ZWREbmRSb3dzUG9zaXRpb24ge1xuICAgICAgICBjb25zdCBhbGxSb3dzID0gdGhpcy5fdGFibGUuX3RhYmxlUm93cztcblxuICAgICAgICBjb25zdCBkcmFnUm93SW5kZXggPSBhbGxSb3dzLmZpbmRJbmRleCgocm93KSA9PiByb3cgPT09IGRyYWdSb3cpO1xuICAgICAgICBjb25zdCBkcmFnUm93Q2hpbGRyZW4gPSBmaW5kUm93Q2hpbGRyZW4oZHJhZ1JvdywgdGhpcy5fdGFibGUuX3RhYmxlUm93cyk7XG5cbiAgICAgICAgY29uc3Qgcm93c1RvTW92ZSA9IGFsbFJvd3Muc3BsaWNlKGRyYWdSb3dJbmRleCwgZHJhZ1Jvd0NoaWxkcmVuLmxlbmd0aCArIDEpO1xuXG4gICAgICAgIGNvbnN0IGRyb3BSb3dJbmRleCA9IGFsbFJvd3MuZmluZEluZGV4KChyb3cpID0+IHJvdyA9PT0gZHJvcFJvdyk7XG4gICAgICAgIGNvbnN0IGRyb3BSb3dDaGlsZHJlbiA9IGZpbmRSb3dDaGlsZHJlbihkcm9wUm93LCB0aGlzLl90YWJsZS5fdGFibGVSb3dzKTtcblxuICAgICAgICBjb25zdCBkcm9wUm93SXRlbXNMZW5ndGggPSBkcm9wUm93Q2hpbGRyZW4ubGVuZ3RoICsgMTtcblxuICAgICAgICBjb25zdCByb3dzQWZ0ZXJEcm9wUm93ID0gYWxsUm93cy5zcGxpY2UoZHJvcFJvd0luZGV4ICsgZHJvcFJvd0l0ZW1zTGVuZ3RoLCBhbGxSb3dzLmxlbmd0aCArIGRyb3BSb3dJdGVtc0xlbmd0aCk7XG4gICAgICAgIGNvbnN0IGRyb3BSb3dJdGVtcyA9IGFsbFJvd3Muc3BsaWNlKGRyb3BSb3dJbmRleCwgZHJvcFJvd0l0ZW1zTGVuZ3RoKTtcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgYWxsUm93cyxcbiAgICAgICAgICAgIHJvd3NUb01vdmUsXG4gICAgICAgICAgICByb3dzQWZ0ZXJEcm9wUm93LFxuICAgICAgICAgICAgZHJvcFJvd0l0ZW1zXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9oYW5kbGVTaGlmdERyb3BBY3Rpb24oZHJhZ1JvdzogVGFibGVSb3csIGRyb3BSb3c6IFRhYmxlUm93LCBldmVudDogRmREcm9wRXZlbnQ8VGFibGVSb3c+KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHsgYWxsUm93cywgcm93c1RvTW92ZSwgcm93c0FmdGVyRHJvcFJvdywgZHJvcFJvd0l0ZW1zIH0gPSB0aGlzLl9nZXROZXdEcmFnRHJvcFJvd3NQb3NpdGlvbihcbiAgICAgICAgICAgIGRyYWdSb3csXG4gICAgICAgICAgICBkcm9wUm93XG4gICAgICAgICk7XG5cbiAgICAgICAgdGhpcy5fdGFibGUuX3RhYmxlUm93cyA9IFtcbiAgICAgICAgICAgIC4uLmFsbFJvd3MsXG4gICAgICAgICAgICAuLi4oZXZlbnQuaW5zZXJ0QXQgPT09ICdhZnRlcicgPyBkcm9wUm93SXRlbXMgOiBbXSksXG4gICAgICAgICAgICAuLi5yb3dzVG9Nb3ZlLFxuICAgICAgICAgICAgLi4uKGV2ZW50Lmluc2VydEF0ID09PSAnYWZ0ZXInID8gW10gOiBkcm9wUm93SXRlbXMpLFxuICAgICAgICAgICAgLi4ucm93c0FmdGVyRHJvcFJvd1xuICAgICAgICBdO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfaGFuZGxlUmVwbGFjZURyb3BBY3Rpb24oZHJhZ1JvdzogVGFibGVSb3csIGRyb3BSb3c6IFRhYmxlUm93KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHsgYWxsUm93cywgcm93c1RvTW92ZSwgcm93c0FmdGVyRHJvcFJvdywgZHJvcFJvd0l0ZW1zIH0gPSB0aGlzLl9nZXROZXdEcmFnRHJvcFJvd3NQb3NpdGlvbihcbiAgICAgICAgICAgIGRyYWdSb3csXG4gICAgICAgICAgICBkcm9wUm93XG4gICAgICAgICk7XG5cbiAgICAgICAgdGhpcy5fdGFibGUuX3RhYmxlUm93cyA9IFsuLi5hbGxSb3dzLCAuLi5kcm9wUm93SXRlbXMsIC4uLnJvd3NUb01vdmUsIC4uLnJvd3NBZnRlckRyb3BSb3ddO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfb25ab25lRnJlZShjYWxsYmFjazogKCkgPT4gdm9pZCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9uZ1pvbmUub25NaWNyb3Rhc2tFbXB0eS5waXBlKHRha2UoMSkpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICB9KTtcbiAgICB9XG59XG4iXX0=
|
|
278
|
+
function preventDefault(event) {
|
|
279
|
+
event.preventDefault();
|
|
280
|
+
}
|
|
281
|
+
function preventDefaultForScrollKeys(event) {
|
|
282
|
+
if (!event.altKey &&
|
|
283
|
+
KeyUtil.isKeyCode(event, [LEFT_ARROW, RIGHT_ARROW, UP_ARROW, DOWN_ARROW, SPACE, PAGE_DOWN, PAGE_UP, END, HOME])) {
|
|
284
|
+
preventDefault(event);
|
|
285
|
+
return false;
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtZHJhZ2dhYmxlLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvcGxhdGZvcm0vc3JjL2xpYi90YWJsZS1oZWxwZXJzL2RpcmVjdGl2ZXMvdGFibGUtZHJhZ2dhYmxlLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSx1REFBdUQ7QUFDdkQsT0FBTyxFQUNILGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsWUFBWSxFQUNaLFVBQVUsRUFDVixXQUFXLEVBQ1gsTUFBTSxFQUNOLEtBQUssRUFDTCxNQUFNLEVBRU4sTUFBTSxFQUNULE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFNSCxPQUFPLEVBQ1YsTUFBTSw0QkFBNEIsQ0FBQztBQUNwQyxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDdEMsT0FBTyxFQUFFLDZCQUE2QixFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQzdELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDeEMsT0FBTyxFQUFFLGVBQWUsRUFBRSxhQUFhLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDNUQsT0FBTyxFQUFZLHVCQUF1QixFQUEwQixNQUFNLFdBQVcsQ0FBQztBQUN0RixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFFdEQsT0FBTyxFQUNILFVBQVUsRUFDVixHQUFHLEVBQ0gsSUFBSSxFQUNKLFVBQVUsRUFDVixTQUFTLEVBQ1QsT0FBTyxFQUNQLFdBQVcsRUFDWCxLQUFLLEVBQ0wsUUFBUSxFQUNYLE1BQU0sdUJBQXVCLENBQUM7O0FBYS9CLE1BQU0sT0FBTyx1QkFBaUMsU0FBUSxjQUFpQjtJQVh2RTs7UUFZSSw0RUFBNEU7UUFFNUUsd0JBQW1CLEdBQUcsSUFBSSxDQUFDO1FBRTNCLG9DQUFvQztRQUdwQyxnQkFBVyxHQUFHLEtBQUssQ0FBQztRQUVwQjs7V0FFRztR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RUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUMsRUFDakg7UUFDRSxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDdEIsT0FBTyxLQUFLLENBQUM7S0FDaEI7QUFDTCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L21lbWJlci1vcmRlcmluZyAqL1xuaW1wb3J0IHtcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBEaXJlY3RpdmUsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIGZvcndhcmRSZWYsXG4gICAgSG9zdEJpbmRpbmcsXG4gICAgaW5qZWN0LFxuICAgIElucHV0LFxuICAgIE5nWm9uZSxcbiAgICBPbkRlc3Ryb3ksXG4gICAgT3V0cHV0XG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgICBEcmFnb3ZlclByZWRpY2F0ZSxcbiAgICBEcm9wUHJlZGljYXRlLFxuICAgIEZkRG5kRHJvcEV2ZW50TW9kZSxcbiAgICBGZERuZERyb3BUeXBlLFxuICAgIEZkRHJvcEV2ZW50LFxuICAgIEtleVV0aWxcbn0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jZGsvdXRpbHMnO1xuaW1wb3J0IHsgdGFrZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IEZEUF9UQUJMRV9EUkFHR0FCTEVfRElSRUNUSVZFIH0gZnJvbSAnLi4vY29uc3RhbnRzJztcbmltcG9ydCB7IFRhYmxlUm93VHlwZSB9IGZyb20gJy4uL2VudW1zJztcbmltcG9ydCB7IGZpbmRSb3dDaGlsZHJlbiwgZ2V0Um93UGFyZW50cyB9IGZyb20gJy4uL2hlbHBlcnMnO1xuaW1wb3J0IHsgVGFibGVSb3csIFRhYmxlUm93c1JlYXJyYW5nZUV2ZW50LCBVcGRhdGVkRG5kUm93c1Bvc2l0aW9uIH0gZnJvbSAnLi4vbW9kZWxzJztcbmltcG9ydCB7IFRhYmxlRHJhZ2dhYmxlIH0gZnJvbSAnLi4vbW9kZWxzL2RpcmVjdGl2ZXMnO1xuaW1wb3J0IHsgVGFibGUgfSBmcm9tICcuLi90YWJsZSc7XG5pbXBvcnQge1xuICAgIERPV05fQVJST1csXG4gICAgRU5ELFxuICAgIEhPTUUsXG4gICAgTEVGVF9BUlJPVyxcbiAgICBQQUdFX0RPV04sXG4gICAgUEFHRV9VUCxcbiAgICBSSUdIVF9BUlJPVyxcbiAgICBTUEFDRSxcbiAgICBVUF9BUlJPV1xufSBmcm9tICdAYW5ndWxhci9jZGsva2V5Y29kZXMnO1xuXG5ARGlyZWN0aXZlKHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L2RpcmVjdGl2ZS1zZWxlY3RvclxuICAgIHNlbGVjdG9yOiAnZmRwLXRhYmxlW2lzVHJlZVRhYmxlXSwgZmRwLXRhYmxlW2VuYWJsZVJvd1Jlb3JkZXJpbmddJyxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIHByb3ZpZGVyczogW1xuICAgICAgICB7XG4gICAgICAgICAgICBwcm92aWRlOiBGRFBfVEFCTEVfRFJBR0dBQkxFX0RJUkVDVElWRSxcbiAgICAgICAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IFRhYmxlRHJhZ2dhYmxlRGlyZWN0aXZlKVxuICAgICAgICB9XG4gICAgXVxufSlcbmV4cG9ydCBjbGFzcyBUYWJsZURyYWdnYWJsZURpcmVjdGl2ZTxUID0gYW55PiBleHRlbmRzIFRhYmxlRHJhZ2dhYmxlPFQ+IGltcGxlbWVudHMgT25EZXN0cm95IHtcbiAgICAvKiogV2hldGhlciB0byBhbGxvdyBmb3Igcm93IHJlb3JkZXJpbmcgb24gdHJlZSB0YWJsZXMgdmlhIGRyYWcgYW5kIGRyb3AuICovXG4gICAgQElucHV0KClcbiAgICBlbmFibGVSb3dSZW9yZGVyaW5nID0gdHJ1ZTtcblxuICAgIC8qKiBXaGV0aGVyIHRyZWUgbW9kZSBpcyBlbmFibGVkLiAqL1xuICAgIEBIb3N0QmluZGluZygnY2xhc3MuZmQtdGFibGUtLXRyZWUnKVxuICAgIEBJbnB1dCgpXG4gICAgaXNUcmVlVGFibGUgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIFJvdyBkcm9wIG1vZGUuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBkcm9wTW9kZTogRmREbmREcm9wVHlwZSA9ICdhdXRvJztcblxuICAgIC8qKiBQcmVkaWNhdGUgZnVuY3Rpb24gdGhhdCBjaGVja3Mgd2hldGhlciB0aGUgaXRlbSBjYW4gYmUgZHJvcHBlZCBvdmVyIGFub3RoZXIgaXRlbS4gKi9cbiAgICBASW5wdXQoKVxuICAgIGRyb3BQcmVkaWNhdGU6IERyb3BQcmVkaWNhdGU8VGFibGVSb3c8VD4+O1xuXG4gICAgLyoqXG4gICAgICogUHJlZGljYXRlIGZ1bmN0aW9uIHRoYXQgY2hlY2tzIHdoZXRoZXIgdGhlIGl0ZW0gY2FuIGJlIGRyYWdnZWQgb3ZlciBhbm90aGVyIGl0ZW0uXG4gICAgICogSWYgdGhlIGZ1bmN0aW9uIHJldHVybnMgYGZhbHNlYCwgZHJhZ2dlZCBvdmVyIGl0ZW0gd2lsbCBub3QgYmUgaGlnaGxpZ2h0ZWQsIGFuZCBkcm9wIGV2ZW50IHdpbGwgYmUgY2FuY2VsZWQuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBkcmFnb3ZlclByZWRpY2F0ZTogRHJhZ292ZXJQcmVkaWNhdGU8VGFibGVSb3c8VD4+O1xuXG4gICAgLyoqIEV2ZW50IGZpcmVkIHdoZW4gdHJlZSByb3dzIHJlYXJyYW5nZWQgdGhyb3VnaCBkcmFnICYgZHJvcC4gQ29uc2lkZXIgdGhhdCByb3dzIHJlYXJyYW5nZWQgd2l0aCB0aGVpciBjaGlsZHJlbiByb3dzLiAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHJlYWRvbmx5IHJvd3NSZWFycmFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPFRhYmxlUm93c1JlYXJyYW5nZUV2ZW50PFQ+PigpO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBnZXQgX3Jvd3NEcmFnZ2FibGUoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzVHJlZVRhYmxlICYmIHRoaXMuZW5hYmxlUm93UmVvcmRlcmluZztcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3RhYmxlOiBUYWJsZTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSByZWFkb25seSBfbmdab25lID0gaW5qZWN0KE5nWm9uZSk7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX2NkciA9IGluamVjdChDaGFuZ2VEZXRlY3RvclJlZiwge1xuICAgICAgICBob3N0OiB0cnVlXG4gICAgfSk7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGRyYWdEcm9wSW5Qcm9ncmVzcyA9IGZhbHNlO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fc2V0RHJhZ0luUHJvZ3Jlc3MoZmFsc2UpO1xuICAgIH1cblxuICAgIC8qKiBTZXRzIHRhYmxlIHJlZmVyZW5jZS4gKi9cbiAgICBzZXRUYWJsZSh0YWJsZTogVGFibGUpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fdGFibGUgPSB0YWJsZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBJbml0aWF0ZXMgZHJhZyZkcm9wIHNlcXVlbmNlLlxuICAgICAqL1xuICAgIGRyYWdEcm9wU3RhcnQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3NldERyYWdJblByb2dyZXNzKHRydWUpO1xuICAgIH1cblxuICAgIC8qKiBNZXRob2QgY2FsbGVkIHdoZW4gZG5kIHBlcmZvcm1lZCB3aXRoIHRoZSBrZXlib2FyZC4gKi9cbiAgICBkcmFnUm93RnJvbUtleWJvYXJkKGRpcjogc3RyaW5nLCBldmVudDogRXZlbnQsIGN1cnJlbnRSb3dJbmRleDogbnVtYmVyLCBtb2RlOiAnc2hpZnQnIHwgJ2dyb3VwJyk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuX3Jvd3NEcmFnZ2FibGUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBsZXQgcmVwbGFjZWRJbmRleDtcbiAgICAgICAgZGlyID09PSAndXAnID8gKHJlcGxhY2VkSW5kZXggPSBjdXJyZW50Um93SW5kZXggLSAxKSA6IChyZXBsYWNlZEluZGV4ID0gY3VycmVudFJvd0luZGV4ICsgMSk7XG5cbiAgICAgICAgaWYgKHRoaXMuX3RhYmxlLl90YWJsZVJvd3NWaXNpYmxlW3JlcGxhY2VkSW5kZXhdKSB7XG4gICAgICAgICAgICBjb25zdCBkcmFnRHJvcEV2ZW50OiBGZERyb3BFdmVudDxUYWJsZVJvdzxUPj4gPSB7XG4gICAgICAgICAgICAgICAgaXRlbXM6IHRoaXMuX3RhYmxlLl90YWJsZVJvd3NWaXNpYmxlLFxuICAgICAgICAgICAgICAgIGRyYWdnZWRJdGVtSW5kZXg6IGN1cnJlbnRSb3dJbmRleCxcbiAgICAgICAgICAgICAgICByZXBsYWNlZEl0ZW1JbmRleDogcmVwbGFjZWRJbmRleCxcbiAgICAgICAgICAgICAgICBpbnNlcnRBdDogZGlyID09PSAnZG93bicgPyAnYWZ0ZXInIDogJ2JlZm9yZScsXG4gICAgICAgICAgICAgICAgbW9kZVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHRoaXMuZHJhZ0Ryb3BJdGVtRHJvcChkcmFnRHJvcEV2ZW50KTtcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIChldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQpLmZvY3VzKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBNZXRob2QgY2FsbGVkIHdoZW4gZHJhZyZkcm9wIGV2ZW50IGJlaW5nIGNhbmNlbGxlZC4gKi9cbiAgICBkcm9wQ2FuY2VsbGVkKCk6IHZvaWQge1xuICAgICAgICAvKiogQWZ0ZXIgdGltZW91dCB0byBtYWtlIGNsaWNrIGV2ZW50IGhhbmRsZWQgZmlyc3QgKi9cbiAgICAgICAgdGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuX3NldERyYWdJblByb2dyZXNzKGZhbHNlKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKiogTWV0aG9kIGNhbGxlZCB3aGVuIGRyYWdnZWQgaXRlbSBiZWluZyBkcm9wcGVkLiAqL1xuICAgIGRyYWdEcm9wSXRlbURyb3AoZXZlbnQ6IEZkRHJvcEV2ZW50PFRhYmxlUm93Pik6IHZvaWQge1xuICAgICAgICAvKiogQWZ0ZXIgdGltZW91dCB0byBtYWtlIGNsaWNrIGV2ZW50IGhhbmRsZWQgZmlyc3QgKi9cbiAgICAgICAgdGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5fc2V0RHJhZ0luUHJvZ3Jlc3MoZmFsc2UpKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5fb25ab25lRnJlZSgoKSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5pc1RyZWVUYWJsZSAmJiBldmVudC5kcmFnZ2VkSXRlbUluZGV4ICE9PSBldmVudC5yZXBsYWNlZEl0ZW1JbmRleCkge1xuICAgICAgICAgICAgICAgIGV2ZW50LmRyYWdnZWRJdGVtSW5kZXggPSB0aGlzLl90YWJsZS5fdGFibGVSb3dzSW5WaWV3UG9ydFBsYWNlaG9sZGVyW2V2ZW50LmRyYWdnZWRJdGVtSW5kZXhdO1xuICAgICAgICAgICAgICAgIGV2ZW50LnJlcGxhY2VkSXRlbUluZGV4ID0gdGhpcy5fdGFibGUuX3RhYmxlUm93c0luVmlld1BvcnRQbGFjZWhvbGRlcltldmVudC5yZXBsYWNlZEl0ZW1JbmRleF07XG4gICAgICAgICAgICAgICAgY29uc3QgZHJhZ1JvdyA9IHRoaXMuX3RhYmxlLl90YWJsZVJvd3MuZmluZChcbiAgICAgICAgICAgICAgICAgICAgKHJvdykgPT4gcm93ID09PSB0aGlzLl90YWJsZS5fdGFibGVSb3dzVmlzaWJsZVtldmVudC5kcmFnZ2VkSXRlbUluZGV4XVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgY29uc3QgZHJvcFJvdyA9IHRoaXMuX3RhYmxlLl90YWJsZVJvd3MuZmluZChcbiAgICAgICAgICAgICAgICAgICAgKHJvdykgPT4gcm93ID09PSB0aGlzLl90YWJsZS5fdGFibGVSb3dzVmlzaWJsZVtldmVudC5yZXBsYWNlZEl0ZW1JbmRleF1cbiAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgICAgaWYgKCFkcmFnUm93IHx8ICFkcm9wUm93IHx8IHRoaXMuX2lzRHJvcHBlZEluc2lkZUl0c2VsZihkcm9wUm93LCBkcmFnUm93KSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuX2RyYWdEcm9wVXBkYXRlRHJhZ1BhcmVudFJvd0F0dHJpYnV0ZXMoZHJhZ1Jvdyk7XG4gICAgICAgICAgICAgICAgdGhpcy5fZHJhZ0Ryb3BSZWFycmFuZ2VUcmVlUm93cyhkcmFnUm93LCBkcm9wUm93LCBldmVudCk7XG4gICAgICAgICAgICAgICAgdGhpcy5fZHJhZ0Ryb3BVcGRhdGVEcm9wUm93QXR0cmlidXRlcyhkcmFnUm93LCBkcm9wUm93LCBldmVudC5tb2RlKTtcblxuICAgICAgICAgICAgICAgIGlmICghZHJvcFJvdy5leHBhbmRlZCAmJiBldmVudC5tb2RlID09PSAnZ3JvdXAnKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3RhYmxlLnRvZ2dsZUV4cGFuZGFibGVUYWJsZVJvdyhkcm9wUm93LCB0cnVlKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl90YWJsZS5vblRhYmxlUm93c0NoYW5nZWQoKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0aGlzLl9jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2VtaXRSb3dzUmVhcnJhbmdlRXZlbnQoZHJhZ1JvdywgZHJvcFJvdywgZXZlbnQpO1xuICAgICAgICAgICAgICAgIHRoaXMuX3RhYmxlLnJlZnJlc2hEbmRMaXN0KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBDcmVhdGUgdGFibGUgcm93cyByZWFycmFuZ2UgZXZlbnRcbiAgICAgKi9cbiAgICBfZW1pdFJvd3NSZWFycmFuZ2VFdmVudChyb3c6IFRhYmxlUm93LCBkcm9wUm93OiBUYWJsZVJvdywgZXZlbnQ6IEZkRHJvcEV2ZW50PFRhYmxlUm93Pik6IHZvaWQge1xuICAgICAgICBjb25zdCByb3dzOiBhbnlbXSA9IFtdO1xuXG4gICAgICAgIHRoaXMuX3RhYmxlLl90YWJsZVJvd3MuZm9yRWFjaCgociwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgIHIuaW5kZXggPSBpbmRleDtcbiAgICAgICAgICAgIHJvd3MucHVzaChyLnZhbHVlKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5yb3dzUmVhcnJhbmdlLmVtaXQoXG4gICAgICAgICAgICBuZXcgVGFibGVSb3dzUmVhcnJhbmdlRXZlbnQoXG4gICAgICAgICAgICAgICAgcm93LnZhbHVlLFxuICAgICAgICAgICAgICAgIGRyb3BSb3cudmFsdWUsXG4gICAgICAgICAgICAgICAgZXZlbnQuZHJhZ2dlZEl0ZW1JbmRleCxcbiAgICAgICAgICAgICAgICBldmVudC5yZXBsYWNlZEl0ZW1JbmRleCxcbiAgICAgICAgICAgICAgICBldmVudC5pbnNlcnRBdCxcbiAgICAgICAgICAgICAgICBldmVudC5tb2RlLFxuICAgICAgICAgICAgICAgIHJvd3NcbiAgICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3NldERyYWdJblByb2dyZXNzKGRyYWdnaW5nOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZHJhZ0Ryb3BJblByb2dyZXNzID0gZHJhZ2dpbmc7XG4gICAgICAgIGRyYWdnaW5nID8gdGhpcy5fYmxvY2tTY3JvbGxpbmcoKSA6IHRoaXMuX2VuYWJsZVNjcm9sbGluZygpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfaXNEcm9wcGVkSW5zaWRlSXRzZWxmKGRyb3BSb3c6IFRhYmxlUm93LCBkcmFnUm93OiBUYWJsZVJvdyk6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCBkcm9wUm93UGFyZW50cyA9IGdldFJvd1BhcmVudHMoZHJvcFJvdyk7XG4gICAgICAgIHJldHVybiAhIWRyb3BSb3dQYXJlbnRzLmZpbmQoKHJvdykgPT4gcm93ID09PSBkcmFnUm93KTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2RyYWdEcm9wVXBkYXRlRHJhZ1BhcmVudFJvd0F0dHJpYnV0ZXMoZHJhZ1JvdzogVGFibGVSb3cpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgcGFyZW50Um93ID0gZHJhZ1Jvdy5wYXJlbnQ7XG5cbiAgICAgICAgaWYgKCFwYXJlbnRSb3cpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHBhcmVudFJvd0NoaWxkcmVuID0gZmluZFJvd0NoaWxkcmVuKHBhcmVudFJvdywgdGhpcy5fdGFibGUuX3RhYmxlUm93cyk7XG4gICAgICAgIGNvbnN0IGRyYWdSb3dDaGlsZHJlbiA9IGZpbmRSb3dDaGlsZHJlbihkcmFnUm93LCB0aGlzLl90YWJsZS5fdGFibGVSb3dzKTtcblxuICAgICAgICBpZiAocGFyZW50Um93Q2hpbGRyZW4ubGVuZ3RoIC0gKGRyYWdSb3dDaGlsZHJlbi5sZW5ndGggKyAxKSA9PT0gMCkge1xuICAgICAgICAgICAgcGFyZW50Um93LnNldFJvd1R5cGUoVGFibGVSb3dUeXBlLklURU0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9kcmFnRHJvcFVwZGF0ZURyb3BSb3dBdHRyaWJ1dGVzKGRyYWdSb3c6IFRhYmxlUm93LCBkcm9wUm93OiBUYWJsZVJvdywgbW9kZTogRmREbmREcm9wRXZlbnRNb2RlKTogdm9pZCB7XG4gICAgICAgIGlmIChkcmFnUm93LnBhcmVudCkge1xuICAgICAgICAgICAgLy8gUmVtb3ZlIGNoaWxkIHJvdyBmcm9tIHByZXZpb3VzIHBhcmVudCByb3cuXG4gICAgICAgICAgICBkcmFnUm93LnBhcmVudC5jaGlsZHJlbi5zcGxpY2UoZHJhZ1Jvdy5wYXJlbnQuY2hpbGRyZW4uaW5kZXhPZihkcmFnUm93KSwgMSk7XG4gICAgICAgIH1cbiAgICAgICAgZHJhZ1Jvdy5sZXZlbCA9IGRyb3BSb3cubGV2ZWwgKyAobW9kZSA9PT0gJ2dyb3VwJyA/IDEgOiAwKTtcblxuICAgICAgICBpZiAobW9kZSA9PT0gJ2dyb3VwJykge1xuICAgICAgICAgICAgZHJhZ1Jvdy5wYXJlbnQgPSBkcm9wUm93O1xuICAgICAgICAgICAgaWYgKCFkcm9wUm93LmlzVHJlZSkge1xuICAgICAgICAgICAgICAgIGRyb3BSb3cuc2V0Um93VHlwZShUYWJsZVJvd1R5cGUuVFJFRSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGRyb3BSb3cuY2hpbGRyZW4ucHVzaChkcmFnUm93KTtcbiAgICAgICAgICAgIGRyb3BSb3cubGFzdENoaWxkID0gZHJhZ1JvdztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGRyYWdSb3cucGFyZW50ID0gZHJvcFJvdy5wYXJlbnQ7XG4gICAgICAgICAgICBkcm9wUm93LnBhcmVudD8uY2hpbGRyZW4ucHVzaChkcmFnUm93KTtcbiAgICAgICAgICAgIGlmIChkcm9wUm93LnBhcmVudCkge1xuICAgICAgICAgICAgICAgIGRyb3BSb3cucGFyZW50Lmxhc3RDaGlsZCA9IGRyYWdSb3c7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBjaGlsZHJlbiA9IGZpbmRSb3dDaGlsZHJlbihkcmFnUm93LCB0aGlzLl90YWJsZS5fdGFibGVSb3dzKTtcbiAgICAgICAgY2hpbGRyZW4uZm9yRWFjaCgocm93KSA9PiB7XG4gICAgICAgICAgICByb3cubGV2ZWwgPSBnZXRSb3dQYXJlbnRzKHJvdykubGVuZ3RoO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2RyYWdEcm9wUmVhcnJhbmdlVHJlZVJvd3MoZHJhZ1JvdzogVGFibGVSb3csIGRyb3BSb3c6IFRhYmxlUm93LCBldmVudDogRmREcm9wRXZlbnQ8VGFibGVSb3c+KTogdm9pZCB7XG4gICAgICAgIGlmIChldmVudC5tb2RlID09PSAnc2hpZnQnKSB7XG4gICAgICAgICAgICB0aGlzLl9oYW5kbGVTaGlmdERyb3BBY3Rpb24oZHJhZ1JvdywgZHJvcFJvdywgZXZlbnQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5faGFuZGxlUmVwbGFjZURyb3BBY3Rpb24oZHJhZ1JvdywgZHJvcFJvdyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2dldE5ld0RyYWdEcm9wUm93c1Bvc2l0aW9uKGRyYWdSb3c6IFRhYmxlUm93LCBkcm9wUm93OiBUYWJsZVJvdyk6IFVwZGF0ZWREbmRSb3dzUG9zaXRpb24ge1xuICAgICAgICBjb25zdCBhbGxSb3dzID0gdGhpcy5fdGFibGUuX3RhYmxlUm93cztcblxuICAgICAgICBjb25zdCBkcmFnUm93SW5kZXggPSBhbGxSb3dzLmZpbmRJbmRleCgocm93KSA9PiByb3cgPT09IGRyYWdSb3cpO1xuICAgICAgICBjb25zdCBkcmFnUm93Q2hpbGRyZW4gPSBmaW5kUm93Q2hpbGRyZW4oZHJhZ1JvdywgdGhpcy5fdGFibGUuX3RhYmxlUm93cyk7XG5cbiAgICAgICAgY29uc3Qgcm93c1RvTW92ZSA9IGFsbFJvd3Muc3BsaWNlKGRyYWdSb3dJbmRleCwgZHJhZ1Jvd0NoaWxkcmVuLmxlbmd0aCArIDEpO1xuXG4gICAgICAgIGNvbnN0IGRyb3BSb3dJbmRleCA9IGFsbFJvd3MuZmluZEluZGV4KChyb3cpID0+IHJvdyA9PT0gZHJvcFJvdyk7XG4gICAgICAgIGNvbnN0IGRyb3BSb3dDaGlsZHJlbiA9IGZpbmRSb3dDaGlsZHJlbihkcm9wUm93LCB0aGlzLl90YWJsZS5fdGFibGVSb3dzKTtcblxuICAgICAgICBjb25zdCBkcm9wUm93SXRlbXNMZW5ndGggPSBkcm9wUm93Q2hpbGRyZW4ubGVuZ3RoICsgMTtcblxuICAgICAgICBjb25zdCByb3dzQWZ0ZXJEcm9wUm93ID0gYWxsUm93cy5zcGxpY2UoZHJvcFJvd0luZGV4ICsgZHJvcFJvd0l0ZW1zTGVuZ3RoLCBhbGxSb3dzLmxlbmd0aCArIGRyb3BSb3dJdGVtc0xlbmd0aCk7XG4gICAgICAgIGNvbnN0IGRyb3BSb3dJdGVtcyA9IGFsbFJvd3Muc3BsaWNlKGRyb3BSb3dJbmRleCwgZHJvcFJvd0l0ZW1zTGVuZ3RoKTtcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgYWxsUm93cyxcbiAgICAgICAgICAgIHJvd3NUb01vdmUsXG4gICAgICAgICAgICByb3dzQWZ0ZXJEcm9wUm93LFxuICAgICAgICAgICAgZHJvcFJvd0l0ZW1zXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9oYW5kbGVTaGlmdERyb3BBY3Rpb24oZHJhZ1JvdzogVGFibGVSb3csIGRyb3BSb3c6IFRhYmxlUm93LCBldmVudDogRmREcm9wRXZlbnQ8VGFibGVSb3c+KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHsgYWxsUm93cywgcm93c1RvTW92ZSwgcm93c0FmdGVyRHJvcFJvdywgZHJvcFJvd0l0ZW1zIH0gPSB0aGlzLl9nZXROZXdEcmFnRHJvcFJvd3NQb3NpdGlvbihcbiAgICAgICAgICAgIGRyYWdSb3csXG4gICAgICAgICAgICBkcm9wUm93XG4gICAgICAgICk7XG5cbiAgICAgICAgdGhpcy5fdGFibGUuX3RhYmxlUm93cyA9IFtcbiAgICAgICAgICAgIC4uLmFsbFJvd3MsXG4gICAgICAgICAgICAuLi4oZXZlbnQuaW5zZXJ0QXQgPT09ICdhZnRlcicgPyBkcm9wUm93SXRlbXMgOiBbXSksXG4gICAgICAgICAgICAuLi5yb3dzVG9Nb3ZlLFxuICAgICAgICAgICAgLi4uKGV2ZW50Lmluc2VydEF0ID09PSAnYWZ0ZXInID8gW10gOiBkcm9wUm93SXRlbXMpLFxuICAgICAgICAgICAgLi4ucm93c0FmdGVyRHJvcFJvd1xuICAgICAgICBdO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfaGFuZGxlUmVwbGFjZURyb3BBY3Rpb24oZHJhZ1JvdzogVGFibGVSb3csIGRyb3BSb3c6IFRhYmxlUm93KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHsgYWxsUm93cywgcm93c1RvTW92ZSwgcm93c0FmdGVyRHJvcFJvdywgZHJvcFJvd0l0ZW1zIH0gPSB0aGlzLl9nZXROZXdEcmFnRHJvcFJvd3NQb3NpdGlvbihcbiAgICAgICAgICAgIGRyYWdSb3csXG4gICAgICAgICAgICBkcm9wUm93XG4gICAgICAgICk7XG5cbiAgICAgICAgdGhpcy5fdGFibGUuX3RhYmxlUm93cyA9IFsuLi5hbGxSb3dzLCAuLi5kcm9wUm93SXRlbXMsIC4uLnJvd3NUb01vdmUsIC4uLnJvd3NBZnRlckRyb3BSb3ddO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfb25ab25lRnJlZShjYWxsYmFjazogKCkgPT4gdm9pZCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9uZ1pvbmUub25NaWNyb3Rhc2tFbXB0eS5waXBlKHRha2UoMSkpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2Jsb2NrU2Nyb2xsaW5nKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl90YWJsZS5fZm9jdXNhYmxlR3JpZC5fcHJldmVudEtleWRvd24gPSB0cnVlO1xuICAgICAgICB0aGlzLl90YWJsZS50YWJsZUNvbnRhaW5lci5uYXRpdmVFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ0RPTU1vdXNlU2Nyb2xsJywgcHJldmVudERlZmF1bHQsIGZhbHNlKTtcbiAgICAgICAgdGhpcy5fdGFibGUudGFibGVDb250YWluZXIubmF0aXZlRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCd3aGVlbCcsIHByZXZlbnREZWZhdWx0LCB7IHBhc3NpdmU6IGZhbHNlIH0pO1xuICAgICAgICB0aGlzLl90YWJsZS50YWJsZUNvbnRhaW5lci5uYXRpdmVFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNld2hlZWwnLCBwcmV2ZW50RGVmYXVsdCwgeyBwYXNzaXZlOiBmYWxzZSB9KTtcbiAgICAgICAgdGhpcy5fdGFibGUudGFibGVDb250YWluZXIubmF0aXZlRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCd0b3VjaG1vdmUnLCBwcmV2ZW50RGVmYXVsdCwgeyBwYXNzaXZlOiBmYWxzZSB9KTtcbiAgICAgICAgdGhpcy5fdGFibGUudGFibGVDb250YWluZXIubmF0aXZlRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgcHJldmVudERlZmF1bHRGb3JTY3JvbGxLZXlzLCBmYWxzZSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9lbmFibGVTY3JvbGxpbmcoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3RhYmxlLl9mb2N1c2FibGVHcmlkLl9wcmV2ZW50S2V5ZG93biA9IGZhbHNlO1xuICAgICAgICB0aGlzLl90YWJsZS50YWJsZUNvbnRhaW5lci5uYXRpdmVFbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ0RPTU1vdXNlU2Nyb2xsJywgcHJldmVudERlZmF1bHQsIGZhbHNlKTtcbiAgICAgICAgdGhpcy5fdGFibGUudGFibGVDb250YWluZXIubmF0aXZlRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCd3aGVlbCcsIHByZXZlbnREZWZhdWx0KTtcbiAgICAgICAgdGhpcy5fdGFibGUudGFibGVDb250YWluZXIubmF0aXZlRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZXdoZWVsJywgcHJldmVudERlZmF1bHQpO1xuICAgICAgICB0aGlzLl90YWJsZS50YWJsZUNvbnRhaW5lci5uYXRpdmVFbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3RvdWNobW92ZScsIHByZXZlbnREZWZhdWx0KTtcbiAgICAgICAgdGhpcy5fdGFibGUudGFibGVDb250YWluZXIubmF0aXZlRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdrZXlkb3duJywgcHJldmVudERlZmF1bHRGb3JTY3JvbGxLZXlzLCBmYWxzZSk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBwcmV2ZW50RGVmYXVsdChldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xufVxuXG5mdW5jdGlvbiBwcmV2ZW50RGVmYXVsdEZvclNjcm9sbEtleXMoZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiBib29sZWFuIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAoXG4gICAgICAgICFldmVudC5hbHRLZXkgJiZcbiAgICAgICAgS2V5VXRpbC5pc0tleUNvZGUoZXZlbnQsIFtMRUZUX0FSUk9XLCBSSUdIVF9BUlJPVywgVVBfQVJST1csIERPV05fQVJST1csIFNQQUNFLCBQQUdFX0RPV04sIFBBR0VfVVAsIEVORCwgSE9NRV0pXG4gICAgKSB7XG4gICAgICAgIHByZXZlbnREZWZhdWx0KGV2ZW50KTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbn1cbiJdfQ==
|
|
@@ -3,7 +3,7 @@ import { DestroyedService, KeyUtil } from '@fundamental-ngx/cdk/utils';
|
|
|
3
3
|
import { ContentDensityMode } from '@fundamental-ngx/core/content-density';
|
|
4
4
|
import { BehaviorSubject, filter } from 'rxjs';
|
|
5
5
|
import { takeUntil } from 'rxjs/operators';
|
|
6
|
-
import { FDP_TABLE_VIRTUAL_SCROLL_DIRECTIVE, ROW_HEIGHT } from '../constants';
|
|
6
|
+
import { FDP_TABLE_DRAGGABLE_DIRECTIVE, FDP_TABLE_VIRTUAL_SCROLL_DIRECTIVE, ROW_HEIGHT } from '../constants';
|
|
7
7
|
import { TableVirtualScroll } from '../models';
|
|
8
8
|
import { TableScrollDispatcherService } from '../services/table-scroll-dispatcher.service';
|
|
9
9
|
import { DOWN_ARROW, UP_ARROW } from '@angular/cdk/keycodes';
|
|
@@ -33,6 +33,10 @@ export class TableVirtualScrollDirective extends TableVirtualScroll {
|
|
|
33
33
|
/** @hidden */
|
|
34
34
|
this._tableScrollDispatcher = inject(TableScrollDispatcherService);
|
|
35
35
|
/** @hidden */
|
|
36
|
+
this._dndTableDirective = inject(FDP_TABLE_DRAGGABLE_DIRECTIVE, {
|
|
37
|
+
optional: true
|
|
38
|
+
});
|
|
39
|
+
/** @hidden */
|
|
36
40
|
this._tableRowService = inject(TableRowService);
|
|
37
41
|
/** @hidden */
|
|
38
42
|
this._destroy$ = inject(DestroyedService);
|
|
@@ -165,7 +169,7 @@ export class TableVirtualScrollDirective extends TableVirtualScroll {
|
|
|
165
169
|
this._focusedCell = event;
|
|
166
170
|
});
|
|
167
171
|
}
|
|
168
|
-
if (!this.virtualScroll || !this.bodyHeight) {
|
|
172
|
+
if (!this.virtualScroll || !this.bodyHeight || this._dndTableDirective?.dragDropInProgress) {
|
|
169
173
|
return;
|
|
170
174
|
}
|
|
171
175
|
let startNodeIndex = 0;
|
|
@@ -334,4 +338,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
|
|
|
334
338
|
type: HostListener,
|
|
335
339
|
args: ['keydown', ['$event']]
|
|
336
340
|
}] } });
|
|
337
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtdmlydHVhbC1zY3JvbGwuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9wbGF0Zm9ybS9zcmMvbGliL3RhYmxlLWhlbHBlcnMvZGlyZWN0aXZlcy90YWJsZS12aXJ0dWFsLXNjcm9sbC5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBK0MsTUFBTSxlQUFlLENBQUM7QUFDcEgsT0FBTyxFQUFFLGdCQUFnQixFQUF5QixPQUFPLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUM5RixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUMzRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sRUFBZ0IsTUFBTSxNQUFNLENBQUM7QUFDN0QsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxrQ0FBa0MsRUFBRSxVQUFVLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDOUUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQy9DLE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLDZDQUE2QyxDQUFDO0FBRTNGLE9BQU8sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDN0QsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDOztBQWM5RCxNQUFNLE9BQU8sMkJBQTRCLFNBQVEsa0JBQWtCO0lBWm5FOztRQWFJOztXQUVHO1FBRUgsa0JBQWEsR0FBRyxLQUFLLENBQUM7UUFtQnRCLHdFQUF3RTtRQUV4RSxnQkFBVyxHQUFHLEVBQUUsQ0FBQztRQU1qQjs7O1dBR0c7UUFFSCxjQUFT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T0FBTyxFQUFFLGtDQUFrQzs0QkFDM0MsV0FBVyw2QkFBNkI7eUJBQzNDO3FCQUNKO2lCQUNKOzhCQU1HLGFBQWE7c0JBRFosS0FBSztnQkFTRixlQUFlO3NCQURsQixLQUFLO2dCQWNOLFdBQVc7c0JBRFYsS0FBSztnQkFLTixVQUFVO3NCQURULEtBQUs7Z0JBUU4sU0FBUztzQkFEUixLQUFLO2dCQStDTixlQUFlO3NCQURkLFlBQVk7dUJBQUMsU0FBUyxFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlyZWN0aXZlLCBIb3N0TGlzdGVuZXIsIGluamVjdCwgSW5wdXQsIE9uSW5pdCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3ksIFNpbXBsZUNoYW5nZXMgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IERlc3Ryb3llZFNlcnZpY2UsIEZvY3VzYWJsZUl0ZW1Qb3NpdGlvbiwgS2V5VXRpbCB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY2RrL3V0aWxzJztcbmltcG9ydCB7IENvbnRlbnREZW5zaXR5TW9kZSB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS9jb250ZW50LWRlbnNpdHknO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBmaWx0ZXIsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgRkRQX1RBQkxFX1ZJUlRVQUxfU0NST0xMX0RJUkVDVElWRSwgUk9XX0hFSUdIVCB9IGZyb20gJy4uL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBUYWJsZVZpcnR1YWxTY3JvbGwgfSBmcm9tICcuLi9tb2RlbHMnO1xuaW1wb3J0IHsgVGFibGVTY3JvbGxEaXNwYXRjaGVyU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL3RhYmxlLXNjcm9sbC1kaXNwYXRjaGVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgVGFibGUgfSBmcm9tICcuLi90YWJsZSc7XG5pbXBvcnQgeyBET1dOX0FSUk9XLCBVUF9BUlJPVyB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9rZXljb2Rlcyc7XG5pbXBvcnQgeyBUYWJsZVJvd1NlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy90YWJsZS1yb3cuc2VydmljZSc7XG5pbXBvcnQgeyBjb2VyY2VCb29sZWFuUHJvcGVydHkgfSBmcm9tICdAYW5ndWxhci9jZGsvY29lcmNpb24nO1xuXG5ARGlyZWN0aXZlKHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L2RpcmVjdGl2ZS1zZWxlY3RvclxuICAgIHNlbGVjdG9yOiAnZmRwLXRhYmxlW3ZpcnR1YWxTY3JvbGxdJyxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIHByb3ZpZGVyczogW1xuICAgICAgICBEZXN0cm95ZWRTZXJ2aWNlLFxuICAgICAgICB7XG4gICAgICAgICAgICBwcm92aWRlOiBGRFBfVEFCTEVfVklSVFVBTF9TQ1JPTExfRElSRUNUSVZFLFxuICAgICAgICAgICAgdXNlRXhpc3Rpbmc6IFRhYmxlVmlydHVhbFNjcm9sbERpcmVjdGl2ZVxuICAgICAgICB9XG4gICAgXVxufSlcbmV4cG9ydCBjbGFzcyBUYWJsZVZpcnR1YWxTY3JvbGxEaXJlY3RpdmUgZXh0ZW5kcyBUYWJsZVZpcnR1YWxTY3JvbGwgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcywgT25EZXN0cm95IHtcbiAgICAvKiogV2hldGhlciB0byBzaG93IG9ubHkgdmlzaWJsZSByb3dzIGluIG1hdHRlciBvZiBwZXJmb3JtYW5jZVxuICAgICAqIGZhbHNlIGJ5IGRlZmF1bHQsIHdoZW4gdHJ1ZSBzZXR0aW5nIGJvZHlIZWlnaHQgYW5kIHJvd0hlaWdodCBpcyByZXF1aXJlZC5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHZpcnR1YWxTY3JvbGwgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdG8gc2Nyb2xsIHdob2xlIHJvd3MgcmF0aGVyIHRoYW4gcGl4ZWwgYnkgcGl4ZWwgd2hlbiB0aGUgdXNlciBwZXJmb3JtcyBhIHNjcm9sbC5cbiAgICAgKiBUaGlzIGdpdmVzIGdyZWF0ZXIgcGVyZm9ybWFuY2UgaW1wcm92ZW1lbnRzIGJ1dCBhbHNvIGxlbmRzIHRvIHNvbWUgcG90ZW50aWFsbHkgdW5kZXNpcmFibGUgVVggY2hhbmdlcy5cbiAgICAgKiBBIFwicm93SGVpZ2h0XCIgbXVzdCBiZSBwcm92aWRlZCB3aGVuIHVzaW5nIHRoaXMgZmVhdHVyZS5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCBzY3JvbGxXaG9sZVJvd3ModmFsdWU6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5fc2Nyb2xsV2hvbGVSb3dzID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHZhbHVlKTtcbiAgICAgICAgaWYgKHRoaXMuX3Njcm9sbFdob2xlUm93cykge1xuICAgICAgICAgICAgdGhpcy52aXJ0dWFsU2Nyb2xsID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldCBzY3JvbGxXaG9sZVJvd3MoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zY3JvbGxXaG9sZVJvd3M7XG4gICAgfVxuXG4gICAgLyoqIENhY2hlIHNpemUgZm9yIHRoZSB2aXJ0dWFsU2Nyb2xsLCBkZWZhdWx0IGlzIDQwIGluIGVhY2ggZGlyZWN0aW9uICovXG4gICAgQElucHV0KClcbiAgICByZW5kZXJBaGVhZCA9IDQwO1xuXG4gICAgLyoqIEJvZHkgaGVpZ2h0LiAqL1xuICAgIEBJbnB1dCgpXG4gICAgYm9keUhlaWdodDogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogSGVpZ2h0IG9mIHRoZSByb3csIHJlcXVpcmVkIGZvciB0aGUgdmlydHVhbFNjcm9sbCxcbiAgICAgKiBkZWZhdWx0IGlzIDQ0cHggaW4gY296eSwgMzJweCBpbiBjb21wYWN0IGFuZCAyNHB4IGluIGNvbmRlbnNlZCAoc2V0IGF1dG9tYXRpY2FsbHkpXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICByb3dIZWlnaHQgPSBST1dfSEVJR0hULmdldChDb250ZW50RGVuc2l0eU1vZGUuQ09aWSkhO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICB2aXJ0dWFsU2Nyb2xsVG90YWxIZWlnaHQgPSAwO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICB2aXJ0dWFsU2Nyb2xsVHJhbnNmb3JtJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPigwKTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfdGFibGU6IFRhYmxlO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF92aXJ0dWFsU2Nyb2xsQ2FjaGUgPSB7IHN0YXJ0Tm9kZUluZGV4OiAtMSwgdmlzaWJsZU5vZGVDb3VudDogLTEsIHRvdGFsTm9kZUNvdW50OiAtMSB9O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IF90YWJsZVNjcm9sbERpc3BhdGNoZXIgPSBpbmplY3QoVGFibGVTY3JvbGxEaXNwYXRjaGVyU2VydmljZSk7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX3RhYmxlUm93U2VydmljZSA9IGluamVjdChUYWJsZVJvd1NlcnZpY2UpO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IF9kZXN0cm95JCA9IGluamVjdChEZXN0cm95ZWRTZXJ2aWNlKTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfd2hlZWxUaW1lb3V0OiBhbnk7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3Njcm9sbE1vY2tUaW1lb3V0OiBhbnk7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2xhc3RNb2NrU2Nyb2xsUG9zaXRpb24gPSAwO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9mb2N1c2FibGVHcmlkU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2ZvY3VzZWRDZWxsOiBGb2N1c2FibGVJdGVtUG9zaXRpb247XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3ByZXZpb3VzU3RhcnROb2RlSW5kZXg6IG51bWJlciB8IG51bGwgPSBudWxsO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9zY3JvbGxXaG9sZVJvd3MgPSBmYWxzZTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQEhvc3RMaXN0ZW5lcigna2V5ZG93bicsIFsnJGV2ZW50J10pXG4gICAgX2tleWRvd25IYW5kbGVyKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLnNjcm9sbFdob2xlUm93cykge1xuICAgICAgICAgICAgaWYgKHRoaXMuX2ZvY3VzZWRDZWxsPy5yb3dJbmRleCA9PT0gMCAmJiBLZXlVdGlsLmlzS2V5Q29kZShldmVudCwgVVBfQVJST1cpKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX3RhYmxlLnRhYmxlQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvckFsbCgndHInKVsxXS5hcmlhUm93SW5kZXggIT09ICcwJykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjZWxsVG9Gb2N1cyA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbEluZGV4OiB0aGlzLl9mb2N1c2VkQ2VsbC5jb2xJbmRleCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJvd0luZGV4OiAxXG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3RhYmxlLl9mb2N1c2FibGVHcmlkLmZvY3VzQ2VsbChjZWxsVG9Gb2N1cyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuX3Njcm9sbFJvdygtMSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgICAgIHRoaXMuX2ZvY3VzZWRDZWxsPy5yb3dJbmRleCA9PT0gdGhpcy5fZ2V0TnVtYmVyT2ZSb3dzVG9EaXNwbGF5KCkgJiZcbiAgICAgICAgICAgICAgICBLZXlVdGlsLmlzS2V5Q29kZShldmVudCwgRE9XTl9BUlJPVylcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHRoaXMuX3Njcm9sbFJvdygxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLnNjcm9sbFdob2xlUm93cyAmJiAhdGhpcy52aXJ0dWFsU2Nyb2xsKSB7XG4gICAgICAgICAgICB0aGlzLnZpcnR1YWxTY3JvbGwgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5fdGFibGUudGFibGVTY3JvbGxhYmxlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMudmlydHVhbFNjcm9sbCAmJiAoY2hhbmdlc1sncm93SGVpZ2h0J10gfHwgY2hhbmdlc1sndmlydHVhbFNjcm9sbCddIHx8IGNoYW5nZXNbJ3JlbmRlckFoZWFkJ10pKSB7XG4gICAgICAgICAgICB0aGlzLmNhbGN1bGF0ZVZpcnR1YWxTY3JvbGxSb3dzKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9mb2N1c2FibGVHcmlkU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICAgICAgICBpZiAodGhpcy5zY3JvbGxXaG9sZVJvd3MpIHtcbiAgICAgICAgICAgIHRoaXMuX3RhYmxlLnRhYmxlQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignd2hlZWwnLCB0aGlzLl93aGVlbFNjcm9sbExpc3RlbmVyRnVuY3Rpb24sIHtcbiAgICAgICAgICAgICAgICBwYXNzaXZlOiBmYWxzZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLl90YWJsZS50YWJsZVNjcm9sbE1vY2tDb250YWluZXIubmF0aXZlRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFxuICAgICAgICAgICAgICAgICdzY3JvbGwnLFxuICAgICAgICAgICAgICAgIHRoaXMuX21vY2tTY3JvbGxiYXJMaXN0ZW5lckZ1bmN0aW9uLFxuICAgICAgICAgICAgICAgIHsgcGFzc2l2ZTogZmFsc2UgfVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBTZXRzIHRhYmxlIHJlZmVyZW5jZS4gKi9cbiAgICBzZXRUYWJsZSh0YWJsZTogVGFibGUpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fdGFibGUgPSB0YWJsZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIGZ1bmN0aW9uIGRldGVybWluZXMgaG93IG1hbnkgcm93cyBjYW4gYmUgZGlzcGxheWVkIGluIHRoZSB0YWJsZSwgYW5kIHNldHMgdGhlIHJvd3MgaW4gdGhlIHRhYmxlIGJhc2VkIG9uIHRoZVxuICAgICAqIHN0YXJ0IG5vZGUgaW5kZXgsIHdoaWNoIG1heSBjb21lIGZyb20gdGhlIHRhYmxlIHN0YXRlXG4gICAgICovXG4gICAgY2FsY3VsYXRlVmlydHVhbFNjcm9sbFJvd3MoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLnNjcm9sbFdob2xlUm93cykge1xuICAgICAgICAgICAgaWYgKCF0aGlzLl9mb2N1c2FibGVHcmlkU3Vic2NyaXB0aW9uKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZm9jdXNhYmxlR3JpZFN1YnNjcmlwdGlvbiA9IHRoaXMuX3RhYmxlLl9mb2N1c2FibGVHcmlkLml0ZW1Gb2N1c2VkLnN1YnNjcmliZSgoZXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZm9jdXNlZENlbGwgPSBldmVudDtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghdGhpcy52aXJ0dWFsU2Nyb2xsIHx8ICF0aGlzLmJvZHlIZWlnaHQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGxldCBzdGFydE5vZGVJbmRleCA9IDA7XG4gICAgICAgICAgICBjb25zdCBzY3JvbGxUb3AgPSB0aGlzLl90YWJsZS5nZXRUYWJsZVN0YXRlKCkuc2Nyb2xsVG9wUG9zaXRpb247XG4gICAgICAgICAgICBpZiAoc2Nyb2xsVG9wICE9PSAwKSB7XG4gICAgICAgICAgICAgICAgc3RhcnROb2RlSW5kZXggPSBNYXRoLmZsb29yKHNjcm9sbFRvcCAvIHRoaXMucm93SGVpZ2h0KTtcbiAgICAgICAgICAgICAgICBpZiAoc3RhcnROb2RlSW5kZXggPiB0aGlzLl90YWJsZS5fdGFibGVSb3dzVmlzaWJsZS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgc3RhcnROb2RlSW5kZXggPSAwO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgdG90YWxOb2RlQ291bnQgPSB0aGlzLl90YWJsZS5fdGFibGVSb3dzVmlzaWJsZS5sZW5ndGg7XG4gICAgICAgICAgICBsZXQgdmlzaWJsZU5vZGVDb3VudCA9IHRoaXMuX2dldE51bWJlck9mUm93c1RvRGlzcGxheSgpO1xuICAgICAgICAgICAgdmlzaWJsZU5vZGVDb3VudCA9IE1hdGgubWluKHRvdGFsTm9kZUNvdW50IC0gc3RhcnROb2RlSW5kZXgsIHZpc2libGVOb2RlQ291bnQpO1xuICAgICAgICAgICAgdGhpcy52aXJ0dWFsU2Nyb2xsVG90YWxIZWlnaHQgPSB0b3RhbE5vZGVDb3VudCAqIHRoaXMucm93SGVpZ2h0IC0gdmlzaWJsZU5vZGVDb3VudCAqIHRoaXMucm93SGVpZ2h0O1xuXG4gICAgICAgICAgICB0aGlzLl9zZXRSb3dzKHN0YXJ0Tm9kZUluZGV4KTtcbiAgICAgICAgICAgIGNvbnN0IHNjcm9sbE1vY2tDb250YWluZXIgPSB0aGlzLl90YWJsZS50YWJsZVNjcm9sbE1vY2tDb250YWluZXIubmF0aXZlRWxlbWVudDtcbiAgICAgICAgICAgIHNjcm9sbE1vY2tDb250YWluZXIuc3R5bGUubWF4SGVpZ2h0ID0gdGhpcy5ib2R5SGVpZ2h0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKCF0aGlzLnZpcnR1YWxTY3JvbGwgfHwgIXRoaXMuYm9keUhlaWdodCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3Qgcm93SGVpZ2h0ID0gdGhpcy5yb3dIZWlnaHQgKyAxO1xuXG4gICAgICAgICAgICBjb25zdCByb3dzVmlzaWJsZSA9IHRoaXMuX3RhYmxlLl90YWJsZVJvd3NWaXNpYmxlO1xuICAgICAgICAgICAgY29uc3Qgcm93c0luVmlld1BvcnQgPSB0aGlzLl90YWJsZS5nZXRSb3dzSW5WaWV3cG9ydCgpO1xuICAgICAgICAgICAgY29uc3QgdG90YWxOb2RlQ291bnQgPSByb3dzVmlzaWJsZS5sZW5ndGg7XG4gICAgICAgICAgICBjb25zdCBzY3JvbGxUb3AgPSB0aGlzLl90YWJsZS50YWJsZVNjcm9sbGFibGUuZ2V0U2Nyb2xsVG9wKCk7XG5cbiAgICAgICAgICAgIGxldCBzdGFydE5vZGVJbmRleCA9IE1hdGguZmxvb3Ioc2Nyb2xsVG9wIC8gcm93SGVpZ2h0KSAtIHRoaXMucmVuZGVyQWhlYWQ7XG4gICAgICAgICAgICBzdGFydE5vZGVJbmRleCA9IE1hdGgubWF4KDAsIHN0YXJ0Tm9kZUluZGV4KTtcblxuICAgICAgICAgICAgbGV0IHZpc2libGVOb2RlQ291bnQgPVxuICAgICAgICAgICAgICAgIE1hdGguY2VpbCh0aGlzLl90YWJsZS50YWJsZUNvbnRhaW5lci5uYXRpdmVFbGVtZW50LmNsaWVudEhlaWdodCAvIHJvd0hlaWdodCkgKyAyICogdGhpcy5yZW5kZXJBaGVhZDtcbiAgICAgICAgICAgIHZpc2libGVOb2RlQ291bnQgPSBNYXRoLm1pbih0b3RhbE5vZGVDb3VudCAtIHN0YXJ0Tm9kZUluZGV4LCB2aXNpYmxlTm9kZUNvdW50KTtcblxuICAgICAgICAgICAgdGhpcy52aXJ0dWFsU2Nyb2xsVHJhbnNmb3JtJC5uZXh0KHN0YXJ0Tm9kZUluZGV4ICogcm93SGVpZ2h0KTtcblxuICAgICAgICAgICAgLy8gU2ltcGxlIGNhY2hpbmcgdG8gYXZvaWQgdW5uZWNlc3NhcnkgcmUtcmVuZGVyaW5nc1xuICAgICAgICAgICAgY29uc3QgaXNDYWNoZWQgPVxuICAgICAgICAgICAgICAgIHN0YXJ0Tm9kZUluZGV4ID09PSB0aGlzLl92aXJ0dWFsU2Nyb2xsQ2FjaGUuc3RhcnROb2RlSW5kZXggJiZcbiAgICAgICAgICAgICAgICB2aXNpYmxlTm9kZUNvdW50ID09PSB0aGlzLl92aXJ0dWFsU2Nyb2xsQ2FjaGUudmlzaWJsZU5vZGVDb3VudCAmJlxuICAgICAgICAgICAgICAgIHRvdGFsTm9kZUNvdW50ID09PSB0aGlzLl92aXJ0dWFsU2Nyb2xsQ2FjaGUudG90YWxOb2RlQ291bnQgJiZcbiAgICAgICAgICAgICAgICAvLyBPbiByb3dzIGNoYW5nZSwgZXZlbiBpZiB0aGUgdG90YWwgbnVtYmVyIG9mIHJvd3MgaXMgdGhlIHNhbWUsIHRoZSByb3cgb2JqZWN0IHdpbGwgYmUgZGlmZmVyZW50XG4gICAgICAgICAgICAgICAgc3RhcnROb2RlSW5kZXggPT09IHJvd3NJblZpZXdQb3J0WzBdO1xuXG4gICAgICAgICAgICBpZiAoaXNDYWNoZWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuX3ZpcnR1YWxTY3JvbGxDYWNoZSA9IHsgc3RhcnROb2RlSW5kZXgsIHZpc2libGVOb2RlQ291bnQsIHRvdGFsTm9kZUNvdW50IH07XG4gICAgICAgICAgICB0aGlzLnZpcnR1YWxTY3JvbGxUb3RhbEhlaWdodCA9IHRvdGFsTm9kZUNvdW50ICogcm93SGVpZ2h0IC0gdmlzaWJsZU5vZGVDb3VudCAqIHJvd0hlaWdodDtcbiAgICAgICAgICAgIHRoaXMuX3RhYmxlLnNldFJvd3NJblZpZXdwb3J0KFxuICAgICAgICAgICAgICAgIHN0YXJ0Tm9kZUluZGV4LFxuICAgICAgICAgICAgICAgIHJvd3NWaXNpYmxlLnNsaWNlKHN0YXJ0Tm9kZUluZGV4LCBzdGFydE5vZGVJbmRleCArIHZpc2libGVOb2RlQ291bnQpLmxlbmd0aFxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBJbml0aWFsaXNlcyBzY3JvbGwgbGlzdGVuZXJzLlxuICAgICAqL1xuICAgIGxpc3Rlbk9uVmlydHVhbFNjcm9sbCgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuc2Nyb2xsV2hvbGVSb3dzKSB7XG4gICAgICAgICAgICB0aGlzLl90YWJsZS50YWJsZUNvbnRhaW5lci5uYXRpdmVFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3doZWVsJywgdGhpcy5fd2hlZWxTY3JvbGxMaXN0ZW5lckZ1bmN0aW9uLCB7XG4gICAgICAgICAgICAgICAgcGFzc2l2ZTogZmFsc2VcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5fdGFibGUudGFibGVTY3JvbGxNb2NrQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcbiAgICAgICAgICAgICAgICAnc2Nyb2xsJyxcbiAgICAgICAgICAgICAgICB0aGlzLl9tb2NrU2Nyb2xsYmFyTGlzdGVuZXJGdW5jdGlvbixcbiAgICAgICAgICAgICAgICB7IHBhc3NpdmU6IGZhbHNlIH1cbiAgICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl90YWJsZVNjcm9sbERpc3BhdGNoZXJcbiAgICAgICAgICAgICAgICAudmVydGljYWxseVNjcm9sbGVkKClcbiAgICAgICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICAgICAgZmlsdGVyKCgpID0+IHRoaXMudmlydHVhbFNjcm9sbCAmJiAhIXRoaXMuYm9keUhlaWdodCksXG4gICAgICAgICAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JClcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZSgoc2Nyb2xsYWJsZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNhbGN1bGF0ZVZpcnR1YWxTY3JvbGxSb3dzKCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3RhYmxlLnNldFRhYmxlU3RhdGUoe1xuICAgICAgICAgICAgICAgICAgICAgICAgLi4udGhpcy5fdGFibGUuZ2V0VGFibGVTdGF0ZSgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgc2Nyb2xsVG9wUG9zaXRpb246IHNjcm9sbGFibGUuZ2V0U2Nyb2xsVG9wKClcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2dldE51bWJlck9mUm93c1RvRGlzcGxheSgpOiBudW1iZXIge1xuICAgICAgICBjb25zdCB0YWJsZUNvbnRhaW5lciA9IHRoaXMuX3RhYmxlLnRhYmxlQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgIGxldCB0YWJsZUhlaWdodCA9IHRhYmxlQ29udGFpbmVyLmNsaWVudEhlaWdodDtcbiAgICAgICAgdGFibGVIZWlnaHQgPSB0YWJsZUhlaWdodCAtIHRhYmxlQ29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoJ3RoZWFkJykuY2xpZW50SGVpZ2h0O1xuICAgICAgICBjb25zdCBudW1iZXJPZlJvd3MgPSBNYXRoLmZsb29yKHRhYmxlSGVpZ2h0IC8gdGhpcy5yb3dIZWlnaHQpO1xuICAgICAgICBsZXQgcmV0VmFsOiBudW1iZXI7XG4gICAgICAgIGlmICh0aGlzLl90YWJsZS5fdGFibGVSb3dzVmlzaWJsZS5sZW5ndGggPCBudW1iZXJPZlJvd3MpIHtcbiAgICAgICAgICAgIHJldFZhbCA9IHRoaXMuX3RhYmxlLl90YWJsZVJvd3NWaXNpYmxlLmxlbmd0aDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldFZhbCA9IG51bWJlck9mUm93cztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmV0VmFsO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIHRoZSB1c2VyIHBlcmZvcm1zIGEgd2hlZWwgZXZlbnQuIEl0IGRldGVybWluZXMgd2hldGhlciBvciBub3QgdGhlIHVzZXIgaGFzIHNjcm9sbGVkXG4gICAgICogdXAgb3IgZG93biB1c2luZyB0aGUgZXZlbnQncyBkZWx0YVggcHJvcGVydHksIGFuZCBzY3JvbGxzIHRoZSB0YWJsZSBieSBvbmUgcm93LlxuICAgICAqL1xuICAgIHByaXZhdGUgX3doZWVsU2Nyb2xsTGlzdGVuZXJGdW5jdGlvbiA9IChldmVudDogV2hlZWxFdmVudCk6IHZvaWQgPT4ge1xuICAgICAgICBpZiAoTWF0aC5hYnMoZXZlbnQuZGVsdGFYKSA8IE1hdGguYWJzKGV2ZW50LmRlbHRhWSkpIHtcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICBldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgIGlmICh0aGlzLl93aGVlbFRpbWVvdXQpIHtcbiAgICAgICAgICAgICAgICB3aW5kb3cuY2FuY2VsQW5pbWF0aW9uRnJhbWUodGhpcy5fd2hlZWxUaW1lb3V0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGRlbHRhWSA9IGV2ZW50LmRlbHRhWTtcbiAgICAgICAgICAgIGlmIChkZWx0YVkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl93aGVlbFRpbWVvdXQgPSB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fc2Nyb2xsUm93KGRlbHRhWSA+IDAgPyAxIDogLTEpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIHRoZSBtb2NrIHNjcm9sbGJhciAod2hlbiB1c2luZyAnc2Nyb2xsV2hvbGVSb3dzJykgaXMgbW92ZWQuIEl0IGRldGVybWluZXMgaWYgdGhlXG4gICAgICogc2Nyb2xsIHdhcyB1cCBvciBkb3duIGJ5IGNvbXBhcmluZyB0aGUgY3VycmVudCBzY3JvbGwgdG9wIHRvIHRoZSBwcmV2aW91cyBzY3JvbGwgdG9wIGFuZCBzY3JvbGxzIHJvd3MgYWNjb3JkaW5nbHkuXG4gICAgICovXG4gICAgcHJpdmF0ZSBfbW9ja1Njcm9sbGJhckxpc3RlbmVyRnVuY3Rpb24gPSAoZXZlbnQ6IEV2ZW50KTogdm9pZCA9PiB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xuICAgICAgICBpZiAodGhpcy5fc2Nyb2xsTW9ja1RpbWVvdXQpIHtcbiAgICAgICAgICAgIHdpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZSh0aGlzLl9zY3JvbGxNb2NrVGltZW91dCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdGFibGVTY3JvbGxNb2NrQ29udGFpbmVyID0gdGhpcy5fdGFibGUudGFibGVTY3JvbGxNb2NrQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgIGxldCBkZWx0YVkgPSB0YWJsZVNjcm9sbE1vY2tDb250YWluZXIuc2Nyb2xsVG9wIC0gdGhpcy5fbGFzdE1vY2tTY3JvbGxQb3NpdGlvbjtcbiAgICAgICAgZGVsdGFZID0gTWF0aC5jZWlsKGRlbHRhWSAvIHRoaXMucm93SGVpZ2h0KTtcbiAgICAgICAgdGhpcy5fc2Nyb2xsTW9ja1RpbWVvdXQgPSB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX3Njcm9sbFJvdyhkZWx0YVksIHRydWUpO1xuICAgICAgICAgICAgdGhpcy5fbGFzdE1vY2tTY3JvbGxQb3NpdGlvbiA9IHRhYmxlU2Nyb2xsTW9ja0NvbnRhaW5lci5zY3JvbGxUb3A7XG4gICAgICAgICAgICBpZiAodGFibGVTY3JvbGxNb2NrQ29udGFpbmVyLnNjcm9sbFRvcCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIC8vIEFsd2F5cyBkaXNwbGF5IHRoZSBmaXJzdCByb3cgb2YgdGhlIHRhYmxlIHdoZW4gdGhlIHVzZXIgc2Nyb2xscyBhbGwgdGhlIHdheSB0byB0aGUgdG9wXG4gICAgICAgICAgICAgICAgdGhpcy5fc2V0Um93cygwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICB0YWJsZVNjcm9sbE1vY2tDb250YWluZXIuc2Nyb2xsVG9wICsgdGFibGVTY3JvbGxNb2NrQ29udGFpbmVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmhlaWdodCA9PT1cbiAgICAgICAgICAgICAgICB0YWJsZVNjcm9sbE1vY2tDb250YWluZXIuc2Nyb2xsSGVpZ2h0XG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAvLyBBbHdheXMgZGlzcGxheSB0aGUgbGFzdCByb3dzIG9mIHRoZSB0YWJsZSB3aGVuIHRoZSB1c2VyIHNjcm9sbHMgYWxsIHRoZSB3YXkgdG8gdGhlIGJvdHRvbVxuICAgICAgICAgICAgICAgIGNvbnN0IHN0YXJ0aW5nTm9kZUluZGV4ID0gdGhpcy5fdGFibGUuX3RhYmxlUm93c1Zpc2libGUubGVuZ3RoIC0gdGhpcy5fZ2V0TnVtYmVyT2ZSb3dzVG9EaXNwbGF5KCk7XG4gICAgICAgICAgICAgICAgdGhpcy5fc2V0Um93cyhzdGFydGluZ05vZGVJbmRleCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogVGhpcyBmdW5jdGlvbiwgdXNlZCBvbmx5IHdoZW4gJ3Njcm9sbFdob2xlUm93cycgaXMgdHJ1dGh5LCBjYWxjdWxhdGVzIHdoYXQgc2hvdWxkIGJlIHRoZSBuZXcgc3RhcnRpbmcgbm9kZSwgYmFzZWRcbiAgICAgKiBvZmYgdGhlIHByZXZpb3VzIHN0YXJ0aW5nIG5vZGUgYW5kIHRoZSBwcm92aWRlZCAnY291bnQnIHBhcmFtZXRlci4gRm9yIGV4YW1wbGUgaWYgdGhlIHByZXZpb3VzIHN0YXJ0IG5vZGUgd2FzIDEwXG4gICAgICogYW5kIHRoZSBjb3VudCBwYXJhbWV0ZXIgaXMgLTIsIHRoZSBuZXcgc3RhcnRpbmcgbm9kZSB3aWxsIGJlIDguIFRoaXMgZnVuY3Rpb24gYWxzbyBwcm9ncmFtbWF0aWNhbGx5IG1vdmVzIHRoZVxuICAgICAqIG1vY2sgc2Nyb2xsYmFyLlxuICAgICAqL1xuICAgIHByaXZhdGUgX3Njcm9sbFJvdyhjb3VudDogbnVtYmVyLCBmcm9tTW9ja1Njcm9sbGJhckxpc3RlbmVyID0gZmFsc2UpOiB2b2lkIHtcbiAgICAgICAgbGV0IHN0YXJ0aW5nTm9kZSA9IDA7XG4gICAgICAgIGlmICh0aGlzLl9wcmV2aW91c1N0YXJ0Tm9kZUluZGV4ICE9PSBudWxsICYmIHRoaXMuX3ByZXZpb3VzU3RhcnROb2RlSW5kZXggPj0gMCkge1xuICAgICAgICAgICAgc3RhcnRpbmdOb2RlID0gdGhpcy5fcHJldmlvdXNTdGFydE5vZGVJbmRleDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoXG4gICAgICAgICAgICBzdGFydGluZ05vZGUgKyBjb3VudCArIHRoaXMuX2dldE51bWJlck9mUm93c1RvRGlzcGxheSgpIDw9IHRoaXMuX3RhYmxlLl90YWJsZVJvd3NWaXNpYmxlLmxlbmd0aCB8fFxuICAgICAgICAgICAgY291bnQgPCAwXG4gICAgICAgICkge1xuICAgICAgICAgICAgc3RhcnRpbmdOb2RlID0gTWF0aC5jZWlsKHN0YXJ0aW5nTm9kZSArIGNvdW50KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc3RhcnRpbmdOb2RlIDwgMCkge1xuICAgICAgICAgICAgc3RhcnRpbmdOb2RlID0gMDtcbiAgICAgICAgfVxuICAgICAgICAvLyBUaGlzIG5leHQgJ2lmJyBzdGF0ZW1lbnQgaXMgZm9yIHRyaWdnZXJpbmcgbmV3IHBhZ2UgbG9hZHMgd2hlbiAncGFnZVNjcm9sbGluZycgaXMgdHJ1ZVxuICAgICAgICBpZiAoY291bnQgPiAwICYmIHN0YXJ0aW5nTm9kZSA9PT0gdGhpcy5fcHJldmlvdXNTdGFydE5vZGVJbmRleCAmJiB0aGlzLl90YWJsZS5wYWdlU2Nyb2xsaW5nKSB7XG4gICAgICAgICAgICB0aGlzLl90YWJsZS5fb25TcHlJbnRlcnNlY3QodHJ1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fc2V0Um93cyhzdGFydGluZ05vZGUpO1xuICAgICAgICBjb25zdCB0YWJsZVNjcm9sbE1vY2tDb250YWluZXIgPSB0aGlzLl90YWJsZS50YWJsZVNjcm9sbE1vY2tDb250YWluZXIubmF0aXZlRWxlbWVudDtcbiAgICAgICAgaWYgKCFmcm9tTW9ja1Njcm9sbGJhckxpc3RlbmVyKSB7XG4gICAgICAgICAgICB0YWJsZVNjcm9sbE1vY2tDb250YWluZXIuc2Nyb2xsQnkoeyB0b3A6IGNvdW50ICogdGhpcy5yb3dIZWlnaHQgfSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fbGFzdE1vY2tTY3JvbGxQb3NpdGlvbiA9IHRhYmxlU2Nyb2xsTW9ja0NvbnRhaW5lci5zY3JvbGxUb3A7XG4gICAgICAgIGlmICh0aGlzLl90YWJsZS5wYWdlU2Nyb2xsaW5nKSB7XG4gICAgICAgICAgICB0aGlzLl90YWJsZS50YWJsZVNjcm9sbGVkLmVtaXQodGhpcy5fbGFzdE1vY2tTY3JvbGxQb3NpdGlvbik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogVGhpcyBmdW5jdGlvbiBzZXRzIHJvd3MgaW4gdGhlIHRhYmxlJ3Mgdmlld3BvcnQgZGVwZW5kaW5nIG9uIHRoZSBwcm92aWRlZCBzdGFydGluZyBub2RlLiBJdCBhbHNvIHNldHMgdGhlIHRhYmxlXG4gICAgICogc3RhdGUuXG4gICAgICovXG4gICAgcHJpdmF0ZSBfc2V0Um93cyhzdGFydGluZ05vZGU6IG51bWJlcik6IHZvaWQge1xuICAgICAgICB0aGlzLl90YWJsZS5zZXRSb3dzSW5WaWV3cG9ydChzdGFydGluZ05vZGUsIHRoaXMuX2dldE51bWJlck9mUm93c1RvRGlzcGxheSgpKTtcbiAgICAgICAgdGhpcy5fcHJldmlvdXNTdGFydE5vZGVJbmRleCA9IHN0YXJ0aW5nTm9kZTtcbiAgICAgICAgdGhpcy5fdGFibGUuc2V0VGFibGVTdGF0ZSh7XG4gICAgICAgICAgICAuLi50aGlzLl90YWJsZS5nZXRUYWJsZVN0YXRlKCksXG4gICAgICAgICAgICBzY3JvbGxUb3BQb3NpdGlvbjogdGhpcy5yb3dIZWlnaHQgKiBzdGFydGluZ05vZGVcbiAgICAgICAgfSk7XG4gICAgfVxufVxuIl19
|
|
341
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtdmlydHVhbC1zY3JvbGwuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9wbGF0Zm9ybS9zcmMvbGliL3RhYmxlLWhlbHBlcnMvZGlyZWN0aXZlcy90YWJsZS12aXJ0dWFsLXNjcm9sbC5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBK0MsTUFBTSxlQUFlLENBQUM7QUFDcEgsT0FBTyxFQUFFLGdCQUFnQixFQUF5QixPQUFPLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUM5RixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUMzRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sRUFBZ0IsTUFBTSxNQUFNLENBQUM7QUFDN0QsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzNDLE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxrQ0FBa0MsRUFBRSxVQUFVLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDN0csT0FBTyxFQUFrQixrQkFBa0IsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUMvRCxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQztBQUUzRixPQUFPLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzdELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUNoRSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQzs7QUFjOUQsTUFBTSxPQUFPLDJCQUE0QixTQUFRLGtCQUFrQjtJQVpuRTs7UUFhSTs7V0FFRztRQUVILGtCQUFhLEdBQUcsS0FBSyxDQUFDO1FBbUJ0Qix3RUFBd0U7UUFFeEUsZ0JBQVcsR0FBRyxFQUFFLENBQUM7UUFNakI7OztX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OzJGQUVRLDJCQUEyQjtrQkFadkMsU0FBUzttQkFBQztvQkFDUCw4REFBOEQ7b0JBQzlELFFBQVEsRUFBRSwwQkFBMEI7b0JBQ3BDLFVBQVUsRUFBRSxJQUFJO29CQUNoQixTQUFTLEVBQUU7d0JBQ1AsZ0JBQWdCO3dCQUNoQjs0QkFDSSxPQUFPLEVBQUUsa0NBQWtDOzRCQUMzQyxXQUFXLDZCQUE2Qjt5QkFDM0M7cUJBQ0o7aUJBQ0o7OEJBTUcsYUFBYTtzQkFEWixLQUFLO2dCQVNGLGVBQWU7c0JBRGxCLEtBQUs7Z0JBY04sV0FBVztzQkFEVixLQUFLO2dCQUtOLFVBQVU7c0JBRFQsS0FBSztnQkFRTixTQUFTO3NCQURSLEtBQUs7Z0JBb0ROLGVBQWU7c0JBRGQsWUFBWTt1QkFBQyxTQUFTLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaXJlY3RpdmUsIEhvc3RMaXN0ZW5lciwgaW5qZWN0LCBJbnB1dCwgT25Jbml0LCBPbkNoYW5nZXMsIE9uRGVzdHJveSwgU2ltcGxlQ2hhbmdlcyB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRGVzdHJveWVkU2VydmljZSwgRm9jdXNhYmxlSXRlbVBvc2l0aW9uLCBLZXlVdGlsIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jZGsvdXRpbHMnO1xuaW1wb3J0IHsgQ29udGVudERlbnNpdHlNb2RlIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL2NvbnRlbnQtZGVuc2l0eSc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIGZpbHRlciwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBGRFBfVEFCTEVfRFJBR0dBQkxFX0RJUkVDVElWRSwgRkRQX1RBQkxFX1ZJUlRVQUxfU0NST0xMX0RJUkVDVElWRSwgUk9XX0hFSUdIVCB9IGZyb20gJy4uL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBUYWJsZURyYWdnYWJsZSwgVGFibGVWaXJ0dWFsU2Nyb2xsIH0gZnJvbSAnLi4vbW9kZWxzJztcbmltcG9ydCB7IFRhYmxlU2Nyb2xsRGlzcGF0Y2hlclNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy90YWJsZS1zY3JvbGwtZGlzcGF0Y2hlci5zZXJ2aWNlJztcbmltcG9ydCB7IFRhYmxlIH0gZnJvbSAnLi4vdGFibGUnO1xuaW1wb3J0IHsgRE9XTl9BUlJPVywgVVBfQVJST1cgfSBmcm9tICdAYW5ndWxhci9jZGsva2V5Y29kZXMnO1xuaW1wb3J0IHsgVGFibGVSb3dTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvdGFibGUtcm93LnNlcnZpY2UnO1xuaW1wb3J0IHsgY29lcmNlQm9vbGVhblByb3BlcnR5IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvZXJjaW9uJztcblxuQERpcmVjdGl2ZSh7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9kaXJlY3RpdmUtc2VsZWN0b3JcbiAgICBzZWxlY3RvcjogJ2ZkcC10YWJsZVt2aXJ0dWFsU2Nyb2xsXScsXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBwcm92aWRlcnM6IFtcbiAgICAgICAgRGVzdHJveWVkU2VydmljZSxcbiAgICAgICAge1xuICAgICAgICAgICAgcHJvdmlkZTogRkRQX1RBQkxFX1ZJUlRVQUxfU0NST0xMX0RJUkVDVElWRSxcbiAgICAgICAgICAgIHVzZUV4aXN0aW5nOiBUYWJsZVZpcnR1YWxTY3JvbGxEaXJlY3RpdmVcbiAgICAgICAgfVxuICAgIF1cbn0pXG5leHBvcnQgY2xhc3MgVGFibGVWaXJ0dWFsU2Nyb2xsRGlyZWN0aXZlIGV4dGVuZHMgVGFibGVWaXJ0dWFsU2Nyb2xsIGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMsIE9uRGVzdHJveSB7XG4gICAgLyoqIFdoZXRoZXIgdG8gc2hvdyBvbmx5IHZpc2libGUgcm93cyBpbiBtYXR0ZXIgb2YgcGVyZm9ybWFuY2VcbiAgICAgKiBmYWxzZSBieSBkZWZhdWx0LCB3aGVuIHRydWUgc2V0dGluZyBib2R5SGVpZ2h0IGFuZCByb3dIZWlnaHQgaXMgcmVxdWlyZWQuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICB2aXJ0dWFsU2Nyb2xsID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHRvIHNjcm9sbCB3aG9sZSByb3dzIHJhdGhlciB0aGFuIHBpeGVsIGJ5IHBpeGVsIHdoZW4gdGhlIHVzZXIgcGVyZm9ybXMgYSBzY3JvbGwuXG4gICAgICogVGhpcyBnaXZlcyBncmVhdGVyIHBlcmZvcm1hbmNlIGltcHJvdmVtZW50cyBidXQgYWxzbyBsZW5kcyB0byBzb21lIHBvdGVudGlhbGx5IHVuZGVzaXJhYmxlIFVYIGNoYW5nZXMuXG4gICAgICogQSBcInJvd0hlaWdodFwiIG11c3QgYmUgcHJvdmlkZWQgd2hlbiB1c2luZyB0aGlzIGZlYXR1cmUuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBzZXQgc2Nyb2xsV2hvbGVSb3dzKHZhbHVlOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuX3Njcm9sbFdob2xlUm93cyA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSk7XG4gICAgICAgIGlmICh0aGlzLl9zY3JvbGxXaG9sZVJvd3MpIHtcbiAgICAgICAgICAgIHRoaXMudmlydHVhbFNjcm9sbCA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXQgc2Nyb2xsV2hvbGVSb3dzKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fc2Nyb2xsV2hvbGVSb3dzO1xuICAgIH1cblxuICAgIC8qKiBDYWNoZSBzaXplIGZvciB0aGUgdmlydHVhbFNjcm9sbCwgZGVmYXVsdCBpcyA0MCBpbiBlYWNoIGRpcmVjdGlvbiAqL1xuICAgIEBJbnB1dCgpXG4gICAgcmVuZGVyQWhlYWQgPSA0MDtcblxuICAgIC8qKiBCb2R5IGhlaWdodC4gKi9cbiAgICBASW5wdXQoKVxuICAgIGJvZHlIZWlnaHQ6IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIEhlaWdodCBvZiB0aGUgcm93LCByZXF1aXJlZCBmb3IgdGhlIHZpcnR1YWxTY3JvbGwsXG4gICAgICogZGVmYXVsdCBpcyA0NHB4IGluIGNvenksIDMycHggaW4gY29tcGFjdCBhbmQgMjRweCBpbiBjb25kZW5zZWQgKHNldCBhdXRvbWF0aWNhbGx5KVxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcm93SGVpZ2h0ID0gUk9XX0hFSUdIVC5nZXQoQ29udGVudERlbnNpdHlNb2RlLkNPWlkpITtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgdmlydHVhbFNjcm9sbFRvdGFsSGVpZ2h0ID0gMDtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgdmlydHVhbFNjcm9sbFRyYW5zZm9ybSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlcj4oMCk7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3RhYmxlOiBUYWJsZTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfdmlydHVhbFNjcm9sbENhY2hlID0geyBzdGFydE5vZGVJbmRleDogLTEsIHZpc2libGVOb2RlQ291bnQ6IC0xLCB0b3RhbE5vZGVDb3VudDogLTEgfTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSByZWFkb25seSBfdGFibGVTY3JvbGxEaXNwYXRjaGVyID0gaW5qZWN0KFRhYmxlU2Nyb2xsRGlzcGF0Y2hlclNlcnZpY2UpO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IF9kbmRUYWJsZURpcmVjdGl2ZSA9IGluamVjdDxUYWJsZURyYWdnYWJsZT4oRkRQX1RBQkxFX0RSQUdHQUJMRV9ESVJFQ1RJVkUsIHtcbiAgICAgICAgb3B0aW9uYWw6IHRydWVcbiAgICB9KTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSByZWFkb25seSBfdGFibGVSb3dTZXJ2aWNlID0gaW5qZWN0KFRhYmxlUm93U2VydmljZSk7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX2Rlc3Ryb3kkID0gaW5qZWN0KERlc3Ryb3llZFNlcnZpY2UpO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF93aGVlbFRpbWVvdXQ6IGFueTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfc2Nyb2xsTW9ja1RpbWVvdXQ6IGFueTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfbGFzdE1vY2tTY3JvbGxQb3NpdGlvbiA9IDA7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2ZvY3VzYWJsZUdyaWRTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfZm9jdXNlZENlbGw6IEZvY3VzYWJsZUl0ZW1Qb3NpdGlvbjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfcHJldmlvdXNTdGFydE5vZGVJbmRleDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3Njcm9sbFdob2xlUm93cyA9IGZhbHNlO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBASG9zdExpc3RlbmVyKCdrZXlkb3duJywgWyckZXZlbnQnXSlcbiAgICBfa2V5ZG93bkhhbmRsZXIoZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuc2Nyb2xsV2hvbGVSb3dzKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5fZm9jdXNlZENlbGw/LnJvd0luZGV4ID09PSAwICYmIEtleVV0aWwuaXNLZXlDb2RlKGV2ZW50LCBVUF9BUlJPVykpIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fdGFibGUudGFibGVDb250YWluZXIubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKCd0cicpWzFdLmFyaWFSb3dJbmRleCAhPT0gJzAnKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNlbGxUb0ZvY3VzID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29sSW5kZXg6IHRoaXMuX2ZvY3VzZWRDZWxsLmNvbEluZGV4LFxuICAgICAgICAgICAgICAgICAgICAgICAgcm93SW5kZXg6IDFcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fdGFibGUuX2ZvY3VzYWJsZUdyaWQuZm9jdXNDZWxsKGNlbGxUb0ZvY3VzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5fc2Nyb2xsUm93KC0xKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICAgICAgdGhpcy5fZm9jdXNlZENlbGw/LnJvd0luZGV4ID09PSB0aGlzLl9nZXROdW1iZXJPZlJvd3NUb0Rpc3BsYXkoKSAmJlxuICAgICAgICAgICAgICAgIEtleVV0aWwuaXNLZXlDb2RlKGV2ZW50LCBET1dOX0FSUk9XKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fc2Nyb2xsUm93KDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuc2Nyb2xsV2hvbGVSb3dzICYmICF0aGlzLnZpcnR1YWxTY3JvbGwpIHtcbiAgICAgICAgICAgIHRoaXMudmlydHVhbFNjcm9sbCA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLl90YWJsZS50YWJsZVNjcm9sbGFibGUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy52aXJ0dWFsU2Nyb2xsICYmIChjaGFuZ2VzWydyb3dIZWlnaHQnXSB8fCBjaGFuZ2VzWyd2aXJ0dWFsU2Nyb2xsJ10gfHwgY2hhbmdlc1sncmVuZGVyQWhlYWQnXSkpIHtcbiAgICAgICAgICAgIHRoaXMuY2FsY3VsYXRlVmlydHVhbFNjcm9sbFJvd3MoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2ZvY3VzYWJsZUdyaWRTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIGlmICh0aGlzLnNjcm9sbFdob2xlUm93cykge1xuICAgICAgICAgICAgdGhpcy5fdGFibGUudGFibGVDb250YWluZXIubmF0aXZlRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCd3aGVlbCcsIHRoaXMuX3doZWVsU2Nyb2xsTGlzdGVuZXJGdW5jdGlvbiwge1xuICAgICAgICAgICAgICAgIHBhc3NpdmU6IGZhbHNlXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMuX3RhYmxlLnRhYmxlU2Nyb2xsTW9ja0NvbnRhaW5lci5uYXRpdmVFbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXG4gICAgICAgICAgICAgICAgJ3Njcm9sbCcsXG4gICAgICAgICAgICAgICAgdGhpcy5fbW9ja1Njcm9sbGJhckxpc3RlbmVyRnVuY3Rpb24sXG4gICAgICAgICAgICAgICAgeyBwYXNzaXZlOiBmYWxzZSB9XG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIFNldHMgdGFibGUgcmVmZXJlbmNlLiAqL1xuICAgIHNldFRhYmxlKHRhYmxlOiBUYWJsZSk6IHZvaWQge1xuICAgICAgICB0aGlzLl90YWJsZSA9IHRhYmxlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgZnVuY3Rpb24gZGV0ZXJtaW5lcyBob3cgbWFueSByb3dzIGNhbiBiZSBkaXNwbGF5ZWQgaW4gdGhlIHRhYmxlLCBhbmQgc2V0cyB0aGUgcm93cyBpbiB0aGUgdGFibGUgYmFzZWQgb24gdGhlXG4gICAgICogc3RhcnQgbm9kZSBpbmRleCwgd2hpY2ggbWF5IGNvbWUgZnJvbSB0aGUgdGFibGUgc3RhdGVcbiAgICAgKi9cbiAgICBjYWxjdWxhdGVWaXJ0dWFsU2Nyb2xsUm93cygpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuc2Nyb2xsV2hvbGVSb3dzKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuX2ZvY3VzYWJsZUdyaWRTdWJzY3JpcHRpb24pIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9mb2N1c2FibGVHcmlkU3Vic2NyaXB0aW9uID0gdGhpcy5fdGFibGUuX2ZvY3VzYWJsZUdyaWQuaXRlbUZvY3VzZWQuc3Vic2NyaWJlKChldmVudCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9mb2N1c2VkQ2VsbCA9IGV2ZW50O1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCF0aGlzLnZpcnR1YWxTY3JvbGwgfHwgIXRoaXMuYm9keUhlaWdodCB8fCB0aGlzLl9kbmRUYWJsZURpcmVjdGl2ZT8uZHJhZ0Ryb3BJblByb2dyZXNzKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBsZXQgc3RhcnROb2RlSW5kZXggPSAwO1xuICAgICAgICAgICAgY29uc3Qgc2Nyb2xsVG9wID0gdGhpcy5fdGFibGUuZ2V0VGFibGVTdGF0ZSgpLnNjcm9sbFRvcFBvc2l0aW9uO1xuICAgICAgICAgICAgaWYgKHNjcm9sbFRvcCAhPT0gMCkge1xuICAgICAgICAgICAgICAgIHN0YXJ0Tm9kZUluZGV4ID0gTWF0aC5mbG9vcihzY3JvbGxUb3AgLyB0aGlzLnJvd0hlaWdodCk7XG4gICAgICAgICAgICAgICAgaWYgKHN0YXJ0Tm9kZUluZGV4ID4gdGhpcy5fdGFibGUuX3RhYmxlUm93c1Zpc2libGUubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIHN0YXJ0Tm9kZUluZGV4ID0gMDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IHRvdGFsTm9kZUNvdW50ID0gdGhpcy5fdGFibGUuX3RhYmxlUm93c1Zpc2libGUubGVuZ3RoO1xuICAgICAgICAgICAgbGV0IHZpc2libGVOb2RlQ291bnQgPSB0aGlzLl9nZXROdW1iZXJPZlJvd3NUb0Rpc3BsYXkoKTtcbiAgICAgICAgICAgIHZpc2libGVOb2RlQ291bnQgPSBNYXRoLm1pbih0b3RhbE5vZGVDb3VudCAtIHN0YXJ0Tm9kZUluZGV4LCB2aXNpYmxlTm9kZUNvdW50KTtcbiAgICAgICAgICAgIHRoaXMudmlydHVhbFNjcm9sbFRvdGFsSGVpZ2h0ID0gdG90YWxOb2RlQ291bnQgKiB0aGlzLnJvd0hlaWdodCAtIHZpc2libGVOb2RlQ291bnQgKiB0aGlzLnJvd0hlaWdodDtcblxuICAgICAgICAgICAgdGhpcy5fc2V0Um93cyhzdGFydE5vZGVJbmRleCk7XG4gICAgICAgICAgICBjb25zdCBzY3JvbGxNb2NrQ29udGFpbmVyID0gdGhpcy5fdGFibGUudGFibGVTY3JvbGxNb2NrQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgICAgICBzY3JvbGxNb2NrQ29udGFpbmVyLnN0eWxlLm1heEhlaWdodCA9IHRoaXMuYm9keUhlaWdodDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICghdGhpcy52aXJ0dWFsU2Nyb2xsIHx8ICF0aGlzLmJvZHlIZWlnaHQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IHJvd0hlaWdodCA9IHRoaXMucm93SGVpZ2h0ICsgMTtcblxuICAgICAgICAgICAgY29uc3Qgcm93c1Zpc2libGUgPSB0aGlzLl90YWJsZS5fdGFibGVSb3dzVmlzaWJsZTtcbiAgICAgICAgICAgIGNvbnN0IHJvd3NJblZpZXdQb3J0ID0gdGhpcy5fdGFibGUuZ2V0Um93c0luVmlld3BvcnQoKTtcbiAgICAgICAgICAgIGNvbnN0IHRvdGFsTm9kZUNvdW50ID0gcm93c1Zpc2libGUubGVuZ3RoO1xuICAgICAgICAgICAgY29uc3Qgc2Nyb2xsVG9wID0gdGhpcy5fdGFibGUudGFibGVTY3JvbGxhYmxlLmdldFNjcm9sbFRvcCgpO1xuXG4gICAgICAgICAgICBsZXQgc3RhcnROb2RlSW5kZXggPSBNYXRoLmZsb29yKHNjcm9sbFRvcCAvIHJvd0hlaWdodCkgLSB0aGlzLnJlbmRlckFoZWFkO1xuICAgICAgICAgICAgc3RhcnROb2RlSW5kZXggPSBNYXRoLm1heCgwLCBzdGFydE5vZGVJbmRleCk7XG5cbiAgICAgICAgICAgIGxldCB2aXNpYmxlTm9kZUNvdW50ID1cbiAgICAgICAgICAgICAgICBNYXRoLmNlaWwodGhpcy5fdGFibGUudGFibGVDb250YWluZXIubmF0aXZlRWxlbWVudC5jbGllbnRIZWlnaHQgLyByb3dIZWlnaHQpICsgMiAqIHRoaXMucmVuZGVyQWhlYWQ7XG4gICAgICAgICAgICB2aXNpYmxlTm9kZUNvdW50ID0gTWF0aC5taW4odG90YWxOb2RlQ291bnQgLSBzdGFydE5vZGVJbmRleCwgdmlzaWJsZU5vZGVDb3VudCk7XG5cbiAgICAgICAgICAgIHRoaXMudmlydHVhbFNjcm9sbFRyYW5zZm9ybSQubmV4dChzdGFydE5vZGVJbmRleCAqIHJvd0hlaWdodCk7XG5cbiAgICAgICAgICAgIC8vIFNpbXBsZSBjYWNoaW5nIHRvIGF2b2lkIHVubmVjZXNzYXJ5IHJlLXJlbmRlcmluZ3NcbiAgICAgICAgICAgIGNvbnN0IGlzQ2FjaGVkID1cbiAgICAgICAgICAgICAgICBzdGFydE5vZGVJbmRleCA9PT0gdGhpcy5fdmlydHVhbFNjcm9sbENhY2hlLnN0YXJ0Tm9kZUluZGV4ICYmXG4gICAgICAgICAgICAgICAgdmlzaWJsZU5vZGVDb3VudCA9PT0gdGhpcy5fdmlydHVhbFNjcm9sbENhY2hlLnZpc2libGVOb2RlQ291bnQgJiZcbiAgICAgICAgICAgICAgICB0b3RhbE5vZGVDb3VudCA9PT0gdGhpcy5fdmlydHVhbFNjcm9sbENhY2hlLnRvdGFsTm9kZUNvdW50ICYmXG4gICAgICAgICAgICAgICAgLy8gT24gcm93cyBjaGFuZ2UsIGV2ZW4gaWYgdGhlIHRvdGFsIG51bWJlciBvZiByb3dzIGlzIHRoZSBzYW1lLCB0aGUgcm93IG9iamVjdCB3aWxsIGJlIGRpZmZlcmVudFxuICAgICAgICAgICAgICAgIHN0YXJ0Tm9kZUluZGV4ID09PSByb3dzSW5WaWV3UG9ydFswXTtcblxuICAgICAgICAgICAgaWYgKGlzQ2FjaGVkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLl92aXJ0dWFsU2Nyb2xsQ2FjaGUgPSB7IHN0YXJ0Tm9kZUluZGV4LCB2aXNpYmxlTm9kZUNvdW50LCB0b3RhbE5vZGVDb3VudCB9O1xuICAgICAgICAgICAgdGhpcy52aXJ0dWFsU2Nyb2xsVG90YWxIZWlnaHQgPSB0b3RhbE5vZGVDb3VudCAqIHJvd0hlaWdodCAtIHZpc2libGVOb2RlQ291bnQgKiByb3dIZWlnaHQ7XG4gICAgICAgICAgICB0aGlzLl90YWJsZS5zZXRSb3dzSW5WaWV3cG9ydChcbiAgICAgICAgICAgICAgICBzdGFydE5vZGVJbmRleCxcbiAgICAgICAgICAgICAgICByb3dzVmlzaWJsZS5zbGljZShzdGFydE5vZGVJbmRleCwgc3RhcnROb2RlSW5kZXggKyB2aXNpYmxlTm9kZUNvdW50KS5sZW5ndGhcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogSW5pdGlhbGlzZXMgc2Nyb2xsIGxpc3RlbmVycy5cbiAgICAgKi9cbiAgICBsaXN0ZW5PblZpcnR1YWxTY3JvbGwoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLnNjcm9sbFdob2xlUm93cykge1xuICAgICAgICAgICAgdGhpcy5fdGFibGUudGFibGVDb250YWluZXIubmF0aXZlRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCd3aGVlbCcsIHRoaXMuX3doZWVsU2Nyb2xsTGlzdGVuZXJGdW5jdGlvbiwge1xuICAgICAgICAgICAgICAgIHBhc3NpdmU6IGZhbHNlXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMuX3RhYmxlLnRhYmxlU2Nyb2xsTW9ja0NvbnRhaW5lci5uYXRpdmVFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoXG4gICAgICAgICAgICAgICAgJ3Njcm9sbCcsXG4gICAgICAgICAgICAgICAgdGhpcy5fbW9ja1Njcm9sbGJhckxpc3RlbmVyRnVuY3Rpb24sXG4gICAgICAgICAgICAgICAgeyBwYXNzaXZlOiBmYWxzZSB9XG4gICAgICAgICAgICApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fdGFibGVTY3JvbGxEaXNwYXRjaGVyXG4gICAgICAgICAgICAgICAgLnZlcnRpY2FsbHlTY3JvbGxlZCgpXG4gICAgICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgICAgIGZpbHRlcigoKSA9PiB0aGlzLnZpcnR1YWxTY3JvbGwgJiYgISF0aGlzLmJvZHlIZWlnaHQpLFxuICAgICAgICAgICAgICAgICAgICB0YWtlVW50aWwodGhpcy5fZGVzdHJveSQpXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKHNjcm9sbGFibGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jYWxjdWxhdGVWaXJ0dWFsU2Nyb2xsUm93cygpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl90YWJsZS5zZXRUYWJsZVN0YXRlKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLnRoaXMuX3RhYmxlLmdldFRhYmxlU3RhdGUoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNjcm9sbFRvcFBvc2l0aW9uOiBzY3JvbGxhYmxlLmdldFNjcm9sbFRvcCgpXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9nZXROdW1iZXJPZlJvd3NUb0Rpc3BsYXkoKTogbnVtYmVyIHtcbiAgICAgICAgY29uc3QgdGFibGVDb250YWluZXIgPSB0aGlzLl90YWJsZS50YWJsZUNvbnRhaW5lci5uYXRpdmVFbGVtZW50O1xuICAgICAgICBsZXQgdGFibGVIZWlnaHQgPSB0YWJsZUNvbnRhaW5lci5jbGllbnRIZWlnaHQ7XG4gICAgICAgIHRhYmxlSGVpZ2h0ID0gdGFibGVIZWlnaHQgLSB0YWJsZUNvbnRhaW5lci5xdWVyeVNlbGVjdG9yKCd0aGVhZCcpLmNsaWVudEhlaWdodDtcbiAgICAgICAgY29uc3QgbnVtYmVyT2ZSb3dzID0gTWF0aC5mbG9vcih0YWJsZUhlaWdodCAvIHRoaXMucm93SGVpZ2h0KTtcbiAgICAgICAgbGV0IHJldFZhbDogbnVtYmVyO1xuICAgICAgICBpZiAodGhpcy5fdGFibGUuX3RhYmxlUm93c1Zpc2libGUubGVuZ3RoIDwgbnVtYmVyT2ZSb3dzKSB7XG4gICAgICAgICAgICByZXRWYWwgPSB0aGlzLl90YWJsZS5fdGFibGVSb3dzVmlzaWJsZS5sZW5ndGg7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXRWYWwgPSBudW1iZXJPZlJvd3M7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJldFZhbDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbiB0aGUgdXNlciBwZXJmb3JtcyBhIHdoZWVsIGV2ZW50LiBJdCBkZXRlcm1pbmVzIHdoZXRoZXIgb3Igbm90IHRoZSB1c2VyIGhhcyBzY3JvbGxlZFxuICAgICAqIHVwIG9yIGRvd24gdXNpbmcgdGhlIGV2ZW50J3MgZGVsdGFYIHByb3BlcnR5LCBhbmQgc2Nyb2xscyB0aGUgdGFibGUgYnkgb25lIHJvdy5cbiAgICAgKi9cbiAgICBwcml2YXRlIF93aGVlbFNjcm9sbExpc3RlbmVyRnVuY3Rpb24gPSAoZXZlbnQ6IFdoZWVsRXZlbnQpOiB2b2lkID0+IHtcbiAgICAgICAgaWYgKE1hdGguYWJzKGV2ZW50LmRlbHRhWCkgPCBNYXRoLmFicyhldmVudC5kZWx0YVkpKSB7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgICBpZiAodGhpcy5fd2hlZWxUaW1lb3V0KSB7XG4gICAgICAgICAgICAgICAgd2luZG93LmNhbmNlbEFuaW1hdGlvbkZyYW1lKHRoaXMuX3doZWVsVGltZW91dCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBkZWx0YVkgPSBldmVudC5kZWx0YVk7XG4gICAgICAgICAgICBpZiAoZGVsdGFZKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fd2hlZWxUaW1lb3V0ID0gd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3Njcm9sbFJvdyhkZWx0YVkgPiAwID8gMSA6IC0xKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbiB0aGUgbW9jayBzY3JvbGxiYXIgKHdoZW4gdXNpbmcgJ3Njcm9sbFdob2xlUm93cycpIGlzIG1vdmVkLiBJdCBkZXRlcm1pbmVzIGlmIHRoZVxuICAgICAqIHNjcm9sbCB3YXMgdXAgb3IgZG93biBieSBjb21wYXJpbmcgdGhlIGN1cnJlbnQgc2Nyb2xsIHRvcCB0byB0aGUgcHJldmlvdXMgc2Nyb2xsIHRvcCBhbmQgc2Nyb2xscyByb3dzIGFjY29yZGluZ2x5LlxuICAgICAqL1xuICAgIHByaXZhdGUgX21vY2tTY3JvbGxiYXJMaXN0ZW5lckZ1bmN0aW9uID0gKGV2ZW50OiBFdmVudCk6IHZvaWQgPT4ge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcbiAgICAgICAgaWYgKHRoaXMuX3Njcm9sbE1vY2tUaW1lb3V0KSB7XG4gICAgICAgICAgICB3aW5kb3cuY2FuY2VsQW5pbWF0aW9uRnJhbWUodGhpcy5fc2Nyb2xsTW9ja1RpbWVvdXQpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHRhYmxlU2Nyb2xsTW9ja0NvbnRhaW5lciA9IHRoaXMuX3RhYmxlLnRhYmxlU2Nyb2xsTW9ja0NvbnRhaW5lci5uYXRpdmVFbGVtZW50O1xuICAgICAgICBsZXQgZGVsdGFZID0gdGFibGVTY3JvbGxNb2NrQ29udGFpbmVyLnNjcm9sbFRvcCAtIHRoaXMuX2xhc3RNb2NrU2Nyb2xsUG9zaXRpb247XG4gICAgICAgIGRlbHRhWSA9IE1hdGguY2VpbChkZWx0YVkgLyB0aGlzLnJvd0hlaWdodCk7XG4gICAgICAgIHRoaXMuX3Njcm9sbE1vY2tUaW1lb3V0ID0gd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9zY3JvbGxSb3coZGVsdGFZLCB0cnVlKTtcbiAgICAgICAgICAgIHRoaXMuX2xhc3RNb2NrU2Nyb2xsUG9zaXRpb24gPSB0YWJsZVNjcm9sbE1vY2tDb250YWluZXIuc2Nyb2xsVG9wO1xuICAgICAgICAgICAgaWYgKHRhYmxlU2Nyb2xsTW9ja0NvbnRhaW5lci5zY3JvbGxUb3AgPT09IDApIHtcbiAgICAgICAgICAgICAgICAvLyBBbHdheXMgZGlzcGxheSB0aGUgZmlyc3Qgcm93IG9mIHRoZSB0YWJsZSB3aGVuIHRoZSB1c2VyIHNjcm9sbHMgYWxsIHRoZSB3YXkgdG8gdGhlIHRvcFxuICAgICAgICAgICAgICAgIHRoaXMuX3NldFJvd3MoMCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgdGFibGVTY3JvbGxNb2NrQ29udGFpbmVyLnNjcm9sbFRvcCArIHRhYmxlU2Nyb2xsTW9ja0NvbnRhaW5lci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5oZWlnaHQgPT09XG4gICAgICAgICAgICAgICAgdGFibGVTY3JvbGxNb2NrQ29udGFpbmVyLnNjcm9sbEhlaWdodFxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgLy8gQWx3YXlzIGRpc3BsYXkgdGhlIGxhc3Qgcm93cyBvZiB0aGUgdGFibGUgd2hlbiB0aGUgdXNlciBzY3JvbGxzIGFsbCB0aGUgd2F5IHRvIHRoZSBib3R0b21cbiAgICAgICAgICAgICAgICBjb25zdCBzdGFydGluZ05vZGVJbmRleCA9IHRoaXMuX3RhYmxlLl90YWJsZVJvd3NWaXNpYmxlLmxlbmd0aCAtIHRoaXMuX2dldE51bWJlck9mUm93c1RvRGlzcGxheSgpO1xuICAgICAgICAgICAgICAgIHRoaXMuX3NldFJvd3Moc3RhcnRpbmdOb2RlSW5kZXgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIFRoaXMgZnVuY3Rpb24sIHVzZWQgb25seSB3aGVuICdzY3JvbGxXaG9sZVJvd3MnIGlzIHRydXRoeSwgY2FsY3VsYXRlcyB3aGF0IHNob3VsZCBiZSB0aGUgbmV3IHN0YXJ0aW5nIG5vZGUsIGJhc2VkXG4gICAgICogb2ZmIHRoZSBwcmV2aW91cyBzdGFydGluZyBub2RlIGFuZCB0aGUgcHJvdmlkZWQgJ2NvdW50JyBwYXJhbWV0ZXIuIEZvciBleGFtcGxlIGlmIHRoZSBwcmV2aW91cyBzdGFydCBub2RlIHdhcyAxMFxuICAgICAqIGFuZCB0aGUgY291bnQgcGFyYW1ldGVyIGlzIC0yLCB0aGUgbmV3IHN0YXJ0aW5nIG5vZGUgd2lsbCBiZSA4LiBUaGlzIGZ1bmN0aW9uIGFsc28gcHJvZ3JhbW1hdGljYWxseSBtb3ZlcyB0aGVcbiAgICAgKiBtb2NrIHNjcm9sbGJhci5cbiAgICAgKi9cbiAgICBwcml2YXRlIF9zY3JvbGxSb3coY291bnQ6IG51bWJlciwgZnJvbU1vY2tTY3JvbGxiYXJMaXN0ZW5lciA9IGZhbHNlKTogdm9pZCB7XG4gICAgICAgIGxldCBzdGFydGluZ05vZGUgPSAwO1xuICAgICAgICBpZiAodGhpcy5fcHJldmlvdXNTdGFydE5vZGVJbmRleCAhPT0gbnVsbCAmJiB0aGlzLl9wcmV2aW91c1N0YXJ0Tm9kZUluZGV4ID49IDApIHtcbiAgICAgICAgICAgIHN0YXJ0aW5nTm9kZSA9IHRoaXMuX3ByZXZpb3VzU3RhcnROb2RlSW5kZXg7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgc3RhcnRpbmdOb2RlICsgY291bnQgKyB0aGlzLl9nZXROdW1iZXJPZlJvd3NUb0Rpc3BsYXkoKSA8PSB0aGlzLl90YWJsZS5fdGFibGVSb3dzVmlzaWJsZS5sZW5ndGggfHxcbiAgICAgICAgICAgIGNvdW50IDwgMFxuICAgICAgICApIHtcbiAgICAgICAgICAgIHN0YXJ0aW5nTm9kZSA9IE1hdGguY2VpbChzdGFydGluZ05vZGUgKyBjb3VudCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHN0YXJ0aW5nTm9kZSA8IDApIHtcbiAgICAgICAgICAgIHN0YXJ0aW5nTm9kZSA9IDA7XG4gICAgICAgIH1cbiAgICAgICAgLy8gVGhpcyBuZXh0ICdpZicgc3RhdGVtZW50IGlzIGZvciB0cmlnZ2VyaW5nIG5ldyBwYWdlIGxvYWRzIHdoZW4gJ3BhZ2VTY3JvbGxpbmcnIGlzIHRydWVcbiAgICAgICAgaWYgKGNvdW50ID4gMCAmJiBzdGFydGluZ05vZGUgPT09IHRoaXMuX3ByZXZpb3VzU3RhcnROb2RlSW5kZXggJiYgdGhpcy5fdGFibGUucGFnZVNjcm9sbGluZykge1xuICAgICAgICAgICAgdGhpcy5fdGFibGUuX29uU3B5SW50ZXJzZWN0KHRydWUpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3NldFJvd3Moc3RhcnRpbmdOb2RlKTtcbiAgICAgICAgY29uc3QgdGFibGVTY3JvbGxNb2NrQ29udGFpbmVyID0gdGhpcy5fdGFibGUudGFibGVTY3JvbGxNb2NrQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgIGlmICghZnJvbU1vY2tTY3JvbGxiYXJMaXN0ZW5lcikge1xuICAgICAgICAgICAgdGFibGVTY3JvbGxNb2NrQ29udGFpbmVyLnNjcm9sbEJ5KHsgdG9wOiBjb3VudCAqIHRoaXMucm93SGVpZ2h0IH0pO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2xhc3RNb2NrU2Nyb2xsUG9zaXRpb24gPSB0YWJsZVNjcm9sbE1vY2tDb250YWluZXIuc2Nyb2xsVG9wO1xuICAgICAgICBpZiAodGhpcy5fdGFibGUucGFnZVNjcm9sbGluZykge1xuICAgICAgICAgICAgdGhpcy5fdGFibGUudGFibGVTY3JvbGxlZC5lbWl0KHRoaXMuX2xhc3RNb2NrU2Nyb2xsUG9zaXRpb24pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIFRoaXMgZnVuY3Rpb24gc2V0cyByb3dzIGluIHRoZSB0YWJsZSdzIHZpZXdwb3J0IGRlcGVuZGluZyBvbiB0aGUgcHJvdmlkZWQgc3RhcnRpbmcgbm9kZS4gSXQgYWxzbyBzZXRzIHRoZSB0YWJsZVxuICAgICAqIHN0YXRlLlxuICAgICAqL1xuICAgIHByaXZhdGUgX3NldFJvd3Moc3RhcnRpbmdOb2RlOiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fdGFibGUuc2V0Um93c0luVmlld3BvcnQoc3RhcnRpbmdOb2RlLCB0aGlzLl9nZXROdW1iZXJPZlJvd3NUb0Rpc3BsYXkoKSk7XG4gICAgICAgIHRoaXMuX3ByZXZpb3VzU3RhcnROb2RlSW5kZXggPSBzdGFydGluZ05vZGU7XG4gICAgICAgIHRoaXMuX3RhYmxlLnNldFRhYmxlU3RhdGUoe1xuICAgICAgICAgICAgLi4udGhpcy5fdGFibGUuZ2V0VGFibGVTdGF0ZSgpLFxuICAgICAgICAgICAgc2Nyb2xsVG9wUG9zaXRpb246IHRoaXMucm93SGVpZ2h0ICogc3RhcnRpbmdOb2RlXG4gICAgICAgIH0pO1xuICAgIH1cbn1cbiJdfQ==
|