@taiga-ui/kit
Version:
Taiga UI Angular main components kit
64 lines • 15.7 kB
JavaScript
import { NgForOf } from '@angular/common';
import { ChangeDetectionStrategy, Component, computed, inject, Input, ViewChildren, ViewEncapsulation, } from '@angular/core';
import { FormsModule, NgControl, Validators } from '@angular/forms';
import { tuiAsControl, TuiControl } from '@taiga-ui/cdk/classes';
import { EMPTY_QUERY, TUI_DEFAULT_IDENTITY_MATCHER, TUI_FALSE_HANDLER, } from '@taiga-ui/cdk/constants';
import { TuiValidator } from '@taiga-ui/cdk/directives/validator';
import { TuiIdService } from '@taiga-ui/cdk/services';
import { TuiRadio } from '@taiga-ui/kit/components/radio';
import { PolymorpheusOutlet } from '@taiga-ui/polymorpheus';
import * as i0 from "@angular/core";
import * as i1 from "@angular/forms";
import * as i2 from "@taiga-ui/kit/components/radio";
const ERROR = () => ({ error: 'Invalid' });
class TuiRadioList extends TuiControl {
constructor() {
super(...arguments);
this.controls = EMPTY_QUERY;
this.id = inject(TuiIdService).generate();
this.validator = computed(() => this.invalid() ? ERROR : Validators.nullValidator);
this.items = [];
this.size = 'm';
this.identityMatcher = TUI_DEFAULT_IDENTITY_MATCHER;
this.disabledItemHandler = TUI_FALSE_HANDLER;
this.itemContent = ({ $implicit }) => String($implicit);
}
get name() {
return `${this.control.name}-${this.id}`;
}
onFocusOut() {
this.controls.forEach((control) => control.control?.markAsTouched());
if (!this.touched()) {
this.onTouched();
}
}
itemIsActive(item) {
return this.value() === null
? item === null
: this.identityMatcher(this.value(), item);
}
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TuiRadioList, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: TuiRadioList, isStandalone: true, selector: "tui-radio-list", inputs: { items: "items", size: "size", identityMatcher: "identityMatcher", disabledItemHandler: "disabledItemHandler", itemContent: "itemContent" }, host: { listeners: { "focusout": "onFocusOut()" }, properties: { "attr.data-size": "size" } }, providers: [tuiAsControl(TuiRadioList)], viewQueries: [{ propertyName: "controls", predicate: NgControl, descendants: true }], usesInheritance: true, ngImport: i0, template: "<label\n *ngFor=\"let item of items; index as index\"\n class=\"t-item\"\n [class.t-item_disabled]=\"disabled() || disabledItemHandler(item)\"\n>\n <input\n tuiRadio\n type=\"radio\"\n [disabled]=\"disabled() || disabledItemHandler(item)\"\n [identityMatcher]=\"identityMatcher\"\n [name]=\"name\"\n [ngModel]=\"value()\"\n [ngModelOptions]=\"{standalone: true}\"\n [size]=\"size\"\n [tuiValidator]=\"validator()\"\n [value]=\"item\"\n (ngModelChange)=\"onChange($event)\"\n />\n <ng-container *polymorpheusOutlet=\"itemContent as text; context: {$implicit: item, active: itemIsActive(item)}\">\n {{ text }}\n </ng-container>\n</label>\n", styles: ["tui-radio-list{display:flex;flex-direction:column;align-items:flex-start;gap:.75rem 1.5rem;font:var(--tui-font-text-m)}tui-radio-list[data-size=s],tui-radio-list[data-size=s] [tuiTitle]{font:var(--tui-font-text-ui-s)}tui-radio-list[data-size=s] [tuiSubtitle],tui-radio-list[data-size=s] [tuiTitle] [tuiSubtitle]{font:var(--tui-font-text-xs)}tui-radio-list[data-size=s]>.t-item,tui-radio-list[data-size=s] [tuiTitle]>.t-item{gap:.5rem}tui-radio-list [tuiTitle]{font:var(--tui-font-text-m)}tui-radio-list [tuiSubtitle]{color:var(--tui-text-secondary)}tui-radio-list>.t-item{display:flex;gap:.75rem}tui-radio-list>.t-item_disabled{opacity:var(--tui-disabled-opacity)}\n"], dependencies: [{ 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.RadioControlValueAccessor, selector: "input[type=radio][formControlName],input[type=radio][formControl],input[type=radio][ngModel]", inputs: ["name", "formControlName", "value"] }, { 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: "directive", type: NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: PolymorpheusOutlet, selector: "[polymorpheusOutlet]", inputs: ["polymorpheusOutlet", "polymorpheusOutletContext"] }, { kind: "component", type: i2.TuiRadioComponent, selector: "input[type=\"radio\"][tuiRadio]", inputs: ["size"] }, { kind: "directive", type: i2.TuiRadioDirective, selector: "input[type=\"radio\"][tuiRadio][identityMatcher]", inputs: ["identityMatcher"] }, { kind: "directive", type: TuiValidator, selector: "[tuiValidator]", inputs: ["tuiValidator"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
}
export { TuiRadioList };
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TuiRadioList, decorators: [{
type: Component,
args: [{ standalone: true, selector: 'tui-radio-list', imports: [FormsModule, NgForOf, PolymorpheusOutlet, TuiRadio, TuiValidator], encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, providers: [tuiAsControl(TuiRadioList)], host: {
'[attr.data-size]': 'size',
'(focusout)': 'onFocusOut()',
}, template: "<label\n *ngFor=\"let item of items; index as index\"\n class=\"t-item\"\n [class.t-item_disabled]=\"disabled() || disabledItemHandler(item)\"\n>\n <input\n tuiRadio\n type=\"radio\"\n [disabled]=\"disabled() || disabledItemHandler(item)\"\n [identityMatcher]=\"identityMatcher\"\n [name]=\"name\"\n [ngModel]=\"value()\"\n [ngModelOptions]=\"{standalone: true}\"\n [size]=\"size\"\n [tuiValidator]=\"validator()\"\n [value]=\"item\"\n (ngModelChange)=\"onChange($event)\"\n />\n <ng-container *polymorpheusOutlet=\"itemContent as text; context: {$implicit: item, active: itemIsActive(item)}\">\n {{ text }}\n </ng-container>\n</label>\n", styles: ["tui-radio-list{display:flex;flex-direction:column;align-items:flex-start;gap:.75rem 1.5rem;font:var(--tui-font-text-m)}tui-radio-list[data-size=s],tui-radio-list[data-size=s] [tuiTitle]{font:var(--tui-font-text-ui-s)}tui-radio-list[data-size=s] [tuiSubtitle],tui-radio-list[data-size=s] [tuiTitle] [tuiSubtitle]{font:var(--tui-font-text-xs)}tui-radio-list[data-size=s]>.t-item,tui-radio-list[data-size=s] [tuiTitle]>.t-item{gap:.5rem}tui-radio-list [tuiTitle]{font:var(--tui-font-text-m)}tui-radio-list [tuiSubtitle]{color:var(--tui-text-secondary)}tui-radio-list>.t-item{display:flex;gap:.75rem}tui-radio-list>.t-item_disabled{opacity:var(--tui-disabled-opacity)}\n"] }]
}], propDecorators: { controls: [{
type: ViewChildren,
args: [NgControl]
}], items: [{
type: Input
}], size: [{
type: Input
}], identityMatcher: [{
type: Input
}], disabledItemHandler: [{
type: Input
}], itemContent: [{
type: Input
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmFkaW8tbGlzdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9raXQvY29tcG9uZW50cy9yYWRpby1saXN0L3JhZGlvLWxpc3QuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMva2l0L2NvbXBvbmVudHMvcmFkaW8tbGlzdC9yYWRpby1saXN0LnRlbXBsYXRlLmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLE9BQU8sRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBQ3hDLE9BQU8sRUFDSCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFFBQVEsRUFDUixNQUFNLEVBQ04sS0FBSyxFQUVMLFlBQVksRUFDWixpQkFBaUIsR0FDcEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFDLFdBQVcsRUFBRSxTQUFTLEVBQW9CLFVBQVUsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQ3BGLE9BQU8sRUFBQyxZQUFZLEVBQUUsVUFBVSxFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFDL0QsT0FBTyxFQUNILFdBQVcsRUFDWCw0QkFBNEIsRUFDNUIsaUJBQWlCLEdBQ3BCLE1BQU0seUJBQXlCLENBQUM7QUFDakMsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLG9DQUFvQyxDQUFDO0FBQ2hFLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSx3QkFBd0IsQ0FBQztBQUdwRCxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0sZ0NBQWdDLENBQUM7QUFDeEQsT0FBTyxFQUEyQixrQkFBa0IsRUFBQyxNQUFNLHdCQUF3QixDQUFDOzs7O0FBRXBGLE1BQU0sS0FBSyxHQUFnQixHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUMsS0FBSyxFQUFFLFNBQVMsRUFBQyxDQUFDLENBQUM7QUFFdEQsTUFjYSxZQUFnQixTQUFRLFVBQWE7SUFkbEQ7O1FBZ0JxQixhQUFRLEdBQXlCLFdBQVcsQ0FBQztRQUU3QyxPQUFFLEdBQUcsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBRTVDLGNBQVMsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQ2hDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUNwRCxDQUFDO1FBR0ssVUFBSyxHQUFpQixFQUFFLENBQUM7UUFHekIsU0FBSSxHQUFhLEdBQUcsQ0FBQztRQUdyQixvQkFBZSxHQUEwQiw0QkFBNEIsQ0FBQztRQUd0RSx3QkFBbUIsR0FBeUIsaUJBQWlCLENBQUM7UUFHOUQsZ0JBQVcsR0FBbUQsQ0FBQyxFQUFDLFNBQVMsRUFBQyxFQUFFLEVBQUUsQ0FDakYsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0tBbUJ6QjtJQWpCRyxJQUFjLElBQUk7UUFDZCxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDO0lBQzdDLENBQUM7SUFFUyxVQUFVO1FBQ2hCLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLGFBQWEsRUFBRSxDQUFDLENBQUM7UUFFckUsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsRUFBRTtZQUNqQixJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7U0FDcEI7SUFDTCxDQUFDO0lBRVMsWUFBWSxDQUFDLElBQU87UUFDMUIsT0FBTyxJQUFJLENBQUMsS0FBSyxFQUFFLEtBQUssSUFBSTtZQUN4QixDQUFDLENBQUMsSUFBSSxLQUFLLElBQUk7WUFDZixDQUFDLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDbkQsQ0FBQzsrR0ExQ1EsWUFBWTttR0FBWixZQUFZLGtUQU5WLENBQUMsWUFBWSxDQUFDLFlBQVksQ0FBQyxDQUFDLHVEQU96QixTQUFTLHVFQzFDM0Isd3VCQXNCQSxtdEJEUWMsV0FBVyxrMEJBQUUsT0FBTyxtSEFBRSxrQkFBa0IsOFhBQVksWUFBWTs7U0FXakUsWUFBWTs0RkFBWixZQUFZO2tCQWR4QixTQUFTO2lDQUNNLElBQUksWUFDTixnQkFBZ0IsV0FDakIsQ0FBQyxXQUFXLEVBQUUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLFFBQVEsRUFBRSxZQUFZLENBQUMsaUJBRzVELGlCQUFpQixDQUFDLElBQUksbUJBQ3BCLHVCQUF1QixDQUFDLE1BQU0sYUFDcEMsQ0FBQyxZQUFZLGNBQWMsQ0FBQyxRQUNqQzt3QkFDRixrQkFBa0IsRUFBRSxNQUFNO3dCQUMxQixZQUFZLEVBQUUsY0FBYztxQkFDL0I7OEJBSWdCLFFBQVE7c0JBRHhCLFlBQVk7dUJBQUMsU0FBUztnQkFVaEIsS0FBSztzQkFEWCxLQUFLO2dCQUlDLElBQUk7c0JBRFYsS0FBSztnQkFJQyxlQUFlO3NCQURyQixLQUFLO2dCQUlDLG1CQUFtQjtzQkFEekIsS0FBSztnQkFJQyxXQUFXO3NCQURqQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtOZ0Zvck9mfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgICBDb21wb25lbnQsXG4gICAgY29tcHV0ZWQsXG4gICAgaW5qZWN0LFxuICAgIElucHV0LFxuICAgIHR5cGUgUXVlcnlMaXN0LFxuICAgIFZpZXdDaGlsZHJlbixcbiAgICBWaWV3RW5jYXBzdWxhdGlvbixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0Zvcm1zTW9kdWxlLCBOZ0NvbnRyb2wsIHR5cGUgVmFsaWRhdG9yRm4sIFZhbGlkYXRvcnN9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7dHVpQXNDb250cm9sLCBUdWlDb250cm9sfSBmcm9tICdAdGFpZ2EtdWkvY2RrL2NsYXNzZXMnO1xuaW1wb3J0IHtcbiAgICBFTVBUWV9RVUVSWSxcbiAgICBUVUlfREVGQVVMVF9JREVOVElUWV9NQVRDSEVSLFxuICAgIFRVSV9GQUxTRV9IQU5ETEVSLFxufSBmcm9tICdAdGFpZ2EtdWkvY2RrL2NvbnN0YW50cyc7XG5pbXBvcnQge1R1aVZhbGlkYXRvcn0gZnJvbSAnQHRhaWdhLXVpL2Nkay9kaXJlY3RpdmVzL3ZhbGlkYXRvcic7XG5pbXBvcnQge1R1aUlkU2VydmljZX0gZnJvbSAnQHRhaWdhLXVpL2Nkay9zZXJ2aWNlcyc7XG5pbXBvcnQge3R5cGUgVHVpQm9vbGVhbkhhbmRsZXIsIHR5cGUgVHVpSWRlbnRpdHlNYXRjaGVyfSBmcm9tICdAdGFpZ2EtdWkvY2RrL3R5cGVzJztcbmltcG9ydCB7dHlwZSBUdWlTaXplUywgdHlwZSBUdWlWYWx1ZUNvbnRlbnRDb250ZXh0fSBmcm9tICdAdGFpZ2EtdWkvY29yZS90eXBlcyc7XG5pbXBvcnQge1R1aVJhZGlvfSBmcm9tICdAdGFpZ2EtdWkva2l0L2NvbXBvbmVudHMvcmFkaW8nO1xuaW1wb3J0IHt0eXBlIFBvbHltb3JwaGV1c0NvbnRlbnQsIFBvbHltb3JwaGV1c091dGxldH0gZnJvbSAnQHRhaWdhLXVpL3BvbHltb3JwaGV1cyc7XG5cbmNvbnN0IEVSUk9SOiBWYWxpZGF0b3JGbiA9ICgpID0+ICh7ZXJyb3I6ICdJbnZhbGlkJ30pO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIHNlbGVjdG9yOiAndHVpLXJhZGlvLWxpc3QnLFxuICAgIGltcG9ydHM6IFtGb3Jtc01vZHVsZSwgTmdGb3JPZiwgUG9seW1vcnBoZXVzT3V0bGV0LCBUdWlSYWRpbywgVHVpVmFsaWRhdG9yXSxcbiAgICB0ZW1wbGF0ZVVybDogJy4vcmFkaW8tbGlzdC50ZW1wbGF0ZS5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9yYWRpby1saXN0LnN0eWxlLmxlc3MnXSxcbiAgICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgIHByb3ZpZGVyczogW3R1aUFzQ29udHJvbChUdWlSYWRpb0xpc3QpXSxcbiAgICBob3N0OiB7XG4gICAgICAgICdbYXR0ci5kYXRhLXNpemVdJzogJ3NpemUnLFxuICAgICAgICAnKGZvY3Vzb3V0KSc6ICdvbkZvY3VzT3V0KCknLFxuICAgIH0sXG59KVxuZXhwb3J0IGNsYXNzIFR1aVJhZGlvTGlzdDxUPiBleHRlbmRzIFR1aUNvbnRyb2w8VD4ge1xuICAgIEBWaWV3Q2hpbGRyZW4oTmdDb250cm9sKVxuICAgIHByaXZhdGUgcmVhZG9ubHkgY29udHJvbHM6IFF1ZXJ5TGlzdDxOZ0NvbnRyb2w+ID0gRU1QVFlfUVVFUlk7XG5cbiAgICBwcml2YXRlIHJlYWRvbmx5IGlkID0gaW5qZWN0KFR1aUlkU2VydmljZSkuZ2VuZXJhdGUoKTtcblxuICAgIHByb3RlY3RlZCB2YWxpZGF0b3IgPSBjb21wdXRlZCgoKSA9PlxuICAgICAgICB0aGlzLmludmFsaWQoKSA/IEVSUk9SIDogVmFsaWRhdG9ycy5udWxsVmFsaWRhdG9yLFxuICAgICk7XG5cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBpdGVtczogcmVhZG9ubHkgVFtdID0gW107XG5cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBzaXplOiBUdWlTaXplUyA9ICdtJztcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGlkZW50aXR5TWF0Y2hlcjogVHVpSWRlbnRpdHlNYXRjaGVyPFQ+ID0gVFVJX0RFRkFVTFRfSURFTlRJVFlfTUFUQ0hFUjtcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGRpc2FibGVkSXRlbUhhbmRsZXI6IFR1aUJvb2xlYW5IYW5kbGVyPFQ+ID0gVFVJX0ZBTFNFX0hBTkRMRVI7XG5cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBpdGVtQ29udGVudDogUG9seW1vcnBoZXVzQ29udGVudDxUdWlWYWx1ZUNvbnRlbnRDb250ZXh0PFQ+PiA9ICh7JGltcGxpY2l0fSkgPT5cbiAgICAgICAgU3RyaW5nKCRpbXBsaWNpdCk7XG5cbiAgICBwcm90ZWN0ZWQgZ2V0IG5hbWUoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIGAke3RoaXMuY29udHJvbC5uYW1lfS0ke3RoaXMuaWR9YDtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgb25Gb2N1c091dCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jb250cm9scy5mb3JFYWNoKChjb250cm9sKSA9PiBjb250cm9sLmNvbnRyb2w/Lm1hcmtBc1RvdWNoZWQoKSk7XG5cbiAgICAgICAgaWYgKCF0aGlzLnRvdWNoZWQoKSkge1xuICAgICAgICAgICAgdGhpcy5vblRvdWNoZWQoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByb3RlY3RlZCBpdGVtSXNBY3RpdmUoaXRlbTogVCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZSgpID09PSBudWxsXG4gICAgICAgICAgICA/IGl0ZW0gPT09IG51bGxcbiAgICAgICAgICAgIDogdGhpcy5pZGVudGl0eU1hdGNoZXIodGhpcy52YWx1ZSgpLCBpdGVtKTtcbiAgICB9XG59XG4iLCI8bGFiZWxcbiAgICAqbmdGb3I9XCJsZXQgaXRlbSBvZiBpdGVtczsgaW5kZXggYXMgaW5kZXhcIlxuICAgIGNsYXNzPVwidC1pdGVtXCJcbiAgICBbY2xhc3MudC1pdGVtX2Rpc2FibGVkXT1cImRpc2FibGVkKCkgfHwgZGlzYWJsZWRJdGVtSGFuZGxlcihpdGVtKVwiXG4+XG4gICAgPGlucHV0XG4gICAgICAgIHR1aVJhZGlvXG4gICAgICAgIHR5cGU9XCJyYWRpb1wiXG4gICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZCgpIHx8IGRpc2FibGVkSXRlbUhhbmRsZXIoaXRlbSlcIlxuICAgICAgICBbaWRlbnRpdHlNYXRjaGVyXT1cImlkZW50aXR5TWF0Y2hlclwiXG4gICAgICAgIFtuYW1lXT1cIm5hbWVcIlxuICAgICAgICBbbmdNb2RlbF09XCJ2YWx1ZSgpXCJcbiAgICAgICAgW25nTW9kZWxPcHRpb25zXT1cIntzdGFuZGFsb25lOiB0cnVlfVwiXG4gICAgICAgIFtzaXplXT1cInNpemVcIlxuICAgICAgICBbdHVpVmFsaWRhdG9yXT1cInZhbGlkYXRvcigpXCJcbiAgICAgICAgW3ZhbHVlXT1cIml0ZW1cIlxuICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJvbkNoYW5nZSgkZXZlbnQpXCJcbiAgICAvPlxuICAgIDxuZy1jb250YWluZXIgKnBvbHltb3JwaGV1c091dGxldD1cIml0ZW1Db250ZW50IGFzIHRleHQ7IGNvbnRleHQ6IHskaW1wbGljaXQ6IGl0ZW0sIGFjdGl2ZTogaXRlbUlzQWN0aXZlKGl0ZW0pfVwiPlxuICAgICAgICB7eyB0ZXh0IH19XG4gICAgPC9uZy1jb250YWluZXI+XG48L2xhYmVsPlxuIl19