UNPKG

@infordata-web/portal-common-component-lib

Version:

This library was generated with [Angular CLI](https://github.com/angular/angular-cli) version 10.0.14.

87 lines 17.6 kB
import { Component, EventEmitter, Input, Output, } from "@angular/core"; import { FormControl, FormGroup } from "@angular/forms"; import { filter, map, shareReplay, startWith, switchMap, } from "rxjs/operators"; import { LocalitaDTO } from "../../models/localita-dto"; import { ComponentOutputStatus } from "../../normalizzazione/component-output-status"; import { MessageService } from "../../services/message.service"; import { TerritorioService } from "../../services/territorio/territorio-service"; export class LocalitaComponent { constructor(msg, territorio) { this.msg = msg; this.territorio = territorio; this.done = new EventEmitter(); } ngOnInit() { this.form = new FormGroup({}); if (!this.localita) { this.initLocalita(); } const localitaProvincia = new FormControl({ value: this.localita.provincia, disabled: this.viewOnly }, c => { if (this.viewOnly) return {}; return String(c.value).trim().length > 0 ? {} : { required: true }; }); this.form.addControl("localitaProvincia", localitaProvincia); const localitaComune = new FormControl({ value: this.localita.comune, disabled: this.viewOnly }, c => { if (this.viewOnly) return {}; return String(c.value).trim().length > 0 ? {} : { required: true }; }); this.form.addControl("localitaComune", localitaComune); // if(this.viewCap) { const localitaCap = new FormControl({ value: this.localita.cap, disabled: this.viewOnly }, c => { if (this.viewOnly) return {}; return String(c.value).trim().length > 0 ? {} : { required: true }; }); this.form.addControl("localitaCap", localitaCap); // } this.comuni$ = localitaProvincia.valueChanges.pipe(startWith(this.localita.provincia), filter((x) => x), switchMap((value) => this.territorio.getComuni$(value)), shareReplay()); this.cap$ = localitaComune.valueChanges.pipe(startWith(this.localita.comune), filter((comune) => comune != null), switchMap((codiceCatastale) => { return this.comuni$.pipe(map((comuni) => comuni.filter((comune) => comune.codiceCatastale === codiceCatastale)), filter((comuni) => comuni.length > 0), map((comuni) => comuni[0]), switchMap(comune => this.territorio.getCap$(comune.codiceIstat))); })); const changes$ = this.form.valueChanges.pipe(map((_) => { const localita = new LocalitaDTO(); // if(this.viewCap) { localita.cap = this.form.controls["localitaCap"].value; // } localita.provincia = this.form.controls["localitaProvincia"].value; localita.comune = this.form.controls["localitaComune"].value; return ComponentOutputStatus.of(this.form.valid, localita); })); this.subscription = changes$.subscribe((_) => this.done.emit(_)); } initLocalita() { this.localita = new LocalitaDTO(); } compareComuni(c1, c2) { return c1 && c2 ? c1.cop === c2.cop : c1 === c2; } ngOnDestroy() { this.subscription.unsubscribe(); } } LocalitaComponent.decorators = [ { type: Component, args: [{ selector: "lib-localita", template: "<div [formGroup]=\"form\">\r\n\t<div class=\"row my-2\">\r\n\t\t<div class=\"col-md-4\">\r\n\t\t\t<mat-form-field>\r\n\t\t\t\t<mat-label>{{'required' | traduzione}}{{'provincia' | traduzione}}</mat-label>\r\n\t\t\t\t<mat-select placeholder=\"{{'seleziona' | traduzione}}\" formControlName=\"localitaProvincia\">\r\n\t\t\t\t\t<mat-option *ngFor=\"let provincia of province$ | async\" [value]=\"provincia.sigla\">\r\n\t\t\t\t\t\t{{provincia.denominazione}}\r\n\t\t\t\t\t</mat-option>\r\n\t\t\t\t</mat-select>\r\n\t\t\t\t<mat-error *ngIf=\"form.touched && form.controls['localitaProvincia'].invalid\">\r\n\t\t\t\t\t{{\r\n\t\t\t\t\tmsg.produceMessage(\r\n\t\t\t\t\t\"obbligatorio\",\r\n\t\t\t\t\tform.controls[\"localitaProvincia\"]\r\n\t\t\t\t\t) | traduzione\r\n\t\t\t\t\t}}\r\n\t\t\t\t</mat-error>\r\n\t\t\t</mat-form-field>\r\n\t\t</div>\r\n\t\t<div class=\"col-md-4\">\r\n\t\t\t<mat-form-field>\r\n\t\t\t\t<mat-label>{{'required' | traduzione}}{{'comune' | traduzione}}</mat-label>\r\n\t\t\t\t<mat-select placeholder=\"{{'seleziona' | traduzione}}\" formControlName=\"localitaComune\">\r\n\t\t\t\t\t<mat-option *ngFor=\"let comune of comuni$ | async\" [value]=\"comune.codiceCatastale\">\r\n\t\t\t\t\t\t{{ comune.denominazione }}\r\n\t\t\t\t\t</mat-option>\r\n\t\t\t\t</mat-select>\r\n\t\t\t\t<mat-error *ngIf=\"form.touched && form.controls['localitaComune'].invalid\">\r\n\t\t\t\t\t{{\r\n\t\t\t\t\tmsg.produceMessage(\"obbligatorio\", form.controls[\"localitaComune\"]) | traduzione\r\n\t\t\t\t\t}}\r\n\t\t\t\t</mat-error>\r\n\t\t\t</mat-form-field>\r\n\t\t</div>\r\n\t\t<div class=\"col-md-4\">\r\n\t\t\t<mat-form-field>\r\n\t\t\t\t<mat-select placeholder=\"{{'required' | traduzione}}{{'cap' | traduzione}}\" formControlName=\"localitaCap\">\r\n\t\t\t\t\t<mat-option *ngFor=\"let cap of cap$ | async\" [value]=\"cap\">\r\n\t\t\t\t\t\t{{ cap }}\r\n\t\t\t\t\t</mat-option>\r\n\t\t\t\t</mat-select>\r\n\t\t\t\t<mat-error *ngIf=\"form.touched && form.controls['localitaCap'].invalid\">\r\n\t\t\t\t\t{{ msg.produceMessage(\"obbligatorio\", form.controls[\"localitaCap\"]) | traduzione}}\r\n\t\t\t\t</mat-error>\r\n\t\t\t</mat-form-field>\r\n\t\t</div>\r\n\t</div>\r\n</div>", styles: [""] },] } ]; LocalitaComponent.ctorParameters = () => [ { type: MessageService }, { type: TerritorioService } ]; LocalitaComponent.propDecorators = { viewOnly: [{ type: Input }], localita: [{ type: Input }], province$: [{ type: Input }], done: [{ type: Output }] }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYWxpdGEuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IkM6L1Byb2dldHRpL0RBRy9zb3JnZW50aS9naXRsYWItc29mdHdhcmVmYWN0b3J5L2NvbW1vbi1jb21wb25lbnQtbGliL3Byb2plY3RzL3BvcnRhbC1jb21tb24tY29tcG9uZW50LWxpYi9zcmMvIiwic291cmNlcyI6WyJsaWIvZGVwb3NpdGkvY29tbW9uLWNvbXBvbmVudC9sb2NhbGl0YS9sb2NhbGl0YS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNOLFNBQVMsRUFDVCxZQUFZLEVBQ1osS0FBSyxFQUdMLE1BQU0sR0FDTixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBYyxNQUFNLGdCQUFnQixDQUFDO0FBRXBFLE9BQU8sRUFDTixNQUFNLEVBQ04sR0FBRyxFQUNILFdBQVcsRUFDWCxTQUFTLEVBQ1QsU0FBUyxHQUNULE1BQU0sZ0JBQWdCLENBQUM7QUFFeEIsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBR3hELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLCtDQUErQyxDQUFDO0FBQ3RGLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNoRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw4Q0FBOEMsQ0FBQztBQU9qRixNQUFNLE9BQU8saUJBQWlCO0lBc0I3QixZQUNTLEdBQW1CLEVBQ25CLFVBQTZCO1FBRDdCLFFBQUcsR0FBSCxHQUFHLENBQWdCO1FBQ25CLGVBQVUsR0FBVixVQUFVLENBQW1CO1FBVnRDLFNBQUksR0FBcUQsSUFBSSxZQUFZLEVBRXRFLENBQUM7SUFTQSxDQUFDO0lBRUwsUUFBUTtRQUNQLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDOUIsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFR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QyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFFbEUsQ0FBQztJQUNELFlBQVk7UUFDWCxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksV0FBVyxFQUFFLENBQUM7SUFDbkMsQ0FBQztJQUVELGFBQWEsQ0FBQyxFQUFhLEVBQUUsRUFBYTtRQUN6QyxPQUFPLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQztJQUNqRCxDQUFDO0lBRUQsV0FBVztRQUNWLElBQUksQ0FBQyxZQUFZLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDakMsQ0FBQzs7O1lBbkhELFNBQVMsU0FBQztnQkFDVixRQUFRLEVBQUUsY0FBYztnQkFDeEIseW9FQUF3Qzs7YUFFeEM7OztZQVBRLGNBQWM7WUFDZCxpQkFBaUI7Ozt1QkFXeEIsS0FBSzt1QkFHTCxLQUFLO3dCQUdMLEtBQUs7bUJBR0wsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcblx0Q29tcG9uZW50LFxyXG5cdEV2ZW50RW1pdHRlcixcclxuXHRJbnB1dCxcclxuXHRPbkRlc3Ryb3ksXHJcblx0T25Jbml0LFxyXG5cdE91dHB1dCxcclxufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQgeyBGb3JtQ29udHJvbCwgRm9ybUdyb3VwLCBWYWxpZGF0b3JzIH0gZnJvbSBcIkBhbmd1bGFyL2Zvcm1zXCI7XHJcbmltcG9ydCB7IE9ic2VydmFibGUsIFN1YnNjcmlwdGlvbiB9IGZyb20gXCJyeGpzXCI7XHJcbmltcG9ydCB7XHJcblx0ZmlsdGVyLFxyXG5cdG1hcCxcclxuXHRzaGFyZVJlcGxheSxcclxuXHRzdGFydFdpdGgsXHJcblx0c3dpdGNoTWFwLFxyXG59IGZyb20gXCJyeGpzL29wZXJhdG9yc1wiO1xyXG5pbXBvcnQgeyBDb211bmVEVE8gfSBmcm9tIFwiLi4vLi4vbW9kZWxzL2NvbXVuZS1kdG9cIjtcclxuaW1wb3J0IHsgTG9jYWxpdGFEVE8gfSBmcm9tIFwiLi4vLi4vbW9kZWxzL2xvY2FsaXRhLWR0b1wiO1xyXG5pbXBvcnQgeyBDb211bmUgfSBmcm9tIFwiLi4vLi4vbW9kZWxzL3BvcnRhbGUvY29tdW5lXCI7XHJcbmltcG9ydCB7IExvY2FsaXRhIH0gZnJvbSBcIi4uLy4uL21vZGVscy9wb3J0YWxlL2xvY2FsaXRhXCI7XHJcbmltcG9ydCB7IENvbXBvbmVudE91dHB1dFN0YXR1cyB9IGZyb20gXCIuLi8uLi9ub3JtYWxpenphemlvbmUvY29tcG9uZW50LW91dHB1dC1zdGF0dXNcIjtcclxuaW1wb3J0IHsgTWVzc2FnZVNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vc2VydmljZXMvbWVzc2FnZS5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IFRlcnJpdG9yaW9TZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL3NlcnZpY2VzL3RlcnJpdG9yaW8vdGVycml0b3Jpby1zZXJ2aWNlXCI7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuXHRzZWxlY3RvcjogXCJsaWItbG9jYWxpdGFcIixcclxuXHR0ZW1wbGF0ZVVybDogXCIuL2xvY2FsaXRhLmNvbXBvbmVudC5odG1sXCIsXHJcblx0c3R5bGVVcmxzOiBbXCIuL2xvY2FsaXRhLmNvbXBvbmVudC5jc3NcIl0sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBMb2NhbGl0YUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcclxuXHJcblx0Zm9ybTogRm9ybUdyb3VwO1xyXG5cclxuXHRASW5wdXQoKVxyXG5cdHZpZXdPbmx5OiBib29sZWFuO1xyXG5cclxuXHRASW5wdXQoKVxyXG5cdGxvY2FsaXRhOiBMb2NhbGl0YURUTztcclxuXHJcblx0QElucHV0KClcclxuXHRwcm92aW5jZSQ6IE9ic2VydmFibGU8QXJyYXk8TG9jYWxpdGE+PjtcclxuXHJcblx0QE91dHB1dCgpXHJcblx0ZG9uZTogRXZlbnRFbWl0dGVyPENvbXBvbmVudE91dHB1dFN0YXR1czxMb2NhbGl0YURUTz4+ID0gbmV3IEV2ZW50RW1pdHRlcjxcclxuXHRcdENvbXBvbmVudE91dHB1dFN0YXR1czxMb2NhbGl0YURUTz5cclxuXHQ+KCk7XHJcblxyXG5cdGNvbXVuaSQ6IE9ic2VydmFibGU8QXJyYXk8Q29tdW5lPj47XHJcblx0Y2FwJDogT2JzZXJ2YWJsZTxBcnJheTxzdHJpbmc+PjtcclxuXHRzdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcclxuXHJcblx0Y29uc3RydWN0b3IoXHJcblx0XHRwcml2YXRlIG1zZzogTWVzc2FnZVNlcnZpY2UsXHJcblx0XHRwcml2YXRlIHRlcnJpdG9yaW86IFRlcnJpdG9yaW9TZXJ2aWNlXHJcblx0KSB7IH1cclxuXHJcblx0bmdPbkluaXQoKSB7XHJcblx0XHR0aGlzLmZvcm0gPSBuZXcgRm9ybUdyb3VwKHt9KTtcclxuXHRcdGlmICghdGhpcy5sb2NhbGl0YSkge1xyXG5cdFx0XHR0aGlzLmluaXRMb2NhbGl0YSgpO1xyXG5cdFx0fVxyXG5cdFx0Y29uc3QgbG9jYWxpdGFQcm92aW5jaWEgPSBuZXcgRm9ybUNvbnRyb2woXHJcblx0XHRcdHsgdmFsdWU6IHRoaXMubG9jYWxpdGEucHJvdmluY2lhLCBkaXNhYmxlZDogdGhpcy52aWV3T25seSB9LCBjID0+IHtcclxuXHRcdFx0XHRpZiAodGhpcy52aWV3T25seSkgcmV0dXJuIHt9O1xyXG5cdFx0XHRcdHJldHVybiBTdHJpbmcoYy52YWx1ZSkudHJpbSgpLmxlbmd0aCA+IDBcclxuXHRcdFx0XHRcdD8ge31cclxuXHRcdFx0XHRcdDogeyByZXF1aXJlZDogdHJ1ZSB9O1xyXG5cdFx0XHR9XHJcblx0XHQpO1xyXG5cdFx0dGhpcy5mb3JtLmFkZENvbnRyb2woXCJsb2NhbGl0YVByb3ZpbmNpYVwiLCBsb2NhbGl0YVByb3ZpbmNpYSk7XHJcblxyXG5cdFx0Y29uc3QgbG9jYWxpdGFDb211bmUgPSBuZXcgRm9ybUNvbnRyb2woXHJcblx0XHRcdHsgdmFsdWU6IHRoaXMubG9jYWxpdGEuY29tdW5lLCBkaXNhYmxlZDogdGhpcy52aWV3T25seSB9LCBjID0+IHtcclxuXHRcdFx0XHRpZiAodGhpcy52aWV3T25seSkgcmV0dXJuIHt9O1xyXG5cdFx0XHRcdHJldHVybiBTdHJpbmcoYy52YWx1ZSkudHJpbSgpLmxlbmd0aCA+IDBcclxuXHRcdFx0XHRcdD8ge31cclxuXHRcdFx0XHRcdDogeyByZXF1aXJlZDogdHJ1ZSB9O1xyXG5cdFx0XHR9XHJcblx0XHQpO1xyXG5cdFx0dGhpcy5mb3JtLmFkZENvbnRyb2woXCJsb2NhbGl0YUNvbXVuZVwiLCBsb2NhbGl0YUNvbXVuZSk7XHJcblxyXG5cdFx0Ly8gaWYodGhpcy52aWV3Q2FwKSB7XHJcblx0XHRjb25zdCBsb2NhbGl0YUNhcCA9IG5ldyBGb3JtQ29udHJvbChcclxuXHRcdFx0eyB2YWx1ZTogdGhpcy5sb2NhbGl0YS5jYXAsIGRpc2FibGVkOiB0aGlzLnZpZXdPbmx5IH0sIGMgPT4ge1xyXG5cdFx0XHRcdGlmICh0aGlzLnZpZXdPbmx5KSByZXR1cm4ge307XHJcblx0XHRcdFx0cmV0dXJuIFN0cmluZyhjLnZhbHVlKS50cmltKCkubGVuZ3RoID4gMFxyXG5cdFx0XHRcdFx0PyB7fVxyXG5cdFx0XHRcdFx0OiB7IHJlcXVpcmVkOiB0cnVlIH07XHJcblx0XHRcdH1cclxuXHRcdCk7XHJcblx0XHR0aGlzLmZvcm0uYWRkQ29udHJvbChcImxvY2FsaXRhQ2FwXCIsIGxvY2FsaXRhQ2FwKTtcclxuXHRcdC8vIH1cclxuXHJcblx0XHR0aGlzLmNvbXVuaSQgPSBsb2NhbGl0YVByb3ZpbmNpYS52YWx1ZUNoYW5nZXMucGlwZShcclxuXHRcdFx0c3RhcnRXaXRoKHRoaXMubG9jYWxpdGEucHJvdmluY2lhKSxcclxuXHRcdFx0ZmlsdGVyKCh4KSA9PiB4KSxcclxuXHRcdFx0c3dpdGNoTWFwKCh2YWx1ZSkgPT4gdGhpcy50ZXJyaXRvcmlvLmdldENvbXVuaSQodmFsdWUpKSxcclxuXHRcdFx0c2hhcmVSZXBsYXkoKVxyXG5cdFx0KTtcclxuXHJcblx0XHR0aGlzLmNhcCQgPSBsb2NhbGl0YUNvbXVuZS52YWx1ZUNoYW5nZXMucGlwZShcclxuXHRcdFx0c3RhcnRXaXRoKHRoaXMubG9jYWxpdGEuY29tdW5lKSxcclxuXHRcdFx0ZmlsdGVyKChjb211bmU6IHN0cmluZykgPT4gY29tdW5lICE9IG51bGwpLFxyXG5cdFx0XHRzd2l0Y2hNYXAoKGNvZGljZUNhdGFzdGFsZTogc3RyaW5nKSA9PiB7XHJcblx0XHRcdFx0cmV0dXJuIHRoaXMuY29tdW5pJC5waXBlKFxyXG5cdFx0XHRcdFx0bWFwKChjb211bmkpID0+IGNvbXVuaS5maWx0ZXIoKGNvbXVuZSkgPT4gY29tdW5lLmNvZGljZUNhdGFzdGFsZSA9PT0gY29kaWNlQ2F0YXN0YWxlKSksXHJcblx0XHRcdFx0XHRmaWx0ZXIoKGNvbXVuaSkgPT4gY29tdW5pLmxlbmd0aCA+IDApLFxyXG5cdFx0XHRcdFx0bWFwKChjb211bmkpID0+IGNvbXVuaVswXSksXHJcblx0XHRcdFx0XHRzd2l0Y2hNYXAoY29tdW5lID0+IHRoaXMudGVycml0b3Jpby5nZXRDYXAkKGNvbXVuZS5jb2RpY2VJc3RhdCkpXHJcblx0XHRcdFx0KTtcclxuXHRcdFx0fSlcclxuXHRcdCk7XHJcblxyXG5cdFx0Y29uc3QgY2hhbmdlcyQgPSB0aGlzLmZvcm0udmFsdWVDaGFuZ2VzLnBpcGUoXHJcblx0XHRcdG1hcCgoXykgPT4ge1xyXG5cdFx0XHRcdGNvbnN0IGxvY2FsaXRhID0gbmV3IExvY2FsaXRhRFRPKCk7XHJcblx0XHRcdFx0Ly8gaWYodGhpcy52aWV3Q2FwKSB7XHJcblx0XHRcdFx0bG9jYWxpdGEuY2FwID0gdGhpcy5mb3JtLmNvbnRyb2xzW1wibG9jYWxpdGFDYXBcIl0udmFsdWU7XHJcblx0XHRcdFx0Ly8gfVxyXG5cdFx0XHRcdGxvY2FsaXRhLnByb3ZpbmNpYSA9IHRoaXMuZm9ybS5jb250cm9sc1tcImxvY2FsaXRhUHJvdmluY2lhXCJdLnZhbHVlO1xyXG5cdFx0XHRcdGxvY2FsaXRhLmNvbXVuZSA9IHRoaXMuZm9ybS5jb250cm9sc1tcImxvY2FsaXRhQ29tdW5lXCJdLnZhbHVlO1xyXG5cdFx0XHRcdHJldHVybiBDb21wb25lbnRPdXRwdXRTdGF0dXMub2YodGhpcy5mb3JtLnZhbGlkLCBsb2NhbGl0YSk7XHJcblx0XHRcdH0pXHJcblx0XHQpO1xyXG5cdFx0XHJcblxyXG5cdFx0dGhpcy5zdWJzY3JpcHRpb24gPSBjaGFuZ2VzJC5zdWJzY3JpYmUoKF8pID0+IHRoaXMuZG9uZS5lbWl0KF8pKTtcclxuXHJcblx0fVxyXG5cdGluaXRMb2NhbGl0YSgpIHtcclxuXHRcdHRoaXMubG9jYWxpdGEgPSBuZXcgTG9jYWxpdGFEVE8oKTtcclxuXHR9XHJcblxyXG5cdGNvbXBhcmVDb211bmkoYzE6IENvbXVuZURUTywgYzI6IENvbXVuZURUTykge1xyXG5cdFx0cmV0dXJuIGMxICYmIGMyID8gYzEuY29wID09PSBjMi5jb3AgOiBjMSA9PT0gYzI7XHJcblx0fVxyXG5cclxuXHRuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuXHRcdHRoaXMuc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XHJcblx0fVxyXG59XHJcbiJdfQ==