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.

188 lines 27.7 kB
import { Component, EventEmitter, Input, Output, } from "@angular/core"; import { FormControl, FormGroup, Validators } from "@angular/forms"; import { map, startWith, } from "rxjs/operators"; // TODO // import { FormUtils } from "src/app/utils/form-utils"; import { InfoAnagrafichePFDTO } from "../../models/info-anagrafiche-pf"; import { ComponentOutputStatus } from "../../normalizzazione/component-output-status"; import { CodiceFiscaleService } from "../../services/codice-fiscale/codice-fiscale.service"; import { DelegheService } from "../../services/deleghe-services/deleghe.service"; import { MessageService } from "../../services/message.service"; import { ValidationService } from "../../services/validation.service"; export class InfoPfComponent { constructor(msg, validationService, cfService, delegheService) { this.msg = msg; this.validationService = validationService; this.cfService = cfService; this.delegheService = delegheService; this.readOnly = false; this.validatorFormControl = false; this.done = new EventEmitter(); this.codiceRegione = ""; } ngOnInit() { // console.log('[InfoAnagrafichePFDTO]', this.infopf); this.form = new FormGroup({}); if (this.resetForm) { this.subscription = this.resetForm.subscribe(val => val ? this.pulisciForm() : ""); } if (!this.infopf) { this.initInfoPf(); } const cfValidators = [ Validators.required, ValidationService.pattern(ValidationService.codiceFiscale, "cfInvalidoFormalmente"), ]; if (this.cfDifferentFrom != null) { cfValidators.push(ValidationService.NotEquals(this.cfDifferentFrom, "cfDifferentRichiedente")); } const codiceFiscale = new FormControl({ value: this.infopf.codFiscale, disabled: false }, // cfValidators // this.validatorFormControl ? cfValidators: Validators.nullValidator, [ this.validatorFormControl ? Validators.required : Validators.nullValidator, ValidationService.pattern(ValidationService.codiceFiscale, "cfInvalidoFormalmente"), ] //TODO // [this.validationService.userValidator(TipiPersona.PERSONA_FISICA)] ); this.form.addControl("codiceFiscale", codiceFiscale); const nome = new FormControl({ value: this.infopf.nome, disabled: false }, [ // Validators.required, // ValidationService.ValidateName, this.validatorFormControl ? Validators.required : Validators.nullValidator, ValidationService.pattern(ValidationService.formatoName, "formatoName") ]); this.form.addControl("nome", nome); const cognome = new FormControl({ value: this.infopf.cognome, disabled: false }, [ //Validators.required, //ValidationService.ValidateName this.validatorFormControl ? Validators.required : Validators.nullValidator, ValidationService.pattern(ValidationService.formatoName, "formatoName") ]); this.form.addControl("cognome", cognome); // TODO // this.validationSub = codiceFiscale.valueChanges.pipe( // filter(val => val.length == 16), // auditTime(500) // ) // .pipe( // tap((_) => { // if (codiceFiscale.errors) { // delete codiceFiscale.errors["invalidCF"]; // } // }), // filter((cf) => codiceFiscale.valid), // switchMap((cf) => // //TODO // // this.cfService // // .validaCodiceFiscale$(cf, "F") // // .pipe(catchError((err) => empty())) // this.delegheService.getPersonaFiscaleCodiceFiscale(cf) // .pipe( // //TODO // // catchError((err) => empty()) // catchError(err => { // codiceFiscale.setErrors({ invalidCF: true }); // return EMPTY; // }) // ) // ), // tap((validationResult) => { // console.log('[validationResult]', validationResult); // // if (!validationResult.valid) { // if (validationResult == null) { // codiceFiscale.setErrors({ invalidCF: true }); // } else { // if (validationResult.residenza != undefined) { // this.codiceRegione = validationResult?.residenza?.regione?.sigla; // } // } // this.form.updateValueAndValidity(); // }) // ) // .subscribe(); const changes$ = this.form.valueChanges.pipe(map((_) => { this.removeSpace(this.form.controls["codiceFiscale"].value); const pf = new InfoAnagrafichePFDTO(); pf.codFiscale = this.form.controls["codiceFiscale"].value; pf.nome = this.form.controls["nome"].value; pf.cognome = this.form.controls["cognome"].value; pf.codiceRegione = this.codiceRegione; return pf; }), startWith(this.infopf), map((pf) => { // console.log( // "pf form valid", // FormUtils.getFormValidationErrors(this.form) // ); const status = ComponentOutputStatus.of(!this.form.invalid || this.readOnly == true, pf); // console.log("status", status); return status; })); this.pfSub = changes$.subscribe((_) => this.done.emit(_)); if (this.readOnly) { this.form.disable(); } } removeSpace(value) { var reWhiteSpace = /\s/g; if (reWhiteSpace.test(value)) { this.form.get('codiceFiscale').setValue(value.replace(reWhiteSpace, '')); } } ngOnDestroy() { if (this.pfSub) { this.pfSub.unsubscribe(); } if (this.validationSub) { this.validationSub.unsubscribe(); } if (this.subscription) { this.subscription.unsubscribe(); } } initInfoPf() { const infoPfNew = new InfoAnagrafichePFDTO(); //TODO // if (this.userDetail) { // infoPfNew.codFiscale = this.userDetail["fiscalNumber"]; // infoPfNew.cognome = this.userDetail["familyName"]; // infoPfNew.nome = this.userDetail["name"]; // } this.infopf = infoPfNew; } pulisciForm() { const keys = Object.keys(this.form.value); keys.forEach(key => { const control = this.form.get(key); control.setValue(""); }); } _resetForm() { var _a; (_a = this.form) === null || _a === void 0 ? void 0 : _a.reset(); } } InfoPfComponent.decorators = [ { type: Component, args: [{ selector: "lib-info-pf", template: "<form [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<!-- <input matInput placeholder=\"{{'required' | traduzione}}{{'codice-fiscale' | traduzione}}\" -->\r\n\t\t\t\t<input matInput placeholder=\"{{validatorFormControl ? ('required' | traduzione): ''}} {{'codice-fiscale' | traduzione}}\"\r\n\t\t\t\t\tformControlName=\"codiceFiscale\" uppercase style=\"text-transform: uppercase\" maxlength=\"16\">\r\n\t\t\t\t<mat-error *ngIf=\"form.controls['codiceFiscale'].invalid\">\r\n\t\t\t\t\t{{msg.produceCFMessage(form.controls['codiceFiscale']) | traduzione }}\r\n\t\t\t\t</mat-error>\r\n\t\t\t\t<mat-hint *infoTip=\"'codice-fiscale'\"></mat-hint>\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<!-- <input matInput placeholder=\"{{'required' | traduzione}}{{'nome' | traduzione}}\" -->\r\n\t\t\t\t<input matInput placeholder=\"{{validatorFormControl ? ('required' | traduzione): ''}} {{'nome' | traduzione}}\"\r\n\t\t\t\t\tformControlName=\"nome\">\r\n\t\t\t\t<mat-error *ngIf=\"form.controls['nome'].invalid\">\r\n\t\t\t\t\t{{msg.produceMessage('obbligatorio',form.controls['nome']) | traduzione }}\r\n\t\t\t\t</mat-error>\r\n\t\t\t\t<mat-hint *infoTip=\"'nome'\"></mat-hint>\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<!-- <input matInput placeholder=\"{{'required' | traduzione}}{{'cognome' | traduzione}}\" -->\r\n\t\t\t\t<input matInput placeholder=\"{{validatorFormControl ? ('required' | traduzione): ''}} {{'cognome' | traduzione}}\"\r\n\t\t\t\t\tformControlName=\"cognome\">\r\n\t\t\t\t<mat-error *ngIf=\"form.controls['cognome'].invalid\">\r\n\t\t\t\t\t{{msg.produceMessage('obbligatorio',form.controls['cognome']) | traduzione }}\r\n\t\t\t\t</mat-error>\r\n\t\t\t\t<mat-hint *infoTip=\"'cognome'\"></mat-hint>\r\n\t\t\t</mat-form-field>\r\n\t\t</div>\r\n\t</div>\r\n</form>", styles: [""] },] } ]; InfoPfComponent.ctorParameters = () => [ { type: MessageService }, { type: ValidationService }, { type: CodiceFiscaleService }, { type: DelegheService } ]; InfoPfComponent.propDecorators = { infopf: [{ type: Input }], namespace: [{ type: Input }], cfDifferentFrom: [{ type: Input }], readOnly: [{ type: Input }], resetForm: [{ type: Input }], validatorFormControl: [{ type: Input }], done: [{ type: Output }] }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5mby1wZi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiQzovUHJvZ2V0dGkvREFHL3NvcmdlbnRpL2dpdGxhYi1zb2Z0d2FyZWZhY3RvcnkvY29tbW9uLWNvbXBvbmVudC1saWIvcHJvamVjdHMvcG9ydGFsLWNvbW1vbi1jb21wb25lbnQtbGliL3NyYy8iLCJzb3VyY2VzIjpbImxpYi9kZXBvc2l0aS9jb21tb24tY29tcG9uZW50L2luZm8tcGYvaW5mby1wZi5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNOLFNBQVMsRUFDVCxZQUFZLEVBQ1osS0FBSyxFQUdMLE1BQU0sR0FDTixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQW1CLFdBQVcsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFckYsT0FBTyxFQUVOLEdBQUcsRUFDSCxTQUFTLEdBS1QsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPO0FBQ1Asd0RBQXdEO0FBQ3hELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ3hFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLCtDQUErQyxDQUFDO0FBQ3RGLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHNEQUFzRCxDQUFDO0FBQzVGLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxpREFBaUQsQ0FBQztBQUNqRixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDaEUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFPdEUsTUFBTSxPQUFPLGVBQWU7SUFpQzNCLFlBQ1MsR0FBbUIsRUFDbkIsaUJBQW9DLEVBQ3BDLFNBQStCLEVBQy9CLGNBQThCO1FBSDlCLFFBQUcsR0FBSCxHQUFHLENBQWdCO1FBQ25CLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBbUI7UUFDcEMsY0FBUyxHQUFULFNBQVMsQ0FB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LEtBQUs7bUNBR0wsS0FBSzttQkFHTCxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuXHRDb21wb25lbnQsXHJcblx0RXZlbnRFbWl0dGVyLFxyXG5cdElucHV0LFxyXG5cdE9uRGVzdHJveSxcclxuXHRPbkluaXQsXHJcblx0T3V0cHV0LFxyXG59IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7IEFic3RyYWN0Q29udHJvbCwgRm9ybUNvbnRyb2wsIEZvcm1Hcm91cCwgVmFsaWRhdG9ycyB9IGZyb20gXCJAYW5ndWxhci9mb3Jtc1wiO1xyXG5pbXBvcnQgeyBtZXJnZSwgU3Vic2NyaXB0aW9uLCBlbXB0eSwgU3ViamVjdCwgRU1QVFkgfSBmcm9tIFwicnhqc1wiO1xyXG5pbXBvcnQge1xyXG5cdGZpbHRlcixcclxuXHRtYXAsXHJcblx0c3RhcnRXaXRoLFxyXG5cdHRhcCxcclxuXHRzd2l0Y2hNYXAsXHJcblx0Y2F0Y2hFcnJvcixcclxuXHRhdWRpdFRpbWUsXHJcbn0gZnJvbSBcInJ4anMvb3BlcmF0b3JzXCI7XHJcbi8vIFRPRE9cclxuLy8gaW1wb3J0IHsgRm9ybVV0aWxzIH0gZnJvbSBcInNyYy9hcHAvdXRpbHMvZm9ybS11dGlsc1wiO1xyXG5pbXBvcnQgeyBJbmZvQW5hZ3JhZmljaGVQRkRUTyB9IGZyb20gXCIuLi8uLi9tb2RlbHMvaW5mby1hbmFncmFmaWNoZS1wZlwiO1xyXG5pbXBvcnQgeyBDb21wb25lbnRPdXRwdXRTdGF0dXMgfSBmcm9tIFwiLi4vLi4vbm9ybWFsaXp6YXppb25lL2NvbXBvbmVudC1vdXRwdXQtc3RhdHVzXCI7XHJcbmltcG9ydCB7IENvZGljZUZpc2NhbGVTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL3NlcnZpY2VzL2NvZGljZS1maXNjYWxlL2NvZGljZS1maXNjYWxlLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgRGVsZWdoZVNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vc2VydmljZXMvZGVsZWdoZS1zZXJ2aWNlcy9kZWxlZ2hlLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgTWVzc2FnZVNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vc2VydmljZXMvbWVzc2FnZS5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IFZhbGlkYXRpb25TZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL3NlcnZpY2VzL3ZhbGlkYXRpb24uc2VydmljZVwiO1xyXG5cclxuQENvbXBvbmVudCh7XHJcblx0c2VsZWN0b3I6IFwibGliLWluZm8tcGZcIixcclxuXHR0ZW1wbGF0ZVVybDogXCIuL2luZm8tcGYuY29tcG9uZW50Lmh0bWxcIixcclxuXHRzdHlsZVVybHM6IFtcIi4vaW5mby1wZi5jb21wb25lbnQuY3NzXCJdLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgSW5mb1BmQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xyXG5cclxuXHRASW5wdXQoKVxyXG5cdGluZm9wZjogSW5mb0FuYWdyYWZpY2hlUEZEVE87XHJcblxyXG5cdEBJbnB1dCgpXHJcblx0bmFtZXNwYWNlOiBzdHJpbmc7XHJcblxyXG5cdEBJbnB1dCgpXHJcblx0Y2ZEaWZmZXJlbnRGcm9tOiBzdHJpbmc7XHJcblxyXG5cdEBJbnB1dCgpXHJcblx0cmVhZE9ubHk6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcblx0QElucHV0KClcclxuXHRyZXNldEZvcm06IFN1YmplY3Q8Ym9vbGVhbj47XHJcblxyXG5cdEBJbnB1dCgpXHJcblx0dmFsaWRhdG9yRm9ybUNvbnRyb2w6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcblx0QE91dHB1dCgpXHJcblx0ZG9uZTogRXZlbnRFbWl0dGVyPFxyXG5cdFx0Q29tcG9uZW50T3V0cHV0U3RhdHVzPEluZm9BbmFncmFmaWNoZVBGRFRPPlxyXG5cdD4gPSBuZXcgRXZlbnRFbWl0dGVyPENvbXBvbmVudE91dHB1dFN0YXR1czxJbmZvQW5hZ3JhZmljaGVQRkRUTz4+KCk7XHJcblxyXG5cdGZvcm06IEZvcm1Hcm91cDtcclxuXHRwZlN1YjogU3Vic2NyaXB0aW9uO1xyXG5cdHZhbGlkYXRpb25TdWI6IFN1YnNjcmlwdGlvbjtcclxuXHRzdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcclxuXHJcblx0Y29kaWNlUmVnaW9uZTogc3RyaW5nID0gXCJcIjtcclxuXHJcblxyXG5cdGNvbnN0cnVjdG9yKFxyXG5cdFx0cHJpdmF0ZSBtc2c6IE1lc3NhZ2VTZXJ2aWNlLFxyXG5cdFx0cHJpdmF0ZSB2YWxpZGF0aW9uU2VydmljZTogVmFsaWRhdGlvblNlcnZpY2UsXHJcblx0XHRwcml2YXRlIGNmU2VydmljZTogQ29kaWNlRmlzY2FsZVNlcnZpY2UsXHJcblx0XHRwcml2YXRlIGRlbGVnaGVTZXJ2aWNlOiBEZWxlZ2hlU2VydmljZVxyXG5cdCkgeyB9XHJcblxyXG5cdG5nT25Jbml0KCkge1xyXG5cclxuXHRcdC8vIGNvbnNvbGUubG9nKCdbSW5mb0FuYWdyYWZpY2hlUEZEVE9dJywgdGhpcy5pbmZvcGYpO1xyXG5cclxuXHRcdHRoaXMuZm9ybSA9IG5ldyBGb3JtR3JvdXAoe30pO1xyXG5cclxuXHRcdGlmICh0aGlzLnJlc2V0Rm9ybSkge1xyXG5cdFx0XHR0aGlzLnN1YnNjcmlwdGlvbiA9IHRoaXMucmVzZXRGb3JtLnN1YnNjcmliZSh2YWwgPT5cclxuXHRcdFx0XHR2YWwgPyB0aGlzLnB1bGlzY2lGb3JtKCkgOiBcIlwiKTtcclxuXHRcdH1cclxuXHJcblx0XHRpZiAoIXRoaXMuaW5mb3BmKSB7XHJcblx0XHRcdHRoaXMuaW5pdEluZm9QZigpO1xyXG5cdFx0fVxyXG5cclxuXHRcdGNvbnN0IGNmVmFsaWRhdG9ycyA9IFtcclxuXHRcdFx0VmFsaWRhdG9ycy5yZXF1aXJlZCxcclxuXHRcdFx0VmFsaWRhdGlvblNlcnZpY2UucGF0dGVybihcclxuXHRcdFx0XHRWYWxpZGF0aW9uU2VydmljZS5jb2RpY2VGaXNjYWxlLFxyXG5cdFx0XHRcdFwiY2ZJbnZhbGlkb0Zvcm1hbG1lbnRlXCJcclxuXHRcdFx0KSxcclxuXHRcdF07XHJcblxyXG5cdFx0aWYgKHRoaXMuY2ZEaWZmZXJlbnRGcm9tICE9IG51bGwpIHtcclxuXHRcdFx0Y2ZWYWxpZGF0b3JzLnB1c2goXHJcblx0XHRcdFx0VmFsaWRhdGlvblNlcnZpY2UuTm90RXF1YWxzKFxyXG5cdFx0XHRcdFx0dGhpcy5jZkRpZmZlcmVudEZyb20sXHJcblx0XHRcdFx0XHRcImNmRGlmZmVyZW50UmljaGllZGVudGVcIlxyXG5cdFx0XHRcdClcclxuXHRcdFx0KTtcclxuXHRcdH1cclxuXHJcblx0XHRjb25zdCBjb2RpY2VGaXNjYWxlID0gbmV3IEZvcm1Db250cm9sKFxyXG5cdFx0XHR7IHZhbHVlOiB0aGlzLmluZm9wZi5jb2RGaXNjYWxlLCBkaXNhYmxlZDogZmFsc2UgfSxcclxuXHRcdFx0Ly8gY2ZWYWxpZGF0b3JzXHJcblx0XHRcdC8vIHRoaXMudmFsaWRhdG9yRm9ybUNvbnRyb2wgPyBjZlZhbGlkYXRvcnM6IFZhbGlkYXRvcnMubnVsbFZhbGlkYXRvcixcclxuXHRcdFx0W1xyXG5cdFx0XHRcdHRoaXMudmFsaWRhdG9yRm9ybUNvbnRyb2wgPyBWYWxpZGF0b3JzLnJlcXVpcmVkIDogVmFsaWRhdG9ycy5udWxsVmFsaWRhdG9yLFxyXG5cdFx0XHRcdFZhbGlkYXRpb25TZXJ2aWNlLnBhdHRlcm4oXHJcblx0XHRcdFx0XHRWYWxpZGF0aW9uU2VydmljZS5jb2RpY2VGaXNjYWxlLFxyXG5cdFx0XHRcdFx0XCJjZkludmFsaWRvRm9ybWFsbWVudGVcIlxyXG5cdFx0XHRcdCksXHJcblx0XHRcdF1cclxuXHRcdFx0Ly9UT0RPXHJcblx0XHRcdC8vIFt0aGlzLnZhbGlkYXRpb25TZXJ2aWNlLnVzZXJWYWxpZGF0b3IoVGlwaVBlcnNvbmEuUEVSU09OQV9GSVNJQ0EpXVxyXG5cdFx0KTtcclxuXHJcblx0XHR0aGlzLmZvcm0uYWRkQ29udHJvbChcImNvZGljZUZpc2NhbGVcIiwgY29kaWNlRmlzY2FsZSk7XHJcblxyXG5cdFx0Y29uc3Qgbm9tZSA9IG5ldyBGb3JtQ29udHJvbCh7IHZhbHVlOiB0aGlzLmluZm9wZi5ub21lLCBkaXNhYmxlZDogZmFsc2UgfSxcclxuXHRcdFx0W1xyXG5cdFx0XHRcdC8vIFZhbGlkYXRvcnMucmVxdWlyZWQsXHJcblx0XHRcdFx0Ly9cdFZhbGlkYXRpb25TZXJ2aWNlLlZhbGlkYXRlTmFtZSxcclxuXHRcdFx0XHR0aGlzLnZhbGlkYXRvckZvcm1Db250cm9sID8gVmFsaWRhdG9ycy5yZXF1aXJlZCA6IFZhbGlkYXRvcnMubnVsbFZhbGlkYXRvcixcclxuXHRcdFx0XHRWYWxpZGF0aW9uU2VydmljZS5wYXR0ZXJuKFZhbGlkYXRpb25TZXJ2aWNlLmZvcm1hdG9OYW1lLCBcImZvcm1hdG9OYW1lXCIpXHJcblx0XHRcdF0pO1xyXG5cdFx0dGhpcy5mb3JtLmFkZENvbnRyb2woXCJub21lXCIsIG5vbWUpO1xyXG5cclxuXHRcdGNvbnN0IGNvZ25vbWUgPSBuZXcgRm9ybUNvbnRyb2woXHJcblx0XHRcdHsgdmFsdWU6IHRoaXMuaW5mb3BmLmNvZ25vbWUsIGRpc2FibGVkOiBmYWxzZSB9LFxyXG5cdFx0XHRbXHJcblx0XHRcdFx0Ly9WYWxpZGF0b3JzLnJlcXVpcmVkLFxyXG5cdFx0XHRcdC8vVmFsaWRhdGlvblNlcnZpY2UuVmFsaWRhdGVOYW1lXHJcblx0XHRcdFx0dGhpcy52YWxpZGF0b3JGb3JtQ29udHJvbCA/IFZhbGlkYXRvcnMucmVxdWlyZWQgOiBWYWxpZGF0b3JzLm51bGxWYWxpZGF0b3IsXHJcblx0XHRcdFx0VmFsaWRhdGlvblNlcnZpY2UucGF0dGVybihWYWxpZGF0aW9uU2VydmljZS5mb3JtYXRvTmFtZSwgXCJmb3JtYXRvTmFtZVwiKVxyXG5cdFx0XHRdKTtcclxuXHRcdHRoaXMuZm9ybS5hZGRDb250cm9sKFwiY29nbm9tZVwiLCBjb2dub21lKTtcclxuXHJcblx0XHQvLyBUT0RPXHJcblx0XHQvLyB0aGlzLnZhbGlkYXRpb25TdWIgPSBjb2RpY2VGaXNjYWxlLnZhbHVlQ2hhbmdlcy5waXBlKFxyXG5cdFx0Ly8gXHRmaWx0ZXIodmFsID0+IHZhbC5sZW5ndGggPT0gMTYpLFxyXG5cdFx0Ly8gXHRhdWRpdFRpbWUoNTAwKVxyXG5cdFx0Ly8gKVxyXG5cdFx0Ly8gXHQucGlwZShcclxuXHRcdC8vIFx0XHR0YXAoKF8pID0+IHtcclxuXHRcdC8vIFx0XHRcdGlmIChjb2RpY2VGaXNjYWxlLmVycm9ycykge1xyXG5cdFx0Ly8gXHRcdFx0XHRkZWxldGUgY29kaWNlRmlzY2FsZS5lcnJvcnNbXCJpbnZhbGlkQ0ZcIl07XHJcblx0XHQvLyBcdFx0XHR9XHJcblx0XHQvLyBcdFx0fSksXHJcblx0XHQvLyBcdFx0ZmlsdGVyKChjZikgPT4gY29kaWNlRmlzY2FsZS52YWxpZCksXHJcblx0XHQvLyBcdFx0c3dpdGNoTWFwKChjZikgPT5cclxuXHRcdC8vIFx0XHRcdC8vVE9ET1xyXG5cdFx0Ly8gXHRcdFx0Ly8gdGhpcy5jZlNlcnZpY2VcclxuXHRcdC8vIFx0XHRcdC8vIFx0LnZhbGlkYUNvZGljZUZpc2NhbGUkKGNmLCBcIkZcIilcclxuXHRcdC8vIFx0XHRcdC8vIFx0LnBpcGUoY2F0Y2hFcnJvcigoZXJyKSA9PiBlbXB0eSgpKSlcclxuXHRcdC8vIFx0XHRcdHRoaXMuZGVsZWdoZVNlcnZpY2UuZ2V0UGVyc29uYUZpc2NhbGVDb2RpY2VGaXNjYWxlKGNmKVxyXG5cdFx0Ly8gXHRcdFx0XHQucGlwZShcclxuXHRcdC8vIFx0XHRcdFx0XHQvL1RPRE9cclxuXHRcdC8vIFx0XHRcdFx0XHQvLyBjYXRjaEVycm9yKChlcnIpID0+IGVtcHR5KCkpXHJcblx0XHQvLyBcdFx0XHRcdFx0Y2F0Y2hFcnJvcihlcnIgPT4ge1xyXG5cdFx0Ly8gXHRcdFx0XHRcdFx0Y29kaWNlRmlzY2FsZS5zZXRFcnJvcnMoeyBpbnZhbGlkQ0Y6IHRydWUgfSk7XHJcblx0XHQvLyBcdFx0XHRcdFx0XHRyZXR1cm4gRU1QVFk7XHJcblx0XHQvLyBcdFx0XHRcdFx0fSlcclxuXHRcdC8vIFx0XHRcdFx0KVxyXG5cdFx0Ly8gXHRcdCksXHJcblx0XHQvLyBcdFx0dGFwKCh2YWxpZGF0aW9uUmVzdWx0KSA9PiB7XHJcblx0XHQvLyBcdFx0XHRjb25zb2xlLmxvZygnW3ZhbGlkYXRpb25SZXN1bHRdJywgdmFsaWRhdGlvblJlc3VsdCk7XHJcblx0XHQvLyBcdFx0XHQvLyBpZiAoIXZhbGlkYXRpb25SZXN1bHQudmFsaWQpIHtcclxuXHRcdC8vIFx0XHRcdGlmICh2YWxpZGF0aW9uUmVzdWx0ID09IG51bGwpIHtcclxuXHRcdC8vIFx0XHRcdFx0Y29kaWNlRmlzY2FsZS5zZXRFcnJvcnMoeyBpbnZhbGlkQ0Y6IHRydWUgfSk7XHJcblx0XHQvLyBcdFx0XHR9IGVsc2Uge1xyXG5cdFx0Ly8gXHRcdFx0XHRpZiAodmFsaWRhdGlvblJlc3VsdC5yZXNpZGVuemEgIT0gdW5kZWZpbmVkKSB7XHJcblx0XHQvLyBcdFx0XHRcdFx0dGhpcy5jb2RpY2VSZWdpb25lID0gdmFsaWRhdGlvblJlc3VsdD8ucmVzaWRlbnphPy5yZWdpb25lPy5zaWdsYTtcclxuXHRcdC8vIFx0XHRcdFx0fVxyXG5cdFx0Ly8gXHRcdFx0fVxyXG5cdFx0Ly8gXHRcdFx0dGhpcy5mb3JtLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcclxuXHRcdC8vIFx0XHR9KVxyXG5cdFx0Ly8gXHQpXHJcblx0XHQvLyBcdC5zdWJzY3JpYmUoKTtcclxuXHJcblx0XHRjb25zdCBjaGFuZ2VzJCA9IHRoaXMuZm9ybS52YWx1ZUNoYW5nZXMucGlwZShcclxuXHRcdFx0bWFwKChfKSA9PiB7XHJcblx0XHRcdFx0dGhpcy5yZW1vdmVTcGFjZSh0aGlzLmZvcm0uY29udHJvbHNbXCJjb2RpY2VGaXNjYWxlXCJdLnZhbHVlKTtcclxuXHRcdFx0XHRjb25zdCBwZiA9IG5ldyBJbmZvQW5hZ3JhZmljaGVQRkRUTygpO1xyXG5cdFx0XHRcdHBmLmNvZEZpc2NhbGUgPSB0aGlzLmZvcm0uY29udHJvbHNbXCJjb2RpY2VGaXNjYWxlXCJdLnZhbHVlO1xyXG5cdFx0XHRcdHBmLm5vbWUgPSB0aGlzLmZvcm0uY29udHJvbHNbXCJub21lXCJdLnZhbHVlO1xyXG5cdFx0XHRcdHBmLmNvZ25vbWUgPSB0aGlzLmZvcm0uY29udHJvbHNbXCJjb2dub21lXCJdLnZhbHVlO1xyXG5cdFx0XHRcdHBmLmNvZGljZVJlZ2lvbmUgPSB0aGlzLmNvZGljZVJlZ2lvbmU7XHJcblx0XHRcdFx0cmV0dXJuIHBmO1xyXG5cdFx0XHR9KSxcclxuXHRcdFx0c3RhcnRXaXRoKHRoaXMuaW5mb3BmKSxcclxuXHRcdFx0bWFwKChwZikgPT4ge1xyXG5cdFx0XHRcdC8vIGNvbnNvbGUubG9nKFxyXG5cdFx0XHRcdC8vIFx0XCJwZiBmb3JtIHZhbGlkXCIsXHJcblx0XHRcdFx0Ly8gXHRGb3JtVXRpbHMuZ2V0Rm9ybVZhbGlkYXRpb25FcnJvcnModGhpcy5mb3JtKVxyXG5cdFx0XHRcdC8vICk7XHJcblxyXG5cdFx0XHRcdGNvbnN0IHN0YXR1cyA9IENvbXBvbmVudE91dHB1dFN0YXR1cy5vZihcclxuXHRcdFx0XHRcdCF0aGlzLmZvcm0uaW52YWxpZCB8fCB0aGlzLnJlYWRPbmx5ID09IHRydWUsXHJcblx0XHRcdFx0XHRwZlxyXG5cdFx0XHRcdCk7XHJcblx0XHRcdFx0Ly8gY29uc29sZS5sb2coXCJzdGF0dXNcIiwgc3RhdHVzKTtcclxuXHRcdFx0XHRyZXR1cm4gc3RhdHVzO1xyXG5cdFx0XHR9KVxyXG5cdFx0KTtcclxuXHJcblx0XHR0aGlzLnBmU3ViID0gY2hhbmdlcyQuc3Vic2NyaWJlKChfKSA9PiB0aGlzLmRvbmUuZW1pdChfKSk7XHJcblxyXG5cdFx0aWYgKHRoaXMucmVhZE9ubHkpIHtcclxuXHRcdFx0dGhpcy5mb3JtLmRpc2FibGUoKTtcclxuXHRcdH1cclxuXHR9XHJcblx0cmVtb3ZlU3BhY2UodmFsdWU6IHN0cmluZykge1xyXG5cdFx0dmFyIHJlV2hpdGVTcGFjZSA9IC9cXHMvZztcclxuXHRcdGlmIChyZVdoaXRlU3BhY2UudGVzdCh2YWx1ZSkpIHtcclxuXHRcdFx0dGhpcy5mb3JtLmdldCgnY29kaWNlRmlzY2FsZScpLnNldFZhbHVlKHZhbHVlLnJlcGxhY2UocmVXaGl0ZVNwYWNlLCAnJykpOyBcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG5cdFx0aWYgKHRoaXMucGZTdWIpIHtcclxuXHRcdFx0dGhpcy5wZlN1Yi51bnN1YnNjcmliZSgpO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmICh0aGlzLnZhbGlkYXRpb25TdWIpIHtcclxuXHRcdFx0dGhpcy52YWxpZGF0aW9uU3ViLnVuc3Vic2NyaWJlKCk7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKHRoaXMuc3Vic2NyaXB0aW9uKSB7XHJcblx0XHRcdHRoaXMuc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRpbml0SW5mb1BmKCkge1xyXG5cdFx0Y29uc3QgaW5mb1BmTmV3ID0gbmV3IEluZm9BbmFncmFmaWNoZVBGRFRPKCk7XHJcblx0XHQvL1RPRE9cclxuXHRcdC8vIGlmICh0aGlzLnVzZXJEZXRhaWwpIHtcclxuXHRcdC8vIFx0aW5mb1BmTmV3LmNvZEZpc2NhbGUgPSB0aGlzLnVzZXJEZXRhaWxbXCJmaXNjYWxOdW1iZXJcIl07XHJcblx0XHQvLyBcdGluZm9QZk5ldy5jb2dub21lID0gdGhpcy51c2VyRGV0YWlsW1wiZmFtaWx5TmFtZVwiXTtcclxuXHRcdC8vIFx0aW5mb1BmTmV3Lm5vbWUgPSB0aGlzLnVzZXJEZXRhaWxbXCJuYW1lXCJdO1xyXG5cdFx0Ly8gfVxyXG5cdFx0dGhpcy5pbmZvcGYgPSBpbmZvUGZOZXc7XHJcblx0fVxyXG5cclxuXHRwdWxpc2NpRm9ybSgpIHtcclxuXHRcdGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyh0aGlzLmZvcm0udmFsdWUpO1xyXG5cdFx0a2V5cy5mb3JFYWNoKGtleSA9PiB7XHJcblx0XHRcdGNvbnN0IGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCA9IHRoaXMuZm9ybS5nZXQoa2V5KTtcclxuXHRcdFx0Y29udHJvbC5zZXRWYWx1ZShcIlwiKTtcclxuXHRcdH0pO1xyXG5cdH1cclxuXHJcblx0cHVibGljIF9yZXNldEZvcm0oKSB7XHJcblx0XHR0aGlzLmZvcm0/LnJlc2V0KCk7XHJcblx0fVxyXG59Il19