cps-ui-kit 0.18.0 → 0.20.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,466 @@
1
+ import { CommonModule } from '@angular/common';
2
+ import { Component, EventEmitter, Input, Optional, Output, Self, ViewChild } from '@angular/core';
3
+ import { FormsModule } from '@angular/forms';
4
+ import { Subscription } from 'rxjs';
5
+ import { convertSize } from '../../utils/size-utils';
6
+ import { CpsIconComponent } from '../cps-icon/cps-icon.component';
7
+ import { CpsChipComponent } from '../cps-chip/cps-chip.component';
8
+ import { CpsProgressLinearComponent } from '../cps-progress-linear/cps-progress-linear.component';
9
+ import { ClickOutsideDirective } from '../../directives/click-outside.directive';
10
+ import { LabelByValuePipe } from '../../pipes/label-by-value.pipe';
11
+ import { CombineLabelsPipe } from '../../pipes/combine-labels.pipe';
12
+ import { isEqual } from 'lodash-es';
13
+ import { TreeModule } from 'primeng/tree';
14
+ import * as i0 from "@angular/core";
15
+ import * as i1 from "@angular/forms";
16
+ import * as i2 from "@angular/common";
17
+ import * as i3 from "primeng/tree";
18
+ import * as i4 from "primeng/api";
19
+ export class CpsTreeSelectComponent {
20
+ set options(options) {
21
+ if (options?.some((o) => o.inner)) {
22
+ this._options = options;
23
+ return;
24
+ }
25
+ this._options = this._toInnerOptions(options);
26
+ }
27
+ get options() {
28
+ return this._options;
29
+ }
30
+ set value(value) {
31
+ this._value = value;
32
+ this.onChange(value);
33
+ }
34
+ get value() {
35
+ return this._value;
36
+ }
37
+ constructor(_control, cdRef) {
38
+ this._control = _control;
39
+ this.cdRef = cdRef;
40
+ this.label = '';
41
+ this.placeholder = 'Please select';
42
+ this.hint = '';
43
+ this.multiple = false;
44
+ this.disabled = false;
45
+ this.width = '100%';
46
+ this.chips = true;
47
+ this.closableChips = true;
48
+ this.clearable = false;
49
+ this.openOnClear = true;
50
+ this.optionLabel = 'label';
51
+ this.optionInfo = 'info';
52
+ this.hideDetails = false;
53
+ this.persistentClear = false;
54
+ this.prefixIcon = '';
55
+ this.prefixIconSize = '18px';
56
+ this.loading = false;
57
+ this.virtualScroll = false;
58
+ this._value = undefined;
59
+ this.valueChanged = new EventEmitter();
60
+ this._statusChangesSubscription = new Subscription();
61
+ this._options = [];
62
+ this.optionsMap = new Map();
63
+ this.originalOptionsMap = new Map();
64
+ this.virtualListHeight = 240;
65
+ this.virtualScrollItemSize = 40;
66
+ this.error = '';
67
+ this.cvtWidth = '';
68
+ this.isOpened = false;
69
+ this.optionFocused = false;
70
+ // eslint-disable-next-line @typescript-eslint/no-empty-function
71
+ this.onChange = (value) => { };
72
+ // eslint-disable-next-line @typescript-eslint/no-empty-function
73
+ this.onTouched = () => { };
74
+ if (this._control) {
75
+ this._control.valueAccessor = this;
76
+ }
77
+ }
78
+ ngOnInit() {
79
+ this.cvtWidth = convertSize(this.width);
80
+ if (!this._value) {
81
+ if (this.multiple) {
82
+ this._value = [];
83
+ this.treeSelection = [];
84
+ }
85
+ }
86
+ else {
87
+ this.treeSelection = this._valueToTreeSelection(this.value);
88
+ }
89
+ this._statusChangesSubscription = this._control?.statusChanges?.subscribe(() => {
90
+ this._checkErrors();
91
+ });
92
+ }
93
+ ngAfterViewInit() {
94
+ this._initContainerClickListener();
95
+ this.recalcVirtualListHeight();
96
+ this.cdRef.detectChanges();
97
+ }
98
+ ngOnDestroy() {
99
+ this._statusChangesSubscription?.unsubscribe();
100
+ if (this.treeContainerElement)
101
+ this.treeContainerElement.removeEventListener('click', this._handleOnContainerClick.bind(this));
102
+ }
103
+ _initContainerClickListener() {
104
+ this.treeContainerElement =
105
+ this.treeList?.el?.nativeElement?.querySelector('.p-tree-container');
106
+ if (this.treeContainerElement) {
107
+ this.treeContainerElement.addEventListener('click', this._handleOnContainerClick.bind(this));
108
+ }
109
+ }
110
+ _handleOnContainerClick(event) {
111
+ function getParentWithClass(element, className) {
112
+ let currentElement = element;
113
+ while (currentElement) {
114
+ if (currentElement.classList.contains(className)) {
115
+ return currentElement;
116
+ }
117
+ currentElement = currentElement.parentElement;
118
+ }
119
+ return null;
120
+ }
121
+ this.optionFocused = true;
122
+ const parent = event.target.classList.contains('p-treenode-content')
123
+ ? event.target
124
+ : getParentWithClass(event.target, 'p-treenode-content');
125
+ if (parent?.parentElement?.classList?.contains('cps-tree-node-fully-expandable')) {
126
+ this.onClickFullyExpandable(event, parent.parentElement);
127
+ }
128
+ }
129
+ registerOnChange(fn) {
130
+ this.onChange = fn;
131
+ }
132
+ registerOnTouched(fn) {
133
+ this.onTouched = fn;
134
+ }
135
+ writeValue(value) {
136
+ this.value = value;
137
+ }
138
+ updateValue(value) {
139
+ this.writeValue(value);
140
+ this.onChange(value);
141
+ this.valueChanged.emit(value);
142
+ }
143
+ onSelectNode() {
144
+ if (!this.multiple) {
145
+ this._toggleOptions(this.selectContainer?.nativeElement, false);
146
+ }
147
+ }
148
+ onClickOutside(dd) {
149
+ this._toggleOptions(dd, false);
150
+ }
151
+ onBoxClick(dd) {
152
+ this._toggleOptions(dd);
153
+ }
154
+ onKeyDown(event, dd) {
155
+ event.preventDefault();
156
+ const code = event.keyCode;
157
+ // escape
158
+ if (code === 27) {
159
+ this._toggleOptions(dd, false);
160
+ }
161
+ // click down arrow
162
+ else if ([40].includes(code)) {
163
+ this._initArrowsNavigaton();
164
+ }
165
+ }
166
+ onClickFullyExpandable(event, elem) {
167
+ const key = this._getHTMLElementKey(elem);
168
+ if (!key)
169
+ return;
170
+ const treeNode = this.options.find((o) => o.key === key);
171
+ if (!treeNode)
172
+ return;
173
+ treeNode.expanded = !treeNode.expanded;
174
+ this._updateOptions();
175
+ setTimeout(() => {
176
+ this.recalcVirtualListHeight();
177
+ });
178
+ }
179
+ _getHTMLElementKey(elem) {
180
+ if (!elem?.classList)
181
+ return '';
182
+ const classList = [...elem.classList];
183
+ const key = classList.find((className) => {
184
+ return className.startsWith('key-');
185
+ });
186
+ if (!key)
187
+ return '';
188
+ return key.replace('key-', '');
189
+ }
190
+ treeSelectionChanged(selection) {
191
+ this.updateValue(this._treeSelectionToValue(selection));
192
+ }
193
+ recalcVirtualListHeight() {
194
+ if (!this.virtualScroll)
195
+ return;
196
+ const currentLen = this.treeList?.serializedValue?.length || 0;
197
+ this.virtualListHeight = Math.min(this.virtualScrollItemSize * currentLen, 240);
198
+ }
199
+ _toggleOptions(dd, show) {
200
+ if (this.disabled || !dd)
201
+ return;
202
+ if (typeof show === 'boolean') {
203
+ if (show)
204
+ dd.classList.add('active');
205
+ else
206
+ dd.classList.remove('active');
207
+ }
208
+ else
209
+ dd.classList.toggle('active');
210
+ this.isOpened = dd.classList.contains('active');
211
+ this.optionFocused = false;
212
+ if (this.isOpened && this.treeSelection) {
213
+ this._expandToNodes(this.multiple ? this.treeSelection : [this.treeSelection]);
214
+ this._updateOptions();
215
+ setTimeout(() => {
216
+ this.recalcVirtualListHeight();
217
+ const selected = this.selectContainer.nativeElement.querySelector('.p-highlight');
218
+ if (selected) {
219
+ selected.scrollIntoView({
220
+ behavior: 'instant',
221
+ block: 'nearest',
222
+ inline: 'center'
223
+ });
224
+ }
225
+ else if (this.virtualScroll && this.treeSelection) {
226
+ let key = '';
227
+ if (this.multiple) {
228
+ if (this.treeSelection.length > 0)
229
+ key = this.treeSelection[0].key;
230
+ }
231
+ else
232
+ key = this.treeSelection.key;
233
+ if (key) {
234
+ const idx = this.treeList?.serializedValue?.findIndex((v) => v.node.key === key) || -1;
235
+ if (idx >= 0)
236
+ this.treeList.scrollToVirtualIndex(idx);
237
+ }
238
+ }
239
+ });
240
+ }
241
+ }
242
+ remove(option) {
243
+ if (!this.multiple)
244
+ return;
245
+ this.treeSelection = this.treeSelection.filter((v) => !isEqual(v, option));
246
+ this.updateValue(this._treeSelectionToValue(this.treeSelection));
247
+ }
248
+ _initArrowsNavigaton() {
249
+ if (!this.isOpened)
250
+ return;
251
+ if (!this.optionFocused) {
252
+ const firstElem = this.treeContainerElement?.querySelector('.p-treenode-content');
253
+ if (firstElem)
254
+ firstElem.focus();
255
+ this.optionFocused = true;
256
+ }
257
+ }
258
+ clear(dd, event) {
259
+ event.stopPropagation();
260
+ if ((!this.multiple && this.treeSelection) ||
261
+ (this.multiple && this.treeSelection?.length > 0)) {
262
+ if (this.openOnClear) {
263
+ this._toggleOptions(dd, true);
264
+ }
265
+ const val = this.multiple ? [] : undefined;
266
+ this.treeSelection = val;
267
+ this.updateValue(val);
268
+ }
269
+ this.optionFocused = false;
270
+ }
271
+ _checkErrors() {
272
+ const errors = this._control?.errors;
273
+ if (!this._control?.control?.touched || !errors) {
274
+ this.error = '';
275
+ return;
276
+ }
277
+ if ('required' in errors) {
278
+ this.error = 'Field is required';
279
+ return;
280
+ }
281
+ const errArr = Object.values(errors);
282
+ if (errArr.length < 1) {
283
+ this.error = '';
284
+ return;
285
+ }
286
+ const message = errArr.find((msg) => typeof msg === 'string');
287
+ this.error = message || 'Unknown error';
288
+ }
289
+ // eslint-disable-next-line @typescript-eslint/no-empty-function
290
+ setDisabledState(disabled) { }
291
+ onBlur() {
292
+ this._control?.control?.markAsTouched();
293
+ this._checkErrors();
294
+ }
295
+ focus() {
296
+ this.selectContainer?.nativeElement?.focus();
297
+ this._toggleOptions(this.selectContainer?.nativeElement, true);
298
+ }
299
+ _expandToNodes(nodes) {
300
+ function getParentKey(key) {
301
+ const lastSeparatorIndex = key.lastIndexOf('-');
302
+ if (lastSeparatorIndex !== -1) {
303
+ return key.substring(0, lastSeparatorIndex);
304
+ }
305
+ return '';
306
+ }
307
+ nodes.forEach((node) => {
308
+ const parentNodeKey = getParentKey(node.key);
309
+ const parentNode = this.optionsMap.get(parentNodeKey) || null;
310
+ if (parentNode) {
311
+ parentNode.expanded = true;
312
+ this._expandToNodes([parentNode]);
313
+ }
314
+ });
315
+ }
316
+ _toInnerOptions(_options) {
317
+ function mapOption(o, optionLabel, optionInfo, key, originalOptionsMap) {
318
+ const inner = {
319
+ inner: true,
320
+ label: o[optionLabel],
321
+ info: o[optionInfo],
322
+ key,
323
+ styleClass: 'key-' + key
324
+ };
325
+ if (o.type === 'directory') {
326
+ inner.type = 'directory';
327
+ inner.selectable = false;
328
+ inner.styleClass += ' cps-tree-node-fully-expandable';
329
+ }
330
+ if (o.children) {
331
+ inner.children = o.children.map((c, index) => {
332
+ return mapOption(c, optionLabel, optionInfo, key + '-' + index, originalOptionsMap);
333
+ });
334
+ }
335
+ originalOptionsMap.set(key, o);
336
+ return inner;
337
+ }
338
+ const res = _options.map((option, index) => {
339
+ return mapOption(option, this.optionLabel, this.optionInfo, '' + index, this.originalOptionsMap);
340
+ });
341
+ this.optionsMap = this._buildOptionsMap(res);
342
+ return res;
343
+ }
344
+ _buildOptionsMap(options) {
345
+ const nodeMap = new Map();
346
+ for (const option of options) {
347
+ nodeMap.set(option.key, option);
348
+ if (option.children) {
349
+ const childNodeMap = this._buildOptionsMap(option.children);
350
+ childNodeMap.forEach((value, key) => nodeMap.set(key, value));
351
+ }
352
+ }
353
+ return nodeMap;
354
+ }
355
+ _treeSelectionToValue(selection) {
356
+ if (!selection)
357
+ return this.multiple ? [] : undefined;
358
+ if (this.multiple) {
359
+ return selection.map((s) => this.originalOptionsMap.get(s.key));
360
+ }
361
+ else {
362
+ return this.originalOptionsMap.get(selection.key);
363
+ }
364
+ }
365
+ _valueToTreeSelection(value) {
366
+ function getKey(v, map) {
367
+ for (const [key, val] of map.entries()) {
368
+ if (isEqual(v, val)) {
369
+ return key;
370
+ }
371
+ }
372
+ return '';
373
+ }
374
+ if (!value)
375
+ return this.multiple ? [] : undefined;
376
+ if (this.multiple) {
377
+ const res = [];
378
+ value.forEach((v) => {
379
+ const key = getKey(v, this.originalOptionsMap);
380
+ if (key)
381
+ res.push(this.optionsMap.get(key));
382
+ });
383
+ return res;
384
+ }
385
+ else {
386
+ const key = getKey(value, this.originalOptionsMap);
387
+ return key ? this.optionsMap.get(key) : undefined;
388
+ }
389
+ }
390
+ // this is a fix of primeng change detection bug when virtual scroller is enabled
391
+ _updateOptions() {
392
+ if (!this.virtualScroll)
393
+ return;
394
+ this.options = [...this.options];
395
+ }
396
+ }
397
+ CpsTreeSelectComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: CpsTreeSelectComponent, deps: [{ token: i1.NgControl, optional: true, self: true }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
398
+ CpsTreeSelectComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: CpsTreeSelectComponent, isStandalone: true, selector: "cps-tree-select", inputs: { label: "label", placeholder: "placeholder", hint: "hint", multiple: "multiple", disabled: "disabled", width: "width", chips: "chips", closableChips: "closableChips", clearable: "clearable", openOnClear: "openOnClear", optionLabel: "optionLabel", optionInfo: "optionInfo", hideDetails: "hideDetails", persistentClear: "persistentClear", prefixIcon: "prefixIcon", prefixIconSize: "prefixIconSize", loading: "loading", virtualScroll: "virtualScroll", options: "options", _value: ["value", "_value"] }, outputs: { valueChanged: "valueChanged" }, providers: [LabelByValuePipe, CombineLabelsPipe], viewQueries: [{ propertyName: "selectContainer", first: true, predicate: ["selectContainer"], descendants: true }, { propertyName: "treeList", first: true, predicate: ["treeList"], descendants: true }], ngImport: i0, template: "<div\n [ngStyle]=\"{ width: cvtWidth }\"\n class=\"cps-treeselect\"\n tabindex=\"0\"\n [ngClass]=\"{ disabled: disabled, error: error }\"\n #selectContainer\n (keydown)=\"onKeyDown($event, selectContainer)\"\n (blur)=\"onBlur()\">\n <label *ngIf=\"label\" class=\"cps-treeselect-label\">{{ label }} </label>\n <div\n class=\"cps-treeselect-container\"\n [class.focused]=\"isOpened\"\n [ngClass]=\"{\n 'persistent-clear': persistentClear\n }\"\n (clickOutside)=\"onClickOutside(selectContainer)\">\n <div class=\"cps-treeselect-box\" (click)=\"onBoxClick(selectContainer)\">\n <div class=\"cps-treeselect-box-left\">\n <cps-icon\n *ngIf=\"prefixIcon\"\n [icon]=\"prefixIcon\"\n [size]=\"prefixIconSize\"\n class=\"prefix-icon\">\n </cps-icon>\n <div\n class=\"cps-treeselect-box-placeholder\"\n *ngIf=\"\n (!treeSelection && !multiple) ||\n (treeSelection?.length < 1 && multiple)\n \">\n {{ placeholder }}\n </div>\n <div\n class=\"cps-treeselect-box-items\"\n *ngIf=\"\n (treeSelection && !multiple) ||\n (treeSelection?.length > 0 && multiple)\n \">\n <span *ngIf=\"!multiple\" class=\"single-item\">\n {{ treeSelection.label }}</span\n >\n <div *ngIf=\"multiple && !chips\" class=\"text-group\">\n <span class=\"text-group-item\">\n {{\n treeSelection | combineLabels : options : '' : 'label' : true\n }}\n </span>\n </div>\n\n <div *ngIf=\"multiple && chips\" class=\"chips-group\">\n <cps-chip\n *ngFor=\"let val of treeSelection\"\n [disabled]=\"disabled\"\n [closable]=\"closableChips\"\n (closed)=\"remove(val)\"\n [label]=\"val.label\">\n </cps-chip>\n </div>\n </div>\n </div>\n <span class=\"cps-treeselect-box-icons\">\n <span\n *ngIf=\"clearable && !disabled\"\n [style.visibility]=\"\n persistentClear ||\n (!persistentClear &&\n ((multiple && treeSelection?.length) ||\n (!multiple && treeSelection)))\n ? 'visible'\n : 'hidden'\n \"\n class=\"cps-treeselect-box-clear-icon\">\n <cps-icon\n icon=\"delete\"\n size=\"small\"\n (click)=\"clear(selectContainer, $event)\"></cps-icon>\n </span>\n <span class=\"cps-treeselect-box-chevron\">\n <cps-icon\n icon=\"chevron-down\"\n size=\"small\"\n color=\"text-dark\"></cps-icon>\n </span>\n </span>\n </div>\n\n <div class=\"cps-treeselect-options\">\n <p-tree\n #treeList\n [virtualScroll]=\"virtualScroll\"\n [virtualScrollItemSize]=\"virtualScrollItemSize\"\n [virtualScrollOptions]=\"{ numToleratedItems: 3 }\"\n [scrollHeight]=\"virtualListHeight + 'px'\"\n (onNodeSelect)=\"onSelectNode()\"\n (onNodeExpand)=\"recalcVirtualListHeight()\"\n (onNodeCollapse)=\"recalcVirtualListHeight()\"\n [value]=\"options\"\n [(selection)]=\"treeSelection\"\n (selectionChange)=\"treeSelectionChanged($event)\"\n [metaKeySelection]=\"multiple ? false : true\"\n [selectionMode]=\"multiple ? 'multiple' : 'single'\">\n <ng-template let-node pTemplate=\"directory\">\n <span class=\"cps-treeselect-directory-elem\">{{ node.label }}</span>\n </ng-template>\n <ng-template let-node pTemplate=\"default\">\n <span class=\"cps-treeselect-option\">\n <span class=\"cps-treeselect-option-left\">\n <span *ngIf=\"multiple\" class=\"cps-treeselect-option-check\">\n </span>\n <span class=\"cps-treeselect-option-label\">{{ node.label }}</span>\n </span>\n <span class=\"cps-treeselect-option-info\">{{ node.info }}</span>\n </span>\n </ng-template>\n </p-tree>\n </div>\n <cps-progress-linear\n *ngIf=\"loading\"\n height=\"3\"\n radius=\"4\"\n opacity=\"0.3\"\n class=\"treeselect-progress-bar\"\n bgColor=\"transparent\">\n </cps-progress-linear>\n </div>\n <div *ngIf=\"!error && !hideDetails\" class=\"cps-treeselect-hint\">\n {{ hint }}\n </div>\n <div *ngIf=\"error && !hideDetails\" class=\"cps-treeselect-error\">\n {{ error }}\n </div>\n</div>\n", styles: [":host{display:flex}:host .cps-treeselect{position:relative;width:100%;outline:none;font-family:Source Sans Pro,sans-serif;display:grid}:host .cps-treeselect-container{position:relative}:host .cps-treeselect-container .treeselect-progress-bar{position:absolute;bottom:1px;padding:0 1px}:host .cps-treeselect.active .cps-treeselect-options{display:block}:host .cps-treeselect.active .cps-treeselect-box{border:1px solid var(--cps-color-calm)}:host .cps-treeselect.active .cps-treeselect-box .cps-treeselect-box-left .prefix-icon{color:var(--cps-color-calm)}:host .cps-treeselect .cps-treeselect-label{display:inline-block;margin-bottom:.2rem;color:var(--cps-color-text-dark);font-size:.875rem}:host .cps-treeselect .persistent-clear .cps-treeselect-box .cps-treeselect-box-icons .cps-treeselect-box-clear-icon cps-icon,:host .cps-treeselect .cps-treeselect-container.focused .cps-treeselect-box .cps-treeselect-box-icons .cps-treeselect-box-clear-icon cps-icon,:host .cps-treeselect .cps-treeselect-container:hover .cps-treeselect-box .cps-treeselect-box-icons .cps-treeselect-box-clear-icon cps-icon{opacity:.5}:host .cps-treeselect .cps-treeselect-box{overflow:hidden;justify-content:space-between;min-height:38px;width:100%;cursor:pointer;background:white;font-size:1rem;outline:none;padding:0 12px;border-radius:4px;align-items:center;display:flex;border:1px solid var(--cps-color-text-lightest);transition-duration:.2s}:host .cps-treeselect .cps-treeselect-box-placeholder{color:var(--cps-color-text-lightest);font-style:italic}:host .cps-treeselect .cps-treeselect-box-items{margin-top:3px;margin-bottom:3px}:host .cps-treeselect .cps-treeselect-box-items .text-group,:host .cps-treeselect .cps-treeselect-box-items .single-item{color:var(--cps-color-text-dark);padding-top:3px;padding-bottom:3px}:host .cps-treeselect .cps-treeselect-box-items .chips-group cps-chip{padding-bottom:3px;padding-top:3px;padding-right:4px}:host .cps-treeselect .cps-treeselect-box-items .text-group-item{line-height:1.5}:host .cps-treeselect .cps-treeselect-box .cps-treeselect-box-left{display:inline-flex;align-items:center}:host .cps-treeselect .cps-treeselect-box .cps-treeselect-box-left .prefix-icon{margin-right:.5rem;color:var(--cps-color-text-dark)}:host .cps-treeselect .cps-treeselect-box:hover{border:1px solid var(--cps-color-calm)}:host .cps-treeselect .cps-treeselect-box:hover .cps-treeselect-box-left .prefix-icon{color:var(--cps-color-calm)}:host .cps-treeselect .cps-treeselect-box .cps-treeselect-box-icons{display:flex}:host .cps-treeselect .cps-treeselect-box .cps-treeselect-box-icons .cps-treeselect-box-clear-icon{display:flex;color:var(--cps-color-calm);margin-left:8px}:host .cps-treeselect .cps-treeselect-box .cps-treeselect-box-icons .cps-treeselect-box-clear-icon cps-icon{opacity:0;transition-duration:.2s}:host .cps-treeselect .cps-treeselect-box .cps-treeselect-box-icons .cps-treeselect-box-clear-icon cps-icon:hover{opacity:1!important}:host .cps-treeselect .cps-treeselect-box .cps-treeselect-box-icons .cps-treeselect-box-chevron{display:flex;margin-left:8px;transition-duration:.2s}:host .cps-treeselect.active .cps-treeselect-box-chevron{top:22px;transform:rotate(180deg)}:host .cps-treeselect .cps-treeselect-options{z-index:1001;position:absolute;width:100%;background:white;box-shadow:0 5px 20px #0000000d;border-radius:4px;overflow-x:hidden;display:none;max-height:242px;overflow-y:auto;box-shadow:0 2px 4px -1px #0003,0 4px 5px #00000024,0 1px 10px #0000001f}:host .cps-treeselect .cps-treeselect-options ::ng-deep .p-tree{border:1px solid #dee2e6;background:#ffffff;color:var(--cps-color-text-dark);padding:0}:host .cps-treeselect .cps-treeselect-options ::ng-deep .cps-treeselect-option{margin-right:8px;display:flex;align-items:center;justify-content:space-between}:host .cps-treeselect .cps-treeselect-options ::ng-deep .cps-treeselect-option-left{display:flex;align-items:center;margin-right:8px}:host .cps-treeselect .cps-treeselect-options ::ng-deep .cps-treeselect-option-check{background-color:transparent;border:0;width:16px;height:16px;cursor:pointer;display:inline-block;vertical-align:middle;box-sizing:border-box;position:relative;flex-shrink:0;transition:border-color 90ms cubic-bezier(0,0,.2,.1),background-color 90ms cubic-bezier(0,0,.2,.1);margin-right:8px;opacity:0}:host .cps-treeselect .cps-treeselect-options ::ng-deep .cps-treeselect-option-check:after{color:var(--cps-color-calm);top:4px;left:1px;width:8px;height:3px;border-left:2px solid currentColor;transform:rotate(-45deg);opacity:1;box-sizing:content-box;position:absolute;content:\"\";border-bottom:2px solid currentColor;transition:opacity 90ms cubic-bezier(0,0,.2,.1)}:host .cps-treeselect .cps-treeselect-options ::ng-deep .cps-treeselect-option-info{margin-left:6px;color:var(--cps-color-text-light)}:host .cps-treeselect .cps-treeselect-options ::ng-deep .p-component{font-family:Source Sans Pro,sans-serif;font-size:14px;font-weight:400}:host .cps-treeselect .cps-treeselect-options ::ng-deep .p-tree-wrapper{overflow:auto}:host .cps-treeselect .cps-treeselect-options ::ng-deep .p-tree-container{margin:0;padding:0;list-style-type:none;overflow:auto}:host .cps-treeselect .cps-treeselect-options ::ng-deep .p-tree .p-tree-container .p-treenode .p-treenode-content{transition:box-shadow .2s;padding:.25rem}:host .cps-treeselect .cps-treeselect-options ::ng-deep .p-treenode-content{display:flex;align-items:center}:host .cps-treeselect .cps-treeselect-options ::ng-deep .p-treenode-content .p-treenode-label{width:100%}:host .cps-treeselect .cps-treeselect-options ::ng-deep .p-tree .p-tree-container .p-treenode .p-treenode-content .p-tree-toggler{margin-right:.5rem;width:2rem;height:2rem;color:var(--cps-color-text-light);border:0 none;background:transparent;border-radius:50%;transition:background-color .2s,color .2s,box-shadow .2s}:host .cps-treeselect .cps-treeselect-options ::ng-deep .p-tree .p-tree-container .p-treenode .p-treenode-content:not(.p-highlight):hover{background:#f8f4f5}:host .cps-treeselect .cps-treeselect-options ::ng-deep .p-tree .p-tree-container .p-treenode .p-treenode-content:focus{outline:0 none;outline-offset:0}:host .cps-treeselect .cps-treeselect-options ::ng-deep .p-tree .p-tree-container .p-treenode .p-treenode-content:not(.p-highlight):focus{background-color:#f8f4f5}:host .cps-treeselect .cps-treeselect-options ::ng-deep .p-tree .p-tree-container .p-treenode .p-treenode-content.p-highlight{background:#efe4e7;color:var(--cps-color-calm);font-weight:600}:host .cps-treeselect .cps-treeselect-options ::ng-deep .p-tree .p-tree-container .p-treenode .p-treenode-content.p-highlight .cps-treeselect-option-check{opacity:1}:host .cps-treeselect .cps-treeselect-options ::ng-deep .p-tree-toggler{outline:0 none;outline-offset:0;cursor:pointer;-webkit-user-select:none;user-select:none;display:inline-flex;align-items:center;justify-content:center;overflow:hidden;position:relative;flex-shrink:0}:host .cps-treeselect .cps-treeselect-options ::ng-deep .p-tree-toggler :hover{color:var(--cps-color-calm)}:host .cps-treeselect .cps-treeselect-options ::ng-deep .cps-tree-node-fully-expandable>.p-treenode-content:hover .p-tree-toggler{color:var(--cps-color-calm)!important}:host .cps-treeselect .cps-treeselect-options ::ng-deep .p-tree .p-treenode-children{padding:0 0 0 1rem}:host .cps-treeselect .cps-treeselect-options ::ng-deep .p-treenode-children{margin:0;padding:0;list-style-type:none}:host .cps-treeselect .cps-treeselect-options ::ng-deep .cps-tree-node-fully-expandable{cursor:pointer;-webkit-user-select:none;user-select:none}:host .cps-treeselect .cps-treeselect-options ::ng-deep .cps-treeselect-directory-elem{font-weight:700;font-size:16px}:host .cps-treeselect .cps-treeselect-hint{color:var(--cps-color-text-mild);font-size:.75rem;min-height:1.125rem;cursor:default;margin-top:.2rem}:host .cps-treeselect .cps-treeselect-error{color:#c33;font-weight:700;font-size:.75rem;min-height:1.125rem;cursor:default;margin-top:.2rem}:host .cps-treeselect.disabled{pointer-events:none}:host .cps-treeselect.disabled .cps-treeselect-box{background:#f7f7f7}:host .cps-treeselect.disabled .cps-treeselect-box-items{color:var(--cps-color-text-light)}:host .cps-treeselect.disabled .cps-treeselect-box-items .text-group,:host .cps-treeselect.disabled .cps-treeselect-box-items .single-item{color:var(--cps-color-text-light)}:host .cps-treeselect.disabled .cps-treeselect-label{color:var(--cps-color-text-mild)}:host .cps-treeselect.error .cps-treeselect-box{border-color:#c33!important;background:#fef3f2!important}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: FormsModule }, { kind: "ngmodule", type: TreeModule }, { kind: "component", type: i3.Tree, selector: "p-tree", inputs: ["value", "selectionMode", "selection", "style", "styleClass", "contextMenu", "layout", "draggableScope", "droppableScope", "draggableNodes", "droppableNodes", "metaKeySelection", "propagateSelectionUp", "propagateSelectionDown", "loading", "loadingIcon", "emptyMessage", "ariaLabel", "togglerAriaLabel", "ariaLabelledBy", "validateDrop", "filter", "filterBy", "filterMode", "filterPlaceholder", "filteredNodes", "filterLocale", "scrollHeight", "lazy", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "indentation", "_templateMap", "trackBy", "virtualNodeHeight"], outputs: ["selectionChange", "onNodeSelect", "onNodeUnselect", "onNodeExpand", "onNodeCollapse", "onNodeContextMenuSelect", "onNodeDrop", "onLazyLoad", "onScroll", "onScrollIndexChange", "onFilter"] }, { kind: "directive", type: i4.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "directive", type: ClickOutsideDirective, selector: "[clickOutside]", inputs: ["skipTargets"], outputs: ["clickOutside"] }, { kind: "component", type: CpsIconComponent, selector: "cps-icon", inputs: ["icon", "size", "color"] }, { kind: "component", type: CpsChipComponent, selector: "cps-chip", inputs: ["label", "icon", "iconPosition", "closable", "disabled"], outputs: ["closed"] }, { kind: "component", type: CpsProgressLinearComponent, selector: "cps-progress-linear", inputs: ["width", "height", "color", "bgColor", "opacity", "radius"] }, { kind: "pipe", type: CombineLabelsPipe, name: "combineLabels" }] });
399
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: CpsTreeSelectComponent, decorators: [{
400
+ type: Component,
401
+ args: [{ standalone: true, imports: [
402
+ CommonModule,
403
+ FormsModule,
404
+ TreeModule,
405
+ ClickOutsideDirective,
406
+ CpsIconComponent,
407
+ CpsChipComponent,
408
+ CpsProgressLinearComponent,
409
+ LabelByValuePipe,
410
+ CombineLabelsPipe
411
+ ], providers: [LabelByValuePipe, CombineLabelsPipe], selector: 'cps-tree-select', template: "<div\n [ngStyle]=\"{ width: cvtWidth }\"\n class=\"cps-treeselect\"\n tabindex=\"0\"\n [ngClass]=\"{ disabled: disabled, error: error }\"\n #selectContainer\n (keydown)=\"onKeyDown($event, selectContainer)\"\n (blur)=\"onBlur()\">\n <label *ngIf=\"label\" class=\"cps-treeselect-label\">{{ label }} </label>\n <div\n class=\"cps-treeselect-container\"\n [class.focused]=\"isOpened\"\n [ngClass]=\"{\n 'persistent-clear': persistentClear\n }\"\n (clickOutside)=\"onClickOutside(selectContainer)\">\n <div class=\"cps-treeselect-box\" (click)=\"onBoxClick(selectContainer)\">\n <div class=\"cps-treeselect-box-left\">\n <cps-icon\n *ngIf=\"prefixIcon\"\n [icon]=\"prefixIcon\"\n [size]=\"prefixIconSize\"\n class=\"prefix-icon\">\n </cps-icon>\n <div\n class=\"cps-treeselect-box-placeholder\"\n *ngIf=\"\n (!treeSelection && !multiple) ||\n (treeSelection?.length < 1 && multiple)\n \">\n {{ placeholder }}\n </div>\n <div\n class=\"cps-treeselect-box-items\"\n *ngIf=\"\n (treeSelection && !multiple) ||\n (treeSelection?.length > 0 && multiple)\n \">\n <span *ngIf=\"!multiple\" class=\"single-item\">\n {{ treeSelection.label }}</span\n >\n <div *ngIf=\"multiple && !chips\" class=\"text-group\">\n <span class=\"text-group-item\">\n {{\n treeSelection | combineLabels : options : '' : 'label' : true\n }}\n </span>\n </div>\n\n <div *ngIf=\"multiple && chips\" class=\"chips-group\">\n <cps-chip\n *ngFor=\"let val of treeSelection\"\n [disabled]=\"disabled\"\n [closable]=\"closableChips\"\n (closed)=\"remove(val)\"\n [label]=\"val.label\">\n </cps-chip>\n </div>\n </div>\n </div>\n <span class=\"cps-treeselect-box-icons\">\n <span\n *ngIf=\"clearable && !disabled\"\n [style.visibility]=\"\n persistentClear ||\n (!persistentClear &&\n ((multiple && treeSelection?.length) ||\n (!multiple && treeSelection)))\n ? 'visible'\n : 'hidden'\n \"\n class=\"cps-treeselect-box-clear-icon\">\n <cps-icon\n icon=\"delete\"\n size=\"small\"\n (click)=\"clear(selectContainer, $event)\"></cps-icon>\n </span>\n <span class=\"cps-treeselect-box-chevron\">\n <cps-icon\n icon=\"chevron-down\"\n size=\"small\"\n color=\"text-dark\"></cps-icon>\n </span>\n </span>\n </div>\n\n <div class=\"cps-treeselect-options\">\n <p-tree\n #treeList\n [virtualScroll]=\"virtualScroll\"\n [virtualScrollItemSize]=\"virtualScrollItemSize\"\n [virtualScrollOptions]=\"{ numToleratedItems: 3 }\"\n [scrollHeight]=\"virtualListHeight + 'px'\"\n (onNodeSelect)=\"onSelectNode()\"\n (onNodeExpand)=\"recalcVirtualListHeight()\"\n (onNodeCollapse)=\"recalcVirtualListHeight()\"\n [value]=\"options\"\n [(selection)]=\"treeSelection\"\n (selectionChange)=\"treeSelectionChanged($event)\"\n [metaKeySelection]=\"multiple ? false : true\"\n [selectionMode]=\"multiple ? 'multiple' : 'single'\">\n <ng-template let-node pTemplate=\"directory\">\n <span class=\"cps-treeselect-directory-elem\">{{ node.label }}</span>\n </ng-template>\n <ng-template let-node pTemplate=\"default\">\n <span class=\"cps-treeselect-option\">\n <span class=\"cps-treeselect-option-left\">\n <span *ngIf=\"multiple\" class=\"cps-treeselect-option-check\">\n </span>\n <span class=\"cps-treeselect-option-label\">{{ node.label }}</span>\n </span>\n <span class=\"cps-treeselect-option-info\">{{ node.info }}</span>\n </span>\n </ng-template>\n </p-tree>\n </div>\n <cps-progress-linear\n *ngIf=\"loading\"\n height=\"3\"\n radius=\"4\"\n opacity=\"0.3\"\n class=\"treeselect-progress-bar\"\n bgColor=\"transparent\">\n </cps-progress-linear>\n </div>\n <div *ngIf=\"!error && !hideDetails\" class=\"cps-treeselect-hint\">\n {{ hint }}\n </div>\n <div *ngIf=\"error && !hideDetails\" class=\"cps-treeselect-error\">\n {{ error }}\n </div>\n</div>\n", styles: [":host{display:flex}:host .cps-treeselect{position:relative;width:100%;outline:none;font-family:Source Sans Pro,sans-serif;display:grid}:host .cps-treeselect-container{position:relative}:host .cps-treeselect-container .treeselect-progress-bar{position:absolute;bottom:1px;padding:0 1px}:host .cps-treeselect.active .cps-treeselect-options{display:block}:host .cps-treeselect.active .cps-treeselect-box{border:1px solid var(--cps-color-calm)}:host .cps-treeselect.active .cps-treeselect-box .cps-treeselect-box-left .prefix-icon{color:var(--cps-color-calm)}:host .cps-treeselect .cps-treeselect-label{display:inline-block;margin-bottom:.2rem;color:var(--cps-color-text-dark);font-size:.875rem}:host .cps-treeselect .persistent-clear .cps-treeselect-box .cps-treeselect-box-icons .cps-treeselect-box-clear-icon cps-icon,:host .cps-treeselect .cps-treeselect-container.focused .cps-treeselect-box .cps-treeselect-box-icons .cps-treeselect-box-clear-icon cps-icon,:host .cps-treeselect .cps-treeselect-container:hover .cps-treeselect-box .cps-treeselect-box-icons .cps-treeselect-box-clear-icon cps-icon{opacity:.5}:host .cps-treeselect .cps-treeselect-box{overflow:hidden;justify-content:space-between;min-height:38px;width:100%;cursor:pointer;background:white;font-size:1rem;outline:none;padding:0 12px;border-radius:4px;align-items:center;display:flex;border:1px solid var(--cps-color-text-lightest);transition-duration:.2s}:host .cps-treeselect .cps-treeselect-box-placeholder{color:var(--cps-color-text-lightest);font-style:italic}:host .cps-treeselect .cps-treeselect-box-items{margin-top:3px;margin-bottom:3px}:host .cps-treeselect .cps-treeselect-box-items .text-group,:host .cps-treeselect .cps-treeselect-box-items .single-item{color:var(--cps-color-text-dark);padding-top:3px;padding-bottom:3px}:host .cps-treeselect .cps-treeselect-box-items .chips-group cps-chip{padding-bottom:3px;padding-top:3px;padding-right:4px}:host .cps-treeselect .cps-treeselect-box-items .text-group-item{line-height:1.5}:host .cps-treeselect .cps-treeselect-box .cps-treeselect-box-left{display:inline-flex;align-items:center}:host .cps-treeselect .cps-treeselect-box .cps-treeselect-box-left .prefix-icon{margin-right:.5rem;color:var(--cps-color-text-dark)}:host .cps-treeselect .cps-treeselect-box:hover{border:1px solid var(--cps-color-calm)}:host .cps-treeselect .cps-treeselect-box:hover .cps-treeselect-box-left .prefix-icon{color:var(--cps-color-calm)}:host .cps-treeselect .cps-treeselect-box .cps-treeselect-box-icons{display:flex}:host .cps-treeselect .cps-treeselect-box .cps-treeselect-box-icons .cps-treeselect-box-clear-icon{display:flex;color:var(--cps-color-calm);margin-left:8px}:host .cps-treeselect .cps-treeselect-box .cps-treeselect-box-icons .cps-treeselect-box-clear-icon cps-icon{opacity:0;transition-duration:.2s}:host .cps-treeselect .cps-treeselect-box .cps-treeselect-box-icons .cps-treeselect-box-clear-icon cps-icon:hover{opacity:1!important}:host .cps-treeselect .cps-treeselect-box .cps-treeselect-box-icons .cps-treeselect-box-chevron{display:flex;margin-left:8px;transition-duration:.2s}:host .cps-treeselect.active .cps-treeselect-box-chevron{top:22px;transform:rotate(180deg)}:host .cps-treeselect .cps-treeselect-options{z-index:1001;position:absolute;width:100%;background:white;box-shadow:0 5px 20px #0000000d;border-radius:4px;overflow-x:hidden;display:none;max-height:242px;overflow-y:auto;box-shadow:0 2px 4px -1px #0003,0 4px 5px #00000024,0 1px 10px #0000001f}:host .cps-treeselect .cps-treeselect-options ::ng-deep .p-tree{border:1px solid #dee2e6;background:#ffffff;color:var(--cps-color-text-dark);padding:0}:host .cps-treeselect .cps-treeselect-options ::ng-deep .cps-treeselect-option{margin-right:8px;display:flex;align-items:center;justify-content:space-between}:host .cps-treeselect .cps-treeselect-options ::ng-deep .cps-treeselect-option-left{display:flex;align-items:center;margin-right:8px}:host .cps-treeselect .cps-treeselect-options ::ng-deep .cps-treeselect-option-check{background-color:transparent;border:0;width:16px;height:16px;cursor:pointer;display:inline-block;vertical-align:middle;box-sizing:border-box;position:relative;flex-shrink:0;transition:border-color 90ms cubic-bezier(0,0,.2,.1),background-color 90ms cubic-bezier(0,0,.2,.1);margin-right:8px;opacity:0}:host .cps-treeselect .cps-treeselect-options ::ng-deep .cps-treeselect-option-check:after{color:var(--cps-color-calm);top:4px;left:1px;width:8px;height:3px;border-left:2px solid currentColor;transform:rotate(-45deg);opacity:1;box-sizing:content-box;position:absolute;content:\"\";border-bottom:2px solid currentColor;transition:opacity 90ms cubic-bezier(0,0,.2,.1)}:host .cps-treeselect .cps-treeselect-options ::ng-deep .cps-treeselect-option-info{margin-left:6px;color:var(--cps-color-text-light)}:host .cps-treeselect .cps-treeselect-options ::ng-deep .p-component{font-family:Source Sans Pro,sans-serif;font-size:14px;font-weight:400}:host .cps-treeselect .cps-treeselect-options ::ng-deep .p-tree-wrapper{overflow:auto}:host .cps-treeselect .cps-treeselect-options ::ng-deep .p-tree-container{margin:0;padding:0;list-style-type:none;overflow:auto}:host .cps-treeselect .cps-treeselect-options ::ng-deep .p-tree .p-tree-container .p-treenode .p-treenode-content{transition:box-shadow .2s;padding:.25rem}:host .cps-treeselect .cps-treeselect-options ::ng-deep .p-treenode-content{display:flex;align-items:center}:host .cps-treeselect .cps-treeselect-options ::ng-deep .p-treenode-content .p-treenode-label{width:100%}:host .cps-treeselect .cps-treeselect-options ::ng-deep .p-tree .p-tree-container .p-treenode .p-treenode-content .p-tree-toggler{margin-right:.5rem;width:2rem;height:2rem;color:var(--cps-color-text-light);border:0 none;background:transparent;border-radius:50%;transition:background-color .2s,color .2s,box-shadow .2s}:host .cps-treeselect .cps-treeselect-options ::ng-deep .p-tree .p-tree-container .p-treenode .p-treenode-content:not(.p-highlight):hover{background:#f8f4f5}:host .cps-treeselect .cps-treeselect-options ::ng-deep .p-tree .p-tree-container .p-treenode .p-treenode-content:focus{outline:0 none;outline-offset:0}:host .cps-treeselect .cps-treeselect-options ::ng-deep .p-tree .p-tree-container .p-treenode .p-treenode-content:not(.p-highlight):focus{background-color:#f8f4f5}:host .cps-treeselect .cps-treeselect-options ::ng-deep .p-tree .p-tree-container .p-treenode .p-treenode-content.p-highlight{background:#efe4e7;color:var(--cps-color-calm);font-weight:600}:host .cps-treeselect .cps-treeselect-options ::ng-deep .p-tree .p-tree-container .p-treenode .p-treenode-content.p-highlight .cps-treeselect-option-check{opacity:1}:host .cps-treeselect .cps-treeselect-options ::ng-deep .p-tree-toggler{outline:0 none;outline-offset:0;cursor:pointer;-webkit-user-select:none;user-select:none;display:inline-flex;align-items:center;justify-content:center;overflow:hidden;position:relative;flex-shrink:0}:host .cps-treeselect .cps-treeselect-options ::ng-deep .p-tree-toggler :hover{color:var(--cps-color-calm)}:host .cps-treeselect .cps-treeselect-options ::ng-deep .cps-tree-node-fully-expandable>.p-treenode-content:hover .p-tree-toggler{color:var(--cps-color-calm)!important}:host .cps-treeselect .cps-treeselect-options ::ng-deep .p-tree .p-treenode-children{padding:0 0 0 1rem}:host .cps-treeselect .cps-treeselect-options ::ng-deep .p-treenode-children{margin:0;padding:0;list-style-type:none}:host .cps-treeselect .cps-treeselect-options ::ng-deep .cps-tree-node-fully-expandable{cursor:pointer;-webkit-user-select:none;user-select:none}:host .cps-treeselect .cps-treeselect-options ::ng-deep .cps-treeselect-directory-elem{font-weight:700;font-size:16px}:host .cps-treeselect .cps-treeselect-hint{color:var(--cps-color-text-mild);font-size:.75rem;min-height:1.125rem;cursor:default;margin-top:.2rem}:host .cps-treeselect .cps-treeselect-error{color:#c33;font-weight:700;font-size:.75rem;min-height:1.125rem;cursor:default;margin-top:.2rem}:host .cps-treeselect.disabled{pointer-events:none}:host .cps-treeselect.disabled .cps-treeselect-box{background:#f7f7f7}:host .cps-treeselect.disabled .cps-treeselect-box-items{color:var(--cps-color-text-light)}:host .cps-treeselect.disabled .cps-treeselect-box-items .text-group,:host .cps-treeselect.disabled .cps-treeselect-box-items .single-item{color:var(--cps-color-text-light)}:host .cps-treeselect.disabled .cps-treeselect-label{color:var(--cps-color-text-mild)}:host .cps-treeselect.error .cps-treeselect-box{border-color:#c33!important;background:#fef3f2!important}\n"] }]
412
+ }], ctorParameters: function () { return [{ type: i1.NgControl, decorators: [{
413
+ type: Self
414
+ }, {
415
+ type: Optional
416
+ }] }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { label: [{
417
+ type: Input
418
+ }], placeholder: [{
419
+ type: Input
420
+ }], hint: [{
421
+ type: Input
422
+ }], multiple: [{
423
+ type: Input
424
+ }], disabled: [{
425
+ type: Input
426
+ }], width: [{
427
+ type: Input
428
+ }], chips: [{
429
+ type: Input
430
+ }], closableChips: [{
431
+ type: Input
432
+ }], clearable: [{
433
+ type: Input
434
+ }], openOnClear: [{
435
+ type: Input
436
+ }], optionLabel: [{
437
+ type: Input
438
+ }], optionInfo: [{
439
+ type: Input
440
+ }], hideDetails: [{
441
+ type: Input
442
+ }], persistentClear: [{
443
+ type: Input
444
+ }], prefixIcon: [{
445
+ type: Input
446
+ }], prefixIconSize: [{
447
+ type: Input
448
+ }], loading: [{
449
+ type: Input
450
+ }], virtualScroll: [{
451
+ type: Input
452
+ }], options: [{
453
+ type: Input
454
+ }], _value: [{
455
+ type: Input,
456
+ args: ['value']
457
+ }], valueChanged: [{
458
+ type: Output
459
+ }], selectContainer: [{
460
+ type: ViewChild,
461
+ args: ['selectContainer']
462
+ }], treeList: [{
463
+ type: ViewChild,
464
+ args: ['treeList']
465
+ }] } });
466
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3BzLXRyZWUtc2VsZWN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Nwcy11aS1raXQvc3JjL2xpYi9jb21wb25lbnRzL2Nwcy10cmVlLXNlbGVjdC9jcHMtdHJlZS1zZWxlY3QuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY3BzLXVpLWtpdC9zcmMvbGliL2NvbXBvbmVudHMvY3BzLXRyZWUtc2VsZWN0L2Nwcy10cmVlLXNlbGVjdC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUdMLFNBQVMsRUFFVCxZQUFZLEVBQ1osS0FBSyxFQUdMLFFBQVEsRUFDUixNQUFNLEVBQ04sSUFBSSxFQUNKLFNBQVMsRUFDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQXdCLFdBQVcsRUFBYSxNQUFNLGdCQUFnQixDQUFDO0FBQzlFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDcEMsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3JELE9BQU8sRUFBRSxnQkFBZ0IsRUFBZ0IsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNoRixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNsRSxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxzREFBc0QsQ0FBQztBQUNsRyxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUNqRixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNuRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNwRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ3BD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QkFBaEIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csYUFBYTtzQkFBckIsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csZUFBZTtzQkFBdkIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBRU8sT0FBTztzQkFBbkIsS0FBSztnQkFhVSxNQUFNO3NCQUFyQixLQUFLO3VCQUFDLE9BQU87Z0JBV0osWUFBWTtzQkFBckIsTUFBTTtnQkFHUCxlQUFlO3NCQURkLFNBQVM7dUJBQUMsaUJBQWlCO2dCQUdMLFFBQVE7c0JBQTlCLFNBQVM7dUJBQUMsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICBBZnRlclZpZXdJbml0LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIElucHV0LFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgT3B0aW9uYWwsXG4gIE91dHB1dCxcbiAgU2VsZixcbiAgVmlld0NoaWxkXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIEZvcm1zTW9kdWxlLCBOZ0NvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGNvbnZlcnRTaXplIH0gZnJvbSAnLi4vLi4vdXRpbHMvc2l6ZS11dGlscyc7XG5pbXBvcnQgeyBDcHNJY29uQ29tcG9uZW50LCBpY29uU2l6ZVR5cGUgfSBmcm9tICcuLi9jcHMtaWNvbi9jcHMtaWNvbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ3BzQ2hpcENvbXBvbmVudCB9IGZyb20gJy4uL2Nwcy1jaGlwL2Nwcy1jaGlwLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDcHNQcm9ncmVzc0xpbmVhckNvbXBvbmVudCB9IGZyb20gJy4uL2Nwcy1wcm9ncmVzcy1saW5lYXIvY3BzLXByb2dyZXNzLWxpbmVhci5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ2xpY2tPdXRzaWRlRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlcy9jbGljay1vdXRzaWRlLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBMYWJlbEJ5VmFsdWVQaXBlIH0gZnJvbSAnLi4vLi4vcGlwZXMvbGFiZWwtYnktdmFsdWUucGlwZSc7XG5pbXBvcnQgeyBDb21iaW5lTGFiZWxzUGlwZSB9IGZyb20gJy4uLy4uL3BpcGVzL2NvbWJpbmUtbGFiZWxzLnBpcGUnO1xuaW1wb3J0IHsgaXNFcXVhbCB9IGZyb20gJ2xvZGFzaC1lcyc7XG5pbXBvcnQgeyBUcmVlLCBUcmVlTW9kdWxlIH0gZnJvbSAncHJpbWVuZy90cmVlJztcbmltcG9ydCB7IFRyZWVOb2RlIH0gZnJvbSAncHJpbWVuZy9hcGknO1xuXG5AQ29tcG9uZW50KHtcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1xuICAgIENvbW1vbk1vZHVsZSxcbiAgICBGb3Jtc01vZHVsZSxcbiAgICBUcmVlTW9kdWxlLFxuICAgIENsaWNrT3V0c2lkZURpcmVjdGl2ZSxcbiAgICBDcHNJY29uQ29tcG9uZW50LFxuICAgIENwc0NoaXBDb21wb25lbnQsXG4gICAgQ3BzUHJvZ3Jlc3NMaW5lYXJDb21wb25lbnQsXG4gICAgTGFiZWxCeVZhbHVlUGlwZSxcbiAgICBDb21iaW5lTGFiZWxzUGlwZVxuICBdLFxuICBwcm92aWRlcnM6IFtMYWJlbEJ5VmFsdWVQaXBlLCBDb21iaW5lTGFiZWxzUGlwZV0sXG4gIHNlbGVjdG9yOiAnY3BzLXRyZWUtc2VsZWN0JyxcbiAgdGVtcGxhdGVVcmw6ICcuL2Nwcy10cmVlLXNlbGVjdC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2Nwcy10cmVlLXNlbGVjdC5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIENwc1RyZWVTZWxlY3RDb21wb25lbnRcbiAgaW1wbGVtZW50cyBDb250cm9sVmFsdWVBY2Nlc3NvciwgT25Jbml0LCBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3lcbntcbiAgQElucHV0KCkgbGFiZWwgPSAnJztcbiAgQElucHV0KCkgcGxhY2Vob2xkZXIgPSAnUGxlYXNlIHNlbGVjdCc7XG4gIEBJbnB1dCgpIGhpbnQgPSAnJztcbiAgQElucHV0KCkgbXVsdGlwbGUgPSBmYWxzZTtcbiAgQElucHV0KCkgZGlzYWJsZWQgPSBmYWxzZTtcbiAgQElucHV0KCkgd2lkdGg6IG51bWJlciB8IHN0cmluZyA9ICcxMDAlJztcbiAgQElucHV0KCkgY2hpcHMgPSB0cnVlO1xuICBASW5wdXQoKSBjbG9zYWJsZUNoaXBzID0gdHJ1ZTtcbiAgQElucHV0KCkgY2xlYXJhYmxlID0gZmFsc2U7XG4gIEBJbnB1dCgpIG9wZW5PbkNsZWFyID0gdHJ1ZTtcbiAgQElucHV0KCkgb3B0aW9uTGFiZWwgPSAnbGFiZWwnO1xuICBASW5wdXQoKSBvcHRpb25JbmZvID0gJ2luZm8nO1xuICBASW5wdXQoKSBoaWRlRGV0YWlscyA9IGZhbHNlO1xuICBASW5wdXQoKSBwZXJzaXN0ZW50Q2xlYXIgPSBmYWxzZTtcbiAgQElucHV0KCkgcHJlZml4SWNvbiA9ICcnO1xuICBASW5wdXQoKSBwcmVmaXhJY29uU2l6ZTogaWNvblNpemVUeXBlID0gJzE4cHgnO1xuICBASW5wdXQoKSBsb2FkaW5nID0gZmFsc2U7XG4gIEBJbnB1dCgpIHZpcnR1YWxTY3JvbGwgPSBmYWxzZTtcblxuICBASW5wdXQoKSBzZXQgb3B0aW9ucyhvcHRpb25zOiBhbnlbXSkge1xuICAgIGlmIChvcHRpb25zPy5zb21lKChvKSA9PiBvLmlubmVyKSkge1xuICAgICAgdGhpcy5fb3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fb3B0aW9ucyA9IHRoaXMuX3RvSW5uZXJPcHRpb25zKG9wdGlvbnMpO1xuICB9XG5cbiAgZ2V0IG9wdGlvbnMoKTogVHJlZU5vZGVbXSB7XG4gICAgcmV0dXJuIHRoaXMuX29wdGlvbnM7XG4gIH1cblxuICBASW5wdXQoJ3ZhbHVlJykgX3ZhbHVlOiBhbnkgPSB1bmRlZmluZWQ7XG5cbiAgc2V0IHZhbHVlKHZhbHVlOiBhbnkpIHtcbiAgICB0aGlzLl92YWx1ZSA9IHZhbHVlO1xuICAgIHRoaXMub25DaGFuZ2UodmFsdWUpO1xuICB9XG5cbiAgZ2V0IHZhbHVlKCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMuX3ZhbHVlO1xuICB9XG5cbiAgQE91dHB1dCgpIHZhbHVlQ2hhbmdlZCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gIEBWaWV3Q2hpbGQoJ3NlbGVjdENvbnRhaW5lcicpXG4gIHNlbGVjdENvbnRhaW5lciE6IEVsZW1lbnRSZWY7XG5cbiAgQFZpZXdDaGlsZCgndHJlZUxpc3QnKSB0cmVlTGlzdCE6IFRyZWU7XG5cbiAgcHJpdmF0ZSBfc3RhdHVzQ2hhbmdlc1N1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuXG4gIF9vcHRpb25zOiBUcmVlTm9kZVtdID0gW107XG4gIG9wdGlvbnNNYXAgPSBuZXcgTWFwPHN0cmluZywgVHJlZU5vZGU+KCk7XG4gIG9yaWdpbmFsT3B0aW9uc01hcCA9IG5ldyBNYXA8c3RyaW5nLCBhbnk+KCk7XG5cbiAgdHJlZVNlbGVjdGlvbjogYW55O1xuXG4gIHZpcnR1YWxMaXN0SGVpZ2h0ID0gMjQwO1xuICB2aXJ0dWFsU2Nyb2xsSXRlbVNpemUgPSA0MDtcblxuICBlcnJvciA9ICcnO1xuICBjdnRXaWR0aCA9ICcnO1xuICBpc09wZW5lZCA9IGZhbHNlO1xuICB0cmVlQ29udGFpbmVyRWxlbWVudCE6IEhUTUxFbGVtZW50O1xuICBvcHRpb25Gb2N1c2VkID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgQFNlbGYoKSBAT3B0aW9uYWwoKSBwcml2YXRlIF9jb250cm9sOiBOZ0NvbnRyb2wsXG4gICAgcHJpdmF0ZSBjZFJlZjogQ2hhbmdlRGV0ZWN0b3JSZWZcbiAgKSB7XG4gICAgaWYgKHRoaXMuX2NvbnRyb2wpIHtcbiAgICAgIHRoaXMuX2NvbnRyb2wudmFsdWVBY2Nlc3NvciA9IHRoaXM7XG4gICAgfVxuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5jdnRXaWR0aCA9IGNvbnZlcnRTaXplKHRoaXMud2lkdGgpO1xuICAgIGlmICghdGhpcy5fdmFsdWUpIHtcbiAgICAgIGlmICh0aGlzLm11bHRpcGxlKSB7XG4gICAgICAgIHRoaXMuX3ZhbHVlID0gW107XG4gICAgICAgIHRoaXMudHJlZVNlbGVjdGlvbiA9IFtdO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnRyZWVTZWxlY3Rpb24gPSB0aGlzLl92YWx1ZVRvVHJlZVNlbGVjdGlvbih0aGlzLnZhbHVlKTtcbiAgICB9XG5cbiAgICB0aGlzLl9zdGF0dXNDaGFuZ2VzU3Vic2NyaXB0aW9uID0gdGhpcy5fY29udHJvbD8uc3RhdHVzQ2hhbmdlcz8uc3Vic2NyaWJlKFxuICAgICAgKCkgPT4ge1xuICAgICAgICB0aGlzLl9jaGVja0Vycm9ycygpO1xuICAgICAgfVxuICAgICkgYXMgU3Vic2NyaXB0aW9uO1xuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgIHRoaXMuX2luaXRDb250YWluZXJDbGlja0xpc3RlbmVyKCk7XG4gICAgdGhpcy5yZWNhbGNWaXJ0dWFsTGlzdEhlaWdodCgpO1xuICAgIHRoaXMuY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5fc3RhdHVzQ2hhbmdlc1N1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgICBpZiAodGhpcy50cmVlQ29udGFpbmVyRWxlbWVudClcbiAgICAgIHRoaXMudHJlZUNvbnRhaW5lckVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcbiAgICAgICAgJ2NsaWNrJyxcbiAgICAgICAgdGhpcy5faGFuZGxlT25Db250YWluZXJDbGljay5iaW5kKHRoaXMpXG4gICAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBfaW5pdENvbnRhaW5lckNsaWNrTGlzdGVuZXIoKSB7XG4gICAgdGhpcy50cmVlQ29udGFpbmVyRWxlbWVudCA9XG4gICAgICB0aGlzLnRyZWVMaXN0Py5lbD8ubmF0aXZlRWxlbWVudD8ucXVlcnlTZWxlY3RvcignLnAtdHJlZS1jb250YWluZXInKTtcbiAgICBpZiAodGhpcy50cmVlQ29udGFpbmVyRWxlbWVudCkge1xuICAgICAgdGhpcy50cmVlQ29udGFpbmVyRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKFxuICAgICAgICAnY2xpY2snLFxuICAgICAgICB0aGlzLl9oYW5kbGVPbkNvbnRhaW5lckNsaWNrLmJpbmQodGhpcylcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfaGFuZGxlT25Db250YWluZXJDbGljayhldmVudDogYW55KSB7XG4gICAgZnVuY3Rpb24gZ2V0UGFyZW50V2l0aENsYXNzKFxuICAgICAgZWxlbWVudDogSFRNTEVsZW1lbnQgfCBudWxsLFxuICAgICAgY2xhc3NOYW1lOiBzdHJpbmdcbiAgICApIHtcbiAgICAgIGxldCBjdXJyZW50RWxlbWVudCA9IGVsZW1lbnQ7XG4gICAgICB3aGlsZSAoY3VycmVudEVsZW1lbnQpIHtcbiAgICAgICAgaWYgKGN1cnJlbnRFbGVtZW50LmNsYXNzTGlzdC5jb250YWlucyhjbGFzc05hbWUpKSB7XG4gICAgICAgICAgcmV0dXJuIGN1cnJlbnRFbGVtZW50O1xuICAgICAgICB9XG4gICAgICAgIGN1cnJlbnRFbGVtZW50ID0gY3VycmVudEVsZW1lbnQucGFyZW50RWxlbWVudDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHRoaXMub3B0aW9uRm9jdXNlZCA9IHRydWU7XG5cbiAgICBjb25zdCBwYXJlbnQgPSBldmVudC50YXJnZXQuY2xhc3NMaXN0LmNvbnRhaW5zKCdwLXRyZWVub2RlLWNvbnRlbnQnKVxuICAgICAgPyBldmVudC50YXJnZXRcbiAgICAgIDogZ2V0UGFyZW50V2l0aENsYXNzKGV2ZW50LnRhcmdldCwgJ3AtdHJlZW5vZGUtY29udGVudCcpO1xuXG4gICAgaWYgKFxuICAgICAgcGFyZW50Py5wYXJlbnRFbGVtZW50Py5jbGFzc0xpc3Q/LmNvbnRhaW5zKFxuICAgICAgICAnY3BzLXRyZWUtbm9kZS1mdWxseS1leHBhbmRhYmxlJ1xuICAgICAgKVxuICAgICkge1xuICAgICAgdGhpcy5vbkNsaWNrRnVsbHlFeHBhbmRhYmxlKGV2ZW50LCBwYXJlbnQucGFyZW50RWxlbWVudCk7XG4gICAgfVxuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1lbXB0eS1mdW5jdGlvblxuICBvbkNoYW5nZSA9ICh2YWx1ZTogYW55KSA9PiB7fTtcblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWVtcHR5LWZ1bmN0aW9uXG4gIG9uVG91Y2hlZCA9ICgpID0+IHt9O1xuXG4gIHJlZ2lzdGVyT25DaGFuZ2UoZm46IGFueSkge1xuICAgIHRoaXMub25DaGFuZ2UgPSBmbjtcbiAgfVxuXG4gIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpIHtcbiAgICB0aGlzLm9uVG91Y2hlZCA9IGZuO1xuICB9XG5cbiAgd3JpdGVWYWx1ZSh2YWx1ZTogYW55KSB7XG4gICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVWYWx1ZSh2YWx1ZTogYW55KTogdm9pZCB7XG4gICAgdGhpcy53cml0ZVZhbHVlKHZhbHVlKTtcbiAgICB0aGlzLm9uQ2hhbmdlKHZhbHVlKTtcbiAgICB0aGlzLnZhbHVlQ2hhbmdlZC5lbWl0KHZhbHVlKTtcbiAgfVxuXG4gIG9uU2VsZWN0Tm9kZSgpIHtcbiAgICBpZiAoIXRoaXMubXVsdGlwbGUpIHtcbiAgICAgIHRoaXMuX3RvZ2dsZU9wdGlvbnModGhpcy5zZWxlY3RDb250YWluZXI/Lm5hdGl2ZUVsZW1lbnQsIGZhbHNlKTtcbiAgICB9XG4gIH1cblxuICBvbkNsaWNrT3V0c2lkZShkZDogSFRNTEVsZW1lbnQpIHtcbiAgICB0aGlzLl90b2dnbGVPcHRpb25zKGRkLCBmYWxzZSk7XG4gIH1cblxuICBvbkJveENsaWNrKGRkOiBIVE1MRWxlbWVudCkge1xuICAgIHRoaXMuX3RvZ2dsZU9wdGlvbnMoZGQpO1xuICB9XG5cbiAgb25LZXlEb3duKGV2ZW50OiBhbnksIGRkOiBIVE1MRWxlbWVudCkge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgY29uc3QgY29kZSA9IGV2ZW50LmtleUNvZGU7XG4gICAgLy8gZXNjYXBlXG4gICAgaWYgKGNvZGUgPT09IDI3KSB7XG4gICAgICB0aGlzLl90b2dnbGVPcHRpb25zKGRkLCBmYWxzZSk7XG4gICAgfVxuICAgIC8vIGNsaWNrIGRvd24gYXJyb3dcbiAgICBlbHNlIGlmIChbNDBdLmluY2x1ZGVzKGNvZGUpKSB7XG4gICAgICB0aGlzLl9pbml0QXJyb3dzTmF2aWdhdG9uKCk7XG4gICAgfVxuICB9XG5cbiAgb25DbGlja0Z1bGx5RXhwYW5kYWJsZShldmVudDogYW55LCBlbGVtOiBIVE1MRWxlbWVudCkge1xuICAgIGNvbnN0IGtleSA9IHRoaXMuX2dldEhUTUxFbGVtZW50S2V5KGVsZW0pO1xuICAgIGlmICgha2V5KSByZXR1cm47XG5cbiAgICBjb25zdCB0cmVlTm9kZSA9IHRoaXMub3B0aW9ucy5maW5kKChvKSA9PiBvLmtleSA9PT0ga2V5KTtcbiAgICBpZiAoIXRyZWVOb2RlKSByZXR1cm47XG5cbiAgICB0cmVlTm9kZS5leHBhbmRlZCA9ICF0cmVlTm9kZS5leHBhbmRlZDtcbiAgICB0aGlzLl91cGRhdGVPcHRpb25zKCk7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLnJlY2FsY1ZpcnR1YWxMaXN0SGVpZ2h0KCk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIF9nZXRIVE1MRWxlbWVudEtleShlbGVtOiBhbnkpOiBzdHJpbmcge1xuICAgIGlmICghZWxlbT8uY2xhc3NMaXN0KSByZXR1cm4gJyc7XG4gICAgY29uc3QgY2xhc3NMaXN0ID0gWy4uLmVsZW0uY2xhc3NMaXN0XTtcbiAgICBjb25zdCBrZXkgPSBjbGFzc0xpc3QuZmluZCgoY2xhc3NOYW1lOiBzdHJpbmcpID0+IHtcbiAgICAgIHJldHVybiBjbGFzc05hbWUuc3RhcnRzV2l0aCgna2V5LScpO1xuICAgIH0pO1xuICAgIGlmICgha2V5KSByZXR1cm4gJyc7XG4gICAgcmV0dXJuIGtleS5yZXBsYWNlKCdrZXktJywgJycpO1xuICB9XG5cbiAgdHJlZVNlbGVjdGlvbkNoYW5nZWQoc2VsZWN0aW9uOiBhbnkpIHtcbiAgICB0aGlzLnVwZGF0ZVZhbHVlKHRoaXMuX3RyZWVTZWxlY3Rpb25Ub1ZhbHVlKHNlbGVjdGlvbikpO1xuICB9XG5cbiAgcmVjYWxjVmlydHVhbExpc3RIZWlnaHQoKSB7XG4gICAgaWYgKCF0aGlzLnZpcnR1YWxTY3JvbGwpIHJldHVybjtcbiAgICBjb25zdCBjdXJyZW50TGVuID0gdGhpcy50cmVlTGlzdD8uc2VyaWFsaXplZFZhbHVlPy5sZW5ndGggfHwgMDtcbiAgICB0aGlzLnZpcnR1YWxMaXN0SGVpZ2h0ID0gTWF0aC5taW4oXG4gICAgICB0aGlzLnZpcnR1YWxTY3JvbGxJdGVtU2l6ZSAqIGN1cnJlbnRMZW4sXG4gICAgICAyNDBcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBfdG9nZ2xlT3B0aW9ucyhkZDogSFRNTEVsZW1lbnQsIHNob3c/OiBib29sZWFuKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZGlzYWJsZWQgfHwgIWRkKSByZXR1cm47XG4gICAgaWYgKHR5cGVvZiBzaG93ID09PSAnYm9vbGVhbicpIHtcbiAgICAgIGlmIChzaG93KSBkZC5jbGFzc0xpc3QuYWRkKCdhY3RpdmUnKTtcbiAgICAgIGVsc2UgZGQuY2xhc3NMaXN0LnJlbW92ZSgnYWN0aXZlJyk7XG4gICAgfSBlbHNlIGRkLmNsYXNzTGlzdC50b2dnbGUoJ2FjdGl2ZScpO1xuXG4gICAgdGhpcy5pc09wZW5lZCA9IGRkLmNsYXNzTGlzdC5jb250YWlucygnYWN0aXZlJyk7XG4gICAgdGhpcy5vcHRpb25Gb2N1c2VkID0gZmFsc2U7XG5cbiAgICBpZiAodGhpcy5pc09wZW5lZCAmJiB0aGlzLnRyZWVTZWxlY3Rpb24pIHtcbiAgICAgIHRoaXMuX2V4cGFuZFRvTm9kZXMoXG4gICAgICAgIHRoaXMubXVsdGlwbGUgPyB0aGlzLnRyZWVTZWxlY3Rpb24gOiBbdGhpcy50cmVlU2VsZWN0aW9uXVxuICAgICAgKTtcbiAgICAgIHRoaXMuX3VwZGF0ZU9wdGlvbnMoKTtcblxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMucmVjYWxjVmlydHVhbExpc3RIZWlnaHQoKTtcblxuICAgICAgICBjb25zdCBzZWxlY3RlZCA9XG4gICAgICAgICAgdGhpcy5zZWxlY3RDb250YWluZXIubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCcucC1oaWdobGlnaHQnKTtcbiAgICAgICAgaWYgKHNlbGVjdGVkKSB7XG4gICAgICAgICAgc2VsZWN0ZWQuc2Nyb2xsSW50b1ZpZXcoe1xuICAgICAgICAgICAgYmVoYXZpb3I6ICdpbnN0YW50JyxcbiAgICAgICAgICAgIGJsb2NrOiAnbmVhcmVzdCcsXG4gICAgICAgICAgICBpbmxpbmU6ICdjZW50ZXInXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy52aXJ0dWFsU2Nyb2xsICYmIHRoaXMudHJlZVNlbGVjdGlvbikge1xuICAgICAgICAgIGxldCBrZXkgPSAnJztcbiAgICAgICAgICBpZiAodGhpcy5tdWx0aXBsZSkge1xuICAgICAgICAgICAgaWYgKHRoaXMudHJlZVNlbGVjdGlvbi5sZW5ndGggPiAwKSBrZXkgPSB0aGlzLnRyZWVTZWxlY3Rpb25bMF0ua2V5O1xuICAgICAgICAgIH0gZWxzZSBrZXkgPSB0aGlzLnRyZWVTZWxlY3Rpb24ua2V5O1xuICAgICAgICAgIGlmIChrZXkpIHtcbiAgICAgICAgICAgIGNvbnN0IGlkeCA9XG4gICAgICAgICAgICAgIHRoaXMudHJlZUxpc3Q/LnNlcmlhbGl6ZWRWYWx1ZT8uZmluZEluZGV4KFxuICAgICAgICAgICAgICAgICh2KSA9PiB2Lm5vZGUua2V5ID09PSBrZXlcbiAgICAgICAgICAgICAgKSB8fCAtMTtcbiAgICAgICAgICAgIGlmIChpZHggPj0gMCkgdGhpcy50cmVlTGlzdC5zY3JvbGxUb1ZpcnR1YWxJbmRleChpZHgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcmVtb3ZlKG9wdGlvbjogVHJlZU5vZGUpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMubXVsdGlwbGUpIHJldHVybjtcblxuICAgIHRoaXMudHJlZVNlbGVjdGlvbiA9IHRoaXMudHJlZVNlbGVjdGlvbi5maWx0ZXIoXG4gICAgICAodjogVHJlZU5vZGUpID0+ICFpc0VxdWFsKHYsIG9wdGlvbilcbiAgICApO1xuICAgIHRoaXMudXBkYXRlVmFsdWUodGhpcy5fdHJlZVNlbGVjdGlvblRvVmFsdWUodGhpcy50cmVlU2VsZWN0aW9uKSk7XG4gIH1cblxuICBwcml2YXRlIF9pbml0QXJyb3dzTmF2aWdhdG9uKCkge1xuICAgIGlmICghdGhpcy5pc09wZW5lZCkgcmV0dXJuO1xuXG4gICAgaWYgKCF0aGlzLm9wdGlvbkZvY3VzZWQpIHtcbiAgICAgIGNvbnN0IGZpcnN0RWxlbSA9IHRoaXMudHJlZUNvbnRhaW5lckVsZW1lbnQ/LnF1ZXJ5U2VsZWN0b3IoXG4gICAgICAgICcucC10cmVlbm9kZS1jb250ZW50J1xuICAgICAgKTtcbiAgICAgIGlmIChmaXJzdEVsZW0pIChmaXJzdEVsZW0gYXMgSFRNTEVsZW1lbnQpLmZvY3VzKCk7XG4gICAgICB0aGlzLm9wdGlvbkZvY3VzZWQgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIGNsZWFyKGRkOiBIVE1MRWxlbWVudCwgZXZlbnQ6IGFueSk6IHZvaWQge1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXG4gICAgaWYgKFxuICAgICAgKCF0aGlzLm11bHRpcGxlICYmIHRoaXMudHJlZVNlbGVjdGlvbikgfHxcbiAgICAgICh0aGlzLm11bHRpcGxlICYmIHRoaXMudHJlZVNlbGVjdGlvbj8ubGVuZ3RoID4gMClcbiAgICApIHtcbiAgICAgIGlmICh0aGlzLm9wZW5PbkNsZWFyKSB7XG4gICAgICAgIHRoaXMuX3RvZ2dsZU9wdGlvbnMoZGQsIHRydWUpO1xuICAgICAgfVxuICAgICAgY29uc3QgdmFsID0gdGhpcy5tdWx0aXBsZSA/IFtdIDogdW5kZWZpbmVkO1xuICAgICAgdGhpcy50cmVlU2VsZWN0aW9uID0gdmFsO1xuICAgICAgdGhpcy51cGRhdGVWYWx1ZSh2YWwpO1xuICAgIH1cbiAgICB0aGlzLm9wdGlvbkZvY3VzZWQgPSBmYWxzZTtcbiAgfVxuXG4gIHByaXZhdGUgX2NoZWNrRXJyb3JzKCk6IHZvaWQge1xuICAgIGNvbnN0IGVycm9ycyA9IHRoaXMuX2NvbnRyb2w/LmVycm9ycztcblxuICAgIGlmICghdGhpcy5fY29udHJvbD8uY29udHJvbD8udG91Y2hlZCB8fCAhZXJyb3JzKSB7XG4gICAgICB0aGlzLmVycm9yID0gJyc7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCdyZXF1aXJlZCcgaW4gZXJyb3JzKSB7XG4gICAgICB0aGlzLmVycm9yID0gJ0ZpZWxkIGlzIHJlcXVpcmVkJztcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBlcnJBcnIgPSBPYmplY3QudmFsdWVzKGVycm9ycyk7XG4gICAgaWYgKGVyckFyci5sZW5ndGggPCAxKSB7XG4gICAgICB0aGlzLmVycm9yID0gJyc7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IG1lc3NhZ2UgPSBlcnJBcnIuZmluZCgobXNnKSA9PiB0eXBlb2YgbXNnID09PSAnc3RyaW5nJyk7XG5cbiAgICB0aGlzLmVycm9yID0gbWVzc2FnZSB8fCAnVW5rbm93biBlcnJvcic7XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWVtcHR5LWZ1bmN0aW9uXG4gIHNldERpc2FibGVkU3RhdGUoZGlzYWJsZWQ6IGJvb2xlYW4pIHt9XG5cbiAgb25CbHVyKCkge1xuICAgIHRoaXMuX2NvbnRyb2w/LmNvbnRyb2w/Lm1hcmtBc1RvdWNoZWQoKTtcbiAgICB0aGlzLl9jaGVja0Vycm9ycygpO1xuICB9XG5cbiAgZm9jdXMoKSB7XG4gICAgdGhpcy5zZWxlY3RDb250YWluZXI/Lm5hdGl2ZUVsZW1lbnQ/LmZvY3VzKCk7XG4gICAgdGhpcy5fdG9nZ2xlT3B0aW9ucyh0aGlzLnNlbGVjdENvbnRhaW5lcj8ubmF0aXZlRWxlbWVudCwgdHJ1ZSk7XG4gIH1cblxuICBwcml2YXRlIF9leHBhbmRUb05vZGVzKG5vZGVzOiBhbnlbXSkge1xuICAgIGZ1bmN0aW9uIGdldFBhcmVudEtleShrZXk6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgICBjb25zdCBsYXN0U2VwYXJhdG9ySW5kZXggPSBrZXkubGFzdEluZGV4T2YoJy0nKTtcbiAgICAgIGlmIChsYXN0U2VwYXJhdG9ySW5kZXggIT09IC0xKSB7XG4gICAgICAgIHJldHVybiBrZXkuc3Vic3RyaW5nKDAsIGxhc3RTZXBhcmF0b3JJbmRleCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuXG4gICAgbm9kZXMuZm9yRWFjaCgobm9kZSkgPT4ge1xuICAgICAgY29uc3QgcGFyZW50Tm9kZUtleSA9IGdldFBhcmVudEtleShub2RlLmtleSk7XG4gICAgICBjb25zdCBwYXJlbnROb2RlID0gdGhpcy5vcHRpb25zTWFwLmdldChwYXJlbnROb2RlS2V5KSB8fCBudWxsO1xuXG4gICAgICBpZiAocGFyZW50Tm9kZSkge1xuICAgICAgICBwYXJlbnROb2RlLmV4cGFuZGVkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5fZXhwYW5kVG9Ob2RlcyhbcGFyZW50Tm9kZV0pO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBfdG9Jbm5lck9wdGlvbnMoX29wdGlvbnM6IGFueVtdKTogVHJlZU5vZGVbXSB7XG4gICAgZnVuY3Rpb24gbWFwT3B0aW9uKFxuICAgICAgbzogYW55LFxuICAgICAgb3B0aW9uTGFiZWw6IHN0cmluZyxcbiAgICAgIG9wdGlvbkluZm86IHN0cmluZyxcbiAgICAgIGtleTogc3RyaW5nLFxuICAgICAgb3JpZ2luYWxPcHRpb25zTWFwOiBhbnlcbiAgICApIHtcbiAgICAgIGNvbnN0IGlubmVyID0ge1xuICAgICAgICBpbm5lcjogdHJ1ZSxcbiAgICAgICAgbGFiZWw6IG9bb3B0aW9uTGFiZWxdLFxuICAgICAgICBpbmZvOiBvW29wdGlvbkluZm9dLFxuICAgICAgICBrZXksXG4gICAgICAgIHN0eWxlQ2xhc3M6ICdrZXktJyArIGtleVxuICAgICAgfSBhcyBUcmVlTm9kZTtcbiAgICAgIGlmIChvLnR5cGUgPT09ICdkaXJlY3RvcnknKSB7XG4gICAgICAgIGlubmVyLnR5cGUgPSAnZGlyZWN0b3J5JztcbiAgICAgICAgaW5uZXIuc2VsZWN0YWJsZSA9IGZhbHNlO1xuICAgICAgICBpbm5lci5zdHlsZUNsYXNzICs9ICcgY3BzLXRyZWUtbm9kZS1mdWxseS1leHBhbmRhYmxlJztcbiAgICAgIH1cbiAgICAgIGlmIChvLmNoaWxkcmVuKSB7XG4gICAgICAgIGlubmVyLmNoaWxkcmVuID0gby5jaGlsZHJlbi5tYXAoKGM6IGFueSwgaW5kZXg6IG51bWJlcikgPT4ge1xuICAgICAgICAgIHJldHVybiBtYXBPcHRpb24oXG4gICAgICAgICAgICBjLFxuICAgICAgICAgICAgb3B0aW9uTGFiZWwsXG4gICAgICAgICAgICBvcHRpb25JbmZvLFxuICAgICAgICAgICAga2V5ICsgJy0nICsgaW5kZXgsXG4gICAgICAgICAgICBvcmlnaW5hbE9wdGlvbnNNYXBcbiAgICAgICAgICApO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIG9yaWdpbmFsT3B0aW9uc01hcC5zZXQoa2V5LCBvKTtcbiAgICAgIHJldHVybiBpbm5lcjtcbiAgICB9XG5cbiAgICBjb25zdCByZXMgPSBfb3B0aW9ucy5tYXAoKG9wdGlvbiwgaW5kZXgpID0+IHtcbiAgICAgIHJldHVybiBtYXBPcHRpb24oXG4gICAgICAgIG9wdGlvbixcbiAgICAgICAgdGhpcy5vcHRpb25MYWJlbCxcbiAgICAgICAgdGhpcy5vcHRpb25JbmZvLFxuICAgICAgICAnJyArIGluZGV4LFxuICAgICAgICB0aGlzLm9yaWdpbmFsT3B0aW9uc01hcFxuICAgICAgKTtcbiAgICB9KTtcblxuICAgIHRoaXMub3B0aW9uc01hcCA9IHRoaXMuX2J1aWxkT3B0aW9uc01hcChyZXMpO1xuXG4gICAgcmV0dXJuIHJlcztcbiAgfVxuXG4gIHByaXZhdGUgX2J1aWxkT3B0aW9uc01hcChvcHRpb25zOiBhbnlbXSk6IE1hcDxzdHJpbmcsIGFueT4ge1xuICAgIGNvbnN0IG5vZGVNYXAgPSBuZXcgTWFwPHN0cmluZywgYW55PigpO1xuICAgIGZvciAoY29uc3Qgb3B0aW9uIG9mIG9wdGlvbnMpIHtcbiAgICAgIG5vZGVNYXAuc2V0KG9wdGlvbi5rZXksIG9wdGlvbik7XG4gICAgICBpZiAob3B0aW9uLmNoaWxkcmVuKSB7XG4gICAgICAgIGNvbnN0IGNoaWxkTm9kZU1hcCA9IHRoaXMuX2J1aWxkT3B0aW9uc01hcChvcHRpb24uY2hpbGRyZW4pO1xuICAgICAgICBjaGlsZE5vZGVNYXAuZm9yRWFjaCgodmFsdWUsIGtleSkgPT4gbm9kZU1hcC5zZXQoa2V5LCB2YWx1ZSkpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbm9kZU1hcDtcbiAgfVxuXG4gIHByaXZhdGUgX3RyZWVTZWxlY3Rpb25Ub1ZhbHVlKHNlbGVjdGlvbjogYW55KSB7XG4gICAgaWYgKCFzZWxlY3Rpb24pIHJldHVybiB0aGlzLm11bHRpcGxlID8gW10gOiB1bmRlZmluZWQ7XG4gICAgaWYgKHRoaXMubXVsdGlwbGUpIHtcbiAgICAgIHJldHVybiBzZWxlY3Rpb24ubWFwKChzOiBhbnkpID0+IHRoaXMub3JpZ2luYWxPcHRpb25zTWFwLmdldChzLmtleSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGhpcy5vcmlnaW5hbE9wdGlvbnNNYXAuZ2V0KHNlbGVjdGlvbi5rZXkpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX3ZhbHVlVG9UcmVlU2VsZWN0aW9uKHZhbHVlOiBhbnkpIHtcbiAgICBmdW5jdGlvbiBnZXRLZXkodjogYW55LCBtYXA6IE1hcDxzdHJpbmcsIGFueT4pOiBzdHJpbmcge1xuICAgICAgZm9yIChjb25zdCBba2V5LCB2YWxdIG9mIG1hcC5lbnRyaWVzKCkpIHtcbiAgICAgICAgaWYgKGlzRXF1YWwodiwgdmFsKSkge1xuICAgICAgICAgIHJldHVybiBrZXk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbiAgICBpZiAoIXZhbHVlKSByZXR1cm4gdGhpcy5tdWx0aXBsZSA/IFtdIDogdW5kZWZpbmVkO1xuXG4gICAgaWYgKHRoaXMubXVsdGlwbGUpIHtcbiAgICAgIGNvbnN0IHJlcyA9IFtdIGFzIFRyZWVOb2RlW107XG4gICAgICB2YWx1ZS5mb3JFYWNoKCh2OiBhbnkpID0+IHtcbiAgICAgICAgY29uc3Qga2V5ID0gZ2V0S2V5KHYsIHRoaXMub3JpZ2luYWxPcHRpb25zTWFwKTtcbiAgICAgICAgaWYgKGtleSkgcmVzLnB1c2godGhpcy5vcHRpb25zTWFwLmdldChrZXkpIGFzIFRyZWVOb2RlKTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHJlcztcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3Qga2V5ID0gZ2V0S2V5KHZhbHVlLCB0aGlzLm9yaWdpbmFsT3B0aW9uc01hcCk7XG4gICAgICByZXR1cm4ga2V5ID8gdGhpcy5vcHRpb25zTWFwLmdldChrZXkpIDogdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuXG4gIC8vIHRoaXMgaXMgYSBmaXggb2YgcHJpbWVuZyBjaGFuZ2UgZGV0ZWN0aW9uIGJ1ZyB3aGVuIHZpcnR1YWwgc2Nyb2xsZXIgaXMgZW5hYmxlZFxuICBwcml2YXRlIF91cGRhdGVPcHRpb25zKCkge1xuICAgIGlmICghdGhpcy52aXJ0dWFsU2Nyb2xsKSByZXR1cm47XG4gICAgdGhpcy5vcHRpb25zID0gWy4uLnRoaXMub3B0aW9uc107XG4gIH1cbn1cbiIsIjxkaXZcbiAgW25nU3R5bGVdPVwieyB3aWR0aDogY3Z0V2lkdGggfVwiXG4gIGNsYXNzPVwiY3BzLXRyZWVzZWxlY3RcIlxuICB0YWJpbmRleD1cIjBcIlxuICBbbmdDbGFzc109XCJ7IGRpc2FibGVkOiBkaXNhYmxlZCwgZXJyb3I6IGVycm9yIH1cIlxuICAjc2VsZWN0Q29udGFpbmVyXG4gIChrZXlkb3duKT1cIm9uS2V5RG93bigkZXZlbnQsIHNlbGVjdENvbnRhaW5lcilcIlxuICAoYmx1cik9XCJvbkJsdXIoKVwiPlxuICA8bGFiZWwgKm5nSWY9XCJsYWJlbFwiIGNsYXNzPVwiY3BzLXRyZWVzZWxlY3QtbGFiZWxcIj57eyBsYWJlbCB9fSA8L2xhYmVsPlxuICA8ZGl2XG4gICAgY2xhc3M9XCJjcHMtdHJlZXNlbGVjdC1jb250YWluZXJcIlxuICAgIFtjbGFzcy5mb2N1c2VkXT1cImlzT3BlbmVkXCJcbiAgICBbbmdDbGFzc109XCJ7XG4gICAgICAncGVyc2lzdGVudC1jbGVhcic6IHBlcnNpc3RlbnRDbGVhclxuICAgIH1cIlxuICAgIChjbGlja091dHNpZGUpPVwib25DbGlja091dHNpZGUoc2VsZWN0Q29udGFpbmVyKVwiPlxuICAgIDxkaXYgY2xhc3M9XCJjcHMtdHJlZXNlbGVjdC1ib3hcIiAoY2xpY2spPVwib25Cb3hDbGljayhzZWxlY3RDb250YWluZXIpXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiY3BzLXRyZWVzZWxlY3QtYm94LWxlZnRcIj5cbiAgICAgICAgPGNwcy1pY29uXG4gICAgICAgICAgKm5nSWY9XCJwcmVmaXhJY29uXCJcbiAgICAgICAgICBbaWNvbl09XCJwcmVmaXhJY29uXCJcbiAgICAgICAgICBbc2l6ZV09XCJwcmVmaXhJY29uU2l6ZVwiXG4gICAgICAgICAgY2xhc3M9XCJwcmVmaXgtaWNvblwiPlxuICAgICAgICA8L2Nwcy1pY29uPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3M9XCJjcHMtdHJlZXNlbGVjdC1ib3gtcGxhY2Vob2xkZXJcIlxuICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICAoIXRyZWVTZWxlY3Rpb24gJiYgIW11bHRpcGxlKSB8fFxuICAgICAgICAgICAgKHRyZWVTZWxlY3Rpb24/Lmxlbmd0aCA8IDEgJiYgbXVsdGlwbGUpXG4gICAgICAgICAgXCI+XG4gICAgICAgICAge3sgcGxhY2Vob2xkZXIgfX1cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzcz1cImNwcy10cmVlc2VsZWN0LWJveC1pdGVtc1wiXG4gICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgICh0cmVlU2VsZWN0aW9uICYmICFtdWx0aXBsZSkgfHxcbiAgICAgICAgICAgICh0cmVlU2VsZWN0aW9uPy5sZW5ndGggPiAwICYmIG11bHRpcGxlKVxuICAgICAgICAgIFwiPlxuICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIW11bHRpcGxlXCIgY2xhc3M9XCJzaW5nbGUtaXRlbVwiPlxuICAgICAgICAgICAge3sgdHJlZVNlbGVjdGlvbi5sYWJlbCB9fTwvc3BhblxuICAgICAgICAgID5cbiAgICAgICAgICA8ZGl2ICpuZ0lmPVwibXVsdGlwbGUgJiYgIWNoaXBzXCIgY2xhc3M9XCJ0ZXh0LWdyb3VwXCI+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtZ3JvdXAtaXRlbVwiPlxuICAgICAgICAgICAgICB7e1xuICAgICAgICAgICAgICAgIHRyZWVTZWxlY3Rpb24gfCBjb21iaW5lTGFiZWxzIDogb3B0aW9ucyA6ICcnIDogJ2xhYmVsJyA6IHRydWVcbiAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDxkaXYgKm5nSWY9XCJtdWx0aXBsZSAmJiBjaGlwc1wiIGNsYXNzPVwiY2hpcHMtZ3JvdXBcIj5cbiAgICAgICAgICAgIDxjcHMtY2hpcFxuICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgdmFsIG9mIHRyZWVTZWxlY3Rpb25cIlxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgICAgICAgICBbY2xvc2FibGVdPVwiY2xvc2FibGVDaGlwc1wiXG4gICAgICAgICAgICAgIChjbG9zZWQpPVwicmVtb3ZlKHZhbClcIlxuICAgICAgICAgICAgICBbbGFiZWxdPVwidmFsLmxhYmVsXCI+XG4gICAgICAgICAgICA8L2Nwcy1jaGlwPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPHNwYW4gY2xhc3M9XCJjcHMtdHJlZXNlbGVjdC1ib3gtaWNvbnNcIj5cbiAgICAgICAgPHNwYW5cbiAgICAgICAgICAqbmdJZj1cImNsZWFyYWJsZSAmJiAhZGlzYWJsZWRcIlxuICAgICAgICAgIFtzdHlsZS52aXNpYmlsaXR5XT1cIlxuICAgICAgICAgICAgcGVyc2lzdGVudENsZWFyIHx8XG4gICAgICAgICAgICAoIXBlcnNpc3RlbnRDbGVhciAmJlxuICAgICAgICAgICAgICAoKG11bHRpcGxlICYmIHRyZWVTZWxlY3Rpb24/Lmxlbmd0aCkgfHxcbiAgICAgICAgICAgICAgICAoIW11bHRpcGxlICYmIHRyZWVTZWxlY3Rpb24pKSlcbiAgICAgICAgICAgICAgPyAndmlzaWJsZSdcbiAgICAgICAgICAgICAgOiAnaGlkZGVuJ1xuICAgICAgICAgIFwiXG4gICAgICAgICAgY2xhc3M9XCJjcHMtdHJlZXNlbGVjdC1ib3gtY2xlYXItaWNvblwiPlxuICAgICAgICAgIDxjcHMtaWNvblxuICAgICAgICAgICAgaWNvbj1cImRlbGV0ZVwiXG4gICAgICAgICAgICBzaXplPVwic21hbGxcIlxuICAgICAgICAgICAgKGNsaWNrKT1cImNsZWFyKHNlbGVjdENvbnRhaW5lciwgJGV2ZW50KVwiPjwvY3BzLWljb24+XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJjcHMtdHJlZXNlbGVjdC1ib3gtY2hldnJvblwiPlxuICAgICAgICAgIDxjcHMtaWNvblxuICAgICAgICAgICAgaWNvbj1cImNoZXZyb24tZG93blwiXG4gICAgICAgICAgICBzaXplPVwic21hbGxcIlxuICAgICAgICAgICAgY29sb3I9XCJ0ZXh0LWRhcmtcIj48L2Nwcy1pY29uPlxuICAgICAgICA8L3NwYW4+XG4gICAgICA8L3NwYW4+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2IGNsYXNzPVwiY3BzLXRyZWVzZWxlY3Qtb3B0aW9uc1wiPlxuICAgICAgPHAtdHJlZVxuICAgICAgICAjdHJlZUxpc3RcbiAgICAgICAgW3ZpcnR1YWxTY3JvbGxdPVwidmlydHVhbFNjcm9sbFwiXG4gICAgICAgIFt2aXJ0dWFsU2Nyb2xsSXRlbVNpemVdPVwidmlydHVhbFNjcm9sbEl0ZW1TaXplXCJcbiAgICAgICAgW3ZpcnR1YWxTY3JvbGxPcHRpb25zXT1cInsgbnVtVG9sZXJhdGVkSXRlbXM6IDMgfVwiXG4gICAgICAgIFtzY3JvbGxIZWlnaHRdPVwidmlydHVhbExpc3RIZWlnaHQgKyAncHgnXCJcbiAgICAgICAgKG9uTm9kZVNlbGVjdCk9XCJvblNlbGVjdE5vZGUoKVwiXG4gICAgICAgIChvbk5vZGVFeHBhbmQpPVwicmVjYWxjVmlydHVhbExpc3RIZWlnaHQoKVwiXG4gICAgICAgIChvbk5vZGVDb2xsYXBzZSk9XCJyZWNhbGNWaXJ0dWFsTGlzdEhlaWdodCgpXCJcbiAgICAgICAgW3ZhbHVlXT1cIm9wdGlvbnNcIlxuICAgICAgICBbKHNlbGVjdGlvbildPVwidHJlZVNlbGVjdGlvblwiXG4gICAgICAgIChzZWxlY3Rpb25DaGFuZ2UpPVwidHJlZVNlbGVjdGlvbkNoYW5nZWQoJGV2ZW50KVwiXG4gICAgICAgIFttZXRhS2V5U2VsZWN0aW9uXT1cIm11bHRpcGxlID8gZmFsc2UgOiB0cnVlXCJcbiAgICAgICAgW3NlbGVjdGlvbk1vZGVdPVwibXVsdGlwbGUgPyAnbXVsdGlwbGUnIDogJ3NpbmdsZSdcIj5cbiAgICAgICAgPG5nLXRlbXBsYXRlIGxldC1ub2RlIHBUZW1wbGF0ZT1cImRpcmVjdG9yeVwiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3BzLXRyZWVzZWxlY3QtZGlyZWN0b3J5LWVsZW1cIj57eyBub2RlLmxhYmVsIH19PC9zcGFuPlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8bmctdGVtcGxhdGUgbGV0LW5vZGUgcFRlbXBsYXRlPVwiZGVmYXVsdFwiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3BzLXRyZWVzZWxlY3Qtb3B0aW9uXCI+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNwcy10cmVlc2VsZWN0LW9wdGlvbi1sZWZ0XCI+XG4gICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwibXVsdGlwbGVcIiBjbGFzcz1cImNwcy10cmVlc2VsZWN0LW9wdGlvbi1jaGVja1wiPlxuICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3BzLXRyZWVzZWxlY3Qtb3B0aW9uLWxhYmVsXCI+e3sgbm9kZS5sYWJlbCB9fTwvc3Bhbj5cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3BzLXRyZWVzZWxlY3Qtb3B0aW9uLWluZm9cIj57eyBub2RlLmluZm8gfX08L3NwYW4+XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPC9wLXRyZWU+XG4gICAgPC9kaXY+XG4gICAgPGNwcy1wcm9ncmVzcy1saW5lYXJcbiAgICAgICpuZ0lmPVwibG9hZGluZ1wiXG4gICAgICBoZWlnaHQ9XCIzXCJcbiAgICAgIHJhZGl1cz1cIjRcIlxuICAgICAgb3BhY2l0eT1cIjAuM1wiXG4gICAgICBjbGFzcz1cInRyZWVzZWxlY3QtcHJvZ3Jlc3MtYmFyXCJcbiAgICAgIGJnQ29sb3I9XCJ0cmFuc3BhcmVudFwiPlxuICAgIDwvY3BzLXByb2dyZXNzLWxpbmVhcj5cbiAgPC9kaXY+XG4gIDxkaXYgKm5nSWY9XCIhZXJyb3IgJiYgIWhpZGVEZXRhaWxzXCIgY2xhc3M9XCJjcHMtdHJlZXNlbGVjdC1oaW50XCI+XG4gICAge3sgaGludCB9fVxuICA8L2Rpdj5cbiAgPGRpdiAqbmdJZj1cImVycm9yICYmICFoaWRlRGV0YWlsc1wiIGNsYXNzPVwiY3BzLXRyZWVzZWxlY3QtZXJyb3JcIj5cbiAgICB7eyBlcnJvciB9fVxuICA8L2Rpdj5cbjwvZGl2PlxuIl19