@dereekb/dbx-form 9.21.0 → 9.22.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/calendar/lib/calendar.schedule.selection.range.component.d.ts +4 -4
- package/calendar/lib/field/schedule/calendar.schedule.field.component.d.ts +0 -1
- package/esm2020/calendar/lib/calendar.schedule.selection.popover.button.component.mjs +1 -1
- package/esm2020/calendar/lib/calendar.schedule.selection.popover.content.component.mjs +1 -1
- package/esm2020/calendar/lib/calendar.schedule.selection.range.component.mjs +13 -12
- package/esm2020/calendar/lib/field/schedule/calendar.schedule.field.component.mjs +4 -7
- package/esm2020/lib/formly/field/field.mjs +1 -1
- package/esm2020/lib/formly/field/selection/index.mjs +2 -1
- package/esm2020/lib/formly/field/selection/list/list.field.component.mjs +1 -1
- package/esm2020/lib/formly/field/selection/pickable/pickable.field.directive.mjs +5 -4
- package/esm2020/lib/formly/field/selection/pickable/pickable.field.mjs +5 -3
- package/esm2020/lib/formly/field/selection/searchable/searchable.field.directive.mjs +7 -6
- package/esm2020/lib/formly/field/selection/searchable/searchable.field.mjs +5 -3
- package/esm2020/lib/formly/field/selection/searchable/searchable.mjs +1 -1
- package/esm2020/lib/formly/field/selection/selection.field.mjs +3 -2
- package/esm2020/lib/formly/field/selection/selection.module.mjs +5 -4
- package/esm2020/lib/formly/field/selection/sourceselect/index.mjs +5 -0
- package/esm2020/lib/formly/field/selection/sourceselect/sourceselect.field.component.mjs +316 -0
- package/esm2020/lib/formly/field/selection/sourceselect/sourceselect.field.mjs +14 -0
- package/esm2020/lib/formly/field/selection/sourceselect/sourceselect.field.module.mjs +93 -0
- package/esm2020/lib/formly/field/selection/sourceselect/sourceselect.mjs +2 -0
- package/esm2020/lib/formly/field/texteditor/texteditor.field.mjs +3 -2
- package/esm2020/lib/formly/field/value/array/array.field.component.mjs +12 -10
- package/esm2020/lib/formly/field/value/boolean/boolean.field.mjs +11 -5
- package/esm2020/lib/formly/field/value/date/date.field.module.mjs +5 -1
- package/esm2020/lib/formly/field/value/date/datetime.field.component.mjs +11 -10
- package/esm2020/lib/formly/field/value/date/datetime.field.mjs +4 -2
- package/esm2020/lib/formly/field/value/number/number.field.mjs +3 -2
- package/esm2020/lib/formly/field/value/phone/phone.field.mjs +3 -2
- package/esm2020/lib/formly/field/value/text/text.field.mjs +5 -3
- package/esm2020/mapbox/lib/field/latlng/latlng.field.component.mjs +3 -3
- package/esm2020/mapbox/lib/field/zoom/zoom.field.component.mjs +3 -3
- package/fesm2015/dereekb-dbx-form-calendar.mjs +22 -24
- package/fesm2015/dereekb-dbx-form-calendar.mjs.map +1 -1
- package/fesm2015/dereekb-dbx-form-mapbox.mjs +4 -4
- package/fesm2015/dereekb-dbx-form-mapbox.mjs.map +1 -1
- package/fesm2015/dereekb-dbx-form.mjs +470 -87
- package/fesm2015/dereekb-dbx-form.mjs.map +1 -1
- package/fesm2020/dereekb-dbx-form-calendar.mjs +20 -23
- package/fesm2020/dereekb-dbx-form-calendar.mjs.map +1 -1
- package/fesm2020/dereekb-dbx-form-mapbox.mjs +4 -4
- package/fesm2020/dereekb-dbx-form-mapbox.mjs.map +1 -1
- package/fesm2020/dereekb-dbx-form.mjs +476 -59
- package/fesm2020/dereekb-dbx-form.mjs.map +1 -1
- package/lib/formly/_formly.scss +4 -0
- package/lib/formly/field/field.d.ts +4 -0
- package/lib/formly/field/selection/_selection.scss +4 -0
- package/lib/formly/field/selection/index.d.ts +1 -0
- package/lib/formly/field/selection/list/list.field.component.d.ts +1 -1
- package/lib/formly/field/selection/pickable/pickable.field.d.ts +2 -2
- package/lib/formly/field/selection/searchable/_searchable.scss +2 -0
- package/lib/formly/field/selection/searchable/searchable.d.ts +4 -4
- package/lib/formly/field/selection/searchable/searchable.field.d.ts +3 -3
- package/lib/formly/field/selection/searchable/searchable.field.directive.d.ts +1 -1
- package/lib/formly/field/selection/selection.field.d.ts +11 -2
- package/lib/formly/field/selection/selection.module.d.ts +2 -1
- package/lib/formly/field/selection/sourceselect/_sourceselect.scss +54 -0
- package/lib/formly/field/selection/sourceselect/index.d.ts +4 -0
- package/lib/formly/field/selection/sourceselect/sourceselect.d.ts +97 -0
- package/lib/formly/field/selection/sourceselect/sourceselect.field.component.d.ts +92 -0
- package/lib/formly/field/selection/sourceselect/sourceselect.field.d.ts +7 -0
- package/lib/formly/field/selection/sourceselect/sourceselect.field.module.d.ts +23 -0
- package/lib/formly/field/texteditor/texteditor.field.d.ts +2 -2
- package/lib/formly/field/value/array/_array.scss +6 -2
- package/lib/formly/field/value/boolean/boolean.field.d.ts +3 -3
- package/lib/formly/field/value/date/_date.scss +8 -2
- package/lib/formly/field/value/date/date.field.module.d.ts +12 -11
- package/lib/formly/field/value/date/datetime.field.d.ts +2 -2
- package/lib/formly/field/value/number/number.field.d.ts +2 -2
- package/lib/formly/field/value/text/text.field.d.ts +3 -3
- package/mapbox/esm2020/lib/field/latlng/latlng.field.component.mjs +3 -3
- package/mapbox/esm2020/lib/field/zoom/zoom.field.component.mjs +3 -3
- package/mapbox/fesm2015/dereekb-dbx-form-mapbox.mjs +4 -4
- package/mapbox/fesm2015/dereekb-dbx-form-mapbox.mjs.map +1 -1
- package/mapbox/fesm2020/dereekb-dbx-form-mapbox.mjs +4 -4
- package/mapbox/fesm2020/dereekb-dbx-form-mapbox.mjs.map +1 -1
- package/mapbox/package.json +4 -4
- package/package.json +4 -4
|
@@ -3,18 +3,19 @@ import { CommonModule } from '@angular/common';
|
|
|
3
3
|
import { DbxFormFormlyPickableFieldModule } from './pickable/pickable.field.module';
|
|
4
4
|
import { DbxFormFormlySearchableFieldModule } from './searchable/searchable.field.module';
|
|
5
5
|
import { DbxFormFormlyDbxListFieldModule } from './list/list.field.module';
|
|
6
|
+
import { DbxFormFormlySourceSelectModule } from './sourceselect/sourceselect.field.module';
|
|
6
7
|
import * as i0 from "@angular/core";
|
|
7
8
|
export class DbxFormFormlySelectionModule {
|
|
8
9
|
}
|
|
9
10
|
DbxFormFormlySelectionModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: DbxFormFormlySelectionModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
10
|
-
DbxFormFormlySelectionModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "14.2.12", ngImport: i0, type: DbxFormFormlySelectionModule, imports: [CommonModule], exports: [DbxFormFormlyDbxListFieldModule, DbxFormFormlyPickableFieldModule, DbxFormFormlySearchableFieldModule] });
|
|
11
|
-
DbxFormFormlySelectionModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: DbxFormFormlySelectionModule, imports: [CommonModule, DbxFormFormlyDbxListFieldModule, DbxFormFormlyPickableFieldModule, DbxFormFormlySearchableFieldModule] });
|
|
11
|
+
DbxFormFormlySelectionModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "14.2.12", ngImport: i0, type: DbxFormFormlySelectionModule, imports: [CommonModule], exports: [DbxFormFormlyDbxListFieldModule, DbxFormFormlyPickableFieldModule, DbxFormFormlySearchableFieldModule, DbxFormFormlySourceSelectModule] });
|
|
12
|
+
DbxFormFormlySelectionModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: DbxFormFormlySelectionModule, imports: [CommonModule, DbxFormFormlyDbxListFieldModule, DbxFormFormlyPickableFieldModule, DbxFormFormlySearchableFieldModule, DbxFormFormlySourceSelectModule] });
|
|
12
13
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: DbxFormFormlySelectionModule, decorators: [{
|
|
13
14
|
type: NgModule,
|
|
14
15
|
args: [{
|
|
15
16
|
imports: [CommonModule],
|
|
16
17
|
declarations: [],
|
|
17
|
-
exports: [DbxFormFormlyDbxListFieldModule, DbxFormFormlyPickableFieldModule, DbxFormFormlySearchableFieldModule]
|
|
18
|
+
exports: [DbxFormFormlyDbxListFieldModule, DbxFormFormlyPickableFieldModule, DbxFormFormlySearchableFieldModule, DbxFormFormlySourceSelectModule]
|
|
18
19
|
}]
|
|
19
20
|
}] });
|
|
20
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
21
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0aW9uLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2RieC1mb3JtL3NyYy9saWIvZm9ybWx5L2ZpZWxkL3NlbGVjdGlvbi9zZWxlY3Rpb24ubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxnQ0FBZ0MsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ3BGLE9BQU8sRUFBRSxrQ0FBa0MsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQzFGLE9BQU8sRUFBRSwrQkFBK0IsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzNFLE9BQU8sRUFBRSwrQkFBK0IsRUFBRSxNQUFNLDBDQUEwQyxDQUFDOztBQU8zRixNQUFNLE9BQU8sNEJBQTRCOzswSEFBNUIsNEJBQTRCOzJIQUE1Qiw0QkFBNEIsWUFKN0IsWUFBWSxhQUVaLCtCQUErQixFQUFFLGdDQUFnQyxFQUFFLGtDQUFrQyxFQUFFLCtCQUErQjsySEFFckksNEJBQTRCLFlBSjdCLFlBQVksRUFFWiwrQkFBK0IsRUFBRSxnQ0FBZ0MsRUFBRSxrQ0FBa0MsRUFBRSwrQkFBK0I7NEZBRXJJLDRCQUE0QjtrQkFMeEMsUUFBUTttQkFBQztvQkFDUixPQUFPLEVBQUUsQ0FBQyxZQUFZLENBQUM7b0JBQ3ZCLFlBQVksRUFBRSxFQUFFO29CQUNoQixPQUFPLEVBQUUsQ0FBQywrQkFBK0IsRUFBRSxnQ0FBZ0MsRUFBRSxrQ0FBa0MsRUFBRSwrQkFBK0IsQ0FBQztpQkFDbEoiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IERieEZvcm1Gb3JtbHlQaWNrYWJsZUZpZWxkTW9kdWxlIH0gZnJvbSAnLi9waWNrYWJsZS9waWNrYWJsZS5maWVsZC5tb2R1bGUnO1xuaW1wb3J0IHsgRGJ4Rm9ybUZvcm1seVNlYXJjaGFibGVGaWVsZE1vZHVsZSB9IGZyb20gJy4vc2VhcmNoYWJsZS9zZWFyY2hhYmxlLmZpZWxkLm1vZHVsZSc7XG5pbXBvcnQgeyBEYnhGb3JtRm9ybWx5RGJ4TGlzdEZpZWxkTW9kdWxlIH0gZnJvbSAnLi9saXN0L2xpc3QuZmllbGQubW9kdWxlJztcbmltcG9ydCB7IERieEZvcm1Gb3JtbHlTb3VyY2VTZWxlY3RNb2R1bGUgfSBmcm9tICcuL3NvdXJjZXNlbGVjdC9zb3VyY2VzZWxlY3QuZmllbGQubW9kdWxlJztcblxuQE5nTW9kdWxlKHtcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZV0sXG4gIGRlY2xhcmF0aW9uczogW10sXG4gIGV4cG9ydHM6IFtEYnhGb3JtRm9ybWx5RGJ4TGlzdEZpZWxkTW9kdWxlLCBEYnhGb3JtRm9ybWx5UGlja2FibGVGaWVsZE1vZHVsZSwgRGJ4Rm9ybUZvcm1seVNlYXJjaGFibGVGaWVsZE1vZHVsZSwgRGJ4Rm9ybUZvcm1seVNvdXJjZVNlbGVjdE1vZHVsZV1cbn0pXG5leHBvcnQgY2xhc3MgRGJ4Rm9ybUZvcm1seVNlbGVjdGlvbk1vZHVsZSB7fVxuIl19
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export * from './sourceselect.field.component';
|
|
2
|
+
export * from './sourceselect.field';
|
|
3
|
+
export * from './sourceselect.field.module';
|
|
4
|
+
export * from './sourceselect';
|
|
5
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9kYngtZm9ybS9zcmMvbGliL2Zvcm1seS9maWVsZC9zZWxlY3Rpb24vc291cmNlc2VsZWN0L2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsZ0NBQWdDLENBQUM7QUFDL0MsY0FBYyxzQkFBc0IsQ0FBQztBQUNyQyxjQUFjLDZCQUE2QixDQUFDO0FBQzVDLGNBQWMsZ0JBQWdCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL3NvdXJjZXNlbGVjdC5maWVsZC5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9zb3VyY2VzZWxlY3QuZmllbGQnO1xuZXhwb3J0ICogZnJvbSAnLi9zb3VyY2VzZWxlY3QuZmllbGQubW9kdWxlJztcbmV4cG9ydCAqIGZyb20gJy4vc291cmNlc2VsZWN0JztcbiJdfQ==
|
|
@@ -0,0 +1,316 @@
|
|
|
1
|
+
import { filterMaybe, loadingStateHasValue, loadingStateIsLoading, startWithBeginLoading, SubscriptionObject, successResult, beginLoading, mapLoadingStateValueWithOperator, loadingStateContext, valueFromLoadingState } from '@dereekb/rxjs';
|
|
2
|
+
import { Component } from '@angular/core';
|
|
3
|
+
import { distinctUntilChanged, map, switchMap, shareReplay, startWith, mergeMap, scan, BehaviorSubject, tap, first, combineLatest, of } from 'rxjs';
|
|
4
|
+
import { addToSetCopy, asArray, convertMaybeToArray, filterMaybeValues, lastValue, makeValuesGroupMap, mergeArrays, separateValues, setContainsAllValues, setsAreEquivalent, sortByStringFunction } from '@dereekb/util';
|
|
5
|
+
import { FieldType } from '@ngx-formly/material/form-field';
|
|
6
|
+
import * as i0 from "@angular/core";
|
|
7
|
+
import * as i1 from "@angular/common";
|
|
8
|
+
import * as i2 from "@angular/forms";
|
|
9
|
+
import * as i3 from "@angular/material/select";
|
|
10
|
+
import * as i4 from "@angular/material/core";
|
|
11
|
+
import * as i5 from "@dereekb/dbx-web";
|
|
12
|
+
import * as i6 from "@dereekb/dbx-core";
|
|
13
|
+
/**
|
|
14
|
+
* Component that displays a select view (multi or not)
|
|
15
|
+
*/
|
|
16
|
+
export class DbxFormSourceSelectFieldComponent extends FieldType {
|
|
17
|
+
constructor() {
|
|
18
|
+
super(...arguments);
|
|
19
|
+
this._cacheMetaSub = new SubscriptionObject();
|
|
20
|
+
this._clearDisplayHashMapSub = new SubscriptionObject();
|
|
21
|
+
this._valueMetaHashMap = new BehaviorSubject(new Map());
|
|
22
|
+
this._displayHashMap = new BehaviorSubject(new Map());
|
|
23
|
+
this._formControlObs = new BehaviorSubject(undefined);
|
|
24
|
+
this._fromOpenSource = new BehaviorSubject({ values: [], valuesSet: new Set() });
|
|
25
|
+
this._loadSources = new BehaviorSubject(undefined);
|
|
26
|
+
this.formControl$ = this._formControlObs.pipe(filterMaybe());
|
|
27
|
+
this.currentFormControlValue$ = this.formControl$.pipe(switchMap((control) => control.valueChanges.pipe(startWith(control.value))), shareReplay(1));
|
|
28
|
+
this.values$ = this.currentFormControlValue$.pipe(map(convertMaybeToArray), shareReplay(1));
|
|
29
|
+
this.allValuesEverSelected$ = this.values$.pipe(scan((acc, values) => {
|
|
30
|
+
let result = acc;
|
|
31
|
+
if (!setContainsAllValues(acc, values)) {
|
|
32
|
+
result = addToSetCopy(acc, values);
|
|
33
|
+
}
|
|
34
|
+
return result;
|
|
35
|
+
}, new Set()), distinctUntilChanged(), map((x) => Array.from(x)), shareReplay(1));
|
|
36
|
+
this.sourceSelectValuesFromValuesState$ = this.allValuesEverSelected$.pipe(distinctUntilChanged(), switchMap((values) => this.loadSourceSelectValueForValues(values)), shareReplay(1));
|
|
37
|
+
this.loadSources$ = this._loadSources.pipe(filterMaybe(), switchMap((loadSource) => {
|
|
38
|
+
const { valueReader } = this;
|
|
39
|
+
return loadSource.pipe(switchMap((sources) => {
|
|
40
|
+
const sourceObs = sources.map((x) => x.meta.pipe(map((metaState) => ({ ...metaState, label: x.label }))));
|
|
41
|
+
if (sourceObs.length === 0) {
|
|
42
|
+
return of(successResult([]));
|
|
43
|
+
}
|
|
44
|
+
else {
|
|
45
|
+
return combineLatest(sourceObs).pipe(map((x) => {
|
|
46
|
+
const statesWithValues = x.filter((y) => loadingStateHasValue(y));
|
|
47
|
+
const loading = x.findIndex(loadingStateIsLoading) !== -1;
|
|
48
|
+
const value = statesWithValues.map((y) => {
|
|
49
|
+
const group = {
|
|
50
|
+
label: y.label,
|
|
51
|
+
values: y.value.map((meta) => ({ meta, value: valueReader(meta) }))
|
|
52
|
+
};
|
|
53
|
+
return group;
|
|
54
|
+
});
|
|
55
|
+
return {
|
|
56
|
+
loading,
|
|
57
|
+
value
|
|
58
|
+
};
|
|
59
|
+
}));
|
|
60
|
+
}
|
|
61
|
+
}));
|
|
62
|
+
}));
|
|
63
|
+
this.fromOpenSource$ = this._fromOpenSource.pipe(distinctUntilChanged((a, b) => setsAreEquivalent(a.valuesSet, b.valuesSet)), map((x) => {
|
|
64
|
+
const group = {
|
|
65
|
+
label: '',
|
|
66
|
+
values: x.values
|
|
67
|
+
};
|
|
68
|
+
return group;
|
|
69
|
+
}), shareReplay(1));
|
|
70
|
+
this.valueGroupsFromSourcesState$ = combineLatest([this.fromOpenSource$, this.loadSources$]).pipe(map(([fromOpenSourceGroup, loadSources]) => {
|
|
71
|
+
const loadSourcesValue = loadSources.value ?? [];
|
|
72
|
+
const value = [fromOpenSourceGroup, ...loadSourcesValue];
|
|
73
|
+
const result = {
|
|
74
|
+
loading: loadSources.loading,
|
|
75
|
+
value
|
|
76
|
+
};
|
|
77
|
+
return result;
|
|
78
|
+
}), shareReplay(1));
|
|
79
|
+
this.allValueGroupsState$ = this.sourceSelectValuesFromValuesState$.pipe(switchMap((sourceSelectValuesFromValues) => {
|
|
80
|
+
if (loadingStateHasValue(sourceSelectValuesFromValues)) {
|
|
81
|
+
const valuesFromValuesGroup = {
|
|
82
|
+
label: '',
|
|
83
|
+
values: sourceSelectValuesFromValues.value
|
|
84
|
+
};
|
|
85
|
+
return this.valueGroupsFromSourcesState$.pipe(map((sourcesState) => {
|
|
86
|
+
const allGroups = [valuesFromValuesGroup, ...sourcesState.value];
|
|
87
|
+
const result = {
|
|
88
|
+
loading: sourceSelectValuesFromValues.loading || sourcesState.loading,
|
|
89
|
+
value: allGroups
|
|
90
|
+
};
|
|
91
|
+
return result;
|
|
92
|
+
}));
|
|
93
|
+
}
|
|
94
|
+
else {
|
|
95
|
+
return of(beginLoading({}));
|
|
96
|
+
}
|
|
97
|
+
}), shareReplay(1));
|
|
98
|
+
this.allOptionGroupsState$ = this.allValueGroupsState$.pipe(mapLoadingStateValueWithOperator(switchMap((groups) => {
|
|
99
|
+
const allGroupsReducedByLabel = makeValuesGroupMap(groups, (x) => x.label);
|
|
100
|
+
const valuesEncountered = new Set();
|
|
101
|
+
const allUniqueValues = [];
|
|
102
|
+
const simplifiedValuesGroups = [];
|
|
103
|
+
// sort to put the blank label first
|
|
104
|
+
Array.from(allGroupsReducedByLabel.entries())
|
|
105
|
+
.sort(sortByStringFunction((x) => x[0]))
|
|
106
|
+
.forEach(([label, groups]) => {
|
|
107
|
+
const values = [];
|
|
108
|
+
groups.forEach((group) => {
|
|
109
|
+
group.values.forEach((selectValue) => {
|
|
110
|
+
if (!valuesEncountered.has(selectValue.value)) {
|
|
111
|
+
values.push(selectValue);
|
|
112
|
+
allUniqueValues.push(selectValue);
|
|
113
|
+
valuesEncountered.add(selectValue.value);
|
|
114
|
+
}
|
|
115
|
+
});
|
|
116
|
+
});
|
|
117
|
+
if (values.length > 0) {
|
|
118
|
+
simplifiedValuesGroups.push({
|
|
119
|
+
label,
|
|
120
|
+
values
|
|
121
|
+
});
|
|
122
|
+
}
|
|
123
|
+
});
|
|
124
|
+
const obs = this.getDisplayValuesForSelectValues(allUniqueValues).pipe(map((displayValues) => {
|
|
125
|
+
const displayValuesMap = new Map(displayValues.map((x) => [x.value, x]));
|
|
126
|
+
const displayGroups = simplifiedValuesGroups.map((valueGroup) => {
|
|
127
|
+
const values = filterMaybeValues(valueGroup.values.map((x) => displayValuesMap.get(x.value)));
|
|
128
|
+
return {
|
|
129
|
+
label: valueGroup.label,
|
|
130
|
+
values
|
|
131
|
+
};
|
|
132
|
+
});
|
|
133
|
+
return displayGroups;
|
|
134
|
+
}));
|
|
135
|
+
return obs;
|
|
136
|
+
})), shareReplay(1));
|
|
137
|
+
this.allOptionGroups$ = this.allOptionGroupsState$.pipe(valueFromLoadingState(), shareReplay(1));
|
|
138
|
+
this.options$ = this.allOptionGroups$.pipe(map((x) => {
|
|
139
|
+
const { included: groupedValues, excluded: nonGroupedGroup } = separateValues(x, (y) => Boolean(y.label));
|
|
140
|
+
const result = {
|
|
141
|
+
nonGroupedValues: nonGroupedGroup[0]?.values ?? [],
|
|
142
|
+
groupedValues
|
|
143
|
+
};
|
|
144
|
+
return result;
|
|
145
|
+
}), shareReplay(1));
|
|
146
|
+
this.nonGroupedValues$ = this.options$.pipe(map((x) => x.nonGroupedValues));
|
|
147
|
+
this.groupedOptions$ = this.options$.pipe(map((x) => x.groupedValues));
|
|
148
|
+
this.context = loadingStateContext({ obs: this.allOptionGroupsState$ });
|
|
149
|
+
this.handleSelectOptions = (_, context) => {
|
|
150
|
+
const { openSource } = this;
|
|
151
|
+
if (openSource) {
|
|
152
|
+
const sourceObs = openSource();
|
|
153
|
+
context.startWorkingWithObservable(sourceObs.pipe(first(), tap((result) => {
|
|
154
|
+
const valuesToAdd = mergeArrays([result.select, result.options]);
|
|
155
|
+
if (valuesToAdd.length) {
|
|
156
|
+
this.addToOpenSourceMap(valuesToAdd);
|
|
157
|
+
}
|
|
158
|
+
if (result.select) {
|
|
159
|
+
this.addToCurrentValue(result.select.map((x) => this.valueReader(x)));
|
|
160
|
+
}
|
|
161
|
+
})));
|
|
162
|
+
}
|
|
163
|
+
else {
|
|
164
|
+
context.reject();
|
|
165
|
+
}
|
|
166
|
+
};
|
|
167
|
+
}
|
|
168
|
+
get sourceSelectField() {
|
|
169
|
+
return this.props;
|
|
170
|
+
}
|
|
171
|
+
get openSource() {
|
|
172
|
+
return this.props.openSource;
|
|
173
|
+
}
|
|
174
|
+
get showOpenSourceButton() {
|
|
175
|
+
return Boolean(this.openSource);
|
|
176
|
+
}
|
|
177
|
+
get loadSources() {
|
|
178
|
+
return this.props.loadSources;
|
|
179
|
+
}
|
|
180
|
+
get valueReader() {
|
|
181
|
+
return this.props.valueReader;
|
|
182
|
+
}
|
|
183
|
+
get metaLoader() {
|
|
184
|
+
return this.props.metaLoader;
|
|
185
|
+
}
|
|
186
|
+
get displayForValue() {
|
|
187
|
+
return this.props.displayForValue;
|
|
188
|
+
}
|
|
189
|
+
get selectButtonIcon() {
|
|
190
|
+
return this.props.selectButtonIcon ?? 'add';
|
|
191
|
+
}
|
|
192
|
+
get multiple() {
|
|
193
|
+
return this.props.multiple || false;
|
|
194
|
+
}
|
|
195
|
+
get refreshDisplayValues$() {
|
|
196
|
+
return this.props.refreshDisplayValues$;
|
|
197
|
+
}
|
|
198
|
+
loadSourceSelectValueForValues(values) {
|
|
199
|
+
return this.getSourceSelectValueForValues(values).pipe(map((sourceSelectValues) => successResult(sourceSelectValues)), startWithBeginLoading(), shareReplay(1));
|
|
200
|
+
}
|
|
201
|
+
getSourceSelectValueForValues(values) {
|
|
202
|
+
const { valueReader } = this;
|
|
203
|
+
return this._valueMetaHashMap.pipe(mergeMap((metaMap) => {
|
|
204
|
+
const mappingResult = values.map((hash, i) => [i, hash, metaMap.get(hash)]);
|
|
205
|
+
const {
|
|
206
|
+
//
|
|
207
|
+
included: hasMeta, excluded: needsMeta } = separateValues(mappingResult, (x) => Boolean(x[2]));
|
|
208
|
+
let obs;
|
|
209
|
+
if (needsMeta.length > 0) {
|
|
210
|
+
// Go get the meta value.
|
|
211
|
+
const metaValuesObs = this.metaLoader(needsMeta.map((x) => x[1]));
|
|
212
|
+
obs = metaValuesObs.pipe(first(), map((metaResults) => {
|
|
213
|
+
const metaResultsMapping = metaResults.map((meta) => ({ meta, value: valueReader(meta) }));
|
|
214
|
+
const valueIndexHashMap = new Map(metaResultsMapping.map((x) => [x.value, x]));
|
|
215
|
+
// Update metaMap. No need to push an update notification.
|
|
216
|
+
metaResultsMapping.forEach((x) => metaMap.set(x.value, x));
|
|
217
|
+
// Zip values back together.
|
|
218
|
+
const newDisplayValues = mappingResult.map((x) => x[2] ?? valueIndexHashMap.get(x[1]));
|
|
219
|
+
// Return display values.
|
|
220
|
+
return newDisplayValues;
|
|
221
|
+
}));
|
|
222
|
+
}
|
|
223
|
+
else {
|
|
224
|
+
// If all display values are hashed return them
|
|
225
|
+
obs = of(hasMeta.map((x) => x[2]));
|
|
226
|
+
}
|
|
227
|
+
return obs;
|
|
228
|
+
}));
|
|
229
|
+
}
|
|
230
|
+
loadDisplayValuesForSelectValues(values) {
|
|
231
|
+
return this.getDisplayValuesForSelectValues(values).pipe(map((displayValues) => successResult(displayValues)), startWithBeginLoading(), shareReplay(1));
|
|
232
|
+
}
|
|
233
|
+
getDisplayValuesForSelectValues(values) {
|
|
234
|
+
return this._displayHashMap.pipe(mergeMap((metaMap) => {
|
|
235
|
+
const mappingResult = values.map((x) => [x, x.value]).map(([x, hash], i) => [i, hash, x, metaMap.get(hash)]);
|
|
236
|
+
const hasDisplay = mappingResult.filter((x) => Boolean(x[3]));
|
|
237
|
+
const needsDisplay = mappingResult.filter((x) => !x[3]);
|
|
238
|
+
let obs;
|
|
239
|
+
if (needsDisplay.length > 0) {
|
|
240
|
+
// Go get the display value.
|
|
241
|
+
const displayValuesObs = this.displayForValue(needsDisplay.map((x) => x[2]));
|
|
242
|
+
obs = displayValuesObs.pipe(first(), map((displayResults) => {
|
|
243
|
+
const displayResultsMapping = displayResults.map((x) => [x, x.value]);
|
|
244
|
+
const valueIndexHashMap = new Map(displayResultsMapping.map(([x, hash]) => [hash, x]));
|
|
245
|
+
// Update metaMap. No need to push an update notification.
|
|
246
|
+
displayResultsMapping.forEach(([x, hash]) => metaMap.set(hash, x));
|
|
247
|
+
// Zip values back together.
|
|
248
|
+
const newDisplayValues = mappingResult.map((x) => x[3] ?? valueIndexHashMap.get(x[1]));
|
|
249
|
+
// Return display values.
|
|
250
|
+
return newDisplayValues;
|
|
251
|
+
}));
|
|
252
|
+
}
|
|
253
|
+
else {
|
|
254
|
+
// If all display values are hashed return that.
|
|
255
|
+
obs = of(hasDisplay.map((x) => x[3]));
|
|
256
|
+
}
|
|
257
|
+
return obs;
|
|
258
|
+
}));
|
|
259
|
+
}
|
|
260
|
+
ngOnInit() {
|
|
261
|
+
const { loadSources } = this;
|
|
262
|
+
this._loadSources.next(loadSources?.() || of([]));
|
|
263
|
+
if (this.refreshDisplayValues$ != null) {
|
|
264
|
+
this._clearDisplayHashMapSub.subscription = this.refreshDisplayValues$.subscribe(() => this._displayHashMap.next(new Map()));
|
|
265
|
+
}
|
|
266
|
+
this._formControlObs.next(this.formControl);
|
|
267
|
+
// copy all values from the sources into the values hash map to prevent reloading
|
|
268
|
+
this._cacheMetaSub.subscription = this.valueGroupsFromSourcesState$.subscribe((x) => {
|
|
269
|
+
const hashMap = this._valueMetaHashMap.value;
|
|
270
|
+
x.value.forEach((x) => x.values.forEach((y) => hashMap.set(y.value, y)));
|
|
271
|
+
});
|
|
272
|
+
}
|
|
273
|
+
ngOnDestroy() {
|
|
274
|
+
super.ngOnDestroy();
|
|
275
|
+
this._valueMetaHashMap.complete();
|
|
276
|
+
this._displayHashMap.complete();
|
|
277
|
+
this._formControlObs.complete();
|
|
278
|
+
this._fromOpenSource.complete();
|
|
279
|
+
this._loadSources.complete();
|
|
280
|
+
this.context.destroy();
|
|
281
|
+
}
|
|
282
|
+
addToOpenSourceMap(input) {
|
|
283
|
+
const { valueReader } = this;
|
|
284
|
+
const { values: meta, valuesSet: initialValues } = this._fromOpenSource.value;
|
|
285
|
+
const newMetaFromInput = [];
|
|
286
|
+
const valuesSet = new Set(initialValues);
|
|
287
|
+
input.forEach((x) => {
|
|
288
|
+
const value = valueReader(x);
|
|
289
|
+
if (!valuesSet.has(value)) {
|
|
290
|
+
newMetaFromInput.push({ meta: x, value });
|
|
291
|
+
valuesSet.add(value);
|
|
292
|
+
}
|
|
293
|
+
});
|
|
294
|
+
if (newMetaFromInput.length > 0) {
|
|
295
|
+
this._fromOpenSource.next({
|
|
296
|
+
values: [...meta, ...newMetaFromInput],
|
|
297
|
+
valuesSet: valuesSet
|
|
298
|
+
});
|
|
299
|
+
}
|
|
300
|
+
}
|
|
301
|
+
addToCurrentValue(values) {
|
|
302
|
+
const currentValue = asArray(this.formControl.value);
|
|
303
|
+
const newValueArray = [...currentValue, ...values];
|
|
304
|
+
const value = this.multiple ? values : lastValue(newValueArray); // pick last value, as the last value added is the newest value.
|
|
305
|
+
this.formControl.setValue(value);
|
|
306
|
+
this.formControl.markAsDirty();
|
|
307
|
+
this.formControl.markAsTouched();
|
|
308
|
+
}
|
|
309
|
+
}
|
|
310
|
+
DbxFormSourceSelectFieldComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: DbxFormSourceSelectFieldComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
|
|
311
|
+
DbxFormSourceSelectFieldComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.12", type: DbxFormSourceSelectFieldComponent, selector: "ng-component", usesInheritance: true, ngImport: i0, template: "<div class=\"dbx-source-select-field\">\n <div class=\"dbx-source-select-field-content\">\n <mat-select class=\"dbx-source-select-field-select\" [id]=\"id\" [formControl]=\"formControl\" [multiple]=\"props.multiple\">\n <mat-option *ngFor=\"let value of nonGroupedValues$ | async\" [value]=\"value.value\">\n {{ value.label }}\n </mat-option>\n <mat-optgroup *ngFor=\"let optionGroup of groupedOptions$ | async\" [label]=\"optionGroup.label\">\n <mat-option *ngFor=\"let value of optionGroup.values\" [value]=\"value.value\">\n {{ value.label }}\n </mat-option>\n </mat-optgroup>\n </mat-select>\n <ng-container *ngIf=\"showOpenSourceButton\">\n <dbx-button-spacer></dbx-button-spacer>\n <dbx-action dbxActionValue [dbxActionHandler]=\"handleSelectOptions\" class=\"dbx-source-select-field-button\">\n <dbx-button dbxActionButton [iconOnly]=\"true\" [icon]=\"selectButtonIcon\"></dbx-button>\n </dbx-action>\n </ng-container>\n </div>\n <dbx-loading class=\"dbx-source-select-field-loading\" [linear]=\"true\" [context]=\"context\"></dbx-loading>\n</div>\n", dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "component", type: i3.MatSelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex"], exportAs: ["matSelect"] }, { kind: "component", type: i4.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { kind: "component", type: i4.MatOptgroup, selector: "mat-optgroup", inputs: ["disabled"], exportAs: ["matOptgroup"] }, { kind: "directive", type: i2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "component", type: i5.DbxLoadingComponent, selector: "dbx-loading", inputs: ["show", "text", "mode", "color", "diameter", "linear", "context", "loading", "error"] }, { kind: "directive", type: i6.DbxActionButtonDirective, selector: "[dbxActionButton]" }, { kind: "component", type: i5.DbxButtonComponent, selector: "dbx-button", inputs: ["type", "raised", "stroked", "flat", "iconOnly", "color", "customButtonColor", "customTextColor", "customSpinnerColor"] }, { kind: "directive", type: i5.DbxButtonSpacerDirective, selector: "dbx-button-spacer,[dbxButtonSpacer]" }, { kind: "directive", type: i6.DbxActionDirective, selector: "dbx-action,[dbxAction],dbx-action-context,[dbxActionContext]", exportAs: ["action", "dbxAction"] }, { kind: "directive", type: i6.DbxActionHandlerDirective, selector: "[dbxActionHandler]", inputs: ["dbxActionHandler"] }, { kind: "directive", type: i6.DbxActionValueDirective, selector: "[dbxActionValue]", inputs: ["dbxActionValue"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }] });
|
|
312
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: DbxFormSourceSelectFieldComponent, decorators: [{
|
|
313
|
+
type: Component,
|
|
314
|
+
args: [{ template: "<div class=\"dbx-source-select-field\">\n <div class=\"dbx-source-select-field-content\">\n <mat-select class=\"dbx-source-select-field-select\" [id]=\"id\" [formControl]=\"formControl\" [multiple]=\"props.multiple\">\n <mat-option *ngFor=\"let value of nonGroupedValues$ | async\" [value]=\"value.value\">\n {{ value.label }}\n </mat-option>\n <mat-optgroup *ngFor=\"let optionGroup of groupedOptions$ | async\" [label]=\"optionGroup.label\">\n <mat-option *ngFor=\"let value of optionGroup.values\" [value]=\"value.value\">\n {{ value.label }}\n </mat-option>\n </mat-optgroup>\n </mat-select>\n <ng-container *ngIf=\"showOpenSourceButton\">\n <dbx-button-spacer></dbx-button-spacer>\n <dbx-action dbxActionValue [dbxActionHandler]=\"handleSelectOptions\" class=\"dbx-source-select-field-button\">\n <dbx-button dbxActionButton [iconOnly]=\"true\" [icon]=\"selectButtonIcon\"></dbx-button>\n </dbx-action>\n </ng-container>\n </div>\n <dbx-loading class=\"dbx-source-select-field-loading\" [linear]=\"true\" [context]=\"context\"></dbx-loading>\n</div>\n" }]
|
|
315
|
+
}] });
|
|
316
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic291cmNlc2VsZWN0LmZpZWxkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2RieC1mb3JtL3NyYy9saWIvZm9ybWx5L2ZpZWxkL3NlbGVjdGlvbi9zb3VyY2VzZWxlY3Qvc291cmNlc2VsZWN0LmZpZWxkLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2RieC1mb3JtL3NyYy9saWIvZm9ybWx5L2ZpZWxkL3NlbGVjdGlvbi9zb3VyY2VzZWxlY3Qvc291cmNlc2VsZWN0LmZpZWxkLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxXQUFXLEVBQWdCLG9CQUFvQixFQUFFLHFCQUFxQixFQUFnQyxxQkFBcUIsRUFBRSxrQkFBa0IsRUFBRSxhQUFhLEVBQUUsWUFBWSxFQUFFLGdDQUFnQyxFQUFFLG1CQUFtQixFQUFFLHFCQUFxQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNSLE9BQU8sRUFBRSxTQUFTLEVBQXFCLE1BQU0sZUFBZSxDQUFDO0FBQzdELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxlQUFlLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBYyxhQUFhLEVBQUUsRUFBRSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRWhLLE9BQU8sRUFBRSxZQUFZLEVBQUUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLGlCQUFpQixFQUFFLFNBQVMsRUFBRSxrQkFBa0IsRUFBUyxXQUFXLEVBQWdCLGNBQWMsRUFBRSxvQkFBb0IsRUFBRSxpQkFBaUIsRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM5TyxPQUFPLEVBQUUsU0FBUyxFQUFvQixNQUFNLGlDQUFpQyxDQUFDOzs7Ozs7OztBQTZDOUU7O0dBRUc7QUFJSCxNQUFNLE9BQU8saUNBQXNGLFNBQVEsU0FBd0Q7SUFIbks7O1FBSVUsa0JBQWEsR0FBRyxJQUFJLGtCQUFrQixFQUFFLENBQUM7UUFDekMsNEJBQXVCLEdBQUcsSUFBSSxrQkFBa0IsRUFBRSxDQUFDO1FBQ25ELHNCQUFpQixHQUFHLElBQUksZUFBZSxDQUFrQyxJQUFJLEdBQUcsRUFBRSxDQUFDLENBQUM7UUFDcEYsb0JBQWUsR0FBRyxJQUFJLGVBQWUsQ0FBeUMsSUFBSSxHQUFHLEVBQUUsQ0FBQyxDQUFDO1FBRXpGLG9CQUFlLEdBQUcsSUFBSSxlQUFlLENBQThCLFNBQVMsQ0FBQyxDQUFDO1FBQzlFLG9CQUFlLEdBQUcsSUFBSSxlQUFlLENBQWlDLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxTQUFTLEVBQUUsSUFBSSxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDNUcsaUJBQVksR0FBRyxJQUFJLGVBQWUsQ0FBaUQsU0FBUyxDQUFDLENBQUM7UUFFN0YsaUJBQVksR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO1FBRXhELDZCQUF3QixHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUN4RCxTQUFTLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUMzRSxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQ2YsQ0FBQztRQUVPLFlBQU8sR0FBb0IsSUFBSSxDQUFDLHdCQUF3QixDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsbUJBQW1CLENBQUMsRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUV4RywyQkFBc0IsR0FBb0IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQ2xFLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsRUFBRTtZQUNuQixJQUFJLE1BQU0sR0FBVyxHQUFHLENBQUM7WUFFekIsSUFBSSxDQUFDLG9CQUFvQixDQUFDLEdBQUcsRUFBRSxNQUFNLENBQUMsRUFBRTtnQkFDdEMsTUFBTSxHQUFHLFlBQVksQ0FBQyxHQUFHLEVBQUUsTUFBTSxDQUFDLENBQUM7YUFDcEM7WUFFRCxPQUFPLE1BQU0sQ0FBQztRQUNoQixDQUFDLEVBQUUsSUFBSSxHQUFHLEVBQUssQ0FBQyxFQUNoQixvQkFBb0IsRUFBRSxFQUN0QixHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFDekIsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUNmLENBQUM7UUFFTyx1Q0FBa0MsR0FBd0QsSUFBSSxDQUFDLHNCQUFzQixDQUFDLElBQUksQ0FDakksb0JBQW9CLEVBQUUsRUFDdEIsU0FBUyxDQUFDLENBQUMsTUFBVyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsOEJBQThCLENBQUMsTUFBTSxDQUFDLENBQUMsRUFDdkUsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUNmLENBQUM7UUFFTyxpQkFBWSxHQUE2RCxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FDdEcsV0FBVyxFQUFFLEVBQ2IsU0FBUyxDQUFDLENBQUMsVUFBVSxFQUFFLEVBQUU7WUFDdkIsTUFBTSxFQUFFLFdBQVcsRUFBRSxHQUFHLElBQUksQ0FBQztZQUU3QixPQUFPLFVBQVUsQ0FBQyxJQUFJLENBQ3BCLFNBQVMsQ0FBQyxDQUFDLE9BQW9DLEVBQUUsRUFBRTtnQkFDakQsTUFBTSxTQUFTLEdBQXdELE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsU0FBUyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFFL0osSUFBSSxTQUFTLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtvQkFDMUIsT0FBTyxFQUFFLENBQUMsYUFBYSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7aUJBQzlCO3FCQUFNO29CQUNMLE9BQU8sYUFBYSxDQUFDLFNBQVMsQ0FBQyxDQUFDLElBQUksQ0FDbEMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7d0JBQ1IsTUFBTSxnQkFBZ0IsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO3dCQUNsRSxNQUFNLE9BQU8sR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLHFCQUFxQixDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7d0JBQzFELE1BQU0sS0FBSyxHQUFtQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTs0QkFDdkUsTUFBTSxLQUFLLEdBQWlDO2dDQUMxQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUs7Z0NBQ2QsTUFBTSxFQUFHLENBQUMsQ0FBQyxLQUFhLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxXQUFXLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDOzZCQUM3RSxDQUFDOzRCQUVGLE9BQU8sS0FBSyxDQUFDO3dCQUNmLENBQUMsQ0FBQyxDQUFDO3dCQUVILE9BQU87NEJBQ0wsT0FBTzs0QkFDUCxLQUFLO3lCQUNOLENBQUM7b0JBQ0osQ0FBQyxDQUFDLENBQ0gsQ0FBQztpQkFDSDtZQUNILENBQUMsQ0FBQyxDQUNILENBQUM7UUFDSixDQUFDLENBQUMsQ0FDSCxDQUFDO1FBRU8sb0JBQWUsR0FBNkMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQzVGLG9CQUFvQixDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsRUFDM0UsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7WUFDUixNQUFNLEtBQUssR0FBaUM7Z0JBQzFDLEtBQUssRUFBRSxFQUFFO2dCQUNULE1BQU0sRUFBRSxDQUFDLENBQUMsTUFBTTthQUNqQixDQUFDO1lBRUYsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDLENBQUMsRUFDRixXQUFXLENBQUMsQ0FBQyxDQUFDLENBQ2YsQ0FBQztRQUVPLGlDQUE0QixHQUE2RSxhQUFhLENBQUMsQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FDN0ssR0FBRyxDQUFDLENBQUMsQ0FBQyxtQkFBbUIsRUFBRSxXQUFXLENBQUMsRUFBRSxFQUFFO1lBQ3pDLE1BQU0sZ0JBQWdCLEdBQUcsV0FBVyxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUM7WUFDakQsTUFBTSxLQUFLLEdBQW1DLENBQUMsbUJBQW1CLEVBQUUsR0FBRyxnQkFBZ0IsQ0FBQyxDQUFDO1lBRXpGLE1BQU0sTUFBTSxHQUFpRTtnQkFDM0UsT0FBTyxFQUFFLFdBQVcsQ0FBQyxPQUFPO2dCQUM1QixLQUFLO2FBQ04sQ0FBQztZQUVGLE9BQU8sTUFBTSxDQUFDO1FBQ2hCLENBQUMsQ0FBQyxFQUNGLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FDZixDQUFDO1FBRU8seUJBQW9CLEdBQTZELElBQUksQ0FBQyxrQ0FBa0MsQ0FBQyxJQUFJLENBQ3BJLFNBQVMsQ0FBQyxDQUFDLDRCQUFxRSxFQUFFLEVBQUU7WUFDbEYsSUFBSSxvQkFBb0IsQ0FBQyw0QkFBNEIsQ0FBQyxFQUFFO2dCQUN0RCxNQUFNLHFCQUFxQixHQUFpQztvQkFDMUQsS0FBSyxFQUFFLEVBQUU7b0JBQ1QsTUFBTSxFQUFFLDRCQUE0QixDQUFDLEtBQUs7aUJBQzNDLENBQUM7Z0JBRUYsT0FBTyxJQUFJLENBQUMsNEJBQTRCLENBQUMsSUFBSSxDQUMzQyxHQUFHLENBQUMsQ0FBQyxZQUFZLEVBQUUsRUFBRTtvQkFDbkIsTUFBTSxTQUFTLEdBQW1DLENBQUMscUJBQXFCLEVBQUUsR0FBRyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUM7b0JBRWpHLE1BQU0sTUFBTSxHQUFpRDt3QkFDM0QsT0FBTyxFQUFFLDRCQUE0QixDQUFDLE9BQU8sSUFBSSxZQUFZLENBQUMsT0FBTzt3QkFDckUsS0FBSyxFQUFFLFNBQVM7cUJBQ2pCLENBQUM7b0JBRUYsT0FBTyxNQUFNLENBQUM7Z0JBQ2hCLENBQUMsQ0FBQyxDQUNILENBQUM7YUFDSDtpQkFBTTtnQkFDTCxPQUFPLEVBQUUsQ0FBQyxZQUFZLENBQWlDLEVBQUUsQ0FBQyxDQUFDLENBQUM7YUFDN0Q7UUFDSCxDQUFDLENBQUMsRUFDRixXQUFXLENBQUMsQ0FBQyxDQUFDLENBQ2YsQ0FBQztRQUVPLDBCQUFxQixHQUFvRSxJQUFJLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUM5SCxnQ0FBZ0MsQ0FDOUIsU0FBUyxDQUFDLENBQUMsTUFBc0MsRUFBRSxFQUFFO1lBQ25ELE1BQU0sdUJBQXVCLEdBQUcsa0JBQWtCLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFnRCxDQUFDO1lBRTFILE1BQU0saUJBQWlCLEdBQUcsSUFBSSxHQUFHLEVBQUssQ0FBQztZQUN2QyxNQUFNLGVBQWUsR0FBOEIsRUFBRSxDQUFDO1lBRXRELE1BQU0sc0JBQXNCLEdBQW1DLEVBQUUsQ0FBQztZQUVsRSxvQ0FBb0M7WUFDcEMsS0FBSyxDQUFDLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxPQUFPLEVBQUUsQ0FBQztpQkFDMUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztpQkFDdkMsT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLEVBQUUsRUFBRTtnQkFDM0IsTUFBTSxNQUFNLEdBQThCLEVBQUUsQ0FBQztnQkFFN0MsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO29CQUN2QixLQUFLLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLFdBQVcsRUFBRSxFQUFFO3dCQUNuQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsRUFBRTs0QkFDN0MsTUFBTSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQzs0QkFDekIsZUFBZSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQzs0QkFDbEMsaUJBQWlCLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQzt5QkFDMUM7b0JBQ0gsQ0FBQyxDQUFDLENBQUM7Z0JBQ0wsQ0FBQyxDQUFDLENBQUM7Z0JBRUgsSUFBSSxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtvQkFDckIsc0JBQXNCLENBQUMsSUFBSSxDQUFDO3dCQUMxQixLQUFLO3dCQUNMLE1BQU07cUJBQ1AsQ0FBQyxDQUFDO2lCQUNKO1lBQ0gsQ0FBQyxDQUFDLENBQUM7WUFFTCxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsK0JBQStCLENBQUMsZUFBZSxDQUFDLENBQUMsSUFBSSxDQUNwRSxHQUFHLENBQUMsQ0FBQyxhQUFhLEVBQUUsRUFBRTtnQkFDcEIsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLEdBQUcsQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUV6RSxNQUFNLGFBQWEsR0FBMEMsc0JBQXNCLENBQUMsR0FBRyxDQUFDLENBQUMsVUFBVSxFQUFFLEVBQUU7b0JBQ3JHLE1BQU0sTUFBTSxHQUFHLGlCQUFpQixDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFFOUYsT0FBTzt3QkFDTCxLQUFLLEVBQUUsVUFBVSxDQUFDLEtBQUs7d0JBQ3ZCLE1BQU07cUJBQ1AsQ0FBQztnQkFDSixDQUFDLENBQUMsQ0FBQztnQkFFSCxPQUFPLGFBQWEsQ0FBQztZQUN2QixDQUFDLENBQUMsQ0FDSCxDQUFDO1lBRUYsT0FBTyxHQUFHLENBQUM7UUFDYixDQUFDLENBQUMsQ0FDSCxFQUNELFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FDZixDQUFDO1FBRU8scUJBQWdCLEdBQXNELElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMscUJBQXFCLEVBQUUsRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUUvSSxhQUFRLEdBQTBDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQ25GLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO1lBQ1IsTUFBTSxFQUFFLFFBQVEsRUFBRSxhQUFhLEVBQUUsUUFBUSxFQUFFLGVBQWUsRUFBRSxHQUFHLGNBQWMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztZQUUxRyxNQUFNLE1BQU0sR0FBOEI7Z0JBQ3hDLGdCQUFnQixFQUFFLGVBQWUsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLElBQUksRUFBRTtnQkFDbEQsYUFBYTthQUNkLENBQUM7WUFFRixPQUFPLE1BQU0sQ0FBQztRQUNoQixDQUFDLENBQUMsRUFDRixXQUFXLENBQUMsQ0FBQyxDQUFDLENBQ2YsQ0FBQztRQUVPLHNCQUFpQixHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQztRQUN2RSxvQkFBZSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUM7UUE4SWxFLFlBQU8sR0FBRyxtQkFBbUIsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQyxDQUFDO1FBOEJuRSx3QkFBbUIsR0FBcUMsQ0FBQyxDQUFDLEVBQUUsT0FBTyxFQUFFLEVBQUU7WUFDOUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxHQUFHLElBQUksQ0FBQztZQUU1QixJQUFJLFVBQVUsRUFBRTtnQkFDZCxNQUFNLFNBQVMsR0FBRyxVQUFVLEVBQUUsQ0FBQztnQkFDL0IsT0FBTyxDQUFDLDBCQUEwQixDQUNoQyxTQUFTLENBQUMsSUFBSSxDQUNaLEtBQUssRUFBRSxFQUNQLEdBQUcsQ0FBQyxDQUFDLE1BQXVDLEVBQUUsRUFBRTtvQkFDOUMsTUFBTSxXQUFXLEdBQUcsV0FBVyxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztvQkFFakUsSUFBSSxXQUFXLENBQUMsTUFBTSxFQUFFO3dCQUN0QixJQUFJLENBQUMsa0JBQWtCLENBQUMsV0FBVyxDQUFDLENBQUM7cUJBQ3RDO29CQUVELElBQUksTUFBTSxDQUFDLE1BQU0sRUFBRTt3QkFDakIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztxQkFDdkU7Z0JBQ0gsQ0FBQyxDQUFDLENBQ0gsQ0FDRixDQUFDO2FBQ0g7aUJBQU07Z0JBQ0wsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDO2FBQ2xCO1FBQ0gsQ0FBQyxDQUFDO0tBbUNIO0lBck9DLElBQUksaUJBQWlCO1FBQ25CLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQztJQUNwQixDQUFDO0lBRUQsSUFBSSxVQUFVO1FBQ1osT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQztJQUMvQixDQUFDO0lBRUQsSUFBSSxvQkFBb0I7UUFDdEIsT0FBTyxPQUFPLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQ2xDLENBQUM7SUFFRCxJQUFJLFdBQVc7UUFDYixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDO0lBQ2hDLENBQUM7SUFFRCxJQUFJLFdBQVc7UUFDYixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDO0lBQ2hDLENBQUM7SUFFRCxJQUFJLFVBQVU7UUFDWixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDO0lBQy9CLENBQUM7SUFFRCxJQUFJLGVBQWU7UUFDakIsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLGVBQWUsQ0FBQztJQUNwQyxDQUFDO0lBRUQsSUFBSSxnQkFBZ0I7UUFDbEIsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLGdCQUFnQixJQUFJLEtBQUssQ0FBQztJQUM5QyxDQUFDO0lBRUQsSUFBSSxRQUFRO1FBQ1YsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsSUFBSSxLQUFLLENBQUM7SUFDdEMsQ0FBQztJQUVELElBQUkscUJBQXFCO1FBQ3ZCLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxxQkFBcUIsQ0FBQztJQUMxQyxDQUFDO0lBRUQsOEJBQThCLENBQUMsTUFBVztRQUN4QyxPQUFPLElBQUksQ0FBQyw2QkFBNkIsQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQ3BELEdBQUcsQ0FBQyxDQUFDLGtCQUE2QyxFQUFFLEVBQUUsQ0FBQyxhQUFhLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxFQUN6RixxQkFBcUIsRUFBRSxFQUN2QixXQUFXLENBQUMsQ0FBQyxDQUFDLENBQ2YsQ0FBQztJQUNKLENBQUM7SUFFRCw2QkFBNkIsQ0FBQyxNQUFXO1FBQ3ZDLE1BQU0sRUFBRSxXQUFXLEVBQUUsR0FBRyxJQUFJLENBQUM7UUFFN0IsT0FBTyxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUNoQyxRQUFRLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRTtZQUNuQixNQUFNLGFBQWEsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQXlDLENBQUMsQ0FBQztZQUVwSCxNQUFNO1lBQ0osRUFBRTtZQUNGLFFBQVEsRUFBRSxPQUFPLEVBQ2pCLFFBQVEsRUFBRSxTQUFTLEVBQ3BCLEdBQUcsY0FBYyxDQUFDLGFBQWEsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFFeEQsSUFBSSxHQUEwQyxDQUFDO1lBRS9DLElBQUksU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7Z0JBQ3hCLHlCQUF5QjtnQkFDekIsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUVsRSxHQUFHLEdBQUcsYUFBYSxDQUFDLElBQUksQ0FDdEIsS0FBSyxFQUFFLEVBQ1AsR0FBRyxDQUFDLENBQUMsV0FBVyxFQUFFLEVBQUU7b0JBQ2xCLE1BQU0sa0JBQWtCLEdBQThCLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLFdBQVcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztvQkFDdEgsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLEdBQUcsQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBRS9FLDBEQUEwRDtvQkFDMUQsa0JBQWtCLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFFM0QsNEJBQTRCO29CQUM1QixNQUFNLGdCQUFnQixHQUFHLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFFdkYseUJBQXlCO29CQUN6QixPQUFPLGdCQUFnQixDQUFDO2dCQUMxQixDQUFDLENBQUMsQ0FDSCxDQUFDO2FBQ0g7aUJBQU07Z0JBQ0wsK0NBQStDO2dCQUMvQyxHQUFHLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDcEM7WUFFRCxPQUFPLEdBQUcsQ0FBQztRQUNiLENBQUMsQ0FBQyxDQUNILENBQUM7SUFDSixDQUFDO0lBRUQsZ0NBQWdDLENBQUMsTUFBaUM7UUFDaEUsT0FBTyxJQUFJLENBQUMsK0JBQStCLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUN0RCxHQUFHLENBQUMsQ0FBQyxhQUErQyxFQUFFLEVBQUUsQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDLENBQUMsRUFDdEYscUJBQXFCLEVBQUUsRUFDdkIsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUNmLENBQUM7SUFDSixDQUFDO0lBRUQsK0JBQStCLENBQUMsTUFBaUM7UUFDL0QsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FDOUIsUUFBUSxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUU7WUFDbkIsTUFBTSxhQUFhLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBaUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRSxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUF5RSxDQUFDLENBQUM7WUFFck4sTUFBTSxVQUFVLEdBQUcsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDOUQsTUFBTSxZQUFZLEdBQUcsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN4RCxJQUFJLEdBQWlELENBQUM7WUFFdEQsSUFBSSxZQUFZLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtnQkFDM0IsNEJBQTRCO2dCQUM1QixNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFFN0UsR0FBRyxHQUFHLGdCQUFnQixDQUFDLElBQUksQ0FDekIsS0FBSyxFQUFFLEVBQ1AsR0FBRyxDQUFDLENBQUMsY0FBYyxFQUFFLEVBQUU7b0JBQ3JCLE1BQU0scUJBQXFCLEdBQTJDLGNBQW1ELENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztvQkFDbkosTUFBTSxpQkFBaUIsR0FBRyxJQUFJLEdBQUcsQ0FBQyxxQkFBcUIsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUV2RiwwREFBMEQ7b0JBQzFELHFCQUFxQixDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUVuRSw0QkFBNEI7b0JBQzVCLE1BQU0sZ0JBQWdCLEdBQUcsYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUV2Rix5QkFBeUI7b0JBQ3pCLE9BQU8sZ0JBQWdCLENBQUM7Z0JBQzFCLENBQUMsQ0FBQyxDQUNILENBQUM7YUFDSDtpQkFBTTtnQkFDTCxnREFBZ0Q7Z0JBQ2hELEdBQUcsR0FBRyxFQUFFLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUN2QztZQUVELE9BQU8sR0FBRyxDQUFDO1FBQ2IsQ0FBQyxDQUFDLENBQ0gsQ0FBQztJQUNKLENBQUM7SUFJRCxRQUFRO1FBQ04sTUFBTSxFQUFFLFdBQVcsRUFBRSxHQUFHLElBQUksQ0FBQztRQUU3QixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBRWxELElBQUksSUFBSSxDQUFDLHFCQUFxQixJQUFJLElBQUksRUFBRTtZQUN0QyxJQUFJLENBQUMsdUJBQXVCLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUM7U0FDOUg7UUFFRCxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7UUFFNUMsaUZBQWlGO1FBQ2pGLElBQUksQ0FBQyxhQUFhLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyw0QkFBNEIsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTtZQUNsRixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDO1lBQzdDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMzRSxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFUSxXQUFXO1FBQ2xCLEtBQUssQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNwQixJQUFJLENBQUMsaUJBQWlCLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDbEMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNoQyxJQUFJLENBQUMsZUFBZSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ2hDLElBQUksQ0FBQyxlQUFlLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDaEMsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUM3QixJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQ3pCLENBQUM7SUE0Qk8sa0JBQWtCLENBQUMsS0FBVTtRQUNuQyxNQUFNLEVBQUUsV0FBVyxFQUFFLEdBQUcsSUFBSSxDQUFDO1FBQzdCLE1BQU0sRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxhQUFhLEVBQUUsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQztRQUU5RSxNQUFNLGdCQUFnQixHQUE4QixFQUFFLENBQUM7UUFDdkQsTUFBTSxTQUFTLEdBQUcsSUFBSSxHQUFHLENBQUMsYUFBYSxDQUFDLENBQUM7UUFFekMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO1lBQ2xCLE1BQU0sS0FBSyxHQUFHLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUU3QixJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRTtnQkFDekIsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO2dCQUMxQyxTQUFTLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO2FBQ3RCO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLGdCQUFnQixDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDL0IsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUM7Z0JBQ3hCLE1BQU0sRUFBRSxDQUFDLEdBQUcsSUFBSSxFQUFFLEdBQUcsZ0JBQWdCLENBQUM7Z0JBQ3RDLFNBQVMsRUFBRSxTQUFTO2FBQ3JCLENBQUMsQ0FBQztTQUNKO0lBQ0gsQ0FBQztJQUVPLGlCQUFpQixDQUFDLE1BQVc7UUFDbkMsTUFBTSxZQUFZLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDckQsTUFBTSxhQUFhLEdBQUcsQ0FBQyxHQUFHLFlBQVksRUFBRSxHQUFHLE1BQU0sQ0FBQyxDQUFDO1FBRW5ELE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsZ0VBQWdFO1FBQ2pJLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2pDLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDL0IsSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUNuQyxDQUFDOzsrSEFwYlUsaUNBQWlDO21IQUFqQyxpQ0FBaUMsMkVDeEQ5Qyx5bkNBcUJBOzRGRG1DYSxpQ0FBaUM7a0JBSDdDLFNBQVMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBmaWx0ZXJNYXliZSwgTG9hZGluZ1N0YXRlLCBsb2FkaW5nU3RhdGVIYXNWYWx1ZSwgbG9hZGluZ1N0YXRlSXNMb2FkaW5nLCBMb2FkaW5nU3RhdGVXaXRoTWF5YmVTb1ZhbHVlLCBzdGFydFdpdGhCZWdpbkxvYWRpbmcsIFN1YnNjcmlwdGlvbk9iamVjdCwgc3VjY2Vzc1Jlc3VsdCwgYmVnaW5Mb2FkaW5nLCBtYXBMb2FkaW5nU3RhdGVWYWx1ZVdpdGhPcGVyYXRvciwgbG9hZGluZ1N0YXRlQ29udGV4dCwgdmFsdWVGcm9tTG9hZGluZ1N0YXRlIH0gZnJvbSAnQGRlcmVla2Ivcnhqcyc7XG5pbXBvcnQgeyBDb21wb25lbnQsIE9uRGVzdHJveSwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgbWFwLCBzd2l0Y2hNYXAsIHNoYXJlUmVwbGF5LCBzdGFydFdpdGgsIG1lcmdlTWFwLCBzY2FuLCBCZWhhdmlvclN1YmplY3QsIHRhcCwgZmlyc3QsIE9ic2VydmFibGUsIGNvbWJpbmVMYXRlc3QsIG9mIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBIYW5kbGVBY3Rpb25XaXRoQ29udGV4dCB9IGZyb20gJ0BkZXJlZWtiL2RieC1jb3JlJztcbmltcG9ydCB7IGFkZFRvU2V0Q29weSwgYXNBcnJheSwgY29udmVydE1heWJlVG9BcnJheSwgZmlsdGVyTWF5YmVWYWx1ZXMsIGxhc3RWYWx1ZSwgbWFrZVZhbHVlc0dyb3VwTWFwLCBNYXliZSwgbWVyZ2VBcnJheXMsIFByaW1hdGl2ZUtleSwgc2VwYXJhdGVWYWx1ZXMsIHNldENvbnRhaW5zQWxsVmFsdWVzLCBzZXRzQXJlRXF1aXZhbGVudCwgc29ydEJ5U3RyaW5nRnVuY3Rpb24gfSBmcm9tICdAZGVyZWVrYi91dGlsJztcbmltcG9ydCB7IEZpZWxkVHlwZSwgRm9ybWx5RmllbGRQcm9wcyB9IGZyb20gJ0BuZ3gtZm9ybWx5L21hdGVyaWFsL2Zvcm0tZmllbGQnO1xuaW1wb3J0IHsgRmllbGRUeXBlQ29uZmlnIH0gZnJvbSAnQG5neC1mb3JtbHkvY29yZSc7XG5pbXBvcnQgeyBTb3VyY2VTZWxlY3RWYWx1ZU1ldGFMb2FkZXIsIFNvdXJjZVNlbGVjdE1ldGFWYWx1ZVJlYWRlciwgU291cmNlU2VsZWN0T3BlbkZ1bmN0aW9uLCBTb3VyY2VTZWxlY3RMb2FkU291cmNlc0Z1bmN0aW9uLCBTb3VyY2VTZWxlY3RMb2FkU291cmNlLCBTb3VyY2VTZWxlY3RMb2FkU291cmNlTG9hZGluZ1N0YXRlLCBTb3VyY2VTZWxlY3REaXNwbGF5VmFsdWUsIFNvdXJjZVNlbGVjdFZhbHVlLCBTb3VyY2VTZWxlY3REaXNwbGF5RnVuY3Rpb24sIFNvdXJjZVNlbGVjdERpc3BsYXlWYWx1ZUdyb3VwLCBTb3VyY2VTZWxlY3RWYWx1ZUdyb3VwLCBTb3VyY2VTZWxlY3RPcHRpb25zLCBTb3VyY2VTZWxlY3RPcGVuU291cmNlUmVzdWx0IH0gZnJvbSAnLi9zb3VyY2VzZWxlY3QnO1xuaW1wb3J0IHsgQWJzdHJhY3RDb250cm9sIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFNvdXJjZVNlbGVjdEZpZWxkUHJvcHM8VCBleHRlbmRzIFByaW1hdGl2ZUtleSA9IFByaW1hdGl2ZUtleSwgTSA9IHVua25vd24+IGV4dGVuZHMgRm9ybWx5RmllbGRQcm9wcyB7XG4gIC8qKlxuICAgKiBGdW5jdGlvbiB0byBvcGVuIHRoZSBzb3VyY2UgYW5kIHJlcXVlc3QgdmFsdWVzLlxuICAgKi9cbiAgcmVhZG9ubHkgb3BlblNvdXJjZT86IFNvdXJjZVNlbGVjdE9wZW5GdW5jdGlvbjxNPjtcbiAgLyoqXG4gICAqIExvYWRzIHRoZSBzb3VyY2VzIHRvIGRpc3BsYXkgZW50cmllcyBmcm9tLlxuICAgKi9cbiAgcmVhZG9ubHkgbG9hZFNvdXJjZXM/OiBTb3VyY2VTZWxlY3RMb2FkU291cmNlc0Z1bmN0aW9uPE0+O1xuICAvKipcbiAgICogUmVhZHMgdGhlIHZhbHVlIGZyb20gYSBtZXRhIHZhbHVlLlxuICAgKi9cbiAgcmVhZG9ubHkgdmFsdWVSZWFkZXI6IFNvdXJjZVNlbGVjdE1ldGFWYWx1ZVJlYWRlcjxULCBNPjtcbiAgLyoqXG4gICAqIExvYWRzIG1ldGFkYXRhIGZvciB0aGUgaW5wdXQgdmFsdWVzLlxuICAgKi9cbiAgcmVhZG9ubHkgbWV0YUxvYWRlcjogU291cmNlU2VsZWN0VmFsdWVNZXRhTG9hZGVyPFQsIE0+O1xuICAvKipcbiAgICogVXNlZCBmb3IgYnVpbGRpbmcgYSBkaXNwbGF5IHZhbHVlIGdpdmVuIHRoZSBpbnB1dC5cbiAgICovXG4gIHJlYWRvbmx5IGRpc3BsYXlGb3JWYWx1ZTogU291cmNlU2VsZWN0RGlzcGxheUZ1bmN0aW9uPFQsIE0+O1xuICAvKipcbiAgICogU2VsZWN0IGJ1dHRvbiBpY29uXG4gICAqL1xuICByZWFkb25seSBzZWxlY3RCdXR0b25JY29uPzogc3RyaW5nO1xuICAvKipcbiAgICogV2hldGhlciBvciBub3QgdGhlIHNlbGVjdGlvbiBpcyBhcyBhbiBhcnJheS5cbiAgICovXG4gIHJlYWRvbmx5IG11bHRpcGxlPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIChPcHRpb25hbCkgb2JzZXJ2YWJsZSB0aGF0IHdpbGwgdHJpZ2dlciB0aGUgY2xlYXJpbmcgb2YgYWxsIGNhY2hlZCBkaXNwbGF5IHZhbHVlcy5cbiAgICovXG4gIHJlYWRvbmx5IHJlZnJlc2hEaXNwbGF5VmFsdWVzJD86IE9ic2VydmFibGU8dW5rbm93bj47XG59XG5cbmludGVyZmFjZSBTZWxlY3RGaWVsZE9wZW5Tb3VyY2VNYXA8VCBleHRlbmRzIFByaW1hdGl2ZUtleSA9IFByaW1hdGl2ZUtleSwgTSA9IHVua25vd24+IHtcbiAgcmVhZG9ubHkgdmFsdWVzOiBTb3VyY2VTZWxlY3RWYWx1ZTxULCBNPltdO1xuICByZWFkb25seSB2YWx1ZXNTZXQ6IFNldDxUPjtcbn1cblxuLyoqXG4gKiBDb21wb25lbnQgdGhhdCBkaXNwbGF5cyBhIHNlbGVjdCB2aWV3IChtdWx0aSBvciBub3QpXG4gKi9cbkBDb21wb25lbnQoe1xuICB0ZW1wbGF0ZVVybDogJ3NvdXJjZXNlbGVjdC5maWVsZC5jb21wb25lbnQuaHRtbCdcbn0pXG5leHBvcnQgY2xhc3MgRGJ4Rm9ybVNvdXJjZVNlbGVjdEZpZWxkQ29tcG9uZW50PFQgZXh0ZW5kcyBQcmltYXRpdmVLZXkgPSBQcmltYXRpdmVLZXksIE0gPSB1bmtub3duPiBleHRlbmRzIEZpZWxkVHlwZTxGaWVsZFR5cGVDb25maWc8U291cmNlU2VsZWN0RmllbGRQcm9wczxULCBNPj4+IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICBwcml2YXRlIF9jYWNoZU1ldGFTdWIgPSBuZXcgU3Vic2NyaXB0aW9uT2JqZWN0KCk7XG4gIHByaXZhdGUgX2NsZWFyRGlzcGxheUhhc2hNYXBTdWIgPSBuZXcgU3Vic2NyaXB0aW9uT2JqZWN0KCk7XG4gIHByaXZhdGUgX3ZhbHVlTWV0YUhhc2hNYXAgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PE1hcDxULCBTb3VyY2VTZWxlY3RWYWx1ZTxULCBNPj4+KG5ldyBNYXAoKSk7XG4gIHByaXZhdGUgX2Rpc3BsYXlIYXNoTWFwID0gbmV3IEJlaGF2aW9yU3ViamVjdDxNYXA8VCwgU291cmNlU2VsZWN0RGlzcGxheVZhbHVlPFQsIE0+Pj4obmV3IE1hcCgpKTtcblxuICBwcml2YXRlIF9mb3JtQ29udHJvbE9icyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8TWF5YmU8QWJzdHJhY3RDb250cm9sPFRbXT4+Pih1bmRlZmluZWQpO1xuICBwcml2YXRlIF9mcm9tT3BlblNvdXJjZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8U2VsZWN0RmllbGRPcGVuU291cmNlTWFwPFQsIE0+Pih7IHZhbHVlczogW10sIHZhbHVlc1NldDogbmV3IFNldCgpIH0pO1xuICBwcml2YXRlIF9sb2FkU291cmNlcyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8TWF5YmU8T2JzZXJ2YWJsZTxTb3VyY2VTZWxlY3RMb2FkU291cmNlPE0+W10+Pj4odW5kZWZpbmVkKTtcblxuICByZWFkb25seSBmb3JtQ29udHJvbCQgPSB0aGlzLl9mb3JtQ29udHJvbE9icy5waXBlKGZpbHRlck1heWJlKCkpO1xuXG4gIHJlYWRvbmx5IGN1cnJlbnRGb3JtQ29udHJvbFZhbHVlJCA9IHRoaXMuZm9ybUNvbnRyb2wkLnBpcGUoXG4gICAgc3dpdGNoTWFwKChjb250cm9sKSA9PiBjb250cm9sLnZhbHVlQ2hhbmdlcy5waXBlKHN0YXJ0V2l0aChjb250cm9sLnZhbHVlKSkpLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgcmVhZG9ubHkgdmFsdWVzJDogT2JzZXJ2YWJsZTxUW10+ID0gdGhpcy5jdXJyZW50Rm9ybUNvbnRyb2xWYWx1ZSQucGlwZShtYXAoY29udmVydE1heWJlVG9BcnJheSksIHNoYXJlUmVwbGF5KDEpKTtcblxuICByZWFkb25seSBhbGxWYWx1ZXNFdmVyU2VsZWN0ZWQkOiBPYnNlcnZhYmxlPFRbXT4gPSB0aGlzLnZhbHVlcyQucGlwZShcbiAgICBzY2FuKChhY2MsIHZhbHVlcykgPT4ge1xuICAgICAgbGV0IHJlc3VsdDogU2V0PFQ+ID0gYWNjO1xuXG4gICAgICBpZiAoIXNldENvbnRhaW5zQWxsVmFsdWVzKGFjYywgdmFsdWVzKSkge1xuICAgICAgICByZXN1bHQgPSBhZGRUb1NldENvcHkoYWNjLCB2YWx1ZXMpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sIG5ldyBTZXQ8VD4oKSksXG4gICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICBtYXAoKHgpID0+IEFycmF5LmZyb20oeCkpLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgcmVhZG9ubHkgc291cmNlU2VsZWN0VmFsdWVzRnJvbVZhbHVlc1N0YXRlJDogT2JzZXJ2YWJsZTxMb2FkaW5nU3RhdGU8U291cmNlU2VsZWN0VmFsdWU8VCwgTT5bXT4+ID0gdGhpcy5hbGxWYWx1ZXNFdmVyU2VsZWN0ZWQkLnBpcGUoXG4gICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICBzd2l0Y2hNYXAoKHZhbHVlczogVFtdKSA9PiB0aGlzLmxvYWRTb3VyY2VTZWxlY3RWYWx1ZUZvclZhbHVlcyh2YWx1ZXMpKSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIHJlYWRvbmx5IGxvYWRTb3VyY2VzJDogT2JzZXJ2YWJsZTxMb2FkaW5nU3RhdGU8U291cmNlU2VsZWN0VmFsdWVHcm91cDxULCBNPltdPj4gPSB0aGlzLl9sb2FkU291cmNlcy5waXBlKFxuICAgIGZpbHRlck1heWJlKCksXG4gICAgc3dpdGNoTWFwKChsb2FkU291cmNlKSA9PiB7XG4gICAgICBjb25zdCB7IHZhbHVlUmVhZGVyIH0gPSB0aGlzO1xuXG4gICAgICByZXR1cm4gbG9hZFNvdXJjZS5waXBlKFxuICAgICAgICBzd2l0Y2hNYXAoKHNvdXJjZXM6IFNvdXJjZVNlbGVjdExvYWRTb3VyY2U8TT5bXSkgPT4ge1xuICAgICAgICAgIGNvbnN0IHNvdXJjZU9iczogT2JzZXJ2YWJsZTxTb3VyY2VTZWxlY3RMb2FkU291cmNlTG9hZGluZ1N0YXRlPE0+PltdID0gc291cmNlcy5tYXAoKHgpID0+IHgubWV0YS5waXBlKG1hcCgobWV0YVN0YXRlKSA9PiAoeyAuLi5tZXRhU3RhdGUsIGxhYmVsOiB4LmxhYmVsIH0pKSkpO1xuXG4gICAgICAgICAgaWYgKHNvdXJjZU9icy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiBvZihzdWNjZXNzUmVzdWx0KFtdKSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBjb21iaW5lTGF0ZXN0KHNvdXJjZU9icykucGlwZShcbiAgICAgICAgICAgICAgbWFwKCh4KSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc3RhdGVzV2l0aFZhbHVlcyA9IHguZmlsdGVyKCh5KSA9PiBsb2FkaW5nU3RhdGVIYXNWYWx1ZSh5KSk7XG4gICAgICAgICAgICAgICAgY29uc3QgbG9hZGluZyA9IHguZmluZEluZGV4KGxvYWRpbmdTdGF0ZUlzTG9hZGluZykgIT09IC0xO1xuICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlOiBTb3VyY2VTZWxlY3RWYWx1ZUdyb3VwPFQsIE0+W10gPSBzdGF0ZXNXaXRoVmFsdWVzLm1hcCgoeSkgPT4ge1xuICAgICAgICAgICAgICAgICAgY29uc3QgZ3JvdXA6IFNvdXJjZVNlbGVjdFZhbHVlR3JvdXA8VCwgTT4gPSB7XG4gICAgICAgICAgICAgICAgICAgIGxhYmVsOiB5LmxhYmVsLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZXM6ICh5LnZhbHVlIGFzIE1bXSkubWFwKChtZXRhKSA9PiAoeyBtZXRhLCB2YWx1ZTogdmFsdWVSZWFkZXIobWV0YSkgfSkpXG4gICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICByZXR1cm4gZ3JvdXA7XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgbG9hZGluZyxcbiAgICAgICAgICAgICAgICAgIHZhbHVlXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgKTtcbiAgICB9KVxuICApO1xuXG4gIHJlYWRvbmx5IGZyb21PcGVuU291cmNlJDogT2JzZXJ2YWJsZTxTb3VyY2VTZWxlY3RWYWx1ZUdyb3VwPFQsIE0+PiA9IHRoaXMuX2Zyb21PcGVuU291cmNlLnBpcGUoXG4gICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKGEsIGIpID0+IHNldHNBcmVFcXVpdmFsZW50KGEudmFsdWVzU2V0LCBiLnZhbHVlc1NldCkpLFxuICAgIG1hcCgoeCkgPT4ge1xuICAgICAgY29uc3QgZ3JvdXA6IFNvdXJjZVNlbGVjdFZhbHVlR3JvdXA8VCwgTT4gPSB7XG4gICAgICAgIGxhYmVsOiAnJyxcbiAgICAgICAgdmFsdWVzOiB4LnZhbHVlc1xuICAgICAgfTtcblxuICAgICAgcmV0dXJuIGdyb3VwO1xuICAgIH0pLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgcmVhZG9ubHkgdmFsdWVHcm91cHNGcm9tU291cmNlc1N0YXRlJDogT2JzZXJ2YWJsZTxMb2FkaW5nU3RhdGVXaXRoTWF5YmVTb1ZhbHVlPFNvdXJjZVNlbGVjdFZhbHVlR3JvdXA8VCwgTT5bXT4+ID0gY29tYmluZUxhdGVzdChbdGhpcy5mcm9tT3BlblNvdXJjZSQsIHRoaXMubG9hZFNvdXJjZXMkXSkucGlwZShcbiAgICBtYXAoKFtmcm9tT3BlblNvdXJjZUdyb3VwLCBsb2FkU291cmNlc10pID0+IHtcbiAgICAgIGNvbnN0IGxvYWRTb3VyY2VzVmFsdWUgPSBsb2FkU291cmNlcy52YWx1ZSA/PyBbXTtcbiAgICAgIGNvbnN0IHZhbHVlOiBTb3VyY2VTZWxlY3RWYWx1ZUdyb3VwPFQsIE0+W10gPSBbZnJvbU9wZW5Tb3VyY2VHcm91cCwgLi4ubG9hZFNvdXJjZXNWYWx1ZV07XG5cbiAgICAgIGNvbnN0IHJlc3VsdDogTG9hZGluZ1N0YXRlV2l0aE1heWJlU29WYWx1ZTxTb3VyY2VTZWxlY3RWYWx1ZUdyb3VwPFQsIE0+W10+ID0ge1xuICAgICAgICBsb2FkaW5nOiBsb2FkU291cmNlcy5sb2FkaW5nLFxuICAgICAgICB2YWx1ZVxuICAgICAgfTtcblxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9KSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIHJlYWRvbmx5IGFsbFZhbHVlR3JvdXBzU3RhdGUkOiBPYnNlcnZhYmxlPExvYWRpbmdTdGF0ZTxTb3VyY2VTZWxlY3RWYWx1ZUdyb3VwPFQsIE0+W10+PiA9IHRoaXMuc291cmNlU2VsZWN0VmFsdWVzRnJvbVZhbHVlc1N0YXRlJC5waXBlKFxuICAgIHN3aXRjaE1hcCgoc291cmNlU2VsZWN0VmFsdWVzRnJvbVZhbHVlczogTG9hZGluZ1N0YXRlPFNvdXJjZVNlbGVjdFZhbHVlPFQsIE0+W10+KSA9PiB7XG4gICAgICBpZiAobG9hZGluZ1N0YXRlSGFzVmFsdWUoc291cmNlU2VsZWN0VmFsdWVzRnJvbVZhbHVlcykpIHtcbiAgICAgICAgY29uc3QgdmFsdWVzRnJvbVZhbHVlc0dyb3VwOiBTb3VyY2VTZWxlY3RWYWx1ZUdyb3VwPFQsIE0+ID0ge1xuICAgICAgICAgIGxhYmVsOiAnJyxcbiAgICAgICAgICB2YWx1ZXM6IHNvdXJjZVNlbGVjdFZhbHVlc0Zyb21WYWx1ZXMudmFsdWVcbiAgICAgICAgfTtcblxuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZUdyb3Vwc0Zyb21Tb3VyY2VzU3RhdGUkLnBpcGUoXG4gICAgICAgICAgbWFwKChzb3VyY2VzU3RhdGUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGFsbEdyb3VwczogU291cmNlU2VsZWN0VmFsdWVHcm91cDxULCBNPltdID0gW3ZhbHVlc0Zyb21WYWx1ZXNHcm91cCwgLi4uc291cmNlc1N0YXRlLnZhbHVlXTtcblxuICAgICAgICAgICAgY29uc3QgcmVzdWx0OiBMb2FkaW5nU3RhdGU8U291cmNlU2VsZWN0VmFsdWVHcm91cDxULCBNPltdPiA9IHtcbiAgICAgICAgICAgICAgbG9hZGluZzogc291cmNlU2VsZWN0VmFsdWVzRnJvbVZhbHVlcy5sb2FkaW5nIHx8IHNvdXJjZXNTdGF0ZS5sb2FkaW5nLFxuICAgICAgICAgICAgICB2YWx1ZTogYWxsR3JvdXBzXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gb2YoYmVnaW5Mb2FkaW5nPFNvdXJjZVNlbGVjdFZhbHVlR3JvdXA8VCwgTT5bXT4oe30pKTtcbiAgICAgIH1cbiAgICB9KSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIHJlYWRvbmx5IGFsbE9wdGlvbkdyb3Vwc1N0YXRlJDogT2JzZXJ2YWJsZTxMb2FkaW5nU3RhdGU8U291cmNlU2VsZWN0RGlzcGxheVZhbHVlR3JvdXA8VCwgTT5bXT4+ID0gdGhpcy5hbGxWYWx1ZUdyb3Vwc1N0YXRlJC5waXBlKFxuICAgIG1hcExvYWRpbmdTdGF0ZVZhbHVlV2l0aE9wZXJhdG9yKFxuICAgICAgc3dpdGNoTWFwKChncm91cHM6IFNvdXJjZVNlbGVjdFZhbHVlR3JvdXA8VCwgTT5bXSkgPT4ge1xuICAgICAgICBjb25zdCBhbGxHcm91cHNSZWR1Y2VkQnlMYWJlbCA9IG1ha2VWYWx1ZXNHcm91cE1hcChncm91cHMsICh4KSA9PiB4LmxhYmVsKSBhcyBNYXA8c3RyaW5nLCBTb3VyY2VTZWxlY3RWYWx1ZUdyb3VwPFQsIE0+W10+O1xuXG4gICAgICAgIGNvbnN0IHZhbHVlc0VuY291bnRlcmVkID0gbmV3IFNldDxUPigpO1xuICAgICAgICBjb25zdCBhbGxVbmlxdWVWYWx1ZXM6IFNvdXJjZVNlbGVjdFZhbHVlPFQsIE0+W10gPSBbXTtcblxuICAgICAgICBjb25zdCBzaW1wbGlmaWVkVmFsdWVzR3JvdXBzOiBTb3VyY2VTZWxlY3RWYWx1ZUdyb3VwPFQsIE0+W10gPSBbXTtcblxuICAgICAgICAvLyBzb3J0IHRvIHB1dCB0aGUgYmxhbmsgbGFiZWwgZmlyc3RcbiAgICAgICAgQXJyYXkuZnJvbShhbGxHcm91cHNSZWR1Y2VkQnlMYWJlbC5lbnRyaWVzKCkpXG4gICAgICAgICAgLnNvcnQoc29ydEJ5U3RyaW5nRnVuY3Rpb24oKHgpID0+IHhbMF0pKVxuICAgICAgICAgIC5mb3JFYWNoKChbbGFiZWwsIGdyb3Vwc10pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlczogU291cmNlU2VsZWN0VmFsdWU8VCwgTT5bXSA9IFtdO1xuXG4gICAgICAgICAgICBncm91cHMuZm9yRWFjaCgoZ3JvdXApID0+IHtcbiAgICAgICAgICAgICAgZ3JvdXAudmFsdWVzLmZvckVhY2goKHNlbGVjdFZhbHVlKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCF2YWx1ZXNFbmNvdW50ZXJlZC5oYXMoc2VsZWN0VmFsdWUudmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICB2YWx1ZXMucHVzaChzZWxlY3RWYWx1ZSk7XG4gICAgICAgICAgICAgICAgICBhbGxVbmlxdWVWYWx1ZXMucHVzaChzZWxlY3RWYWx1ZSk7XG4gICAgICAgICAgICAgICAgICB2YWx1ZXNFbmNvdW50ZXJlZC5hZGQoc2VsZWN0VmFsdWUudmFsdWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaWYgKHZhbHVlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgIHNpbXBsaWZpZWRWYWx1ZXNHcm91cHMucHVzaCh7XG4gICAgICAgICAgICAgICAgbGFiZWwsXG4gICAgICAgICAgICAgICAgdmFsdWVzXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IG9icyA9IHRoaXMuZ2V0RGlzcGxheVZhbHVlc0ZvclNlbGVjdFZhbHVlcyhhbGxVbmlxdWVWYWx1ZXMpLnBpcGUoXG4gICAgICAgICAgbWFwKChkaXNwbGF5VmFsdWVzKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBkaXNwbGF5VmFsdWVzTWFwID0gbmV3IE1hcChkaXNwbGF5VmFsdWVzLm1hcCgoeCkgPT4gW3gudmFsdWUsIHhdKSk7XG5cbiAgICAgICAgICAgIGNvbnN0IGRpc3BsYXlHcm91cHM6IFNvdXJjZVNlbGVjdERpc3BsYXlWYWx1ZUdyb3VwPFQsIE0+W10gPSBzaW1wbGlmaWVkVmFsdWVzR3JvdXBzLm1hcCgodmFsdWVHcm91cCkgPT4ge1xuICAgICAgICAgICAgICBjb25zdCB2YWx1ZXMgPSBmaWx0ZXJNYXliZVZhbHVlcyh2YWx1ZUdyb3VwLnZhbHVlcy5tYXAoKHgpID0+IGRpc3BsYXlWYWx1ZXNNYXAuZ2V0KHgudmFsdWUpKSk7XG5cbiAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBsYWJlbDogdmFsdWVHcm91cC5sYWJlbCxcbiAgICAgICAgICAgICAgICB2YWx1ZXNcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICByZXR1cm4gZGlzcGxheUdyb3VwcztcbiAgICAgICAgICB9KVxuICAgICAgICApO1xuXG4gICAgICAgIHJldHVybiBvYnM7XG4gICAgICB9KVxuICAgICksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSBhbGxPcHRpb25Hcm91cHMkOiBPYnNlcnZhYmxlPFNvdXJjZVNlbGVjdERpc3BsYXlWYWx1ZUdyb3VwPFQsIE0+W10+ID0gdGhpcy5hbGxPcHRpb25Hcm91cHNTdGF0ZSQucGlwZSh2YWx1ZUZyb21Mb2FkaW5nU3RhdGUoKSwgc2hhcmVSZXBsYXkoMSkpO1xuXG4gIHJlYWRvbmx5IG9wdGlvbnMkOiBPYnNlcnZhYmxlPFNvdXJjZVNlbGVjdE9wdGlvbnM8VCwgTT4+ID0gdGhpcy5hbGxPcHRpb25Hcm91cHMkLnBpcGUoXG4gICAgbWFwKCh4KSA9PiB7XG4gICAgICBjb25zdCB7IGluY2x1ZGVkOiBncm91cGVkVmFsdWVzLCBleGNsdWRlZDogbm9uR3JvdXBlZEdyb3VwIH0gPSBzZXBhcmF0ZVZhbHVlcyh4LCAoeSkgPT4gQm9vbGVhbih5LmxhYmVsKSk7XG5cbiAgICAgIGNvbnN0IHJlc3VsdDogU291cmNlU2VsZWN0T3B0aW9uczxULCBNPiA9IHtcbiAgICAgICAgbm9uR3JvdXBlZFZhbHVlczogbm9uR3JvdXBlZEdyb3VwWzBdPy52YWx1ZXMgPz8gW10sXG4gICAgICAgIGdyb3VwZWRWYWx1ZXNcbiAgICAgIH07XG5cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSBub25Hcm91cGVkVmFsdWVzJCA9IHRoaXMub3B0aW9ucyQucGlwZShtYXAoKHgpID0+IHgubm9uR3JvdXBlZFZhbHVlcykpO1xuICByZWFkb25seSBncm91cGVkT3B0aW9ucyQgPSB0aGlzLm9wdGlvbnMkLnBpcGUobWFwKCh4KSA9PiB4Lmdyb3VwZWRWYWx1ZXMpKTtcblxuICBnZXQgc291cmNlU2VsZWN0RmllbGQoKTogU291cmNlU2VsZWN0RmllbGRQcm9wczxULCBNPiB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHM7XG4gIH1cblxuICBnZXQgb3BlblNvdXJjZSgpIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5vcGVuU291cmNlO1xuICB9XG5cbiAgZ2V0IHNob3dPcGVuU291cmNlQnV0dG9uKCkge1xuICAgIHJldHVybiBCb29sZWFuKHRoaXMub3BlblNvdXJjZSk7XG4gIH1cblxuICBnZXQgbG9hZFNvdXJjZXMoKSB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMubG9hZFNvdXJjZXM7XG4gIH1cblxuICBnZXQgdmFsdWVSZWFkZXIoKSB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMudmFsdWVSZWFkZXI7XG4gIH1cblxuICBnZXQgbWV0YUxvYWRlcigpIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5tZXRhTG9hZGVyO1xuICB9XG5cbiAgZ2V0IGRpc3BsYXlGb3JWYWx1ZSgpOiBTb3VyY2VTZWxlY3REaXNwbGF5RnVuY3Rpb248VCwgTT4ge1xuICAgIHJldHVybiB0aGlzLnByb3BzLmRpc3BsYXlGb3JWYWx1ZTtcbiAgfVxuXG4gIGdldCBzZWxlY3RCdXR0b25JY29uKCkge1xuICAgIHJldHVybiB0aGlzLnByb3BzLnNlbGVjdEJ1dHRvbkljb24gPz8gJ2FkZCc7XG4gIH1cblxuICBnZXQgbXVsdGlwbGUoKSB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMubXVsdGlwbGUgfHwgZmFsc2U7XG4gIH1cblxuICBnZXQgcmVmcmVzaERpc3BsYXlWYWx1ZXMkKCkge1xuICAgIHJldHVybiB0aGlzLnByb3BzLnJlZnJlc2hEaXNwbGF5VmFsdWVzJDtcbiAgfVxuXG4gIGxvYWRTb3VyY2VTZWxlY3RWYWx1ZUZvclZhbHVlcyh2YWx1ZXM6IFRbXSk6IE9ic2VydmFibGU8TG9hZGluZ1N0YXRlPFNvdXJjZVNlbGVjdFZhbHVlPFQsIE0+W10+PiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0U291cmNlU2VsZWN0VmFsdWVGb3JWYWx1ZXModmFsdWVzKS5waXBlKFxuICAgICAgbWFwKChzb3VyY2VTZWxlY3RWYWx1ZXM6IFNvdXJjZVNlbGVjdFZhbHVlPFQsIE0+W10pID0+IHN1Y2Nlc3NSZXN1bHQoc291cmNlU2VsZWN0VmFsdWVzKSksXG4gICAgICBzdGFydFdpdGhCZWdpbkxvYWRpbmcoKSxcbiAgICAgIHNoYXJlUmVwbGF5KDEpXG4gICAgKTtcbiAgfVxuXG4gIGdldFNvdXJjZVNlbGVjdFZhbHVlRm9yVmFsdWVzKHZhbHVlczogVFtdKTogT2JzZXJ2YWJsZTxTb3VyY2VTZWxlY3RWYWx1ZTxULCBNPltdPiB7XG4gICAgY29uc3QgeyB2YWx1ZVJlYWRlciB9ID0gdGhpcztcblxuICAgIHJldHVybiB0aGlzLl92YWx1ZU1ldGFIYXNoTWFwLnBpcGUoXG4gICAgICBtZXJnZU1hcCgobWV0YU1hcCkgPT4ge1xuICAgICAgICBjb25zdCBtYXBwaW5nUmVzdWx0ID0gdmFsdWVzLm1hcCgoaGFzaCwgaSkgPT4gW2ksIGhhc2gsIG1ldGFNYXAuZ2V0KGhhc2gpXSBhcyBbbnVtYmVyLCBULCBTb3VyY2VTZWxlY3RWYWx1ZTxULCBNPl0pO1xuXG4gICAgICAgIGNvbnN0IHtcbiAgICAgICAgICAvL1xuICAgICAgICAgIGluY2x1ZGVkOiBoYXNNZXRhLFxuICAgICAgICAgIGV4Y2x1ZGVkOiBuZWVkc01ldGFcbiAgICAgICAgfSA9IHNlcGFyYXRlVmFsdWVzKG1hcHBpbmdSZXN1bHQsICh4KSA9PiBCb29sZWFuKHhbMl0pKTtcblxuICAgICAgICBsZXQgb2JzOiBPYnNlcnZhYmxlPFNvdXJjZVNlbGVjdFZhbHVlPFQsIE0+W10+O1xuXG4gICAgICAgIGlmIChuZWVkc01ldGEubGVuZ3RoID4gMCkge1xuICAgICAgICAgIC8vIEdvIGdldCB0aGUgbWV0YSB2YWx1ZS5cbiAgICAgICAgICBjb25zdCBtZXRhVmFsdWVzT2JzID0gdGhpcy5tZXRhTG9hZGVyKG5lZWRzTWV0YS5tYXAoKHgpID0+IHhbMV0pKTtcblxuICAgICAgICAgIG9icyA9IG1ldGFWYWx1ZXNPYnMucGlwZShcbiAgICAgICAgICAgIGZpcnN0KCksXG4gICAgICAgICAgICBtYXAoKG1ldGFSZXN1bHRzKSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IG1ldGFSZXN1bHRzTWFwcGluZzogU291cmNlU2VsZWN0VmFsdWU8VCwgTT5bXSA9IG1ldGFSZXN1bHRzLm1hcCgobWV0YSkgPT4gKHsgbWV0YSwgdmFsdWU6IHZhbHVlUmVhZGVyKG1ldGEpIH0pKTtcbiAgICAgICAgICAgICAgY29uc3QgdmFsdWVJbmRleEhhc2hNYXAgPSBuZXcgTWFwKG1ldGFSZXN1bHRzTWFwcGluZy5tYXAoKHgpID0+IFt4LnZhbHVlLCB4XSkpO1xuXG4gICAgICAgICAgICAgIC8vIFVwZGF0ZSBtZXRhTWFwLiBObyBuZWVkIHRvIHB1c2ggYW4gdXBkYXRlIG5vdGlmaWNhdGlvbi5cbiAgICAgICAgICAgICAgbWV0YVJlc3VsdHNNYXBwaW5nLmZvckVhY2goKHgpID0+IG1ldGFNYXAuc2V0KHgudmFsdWUsIHgpKTtcblxuICAgICAgICAgICAgICAvLyBaaXAgdmFsdWVzIGJhY2sgdG9nZXRoZXIuXG4gICAgICAgICAgICAgIGNvbnN0IG5ld0Rpc3BsYXlWYWx1ZXMgPSBtYXBwaW5nUmVzdWx0Lm1hcCgoeCkgPT4geFsyXSA/PyB2YWx1ZUluZGV4SGFzaE1hcC5nZXQoeFsxXSkpO1xuXG4gICAgICAgICAgICAgIC8vIFJldHVybiBkaXNwbGF5IHZhbHVlcy5cbiAgICAgICAgICAgICAgcmV0dXJuIG5ld0Rpc3BsYXlWYWx1ZXM7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gSWYgYWxsIGRpc3BsYXkgdmFsdWVzIGFyZSBoYXNoZWQgcmV0dXJuIHRoZW1cbiAgICAgICAgICBvYnMgPSBvZihoYXNNZXRhLm1hcCgoeCkgPT4geFsyXSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG9icztcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIGxvYWREaXNwbGF5VmFsdWVzRm9yU2VsZWN0VmFsdWVzKHZhbHVlczogU291cmNlU2VsZWN0VmFsdWU8VCwgTT5bXSk6IE9ic2VydmFibGU8TG9hZGluZ1N0YXRlPFNvdXJjZVNlbGVjdERpc3BsYXlWYWx1ZTxULCBNPltdPj4ge1xuICAgIHJldHVybiB0aGlzLmdldERpc3BsYXlWYWx1ZXNGb3JTZWxlY3RWYWx1ZXModmFsdWVzKS5waXBlKFxuICAgICAgbWFwKChkaXNwbGF5VmFsdWVzOiBTb3VyY2VTZWxlY3REaXNwbGF5VmFsdWU8VCwgTT5bXSkgPT4gc3VjY2Vzc1Jlc3VsdChkaXNwbGF5VmFsdWVzKSksXG4gICAgICBzdGFydFdpdGhCZWdpbkxvYWRpbmcoKSxcbiAgICAgIHNoYXJlUmVwbGF5KDEpXG4gICAgKTtcbiAgfVxuXG4gIGdldERpc3BsYXlWYWx1ZXNGb3JTZWxlY3RWYWx1ZXModmFsdWVzOiBTb3VyY2VTZWxlY3RWYWx1ZTxULCBNPltdKTogT2JzZXJ2YWJsZTxTb3VyY2VTZWxlY3REaXNwbGF5VmFsdWU8VCwgTT5bXT4ge1xuICAgIHJldHVybiB0aGlzLl9kaXNwbGF5SGFzaE1hcC5waXBlKFxuICAgICAgbWVyZ2VNYXAoKG1ldGFNYXApID0+IHtcbiAgICAgICAgY29uc3QgbWFwcGluZ1Jlc3VsdCA9IHZhbHVlcy5tYXAoKHgpID0+IFt4LCB4LnZhbHVlXSBhcyBbU291cmNlU2VsZWN0VmFsdWU8VCwgTT4sIFRdKS5tYXAoKFt4LCBoYXNoXSwgaSkgPT4gW2ksIGhhc2gsIHgsIG1ldGFNYXAuZ2V0KGhhc2gpXSBhcyBbbnVtYmVyLCBULCBTb3VyY2VTZWxlY3RWYWx1ZTxULCBNPiwgU291cmNlU2VsZWN0RGlzcGxheVZhbHVlPFQsIE0+XSk7XG5cbiAgICAgICAgY29uc3QgaGFzRGlzcGxheSA9IG1hcHBpbmdSZXN1bHQuZmlsdGVyKCh4KSA9PiBCb29sZWFuKHhbM10pKTtcbiAgICAgICAgY29uc3QgbmVlZHNEaXNwbGF5ID0gbWFwcGluZ1Jlc3VsdC5maWx0ZXIoKHgpID0+ICF4WzNdKTtcbiAgICAgICAgbGV0IG9iczogT2JzZXJ2YWJsZTxTb3VyY2VTZWxlY3REaXNwbGF5VmFsdWU8VCwgTT5bXT47XG5cbiAgICAgICAgaWYgKG5lZWRzRGlzcGxheS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgLy8gR28gZ2V0IHRoZSBkaXNwbGF5IHZhbHVlLlxuICAgICAgICAgIGNvbnN0IGRpc3BsYXlWYWx1ZXNPYnMgPSB0aGlzLmRpc3BsYXlGb3JWYWx1ZShuZWVkc0Rpc3BsYXkubWFwKCh4KSA9PiB4WzJdKSk7XG5cbiAgICAgICAgICBvYnMgPSBkaXNwbGF5VmFsdWVzT2JzLnBpcGUoXG4gICAgICAgICAgICBmaXJzdCgpLFxuICAgICAgICAgICAgbWFwKChkaXNwbGF5UmVzdWx0cykgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBkaXNwbGF5UmVzdWx0c01hcHBpbmc6IFtTb3VyY2VTZWxlY3REaXNwbGF5VmFsdWU8VCwgTT4sIFRdW10gPSAoZGlzcGxheVJlc3VsdHMgYXMgU291cmNlU2VsZWN0RGlzcGxheVZhbHVlPFQsIE0+W10pLm1hcCgoeCkgPT4gW3gsIHgudmFsdWVdKTtcbiAgICAgICAgICAgICAgY29uc3QgdmFsdWVJbmRleEhhc2hNYXAgPSBuZXcgTWFwKGRpc3BsYXlSZXN1bHRzTWFwcGluZy5tYXAoKFt4LCBoYXNoXSkgPT4gW2hhc2gsIHhdKSk7XG5cbiAgICAgICAgICAgICAgLy8gVXBkYXRlIG1ldGFNYXAuIE5vIG5lZWQgdG8gcHVzaCBhbiB1cGRhdGUgbm90aWZpY2F0aW9uLlxuICAgICAgICAgICAgICBkaXNwbGF5UmVzdWx0c01hcHBpbmcuZm9yRWFjaCgoW3gsIGhhc2hdKSA9PiBtZXRhTWFwLnNldChoYXNoLCB4KSk7XG5cbiAgICAgICAgICAgICAgLy8gWmlwIHZhbHVlcyBiYWNrIHRvZ2V0aGVyLlxuICAgICAgICAgICAgICBjb25zdCBuZXdEaXNwbGF5VmFsdWVzID0gbWFwcGluZ1Jlc3VsdC5tYXAoKHgpID0+IHhbM10gPz8gdmFsdWVJbmRleEhhc2hNYXAuZ2V0KHhbMV0pKTtcblxuICAgICAgICAgICAgICAvLyBSZXR1cm4gZGlzcGxheSB2YWx1ZXMuXG4gICAgICAgICAgICAgIHJldHVybiBuZXdEaXNwbGF5VmFsdWVzO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIElmIGFsbCBkaXNwbGF5IHZhbHVlcyBhcmUgaGFzaGVkIHJldHVybiB0aGF0LlxuICAgICAgICAgIG9icyA9IG9mKGhhc0Rpc3BsYXkubWFwKCh4KSA9PiB4WzNdKSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gb2JzO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgcmVhZG9ubHkgY29udGV4dCA9IGxvYWRpbmdTdGF0ZUNvbnRleHQoeyBvYnM6IHRoaXMuYWxsT3B0aW9uR3JvdXBzU3RhdGUkIH0pO1xuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIGNvbnN0IHsgbG9hZFNvdXJjZXMgfSA9IHRoaXM7XG5cbiAgICB0aGlzLl9sb2FkU291cmNlcy5uZXh0KGxvYWRTb3VyY2VzPy4oKSB8fCBvZihbXSkpO1xuXG4gICAgaWYgKHRoaXMucmVmcmVzaERpc3BsYXlWYWx1ZXMkICE9IG51bGwpIHtcbiAgICAgIHRoaXMuX2NsZWFyRGlzcGxheUhhc2hNYXBTdWIuc3Vic2NyaXB0aW9uID0gdGhpcy5yZWZyZXNoRGlzcGxheVZhbHVlcyQuc3Vic2NyaWJlKCgpID0+IHRoaXMuX2Rpc3BsYXlIYXNoTWFwLm5leHQobmV3IE1hcCgpKSk7XG4gICAgfVxuXG4gICAgdGhpcy5fZm9ybUNvbnRyb2xPYnMubmV4dCh0aGlzLmZvcm1Db250cm9sKTtcblxuICAgIC8vIGNvcHkgYWxsIHZhbHVlcyBmcm9tIHRoZSBzb3VyY2VzIGludG8gdGhlIHZhbHVlcyBoYXNoIG1hcCB0byBwcmV2ZW50IHJlbG9hZGluZ1xuICAgIHRoaXMuX2NhY2hlTWV0YVN1Yi5zdWJzY3JpcHRpb24gPSB0aGlzLnZhbHVlR3JvdXBzRnJvbVNvdXJjZXNTdGF0ZSQuc3Vic2NyaWJlKCh4KSA9PiB7XG4gICAgICBjb25zdCBoYXNoTWFwID0gdGhpcy5fdmFsdWVNZXRhSGFzaE1hcC52YWx1ZTtcbiAgICAgIHgudmFsdWUuZm9yRWFjaCgoeCkgPT4geC52YWx1ZXMuZm9yRWFjaCgoeSkgPT4gaGFzaE1hcC5zZXQoeS52YWx1ZSwgeSkpKTtcbiAgICB9KTtcbiAgfVxuXG4gIG92ZXJyaWRlIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHN1cGVyLm5nT25EZXN0cm95KCk7XG4gICAgdGhpcy5fdmFsdWVNZXRhSGFzaE1hcC5jb21wbGV0ZSgpO1xuICAgIHRoaXMuX2Rpc3BsYXlIYXNoTWFwLmNvbXBsZXRlKCk7XG4gICAgdGhpcy5fZm9ybUNvbnRyb2xPYnMuY29tcGxldGUoKTtcbiAgICB0aGlzLl9mcm9tT3BlblNvdXJjZS5jb21wbGV0ZSgpO1xuICAgIHRoaXMuX2xvYWRTb3VyY2VzLmNvbXBsZXRlKCk7XG4gICAgdGhpcy5jb250ZXh0LmRlc3Ryb3koKTtcbiAgfVxuXG4gIHJlYWRvbmx5IGhhbmRsZVNlbGVjdE9wdGlvbnM6IEhhbmRsZUFjdGlvbldpdGhDb250ZXh0PHVua25vd24+ID0gKF8sIGNvbnRleHQpID0+IHtcbiAgICBjb25zdCB7IG9wZW5Tb3VyY2UgfSA9IHRoaXM7XG5cbiAgICBpZiAob3BlblNvdXJjZSkge1xuICAgICAgY29uc3Qgc291cmNlT2JzID0gb3BlblNvdXJjZSgpO1xuICAgICAgY29udGV4dC5zdGFydFdvcmtpbmdXaXRoT2JzZXJ2YWJsZShcbiAgICAgICAgc291cmNlT2JzLnBpcGUoXG4gICAgICAgICAgZmlyc3QoKSxcbiAgICAgICAgICB0YXAoKHJlc3VsdDogU291cmNlU2VsZWN0T3BlblNvdXJjZVJlc3VsdDxNPikgPT4ge1xuICAgICAgICAgICAgY29uc3QgdmFsdWVzVG9BZGQgPSBtZXJnZUFycmF5cyhbcmVzdWx0LnNlbGVjdCwgcmVzdWx0Lm9wdGlvbnNdKTtcblxuICAgICAgICAgICAgaWYgKHZhbHVlc1RvQWRkLmxlbmd0aCkge1xuICAgICAgICAgICAgICB0aGlzLmFkZFRvT3BlblNvdXJjZU1hcCh2YWx1ZXNUb0FkZCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChyZXN1bHQuc2VsZWN0KSB7XG4gICAgICAgICAgICAgIHRoaXMuYWRkVG9DdXJyZW50VmFsdWUocmVzdWx0LnNlbGVjdC5tYXAoKHgpID0+IHRoaXMudmFsdWVSZWFkZXIoeCkpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KVxuICAgICAgICApXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb250ZXh0LnJlamVjdCgpO1xuICAgIH1cbiAgfTtcblxuICBwcml2YXRlIGFkZFRvT3BlblNvdXJjZU1hcChpbnB1dDogTVtdKSB7XG4gICAgY29uc3QgeyB2YWx1ZVJlYWRlciB9ID0gdGhpcztcbiAgICBjb25zdCB7IHZhbHVlczogbWV0YSwgdmFsdWVzU2V0OiBpbml0aWFsVmFsdWVzIH0gPSB0aGlzLl9mcm9tT3BlblNvdXJjZS52YWx1ZTtcblxuICAgIGNvbnN0IG5ld01ldGFGcm9tSW5wdXQ6IFNvdXJjZVNlbGVjdFZhbHVlPFQsIE0+W10gPSBbXTtcbiAgICBjb25zdCB2YWx1ZXNTZXQgPSBuZXcgU2V0KGluaXRpYWxWYWx1ZXMpO1xuXG4gICAgaW5wdXQuZm9yRWFjaCgoeCkgPT4ge1xuICAgICAgY29uc3QgdmFsdWUgPSB2YWx1ZVJlYWRlcih4KTtcblxuICAgICAgaWYgKCF2YWx1ZXNTZXQuaGFzKHZhbHVlKSkge1xuICAgICAgICBuZXdNZXRhRnJvbUlucHV0LnB1c2goeyBtZXRhOiB4LCB2YWx1ZSB9KTtcbiAgICAgICAgdmFsdWVzU2V0LmFkZCh2YWx1ZSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpZiAobmV3TWV0YUZyb21JbnB1dC5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLl9mcm9tT3BlblNvdXJjZS5uZXh0KHtcbiAgICAgICAgdmFsdWVzOiBbLi4ubWV0YSwgLi4ubmV3TWV0YUZyb21JbnB1dF0sXG4gICAgICAgIHZhbHVlc1NldDogdmFsdWVzU2V0XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFkZFRvQ3VycmVudFZhbHVlKHZhbHVlczogVFtdKSB7XG4gICAgY29uc3QgY3VycmVudFZhbHVlID0gYXNBcnJheSh0aGlzLmZvcm1Db250cm9sLnZhbHVlKTtcbiAgICBjb25zdCBuZXdWYWx1ZUFycmF5ID0gWy4uLmN1cnJlbnRWYWx1ZSwgLi4udmFsdWVzXTtcblxuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5tdWx0aXBsZSA/IHZhbHVlcyA6IGxhc3RWYWx1ZShuZXdWYWx1ZUFycmF5KTsgLy8gcGljayBsYXN0IHZhbHVlLCBhcyB0aGUgbGFzdCB2YWx1ZSBhZGRlZCBpcyB0aGUgbmV3ZXN0IHZhbHVlLlxuICAgIHRoaXMuZm9ybUNvbnRyb2wuc2V0VmFsdWUodmFsdWUpO1xuICAgIHRoaXMuZm9ybUNvbnRyb2wubWFya0FzRGlydHkoKTtcbiAgICB0aGlzLmZvcm1Db250cm9sLm1hcmtBc1RvdWNoZWQoKTtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImRieC1zb3VyY2Utc2VsZWN0LWZpZWxkXCI+XG4gIDxkaXYgY2xhc3M9XCJkYngtc291cmNlLXNlbGVjdC1maWVsZC1jb250ZW50XCI+XG4gICAgPG1hdC1zZWxlY3QgY2xhc3M9XCJkYngtc291cmNlLXNlbGVjdC1maWVsZC1zZWxlY3RcIiBbaWRdPVwiaWRcIiBbZm9ybUNvbnRyb2xdPVwiZm9ybUNvbnRyb2xcIiBbbXVsdGlwbGVdPVwicHJvcHMubXVsdGlwbGVcIj5cbiAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj1cImxldCB2YWx1ZSBvZiBub25Hcm91cGVkVmFsdWVzJCB8IGFzeW5jXCIgW3ZhbHVlXT1cInZhbHVlLnZhbHVlXCI+XG4gICAgICAgIHt7IHZhbHVlLmxhYmVsIH19XG4gICAgICA8L21hdC1vcHRpb24+XG4gICAgICA8bWF0LW9wdGdyb3VwICpuZ0Zvcj1cImxldCBvcHRpb25Hcm91cCBvZiBncm91cGVkT3B0aW9ucyQgfCBhc3luY1wiIFtsYWJlbF09XCJvcHRpb25Hcm91cC5sYWJlbFwiPlxuICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9XCJsZXQgdmFsdWUgb2Ygb3B0aW9uR3JvdXAudmFsdWVzXCIgW3ZhbHVlXT1cInZhbHVlLnZhbHVlXCI+XG4gICAgICAgICAge3sgdmFsdWUubGFiZWwgfX1cbiAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgPC9tYXQtb3B0Z3JvdXA+XG4gICAgPC9tYXQtc2VsZWN0PlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzaG93T3BlblNvdXJjZUJ1dHRvblwiPlxuICAgICAgPGRieC1idXR0b24tc3BhY2VyPjwvZGJ4LWJ1dHRvbi1zcGFjZXI+XG4gICAgICA8ZGJ4LWFjdGlvbiBkYnhBY3Rpb25WYWx1ZSBbZGJ4QWN0aW9uSGFuZGxlcl09XCJoYW5kbGVTZWxlY3RPcHRpb25zXCIgY2xhc3M9XCJkYngtc291cmNlLXNlbGVjdC1maWVsZC1idXR0b25cIj5cbiAgICAgICAgPGRieC1idXR0b24gZGJ4QWN0aW9uQnV0dG9uIFtpY29uT25seV09XCJ0cnVlXCIgW2ljb25dPVwic2VsZWN0QnV0dG9uSWNvblwiPjwvZGJ4LWJ1dHRvbj5cbiAgICAgIDwvZGJ4LWFjdGlvbj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgPC9kaXY+XG4gIDxkYngtbG9hZGluZyBjbGFzcz1cImRieC1zb3VyY2Utc2VsZWN0LWZpZWxkLWxvYWRpbmdcIiBbbGluZWFyXT1cInRydWVcIiBbY29udGV4dF09XCJjb250ZXh0XCI+PC9kYngtbG9hZGluZz5cbjwvZGl2PlxuIl19
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { formlyField, propsAndConfigForFieldConfig } from '../../field';
|
|
2
|
+
export function sourceSelectField(config) {
|
|
3
|
+
const { key, materialFormField } = config;
|
|
4
|
+
return formlyField({
|
|
5
|
+
key,
|
|
6
|
+
type: 'sourceselectfield',
|
|
7
|
+
...propsAndConfigForFieldConfig(config, {
|
|
8
|
+
...materialFormField,
|
|
9
|
+
...config,
|
|
10
|
+
autocomplete: false
|
|
11
|
+
})
|
|
12
|
+
});
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic291cmNlc2VsZWN0LmZpZWxkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZGJ4LWZvcm0vc3JjL2xpYi9mb3JtbHkvZmllbGQvc2VsZWN0aW9uL3NvdXJjZXNlbGVjdC9zb3VyY2VzZWxlY3QuZmllbGQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFzQixXQUFXLEVBQUUsNEJBQTRCLEVBQW1ELE1BQU0sYUFBYSxDQUFDO0FBTTdJLE1BQU0sVUFBVSxpQkFBaUIsQ0FBcUQsTUFBcUM7SUFDekgsTUFBTSxFQUFFLEdBQUcsRUFBRSxpQkFBaUIsRUFBRSxHQUFHLE1BQU0sQ0FBQztJQUMxQyxPQUFPLFdBQVcsQ0FBQztRQUNqQixHQUFHO1FBQ0gsSUFBSSxFQUFFLG1CQUFtQjtRQUN6QixHQUFHLDRCQUE0QixDQUFDLE1BQU0sRUFBRTtZQUN0QyxHQUFHLGlCQUFpQjtZQUNwQixHQUFHLE1BQU07WUFDVCxZQUFZLEVBQUUsS0FBSztTQUNwQixDQUFDO0tBQ0gsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFByaW1hdGl2ZUtleSB9IGZyb20gJ0BkZXJlZWtiL3V0aWwnO1xuaW1wb3J0IHsgRm9ybWx5RmllbGRDb25maWcgfSBmcm9tICdAbmd4LWZvcm1seS9jb3JlJztcbmltcG9ydCB7IExhYmVsZWRGaWVsZENvbmZpZywgZm9ybWx5RmllbGQsIHByb3BzQW5kQ29uZmlnRm9yRmllbGRDb25maWcsIERlc2NyaXB0aW9uRmllbGRDb25maWcsIE1hdGVyaWFsRm9ybUZpZWxkQ29uZmlnIH0gZnJvbSAnLi4vLi4vZmllbGQnO1xuaW1wb3J0IHsgU291cmNlU2VsZWN0RmllbGRQcm9wcyB9IGZyb20gJy4vc291cmNlc2VsZWN0LmZpZWxkLmNvbXBvbmVudCc7XG5cbi8vIE1BUks6IFRleHRcbmV4cG9ydCBpbnRlcmZhY2UgU291cmNlU2VsZWN0RmllbGRDb25maWc8VCBleHRlbmRzIFByaW1hdGl2ZUtleSA9IFByaW1hdGl2ZUtleSwgTSA9IHVua25vd24+IGV4dGVuZHMgTGFiZWxlZEZpZWxkQ29uZmlnLCBEZXNjcmlwdGlvbkZpZWxkQ29uZmlnLCBNYXRlcmlhbEZvcm1GaWVsZENvbmZpZywgU291cmNlU2VsZWN0RmllbGRQcm9wczxULCBNPiB7fVxuXG5leHBvcnQgZnVuY3Rpb24gc291cmNlU2VsZWN0RmllbGQ8VCBleHRlbmRzIFByaW1hdGl2ZUtleSA9IFByaW1hdGl2ZUtleSwgTSA9IHVua25vd24+KGNvbmZpZzogU291cmNlU2VsZWN0RmllbGRDb25maWc8VCwgTT4pOiBGb3JtbHlGaWVsZENvbmZpZyB7XG4gIGNvbnN0IHsga2V5LCBtYXRlcmlhbEZvcm1GaWVsZCB9ID0gY29uZmlnO1xuICByZXR1cm4gZm9ybWx5RmllbGQoe1xuICAgIGtleSxcbiAgICB0eXBlOiAnc291cmNlc2VsZWN0ZmllbGQnLFxuICAgIC4uLnByb3BzQW5kQ29uZmlnRm9yRmllbGRDb25maWcoY29uZmlnLCB7XG4gICAgICAuLi5tYXRlcmlhbEZvcm1GaWVsZCxcbiAgICAgIC4uLmNvbmZpZyxcbiAgICAgIGF1dG9jb21wbGV0ZTogZmFsc2VcbiAgICB9KVxuICB9KTtcbn1cbiJdfQ==
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
import { CommonModule } from '@angular/common';
|
|
2
|
+
import { NgModule } from '@angular/core';
|
|
3
|
+
import { FormsModule, ReactiveFormsModule } from '@angular/forms';
|
|
4
|
+
import { MatChipsModule } from '@angular/material/chips';
|
|
5
|
+
import { MatFormFieldModule } from '@angular/material/form-field';
|
|
6
|
+
import { MatIconModule } from '@angular/material/icon';
|
|
7
|
+
import { MatInputModule } from '@angular/material/input';
|
|
8
|
+
import { FormlyModule } from '@ngx-formly/core';
|
|
9
|
+
import { DbxDatePipeModule } from '@dereekb/dbx-core';
|
|
10
|
+
import { MatDatepickerModule } from '@angular/material/datepicker';
|
|
11
|
+
import { MatNativeDateModule } from '@angular/material/core';
|
|
12
|
+
import { FlexLayoutModule } from '@angular/flex-layout';
|
|
13
|
+
import { MatButtonModule } from '@angular/material/button';
|
|
14
|
+
import { MatMenuModule } from '@angular/material/menu';
|
|
15
|
+
import { MatDividerModule } from '@angular/material/divider';
|
|
16
|
+
import { DbxFormSourceSelectFieldComponent } from './sourceselect.field.component';
|
|
17
|
+
import { MatSelectModule } from '@angular/material/select';
|
|
18
|
+
import { DbxActionModule, DbxButtonModule, DbxLoadingModule } from '@dereekb/dbx-web';
|
|
19
|
+
import * as i0 from "@angular/core";
|
|
20
|
+
import * as i1 from "@ngx-formly/core";
|
|
21
|
+
export class DbxFormFormlySourceSelectModule {
|
|
22
|
+
}
|
|
23
|
+
DbxFormFormlySourceSelectModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: DbxFormFormlySourceSelectModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
24
|
+
DbxFormFormlySourceSelectModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "14.2.12", ngImport: i0, type: DbxFormFormlySourceSelectModule, declarations: [DbxFormSourceSelectFieldComponent], imports: [CommonModule,
|
|
25
|
+
FormsModule,
|
|
26
|
+
MatInputModule,
|
|
27
|
+
MatDividerModule,
|
|
28
|
+
MatFormFieldModule,
|
|
29
|
+
MatSelectModule,
|
|
30
|
+
MatButtonModule,
|
|
31
|
+
MatDatepickerModule,
|
|
32
|
+
MatNativeDateModule,
|
|
33
|
+
MatMenuModule,
|
|
34
|
+
ReactiveFormsModule,
|
|
35
|
+
DbxDatePipeModule,
|
|
36
|
+
DbxLoadingModule,
|
|
37
|
+
DbxButtonModule,
|
|
38
|
+
DbxActionModule,
|
|
39
|
+
MatChipsModule,
|
|
40
|
+
MatIconModule,
|
|
41
|
+
FlexLayoutModule, i1.FormlyModule], exports: [DbxFormSourceSelectFieldComponent] });
|
|
42
|
+
DbxFormFormlySourceSelectModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: DbxFormFormlySourceSelectModule, imports: [CommonModule,
|
|
43
|
+
FormsModule,
|
|
44
|
+
MatInputModule,
|
|
45
|
+
MatDividerModule,
|
|
46
|
+
MatFormFieldModule,
|
|
47
|
+
MatSelectModule,
|
|
48
|
+
MatButtonModule,
|
|
49
|
+
MatDatepickerModule,
|
|
50
|
+
MatNativeDateModule,
|
|
51
|
+
MatMenuModule,
|
|
52
|
+
ReactiveFormsModule,
|
|
53
|
+
DbxDatePipeModule,
|
|
54
|
+
DbxLoadingModule,
|
|
55
|
+
DbxButtonModule,
|
|
56
|
+
DbxActionModule,
|
|
57
|
+
MatChipsModule,
|
|
58
|
+
MatIconModule,
|
|
59
|
+
FlexLayoutModule,
|
|
60
|
+
FormlyModule.forChild({
|
|
61
|
+
types: [{ name: 'sourceselectfield', component: DbxFormSourceSelectFieldComponent, wrappers: ['form-field'] }]
|
|
62
|
+
})] });
|
|
63
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: DbxFormFormlySourceSelectModule, decorators: [{
|
|
64
|
+
type: NgModule,
|
|
65
|
+
args: [{
|
|
66
|
+
imports: [
|
|
67
|
+
CommonModule,
|
|
68
|
+
FormsModule,
|
|
69
|
+
MatInputModule,
|
|
70
|
+
MatDividerModule,
|
|
71
|
+
MatFormFieldModule,
|
|
72
|
+
MatSelectModule,
|
|
73
|
+
MatButtonModule,
|
|
74
|
+
MatDatepickerModule,
|
|
75
|
+
MatNativeDateModule,
|
|
76
|
+
MatMenuModule,
|
|
77
|
+
ReactiveFormsModule,
|
|
78
|
+
DbxDatePipeModule,
|
|
79
|
+
DbxLoadingModule,
|
|
80
|
+
DbxButtonModule,
|
|
81
|
+
DbxActionModule,
|
|
82
|
+
MatChipsModule,
|
|
83
|
+
MatIconModule,
|
|
84
|
+
FlexLayoutModule,
|
|
85
|
+
FormlyModule.forChild({
|
|
86
|
+
types: [{ name: 'sourceselectfield', component: DbxFormSourceSelectFieldComponent, wrappers: ['form-field'] }]
|
|
87
|
+
})
|
|
88
|
+
],
|
|
89
|
+
declarations: [DbxFormSourceSelectFieldComponent],
|
|
90
|
+
exports: [DbxFormSourceSelectFieldComponent]
|
|
91
|
+
}]
|
|
92
|
+
}] });
|
|
93
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic291cmNlc2VsZWN0LmZpZWxkLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2RieC1mb3JtL3NyYy9saWIvZm9ybWx5L2ZpZWxkL3NlbGVjdGlvbi9zb3VyY2VzZWxlY3Qvc291cmNlc2VsZWN0LmZpZWxkLm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUUsV0FBVyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDbEUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3pELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDekQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ25FLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzdELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3hELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDN0QsT0FBTyxFQUFFLGlDQUFpQyxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDbkYsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzNELE9BQU8sRUFBRSxlQUFlLEVBQUUsZUFBZSxFQUFFLGdCQUFnQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7OztBQTZCdEYsTUFBTSxPQUFPLCtCQUErQjs7NkhBQS9CLCtCQUErQjs4SEFBL0IsK0JBQStCLGlCQUgzQixpQ0FBaUMsYUF0QjlDLFlBQVk7UUFDWixXQUFXO1FBQ1gsY0FBYztRQUNkLGdCQUFnQjtRQUNoQixrQkFBa0I7UUFDbEIsZUFBZTtRQUNmLGVBQWU7UUFDZixtQkFBbUI7UUFDbkIsbUJBQW1CO1FBQ25CLGFBQWE7UUFDYixtQkFBbUI7UUFDbkIsaUJBQWlCO1FBQ2pCLGdCQUFnQjtRQUNoQixlQUFlO1FBQ2YsZUFBZTtRQUNmLGNBQWM7UUFDZCxhQUFhO1FBQ2IsZ0JBQWdCLDhCQU1SLGlDQUFpQzs4SEFFaEMsK0JBQStCLFlBekJ4QyxZQUFZO1FBQ1osV0FBVztRQUNYLGNBQWM7UUFDZCxnQkFBZ0I7UUFDaEIsa0JBQWtCO1FBQ2xCLGVBQWU7UUFDZixlQUFlO1FBQ2YsbUJBQW1CO1FBQ25CLG1CQUFtQjtRQUNuQixhQUFhO1FBQ2IsbUJBQW1CO1FBQ25CLGlCQUFpQjtRQUNqQixnQkFBZ0I7UUFDaEIsZUFBZTtRQUNmLGVBQWU7UUFDZixjQUFjO1FBQ2QsYUFBYTtRQUNiLGdCQUFnQjtRQUNoQixZQUFZLENBQUMsUUFBUSxDQUFDO1lBQ3BCLEtBQUssRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLG1CQUFtQixFQUFFLFNBQVMsRUFBRSxpQ0FBaUMsRUFBRSxRQUFRLEVBQUUsQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDO1NBQy9HLENBQUM7NEZBS08sK0JBQStCO2tCQTNCM0MsUUFBUTttQkFBQztvQkFDUixPQUFPLEVBQUU7d0JBQ1AsWUFBWTt3QkFDWixXQUFXO3dCQUNYLGNBQWM7d0JBQ2QsZ0JBQWdCO3dCQUNoQixrQkFBa0I7d0JBQ2xCLGVBQWU7d0JBQ2YsZUFBZTt3QkFDZixtQkFBbUI7d0JBQ25CLG1CQUFtQjt3QkFDbkIsYUFBYTt3QkFDYixtQkFBbUI7d0JBQ25CLGlCQUFpQjt3QkFDakIsZ0JBQWdCO3dCQUNoQixlQUFlO3dCQUNmLGVBQWU7d0JBQ2YsY0FBYzt3QkFDZCxhQUFhO3dCQUNiLGdCQUFnQjt3QkFDaEIsWUFBWSxDQUFDLFFBQVEsQ0FBQzs0QkFDcEIsS0FBSyxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsbUJBQW1CLEVBQUUsU0FBUyxFQUFFLGlDQUFpQyxFQUFFLFFBQVEsRUFBRSxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUM7eUJBQy9HLENBQUM7cUJBQ0g7b0JBQ0QsWUFBWSxFQUFFLENBQUMsaUNBQWlDLENBQUM7b0JBQ2pELE9BQU8sRUFBRSxDQUFDLGlDQUFpQyxDQUFDO2lCQUM3QyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybXNNb2R1bGUsIFJlYWN0aXZlRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBNYXRDaGlwc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2NoaXBzJztcbmltcG9ydCB7IE1hdEZvcm1GaWVsZE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2Zvcm0tZmllbGQnO1xuaW1wb3J0IHsgTWF0SWNvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2ljb24nO1xuaW1wb3J0IHsgTWF0SW5wdXRNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pbnB1dCc7XG5pbXBvcnQgeyBGb3JtbHlNb2R1bGUgfSBmcm9tICdAbmd4LWZvcm1seS9jb3JlJztcbmltcG9ydCB7IERieERhdGVQaXBlTW9kdWxlIH0gZnJvbSAnQGRlcmVla2IvZGJ4LWNvcmUnO1xuaW1wb3J0IHsgTWF0RGF0ZXBpY2tlck1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RhdGVwaWNrZXInO1xuaW1wb3J0IHsgTWF0TmF0aXZlRGF0ZU1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2NvcmUnO1xuaW1wb3J0IHsgRmxleExheW91dE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2ZsZXgtbGF5b3V0JztcbmltcG9ydCB7IE1hdEJ1dHRvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2J1dHRvbic7XG5pbXBvcnQgeyBNYXRNZW51TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvbWVudSc7XG5pbXBvcnQgeyBNYXREaXZpZGVyTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGl2aWRlcic7XG5pbXBvcnQgeyBEYnhGb3JtU291cmNlU2VsZWN0RmllbGRDb21wb25lbnQgfSBmcm9tICcuL3NvdXJjZXNlbGVjdC5maWVsZC5jb21wb25lbnQnO1xuaW1wb3J0IHsgTWF0U2VsZWN0TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc2VsZWN0JztcbmltcG9ydCB7IERieEFjdGlvbk1vZHVsZSwgRGJ4QnV0dG9uTW9kdWxlLCBEYnhMb2FkaW5nTW9kdWxlIH0gZnJvbSAnQGRlcmVla2IvZGJ4LXdlYic7XG5cbkBOZ01vZHVsZSh7XG4gIGltcG9ydHM6IFtcbiAgICBDb21tb25Nb2R1bGUsXG4gICAgRm9ybXNNb2R1bGUsXG4gICAgTWF0SW5wdXRNb2R1bGUsXG4gICAgTWF0RGl2aWRlck1vZHVsZSxcbiAgICBNYXRGb3JtRmllbGRNb2R1bGUsXG4gICAgTWF0U2VsZWN0TW9kdWxlLFxuICAgIE1hdEJ1dHRvbk1vZHVsZSxcbiAgICBNYXREYXRlcGlja2VyTW9kdWxlLFxuICAgIE1hdE5hdGl2ZURhdGVNb2R1bGUsXG4gICAgTWF0TWVudU1vZHVsZSxcbiAgICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxuICAgIERieERhdGVQaXBlTW9kdWxlLFxuICAgIERieExvYWRpbmdNb2R1bGUsXG4gICAgRGJ4QnV0dG9uTW9kdWxlLFxuICAgIERieEFjdGlvbk1vZHVsZSxcbiAgICBNYXRDaGlwc01vZHVsZSxcbiAgICBNYXRJY29uTW9kdWxlLFxuICAgIEZsZXhMYXlvdXRNb2R1bGUsXG4gICAgRm9ybWx5TW9kdWxlLmZvckNoaWxkKHtcbiAgICAgIHR5cGVzOiBbeyBuYW1lOiAnc291cmNlc2VsZWN0ZmllbGQnLCBjb21wb25lbnQ6IERieEZvcm1Tb3VyY2VTZWxlY3RGaWVsZENvbXBvbmVudCwgd3JhcHBlcnM6IFsnZm9ybS1maWVsZCddIH1dXG4gICAgfSlcbiAgXSxcbiAgZGVjbGFyYXRpb25zOiBbRGJ4Rm9ybVNvdXJjZVNlbGVjdEZpZWxkQ29tcG9uZW50XSxcbiAgZXhwb3J0czogW0RieEZvcm1Tb3VyY2VTZWxlY3RGaWVsZENvbXBvbmVudF1cbn0pXG5leHBvcnQgY2xhc3MgRGJ4Rm9ybUZvcm1seVNvdXJjZVNlbGVjdE1vZHVsZSB7fVxuIl19
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export {};
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic291cmNlc2VsZWN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZGJ4LWZvcm0vc3JjL2xpYi9mb3JtbHkvZmllbGQvc2VsZWN0aW9uL3NvdXJjZXNlbGVjdC9zb3VyY2VzZWxlY3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFNlbGVjdGlvbkRpc3BsYXlWYWx1ZSB9IGZyb20gJy4vLi4vc2VsZWN0aW9uJztcbmltcG9ydCB7IExvYWRpbmdTdGF0ZSB9IGZyb20gJ0BkZXJlZWtiL3J4anMnO1xuaW1wb3J0IHsgRmFjdG9yeSwgRmFjdG9yeVdpdGhSZXF1aXJlZElucHV0LCBNYXBGdW5jdGlvbiwgTWF5YmUsIFByaW1hdGl2ZUtleSB9IGZyb20gJ0BkZXJlZWtiL3V0aWwnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFNvdXJjZVNlbGVjdFZhbHVlPFQgZXh0ZW5kcyBQcmltYXRpdmVLZXkgPSBQcmltYXRpdmVLZXksIE0gPSB1bmtub3duPiB7XG4gIHZhbHVlOiBUO1xuICBtZXRhOiBNO1xufVxuXG4vKipcbiAqIEdyb3VwIG9mIFNvdXJjZVNlbGVjdFZhbHVlcyB3aXRoIGEgbGFiZWwuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU291cmNlU2VsZWN0VmFsdWVHcm91cDxUIGV4dGVuZHMgUHJpbWF0aXZlS2V5ID0gUHJpbWF0aXZlS2V5LCBNID0gdW5rbm93bj4ge1xuICAvKipcbiAgICogTGFiZWwgZm9yIHRoaXMgc291cmNlLlxuICAgKi9cbiAgcmVhZG9ubHkgbGFiZWw6IHN0cmluZztcbiAgLyoqXG4gICAqIFZhbHVlc1xuICAgKi9cbiAgcmVhZG9ubHkgdmFsdWVzOiBTb3VyY2VTZWxlY3RWYWx1ZTxULCBNPltdO1xufVxuXG4vKipcbiAqIERpc3BsYXkgdmFsdWUgY29uZmlndXJhdGlvbiBmb3IgYSBTb3VyY2VTZWxlY3RWYWx1ZS5cbiAqL1xuZXhwb3J0IHR5cGUgU291cmNlU2VsZWN0RGlzcGxheVZhbHVlPFQgZXh0ZW5kcyBQcmltYXRpdmVLZXkgPSBQcmltYXRpdmVLZXksIE0gPSB1bmtub3duPiA9IE9taXQ8U2VsZWN0aW9uRGlzcGxheVZhbHVlPFQsIE0+LCAnbWV0YSc+ICYgUGljazxTb3VyY2VTZWxlY3RWYWx1ZTxULCBNPiwgJ21ldGEnPjtcblxuLyoqXG4gKiBEaXNwbGF5IHZhbHVlIGNvbmZpZ3VyYXRpb24gZm9yIGEgU291cmNlU2VsZWN0VmFsdWUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU291cmNlU2VsZWN0RGlzcGxheVZhbHVlR3JvdXA8VCBleHRlbmRzIFByaW1hdGl2ZUtleSA9IFByaW1hdGl2ZUtleSwgTSA9IHVua25vd24+IHtcbiAgLyoqXG4gICAqIExhYmVsIGZvciB0aGlzIHNvdXJjZS5cbiAgICovXG4gIHJlYWRvbmx5IGxhYmVsOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBWYWx1ZXNcbiAgICovXG4gIHJlYWRvbmx5IHZhbHVlczogU291cmNlU2VsZWN0RGlzcGxheVZhbHVlPFQsIE0+W107XG59XG5cbi8qKlxuICogT3B0aW9ucyBmb3IgYSBTb3VyY2VTZWxlY3QgaW5wdXQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU291cmNlU2VsZWN0T3B0aW9uczxUIGV4dGVuZHMgUHJpbWF0aXZlS2V5ID0gUHJpbWF0aXZlS2V5LCBNID0gdW5rbm93bj4ge1xuICByZWFkb25seSBub25Hcm91cGVkVmFsdWVzOiBTb3VyY2VTZWxlY3REaXNwbGF5VmFsdWU8VCwgTT5bXTtcbiAgcmVhZG9ubHkgZ3JvdXBlZFZhbHVlczogU291cmNlU2VsZWN0RGlzcGxheVZhbHVlR3JvdXA8VCwgTT5bXTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGFuIG9ic2VydmFibGUgdGhhdCBsb2FkcyBhbGwgdGhlIGRpc3BsYXkgaW5mbyBmb3IgdGhlIGlucHV0IHZhbHVlcy5cbiAqL1xuZXhwb3J0IHR5cGUgU291cmNlU2VsZWN0RGlzcGxheUZ1bmN0aW9uPFQgZXh0ZW5kcyBQcmltYXRpdmVLZXkgPSBQcmltYXRpdmVLZXksIE0gPSB1bmtub3duPiA9IE1hcEZ1bmN0aW9uPFNvdXJjZVNlbGVjdFZhbHVlPFQsIE0+W10sIE9ic2VydmFibGU8U291cmNlU2VsZWN0RGlzcGxheVZhbHVlPFQsIE0+W10+PjtcblxuLyoqXG4gKiBSZWFkcyB0aGUgdmFsdWUgZnJvbSB0aGUgaW5wdXQgbWV0YSB2YWx1ZS4gU2hvdWxkIGFsd2F5cyByZXR1cm4gdGhlIHNhbWUgdmFsdWUuXG4gKi9cbmV4cG9ydCB0eXBlIFNvdXJjZVNlbGVjdE1ldGFWYWx1ZVJlYWRlcjxUIGV4dGVuZHMgUHJpbWF0aXZlS2V5ID0gUHJpbWF0aXZlS2V5LCBNID0gdW5rbm93bj4gPSBNYXBGdW5jdGlvbjxNLCBUPjtcblxuLyoqXG4gKiBSZXR1cm5zIGFuIG9ic2VydmFibGUgdGhhdCBsb2FkcyB0aGUgbWV0YWRhdGEgb2YgdGhlIGlucHV0IHZhbHVlcy5cbiAqL1xuZXhwb3J0IHR5cGUgU291cmNlU2VsZWN0VmFsdWVNZXRhTG9hZGVyPFQgZXh0ZW5kcyBQcmltYXRpdmVLZXkgPSBQcmltYXRpdmVLZXksIE0gPSB1bmtub3duPiA9IEZhY3RvcnlXaXRoUmVxdWlyZWRJbnB1dDxPYnNlcnZhYmxlPE1bXT4sIFRbXT47XG5cbi8qKlxuICogUmV0dXJucyBhbiBvYnNlcnZhYmxlIHRoYXQgcmV0dXJucyBhbiBhcnJheSBvZiBtZXRhIHZhbHVlcyB0byBiZSBhZGRlZCB0byB0aGUgc2VsZWN0aW9uLlxuICovXG5leHBvcnQgdHlwZSBTb3VyY2VTZWxlY3RPcGVuRnVuY3Rpb248TSA9IHVua25vd24+ID0gRmFjdG9yeTxPYnNlcnZhYmxlPFNvdXJjZVNlbGVjdE9wZW5Tb3VyY2VSZXN1bHQ8TT4+PjtcblxuLyoqXG4gKiBSZXR1cm5zIGFuIG9ic2VydmFibGUgdGhhdCByZXR1cm5zIGFuIGFycmF5IG9mIG1ldGEgdmFsdWVzIHRvIGJlIGFkZGVkIHRvIHRoZSBzZWxlY3Rpb24uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU291cmNlU2VsZWN0T3BlblNvdXJjZVJlc3VsdDxNID0gdW5rbm93bj4ge1xuICAvKipcbiAgICogTmV3IHZhbHVlcyB0byBzZWxlY3QsIGlmIGFwcGxpY2FibGUuXG4gICAqL1xuICByZWFkb25seSBzZWxlY3Q/OiBNYXliZTxNW10+O1xuICAvKipcbiAgICogTmV3IG9wdGlvbnMgdG8gbWFrZSBhdmFpbGFibGUuXG4gICAqL1xuICByZWFkb25seSBvcHRpb25zPzogTWF5YmU8TVtdPjtcbn1cblxuLyoqXG4gKiBGdW5jdGlvbiB1c2VkIHRvIHJldHVybiBhbiBvYnNlcnZhYmxlIGZvciBhbiBhcnJheSBvZiBTb3VyY2VTZWxlY3RMb2FkU291cmNlIHZhbHVlcy5cbiAqL1xuZXhwb3J0IHR5cGUgU291cmNlU2VsZWN0TG9hZFNvdXJjZXNGdW5jdGlvbjxNID0gdW5rbm93bj4gPSBGYWN0b3J5PE9ic2VydmFibGU8U291cmNlU2VsZWN0TG9hZFNvdXJjZTxNPltdPj47XG5cbi8qKlxuICogU291cmNlIHRoYXQgaGFzIGEgbGFiZWwgYW5kIGFuIG9ic2VydmFibGUgb2YgbWV0YSB2YWx1ZXMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU291cmNlU2VsZWN0TG9hZFNvdXJjZTxNID0gdW5rbm93bj4ge1xuICAvKipcbiAgICogTGFiZWwgZm9yIHRoaXMgc291cmNlLlxuICAgKi9cbiAgcmVhZG9ubHkgbGFiZWw6IHN0cmluZztcbiAgLyoqXG4gICAqIE1ldGFkYXRhIGxvYWRlZCBmcm9tIHRoaXMgc291cmNlLlxuICAgKi9cbiAgcmVhZG9ubHkgbWV0YTogT2JzZXJ2YWJsZTxMb2FkaW5nU3RhdGU8TVtdPj47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU291cmNlU2VsZWN0TG9hZFNvdXJjZUxvYWRpbmdTdGF0ZTxNID0gdW5rbm93bj4gZXh0ZW5kcyBMb2FkaW5nU3RhdGU8TVtdPiB7XG4gIC8qKlxuICAgKiBMYWJlbCBmb3IgdGhpcyBzb3VyY2UuXG4gICAqL1xuICByZWFkb25seSBsYWJlbDogc3RyaW5nO1xufVxuIl19
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { formlyField, propsAndConfigForFieldConfig } from '../field';
|
|
2
2
|
export function textEditorField(config) {
|
|
3
|
-
const { key, minLength, maxLength } = config;
|
|
3
|
+
const { key, minLength, maxLength, materialFormField } = config;
|
|
4
4
|
const fieldConfig = formlyField({
|
|
5
5
|
key,
|
|
6
6
|
type: 'texteditor',
|
|
@@ -11,10 +11,11 @@ export function textEditorField(config) {
|
|
|
11
11
|
updateOn: 'blur'
|
|
12
12
|
},
|
|
13
13
|
...propsAndConfigForFieldConfig(config, {
|
|
14
|
+
...materialFormField,
|
|
14
15
|
minLength,
|
|
15
16
|
maxLength
|
|
16
17
|
})
|
|
17
18
|
});
|
|
18
19
|
return fieldConfig;
|
|
19
20
|
}
|
|
20
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
21
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGV4dGVkaXRvci5maWVsZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2RieC1mb3JtL3NyYy9saWIvZm9ybWx5L2ZpZWxkL3RleHRlZGl0b3IvdGV4dGVkaXRvci5maWVsZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEVBQXNCLFdBQVcsRUFBRSw0QkFBNEIsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUt6RixNQUFNLFVBQVUsZUFBZSxDQUFDLE1BQTZCO0lBQzNELE1BQU0sRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxpQkFBaUIsRUFBRSxHQUFHLE1BQU0sQ0FBQztJQUNoRSxNQUFNLFdBQVcsR0FBc0IsV0FBVyxDQUFDO1FBQ2pELEdBQUc7UUFDSCxJQUFJLEVBQUUsWUFBWTtRQUNsQixZQUFZLEVBQUUsRUFBRTtRQUNoQixZQUFZLEVBQUU7WUFDWixvRUFBb0U7WUFDcEUsZ0dBQWdHO1lBQ2hHLFFBQVEsRUFBRSxNQUFNO1NBQ2pCO1FBQ0QsR0FBRyw0QkFBNEIsQ0FBQyxNQUFNLEVBQUU7WUFDdEMsR0FBRyxpQkFBaUI7WUFDcEIsU0FBUztZQUNULFNBQVM7U0FDVixDQUFDO0tBQ0gsQ0FBQyxDQUFDO0lBRUgsT0FBTyxXQUFXLENBQUM7QUFDckIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERlc2NyaXB0aW9uRmllbGRDb25maWcsIE1hdGVyaWFsRm9ybUZpZWxkQ29uZmlnIH0gZnJvbSAnLi8uLi9maWVsZCc7XG5pbXBvcnQgeyBGb3JtbHlGaWVsZENvbmZpZyB9IGZyb20gJ0BuZ3gtZm9ybWx5L2NvcmUnO1xuaW1wb3J0IHsgTGFiZWxlZEZpZWxkQ29uZmlnLCBmb3JtbHlGaWVsZCwgcHJvcHNBbmRDb25maWdGb3JGaWVsZENvbmZpZyB9IGZyb20gJy4uL2ZpZWxkJztcbmltcG9ydCB7IFRleHRGaWVsZExlbmd0aENvbmZpZyB9IGZyb20gJy4uL3ZhbHVlL3RleHQvdGV4dC5maWVsZCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgVGV4dEVkaXRvckZpZWxkQ29uZmlnIGV4dGVuZHMgTGFiZWxlZEZpZWxkQ29uZmlnLCBEZXNjcmlwdGlvbkZpZWxkQ29uZmlnLCBUZXh0RmllbGRMZW5ndGhDb25maWcsIE1hdGVyaWFsRm9ybUZpZWxkQ29uZmlnIHt9XG5cbmV4cG9ydCBmdW5jdGlvbiB0ZXh0RWRpdG9yRmllbGQoY29uZmlnOiBUZXh0RWRpdG9yRmllbGRDb25maWcpOiBGb3JtbHlGaWVsZENvbmZpZyB7XG4gIGNvbnN0IHsga2V5LCBtaW5MZW5ndGgsIG1heExlbmd0aCwgbWF0ZXJpYWxGb3JtRmllbGQgfSA9IGNvbmZpZztcbiAgY29uc3QgZmllbGRDb25maWc6IEZvcm1seUZpZWxkQ29uZmlnID0gZm9ybWx5RmllbGQoe1xuICAgIGtleSxcbiAgICB0eXBlOiAndGV4dGVkaXRvcicsXG4gICAgZGVmYXVsdFZhbHVlOiAnJywgLy8gU2V0IHRvIGFsd2F5cyBnZXQgYSBzdHJpbmcgYXMgYSByZXN1bHQuXG4gICAgbW9kZWxPcHRpb25zOiB7XG4gICAgICAvLyBodHRwczovL2Zvcm1seS5kZXYvZXhhbXBsZXMvdmFsaWRhdGlvbi9hc3luYy12YWxpZGF0aW9uLXVwZGF0ZS1vblxuICAgICAgLy8gU2V0IHRvIHRyaWdnZXIgdmFsdWUgdXBkYXRlIG9uIGJsdXJzIHdpdGggdGhlIGZvcm0uIEhvd2V2ZXIsIHRoZSB2YWx1ZSBpcyBzZXQgaW50ZXJuYWxseSB0b28uXG4gICAgICB1cGRhdGVPbjogJ2JsdXInXG4gICAgfSxcbiAgICAuLi5wcm9wc0FuZENvbmZpZ0ZvckZpZWxkQ29uZmlnKGNvbmZpZywge1xuICAgICAgLi4ubWF0ZXJpYWxGb3JtRmllbGQsXG4gICAgICBtaW5MZW5ndGgsXG4gICAgICBtYXhMZW5ndGhcbiAgICB9KVxuICB9KTtcblxuICByZXR1cm4gZmllbGRDb25maWc7XG59XG4iXX0=
|