cps-ui-kit 0.91.0 → 0.93.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.
@@ -480,7 +480,7 @@ export class CpsAutocompleteComponent {
480
480
  }
481
481
  }
482
482
  CpsAutocompleteComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: CpsAutocompleteComponent, deps: [{ token: i1.NgControl, optional: true, self: true }, { token: i2.LabelByValuePipe }], target: i0.ɵɵFactoryTarget.Component });
483
- CpsAutocompleteComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: CpsAutocompleteComponent, isStandalone: true, selector: "cps-autocomplete", inputs: { label: "label", placeholder: "placeholder", hint: "hint", returnObject: "returnObject", multiple: "multiple", disabled: "disabled", width: "width", selectAll: "selectAll", chips: "chips", closableChips: "closableChips", clearable: "clearable", openOnClear: "openOnClear", options: "options", optionLabel: "optionLabel", optionValue: "optionValue", optionInfo: "optionInfo", hideDetails: "hideDetails", persistentClear: "persistentClear", prefixIcon: "prefixIcon", prefixIconSize: "prefixIconSize", loading: "loading", emptyMessage: "emptyMessage", virtualScroll: "virtualScroll", infoTooltip: "infoTooltip", infoTooltipClass: "infoTooltipClass", infoTooltipMaxWidth: "infoTooltipMaxWidth", infoTooltipPersistent: "infoTooltipPersistent", infoTooltipPosition: "infoTooltipPosition", appearance: "appearance", _value: ["value", "_value"] }, outputs: { valueChanged: "valueChanged" }, providers: [LabelByValuePipe, CheckOptionSelectedPipe], viewQueries: [{ propertyName: "autocompleteBox", first: true, predicate: ["autocompleteBox"], descendants: true }, { propertyName: "autocompleteContainer", first: true, predicate: ["autocompleteContainer"], descendants: true }, { propertyName: "virtualList", first: true, predicate: ["virtualList"], descendants: true }, { propertyName: "optionsMenu", first: true, predicate: ["optionsMenu"], descendants: true }, { propertyName: "optionsList", first: true, predicate: ["optionsList"], descendants: true }], ngImport: i0, template: "<div\n data-cy-id=\"cps-autocomplete\"\n [ngStyle]=\"{ width: cvtWidth }\"\n class=\"cps-autocomplete\"\n tabindex=\"1\"\n [ngClass]=\"{ disabled: disabled, error: error, active: isOpened }\"\n #autocompleteContainer>\n <div class=\"cps-autocomplete-label\" *ngIf=\"label\">\n <label>{{ label }}</label>\n <cps-info-circle\n *ngIf=\"infoTooltip\"\n class=\"cps-autocomplete-label-info-circle\"\n size=\"xsmall\"\n [tooltipPosition]=\"infoTooltipPosition\"\n [tooltipContentClass]=\"infoTooltipClass\"\n [tooltipMaxWidth]=\"infoTooltipMaxWidth\"\n [tooltipPersistent]=\"infoTooltipPersistent\"\n [tooltipText]=\"infoTooltip\">\n </cps-info-circle>\n </div>\n <div\n (keydown)=\"onContainerKeyDown($event)\"\n class=\"cps-autocomplete-container\"\n [class.focused]=\"isOpened\"\n [ngClass]=\"{\n 'persistent-clear': persistentClear,\n borderless: appearance === 'borderless',\n underlined: appearance === 'underlined'\n }\">\n <div class=\"cps-autocomplete-box\" #autocompleteBox (click)=\"onBoxClick()\">\n <div class=\"cps-autocomplete-box-area\">\n <cps-icon\n *ngIf=\"prefixIcon\"\n [icon]=\"prefixIcon\"\n [style.color]=\"disabled ? '#9a9595' : null\"\n [size]=\"prefixIconSize\"\n class=\"prefix-icon\">\n </cps-icon>\n <div\n class=\"cps-autocomplete-box-items\"\n *ngIf=\"\n (value && !multiple) || (value?.length > 0 && multiple);\n else autocompleteInput\n \">\n <span *ngIf=\"!multiple\" class=\"single-item\">\n <div class=\"single-item-selection\">\n <span [style.opacity]=\"activeSingle ? 0 : 1\">{{\n returnObject\n ? value[optionLabel]\n : (value | labelByValue : options : optionValue : optionLabel)\n }}</span>\n </div>\n <ng-container\n *ngTemplateOutlet=\"\n autocompleteInput;\n context: {\n inputClass: 'single-item-input',\n inputStyle: activeSingle ? 'opacity: 1' : null\n }\n \">\n </ng-container>\n </span>\n\n <div *ngIf=\"multiple && !chips\" class=\"text-group\">\n <div\n *ngFor=\"let val of value; let last = last\"\n class=\"text-group-item\"\n [ngClass]=\"{ 'about-to-remove': last && backspaceClickedOnce }\">\n {{\n returnObject\n ? val[optionLabel]\n : (val | labelByValue : options : optionValue : optionLabel)\n }}{{ !last ? ',' : '' }}\n </div>\n <ng-container *ngTemplateOutlet=\"autocompleteInput\"></ng-container>\n </div>\n\n <div *ngIf=\"multiple && chips\" class=\"chips-group\">\n <cps-chip\n *ngFor=\"let val of value; let last = last\"\n [disabled]=\"disabled\"\n [closable]=\"closableChips\"\n (closed)=\"select(val, true)\"\n [ngClass]=\"{ 'about-to-remove': last && backspaceClickedOnce }\"\n [label]=\"\n returnObject\n ? val[optionLabel]\n : (val | labelByValue : options : optionValue : optionLabel)\n \">\n </cps-chip>\n <ng-container *ngTemplateOutlet=\"autocompleteInput\"></ng-container>\n </div>\n </div>\n <span class=\"cps-autocomplete-box-icons\">\n <span\n *ngIf=\"clearable && !disabled\"\n [style.visibility]=\"\n persistentClear ||\n (!persistentClear &&\n ((multiple && value?.length) || (!multiple && value)))\n ? 'visible'\n : 'hidden'\n \"\n class=\"cps-autocomplete-box-clear-icon\">\n <cps-icon\n icon=\"delete\"\n size=\"small\"\n (click)=\"clear($event)\"></cps-icon>\n </span>\n <span\n class=\"cps-autocomplete-box-chevron\"\n (click)=\"onChevronClick($event)\">\n <cps-icon\n icon=\"chevron-down\"\n size=\"small\"\n [color]=\"disabled ? 'text-light' : 'text-dark'\"></cps-icon>\n </span>\n </span>\n </div>\n </div>\n\n <cps-menu\n #optionsMenu\n [withArrow]=\"false\"\n (beforeMenuHidden)=\"onBeforeOptionsHidden()\"\n hideTransitionOptions=\"0s linear\"\n containerClass=\"cps-autocomplete-options-menu\">\n <div\n #optionsList\n class=\"cps-autocomplete-options\"\n [ngStyle]=\"{\n width: autocompleteBoxWidth + 'px'\n }\">\n <div\n *ngIf=\"filteredOptions.length < 1\"\n class=\"cps-autocomplete-options-empty\">\n {{ emptyMessage }}\n </div>\n <ng-container *ngIf=\"!virtualScroll\">\n <div\n class=\"cps-autocomplete-options-option select-all-option\"\n [class.allselected]=\"value?.length === options.length\"\n *ngIf=\"\n multiple &&\n selectAll &&\n filteredOptions.length === options.length &&\n options.length > 1\n \"\n (click)=\"toggleAll()\">\n <span class=\"cps-autocomplete-options-option-left\">\n <span\n *ngIf=\"multiple\"\n class=\"cps-autocomplete-options-option-check\">\n </span>\n <span class=\"cps-autocomplete-options-option-label\"\n >Select all</span\n >\n </span>\n </div>\n <ng-container *ngFor=\"let item of filteredOptions\">\n <ng-container\n *ngTemplateOutlet=\"\n itemTemplate;\n context: {\n item: item\n }\n \"></ng-container>\n </ng-container>\n </ng-container>\n <ng-container *ngIf=\"virtualScroll\">\n <p-virtualScroller\n #virtualList\n [value]=\"filteredOptions\"\n [delay]=\"0\"\n [scrollHeight]=\"virtualListHeight + 'px'\"\n [options]=\"{ numToleratedItems: 3 }\"\n [itemSize]=\"virtualScrollItemSize\">\n <ng-template pTemplate=\"item\" let-item>\n <ng-container\n *ngTemplateOutlet=\"\n itemTemplate;\n context: {\n item: item\n }\n \"></ng-container>\n </ng-template>\n </p-virtualScroller>\n </ng-container>\n </div>\n </cps-menu>\n <cps-progress-linear\n *ngIf=\"loading\"\n height=\"3\"\n radius=\"4\"\n opacity=\"0.3\"\n class=\"autocomplete-progress-bar\"\n bgColor=\"transparent\">\n </cps-progress-linear>\n </div>\n <div *ngIf=\"!error && !hideDetails\" class=\"cps-autocomplete-hint\">\n {{ hint }}\n </div>\n <div *ngIf=\"error && !hideDetails\" class=\"cps-autocomplete-error\">\n {{ error }}\n </div>\n</div>\n\n<ng-template\n #autocompleteInput\n let-inputClass=\"inputClass\"\n let-inputStyle=\"inputStyle\">\n <input\n class=\"cps-autocomplete-box-input\"\n spellcheck=\"false\"\n [class]=\"inputClass\"\n [style]=\"inputStyle\"\n [placeholder]=\"\n (!value && !multiple) || (value?.length < 1 && multiple)\n ? placeholder\n : ''\n \"\n (input)=\"filterOptions($event)\"\n (keydown)=\"onInputKeyDown($event)\"\n [(ngModel)]=\"inputText\"\n (blur)=\"onBlur()\" />\n</ng-template>\n\n<ng-template #itemTemplate let-item=\"item\">\n <div\n class=\"cps-autocomplete-options-option\"\n (click)=\"onOptionClick(item)\"\n [class.selected]=\"\n item | checkOptionSelected : value : multiple : returnObject : optionValue\n \">\n <span class=\"cps-autocomplete-options-option-left\">\n <span *ngIf=\"multiple\" class=\"cps-autocomplete-options-option-check\">\n </span>\n <span\n data-cy-id=\"cps-autocomplete-options\"\n class=\"cps-autocomplete-options-option-label\"\n [class.virtual-row]=\"virtualScroll\"\n >{{ item[optionLabel] }}</span\n >\n </span>\n\n <span\n class=\"cps-autocomplete-options-option-right\"\n [class.virtual-row]=\"virtualScroll\"\n >{{ item[optionInfo] }}</span\n >\n </div>\n</ng-template>\n", styles: [":host{display:flex}:host .cps-autocomplete{position:relative;width:100%;outline:none;font-family:Source Sans Pro,sans-serif;display:grid}:host .cps-autocomplete .cps-autocomplete-container{position:relative}:host .cps-autocomplete .cps-autocomplete-container .autocomplete-progress-bar{position:absolute;bottom:1px;padding:0 1px}:host .cps-autocomplete .cps-autocomplete-container.focused .cps-autocomplete-box{background:white!important}:host .cps-autocomplete .cps-autocomplete-container.borderless .cps-autocomplete-box,:host .cps-autocomplete .cps-autocomplete-container.underlined .cps-autocomplete-box{line-height:1;border:none!important;border-radius:0}:host .cps-autocomplete .cps-autocomplete-container.underlined .cps-autocomplete-box{border-bottom:1px solid var(--cps-color-line-light)!important}:host .cps-autocomplete.active .cps-autocomplete-box{border:1px solid var(--cps-color-calm)}:host .cps-autocomplete.active .cps-autocomplete-box .cps-autocomplete-box-area .prefix-icon{color:var(--cps-color-calm)}:host .cps-autocomplete.active .cps-autocomplete-box .cps-autocomplete-box-chevron{top:22px;transform:rotate(180deg)}:host .cps-autocomplete .cps-autocomplete-label{align-items:center;display:inline-flex;margin-bottom:.2rem;color:var(--cps-color-text-dark);font-size:.875rem;font-weight:600}:host .cps-autocomplete .cps-autocomplete-label .cps-autocomplete-label-info-circle{margin-left:8px;pointer-events:all}:host .cps-autocomplete .persistent-clear .cps-autocomplete-box .cps-autocomplete-box-icons .cps-autocomplete-box-clear-icon cps-icon,:host .cps-autocomplete .cps-autocomplete-container.focused .cps-autocomplete-box .cps-autocomplete-box-icons .cps-autocomplete-box-clear-icon cps-icon,:host .cps-autocomplete .cps-autocomplete-container:hover .cps-autocomplete-box .cps-autocomplete-box-icons .cps-autocomplete-box-clear-icon cps-icon{opacity:.5}:host .cps-autocomplete .cps-autocomplete-box{overflow:hidden;min-height:38px;width:100%;cursor:text;background:white;font-size:1rem;outline:none;padding:0 12px;border-radius:4px;border:1px solid var(--cps-color-line-light);transition-duration:.2s}:host .cps-autocomplete .cps-autocomplete-box-area{display:flex;min-height:36px;align-items:center}:host .cps-autocomplete .cps-autocomplete-box-area .prefix-icon{margin-right:.5rem;color:var(--cps-color-text-dark)}:host .cps-autocomplete .cps-autocomplete-box-input{padding:0;background-color:transparent;width:0;min-width:30px;flex-grow:1;font-size:1rem;color:var(--cps-color-text-dark);border-style:none;outline:none;font-family:Source Sans Pro,sans-serif}:host .cps-autocomplete .cps-autocomplete-box-input::placeholder{color:var(--cps-color-text-lightest);font-style:italic;opacity:1}:host .cps-autocomplete .cps-autocomplete-box-items{display:inline-flex;flex-direction:column;width:100%;margin-top:3px;margin-bottom:3px;position:relative}:host .cps-autocomplete .cps-autocomplete-box-items .single-item{color:var(--cps-color-text-dark);display:inline-flex}:host .cps-autocomplete .cps-autocomplete-box-items .single-item-selection{display:inline-flex;letter-spacing:inherit;line-height:inherit;max-width:100%}:host .cps-autocomplete .cps-autocomplete-box-items .single-item-input{opacity:0;min-width:0;align-self:flex-start;flex:1 1;transition:none;position:absolute;top:0;bottom:0;width:100%;padding-inline-start:inherit;padding-inline-end:inherit}:host .cps-autocomplete .cps-autocomplete-box-items .chips-group{display:inline-flex;flex-wrap:wrap}:host .cps-autocomplete .cps-autocomplete-box-items .chips-group cps-chip{padding-bottom:3px;padding-top:3px;padding-right:4px}:host .cps-autocomplete .cps-autocomplete-box-items .text-group{color:var(--cps-color-text-dark);padding-top:3px;padding-bottom:3px;display:inline-flex;flex-wrap:wrap}:host .cps-autocomplete .cps-autocomplete-box-items .text-group .text-group-item{padding-bottom:3px;padding-top:2px;padding-right:4px;height:24px}:host .cps-autocomplete .cps-autocomplete-box:hover{border:1px solid var(--cps-color-calm)}:host .cps-autocomplete .cps-autocomplete-box:hover .cps-autocomplete-box-area .prefix-icon{color:var(--cps-color-calm)}:host .cps-autocomplete .cps-autocomplete-box .cps-autocomplete-box-icons{display:flex}:host .cps-autocomplete .cps-autocomplete-box .cps-autocomplete-box-icons .cps-autocomplete-box-clear-icon{cursor:pointer;display:flex;color:var(--cps-color-calm);margin-left:8px}:host .cps-autocomplete .cps-autocomplete-box .cps-autocomplete-box-icons .cps-autocomplete-box-clear-icon cps-icon{opacity:0;transition-duration:.2s}:host .cps-autocomplete .cps-autocomplete-box .cps-autocomplete-box-icons .cps-autocomplete-box-clear-icon cps-icon:hover{opacity:1!important}:host .cps-autocomplete .cps-autocomplete-box .cps-autocomplete-box-icons .cps-autocomplete-box-chevron{display:flex;margin-left:8px;transition-duration:.2s;cursor:pointer}:host .cps-autocomplete .cps-autocomplete-box .cps-autocomplete-box-icons .cps-autocomplete-box-chevron:hover ::ng-deep cps-icon .cps-icon{color:var(--cps-color-calm)!important}:host .cps-autocomplete .cps-autocomplete-hint{color:var(--cps-color-text-mild);font-size:.75rem;min-height:1.125rem;line-height:1.125rem;cursor:default;margin-top:.2rem}:host .cps-autocomplete .cps-autocomplete-error{color:#c33;font-weight:700;font-size:.75rem;min-height:1.125rem;line-height:1.125rem;cursor:default;margin-top:.2rem}:host .cps-autocomplete.disabled{pointer-events:none}:host .cps-autocomplete.disabled .cps-autocomplete-box{background:#f7f7f7}:host .cps-autocomplete.disabled .cps-autocomplete-box-items{color:var(--cps-color-text-light)}:host .cps-autocomplete.disabled .cps-autocomplete-box-items .text-group,:host .cps-autocomplete.disabled .cps-autocomplete-box-items .single-item{color:var(--cps-color-text-light)}:host .cps-autocomplete.disabled .cps-autocomplete-label{color:var(--cps-color-text-mild)}:host .cps-autocomplete.error .cps-autocomplete-box{border-color:#c33!important;background:#fef3f2}:host .about-to-remove{color:var(--cps-color-text-light)}:host .about-to-remove ::ng-deep .cps-chip{background-color:var(--cps-color-bg-mid)}.cps-autocomplete-options{font-family:Source Sans Pro,sans-serif;background:white;overflow-x:hidden;max-height:242px;overflow-y:auto}.cps-autocomplete-options .cps-autocomplete-options-empty{padding:11px;font-size:16px;cursor:default;color:var(--cps-color-text-dark)}.cps-autocomplete-options .cps-autocomplete-options-option{padding:12px;justify-content:space-between;display:flex;cursor:pointer}.cps-autocomplete-options .cps-autocomplete-options-option:hover{background:#f8f4f5}.cps-autocomplete-options .cps-autocomplete-options-option-label{color:var(--cps-color-text-dark)}.cps-autocomplete-options .cps-autocomplete-options-option-left{display:flex;align-items:center;margin-right:8px}.cps-autocomplete-options .cps-autocomplete-options-option-right{color:var(--cps-color-text-light);text-align:right}.cps-autocomplete-options .cps-autocomplete-options-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}.cps-autocomplete-options .cps-autocomplete-options-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)}.cps-autocomplete-options .cps-autocomplete-options-option.selected,.cps-autocomplete-options .cps-autocomplete-options-option.allselected{font-weight:600}.cps-autocomplete-options .cps-autocomplete-options-option.selected .cps-autocomplete-options-option-label,.cps-autocomplete-options .cps-autocomplete-options-option.allselected .cps-autocomplete-options-option-label{color:var(--cps-color-calm)}.cps-autocomplete-options .cps-autocomplete-options-option.selected .cps-autocomplete-options-option-check,.cps-autocomplete-options .cps-autocomplete-options-option.allselected .cps-autocomplete-options-option-check{opacity:1}.cps-autocomplete-options .cps-autocomplete-options-option.selected{background:#efe4e7}.cps-autocomplete-options .cps-autocomplete-options-option.highlighten{background:#f5eeef}.cps-autocomplete-options .cps-autocomplete-options-option.selected.highlighten{background:#e6d4d9}.cps-autocomplete-options .select-all-option{border-bottom:1px solid lightgrey;font-weight:600}.cps-autocomplete-options ::ng-deep .p-virtualscroller-list.p-scroller{overflow-anchor:none}.cps-autocomplete-options .virtual-row{white-space:nowrap}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i3.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { 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: "component", type: CpsInfoCircleComponent, selector: "cps-info-circle", inputs: ["size", "tooltipText", "tooltipPosition", "tooltipContentClass", "tooltipMaxWidth", "tooltipPersistent"] }, { kind: "pipe", type: LabelByValuePipe, name: "labelByValue" }, { kind: "pipe", type: CheckOptionSelectedPipe, name: "checkOptionSelected" }, { kind: "ngmodule", type: VirtualScrollerModule }, { kind: "component", type: i4.VirtualScroller, selector: "p-virtualScroller", inputs: ["value", "itemSize", "style", "styleClass", "scrollHeight", "lazy", "options", "delay"], outputs: ["onLazyLoad"] }, { kind: "directive", type: i5.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "component", type: CpsMenuComponent, selector: "cps-menu", inputs: ["header", "items", "withArrow", "compressed", "focusOnShow", "persistent", "containerClass", "showTransitionOptions", "hideTransitionOptions"], outputs: ["menuShown", "menuHidden", "beforeMenuHidden", "contentClicked"] }] });
483
+ CpsAutocompleteComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: CpsAutocompleteComponent, isStandalone: true, selector: "cps-autocomplete", inputs: { label: "label", placeholder: "placeholder", hint: "hint", returnObject: "returnObject", multiple: "multiple", disabled: "disabled", width: "width", selectAll: "selectAll", chips: "chips", closableChips: "closableChips", clearable: "clearable", openOnClear: "openOnClear", options: "options", optionLabel: "optionLabel", optionValue: "optionValue", optionInfo: "optionInfo", hideDetails: "hideDetails", persistentClear: "persistentClear", prefixIcon: "prefixIcon", prefixIconSize: "prefixIconSize", loading: "loading", emptyMessage: "emptyMessage", virtualScroll: "virtualScroll", infoTooltip: "infoTooltip", infoTooltipClass: "infoTooltipClass", infoTooltipMaxWidth: "infoTooltipMaxWidth", infoTooltipPersistent: "infoTooltipPersistent", infoTooltipPosition: "infoTooltipPosition", appearance: "appearance", _value: ["value", "_value"] }, outputs: { valueChanged: "valueChanged" }, providers: [LabelByValuePipe, CheckOptionSelectedPipe], viewQueries: [{ propertyName: "autocompleteBox", first: true, predicate: ["autocompleteBox"], descendants: true }, { propertyName: "autocompleteContainer", first: true, predicate: ["autocompleteContainer"], descendants: true }, { propertyName: "virtualList", first: true, predicate: ["virtualList"], descendants: true }, { propertyName: "optionsMenu", first: true, predicate: ["optionsMenu"], descendants: true }, { propertyName: "optionsList", first: true, predicate: ["optionsList"], descendants: true }], ngImport: i0, template: "<div\n data-cy-id=\"cps-autocomplete\"\n [ngStyle]=\"{ width: cvtWidth }\"\n class=\"cps-autocomplete\"\n tabindex=\"1\"\n [ngClass]=\"{ disabled: disabled, error: error, active: isOpened }\"\n #autocompleteContainer>\n <div class=\"cps-autocomplete-label\" *ngIf=\"label\">\n <label>{{ label }}</label>\n <cps-info-circle\n *ngIf=\"infoTooltip\"\n class=\"cps-autocomplete-label-info-circle\"\n size=\"xsmall\"\n [tooltipPosition]=\"infoTooltipPosition\"\n [tooltipContentClass]=\"infoTooltipClass\"\n [tooltipMaxWidth]=\"infoTooltipMaxWidth\"\n [tooltipPersistent]=\"infoTooltipPersistent\"\n [tooltipText]=\"infoTooltip\">\n </cps-info-circle>\n </div>\n <div\n (keydown)=\"onContainerKeyDown($event)\"\n class=\"cps-autocomplete-container\"\n [class.focused]=\"isOpened\"\n [ngClass]=\"{\n 'persistent-clear': persistentClear,\n borderless: appearance === 'borderless',\n underlined: appearance === 'underlined'\n }\">\n <div\n class=\"cps-autocomplete-box\"\n #autocompleteBox\n (mousedown)=\"onBoxClick()\">\n <div class=\"cps-autocomplete-box-area\">\n <cps-icon\n *ngIf=\"prefixIcon\"\n [icon]=\"prefixIcon\"\n [style.color]=\"disabled ? '#9a9595' : null\"\n [size]=\"prefixIconSize\"\n class=\"prefix-icon\">\n </cps-icon>\n <div\n class=\"cps-autocomplete-box-items\"\n *ngIf=\"\n (value && !multiple) || (value?.length > 0 && multiple);\n else autocompleteInput\n \">\n <span *ngIf=\"!multiple\" class=\"single-item\">\n <div class=\"single-item-selection\">\n <span [style.opacity]=\"activeSingle ? 0 : 1\">{{\n returnObject\n ? value[optionLabel]\n : (value | labelByValue : options : optionValue : optionLabel)\n }}</span>\n </div>\n <ng-container\n *ngTemplateOutlet=\"\n autocompleteInput;\n context: {\n inputClass: 'single-item-input',\n inputStyle: activeSingle ? 'opacity: 1' : null\n }\n \">\n </ng-container>\n </span>\n\n <div *ngIf=\"multiple && !chips\" class=\"text-group\">\n <div\n *ngFor=\"let val of value; let last = last\"\n class=\"text-group-item\"\n [ngClass]=\"{ 'about-to-remove': last && backspaceClickedOnce }\">\n {{\n returnObject\n ? val[optionLabel]\n : (val | labelByValue : options : optionValue : optionLabel)\n }}{{ !last ? ',' : '' }}\n </div>\n <ng-container *ngTemplateOutlet=\"autocompleteInput\"></ng-container>\n </div>\n\n <div *ngIf=\"multiple && chips\" class=\"chips-group\">\n <cps-chip\n *ngFor=\"let val of value; let last = last\"\n [disabled]=\"disabled\"\n [closable]=\"closableChips\"\n (closed)=\"select(val, true)\"\n [ngClass]=\"{ 'about-to-remove': last && backspaceClickedOnce }\"\n [label]=\"\n returnObject\n ? val[optionLabel]\n : (val | labelByValue : options : optionValue : optionLabel)\n \">\n </cps-chip>\n <ng-container *ngTemplateOutlet=\"autocompleteInput\"></ng-container>\n </div>\n </div>\n <span class=\"cps-autocomplete-box-icons\">\n <span\n *ngIf=\"clearable && !disabled\"\n [style.visibility]=\"\n persistentClear ||\n (!persistentClear &&\n ((multiple && value?.length) || (!multiple && value)))\n ? 'visible'\n : 'hidden'\n \"\n class=\"cps-autocomplete-box-clear-icon\">\n <cps-icon\n icon=\"delete\"\n size=\"small\"\n (click)=\"clear($event)\"></cps-icon>\n </span>\n <span\n class=\"cps-autocomplete-box-chevron\"\n (mousedown)=\"onChevronClick($event)\">\n <cps-icon\n icon=\"chevron-down\"\n size=\"small\"\n [color]=\"disabled ? 'text-light' : 'text-dark'\"></cps-icon>\n </span>\n </span>\n </div>\n </div>\n\n <cps-menu\n #optionsMenu\n [withArrow]=\"false\"\n (beforeMenuHidden)=\"onBeforeOptionsHidden()\"\n hideTransitionOptions=\"0s linear\"\n containerClass=\"cps-autocomplete-options-menu\">\n <div\n #optionsList\n class=\"cps-autocomplete-options\"\n [ngStyle]=\"{\n width: autocompleteBoxWidth + 'px'\n }\">\n <div\n *ngIf=\"filteredOptions.length < 1\"\n class=\"cps-autocomplete-options-empty\">\n {{ emptyMessage }}\n </div>\n <ng-container *ngIf=\"!virtualScroll\">\n <div\n class=\"cps-autocomplete-options-option select-all-option\"\n [class.allselected]=\"value?.length === options.length\"\n *ngIf=\"\n multiple &&\n selectAll &&\n filteredOptions.length === options.length &&\n options.length > 1\n \"\n (click)=\"toggleAll()\">\n <span class=\"cps-autocomplete-options-option-left\">\n <span\n *ngIf=\"multiple\"\n class=\"cps-autocomplete-options-option-check\">\n </span>\n <span class=\"cps-autocomplete-options-option-label\"\n >Select all</span\n >\n </span>\n </div>\n <ng-container *ngFor=\"let item of filteredOptions\">\n <ng-container\n *ngTemplateOutlet=\"\n itemTemplate;\n context: {\n item: item\n }\n \"></ng-container>\n </ng-container>\n </ng-container>\n <ng-container *ngIf=\"virtualScroll\">\n <p-virtualScroller\n #virtualList\n [value]=\"filteredOptions\"\n [delay]=\"0\"\n [scrollHeight]=\"virtualListHeight + 'px'\"\n [options]=\"{ numToleratedItems: 3 }\"\n [itemSize]=\"virtualScrollItemSize\">\n <ng-template pTemplate=\"item\" let-item>\n <ng-container\n *ngTemplateOutlet=\"\n itemTemplate;\n context: {\n item: item\n }\n \"></ng-container>\n </ng-template>\n </p-virtualScroller>\n </ng-container>\n </div>\n </cps-menu>\n <cps-progress-linear\n *ngIf=\"loading\"\n height=\"3\"\n radius=\"4\"\n opacity=\"0.3\"\n class=\"autocomplete-progress-bar\"\n bgColor=\"transparent\">\n </cps-progress-linear>\n </div>\n <div *ngIf=\"!error && !hideDetails\" class=\"cps-autocomplete-hint\">\n {{ hint }}\n </div>\n <div *ngIf=\"error && !hideDetails\" class=\"cps-autocomplete-error\">\n {{ error }}\n </div>\n</div>\n\n<ng-template\n #autocompleteInput\n let-inputClass=\"inputClass\"\n let-inputStyle=\"inputStyle\">\n <input\n class=\"cps-autocomplete-box-input\"\n spellcheck=\"false\"\n [class]=\"inputClass\"\n [style]=\"inputStyle\"\n [placeholder]=\"\n (!value && !multiple) || (value?.length < 1 && multiple)\n ? placeholder\n : ''\n \"\n (input)=\"filterOptions($event)\"\n (keydown)=\"onInputKeyDown($event)\"\n [(ngModel)]=\"inputText\"\n (blur)=\"onBlur()\" />\n</ng-template>\n\n<ng-template #itemTemplate let-item=\"item\">\n <div\n class=\"cps-autocomplete-options-option\"\n (click)=\"onOptionClick(item)\"\n [class.selected]=\"\n item | checkOptionSelected : value : multiple : returnObject : optionValue\n \">\n <span class=\"cps-autocomplete-options-option-left\">\n <span *ngIf=\"multiple\" class=\"cps-autocomplete-options-option-check\">\n </span>\n <span\n data-cy-id=\"cps-autocomplete-options\"\n class=\"cps-autocomplete-options-option-label\"\n [class.virtual-row]=\"virtualScroll\"\n >{{ item[optionLabel] }}</span\n >\n </span>\n\n <span\n class=\"cps-autocomplete-options-option-right\"\n [class.virtual-row]=\"virtualScroll\"\n >{{ item[optionInfo] }}</span\n >\n </div>\n</ng-template>\n", styles: [":host{display:flex}:host .cps-autocomplete{position:relative;width:100%;outline:none;font-family:Source Sans Pro,sans-serif;font-weight:400;display:grid}:host .cps-autocomplete .cps-autocomplete-container{position:relative}:host .cps-autocomplete .cps-autocomplete-container .autocomplete-progress-bar{position:absolute;bottom:1px;padding:0 1px}:host .cps-autocomplete .cps-autocomplete-container.focused .cps-autocomplete-box{background:white!important}:host .cps-autocomplete .cps-autocomplete-container.borderless .cps-autocomplete-box,:host .cps-autocomplete .cps-autocomplete-container.underlined .cps-autocomplete-box{line-height:1;border:none!important;border-radius:0}:host .cps-autocomplete .cps-autocomplete-container.underlined .cps-autocomplete-box{border-bottom:1px solid var(--cps-color-line-light)!important}:host .cps-autocomplete.active .cps-autocomplete-box{border:1px solid var(--cps-color-calm)}:host .cps-autocomplete.active .cps-autocomplete-box .cps-autocomplete-box-area .prefix-icon{color:var(--cps-color-calm)}:host .cps-autocomplete.active .cps-autocomplete-box .cps-autocomplete-box-chevron{top:22px;transform:rotate(180deg)}:host .cps-autocomplete .cps-autocomplete-label{align-items:center;display:inline-flex;margin-bottom:.2rem;color:var(--cps-color-text-dark);font-size:.875rem;font-weight:600}:host .cps-autocomplete .cps-autocomplete-label .cps-autocomplete-label-info-circle{margin-left:8px;pointer-events:all}:host .cps-autocomplete .persistent-clear .cps-autocomplete-box .cps-autocomplete-box-icons .cps-autocomplete-box-clear-icon cps-icon,:host .cps-autocomplete .cps-autocomplete-container.focused .cps-autocomplete-box .cps-autocomplete-box-icons .cps-autocomplete-box-clear-icon cps-icon,:host .cps-autocomplete .cps-autocomplete-container:hover .cps-autocomplete-box .cps-autocomplete-box-icons .cps-autocomplete-box-clear-icon cps-icon{opacity:.5}:host .cps-autocomplete .cps-autocomplete-box{overflow:hidden;min-height:38px;width:100%;cursor:text;background:white;font-size:1rem;outline:none;padding:0 12px;border-radius:4px;border:1px solid var(--cps-color-line-light);transition-duration:.2s}:host .cps-autocomplete .cps-autocomplete-box-area{display:flex;min-height:36px;align-items:center}:host .cps-autocomplete .cps-autocomplete-box-area .prefix-icon{margin-right:.5rem;color:var(--cps-color-text-dark)}:host .cps-autocomplete .cps-autocomplete-box-input{padding:0;background-color:transparent;width:0;min-width:30px;flex-grow:1;font-size:1rem;color:var(--cps-color-text-dark);border-style:none;outline:none;font-family:Source Sans Pro,sans-serif}:host .cps-autocomplete .cps-autocomplete-box-input::placeholder{color:var(--cps-color-text-lightest);font-style:italic;opacity:1}:host .cps-autocomplete .cps-autocomplete-box-items{display:inline-flex;flex-direction:column;width:100%;margin-top:3px;margin-bottom:3px;position:relative}:host .cps-autocomplete .cps-autocomplete-box-items .single-item{color:var(--cps-color-text-dark);display:inline-flex}:host .cps-autocomplete .cps-autocomplete-box-items .single-item-selection{display:inline-flex;letter-spacing:inherit;line-height:inherit;max-width:100%}:host .cps-autocomplete .cps-autocomplete-box-items .single-item-input{opacity:0;min-width:0;align-self:flex-start;flex:1 1;transition:none;position:absolute;top:0;bottom:0;width:100%;padding-inline-start:inherit;padding-inline-end:inherit}:host .cps-autocomplete .cps-autocomplete-box-items .chips-group{display:inline-flex;flex-wrap:wrap}:host .cps-autocomplete .cps-autocomplete-box-items .chips-group cps-chip{padding-bottom:3px;padding-top:3px;padding-right:4px}:host .cps-autocomplete .cps-autocomplete-box-items .text-group{color:var(--cps-color-text-dark);padding-top:3px;padding-bottom:3px;display:inline-flex;flex-wrap:wrap}:host .cps-autocomplete .cps-autocomplete-box-items .text-group .text-group-item{padding-bottom:3px;padding-top:2px;height:24px}:host .cps-autocomplete .cps-autocomplete-box-items .text-group .text-group-item:not(:first-child){padding-left:4px}:host .cps-autocomplete .cps-autocomplete-box:hover{border:1px solid var(--cps-color-calm)}:host .cps-autocomplete .cps-autocomplete-box:hover .cps-autocomplete-box-area .prefix-icon{color:var(--cps-color-calm)}:host .cps-autocomplete .cps-autocomplete-box .cps-autocomplete-box-icons{display:flex}:host .cps-autocomplete .cps-autocomplete-box .cps-autocomplete-box-icons .cps-autocomplete-box-clear-icon{cursor:pointer;display:flex;color:var(--cps-color-calm);margin-left:8px}:host .cps-autocomplete .cps-autocomplete-box .cps-autocomplete-box-icons .cps-autocomplete-box-clear-icon cps-icon{opacity:0;transition-duration:.2s}:host .cps-autocomplete .cps-autocomplete-box .cps-autocomplete-box-icons .cps-autocomplete-box-clear-icon cps-icon:hover{opacity:1!important}:host .cps-autocomplete .cps-autocomplete-box .cps-autocomplete-box-icons .cps-autocomplete-box-chevron{display:flex;margin-left:8px;transition-duration:.2s;cursor:pointer}:host .cps-autocomplete .cps-autocomplete-box .cps-autocomplete-box-icons .cps-autocomplete-box-chevron:hover ::ng-deep cps-icon .cps-icon{color:var(--cps-color-calm)!important}:host .cps-autocomplete .cps-autocomplete-hint{color:var(--cps-color-text-mild);font-size:.75rem;min-height:1.125rem;line-height:1.125rem;cursor:default;margin-top:.2rem}:host .cps-autocomplete .cps-autocomplete-error{color:#c33;font-weight:700;font-size:.75rem;min-height:1.125rem;line-height:1.125rem;cursor:default;margin-top:.2rem}:host .cps-autocomplete.disabled{pointer-events:none}:host .cps-autocomplete.disabled .cps-autocomplete-box{background:#f7f7f7}:host .cps-autocomplete.disabled .cps-autocomplete-box-items{color:var(--cps-color-text-light)}:host .cps-autocomplete.disabled .cps-autocomplete-box-items .text-group,:host .cps-autocomplete.disabled .cps-autocomplete-box-items .single-item{color:var(--cps-color-text-light)}:host .cps-autocomplete.disabled .cps-autocomplete-label{color:var(--cps-color-text-mild)}:host .cps-autocomplete.error .cps-autocomplete-box{border-color:#c33!important;background:#fef3f2}:host .about-to-remove{color:var(--cps-color-text-light)}:host .about-to-remove ::ng-deep .cps-chip{background-color:var(--cps-color-bg-mid)}.cps-autocomplete-options{font-family:Source Sans Pro,sans-serif;background:white;overflow-x:hidden;max-height:242px;overflow-y:auto}.cps-autocomplete-options .cps-autocomplete-options-empty{padding:11px;font-size:16px;cursor:default;color:var(--cps-color-text-dark)}.cps-autocomplete-options .cps-autocomplete-options-option{padding:12px;justify-content:space-between;display:flex;cursor:pointer}.cps-autocomplete-options .cps-autocomplete-options-option:hover{background:#f8f4f5}.cps-autocomplete-options .cps-autocomplete-options-option-label{color:var(--cps-color-text-dark)}.cps-autocomplete-options .cps-autocomplete-options-option-left{display:flex;align-items:center;margin-right:8px}.cps-autocomplete-options .cps-autocomplete-options-option-right{color:var(--cps-color-text-light);text-align:right}.cps-autocomplete-options .cps-autocomplete-options-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}.cps-autocomplete-options .cps-autocomplete-options-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)}.cps-autocomplete-options .cps-autocomplete-options-option.selected,.cps-autocomplete-options .cps-autocomplete-options-option.allselected{font-weight:600}.cps-autocomplete-options .cps-autocomplete-options-option.selected .cps-autocomplete-options-option-label,.cps-autocomplete-options .cps-autocomplete-options-option.allselected .cps-autocomplete-options-option-label{color:var(--cps-color-calm)}.cps-autocomplete-options .cps-autocomplete-options-option.selected .cps-autocomplete-options-option-check,.cps-autocomplete-options .cps-autocomplete-options-option.allselected .cps-autocomplete-options-option-check{opacity:1}.cps-autocomplete-options .cps-autocomplete-options-option.selected{background:#efe4e7}.cps-autocomplete-options .cps-autocomplete-options-option.highlighten{background:#f5eeef}.cps-autocomplete-options .cps-autocomplete-options-option.selected.highlighten{background:#e6d4d9}.cps-autocomplete-options .select-all-option{border-bottom:1px solid lightgrey;font-weight:600}.cps-autocomplete-options ::ng-deep .p-virtualscroller-list.p-scroller{overflow-anchor:none}.cps-autocomplete-options .virtual-row{white-space:nowrap}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i3.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { 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: "component", type: CpsInfoCircleComponent, selector: "cps-info-circle", inputs: ["size", "tooltipText", "tooltipPosition", "tooltipContentClass", "tooltipMaxWidth", "tooltipPersistent"] }, { kind: "pipe", type: LabelByValuePipe, name: "labelByValue" }, { kind: "pipe", type: CheckOptionSelectedPipe, name: "checkOptionSelected" }, { kind: "ngmodule", type: VirtualScrollerModule }, { kind: "component", type: i4.VirtualScroller, selector: "p-virtualScroller", inputs: ["value", "itemSize", "style", "styleClass", "scrollHeight", "lazy", "options", "delay"], outputs: ["onLazyLoad"] }, { kind: "directive", type: i5.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "component", type: CpsMenuComponent, selector: "cps-menu", inputs: ["header", "items", "withArrow", "compressed", "focusOnShow", "persistent", "containerClass", "showTransitionOptions", "hideTransitionOptions"], outputs: ["menuShown", "menuHidden", "beforeMenuHidden", "contentClicked"] }] });
484
484
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: CpsAutocompleteComponent, decorators: [{
485
485
  type: Component,
486
486
  args: [{ standalone: true, imports: [
@@ -494,7 +494,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
494
494
  CheckOptionSelectedPipe,
495
495
  VirtualScrollerModule,
496
496
  CpsMenuComponent
497
- ], providers: [LabelByValuePipe, CheckOptionSelectedPipe], selector: 'cps-autocomplete', template: "<div\n data-cy-id=\"cps-autocomplete\"\n [ngStyle]=\"{ width: cvtWidth }\"\n class=\"cps-autocomplete\"\n tabindex=\"1\"\n [ngClass]=\"{ disabled: disabled, error: error, active: isOpened }\"\n #autocompleteContainer>\n <div class=\"cps-autocomplete-label\" *ngIf=\"label\">\n <label>{{ label }}</label>\n <cps-info-circle\n *ngIf=\"infoTooltip\"\n class=\"cps-autocomplete-label-info-circle\"\n size=\"xsmall\"\n [tooltipPosition]=\"infoTooltipPosition\"\n [tooltipContentClass]=\"infoTooltipClass\"\n [tooltipMaxWidth]=\"infoTooltipMaxWidth\"\n [tooltipPersistent]=\"infoTooltipPersistent\"\n [tooltipText]=\"infoTooltip\">\n </cps-info-circle>\n </div>\n <div\n (keydown)=\"onContainerKeyDown($event)\"\n class=\"cps-autocomplete-container\"\n [class.focused]=\"isOpened\"\n [ngClass]=\"{\n 'persistent-clear': persistentClear,\n borderless: appearance === 'borderless',\n underlined: appearance === 'underlined'\n }\">\n <div class=\"cps-autocomplete-box\" #autocompleteBox (click)=\"onBoxClick()\">\n <div class=\"cps-autocomplete-box-area\">\n <cps-icon\n *ngIf=\"prefixIcon\"\n [icon]=\"prefixIcon\"\n [style.color]=\"disabled ? '#9a9595' : null\"\n [size]=\"prefixIconSize\"\n class=\"prefix-icon\">\n </cps-icon>\n <div\n class=\"cps-autocomplete-box-items\"\n *ngIf=\"\n (value && !multiple) || (value?.length > 0 && multiple);\n else autocompleteInput\n \">\n <span *ngIf=\"!multiple\" class=\"single-item\">\n <div class=\"single-item-selection\">\n <span [style.opacity]=\"activeSingle ? 0 : 1\">{{\n returnObject\n ? value[optionLabel]\n : (value | labelByValue : options : optionValue : optionLabel)\n }}</span>\n </div>\n <ng-container\n *ngTemplateOutlet=\"\n autocompleteInput;\n context: {\n inputClass: 'single-item-input',\n inputStyle: activeSingle ? 'opacity: 1' : null\n }\n \">\n </ng-container>\n </span>\n\n <div *ngIf=\"multiple && !chips\" class=\"text-group\">\n <div\n *ngFor=\"let val of value; let last = last\"\n class=\"text-group-item\"\n [ngClass]=\"{ 'about-to-remove': last && backspaceClickedOnce }\">\n {{\n returnObject\n ? val[optionLabel]\n : (val | labelByValue : options : optionValue : optionLabel)\n }}{{ !last ? ',' : '' }}\n </div>\n <ng-container *ngTemplateOutlet=\"autocompleteInput\"></ng-container>\n </div>\n\n <div *ngIf=\"multiple && chips\" class=\"chips-group\">\n <cps-chip\n *ngFor=\"let val of value; let last = last\"\n [disabled]=\"disabled\"\n [closable]=\"closableChips\"\n (closed)=\"select(val, true)\"\n [ngClass]=\"{ 'about-to-remove': last && backspaceClickedOnce }\"\n [label]=\"\n returnObject\n ? val[optionLabel]\n : (val | labelByValue : options : optionValue : optionLabel)\n \">\n </cps-chip>\n <ng-container *ngTemplateOutlet=\"autocompleteInput\"></ng-container>\n </div>\n </div>\n <span class=\"cps-autocomplete-box-icons\">\n <span\n *ngIf=\"clearable && !disabled\"\n [style.visibility]=\"\n persistentClear ||\n (!persistentClear &&\n ((multiple && value?.length) || (!multiple && value)))\n ? 'visible'\n : 'hidden'\n \"\n class=\"cps-autocomplete-box-clear-icon\">\n <cps-icon\n icon=\"delete\"\n size=\"small\"\n (click)=\"clear($event)\"></cps-icon>\n </span>\n <span\n class=\"cps-autocomplete-box-chevron\"\n (click)=\"onChevronClick($event)\">\n <cps-icon\n icon=\"chevron-down\"\n size=\"small\"\n [color]=\"disabled ? 'text-light' : 'text-dark'\"></cps-icon>\n </span>\n </span>\n </div>\n </div>\n\n <cps-menu\n #optionsMenu\n [withArrow]=\"false\"\n (beforeMenuHidden)=\"onBeforeOptionsHidden()\"\n hideTransitionOptions=\"0s linear\"\n containerClass=\"cps-autocomplete-options-menu\">\n <div\n #optionsList\n class=\"cps-autocomplete-options\"\n [ngStyle]=\"{\n width: autocompleteBoxWidth + 'px'\n }\">\n <div\n *ngIf=\"filteredOptions.length < 1\"\n class=\"cps-autocomplete-options-empty\">\n {{ emptyMessage }}\n </div>\n <ng-container *ngIf=\"!virtualScroll\">\n <div\n class=\"cps-autocomplete-options-option select-all-option\"\n [class.allselected]=\"value?.length === options.length\"\n *ngIf=\"\n multiple &&\n selectAll &&\n filteredOptions.length === options.length &&\n options.length > 1\n \"\n (click)=\"toggleAll()\">\n <span class=\"cps-autocomplete-options-option-left\">\n <span\n *ngIf=\"multiple\"\n class=\"cps-autocomplete-options-option-check\">\n </span>\n <span class=\"cps-autocomplete-options-option-label\"\n >Select all</span\n >\n </span>\n </div>\n <ng-container *ngFor=\"let item of filteredOptions\">\n <ng-container\n *ngTemplateOutlet=\"\n itemTemplate;\n context: {\n item: item\n }\n \"></ng-container>\n </ng-container>\n </ng-container>\n <ng-container *ngIf=\"virtualScroll\">\n <p-virtualScroller\n #virtualList\n [value]=\"filteredOptions\"\n [delay]=\"0\"\n [scrollHeight]=\"virtualListHeight + 'px'\"\n [options]=\"{ numToleratedItems: 3 }\"\n [itemSize]=\"virtualScrollItemSize\">\n <ng-template pTemplate=\"item\" let-item>\n <ng-container\n *ngTemplateOutlet=\"\n itemTemplate;\n context: {\n item: item\n }\n \"></ng-container>\n </ng-template>\n </p-virtualScroller>\n </ng-container>\n </div>\n </cps-menu>\n <cps-progress-linear\n *ngIf=\"loading\"\n height=\"3\"\n radius=\"4\"\n opacity=\"0.3\"\n class=\"autocomplete-progress-bar\"\n bgColor=\"transparent\">\n </cps-progress-linear>\n </div>\n <div *ngIf=\"!error && !hideDetails\" class=\"cps-autocomplete-hint\">\n {{ hint }}\n </div>\n <div *ngIf=\"error && !hideDetails\" class=\"cps-autocomplete-error\">\n {{ error }}\n </div>\n</div>\n\n<ng-template\n #autocompleteInput\n let-inputClass=\"inputClass\"\n let-inputStyle=\"inputStyle\">\n <input\n class=\"cps-autocomplete-box-input\"\n spellcheck=\"false\"\n [class]=\"inputClass\"\n [style]=\"inputStyle\"\n [placeholder]=\"\n (!value && !multiple) || (value?.length < 1 && multiple)\n ? placeholder\n : ''\n \"\n (input)=\"filterOptions($event)\"\n (keydown)=\"onInputKeyDown($event)\"\n [(ngModel)]=\"inputText\"\n (blur)=\"onBlur()\" />\n</ng-template>\n\n<ng-template #itemTemplate let-item=\"item\">\n <div\n class=\"cps-autocomplete-options-option\"\n (click)=\"onOptionClick(item)\"\n [class.selected]=\"\n item | checkOptionSelected : value : multiple : returnObject : optionValue\n \">\n <span class=\"cps-autocomplete-options-option-left\">\n <span *ngIf=\"multiple\" class=\"cps-autocomplete-options-option-check\">\n </span>\n <span\n data-cy-id=\"cps-autocomplete-options\"\n class=\"cps-autocomplete-options-option-label\"\n [class.virtual-row]=\"virtualScroll\"\n >{{ item[optionLabel] }}</span\n >\n </span>\n\n <span\n class=\"cps-autocomplete-options-option-right\"\n [class.virtual-row]=\"virtualScroll\"\n >{{ item[optionInfo] }}</span\n >\n </div>\n</ng-template>\n", styles: [":host{display:flex}:host .cps-autocomplete{position:relative;width:100%;outline:none;font-family:Source Sans Pro,sans-serif;display:grid}:host .cps-autocomplete .cps-autocomplete-container{position:relative}:host .cps-autocomplete .cps-autocomplete-container .autocomplete-progress-bar{position:absolute;bottom:1px;padding:0 1px}:host .cps-autocomplete .cps-autocomplete-container.focused .cps-autocomplete-box{background:white!important}:host .cps-autocomplete .cps-autocomplete-container.borderless .cps-autocomplete-box,:host .cps-autocomplete .cps-autocomplete-container.underlined .cps-autocomplete-box{line-height:1;border:none!important;border-radius:0}:host .cps-autocomplete .cps-autocomplete-container.underlined .cps-autocomplete-box{border-bottom:1px solid var(--cps-color-line-light)!important}:host .cps-autocomplete.active .cps-autocomplete-box{border:1px solid var(--cps-color-calm)}:host .cps-autocomplete.active .cps-autocomplete-box .cps-autocomplete-box-area .prefix-icon{color:var(--cps-color-calm)}:host .cps-autocomplete.active .cps-autocomplete-box .cps-autocomplete-box-chevron{top:22px;transform:rotate(180deg)}:host .cps-autocomplete .cps-autocomplete-label{align-items:center;display:inline-flex;margin-bottom:.2rem;color:var(--cps-color-text-dark);font-size:.875rem;font-weight:600}:host .cps-autocomplete .cps-autocomplete-label .cps-autocomplete-label-info-circle{margin-left:8px;pointer-events:all}:host .cps-autocomplete .persistent-clear .cps-autocomplete-box .cps-autocomplete-box-icons .cps-autocomplete-box-clear-icon cps-icon,:host .cps-autocomplete .cps-autocomplete-container.focused .cps-autocomplete-box .cps-autocomplete-box-icons .cps-autocomplete-box-clear-icon cps-icon,:host .cps-autocomplete .cps-autocomplete-container:hover .cps-autocomplete-box .cps-autocomplete-box-icons .cps-autocomplete-box-clear-icon cps-icon{opacity:.5}:host .cps-autocomplete .cps-autocomplete-box{overflow:hidden;min-height:38px;width:100%;cursor:text;background:white;font-size:1rem;outline:none;padding:0 12px;border-radius:4px;border:1px solid var(--cps-color-line-light);transition-duration:.2s}:host .cps-autocomplete .cps-autocomplete-box-area{display:flex;min-height:36px;align-items:center}:host .cps-autocomplete .cps-autocomplete-box-area .prefix-icon{margin-right:.5rem;color:var(--cps-color-text-dark)}:host .cps-autocomplete .cps-autocomplete-box-input{padding:0;background-color:transparent;width:0;min-width:30px;flex-grow:1;font-size:1rem;color:var(--cps-color-text-dark);border-style:none;outline:none;font-family:Source Sans Pro,sans-serif}:host .cps-autocomplete .cps-autocomplete-box-input::placeholder{color:var(--cps-color-text-lightest);font-style:italic;opacity:1}:host .cps-autocomplete .cps-autocomplete-box-items{display:inline-flex;flex-direction:column;width:100%;margin-top:3px;margin-bottom:3px;position:relative}:host .cps-autocomplete .cps-autocomplete-box-items .single-item{color:var(--cps-color-text-dark);display:inline-flex}:host .cps-autocomplete .cps-autocomplete-box-items .single-item-selection{display:inline-flex;letter-spacing:inherit;line-height:inherit;max-width:100%}:host .cps-autocomplete .cps-autocomplete-box-items .single-item-input{opacity:0;min-width:0;align-self:flex-start;flex:1 1;transition:none;position:absolute;top:0;bottom:0;width:100%;padding-inline-start:inherit;padding-inline-end:inherit}:host .cps-autocomplete .cps-autocomplete-box-items .chips-group{display:inline-flex;flex-wrap:wrap}:host .cps-autocomplete .cps-autocomplete-box-items .chips-group cps-chip{padding-bottom:3px;padding-top:3px;padding-right:4px}:host .cps-autocomplete .cps-autocomplete-box-items .text-group{color:var(--cps-color-text-dark);padding-top:3px;padding-bottom:3px;display:inline-flex;flex-wrap:wrap}:host .cps-autocomplete .cps-autocomplete-box-items .text-group .text-group-item{padding-bottom:3px;padding-top:2px;padding-right:4px;height:24px}:host .cps-autocomplete .cps-autocomplete-box:hover{border:1px solid var(--cps-color-calm)}:host .cps-autocomplete .cps-autocomplete-box:hover .cps-autocomplete-box-area .prefix-icon{color:var(--cps-color-calm)}:host .cps-autocomplete .cps-autocomplete-box .cps-autocomplete-box-icons{display:flex}:host .cps-autocomplete .cps-autocomplete-box .cps-autocomplete-box-icons .cps-autocomplete-box-clear-icon{cursor:pointer;display:flex;color:var(--cps-color-calm);margin-left:8px}:host .cps-autocomplete .cps-autocomplete-box .cps-autocomplete-box-icons .cps-autocomplete-box-clear-icon cps-icon{opacity:0;transition-duration:.2s}:host .cps-autocomplete .cps-autocomplete-box .cps-autocomplete-box-icons .cps-autocomplete-box-clear-icon cps-icon:hover{opacity:1!important}:host .cps-autocomplete .cps-autocomplete-box .cps-autocomplete-box-icons .cps-autocomplete-box-chevron{display:flex;margin-left:8px;transition-duration:.2s;cursor:pointer}:host .cps-autocomplete .cps-autocomplete-box .cps-autocomplete-box-icons .cps-autocomplete-box-chevron:hover ::ng-deep cps-icon .cps-icon{color:var(--cps-color-calm)!important}:host .cps-autocomplete .cps-autocomplete-hint{color:var(--cps-color-text-mild);font-size:.75rem;min-height:1.125rem;line-height:1.125rem;cursor:default;margin-top:.2rem}:host .cps-autocomplete .cps-autocomplete-error{color:#c33;font-weight:700;font-size:.75rem;min-height:1.125rem;line-height:1.125rem;cursor:default;margin-top:.2rem}:host .cps-autocomplete.disabled{pointer-events:none}:host .cps-autocomplete.disabled .cps-autocomplete-box{background:#f7f7f7}:host .cps-autocomplete.disabled .cps-autocomplete-box-items{color:var(--cps-color-text-light)}:host .cps-autocomplete.disabled .cps-autocomplete-box-items .text-group,:host .cps-autocomplete.disabled .cps-autocomplete-box-items .single-item{color:var(--cps-color-text-light)}:host .cps-autocomplete.disabled .cps-autocomplete-label{color:var(--cps-color-text-mild)}:host .cps-autocomplete.error .cps-autocomplete-box{border-color:#c33!important;background:#fef3f2}:host .about-to-remove{color:var(--cps-color-text-light)}:host .about-to-remove ::ng-deep .cps-chip{background-color:var(--cps-color-bg-mid)}.cps-autocomplete-options{font-family:Source Sans Pro,sans-serif;background:white;overflow-x:hidden;max-height:242px;overflow-y:auto}.cps-autocomplete-options .cps-autocomplete-options-empty{padding:11px;font-size:16px;cursor:default;color:var(--cps-color-text-dark)}.cps-autocomplete-options .cps-autocomplete-options-option{padding:12px;justify-content:space-between;display:flex;cursor:pointer}.cps-autocomplete-options .cps-autocomplete-options-option:hover{background:#f8f4f5}.cps-autocomplete-options .cps-autocomplete-options-option-label{color:var(--cps-color-text-dark)}.cps-autocomplete-options .cps-autocomplete-options-option-left{display:flex;align-items:center;margin-right:8px}.cps-autocomplete-options .cps-autocomplete-options-option-right{color:var(--cps-color-text-light);text-align:right}.cps-autocomplete-options .cps-autocomplete-options-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}.cps-autocomplete-options .cps-autocomplete-options-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)}.cps-autocomplete-options .cps-autocomplete-options-option.selected,.cps-autocomplete-options .cps-autocomplete-options-option.allselected{font-weight:600}.cps-autocomplete-options .cps-autocomplete-options-option.selected .cps-autocomplete-options-option-label,.cps-autocomplete-options .cps-autocomplete-options-option.allselected .cps-autocomplete-options-option-label{color:var(--cps-color-calm)}.cps-autocomplete-options .cps-autocomplete-options-option.selected .cps-autocomplete-options-option-check,.cps-autocomplete-options .cps-autocomplete-options-option.allselected .cps-autocomplete-options-option-check{opacity:1}.cps-autocomplete-options .cps-autocomplete-options-option.selected{background:#efe4e7}.cps-autocomplete-options .cps-autocomplete-options-option.highlighten{background:#f5eeef}.cps-autocomplete-options .cps-autocomplete-options-option.selected.highlighten{background:#e6d4d9}.cps-autocomplete-options .select-all-option{border-bottom:1px solid lightgrey;font-weight:600}.cps-autocomplete-options ::ng-deep .p-virtualscroller-list.p-scroller{overflow-anchor:none}.cps-autocomplete-options .virtual-row{white-space:nowrap}\n"] }]
497
+ ], providers: [LabelByValuePipe, CheckOptionSelectedPipe], selector: 'cps-autocomplete', template: "<div\n data-cy-id=\"cps-autocomplete\"\n [ngStyle]=\"{ width: cvtWidth }\"\n class=\"cps-autocomplete\"\n tabindex=\"1\"\n [ngClass]=\"{ disabled: disabled, error: error, active: isOpened }\"\n #autocompleteContainer>\n <div class=\"cps-autocomplete-label\" *ngIf=\"label\">\n <label>{{ label }}</label>\n <cps-info-circle\n *ngIf=\"infoTooltip\"\n class=\"cps-autocomplete-label-info-circle\"\n size=\"xsmall\"\n [tooltipPosition]=\"infoTooltipPosition\"\n [tooltipContentClass]=\"infoTooltipClass\"\n [tooltipMaxWidth]=\"infoTooltipMaxWidth\"\n [tooltipPersistent]=\"infoTooltipPersistent\"\n [tooltipText]=\"infoTooltip\">\n </cps-info-circle>\n </div>\n <div\n (keydown)=\"onContainerKeyDown($event)\"\n class=\"cps-autocomplete-container\"\n [class.focused]=\"isOpened\"\n [ngClass]=\"{\n 'persistent-clear': persistentClear,\n borderless: appearance === 'borderless',\n underlined: appearance === 'underlined'\n }\">\n <div\n class=\"cps-autocomplete-box\"\n #autocompleteBox\n (mousedown)=\"onBoxClick()\">\n <div class=\"cps-autocomplete-box-area\">\n <cps-icon\n *ngIf=\"prefixIcon\"\n [icon]=\"prefixIcon\"\n [style.color]=\"disabled ? '#9a9595' : null\"\n [size]=\"prefixIconSize\"\n class=\"prefix-icon\">\n </cps-icon>\n <div\n class=\"cps-autocomplete-box-items\"\n *ngIf=\"\n (value && !multiple) || (value?.length > 0 && multiple);\n else autocompleteInput\n \">\n <span *ngIf=\"!multiple\" class=\"single-item\">\n <div class=\"single-item-selection\">\n <span [style.opacity]=\"activeSingle ? 0 : 1\">{{\n returnObject\n ? value[optionLabel]\n : (value | labelByValue : options : optionValue : optionLabel)\n }}</span>\n </div>\n <ng-container\n *ngTemplateOutlet=\"\n autocompleteInput;\n context: {\n inputClass: 'single-item-input',\n inputStyle: activeSingle ? 'opacity: 1' : null\n }\n \">\n </ng-container>\n </span>\n\n <div *ngIf=\"multiple && !chips\" class=\"text-group\">\n <div\n *ngFor=\"let val of value; let last = last\"\n class=\"text-group-item\"\n [ngClass]=\"{ 'about-to-remove': last && backspaceClickedOnce }\">\n {{\n returnObject\n ? val[optionLabel]\n : (val | labelByValue : options : optionValue : optionLabel)\n }}{{ !last ? ',' : '' }}\n </div>\n <ng-container *ngTemplateOutlet=\"autocompleteInput\"></ng-container>\n </div>\n\n <div *ngIf=\"multiple && chips\" class=\"chips-group\">\n <cps-chip\n *ngFor=\"let val of value; let last = last\"\n [disabled]=\"disabled\"\n [closable]=\"closableChips\"\n (closed)=\"select(val, true)\"\n [ngClass]=\"{ 'about-to-remove': last && backspaceClickedOnce }\"\n [label]=\"\n returnObject\n ? val[optionLabel]\n : (val | labelByValue : options : optionValue : optionLabel)\n \">\n </cps-chip>\n <ng-container *ngTemplateOutlet=\"autocompleteInput\"></ng-container>\n </div>\n </div>\n <span class=\"cps-autocomplete-box-icons\">\n <span\n *ngIf=\"clearable && !disabled\"\n [style.visibility]=\"\n persistentClear ||\n (!persistentClear &&\n ((multiple && value?.length) || (!multiple && value)))\n ? 'visible'\n : 'hidden'\n \"\n class=\"cps-autocomplete-box-clear-icon\">\n <cps-icon\n icon=\"delete\"\n size=\"small\"\n (click)=\"clear($event)\"></cps-icon>\n </span>\n <span\n class=\"cps-autocomplete-box-chevron\"\n (mousedown)=\"onChevronClick($event)\">\n <cps-icon\n icon=\"chevron-down\"\n size=\"small\"\n [color]=\"disabled ? 'text-light' : 'text-dark'\"></cps-icon>\n </span>\n </span>\n </div>\n </div>\n\n <cps-menu\n #optionsMenu\n [withArrow]=\"false\"\n (beforeMenuHidden)=\"onBeforeOptionsHidden()\"\n hideTransitionOptions=\"0s linear\"\n containerClass=\"cps-autocomplete-options-menu\">\n <div\n #optionsList\n class=\"cps-autocomplete-options\"\n [ngStyle]=\"{\n width: autocompleteBoxWidth + 'px'\n }\">\n <div\n *ngIf=\"filteredOptions.length < 1\"\n class=\"cps-autocomplete-options-empty\">\n {{ emptyMessage }}\n </div>\n <ng-container *ngIf=\"!virtualScroll\">\n <div\n class=\"cps-autocomplete-options-option select-all-option\"\n [class.allselected]=\"value?.length === options.length\"\n *ngIf=\"\n multiple &&\n selectAll &&\n filteredOptions.length === options.length &&\n options.length > 1\n \"\n (click)=\"toggleAll()\">\n <span class=\"cps-autocomplete-options-option-left\">\n <span\n *ngIf=\"multiple\"\n class=\"cps-autocomplete-options-option-check\">\n </span>\n <span class=\"cps-autocomplete-options-option-label\"\n >Select all</span\n >\n </span>\n </div>\n <ng-container *ngFor=\"let item of filteredOptions\">\n <ng-container\n *ngTemplateOutlet=\"\n itemTemplate;\n context: {\n item: item\n }\n \"></ng-container>\n </ng-container>\n </ng-container>\n <ng-container *ngIf=\"virtualScroll\">\n <p-virtualScroller\n #virtualList\n [value]=\"filteredOptions\"\n [delay]=\"0\"\n [scrollHeight]=\"virtualListHeight + 'px'\"\n [options]=\"{ numToleratedItems: 3 }\"\n [itemSize]=\"virtualScrollItemSize\">\n <ng-template pTemplate=\"item\" let-item>\n <ng-container\n *ngTemplateOutlet=\"\n itemTemplate;\n context: {\n item: item\n }\n \"></ng-container>\n </ng-template>\n </p-virtualScroller>\n </ng-container>\n </div>\n </cps-menu>\n <cps-progress-linear\n *ngIf=\"loading\"\n height=\"3\"\n radius=\"4\"\n opacity=\"0.3\"\n class=\"autocomplete-progress-bar\"\n bgColor=\"transparent\">\n </cps-progress-linear>\n </div>\n <div *ngIf=\"!error && !hideDetails\" class=\"cps-autocomplete-hint\">\n {{ hint }}\n </div>\n <div *ngIf=\"error && !hideDetails\" class=\"cps-autocomplete-error\">\n {{ error }}\n </div>\n</div>\n\n<ng-template\n #autocompleteInput\n let-inputClass=\"inputClass\"\n let-inputStyle=\"inputStyle\">\n <input\n class=\"cps-autocomplete-box-input\"\n spellcheck=\"false\"\n [class]=\"inputClass\"\n [style]=\"inputStyle\"\n [placeholder]=\"\n (!value && !multiple) || (value?.length < 1 && multiple)\n ? placeholder\n : ''\n \"\n (input)=\"filterOptions($event)\"\n (keydown)=\"onInputKeyDown($event)\"\n [(ngModel)]=\"inputText\"\n (blur)=\"onBlur()\" />\n</ng-template>\n\n<ng-template #itemTemplate let-item=\"item\">\n <div\n class=\"cps-autocomplete-options-option\"\n (click)=\"onOptionClick(item)\"\n [class.selected]=\"\n item | checkOptionSelected : value : multiple : returnObject : optionValue\n \">\n <span class=\"cps-autocomplete-options-option-left\">\n <span *ngIf=\"multiple\" class=\"cps-autocomplete-options-option-check\">\n </span>\n <span\n data-cy-id=\"cps-autocomplete-options\"\n class=\"cps-autocomplete-options-option-label\"\n [class.virtual-row]=\"virtualScroll\"\n >{{ item[optionLabel] }}</span\n >\n </span>\n\n <span\n class=\"cps-autocomplete-options-option-right\"\n [class.virtual-row]=\"virtualScroll\"\n >{{ item[optionInfo] }}</span\n >\n </div>\n</ng-template>\n", styles: [":host{display:flex}:host .cps-autocomplete{position:relative;width:100%;outline:none;font-family:Source Sans Pro,sans-serif;font-weight:400;display:grid}:host .cps-autocomplete .cps-autocomplete-container{position:relative}:host .cps-autocomplete .cps-autocomplete-container .autocomplete-progress-bar{position:absolute;bottom:1px;padding:0 1px}:host .cps-autocomplete .cps-autocomplete-container.focused .cps-autocomplete-box{background:white!important}:host .cps-autocomplete .cps-autocomplete-container.borderless .cps-autocomplete-box,:host .cps-autocomplete .cps-autocomplete-container.underlined .cps-autocomplete-box{line-height:1;border:none!important;border-radius:0}:host .cps-autocomplete .cps-autocomplete-container.underlined .cps-autocomplete-box{border-bottom:1px solid var(--cps-color-line-light)!important}:host .cps-autocomplete.active .cps-autocomplete-box{border:1px solid var(--cps-color-calm)}:host .cps-autocomplete.active .cps-autocomplete-box .cps-autocomplete-box-area .prefix-icon{color:var(--cps-color-calm)}:host .cps-autocomplete.active .cps-autocomplete-box .cps-autocomplete-box-chevron{top:22px;transform:rotate(180deg)}:host .cps-autocomplete .cps-autocomplete-label{align-items:center;display:inline-flex;margin-bottom:.2rem;color:var(--cps-color-text-dark);font-size:.875rem;font-weight:600}:host .cps-autocomplete .cps-autocomplete-label .cps-autocomplete-label-info-circle{margin-left:8px;pointer-events:all}:host .cps-autocomplete .persistent-clear .cps-autocomplete-box .cps-autocomplete-box-icons .cps-autocomplete-box-clear-icon cps-icon,:host .cps-autocomplete .cps-autocomplete-container.focused .cps-autocomplete-box .cps-autocomplete-box-icons .cps-autocomplete-box-clear-icon cps-icon,:host .cps-autocomplete .cps-autocomplete-container:hover .cps-autocomplete-box .cps-autocomplete-box-icons .cps-autocomplete-box-clear-icon cps-icon{opacity:.5}:host .cps-autocomplete .cps-autocomplete-box{overflow:hidden;min-height:38px;width:100%;cursor:text;background:white;font-size:1rem;outline:none;padding:0 12px;border-radius:4px;border:1px solid var(--cps-color-line-light);transition-duration:.2s}:host .cps-autocomplete .cps-autocomplete-box-area{display:flex;min-height:36px;align-items:center}:host .cps-autocomplete .cps-autocomplete-box-area .prefix-icon{margin-right:.5rem;color:var(--cps-color-text-dark)}:host .cps-autocomplete .cps-autocomplete-box-input{padding:0;background-color:transparent;width:0;min-width:30px;flex-grow:1;font-size:1rem;color:var(--cps-color-text-dark);border-style:none;outline:none;font-family:Source Sans Pro,sans-serif}:host .cps-autocomplete .cps-autocomplete-box-input::placeholder{color:var(--cps-color-text-lightest);font-style:italic;opacity:1}:host .cps-autocomplete .cps-autocomplete-box-items{display:inline-flex;flex-direction:column;width:100%;margin-top:3px;margin-bottom:3px;position:relative}:host .cps-autocomplete .cps-autocomplete-box-items .single-item{color:var(--cps-color-text-dark);display:inline-flex}:host .cps-autocomplete .cps-autocomplete-box-items .single-item-selection{display:inline-flex;letter-spacing:inherit;line-height:inherit;max-width:100%}:host .cps-autocomplete .cps-autocomplete-box-items .single-item-input{opacity:0;min-width:0;align-self:flex-start;flex:1 1;transition:none;position:absolute;top:0;bottom:0;width:100%;padding-inline-start:inherit;padding-inline-end:inherit}:host .cps-autocomplete .cps-autocomplete-box-items .chips-group{display:inline-flex;flex-wrap:wrap}:host .cps-autocomplete .cps-autocomplete-box-items .chips-group cps-chip{padding-bottom:3px;padding-top:3px;padding-right:4px}:host .cps-autocomplete .cps-autocomplete-box-items .text-group{color:var(--cps-color-text-dark);padding-top:3px;padding-bottom:3px;display:inline-flex;flex-wrap:wrap}:host .cps-autocomplete .cps-autocomplete-box-items .text-group .text-group-item{padding-bottom:3px;padding-top:2px;height:24px}:host .cps-autocomplete .cps-autocomplete-box-items .text-group .text-group-item:not(:first-child){padding-left:4px}:host .cps-autocomplete .cps-autocomplete-box:hover{border:1px solid var(--cps-color-calm)}:host .cps-autocomplete .cps-autocomplete-box:hover .cps-autocomplete-box-area .prefix-icon{color:var(--cps-color-calm)}:host .cps-autocomplete .cps-autocomplete-box .cps-autocomplete-box-icons{display:flex}:host .cps-autocomplete .cps-autocomplete-box .cps-autocomplete-box-icons .cps-autocomplete-box-clear-icon{cursor:pointer;display:flex;color:var(--cps-color-calm);margin-left:8px}:host .cps-autocomplete .cps-autocomplete-box .cps-autocomplete-box-icons .cps-autocomplete-box-clear-icon cps-icon{opacity:0;transition-duration:.2s}:host .cps-autocomplete .cps-autocomplete-box .cps-autocomplete-box-icons .cps-autocomplete-box-clear-icon cps-icon:hover{opacity:1!important}:host .cps-autocomplete .cps-autocomplete-box .cps-autocomplete-box-icons .cps-autocomplete-box-chevron{display:flex;margin-left:8px;transition-duration:.2s;cursor:pointer}:host .cps-autocomplete .cps-autocomplete-box .cps-autocomplete-box-icons .cps-autocomplete-box-chevron:hover ::ng-deep cps-icon .cps-icon{color:var(--cps-color-calm)!important}:host .cps-autocomplete .cps-autocomplete-hint{color:var(--cps-color-text-mild);font-size:.75rem;min-height:1.125rem;line-height:1.125rem;cursor:default;margin-top:.2rem}:host .cps-autocomplete .cps-autocomplete-error{color:#c33;font-weight:700;font-size:.75rem;min-height:1.125rem;line-height:1.125rem;cursor:default;margin-top:.2rem}:host .cps-autocomplete.disabled{pointer-events:none}:host .cps-autocomplete.disabled .cps-autocomplete-box{background:#f7f7f7}:host .cps-autocomplete.disabled .cps-autocomplete-box-items{color:var(--cps-color-text-light)}:host .cps-autocomplete.disabled .cps-autocomplete-box-items .text-group,:host .cps-autocomplete.disabled .cps-autocomplete-box-items .single-item{color:var(--cps-color-text-light)}:host .cps-autocomplete.disabled .cps-autocomplete-label{color:var(--cps-color-text-mild)}:host .cps-autocomplete.error .cps-autocomplete-box{border-color:#c33!important;background:#fef3f2}:host .about-to-remove{color:var(--cps-color-text-light)}:host .about-to-remove ::ng-deep .cps-chip{background-color:var(--cps-color-bg-mid)}.cps-autocomplete-options{font-family:Source Sans Pro,sans-serif;background:white;overflow-x:hidden;max-height:242px;overflow-y:auto}.cps-autocomplete-options .cps-autocomplete-options-empty{padding:11px;font-size:16px;cursor:default;color:var(--cps-color-text-dark)}.cps-autocomplete-options .cps-autocomplete-options-option{padding:12px;justify-content:space-between;display:flex;cursor:pointer}.cps-autocomplete-options .cps-autocomplete-options-option:hover{background:#f8f4f5}.cps-autocomplete-options .cps-autocomplete-options-option-label{color:var(--cps-color-text-dark)}.cps-autocomplete-options .cps-autocomplete-options-option-left{display:flex;align-items:center;margin-right:8px}.cps-autocomplete-options .cps-autocomplete-options-option-right{color:var(--cps-color-text-light);text-align:right}.cps-autocomplete-options .cps-autocomplete-options-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}.cps-autocomplete-options .cps-autocomplete-options-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)}.cps-autocomplete-options .cps-autocomplete-options-option.selected,.cps-autocomplete-options .cps-autocomplete-options-option.allselected{font-weight:600}.cps-autocomplete-options .cps-autocomplete-options-option.selected .cps-autocomplete-options-option-label,.cps-autocomplete-options .cps-autocomplete-options-option.allselected .cps-autocomplete-options-option-label{color:var(--cps-color-calm)}.cps-autocomplete-options .cps-autocomplete-options-option.selected .cps-autocomplete-options-option-check,.cps-autocomplete-options .cps-autocomplete-options-option.allselected .cps-autocomplete-options-option-check{opacity:1}.cps-autocomplete-options .cps-autocomplete-options-option.selected{background:#efe4e7}.cps-autocomplete-options .cps-autocomplete-options-option.highlighten{background:#f5eeef}.cps-autocomplete-options .cps-autocomplete-options-option.selected.highlighten{background:#e6d4d9}.cps-autocomplete-options .select-all-option{border-bottom:1px solid lightgrey;font-weight:600}.cps-autocomplete-options ::ng-deep .p-virtualscroller-list.p-scroller{overflow-anchor:none}.cps-autocomplete-options .virtual-row{white-space:nowrap}\n"] }]
498
498
  }], ctorParameters: function () { return [{ type: i1.NgControl, decorators: [{
499
499
  type: Self
500
500
  }, {
@@ -578,4 +578,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
578
578
  type: ViewChild,
579
579
  args: ['optionsList']
580
580
  }] } });
