@ethlete/query 4.10.0 → 4.12.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/auth/auth-provider.types.mjs +1 -1
- package/esm2022/lib/auth/bearer-auth-provider.mjs +17 -7
- package/esm2022/lib/devtools/components/query-devtools/query-devtools.component.mjs +3 -3
- package/esm2022/lib/devtools/pipes/query-short-name.pipe.mjs +3 -3
- package/esm2022/lib/directives/infinity-query-trigger.directive.mjs +3 -3
- package/esm2022/lib/directives/infinity-query.directive.mjs +3 -3
- package/esm2022/lib/directives/query.directive.mjs +3 -3
- package/esm2022/lib/query-creator/query-creator.mjs +8 -3
- package/esm2022/lib/query-form/query-form.mjs +93 -76
- package/esm2022/lib/utils/data.utils.mjs +39 -0
- package/esm2022/lib/utils/index.mjs +2 -1
- package/fesm2022/ethlete-query.mjs +285 -217
- package/fesm2022/ethlete-query.mjs.map +1 -1
- package/lib/auth/auth-provider.types.d.ts +18 -0
- package/lib/auth/bearer-auth-provider.d.ts +2 -0
- package/lib/query-creator/query-creator.d.ts +7 -2
- package/lib/query-form/query-form.d.ts +8 -28
- package/lib/utils/data.utils.d.ts +15 -0
- package/lib/utils/index.d.ts +1 -0
- package/package.json +2 -2
|
@@ -2,55 +2,15 @@ import { NgZone, assertInInjectionContext, inject, isDevMode } from '@angular/co
|
|
|
2
2
|
import { FormGroup } from '@angular/forms';
|
|
3
3
|
import { ActivatedRoute, Router } from '@angular/router';
|
|
4
4
|
import { ET_PROPERTY_REMOVED, RouterStateService, clone, createDestroy, equal } from '@ethlete/core';
|
|
5
|
-
import { BehaviorSubject, Subject,
|
|
5
|
+
import { BehaviorSubject, Subject, debounceTime, map, merge, of, switchMap, takeUntil, tap, timer } from 'rxjs';
|
|
6
|
+
import { transformToBoolean, transformToNumber } from './query-form.utils';
|
|
6
7
|
const ET_ARR_PREFIX = 'ET_ARR__';
|
|
7
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
8
|
-
export class QueryFormGroup extends FormGroup {
|
|
9
|
-
patchValue(
|
|
10
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
11
|
-
value, options) {
|
|
12
|
-
super.patchValue(value, options);
|
|
13
|
-
}
|
|
14
|
-
}
|
|
15
8
|
export class QueryField {
|
|
16
9
|
get control() {
|
|
17
10
|
return this.data.control;
|
|
18
11
|
}
|
|
19
12
|
constructor(data) {
|
|
20
13
|
this.data = data;
|
|
21
|
-
this.changes$ = this._setupChangesObservable();
|
|
22
|
-
this._currentDebounceTimeout = null;
|
|
23
|
-
}
|
|
24
|
-
setValue(value, options) {
|
|
25
|
-
if (this._currentDebounceTimeout !== null) {
|
|
26
|
-
clearTimeout(this._currentDebounceTimeout);
|
|
27
|
-
this._currentDebounceTimeout = null;
|
|
28
|
-
}
|
|
29
|
-
if (value === this.control.value) {
|
|
30
|
-
return;
|
|
31
|
-
}
|
|
32
|
-
if (this.data.debounce && !options?.skipDebounce) {
|
|
33
|
-
this._currentDebounceTimeout = window.setTimeout(() => {
|
|
34
|
-
this.control.setValue(value);
|
|
35
|
-
}, this.data.debounce);
|
|
36
|
-
}
|
|
37
|
-
else {
|
|
38
|
-
this.control.setValue(value);
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
_setupChangesObservable() {
|
|
42
|
-
const obs = this.control.valueChanges.pipe(startWith(this.control.value));
|
|
43
|
-
if (!this.data.debounce) {
|
|
44
|
-
return obs;
|
|
45
|
-
}
|
|
46
|
-
// The initial value should get emitted immediately
|
|
47
|
-
// concat switches to the debounced observable after the first observable is completed
|
|
48
|
-
return concat(obs.pipe(take(1)), this.control.valueChanges.pipe(debounce((v) => {
|
|
49
|
-
if ((this.data.disableDebounceIfFalsy && !v) || !this.data.debounce) {
|
|
50
|
-
return of(0);
|
|
51
|
-
}
|
|
52
|
-
return timer(this.data.debounce);
|
|
53
|
-
})));
|
|
54
14
|
}
|
|
55
15
|
}
|
|
56
16
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
@@ -73,23 +33,16 @@ export class QueryForm {
|
|
|
73
33
|
this._defaultValues = this._extractDefaultValues();
|
|
74
34
|
this._routerStateService = inject(RouterStateService);
|
|
75
35
|
this._zone = inject(NgZone);
|
|
36
|
+
this._didValueChanges$ = new Subject();
|
|
76
37
|
this._isObserving = false;
|
|
77
38
|
this.form = this._setupFormGroup();
|
|
78
39
|
this._lastFormValue$ = new BehaviorSubject(null);
|
|
79
|
-
this._currentFormValue$ = new BehaviorSubject(
|
|
80
|
-
id: 0,
|
|
81
|
-
data: this._formValue,
|
|
82
|
-
});
|
|
40
|
+
this._currentFormValue$ = new BehaviorSubject(this._formValue);
|
|
83
41
|
this._changes$ = new BehaviorSubject({
|
|
84
42
|
previousValue: null,
|
|
85
43
|
currentValue: this.form.getRawValue(),
|
|
86
44
|
});
|
|
87
|
-
this.changes$ = this.
|
|
88
|
-
return {
|
|
89
|
-
previousValue: previousValueEvent?.data ?? null,
|
|
90
|
-
currentValue: currentValueEvent.data,
|
|
91
|
-
};
|
|
92
|
-
}));
|
|
45
|
+
this.changes$ = this._changes$.asObservable();
|
|
93
46
|
assertInInjectionContext(QueryForm);
|
|
94
47
|
}
|
|
95
48
|
observe(options) {
|
|
@@ -100,38 +53,75 @@ export class QueryForm {
|
|
|
100
53
|
return;
|
|
101
54
|
}
|
|
102
55
|
this._isObserving = true;
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
56
|
+
if (options?.syncOnNavigation !== false) {
|
|
57
|
+
const didChanges = this.setFormValueFromUrlQueryParams({
|
|
58
|
+
queryParams: this._routerStateService.queryParams,
|
|
59
|
+
});
|
|
60
|
+
if (didChanges) {
|
|
61
|
+
this._handleFormChange(true);
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
merge(...Object.values(this._fields).map((field) => field.control.valueChanges), this._didValueChanges$)
|
|
65
|
+
.pipe(debounceTime(0), tap(() => {
|
|
66
|
+
this._handleFormChange();
|
|
110
67
|
}), takeUntil(this._destroy$), takeUntil(this._unobserveTrigger$))
|
|
111
68
|
.subscribe();
|
|
69
|
+
let changedFieldsInLastResetLoop = [];
|
|
70
|
+
let currentUniqueChangedFields = [];
|
|
112
71
|
this._currentFormValue$
|
|
113
|
-
.pipe(
|
|
114
|
-
|
|
115
|
-
|
|
72
|
+
.pipe(map((currentValue) => {
|
|
73
|
+
return {
|
|
74
|
+
previousValue: clone(this._lastFormValue$.value),
|
|
75
|
+
currentValue: clone(currentValue),
|
|
76
|
+
};
|
|
77
|
+
}), tap(({ currentValue, previousValue }) => {
|
|
116
78
|
if (options?.writeToQueryParams !== false) {
|
|
117
|
-
this._syncViaUrlQueryParams(
|
|
79
|
+
this._syncViaUrlQueryParams(currentValue, options?.replaceUrl);
|
|
80
|
+
}
|
|
81
|
+
const didResetValues = this._handleQueryFormResets(previousValue ?? null, currentValue);
|
|
82
|
+
const changedFields = Object.keys(currentValue).filter((key) => !equal(previousValue?.[key], currentValue[key]));
|
|
83
|
+
if (changedFieldsInLastResetLoop.length) {
|
|
84
|
+
changedFields.push(...changedFieldsInLastResetLoop);
|
|
85
|
+
changedFieldsInLastResetLoop = [];
|
|
118
86
|
}
|
|
119
|
-
const didResetValues = this._handleQueryFormResets(previousValueEvent?.data ?? null, currentValue);
|
|
120
87
|
if (didResetValues) {
|
|
121
|
-
|
|
88
|
+
this._didValueChanges$.next(true);
|
|
89
|
+
changedFieldsInLastResetLoop = changedFields;
|
|
122
90
|
}
|
|
123
|
-
|
|
124
|
-
|
|
91
|
+
currentUniqueChangedFields = [...new Set(changedFields)];
|
|
92
|
+
}), switchMap(({ currentValue, previousValue }) => {
|
|
93
|
+
if (changedFieldsInLastResetLoop.length)
|
|
94
|
+
return of(null).pipe(map(() => ({ currentValue, previousValue })));
|
|
95
|
+
const debounceValues = currentUniqueChangedFields.map((key) => {
|
|
96
|
+
const fieldData = this._fields[key].data;
|
|
97
|
+
if (fieldData.disableDebounceIfFalsy === true && !currentValue[key]) {
|
|
98
|
+
return null;
|
|
99
|
+
}
|
|
100
|
+
return fieldData.debounce ?? null;
|
|
101
|
+
});
|
|
102
|
+
currentUniqueChangedFields = [];
|
|
103
|
+
if (debounceValues.some((v) => v === null) || !debounceValues.length) {
|
|
104
|
+
return of(null).pipe(map(() => ({ currentValue, previousValue })));
|
|
125
105
|
}
|
|
106
|
+
const shortestDebounceTime = Math.min(...debounceValues.filter((v) => v !== null));
|
|
107
|
+
return timer(shortestDebounceTime).pipe(map(() => ({ currentValue, previousValue })));
|
|
108
|
+
}), tap(({ currentValue, previousValue }) => {
|
|
109
|
+
if (changedFieldsInLastResetLoop.length)
|
|
110
|
+
return;
|
|
126
111
|
this._changes$.next({
|
|
127
|
-
previousValue:
|
|
128
|
-
currentValue:
|
|
112
|
+
previousValue: previousValue ?? null,
|
|
113
|
+
currentValue: currentValue,
|
|
129
114
|
});
|
|
130
115
|
}), takeUntil(this._destroy$), takeUntil(this._unobserveTrigger$))
|
|
131
116
|
.subscribe();
|
|
132
117
|
if (options?.syncOnNavigation !== false) {
|
|
133
118
|
this._routerStateService.queryParamChanges$
|
|
134
|
-
.pipe(takeUntil(this._destroy$), takeUntil(this._unobserveTrigger$), tap((changes) =>
|
|
119
|
+
.pipe(takeUntil(this._destroy$), takeUntil(this._unobserveTrigger$), tap((changes) => {
|
|
120
|
+
const didValueChanges = this.setFormValueFromUrlQueryParams({ queryParams: changes });
|
|
121
|
+
if (didValueChanges) {
|
|
122
|
+
this._didValueChanges$.next(true);
|
|
123
|
+
}
|
|
124
|
+
}))
|
|
135
125
|
.subscribe();
|
|
136
126
|
}
|
|
137
127
|
}
|
|
@@ -157,7 +147,7 @@ export class QueryForm {
|
|
|
157
147
|
if (equal(defaultValueForKeyToReset, currentValueForKeyToReset)) {
|
|
158
148
|
continue;
|
|
159
149
|
}
|
|
160
|
-
this.form.controls[formFieldKey].setValue(defaultValueForKeyToReset);
|
|
150
|
+
this.form.controls[formFieldKey].setValue(defaultValueForKeyToReset, { emitEvent: false });
|
|
161
151
|
didResetValues = true;
|
|
162
152
|
break;
|
|
163
153
|
}
|
|
@@ -169,6 +159,7 @@ export class QueryForm {
|
|
|
169
159
|
this._unobserveTrigger$.next(true);
|
|
170
160
|
}
|
|
171
161
|
setFormValueFromUrlQueryParams(options) {
|
|
162
|
+
let didValueChanges = false;
|
|
172
163
|
for (const [key, field] of Object.entries(this._fields)) {
|
|
173
164
|
const value = options.queryParams[key];
|
|
174
165
|
const valueDoesNotExist = value === undefined;
|
|
@@ -176,15 +167,27 @@ export class QueryForm {
|
|
|
176
167
|
continue;
|
|
177
168
|
const valueGotRemoved = value === ET_PROPERTY_REMOVED;
|
|
178
169
|
if (valueGotRemoved) {
|
|
179
|
-
field.setValue(this._getDefaultValue(key), {
|
|
170
|
+
field.control.setValue(this._getDefaultValue(key), { emitEvent: false });
|
|
171
|
+
didValueChanges = true;
|
|
180
172
|
continue;
|
|
181
173
|
}
|
|
182
|
-
|
|
174
|
+
let deserializedValue = value;
|
|
175
|
+
if (field.data.queryParamToValueTransformFn) {
|
|
176
|
+
deserializedValue = field.data.queryParamToValueTransformFn(value);
|
|
177
|
+
}
|
|
178
|
+
else if (typeof this._getDefaultValue(key) === 'number') {
|
|
179
|
+
deserializedValue = transformToNumber(value);
|
|
180
|
+
}
|
|
181
|
+
else if (typeof this._getDefaultValue(key) === 'boolean') {
|
|
182
|
+
deserializedValue = transformToBoolean(value);
|
|
183
|
+
}
|
|
183
184
|
const valueIsEqualToCurrent = equal(deserializedValue, field.control.value);
|
|
184
185
|
if (valueIsEqualToCurrent)
|
|
185
186
|
continue;
|
|
186
|
-
field.setValue(deserializedValue, {
|
|
187
|
+
field.control.setValue(deserializedValue, { emitEvent: false });
|
|
188
|
+
didValueChanges = true;
|
|
187
189
|
}
|
|
190
|
+
return didValueChanges;
|
|
188
191
|
}
|
|
189
192
|
_getDefaultValue(key) {
|
|
190
193
|
const val = this._defaultValues[key];
|
|
@@ -198,7 +201,7 @@ export class QueryForm {
|
|
|
198
201
|
return this._getDefaultValue(key) === normalizedValue;
|
|
199
202
|
}
|
|
200
203
|
_setupFormGroup() {
|
|
201
|
-
const group = new
|
|
204
|
+
const group = new FormGroup({});
|
|
202
205
|
for (const [key, field] of Object.entries(this._fields)) {
|
|
203
206
|
group.addControl(key, field.control);
|
|
204
207
|
}
|
|
@@ -243,5 +246,19 @@ export class QueryForm {
|
|
|
243
246
|
});
|
|
244
247
|
});
|
|
245
248
|
}
|
|
249
|
+
_handleFormChange(forceOverwrite = false) {
|
|
250
|
+
const currentVal = clone(this._currentFormValue$.value);
|
|
251
|
+
const newVal = clone(this._formValue);
|
|
252
|
+
if (equal(currentVal, newVal)) {
|
|
253
|
+
return;
|
|
254
|
+
}
|
|
255
|
+
if (forceOverwrite) {
|
|
256
|
+
this._lastFormValue$.next(newVal);
|
|
257
|
+
}
|
|
258
|
+
else {
|
|
259
|
+
this._lastFormValue$.next(currentVal);
|
|
260
|
+
}
|
|
261
|
+
this._currentFormValue$.next(newVal);
|
|
262
|
+
}
|
|
246
263
|
}
|
|
247
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcnktZm9ybS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvcXVlcnkvc3JjL2xpYi9xdWVyeS1mb3JtL3F1ZXJ5LWZvcm0udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3BGLE9BQU8sRUFBbUIsU0FBUyxFQUFVLE1BQU0sZ0JBQWdCLENBQUM7QUFDcEUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsa0JBQWtCLEVBQUUsS0FBSyxFQUFFLGFBQWEsRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDckcsT0FBTyxFQUNMLGVBQWUsRUFDZixPQUFPLEVBQ1AsTUFBTSxFQUNOLFFBQVEsRUFDUixHQUFHLEVBQ0gsS0FBSyxFQUNMLEVBQUUsRUFDRixTQUFTLEVBQ1QsSUFBSSxFQUNKLFNBQVMsRUFDVCxHQUFHLEVBQ0gsS0FBSyxFQUNMLGNBQWMsR0FDZixNQUFNLE1BQU0sQ0FBQztBQVNkLE1BQU0sYUFBYSxHQUFHLFVBQVUsQ0FBQztBQUVqQyw4REFBOEQ7QUFDOUQsTUFBTSxPQUFPLGNBQThFLFNBQVEsU0FBWTtJQUNwRyxVQUFVO0lBQ2pCLDhEQUE4RDtJQUM5RCxLQUEyRixFQUMzRixPQUF5RjtRQUV6RixLQUFLLENBQUMsVUFBVSxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQztJQUNuQyxDQUFDO0NBQ0Y7QUFFRCxNQUFNLE9BQU8sVUFBVTtJQUdyQixJQUFJLE9BQU87UUFDVCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDO0lBQzNCLENBQUM7SUFJRCxZQUFtQixJQUEwQjtRQUExQixTQUFJLEdBQUosSUFBSSxDQUFzQjtRQVI3QyxhQUFRLEdBQUcsSUFBSSxDQUFDLHVCQUF1QixFQUFFLENBQUM7UUFNbEMsNEJBQXVCLEdBQWtCLElBQUksQ0FBQztJQUVOLENBQUM7SUFFakQsUUFBUSxDQUFDLEtBQWUsRUFBRSxPQUFvQztRQUM1RCxJQUFJLElBQUksQ0FBQyx1QkFBdUIsS0FBSyxJQUFJLEVBQUU7WUFDekMsWUFBWSxDQUFDLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO1lBQzNDLElBQUksQ0FBQyx1QkFBdUIsR0FBRyxJQUFJLENBQUM7U0FDckM7UUFFRCxJQUFJLEtBQUssS0FBSyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRTtZQUNoQyxPQUFPO1NBQ1I7UUFFRCxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxJQUFJLENBQUMsT0FBTyxFQUFFLFlBQVksRUFBRTtZQUNoRCxJQUFJLENBQUMsdUJBQXVCLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUU7Z0JBQ3BELElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQy9CLENBQUMsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1NBQ3hCO2FBQU07WUFDTCxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUM5QjtJQUNILENBQUM7SUFFTyx1QkFBdUI7UUFDN0IsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFFMUUsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ3ZCLE9BQU8sR0FBRyxDQUFDO1NBQ1o7UUFFRCxtREFBbUQ7UUFDbkQsc0ZBQXNGO1FBQ3RGLE9BQU8sTUFBTSxDQUNYLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQ2pCLElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLElBQUksQ0FDNUIsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7WUFDYixJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxzQkFBc0IsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUU7Z0JBQ25FLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQ2Q7WUFFRCxPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ25DLENBQUMsQ0FBQyxDQUNILENBQ0YsQ0FBQztJQUNKLENBQUM7Q0FDRjtBQUVELDhEQUE4RDtBQUM5RCxNQUFNLE9BQU8sU0FBUztJQW1CcEIsSUFBWSxVQUFVO1FBQ3BCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQXVCLENBQUM7SUFDdEQsQ0FBQztJQWdCRCxJQUFJLFFBQVE7UUFDVixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO0lBQzVCLENBQUM7SUFFRCxJQUFJLEtBQUs7UUFDUCxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQztJQUMzQyxDQUFDO0lBRUQsWUFBb0IsT0FBVTtRQUFWLFlBQU8sR0FBUCxPQUFPLENBQUc7UUE1Q2IsY0FBUyxHQUFHLGFBQWEsRUFBRSxDQUFDO1FBQzVCLHVCQUFrQixHQUFHLElBQUksT0FBTyxFQUFXLENBQUM7UUFDNUMsWUFBTyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN6QixvQkFBZSxHQUFHLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUN6QyxtQkFBYyxHQUFHLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1FBQzlDLHdCQUFtQixHQUFHLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1FBQ2pELFVBQUssR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7UUFFaEMsaUJBQVksR0FBRyxLQUFLLENBQUM7UUFFcEIsU0FBSSxHQUFHLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUV0QixvQkFBZSxHQUFHLElBQUksZUFBZSxDQUFpRCxJQUFJLENBQUMsQ0FBQztRQUM1Rix1QkFBa0IsR0FBRyxJQUFJLGVBQWUsQ0FBMEM7WUFDakcsRUFBRSxFQUFFLENBQUM7WUFDTCxJQUFJLEVBQUUsSUFBSSxDQUFDLFVBQVU7U0FDdEIsQ0FBQyxDQUFDO1FBTWMsY0FBUyxHQUFHLElBQUksZUFBZSxDQUF5QjtZQUN2RSxhQUFhLEVBQUUsSUFBSTtZQUNuQixZQUFZLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQXVCO1NBQzNELENBQUMsQ0FBQztRQUVNLGFBQVEsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQ3pGLEdBQUcsQ0FBQyxDQUFDLENBQUMsaUJBQWlCLEVBQUUsa0JBQWtCLENBQUMsRUFBRSxFQUFFO1lBQzlDLE9BQU87Z0JBQ0wsYUFBYSxFQUFFLGtCQUFrQixFQUFFLElBQUksSUFBSSxJQUFJO2dCQUMvQyxZQUFZLEVBQUUsaUJBQWlCLENBQUMsSUFBSTthQUNyQyxDQUFDO1FBQ0osQ0FBQyxDQUFDLENBQ0gsQ0FBQztRQVdBLHdCQUF3QixDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ3RDLENBQUM7SUFFRCxPQUFPLENBQUMsT0FBaUM7UUFDdkMsSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFO1lBQ3JCLElBQUksU0FBUyxFQUFFLEVBQUU7Z0JBQ2YsT0FBTyxDQUFDLElBQUksQ0FBQyx1RUFBdUUsQ0FBQyxDQUFDO2FBQ3ZGO1lBQ0QsT0FBTztTQUNSO1FBRUQsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUM7UUFFekIsSUFBSSxDQUFDLDhCQUE4QixDQUFDO1lBQ2xDLFdBQVcsRUFBRSxJQUFJLENBQUMsbUJBQW1CLENBQUMsV0FBVztTQUNsRCxDQUFDLENBQUM7UUFFSCxLQUFLLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQzthQUNqRSxJQUFJLENBQ0gsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUNmLEdBQUcsQ0FBQyxHQUFHLEVBQUU7WUFDUCxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7WUFDaEUsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsRUFBRSxJQUFJLENBQUMsa0JBQWtCLENBQUMsS0FBSyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsSUFBSSxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQzNHLENBQUMsQ0FBQyxFQUNGLFNBQVMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQ3pCLFNBQVMsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FDbkM7YUFDQSxTQUFTLEVBQUUsQ0FBQztRQUVmLElBQUksQ0FBQyxrQkFBa0I7YUFDcEIsSUFBSSxDQUNILEdBQUcsQ0FBQyxDQUFDLGlCQUFpQixFQUFFLEVBQUU7WUFDeEIsTUFBTSxrQkFBa0IsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQztZQUN0RCxNQUFNLFlBQVksR0FBRyxpQkFBaUIsQ0FBQyxJQUFJLENBQUM7WUFFNUMsSUFBSSxPQUFPLEVBQUUsa0JBQWtCLEtBQUssS0FBSyxFQUFFO2dCQUN6QyxJQUFJLENBQUMsc0JBQXNCLENBQUMsaUJBQWlCLENBQUMsSUFBSSxFQUFFLE9BQU8sRUFBRSxVQUFVLENBQUMsQ0FBQzthQUMxRTtZQUVELE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxrQkFBa0IsRUFBRSxJQUFJLElBQUksSUFBSSxFQUFFLFlBQVksQ0FBQyxDQUFDO1lBRW5HLElBQUksY0FBYyxFQUFFO2dCQUNsQixPQUFPO2FBQ1I7WUFFRCxJQUFJLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsRUFBRSxLQUFLLGlCQUFpQixDQUFDLEVBQUUsRUFBRTtnQkFDN0QsT0FBTzthQUNSO1lBRUQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUM7Z0JBQ2xCLGFBQWEsRUFBRSxrQkFBa0IsRUFBRSxJQUFJLElBQUksSUFBSTtnQkFDL0MsWUFBWSxFQUFFLGlCQUFpQixDQUFDLElBQUk7YUFDckMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLEVBQ0YsU0FBUyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsRUFDekIsU0FBUyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUNuQzthQUNBLFNBQVMsRUFBRSxDQUFDO1FBRWYsSUFBSSxPQUFPLEVBQUUsZ0JBQWdCLEtBQUssS0FBSyxFQUFFO1lBQ3ZDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxrQkFBa0I7aUJBQ3hDLElBQUksQ0FDSCxTQUFTLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUN6QixTQUFTLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEVBQ2xDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLDhCQUE4QixDQUFDLEVBQUUsV0FBVyxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FDaEY7aUJBQ0EsU0FBUyxFQUFFLENBQUM7U0FDaEI7SUFDSCxDQUFDO0lBRU8sc0JBQXNCLENBQUMsYUFBdUMsRUFBRSxZQUErQjtRQUNyRyxJQUFJLGNBQWMsR0FBRyxLQUFLLENBQUM7UUFFM0IsS0FBSyxNQUFNLFlBQVksSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFO1lBQ3ZDLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQztZQUV6RCxJQUFJLENBQUMsTUFBTTtnQkFBRSxTQUFTO1lBRXRCLE1BQU0sa0JBQWtCLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBRXJFLEtBQUssTUFBTSxpQkFBaUIsSUFBSSxrQkFBa0IsRUFBRTtnQkFDbEQsSUFBSSxDQUFDLENBQUMsaUJBQWlCLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFO29CQUN4QyxJQUFJLFNBQVMsRUFBRSxFQUFFO3dCQUNmLE9BQU8sQ0FBQyxJQUFJLENBQUMsY0FBYyxpQkFBaUIsa0RBQWtELEVBQUUsSUFBSSxDQUFDLENBQUM7cUJBQ3ZHO29CQUVELFNBQVM7aUJBQ1Y7Z0JBRUQsSUFDRSxhQUFhO29CQUNiLFlBQVk7b0JBQ1osQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLGlCQUFpQixDQUFDLEVBQUUsWUFBWSxDQUFDLGlCQUFpQixDQUFDLENBQUMsRUFDekU7b0JBQ0EsTUFBTSx5QkFBeUIsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsWUFBWSxDQUFDLENBQUM7b0JBQ3RFLE1BQU0seUJBQXlCLEdBQUcsWUFBWSxDQUFDLFlBQVksQ0FBQyxDQUFDO29CQUU3RCxJQUFJLEtBQUssQ0FBQyx5QkFBeUIsRUFBRSx5QkFBeUIsQ0FBQyxFQUFFO3dCQUMvRCxTQUFTO3FCQUNWO29CQUVELElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxDQUFDLFFBQVEsQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO29CQUVyRSxjQUFjLEdBQUcsSUFBSSxDQUFDO29CQUV0QixNQUFNO2lCQUNQO2FBQ0Y7U0FDRjtRQUVELE9BQU8sY0FBYyxDQUFDO0lBQ3hCLENBQUM7SUFFRCxTQUFTO1FBQ1AsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNyQyxDQUFDO0lBRUQsOEJBQThCLENBQUMsT0FBeUU7UUFDdEcsS0FBSyxNQUFNLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQ3ZELE1BQU0sS0FBSyxHQUFHLE9BQU8sQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUM7WUFFdkMsTUFBTSxpQkFBaUIsR0FBRyxLQUFLLEtBQUssU0FBUyxDQUFDO1lBRTlDLElBQUksaUJBQWlCO2dCQUFFLFNBQVM7WUFFaEMsTUFBTSxlQUFlLEdBQUcsS0FBSyxLQUFLLG1CQUFtQixDQUFDO1lBRXRELElBQUksZUFBZSxFQUFFO2dCQUNuQixLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLFlBQVksRUFBRSxPQUFPLEVBQUUsWUFBWSxJQUFJLElBQUksRUFBRSxDQUFDLENBQUM7Z0JBRTVGLFNBQVM7YUFDVjtZQUVELE1BQU0saUJBQWlCLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyw0QkFBNEIsRUFBRSxDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssQ0FBQztZQUNwRixNQUFNLHFCQUFxQixHQUFHLEtBQUssQ0FBQyxpQkFBaUIsRUFBRSxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBRTVFLElBQUkscUJBQXFCO2dCQUFFLFNBQVM7WUFFcEMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsRUFBRSxFQUFFLFlBQVksRUFBRSxPQUFPLEVBQUUsWUFBWSxJQUFJLElBQUksRUFBRSxDQUFDLENBQUM7U0FDcEY7SUFDSCxDQUFDO0lBRU8sZ0JBQWdCLENBQUMsR0FBVztRQUNsQyxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBRXJDLElBQUksT0FBTyxHQUFHLEtBQUssUUFBUSxJQUFJLEdBQUcsQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLEVBQUU7WUFDNUQsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7U0FDcEQ7UUFFRCxPQUFPLEdBQUcsSUFBSSxJQUFJLENBQUM7SUFDckIsQ0FBQztJQUVPLGVBQWUsQ0FBQyxHQUFXLEVBQUUsS0FBYztRQUNqRCxNQUFNLGVBQWUsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLGFBQWEsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztRQUVsRyxPQUFPLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsS0FBSyxlQUFlLENBQUM7SUFDeEQsQ0FBQztJQUVPLGVBQWU7UUFDckIsTUFBTSxLQUFLLEdBQUcsSUFBSSxjQUFjLENBQUMsRUFBK0IsQ0FBQyxDQUFDO1FBRWxFLEtBQUssTUFBTSxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRTtZQUN2RCxLQUFLLENBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7U0FDdEM7UUFFRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFTyxxQkFBcUI7UUFDM0IsTUFBTSxhQUFhLEdBQTRCLEVBQUUsQ0FBQztRQUVsRCxLQUFLLE1BQU0sQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUU7WUFDdkQsTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUM7WUFFbEMsSUFBSSxLQUFLLEtBQUssSUFBSSxJQUFJLEtBQUssS0FBSyxTQUFTLEVBQUU7Z0JBQ3pDLFNBQVM7YUFDVjtZQUVELElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRTtnQkFDeEIsYUFBYSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsYUFBYSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQzthQUNqRTtpQkFBTTtnQkFDTCxhQUFhLENBQUMsR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDO2FBQzVCO1NBQ0Y7UUFFRCxPQUFPLGFBQWEsQ0FBQztJQUN2QixDQUFDO0lBRU8sc0JBQXNCLENBQUMsTUFBeUIsRUFBRSxVQUFvQjtRQUM1RSxNQUFNLFdBQVcsR0FBRyxFQUFFLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUM7UUFFNUUsS0FBSyxNQUFNLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUU7WUFDakQsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUU7Z0JBQ3RCLE9BQU8sQ0FBQyxJQUFJLENBQUMsY0FBYyxHQUFHLGtEQUFrRCxFQUFFLElBQUksQ0FBQyxDQUFDO2dCQUN4RixTQUFTO2FBQ1Y7WUFFRCxJQUFJLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsS0FBSyxLQUFLLEVBQUU7Z0JBQ3BGLE9BQU8sV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2FBQ3pCO2lCQUFNO2dCQUNMLFdBQVcsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyw0QkFBNEI7b0JBQ3BFLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyw0QkFBNEIsRUFBRSxDQUFDLEtBQUssQ0FBQztvQkFDOUQsQ0FBQyxDQUFDLEtBQUssQ0FBQzthQUNYO1NBQ0Y7UUFFRCxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUU7WUFDbEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsRUFBRSxFQUFFO2dCQUN4QixXQUFXO2dCQUNYLFVBQVU7YUFDWCxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nWm9uZSwgYXNzZXJ0SW5JbmplY3Rpb25Db250ZXh0LCBpbmplY3QsIGlzRGV2TW9kZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWJzdHJhY3RDb250cm9sLCBGb3JtR3JvdXAsIMm1VmFsdWUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IEVUX1BST1BFUlRZX1JFTU9WRUQsIFJvdXRlclN0YXRlU2VydmljZSwgY2xvbmUsIGNyZWF0ZURlc3Ryb3ksIGVxdWFsIH0gZnJvbSAnQGV0aGxldGUvY29yZSc7XG5pbXBvcnQge1xuICBCZWhhdmlvclN1YmplY3QsXG4gIFN1YmplY3QsXG4gIGNvbmNhdCxcbiAgZGVib3VuY2UsXG4gIG1hcCxcbiAgbWVyZ2UsXG4gIG9mLFxuICBzdGFydFdpdGgsXG4gIHRha2UsXG4gIHRha2VVbnRpbCxcbiAgdGFwLFxuICB0aW1lcixcbiAgd2l0aExhdGVzdEZyb20sXG59IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtcbiAgUXVlcnlGaWVsZE9wdGlvbnMsXG4gIFF1ZXJ5Rm9ybUdyb3VwQ29udHJvbHMsXG4gIFF1ZXJ5Rm9ybU9ic2VydmVPcHRpb25zLFxuICBRdWVyeUZvcm1WYWx1ZSxcbiAgUXVlcnlGb3JtVmFsdWVFdmVudCxcbn0gZnJvbSAnLi9xdWVyeS1mb3JtLnR5cGVzJztcblxuY29uc3QgRVRfQVJSX1BSRUZJWCA9ICdFVF9BUlJfXyc7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG5leHBvcnQgY2xhc3MgUXVlcnlGb3JtR3JvdXA8VCBleHRlbmRzIHsgW0sgaW4ga2V5b2YgVF06IEFic3RyYWN0Q29udHJvbDxhbnksIGFueT4gfSA9IGFueT4gZXh0ZW5kcyBGb3JtR3JvdXA8VD4ge1xuICBvdmVycmlkZSBwYXRjaFZhbHVlKFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgdmFsdWU6IDAgZXh0ZW5kcyAxICYgVCA/IHsgW2tleTogc3RyaW5nXTogYW55IH0gOiBQYXJ0aWFsPHsgW0sgaW4ga2V5b2YgVF06IMm1VmFsdWU8VFtLXT4gfT4sXG4gICAgb3B0aW9ucz86IHsgb25seVNlbGY/OiBib29sZWFuIHwgdW5kZWZpbmVkOyBlbWl0RXZlbnQ/OiBib29sZWFuIHwgdW5kZWZpbmVkIH0gfCB1bmRlZmluZWQsXG4gICk6IHZvaWQge1xuICAgIHN1cGVyLnBhdGNoVmFsdWUodmFsdWUsIG9wdGlvbnMpO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBRdWVyeUZpZWxkPFQ+IHtcbiAgY2hhbmdlcyQgPSB0aGlzLl9zZXR1cENoYW5nZXNPYnNlcnZhYmxlKCk7XG5cbiAgZ2V0IGNvbnRyb2woKSB7XG4gICAgcmV0dXJuIHRoaXMuZGF0YS5jb250cm9sO1xuICB9XG5cbiAgcHJpdmF0ZSBfY3VycmVudERlYm91bmNlVGltZW91dDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG5cbiAgY29uc3RydWN0b3IocHVibGljIGRhdGE6IFF1ZXJ5RmllbGRPcHRpb25zPFQ+KSB7fVxuXG4gIHNldFZhbHVlKHZhbHVlOiBUIHwgbnVsbCwgb3B0aW9ucz86IHsgc2tpcERlYm91bmNlPzogYm9vbGVhbiB9KSB7XG4gICAgaWYgKHRoaXMuX2N1cnJlbnREZWJvdW5jZVRpbWVvdXQgIT09IG51bGwpIHtcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLl9jdXJyZW50RGVib3VuY2VUaW1lb3V0KTtcbiAgICAgIHRoaXMuX2N1cnJlbnREZWJvdW5jZVRpbWVvdXQgPSBudWxsO1xuICAgIH1cblxuICAgIGlmICh2YWx1ZSA9PT0gdGhpcy5jb250cm9sLnZhbHVlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZGF0YS5kZWJvdW5jZSAmJiAhb3B0aW9ucz8uc2tpcERlYm91bmNlKSB7XG4gICAgICB0aGlzLl9jdXJyZW50RGVib3VuY2VUaW1lb3V0ID0gd2luZG93LnNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLmNvbnRyb2wuc2V0VmFsdWUodmFsdWUpO1xuICAgICAgfSwgdGhpcy5kYXRhLmRlYm91bmNlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jb250cm9sLnNldFZhbHVlKHZhbHVlKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9zZXR1cENoYW5nZXNPYnNlcnZhYmxlKCkge1xuICAgIGNvbnN0IG9icyA9IHRoaXMuY29udHJvbC52YWx1ZUNoYW5nZXMucGlwZShzdGFydFdpdGgodGhpcy5jb250cm9sLnZhbHVlKSk7XG5cbiAgICBpZiAoIXRoaXMuZGF0YS5kZWJvdW5jZSkge1xuICAgICAgcmV0dXJuIG9icztcbiAgICB9XG5cbiAgICAvLyBUaGUgaW5pdGlhbCB2YWx1ZSBzaG91bGQgZ2V0IGVtaXR0ZWQgaW1tZWRpYXRlbHlcbiAgICAvLyBjb25jYXQgc3dpdGNoZXMgdG8gdGhlIGRlYm91bmNlZCBvYnNlcnZhYmxlIGFmdGVyIHRoZSBmaXJzdCBvYnNlcnZhYmxlIGlzIGNvbXBsZXRlZFxuICAgIHJldHVybiBjb25jYXQoXG4gICAgICBvYnMucGlwZSh0YWtlKDEpKSxcbiAgICAgIHRoaXMuY29udHJvbC52YWx1ZUNoYW5nZXMucGlwZShcbiAgICAgICAgZGVib3VuY2UoKHYpID0+IHtcbiAgICAgICAgICBpZiAoKHRoaXMuZGF0YS5kaXNhYmxlRGVib3VuY2VJZkZhbHN5ICYmICF2KSB8fCAhdGhpcy5kYXRhLmRlYm91bmNlKSB7XG4gICAgICAgICAgICByZXR1cm4gb2YoMCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHRpbWVyKHRoaXMuZGF0YS5kZWJvdW5jZSk7XG4gICAgICAgIH0pLFxuICAgICAgKSxcbiAgICApO1xuICB9XG59XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG5leHBvcnQgY2xhc3MgUXVlcnlGb3JtPFQgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCBRdWVyeUZpZWxkPGFueT4+PiB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2Rlc3Ryb3kkID0gY3JlYXRlRGVzdHJveSgpO1xuICBwcml2YXRlIHJlYWRvbmx5IF91bm9ic2VydmVUcmlnZ2VyJCA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JvdXRlciA9IGluamVjdChSb3V0ZXIpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9hY3RpdmF0ZWRSb3V0ZSA9IGluamVjdChBY3RpdmF0ZWRSb3V0ZSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2RlZmF1bHRWYWx1ZXMgPSB0aGlzLl9leHRyYWN0RGVmYXVsdFZhbHVlcygpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9yb3V0ZXJTdGF0ZVNlcnZpY2UgPSBpbmplY3QoUm91dGVyU3RhdGVTZXJ2aWNlKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfem9uZSA9IGluamVjdChOZ1pvbmUpO1xuXG4gIHByaXZhdGUgX2lzT2JzZXJ2aW5nID0gZmFsc2U7XG5cbiAgcmVhZG9ubHkgZm9ybSA9IHRoaXMuX3NldHVwRm9ybUdyb3VwKCk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfbGFzdEZvcm1WYWx1ZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHsgaWQ6IG51bWJlcjsgZGF0YTogUXVlcnlGb3JtVmFsdWU8VD4gfSB8IG51bGw+KG51bGwpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9jdXJyZW50Rm9ybVZhbHVlJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8eyBpZDogbnVtYmVyOyBkYXRhOiBRdWVyeUZvcm1WYWx1ZTxUPiB9Pih7XG4gICAgaWQ6IDAsXG4gICAgZGF0YTogdGhpcy5fZm9ybVZhbHVlLFxuICB9KTtcblxuICBwcml2YXRlIGdldCBfZm9ybVZhbHVlKCkge1xuICAgIHJldHVybiB0aGlzLmZvcm0uZ2V0UmF3VmFsdWUoKSBhcyBRdWVyeUZvcm1WYWx1ZTxUPjtcbiAgfVxuXG4gIHByaXZhdGUgcmVhZG9ubHkgX2NoYW5nZXMkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxRdWVyeUZvcm1WYWx1ZUV2ZW50PFQ+Pih7XG4gICAgcHJldmlvdXNWYWx1ZTogbnVsbCxcbiAgICBjdXJyZW50VmFsdWU6IHRoaXMuZm9ybS5nZXRSYXdWYWx1ZSgpIGFzIFF1ZXJ5Rm9ybVZhbHVlPFQ+LFxuICB9KTtcblxuICByZWFkb25seSBjaGFuZ2VzJCA9IHRoaXMuX2N1cnJlbnRGb3JtVmFsdWUkLnBpcGUod2l0aExhdGVzdEZyb20odGhpcy5fbGFzdEZvcm1WYWx1ZSQpKS5waXBlKFxuICAgIG1hcCgoW2N1cnJlbnRWYWx1ZUV2ZW50LCBwcmV2aW91c1ZhbHVlRXZlbnRdKSA9PiB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBwcmV2aW91c1ZhbHVlOiBwcmV2aW91c1ZhbHVlRXZlbnQ/LmRhdGEgPz8gbnVsbCxcbiAgICAgICAgY3VycmVudFZhbHVlOiBjdXJyZW50VmFsdWVFdmVudC5kYXRhLFxuICAgICAgfTtcbiAgICB9KSxcbiAgKTtcblxuICBnZXQgY29udHJvbHMoKSB7XG4gICAgcmV0dXJuIHRoaXMuZm9ybS5jb250cm9scztcbiAgfVxuXG4gIGdldCB2YWx1ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fY2hhbmdlcyQudmFsdWUuY3VycmVudFZhbHVlO1xuICB9XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBfZmllbGRzOiBUKSB7XG4gICAgYXNzZXJ0SW5JbmplY3Rpb25Db250ZXh0KFF1ZXJ5Rm9ybSk7XG4gIH1cblxuICBvYnNlcnZlKG9wdGlvbnM/OiBRdWVyeUZvcm1PYnNlcnZlT3B0aW9ucykge1xuICAgIGlmICh0aGlzLl9pc09ic2VydmluZykge1xuICAgICAgaWYgKGlzRGV2TW9kZSgpKSB7XG4gICAgICAgIGNvbnNvbGUud2FybignUXVlcnlGb3JtLm9ic2VydmUoKSB3YXMgY2FsbGVkIG11bHRpcGxlIHRpbWVzLiBUaGlzIGlzIG5vdCBzdXBwb3J0ZWQuJyk7XG4gICAgICB9XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5faXNPYnNlcnZpbmcgPSB0cnVlO1xuXG4gICAgdGhpcy5zZXRGb3JtVmFsdWVGcm9tVXJsUXVlcnlQYXJhbXMoe1xuICAgICAgcXVlcnlQYXJhbXM6IHRoaXMuX3JvdXRlclN0YXRlU2VydmljZS5xdWVyeVBhcmFtcyxcbiAgICB9KTtcblxuICAgIG1lcmdlKC4uLk9iamVjdC52YWx1ZXModGhpcy5fZmllbGRzKS5tYXAoKGZpZWxkKSA9PiBmaWVsZC5jaGFuZ2VzJCkpXG4gICAgICAucGlwZShcbiAgICAgICAgc3RhcnRXaXRoKG51bGwpLFxuICAgICAgICB0YXAoKCkgPT4ge1xuICAgICAgICAgIHRoaXMuX2xhc3RGb3JtVmFsdWUkLm5leHQoY2xvbmUodGhpcy5fY3VycmVudEZvcm1WYWx1ZSQudmFsdWUpKTtcbiAgICAgICAgICB0aGlzLl9jdXJyZW50Rm9ybVZhbHVlJC5uZXh0KHsgaWQ6IHRoaXMuX2N1cnJlbnRGb3JtVmFsdWUkLnZhbHVlLmlkICsgMSwgZGF0YTogY2xvbmUodGhpcy5fZm9ybVZhbHVlKSB9KTtcbiAgICAgICAgfSksXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JCksXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLl91bm9ic2VydmVUcmlnZ2VyJCksXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCk7XG5cbiAgICB0aGlzLl9jdXJyZW50Rm9ybVZhbHVlJFxuICAgICAgLnBpcGUoXG4gICAgICAgIHRhcCgoY3VycmVudFZhbHVlRXZlbnQpID0+IHtcbiAgICAgICAgICBjb25zdCBwcmV2aW91c1ZhbHVlRXZlbnQgPSB0aGlzLl9sYXN0Rm9ybVZhbHVlJC52YWx1ZTtcbiAgICAgICAgICBjb25zdCBjdXJyZW50VmFsdWUgPSBjdXJyZW50VmFsdWVFdmVudC5kYXRhO1xuXG4gICAgICAgICAgaWYgKG9wdGlvbnM/LndyaXRlVG9RdWVyeVBhcmFtcyAhPT0gZmFsc2UpIHtcbiAgICAgICAgICAgIHRoaXMuX3N5bmNWaWFVcmxRdWVyeVBhcmFtcyhjdXJyZW50VmFsdWVFdmVudC5kYXRhLCBvcHRpb25zPy5yZXBsYWNlVXJsKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCBkaWRSZXNldFZhbHVlcyA9IHRoaXMuX2hhbmRsZVF1ZXJ5Rm9ybVJlc2V0cyhwcmV2aW91c1ZhbHVlRXZlbnQ/LmRhdGEgPz8gbnVsbCwgY3VycmVudFZhbHVlKTtcblxuICAgICAgICAgIGlmIChkaWRSZXNldFZhbHVlcykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICh0aGlzLl9jdXJyZW50Rm9ybVZhbHVlJC52YWx1ZS5pZCAhPT0gY3VycmVudFZhbHVlRXZlbnQuaWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0aGlzLl9jaGFuZ2VzJC5uZXh0KHtcbiAgICAgICAgICAgIHByZXZpb3VzVmFsdWU6IHByZXZpb3VzVmFsdWVFdmVudD8uZGF0YSA/PyBudWxsLFxuICAgICAgICAgICAgY3VycmVudFZhbHVlOiBjdXJyZW50VmFsdWVFdmVudC5kYXRhLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9KSxcbiAgICAgICAgdGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kkKSxcbiAgICAgICAgdGFrZVVudGlsKHRoaXMuX3Vub2JzZXJ2ZVRyaWdnZXIkKSxcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKTtcblxuICAgIGlmIChvcHRpb25zPy5zeW5jT25OYXZpZ2F0aW9uICE9PSBmYWxzZSkge1xuICAgICAgdGhpcy5fcm91dGVyU3RhdGVTZXJ2aWNlLnF1ZXJ5UGFyYW1DaGFuZ2VzJFxuICAgICAgICAucGlwZShcbiAgICAgICAgICB0YWtlVW50aWwodGhpcy5fZGVzdHJveSQpLFxuICAgICAgICAgIHRha2VVbnRpbCh0aGlzLl91bm9ic2VydmVUcmlnZ2VyJCksXG4gICAgICAgICAgdGFwKChjaGFuZ2VzKSA9PiB0aGlzLnNldEZvcm1WYWx1ZUZyb21VcmxRdWVyeVBhcmFtcyh7IHF1ZXJ5UGFyYW1zOiBjaGFuZ2VzIH0pKSxcbiAgICAgICAgKVxuICAgICAgICAuc3Vic2NyaWJlKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfaGFuZGxlUXVlcnlGb3JtUmVzZXRzKHByZXZpb3VzVmFsdWU6IFF1ZXJ5Rm9ybVZhbHVlPFQ+IHwgbnVsbCwgY3VycmVudFZhbHVlOiBRdWVyeUZvcm1WYWx1ZTxUPikge1xuICAgIGxldCBkaWRSZXNldFZhbHVlcyA9IGZhbHNlO1xuXG4gICAgZm9yIChjb25zdCBmb3JtRmllbGRLZXkgaW4gdGhpcy5fZmllbGRzKSB7XG4gICAgICBjb25zdCByZXNldHMgPSB0aGlzLl9maWVsZHNbZm9ybUZpZWxkS2V5XS5kYXRhLmlzUmVzZXRCeTtcblxuICAgICAgaWYgKCFyZXNldHMpIGNvbnRpbnVlO1xuXG4gICAgICBjb25zdCByZXNldENvbmRpdGlvbktleXMgPSBBcnJheS5pc0FycmF5KHJlc2V0cykgPyByZXNldHMgOiBbcmVzZXRzXTtcblxuICAgICAgZm9yIChjb25zdCByZXNldENvbmRpdGlvbktleSBvZiByZXNldENvbmRpdGlvbktleXMpIHtcbiAgICAgICAgaWYgKCEocmVzZXRDb25kaXRpb25LZXkgaW4gdGhpcy5fZmllbGRzKSkge1xuICAgICAgICAgIGlmIChpc0Rldk1vZGUoKSkge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKGBUaGUgZmllbGQgXCIke3Jlc2V0Q29uZGl0aW9uS2V5fVwiIGlzIG5vdCBkZWZpbmVkIGluIHRoZSBRdWVyeUZvcm0uIElzIGl0IGEgdHlwbz9gLCB0aGlzKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChcbiAgICAgICAgICBwcmV2aW91c1ZhbHVlICYmXG4gICAgICAgICAgY3VycmVudFZhbHVlICYmXG4gICAgICAgICAgIWVxdWFsKHByZXZpb3VzVmFsdWVbcmVzZXRDb25kaXRpb25LZXldLCBjdXJyZW50VmFsdWVbcmVzZXRDb25kaXRpb25LZXldKVxuICAgICAgICApIHtcbiAgICAgICAgICBjb25zdCBkZWZhdWx0VmFsdWVGb3JLZXlUb1Jlc2V0ID0gdGhpcy5fZ2V0RGVmYXVsdFZhbHVlKGZvcm1GaWVsZEtleSk7XG4gICAgICAgICAgY29uc3QgY3VycmVudFZhbHVlRm9yS2V5VG9SZXNldCA9IGN1cnJlbnRWYWx1ZVtmb3JtRmllbGRLZXldO1xuXG4gICAgICAgICAgaWYgKGVxdWFsKGRlZmF1bHRWYWx1ZUZvcktleVRvUmVzZXQsIGN1cnJlbnRWYWx1ZUZvcktleVRvUmVzZXQpKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0aGlzLmZvcm0uY29udHJvbHNbZm9ybUZpZWxkS2V5XS5zZXRWYWx1ZShkZWZhdWx0VmFsdWVGb3JLZXlUb1Jlc2V0KTtcblxuICAgICAgICAgIGRpZFJlc2V0VmFsdWVzID0gdHJ1ZTtcblxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGRpZFJlc2V0VmFsdWVzO1xuICB9XG5cbiAgdW5vYnNlcnZlKCkge1xuICAgIHRoaXMuX3Vub2JzZXJ2ZVRyaWdnZXIkLm5leHQodHJ1ZSk7XG4gIH1cblxuICBzZXRGb3JtVmFsdWVGcm9tVXJsUXVlcnlQYXJhbXMob3B0aW9uczogeyBxdWVyeVBhcmFtczogUmVjb3JkPHN0cmluZywgdW5rbm93bj47IHNraXBEZWJvdW5jZT86IGJvb2xlYW4gfSkge1xuICAgIGZvciAoY29uc3QgW2tleSwgZmllbGRdIG9mIE9iamVjdC5lbnRyaWVzKHRoaXMuX2ZpZWxkcykpIHtcbiAgICAgIGNvbnN0IHZhbHVlID0gb3B0aW9ucy5xdWVyeVBhcmFtc1trZXldO1xuXG4gICAgICBjb25zdCB2YWx1ZURvZXNOb3RFeGlzdCA9IHZhbHVlID09PSB1bmRlZmluZWQ7XG5cbiAgICAgIGlmICh2YWx1ZURvZXNOb3RFeGlzdCkgY29udGludWU7XG5cbiAgICAgIGNvbnN0IHZhbHVlR290UmVtb3ZlZCA9IHZhbHVlID09PSBFVF9QUk9QRVJUWV9SRU1PVkVEO1xuXG4gICAgICBpZiAodmFsdWVHb3RSZW1vdmVkKSB7XG4gICAgICAgIGZpZWxkLnNldFZhbHVlKHRoaXMuX2dldERlZmF1bHRWYWx1ZShrZXkpLCB7IHNraXBEZWJvdW5jZTogb3B0aW9ucz8uc2tpcERlYm91bmNlID8/IHRydWUgfSk7XG5cbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGRlc2VyaWFsaXplZFZhbHVlID0gZmllbGQuZGF0YS5xdWVyeVBhcmFtVG9WYWx1ZVRyYW5zZm9ybUZuPy4odmFsdWUpID8/IHZhbHVlO1xuICAgICAgY29uc3QgdmFsdWVJc0VxdWFsVG9DdXJyZW50ID0gZXF1YWwoZGVzZXJpYWxpemVkVmFsdWUsIGZpZWxkLmNvbnRyb2wudmFsdWUpO1xuXG4gICAgICBpZiAodmFsdWVJc0VxdWFsVG9DdXJyZW50KSBjb250aW51ZTtcblxuICAgICAgZmllbGQuc2V0VmFsdWUoZGVzZXJpYWxpemVkVmFsdWUsIHsgc2tpcERlYm91bmNlOiBvcHRpb25zPy5za2lwRGVib3VuY2UgPz8gdHJ1ZSB9KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9nZXREZWZhdWx0VmFsdWUoa2V5OiBzdHJpbmcpIHtcbiAgICBjb25zdCB2YWwgPSB0aGlzLl9kZWZhdWx0VmFsdWVzW2tleV07XG5cbiAgICBpZiAodHlwZW9mIHZhbCA9PT0gJ3N0cmluZycgJiYgdmFsLnN0YXJ0c1dpdGgoRVRfQVJSX1BSRUZJWCkpIHtcbiAgICAgIHJldHVybiBKU09OLnBhcnNlKHZhbC5zbGljZShFVF9BUlJfUFJFRklYLmxlbmd0aCkpO1xuICAgIH1cblxuICAgIHJldHVybiB2YWwgPz8gbnVsbDtcbiAgfVxuXG4gIHByaXZhdGUgX2lzRGVmYXVsdFZhbHVlKGtleTogc3RyaW5nLCB2YWx1ZTogdW5rbm93bikge1xuICAgIGNvbnN0IG5vcm1hbGl6ZWRWYWx1ZSA9IEFycmF5LmlzQXJyYXkodmFsdWUpID8gYCR7RVRfQVJSX1BSRUZJWH0ke0pTT04uc3RyaW5naWZ5KHZhbHVlKX1gIDogdmFsdWU7XG5cbiAgICByZXR1cm4gdGhpcy5fZ2V0RGVmYXVsdFZhbHVlKGtleSkgPT09IG5vcm1hbGl6ZWRWYWx1ZTtcbiAgfVxuXG4gIHByaXZhdGUgX3NldHVwRm9ybUdyb3VwKCkge1xuICAgIGNvbnN0IGdyb3VwID0gbmV3IFF1ZXJ5Rm9ybUdyb3VwKHt9IGFzIFF1ZXJ5Rm9ybUdyb3VwQ29udHJvbHM8VD4pO1xuXG4gICAgZm9yIChjb25zdCBba2V5LCBmaWVsZF0gb2YgT2JqZWN0LmVudHJpZXModGhpcy5fZmllbGRzKSkge1xuICAgICAgZ3JvdXAuYWRkQ29udHJvbChrZXksIGZpZWxkLmNvbnRyb2wpO1xuICAgIH1cblxuICAgIHJldHVybiBncm91cDtcbiAgfVxuXG4gIHByaXZhdGUgX2V4dHJhY3REZWZhdWx0VmFsdWVzKCkge1xuICAgIGNvbnN0IGRlZmF1bHRWYWx1ZXM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge307XG5cbiAgICBmb3IgKGNvbnN0IFtrZXksIGZpZWxkXSBvZiBPYmplY3QuZW50cmllcyh0aGlzLl9maWVsZHMpKSB7XG4gICAgICBjb25zdCB2YWx1ZSA9IGZpZWxkLmNvbnRyb2wudmFsdWU7XG5cbiAgICAgIGlmICh2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgZGVmYXVsdFZhbHVlc1trZXldID0gYCR7RVRfQVJSX1BSRUZJWH0ke0pTT04uc3RyaW5naWZ5KHZhbHVlKX1gO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZGVmYXVsdFZhbHVlc1trZXldID0gdmFsdWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGRlZmF1bHRWYWx1ZXM7XG4gIH1cblxuICBwcml2YXRlIF9zeW5jVmlhVXJsUXVlcnlQYXJhbXModmFsdWVzOiBRdWVyeUZvcm1WYWx1ZTxUPiwgcmVwbGFjZVVybD86IGJvb2xlYW4pIHtcbiAgICBjb25zdCBxdWVyeVBhcmFtcyA9IHsgLi4uY2xvbmUodGhpcy5fYWN0aXZhdGVkUm91dGUuc25hcHNob3QucXVlcnlQYXJhbXMpIH07XG5cbiAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyh2YWx1ZXMpKSB7XG4gICAgICBpZiAoIXRoaXMuX2ZpZWxkc1trZXldKSB7XG4gICAgICAgIGNvbnNvbGUud2FybihgVGhlIGZpZWxkIFwiJHtrZXl9XCIgaXMgbm90IGRlZmluZWQgaW4gdGhlIFF1ZXJ5Rm9ybS4gSXMgaXQgYSB0eXBvP2AsIHRoaXMpO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuX2lzRGVmYXVsdFZhbHVlKGtleSwgdmFsdWUpIHx8IHRoaXMuX2ZpZWxkc1trZXldLmRhdGEuYXBwZW5kVG9VcmwgPT09IGZhbHNlKSB7XG4gICAgICAgIGRlbGV0ZSBxdWVyeVBhcmFtc1trZXldO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcXVlcnlQYXJhbXNba2V5XSA9IHRoaXMuX2ZpZWxkc1trZXldLmRhdGEudmFsdWVUb1F1ZXJ5UGFyYW1UcmFuc2Zvcm1GblxuICAgICAgICAgID8gdGhpcy5fZmllbGRzW2tleV0uZGF0YS52YWx1ZVRvUXVlcnlQYXJhbVRyYW5zZm9ybUZuPy4odmFsdWUpXG4gICAgICAgICAgOiB2YWx1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLl96b25lLnJ1bigoKSA9PiB7XG4gICAgICB0aGlzLl9yb3V0ZXIubmF2aWdhdGUoW10sIHtcbiAgICAgICAgcXVlcnlQYXJhbXMsXG4gICAgICAgIHJlcGxhY2VVcmwsXG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxufVxuIl19
|
|
264
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcnktZm9ybS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvcXVlcnkvc3JjL2xpYi9xdWVyeS1mb3JtL3F1ZXJ5LWZvcm0udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3BGLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzQyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxrQkFBa0IsRUFBRSxLQUFLLEVBQUUsYUFBYSxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNyRyxPQUFPLEVBQUUsZUFBZSxFQUFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBUWhILE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRTNFLE1BQU0sYUFBYSxHQUFHLFVBQVUsQ0FBQztBQUVqQyxNQUFNLE9BQU8sVUFBVTtJQUNyQixJQUFJLE9BQU87UUFDVCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDO0lBQzNCLENBQUM7SUFFRCxZQUFtQixJQUEwQjtRQUExQixTQUFJLEdBQUosSUFBSSxDQUFzQjtJQUFHLENBQUM7Q0FDbEQ7QUFFRCw4REFBOEQ7QUFDOUQsTUFBTSxPQUFPLFNBQVM7SUFpQnBCLElBQVksVUFBVTtRQUNwQixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUF1QixDQUFDO0lBQ3RELENBQUM7SUFTRCxJQUFJLFFBQVE7UUFDVixP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QU07WUFDTCxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztTQUN2QztRQUVELElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDdkMsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdab25lLCBhc3NlcnRJbkluamVjdGlvbkNvbnRleHQsIGluamVjdCwgaXNEZXZNb2RlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IEVUX1BST1BFUlRZX1JFTU9WRUQsIFJvdXRlclN0YXRlU2VydmljZSwgY2xvbmUsIGNyZWF0ZURlc3Ryb3ksIGVxdWFsIH0gZnJvbSAnQGV0aGxldGUvY29yZSc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIFN1YmplY3QsIGRlYm91bmNlVGltZSwgbWFwLCBtZXJnZSwgb2YsIHN3aXRjaE1hcCwgdGFrZVVudGlsLCB0YXAsIHRpbWVyIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQge1xuICBRdWVyeUZpZWxkT3B0aW9ucyxcbiAgUXVlcnlGb3JtR3JvdXBDb250cm9scyxcbiAgUXVlcnlGb3JtT2JzZXJ2ZU9wdGlvbnMsXG4gIFF1ZXJ5Rm9ybVZhbHVlLFxuICBRdWVyeUZvcm1WYWx1ZUV2ZW50LFxufSBmcm9tICcuL3F1ZXJ5LWZvcm0udHlwZXMnO1xuaW1wb3J0IHsgdHJhbnNmb3JtVG9Cb29sZWFuLCB0cmFuc2Zvcm1Ub051bWJlciB9IGZyb20gJy4vcXVlcnktZm9ybS51dGlscyc7XG5cbmNvbnN0IEVUX0FSUl9QUkVGSVggPSAnRVRfQVJSX18nO1xuXG5leHBvcnQgY2xhc3MgUXVlcnlGaWVsZDxUPiB7XG4gIGdldCBjb250cm9sKCkge1xuICAgIHJldHVybiB0aGlzLmRhdGEuY29udHJvbDtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBkYXRhOiBRdWVyeUZpZWxkT3B0aW9uczxUPikge31cbn1cblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbmV4cG9ydCBjbGFzcyBRdWVyeUZvcm08VCBleHRlbmRzIFJlY29yZDxzdHJpbmcsIFF1ZXJ5RmllbGQ8YW55Pj4+IHtcbiAgcHJpdmF0ZSByZWFkb25seSBfZGVzdHJveSQgPSBjcmVhdGVEZXN0cm95KCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3Vub2JzZXJ2ZVRyaWdnZXIkID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfcm91dGVyID0gaW5qZWN0KFJvdXRlcik7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2FjdGl2YXRlZFJvdXRlID0gaW5qZWN0KEFjdGl2YXRlZFJvdXRlKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfZGVmYXVsdFZhbHVlcyA9IHRoaXMuX2V4dHJhY3REZWZhdWx0VmFsdWVzKCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JvdXRlclN0YXRlU2VydmljZSA9IGluamVjdChSb3V0ZXJTdGF0ZVNlcnZpY2UpO1xuICBwcml2YXRlIHJlYWRvbmx5IF96b25lID0gaW5qZWN0KE5nWm9uZSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2RpZFZhbHVlQ2hhbmdlcyQgPSBuZXcgU3ViamVjdDxib29sZWFuPigpO1xuXG4gIHByaXZhdGUgX2lzT2JzZXJ2aW5nID0gZmFsc2U7XG5cbiAgcmVhZG9ubHkgZm9ybSA9IHRoaXMuX3NldHVwRm9ybUdyb3VwKCk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfbGFzdEZvcm1WYWx1ZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFF1ZXJ5Rm9ybVZhbHVlPFQ+IHwgbnVsbD4obnVsbCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2N1cnJlbnRGb3JtVmFsdWUkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxRdWVyeUZvcm1WYWx1ZTxUPj4odGhpcy5fZm9ybVZhbHVlKTtcblxuICBwcml2YXRlIGdldCBfZm9ybVZhbHVlKCkge1xuICAgIHJldHVybiB0aGlzLmZvcm0uZ2V0UmF3VmFsdWUoKSBhcyBRdWVyeUZvcm1WYWx1ZTxUPjtcbiAgfVxuXG4gIHByaXZhdGUgcmVhZG9ubHkgX2NoYW5nZXMkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxRdWVyeUZvcm1WYWx1ZUV2ZW50PFQ+Pih7XG4gICAgcHJldmlvdXNWYWx1ZTogbnVsbCxcbiAgICBjdXJyZW50VmFsdWU6IHRoaXMuZm9ybS5nZXRSYXdWYWx1ZSgpIGFzIFF1ZXJ5Rm9ybVZhbHVlPFQ+LFxuICB9KTtcblxuICByZWFkb25seSBjaGFuZ2VzJCA9IHRoaXMuX2NoYW5nZXMkLmFzT2JzZXJ2YWJsZSgpO1xuXG4gIGdldCBjb250cm9scygpIHtcbiAgICByZXR1cm4gdGhpcy5mb3JtLmNvbnRyb2xzO1xuICB9XG5cbiAgZ2V0IHZhbHVlKCkge1xuICAgIHJldHVybiB0aGlzLl9jaGFuZ2VzJC52YWx1ZS5jdXJyZW50VmFsdWU7XG4gIH1cblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIF9maWVsZHM6IFQpIHtcbiAgICBhc3NlcnRJbkluamVjdGlvbkNvbnRleHQoUXVlcnlGb3JtKTtcbiAgfVxuXG4gIG9ic2VydmUob3B0aW9ucz86IFF1ZXJ5Rm9ybU9ic2VydmVPcHRpb25zKSB7XG4gICAgaWYgKHRoaXMuX2lzT2JzZXJ2aW5nKSB7XG4gICAgICBpZiAoaXNEZXZNb2RlKCkpIHtcbiAgICAgICAgY29uc29sZS53YXJuKCdRdWVyeUZvcm0ub2JzZXJ2ZSgpIHdhcyBjYWxsZWQgbXVsdGlwbGUgdGltZXMuIFRoaXMgaXMgbm90IHN1cHBvcnRlZC4nKTtcbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9pc09ic2VydmluZyA9IHRydWU7XG5cbiAgICBpZiAob3B0aW9ucz8uc3luY09uTmF2aWdhdGlvbiAhPT0gZmFsc2UpIHtcbiAgICAgIGNvbnN0IGRpZENoYW5nZXMgPSB0aGlzLnNldEZvcm1WYWx1ZUZyb21VcmxRdWVyeVBhcmFtcyh7XG4gICAgICAgIHF1ZXJ5UGFyYW1zOiB0aGlzLl9yb3V0ZXJTdGF0ZVNlcnZpY2UucXVlcnlQYXJhbXMsXG4gICAgICB9KTtcblxuICAgICAgaWYgKGRpZENoYW5nZXMpIHtcbiAgICAgICAgdGhpcy5faGFuZGxlRm9ybUNoYW5nZSh0cnVlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBtZXJnZSguLi5PYmplY3QudmFsdWVzKHRoaXMuX2ZpZWxkcykubWFwKChmaWVsZCkgPT4gZmllbGQuY29udHJvbC52YWx1ZUNoYW5nZXMpLCB0aGlzLl9kaWRWYWx1ZUNoYW5nZXMkKVxuICAgICAgLnBpcGUoXG4gICAgICAgIGRlYm91bmNlVGltZSgwKSxcbiAgICAgICAgdGFwKCgpID0+IHtcbiAgICAgICAgICB0aGlzLl9oYW5kbGVGb3JtQ2hhbmdlKCk7XG4gICAgICAgIH0pLFxuICAgICAgICB0YWtlVW50aWwodGhpcy5fZGVzdHJveSQpLFxuICAgICAgICB0YWtlVW50aWwodGhpcy5fdW5vYnNlcnZlVHJpZ2dlciQpLFxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgpO1xuXG4gICAgbGV0IGNoYW5nZWRGaWVsZHNJbkxhc3RSZXNldExvb3A6IHN0cmluZ1tdID0gW107XG4gICAgbGV0IGN1cnJlbnRVbmlxdWVDaGFuZ2VkRmllbGRzOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgdGhpcy5fY3VycmVudEZvcm1WYWx1ZSRcbiAgICAgIC5waXBlKFxuICAgICAgICBtYXAoKGN1cnJlbnRWYWx1ZSkgPT4ge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBwcmV2aW91c1ZhbHVlOiBjbG9uZSh0aGlzLl9sYXN0Rm9ybVZhbHVlJC52YWx1ZSksXG4gICAgICAgICAgICBjdXJyZW50VmFsdWU6IGNsb25lKGN1cnJlbnRWYWx1ZSksXG4gICAgICAgICAgfTtcbiAgICAgICAgfSksXG4gICAgICAgIHRhcCgoeyBjdXJyZW50VmFsdWUsIHByZXZpb3VzVmFsdWUgfSkgPT4ge1xuICAgICAgICAgIGlmIChvcHRpb25zPy53cml0ZVRvUXVlcnlQYXJhbXMgIT09IGZhbHNlKSB7XG4gICAgICAgICAgICB0aGlzLl9zeW5jVmlhVXJsUXVlcnlQYXJhbXMoY3VycmVudFZhbHVlLCBvcHRpb25zPy5yZXBsYWNlVXJsKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCBkaWRSZXNldFZhbHVlcyA9IHRoaXMuX2hhbmRsZVF1ZXJ5Rm9ybVJlc2V0cyhwcmV2aW91c1ZhbHVlID8/IG51bGwsIGN1cnJlbnRWYWx1ZSk7XG5cbiAgICAgICAgICBjb25zdCBjaGFuZ2VkRmllbGRzID0gT2JqZWN0LmtleXMoY3VycmVudFZhbHVlKS5maWx0ZXIoXG4gICAgICAgICAgICAoa2V5KSA9PiAhZXF1YWwocHJldmlvdXNWYWx1ZT8uW2tleV0sIGN1cnJlbnRWYWx1ZVtrZXldKSxcbiAgICAgICAgICApO1xuXG4gICAgICAgICAgaWYgKGNoYW5nZWRGaWVsZHNJbkxhc3RSZXNldExvb3AubGVuZ3RoKSB7XG4gICAgICAgICAgICBjaGFuZ2VkRmllbGRzLnB1c2goLi4uY2hhbmdlZEZpZWxkc0luTGFzdFJlc2V0TG9vcCk7XG4gICAgICAgICAgICBjaGFuZ2VkRmllbGRzSW5MYXN0UmVzZXRMb29wID0gW107XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGRpZFJlc2V0VmFsdWVzKSB7XG4gICAgICAgICAgICB0aGlzLl9kaWRWYWx1ZUNoYW5nZXMkLm5leHQodHJ1ZSk7XG4gICAgICAgICAgICBjaGFuZ2VkRmllbGRzSW5MYXN0UmVzZXRMb29wID0gY2hhbmdlZEZpZWxkcztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjdXJyZW50VW5pcXVlQ2hhbmdlZEZpZWxkcyA9IFsuLi5uZXcgU2V0KGNoYW5nZWRGaWVsZHMpXTtcbiAgICAgICAgfSksXG4gICAgICAgIHN3aXRjaE1hcCgoeyBjdXJyZW50VmFsdWUsIHByZXZpb3VzVmFsdWUgfSkgPT4ge1xuICAgICAgICAgIGlmIChjaGFuZ2VkRmllbGRzSW5MYXN0UmVzZXRMb29wLmxlbmd0aCkgcmV0dXJuIG9mKG51bGwpLnBpcGUobWFwKCgpID0+ICh7IGN1cnJlbnRWYWx1ZSwgcHJldmlvdXNWYWx1ZSB9KSkpO1xuXG4gICAgICAgICAgY29uc3QgZGVib3VuY2VWYWx1ZXMgPSBjdXJyZW50VW5pcXVlQ2hhbmdlZEZpZWxkcy5tYXAoKGtleSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZmllbGREYXRhID0gdGhpcy5fZmllbGRzW2tleV0uZGF0YTtcblxuICAgICAgICAgICAgaWYgKGZpZWxkRGF0YS5kaXNhYmxlRGVib3VuY2VJZkZhbHN5ID09PSB0cnVlICYmICFjdXJyZW50VmFsdWVba2V5XSkge1xuICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIGZpZWxkRGF0YS5kZWJvdW5jZSA/PyBudWxsO1xuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgY3VycmVudFVuaXF1ZUNoYW5nZWRGaWVsZHMgPSBbXTtcblxuICAgICAgICAgIGlmIChkZWJvdW5jZVZhbHVlcy5zb21lKCh2KSA9PiB2ID09PSBudWxsKSB8fCAhZGVib3VuY2VWYWx1ZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gb2YobnVsbCkucGlwZShtYXAoKCkgPT4gKHsgY3VycmVudFZhbHVlLCBwcmV2aW91c1ZhbHVlIH0pKSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3Qgc2hvcnRlc3REZWJvdW5jZVRpbWUgPSBNYXRoLm1pbiguLi5kZWJvdW5jZVZhbHVlcy5maWx0ZXIoKHYpOiB2IGlzIG51bWJlciA9PiB2ICE9PSBudWxsKSk7XG5cbiAgICAgICAgICByZXR1cm4gdGltZXIoc2hvcnRlc3REZWJvdW5jZVRpbWUpLnBpcGUobWFwKCgpID0+ICh7IGN1cnJlbnRWYWx1ZSwgcHJldmlvdXNWYWx1ZSB9KSkpO1xuICAgICAgICB9KSxcbiAgICAgICAgdGFwKCh7IGN1cnJlbnRWYWx1ZSwgcHJldmlvdXNWYWx1ZSB9KSA9PiB7XG4gICAgICAgICAgaWYgKGNoYW5nZWRGaWVsZHNJbkxhc3RSZXNldExvb3AubGVuZ3RoKSByZXR1cm47XG5cbiAgICAgICAgICB0aGlzLl9jaGFuZ2VzJC5uZXh0KHtcbiAgICAgICAgICAgIHByZXZpb3VzVmFsdWU6IHByZXZpb3VzVmFsdWUgPz8gbnVsbCxcbiAgICAgICAgICAgIGN1cnJlbnRWYWx1ZTogY3VycmVudFZhbHVlLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9KSxcbiAgICAgICAgdGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kkKSxcbiAgICAgICAgdGFrZVVudGlsKHRoaXMuX3Vub2JzZXJ2ZVRyaWdnZXIkKSxcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKTtcblxuICAgIGlmIChvcHRpb25zPy5zeW5jT25OYXZpZ2F0aW9uICE9PSBmYWxzZSkge1xuICAgICAgdGhpcy5fcm91dGVyU3RhdGVTZXJ2aWNlLnF1ZXJ5UGFyYW1DaGFuZ2VzJFxuICAgICAgICAucGlwZShcbiAgICAgICAgICB0YWtlVW50aWwodGhpcy5fZGVzdHJveSQpLFxuICAgICAgICAgIHRha2VVbnRpbCh0aGlzLl91bm9ic2VydmVUcmlnZ2VyJCksXG4gICAgICAgICAgdGFwKChjaGFuZ2VzKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBkaWRWYWx1ZUNoYW5nZXMgPSB0aGlzLnNldEZvcm1WYWx1ZUZyb21VcmxRdWVyeVBhcmFtcyh7IHF1ZXJ5UGFyYW1zOiBjaGFuZ2VzIH0pO1xuXG4gICAgICAgICAgICBpZiAoZGlkVmFsdWVDaGFuZ2VzKSB7XG4gICAgICAgICAgICAgIHRoaXMuX2RpZFZhbHVlQ2hhbmdlcyQubmV4dCh0cnVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSxcbiAgICAgICAgKVxuICAgICAgICAuc3Vic2NyaWJlKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfaGFuZGxlUXVlcnlGb3JtUmVzZXRzKHByZXZpb3VzVmFsdWU6IFF1ZXJ5Rm9ybVZhbHVlPFQ+IHwgbnVsbCwgY3VycmVudFZhbHVlOiBRdWVyeUZvcm1WYWx1ZTxUPikge1xuICAgIGxldCBkaWRSZXNldFZhbHVlcyA9IGZhbHNlO1xuXG4gICAgZm9yIChjb25zdCBmb3JtRmllbGRLZXkgaW4gdGhpcy5fZmllbGRzKSB7XG4gICAgICBjb25zdCByZXNldHMgPSB0aGlzLl9maWVsZHNbZm9ybUZpZWxkS2V5XS5kYXRhLmlzUmVzZXRCeTtcblxuICAgICAgaWYgKCFyZXNldHMpIGNvbnRpbnVlO1xuXG4gICAgICBjb25zdCByZXNldENvbmRpdGlvbktleXMgPSBBcnJheS5pc0FycmF5KHJlc2V0cykgPyByZXNldHMgOiBbcmVzZXRzXTtcblxuICAgICAgZm9yIChjb25zdCByZXNldENvbmRpdGlvbktleSBvZiByZXNldENvbmRpdGlvbktleXMpIHtcbiAgICAgICAgaWYgKCEocmVzZXRDb25kaXRpb25LZXkgaW4gdGhpcy5fZmllbGRzKSkge1xuICAgICAgICAgIGlmIChpc0Rldk1vZGUoKSkge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKGBUaGUgZmllbGQgXCIke3Jlc2V0Q29uZGl0aW9uS2V5fVwiIGlzIG5vdCBkZWZpbmVkIGluIHRoZSBRdWVyeUZvcm0uIElzIGl0IGEgdHlwbz9gLCB0aGlzKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChcbiAgICAgICAgICBwcmV2aW91c1ZhbHVlICYmXG4gICAgICAgICAgY3VycmVudFZhbHVlICYmXG4gICAgICAgICAgIWVxdWFsKHByZXZpb3VzVmFsdWVbcmVzZXRDb25kaXRpb25LZXldLCBjdXJyZW50VmFsdWVbcmVzZXRDb25kaXRpb25LZXldKVxuICAgICAgICApIHtcbiAgICAgICAgICBjb25zdCBkZWZhdWx0VmFsdWVGb3JLZXlUb1Jlc2V0ID0gdGhpcy5fZ2V0RGVmYXVsdFZhbHVlKGZvcm1GaWVsZEtleSk7XG4gICAgICAgICAgY29uc3QgY3VycmVudFZhbHVlRm9yS2V5VG9SZXNldCA9IGN1cnJlbnRWYWx1ZVtmb3JtRmllbGRLZXldO1xuXG4gICAgICAgICAgaWYgKGVxdWFsKGRlZmF1bHRWYWx1ZUZvcktleVRvUmVzZXQsIGN1cnJlbnRWYWx1ZUZvcktleVRvUmVzZXQpKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0aGlzLmZvcm0uY29udHJvbHNbZm9ybUZpZWxkS2V5XS5zZXRWYWx1ZShkZWZhdWx0VmFsdWVGb3JLZXlUb1Jlc2V0LCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XG5cbiAgICAgICAgICBkaWRSZXNldFZhbHVlcyA9IHRydWU7XG5cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBkaWRSZXNldFZhbHVlcztcbiAgfVxuXG4gIHVub2JzZXJ2ZSgpIHtcbiAgICB0aGlzLl91bm9ic2VydmVUcmlnZ2VyJC5uZXh0KHRydWUpO1xuICB9XG5cbiAgc2V0Rm9ybVZhbHVlRnJvbVVybFF1ZXJ5UGFyYW1zKG9wdGlvbnM6IHsgcXVlcnlQYXJhbXM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IH0pIHtcbiAgICBsZXQgZGlkVmFsdWVDaGFuZ2VzID0gZmFsc2U7XG5cbiAgICBmb3IgKGNvbnN0IFtrZXksIGZpZWxkXSBvZiBPYmplY3QuZW50cmllcyh0aGlzLl9maWVsZHMpKSB7XG4gICAgICBjb25zdCB2YWx1ZSA9IG9wdGlvbnMucXVlcnlQYXJhbXNba2V5XTtcblxuICAgICAgY29uc3QgdmFsdWVEb2VzTm90RXhpc3QgPSB2YWx1ZSA9PT0gdW5kZWZpbmVkO1xuXG4gICAgICBpZiAodmFsdWVEb2VzTm90RXhpc3QpIGNvbnRpbnVlO1xuXG4gICAgICBjb25zdCB2YWx1ZUdvdFJlbW92ZWQgPSB2YWx1ZSA9PT0gRVRfUFJPUEVSVFlfUkVNT1ZFRDtcblxuICAgICAgaWYgKHZhbHVlR290UmVtb3ZlZCkge1xuICAgICAgICBmaWVsZC5jb250cm9sLnNldFZhbHVlKHRoaXMuX2dldERlZmF1bHRWYWx1ZShrZXkpLCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgICAgIGRpZFZhbHVlQ2hhbmdlcyA9IHRydWU7XG5cbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBsZXQgZGVzZXJpYWxpemVkVmFsdWUgPSB2YWx1ZTtcblxuICAgICAgaWYgKGZpZWxkLmRhdGEucXVlcnlQYXJhbVRvVmFsdWVUcmFuc2Zvcm1Gbikge1xuICAgICAgICBkZXNlcmlhbGl6ZWRWYWx1ZSA9IGZpZWxkLmRhdGEucXVlcnlQYXJhbVRvVmFsdWVUcmFuc2Zvcm1Gbih2YWx1ZSk7XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiB0aGlzLl9nZXREZWZhdWx0VmFsdWUoa2V5KSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgZGVzZXJpYWxpemVkVmFsdWUgPSB0cmFuc2Zvcm1Ub051bWJlcih2YWx1ZSk7XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiB0aGlzLl9nZXREZWZhdWx0VmFsdWUoa2V5KSA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgIGRlc2VyaWFsaXplZFZhbHVlID0gdHJhbnNmb3JtVG9Cb29sZWFuKHZhbHVlKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgdmFsdWVJc0VxdWFsVG9DdXJyZW50ID0gZXF1YWwoZGVzZXJpYWxpemVkVmFsdWUsIGZpZWxkLmNvbnRyb2wudmFsdWUpO1xuXG4gICAgICBpZiAodmFsdWVJc0VxdWFsVG9DdXJyZW50KSBjb250aW51ZTtcblxuICAgICAgZmllbGQuY29udHJvbC5zZXRWYWx1ZShkZXNlcmlhbGl6ZWRWYWx1ZSwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgICAgZGlkVmFsdWVDaGFuZ2VzID0gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gZGlkVmFsdWVDaGFuZ2VzO1xuICB9XG5cbiAgcHJpdmF0ZSBfZ2V0RGVmYXVsdFZhbHVlKGtleTogc3RyaW5nKSB7XG4gICAgY29uc3QgdmFsID0gdGhpcy5fZGVmYXVsdFZhbHVlc1trZXldO1xuXG4gICAgaWYgKHR5cGVvZiB2YWwgPT09ICdzdHJpbmcnICYmIHZhbC5zdGFydHNXaXRoKEVUX0FSUl9QUkVGSVgpKSB7XG4gICAgICByZXR1cm4gSlNPTi5wYXJzZSh2YWwuc2xpY2UoRVRfQVJSX1BSRUZJWC5sZW5ndGgpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdmFsID8/IG51bGw7XG4gIH1cblxuICBwcml2YXRlIF9pc0RlZmF1bHRWYWx1ZShrZXk6IHN0cmluZywgdmFsdWU6IHVua25vd24pIHtcbiAgICBjb25zdCBub3JtYWxpemVkVmFsdWUgPSBBcnJheS5pc0FycmF5KHZhbHVlKSA/IGAke0VUX0FSUl9QUkVGSVh9JHtKU09OLnN0cmluZ2lmeSh2YWx1ZSl9YCA6IHZhbHVlO1xuXG4gICAgcmV0dXJuIHRoaXMuX2dldERlZmF1bHRWYWx1ZShrZXkpID09PSBub3JtYWxpemVkVmFsdWU7XG4gIH1cblxuICBwcml2YXRlIF9zZXR1cEZvcm1Hcm91cCgpIHtcbiAgICBjb25zdCBncm91cCA9IG5ldyBGb3JtR3JvdXAoe30gYXMgUXVlcnlGb3JtR3JvdXBDb250cm9sczxUPik7XG5cbiAgICBmb3IgKGNvbnN0IFtrZXksIGZpZWxkXSBvZiBPYmplY3QuZW50cmllcyh0aGlzLl9maWVsZHMpKSB7XG4gICAgICBncm91cC5hZGRDb250cm9sKGtleSwgZmllbGQuY29udHJvbCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGdyb3VwO1xuICB9XG5cbiAgcHJpdmF0ZSBfZXh0cmFjdERlZmF1bHRWYWx1ZXMoKSB7XG4gICAgY29uc3QgZGVmYXVsdFZhbHVlczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7fTtcblxuICAgIGZvciAoY29uc3QgW2tleSwgZmllbGRdIG9mIE9iamVjdC5lbnRyaWVzKHRoaXMuX2ZpZWxkcykpIHtcbiAgICAgIGNvbnN0IHZhbHVlID0gZmllbGQuY29udHJvbC52YWx1ZTtcblxuICAgICAgaWYgKHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICBkZWZhdWx0VmFsdWVzW2tleV0gPSBgJHtFVF9BUlJfUFJFRklYfSR7SlNPTi5zdHJpbmdpZnkodmFsdWUpfWA7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkZWZhdWx0VmFsdWVzW2tleV0gPSB2YWx1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZGVmYXVsdFZhbHVlcztcbiAgfVxuXG4gIHByaXZhdGUgX3N5bmNWaWFVcmxRdWVyeVBhcmFtcyh2YWx1ZXM6IFF1ZXJ5Rm9ybVZhbHVlPFQ+LCByZXBsYWNlVXJsPzogYm9vbGVhbikge1xuICAgIGNvbnN0IHF1ZXJ5UGFyYW1zID0geyAuLi5jbG9uZSh0aGlzLl9hY3RpdmF0ZWRSb3V0ZS5zbmFwc2hvdC5xdWVyeVBhcmFtcykgfTtcblxuICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHZhbHVlcykpIHtcbiAgICAgIGlmICghdGhpcy5fZmllbGRzW2tleV0pIHtcbiAgICAgICAgY29uc29sZS53YXJuKGBUaGUgZmllbGQgXCIke2tleX1cIiBpcyBub3QgZGVmaW5lZCBpbiB0aGUgUXVlcnlGb3JtLiBJcyBpdCBhIHR5cG8/YCwgdGhpcyk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5faXNEZWZhdWx0VmFsdWUoa2V5LCB2YWx1ZSkgfHwgdGhpcy5fZmllbGRzW2tleV0uZGF0YS5hcHBlbmRUb1VybCA9PT0gZmFsc2UpIHtcbiAgICAgICAgZGVsZXRlIHF1ZXJ5UGFyYW1zW2tleV07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBxdWVyeVBhcmFtc1trZXldID0gdGhpcy5fZmllbGRzW2tleV0uZGF0YS52YWx1ZVRvUXVlcnlQYXJhbVRyYW5zZm9ybUZuXG4gICAgICAgICAgPyB0aGlzLl9maWVsZHNba2V5XS5kYXRhLnZhbHVlVG9RdWVyeVBhcmFtVHJhbnNmb3JtRm4/Lih2YWx1ZSlcbiAgICAgICAgICA6IHZhbHVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuX3pvbmUucnVuKCgpID0+IHtcbiAgICAgIHRoaXMuX3JvdXRlci5uYXZpZ2F0ZShbXSwge1xuICAgICAgICBxdWVyeVBhcmFtcyxcbiAgICAgICAgcmVwbGFjZVVybCxcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBfaGFuZGxlRm9ybUNoYW5nZShmb3JjZU92ZXJ3cml0ZSA9IGZhbHNlKSB7XG4gICAgY29uc3QgY3VycmVudFZhbCA9IGNsb25lKHRoaXMuX2N1cnJlbnRGb3JtVmFsdWUkLnZhbHVlKTtcbiAgICBjb25zdCBuZXdWYWwgPSBjbG9uZSh0aGlzLl9mb3JtVmFsdWUpO1xuXG4gICAgaWYgKGVxdWFsKGN1cnJlbnRWYWwsIG5ld1ZhbCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoZm9yY2VPdmVyd3JpdGUpIHtcbiAgICAgIHRoaXMuX2xhc3RGb3JtVmFsdWUkLm5leHQobmV3VmFsKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fbGFzdEZvcm1WYWx1ZSQubmV4dChjdXJyZW50VmFsKTtcbiAgICB9XG5cbiAgICB0aGlzLl9jdXJyZW50Rm9ybVZhbHVlJC5uZXh0KG5ld1ZhbCk7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { signal } from '@angular/core';
|
|
2
|
+
import { BehaviorSubject } from 'rxjs';
|
|
3
|
+
export class QuerySubject extends BehaviorSubject {
|
|
4
|
+
constructor(initialValue = null, _config) {
|
|
5
|
+
super(initialValue);
|
|
6
|
+
this._config = _config;
|
|
7
|
+
}
|
|
8
|
+
next(value) {
|
|
9
|
+
if (this._config?.abortPrevious) {
|
|
10
|
+
this.value?.abort();
|
|
11
|
+
}
|
|
12
|
+
super.next(value);
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
export const querySignal = (initialValue = null, config) => {
|
|
16
|
+
const _signal = signal(initialValue);
|
|
17
|
+
const origMutate = _signal.mutate;
|
|
18
|
+
const origUpdate = _signal.update;
|
|
19
|
+
const origSet = _signal.set;
|
|
20
|
+
_signal.mutate = (mutatorFn) => {
|
|
21
|
+
if (config?.abortPrevious) {
|
|
22
|
+
_signal()?.abort();
|
|
23
|
+
}
|
|
24
|
+
origMutate(mutatorFn);
|
|
25
|
+
};
|
|
26
|
+
_signal.update = (updateFn) => {
|
|
27
|
+
if (config?.abortPrevious) {
|
|
28
|
+
_signal()?.abort();
|
|
29
|
+
}
|
|
30
|
+
origUpdate(updateFn);
|
|
31
|
+
};
|
|
32
|
+
_signal.set = (value) => {
|
|
33
|
+
if (config?.abortPrevious) {
|
|
34
|
+
_signal()?.abort();
|
|
35
|
+
}
|
|
36
|
+
origSet(value);
|
|
37
|
+
};
|
|
38
|
+
};
|
|
39
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS51dGlscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvcXVlcnkvc3JjL2xpYi91dGlscy9kYXRhLnV0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdkMsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQVd2QyxNQUFNLE9BQU8sWUFBd0MsU0FBUSxlQUFrQjtJQUM3RSxZQUNFLGVBQWtCLElBQVMsRUFDbkIsT0FBOEI7UUFFdEMsS0FBSyxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBRlosWUFBTyxHQUFQLE9BQU8sQ0FBdUI7SUFHeEMsQ0FBQztJQUVRLElBQUksQ0FBQyxLQUFRO1FBQ3BCLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRSxhQUFhLEVBQUU7WUFDL0IsSUFBSSxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsQ0FBQztTQUNyQjtRQUVELEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDcEIsQ0FBQztDQUNGO0FBRUQsTUFBTSxDQUFDLE1BQU0sV0FBVyxHQUFHLENBQTRCLGVBQWtCLElBQVMsRUFBRSxNQUE2QixFQUFFLEVBQUU7SUFDbkgsTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFJLFlBQVksQ0FBQyxDQUFDO0lBRXhDLE1BQU0sVUFBVSxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUM7SUFDbEMsTUFBTSxVQUFVLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQztJQUNsQyxNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDO0lBRTVCLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxTQUE2QixFQUFFLEVBQUU7UUFDakQsSUFBSSxNQUFNLEVBQUUsYUFBYSxFQUFFO1lBQ3pCLE9BQU8sRUFBRSxFQUFFLEtBQUssRUFBRSxDQUFDO1NBQ3BCO1FBRUQsVUFBVSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ3hCLENBQUMsQ0FBQztJQUVGLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxRQUF5QixFQUFFLEVBQUU7UUFDN0MsSUFBSSxNQUFNLEVBQUUsYUFBYSxFQUFFO1lBQ3pCLE9BQU8sRUFBRSxFQUFFLEtBQUssRUFBRSxDQUFDO1NBQ3BCO1FBRUQsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ3ZCLENBQUMsQ0FBQztJQUVGLE9BQU8sQ0FBQyxHQUFHLEdBQUcsQ0FBQyxLQUFRLEVBQUUsRUFBRTtRQUN6QixJQUFJLE1BQU0sRUFBRSxhQUFhLEVBQUU7WUFDekIsT0FBTyxFQUFFLEVBQUUsS0FBSyxFQUFFLENBQUM7U0FDcEI7UUFFRCxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDakIsQ0FBQyxDQUFDO0FBQ0osQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgc2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEFueVF1ZXJ5IH0gZnJvbSAnLi4vcXVlcnknO1xuXG5leHBvcnQgaW50ZXJmYWNlIFF1ZXJ5Q29udGFpbmVyQ29uZmlnIHtcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIHByZXZpb3VzIHF1ZXJ5IHdpbGwgYmUgYWJvcnRlZCB3aGVuIGEgbmV3IHF1ZXJ5IGlzIHB1c2hlZCBpbnRvIHRoZSBjb250YWluZXIuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBhYm9ydFByZXZpb3VzPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGNsYXNzIFF1ZXJ5U3ViamVjdDxUIGV4dGVuZHMgQW55UXVlcnkgfCBudWxsPiBleHRlbmRzIEJlaGF2aW9yU3ViamVjdDxUPiB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIGluaXRpYWxWYWx1ZTogVCA9IG51bGwgYXMgVCxcbiAgICBwcml2YXRlIF9jb25maWc/OiBRdWVyeUNvbnRhaW5lckNvbmZpZyxcbiAgKSB7XG4gICAgc3VwZXIoaW5pdGlhbFZhbHVlKTtcbiAgfVxuXG4gIG92ZXJyaWRlIG5leHQodmFsdWU6IFQpIHtcbiAgICBpZiAodGhpcy5fY29uZmlnPy5hYm9ydFByZXZpb3VzKSB7XG4gICAgICB0aGlzLnZhbHVlPy5hYm9ydCgpO1xuICAgIH1cblxuICAgIHN1cGVyLm5leHQodmFsdWUpO1xuICB9XG59XG5cbmV4cG9ydCBjb25zdCBxdWVyeVNpZ25hbCA9IDxUIGV4dGVuZHMgQW55UXVlcnkgfCBudWxsPihpbml0aWFsVmFsdWU6IFQgPSBudWxsIGFzIFQsIGNvbmZpZz86IFF1ZXJ5Q29udGFpbmVyQ29uZmlnKSA9PiB7XG4gIGNvbnN0IF9zaWduYWwgPSBzaWduYWw8VD4oaW5pdGlhbFZhbHVlKTtcblxuICBjb25zdCBvcmlnTXV0YXRlID0gX3NpZ25hbC5tdXRhdGU7XG4gIGNvbnN0IG9yaWdVcGRhdGUgPSBfc2lnbmFsLnVwZGF0ZTtcbiAgY29uc3Qgb3JpZ1NldCA9IF9zaWduYWwuc2V0O1xuXG4gIF9zaWduYWwubXV0YXRlID0gKG11dGF0b3JGbjogKHZhbHVlOiBUKSA9PiB2b2lkKSA9PiB7XG4gICAgaWYgKGNvbmZpZz8uYWJvcnRQcmV2aW91cykge1xuICAgICAgX3NpZ25hbCgpPy5hYm9ydCgpO1xuICAgIH1cblxuICAgIG9yaWdNdXRhdGUobXV0YXRvckZuKTtcbiAgfTtcblxuICBfc2lnbmFsLnVwZGF0ZSA9ICh1cGRhdGVGbjogKHZhbHVlOiBUKSA9PiBUKSA9PiB7XG4gICAgaWYgKGNvbmZpZz8uYWJvcnRQcmV2aW91cykge1xuICAgICAgX3NpZ25hbCgpPy5hYm9ydCgpO1xuICAgIH1cblxuICAgIG9yaWdVcGRhdGUodXBkYXRlRm4pO1xuICB9O1xuXG4gIF9zaWduYWwuc2V0ID0gKHZhbHVlOiBUKSA9PiB7XG4gICAgaWYgKGNvbmZpZz8uYWJvcnRQcmV2aW91cykge1xuICAgICAgX3NpZ25hbCgpPy5hYm9ydCgpO1xuICAgIH1cblxuICAgIG9yaWdTZXQodmFsdWUpO1xuICB9O1xufTtcbiJdfQ==
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
export * from './data.utils';
|
|
1
2
|
export * from './deep-freeze.util';
|
|
2
3
|
export * from './def.util';
|
|
3
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
4
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL3F1ZXJ5L3NyYy9saWIvdXRpbHMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxjQUFjLENBQUM7QUFDN0IsY0FBYyxvQkFBb0IsQ0FBQztBQUNuQyxjQUFjLFlBQVksQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vZGF0YS51dGlscyc7XG5leHBvcnQgKiBmcm9tICcuL2RlZXAtZnJlZXplLnV0aWwnO1xuZXhwb3J0ICogZnJvbSAnLi9kZWYudXRpbCc7XG4iXX0=
|