ecabs-components 1.1.65 → 1.1.67
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/README.md +4 -0
- package/esm2022/lib/base/pipes/phone-number-country-code.pipe.mjs +2 -2
- package/esm2022/lib/base/utils/phone-number.utils.mjs +2 -2
- package/esm2022/lib/ecabs-chip-autocomplete/ecabs-chip-autocomplete.component.mjs +35 -8
- package/esm2022/lib/ecabs-date-range-picker-v2/ecabs-date-range-picker-v2.component.mjs +57 -46
- package/esm2022/lib/ecabs-time-range-input-v2/ecabs-time-range-input-v2.component.mjs +33 -23
- package/esm2022/public-api.mjs +1 -1
- package/fesm2022/ecabs-components.mjs +114 -66
- package/fesm2022/ecabs-components.mjs.map +1 -1
- package/lib/base/utils/phone-number.utils.d.ts +1 -1
- package/lib/ecabs-chip-autocomplete/ecabs-chip-autocomplete.component.d.ts +8 -3
- package/lib/ecabs-date-range-picker-v2/ecabs-date-range-picker-v2.component.d.ts +6 -7
- package/lib/ecabs-time-range-input-v2/ecabs-time-range-input-v2.component.d.ts +2 -1
- package/package.json +1 -1
- package/src/assets/styles/tailwind/index.scss +1 -1
package/README.md
CHANGED
|
@@ -127,3 +127,7 @@ To get more help on the Angular CLI use `ng help` or go check out the [Angular C
|
|
|
127
127
|
- **v1.1.63** — Add `EcabsSegmentComponent`.
|
|
128
128
|
- Update `EcabsSelectV2` to be more robust when handling multiple selections.
|
|
129
129
|
- **v1.1.64** — Refactor `EcabsChipAutocomplete` logic, improve component styles/disabled states, and update button styles.
|
|
130
|
+
- **v1.1.65** — `EcabsInputRange`: Remove padding and background styling.
|
|
131
|
+
- **v1.1.66** — Suppress emission of an empty query on refocusing after selection of option from `EcabsChipAutocomplete`.
|
|
132
|
+
- **v1.1.67** — Add support for optional "to" (end date) for `EcabsDateRangePickerV2Component`.
|
|
133
|
+
- Add allow cross-midnight time ranges for `EcabsTimeRangeInputV2Component`.
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Pipe } from '@angular/core';
|
|
2
|
-
import { extractPhoneNumberCode } from
|
|
2
|
+
import { extractPhoneNumberCode } from '../utils/phone-number.utils';
|
|
3
3
|
import * as i0 from "@angular/core";
|
|
4
4
|
export class NumberToCountryCodePipe {
|
|
5
5
|
transform(phoneNumber, type = 'iso', withFlagClass = false) {
|
|
@@ -15,4 +15,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
15
15
|
standalone: true,
|
|
16
16
|
}]
|
|
17
17
|
}] });
|
|
18
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
18
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGhvbmUtbnVtYmVyLWNvdW50cnktY29kZS5waXBlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZWNhYnMtY29tcG9uZW50cy9zcmMvbGliL2Jhc2UvcGlwZXMvcGhvbmUtbnVtYmVyLWNvdW50cnktY29kZS5waXBlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxJQUFJLEVBQWlCLE1BQU0sZUFBZSxDQUFDO0FBRXBELE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDZCQUE2QixDQUFDOztBQU1yRSxNQUFNLE9BQU8sdUJBQXVCO0lBQ2xDLFNBQVMsQ0FDUCxXQUEwQixFQUMxQixPQUE0QixLQUFLLEVBQ2pDLGFBQWEsR0FBRyxLQUFLO1FBRXJCLE9BQU8sc0JBQXNCLENBQUMsV0FBVyxFQUFFLElBQUksRUFBRSxhQUFhLENBQUMsQ0FBQztJQUNsRSxDQUFDO3dHQVBVLHVCQUF1QjtzR0FBdkIsdUJBQXVCOzs0RkFBdkIsdUJBQXVCO2tCQUpuQyxJQUFJO21CQUFDO29CQUNKLElBQUksRUFBRSxxQkFBcUI7b0JBQzNCLFVBQVUsRUFBRSxJQUFJO2lCQUNqQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFBpcGUsIFBpcGVUcmFuc2Zvcm0gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgUGhvbmVOdW1iZXJDb2RlVHlwZSB9IGZyb20gJy4uL21vZGVscy9waG9uZS5tb2RlbHMnO1xyXG5pbXBvcnQgeyBleHRyYWN0UGhvbmVOdW1iZXJDb2RlIH0gZnJvbSAnLi4vdXRpbHMvcGhvbmUtbnVtYmVyLnV0aWxzJztcclxuXHJcbkBQaXBlKHtcclxuICBuYW1lOiAnbnVtYmVyVG9Db3VudHJ5Q29kZScsXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxufSlcclxuZXhwb3J0IGNsYXNzIE51bWJlclRvQ291bnRyeUNvZGVQaXBlIGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSB7XHJcbiAgdHJhbnNmb3JtKFxyXG4gICAgcGhvbmVOdW1iZXI6IHN0cmluZyB8IG51bGwsXHJcbiAgICB0eXBlOiBQaG9uZU51bWJlckNvZGVUeXBlID0gJ2lzbycsXHJcbiAgICB3aXRoRmxhZ0NsYXNzID0gZmFsc2UsXHJcbiAgKTogc3RyaW5nIHwgbnVsbCB7XHJcbiAgICByZXR1cm4gZXh0cmFjdFBob25lTnVtYmVyQ29kZShwaG9uZU51bWJlciwgdHlwZSwgd2l0aEZsYWdDbGFzcyk7XHJcbiAgfVxyXG59XHJcbiJdfQ==
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { parsePhoneNumberFromString } from
|
|
1
|
+
import { parsePhoneNumberFromString } from 'libphonenumber-js';
|
|
2
2
|
export function extractPhoneNumberCode(phoneNumber, type = 'iso', withFlagClass = false) {
|
|
3
3
|
if (!phoneNumber) {
|
|
4
4
|
return null;
|
|
@@ -23,4 +23,4 @@ export function extractCountryFromIso(isoCode, region = ['en-GB']) {
|
|
|
23
23
|
const displayNames = new Intl.DisplayNames(region, { type: 'region' });
|
|
24
24
|
return displayNames.of(isoCode.toUpperCase() ?? isoCode);
|
|
25
25
|
}
|
|
26
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
26
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGhvbmUtbnVtYmVyLnV0aWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZWNhYnMtY29tcG9uZW50cy9zcmMvbGliL2Jhc2UvdXRpbHMvcGhvbmUtbnVtYmVyLnV0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBRS9ELE1BQU0sVUFBVSxzQkFBc0IsQ0FDcEMsV0FBMEIsRUFDMUIsT0FBNEIsS0FBSyxFQUNqQyxhQUFhLEdBQUcsS0FBSztJQUVyQixJQUFJLENBQUMsV0FBVyxFQUFFO1FBQ2hCLE9BQU8sSUFBSSxDQUFDO0tBQ2I7SUFFRCxNQUFNLGlCQUFpQixHQUFHLDBCQUEwQixDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBRWxFLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxPQUFPLEVBQUUsRUFBRTtRQUNqQyxPQUFPLElBQUksQ0FBQztLQUNiO0lBRUQsTUFBTSxLQUFLLEdBQ1QsSUFBSSxLQUFLLFNBQVM7UUFDaEIsQ0FBQyxDQUFDLGlCQUFpQixDQUFDLGtCQUFrQjtRQUN0QyxDQUFDLENBQUMsaUJBQWlCLENBQUMsT0FBTyxFQUFFLFdBQVcsRUFBRSxDQUFDO0lBRS9DLElBQUksQ0FBQyxLQUFLLEVBQUU7UUFDVixPQUFPLElBQUksQ0FBQztLQUNiO0lBRUQsT0FBTyxhQUFhLENBQUMsQ0FBQyxDQUFDLFNBQVMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztBQUNsRCxDQUFDO0FBRUQsTUFBTSxVQUFVLGtCQUFrQixDQUFDLFdBQTBCO0lBQzNELE1BQU0sSUFBSSxHQUFHLHNCQUFzQixDQUFDLFdBQVcsRUFBRSxTQUFTLENBQUMsQ0FBQztJQUU1RCxPQUFPLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0FBQ2xDLENBQUM7QUFFRCxNQUFNLFVBQVUscUJBQXFCLENBQ25DLE9BQXNCLEVBQ3RCLE1BQU0sR0FBRyxDQUFDLE9BQU8sQ0FBQztJQUVsQixNQUFNLFlBQVksR0FBRyxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxFQUFFLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUM7SUFFdkUsT0FBTyxZQUFZLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUUsSUFBSSxPQUFPLENBQUMsQ0FBQztBQUMzRCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUGhvbmVOdW1iZXJDb2RlVHlwZSB9IGZyb20gJy4uL21vZGVscy9waG9uZS5tb2RlbHMnO1xyXG5pbXBvcnQgeyBwYXJzZVBob25lTnVtYmVyRnJvbVN0cmluZyB9IGZyb20gJ2xpYnBob25lbnVtYmVyLWpzJztcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBleHRyYWN0UGhvbmVOdW1iZXJDb2RlKFxyXG4gIHBob25lTnVtYmVyOiBzdHJpbmcgfCBudWxsLFxyXG4gIHR5cGU6IFBob25lTnVtYmVyQ29kZVR5cGUgPSAnaXNvJyxcclxuICB3aXRoRmxhZ0NsYXNzID0gZmFsc2UsXHJcbik6IHN0cmluZyB8IG51bGwge1xyXG4gIGlmICghcGhvbmVOdW1iZXIpIHtcclxuICAgIHJldHVybiBudWxsO1xyXG4gIH1cclxuXHJcbiAgY29uc3QgcGFyc2VkUGhvbmVOdW1iZXIgPSBwYXJzZVBob25lTnVtYmVyRnJvbVN0cmluZyhwaG9uZU51bWJlcik7XHJcblxyXG4gIGlmICghcGFyc2VkUGhvbmVOdW1iZXI/LmlzVmFsaWQoKSkge1xyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfVxyXG5cclxuICBjb25zdCB2YWx1ZSA9XHJcbiAgICB0eXBlID09PSAnY2FsbGluZydcclxuICAgICAgPyBwYXJzZWRQaG9uZU51bWJlci5jb3VudHJ5Q2FsbGluZ0NvZGVcclxuICAgICAgOiBwYXJzZWRQaG9uZU51bWJlci5jb3VudHJ5Py50b0xvd2VyQ2FzZSgpO1xyXG5cclxuICBpZiAoIXZhbHVlKSB7XHJcbiAgICByZXR1cm4gbnVsbDtcclxuICB9XHJcblxyXG4gIHJldHVybiB3aXRoRmxhZ0NsYXNzID8gYGZpIGZpLSR7dmFsdWV9YCA6IHZhbHVlO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZXh0cmFjdERpYWxpbmdDb2RlKHBob25lTnVtYmVyOiBzdHJpbmcgfCBudWxsKTogc3RyaW5nIHwgbnVsbCB7XHJcbiAgY29uc3QgY29kZSA9IGV4dHJhY3RQaG9uZU51bWJlckNvZGUocGhvbmVOdW1iZXIsICdjYWxsaW5nJyk7XHJcblxyXG4gIHJldHVybiBjb2RlID8gYCske2NvZGV9YCA6IG51bGw7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBleHRyYWN0Q291bnRyeUZyb21Jc28oXHJcbiAgaXNvQ29kZTogc3RyaW5nIHwgbnVsbCxcclxuICByZWdpb24gPSBbJ2VuLUdCJ10sXHJcbik6IHN0cmluZyB8IG51bGwge1xyXG4gIGNvbnN0IGRpc3BsYXlOYW1lcyA9IG5ldyBJbnRsLkRpc3BsYXlOYW1lcyhyZWdpb24sIHsgdHlwZTogJ3JlZ2lvbicgfSk7XHJcblxyXG4gIHJldHVybiBkaXNwbGF5TmFtZXMub2YoaXNvQ29kZS50b1VwcGVyQ2FzZSgpID8/IGlzb0NvZGUpO1xyXG59XHJcbiJdfQ==
|
|
@@ -14,6 +14,7 @@ import { NgxPhosphorIconsLightFileModule } from 'ngx-phosphor-icons';
|
|
|
14
14
|
import { MatTooltipModule } from '@angular/material/tooltip';
|
|
15
15
|
import { EcabsPipesModule } from '../base/pipes/pipes.module';
|
|
16
16
|
import { distinctUntilChanged } from 'rxjs/operators';
|
|
17
|
+
import { EcabsLoadingModule } from "../ecabs-loading/ecabs-loading.module";
|
|
17
18
|
import * as i0 from "@angular/core";
|
|
18
19
|
import * as i1 from "@angular/common";
|
|
19
20
|
import * as i2 from "@angular/material/chips";
|
|
@@ -25,15 +26,18 @@ import * as i7 from "@angular/material/input";
|
|
|
25
26
|
import * as i8 from "../base/element-wrapper/element-wrapper.component";
|
|
26
27
|
import * as i9 from "@angular/material/tooltip";
|
|
27
28
|
import * as i10 from "../base/pipes/truncate.pipe";
|
|
29
|
+
import * as i11 from "../ecabs-loading/spinner/spinner.component";
|
|
28
30
|
export class EcabsChipAutocompleteComponent extends EcabsElementBaseComponent {
|
|
29
31
|
document;
|
|
30
32
|
inputRef;
|
|
31
33
|
visibleOptions = 8.5;
|
|
32
34
|
autoActiveFirstOption = true;
|
|
33
35
|
noResultsText = 'No results found';
|
|
36
|
+
loadingText = 'Loading...';
|
|
34
37
|
compareFn = Object.is;
|
|
35
38
|
avatarTemplate;
|
|
36
39
|
truncateAt = 18;
|
|
40
|
+
suppressNextTermOnRefocus = false;
|
|
37
41
|
set options(value) {
|
|
38
42
|
this._options.set(value);
|
|
39
43
|
}
|
|
@@ -41,14 +45,16 @@ export class EcabsChipAutocompleteComponent extends EcabsElementBaseComponent {
|
|
|
41
45
|
termChange = new EventEmitter();
|
|
42
46
|
inputControl = new FormControl('');
|
|
43
47
|
normalizedTerm$ = this.inputControl.valueChanges.pipe(startWith(''), map((value) => value ?? ''), distinctUntilChanged());
|
|
48
|
+
_loading = signal(false);
|
|
44
49
|
_options = signal([]);
|
|
45
50
|
_values = signal([]);
|
|
51
|
+
_suppressNextTermOnRefocus = signal(false);
|
|
46
52
|
_term = toSignal(this.normalizedTerm$, { initialValue: '' });
|
|
47
53
|
destroyRef = inject(DestroyRef);
|
|
48
54
|
overlayPanelClass = 'ecabs-chip-autocomplete-overlay-panel';
|
|
49
55
|
selectedOptions = computed(() => this.setValidSelectedOptions(this._values(), this._options()));
|
|
50
|
-
filteredOptions = computed(() => this.setFilteredOptions(this._term(), this._values(), this._options()));
|
|
51
|
-
noMatchResult = computed(() => !!this._term().trim().length && !this.filteredOptions().length);
|
|
56
|
+
filteredOptions = computed(() => this._loading() ? [] : this.setFilteredOptions(this._term(), this._values(), this._options()));
|
|
57
|
+
noMatchResult = computed(() => !this._loading() && !!this._term().trim().length && !this.filteredOptions().length);
|
|
52
58
|
get options() {
|
|
53
59
|
return this._options();
|
|
54
60
|
}
|
|
@@ -58,9 +64,20 @@ export class EcabsChipAutocompleteComponent extends EcabsElementBaseComponent {
|
|
|
58
64
|
this.normalizedTerm$
|
|
59
65
|
.pipe(takeUntilDestroyed(this.destroyRef))
|
|
60
66
|
.subscribe((value) => {
|
|
67
|
+
if (this.suppressNextTermOnRefocus && this._suppressNextTermOnRefocus() && value === '') {
|
|
68
|
+
this._suppressNextTermOnRefocus.set(false);
|
|
69
|
+
return;
|
|
70
|
+
}
|
|
61
71
|
this.termChange.emit(value);
|
|
72
|
+
this._suppressNextTermOnRefocus.set(false);
|
|
62
73
|
});
|
|
63
74
|
}
|
|
75
|
+
ngOnChanges(changes) {
|
|
76
|
+
const { loading } = changes ?? {};
|
|
77
|
+
if (loading) {
|
|
78
|
+
this._loading.set(this.loading);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
64
81
|
setOverlayHeight() {
|
|
65
82
|
const panel = this.document.querySelector(`.${this.overlayPanelClass}`);
|
|
66
83
|
if (!panel) {
|
|
@@ -114,14 +131,19 @@ export class EcabsChipAutocompleteComponent extends EcabsElementBaseComponent {
|
|
|
114
131
|
blur() {
|
|
115
132
|
this.onTouched();
|
|
116
133
|
}
|
|
117
|
-
onChange = () => {
|
|
118
|
-
|
|
134
|
+
onChange = () => {
|
|
135
|
+
};
|
|
136
|
+
onTouched = () => {
|
|
137
|
+
};
|
|
119
138
|
updateValues(values) {
|
|
120
139
|
this._values.set(values);
|
|
121
140
|
this.onChange(values);
|
|
122
141
|
this.selectionChange.emit(values);
|
|
123
142
|
}
|
|
124
143
|
clearAndRefocusInput() {
|
|
144
|
+
if (this.suppressNextTermOnRefocus) {
|
|
145
|
+
this._suppressNextTermOnRefocus.set(true);
|
|
146
|
+
}
|
|
125
147
|
this.inputControl.setValue('');
|
|
126
148
|
this.inputRef?.nativeElement?.focus();
|
|
127
149
|
}
|
|
@@ -146,13 +168,13 @@ export class EcabsChipAutocompleteComponent extends EcabsElementBaseComponent {
|
|
|
146
168
|
});
|
|
147
169
|
}
|
|
148
170
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: EcabsChipAutocompleteComponent, deps: [{ token: DOCUMENT }], target: i0.ɵɵFactoryTarget.Component });
|
|
149
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: EcabsChipAutocompleteComponent, isStandalone: true, selector: "ecabs-chip-autocomplete", inputs: { visibleOptions: "visibleOptions", autoActiveFirstOption: "autoActiveFirstOption", noResultsText: "noResultsText", compareFn: "compareFn", avatarTemplate: "avatarTemplate", truncateAt: "truncateAt", options: "options" }, outputs: { selectionChange: "selectionChange", termChange: "termChange" }, providers: [
|
|
171
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: EcabsChipAutocompleteComponent, isStandalone: true, selector: "ecabs-chip-autocomplete", inputs: { visibleOptions: "visibleOptions", autoActiveFirstOption: "autoActiveFirstOption", noResultsText: "noResultsText", loadingText: "loadingText", compareFn: "compareFn", avatarTemplate: "avatarTemplate", truncateAt: "truncateAt", suppressNextTermOnRefocus: "suppressNextTermOnRefocus", options: "options" }, outputs: { selectionChange: "selectionChange", termChange: "termChange" }, providers: [
|
|
150
172
|
{
|
|
151
173
|
provide: NG_VALUE_ACCESSOR,
|
|
152
174
|
useExisting: forwardRef(() => EcabsChipAutocompleteComponent),
|
|
153
175
|
multi: true,
|
|
154
176
|
},
|
|
155
|
-
], viewQueries: [{ propertyName: "inputRef", first: true, predicate: ["inputElem"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<ecabs-element-wrapper [data]=\"getData()\">\r\n <div class=\"form-field__input--wrapper\">\r\n <input matInput\r\n [id]=\"label\"\r\n [name]=\"label\"\r\n class=\"form-field__input\"\r\n [ngClass]=\"disabled ? 'form-field__input--disabled' : null\"\r\n #inputElem\r\n [matChipInputFor]=\"chipGrid\"\r\n [matAutocomplete]=\"auto\"\r\n [formControl]=\"inputControl\"\r\n [disabled]=\"disabled\"\r\n [placeholder]=\"placeholder\"\r\n (blur)=\"blur()\"/>\r\n </div>\r\n</ecabs-element-wrapper>\r\n\r\n<mat-autocomplete #auto=\"matAutocomplete\"\r\n [autoActiveFirstOption]=\"autoActiveFirstOption\"\r\n (optionSelected)=\"setSelection($event)\"\r\n (opened)=\"setOverlayHeight()\"\r\n [class]=\"overlayPanelClass\">\r\n <mat-option *ngFor=\"let option of filteredOptions(); trackBy: trackByFn\"\r\n [value]=\"option\"\r\n [disabled]=\"option.disabled ?? false\">\r\n <ng-container [ngTemplateOutlet]=\"avatarContext\"\r\n [ngTemplateOutletContext]=\"{ $implicit: option}\">\r\n </ng-container>\r\n {{ option.label }}\r\n </mat-option>\r\n\r\n <mat-option disabled *ngIf=\"noMatchResult()\">\r\n {{ noResultsText }}\r\n </mat-option>\r\n</mat-autocomplete>\r\n\r\n<mat-chip-grid #chipGrid\r\n [disabled]=\"disabled\"\r\n [class.mt-4]=\"selectedOptions().length > 0\">\r\n <mat-chip-row *ngFor=\"let option of selectedOptions(); trackBy: trackByFn\"\r\n [disabled]=\"disabled || option.disabled\"\r\n (removed)=\"removeSelection(option)\">\r\n <ng-container [ngTemplateOutlet]=\"avatarContext\"\r\n [ngTemplateOutletContext]=\"{ $implicit: option}\">\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"option?.label as label\">\r\n <span [matTooltip]=\"label\"\r\n [matTooltipDisabled]=\"label.length <= truncateAt\">\r\n {{ label | truncate: truncateAt }}\r\n </span>\r\n </ng-container>\r\n <mat-icon matChipRemove\r\n svgIcon=\"ph-light:x\">\r\n </mat-icon>\r\n </mat-chip-row>\r\n</mat-chip-grid>\r\n\r\n<ng-template #avatarContext let-option>\r\n <ng-container *ngIf=\"avatarTemplate\">\r\n <ng-container [ngTemplateOutlet]=\"avatarTemplate\"\r\n [ngTemplateOutletContext]=\"{ $implicit: option}\">\r\n </ng-container>\r\n </ng-container>\r\n</ng-template>\r\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { 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: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: EcabsInputModule }, { kind: "ngmodule", type: MatChipsModule }, { kind: "component", type: i2.MatChipGrid, selector: "mat-chip-grid", inputs: ["tabIndex", "disabled", "placeholder", "required", "value", "errorStateMatcher"], outputs: ["change", "valueChange"] }, { kind: "directive", type: i2.MatChipInput, selector: "input[matChipInputFor]", inputs: ["matChipInputFor", "matChipInputAddOnBlur", "matChipInputSeparatorKeyCodes", "placeholder", "id", "disabled"], outputs: ["matChipInputTokenEnd"], exportAs: ["matChipInput", "matChipInputFor"] }, { kind: "directive", type: i2.MatChipRemove, selector: "[matChipRemove]" }, { kind: "component", type: i2.MatChipRow, selector: "mat-chip-row, [mat-chip-row], mat-basic-chip-row, [mat-basic-chip-row]", inputs: ["color", "disabled", "disableRipple", "tabIndex", "editable"], outputs: ["edited"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i3.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatAutocompleteModule }, { kind: "component", type: i4.MatAutocomplete, selector: "mat-autocomplete", inputs: ["disableRipple", "hideSingleSelectionIndicator"], exportAs: ["matAutocomplete"] }, { kind: "component", type: i5.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { kind: "directive", type: i4.MatAutocompleteTrigger, selector: "input[matAutocomplete], textarea[matAutocomplete]", exportAs: ["matAutocompleteTrigger"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i6.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i6.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i6.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i7.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "ngmodule", type: ElementWrapperModule }, { kind: "component", type: i8.EcabsElementWrapperComponent, selector: "ecabs-element-wrapper", inputs: ["data", "showCloseIcon", "focusedFlag", "showPassword", "control"], outputs: ["showHidePassword", "clear", "increase", "decrease"] }, { kind: "ngmodule", type: NgxPhosphorIconsLightFileModule }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i9.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { kind: "ngmodule", type: EcabsPipesModule }, { kind: "pipe", type: i10.EcabsTruncatePipe, name: "truncate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
177
|
+
], viewQueries: [{ propertyName: "inputRef", first: true, predicate: ["inputElem"], descendants: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<ecabs-element-wrapper [data]=\"getData()\">\r\n <div class=\"form-field__input--wrapper\">\r\n <input matInput\r\n [id]=\"label\"\r\n [name]=\"label\"\r\n class=\"form-field__input\"\r\n [ngClass]=\"disabled ? 'form-field__input--disabled' : null\"\r\n #inputElem\r\n [matChipInputFor]=\"chipGrid\"\r\n [matAutocomplete]=\"auto\"\r\n [formControl]=\"inputControl\"\r\n [disabled]=\"disabled\"\r\n [placeholder]=\"placeholder\"\r\n (blur)=\"blur()\"/>\r\n </div>\r\n</ecabs-element-wrapper>\r\n\r\n<mat-autocomplete #auto=\"matAutocomplete\"\r\n [autoActiveFirstOption]=\"autoActiveFirstOption\"\r\n (optionSelected)=\"setSelection($event)\"\r\n (opened)=\"setOverlayHeight()\"\r\n [class]=\"overlayPanelClass\">\r\n <mat-option *ngFor=\"let option of filteredOptions(); trackBy: trackByFn\"\r\n [value]=\"option\"\r\n [disabled]=\"option.disabled ?? false\">\r\n <ng-container [ngTemplateOutlet]=\"avatarContext\"\r\n [ngTemplateOutletContext]=\"{ $implicit: option}\">\r\n </ng-container>\r\n {{ option.label }}\r\n </mat-option>\r\n\r\n <mat-option *ngIf=\"loading\" disabled>\r\n <div class=\"flex items-center\">\r\n <div class=\"mr-2\">{{ loadingText }}</div>\r\n <ecabs-loading-spinner size=\"tiny\"></ecabs-loading-spinner>\r\n </div>\r\n </mat-option>\r\n\r\n <mat-option disabled *ngIf=\"noMatchResult()\">\r\n {{ noResultsText }}\r\n </mat-option>\r\n</mat-autocomplete>\r\n\r\n<mat-chip-grid #chipGrid\r\n [disabled]=\"disabled\"\r\n [class.mt-4]=\"selectedOptions().length > 0\">\r\n <mat-chip-row *ngFor=\"let option of selectedOptions(); trackBy: trackByFn\"\r\n [disabled]=\"disabled || option.disabled\"\r\n (removed)=\"removeSelection(option)\">\r\n <ng-container [ngTemplateOutlet]=\"avatarContext\"\r\n [ngTemplateOutletContext]=\"{ $implicit: option}\">\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"option?.label as label\">\r\n <span [matTooltip]=\"label\"\r\n [matTooltipDisabled]=\"label.length <= truncateAt\">\r\n {{ label | truncate: truncateAt }}\r\n </span>\r\n </ng-container>\r\n <mat-icon matChipRemove\r\n svgIcon=\"ph-light:x\">\r\n </mat-icon>\r\n </mat-chip-row>\r\n</mat-chip-grid>\r\n\r\n<ng-template #avatarContext let-option>\r\n <ng-container *ngIf=\"avatarTemplate\">\r\n <ng-container [ngTemplateOutlet]=\"avatarTemplate\"\r\n [ngTemplateOutletContext]=\"{ $implicit: option}\">\r\n </ng-container>\r\n </ng-container>\r\n</ng-template>\r\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { 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: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: EcabsInputModule }, { kind: "ngmodule", type: MatChipsModule }, { kind: "component", type: i2.MatChipGrid, selector: "mat-chip-grid", inputs: ["tabIndex", "disabled", "placeholder", "required", "value", "errorStateMatcher"], outputs: ["change", "valueChange"] }, { kind: "directive", type: i2.MatChipInput, selector: "input[matChipInputFor]", inputs: ["matChipInputFor", "matChipInputAddOnBlur", "matChipInputSeparatorKeyCodes", "placeholder", "id", "disabled"], outputs: ["matChipInputTokenEnd"], exportAs: ["matChipInput", "matChipInputFor"] }, { kind: "directive", type: i2.MatChipRemove, selector: "[matChipRemove]" }, { kind: "component", type: i2.MatChipRow, selector: "mat-chip-row, [mat-chip-row], mat-basic-chip-row, [mat-basic-chip-row]", inputs: ["color", "disabled", "disableRipple", "tabIndex", "editable"], outputs: ["edited"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i3.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatAutocompleteModule }, { kind: "component", type: i4.MatAutocomplete, selector: "mat-autocomplete", inputs: ["disableRipple", "hideSingleSelectionIndicator"], exportAs: ["matAutocomplete"] }, { kind: "component", type: i5.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { kind: "directive", type: i4.MatAutocompleteTrigger, selector: "input[matAutocomplete], textarea[matAutocomplete]", exportAs: ["matAutocompleteTrigger"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i6.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i6.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i6.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i7.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "ngmodule", type: ElementWrapperModule }, { kind: "component", type: i8.EcabsElementWrapperComponent, selector: "ecabs-element-wrapper", inputs: ["data", "showCloseIcon", "focusedFlag", "showPassword", "control"], outputs: ["showHidePassword", "clear", "increase", "decrease"] }, { kind: "ngmodule", type: NgxPhosphorIconsLightFileModule }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i9.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { kind: "ngmodule", type: EcabsPipesModule }, { kind: "pipe", type: i10.EcabsTruncatePipe, name: "truncate" }, { kind: "ngmodule", type: EcabsLoadingModule }, { kind: "component", type: i11.EcabsSpinnerComponent, selector: "ecabs-loading-spinner", inputs: ["size"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
156
178
|
}
|
|
157
179
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: EcabsChipAutocompleteComponent, decorators: [{
|
|
158
180
|
type: Component,
|
|
@@ -168,13 +190,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
168
190
|
NgxPhosphorIconsLightFileModule,
|
|
169
191
|
MatTooltipModule,
|
|
170
192
|
EcabsPipesModule,
|
|
193
|
+
EcabsLoadingModule,
|
|
171
194
|
], providers: [
|
|
172
195
|
{
|
|
173
196
|
provide: NG_VALUE_ACCESSOR,
|
|
174
197
|
useExisting: forwardRef(() => EcabsChipAutocompleteComponent),
|
|
175
198
|
multi: true,
|
|
176
199
|
},
|
|
177
|
-
], template: "<ecabs-element-wrapper [data]=\"getData()\">\r\n <div class=\"form-field__input--wrapper\">\r\n <input matInput\r\n [id]=\"label\"\r\n [name]=\"label\"\r\n class=\"form-field__input\"\r\n [ngClass]=\"disabled ? 'form-field__input--disabled' : null\"\r\n #inputElem\r\n [matChipInputFor]=\"chipGrid\"\r\n [matAutocomplete]=\"auto\"\r\n [formControl]=\"inputControl\"\r\n [disabled]=\"disabled\"\r\n [placeholder]=\"placeholder\"\r\n (blur)=\"blur()\"/>\r\n </div>\r\n</ecabs-element-wrapper>\r\n\r\n<mat-autocomplete #auto=\"matAutocomplete\"\r\n [autoActiveFirstOption]=\"autoActiveFirstOption\"\r\n (optionSelected)=\"setSelection($event)\"\r\n (opened)=\"setOverlayHeight()\"\r\n [class]=\"overlayPanelClass\">\r\n <mat-option *ngFor=\"let option of filteredOptions(); trackBy: trackByFn\"\r\n [value]=\"option\"\r\n [disabled]=\"option.disabled ?? false\">\r\n <ng-container [ngTemplateOutlet]=\"avatarContext\"\r\n [ngTemplateOutletContext]=\"{ $implicit: option}\">\r\n </ng-container>\r\n {{ option.label }}\r\n </mat-option>\r\n\r\n <mat-option disabled *ngIf=\"noMatchResult()\">\r\n {{ noResultsText }}\r\n </mat-option>\r\n</mat-autocomplete>\r\n\r\n<mat-chip-grid #chipGrid\r\n [disabled]=\"disabled\"\r\n [class.mt-4]=\"selectedOptions().length > 0\">\r\n <mat-chip-row *ngFor=\"let option of selectedOptions(); trackBy: trackByFn\"\r\n [disabled]=\"disabled || option.disabled\"\r\n (removed)=\"removeSelection(option)\">\r\n <ng-container [ngTemplateOutlet]=\"avatarContext\"\r\n [ngTemplateOutletContext]=\"{ $implicit: option}\">\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"option?.label as label\">\r\n <span [matTooltip]=\"label\"\r\n [matTooltipDisabled]=\"label.length <= truncateAt\">\r\n {{ label | truncate: truncateAt }}\r\n </span>\r\n </ng-container>\r\n <mat-icon matChipRemove\r\n svgIcon=\"ph-light:x\">\r\n </mat-icon>\r\n </mat-chip-row>\r\n</mat-chip-grid>\r\n\r\n<ng-template #avatarContext let-option>\r\n <ng-container *ngIf=\"avatarTemplate\">\r\n <ng-container [ngTemplateOutlet]=\"avatarTemplate\"\r\n [ngTemplateOutletContext]=\"{ $implicit: option}\">\r\n </ng-container>\r\n </ng-container>\r\n</ng-template>\r\n" }]
|
|
200
|
+
], template: "<ecabs-element-wrapper [data]=\"getData()\">\r\n <div class=\"form-field__input--wrapper\">\r\n <input matInput\r\n [id]=\"label\"\r\n [name]=\"label\"\r\n class=\"form-field__input\"\r\n [ngClass]=\"disabled ? 'form-field__input--disabled' : null\"\r\n #inputElem\r\n [matChipInputFor]=\"chipGrid\"\r\n [matAutocomplete]=\"auto\"\r\n [formControl]=\"inputControl\"\r\n [disabled]=\"disabled\"\r\n [placeholder]=\"placeholder\"\r\n (blur)=\"blur()\"/>\r\n </div>\r\n</ecabs-element-wrapper>\r\n\r\n<mat-autocomplete #auto=\"matAutocomplete\"\r\n [autoActiveFirstOption]=\"autoActiveFirstOption\"\r\n (optionSelected)=\"setSelection($event)\"\r\n (opened)=\"setOverlayHeight()\"\r\n [class]=\"overlayPanelClass\">\r\n <mat-option *ngFor=\"let option of filteredOptions(); trackBy: trackByFn\"\r\n [value]=\"option\"\r\n [disabled]=\"option.disabled ?? false\">\r\n <ng-container [ngTemplateOutlet]=\"avatarContext\"\r\n [ngTemplateOutletContext]=\"{ $implicit: option}\">\r\n </ng-container>\r\n {{ option.label }}\r\n </mat-option>\r\n\r\n <mat-option *ngIf=\"loading\" disabled>\r\n <div class=\"flex items-center\">\r\n <div class=\"mr-2\">{{ loadingText }}</div>\r\n <ecabs-loading-spinner size=\"tiny\"></ecabs-loading-spinner>\r\n </div>\r\n </mat-option>\r\n\r\n <mat-option disabled *ngIf=\"noMatchResult()\">\r\n {{ noResultsText }}\r\n </mat-option>\r\n</mat-autocomplete>\r\n\r\n<mat-chip-grid #chipGrid\r\n [disabled]=\"disabled\"\r\n [class.mt-4]=\"selectedOptions().length > 0\">\r\n <mat-chip-row *ngFor=\"let option of selectedOptions(); trackBy: trackByFn\"\r\n [disabled]=\"disabled || option.disabled\"\r\n (removed)=\"removeSelection(option)\">\r\n <ng-container [ngTemplateOutlet]=\"avatarContext\"\r\n [ngTemplateOutletContext]=\"{ $implicit: option}\">\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"option?.label as label\">\r\n <span [matTooltip]=\"label\"\r\n [matTooltipDisabled]=\"label.length <= truncateAt\">\r\n {{ label | truncate: truncateAt }}\r\n </span>\r\n </ng-container>\r\n <mat-icon matChipRemove\r\n svgIcon=\"ph-light:x\">\r\n </mat-icon>\r\n </mat-chip-row>\r\n</mat-chip-grid>\r\n\r\n<ng-template #avatarContext let-option>\r\n <ng-container *ngIf=\"avatarTemplate\">\r\n <ng-container [ngTemplateOutlet]=\"avatarTemplate\"\r\n [ngTemplateOutletContext]=\"{ $implicit: option}\">\r\n </ng-container>\r\n </ng-container>\r\n</ng-template>\r\n" }]
|
|
178
201
|
}], ctorParameters: function () { return [{ type: Document, decorators: [{
|
|
179
202
|
type: Inject,
|
|
180
203
|
args: [DOCUMENT]
|
|
@@ -187,12 +210,16 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
187
210
|
type: Input
|
|
188
211
|
}], noResultsText: [{
|
|
189
212
|
type: Input
|
|
213
|
+
}], loadingText: [{
|
|
214
|
+
type: Input
|
|
190
215
|
}], compareFn: [{
|
|
191
216
|
type: Input
|
|
192
217
|
}], avatarTemplate: [{
|
|
193
218
|
type: Input
|
|
194
219
|
}], truncateAt: [{
|
|
195
220
|
type: Input
|
|
221
|
+
}], suppressNextTermOnRefocus: [{
|
|
222
|
+
type: Input
|
|
196
223
|
}], options: [{
|
|
197
224
|
type: Input,
|
|
198
225
|
args: [{ required: true }]
|
|
@@ -201,4 +228,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
201
228
|
}], termChange: [{
|
|
202
229
|
type: Output
|
|
203
230
|
}] } });
|
|
204
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWNhYnMtY2hpcC1hdXRvY29tcGxldGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZWNhYnMtY29tcG9uZW50cy9zcmMvbGliL2VjYWJzLWNoaXAtYXV0b2NvbXBsZXRlL2VjYWJzLWNoaXAtYXV0b2NvbXBsZXRlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2VjYWJzLWNvbXBvbmVudHMvc3JjL2xpYi9lY2Ficy1jaGlwLWF1dG9jb21wbGV0ZS9lY2Ficy1jaGlwLWF1dG9jb21wbGV0ZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxRQUFRLEVBQ1IsVUFBVSxFQUVWLFlBQVksRUFDWixVQUFVLEVBQ1YsTUFBTSxFQUNOLE1BQU0sRUFDTixLQUFLLEVBQ0wsTUFBTSxFQUNOLE1BQU0sRUFFTixTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUVMLFdBQVcsRUFDWCxpQkFBaUIsRUFDakIsbUJBQW1CLEdBQ3BCLE1BQU0sZ0JBQWdCLENBQUM7QUFFeEIsT0FBTyx5QkFBeUIsTUFBTSxzQkFBc0IsQ0FBQztBQUM3RCxPQUFPLEVBQ0wscUJBQXFCLEdBRXRCLE1BQU0sZ0NBQWdDLENBQUM7QUFDeEMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDckUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLFFBQVEsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3RDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdkQsT0FBTyxFQUFFLFlBQVksRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDekQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sZ0RBQWdELENBQUM7QUFDdEYsT0FBTyxFQUFFLCtCQUErQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDckUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDN0QsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDOUQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7Ozs7Ozs7OztBQTZCdEQsTUFBTSxPQUFPLDhCQUNYLFNBQVEseUJBQXlCO0lBK0RjO0lBM0Q5QixRQUFRLENBQWdDO0lBRWhELGNBQWMsR0FBRyxHQUFHLENBQUM7SUFHOUIscUJBQXFCLEdBQUcsSUFBSSxDQUFDO0lBRzdCLGFBQWEsR0FBRyxrQkFBa0IsQ0FBQztJQUduQyxTQUFTLEdBQTRCLE1BQU0sQ0FBQyxFQUFFLENBQUM7SUFHL0MsY0FBYyxDQUFxRDtJQUduRSxVQUFVLEdBQUcsRUFBRSxDQUFDO0lBRWhCLElBQ0ksT0FBTyxDQUFDLEtBQStCO1FBQ3pDLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzNCLENBQUM7SUFHUSxlQUFlLEdBQUcsSUFBSSxZQUFZLEVBQU8sQ0FBQztJQUcxQyxVQUFVLEdBQUcsSUFBSSxZQUFZLEVBQVUsQ0FBQztJQUU5QixZQUFZLEdBQUcsSUFBSSxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUM7SUFFckMsZUFBZSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsWUFBWSxDQUFDLElBQUksQ0FDcEUsU0FBUyxDQUFDLEVBQUUsQ0FBQyxFQUNiLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxJQUFJLEVBQUUsQ0FBQyxFQUMzQixvQkFBb0IsRUFBRSxDQUN2QixDQUFDO0lBRWUsUUFBUSxHQUFHLE1BQU0sQ0FBb0IsRUFBRSxDQUFDLENBQUM7SUFDekMsT0FBTyxHQUFHLE1BQU0sQ0FBTSxFQUFFLENBQUMsQ0FBQztJQUMxQixLQUFLLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUUsRUFBRSxZQUFZLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUM3RCxVQUFVLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBRTlCLGlCQUFpQixHQUNsQyx1Q0FBdUMsQ0FBQztJQUN2QixlQUFlLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUNqRCxJQUFJLENBQUMsdUJBQXVCLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUM5RCxDQUFDO0lBQ2lCLGVBQWUsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQ2pELElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRSxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUN2RSxDQUFDO0lBQ2lCLGFBQWEsR0FBRyxRQUFRLENBQ3pDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDLE1BQU0sQ0FDckUsQ0FBQztJQUVGLElBQUksT0FBTztRQUNULE9BQU8sSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ3pCLENBQUM7SUFFRCxZQUErQyxRQUFrQjtRQUMvRCxLQUFLLEVBQUUsQ0FBQztRQURxQyxhQUFRLEdBQVIsUUFBUSxDQUFVO1FBRy9ELElBQUksQ0FBQyxlQUFlO2FBQ2pCLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7YUFDekMsU0FBUyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDbkIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDOUIsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQsZ0JBQWdCO1FBQ2QsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQ3ZDLElBQUksSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQ1AsQ0FBQztRQUV4QixJQUFJLENBQUMsS0FBSyxFQUFFO1lBQ1YsT0FBTztTQUNSO1FBRUQsS0FBSyxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQ3JCLGdDQUFnQyxFQUNoQyxNQUFNLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUM1QixDQUFDO0lBQ0osQ0FBQztJQUVELFlBQVksQ0FBQyxLQUFtQztRQUM5QyxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDakIsT0FBTztTQUNSO1FBRUQsTUFBTSxhQUFhLEdBQW9CLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDO1FBRTFELElBQUksYUFBYSxFQUFFLFFBQVEsRUFBRTtZQUMzQixPQUFPO1NBQ1I7UUFFRCxNQUFNLGlCQUFpQixHQUFHLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxjQUFpQixFQUFFLEVBQUUsQ0FDbEUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxjQUFjLEVBQUUsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUNwRCxDQUFDO1FBRUYsSUFBSSxDQUFDLGlCQUFpQixFQUFFO1lBQ3RCLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxPQUFPLEVBQUUsRUFBRSxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztTQUM3RDtRQUVELElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO0lBQzlCLENBQUM7SUFFRCxlQUFlLENBQUMsTUFBdUI7UUFDckMsSUFBSSxJQUFJLENBQUMsUUFBUSxJQUFJLE1BQU0sRUFBRSxRQUFRLEVBQUU7WUFDckMsT0FBTztTQUNSO1FBRUQsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLE1BQU0sQ0FDMUMsQ0FBQyxLQUFRLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUNuRCxDQUFDO1FBRUYsSUFBSSxDQUFDLFlBQVksQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUNwQyxDQUFDO0lBRUQsU0FBUyxDQUFDLE1BQWMsRUFBRSxNQUF1QjtRQUMvQyxPQUFPLE1BQU0sQ0FBQyxLQUFLLElBQUksTUFBTSxDQUFDO0lBQ2hDLENBQUM7SUFFRCxVQUFVLENBQUMsS0FBaUI7UUFDMUIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUN0RCxDQUFDO0lBRUQsZ0JBQWdCLENBQUMsRUFBd0I7UUFDdkMsSUFBSSxDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUM7SUFDckIsQ0FBQztJQUVELGlCQUFpQixDQUFDLEVBQWM7UUFDOUIsSUFBSSxDQUFDLFNBQVMsR0FBRyxFQUFFLENBQUM7SUFDdEIsQ0FBQztJQUVRLGdCQUFnQixDQUFDLFVBQW1CO1FBQzNDLElBQUksQ0FBQyxRQUFRLEdBQUcsVUFBVSxDQUFDO1FBRTNCLElBQUksVUFBVSxFQUFFO1lBQ2QsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztTQUNqRDthQUFNO1lBQ0wsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztTQUNoRDtRQUVELElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO0lBQzdCLENBQUM7SUFFRCxJQUFJO1FBQ0YsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0lBQ25CLENBQUM7SUFFTyxRQUFRLEdBQWdDLEdBQUcsRUFBRSxHQUFFLENBQUMsQ0FBQztJQUVqRCxTQUFTLEdBQWUsR0FBRyxFQUFFLEdBQUUsQ0FBQyxDQUFDO0lBRWpDLFlBQVksQ0FBQyxNQUFXO1FBQzlCLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3pCLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDdEIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDcEMsQ0FBQztJQUVPLG9CQUFvQjtRQUMxQixJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUMvQixJQUFJLENBQUMsUUFBUSxFQUFFLGFBQWEsRUFBRSxLQUFLLEVBQUUsQ0FBQztJQUN4QyxDQUFDO0lBRU8sdUJBQXVCLENBQzdCLFFBQWEsRUFDYixPQUEwQjtRQUUxQixJQUFJLENBQUMsUUFBUSxJQUFJLENBQUMsT0FBTyxFQUFFO1lBQ3pCLE9BQU8sRUFBRSxDQUFDO1NBQ1g7UUFFRCxPQUFPLFFBQVE7YUFDWixHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUNaLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUM3RDthQUNBLE1BQU0sQ0FBQyxDQUFDLEtBQUssRUFBNEIsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMxRCxDQUFDO0lBRU8sa0JBQWtCLENBQ3hCLElBQW1CLEVBQ25CLFFBQWEsRUFDYixPQUEwQjtRQUUxQixJQUFJLENBQUMsUUFBUSxJQUFJLENBQUMsT0FBTyxFQUFFO1lBQ3pCLE9BQU8sRUFBRSxDQUFDO1NBQ1g7UUFFRCxNQUFNLGNBQWMsR0FBRyxJQUFJLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxDQUFDO1FBRWpELE9BQU8sT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFO1lBQy9CLE1BQU0saUJBQWlCLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLGNBQWlCLEVBQUUsRUFBRSxDQUM1RCxJQUFJLENBQUMsU0FBUyxDQUFDLGNBQWMsRUFBRSxNQUFNLENBQUMsS0FBSyxDQUFDLENBQzdDLENBQUM7WUFDRixNQUFNLFdBQVcsR0FDZixNQUFNLENBQUMsS0FBSyxFQUFFLFdBQVcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUM7Z0JBQ3BELElBQUksRUFBRSxNQUFNLEtBQUssQ0FBQyxDQUFDO1lBRXJCLE9BQU8sQ0FBQyxpQkFBaUIsSUFBSSxXQUFXLENBQUM7UUFDM0MsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO3dHQTlNVSw4QkFBOEIsa0JBZ0VyQixRQUFROzRGQWhFakIsOEJBQThCLHVYQVI5QjtZQUNUO2dCQUNFLE9BQU8sRUFBRSxpQkFBaUI7Z0JBQzFCLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsOEJBQThCLENBQUM7Z0JBQzdELEtBQUssRUFBRSxJQUFJO2FBQ1o7U0FDRix3SkNsRUgsb2dGQWlFQSx5RERqQkksWUFBWSxvZ0JBQ1osZ0JBQWdCLDhCQUNoQixjQUFjLDB5QkFDZCxhQUFhLG1MQUNiLHFCQUFxQixnY0FDckIsbUJBQW1CLHlrQkFDbkIsY0FBYywwV0FDZCxvQkFBb0IsNFFBQ3BCLCtCQUErQiw4QkFDL0IsZ0JBQWdCLDhIQUNoQixnQkFBZ0I7OzRGQVVQLDhCQUE4QjtrQkEzQjFDLFNBQVM7K0JBQ0UseUJBQXlCLG1CQUdsQix1QkFBdUIsQ0FBQyxNQUFNLGNBQ25DLElBQUksV0FDUDt3QkFDUCxZQUFZO3dCQUNaLGdCQUFnQjt3QkFDaEIsY0FBYzt3QkFDZCxhQUFhO3dCQUNiLHFCQUFxQjt3QkFDckIsbUJBQW1CO3dCQUNuQixjQUFjO3dCQUNkLG9CQUFvQjt3QkFDcEIsK0JBQStCO3dCQUMvQixnQkFBZ0I7d0JBQ2hCLGdCQUFnQjtxQkFDakIsYUFDVTt3QkFDVDs0QkFDRSxPQUFPLEVBQUUsaUJBQWlCOzRCQUMxQixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSwrQkFBK0IsQ0FBQzs0QkFDN0QsS0FBSyxFQUFFLElBQUk7eUJBQ1o7cUJBQ0Y7OzBCQWtFWSxNQUFNOzJCQUFDLFFBQVE7NENBM0RYLFFBQVE7c0JBRHhCLFNBQVM7dUJBQUMsV0FBVztnQkFHYixjQUFjO3NCQUF0QixLQUFLO2dCQUdOLHFCQUFxQjtzQkFEcEIsS0FBSztnQkFJTixhQUFhO3NCQURaLEtBQUs7Z0JBSU4sU0FBUztzQkFEUixLQUFLO2dCQUlOLGNBQWM7c0JBRGIsS0FBSztnQkFJTixVQUFVO3NCQURULEtBQUs7Z0JBSUYsT0FBTztzQkFEVixLQUFLO3VCQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRTtnQkFNaEIsZUFBZTtzQkFEdkIsTUFBTTtnQkFJRSxVQUFVO3NCQURsQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcclxuICBDb21wb25lbnQsXHJcbiAgY29tcHV0ZWQsXHJcbiAgRGVzdHJveVJlZixcclxuICBFbGVtZW50UmVmLFxyXG4gIEV2ZW50RW1pdHRlcixcclxuICBmb3J3YXJkUmVmLFxyXG4gIGluamVjdCxcclxuICBJbmplY3QsXHJcbiAgSW5wdXQsXHJcbiAgT3V0cHV0LFxyXG4gIHNpZ25hbCxcclxuICBUZW1wbGF0ZVJlZixcclxuICBWaWV3Q2hpbGQsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7XHJcbiAgQ29udHJvbFZhbHVlQWNjZXNzb3IsXHJcbiAgRm9ybUNvbnRyb2wsXHJcbiAgTkdfVkFMVUVfQUNDRVNTT1IsXHJcbiAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcclxufSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IFNlbGVjdE9wdGlvbiB9IGZyb20gJy4uL2Jhc2UvbW9kZWxzL3NlbGVjdC5tb2RlbHMnO1xyXG5pbXBvcnQgRWNhYnNFbGVtZW50QmFzZUNvbXBvbmVudCBmcm9tICcuLi9iYXNlL2VsZW1lbnQtYmFzZSc7XHJcbmltcG9ydCB7XHJcbiAgTWF0QXV0b2NvbXBsZXRlTW9kdWxlLFxyXG4gIE1hdEF1dG9jb21wbGV0ZVNlbGVjdGVkRXZlbnQsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvYXV0b2NvbXBsZXRlJztcclxuaW1wb3J0IHsgRWNhYnNJbnB1dE1vZHVsZSB9IGZyb20gJy4uL2VjYWJzLWlucHV0L2VjYWJzLWlucHV0Lm1vZHVsZSc7XHJcbmltcG9ydCB7IHRha2VVbnRpbERlc3Ryb3llZCwgdG9TaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XHJcbmltcG9ydCB7IG1hcCwgc3RhcnRXaXRoIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IE1hdENoaXBzTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvY2hpcHMnO1xyXG5pbXBvcnQgeyBNYXRJY29uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaWNvbic7XHJcbmltcG9ydCB7IENvbW1vbk1vZHVsZSwgRE9DVU1FTlQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBNYXRJbnB1dE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2lucHV0JztcclxuaW1wb3J0IHsgRWxlbWVudFdyYXBwZXJNb2R1bGUgfSBmcm9tICcuLi9iYXNlL2VsZW1lbnQtd3JhcHBlci9lbGVtZW50LXdyYXBwZXIubW9kdWxlJztcclxuaW1wb3J0IHsgTmd4UGhvc3Bob3JJY29uc0xpZ2h0RmlsZU1vZHVsZSB9IGZyb20gJ25neC1waG9zcGhvci1pY29ucyc7XHJcbmltcG9ydCB7IE1hdFRvb2x0aXBNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90b29sdGlwJztcclxuaW1wb3J0IHsgRWNhYnNQaXBlc01vZHVsZSB9IGZyb20gJy4uL2Jhc2UvcGlwZXMvcGlwZXMubW9kdWxlJztcclxuaW1wb3J0IHsgZGlzdGluY3RVbnRpbENoYW5nZWQgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2VjYWJzLWNoaXAtYXV0b2NvbXBsZXRlJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vZWNhYnMtY2hpcC1hdXRvY29tcGxldGUuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2VjYWJzLWNoaXAtYXV0b2NvbXBsZXRlLmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICBpbXBvcnRzOiBbXHJcbiAgICBDb21tb25Nb2R1bGUsXHJcbiAgICBFY2Fic0lucHV0TW9kdWxlLFxyXG4gICAgTWF0Q2hpcHNNb2R1bGUsXHJcbiAgICBNYXRJY29uTW9kdWxlLFxyXG4gICAgTWF0QXV0b2NvbXBsZXRlTW9kdWxlLFxyXG4gICAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcclxuICAgIE1hdElucHV0TW9kdWxlLFxyXG4gICAgRWxlbWVudFdyYXBwZXJNb2R1bGUsXHJcbiAgICBOZ3hQaG9zcGhvckljb25zTGlnaHRGaWxlTW9kdWxlLFxyXG4gICAgTWF0VG9vbHRpcE1vZHVsZSxcclxuICAgIEVjYWJzUGlwZXNNb2R1bGUsXHJcbiAgXSxcclxuICBwcm92aWRlcnM6IFtcclxuICAgIHtcclxuICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXHJcbiAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IEVjYWJzQ2hpcEF1dG9jb21wbGV0ZUNvbXBvbmVudCksXHJcbiAgICAgIG11bHRpOiB0cnVlLFxyXG4gICAgfSxcclxuICBdLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgRWNhYnNDaGlwQXV0b2NvbXBsZXRlQ29tcG9uZW50PFQgPSB1bmtub3duPlxyXG4gIGV4dGVuZHMgRWNhYnNFbGVtZW50QmFzZUNvbXBvbmVudFxyXG4gIGltcGxlbWVudHMgQ29udHJvbFZhbHVlQWNjZXNzb3Jcclxue1xyXG4gIEBWaWV3Q2hpbGQoJ2lucHV0RWxlbScpXHJcbiAgcHJpdmF0ZSByZWFkb25seSBpbnB1dFJlZj86IEVsZW1lbnRSZWY8SFRNTElucHV0RWxlbWVudD47XHJcblxyXG4gIEBJbnB1dCgpIHZpc2libGVPcHRpb25zID0gOC41O1xyXG5cclxuICBASW5wdXQoKVxyXG4gIGF1dG9BY3RpdmVGaXJzdE9wdGlvbiA9IHRydWU7XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgbm9SZXN1bHRzVGV4dCA9ICdObyByZXN1bHRzIGZvdW5kJztcclxuXHJcbiAgQElucHV0KClcclxuICBjb21wYXJlRm46IChhOiBULCBiOiBUKSA9PiBib29sZWFuID0gT2JqZWN0LmlzO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIGF2YXRhclRlbXBsYXRlOiBUZW1wbGF0ZVJlZjx7ICRpbXBsaWNpdDogU2VsZWN0T3B0aW9uPFQ+IH0+IHwgbnVsbDtcclxuXHJcbiAgQElucHV0KClcclxuICB0cnVuY2F0ZUF0ID0gMTg7XHJcblxyXG4gIEBJbnB1dCh7IHJlcXVpcmVkOiB0cnVlIH0pXHJcbiAgc2V0IG9wdGlvbnModmFsdWU6IFNlbGVjdE9wdGlvbjxUPltdIHwgbnVsbCkge1xyXG4gICAgdGhpcy5fb3B0aW9ucy5zZXQodmFsdWUpO1xyXG4gIH1cclxuXHJcbiAgQE91dHB1dCgpXHJcbiAgcmVhZG9ubHkgc2VsZWN0aW9uQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxUW10+KCk7XHJcblxyXG4gIEBPdXRwdXQoKVxyXG4gIHJlYWRvbmx5IHRlcm1DaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcclxuXHJcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGlucHV0Q29udHJvbCA9IG5ldyBGb3JtQ29udHJvbCgnJyk7XHJcblxyXG4gIHByaXZhdGUgcmVhZG9ubHkgbm9ybWFsaXplZFRlcm0kID0gdGhpcy5pbnB1dENvbnRyb2wudmFsdWVDaGFuZ2VzLnBpcGUoXHJcbiAgICBzdGFydFdpdGgoJycpLFxyXG4gICAgbWFwKCh2YWx1ZSkgPT4gdmFsdWUgPz8gJycpLFxyXG4gICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcclxuICApO1xyXG5cclxuICBwcml2YXRlIHJlYWRvbmx5IF9vcHRpb25zID0gc2lnbmFsPFNlbGVjdE9wdGlvbjxUPltdPihbXSk7XHJcbiAgcHJpdmF0ZSByZWFkb25seSBfdmFsdWVzID0gc2lnbmFsPFRbXT4oW10pO1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgX3Rlcm0gPSB0b1NpZ25hbCh0aGlzLm5vcm1hbGl6ZWRUZXJtJCwgeyBpbml0aWFsVmFsdWU6ICcnIH0pO1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgZGVzdHJveVJlZiA9IGluamVjdChEZXN0cm95UmVmKTtcclxuXHJcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IG92ZXJsYXlQYW5lbENsYXNzID1cclxuICAgICdlY2Ficy1jaGlwLWF1dG9jb21wbGV0ZS1vdmVybGF5LXBhbmVsJztcclxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgc2VsZWN0ZWRPcHRpb25zID0gY29tcHV0ZWQoKCkgPT5cclxuICAgIHRoaXMuc2V0VmFsaWRTZWxlY3RlZE9wdGlvbnModGhpcy5fdmFsdWVzKCksIHRoaXMuX29wdGlvbnMoKSksXHJcbiAgKTtcclxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgZmlsdGVyZWRPcHRpb25zID0gY29tcHV0ZWQoKCkgPT5cclxuICAgIHRoaXMuc2V0RmlsdGVyZWRPcHRpb25zKHRoaXMuX3Rlcm0oKSwgdGhpcy5fdmFsdWVzKCksIHRoaXMuX29wdGlvbnMoKSksXHJcbiAgKTtcclxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgbm9NYXRjaFJlc3VsdCA9IGNvbXB1dGVkKFxyXG4gICAgKCkgPT4gISF0aGlzLl90ZXJtKCkudHJpbSgpLmxlbmd0aCAmJiAhdGhpcy5maWx0ZXJlZE9wdGlvbnMoKS5sZW5ndGgsXHJcbiAgKTtcclxuXHJcbiAgZ2V0IG9wdGlvbnMoKTogU2VsZWN0T3B0aW9uPFQ+W10gfCBudWxsIHtcclxuICAgIHJldHVybiB0aGlzLl9vcHRpb25zKCk7XHJcbiAgfVxyXG5cclxuICBjb25zdHJ1Y3RvcihASW5qZWN0KERPQ1VNRU5UKSBwcml2YXRlIHJlYWRvbmx5IGRvY3VtZW50OiBEb2N1bWVudCkge1xyXG4gICAgc3VwZXIoKTtcclxuXHJcbiAgICB0aGlzLm5vcm1hbGl6ZWRUZXJtJFxyXG4gICAgICAucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKSlcclxuICAgICAgLnN1YnNjcmliZSgodmFsdWUpID0+IHtcclxuICAgICAgICB0aGlzLnRlcm1DaGFuZ2UuZW1pdCh2YWx1ZSk7XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgc2V0T3ZlcmxheUhlaWdodCgpOiB2b2lkIHtcclxuICAgIGNvbnN0IHBhbmVsID0gdGhpcy5kb2N1bWVudC5xdWVyeVNlbGVjdG9yKFxyXG4gICAgICBgLiR7dGhpcy5vdmVybGF5UGFuZWxDbGFzc31gLFxyXG4gICAgKSBhcyBIVE1MRWxlbWVudCB8IG51bGw7XHJcblxyXG4gICAgaWYgKCFwYW5lbCkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgcGFuZWwuc3R5bGUuc2V0UHJvcGVydHkoXHJcbiAgICAgICctLWF1dG9jb21wbGV0ZS12aXNpYmxlLW9wdGlvbnMnLFxyXG4gICAgICBTdHJpbmcodGhpcy52aXNpYmxlT3B0aW9ucyksXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgc2V0U2VsZWN0aW9uKGV2ZW50OiBNYXRBdXRvY29tcGxldGVTZWxlY3RlZEV2ZW50KTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5kaXNhYmxlZCkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3Qgc2VsZWN0ZWRWYWx1ZTogU2VsZWN0T3B0aW9uPFQ+ID0gZXZlbnQub3B0aW9uLnZhbHVlO1xyXG5cclxuICAgIGlmIChzZWxlY3RlZFZhbHVlPy5kaXNhYmxlZCkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgZXhpc3RpbmdTZWxlY3Rpb24gPSB0aGlzLl92YWx1ZXMoKS5zb21lKChzZWxlY3RlZE9wdGlvbjogVCkgPT5cclxuICAgICAgdGhpcy5jb21wYXJlRm4oc2VsZWN0ZWRPcHRpb24sIHNlbGVjdGVkVmFsdWUudmFsdWUpLFxyXG4gICAgKTtcclxuXHJcbiAgICBpZiAoIWV4aXN0aW5nU2VsZWN0aW9uKSB7XHJcbiAgICAgIHRoaXMudXBkYXRlVmFsdWVzKFsuLi50aGlzLl92YWx1ZXMoKSwgc2VsZWN0ZWRWYWx1ZS52YWx1ZV0pO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuY2xlYXJBbmRSZWZvY3VzSW5wdXQoKTtcclxuICB9XHJcblxyXG4gIHJlbW92ZVNlbGVjdGlvbihvcHRpb246IFNlbGVjdE9wdGlvbjxUPik6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuZGlzYWJsZWQgfHwgb3B0aW9uPy5kaXNhYmxlZCkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgZmlsdGVyZWRWYWx1ZXMgPSB0aGlzLl92YWx1ZXMoKS5maWx0ZXIoXHJcbiAgICAgICh2YWx1ZTogVCkgPT4gIXRoaXMuY29tcGFyZUZuKHZhbHVlLCBvcHRpb24udmFsdWUpLFxyXG4gICAgKTtcclxuXHJcbiAgICB0aGlzLnVwZGF0ZVZhbHVlcyhmaWx0ZXJlZFZhbHVlcyk7XHJcbiAgfVxyXG5cclxuICB0cmFja0J5Rm4oX2luZGV4OiBudW1iZXIsIG9wdGlvbjogU2VsZWN0T3B0aW9uPFQ+KTogVCB8IG51bWJlciB7XHJcbiAgICByZXR1cm4gb3B0aW9uLnZhbHVlID8/IF9pbmRleDtcclxuICB9XHJcblxyXG4gIHdyaXRlVmFsdWUodmFsdWU6IFRbXSB8IG51bGwpOiB2b2lkIHtcclxuICAgIHRoaXMuX3ZhbHVlcy5zZXQoQXJyYXkuaXNBcnJheSh2YWx1ZSkgPyB2YWx1ZSA6IFtdKTtcclxuICB9XHJcblxyXG4gIHJlZ2lzdGVyT25DaGFuZ2UoZm46IHR5cGVvZiB0aGlzLm9uQ2hhbmdlKTogdm9pZCB7XHJcbiAgICB0aGlzLm9uQ2hhbmdlID0gZm47XHJcbiAgfVxyXG5cclxuICByZWdpc3Rlck9uVG91Y2hlZChmbjogKCkgPT4gdm9pZCk6IHZvaWQge1xyXG4gICAgdGhpcy5vblRvdWNoZWQgPSBmbjtcclxuICB9XHJcblxyXG4gIG92ZXJyaWRlIHNldERpc2FibGVkU3RhdGUoaXNEaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xyXG4gICAgdGhpcy5kaXNhYmxlZCA9IGlzRGlzYWJsZWQ7XHJcblxyXG4gICAgaWYgKGlzRGlzYWJsZWQpIHtcclxuICAgICAgdGhpcy5pbnB1dENvbnRyb2wuZGlzYWJsZSh7IGVtaXRFdmVudDogZmFsc2UgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmlucHV0Q29udHJvbC5lbmFibGUoeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMudXBkYXRlRGlzYWJsZWRTdGF0ZSgpO1xyXG4gIH1cclxuXHJcbiAgYmx1cigpOiB2b2lkIHtcclxuICAgIHRoaXMub25Ub3VjaGVkKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIG9uQ2hhbmdlOiAodmFsdWU6IFRbXSB8IG51bGwpID0+IHZvaWQgPSAoKSA9PiB7fTtcclxuXHJcbiAgcHJpdmF0ZSBvblRvdWNoZWQ6ICgpID0+IHZvaWQgPSAoKSA9PiB7fTtcclxuXHJcbiAgcHJpdmF0ZSB1cGRhdGVWYWx1ZXModmFsdWVzOiBUW10pOiB2b2lkIHtcclxuICAgIHRoaXMuX3ZhbHVlcy5zZXQodmFsdWVzKTtcclxuICAgIHRoaXMub25DaGFuZ2UodmFsdWVzKTtcclxuICAgIHRoaXMuc2VsZWN0aW9uQ2hhbmdlLmVtaXQodmFsdWVzKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY2xlYXJBbmRSZWZvY3VzSW5wdXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLmlucHV0Q29udHJvbC5zZXRWYWx1ZSgnJyk7XHJcbiAgICB0aGlzLmlucHV0UmVmPy5uYXRpdmVFbGVtZW50Py5mb2N1cygpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXRWYWxpZFNlbGVjdGVkT3B0aW9ucyhcclxuICAgIHNlbGVjdGVkOiBUW10sXHJcbiAgICBvcHRpb25zOiBTZWxlY3RPcHRpb248VD5bXSxcclxuICApOiBTZWxlY3RPcHRpb248VD5bXSB7XHJcbiAgICBpZiAoIXNlbGVjdGVkIHx8ICFvcHRpb25zKSB7XHJcbiAgICAgIHJldHVybiBbXTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gc2VsZWN0ZWRcclxuICAgICAgLm1hcCgoaXRlbSkgPT5cclxuICAgICAgICBvcHRpb25zLmZpbmQoKG9wdGlvbikgPT4gdGhpcy5jb21wYXJlRm4ob3B0aW9uLnZhbHVlLCBpdGVtKSksXHJcbiAgICAgIClcclxuICAgICAgLmZpbHRlcigodmFsdWUpOiB2YWx1ZSBpcyBTZWxlY3RPcHRpb248VD4gPT4gISF2YWx1ZSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldEZpbHRlcmVkT3B0aW9ucyhcclxuICAgIHRlcm06IHN0cmluZyB8IG51bGwsXHJcbiAgICBzZWxlY3RlZDogVFtdLFxyXG4gICAgb3B0aW9uczogU2VsZWN0T3B0aW9uPFQ+W10sXHJcbiAgKTogU2VsZWN0T3B0aW9uPFQ+W10ge1xyXG4gICAgaWYgKCFzZWxlY3RlZCB8fCAhb3B0aW9ucykge1xyXG4gICAgICByZXR1cm4gW107XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3Qgbm9ybWFsaXplZFRlcm0gPSB0ZXJtPy50b0xvd2VyQ2FzZSgpID8/ICcnO1xyXG5cclxuICAgIHJldHVybiBvcHRpb25zLmZpbHRlcigob3B0aW9uKSA9PiB7XHJcbiAgICAgIGNvbnN0IGV4aXN0aW5nU2VsZWN0aW9uID0gc2VsZWN0ZWQuc29tZSgoc2VsZWN0ZWRPcHRpb246IFQpID0+XHJcbiAgICAgICAgdGhpcy5jb21wYXJlRm4oc2VsZWN0ZWRPcHRpb24sIG9wdGlvbi52YWx1ZSksXHJcbiAgICAgICk7XHJcbiAgICAgIGNvbnN0IG1hdGNoZWRUZXJtID1cclxuICAgICAgICBvcHRpb24ubGFiZWw/LnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMobm9ybWFsaXplZFRlcm0pIHx8XHJcbiAgICAgICAgdGVybT8ubGVuZ3RoID09PSAwO1xyXG5cclxuICAgICAgcmV0dXJuICFleGlzdGluZ1NlbGVjdGlvbiAmJiBtYXRjaGVkVGVybTtcclxuICAgIH0pO1xyXG4gIH1cclxufVxyXG4iLCI8ZWNhYnMtZWxlbWVudC13cmFwcGVyIFtkYXRhXT1cImdldERhdGEoKVwiPlxyXG4gIDxkaXYgY2xhc3M9XCJmb3JtLWZpZWxkX19pbnB1dC0td3JhcHBlclwiPlxyXG4gICAgPGlucHV0IG1hdElucHV0XHJcbiAgICAgICAgICAgW2lkXT1cImxhYmVsXCJcclxuICAgICAgICAgICBbbmFtZV09XCJsYWJlbFwiXHJcbiAgICAgICAgICAgY2xhc3M9XCJmb3JtLWZpZWxkX19pbnB1dFwiXHJcbiAgICAgICAgICAgW25nQ2xhc3NdPVwiZGlzYWJsZWQgPyAnZm9ybS1maWVsZF9faW5wdXQtLWRpc2FibGVkJyA6IG51bGxcIlxyXG4gICAgICAgICAgICNpbnB1dEVsZW1cclxuICAgICAgICAgICBbbWF0Q2hpcElucHV0Rm9yXT1cImNoaXBHcmlkXCJcclxuICAgICAgICAgICBbbWF0QXV0b2NvbXBsZXRlXT1cImF1dG9cIlxyXG4gICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJpbnB1dENvbnRyb2xcIlxyXG4gICAgICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXHJcbiAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cInBsYWNlaG9sZGVyXCJcclxuICAgICAgICAgICAoYmx1cik9XCJibHVyKClcIi8+XHJcbiAgPC9kaXY+XHJcbjwvZWNhYnMtZWxlbWVudC13cmFwcGVyPlxyXG5cclxuPG1hdC1hdXRvY29tcGxldGUgI2F1dG89XCJtYXRBdXRvY29tcGxldGVcIlxyXG4gICAgICAgICAgICAgICAgICBbYXV0b0FjdGl2ZUZpcnN0T3B0aW9uXT1cImF1dG9BY3RpdmVGaXJzdE9wdGlvblwiXHJcbiAgICAgICAgICAgICAgICAgIChvcHRpb25TZWxlY3RlZCk9XCJzZXRTZWxlY3Rpb24oJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgIChvcGVuZWQpPVwic2V0T3ZlcmxheUhlaWdodCgpXCJcclxuICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cIm92ZXJsYXlQYW5lbENsYXNzXCI+XHJcbiAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IG9wdGlvbiBvZiBmaWx0ZXJlZE9wdGlvbnMoKTsgdHJhY2tCeTogdHJhY2tCeUZuXCJcclxuICAgICAgICAgICAgICBbdmFsdWVdPVwib3B0aW9uXCJcclxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwib3B0aW9uLmRpc2FibGVkID8/IGZhbHNlXCI+XHJcbiAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImF2YXRhckNvbnRleHRcIlxyXG4gICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyAkaW1wbGljaXQ6IG9wdGlvbn1cIj5cclxuICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAge3sgb3B0aW9uLmxhYmVsIH19XHJcbiAgPC9tYXQtb3B0aW9uPlxyXG5cclxuICA8bWF0LW9wdGlvbiBkaXNhYmxlZCAqbmdJZj1cIm5vTWF0Y2hSZXN1bHQoKVwiPlxyXG4gICAge3sgbm9SZXN1bHRzVGV4dCB9fVxyXG4gIDwvbWF0LW9wdGlvbj5cclxuPC9tYXQtYXV0b2NvbXBsZXRlPlxyXG5cclxuPG1hdC1jaGlwLWdyaWQgI2NoaXBHcmlkXHJcbiAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXHJcbiAgICAgICAgICAgICAgIFtjbGFzcy5tdC00XT1cInNlbGVjdGVkT3B0aW9ucygpLmxlbmd0aCA+IDBcIj5cclxuICA8bWF0LWNoaXAtcm93ICpuZ0Zvcj1cImxldCBvcHRpb24gb2Ygc2VsZWN0ZWRPcHRpb25zKCk7IHRyYWNrQnk6IHRyYWNrQnlGblwiXHJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWQgfHwgb3B0aW9uLmRpc2FibGVkXCJcclxuICAgICAgICAgICAgICAgIChyZW1vdmVkKT1cInJlbW92ZVNlbGVjdGlvbihvcHRpb24pXCI+XHJcbiAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImF2YXRhckNvbnRleHRcIlxyXG4gICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyAkaW1wbGljaXQ6IG9wdGlvbn1cIj5cclxuICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJvcHRpb24/LmxhYmVsIGFzIGxhYmVsXCI+XHJcbiAgICAgIDxzcGFuIFttYXRUb29sdGlwXT1cImxhYmVsXCJcclxuICAgICAgICAgICAgW21hdFRvb2x0aXBEaXNhYmxlZF09XCJsYWJlbC5sZW5ndGggPD0gdHJ1bmNhdGVBdFwiPlxyXG4gICAgICAgIHt7IGxhYmVsIHwgdHJ1bmNhdGU6IHRydW5jYXRlQXQgfX1cclxuICAgICAgPC9zcGFuPlxyXG4gICAgPC9uZy1jb250YWluZXI+XHJcbiAgICA8bWF0LWljb24gbWF0Q2hpcFJlbW92ZVxyXG4gICAgICAgICAgICAgIHN2Z0ljb249XCJwaC1saWdodDp4XCI+XHJcbiAgICA8L21hdC1pY29uPlxyXG4gIDwvbWF0LWNoaXAtcm93PlxyXG48L21hdC1jaGlwLWdyaWQ+XHJcblxyXG48bmctdGVtcGxhdGUgI2F2YXRhckNvbnRleHQgbGV0LW9wdGlvbj5cclxuICA8bmctY29udGFpbmVyICpuZ0lmPVwiYXZhdGFyVGVtcGxhdGVcIj5cclxuICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPVwiYXZhdGFyVGVtcGxhdGVcIlxyXG4gICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyAkaW1wbGljaXQ6IG9wdGlvbn1cIj5cclxuICAgIDwvbmctY29udGFpbmVyPlxyXG4gIDwvbmctY29udGFpbmVyPlxyXG48L25nLXRlbXBsYXRlPlxyXG4iXX0=
|
|
231
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWNhYnMtY2hpcC1hdXRvY29tcGxldGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZWNhYnMtY29tcG9uZW50cy9zcmMvbGliL2VjYWJzLWNoaXAtYXV0b2NvbXBsZXRlL2VjYWJzLWNoaXAtYXV0b2NvbXBsZXRlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2VjYWJzLWNvbXBvbmVudHMvc3JjL2xpYi9lY2Ficy1jaGlwLWF1dG9jb21wbGV0ZS9lY2Ficy1jaGlwLWF1dG9jb21wbGV0ZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxRQUFRLEVBQ1IsVUFBVSxFQUVWLFlBQVksRUFDWixVQUFVLEVBQ1YsTUFBTSxFQUNOLE1BQU0sRUFDTixLQUFLLEVBRUwsTUFBTSxFQUNOLE1BQU0sRUFHTixTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUF1QixXQUFXLEVBQUUsaUJBQWlCLEVBQUUsbUJBQW1CLEdBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUUxRyxPQUFPLHlCQUF5QixNQUFNLHNCQUFzQixDQUFDO0FBQzdELE9BQU8sRUFBQyxxQkFBcUIsR0FBZ0MsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNwRyxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSxtQ0FBbUMsQ0FBQztBQUNuRSxPQUFPLEVBQUMsa0JBQWtCLEVBQUUsUUFBUSxFQUFDLE1BQU0sNEJBQTRCLENBQUM7QUFDeEUsT0FBTyxFQUFDLEdBQUcsRUFBRSxTQUFTLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFDcEMsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLHlCQUF5QixDQUFDO0FBQ3ZELE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSx3QkFBd0IsQ0FBQztBQUNyRCxPQUFPLEVBQUMsWUFBWSxFQUFF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RHhCLFNBQVM7dUJBQUMsV0FBVztnQkFHYixjQUFjO3NCQUF0QixLQUFLO2dCQUdOLHFCQUFxQjtzQkFEcEIsS0FBSztnQkFJTixhQUFhO3NCQURaLEtBQUs7Z0JBSU4sV0FBVztzQkFEVixLQUFLO2dCQUlOLFNBQVM7c0JBRFIsS0FBSztnQkFJTixjQUFjO3NCQURiLEtBQUs7Z0JBSU4sVUFBVTtzQkFEVCxLQUFLO2dCQUlOLHlCQUF5QjtzQkFEeEIsS0FBSztnQkFJRixPQUFPO3NCQURWLEtBQUs7dUJBQUMsRUFBQyxRQUFRLEVBQUUsSUFBSSxFQUFDO2dCQU1kLGVBQWU7c0JBRHZCLE1BQU07Z0JBSUUsVUFBVTtzQkFEbEIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXHJcbiAgQ29tcG9uZW50LFxyXG4gIGNvbXB1dGVkLFxyXG4gIERlc3Ryb3lSZWYsXHJcbiAgRWxlbWVudFJlZixcclxuICBFdmVudEVtaXR0ZXIsXHJcbiAgZm9yd2FyZFJlZixcclxuICBpbmplY3QsXHJcbiAgSW5qZWN0LFxyXG4gIElucHV0LFxyXG4gIE9uQ2hhbmdlcyxcclxuICBPdXRwdXQsXHJcbiAgc2lnbmFsLFxyXG4gIFNpbXBsZUNoYW5nZXMsXHJcbiAgVGVtcGxhdGVSZWYsXHJcbiAgVmlld0NoaWxkLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge0NvbnRyb2xWYWx1ZUFjY2Vzc29yLCBGb3JtQ29udHJvbCwgTkdfVkFMVUVfQUNDRVNTT1IsIFJlYWN0aXZlRm9ybXNNb2R1bGUsfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7U2VsZWN0T3B0aW9ufSBmcm9tICcuLi9iYXNlL21vZGVscy9zZWxlY3QubW9kZWxzJztcclxuaW1wb3J0IEVjYWJzRWxlbWVudEJhc2VDb21wb25lbnQgZnJvbSAnLi4vYmFzZS9lbGVtZW50LWJhc2UnO1xyXG5pbXBvcnQge01hdEF1dG9jb21wbGV0ZU1vZHVsZSwgTWF0QXV0b2NvbXBsZXRlU2VsZWN0ZWRFdmVudCx9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2F1dG9jb21wbGV0ZSc7XHJcbmltcG9ydCB7RWNhYnNJbnB1dE1vZHVsZX0gZnJvbSAnLi4vZWNhYnMtaW5wdXQvZWNhYnMtaW5wdXQubW9kdWxlJztcclxuaW1wb3J0IHt0YWtlVW50aWxEZXN0cm95ZWQsIHRvU2lnbmFsfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XHJcbmltcG9ydCB7bWFwLCBzdGFydFdpdGh9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQge01hdENoaXBzTW9kdWxlfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9jaGlwcyc7XHJcbmltcG9ydCB7TWF0SWNvbk1vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaWNvbic7XHJcbmltcG9ydCB7Q29tbW9uTW9kdWxlLCBET0NVTUVOVH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHtNYXRJbnB1dE1vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaW5wdXQnO1xyXG5pbXBvcnQge0VsZW1lbnRXcmFwcGVyTW9kdWxlfSBmcm9tICcuLi9iYXNlL2VsZW1lbnQtd3JhcHBlci9lbGVtZW50LXdyYXBwZXIubW9kdWxlJztcclxuaW1wb3J0IHtOZ3hQaG9zcGhvckljb25zTGlnaHRGaWxlTW9kdWxlfSBmcm9tICduZ3gtcGhvc3Bob3ItaWNvbnMnO1xyXG5pbXBvcnQge01hdFRvb2x0aXBNb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3Rvb2x0aXAnO1xyXG5pbXBvcnQge0VjYWJzUGlwZXNNb2R1bGV9IGZyb20gJy4uL2Jhc2UvcGlwZXMvcGlwZXMubW9kdWxlJztcclxuaW1wb3J0IHtkaXN0aW5jdFVudGlsQ2hhbmdlZH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQge0VjYWJzTG9hZGluZ01vZHVsZX0gZnJvbSBcIi4uL2VjYWJzLWxvYWRpbmcvZWNhYnMtbG9hZGluZy5tb2R1bGVcIjtcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnZWNhYnMtY2hpcC1hdXRvY29tcGxldGUnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9lY2Ficy1jaGlwLWF1dG9jb21wbGV0ZS5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vZWNhYnMtY2hpcC1hdXRvY29tcGxldGUuY29tcG9uZW50LnNjc3MnXSxcclxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcclxuICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gIGltcG9ydHM6IFtcclxuICAgIENvbW1vbk1vZHVsZSxcclxuICAgIEVjYWJzSW5wdXRNb2R1bGUsXHJcbiAgICBNYXRDaGlwc01vZHVsZSxcclxuICAgIE1hdEljb25Nb2R1bGUsXHJcbiAgICBNYXRBdXRvY29tcGxldGVNb2R1bGUsXHJcbiAgICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxyXG4gICAgTWF0SW5wdXRNb2R1bGUsXHJcbiAgICBFbGVtZW50V3JhcHBlck1vZHVsZSxcclxuICAgIE5neFBob3NwaG9ySWNvbnNMaWdodEZpbGVNb2R1bGUsXHJcbiAgICBNYXRUb29sdGlwTW9kdWxlLFxyXG4gICAgRWNhYnNQaXBlc01vZHVsZSxcclxuICAgIEVjYWJzTG9hZGluZ01vZHVsZSxcclxuICBdLFxyXG4gIHByb3ZpZGVyczogW1xyXG4gICAge1xyXG4gICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcclxuICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gRWNhYnNDaGlwQXV0b2NvbXBsZXRlQ29tcG9uZW50KSxcclxuICAgICAgbXVsdGk6IHRydWUsXHJcbiAgICB9LFxyXG4gIF0sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBFY2Fic0NoaXBBdXRvY29tcGxldGVDb21wb25lbnQ8VCA9IHVua25vd24+XHJcbiAgZXh0ZW5kcyBFY2Fic0VsZW1lbnRCYXNlQ29tcG9uZW50XHJcbiAgaW1wbGVtZW50cyBDb250cm9sVmFsdWVBY2Nlc3NvciwgT25DaGFuZ2VzIHtcclxuICBAVmlld0NoaWxkKCdpbnB1dEVsZW0nKVxyXG4gIHByaXZhdGUgcmVhZG9ubHkgaW5wdXRSZWY/OiBFbGVtZW50UmVmPEhUTUxJbnB1dEVsZW1lbnQ+O1xyXG5cclxuICBASW5wdXQoKSB2aXNpYmxlT3B0aW9ucyA9IDguNTtcclxuXHJcbiAgQElucHV0KClcclxuICBhdXRvQWN0aXZlRmlyc3RPcHRpb24gPSB0cnVlO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIG5vUmVzdWx0c1RleHQgPSAnTm8gcmVzdWx0cyBmb3VuZCc7XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgbG9hZGluZ1RleHQgPSAnTG9hZGluZy4uLic7XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgY29tcGFyZUZuOiAoYTogVCwgYjogVCkgPT4gYm9vbGVhbiA9IE9iamVjdC5pcztcclxuXHJcbiAgQElucHV0KClcclxuICBhdmF0YXJUZW1wbGF0ZTogVGVtcGxhdGVSZWY8eyAkaW1wbGljaXQ6IFNlbGVjdE9wdGlvbjxUPiB9PiB8IG51bGw7XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgdHJ1bmNhdGVBdCA9IDE4O1xyXG5cclxuICBASW5wdXQoKVxyXG4gIHN1cHByZXNzTmV4dFRlcm1PblJlZm9jdXMgPSBmYWxzZTtcclxuXHJcbiAgQElucHV0KHtyZXF1aXJlZDogdHJ1ZX0pXHJcbiAgc2V0IG9wdGlvbnModmFsdWU6IFNlbGVjdE9wdGlvbjxUPltdIHwgbnVsbCkge1xyXG4gICAgdGhpcy5fb3B0aW9ucy5zZXQodmFsdWUpO1xyXG4gIH1cclxuXHJcbiAgQE91dHB1dCgpXHJcbiAgcmVhZG9ubHkgc2VsZWN0aW9uQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxUW10+KCk7XHJcblxyXG4gIEBPdXRwdXQoKVxyXG4gIHJlYWRvbmx5IHRlcm1DaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcclxuXHJcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGlucHV0Q29udHJvbCA9IG5ldyBGb3JtQ29udHJvbCgnJyk7XHJcblxyXG4gIHByaXZhdGUgcmVhZG9ubHkgbm9ybWFsaXplZFRlcm0kID0gdGhpcy5pbnB1dENvbnRyb2wudmFsdWVDaGFuZ2VzLnBpcGUoXHJcbiAgICBzdGFydFdpdGgoJycpLFxyXG4gICAgbWFwKCh2YWx1ZSkgPT4gdmFsdWUgPz8gJycpLFxyXG4gICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcclxuICApO1xyXG5cclxuICBwcml2YXRlIHJlYWRvbmx5IF9sb2FkaW5nID0gc2lnbmFsPGJvb2xlYW4+KGZhbHNlKTtcclxuICBwcml2YXRlIHJlYWRvbmx5IF9vcHRpb25zID0gc2lnbmFsPFNlbGVjdE9wdGlvbjxUPltdPihbXSk7XHJcbiAgcHJpdmF0ZSByZWFkb25seSBfdmFsdWVzID0gc2lnbmFsPFRbXT4oW10pO1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgX3N1cHByZXNzTmV4dFRlcm1PblJlZm9jdXMgPSBzaWduYWw8Ym9vbGVhbj4oZmFsc2UpO1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgX3Rlcm0gPSB0b1NpZ25hbCh0aGlzLm5vcm1hbGl6ZWRUZXJtJCwge2luaXRpYWxWYWx1ZTogJyd9KTtcclxuICBwcml2YXRlIHJlYWRvbmx5IGRlc3Ryb3lSZWYgPSBpbmplY3QoRGVzdHJveVJlZik7XHJcblxyXG4gIHByb3RlY3RlZCByZWFkb25seSBvdmVybGF5UGFuZWxDbGFzcyA9XHJcbiAgICAnZWNhYnMtY2hpcC1hdXRvY29tcGxldGUtb3ZlcmxheS1wYW5lbCc7XHJcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHNlbGVjdGVkT3B0aW9ucyA9IGNvbXB1dGVkKCgpID0+XHJcbiAgICB0aGlzLnNldFZhbGlkU2VsZWN0ZWRPcHRpb25zKHRoaXMuX3ZhbHVlcygpLCB0aGlzLl9vcHRpb25zKCkpLFxyXG4gICk7XHJcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGZpbHRlcmVkT3B0aW9ucyA9IGNvbXB1dGVkKCgpID0+XHJcbiAgICB0aGlzLl9sb2FkaW5nKCkgPyBbXSA6IHRoaXMuc2V0RmlsdGVyZWRPcHRpb25zKHRoaXMuX3Rlcm0oKSwgdGhpcy5fdmFsdWVzKCksIHRoaXMuX29wdGlvbnMoKSksXHJcbiAgKTtcclxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgbm9NYXRjaFJlc3VsdCA9IGNvbXB1dGVkKFxyXG4gICAgKCkgPT4gIXRoaXMuX2xvYWRpbmcoKSAmJiAhIXRoaXMuX3Rlcm0oKS50cmltKCkubGVuZ3RoICYmICF0aGlzLmZpbHRlcmVkT3B0aW9ucygpLmxlbmd0aCxcclxuICApO1xyXG5cclxuICBnZXQgb3B0aW9ucygpOiBTZWxlY3RPcHRpb248VD5bXSB8IG51bGwge1xyXG4gICAgcmV0dXJuIHRoaXMuX29wdGlvbnMoKTtcclxuICB9XHJcblxyXG4gIGNvbnN0cnVjdG9yKEBJbmplY3QoRE9DVU1FTlQpIHByaXZhdGUgcmVhZG9ubHkgZG9jdW1lbnQ6IERvY3VtZW50KSB7XHJcbiAgICBzdXBlcigpO1xyXG5cclxuICAgIHRoaXMubm9ybWFsaXplZFRlcm0kXHJcbiAgICAgIC5waXBlKHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpKVxyXG4gICAgICAuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xyXG4gICAgICAgIGlmICh0aGlzLnN1cHByZXNzTmV4dFRlcm1PblJlZm9jdXMgJiYgdGhpcy5fc3VwcHJlc3NOZXh0VGVybU9uUmVmb2N1cygpICYmIHZhbHVlID09PSAnJykge1xyXG4gICAgICAgICAgdGhpcy5fc3VwcHJlc3NOZXh0VGVybU9uUmVmb2N1cy5zZXQoZmFsc2UpO1xyXG5cclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudGVybUNoYW5nZS5lbWl0KHZhbHVlKTtcclxuICAgICAgICB0aGlzLl9zdXBwcmVzc05leHRUZXJtT25SZWZvY3VzLnNldChmYWxzZSk7XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xyXG4gICAgY29uc3Qge2xvYWRpbmd9ID0gY2hhbmdlcyA/PyB7fTtcclxuXHJcbiAgICBpZiAobG9hZGluZykge1xyXG4gICAgICB0aGlzLl9sb2FkaW5nLnNldCh0aGlzLmxvYWRpbmcpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2V0T3ZlcmxheUhlaWdodCgpOiB2b2lkIHtcclxuICAgIGNvbnN0IHBhbmVsID0gdGhpcy5kb2N1bWVudC5xdWVyeVNlbGVjdG9yKFxyXG4gICAgICBgLiR7dGhpcy5vdmVybGF5UGFuZWxDbGFzc31gLFxyXG4gICAgKSBhcyBIVE1MRWxlbWVudCB8IG51bGw7XHJcblxyXG4gICAgaWYgKCFwYW5lbCkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgcGFuZWwuc3R5bGUuc2V0UHJvcGVydHkoXHJcbiAgICAgICctLWF1dG9jb21wbGV0ZS12aXNpYmxlLW9wdGlvbnMnLFxyXG4gICAgICBTdHJpbmcodGhpcy52aXNpYmxlT3B0aW9ucyksXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgc2V0U2VsZWN0aW9uKGV2ZW50OiBNYXRBdXRvY29tcGxldGVTZWxlY3RlZEV2ZW50KTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5kaXNhYmxlZCkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3Qgc2VsZWN0ZWRWYWx1ZTogU2VsZWN0T3B0aW9uPFQ+ID0gZXZlbnQub3B0aW9uLnZhbHVlO1xyXG5cclxuICAgIGlmIChzZWxlY3RlZFZhbHVlPy5kaXNhYmxlZCkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgZXhpc3RpbmdTZWxlY3Rpb24gPSB0aGlzLl92YWx1ZXMoKS5zb21lKChzZWxlY3RlZE9wdGlvbjogVCkgPT5cclxuICAgICAgdGhpcy5jb21wYXJlRm4oc2VsZWN0ZWRPcHRpb24sIHNlbGVjdGVkVmFsdWUudmFsdWUpLFxyXG4gICAgKTtcclxuXHJcbiAgICBpZiAoIWV4aXN0aW5nU2VsZWN0aW9uKSB7XHJcbiAgICAgIHRoaXMudXBkYXRlVmFsdWVzKFsuLi50aGlzLl92YWx1ZXMoKSwgc2VsZWN0ZWRWYWx1ZS52YWx1ZV0pO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuY2xlYXJBbmRSZWZvY3VzSW5wdXQoKTtcclxuICB9XHJcblxyXG4gIHJlbW92ZVNlbGVjdGlvbihvcHRpb246IFNlbGVjdE9wdGlvbjxUPik6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuZGlzYWJsZWQgfHwgb3B0aW9uPy5kaXNhYmxlZCkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgZmlsdGVyZWRWYWx1ZXMgPSB0aGlzLl92YWx1ZXMoKS5maWx0ZXIoXHJcbiAgICAgICh2YWx1ZTogVCkgPT4gIXRoaXMuY29tcGFyZUZuKHZhbHVlLCBvcHRpb24udmFsdWUpLFxyXG4gICAgKTtcclxuXHJcbiAgICB0aGlzLnVwZGF0ZVZhbHVlcyhmaWx0ZXJlZFZhbHVlcyk7XHJcbiAgfVxyXG5cclxuICB0cmFja0J5Rm4oX2luZGV4OiBudW1iZXIsIG9wdGlvbjogU2VsZWN0T3B0aW9uPFQ+KTogVCB8IG51bWJlciB7XHJcbiAgICByZXR1cm4gb3B0aW9uLnZhbHVlID8/IF9pbmRleDtcclxuICB9XHJcblxyXG4gIHdyaXRlVmFsdWUodmFsdWU6IFRbXSB8IG51bGwpOiB2b2lkIHtcclxuICAgIHRoaXMuX3ZhbHVlcy5zZXQoQXJyYXkuaXNBcnJheSh2YWx1ZSkgPyB2YWx1ZSA6IFtdKTtcclxuICB9XHJcblxyXG4gIHJlZ2lzdGVyT25DaGFuZ2UoZm46IHR5cGVvZiB0aGlzLm9uQ2hhbmdlKTogdm9pZCB7XHJcbiAgICB0aGlzLm9uQ2hhbmdlID0gZm47XHJcbiAgfVxyXG5cclxuICByZWdpc3Rlck9uVG91Y2hlZChmbjogKCkgPT4gdm9pZCk6IHZvaWQge1xyXG4gICAgdGhpcy5vblRvdWNoZWQgPSBmbjtcclxuICB9XHJcblxyXG4gIG92ZXJyaWRlIHNldERpc2FibGVkU3RhdGUoaXNEaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xyXG4gICAgdGhpcy5kaXNhYmxlZCA9IGlzRGlzYWJsZWQ7XHJcblxyXG4gICAgaWYgKGlzRGlzYWJsZWQpIHtcclxuICAgICAgdGhpcy5pbnB1dENvbnRyb2wuZGlzYWJsZSh7ZW1pdEV2ZW50OiBmYWxzZX0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5pbnB1dENvbnRyb2wuZW5hYmxlKHtlbWl0RXZlbnQ6IGZhbHNlfSk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy51cGRhdGVEaXNhYmxlZFN0YXRlKCk7XHJcbiAgfVxyXG5cclxuICBibHVyKCk6IHZvaWQge1xyXG4gICAgdGhpcy5vblRvdWNoZWQoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgb25DaGFuZ2U6ICh2YWx1ZTogVFtdIHwgbnVsbCkgPT4gdm9pZCA9ICgpID0+IHtcclxuICB9O1xyXG5cclxuICBwcml2YXRlIG9uVG91Y2hlZDogKCkgPT4gdm9pZCA9ICgpID0+IHtcclxuICB9O1xyXG5cclxuICBwcml2YXRlIHVwZGF0ZVZhbHVlcyh2YWx1ZXM6IFRbXSk6IHZvaWQge1xyXG4gICAgdGhpcy5fdmFsdWVzLnNldCh2YWx1ZXMpO1xyXG4gICAgdGhpcy5vbkNoYW5nZSh2YWx1ZXMpO1xyXG4gICAgdGhpcy5zZWxlY3Rpb25DaGFuZ2UuZW1pdCh2YWx1ZXMpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjbGVhckFuZFJlZm9jdXNJbnB1dCgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLnN1cHByZXNzTmV4dFRlcm1PblJlZm9jdXMpIHtcclxuICAgICAgdGhpcy5fc3VwcHJlc3NOZXh0VGVybU9uUmVmb2N1cy5zZXQodHJ1ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5pbnB1dENvbnRyb2wuc2V0VmFsdWUoJycpO1xyXG4gICAgdGhpcy5pbnB1dFJlZj8ubmF0aXZlRWxlbWVudD8uZm9jdXMoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0VmFsaWRTZWxlY3RlZE9wdGlvbnMoXHJcbiAgICBzZWxlY3RlZDogVFtdLFxyXG4gICAgb3B0aW9uczogU2VsZWN0T3B0aW9uPFQ+W10sXHJcbiAgKTogU2VsZWN0T3B0aW9uPFQ+W10ge1xyXG4gICAgaWYgKCFzZWxlY3RlZCB8fCAhb3B0aW9ucykge1xyXG4gICAgICByZXR1cm4gW107XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHNlbGVjdGVkXHJcbiAgICAgIC5tYXAoKGl0ZW0pID0+XHJcbiAgICAgICAgb3B0aW9ucy5maW5kKChvcHRpb24pID0+IHRoaXMuY29tcGFyZUZuKG9wdGlvbi52YWx1ZSwgaXRlbSkpLFxyXG4gICAgICApXHJcbiAgICAgIC5maWx0ZXIoKHZhbHVlKTogdmFsdWUgaXMgU2VsZWN0T3B0aW9uPFQ+ID0+ICEhdmFsdWUpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXRGaWx0ZXJlZE9wdGlvbnMoXHJcbiAgICB0ZXJtOiBzdHJpbmcgfCBudWxsLFxyXG4gICAgc2VsZWN0ZWQ6IFRbXSxcclxuICAgIG9wdGlvbnM6IFNlbGVjdE9wdGlvbjxUPltdLFxyXG4gICk6IFNlbGVjdE9wdGlvbjxUPltdIHtcclxuICAgIGlmICghc2VsZWN0ZWQgfHwgIW9wdGlvbnMpIHtcclxuICAgICAgcmV0dXJuIFtdO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IG5vcm1hbGl6ZWRUZXJtID0gdGVybT8udG9Mb3dlckNhc2UoKSA/PyAnJztcclxuXHJcbiAgICByZXR1cm4gb3B0aW9ucy5maWx0ZXIoKG9wdGlvbikgPT4ge1xyXG4gICAgICBjb25zdCBleGlzdGluZ1NlbGVjdGlvbiA9IHNlbGVjdGVkLnNvbWUoKHNlbGVjdGVkT3B0aW9uOiBUKSA9PlxyXG4gICAgICAgIHRoaXMuY29tcGFyZUZuKHNlbGVjdGVkT3B0aW9uLCBvcHRpb24udmFsdWUpLFxyXG4gICAgICApO1xyXG4gICAgICBjb25zdCBtYXRjaGVkVGVybSA9XHJcbiAgICAgICAgb3B0aW9uLmxhYmVsPy50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKG5vcm1hbGl6ZWRUZXJtKSB8fFxyXG4gICAgICAgIHRlcm0/Lmxlbmd0aCA9PT0gMDtcclxuXHJcbiAgICAgIHJldHVybiAhZXhpc3RpbmdTZWxlY3Rpb24gJiYgbWF0Y2hlZFRlcm07XHJcbiAgICB9KTtcclxuICB9XHJcbn1cclxuIiwiPGVjYWJzLWVsZW1lbnQtd3JhcHBlciBbZGF0YV09XCJnZXREYXRhKClcIj5cclxuICA8ZGl2IGNsYXNzPVwiZm9ybS1maWVsZF9faW5wdXQtLXdyYXBwZXJcIj5cclxuICAgIDxpbnB1dCBtYXRJbnB1dFxyXG4gICAgICAgICAgIFtpZF09XCJsYWJlbFwiXHJcbiAgICAgICAgICAgW25hbWVdPVwibGFiZWxcIlxyXG4gICAgICAgICAgIGNsYXNzPVwiZm9ybS1maWVsZF9faW5wdXRcIlxyXG4gICAgICAgICAgIFtuZ0NsYXNzXT1cImRpc2FibGVkID8gJ2Zvcm0tZmllbGRfX2lucHV0LS1kaXNhYmxlZCcgOiBudWxsXCJcclxuICAgICAgICAgICAjaW5wdXRFbGVtXHJcbiAgICAgICAgICAgW21hdENoaXBJbnB1dEZvcl09XCJjaGlwR3JpZFwiXHJcbiAgICAgICAgICAgW21hdEF1dG9jb21wbGV0ZV09XCJhdXRvXCJcclxuICAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwiaW5wdXRDb250cm9sXCJcclxuICAgICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxyXG4gICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJwbGFjZWhvbGRlclwiXHJcbiAgICAgICAgICAgKGJsdXIpPVwiYmx1cigpXCIvPlxyXG4gIDwvZGl2PlxyXG48L2VjYWJzLWVsZW1lbnQtd3JhcHBlcj5cclxuXHJcbjxtYXQtYXV0b2NvbXBsZXRlICNhdXRvPVwibWF0QXV0b2NvbXBsZXRlXCJcclxuICAgICAgICAgICAgICAgICAgW2F1dG9BY3RpdmVGaXJzdE9wdGlvbl09XCJhdXRvQWN0aXZlRmlyc3RPcHRpb25cIlxyXG4gICAgICAgICAgICAgICAgICAob3B0aW9uU2VsZWN0ZWQpPVwic2V0U2VsZWN0aW9uKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAob3BlbmVkKT1cInNldE92ZXJsYXlIZWlnaHQoKVwiXHJcbiAgICAgICAgICAgICAgICAgIFtjbGFzc109XCJvdmVybGF5UGFuZWxDbGFzc1wiPlxyXG4gIDxtYXQtb3B0aW9uICpuZ0Zvcj1cImxldCBvcHRpb24gb2YgZmlsdGVyZWRPcHRpb25zKCk7IHRyYWNrQnk6IHRyYWNrQnlGblwiXHJcbiAgICAgICAgICAgICAgW3ZhbHVlXT1cIm9wdGlvblwiXHJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIm9wdGlvbi5kaXNhYmxlZCA/PyBmYWxzZVwiPlxyXG4gICAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09XCJhdmF0YXJDb250ZXh0XCJcclxuICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgJGltcGxpY2l0OiBvcHRpb259XCI+XHJcbiAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgIHt7IG9wdGlvbi5sYWJlbCB9fVxyXG4gIDwvbWF0LW9wdGlvbj5cclxuXHJcbiAgPG1hdC1vcHRpb24gKm5nSWY9XCJsb2FkaW5nXCIgZGlzYWJsZWQ+XHJcbiAgICA8ZGl2IGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXJcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cIm1yLTJcIj57eyBsb2FkaW5nVGV4dCB9fTwvZGl2PlxyXG4gICAgICA8ZWNhYnMtbG9hZGluZy1zcGlubmVyIHNpemU9XCJ0aW55XCI+PC9lY2Ficy1sb2FkaW5nLXNwaW5uZXI+XHJcbiAgICA8L2Rpdj5cclxuICA8L21hdC1vcHRpb24+XHJcblxyXG4gIDxtYXQtb3B0aW9uIGRpc2FibGVkICpuZ0lmPVwibm9NYXRjaFJlc3VsdCgpXCI+XHJcbiAgICB7eyBub1Jlc3VsdHNUZXh0IH19XHJcbiAgPC9tYXQtb3B0aW9uPlxyXG48L21hdC1hdXRvY29tcGxldGU+XHJcblxyXG48bWF0LWNoaXAtZ3JpZCAjY2hpcEdyaWRcclxuICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcclxuICAgICAgICAgICAgICAgW2NsYXNzLm10LTRdPVwic2VsZWN0ZWRPcHRpb25zKCkubGVuZ3RoID4gMFwiPlxyXG4gIDxtYXQtY2hpcC1yb3cgKm5nRm9yPVwibGV0IG9wdGlvbiBvZiBzZWxlY3RlZE9wdGlvbnMoKTsgdHJhY2tCeTogdHJhY2tCeUZuXCJcclxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZCB8fCBvcHRpb24uZGlzYWJsZWRcIlxyXG4gICAgICAgICAgICAgICAgKHJlbW92ZWQpPVwicmVtb3ZlU2VsZWN0aW9uKG9wdGlvbilcIj5cclxuICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPVwiYXZhdGFyQ29udGV4dFwiXHJcbiAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7ICRpbXBsaWNpdDogb3B0aW9ufVwiPlxyXG4gICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm9wdGlvbj8ubGFiZWwgYXMgbGFiZWxcIj5cclxuICAgICAgPHNwYW4gW21hdFRvb2x0aXBdPVwibGFiZWxcIlxyXG4gICAgICAgICAgICBbbWF0VG9vbHRpcERpc2FibGVkXT1cImxhYmVsLmxlbmd0aCA8PSB0cnVuY2F0ZUF0XCI+XHJcbiAgICAgICAge3sgbGFiZWwgfCB0cnVuY2F0ZTogdHJ1bmNhdGVBdCB9fVxyXG4gICAgICA8L3NwYW4+XHJcbiAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgIDxtYXQtaWNvbiBtYXRDaGlwUmVtb3ZlXHJcbiAgICAgICAgICAgICAgc3ZnSWNvbj1cInBoLWxpZ2h0OnhcIj5cclxuICAgIDwvbWF0LWljb24+XHJcbiAgPC9tYXQtY2hpcC1yb3c+XHJcbjwvbWF0LWNoaXAtZ3JpZD5cclxuXHJcbjxuZy10ZW1wbGF0ZSAjYXZhdGFyQ29udGV4dCBsZXQtb3B0aW9uPlxyXG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCJhdmF0YXJUZW1wbGF0ZVwiPlxyXG4gICAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09XCJhdmF0YXJUZW1wbGF0ZVwiXHJcbiAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7ICRpbXBsaWNpdDogb3B0aW9ufVwiPlxyXG4gICAgPC9uZy1jb250YWluZXI+XHJcbiAgPC9uZy1jb250YWluZXI+XHJcbjwvbmctdGVtcGxhdGU+XHJcbiJdfQ==
|