581
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3BzLWF1dG9jb21wbGV0ZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jcHMtdWkta2l0L3NyYy9saWIvY29tcG9uZW50cy9jcHMtYXV0b2NvbXBsZXRlL2Nwcy1hdXRvY29tcGxldGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY3BzLXVpLWtpdC9zcmMvbGliL2NvbXBvbmVudHMvY3BzLWF1dG9jb21wbGV0ZS9jcHMtYXV0b2NvbXBsZXRlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBRUwsU0FBUyxFQUVULFlBQVksRUFDWixLQUFLLEVBR0wsUUFBUSxFQUNSLE1BQU0sRUFDTixJQUFJLEVBQ0osU0FBUyxFQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBd0IsV0FBVyxFQUFhLE1BQU0sZ0JBQWdCLENBQUM7QUFDOUUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNwQyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDOUQsT0FBTyxFQUNMLGdCQUFnQixFQUdqQixNQUFNLGdDQUFnQyxDQUFDO0FBQ3hDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ2xFLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLHNEQUFzRCxDQUFDO0FBQ2xHLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDhDQUE4QyxDQUFDO0FBQ3RGLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBQzVFLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLGlEQUFpRCxDQUFDO0FBQzFGLE9BQU8sRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLE1BQU0s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QW1CO3NCQUEzQixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBRVUsTUFBTTtzQkFBckIsS0FBSzt1QkFBQyxPQUFPO2dCQVdKLFlBQVk7c0JBQXJCLE1BQU07Z0JBR1AsZUFBZTtzQkFEZCxTQUFTO3VCQUFDLGlCQUFpQjtnQkFJNUIscUJBQXFCO3NCQURwQixTQUFTO3VCQUFDLHVCQUF1QjtnQkFJbEMsV0FBVztzQkFEVixTQUFTO3VCQUFDLGFBQWE7Z0JBSXhCLFdBQVc7c0JBRFYsU0FBUzt1QkFBQyxhQUFhO2dCQUl4QixXQUFXO3NCQURWLFNBQVM7dUJBQUMsYUFBYSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICBBZnRlclZpZXdJbml0LFxuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgSW5wdXQsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBPcHRpb25hbCxcbiAgT3V0cHV0LFxuICBTZWxmLFxuICBWaWV3Q2hpbGRcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciwgRm9ybXNNb2R1bGUsIE5nQ29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgY29udmVydFNpemUgfSBmcm9tICcuLi8uLi91dGlscy9pbnRlcm5hbC9zaXplLXV0aWxzJztcbmltcG9ydCB7XG4gIENwc0ljb25Db21wb25lbnQsXG4gIEljb25UeXBlLFxuICBpY29uU2l6ZVR5cGVcbn0gZnJvbSAnLi4vY3BzLWljb24vY3BzLWljb24uY29tcG9uZW50JztcbmltcG9ydCB7IENwc0NoaXBDb21wb25lbnQgfSBmcm9tICcuLi9jcHMtY2hpcC9jcHMtY2hpcC5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ3BzUHJvZ3Jlc3NMaW5lYXJDb21wb25lbnQgfSBmcm9tICcuLi9jcHMtcHJvZ3Jlc3MtbGluZWFyL2Nwcy1wcm9ncmVzcy1saW5lYXIuY29tcG9uZW50JztcbmltcG9ydCB7IENwc0luZm9DaXJjbGVDb21wb25lbnQgfSBmcm9tICcuLi9jcHMtaW5mby1jaXJjbGUvY3BzLWluZm8tY2lyY2xlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBMYWJlbEJ5VmFsdWVQaXBlIH0gZnJvbSAnLi4vLi4vcGlwZXMvaW50ZXJuYWwvbGFiZWwtYnktdmFsdWUucGlwZSc7XG5pbXBvcnQgeyBDaGVja09wdGlvblNlbGVjdGVkUGlwZSB9IGZyb20gJy4uLy4uL3BpcGVzL2ludGVybmFsL2NoZWNrLW9wdGlvbi1zZWxlY3RlZC5waXBlJztcbmltcG9ydCB7IGZpbmQsIGlzRXF1YWwgfSBmcm9tICdsb2Rhc2gtZXMnO1xuaW1wb3J0IHtcbiAgVmlydHVhbFNjcm9sbGVyLFxuICBWaXJ0dWFsU2Nyb2xsZXJNb2R1bGVcbn0gZnJvbSAncHJpbWVuZy92aXJ0dWFsc2Nyb2xsZXInO1xuaW1wb3J0IHsgVG9vbHRpcFBvc2l0aW9uIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlcy9jcHMtdG9vbHRpcC5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgQ3BzTWVudUNvbXBvbmVudCB9IGZyb20gJy4uL2Nwcy1tZW51L2Nwcy1tZW51LmNvbXBvbmVudCc7XG5cbmV4cG9ydCB0eXBlIENwc0F1dG9jb21wbGV0ZUFwcGVhcmFuY2VUeXBlID1cbiAgfCAnb3V0bGluZWQnXG4gIHwgJ3VuZGVybGluZWQnXG4gIHwgJ2JvcmRlcmxlc3MnO1xuXG5AQ29tcG9uZW50KHtcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1xuICAgIENvbW1vbk1vZHVsZSxcbiAgICBGb3Jtc01vZHVsZSxcbiAgICBDcHNJY29uQ29tcG9uZW50LFxuICAgIENwc0NoaXBDb21wb25lbnQsXG4gICAgQ3BzUHJvZ3Jlc3NMaW5lYXJDb21wb25lbnQsXG4gICAgQ3BzSW5mb0NpcmNsZUNvbXBvbmVudCxcbiAgICBMYWJlbEJ5VmFsdWVQaXBlLFxuICAgIENoZWNrT3B0aW9uU2VsZWN0ZWRQaXBlLFxuICAgIFZpcnR1YWxTY3JvbGxlck1vZHVsZSxcbiAgICBDcHNNZW51Q29tcG9uZW50XG4gIF0sXG4gIHByb3ZpZGVyczogW0xhYmVsQnlWYWx1ZVBpcGUsIENoZWNrT3B0aW9uU2VsZWN0ZWRQaXBlXSxcbiAgc2VsZWN0b3I6ICdjcHMtYXV0b2NvbXBsZXRlJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2Nwcy1hdXRvY29tcGxldGUuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9jcHMtYXV0b2NvbXBsZXRlLmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgQ3BzQXV0b2NvbXBsZXRlQ29tcG9uZW50XG4gIGltcGxlbWVudHMgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95XG57XG4gIEBJbnB1dCgpIGxhYmVsID0gJyc7XG4gIEBJbnB1dCgpIHBsYWNlaG9sZGVyID0gJ1BsZWFzZSBlbnRlcic7XG4gIEBJbnB1dCgpIGhpbnQgPSAnJztcbiAgQElucHV0KCkgcmV0dXJuT2JqZWN0ID0gdHJ1ZTsgLy8gaWYgZmFsc2UsIHZhbHVlIHdpbGwgYmUgb3B0aW9uW29wdGlvblZhbHVlXVxuICBASW5wdXQoKSBtdWx0aXBsZSA9IGZhbHNlO1xuICBASW5wdXQoKSBkaXNhYmxlZCA9IGZhbHNlO1xuICBASW5wdXQoKSB3aWR0aDogbnVtYmVyIHwgc3RyaW5nID0gJzEwMCUnO1xuICBASW5wdXQoKSBzZWxlY3RBbGwgPSB0cnVlOyAvLyBkb2Vzbid0IHdvcmsgd2l0aCB2aXJ0dWFsIHNjcm9sbFxuICBASW5wdXQoKSBjaGlwcyA9IHRydWU7XG4gIEBJbnB1dCgpIGNsb3NhYmxlQ2hpcHMgPSB0cnVlO1xuICBASW5wdXQoKSBjbGVhcmFibGUgPSBmYWxzZTtcbiAgQElucHV0KCkgb3Blbk9uQ2xlYXIgPSB0cnVlO1xuICBASW5wdXQoKSBvcHRpb25zID0gW10gYXMgYW55W107XG4gIEBJbnB1dCgpIG9wdGlvbkxhYmVsID0gJ2xhYmVsJztcbiAgQElucHV0KCkgb3B0aW9uVmFsdWUgPSAndmFsdWUnOyAvLyBuZWVkZWQgb25seSBpZiByZXR1cm5PYmplY3QgPT09IGZhbHNlXG4gIEBJbnB1dCgpIG9wdGlvbkluZm8gPSAnaW5mbyc7XG4gIEBJbnB1dCgpIGhpZGVEZXRhaWxzID0gZmFsc2U7XG4gIEBJbnB1dCgpIHBlcnNpc3RlbnRDbGVhciA9IGZhbHNlO1xuICBASW5wdXQoKSBwcmVmaXhJY29uOiBJY29uVHlwZSA9ICcnO1xuICBASW5wdXQoKSBwcmVmaXhJY29uU2l6ZTogaWNvblNpemVUeXBlID0gJzE4cHgnO1xuICBASW5wdXQoKSBsb2FkaW5nID0gZmFsc2U7XG4gIEBJbnB1dCgpIGVtcHR5TWVzc2FnZSA9ICdObyByZXN1bHRzIGZvdW5kJztcbiAgQElucHV0KCkgdmlydHVhbFNjcm9sbCA9IGZhbHNlO1xuICBASW5wdXQoKSBpbmZvVG9vbHRpcCA9ICcnO1xuICBASW5wdXQoKSBpbmZvVG9vbHRpcENsYXNzID0gJ2Nwcy10b29sdGlwLWNvbnRlbnQnO1xuICBASW5wdXQoKSBpbmZvVG9vbHRpcE1heFdpZHRoOiBudW1iZXIgfCBzdHJpbmcgPSAnMTAwJSc7XG4gIEBJbnB1dCgpIGluZm9Ub29sdGlwUGVyc2lzdGVudCA9IGZhbHNlO1xuICBASW5wdXQoKSBpbmZvVG9vbHRpcFBvc2l0aW9uOiBUb29sdGlwUG9zaXRpb24gPSAndG9wJztcbiAgQElucHV0KCkgYXBwZWFyYW5jZTogQ3BzQXV0b2NvbXBsZXRlQXBwZWFyYW5jZVR5cGUgPSAnb3V0bGluZWQnO1xuXG4gIEBJbnB1dCgndmFsdWUnKSBfdmFsdWU6IGFueSA9IHVuZGVmaW5lZDtcblxuICBnZXQgdmFsdWUoKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5fdmFsdWU7XG4gIH1cblxuICBzZXQgdmFsdWUodmFsdWU6IGFueSkge1xuICAgIHRoaXMuX3ZhbHVlID0gdmFsdWU7XG4gICAgdGhpcy5vbkNoYW5nZSh2YWx1ZSk7XG4gIH1cblxuICBAT3V0cHV0KCkgdmFsdWVDaGFuZ2VkID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgQFZpZXdDaGlsZCgnYXV0b2NvbXBsZXRlQm94JylcbiAgYXV0b2NvbXBsZXRlQm94ITogRWxlbWVudFJlZjtcblxuICBAVmlld0NoaWxkKCdhdXRvY29tcGxldGVDb250YWluZXInKVxuICBhdXRvY29tcGxldGVDb250YWluZXIhOiBFbGVtZW50UmVmO1xuXG4gIEBWaWV3Q2hpbGQoJ3ZpcnR1YWxMaXN0JylcbiAgdmlydHVhbExpc3QhOiBWaXJ0dWFsU2Nyb2xsZXI7XG5cbiAgQFZpZXdDaGlsZCgnb3B0aW9uc01lbnUnKVxuICBvcHRpb25zTWVudSE6IENwc01lbnVDb21wb25lbnQ7XG5cbiAgQFZpZXdDaGlsZCgnb3B0aW9uc0xpc3QnKVxuICBvcHRpb25zTGlzdCE6IEVsZW1lbnRSZWY7XG5cbiAgcHJpdmF0ZSBfc3RhdHVzQ2hhbmdlc1N1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuXG4gIGVycm9yID0gJyc7XG4gIGN2dFdpZHRoID0gJyc7XG4gIGlzT3BlbmVkID0gZmFsc2U7XG4gIGlucHV0VGV4dCA9ICcnO1xuICBmaWx0ZXJlZE9wdGlvbnMgPSBbXSBhcyBhbnlbXTtcbiAgYmFja3NwYWNlQ2xpY2tlZE9uY2UgPSBmYWxzZTtcbiAgYWN0aXZlU2luZ2xlID0gZmFsc2U7XG4gIG9wdGlvbkhpZ2hsaWdodGVkSW5kZXggPSAtMTtcblxuICB2aXJ0dWFsTGlzdEhlaWdodCA9IDI0MDtcbiAgdmlydHVhbFNjcm9sbEl0ZW1TaXplID0gNDI7XG5cbiAgYXV0b2NvbXBsZXRlQm94V2lkdGggPSAwO1xuICByZXNpemVPYnNlcnZlcjogUmVzaXplT2JzZXJ2ZXI7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgQFNlbGYoKSBAT3B0aW9uYWwoKSBwcml2YXRlIF9jb250cm9sOiBOZ0NvbnRyb2wsXG4gICAgcHJpdmF0ZSBfbGFiZWxCeVZhbHVlOiBMYWJlbEJ5VmFsdWVQaXBlXG4gICkge1xuICAgIGlmICh0aGlzLl9jb250cm9sKSB7XG4gICAgICB0aGlzLl9jb250cm9sLnZhbHVlQWNjZXNzb3IgPSB0aGlzO1xuICAgIH1cbiAgICB0aGlzLnJlc2l6ZU9ic2VydmVyID0gbmV3IFJlc2l6ZU9ic2VydmVyKChlbnRyaWVzKSA9PiB7XG4gICAgICBlbnRyaWVzLmZvckVhY2goKGVudHJ5KSA9PiB7XG4gICAgICAgIGlmIChlbnRyeT8udGFyZ2V0KVxuICAgICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlQm94V2lkdGggPSAoZW50cnkudGFyZ2V0IGFzIGFueSkub2Zmc2V0V2lkdGg7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMuZmlsdGVyZWRPcHRpb25zID0gdGhpcy5vcHRpb25zO1xuICAgIHRoaXMuY3Z0V2lkdGggPSBjb252ZXJ0U2l6ZSh0aGlzLndpZHRoKTtcbiAgICBpZiAodGhpcy5tdWx0aXBsZSAmJiAhdGhpcy5fdmFsdWUpIHtcbiAgICAgIHRoaXMuX3ZhbHVlID0gW107XG4gICAgfVxuXG4gICAgdGhpcy5fc3RhdHVzQ2hhbmdlc1N1YnNjcmlwdGlvbiA9IHRoaXMuX2NvbnRyb2w/LnN0YXR1c0NoYW5nZXM/LnN1YnNjcmliZShcbiAgICAgICgpID0+IHtcbiAgICAgICAgdGhpcy5fY2hlY2tFcnJvcnMoKTtcbiAgICAgIH1cbiAgICApIGFzIFN1YnNjcmlwdGlvbjtcblxuICAgIHRoaXMucmVjYWxjVmlydHVhbExpc3RIZWlnaHQoKTtcbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLnJlc2l6ZU9ic2VydmVyLm9ic2VydmUodGhpcy5hdXRvY29tcGxldGVCb3gubmF0aXZlRWxlbWVudCk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLl9zdGF0dXNDaGFuZ2VzU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMucmVzaXplT2JzZXJ2ZXI/LmRpc2Nvbm5lY3QoKTtcbiAgfVxuXG4gIHNlbGVjdChvcHRpb246IGFueSwgYnlWYWx1ZTogYm9vbGVhbik6IHZvaWQge1xuICAgIGZ1bmN0aW9uIGluY2x1ZGVzKGFycmF5OiBhbnlbXSwgdmFsOiBhbnkpOiBib29sZWFuIHtcbiAgICAgIHJldHVybiBhcnJheSA/ICEhZmluZChhcnJheSwgKGl0ZW0pID0+IGlzRXF1YWwoaXRlbSwgdmFsKSkgOiBmYWxzZTtcbiAgICB9XG5cbiAgICB0aGlzLmJhY2tzcGFjZUNsaWNrZWRPbmNlID0gZmFsc2U7XG4gICAgY29uc3QgdmFsID0gYnlWYWx1ZVxuICAgICAgPyBvcHRpb25cbiAgICAgIDogdGhpcy5yZXR1cm5PYmplY3RcbiAgICAgID8gb3B0aW9uXG4gICAgICA6IG9wdGlvblt0aGlzLm9wdGlvblZhbHVlXTtcbiAgICBpZiAodGhpcy5tdWx0aXBsZSkge1xuICAgICAgbGV0IHJlcyA9IFtdIGFzIGFueTtcbiAgICAgIGlmIChpbmNsdWRlcyh0aGlzLnZhbHVlLCB2YWwpKSB7XG4gICAgICAgIHJlcyA9IHRoaXMudmFsdWUuZmlsdGVyKCh2OiBhbnkpID0+ICFpc0VxdWFsKHYsIHZhbCkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5vcHRpb25zLmZvckVhY2goKG8pID0+IHtcbiAgICAgICAgICBjb25zdCBvdiA9IHRoaXMucmV0dXJuT2JqZWN0ID8gbyA6IG9bdGhpcy5vcHRpb25WYWx1ZV07XG4gICAgICAgICAgaWYgKHRoaXMudmFsdWUuc29tZSgodjogYW55KSA9PiBpc0VxdWFsKHYsIG92KSkgfHwgaXNFcXVhbCh2YWwsIG92KSkge1xuICAgICAgICAgICAgcmVzLnB1c2gob3YpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICB0aGlzLnVwZGF0ZVZhbHVlKHJlcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMudXBkYXRlVmFsdWUodmFsKTtcbiAgICB9XG4gICAgdGhpcy5fY2xlYXJJbnB1dCgpO1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5mb2N1c0lucHV0KCk7XG4gICAgfSwgMCk7XG4gIH1cblxuICBvbk9wdGlvbkNsaWNrKG9wdGlvbjogYW55KSB7XG4gICAgdGhpcy5fY2xpY2tPcHRpb24ob3B0aW9uKTtcbiAgfVxuXG4gIHRvZ2dsZUFsbCgpIHtcbiAgICBsZXQgcmVzID0gW107XG4gICAgaWYgKHRoaXMudmFsdWUubGVuZ3RoIDwgdGhpcy5vcHRpb25zLmxlbmd0aCkge1xuICAgICAgaWYgKHRoaXMucmV0dXJuT2JqZWN0KSB7XG4gICAgICAgIHJlcyA9IHRoaXMub3B0aW9ucztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMub3B0aW9ucy5mb3JFYWNoKChvKSA9PiB7XG4gICAgICAgICAgcmVzLnB1c2gob1t0aGlzLm9wdGlvblZhbHVlXSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLnVwZGF0ZVZhbHVlKHJlcyk7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLmZvY3VzSW5wdXQoKTtcbiAgICB9LCAwKTtcbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZW1wdHktZnVuY3Rpb25cbiAgb25DaGFuZ2UgPSAoZXZlbnQ6IGFueSkgPT4ge307XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1lbXB0eS1mdW5jdGlvblxuICBvblRvdWNoZWQgPSAoKSA9PiB7fTtcblxuICByZWdpc3Rlck9uQ2hhbmdlKGZuOiBhbnkpIHtcbiAgICB0aGlzLm9uQ2hhbmdlID0gZm47XG4gIH1cblxuICByZWdpc3Rlck9uVG91Y2hlZChmbjogYW55KSB7XG4gICAgdGhpcy5vblRvdWNoZWQgPSBmbjtcbiAgfVxuXG4gIGZpbHRlck9wdGlvbnMoZXZlbnQ6IGFueSkge1xuICAgIGlmICghdGhpcy5pc09wZW5lZCkge1xuICAgICAgdGhpcy5fdG9nZ2xlT3B0aW9ucyh0cnVlKTtcbiAgICB9XG4gICAgdGhpcy5fZGVoaWdobGlnaHRPcHRpb24oKTtcbiAgICB0aGlzLmJhY2tzcGFjZUNsaWNrZWRPbmNlID0gZmFsc2U7XG4gICAgY29uc3Qgc2VhcmNoVmFsID0gKGV2ZW50Py50YXJnZXQ/LnZhbHVlIHx8ICcnKS50b0xvd2VyQ2FzZSgpO1xuXG4gICAgdGhpcy5maWx0ZXJlZE9wdGlvbnMgPSB0aGlzLm9wdGlvbnMuZmlsdGVyKChvOiBhbnkpID0+XG4gICAgICBvW3RoaXMub3B0aW9uTGFiZWxdLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoc2VhcmNoVmFsKVxuICAgICk7XG5cbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMucmVjYWxjVmlydHVhbExpc3RIZWlnaHQoKTtcbiAgICB9KTtcbiAgfVxuXG4gIHdyaXRlVmFsdWUodmFsdWU6IGFueSkge1xuICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgfVxuXG4gIGNsZWFyKGV2ZW50OiBhbnkpOiB2b2lkIHtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgIGlmIChcbiAgICAgICghdGhpcy5tdWx0aXBsZSAmJiB0aGlzLnZhbHVlKSB8fFxuICAgICAgKHRoaXMubXVsdGlwbGUgJiYgdGhpcy52YWx1ZT8ubGVuZ3RoID4gMClcbiAgICApIHtcbiAgICAgIGlmICh0aGlzLm9wZW5PbkNsZWFyKSB7XG4gICAgICAgIHRoaXMuX3RvZ2dsZU9wdGlvbnModHJ1ZSk7XG4gICAgICB9XG4gICAgICBjb25zdCB2YWwgPSB0aGlzLm11bHRpcGxlID8gW10gOiB0aGlzLnJldHVybk9iamVjdCA/IHVuZGVmaW5lZCA6ICcnO1xuICAgICAgdGhpcy51cGRhdGVWYWx1ZSh2YWwpO1xuICAgIH1cbiAgICB0aGlzLl9jbGVhcklucHV0KCk7XG4gICAgdGhpcy5fZGVoaWdobGlnaHRPcHRpb24oKTtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuZm9jdXNJbnB1dCgpO1xuICAgIH0sIDApO1xuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1lbXB0eS1mdW5jdGlvblxuICBzZXREaXNhYmxlZFN0YXRlKGRpc2FibGVkOiBib29sZWFuKSB7fVxuXG4gIG9uQmx1cigpIHtcbiAgICB0aGlzLl9jb250cm9sPy5jb250cm9sPy5tYXJrQXNUb3VjaGVkKCk7XG4gICAgdGhpcy5fY2hlY2tFcnJvcnMoKTtcbiAgfVxuXG4gIG9uQmVmb3JlT3B0aW9uc0hpZGRlbigpIHtcbiAgICB0aGlzLl9jbG9zZUFuZENsZWFyKCk7XG4gIH1cblxuICBvbkJveENsaWNrKCkge1xuICAgIGlmICghdGhpcy5tdWx0aXBsZSkge1xuICAgICAgdGhpcy5hY3RpdmVTaW5nbGUgPSB0cnVlO1xuICAgICAgdGhpcy5pbnB1dFRleHQgPSB0aGlzLl9nZXRWYWx1ZUxhYmVsKCk7XG4gICAgICB0aGlzLmZpbHRlcmVkT3B0aW9ucyA9IHRoaXMub3B0aW9ucztcbiAgICB9XG4gICAgdGhpcy5mb2N1cygpO1xuICAgIHRoaXMuX2RlaGlnaGxpZ2h0T3B0aW9uKCk7XG4gIH1cblxuICBvbkNvbnRhaW5lcktleURvd24oZXZlbnQ6IGFueSkge1xuICAgIGNvbnN0IGNvZGUgPSBldmVudC5rZXlDb2RlO1xuICAgIC8vIGVzY2FwZVxuICAgIGlmIChjb2RlID09PSAyNykge1xuICAgICAgdGhpcy5fY2xvc2VBbmRDbGVhcigpO1xuICAgIH1cbiAgICAvLyBlbnRlclxuICAgIGVsc2UgaWYgKGNvZGUgPT09IDEzKSB7XG4gICAgICBsZXQgaWR4ID0gdGhpcy5vcHRpb25IaWdobGlnaHRlZEluZGV4O1xuICAgICAgaWYgKFxuICAgICAgICB0aGlzLm11bHRpcGxlICYmXG4gICAgICAgIHRoaXMuc2VsZWN0QWxsICYmXG4gICAgICAgIHRoaXMuZmlsdGVyZWRPcHRpb25zLmxlbmd0aCA9PT0gdGhpcy5vcHRpb25zLmxlbmd0aCAmJlxuICAgICAgICAhdGhpcy52aXJ0dWFsU2Nyb2xsXG4gICAgICApIHtcbiAgICAgICAgaWYgKGlkeCA9PT0gMCkge1xuICAgICAgICAgIHRoaXMudG9nZ2xlQWxsKCk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9IGVsc2UgaWR4LS07XG4gICAgICB9XG4gICAgICBjb25zdCBvcHRpb24gPSB0aGlzLmZpbHRlcmVkT3B0aW9uc1tpZHhdO1xuICAgICAgaWYgKHRoaXMuZmlsdGVyZWRPcHRpb25zLmxlbmd0aCAhPT0gdGhpcy5vcHRpb25zLmxlbmd0aClcbiAgICAgICAgdGhpcy5fZGVoaWdobGlnaHRPcHRpb24oKTtcbiAgICAgIHRoaXMuX2NsaWNrT3B0aW9uKG9wdGlvbik7XG4gICAgfVxuICAgIC8vIHZlcnRpY2FsIGFycm93c1xuICAgIGVsc2UgaWYgKFszOCwgNDBdLmluY2x1ZGVzKGNvZGUpKSB7XG4gICAgICAvLyBBcnJvd3MgbmF2aWdhdGlvbiBkb2Vzbid0IHdvcmsgd2l0aCB2aXJ0dWFsIHNjcm9sbFxuICAgICAgaWYgKCF0aGlzLnZpcnR1YWxTY3JvbGwpIHRoaXMuX25hdmlnYXRlT3B0aW9uc0J5QXJyb3dzKGNvZGUgPT09IDM4KTtcbiAgICB9XG4gIH1cblxuICBvbklucHV0S2V5RG93bihldmVudDogYW55KSB7XG4gICAgY29uc3QgY29kZSA9IGV2ZW50LmtleUNvZGU7XG4gICAgLy8gYmFja3NwYWNlXG4gICAgaWYgKGNvZGUgPT09IDgpIHtcbiAgICAgIHRoaXMuX3JlbW92ZUxhc3RWYWx1ZSgpO1xuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgfVxuICAgIC8vIGVudGVyXG4gICAgZWxzZSBpZiAoY29kZSA9PT0gMTMpIHtcbiAgICAgIGlmICh0aGlzLm9wdGlvbkhpZ2hsaWdodGVkSW5kZXggPCAwKSB7XG4gICAgICAgIHRoaXMuX2NvbmZpcm1JbnB1dChldmVudD8udGFyZ2V0Py52YWx1ZSB8fCAnJyk7XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoWzM4LCA0MF0uaW5jbHVkZXMoY29kZSkpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuICB9XG5cbiAgb25DaGV2cm9uQ2xpY2soZXZlbnQ6IGFueSkge1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXG4gICAgaWYgKHRoaXMuaXNPcGVuZWQpIHtcbiAgICAgIHRoaXMuX2Nsb3NlQW5kQ2xlYXIoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5vbkJveENsaWNrKCk7XG4gICAgfVxuICB9XG5cbiAgZm9jdXNJbnB1dCgpIHtcbiAgICB0aGlzLmF1dG9jb21wbGV0ZUNvbnRhaW5lcj8ubmF0aXZlRWxlbWVudD8ucXVlcnlTZWxlY3RvcignaW5wdXQnKT8uZm9jdXMoKTtcbiAgfVxuXG4gIGZvY3VzKCkge1xuICAgIHRoaXMuYXV0b2NvbXBsZXRlQ29udGFpbmVyPy5uYXRpdmVFbGVtZW50Py5mb2N1cygpO1xuICAgIHRoaXMuZm9jdXNJbnB1dCgpO1xuICAgIHRoaXMuX3RvZ2dsZU9wdGlvbnModHJ1ZSk7XG4gIH1cblxuICByZWNhbGNWaXJ0dWFsTGlzdEhlaWdodCgpIHtcbiAgICBpZiAoIXRoaXMudmlydHVhbFNjcm9sbCkgcmV0dXJuO1xuICAgIGNvbnN0IGN1cnJlbnRMZW4gPSB0aGlzLmZpbHRlcmVkT3B0aW9ucz8ubGVuZ3RoIHx8IDA7XG4gICAgdGhpcy52aXJ0dWFsTGlzdEhlaWdodCA9IE1hdGgubWluKFxuICAgICAgdGhpcy52aXJ0dWFsU2Nyb2xsSXRlbVNpemUgKiBjdXJyZW50TGVuLFxuICAgICAgMjQwXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgX3RvZ2dsZU9wdGlvbnMoc2hvdz86IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBpZiAodGhpcy5kaXNhYmxlZCB8fCB0aGlzLmlzT3BlbmVkID09PSBzaG93KSByZXR1cm47XG5cbiAgICB0aGlzLmJhY2tzcGFjZUNsaWNrZWRPbmNlID0gZmFsc2U7XG4gICAgaWYgKHR5cGVvZiBzaG93ID09PSAnYm9vbGVhbicpIHtcbiAgICAgIGlmIChzaG93KSB7XG4gICAgICAgIHRoaXMub3B0aW9uc01lbnUuc2hvdyh7XG4gICAgICAgICAgdGFyZ2V0OiB0aGlzLmF1dG9jb21wbGV0ZUJveC5uYXRpdmVFbGVtZW50XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5vcHRpb25zTWVudS5oaWRlKCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMub3B0aW9uc01lbnUudG9nZ2xlKHtcbiAgICAgICAgdGFyZ2V0OiB0aGlzLmF1dG9jb21wbGV0ZUJveC5uYXRpdmVFbGVtZW50XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICB0aGlzLmlzT3BlbmVkID0gdGhpcy5vcHRpb25zTWVudS5pc1Zpc2libGUoKTtcblxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgaWYgKHRoaXMuaXNPcGVuZWQgJiYgdGhpcy5maWx0ZXJlZE9wdGlvbnMubGVuZ3RoID4gMCkge1xuICAgICAgICB0aGlzLnJlY2FsY1ZpcnR1YWxMaXN0SGVpZ2h0KCk7XG5cbiAgICAgICAgY29uc3Qgc2VsZWN0ZWQgPVxuICAgICAgICAgIHRoaXMub3B0aW9uc0xpc3QubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCcuc2VsZWN0ZWQnKTtcbiAgICAgICAgaWYgKHNlbGVjdGVkKSB7XG4gICAgICAgICAgc2VsZWN0ZWQuc2Nyb2xsSW50b1ZpZXcoe1xuICAgICAgICAgICAgYmVoYXZpb3I6ICdpbnN0YW50JyxcbiAgICAgICAgICAgIGJsb2NrOiAnbmVhcmVzdCcsXG4gICAgICAgICAgICBpbmxpbmU6ICdjZW50ZXInXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy52aXJ0dWFsU2Nyb2xsICYmIHRoaXMudmFsdWUpIHtcbiAgICAgICAgICBsZXQgdjogYW55O1xuICAgICAgICAgIGlmICh0aGlzLm11bHRpcGxlKSB7XG4gICAgICAgICAgICBpZiAodGhpcy52YWx1ZS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgIHYgPSB0aGlzLnZhbHVlWzBdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB2ID0gdGhpcy52YWx1ZTtcbiAgICAgICAgICBjb25zdCBpZHggPSB0aGlzLmZpbHRlcmVkT3B0aW9ucy5maW5kSW5kZXgoKG8pID0+IGlzRXF1YWwobywgdikpO1xuICAgICAgICAgIGlmIChpZHggPj0gMCkgdGhpcy52aXJ0dWFsTGlzdC5zY3JvbGxUb0luZGV4KGlkeCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgX2NsaWNrT3B0aW9uKG9wdGlvbjogYW55KSB7XG4gICAgdGhpcy5zZWxlY3Qob3B0aW9uLCBmYWxzZSk7XG4gICAgaWYgKCF0aGlzLm11bHRpcGxlKSB7XG4gICAgICB0aGlzLl90b2dnbGVPcHRpb25zKGZhbHNlKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9jaGVja0Vycm9ycygpOiB2b2lkIHtcbiAgICBjb25zdCBlcnJvcnMgPSB0aGlzLl9jb250cm9sPy5lcnJvcnM7XG5cbiAgICBpZiAoIXRoaXMuX2NvbnRyb2w/LmNvbnRyb2w/LnRvdWNoZWQgfHwgIWVycm9ycykge1xuICAgICAgdGhpcy5lcnJvciA9ICcnO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICgncmVxdWlyZWQnIGluIGVycm9ycykge1xuICAgICAgdGhpcy5lcnJvciA9ICdGaWVsZCBpcyByZXF1aXJlZCc7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgZXJyQXJyID0gT2JqZWN0LnZhbHVlcyhlcnJvcnMpO1xuICAgIGlmIChlcnJBcnIubGVuZ3RoIDwgMSkge1xuICAgICAgdGhpcy5lcnJvciA9ICcnO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBtZXNzYWdlID0gZXJyQXJyLmZpbmQoKG1zZykgPT4gdHlwZW9mIG1zZyA9PT0gJ3N0cmluZycpO1xuXG4gICAgdGhpcy5lcnJvciA9IG1lc3NhZ2UgfHwgJ1Vua25vd24gZXJyb3InO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVWYWx1ZSh2YWx1ZTogYW55KTogdm9pZCB7XG4gICAgdGhpcy53cml0ZVZhbHVlKHZhbHVlKTtcbiAgICB0aGlzLm9uQ2hhbmdlKHZhbHVlKTtcbiAgICB0aGlzLnZhbHVlQ2hhbmdlZC5lbWl0KHZhbHVlKTtcbiAgfVxuXG4gIHByaXZhdGUgX2dldFZhbHVlTGFiZWwoKSB7XG4gICAgcmV0dXJuIHRoaXMudmFsdWVcbiAgICAgID8gdGhpcy5yZXR1cm5PYmplY3RcbiAgICAgICAgPyB0aGlzLnZhbHVlW3RoaXMub3B0aW9uTGFiZWxdXG4gICAgICAgIDogdGhpcy5fbGFiZWxCeVZhbHVlLnRyYW5zZm9ybShcbiAgICAgICAgICAgIHRoaXMudmFsdWUsXG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMsXG4gICAgICAgICAgICB0aGlzLm9wdGlvblZhbHVlLFxuICAgICAgICAgICAgdGhpcy5vcHRpb25MYWJlbFxuICAgICAgICAgIClcbiAgICAgIDogJyc7XG4gIH1cblxuICBwcml2YXRlIF9jbGVhcklucHV0KCkge1xuICAgIHRoaXMuZmlsdGVyZWRPcHRpb25zID0gdGhpcy5vcHRpb25zO1xuICAgIHRoaXMuaW5wdXRUZXh0ID0gJyc7XG4gICAgdGhpcy5hY3RpdmVTaW5nbGUgPSBmYWxzZTtcbiAgICB0aGlzLnJlY2FsY1ZpcnR1YWxMaXN0SGVpZ2h0KCk7XG4gIH1cblxuICBwcml2YXRlIF9jbG9zZUFuZENsZWFyKCkge1xuICAgIHRoaXMuX2NsZWFySW5wdXQoKTtcbiAgICB0aGlzLl90b2dnbGVPcHRpb25zKGZhbHNlKTtcbiAgICB0aGlzLl9kZWhpZ2hsaWdodE9wdGlvbigpO1xuICB9XG5cbiAgcHJpdmF0ZSBfZ2V0SFRNTE9wdGlvbnMoKSB7XG4gICAgcmV0dXJuICh0aGlzLm9wdGlvbnNMaXN0Lm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvckFsbChcbiAgICAgICcuY3BzLWF1dG9jb21wbGV0ZS1vcHRpb25zLW9wdGlvbidcbiAgICApIHx8IFtdKSBhcyBhbnk7XG4gIH1cblxuICBwcml2YXRlIF9kZWhpZ2hsaWdodE9wdGlvbihlbD86IEhUTUxFbGVtZW50KSB7XG4gICAgaWYgKGVsKSBlbC5jbGFzc0xpc3QucmVtb3ZlKCdoaWdobGlnaHRlbicpO1xuICAgIGVsc2Uge1xuICAgICAgaWYgKHRoaXMub3B0aW9uSGlnaGxpZ2h0ZWRJbmRleCA8IDApIHJldHVybjtcbiAgICAgIGNvbnN0IG9wdGlvbkl0ZW1zID0gdGhpcy5fZ2V0SFRNTE9wdGlvbnMoKTtcbiAgICAgIG9wdGlvbkl0ZW1zW3RoaXMub3B0aW9uSGlnaGxpZ2h0ZWRJbmRleF0uY2xhc3NMaXN0LnJlbW92ZSgnaGlnaGxpZ2h0ZW4nKTtcbiAgICAgIHRoaXMub3B0aW9uSGlnaGxpZ2h0ZWRJbmRleCA9IC0xO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX2hpZ2hsaWdodE9wdGlvbihlbDogSFRNTEVsZW1lbnQpIHtcbiAgICBlbC5jbGFzc0xpc3QuYWRkKCdoaWdobGlnaHRlbicpO1xuICAgIGNvbnN0IHBhcmVudCA9IGVsLnBhcmVudEVsZW1lbnQ7XG4gICAgaWYgKCFwYXJlbnQpIHJldHVybjtcbiAgICBjb25zdCBwYXJlbnRSZWN0ID0gcGFyZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIGNvbnN0IGVsUmVjdCA9IGVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIGlmIChlbFJlY3QudG9wIDwgcGFyZW50UmVjdC50b3AgfHwgZWxSZWN0LmJvdHRvbSA+IHBhcmVudFJlY3QuYm90dG9tKSB7XG4gICAgICBlbC5zY3JvbGxJbnRvVmlldyh7XG4gICAgICAgIGJsb2NrOiAnbmVhcmVzdCcsXG4gICAgICAgIGlubGluZTogJ2NlbnRlcidcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX25hdmlnYXRlT3B0aW9uc0J5QXJyb3dzKHVwOiBib29sZWFuKSB7XG4gICAgaWYgKCF0aGlzLmlzT3BlbmVkKSByZXR1cm47XG5cbiAgICBjb25zdCBvcHRpb25JdGVtcyA9IHRoaXMuX2dldEhUTUxPcHRpb25zKCk7XG4gICAgY29uc3QgbGVuID0gb3B0aW9uSXRlbXMubGVuZ3RoO1xuICAgIGlmIChsZW4gPCAxKSByZXR1cm47XG5cbiAgICBpZiAobGVuID09PSAxKSB7XG4gICAgICB0aGlzLm9wdGlvbkhpZ2hsaWdodGVkSW5kZXggPSAwO1xuICAgICAgdGhpcy5faGlnaGxpZ2h0T3B0aW9uKG9wdGlvbkl0ZW1zWzBdKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodXApIHtcbiAgICAgIHRoaXMuX2RlaGlnaGxpZ2h0T3B0aW9uKG9wdGlvbkl0ZW1zW3RoaXMub3B0aW9uSGlnaGxpZ2h0ZWRJbmRleF0pO1xuICAgICAgdGhpcy5vcHRpb25IaWdobGlnaHRlZEluZGV4ID1cbiAgICAgICAgdGhpcy5vcHRpb25IaWdobGlnaHRlZEluZGV4IDwgMVxuICAgICAgICAgID8gbGVuIC0gMVxuICAgICAgICAgIDogdGhpcy5vcHRpb25IaWdobGlnaHRlZEluZGV4IC0gMTtcbiAgICAgIHRoaXMuX2hpZ2hsaWdodE9wdGlvbihvcHRpb25JdGVtc1t0aGlzLm9wdGlvbkhpZ2hsaWdodGVkSW5kZXhdKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fZGVoaWdobGlnaHRPcHRpb24ob3B0aW9uSXRlbXNbdGhpcy5vcHRpb25IaWdobGlnaHRlZEluZGV4XSk7XG4gICAgICB0aGlzLm9wdGlvbkhpZ2hsaWdodGVkSW5kZXggPSBbLTEsIGxlbiAtIDFdLmluY2x1ZGVzKFxuICAgICAgICB0aGlzLm9wdGlvbkhpZ2hsaWdodGVkSW5kZXhcbiAgICAgIClcbiAgICAgICAgPyAwXG4gICAgICAgIDogdGhpcy5vcHRpb25IaWdobGlnaHRlZEluZGV4ICsgMTtcbiAgICAgIHRoaXMuX2hpZ2hsaWdodE9wdGlvbihvcHRpb25JdGVtc1t0aGlzLm9wdGlvbkhpZ2hsaWdodGVkSW5kZXhdKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9jb25maXJtSW5wdXQoc2VhcmNoVmFsOiBzdHJpbmcpIHtcbiAgICBpZiAoIXRoaXMuaXNPcGVuZWQpIHJldHVybjtcbiAgICBzZWFyY2hWYWwgPSBzZWFyY2hWYWwudG9Mb3dlckNhc2UoKTtcbiAgICBpZiAoIXNlYXJjaFZhbCkge1xuICAgICAgaWYgKHRoaXMubXVsdGlwbGUpIHJldHVybjtcbiAgICAgIGNvbnN0IHZhbCA9IHRoaXMucmV0dXJuT2JqZWN0ID8gdW5kZWZpbmVkIDogJyc7XG4gICAgICB0aGlzLnVwZGF0ZVZhbHVlKHZhbCk7XG4gICAgICB0aGlzLl9jbG9zZUFuZENsZWFyKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgZm91bmQgPSB0aGlzLmZpbHRlcmVkT3B0aW9ucy5maW5kKFxuICAgICAgKG86IGFueSkgPT4gb1t0aGlzLm9wdGlvbkxhYmVsXS50b0xvd2VyQ2FzZSgpID09PSBzZWFyY2hWYWxcbiAgICApO1xuICAgIGlmIChmb3VuZCkge1xuICAgICAgdGhpcy5zZWxlY3QoZm91bmQsIGZhbHNlKTtcbiAgICAgIHRoaXMuX3RvZ2dsZU9wdGlvbnModGhpcy5tdWx0aXBsZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICghdGhpcy5tdWx0aXBsZSkge1xuICAgICAgICB0aGlzLmlucHV0VGV4dCA9IHRoaXMuX2dldFZhbHVlTGFiZWwoKTtcbiAgICAgICAgdGhpcy5maWx0ZXJlZE9wdGlvbnMgPSB0aGlzLm9wdGlvbnM7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLl9jbGVhcklucHV0KCk7XG4gIH1cblxuICBwcml2YXRlIF9yZW1vdmVMYXN0VmFsdWUoKSB7XG4gICAgaWYgKCF0aGlzLm11bHRpcGxlIHx8IHRoaXMuaW5wdXRUZXh0KSByZXR1cm47XG5cbiAgICBpZiAodGhpcy52YWx1ZT8ubGVuZ3RoKSB7XG4gICAgICBpZiAodGhpcy5iYWNrc3BhY2VDbGlja2VkT25jZSkge1xuICAgICAgICB0aGlzLnVwZGF0ZVZhbHVlKFxuICAgICAgICAgIHRoaXMudmFsdWUuZmlsdGVyKFxuICAgICAgICAgICAgKHY6IGFueSwgaW5kZXg6IG51bWJlcikgPT4gaW5kZXggIT09IHRoaXMudmFsdWUubGVuZ3RoIC0gMVxuICAgICAgICAgIClcbiAgICAgICAgKTtcblxuICAgICAgICB0aGlzLmJhY2tzcGFjZUNsaWNrZWRPbmNlID0gZmFsc2U7XG4gICAgICB9IGVsc2UgdGhpcy5iYWNrc3BhY2VDbGlja2VkT25jZSA9IHRydWU7XG4gICAgfSBlbHNlIHRoaXMuYmFja3NwYWNlQ2xpY2tlZE9uY2UgPSBmYWxzZTtcblxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5mb2N1c0lucHV0KCk7XG4gICAgfSwgMCk7XG4gIH1cbn1cbiIsIjxkaXZcbiAgZGF0YS1jeS1pZD1cImNwcy1hdXRvY29tcGxldGVcIlxuICBbbmdTdHlsZV09XCJ7IHdpZHRoOiBjdnRXaWR0aCB9XCJcbiAgY2xhc3M9XCJjcHMtYXV0b2NvbXBsZXRlXCJcbiAgdGFiaW5kZXg9XCIxXCJcbiAgW25nQ2xhc3NdPVwieyBkaXNhYmxlZDogZGlzYWJsZWQsIGVycm9yOiBlcnJvciwgYWN0aXZlOiBpc09wZW5lZCB9XCJcbiAgI2F1dG9jb21wbGV0ZUNvbnRhaW5lcj5cbiAgPGRpdiBjbGFzcz1cImNwcy1hdXRvY29tcGxldGUtbGFiZWxcIiAqbmdJZj1cImxhYmVsXCI+XG4gICAgPGxhYmVsPnt7IGxhYmVsIH19PC9sYWJlbD5cbiAgICA8Y3BzLWluZm8tY2lyY2xlXG4gICAgICAqbmdJZj1cImluZm9Ub29sdGlwXCJcbiAgICAgIGNsYXNzPVwiY3BzLWF1dG9jb21wbGV0ZS1sYWJlbC1pbmZvLWNpcmNsZVwiXG4gICAgICBzaXplPVwieHNtYWxsXCJcbiAgICAgIFt0b29sdGlwUG9zaXRpb25dPVwiaW5mb1Rvb2x0aXBQb3NpdGlvblwiXG4gICAgICBbdG9vbHRpcENvbnRlbnRDbGFzc109XCJpbmZvVG9vbHRpcENsYXNzXCJcbiAgICAgIFt0b29sdGlwTWF4V2lkdGhdPVwiaW5mb1Rvb2x0aXBNYXhXaWR0aFwiXG4gICAgICBbdG9vbHRpcFBlcnNpc3RlbnRdPVwiaW5mb1Rvb2x0aXBQZXJzaXN0ZW50XCJcbiAgICAgIFt0b29sdGlwVGV4dF09XCJpbmZvVG9vbHRpcFwiPlxuICAgIDwvY3BzLWluZm8tY2lyY2xlPlxuICA8L2Rpdj5cbiAgPGRpdlxuICAgIChrZXlkb3duKT1cIm9uQ29udGFpbmVyS2V5RG93bigkZXZlbnQpXCJcbiAgICBjbGFzcz1cImNwcy1hdXRvY29tcGxldGUtY29udGFpbmVyXCJcbiAgICBbY2xhc3MuZm9jdXNlZF09XCJpc09wZW5lZFwiXG4gICAgW25nQ2xhc3NdPVwie1xuICAgICAgJ3BlcnNpc3RlbnQtY2xlYXInOiBwZXJzaXN0ZW50Q2xlYXIsXG4gICAgICBib3JkZXJsZXNzOiBhcHBlYXJhbmNlID09PSAnYm9yZGVybGVzcycsXG4gICAgICB1bmRlcmxpbmVkOiBhcHBlYXJhbmNlID09PSAndW5kZXJsaW5lZCdcbiAgICB9XCI+XG4gICAgPGRpdiBjbGFzcz1cImNwcy1hdXRvY29tcGxldGUtYm94XCIgI2F1dG9jb21wbGV0ZUJveCAoY2xpY2spPVwib25Cb3hDbGljaygpXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiY3BzLWF1dG9jb21wbGV0ZS1ib3gtYXJlYVwiPlxuICAgICAgICA8Y3BzLWljb25cbiAgICAgICAgICAqbmdJZj1cInByZWZpeEljb25cIlxuICAgICAgICAgIFtpY29uXT1cInByZWZpeEljb25cIlxuICAgICAgICAgIFtzdHlsZS5jb2xvcl09XCJkaXNhYmxlZCA/ICcjOWE5NTk1JyA6IG51bGxcIlxuICAgICAgICAgIFtzaXplXT1cInByZWZpeEljb25TaXplXCJcbiAgICAgICAgICBjbGFzcz1cInByZWZpeC1pY29uXCI+XG4gICAgICAgIDwvY3BzLWljb24+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzcz1cImNwcy1hdXRvY29tcGxldGUtYm94LWl0ZW1zXCJcbiAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgKHZhbHVlICYmICFtdWx0aXBsZSkgfHwgKHZhbHVlPy5sZW5ndGggPiAwICYmIG11bHRpcGxlKTtcbiAgICAgICAgICAgIGVsc2UgYXV0b2NvbXBsZXRlSW5wdXRcbiAgICAgICAgICBcIj5cbiAgICAgICAgICA8c3BhbiAqbmdJZj1cIiFtdWx0aXBsZVwiIGNsYXNzPVwic2luZ2xlLWl0ZW1cIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzaW5nbGUtaXRlbS1zZWxlY3Rpb25cIj5cbiAgICAgICAgICAgICAgPHNwYW4gW3N0eWxlLm9wYWNpdHldPVwiYWN0aXZlU2luZ2xlID8gMCA6IDFcIj57e1xuICAgICAgICAgICAgICAgIHJldHVybk9iamVjdFxuICAgICAgICAgICAgICAgICAgPyB2YWx1ZVtvcHRpb25MYWJlbF1cbiAgICAgICAgICAgICAgICAgIDogKHZhbHVlIHwgbGFiZWxCeVZhbHVlIDogb3B0aW9ucyA6IG9wdGlvblZhbHVlIDogb3B0aW9uTGFiZWwpXG4gICAgICAgICAgICAgIH19PC9zcGFuPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgICAgICAgICAgYXV0b2NvbXBsZXRlSW5wdXQ7XG4gICAgICAgICAgICAgICAgY29udGV4dDoge1xuICAgICAgICAgICAgICAgICAgaW5wdXRDbGFzczogJ3NpbmdsZS1pdGVtLWlucHV0JyxcbiAgICAgICAgICAgICAgICAgIGlucHV0U3R5bGU6IGFjdGl2ZVNpbmdsZSA/ICdvcGFjaXR5OiAxJyA6IG51bGxcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIFwiPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPC9zcGFuPlxuXG4gICAgICAgICAgPGRpdiAqbmdJZj1cIm11bHRpcGxlICYmICFjaGlwc1wiIGNsYXNzPVwidGV4dC1ncm91cFwiPlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgdmFsIG9mIHZhbHVlOyBsZXQgbGFzdCA9IGxhc3RcIlxuICAgICAgICAgICAgICBjbGFzcz1cInRleHQtZ3JvdXAtaXRlbVwiXG4gICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ2Fib3V0LXRvLXJlbW92ZSc6IGxhc3QgJiYgYmFja3NwYWNlQ2xpY2tlZE9uY2UgfVwiPlxuICAgICAgICAgICAgICB7e1xuICAgICAgICAgICAgICAgIHJldHVybk9iamVjdFxuICAgICAgICAgICAgICAgICAgPyB2YWxbb3B0aW9uTGFiZWxdXG4gICAgICAgICAgICAgICAgICA6ICh2YWwgfCBsYWJlbEJ5VmFsdWUgOiBvcHRpb25zIDogb3B0aW9uVmFsdWUgOiBvcHRpb25MYWJlbClcbiAgICAgICAgICAgICAgfX17eyAhbGFzdCA/ICcsJyA6ICcnIH19XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJhdXRvY29tcGxldGVJbnB1dFwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPGRpdiAqbmdJZj1cIm11bHRpcGxlICYmIGNoaXBzXCIgY2xhc3M9XCJjaGlwcy1ncm91cFwiPlxuICAgICAgICAgICAgPGNwcy1jaGlwXG4gICAgICAgICAgICAgICpuZ0Zvcj1cImxldCB2YWwgb2YgdmFsdWU7IGxldCBsYXN0ID0gbGFzdFwiXG4gICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICAgICAgICAgIFtjbG9zYWJsZV09XCJjbG9zYWJsZUNoaXBzXCJcbiAgICAgICAgICAgICAgKGNsb3NlZCk9XCJzZWxlY3QodmFsLCB0cnVlKVwiXG4gICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ2Fib3V0LXRvLXJlbW92ZSc6IGxhc3QgJiYgYmFja3NwYWNlQ2xpY2tlZE9uY2UgfVwiXG4gICAgICAgICAgICAgIFtsYWJlbF09XCJcbiAgICAgICAgICAgICAgICByZXR1cm5PYmplY3RcbiAgICAgICAgICAgICAgICAgID8gdmFsW29wdGlvbkxhYmVsXVxuICAgICAgICAgICAgICAgICAgOiAodmFsIHwgbGFiZWxCeVZhbHVlIDogb3B0aW9ucyA6IG9wdGlvblZhbHVlIDogb3B0aW9uTGFiZWwpXG4gICAgICAgICAgICAgIFwiPlxuICAgICAgICAgICAgPC9jcHMtY2hpcD5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJhdXRvY29tcGxldGVJbnB1dFwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJjcHMtYXV0b2NvbXBsZXRlLWJveC1pY29uc1wiPlxuICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAqbmdJZj1cImNsZWFyYWJsZSAmJiAhZGlzYWJsZWRcIlxuICAgICAgICAgICAgW3N0eWxlLnZpc2liaWxpdHldPVwiXG4gICAgICAgICAgICAgIHBlcnNpc3RlbnRDbGVhciB8fFxuICAgICAgICAgICAgICAoIXBlcnNpc3RlbnRDbGVhciAmJlxuICAgICAgICAgICAgICAgICgobXVsdGlwbGUgJiYgdmFsdWU/Lmxlbmd0aCkgfHwgKCFtdWx0aXBsZSAmJiB2YWx1ZSkpKVxuICAgICAgICAgICAgICAgID8gJ3Zpc2libGUnXG4gICAgICAgICAgICAgICAgOiAnaGlkZGVuJ1xuICAgICAgICAgICAgXCJcbiAgICAgICAgICAgIGNsYXNzPVwiY3BzLWF1dG9jb21wbGV0ZS1ib3gtY2xlYXItaWNvblwiPlxuICAgICAgICAgICAgPGNwcy1pY29uXG4gICAgICAgICAgICAgIGljb249XCJkZWxldGVcIlxuICAgICAgICAgICAgICBzaXplPVwic21hbGxcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwiY2xlYXIoJGV2ZW50KVwiPjwvY3BzLWljb24+XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICBjbGFzcz1cImNwcy1hdXRvY29tcGxldGUtYm94LWNoZXZyb25cIlxuICAgICAgICAgICAgKGNsaWNrKT1cIm9uQ2hldnJvbkNsaWNrKCRldmVudClcIj5cbiAgICAgICAgICAgIDxjcHMtaWNvblxuICAgICAgICAgICAgICBpY29uPVwiY2hldnJvbi1kb3duXCJcbiAgICAgICAgICAgICAgc2l6ZT1cInNtYWxsXCJcbiAgICAgICAgICAgICAgW2NvbG9yXT1cImRpc2FibGVkID8gJ3RleHQtbGlnaHQnIDogJ3RleHQtZGFyaydcIj48L2Nwcy1pY29uPlxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC9zcGFuPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8Y3BzLW1lbnVcbiAgICAgICNvcHRpb25zTWVudVxuICAgICAgW3dpdGhBcnJvd109XCJmYWxzZVwiXG4gICAgICAoYmVmb3JlTWVudUhpZGRlbik9XCJvbkJlZm9yZU9wdGlvbnNIaWRkZW4oKVwiXG4gICAgICBoaWRlVHJhbnNpdGlvbk9wdGlvbnM9XCIwcyBsaW5lYXJcIlxuICAgICAgY29udGFpbmVyQ2xhc3M9XCJjcHMtYXV0b2NvbXBsZXRlLW9wdGlvbnMtbWVudVwiPlxuICAgICAgPGRpdlxuICAgICAgICAjb3B0aW9uc0xpc3RcbiAgICAgICAgY2xhc3M9XCJjcHMtYXV0b2NvbXBsZXRlLW9wdGlvbnNcIlxuICAgICAgICBbbmdTdHlsZV09XCJ7XG4gICAgICAgICAgd2lkdGg6IGF1dG9jb21wbGV0ZUJveFdpZHRoICsgJ3B4J1xuICAgICAgICB9XCI+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICAqbmdJZj1cImZpbHRlcmVkT3B0aW9ucy5sZW5ndGggPCAxXCJcbiAgICAgICAgICBjbGFzcz1cImNwcy1hdXRvY29tcGxldGUtb3B0aW9ucy1lbXB0eVwiPlxuICAgICAgICAgIHt7IGVtcHR5TWVzc2FnZSB9fVxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiF2aXJ0dWFsU2Nyb2xsXCI+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3M9XCJjcHMtYXV0b2NvbXBsZXRlLW9wdGlvbnMtb3B0aW9uIHNlbGVjdC1hbGwtb3B0aW9uXCJcbiAgICAgICAgICAgIFtjbGFzcy5hbGxzZWxlY3RlZF09XCJ2YWx1ZT8ubGVuZ3RoID09PSBvcHRpb25zLmxlbmd0aFwiXG4gICAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgICBtdWx0aXBsZSAmJlxuICAgICAgICAgICAgICBzZWxlY3RBbGwgJiZcbiAgICAgICAgICAgICAgZmlsdGVyZWRPcHRpb25zLmxlbmd0aCA9PT0gb3B0aW9ucy5sZW5ndGggJiZcbiAgICAgICAgICAgICAgb3B0aW9ucy5sZW5ndGggPiAxXG4gICAgICAgICAgICBcIlxuICAgICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZUFsbCgpXCI+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNwcy1hdXRvY29tcGxldGUtb3B0aW9ucy1vcHRpb24tbGVmdFwiPlxuICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICpuZ0lmPVwibXVsdGlwbGVcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiY3BzLWF1dG9jb21wbGV0ZS1vcHRpb25zLW9wdGlvbi1jaGVja1wiPlxuICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3BzLWF1dG9jb21wbGV0ZS1vcHRpb25zLW9wdGlvbi1sYWJlbFwiXG4gICAgICAgICAgICAgICAgPlNlbGVjdCBhbGw8L3NwYW5cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGl0ZW0gb2YgZmlsdGVyZWRPcHRpb25zXCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgICAgICAgICAgaXRlbVRlbXBsYXRlO1xuICAgICAgICAgICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICAgICAgICAgIGl0ZW06IGl0ZW1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIFwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInZpcnR1YWxTY3JvbGxcIj5cbiAgICAgICAgICA8cC12aXJ0dWFsU2Nyb2xsZXJcbiAgICAgICAgICAgICN2aXJ0dWFsTGlzdFxuICAgICAgICAgICAgW3ZhbHVlXT1cImZpbHRlcmVkT3B0aW9uc1wiXG4gICAgICAgICAgICBbZGVsYXldPVwiMFwiXG4gICAgICAgICAgICBbc2Nyb2xsSGVpZ2h0XT1cInZpcnR1YWxMaXN0SGVpZ2h0ICsgJ3B4J1wiXG4gICAgICAgICAgICBbb3B0aW9uc109XCJ7IG51bVRvbGVyYXRlZEl0ZW1zOiAzIH1cIlxuICAgICAgICAgICAgW2l0ZW1TaXplXT1cInZpcnR1YWxTY3JvbGxJdGVtU2l6ZVwiPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cIml0ZW1cIiBsZXQtaXRlbT5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgICAgICAgICAgICBpdGVtVGVtcGxhdGU7XG4gICAgICAgICAgICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgICAgICAgICAgIGl0ZW06IGl0ZW1cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPC9wLXZpcnR1YWxTY3JvbGxlcj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Nwcy1tZW51PlxuICAgIDxjcHMtcHJvZ3Jlc3MtbGluZWFyXG4gICAgICAqbmdJZj1cImxvYWRpbmdcIlxuICAgICAgaGVpZ2h0PVwiM1wiXG4gICAgICByYWRpdXM9XCI0XCJcbiAgICAgIG9wYWNpdHk9XCIwLjNcIlxuICAgICAgY2xhc3M9XCJhdXRvY29tcGxldGUtcHJvZ3Jlc3MtYmFyXCJcbiAgICAgIGJnQ29sb3I9XCJ0cmFuc3BhcmVudFwiPlxuICAgIDwvY3BzLXByb2dyZXNzLWxpbmVhcj5cbiAgPC9kaXY+XG4gIDxkaXYgKm5nSWY9XCIhZXJyb3IgJiYgIWhpZGVEZXRhaWxzXCIgY2xhc3M9XCJjcHMtYXV0b2NvbXBsZXRlLWhpbnRcIj5cbiAgICB7eyBoaW50IH19XG4gIDwvZGl2PlxuICA8ZGl2ICpuZ0lmPVwiZXJyb3IgJiYgIWhpZGVEZXRhaWxzXCIgY2xhc3M9XCJjcHMtYXV0b2NvbXBsZXRlLWVycm9yXCI+XG4gICAge3sgZXJyb3IgfX1cbiAgPC9kaXY+XG48L2Rpdj5cblxuPG5nLXRlbXBsYXRlXG4gICNhdXRvY29tcGxldGVJbnB1dFxuICBsZXQtaW5wdXRDbGFzcz1cImlucHV0Q2xhc3NcIlxuICBsZXQtaW5wdXRTdHlsZT1cImlucHV0U3R5bGVcIj5cbiAgPGlucHV0XG4gICAgY2xhc3M9XCJjcHMtYXV0b2NvbXBsZXRlLWJveC1pbnB1dFwiXG4gICAgc3BlbGxjaGVjaz1cImZhbHNlXCJcbiAgICBbY2xhc3NdPVwiaW5wdXRDbGFzc1wiXG4gICAgW3N0eWxlXT1cImlucHV0U3R5bGVcIlxuICAgIFtwbGFjZWhvbGRlcl09XCJcbiAgICAgICghdmFsdWUgJiYgIW11bHRpcGxlKSB8fCAodmFsdWU/Lmxlbmd0aCA8IDEgJiYgbXVsdGlwbGUpXG4gICAgICAgID8gcGxhY2Vob2xkZXJcbiAgICAgICAgOiAnJ1xuICAgIFwiXG4gICAgKGlucHV0KT1cImZpbHRlck9wdGlvbnMoJGV2ZW50KVwiXG4gICAgKGtleWRvd24pPVwib25JbnB1dEtleURvd24oJGV2ZW50KVwiXG4gICAgWyhuZ01vZGVsKV09XCJpbnB1dFRleHRcIlxuICAgIChibHVyKT1cIm9uQmx1cigpXCIgLz5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjaXRlbVRlbXBsYXRlIGxldC1pdGVtPVwiaXRlbVwiPlxuICA8ZGl2XG4gICAgY2xhc3M9XCJjcHMtYXV0b2NvbXBsZXRlLW9wdGlvbnMtb3B0aW9uXCJcbiAgICAoY2xpY2spPVwib25PcHRpb25DbGljayhpdGVtKVwiXG4gICAgW2NsYXNzLnNlbGVjdGVkXT1cIlxuICAgICAgaXRlbSB8IGNoZWNrT3B0aW9uU2VsZWN0ZWQgOiB2YWx1ZSA6IG11bHRpcGxlIDogcmV0dXJuT2JqZWN0IDogb3B0aW9uVmFsdWVcbiAgICBcIj5cbiAgICA8c3BhbiBjbGFzcz1cImNwcy1hdXRvY29tcGxldGUtb3B0aW9ucy1vcHRpb24tbGVmdFwiPlxuICAgICAgPHNwYW4gKm5nSWY9XCJtdWx0aXBsZVwiIGNsYXNzPVwiY3BzLWF1dG9jb21wbGV0ZS1vcHRpb25zLW9wdGlvbi1jaGVja1wiPlxuICAgICAgPC9zcGFuPlxuICAgICAgPHNwYW5cbiAgICAgICAgZGF0YS1jeS1pZD1cImNwcy1hdXRvY29tcGxldGUtb3B0aW9uc1wiXG4gICAgICAgIGNsYXNzPVwiY3BzLWF1dG9jb21wbGV0ZS1vcHRpb25zLW9wdGlvbi1sYWJlbFwiXG4gICAgICAgIFtjbGFzcy52aXJ0dWFsLXJvd109XCJ2aXJ0dWFsU2Nyb2xsXCJcbiAgICAgICAgPnt7IGl0ZW1bb3B0aW9uTGFiZWxdIH19PC9zcGFuXG4gICAgICA+XG4gICAgPC9zcGFuPlxuXG4gICAgPHNwYW5cbiAgICAgIGNsYXNzPVwiY3BzLWF1dG9jb21wbGV0ZS1vcHRpb25zLW9wdGlvbi1yaWdodFwiXG4gICAgICBbY2xhc3MudmlydHVhbC1yb3ddPVwidmlydHVhbFNjcm9sbFwiXG4gICAgICA+e3sgaXRlbVtvcHRpb25JbmZvXSB9fTwvc3BhblxuICAgID5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuIl19
581
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3BzLWF1dG9jb21wbGV0ZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jcHMtdWkta2l0L3NyYy9saWIvY29tcG9uZW50cy9jcHMtYXV0b2NvbXBsZXRlL2Nwcy1hdXRvY29tcGxldGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY3BzLXVpLWtpdC9zcmMvbGliL2NvbXBvbmVudHMvY3BzLWF1dG9jb21wbGV0ZS9jcHMtYXV0b2NvbXBsZXRlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBRUwsU0FBUyxFQUVULFlBQVksRUFDWixLQUFLLEVBR0wsUUFBUSxFQUNSLE1BQU0sRUFDTixJQUFJLEVBQ0osU0FBUyxFQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBd0IsV0FBVyxFQUFhLE1BQU0sZ0JBQWdCLENBQUM7QUFDOUUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNwQyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDOUQsT0FBTyxFQUNMLGdCQUFnQixFQUdqQixNQUFNLGdDQUFnQyxDQUFDO0FBQ3hDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ2xFLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLHNEQUFzRCxDQUFDO0FBQ2xHLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDhDQUE4QyxDQUFDO0FBQ3RGLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBQzVFLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLGlEQUFpRCxDQUFDO0FBQzFGLE9BQU8sRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLE1BQU0s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QW1CO3NCQUEzQixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBRVUsTUFBTTtzQkFBckIsS0FBSzt1QkFBQyxPQUFPO2dCQVdKLFlBQVk7c0JBQXJCLE1BQU07Z0JBR1AsZUFBZTtzQkFEZCxTQUFTO3VCQUFDLGlCQUFpQjtnQkFJNUIscUJBQXFCO3NCQURwQixTQUFTO3VCQUFDLHVCQUF1QjtnQkFJbEMsV0FBVztzQkFEVixTQUFTO3VCQUFDLGFBQWE7Z0JBSXhCLFdBQVc7c0JBRFYsU0FBUzt1QkFBQyxhQUFhO2dCQUl4QixXQUFXO3NCQURWLFNBQVM7dUJBQUMsYUFBYSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICBBZnRlclZpZXdJbml0LFxuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgSW5wdXQsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBPcHRpb25hbCxcbiAgT3V0cHV0LFxuICBTZWxmLFxuICBWaWV3Q2hpbGRcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciwgRm9ybXNNb2R1bGUsIE5nQ29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgY29udmVydFNpemUgfSBmcm9tICcuLi8uLi91dGlscy9pbnRlcm5hbC9zaXplLXV0aWxzJztcbmltcG9ydCB7XG4gIENwc0ljb25Db21wb25lbnQsXG4gIEljb25UeXBlLFxuICBpY29uU2l6ZVR5cGVcbn0gZnJvbSAnLi4vY3BzLWljb24vY3BzLWljb24uY29tcG9uZW50JztcbmltcG9ydCB7IENwc0NoaXBDb21wb25lbnQgfSBmcm9tICcuLi9jcHMtY2hpcC9jcHMtY2hpcC5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ3BzUHJvZ3Jlc3NMaW5lYXJDb21wb25lbnQgfSBmcm9tICcuLi9jcHMtcHJvZ3Jlc3MtbGluZWFyL2Nwcy1wcm9ncmVzcy1saW5lYXIuY29tcG9uZW50JztcbmltcG9ydCB7IENwc0luZm9DaXJjbGVDb21wb25lbnQgfSBmcm9tICcuLi9jcHMtaW5mby1jaXJjbGUvY3BzLWluZm8tY2lyY2xlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBMYWJlbEJ5VmFsdWVQaXBlIH0gZnJvbSAnLi4vLi4vcGlwZXMvaW50ZXJuYWwvbGFiZWwtYnktdmFsdWUucGlwZSc7XG5pbXBvcnQgeyBDaGVja09wdGlvblNlbGVjdGVkUGlwZSB9IGZyb20gJy4uLy4uL3BpcGVzL2ludGVybmFsL2NoZWNrLW9wdGlvbi1zZWxlY3RlZC5waXBlJztcbmltcG9ydCB7IGZpbmQsIGlzRXF1YWwgfSBmcm9tICdsb2Rhc2gtZXMnO1xuaW1wb3J0IHtcbiAgVmlydHVhbFNjcm9sbGVyLFxuICBWaXJ0dWFsU2Nyb2xsZXJNb2R1bGVcbn0gZnJvbSAncHJpbWVuZy92aXJ0dWFsc2Nyb2xsZXInO1xuaW1wb3J0IHsgVG9vbHRpcFBvc2l0aW9uIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlcy9jcHMtdG9vbHRpcC5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgQ3BzTWVudUNvbXBvbmVudCB9IGZyb20gJy4uL2Nwcy1tZW51L2Nwcy1tZW51LmNvbXBvbmVudCc7XG5cbmV4cG9ydCB0eXBlIENwc0F1dG9jb21wbGV0ZUFwcGVhcmFuY2VUeXBlID1cbiAgfCAnb3V0bGluZWQnXG4gIHwgJ3VuZGVybGluZWQnXG4gIHwgJ2JvcmRlcmxlc3MnO1xuXG5AQ29tcG9uZW50KHtcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1xuICAgIENvbW1vbk1vZHVsZSxcbiAgICBGb3Jtc01vZHVsZSxcbiAgICBDcHNJY29uQ29tcG9uZW50LFxuICAgIENwc0NoaXBDb21wb25lbnQsXG4gICAgQ3BzUHJvZ3Jlc3NMaW5lYXJDb21wb25lbnQsXG4gICAgQ3BzSW5mb0NpcmNsZUNvbXBvbmVudCxcbiAgICBMYWJlbEJ5VmFsdWVQaXBlLFxuICAgIENoZWNrT3B0aW9uU2VsZWN0ZWRQaXBlLFxuICAgIFZpcnR1YWxTY3JvbGxlck1vZHVsZSxcbiAgICBDcHNNZW51Q29tcG9uZW50XG4gIF0sXG4gIHByb3ZpZGVyczogW0xhYmVsQnlWYWx1ZVBpcGUsIENoZWNrT3B0aW9uU2VsZWN0ZWRQaXBlXSxcbiAgc2VsZWN0b3I6ICdjcHMtYXV0b2NvbXBsZXRlJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2Nwcy1hdXRvY29tcGxldGUuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9jcHMtYXV0b2NvbXBsZXRlLmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgQ3BzQXV0b2NvbXBsZXRlQ29tcG9uZW50XG4gIGltcGxlbWVudHMgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95XG57XG4gIEBJbnB1dCgpIGxhYmVsID0gJyc7XG4gIEBJbnB1dCgpIHBsYWNlaG9sZGVyID0gJ1BsZWFzZSBlbnRlcic7XG4gIEBJbnB1dCgpIGhpbnQgPSAnJztcbiAgQElucHV0KCkgcmV0dXJuT2JqZWN0ID0gdHJ1ZTsgLy8gaWYgZmFsc2UsIHZhbHVlIHdpbGwgYmUgb3B0aW9uW29wdGlvblZhbHVlXVxuICBASW5wdXQoKSBtdWx0aXBsZSA9IGZhbHNlO1xuICBASW5wdXQoKSBkaXNhYmxlZCA9IGZhbHNlO1xuICBASW5wdXQoKSB3aWR0aDogbnVtYmVyIHwgc3RyaW5nID0gJzEwMCUnO1xuICBASW5wdXQoKSBzZWxlY3RBbGwgPSB0cnVlOyAvLyBkb2Vzbid0IHdvcmsgd2l0aCB2aXJ0dWFsIHNjcm9sbFxuICBASW5wdXQoKSBjaGlwcyA9IHRydWU7XG4gIEBJbnB1dCgpIGNsb3NhYmxlQ2hpcHMgPSB0cnVlO1xuICBASW5wdXQoKSBjbGVhcmFibGUgPSBmYWxzZTtcbiAgQElucHV0KCkgb3Blbk9uQ2xlYXIgPSB0cnVlO1xuICBASW5wdXQoKSBvcHRpb25zID0gW10gYXMgYW55W107XG4gIEBJbnB1dCgpIG9wdGlvbkxhYmVsID0gJ2xhYmVsJztcbiAgQElucHV0KCkgb3B0aW9uVmFsdWUgPSAndmFsdWUnOyAvLyBuZWVkZWQgb25seSBpZiByZXR1cm5PYmplY3QgPT09IGZhbHNlXG4gIEBJbnB1dCgpIG9wdGlvbkluZm8gPSAnaW5mbyc7XG4gIEBJbnB1dCgpIGhpZGVEZXRhaWxzID0gZmFsc2U7XG4gIEBJbnB1dCgpIHBlcnNpc3RlbnRDbGVhciA9IGZhbHNlO1xuICBASW5wdXQoKSBwcmVmaXhJY29uOiBJY29uVHlwZSA9ICcnO1xuICBASW5wdXQoKSBwcmVmaXhJY29uU2l6ZTogaWNvblNpemVUeXBlID0gJzE4cHgnO1xuICBASW5wdXQoKSBsb2FkaW5nID0gZmFsc2U7XG4gIEBJbnB1dCgpIGVtcHR5TWVzc2FnZSA9ICdObyByZXN1bHRzIGZvdW5kJztcbiAgQElucHV0KCkgdmlydHVhbFNjcm9sbCA9IGZhbHNlO1xuICBASW5wdXQoKSBpbmZvVG9vbHRpcCA9ICcnO1xuICBASW5wdXQoKSBpbmZvVG9vbHRpcENsYXNzID0gJ2Nwcy10b29sdGlwLWNvbnRlbnQnO1xuICBASW5wdXQoKSBpbmZvVG9vbHRpcE1heFdpZHRoOiBudW1iZXIgfCBzdHJpbmcgPSAnMTAwJSc7XG4gIEBJbnB1dCgpIGluZm9Ub29sdGlwUGVyc2lzdGVudCA9IGZhbHNlO1xuICBASW5wdXQoKSBpbmZvVG9vbHRpcFBvc2l0aW9uOiBUb29sdGlwUG9zaXRpb24gPSAndG9wJztcbiAgQElucHV0KCkgYXBwZWFyYW5jZTogQ3BzQXV0b2NvbXBsZXRlQXBwZWFyYW5jZVR5cGUgPSAnb3V0bGluZWQnO1xuXG4gIEBJbnB1dCgndmFsdWUnKSBfdmFsdWU6IGFueSA9IHVuZGVmaW5lZDtcblxuICBnZXQgdmFsdWUoKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5fdmFsdWU7XG4gIH1cblxuICBzZXQgdmFsdWUodmFsdWU6IGFueSkge1xuICAgIHRoaXMuX3ZhbHVlID0gdmFsdWU7XG4gICAgdGhpcy5vbkNoYW5nZSh2YWx1ZSk7XG4gIH1cblxuICBAT3V0cHV0KCkgdmFsdWVDaGFuZ2VkID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgQFZpZXdDaGlsZCgnYXV0b2NvbXBsZXRlQm94JylcbiAgYXV0b2NvbXBsZXRlQm94ITogRWxlbWVudFJlZjtcblxuICBAVmlld0NoaWxkKCdhdXRvY29tcGxldGVDb250YWluZXInKVxuICBhdXRvY29tcGxldGVDb250YWluZXIhOiBFbGVtZW50UmVmO1xuXG4gIEBWaWV3Q2hpbGQoJ3ZpcnR1YWxMaXN0JylcbiAgdmlydHVhbExpc3QhOiBWaXJ0dWFsU2Nyb2xsZXI7XG5cbiAgQFZpZXdDaGlsZCgnb3B0aW9uc01lbnUnKVxuICBvcHRpb25zTWVudSE6IENwc01lbnVDb21wb25lbnQ7XG5cbiAgQFZpZXdDaGlsZCgnb3B0aW9uc0xpc3QnKVxuICBvcHRpb25zTGlzdCE6IEVsZW1lbnRSZWY7XG5cbiAgcHJpdmF0ZSBfc3RhdHVzQ2hhbmdlc1N1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuXG4gIGVycm9yID0gJyc7XG4gIGN2dFdpZHRoID0gJyc7XG4gIGlzT3BlbmVkID0gZmFsc2U7XG4gIGlucHV0VGV4dCA9ICcnO1xuICBmaWx0ZXJlZE9wdGlvbnMgPSBbXSBhcyBhbnlbXTtcbiAgYmFja3NwYWNlQ2xpY2tlZE9uY2UgPSBmYWxzZTtcbiAgYWN0aXZlU2luZ2xlID0gZmFsc2U7XG4gIG9wdGlvbkhpZ2hsaWdodGVkSW5kZXggPSAtMTtcblxuICB2aXJ0dWFsTGlzdEhlaWdodCA9IDI0MDtcbiAgdmlydHVhbFNjcm9sbEl0ZW1TaXplID0gNDI7XG5cbiAgYXV0b2NvbXBsZXRlQm94V2lkdGggPSAwO1xuICByZXNpemVPYnNlcnZlcjogUmVzaXplT2JzZXJ2ZXI7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgQFNlbGYoKSBAT3B0aW9uYWwoKSBwcml2YXRlIF9jb250cm9sOiBOZ0NvbnRyb2wsXG4gICAgcHJpdmF0ZSBfbGFiZWxCeVZhbHVlOiBMYWJlbEJ5VmFsdWVQaXBlXG4gICkge1xuICAgIGlmICh0aGlzLl9jb250cm9sKSB7XG4gICAgICB0aGlzLl9jb250cm9sLnZhbHVlQWNjZXNzb3IgPSB0aGlzO1xuICAgIH1cbiAgICB0aGlzLnJlc2l6ZU9ic2VydmVyID0gbmV3IFJlc2l6ZU9ic2VydmVyKChlbnRyaWVzKSA9PiB7XG4gICAgICBlbnRyaWVzLmZvckVhY2goKGVudHJ5KSA9PiB7XG4gICAgICAgIGlmIChlbnRyeT8udGFyZ2V0KVxuICAgICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlQm94V2lkdGggPSAoZW50cnkudGFyZ2V0IGFzIGFueSkub2Zmc2V0V2lkdGg7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMuZmlsdGVyZWRPcHRpb25zID0gdGhpcy5vcHRpb25zO1xuICAgIHRoaXMuY3Z0V2lkdGggPSBjb252ZXJ0U2l6ZSh0aGlzLndpZHRoKTtcbiAgICBpZiAodGhpcy5tdWx0aXBsZSAmJiAhdGhpcy5fdmFsdWUpIHtcbiAgICAgIHRoaXMuX3ZhbHVlID0gW107XG4gICAgfVxuXG4gICAgdGhpcy5fc3RhdHVzQ2hhbmdlc1N1YnNjcmlwdGlvbiA9IHRoaXMuX2NvbnRyb2w/LnN0YXR1c0NoYW5nZXM/LnN1YnNjcmliZShcbiAgICAgICgpID0+IHtcbiAgICAgICAgdGhpcy5fY2hlY2tFcnJvcnMoKTtcbiAgICAgIH1cbiAgICApIGFzIFN1YnNjcmlwdGlvbjtcblxuICAgIHRoaXMucmVjYWxjVmlydHVhbExpc3RIZWlnaHQoKTtcbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLnJlc2l6ZU9ic2VydmVyLm9ic2VydmUodGhpcy5hdXRvY29tcGxldGVCb3gubmF0aXZlRWxlbWVudCk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLl9zdGF0dXNDaGFuZ2VzU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMucmVzaXplT2JzZXJ2ZXI/LmRpc2Nvbm5lY3QoKTtcbiAgfVxuXG4gIHNlbGVjdChvcHRpb246IGFueSwgYnlWYWx1ZTogYm9vbGVhbik6IHZvaWQge1xuICAgIGZ1bmN0aW9uIGluY2x1ZGVzKGFycmF5OiBhbnlbXSwgdmFsOiBhbnkpOiBib29sZWFuIHtcbiAgICAgIHJldHVybiBhcnJheSA/ICEhZmluZChhcnJheSwgKGl0ZW0pID0+IGlzRXF1YWwoaXRlbSwgdmFsKSkgOiBmYWxzZTtcbiAgICB9XG5cbiAgICB0aGlzLmJhY2tzcGFjZUNsaWNrZWRPbmNlID0gZmFsc2U7XG4gICAgY29uc3QgdmFsID0gYnlWYWx1ZVxuICAgICAgPyBvcHRpb25cbiAgICAgIDogdGhpcy5yZXR1cm5PYmplY3RcbiAgICAgID8gb3B0aW9uXG4gICAgICA6IG9wdGlvblt0aGlzLm9wdGlvblZhbHVlXTtcbiAgICBpZiAodGhpcy5tdWx0aXBsZSkge1xuICAgICAgbGV0IHJlcyA9IFtdIGFzIGFueTtcbiAgICAgIGlmIChpbmNsdWRlcyh0aGlzLnZhbHVlLCB2YWwpKSB7XG4gICAgICAgIHJlcyA9IHRoaXMudmFsdWUuZmlsdGVyKCh2OiBhbnkpID0+ICFpc0VxdWFsKHYsIHZhbCkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5vcHRpb25zLmZvckVhY2goKG8pID0+IHtcbiAgICAgICAgICBjb25zdCBvdiA9IHRoaXMucmV0dXJuT2JqZWN0ID8gbyA6IG9bdGhpcy5vcHRpb25WYWx1ZV07XG4gICAgICAgICAgaWYgKHRoaXMudmFsdWUuc29tZSgodjogYW55KSA9PiBpc0VxdWFsKHYsIG92KSkgfHwgaXNFcXVhbCh2YWwsIG92KSkge1xuICAgICAgICAgICAgcmVzLnB1c2gob3YpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICB0aGlzLnVwZGF0ZVZhbHVlKHJlcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMudXBkYXRlVmFsdWUodmFsKTtcbiAgICB9XG4gICAgdGhpcy5fY2xlYXJJbnB1dCgpO1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5mb2N1c0lucHV0KCk7XG4gICAgfSwgMCk7XG4gIH1cblxuICBvbk9wdGlvbkNsaWNrKG9wdGlvbjogYW55KSB7XG4gICAgdGhpcy5fY2xpY2tPcHRpb24ob3B0aW9uKTtcbiAgfVxuXG4gIHRvZ2dsZUFsbCgpIHtcbiAgICBsZXQgcmVzID0gW107XG4gICAgaWYgKHRoaXMudmFsdWUubGVuZ3RoIDwgdGhpcy5vcHRpb25zLmxlbmd0aCkge1xuICAgICAgaWYgKHRoaXMucmV0dXJuT2JqZWN0KSB7XG4gICAgICAgIHJlcyA9IHRoaXMub3B0aW9ucztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMub3B0aW9ucy5mb3JFYWNoKChvKSA9PiB7XG4gICAgICAgICAgcmVzLnB1c2gob1t0aGlzLm9wdGlvblZhbHVlXSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLnVwZGF0ZVZhbHVlKHJlcyk7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLmZvY3VzSW5wdXQoKTtcbiAgICB9LCAwKTtcbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZW1wdHktZnVuY3Rpb25cbiAgb25DaGFuZ2UgPSAoZXZlbnQ6IGFueSkgPT4ge307XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1lbXB0eS1mdW5jdGlvblxuICBvblRvdWNoZWQgPSAoKSA9PiB7fTtcblxuICByZWdpc3Rlck9uQ2hhbmdlKGZuOiBhbnkpIHtcbiAgICB0aGlzLm9uQ2hhbmdlID0gZm47XG4gIH1cblxuICByZWdpc3Rlck9uVG91Y2hlZChmbjogYW55KSB7XG4gICAgdGhpcy5vblRvdWNoZWQgPSBmbjtcbiAgfVxuXG4gIGZpbHRlck9wdGlvbnMoZXZlbnQ6IGFueSkge1xuICAgIGlmICghdGhpcy5pc09wZW5lZCkge1xuICAgICAgdGhpcy5fdG9nZ2xlT3B0aW9ucyh0cnVlKTtcbiAgICB9XG4gICAgdGhpcy5fZGVoaWdobGlnaHRPcHRpb24oKTtcbiAgICB0aGlzLmJhY2tzcGFjZUNsaWNrZWRPbmNlID0gZmFsc2U7XG4gICAgY29uc3Qgc2VhcmNoVmFsID0gKGV2ZW50Py50YXJnZXQ/LnZhbHVlIHx8ICcnKS50b0xvd2VyQ2FzZSgpO1xuXG4gICAgdGhpcy5maWx0ZXJlZE9wdGlvbnMgPSB0aGlzLm9wdGlvbnMuZmlsdGVyKChvOiBhbnkpID0+XG4gICAgICBvW3RoaXMub3B0aW9uTGFiZWxdLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoc2VhcmNoVmFsKVxuICAgICk7XG5cbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMucmVjYWxjVmlydHVhbExpc3RIZWlnaHQoKTtcbiAgICB9KTtcbiAgfVxuXG4gIHdyaXRlVmFsdWUodmFsdWU6IGFueSkge1xuICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgfVxuXG4gIGNsZWFyKGV2ZW50OiBhbnkpOiB2b2lkIHtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgIGlmIChcbiAgICAgICghdGhpcy5tdWx0aXBsZSAmJiB0aGlzLnZhbHVlKSB8fFxuICAgICAgKHRoaXMubXVsdGlwbGUgJiYgdGhpcy52YWx1ZT8ubGVuZ3RoID4gMClcbiAgICApIHtcbiAgICAgIGlmICh0aGlzLm9wZW5PbkNsZWFyKSB7XG4gICAgICAgIHRoaXMuX3RvZ2dsZU9wdGlvbnModHJ1ZSk7XG4gICAgICB9XG4gICAgICBjb25zdCB2YWwgPSB0aGlzLm11bHRpcGxlID8gW10gOiB0aGlzLnJldHVybk9iamVjdCA/IHVuZGVmaW5lZCA6ICcnO1xuICAgICAgdGhpcy51cGRhdGVWYWx1ZSh2YWwpO1xuICAgIH1cbiAgICB0aGlzLl9jbGVhcklucHV0KCk7XG4gICAgdGhpcy5fZGVoaWdobGlnaHRPcHRpb24oKTtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuZm9jdXNJbnB1dCgpO1xuICAgIH0sIDApO1xuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1lbXB0eS1mdW5jdGlvblxuICBzZXREaXNhYmxlZFN0YXRlKGRpc2FibGVkOiBib29sZWFuKSB7fVxuXG4gIG9uQmx1cigpIHtcbiAgICB0aGlzLl9jb250cm9sPy5jb250cm9sPy5tYXJrQXNUb3VjaGVkKCk7XG4gICAgdGhpcy5fY2hlY2tFcnJvcnMoKTtcbiAgfVxuXG4gIG9uQmVmb3JlT3B0aW9uc0hpZGRlbigpIHtcbiAgICB0aGlzLl9jbG9zZUFuZENsZWFyKCk7XG4gIH1cblxuICBvbkJveENsaWNrKCkge1xuICAgIGlmICghdGhpcy5tdWx0aXBsZSkge1xuICAgICAgdGhpcy5hY3RpdmVTaW5nbGUgPSB0cnVlO1xuICAgICAgdGhpcy5pbnB1dFRleHQgPSB0aGlzLl9nZXRWYWx1ZUxhYmVsKCk7XG4gICAgICB0aGlzLmZpbHRlcmVkT3B0aW9ucyA9IHRoaXMub3B0aW9ucztcbiAgICB9XG4gICAgdGhpcy5mb2N1cygpO1xuICAgIHRoaXMuX2RlaGlnaGxpZ2h0T3B0aW9uKCk7XG4gIH1cblxuICBvbkNvbnRhaW5lcktleURvd24oZXZlbnQ6IGFueSkge1xuICAgIGNvbnN0IGNvZGUgPSBldmVudC5rZXlDb2RlO1xuICAgIC8vIGVzY2FwZVxuICAgIGlmIChjb2RlID09PSAyNykge1xuICAgICAgdGhpcy5fY2xvc2VBbmRDbGVhcigpO1xuICAgIH1cbiAgICAvLyBlbnRlclxuICAgIGVsc2UgaWYgKGNvZGUgPT09IDEzKSB7XG4gICAgICBsZXQgaWR4ID0gdGhpcy5vcHRpb25IaWdobGlnaHRlZEluZGV4O1xuICAgICAgaWYgKFxuICAgICAgICB0aGlzLm11bHRpcGxlICYmXG4gICAgICAgIHRoaXMuc2VsZWN0QWxsICYmXG4gICAgICAgIHRoaXMuZmlsdGVyZWRPcHRpb25zLmxlbmd0aCA9PT0gdGhpcy5vcHRpb25zLmxlbmd0aCAmJlxuICAgICAgICAhdGhpcy52aXJ0dWFsU2Nyb2xsXG4gICAgICApIHtcbiAgICAgICAgaWYgKGlkeCA9PT0gMCkge1xuICAgICAgICAgIHRoaXMudG9nZ2xlQWxsKCk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9IGVsc2UgaWR4LS07XG4gICAgICB9XG4gICAgICBjb25zdCBvcHRpb24gPSB0aGlzLmZpbHRlcmVkT3B0aW9uc1tpZHhdO1xuICAgICAgaWYgKHRoaXMuZmlsdGVyZWRPcHRpb25zLmxlbmd0aCAhPT0gdGhpcy5vcHRpb25zLmxlbmd0aClcbiAgICAgICAgdGhpcy5fZGVoaWdobGlnaHRPcHRpb24oKTtcbiAgICAgIHRoaXMuX2NsaWNrT3B0aW9uKG9wdGlvbik7XG4gICAgfVxuICAgIC8vIHZlcnRpY2FsIGFycm93c1xuICAgIGVsc2UgaWYgKFszOCwgNDBdLmluY2x1ZGVzKGNvZGUpKSB7XG4gICAgICAvLyBBcnJvd3MgbmF2aWdhdGlvbiBkb2Vzbid0IHdvcmsgd2l0aCB2aXJ0dWFsIHNjcm9sbFxuICAgICAgaWYgKCF0aGlzLnZpcnR1YWxTY3JvbGwpIHRoaXMuX25hdmlnYXRlT3B0aW9uc0J5QXJyb3dzKGNvZGUgPT09IDM4KTtcbiAgICB9XG4gIH1cblxuICBvbklucHV0S2V5RG93bihldmVudDogYW55KSB7XG4gICAgY29uc3QgY29kZSA9IGV2ZW50LmtleUNvZGU7XG4gICAgLy8gYmFja3NwYWNlXG4gICAgaWYgKGNvZGUgPT09IDgpIHtcbiAgICAgIHRoaXMuX3JlbW92ZUxhc3RWYWx1ZSgpO1xuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgfVxuICAgIC8vIGVudGVyXG4gICAgZWxzZSBpZiAoY29kZSA9PT0gMTMpIHtcbiAgICAgIGlmICh0aGlzLm9wdGlvbkhpZ2hsaWdodGVkSW5kZXggPCAwKSB7XG4gICAgICAgIHRoaXMuX2NvbmZpcm1JbnB1dChldmVudD8udGFyZ2V0Py52YWx1ZSB8fCAnJyk7XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoWzM4LCA0MF0uaW5jbHVkZXMoY29kZSkpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuICB9XG5cbiAgb25DaGV2cm9uQ2xpY2soZXZlbnQ6IGFueSkge1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXG4gICAgaWYgKHRoaXMuaXNPcGVuZWQpIHtcbiAgICAgIHRoaXMuX2Nsb3NlQW5kQ2xlYXIoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5vbkJveENsaWNrKCk7XG4gICAgfVxuICB9XG5cbiAgZm9jdXNJbnB1dCgpIHtcbiAgICB0aGlzLmF1dG9jb21wbGV0ZUNvbnRhaW5lcj8ubmF0aXZlRWxlbWVudD8ucXVlcnlTZWxlY3RvcignaW5wdXQnKT8uZm9jdXMoKTtcbiAgfVxuXG4gIGZvY3VzKCkge1xuICAgIHRoaXMuYXV0b2NvbXBsZXRlQ29udGFpbmVyPy5uYXRpdmVFbGVtZW50Py5mb2N1cygpO1xuICAgIHRoaXMuZm9jdXNJbnB1dCgpO1xuICAgIHRoaXMuX3RvZ2dsZU9wdGlvbnModHJ1ZSk7XG4gIH1cblxuICByZWNhbGNWaXJ0dWFsTGlzdEhlaWdodCgpIHtcbiAgICBpZiAoIXRoaXMudmlydHVhbFNjcm9sbCkgcmV0dXJuO1xuICAgIGNvbnN0IGN1cnJlbnRMZW4gPSB0aGlzLmZpbHRlcmVkT3B0aW9ucz8ubGVuZ3RoIHx8IDA7XG4gICAgdGhpcy52aXJ0dWFsTGlzdEhlaWdodCA9IE1hdGgubWluKFxuICAgICAgdGhpcy52aXJ0dWFsU2Nyb2xsSXRlbVNpemUgKiBjdXJyZW50TGVuLFxuICAgICAgMjQwXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgX3RvZ2dsZU9wdGlvbnMoc2hvdz86IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBpZiAodGhpcy5kaXNhYmxlZCB8fCB0aGlzLmlzT3BlbmVkID09PSBzaG93KSByZXR1cm47XG5cbiAgICB0aGlzLmJhY2tzcGFjZUNsaWNrZWRPbmNlID0gZmFsc2U7XG4gICAgaWYgKHR5cGVvZiBzaG93ID09PSAnYm9vbGVhbicpIHtcbiAgICAgIGlmIChzaG93KSB7XG4gICAgICAgIHRoaXMub3B0aW9uc01lbnUuc2hvdyh7XG4gICAgICAgICAgdGFyZ2V0OiB0aGlzLmF1dG9jb21wbGV0ZUJveC5uYXRpdmVFbGVtZW50XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5vcHRpb25zTWVudS5oaWRlKCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMub3B0aW9uc01lbnUudG9nZ2xlKHtcbiAgICAgICAgdGFyZ2V0OiB0aGlzLmF1dG9jb21wbGV0ZUJveC5uYXRpdmVFbGVtZW50XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICB0aGlzLmlzT3BlbmVkID0gdGhpcy5vcHRpb25zTWVudS5pc1Zpc2libGUoKTtcblxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgaWYgKHRoaXMuaXNPcGVuZWQgJiYgdGhpcy5maWx0ZXJlZE9wdGlvbnMubGVuZ3RoID4gMCkge1xuICAgICAgICB0aGlzLnJlY2FsY1ZpcnR1YWxMaXN0SGVpZ2h0KCk7XG5cbiAgICAgICAgY29uc3Qgc2VsZWN0ZWQgPVxuICAgICAgICAgIHRoaXMub3B0aW9uc0xpc3QubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCcuc2VsZWN0ZWQnKTtcbiAgICAgICAgaWYgKHNlbGVjdGVkKSB7XG4gICAgICAgICAgc2VsZWN0ZWQuc2Nyb2xsSW50b1ZpZXcoe1xuICAgICAgICAgICAgYmVoYXZpb3I6ICdpbnN0YW50JyxcbiAgICAgICAgICAgIGJsb2NrOiAnbmVhcmVzdCcsXG4gICAgICAgICAgICBpbmxpbmU6ICdjZW50ZXInXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy52aXJ0dWFsU2Nyb2xsICYmIHRoaXMudmFsdWUpIHtcbiAgICAgICAgICBsZXQgdjogYW55O1xuICAgICAgICAgIGlmICh0aGlzLm11bHRpcGxlKSB7XG4gICAgICAgICAgICBpZiAodGhpcy52YWx1ZS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgIHYgPSB0aGlzLnZhbHVlWzBdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB2ID0gdGhpcy52YWx1ZTtcbiAgICAgICAgICBjb25zdCBpZHggPSB0aGlzLmZpbHRlcmVkT3B0aW9ucy5maW5kSW5kZXgoKG8pID0+IGlzRXF1YWwobywgdikpO1xuICAgICAgICAgIGlmIChpZHggPj0gMCkgdGhpcy52aXJ0dWFsTGlzdC5zY3JvbGxUb0luZGV4KGlkeCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgX2NsaWNrT3B0aW9uKG9wdGlvbjogYW55KSB7XG4gICAgdGhpcy5zZWxlY3Qob3B0aW9uLCBmYWxzZSk7XG4gICAgaWYgKCF0aGlzLm11bHRpcGxlKSB7XG4gICAgICB0aGlzLl90b2dnbGVPcHRpb25zKGZhbHNlKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9jaGVja0Vycm9ycygpOiB2b2lkIHtcbiAgICBjb25zdCBlcnJvcnMgPSB0aGlzLl9jb250cm9sPy5lcnJvcnM7XG5cbiAgICBpZiAoIXRoaXMuX2NvbnRyb2w/LmNvbnRyb2w/LnRvdWNoZWQgfHwgIWVycm9ycykge1xuICAgICAgdGhpcy5lcnJvciA9ICcnO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICgncmVxdWlyZWQnIGluIGVycm9ycykge1xuICAgICAgdGhpcy5lcnJvciA9ICdGaWVsZCBpcyByZXF1aXJlZCc7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgZXJyQXJyID0gT2JqZWN0LnZhbHVlcyhlcnJvcnMpO1xuICAgIGlmIChlcnJBcnIubGVuZ3RoIDwgMSkge1xuICAgICAgdGhpcy5lcnJvciA9ICcnO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBtZXNzYWdlID0gZXJyQXJyLmZpbmQoKG1zZykgPT4gdHlwZW9mIG1zZyA9PT0gJ3N0cmluZycpO1xuXG4gICAgdGhpcy5lcnJvciA9IG1lc3NhZ2UgfHwgJ1Vua25vd24gZXJyb3InO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVWYWx1ZSh2YWx1ZTogYW55KTogdm9pZCB7XG4gICAgdGhpcy53cml0ZVZhbHVlKHZhbHVlKTtcbiAgICB0aGlzLm9uQ2hhbmdlKHZhbHVlKTtcbiAgICB0aGlzLnZhbHVlQ2hhbmdlZC5lbWl0KHZhbHVlKTtcbiAgfVxuXG4gIHByaXZhdGUgX2dldFZhbHVlTGFiZWwoKSB7XG4gICAgcmV0dXJuIHRoaXMudmFsdWVcbiAgICAgID8gdGhpcy5yZXR1cm5PYmplY3RcbiAgICAgICAgPyB0aGlzLnZhbHVlW3RoaXMub3B0aW9uTGFiZWxdXG4gICAgICAgIDogdGhpcy5fbGFiZWxCeVZhbHVlLnRyYW5zZm9ybShcbiAgICAgICAgICAgIHRoaXMudmFsdWUsXG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMsXG4gICAgICAgICAgICB0aGlzLm9wdGlvblZhbHVlLFxuICAgICAgICAgICAgdGhpcy5vcHRpb25MYWJlbFxuICAgICAgICAgIClcbiAgICAgIDogJyc7XG4gIH1cblxuICBwcml2YXRlIF9jbGVhcklucHV0KCkge1xuICAgIHRoaXMuZmlsdGVyZWRPcHRpb25zID0gdGhpcy5vcHRpb25zO1xuICAgIHRoaXMuaW5wdXRUZXh0ID0gJyc7XG4gICAgdGhpcy5hY3RpdmVTaW5nbGUgPSBmYWxzZTtcbiAgICB0aGlzLnJlY2FsY1ZpcnR1YWxMaXN0SGVpZ2h0KCk7XG4gIH1cblxuICBwcml2YXRlIF9jbG9zZUFuZENsZWFyKCkge1xuICAgIHRoaXMuX2NsZWFySW5wdXQoKTtcbiAgICB0aGlzLl90b2dnbGVPcHRpb25zKGZhbHNlKTtcbiAgICB0aGlzLl9kZWhpZ2hsaWdodE9wdGlvbigpO1xuICB9XG5cbiAgcHJpdmF0ZSBfZ2V0SFRNTE9wdGlvbnMoKSB7XG4gICAgcmV0dXJuICh0aGlzLm9wdGlvbnNMaXN0Lm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvckFsbChcbiAgICAgICcuY3BzLWF1dG9jb21wbGV0ZS1vcHRpb25zLW9wdGlvbidcbiAgICApIHx8IFtdKSBhcyBhbnk7XG4gIH1cblxuICBwcml2YXRlIF9kZWhpZ2hsaWdodE9wdGlvbihlbD86IEhUTUxFbGVtZW50KSB7XG4gICAgaWYgKGVsKSBlbC5jbGFzc0xpc3QucmVtb3ZlKCdoaWdobGlnaHRlbicpO1xuICAgIGVsc2Uge1xuICAgICAgaWYgKHRoaXMub3B0aW9uSGlnaGxpZ2h0ZWRJbmRleCA8IDApIHJldHVybjtcbiAgICAgIGNvbnN0IG9wdGlvbkl0ZW1zID0gdGhpcy5fZ2V0SFRNTE9wdGlvbnMoKTtcbiAgICAgIG9wdGlvbkl0ZW1zW3RoaXMub3B0aW9uSGlnaGxpZ2h0ZWRJbmRleF0uY2xhc3NMaXN0LnJlbW92ZSgnaGlnaGxpZ2h0ZW4nKTtcbiAgICAgIHRoaXMub3B0aW9uSGlnaGxpZ2h0ZWRJbmRleCA9IC0xO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX2hpZ2hsaWdodE9wdGlvbihlbDogSFRNTEVsZW1lbnQpIHtcbiAgICBlbC5jbGFzc0xpc3QuYWRkKCdoaWdobGlnaHRlbicpO1xuICAgIGNvbnN0IHBhcmVudCA9IGVsLnBhcmVudEVsZW1lbnQ7XG4gICAgaWYgKCFwYXJlbnQpIHJldHVybjtcbiAgICBjb25zdCBwYXJlbnRSZWN0ID0gcGFyZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIGNvbnN0IGVsUmVjdCA9IGVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIGlmIChlbFJlY3QudG9wIDwgcGFyZW50UmVjdC50b3AgfHwgZWxSZWN0LmJvdHRvbSA+IHBhcmVudFJlY3QuYm90dG9tKSB7XG4gICAgICBlbC5zY3JvbGxJbnRvVmlldyh7XG4gICAgICAgIGJsb2NrOiAnbmVhcmVzdCcsXG4gICAgICAgIGlubGluZTogJ2NlbnRlcidcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX25hdmlnYXRlT3B0aW9uc0J5QXJyb3dzKHVwOiBib29sZWFuKSB7XG4gICAgaWYgKCF0aGlzLmlzT3BlbmVkKSByZXR1cm47XG5cbiAgICBjb25zdCBvcHRpb25JdGVtcyA9IHRoaXMuX2dldEhUTUxPcHRpb25zKCk7XG4gICAgY29uc3QgbGVuID0gb3B0aW9uSXRlbXMubGVuZ3RoO1xuICAgIGlmIChsZW4gPCAxKSByZXR1cm47XG5cbiAgICBpZiAobGVuID09PSAxKSB7XG4gICAgICB0aGlzLm9wdGlvbkhpZ2hsaWdodGVkSW5kZXggPSAwO1xuICAgICAgdGhpcy5faGlnaGxpZ2h0T3B0aW9uKG9wdGlvbkl0ZW1zWzBdKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodXApIHtcbiAgICAgIHRoaXMuX2RlaGlnaGxpZ2h0T3B0aW9uKG9wdGlvbkl0ZW1zW3RoaXMub3B0aW9uSGlnaGxpZ2h0ZWRJbmRleF0pO1xuICAgICAgdGhpcy5vcHRpb25IaWdobGlnaHRlZEluZGV4ID1cbiAgICAgICAgdGhpcy5vcHRpb25IaWdobGlnaHRlZEluZGV4IDwgMVxuICAgICAgICAgID8gbGVuIC0gMVxuICAgICAgICAgIDogdGhpcy5vcHRpb25IaWdobGlnaHRlZEluZGV4IC0gMTtcbiAgICAgIHRoaXMuX2hpZ2hsaWdodE9wdGlvbihvcHRpb25JdGVtc1t0aGlzLm9wdGlvbkhpZ2hsaWdodGVkSW5kZXhdKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fZGVoaWdobGlnaHRPcHRpb24ob3B0aW9uSXRlbXNbdGhpcy5vcHRpb25IaWdobGlnaHRlZEluZGV4XSk7XG4gICAgICB0aGlzLm9wdGlvbkhpZ2hsaWdodGVkSW5kZXggPSBbLTEsIGxlbiAtIDFdLmluY2x1ZGVzKFxuICAgICAgICB0aGlzLm9wdGlvbkhpZ2hsaWdodGVkSW5kZXhcbiAgICAgIClcbiAgICAgICAgPyAwXG4gICAgICAgIDogdGhpcy5vcHRpb25IaWdobGlnaHRlZEluZGV4ICsgMTtcbiAgICAgIHRoaXMuX2hpZ2hsaWdodE9wdGlvbihvcHRpb25JdGVtc1t0aGlzLm9wdGlvbkhpZ2hsaWdodGVkSW5kZXhdKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9jb25maXJtSW5wdXQoc2VhcmNoVmFsOiBzdHJpbmcpIHtcbiAgICBpZiAoIXRoaXMuaXNPcGVuZWQpIHJldHVybjtcbiAgICBzZWFyY2hWYWwgPSBzZWFyY2hWYWwudG9Mb3dlckNhc2UoKTtcbiAgICBpZiAoIXNlYXJjaFZhbCkge1xuICAgICAgaWYgKHRoaXMubXVsdGlwbGUpIHJldHVybjtcbiAgICAgIGNvbnN0IHZhbCA9IHRoaXMucmV0dXJuT2JqZWN0ID8gdW5kZWZpbmVkIDogJyc7XG4gICAgICB0aGlzLnVwZGF0ZVZhbHVlKHZhbCk7XG4gICAgICB0aGlzLl9jbG9zZUFuZENsZWFyKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgZm91bmQgPSB0aGlzLmZpbHRlcmVkT3B0aW9ucy5maW5kKFxuICAgICAgKG86IGFueSkgPT4gb1t0aGlzLm9wdGlvbkxhYmVsXS50b0xvd2VyQ2FzZSgpID09PSBzZWFyY2hWYWxcbiAgICApO1xuICAgIGlmIChmb3VuZCkge1xuICAgICAgdGhpcy5zZWxlY3QoZm91bmQsIGZhbHNlKTtcbiAgICAgIHRoaXMuX3RvZ2dsZU9wdGlvbnModGhpcy5tdWx0aXBsZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICghdGhpcy5tdWx0aXBsZSkge1xuICAgICAgICB0aGlzLmlucHV0VGV4dCA9IHRoaXMuX2dldFZhbHVlTGFiZWwoKTtcbiAgICAgICAgdGhpcy5maWx0ZXJlZE9wdGlvbnMgPSB0aGlzLm9wdGlvbnM7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLl9jbGVhcklucHV0KCk7XG4gIH1cblxuICBwcml2YXRlIF9yZW1vdmVMYXN0VmFsdWUoKSB7XG4gICAgaWYgKCF0aGlzLm11bHRpcGxlIHx8IHRoaXMuaW5wdXRUZXh0KSByZXR1cm47XG5cbiAgICBpZiAodGhpcy52YWx1ZT8ubGVuZ3RoKSB7XG4gICAgICBpZiAodGhpcy5iYWNrc3BhY2VDbGlja2VkT25jZSkge1xuICAgICAgICB0aGlzLnVwZGF0ZVZhbHVlKFxuICAgICAgICAgIHRoaXMudmFsdWUuZmlsdGVyKFxuICAgICAgICAgICAgKHY6IGFueSwgaW5kZXg6IG51bWJlcikgPT4gaW5kZXggIT09IHRoaXMudmFsdWUubGVuZ3RoIC0gMVxuICAgICAgICAgIClcbiAgICAgICAgKTtcblxuICAgICAgICB0aGlzLmJhY2tzcGFjZUNsaWNrZWRPbmNlID0gZmFsc2U7XG4gICAgICB9IGVsc2UgdGhpcy5iYWNrc3BhY2VDbGlja2VkT25jZSA9IHRydWU7XG4gICAgfSBlbHNlIHRoaXMuYmFja3NwYWNlQ2xpY2tlZE9uY2UgPSBmYWxzZTtcblxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5mb2N1c0lucHV0KCk7XG4gICAgfSwgMCk7XG4gIH1cbn1cbiIsIjxkaXZcbiAgZGF0YS1jeS1pZD1cImNwcy1hdXRvY29tcGxldGVcIlxuICBbbmdTdHlsZV09XCJ7IHdpZHRoOiBjdnRXaWR0aCB9XCJcbiAgY2xhc3M9XCJjcHMtYXV0b2NvbXBsZXRlXCJcbiAgdGFiaW5kZXg9XCIxXCJcbiAgW25nQ2xhc3NdPVwieyBkaXNhYmxlZDogZGlzYWJsZWQsIGVycm9yOiBlcnJvciwgYWN0aXZlOiBpc09wZW5lZCB9XCJcbiAgI2F1dG9jb21wbGV0ZUNvbnRhaW5lcj5cbiAgPGRpdiBjbGFzcz1cImNwcy1hdXRvY29tcGxldGUtbGFiZWxcIiAqbmdJZj1cImxhYmVsXCI+XG4gICAgPGxhYmVsPnt7IGxhYmVsIH19PC9sYWJlbD5cbiAgICA8Y3BzLWluZm8tY2lyY2xlXG4gICAgICAqbmdJZj1cImluZm9Ub29sdGlwXCJcbiAgICAgIGNsYXNzPVwiY3BzLWF1dG9jb21wbGV0ZS1sYWJlbC1pbmZvLWNpcmNsZVwiXG4gICAgICBzaXplPVwieHNtYWxsXCJcbiAgICAgIFt0b29sdGlwUG9zaXRpb25dPVwiaW5mb1Rvb2x0aXBQb3NpdGlvblwiXG4gICAgICBbdG9vbHRpcENvbnRlbnRDbGFzc109XCJpbmZvVG9vbHRpcENsYXNzXCJcbiAgICAgIFt0b29sdGlwTWF4V2lkdGhdPVwiaW5mb1Rvb2x0aXBNYXhXaWR0aFwiXG4gICAgICBbdG9vbHRpcFBlcnNpc3RlbnRdPVwiaW5mb1Rvb2x0aXBQZXJzaXN0ZW50XCJcbiAgICAgIFt0b29sdGlwVGV4dF09XCJpbmZvVG9vbHRpcFwiPlxuICAgIDwvY3BzLWluZm8tY2lyY2xlPlxuICA8L2Rpdj5cbiAgPGRpdlxuICAgIChrZXlkb3duKT1cIm9uQ29udGFpbmVyS2V5RG93bigkZXZlbnQpXCJcbiAgICBjbGFzcz1cImNwcy1hdXRvY29tcGxldGUtY29udGFpbmVyXCJcbiAgICBbY2xhc3MuZm9jdXNlZF09XCJpc09wZW5lZFwiXG4gICAgW25nQ2xhc3NdPVwie1xuICAgICAgJ3BlcnNpc3RlbnQtY2xlYXInOiBwZXJzaXN0ZW50Q2xlYXIsXG4gICAgICBib3JkZXJsZXNzOiBhcHBlYXJhbmNlID09PSAnYm9yZGVybGVzcycsXG4gICAgICB1bmRlcmxpbmVkOiBhcHBlYXJhbmNlID09PSAndW5kZXJsaW5lZCdcbiAgICB9XCI+XG4gICAgPGRpdlxuICAgICAgY2xhc3M9XCJjcHMtYXV0b2NvbXBsZXRlLWJveFwiXG4gICAgICAjYXV0b2NvbXBsZXRlQm94XG4gICAgICAobW91c2Vkb3duKT1cIm9uQm94Q2xpY2soKVwiPlxuICAgICAgPGRpdiBjbGFzcz1cImNwcy1hdXRvY29tcGxldGUtYm94LWFyZWFcIj5cbiAgICAgICAgPGNwcy1pY29uXG4gICAgICAgICAgKm5nSWY9XCJwcmVmaXhJY29uXCJcbiAgICAgICAgICBbaWNvbl09XCJwcmVmaXhJY29uXCJcbiAgICAgICAgICBbc3R5bGUuY29sb3JdPVwiZGlzYWJsZWQgPyAnIzlhOTU5NScgOiBudWxsXCJcbiAgICAgICAgICBbc2l6ZV09XCJwcmVmaXhJY29uU2l6ZVwiXG4gICAgICAgICAgY2xhc3M9XCJwcmVmaXgtaWNvblwiPlxuICAgICAgICA8L2Nwcy1pY29uPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3M9XCJjcHMtYXV0b2NvbXBsZXRlLWJveC1pdGVtc1wiXG4gICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgICh2YWx1ZSAmJiAhbXVsdGlwbGUpIHx8ICh2YWx1ZT8ubGVuZ3RoID4gMCAmJiBtdWx0aXBsZSk7XG4gICAgICAgICAgICBlbHNlIGF1dG9jb21wbGV0ZUlucHV0XG4gICAgICAgICAgXCI+XG4gICAgICAgICAgPHNwYW4gKm5nSWY9XCIhbXVsdGlwbGVcIiBjbGFzcz1cInNpbmdsZS1pdGVtXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2luZ2xlLWl0ZW0tc2VsZWN0aW9uXCI+XG4gICAgICAgICAgICAgIDxzcGFuIFtzdHlsZS5vcGFjaXR5XT1cImFjdGl2ZVNpbmdsZSA/IDAgOiAxXCI+e3tcbiAgICAgICAgICAgICAgICByZXR1cm5PYmplY3RcbiAgICAgICAgICAgICAgICAgID8gdmFsdWVbb3B0aW9uTGFiZWxdXG4gICAgICAgICAgICAgICAgICA6ICh2YWx1ZSB8IGxhYmVsQnlWYWx1ZSA6IG9wdGlvbnMgOiBvcHRpb25WYWx1ZSA6IG9wdGlvbkxhYmVsKVxuICAgICAgICAgICAgICB9fTwvc3Bhbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICAgICAgICAgIGF1dG9jb21wbGV0ZUlucHV0O1xuICAgICAgICAgICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICAgICAgICAgIGlucHV0Q2xhc3M6ICdzaW5nbGUtaXRlbS1pbnB1dCcsXG4gICAgICAgICAgICAgICAgICBpbnB1dFN0eWxlOiBhY3RpdmVTaW5nbGUgPyAnb3BhY2l0eTogMScgOiBudWxsXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBcIj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDwvc3Bhbj5cblxuICAgICAgICAgIDxkaXYgKm5nSWY9XCJtdWx0aXBsZSAmJiAhY2hpcHNcIiBjbGFzcz1cInRleHQtZ3JvdXBcIj5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IHZhbCBvZiB2YWx1ZTsgbGV0IGxhc3QgPSBsYXN0XCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJ0ZXh0LWdyb3VwLWl0ZW1cIlxuICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7ICdhYm91dC10by1yZW1vdmUnOiBsYXN0ICYmIGJhY2tzcGFjZUNsaWNrZWRPbmNlIH1cIj5cbiAgICAgICAgICAgICAge3tcbiAgICAgICAgICAgICAgICByZXR1cm5PYmplY3RcbiAgICAgICAgICAgICAgICAgID8gdmFsW29wdGlvbkxhYmVsXVxuICAgICAgICAgICAgICAgICAgOiAodmFsIHwgbGFiZWxCeVZhbHVlIDogb3B0aW9ucyA6IG9wdGlvblZhbHVlIDogb3B0aW9uTGFiZWwpXG4gICAgICAgICAgICAgIH19e3sgIWxhc3QgPyAnLCcgOiAnJyB9fVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiYXV0b2NvbXBsZXRlSW5wdXRcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDxkaXYgKm5nSWY9XCJtdWx0aXBsZSAmJiBjaGlwc1wiIGNsYXNzPVwiY2hpcHMtZ3JvdXBcIj5cbiAgICAgICAgICAgIDxjcHMtY2hpcFxuICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgdmFsIG9mIHZhbHVlOyBsZXQgbGFzdCA9IGxhc3RcIlxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgICAgICAgICBbY2xvc2FibGVdPVwiY2xvc2FibGVDaGlwc1wiXG4gICAgICAgICAgICAgIChjbG9zZWQpPVwic2VsZWN0KHZhbCwgdHJ1ZSlcIlxuICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7ICdhYm91dC10by1yZW1vdmUnOiBsYXN0ICYmIGJhY2tzcGFjZUNsaWNrZWRPbmNlIH1cIlxuICAgICAgICAgICAgICBbbGFiZWxdPVwiXG4gICAgICAgICAgICAgICAgcmV0dXJuT2JqZWN0XG4gICAgICAgICAgICAgICAgICA/IHZhbFtvcHRpb25MYWJlbF1cbiAgICAgICAgICAgICAgICAgIDogKHZhbCB8IGxhYmVsQnlWYWx1ZSA6IG9wdGlvbnMgOiBvcHRpb25WYWx1ZSA6IG9wdGlvbkxhYmVsKVxuICAgICAgICAgICAgICBcIj5cbiAgICAgICAgICAgIDwvY3BzLWNoaXA+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiYXV0b2NvbXBsZXRlSW5wdXRcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwiY3BzLWF1dG9jb21wbGV0ZS1ib3gtaWNvbnNcIj5cbiAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgKm5nSWY9XCJjbGVhcmFibGUgJiYgIWRpc2FibGVkXCJcbiAgICAgICAgICAgIFtzdHlsZS52aXNpYmlsaXR5XT1cIlxuICAgICAgICAgICAgICBwZXJzaXN0ZW50Q2xlYXIgfHxcbiAgICAgICAgICAgICAgKCFwZXJzaXN0ZW50Q2xlYXIgJiZcbiAgICAgICAgICAgICAgICAoKG11bHRpcGxlICYmIHZhbHVlPy5sZW5ndGgpIHx8ICghbXVsdGlwbGUgJiYgdmFsdWUpKSlcbiAgICAgICAgICAgICAgICA/ICd2aXNpYmxlJ1xuICAgICAgICAgICAgICAgIDogJ2hpZGRlbidcbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgICBjbGFzcz1cImNwcy1hdXRvY29tcGxldGUtYm94LWNsZWFyLWljb25cIj5cbiAgICAgICAgICAgIDxjcHMtaWNvblxuICAgICAgICAgICAgICBpY29uPVwiZGVsZXRlXCJcbiAgICAgICAgICAgICAgc2l6ZT1cInNtYWxsXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImNsZWFyKCRldmVudClcIj48L2Nwcy1pY29uPlxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgY2xhc3M9XCJjcHMtYXV0b2NvbXBsZXRlLWJveC1jaGV2cm9uXCJcbiAgICAgICAgICAgIChtb3VzZWRvd24pPVwib25DaGV2cm9uQ2xpY2soJGV2ZW50KVwiPlxuICAgICAgICAgICAgPGNwcy1pY29uXG4gICAgICAgICAgICAgIGljb249XCJjaGV2cm9uLWRvd25cIlxuICAgICAgICAgICAgICBzaXplPVwic21hbGxcIlxuICAgICAgICAgICAgICBbY29sb3JdPVwiZGlzYWJsZWQgPyAndGV4dC1saWdodCcgOiAndGV4dC1kYXJrJ1wiPjwvY3BzLWljb24+XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L3NwYW4+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDxjcHMtbWVudVxuICAgICAgI29wdGlvbnNNZW51XG4gICAgICBbd2l0aEFycm93XT1cImZhbHNlXCJcbiAgICAgIChiZWZvcmVNZW51SGlkZGVuKT1cIm9uQmVmb3JlT3B0aW9uc0hpZGRlbigpXCJcbiAgICAgIGhpZGVUcmFuc2l0aW9uT3B0aW9ucz1cIjBzIGxpbmVhclwiXG4gICAgICBjb250YWluZXJDbGFzcz1cImNwcy1hdXRvY29tcGxldGUtb3B0aW9ucy1tZW51XCI+XG4gICAgICA8ZGl2XG4gICAgICAgICNvcHRpb25zTGlzdFxuICAgICAgICBjbGFzcz1cImNwcy1hdXRvY29tcGxldGUtb3B0aW9uc1wiXG4gICAgICAgIFtuZ1N0eWxlXT1cIntcbiAgICAgICAgICB3aWR0aDogYXV0b2NvbXBsZXRlQm94V2lkdGggKyAncHgnXG4gICAgICAgIH1cIj5cbiAgICAgICAgPGRpdlxuICAgICAgICAgICpuZ0lmPVwiZmlsdGVyZWRPcHRpb25zLmxlbmd0aCA8IDFcIlxuICAgICAgICAgIGNsYXNzPVwiY3BzLWF1dG9jb21wbGV0ZS1vcHRpb25zLWVtcHR5XCI+XG4gICAgICAgICAge3sgZW1wdHlNZXNzYWdlIH19XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIXZpcnR1YWxTY3JvbGxcIj5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzcz1cImNwcy1hdXRvY29tcGxldGUtb3B0aW9ucy1vcHRpb24gc2VsZWN0LWFsbC1vcHRpb25cIlxuICAgICAgICAgICAgW2NsYXNzLmFsbHNlbGVjdGVkXT1cInZhbHVlPy5sZW5ndGggPT09IG9wdGlvbnMubGVuZ3RoXCJcbiAgICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICAgIG11bHRpcGxlICYmXG4gICAgICAgICAgICAgIHNlbGVjdEFsbCAmJlxuICAgICAgICAgICAgICBmaWx0ZXJlZE9wdGlvbnMubGVuZ3RoID09PSBvcHRpb25zLmxlbmd0aCAmJlxuICAgICAgICAgICAgICBvcHRpb25zLmxlbmd0aCA+IDFcbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlQWxsKClcIj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3BzLWF1dG9jb21wbGV0ZS1vcHRpb25zLW9wdGlvbi1sZWZ0XCI+XG4gICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJtdWx0aXBsZVwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJjcHMtYXV0b2NvbXBsZXRlLW9wdGlvbnMtb3B0aW9uLWNoZWNrXCI+XG4gICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjcHMtYXV0b2NvbXBsZXRlLW9wdGlvbnMtb3B0aW9uLWxhYmVsXCJcbiAgICAgICAgICAgICAgICA+U2VsZWN0IGFsbDwvc3BhblxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgaXRlbSBvZiBmaWx0ZXJlZE9wdGlvbnNcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgICAgICAgICBpdGVtVGVtcGxhdGU7XG4gICAgICAgICAgICAgICAgY29udGV4dDoge1xuICAgICAgICAgICAgICAgICAgaXRlbTogaXRlbVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgXCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwidmlydHVhbFNjcm9sbFwiPlxuICAgICAgICAgIDxwLXZpcnR1YWxTY3JvbGxlclxuICAgICAgICAgICAgI3ZpcnR1YWxMaXN0XG4gICAgICAgICAgICBbdmFsdWVdPVwiZmlsdGVyZWRPcHRpb25zXCJcbiAgICAgICAgICAgIFtkZWxheV09XCIwXCJcbiAgICAgICAgICAgIFtzY3JvbGxIZWlnaHRdPVwidmlydHVhbExpc3RIZWlnaHQgKyAncHgnXCJcbiAgICAgICAgICAgIFtvcHRpb25zXT1cInsgbnVtVG9sZXJhdGVkSXRlbXM6IDMgfVwiXG4gICAgICAgICAgICBbaXRlbVNpemVdPVwidmlydHVhbFNjcm9sbEl0ZW1TaXplXCI+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiaXRlbVwiIGxldC1pdGVtPlxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgICAgICAgICAgIGl0ZW1UZW1wbGF0ZTtcbiAgICAgICAgICAgICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICAgICAgICAgICAgaXRlbTogaXRlbVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIFwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICA8L3AtdmlydHVhbFNjcm9sbGVyPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvZGl2PlxuICAgIDwvY3BzLW1lbnU+XG4gICAgPGNwcy1wcm9ncmVzcy1saW5lYXJcbiAgICAgICpuZ0lmPVwibG9hZGluZ1wiXG4gICAgICBoZWlnaHQ9XCIzXCJcbiAgICAgIHJhZGl1cz1cIjRcIlxuICAgICAgb3BhY2l0eT1cIjAuM1wiXG4gICAgICBjbGFzcz1cImF1dG9jb21wbGV0ZS1wcm9ncmVzcy1iYXJcIlxuICAgICAgYmdDb2xvcj1cInRyYW5zcGFyZW50XCI+XG4gICAgPC9jcHMtcHJvZ3Jlc3MtbGluZWFyPlxuICA8L2Rpdj5cbiAgPGRpdiAqbmdJZj1cIiFlcnJvciAmJiAhaGlkZURldGFpbHNcIiBjbGFzcz1cImNwcy1hdXRvY29tcGxldGUtaGludFwiPlxuICAgIHt7IGhpbnQgfX1cbiAgPC9kaXY+XG4gIDxkaXYgKm5nSWY9XCJlcnJvciAmJiAhaGlkZURldGFpbHNcIiBjbGFzcz1cImNwcy1hdXRvY29tcGxldGUtZXJyb3JcIj5cbiAgICB7eyBlcnJvciB9fVxuICA8L2Rpdj5cbjwvZGl2PlxuXG48bmctdGVtcGxhdGVcbiAgI2F1dG9jb21wbGV0ZUlucHV0XG4gIGxldC1pbnB1dENsYXNzPVwiaW5wdXRDbGFzc1wiXG4gIGxldC1pbnB1dFN0eWxlPVwiaW5wdXRTdHlsZVwiPlxuICA8aW5wdXRcbiAgICBjbGFzcz1cImNwcy1hdXRvY29tcGxldGUtYm94LWlucHV0XCJcbiAgICBzcGVsbGNoZWNrPVwiZmFsc2VcIlxuICAgIFtjbGFzc109XCJpbnB1dENsYXNzXCJcbiAgICBbc3R5bGVdPVwiaW5wdXRTdHlsZVwiXG4gICAgW3BsYWNlaG9sZGVyXT1cIlxuICAgICAgKCF2YWx1ZSAmJiAhbXVsdGlwbGUpIHx8ICh2YWx1ZT8ubGVuZ3RoIDwgMSAmJiBtdWx0aXBsZSlcbiAgICAgICAgPyBwbGFjZWhvbGRlclxuICAgICAgICA6ICcnXG4gICAgXCJcbiAgICAoaW5wdXQpPVwiZmlsdGVyT3B0aW9ucygkZXZlbnQpXCJcbiAgICAoa2V5ZG93bik9XCJvbklucHV0S2V5RG93bigkZXZlbnQpXCJcbiAgICBbKG5nTW9kZWwpXT1cImlucHV0VGV4dFwiXG4gICAgKGJsdXIpPVwib25CbHVyKClcIiAvPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNpdGVtVGVtcGxhdGUgbGV0LWl0ZW09XCJpdGVtXCI+XG4gIDxkaXZcbiAgICBjbGFzcz1cImNwcy1hdXRvY29tcGxldGUtb3B0aW9ucy1vcHRpb25cIlxuICAgIChjbGljayk9XCJvbk9wdGlvbkNsaWNrKGl0ZW0pXCJcbiAgICBbY2xhc3Muc2VsZWN0ZWRdPVwiXG4gICAgICBpdGVtIHwgY2hlY2tPcHRpb25TZWxlY3RlZCA6IHZhbHVlIDogbXVsdGlwbGUgOiByZXR1cm5PYmplY3QgOiBvcHRpb25WYWx1ZVxuICAgIFwiPlxuICAgIDxzcGFuIGNsYXNzPVwiY3BzLWF1dG9jb21wbGV0ZS1vcHRpb25zLW9wdGlvbi1sZWZ0XCI+XG4gICAgICA8c3BhbiAqbmdJZj1cIm11bHRpcGxlXCIgY2xhc3M9XCJjcHMtYXV0b2NvbXBsZXRlLW9wdGlvbnMtb3B0aW9uLWNoZWNrXCI+XG4gICAgICA8L3NwYW4+XG4gICAgICA8c3BhblxuICAgICAgICBkYXRhLWN5LWlkPVwiY3BzLWF1dG9jb21wbGV0ZS1vcHRpb25zXCJcbiAgICAgICAgY2xhc3M9XCJjcHMtYXV0b2NvbXBsZXRlLW9wdGlvbnMtb3B0aW9uLWxhYmVsXCJcbiAgICAgICAgW2NsYXNzLnZpcnR1YWwtcm93XT1cInZpcnR1YWxTY3JvbGxcIlxuICAgICAgICA+e3sgaXRlbVtvcHRpb25MYWJlbF0gfX08L3NwYW5cbiAgICAgID5cbiAgICA8L3NwYW4+XG5cbiAgICA8c3BhblxuICAgICAgY2xhc3M9XCJjcHMtYXV0b2NvbXBsZXRlLW9wdGlvbnMtb3B0aW9uLXJpZ2h0XCJcbiAgICAgIFtjbGFzcy52aXJ0dWFsLXJvd109XCJ2aXJ0dWFsU2Nyb2xsXCJcbiAgICAgID57eyBpdGVtW29wdGlvbkluZm9dIH19PC9zcGFuXG4gICAgPlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=