raain-app 3.2.1 → 3.2.3
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/CHANGELOG.md +9 -1
- package/esm2020/raain-configuration/raain-configuration.component.mjs +26 -6
- package/esm2020/tools/CompareManager.mjs +4 -4
- package/fesm2015/raain-app.mjs +29 -8
- package/fesm2015/raain-app.mjs.map +1 -1
- package/fesm2020/raain-app.mjs +28 -8
- package/fesm2020/raain-app.mjs.map +1 -1
- package/package.json +3 -3
- package/raain-configuration/raain-configuration.component.d.ts +3 -1
package/CHANGELOG.md
CHANGED
|
@@ -7,7 +7,15 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
-
## [3.2.
|
|
10
|
+
## [3.2.3] - 2026-03-11
|
|
11
|
+
|
|
12
|
+
### Changed
|
|
13
|
+
|
|
14
|
+
- [RAD-192] Updated configuration component and CompareManager
|
|
15
|
+
|
|
16
|
+
## [3.2.2] - 2026-03-03
|
|
17
|
+
|
|
18
|
+
## [3.2.1] - 2026-03-02
|
|
11
19
|
|
|
12
20
|
### Changed
|
|
13
21
|
|
|
@@ -10,8 +10,13 @@ export class RaainConfigurationComponent {
|
|
|
10
10
|
this.minPoint = { x: 0, y: 0 };
|
|
11
11
|
this.maxPoint = { x: 300, y: 100 };
|
|
12
12
|
this.logStyle = false;
|
|
13
|
+
this.readonly = false;
|
|
14
|
+
this.createTimer = null;
|
|
13
15
|
this.onSizeChanged = () => { };
|
|
14
16
|
this.onDrag = (e) => {
|
|
17
|
+
if (this.readonly) {
|
|
18
|
+
return false;
|
|
19
|
+
}
|
|
15
20
|
this.changedPoints.emit(this.points);
|
|
16
21
|
};
|
|
17
22
|
}
|
|
@@ -41,7 +46,7 @@ export class RaainConfigurationComponent {
|
|
|
41
46
|
return;
|
|
42
47
|
}
|
|
43
48
|
this.created = true;
|
|
44
|
-
let inputs = new ConfigurationElementInput(this.points, this.minPoint, this.maxPoint, false, [], this.onDrag);
|
|
49
|
+
let inputs = new ConfigurationElementInput(this.points, this.minPoint, this.maxPoint, false, [], this.onDrag, this.readonly);
|
|
45
50
|
if (this.logStyle) {
|
|
46
51
|
const confTransparency = 0.3;
|
|
47
52
|
inputs = new ConfigurationElementInput(this.points, this.minPoint, this.maxPoint, true, [
|
|
@@ -110,21 +115,34 @@ export class RaainConfigurationComponent {
|
|
|
110
115
|
yStart: Math.log10(300),
|
|
111
116
|
yEnd: Math.log10(500),
|
|
112
117
|
},
|
|
113
|
-
], this.onDrag);
|
|
118
|
+
], this.onDrag, this.readonly);
|
|
114
119
|
}
|
|
115
120
|
this.ngZone.runOutsideAngular(() => {
|
|
116
|
-
setTimeout(() => {
|
|
121
|
+
this.createTimer = setTimeout(() => {
|
|
122
|
+
this.createTimer = null;
|
|
117
123
|
const factory = new ElementsFactory();
|
|
118
124
|
this.configurationElement = factory.createConfiguration(this.canvasElement.nativeElement, inputs);
|
|
119
125
|
}, 10);
|
|
120
126
|
});
|
|
121
127
|
}
|
|
122
128
|
async delete() {
|
|
129
|
+
if (this.createTimer) {
|
|
130
|
+
clearTimeout(this.createTimer);
|
|
131
|
+
this.createTimer = null;
|
|
132
|
+
}
|
|
123
133
|
this.configurationElement?.chart?.destroy();
|
|
124
134
|
this.created = false;
|
|
125
135
|
}
|
|
126
136
|
async change(changes) {
|
|
127
|
-
//
|
|
137
|
+
// Fast path: update chart data in-place when only points changed
|
|
138
|
+
if (this.configurationElement?.chart && changes.points && Object.keys(changes).length === 1) {
|
|
139
|
+
const chart = this.configurationElement.chart;
|
|
140
|
+
chart.data.datasets.forEach((ds) => {
|
|
141
|
+
ds.data = this.points;
|
|
142
|
+
});
|
|
143
|
+
chart.update('none');
|
|
144
|
+
return;
|
|
145
|
+
}
|
|
128
146
|
await this.delete();
|
|
129
147
|
this.create();
|
|
130
148
|
}
|
|
@@ -148,7 +166,7 @@ export class RaainConfigurationComponent {
|
|
|
148
166
|
}
|
|
149
167
|
}
|
|
150
168
|
RaainConfigurationComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: RaainConfigurationComponent, deps: [{ token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Component });
|
|
151
|
-
RaainConfigurationComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: RaainConfigurationComponent, selector: "raain-configuration", inputs: { points: "points", currentHeight: "currentHeight", currentWidth: "currentWidth", minPoint: "minPoint", maxPoint: "maxPoint", logStyle: "logStyle" }, outputs: { changedPoints: "changedPoints" }, host: { listeners: { "window:resize": "onResize($event)" } }, viewQueries: [{ propertyName: "canvasElement", first: true, predicate: ["canvasElement"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<ion-grid>\n <ion-row>\n <ion-col id=\"col-container\" size-xs=\"10\">\n <div [style.height.px]=\"currentHeight\" id=\"canvas-container\">\n <canvas #canvasElement></canvas>\n </div>\n </ion-col>\n <ion-col size-xs=\"2\">\n <ion-button (click)=\"reset(2)\" color=\"light\" shape=\"round\" size=\"small\">2</ion-button>\n <br>\n <ion-button (click)=\"reset(4)\" color=\"light\" shape=\"round\" size=\"small\">4</ion-button>\n <br>\n <ion-button (click)=\"reset(6)\" color=\"light\" shape=\"round\" size=\"small\">6</ion-button>\n <br>\n </ion-col>\n </ion-row>\n</ion-grid>\n", styles: ["#canvas-container{position:relative;width:100%;height:100%}\n"], dependencies: [{ kind: "component", type: i1.IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { kind: "component", type: i1.IonCol, selector: "ion-col", inputs: ["offset", "offsetLg", "offsetMd", "offsetSm", "offsetXl", "offsetXs", "pull", "pullLg", "pullMd", "pullSm", "pullXl", "pullXs", "push", "pushLg", "pushMd", "pushSm", "pushXl", "pushXs", "size", "sizeLg", "sizeMd", "sizeSm", "sizeXl", "sizeXs"] }, { kind: "component", type: i1.IonGrid, selector: "ion-grid", inputs: ["fixed"] }, { kind: "component", type: i1.IonRow, selector: "ion-row" }] });
|
|
169
|
+
RaainConfigurationComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: RaainConfigurationComponent, selector: "raain-configuration", inputs: { points: "points", currentHeight: "currentHeight", currentWidth: "currentWidth", minPoint: "minPoint", maxPoint: "maxPoint", logStyle: "logStyle", readonly: "readonly" }, outputs: { changedPoints: "changedPoints" }, host: { listeners: { "window:resize": "onResize($event)" } }, viewQueries: [{ propertyName: "canvasElement", first: true, predicate: ["canvasElement"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<ion-grid>\n <ion-row>\n <ion-col id=\"col-container\" size-xs=\"10\">\n <div [style.height.px]=\"currentHeight\" id=\"canvas-container\">\n <canvas #canvasElement></canvas>\n </div>\n </ion-col>\n <ion-col size-xs=\"2\">\n <ion-button (click)=\"reset(2)\" color=\"light\" shape=\"round\" size=\"small\">2</ion-button>\n <br>\n <ion-button (click)=\"reset(4)\" color=\"light\" shape=\"round\" size=\"small\">4</ion-button>\n <br>\n <ion-button (click)=\"reset(6)\" color=\"light\" shape=\"round\" size=\"small\">6</ion-button>\n <br>\n </ion-col>\n </ion-row>\n</ion-grid>\n", styles: ["#canvas-container{position:relative;width:100%;height:100%}\n"], dependencies: [{ kind: "component", type: i1.IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { kind: "component", type: i1.IonCol, selector: "ion-col", inputs: ["offset", "offsetLg", "offsetMd", "offsetSm", "offsetXl", "offsetXs", "pull", "pullLg", "pullMd", "pullSm", "pullXl", "pullXs", "push", "pushLg", "pushMd", "pushSm", "pushXl", "pushXs", "size", "sizeLg", "sizeMd", "sizeSm", "sizeXl", "sizeXs"] }, { kind: "component", type: i1.IonGrid, selector: "ion-grid", inputs: ["fixed"] }, { kind: "component", type: i1.IonRow, selector: "ion-row" }] });
|
|
152
170
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: RaainConfigurationComponent, decorators: [{
|
|
153
171
|
type: Component,
|
|
154
172
|
args: [{ selector: 'raain-configuration', template: "<ion-grid>\n <ion-row>\n <ion-col id=\"col-container\" size-xs=\"10\">\n <div [style.height.px]=\"currentHeight\" id=\"canvas-container\">\n <canvas #canvasElement></canvas>\n </div>\n </ion-col>\n <ion-col size-xs=\"2\">\n <ion-button (click)=\"reset(2)\" color=\"light\" shape=\"round\" size=\"small\">2</ion-button>\n <br>\n <ion-button (click)=\"reset(4)\" color=\"light\" shape=\"round\" size=\"small\">4</ion-button>\n <br>\n <ion-button (click)=\"reset(6)\" color=\"light\" shape=\"round\" size=\"small\">6</ion-button>\n <br>\n </ion-col>\n </ion-row>\n</ion-grid>\n", styles: ["#canvas-container{position:relative;width:100%;height:100%}\n"] }]
|
|
@@ -166,6 +184,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
|
|
|
166
184
|
type: Input
|
|
167
185
|
}], logStyle: [{
|
|
168
186
|
type: Input
|
|
187
|
+
}], readonly: [{
|
|
188
|
+
type: Input
|
|
169
189
|
}], canvasElement: [{
|
|
170
190
|
type: ViewChild,
|
|
171
191
|
args: ['canvasElement']
|
|
@@ -173,4 +193,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
|
|
|
173
193
|
type: HostListener,
|
|
174
194
|
args: ['window:resize', ['$event']]
|
|
175
195
|
}] } });
|
|
176
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmFhaW4tY29uZmlndXJhdGlvbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29yZS9zaGFyZWQvcmFhaW4tY29uZmlndXJhdGlvbi9yYWFpbi1jb25maWd1cmF0aW9uLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uL3NyYy9jb3JlL3NoYXJlZC9yYWFpbi1jb25maWd1cmF0aW9uL3JhYWluLWNvbmZpZ3VyYXRpb24uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVILFNBQVMsRUFFVCxZQUFZLEVBQ1osWUFBWSxFQUNaLEtBQUssRUFJTCxNQUFNLEVBRU4sU0FBUyxHQUNaLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFDSCxnQkFBZ0IsRUFFaEIseUJBQXlCLEVBQ3pCLGVBQWUsRUFDZixLQUFLLEdBQ1IsTUFBTSxVQUFVLENBQUM7QUFDbEIsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLFdBQVcsQ0FBQzs7O0FBT2pDLE1BQU0sT0FBTywyQkFBMkI7SUE4QnBDLFlBQW9CLE1BQWM7UUFBZCxXQUFNLEdBQU4sTUFBTSxDQUFRO1FBekIzQixrQkFBYSxHQUFHLElBQUksWUFBWSxFQUFZLENBQUM7UUFTN0MsYUFBUSxHQUFXLEVBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFDLENBQUM7UUFHaEMsYUFBUSxHQUFXLEVBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFDLENBQUM7UUFHcEMsYUFBUSxHQUFHLEtBQUssQ0FBQztRQVdwQixJQUFJLENBQUMsYUFBYSxHQUFHLEdBQUcsRUFBRSxHQUFFLENBQUMsQ0FBQztRQUM5QixJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBTSxFQUFFLEVBQUU7WUFDckIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FB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ekIsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDOzt5SEF0TVEsMkJBQTJCOzZHQUEzQiwyQkFBMkIseWNDNUJ4Qyw2bkJBaUJBOzRGRFdhLDJCQUEyQjtrQkFMdkMsU0FBUzsrQkFDSSxxQkFBcUI7NkZBTXhCLE1BQU07c0JBRFosS0FBSztnQkFJQyxhQUFhO3NCQURuQixNQUFNO2dCQUlBLGFBQWE7c0JBRG5CLEtBQUs7Z0JBSUMsWUFBWTtzQkFEbEIsS0FBSztnQkFJQyxRQUFRO3NCQURkLEtBQUs7Z0JBSUMsUUFBUTtzQkFEZCxLQUFLO2dCQUlDLFFBQVE7c0JBRGQsS0FBSztnQkFJSSxhQUFhO3NCQUR0QixTQUFTO3VCQUFDLGVBQWU7Z0JBc0NsQixRQUFRO3NCQURmLFlBQVk7dUJBQUMsZUFBZSxFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBBZnRlclZpZXdDaGVja2VkLFxuICAgIENvbXBvbmVudCxcbiAgICBFbGVtZW50UmVmLFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBIb3N0TGlzdGVuZXIsXG4gICAgSW5wdXQsXG4gICAgTmdab25lLFxuICAgIE9uQ2hhbmdlcyxcbiAgICBPbkRlc3Ryb3ksXG4gICAgT3V0cHV0LFxuICAgIFNpbXBsZUNoYW5nZXMsXG4gICAgVmlld0NoaWxkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gICAgQ2hhcnRTY2FsZUNvbG9ycyxcbiAgICBDb25maWd1cmF0aW9uRWxlbWVudCxcbiAgICBDb25maWd1cmF0aW9uRWxlbWVudElucHV0LFxuICAgIEVsZW1lbnRzRmFjdG9yeSxcbiAgICBUb29scyxcbn0gZnJvbSAncmFhaW4tdWknO1xuaW1wb3J0IHtYWVR5cGV9IGZyb20gJy4uL3h5dHlwZSc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAncmFhaW4tY29uZmlndXJhdGlvbicsXG4gICAgdGVtcGxhdGVVcmw6ICcuL3JhYWluLWNvbmZpZ3VyYXRpb24uY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL3JhYWluLWNvbmZpZ3VyYXRpb24uY29tcG9uZW50LnNjc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgUmFhaW5Db25maWd1cmF0aW9uQ29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3Q2hlY2tlZCwgT25EZXN0cm95LCBPbkNoYW5nZXMge1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHBvaW50czogWFlUeXBlW107XG5cbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgY2hhbmdlZFBvaW50cyA9IG5ldyBFdmVudEVtaXR0ZXI8WFlUeXBlW10+KCk7XG5cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBjdXJyZW50SGVpZ2h0OiBudW1iZXI7XG5cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBjdXJyZW50V2lkdGg6IG51bWJlcjtcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIG1pblBvaW50OiBYWVR5cGUgPSB7eDogMCwgeTogMH07XG5cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBtYXhQb2ludDogWFlUeXBlID0ge3g6IDMwMCwgeTogMTAwfTtcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGxvZ1N0eWxlID0gZmFsc2U7XG5cbiAgICBAVmlld0NoaWxkKCdjYW52YXNFbGVtZW50JylcbiAgICBwcm90ZWN0ZWQgY2FudmFzRWxlbWVudDogRWxlbWVudFJlZjtcblxuICAgIHByaXZhdGUgY29uZmlndXJhdGlvbkVsZW1lbnQ6IENvbmZpZ3VyYXRpb25FbGVtZW50O1xuICAgIHByaXZhdGUgb25EcmFnO1xuICAgIHByaXZhdGUgb25TaXplQ2hhbmdlZDtcbiAgICBwcml2YXRlIGNyZWF0ZWQ7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIG5nWm9uZTogTmdab25lKSB7XG4gICAgICAgIHRoaXMub25TaXplQ2hhbmdlZCA9ICgpID0+IHt9O1xuICAgICAgICB0aGlzLm9uRHJhZyA9IChlOiBhbnkpID0+IHtcbiAgICAgICAgICAgIHRoaXMuY2hhbmdlZFBvaW50cy5lbWl0KHRoaXMucG9pbnRzKTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBwdWJsaWMgbmdBZnRlclZpZXdDaGVja2VkKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmNyZWF0ZSgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgICAgIHRoaXMuY2hhbmdlKGNoYW5nZXMpO1xuICAgIH1cblxuICAgIHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5kZWxldGUoKTtcbiAgICB9XG5cbiAgICBhc3luYyByZXNldChjb3VudCA9IDQpIHtcbiAgICAgICAgY29uc3QgcG9pbnRzID0gW107XG4gICAgICAgIGZvciAobGV0IGMgPSAwOyBjIDwgY291bnQ7IGMrKykge1xuICAgICAgICAgICAgcG9pbnRzLnB1c2gobmV3IFhZVHlwZSgoYyArIDEpICogMTAsIChjICsgMSkgKiAwLjEpKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnBvaW50cyA9IHBvaW50cztcbiAgICAgICAgYXdhaXQgdGhpcy5kZWxldGUoKTtcbiAgICAgICAgdGhpcy5jcmVhdGUoKTtcbiAgICB9XG5cbiAgICBASG9zdExpc3RlbmVyKCd3aW5kb3c6cmVzaXplJywgWyckZXZlbnQnXSlcbiAgICBwcml2YXRlIG9uUmVzaXplKGV2ZW50OiBhbnkpOiB2b2lkIHtcbiAgICAgICAgLy8gdGhpcy51cGRhdGVNYXBTaXplKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjcmVhdGUoKSB7XG4gICAgICAgIGlmICh0aGlzLmNyZWF0ZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNyZWF0ZWQgPSB0cnVlO1xuXG4gICAgICAgIGxldCBpbnB1dHMgPSBuZXcgQ29uZmlndXJhdGlvbkVsZW1lbnRJbnB1dChcbiAgICAgICAgICAgIHRoaXMucG9pbnRzLFxuICAgICAgICAgICAgdGhpcy5taW5Qb2ludCxcbiAgICAgICAgICAgIHRoaXMubWF4UG9pbnQsXG4gICAgICAgICAgICBmYWxzZSxcbiAgICAgICAgICAgIFtdLFxuICAgICAgICAgICAgdGhpcy5vbkRyYWdcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKHRoaXMubG9nU3R5bGUpIHtcbiAgICAgICAgICAgIGNvbnN0IGNvbmZUcmFuc3BhcmVuY3kgPSAwLjM7XG4gICAgICAgICAgICBpbnB1dHMgPSBuZXcgQ29uZmlndXJhdGlvbkVsZW1lbnRJbnB1dChcbiAgICAgICAgICAgICAgICB0aGlzLnBvaW50cyxcbiAgICAgICAgICAgICAgICB0aGlzLm1pblBvaW50LFxuICAgICAgICAgICAgICAgIHRoaXMubWF4UG9pbnQsXG4gICAgICAgICAgICAgICAgdHJ1ZSxcbiAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiBUb29scy5nZXRUcmFuc3BhcmVuY3koQ2hhcnRTY2FsZUNvbG9yc1snMCddLCBjb25mVHJhbnNwYXJlbmN5KSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHlTdGFydDogTWF0aC5sb2cxMCgwLjEpLFxuICAgICAgICAgICAgICAgICAgICAgICAgeUVuZDogTWF0aC5sb2cxMCgwLjQpLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xvcjogVG9vbHMuZ2V0VHJhbnNwYXJlbmN5KENoYXJ0U2NhbGVDb2xvcnNbJzAuNCddLCBjb25mVHJhbnNwYXJlbmN5KSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHlTdGFydDogTWF0aC5sb2cxMCgwLjQpLFxuICAgICAgICAgICAgICAgICAgICAgICAgeUVuZDogTWF0aC5sb2cxMCgxKSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6IFRvb2xzLmdldFRyYW5zcGFyZW5jeShDaGFydFNjYWxlQ29sb3JzWycxJ10sIGNvbmZUcmFuc3BhcmVuY3kpLFxuICAgICAgICAgICAgICAgICAgICAgICAgeVN0YXJ0OiBNYXRoLmxvZzEwKDEpLFxuICAgICAgICAgICAgICAgICAgICAgICAgeUVuZDogTWF0aC5sb2cxMCgzKSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6IFRvb2xzLmdldFRyYW5zcGFyZW5jeShDaGFydFNjYWxlQ29sb3JzWyczJ10sIGNvbmZUcmFuc3BhcmVuY3kpLFxuICAgICAgICAgICAgICAgICAgICAgICAgeVN0YXJ0OiBNYXRoLmxvZzEwKDMpLFxuICAgICAgICAgICAgICAgICAgICAgICAgeUVuZDogTWF0aC5sb2cxMCgxMCksXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiBUb29scy5nZXRUcmFuc3BhcmVuY3koQ2hhcnRTY2FsZUNvbG9yc1snMTAnXSwgY29uZlRyYW5zcGFyZW5jeSksXG4gICAgICAgICAgICAgICAgICAgICAgICB5U3RhcnQ6IE1hdGgubG9nMTAoMTApLFxuICAgICAgICAgICAgICAgICAgICAgICAgeUVuZDogTWF0aC5sb2cxMCgyMCksXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiBUb29scy5nZXRUcmFuc3BhcmVuY3koQ2hhcnRTY2FsZUNvbG9yc1snMjAnXSwgY29uZlRyYW5zcGFyZW5jeSksXG4gICAgICAgICAgICAgICAgICAgICAgICB5U3RhcnQ6IE1hdGgubG9nMTAoMjApLFxuICAgICAgICAgICAgICAgICAgICAgICAgeUVuZDogTWF0aC5sb2cxMCgzMCksXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiBUb29scy5nZXRUcmFuc3BhcmVuY3koQ2hhcnRTY2FsZUNvbG9yc1snMzAnXSwgY29uZlRyYW5zcGFyZW5jeSksXG4gICAgICAgICAgICAgICAgICAgICAgICB5U3RhcnQ6IE1hdGgubG9nMTAoMzApLFxuICAgICAgICAgICAgICAgICAgICAgICAgeUVuZDogTWF0aC5sb2cxMCg1MCksXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiBUb29scy5nZXRUcmFuc3BhcmVuY3koQ2hhcnRTY2FsZUNvbG9yc1snNTAnXSwgY29uZlRyYW5zcGFyZW5jeSksXG4gICAgICAgICAgICAgICAgICAgICAgICB5U3RhcnQ6IE1hdGgubG9nMTAoNTApLFxuICAgICAgICAgICAgICAgICAgICAgICAgeUVuZDogTWF0aC5sb2cxMCgxMDApLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xvcjogVG9vbHMuZ2V0VHJhbnNwYXJlbmN5KENoYXJ0U2NhbGVDb2xvcnNbJzEwMCddLCBjb25mVHJhbnNwYXJlbmN5KSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHlTdGFydDogTWF0aC5sb2cxMCgxMDApLFxuICAgICAgICAgICAgICAgICAgICAgICAgeUVuZDogTWF0aC5sb2cxMCgxNTApLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xvcjogVG9vbHMuZ2V0VHJhbnNwYXJlbmN5KENoYXJ0U2NhbGVDb2xvcnNbJzE1MCddLCBjb25mVHJhbnNwYXJlbmN5KSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHlTdGFydDogTWF0aC5sb2cxMCgxNTApLFxuICAgICAgICAgICAgICAgICAgICAgICAgeUVuZDogTWF0aC5sb2cxMCgyMDApLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xvcjogVG9vbHMuZ2V0VHJhbnNwYXJlbmN5KENoYXJ0U2NhbGVDb2xvcnNbJzIwMCddLCBjb25mVHJhbnNwYXJlbmN5KSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHlTdGFydDogTWF0aC5sb2cxMCgyMDApLFxuICAgICAgICAgICAgICAgICAgICAgICAgeUVuZDogTWF0aC5sb2cxMCgyNTApLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xvcjogVG9vbHMuZ2V0VHJhbnNwYXJlbmN5KENoYXJ0U2NhbGVDb2xvcnNbJzI1MCddLCBjb25mVHJhbnNwYXJlbmN5KSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHlTdGFydDogTWF0aC5sb2cxMCgyNTApLFxuICAgICAgICAgICAgICAgICAgICAgICAgeUVuZDogTWF0aC5sb2cxMCgzMDApLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xvcjogVG9vbHMuZ2V0VHJhbnNwYXJlbmN5KENoYXJ0U2NhbGVDb2xvcnNbJzMwMCddLCBjb25mVHJhbnNwYXJlbmN5KSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHlTdGFydDogTWF0aC5sb2cxMCgzMDApLFxuICAgICAgICAgICAgICAgICAgICAgICAgeUVuZDogTWF0aC5sb2cxMCg1MDApLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgdGhpcy5vbkRyYWdcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLm5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBmYWN0b3J5ID0gbmV3IEVsZW1lbnRzRmFjdG9yeSgpO1xuICAgICAgICAgICAgICAgIHRoaXMuY29uZmlndXJhdGlvbkVsZW1lbnQgPSBmYWN0b3J5LmNyZWF0ZUNvbmZpZ3VyYXRpb24oXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2FudmFzRWxlbWVudC5uYXRpdmVFbGVtZW50LFxuICAgICAgICAgICAgICAgICAgICBpbnB1dHNcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSwgMTApO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIGRlbGV0ZSgpIHtcbiAgICAgICAgdGhpcy5jb25maWd1cmF0aW9uRWxlbWVudD8uY2hhcnQ/LmRlc3Ryb3koKTtcbiAgICAgICAgdGhpcy5jcmVhdGVkID0gZmFsc2U7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBjaGFuZ2UoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xuICAgICAgICAvLyBjb25zb2xlLmxvZygnY2hhbmdlZCcsIGNoYW5nZXMpO1xuICAgICAgICBhd2FpdCB0aGlzLmRlbGV0ZSgpO1xuICAgICAgICB0aGlzLmNyZWF0ZSgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgdXBkYXRlTWFwU2l6ZSgpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgbWFwRGl2V2lkdGggPSB0aGlzLmNhbnZhc0VsZW1lbnQubmF0aXZlRWxlbWVudC5wYXJlbnROb2RlPy5wYXJlbnROb2RlWydjbGllbnRXaWR0aCddO1xuICAgICAgICBjb25zdCBwYWRkaW5nID0gMjA7XG4gICAgICAgIGxldCBjdXJyZW50V2lkdGggPVxuICAgICAgICAgICAgbWFwRGl2V2lkdGggfHxcbiAgICAgICAgICAgIHdpbmRvdy5pbm5lcldpZHRoIHx8XG4gICAgICAgICAgICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGggfHxcbiAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuY2xpZW50V2lkdGg7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRIZWlnaHQgPVxuICAgICAgICAgICAgdGhpcy5jdXJyZW50SGVpZ2h0IHx8XG4gICAgICAgICAgICB3aW5kb3cuaW5uZXJIZWlnaHQgfHxcbiAgICAgICAgICAgIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQgfHxcbiAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuY2xpZW50SGVpZ2h0O1xuICAgICAgICBjdXJyZW50V2lkdGggLT0gcGFkZGluZztcbiAgICAgICAgdGhpcy5jdXJyZW50V2lkdGggPSBjdXJyZW50V2lkdGg7XG4gICAgICAgIHRoaXMuY3VycmVudEhlaWdodCA9IGN1cnJlbnRIZWlnaHQ7XG5cbiAgICAgICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMub25TaXplQ2hhbmdlZCgpO1xuICAgICAgICB9KTtcbiAgICB9XG59XG4iLCI8aW9uLWdyaWQ+XG4gIDxpb24tcm93PlxuICAgIDxpb24tY29sIGlkPVwiY29sLWNvbnRhaW5lclwiIHNpemUteHM9XCIxMFwiPlxuICAgICAgPGRpdiBbc3R5bGUuaGVpZ2h0LnB4XT1cImN1cnJlbnRIZWlnaHRcIiBpZD1cImNhbnZhcy1jb250YWluZXJcIj5cbiAgICAgICAgPGNhbnZhcyAjY2FudmFzRWxlbWVudD48L2NhbnZhcz5cbiAgICAgIDwvZGl2PlxuICAgIDwvaW9uLWNvbD5cbiAgICA8aW9uLWNvbCBzaXplLXhzPVwiMlwiPlxuICAgICAgPGlvbi1idXR0b24gKGNsaWNrKT1cInJlc2V0KDIpXCIgY29sb3I9XCJsaWdodFwiIHNoYXBlPVwicm91bmRcIiBzaXplPVwic21hbGxcIj4yPC9pb24tYnV0dG9uPlxuICAgICAgPGJyPlxuICAgICAgPGlvbi1idXR0b24gKGNsaWNrKT1cInJlc2V0KDQpXCIgY29sb3I9XCJsaWdodFwiIHNoYXBlPVwicm91bmRcIiBzaXplPVwic21hbGxcIj40PC9pb24tYnV0dG9uPlxuICAgICAgPGJyPlxuICAgICAgPGlvbi1idXR0b24gKGNsaWNrKT1cInJlc2V0KDYpXCIgY29sb3I9XCJsaWdodFwiIHNoYXBlPVwicm91bmRcIiBzaXplPVwic21hbGxcIj42PC9pb24tYnV0dG9uPlxuICAgICAgPGJyPlxuICAgIDwvaW9uLWNvbD5cbiAgPC9pb24tcm93PlxuPC9pb24tZ3JpZD5cbiJdfQ==
|
|
196
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmFhaW4tY29uZmlndXJhdGlvbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29yZS9zaGFyZWQvcmFhaW4tY29uZmlndXJhdGlvbi9yYWFpbi1jb25maWd1cmF0aW9uLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uL3NyYy9jb3JlL3NoYXJlZC9yYWFpbi1jb25maWd1cmF0aW9uL3JhYWluLWNvbmZpZ3VyYXRpb24uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVILFNBQVMsRUFFVCxZQUFZLEVBQ1osWUFBWSxFQUNaLEtBQUssRUFJTCxNQUFNLEVBRU4sU0FBUyxHQUNaLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFDSCxnQkFBZ0IsRUFFaEIseUJBQXlCLEVBQ3pCLGVBQWUsRUFDZixLQUFLLEdBQ1IsTUFBTSxVQUFVLENBQUM7QUFDbEIsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLFdBQVcsQ0FBQzs7O0FBT2pDLE1BQU0sT0FBTywyQkFBMkI7SUFrQ3BDLFlBQW9CLE1BQWM7UUFBZCxXQUFNLEdBQU4sTUFBTSxDQUFRO1FBN0IzQixrQkFBYSxHQUFHLElBQUksWUFBWSxFQUFZLENBQUM7UUFTN0MsYUFBUSxHQUFXLEVBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFDLENBQUM7UUFHaEMsYUFBUSxHQUFXLEVBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFDLENBQUM7UUFHcEMsYUFBUSxHQUFHLEtBQUssQ0FBQztRQUdqQixhQUFRLEdBQUcsS0FBSyxDQUFDO1FBU2hCLGdCQUFXLEdBQVEsSUFBSSxDQUFDO1FBRzVCLElBQUksQ0FBQyxhQUFhLEdBQUcsR0FBRyxFQUFFLEdBQUUsQ0FBQyxDQUFDO1FBQzlCLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFNLEVBQUUsRUFBRTtZQUNyQixJQUFJ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RGQsS0FBSztnQkFJQyxRQUFRO3NCQURkLEtBQUs7Z0JBSUMsUUFBUTtzQkFEZCxLQUFLO2dCQUlDLFFBQVE7c0JBRGQsS0FBSztnQkFJSSxhQUFhO3NCQUR0QixTQUFTO3VCQUFDLGVBQWU7Z0JBMENsQixRQUFRO3NCQURmLFlBQVk7dUJBQUMsZUFBZSxFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBBZnRlclZpZXdDaGVja2VkLFxuICAgIENvbXBvbmVudCxcbiAgICBFbGVtZW50UmVmLFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBIb3N0TGlzdGVuZXIsXG4gICAgSW5wdXQsXG4gICAgTmdab25lLFxuICAgIE9uQ2hhbmdlcyxcbiAgICBPbkRlc3Ryb3ksXG4gICAgT3V0cHV0LFxuICAgIFNpbXBsZUNoYW5nZXMsXG4gICAgVmlld0NoaWxkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gICAgQ2hhcnRTY2FsZUNvbG9ycyxcbiAgICBDb25maWd1cmF0aW9uRWxlbWVudCxcbiAgICBDb25maWd1cmF0aW9uRWxlbWVudElucHV0LFxuICAgIEVsZW1lbnRzRmFjdG9yeSxcbiAgICBUb29scyxcbn0gZnJvbSAncmFhaW4tdWknO1xuaW1wb3J0IHtYWVR5cGV9IGZyb20gJy4uL3h5dHlwZSc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAncmFhaW4tY29uZmlndXJhdGlvbicsXG4gICAgdGVtcGxhdGVVcmw6ICcuL3JhYWluLWNvbmZpZ3VyYXRpb24uY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL3JhYWluLWNvbmZpZ3VyYXRpb24uY29tcG9uZW50LnNjc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgUmFhaW5Db25maWd1cmF0aW9uQ29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3Q2hlY2tlZCwgT25EZXN0cm95LCBPbkNoYW5nZXMge1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHBvaW50czogWFlUeXBlW107XG5cbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgY2hhbmdlZFBvaW50cyA9IG5ldyBFdmVudEVtaXR0ZXI8WFlUeXBlW10+KCk7XG5cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBjdXJyZW50SGVpZ2h0OiBudW1iZXI7XG5cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBjdXJyZW50V2lkdGg6IG51bWJlcjtcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIG1pblBvaW50OiBYWVR5cGUgPSB7eDogMCwgeTogMH07XG5cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBtYXhQb2ludDogWFlUeXBlID0ge3g6IDMwMCwgeTogMTAwfTtcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGxvZ1N0eWxlID0gZmFsc2U7XG5cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyByZWFkb25seSA9IGZhbHNlO1xuXG4gICAgQFZpZXdDaGlsZCgnY2FudmFzRWxlbWVudCcpXG4gICAgcHJvdGVjdGVkIGNhbnZhc0VsZW1lbnQ6IEVsZW1lbnRSZWY7XG5cbiAgICBwcml2YXRlIGNvbmZpZ3VyYXRpb25FbGVtZW50OiBDb25maWd1cmF0aW9uRWxlbWVudDtcbiAgICBwcml2YXRlIG9uRHJhZztcbiAgICBwcml2YXRlIG9uU2l6ZUNoYW5nZWQ7XG4gICAgcHJpdmF0ZSBjcmVhdGVkO1xuICAgIHByaXZhdGUgY3JlYXRlVGltZXI6IGFueSA9IG51bGw7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIG5nWm9uZTogTmdab25lKSB7XG4gICAgICAgIHRoaXMub25TaXplQ2hhbmdlZCA9ICgpID0+IHt9O1xuICAgICAgICB0aGlzLm9uRHJhZyA9IChlOiBhbnkpID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLnJlYWRvbmx5KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5jaGFuZ2VkUG9pbnRzLmVtaXQodGhpcy5wb2ludHMpO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIHB1YmxpYyBuZ0FmdGVyVmlld0NoZWNrZWQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuY3JlYXRlKCk7XG4gICAgfVxuXG4gICAgcHVibGljIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jaGFuZ2UoY2hhbmdlcyk7XG4gICAgfVxuXG4gICAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmRlbGV0ZSgpO1xuICAgIH1cblxuICAgIGFzeW5jIHJlc2V0KGNvdW50ID0gNCkge1xuICAgICAgICBjb25zdCBwb2ludHMgPSBbXTtcbiAgICAgICAgZm9yIChsZXQgYyA9IDA7IGMgPCBjb3VudDsgYysrKSB7XG4gICAgICAgICAgICBwb2ludHMucHVzaChuZXcgWFlUeXBlKChjICsgMSkgKiAxMCwgKGMgKyAxKSAqIDAuMSkpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucG9pbnRzID0gcG9pbnRzO1xuICAgICAgICBhd2FpdCB0aGlzLmRlbGV0ZSgpO1xuICAgICAgICB0aGlzLmNyZWF0ZSgpO1xuICAgIH1cblxuICAgIEBIb3N0TGlzdGVuZXIoJ3dpbmRvdzpyZXNpemUnLCBbJyRldmVudCddKVxuICAgIHByaXZhdGUgb25SZXNpemUoZXZlbnQ6IGFueSk6IHZvaWQge1xuICAgICAgICAvLyB0aGlzLnVwZGF0ZU1hcFNpemUoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNyZWF0ZSgpIHtcbiAgICAgICAgaWYgKHRoaXMuY3JlYXRlZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY3JlYXRlZCA9IHRydWU7XG5cbiAgICAgICAgbGV0IGlucHV0cyA9IG5ldyBDb25maWd1cmF0aW9uRWxlbWVudElucHV0KFxuICAgICAgICAgICAgdGhpcy5wb2ludHMsXG4gICAgICAgICAgICB0aGlzLm1pblBvaW50LFxuICAgICAgICAgICAgdGhpcy5tYXhQb2ludCxcbiAgICAgICAgICAgIGZhbHNlLFxuICAgICAgICAgICAgW10sXG4gICAgICAgICAgICB0aGlzLm9uRHJhZyxcbiAgICAgICAgICAgIHRoaXMucmVhZG9ubHlcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKHRoaXMubG9nU3R5bGUpIHtcbiAgICAgICAgICAgIGNvbnN0IGNvbmZUcmFuc3BhcmVuY3kgPSAwLjM7XG4gICAgICAgICAgICBpbnB1dHMgPSBuZXcgQ29uZmlndXJhdGlvbkVsZW1lbnRJbnB1dChcbiAgICAgICAgICAgICAgICB0aGlzLnBvaW50cyxcbiAgICAgICAgICAgICAgICB0aGlzLm1pblBvaW50LFxuICAgICAgICAgICAgICAgIHRoaXMubWF4UG9pbnQsXG4gICAgICAgICAgICAgICAgdHJ1ZSxcbiAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiBUb29scy5nZXRUcmFuc3BhcmVuY3koQ2hhcnRTY2FsZUNvbG9yc1snMCddLCBjb25mVHJhbnNwYXJlbmN5KSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHlTdGFydDogTWF0aC5sb2cxMCgwLjEpLFxuICAgICAgICAgICAgICAgICAgICAgICAgeUVuZDogTWF0aC5sb2cxMCgwLjQpLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xvcjogVG9vbHMuZ2V0VHJhbnNwYXJlbmN5KENoYXJ0U2NhbGVDb2xvcnNbJzAuNCddLCBjb25mVHJhbnNwYXJlbmN5KSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHlTdGFydDogTWF0aC5sb2cxMCgwLjQpLFxuICAgICAgICAgICAgICAgICAgICAgICAgeUVuZDogTWF0aC5sb2cxMCgxKSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6IFRvb2xzLmdldFRyYW5zcGFyZW5jeShDaGFydFNjYWxlQ29sb3JzWycxJ10sIGNvbmZUcmFuc3BhcmVuY3kpLFxuICAgICAgICAgICAgICAgICAgICAgICAgeVN0YXJ0OiBNYXRoLmxvZzEwKDEpLFxuICAgICAgICAgICAgICAgICAgICAgICAgeUVuZDogTWF0aC5sb2cxMCgzKSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6IFRvb2xzLmdldFRyYW5zcGFyZW5jeShDaGFydFNjYWxlQ29sb3JzWyczJ10sIGNvbmZUcmFuc3BhcmVuY3kpLFxuICAgICAgICAgICAgICAgICAgICAgICAgeVN0YXJ0OiBNYXRoLmxvZzEwKDMpLFxuICAgICAgICAgICAgICAgICAgICAgICAgeUVuZDogTWF0aC5sb2cxMCgxMCksXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiBUb29scy5nZXRUcmFuc3BhcmVuY3koQ2hhcnRTY2FsZUNvbG9yc1snMTAnXSwgY29uZlRyYW5zcGFyZW5jeSksXG4gICAgICAgICAgICAgICAgICAgICAgICB5U3RhcnQ6IE1hdGgubG9nMTAoMTApLFxuICAgICAgICAgICAgICAgICAgICAgICAgeUVuZDogTWF0aC5sb2cxMCgyMCksXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiBUb29scy5nZXRUcmFuc3BhcmVuY3koQ2hhcnRTY2FsZUNvbG9yc1snMjAnXSwgY29uZlRyYW5zcGFyZW5jeSksXG4gICAgICAgICAgICAgICAgICAgICAgICB5U3RhcnQ6IE1hdGgubG9nMTAoMjApLFxuICAgICAgICAgICAgICAgICAgICAgICAgeUVuZDogTWF0aC5sb2cxMCgzMCksXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiBUb29scy5nZXRUcmFuc3BhcmVuY3koQ2hhcnRTY2FsZUNvbG9yc1snMzAnXSwgY29uZlRyYW5zcGFyZW5jeSksXG4gICAgICAgICAgICAgICAgICAgICAgICB5U3RhcnQ6IE1hdGgubG9nMTAoMzApLFxuICAgICAgICAgICAgICAgICAgICAgICAgeUVuZDogTWF0aC5sb2cxMCg1MCksXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiBUb29scy5nZXRUcmFuc3BhcmVuY3koQ2hhcnRTY2FsZUNvbG9yc1snNTAnXSwgY29uZlRyYW5zcGFyZW5jeSksXG4gICAgICAgICAgICAgICAgICAgICAgICB5U3RhcnQ6IE1hdGgubG9nMTAoNTApLFxuICAgICAgICAgICAgICAgICAgICAgICAgeUVuZDogTWF0aC5sb2cxMCgxMDApLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xvcjogVG9vbHMuZ2V0VHJhbnNwYXJlbmN5KENoYXJ0U2NhbGVDb2xvcnNbJzEwMCddLCBjb25mVHJhbnNwYXJlbmN5KSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHlTdGFydDogTWF0aC5sb2cxMCgxMDApLFxuICAgICAgICAgICAgICAgICAgICAgICAgeUVuZDogTWF0aC5sb2cxMCgxNTApLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xvcjogVG9vbHMuZ2V0VHJhbnNwYXJlbmN5KENoYXJ0U2NhbGVDb2xvcnNbJzE1MCddLCBjb25mVHJhbnNwYXJlbmN5KSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHlTdGFydDogTWF0aC5sb2cxMCgxNTApLFxuICAgICAgICAgICAgICAgICAgICAgICAgeUVuZDogTWF0aC5sb2cxMCgyMDApLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xvcjogVG9vbHMuZ2V0VHJhbnNwYXJlbmN5KENoYXJ0U2NhbGVDb2xvcnNbJzIwMCddLCBjb25mVHJhbnNwYXJlbmN5KSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHlTdGFydDogTWF0aC5sb2cxMCgyMDApLFxuICAgICAgICAgICAgICAgICAgICAgICAgeUVuZDogTWF0aC5sb2cxMCgyNTApLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xvcjogVG9vbHMuZ2V0VHJhbnNwYXJlbmN5KENoYXJ0U2NhbGVDb2xvcnNbJzI1MCddLCBjb25mVHJhbnNwYXJlbmN5KSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHlTdGFydDogTWF0aC5sb2cxMCgyNTApLFxuICAgICAgICAgICAgICAgICAgICAgICAgeUVuZDogTWF0aC5sb2cxMCgzMDApLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xvcjogVG9vbHMuZ2V0VHJhbnNwYXJlbmN5KENoYXJ0U2NhbGVDb2xvcnNbJzMwMCddLCBjb25mVHJhbnNwYXJlbmN5KSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHlTdGFydDogTWF0aC5sb2cxMCgzMDApLFxuICAgICAgICAgICAgICAgICAgICAgICAgeUVuZDogTWF0aC5sb2cxMCg1MDApLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgdGhpcy5vbkRyYWcsXG4gICAgICAgICAgICAgICAgdGhpcy5yZWFkb25seVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuY3JlYXRlVGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmNyZWF0ZVRpbWVyID0gbnVsbDtcbiAgICAgICAgICAgICAgICBjb25zdCBmYWN0b3J5ID0gbmV3IEVsZW1lbnRzRmFjdG9yeSgpO1xuICAgICAgICAgICAgICAgIHRoaXMuY29uZmlndXJhdGlvbkVsZW1lbnQgPSBmYWN0b3J5LmNyZWF0ZUNvbmZpZ3VyYXRpb24oXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2FudmFzRWxlbWVudC5uYXRpdmVFbGVtZW50LFxuICAgICAgICAgICAgICAgICAgICBpbnB1dHNcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSwgMTApO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIGRlbGV0ZSgpIHtcbiAgICAgICAgaWYgKHRoaXMuY3JlYXRlVGltZXIpIHtcbiAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aGlzLmNyZWF0ZVRpbWVyKTtcbiAgICAgICAgICAgIHRoaXMuY3JlYXRlVGltZXIgPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY29uZmlndXJhdGlvbkVsZW1lbnQ/LmNoYXJ0Py5kZXN0cm95KCk7XG4gICAgICAgIHRoaXMuY3JlYXRlZCA9IGZhbHNlO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgY2hhbmdlKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcbiAgICAgICAgLy8gRmFzdCBwYXRoOiB1cGRhdGUgY2hhcnQgZGF0YSBpbi1wbGFjZSB3aGVuIG9ubHkgcG9pbnRzIGNoYW5nZWRcbiAgICAgICAgaWYgKHRoaXMuY29uZmlndXJhdGlvbkVsZW1lbnQ/LmNoYXJ0ICYmIGNoYW5nZXMucG9pbnRzICYmIE9iamVjdC5rZXlzKGNoYW5nZXMpLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgY29uc3QgY2hhcnQgPSB0aGlzLmNvbmZpZ3VyYXRpb25FbGVtZW50LmNoYXJ0O1xuICAgICAgICAgICAgY2hhcnQuZGF0YS5kYXRhc2V0cy5mb3JFYWNoKChkczogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgZHMuZGF0YSA9IHRoaXMucG9pbnRzO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBjaGFydC51cGRhdGUoJ25vbmUnKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBhd2FpdCB0aGlzLmRlbGV0ZSgpO1xuICAgICAgICB0aGlzLmNyZWF0ZSgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgdXBkYXRlTWFwU2l6ZSgpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgbWFwRGl2V2lkdGggPSB0aGlzLmNhbnZhc0VsZW1lbnQubmF0aXZlRWxlbWVudC5wYXJlbnROb2RlPy5wYXJlbnROb2RlWydjbGllbnRXaWR0aCddO1xuICAgICAgICBjb25zdCBwYWRkaW5nID0gMjA7XG4gICAgICAgIGxldCBjdXJyZW50V2lkdGggPVxuICAgICAgICAgICAgbWFwRGl2V2lkdGggfHxcbiAgICAgICAgICAgIHdpbmRvdy5pbm5lcldpZHRoIHx8XG4gICAgICAgICAgICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGggfHxcbiAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuY2xpZW50V2lkdGg7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRIZWlnaHQgPVxuICAgICAgICAgICAgdGhpcy5jdXJyZW50SGVpZ2h0IHx8XG4gICAgICAgICAgICB3aW5kb3cuaW5uZXJIZWlnaHQgfHxcbiAgICAgICAgICAgIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQgfHxcbiAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuY2xpZW50SGVpZ2h0O1xuICAgICAgICBjdXJyZW50V2lkdGggLT0gcGFkZGluZztcbiAgICAgICAgdGhpcy5jdXJyZW50V2lkdGggPSBjdXJyZW50V2lkdGg7XG4gICAgICAgIHRoaXMuY3VycmVudEhlaWdodCA9IGN1cnJlbnRIZWlnaHQ7XG5cbiAgICAgICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMub25TaXplQ2hhbmdlZCgpO1xuICAgICAgICB9KTtcbiAgICB9XG59XG4iLCI8aW9uLWdyaWQ+XG4gIDxpb24tcm93PlxuICAgIDxpb24tY29sIGlkPVwiY29sLWNvbnRhaW5lclwiIHNpemUteHM9XCIxMFwiPlxuICAgICAgPGRpdiBbc3R5bGUuaGVpZ2h0LnB4XT1cImN1cnJlbnRIZWlnaHRcIiBpZD1cImNhbnZhcy1jb250YWluZXJcIj5cbiAgICAgICAgPGNhbnZhcyAjY2FudmFzRWxlbWVudD48L2NhbnZhcz5cbiAgICAgIDwvZGl2PlxuICAgIDwvaW9uLWNvbD5cbiAgICA8aW9uLWNvbCBzaXplLXhzPVwiMlwiPlxuICAgICAgPGlvbi1idXR0b24gKGNsaWNrKT1cInJlc2V0KDIpXCIgY29sb3I9XCJsaWdodFwiIHNoYXBlPVwicm91bmRcIiBzaXplPVwic21hbGxcIj4yPC9pb24tYnV0dG9uPlxuICAgICAgPGJyPlxuICAgICAgPGlvbi1idXR0b24gKGNsaWNrKT1cInJlc2V0KDQpXCIgY29sb3I9XCJsaWdodFwiIHNoYXBlPVwicm91bmRcIiBzaXplPVwic21hbGxcIj40PC9pb24tYnV0dG9uPlxuICAgICAgPGJyPlxuICAgICAgPGlvbi1idXR0b24gKGNsaWNrKT1cInJlc2V0KDYpXCIgY29sb3I9XCJsaWdodFwiIHNoYXBlPVwicm91bmRcIiBzaXplPVwic21hbGxcIj42PC9pb24tYnV0dG9uPlxuICAgICAgPGJyPlxuICAgIDwvaW9uLWNvbD5cbiAgPC9pb24tcm93PlxuPC9pb24tZ3JpZD5cbiJdfQ==
|
|
@@ -18,7 +18,7 @@ export class CompareManager {
|
|
|
18
18
|
if (!this.buildCompares?.compareCumulative) {
|
|
19
19
|
return new XYType(0, 0);
|
|
20
20
|
}
|
|
21
|
-
const maxValue = this.buildCompares.compareCumulative.maxValue * 1.2;
|
|
21
|
+
const maxValue = Math.max(this.buildCompares.compareCumulative.maxValue * 1.2, 1);
|
|
22
22
|
return new XYType(maxValue, maxValue);
|
|
23
23
|
}
|
|
24
24
|
// Default: KGE normalized 0-1 (from raain-model defaults)
|
|
@@ -77,7 +77,7 @@ export class CompareManager {
|
|
|
77
77
|
date: c.date,
|
|
78
78
|
name: c.name,
|
|
79
79
|
comparePoints: c.qualityPoints.map((p) => new XYType(p.getGaugeValue(), p.getRainValue(), 2, p.gaugeLabel, p.gaugeId)),
|
|
80
|
-
comparePointsMax: new XYType(c.maxValue * 1.2, c.maxValue * 1.2),
|
|
80
|
+
comparePointsMax: new XYType(Math.max(c.maxValue * 1.2, 1), Math.max(c.maxValue * 1.2, 1)),
|
|
81
81
|
comparePointsHistory: c.qualityPointsLegacy,
|
|
82
82
|
remarks: c.remarks,
|
|
83
83
|
qualityIndicator,
|
|
@@ -103,7 +103,7 @@ export class CompareManager {
|
|
|
103
103
|
return;
|
|
104
104
|
}
|
|
105
105
|
const countForAverage = targetsOrdered.length;
|
|
106
|
-
const maxValue = this.buildCompares.compareCumulative.maxValue * 1.2;
|
|
106
|
+
const maxValue = Math.max(this.buildCompares.compareCumulative.maxValue * 1.2, 1);
|
|
107
107
|
const cumulativePoints = this.buildCompares.compareCumulative.qualityPoints.map((qp) => new XYType(qp.getGaugeValue(), qp.getRainValue(), 2, qp.gaugeLabel, qp.gaugeId));
|
|
108
108
|
const cumulativePointsMax = new XYType(maxValue, maxValue);
|
|
109
109
|
// Default: KGE normalized 0-1
|
|
@@ -364,4 +364,4 @@ export class CompareManager {
|
|
|
364
364
|
this.selectGaugeInCompare();
|
|
365
365
|
}
|
|
366
366
|
}
|
|
367
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29tcGFyZU1hbmFnZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29yZS9zaGFyZWQvdG9vbHMvQ29tcGFyZU1hbmFnZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLFVBQVUsQ0FBQztBQUNuQyxPQUFPLEVBQ0gsU0FBUyxFQU9ULFdBQVcsRUFDWCxvQkFBb0IsR0FDdkIsTUFBTSxhQUFhLENBQUM7QUFDckIsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLFdBQVcsQ0FBQztBQW9CakMsTUFBTSxPQUFPLGNBQWM7SUE2QnZCLFlBQ2MsY0FBOEIsRUFDakMsWUFBd0IsR0FBRyxFQUFFLEdBQUUsQ0FBQztRQUQ3QixtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFDakMsY0FBUyxHQUFULFNBQVMsQ0FBdUI7UUFFdkMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ3BCLENBQUM7SUFFRCw0RUFBNEU7SUFDNUUsSUFBVyx3QkFBd0I7UUFDL0IsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsaUJBQWlCLEVBQUUsYUFBYSxFQUFFLE1BQU0sRUFBRTtZQUMvRCxPQUFPLEVBQUUsQ0FBQztTQUNiO1FBQ0QsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLGlCQUFpQixDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQ3pELENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxFQUFFLENBQUMsYUFBYSxFQUFFLEVBQUUsRUFBRSxDQUFDLFlBQVksRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FDMUYsQ0FBQztJQUNOLENBQUM7SUFFRCxJQUFXLDJCQUEyQjtRQUNsQyxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxpQkFBaUIsRUFBRTtZQUN4QyxPQUFPLElBQUksTUFBTSxDQUFDLENBQUMs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QkFDWDtZQUNMLENBQUMsQ0FBQyxDQUFDO1lBQ0gsT0FBTyxDQUFDLGFBQWEsR0FBRyxhQUFhLENBQUM7U0FDekM7SUFDTCxDQUFDO0lBRVMsbUJBQW1CO1FBQ3pCLDRDQUE0QztRQUM1QyxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQztRQUMxQixJQUFJLENBQUMscUJBQXFCLEdBQUcsSUFBSSxDQUFDO1FBQ2xDLElBQUksQ0FBQyxjQUFjLEdBQUcsRUFBRSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxjQUFjLEdBQUcsRUFBRSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxlQUFlLEdBQUcsRUFBRSxDQUFDO1FBQzFCLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO0lBQ2hDLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7TWFwTGF0TG5nfSBmcm9tICdyYWFpbi11aSc7XG5pbXBvcnQge1xuICAgIEdhdWdlTm9kZSxcbiAgICBJQ29tcGFyZVBlckRhdGUsXG4gICAgSUNvbXBhcmVzLFxuICAgIFBvc2l0aW9uVmFsdWUsXG4gICAgUXVhbGl0eVBvaW50LFxuICAgIFJhaW5Db21wdXRhdGlvblF1YWxpdHksXG4gICAgUmFpbk5vZGUsXG4gICAgU3BlZWRNYXRyaXgsXG4gICAgU3BlZWRNYXRyaXhDb250YWluZXIsXG59IGZyb20gJ3JhYWluLW1vZGVsJztcbmltcG9ydCB7WFlUeXBlfSBmcm9tICcuLi94eXR5cGUnO1xuaW1wb3J0IHtQcm9maWxlU2VydmljZX0gZnJvbSAnLi4vcHJvZmlsZS5zZXJ2aWNlJztcbmltcG9ydCB7RnJhbWVTZXR9IGZyb20gJy4vRnJhbWVTZXQnO1xuXG5leHBvcnQgaW50ZXJmYWNlIElDb21wYXJlVGFyZ2V0IHtcbiAgICBkYXRlOiBEYXRlO1xuICAgIHJhaW5Db21wdXRhdGlvbklkPzogc3RyaW5nO1xuICAgIHJhaW5Db21wdXRhdGlvbkN1bXVsYXRpdmVJZD86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJVUlDb21wYXJlIHtcbiAgICBkYXRlOiBEYXRlO1xuICAgIG5hbWU6IHN0cmluZztcbiAgICBjb21wYXJlUG9pbnRzOiBYWVR5cGVbXTtcbiAgICBjb21wYXJlUG9pbnRzTWF4OiBYWVR5cGU7XG4gICAgY29tcGFyZVBvaW50c0hpc3Rvcnk6IFF1YWxpdHlQb2ludFtdO1xuICAgIHJlbWFya3M6IHN0cmluZztcbiAgICBxdWFsaXR5SW5kaWNhdG9yOiBudW1iZXI7XG59XG5cbmV4cG9ydCBjbGFzcyBDb21wYXJlTWFuYWdlciB7XG4gICAgcHVibGljIGdhdWdlc0luTWFwOiBNYXBMYXRMbmdbXTtcbiAgICBwdWJsaWMgZ2F1Z2VzSW5Db21wYXJlOiBNYXBMYXRMbmdbXTtcbiAgICBwdWJsaWMgc2VsZWN0ZWRHYXVnZXM6IE1hcExhdExuZ1tdO1xuICAgIHB1YmxpYyBzZWxlY3RlZFBpeGVsczogTWFwTGF0TG5nW107XG4gICAgcHVibGljIHBpeGVsc1NvbHV0aW9uczogTWFwTGF0TG5nW11bXTtcbiAgICBwdWJsaWMgc3BlZWRzOiBNYXBMYXRMbmdbXTtcblxuICAgIC8vIGZyb20gY29tcGFyZXNUaW1lbGluZVxuICAgIHB1YmxpYyBjb21wYXJlTmFtZXM6IHN0cmluZ1tdO1xuICAgIHB1YmxpYyB1aUNvbXBhcmVzOiBJVUlDb21wYXJlW107XG4gICAgcHVibGljIGNvbXBhcmVTcGVlZE1hdHJpeDogUG9zaXRpb25WYWx1ZVtdO1xuICAgIHB1YmxpYyBjb21wYXJlVmVyc2lvbjogc3RyaW5nO1xuICAgIHB1YmxpYyBjb21wYXJlVHJ1c3RlZEluZGljYXRvcjogbnVtYmVyO1xuICAgIHB1YmxpYyBjb21wYXJlRGF0ZXM6IERhdGVbXTtcblxuICAgIHB1YmxpYyBjdXJyZW50UXVhbGl0eURvbmVEYXRlOiBEYXRlO1xuICAgIHB1YmxpYyBjdXJyZW50UXVhbGl0eUxhdW5jaGVkQnk6IHN0cmluZztcbiAgICBwdWJsaWMgY3VycmVudFF1YWxpdHlUaW1lU3BlbnRJbk1zOiBudW1iZXI7XG4gICAgcHVibGljIGdsb2JhbENvbXBhcmVQb2ludHM6IFhZVHlwZVtdO1xuICAgIHB1YmxpYyBnbG9iYWxDb21wYXJlUG9pbnRzTWF4OiBYWVR5cGU7XG4gICAgcHVibGljIGdsb2JhbFF1YWxpdHlJbmRpY2F0b3I6IG51bWJlcjtcbiAgICBwdWJsaWMgY29tcGFyZVNwZWVkOiB7YW5nbGVJbkRlZ3JlZXM6IG51bWJlcjsgcGl4ZWxzUGVyUGVyaW9kOiBudW1iZXJ9O1xuICAgIHByb3RlY3RlZCBidWlsZENvbXBhcmVzOiBJQ29tcGFyZXM7XG4gICAgcHJvdGVjdGVkIHNlbGVjdGVkR2F1Z2U6IFF1YWxpdHlQb2ludDtcbiAgICBwcm90ZWN0ZWQgc2VsZWN0ZWRHYXVnZUluUG9pbnRzOiBRdWFsaXR5UG9pbnQ7XG4gICAgcHJvdGVjdGVkIHNlbGVjdGVkR2F1Z2VJblBvaW50c0RldGFpbDogc3RyaW5nO1xuICAgIHByb3RlY3RlZCByYWluQ29tcHV0YXRpb25RdWFsaXRpZXNQZXJEYXRlOiBhbnk7XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJvdGVjdGVkIHByb2ZpbGVTZXJ2aWNlOiBQcm9maWxlU2VydmljZSxcbiAgICAgICAgcHVibGljIG9uQ2hhbmdlczogKCkgPT4gdm9pZCA9ICgpID0+IHt9XG4gICAgKSB7XG4gICAgICAgIHRoaXMuY2xlYW5BbGwoKTtcbiAgICB9XG5cbiAgICAvLyBNZXJnZWQgY3VtdWxhdGl2ZSBmcm9tIGdyYW51bGFyIGNvbXBhcmlzb25zIChjb21wdXRlZCBmcm9tIGJ1aWxkQ29tcGFyZXMpXG4gICAgcHVibGljIGdldCBncmFudWxhckN1bXVsYXRpdmVQb2ludHMoKTogWFlUeXBlW10ge1xuICAgICAgICBpZiAoIXRoaXMuYnVpbGRDb21wYXJlcz8uY29tcGFyZUN1bXVsYXRpdmU/LnF1YWxpdHlQb2ludHM/Lmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmJ1aWxkQ29tcGFyZXMuY29tcGFyZUN1bXVsYXRpdmUucXVhbGl0eVBvaW50cy5tYXAoXG4gICAgICAgICAgICAocXApID0+IG5ldyBYWVR5cGUocXAuZ2V0R2F1Z2VWYWx1ZSgpLCBxcC5nZXRSYWluVmFsdWUoKSwgMiwgcXAuZ2F1Z2VMYWJlbCwgcXAuZ2F1Z2VJZClcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGdyYW51bGFyQ3VtdWxhdGl2ZVBvaW50c01heCgpOiBYWVR5cGUge1xuICAgICAgICBpZiAoIXRoaXMuYnVpbGRDb21wYXJlcz8uY29tcGFyZUN1bXVsYXRpdmUpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgWFlUeXBlKDAsIDApO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG1heFZhbHVlID0gdGhpcy5idWlsZENvbXBhcmVzLmNvbXBhcmVDdW11bGF0aXZlLm1heFZhbHVlICogMS4yO1xuICAgICAgICByZXR1cm4gbmV3IFhZVHlwZShtYXhWYWx1ZSwgbWF4VmFsdWUpO1xuICAgIH1cblxuICAgIC8vIERlZmF1bHQ6IEtHRSBub3JtYWxpemVkIDAtMSAoZnJvbSByYWFpbi1tb2RlbCBkZWZhdWx0cylcbiAgICBwdWJsaWMgZ2V0IGdyYW51bGFyQ3VtdWxhdGl2ZVF1YWxpdHlJbmRpY2F0b3IoKTogbnVtYmVyIHtcbiAgICAgICAgaWYgKCF0aGlzLmJ1aWxkQ29tcGFyZXM/LmNvbXBhcmVDdW11bGF0aXZlPy5xdWFsaXR5UG9pbnRzPy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBTcGVlZE1hdHJpeC5Db21wdXRlUXVhbGl0eUluZGljYXRvcihcbiAgICAgICAgICAgIHRoaXMuYnVpbGRDb21wYXJlcy5jb21wYXJlQ3VtdWxhdGl2ZS5xdWFsaXR5UG9pbnRzXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIF9yYWluTm9kZTogUmFpbk5vZGU7XG5cbiAgICBwdWJsaWMgZ2V0IHJhaW5Ob2RlKCk6IFJhaW5Ob2RlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3JhaW5Ob2RlO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXQgcmFpbk5vZGUocmFpbk5vZGU6IFJhaW5Ob2RlKSB7XG4gICAgICAgIHRoaXMuX3JhaW5Ob2RlID0gcmFpbk5vZGU7XG4gICAgICAgIHRoaXMuY2xlYW5BbGwoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgY2xlYW5BbGwoKSB7XG4gICAgICAgIHRoaXMuZ2F1Z2VzSW5NYXAgPSBbXTtcbiAgICAgICAgdGhpcy5nYXVnZXNJbkNvbXBhcmUgPSBbXTtcbiAgICAgICAgdGhpcy5zZWxlY3RlZEdhdWdlcyA9IFtdO1xuICAgICAgICB0aGlzLnNlbGVjdGVkUGl4ZWxzID0gW107XG4gICAgICAgIHRoaXMucGl4ZWxzU29sdXRpb25zID0gW107XG4gICAgICAgIHRoaXMuY29tcGFyZURhdGVzID0gW107XG4gICAgICAgIHRoaXMuc3BlZWRzID0gW107XG5cbiAgICAgICAgdGhpcy5idWlsZENvbXBhcmVzID0ge1xuICAgICAgICAgICAgY29tcGFyZXNQZXJEYXRlOiBbXSxcbiAgICAgICAgICAgIGNvbXBhcmVDdW11bGF0aXZlOiBudWxsLFxuICAgICAgICB9O1xuICAgICAgICB0aGlzLmdsb2JhbENvbXBhcmVQb2ludHMgPSBbXTtcbiAgICAgICAgdGhpcy5nbG9iYWxDb21wYXJlUG9pbnRzTWF4ID0gbmV3IFhZVHlwZSgwLCAwKTtcbiAgICAgICAgdGhpcy5nbG9iYWxRdWFsaXR5SW5kaWNhdG9yID0gbnVsbDtcbiAgICAgICAgLy8gZ3JhbnVsYXJDdW11bGF0aXZlKiBhcmUgbm93IGdldHRlcnMgY29tcHV0ZWQgZnJvbSBidWlsZENvbXBhcmVzXG4gICAgICAgIHRoaXMucmFpbkNvbXB1dGF0aW9uUXVhbGl0aWVzUGVyRGF0ZSA9IHt9O1xuXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRHYXVnZSA9IG51bGw7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRHYXVnZUluUG9pbnRzID0gbnVsbDtcbiAgICAgICAgdGhpcy5jbGVhbkNvbXBhcmVRdWFsaXR5KCdubyBjb21wYXJlIHlldCcpO1xuICAgIH1cblxuICAgIGFzeW5jIHJlZnJlc2hDb21wYXJlUXVhbGl0eShmcmFtZVNldDogRnJhbWVTZXQsIG9ubHlPbmU6IGJvb2xlYW4pIHtcbiAgICAgICAgY29uc3QgY29tcGFyZVBlckRhdGUgPSB0aGlzLmdldENvbXBhcmVQZXJEYXRlKGZyYW1lU2V0LmRhdGUpO1xuXG4gICAgICAgIGlmIChcbiAgICAgICAgICAgICFjb21wYXJlUGVyRGF0ZSB8fFxuICAgICAgICAgICAgIWNvbXBhcmVQZXJEYXRlLnJhaW5Db21wdXRhdGlvblF1YWxpdHk/LnF1YWxpdHlTcGVlZE1hdHJpeENvbnRhaW5lclxuICAgICAgICApIHtcbiAgICAgICAgICAgIC8vIHRoaXMuY2xlYW5Db21wYXJlUXVhbGl0eShcbiAgICAgICAgICAgIC8vICAgICAnbm8gY3VycmVudCBxdWFsaXR5ICcgKyBPYmplY3Qua2V5cyh0aGlzLnJhaW5Db21wdXRhdGlvblF1YWxpdGllc1BlckRhdGUpXG4gICAgICAgICAgICAvLyApO1xuICAgICAgICAgICAgLy8gdGhpcy5vbkNoYW5nZXMoKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChvbmx5T25lKSB7XG4gICAgICAgICAgICBjb21wYXJlUGVyRGF0ZS5jb21wYXJlVGltZWxpbmUgPSBjb21wYXJlUGVyRGF0ZS5jb21wYXJlVGltZWxpbmUuZmlsdGVyKFxuICAgICAgICAgICAgICAgIChjKSA9PiBjLmRhdGUuZ2V0VGltZSgpID09PSBmcmFtZVNldC5kYXRlLmdldFRpbWUoKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHVpQ29tcGFyZXM6IElVSUNvbXBhcmVbXSA9IGNvbXBhcmVQZXJEYXRlLmNvbXBhcmVUaW1lbGluZVxuICAgICAgICAgICAgLm1hcCgoYykgPT4ge1xuICAgICAgICAgICAgICAgIC8vIERlZmF1bHQ6IEtHRSBub3JtYWxpemVkIDAtMVxuICAgICAgICAgICAgICAgIGNvbnN0IHF1YWxpdHlJbmRpY2F0b3IgPSBTcGVlZE1hdHJpeC5Db21wdXRlUXVhbGl0eUluZGljYXRvcihjLnF1YWxpdHlQb2ludHMpO1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGU6IGMuZGF0ZSxcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogYy5uYW1lLFxuICAgICAgICAgICAgICAgICAgICBjb21wYXJlUG9pbnRzOiBjLnF1YWxpdHlQb2ludHMubWFwKFxuICAgICAgICAgICAgICAgICAgICAgICAgKHApID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IFhZVHlwZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcC5nZXRHYXVnZVZhbHVlKCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHAuZ2V0UmFpblZhbHVlKCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHAuZ2F1Z2VMYWJlbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcC5nYXVnZUlkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICBjb21wYXJlUG9pbnRzTWF4OiBuZXcgWFlUeXBlKGMubWF4VmFsdWUgKiAxLjIsIGMubWF4VmFsdWUgKiAxLjIpLFxuICAgICAgICAgICAgICAgICAgICBjb21wYXJlUG9pbnRzSGlzdG9yeTogYy5xdWFsaXR5UG9pbnRzTGVnYWN5LFxuICAgICAgICAgICAgICAgICAgICByZW1hcmtzOiBjLnJlbWFya3MsXG4gICAgICAgICAgICAgICAgICAgIHF1YWxpdHlJbmRpY2F0b3IsXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuc29ydCgoYSwgYikgPT4gYS5kYXRlPy5nZXRUaW1lKCkgLSBiLmRhdGU/LmdldFRpbWUoKSk7XG5cbiAgICAgICAgdGhpcy5jdXJyZW50UXVhbGl0eURvbmVEYXRlID0gY29tcGFyZVBlckRhdGUucmFpbkNvbXB1dGF0aW9uUXVhbGl0eS5pc0RvbmVEYXRlO1xuICAgICAgICB0aGlzLmN1cnJlbnRRdWFsaXR5VGltZVNwZW50SW5NcyA9IGNvbXBhcmVQZXJEYXRlLnJhaW5Db21wdXRhdGlvblF1YWxpdHkudGltZVNwZW50SW5NcztcbiAgICAgICAgdGhpcy5jdXJyZW50UXVhbGl0eUxhdW5jaGVkQnkgPSBjb21wYXJlUGVyRGF0ZS5yYWluQ29tcHV0YXRpb25RdWFsaXR5LmxhdW5jaGVkQnk7XG4gICAgICAgIHRoaXMuY29tcGFyZVZlcnNpb24gPSBjb21wYXJlUGVyRGF0ZS5yYWluQ29tcHV0YXRpb25RdWFsaXR5LmdldFZlcnNpb24oKTtcblxuICAgICAgICB0aGlzLmNvbXBhcmVTcGVlZCA9XG4gICAgICAgICAgICBjb21wYXJlUGVyRGF0ZS5yYWluQ29tcHV0YXRpb25RdWFsaXR5LnF1YWxpdHlTcGVlZE1hdHJpeENvbnRhaW5lci5nZXRTcGVlZCgpO1xuICAgICAgICB0aGlzLmNvbXBhcmVOYW1lcyA9IHVpQ29tcGFyZXMubWFwKChjKSA9PiBjLm5hbWUpO1xuICAgICAgICB0aGlzLnVpQ29tcGFyZXMgPSB1aUNvbXBhcmVzO1xuXG4gICAgICAgIHRoaXMub25DaGFuZ2VzKCk7XG4gICAgfVxuXG4gICAgYXN5bmMgcmVmcmVzaEdsb2JhbENvbXBhcmVRdWFsaXR5KFxuICAgICAgICB0YXJnZXRzT3JkZXJlZDogSUNvbXBhcmVUYXJnZXRbXSxcbiAgICAgICAgcGVyaW9kOiB7YmVnaW46IERhdGU7IGVuZDogRGF0ZX0sXG4gICAgICAgIHdpdGhDb21wYXJlRHVwbGljYXRlOiBib29sZWFuLFxuICAgICAgICBwcm92aWRlcjogc3RyaW5nID0gJ1JhYWluJyxcbiAgICAgICAgdGltZVN0ZXBJbk1pbnV0ZXM6IG51bWJlciA9IDUsXG4gICAgICAgIHRpbWVTdGVwTW9kZTogJ2VxJyB8ICdsdGUnID0gJ2VxJ1xuICAgICkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5mZXRjaFJhaW5Db21wdXRhdGlvblF1YWxpdGllcyhcbiAgICAgICAgICAgICAgICB0YXJnZXRzT3JkZXJlZCxcbiAgICAgICAgICAgICAgICBwcm92aWRlcixcbiAgICAgICAgICAgICAgICB0aW1lU3RlcEluTWludXRlcyxcbiAgICAgICAgICAgICAgICB0aW1lU3RlcE1vZGVcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIGF3YWl0IHRoaXMuYnVpbGRDb21wYXJlc1RpbWVsaW5lKHRhcmdldHNPcmRlcmVkLCBwZXJpb2QsIHdpdGhDb21wYXJlRHVwbGljYXRlKTtcblxuICAgICAgICAgICAgaWYgKCF0aGlzLmJ1aWxkQ29tcGFyZXMuY29tcGFyZUN1bXVsYXRpdmUpIHtcbiAgICAgICAgICAgICAgICAvLyB0aHJvdyBFcnJvcignbmVlZHMgY3VtdWxhdGl2ZSBjb21wYXJlJyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBjb3VudEZvckF2ZXJhZ2UgPSB0YXJnZXRzT3JkZXJlZC5sZW5ndGg7XG4gICAgICAgICAgICBjb25zdCBtYXhWYWx1ZSA9IHRoaXMuYnVpbGRDb21wYXJlcy5jb21wYXJlQ3VtdWxhdGl2ZS5tYXhWYWx1ZSAqIDEuMjtcbiAgICAgICAgICAgIGNvbnN0IGN1bXVsYXRpdmVQb2ludHMgPSB0aGlzLmJ1aWxkQ29tcGFyZXMuY29tcGFyZUN1bXVsYXRpdmUucXVhbGl0eVBvaW50cy5tYXAoXG4gICAgICAgICAgICAgICAgKHFwKSA9PlxuICAgICAgICAgICAgICAgICAgICBuZXcgWFlUeXBlKHFwLmdldEdhdWdlVmFsdWUoKSwgcXAuZ2V0UmFpblZhbHVlKCksIDIsIHFwLmdhdWdlTGFiZWwsIHFwLmdhdWdlSWQpXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgY29uc3QgY3VtdWxhdGl2ZVBvaW50c01heCA9IG5ldyBYWVR5cGUobWF4VmFsdWUsIG1heFZhbHVlKTtcbiAgICAgICAgICAgIC8vIERlZmF1bHQ6IEtHRSBub3JtYWxpemVkIDAtMVxuICAgICAgICAgICAgY29uc3QgY3VtdWxhdGl2ZVF1YWxpdHlJbmRpY2F0b3IgPSBTcGVlZE1hdHJpeC5Db21wdXRlUXVhbGl0eUluZGljYXRvcihcbiAgICAgICAgICAgICAgICB0aGlzLmJ1aWxkQ29tcGFyZXMuY29tcGFyZUN1bXVsYXRpdmUucXVhbGl0eVBvaW50c1xuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgLy8gU2V0IGZvciBjdW11bGF0aXZlIG1vZGVcbiAgICAgICAgICAgIHRoaXMuZ2xvYmFsQ29tcGFyZVBvaW50cyA9IGN1bXVsYXRpdmVQb2ludHM7XG4gICAgICAgICAgICB0aGlzLmdsb2JhbENvbXBhcmVQb2ludHNNYXggPSBjdW11bGF0aXZlUG9pbnRzTWF4O1xuICAgICAgICAgICAgdGhpcy5nbG9iYWxRdWFsaXR5SW5kaWNhdG9yID0gY3VtdWxhdGl2ZVF1YWxpdHlJbmRpY2F0b3I7XG4gICAgICAgICAgICAvLyBncmFudWxhckN1bXVsYXRpdmUqIGFyZSBub3cgZ2V0dGVycyBjb21wdXRlZCBmcm9tIGJ1aWxkQ29tcGFyZXMuY29tcGFyZUN1bXVsYXRpdmVcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKGUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgYXN5bmMgc2V0R2F1Z2VzSW5NYXAoKSB7XG4gICAgICAgIC8vIEdldCBhbGwgZ2F1Z2UgSURzIGxpbmtlZCB0byB0aGlzIHJhaW5Ob2RlXG4gICAgICAgIGNvbnN0IHJhaW5Ob2RlR2F1Z2VJZHMgPSB0aGlzLnJhaW5Ob2RlLmdldExpbmtzKEdhdWdlTm9kZS5UWVBFKS5tYXAoKGwpID0+IGwuZ2V0SWQoKSk7XG5cbiAgICAgICAgLy8gRmV0Y2ggZ2F1Z2VzIGZyb20gQVBJIChtYXkgYmUgZmlsdGVyZWQvbGltaXRlZClcbiAgICAgICAgbGV0IGdhdWdlc1RvRmlsdGVyID0gYXdhaXQgdGhpcy5wcm9maWxlU2VydmljZS5nZXRHYXVnZXMoXG4gICAgICAgICAgICB0aGlzLnJhaW5Ob2RlPy5pZCxcbiAgICAgICAgICAgIHRoaXMucmFpbk5vZGUuZ2V0Q2VudGVyKClcbiAgICAgICAgKTtcbiAgICAgICAgZ2F1Z2VzVG9GaWx0ZXIgPSBnYXVnZXNUb0ZpbHRlclxuICAgICAgICAgICAgLnNvcnQoKGEsIGIpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICBhLmFwcHJveERpc3RhbmNlRnJvbSh0aGlzLnJhaW5Ob2RlLmdldENlbnRlcigpKSAtXG4gICAgICAgICAgICAgICAgICAgIGIuYXBwcm94RGlzdGFuY2VGcm9tKHRoaXMucmFpbk5vZGUuZ2V0Q2VudGVyKCkpXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuZmlsdGVyKCh2LCBpbmRleCkgPT4gaW5kZXggPCAyMDApO1xuXG4gICAgICAgIC8vIEJ1aWxkIGEgbWFwIG9mIGdhdWdlcyBmcm9tIEFQSSByZXNwb25zZVxuICAgICAgICBjb25zdCBnYXVnZXNGcm9tQXBpID0gbmV3IE1hcDxcbiAgICAgICAgICAgIHN0cmluZyxcbiAgICAgICAgICAgIHtpZDogc3RyaW5nOyBsYXRpdHVkZTogbnVtYmVyOyBsb25naXR1ZGU6IG51bWJlcjsgbmFtZTogc3RyaW5nfVxuICAgICAgICA+KCk7XG4gICAgICAgIGZvciAoY29uc3QgZ2F1Z2Ugb2YgZ2F1Z2VzVG9GaWx0ZXIpIHtcbiAgICAgICAgICAgIGdhdWdlc0Zyb21BcGkuc2V0KGdhdWdlLmlkLCBnYXVnZSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBGZXRjaCBtaXNzaW5nIGdhdWdlcyBpbmRpdmlkdWFsbHkgKHRob3NlIGxpbmtlZCBidXQgbm90IGluIEFQSSByZXNwb25zZSlcbiAgICAgICAgY29uc3QgbWlzc2luZ0dhdWdlSWRzID0gcmFpbk5vZGVHYXVnZUlkcy5maWx0ZXIoKGlkKSA9PiAhZ2F1Z2VzRnJvbUFwaS5oYXMoaWQpKTtcbiAgICAgICAgZm9yIChjb25zdCBnYXVnZUlkIG9mIG1pc3NpbmdHYXVnZUlkcykge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBjb25zdCBnYXVnZSA9IGF3YWl0IHRoaXMucHJvZmlsZVNlcnZpY2UuZ2V0R2F1Z2UoZ2F1Z2VJZCk7XG4gICAgICAgICAgICAgICAgaWYgKGdhdWdlKSB7XG4gICAgICAgICAgICAgICAgICAgIGdhdWdlc0Zyb21BcGkuc2V0KGdhdWdlLmlkLCBnYXVnZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybihgRmFpbGVkIHRvIGZldGNoIGdhdWdlICR7Z2F1Z2VJZH06YCwgZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBGaWx0ZXIgdG8gb25seSBnYXVnZXMgbGlua2VkIHRvIHRoaXMgcmFpbk5vZGVcbiAgICAgICAgY29uc3QgdmlzaWJsZUdhdWdlcyA9IHJhaW5Ob2RlR2F1Z2VJZHNcbiAgICAgICAgICAgIC5tYXAoKGlkKSA9PiBnYXVnZXNGcm9tQXBpLmdldChpZCkpXG4gICAgICAgICAgICAuZmlsdGVyKChnKSA9PiAhIWcpO1xuICAgICAgICBjb25zb2xlLmxvZygndmlzaWJsZUdhdWdlczonLCB2aXNpYmxlR2F1Z2VzLmxlbmd0aCwgJy8nLCByYWluTm9kZUdhdWdlSWRzLmxlbmd0aCk7XG5cbiAgICAgICAgY29uc3QgZ2F1Z2VzTGF0TG5nOiBNYXBMYXRMbmdbXSA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IGdhdWdlIG9mIHZpc2libGVHYXVnZXMpIHtcbiAgICAgICAgICAgIGdhdWdlc0xhdExuZy5wdXNoKFxuICAgICAgICAgICAgICAgIG5ldyBNYXBMYXRMbmcoZ2F1Z2UubGF0aXR1ZGUsIGdhdWdlLmxvbmdpdHVkZSwgdW5kZWZpbmVkLCBnYXVnZS5pZCwgZ2F1Z2UubmFtZSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5nYXVnZXNJbk1hcCA9IGdhdWdlc0xhdExuZztcbiAgICB9XG5cbiAgICBhc3luYyBzZXRHYXVnZXNJbkNvbXBhcmUoKSB7XG4gICAgICAgIGNvbnN0IHF1YWxpdHlQb2ludHM6IFF1YWxpdHlQb2ludFtdID0gW107XG4gICAgICAgIGZvciAoY29uc3QgY29tcGFyZSBvZiB0aGlzLnVpQ29tcGFyZXMpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgcXVhbGl0eVBvaW50IG9mIGNvbXBhcmUuY29tcGFyZVBvaW50c0hpc3RvcnkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBhbHJlYWR5QWRkZWQgPSBxdWFsaXR5UG9pbnRzLmZpbHRlcihcbiAgICAgICAgICAgICAgICAgICAgKHApID0+IHA/LmdhdWdlSWQgPT09IHF1YWxpdHlQb2ludC5nYXVnZUlkXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBpZiAoYWxyZWFkeUFkZGVkLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBxdWFsaXR5UG9pbnRzLnB1c2gocXVhbGl0eVBvaW50KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmdhdWdlc0luQ29tcGFyZSA9IHF1YWxpdHlQb2ludHMubWFwKChwKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IE1hcExhdExuZyhcbiAgICAgICAgICAgICAgICBwLmdhdWdlQ2FydGVzaWFuVmFsdWUubGF0LFxuICAgICAgICAgICAgICAgIHAuZ2F1Z2VDYXJ0ZXNpYW5WYWx1ZS5sbmcsXG4gICAgICAgICAgICAgICAgMCxcbiAgICAgICAgICAgICAgICBwLmdhdWdlSWQsXG4gICAgICAgICAgICAgICAgcC5nYXVnZUxhYmVsICsgJz4nICsgcC5nZXRHYXVnZVZhbHVlKCksXG4gICAgICAgICAgICAgICAgcC5nZXRHYXVnZVZhbHVlKClcbiAgICAgICAgICAgICk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMucmVzZXRTZWxlY3RlZEdhdWdlcygpO1xuICAgIH1cblxuICAgIGFzeW5jIHNlbGVjdEdhdWdlKGdhdWdlSWQ6IHN0cmluZywgY29tcGFyZUluZGV4OiBudW1iZXIpIHtcbiAgICAgICAgaWYgKGdhdWdlSWQpIHtcbiAgICAgICAgICAgIGNvbnN0IHh5cyA9IHRoaXMuZ2V0Q3VycmVudFF1YWxpdHlQb2ludHMoY29tcGFyZUluZGV4KS5maWx0ZXIoXG4gICAgICAgICAgICAgICAgKHApID0+IHAuZ2F1Z2VJZCA9PT0gZ2F1Z2VJZFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRHYXVnZSA9IHh5cy5sZW5ndGggPT09IDEgPyB4eXNbMF0gOiBudWxsO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEdhdWdlID0gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGhpcy5zZWxlY3RlZEdhdWdlKSB7XG4gICAgICAgICAgICB0aGlzLnJlc2V0U2VsZWN0ZWRHYXVnZXMoKTtcbiAgICAgICAgICAgIGNvbnN0IGdhdWdlc0ZpbHRlcmVkID0gdGhpcy5nYXVnZXNJbk1hcC5maWx0ZXIoKGcpID0+IGcuaWQgPT09IGdhdWdlSWQpO1xuICAgICAgICAgICAgaWYgKGdhdWdlc0ZpbHRlcmVkLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRHYXVnZXMgPSBbZ2F1Z2VzRmlsdGVyZWRbMF1dO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRHYXVnZUluUG9pbnRzID0gdGhpcy5nZXRDdXJyZW50UXVhbGl0eVBvaW50cyhjb21wYXJlSW5kZXgpLmZpbHRlcihcbiAgICAgICAgICAgIChwKSA9PiBwLmdhdWdlSWQgPT09IHRoaXMuc2VsZWN0ZWRHYXVnZS5nYXVnZUlkXG4gICAgICAgICk7XG4gICAgICAgIGxldCBwaXhlbHNTb2x1dGlvbnM6IE1hcExhdExuZ1tdW10gPSBbXTtcblxuICAgICAgICBpZiAoc2VsZWN0ZWRHYXVnZUluUG9pbnRzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgY29uc3QgcmVtYXJrcyA9IEpTT04ucGFyc2Uoc2VsZWN0ZWRHYXVnZUluUG9pbnRzWzBdLnJlbWFyaykuc29ydChcbiAgICAgICAgICAgICAgICAoYSwgYikgPT4gYS5jcml0ZXJpYUF0dGVtcHRlZFRvQmVNaW5pbXVtIC0gYi5jcml0ZXJpYUF0dGVtcHRlZFRvQmVNaW5pbXVtXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgY29uc29sZS5sb2cocmVtYXJrcyk7XG4gICAgICAgICAgICBwaXhlbHNTb2x1dGlvbnMgPSByZW1hcmtzLm1hcCgocmVtYXJrKSA9PlxuICAgICAgICAgICAgICAgIHJlbWFyay5zb2x1dGlvbkZvckdhdWdlLnBpeGVscy5tYXAoXG4gICAgICAgICAgICAgICAgICAgIChwKSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgbmV3IE1hcExhdExuZyhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwLnkgKyAwLjAwNSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwLnggKyAwLjAxLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJycgKyAhcmVtYXJrLm5vdFBvc3NpYmxlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICcnICsgIXJlbWFyay5ub3RQb3NzaWJsZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgY29uc3QgdGltZURlbHRhSW5NaW51dGVzID0gc2VsZWN0ZWRHYXVnZUluUG9pbnRzWzBdLmdldFRpbWVEZWx0YUluTWludXRlcygpO1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEdhdWdlSW5Qb2ludHNEZXRhaWwgPVxuICAgICAgICAgICAgICAgICcnICtcbiAgICAgICAgICAgICAgICBzZWxlY3RlZEdhdWdlSW5Qb2ludHNbMF0uZ2F1Z2VMYWJlbCArXG4gICAgICAgICAgICAgICAgJyA+ICcgK1xuICAgICAgICAgICAgICAgIE1hdGgucm91bmQoc2VsZWN0ZWRHYXVnZUluUG9pbnRzWzBdLmdldEdhdWdlVmFsdWUoKSAqIDEwMCkgLyAxMDAgK1xuICAgICAgICAgICAgICAgICcgLyAnICtcbiAgICAgICAgICAgICAgICBNYXRoLnJvdW5kKHNlbGVjdGVkR2F1Z2VJblBvaW50c1swXS5nZXRSYWluVmFsdWUoKSAqIDEwMCkgLyAxMDAgK1xuICAgICAgICAgICAgICAgICcgZFQ9JyArXG4gICAgICAgICAgICAgICAgdGltZURlbHRhSW5NaW51dGVzO1xuXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkR2F1Z2VJblBvaW50cyA9IHNlbGVjdGVkR2F1Z2VJblBvaW50c1swXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRHYXVnZUluUG9pbnRzID0gbnVsbDtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRHYXVnZXMgPSBbXTtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRQaXhlbHMgPSBbXTtcbiAgICAgICAgICAgIHRoaXMucGl4ZWxzU29sdXRpb25zID0gW107XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnNlbGVjdGVkR2F1Z2VzID0gW1xuICAgICAgICAgICAgbmV3IE1hcExhdExuZyhcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkR2F1Z2VJblBvaW50cy5nYXVnZUNhcnRlc2lhblZhbHVlLmxhdCxcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkR2F1Z2VJblBvaW50cy5nYXVnZUNhcnRlc2lhblZhbHVlLmxuZyxcbiAgICAgICAgICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEdhdWdlSW5Qb2ludHMuZ2F1Z2VJZCxcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkR2F1Z2VJblBvaW50cy5nYXVnZUxhYmVsICtcbiAgICAgICAgICAgICAgICAgICAgJz4nICtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEdhdWdlSW5Qb2ludHMuZ2F1Z2VDYXJ0ZXNpYW5WYWx1ZS52YWx1ZSxcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkR2F1Z2VJblBvaW50cy5nYXVnZUNhcnRlc2lhblZhbHVlLnZhbHVlXG4gICAgICAgICAgICApLFxuICAgICAgICBdO1xuXG4gICAgICAgIHRoaXMuc2VsZWN0R2F1Z2VJbkNvbXBhcmUoKTtcblxuICAgICAgICBjb25zdCBwaXhlbHM6IE1hcExhdExuZ1tdID0gW107XG4gICAgICAgIGZvciAoY29uc3QgcmFpbkNhcnRlc2lhblZhbHVlIG9mIHRoaXMuc2VsZWN0ZWRHYXVnZUluUG9pbnRzLnJhaW5DYXJ0ZXNpYW5WYWx1ZXMpIHtcbiAgICAgICAgICAgIHBpeGVscy5wdXNoKFxuICAgICAgICAgICAgICAgIG5ldyBNYXBMYXRMbmcocmFpbkNhcnRlc2lhblZhbHVlLmxhdCArIDAuMDA1LCByYWluQ2FydGVzaWFuVmFsdWUubG5nICsgMC4wMSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zZWxlY3RlZFBpeGVscyA9IHBpeGVscztcblxuICAgICAgICB0aGlzLnBpeGVsc1NvbHV0aW9ucyA9IHBpeGVsc1NvbHV0aW9ucztcbiAgICB9XG5cbiAgICAvLyBSZXR1cm5zIGFsbCBncmFudWxhciBxdWFsaXR5IHBvaW50cyBhY3Jvc3MgYWxsIGRhdGVzIGluIHRoZSBwZXJpb2QgKGV4Y2x1ZGVzIGN1bXVsYXRpdmUgZW5kIGRhdGUpXG4gICAgZ2V0QWxsR3JhbnVsYXJDb21wYXJlUG9pbnRzKCk6IHtcbiAgICAgICAgZGF0ZTogRGF0ZTtcbiAgICAgICAgZ2F1Z2VOYW1lOiBzdHJpbmc7XG4gICAgICAgIGdhdWdlVmFsdWU6IG51bWJlcjtcbiAgICAgICAgcGl4ZWxWYWx1ZTogbnVtYmVyO1xuICAgIH1bXSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdDoge2RhdGU6IERhdGU7IGdhdWdlTmFtZTogc3RyaW5nOyBnYXVnZVZhbHVlOiBudW1iZXI7IHBpeGVsVmFsdWU6IG51bWJlcn1bXSA9XG4gICAgICAgICAgICBbXTtcblxuICAgICAgICBpZiAoIXRoaXMuYnVpbGRDb21wYXJlcz8uY29tcGFyZXNQZXJEYXRlPy5sZW5ndGggfHwgIXRoaXMuY29tcGFyZURhdGVzPy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBGaW5kIHRoZSBsYXN0IGRhdGUgKGN1bXVsYXRpdmUgZW5kIGRhdGUpIHRvIGV4Y2x1ZGUgaXRcbiAgICAgICAgY29uc3QgbGFzdERhdGVUaW1lID0gTWF0aC5tYXgoLi4udGhpcy5jb21wYXJlRGF0ZXMubWFwKChkKSA9PiBkLmdldFRpbWUoKSkpO1xuXG4gICAgICAgIGZvciAoY29uc3QgY29tcGFyZVBlckRhdGUgb2YgdGhpcy5idWlsZENvbXBhcmVzLmNvbXBhcmVzUGVyRGF0ZSkge1xuICAgICAgICAgICAgLy8gU2tpcCB0aGUgbGFzdCBkYXRlIHdoaWNoIGNvbnRhaW5zIGN1bXVsYXRpdmUgdmFsdWVzXG4gICAgICAgICAgICBpZiAoY29tcGFyZVBlckRhdGUuZGF0ZS5nZXRUaW1lKCkgPj0gbGFzdERhdGVUaW1lKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIWNvbXBhcmVQZXJEYXRlLmNvbXBhcmVUaW1lbGluZT8ubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBHZXQgZmlyc3QgdGltZWxpbmUgZW50cnkgKGN1cnJlbnQgc3RlcCkgZm9yIGVhY2ggZGF0ZVxuICAgICAgICAgICAgY29uc3QgY3VycmVudENvbXBhcmUgPSBjb21wYXJlUGVyRGF0ZS5jb21wYXJlVGltZWxpbmVbMF07XG4gICAgICAgICAgICBpZiAoIWN1cnJlbnRDb21wYXJlPy5xdWFsaXR5UG9pbnRzPy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZvciAoY29uc3QgcXAgb2YgY3VycmVudENvbXBhcmUucXVhbGl0eVBvaW50cykge1xuICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgZGF0ZTogY29tcGFyZVBlckRhdGUuZGF0ZSxcbiAgICAgICAgICAgICAgICAgICAgZ2F1Z2VOYW1lOiBxcC5nYXVnZUxhYmVsLFxuICAgICAgICAgICAgICAgICAgICBnYXVnZVZhbHVlOiBxcC5nZXRHYXVnZVZhbHVlKCksXG4gICAgICAgICAgICAgICAgICAgIHBpeGVsVmFsdWU6IHFwLmdldFJhaW5WYWx1ZSgpLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlc3VsdC5zb3J0KChhLCBiKSA9PiBhLmRhdGUuZ2V0VGltZSgpIC0gYi5kYXRlLmdldFRpbWUoKSk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGFzeW5jIGJ1aWxkQ29tcGFyZXNUaW1lbGluZShcbiAgICAgICAgdGFyZ2V0c09yZGVyZWQ6IElDb21wYXJlVGFyZ2V0W10sXG4gICAgICAgIHBlcmlvZDoge2JlZ2luOiBEYXRlOyBlbmQ6IERhdGV9LFxuICAgICAgICB3aXRoQ29tcGFyZUR1cGxpY2F0ZTogYm9vbGVhblxuICAgICk6IFByb21pc2U8SUNvbXBhcmVzPiB7XG4gICAgICAgIGNvbnN0IGNvbXBhcmVEYXRlcyA9IHRhcmdldHNPcmRlcmVkLm1hcCgodCkgPT4gdC5kYXRlKTtcblxuICAgICAgICBjb25zdCBxdWFsaXRpZXM6IFJhaW5Db21wdXRhdGlvblF1YWxpdHlbXSA9IGNvbXBhcmVEYXRlc1xuICAgICAgICAgICAgLmZpbHRlcigoZCkgPT4gISFkKVxuICAgICAgICAgICAgLm1hcCgoZCkgPT4gdGhpcy5nZXRSYWluQ29tcHV0YXRpb25RdWFsaXR5KGQpKVxuICAgICAgICAgICAgLmZpbHRlcigocmNxKSA9PiAhIXJjcSk7XG5cbiAgICAgICAgdGhpcy5jb21wYXJlRGF0ZXMgPSBjb21wYXJlRGF0ZXM/Lmxlbmd0aCA+IDEgPyBjb21wYXJlRGF0ZXMgOiBbcGVyaW9kLmJlZ2luLCBwZXJpb2QuZW5kXTtcbiAgICAgICAgaWYgKHRoaXMuY29tcGFyZURhdGVzWzBdLmdldFRpbWUoKSA+IHBlcmlvZC5iZWdpbi5nZXRUaW1lKCkpIHtcbiAgICAgICAgICAgIHRoaXMuY29tcGFyZURhdGVzLnVuc2hpZnQocGVyaW9kLmJlZ2luKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuYnVpbGRDb21wYXJlcyA9IFNwZWVkTWF0cml4Q29udGFpbmVyLkJ1aWxkQ29tcGFyZXMocXVhbGl0aWVzLCAhd2l0aENvbXBhcmVEdXBsaWNhdGUpO1xuICAgICAgICByZXR1cm4gdGhpcy5idWlsZENvbXBhcmVzO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBnZXRDb21wYXJlUGVyRGF0ZShkYXRlOiBEYXRlKTogSUNvbXBhcmVQZXJEYXRlIHtcbiAgICAgICAgY29uc3QgZXhpc3RpbmcgPSB0aGlzLmJ1aWxkQ29tcGFyZXMuY29tcGFyZXNQZXJEYXRlLmZpbHRlcihcbiAgICAgICAgICAgIChjKSA9PiBjLmRhdGUuZ2V0VGltZSgpID09PSBkYXRlLmdldFRpbWUoKVxuICAgICAgICApO1xuICAgICAgICBpZiAoZXhpc3RpbmcubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICByZXR1cm4gZXhpc3RpbmdbMF07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGdldEN1cnJlbnRRdWFsaXR5UG9pbnRzKGNvbXBhcmVJbmRleDogbnVtYmVyKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIHRoaXMudWlDb21wYXJlcy5sZW5ndGggPT09IDAgfHxcbiAgICAgICAgICAgIGNvbXBhcmVJbmRleCA8IDAgfHxcbiAgICAgICAgICAgIHRoaXMuY29tcGFyZU5hbWVzLmxlbmd0aCA8IGNvbXBhcmVJbmRleFxuICAgICAgICApIHtcbiAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLnVpQ29tcGFyZXNbY29tcGFyZUluZGV4XS5jb21wYXJlUG9pbnRzSGlzdG9yeTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgY2xlYW5Db21wYXJlUXVhbGl0eShkZXRhaWxzPzogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuY29tcGFyZVZlcnNpb24gPSBkZXRhaWxzO1xuICAgICAgICB0aGlzLmNvbXBhcmVOYW1lcyA9IFtdO1xuICAgICAgICB0aGlzLnVpQ29tcGFyZXMgPSBbXTtcbiAgICAgICAgdGhpcy5jb21wYXJlU3BlZWRNYXRyaXggPSBbXTtcbiAgICAgICAgdGhpcy5jb21wYXJlVHJ1c3RlZEluZGljYXRvciA9IHVuZGVmaW5lZDtcblxuICAgICAgICB0aGlzLmN1cnJlbnRRdWFsaXR5RG9uZURhdGUgPSBuZXcgRGF0ZSgtMSk7XG4gICAgICAgIHRoaXMuY3VycmVudFF1YWxpdHlMYXVuY2hlZEJ5ID0gJyc7XG4gICAgICAgIHRoaXMuY3VycmVudFF1YWxpdHlUaW1lU3BlbnRJbk1zID0gLTE7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGFzeW5jIGZldGNoUmFpbkNvbXB1dGF0aW9uUXVhbGl0aWVzKFxuICAgICAgICB0YXJnZXRzT3JkZXJlZDogSUNvbXBhcmVUYXJnZXRbXSxcbiAgICAgICAgcHJvdmlkZXI6IHN0cmluZyA9ICdSYWFpbicsXG4gICAgICAgIHRpbWVTdGVwSW5NaW51dGVzOiBudW1iZXIgPSA1LFxuICAgICAgICB0aW1lU3RlcE1vZGU6ICdlcScgfCAnbHRlJyA9ICdlcSdcbiAgICApIHtcbiAgICAgICAgZm9yIChjb25zdCB0YXJnZXQgb2YgdGFyZ2V0c09yZGVyZWQpIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5yYWluQ29tcHV0YXRpb25RdWFsaXRpZXNQZXJEYXRlW3RhcmdldC5kYXRlLnRvSVNPU3RyaW5nKCldKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IHJhaW5Db21wdXRhdGlvblF1YWxpdHk6IFJhaW5Db21wdXRhdGlvblF1YWxpdHk7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHRhcmdldC5yYWluQ29tcHV0YXRpb25DdW11bGF0aXZlSWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJhaW5Db21wdXRhdGlvblF1YWxpdHkgPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucHJvZmlsZVNlcnZpY2UuZ2V0UmFpbkN1bXVsYXRpdmVDdW11bGF0aXZlc0NvbXBhcmUoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmFpbk5vZGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldC5yYWluQ29tcHV0YXRpb25DdW11bGF0aXZlSWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3ZpZGVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lU3RlcEluTWludXRlcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZVN0ZXBNb2RlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGlmIChyYWluQ29tcHV0YXRpb25RdWFsaXR5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgaXNDb25zaXN0ZW50ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG1hdHJpY2VzID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByYWluQ29tcHV0YXRpb25RdWFsaXR5LnF1YWxpdHlTcGVlZE1hdHJpeENvbnRhaW5lci5nZXRNYXRyaWNlcygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBtYXRyaXggb2YgbWF0cmljZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW1hdHJpeC5pc0NvbnNpc3RlbnQoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0NvbnNpc3RlbnQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaXNDb25zaXN0ZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgT25lIG9mIHJhaW5Db21wdXRhdGlvblF1YWxpdHkgbWF0cmljZXMgaXMgbm90IGNvbnNpc3RlbnQgZm9yICR7dGFyZ2V0LmRhdGUudG9JU09TdHJpbmcoKX1gXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yYWluQ29tcHV0YXRpb25RdWFsaXRpZXNQZXJEYXRlW3RhcmdldC5kYXRlLnRvSVNPU3RyaW5nKCldID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByYWluQ29tcHV0YXRpb25RdWFsaXR5O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGdldFJhaW5Db21wdXRhdGlvblF1YWxpdHkoZGF0ZTogRGF0ZSk6IFJhaW5Db21wdXRhdGlvblF1YWxpdHkge1xuICAgICAgICByZXR1cm4gdGhpcy5yYWluQ29tcHV0YXRpb25RdWFsaXRpZXNQZXJEYXRlW2RhdGUudG9JU09TdHJpbmcoKV07XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIHNlbGVjdEdhdWdlSW5Db21wYXJlKCkge1xuICAgICAgICBjb25zdCBnbG9iYWxDb21wYXJlUG9pbnRzID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLmdsb2JhbENvbXBhcmVQb2ludHMpKTtcbiAgICAgICAgZm9yIChjb25zdCBwIG9mIGdsb2JhbENvbXBhcmVQb2ludHMpIHtcbiAgICAgICAgICAgIGlmIChwLmlkID09PSB0aGlzLnNlbGVjdGVkR2F1Z2VJblBvaW50cz8uZ2F1Z2VJZCkge1xuICAgICAgICAgICAgICAgIHAuciA9IDEwO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBwLnIgPSAyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuZ2xvYmFsQ29tcGFyZVBvaW50cyA9IGdsb2JhbENvbXBhcmVQb2ludHM7XG5cbiAgICAgICAgZm9yIChjb25zdCBjb21wYXJlIG9mIHRoaXMudWlDb21wYXJlcykge1xuICAgICAgICAgICAgY29uc3QgY29tcGFyZVBvaW50cyA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoY29tcGFyZS5jb21wYXJlUG9pbnRzKSk7XG4gICAgICAgICAgICBjb21wYXJlUG9pbnRzLmZvckVhY2goKHApID0+IHtcbiAgICAgICAgICAgICAgICBpZiAocC5pZCA9PT0gdGhpcy5zZWxlY3RlZEdhdWdlSW5Qb2ludHM/LmdhdWdlSWQpIHtcbiAgICAgICAgICAgICAgICAgICAgcC5yID0gMTA7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcC5yID0gMztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGNvbXBhcmUuY29tcGFyZVBvaW50cyA9IGNvbXBhcmVQb2ludHM7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgcmVzZXRTZWxlY3RlZEdhdWdlcygpIHtcbiAgICAgICAgLy8gY29uc29sZS5sb2coJ3Jlc2V0U2VsZWN0ZWRHYXVnZXMgcmVzZXQnKTtcbiAgICAgICAgdGhpcy5zZWxlY3RlZEdhdWdlID0gbnVsbDtcbiAgICAgICAgdGhpcy5zZWxlY3RlZEdhdWdlSW5Qb2ludHMgPSBudWxsO1xuICAgICAgICB0aGlzLnNlbGVjdGVkR2F1Z2VzID0gW107XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRQaXhlbHMgPSBbXTtcbiAgICAgICAgdGhpcy5waXhlbHNTb2x1dGlvbnMgPSBbXTtcbiAgICAgICAgdGhpcy5zZWxlY3RHYXVnZUluQ29tcGFyZSgpO1xuICAgIH1cbn1cbiJdfQ==
|
|
367
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29tcGFyZU1hbmFnZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29yZS9zaGFyZWQvdG9vbHMvQ29tcGFyZU1hbmFnZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLFVBQVUsQ0FBQztBQUNuQyxPQUFPLEVBQ0gsU0FBUyxFQU9ULFdBQVcsRUFDWCxvQkFBb0IsR0FDdkIsTUFBTSxhQUFhLENBQUM7QUFDckIsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLFdBQVcsQ0FBQztBQW9CakMsTUFBTSxPQUFPLGNBQWM7SUE2QnZCLFlBQ2MsY0FBOEIsRUFDakMsWUFBd0IsR0FBRyxFQUFFLEdBQUUsQ0FBQztRQUQ3QixtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFDakMsY0FBUyxHQUFULFNBQVMsQ0FBdUI7UUFFdkMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ3BCLENBQUM7SUFFRCw0RUFBNEU7SUFDNUUsSUFBVyx3QkFBd0I7UUFDL0IsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsaUJBQWlCLEVBQUUsYUFBYSxFQUFFLE1BQU0sRUFBRTtZQUMvRCxPQUFPLEVBQUUsQ0FBQztTQUNiO1FBQ0QsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLGlCQUFpQixDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQ3pELENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxFQUFFLENBQUMsYUFBYSxFQUFFLEVBQUUsRUFBRSxDQUFDLFlBQVksRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FDMUYsQ0FBQztJQUNOLENBQUM7SUFFRCxJQUFXLDJCQUEyQjtRQUNsQyxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxpQkFBaUIsRUFBRTtZQUN4QyxPQUFPLElBQUksTUFBTSxDQUFDLENBQUMs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QUFJLENBQUMsQ0FBQyxFQUFFLEtBQUssSUFBSSxDQUFDLHFCQUFxQixFQUFFLE9BQU8sRUFBRTtvQkFDOUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7aUJBQ1o7cUJBQU07b0JBQ0gsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7aUJBQ1g7WUFDTCxDQUFDLENBQUMsQ0FBQztZQUNILE9BQU8sQ0FBQyxhQUFhLEdBQUcsYUFBYSxDQUFDO1NBQ3pDO0lBQ0wsQ0FBQztJQUVTLG1CQUFtQjtRQUN6Qiw0Q0FBNEM7UUFDNUMsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUM7UUFDMUIsSUFBSSxDQUFDLHFCQUFxQixHQUFHLElBQUksQ0FBQztRQUNsQyxJQUFJLENBQUMsY0FBYyxHQUFHLEVBQUUsQ0FBQztRQUN6QixJQUFJLENBQUMsY0FBYyxHQUFHLEVBQUUsQ0FBQztRQUN6QixJQUFJLENBQUMsZUFBZSxHQUFHLEVBQUUsQ0FBQztRQUMxQixJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztJQUNoQyxDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge01hcExhdExuZ30gZnJvbSAncmFhaW4tdWknO1xuaW1wb3J0IHtcbiAgICBHYXVnZU5vZGUsXG4gICAgSUNvbXBhcmVQZXJEYXRlLFxuICAgIElDb21wYXJlcyxcbiAgICBQb3NpdGlvblZhbHVlLFxuICAgIFF1YWxpdHlQb2ludCxcbiAgICBSYWluQ29tcHV0YXRpb25RdWFsaXR5LFxuICAgIFJhaW5Ob2RlLFxuICAgIFNwZWVkTWF0cml4LFxuICAgIFNwZWVkTWF0cml4Q29udGFpbmVyLFxufSBmcm9tICdyYWFpbi1tb2RlbCc7XG5pbXBvcnQge1hZVHlwZX0gZnJvbSAnLi4veHl0eXBlJztcbmltcG9ydCB7UHJvZmlsZVNlcnZpY2V9IGZyb20gJy4uL3Byb2ZpbGUuc2VydmljZSc7XG5pbXBvcnQge0ZyYW1lU2V0fSBmcm9tICcuL0ZyYW1lU2V0JztcblxuZXhwb3J0IGludGVyZmFjZSBJQ29tcGFyZVRhcmdldCB7XG4gICAgZGF0ZTogRGF0ZTtcbiAgICByYWluQ29tcHV0YXRpb25JZD86IHN0cmluZztcbiAgICByYWluQ29tcHV0YXRpb25DdW11bGF0aXZlSWQ/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVVJQ29tcGFyZSB7XG4gICAgZGF0ZTogRGF0ZTtcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgY29tcGFyZVBvaW50czogWFlUeXBlW107XG4gICAgY29tcGFyZVBvaW50c01heDogWFlUeXBlO1xuICAgIGNvbXBhcmVQb2ludHNIaXN0b3J5OiBRdWFsaXR5UG9pbnRbXTtcbiAgICByZW1hcmtzOiBzdHJpbmc7XG4gICAgcXVhbGl0eUluZGljYXRvcjogbnVtYmVyO1xufVxuXG5leHBvcnQgY2xhc3MgQ29tcGFyZU1hbmFnZXIge1xuICAgIHB1YmxpYyBnYXVnZXNJbk1hcDogTWFwTGF0TG5nW107XG4gICAgcHVibGljIGdhdWdlc0luQ29tcGFyZTogTWFwTGF0TG5nW107XG4gICAgcHVibGljIHNlbGVjdGVkR2F1Z2VzOiBNYXBMYXRMbmdbXTtcbiAgICBwdWJsaWMgc2VsZWN0ZWRQaXhlbHM6IE1hcExhdExuZ1tdO1xuICAgIHB1YmxpYyBwaXhlbHNTb2x1dGlvbnM6IE1hcExhdExuZ1tdW107XG4gICAgcHVibGljIHNwZWVkczogTWFwTGF0TG5nW107XG5cbiAgICAvLyBmcm9tIGNvbXBhcmVzVGltZWxpbmVcbiAgICBwdWJsaWMgY29tcGFyZU5hbWVzOiBzdHJpbmdbXTtcbiAgICBwdWJsaWMgdWlDb21wYXJlczogSVVJQ29tcGFyZVtdO1xuICAgIHB1YmxpYyBjb21wYXJlU3BlZWRNYXRyaXg6IFBvc2l0aW9uVmFsdWVbXTtcbiAgICBwdWJsaWMgY29tcGFyZVZlcnNpb246IHN0cmluZztcbiAgICBwdWJsaWMgY29tcGFyZVRydXN0ZWRJbmRpY2F0b3I6IG51bWJlcjtcbiAgICBwdWJsaWMgY29tcGFyZURhdGVzOiBEYXRlW107XG5cbiAgICBwdWJsaWMgY3VycmVudFF1YWxpdHlEb25lRGF0ZTogRGF0ZTtcbiAgICBwdWJsaWMgY3VycmVudFF1YWxpdHlMYXVuY2hlZEJ5OiBzdHJpbmc7XG4gICAgcHVibGljIGN1cnJlbnRRdWFsaXR5VGltZVNwZW50SW5NczogbnVtYmVyO1xuICAgIHB1YmxpYyBnbG9iYWxDb21wYXJlUG9pbnRzOiBYWVR5cGVbXTtcbiAgICBwdWJsaWMgZ2xvYmFsQ29tcGFyZVBvaW50c01heDogWFlUeXBlO1xuICAgIHB1YmxpYyBnbG9iYWxRdWFsaXR5SW5kaWNhdG9yOiBudW1iZXI7XG4gICAgcHVibGljIGNvbXBhcmVTcGVlZDoge2FuZ2xlSW5EZWdyZWVzOiBudW1iZXI7IHBpeGVsc1BlclBlcmlvZDogbnVtYmVyfTtcbiAgICBwcm90ZWN0ZWQgYnVpbGRDb21wYXJlczogSUNvbXBhcmVzO1xuICAgIHByb3RlY3RlZCBzZWxlY3RlZEdhdWdlOiBRdWFsaXR5UG9pbnQ7XG4gICAgcHJvdGVjdGVkIHNlbGVjdGVkR2F1Z2VJblBvaW50czogUXVhbGl0eVBvaW50O1xuICAgIHByb3RlY3RlZCBzZWxlY3RlZEdhdWdlSW5Qb2ludHNEZXRhaWw6IHN0cmluZztcbiAgICBwcm90ZWN0ZWQgcmFpbkNvbXB1dGF0aW9uUXVhbGl0aWVzUGVyRGF0ZTogYW55O1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByb3RlY3RlZCBwcm9maWxlU2VydmljZTogUHJvZmlsZVNlcnZpY2UsXG4gICAgICAgIHB1YmxpYyBvbkNoYW5nZXM6ICgpID0+IHZvaWQgPSAoKSA9PiB7fVxuICAgICkge1xuICAgICAgICB0aGlzLmNsZWFuQWxsKCk7XG4gICAgfVxuXG4gICAgLy8gTWVyZ2VkIGN1bXVsYXRpdmUgZnJvbSBncmFudWxhciBjb21wYXJpc29ucyAoY29tcHV0ZWQgZnJvbSBidWlsZENvbXBhcmVzKVxuICAgIHB1YmxpYyBnZXQgZ3JhbnVsYXJDdW11bGF0aXZlUG9pbnRzKCk6IFhZVHlwZVtdIHtcbiAgICAgICAgaWYgKCF0aGlzLmJ1aWxkQ29tcGFyZXM/LmNvbXBhcmVDdW11bGF0aXZlPy5xdWFsaXR5UG9pbnRzPy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5idWlsZENvbXBhcmVzLmNvbXBhcmVDdW11bGF0aXZlLnF1YWxpdHlQb2ludHMubWFwKFxuICAgICAgICAgICAgKHFwKSA9PiBuZXcgWFlUeXBlKHFwLmdldEdhdWdlVmFsdWUoKSwgcXAuZ2V0UmFpblZhbHVlKCksIDIsIHFwLmdhdWdlTGFiZWwsIHFwLmdhdWdlSWQpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBncmFudWxhckN1bXVsYXRpdmVQb2ludHNNYXgoKTogWFlUeXBlIHtcbiAgICAgICAgaWYgKCF0aGlzLmJ1aWxkQ29tcGFyZXM/LmNvbXBhcmVDdW11bGF0aXZlKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFhZVHlwZSgwLCAwKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBtYXhWYWx1ZSA9IE1hdGgubWF4KHRoaXMuYnVpbGRDb21wYXJlcy5jb21wYXJlQ3VtdWxhdGl2ZS5tYXhWYWx1ZSAqIDEuMiwgMSk7XG4gICAgICAgIHJldHVybiBuZXcgWFlUeXBlKG1heFZhbHVlLCBtYXhWYWx1ZSk7XG4gICAgfVxuXG4gICAgLy8gRGVmYXVsdDogS0dFIG5vcm1hbGl6ZWQgMC0xIChmcm9tIHJhYWluLW1vZGVsIGRlZmF1bHRzKVxuICAgIHB1YmxpYyBnZXQgZ3JhbnVsYXJDdW11bGF0aXZlUXVhbGl0eUluZGljYXRvcigpOiBudW1iZXIge1xuICAgICAgICBpZiAoIXRoaXMuYnVpbGRDb21wYXJlcz8uY29tcGFyZUN1bXVsYXRpdmU/LnF1YWxpdHlQb2ludHM/Lmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFNwZWVkTWF0cml4LkNvbXB1dGVRdWFsaXR5SW5kaWNhdG9yKFxuICAgICAgICAgICAgdGhpcy5idWlsZENvbXBhcmVzLmNvbXBhcmVDdW11bGF0aXZlLnF1YWxpdHlQb2ludHNcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgX3JhaW5Ob2RlOiBSYWluTm9kZTtcblxuICAgIHB1YmxpYyBnZXQgcmFpbk5vZGUoKTogUmFpbk5vZGUge1xuICAgICAgICByZXR1cm4gdGhpcy5fcmFpbk5vZGU7XG4gICAgfVxuXG4gICAgcHVibGljIHNldCByYWluTm9kZShyYWluTm9kZTogUmFpbk5vZGUpIHtcbiAgICAgICAgdGhpcy5fcmFpbk5vZGUgPSByYWluTm9kZTtcbiAgICAgICAgdGhpcy5jbGVhbkFsbCgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBjbGVhbkFsbCgpIHtcbiAgICAgICAgdGhpcy5nYXVnZXNJbk1hcCA9IFtdO1xuICAgICAgICB0aGlzLmdhdWdlc0luQ29tcGFyZSA9IFtdO1xuICAgICAgICB0aGlzLnNlbGVjdGVkR2F1Z2VzID0gW107XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRQaXhlbHMgPSBbXTtcbiAgICAgICAgdGhpcy5waXhlbHNTb2x1dGlvbnMgPSBbXTtcbiAgICAgICAgdGhpcy5jb21wYXJlRGF0ZXMgPSBbXTtcbiAgICAgICAgdGhpcy5zcGVlZHMgPSBbXTtcblxuICAgICAgICB0aGlzLmJ1aWxkQ29tcGFyZXMgPSB7XG4gICAgICAgICAgICBjb21wYXJlc1BlckRhdGU6IFtdLFxuICAgICAgICAgICAgY29tcGFyZUN1bXVsYXRpdmU6IG51bGwsXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuZ2xvYmFsQ29tcGFyZVBvaW50cyA9IFtdO1xuICAgICAgICB0aGlzLmdsb2JhbENvbXBhcmVQb2ludHNNYXggPSBuZXcgWFlUeXBlKDAsIDApO1xuICAgICAgICB0aGlzLmdsb2JhbFF1YWxpdHlJbmRpY2F0b3IgPSBudWxsO1xuICAgICAgICAvLyBncmFudWxhckN1bXVsYXRpdmUqIGFyZSBub3cgZ2V0dGVycyBjb21wdXRlZCBmcm9tIGJ1aWxkQ29tcGFyZXNcbiAgICAgICAgdGhpcy5yYWluQ29tcHV0YXRpb25RdWFsaXRpZXNQZXJEYXRlID0ge307XG5cbiAgICAgICAgdGhpcy5zZWxlY3RlZEdhdWdlID0gbnVsbDtcbiAgICAgICAgdGhpcy5zZWxlY3RlZEdhdWdlSW5Qb2ludHMgPSBudWxsO1xuICAgICAgICB0aGlzLmNsZWFuQ29tcGFyZVF1YWxpdHkoJ25vIGNvbXBhcmUgeWV0Jyk7XG4gICAgfVxuXG4gICAgYXN5bmMgcmVmcmVzaENvbXBhcmVRdWFsaXR5KGZyYW1lU2V0OiBGcmFtZVNldCwgb25seU9uZTogYm9vbGVhbikge1xuICAgICAgICBjb25zdCBjb21wYXJlUGVyRGF0ZSA9IHRoaXMuZ2V0Q29tcGFyZVBlckRhdGUoZnJhbWVTZXQuZGF0ZSk7XG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgIWNvbXBhcmVQZXJEYXRlIHx8XG4gICAgICAgICAgICAhY29tcGFyZVBlckRhdGUucmFpbkNvbXB1dGF0aW9uUXVhbGl0eT8ucXVhbGl0eVNwZWVkTWF0cml4Q29udGFpbmVyXG4gICAgICAgICkge1xuICAgICAgICAgICAgLy8gdGhpcy5jbGVhbkNvbXBhcmVRdWFsaXR5KFxuICAgICAgICAgICAgLy8gICAgICdubyBjdXJyZW50IHF1YWxpdHkgJyArIE9iamVjdC5rZXlzKHRoaXMucmFpbkNvbXB1dGF0aW9uUXVhbGl0aWVzUGVyRGF0ZSlcbiAgICAgICAgICAgIC8vICk7XG4gICAgICAgICAgICAvLyB0aGlzLm9uQ2hhbmdlcygpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG9ubHlPbmUpIHtcbiAgICAgICAgICAgIGNvbXBhcmVQZXJEYXRlLmNvbXBhcmVUaW1lbGluZSA9IGNvbXBhcmVQZXJEYXRlLmNvbXBhcmVUaW1lbGluZS5maWx0ZXIoXG4gICAgICAgICAgICAgICAgKGMpID0+IGMuZGF0ZS5nZXRUaW1lKCkgPT09IGZyYW1lU2V0LmRhdGUuZ2V0VGltZSgpXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdWlDb21wYXJlczogSVVJQ29tcGFyZVtdID0gY29tcGFyZVBlckRhdGUuY29tcGFyZVRpbWVsaW5lXG4gICAgICAgICAgICAubWFwKChjKSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gRGVmYXVsdDogS0dFIG5vcm1hbGl6ZWQgMC0xXG4gICAgICAgICAgICAgICAgY29uc3QgcXVhbGl0eUluZGljYXRvciA9IFNwZWVkTWF0cml4LkNvbXB1dGVRdWFsaXR5SW5kaWNhdG9yKGMucXVhbGl0eVBvaW50cyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgZGF0ZTogYy5kYXRlLFxuICAgICAgICAgICAgICAgICAgICBuYW1lOiBjLm5hbWUsXG4gICAgICAgICAgICAgICAgICAgIGNvbXBhcmVQb2ludHM6IGMucXVhbGl0eVBvaW50cy5tYXAoXG4gICAgICAgICAgICAgICAgICAgICAgICAocCkgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgWFlUeXBlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwLmdldEdhdWdlVmFsdWUoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcC5nZXRSYWluVmFsdWUoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcC5nYXVnZUxhYmVsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwLmdhdWdlSWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgIGNvbXBhcmVQb2ludHNNYXg6IG5ldyBYWVR5cGUoXG4gICAgICAgICAgICAgICAgICAgICAgICBNYXRoLm1heChjLm1heFZhbHVlICogMS4yLCAxKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIE1hdGgubWF4KGMubWF4VmFsdWUgKiAxLjIsIDEpXG4gICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgIGNvbXBhcmVQb2ludHNIaXN0b3J5OiBjLnF1YWxpdHlQb2ludHNMZWdhY3ksXG4gICAgICAgICAgICAgICAgICAgIHJlbWFya3M6IGMucmVtYXJrcyxcbiAgICAgICAgICAgICAgICAgICAgcXVhbGl0eUluZGljYXRvcixcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5zb3J0KChhLCBiKSA9PiBhLmRhdGU/LmdldFRpbWUoKSAtIGIuZGF0ZT8uZ2V0VGltZSgpKTtcblxuICAgICAgICB0aGlzLmN1cnJlbnRRdWFsaXR5RG9uZURhdGUgPSBjb21wYXJlUGVyRGF0ZS5yYWluQ29tcHV0YXRpb25RdWFsaXR5LmlzRG9uZURhdGU7XG4gICAgICAgIHRoaXMuY3VycmVudFF1YWxpdHlUaW1lU3BlbnRJbk1zID0gY29tcGFyZVBlckRhdGUucmFpbkNvbXB1dGF0aW9uUXVhbGl0eS50aW1lU3BlbnRJbk1zO1xuICAgICAgICB0aGlzLmN1cnJlbnRRdWFsaXR5TGF1bmNoZWRCeSA9IGNvbXBhcmVQZXJEYXRlLnJhaW5Db21wdXRhdGlvblF1YWxpdHkubGF1bmNoZWRCeTtcbiAgICAgICAgdGhpcy5jb21wYXJlVmVyc2lvbiA9IGNvbXBhcmVQZXJEYXRlLnJhaW5Db21wdXRhdGlvblF1YWxpdHkuZ2V0VmVyc2lvbigpO1xuXG4gICAgICAgIHRoaXMuY29tcGFyZVNwZWVkID1cbiAgICAgICAgICAgIGNvbXBhcmVQZXJEYXRlLnJhaW5Db21wdXRhdGlvblF1YWxpdHkucXVhbGl0eVNwZWVkTWF0cml4Q29udGFpbmVyLmdldFNwZWVkKCk7XG4gICAgICAgIHRoaXMuY29tcGFyZU5hbWVzID0gdWlDb21wYXJlcy5tYXAoKGMpID0+IGMubmFtZSk7XG4gICAgICAgIHRoaXMudWlDb21wYXJlcyA9IHVpQ29tcGFyZXM7XG5cbiAgICAgICAgdGhpcy5vbkNoYW5nZXMoKTtcbiAgICB9XG5cbiAgICBhc3luYyByZWZyZXNoR2xvYmFsQ29tcGFyZVF1YWxpdHkoXG4gICAgICAgIHRhcmdldHNPcmRlcmVkOiBJQ29tcGFyZVRhcmdldFtdLFxuICAgICAgICBwZXJpb2Q6IHtiZWdpbjogRGF0ZTsgZW5kOiBEYXRlfSxcbiAgICAgICAgd2l0aENvbXBhcmVEdXBsaWNhdGU6IGJvb2xlYW4sXG4gICAgICAgIHByb3ZpZGVyOiBzdHJpbmcgPSAnUmFhaW4nLFxuICAgICAgICB0aW1lU3RlcEluTWludXRlczogbnVtYmVyID0gNSxcbiAgICAgICAgdGltZVN0ZXBNb2RlOiAnZXEnIHwgJ2x0ZScgPSAnZXEnXG4gICAgKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmZldGNoUmFpbkNvbXB1dGF0aW9uUXVhbGl0aWVzKFxuICAgICAgICAgICAgICAgIHRhcmdldHNPcmRlcmVkLFxuICAgICAgICAgICAgICAgIHByb3ZpZGVyLFxuICAgICAgICAgICAgICAgIHRpbWVTdGVwSW5NaW51dGVzLFxuICAgICAgICAgICAgICAgIHRpbWVTdGVwTW9kZVxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgYXdhaXQgdGhpcy5idWlsZENvbXBhcmVzVGltZWxpbmUodGFyZ2V0c09yZGVyZWQsIHBlcmlvZCwgd2l0aENvbXBhcmVEdXBsaWNhdGUpO1xuXG4gICAgICAgICAgICBpZiAoIXRoaXMuYnVpbGRDb21wYXJlcy5jb21wYXJlQ3VtdWxhdGl2ZSkge1xuICAgICAgICAgICAgICAgIC8vIHRocm93IEVycm9yKCduZWVkcyBjdW11bGF0aXZlIGNvbXBhcmUnKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGNvdW50Rm9yQXZlcmFnZSA9IHRhcmdldHNPcmRlcmVkLmxlbmd0aDtcbiAgICAgICAgICAgIGNvbnN0IG1heFZhbHVlID0gTWF0aC5tYXgodGhpcy5idWlsZENvbXBhcmVzLmNvbXBhcmVDdW11bGF0aXZlLm1heFZhbHVlICogMS4yLCAxKTtcbiAgICAgICAgICAgIGNvbnN0IGN1bXVsYXRpdmVQb2ludHMgPSB0aGlzLmJ1aWxkQ29tcGFyZXMuY29tcGFyZUN1bXVsYXRpdmUucXVhbGl0eVBvaW50cy5tYXAoXG4gICAgICAgICAgICAgICAgKHFwKSA9PlxuICAgICAgICAgICAgICAgICAgICBuZXcgWFlUeXBlKHFwLmdldEdhdWdlVmFsdWUoKSwgcXAuZ2V0UmFpblZhbHVlKCksIDIsIHFwLmdhdWdlTGFiZWwsIHFwLmdhdWdlSWQpXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgY29uc3QgY3VtdWxhdGl2ZVBvaW50c01heCA9IG5ldyBYWVR5cGUobWF4VmFsdWUsIG1heFZhbHVlKTtcbiAgICAgICAgICAgIC8vIERlZmF1bHQ6IEtHRSBub3JtYWxpemVkIDAtMVxuICAgICAgICAgICAgY29uc3QgY3VtdWxhdGl2ZVF1YWxpdHlJbmRpY2F0b3IgPSBTcGVlZE1hdHJpeC5Db21wdXRlUXVhbGl0eUluZGljYXRvcihcbiAgICAgICAgICAgICAgICB0aGlzLmJ1aWxkQ29tcGFyZXMuY29tcGFyZUN1bXVsYXRpdmUucXVhbGl0eVBvaW50c1xuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgLy8gU2V0IGZvciBjdW11bGF0aXZlIG1vZGVcbiAgICAgICAgICAgIHRoaXMuZ2xvYmFsQ29tcGFyZVBvaW50cyA9IGN1bXVsYXRpdmVQb2ludHM7XG4gICAgICAgICAgICB0aGlzLmdsb2JhbENvbXBhcmVQb2ludHNNYXggPSBjdW11bGF0aXZlUG9pbnRzTWF4O1xuICAgICAgICAgICAgdGhpcy5nbG9iYWxRdWFsaXR5SW5kaWNhdG9yID0gY3VtdWxhdGl2ZVF1YWxpdHlJbmRpY2F0b3I7XG4gICAgICAgICAgICAvLyBncmFudWxhckN1bXVsYXRpdmUqIGFyZSBub3cgZ2V0dGVycyBjb21wdXRlZCBmcm9tIGJ1aWxkQ29tcGFyZXMuY29tcGFyZUN1bXVsYXRpdmVcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKGUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgYXN5bmMgc2V0R2F1Z2VzSW5NYXAoKSB7XG4gICAgICAgIC8vIEdldCBhbGwgZ2F1Z2UgSURzIGxpbmtlZCB0byB0aGlzIHJhaW5Ob2RlXG4gICAgICAgIGNvbnN0IHJhaW5Ob2RlR2F1Z2VJZHMgPSB0aGlzLnJhaW5Ob2RlLmdldExpbmtzKEdhdWdlTm9kZS5UWVBFKS5tYXAoKGwpID0+IGwuZ2V0SWQoKSk7XG5cbiAgICAgICAgLy8gRmV0Y2ggZ2F1Z2VzIGZyb20gQVBJIChtYXkgYmUgZmlsdGVyZWQvbGltaXRlZClcbiAgICAgICAgbGV0IGdhdWdlc1RvRmlsdGVyID0gYXdhaXQgdGhpcy5wcm9maWxlU2VydmljZS5nZXRHYXVnZXMoXG4gICAgICAgICAgICB0aGlzLnJhaW5Ob2RlPy5pZCxcbiAgICAgICAgICAgIHRoaXMucmFpbk5vZGUuZ2V0Q2VudGVyKClcbiAgICAgICAgKTtcbiAgICAgICAgZ2F1Z2VzVG9GaWx0ZXIgPSBnYXVnZXNUb0ZpbHRlclxuICAgICAgICAgICAgLnNvcnQoKGEsIGIpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICBhLmFwcHJveERpc3RhbmNlRnJvbSh0aGlzLnJhaW5Ob2RlLmdldENlbnRlcigpKSAtXG4gICAgICAgICAgICAgICAgICAgIGIuYXBwcm94RGlzdGFuY2VGcm9tKHRoaXMucmFpbk5vZGUuZ2V0Q2VudGVyKCkpXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuZmlsdGVyKCh2LCBpbmRleCkgPT4gaW5kZXggPCAyMDApO1xuXG4gICAgICAgIC8vIEJ1aWxkIGEgbWFwIG9mIGdhdWdlcyBmcm9tIEFQSSByZXNwb25zZVxuICAgICAgICBjb25zdCBnYXVnZXNGcm9tQXBpID0gbmV3IE1hcDxcbiAgICAgICAgICAgIHN0cmluZyxcbiAgICAgICAgICAgIHtpZDogc3RyaW5nOyBsYXRpdHVkZTogbnVtYmVyOyBsb25naXR1ZGU6IG51bWJlcjsgbmFtZTogc3RyaW5nfVxuICAgICAgICA+KCk7XG4gICAgICAgIGZvciAoY29uc3QgZ2F1Z2Ugb2YgZ2F1Z2VzVG9GaWx0ZXIpIHtcbiAgICAgICAgICAgIGdhdWdlc0Zyb21BcGkuc2V0KGdhdWdlLmlkLCBnYXVnZSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBGZXRjaCBtaXNzaW5nIGdhdWdlcyBpbmRpdmlkdWFsbHkgKHRob3NlIGxpbmtlZCBidXQgbm90IGluIEFQSSByZXNwb25zZSlcbiAgICAgICAgY29uc3QgbWlzc2luZ0dhdWdlSWRzID0gcmFpbk5vZGVHYXVnZUlkcy5maWx0ZXIoKGlkKSA9PiAhZ2F1Z2VzRnJvbUFwaS5oYXMoaWQpKTtcbiAgICAgICAgZm9yIChjb25zdCBnYXVnZUlkIG9mIG1pc3NpbmdHYXVnZUlkcykge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBjb25zdCBnYXVnZSA9IGF3YWl0IHRoaXMucHJvZmlsZVNlcnZpY2UuZ2V0R2F1Z2UoZ2F1Z2VJZCk7XG4gICAgICAgICAgICAgICAgaWYgKGdhdWdlKSB7XG4gICAgICAgICAgICAgICAgICAgIGdhdWdlc0Zyb21BcGkuc2V0KGdhdWdlLmlkLCBnYXVnZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybihgRmFpbGVkIHRvIGZldGNoIGdhdWdlICR7Z2F1Z2VJZH06YCwgZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBGaWx0ZXIgdG8gb25seSBnYXVnZXMgbGlua2VkIHRvIHRoaXMgcmFpbk5vZGVcbiAgICAgICAgY29uc3QgdmlzaWJsZUdhdWdlcyA9IHJhaW5Ob2RlR2F1Z2VJZHNcbiAgICAgICAgICAgIC5tYXAoKGlkKSA9PiBnYXVnZXNGcm9tQXBpLmdldChpZCkpXG4gICAgICAgICAgICAuZmlsdGVyKChnKSA9PiAhIWcpO1xuICAgICAgICBjb25zb2xlLmxvZygndmlzaWJsZUdhdWdlczonLCB2aXNpYmxlR2F1Z2VzLmxlbmd0aCwgJy8nLCByYWluTm9kZUdhdWdlSWRzLmxlbmd0aCk7XG5cbiAgICAgICAgY29uc3QgZ2F1Z2VzTGF0TG5nOiBNYXBMYXRMbmdbXSA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IGdhdWdlIG9mIHZpc2libGVHYXVnZXMpIHtcbiAgICAgICAgICAgIGdhdWdlc0xhdExuZy5wdXNoKFxuICAgICAgICAgICAgICAgIG5ldyBNYXBMYXRMbmcoZ2F1Z2UubGF0aXR1ZGUsIGdhdWdlLmxvbmdpdHVkZSwgdW5kZWZpbmVkLCBnYXVnZS5pZCwgZ2F1Z2UubmFtZSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5nYXVnZXNJbk1hcCA9IGdhdWdlc0xhdExuZztcbiAgICB9XG5cbiAgICBhc3luYyBzZXRHYXVnZXNJbkNvbXBhcmUoKSB7XG4gICAgICAgIGNvbnN0IHF1YWxpdHlQb2ludHM6IFF1YWxpdHlQb2ludFtdID0gW107XG4gICAgICAgIGZvciAoY29uc3QgY29tcGFyZSBvZiB0aGlzLnVpQ29tcGFyZXMpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgcXVhbGl0eVBvaW50IG9mIGNvbXBhcmUuY29tcGFyZVBvaW50c0hpc3RvcnkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBhbHJlYWR5QWRkZWQgPSBxdWFsaXR5UG9pbnRzLmZpbHRlcihcbiAgICAgICAgICAgICAgICAgICAgKHApID0+IHA/LmdhdWdlSWQgPT09IHF1YWxpdHlQb2ludC5nYXVnZUlkXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBpZiAoYWxyZWFkeUFkZGVkLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBxdWFsaXR5UG9pbnRzLnB1c2gocXVhbGl0eVBvaW50KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmdhdWdlc0luQ29tcGFyZSA9IHF1YWxpdHlQb2ludHMubWFwKChwKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IE1hcExhdExuZyhcbiAgICAgICAgICAgICAgICBwLmdhdWdlQ2FydGVzaWFuVmFsdWUubGF0LFxuICAgICAgICAgICAgICAgIHAuZ2F1Z2VDYXJ0ZXNpYW5WYWx1ZS5sbmcsXG4gICAgICAgICAgICAgICAgMCxcbiAgICAgICAgICAgICAgICBwLmdhdWdlSWQsXG4gICAgICAgICAgICAgICAgcC5nYXVnZUxhYmVsICsgJz4nICsgcC5nZXRHYXVnZVZhbHVlKCksXG4gICAgICAgICAgICAgICAgcC5nZXRHYXVnZVZhbHVlKClcbiAgICAgICAgICAgICk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMucmVzZXRTZWxlY3RlZEdhdWdlcygpO1xuICAgIH1cblxuICAgIGFzeW5jIHNlbGVjdEdhdWdlKGdhdWdlSWQ6IHN0cmluZywgY29tcGFyZUluZGV4OiBudW1iZXIpIHtcbiAgICAgICAgaWYgKGdhdWdlSWQpIHtcbiAgICAgICAgICAgIGNvbnN0IHh5cyA9IHRoaXMuZ2V0Q3VycmVudFF1YWxpdHlQb2ludHMoY29tcGFyZUluZGV4KS5maWx0ZXIoXG4gICAgICAgICAgICAgICAgKHApID0+IHAuZ2F1Z2VJZCA9PT0gZ2F1Z2VJZFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRHYXVnZSA9IHh5cy5sZW5ndGggPT09IDEgPyB4eXNbMF0gOiBudWxsO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEdhdWdlID0gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGhpcy5zZWxlY3RlZEdhdWdlKSB7XG4gICAgICAgICAgICB0aGlzLnJlc2V0U2VsZWN0ZWRHYXVnZXMoKTtcbiAgICAgICAgICAgIGNvbnN0IGdhdWdlc0ZpbHRlcmVkID0gdGhpcy5nYXVnZXNJbk1hcC5maWx0ZXIoKGcpID0+IGcuaWQgPT09IGdhdWdlSWQpO1xuICAgICAgICAgICAgaWYgKGdhdWdlc0ZpbHRlcmVkLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRHYXVnZXMgPSBbZ2F1Z2VzRmlsdGVyZWRbMF1dO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRHYXVnZUluUG9pbnRzID0gdGhpcy5nZXRDdXJyZW50UXVhbGl0eVBvaW50cyhjb21wYXJlSW5kZXgpLmZpbHRlcihcbiAgICAgICAgICAgIChwKSA9PiBwLmdhdWdlSWQgPT09IHRoaXMuc2VsZWN0ZWRHYXVnZS5nYXVnZUlkXG4gICAgICAgICk7XG4gICAgICAgIGxldCBwaXhlbHNTb2x1dGlvbnM6IE1hcExhdExuZ1tdW10gPSBbXTtcblxuICAgICAgICBpZiAoc2VsZWN0ZWRHYXVnZUluUG9pbnRzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgY29uc3QgcmVtYXJrcyA9IEpTT04ucGFyc2Uoc2VsZWN0ZWRHYXVnZUluUG9pbnRzWzBdLnJlbWFyaykuc29ydChcbiAgICAgICAgICAgICAgICAoYSwgYikgPT4gYS5jcml0ZXJpYUF0dGVtcHRlZFRvQmVNaW5pbXVtIC0gYi5jcml0ZXJpYUF0dGVtcHRlZFRvQmVNaW5pbXVtXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgY29uc29sZS5sb2cocmVtYXJrcyk7XG4gICAgICAgICAgICBwaXhlbHNTb2x1dGlvbnMgPSByZW1hcmtzLm1hcCgocmVtYXJrKSA9PlxuICAgICAgICAgICAgICAgIHJlbWFyay5zb2x1dGlvbkZvckdhdWdlLnBpeGVscy5tYXAoXG4gICAgICAgICAgICAgICAgICAgIChwKSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgbmV3IE1hcExhdExuZyhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwLnkgKyAwLjAwNSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwLnggKyAwLjAxLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJycgKyAhcmVtYXJrLm5vdFBvc3NpYmxlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICcnICsgIXJlbWFyay5ub3RQb3NzaWJsZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgY29uc3QgdGltZURlbHRhSW5NaW51dGVzID0gc2VsZWN0ZWRHYXVnZUluUG9pbnRzWzBdLmdldFRpbWVEZWx0YUluTWludXRlcygpO1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEdhdWdlSW5Qb2ludHNEZXRhaWwgPVxuICAgICAgICAgICAgICAgICcnICtcbiAgICAgICAgICAgICAgICBzZWxlY3RlZEdhdWdlSW5Qb2ludHNbMF0uZ2F1Z2VMYWJlbCArXG4gICAgICAgICAgICAgICAgJyA+ICcgK1xuICAgICAgICAgICAgICAgIE1hdGgucm91bmQoc2VsZWN0ZWRHYXVnZUluUG9pbnRzWzBdLmdldEdhdWdlVmFsdWUoKSAqIDEwMCkgLyAxMDAgK1xuICAgICAgICAgICAgICAgICcgLyAnICtcbiAgICAgICAgICAgICAgICBNYXRoLnJvdW5kKHNlbGVjdGVkR2F1Z2VJblBvaW50c1swXS5nZXRSYWluVmFsdWUoKSAqIDEwMCkgLyAxMDAgK1xuICAgICAgICAgICAgICAgICcgZFQ9JyArXG4gICAgICAgICAgICAgICAgdGltZURlbHRhSW5NaW51dGVzO1xuXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkR2F1Z2VJblBvaW50cyA9IHNlbGVjdGVkR2F1Z2VJblBvaW50c1swXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRHYXVnZUluUG9pbnRzID0gbnVsbDtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRHYXVnZXMgPSBbXTtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRQaXhlbHMgPSBbXTtcbiAgICAgICAgICAgIHRoaXMucGl4ZWxzU29sdXRpb25zID0gW107XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnNlbGVjdGVkR2F1Z2VzID0gW1xuICAgICAgICAgICAgbmV3IE1hcExhdExuZyhcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkR2F1Z2VJblBvaW50cy5nYXVnZUNhcnRlc2lhblZhbHVlLmxhdCxcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkR2F1Z2VJblBvaW50cy5nYXVnZUNhcnRlc2lhblZhbHVlLmxuZyxcbiAgICAgICAgICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEdhdWdlSW5Qb2ludHMuZ2F1Z2VJZCxcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkR2F1Z2VJblBvaW50cy5nYXVnZUxhYmVsICtcbiAgICAgICAgICAgICAgICAgICAgJz4nICtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEdhdWdlSW5Qb2ludHMuZ2F1Z2VDYXJ0ZXNpYW5WYWx1ZS52YWx1ZSxcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkR2F1Z2VJblBvaW50cy5nYXVnZUNhcnRlc2lhblZhbHVlLnZhbHVlXG4gICAgICAgICAgICApLFxuICAgICAgICBdO1xuXG4gICAgICAgIHRoaXMuc2VsZWN0R2F1Z2VJbkNvbXBhcmUoKTtcblxuICAgICAgICBjb25zdCBwaXhlbHM6IE1hcExhdExuZ1tdID0gW107XG4gICAgICAgIGZvciAoY29uc3QgcmFpbkNhcnRlc2lhblZhbHVlIG9mIHRoaXMuc2VsZWN0ZWRHYXVnZUluUG9pbnRzLnJhaW5DYXJ0ZXNpYW5WYWx1ZXMpIHtcbiAgICAgICAgICAgIHBpeGVscy5wdXNoKFxuICAgICAgICAgICAgICAgIG5ldyBNYXBMYXRMbmcocmFpbkNhcnRlc2lhblZhbHVlLmxhdCArIDAuMDA1LCByYWluQ2FydGVzaWFuVmFsdWUubG5nICsgMC4wMSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zZWxlY3RlZFBpeGVscyA9IHBpeGVscztcblxuICAgICAgICB0aGlzLnBpeGVsc1NvbHV0aW9ucyA9IHBpeGVsc1NvbHV0aW9ucztcbiAgICB9XG5cbiAgICAvLyBSZXR1cm5zIGFsbCBncmFudWxhciBxdWFsaXR5IHBvaW50cyBhY3Jvc3MgYWxsIGRhdGVzIGluIHRoZSBwZXJpb2QgKGV4Y2x1ZGVzIGN1bXVsYXRpdmUgZW5kIGRhdGUpXG4gICAgZ2V0QWxsR3JhbnVsYXJDb21wYXJlUG9pbnRzKCk6IHtcbiAgICAgICAgZGF0ZTogRGF0ZTtcbiAgICAgICAgZ2F1Z2VOYW1lOiBzdHJpbmc7XG4gICAgICAgIGdhdWdlVmFsdWU6IG51bWJlcjtcbiAgICAgICAgcGl4ZWxWYWx1ZTogbnVtYmVyO1xuICAgIH1bXSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdDoge2RhdGU6IERhdGU7IGdhdWdlTmFtZTogc3RyaW5nOyBnYXVnZVZhbHVlOiBudW1iZXI7IHBpeGVsVmFsdWU6IG51bWJlcn1bXSA9XG4gICAgICAgICAgICBbXTtcblxuICAgICAgICBpZiAoIXRoaXMuYnVpbGRDb21wYXJlcz8uY29tcGFyZXNQZXJEYXRlPy5sZW5ndGggfHwgIXRoaXMuY29tcGFyZURhdGVzPy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBGaW5kIHRoZSBsYXN0IGRhdGUgKGN1bXVsYXRpdmUgZW5kIGRhdGUpIHRvIGV4Y2x1ZGUgaXRcbiAgICAgICAgY29uc3QgbGFzdERhdGVUaW1lID0gTWF0aC5tYXgoLi4udGhpcy5jb21wYXJlRGF0ZXMubWFwKChkKSA9PiBkLmdldFRpbWUoKSkpO1xuXG4gICAgICAgIGZvciAoY29uc3QgY29tcGFyZVBlckRhdGUgb2YgdGhpcy5idWlsZENvbXBhcmVzLmNvbXBhcmVzUGVyRGF0ZSkge1xuICAgICAgICAgICAgLy8gU2tpcCB0aGUgbGFzdCBkYXRlIHdoaWNoIGNvbnRhaW5zIGN1bXVsYXRpdmUgdmFsdWVzXG4gICAgICAgICAgICBpZiAoY29tcGFyZVBlckRhdGUuZGF0ZS5nZXRUaW1lKCkgPj0gbGFzdERhdGVUaW1lKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIWNvbXBhcmVQZXJEYXRlLmNvbXBhcmVUaW1lbGluZT8ubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBHZXQgZmlyc3QgdGltZWxpbmUgZW50cnkgKGN1cnJlbnQgc3RlcCkgZm9yIGVhY2ggZGF0ZVxuICAgICAgICAgICAgY29uc3QgY3VycmVudENvbXBhcmUgPSBjb21wYXJlUGVyRGF0ZS5jb21wYXJlVGltZWxpbmVbMF07XG4gICAgICAgICAgICBpZiAoIWN1cnJlbnRDb21wYXJlPy5xdWFsaXR5UG9pbnRzPy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZvciAoY29uc3QgcXAgb2YgY3VycmVudENvbXBhcmUucXVhbGl0eVBvaW50cykge1xuICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgZGF0ZTogY29tcGFyZVBlckRhdGUuZGF0ZSxcbiAgICAgICAgICAgICAgICAgICAgZ2F1Z2VOYW1lOiBxcC5nYXVnZUxhYmVsLFxuICAgICAgICAgICAgICAgICAgICBnYXVnZVZhbHVlOiBxcC5nZXRHYXVnZVZhbHVlKCksXG4gICAgICAgICAgICAgICAgICAgIHBpeGVsVmFsdWU6IHFwLmdldFJhaW5WYWx1ZSgpLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlc3VsdC5zb3J0KChhLCBiKSA9PiBhLmRhdGUuZ2V0VGltZSgpIC0gYi5kYXRlLmdldFRpbWUoKSk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGFzeW5jIGJ1aWxkQ29tcGFyZXNUaW1lbGluZShcbiAgICAgICAgdGFyZ2V0c09yZGVyZWQ6IElDb21wYXJlVGFyZ2V0W10sXG4gICAgICAgIHBlcmlvZDoge2JlZ2luOiBEYXRlOyBlbmQ6IERhdGV9LFxuICAgICAgICB3aXRoQ29tcGFyZUR1cGxpY2F0ZTogYm9vbGVhblxuICAgICk6IFByb21pc2U8SUNvbXBhcmVzPiB7XG4gICAgICAgIGNvbnN0IGNvbXBhcmVEYXRlcyA9IHRhcmdldHNPcmRlcmVkLm1hcCgodCkgPT4gdC5kYXRlKTtcblxuICAgICAgICBjb25zdCBxdWFsaXRpZXM6IFJhaW5Db21wdXRhdGlvblF1YWxpdHlbXSA9IGNvbXBhcmVEYXRlc1xuICAgICAgICAgICAgLmZpbHRlcigoZCkgPT4gISFkKVxuICAgICAgICAgICAgLm1hcCgoZCkgPT4gdGhpcy5nZXRSYWluQ29tcHV0YXRpb25RdWFsaXR5KGQpKVxuICAgICAgICAgICAgLmZpbHRlcigocmNxKSA9PiAhIXJjcSk7XG5cbiAgICAgICAgdGhpcy5jb21wYXJlRGF0ZXMgPSBjb21wYXJlRGF0ZXM/Lmxlbmd0aCA+IDEgPyBjb21wYXJlRGF0ZXMgOiBbcGVyaW9kLmJlZ2luLCBwZXJpb2QuZW5kXTtcbiAgICAgICAgaWYgKHRoaXMuY29tcGFyZURhdGVzWzBdLmdldFRpbWUoKSA+IHBlcmlvZC5iZWdpbi5nZXRUaW1lKCkpIHtcbiAgICAgICAgICAgIHRoaXMuY29tcGFyZURhdGVzLnVuc2hpZnQocGVyaW9kLmJlZ2luKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuYnVpbGRDb21wYXJlcyA9IFNwZWVkTWF0cml4Q29udGFpbmVyLkJ1aWxkQ29tcGFyZXMocXVhbGl0aWVzLCAhd2l0aENvbXBhcmVEdXBsaWNhdGUpO1xuICAgICAgICByZXR1cm4gdGhpcy5idWlsZENvbXBhcmVzO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBnZXRDb21wYXJlUGVyRGF0ZShkYXRlOiBEYXRlKTogSUNvbXBhcmVQZXJEYXRlIHtcbiAgICAgICAgY29uc3QgZXhpc3RpbmcgPSB0aGlzLmJ1aWxkQ29tcGFyZXMuY29tcGFyZXNQZXJEYXRlLmZpbHRlcihcbiAgICAgICAgICAgIChjKSA9PiBjLmRhdGUuZ2V0VGltZSgpID09PSBkYXRlLmdldFRpbWUoKVxuICAgICAgICApO1xuICAgICAgICBpZiAoZXhpc3RpbmcubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICByZXR1cm4gZXhpc3RpbmdbMF07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGdldEN1cnJlbnRRdWFsaXR5UG9pbnRzKGNvbXBhcmVJbmRleDogbnVtYmVyKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIHRoaXMudWlDb21wYXJlcy5sZW5ndGggPT09IDAgfHxcbiAgICAgICAgICAgIGNvbXBhcmVJbmRleCA8IDAgfHxcbiAgICAgICAgICAgIHRoaXMuY29tcGFyZU5hbWVzLmxlbmd0aCA8IGNvbXBhcmVJbmRleFxuICAgICAgICApIHtcbiAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLnVpQ29tcGFyZXNbY29tcGFyZUluZGV4XS5jb21wYXJlUG9pbnRzSGlzdG9yeTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgY2xlYW5Db21wYXJlUXVhbGl0eShkZXRhaWxzPzogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuY29tcGFyZVZlcnNpb24gPSBkZXRhaWxzO1xuICAgICAgICB0aGlzLmNvbXBhcmVOYW1lcyA9IFtdO1xuICAgICAgICB0aGlzLnVpQ29tcGFyZXMgPSBbXTtcbiAgICAgICAgdGhpcy5jb21wYXJlU3BlZWRNYXRyaXggPSBbXTtcbiAgICAgICAgdGhpcy5jb21wYXJlVHJ1c3RlZEluZGljYXRvciA9IHVuZGVmaW5lZDtcblxuICAgICAgICB0aGlzLmN1cnJlbnRRdWFsaXR5RG9uZURhdGUgPSBuZXcgRGF0ZSgtMSk7XG4gICAgICAgIHRoaXMuY3VycmVudFF1YWxpdHlMYXVuY2hlZEJ5ID0gJyc7XG4gICAgICAgIHRoaXMuY3VycmVudFF1YWxpdHlUaW1lU3BlbnRJbk1zID0gLTE7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGFzeW5jIGZldGNoUmFpbkNvbXB1dGF0aW9uUXVhbGl0aWVzKFxuICAgICAgICB0YXJnZXRzT3JkZXJlZDogSUNvbXBhcmVUYXJnZXRbXSxcbiAgICAgICAgcHJvdmlkZXI6IHN0cmluZyA9ICdSYWFpbicsXG4gICAgICAgIHRpbWVTdGVwSW5NaW51dGVzOiBudW1iZXIgPSA1LFxuICAgICAgICB0aW1lU3RlcE1vZGU6ICdlcScgfCAnbHRlJyA9ICdlcSdcbiAgICApIHtcbiAgICAgICAgZm9yIChjb25zdCB0YXJnZXQgb2YgdGFyZ2V0c09yZGVyZWQpIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5yYWluQ29tcHV0YXRpb25RdWFsaXRpZXNQZXJEYXRlW3RhcmdldC5kYXRlLnRvSVNPU3RyaW5nKCldKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IHJhaW5Db21wdXRhdGlvblF1YWxpdHk6IFJhaW5Db21wdXRhdGlvblF1YWxpdHk7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHRhcmdldC5yYWluQ29tcHV0YXRpb25DdW11bGF0aXZlSWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJhaW5Db21wdXRhdGlvblF1YWxpdHkgPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucHJvZmlsZVNlcnZpY2UuZ2V0UmFpbkN1bXVsYXRpdmVDdW11bGF0aXZlc0NvbXBhcmUoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmFpbk5vZGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldC5yYWluQ29tcHV0YXRpb25DdW11bGF0aXZlSWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3ZpZGVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lU3RlcEluTWludXRlcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZVN0ZXBNb2RlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGlmIChyYWluQ29tcHV0YXRpb25RdWFsaXR5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgaXNDb25zaXN0ZW50ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG1hdHJpY2VzID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByYWluQ29tcHV0YXRpb25RdWFsaXR5LnF1YWxpdHlTcGVlZE1hdHJpeENvbnRhaW5lci5nZXRNYXRyaWNlcygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBtYXRyaXggb2YgbWF0cmljZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW1hdHJpeC5pc0NvbnNpc3RlbnQoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0NvbnNpc3RlbnQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaXNDb25zaXN0ZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgT25lIG9mIHJhaW5Db21wdXRhdGlvblF1YWxpdHkgbWF0cmljZXMgaXMgbm90IGNvbnNpc3RlbnQgZm9yICR7dGFyZ2V0LmRhdGUudG9JU09TdHJpbmcoKX1gXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yYWluQ29tcHV0YXRpb25RdWFsaXRpZXNQZXJEYXRlW3RhcmdldC5kYXRlLnRvSVNPU3RyaW5nKCldID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByYWluQ29tcHV0YXRpb25RdWFsaXR5O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGdldFJhaW5Db21wdXRhdGlvblF1YWxpdHkoZGF0ZTogRGF0ZSk6IFJhaW5Db21wdXRhdGlvblF1YWxpdHkge1xuICAgICAgICByZXR1cm4gdGhpcy5yYWluQ29tcHV0YXRpb25RdWFsaXRpZXNQZXJEYXRlW2RhdGUudG9JU09TdHJpbmcoKV07XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIHNlbGVjdEdhdWdlSW5Db21wYXJlKCkge1xuICAgICAgICBjb25zdCBnbG9iYWxDb21wYXJlUG9pbnRzID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLmdsb2JhbENvbXBhcmVQb2ludHMpKTtcbiAgICAgICAgZm9yIChjb25zdCBwIG9mIGdsb2JhbENvbXBhcmVQb2ludHMpIHtcbiAgICAgICAgICAgIGlmIChwLmlkID09PSB0aGlzLnNlbGVjdGVkR2F1Z2VJblBvaW50cz8uZ2F1Z2VJZCkge1xuICAgICAgICAgICAgICAgIHAuciA9IDEwO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBwLnIgPSAyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuZ2xvYmFsQ29tcGFyZVBvaW50cyA9IGdsb2JhbENvbXBhcmVQb2ludHM7XG5cbiAgICAgICAgZm9yIChjb25zdCBjb21wYXJlIG9mIHRoaXMudWlDb21wYXJlcykge1xuICAgICAgICAgICAgY29uc3QgY29tcGFyZVBvaW50cyA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoY29tcGFyZS5jb21wYXJlUG9pbnRzKSk7XG4gICAgICAgICAgICBjb21wYXJlUG9pbnRzLmZvckVhY2goKHApID0+IHtcbiAgICAgICAgICAgICAgICBpZiAocC5pZCA9PT0gdGhpcy5zZWxlY3RlZEdhdWdlSW5Qb2ludHM/LmdhdWdlSWQpIHtcbiAgICAgICAgICAgICAgICAgICAgcC5yID0gMTA7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcC5yID0gMztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGNvbXBhcmUuY29tcGFyZVBvaW50cyA9IGNvbXBhcmVQb2ludHM7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgcmVzZXRTZWxlY3RlZEdhdWdlcygpIHtcbiAgICAgICAgLy8gY29uc29sZS5sb2coJ3Jlc2V0U2VsZWN0ZWRHYXVnZXMgcmVzZXQnKTtcbiAgICAgICAgdGhpcy5zZWxlY3RlZEdhdWdlID0gbnVsbDtcbiAgICAgICAgdGhpcy5zZWxlY3RlZEdhdWdlSW5Qb2ludHMgPSBudWxsO1xuICAgICAgICB0aGlzLnNlbGVjdGVkR2F1Z2VzID0gW107XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRQaXhlbHMgPSBbXTtcbiAgICAgICAgdGhpcy5waXhlbHNTb2x1dGlvbnMgPSBbXTtcbiAgICAgICAgdGhpcy5zZWxlY3RHYXVnZUluQ29tcGFyZSgpO1xuICAgIH1cbn1cbiJdfQ==
|
package/fesm2015/raain-app.mjs
CHANGED
|
@@ -809,8 +809,13 @@ class RaainConfigurationComponent {
|
|
|
809
809
|
this.minPoint = { x: 0, y: 0 };
|
|
810
810
|
this.maxPoint = { x: 300, y: 100 };
|
|
811
811
|
this.logStyle = false;
|
|
812
|
+
this.readonly = false;
|
|
813
|
+
this.createTimer = null;
|
|
812
814
|
this.onSizeChanged = () => { };
|
|
813
815
|
this.onDrag = (e) => {
|
|
816
|
+
if (this.readonly) {
|
|
817
|
+
return false;
|
|
818
|
+
}
|
|
814
819
|
this.changedPoints.emit(this.points);
|
|
815
820
|
};
|
|
816
821
|
}
|
|
@@ -842,7 +847,7 @@ class RaainConfigurationComponent {
|
|
|
842
847
|
return;
|
|
843
848
|
}
|
|
844
849
|
this.created = true;
|
|
845
|
-
let inputs = new ConfigurationElementInput(this.points, this.minPoint, this.maxPoint, false, [], this.onDrag);
|
|
850
|
+
let inputs = new ConfigurationElementInput(this.points, this.minPoint, this.maxPoint, false, [], this.onDrag, this.readonly);
|
|
846
851
|
if (this.logStyle) {
|
|
847
852
|
const confTransparency = 0.3;
|
|
848
853
|
inputs = new ConfigurationElementInput(this.points, this.minPoint, this.maxPoint, true, [
|
|
@@ -911,10 +916,11 @@ class RaainConfigurationComponent {
|
|
|
911
916
|
yStart: Math.log10(300),
|
|
912
917
|
yEnd: Math.log10(500),
|
|
913
918
|
},
|
|
914
|
-
], this.onDrag);
|
|
919
|
+
], this.onDrag, this.readonly);
|
|
915
920
|
}
|
|
916
921
|
this.ngZone.runOutsideAngular(() => {
|
|
917
|
-
setTimeout(() => {
|
|
922
|
+
this.createTimer = setTimeout(() => {
|
|
923
|
+
this.createTimer = null;
|
|
918
924
|
const factory = new ElementsFactory();
|
|
919
925
|
this.configurationElement = factory.createConfiguration(this.canvasElement.nativeElement, inputs);
|
|
920
926
|
}, 10);
|
|
@@ -923,13 +929,26 @@ class RaainConfigurationComponent {
|
|
|
923
929
|
delete() {
|
|
924
930
|
var _a, _b;
|
|
925
931
|
return __awaiter(this, void 0, void 0, function* () {
|
|
932
|
+
if (this.createTimer) {
|
|
933
|
+
clearTimeout(this.createTimer);
|
|
934
|
+
this.createTimer = null;
|
|
935
|
+
}
|
|
926
936
|
(_b = (_a = this.configurationElement) === null || _a === void 0 ? void 0 : _a.chart) === null || _b === void 0 ? void 0 : _b.destroy();
|
|
927
937
|
this.created = false;
|
|
928
938
|
});
|
|
929
939
|
}
|
|
930
940
|
change(changes) {
|
|
941
|
+
var _a;
|
|
931
942
|
return __awaiter(this, void 0, void 0, function* () {
|
|
932
|
-
//
|
|
943
|
+
// Fast path: update chart data in-place when only points changed
|
|
944
|
+
if (((_a = this.configurationElement) === null || _a === void 0 ? void 0 : _a.chart) && changes.points && Object.keys(changes).length === 1) {
|
|
945
|
+
const chart = this.configurationElement.chart;
|
|
946
|
+
chart.data.datasets.forEach((ds) => {
|
|
947
|
+
ds.data = this.points;
|
|
948
|
+
});
|
|
949
|
+
chart.update('none');
|
|
950
|
+
return;
|
|
951
|
+
}
|
|
933
952
|
yield this.delete();
|
|
934
953
|
this.create();
|
|
935
954
|
});
|
|
@@ -955,7 +974,7 @@ class RaainConfigurationComponent {
|
|
|
955
974
|
}
|
|
956
975
|
}
|
|
957
976
|
RaainConfigurationComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: RaainConfigurationComponent, deps: [{ token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Component });
|
|
958
|
-
RaainConfigurationComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: RaainConfigurationComponent, selector: "raain-configuration", inputs: { points: "points", currentHeight: "currentHeight", currentWidth: "currentWidth", minPoint: "minPoint", maxPoint: "maxPoint", logStyle: "logStyle" }, outputs: { changedPoints: "changedPoints" }, host: { listeners: { "window:resize": "onResize($event)" } }, viewQueries: [{ propertyName: "canvasElement", first: true, predicate: ["canvasElement"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<ion-grid>\n <ion-row>\n <ion-col id=\"col-container\" size-xs=\"10\">\n <div [style.height.px]=\"currentHeight\" id=\"canvas-container\">\n <canvas #canvasElement></canvas>\n </div>\n </ion-col>\n <ion-col size-xs=\"2\">\n <ion-button (click)=\"reset(2)\" color=\"light\" shape=\"round\" size=\"small\">2</ion-button>\n <br>\n <ion-button (click)=\"reset(4)\" color=\"light\" shape=\"round\" size=\"small\">4</ion-button>\n <br>\n <ion-button (click)=\"reset(6)\" color=\"light\" shape=\"round\" size=\"small\">6</ion-button>\n <br>\n </ion-col>\n </ion-row>\n</ion-grid>\n", styles: ["#canvas-container{position:relative;width:100%;height:100%}\n"], dependencies: [{ kind: "component", type: i4.IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { kind: "component", type: i4.IonCol, selector: "ion-col", inputs: ["offset", "offsetLg", "offsetMd", "offsetSm", "offsetXl", "offsetXs", "pull", "pullLg", "pullMd", "pullSm", "pullXl", "pullXs", "push", "pushLg", "pushMd", "pushSm", "pushXl", "pushXs", "size", "sizeLg", "sizeMd", "sizeSm", "sizeXl", "sizeXs"] }, { kind: "component", type: i4.IonGrid, selector: "ion-grid", inputs: ["fixed"] }, { kind: "component", type: i4.IonRow, selector: "ion-row" }] });
|
|
977
|
+
RaainConfigurationComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: RaainConfigurationComponent, selector: "raain-configuration", inputs: { points: "points", currentHeight: "currentHeight", currentWidth: "currentWidth", minPoint: "minPoint", maxPoint: "maxPoint", logStyle: "logStyle", readonly: "readonly" }, outputs: { changedPoints: "changedPoints" }, host: { listeners: { "window:resize": "onResize($event)" } }, viewQueries: [{ propertyName: "canvasElement", first: true, predicate: ["canvasElement"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<ion-grid>\n <ion-row>\n <ion-col id=\"col-container\" size-xs=\"10\">\n <div [style.height.px]=\"currentHeight\" id=\"canvas-container\">\n <canvas #canvasElement></canvas>\n </div>\n </ion-col>\n <ion-col size-xs=\"2\">\n <ion-button (click)=\"reset(2)\" color=\"light\" shape=\"round\" size=\"small\">2</ion-button>\n <br>\n <ion-button (click)=\"reset(4)\" color=\"light\" shape=\"round\" size=\"small\">4</ion-button>\n <br>\n <ion-button (click)=\"reset(6)\" color=\"light\" shape=\"round\" size=\"small\">6</ion-button>\n <br>\n </ion-col>\n </ion-row>\n</ion-grid>\n", styles: ["#canvas-container{position:relative;width:100%;height:100%}\n"], dependencies: [{ kind: "component", type: i4.IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { kind: "component", type: i4.IonCol, selector: "ion-col", inputs: ["offset", "offsetLg", "offsetMd", "offsetSm", "offsetXl", "offsetXs", "pull", "pullLg", "pullMd", "pullSm", "pullXl", "pullXs", "push", "pushLg", "pushMd", "pushSm", "pushXl", "pushXs", "size", "sizeLg", "sizeMd", "sizeSm", "sizeXl", "sizeXs"] }, { kind: "component", type: i4.IonGrid, selector: "ion-grid", inputs: ["fixed"] }, { kind: "component", type: i4.IonRow, selector: "ion-row" }] });
|
|
959
978
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: RaainConfigurationComponent, decorators: [{
|
|
960
979
|
type: Component,
|
|
961
980
|
args: [{ selector: 'raain-configuration', template: "<ion-grid>\n <ion-row>\n <ion-col id=\"col-container\" size-xs=\"10\">\n <div [style.height.px]=\"currentHeight\" id=\"canvas-container\">\n <canvas #canvasElement></canvas>\n </div>\n </ion-col>\n <ion-col size-xs=\"2\">\n <ion-button (click)=\"reset(2)\" color=\"light\" shape=\"round\" size=\"small\">2</ion-button>\n <br>\n <ion-button (click)=\"reset(4)\" color=\"light\" shape=\"round\" size=\"small\">4</ion-button>\n <br>\n <ion-button (click)=\"reset(6)\" color=\"light\" shape=\"round\" size=\"small\">6</ion-button>\n <br>\n </ion-col>\n </ion-row>\n</ion-grid>\n", styles: ["#canvas-container{position:relative;width:100%;height:100%}\n"] }]
|
|
@@ -973,6 +992,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
|
|
|
973
992
|
type: Input
|
|
974
993
|
}], logStyle: [{
|
|
975
994
|
type: Input
|
|
995
|
+
}], readonly: [{
|
|
996
|
+
type: Input
|
|
976
997
|
}], canvasElement: [{
|
|
977
998
|
type: ViewChild,
|
|
978
999
|
args: ['canvasElement']
|
|
@@ -1469,7 +1490,7 @@ class CompareManager {
|
|
|
1469
1490
|
if (!((_a = this.buildCompares) === null || _a === void 0 ? void 0 : _a.compareCumulative)) {
|
|
1470
1491
|
return new XYType(0, 0);
|
|
1471
1492
|
}
|
|
1472
|
-
const maxValue = this.buildCompares.compareCumulative.maxValue * 1.2;
|
|
1493
|
+
const maxValue = Math.max(this.buildCompares.compareCumulative.maxValue * 1.2, 1);
|
|
1473
1494
|
return new XYType(maxValue, maxValue);
|
|
1474
1495
|
}
|
|
1475
1496
|
// Default: KGE normalized 0-1 (from raain-model defaults)
|
|
@@ -1531,7 +1552,7 @@ class CompareManager {
|
|
|
1531
1552
|
date: c.date,
|
|
1532
1553
|
name: c.name,
|
|
1533
1554
|
comparePoints: c.qualityPoints.map((p) => new XYType(p.getGaugeValue(), p.getRainValue(), 2, p.gaugeLabel, p.gaugeId)),
|
|
1534
|
-
comparePointsMax: new XYType(c.maxValue * 1.2, c.maxValue * 1.2),
|
|
1555
|
+
comparePointsMax: new XYType(Math.max(c.maxValue * 1.2, 1), Math.max(c.maxValue * 1.2, 1)),
|
|
1535
1556
|
comparePointsHistory: c.qualityPointsLegacy,
|
|
1536
1557
|
remarks: c.remarks,
|
|
1537
1558
|
qualityIndicator,
|
|
@@ -1559,7 +1580,7 @@ class CompareManager {
|
|
|
1559
1580
|
return;
|
|
1560
1581
|
}
|
|
1561
1582
|
const countForAverage = targetsOrdered.length;
|
|
1562
|
-
const maxValue = this.buildCompares.compareCumulative.maxValue * 1.2;
|
|
1583
|
+
const maxValue = Math.max(this.buildCompares.compareCumulative.maxValue * 1.2, 1);
|
|
1563
1584
|
const cumulativePoints = this.buildCompares.compareCumulative.qualityPoints.map((qp) => new XYType(qp.getGaugeValue(), qp.getRainValue(), 2, qp.gaugeLabel, qp.gaugeId));
|
|
1564
1585
|
const cumulativePointsMax = new XYType(maxValue, maxValue);
|
|
1565
1586
|
// Default: KGE normalized 0-1
|