UNPKG

@firestitch/address

Version:
102 lines 18.8 kB
import { ChangeDetectionStrategy, Component, EventEmitter, HostBinding, Input, Output, } from '@angular/core'; import { Countries } from '../../consts'; import { FsAddressCountryComponent } from '../address-country/address-country.component'; import { FormsModule } from '@angular/forms'; import { FsFormModule } from '@firestitch/form'; import { FsAddressRegionComponent } from '../address-region/address-region.component'; import * as i0 from "@angular/core"; import * as i1 from "@angular/forms"; import * as i2 from "@firestitch/form"; export class FsAddressRegionCountryComponent { orientationVertical = true; orientationHorizontal = false; orientationHorizontalStretch = false; config = {}; country; region; set setOrientation(value) { this.orientationVertical = value === 'vertical'; this.orientationHorizontal = value === 'horizontal'; this.orientationHorizontalStretch = value === 'horizontal-stretch'; } countryChange = new EventEmitter(); regionChange = new EventEmitter(); countries = Countries; regionCountries; ngOnInit() { this._initConfig(); } changeCountry() { this.regionCountries = this.country ? [this.country] : null; if (!this.country) { this.region = null; } //if region is not in the list of regions for the country, set region to null if (this.country && this.region) { const selectedCountry = this.countries.find((country) => country.code === this.country); if (!selectedCountry?.regions.some((region) => region.code === this.region)) { this.region = null; } } this.regionChange.emit(this.region); this.countryChange.emit(this.country); } changeRegion() { if (this.region) { const regionCountry = this.countries.find((country) => { return country.regions && country.regions.find((region) => this.region === region.code); }); if (regionCountry) { this.country = regionCountry.code; this.changeCountry(); } } this.regionChange.emit(this.region); } _initConfig() { this.config = { country: { required: false }, region: { required: false }, ...this.config, }; if (this.config.country.list) { this.countries = Countries.filter((country) => { return this.config.country.list.indexOf(country.code) >= 0; }); } } static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: FsAddressRegionCountryComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.7", type: FsAddressRegionCountryComponent, isStandalone: true, selector: "fs-address-region-country", inputs: { config: "config", country: "country", region: "region", setOrientation: ["orientation", "setOrientation"] }, outputs: { countryChange: "countryChange", regionChange: "regionChange" }, host: { properties: { "class.vertical": "this.orientationVertical", "class.horizontal": "this.orientationHorizontal", "class.horizontal-stretch": "this.orientationHorizontalStretch" } }, ngImport: i0, template: "<div class=\"region-country\">\n <div class=\"country\">\n @if (config.country.visible!==false) {\n <fs-address-country\n [disabled]=\"config.country.disabled\"\n [required]=\"config.country.required\"\n [label]=\"config.country.placeholder\"\n [countries]=\"countries\"\n [(ngModel)]=\"country\"\n (selectionChange)=\"changeCountry()\"\n name=\"country\">\n </fs-address-country>\n }\n </div>\n <div class=\"region\">\n <fs-address-region\n [(region)]=\"region\"\n [country]=\"country\"\n (regionChange)=\"changeRegion()\"\n [countries]=\"regionCountries\"\n [disabled]=\"config.region.disabled\"\n [required]=\"config.region.required\"\n name=\"region\">\n </fs-address-region>\n </div>\n</div>", styles: [".region-country{display:flex;flex-direction:column}:host.horizontal .region-country{flex-direction:row}:host.horizontal ::ng-deep .region{padding-left:10px}:host.horizontal ::ng-deep fs-address-region .mat-form-field{width:100%}:host.vertical ::ng-deep fs-address-country .mat-form-field,:host.vertical ::ng-deep fs-address-region .mat-form-field{width:100%}:host.horizontal-stretch .region-country{display:grid;grid-template-columns:1fr 1fr;grid-gap:10px}:host.horizontal-stretch ::ng-deep fs-address-region .mat-form-field{width:100%}:host.horizontal-stretch ::ng-deep .country .mat-form-field{width:100%}\n"], dependencies: [{ kind: "component", type: FsAddressCountryComponent, selector: "fs-address-country", inputs: ["disabled", "required", "excludeCountries", "countries", "label"], outputs: ["selectionChange"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: FsFormModule }, { kind: "directive", type: i2.FsFormRequiredDirective, selector: "[fsFormRequired],[ngModel][required]", inputs: ["fsFormRequired", "required", "fsFormRequiredMessage"] }, { kind: "component", type: FsAddressRegionComponent, selector: "fs-address-region", inputs: ["region", "disabled", "country", "label", "required", "regionCountryOrder", "countries"], outputs: ["regionChange"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: FsAddressRegionCountryComponent, decorators: [{ type: Component, args: [{ selector: 'fs-address-region-country', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [ FsAddressCountryComponent, FormsModule, FsFormModule, FsAddressRegionComponent, ], template: "<div class=\"region-country\">\n <div class=\"country\">\n @if (config.country.visible!==false) {\n <fs-address-country\n [disabled]=\"config.country.disabled\"\n [required]=\"config.country.required\"\n [label]=\"config.country.placeholder\"\n [countries]=\"countries\"\n [(ngModel)]=\"country\"\n (selectionChange)=\"changeCountry()\"\n name=\"country\">\n </fs-address-country>\n }\n </div>\n <div class=\"region\">\n <fs-address-region\n [(region)]=\"region\"\n [country]=\"country\"\n (regionChange)=\"changeRegion()\"\n [countries]=\"regionCountries\"\n [disabled]=\"config.region.disabled\"\n [required]=\"config.region.required\"\n name=\"region\">\n </fs-address-region>\n </div>\n</div>", styles: [".region-country{display:flex;flex-direction:column}:host.horizontal .region-country{flex-direction:row}:host.horizontal ::ng-deep .region{padding-left:10px}:host.horizontal ::ng-deep fs-address-region .mat-form-field{width:100%}:host.vertical ::ng-deep fs-address-country .mat-form-field,:host.vertical ::ng-deep fs-address-region .mat-form-field{width:100%}:host.horizontal-stretch .region-country{display:grid;grid-template-columns:1fr 1fr;grid-gap:10px}:host.horizontal-stretch ::ng-deep fs-address-region .mat-form-field{width:100%}:host.horizontal-stretch ::ng-deep .country .mat-form-field{width:100%}\n"] }] }], propDecorators: { orientationVertical: [{ type: HostBinding, args: ['class.vertical'] }], orientationHorizontal: [{ type: HostBinding, args: ['class.horizontal'] }], orientationHorizontalStretch: [{ type: HostBinding, args: ['class.horizontal-stretch'] }], config: [{ type: Input }], country: [{ type: Input }], region: [{ type: Input }], setOrientation: [{ type: Input, args: ['orientation'] }], countryChange: [{ type: Output }], regionChange: [{ type: Output }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRkcmVzcy1yZWdpb24tY291bnRyeS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvYXBwL2NvbXBvbmVudHMvYWRkcmVzcy1yZWdpb24tY291bnRyeS9hZGRyZXNzLXJlZ2lvbi1jb3VudHJ5LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvY29tcG9uZW50cy9hZGRyZXNzLXJlZ2lvbi1jb3VudHJ5L2FkZHJlc3MtcmVnaW9uLWNvdW50cnkuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsWUFBWSxFQUNaLFdBQVcsRUFDWCxLQUFLLEVBRUwsTUFBTSxHQUNQLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFJekMsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sOENBQThDLENBQUM7QUFDekYsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNoRCxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQzs7OztBQWdCdEYsTUFBTSxPQUFPLCtCQUErQjtJQUVKLG1CQUFtQixHQUFHLElBQUksQ0FBQztJQUN6QixxQkFBcUIsR0FBRyxLQUFLLENBQUM7SUFDdEIsNEJBQTRCLEdBQUcsS0FBSyxDQUFDO0lBRXJFLE1BQU0sR0FBMEIsRUFBRSxDQUFDO0lBQ25DLE9BQU8sQ0FBUztJQUNoQixNQUFNLENBQVM7SUFDL0IsSUFBaUMsY0FBYyxDQUFDLEtBQUs7UUFDbkQsSUFBSSxDQUFDLG1CQUFtQixHQUFHLEtBQUssS0FBSyxVQUFVLENBQUM7UUFDaEQsSUFBSSxDQUFDLHFCQUFxQixHQUFHLEtBQUssS0FBSyxZQUFZLENB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TCxDQUFDO0lBQ0gsQ0FBQzt1R0F4RVUsK0JBQStCOzJGQUEvQiwrQkFBK0Isa2RDakM1Qyx3eUJBeUJNLDJwQkRFRSx5QkFBeUIsd0tBQ3pCLFdBQVcsMmpCQUNYLFlBQVksMk1BQ1osd0JBQXdCOzsyRkFHbkIsK0JBQStCO2tCQWIzQyxTQUFTOytCQUNJLDJCQUEyQixtQkFHcEIsdUJBQXVCLENBQUMsTUFBTSxjQUNuQyxJQUFJLFdBQ1A7d0JBQ0wseUJBQXlCO3dCQUN6QixXQUFXO3dCQUNYLFlBQVk7d0JBQ1osd0JBQXdCO3FCQUMzQjs4QkFJbUMsbUJBQW1CO3NCQUF4RCxXQUFXO3VCQUFDLGdCQUFnQjtnQkFDVyxxQkFBcUI7c0JBQTVELFdBQVc7dUJBQUMsa0JBQWtCO2dCQUNpQiw0QkFBNEI7c0JBQTNFLFdBQVc7dUJBQUMsMEJBQTBCO2dCQUV2QixNQUFNO3NCQUFyQixLQUFLO2dCQUNVLE9BQU87c0JBQXRCLEtBQUs7Z0JBQ1UsTUFBTTtzQkFBckIsS0FBSztnQkFDMkIsY0FBYztzQkFBOUMsS0FBSzt1QkFBQyxhQUFhO2dCQU1ILGFBQWE7c0JBQTdCLE1BQU07Z0JBQ1UsWUFBWTtzQkFBNUIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDb21wb25lbnQsXG4gIEV2ZW50RW1pdHRlcixcbiAgSG9zdEJpbmRpbmcsXG4gIElucHV0LFxuICBPbkluaXQsXG4gIE91dHB1dCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IENvdW50cmllcyB9IGZyb20gJy4uLy4uL2NvbnN0cyc7XG5pbXBvcnQgeyBJQWRkcmVzc0NvdW50cnkgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IEZzQWRkcmVzc1JlZ2lvbkNvbmZpZyB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvYWRkcmVzcy1yZWdpb24tY29uZmlnLmludGVyZmFjZSc7XG5pbXBvcnQgeyBJQWRkcmVzc1JlZ2lvbiB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvYWRkcmVzcy1yZWdpb24uaW50ZXJmYWNlJztcbmltcG9ydCB7IEZzQWRkcmVzc0NvdW50cnlDb21wb25lbnQgfSBmcm9tICcuLi9hZGRyZXNzLWNvdW50cnkvYWRkcmVzcy1jb3VudHJ5LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IEZzRm9ybU1vZHVsZSB9IGZyb20gJ0BmaXJlc3RpdGNoL2Zvcm0nO1xuaW1wb3J0IHsgRnNBZGRyZXNzUmVnaW9uQ29tcG9uZW50IH0gZnJvbSAnLi4vYWRkcmVzcy1yZWdpb24vYWRkcmVzcy1yZWdpb24uY29tcG9uZW50JztcblxuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2ZzLWFkZHJlc3MtcmVnaW9uLWNvdW50cnknLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9hZGRyZXNzLXJlZ2lvbi1jb3VudHJ5LmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9hZGRyZXNzLXJlZ2lvbi1jb3VudHJ5LmNvbXBvbmVudC5zY3NzJ10sXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBpbXBvcnRzOiBbXG4gICAgICAgIEZzQWRkcmVzc0NvdW50cnlDb21wb25lbnQsXG4gICAgICAgIEZvcm1zTW9kdWxlLFxuICAgICAgICBGc0Zvcm1Nb2R1bGUsXG4gICAgICAgIEZzQWRkcmVzc1JlZ2lvbkNvbXBvbmVudCxcbiAgICBdLFxufSlcbmV4cG9ydCBjbGFzcyBGc0FkZHJlc3NSZWdpb25Db3VudHJ5Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcblxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLnZlcnRpY2FsJykgcHVibGljIG9yaWVudGF0aW9uVmVydGljYWwgPSB0cnVlO1xuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmhvcml6b250YWwnKSBwdWJsaWMgb3JpZW50YXRpb25Ib3Jpem9udGFsID0gZmFsc2U7XG4gIEBIb3N0QmluZGluZygnY2xhc3MuaG9yaXpvbnRhbC1zdHJldGNoJykgcHVibGljIG9yaWVudGF0aW9uSG9yaXpvbnRhbFN0cmV0Y2ggPSBmYWxzZTtcblxuICBASW5wdXQoKSBwdWJsaWMgY29uZmlnOiBGc0FkZHJlc3NSZWdpb25Db25maWcgPSB7fTtcbiAgQElucHV0KCkgcHVibGljIGNvdW50cnk6IHN0cmluZztcbiAgQElucHV0KCkgcHVibGljIHJlZ2lvbjogc3RyaW5nO1xuICBASW5wdXQoJ29yaWVudGF0aW9uJykgcHVibGljIHNldCBzZXRPcmllbnRhdGlvbih2YWx1ZSkge1xuICAgIHRoaXMub3JpZW50YXRpb25WZXJ0aWNhbCA9IHZhbHVlID09PSAndmVydGljYWwnO1xuICAgIHRoaXMub3JpZW50YXRpb25Ib3Jpem9udGFsID0gdmFsdWUgPT09ICdob3Jpem9udGFsJztcbiAgICB0aGlzLm9yaWVudGF0aW9uSG9yaXpvbnRhbFN0cmV0Y2ggPSB2YWx1ZSA9PT0gJ2hvcml6b250YWwtc3RyZXRjaCc7XG4gIH1cblxuICBAT3V0cHV0KCkgcHVibGljIGNvdW50cnlDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpIHB1YmxpYyByZWdpb25DaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICBwdWJsaWMgY291bnRyaWVzID0gQ291bnRyaWVzO1xuICBwdWJsaWMgcmVnaW9uQ291bnRyaWVzO1xuXG4gIHB1YmxpYyBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLl9pbml0Q29uZmlnKCk7XG4gIH1cblxuICBwdWJsaWMgY2hhbmdlQ291bnRyeSgpIHtcbiAgICB0aGlzLnJlZ2lvbkNvdW50cmllcyA9IHRoaXMuY291bnRyeSA/IFt0aGlzLmNvdW50cnldIDogbnVsbDtcbiAgICBpZiAoIXRoaXMuY291bnRyeSkge1xuICAgICAgdGhpcy5yZWdpb24gPSBudWxsO1xuICAgIH1cblxuICAgIC8vaWYgcmVnaW9uIGlzIG5vdCBpbiB0aGUgbGlzdCBvZiByZWdpb25zIGZvciB0aGUgY291bnRyeSwgc2V0IHJlZ2lvbiB0byBudWxsXG4gICAgaWYgKHRoaXMuY291bnRyeSAmJiB0aGlzLnJlZ2lvbikge1xuICAgICAgY29uc3Qgc2VsZWN0ZWRDb3VudHJ5ID0gdGhpcy5jb3VudHJpZXMuZmluZChcbiAgICAgICAgKGNvdW50cnk6IElBZGRyZXNzQ291bnRyeSkgPT4gY291bnRyeS5jb2RlID09PSB0aGlzLmNvdW50cnksXG4gICAgICApO1xuICAgICAgaWYgKCFzZWxlY3RlZENvdW50cnk/LnJlZ2lvbnMuc29tZSgocmVnaW9uOiBJQWRkcmVzc1JlZ2lvbikgPT4gcmVnaW9uLmNvZGUgPT09IHRoaXMucmVnaW9uKSl7XG4gICAgICAgIHRoaXMucmVnaW9uID0gbnVsbDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnJlZ2lvbkNoYW5nZS5lbWl0KHRoaXMucmVnaW9uKTtcbiAgICB0aGlzLmNvdW50cnlDaGFuZ2UuZW1pdCh0aGlzLmNvdW50cnkpO1xuICB9XG5cbiAgcHVibGljIGNoYW5nZVJlZ2lvbigpIHtcbiAgICBpZiAodGhpcy5yZWdpb24pIHtcbiAgICAgIGNvbnN0IHJlZ2lvbkNvdW50cnkgPSB0aGlzLmNvdW50cmllcy5maW5kKChjb3VudHJ5KSA9PiB7XG4gICAgICAgIHJldHVybiBjb3VudHJ5LnJlZ2lvbnNcbiAgICAgICAgICAmJiBjb3VudHJ5LnJlZ2lvbnMuZmluZCgocmVnaW9uKSA9PiB0aGlzLnJlZ2lvbiA9PT0gcmVnaW9uLmNvZGUpO1xuICAgICAgfSk7XG5cbiAgICAgIGlmIChyZWdpb25Db3VudHJ5KSB7XG4gICAgICAgIHRoaXMuY291bnRyeSA9IHJlZ2lvbkNvdW50cnkuY29kZTtcbiAgICAgICAgdGhpcy5jaGFuZ2VDb3VudHJ5KCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5yZWdpb25DaGFuZ2UuZW1pdCh0aGlzLnJlZ2lvbik7XG4gIH1cblxuICBwcml2YXRlIF9pbml0Q29uZmlnKCkge1xuICAgIHRoaXMuY29uZmlnID0ge1xuICAgICAgY291bnRyeTogeyByZXF1aXJlZDogZmFsc2UgfSxcbiAgICAgIHJlZ2lvbjogeyByZXF1aXJlZDogZmFsc2UgfSwgLi4udGhpcy5jb25maWcsXG4gICAgfTtcblxuICAgIGlmICh0aGlzLmNvbmZpZy5jb3VudHJ5Lmxpc3QpIHtcbiAgICAgIHRoaXMuY291bnRyaWVzID0gQ291bnRyaWVzLmZpbHRlcigoY291bnRyeSkgPT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5jb25maWcuY291bnRyeS5saXN0LmluZGV4T2YoY291bnRyeS5jb2RlKSA+PSAwO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cblxufVxuIiwiPGRpdiBjbGFzcz1cInJlZ2lvbi1jb3VudHJ5XCI+XG4gIDxkaXYgY2xhc3M9XCJjb3VudHJ5XCI+XG4gICAgQGlmIChjb25maWcuY291bnRyeS52aXNpYmxlIT09ZmFsc2UpIHtcbiAgICAgIDxmcy1hZGRyZXNzLWNvdW50cnlcbiAgICAgICAgW2Rpc2FibGVkXT1cImNvbmZpZy5jb3VudHJ5LmRpc2FibGVkXCJcbiAgICAgICAgW3JlcXVpcmVkXT1cImNvbmZpZy5jb3VudHJ5LnJlcXVpcmVkXCJcbiAgICAgICAgW2xhYmVsXT1cImNvbmZpZy5jb3VudHJ5LnBsYWNlaG9sZGVyXCJcbiAgICAgICAgW2NvdW50cmllc109XCJjb3VudHJpZXNcIlxuICAgICAgICBbKG5nTW9kZWwpXT1cImNvdW50cnlcIlxuICAgICAgICAoc2VsZWN0aW9uQ2hhbmdlKT1cImNoYW5nZUNvdW50cnkoKVwiXG4gICAgICAgIG5hbWU9XCJjb3VudHJ5XCI+XG4gICAgICA8L2ZzLWFkZHJlc3MtY291bnRyeT5cbiAgICB9XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPVwicmVnaW9uXCI+XG4gICAgPGZzLWFkZHJlc3MtcmVnaW9uXG4gICAgICBbKHJlZ2lvbildPVwicmVnaW9uXCJcbiAgICAgIFtjb3VudHJ5XT1cImNvdW50cnlcIlxuICAgICAgKHJlZ2lvbkNoYW5nZSk9XCJjaGFuZ2VSZWdpb24oKVwiXG4gICAgICBbY291bnRyaWVzXT1cInJlZ2lvbkNvdW50cmllc1wiXG4gICAgICBbZGlzYWJsZWRdPVwiY29uZmlnLnJlZ2lvbi5kaXNhYmxlZFwiXG4gICAgICBbcmVxdWlyZWRdPVwiY29uZmlnLnJlZ2lvbi5yZXF1aXJlZFwiXG4gICAgICBuYW1lPVwicmVnaW9uXCI+XG4gICAgPC9mcy1hZGRyZXNzLXJlZ2lvbj5cbiAgPC9kaXY+XG48L2Rpdj4iXX0=