ngx-histaff-alpha 3.3.5 → 3.3.6
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/app/libraries/core-shift-cell/core-shift-cell.component.mjs +64 -35
- package/esm2022/lib/app/libraries/core-table/core-table.component.mjs +5 -4
- package/fesm2022/ngx-histaff-alpha.mjs +64 -36
- package/fesm2022/ngx-histaff-alpha.mjs.map +1 -1
- package/lib/app/libraries/core-shift-cell/core-shift-cell.component.d.ts +15 -3
- package/package.json +1 -1
|
@@ -1,22 +1,32 @@
|
|
|
1
|
-
import { ChangeDetectionStrategy, Component, input, viewChild, signal } from '@angular/core';
|
|
1
|
+
import { ChangeDetectionStrategy, Component, input, viewChild, signal, Output, EventEmitter } from '@angular/core';
|
|
2
2
|
import { CoreShiftStickerComponent } from '../core-shift-sticker/core-shift-sticker.component';
|
|
3
|
-
import { fromEvent } from 'rxjs';
|
|
3
|
+
import { BehaviorSubject, debounceTime, filter, fromEvent, Subscription } from 'rxjs';
|
|
4
4
|
import { CoreFormControlBaseComponent } from '../core-form-control-base/core-form-control-base.component';
|
|
5
5
|
import { NG_VALUE_ACCESSOR } from '@angular/forms';
|
|
6
|
+
import { EnumTranslateKey } from 'alpha-global-constants';
|
|
6
7
|
import * as i0 from "@angular/core";
|
|
7
8
|
import * as i1 from "../../services/work-shift-dnd.service";
|
|
9
|
+
import * as i2 from "../../services/dialog.service";
|
|
8
10
|
export class CoreShiftCellComponent extends CoreFormControlBaseComponent {
|
|
9
11
|
writeValue(obj) {
|
|
10
12
|
this.$shifts.set(obj);
|
|
11
13
|
}
|
|
12
|
-
constructor(cdr, workShiftDndService) {
|
|
14
|
+
constructor(cdr, workShiftDndService, dialogService) {
|
|
13
15
|
super();
|
|
14
16
|
this.cdr = cdr;
|
|
15
17
|
this.workShiftDndService = workShiftDndService;
|
|
18
|
+
this.dialogService = dialogService;
|
|
19
|
+
this.onDrop = new EventEmitter();
|
|
16
20
|
this.$backgroundColor = input('white');
|
|
17
21
|
this.$container = viewChild('container');
|
|
18
22
|
this.shiftCellId = crypto.randomUUID();
|
|
19
23
|
this.dragElements = new Set();
|
|
24
|
+
this.dndEventSubscriptions = {
|
|
25
|
+
dragenter: new Subscription(() => null),
|
|
26
|
+
dragover: new Subscription(() => null),
|
|
27
|
+
drop: new Subscription(() => null),
|
|
28
|
+
dragleave: new Subscription(() => null)
|
|
29
|
+
};
|
|
20
30
|
this.$shifts = signal([
|
|
21
31
|
{
|
|
22
32
|
code: 'X',
|
|
@@ -52,68 +62,85 @@ export class CoreShiftCellComponent extends CoreFormControlBaseComponent {
|
|
|
52
62
|
hoursStop: new Date(2024, 7, 13, 17, 30, 0)
|
|
53
63
|
}
|
|
54
64
|
]);
|
|
65
|
+
this.onDropStream$ = new BehaviorSubject('');
|
|
55
66
|
}
|
|
56
67
|
ngAfterViewInit() {
|
|
57
68
|
setTimeout(() => {
|
|
69
|
+
this.onDropStream$.pipe(filter(x => !!x.length), debounceTime(500)).subscribe(x => {
|
|
70
|
+
this.onDrop.emit(true);
|
|
71
|
+
});
|
|
58
72
|
const containerElement = this.$container()?.nativeElement;
|
|
59
73
|
containerElement.style.setProperty('--background-color', this.$backgroundColor());
|
|
60
74
|
this.cdr.markForCheck();
|
|
61
|
-
fromEvent(containerElement, 'dragenter')
|
|
75
|
+
const dragenterEvent = fromEvent(containerElement, 'dragenter');
|
|
76
|
+
const dragoverEvent = fromEvent(containerElement, 'dragover');
|
|
77
|
+
const dropEvent = fromEvent(containerElement, 'drop');
|
|
78
|
+
const dragleaveEvent = fromEvent(containerElement, 'dragleave');
|
|
79
|
+
this.dndEventSubscriptions.dragenter = dragenterEvent.subscribe((ev) => {
|
|
62
80
|
ev.preventDefault();
|
|
63
81
|
if (this.workShiftDndService.draggingFromCellId$.value === this.shiftCellId)
|
|
64
82
|
return;
|
|
65
83
|
this.dragElements.add(ev.target);
|
|
66
84
|
containerElement.classList.add('valid-drop');
|
|
67
|
-
//containerElement.classList.remove('invalid-drop');
|
|
68
85
|
if (this.workShiftDndService.draggingData$.value.split(':')[0] !== this.shiftCellId) {
|
|
69
86
|
this.$container()?.nativeElement.style.setProperty('--background-color', '#fff4ce');
|
|
70
87
|
this.cdr.markForCheck();
|
|
71
88
|
}
|
|
89
|
+
// Subscribe to dragover event to allow drop
|
|
90
|
+
this.dndEventSubscriptions.dragover = dragoverEvent.subscribe((ev) => {
|
|
91
|
+
ev.preventDefault();
|
|
92
|
+
this.workShiftDndService.dragoverCellId$.next(this.shiftCellId);
|
|
93
|
+
});
|
|
94
|
+
// Subscribe to drop event
|
|
95
|
+
this.dndEventSubscriptions.drop = dropEvent.subscribe((ev) => {
|
|
96
|
+
ev.preventDefault();
|
|
97
|
+
if (this.workShiftDndService.draggingFromCellId$.value === this.shiftCellId)
|
|
98
|
+
return;
|
|
99
|
+
this.dragElements.clear(); // Clear the set
|
|
100
|
+
containerElement.classList.remove('valid-drop');
|
|
101
|
+
this.$container()?.nativeElement.style.setProperty('--background-color', this.$backgroundColor());
|
|
102
|
+
this.cdr.markForCheck();
|
|
103
|
+
const data = ev.dataTransfer?.getData('text/plain'); // Example data retrieval
|
|
104
|
+
this.dialogService.createNew(EnumTranslateKey.UI_GRID_FORM_BUTTON_INFORMATION, undefined, undefined, undefined, EnumTranslateKey.UI_GRID_FORM_BUTTON_INFORMATION, [
|
|
105
|
+
"shiftId: " + this.workShiftDndService.draggingShift$.value?.id,
|
|
106
|
+
"shiftCode: " + this.workShiftDndService.draggingShift$.value?.code,
|
|
107
|
+
"dragoverCellId: " + this.workShiftDndService.dragoverCellId$.value,
|
|
108
|
+
"**************",
|
|
109
|
+
"WHATEVER LOGIC CAN BE ADDED WITH (onDrop) @Output() AND USING WorkShiftDndService"
|
|
110
|
+
]);
|
|
111
|
+
this.onDropStream$.next(this.shiftCellId);
|
|
112
|
+
// Handle drop logic based on data
|
|
113
|
+
if (data) {
|
|
114
|
+
// Process dropped data here
|
|
115
|
+
console.log('Dropped data:', data);
|
|
116
|
+
}
|
|
117
|
+
});
|
|
72
118
|
});
|
|
73
|
-
|
|
74
|
-
fromEvent(containerElement, 'dragover').subscribe((ev) => {
|
|
75
|
-
ev.preventDefault();
|
|
76
|
-
});
|
|
77
|
-
fromEvent(containerElement, 'dragleave')
|
|
78
|
-
.subscribe((ev) => {
|
|
119
|
+
this.dndEventSubscriptions.dragleave = dragleaveEvent.subscribe((ev) => {
|
|
79
120
|
ev.preventDefault();
|
|
80
121
|
if (this.workShiftDndService.draggingFromCellId$.value === this.shiftCellId)
|
|
81
122
|
return;
|
|
82
123
|
this.dragElements.delete(ev.target);
|
|
83
124
|
if (this.dragElements.size === 0) {
|
|
84
125
|
containerElement.classList.remove('valid-drop');
|
|
85
|
-
//containerElement.classList.add('invalid-drop');
|
|
86
126
|
}
|
|
87
127
|
this.$container()?.nativeElement.style.setProperty('--background-color', this.$backgroundColor());
|
|
88
128
|
this.cdr.markForCheck();
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
if (this.workShiftDndService.draggingFromCellId$.value === this.shiftCellId)
|
|
94
|
-
return;
|
|
95
|
-
this.dragElements.clear(); // Clear the set
|
|
96
|
-
//containerElement.classList.remove('valid-drop', 'invalid-drop');
|
|
97
|
-
containerElement.classList.remove('valid-drop');
|
|
98
|
-
this.$container()?.nativeElement.style.setProperty('--background-color', this.$backgroundColor());
|
|
99
|
-
this.cdr.markForCheck();
|
|
100
|
-
const data = ev.dataTransfer?.getData('text/plain'); // Example data retrieval
|
|
101
|
-
// Handle drop logic based on data
|
|
102
|
-
if (data) {
|
|
103
|
-
// Process dropped data here
|
|
104
|
-
console.log('Dropped data:', data);
|
|
105
|
-
}
|
|
129
|
+
this.dndEventSubscriptions.dragover?.unsubscribe();
|
|
130
|
+
this.dndEventSubscriptions.drop?.unsubscribe();
|
|
131
|
+
this.dndEventSubscriptions.dragover = undefined;
|
|
132
|
+
this.dndEventSubscriptions.drop = undefined;
|
|
106
133
|
});
|
|
107
134
|
});
|
|
108
135
|
}
|
|
109
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.3", ngImport: i0, type: CoreShiftCellComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.WorkShiftDndService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
110
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.2.3", type: CoreShiftCellComponent, isStandalone: true, selector: "core-shift-cell", inputs: { $backgroundColor: { classPropertyName: "$backgroundColor", publicName: "$backgroundColor", isSignal: true, isRequired: false, transformFunction: null } }, providers: [
|
|
136
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.3", ngImport: i0, type: CoreShiftCellComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.WorkShiftDndService }, { token: i2.DialogService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
137
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.2.3", type: CoreShiftCellComponent, isStandalone: true, selector: "core-shift-cell", inputs: { $backgroundColor: { classPropertyName: "$backgroundColor", publicName: "$backgroundColor", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { onDrop: "onDrop" }, providers: [
|
|
111
138
|
{
|
|
112
139
|
provide: NG_VALUE_ACCESSOR,
|
|
113
140
|
multi: true,
|
|
114
141
|
useExisting: CoreShiftCellComponent
|
|
115
142
|
}
|
|
116
|
-
], viewQueries: [{ propertyName: "$container", first: true, predicate: ["container"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "<div #container class=\"core-shift-cell-container\">\r\n @for (shift of $shifts(); track $index) {\r\n <core-shift-sticker [$shift]=\"shift\" [$shiftCellId]=\"shiftCellId\" [$width]=\"228\"></core-shift-sticker>\r\n }\r\n</div>\r\n", styles: [".core-shift-cell-container{--background-color: #000000;padding:15px;background-color:var(--background-color)}.core-shift-cell-container.valid-drop{background-color:#90ee90}.core-shift-cell-container.invalid-drop{background-color:#f08080}\n"], dependencies: [{ kind: "component", type: CoreShiftStickerComponent, selector: "core-shift-sticker", inputs: ["$shift", "$shiftCellId", "checked", "$height", "$width"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
143
|
+
], viewQueries: [{ propertyName: "$container", first: true, predicate: ["container"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "<div #container class=\"core-shift-cell-container\">\r\n @for (shift of $shifts(); track $index) {\r\n <core-shift-sticker [$shift]=\"shift\" [$shiftCellId]=\"shiftCellId\" [$width]=\"228\"></core-shift-sticker>\r\n }\r\n</div>\r\n", styles: [".core-shift-cell-container{--background-color: #000000;padding:15px;background-color:var(--background-color);animation:fadeIn .2s ease-in}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}.core-shift-cell-container.valid-drop{background-color:#90ee90}.core-shift-cell-container.invalid-drop{background-color:#f08080}\n"], dependencies: [{ kind: "component", type: CoreShiftStickerComponent, selector: "core-shift-sticker", inputs: ["$shift", "$shiftCellId", "checked", "$height", "$width"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
117
144
|
}
|
|
118
145
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.3", ngImport: i0, type: CoreShiftCellComponent, decorators: [{
|
|
119
146
|
type: Component,
|
|
@@ -125,6 +152,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.3", ngImpor
|
|
|
125
152
|
multi: true,
|
|
126
153
|
useExisting: CoreShiftCellComponent
|
|
127
154
|
}
|
|
128
|
-
], template: "<div #container class=\"core-shift-cell-container\">\r\n @for (shift of $shifts(); track $index) {\r\n <core-shift-sticker [$shift]=\"shift\" [$shiftCellId]=\"shiftCellId\" [$width]=\"228\"></core-shift-sticker>\r\n }\r\n</div>\r\n", styles: [".core-shift-cell-container{--background-color: #000000;padding:15px;background-color:var(--background-color)}.core-shift-cell-container.valid-drop{background-color:#90ee90}.core-shift-cell-container.invalid-drop{background-color:#f08080}\n"] }]
|
|
129
|
-
}], ctorParameters: () => [{ type: i0.ChangeDetectorRef }, { type: i1.WorkShiftDndService }]
|
|
130
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29yZS1zaGlmdC1jZWxsLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1oaXN0YWZmLWFscGhhL3NyYy9saWIvYXBwL2xpYnJhcmllcy9jb3JlLXNoaWZ0LWNlbGwvY29yZS1zaGlmdC1jZWxsLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1oaXN0YWZmLWFscGhhL3NyYy9saWIvYXBwL2xpYnJhcmllcy9jb3JlLXNoaWZ0LWNlbGwvY29yZS1zaGlmdC1jZWxsLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBaUIsdUJBQXVCLEVBQUUsU0FBUyxFQUFjLEtBQUssRUFBRSxTQUFTLEVBQXFDLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzSixPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxvREFBb0QsQ0FBQztBQUUvRixPQUFPLEVBQXdCLFNBQVMsRUFBNEIsTUFBTSxNQUFNLENBQUM7QUFFakYsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0sNERBQTRELENBQUM7QUFDMUcsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7OztBQW1CbkQsTUFBTSxPQUFPLHNCQUF1QixTQUFRLDRCQUE0QjtJQUk3RCxVQUFVLENBQUMsR0FBZTtRQUNqQyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUN4QixDQUFDO0lBNENELFlBQ1UsR0FBc0IsRUFDdEIsbUJBQXdDO1FBRWhELEtBQUssRUFBRSxDQUFDO1FBSEEsUUFBRyxHQUFILEdBQUcsQ0FBbUI7UUFDdEIsd0JBQW1CLEdBQW5CLG1CQUFtQixDQUFxQjtRQTVDbEQscUJBQWdCLEdBQUcsS0FBSyxDQUFTLE9BQU8sQ0FBQyxDQUFDO1FBQzFDLGVBQVUsR0FBRyxTQUFTLENBQWEs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QUFLLEVBQUUsSUFBSTs0QkFDWCxXQUFXLHdCQUF3Qjt5QkFDcEM7cUJBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBZnRlclZpZXdJbml0LCBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBpbnB1dCwgdmlld0NoaWxkLCBDaGFuZ2VEZXRlY3RvclJlZiwgV3JpdGFibGVTaWduYWwsIHNpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBDb3JlU2hpZnRTdGlja2VyQ29tcG9uZW50IH0gZnJvbSAnLi4vY29yZS1zaGlmdC1zdGlja2VyL2NvcmUtc2hpZnQtc3RpY2tlci5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBJQXRTaGlmdCB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvdGltZS1tYW5hZ2VtZW50L0lBdFNoaWZ0JztcclxuaW1wb3J0IHsgZGVib3VuY2VUaW1lLCBmaWx0ZXIsIGZyb21FdmVudCwgT2JzZXJ2YWJsZSwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IFdvcmtTaGlmdERuZFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy93b3JrLXNoaWZ0LWRuZC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQ29yZUZvcm1Db250cm9sQmFzZUNvbXBvbmVudCB9IGZyb20gJy4uL2NvcmUtZm9ybS1jb250cm9sLWJhc2UvY29yZS1mb3JtLWNvbnRyb2wtYmFzZS5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBOR19WQUxVRV9BQ0NFU1NPUiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnY29yZS1zaGlmdC1jZWxsJyxcclxuICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxyXG4gIGltcG9ydHM6IFtcclxuICAgIENvcmVTaGlmdFN0aWNrZXJDb21wb25lbnRcclxuICBdLFxyXG4gIHByb3ZpZGVyczogW1xyXG4gICAge1xyXG4gICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcclxuICAgICAgbXVsdGk6IHRydWUsXHJcbiAgICAgIHVzZUV4aXN0aW5nOiBDb3JlU2hpZnRDZWxsQ29tcG9uZW50XHJcbiAgICB9XHJcbiAgXSxcclxuICB0ZW1wbGF0ZVVybDogJy4vY29yZS1zaGlmdC1jZWxsLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybDogJy4vY29yZS1zaGlmdC1jZWxsLmNvbXBvbmVudC5zY3NzJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgQ29yZVNoaWZ0Q2VsbENvbXBvbmVudCBleHRlbmRzIENvcmVGb3JtQ29udHJvbEJhc2VDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0IHtcclxuXHJcbiAgb3ZlcnJpZGUgdmFsdWUhOiBJQXRTaGlmdFtdO1xyXG5cclxuICBvdmVycmlkZSB3cml0ZVZhbHVlKG9iajogSUF0U2hpZnRbXSk6IHZvaWQge1xyXG4gICAgdGhpcy4kc2hpZnRzLnNldChvYmopO1xyXG4gIH1cclxuXHJcbiAgJGJhY2tncm91bmRDb2xvciA9IGlucHV0PHN0cmluZz4oJ3doaXRlJyk7XHJcbiAgJGNvbnRhaW5lciA9IHZpZXdDaGlsZDxFbGVtZW50UmVmPignY29udGFpbmVyJyk7XHJcbiAgc2hpZnRDZWxsSWQ6IHN0cmluZyA9IGNyeXB0by5yYW5kb21VVUlEKCk7XHJcblxyXG4gIHByaXZhdGUgZHJhZ0VsZW1lbnRzOiBTZXQ8RXZlbnRUYXJnZXQ+ID0gbmV3IFNldCgpO1xyXG5cclxuICAkc2hpZnRzOiBXcml0YWJsZVNpZ25hbDxJQXRTaGlmdFtdPiA9IHNpZ25hbChbXHJcbiAgICB7XHJcbiAgICAgIGNvZGU6ICdYJyxcclxuICAgICAgbmFtZTogJ0NhIGzDoG0gdmnhu4djIG5nw6B5IHRoxrDhu51uZycsXHJcbiAgICAgIHN5bWJvbDoge1xyXG4gICAgICAgIGNvZGU6ICdYJyxcclxuICAgICAgICBuYW1lOiAnWCcsXHJcbiAgICAgICAgaXNIYXZlU2FsOiB0cnVlLFxyXG4gICAgICB9LFxyXG4gICAgICBob3Vyc1N0YXJ0OiBuZXcgRGF0ZSgyMDI0LCA3LCAxMywgOCwgMCwgMCksXHJcbiAgICAgIGhvdXJzU3RvcDogbmV3IERhdGUoMjAyNCwgNywgMTMsIDE3LCAzMCwgMClcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIGNvZGU6ICdPRkYnLFxyXG4gICAgICBuYW1lOiAnQ2EgbmfDoHkgbmdo4buJJyxcclxuICAgICAgc3ltYm9sOiB7XHJcbiAgICAgICAgY29kZTogJ09GRicsXHJcbiAgICAgICAgbmFtZTogJ09GRicsXHJcbiAgICAgICAgaXNPZmY6IHRydWUsXHJcbiAgICAgIH0sXHJcbiAgICAgIGhvdXJzU3RhcnQ6IG5ldyBEYXRlKDIwMjQsIDcsIDEzLCA4LCAwLCAwKSxcclxuICAgICAgaG91cnNTdG9wOiBuZXcgRGF0ZSgyMDI0LCA3LCAxMywgMTcsIDMwLCAwKVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgY29kZTogJ0NUJyxcclxuICAgICAgbmFtZTogJ0NhIGPDtG5nIHTDoWMnLFxyXG4gICAgICBzeW1ib2w6IHtcclxuICAgICAgICBjb2RlOiAnQ1QnLFxyXG4gICAgICAgIG5hbWU6ICdDUicsXHJcbiAgICAgICAgaXNSZWdpc3RlcjogdHJ1ZSxcclxuICAgICAgfSxcclxuICAgICAgaG91cnNTdGFydDogbmV3IERhdGUoMjAyNCwgNywgMTMsIDgsIDAsIDApLFxyXG4gICAgICBob3Vyc1N0b3A6IG5ldyBEYXRlKDIwMjQsIDcsIDEzLCAxNywgMzAsIDApXHJcbiAgICB9XHJcbiAgXSk7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmLFxyXG4gICAgcHJpdmF0ZSB3b3JrU2hpZnREbmRTZXJ2aWNlOiBXb3JrU2hpZnREbmRTZXJ2aWNlXHJcbiAgKSB7XHJcbiAgICBzdXBlcigpO1xyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIGNvbnN0IGNvbnRhaW5lckVsZW1lbnQgPSB0aGlzLiRjb250YWluZXIoKT8ubmF0aXZlRWxlbWVudDtcclxuXHJcbiAgICAgIGNvbnRhaW5lckVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoJy0tYmFja2dyb3VuZC1jb2xvcicsIHRoaXMuJGJhY2tncm91bmRDb2xvcigpKTtcclxuICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XHJcblxyXG4gICAgICBmcm9tRXZlbnQoY29udGFpbmVyRWxlbWVudCwgJ2RyYWdlbnRlcicpLnN1YnNjcmliZSgoZXY6IGFueSkgPT4ge1xyXG4gICAgICAgIGV2LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgaWYgKHRoaXMud29ya1NoaWZ0RG5kU2VydmljZS5kcmFnZ2luZ0Zyb21DZWxsSWQkLnZhbHVlID09PSB0aGlzLnNoaWZ0Q2VsbElkKSByZXR1cm5cclxuICAgICAgICB0aGlzLmRyYWdFbGVtZW50cy5hZGQoZXYudGFyZ2V0IGFzIEV2ZW50VGFyZ2V0KTtcclxuICAgICAgICBjb250YWluZXJFbGVtZW50LmNsYXNzTGlzdC5hZGQoJ3ZhbGlkLWRyb3AnKTtcclxuICAgICAgICAvL2NvbnRhaW5lckVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZSgnaW52YWxpZC1kcm9wJyk7XHJcbiAgICAgICAgaWYgKHRoaXMud29ya1NoaWZ0RG5kU2VydmljZS5kcmFnZ2luZ0RhdGEkLnZhbHVlLnNwbGl0KCc6JylbMF0gIT09IHRoaXMuc2hpZnRDZWxsSWQpIHtcclxuICAgICAgICAgIHRoaXMuJGNvbnRhaW5lcigpPy5uYXRpdmVFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KCctLWJhY2tncm91bmQtY29sb3InLCAnI2ZmZjRjZScpO1xyXG4gICAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIC8vIFN1YnNjcmliZSB0byBkcmFnb3ZlciBldmVudCB0byBhbGxvdyBkcm9wXHJcbiAgICAgIGZyb21FdmVudChjb250YWluZXJFbGVtZW50LCAnZHJhZ292ZXInKS5zdWJzY3JpYmUoKGV2OiBhbnkpID0+IHtcclxuICAgICAgICBldi5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIGZyb21FdmVudChjb250YWluZXJFbGVtZW50LCAnZHJhZ2xlYXZlJylcclxuICAgICAgICAuc3Vic2NyaWJlKChldjogYW55KSA9PiB7XHJcbiAgICAgICAgICBldi5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgaWYgKHRoaXMud29ya1NoaWZ0RG5kU2VydmljZS5kcmFnZ2luZ0Zyb21DZWxsSWQkLnZhbHVlID09PSB0aGlzLnNoaWZ0Q2VsbElkKSByZXR1cm5cclxuICAgICAgICAgIHRoaXMuZHJhZ0VsZW1lbnRzLmRlbGV0ZShldi50YXJnZXQgYXMgRXZlbnRUYXJnZXQpO1xyXG4gICAgICAgICAgaWYgKHRoaXMuZHJhZ0VsZW1lbnRzLnNpemUgPT09IDApIHtcclxuICAgICAgICAgICAgY29udGFpbmVyRWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKCd2YWxpZC1kcm9wJyk7XHJcbiAgICAgICAgICAgIC8vY29udGFpbmVyRWxlbWVudC5jbGFzc0xpc3QuYWRkKCdpbnZhbGlkLWRyb3AnKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMuJGNvbnRhaW5lcigpPy5uYXRpdmVFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KCctLWJhY2tncm91bmQtY29sb3InLCB0aGlzLiRiYWNrZ3JvdW5kQ29sb3IoKSk7XHJcbiAgICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgIC8vIFN1YnNjcmliZSB0byBkcm9wIGV2ZW50XHJcbiAgICAgIGZyb21FdmVudChjb250YWluZXJFbGVtZW50LCAnZHJvcCcpLnN1YnNjcmliZSgoZXY6IGFueSkgPT4ge1xyXG4gICAgICAgIGV2LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgaWYgKHRoaXMud29ya1NoaWZ0RG5kU2VydmljZS5kcmFnZ2luZ0Zyb21DZWxsSWQkLnZhbHVlID09PSB0aGlzLnNoaWZ0Q2VsbElkKSByZXR1cm5cclxuICAgICAgICB0aGlzLmRyYWdFbGVtZW50cy5jbGVhcigpOyAvLyBDbGVhciB0aGUgc2V0XHJcbiAgICAgICAgLy9jb250YWluZXJFbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoJ3ZhbGlkLWRyb3AnLCAnaW52YWxpZC1kcm9wJyk7XHJcbiAgICAgICAgY29udGFpbmVyRWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKCd2YWxpZC1kcm9wJyk7XHJcblxyXG4gICAgICAgIHRoaXMuJGNvbnRhaW5lcigpPy5uYXRpdmVFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KCctLWJhY2tncm91bmQtY29sb3InLCB0aGlzLiRiYWNrZ3JvdW5kQ29sb3IoKSk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XHJcblxyXG4gICAgICAgIGNvbnN0IGRhdGEgPSBldi5kYXRhVHJhbnNmZXI/LmdldERhdGEoJ3RleHQvcGxhaW4nKTsgLy8gRXhhbXBsZSBkYXRhIHJldHJpZXZhbFxyXG5cclxuICAgICAgICAvLyBIYW5kbGUgZHJvcCBsb2dpYyBiYXNlZCBvbiBkYXRhXHJcbiAgICAgICAgaWYgKGRhdGEpIHtcclxuICAgICAgICAgIC8vIFByb2Nlc3MgZHJvcHBlZCBkYXRhIGhlcmVcclxuICAgICAgICAgIGNvbnNvbGUubG9nKCdEcm9wcGVkIGRhdGE6JywgZGF0YSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbn1cclxuIiwiPGRpdiAjY29udGFpbmVyIGNsYXNzPVwiY29yZS1zaGlmdC1jZWxsLWNvbnRhaW5lclwiPlxyXG4gICAgQGZvciAoc2hpZnQgb2YgJHNoaWZ0cygpOyB0cmFjayAkaW5kZXgpIHtcclxuICAgICAgICA8Y29yZS1zaGlmdC1zdGlja2VyIFskc2hpZnRdPVwic2hpZnRcIiBbJHNoaWZ0Q2VsbElkXT1cInNoaWZ0Q2VsbElkXCIgWyR3aWR0aF09XCIyMjhcIj48L2NvcmUtc2hpZnQtc3RpY2tlcj5cclxuICAgIH1cclxuPC9kaXY+XHJcbiJdfQ==
|
|
155
|
+
], template: "<div #container class=\"core-shift-cell-container\">\r\n @for (shift of $shifts(); track $index) {\r\n <core-shift-sticker [$shift]=\"shift\" [$shiftCellId]=\"shiftCellId\" [$width]=\"228\"></core-shift-sticker>\r\n }\r\n</div>\r\n", styles: [".core-shift-cell-container{--background-color: #000000;padding:15px;background-color:var(--background-color);animation:fadeIn .2s ease-in}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}.core-shift-cell-container.valid-drop{background-color:#90ee90}.core-shift-cell-container.invalid-drop{background-color:#f08080}\n"] }]
|
|
156
|
+
}], ctorParameters: () => [{ type: i0.ChangeDetectorRef }, { type: i1.WorkShiftDndService }, { type: i2.DialogService }], propDecorators: { onDrop: [{
|
|
157
|
+
type: Output
|
|
158
|
+
}] } });
|
|
159
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29yZS1zaGlmdC1jZWxsLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1oaXN0YWZmLWFscGhhL3NyYy9saWIvYXBwL2xpYnJhcmllcy9jb3JlLXNoaWZ0LWNlbGwvY29yZS1zaGlmdC1jZWxsLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1oaXN0YWZmLWFscGhhL3NyYy9saWIvYXBwL2xpYnJhcmllcy9jb3JlLXNoaWZ0LWNlbGwvY29yZS1zaGlmdC1jZWxsLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBaUIsdUJBQXVCLEVBQUUsU0FBUyxFQUFjLEtBQUssRUFBRSxTQUFTLEVBQXFDLE1BQU0sRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2pMLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLG9EQUFvRCxDQUFDO0FBRS9GLE9BQU8sRUFBRSxlQUFlLEVBQUUsWUFBWSxFQUF3QixNQUFNLEVBQUUsU0FBUyxFQUFjLFlBQVksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUV4SCxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSw0REFBNEQsQ0FBQztBQUMxRyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVuRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQzs7OztBQTBCMUQsTUFBTSxPQUFPLHNCQUF1QixTQUFRLDRCQUE0QjtJQU03RCxVQUFVLENBQUMsR0FBZTtRQUNqQyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUN4QixDQUFDO0lBcURELFlBQ1UsR0FBc0IsRUFDdEIsbUJBQXdDLEVBQ3hDLGFBQTRCO1FBRXBDLEtBQUssRUFBRSxDQUFDO1FBSkEsUUFBRyxH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QVksQ0FBQyxDQUFDO2lCQUNqRDtnQkFDRCxJQUFJLENBQUMsVUFBVSxFQUFFLEVBQUUsYUFBYSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsb0JBQW9CLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUMsQ0FBQztnQkFDbEcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsQ0FBQztnQkFFeEIsSUFBSSxDQUFDLHFCQUFxQixDQUFDLFFBQVEsRUFBRSxXQUFXLEVBQUUsQ0FBQztnQkFDbkQsSUFBSSxDQUFDLHFCQUFxQixDQUFDLElBQUksRUFBRSxXQUFXLEVBQUUsQ0FBQztnQkFFL0MsSUFBSSxDQUFDLHFCQUFxQixDQUFDLFFBQVEsR0FBRyxTQUFTLENBQUM7Z0JBQ2hELElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLEdBQUcsU0FBUyxDQUFDO1lBRTlDLENBQUMsQ0FBQyxDQUFDO1FBRUwsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDOzhHQXBLVSxzQkFBc0I7a0dBQXRCLHNCQUFzQixrUUFWdEI7WUFDVDtnQkFDRSxPQUFPLEVBQUUsaUJBQWlCO2dCQUMxQixLQUFLLEVBQUUsSUFBSTtnQkFDWCxXQUFXLEVBQUUsc0JBQXNCO2FBQ3BDO1NBQ0YsMEtDOUJILHNQQUtBLG1YRGlCSSx5QkFBeUI7OzJGQVloQixzQkFBc0I7a0JBakJsQyxTQUFTOytCQUNFLGlCQUFpQixjQUNmLElBQUksbUJBQ0MsdUJBQXVCLENBQUMsTUFBTSxXQUN0Qzt3QkFDUCx5QkFBeUI7cUJBQzFCLGFBQ1U7d0JBQ1Q7NEJBQ0UsT0FBTyxFQUFFLGlCQUFpQjs0QkFDMUIsS0FBSyxFQUFFLElBQUk7NEJBQ1gsV0FBVyx3QkFBd0I7eUJBQ3BDO3FCQUNGO29KQU1TLE1BQU07c0JBQWYsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFmdGVyVmlld0luaXQsIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIEVsZW1lbnRSZWYsIGlucHV0LCB2aWV3Q2hpbGQsIENoYW5nZURldGVjdG9yUmVmLCBXcml0YWJsZVNpZ25hbCwgc2lnbmFsLCBPdXRwdXQsIEV2ZW50RW1pdHRlciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBDb3JlU2hpZnRTdGlja2VyQ29tcG9uZW50IH0gZnJvbSAnLi4vY29yZS1zaGlmdC1zdGlja2VyL2NvcmUtc2hpZnQtc3RpY2tlci5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBJQXRTaGlmdCB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvdGltZS1tYW5hZ2VtZW50L0lBdFNoaWZ0JztcclxuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBkZWJvdW5jZVRpbWUsIGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBmaWx0ZXIsIGZyb21FdmVudCwgT2JzZXJ2YWJsZSwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IFdvcmtTaGlmdERuZFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy93b3JrLXNoaWZ0LWRuZC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQ29yZUZvcm1Db250cm9sQmFzZUNvbXBvbmVudCB9IGZyb20gJy4uL2NvcmUtZm9ybS1jb250cm9sLWJhc2UvY29yZS1mb3JtLWNvbnRyb2wtYmFzZS5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBOR19WQUxVRV9BQ0NFU1NPUiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgRGlhbG9nU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2RpYWxvZy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRW51bVRyYW5zbGF0ZUtleSB9IGZyb20gJ2FscGhhLWdsb2JhbC1jb25zdGFudHMnO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJRHJvcHBhYmxlRXZlbnRTdWJzY3JpcHRpb24ge1xyXG4gIGRyYWdlbnRlcjogU3Vic2NyaXB0aW9uIHwgdW5kZWZpbmVkLFxyXG4gIGRyYWdvdmVyOiBTdWJzY3JpcHRpb24gfCB1bmRlZmluZWQsXHJcbiAgZHJhZ2xlYXZlOiBTdWJzY3JpcHRpb24gfCB1bmRlZmluZWQsXHJcbiAgZHJvcDogU3Vic2NyaXB0aW9uIHwgdW5kZWZpbmVkXHJcbn1cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnY29yZS1zaGlmdC1jZWxsJyxcclxuICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxyXG4gIGltcG9ydHM6IFtcclxuICAgIENvcmVTaGlmdFN0aWNrZXJDb21wb25lbnRcclxuICBdLFxyXG4gIHByb3ZpZGVyczogW1xyXG4gICAge1xyXG4gICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcclxuICAgICAgbXVsdGk6IHRydWUsXHJcbiAgICAgIHVzZUV4aXN0aW5nOiBDb3JlU2hpZnRDZWxsQ29tcG9uZW50XHJcbiAgICB9XHJcbiAgXSxcclxuICB0ZW1wbGF0ZVVybDogJy4vY29yZS1zaGlmdC1jZWxsLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybDogJy4vY29yZS1zaGlmdC1jZWxsLmNvbXBvbmVudC5zY3NzJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgQ29yZVNoaWZ0Q2VsbENvbXBvbmVudCBleHRlbmRzIENvcmVGb3JtQ29udHJvbEJhc2VDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0IHtcclxuXHJcbiAgQE91dHB1dCgpIG9uRHJvcCA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcclxuXHJcbiAgb3ZlcnJpZGUgdmFsdWUhOiBJQXRTaGlmdFtdO1xyXG5cclxuICBvdmVycmlkZSB3cml0ZVZhbHVlKG9iajogSUF0U2hpZnRbXSk6IHZvaWQge1xyXG4gICAgdGhpcy4kc2hpZnRzLnNldChvYmopO1xyXG4gIH1cclxuXHJcbiAgJGJhY2tncm91bmRDb2xvciA9IGlucHV0PHN0cmluZz4oJ3doaXRlJyk7XHJcbiAgJGNvbnRhaW5lciA9IHZpZXdDaGlsZDxFbGVtZW50UmVmPignY29udGFpbmVyJyk7XHJcbiAgc2hpZnRDZWxsSWQ6IHN0cmluZyA9IGNyeXB0by5yYW5kb21VVUlEKCk7XHJcblxyXG4gIHByaXZhdGUgZHJhZ0VsZW1lbnRzOiBTZXQ8RXZlbnRUYXJnZXQ+ID0gbmV3IFNldCgpO1xyXG5cclxuICBkbmRFdmVudFN1YnNjcmlwdGlvbnM6IElEcm9wcGFibGVFdmVudFN1YnNjcmlwdGlvbiA9IHtcclxuICAgIGRyYWdlbnRlcjogbmV3IFN1YnNjcmlwdGlvbigoKSA9PiBudWxsKSxcclxuICAgIGRyYWdvdmVyOiBuZXcgU3Vic2NyaXB0aW9uKCgpID0+IG51bGwpLFxyXG4gICAgZHJvcDogbmV3IFN1YnNjcmlwdGlvbigoKSA9PiBudWxsKSxcclxuICAgIGRyYWdsZWF2ZTogbmV3IFN1YnNjcmlwdGlvbigoKSA9PiBudWxsKVxyXG4gIH1cclxuXHJcbiAgJHNoaWZ0czogV3JpdGFibGVTaWduYWw8SUF0U2hpZnRbXT4gPSBzaWduYWwoW1xyXG4gICAge1xyXG4gICAgICBjb2RlOiAnWCcsXHJcbiAgICAgIG5hbWU6ICdDYSBsw6BtIHZp4buHYyBuZ8OgeSB0aMaw4budbmcnLFxyXG4gICAgICBzeW1ib2w6IHtcclxuICAgICAgICBjb2RlOiAnWCcsXHJcbiAgICAgICAgbmFtZTogJ1gnLFxyXG4gICAgICAgIGlzSGF2ZVNhbDogdHJ1ZSxcclxuICAgICAgfSxcclxuICAgICAgaG91cnNTdGFydDogbmV3IERhdGUoMjAyNCwgNywgMTMsIDgsIDAsIDApLFxyXG4gICAgICBob3Vyc1N0b3A6IG5ldyBEYXRlKDIwMjQsIDcsIDEzLCAxNywgMzAsIDApXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBjb2RlOiAnT0ZGJyxcclxuICAgICAgbmFtZTogJ0NhIG5nw6B5IG5naOG7iScsXHJcbiAgICAgIHN5bWJvbDoge1xyXG4gICAgICAgIGNvZGU6ICdPRkYnLFxyXG4gICAgICAgIG5hbWU6ICdPRkYnLFxyXG4gICAgICAgIGlzT2ZmOiB0cnVlLFxyXG4gICAgICB9LFxyXG4gICAgICBob3Vyc1N0YXJ0OiBuZXcgRGF0ZSgyMDI0LCA3LCAxMywgOCwgMCwgMCksXHJcbiAgICAgIGhvdXJzU3RvcDogbmV3IERhdGUoMjAyNCwgNywgMTMsIDE3LCAzMCwgMClcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIGNvZGU6ICdDVCcsXHJcbiAgICAgIG5hbWU6ICdDYSBjw7RuZyB0w6FjJyxcclxuICAgICAgc3ltYm9sOiB7XHJcbiAgICAgICAgY29kZTogJ0NUJyxcclxuICAgICAgICBuYW1lOiAnQ1InLFxyXG4gICAgICAgIGlzUmVnaXN0ZXI6IHRydWUsXHJcbiAgICAgIH0sXHJcbiAgICAgIGhvdXJzU3RhcnQ6IG5ldyBEYXRlKDIwMjQsIDcsIDEzLCA4LCAwLCAwKSxcclxuICAgICAgaG91cnNTdG9wOiBuZXcgRGF0ZSgyMDI0LCA3LCAxMywgMTcsIDMwLCAwKVxyXG4gICAgfVxyXG4gIF0pO1xyXG5cclxuICBvbkRyb3BTdHJlYW0kID0gbmV3IEJlaGF2aW9yU3ViamVjdDxzdHJpbmc+KCcnKTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgICBwcml2YXRlIHdvcmtTaGlmdERuZFNlcnZpY2U6IFdvcmtTaGlmdERuZFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGRpYWxvZ1NlcnZpY2U6IERpYWxvZ1NlcnZpY2UsXHJcbiAgKSB7XHJcbiAgICBzdXBlcigpO1xyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcblxyXG4gICAgICB0aGlzLm9uRHJvcFN0cmVhbSQucGlwZShcclxuICAgICAgICBmaWx0ZXIoeCA9PiAhIXgubGVuZ3RoKSxcclxuICAgICAgICBkZWJvdW5jZVRpbWUoNTAwKVxyXG4gICAgICApLnN1YnNjcmliZSh4ID0+IHtcclxuICAgICAgICB0aGlzLm9uRHJvcC5lbWl0KHRydWUpO1xyXG4gICAgICB9KVxyXG5cclxuICAgICAgY29uc3QgY29udGFpbmVyRWxlbWVudCA9IHRoaXMuJGNvbnRhaW5lcigpPy5uYXRpdmVFbGVtZW50O1xyXG5cclxuICAgICAgY29udGFpbmVyRWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSgnLS1iYWNrZ3JvdW5kLWNvbG9yJywgdGhpcy4kYmFja2dyb3VuZENvbG9yKCkpO1xyXG4gICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcclxuXHJcblxyXG4gICAgICBjb25zdCBkcmFnZW50ZXJFdmVudCA9IGZyb21FdmVudChjb250YWluZXJFbGVtZW50LCAnZHJhZ2VudGVyJyk7XHJcbiAgICAgIGNvbnN0IGRyYWdvdmVyRXZlbnQgPSBmcm9tRXZlbnQoY29udGFpbmVyRWxlbWVudCwgJ2RyYWdvdmVyJyk7XHJcbiAgICAgIGNvbnN0IGRyb3BFdmVudCA9IGZyb21FdmVudChjb250YWluZXJFbGVtZW50LCAnZHJvcCcpO1xyXG4gICAgICBjb25zdCBkcmFnbGVhdmVFdmVudCA9IGZyb21FdmVudChjb250YWluZXJFbGVtZW50LCAnZHJhZ2xlYXZlJyk7XHJcblxyXG4gICAgICB0aGlzLmRuZEV2ZW50U3Vic2NyaXB0aW9ucy5kcmFnZW50ZXIgPSBkcmFnZW50ZXJFdmVudC5zdWJzY3JpYmUoKGV2OiBhbnkpID0+IHtcclxuICAgICAgICBldi5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgIGlmICh0aGlzLndvcmtTaGlmdERuZFNlcnZpY2UuZHJhZ2dpbmdGcm9tQ2VsbElkJC52YWx1ZSA9PT0gdGhpcy5zaGlmdENlbGxJZCkgcmV0dXJuXHJcbiAgICAgICAgdGhpcy5kcmFnRWxlbWVudHMuYWRkKGV2LnRhcmdldCBhcyBFdmVudFRhcmdldCk7XHJcbiAgICAgICAgY29udGFpbmVyRWxlbWVudC5jbGFzc0xpc3QuYWRkKCd2YWxpZC1kcm9wJyk7XHJcbiAgICAgICAgaWYgKHRoaXMud29ya1NoaWZ0RG5kU2VydmljZS5kcmFnZ2luZ0RhdGEkLnZhbHVlLnNwbGl0KCc6JylbMF0gIT09IHRoaXMuc2hpZnRDZWxsSWQpIHtcclxuICAgICAgICAgIHRoaXMuJGNvbnRhaW5lcigpPy5uYXRpdmVFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KCctLWJhY2tncm91bmQtY29sb3InLCAnI2ZmZjRjZScpO1xyXG4gICAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBTdWJzY3JpYmUgdG8gZHJhZ292ZXIgZXZlbnQgdG8gYWxsb3cgZHJvcFxyXG4gICAgICAgIHRoaXMuZG5kRXZlbnRTdWJzY3JpcHRpb25zLmRyYWdvdmVyID0gZHJhZ292ZXJFdmVudC5zdWJzY3JpYmUoKGV2OiBhbnkpID0+IHtcclxuICAgICAgICAgIGV2LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICB0aGlzLndvcmtTaGlmdERuZFNlcnZpY2UuZHJhZ292ZXJDZWxsSWQkLm5leHQodGhpcy5zaGlmdENlbGxJZClcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgLy8gU3Vic2NyaWJlIHRvIGRyb3AgZXZlbnRcclxuICAgICAgICB0aGlzLmRuZEV2ZW50U3Vic2NyaXB0aW9ucy5kcm9wID0gZHJvcEV2ZW50LnN1YnNjcmliZSgoZXY6IGFueSkgPT4ge1xyXG4gICAgICAgICAgZXYucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgIGlmICh0aGlzLndvcmtTaGlmdERuZFNlcnZpY2UuZHJhZ2dpbmdGcm9tQ2VsbElkJC52YWx1ZSA9PT0gdGhpcy5zaGlmdENlbGxJZCkgcmV0dXJuXHJcbiAgICAgICAgICB0aGlzLmRyYWdFbGVtZW50cy5jbGVhcigpOyAvLyBDbGVhciB0aGUgc2V0XHJcbiAgICAgICAgICBjb250YWluZXJFbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoJ3ZhbGlkLWRyb3AnKTtcclxuXHJcbiAgICAgICAgICB0aGlzLiRjb250YWluZXIoKT8ubmF0aXZlRWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSgnLS1iYWNrZ3JvdW5kLWNvbG9yJywgdGhpcy4kYmFja2dyb3VuZENvbG9yKCkpO1xyXG5cclxuICAgICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xyXG5cclxuICAgICAgICAgIGNvbnN0IGRhdGEgPSBldi5kYXRhVHJhbnNmZXI/LmdldERhdGEoJ3RleHQvcGxhaW4nKTsgLy8gRXhhbXBsZSBkYXRhIHJldHJpZXZhbFxyXG5cclxuICAgICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5jcmVhdGVOZXcoXHJcbiAgICAgICAgICAgIEVudW1UcmFuc2xhdGVLZXkuVUlfR1JJRF9GT1JNX0JVVFRPTl9JTkZPUk1BVElPTixcclxuICAgICAgICAgICAgdW5kZWZpbmVkLFxyXG4gICAgICAgICAgICB1bmRlZmluZWQsXHJcbiAgICAgICAgICAgIHVuZGVmaW5lZCxcclxuICAgICAgICAgICAgRW51bVRyYW5zbGF0ZUtleS5VSV9HUklEX0ZPUk1fQlVUVE9OX0lORk9STUFUSU9OLFxyXG4gICAgICAgICAgICBbXHJcbiAgICAgICAgICAgICAgXCJzaGlmdElkOiBcIiArIHRoaXMud29ya1NoaWZ0RG5kU2VydmljZS5kcmFnZ2luZ1NoaWZ0JC52YWx1ZT8uaWQsXHJcbiAgICAgICAgICAgICAgXCJzaGlmdENvZGU6IFwiICsgdGhpcy53b3JrU2hpZnREbmRTZXJ2aWNlLmRyYWdnaW5nU2hpZnQkLnZhbHVlPy5jb2RlLFxyXG4gICAgICAgICAgICAgIFwiZHJhZ292ZXJDZWxsSWQ6IFwiICsgdGhpcy53b3JrU2hpZnREbmRTZXJ2aWNlLmRyYWdvdmVyQ2VsbElkJC52YWx1ZSxcclxuICAgICAgICAgICAgICBcIioqKioqKioqKioqKioqXCIsXHJcbiAgICAgICAgICAgICAgXCJXSEFURVZFUiBMT0dJQyBDQU4gQkUgQURERUQgV0lUSCAob25Ecm9wKSBAT3V0cHV0KCkgQU5EIFVTSU5HIFdvcmtTaGlmdERuZFNlcnZpY2VcIlxyXG4gICAgICAgICAgICBdXHJcbiAgICAgICAgICApXHJcblxyXG4gICAgICAgICAgdGhpcy5vbkRyb3BTdHJlYW0kLm5leHQodGhpcy5zaGlmdENlbGxJZClcclxuXHJcbiAgICAgICAgICAvLyBIYW5kbGUgZHJvcCBsb2dpYyBiYXNlZCBvbiBkYXRhXHJcbiAgICAgICAgICBpZiAoZGF0YSkge1xyXG4gICAgICAgICAgICAvLyBQcm9jZXNzIGRyb3BwZWQgZGF0YSBoZXJlXHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdEcm9wcGVkIGRhdGE6JywgZGF0YSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIHRoaXMuZG5kRXZlbnRTdWJzY3JpcHRpb25zLmRyYWdsZWF2ZSA9IGRyYWdsZWF2ZUV2ZW50LnN1YnNjcmliZSgoZXY6IGFueSkgPT4ge1xyXG4gICAgICAgIGV2LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgaWYgKHRoaXMud29ya1NoaWZ0RG5kU2VydmljZS5kcmFnZ2luZ0Zyb21DZWxsSWQkLnZhbHVlID09PSB0aGlzLnNoaWZ0Q2VsbElkKSByZXR1cm5cclxuICAgICAgICB0aGlzLmRyYWdFbGVtZW50cy5kZWxldGUoZXYudGFyZ2V0IGFzIEV2ZW50VGFyZ2V0KTtcclxuICAgICAgICBpZiAodGhpcy5kcmFnRWxlbWVudHMuc2l6ZSA9PT0gMCkge1xyXG4gICAgICAgICAgY29udGFpbmVyRWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKCd2YWxpZC1kcm9wJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuJGNvbnRhaW5lcigpPy5uYXRpdmVFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KCctLWJhY2tncm91bmQtY29sb3InLCB0aGlzLiRiYWNrZ3JvdW5kQ29sb3IoKSk7XHJcbiAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XHJcblxyXG4gICAgICAgIHRoaXMuZG5kRXZlbnRTdWJzY3JpcHRpb25zLmRyYWdvdmVyPy51bnN1YnNjcmliZSgpO1xyXG4gICAgICAgIHRoaXMuZG5kRXZlbnRTdWJzY3JpcHRpb25zLmRyb3A/LnVuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgICAgIHRoaXMuZG5kRXZlbnRTdWJzY3JpcHRpb25zLmRyYWdvdmVyID0gdW5kZWZpbmVkO1xyXG4gICAgICAgIHRoaXMuZG5kRXZlbnRTdWJzY3JpcHRpb25zLmRyb3AgPSB1bmRlZmluZWQ7XHJcblxyXG4gICAgICB9KTtcclxuXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG59XHJcbiIsIjxkaXYgI2NvbnRhaW5lciBjbGFzcz1cImNvcmUtc2hpZnQtY2VsbC1jb250YWluZXJcIj5cclxuICAgIEBmb3IgKHNoaWZ0IG9mICRzaGlmdHMoKTsgdHJhY2sgJGluZGV4KSB7XHJcbiAgICAgICAgPGNvcmUtc2hpZnQtc3RpY2tlciBbJHNoaWZ0XT1cInNoaWZ0XCIgWyRzaGlmdENlbGxJZF09XCJzaGlmdENlbGxJZFwiIFskd2lkdGhdPVwiMjI4XCI+PC9jb3JlLXNoaWZ0LXN0aWNrZXI+XHJcbiAgICB9XHJcbjwvZGl2PlxyXG4iXX0=
|
|
@@ -207,9 +207,10 @@ export class CoreTableComponent extends CoreFormControlBaseComponent {
|
|
|
207
207
|
if (isDevMode()) {
|
|
208
208
|
if (changes['data'].currentValue?.length) {
|
|
209
209
|
const arr = changes['data'].currentValue;
|
|
210
|
-
let
|
|
211
|
-
|
|
212
|
-
|
|
210
|
+
let findDuplicateIds = (arr) => arr.filter((item) => arr.filter((x) => x.id === item.id).length > 1);
|
|
211
|
+
let findDuplicateVirtualIds = (arr) => arr.filter((item) => arr.filter((x) => x.virtualId === item.virtualId).length > 1);
|
|
212
|
+
if (!!findDuplicateIds(arr).length && !!findDuplicateVirtualIds(arr).length) {
|
|
213
|
+
this.alertService.error("CoreTable requires unique id/virtualId values!", noneAutoClosedAlertOptions);
|
|
213
214
|
}
|
|
214
215
|
}
|
|
215
216
|
}
|
|
@@ -504,4 +505,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.3", ngImpor
|
|
|
504
505
|
type: ViewChild,
|
|
505
506
|
args: ['firstHeaderRow']
|
|
506
507
|
}] } });
|
|
507
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29yZS10YWJsZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtaGlzdGFmZi1hbHBoYS9zcmMvbGliL2FwcC9saWJyYXJpZXMvY29yZS10YWJsZS9jb3JlLXRhYmxlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1oaXN0YWZmLWFscGhhL3NyYy9saWIvYXBwL2xpYnJhcmllcy9jb3JlLXRhYmxlL2NvcmUtdGFibGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBYyxLQUFLLEVBQStDLFNBQVMsRUFBaUIsTUFBTSxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDckssT0FBTyxFQUFFLFdBQVcsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBMENoRSxPQUFPLEVBQWdCLGVBQWUsRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFjLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUVsRyxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSw0REFBNEQsQ0FBQztBQVMxRyxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUUxRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNqRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sb0VBQW9FLENBQUM7QUFDOUcsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDdEUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDaEUsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sNkVBQTZFLENBQUM7QUFDMUgsT0FB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eEIsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csTUFBTTtzQkFBZCxLQUFLO2dCQUNxQixPQUFPO3NCQUFqQyxLQUFLO3VCQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRTtnQkFDRSxJQUFJO3NCQUE5QixLQUFLO3VCQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRTtnQkFDaEIsV0FBVztzQkFBbkIsS0FBSztnQkFDRywwQkFBMEI7c0JBQWxDLEtBQUs7Z0JBQ0csdUJBQXVCO3NCQUEvQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csb0JBQW9CO3NCQUE1QixLQUFLO2dCQUNHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0csZUFBZTtzQkFBdkIsS0FBSztnQkFDRyx1QkFBdUI7c0JBQS9CLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFFRyxhQUFhO3NCQUFyQixLQUFLO2dCQUVJLFdBQVc7c0JBQXBCLE1BQU07Z0JBQ0csV0FBVztzQkFBcEIsTUFBTTtnQkFDRyxVQUFVO3NCQUFuQixNQUFNO2dCQUNHLGdCQUFnQjtzQkFBekIsTUFBTTtnQkFDRyxtQkFBbUI7c0JBQTVCLE1BQU07Z0JBQ0csb0JBQW9CO3NCQUE3QixNQUFNO2dCQUNHLG9CQUFvQjtzQkFBN0IsTUFBTTtnQkFzQ2lCLFNBQVM7c0JBQWhDLFNBQVM7dUJBQUMsV0FBVztnQkFDRixLQUFLO3NCQUF4QixTQUFTO3VCQUFDLE9BQU87Z0JBQ1csY0FBYztzQkFBMUMsU0FBUzt1QkFBQyxnQkFBZ0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEVsZW1lbnRSZWYsIElucHV0LCBPbkluaXQsIE9uRGVzdHJveSwgQWZ0ZXJWaWV3SW5pdCwgT25DaGFuZ2VzLCBWaWV3Q2hpbGQsIFNpbXBsZUNoYW5nZXMsIE91dHB1dCwgRXZlbnRFbWl0dGVyLCBpc0Rldk1vZGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRm9ybXNNb2R1bGUsIE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5cclxuZXhwb3J0IGVudW0gRUNvcmVUYWJsZVRvb2xDb2RlIHtcclxuICBlZGl0ID0gJ2VkaXQnLFxyXG4gIGRlbGV0ZSA9ICdkZWxldGUnLFxyXG4gIGNvbXBsZXRlID0gJ2NvbXBsZXRlJyxcclxuICBuYXZpZ2F0ZSA9ICduYXZpZ2F0ZScsXHJcbn1cclxuXHJcbmV4cG9ydCBlbnVtIEVDb3JlVGFibGVUb29sQ2xhc3Mge1xyXG4gIGVkaXQgPSAnZWRpdC1pY29uJyxcclxuICBkZWxldGUgPSAnZGVsZXRlLWljb24nLFxyXG4gIHJlcGVhdCA9ICdyZXBlYXQtaWNvbicsXHJcbiAgbmF2aWdhdGUgPSAnbmF2aWdhdGUtaWNvbidcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJQ29yZVRhYmxlVG9vbEl0ZW0ge1xyXG4gIGNvZGU6IEVDb3JlVGFibGVUb29sQ29kZTtcclxuICBjbGFzczogRUNvcmVUYWJsZVRvb2xDbGFzcztcclxuICBjYXB0aW9uPzogRW51bVRyYW5zbGF0ZUtleSB8IHN0cmluZzsgLy8gTGF0ZXIgd2Ugd2lsbCByZW1vdmUgXCJ8IHN0cmluZ1wiXHJcblxyXG4gIC8qIGNhbGxiYWNrcyB0byBjYWxjdWxhdGUgZGlzYWJsZWQgYW5kIGhpZGVuIGJhc2VkIG9uIHJvdyovXHJcbiAgZGlzYWJsZWRGbj86IChyb3c6IGFueSkgPT4gYm9vbGVhbjtcclxuICBoaWRkZW5Gbj86IChyb3c6IGFueSkgPT4gYm9vbGVhbjtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJQ29yZVRhYmxlVG9vbENsaWNrRXZlbnRFbWl0dGVyRGF0YSB7XHJcbiAgY29kZTogRUNvcmVUYWJsZVRvb2xDb2RlO1xyXG4gIGlkOiBzdHJpbmcgfCBudW1iZXI7XHJcbn1cclxuXHJcbi8qXHJcbmV4cG9ydCBpbnRlcmZhY2UgSUNvcmVUYWJsZVJvd0RvdWJsZUNsaWNrRXZlbnRFbWl0dGVyRGF0YSB7XHJcbiAgaWQ6IHN0cmluZyB8IG51bWJlcjtcclxufVxyXG4qL1xyXG5cclxuaW50ZXJmYWNlIElEb3VibGVUb3VjaGVuZERhdGEge1xyXG4gIHByZXZpb3VzOiBudW1iZXI7XHJcbiAgY3VycmVudDogbnVtYmVyO1xyXG59XHJcblxyXG5pbXBvcnQgeyBTdWJzY3JpcHRpb24sIEJlaGF2aW9yU3ViamVjdCwgZmlsdGVyLCBkZWJvdW5jZVRpbWUsIE9ic2VydmFibGUsIGZyb21FdmVudCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBDb3JlUGFnZUxpc3RTZXJ2aWNlIH0gZnJvbSAnLi4vY29yZS1wYWdlLWxpc3QvY29yZS1wYWdlLWxpc3Quc2VydmljZSc7XHJcbmltcG9ydCB7IENvcmVGb3JtQ29udHJvbEJhc2VDb21wb25lbnQgfSBmcm9tICcuLi9jb3JlLWZvcm0tY29udHJvbC1iYXNlL2NvcmUtZm9ybS1jb250cm9sLWJhc2UuY29tcG9uZW50JztcclxuaW1wb3J0IHsgSUNvcmVCdXR0b25WTlMgfSBmcm9tICcuLi9jb3JlLWJ1dHRvbi1ncm91cC12bnMvY29yZS1idXR0b24tZ3JvdXAtdm5zL0lDb3JlQnV0dG9uVk5TJztcclxuaW1wb3J0IHsgRW51bUNvcmVCdXR0b25WTlNDb2RlIH0gZnJvbSAnLi4vY29yZS1idXR0b24tZ3JvdXAtdm5zL2NvcmUtYnV0dG9uLWdyb3VwLXZucy9FbnVtQ29yZUJ1dHRvblZOU0NvZGUnO1xyXG5pbXBvcnQgeyBFbnVtVHJhbnNsYXRlS2V5IH0gZnJvbSBcImFscGhhLWdsb2JhbC1jb25zdGFudHNcIjtcclxuaW1wb3J0IHsgSVNlYXJjaEl0ZW0gfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL0lRdWVyeUxpc3RSZXF1ZXN0JztcclxuaW1wb3J0IHsgTGF5b3V0U2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2xheW91dC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgTXVsdGlMYW5ndWFnZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9tdWx0aS1sYW5ndWFnZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQWxlcnRTZXJ2aWNlIH0gZnJvbSAnLi4vYWxlcnQvYWxlcnQuc2VydmljZSc7XHJcbmltcG9ydCB7IEF1dGhTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvYXV0aC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgbm9uZUF1dG9DbG9zZWRBbGVydE9wdGlvbnMgfSBmcm9tICcuLi8uLi9jb25zdGFudHMvYWxlcnRPcHRpb25zJztcclxuaW1wb3J0IHsgSUNvcmVUYWJsZUNvbHVtbkl0ZW0gfSBmcm9tICcuL0lDb3JlVGFibGVDb2x1bW5JdGVtJztcclxuaW1wb3J0IHsgRW51bVNvcnREaXJlY3Rpb24gfSBmcm9tICcuLi8uLi9lbnVtL0VudW1Tb3J0RGlyZWN0aW9uJztcclxuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgQ29yZUJ1dHRvbkdyb3VwQ29tcG9uZW50IH0gZnJvbSAnLi4vY29yZS1idXR0b24tZ3JvdXAvY29yZS1idXR0b24tZ3JvdXAvY29yZS1idXR0b24tZ3JvdXAuY29tcG9uZW50JztcclxuaW1wb3J0IHsgVGhyZWVkb3RzQ29tcG9uZW50IH0gZnJvbSAnLi4vdGhyZWVkb3RzL3RocmVlZG90cy5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBUb29sdGlwRGlyZWN0aXZlIH0gZnJvbSAnLi4vdG9vbHRpcC90b29sdGlwLmRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IENvcmVMb2FkaW5nU3VyZmFjZUNvbXBvbmVudCB9IGZyb20gJy4uL2NvcmUtbG9hZGluZy1zdXJmYWNlL2NvcmUtbG9hZGluZy1zdXJmYWNlL2NvcmUtbG9hZGluZy1zdXJmYWNlLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IENvcmVCdXR0b25Hcm91cFZuc0NvbXBvbmVudCB9IGZyb20gJy4uL2NvcmUtYnV0dG9uLWdyb3VwLXZucy9jb3JlLWJ1dHRvbi1ncm91cC12bnMvY29yZS1idXR0b24tZ3JvdXAtdm5zLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFRhYmxlQ2VsbFBpcGUgfSBmcm9tICcuLi9waXBlcy90YWJsZS1jZWxsLnBpcGUnO1xyXG5pbXBvcnQgeyBUcmFuc2xhdGVQaXBlIH0gZnJvbSAnLi4vLi4vYXBwLXBpcGVzL3RyYW5zbGF0ZS5waXBlJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnY29yZS10YWJsZScsXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICBpbXBvcnRzOiBbXHJcbiAgICBDb21tb25Nb2R1bGUsXHJcbiAgICBGb3Jtc01vZHVsZSxcclxuICAgIENvcmVCdXR0b25Hcm91cENvbXBvbmVudCxcclxuICAgIFRocmVlZG90c0NvbXBvbmVudCxcclxuICAgIFRvb2x0aXBEaXJlY3RpdmUsXHJcbiAgICBUYWJsZUNlbGxQaXBlLFxyXG4gICAgVHJhbnNsYXRlUGlwZSxcclxuICAgIENvcmVMb2FkaW5nU3VyZmFjZUNvbXBvbmVudCxcclxuICAgIENvcmVCdXR0b25Hcm91cFZuc0NvbXBvbmVudCxcclxuICBdLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9jb3JlLXRhYmxlLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9jb3JlLXRhYmxlLmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgcHJvdmlkZXJzOiBbXHJcbiAgICB7XHJcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxyXG4gICAgICBtdWx0aTogdHJ1ZSxcclxuICAgICAgdXNlRXhpc3Rpbmc6IENvcmVUYWJsZUNvbXBvbmVudFxyXG4gICAgfVxyXG4gIF1cclxufSlcclxuZXhwb3J0IGNsYXNzIENvcmVUYWJsZUNvbXBvbmVudCBleHRlbmRzIENvcmVGb3JtQ29udHJvbEJhc2VDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQsIE9uQ2hhbmdlcywgT25EZXN0cm95IHtcclxuXHJcbiAgLypcclxuICBUaGlzIGNvbXBvbmVudCBkaXNwbGF5cyBpbnB1dCBkYXRhIHdpdGhvdXQgcGFnaW5hdGlvbi5cclxuICBGb3IgcGFnaW5hdGluZyBwbGVhc2Ugb3JnYW5pemUgZnJvbSBwYXJlbnRzXHJcbiAgKi9cclxuXHJcbiAgQElucHV0KCkgaWQhOiBzdHJpbmc7IC8vIGZvciBodG1sIGlkIGlkZW50aWZ5aW5nXHJcbiAgQElucHV0KCkgd2lkdGghOiBzdHJpbmc7XHJcbiAgQElucHV0KCkgaGVpZ2h0ITogbnVtYmVyO1xyXG4gIEBJbnB1dCgpIHNob3dDaGVja2JveCE6IGJvb2xlYW47XHJcbiAgQElucHV0KCkgY2hlY2tib3hTaXplITogbnVtYmVyO1xyXG4gIEBJbnB1dCgpIG91dGVyQnV0dG9ucyE6IElDb3JlQnV0dG9uVk5TW107XHJcbiAgQElucHV0KCkgc2hvd1Rvb2xzITogYm9vbGVhbjtcclxuICBASW5wdXQoKSB0b29scyE6IElDb3JlVGFibGVUb29sSXRlbVtdO1xyXG4gIEBJbnB1dCgpIGNoZWNraW5nUmVzZXRGbGFnITogYm9vbGVhbjtcclxuICBASW5wdXQoKSBib3JkZXJSYWRpdXM6IG51bWJlciA9IDA7XHJcbiAgQElucHV0KCkgaGVhZGVyQmFja2dyb3VuZENvbG9yOiBzdHJpbmcgPSAnIzY2NjY2Nic7XHJcblxyXG4gIC8qIGNoYW5nZSB0aGVzZSAyIHByb3BzIHRvIHdyYXAgaGVhZGVyIHRleHRzICovXHJcbiAgQElucHV0KCkgaGVhZGVyV3JhcCE6IGJvb2xlYW47XHJcbiAgQElucHV0KCkgaGVhZGVyRmlyc3RSb3dIZWlnaHQhOiBudW1iZXI7XHJcbiAgLyoqICovXHJcblxyXG4gIEBJbnB1dCgpIGhlYWRlclNlY29uZFJvd0hlaWdodCE6IG51bWJlcjtcclxuICBASW5wdXQoKSB3cmFwITogYm9vbGVhbjtcclxuICBASW5wdXQoKSBhbGxvd0NlbGxTY3JvbGxZITogYm9vbGVhbjtcclxuICBASW5wdXQoKSBsb2FkaW5nITogYm9vbGVhbjtcclxuICBASW5wdXQoKSByb3dIZWlnaHQhOiBzdHJpbmc7IC8vIFZFUlkgSU1QT1JUQU5UIFBST1BFUlRZXHJcbiAgQElucHV0KCkgZnJvemVuITogbnVtYmVyO1xyXG4gIEBJbnB1dCgpIGZvb3RlciE6IGFueTtcclxuICBASW5wdXQoeyByZXF1aXJlZDogdHJ1ZSB9KSBjb2x1bW5zITogSUNvcmVUYWJsZUNvbHVtbkl0ZW1bXTsgLy8gcmVxdWlyZWRcclxuICBASW5wdXQoeyByZXF1aXJlZDogdHJ1ZSB9KSBkYXRhOiBhbnlbXSA9IFtdO1xyXG4gIEBJbnB1dCgpIHNlbGVjdGVkSWRzITogc3RyaW5nW10gfCBudW1iZXJbXTtcclxuICBASW5wdXQoKSBjb3JlUGFnZUxpc3RJbnN0YW5jZU51bWJlciE6IG51bWJlcjtcclxuICBASW5wdXQoKSBkaXNhYmxlSGlnaGxpZ2h0T25DbGljayE6IGJvb2xlYW47XHJcbiAgQElucHV0KCkgZnJlZU1vZGUhOiBib29sZWFuO1xyXG4gIEBJbnB1dCgpIHNlYXJjaFN3aXRjaERpc2FibGVkOiBib29sZWFuID0gZmFsc2U7IC8vID8/P1xyXG4gIEBJbnB1dCgpIGRpc2FibGVTb3J0aW5nITogYm9vbGVhbjtcclxuICBASW5wdXQoKSBpbmxpbmVUb29sSXRlbXMhOiBFbnVtQ29yZUJ1dHRvblZOU0NvZGVbXTtcclxuICBASW5wdXQoKSBjb2x1bW5TZWFyY2hEZWZhdWx0T3BlbiE6IGJvb2xlYW47XHJcbiAgQElucHV0KCkgbGF6eUxvYWRpbmchOiBib29sZWFuO1xyXG5cclxuICBASW5wdXQoKSBub1BhZGRpbmdDZWxsITogYm9vbGVhbjtcclxuXHJcbiAgQE91dHB1dCgpIG9uU2VhcmNoaW5nID0gbmV3IEV2ZW50RW1pdHRlcjxJU2VhcmNoSXRlbVtdPigpO1xyXG4gIEBPdXRwdXQoKSBvblRvb2xDbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8SUNvcmVUYWJsZVRvb2xDbGlja0V2ZW50RW1pdHRlckRhdGE+KCk7XHJcbiAgQE91dHB1dCgpIG9uUm93Q2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIG9uUm93RG91YmxlQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIG9uU2VsZWN0ZWRJZHNDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZ1tdIHwgbnVtYmVyW10+KCk7XHJcbiAgQE91dHB1dCgpIG9uU2VsZWN0ZWREYXRhQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxhbnlbXT4oKTtcclxuICBAT3V0cHV0KCkgb25Db2x1bW5DYXB0aW9uQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPElDb3JlVGFibGVDb2x1bW5JdGVtPigpO1xyXG5cclxuICBjaGVja2JveENvbHVtbldpZHRoOiBudW1iZXIgPSAzMDsgLy8gKC0tY2hlY2tib3gtc2l6ZSkqIDIgUGxlYXNlIGRvIG5vdCBjaGFuZ2UgdGhpc1xyXG5cclxuICBzZWFyY2hBY3RpdmUhOiBib29sZWFuO1xyXG4gIHZpc2libGVDb2x1bW5zITogSUNvcmVUYWJsZUNvbHVtbkl0ZW1bXTtcclxuICBmcm96ZW5MZWZ0czogbnVtYmVyW10gPSBbXTtcclxuICBjaGVja2luZ01vZGVsOiBib29sZWFuW10gPSBbXTtcclxuICBoZWFkZXJDaGVja2JveFN0YXRlITogYm9vbGVhbjtcclxuICBjaGVja2luZ1N0YXRlITogbnVtYmVyOyAvLyAwPW5vbmU7IDE9YWxsOyAyPW1peGVkXHJcbiAgdGJvZHloZWlnaHQhOiBudW1iZXI7XHJcbiAgdmlzaWJsZVJvd0NvdW50ITogbnVtYmVyO1xyXG5cclxuICByb3dUb3VjaGVuZFN0cmVhbSQ6IEJlaGF2aW9yU3ViamVjdDxJRG91YmxlVG91Y2hlbmREYXRhPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8SURvdWJsZVRvdWNoZW5kRGF0YT4oeyBwcmV2aW91czogLTIsIGN1cnJlbnQ6IC0xIH0pO1xyXG4gIHN1YnNjcmlwdGlvbnM6IFN1YnNjcmlwdGlvbltdID0gW107XHJcblxyXG4gIHNlYXJjaE9iamVjdCE6IElTZWFyY2hJdGVtW107XHJcblxyXG4gIGxhbmchOiBzdHJpbmc7XHJcblxyXG4gIGFjdGl2ZVJvdyE6IGFueTsgLy8gbnVtYmVyIHwgc3RyaW5nXHJcblxyXG4gIG1vdXNlRG93biA9IGZhbHNlO1xyXG4gIHN0YXJ0WDogYW55O1xyXG4gIGVuZFg6IGFueTtcclxuXHJcbiAgc2Nyb2xsU3RyZWFtJCE6IE9ic2VydmFibGU8YW55PjtcclxuXHJcbiAgLyogRk9SIExBWlkgVUkgTE9BRElORyAqL1xyXG4gIHJlbmRlckFocmVhZDogbnVtYmVyID0gMDtcclxuICBoaWRkZW5Ub3BIZWlnaHQ6IG51bWJlciA9IDA7XHJcbiAgaGlkZGVuQm90dG9tSGVpZ2h0OiBudW1iZXIgPSAwO1xyXG4gIHNjcm9sbFRvcDogbnVtYmVyID0gMDtcclxuICBvZmZzZXRZOiBudW1iZXIgPSAwO1xyXG4gIHZpc2libGVEYXRhITogYW55W107XHJcbiAgc3RhcnROb2RlOiBudW1iZXIgPSAwO1xyXG4gIC8qKioqKioqKioqKioqKioqKioqKioqKi9cclxuXHJcbiAgQFZpZXdDaGlsZCgnY29yZVRhYmxlJykgY29yZVRhYmxlITogRWxlbWVudFJlZjtcclxuICBAVmlld0NoaWxkKCd0YWJsZScpIHRhYmxlITogRWxlbWVudFJlZjtcclxuICBAVmlld0NoaWxkKCdmaXJzdEhlYWRlclJvdycpIGZpcnN0SGVhZGVyUm93ITogRWxlbWVudFJlZjtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIGxheW91dFNlcnZpY2U6IExheW91dFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGNvcmVQYWdlTGlzdFNlcnZpY2U6IENvcmVQYWdlTGlzdFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIG1sczogTXVsdGlMYW5ndWFnZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGFsZXJ0U2VydmljZTogQWxlcnRTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBhdXRoU2VydmljZTogQXV0aFNlcnZpY2VcclxuICApIHtcclxuICAgIHN1cGVyKCk7XHJcbiAgfVxyXG5cclxuICBjYWxjdWxhdGVTY3JvbGwoKTogdm9pZCB7XHJcblxyXG4gICAgdHJ5IHtcclxuXHJcbiAgICAgIGlmICghISF0aGlzLmNvcmVUYWJsZSkgcmV0dXJuO1xyXG4gICAgICBpZiAoISEhdGhpcy5sYXp5TG9hZGluZykgcmV0dXJuO1xyXG4gICAgICBpZiAoISEhdGhpcy5kYXRhKSByZXR1cm47XHJcblxyXG4gICAgICBjb25zdCBoZWlnaHQgPSBOdW1iZXIoZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzLmNvcmVUYWJsZS5uYXRpdmVFbGVtZW50KS5nZXRQcm9wZXJ0eVZhbHVlKCctLWhlaWdodCcpLnJlcGxhY2UoJ3B4JywgJycpKTtcclxuICAgICAgY29uc3Qgcm93SGVpZ2h0ID0gTnVtYmVyKGdldENvbXB1dGVkU3R5bGUodGhpcy5jb3JlVGFibGUubmF0aXZlRWxlbWVudCkuZ2V0UHJvcGVydHlWYWx1ZSgnLS1yb3ctaGVpZ2h0Jykuc3BsaXQoJ3B4JylbMF0pO1xyXG5cclxuICAgICAgaWYgKCEhIXJvd0hlaWdodCkgdGhyb3cgbmV3IEVycm9yKFwiQ291bGQgbm90IGdldCAtLXJvdy1oZWlnaHQgcHJvcGVydHlcIik7XHJcblxyXG4gICAgICBsZXQgc3RhcnROb2RlID0gTWF0aC5mbG9vcih0aGlzLnNjcm9sbFRvcCAvIHJvd0hlaWdodCkgLSB0aGlzLnJlbmRlckFocmVhZDtcclxuICAgICAgc3RhcnROb2RlID0gTWF0aC5tYXgoMCwgc3RhcnROb2RlKTtcclxuICAgICAgdGhpcy5zdGFydE5vZGUgPSBzdGFydE5vZGUgfHwgMDtcclxuICAgICAgbGV0IHZpc2libGVOb2RlQ291bnQgPSBNYXRoLmNlaWwoaGVpZ2h0IC8gcm93SGVpZ2h0KSArIDIgKiB0aGlzLnJlbmRlckFocmVhZDtcclxuICAgICAgdmlzaWJsZU5vZGVDb3VudCA9IE1hdGgubWluKHRoaXMuZGF0YS5sZW5ndGggLSBzdGFydE5vZGUsIHZpc2libGVOb2RlQ291bnQpO1xyXG4gICAgICB0aGlzLm9mZnNldFkgPSBzdGFydE5vZGUgKiByb3dIZWlnaHQ7XHJcbiAgICAgIGNvbnN0IG5ld1Zpc2libGVEYXRhOiBhbnlbXSA9IFtdO1xyXG5cclxuICAgICAgdGhpcy5oaWRkZW5Ub3BIZWlnaHQgPSBzdGFydE5vZGUgKiByb3dIZWlnaHQ7XHJcbiAgICAgIHRoaXMuaGlkZGVuQm90dG9tSGVpZ2h0ID0gKHRoaXMuZGF0YS5sZW5ndGggLSBzdGFydE5vZGUgLSB2aXNpYmxlTm9kZUNvdW50KSAqIHJvd0hlaWdodDtcclxuICAgICAgZm9yIChsZXQgaSA9IHN0YXJ0Tm9kZTsgaSA8IHN0YXJ0Tm9kZSArIHZpc2libGVOb2RlQ291bnQ7IGkrKykge1xyXG4gICAgICAgIG5ld1Zpc2libGVEYXRhLnB1c2godGhpcy5kYXRhW2ldKVxyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLnZpc2libGVEYXRhID0gbmV3VmlzaWJsZURhdGE7XHJcblxyXG4gICAgICAvKiBPUEVOIENPTU1FTlRTIFRPIFNFRSBDT05UUk9MIFZBTFVFUyAqL1xyXG4gICAgICBjb25zb2xlLmxvZyhcInN0YXJ0Tm9kZVwiLCBzdGFydE5vZGUpXHJcbiAgICAgIC8qXHJcbiAgICAgIGNvbnNvbGUubG9nKFwidGhpcy5vZmZzZXRZXCIsIHRoaXMub2Zmc2V0WSlcclxuICAgICAgY29uc29sZS5sb2coXCJ0aGlzLmhpZGRlblRvcEhlaWdodFwiLCB0aGlzLmhpZGRlblRvcEhlaWdodClcclxuICAgICAgY29uc29sZS5sb2coXCJ0aGlzLmhpZGRlbkJvdHRvbUhlaWdodFwiLCB0aGlzLmhpZGRlbkJvdHRvbUhlaWdodClcclxuICAgICAgY29uc29sZS5sb2coXCJ0aGlzLnZpc2libGVEYXRhLmxlbmd0aFwiLCB0aGlzLnZpc2libGVEYXRhLmxlbmd0aClcclxuICAgICAgY29uc3QgY29udHJvbFZhbHVlID0gKHRoaXMuaGlkZGVuVG9wSGVpZ2h0ICsgdGhpcy5oaWRkZW5Cb3R0b21IZWlnaHQgKyB0aGlzLnZpc2libGVEYXRhLmxlbmd0aCAqIHJvd0hlaWdodCkgLyByb3dIZWlnaHRcclxuICAgICAgY29uc29sZS5sb2coXCJjb250cm9sVmFsdWVcIiwgY29udHJvbFZhbHVlKSAvLyBNdXN0IGVxdWVhbCBwYWdlU2l6ZVxyXG4gICAgICAqL1xyXG4gICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xyXG4gICAgICBpZiAoaXNEZXZNb2RlKCkgJiYgdGhpcy5hdXRoU2VydmljZS5kYXRhJC52YWx1ZT8uaWQgPT09ICc4YzI0NjgzZC03ZDUyLTRmNWEtODA5MC0zMWM3NzdlODg2OWQnKSB7XHJcbiAgICAgICAgdGhpcy5hbGVydFNlcnZpY2UuZXJyb3IoZXJyb3IubWVzc2FnZSwgbm9uZUF1dG9DbG9zZWRBbGVydE9wdGlvbnMpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoISF0aGlzLmRhdGEpIHtcclxuICAgICAgICB0aGlzLnZpc2libGVEYXRhID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLmRhdGEpKTtcclxuICAgICAgfVxyXG5cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHN0YXJ0RHJhZ2dpbmcoZTogYW55LCBjb2w6IElDb3JlVGFibGVDb2x1bW5JdGVtLCBmbGFnOiBhbnkpIHtcclxuICAgIGlmIChlLmJ1dHRvbnMgPT09IDEpIHtcclxuICAgICAgdGhpcy5zdGFydFggPSBlLnBhZ2VYO1xyXG4gICAgICBpZiAoISEhdGhpcy5tb3VzZURvd24pIHtcclxuXHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5tb3VzZURvd24gPSB0cnVlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc3RvcERyYWdnaW5nKGU6IGFueSwgY29sOiBJQ29yZVRhYmxlQ29sdW1uSXRlbSwgZmxhZzogYW55KSB7XHJcbiAgICBpZiAoISF0aGlzLm1vdXNlRG93bikge1xyXG4gICAgICB0aGlzLmVuZFggPSBlLnBhZ2VYO1xyXG4gICAgICBsZXQgb2Zmc2V0ID0gdGhpcy5lbmRYIC0gdGhpcy5zdGFydFg7XHJcbiAgICAgIGNvbC53aWR0aCEgKz0gb2Zmc2V0O1xyXG4gICAgICB0aGlzLm1vdXNlRG93biA9IGZhbHNlO1xyXG4gICAgICB0aGlzLmVuZFggPSAwO1xyXG4gICAgICB0aGlzLnN0YXJ0WCA9IDA7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBtb3ZlRXZlbnQoZTogYW55LCBjb2w6IElDb3JlVGFibGVDb2x1bW5JdGVtKSB7XHJcbiAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICBpZiAoIXRoaXMubW91c2VEb3duKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGNvbnN0IHggPSBlLnBhZ2VYO1xyXG4gICAgY29uc29sZS5sb2coXCJtb3ZlRXZlbnRcIiwgZS5wYWdlWClcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG5cclxuICAgIGlmICh0aGlzLnNob3dDaGVja2JveCkge1xyXG4gICAgICBpZiAoIXRoaXMuY2hlY2tib3hTaXplKSB7XHJcbiAgICAgICAgdGhpcy5jaGVja2JveFNpemUgPSAxNTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmhlYWRlckZpcnN0Um93SGVpZ2h0ID09PSB1bmRlZmluZWQpIHRoaXMuaGVhZGVyRmlyc3RSb3dIZWlnaHQgPSA0MDtcclxuICAgIGlmICh0aGlzLmhlYWRlclNlY29uZFJvd0hlaWdodCA9PT0gdW5kZWZpbmVkKSB0aGlzLmhlYWRlclNlY29uZFJvd0hlaWdodCA9IDQwO1xyXG5cclxuXHJcbiAgICAvKiBWYWxpZGF0ZSBjb2x1bW5zIGlucHV0IHRvIG1ha2Ugc3VyZSBvbmUgb2YgZmllbGRzIGlzICdpZCcgKi9cclxuICAgIGlmICghISF0aGlzLmNvbHVtbnMpIHtcclxuICAgICAgdGhpcy5hbGVydFNlcnZpY2UuZXJyb3IodGhpcy5pZCArIFwiOiBDb2x1bW5zIGFyZSBub3QgZGVmaW5lZC5cIiwgbm9uZUF1dG9DbG9zZWRBbGVydE9wdGlvbnMpXHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuY29sdW1ucz8uZmlsdGVyKChjOiBJQ29yZVRhYmxlQ29sdW1uSXRlbSkgPT4gYy5maWVsZCA9PT0gJ2lkJykubGVuZ3RoID09PSAwICYmIGlzRGV2TW9kZSgpICYmIHRoaXMuY29sdW1ucy5sZW5ndGgpIHtcclxuICAgICAgdGhpcy5hbGVydFNlcnZpY2UuZXJyb3IodGhpcy5pZCArIFwiOiBUaGUgY29sdW1ucyBtdXN0IGhhdmUgb25lIHdpdGggJ2ZpZWxkJyBwcm9wZXJ0eSA9PT0gJ2lkJ1wiLCBub25lQXV0b0Nsb3NlZEFsZXJ0T3B0aW9ucylcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnZpc2libGVDb2x1bW5zID0gdGhpcy5jb2x1bW5zPy5maWx0ZXIoKGM6IElDb3JlVGFibGVDb2x1bW5JdGVtKSA9PiAhISFjLmhpZGRlbilcclxuICAgIGlmICghISF0aGlzLnZpc2libGVDb2x1bW5zPy5sZW5ndGggJiYgaXNEZXZNb2RlKCkgJiYgdGhpcy5jb2x1bW5zPy5sZW5ndGgpIHtcclxuICAgICAgdGhpcy5hbGVydFNlcnZpY2UuZXJyb3IodGhpcy5pZCArIFwiOiBObyB2aXNpYmxlIGNvbHVtbiBkZWZpbmVkLlwiLCBub25lQXV0b0Nsb3NlZEFsZXJ0T3B0aW9ucylcclxuICAgIH1cclxuXHJcbiAgICAvLyBhZGQgZGVmYXVsdCBzb3J0IGRpcmVjdGlvbiB0byB2aXNpYmxlQ29sdW1uc1xyXG4gICAgdGhpcy52aXNpYmxlQ29sdW1ucz8ubWFwKGMgPT4gYy5zb3J0RGlyZWN0aW9uID0gRW51bVNvcnREaXJlY3Rpb24uTk9ORSlcclxuXHJcbiAgICAvKiBTVEFSVDogSW5pdGlhbGl6aW5nIHNlYXJjaE9iamVjdCAqL1xyXG4gICAgY29uc3QgbmV3U2VhcmNoT2JqZWN0OiBJU2VhcmNoSXRlbVtdID0gW107XHJcbiAgICB0aGlzLnZpc2libGVDb2x1bW5zPy5tYXAoYyA9PiB7XHJcbiAgICAgIG5ld1NlYXJjaE9iamVjdC5wdXNoKHtcclxuICAgICAgICBmaWVsZDogYy5maWVsZCxcclxuICAgICAgICBzZWFyY2hGb3I6ICcnXHJcbiAgICAgIH0pXHJcbiAgICB9KVxyXG4gICAgdGhpcy5zZWFyY2hPYmplY3QgPSBuZXdTZWFyY2hPYmplY3Q7XHJcbiAgICAvKiBFTkQ6IEluaXRpYWxpemluZyBzZWFyY2hPYmplY3QgKi9cclxuXHJcbiAgICBjb25zdCBmcm96ZW5Db2x1bW5zID0gdGhpcy52aXNpYmxlQ29sdW1ucz8uZmlsdGVyKChfLCBpbmRleCkgPT4gaW5kZXggPCB0aGlzLmZyb3plbik7XHJcblxyXG4gICAgbGV0IGxlZnQgPSB0aGlzLmNoZWNrYm94U2l6ZSEgKiAyIHx8IDA7IC8vIHRoZSBmaXJzdCBzaXplIGlzIGZvciBjaGVja2JveFxyXG4gICAgZnJvemVuQ29sdW1ucz8ubWFwKGMgPT4ge1xyXG4gICAgICBpZiAoISEhYy53aWR0aCkgY29uc29sZS5lcnJvcih0aGlzLmlkICsgXCI6IEVhY2ggZnJvemVuIGNvbHVtbiBtdXN0IGhhdmUgaXRzIG51bWJlciBwcm9wZXJ0eSAnd2lkdGgnLlwiKTtcclxuICAgICAgdGhpcy5mcm96ZW5MZWZ0cy5wdXNoKGxlZnQpO1xyXG4gICAgICBsZWZ0ID0gbGVmdCArIGMud2lkdGghXHJcbiAgICB9KVxyXG5cclxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxyXG4gICAgICB0aGlzLnJvd1RvdWNoZW5kU3RyZWFtJC5waXBlKFxyXG4gICAgICAgIGZpbHRlcigoeDogYW55KSA9PiB4LmN1cnJlbnQgPT09IHgucHJldmlvdXMpLFxyXG4gICAgICAgIGRlYm91bmNlVGltZSgyMDApLFxyXG4gICAgICApLnN1YnNjcmliZSgoeTogYW55KSA9PiB7XHJcbiAgICAgICAgdGhpcy5vblJvd0RvdWJsZUNsaWNrLmVtaXQoe1xyXG4gICAgICAgICAgaWQ6IHRoaXMuZGF0YVt5LmN1cnJlbnRdLmlkXHJcbiAgICAgICAgfSlcclxuICAgICAgfSlcclxuICAgIClcclxuXHJcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcclxuICAgICAgdGhpcy5tbHMubGFuZyQuc3Vic2NyaWJlKHggPT4gdGhpcy5sYW5nID0geClcclxuICAgIClcclxuXHJcbiAgICAvKiBDaGVjayBpZiBhbnkgb2YgY29sdW1ucyBpcyB0ZW1wbGF0ZVJlZiAqL1xyXG4gICAgY29uc3QgdGVtcGxhdGVSZWZGaWx0ZXIgPSB0aGlzLmNvbHVtbnM/LmZpbHRlcih4ID0+ICEheC50ZW1wbGF0ZVJlZilcclxuICAgIGlmICghIXRlbXBsYXRlUmVmRmlsdGVyPy5sZW5ndGgpIHtcclxuICAgICAgdGVtcGxhdGVSZWZGaWx0ZXIubWFwKHggPT4ge1xyXG4gICAgICAgIGlmICh4LnRlbXBsYXRlUmVmPy5lbGVtZW50UmVmPy5uYXRpdmVFbGVtZW50Py5oZWlnaHQgPiBOdW1iZXIodGhpcy5yb3dIZWlnaHQucmVwbGFjZSgncHgnLCAnJykpKSB7XHJcbiAgICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5lcnJvcihgQ2hp4buBdSBjYW8gY+G7p2EgJHt0aGlzLm1scy50cmFucyh4LmNhcHRpb24pfSB0ZW1wbGF0ZVJlZiBsw6AgJHt4LnRlbXBsYXRlUmVmPy5lbGVtZW50UmVmPy5uYXRpdmVFbGVtZW50Py5oZWlnaHR9LCBs4bubbiBoxqFuIGNoaeG7gXUgY2FvIGPhu6dhIGTDsm5nIGzGsOG7m2kgJHt0aGlzLnJvd0hlaWdodH1gLCBub25lQXV0b0Nsb3NlZEFsZXJ0T3B0aW9ucylcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICB9XHJcblxyXG4gIH1cclxuXHJcbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xyXG5cclxuICAgIGlmIChjaGFuZ2VzWydjaGVja2luZ1Jlc2V0RmxhZyddKSB7XHJcbiAgICAgIGlmICghIXRoaXMuZGF0YSkge1xyXG4gICAgICAgIHRoaXMudG9nZ2xlQ2hlY2tBbGwoZmFsc2UpXHJcbiAgICAgICAgdGhpcy5oZWFkZXJDaGVja2JveFN0YXRlID0gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAoY2hhbmdlc1snZGF0YSddKSB7XHJcblxyXG4gICAgICAvLyBDaGVjayB1bmlxdWUgb2YgXCJpZFwiXHJcbiAgICAgIGlmIChpc0Rldk1vZGUoKSkge1xyXG4gICAgICAgIGlmIChjaGFuZ2VzWydkYXRhJ10uY3VycmVudFZhbHVlPy5sZW5ndGgpIHtcclxuICAgICAgICAgIGNvbnN0IGFyciA9IGNoYW5nZXNbJ2RhdGEnXS5jdXJyZW50VmFsdWVcclxuICAgICAgICAgIGxldCBmaW5kRHVwbGljYXRlcyA9IGFyciA9PiBhcnIuZmlsdGVyKGl0ZW0gPT4gYXJyLmZpbHRlcih4ID0+IHguaWQgPT09IGl0ZW0uaWQpLmxlbmd0aCA+IDEpXHJcbiAgICAgICAgICBpZiAoISFmaW5kRHVwbGljYXRlcyhhcnIpLmxlbmd0aCkge1xyXG4gICAgICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5lcnJvcihcIkNvcmVUYWJsZSByZXF1aXJlcyB1bmlxdWUgaWQgdmFsdWVzIVwiLCBub25lQXV0b0Nsb3NlZEFsZXJ0T3B0aW9ucylcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGNvbnN0IG5ld0NoZWNraW5nTW9kZWw6IGJvb2xlYW5bXSA9IFtdO1xyXG4gICAgICBjaGFuZ2VzWydkYXRhJ10uY3VycmVudFZhbHVlPy5tYXAoKF86IGFueSkgPT4ge1xyXG4gICAgICAgIG5ld0NoZWNraW5nTW9kZWwucHVzaChmYWxzZSlcclxuICAgICAgfSk7XHJcbiAgICAgIHRoaXMuY2hlY2tpbmdNb2RlbCA9IG5ld0NoZWNraW5nTW9kZWw7XHJcblxyXG4gICAgICBpZiAoISF0aGlzLmxhenlMb2FkaW5nKSB7XHJcbiAgICAgICAgaWYgKCEhdGhpcy5jb3JlVGFibGUpIHtcclxuICAgICAgICAgIHRoaXMuY2FsY3VsYXRlU2Nyb2xsKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMudmlzaWJsZURhdGEgPSBjaGFuZ2VzWydkYXRhJ10uY3VycmVudFZhbHVlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGNoYW5nZXNbJ2NoZWNrZWRJZHMnXSkge1xyXG4gICAgICBjb25zdCBuZXdDaGVja2luZ01vZGVsOiBib29sZWFuW10gPSBbXTtcclxuICAgICAgY2hhbmdlc1snY2hlY2tlZElkcyddLmN1cnJlbnRWYWx1ZT8ubWFwKChjaGVja2VkSWQ6IGFueSkgPT4ge1xyXG4gICAgICAgIHRoaXMuZGF0YS5tYXAoKGl0ZW0pID0+IHtcclxuICAgICAgICAgIGlmIChpdGVtWydpZCddID09PSBjaGVja2VkSWQpIHtcclxuICAgICAgICAgICAgbmV3Q2hlY2tpbmdNb2RlbC5wdXNoKHRydWUpO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgbmV3Q2hlY2tpbmdNb2RlbC5wdXNoKGZhbHNlKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG4gICAgICB9KVxyXG4gICAgICB0aGlzLmNoZWNraW5nTW9kZWwgPSBuZXdDaGVja2luZ01vZGVsO1xyXG4gICAgfVxyXG4gICAgLy8gaWYgKGNoYW5nZXNbJ2xvYWRpbmcnXSkge1xyXG4gICAgLy8gICB0aGlzLmxvYWRpbmcgPSBjaGFuZ2VzWydsb2FkaW5nJ10uY3VycmVudFZhbHVlO1xyXG4gICAgLy8gfVxyXG4gICAgaWYgKGNoYW5nZXNbJ2NvbHVtbnMnXSkge1xyXG4gICAgICB0aGlzLnZpc2libGVDb2x1bW5zID0gdGhpcy5jb2x1bW5zPy5maWx0ZXIoKGM6IElDb3JlVGFibGVDb2x1bW5JdGVtKSA9PiAhISFjLmhpZGRlbikgfHwgW11cclxuICAgIH1cclxuICAgIGlmIChjaGFuZ2VzWydjb2x1bW5TZWFyY2hEZWZhdWx0T3BlbiddKSB7XHJcbiAgICAgIHRoaXMuc2VhcmNoQWN0aXZlID0gISFjaGFuZ2VzWydjb2x1bW5TZWFyY2hEZWZhdWx0T3BlbiddLmN1cnJlbnRWYWx1ZVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZXNldEhlYWRlckZpcnN0Um93SGVpZ2h0KCk6IHZvaWQge1xyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIGNvbnN0IGZpcnN0SGVhZGVyUm93SGVpZ2h0ID0gdGhpcy5maXJzdEhlYWRlclJvdy5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmhlaWdodDtcclxuICAgICAgdGhpcy5jb3JlVGFibGUubmF0aXZlRWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSgnLS1oZWFkZXItMXN0LXJvdy1oZWlnaHQnLFxyXG4gICAgICAgIGZpcnN0SGVhZGVyUm93SGVpZ2h0ICsgJ3B4J1xyXG4gICAgICApO1xyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcclxuXHJcbiAgICBpZiAodGhpcy5jb3JlUGFnZUxpc3RJbnN0YW5jZU51bWJlcikge1xyXG4gICAgICBjb25zdCBjYWxsZXJGaWx0ZXIgPSB0aGlzLmNvcmVQYWdlTGlzdFNlcnZpY2UuaW5zdGFuY2VzLmZpbHRlcih4ID0+IHguaW5zdGFuY2VOdW1iZXIgPT09IHRoaXMuY29yZVBhZ2VMaXN0SW5zdGFuY2VOdW1iZXIpO1xyXG4gICAgICBpZiAoISFjYWxsZXJGaWx0ZXIubGVuZ3RoKSB7XHJcbiAgICAgICAgY29uc3QgY2FsbGVyID0gY2FsbGVyRmlsdGVyWzBdO1xyXG4gICAgICAgIGNhbGxlci5jb3JlVGFibGVSZWYgPSB0aGlzLmNvcmVUYWJsZTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKCEhIXRoaXMuZnJlZU1vZGUpIHtcclxuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcclxuICAgICAgICAgIHRoaXMuY29yZVBhZ2VMaXN0U2VydmljZS5pbnN0YW5jZXMuZmlsdGVyKHggPT4geC5pbnN0YW5jZU51bWJlciA9PT0gdGhpcy5jb3JlUGFnZUxpc3RJbnN0YW5jZU51bWJlcilbMF0uaWQkLnN1YnNjcmliZSh4ID0+IHtcclxuICAgICAgICAgICAgdGhpcy5hY3RpdmVSb3cgPSB4O1xyXG4gICAgICAgICAgfSlcclxuICAgICAgICApXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxyXG4gICAgICAgIHRoaXMuY29yZVBhZ2VMaXN0U2VydmljZS5pbnN0YW5jZXMuZmlsdGVyKHggPT4geC5pbnN0YW5jZU51bWJlciA9PT0gdGhpcy5jb3JlUGFnZUxpc3RJbnN0YW5jZU51bWJlcilbMF0udGJvZHlIZWlnaHQkLnN1YnNjcmliZSh4ID0+IHtcclxuICAgICAgICAgIGlmICghIXgpIHtcclxuICAgICAgICAgICAgdGhpcy50Ym9keWhlaWdodCA9IHg7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuICAgICAgKVxyXG5cclxuICAgICAgY29uc3QgcmVjdCA9IHRoaXMuY29yZVRhYmxlLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XHJcbiAgICAgIHRoaXMuY29yZVRhYmxlLm5hdGl2ZUVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoJy0tdGFibGUtd2lkdGgnLCByZWN0LndpZHRoICsgJ3B4JylcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5zY3JvbGxTdHJlYW0kID0gZnJvbUV2ZW50KHRoaXMudGFibGUubmF0aXZlRWxlbWVudCwgJ3Njcm9sbCcpO1xyXG5cclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG5cclxuICAgICAgaWYgKCEhdGhpcy53aWR0aCkgdGhpcy5jb3JlVGFibGUubmF0aXZlRWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSgnLS13aWR0aCcsIHRoaXMud2lkdGggKyAncHgnKTtcclxuICAgICAgaWYgKCEhdGhpcy5yb3dIZWlnaHQpIHRoaXMuY29yZVRhYmxlLm5hdGl2ZUVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoJy0tcm93LWhlaWdodCcsIHRoaXMucm93SGVpZ2h0ICsgJ3B4Jyk7XHJcbiAgICAgIGlmICghIXRoaXMuaGVpZ2h0KSB0aGlzLmNvcmVUYWJsZS5uYXRpdmVFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KCctLWhlaWdodCcsIHRoaXMuaGVpZ2h0ICsgJ3B4Jyk7XHJcblxyXG4gICAgICAvLyBDaOG7iSBzdWJzY3JpZGUgc2F1IGtoaSBjw6FjIGzhu4duaCB0csOqbiDEkcOjIMSRxrDhu6NjIHRo4buxYyBoaeG7h25cclxuICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXHJcbiAgICAgICAgdGhpcy5zY3JvbGxTdHJlYW0kXHJcbiAgICAgICAgICAucGlwZShcclxuICAgICAgICAgICAgZGVib3VuY2VUaW1lKDUwKVxyXG4gICAgICAgICAgKVxyXG4gICAgICAgICAgLnN1YnNjcmliZShldmVudCA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuc2Nyb2xsVG9wID0gZXZlbnQuc3JjRWxlbWVudC5zY3JvbGxUb3A7XHJcbiAgICAgICAgICAgIHRoaXMuY2FsY3VsYXRlU2Nyb2xsKCk7XHJcbiAgICAgICAgICB9KVxyXG4gICAgICApXHJcblxyXG4gICAgfSwgMClcclxuXHJcbiAgICB0aGlzLnJlc2V0SGVhZGVyRmlyc3RSb3dIZWlnaHQoKTtcclxuXHJcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcclxuICAgICAgdGhpcy5tbHMubGFuZyQuc3Vic2NyaWJlKF8gPT4ge1xyXG4gICAgICAgIHRoaXMucmVzZXRIZWFkZXJGaXJzdFJvd0hlaWdodCgpO1xyXG4gICAgICB9KVxyXG4gICAgKVxyXG5cclxuICB9XHJcblxyXG4gIG9uVG9vbENsaWNrTG9jYWwocm93OiBhbnksIHRvb2xJbmRleDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICB0aGlzLm9uVG9vbENsaWNrLmVtaXQoe1xyXG4gICAgICBjb2RlOiB0aGlzLnRvb2xzW3Rvb2xJbmRleF0uY29kZSxcclxuICAgICAgaWQ6IHJvd1snaWQnXVxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIHRvZ2dsZUNoZWNrQWxsKGFyZ3M6IGJvb2xlYW4pIHtcclxuICAgIGNvbnN0IG5ld0NoZWNraW5nTW9kZWw6IGJvb2xlYW5bXSA9IFtdO1xyXG4gICAgY29uc3QgbmV3U2VsZWN0ZWRJZHM6IGFueVtdID0gW107XHJcbiAgICBjb25zdCBuZXdTZWxlY3RlZERhdGE6IGFueVtdID0gW107XHJcblxyXG4gICAgdGhpcy5kYXRhLm1hcChpdGVtID0+IHtcclxuICAgICAgbmV3Q2hlY2tpbmdNb2RlbC5wdXNoKGFyZ3MpO1xyXG4gICAgICBpZiAoYXJncykge1xyXG4gICAgICAgIG5ld1NlbGVjdGVkSWRzLnB1c2goaXRlbS5pZCk7XHJcbiAgICAgICAgbmV3U2VsZWN0ZWREYXRhLnB1c2goaXRlbSk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuY2hlY2tpbmdNb2RlbCA9IG5ld0NoZWNraW5nTW9kZWw7XHJcbiAgICB0aGlzLmNoZWNraW5nU3RhdGUgPSBhcmdzID8gMSA6IDA7XHJcbiAgICB0aGlzLm9uU2VsZWN0ZWRJZHNDaGFuZ2UuZW1pdChuZXdTZWxlY3RlZElkcyk7XHJcbiAgICB0aGlzLm9uU2VsZWN0ZWREYXRhQ2hhbmdlLmVtaXQobmV3U2VsZWN0ZWREYXRhKTtcclxuICB9XHJcblxyXG4gIG9uQ2hlY2tpbmdOZ01vZGVsQ2hhbmdlKCkge1xyXG4gICAgY29uc3QgbmV3U2VsZWN0ZWRJZHM6IG51bWJlcltdID0gW107XHJcbiAgICBjb25zdCBuZXdTZWxlY3RlZERhdGE6IGFueVtdID0gW107XHJcbiAgICB0aGlzLmRhdGEuZmlsdGVyKChfOiBhbnksIGluZGV4OiBudW1iZXIpID0+ICEhdGhpcy5jaGVja2luZ01vZGVsW2luZGV4XSkubWFwKGl0ZW0gPT4ge1xyXG4gICAgICBuZXdTZWxlY3RlZElkcy5wdXNoKGl0ZW0uaWQpXHJcbiAgICAgIG5ld1NlbGVjdGVkRGF0YS5wdXNoKGl0ZW0pXHJcbiAgICB9KVxyXG4gICAgdGhpcy5vblNlbGVjdGVkSWRzQ2hhbmdlLmVtaXQobmV3U2VsZWN0ZWRJZHMpO1xyXG4gICAgdGhpcy5vblNlbGVjdGVkRGF0YUNoYW5nZS5lbWl0KG5ld1NlbGVjdGVkRGF0YSk7XHJcblxyXG4gICAgaWYgKG5ld1NlbGVjdGVkSWRzLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICB0aGlzLmNoZWNraW5nU3RhdGUgPSAwOyAvLyBub25lXHJcbiAgICB9IGVsc2UgaWYgKG5ld1NlbGVjdGVkSWRzLmxlbmd0aCA9PT0gdGhpcy5jaGVja2luZ01vZGVsLmxlbmd0aCkge1xyXG4gICAgICB0aGlzLmNoZWNraW5nU3RhdGUgPSAxOyAvLyBhbGxcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuY2hlY2tpbmdTdGF0ZSA9IDI7IC8vIG1peGVkXHJcbiAgICB9XHJcblxyXG4gIH1cclxuXHJcbiAgb25Eb3VibGVDbGlja0xvY2FsKHJvd0luZGV4OiBudW1iZXIpIHtcclxuICAgIHRoaXMub25Sb3dEb3VibGVDbGljay5lbWl0KHRoaXMuZGF0YVtyb3dJbmRleF0pXHJcbiAgfVxyXG5cclxuICBvbkNsaWNrTG9jYWwocm93OiBhbnksIGV2ZW50OiBhbnkpIHtcclxuXHJcbiAgICBjb25zb2xlLmxvZyhcIm9uQ2xpY2tMb2NhbCByb3dcIiwgcm93LCBcImV2ZW50XCIsIGV2ZW50KVxyXG5cclxuICAgIGlmIChldmVudC5kZXRhaWwgPT09IDEpIHtcclxuICAgICAgdGhpcy5hY3RpdmVSb3cgPSByb3cuaWQ7XHJcbiAgICAgIHRoaXMub25Sb3dDbGljay5lbWl0KHJvdyk7XHJcbiAgICB9IGVsc2UgaWYgKGV2ZW50LmRldGFpbCA9PT0gMikge1xyXG4gICAgICB0aGlzLm9uUm93RG91YmxlQ2xpY2suZW1pdChyb3cpXHJcbiAgICB9XHJcblxyXG4gIH1cclxuXHJcbiAgb25Sb3dUb3VjaGVuZChyb3dJbmRleDogbnVtYmVyKSB7XHJcbiAgICB0aGlzLnJvd1RvdWNoZW5kU3RyZWFtJC5uZXh0KHtcclxuICAgICAgcHJldmlvdXM6IHRoaXMucm93VG91Y2hlbmRTdHJlYW0kLnZhbHVlLmN1cnJlbnQsXHJcbiAgICAgIGN1cnJlbnQ6IHJvd0luZGV4XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIG9uU2VhcmNoKGU6IHN0cmluZywgc2VhcmNoQ29sdW1uSW5kZXg6IG51bWJlcik6IHZvaWQge1xyXG4gICAgdGhpcy5zZWFyY2hPYmplY3QuZmlsdGVyKChfLCBpKSA9PiBpID09PSBzZWFyY2hDb2x1bW5JbmRleClbMF0uc2VhcmNoRm9yID0gZTtcclxuICAgIHRoaXMub25TZWFyY2hpbmcuZW1pdCh0aGlzLnNlYXJjaE9iamVjdCk7XHJcbiAgfVxyXG5cclxuICBvbkNvbHVtbkNhcHRpb25DbGlja0xvY2FsKGNvbHVtbjogSUNvcmVUYWJsZUNvbHVtbkl0ZW0pIHtcclxuXHJcbiAgICBpZiAoISF0aGlzLmRpc2FibGVTb3J0aW5nIHx8ICEhY29sdW1uLnRlbXBsYXRlUmVmKSByZXR1cm47IC8vIG5vIGFjdGlvbiBmb3IgdGVtcGxhdGVSZWYgdHlwZVxyXG5cclxuICAgIHRoaXMub25Db2x1bW5DYXB0aW9uQ2xpY2suZW1pdChjb2x1bW4pO1xyXG5cclxuICAgIC8vIHVwZGF0ZSBzb3J0IGRpY3JlY3Rpb24gcHJvcGVydHkgb2YgdGhpcyBjb2x1bW5cclxuICAgIC8vIGFuZCBjbGVhciB1cCB0aGUgcHJvcGVydHkgZm9yIHRoZSBvdGhlciB2aXNpYmxlQ29sdW1uc1xyXG4gICAgdGhpcy52aXNpYmxlQ29sdW1ucy5tYXAodmMgPT4ge1xyXG4gICAgICBpZiAodmMuZmllbGQgPT09IGNvbHVtbi5maWVsZCkge1xyXG4gICAgICAgIHZjLnNvcnREaXJlY3Rpb24gPSB2Yy5zb3J0RGlyZWN0aW9uID09PSBFbnVtU29ydERpcmVjdGlvbi5OT05FID8gRW51bVNvcnREaXJlY3Rpb24uQVNDIDogdmMuc29ydERpcmVjdGlvbiA9PT0gRW51bVNvcnREaXJlY3Rpb24uQVNDID8gRW51bVNvcnREaXJlY3Rpb24uREVTQyA6IEVudW1Tb3J0RGlyZWN0aW9uLk5PTkU7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdmMuc29ydERpcmVjdGlvbiA9IEVudW1Tb3J0RGlyZWN0aW9uLk5PTkVcclxuICAgICAgfVxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIHRvZ2dsZUFsbG93U2VhcmNoKCk6IHZvaWQge1xyXG4gICAgdGhpcy5zZWFyY2hBY3RpdmUgPSAhISF0aGlzLnNlYXJjaEFjdGl2ZVxyXG4gIH1cclxuXHJcbiAgb25JbmxpbmVUb29sQ2xpY2soZTogSUNvcmVCdXR0b25WTlMsIHJvdzogYW55KTogdm9pZCB7XHJcbiAgICBjb25zb2xlLmxvZyhcIm9uSW5saW5lVG9vbENsaWNrXCIsIGUsIHJvdylcclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLm1hcCh4ID0+IHg/LnVuc3Vic2NyaWJlKCkpO1xyXG4gIH1cclxuXHJcbn1cclxuIiwiPGRpdiAjY29yZVRhYmxlIGNsYXNzPVwiY29yZS10YWJsZS1jb250YWluZXJcIiBbY2xhc3MuaGlkZS1zZWFyY2hdPVwiISEhc2VhcmNoQWN0aXZlXCI+XHJcblxyXG4gICAgPCEtLSBcclxuICAgICAgICBD4bqnbiB0cnV54buBbiBjaMOtbmggeMOhYyBoZWlnaHQgY+G7p2EgQ29yZVRhYmxlXHJcbiAgICAgICAgVHV5IG5oacOqbiBjaGnhu4F1IGNhbyBj4bunYSBDb3JlVGFibGUgY+G6p24gxJHGsOG7o2MgdMOtbmggZOG7sWEgdsOgbyBjaGnhu4F1IGNhbyBj4bunYSBjw6FjIHBo4bqnbiB04butIERPTSBs4bqnbiBsxrDhu6N0IHThu6sgbOG7m3Agbmdvw6BpIHbDoG8gbOG7m3AgdHJvbmdcclxuICAgICAgICBBbmggZW0gY2jGsGEgdMOtbmgga2hpIHRyaeG7g24ga2hhaSBjb2RlLCBuw6puIMSRYW5nIGPhuqduIGPDsyBjb24gc+G7kSBkZWZhdWx0IGzDoCA0MDBweFxyXG4gICAgLS0+XHJcbiAgICA8dGFibGUgW2NsYXNzLndyYXBdPVwiISF3cmFwXCIgI3RhYmxlIFtuZ1N0eWxlXT1cInsgaGVpZ2h0OiAoaGVpZ2h0IHx8IDQwMCkgKyAncHgnIH1cIj5cclxuICAgICAgICA8Y29sZ3JvdXA+XHJcbiAgICAgICAgICAgIEBpZiAoc2hvd0NoZWNrYm94KSB7XHJcbiAgICAgICAgICAgIDxjb2w+IH1cclxuICAgICAgICAgICAgQGZvciAoY29sIG9mIHZpc2libGVDb2x1bW5zOyB0cmFjayBjb2wpIHtcclxuICAgICAgICAgICAgPGNvbD4gfVxyXG4gICAgICAgICAgICBAaWYgKHNob3dUb29scykge1xyXG4gICAgICAgICAgICA8Y29sPiB9XHJcbiAgICAgICAgPC9jb2xncm91cD5cclxuICAgICAgICA8dGhlYWQ+XHJcbiAgICAgICAgICAgIDx0ciAjZmlyc3RIZWFkZXJSb3cgZGF0YS1yb3c9XCIxXCIgW25nU3R5bGVdPVwie1xyXG4gICAgICAgICAgICAgICAgaGVpZ2h0OiBoZWFkZXJGaXJzdFJvd0hlaWdodCArICdweCdcclxuICAgICAgICAgICAgfVwiPlxyXG4gICAgICAgICAgICAgICAgQGlmIChzaG93Q2hlY2tib3gpIHtcclxuICAgICAgICAgICAgICAgIDx0aCBjbGFzcz1cImNoZWNrLWNvbC1oZWFkZXIgY2hlY2stY2VsbCBmcm96ZW4tY29sXCIgc3R5bGU9XCJsZWZ0OiAwcHhcIlxyXG4gICAgICAgICAgICAgICAgICAgIFthdHRyLnJvd3NwYW5dPVwic2VhcmNoQWN0aXZlID8gMiA6IDFcIiBbbmdTdHlsZV09XCJ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogaGVhZGVyQmFja2dyb3VuZENvbG9yLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xvcjogJ3doaXRlJ1xyXG4gICAgICAgICAgICAgICAgICAgIH1cIj5cclxuICAgICAgICAgICAgICAgICAgICA8IS0tIHBsZWFzZSBkbyBub3QgY2hhbmdlIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgW25nU3R5bGVdPVwie1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6IGNoZWNrYm94U2l6ZSAqIDIgKyAncHgnXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY2hlY2t3cmFwXCIgW25nU3R5bGVdPVwie1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDogc2VhcmNoQWN0aXZlID8gaGVhZGVyRmlyc3RSb3dIZWlnaHQgKyBoZWFkZXJTZWNvbmRSb3dIZWlnaHQgKyAncHgnIDogaGVhZGVyRmlyc3RSb3dIZWlnaHQgKyAncHgnXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgW2lkXT1cIidjaGVjay1jb2wtaGVhZGVyJyArIGlkXCIgWyhuZ01vZGVsKV09XCJoZWFkZXJDaGVja2JveFN0YXRlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJ0b2dnbGVDaGVja0FsbCgkZXZlbnQpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNoZWNrbWFya1wiIFtjbGFzcy5taXhlZF09XCJjaGVja2luZ1N0YXRlPT09MlwiIFtuZ1N0eWxlXT1cIntcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9wOiAoKGhlYWRlckZpcnN0Um93SGVpZ2h0ICsgaGVhZGVyU2Vjb25kUm93SGVpZ2h0ICogKHNlYXJjaEFjdGl2ZSA/IDEgOiAwKSkgLzIgLSBjaGVja2JveFNpemUvMikgKyAncHgnXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvdGg+XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBAZm9yIChjb2wgb2YgdmlzaWJsZUNvbHVtbnM7IHRyYWNrIGNvbCkge1xyXG4gICAgICAgICAgICAgICAgPHRoIFtjbGFzcy5mcm96ZW4tY29sXT1cIiRpbmRleCA8IGZyb3plblwiXHJcbiAgICAgICAgICAgICAgICAgICAgW3N0eWxlXT1cIiRpbmRleCA8IGZyb3plbiA/ICdsZWZ0OiAnICsgZnJvemVuTGVmdHNbJGluZGV4XSArICdweCcgOiAnJ1wiIFtuZ1N0eWxlXT1cIntcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogaGVhZGVyQmFja2dyb3VuZENvbG9yLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6ICd3aGl0ZScsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiAhIW5vUGFkZGluZ0NlbGwgPyAnMHB4IDBweCcgOiAnMHB4IDEycHgnXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cIj5cclxuICAgICAgICAgICAgICAgICAgICA8IS0tIC0xcHggZm9yIGJvcmRlckJvdHRvbSBvZiBoZWFkZXIgZmlyc3Qgcm93IC0tPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2x1bW4tY2FwdGlvblwiIFtjbGFzcy5hc2NlbmRpbmddPVwiY29sLnNvcnREaXJlY3Rpb249PT0tMVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5kZXNjZW5kaW5nXT1cImNvbC5zb3J0RGlyZWN0aW9uPT09MVwiIChjbGljayk9XCJvbkNvbHVtbkNhcHRpb25DbGlja0xvY2FsKGNvbClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbYXBwVG9vbHRpcF09XCJjb2wuY2FwdGlvbiB8IHRyYW5zbGF0ZSA6IGxhbmdcIiBbbmdTdHlsZV09XCJ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6IGNvbC53aWR0aCArICdweCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiAoaGVhZGVyRmlyc3RSb3dIZWlnaHQgLSAxKSArICdweCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogJ2ZsZXgnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsaWduSXRlbXM6ICdjZW50ZXInLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaXRlU3BhY2U6ICEhaGVhZGVyV3JhcCA/ICdpbml0aWFsJyA6ICdpbmhlcml0J1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVwiPnt7IGNvbC5jYXB0aW9uIHwgdHJhbnNsYXRlIDogbGFuZyB9fTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyZXNpemVyXCIgKG1vdXNlZG93bik9XCJzdGFydERyYWdnaW5nKCRldmVudCwgY29sLCBmYWxzZSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAobW91c2V1cCk9XCJzdG9wRHJhZ2dpbmcoJGV2ZW50LCBjb2wsIGZhbHNlKVwiIChtb3VzZW1vdmUpPVwibW92ZUV2ZW50KCRldmVudCwgY29sKVwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC90aD5cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIEBpZiAoc2hvd1Rvb2xzICYmIHZpc2libGVDb2x1bW5zPy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgIDx0aCBjbGFzcz1cImNoZWNrLWNvbC1oZWFkZXIgY2hlY2stY2VsbFwiIFtuZ1N0eWxlXT1cIntcclxuICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiBoZWFkZXJCYWNrZ3JvdW5kQ29sb3IsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiAnd2hpdGUnXHJcbiAgICAgICAgICAgICAgICAgICAgfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9XCJ3aWR0aDogMTAwcHg7XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L3RoPlxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgQGlmICghc2VhcmNoU3dpdGNoRGlzYWJsZWQpIHtcclxuICAgICAgICAgICAgICAgIDx0aCBbbmdTdHlsZV09XCJ7XHJcbiAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiBoZWFkZXJCYWNrZ3JvdW5kQ29sb3IsXHJcbiAgICAgICAgICAgICAgICAgICAgd2lkdGg6ICc1MHB4J1xyXG4gICAgICAgICAgICAgICAgfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJzZWFyY2hTd2l0Y2hlclwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgPC90aD5cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgQGlmIChzZWFyY2hBY3RpdmUpIHtcclxuICAgICAgICAgICAgPHRyIGRhdGEtcm93PVwiMlwiIFtjbGFzcy5oaWRlbl09XCIhISFzZWFyY2hBY3RpdmVcIj5cclxuICAgICAgICAgICAgICAgIEBmb3IgKGNvbCBvZiB2aXNpYmxlQ29sdW1uczsgdHJhY2sgY29sKSB7XHJcbiAgICAgICAgICAgICAgICA8dGggW2NsYXNzLmZyb3plbi1jb2xdPVwiJGluZGV4IDwgZnJvemVuXCJcclxuICAgICAgICAgICAgICAgICAgICBbc3R5bGVdPVwiJGluZGV4IDwgZnJvemVuID8gJ2xlZnQ6ICcgKyBmcm96ZW5MZWZ0c1skaW5kZXhdICsgJ3B4JyA6ICcnXCIgW25nU3R5bGVdPVwie1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogaGVhZGVyQmFja2dyb3VuZENvbG9yLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiAnd2hpdGUnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6ICcwcHggMTJweCdcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cIj5cclxuICAgICAgICAgICAgICAgICAgICBAaWYgKCFjb2wuaGlkZVNlYXJjaEJveCkge1xyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgW3N0eWxlXT1cIid3aWR0aDogJyArIGNvbC53aWR0aCArICdweDsnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwiZm9ybS1jb250cm9sIHNlYXJjaFwiIFsobmdNb2RlbCldPVwic2VhcmNoT2JqZWN0WyRpbmRleF0uc2VhcmNoRm9yXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cIm9uU2VhcmNoKCRldmVudCwgJGluZGV4KVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIDwvdGg+XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICA8dGggW25nU3R5bGVdPVwie1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IGhlYWRlckJhY2tncm91bmRDb2xvcixcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6ICd3aGl0ZSdcclxuICAgICAgICAgICAgICAgICAgICB9XCI+PC90aD5cclxuICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIDwvdGhlYWQ+XHJcblxyXG4gICAgICAgIDx0Ym9keSBbY2xhc3MubG9hZGluZ109XCJsb2FkaW5nXCI+XHJcbiAgICAgICAgICAgIDxjb3JlLWxvYWRpbmctc3VyZmFjZSBbbG9hZGluZ109XCJsb2FkaW5nXCIgW2hlaWdodF09XCJ0Ym9keWhlaWdodCB8fCA1MDBcIj48L2NvcmUtbG9hZGluZy1zdXJmYWNlPlxyXG5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgIEBpZiAoISFsYXp5TG9hZGluZykge1xyXG4gICAgICAgICAgICAgICAgPHRyIFtuZ1N0eWxlXT1cInsgaGVpZ2h0OiBoaWRkZW5Ub3BIZWlnaHQgKyAncHgnIH1cIj5cclxuICAgICAgICAgICAgICAgICAgICA8dGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgW25nU3R5bGVdPVwieyBoZWlnaHQ6IGhpZGRlblRvcEhlaWdodCArICdweCcgfVwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIEBmb3IgKHJvdyBvZiB2aXNpYmxlRGF0YTsgdHJhY2sgcm93KSB7XHJcbiAgICAgICAgICAgICAgICA8dHIgKGNsaWNrKT1cIm9uQ2xpY2tMb2NhbChyb3csICRldmVudClcIiAodG91Y2hlbmQpPVwib25Sb3dUb3VjaGVuZCgkaW5kZXgrc3RhcnROb2RlKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmFjdGl2ZV09XCJyb3cuaWQgPT09IGFjdGl2ZVJvdyAmJiAhISFkaXNhYmxlSGlnaGxpZ2h0T25DbGlja1wiPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8IS0tIDxkaXYgY2xhc3M9XCJyb3ctaXRlbS10b29sc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93LWl0ZW0tdG9vbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdy1pdGVtLXRvb2wtd3JhcHBlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjb3JlLWJ1dHRvbi1ncm91cC12bnMgW3Nob3duSXRlbXNdPVwiaW5saW5lVG9vbEl0ZW1zXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGJ1dHRvbkNsaWNrKT1cIm9uSW5saW5lVG9vbENsaWNrKCRldmVudCwgcm93KVwiPjwvY29yZS1idXR0b24tZ3JvdXAtdm5zPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PiAtLT5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgQGlmIChzaG93Q2hlY2tib3gpIHtcclxuICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJjaGVjay1jZWxsIGZyb3plbi1jb2xcIiBzdHlsZT1cImxlZnQ6IDBweDtcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY2hlY2t3cmFwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgY2xhc3M9XCJjaGVjay1yb3dcIiBbaWRdPVwiJ2NoZWNrLXJvdycgKyAoJGluZGV4ICsgc3RhcnROb2RlKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJjaGVja2luZ01vZGVsWyRpbmRleCtzdGFydE5vZGVdXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJvbkNoZWNraW5nTmdNb2RlbENoYW5nZSgpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNoZWNrbWFya1wiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgQGZvciAoY29sIG9mIHZpc2libGVDb2x1bW5zOyB0cmFjayBjb2wpIHtcclxuICAgICAgICAgICAgICAgICAgICA8dGQgW2NsYXNzLmZyb3plbi1jb2xdPVwiJGluZGV4IDwgZnJvemVuXCIgW25nU3R5bGVdPVwie1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZWZ0OiAkaW5kZXggPCBmcm96ZW4gPyBmcm96ZW5MZWZ0c1skaW5kZXhdICsgJ3B4JyA6ICcwcHgnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiAhIW5vUGFkZGluZ0NlbGwgPyAnMHB4IDBweCcgOiAnMnB4IDBweCdcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XCI+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBAaWYgKCFjb2w/LnRlbXBsYXRlUmVmKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gSU4gTU9TVCBDQVNFUyBXRSBORUVEIFRPIFJFTkRFUiBUSEUgQ0VMTCBXSVRIIFBSSU1JVElWRSBUWVBFIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IFtjbGFzcy5zY3JvbGwteV09XCJhbGxvd0NlbGxTY3JvbGxZXCIgW25nU3R5bGVdPVwie1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6ICEhY29sLndpZHRoID8gY29sLndpZHRoICsgJ3B4JyA6ICd1bnNldCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0QWxpZ246ICEhY29sLmFsaWduID8gY29sLmFsaWduLnRvTG93ZXJDYXNlKCkgOiAndW5zZXQnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZUhlaWdodDogcm93SGVpZ2h0LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogISFub1BhZGRpbmdDZWxsID8gJzBweCAwcHgnIDogJzBweCAxMnB4J1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XCIgW2FwcFRvb2x0aXBdPVwicm93W2NvbC5maWVsZF0gfCB0YWJsZUNlbGw6IGNvbC5waXBlIDogbGFuZ1wiPnt7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dbY29sLmZpZWxkXSB8IHRhYmxlQ2VsbDogY29sLnBpcGUgOiBsYW5nIH19PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IEBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBCVVQgU09NRSBUSU1FIFdFIE5FRUQgVE8gUkVOREVSIFRIRSBDRUxMIFdJVEggVEVNUExBVEUgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgW25nU3R5bGVdPVwie1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6ICEhY29sLndpZHRoID8gY29sLndpZHRoICsgJ3B4JyA6ICd1bnNldCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0QWxpZ246ICEhY29sLmFsaWduID8gY29sLmFsaWduLnRvTG93ZXJDYXNlKCkgOiAndW5zZXQnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogISFub1BhZGRpbmdDZWxsID8gJzBweCAwcHgnIDogJzBweCAxMnB4J1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBAaWYgKCFjb2w/LnRlbXBsYXRlUmVmQWxsb3dFZGl0T25Sb3dBY3RpdmVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJjb2w/LnRlbXBsYXRlUmVmITsgY29udGV4dDogeyBjb250ZXh0OiByb3cgfVwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBAZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJjb2w/LnRlbXBsYXRlUmVmITsgY29udGV4dDogeyBjb250ZXh0OiByb3csIGFsbG93RWRpdDogcm93LmlkID09PSBhY3RpdmVSb3cgfVwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcblxyXG4gICAgICAgICAgICAgICAgICAgIEBpZiAoc2hvd1Rvb2xzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgPHRkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidG9vbHMtZ3JvdXAgZC1mbGV4LWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQGZvciAodG9vbCBvZiB0b29sczsgdHJhY2sgdG9vbCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBbY2xhc3NdPVwiJ3Rvb2xzLWljb24gJyArIHRvb2wuY2xhc3NcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5kaXNhYmxlZF09XCJ0b29sLmRpc2FibGVkRm4gPyB0b29sLmRpc2FibGVkRm4hKHJvdykgOiBmYWxzZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmhpZGRlbl09XCJ0b29sLmhpZGRlbkZuID8gdG9vbC5oaWRkZW5GbiEocm93KSA6IGZhbHNlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25Ub29sQ2xpY2tMb2NhbChyb3csICRpbmRleClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgQGlmICghIWxhenlMb2FkaW5nKSB7XHJcbiAgICAgICAgICAgICAgICA8dHIgW25nU3R5bGVdPVwie1xyXG4gICAgICAgICAgICAgICAgICAgIGhlaWdodDogaGlkZGVuQm90dG9tSGVpZ2h0ICsgJ3B4J1xyXG4gICAgICAgICAgICAgICAgfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDx0ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBbbmdTdHlsZV09XCJ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiBoaWRkZW5Cb3R0b21IZWlnaHQgKyAncHgnXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgIDwvdGJvZHk+XHJcbiAgICAgICAgQGlmICghIWZvb3Rlcikge1xyXG4gICAgICAgIDx0Zm9vdD5cclxuICAgICAgICAgICAgRm9vdGVyXHJcbiAgICAgICAgPC90Zm9vdD5cclxuICAgICAgICB9XHJcbiAgICA8L3RhYmxlPlxyXG5cclxuICAgIDxuZy10ZW1wbGF0ZSAjc2VhcmNoU3dpdGNoZXI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInNlYXJjaC10b2dnbGVyIGQtZmxleC1jZW50ZXIgcG9pbnRlclwiIChjbGljayk9XCJ0b2dnbGVBbGxvd1NlYXJjaCgpXCI+XHJcbiAgICAgICAgICAgIDxpIGNsYXNzPVwiZmVhdGhlci1zZWFyY2hcIj48L2k+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L25nLXRlbXBsYXRlPlxyXG48L2Rpdj4iXX0=
|
|
508
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29yZS10YWJsZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtaGlzdGFmZi1hbHBoYS9zcmMvbGliL2FwcC9saWJyYXJpZXMvY29yZS10YWJsZS9jb3JlLXRhYmxlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1oaXN0YWZmLWFscGhhL3NyYy9saWIvYXBwL2xpYnJhcmllcy9jb3JlLXRhYmxlL2NvcmUtdGFibGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBYyxLQUFLLEVBQStDLFNBQVMsRUFBaUIsTUFBTSxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDckssT0FBTyxFQUFFLFdBQVcsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBMENoRSxPQUFPLEVBQWdCLGVBQWUsRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFjLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUVsRyxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSw0REFBNEQsQ0FBQztBQVMxRyxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUUxRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNqRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sb0VBQW9FLENBQUM7QUFDOUcsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDdEUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDaEUsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sNkVBQTZFLENBQUM7QUFDMUgsT0FB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UztzQkFBaEMsU0FBUzt1QkFBQyxXQUFXO2dCQUNGLEtBQUs7c0JBQXhCLFNBQVM7dUJBQUMsT0FBTztnQkFDVyxjQUFjO3NCQUExQyxTQUFTO3VCQUFDLGdCQUFnQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRWxlbWVudFJlZiwgSW5wdXQsIE9uSW5pdCwgT25EZXN0cm95LCBBZnRlclZpZXdJbml0LCBPbkNoYW5nZXMsIFZpZXdDaGlsZCwgU2ltcGxlQ2hhbmdlcywgT3V0cHV0LCBFdmVudEVtaXR0ZXIsIGlzRGV2TW9kZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBGb3Jtc01vZHVsZSwgTkdfVkFMVUVfQUNDRVNTT1IgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcblxyXG5leHBvcnQgZW51bSBFQ29yZVRhYmxlVG9vbENvZGUge1xyXG4gIGVkaXQgPSAnZWRpdCcsXHJcbiAgZGVsZXRlID0gJ2RlbGV0ZScsXHJcbiAgY29tcGxldGUgPSAnY29tcGxldGUnLFxyXG4gIG5hdmlnYXRlID0gJ25hdmlnYXRlJyxcclxufVxyXG5cclxuZXhwb3J0IGVudW0gRUNvcmVUYWJsZVRvb2xDbGFzcyB7XHJcbiAgZWRpdCA9ICdlZGl0LWljb24nLFxyXG4gIGRlbGV0ZSA9ICdkZWxldGUtaWNvbicsXHJcbiAgcmVwZWF0ID0gJ3JlcGVhdC1pY29uJyxcclxuICBuYXZpZ2F0ZSA9ICduYXZpZ2F0ZS1pY29uJ1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElDb3JlVGFibGVUb29sSXRlbSB7XHJcbiAgY29kZTogRUNvcmVUYWJsZVRvb2xDb2RlO1xyXG4gIGNsYXNzOiBFQ29yZVRhYmxlVG9vbENsYXNzO1xyXG4gIGNhcHRpb24/OiBFbnVtVHJhbnNsYXRlS2V5IHwgc3RyaW5nOyAvLyBMYXRlciB3ZSB3aWxsIHJlbW92ZSBcInwgc3RyaW5nXCJcclxuXHJcbiAgLyogY2FsbGJhY2tzIHRvIGNhbGN1bGF0ZSBkaXNhYmxlZCBhbmQgaGlkZW4gYmFzZWQgb24gcm93Ki9cclxuICBkaXNhYmxlZEZuPzogKHJvdzogYW55KSA9PiBib29sZWFuO1xyXG4gIGhpZGRlbkZuPzogKHJvdzogYW55KSA9PiBib29sZWFuO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElDb3JlVGFibGVUb29sQ2xpY2tFdmVudEVtaXR0ZXJEYXRhIHtcclxuICBjb2RlOiBFQ29yZVRhYmxlVG9vbENvZGU7XHJcbiAgaWQ6IHN0cmluZyB8IG51bWJlcjtcclxufVxyXG5cclxuLypcclxuZXhwb3J0IGludGVyZmFjZSBJQ29yZVRhYmxlUm93RG91YmxlQ2xpY2tFdmVudEVtaXR0ZXJEYXRhIHtcclxuICBpZDogc3RyaW5nIHwgbnVtYmVyO1xyXG59XHJcbiovXHJcblxyXG5pbnRlcmZhY2UgSURvdWJsZVRvdWNoZW5kRGF0YSB7XHJcbiAgcHJldmlvdXM6IG51bWJlcjtcclxuICBjdXJyZW50OiBudW1iZXI7XHJcbn1cclxuXHJcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiwgQmVoYXZpb3JTdWJqZWN0LCBmaWx0ZXIsIGRlYm91bmNlVGltZSwgT2JzZXJ2YWJsZSwgZnJvbUV2ZW50IH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IENvcmVQYWdlTGlzdFNlcnZpY2UgfSBmcm9tICcuLi9jb3JlLXBhZ2UtbGlzdC9jb3JlLXBhZ2UtbGlzdC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQ29yZUZvcm1Db250cm9sQmFzZUNvbXBvbmVudCB9IGZyb20gJy4uL2NvcmUtZm9ybS1jb250cm9sLWJhc2UvY29yZS1mb3JtLWNvbnRyb2wtYmFzZS5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBJQ29yZUJ1dHRvblZOUyB9IGZyb20gJy4uL2NvcmUtYnV0dG9uLWdyb3VwLXZucy9jb3JlLWJ1dHRvbi1ncm91cC12bnMvSUNvcmVCdXR0b25WTlMnO1xyXG5pbXBvcnQgeyBFbnVtQ29yZUJ1dHRvblZOU0NvZGUgfSBmcm9tICcuLi9jb3JlLWJ1dHRvbi1ncm91cC12bnMvY29yZS1idXR0b24tZ3JvdXAtdm5zL0VudW1Db3JlQnV0dG9uVk5TQ29kZSc7XHJcbmltcG9ydCB7IEVudW1UcmFuc2xhdGVLZXkgfSBmcm9tIFwiYWxwaGEtZ2xvYmFsLWNvbnN0YW50c1wiO1xyXG5pbXBvcnQgeyBJU2VhcmNoSXRlbSB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvSVF1ZXJ5TGlzdFJlcXVlc3QnO1xyXG5pbXBvcnQgeyBMYXlvdXRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvbGF5b3V0LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBNdWx0aUxhbmd1YWdlU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL211bHRpLWxhbmd1YWdlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBBbGVydFNlcnZpY2UgfSBmcm9tICcuLi9hbGVydC9hbGVydC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQXV0aFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9hdXRoLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBub25lQXV0b0Nsb3NlZEFsZXJ0T3B0aW9ucyB9IGZyb20gJy4uLy4uL2NvbnN0YW50cy9hbGVydE9wdGlvbnMnO1xyXG5pbXBvcnQgeyBJQ29yZVRhYmxlQ29sdW1uSXRlbSB9IGZyb20gJy4vSUNvcmVUYWJsZUNvbHVtbkl0ZW0nO1xyXG5pbXBvcnQgeyBFbnVtU29ydERpcmVjdGlvbiB9IGZyb20gJy4uLy4uL2VudW0vRW51bVNvcnREaXJlY3Rpb24nO1xyXG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBDb3JlQnV0dG9uR3JvdXBDb21wb25lbnQgfSBmcm9tICcuLi9jb3JlLWJ1dHRvbi1ncm91cC9jb3JlLWJ1dHRvbi1ncm91cC9jb3JlLWJ1dHRvbi1ncm91cC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBUaHJlZWRvdHNDb21wb25lbnQgfSBmcm9tICcuLi90aHJlZWRvdHMvdGhyZWVkb3RzLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFRvb2x0aXBEaXJlY3RpdmUgfSBmcm9tICcuLi90b29sdGlwL3Rvb2x0aXAuZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgQ29yZUxvYWRpbmdTdXJmYWNlQ29tcG9uZW50IH0gZnJvbSAnLi4vY29yZS1sb2FkaW5nLXN1cmZhY2UvY29yZS1sb2FkaW5nLXN1cmZhY2UvY29yZS1sb2FkaW5nLXN1cmZhY2UuY29tcG9uZW50JztcclxuaW1wb3J0IHsgQ29yZUJ1dHRvbkdyb3VwVm5zQ29tcG9uZW50IH0gZnJvbSAnLi4vY29yZS1idXR0b24tZ3JvdXAtdm5zL2NvcmUtYnV0dG9uLWdyb3VwLXZucy9jb3JlLWJ1dHRvbi1ncm91cC12bnMuY29tcG9uZW50JztcclxuaW1wb3J0IHsgVGFibGVDZWxsUGlwZSB9IGZyb20gJy4uL3BpcGVzL3RhYmxlLWNlbGwucGlwZSc7XHJcbmltcG9ydCB7IFRyYW5zbGF0ZVBpcGUgfSBmcm9tICcuLi8uLi9hcHAtcGlwZXMvdHJhbnNsYXRlLnBpcGUnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdjb3JlLXRhYmxlJyxcclxuICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gIGltcG9ydHM6IFtcclxuICAgIENvbW1vbk1vZHVsZSxcclxuICAgIEZvcm1zTW9kdWxlLFxyXG4gICAgQ29yZUJ1dHRvbkdyb3VwQ29tcG9uZW50LFxyXG4gICAgVGhyZWVkb3RzQ29tcG9uZW50LFxyXG4gICAgVG9vbHRpcERpcmVjdGl2ZSxcclxuICAgIFRhYmxlQ2VsbFBpcGUsXHJcbiAgICBUcmFuc2xhdGVQaXBlLFxyXG4gICAgQ29yZUxvYWRpbmdTdXJmYWNlQ29tcG9uZW50LFxyXG4gICAgQ29yZUJ1dHRvbkdyb3VwVm5zQ29tcG9uZW50LFxyXG4gIF0sXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2NvcmUtdGFibGUuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2NvcmUtdGFibGUuY29tcG9uZW50LnNjc3MnXSxcclxuICBwcm92aWRlcnM6IFtcclxuICAgIHtcclxuICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXHJcbiAgICAgIG11bHRpOiB0cnVlLFxyXG4gICAgICB1c2VFeGlzdGluZzogQ29yZVRhYmxlQ29tcG9uZW50XHJcbiAgICB9XHJcbiAgXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgQ29yZVRhYmxlQ29tcG9uZW50IGV4dGVuZHMgQ29yZUZvcm1Db250cm9sQmFzZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3kge1xyXG5cclxuICAvKlxyXG4gIFRoaXMgY29tcG9uZW50IGRpc3BsYXlzIGlucHV0IGRhdGEgd2l0aG91dCBwYWdpbmF0aW9uLlxyXG4gIEZvciBwYWdpbmF0aW5nIHBsZWFzZSBvcmdhbml6ZSBmcm9tIHBhcmVudHNcclxuICAqL1xyXG5cclxuICBASW5wdXQoKSBpZCE6IHN0cmluZzsgLy8gZm9yIGh0bWwgaWQgaWRlbnRpZnlpbmdcclxuICBASW5wdXQoKSB3aWR0aCE6IHN0cmluZztcclxuICBASW5wdXQoKSBoZWlnaHQhOiBudW1iZXI7XHJcbiAgQElucHV0KCkgc2hvd0NoZWNrYm94ITogYm9vbGVhbjtcclxuICBASW5wdXQoKSBjaGVja2JveFNpemUhOiBudW1iZXI7XHJcbiAgQElucHV0KCkgb3V0ZXJCdXR0b25zITogSUNvcmVCdXR0b25WTlNbXTtcclxuICBASW5wdXQoKSBzaG93VG9vbHMhOiBib29sZWFuO1xyXG4gIEBJbnB1dCgpIHRvb2xzITogSUNvcmVUYWJsZVRvb2xJdGVtW107XHJcbiAgQElucHV0KCkgY2hlY2tpbmdSZXNldEZsYWchOiBib29sZWFuO1xyXG4gIEBJbnB1dCgpIGJvcmRlclJhZGl1czogbnVtYmVyID0gMDtcclxuICBASW5wdXQoKSBoZWFkZXJCYWNrZ3JvdW5kQ29sb3I6IHN0cmluZyA9ICcjNjY2NjY2JztcclxuXHJcbiAgLyogY2hhbmdlIHRoZXNlIDIgcHJvcHMgdG8gd3JhcCBoZWFkZXIgdGV4dHMgKi9cclxuICBASW5wdXQoKSBoZWFkZXJXcmFwITogYm9vbGVhbjtcclxuICBASW5wdXQoKSBoZWFkZXJGaXJzdFJvd0hlaWdodCE6IG51bWJlcjtcclxuICAvKiogKi9cclxuXHJcbiAgQElucHV0KCkgaGVhZGVyU2Vjb25kUm93SGVpZ2h0ITogbnVtYmVyO1xyXG4gIEBJbnB1dCgpIHdyYXAhOiBib29sZWFuO1xyXG4gIEBJbnB1dCgpIGFsbG93Q2VsbFNjcm9sbFkhOiBib29sZWFuO1xyXG4gIEBJbnB1dCgpIGxvYWRpbmchOiBib29sZWFuO1xyXG4gIEBJbnB1dCgpIHJvd0hlaWdodCE6IHN0cmluZzsgLy8gVkVSWSBJTVBPUlRBTlQgUFJPUEVSVFlcclxuICBASW5wdXQoKSBmcm96ZW4hOiBudW1iZXI7XHJcbiAgQElucHV0KCkgZm9vdGVyITogYW55O1xyXG4gIEBJbnB1dCh7IHJlcXVpcmVkOiB0cnVlIH0pIGNvbHVtbnMhOiBJQ29yZVRhYmxlQ29sdW1uSXRlbVtdOyAvLyByZXF1aXJlZFxyXG4gIEBJbnB1dCh7IHJlcXVpcmVkOiB0cnVlIH0pIGRhdGE6IGFueVtdID0gW107XHJcbiAgQElucHV0KCkgc2VsZWN0ZWRJZHMhOiBzdHJpbmdbXSB8IG51bWJlcltdO1xyXG4gIEBJbnB1dCgpIGNvcmVQYWdlTGlzdEluc3RhbmNlTnVtYmVyITogbnVtYmVyO1xyXG4gIEBJbnB1dCgpIGRpc2FibGVIaWdobGlnaHRPbkNsaWNrITogYm9vbGVhbjtcclxuICBASW5wdXQoKSBmcmVlTW9kZSE6IGJvb2xlYW47XHJcbiAgQElucHV0KCkgc2VhcmNoU3dpdGNoRGlzYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZTsgLy8gPz8/XHJcbiAgQElucHV0KCkgZGlzYWJsZVNvcnRpbmchOiBib29sZWFuO1xyXG4gIEBJbnB1dCgpIGlubGluZVRvb2xJdGVtcyE6IEVudW1Db3JlQnV0dG9uVk5TQ29kZVtdO1xyXG4gIEBJbnB1dCgpIGNvbHVtblNlYXJjaERlZmF1bHRPcGVuITogYm9vbGVhbjtcclxuICBASW5wdXQoKSBsYXp5TG9hZGluZyE6IGJvb2xlYW47XHJcblxyXG4gIEBJbnB1dCgpIG5vUGFkZGluZ0NlbGwhOiBib29sZWFuO1xyXG5cclxuICBAT3V0cHV0KCkgb25TZWFyY2hpbmcgPSBuZXcgRXZlbnRFbWl0dGVyPElTZWFyY2hJdGVtW10+KCk7XHJcbiAgQE91dHB1dCgpIG9uVG9vbENsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjxJQ29yZVRhYmxlVG9vbENsaWNrRXZlbnRFbWl0dGVyRGF0YT4oKTtcclxuICBAT3V0cHV0KCkgb25Sb3dDbGljayA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgb25Sb3dEb3VibGVDbGljayA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgb25TZWxlY3RlZElkc0NoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nW10gfCBudW1iZXJbXT4oKTtcclxuICBAT3V0cHV0KCkgb25TZWxlY3RlZERhdGFDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPGFueVtdPigpO1xyXG4gIEBPdXRwdXQoKSBvbkNvbHVtbkNhcHRpb25DbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8SUNvcmVUYWJsZUNvbHVtbkl0ZW0+KCk7XHJcblxyXG4gIGNoZWNrYm94Q29sdW1uV2lkdGg6IG51bWJlciA9IDMwOyAvLyAoLS1jaGVja2JveC1zaXplKSogMiBQbGVhc2UgZG8gbm90IGNoYW5nZSB0aGlzXHJcblxyXG4gIHNlYXJjaEFjdGl2ZSE6IGJvb2xlYW47XHJcbiAgdmlzaWJsZUNvbHVtbnMhOiBJQ29yZVRhYmxlQ29sdW1uSXRlbVtdO1xyXG4gIGZyb3plbkxlZnRzOiBudW1iZXJbXSA9IFtdO1xyXG4gIGNoZWNraW5nTW9kZWw6IGJvb2xlYW5bXSA9IFtdO1xyXG4gIGhlYWRlckNoZWNrYm94U3RhdGUhOiBib29sZWFuO1xyXG4gIGNoZWNraW5nU3RhdGUhOiBudW1iZXI7IC8vIDA9bm9uZTsgMT1hbGw7IDI9bWl4ZWRcclxuICB0Ym9keWhlaWdodCE6IG51bWJlcjtcclxuICB2aXNpYmxlUm93Q291bnQhOiBudW1iZXI7XHJcblxyXG4gIHJvd1RvdWNoZW5kU3RyZWFtJDogQmVoYXZpb3JTdWJqZWN0PElEb3VibGVUb3VjaGVuZERhdGE+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxJRG91YmxlVG91Y2hlbmREYXRhPih7IHByZXZpb3VzOiAtMiwgY3VycmVudDogLTEgfSk7XHJcbiAgc3Vic2NyaXB0aW9uczogU3Vic2NyaXB0aW9uW10gPSBbXTtcclxuXHJcbiAgc2VhcmNoT2JqZWN0ITogSVNlYXJjaEl0ZW1bXTtcclxuXHJcbiAgbGFuZyE6IHN0cmluZztcclxuXHJcbiAgYWN0aXZlUm93ITogYW55OyAvLyBudW1iZXIgfCBzdHJpbmdcclxuXHJcbiAgbW91c2VEb3duID0gZmFsc2U7XHJcbiAgc3RhcnRYOiBhbnk7XHJcbiAgZW5kWDogYW55O1xyXG5cclxuICBzY3JvbGxTdHJlYW0kITogT2JzZXJ2YWJsZTxhbnk+O1xyXG5cclxuICAvKiBGT1IgTEFaWSBVSSBMT0FESU5HICovXHJcbiAgcmVuZGVyQWhyZWFkOiBudW1iZXIgPSAwO1xyXG4gIGhpZGRlblRvcEhlaWdodDogbnVtYmVyID0gMDtcclxuICBoaWRkZW5Cb3R0b21IZWlnaHQ6IG51bWJlciA9IDA7XHJcbiAgc2Nyb2xsVG9wOiBudW1iZXIgPSAwO1xyXG4gIG9mZnNldFk6IG51bWJlciA9IDA7XHJcbiAgdmlzaWJsZURhdGEhOiBhbnlbXTtcclxuICBzdGFydE5vZGU6IG51bWJlciA9IDA7XHJcbiAgLyoqKioqKioqKioqKioqKioqKioqKioqL1xyXG5cclxuICBAVmlld0NoaWxkKCdjb3JlVGFibGUnKSBjb3JlVGFibGUhOiBFbGVtZW50UmVmO1xyXG4gIEBWaWV3Q2hpbGQoJ3RhYmxlJykgdGFibGUhOiBFbGVtZW50UmVmO1xyXG4gIEBWaWV3Q2hpbGQoJ2ZpcnN0SGVhZGVyUm93JykgZmlyc3RIZWFkZXJSb3chOiBFbGVtZW50UmVmO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgbGF5b3V0U2VydmljZTogTGF5b3V0U2VydmljZSxcclxuICAgIHByaXZhdGUgY29yZVBhZ2VMaXN0U2VydmljZTogQ29yZVBhZ2VMaXN0U2VydmljZSxcclxuICAgIHByaXZhdGUgbWxzOiBNdWx0aUxhbmd1YWdlU2VydmljZSxcclxuICAgIHByaXZhdGUgYWxlcnRTZXJ2aWNlOiBBbGVydFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGF1dGhTZXJ2aWNlOiBBdXRoU2VydmljZVxyXG4gICkge1xyXG4gICAgc3VwZXIoKTtcclxuICB9XHJcblxyXG4gIGNhbGN1bGF0ZVNjcm9sbCgpOiB2b2lkIHtcclxuXHJcbiAgICB0cnkge1xyXG5cclxuICAgICAgaWYgKCEhIXRoaXMuY29yZVRhYmxlKSByZXR1cm47XHJcbiAgICAgIGlmICghISF0aGlzLmxhenlMb2FkaW5nKSByZXR1cm47XHJcbiAgICAgIGlmICghISF0aGlzLmRhdGEpIHJldHVybjtcclxuXHJcbiAgICAgIGNvbnN0IGhlaWdodCA9IE51bWJlcihnZXRDb21wdXRlZFN0eWxlKHRoaXMuY29yZVRhYmxlLm5hdGl2ZUVsZW1lbnQpLmdldFByb3BlcnR5VmFsdWUoJy0taGVpZ2h0JykucmVwbGFjZSgncHgnLCAnJykpO1xyXG4gICAgICBjb25zdCByb3dIZWlnaHQgPSBOdW1iZXIoZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzLmNvcmVUYWJsZS5uYXRpdmVFbGVtZW50KS5nZXRQcm9wZXJ0eVZhbHVlKCctLXJvdy1oZWlnaHQnKS5zcGxpdCgncHgnKVswXSk7XHJcblxyXG4gICAgICBpZiAoISEhcm93SGVpZ2h0KSB0aHJvdyBuZXcgRXJyb3IoXCJDb3VsZCBub3QgZ2V0IC0tcm93LWhlaWdodCBwcm9wZXJ0eVwiKTtcclxuXHJcbiAgICAgIGxldCBzdGFydE5vZGUgPSBNYXRoLmZsb29yKHRoaXMuc2Nyb2xsVG9wIC8gcm93SGVpZ2h0KSAtIHRoaXMucmVuZGVyQWhyZWFkO1xyXG4gICAgICBzdGFydE5vZGUgPSBNYXRoLm1heCgwLCBzdGFydE5vZGUpO1xyXG4gICAgICB0aGlzLnN0YXJ0Tm9kZSA9IHN0YXJ0Tm9kZSB8fCAwO1xyXG4gICAgICBsZXQgdmlzaWJsZU5vZGVDb3VudCA9IE1hdGguY2VpbChoZWlnaHQgLyByb3dIZWlnaHQpICsgMiAqIHRoaXMucmVuZGVyQWhyZWFkO1xyXG4gICAgICB2aXNpYmxlTm9kZUNvdW50ID0gTWF0aC5taW4odGhpcy5kYXRhLmxlbmd0aCAtIHN0YXJ0Tm9kZSwgdmlzaWJsZU5vZGVDb3VudCk7XHJcbiAgICAgIHRoaXMub2Zmc2V0WSA9IHN0YXJ0Tm9kZSAqIHJvd0hlaWdodDtcclxuICAgICAgY29uc3QgbmV3VmlzaWJsZURhdGE6IGFueVtdID0gW107XHJcblxyXG4gICAgICB0aGlzLmhpZGRlblRvcEhlaWdodCA9IHN0YXJ0Tm9kZSAqIHJvd0hlaWdodDtcclxuICAgICAgdGhpcy5oaWRkZW5Cb3R0b21IZWlnaHQgPSAodGhpcy5kYXRhLmxlbmd0aCAtIHN0YXJ0Tm9kZSAtIHZpc2libGVOb2RlQ291bnQpICogcm93SGVpZ2h0O1xyXG4gICAgICBmb3IgKGxldCBpID0gc3RhcnROb2RlOyBpIDwgc3RhcnROb2RlICsgdmlzaWJsZU5vZGVDb3VudDsgaSsrKSB7XHJcbiAgICAgICAgbmV3VmlzaWJsZURhdGEucHVzaCh0aGlzLmRhdGFbaV0pXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMudmlzaWJsZURhdGEgPSBuZXdWaXNpYmxlRGF0YTtcclxuXHJcbiAgICAgIC8qIE9QRU4gQ09NTUVOVFMgVE8gU0VFIENPTlRST0wgVkFMVUVTICovXHJcbiAgICAgIGNvbnNvbGUubG9nKFwic3RhcnROb2RlXCIsIHN0YXJ0Tm9kZSlcclxuICAgICAgLypcclxuICAgICAgY29uc29sZS5sb2coXCJ0aGlzLm9mZnNldFlcIiwgdGhpcy5vZmZzZXRZKVxyXG4gICAgICBjb25zb2xlLmxvZyhcInRoaXMuaGlkZGVuVG9wSGVpZ2h0XCIsIHRoaXMuaGlkZGVuVG9wSGVpZ2h0KVxyXG4gICAgICBjb25zb2xlLmxvZyhcInRoaXMuaGlkZGVuQm90dG9tSGVpZ2h0XCIsIHRoaXMuaGlkZGVuQm90dG9tSGVpZ2h0KVxyXG4gICAgICBjb25zb2xlLmxvZyhcInRoaXMudmlzaWJsZURhdGEubGVuZ3RoXCIsIHRoaXMudmlzaWJsZURhdGEubGVuZ3RoKVxyXG4gICAgICBjb25zdCBjb250cm9sVmFsdWUgPSAodGhpcy5oaWRkZW5Ub3BIZWlnaHQgKyB0aGlzLmhpZGRlbkJvdHRvbUhlaWdodCArIHRoaXMudmlzaWJsZURhdGEubGVuZ3RoICogcm93SGVpZ2h0KSAvIHJvd0hlaWdodFxyXG4gICAgICBjb25zb2xlLmxvZyhcImNvbnRyb2xWYWx1ZVwiLCBjb250cm9sVmFsdWUpIC8vIE11c3QgZXF1ZWFsIHBhZ2VTaXplXHJcbiAgICAgICovXHJcbiAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XHJcbiAgICAgIGlmIChpc0Rldk1vZGUoKSAmJiB0aGlzLmF1dGhTZXJ2aWNlLmRhdGEkLnZhbHVlPy5pZCA9PT0gJzhjMjQ2ODNkLTdkNTItNGY1YS04MDkwLTMxYzc3N2U4ODY5ZCcpIHtcclxuICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5lcnJvcihlcnJvci5tZXNzYWdlLCBub25lQXV0b0Nsb3NlZEFsZXJ0T3B0aW9ucyk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICghIXRoaXMuZGF0YSkge1xyXG4gICAgICAgIHRoaXMudmlzaWJsZURhdGEgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRoaXMuZGF0YSkpO1xyXG4gICAgICB9XHJcblxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc3RhcnREcmFnZ2luZyhlOiBhbnksIGNvbDogSUNvcmVUYWJsZUNvbHVtbkl0ZW0sIGZsYWc6IGFueSkge1xyXG4gICAgaWYgKGUuYnV0dG9ucyA9PT0gMSkge1xyXG4gICAgICB0aGlzLnN0YXJ0WCA9IGUucGFnZVg7XHJcbiAgICAgIGlmICghISF0aGlzLm1vdXNlRG93bikge1xyXG5cclxuICAgICAgfVxyXG4gICAgICB0aGlzLm1vdXNlRG93biA9IHRydWU7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzdG9wRHJhZ2dpbmcoZTogYW55LCBjb2w6IElDb3JlVGFibGVDb2x1bW5JdGVtLCBmbGFnOiBhbnkpIHtcclxuICAgIGlmICghIXRoaXMubW91c2VEb3duKSB7XHJcbiAgICAgIHRoaXMuZW5kWCA9IGUucGFnZVg7XHJcbiAgICAgIGxldCBvZmZzZXQgPSB0aGlzLmVuZFggLSB0aGlzLnN0YXJ0WDtcclxuICAgICAgY29sLndpZHRoISArPSBvZmZzZXQ7XHJcbiAgICAgIHRoaXMubW91c2VEb3duID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuZW5kWCA9IDA7XHJcbiAgICAgIHRoaXMuc3RhcnRYID0gMDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG1vdmVFdmVudChlOiBhbnksIGNvbDogSUNvcmVUYWJsZUNvbHVtbkl0ZW0pIHtcclxuICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgIGlmICghdGhpcy5tb3VzZURvd24pIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgY29uc3QgeCA9IGUucGFnZVg7XHJcbiAgICBjb25zb2xlLmxvZyhcIm1vdmVFdmVudFwiLCBlLnBhZ2VYKVxyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcblxyXG4gICAgaWYgKHRoaXMuc2hvd0NoZWNrYm94KSB7XHJcbiAgICAgIGlmICghdGhpcy5jaGVja2JveFNpemUpIHtcclxuICAgICAgICB0aGlzLmNoZWNrYm94U2l6ZSA9IDE1O1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuaGVhZGVyRmlyc3RSb3dIZWlnaHQgPT09IHVuZGVmaW5lZCkgdGhpcy5oZWFkZXJGaXJzdFJvd0hlaWdodCA9IDQwO1xyXG4gICAgaWYgKHRoaXMuaGVhZGVyU2Vjb25kUm93SGVpZ2h0ID09PSB1bmRlZmluZWQpIHRoaXMuaGVhZGVyU2Vjb25kUm93SGVpZ2h0ID0gNDA7XHJcblxyXG5cclxuICAgIC8qIFZhbGlkYXRlIGNvbHVtbnMgaW5wdXQgdG8gbWFrZSBzdXJlIG9uZSBvZiBmaWVsZHMgaXMgJ2lkJyAqL1xyXG4gICAgaWYgKCEhIXRoaXMuY29sdW1ucykge1xyXG4gICAgICB0aGlzLmFsZXJ0U2VydmljZS5lcnJvcih0aGlzLmlkICsgXCI6IENvbHVtbnMgYXJlIG5vdCBkZWZpbmVkLlwiLCBub25lQXV0b0Nsb3NlZEFsZXJ0T3B0aW9ucylcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5jb2x1bW5zPy5maWx0ZXIoKGM6IElDb3JlVGFibGVDb2x1bW5JdGVtKSA9PiBjLmZpZWxkID09PSAnaWQnKS5sZW5ndGggPT09IDAgJiYgaXNEZXZNb2RlKCkgJiYgdGhpcy5jb2x1bW5zLmxlbmd0aCkge1xyXG4gICAgICB0aGlzLmFsZXJ0U2VydmljZS5lcnJvcih0aGlzLmlkICsgXCI6IFRoZSBjb2x1bW5zIG11c3QgaGF2ZSBvbmUgd2l0aCAnZmllbGQnIHByb3BlcnR5ID09PSAnaWQnXCIsIG5vbmVBdXRvQ2xvc2VkQWxlcnRPcHRpb25zKVxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMudmlzaWJsZUNvbHVtbnMgPSB0aGlzLmNvbHVtbnM/LmZpbHRlcigoYzogSUNvcmVUYWJsZUNvbHVtbkl0ZW0pID0+ICEhIWMuaGlkZGVuKVxyXG4gICAgaWYgKCEhIXRoaXMudmlzaWJsZUNvbHVtbnM/Lmxlbmd0aCAmJiBpc0Rldk1vZGUoKSAmJiB0aGlzLmNvbHVtbnM/Lmxlbmd0aCkge1xyXG4gICAgICB0aGlzLmFsZXJ0U2VydmljZS5lcnJvcih0aGlzLmlkICsgXCI6IE5vIHZpc2libGUgY29sdW1uIGRlZmluZWQuXCIsIG5vbmVBdXRvQ2xvc2VkQWxlcnRPcHRpb25zKVxyXG4gICAgfVxyXG5cclxuICAgIC8vIGFkZCBkZWZhdWx0IHNvcnQgZGlyZWN0aW9uIHRvIHZpc2libGVDb2x1bW5zXHJcbiAgICB0aGlzLnZpc2libGVDb2x1bW5zPy5tYXAoYyA9PiBjLnNvcnREaXJlY3Rpb24gPSBFbnVtU29ydERpcmVjdGlvbi5OT05FKVxyXG5cclxuICAgIC8qIFNUQVJUOiBJbml0aWFsaXppbmcgc2VhcmNoT2JqZWN0ICovXHJcbiAgICBjb25zdCBuZXdTZWFyY2hPYmplY3Q6IElTZWFyY2hJdGVtW10gPSBbXTtcclxuICAgIHRoaXMudmlzaWJsZUNvbHVtbnM/Lm1hcChjID0+IHtcclxuICAgICAgbmV3U2VhcmNoT2JqZWN0LnB1c2goe1xyXG4gICAgICAgIGZpZWxkOiBjLmZpZWxkLFxyXG4gICAgICAgIHNlYXJjaEZvcjogJydcclxuICAgICAgfSlcclxuICAgIH0pXHJcbiAgICB0aGlzLnNlYXJjaE9iamVjdCA9IG5ld1NlYXJjaE9iamVjdDtcclxuICAgIC8qIEVORDogSW5pdGlhbGl6aW5nIHNlYXJjaE9iamVjdCAqL1xyXG5cclxuICAgIGNvbnN0IGZyb3plbkNvbHVtbnMgPSB0aGlzLnZpc2libGVDb2x1bW5zPy5maWx0ZXIoKF8sIGluZGV4KSA9PiBpbmRleCA8IHRoaXMuZnJvemVuKTtcclxuXHJcbiAgICBsZXQgbGVmdCA9IHRoaXMuY2hlY2tib3hTaXplISAqIDIgfHwgMDsgLy8gdGhlIGZpcnN0IHNpemUgaXMgZm9yIGNoZWNrYm94XHJcbiAgICBmcm96ZW5Db2x1bW5zPy5tYXAoYyA9PiB7XHJcbiAgICAgIGlmICghISFjLndpZHRoKSBjb25zb2xlLmVycm9yKHRoaXMuaWQgKyBcIjogRWFjaCBmcm96ZW4gY29sdW1uIG11c3QgaGF2ZSBpdHMgbnVtYmVyIHByb3BlcnR5ICd3aWR0aCcuXCIpO1xyXG4gICAgICB0aGlzLmZyb3plbkxlZnRzLnB1c2gobGVmdCk7XHJcbiAgICAgIGxlZnQgPSBsZWZ0ICsgYy53aWR0aCFcclxuICAgIH0pXHJcblxyXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXHJcbiAgICAgIHRoaXMucm93VG91Y2hlbmRTdHJlYW0kLnBpcGUoXHJcbiAgICAgICAgZmlsdGVyKCh4OiBhbnkpID0+IHguY3VycmVudCA9PT0geC5wcmV2aW91cyksXHJcbiAgICAgICAgZGVib3VuY2VUaW1lKDIwMCksXHJcbiAgICAgICkuc3Vic2NyaWJlKCh5OiBhbnkpID0+IHtcclxuICAgICAgICB0aGlzLm9uUm93RG91YmxlQ2xpY2suZW1pdCh7XHJcbiAgICAgICAgICBpZDogdGhpcy5kYXRhW3kuY3VycmVudF0uaWRcclxuICAgICAgICB9KVxyXG4gICAgICB9KVxyXG4gICAgKVxyXG5cclxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxyXG4gICAgICB0aGlzLm1scy5sYW5nJC5zdWJzY3JpYmUoeCA9PiB0aGlzLmxhbmcgPSB4KVxyXG4gICAgKVxyXG5cclxuICAgIC8qIENoZWNrIGlmIGFueSBvZiBjb2x1bW5zIGlzIHRlbXBsYXRlUmVmICovXHJcbiAgICBjb25zdCB0ZW1wbGF0ZVJlZkZpbHRlciA9IHRoaXMuY29sdW1ucz8uZmlsdGVyKHggPT4gISF4LnRlbXBsYXRlUmVmKVxyXG4gICAgaWYgKCEhdGVtcGxhdGVSZWZGaWx0ZXI/Lmxlbmd0aCkge1xyXG4gICAgICB0ZW1wbGF0ZVJlZkZpbHRlci5tYXAoeCA9PiB7XHJcbiAgICAgICAgaWYgKHgudGVtcGxhdGVSZWY/LmVsZW1lbnRSZWY/Lm5hdGl2ZUVsZW1lbnQ/LmhlaWdodCA+IE51bWJlcih0aGlzLnJvd0hlaWdodC5yZXBsYWNlKCdweCcsICcnKSkpIHtcclxuICAgICAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmVycm9yKGBDaGnhu4F1IGNhbyBj4bunYSAke3RoaXMubWxzLnRyYW5zKHguY2FwdGlvbil9IHRlbXBsYXRlUmVmIGzDoCAke3gudGVtcGxhdGVSZWY/LmVsZW1lbnRSZWY/Lm5hdGl2ZUVsZW1lbnQ/LmhlaWdodH0sIGzhu5tuIGjGoW4gY2hp4buBdSBjYW8gY+G7p2EgZMOybmcgbMaw4bubaSAke3RoaXMucm93SGVpZ2h0fWAsIG5vbmVBdXRvQ2xvc2VkQWxlcnRPcHRpb25zKVxyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICAgIH1cclxuXHJcbiAgfVxyXG5cclxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XHJcblxyXG4gICAgaWYgKGNoYW5nZXNbJ2NoZWNraW5nUmVzZXRGbGFnJ10pIHtcclxuICAgICAgaWYgKCEhdGhpcy5kYXRhKSB7XHJcbiAgICAgICAgdGhpcy50b2dnbGVDaGVja0FsbChmYWxzZSlcclxuICAgICAgICB0aGlzLmhlYWRlckNoZWNrYm94U3RhdGUgPSBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmIChjaGFuZ2VzWydkYXRhJ10pIHtcclxuXHJcbiAgICAgIC8vIENoZWNrIHVuaXF1ZSBvZiBcImlkXCJcclxuICAgICAgaWYgKGlzRGV2TW9kZSgpKSB7XHJcbiAgICAgICAgaWYgKGNoYW5nZXNbJ2RhdGEnXS5jdXJyZW50VmFsdWU/Lmxlbmd0aCkge1xyXG4gICAgICAgICAgY29uc3QgYXJyID0gY2hhbmdlc1snZGF0YSddLmN1cnJlbnRWYWx1ZVxyXG4gICAgICAgICAgbGV0IGZpbmREdXBsaWNhdGVJZHMgPSAoYXJyOiBhbnkpID0+IGFyci5maWx0ZXIoKGl0ZW06IGFueSkgPT4gYXJyLmZpbHRlcigoeDogYW55KSA9PiB4LmlkID09PSBpdGVtLmlkKS5sZW5ndGggPiAxKVxyXG4gICAgICAgICAgbGV0IGZpbmREdXBsaWNhdGVWaXJ0dWFsSWRzID0gKGFycjogYW55KSA9PiBhcnIuZmlsdGVyKChpdGVtOiBhbnkpID0+IGFyci5maWx0ZXIoKHg6IGFueSkgPT4geC52aXJ0dWFsSWQgPT09IGl0ZW0udmlydHVhbElkKS5sZW5ndGggPiAxKVxyXG4gICAgICAgICAgaWYgKCEhZmluZER1cGxpY2F0ZUlkcyhhcnIpLmxlbmd0aCAmJiAhIWZpbmREdXBsaWNhdGVWaXJ0dWFsSWRzKGFycikubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmVycm9yKFwiQ29yZVRhYmxlIHJlcXVpcmVzIHVuaXF1ZSBpZC92aXJ0dWFsSWQgdmFsdWVzIVwiLCBub25lQXV0b0Nsb3NlZEFsZXJ0T3B0aW9ucylcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGNvbnN0IG5ld0NoZWNraW5nTW9kZWw6IGJvb2xlYW5bXSA9IFtdO1xyXG4gICAgICBjaGFuZ2VzWydkYXRhJ10uY3VycmVudFZhbHVlPy5tYXAoKF86IGFueSkgPT4ge1xyXG4gICAgICAgIG5ld0NoZWNraW5nTW9kZWwucHVzaChmYWxzZSlcclxuICAgICAgfSk7XHJcbiAgICAgIHRoaXMuY2hlY2tpbmdNb2RlbCA9IG5ld0NoZWNraW5nTW9kZWw7XHJcblxyXG4gICAgICBpZiAoISF0aGlzLmxhenlMb2FkaW5nKSB7XHJcbiAgICAgICAgaWYgKCEhdGhpcy5jb3JlVGFibGUpIHtcclxuICAgICAgICAgIHRoaXMuY2FsY3VsYXRlU2Nyb2xsKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMudmlzaWJsZURhdGEgPSBjaGFuZ2VzWydkYXRhJ10uY3VycmVudFZhbHVlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGNoYW5nZXNbJ2NoZWNrZWRJZHMnXSkge1xyXG4gICAgICBjb25zdCBuZXdDaGVja2luZ01vZGVsOiBib29sZWFuW10gPSBbXTtcclxuICAgICAgY2hhbmdlc1snY2hlY2tlZElkcyddLmN1cnJlbnRWYWx1ZT8ubWFwKChjaGVja2VkSWQ6IGFueSkgPT4ge1xyXG4gICAgICAgIHRoaXMuZGF0YS5tYXAoKGl0ZW0pID0+IHtcclxuICAgICAgICAgIGlmIChpdGVtWydpZCddID09PSBjaGVja2VkSWQpIHtcclxuICAgICAgICAgICAgbmV3Q2hlY2tpbmdNb2RlbC5wdXNoKHRydWUpO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgbmV3Q2hlY2tpbmdNb2RlbC5wdXNoKGZhbHNlKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG4gICAgICB9KVxyXG4gICAgICB0aGlzLmNoZWNraW5nTW9kZWwgPSBuZXdDaGVja2luZ01vZGVsO1xyXG4gICAgfVxyXG4gICAgLy8gaWYgKGNoYW5nZXNbJ2xvYWRpbmcnXSkge1xyXG4gICAgLy8gICB0aGlzLmxvYWRpbmcgPSBjaGFuZ2VzWydsb2FkaW5nJ10uY3VycmVudFZhbHVlO1xyXG4gICAgLy8gfVxyXG4gICAgaWYgKGNoYW5nZXNbJ2NvbHVtbnMnXSkge1xyXG4gICAgICB0aGlzLnZpc2libGVDb2x1bW5zID0gdGhpcy5jb2x1bW5zPy5maWx0ZXIoKGM6IElDb3JlVGFibGVDb2x1bW5JdGVtKSA9PiAhISFjLmhpZGRlbikgfHwgW11cclxuICAgIH1cclxuICAgIGlmIChjaGFuZ2VzWydjb2x1bW5TZWFyY2hEZWZhdWx0T3BlbiddKSB7XHJcbiAgICAgIHRoaXMuc2VhcmNoQWN0aXZlID0gISFjaGFuZ2VzWydjb2x1bW5TZWFyY2hEZWZhdWx0T3BlbiddLmN1cnJlbnRWYWx1ZVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZXNldEhlYWRlckZpcnN0Um93SGVpZ2h0KCk6IHZvaWQge1xyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIGNvbnN0IGZpcnN0SGVhZGVyUm93SGVpZ2h0ID0gdGhpcy5maXJzdEhlYWRlclJvdy5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmhlaWdodDtcclxuICAgICAgdGhpcy5jb3JlVGFibGUubmF0aXZlRWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSgnLS1oZWFkZXItMXN0LXJvdy1oZWlnaHQnLFxyXG4gICAgICAgIGZpcnN0SGVhZGVyUm93SGVpZ2h0ICsgJ3B4J1xyXG4gICAgICApO1xyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcclxuXHJcbiAgICBpZiAodGhpcy5jb3JlUGFnZUxpc3RJbnN0YW5jZU51bWJlcikge1xyXG4gICAgICBjb25zdCBjYWxsZXJGaWx0ZXIgPSB0aGlzLmNvcmVQYWdlTGlzdFNlcnZpY2UuaW5zdGFuY2VzLmZpbHRlcih4ID0+IHguaW5zdGFuY2VOdW1iZXIgPT09IHRoaXMuY29yZVBhZ2VMaXN0SW5zdGFuY2VOdW1iZXIpO1xyXG4gICAgICBpZiAoISFjYWxsZXJGaWx0ZXIubGVuZ3RoKSB7XHJcbiAgICAgICAgY29uc3QgY2FsbGVyID0gY2FsbGVyRmlsdGVyWzBdO1xyXG4gICAgICAgIGNhbGxlci5jb3JlVGFibGVSZWYgPSB0aGlzLmNvcmVUYWJsZTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKCEhIXRoaXMuZnJlZU1vZGUpIHtcclxuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcclxuICAgICAgICAgIHRoaXMuY29yZVBhZ2VMaXN0U2VydmljZS5pbnN0YW5jZXMuZmlsdGVyKHggPT4geC5pbnN0YW5jZU51bWJlciA9PT0gdGhpcy5jb3JlUGFnZUxpc3RJbnN0YW5jZU51bWJlcilbMF0uaWQkLnN1YnNjcmliZSh4ID0+IHtcclxuICAgICAgICAgICAgdGhpcy5hY3RpdmVSb3cgPSB4O1xyXG4gICAgICAgICAgfSlcclxuICAgICAgICApXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxyXG4gICAgICAgIHRoaXMuY29yZVBhZ2VMaXN0U2VydmljZS5pbnN0YW5jZXMuZmlsdGVyKHggPT4geC5pbnN0YW5jZU51bWJlciA9PT0gdGhpcy5jb3JlUGFnZUxpc3RJbnN0YW5jZU51bWJlcilbMF0udGJvZHlIZWlnaHQkLnN1YnNjcmliZSh4ID0+IHtcclxuICAgICAgICAgIGlmICghIXgpIHtcclxuICAgICAgICAgICAgdGhpcy50Ym9keWhlaWdodCA9IHg7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuICAgICAgKVxyXG5cclxuICAgICAgY29uc3QgcmVjdCA9IHRoaXMuY29yZVRhYmxlLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XHJcbiAgICAgIHRoaXMuY29yZVRhYmxlLm5hdGl2ZUVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoJy0tdGFibGUtd2lkdGgnLCByZWN0LndpZHRoICsgJ3B4JylcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5zY3JvbGxTdHJlYW0kID0gZnJvbUV2ZW50KHRoaXMudGFibGUubmF0aXZlRWxlbWVudCwgJ3Njcm9sbCcpO1xyXG5cclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG5cclxuICAgICAgaWYgKCEhdGhpcy53aWR0aCkgdGhpcy5jb3JlVGFibGUubmF0aXZlRWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSgnLS13aWR0aCcsIHRoaXMud2lkdGggKyAncHgnKTtcclxuICAgICAgaWYgKCEhdGhpcy5yb3dIZWlnaHQpIHRoaXMuY29yZVRhYmxlLm5hdGl2ZUVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoJy0tcm93LWhlaWdodCcsIHRoaXMucm93SGVpZ2h0ICsgJ3B4Jyk7XHJcbiAgICAgIGlmICghIXRoaXMuaGVpZ2h0KSB0aGlzLmNvcmVUYWJsZS5uYXRpdmVFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KCctLWhlaWdodCcsIHRoaXMuaGVpZ2h0ICsgJ3B4Jyk7XHJcblxyXG4gICAgICAvLyBDaOG7iSBzdWJzY3JpZGUgc2F1IGtoaSBjw6FjIGzhu4duaCB0csOqbiDEkcOjIMSRxrDhu6NjIHRo4buxYyBoaeG7h25cclxuICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXHJcbiAgICAgICAgdGhpcy5zY3JvbGxTdHJlYW0kXHJcbiAgICAgICAgICAucGlwZShcclxuICAgICAgICAgICAgZGVib3VuY2VUaW1lKDUwKVxyXG4gICAgICAgICAgKVxyXG4gICAgICAgICAgLnN1YnNjcmliZShldmVudCA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuc2Nyb2xsVG9wID0gZXZlbnQuc3JjRWxlbWVudC5zY3JvbGxUb3A7XHJcbiAgICAgICAgICAgIHRoaXMuY2FsY3VsYXRlU2Nyb2xsKCk7XHJcbiAgICAgICAgICB9KVxyXG4gICAgICApXHJcblxyXG4gICAgfSwgMClcclxuXHJcbiAgICB0aGlzLnJlc2V0SGVhZGVyRmlyc3RSb3dIZWlnaHQoKTtcclxuXHJcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcclxuICAgICAgdGhpcy5tbHMubGFuZyQuc3Vic2NyaWJlKF8gPT4ge1xyXG4gICAgICAgIHRoaXMucmVzZXRIZWFkZXJGaXJzdFJvd0hlaWdodCgpO1xyXG4gICAgICB9KVxyXG4gICAgKVxyXG5cclxuICB9XHJcblxyXG4gIG9uVG9vbENsaWNrTG9jYWwocm93OiBhbnksIHRvb2xJbmRleDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICB0aGlzLm9uVG9vbENsaWNrLmVtaXQoe1xyXG4gICAgICBjb2RlOiB0aGlzLnRvb2xzW3Rvb2xJbmRleF0uY29kZSxcclxuICAgICAgaWQ6IHJvd1snaWQnXVxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIHRvZ2dsZUNoZWNrQWxsKGFyZ3M6IGJvb2xlYW4pIHtcclxuICAgIGNvbnN0IG5ld0NoZWNraW5nTW9kZWw6IGJvb2xlYW5bXSA9IFtdO1xyXG4gICAgY29uc3QgbmV3U2VsZWN0ZWRJZHM6IGFueVtdID0gW107XHJcbiAgICBjb25zdCBuZXdTZWxlY3RlZERhdGE6IGFueVtdID0gW107XHJcblxyXG4gICAgdGhpcy5kYXRhLm1hcChpdGVtID0+IHtcclxuICAgICAgbmV3Q2hlY2tpbmdNb2RlbC5wdXNoKGFyZ3MpO1xyXG4gICAgICBpZiAoYXJncykge1xyXG4gICAgICAgIG5ld1NlbGVjdGVkSWRzLnB1c2goaXRlbS5pZCk7XHJcbiAgICAgICAgbmV3U2VsZWN0ZWREYXRhLnB1c2goaXRlbSk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuY2hlY2tpbmdNb2RlbCA9IG5ld0NoZWNraW5nTW9kZWw7XHJcbiAgICB0aGlzLmNoZWNraW5nU3RhdGUgPSBhcmdzID8gMSA6IDA7XHJcbiAgICB0aGlzLm9uU2VsZWN0ZWRJZHNDaGFuZ2UuZW1pdChuZXdTZWxlY3RlZElkcyk7XHJcbiAgICB0aGlzLm9uU2VsZWN0ZWREYXRhQ2hhbmdlLmVtaXQobmV3U2VsZWN0ZWREYXRhKTtcclxuICB9XHJcblxyXG4gIG9uQ2hlY2tpbmdOZ01vZGVsQ2hhbmdlKCkge1xyXG4gICAgY29uc3QgbmV3U2VsZWN0ZWRJZHM6IG51bWJlcltdID0gW107XHJcbiAgICBjb25zdCBuZXdTZWxlY3RlZERhdGE6IGFueVtdID0gW107XHJcbiAgICB0aGlzLmRhdGEuZmlsdGVyKChfOiBhbnksIGluZGV4OiBudW1iZXIpID0+ICEhdGhpcy5jaGVja2luZ01vZGVsW2luZGV4XSkubWFwKGl0ZW0gPT4ge1xyXG4gICAgICBuZXdTZWxlY3RlZElkcy5wdXNoKGl0ZW0uaWQpXHJcbiAgICAgIG5ld1NlbGVjdGVkRGF0YS5wdXNoKGl0ZW0pXHJcbiAgICB9KVxyXG4gICAgdGhpcy5vblNlbGVjdGVkSWRzQ2hhbmdlLmVtaXQobmV3U2VsZWN0ZWRJZHMpO1xyXG4gICAgdGhpcy5vblNlbGVjdGVkRGF0YUNoYW5nZS5lbWl0KG5ld1NlbGVjdGVkRGF0YSk7XHJcblxyXG4gICAgaWYgKG5ld1NlbGVjdGVkSWRzLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICB0aGlzLmNoZWNraW5nU3RhdGUgPSAwOyAvLyBub25lXHJcbiAgICB9IGVsc2UgaWYgKG5ld1NlbGVjdGVkSWRzLmxlbmd0aCA9PT0gdGhpcy5jaGVja2luZ01vZGVsLmxlbmd0aCkge1xyXG4gICAgICB0aGlzLmNoZWNraW5nU3RhdGUgPSAxOyAvLyBhbGxcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuY2hlY2tpbmdTdGF0ZSA9IDI7IC8vIG1peGVkXHJcbiAgICB9XHJcblxyXG4gIH1cclxuXHJcbiAgb25Eb3VibGVDbGlja0xvY2FsKHJvd0luZGV4OiBudW1iZXIpIHtcclxuICAgIHRoaXMub25Sb3dEb3VibGVDbGljay5lbWl0KHRoaXMuZGF0YVtyb3dJbmRleF0pXHJcbiAgfVxyXG5cclxuICBvbkNsaWNrTG9jYWwocm93OiBhbnksIGV2ZW50OiBhbnkpIHtcclxuXHJcbiAgICBjb25zb2xlLmxvZyhcIm9uQ2xpY2tMb2NhbCByb3dcIiwgcm93LCBcImV2ZW50XCIsIGV2ZW50KVxyXG5cclxuICAgIGlmIChldmVudC5kZXRhaWwgPT09IDEpIHtcclxuICAgICAgdGhpcy5hY3RpdmVSb3cgPSByb3cuaWQ7XHJcbiAgICAgIHRoaXMub25Sb3dDbGljay5lbWl0KHJvdyk7XHJcbiAgICB9IGVsc2UgaWYgKGV2ZW50LmRldGFpbCA9PT0gMikge1xyXG4gICAgICB0aGlzLm9uUm93RG91YmxlQ2xpY2suZW1pdChyb3cpXHJcbiAgICB9XHJcblxyXG4gIH1cclxuXHJcbiAgb25Sb3dUb3VjaGVuZChyb3dJbmRleDogbnVtYmVyKSB7XHJcbiAgICB0aGlzLnJvd1RvdWNoZW5kU3RyZWFtJC5uZXh0KHtcclxuICAgICAgcHJldmlvdXM6IHRoaXMucm93VG91Y2hlbmRTdHJlYW0kLnZhbHVlLmN1cnJlbnQsXHJcbiAgICAgIGN1cnJlbnQ6IHJvd0luZGV4XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIG9uU2VhcmNoKGU6IHN0cmluZywgc2VhcmNoQ29sdW1uSW5kZXg6IG51bWJlcik6IHZvaWQge1xyXG4gICAgdGhpcy5zZWFyY2hPYmplY3QuZmlsdGVyKChfLCBpKSA9PiBpID09PSBzZWFyY2hDb2x1bW5JbmRleClbMF0uc2VhcmNoRm9yID0gZTtcclxuICAgIHRoaXMub25TZWFyY2hpbmcuZW1pdCh0aGlzLnNlYXJjaE9iamVjdCk7XHJcbiAgfVxyXG5cclxuICBvbkNvbHVtbkNhcHRpb25DbGlja0xvY2FsKGNvbHVtbjogSUNvcmVUYWJsZUNvbHVtbkl0ZW0pIHtcclxuXHJcbiAgICBpZiAoISF0aGlzLmRpc2FibGVTb3J0aW5nIHx8ICEhY29sdW1uLnRlbXBsYXRlUmVmKSByZXR1cm47IC8vIG5vIGFjdGlvbiBmb3IgdGVtcGxhdGVSZWYgdHlwZVxyXG5cclxuICAgIHRoaXMub25Db2x1bW5DYXB0aW9uQ2xpY2suZW1pdChjb2x1bW4pO1xyXG5cclxuICAgIC8vIHVwZGF0ZSBzb3J0IGRpY3JlY3Rpb24gcHJvcGVydHkgb2YgdGhpcyBjb2x1bW5cclxuICAgIC8vIGFuZCBjbGVhciB1cCB0aGUgcHJvcGVydHkgZm9yIHRoZSBvdGhlciB2aXNpYmxlQ29sdW1uc1xyXG4gICAgdGhpcy52aXNpYmxlQ29sdW1ucy5tYXAodmMgPT4ge1xyXG4gICAgICBpZiAodmMuZmllbGQgPT09IGNvbHVtbi5maWVsZCkge1xyXG4gICAgICAgIHZjLnNvcnREaXJlY3Rpb24gPSB2Yy5zb3J0RGlyZWN0aW9uID09PSBFbnVtU29ydERpcmVjdGlvbi5OT05FID8gRW51bVNvcnREaXJlY3Rpb24uQVNDIDogdmMuc29ydERpcmVjdGlvbiA9PT0gRW51bVNvcnREaXJlY3Rpb24uQVNDID8gRW51bVNvcnREaXJlY3Rpb24uREVTQyA6IEVudW1Tb3J0RGlyZWN0aW9uLk5PTkU7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdmMuc29ydERpcmVjdGlvbiA9IEVudW1Tb3J0RGlyZWN0aW9uLk5PTkVcclxuICAgICAgfVxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIHRvZ2dsZUFsbG93U2VhcmNoKCk6IHZvaWQge1xyXG4gICAgdGhpcy5zZWFyY2hBY3RpdmUgPSAhISF0aGlzLnNlYXJjaEFjdGl2ZVxyXG4gIH1cclxuXHJcbiAgb25JbmxpbmVUb29sQ2xpY2soZTogSUNvcmVCdXR0b25WTlMsIHJvdzogYW55KTogdm9pZCB7XHJcbiAgICBjb25zb2xlLmxvZyhcIm9uSW5saW5lVG9vbENsaWNrXCIsIGUsIHJvdylcclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLm1hcCh4ID0+IHg/LnVuc3Vic2NyaWJlKCkpO1xyXG4gIH1cclxuXHJcbn1cclxuIiwiPGRpdiAjY29yZVRhYmxlIGNsYXNzPVwiY29yZS10YWJsZS1jb250YWluZXJcIiBbY2xhc3MuaGlkZS1zZWFyY2hdPVwiISEhc2VhcmNoQWN0aXZlXCI+XHJcblxyXG4gICAgPCEtLSBcclxuICAgICAgICBD4bqnbiB0cnV54buBbiBjaMOtbmggeMOhYyBoZWlnaHQgY+G7p2EgQ29yZVRhYmxlXHJcbiAgICAgICAgVHV5IG5oacOqbiBjaGnhu4F1IGNhbyBj4bunYSBDb3JlVGFibGUgY+G6p24gxJHGsOG7o2MgdMOtbmggZOG7sWEgdsOgbyBjaGnhu4F1IGNhbyBj4bunYSBjw6FjIHBo4bqnbiB04butIERPTSBs4bqnbiBsxrDhu6N0IHThu6sgbOG7m3Agbmdvw6BpIHbDoG8gbOG7m3AgdHJvbmdcclxuICAgICAgICBBbmggZW0gY2jGsGEgdMOtbmgga2hpIHRyaeG7g24ga2hhaSBjb2RlLCBuw6puIMSRYW5nIGPhuqduIGPDsyBjb24gc+G7kSBkZWZhdWx0IGzDoCA0MDBweFxyXG4gICAgLS0+XHJcbiAgICA8dGFibGUgW2NsYXNzLndyYXBdPVwiISF3cmFwXCIgI3RhYmxlIFtuZ1N0eWxlXT1cInsgaGVpZ2h0OiAoaGVpZ2h0IHx8IDQwMCkgKyAncHgnIH1cIj5cclxuICAgICAgICA8Y29sZ3JvdXA+XHJcbiAgICAgICAgICAgIEBpZiAoc2hvd0NoZWNrYm94KSB7XHJcbiAgICAgICAgICAgIDxjb2w+IH1cclxuICAgICAgICAgICAgQGZvciAoY29sIG9mIHZpc2libGVDb2x1bW5zOyB0cmFjayBjb2wpIHtcclxuICAgICAgICAgICAgPGNvbD4gfVxyXG4gICAgICAgICAgICBAaWYgKHNob3dUb29scykge1xyXG4gICAgICAgICAgICA8Y29sPiB9XHJcbiAgICAgICAgPC9jb2xncm91cD5cclxuICAgICAgICA8dGhlYWQ+XHJcbiAgICAgICAgICAgIDx0ciAjZmlyc3RIZWFkZXJSb3cgZGF0YS1yb3c9XCIxXCIgW25nU3R5bGVdPVwie1xyXG4gICAgICAgICAgICAgICAgaGVpZ2h0OiBoZWFkZXJGaXJzdFJvd0hlaWdodCArICdweCdcclxuICAgICAgICAgICAgfVwiPlxyXG4gICAgICAgICAgICAgICAgQGlmIChzaG93Q2hlY2tib3gpIHtcclxuICAgICAgICAgICAgICAgIDx0aCBjbGFzcz1cImNoZWNrLWNvbC1oZWFkZXIgY2hlY2stY2VsbCBmcm96ZW4tY29sXCIgc3R5bGU9XCJsZWZ0OiAwcHhcIlxyXG4gICAgICAgICAgICAgICAgICAgIFthdHRyLnJvd3NwYW5dPVwic2VhcmNoQWN0aXZlID8gMiA6IDFcIiBbbmdTdHlsZV09XCJ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogaGVhZGVyQmFja2dyb3VuZENvbG9yLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xvcjogJ3doaXRlJ1xyXG4gICAgICAgICAgICAgICAgICAgIH1cIj5cclxuICAgICAgICAgICAgICAgICAgICA8IS0tIHBsZWFzZSBkbyBub3QgY2hhbmdlIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgW25nU3R5bGVdPVwie1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6IGNoZWNrYm94U2l6ZSAqIDIgKyAncHgnXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY2hlY2t3cmFwXCIgW25nU3R5bGVdPVwie1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDogc2VhcmNoQWN0aXZlID8gaGVhZGVyRmlyc3RSb3dIZWlnaHQgKyBoZWFkZXJTZWNvbmRSb3dIZWlnaHQgKyAncHgnIDogaGVhZGVyRmlyc3RSb3dIZWlnaHQgKyAncHgnXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgW2lkXT1cIidjaGVjay1jb2wtaGVhZGVyJyArIGlkXCIgWyhuZ01vZGVsKV09XCJoZWFkZXJDaGVja2JveFN0YXRlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJ0b2dnbGVDaGVja0FsbCgkZXZlbnQpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNoZWNrbWFya1wiIFtjbGFzcy5taXhlZF09XCJjaGVja2luZ1N0YXRlPT09MlwiIFtuZ1N0eWxlXT1cIntcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9wOiAoKGhlYWRlckZpcnN0Um93SGVpZ2h0ICsgaGVhZGVyU2Vjb25kUm93SGVpZ2h0ICogKHNlYXJjaEFjdGl2ZSA/IDEgOiAwKSkgLzIgLSBjaGVja2JveFNpemUvMikgKyAncHgnXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvdGg+XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBAZm9yIChjb2wgb2YgdmlzaWJsZUNvbHVtbnM7IHRyYWNrIGNvbCkge1xyXG4gICAgICAgICAgICAgICAgPHRoIFtjbGFzcy5mcm96ZW4tY29sXT1cIiRpbmRleCA8IGZyb3plblwiXHJcbiAgICAgICAgICAgICAgICAgICAgW3N0eWxlXT1cIiRpbmRleCA8IGZyb3plbiA/ICdsZWZ0OiAnICsgZnJvemVuTGVmdHNbJGluZGV4XSArICdweCcgOiAnJ1wiIFtuZ1N0eWxlXT1cIntcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogaGVhZGVyQmFja2dyb3VuZENvbG9yLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6ICd3aGl0ZScsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiAhIW5vUGFkZGluZ0NlbGwgPyAnMHB4IDBweCcgOiAnMHB4IDEycHgnXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cIj5cclxuICAgICAgICAgICAgICAgICAgICA8IS0tIC0xcHggZm9yIGJvcmRlckJvdHRvbSBvZiBoZWFkZXIgZmlyc3Qgcm93IC0tPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2x1bW4tY2FwdGlvblwiIFtjbGFzcy5hc2NlbmRpbmddPVwiY29sLnNvcnREaXJlY3Rpb249PT0tMVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5kZXNjZW5kaW5nXT1cImNvbC5zb3J0RGlyZWN0aW9uPT09MVwiIChjbGljayk9XCJvbkNvbHVtbkNhcHRpb25DbGlja0xvY2FsKGNvbClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbYXBwVG9vbHRpcF09XCJjb2wuY2FwdGlvbiB8IHRyYW5zbGF0ZSA6IGxhbmdcIiBbbmdTdHlsZV09XCJ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6IGNvbC53aWR0aCArICdweCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiAoaGVhZGVyRmlyc3RSb3dIZWlnaHQgLSAxKSArICdweCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogJ2ZsZXgnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsaWduSXRlbXM6ICdjZW50ZXInLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaXRlU3BhY2U6ICEhaGVhZGVyV3JhcCA/ICdpbml0aWFsJyA6ICdpbmhlcml0J1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVwiPnt7IGNvbC5jYXB0aW9uIHwgdHJhbnNsYXRlIDogbGFuZyB9fTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyZXNpemVyXCIgKG1vdXNlZG93bik9XCJzdGFydERyYWdnaW5nKCRldmVudCwgY29sLCBmYWxzZSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAobW91c2V1cCk9XCJzdG9wRHJhZ2dpbmcoJGV2ZW50LCBjb2wsIGZhbHNlKVwiIChtb3VzZW1vdmUpPVwibW92ZUV2ZW50KCRldmVudCwgY29sKVwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC90aD5cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIEBpZiAoc2hvd1Rvb2xzICYmIHZpc2libGVDb2x1bW5zPy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgIDx0aCBjbGFzcz1cImNoZWNrLWNvbC1oZWFkZXIgY2hlY2stY2VsbFwiIFtuZ1N0eWxlXT1cIntcclxuICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiBoZWFkZXJCYWNrZ3JvdW5kQ29sb3IsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiAnd2hpdGUnXHJcbiAgICAgICAgICAgICAgICAgICAgfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9XCJ3aWR0aDogMTAwcHg7XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L3RoPlxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgQGlmICghc2VhcmNoU3dpdGNoRGlzYWJsZWQpIHtcclxuICAgICAgICAgICAgICAgIDx0aCBbbmdTdHlsZV09XCJ7XHJcbiAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiBoZWFkZXJCYWNrZ3JvdW5kQ29sb3IsXHJcbiAgICAgICAgICAgICAgICAgICAgd2lkdGg6ICc1MHB4J1xyXG4gICAgICAgICAgICAgICAgfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJzZWFyY2hTd2l0Y2hlclwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgPC90aD5cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgQGlmIChzZWFyY2hBY3RpdmUpIHtcclxuICAgICAgICAgICAgPHRyIGRhdGEtcm93PVwiMlwiIFtjbGFzcy5oaWRlbl09XCIhISFzZWFyY2hBY3RpdmVcIj5cclxuICAgICAgICAgICAgICAgIEBmb3IgKGNvbCBvZiB2aXNpYmxlQ29sdW1uczsgdHJhY2sgY29sKSB7XHJcbiAgICAgICAgICAgICAgICA8dGggW2NsYXNzLmZyb3plbi1jb2xdPVwiJGluZGV4IDwgZnJvemVuXCJcclxuICAgICAgICAgICAgICAgICAgICBbc3R5bGVdPVwiJGluZGV4IDwgZnJvemVuID8gJ2xlZnQ6ICcgKyBmcm96ZW5MZWZ0c1skaW5kZXhdICsgJ3B4JyA6ICcnXCIgW25nU3R5bGVdPVwie1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogaGVhZGVyQmFja2dyb3VuZENvbG9yLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiAnd2hpdGUnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6ICcwcHggMTJweCdcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cIj5cclxuICAgICAgICAgICAgICAgICAgICBAaWYgKCFjb2wuaGlkZVNlYXJjaEJveCkge1xyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgW3N0eWxlXT1cIid3aWR0aDogJyArIGNvbC53aWR0aCArICdweDsnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwiZm9ybS1jb250cm9sIHNlYXJjaFwiIFsobmdNb2RlbCldPVwic2VhcmNoT2JqZWN0WyRpbmRleF0uc2VhcmNoRm9yXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cIm9uU2VhcmNoKCRldmVudCwgJGluZGV4KVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIDwvdGg+XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICA8dGggW25nU3R5bGVdPVwie1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IGhlYWRlckJhY2tncm91bmRDb2xvcixcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6ICd3aGl0ZSdcclxuICAgICAgICAgICAgICAgICAgICB9XCI+PC90aD5cclxuICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIDwvdGhlYWQ+XHJcblxyXG4gICAgICAgIDx0Ym9keSBbY2xhc3MubG9hZGluZ109XCJsb2FkaW5nXCI+XHJcbiAgICAgICAgICAgIDxjb3JlLWxvYWRpbmctc3VyZmFjZSBbbG9hZGluZ109XCJsb2FkaW5nXCIgW2hlaWdodF09XCJ0Ym9keWhlaWdodCB8fCA1MDBcIj48L2NvcmUtbG9hZGluZy1zdXJmYWNlPlxyXG5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgIEBpZiAoISFsYXp5TG9hZGluZykge1xyXG4gICAgICAgICAgICAgICAgPHRyIFtuZ1N0eWxlXT1cInsgaGVpZ2h0OiBoaWRkZW5Ub3BIZWlnaHQgKyAncHgnIH1cIj5cclxuICAgICAgICAgICAgICAgICAgICA8dGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgW25nU3R5bGVdPVwieyBoZWlnaHQ6IGhpZGRlblRvcEhlaWdodCArICdweCcgfVwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIEBmb3IgKHJvdyBvZiB2aXNpYmxlRGF0YTsgdHJhY2sgcm93KSB7XHJcbiAgICAgICAgICAgICAgICA8dHIgKGNsaWNrKT1cIm9uQ2xpY2tMb2NhbChyb3csICRldmVudClcIiAodG91Y2hlbmQpPVwib25Sb3dUb3VjaGVuZCgkaW5kZXgrc3RhcnROb2RlKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmFjdGl2ZV09XCJyb3cuaWQgPT09IGFjdGl2ZVJvdyAmJiAhISFkaXNhYmxlSGlnaGxpZ2h0T25DbGlja1wiPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8IS0tIDxkaXYgY2xhc3M9XCJyb3ctaXRlbS10b29sc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93LWl0ZW0tdG9vbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdy1pdGVtLXRvb2wtd3JhcHBlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjb3JlLWJ1dHRvbi1ncm91cC12bnMgW3Nob3duSXRlbXNdPVwiaW5saW5lVG9vbEl0ZW1zXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGJ1dHRvbkNsaWNrKT1cIm9uSW5saW5lVG9vbENsaWNrKCRldmVudCwgcm93KVwiPjwvY29yZS1idXR0b24tZ3JvdXAtdm5zPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PiAtLT5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgQGlmIChzaG93Q2hlY2tib3gpIHtcclxuICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJjaGVjay1jZWxsIGZyb3plbi1jb2xcIiBzdHlsZT1cImxlZnQ6IDBweDtcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY2hlY2t3cmFwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgY2xhc3M9XCJjaGVjay1yb3dcIiBbaWRdPVwiJ2NoZWNrLXJvdycgKyAoJGluZGV4ICsgc3RhcnROb2RlKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJjaGVja2luZ01vZGVsWyRpbmRleCtzdGFydE5vZGVdXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJvbkNoZWNraW5nTmdNb2RlbENoYW5nZSgpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNoZWNrbWFya1wiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgQGZvciAoY29sIG9mIHZpc2libGVDb2x1bW5zOyB0cmFjayBjb2wpIHtcclxuICAgICAgICAgICAgICAgICAgICA8dGQgW2NsYXNzLmZyb3plbi1jb2xdPVwiJGluZGV4IDwgZnJvemVuXCIgW25nU3R5bGVdPVwie1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZWZ0OiAkaW5kZXggPCBmcm96ZW4gPyBmcm96ZW5MZWZ0c1skaW5kZXhdICsgJ3B4JyA6ICcwcHgnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiAhIW5vUGFkZGluZ0NlbGwgPyAnMHB4IDBweCcgOiAnMnB4IDBweCdcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XCI+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBAaWYgKCFjb2w/LnRlbXBsYXRlUmVmKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gSU4gTU9TVCBDQVNFUyBXRSBORUVEIFRPIFJFTkRFUiBUSEUgQ0VMTCBXSVRIIFBSSU1JVElWRSBUWVBFIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IFtjbGFzcy5zY3JvbGwteV09XCJhbGxvd0NlbGxTY3JvbGxZXCIgW25nU3R5bGVdPVwie1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6ICEhY29sLndpZHRoID8gY29sLndpZHRoICsgJ3B4JyA6ICd1bnNldCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0QWxpZ246ICEhY29sLmFsaWduID8gY29sLmFsaWduLnRvTG93ZXJDYXNlKCkgOiAndW5zZXQnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZUhlaWdodDogcm93SGVpZ2h0LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogISFub1BhZGRpbmdDZWxsID8gJzBweCAwcHgnIDogJzBweCAxMnB4J1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XCIgW2FwcFRvb2x0aXBdPVwicm93W2NvbC5maWVsZF0gfCB0YWJsZUNlbGw6IGNvbC5waXBlIDogbGFuZ1wiPnt7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dbY29sLmZpZWxkXSB8IHRhYmxlQ2VsbDogY29sLnBpcGUgOiBsYW5nIH19PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IEBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBCVVQgU09NRSBUSU1FIFdFIE5FRUQgVE8gUkVOREVSIFRIRSBDRUxMIFdJVEggVEVNUExBVEUgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgW25nU3R5bGVdPVwie1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6ICEhY29sLndpZHRoID8gY29sLndpZHRoICsgJ3B4JyA6ICd1bnNldCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0QWxpZ246ICEhY29sLmFsaWduID8gY29sLmFsaWduLnRvTG93ZXJDYXNlKCkgOiAndW5zZXQnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogISFub1BhZGRpbmdDZWxsID8gJzBweCAwcHgnIDogJzBweCAxMnB4J1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBAaWYgKCFjb2w/LnRlbXBsYXRlUmVmQWxsb3dFZGl0T25Sb3dBY3RpdmVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJjb2w/LnRlbXBsYXRlUmVmITsgY29udGV4dDogeyBjb250ZXh0OiByb3cgfVwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBAZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJjb2w/LnRlbXBsYXRlUmVmITsgY29udGV4dDogeyBjb250ZXh0OiByb3csIGFsbG93RWRpdDogcm93LmlkID09PSBhY3RpdmVSb3cgfVwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcblxyXG4gICAgICAgICAgICAgICAgICAgIEBpZiAoc2hvd1Rvb2xzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgPHRkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidG9vbHMtZ3JvdXAgZC1mbGV4LWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQGZvciAodG9vbCBvZiB0b29sczsgdHJhY2sgdG9vbCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBbY2xhc3NdPVwiJ3Rvb2xzLWljb24gJyArIHRvb2wuY2xhc3NcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5kaXNhYmxlZF09XCJ0b29sLmRpc2FibGVkRm4gPyB0b29sLmRpc2FibGVkRm4hKHJvdykgOiBmYWxzZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmhpZGRlbl09XCJ0b29sLmhpZGRlbkZuID8gdG9vbC5oaWRkZW5GbiEocm93KSA6IGZhbHNlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25Ub29sQ2xpY2tMb2NhbChyb3csICRpbmRleClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgQGlmICghIWxhenlMb2FkaW5nKSB7XHJcbiAgICAgICAgICAgICAgICA8dHIgW25nU3R5bGVdPVwie1xyXG4gICAgICAgICAgICAgICAgICAgIGhlaWdodDogaGlkZGVuQm90dG9tSGVpZ2h0ICsgJ3B4J1xyXG4gICAgICAgICAgICAgICAgfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDx0ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBbbmdTdHlsZV09XCJ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiBoaWRkZW5Cb3R0b21IZWlnaHQgKyAncHgnXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgIDwvdGJvZHk+XHJcbiAgICAgICAgQGlmICghIWZvb3Rlcikge1xyXG4gICAgICAgIDx0Zm9vdD5cclxuICAgICAgICAgICAgRm9vdGVyXHJcbiAgICAgICAgPC90Zm9vdD5cclxuICAgICAgICB9XHJcbiAgICA8L3RhYmxlPlxyXG5cclxuICAgIDxuZy10ZW1wbGF0ZSAjc2VhcmNoU3dpdGNoZXI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInNlYXJjaC10b2dnbGVyIGQtZmxleC1jZW50ZXIgcG9pbnRlclwiIChjbGljayk9XCJ0b2dnbGVBbGxvd1NlYXJjaCgpXCI+XHJcbiAgICAgICAgICAgIDxpIGNsYXNzPVwiZmVhdGhlci1zZWFyY2hcIj48L2k+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L25nLXRlbXBsYXRlPlxyXG48L2Rpdj4iXX0=
|