@dereekb/dbx-web 9.19.3 → 9.19.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/calendar/package.json +2 -2
- package/esm2020/mapbox/lib/mapbox.mjs +1 -1
- package/esm2020/mapbox/lib/mapbox.store.mjs +15 -3
- package/fesm2015/dereekb-dbx-web-mapbox.mjs +14 -2
- package/fesm2015/dereekb-dbx-web-mapbox.mjs.map +1 -1
- package/fesm2020/dereekb-dbx-web-mapbox.mjs +14 -2
- package/fesm2020/dereekb-dbx-web-mapbox.mjs.map +1 -1
- package/mapbox/esm2020/lib/mapbox.mjs +1 -1
- package/mapbox/esm2020/lib/mapbox.store.mjs +15 -3
- package/mapbox/fesm2015/dereekb-dbx-web-mapbox.mjs +14 -2
- package/mapbox/fesm2015/dereekb-dbx-web-mapbox.mjs.map +1 -1
- package/mapbox/fesm2020/dereekb-dbx-web-mapbox.mjs +14 -2
- package/mapbox/fesm2020/dereekb-dbx-web-mapbox.mjs.map +1 -1
- package/mapbox/lib/mapbox.d.ts +6 -1
- package/mapbox/lib/mapbox.store.d.ts +2 -1
- package/mapbox/package.json +3 -3
- package/package.json +3 -3
package/calendar/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@dereekb/dbx-web/calendar",
|
|
3
|
-
"version": "9.19.
|
|
3
|
+
"version": "9.19.4",
|
|
4
4
|
"peerDependencies": {
|
|
5
5
|
"@angular/common": "^14.2.0",
|
|
6
6
|
"@angular/core": "^14.2.0",
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
"rxjs": "^7.5.0",
|
|
9
9
|
"@angular/material": "^14.2.0",
|
|
10
10
|
"angular-calendar": "^0.30.1",
|
|
11
|
-
"@dereekb/dbx-web": "9.19.
|
|
11
|
+
"@dereekb/dbx-web": "9.19.4"
|
|
12
12
|
},
|
|
13
13
|
"dependencies": {
|
|
14
14
|
"tslib": "^2.3.0"
|
|
@@ -14,4 +14,4 @@ export const MAPBOX_MAX_ZOOM_LEVEL = 22;
|
|
|
14
14
|
export function mapboxZoomLevel(input) {
|
|
15
15
|
return Math.min(Math.max(input, MAPBOX_MIN_ZOOM_LEVEL), MAPBOX_MAX_ZOOM_LEVEL);
|
|
16
16
|
}
|
|
17
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
17
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFwYm94LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZGJ4LXdlYi9tYXBib3gvc3JjL2xpYi9tYXBib3gudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBS0EsTUFBTSxDQUFDLE1BQU0sbUJBQW1CLEdBQXVCO0lBQ3JELEVBQUU7SUFDRixvQ0FBb0M7SUFDcEMscUNBQXFDO0lBQ3JDLGtDQUFrQztJQUNsQyxpQ0FBaUM7SUFDakMscUNBQXFDO0lBQ3JDLDhDQUE4QztJQUM5QywwQ0FBMEM7SUFDMUMsNENBQTRDO0NBQzdDLENBQUM7QUFLRixNQUFNLENBQUMsTUFBTSxxQkFBcUIsR0FBb0IsQ0FBQyxDQUFDO0FBQ3hELE1BQU0sQ0FBQyxNQUFNLHFCQUFxQixHQUFvQixFQUFFLENBQUM7QUFFekQsTUFBTSxVQUFVLGVBQWUsQ0FBQyxLQUFhO0lBQzNDLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxxQkFBcUIsQ0FBQyxFQUFFLHFCQUFxQixDQUFDLENBQUM7QUFDakYsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IExhdExuZ1BvaW50SW5wdXQsIExhdExuZ0JvdW5kSW5wdXQsIFpvb21MZXZlbCwgWm9vbUxldmVsUmFuZ2UsIEV4dGVuZExhdExuZ0JvdW5kSW5wdXQgfSBmcm9tICdAZGVyZWVrYi91dGlsJztcbmltcG9ydCAqIGFzIE1hcGJveEdsIGZyb20gJ21hcGJveC1nbCc7XG5cbmV4cG9ydCB0eXBlIEtub3duTWFwYm94U3R5bGUgPSAnbWFwYm94Oi8vc3R5bGVzL21hcGJveC9zdHJlZXRzLXYxMScgfCAnbWFwYm94Oi8vc3R5bGVzL21hcGJveC9vdXRkb29ycy12MTEnIHwgJ21hcGJveDovL3N0eWxlcy9tYXBib3gvbGlnaHQtdjEwJyB8ICdtYXBib3g6Ly9zdHlsZXMvbWFwYm94L2RhcmstdjEwJyB8ICdtYXBib3g6Ly9zdHlsZXMvbWFwYm94L3NhdGVsbGl0ZS12OScgfCAnbWFwYm94Oi8vc3R5bGVzL21hcGJveC9zYXRlbGxpdGUtc3RyZWV0cy12MTEnIHwgJ21hcGJveDovL3N0eWxlcy9tYXBib3gvbmF2aWdhdGlvbi1kYXktdjEnIHwgJ21hcGJveDovL3N0eWxlcy9tYXBib3gvbmF2aWdhdGlvbi1uaWdodC12MSc7XG5cbmV4cG9ydCBjb25zdCBLTk9XTl9NQVBCT1hfU1RZTEVTOiBLbm93bk1hcGJveFN0eWxlW10gPSBbXG4gIC8vXG4gICdtYXBib3g6Ly9zdHlsZXMvbWFwYm94L3N0cmVldHMtdjExJyxcbiAgJ21hcGJveDovL3N0eWxlcy9tYXBib3gvb3V0ZG9vcnMtdjExJyxcbiAgJ21hcGJveDovL3N0eWxlcy9tYXBib3gvbGlnaHQtdjEwJyxcbiAgJ21hcGJveDovL3N0eWxlcy9tYXBib3gvZGFyay12MTAnLFxuICAnbWFwYm94Oi8vc3R5bGVzL21hcGJveC9zYXRlbGxpdGUtdjknLFxuICAnbWFwYm94Oi8vc3R5bGVzL21hcGJveC9zYXRlbGxpdGUtc3RyZWV0cy12MTEnLFxuICAnbWFwYm94Oi8vc3R5bGVzL21hcGJveC9uYXZpZ2F0aW9uLWRheS12MScsXG4gICdtYXBib3g6Ly9zdHlsZXMvbWFwYm94L25hdmlnYXRpb24tbmlnaHQtdjEnXG5dO1xuXG5leHBvcnQgdHlwZSBNYXBib3hab29tTGV2ZWwgPSBab29tTGV2ZWw7XG5leHBvcnQgdHlwZSBNYXBib3hab29tTGV2ZWxSYW5nZSA9IFpvb21MZXZlbFJhbmdlO1xuXG5leHBvcnQgY29uc3QgTUFQQk9YX01JTl9aT09NX0xFVkVMOiBNYXBib3hab29tTGV2ZWwgPSAwO1xuZXhwb3J0IGNvbnN0IE1BUEJPWF9NQVhfWk9PTV9MRVZFTDogTWFwYm94Wm9vbUxldmVsID0gMjI7XG5cbmV4cG9ydCBmdW5jdGlvbiBtYXBib3hab29tTGV2ZWwoaW5wdXQ6IG51bWJlcik6IE1hcGJveFpvb21MZXZlbCB7XG4gIHJldHVybiBNYXRoLm1pbihNYXRoLm1heChpbnB1dCwgTUFQQk9YX01JTl9aT09NX0xFVkVMKSwgTUFQQk9YX01BWF9aT09NX0xFVkVMKTtcbn1cblxuZXhwb3J0IHR5cGUgTWFwYm94UGl0Y2ggPSBudW1iZXI7XG5leHBvcnQgdHlwZSBNYXBib3hCZWFyaW5nID0gbnVtYmVyO1xuXG4vKipcbiAqIFNpemUgb2YgdGhlIHRpbGVzLiBWZWN0b3ItYmFzZWQgdGlsZXMgdXNlZCBieSB0aGUgd2ViIGFyZSBnZW5lcmFsbHkgNTEyeDUxMiwgYW5kIGxlZ2FjeSBvbmVzIGFyZSAyNTZ4MjU2LlxuICpcbiAqIGh0dHBzOi8vYmxvZy5tYXBib3guY29tLzUxMi1tYXAtdGlsZXMtY2I1YmZkNmU3MmJhXG4gKi9cbmV4cG9ydCB0eXBlIE1hcGJveFRpbGVTaXplID0gNTEyIHwgMjU2O1xuXG5leHBvcnQgdHlwZSBEYnhNYXBib3hDbGlja0V2ZW50ID0gTWFwYm94R2wuTWFwTW91c2VFdmVudCAmIE1hcGJveEdsLkV2ZW50RGF0YTtcblxuZXhwb3J0IGludGVyZmFjZSBNYXBib3hTdHlsZUNvbmZpZyB7XG4gIHN0eWxlOiBNYXBib3hHbC5TdHlsZSB8IHN0cmluZztcbiAgb3B0aW9ucz86IHtcbiAgICBkaWZmPzogYm9vbGVhbiB8IHVuZGVmaW5lZDtcbiAgICBsb2NhbElkZW9ncmFwaEZvbnRGYW1pbHk/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIH07XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTWFwYm94Rml0UG9zaXRpb25zIHtcbiAgcG9zaXRpb25zOiBFeHRlbmRMYXRMbmdCb3VuZElucHV0O1xuICBvcHRpb25zPzogbWFwYm94Z2wuRml0Qm91bmRzT3B0aW9ucztcbiAgZXZlbnREYXRhPzogbWFwYm94Z2wuRXZlbnREYXRhO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE1hcGJveEZpdEJvdW5kcyB7XG4gIGJvdW5kczogTGF0TG5nQm91bmRJbnB1dDtcbiAgb3B0aW9ucz86IG1hcGJveGdsLkZpdEJvdW5kc09wdGlvbnM7XG4gIGV2ZW50RGF0YT86IG1hcGJveGdsLkV2ZW50RGF0YTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBNYXBib3hKdW1wVG9Qb3NpdGlvbk9wdGlvbnMgZXh0ZW5kcyBPbWl0PE1hcGJveEdsLkNhbWVyYU9wdGlvbnMsICdjZW50ZXInPiB7XG4gIGNlbnRlcjogTGF0TG5nUG9pbnRJbnB1dDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBNYXBib3hKdW1wVG8ge1xuICBjZW50ZXI/OiBMYXRMbmdQb2ludElucHV0O1xuICB0bz86IE1hcGJveEp1bXBUb1Bvc2l0aW9uT3B0aW9ucztcbiAgZXZlbnREYXRhPzogbWFwYm94Z2wuRXZlbnREYXRhO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE1hcGJveEVhc2VUb1Bvc2l0aW9uT3B0aW9ucyBleHRlbmRzIE9taXQ8TWFwYm94R2wuRWFzZVRvT3B0aW9ucywgJ2NlbnRlcic+LCBNYXBib3hKdW1wVG9Qb3NpdGlvbk9wdGlvbnMge31cblxuZXhwb3J0IGludGVyZmFjZSBNYXBib3hFYXNlVG8ge1xuICBjZW50ZXI/OiBMYXRMbmdQb2ludElucHV0O1xuICB0bz86IE1hcGJveEVhc2VUb1Bvc2l0aW9uT3B0aW9ucztcbiAgZXZlbnREYXRhPzogbWFwYm94Z2wuRXZlbnREYXRhO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE1hcGJveEZseVRvUG9zaXRpb25PcHRpb25zIGV4dGVuZHMgT21pdDxNYXBib3hHbC5GbHlUb09wdGlvbnMsICdjZW50ZXInPiwgTWFwYm94SnVtcFRvUG9zaXRpb25PcHRpb25zIHt9XG5cbmV4cG9ydCBpbnRlcmZhY2UgTWFwYm94Rmx5VG8ge1xuICBjZW50ZXI/OiBMYXRMbmdQb2ludElucHV0O1xuICB0bz86IE1hcGJveEZseVRvUG9zaXRpb25PcHRpb25zO1xuICBldmVudERhdGE/OiBtYXBib3hnbC5FdmVudERhdGE7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTWFwYm94Um90YXRlVG8ge1xuICBiZWFyaW5nOiBNYXBib3hCZWFyaW5nO1xuICBvcHRpb25zPzogbWFwYm94Z2wuQW5pbWF0aW9uT3B0aW9ucztcbiAgZXZlbnREYXRhPzogbWFwYm94Z2wuRXZlbnREYXRhO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE1hcGJveFJlc2V0Tm9ydGgge1xuICBvcHRpb25zPzogbWFwYm94Z2wuQW5pbWF0aW9uT3B0aW9ucztcbiAgZXZlbnREYXRhPzogbWFwYm94Z2wuRXZlbnREYXRhO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE1hcGJveFJlc2V0Tm9ydGhQaXRjaCB7XG4gIG9wdGlvbnM/OiBtYXBib3hnbC5BbmltYXRpb25PcHRpb25zO1xuICBldmVudERhdGE/OiBtYXBib3hnbC5FdmVudERhdGE7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTWFwYm94U25hcFRvTm9ydGgge1xuICBvcHRpb25zPzogbWFwYm94Z2wuQW5pbWF0aW9uT3B0aW9ucztcbiAgZXZlbnREYXRhPzogbWFwYm94Z2wuRXZlbnREYXRhO1xufVxuIl19
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { cleanup, filterMaybe, onTrueToFalse } from '@dereekb/rxjs';
|
|
2
2
|
import { Inject, Injectable } from '@angular/core';
|
|
3
|
-
import { isSameLatLngBound, isSameLatLngPoint, isWithinLatLngBoundFunction, latLngBoundFunction, latLngPointFunction, overlapsLatLngBoundFunction, diffLatLngBoundPoints, latLngBoundCenterPoint, addLatLngPoints, isDefaultLatLngPoint, swMostLatLngPoint, neMostLatLngPoint, latLngBoundWrapsMap, vectorsAreEqual, filterUndefinedValues } from '@dereekb/util';
|
|
3
|
+
import { isSameLatLngBound, isSameLatLngPoint, isWithinLatLngBoundFunction, latLngBoundFunction, latLngPointFunction, overlapsLatLngBoundFunction, diffLatLngBoundPoints, latLngBoundCenterPoint, addLatLngPoints, isDefaultLatLngPoint, swMostLatLngPoint, neMostLatLngPoint, latLngBoundWrapsMap, vectorsAreEqual, filterUndefinedValues, latLngBoundFromInput } from '@dereekb/util';
|
|
4
4
|
import { ComponentStore } from '@ngrx/component-store';
|
|
5
|
-
import { defaultIfEmpty, distinctUntilChanged, filter, map, shareReplay, switchMap, tap, NEVER, of, startWith, interval, first, combineLatest } from 'rxjs';
|
|
5
|
+
import { defaultIfEmpty, distinctUntilChanged, filter, map, shareReplay, switchMap, tap, NEVER, of, startWith, interval, first, combineLatest, EMPTY } from 'rxjs';
|
|
6
6
|
import * as MapboxGl from 'mapbox-gl';
|
|
7
7
|
import { DbxMapboxService } from './mapbox.service';
|
|
8
8
|
import { mapboxViewportBoundFunction } from './mapbox.util';
|
|
@@ -213,6 +213,18 @@ export class DbxMapboxMapStore extends ComponentStore {
|
|
|
213
213
|
return this.mapInstance$.pipe(tap((map) => map.snapToNorth(snap?.options, snap?.eventData)));
|
|
214
214
|
}));
|
|
215
215
|
});
|
|
216
|
+
this.fitPositions = this.effect((input) => {
|
|
217
|
+
return input.pipe(switchMap((x) => {
|
|
218
|
+
const boundFromInput = latLngBoundFromInput(x.positions);
|
|
219
|
+
if (boundFromInput) {
|
|
220
|
+
const bound = this.latLngBound(boundFromInput);
|
|
221
|
+
return this.mapInstance$.pipe(tap((map) => map.fitBounds(new MapboxGl.LngLatBounds(bound.sw, bound.ne), x.options, x.eventData)));
|
|
222
|
+
}
|
|
223
|
+
else {
|
|
224
|
+
return EMPTY;
|
|
225
|
+
}
|
|
226
|
+
}));
|
|
227
|
+
});
|
|
216
228
|
this.fitBounds = this.effect((input) => {
|
|
217
229
|
return input.pipe(switchMap((x) => {
|
|
218
230
|
const bound = this.latLngBound(x.bounds);
|
|
@@ -416,4 +428,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImpo
|
|
|
416
428
|
type: Inject,
|
|
417
429
|
args: [DbxMapboxService]
|
|
418
430
|
}] }]; } });
|
|
419
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFwYm94LnN0b3JlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZGJ4LXdlYi9tYXBib3gvc3JjL2xpYi9tYXBib3guc3RvcmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE9BQU8sRUFBRSxXQUFXLEVBQUUsYUFBYSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3BFLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFhLE1BQU0sZUFBZSxDQUFDO0FBQzlELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxpQkFBaUIsRUFBK0IsMkJBQTJCLEVBQWUsbUJBQW1CLEVBQWlDLG1CQUFtQixFQUFzQywyQkFBMkIsRUFBRSxxQkFBcUIsRUFBRSxzQkFBc0IsRUFBRSxlQUFlLEVBQUUsb0JBQW9CLEVBQUUsaUJBQWlCLEVBQUUsaUJBQWlCLEVBQUUsbUJBQW1CLEVBQVUsZUFBZSxFQUFFLHFCQUFxQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3ZkLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUV2RCxPQUFPLEVBQUUsY0FBYyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFjLEVBQUUsRUFBZ0IsU0FBUyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsYUFBYSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3RMLE9BQU8sS0FBSyxRQUFRLE1BQU0sV0FBVyxDQUFDO0FBRXRDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRXBELE9BQU8sRUFBRSwyQkFBMkIsRUFBK0IsTUFBTSxlQUFlLENBQUM7OztBQW9FekY7O0dBRUc7QUFFSCxNQUFNLE9BQU8saUJBQWtCLFNBQVEsY0FBbUM7SUFLeEUsWUFBdUQsZ0JBQWtDO1FBQ3ZGLEtBQUssQ0FBQztZQUNKLGNB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TSxJQUFJLEdBQUcscUJBQXFCLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQ2pELE1BQU0sTUFBTSxHQUFHLHNCQUFzQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBRTlDLE1BQU0sV0FBVyxHQUFHLE1BQU0sQ0FBQyxVQUFVLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDLFVBQVU7WUFDdEUsTUFBTSxRQUFRLEdBQUcsTUFBTSxDQUFDLFNBQVMsR0FBRyxXQUFXLENBQUMsQ0FBQyxpQkFBaUI7WUFDbEUsTUFBTSxhQUFhLEdBQUcsUUFBUSxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxhQUFhO1lBQ2hFLE1BQU0sdUJBQXVCLEdBQUcsSUFBSSxDQUFDLEdBQUcsR0FBRyxhQUFhLENBQUMsQ0FBQyxhQUFhO1lBRXZFLE1BQU0sZUFBZSxHQUFnQjtnQkFDbkMsR0FBRyxFQUFFLENBQUM7Z0JBQ04sR0FBRyxFQUFFLHVCQUF1QixHQUFHLENBQUM7YUFDakMsQ0FBQztZQUVGLE1BQU0sU0FBUyxHQUFHLGVBQWUsQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLGVBQWUsQ0FBQyxDQUFDO1lBQzlELFNBQVMsQ0FBQyxHQUFHLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLHlCQUF5QjtZQUVyRCxvR0FBb0c7WUFFcEcsT0FBTyxTQUFTLENBQUM7UUFDbkIsQ0FBQyxDQUFDLENBQ0gsQ0FDRixDQUNGLENBQUM7SUFDSixDQUFDOzsrR0F6YVUsaUJBQWlCLGtCQUtSLGdCQUFnQjttSEFMekIsaUJBQWlCOzRGQUFqQixpQkFBaUI7a0JBRDdCLFVBQVU7OzBCQU1JLE1BQU07MkJBQUMsZ0JBQWdCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY2xlYW51cCwgZmlsdGVyTWF5YmUsIG9uVHJ1ZVRvRmFsc2UgfSBmcm9tICdAZGVyZWVrYi9yeGpzJztcbmltcG9ydCB7IEluamVjdCwgSW5qZWN0YWJsZSwgT25EZXN0cm95IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBpc1NhbWVMYXRMbmdCb3VuZCwgaXNTYW1lTGF0TG5nUG9pbnQsIElzV2l0aGluTGF0TG5nQm91bmRGdW5jdGlvbiwgaXNXaXRoaW5MYXRMbmdCb3VuZEZ1bmN0aW9uLCBMYXRMbmdCb3VuZCwgbGF0TG5nQm91bmRGdW5jdGlvbiwgTGF0TG5nUG9pbnRJbnB1dCwgTGF0TG5nUG9pbnQsIGxhdExuZ1BvaW50RnVuY3Rpb24sIE1heWJlLCBPdmVybGFwc0xhdExuZ0JvdW5kRnVuY3Rpb24sIG92ZXJsYXBzTGF0TG5nQm91bmRGdW5jdGlvbiwgZGlmZkxhdExuZ0JvdW5kUG9pbnRzLCBsYXRMbmdCb3VuZENlbnRlclBvaW50LCBhZGRMYXRMbmdQb2ludHMsIGlzRGVmYXVsdExhdExuZ1BvaW50LCBzd01vc3RMYXRMbmdQb2ludCwgbmVNb3N0TGF0TG5nUG9pbnQsIGxhdExuZ0JvdW5kV3JhcHNNYXAsIFZlY3RvciwgdmVjdG9yc0FyZUVxdWFsLCBmaWx0ZXJVbmRlZmluZWRWYWx1ZXMgfSBmcm9tICdAZGVyZWVrYi91dGlsJztcbmltcG9ydCB7IENvbXBvbmVudFN0b3JlIH0gZnJvbSAnQG5ncngvY29tcG9uZW50LXN0b3JlJztcbmltcG9ydCB7IE1hcFNlcnZpY2UgfSBmcm9tICduZ3gtbWFwYm94LWdsJztcbmltcG9ydCB7IGRlZmF1bHRJZkVtcHR5LCBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgZmlsdGVyLCBtYXAsIHNoYXJlUmVwbGF5LCBzd2l0Y2hNYXAsIHRhcCwgTkVWRVIsIE9ic2VydmFibGUsIG9mLCBTdWJzY3JpcHRpb24sIHN0YXJ0V2l0aCwgaW50ZXJ2YWwsIGZpcnN0LCBjb21iaW5lTGF0ZXN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgKiBhcyBNYXBib3hHbCBmcm9tICdtYXBib3gtZ2wnO1xuaW1wb3J0IHsgRGJ4TWFwYm94Q2xpY2tFdmVudCwgS25vd25NYXBib3hTdHlsZSwgTWFwYm94QmVhcmluZywgTWFwYm94RWFzZVRvLCBNYXBib3hGaXRCb3VuZHMsIE1hcGJveEZseVRvLCBNYXBib3hKdW1wVG8sIE1hcGJveFJlc2V0Tm9ydGgsIE1hcGJveFJlc2V0Tm9ydGhQaXRjaCwgTWFwYm94Um90YXRlVG8sIE1hcGJveFNuYXBUb05vcnRoLCBNYXBib3hTdHlsZUNvbmZpZywgTWFwYm94Wm9vbUxldmVsLCBNYXBib3hab29tTGV2ZWxSYW5nZSB9IGZyb20gJy4vbWFwYm94JztcbmltcG9ydCB7IERieE1hcGJveFNlcnZpY2UgfSBmcm9tICcuL21hcGJveC5zZXJ2aWNlJztcbmltcG9ydCB7IERieEluamVjdGlvbkNvbXBvbmVudENvbmZpZyB9IGZyb20gJ0BkZXJlZWtiL2RieC1jb3JlJztcbmltcG9ydCB7IG1hcGJveFZpZXdwb3J0Qm91bmRGdW5jdGlvbiwgTWFwYm94Vmlld3BvcnRCb3VuZEZ1bmN0aW9uIH0gZnJvbSAnLi9tYXBib3gudXRpbCc7XG5cbmV4cG9ydCB0eXBlIE1hcGJveE1hcExpZmVjeWNsZVN0YXRlID0gJ2luaXQnIHwgJ2xvYWQnIHwgJ3JlbmRlcicgfCAnaWRsZSc7XG5leHBvcnQgdHlwZSBNYXBib3hNYXBNb3ZlU3RhdGUgPSAnaW5pdCcgfCAnaWRsZScgfCAnbW92aW5nJztcbmV4cG9ydCB0eXBlIE1hcGJveE1hcFpvb21TdGF0ZSA9ICdpbml0JyB8ICdpZGxlJyB8ICd6b29taW5nJztcbmV4cG9ydCB0eXBlIE1hcGJveE1hcFJvdGF0ZVN0YXRlID0gJ2luaXQnIHwgJ2lkbGUnIHwgJ3JvdGF0aW5nJztcblxuZXhwb3J0IGludGVyZmFjZSBTdHJpbmdNYXBib3hMaXN0ZW5lclBhaXIge1xuICB0eXBlOiBzdHJpbmc7XG4gIGxpc3RlbmVyOiAoZXY6IE1hcGJveEdsLkV2ZW50RGF0YSkgPT4gdm9pZDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBUeXBlZE1hcGJveExpc3RlbmVyUGFpcjxUIGV4dGVuZHMga2V5b2YgTWFwYm94R2wuTWFwRXZlbnRUeXBlPiB7XG4gIHR5cGU6IFQ7XG4gIGxpc3RlbmVyOiAoZXY6IE1hcGJveEdsLk1hcEV2ZW50VHlwZVtUXSAmIE1hcGJveEdsLkV2ZW50RGF0YSkgPT4gdm9pZDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBEYnhNYXBib3hNYXJnaW5DYWxjdWxhdGlvblNpemluZyB7XG4gIGxlZnRNYXJnaW46IG51bWJlcjtcbiAgcmlnaHRNYXJnaW46IG51bWJlcjtcbiAgZnVsbFdpZHRoOiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGJ4TWFwYm94U3RvcmVTdGF0ZSB7XG4gIC8qKlxuICAgKiBDdXJyZW50IE1hcFNlcnZpY2UgYmVpbmcgdXRpbGl6ZWQuXG4gICAqL1xuICBtYXBTZXJ2aWNlPzogTWF5YmU8TWFwU2VydmljZT47XG4gIGxpZmVjeWNsZVN0YXRlOiBNYXBib3hNYXBMaWZlY3ljbGVTdGF0ZTtcbiAgbW92ZVN0YXRlOiBNYXBib3hNYXBNb3ZlU3RhdGU7XG4gIHpvb21TdGF0ZTogTWFwYm94TWFwWm9vbVN0YXRlO1xuICByb3RhdGVTdGF0ZTogTWFwYm94TWFwUm90YXRlU3RhdGU7XG4gIC8qKlxuICAgKiBWaXN1YWwgY29udGFpbmVyIHNpemUgb2YgdGhlIG1hcC5cbiAgICovXG4gIG1hcENhbnZhc1NpemU/OiBNYXliZTxWZWN0b3I+O1xuICAvKipcbiAgICogTGF0ZXN0IGNsaWNrIGV2ZW50XG4gICAqL1xuICBjbGlja0V2ZW50PzogTWF5YmU8RGJ4TWFwYm94Q2xpY2tFdmVudD47XG4gIC8qKlxuICAgKiBMYXRlc3QgZG91YmxlLWNsaWNrIGV2ZW50XG4gICAqL1xuICBkb3VibGVDbGlja0V2ZW50PzogTWF5YmU8RGJ4TWFwYm94Q2xpY2tFdmVudD47XG4gIC8qKlxuICAgKiBMYXRlc3QgY29udGV4dG1lbnUgZXZlbnQuXG4gICAqL1xuICByaWdodENsaWNrRXZlbnQ/OiBNYXliZTxEYnhNYXBib3hDbGlja0V2ZW50PjtcbiAgLyoqXG4gICAqIFdoZXRoZXIgb3Igbm90IHRvIHJldGFpbiBjb250ZW50IGJldHdlZW4gcmVzZXRzLlxuICAgKlxuICAgKiBUcnVlIGJ5IGRlZmF1bHQuXG4gICAqL1xuICByZXRhaW5Db250ZW50OiBib29sZWFuO1xuICAvKipcbiAgICogQ3VzdG9tIGNvbnRlbnQgY29uZmlndXJhdGlvbi5cbiAgICovXG4gIGNvbnRlbnQ/OiBNYXliZTxEYnhJbmplY3Rpb25Db21wb25lbnRDb25maWc8dW5rbm93bj4+O1xuICAvKipcbiAgICogTGF0ZXN0IGVycm9yXG4gICAqL1xuICBlcnJvcj86IE1heWJlPEVycm9yPjtcbiAgLyoqXG4gICAqIE1hcCBtYXJnaW4vb2Zmc2V0XG4gICAqL1xuICBtYXJnaW4/OiBNYXliZTxEYnhNYXBib3hNYXJnaW5DYWxjdWxhdGlvblNpemluZz47XG59XG5cbi8qKlxuICogU3RvcmUgdXNlZCBmb3IgcmV0cmlldmluZyBpbmZvcm1hdGlvbi5cbiAqL1xuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIERieE1hcGJveE1hcFN0b3JlIGV4dGVuZHMgQ29tcG9uZW50U3RvcmU8RGJ4TWFwYm94U3RvcmVTdGF0ZT4gaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuICBwcml2YXRlIHNhZmVMYXRMbmdQb2ludCA9IGxhdExuZ1BvaW50RnVuY3Rpb24oeyB3cmFwOiB0cnVlIH0pO1xuICBwcml2YXRlIGxhdExuZ1BvaW50ID0gbGF0TG5nUG9pbnRGdW5jdGlvbih7IHdyYXA6IGZhbHNlLCB2YWxpZGF0ZTogZmFsc2UgfSk7XG4gIHByaXZhdGUgbGF0TG5nQm91bmQgPSBsYXRMbmdCb3VuZEZ1bmN0aW9uKHsgcG9pbnRGdW5jdGlvbjogdGhpcy5sYXRMbmdQb2ludCB9KTtcblxuICBjb25zdHJ1Y3RvcihASW5qZWN0KERieE1hcGJveFNlcnZpY2UpIHByaXZhdGUgcmVhZG9ubHkgZGJ4TWFwYm94U2VydmljZTogRGJ4TWFwYm94U2VydmljZSkge1xuICAgIHN1cGVyKHtcbiAgICAgIGxpZmVjeWNsZVN0YXRlOiAnaW5pdCcsXG4gICAgICBtb3ZlU3RhdGU6ICdpbml0JyxcbiAgICAgIHpvb21TdGF0ZTogJ2luaXQnLFxuICAgICAgcm90YXRlU3RhdGU6ICdpbml0JyxcbiAgICAgIHJldGFpbkNvbnRlbnQ6IHRydWVcbiAgICB9KTtcbiAgfVxuXG4gIC8vIE1BUks6IEVmZmVjdHNcbiAgcmVhZG9ubHkgc2V0TWFwU2VydmljZSA9IHRoaXMuZWZmZWN0KChpbnB1dDogT2JzZXJ2YWJsZTxNYXliZTxNYXBTZXJ2aWNlPj4pID0+IHtcbiAgICByZXR1cm4gaW5wdXQucGlwZShcbiAgICAgIHN3aXRjaE1hcCgoc2VydmljZTogTWF5YmU8TWFwU2VydmljZT4pID0+IHtcbiAgICAgICAgdGhpcy5fc2V0TWFwU2VydmljZShzZXJ2aWNlKTtcblxuICAgICAgICBpZiAoIXNlcnZpY2UpIHtcbiAgICAgICAgICByZXR1cm4gTkVWRVI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIHNlcnZpY2UubWFwTG9hZGVkJC5waXBlKFxuICAgICAgICAgICAgZGVmYXVsdElmRW1wdHkodW5kZWZpbmVkKSxcbiAgICAgICAgICAgIG1hcCgoKSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMuX3NldExpZmVjeWNsZVN0YXRlKCdpZGxlJyk7XG4gICAgICAgICAgICAgIHRoaXMuX3NldE1vdmVTdGF0ZSgnaWRsZScpO1xuICAgICAgICAgICAgICB0aGlzLl9zZXRab29tU3RhdGUoJ2lkbGUnKTtcbiAgICAgICAgICAgICAgdGhpcy5fc2V0Um90YXRlU3RhdGUoJ2lkbGUnKTtcblxuICAgICAgICAgICAgICBjb25zdCBtYXAgPSBzZXJ2aWNlLm1hcEluc3RhbmNlO1xuXG4gICAgICAgICAgICAgIGNvbnN0IGxpc3RlbmVyUGFpcnM6IFN0cmluZ01hcGJveExpc3RlbmVyUGFpcltdID0gW107XG5cbiAgICAgICAgICAgICAgZnVuY3Rpb24gYWRkTGlzdGVuZXI8VCBleHRlbmRzIGtleW9mIE1hcGJveEdsLk1hcEV2ZW50VHlwZT4odHlwZTogVCwgbGlzdGVuZXI6IChldjogTWFwYm94R2wuTWFwRXZlbnRUeXBlW1RdICYgTWFwYm94R2wuRXZlbnREYXRhKSA9PiB2b2lkKSB7XG4gICAgICAgICAgICAgICAgbWFwLm9uKHR5cGUsIGxpc3RlbmVyKTtcbiAgICAgICAgICAgICAgICBsaXN0ZW5lclBhaXJzLnB1c2goeyB0eXBlLCBsaXN0ZW5lciB9IGFzIFN0cmluZ01hcGJveExpc3RlbmVyUGFpcik7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBhZGRMaXN0ZW5lcignaWRsZScsICgpID0+IHRoaXMuX3NldExpZmVjeWNsZVN0YXRlKCdpZGxlJykpO1xuICAgICAgICAgICAgICBhZGRMaXN0ZW5lcigncmVuZGVyJywgKCkgPT4gdGhpcy5fc2V0TGlmZWN5Y2xlU3RhdGUoJ3JlbmRlcicpKTtcbiAgICAgICAgICAgICAgYWRkTGlzdGVuZXIoJ2Vycm9yJywgKHgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9zZXRFcnJvcih4LmVycm9yKTtcbiAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgYWRkTGlzdGVuZXIoJ21vdmVzdGFydCcsICgpID0+IHRoaXMuX3NldE1vdmVTdGF0ZSgnbW92aW5nJykpO1xuICAgICAgICAgICAgICBhZGRMaXN0ZW5lcignbW92ZWVuZCcsICgpID0+IHRoaXMuX3NldE1vdmVTdGF0ZSgnaWRsZScpKTtcblxuICAgICAgICAgICAgICBhZGRMaXN0ZW5lcignem9vbXN0YXJ0JywgKCkgPT4gdGhpcy5fc2V0Wm9vbVN0YXRlKCd6b29taW5nJykpO1xuICAgICAgICAgICAgICBhZGRMaXN0ZW5lcignem9vbWVuZCcsICgpID0+IHRoaXMuX3NldFpvb21TdGF0ZSgnaWRsZScpKTtcblxuICAgICAgICAgICAgICBhZGRMaXN0ZW5lcigncm90YXRlc3RhcnQnLCAoKSA9PiB0aGlzLl9zZXRSb3RhdGVTdGF0ZSgncm90YXRpbmcnKSk7XG4gICAgICAgICAgICAgIGFkZExpc3RlbmVyKCdyb3RhdGVlbmQnLCAoKSA9PiB0aGlzLl9zZXRSb3RhdGVTdGF0ZSgnaWRsZScpKTtcblxuICAgICAgICAgICAgICBhZGRMaXN0ZW5lcignY2xpY2snLCAoeCkgPT4gdGhpcy5fc2V0Q2xpY2tFdmVudCh4KSk7XG4gICAgICAgICAgICAgIGFkZExpc3RlbmVyKCdkYmxjbGljaycsICh4KSA9PiB0aGlzLl9zZXREb3VibGVDbGlja0V2ZW50KHgpKTtcbiAgICAgICAgICAgICAgYWRkTGlzdGVuZXIoJ2NvbnRleHRtZW51JywgKHgpID0+IHRoaXMuX3NldFJpZ2h0Q2xpY2tFdmVudCh4KSk7XG5cbiAgICAgICAgICAgICAgY29uc3QgcmVmcmVzaEZvclJlc2l6ZSA9ICgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCB7IGNsaWVudFdpZHRoOiB4LCBjbGllbnRIZWlnaHQ6IHkgfSA9IG1hcC5nZXRDYW52YXMoKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9zZXRNYXBDYW52YXNTaXplKHsgeCwgeSB9KTtcbiAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICBhZGRMaXN0ZW5lcigncmVzaXplJywgcmVmcmVzaEZvclJlc2l6ZSk7XG4gICAgICAgICAgICAgIHJlZnJlc2hGb3JSZXNpemUoKTtcblxuICAgICAgICAgICAgICBjb25zdCBzdWJzOiBTdWJzY3JpcHRpb25bXSA9IFtdO1xuXG4gICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgc2VydmljZSxcbiAgICAgICAgICAgICAgICBsaXN0ZW5lclBhaXJzLFxuICAgICAgICAgICAgICAgIHN1YnNcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfSksXG4gICAgICBjbGVhbnVwKCh7IHNlcnZpY2UsIGxpc3RlbmVyUGFpcnMsIHN1YnMgfSkgPT4ge1xuICAgICAgICBjb25zdCBtYXAgPSBzZXJ2aWNlLm1hcEluc3RhbmNlO1xuXG4gICAgICAgIGlmIChtYXApIHtcbiAgICAgICAgICBsaXN0ZW5lclBhaXJzLmZvckVhY2goKHgpID0+IHtcbiAgICAgICAgICAgIG1hcC5vZmYoeC50eXBlLCB4Lmxpc3RlbmVyKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHN1YnMuZm9yRWFjaCgoc3ViKSA9PiBzdWIudW5zdWJzY3JpYmUoKSk7XG4gICAgICB9KVxuICAgICk7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IHNldFN0eWxlID0gdGhpcy5lZmZlY3QoKGlucHV0OiBPYnNlcnZhYmxlPE1hcGJveFN0eWxlQ29uZmlnIHwgS25vd25NYXBib3hTdHlsZSB8IHN0cmluZz4pID0+IHtcbiAgICByZXR1cm4gaW5wdXQucGlwZShcbiAgICAgIHN3aXRjaE1hcCgoc3R5bGUpID0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWFwSW5zdGFuY2UkLnBpcGUoXG4gICAgICAgICAgdGFwKChtYXApID0+IHtcbiAgICAgICAgICAgIGlmICh0eXBlb2Ygc3R5bGUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgIG1hcC5zZXRTdHlsZShzdHlsZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBtYXAuc2V0U3R5bGUoc3R5bGUuc3R5bGUsIHN0eWxlLm9wdGlvbnMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgICB9KVxuICAgICk7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IHNldENlbnRlciA9IHRoaXMuZWZmZWN0KChpbnB1dDogT2JzZXJ2YWJsZTxMYXRMbmdQb2ludElucHV0PikgPT4ge1xuICAgIHJldHVybiBpbnB1dC5waXBlKFxuICAgICAgc3dpdGNoTWFwKChjZW50ZXI6IExhdExuZ1BvaW50SW5wdXQpID0+IHtcbiAgICAgICAgY29uc3QgY2VudGVyUG9pbnQgPSB0aGlzLnNhZmVMYXRMbmdQb2ludChjZW50ZXIpO1xuICAgICAgICByZXR1cm4gdGhpcy5tYXBJbnN0YW5jZSQucGlwZSh0YXAoKG1hcCkgPT4gbWFwLnNldENlbnRlcihjZW50ZXJQb2ludCkpKTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfSk7XG5cbiAgcmVhZG9ubHkgc2V0Wm9vbSA9IHRoaXMuZWZmZWN0KChpbnB1dDogT2JzZXJ2YWJsZTxNYXBib3hab29tTGV2ZWw+KSA9PiB7XG4gICAgcmV0dXJuIGlucHV0LnBpcGUoXG4gICAgICBzd2l0Y2hNYXAoKHpvb206IE1hcGJveFpvb21MZXZlbCkgPT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5tYXBJbnN0YW5jZSQucGlwZSh0YXAoKG1hcCkgPT4gbWFwLnNldFpvb20oem9vbSkpKTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfSk7XG5cbiAgcmVhZG9ubHkgc2V0Wm9vbVJhbmdlID0gdGhpcy5lZmZlY3QoKGlucHV0OiBPYnNlcnZhYmxlPFBhcnRpYWw8TWFwYm94Wm9vbUxldmVsUmFuZ2U+PikgPT4ge1xuICAgIHJldHVybiBpbnB1dC5waXBlKFxuICAgICAgc3dpdGNoTWFwKCh6b29tUmFuZ2U6IFBhcnRpYWw8TWFwYm94Wm9vbUxldmVsUmFuZ2U+KSA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLm1hcEluc3RhbmNlJC5waXBlKFxuICAgICAgICAgIHRhcCgobWFwKSA9PiB7XG4gICAgICAgICAgICBtYXAuc2V0TWluWm9vbSh6b29tUmFuZ2UubWluIHx8IG51bGwpO1xuICAgICAgICAgICAgbWFwLnNldE1heFpvb20oem9vbVJhbmdlLm1heCB8fCBudWxsKTtcbiAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgICAgfSlcbiAgICApO1xuICB9KTtcblxuICByZWFkb25seSBzZXRNaW5ab29tID0gdGhpcy5lZmZlY3QoKGlucHV0OiBPYnNlcnZhYmxlPE1hcGJveFpvb21MZXZlbD4pID0+IHtcbiAgICByZXR1cm4gaW5wdXQucGlwZShcbiAgICAgIHN3aXRjaE1hcCgoem9vbTogTWFwYm94Wm9vbUxldmVsKSA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLm1hcEluc3RhbmNlJC5waXBlKHRhcCgobWFwKSA9PiBtYXAuc2V0TWluWm9vbSh6b29tKSkpO1xuICAgICAgfSlcbiAgICApO1xuICB9KTtcblxuICByZWFkb25seSBzZXRNYXhab29tID0gdGhpcy5lZmZlY3QoKGlucHV0OiBPYnNlcnZhYmxlPE1hcGJveFpvb21MZXZlbD4pID0+IHtcbiAgICByZXR1cm4gaW5wdXQucGlwZShcbiAgICAgIHN3aXRjaE1hcCgoem9vbTogTWFwYm94Wm9vbUxldmVsKSA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLm1hcEluc3RhbmNlJC5waXBlKHRhcCgobWFwKSA9PiBtYXAuc2V0TWF4Wm9vbSh6b29tKSkpO1xuICAgICAgfSlcbiAgICApO1xuICB9KTtcblxuICByZWFkb25seSBzZXRLZXlib2FyZERpc2FibGVkID0gdGhpcy5lZmZlY3QoKGlucHV0OiBPYnNlcnZhYmxlPE1heWJlPGJvb2xlYW4+IHwgdm9pZD4pID0+IHtcbiAgICByZXR1cm4gaW5wdXQucGlwZShcbiAgICAgIHN3aXRjaE1hcCgoZGlzYWJsZWQ6IE1heWJlPGJvb2xlYW4+IHwgdm9pZCkgPT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5tYXBJbnN0YW5jZSQucGlwZShcbiAgICAgICAgICB0YXAoKG1hcCkgPT4ge1xuICAgICAgICAgICAgaWYgKGRpc2FibGVkID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICBtYXAua2V5Ym9hcmQuZW5hYmxlKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBtYXAua2V5Ym9hcmQuZGlzYWJsZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgICB9KVxuICAgICk7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IHNldERyYWdSb3RhdGVEaXNhYmxlZCA9IHRoaXMuZWZmZWN0KChpbnB1dDogT2JzZXJ2YWJsZTxNYXliZTxib29sZWFuPiB8IHZvaWQ+KSA9PiB7XG4gICAgcmV0dXJuIGlucHV0LnBpcGUoXG4gICAgICBzd2l0Y2hNYXAoKGRpc2FibGVkOiBNYXliZTxib29sZWFuPiB8IHZvaWQpID0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWFwSW5zdGFuY2UkLnBpcGUoXG4gICAgICAgICAgdGFwKChtYXApID0+IHtcbiAgICAgICAgICAgIGlmIChkaXNhYmxlZCA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgbWFwLmRyYWdSb3RhdGUuZW5hYmxlKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBtYXAuZHJhZ1JvdGF0ZS5kaXNhYmxlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfSk7XG5cbiAgcmVhZG9ubHkgc2V0RHJhZ1BhbkRpc2FibGVkID0gdGhpcy5lZmZlY3QoKGlucHV0OiBPYnNlcnZhYmxlPE1heWJlPGJvb2xlYW4+IHwgdm9pZD4pID0+IHtcbiAgICByZXR1cm4gaW5wdXQucGlwZShcbiAgICAgIHN3aXRjaE1hcCgoZGlzYWJsZWQ6IE1heWJlPGJvb2xlYW4+IHwgdm9pZCkgPT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5tYXBJbnN0YW5jZSQucGlwZShcbiAgICAgICAgICB0YXAoKG1hcCkgPT4ge1xuICAgICAgICAgICAgaWYgKGRpc2FibGVkID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICBtYXAuZHJhZ1Bhbi5lbmFibGUoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIG1hcC5kcmFnUGFuLmRpc2FibGUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgICAgfSlcbiAgICApO1xuICB9KTtcblxuICByZWFkb25seSBzZXRab29tRGlzYWJsZWQgPSB0aGlzLmVmZmVjdCgoaW5wdXQ6IE9ic2VydmFibGU8TWF5YmU8Ym9vbGVhbj4gfCB2b2lkPikgPT4ge1xuICAgIHJldHVybiBpbnB1dC5waXBlKFxuICAgICAgc3dpdGNoTWFwKChkaXNhYmxlZDogTWF5YmU8Ym9vbGVhbj4gfCB2b2lkKSA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLm1hcEluc3RhbmNlJC5waXBlKFxuICAgICAgICAgIHRhcCgobWFwKSA9PiB7XG4gICAgICAgICAgICBpZiAoZGlzYWJsZWQgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgIG1hcC5zY3JvbGxab29tLmVuYWJsZSgpO1xuICAgICAgICAgICAgICBtYXAuZG91YmxlQ2xpY2tab29tLmVuYWJsZSgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgbWFwLnNjcm9sbFpvb20uZGlzYWJsZSgpO1xuICAgICAgICAgICAgICBtYXAuZG91YmxlQ2xpY2tab29tLmRpc2FibGUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgICAgfSlcbiAgICApO1xuICB9KTtcblxuICByZWFkb25seSBzZXRQaXRjaCA9IHRoaXMuZWZmZWN0KChpbnB1dDogT2JzZXJ2YWJsZTxudW1iZXI+KSA9PiB7XG4gICAgcmV0dXJuIGlucHV0LnBpcGUoXG4gICAgICBzd2l0Y2hNYXAoKHBpdGNoKSA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLm1hcEluc3RhbmNlJC5waXBlKHRhcCgobWFwKSA9PiBtYXAuc2V0UGl0Y2gocGl0Y2gpKSk7XG4gICAgICB9KVxuICAgICk7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IHNldE1pblBpdGNoID0gdGhpcy5lZmZlY3QoKGlucHV0OiBPYnNlcnZhYmxlPG51bWJlcj4pID0+IHtcbiAgICByZXR1cm4gaW5wdXQucGlwZShcbiAgICAgIHN3aXRjaE1hcCgocGl0Y2g6IG51bWJlcikgPT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5tYXBJbnN0YW5jZSQucGlwZSh0YXAoKG1hcCkgPT4gbWFwLnNldE1pblBpdGNoKHBpdGNoKSkpO1xuICAgICAgfSlcbiAgICApO1xuICB9KTtcblxuICByZWFkb25seSBzZXRNYXhQaXRjaCA9IHRoaXMuZWZmZWN0KChpbnB1dDogT2JzZXJ2YWJsZTxudW1iZXI+KSA9PiB7XG4gICAgcmV0dXJuIGlucHV0LnBpcGUoXG4gICAgICBzd2l0Y2hNYXAoKHBpdGNoOiBudW1iZXIpID0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWFwSW5zdGFuY2UkLnBpcGUodGFwKChtYXApID0+IG1hcC5zZXRNYXhQaXRjaChwaXRjaCkpKTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfSk7XG5cbiAgcmVhZG9ubHkgc2V0QmVhcmluZyA9IHRoaXMuZWZmZWN0KChpbnB1dDogT2JzZXJ2YWJsZTxudW1iZXI+KSA9PiB7XG4gICAgcmV0dXJuIGlucHV0LnBpcGUoXG4gICAgICBzd2l0Y2hNYXAoKGJlYXJpbmcpID0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWFwSW5zdGFuY2UkLnBpcGUodGFwKChtYXApID0+IG1hcC5zZXRCZWFyaW5nKGJlYXJpbmcpKSk7XG4gICAgICB9KVxuICAgICk7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IHJvdGF0ZVRvID0gdGhpcy5lZmZlY3QoKGlucHV0OiBPYnNlcnZhYmxlPE1hcGJveEJlYXJpbmcgfCBNYXBib3hSb3RhdGVUbz4pID0+IHtcbiAgICByZXR1cm4gaW5wdXQucGlwZShcbiAgICAgIHN3aXRjaE1hcCgocm90YXRlSW5wdXQ6IE1hcGJveEJlYXJpbmcgfCBNYXBib3hSb3RhdGVUbykgPT4ge1xuICAgICAgICBjb25zdCByb3RhdGU6IE1hcGJveFJvdGF0ZVRvID0gdHlwZW9mIHJvdGF0ZUlucHV0ID09PSAnbnVtYmVyJyA/IHsgYmVhcmluZzogcm90YXRlSW5wdXQgfSA6IHJvdGF0ZUlucHV0O1xuICAgICAgICByZXR1cm4gdGhpcy5tYXBJbnN0YW5jZSQucGlwZSh0YXAoKG1hcCkgPT4gbWFwLnJvdGF0ZVRvKHJvdGF0ZS5iZWFyaW5nLCByb3RhdGUub3B0aW9ucywgcm90YXRlPy5ldmVudERhdGEpKSk7XG4gICAgICB9KVxuICAgICk7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IHJlc2V0Tm9ydGggPSB0aGlzLmVmZmVjdCgoaW5wdXQ6IE9ic2VydmFibGU8TWF5YmU8TWFwYm94UmVzZXROb3J0aD4gfCB2b2lkPikgPT4ge1xuICAgIHJldHVybiBpbnB1dC5waXBlKFxuICAgICAgc3dpdGNoTWFwKChyZXNldDogTWF5YmU8TWFwYm94UmVzZXROb3J0aD4gfCB2b2lkKSA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLm1hcEluc3RhbmNlJC5waXBlKHRhcCgobWFwKSA9PiBtYXAucmVzZXROb3J0aChyZXNldD8ub3B0aW9ucywgcmVzZXQ/LmV2ZW50RGF0YSkpKTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfSk7XG5cbiAgcmVhZG9ubHkgcmVzZXROb3J0aFBpdGNoID0gdGhpcy5lZmZlY3QoKGlucHV0OiBPYnNlcnZhYmxlPE1heWJlPE1hcGJveFJlc2V0Tm9ydGhQaXRjaD4gfCB2b2lkPikgPT4ge1xuICAgIHJldHVybiBpbnB1dC5waXBlKFxuICAgICAgc3dpdGNoTWFwKChyZXNldDogTWF5YmU8TWFwYm94UmVzZXROb3J0aFBpdGNoPiB8IHZvaWQpID0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWFwSW5zdGFuY2UkLnBpcGUodGFwKChtYXApID0+IG1hcC5yZXNldE5vcnRoUGl0Y2gocmVzZXQ/Lm9wdGlvbnMsIHJlc2V0Py5ldmVudERhdGEpKSk7XG4gICAgICB9KVxuICAgICk7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IHNuYXBUb05vcnRoID0gdGhpcy5lZmZlY3QoKGlucHV0OiBPYnNlcnZhYmxlPE1heWJlPE1hcGJveFNuYXBUb05vcnRoPiB8IHZvaWQ+KSA9PiB7XG4gICAgcmV0dXJuIGlucHV0LnBpcGUoXG4gICAgICBzd2l0Y2hNYXAoKHNuYXA6IE1heWJlPE1hcGJveFNuYXBUb05vcnRoPiB8IHZvaWQpID0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWFwSW5zdGFuY2UkLnBpcGUodGFwKChtYXApID0+IG1hcC5zbmFwVG9Ob3J0aChzbmFwPy5vcHRpb25zLCBzbmFwPy5ldmVudERhdGEpKSk7XG4gICAgICB9KVxuICAgICk7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IGZpdEJvdW5kcyA9IHRoaXMuZWZmZWN0KChpbnB1dDogT2JzZXJ2YWJsZTxNYXBib3hGaXRCb3VuZHM+KSA9PiB7XG4gICAgcmV0dXJuIGlucHV0LnBpcGUoXG4gICAgICBzd2l0Y2hNYXAoKHgpID0+IHtcbiAgICAgICAgY29uc3QgYm91bmQgPSB0aGlzLmxhdExuZ0JvdW5kKHguYm91bmRzKTtcbiAgICAgICAgcmV0dXJuIHRoaXMubWFwSW5zdGFuY2UkLnBpcGUodGFwKChtYXApID0+IG1hcC5maXRCb3VuZHMobmV3IE1hcGJveEdsLkxuZ0xhdEJvdW5kcyhib3VuZC5zdywgYm91bmQubmUpLCB4Lm9wdGlvbnMsIHguZXZlbnREYXRhKSkpO1xuICAgICAgfSlcbiAgICApO1xuICB9KTtcblxuICByZWFkb25seSBqdW1wVG8gPSB0aGlzLmVmZmVjdCgoaW5wdXQ6IE9ic2VydmFibGU8TWFwYm94SnVtcFRvPikgPT4ge1xuICAgIHJldHVybiBpbnB1dC5waXBlKFxuICAgICAgc3dpdGNoTWFwKCh4KSA9PiB7XG4gICAgICAgIGNvbnN0IGlucHV0Q2VudGVyID0geC5jZW50ZXIgPz8geC50bz8uY2VudGVyO1xuICAgICAgICBjb25zdCBjZW50ZXIgPSBpbnB1dENlbnRlciA/IHRoaXMuc2FmZUxhdExuZ1BvaW50KGlucHV0Q2VudGVyKSA6IHVuZGVmaW5lZDtcbiAgICAgICAgcmV0dXJuIHRoaXMubWFwSW5zdGFuY2UkLnBpcGUodGFwKChtYXApID0+IG1hcC5qdW1wVG8oZmlsdGVyVW5kZWZpbmVkVmFsdWVzKHsgLi4ueC50bywgY2VudGVyIH0pLCB4LmV2ZW50RGF0YSkpKTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfSk7XG5cbiAgcmVhZG9ubHkgZWFzZVRvID0gdGhpcy5lZmZlY3QoKGlucHV0OiBPYnNlcnZhYmxlPE1hcGJveEVhc2VUbz4pID0+IHtcbiAgICByZXR1cm4gaW5wdXQucGlwZShcbiAgICAgIHN3aXRjaE1hcCgoeCkgPT4ge1xuICAgICAgICBjb25zdCBpbnB1dENlbnRlciA9IHguY2VudGVyID8/IHgudG8/LmNlbnRlcjtcbiAgICAgICAgY29uc3QgY2VudGVyID0gaW5wdXRDZW50ZXIgPyB0aGlzLnNhZmVMYXRMbmdQb2ludChpbnB1dENlbnRlcikgOiB1bmRlZmluZWQ7XG4gICAgICAgIHJldHVybiB0aGlzLm1hcEluc3RhbmNlJC5waXBlKHRhcCgobWFwKSA9PiBtYXAuZWFzZVRvKGZpbHRlclVuZGVmaW5lZFZhbHVlcyh7IC4uLngudG8sIGNlbnRlciB9KSwgeC5ldmVudERhdGEpKSk7XG4gICAgICB9KVxuICAgICk7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IGZseVRvID0gdGhpcy5lZmZlY3QoKGlucHV0OiBPYnNlcnZhYmxlPE1hcGJveEZseVRvPikgPT4ge1xuICAgIHJldHVybiBpbnB1dC5waXBlKFxuICAgICAgc3dpdGNoTWFwKCh4KSA9PiB7XG4gICAgICAgIGNvbnN0IGlucHV0Q2VudGVyID0geC5jZW50ZXIgPz8geC50bz8uY2VudGVyO1xuICAgICAgICBjb25zdCBjZW50ZXIgPSBpbnB1dENlbnRlciA/IHRoaXMuc2FmZUxhdExuZ1BvaW50KGlucHV0Q2VudGVyKSA6IHVuZGVmaW5lZDtcbiAgICAgICAgcmV0dXJuIHRoaXMubWFwSW5zdGFuY2UkLnBpcGUodGFwKChtYXApID0+IG1hcC5mbHlUbyhmaWx0ZXJVbmRlZmluZWRWYWx1ZXMoeyAuLi54LnRvLCBjZW50ZXIgfSksIHguZXZlbnREYXRhKSkpO1xuICAgICAgfSlcbiAgICApO1xuICB9KTtcblxuICByZWFkb25seSByZXNldFBpdGNoQW5kQmVhcmluZyA9IHRoaXMuZWZmZWN0KChpbnB1dDogT2JzZXJ2YWJsZTx2b2lkPikgPT4ge1xuICAgIHJldHVybiBpbnB1dC5waXBlKFxuICAgICAgc3dpdGNoTWFwKCgpID0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWFwSW5zdGFuY2UkLnBpcGUoXG4gICAgICAgICAgdGFwKChtYXApID0+IHtcbiAgICAgICAgICAgIG1hcC5zZXRQaXRjaCgwKTtcbiAgICAgICAgICAgIG1hcC5zZXRCZWFyaW5nKDApO1xuICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgICB9KVxuICAgICk7XG4gIH0pO1xuXG4gIC8vIE1BUks6IEFjY2Vzc29yc1xuICBnZXQgdGltZXJSZWZyZXNoUGVyaW9kKCkge1xuICAgIHJldHVybiB0aGlzLmRieE1hcGJveFNlcnZpY2UubWFwYm94TWFwU3RvcmVUaW1lclJlZnJlc2hQZXJpb2Q7XG4gIH1cblxuICBtb3ZpbmdUaW1lcihwZXJpb2QgPSB0aGlzLnRpbWVyUmVmcmVzaFBlcmlvZCkge1xuICAgIHJldHVybiB0aGlzLm1vdmVTdGF0ZSQucGlwZShcbiAgICAgIHN3aXRjaE1hcCgoeCkgPT4ge1xuICAgICAgICBpZiAoeCA9PT0gJ21vdmluZycpIHtcbiAgICAgICAgICByZXR1cm4gaW50ZXJ2YWwocGVyaW9kKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gb2YoMCk7XG4gICAgICAgIH1cbiAgICAgIH0pLFxuICAgICAgc2hhcmVSZXBsYXkoKVxuICAgICk7XG4gIH1cblxuICBsaWZlY3ljbGVSZW5kZXJUaW1lcihwZXJpb2QgPSB0aGlzLnRpbWVyUmVmcmVzaFBlcmlvZCkge1xuICAgIHJldHVybiB0aGlzLmxpZmVjeWNsZVN0YXRlJC5waXBlKFxuICAgICAgc3dpdGNoTWFwKCh4KSA9PiB7XG4gICAgICAgIGlmICh4ID09PSAncmVuZGVyJykge1xuICAgICAgICAgIHJldHVybiBpbnRlcnZhbChwZXJpb2QpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBvZigwKTtcbiAgICAgICAgfVxuICAgICAgfSksXG4gICAgICBzaGFyZVJlcGxheSgpXG4gICAgKTtcbiAgfVxuXG4gIGF0TmV4dElkbGUoKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMubW92ZVN0YXRlJC5waXBlKFxuICAgICAgbWFwKCh4KSA9PiB4ID09PSAnaWRsZScpLFxuICAgICAgZmlyc3QoKVxuICAgICk7XG4gIH1cblxuICBjYWxjdWxhdGVOZXh0Q2VudGVyV2l0aE9mZnNldChpbnB1dE9mZnNldDogTGF0TG5nUG9pbnRJbnB1dCk6IE9ic2VydmFibGU8TGF0TG5nUG9pbnQ+IHtcbiAgICBjb25zdCBvZmZzZXQgPSB0aGlzLmxhdExuZ1BvaW50KGlucHV0T2Zmc2V0KTtcblxuICAgIHJldHVybiB0aGlzLmF0TmV4dElkbGUoKS5waXBlKFxuICAgICAgc3dpdGNoTWFwKCgpID0+XG4gICAgICAgIHRoaXMuY2VudGVyJC5waXBlKFxuICAgICAgICAgIGZpcnN0KCksXG4gICAgICAgICAgbWFwKChjZW50ZXIpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG5ld0NlbnRlciA9IHtcbiAgICAgICAgICAgICAgbGF0OiBvZmZzZXQubGF0ICsgY2VudGVyLmxhdCxcbiAgICAgICAgICAgICAgbG5nOiBvZmZzZXQubG5nICsgY2VudGVyLmxuZ1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHJldHVybiBuZXdDZW50ZXI7XG4gICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgICAgKVxuICAgICk7XG4gIH1cblxuICBjYWxjdWxhdGVOZXh0Q2VudGVyT2Zmc2V0V2l0aFNjcmVlbk1hcmdpbkNoYW5nZShzaXppbmc6IERieE1hcGJveE1hcmdpbkNhbGN1bGF0aW9uU2l6aW5nKTogT2JzZXJ2YWJsZTxMYXRMbmdQb2ludD4ge1xuICAgIC8vIFRPRE86IENvbnNpZGVyIGNhbGN1bGF0aW5nIHRoaXMgdXNpbmcgdGhlIHZpZXdwb3J0KCkgZnVuY3Rpb24gZnJvbSBAbWFwYm94L2dlby12aWV3cG9ydFxuICAgIHJldHVybiB0aGlzLmF0TmV4dElkbGUoKS5waXBlKFxuICAgICAgc3dpdGNoTWFwKCgpID0+XG4gICAgICAgIHRoaXMuYm91bmQkLnBpcGUoXG4gICAgICAgICAgZmlyc3QoKSxcbiAgICAgICAgICBtYXAoKGJvdW5kcykgPT4ge1xuICAgICAgICAgICAgY29uc3QgZGlmZiA9IGRpZmZMYXRMbmdCb3VuZFBvaW50cyhib3VuZHMsIHRydWUpO1xuICAgICAgICAgICAgY29uc3QgY2VudGVyID0gbGF0TG5nQm91bmRDZW50ZXJQb2ludChib3VuZHMpO1xuXG4gICAgICAgICAgICBjb25zdCBvZmZzZXRXaWR0aCA9IHNpemluZy5sZWZ0TWFyZ2luICsgc2l6aW5nLnJpZ2h0TWFyZ2luOyAvLyAzMDAgKyAwXG4gICAgICAgICAgICBjb25zdCBuZXdXaWR0aCA9IHNpemluZy5mdWxsV2lkdGggLSBvZmZzZXRXaWR0aDsgLy8gMTAwMCAtIDMwMCAtIDBcbiAgICAgICAgICAgIGNvbnN0IG5ld1dpZHRoUmF0aW8gPSBuZXdXaWR0aCAvIHNpemluZy5mdWxsV2lkdGg7IC8vIDcwMCAvIDEwMDBcbiAgICAgICAgICAgIGNvbnN0IG5ld0NlbnRlckxvbmdpdHVkZVdpZHRoID0gZGlmZi5sbmcgKiBuZXdXaWR0aFJhdGlvOyAvLyA3MCUgb2Zmc2V0XG5cbiAgICAgICAgICAgIGNvbnN0IGVmZmVjdGl2ZU9mZnNldDogTGF0TG5nUG9pbnQgPSB7XG4gICAgICAgICAgICAgIGxhdDogMCxcbiAgICAgICAgICAgICAgbG5nOiBuZXdDZW50ZXJMb25naXR1ZGVXaWR0aCAvIDJcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGNvbnN0IG5ld0NlbnRlciA9IGFkZExhdExuZ1BvaW50cyhib3VuZHMuc3csIGVmZmVjdGl2ZU9mZnNldCk7XG4gICAgICAgICAgICBuZXdDZW50ZXIubGF0ID0gY2VudGVyLmxhdDsgLy8gcmV0YWluIGNlbnRlciBwb3NpdGlvblxuXG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZyh7IHNpemluZywgYm91bmRzLCBlZmZlY3RpdmVPZmZzZXQsIG5ld1dpZHRoLCBvZmZzZXRXaWR0aCwgZGlmZiwgY2VudGVyLCBuZXdDZW50ZXIgfSk7XG5cbiAgICAgICAgICAgIHJldHVybiBuZXdDZW50ZXI7XG4gICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgICAgKVxuICAgICk7XG4gIH1cblxuICByZWFkb25seSBjdXJyZW50TWFwU2VydmljZSQgPSB0aGlzLnN0YXRlJC5waXBlKFxuICAgIG1hcCgoeCkgPT4geC5tYXBTZXJ2aWNlKSxcbiAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgcmVhZG9ubHkgbWFwU2VydmljZSQgPSB0aGlzLmN1cnJlbnRNYXBTZXJ2aWNlJC5waXBlKGZpbHRlck1heWJlKCkpO1xuXG4gIHJlYWRvbmx5IGN1cnJlbnRNYXBJbnN0YW5jZSQ6IE9ic2VydmFibGU8TWF5YmU8TWFwYm94R2wuTWFwPj4gPSB0aGlzLmN1cnJlbnRNYXBTZXJ2aWNlJC5waXBlKFxuICAgIHN3aXRjaE1hcCgoY3VycmVudE1hcFNlcnZpY2U6IE1heWJlPE1hcFNlcnZpY2U+KSA9PiB7XG4gICAgICBpZiAoY3VycmVudE1hcFNlcnZpY2UpIHtcbiAgICAgICAgcmV0dXJuIGN1cnJlbnRNYXBTZXJ2aWNlLm1hcExvYWRlZCQucGlwZShcbiAgICAgICAgICBkZWZhdWx0SWZFbXB0eSh1bmRlZmluZWQpLFxuICAgICAgICAgIG1hcCgoKSA9PiBjdXJyZW50TWFwU2VydmljZS5tYXBJbnN0YW5jZSlcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBvZih1bmRlZmluZWQpO1xuICAgICAgfVxuICAgIH0pLFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSBtYXBJbnN0YW5jZSQgPSB0aGlzLmN1cnJlbnRNYXBJbnN0YW5jZSQucGlwZShmaWx0ZXJNYXliZSgpKTtcblxuICByZWFkb25seSBtb3ZlU3RhdGUkID0gdGhpcy5zdGF0ZSQucGlwZShcbiAgICBtYXAoKHgpID0+IHgubW92ZVN0YXRlKSxcbiAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgcmVhZG9ubHkgbGlmZWN5Y2xlU3RhdGUkID0gdGhpcy5zdGF0ZSQucGlwZShcbiAgICBtYXAoKHgpID0+IHgubGlmZWN5Y2xlU3RhdGUpLFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSB6b29tU3RhdGUkID0gdGhpcy5zdGF0ZSQucGlwZShcbiAgICBtYXAoKHgpID0+IHguem9vbVN0YXRlKSxcbiAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgcmVhZG9ubHkgcm90YXRlU3RhdGUkID0gdGhpcy5zdGF0ZSQucGlwZShcbiAgICBtYXAoKHgpID0+IHgucm90YXRlU3RhdGUpLFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSBpc0luaXRpYWxpemVkJCA9IHRoaXMuY3VycmVudE1hcEluc3RhbmNlJC5waXBlKFxuICAgIHN3aXRjaE1hcCgoeCkgPT4ge1xuICAgICAgaWYgKCF4KSB7XG4gICAgICAgIHJldHVybiBvZihmYWxzZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gY29tYmluZUxhdGVzdChbdGhpcy5tb3ZlU3RhdGUkLnBpcGUobWFwKCh4KSA9PiB4ID09PSAnaWRsZScpKSwgdGhpcy5saWZlY3ljbGVTdGF0ZSQucGlwZShtYXAoKHgpID0+IHggPT09ICdpZGxlJykpXSkucGlwZShcbiAgICAgICAgICBmaWx0ZXIoKFttLCBsXSkgPT4gbSAmJiBsKSxcbiAgICAgICAgICBmaXJzdCgpLFxuICAgICAgICAgIG1hcCgoKSA9PiB0cnVlKVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH0pLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgcmVhZG9ubHkgd2hlbkluaXRpYWxpemVkJCA9IHRoaXMuaXNJbml0aWFsaXplZCQucGlwZShcbiAgICBmaWx0ZXIoKHgpID0+IHRydWUpLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgcmVhZG9ubHkgaXNSZW5kZXJpbmckID0gdGhpcy53aGVuSW5pdGlhbGl6ZWQkLnBpcGUoXG4gICAgc3dpdGNoTWFwKCgpID0+XG4gICAgICB0aGlzLmxpZmVjeWNsZVN0YXRlJC5waXBlKFxuICAgICAgICBtYXAoKHgpID0+IHggPT09ICdyZW5kZXInKSxcbiAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICAgICAgc2hhcmVSZXBsYXkoKVxuICAgICAgKVxuICAgIClcbiAgKTtcblxuICByZWFkb25seSBpc01vdmluZyQgPSB0aGlzLndoZW5Jbml0aWFsaXplZCQucGlwZShcbiAgICBzd2l0Y2hNYXAoKCkgPT5cbiAgICAgIHRoaXMubW92ZVN0YXRlJC5waXBlKFxuICAgICAgICBtYXAoKHgpID0+IHggPT09ICdtb3ZpbmcnKSxcbiAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICAgICAgc2hhcmVSZXBsYXkoKVxuICAgICAgKVxuICAgIClcbiAgKTtcblxuICByZWFkb25seSBpc1pvb21pbmckID0gdGhpcy53aGVuSW5pdGlhbGl6ZWQkLnBpcGUoXG4gICAgc3dpdGNoTWFwKCgpID0+XG4gICAgICB0aGlzLnpvb21TdGF0ZSQucGlwZShcbiAgICAgICAgbWFwKCh4KSA9PiB4ID09PSAnem9vbWluZycpLFxuICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgICAgICBzaGFyZVJlcGxheSgpXG4gICAgICApXG4gICAgKVxuICApO1xuXG4gIHJlYWRvbmx5IGlzUm90YXRpbmckID0gdGhpcy53aGVuSW5pdGlhbGl6ZWQkLnBpcGUoXG4gICAgc3dpdGNoTWFwKCgpID0+XG4gICAgICB0aGlzLnJvdGF0ZVN0YXRlJC5waXBlKFxuICAgICAgICBtYXAoKHgpID0+IHggPT09ICdyb3RhdGluZycpLFxuICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgICAgICBzaGFyZVJlcGxheSgpXG4gICAgICApXG4gICAgKVxuICApO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX21vdmluZ1RpbWVyID0gdGhpcy5tb3ZpbmdUaW1lcigpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZW5kZXJpbmdUaW1lciA9IHRoaXMubGlmZWN5Y2xlUmVuZGVyVGltZXIoKTtcblxuICByZWFkb25seSBjZW50ZXJOb3ckOiBPYnNlcnZhYmxlPExhdExuZ1BvaW50PiA9IHRoaXMud2hlbkluaXRpYWxpemVkJC5waXBlKFxuICAgIHN3aXRjaE1hcCgoKSA9PlxuICAgICAgdGhpcy5tYXBJbnN0YW5jZSQucGlwZShcbiAgICAgICAgc3dpdGNoTWFwKCh4KSA9PiB0aGlzLl9tb3ZpbmdUaW1lci5waXBlKG1hcCgoKSA9PiB0aGlzLmxhdExuZ1BvaW50KHguZ2V0Q2VudGVyKCkpKSkpLFxuICAgICAgICBzaGFyZVJlcGxheSgxKVxuICAgICAgKVxuICAgICksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSBjZW50ZXIkOiBPYnNlcnZhYmxlPExhdExuZ1BvaW50PiA9IHRoaXMud2hlbkluaXRpYWxpemVkJC5waXBlKFxuICAgIHN3aXRjaE1hcCgoKSA9PiB7XG4gICAgICByZXR1cm4gdGhpcy5pc01vdmluZyQucGlwZShcbiAgICAgICAgb25UcnVlVG9GYWxzZSgpLFxuICAgICAgICBzdGFydFdpdGgodW5kZWZpbmVkKSxcbiAgICAgICAgc3dpdGNoTWFwKCgpID0+IHRoaXMuY2VudGVyTm93JC5waXBlKGZpcnN0KCkpKSxcbiAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoaXNTYW1lTGF0TG5nUG9pbnQpLFxuICAgICAgICBzaGFyZVJlcGxheSgxKVxuICAgICAgKTtcbiAgICB9KSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIHJlYWRvbmx5IG1hcmdpbiQgPSB0aGlzLnN0YXRlJC5waXBlKFxuICAgIG1hcCgoeCkgPT4geC5tYXJnaW4pLFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKChhLCBiKSA9PiBhICE9IG51bGwgJiYgYiAhPSBudWxsICYmIGEuZnVsbFdpZHRoID09PSBiLmZ1bGxXaWR0aCAmJiBhLmxlZnRNYXJnaW4gPT09IGIubGVmdE1hcmdpbiAmJiBhLnJpZ2h0TWFyZ2luID09PSBiLnJpZ2h0TWFyZ2luKSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIHJlYWRvbmx5IHJldmVyc2VNYXJnaW4kID0gdGhpcy5tYXJnaW4kLnBpcGUoXG4gICAgbWFwKCh4KSA9PiB7XG4gICAgICBpZiAoeCkge1xuICAgICAgICByZXR1cm4geyBsZWZ0TWFyZ2luOiAteC5sZWZ0TWFyZ2luLCByaWdodE1hcmdpbjogLXgucmlnaHRNYXJnaW4sIGZ1bGxXaWR0aDogeC5mdWxsV2lkdGggfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB4O1xuICAgICAgfVxuICAgIH0pXG4gICk7XG5cbiAgcmVhZG9ubHkgY2VudGVyR2l2ZW5NYXJnaW4kOiBPYnNlcnZhYmxlPExhdExuZ1BvaW50PiA9IHRoaXMud2hlbkluaXRpYWxpemVkJC5waXBlKFxuICAgIHN3aXRjaE1hcCgoKSA9PiB7XG4gICAgICByZXR1cm4gdGhpcy5yZXZlcnNlTWFyZ2luJC5waXBlKFxuICAgICAgICBzd2l0Y2hNYXAoKHgpID0+IHtcbiAgICAgICAgICBpZiAoeCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2VudGVyJC5waXBlKHN3aXRjaE1hcCgoXykgPT4gdGhpcy5jYWxjdWxhdGVOZXh0Q2VudGVyT2Zmc2V0V2l0aFNjcmVlbk1hcmdpbkNoYW5nZSh4KSkpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5pc01vdmluZyQucGlwZShcbiAgICAgICAgICAgICAgZmlsdGVyKCh4KSA9PiAheCksXG4gICAgICAgICAgICAgIHN3aXRjaE1hcCgoKSA9PiB0aGlzLmNlbnRlciQpXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgfSksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSBib3VuZE5vdyQ6IE9ic2VydmFibGU8TGF0TG5nQm91bmQ+ID0gdGhpcy53aGVuSW5pdGlhbGl6ZWQkLnBpcGUoXG4gICAgc3dpdGNoTWFwKCgpID0+XG4gICAgICB0aGlzLm1hcEluc3RhbmNlJC5waXBlKFxuICAgICAgICBzd2l0Y2hNYXAoKHgpID0+XG4gICAgICAgICAgdGhpcy5fcmVuZGVyaW5nVGltZXIucGlwZShcbiAgICAgICAgICAgIG1hcCgoKSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IGJvdW5kID0geC5nZXRCb3VuZHMoKTtcbiAgICAgICAgICAgICAgY29uc3QgYm91bmRTdyA9IGJvdW5kLmdldFNvdXRoV2VzdCgpO1xuICAgICAgICAgICAgICBjb25zdCBib3VuZE5lID0gYm91bmQuZ2V0Tm9ydGhFYXN0KCk7XG5cbiAgICAgICAgICAgICAgY29uc3Qgc3cgPSBpc0RlZmF1bHRMYXRMbmdQb2ludChib3VuZFN3KSA/IHN3TW9zdExhdExuZ1BvaW50KCkgOiB7IGxhdDogYm91bmRTdy5sYXQsIGxuZzogYm91bmRTdy5sbmcgfTtcbiAgICAgICAgICAgICAgY29uc3QgbmUgPSBpc0RlZmF1bHRMYXRMbmdQb2ludChib3VuZE5lKSA/IG5lTW9zdExhdExuZ1BvaW50KCkgOiB7IGxhdDogYm91bmROZS5sYXQsIGxuZzogYm91bmROZS5sbmcgfTtcblxuICAgICAgICAgICAgICByZXR1cm4gdGhpcy5sYXRMbmdCb3VuZChzdywgbmUpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICApXG4gICAgICAgICksXG4gICAgICAgIHNoYXJlUmVwbGF5KDEpXG4gICAgICApXG4gICAgKVxuICApO1xuXG4gIHJlYWRvbmx5IGJvdW5kJDogT2JzZXJ2YWJsZTxMYXRMbmdCb3VuZD4gPSB0aGlzLndoZW5Jbml0aWFsaXplZCQucGlwZShcbiAgICBzd2l0Y2hNYXAoKCkgPT4ge1xuICAgICAgcmV0dXJuIHRoaXMuaXNSZW5kZXJpbmckLnBpcGUoXG4gICAgICAgIG9uVHJ1ZVRvRmFsc2UoKSxcbiAgICAgICAgc3RhcnRXaXRoKHVuZGVmaW5lZCksXG4gICAgICAgIHN3aXRjaE1hcCgoeCkgPT4gdGhpcy5ib3VuZE5vdyQucGlwZShmaXJzdCgpKSksXG4gICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKGlzU2FtZUxhdExuZ0JvdW5kKSxcbiAgICAgICAgc2hhcmVSZXBsYXkoMSlcbiAgICAgICk7XG4gICAgfSlcbiAgKTtcblxuICByZWFkb25seSBib3VuZFNpemluZyQ6IE9ic2VydmFibGU8TGF0TG5nUG9pbnQ+ID0gdGhpcy5ib3VuZCQucGlwZShcbiAgICBtYXAoKHgpID0+IGRpZmZMYXRMbmdCb3VuZFBvaW50cyh4KSksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSBib3VuZFdyYXBzQXJvdW5kV29ybGQkOiBPYnNlcnZhYmxlPGJvb2xlYW4+ID0gdGhpcy5ib3VuZCQucGlwZShcbiAgICBtYXAoKHgpID0+IGxhdExuZ0JvdW5kV3JhcHNNYXAoeCkpLFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSBpc1dpdGhpbkJvdW5kRnVuY3Rpb24kOiBPYnNlcnZhYmxlPElzV2l0aGluTGF0TG5nQm91bmRGdW5jdGlvbj4gPSB0aGlzLmJvdW5kJC5waXBlKFxuICAgIG1hcCgoeCkgPT4gaXNXaXRoaW5MYXRMbmdCb3VuZEZ1bmN0aW9uKHgpKSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIHJlYWRvbmx5IG92ZXJsYXBzQm91bmRGdW5jdGlvbiQ6IE9ic2VydmFibGU8T3ZlcmxhcHNMYXRMbmdCb3VuZEZ1bmN0aW9uPiA9IHRoaXMuYm91bmQkLnBpcGUoXG4gICAgbWFwKCh4KSA9PiBvdmVybGFwc0xhdExuZ0JvdW5kRnVuY3Rpb24oeCkpLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgcmVhZG9ubHkgem9vbU5vdyQ6IE9ic2VydmFibGU8TWFwYm94Wm9vbUxldmVsPiA9IHRoaXMud2hlbkluaXRpYWxpemVkJC5waXBlKFxuICAgIHN3aXRjaE1hcCgoKSA9PlxuICAgICAgdGhpcy5tYXBJbnN0YW5jZSQucGlwZShcbiAgICAgICAgc3dpdGNoTWFwKCh4KSA9PiB0aGlzLl9yZW5kZXJpbmdUaW1lci5waXBlKG1hcCgoKSA9PiB4LmdldFpvb20oKSBhcyBNYXBib3hab29tTGV2ZWwpKSksXG4gICAgICAgIHNoYXJlUmVwbGF5KDEpXG4gICAgICApXG4gICAgKVxuICApO1xuXG4gIHJlYWRvbmx5IHpvb20kOiBPYnNlcnZhYmxlPE1hcGJveFpvb21MZXZlbD4gPSB0aGlzLndoZW5Jbml0aWFsaXplZCQucGlwZShcbiAgICBzd2l0Y2hNYXAoKCkgPT4ge1xuICAgICAgcmV0dXJuIHRoaXMuaXNab29taW5nJC5waXBlKFxuICAgICAgICBvblRydWVUb0ZhbHNlKCksXG4gICAgICAgIHN0YXJ0V2l0aCh1bmRlZmluZWQpLFxuICAgICAgICBzd2l0Y2hNYXAoKCkgPT4gdGhpcy56b29tTm93JC5waXBlKGZpcnN0KCkpKSxcbiAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICAgICAgc2hhcmVSZXBsYXkoMSlcbiAgICAgICk7XG4gICAgfSlcbiAgKTtcblxuICByZWFkb25seSBwaXRjaE5vdyQgPSB0aGlzLndoZW5Jbml0aWFsaXplZCQucGlwZShcbiAgICBzd2l0Y2hNYXAoKCkgPT5cbiAgICAgIHRoaXMubWFwSW5zdGFuY2UkLnBpcGUoXG4gICAgICAgIHN3aXRjaE1hcCgoeCkgPT4gdGhpcy5fbW92aW5nVGltZXIucGlwZShtYXAoKCkgPT4geC5nZXRQaXRjaCgpKSkpLFxuICAgICAgICBzaGFyZVJlcGxheSgxKVxuICAgICAgKVxuICAgIClcbiAgKTtcblxuICByZWFkb25seSBwaXRjaCQgPSB0aGlzLndoZW5Jbml0aWFsaXplZCQucGlwZShcbiAgICBzd2l0Y2hNYXAoKCkgPT4ge1xuICAgICAgcmV0dXJuIHRoaXMuaXNSb3RhdGluZyQucGlwZShcbiAgICAgICAgb25UcnVlVG9GYWxzZSgpLFxuICAgICAgICBzdGFydFdpdGgodW5kZWZpbmVkKSxcbiAgICAgICAgc3dpdGNoTWFwKCgpID0+IHRoaXMucGl0Y2hOb3ckLnBpcGUoZmlyc3QoKSkpLFxuICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgICAgICBzaGFyZVJlcGxheSgxKVxuICAgICAgKTtcbiAgICB9KVxuICApO1xuXG4gIHJlYWRvbmx5IGJlYXJpbmdOb3ckID0gdGhpcy53aGVuSW5pdGlhbGl6ZWQkLnBpcGUoXG4gICAgc3dpdGNoTWFwKCgpID0+XG4gICAgICB0aGlzLm1hcEluc3RhbmNlJC5waXBlKFxuICAgICAgICBzd2l0Y2hNYXAoKHgpID0+IHRoaXMuX21vdmluZ1RpbWVyLnBpcGUobWFwKCgpID0+IHguZ2V0QmVhcmluZygpKSkpLFxuICAgICAgICBzaGFyZVJlcGxheSgxKVxuICAgICAgKVxuICAgIClcbiAgKTtcblxuICByZWFkb25seSBiZWFyaW5nJCA9IHRoaXMud2hlbkluaXRpYWxpemVkJC5waXBlKFxuICAgIHN3aXRjaE1hcCgoKSA9PiB7XG4gICAgICByZXR1cm4gdGhpcy5pc1JvdGF0aW5nJC5waXBlKFxuICAgICAgICBvblRydWVUb0ZhbHNlKCksXG4gICAgICAgIHN0YXJ0V2l0aCh1bmRlZmluZWQpLFxuICAgICAgICBzd2l0Y2hNYXAoKCkgPT4gdGhpcy5iZWFyaW5nTm93JC5waXBlKGZpcnN0KCkpKSxcbiAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICAgICAgc2hhcmVSZXBsYXkoMSlcbiAgICAgICk7XG4gICAgfSlcbiAgKTtcblxuICByZWFkb25seSBjb250ZW50JCA9IHRoaXMuc3RhdGUkLnBpcGUoXG4gICAgbWFwKCh4KSA9PiB4LmNvbnRlbnQpLFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSBoYXNDb250ZW50JCA9IHRoaXMuY29udGVudCQucGlwZShtYXAoQm9vbGVhbikpO1xuXG4gIHJlYWRvbmx5IGN1cnJlbnRNYXBDYW52YXNTaXplJCA9IHRoaXMuc3RhdGUkLnBpcGUoXG4gICAgbWFwKCh4KSA9PiB4Lm1hcENhbnZhc1NpemUpLFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKChhLCBiKSA9PiBhICE9IG51bGwgJiYgYiAhPSBudWxsICYmIHZlY3RvcnNBcmVFcXVhbChhLCBiKSksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSBtYXBDYW52YXNTaXplJCA9IHRoaXMuY3VycmVudE1hcENhbnZhc1NpemUkLnBpcGUoZmlsdGVyTWF5YmUoKSk7XG5cbiAgcmVhZG9ubHkgdmlld3BvcnRCb3VuZEZ1bmN0aW9uJDogT2JzZXJ2YWJsZTxNYXBib3hWaWV3cG9ydEJvdW5kRnVuY3Rpb24+ID0gdGhpcy5tYXBDYW52YXNTaXplJC5waXBlKFxuICAgIG1hcCgoeCkgPT4gbWFwYm94Vmlld3BvcnRCb3VuZEZ1bmN0aW9uKHsgbWFwQ2FudmFzU2l6ZTogeCB9KSksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSBjbGlja0V2ZW50JCA9IHRoaXMuc3RhdGUkLnBpcGUoXG4gICAgbWFwKCh4KSA9PiB4LmNsaWNrRXZlbnQpLFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSBkb3VibGVDbGlja0V2ZW50JCA9IHRoaXMuc3RhdGUkLnBpcGUoXG4gICAgbWFwKCh4KSA9PiB4LmRvdWJsZUNsaWNrRXZlbnQpLFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSByaWdodENsaWNrRXZlbnQkID0gdGhpcy5zdGF0ZSQucGlwZShcbiAgICBtYXAoKHgpID0+IHgucmlnaHRDbGlja0V2ZW50KSxcbiAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgLy8gTUFSSzogU3RhdGUgQ2hhbmdlc1xuICByZWFkb25seSBzZXRNYXJnaW4gPSB0aGlzLnVwZGF0ZXIoKHN0YXRlLCBtYXJnaW46IE1heWJlPERieE1hcGJveE1hcmdpbkNhbGN1bGF0aW9uU2l6aW5nPikgPT4gKHsgLi4uc3RhdGUsIG1hcmdpbjogbWFyZ2luICYmIChtYXJnaW4ucmlnaHRNYXJnaW4gIT09IDAgfHwgbWFyZ2luLmxlZnRNYXJnaW4gIT09IDApID8gbWFyZ2luIDogdW5kZWZpbmVkIH0pKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IF9zZXRNYXBTZXJ2aWNlID0gdGhpcy51cGRhdGVyKChzdGF0ZSwgbWFwU2VydmljZTogTWF5YmU8TWFwU2VydmljZT4pID0+ICh7IG1hcFNlcnZpY2UsIG1vdmVTdGF0ZTogJ2luaXQnLCBsaWZlY3ljbGVTdGF0ZTogJ2luaXQnLCB6b29tU3RhdGU6ICdpbml0Jywgcm90YXRlU3RhdGU6ICdpbml0JywgcmV0YWluQ29udGVudDogc3RhdGUucmV0YWluQ29udGVudCwgY29udGVudDogc3RhdGUucmV0YWluQ29udGVudCA/IHN0YXRlLmNvbnRlbnQgOiB1bmRlZmluZWQgfSkpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9zZXRMaWZlY3ljbGVTdGF0ZSA9IHRoaXMudXBkYXRlcigoc3RhdGUsIGxpZmVjeWNsZVN0YXRlOiBNYXBib3hNYXBMaWZlY3ljbGVTdGF0ZSkgPT4gKHsgLi4uc3RhdGUsIGxpZmVjeWNsZVN0YXRlIH0pKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfc2V0TW92ZVN0YXRlID0gdGhpcy51cGRhdGVyKChzdGF0ZSwgbW92ZVN0YXRlOiBNYXBib3hNYXBNb3ZlU3RhdGUpID0+ICh7IC4uLnN0YXRlLCBtb3ZlU3RhdGUgfSkpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9zZXRab29tU3RhdGUgPSB0aGlzLnVwZGF0ZXIoKHN0YXRlLCB6b29tU3RhdGU6IE1hcGJveE1hcFpvb21TdGF0ZSkgPT4gKHsgLi4uc3RhdGUsIHpvb21TdGF0ZSB9KSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3NldFJvdGF0ZVN0YXRlID0gdGhpcy51cGRhdGVyKChzdGF0ZSwgcm90YXRlU3RhdGU6IE1hcGJveE1hcFJvdGF0ZVN0YXRlKSA9PiAoeyAuLi5zdGF0ZSwgcm90YXRlU3RhdGUgfSkpO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX3NldE1hcENhbnZhc1NpemUgPSB0aGlzLnVwZGF0ZXIoKHN0YXRlLCBtYXBDYW52YXNTaXplOiBWZWN0b3IpID0+ICh7IC4uLnN0YXRlLCBtYXBDYW52YXNTaXplIH0pKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfc2V0Q2xpY2tFdmVudCA9IHRoaXMudXBkYXRlcigoc3RhdGUsIGNsaWNrRXZlbnQ6IERieE1hcGJveENsaWNrRXZlbnQpID0+ICh7IC4uLnN0YXRlLCBjbGlja0V2ZW50IH0pKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfc2V0RG91YmxlQ2xpY2tFdmVudCA9IHRoaXMudXBkYXRlcigoc3RhdGUsIGRvdWJsZUNsaWNrRXZlbnQ6IERieE1hcGJveENsaWNrRXZlbnQpID0+ICh7IC4uLnN0YXRlLCBkb3VibGVDbGlja0V2ZW50IH0pKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfc2V0UmlnaHRDbGlja0V2ZW50ID0gdGhpcy51cGRhdGVyKChzdGF0ZSwgcmlnaHRDbGlja0V2ZW50OiBEYnhNYXBib3hDbGlja0V2ZW50KSA9PiAoeyAuLi5zdGF0ZSwgcmlnaHRDbGlja0V2ZW50IH0pKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IF9zZXRFcnJvciA9IHRoaXMudXBkYXRlcigoc3RhdGUsIGVycm9yOiBFcnJvcikgPT4gKHsgLi4uc3RhdGUsIGVycm9yIH0pKTtcblxuICByZWFkb25seSBjbGVhckNvbnRlbnQgPSB0aGlzLnVwZGF0ZXIoKHN0YXRlKSA9PiAoeyAuLi5zdGF0ZSwgY29udGVudDogdW5kZWZpbmVkIH0pKTtcbiAgcmVhZG9ubHkgc2V0Q29udGVudCA9IHRoaXMudXBkYXRlcigoc3RhdGUsIGNvbnRlbnQ6IE1heWJlPERieEluamVjdGlvbkNvbXBvbmVudENvbmZpZzx1bmtub3duPj4pID0+ICh7IC4uLnN0YXRlLCBjb250ZW50IH0pKTtcbn1cbiJdfQ==
|
|
431
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFwYm94LnN0b3JlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZGJ4LXdlYi9tYXBib3gvc3JjL2xpYi9tYXBib3guc3RvcmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE9BQU8sRUFBRSxXQUFXLEVBQUUsYUFBYSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3BFLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFhLE1BQU0sZUFBZSxDQUFDO0FBQzlELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxpQkFBaUIsRUFBK0IsMkJBQTJCLEVBQWUsbUJBQW1CLEVBQWlDLG1CQUFtQixFQUFzQywyQkFBMkIsRUFBRSxxQkFBcUIsRUFBRSxzQkFBc0IsRUFBRSxlQUFlLEVBQUUsb0JBQW9CLEVBQUUsaUJBQWlCLEVBQUUsaUJBQWlCLEVBQUUsbUJBQW1CLEVBQVUsZUFBZSxFQUFFLHFCQUFxQixFQUFFLG9CQUFvQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzdlLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUV2RCxPQUFPLEVBQUUsY0FBYyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFjLEVBQUUsRUFBZ0IsU0FBUyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsYUFBYSxFQUFFLEtBQUssRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM3TCxPQUFPLEtBQUssUUFBUSxNQUFNLFdBQVcsQ0FBQztBQUV0QyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUVwRCxPQUFPLEVBQUUsMkJBQTJCLEVBQStCLE1BQU0sZUFBZSxDQUFDOzs7QUFvRXpGOztHQUVHO0FBRUgsTUFBTSxPQUFPLGlCQUFrQixTQUFRLGNBQW1DO0lBS3hFLFlBQXVELGdCQUFrQztR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QUFJLENBQUMsR0FBRyxHQUFHLGFBQWEsQ0FBQyxDQUFDLGFBQWE7WUFFdkUsTUFBTSxlQUFlLEdBQWdCO2dCQUNuQyxHQUFHLEVBQUUsQ0FBQztnQkFDTixHQUFHLEVBQUUsdUJBQXVCLEdBQUcsQ0FBQzthQUNqQyxDQUFDO1lBRUYsTUFBTSxTQUFTLEdBQUcsZUFBZSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsZUFBZSxDQUFDLENBQUM7WUFDOUQsU0FBUyxDQUFDLEdBQUcsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMseUJBQXlCO1lBRXJELG9HQUFvRztZQUVwRyxPQUFPLFNBQVMsQ0FBQztRQUNuQixDQUFDLENBQUMsQ0FDSCxDQUNGLENBQ0YsQ0FBQztJQUNKLENBQUM7OytHQXhiVSxpQkFBaUIsa0JBS1IsZ0JBQWdCO21IQUx6QixpQkFBaUI7NEZBQWpCLGlCQUFpQjtrQkFEN0IsVUFBVTs7MEJBTUksTUFBTTsyQkFBQyxnQkFBZ0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjbGVhbnVwLCBmaWx0ZXJNYXliZSwgb25UcnVlVG9GYWxzZSB9IGZyb20gJ0BkZXJlZWtiL3J4anMnO1xuaW1wb3J0IHsgSW5qZWN0LCBJbmplY3RhYmxlLCBPbkRlc3Ryb3kgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGlzU2FtZUxhdExuZ0JvdW5kLCBpc1NhbWVMYXRMbmdQb2ludCwgSXNXaXRoaW5MYXRMbmdCb3VuZEZ1bmN0aW9uLCBpc1dpdGhpbkxhdExuZ0JvdW5kRnVuY3Rpb24sIExhdExuZ0JvdW5kLCBsYXRMbmdCb3VuZEZ1bmN0aW9uLCBMYXRMbmdQb2ludElucHV0LCBMYXRMbmdQb2ludCwgbGF0TG5nUG9pbnRGdW5jdGlvbiwgTWF5YmUsIE92ZXJsYXBzTGF0TG5nQm91bmRGdW5jdGlvbiwgb3ZlcmxhcHNMYXRMbmdCb3VuZEZ1bmN0aW9uLCBkaWZmTGF0TG5nQm91bmRQb2ludHMsIGxhdExuZ0JvdW5kQ2VudGVyUG9pbnQsIGFkZExhdExuZ1BvaW50cywgaXNEZWZhdWx0TGF0TG5nUG9pbnQsIHN3TW9zdExhdExuZ1BvaW50LCBuZU1vc3RMYXRMbmdQb2ludCwgbGF0TG5nQm91bmRXcmFwc01hcCwgVmVjdG9yLCB2ZWN0b3JzQXJlRXF1YWwsIGZpbHRlclVuZGVmaW5lZFZhbHVlcywgbGF0TG5nQm91bmRGcm9tSW5wdXQgfSBmcm9tICdAZGVyZWVrYi91dGlsJztcbmltcG9ydCB7IENvbXBvbmVudFN0b3JlIH0gZnJvbSAnQG5ncngvY29tcG9uZW50LXN0b3JlJztcbmltcG9ydCB7IE1hcFNlcnZpY2UgfSBmcm9tICduZ3gtbWFwYm94LWdsJztcbmltcG9ydCB7IGRlZmF1bHRJZkVtcHR5LCBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgZmlsdGVyLCBtYXAsIHNoYXJlUmVwbGF5LCBzd2l0Y2hNYXAsIHRhcCwgTkVWRVIsIE9ic2VydmFibGUsIG9mLCBTdWJzY3JpcHRpb24sIHN0YXJ0V2l0aCwgaW50ZXJ2YWwsIGZpcnN0LCBjb21iaW5lTGF0ZXN0LCBFTVBUWSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0ICogYXMgTWFwYm94R2wgZnJvbSAnbWFwYm94LWdsJztcbmltcG9ydCB7IERieE1hcGJveENsaWNrRXZlbnQsIEtub3duTWFwYm94U3R5bGUsIE1hcGJveEJlYXJpbmcsIE1hcGJveEVhc2VUbywgTWFwYm94Rml0Qm91bmRzLCBNYXBib3hGaXRQb3NpdGlvbnMsIE1hcGJveEZseVRvLCBNYXBib3hKdW1wVG8sIE1hcGJveFJlc2V0Tm9ydGgsIE1hcGJveFJlc2V0Tm9ydGhQaXRjaCwgTWFwYm94Um90YXRlVG8sIE1hcGJveFNuYXBUb05vcnRoLCBNYXBib3hTdHlsZUNvbmZpZywgTWFwYm94Wm9vbUxldmVsLCBNYXBib3hab29tTGV2ZWxSYW5nZSB9IGZyb20gJy4vbWFwYm94JztcbmltcG9ydCB7IERieE1hcGJveFNlcnZpY2UgfSBmcm9tICcuL21hcGJveC5zZXJ2aWNlJztcbmltcG9ydCB7IERieEluamVjdGlvbkNvbXBvbmVudENvbmZpZyB9IGZyb20gJ0BkZXJlZWtiL2RieC1jb3JlJztcbmltcG9ydCB7IG1hcGJveFZpZXdwb3J0Qm91bmRGdW5jdGlvbiwgTWFwYm94Vmlld3BvcnRCb3VuZEZ1bmN0aW9uIH0gZnJvbSAnLi9tYXBib3gudXRpbCc7XG5cbmV4cG9ydCB0eXBlIE1hcGJveE1hcExpZmVjeWNsZVN0YXRlID0gJ2luaXQnIHwgJ2xvYWQnIHwgJ3JlbmRlcicgfCAnaWRsZSc7XG5leHBvcnQgdHlwZSBNYXBib3hNYXBNb3ZlU3RhdGUgPSAnaW5pdCcgfCAnaWRsZScgfCAnbW92aW5nJztcbmV4cG9ydCB0eXBlIE1hcGJveE1hcFpvb21TdGF0ZSA9ICdpbml0JyB8ICdpZGxlJyB8ICd6b29taW5nJztcbmV4cG9ydCB0eXBlIE1hcGJveE1hcFJvdGF0ZVN0YXRlID0gJ2luaXQnIHwgJ2lkbGUnIHwgJ3JvdGF0aW5nJztcblxuZXhwb3J0IGludGVyZmFjZSBTdHJpbmdNYXBib3hMaXN0ZW5lclBhaXIge1xuICB0eXBlOiBzdHJpbmc7XG4gIGxpc3RlbmVyOiAoZXY6IE1hcGJveEdsLkV2ZW50RGF0YSkgPT4gdm9pZDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBUeXBlZE1hcGJveExpc3RlbmVyUGFpcjxUIGV4dGVuZHMga2V5b2YgTWFwYm94R2wuTWFwRXZlbnRUeXBlPiB7XG4gIHR5cGU6IFQ7XG4gIGxpc3RlbmVyOiAoZXY6IE1hcGJveEdsLk1hcEV2ZW50VHlwZVtUXSAmIE1hcGJveEdsLkV2ZW50RGF0YSkgPT4gdm9pZDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBEYnhNYXBib3hNYXJnaW5DYWxjdWxhdGlvblNpemluZyB7XG4gIGxlZnRNYXJnaW46IG51bWJlcjtcbiAgcmlnaHRNYXJnaW46IG51bWJlcjtcbiAgZnVsbFdpZHRoOiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGJ4TWFwYm94U3RvcmVTdGF0ZSB7XG4gIC8qKlxuICAgKiBDdXJyZW50IE1hcFNlcnZpY2UgYmVpbmcgdXRpbGl6ZWQuXG4gICAqL1xuICBtYXBTZXJ2aWNlPzogTWF5YmU8TWFwU2VydmljZT47XG4gIGxpZmVjeWNsZVN0YXRlOiBNYXBib3hNYXBMaWZlY3ljbGVTdGF0ZTtcbiAgbW92ZVN0YXRlOiBNYXBib3hNYXBNb3ZlU3RhdGU7XG4gIHpvb21TdGF0ZTogTWFwYm94TWFwWm9vbVN0YXRlO1xuICByb3RhdGVTdGF0ZTogTWFwYm94TWFwUm90YXRlU3RhdGU7XG4gIC8qKlxuICAgKiBWaXN1YWwgY29udGFpbmVyIHNpemUgb2YgdGhlIG1hcC5cbiAgICovXG4gIG1hcENhbnZhc1NpemU/OiBNYXliZTxWZWN0b3I+O1xuICAvKipcbiAgICogTGF0ZXN0IGNsaWNrIGV2ZW50XG4gICAqL1xuICBjbGlja0V2ZW50PzogTWF5YmU8RGJ4TWFwYm94Q2xpY2tFdmVudD47XG4gIC8qKlxuICAgKiBMYXRlc3QgZG91YmxlLWNsaWNrIGV2ZW50XG4gICAqL1xuICBkb3VibGVDbGlja0V2ZW50PzogTWF5YmU8RGJ4TWFwYm94Q2xpY2tFdmVudD47XG4gIC8qKlxuICAgKiBMYXRlc3QgY29udGV4dG1lbnUgZXZlbnQuXG4gICAqL1xuICByaWdodENsaWNrRXZlbnQ/OiBNYXliZTxEYnhNYXBib3hDbGlja0V2ZW50PjtcbiAgLyoqXG4gICAqIFdoZXRoZXIgb3Igbm90IHRvIHJldGFpbiBjb250ZW50IGJldHdlZW4gcmVzZXRzLlxuICAgKlxuICAgKiBUcnVlIGJ5IGRlZmF1bHQuXG4gICAqL1xuICByZXRhaW5Db250ZW50OiBib29sZWFuO1xuICAvKipcbiAgICogQ3VzdG9tIGNvbnRlbnQgY29uZmlndXJhdGlvbi5cbiAgICovXG4gIGNvbnRlbnQ/OiBNYXliZTxEYnhJbmplY3Rpb25Db21wb25lbnRDb25maWc8dW5rbm93bj4+O1xuICAvKipcbiAgICogTGF0ZXN0IGVycm9yXG4gICAqL1xuICBlcnJvcj86IE1heWJlPEVycm9yPjtcbiAgLyoqXG4gICAqIE1hcCBtYXJnaW4vb2Zmc2V0XG4gICAqL1xuICBtYXJnaW4/OiBNYXliZTxEYnhNYXBib3hNYXJnaW5DYWxjdWxhdGlvblNpemluZz47XG59XG5cbi8qKlxuICogU3RvcmUgdXNlZCBmb3IgcmV0cmlldmluZyBpbmZvcm1hdGlvbi5cbiAqL1xuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIERieE1hcGJveE1hcFN0b3JlIGV4dGVuZHMgQ29tcG9uZW50U3RvcmU8RGJ4TWFwYm94U3RvcmVTdGF0ZT4gaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuICBwcml2YXRlIHNhZmVMYXRMbmdQb2ludCA9IGxhdExuZ1BvaW50RnVuY3Rpb24oeyB3cmFwOiB0cnVlIH0pO1xuICBwcml2YXRlIGxhdExuZ1BvaW50ID0gbGF0TG5nUG9pbnRGdW5jdGlvbih7IHdyYXA6IGZhbHNlLCB2YWxpZGF0ZTogZmFsc2UgfSk7XG4gIHByaXZhdGUgbGF0TG5nQm91bmQgPSBsYXRMbmdCb3VuZEZ1bmN0aW9uKHsgcG9pbnRGdW5jdGlvbjogdGhpcy5sYXRMbmdQb2ludCB9KTtcblxuICBjb25zdHJ1Y3RvcihASW5qZWN0KERieE1hcGJveFNlcnZpY2UpIHByaXZhdGUgcmVhZG9ubHkgZGJ4TWFwYm94U2VydmljZTogRGJ4TWFwYm94U2VydmljZSkge1xuICAgIHN1cGVyKHtcbiAgICAgIGxpZmVjeWNsZVN0YXRlOiAnaW5pdCcsXG4gICAgICBtb3ZlU3RhdGU6ICdpbml0JyxcbiAgICAgIHpvb21TdGF0ZTogJ2luaXQnLFxuICAgICAgcm90YXRlU3RhdGU6ICdpbml0JyxcbiAgICAgIHJldGFpbkNvbnRlbnQ6IHRydWVcbiAgICB9KTtcbiAgfVxuXG4gIC8vIE1BUks6IEVmZmVjdHNcbiAgcmVhZG9ubHkgc2V0TWFwU2VydmljZSA9IHRoaXMuZWZmZWN0KChpbnB1dDogT2JzZXJ2YWJsZTxNYXliZTxNYXBTZXJ2aWNlPj4pID0+IHtcbiAgICByZXR1cm4gaW5wdXQucGlwZShcbiAgICAgIHN3aXRjaE1hcCgoc2VydmljZTogTWF5YmU8TWFwU2VydmljZT4pID0+IHtcbiAgICAgICAgdGhpcy5fc2V0TWFwU2VydmljZShzZXJ2aWNlKTtcblxuICAgICAgICBpZiAoIXNlcnZpY2UpIHtcbiAgICAgICAgICByZXR1cm4gTkVWRVI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIHNlcnZpY2UubWFwTG9hZGVkJC5waXBlKFxuICAgICAgICAgICAgZGVmYXVsdElmRW1wdHkodW5kZWZpbmVkKSxcbiAgICAgICAgICAgIG1hcCgoKSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMuX3NldExpZmVjeWNsZVN0YXRlKCdpZGxlJyk7XG4gICAgICAgICAgICAgIHRoaXMuX3NldE1vdmVTdGF0ZSgnaWRsZScpO1xuICAgICAgICAgICAgICB0aGlzLl9zZXRab29tU3RhdGUoJ2lkbGUnKTtcbiAgICAgICAgICAgICAgdGhpcy5fc2V0Um90YXRlU3RhdGUoJ2lkbGUnKTtcblxuICAgICAgICAgICAgICBjb25zdCBtYXAgPSBzZXJ2aWNlLm1hcEluc3RhbmNlO1xuXG4gICAgICAgICAgICAgIGNvbnN0IGxpc3RlbmVyUGFpcnM6IFN0cmluZ01hcGJveExpc3RlbmVyUGFpcltdID0gW107XG5cbiAgICAgICAgICAgICAgZnVuY3Rpb24gYWRkTGlzdGVuZXI8VCBleHRlbmRzIGtleW9mIE1hcGJveEdsLk1hcEV2ZW50VHlwZT4odHlwZTogVCwgbGlzdGVuZXI6IChldjogTWFwYm94R2wuTWFwRXZlbnRUeXBlW1RdICYgTWFwYm94R2wuRXZlbnREYXRhKSA9PiB2b2lkKSB7XG4gICAgICAgICAgICAgICAgbWFwLm9uKHR5cGUsIGxpc3RlbmVyKTtcbiAgICAgICAgICAgICAgICBsaXN0ZW5lclBhaXJzLnB1c2goeyB0eXBlLCBsaXN0ZW5lciB9IGFzIFN0cmluZ01hcGJveExpc3RlbmVyUGFpcik7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBhZGRMaXN0ZW5lcignaWRsZScsICgpID0+IHRoaXMuX3NldExpZmVjeWNsZVN0YXRlKCdpZGxlJykpO1xuICAgICAgICAgICAgICBhZGRMaXN0ZW5lcigncmVuZGVyJywgKCkgPT4gdGhpcy5fc2V0TGlmZWN5Y2xlU3RhdGUoJ3JlbmRlcicpKTtcbiAgICAgICAgICAgICAgYWRkTGlzdGVuZXIoJ2Vycm9yJywgKHgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9zZXRFcnJvcih4LmVycm9yKTtcbiAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgYWRkTGlzdGVuZXIoJ21vdmVzdGFydCcsICgpID0+IHRoaXMuX3NldE1vdmVTdGF0ZSgnbW92aW5nJykpO1xuICAgICAgICAgICAgICBhZGRMaXN0ZW5lcignbW92ZWVuZCcsICgpID0+IHRoaXMuX3NldE1vdmVTdGF0ZSgnaWRsZScpKTtcblxuICAgICAgICAgICAgICBhZGRMaXN0ZW5lcignem9vbXN0YXJ0JywgKCkgPT4gdGhpcy5fc2V0Wm9vbVN0YXRlKCd6b29taW5nJykpO1xuICAgICAgICAgICAgICBhZGRMaXN0ZW5lcignem9vbWVuZCcsICgpID0+IHRoaXMuX3NldFpvb21TdGF0ZSgnaWRsZScpKTtcblxuICAgICAgICAgICAgICBhZGRMaXN0ZW5lcigncm90YXRlc3RhcnQnLCAoKSA9PiB0aGlzLl9zZXRSb3RhdGVTdGF0ZSgncm90YXRpbmcnKSk7XG4gICAgICAgICAgICAgIGFkZExpc3RlbmVyKCdyb3RhdGVlbmQnLCAoKSA9PiB0aGlzLl9zZXRSb3RhdGVTdGF0ZSgnaWRsZScpKTtcblxuICAgICAgICAgICAgICBhZGRMaXN0ZW5lcignY2xpY2snLCAoeCkgPT4gdGhpcy5fc2V0Q2xpY2tFdmVudCh4KSk7XG4gICAgICAgICAgICAgIGFkZExpc3RlbmVyKCdkYmxjbGljaycsICh4KSA9PiB0aGlzLl9zZXREb3VibGVDbGlja0V2ZW50KHgpKTtcbiAgICAgICAgICAgICAgYWRkTGlzdGVuZXIoJ2NvbnRleHRtZW51JywgKHgpID0+IHRoaXMuX3NldFJpZ2h0Q2xpY2tFdmVudCh4KSk7XG5cbiAgICAgICAgICAgICAgY29uc3QgcmVmcmVzaEZvclJlc2l6ZSA9ICgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCB7IGNsaWVudFdpZHRoOiB4LCBjbGllbnRIZWlnaHQ6IHkgfSA9IG1hcC5nZXRDYW52YXMoKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9zZXRNYXBDYW52YXNTaXplKHsgeCwgeSB9KTtcbiAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICBhZGRMaXN0ZW5lcigncmVzaXplJywgcmVmcmVzaEZvclJlc2l6ZSk7XG4gICAgICAgICAgICAgIHJlZnJlc2hGb3JSZXNpemUoKTtcblxuICAgICAgICAgICAgICBjb25zdCBzdWJzOiBTdWJzY3JpcHRpb25bXSA9IFtdO1xuXG4gICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgc2VydmljZSxcbiAgICAgICAgICAgICAgICBsaXN0ZW5lclBhaXJzLFxuICAgICAgICAgICAgICAgIHN1YnNcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfSksXG4gICAgICBjbGVhbnVwKCh7IHNlcnZpY2UsIGxpc3RlbmVyUGFpcnMsIHN1YnMgfSkgPT4ge1xuICAgICAgICBjb25zdCBtYXAgPSBzZXJ2aWNlLm1hcEluc3RhbmNlO1xuXG4gICAgICAgIGlmIChtYXApIHtcbiAgICAgICAgICBsaXN0ZW5lclBhaXJzLmZvckVhY2goKHgpID0+IHtcbiAgICAgICAgICAgIG1hcC5vZmYoeC50eXBlLCB4Lmxpc3RlbmVyKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHN1YnMuZm9yRWFjaCgoc3ViKSA9PiBzdWIudW5zdWJzY3JpYmUoKSk7XG4gICAgICB9KVxuICAgICk7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IHNldFN0eWxlID0gdGhpcy5lZmZlY3QoKGlucHV0OiBPYnNlcnZhYmxlPE1hcGJveFN0eWxlQ29uZmlnIHwgS25vd25NYXBib3hTdHlsZSB8IHN0cmluZz4pID0+IHtcbiAgICByZXR1cm4gaW5wdXQucGlwZShcbiAgICAgIHN3aXRjaE1hcCgoc3R5bGUpID0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWFwSW5zdGFuY2UkLnBpcGUoXG4gICAgICAgICAgdGFwKChtYXApID0+IHtcbiAgICAgICAgICAgIGlmICh0eXBlb2Ygc3R5bGUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgIG1hcC5zZXRTdHlsZShzdHlsZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBtYXAuc2V0U3R5bGUoc3R5bGUuc3R5bGUsIHN0eWxlLm9wdGlvbnMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgICB9KVxuICAgICk7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IHNldENlbnRlciA9IHRoaXMuZWZmZWN0KChpbnB1dDogT2JzZXJ2YWJsZTxMYXRMbmdQb2ludElucHV0PikgPT4ge1xuICAgIHJldHVybiBpbnB1dC5waXBlKFxuICAgICAgc3dpdGNoTWFwKChjZW50ZXI6IExhdExuZ1BvaW50SW5wdXQpID0+IHtcbiAgICAgICAgY29uc3QgY2VudGVyUG9pbnQgPSB0aGlzLnNhZmVMYXRMbmdQb2ludChjZW50ZXIpO1xuICAgICAgICByZXR1cm4gdGhpcy5tYXBJbnN0YW5jZSQucGlwZSh0YXAoKG1hcCkgPT4gbWFwLnNldENlbnRlcihjZW50ZXJQb2ludCkpKTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfSk7XG5cbiAgcmVhZG9ubHkgc2V0Wm9vbSA9IHRoaXMuZWZmZWN0KChpbnB1dDogT2JzZXJ2YWJsZTxNYXBib3hab29tTGV2ZWw+KSA9PiB7XG4gICAgcmV0dXJuIGlucHV0LnBpcGUoXG4gICAgICBzd2l0Y2hNYXAoKHpvb206IE1hcGJveFpvb21MZXZlbCkgPT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5tYXBJbnN0YW5jZSQucGlwZSh0YXAoKG1hcCkgPT4gbWFwLnNldFpvb20oem9vbSkpKTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfSk7XG5cbiAgcmVhZG9ubHkgc2V0Wm9vbVJhbmdlID0gdGhpcy5lZmZlY3QoKGlucHV0OiBPYnNlcnZhYmxlPFBhcnRpYWw8TWFwYm94Wm9vbUxldmVsUmFuZ2U+PikgPT4ge1xuICAgIHJldHVybiBpbnB1dC5waXBlKFxuICAgICAgc3dpdGNoTWFwKCh6b29tUmFuZ2U6IFBhcnRpYWw8TWFwYm94Wm9vbUxldmVsUmFuZ2U+KSA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLm1hcEluc3RhbmNlJC5waXBlKFxuICAgICAgICAgIHRhcCgobWFwKSA9PiB7XG4gICAgICAgICAgICBtYXAuc2V0TWluWm9vbSh6b29tUmFuZ2UubWluIHx8IG51bGwpO1xuICAgICAgICAgICAgbWFwLnNldE1heFpvb20oem9vbVJhbmdlLm1heCB8fCBudWxsKTtcbiAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgICAgfSlcbiAgICApO1xuICB9KTtcblxuICByZWFkb25seSBzZXRNaW5ab29tID0gdGhpcy5lZmZlY3QoKGlucHV0OiBPYnNlcnZhYmxlPE1hcGJveFpvb21MZXZlbD4pID0+IHtcbiAgICByZXR1cm4gaW5wdXQucGlwZShcbiAgICAgIHN3aXRjaE1hcCgoem9vbTogTWFwYm94Wm9vbUxldmVsKSA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLm1hcEluc3RhbmNlJC5waXBlKHRhcCgobWFwKSA9PiBtYXAuc2V0TWluWm9vbSh6b29tKSkpO1xuICAgICAgfSlcbiAgICApO1xuICB9KTtcblxuICByZWFkb25seSBzZXRNYXhab29tID0gdGhpcy5lZmZlY3QoKGlucHV0OiBPYnNlcnZhYmxlPE1hcGJveFpvb21MZXZlbD4pID0+IHtcbiAgICByZXR1cm4gaW5wdXQucGlwZShcbiAgICAgIHN3aXRjaE1hcCgoem9vbTogTWFwYm94Wm9vbUxldmVsKSA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLm1hcEluc3RhbmNlJC5waXBlKHRhcCgobWFwKSA9PiBtYXAuc2V0TWF4Wm9vbSh6b29tKSkpO1xuICAgICAgfSlcbiAgICApO1xuICB9KTtcblxuICByZWFkb25seSBzZXRLZXlib2FyZERpc2FibGVkID0gdGhpcy5lZmZlY3QoKGlucHV0OiBPYnNlcnZhYmxlPE1heWJlPGJvb2xlYW4+IHwgdm9pZD4pID0+IHtcbiAgICByZXR1cm4gaW5wdXQucGlwZShcbiAgICAgIHN3aXRjaE1hcCgoZGlzYWJsZWQ6IE1heWJlPGJvb2xlYW4+IHwgdm9pZCkgPT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5tYXBJbnN0YW5jZSQucGlwZShcbiAgICAgICAgICB0YXAoKG1hcCkgPT4ge1xuICAgICAgICAgICAgaWYgKGRpc2FibGVkID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICBtYXAua2V5Ym9hcmQuZW5hYmxlKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBtYXAua2V5Ym9hcmQuZGlzYWJsZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgICB9KVxuICAgICk7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IHNldERyYWdSb3RhdGVEaXNhYmxlZCA9IHRoaXMuZWZmZWN0KChpbnB1dDogT2JzZXJ2YWJsZTxNYXliZTxib29sZWFuPiB8IHZvaWQ+KSA9PiB7XG4gICAgcmV0dXJuIGlucHV0LnBpcGUoXG4gICAgICBzd2l0Y2hNYXAoKGRpc2FibGVkOiBNYXliZTxib29sZWFuPiB8IHZvaWQpID0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWFwSW5zdGFuY2UkLnBpcGUoXG4gICAgICAgICAgdGFwKChtYXApID0+IHtcbiAgICAgICAgICAgIGlmIChkaXNhYmxlZCA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgbWFwLmRyYWdSb3RhdGUuZW5hYmxlKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBtYXAuZHJhZ1JvdGF0ZS5kaXNhYmxlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfSk7XG5cbiAgcmVhZG9ubHkgc2V0RHJhZ1BhbkRpc2FibGVkID0gdGhpcy5lZmZlY3QoKGlucHV0OiBPYnNlcnZhYmxlPE1heWJlPGJvb2xlYW4+IHwgdm9pZD4pID0+IHtcbiAgICByZXR1cm4gaW5wdXQucGlwZShcbiAgICAgIHN3aXRjaE1hcCgoZGlzYWJsZWQ6IE1heWJlPGJvb2xlYW4+IHwgdm9pZCkgPT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5tYXBJbnN0YW5jZSQucGlwZShcbiAgICAgICAgICB0YXAoKG1hcCkgPT4ge1xuICAgICAgICAgICAgaWYgKGRpc2FibGVkID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICBtYXAuZHJhZ1Bhbi5lbmFibGUoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIG1hcC5kcmFnUGFuLmRpc2FibGUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgICAgfSlcbiAgICApO1xuICB9KTtcblxuICByZWFkb25seSBzZXRab29tRGlzYWJsZWQgPSB0aGlzLmVmZmVjdCgoaW5wdXQ6IE9ic2VydmFibGU8TWF5YmU8Ym9vbGVhbj4gfCB2b2lkPikgPT4ge1xuICAgIHJldHVybiBpbnB1dC5waXBlKFxuICAgICAgc3dpdGNoTWFwKChkaXNhYmxlZDogTWF5YmU8Ym9vbGVhbj4gfCB2b2lkKSA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLm1hcEluc3RhbmNlJC5waXBlKFxuICAgICAgICAgIHRhcCgobWFwKSA9PiB7XG4gICAgICAgICAgICBpZiAoZGlzYWJsZWQgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgIG1hcC5zY3JvbGxab29tLmVuYWJsZSgpO1xuICAgICAgICAgICAgICBtYXAuZG91YmxlQ2xpY2tab29tLmVuYWJsZSgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgbWFwLnNjcm9sbFpvb20uZGlzYWJsZSgpO1xuICAgICAgICAgICAgICBtYXAuZG91YmxlQ2xpY2tab29tLmRpc2FibGUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgICAgfSlcbiAgICApO1xuICB9KTtcblxuICByZWFkb25seSBzZXRQaXRjaCA9IHRoaXMuZWZmZWN0KChpbnB1dDogT2JzZXJ2YWJsZTxudW1iZXI+KSA9PiB7XG4gICAgcmV0dXJuIGlucHV0LnBpcGUoXG4gICAgICBzd2l0Y2hNYXAoKHBpdGNoKSA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLm1hcEluc3RhbmNlJC5waXBlKHRhcCgobWFwKSA9PiBtYXAuc2V0UGl0Y2gocGl0Y2gpKSk7XG4gICAgICB9KVxuICAgICk7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IHNldE1pblBpdGNoID0gdGhpcy5lZmZlY3QoKGlucHV0OiBPYnNlcnZhYmxlPG51bWJlcj4pID0+IHtcbiAgICByZXR1cm4gaW5wdXQucGlwZShcbiAgICAgIHN3aXRjaE1hcCgocGl0Y2g6IG51bWJlcikgPT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5tYXBJbnN0YW5jZSQucGlwZSh0YXAoKG1hcCkgPT4gbWFwLnNldE1pblBpdGNoKHBpdGNoKSkpO1xuICAgICAgfSlcbiAgICApO1xuICB9KTtcblxuICByZWFkb25seSBzZXRNYXhQaXRjaCA9IHRoaXMuZWZmZWN0KChpbnB1dDogT2JzZXJ2YWJsZTxudW1iZXI+KSA9PiB7XG4gICAgcmV0dXJuIGlucHV0LnBpcGUoXG4gICAgICBzd2l0Y2hNYXAoKHBpdGNoOiBudW1iZXIpID0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWFwSW5zdGFuY2UkLnBpcGUodGFwKChtYXApID0+IG1hcC5zZXRNYXhQaXRjaChwaXRjaCkpKTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfSk7XG5cbiAgcmVhZG9ubHkgc2V0QmVhcmluZyA9IHRoaXMuZWZmZWN0KChpbnB1dDogT2JzZXJ2YWJsZTxudW1iZXI+KSA9PiB7XG4gICAgcmV0dXJuIGlucHV0LnBpcGUoXG4gICAgICBzd2l0Y2hNYXAoKGJlYXJpbmcpID0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWFwSW5zdGFuY2UkLnBpcGUodGFwKChtYXApID0+IG1hcC5zZXRCZWFyaW5nKGJlYXJpbmcpKSk7XG4gICAgICB9KVxuICAgICk7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IHJvdGF0ZVRvID0gdGhpcy5lZmZlY3QoKGlucHV0OiBPYnNlcnZhYmxlPE1hcGJveEJlYXJpbmcgfCBNYXBib3hSb3RhdGVUbz4pID0+IHtcbiAgICByZXR1cm4gaW5wdXQucGlwZShcbiAgICAgIHN3aXRjaE1hcCgocm90YXRlSW5wdXQ6IE1hcGJveEJlYXJpbmcgfCBNYXBib3hSb3RhdGVUbykgPT4ge1xuICAgICAgICBjb25zdCByb3RhdGU6IE1hcGJveFJvdGF0ZVRvID0gdHlwZW9mIHJvdGF0ZUlucHV0ID09PSAnbnVtYmVyJyA/IHsgYmVhcmluZzogcm90YXRlSW5wdXQgfSA6IHJvdGF0ZUlucHV0O1xuICAgICAgICByZXR1cm4gdGhpcy5tYXBJbnN0YW5jZSQucGlwZSh0YXAoKG1hcCkgPT4gbWFwLnJvdGF0ZVRvKHJvdGF0ZS5iZWFyaW5nLCByb3RhdGUub3B0aW9ucywgcm90YXRlPy5ldmVudERhdGEpKSk7XG4gICAgICB9KVxuICAgICk7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IHJlc2V0Tm9ydGggPSB0aGlzLmVmZmVjdCgoaW5wdXQ6IE9ic2VydmFibGU8TWF5YmU8TWFwYm94UmVzZXROb3J0aD4gfCB2b2lkPikgPT4ge1xuICAgIHJldHVybiBpbnB1dC5waXBlKFxuICAgICAgc3dpdGNoTWFwKChyZXNldDogTWF5YmU8TWFwYm94UmVzZXROb3J0aD4gfCB2b2lkKSA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLm1hcEluc3RhbmNlJC5waXBlKHRhcCgobWFwKSA9PiBtYXAucmVzZXROb3J0aChyZXNldD8ub3B0aW9ucywgcmVzZXQ/LmV2ZW50RGF0YSkpKTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfSk7XG5cbiAgcmVhZG9ubHkgcmVzZXROb3J0aFBpdGNoID0gdGhpcy5lZmZlY3QoKGlucHV0OiBPYnNlcnZhYmxlPE1heWJlPE1hcGJveFJlc2V0Tm9ydGhQaXRjaD4gfCB2b2lkPikgPT4ge1xuICAgIHJldHVybiBpbnB1dC5waXBlKFxuICAgICAgc3dpdGNoTWFwKChyZXNldDogTWF5YmU8TWFwYm94UmVzZXROb3J0aFBpdGNoPiB8IHZvaWQpID0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWFwSW5zdGFuY2UkLnBpcGUodGFwKChtYXApID0+IG1hcC5yZXNldE5vcnRoUGl0Y2gocmVzZXQ/Lm9wdGlvbnMsIHJlc2V0Py5ldmVudERhdGEpKSk7XG4gICAgICB9KVxuICAgICk7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IHNuYXBUb05vcnRoID0gdGhpcy5lZmZlY3QoKGlucHV0OiBPYnNlcnZhYmxlPE1heWJlPE1hcGJveFNuYXBUb05vcnRoPiB8IHZvaWQ+KSA9PiB7XG4gICAgcmV0dXJuIGlucHV0LnBpcGUoXG4gICAgICBzd2l0Y2hNYXAoKHNuYXA6IE1heWJlPE1hcGJveFNuYXBUb05vcnRoPiB8IHZvaWQpID0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWFwSW5zdGFuY2UkLnBpcGUodGFwKChtYXApID0+IG1hcC5zbmFwVG9Ob3J0aChzbmFwPy5vcHRpb25zLCBzbmFwPy5ldmVudERhdGEpKSk7XG4gICAgICB9KVxuICAgICk7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IGZpdFBvc2l0aW9ucyA9IHRoaXMuZWZmZWN0KChpbnB1dDogT2JzZXJ2YWJsZTxNYXBib3hGaXRQb3NpdGlvbnM+KSA9PiB7XG4gICAgcmV0dXJuIGlucHV0LnBpcGUoXG4gICAgICBzd2l0Y2hNYXAoKHgpID0+IHtcbiAgICAgICAgY29uc3QgYm91bmRGcm9tSW5wdXQgPSBsYXRMbmdCb3VuZEZyb21JbnB1dCh4LnBvc2l0aW9ucyk7XG5cbiAgICAgICAgaWYgKGJvdW5kRnJvbUlucHV0KSB7XG4gICAgICAgICAgY29uc3QgYm91bmQgPSB0aGlzLmxhdExuZ0JvdW5kKGJvdW5kRnJvbUlucHV0KTtcbiAgICAgICAgICByZXR1cm4gdGhpcy5tYXBJbnN0YW5jZSQucGlwZSh0YXAoKG1hcCkgPT4gbWFwLmZpdEJvdW5kcyhuZXcgTWFwYm94R2wuTG5nTGF0Qm91bmRzKGJvdW5kLnN3LCBib3VuZC5uZSksIHgub3B0aW9ucywgeC5ldmVudERhdGEpKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIEVNUFRZO1xuICAgICAgICB9XG4gICAgICB9KVxuICAgICk7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IGZpdEJvdW5kcyA9IHRoaXMuZWZmZWN0KChpbnB1dDogT2JzZXJ2YWJsZTxNYXBib3hGaXRCb3VuZHM+KSA9PiB7XG4gICAgcmV0dXJuIGlucHV0LnBpcGUoXG4gICAgICBzd2l0Y2hNYXAoKHgpID0+IHtcbiAgICAgICAgY29uc3QgYm91bmQgPSB0aGlzLmxhdExuZ0JvdW5kKHguYm91bmRzKTtcbiAgICAgICAgcmV0dXJuIHRoaXMubWFwSW5zdGFuY2UkLnBpcGUodGFwKChtYXApID0+IG1hcC5maXRCb3VuZHMobmV3IE1hcGJveEdsLkxuZ0xhdEJvdW5kcyhib3VuZC5zdywgYm91bmQubmUpLCB4Lm9wdGlvbnMsIHguZXZlbnREYXRhKSkpO1xuICAgICAgfSlcbiAgICApO1xuICB9KTtcblxuICByZWFkb25seSBqdW1wVG8gPSB0aGlzLmVmZmVjdCgoaW5wdXQ6IE9ic2VydmFibGU8TWFwYm94SnVtcFRvPikgPT4ge1xuICAgIHJldHVybiBpbnB1dC5waXBlKFxuICAgICAgc3dpdGNoTWFwKCh4KSA9PiB7XG4gICAgICAgIGNvbnN0IGlucHV0Q2VudGVyID0geC5jZW50ZXIgPz8geC50bz8uY2VudGVyO1xuICAgICAgICBjb25zdCBjZW50ZXIgPSBpbnB1dENlbnRlciA/IHRoaXMuc2FmZUxhdExuZ1BvaW50KGlucHV0Q2VudGVyKSA6IHVuZGVmaW5lZDtcbiAgICAgICAgcmV0dXJuIHRoaXMubWFwSW5zdGFuY2UkLnBpcGUodGFwKChtYXApID0+IG1hcC5qdW1wVG8oZmlsdGVyVW5kZWZpbmVkVmFsdWVzKHsgLi4ueC50bywgY2VudGVyIH0pLCB4LmV2ZW50RGF0YSkpKTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfSk7XG5cbiAgcmVhZG9ubHkgZWFzZVRvID0gdGhpcy5lZmZlY3QoKGlucHV0OiBPYnNlcnZhYmxlPE1hcGJveEVhc2VUbz4pID0+IHtcbiAgICByZXR1cm4gaW5wdXQucGlwZShcbiAgICAgIHN3aXRjaE1hcCgoeCkgPT4ge1xuICAgICAgICBjb25zdCBpbnB1dENlbnRlciA9IHguY2VudGVyID8/IHgudG8/LmNlbnRlcjtcbiAgICAgICAgY29uc3QgY2VudGVyID0gaW5wdXRDZW50ZXIgPyB0aGlzLnNhZmVMYXRMbmdQb2ludChpbnB1dENlbnRlcikgOiB1bmRlZmluZWQ7XG4gICAgICAgIHJldHVybiB0aGlzLm1hcEluc3RhbmNlJC5waXBlKHRhcCgobWFwKSA9PiBtYXAuZWFzZVRvKGZpbHRlclVuZGVmaW5lZFZhbHVlcyh7IC4uLngudG8sIGNlbnRlciB9KSwgeC5ldmVudERhdGEpKSk7XG4gICAgICB9KVxuICAgICk7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IGZseVRvID0gdGhpcy5lZmZlY3QoKGlucHV0OiBPYnNlcnZhYmxlPE1hcGJveEZseVRvPikgPT4ge1xuICAgIHJldHVybiBpbnB1dC5waXBlKFxuICAgICAgc3dpdGNoTWFwKCh4KSA9PiB7XG4gICAgICAgIGNvbnN0IGlucHV0Q2VudGVyID0geC5jZW50ZXIgPz8geC50bz8uY2VudGVyO1xuICAgICAgICBjb25zdCBjZW50ZXIgPSBpbnB1dENlbnRlciA/IHRoaXMuc2FmZUxhdExuZ1BvaW50KGlucHV0Q2VudGVyKSA6IHVuZGVmaW5lZDtcbiAgICAgICAgcmV0dXJuIHRoaXMubWFwSW5zdGFuY2UkLnBpcGUodGFwKChtYXApID0+IG1hcC5mbHlUbyhmaWx0ZXJVbmRlZmluZWRWYWx1ZXMoeyAuLi54LnRvLCBjZW50ZXIgfSksIHguZXZlbnREYXRhKSkpO1xuICAgICAgfSlcbiAgICApO1xuICB9KTtcblxuICByZWFkb25seSByZXNldFBpdGNoQW5kQmVhcmluZyA9IHRoaXMuZWZmZWN0KChpbnB1dDogT2JzZXJ2YWJsZTx2b2lkPikgPT4ge1xuICAgIHJldHVybiBpbnB1dC5waXBlKFxuICAgICAgc3dpdGNoTWFwKCgpID0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWFwSW5zdGFuY2UkLnBpcGUoXG4gICAgICAgICAgdGFwKChtYXApID0+IHtcbiAgICAgICAgICAgIG1hcC5zZXRQaXRjaCgwKTtcbiAgICAgICAgICAgIG1hcC5zZXRCZWFyaW5nKDApO1xuICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgICB9KVxuICAgICk7XG4gIH0pO1xuXG4gIC8vIE1BUks6IEFjY2Vzc29yc1xuICBnZXQgdGltZXJSZWZyZXNoUGVyaW9kKCkge1xuICAgIHJldHVybiB0aGlzLmRieE1hcGJveFNlcnZpY2UubWFwYm94TWFwU3RvcmVUaW1lclJlZnJlc2hQZXJpb2Q7XG4gIH1cblxuICBtb3ZpbmdUaW1lcihwZXJpb2QgPSB0aGlzLnRpbWVyUmVmcmVzaFBlcmlvZCkge1xuICAgIHJldHVybiB0aGlzLm1vdmVTdGF0ZSQucGlwZShcbiAgICAgIHN3aXRjaE1hcCgoeCkgPT4ge1xuICAgICAgICBpZiAoeCA9PT0gJ21vdmluZycpIHtcbiAgICAgICAgICByZXR1cm4gaW50ZXJ2YWwocGVyaW9kKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gb2YoMCk7XG4gICAgICAgIH1cbiAgICAgIH0pLFxuICAgICAgc2hhcmVSZXBsYXkoKVxuICAgICk7XG4gIH1cblxuICBsaWZlY3ljbGVSZW5kZXJUaW1lcihwZXJpb2QgPSB0aGlzLnRpbWVyUmVmcmVzaFBlcmlvZCkge1xuICAgIHJldHVybiB0aGlzLmxpZmVjeWNsZVN0YXRlJC5waXBlKFxuICAgICAgc3dpdGNoTWFwKCh4KSA9PiB7XG4gICAgICAgIGlmICh4ID09PSAncmVuZGVyJykge1xuICAgICAgICAgIHJldHVybiBpbnRlcnZhbChwZXJpb2QpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBvZigwKTtcbiAgICAgICAgfVxuICAgICAgfSksXG4gICAgICBzaGFyZVJlcGxheSgpXG4gICAgKTtcbiAgfVxuXG4gIGF0TmV4dElkbGUoKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMubW92ZVN0YXRlJC5waXBlKFxuICAgICAgbWFwKCh4KSA9PiB4ID09PSAnaWRsZScpLFxuICAgICAgZmlyc3QoKVxuICAgICk7XG4gIH1cblxuICBjYWxjdWxhdGVOZXh0Q2VudGVyV2l0aE9mZnNldChpbnB1dE9mZnNldDogTGF0TG5nUG9pbnRJbnB1dCk6IE9ic2VydmFibGU8TGF0TG5nUG9pbnQ+IHtcbiAgICBjb25zdCBvZmZzZXQgPSB0aGlzLmxhdExuZ1BvaW50KGlucHV0T2Zmc2V0KTtcblxuICAgIHJldHVybiB0aGlzLmF0TmV4dElkbGUoKS5waXBlKFxuICAgICAgc3dpdGNoTWFwKCgpID0+XG4gICAgICAgIHRoaXMuY2VudGVyJC5waXBlKFxuICAgICAgICAgIGZpcnN0KCksXG4gICAgICAgICAgbWFwKChjZW50ZXIpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG5ld0NlbnRlciA9IHtcbiAgICAgICAgICAgICAgbGF0OiBvZmZzZXQubGF0ICsgY2VudGVyLmxhdCxcbiAgICAgICAgICAgICAgbG5nOiBvZmZzZXQubG5nICsgY2VudGVyLmxuZ1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHJldHVybiBuZXdDZW50ZXI7XG4gICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgICAgKVxuICAgICk7XG4gIH1cblxuICBjYWxjdWxhdGVOZXh0Q2VudGVyT2Zmc2V0V2l0aFNjcmVlbk1hcmdpbkNoYW5nZShzaXppbmc6IERieE1hcGJveE1hcmdpbkNhbGN1bGF0aW9uU2l6aW5nKTogT2JzZXJ2YWJsZTxMYXRMbmdQb2ludD4ge1xuICAgIC8vIFRPRE86IENvbnNpZGVyIGNhbGN1bGF0aW5nIHRoaXMgdXNpbmcgdGhlIHZpZXdwb3J0KCkgZnVuY3Rpb24gZnJvbSBAbWFwYm94L2dlby12aWV3cG9ydFxuICAgIHJldHVybiB0aGlzLmF0TmV4dElkbGUoKS5waXBlKFxuICAgICAgc3dpdGNoTWFwKCgpID0+XG4gICAgICAgIHRoaXMuYm91bmQkLnBpcGUoXG4gICAgICAgICAgZmlyc3QoKSxcbiAgICAgICAgICBtYXAoKGJvdW5kcykgPT4ge1xuICAgICAgICAgICAgY29uc3QgZGlmZiA9IGRpZmZMYXRMbmdCb3VuZFBvaW50cyhib3VuZHMsIHRydWUpO1xuICAgICAgICAgICAgY29uc3QgY2VudGVyID0gbGF0TG5nQm91bmRDZW50ZXJQb2ludChib3VuZHMpO1xuXG4gICAgICAgICAgICBjb25zdCBvZmZzZXRXaWR0aCA9IHNpemluZy5sZWZ0TWFyZ2luICsgc2l6aW5nLnJpZ2h0TWFyZ2luOyAvLyAzMDAgKyAwXG4gICAgICAgICAgICBjb25zdCBuZXdXaWR0aCA9IHNpemluZy5mdWxsV2lkdGggLSBvZmZzZXRXaWR0aDsgLy8gMTAwMCAtIDMwMCAtIDBcbiAgICAgICAgICAgIGNvbnN0IG5ld1dpZHRoUmF0aW8gPSBuZXdXaWR0aCAvIHNpemluZy5mdWxsV2lkdGg7IC8vIDcwMCAvIDEwMDBcbiAgICAgICAgICAgIGNvbnN0IG5ld0NlbnRlckxvbmdpdHVkZVdpZHRoID0gZGlmZi5sbmcgKiBuZXdXaWR0aFJhdGlvOyAvLyA3MCUgb2Zmc2V0XG5cbiAgICAgICAgICAgIGNvbnN0IGVmZmVjdGl2ZU9mZnNldDogTGF0TG5nUG9pbnQgPSB7XG4gICAgICAgICAgICAgIGxhdDogMCxcbiAgICAgICAgICAgICAgbG5nOiBuZXdDZW50ZXJMb25naXR1ZGVXaWR0aCAvIDJcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGNvbnN0IG5ld0NlbnRlciA9IGFkZExhdExuZ1BvaW50cyhib3VuZHMuc3csIGVmZmVjdGl2ZU9mZnNldCk7XG4gICAgICAgICAgICBuZXdDZW50ZXIubGF0ID0gY2VudGVyLmxhdDsgLy8gcmV0YWluIGNlbnRlciBwb3NpdGlvblxuXG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZyh7IHNpemluZywgYm91bmRzLCBlZmZlY3RpdmVPZmZzZXQsIG5ld1dpZHRoLCBvZmZzZXRXaWR0aCwgZGlmZiwgY2VudGVyLCBuZXdDZW50ZXIgfSk7XG5cbiAgICAgICAgICAgIHJldHVybiBuZXdDZW50ZXI7XG4gICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgICAgKVxuICAgICk7XG4gIH1cblxuICByZWFkb25seSBjdXJyZW50TWFwU2VydmljZSQgPSB0aGlzLnN0YXRlJC5waXBlKFxuICAgIG1hcCgoeCkgPT4geC5tYXBTZXJ2aWNlKSxcbiAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgcmVhZG9ubHkgbWFwU2VydmljZSQgPSB0aGlzLmN1cnJlbnRNYXBTZXJ2aWNlJC5waXBlKGZpbHRlck1heWJlKCkpO1xuXG4gIHJlYWRvbmx5IGN1cnJlbnRNYXBJbnN0YW5jZSQ6IE9ic2VydmFibGU8TWF5YmU8TWFwYm94R2wuTWFwPj4gPSB0aGlzLmN1cnJlbnRNYXBTZXJ2aWNlJC5waXBlKFxuICAgIHN3aXRjaE1hcCgoY3VycmVudE1hcFNlcnZpY2U6IE1heWJlPE1hcFNlcnZpY2U+KSA9PiB7XG4gICAgICBpZiAoY3VycmVudE1hcFNlcnZpY2UpIHtcbiAgICAgICAgcmV0dXJuIGN1cnJlbnRNYXBTZXJ2aWNlLm1hcExvYWRlZCQucGlwZShcbiAgICAgICAgICBkZWZhdWx0SWZFbXB0eSh1bmRlZmluZWQpLFxuICAgICAgICAgIG1hcCgoKSA9PiBjdXJyZW50TWFwU2VydmljZS5tYXBJbnN0YW5jZSlcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBvZih1bmRlZmluZWQpO1xuICAgICAgfVxuICAgIH0pLFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSBtYXBJbnN0YW5jZSQgPSB0aGlzLmN1cnJlbnRNYXBJbnN0YW5jZSQucGlwZShmaWx0ZXJNYXliZSgpKTtcblxuICByZWFkb25seSBtb3ZlU3RhdGUkID0gdGhpcy5zdGF0ZSQucGlwZShcbiAgICBtYXAoKHgpID0+IHgubW92ZVN0YXRlKSxcbiAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgcmVhZG9ubHkgbGlmZWN5Y2xlU3RhdGUkID0gdGhpcy5zdGF0ZSQucGlwZShcbiAgICBtYXAoKHgpID0+IHgubGlmZWN5Y2xlU3RhdGUpLFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSB6b29tU3RhdGUkID0gdGhpcy5zdGF0ZSQucGlwZShcbiAgICBtYXAoKHgpID0+IHguem9vbVN0YXRlKSxcbiAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgcmVhZG9ubHkgcm90YXRlU3RhdGUkID0gdGhpcy5zdGF0ZSQucGlwZShcbiAgICBtYXAoKHgpID0+IHgucm90YXRlU3RhdGUpLFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSBpc0luaXRpYWxpemVkJCA9IHRoaXMuY3VycmVudE1hcEluc3RhbmNlJC5waXBlKFxuICAgIHN3aXRjaE1hcCgoeCkgPT4ge1xuICAgICAgaWYgKCF4KSB7XG4gICAgICAgIHJldHVybiBvZihmYWxzZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gY29tYmluZUxhdGVzdChbdGhpcy5tb3ZlU3RhdGUkLnBpcGUobWFwKCh4KSA9PiB4ID09PSAnaWRsZScpKSwgdGhpcy5saWZlY3ljbGVTdGF0ZSQucGlwZShtYXAoKHgpID0+IHggPT09ICdpZGxlJykpXSkucGlwZShcbiAgICAgICAgICBmaWx0ZXIoKFttLCBsXSkgPT4gbSAmJiBsKSxcbiAgICAgICAgICBmaXJzdCgpLFxuICAgICAgICAgIG1hcCgoKSA9PiB0cnVlKVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH0pLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgcmVhZG9ubHkgd2hlbkluaXRpYWxpemVkJCA9IHRoaXMuaXNJbml0aWFsaXplZCQucGlwZShcbiAgICBmaWx0ZXIoKHgpID0+IHRydWUpLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgcmVhZG9ubHkgaXNSZW5kZXJpbmckID0gdGhpcy53aGVuSW5pdGlhbGl6ZWQkLnBpcGUoXG4gICAgc3dpdGNoTWFwKCgpID0+XG4gICAgICB0aGlzLmxpZmVjeWNsZVN0YXRlJC5waXBlKFxuICAgICAgICBtYXAoKHgpID0+IHggPT09ICdyZW5kZXInKSxcbiAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICAgICAgc2hhcmVSZXBsYXkoKVxuICAgICAgKVxuICAgIClcbiAgKTtcblxuICByZWFkb25seSBpc01vdmluZyQgPSB0aGlzLndoZW5Jbml0aWFsaXplZCQucGlwZShcbiAgICBzd2l0Y2hNYXAoKCkgPT5cbiAgICAgIHRoaXMubW92ZVN0YXRlJC5waXBlKFxuICAgICAgICBtYXAoKHgpID0+IHggPT09ICdtb3ZpbmcnKSxcbiAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICAgICAgc2hhcmVSZXBsYXkoKVxuICAgICAgKVxuICAgIClcbiAgKTtcblxuICByZWFkb25seSBpc1pvb21pbmckID0gdGhpcy53aGVuSW5pdGlhbGl6ZWQkLnBpcGUoXG4gICAgc3dpdGNoTWFwKCgpID0+XG4gICAgICB0aGlzLnpvb21TdGF0ZSQucGlwZShcbiAgICAgICAgbWFwKCh4KSA9PiB4ID09PSAnem9vbWluZycpLFxuICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgICAgICBzaGFyZVJlcGxheSgpXG4gICAgICApXG4gICAgKVxuICApO1xuXG4gIHJlYWRvbmx5IGlzUm90YXRpbmckID0gdGhpcy53aGVuSW5pdGlhbGl6ZWQkLnBpcGUoXG4gICAgc3dpdGNoTWFwKCgpID0+XG4gICAgICB0aGlzLnJvdGF0ZVN0YXRlJC5waXBlKFxuICAgICAgICBtYXAoKHgpID0+IHggPT09ICdyb3RhdGluZycpLFxuICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgICAgICBzaGFyZVJlcGxheSgpXG4gICAgICApXG4gICAgKVxuICApO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX21vdmluZ1RpbWVyID0gdGhpcy5tb3ZpbmdUaW1lcigpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZW5kZXJpbmdUaW1lciA9IHRoaXMubGlmZWN5Y2xlUmVuZGVyVGltZXIoKTtcblxuICByZWFkb25seSBjZW50ZXJOb3ckOiBPYnNlcnZhYmxlPExhdExuZ1BvaW50PiA9IHRoaXMud2hlbkluaXRpYWxpemVkJC5waXBlKFxuICAgIHN3aXRjaE1hcCgoKSA9PlxuICAgICAgdGhpcy5tYXBJbnN0YW5jZSQucGlwZShcbiAgICAgICAgc3dpdGNoTWFwKCh4KSA9PiB0aGlzLl9tb3ZpbmdUaW1lci5waXBlKG1hcCgoKSA9PiB0aGlzLmxhdExuZ1BvaW50KHguZ2V0Q2VudGVyKCkpKSkpLFxuICAgICAgICBzaGFyZVJlcGxheSgxKVxuICAgICAgKVxuICAgICksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSBjZW50ZXIkOiBPYnNlcnZhYmxlPExhdExuZ1BvaW50PiA9IHRoaXMud2hlbkluaXRpYWxpemVkJC5waXBlKFxuICAgIHN3aXRjaE1hcCgoKSA9PiB7XG4gICAgICByZXR1cm4gdGhpcy5pc01vdmluZyQucGlwZShcbiAgICAgICAgb25UcnVlVG9GYWxzZSgpLFxuICAgICAgICBzdGFydFdpdGgodW5kZWZpbmVkKSxcbiAgICAgICAgc3dpdGNoTWFwKCgpID0+IHRoaXMuY2VudGVyTm93JC5waXBlKGZpcnN0KCkpKSxcbiAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoaXNTYW1lTGF0TG5nUG9pbnQpLFxuICAgICAgICBzaGFyZVJlcGxheSgxKVxuICAgICAgKTtcbiAgICB9KSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIHJlYWRvbmx5IG1hcmdpbiQgPSB0aGlzLnN0YXRlJC5waXBlKFxuICAgIG1hcCgoeCkgPT4geC5tYXJnaW4pLFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKChhLCBiKSA9PiBhICE9IG51bGwgJiYgYiAhPSBudWxsICYmIGEuZnVsbFdpZHRoID09PSBiLmZ1bGxXaWR0aCAmJiBhLmxlZnRNYXJnaW4gPT09IGIubGVmdE1hcmdpbiAmJiBhLnJpZ2h0TWFyZ2luID09PSBiLnJpZ2h0TWFyZ2luKSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIHJlYWRvbmx5IHJldmVyc2VNYXJnaW4kID0gdGhpcy5tYXJnaW4kLnBpcGUoXG4gICAgbWFwKCh4KSA9PiB7XG4gICAgICBpZiAoeCkge1xuICAgICAgICByZXR1cm4geyBsZWZ0TWFyZ2luOiAteC5sZWZ0TWFyZ2luLCByaWdodE1hcmdpbjogLXgucmlnaHRNYXJnaW4sIGZ1bGxXaWR0aDogeC5mdWxsV2lkdGggfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB4O1xuICAgICAgfVxuICAgIH0pXG4gICk7XG5cbiAgcmVhZG9ubHkgY2VudGVyR2l2ZW5NYXJnaW4kOiBPYnNlcnZhYmxlPExhdExuZ1BvaW50PiA9IHRoaXMud2hlbkluaXRpYWxpemVkJC5waXBlKFxuICAgIHN3aXRjaE1hcCgoKSA9PiB7XG4gICAgICByZXR1cm4gdGhpcy5yZXZlcnNlTWFyZ2luJC5waXBlKFxuICAgICAgICBzd2l0Y2hNYXAoKHgpID0+IHtcbiAgICAgICAgICBpZiAoeCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2VudGVyJC5waXBlKHN3aXRjaE1hcCgoXykgPT4gdGhpcy5jYWxjdWxhdGVOZXh0Q2VudGVyT2Zmc2V0V2l0aFNjcmVlbk1hcmdpbkNoYW5nZSh4KSkpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5pc01vdmluZyQucGlwZShcbiAgICAgICAgICAgICAgZmlsdGVyKCh4KSA9PiAheCksXG4gICAgICAgICAgICAgIHN3aXRjaE1hcCgoKSA9PiB0aGlzLmNlbnRlciQpXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgfSksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSBib3VuZE5vdyQ6IE9ic2VydmFibGU8TGF0TG5nQm91bmQ+ID0gdGhpcy53aGVuSW5pdGlhbGl6ZWQkLnBpcGUoXG4gICAgc3dpdGNoTWFwKCgpID0+XG4gICAgICB0aGlzLm1hcEluc3RhbmNlJC5waXBlKFxuICAgICAgICBzd2l0Y2hNYXAoKHgpID0+XG4gICAgICAgICAgdGhpcy5fcmVuZGVyaW5nVGltZXIucGlwZShcbiAgICAgICAgICAgIG1hcCgoKSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IGJvdW5kID0geC5nZXRCb3VuZHMoKTtcbiAgICAgICAgICAgICAgY29uc3QgYm91bmRTdyA9IGJvdW5kLmdldFNvdXRoV2VzdCgpO1xuICAgICAgICAgICAgICBjb25zdCBib3VuZE5lID0gYm91bmQuZ2V0Tm9ydGhFYXN0KCk7XG5cbiAgICAgICAgICAgICAgY29uc3Qgc3cgPSBpc0RlZmF1bHRMYXRMbmdQb2ludChib3VuZFN3KSA/IHN3TW9zdExhdExuZ1BvaW50KCkgOiB7IGxhdDogYm91bmRTdy5sYXQsIGxuZzogYm91bmRTdy5sbmcgfTtcbiAgICAgICAgICAgICAgY29uc3QgbmUgPSBpc0RlZmF1bHRMYXRMbmdQb2ludChib3VuZE5lKSA/IG5lTW9zdExhdExuZ1BvaW50KCkgOiB7IGxhdDogYm91bmROZS5sYXQsIGxuZzogYm91bmROZS5sbmcgfTtcblxuICAgICAgICAgICAgICByZXR1cm4gdGhpcy5sYXRMbmdCb3VuZChzdywgbmUpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICApXG4gICAgICAgICksXG4gICAgICAgIHNoYXJlUmVwbGF5KDEpXG4gICAgICApXG4gICAgKVxuICApO1xuXG4gIHJlYWRvbmx5IGJvdW5kJDogT2JzZXJ2YWJsZTxMYXRMbmdCb3VuZD4gPSB0aGlzLndoZW5Jbml0aWFsaXplZCQucGlwZShcbiAgICBzd2l0Y2hNYXAoKCkgPT4ge1xuICAgICAgcmV0dXJuIHRoaXMuaXNSZW5kZXJpbmckLnBpcGUoXG4gICAgICAgIG9uVHJ1ZVRvRmFsc2UoKSxcbiAgICAgICAgc3RhcnRXaXRoKHVuZGVmaW5lZCksXG4gICAgICAgIHN3aXRjaE1hcCgoeCkgPT4gdGhpcy5ib3VuZE5vdyQucGlwZShmaXJzdCgpKSksXG4gICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKGlzU2FtZUxhdExuZ0JvdW5kKSxcbiAgICAgICAgc2hhcmVSZXBsYXkoMSlcbiAgICAgICk7XG4gICAgfSlcbiAgKTtcblxuICByZWFkb25seSBib3VuZFNpemluZyQ6IE9ic2VydmFibGU8TGF0TG5nUG9pbnQ+ID0gdGhpcy5ib3VuZCQucGlwZShcbiAgICBtYXAoKHgpID0+IGRpZmZMYXRMbmdCb3VuZFBvaW50cyh4KSksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSBib3VuZFdyYXBzQXJvdW5kV29ybGQkOiBPYnNlcnZhYmxlPGJvb2xlYW4+ID0gdGhpcy5ib3VuZCQucGlwZShcbiAgICBtYXAoKHgpID0+IGxhdExuZ0JvdW5kV3JhcHNNYXAoeCkpLFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSBpc1dpdGhpbkJvdW5kRnVuY3Rpb24kOiBPYnNlcnZhYmxlPElzV2l0aGluTGF0TG5nQm91bmRGdW5jdGlvbj4gPSB0aGlzLmJvdW5kJC5waXBlKFxuICAgIG1hcCgoeCkgPT4gaXNXaXRoaW5MYXRMbmdCb3VuZEZ1bmN0aW9uKHgpKSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIHJlYWRvbmx5IG92ZXJsYXBzQm91bmRGdW5jdGlvbiQ6IE9ic2VydmFibGU8T3ZlcmxhcHNMYXRMbmdCb3VuZEZ1bmN0aW9uPiA9IHRoaXMuYm91bmQkLnBpcGUoXG4gICAgbWFwKCh4KSA9PiBvdmVybGFwc0xhdExuZ0JvdW5kRnVuY3Rpb24oeCkpLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgcmVhZG9ubHkgem9vbU5vdyQ6IE9ic2VydmFibGU8TWFwYm94Wm9vbUxldmVsPiA9IHRoaXMud2hlbkluaXRpYWxpemVkJC5waXBlKFxuICAgIHN3aXRjaE1hcCgoKSA9PlxuICAgICAgdGhpcy5tYXBJbnN0YW5jZSQucGlwZShcbiAgICAgICAgc3dpdGNoTWFwKCh4KSA9PiB0aGlzLl9yZW5kZXJpbmdUaW1lci5waXBlKG1hcCgoKSA9PiB4LmdldFpvb20oKSBhcyBNYXBib3hab29tTGV2ZWwpKSksXG4gICAgICAgIHNoYXJlUmVwbGF5KDEpXG4gICAgICApXG4gICAgKVxuICApO1xuXG4gIHJlYWRvbmx5IHpvb20kOiBPYnNlcnZhYmxlPE1hcGJveFpvb21MZXZlbD4gPSB0aGlzLndoZW5Jbml0aWFsaXplZCQucGlwZShcbiAgICBzd2l0Y2hNYXAoKCkgPT4ge1xuICAgICAgcmV0dXJuIHRoaXMuaXNab29taW5nJC5waXBlKFxuICAgICAgICBvblRydWVUb0ZhbHNlKCksXG4gICAgICAgIHN0YXJ0V2l0aCh1bmRlZmluZWQpLFxuICAgICAgICBzd2l0Y2hNYXAoKCkgPT4gdGhpcy56b29tTm93JC5waXBlKGZpcnN0KCkpKSxcbiAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICAgICAgc2hhcmVSZXBsYXkoMSlcbiAgICAgICk7XG4gICAgfSlcbiAgKTtcblxuICByZWFkb25seSBwaXRjaE5vdyQgPSB0aGlzLndoZW5Jbml0aWFsaXplZCQucGlwZShcbiAgICBzd2l0Y2hNYXAoKCkgPT5cbiAgICAgIHRoaXMubWFwSW5zdGFuY2UkLnBpcGUoXG4gICAgICAgIHN3aXRjaE1hcCgoeCkgPT4gdGhpcy5fbW92aW5nVGltZXIucGlwZShtYXAoKCkgPT4geC5nZXRQaXRjaCgpKSkpLFxuICAgICAgICBzaGFyZVJlcGxheSgxKVxuICAgICAgKVxuICAgIClcbiAgKTtcblxuICByZWFkb25seSBwaXRjaCQgPSB0aGlzLndoZW5Jbml0aWFsaXplZCQucGlwZShcbiAgICBzd2l0Y2hNYXAoKCkgPT4ge1xuICAgICAgcmV0dXJuIHRoaXMuaXNSb3RhdGluZyQucGlwZShcbiAgICAgICAgb25UcnVlVG9GYWxzZSgpLFxuICAgICAgICBzdGFydFdpdGgodW5kZWZpbmVkKSxcbiAgICAgICAgc3dpdGNoTWFwKCgpID0+IHRoaXMucGl0Y2hOb3ckLnBpcGUoZmlyc3QoKSkpLFxuICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgICAgICBzaGFyZVJlcGxheSgxKVxuICAgICAgKTtcbiAgICB9KVxuICApO1xuXG4gIHJlYWRvbmx5IGJlYXJpbmdOb3ckID0gdGhpcy53aGVuSW5pdGlhbGl6ZWQkLnBpcGUoXG4gICAgc3dpdGNoTWFwKCgpID0+XG4gICAgICB0aGlzLm1hcEluc3RhbmNlJC5waXBlKFxuICAgICAgICBzd2l0Y2hNYXAoKHgpID0+IHRoaXMuX21vdmluZ1RpbWVyLnBpcGUobWFwKCgpID0+IHguZ2V0QmVhcmluZygpKSkpLFxuICAgICAgICBzaGFyZVJlcGxheSgxKVxuICAgICAgKVxuICAgIClcbiAgKTtcblxuICByZWFkb25seSBiZWFyaW5nJCA9IHRoaXMud2hlbkluaXRpYWxpemVkJC5waXBlKFxuICAgIHN3aXRjaE1hcCgoKSA9PiB7XG4gICAgICByZXR1cm4gdGhpcy5pc1JvdGF0aW5nJC5waXBlKFxuICAgICAgICBvblRydWVUb0ZhbHNlKCksXG4gICAgICAgIHN0YXJ0V2l0aCh1bmRlZmluZWQpLFxuICAgICAgICBzd2l0Y2hNYXAoKCkgPT4gdGhpcy5iZWFyaW5nTm93JC5waXBlKGZpcnN0KCkpKSxcbiAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICAgICAgc2hhcmVSZXBsYXkoMSlcbiAgICAgICk7XG4gICAgfSlcbiAgKTtcblxuICByZWFkb25seSBjb250ZW50JCA9IHRoaXMuc3RhdGUkLnBpcGUoXG4gICAgbWFwKCh4KSA9PiB4LmNvbnRlbnQpLFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSBoYXNDb250ZW50JCA9IHRoaXMuY29udGVudCQucGlwZShtYXAoQm9vbGVhbikpO1xuXG4gIHJlYWRvbmx5IGN1cnJlbnRNYXBDYW52YXNTaXplJCA9IHRoaXMuc3RhdGUkLnBpcGUoXG4gICAgbWFwKCh4KSA9PiB4Lm1hcENhbnZhc1NpemUpLFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKChhLCBiKSA9PiBhICE9IG51bGwgJiYgYiAhPSBudWxsICYmIHZlY3RvcnNBcmVFcXVhbChhLCBiKSksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSBtYXBDYW52YXNTaXplJCA9IHRoaXMuY3VycmVudE1hcENhbnZhc1NpemUkLnBpcGUoZmlsdGVyTWF5YmUoKSk7XG5cbiAgcmVhZG9ubHkgdmlld3BvcnRCb3VuZEZ1bmN0aW9uJDogT2JzZXJ2YWJsZTxNYXBib3hWaWV3cG9ydEJvdW5kRnVuY3Rpb24+ID0gdGhpcy5tYXBDYW52YXNTaXplJC5waXBlKFxuICAgIG1hcCgoeCkgPT4gbWFwYm94Vmlld3BvcnRCb3VuZEZ1bmN0aW9uKHsgbWFwQ2FudmFzU2l6ZTogeCB9KSksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSBjbGlja0V2ZW50JCA9IHRoaXMuc3RhdGUkLnBpcGUoXG4gICAgbWFwKCh4KSA9PiB4LmNsaWNrRXZlbnQpLFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSBkb3VibGVDbGlja0V2ZW50JCA9IHRoaXMuc3RhdGUkLnBpcGUoXG4gICAgbWFwKCh4KSA9PiB4LmRvdWJsZUNsaWNrRXZlbnQpLFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSByaWdodENsaWNrRXZlbnQkID0gdGhpcy5zdGF0ZSQucGlwZShcbiAgICBtYXAoKHgpID0+IHgucmlnaHRDbGlja0V2ZW50KSxcbiAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgLy8gTUFSSzogU3RhdGUgQ2hhbmdlc1xuICByZWFkb25seSBzZXRNYXJnaW4gPSB0aGlzLnVwZGF0ZXIoKHN0YXRlLCBtYXJnaW46IE1heWJlPERieE1hcGJveE1hcmdpbkNhbGN1bGF0aW9uU2l6aW5nPikgPT4gKHsgLi4uc3RhdGUsIG1hcmdpbjogbWFyZ2luICYmIChtYXJnaW4ucmlnaHRNYXJnaW4gIT09IDAgfHwgbWFyZ2luLmxlZnRNYXJnaW4gIT09IDApID8gbWFyZ2luIDogdW5kZWZpbmVkIH0pKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IF9zZXRNYXBTZXJ2aWNlID0gdGhpcy51cGRhdGVyKChzdGF0ZSwgbWFwU2VydmljZTogTWF5YmU8TWFwU2VydmljZT4pID0+ICh7IG1hcFNlcnZpY2UsIG1vdmVTdGF0ZTogJ2luaXQnLCBsaWZlY3ljbGVTdGF0ZTogJ2luaXQnLCB6b29tU3RhdGU6ICdpbml0Jywgcm90YXRlU3RhdGU6ICdpbml0JywgcmV0YWluQ29udGVudDogc3RhdGUucmV0YWluQ29udGVudCwgY29udGVudDogc3RhdGUucmV0YWluQ29udGVudCA/IHN0YXRlLmNvbnRlbnQgOiB1bmRlZmluZWQgfSkpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9zZXRMaWZlY3ljbGVTdGF0ZSA9IHRoaXMudXBkYXRlcigoc3RhdGUsIGxpZmVjeWNsZVN0YXRlOiBNYXBib3hNYXBMaWZlY3ljbGVTdGF0ZSkgPT4gKHsgLi4uc3RhdGUsIGxpZmVjeWNsZVN0YXRlIH0pKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfc2V0TW92ZVN0YXRlID0gdGhpcy51cGRhdGVyKChzdGF0ZSwgbW92ZVN0YXRlOiBNYXBib3hNYXBNb3ZlU3RhdGUpID0+ICh7IC4uLnN0YXRlLCBtb3ZlU3RhdGUgfSkpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9zZXRab29tU3RhdGUgPSB0aGlzLnVwZGF0ZXIoKHN0YXRlLCB6b29tU3RhdGU6IE1hcGJveE1hcFpvb21TdGF0ZSkgPT4gKHsgLi4uc3RhdGUsIHpvb21TdGF0ZSB9KSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3NldFJvdGF0ZVN0YXRlID0gdGhpcy51cGRhdGVyKChzdGF0ZSwgcm90YXRlU3RhdGU6IE1hcGJveE1hcFJvdGF0ZVN0YXRlKSA9PiAoeyAuLi5zdGF0ZSwgcm90YXRlU3RhdGUgfSkpO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX3NldE1hcENhbnZhc1NpemUgPSB0aGlzLnVwZGF0ZXIoKHN0YXRlLCBtYXBDYW52YXNTaXplOiBWZWN0b3IpID0+ICh7IC4uLnN0YXRlLCBtYXBDYW52YXNTaXplIH0pKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfc2V0Q2xpY2tFdmVudCA9IHRoaXMudXBkYXRlcigoc3RhdGUsIGNsaWNrRXZlbnQ6IERieE1hcGJveENsaWNrRXZlbnQpID0+ICh7IC4uLnN0YXRlLCBjbGlja0V2ZW50IH0pKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfc2V0RG91YmxlQ2xpY2tFdmVudCA9IHRoaXMudXBkYXRlcigoc3RhdGUsIGRvdWJsZUNsaWNrRXZlbnQ6IERieE1hcGJveENsaWNrRXZlbnQpID0+ICh7IC4uLnN0YXRlLCBkb3VibGVDbGlja0V2ZW50IH0pKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfc2V0UmlnaHRDbGlja0V2ZW50ID0gdGhpcy51cGRhdGVyKChzdGF0ZSwgcmlnaHRDbGlja0V2ZW50OiBEYnhNYXBib3hDbGlja0V2ZW50KSA9PiAoeyAuLi5zdGF0ZSwgcmlnaHRDbGlja0V2ZW50IH0pKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IF9zZXRFcnJvciA9IHRoaXMudXBkYXRlcigoc3RhdGUsIGVycm9yOiBFcnJvcikgPT4gKHsgLi4uc3RhdGUsIGVycm9yIH0pKTtcblxuICByZWFkb25seSBjbGVhckNvbnRlbnQgPSB0aGlzLnVwZGF0ZXIoKHN0YXRlKSA9PiAoeyAuLi5zdGF0ZSwgY29udGVudDogdW5kZWZpbmVkIH0pKTtcbiAgcmVhZG9ubHkgc2V0Q29udGVudCA9IHRoaXMudXBkYXRlcigoc3RhdGUsIGNvbnRlbnQ6IE1heWJlPERieEluamVjdGlvbkNvbXBvbmVudENvbmZpZzx1bmtub3duPj4pID0+ICh7IC4uLnN0YXRlLCBjb250ZW50IH0pKTtcbn1cbiJdfQ==
|
|
@@ -4,8 +4,8 @@ import * as i2 from '@dereekb/dbx-core';
|
|
|
4
4
|
import { safeMarkForCheck, safeDetectChanges, AbstractSubscriptionDirective, DbxInjectionComponentModule } from '@dereekb/dbx-core';
|
|
5
5
|
import { switchMap as switchMap$1 } from 'rxjs/operators';
|
|
6
6
|
import { cleanup, filterMaybe, onTrueToFalse, SubscriptionObject, asObservable } from '@dereekb/rxjs';
|
|
7
|
-
import { switchMap, NEVER, defaultIfEmpty, map, tap, distinctUntilChanged, shareReplay, of, combineLatest, filter, first, startWith, interval, Subject, merge, throttleTime, BehaviorSubject, combineLatestWith } from 'rxjs';
|
|
8
|
-
import { latLngPointFunction, latLngBoundFunction, filterUndefinedValues, isSameLatLngPoint, isDefaultLatLngPoint, swMostLatLngPoint, neMostLatLngPoint, isSameLatLngBound, diffLatLngBoundPoints, latLngBoundWrapsMap, isWithinLatLngBoundFunction, overlapsLatLngBoundFunction, vectorsAreEqual, latLngBoundCenterPoint, addLatLngPoints, latLngPoint, DestroyFunctionObject, getValueFromGetter, LAT_LONG_10M_PRECISION, roundNumberToStepFunction } from '@dereekb/util';
|
|
7
|
+
import { switchMap, NEVER, defaultIfEmpty, map, tap, EMPTY, distinctUntilChanged, shareReplay, of, combineLatest, filter, first, startWith, interval, Subject, merge, throttleTime, BehaviorSubject, combineLatestWith } from 'rxjs';
|
|
8
|
+
import { latLngPointFunction, latLngBoundFunction, latLngBoundFromInput, filterUndefinedValues, isSameLatLngPoint, isDefaultLatLngPoint, swMostLatLngPoint, neMostLatLngPoint, isSameLatLngBound, diffLatLngBoundPoints, latLngBoundWrapsMap, isWithinLatLngBoundFunction, overlapsLatLngBoundFunction, vectorsAreEqual, latLngBoundCenterPoint, addLatLngPoints, latLngPoint, DestroyFunctionObject, getValueFromGetter, LAT_LONG_10M_PRECISION, roundNumberToStepFunction } from '@dereekb/util';
|
|
9
9
|
import { ComponentStore } from '@ngrx/component-store';
|
|
10
10
|
import * as MapboxGl from 'mapbox-gl';
|
|
11
11
|
import { bounds } from '@mapbox/geo-viewport';
|
|
@@ -313,6 +313,18 @@ class DbxMapboxMapStore extends ComponentStore {
|
|
|
313
313
|
return this.mapInstance$.pipe(tap((map) => map.snapToNorth(snap === null || snap === void 0 ? void 0 : snap.options, snap === null || snap === void 0 ? void 0 : snap.eventData)));
|
|
314
314
|
}));
|
|
315
315
|
});
|
|
316
|
+
this.fitPositions = this.effect((input) => {
|
|
317
|
+
return input.pipe(switchMap((x) => {
|
|
318
|
+
const boundFromInput = latLngBoundFromInput(x.positions);
|
|
319
|
+
if (boundFromInput) {
|
|
320
|
+
const bound = this.latLngBound(boundFromInput);
|
|
321
|
+
return this.mapInstance$.pipe(tap((map) => map.fitBounds(new MapboxGl.LngLatBounds(bound.sw, bound.ne), x.options, x.eventData)));
|
|
322
|
+
}
|
|
323
|
+
else {
|
|
324
|
+
return EMPTY;
|
|
325
|
+
}
|
|
326
|
+
}));
|
|
327
|
+
});
|
|
316
328
|
this.fitBounds = this.effect((input) => {
|
|
317
329
|
return input.pipe(switchMap((x) => {
|
|
318
330
|
const bound = this.latLngBound(x.bounds);
|