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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYWxpdGEuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IkQ6L1Byb2dldHRpL0RBRy9zb3JnZW50aS9naXRsYWItdGVybmkvY29tbW9uLWNvbXBvbmVudC1saWIvcHJvamVjdHMvcG9ydGFsLWNvbW1vbi1jb21wb25lbnQtbGliL3NyYy8iLCJzb3VyY2VzIjpbImxpYi9kZXBvc2l0aS9jb21tb24tY29tcG9uZW50L2xvY2FsaXRhL2xvY2FsaXRhLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ04sU0FBUyxFQUNULFlBQVksRUFDWixLQUFLLEVBR0wsTUFBTSxHQUNOLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFjLE1BQU0sZ0JBQWdCLENBQUM7QUFFcEUsT0FBTyxFQUNOLE1BQU0sRUFDTixHQUFHLEVBQ0gsV0FBVyxFQUNYLFNBQVMsRUFDVCxTQUFTLEdBQ1QsTUFBTSxnQkFBZ0IsQ0FBQztBQUV4QixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFHeEQsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sK0NBQStDLENBQUM7QUFDdEYsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ2hFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDhDQUE4QyxDQUFDO0FBT2pGLE1BQU0sT0FBTyxpQkFBaUI7SUFzQjdCLFlBQ1MsR0FBbUIsRUFDbkIsVUFBNkI7UUFEN0IsUUFBRyxHQUFILEdBQUcsQ0FBZ0I7UUFDbkIsZUFBVSxHQUFWLFVBQVUsQ0FBbUI7UUFWdEMsU0FBSSxHQUFxRCxJQUFJLFlBQVksRUFFdEUsQ0FBQztJQVNBLENBQUM7SUFFTCxRQUFRO1FBQ1AsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUM5QixJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUNu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QyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUVsRSxDQUFDO0lBQ0QsWUFBWTtRQUNYLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxXQUFXLEVBQUUsQ0FBQztJQUNuQyxDQUFDO0lBRUQsYUFBYSxDQUFDLEVBQWEsRUFBRSxFQUFhO1FBQ3pDLE9BQU8sRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDO0lBQ2pELENBQUM7SUFFRCxXQUFXO1FBQ1YsSUFBSSxDQUFDLFlBQVksQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUNqQyxDQUFDOzs7WUFuSEQsU0FBUyxTQUFDO2dCQUNWLFFBQVEsRUFBRSxjQUFjO2dCQUN4Qix5b0VBQXdDOzthQUV4Qzs7O1lBUFEsY0FBYztZQUNkLGlCQUFpQjs7O3VCQVd4QixLQUFLO3VCQUdMLEtBQUs7d0JBR0wsS0FBSzttQkFHTCxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuXHRDb21wb25lbnQsXHJcblx0RXZlbnRFbWl0dGVyLFxyXG5cdElucHV0LFxyXG5cdE9uRGVzdHJveSxcclxuXHRPbkluaXQsXHJcblx0T3V0cHV0LFxyXG59IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7IEZvcm1Db250cm9sLCBGb3JtR3JvdXAsIFZhbGlkYXRvcnMgfSBmcm9tIFwiQGFuZ3VsYXIvZm9ybXNcIjtcclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgU3Vic2NyaXB0aW9uIH0gZnJvbSBcInJ4anNcIjtcclxuaW1wb3J0IHtcclxuXHRmaWx0ZXIsXHJcblx0bWFwLFxyXG5cdHNoYXJlUmVwbGF5LFxyXG5cdHN0YXJ0V2l0aCxcclxuXHRzd2l0Y2hNYXAsXHJcbn0gZnJvbSBcInJ4anMvb3BlcmF0b3JzXCI7XHJcbmltcG9ydCB7IENvbXVuZURUTyB9IGZyb20gXCIuLi8uLi9tb2RlbHMvY29tdW5lLWR0b1wiO1xyXG5pbXBvcnQgeyBMb2NhbGl0YURUTyB9IGZyb20gXCIuLi8uLi9tb2RlbHMvbG9jYWxpdGEtZHRvXCI7XHJcbmltcG9ydCB7IENvbXVuZSB9IGZyb20gXCIuLi8uLi9tb2RlbHMvcG9ydGFsZS9jb211bmVcIjtcclxuaW1wb3J0IHsgTG9jYWxpdGEgfSBmcm9tIFwiLi4vLi4vbW9kZWxzL3BvcnRhbGUvbG9jYWxpdGFcIjtcclxuaW1wb3J0IHsgQ29tcG9uZW50T3V0cHV0U3RhdHVzIH0gZnJvbSBcIi4uLy4uL25vcm1hbGl6emF6aW9uZS9jb21wb25lbnQtb3V0cHV0LXN0YXR1c1wiO1xyXG5pbXBvcnQgeyBNZXNzYWdlU2VydmljZSB9IGZyb20gXCIuLi8uLi9zZXJ2aWNlcy9tZXNzYWdlLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgVGVycml0b3Jpb1NlcnZpY2UgfSBmcm9tIFwiLi4vLi4vc2VydmljZXMvdGVycml0b3Jpby90ZXJyaXRvcmlvLXNlcnZpY2VcIjtcclxuXHJcbkBDb21wb25lbnQoe1xyXG5cdHNlbGVjdG9yOiBcImxpYi1sb2NhbGl0YVwiLFxyXG5cdHRlbXBsYXRlVXJsOiBcIi4vbG9jYWxpdGEuY29tcG9uZW50Lmh0bWxcIixcclxuXHRzdHlsZVVybHM6IFtcIi4vbG9jYWxpdGEuY29tcG9uZW50LmNzc1wiXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIExvY2FsaXRhQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xyXG5cclxuXHRmb3JtOiBGb3JtR3JvdXA7XHJcblxyXG5cdEBJbnB1dCgpXHJcblx0dmlld09ubHk6IGJvb2xlYW47XHJcblxyXG5cdEBJbnB1dCgpXHJcblx0bG9jYWxpdGE6IExvY2FsaXRhRFRPO1xyXG5cclxuXHRASW5wdXQoKVxyXG5cdHByb3ZpbmNlJDogT2JzZXJ2YWJsZTxBcnJheTxMb2NhbGl0YT4+O1xyXG5cclxuXHRAT3V0cHV0KClcclxuXHRkb25lOiBFdmVudEVtaXR0ZXI8Q29tcG9uZW50T3V0cHV0U3RhdHVzPExvY2FsaXRhRFRPPj4gPSBuZXcgRXZlbnRFbWl0dGVyPFxyXG5cdFx0Q29tcG9uZW50T3V0cHV0U3RhdHVzPExvY2FsaXRhRFRPPlxyXG5cdD4oKTtcclxuXHJcblx0Y29tdW5pJDogT2JzZXJ2YWJsZTxBcnJheTxDb211bmU+PjtcclxuXHRjYXAkOiBPYnNlcnZhYmxlPEFycmF5PHN0cmluZz4+O1xyXG5cdHN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xyXG5cclxuXHRjb25zdHJ1Y3RvcihcclxuXHRcdHByaXZhdGUgbXNnOiBNZXNzYWdlU2VydmljZSxcclxuXHRcdHByaXZhdGUgdGVycml0b3JpbzogVGVycml0b3Jpb1NlcnZpY2VcclxuXHQpIHsgfVxyXG5cclxuXHRuZ09uSW5pdCgpIHtcclxuXHRcdHRoaXMuZm9ybSA9IG5ldyBGb3JtR3JvdXAoe30pO1xyXG5cdFx0aWYgKCF0aGlzLmxvY2FsaXRhKSB7XHJcblx0XHRcdHRoaXMuaW5pdExvY2FsaXRhKCk7XHJcblx0XHR9XHJcblx0XHRjb25zdCBsb2NhbGl0YVByb3ZpbmNpYSA9IG5ldyBGb3JtQ29udHJvbChcclxuXHRcdFx0eyB2YWx1ZTogdGhpcy5sb2NhbGl0YS5wcm92aW5jaWEsIGRpc2FibGVkOiB0aGlzLnZpZXdPbmx5IH0sIGMgPT4ge1xyXG5cdFx0XHRcdGlmICh0aGlzLnZpZXdPbmx5KSByZXR1cm4ge307XHJcblx0XHRcdFx0cmV0dXJuIFN0cmluZyhjLnZhbHVlKS50cmltKCkubGVuZ3RoID4gMFxyXG5cdFx0XHRcdFx0PyB7fVxyXG5cdFx0XHRcdFx0OiB7IHJlcXVpcmVkOiB0cnVlIH07XHJcblx0XHRcdH1cclxuXHRcdCk7XHJcblx0XHR0aGlzLmZvcm0uYWRkQ29udHJvbChcImxvY2FsaXRhUHJvdmluY2lhXCIsIGxvY2FsaXRhUHJvdmluY2lhKTtcclxuXHJcblx0XHRjb25zdCBsb2NhbGl0YUNvbXVuZSA9IG5ldyBGb3JtQ29udHJvbChcclxuXHRcdFx0eyB2YWx1ZTogdGhpcy5sb2NhbGl0YS5jb211bmUsIGRpc2FibGVkOiB0aGlzLnZpZXdPbmx5IH0sIGMgPT4ge1xyXG5cdFx0XHRcdGlmICh0aGlzLnZpZXdPbmx5KSByZXR1cm4ge307XHJcblx0XHRcdFx0cmV0dXJuIFN0cmluZyhjLnZhbHVlKS50cmltKCkubGVuZ3RoID4gMFxyXG5cdFx0XHRcdFx0PyB7fVxyXG5cdFx0XHRcdFx0OiB7IHJlcXVpcmVkOiB0cnVlIH07XHJcblx0XHRcdH1cclxuXHRcdCk7XHJcblx0XHR0aGlzLmZvcm0uYWRkQ29udHJvbChcImxvY2FsaXRhQ29tdW5lXCIsIGxvY2FsaXRhQ29tdW5lKTtcclxuXHJcblx0XHQvLyBpZih0aGlzLnZpZXdDYXApIHtcclxuXHRcdGNvbnN0IGxvY2FsaXRhQ2FwID0gbmV3IEZvcm1Db250cm9sKFxyXG5cdFx0XHR7IHZhbHVlOiB0aGlzLmxvY2FsaXRhLmNhcCwgZGlzYWJsZWQ6IHRoaXMudmlld09ubHkgfSwgYyA9PiB7XHJcblx0XHRcdFx0aWYgKHRoaXMudmlld09ubHkpIHJldHVybiB7fTtcclxuXHRcdFx0XHRyZXR1cm4gU3RyaW5nKGMudmFsdWUpLnRyaW0oKS5sZW5ndGggPiAwXHJcblx0XHRcdFx0XHQ/IHt9XHJcblx0XHRcdFx0XHQ6IHsgcmVxdWlyZWQ6IHRydWUgfTtcclxuXHRcdFx0fVxyXG5cdFx0KTtcclxuXHRcdHRoaXMuZm9ybS5hZGRDb250cm9sKFwibG9jYWxpdGFDYXBcIiwgbG9jYWxpdGFDYXApO1xyXG5cdFx0Ly8gfVxyXG5cclxuXHRcdHRoaXMuY29tdW5pJCA9IGxvY2FsaXRhUHJvdmluY2lhLnZhbHVlQ2hhbmdlcy5waXBlKFxyXG5cdFx0XHRzdGFydFdpdGgodGhpcy5sb2NhbGl0YS5wcm92aW5jaWEpLFxyXG5cdFx0XHRmaWx0ZXIoKHgpID0+IHgpLFxyXG5cdFx0XHRzd2l0Y2hNYXAoKHZhbHVlKSA9PiB0aGlzLnRlcnJpdG9yaW8uZ2V0Q29tdW5pJCh2YWx1ZSkpLFxyXG5cdFx0XHRzaGFyZVJlcGxheSgpXHJcblx0XHQpO1xyXG5cclxuXHRcdHRoaXMuY2FwJCA9IGxvY2FsaXRhQ29tdW5lLnZhbHVlQ2hhbmdlcy5waXBlKFxyXG5cdFx0XHRzdGFydFdpdGgodGhpcy5sb2NhbGl0YS5jb211bmUpLFxyXG5cdFx0XHRmaWx0ZXIoKGNvbXVuZTogc3RyaW5nKSA9PiBjb211bmUgIT0gbnVsbCksXHJcblx0XHRcdHN3aXRjaE1hcCgoY29kaWNlQ2F0YXN0YWxlOiBzdHJpbmcpID0+IHtcclxuXHRcdFx0XHRyZXR1cm4gdGhpcy5jb211bmkkLnBpcGUoXHJcblx0XHRcdFx0XHRtYXAoKGNvbXVuaSkgPT4gY29tdW5pLmZpbHRlcigoY29tdW5lKSA9PiBjb211bmUuY29kaWNlQ2F0YXN0YWxlID09PSBjb2RpY2VDYXRhc3RhbGUpKSxcclxuXHRcdFx0XHRcdGZpbHRlcigoY29tdW5pKSA9PiBjb211bmkubGVuZ3RoID4gMCksXHJcblx0XHRcdFx0XHRtYXAoKGNvbXVuaSkgPT4gY29tdW5pWzBdKSxcclxuXHRcdFx0XHRcdHN3aXRjaE1hcChjb211bmUgPT4gdGhpcy50ZXJyaXRvcmlvLmdldENhcCQoY29tdW5lLmNvZGljZUlzdGF0KSlcclxuXHRcdFx0XHQpO1xyXG5cdFx0XHR9KVxyXG5cdFx0KTtcclxuXHJcblx0XHRjb25zdCBjaGFuZ2VzJCA9IHRoaXMuZm9ybS52YWx1ZUNoYW5nZXMucGlwZShcclxuXHRcdFx0bWFwKChfKSA9PiB7XHJcblx0XHRcdFx0Y29uc3QgbG9jYWxpdGEgPSBuZXcgTG9jYWxpdGFEVE8oKTtcclxuXHRcdFx0XHQvLyBpZih0aGlzLnZpZXdDYXApIHtcclxuXHRcdFx0XHRsb2NhbGl0YS5jYXAgPSB0aGlzLmZvcm0uY29udHJvbHNbXCJsb2NhbGl0YUNhcFwiXS52YWx1ZTtcclxuXHRcdFx0XHQvLyB9XHJcblx0XHRcdFx0bG9jYWxpdGEucHJvdmluY2lhID0gdGhpcy5mb3JtLmNvbnRyb2xzW1wibG9jYWxpdGFQcm92aW5jaWFcIl0udmFsdWU7XHJcblx0XHRcdFx0bG9jYWxpdGEuY29tdW5lID0gdGhpcy5mb3JtLmNvbnRyb2xzW1wibG9jYWxpdGFDb211bmVcIl0udmFsdWU7XHJcblx0XHRcdFx0cmV0dXJuIENvbXBvbmVudE91dHB1dFN0YXR1cy5vZih0aGlzLmZvcm0udmFsaWQsIGxvY2FsaXRhKTtcclxuXHRcdFx0fSlcclxuXHRcdCk7XHJcblx0XHRcclxuXHJcblx0XHR0aGlzLnN1YnNjcmlwdGlvbiA9IGNoYW5nZXMkLnN1YnNjcmliZSgoXykgPT4gdGhpcy5kb25lLmVtaXQoXykpO1xyXG5cclxuXHR9XHJcblx0aW5pdExvY2FsaXRhKCkge1xyXG5cdFx0dGhpcy5sb2NhbGl0YSA9IG5ldyBMb2NhbGl0YURUTygpO1xyXG5cdH1cclxuXHJcblx0Y29tcGFyZUNvbXVuaShjMTogQ29tdW5lRFRPLCBjMjogQ29tdW5lRFRPKSB7XHJcblx0XHRyZXR1cm4gYzEgJiYgYzIgPyBjMS5jb3AgPT09IGMyLmNvcCA6IGMxID09PSBjMjtcclxuXHR9XHJcblxyXG5cdG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG5cdFx0dGhpcy5zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcclxuXHR9XHJcbn1cclxuIl19