@alauda/ui 7.2.1-beta → 7.2.1-beta.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/autocomplete/autocomplete.component.mjs +3 -3
- package/esm2022/drawer/component/drawer.component.mjs +3 -12
- package/esm2022/paginator/paginator.component.mjs +3 -3
- package/esm2022/paginator/paginator.module.mjs +3 -2
- package/esm2022/scrolling/virtual-for-of.directive.mjs +14 -2
- package/esm2022/select/base-select.mjs +265 -152
- package/esm2022/select/helper-directives.mjs +9 -54
- package/esm2022/select/index.mjs +3 -2
- package/esm2022/select/multi-select/multi-select.component.mjs +38 -58
- package/esm2022/select/option-group/option-group.component.mjs +16 -11
- package/esm2022/select/option-item/option-item.component.mjs +63 -0
- package/esm2022/select/option.component.mjs +48 -0
- package/esm2022/select/select.component.mjs +21 -13
- package/esm2022/select/select.module.mjs +16 -33
- package/esm2022/select/select.types.mjs +1 -1
- package/esm2022/select/validators.mjs +4 -9
- package/esm2022/tree-select/tree-select.component.mjs +3 -3
- package/fesm2022/alauda-ui.mjs +2251 -2225
- package/fesm2022/alauda-ui.mjs.map +1 -1
- package/package.json +1 -1
- package/select/base-select.d.ts +57 -36
- package/select/helper-directives.d.ts +3 -16
- package/select/index.d.ts +2 -1
- package/select/multi-select/multi-select.component.d.ts +16 -20
- package/select/option-group/option-group.component.d.ts +4 -5
- package/select/option-item/option-item.component.d.ts +23 -0
- package/select/option.component.d.ts +16 -0
- package/select/select.component.d.ts +3 -3
- package/select/select.module.d.ts +12 -17
- package/select/select.types.d.ts +8 -2
- package/esm2022/select/option/option.component.mjs +0 -120
- package/select/option/option.component.d.ts +0 -46
|
@@ -1,11 +1,21 @@
|
|
|
1
|
-
import { ContentChild, ContentChildren, Directive, EventEmitter, Input, Output, ViewChild, ViewChildren,
|
|
2
|
-
import {
|
|
1
|
+
import { ContentChild, ContentChildren, DestroyRef, Directive, ElementRef, EventEmitter, Input, Output, TemplateRef, ViewChild, ViewChildren, inject, } from '@angular/core';
|
|
2
|
+
import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
|
|
3
|
+
import { BehaviorSubject, combineLatest, map, switchMap, merge, startWith, } from 'rxjs';
|
|
3
4
|
import { CommonFormControl } from '../form';
|
|
5
|
+
import { VirtualScrollViewportComponent } from '../scrolling/virtual-scroll-viewport.component';
|
|
4
6
|
import { ComponentSize } from '../types';
|
|
5
7
|
import { coerceAttrBoolean, coerceString, isTemplateRef, publishRef, scrollIntoView, } from '../utils';
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
+
import { OptionItemCustomDirective } from './helper-directives';
|
|
9
|
+
import { OptionItemComponent } from './option-item/option-item.component';
|
|
10
|
+
import { OptionComponent } from './option.component';
|
|
8
11
|
import * as i0 from "@angular/core";
|
|
12
|
+
const itemSizeMap = {
|
|
13
|
+
[ComponentSize.Large]: 40,
|
|
14
|
+
[ComponentSize.Medium]: 32,
|
|
15
|
+
[ComponentSize.Small]: 28,
|
|
16
|
+
[ComponentSize.Mini]: 26,
|
|
17
|
+
[ComponentSize.Empty]: 32,
|
|
18
|
+
};
|
|
9
19
|
export class BaseSelect extends CommonFormControl {
|
|
10
20
|
get size() {
|
|
11
21
|
return this._size;
|
|
@@ -17,26 +27,44 @@ export class BaseSelect extends CommonFormControl {
|
|
|
17
27
|
this._size = val;
|
|
18
28
|
this.size$$.next(val);
|
|
19
29
|
}
|
|
30
|
+
get options() {
|
|
31
|
+
return this._options;
|
|
32
|
+
}
|
|
33
|
+
set options(val) {
|
|
34
|
+
this._options = val;
|
|
35
|
+
this.options$$.next(val);
|
|
36
|
+
}
|
|
20
37
|
filterable = true;
|
|
21
38
|
clearable;
|
|
39
|
+
allowCreate;
|
|
40
|
+
loading = false;
|
|
41
|
+
placeholder = '';
|
|
42
|
+
defaultFirstOption = true;
|
|
43
|
+
useVirtual;
|
|
44
|
+
itemSize;
|
|
45
|
+
maxItemLength = 10;
|
|
46
|
+
createFn = this._createFn;
|
|
22
47
|
filterFn = this._filterFn.bind(this);
|
|
23
48
|
trackFn = this._trackFn;
|
|
24
49
|
labelFn;
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
50
|
+
filterChange = new EventEmitter();
|
|
51
|
+
show = new EventEmitter();
|
|
52
|
+
hide = new EventEmitter();
|
|
53
|
+
selectRef;
|
|
54
|
+
tooltipRef;
|
|
55
|
+
optionListRef;
|
|
56
|
+
virtualScrollViewport;
|
|
57
|
+
inputItemTemplate;
|
|
58
|
+
contentOptionItems;
|
|
59
|
+
contentTplOptions;
|
|
32
60
|
get opened() {
|
|
33
61
|
return this.tooltipRef.isCreated;
|
|
34
62
|
}
|
|
35
63
|
get inputReadonly() {
|
|
36
64
|
return !(this.filterable && this.opened);
|
|
37
65
|
}
|
|
38
|
-
get
|
|
39
|
-
return this.
|
|
66
|
+
get _itemSize() {
|
|
67
|
+
return this.itemSize || itemSizeMap[this.size];
|
|
40
68
|
}
|
|
41
69
|
set filterString(val) {
|
|
42
70
|
if (val !== this._filterString) {
|
|
@@ -45,89 +73,141 @@ export class BaseSelect extends CommonFormControl {
|
|
|
45
73
|
this.filterChange.emit(val);
|
|
46
74
|
}
|
|
47
75
|
}
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
lazy = true;
|
|
52
|
-
filterChange = new EventEmitter();
|
|
53
|
-
show = new EventEmitter();
|
|
54
|
-
hide = new EventEmitter();
|
|
55
|
-
selectRef;
|
|
56
|
-
tooltipRef;
|
|
57
|
-
optionListRef;
|
|
58
|
-
inputtingOption;
|
|
59
|
-
optionContent;
|
|
60
|
-
customOptions;
|
|
61
|
-
contentOptions;
|
|
76
|
+
get filterString() {
|
|
77
|
+
return this._filterString;
|
|
78
|
+
}
|
|
62
79
|
isTemplateRef = isTemplateRef;
|
|
63
80
|
isMulti = false;
|
|
64
|
-
|
|
65
|
-
focusedOption;
|
|
81
|
+
scrolledIndex = 0;
|
|
66
82
|
_size = ComponentSize.Medium;
|
|
83
|
+
_options;
|
|
67
84
|
_filterString = '';
|
|
68
|
-
|
|
85
|
+
selectableOptions = [];
|
|
86
|
+
options$$ = new BehaviorSubject(null);
|
|
87
|
+
contentOptions$;
|
|
88
|
+
customOptions$;
|
|
89
|
+
inputtingOption$;
|
|
90
|
+
allOptions$ = new BehaviorSubject([]);
|
|
91
|
+
filterOptions$ = new BehaviorSubject([]);
|
|
92
|
+
containerWidth;
|
|
69
93
|
size$$ = new BehaviorSubject(this.size);
|
|
70
94
|
filterString$$ = new BehaviorSubject(this.filterString);
|
|
71
95
|
size$ = this.size$$.asObservable();
|
|
96
|
+
options$ = this.options$$.asObservable();
|
|
72
97
|
filterString$ = this.filterString$$.asObservable();
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
hasMatchedOption$;
|
|
76
|
-
customCreatedOptions$;
|
|
77
|
-
containerWidth;
|
|
98
|
+
focused$ = new BehaviorSubject(null);
|
|
99
|
+
destroyRef = inject(DestroyRef);
|
|
78
100
|
ngAfterContentInit() {
|
|
79
|
-
this.
|
|
101
|
+
this.contentOptions$ = this.options$.pipe(switchMap(options => {
|
|
102
|
+
if (options?.length) {
|
|
103
|
+
return this.options$;
|
|
104
|
+
}
|
|
105
|
+
return combineLatest([
|
|
106
|
+
this.values$,
|
|
107
|
+
merge(...this.contentTplOptions.map(contentTpl => contentTpl.changes$), this.contentTplOptions.changes).pipe(startWith(this.contentTplOptions)),
|
|
108
|
+
]).pipe(map(([values]) => this.tplOptions2Data(values)));
|
|
109
|
+
}), publishRef());
|
|
110
|
+
this.inputtingOption$ = this.filterString$.pipe(map(filterString => {
|
|
111
|
+
if (filterString && this.allowCreate) {
|
|
112
|
+
return this.createFn(filterString);
|
|
113
|
+
}
|
|
114
|
+
}), publishRef());
|
|
115
|
+
this.customOptions$ = combineLatest([
|
|
80
116
|
this.values$,
|
|
81
|
-
this.contentOptions
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
const included = optionValues
|
|
86
|
-
.map(value => this.trackFn(value))
|
|
87
|
-
.includes(this.trackFn(value));
|
|
88
|
-
if (!included) {
|
|
89
|
-
const label = this.labelFn?.(value) || coerceString(this.trackFn(value));
|
|
90
|
-
if (label) {
|
|
91
|
-
acc.push({
|
|
92
|
-
label,
|
|
93
|
-
value,
|
|
94
|
-
});
|
|
95
|
-
}
|
|
117
|
+
this.contentOptions$,
|
|
118
|
+
]).pipe(map(([values, options]) => {
|
|
119
|
+
if (!this.allowCreate) {
|
|
120
|
+
return [];
|
|
96
121
|
}
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
122
|
+
const optionKeys = new Set(options.map(option => this.trackFn(option.value)));
|
|
123
|
+
return values.reduce((acc, value) => {
|
|
124
|
+
if (!optionKeys.has(this.trackFn(value))) {
|
|
125
|
+
const label = this.labelFn?.(value) || coerceString(this.trackFn(value));
|
|
126
|
+
if (label) {
|
|
127
|
+
acc.push({
|
|
128
|
+
label,
|
|
129
|
+
value,
|
|
130
|
+
selected: true,
|
|
131
|
+
});
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
return acc;
|
|
135
|
+
}, []);
|
|
136
|
+
}), publishRef());
|
|
137
|
+
this.transformOptions();
|
|
138
|
+
this.filterOptions$
|
|
139
|
+
.pipe(takeUntilDestroyed(this.destroyRef))
|
|
140
|
+
.subscribe(options => {
|
|
141
|
+
this.selectableOptions = options.filter(option => !option.disabled);
|
|
142
|
+
});
|
|
143
|
+
}
|
|
144
|
+
tplOptions2Data(values) {
|
|
145
|
+
const contents = [];
|
|
146
|
+
let lastGroupTitle;
|
|
147
|
+
this.contentTplOptions.toArray().forEach(com => {
|
|
148
|
+
const { value, label, disabled, groupTitle, labelContext, contentTemplate, } = com;
|
|
149
|
+
if (lastGroupTitle !== groupTitle) {
|
|
150
|
+
lastGroupTitle = groupTitle;
|
|
151
|
+
contents.push({
|
|
152
|
+
groupTitle,
|
|
109
153
|
});
|
|
110
154
|
}
|
|
155
|
+
contents.push({
|
|
156
|
+
value,
|
|
157
|
+
label,
|
|
158
|
+
disabled,
|
|
159
|
+
labelContext,
|
|
160
|
+
selected: this.getSelected(value, values),
|
|
161
|
+
contentTemplate,
|
|
162
|
+
});
|
|
111
163
|
});
|
|
112
|
-
|
|
113
|
-
this.allOptions$.pipe(map(customOptions => customOptions.filter(option => option !== this.inputtingOption)), switchMap(options => options.length > 0
|
|
114
|
-
? combineLatest(options.map(option => option.value$))
|
|
115
|
-
: of([]))),
|
|
116
|
-
this.filterString$,
|
|
117
|
-
]).pipe(map(([values, filterString]) => values.some(value => this.trackFn(value) === filterString)), publishRef());
|
|
118
|
-
this.optionVisibles$ = this.contentOptions.changes.pipe(startWith(this.contentOptions), switchMap((options) => options.length > 0
|
|
119
|
-
? combineLatest(options.map(option => option.visible$))
|
|
120
|
-
: of([])), publishRef());
|
|
121
|
-
this.hasVisibleOption$ = this.optionVisibles$.pipe(map(visible => visible.some(Boolean)), distinctUntilChanged(), publishRef());
|
|
122
|
-
this.optionVisibles$.pipe(debounceTime(50)).subscribe(() => {
|
|
123
|
-
this.tooltipRef?.updatePosition();
|
|
124
|
-
});
|
|
164
|
+
return contents;
|
|
125
165
|
}
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
166
|
+
transformOptions() {
|
|
167
|
+
combineLatest([
|
|
168
|
+
this.inputtingOption$,
|
|
169
|
+
this.customOptions$,
|
|
170
|
+
this.contentOptions$,
|
|
171
|
+
])
|
|
172
|
+
.pipe(map(([inputtingOption, customOptions, contentOptions]) => {
|
|
173
|
+
const arr = [...customOptions, ...contentOptions];
|
|
174
|
+
if (inputtingOption) {
|
|
175
|
+
arr.unshift(inputtingOption);
|
|
176
|
+
}
|
|
177
|
+
return arr;
|
|
178
|
+
}))
|
|
179
|
+
.subscribe(arr => {
|
|
180
|
+
this.allOptions$.next(arr);
|
|
181
|
+
});
|
|
182
|
+
combineLatest([this.allOptions$, this.filterString$])
|
|
183
|
+
.pipe(takeUntilDestroyed(this.destroyRef), map(([options, filterString]) => {
|
|
184
|
+
const result = [];
|
|
185
|
+
let lastTitleOption;
|
|
186
|
+
let lastResultLength = 0;
|
|
187
|
+
let lastTitleResultLength = 0;
|
|
188
|
+
options.forEach((option, idx) => {
|
|
189
|
+
if (lastTitleOption &&
|
|
190
|
+
(idx === options.length - 1 ||
|
|
191
|
+
(option.groupTitle && lastTitleOption !== option)) &&
|
|
192
|
+
lastResultLength !== lastTitleResultLength) {
|
|
193
|
+
result.splice(lastTitleResultLength, 0, lastTitleOption);
|
|
194
|
+
}
|
|
195
|
+
if (option.groupTitle) {
|
|
196
|
+
lastTitleResultLength = result.length;
|
|
197
|
+
lastTitleOption = option;
|
|
198
|
+
}
|
|
199
|
+
else if (this.filterFn(filterString, option)) {
|
|
200
|
+
result.push(option);
|
|
201
|
+
}
|
|
202
|
+
lastResultLength = result.length;
|
|
203
|
+
});
|
|
204
|
+
return result;
|
|
205
|
+
}))
|
|
206
|
+
.subscribe(result => {
|
|
207
|
+
this.filterOptions$.next(result);
|
|
208
|
+
});
|
|
130
209
|
}
|
|
210
|
+
trackByValue = (_, item) => this.trackFn(item.value);
|
|
131
211
|
openOption() {
|
|
132
212
|
this.tooltipRef.show();
|
|
133
213
|
}
|
|
@@ -135,30 +215,16 @@ export class BaseSelect extends CommonFormControl {
|
|
|
135
215
|
this.tooltipRef.hide();
|
|
136
216
|
}
|
|
137
217
|
onShowOptions() {
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
this.show.emit();
|
|
144
|
-
};
|
|
145
|
-
if (this.optionContent) {
|
|
146
|
-
requestAnimationFrame(() => {
|
|
147
|
-
this.optionContent.attach();
|
|
148
|
-
exec();
|
|
149
|
-
});
|
|
150
|
-
}
|
|
151
|
-
else {
|
|
152
|
-
exec();
|
|
153
|
-
}
|
|
218
|
+
this.containerWidth = this.selectRef.nativeElement.offsetWidth + 'px';
|
|
219
|
+
requestAnimationFrame(() => {
|
|
220
|
+
this.autoFocusFirstOption();
|
|
221
|
+
});
|
|
222
|
+
this.show.emit();
|
|
154
223
|
}
|
|
155
224
|
onHideOptions() {
|
|
156
225
|
if (this.onTouched) {
|
|
157
226
|
this.onTouched();
|
|
158
227
|
}
|
|
159
|
-
if (!this.lazy) {
|
|
160
|
-
this.optionContent?.detach();
|
|
161
|
-
}
|
|
162
228
|
this.resetFocusedOption();
|
|
163
229
|
this.filterString = '';
|
|
164
230
|
this.hide.emit();
|
|
@@ -170,30 +236,30 @@ export class BaseSelect extends CommonFormControl {
|
|
|
170
236
|
});
|
|
171
237
|
this.cdr.markForCheck();
|
|
172
238
|
}
|
|
239
|
+
stopEvent(event) {
|
|
240
|
+
event.stopPropagation();
|
|
241
|
+
event.preventDefault();
|
|
242
|
+
}
|
|
173
243
|
onKeyDown(event) {
|
|
174
244
|
switch (event.key) {
|
|
175
245
|
case 'ArrowDown': {
|
|
176
246
|
this.focusOptionDir('down');
|
|
177
|
-
|
|
178
|
-
event.preventDefault();
|
|
247
|
+
this.stopEvent(event);
|
|
179
248
|
break;
|
|
180
249
|
}
|
|
181
250
|
case 'ArrowUp': {
|
|
182
251
|
this.focusOptionDir('up');
|
|
183
|
-
|
|
184
|
-
event.preventDefault();
|
|
252
|
+
this.stopEvent(event);
|
|
185
253
|
break;
|
|
186
254
|
}
|
|
187
255
|
case 'Enter': {
|
|
188
256
|
this.selectFocusedOption();
|
|
189
|
-
|
|
190
|
-
event.preventDefault();
|
|
257
|
+
this.stopEvent(event);
|
|
191
258
|
break;
|
|
192
259
|
}
|
|
193
260
|
case 'Escape': {
|
|
194
261
|
this.escSelect();
|
|
195
|
-
|
|
196
|
-
event.preventDefault();
|
|
262
|
+
this.stopEvent(event);
|
|
197
263
|
break;
|
|
198
264
|
}
|
|
199
265
|
}
|
|
@@ -202,19 +268,25 @@ export class BaseSelect extends CommonFormControl {
|
|
|
202
268
|
this.resetFocusedOption(option);
|
|
203
269
|
this.selectOption(option);
|
|
204
270
|
}
|
|
271
|
+
updateAllOptions(option) {
|
|
272
|
+
const allOptions = this.allOptions$.getValue();
|
|
273
|
+
allOptions.find(_option => _option.value === option.value).selected =
|
|
274
|
+
!option.selected;
|
|
275
|
+
this.allOptions$.next(allOptions);
|
|
276
|
+
}
|
|
205
277
|
autoFocusFirstOption() {
|
|
206
|
-
if (this.
|
|
207
|
-
const matchedOption = this.contentOptions.find(option => this.trackFn(option.value) === this.filterString);
|
|
208
|
-
this.resetFocusedOption(matchedOption || this.customOptions.first);
|
|
278
|
+
if (!this.selectableOptions.length) {
|
|
209
279
|
return;
|
|
210
280
|
}
|
|
211
|
-
const
|
|
281
|
+
const first = this.selectableOptions.find(option => option.selected) ||
|
|
282
|
+
(this.selectableOptions[0].groupTitle
|
|
283
|
+
? this.selectableOptions[1]
|
|
284
|
+
: this.selectableOptions[0]);
|
|
212
285
|
if (this.defaultFirstOption) {
|
|
213
|
-
this.resetFocusedOption(
|
|
214
|
-
this.allOptions.find(option => option.visible && !option.disabled));
|
|
286
|
+
this.resetFocusedOption(first);
|
|
215
287
|
}
|
|
216
|
-
else
|
|
217
|
-
this.scrollToOption(
|
|
288
|
+
else {
|
|
289
|
+
this.scrollToOption(first);
|
|
218
290
|
}
|
|
219
291
|
}
|
|
220
292
|
focusOptionDir(dir) {
|
|
@@ -222,37 +294,50 @@ export class BaseSelect extends CommonFormControl {
|
|
|
222
294
|
this.openOption();
|
|
223
295
|
return;
|
|
224
296
|
}
|
|
225
|
-
|
|
226
|
-
if (visibleOptions.length === 0) {
|
|
297
|
+
if (!this.selectableOptions?.length) {
|
|
227
298
|
return;
|
|
228
299
|
}
|
|
229
300
|
const step = dir === 'down' ? 1 : -1;
|
|
230
|
-
let i =
|
|
301
|
+
let i = this.selectableOptions.findIndex(option => this.isFocus(option.value));
|
|
231
302
|
i = i + step;
|
|
232
|
-
if (i
|
|
303
|
+
if (this.selectableOptions[i]?.groupTitle) {
|
|
304
|
+
i = i + step;
|
|
305
|
+
}
|
|
306
|
+
if (i >= this.selectableOptions.length) {
|
|
233
307
|
i = 0;
|
|
234
308
|
}
|
|
235
309
|
else if (i < 0) {
|
|
236
|
-
i =
|
|
310
|
+
i = this.selectableOptions.length - 1;
|
|
237
311
|
}
|
|
238
|
-
this.resetFocusedOption(
|
|
312
|
+
this.resetFocusedOption(this.selectableOptions[i]);
|
|
239
313
|
}
|
|
314
|
+
isFocus = (value, focusOption) => {
|
|
315
|
+
const _focusOption = focusOption || this.focused$.getValue();
|
|
316
|
+
return (_focusOption && this.trackFn(_focusOption.value) === this.trackFn(value));
|
|
317
|
+
};
|
|
240
318
|
resetFocusedOption(focusedOption) {
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
this.focusedOption.blur();
|
|
246
|
-
}
|
|
247
|
-
this.focusedOption = focusedOption;
|
|
248
|
-
if (this.focusedOption) {
|
|
249
|
-
this.focusedOption.focus();
|
|
250
|
-
this.scrollToOption(this.focusedOption);
|
|
319
|
+
this.blur();
|
|
320
|
+
if (focusedOption?.value) {
|
|
321
|
+
this.focused$.next(focusedOption);
|
|
322
|
+
this.scrollToOption(focusedOption);
|
|
251
323
|
}
|
|
252
324
|
}
|
|
325
|
+
onScrolledIndexChange(index) {
|
|
326
|
+
this.scrolledIndex = index;
|
|
327
|
+
}
|
|
253
328
|
scrollToOption(option) {
|
|
254
|
-
|
|
255
|
-
|
|
329
|
+
const index = this.filterOptions$
|
|
330
|
+
.getValue()
|
|
331
|
+
.findIndex(item => this.trackFn(item.value) === this.trackFn(option.value));
|
|
332
|
+
if (!this.virtualScrollViewport) {
|
|
333
|
+
if (this.contentOptionItems.get(index)) {
|
|
334
|
+
scrollIntoView(this.optionListRef.nativeElement, this.contentOptionItems.get(index).nativeElement);
|
|
335
|
+
}
|
|
336
|
+
return;
|
|
337
|
+
}
|
|
338
|
+
if (index < this.scrolledIndex ||
|
|
339
|
+
index >= this.scrolledIndex + this.maxItemLength) {
|
|
340
|
+
this.virtualScrollViewport.scrollToIndex(index || 0);
|
|
256
341
|
}
|
|
257
342
|
}
|
|
258
343
|
selectFocusedOption() {
|
|
@@ -260,16 +345,36 @@ export class BaseSelect extends CommonFormControl {
|
|
|
260
345
|
this.openOption();
|
|
261
346
|
return;
|
|
262
347
|
}
|
|
263
|
-
|
|
264
|
-
|
|
348
|
+
let focusedOption = this.focused$.getValue();
|
|
349
|
+
if (focusedOption) {
|
|
350
|
+
focusedOption = this.selectableOptions.find(option => this.trackFn(option.value) === this.trackFn(focusedOption.value));
|
|
351
|
+
focusedOption && this.selectOption(focusedOption);
|
|
265
352
|
}
|
|
266
353
|
}
|
|
354
|
+
getSelected(value, values) {
|
|
355
|
+
return values.some(item => this.trackFn(item) === this.trackFn(value));
|
|
356
|
+
}
|
|
357
|
+
focus(option) {
|
|
358
|
+
this.focused$.next(option);
|
|
359
|
+
}
|
|
360
|
+
blur() {
|
|
361
|
+
this.focused$.next(null);
|
|
362
|
+
}
|
|
363
|
+
getLabelByValue(value) {
|
|
364
|
+
return this.labelFn?.(value) || coerceString(this.trackFn(value));
|
|
365
|
+
}
|
|
267
366
|
escSelect() {
|
|
268
367
|
this.closeOption();
|
|
269
368
|
}
|
|
270
369
|
_trackFn(value) {
|
|
271
370
|
return value;
|
|
272
371
|
}
|
|
372
|
+
_createFn(input) {
|
|
373
|
+
const value = input;
|
|
374
|
+
return {
|
|
375
|
+
value,
|
|
376
|
+
};
|
|
377
|
+
}
|
|
273
378
|
_filterFn(filterString, { label, value }) {
|
|
274
379
|
return ((typeof label === 'string' && label) ||
|
|
275
380
|
this.labelFn?.(value) ||
|
|
@@ -278,7 +383,7 @@ export class BaseSelect extends CommonFormControl {
|
|
|
278
383
|
.includes(filterString?.toLowerCase() ?? '');
|
|
279
384
|
}
|
|
280
385
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.3", ngImport: i0, type: BaseSelect, deps: null, target: i0.ɵɵFactoryTarget.Directive });
|
|
281
|
-
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "16.1.0", version: "16.2.3", type: BaseSelect, isStandalone: true, inputs: { size: "size", filterable: ["filterable", "filterable", coerceAttrBoolean], clearable: ["clearable", "clearable", coerceAttrBoolean],
|
|
386
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "16.1.0", version: "16.2.3", type: BaseSelect, isStandalone: true, inputs: { size: "size", options: "options", filterable: ["filterable", "filterable", coerceAttrBoolean], clearable: ["clearable", "clearable", coerceAttrBoolean], allowCreate: ["allowCreate", "allowCreate", coerceAttrBoolean], loading: "loading", placeholder: "placeholder", defaultFirstOption: "defaultFirstOption", useVirtual: "useVirtual", itemSize: "itemSize", maxItemLength: "maxItemLength", createFn: "createFn", filterFn: "filterFn", trackFn: "trackFn", labelFn: "labelFn" }, outputs: { filterChange: "filterChange", show: "show", hide: "hide" }, queries: [{ propertyName: "inputItemTemplate", first: true, predicate: OptionItemCustomDirective, descendants: true, read: TemplateRef }, { propertyName: "contentTplOptions", predicate: OptionComponent, descendants: true }], viewQueries: [{ propertyName: "selectRef", first: true, predicate: ["selectRef"], descendants: true, static: true }, { propertyName: "tooltipRef", first: true, predicate: ["tooltipRef"], descendants: true, static: true }, { propertyName: "optionListRef", first: true, predicate: ["optionListRef"], descendants: true }, { propertyName: "virtualScrollViewport", first: true, predicate: VirtualScrollViewportComponent, descendants: true }, { propertyName: "contentOptionItems", predicate: OptionItemComponent, descendants: true, read: ElementRef }], usesInheritance: true, ngImport: i0 });
|
|
282
387
|
}
|
|
283
388
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.3", ngImport: i0, type: BaseSelect, decorators: [{
|
|
284
389
|
type: Directive,
|
|
@@ -287,18 +392,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.3", ngImpor
|
|
|
287
392
|
}]
|
|
288
393
|
}], propDecorators: { size: [{
|
|
289
394
|
type: Input
|
|
395
|
+
}], options: [{
|
|
396
|
+
type: Input
|
|
290
397
|
}], filterable: [{
|
|
291
398
|
type: Input,
|
|
292
399
|
args: [{ transform: coerceAttrBoolean }]
|
|
293
400
|
}], clearable: [{
|
|
294
401
|
type: Input,
|
|
295
402
|
args: [{ transform: coerceAttrBoolean }]
|
|
296
|
-
}], filterFn: [{
|
|
297
|
-
type: Input
|
|
298
|
-
}], trackFn: [{
|
|
299
|
-
type: Input
|
|
300
|
-
}], labelFn: [{
|
|
301
|
-
type: Input
|
|
302
403
|
}], allowCreate: [{
|
|
303
404
|
type: Input,
|
|
304
405
|
args: [{ transform: coerceAttrBoolean }]
|
|
@@ -308,7 +409,19 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.3", ngImpor
|
|
|
308
409
|
type: Input
|
|
309
410
|
}], defaultFirstOption: [{
|
|
310
411
|
type: Input
|
|
311
|
-
}],
|
|
412
|
+
}], useVirtual: [{
|
|
413
|
+
type: Input
|
|
414
|
+
}], itemSize: [{
|
|
415
|
+
type: Input
|
|
416
|
+
}], maxItemLength: [{
|
|
417
|
+
type: Input
|
|
418
|
+
}], createFn: [{
|
|
419
|
+
type: Input
|
|
420
|
+
}], filterFn: [{
|
|
421
|
+
type: Input
|
|
422
|
+
}], trackFn: [{
|
|
423
|
+
type: Input
|
|
424
|
+
}], labelFn: [{
|
|
312
425
|
type: Input
|
|
313
426
|
}], filterChange: [{
|
|
314
427
|
type: Output
|
|
@@ -325,17 +438,17 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.3", ngImpor
|
|
|
325
438
|
}], optionListRef: [{
|
|
326
439
|
type: ViewChild,
|
|
327
440
|
args: ['optionListRef', { static: false }]
|
|
328
|
-
}],
|
|
441
|
+
}], virtualScrollViewport: [{
|
|
329
442
|
type: ViewChild,
|
|
330
|
-
args: [
|
|
331
|
-
}],
|
|
443
|
+
args: [VirtualScrollViewportComponent]
|
|
444
|
+
}], inputItemTemplate: [{
|
|
332
445
|
type: ContentChild,
|
|
333
|
-
args: [
|
|
334
|
-
}],
|
|
446
|
+
args: [OptionItemCustomDirective, { read: TemplateRef }]
|
|
447
|
+
}], contentOptionItems: [{
|
|
335
448
|
type: ViewChildren,
|
|
336
|
-
args: [
|
|
337
|
-
}],
|
|
449
|
+
args: [OptionItemComponent, { read: ElementRef }]
|
|
450
|
+
}], contentTplOptions: [{
|
|
338
451
|
type: ContentChildren,
|
|
339
|
-
args: [
|
|
452
|
+
args: [OptionComponent, { descendants: true }]
|
|
340
453
|
}] } });
|
|
341
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1zZWxlY3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvc2VsZWN0L2Jhc2Utc2VsZWN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFHTCxZQUFZLEVBQ1osZUFBZSxFQUNmLFNBQVMsRUFFVCxZQUFZLEVBQ1osS0FBSyxFQUVMLE1BQU0sRUFFTixTQUFTLEVBQ1QsWUFBWSxFQUNaLFVBQVUsR0FDWCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQ0wsZUFBZSxFQUNmLGFBQWEsRUFDYixZQUFZLEVBQ1osb0JBQW9CLEVBQ3BCLEdBQUcsRUFFSCxFQUFFLEVBQ0YsU0FBUyxFQUNULE9BQU8sRUFDUCxTQUFTLEVBQ1QsU0FBUyxHQUNWLE1BQU0sTUFBTSxDQUFDO0FBRWQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sU0FBUyxDQUFDO0FBRTVDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDekMsT0FBTyxFQUNMLGlCQUFpQixFQUNqQixZQUFZLEVBQ1osYUFBYSxFQUNiLFVBQVUsRUFDVixjQUFjLEdBQ2YsTUFBTSxVQUFVLENBQUM7QUFFbEIsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDN0QsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDJCQUEyQixDQUFDOztBQU01RCxNQUFNLE9BQWdCLFVBQ3BCLFNBQVEsaUJBQW9CO0lBRzVCLElBQ0ksSUFBSTtRQUNOLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQztJQUNwQixDQUFDO0lBRUQsSUFBSSxJQUFJLENBQUMsR0FBRztRQUNWLElBQUksQ0FBQyxHQUFHLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxHQUFHLEVBQUU7WUFDOUIsT0FBTztTQUNSO1FBQ0QsSUFBSSxDQUFDLEtBQUssR0FBRyxHQUFHLENBQUM7UUFDakIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxD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QztnQkFJL0MsY0FBYztzQkFEYixlQUFlO3VCQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxlQUFlLENBQUMsRUFBRSxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBZnRlckNvbnRlbnRJbml0LFxuICBBZnRlclZpZXdJbml0LFxuICBDb250ZW50Q2hpbGQsXG4gIENvbnRlbnRDaGlsZHJlbixcbiAgRGlyZWN0aXZlLFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIElucHV0LFxuICBPbkRlc3Ryb3ksXG4gIE91dHB1dCxcbiAgUXVlcnlMaXN0LFxuICBWaWV3Q2hpbGQsXG4gIFZpZXdDaGlsZHJlbixcbiAgZm9yd2FyZFJlZixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBCZWhhdmlvclN1YmplY3QsXG4gIGNvbWJpbmVMYXRlc3QsXG4gIGRlYm91bmNlVGltZSxcbiAgZGlzdGluY3RVbnRpbENoYW5nZWQsXG4gIG1hcCxcbiAgT2JzZXJ2YWJsZSxcbiAgb2YsXG4gIHN0YXJ0V2l0aCxcbiAgU3ViamVjdCxcbiAgc3dpdGNoTWFwLFxuICB0YWtlVW50aWwsXG59IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBDb21tb25Gb3JtQ29udHJvbCB9IGZyb20gJy4uL2Zvcm0nO1xuaW1wb3J0IHsgVG9vbHRpcERpcmVjdGl2ZSB9IGZyb20gJy4uL3Rvb2x0aXAnO1xuaW1wb3J0IHsgQ29tcG9uZW50U2l6ZSB9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7XG4gIGNvZXJjZUF0dHJCb29sZWFuLFxuICBjb2VyY2VTdHJpbmcsXG4gIGlzVGVtcGxhdGVSZWYsXG4gIHB1Ymxpc2hSZWYsXG4gIHNjcm9sbEludG9WaWV3LFxufSBmcm9tICcuLi91dGlscyc7XG5cbmltcG9ydCB7IE9wdGlvbkNvbnRlbnREaXJlY3RpdmUgfSBmcm9tICcuL2hlbHBlci1kaXJlY3RpdmVzJztcbmltcG9ydCB7IE9wdGlvbkNvbXBvbmVudCB9IGZyb20gJy4vb3B0aW9uL29wdGlvbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgT3B0aW9uRmlsdGVyRm4sIFNlbGVjdEZpbHRlck9wdGlvbiwgVHJhY2tGbiB9IGZyb20gJy4vc2VsZWN0LnR5cGVzJztcblxuQERpcmVjdGl2ZSh7XG4gIHN0YW5kYWxvbmU6IHRydWUsXG59KVxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEJhc2VTZWxlY3Q8VCwgViA9IFQ+XG4gIGV4dGVuZHMgQ29tbW9uRm9ybUNvbnRyb2w8Vj5cbiAgaW1wbGVtZW50cyBBZnRlckNvbnRlbnRJbml0LCBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3lcbntcbiAgQElucHV0KClcbiAgZ2V0IHNpemUoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3NpemU7XG4gIH1cblxuICBzZXQgc2l6ZSh2YWwpIHtcbiAgICBpZiAoIXZhbCB8fCB0aGlzLl9zaXplID09PSB2YWwpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5fc2l6ZSA9IHZhbDtcbiAgICB0aGlzLnNpemUkJC5uZXh0KHZhbCk7XG4gIH1cblxuICBASW5wdXQoeyB0cmFuc2Zvcm06IGNvZXJjZUF0dHJCb29sZWFuIH0pXG4gIGZpbHRlcmFibGUgPSB0cnVlO1xuXG4gIEBJbnB1dCh7IHRyYW5zZm9ybTogY29lcmNlQXR0ckJvb2xlYW4gfSlcbiAgY2xlYXJhYmxlOiBib29sZWFuO1xuXG4gIEBJbnB1dCgpXG4gIGZpbHRlckZuOiBPcHRpb25GaWx0ZXJGbjxUPiA9IHRoaXMuX2ZpbHRlckZuLmJpbmQodGhpcyk7XG5cbiAgQElucHV0KClcbiAgdHJhY2tGbjogVHJhY2tGbjxUPiA9IHRoaXMuX3RyYWNrRm47XG5cbiAgQElucHV0KClcbiAgbGFiZWxGbj86ICh2YWx1ZTogVCkgPT4gc3RyaW5nO1xuXG4gIEBJbnB1dCh7IHRyYW5zZm9ybTogY29lcmNlQXR0ckJvb2xlYW4gfSlcbiAgYWxsb3dDcmVhdGU6IGJvb2xlYW47XG5cbiAgZ2V0IGFsbE9wdGlvbnMoKSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIC4uLih0aGlzLmN1c3RvbU9wdGlvbnMgPyB0aGlzLmN1c3RvbU9wdGlvbnMudG9BcnJheSgpIDogW10pLFxuICAgICAgLi4uKHRoaXMuY29udGVudE9wdGlvbnMgPyB0aGlzLmNvbnRlbnRPcHRpb25zLnRvQXJyYXkoKSA6IFtdKSxcbiAgICBdO1xuICB9XG5cbiAgZ2V0IG9wZW5lZCgpIHtcbiAgICByZXR1cm4gdGhpcy50b29sdGlwUmVmLmlzQ3JlYXRlZDtcbiAgfVxuXG4gIGdldCBpbnB1dFJlYWRvbmx5KCkge1xuICAgIHJldHVybiAhKHRoaXMuZmlsdGVyYWJsZSAmJiB0aGlzLm9wZW5lZCk7XG4gIH1cblxuICBnZXQgZmlsdGVyU3RyaW5nKCkge1xuICAgIHJldHVybiB0aGlzLl9maWx0ZXJTdHJpbmc7XG4gIH1cblxuICBzZXQgZmlsdGVyU3RyaW5nKHZhbCkge1xuICAgIGlmICh2YWwgIT09IHRoaXMuX2ZpbHRlclN0cmluZykge1xuICAgICAgdGhpcy5fZmlsdGVyU3RyaW5nID0gdmFsO1xuICAgICAgdGhpcy5maWx0ZXJTdHJpbmckJC5uZXh0KHZhbCk7XG4gICAgICB0aGlzLmZpbHRlckNoYW5nZS5lbWl0KHZhbCk7XG4gICAgfVxuICB9XG5cbiAgQElucHV0KClcbiAgbG9hZGluZyA9IGZhbHNlO1xuXG4gIEBJbnB1dCgpXG4gIHBsYWNlaG9sZGVyID0gJyc7XG5cbiAgQElucHV0KClcbiAgZGVmYXVsdEZpcnN0T3B0aW9uID0gdHJ1ZTtcblxuICBASW5wdXQoKVxuICBsYXp5ID0gdHJ1ZTtcblxuICBAT3V0cHV0KClcbiAgZmlsdGVyQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XG5cbiAgQE91dHB1dCgpXG4gIHNob3cgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgQE91dHB1dCgpXG4gIGhpZGUgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgQFZpZXdDaGlsZCgnc2VsZWN0UmVmJywgeyBzdGF0aWM6IHRydWUgfSlcbiAgcHJvdGVjdGVkIHNlbGVjdFJlZjogRWxlbWVudFJlZjxIVE1MRWxlbWVudD47XG5cbiAgQFZpZXdDaGlsZCgndG9vbHRpcFJlZicsIHsgc3RhdGljOiB0cnVlIH0pXG4gIHByb3RlY3RlZCB0b29sdGlwUmVmOiBUb29sdGlwRGlyZWN0aXZlO1xuXG4gIEBWaWV3Q2hpbGQoJ29wdGlvbkxpc3RSZWYnLCB7IHN0YXRpYzogZmFsc2UgfSlcbiAgcHJvdGVjdGVkIG9wdGlvbkxpc3RSZWY6IEVsZW1lbnRSZWY8SFRNTERpdkVsZW1lbnQ+O1xuXG4gIEBWaWV3Q2hpbGQoJ2lucHV0dGluZ09wdGlvbicsIHsgc3RhdGljOiBmYWxzZSB9KVxuICBwcm90ZWN0ZWQgaW5wdXR0aW5nT3B0aW9uOiBPcHRpb25Db21wb25lbnQ8VD47XG5cbiAgQENvbnRlbnRDaGlsZChPcHRpb25Db250ZW50RGlyZWN0aXZlKVxuICBwcm90ZWN0ZWQgb3B0aW9uQ29udGVudD86IE9wdGlvbkNvbnRlbnREaXJlY3RpdmU7XG5cbiAgQFZpZXdDaGlsZHJlbihmb3J3YXJkUmVmKCgpID0+IE9wdGlvbkNvbXBvbmVudCkpXG4gIGN1c3RvbU9wdGlvbnM6IFF1ZXJ5TGlzdDxPcHRpb25Db21wb25lbnQ8VD4+O1xuXG4gIEBDb250ZW50Q2hpbGRyZW4oZm9yd2FyZFJlZigoKSA9PiBPcHRpb25Db21wb25lbnQpLCB7IGRlc2NlbmRhbnRzOiB0cnVlIH0pXG4gIGNvbnRlbnRPcHRpb25zOiBRdWVyeUxpc3Q8T3B0aW9uQ29tcG9uZW50PFQ+PjtcblxuICBpc1RlbXBsYXRlUmVmID0gaXNUZW1wbGF0ZVJlZjtcbiAgaXNNdWx0aSA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBVdGlsaXR5IGZpZWxkIHRvIG1ha2Ugc3VyZSB0aGUgdXNlcnMgYWx3YXlzIHNlZSB0aGUgdmFsdWUgYXMgdHlwZSBhcnJheVxuICAgKi9cbiAgYWJzdHJhY3QgcmVhZG9ubHkgdmFsdWVzJDogT2JzZXJ2YWJsZTxUW10+O1xuXG4gIGFsbE9wdGlvbnMkOiBPYnNlcnZhYmxlPEFycmF5PE9wdGlvbkNvbXBvbmVudDxUPj4+O1xuXG4gIHByb3RlY3RlZCBmb2N1c2VkT3B0aW9uOiBPcHRpb25Db21wb25lbnQ8VD47XG5cbiAgcHJpdmF0ZSBfc2l6ZTogQ29tcG9uZW50U2l6ZSA9IENvbXBvbmVudFNpemUuTWVkaXVtO1xuICBwcml2YXRlIF9maWx0ZXJTdHJpbmcgPSAnJztcblxuICBwcm90ZWN0ZWQgZGVzdHJveSQkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcbiAgcHJvdGVjdGVkIHNpemUkJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Q29tcG9uZW50U2l6ZT4odGhpcy5zaXplKTtcbiAgcHJpdmF0ZSByZWFkb25seSBmaWx0ZXJTdHJpbmckJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nPihcbiAgICB0aGlzLmZpbHRlclN0cmluZyxcbiAgKTtcblxuICBzaXplJCA9IHRoaXMuc2l6ZSQkLmFzT2JzZXJ2YWJsZSgpO1xuICBmaWx0ZXJTdHJpbmckID0gdGhpcy5maWx0ZXJTdHJpbmckJC5hc09ic2VydmFibGUoKTtcbiAgb3B0aW9uVmlzaWJsZXMkOiBPYnNlcnZhYmxlPGJvb2xlYW5bXT47XG4gIGhhc1Zpc2libGVPcHRpb24kOiBPYnNlcnZhYmxlPGJvb2xlYW4+O1xuICBoYXNNYXRjaGVkT3B0aW9uJDogT2JzZXJ2YWJsZTxib29sZWFuPjtcbiAgY3VzdG9tQ3JlYXRlZE9wdGlvbnMkOiBPYnNlcnZhYmxlPEFycmF5PFNlbGVjdEZpbHRlck9wdGlvbjxUPj4+O1xuICBjb250YWluZXJXaWR0aDogc3RyaW5nO1xuXG4gIG5nQWZ0ZXJDb250ZW50SW5pdCgpIHtcbiAgICB0aGlzLmN1c3RvbUNyZWF0ZWRPcHRpb25zJCA9IGNvbWJpbmVMYXRlc3QoW1xuICAgICAgdGhpcy52YWx1ZXMkLFxuICAgICAgKFxuICAgICAgICB0aGlzLmNvbnRlbnRPcHRpb25zLmNoYW5nZXMgYXMgT2JzZXJ2YWJsZTxRdWVyeUxpc3Q8T3B0aW9uQ29tcG9uZW50PFQ+Pj5cbiAgICAgICkucGlwZShcbiAgICAgICAgc3RhcnRXaXRoKHRoaXMuY29udGVudE9wdGlvbnMpLFxuICAgICAgICBzd2l0Y2hNYXAoKG9wdGlvbnM6IFF1ZXJ5TGlzdDxPcHRpb25Db21wb25lbnQ8VD4+KSA9PlxuICAgICAgICAgIG9wdGlvbnMubGVuZ3RoID4gMFxuICAgICAgICAgICAgPyBjb21iaW5lTGF0ZXN0KG9wdGlvbnMubWFwKG9wdGlvbiA9PiBvcHRpb24udmFsdWUkKSlcbiAgICAgICAgICAgIDogb2YoW10gYXMgVFtdKSxcbiAgICAgICAgKSxcbiAgICAgICksXG4gICAgXSkucGlwZShcbiAgICAgIG1hcCgoW3ZhbHVlcywgb3B0aW9uVmFsdWVzXSkgPT5cbiAgICAgICAgdmFsdWVzLnJlZHVjZTxBcnJheTxTZWxlY3RGaWx0ZXJPcHRpb248VD4+PigoYWNjLCB2YWx1ZSkgPT4ge1xuICAgICAgICAgIGNvbnN0IGluY2x1ZGVkID0gb3B0aW9uVmFsdWVzXG4gICAgICAgICAgICAubWFwKHZhbHVlID0+IHRoaXMudHJhY2tGbih2YWx1ZSkpXG4gICAgICAgICAgICAuaW5jbHVkZXModGhpcy50cmFja0ZuKHZhbHVlKSk7XG4gICAgICAgICAgaWYgKCFpbmNsdWRlZCkge1xuICAgICAgICAgICAgY29uc3QgbGFiZWwgPVxuICAgICAgICAgICAgICB0aGlzLmxhYmVsRm4/Lih2YWx1ZSkgfHwgY29lcmNlU3RyaW5nKHRoaXMudHJhY2tGbih2YWx1ZSkpO1xuICAgICAgICAgICAgaWYgKGxhYmVsKSB7XG4gICAgICAgICAgICAgIGFjYy5wdXNoKHtcbiAgICAgICAgICAgICAgICBsYWJlbCxcbiAgICAgICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBhY2M7XG4gICAgICAgIH0sIFtdKSxcbiAgICAgICksXG4gICAgICBwdWJsaXNoUmVmKCksXG4gICAgKTtcbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICB0aGlzLmFsbE9wdGlvbnMkID0gY29tYmluZUxhdGVzdChbXG4gICAgICB0aGlzLmN1c3RvbU9wdGlvbnMuY2hhbmdlcy5waXBlKHN0YXJ0V2l0aCh0aGlzLmN1c3RvbU9wdGlvbnMpKSxcbiAgICAgIHRoaXMuY29udGVudE9wdGlvbnMuY2hhbmdlcy5waXBlKHN0YXJ0V2l0aCh0aGlzLmNvbnRlbnRPcHRpb25zKSksXG4gICAgXSkucGlwZShcbiAgICAgIG1hcChcbiAgICAgICAgKFtjdXN0b21PcHRpb25zLCBjb250ZW50T3B0aW9uc106IFtcbiAgICAgICAgICBRdWVyeUxpc3Q8T3B0aW9uQ29tcG9uZW50PFQ+PixcbiAgICAgICAgICBRdWVyeUxpc3Q8T3B0aW9uQ29tcG9uZW50PFQ+PixcbiAgICAgICAgXSkgPT4gWy4uLmN1c3RvbU9wdGlvbnMudG9BcnJheSgpLCAuLi5jb250ZW50T3B0aW9ucy50b0FycmF5KCldLFxuICAgICAgKSxcbiAgICAgIHB1Ymxpc2hSZWYoKSxcbiAgICApO1xuXG4gICAgLy8gc3VwcG9ydCBkeW5hbWljIG9wdGlvbnMgbG9hZGluZyBvbiBmaWx0ZXJpbmdcbiAgICB0aGlzLmFsbE9wdGlvbnMkLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQkKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIGlmICh0aGlzLm9wZW5lZCkge1xuICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAgICAgICAgIHRoaXMuYXV0b0ZvY3VzRmlyc3RPcHRpb24oKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICB0aGlzLmhhc01hdGNoZWRPcHRpb24kID0gY29tYmluZUxhdGVzdChbXG4gICAgICB0aGlzLmFsbE9wdGlvbnMkLnBpcGUoXG4gICAgICAgIG1hcChjdXN0b21PcHRpb25zID0+XG4gICAgICAgICAgY3VzdG9tT3B0aW9ucy5maWx0ZXIob3B0aW9uID0+IG9wdGlvbiAhPT0gdGhpcy5pbnB1dHRpbmdPcHRpb24pLFxuICAgICAgICApLFxuICAgICAgICBzd2l0Y2hNYXAob3B0aW9ucyA9PlxuICAgICAgICAgIG9wdGlvbnMubGVuZ3RoID4gMFxuICAgICAgICAgICAgPyBjb21iaW5lTGF0ZXN0KG9wdGlvbnMubWFwKG9wdGlvbiA9PiBvcHRpb24udmFsdWUkKSlcbiAgICAgICAgICAgIDogb2YoW10gYXMgVFtdKSxcbiAgICAgICAgKSxcbiAgICAgICksXG4gICAgICB0aGlzLmZpbHRlclN0cmluZyQsXG4gICAgXSkucGlwZShcbiAgICAgIG1hcCgoW3ZhbHVlcywgZmlsdGVyU3RyaW5nXSkgPT5cbiAgICAgICAgdmFsdWVzLnNvbWUodmFsdWUgPT4gdGhpcy50cmFja0ZuKHZhbHVlKSA9PT0gZmlsdGVyU3RyaW5nKSxcbiAgICAgICksXG4gICAgICBwdWJsaXNoUmVmKCksXG4gICAgKTtcblxuICAgIHRoaXMub3B0aW9uVmlzaWJsZXMkID0gKFxuICAgICAgdGhpcy5jb250ZW50T3B0aW9ucy5jaGFuZ2VzIGFzIE9ic2VydmFibGU8UXVlcnlMaXN0PE9wdGlvbkNvbXBvbmVudDxUPj4+XG4gICAgKS5waXBlKFxuICAgICAgc3RhcnRXaXRoKHRoaXMuY29udGVudE9wdGlvbnMpLFxuICAgICAgc3dpdGNoTWFwKChvcHRpb25zOiBRdWVyeUxpc3Q8T3B0aW9uQ29tcG9uZW50PFQ+PikgPT5cbiAgICAgICAgb3B0aW9ucy5sZW5ndGggPiAwXG4gICAgICAgICAgPyBjb21iaW5lTGF0ZXN0KG9wdGlvbnMubWFwKG9wdGlvbiA9PiBvcHRpb24udmlzaWJsZSQpKVxuICAgICAgICAgIDogb2YoW10gYXMgYm9vbGVhbltdKSxcbiAgICAgICksXG4gICAgICBwdWJsaXNoUmVmKCksXG4gICAgKTtcblxuICAgIHRoaXMuaGFzVmlzaWJsZU9wdGlvbiQgPSB0aGlzLm9wdGlvblZpc2libGVzJC5waXBlKFxuICAgICAgbWFwKHZpc2libGUgPT4gdmlzaWJsZS5zb21lKEJvb2xlYW4pKSxcbiAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgICBwdWJsaXNoUmVmKCksXG4gICAgKTtcblxuICAgIHRoaXMub3B0aW9uVmlzaWJsZXMkLnBpcGUoZGVib3VuY2VUaW1lKDUwKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIHRoaXMudG9vbHRpcFJlZj8udXBkYXRlUG9zaXRpb24oKTtcbiAgICB9KTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMub3B0aW9uQ29udGVudD8uZGV0YWNoKCk7XG4gICAgdGhpcy5kZXN0cm95JCQubmV4dCgpO1xuICAgIHRoaXMuZGVzdHJveSQkLmNvbXBsZXRlKCk7XG4gIH1cblxuICBvcGVuT3B0aW9uKCkge1xuICAgIHRoaXMudG9vbHRpcFJlZi5zaG93KCk7XG4gIH1cblxuICBjbG9zZU9wdGlvbigpIHtcbiAgICB0aGlzLnRvb2x0aXBSZWYuaGlkZSgpO1xuICB9XG5cbiAgb25TaG93T3B0aW9ucygpIHtcbiAgICBjb25zdCBleGVjID0gKCkgPT4ge1xuICAgICAgdGhpcy5jb250YWluZXJXaWR0aCA9IHRoaXMuc2VsZWN0UmVmLm5hdGl2ZUVsZW1lbnQub2Zmc2V0V2lkdGggKyAncHgnO1xuXG4gICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAgICAgICB0aGlzLmF1dG9Gb2N1c0ZpcnN0T3B0aW9uKCk7XG4gICAgICB9KTtcblxuICAgICAgdGhpcy5zaG93LmVtaXQoKTtcbiAgICB9O1xuXG4gICAgaWYgKHRoaXMub3B0aW9uQ29udGVudCkge1xuICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgICAgICAgdGhpcy5vcHRpb25Db250ZW50LmF0dGFjaCgpO1xuICAgICAgICBleGVjKCk7XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgZXhlYygpO1xuICAgIH1cbiAgfVxuXG4gIG9uSGlkZU9wdGlvbnMoKSB7XG4gICAgaWYgKHRoaXMub25Ub3VjaGVkKSB7XG4gICAgICB0aGlzLm9uVG91Y2hlZCgpO1xuICAgIH1cbiAgICBpZiAoIXRoaXMubGF6eSkge1xuICAgICAgdGhpcy5vcHRpb25Db250ZW50Py5kZXRhY2goKTtcbiAgICB9XG4gICAgdGhpcy5yZXNldEZvY3VzZWRPcHRpb24oKTtcbiAgICB0aGlzLmZpbHRlclN0cmluZyA9ICcnO1xuICAgIHRoaXMuaGlkZS5lbWl0KCk7XG4gIH1cblxuICBvbklucHV0KGV2ZW50OiBFdmVudCkge1xuICAgIHRoaXMuZmlsdGVyU3RyaW5nID0gKGV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50KS52YWx1ZTtcblxuICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICB0aGlzLmF1dG9Gb2N1c0ZpcnN0T3B0aW9uKCk7XG4gICAgfSk7XG5cbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIG9uS2V5RG93bihldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgIHN3aXRjaCAoZXZlbnQua2V5KSB7XG4gICAgICBjYXNlICdBcnJvd0Rvd24nOiB7XG4gICAgICAgIHRoaXMuZm9jdXNPcHRpb25EaXIoJ2Rvd24nKTtcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSAnQXJyb3dVcCc6IHtcbiAgICAgICAgdGhpcy5mb2N1c09wdGlvbkRpcigndXAnKTtcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSAnRW50ZXInOiB7XG4gICAgICAgIHRoaXMuc2VsZWN0Rm9jdXNlZE9wdGlvbigpO1xuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlICdFc2NhcGUnOiB7XG4gICAgICAgIHRoaXMuZXNjU2VsZWN0KCk7XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBvbk9wdGlvbkNsaWNrKG9wdGlvbjogT3B0aW9uQ29tcG9uZW50PFQ+KSB7XG4gICAgdGhpcy5yZXNldEZvY3VzZWRPcHRpb24ob3B0aW9uKTtcbiAgICB0aGlzLnNlbGVjdE9wdGlvbihvcHRpb24pO1xuICB9XG5cbiAgcHJvdGVjdGVkIGF1dG9Gb2N1c0ZpcnN0T3B0aW9uKCkge1xuICAgIGlmICh0aGlzLmRlZmF1bHRGaXJzdE9wdGlvbiAmJiB0aGlzLmFsbG93Q3JlYXRlICYmIHRoaXMuZmlsdGVyU3RyaW5nKSB7XG4gICAgICBjb25zdCBtYXRjaGVkT3B0aW9uID0gdGhpcy5jb250ZW50T3B0aW9ucy5maW5kKFxuICAgICAgICBvcHRpb24gPT4gdGhpcy50cmFja0ZuKG9wdGlvbi52YWx1ZSkgPT09IHRoaXMuZmlsdGVyU3RyaW5nLFxuICAgICAgKTtcbiAgICAgIHRoaXMucmVzZXRGb2N1c2VkT3B0aW9uKG1hdGNoZWRPcHRpb24gfHwgdGhpcy5jdXN0b21PcHRpb25zLmZpcnN0KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBzZWxlY3RlZE9wdGlvbiA9IHRoaXMuYWxsT3B0aW9ucy5maW5kKFxuICAgICAgb3B0aW9uID0+IG9wdGlvbi5zZWxlY3RlZCAmJiBvcHRpb24udmlzaWJsZSxcbiAgICApO1xuICAgIGlmICh0aGlzLmRlZmF1bHRGaXJzdE9wdGlvbikge1xuICAgICAgdGhpcy5yZXNldEZvY3VzZWRPcHRpb24oXG4gICAgICAgIHNlbGVjdGVkT3B0aW9uIHx8XG4gICAgICAgICAgdGhpcy5hbGxPcHRpb25zLmZpbmQob3B0aW9uID0+IG9wdGlvbi52aXNpYmxlICYmICFvcHRpb24uZGlzYWJsZWQpLFxuICAgICAgKTtcbiAgICB9IGVsc2UgaWYgKHNlbGVjdGVkT3B0aW9uKSB7XG4gICAgICB0aGlzLnNjcm9sbFRvT3B0aW9uKHNlbGVjdGVkT3B0aW9uKTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgZm9jdXNPcHRpb25EaXIoZGlyOiAnZG93bicgfCAndXAnKSB7XG4gICAgaWYgKCF0aGlzLm9wZW5lZCkge1xuICAgICAgdGhpcy5vcGVuT3B0aW9uKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHZpc2libGVPcHRpb25zID0gdGhpcy5hbGxPcHRpb25zLmZpbHRlcihcbiAgICAgIG9wdGlvbiA9PiBvcHRpb24udmlzaWJsZSAmJiAhb3B0aW9uLmRpc2FibGVkLFxuICAgICk7XG4gICAgaWYgKHZpc2libGVPcHRpb25zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBzdGVwID0gZGlyID09PSAnZG93bicgPyAxIDogLTE7XG4gICAgbGV0IGkgPSB2aXNpYmxlT3B0aW9ucy5pbmRleE9mKHRoaXMuZm9jdXNlZE9wdGlvbik7XG4gICAgaSA9IGkgKyBzdGVwO1xuICAgIGlmIChpID49IHZpc2libGVPcHRpb25zLmxlbmd0aCkge1xuICAgICAgaSA9IDA7XG4gICAgfSBlbHNlIGlmIChpIDwgMCkge1xuICAgICAgaSA9IHZpc2libGVPcHRpb25zLmxlbmd0aCAtIDE7XG4gICAgfVxuICAgIHRoaXMucmVzZXRGb2N1c2VkT3B0aW9uKHZpc2libGVPcHRpb25zW2ldKTtcbiAgfVxuXG4gIHByb3RlY3RlZCByZXNldEZvY3VzZWRPcHRpb24oZm9jdXNlZE9wdGlvbj86IE9wdGlvbkNvbXBvbmVudDxUPikge1xuICAgIGlmICh0aGlzLmZvY3VzZWRPcHRpb24gPT09IGZvY3VzZWRPcHRpb24pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5mb2N1c2VkT3B0aW9uKSB7XG4gICAgICB0aGlzLmZvY3VzZWRPcHRpb24uYmx1cigpO1xuICAgIH1cblxuICAgIHRoaXMuZm9jdXNlZE9wdGlvbiA9IGZvY3VzZWRPcHRpb247XG5cbiAgICBpZiAodGhpcy5mb2N1c2VkT3B0aW9uKSB7XG4gICAgICB0aGlzLmZvY3VzZWRPcHRpb24uZm9jdXMoKTtcbiAgICAgIHRoaXMuc2Nyb2xsVG9PcHRpb24odGhpcy5mb2N1c2VkT3B0aW9uKTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgc2Nyb2xsVG9PcHRpb24ob3B0aW9uOiBPcHRpb25Db21wb25lbnQ8VD4pIHtcbiAgICBpZiAodGhpcy5vcHRpb25MaXN0UmVmKSB7XG4gICAgICBzY3JvbGxJbnRvVmlldyhcbiAgICAgICAgdGhpcy5vcHRpb25MaXN0UmVmLm5hdGl2ZUVsZW1lbnQsXG4gICAgICAgIG9wdGlvbi5lbFJlZi5uYXRpdmVFbGVtZW50LFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgc2VsZWN0Rm9jdXNlZE9wdGlvbigpIHtcbiAgICBpZiAoIXRoaXMub3BlbmVkKSB7XG4gICAgICB0aGlzLm9wZW5PcHRpb24oKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHRoaXMuZm9jdXNlZE9wdGlvbiAmJiAhdGhpcy5mb2N1c2VkT3B0aW9uLmRpc2FibGVkKSB7XG4gICAgICB0aGlzLnNlbGVjdE9wdGlvbih0aGlzLmZvY3VzZWRPcHRpb24pO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBlc2NTZWxlY3QoKSB7XG4gICAgdGhpcy5jbG9zZU9wdGlvbigpO1xuICB9XG5cbiAgcHJpdmF0ZSBfdHJhY2tGbjxUPih2YWx1ZTogVCkge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG4gIHByaXZhdGUgX2ZpbHRlckZuKFxuICAgIGZpbHRlclN0cmluZzogc3RyaW5nLFxuICAgIHsgbGFiZWwsIHZhbHVlIH06IFNlbGVjdEZpbHRlck9wdGlvbjxUPixcbiAgKSB7XG4gICAgcmV0dXJuIChcbiAgICAgICh0eXBlb2YgbGFiZWwgPT09ICdzdHJpbmcnICYmIGxhYmVsKSB8fFxuICAgICAgdGhpcy5sYWJlbEZuPy4odmFsdWUpIHx8XG4gICAgICBjb2VyY2VTdHJpbmcodGhpcy50cmFja0ZuKHZhbHVlKSlcbiAgICApXG4gICAgICA/LnRvTG93ZXJDYXNlKClcbiAgICAgIC5pbmNsdWRlcyhmaWx0ZXJTdHJpbmc/LnRvTG93ZXJDYXNlKCkgPz8gJycpO1xuICB9XG5cbiAgYWJzdHJhY3Qgc2VsZWN0T3B0aW9uKG9wdGlvbjogT3B0aW9uQ29tcG9uZW50PFQ+KTogdm9pZDtcblxuICBhYnN0cmFjdCBjbGVhclZhbHVlKGV2ZW50OiBFdmVudCk6IHZvaWQ7XG59XG4iXX0=
|
|
454
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1zZWxlY3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvc2VsZWN0L2Jhc2Utc2VsZWN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFTCxZQUFZLEVBQ1osZUFBZSxFQUNmLFVBQVUsRUFDVixTQUFTLEVBQ1QsVUFBVSxFQUNWLFlBQVksRUFDWixLQUFLLEVBQ0wsTUFBTSxFQUVOLFdBQVcsRUFDWCxTQUFTLEVBQ1QsWUFBWSxFQUNaLE1BQU0sR0FDUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNoRSxPQUFPLEVBQ0wsZUFBZSxFQUNmLGFBQWEsRUFDYixHQUFHLEVBRUgsU0FBUyxFQUNULEtBQUssRUFDTCxTQUFTLEdBQ1YsTUFBTSxNQUFNLENBQUM7QUFFZCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFDNUMsT0FBTyxFQUFFLDhCQUE4QixFQUFFLE1BQU0sZ0RBQWdELENBQUM7QUFFaEcsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUN6QyxPQUFPLEVBQ0wsaUJBQWlCLEVBQ2pCLFlBQVksRUFDWixhQUFhLEVBQ2IsVUFBVSxFQUNWLGNBQWMsR0FDZixNQUFNLFVBQVUsQ0FBQztBQUVsQixPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUMxRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7O0FBU3JELE1BQU0sV0FBVyxHQUFHO0lBQ2xCLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxFQUFFLEVBQUU7SUFDekIsQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRTtJQUMxQixDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsRUFBRSxFQUFF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QUMsWUFBWSxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFJL0IsYUFBYTtzQkFEdEIsU0FBUzt1QkFBQyxlQUFlLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFO2dCQUk3QyxxQkFBcUI7c0JBRHBCLFNBQVM7dUJBQUMsOEJBQThCO2dCQU16QyxpQkFBaUI7c0JBRGhCLFlBQVk7dUJBQUMseUJBQXlCLEVBQUUsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFO2dCQUk5RCxrQkFBa0I7c0JBRGpCLFlBQVk7dUJBQUMsbUJBQW1CLEVBQUUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFO2dCQUl2RCxpQkFBaUI7c0JBRGhCLGVBQWU7dUJBQUMsZUFBZSxFQUFFLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEFmdGVyQ29udGVudEluaXQsXG4gIENvbnRlbnRDaGlsZCxcbiAgQ29udGVudENoaWxkcmVuLFxuICBEZXN0cm95UmVmLFxuICBEaXJlY3RpdmUsXG4gIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgSW5wdXQsXG4gIE91dHB1dCxcbiAgUXVlcnlMaXN0LFxuICBUZW1wbGF0ZVJlZixcbiAgVmlld0NoaWxkLFxuICBWaWV3Q2hpbGRyZW4sXG4gIGluamVjdCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyB0YWtlVW50aWxEZXN0cm95ZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQge1xuICBCZWhhdmlvclN1YmplY3QsXG4gIGNvbWJpbmVMYXRlc3QsXG4gIG1hcCxcbiAgT2JzZXJ2YWJsZSxcbiAgc3dpdGNoTWFwLFxuICBtZXJnZSxcbiAgc3RhcnRXaXRoLFxufSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgQ29tbW9uRm9ybUNvbnRyb2wgfSBmcm9tICcuLi9mb3JtJztcbmltcG9ydCB7IFZpcnR1YWxTY3JvbGxWaWV3cG9ydENvbXBvbmVudCB9IGZyb20gJy4uL3Njcm9sbGluZy92aXJ0dWFsLXNjcm9sbC12aWV3cG9ydC5jb21wb25lbnQnO1xuaW1wb3J0IHsgVG9vbHRpcERpcmVjdGl2ZSB9IGZyb20gJy4uL3Rvb2x0aXAnO1xuaW1wb3J0IHsgQ29tcG9uZW50U2l6ZSB9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7XG4gIGNvZXJjZUF0dHJCb29sZWFuLFxuICBjb2VyY2VTdHJpbmcsXG4gIGlzVGVtcGxhdGVSZWYsXG4gIHB1Ymxpc2hSZWYsXG4gIHNjcm9sbEludG9WaWV3LFxufSBmcm9tICcuLi91dGlscyc7XG5cbmltcG9ydCB7IE9wdGlvbkl0ZW1DdXN0b21EaXJlY3RpdmUgfSBmcm9tICcuL2hlbHBlci1kaXJlY3RpdmVzJztcbmltcG9ydCB7IE9wdGlvbkl0ZW1Db21wb25lbnQgfSBmcm9tICcuL29wdGlvbi1pdGVtL29wdGlvbi1pdGVtLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBPcHRpb25Db21wb25lbnQgfSBmcm9tICcuL29wdGlvbi5jb21wb25lbnQnO1xuaW1wb3J0IHtcbiAgQ3JlYXRlRm4sXG4gIERpc3BsYXlPcHRpb24sXG4gIE9wdGlvbkZpbHRlckZuLFxuICBTZWxlY3RGaWx0ZXJPcHRpb24sXG4gIFRyYWNrRm4sXG59IGZyb20gJy4vc2VsZWN0LnR5cGVzJztcblxuY29uc3QgaXRlbVNpemVNYXAgPSB7XG4gIFtDb21wb25lbnRTaXplLkxhcmdlXTogNDAsXG4gIFtDb21wb25lbnRTaXplLk1lZGl1bV06IDMyLFxuICBbQ29tcG9uZW50U2l6ZS5TbWFsbF06IDI4LFxuICBbQ29tcG9uZW50U2l6ZS5NaW5pXTogMjYsXG4gIFtDb21wb25lbnRTaXplLkVtcHR5XTogMzIsXG59O1xuXG5ARGlyZWN0aXZlKHtcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbn0pXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQmFzZVNlbGVjdDxULCBWID0gVD5cbiAgZXh0ZW5kcyBDb21tb25Gb3JtQ29udHJvbDxWPlxuICBpbXBsZW1lbnRzIEFmdGVyQ29udGVudEluaXRcbntcbiAgQElucHV0KClcbiAgZ2V0IHNpemUoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3NpemU7XG4gIH1cblxuICBzZXQgc2l6ZSh2YWwpIHtcbiAgICBpZiAoIXZhbCB8fCB0aGlzLl9zaXplID09PSB2YWwpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5fc2l6ZSA9IHZhbDtcbiAgICB0aGlzLnNpemUkJC5uZXh0KHZhbCk7XG4gIH1cblxuICBASW5wdXQoKVxuICBnZXQgb3B0aW9ucygpIHtcbiAgICByZXR1cm4gdGhpcy5fb3B0aW9ucztcbiAgfVxuXG4gIHNldCBvcHRpb25zKHZhbDogQXJyYXk8U2VsZWN0RmlsdGVyT3B0aW9uPFQ+Pikge1xuICAgIHRoaXMuX29wdGlvbnMgPSB2YWw7XG4gICAgdGhpcy5vcHRpb25zJCQubmV4dCh2YWwpO1xuICB9XG5cbiAgQElucHV0KHsgdHJhbnNmb3JtOiBjb2VyY2VBdHRyQm9vbGVhbiB9KVxuICBmaWx0ZXJhYmxlID0gdHJ1ZTtcblxuICBASW5wdXQoeyB0cmFuc2Zvcm06IGNvZXJjZUF0dHJCb29sZWFuIH0pXG4gIGNsZWFyYWJsZTogYm9vbGVhbjtcblxuICBASW5wdXQoeyB0cmFuc2Zvcm06IGNvZXJjZUF0dHJCb29sZWFuIH0pXG4gIGFsbG93Q3JlYXRlOiBib29sZWFuO1xuXG4gIEBJbnB1dCgpXG4gIGxvYWRpbmcgPSBmYWxzZTtcblxuICBASW5wdXQoKVxuICBwbGFjZWhvbGRlciA9ICcnO1xuXG4gIEBJbnB1dCgpXG4gIGRlZmF1bHRGaXJzdE9wdGlvbiA9IHRydWU7XG5cbiAgQElucHV0KClcbiAgdXNlVmlydHVhbDogYm9vbGVhbjtcblxuICBASW5wdXQoKVxuICAvLyBUT0RPIOi/mOS4jeaUr+aMgeWKqOaAgemrmOW6pueahG9wdGlvblxuICBpdGVtU2l6ZTogbnVtYmVyO1xuXG4gIEBJbnB1dCgpXG4gIG1heEl0ZW1MZW5ndGggPSAxMDtcblxuICBASW5wdXQoKVxuICBjcmVhdGVGbjogQ3JlYXRlRm48VD4gPSB0aGlzLl9jcmVhdGVGbjtcblxuICBASW5wdXQoKVxuICBmaWx0ZXJGbjogT3B0aW9uRmlsdGVyRm48VD4gPSB0aGlzLl9maWx0ZXJGbi5iaW5kKHRoaXMpO1xuXG4gIEBJbnB1dCgpXG4gIHRyYWNrRm46IFRyYWNrRm48VD4gPSB0aGlzLl90cmFja0ZuO1xuXG4gIEBJbnB1dCgpXG4gIGxhYmVsRm4/OiAodmFsdWU6IFQpID0+IHN0cmluZztcblxuICBAT3V0cHV0KClcbiAgZmlsdGVyQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XG5cbiAgQE91dHB1dCgpXG4gIHNob3cgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgQE91dHB1dCgpXG4gIGhpZGUgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgQFZpZXdDaGlsZCgnc2VsZWN0UmVmJywgeyBzdGF0aWM6IHRydWUgfSlcbiAgcHJvdGVjdGVkIHNlbGVjdFJlZjogRWxlbWVudFJlZjxIVE1MRWxlbWVudD47XG5cbiAgQFZpZXdDaGlsZCgndG9vbHRpcFJlZicsIHsgc3RhdGljOiB0cnVlIH0pXG4gIHByb3RlY3RlZCB0b29sdGlwUmVmOiBUb29sdGlwRGlyZWN0aXZlO1xuXG4gIEBWaWV3Q2hpbGQoJ29wdGlvbkxpc3RSZWYnLCB7IHN0YXRpYzogZmFsc2UgfSlcbiAgcHJvdGVjdGVkIG9wdGlvbkxpc3RSZWY6IEVsZW1lbnRSZWY8SFRNTERpdkVsZW1lbnQ+O1xuXG4gIEBWaWV3Q2hpbGQoVmlydHVhbFNjcm9sbFZpZXdwb3J0Q29tcG9uZW50KVxuICB2aXJ0dWFsU2Nyb2xsVmlld3BvcnQhOiBWaXJ0dWFsU2Nyb2xsVmlld3BvcnRDb21wb25lbnQ7XG5cbiAgLy8g5Y+v5Lul5Lyg5YWl6Ieq5a6a5LmJb3B0aW9uSXRlbe+8jOe6p+WIq+acgOmrmFxuICAvLyDkuLvopoHkvZznlKjmmK/lj6/ku6XlnKjkuJrliqHph4zlr7lvcHRpb27pmYTliqDkvovlpoIgdG9vbHRpcCDov5nmoLfnmoTog73liptcbiAgQENvbnRlbnRDaGlsZChPcHRpb25JdGVtQ3VzdG9tRGlyZWN0aXZlLCB7IHJlYWQ6IFRlbXBsYXRlUmVmIH0pXG4gIGlucHV0SXRlbVRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gIEBWaWV3Q2hpbGRyZW4oT3B0aW9uSXRlbUNvbXBvbmVudCwgeyByZWFkOiBFbGVtZW50UmVmIH0pXG4gIGNvbnRlbnRPcHRpb25JdGVtczogUXVlcnlMaXN0PEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+PjtcblxuICBAQ29udGVudENoaWxkcmVuKE9wdGlvbkNvbXBvbmVudCwgeyBkZXNjZW5kYW50czogdHJ1ZSB9KVxuICBjb250ZW50VHBsT3B0aW9uczogUXVlcnlMaXN0PE9wdGlvbkNvbXBvbmVudDxUPj47XG5cbiAgZ2V0IG9wZW5lZCgpIHtcbiAgICByZXR1cm4gdGhpcy50b29sdGlwUmVmLmlzQ3JlYXRlZDtcbiAgfVxuXG4gIGdldCBpbnB1dFJlYWRvbmx5KCkge1xuICAgIHJldHVybiAhKHRoaXMuZmlsdGVyYWJsZSAmJiB0aGlzLm9wZW5lZCk7XG4gIH1cblxuICBnZXQgX2l0ZW1TaXplKCkge1xuICAgIHJldHVybiB0aGlzLml0ZW1TaXplIHx8IGl0ZW1TaXplTWFwW3RoaXMuc2l6ZV07XG4gIH1cblxuICBzZXQgZmlsdGVyU3RyaW5nKHZhbCkge1xuICAgIGlmICh2YWwgIT09IHRoaXMuX2ZpbHRlclN0cmluZykge1xuICAgICAgdGhpcy5fZmlsdGVyU3RyaW5nID0gdmFsO1xuICAgICAgdGhpcy5maWx0ZXJTdHJpbmckJC5uZXh0KHZhbCk7XG4gICAgICB0aGlzLmZpbHRlckNoYW5nZS5lbWl0KHZhbCk7XG4gICAgfVxuICB9XG5cbiAgZ2V0IGZpbHRlclN0cmluZygpIHtcbiAgICByZXR1cm4gdGhpcy5fZmlsdGVyU3RyaW5nO1xuICB9XG5cbiAgaXNUZW1wbGF0ZVJlZiA9IGlzVGVtcGxhdGVSZWY7XG4gIGlzTXVsdGkgPSBmYWxzZTtcbiAgcHJvdGVjdGVkIHNjcm9sbGVkSW5kZXggPSAwO1xuXG4gIHByaXZhdGUgX3NpemU6IENvbXBvbmVudFNpemUgPSBDb21wb25lbnRTaXplLk1lZGl1bTtcbiAgcHJpdmF0ZSBfb3B0aW9uczogQXJyYXk8U2VsZWN0RmlsdGVyT3B0aW9uPFQ+PjtcbiAgcHJpdmF0ZSBfZmlsdGVyU3RyaW5nID0gJyc7XG4gIHNlbGVjdGFibGVPcHRpb25zOiBBcnJheTxEaXNwbGF5T3B0aW9uPFQ+PiA9IFtdO1xuXG4gIC8qKlxuICAgKiBVdGlsaXR5IGZpZWxkIHRvIG1ha2Ugc3VyZSB0aGUgdXNlcnMgYWx3YXlzIHNlZSB0aGUgdmFsdWUgYXMgdHlwZSBhcnJheVxuICAgKi9cbiAgYWJzdHJhY3QgcmVhZG9ubHkgdmFsdWVzJDogT2JzZXJ2YWJsZTxUW10+O1xuICAvLyDkvKDlhaXnmoRvcHRpb27mlbDmja5cbiAgcHJvdGVjdGVkIG9wdGlvbnMkJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8QXJyYXk8RGlzcGxheU9wdGlvbjxUPj4+KG51bGwpO1xuICAvLyDmnIDnu4jnmoRvcHRpb27mlbDmja5cbiAgcHJvdGVjdGVkIGNvbnRlbnRPcHRpb25zJDogT2JzZXJ2YWJsZTxBcnJheTxEaXNwbGF5T3B0aW9uPFQ+Pj47XG4gIC8vIOW3suWIm+W7uueahG9wdGlvbuaVsOaNru+8iOS7heW9k+aUr+aMgei+k+WFpeaXtuaJjeacie+8iVxuICBwcm90ZWN0ZWQgY3VzdG9tT3B0aW9ucyQ6IE9ic2VydmFibGU8QXJyYXk8RGlzcGxheU9wdGlvbjxUPj4+O1xuICAvLyDmraPlnKjovpPlhaXvvIjlvoXliJvlu7rvvInnmoRvcHRpb27mlbDmja5cbiAgcHJvdGVjdGVkIGlucHV0dGluZ09wdGlvbiQ6IE9ic2VydmFibGU8RGlzcGxheU9wdGlvbjxUPj47XG4gIC8vIOWMheaLrOi+k+WFpeS4reOAgeW3suWIm+W7uuOAgeWumuS5ieeahOaJgOaciW9wdGlvbuaVsOaNrlxuICBhbGxPcHRpb25zJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8QXJyYXk8RGlzcGxheU9wdGlvbjxUPj4+KFtdKTtcbiAgLy8g57uP6L+H6L+H5ruk5ZCO55qEb3B0aW9u5pWw5o2uXG4gIGZpbHRlck9wdGlvbnMkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxBcnJheTxEaXNwbGF5T3B0aW9uPFQ+Pj4oW10pO1xuICBjb250YWluZXJXaWR0aDogc3RyaW5nO1xuXG4gIHByb3RlY3RlZCBzaXplJCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PENvbXBvbmVudFNpemU+KHRoaXMuc2l6ZSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgZmlsdGVyU3RyaW5nJCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZz4oXG4gICAgdGhpcy5maWx0ZXJTdHJpbmcsXG4gICk7XG5cbiAgc2l6ZSQgPSB0aGlzLnNpemUkJC5hc09ic2VydmFibGUoKTtcbiAgb3B0aW9ucyQgPSB0aGlzLm9wdGlvbnMkJC5hc09ic2VydmFibGUoKTtcbiAgZmlsdGVyU3RyaW5nJCA9IHRoaXMuZmlsdGVyU3RyaW5nJCQuYXNPYnNlcnZhYmxlKCk7XG4gIGZvY3VzZWQkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxEaXNwbGF5T3B0aW9uPFQ+PihudWxsKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IGRlc3Ryb3lSZWYgPSBpbmplY3QoRGVzdHJveVJlZik7XG5cbiAgbmdBZnRlckNvbnRlbnRJbml0KCkge1xuICAgIHRoaXMuY29udGVudE9wdGlvbnMkID0gdGhpcy5vcHRpb25zJC5waXBlKFxuICAgICAgc3dpdGNoTWFwKG9wdGlvbnMgPT4ge1xuICAgICAgICBpZiAob3B0aW9ucz8ubGVuZ3RoKSB7XG4gICAgICAgICAgLy8g5aaC5p6c5pyJ5Lyg5YWl55qE6YWN572u5YiZ5L2/55So5Lyg5YWl55qE6YWN572uXG4gICAgICAgICAgcmV0dXJuIHRoaXMub3B0aW9ucyQ7XG4gICAgICAgIH1cbiAgICAgICAgLy8g5rKh5pyJ5Lyg5YWl55qE6YWN572u5YiZ6L2s5o2iIGh0bWwg5YaZ5rOV5Li66YWN572u5pWw5o2uXG4gICAgICAgIHJldHVybiBjb21iaW5lTGF0ZXN0KFtcbiAgICAgICAgICB0aGlzLnZhbHVlcyQsXG4gICAgICAgICAgLy8g5Y2V5Liqb3B0aW9u5oiW6ICFb3B0aW9u5YiX6KGo5Y+Y6YO95Lya6Kem5Y+RXG4gICAgICAgICAgbWVyZ2UoXG4gICAgICAgICAgICAuLi50aGlzLmNvbnRlbnRUcGxPcHRpb25zLm1hcChjb250ZW50VHBsID0+IGNvbnRlbnRUcGwuY2hhbmdlcyQpLFxuICAgICAgICAgICAgdGhpcy5jb250ZW50VHBsT3B0aW9ucy5jaGFuZ2VzLFxuICAgICAgICAgICkucGlwZShzdGFydFdpdGgodGhpcy5jb250ZW50VHBsT3B0aW9ucykpLFxuICAgICAgICBdKS5waXBlKG1hcCgoW3ZhbHVlc10pID0+IHRoaXMudHBsT3B0aW9uczJEYXRhKHZhbHVlcykpKTtcbiAgICAgIH0pLFxuICAgICAgcHVibGlzaFJlZigpLFxuICAgICk7XG5cbiAgICB0aGlzLmlucHV0dGluZ09wdGlvbiQgPSB0aGlzLmZpbHRlclN0cmluZyQucGlwZShcbiAgICAgIG1hcChmaWx0ZXJTdHJpbmcgPT4ge1xuICAgICAgICBpZiAoZmlsdGVyU3RyaW5nICYmIHRoaXMuYWxsb3dDcmVhdGUpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5jcmVhdGVGbihmaWx0ZXJTdHJpbmcpO1xuICAgICAgICB9XG4gICAgICB9KSxcbiAgICAgIHB1Ymxpc2hSZWYoKSxcbiAgICApO1xuXG4gICAgdGhpcy5jdXN0b21PcHRpb25zJCA9IGNvbWJpbmVMYXRlc3QoW1xuICAgICAgdGhpcy52YWx1ZXMkLFxuICAgICAgdGhpcy5jb250ZW50T3B0aW9ucyQsXG4gICAgXSkucGlwZShcbiAgICAgIG1hcCgoW3ZhbHVlcywgb3B0aW9uc10pID0+IHtcbiAgICAgICAgaWYgKCF0aGlzLmFsbG93Q3JlYXRlKSB7XG4gICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG9wdGlvbktleXMgPSBuZXcgU2V0KFxuICAgICAgICAgIG9wdGlvbnMubWFwKG9wdGlvbiA9PiB0aGlzLnRyYWNrRm4ob3B0aW9uLnZhbHVlKSksXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybiB2YWx1ZXMucmVkdWNlPEFycmF5PERpc3BsYXlPcHRpb248VD4+PigoYWNjLCB2YWx1ZSkgPT4ge1xuICAgICAgICAgIGlmICghb3B0aW9uS2V5cy5oYXModGhpcy50cmFja0ZuKHZhbHVlKSkpIHtcbiAgICAgICAgICAgIGNvbnN0IGxhYmVsID1cbiAgICAgICAgICAgICAgdGhpcy5sYWJlbEZuPy4odmFsdWUpIHx8IGNvZXJjZVN0cmluZyh0aGlzLnRyYWNrRm4odmFsdWUpKTtcbiAgICAgICAgICAgIGlmIChsYWJlbCkge1xuICAgICAgICAgICAgICBhY2MucHVzaCh7XG4gICAgICAgICAgICAgICAgbGFiZWwsXG4gICAgICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICAgICAgc2VsZWN0ZWQ6IHRydWUsXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgICB9LCBbXSk7XG4gICAgICB9KSxcbiAgICAgIHB1Ymxpc2hSZWYoKSxcbiAgICApO1xuXG4gICAgdGhpcy50cmFuc2Zvcm1PcHRpb25zKCk7XG5cbiAgICB0aGlzLmZpbHRlck9wdGlvbnMkXG4gICAgICAucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKSlcbiAgICAgIC5zdWJzY3JpYmUob3B0aW9ucyA9PiB7XG4gICAgICAgIHRoaXMuc2VsZWN0YWJsZU9wdGlvbnMgPSBvcHRpb25zLmZpbHRlcihvcHRpb24gPT4gIW9wdGlvbi5kaXNhYmxlZCk7XG4gICAgICB9KTtcbiAgfVxuXG4gIC8vIOWwhmF1aS1vcHRpb27ovazkuLrphY3nva7mlbDmja5cbiAgcHJpdmF0ZSB0cGxPcHRpb25zMkRhdGEodmFsdWVzOiBUW10pIHtcbiAgICBjb25zdCBjb250ZW50czogQXJyYXk8RGlzcGxheU9wdGlvbjxUPj4gPSBbXTtcbiAgICBsZXQgbGFzdEdyb3VwVGl0bGU6IEVsZW1lbnRSZWY7XG4gICAgLy8g55So5pyA5paw55qEb3B0aW9u5YWD57Sg5YiX6KGo5riF5rSX5Ye66YWN572u5pWw5o2uXG4gICAgdGhpcy5jb250ZW50VHBsT3B0aW9ucy50b0FycmF5KCkuZm9yRWFjaChjb20gPT4ge1xuICAgICAgY29uc3Qge1xuICAgICAgICB2YWx1ZSxcbiAgICAgICAgbGFiZWwsXG4gICAgICAgIGRpc2FibGVkLFxuICAgICAgICBncm91cFRpdGxlLFxuICAgICAgICBsYWJlbENvbnRleHQsXG4gICAgICAgIGNvbnRlbnRUZW1wbGF0ZSxcbiAgICAgIH0gPSBjb207XG4gICAgICBpZiAobGFzdEdyb3VwVGl0bGUgIT09IGdyb3VwVGl0bGUpIHtcbiAgICAgICAgbGFzdEdyb3VwVGl0bGUgPSBncm91cFRpdGxlO1xuICAgICAgICBjb250ZW50cy5wdXNoKHtcbiAgICAgICAgICBncm91cFRpdGxlLFxuICAgICAgICB9IGFzIERpc3BsYXlPcHRpb248VD4pO1xuICAgICAgfVxuICAgICAgY29udGVudHMucHVzaCh7XG4gICAgICAgIHZhbHVlLFxuICAgICAgICBsYWJlbCxcbiAgICAgICAgZGlzYWJsZWQsXG4gICAgICAgIGxhYmVsQ29udGV4dCxcbiAgICAgICAgc2VsZWN0ZWQ6IHRoaXMuZ2V0U2VsZWN0ZWQodmFsdWUsIHZhbHVlcyksXG4gICAgICAgIGNvbnRlbnRUZW1wbGF0ZSxcbiAgICAgIH0gYXMgRGlzcGxheU9wdGlvbjxUPik7XG4gICAgfSk7XG4gICAgcmV0dXJuIGNvbnRlbnRzO1xuICB9XG5cbiAgcHJpdmF0ZSB0cmFuc2Zvcm1PcHRpb25zKCkge1xuICAgIGNvbWJpbmVMYXRlc3QoW1xuICAgICAgdGhpcy5pbnB1dHRpbmdPcHRpb24kLFxuICAgICAgdGhpcy5jdXN0b21PcHRpb25zJCxcbiAgICAgIHRoaXMuY29udGVudE9wdGlvbnMkLCAvLyB0b2RvIGNvbnRlbnRPcHRpb25zJCDmtYHkvJrop6blj5EgY3VzdG9tT3B0aW9ucyTvvIzmiYDku6XlupTor6XlsIbov5nkuKTkuKrlkIjlubbkuLrkuIDmrKHop6blj5FcbiAgICBdKVxuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcCgoW2lucHV0dGluZ09wdGlvbiwgY3VzdG9tT3B0aW9ucywgY29udGVudE9wdGlvbnNdKSA9PiB7XG4gICAgICAgICAgY29uc3QgYXJyID0gWy4uLmN1c3RvbU9wdGlvbnMsIC4uLmNvbnRlbnRPcHRpb25zXTtcbiAgICAgICAgICBpZiAoaW5wdXR0aW5nT3B0aW9uKSB7XG4gICAgICAgICAgICBhcnIudW5zaGlmdChpbnB1dHRpbmdPcHRpb24pO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gYXJyO1xuICAgICAgICB9KSxcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoYXJyID0+IHtcbiAgICAgICAgdGhpcy5hbGxPcHRpb25zJC5uZXh0KGFycik7XG4gICAgICB9KTtcblxuICAgIGNvbWJpbmVMYXRlc3QoW3RoaXMuYWxsT3B0aW9ucyQsIHRoaXMuZmlsdGVyU3RyaW5nJF0pXG4gICAgICAucGlwZShcbiAgICAgICAgdGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZiksXG4gICAgICAgIG1hcCgoW29wdGlvbnMsIGZpbHRlclN0cmluZ10pID0+IHtcbiAgICAgICAgICBjb25zdCByZXN1bHQ6IEFycmF5PERpc3BsYXlPcHRpb248VD4+ID0gW107XG4gICAgICAgICAgbGV0IGxhc3RUaXRsZU9wdGlvbjogRGlzcGxheU9wdGlvbjxUPjtcbiAgICAgICAgICBsZXQgbGFzdFJlc3VsdExlbmd0aCA9IDA7XG4gICAgICAgICAgbGV0IGxhc3RUaXRsZVJlc3VsdExlbmd0aCA9IDA7XG4gICAgICAgICAgb3B0aW9ucy5mb3JFYWNoKChvcHRpb24sIGlkeCkgPT4ge1xuICAgICAgICAgICAgLy8g5pyJ5b6F56Gu6K6k55qE57uEb3B0aW9uXG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIGxhc3RUaXRsZU9wdGlvbiAmJiAvLyDpgY3ljobliLDmnIDlkI7kuIDkuKrkuoYg5oiW6ICFIOW8gOWni+mBjeWOhuaWsOeahOe7hOS6huWwsei/m+WFpeehruiupOmAu+i+kVxuICAgICAgICAgICAgICAoaWR4ID09PSBvcHRpb25zLmxlbmd0aCAtIDEgfHxcbiAgICAgICAgICAgICAgICAob3B0aW9uLmdyb3VwVGl0bGUgJiYgbGFzdFRpdGxlT3B0aW9uICE9PSBvcHRpb24pKSAmJiAvLyDlpoLmnpzorrDlvZXlvoXnoa7orqTnu4Tml7bnmoRyZXN1bHTplb/luqblkozlvZPliY1yZXN1bHTplb/luqbkuI3kuIDoh7TvvIzkuZ/lsLHmmK/lop7liqDkuobvvIzor7TmmI7nu4TlhoXmnInnrKblkIjmnaHku7bnmoRvcHRpb27vvIzlsLHmj5LlhaXov5vljrtcbiAgICAgICAgICAgICAgbGFzdFJlc3VsdExlbmd0aCAhPT0gbGFzdFRpdGxlUmVzdWx0TGVuZ3RoXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgcmVzdWx0LnNwbGljZShsYXN0VGl0bGVSZXN1bHRMZW5ndGgsIDAsIGxhc3RUaXRsZU9wdGlvbik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAob3B0aW9uLmdyb3VwVGl0bGUpIHtcbiAgICAgICAgICAgICAgbGFzdFRpdGxlUmVzdWx0TGVuZ3RoID0gcmVzdWx0Lmxlbmd0aDtcbiAgICAgICAgICAgICAgbGFzdFRpdGxlT3B0aW9uID0gb3B0aW9uO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmZpbHRlckZuKGZpbHRlclN0cmluZywgb3B0aW9uKSkge1xuICAgICAgICAgICAgICByZXN1bHQucHVzaChvcHRpb24pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGFzdFJlc3VsdExlbmd0aCA9IHJlc3VsdC5sZW5ndGg7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfSksXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKHJlc3VsdCA9PiB7XG4gICAgICAgIHRoaXMuZmlsdGVyT3B0aW9ucyQubmV4dChyZXN1bHQpO1xuICAgICAgfSk7XG4gIH1cblxuICB0cmFja0J5VmFsdWUgPSAoXzogbnVtYmVyLCBpdGVtOiBTZWxlY3RGaWx0ZXJPcHRpb248VD4pID0+XG4gICAgdGhpcy50cmFja0ZuKGl0ZW0udmFsdWUpO1xuXG4gIG9wZW5PcHRpb24oKSB7XG4gICAgdGhpcy50b29sdGlwUmVmLnNob3coKTtcbiAgfVxuXG4gIGNsb3NlT3B0aW9uKCkge1xuICAgIHRoaXMudG9vbHRpcFJlZi5oaWRlKCk7XG4gIH1cblxuICBvblNob3dPcHRpb25zKCkge1xuICAgIHRoaXMuY29udGFpbmVyV2lkdGggPSB0aGlzLnNlbGVjdFJlZi5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRoICsgJ3B4JztcblxuICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICB0aGlzLmF1dG9Gb2N1c0ZpcnN0T3B0aW9uKCk7XG4gICAgfSk7XG5cbiAgICB0aGlzLnNob3cuZW1pdCgpO1xuICB9XG5cbiAgb25IaWRlT3B0aW9ucygpIHtcbiAgICBpZiAodGhpcy5vblRvdWNoZWQpIHtcbiAgICAgIHRoaXMub25Ub3VjaGVkKCk7XG4gICAgfVxuICAgIHRoaXMucmVzZXRGb2N1c2VkT3B0aW9uKCk7XG4gICAgdGhpcy5maWx0ZXJTdHJpbmcgPSAnJztcbiAgICB0aGlzLmhpZGUuZW1pdCgpO1xuICB9XG5cbiAgb25JbnB1dChldmVudDogRXZlbnQpIHtcbiAgICB0aGlzLmZpbHRlclN0cmluZyA9IChldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudCkudmFsdWU7XG5cbiAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAgICAgdGhpcy5hdXRvRm9jdXNGaXJzdE9wdGlvbigpO1xuICAgIH0pO1xuXG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBzdG9wRXZlbnQoZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICB9XG5cbiAgb25LZXlEb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG4gICAgc3dpdGNoIChldmVudC5rZXkpIHtcbiAgICAgIGNhc2UgJ0Fycm93RG93bic6IHtcbiAgICAgICAgdGhpcy5mb2N1c09wdGlvbkRpcignZG93bicpO1xuICAgICAgICB0aGlzLnN0b3BFdmVudChldmVudCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSAnQXJyb3dVcCc6IHtcbiAgICAgICAgdGhpcy5mb2N1c09wdGlvbkRpcigndXAnKTtcbiAgICAgICAgdGhpcy5zdG9wRXZlbnQoZXZlbnQpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNhc2UgJ0VudGVyJzoge1xuICAgICAgICB0aGlzLnNlbGVjdEZvY3VzZWRPcHRpb24oKTtcbiAgICAgICAgdGhpcy5zdG9wRXZlbnQoZXZlbnQpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNhc2UgJ0VzY2FwZSc6IHtcbiAgICAgICAgdGhpcy5lc2NTZWxlY3QoKTtcbiAgICAgICAgdGhpcy5zdG9wRXZlbnQoZXZlbnQpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBvbk9wdGlvbkNsaWNrKG9wdGlvbjogT3B0aW9uSXRlbUNvbXBvbmVudDxUPikge1xuICAgIHRoaXMucmVzZXRGb2N1c2VkT3B0aW9uKG9wdGlvbik7XG4gICAgdGhpcy5zZWxlY3RPcHRpb24ob3B0aW9uKTtcbiAgfVxuXG4gIHVwZGF0ZUFsbE9wdGlvbnMob3B0aW9uOiBEaXNwbGF5T3B0aW9uPFQ+KSB7XG4gICAgY29uc3QgYWxsT3B0aW9ucyA9IHRoaXMuYWxsT3B0aW9ucyQuZ2V0VmFsdWUoKTtcbiAgICBhbGxPcHRpb25zLmZpbmQoX29wdGlvbiA9PiBfb3B0aW9uLnZhbHVlID09PSBvcHRpb24udmFsdWUpLnNlbGVjdGVkID1cbiAgICAgICFvcHRpb24uc2VsZWN0ZWQ7XG4gICAgdGhpcy5hbGxPcHRpb25zJC5uZXh0KGFsbE9wdGlvbnMpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGF1dG9Gb2N1c0ZpcnN0T3B0aW9uKCkge1xuICAgIGlmICghdGhpcy5zZWxlY3RhYmxlT3B0aW9ucy5sZW5ndGgpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgZmlyc3QgPVxuICAgICAgdGhpcy5zZWxlY3RhYmxlT3B0aW9ucy5maW5kKG9wdGlvbiA9PiBvcHRpb24uc2VsZWN0ZWQpIHx8XG4gICAgICAodGhpcy5zZWxlY3RhYmxlT3B0aW9uc1swXS5ncm91cFRpdGxlXG4gICAgICAgID8gdGhpcy5zZWxlY3RhYmxlT3B0aW9uc1sxXVxuICAgICAgICA6IHRoaXMuc2VsZWN0YWJsZU9wdGlvbnNbMF0pO1xuICAgIGlmICh0aGlzLmRlZmF1bHRGaXJzdE9wdGlvbikge1xuICAgICAgdGhpcy5yZXNldEZvY3VzZWRPcHRpb24oZmlyc3QpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNjcm9sbFRvT3B0aW9uKGZpcnN0KTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgZm9jdXNPcHRpb25EaXIoZGlyOiAnZG93bicgfCAndXAnKSB7XG4gICAgaWYgKCF0aGlzLm9wZW5lZCkge1xuICAgICAgdGhpcy5vcGVuT3B0aW9uKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLnNlbGVjdGFibGVPcHRpb25zPy5sZW5ndGgpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3Qgc3RlcCA9IGRpciA9PT0gJ2Rvd24nID8gMSA6IC0xO1xuICAgIGxldCBpID0gdGhpcy5zZWxlY3RhYmxlT3B0aW9ucy5maW5kSW5kZXgob3B0aW9uID0+XG4gICAgICB0aGlzLmlzRm9jdXMob3B0aW9uLnZhbHVlKSxcbiAgICApO1xuICAgIGkgPSBpICsgc3RlcDtcbiAgICAvLyDlpoLmnpzmmK9ncm91cFRpdGxl77yM5bCx5YaN6LWw5LiA5q2lXG4gICAgaWYgKHRoaXMuc2VsZWN0YWJsZU9wdGlvbnNbaV0/Lmdyb3VwVGl0bGUpIHtcbiAgICAgIGkgPSBpICsgc3RlcDtcbiAgICB9XG4gICAgaWYgKGkgPj0gdGhpcy5zZWxlY3RhYmxlT3B0aW9ucy5sZW5ndGgpIHtcbiAgICAgIGkgPSAwO1xuICAgIH0gZWxzZSBpZiAoaSA8IDApIHtcbiAgICAgIGkgPSB0aGlzLnNlbGVjdGFibGVPcHRpb25zLmxlbmd0aCAtIDE7XG4gICAgfVxuICAgIHRoaXMucmVzZXRGb2N1c2VkT3B0aW9uKHRoaXMuc2VsZWN0YWJsZU9wdGlvbnNbaV0pO1xuICB9XG5cbiAgaXNGb2N1cyA9IChcbiAgICB2YWx1ZTogRGlzcGxheU9wdGlvbjxUPlsndmFsdWUnXSxcbiAgICBmb2N1c09wdGlvbj86IERpc3BsYXlPcHRpb248VD4sXG4gICkgPT4ge1xuICAgIGNvbnN0IF9mb2N1c09wdGlvbiA9IGZvY3VzT3B0aW9uIHx8IHRoaXMuZm9jdXNlZCQuZ2V0VmFsdWUoKTtcbiAgICByZXR1cm4gKFxuICAgICAgX2ZvY3VzT3B0aW9uICYmIHRoaXMudHJhY2tGbihfZm9jdXNPcHRpb24udmFsdWUpID09PSB0aGlzLnRyYWNrRm4odmFsdWUpXG4gICAgKTtcbiAgfTtcblxuICBwcm90ZWN0ZWQgcmVzZXRGb2N1c2VkT3B0aW9uKGZvY3VzZWRPcHRpb24/OiBEaXNwbGF5T3B0aW9uPFQ+KSB7XG4gICAgdGhpcy5ibHVyKCk7XG4gICAgaWYgKGZvY3VzZWRPcHRpb24/LnZhbHVlKSB7XG4gICAgICB0aGlzLmZvY3VzZWQkLm5leHQoZm9jdXNlZE9wdGlvbik7XG4gICAgICB0aGlzLnNjcm9sbFRvT3B0aW9uKGZvY3VzZWRPcHRpb24pO1xuICAgIH1cbiAgfVxuXG4gIG9uU2Nyb2xsZWRJbmRleENoYW5nZShpbmRleDogbnVtYmVyKSB7XG4gICAgdGhpcy5zY3JvbGxlZEluZGV4ID0gaW5kZXg7XG4gIH1cblxuICBwcm90ZWN0ZWQgc2Nyb2xsVG9PcHRpb24ob3B0aW9uOiBEaXNwbGF5T3B0aW9uPFQ+KSB7XG4gICAgY29uc3QgaW5kZXggPSB0aGlzLmZpbHRlck9wdGlvbnMkXG4gICAgICAuZ2V0VmFsdWUoKVxuICAgICAgLmZpbmRJbmRleChcbiAgICAgICAgaXRlbSA9PiB0aGlzLnRyYWNrRm4oaXRlbS52YWx1ZSkgPT09IHRoaXMudHJhY2tGbihvcHRpb24udmFsdWUpLFxuICAgICAgKTtcbiAgICBpZiAoIXRoaXMudmlydHVhbFNjcm9sbFZpZXdwb3J0KSB7XG4gICAgICBpZiAodGhpcy5jb250ZW50T3B0aW9uSXRlbXMuZ2V0KGluZGV4KSkge1xuICAgICAgICBzY3JvbGxJbnRvVmlldyhcbiAgICAgICAgICB0aGlzLm9wdGlvbkxpc3RSZWYubmF0aXZlRWxlbWVudCxcbiAgICAgICAgICB0aGlzLmNvbnRlbnRPcHRpb25JdGVtcy5nZXQoaW5kZXgpLm5hdGl2ZUVsZW1lbnQsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChcbiAgICAgIGluZGV4IDwgdGhpcy5zY3JvbGxlZEluZGV4IHx8XG4gICAgICBpbmRleCA+PSB0aGlzLnNjcm9sbGVkSW5kZXggKyB0aGlzLm1heEl0ZW1MZW5ndGhcbiAgICApIHtcbiAgICAgIHRoaXMudmlydHVhbFNjcm9sbFZpZXdwb3J0LnNjcm9sbFRvSW5kZXgoaW5kZXggfHwgMCk7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIHNlbGVjdEZvY3VzZWRPcHRpb24oKSB7XG4gICAgaWYgKCF0aGlzLm9wZW5lZCkge1xuICAgICAgdGhpcy5vcGVuT3B0aW9uKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGxldCBmb2N1c2VkT3B0aW9uID0gdGhpcy5mb2N1c2VkJC5nZXRWYWx1ZSgpO1xuICAgIGlmIChmb2N1c2VkT3B0aW9uKSB7XG4gICAgICAvLyDmm7TmlrDogZrnhKbnmoRvcHRpb27vvIzkvovlpoLvvJpmb2N1c+afkOS4gOmhueWQjuS4gOebtOaMiWVudGVy6ZSuXG4gICAgICBmb2N1c2VkT3B0aW9uID0gdGhpcy5zZWxlY3RhYmxlT3B0aW9ucy5maW5kKFxuICAgICAgICBvcHRpb24gPT5cbiAgICAgICAgICB0aGlzLnRyYWNrRm4ob3B0aW9uLnZhbHVlKSA9PT0gdGhpcy50cmFja0ZuKGZvY3VzZWRPcHRpb24udmFsdWUpLFxuICAgICAgKTtcbiAgICAgIGZvY3VzZWRPcHRpb24gJiYgdGhpcy5zZWxlY3RPcHRpb24oZm9jdXNlZE9wdGlvbik7XG4gICAgfVxuICB9XG5cbiAgZ2V0U2VsZWN0ZWQoXG4gICAgdmFsdWU6IERpc3BsYXlPcHRpb248VD5bJ3ZhbHVlJ10sXG4gICAgdmFsdWVzOiBBcnJheTxEaXNwbGF5T3B0aW9uPFQ+Wyd2YWx1ZSddPixcbiAgKSB7XG4gICAgcmV0dXJuIHZhbHVlcy5zb21lKGl0ZW0gPT4gdGhpcy50cmFja0ZuKGl0ZW0pID09PSB0aGlzLnRyYWNrRm4odmFsdWUpKTtcbiAgfVxuXG4gIGZvY3VzKG9wdGlvbjogRGlzcGxheU9wdGlvbjxUPikge1xuICAgIHRoaXMuZm9jdXNlZCQubmV4dChvcHRpb24pO1xuICB9XG5cbiAgYmx1cigpIHtcbiAgICB0aGlzLmZvY3VzZWQkLm5leHQobnVsbCk7XG4gIH1cblxuICBnZXRMYWJlbEJ5VmFsdWUodmFsdWU6IFQpIHtcbiAgICByZXR1cm4gdGhpcy5sYWJlbEZuPy4odmFsdWUpIHx8IGNvZXJjZVN0cmluZyh0aGlzLnRyYWNrRm4odmFsdWUpKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBlc2NTZWxlY3QoKSB7XG4gICAgdGhpcy5jbG9zZU9wdGlvbigpO1xuICB9XG5cbiAgcHJpdmF0ZSBfdHJhY2tGbjxUPih2YWx1ZTogVCkge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG4gIHByaXZhdGUgX2NyZWF0ZUZuPFQ+KGlucHV0OiBzdHJpbmcpIHtcbiAgICBjb25zdCB2YWx1ZSA9IGlucHV0IGFzIFQ7XG4gICAgcmV0dXJuIHtcbiAgICAgIHZhbHVlLFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIF9maWx0ZXJGbihcbiAgICBmaWx0ZXJTdHJpbmc6IHN0cmluZyxcbiAgICB7IGxhYmVsLCB2YWx1ZSB9OiBTZWxlY3RGaWx0ZXJPcHRpb248VD4sXG4gICkge1xuICAgIHJldHVybiAoXG4gICAgICAodHlwZW9mIGxhYmVsID09PSAnc3RyaW5nJyAmJiBsYWJlbCkgfHxcbiAgICAgIHRoaXMubGFiZWxGbj8uKHZhbHVlKSB8fFxuICAgICAgY29lcmNlU3RyaW5nKHRoaXMudHJhY2tGbih2YWx1ZSkpXG4gICAgKVxuICAgICAgPy50b0xvd2VyQ2FzZSgpXG4gICAgICAuaW5jbHVkZXMoZmlsdGVyU3RyaW5nPy50b0xvd2VyQ2FzZSgpID8/ICcnKTtcbiAgfVxuXG4gIGFic3RyYWN0IHNlbGVjdE9wdGlvbihvcHRpb246IERpc3BsYXlPcHRpb248VD4pOiB2b2lkO1xuICBhYnN0cmFjdCBjbGVhclZhbHVlKGV2ZW50OiBFdmVudCk6IHZvaWQ7XG59XG4iXX0=
|