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.

153 lines 27.7 kB
import { Component, EventEmitter, Input, Output, ViewChild } from "@angular/core"; import { BehaviorSubject, combineLatest, of, ReplaySubject } from "rxjs"; import { FormGroup } from "@angular/forms"; import { PersonaFisicaDTO } from "../../models/persona-fisica-dto"; import { ComponentOutputStatus } from "../../normalizzazione/component-output-status"; import { DelegheService } from '../../services/deleghe-services/deleghe.service'; import { isNotNull } from "../../utils/fnutils"; import { auditTime, catchError, concatMap, map, startWith, tap } from "rxjs/operators"; const SAMPLE_TIME = 1000; const EMPTY_PF = { id: null, infoAnagrafiche: { codFiscale: null, codiceRegione: null, cognome: null, nome: null }, infoNascita: { comuneNascita: null, dataNascita: null, provinciaNascita: null, nazioneNascita: null, isNatoEstero: null, codCatNazioneNascita: null } }; export class PersonaFisicaComponent { constructor(delegheService) { this.delegheService = delegheService; this.done = new EventEmitter(); this.changesPF$ = new ReplaySubject(1); this.changesNascita$ = new ReplaySubject(1); this.readOnly = false; this.isPersonaFisicaValid = new BehaviorSubject(false); this.datiVerifica = {}; } ngOnInit() { this.form = new FormGroup({}); let valid = false; if (!this.infoPersonaFisica) { this.initPersonaFisica(); valid = false; } else { this.readOnly = true; } if (this.idDelega == null || this.nuovaPersona) { this.readOnly = false; } this.namespaceInfoPf = this.namespace + "infoPF"; this.namespaceInfoNascita = this.namespace + "infoNascita"; const mappaProvince$ = this.delegheService.getAllProvince(); this.personaFisicaChangedSub = combineLatest([this.changesPF$, this.changesNascita$, mappaProvince$]) .pipe(map(([validPF, changesNascita, allProvince]) => { var _a; let provincia = allProvince[(_a = changesNascita === null || changesNascita === void 0 ? void 0 : changesNascita.output) === null || _a === void 0 ? void 0 : _a.provinciaNascita]; return [validPF, changesNascita, provincia]; }), auditTime(SAMPLE_TIME), concatMap(([infoAnagrafiche, infoNascita, provincia]) => this.getPersonaFisicaValid(infoAnagrafiche, infoNascita, provincia)), startWith(ComponentOutputStatus.of(valid, this.infoPersonaFisica)), tap(pf => this.done.emit(pf))) .subscribe(); } getPersonaFisicaValid(infoAnagrafiche, infoNascita, provincia) { console.log("FORM VALIDITY", infoNascita.status); if (!infoNascita.status || !infoAnagrafiche.status) { this.isPersonaFisicaValid.next(false); return of(ComponentOutputStatus.of(false, EMPTY_PF)); } return this.validatePersonaFisica(infoAnagrafiche.output, infoNascita.output) .pipe(tap(() => this.isPersonaFisicaValid.next(true)), map((response) => { const isPersonaFisicaValid = isNotNull(response); return this.toValidPf(isPersonaFisicaValid, response, infoAnagrafiche.output, provincia, infoNascita); }), tap(({ isValid }) => this.isPersonaFisicaValid.next(isValid)), tap(({ persona }) => this.infoPersonaFisica = persona), map(v => ComponentOutputStatus.of(v.isValid, v.persona)), catchError(_ => of(ComponentOutputStatus.of(false, EMPTY_PF)))); } toValidPf(isPersonaFisicaValid, response, infoAnagrafiche, provincia, infoNascita) { var _a, _b; return { isValid: isPersonaFisicaValid, persona: { id: response === null || response === void 0 ? void 0 : response.id, infoAnagrafiche: { codFiscale: String(infoAnagrafiche.codFiscale), codiceRegione: String(provincia === null || provincia === void 0 ? void 0 : provincia.siglaReg), cognome: String(infoAnagrafiche.cognome), nome: String(infoAnagrafiche.nome) }, infoNascita: { comuneNascita: ((_a = infoNascita === null || infoNascita === void 0 ? void 0 : infoNascita.output) === null || _a === void 0 ? void 0 : _a.comuneNascita) ? String(infoNascita.output.comuneNascita) : null, dataNascita: infoNascita.output.dataNascita, provinciaNascita: String(infoNascita.output.provinciaNascita), nazioneNascita: String(infoNascita.output.nazioneNascita), codCatNazioneNascita: String(infoNascita.output.codCatNazioneNascita), isNatoEstero: ((_b = infoNascita.output) === null || _b === void 0 ? void 0 : _b.isNatoEstero) ? infoNascita.output.isNatoEstero : false } } }; } validatePersonaFisica(infoAnagrafiche, infoNascita) { // var d = new Date(infoNascita.dataNascita); // d.toLocaleString('it-IT', { timeZone: Intl.DateTimeFormat().resolvedOptions().timeZone }) return this.delegheService.getValidaPersonaFisica({ codiceFiscale: infoAnagrafiche.codFiscale, cognome: infoAnagrafiche.cognome, comune: (infoNascita === null || infoNascita === void 0 ? void 0 : infoNascita.isNatoEstero) ? null : infoNascita === null || infoNascita === void 0 ? void 0 : infoNascita.comuneNascita // , dataNascita: new Date(moment(infoNascita.dataNascita, 'DD/MM/YYYY').add(23, 'hour').add(59, 'minute').add(59, 'second').toDate()) , dataNascita: new Date(infoNascita.dataNascita).toISOString(), nome: infoAnagrafiche.nome, provinciaNascita: infoNascita.provinciaNascita, siglaNazione: infoNascita.nazioneNascita, codCatNazioneNascita: infoNascita === null || infoNascita === void 0 ? void 0 : infoNascita.codCatNazioneNascita }); } initPersonaFisica() { this.infoPersonaFisica = new PersonaFisicaDTO(); } infoPfReady(inFoPfStatus) { // console.log("[infoPfReady]", inFoPfStatus); this.changesPF$.next(inFoPfStatus); } infoNascitaReady(infoNascitaPf) { // console.log("[infoNascitaReady]", infoNascitaPf); this.changesNascita$.next(infoNascitaPf); } ngOnDestroy() { this.personaFisicaChangedSub.unsubscribe(); } resetForm() { this.infoPF._resetForm(); this.infoNascita._resetForm(); } } PersonaFisicaComponent.decorators = [ { type: Component, args: [{ selector: "lib-persona-fisica", template: "<form [formGroup]=\"form\">\r\n\t<lib-info-pf\r\n\t\t[cfDifferentFrom]=\"cfDifferentFrom\"\r\n\t\t[namespace]=\"namespaceInfoPf\"\r\n\t\t(done)=\"infoPfReady($event)\"\r\n\t\t[infopf]=\"infoPersonaFisica?.infoAnagrafiche\"\r\n\t\t[readOnly]=\"readOnly\"\r\n\t\t[validatorFormControl]=\"true\"\r\n\t\t#infoPF\r\n\t>\r\n\t</lib-info-pf>\r\n\t<lib-info-nascita\r\n\t\t[province]=\"province\"\r\n\t\t(done)=\"infoNascitaReady($event)\"\r\n\t\t[infonascita]=\"infoPersonaFisica?.infoNascita\"\r\n\t\t[readOnly]=\"readOnly\"\r\n\t\t#infoNascita\r\n\t>\r\n\t</lib-info-nascita>\r\n\t<div class=\"collapse-body mt-2\">\r\n\t\t<div class=\"col-md-12\">\r\n\t\t\t<mat-error *ngIf=\"!(isPersonaFisicaValid | async)\">\r\n\t\t\t\t{{'validationPF' | traduzione }}\r\n\t\t\t</mat-error>\r\n\t\t</div>\r\n\t</div>\r\n</form>\r\n", styles: [""] },] } ]; PersonaFisicaComponent.ctorParameters = () => [ { type: DelegheService } ]; PersonaFisicaComponent.propDecorators = { infoPersonaFisica: [{ type: Input }], cfDifferentFrom: [{ type: Input }], province: [{ type: Input }], nazioni: [{ type: Input }], namespace: [{ type: Input }], idDelega: [{ type: Input }], nuovaPersona: [{ type: Input }], done: [{ type: Output }], infoPF: [{ type: ViewChild, args: ['infoPF',] }], infoNascita: [{ type: ViewChild, args: ['infoNascita',] }] }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVyc29uYS1maXNpY2EuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IkQ6L1Byb2dldHRpL0RBRy9zb3JnZW50aS9naXRsYWItdGVybmkvY29tbW9uLWNvbXBvbmVudC1saWIvcHJvamVjdHMvcG9ydGFsLWNvbW1vbi1jb21wb25lbnQtbGliL3NyYy8iLCJzb3VyY2VzIjpbImxpYi9kZXBvc2l0aS9jb21tb24tY29tcG9uZW50L3BlcnNvbmEtZmlzaWNhL3BlcnNvbmEtZmlzaWNhLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ04sU0FBUyxFQUNULFlBQVksRUFDWixLQUFLLEVBR0wsTUFBTSxFQUNOLFNBQVMsRUFDVCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsZUFBZSxFQUFFLGFBQWEsRUFBcUIsRUFBRSxFQUFFLGFBQWEsRUFBeUIsTUFBTSxNQUFNLENBQUM7QUFDbkgsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ25FLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLCtDQUErQyxDQUFDO0FBS3RGLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxpREFBaUQsQ0FBQztBQUVqRixPQUFPLEVBQUUsU0FBUyxFQUF1QixNQUFNLHFCQUFxQixDQUFDO0FBQ3JFLE9BQU8sRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBVSxHQUFHLEVBQXFCLFNBQVMsRUFBYSxHQUFHLEVBQWtCLE1BQU0sZ0JBQWdCLENBQUM7QUFNN0ksTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDO0FBRXpCLE1BQU0sUUFBUSxHQUFxQjtJQUNsQyxFQUFFLEVBQUUsSUFBSTtJQUNSLGVBQWUsRUFBRTtRQUNoQixVQUFVLEVBQUUsSUFBSTtRQUNoQixhQUFhLEVBQUUsSUFBSTtRQUNuQixPQUFPLEVBQUUsSUFBSTtRQUNi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QztJQUVELFdBQVc7UUFDVixJQUFJLENBQUMsdUJBQXVCLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDNUMsQ0FBQztJQUVNLFNBQVM7UUFDZixJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxFQUFFLENBQUM7SUFDL0IsQ0FBQzs7O1lBbE1ELFNBQVMsU0FBQztnQkFDVixRQUFRLEVBQUUsb0JBQW9CO2dCQUM5Qix5ekJBQThDOzthQUU5Qzs7O1lBaENRLGNBQWM7OztnQ0FxQ3JCLEtBQUs7OEJBR0wsS0FBSzt1QkFHTCxLQUFLO3NCQUdMLEtBQUs7d0JBR0wsS0FBSzt1QkFHTCxLQUFLOzJCQUVMLEtBQUs7bUJBRUwsTUFBTTtxQkFvQk4sU0FBUyxTQUFDLFFBQVE7MEJBR2xCLFNBQVMsU0FBQyxhQUFhIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuXHRDb21wb25lbnQsXHJcblx0RXZlbnRFbWl0dGVyLFxyXG5cdElucHV0LFxyXG5cdE9uRGVzdHJveSxcclxuXHRPbkluaXQsXHJcblx0T3V0cHV0LFxyXG5cdFZpZXdDaGlsZFxyXG59IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgY29tYmluZUxhdGVzdCwgRU1QVFksIE9ic2VydmFibGUsIG9mLCBSZXBsYXlTdWJqZWN0LCBTdWJqZWN0LCBTdWJzY3JpcHRpb24gfSBmcm9tIFwicnhqc1wiO1xyXG5pbXBvcnQgeyBGb3JtR3JvdXAgfSBmcm9tIFwiQGFuZ3VsYXIvZm9ybXNcIjtcclxuaW1wb3J0IHsgUGVyc29uYUZpc2ljYURUTyB9IGZyb20gXCIuLi8uLi9tb2RlbHMvcGVyc29uYS1maXNpY2EtZHRvXCI7XHJcbmltcG9ydCB7IENvbXBvbmVudE91dHB1dFN0YXR1cyB9IGZyb20gXCIuLi8uLi9ub3JtYWxpenphemlvbmUvY29tcG9uZW50LW91dHB1dC1zdGF0dXNcIjtcclxuaW1wb3J0IHsgSW5mb0FuYWdyYWZpY2hlUEZEVE8gfSBmcm9tIFwiLi4vLi4vbW9kZWxzL2luZm8tYW5hZ3JhZmljaGUtcGZcIjtcclxuaW1wb3J0IHsgSW5mb05hc2NpdGFQRkRUTyB9IGZyb20gXCIuLi8uLi9tb2RlbHMvaW5mby1uYXNjaXRhLXBmLmR0b1wiO1xyXG5pbXBvcnQgeyBMb2NhbGl0YSB9IGZyb20gXCIuLi8uLi9tb2RlbHMvcG9ydGFsZS9sb2NhbGl0YVwiO1xyXG5pbXBvcnQgeyBOYXppb25lIH0gZnJvbSBcIi4uLy4uL21vZGVscy9wb3J0YWxlL25hemlvbmVcIjtcclxuaW1wb3J0IHsgRGVsZWdoZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9kZWxlZ2hlLXNlcnZpY2VzL2RlbGVnaGUuc2VydmljZSc7XHJcbmltcG9ydCB7IERhdGlWZXJpZmljYUNmRFRPIH0gZnJvbSBcIi4uLy4uL21vZGVscy9kYXRpLXZlcmlmY2EtZHRvXCI7XHJcbmltcG9ydCB7IGlzTm90TnVsbCwgaXNOb3RVbmRlZmluZWQsIG5vdCB9IGZyb20gXCIuLi8uLi91dGlscy9mbnV0aWxzXCI7XHJcbmltcG9ydCB7IGF1ZGl0VGltZSwgY2F0Y2hFcnJvciwgY29uY2F0TWFwLCBmaWx0ZXIsIG1hcCwgcGx1Y2ssIHNhbXBsZVRpbWUsIHN0YXJ0V2l0aCwgc3dpdGNoTWFwLCB0YXAsIHdpdGhMYXRlc3RGcm9tIH0gZnJvbSBcInJ4anMvb3BlcmF0b3JzXCI7XHJcbmltcG9ydCAqIGFzIG1vbWVudCBmcm9tIFwibW9tZW50XCI7XHJcbmltcG9ydCB7IFByb3ZpbmNpYUVzdGVzYURUTyB9IGZyb20gXCIuLi8uLi9tb2RlbHMvcHJvdmluY2lhRXN0ZXNhRFRPXCI7XHJcbmltcG9ydCB7IEluZm9QZkNvbXBvbmVudCB9IGZyb20gXCIuLi9pbmZvLXBmL2luZm8tcGYuY29tcG9uZW50XCI7XHJcbmltcG9ydCB7SW5mb05hc2NpdGFDb21wb25lbnR9IGZyb20gXCIuLi9pbmZvLW5hc2NpdGEvaW5mby1uYXNjaXRhLmNvbXBvbmVudFwiXHJcblxyXG5jb25zdCBTQU1QTEVfVElNRSA9IDEwMDA7XHJcblxyXG5jb25zdCBFTVBUWV9QRjogUGVyc29uYUZpc2ljYURUTyA9IHtcclxuXHRpZDogbnVsbCxcclxuXHRpbmZvQW5hZ3JhZmljaGU6IHtcclxuXHRcdGNvZEZpc2NhbGU6IG51bGwsXHJcblx0XHRjb2RpY2VSZWdpb25lOiBudWxsLFxyXG5cdFx0Y29nbm9tZTogbnVsbCxcclxuXHRcdG5vbWU6IG51bGxcclxuXHR9LFxyXG5cdGluZm9OYXNjaXRhOiB7XHJcblx0XHRjb211bmVOYXNjaXRhOiBudWxsLFxyXG5cdFx0ZGF0YU5hc2NpdGE6IG51bGwsXHJcblx0XHRwcm92aW5jaWFOYXNjaXRhOiBudWxsLFxyXG5cdFx0bmF6aW9uZU5hc2NpdGE6IG51bGwsXHJcblx0XHRpc05hdG9Fc3Rlcm86IG51bGwsXHJcblx0XHRjb2RDYXROYXppb25lTmFzY2l0YTogbnVsbFxyXG5cdH1cclxufTtcclxuQENvbXBvbmVudCh7XHJcblx0c2VsZWN0b3I6IFwibGliLXBlcnNvbmEtZmlzaWNhXCIsXHJcblx0dGVtcGxhdGVVcmw6IFwiLi9wZXJzb25hLWZpc2ljYS5jb21wb25lbnQuaHRtbFwiLFxyXG5cdHN0eWxlVXJsczogW1wiLi9wZXJzb25hLWZpc2ljYS5jb21wb25lbnQuY3NzXCJdLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgUGVyc29uYUZpc2ljYUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcclxuXHJcblx0Zm9ybTogRm9ybUdyb3VwO1xyXG5cclxuXHRASW5wdXQoKVxyXG5cdGluZm9QZXJzb25hRmlzaWNhOiBQZXJzb25hRmlzaWNhRFRPO1xyXG5cclxuXHRASW5wdXQoKVxyXG5cdGNmRGlmZmVyZW50RnJvbTogc3RyaW5nO1xyXG5cclxuXHRASW5wdXQoKVxyXG5cdHByb3ZpbmNlOiBPYnNlcnZhYmxlPEFycmF5PExvY2FsaXRhPj47XHJcblxyXG5cdEBJbnB1dCgpXHJcblx0bmF6aW9uaTogT2JzZXJ2YWJsZTxBcnJheTxOYXppb25lPj47XHJcblxyXG5cdEBJbnB1dCgpXHJcblx0bmFtZXNwYWNlOiBzdHJpbmc7XHJcblxyXG5cdEBJbnB1dCgpXHJcblx0aWREZWxlZ2E6IHN0cmluZztcclxuXHRASW5wdXQoKVxyXG5cdG51b3ZhUGVyc29uYTogYm9vbGVhbjtcclxuXHRAT3V0cHV0KClcclxuXHRkb25lOiBFdmVudEVtaXR0ZXI8XHJcblx0XHRDb21wb25lbnRPdXRwdXRTdGF0dXM8UGVyc29uYUZpc2ljYURUTz5cclxuXHQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxDb21wb25lbnRPdXRwdXRTdGF0dXM8UGVyc29uYUZpc2ljYURUTz4+KCk7XHJcblxyXG5cdGNoYW5nZXNQRiQgPSBuZXcgUmVwbGF5U3ViamVjdDxDb21wb25lbnRPdXRwdXRTdGF0dXM8SW5mb0FuYWdyYWZpY2hlUEZEVE8+PigxKTtcclxuXHJcblx0Y2hhbmdlc05hc2NpdGEkID0gbmV3IFJlcGxheVN1YmplY3Q8Q29tcG9uZW50T3V0cHV0U3RhdHVzPEluZm9OYXNjaXRhUEZEVE8+PigxKTtcclxuXHJcblx0bmFtZXNwYWNlSW5mb1BmOiBzdHJpbmc7XHJcblx0bmFtZXNwYWNlSW5mb05hc2NpdGE6IHN0cmluZztcclxuXHJcblx0cGVyc29uYUZpc2ljYUNoYW5nZWRTdWI6IFN1YnNjcmlwdGlvbjtcclxuXHJcblx0cmVhZE9ubHk6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcblx0aXNQZXJzb25hRmlzaWNhVmFsaWQ6IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPiA9IG5ldyBCZWhhdmlvclN1YmplY3QoZmFsc2UpO1xyXG5cclxuXHRkYXRpVmVyaWZpY2EgPSB7fSBhcyBEYXRpVmVyaWZpY2FDZkRUTztcclxuXHJcblx0QFZpZXdDaGlsZCgnaW5mb1BGJylcclxuXHRpbmZvUEY6IEluZm9QZkNvbXBvbmVudDtcclxuXHJcblx0QFZpZXdDaGlsZCgnaW5mb05hc2NpdGEnKVxyXG5cdGluZm9OYXNjaXRhOiBJbmZvTmFzY2l0YUNvbXBvbmVudDtcclxuXHJcblx0Y29uc3RydWN0b3IocHJpdmF0ZSBkZWxlZ2hlU2VydmljZTogRGVsZWdoZVNlcnZpY2UpIHsgfVxyXG5cclxuXHRuZ09uSW5pdCgpIHtcclxuXHJcblx0XHR0aGlzLmZvcm0gPSBuZXcgRm9ybUdyb3VwKHt9KTtcclxuXHRcdGxldCB2YWxpZDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cdFx0aWYgKCF0aGlzLmluZm9QZXJzb25hRmlzaWNhKSB7XHJcblx0XHRcdHRoaXMuaW5pdFBlcnNvbmFGaXNpY2EoKTtcclxuXHRcdFx0dmFsaWQgPSBmYWxzZTtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdHRoaXMucmVhZE9ubHkgPSB0cnVlO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmICh0aGlzLmlkRGVsZWdhID09IG51bGwgfHwgdGhpcy5udW92YVBlcnNvbmEpIHtcclxuXHRcdFx0dGhpcy5yZWFkT25seSA9IGZhbHNlO1xyXG5cdFx0fVxyXG5cclxuXHRcdHRoaXMubmFtZXNwYWNlSW5mb1BmID0gdGhpcy5uYW1lc3BhY2UgKyBcImluZm9QRlwiO1xyXG5cdFx0dGhpcy5uYW1lc3BhY2VJbmZvTmFzY2l0YSA9IHRoaXMubmFtZXNwYWNlICsgXCJpbmZvTmFzY2l0YVwiO1xyXG5cclxuXHRcdGNvbnN0IG1hcHBhUHJvdmluY2UkID0gdGhpcy5kZWxlZ2hlU2VydmljZS5nZXRBbGxQcm92aW5jZSgpO1xyXG5cclxuXHRcdHRoaXMucGVyc29uYUZpc2ljYUNoYW5nZWRTdWIgPSBjb21iaW5lTGF0ZXN0KFxyXG5cdFx0XHRbdGhpcy5jaGFuZ2VzUEYkLCB0aGlzLmNoYW5nZXNOYXNjaXRhJCwgbWFwcGFQcm92aW5jZSRdXHJcblx0XHQpXHJcblx0XHQucGlwZShcclxuXHRcdFx0bWFwKChbdmFsaWRQRiwgY2hhbmdlc05hc2NpdGEsIGFsbFByb3ZpbmNlXSkgPT4ge1xyXG5cdFx0XHRcdGxldCBwcm92aW5jaWEgPSBhbGxQcm92aW5jZVtjaGFuZ2VzTmFzY2l0YT8ub3V0cHV0Py5wcm92aW5jaWFOYXNjaXRhXTtcclxuXHRcdFx0XHRyZXR1cm4gW3ZhbGlkUEYsIGNoYW5nZXNOYXNjaXRhLCBwcm92aW5jaWFdXHJcblx0XHRcdH0pLFxyXG5cdFx0XHRhdWRpdFRpbWUoU0FNUExFX1RJTUUpLFxyXG5cdFx0XHRjb25jYXRNYXAoKFtpbmZvQW5hZ3JhZmljaGUsIGluZm9OYXNjaXRhLCBwcm92aW5jaWFdKSA9PlxyXG5cdFx0XHRcdHRoaXMuZ2V0UGVyc29uYUZpc2ljYVZhbGlkKGluZm9BbmFncmFmaWNoZSwgaW5mb05hc2NpdGEsIHByb3ZpbmNpYSlcclxuXHRcdFx0KSxcclxuXHRcdFx0c3RhcnRXaXRoKENvbXBvbmVudE91dHB1dFN0YXR1cy5vZih2YWxpZCwgdGhpcy5pbmZvUGVyc29uYUZpc2ljYSkpLFxyXG5cdFx0XHR0YXAocGYgPT4gdGhpcy5kb25lLmVtaXQocGYpKVxyXG5cdFx0KVxyXG5cdFx0LnN1YnNjcmliZSgpO1xyXG5cdH1cclxuXHJcblx0Z2V0UGVyc29uYUZpc2ljYVZhbGlkKFxyXG5cdFx0aW5mb0FuYWdyYWZpY2hlOiBDb21wb25lbnRPdXRwdXRTdGF0dXM8SW5mb0FuYWdyYWZpY2hlUEZEVE8+LFxyXG5cdFx0aW5mb05hc2NpdGE6IENvbXBvbmVudE91dHB1dFN0YXR1czxJbmZvTmFzY2l0YVBGRFRPPixcclxuXHRcdHByb3ZpbmNpYT86IFByb3ZpbmNpYUVzdGVzYURUT1xyXG5cdCkge1xyXG5cclxuXHRcdGNvbnNvbGUubG9nKFwiRk9STSBWQUxJRElUWVwiLCBpbmZvTmFzY2l0YS5zdGF0dXMpO1xyXG5cdFx0aWYgKCFpbmZvTmFzY2l0YS5zdGF0dXMgfHwgIWluZm9BbmFncmFmaWNoZS5zdGF0dXMpIHtcclxuXHRcdFxyXG5cdFx0XHR0aGlzLmlzUGVyc29uYUZpc2ljYVZhbGlkLm5leHQoZmFsc2UpO1xyXG5cdFx0XHRyZXR1cm4gb2YoQ29tcG9uZW50T3V0cHV0U3RhdHVzLm9mKGZhbHNlLCBFTVBUWV9QRikpO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiB0aGlzLnZhbGlkYXRlUGVyc29uYUZpc2ljYShpbmZvQW5hZ3JhZmljaGUub3V0cHV0LCBpbmZvTmFzY2l0YS5vdXRwdXQpXHJcblx0XHRcdC5waXBlKFxyXG5cdFx0XHRcdFxyXG5cdFx0XHRcdHRhcCgoKSA9PiB0aGlzLmlzUGVyc29uYUZpc2ljYVZhbGlkLm5leHQodHJ1ZSkpLFxyXG5cdFx0XHRcdG1hcCgocmVzcG9uc2U6IHsgaWQ6IHN0cmluZyB9IHwgbnVsbCkgPT4ge1xyXG5cdFx0XHRcdFx0Y29uc3QgaXNQZXJzb25hRmlzaWNhVmFsaWQgPSBpc05vdE51bGwocmVzcG9uc2UpO1xyXG5cdFx0XHRcdFx0cmV0dXJuIHRoaXMudG9WYWxpZFBmKGlzUGVyc29uYUZpc2ljYVZhbGlkLCByZXNwb25zZSwgaW5mb0FuYWdyYWZpY2hlLm91dHB1dCwgcHJvdmluY2lhLCBpbmZvTmFzY2l0YSlcclxuXHRcdFx0XHR9KSxcclxuXHRcdFx0XHR0YXAoKHsgaXNWYWxpZCB9KSA9PiB0aGlzLmlzUGVyc29uYUZpc2ljYVZhbGlkLm5leHQoaXNWYWxpZCkpLFxyXG5cdFx0XHRcdHRhcCgoeyBwZXJzb25hIH0pID0+IHRoaXMuaW5mb1BlcnNvbmFGaXNpY2EgPSBwZXJzb25hKSxcclxuXHRcdFx0XHRtYXAodiA9PiBDb21wb25lbnRPdXRwdXRTdGF0dXMub2Yodi5pc1ZhbGlkLCB2LnBlcnNvbmEpKSxcclxuXHRcdFx0XHRjYXRjaEVycm9yKF8gPT4gb2YoQ29tcG9uZW50T3V0cHV0U3RhdHVzLm9mKGZhbHNlLCBFTVBUWV9QRikpKVxyXG5cdFx0XHQpO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSB0b1ZhbGlkUGYoXHJcblx0XHRpc1BlcnNvbmFGaXNpY2FWYWxpZDogYm9vbGVhbiwgcmVzcG9uc2U6IHsgaWQ6IHN0cmluZzsgfSwgaW5mb0FuYWdyYWZpY2hlOiBJbmZvQW5hZ3JhZmljaGVQRkRUTywgXHJcblx0XHRwcm92aW5jaWE6IFByb3ZpbmNpYUVzdGVzYURUTywgXHJcblx0XHRpbmZvTmFzY2l0YTogQ29tcG9uZW50T3V0cHV0U3RhdHVzPEluZm9OYXNjaXRhUEZEVE8+KTogeyBpc1ZhbGlkOiBib29sZWFuOyBwZXJzb25hOiBQZXJzb25hRmlzaWNhRFRPOyB9IHtcclxuXHRcdFxyXG5cdFx0cmV0dXJuIHtcclxuXHRcdFx0aXNWYWxpZDogaXNQZXJzb25hRmlzaWNhVmFsaWQsXHJcblx0XHRcdHBlcnNvbmE6IHtcclxuXHRcdFx0XHRpZDogcmVzcG9uc2U/LmlkLFxyXG5cdFx0XHRcdGluZm9BbmFncmFmaWNoZToge1xyXG5cdFx0XHRcdFx0Y29kRmlzY2FsZTogU3RyaW5nKGluZm9BbmFncmFmaWNoZS5jb2RGaXNjYWxlKSxcclxuXHRcdFx0XHRcdGNvZGljZVJlZ2lvbmU6IFN0cmluZyhwcm92aW5jaWE/LnNpZ2xhUmVnKSxcclxuXHRcdFx0XHRcdGNvZ25vbWU6IFN0cmluZyhpbmZvQW5hZ3JhZmljaGUuY29nbm9tZSksXHJcblx0XHRcdFx0XHRub21lOiBTdHJpbmcoaW5mb0FuYWdyYWZpY2hlLm5vbWUpXHJcblx0XHRcdFx0fSxcclxuXHRcdFx0XHRpbmZvTmFzY2l0YToge1xyXG5cdFx0XHRcdFx0Y29tdW5lTmFzY2l0YTogaW5mb05hc2NpdGE/Lm91dHB1dD8uY29tdW5lTmFzY2l0YSA/IFN0cmluZyhpbmZvTmFzY2l0YS5vdXRwdXQuY29tdW5lTmFzY2l0YSkgOiBudWxsLFxyXG5cdFx0XHRcdFx0ZGF0YU5hc2NpdGE6IGluZm9OYXNjaXRhLm91dHB1dC5kYXRhTmFzY2l0YSxcclxuXHRcdFx0XHRcdHByb3ZpbmNpYU5hc2NpdGE6IFN0cmluZyhpbmZvTmFzY2l0YS5vdXRwdXQucHJvdmluY2lhTmFzY2l0YSksXHJcblx0XHRcdFx0XHRuYXppb25lTmFzY2l0YTogU3RyaW5nKGluZm9OYXNjaXRhLm91dHB1dC5uYXppb25lTmFzY2l0YSksXHJcblx0XHRcdFx0XHRjb2RDYXROYXppb25lTmFzY2l0YTogU3RyaW5nKGluZm9OYXNjaXRhLm91dHB1dC5jb2RDYXROYXppb25lTmFzY2l0YSksXHJcblx0XHRcdFx0XHRpc05hdG9Fc3Rlcm86IGluZm9OYXNjaXRhLm91dHB1dD8uaXNOYXRvRXN0ZXJvID8gaW5mb05hc2NpdGEub3V0cHV0LmlzTmF0b0VzdGVybyA6IGZhbHNlXHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9IGFzIFBlcnNvbmFGaXNpY2FEVE9cclxuXHRcdH07XHJcblx0fVxyXG5cclxuXHR2YWxpZGF0ZVBlcnNvbmFGaXNpY2EoXHJcblx0XHRpbmZvQW5hZ3JhZmljaGU6IEluZm9BbmFncmFmaWNoZVBGRFRPLFxyXG5cdFx0aW5mb05hc2NpdGE6IEluZm9OYXNjaXRhUEZEVE9cclxuXHQpIHtcclxuXHJcblx0XHQvLyB2YXIgZCA9IG5ldyBEYXRlKGluZm9OYXNjaXRhLmRhdGFOYXNjaXRhKTtcclxuXHRcdC8vIGQudG9Mb2NhbGVTdHJpbmcoJ2l0LUlUJywgeyB0aW1lWm9uZTogSW50bC5EYXRlVGltZUZvcm1hdCgpLnJlc29sdmVkT3B0aW9ucygpLnRpbWVab25lIH0pXHJcblx0XHRyZXR1cm4gdGhpcy5kZWxlZ2hlU2VydmljZS5nZXRWYWxpZGFQZXJzb25hRmlzaWNhKFxyXG5cdFx0XHR7XHJcblx0XHRcdFx0Y29kaWNlRmlzY2FsZTogaW5mb0FuYWdyYWZpY2hlLmNvZEZpc2NhbGVcclxuXHRcdFx0XHQsIGNvZ25vbWU6IGluZm9BbmFncmFmaWNoZS5jb2dub21lXHJcblx0XHRcdFx0LCBjb211bmU6IGluZm9OYXNjaXRhPy5pc05hdG9Fc3Rlcm8gPyBudWxsIDogaW5mb05hc2NpdGE/LmNvbXVuZU5hc2NpdGFcclxuXHRcdFx0XHQvLyAsIGRhdGFOYXNjaXRhOiBuZXcgRGF0ZShtb21lbnQoaW5mb05hc2NpdGEuZGF0YU5hc2NpdGEsICdERC9NTS9ZWVlZJykuYWRkKDIzLCAnaG91cicpLmFkZCg1OSwgJ21pbnV0ZScpLmFkZCg1OSwgJ3NlY29uZCcpLnRvRGF0ZSgpKVxyXG5cdFx0XHRcdCwgZGF0YU5hc2NpdGE6IG5ldyBEYXRlKGluZm9OYXNjaXRhLmRhdGFOYXNjaXRhKS50b0lTT1N0cmluZygpXHJcblx0XHRcdFx0LCBub21lOiBpbmZvQW5hZ3JhZmljaGUubm9tZVxyXG5cdFx0XHRcdCwgcHJvdmluY2lhTmFzY2l0YTogaW5mb05hc2NpdGEucHJvdmluY2lhTmFzY2l0YVxyXG5cdFx0XHRcdCwgc2lnbGFOYXppb25lOiBpbmZvTmFzY2l0YS5uYXppb25lTmFzY2l0YVxyXG5cdFx0XHRcdCwgY29kQ2F0TmF6aW9uZU5hc2NpdGE6IGluZm9OYXNjaXRhPy5jb2RDYXROYXppb25lTmFzY2l0YVxyXG5cdFx0XHR9IGFzIERhdGlWZXJpZmljYUNmRFRPXHJcblx0XHQpO1xyXG5cdH1cclxuXHJcblx0aW5pdFBlcnNvbmFGaXNpY2EoKSB7XHJcblx0XHR0aGlzLmluZm9QZXJzb25hRmlzaWNhID0gbmV3IFBlcnNvbmFGaXNpY2FEVE8oKTtcclxuXHR9XHJcblxyXG5cdGluZm9QZlJlYWR5KGluRm9QZlN0YXR1czogQ29tcG9uZW50T3V0cHV0U3RhdHVzPEluZm9BbmFncmFmaWNoZVBGRFRPPikge1xyXG5cdFx0Ly8gY29uc29sZS5sb2coXCJbaW5mb1BmUmVhZHldXCIsIGluRm9QZlN0YXR1cyk7XHJcblxyXG5cdFx0dGhpcy5jaGFuZ2VzUEYkLm5leHQoaW5Gb1BmU3RhdHVzKTtcclxuXHR9XHJcblxyXG5cdGluZm9OYXNjaXRhUmVhZHkoaW5mb05hc2NpdGFQZjogQ29tcG9uZW50T3V0cHV0U3RhdHVzPEluZm9OYXNjaXRhUEZEVE8+KSB7XHJcblx0XHQvLyBjb25zb2xlLmxvZyhcIltpbmZvTmFzY2l0YVJlYWR5XVwiLCBpbmZvTmFzY2l0YVBmKTtcclxuXHJcblx0XHR0aGlzLmNoYW5nZXNOYXNjaXRhJC5uZXh0KGluZm9OYXNjaXRhUGYpO1xyXG5cdH1cclxuXHJcblx0bmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcblx0XHR0aGlzLnBlcnNvbmFGaXNpY2FDaGFuZ2VkU3ViLnVuc3Vic2NyaWJlKCk7XHJcblx0fVxyXG5cclxuXHRwdWJsaWMgcmVzZXRGb3JtKCkge1xyXG5cdFx0dGhpcy5pbmZvUEYuX3Jlc2V0Rm9ybSgpO1xyXG5cdFx0dGhpcy5pbmZvTmFzY2l0YS5fcmVzZXRGb3JtKCk7XHJcblx0fVxyXG5cclxuXHJcbn1cclxuIl19