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.

185 lines 31.9 kB
import { ChangeDetectorRef, Component, EventEmitter, Input, Output } from '@angular/core'; import { FormControl, FormGroup } from '@angular/forms'; import { of } from 'rxjs'; import { map, startWith } from 'rxjs/operators'; import { DatiDepositoGiudiziarioDTO } from '../../models/dati-deposito-giudiziario-dto'; import { ComponentOutputStatus } from '../../normalizzazione/component-output-status'; import { DelegheService } from '../../services/deleghe-services/deleghe.service'; import { MessageService } from '../../services/message.service'; export class DatiDeposito { constructor(msg, _ref, delegheService) { this.msg = msg; this._ref = _ref; this.delegheService = delegheService; this.rst_mock = [ { "codiceFiscale": "TR", "codiceOrdinante": "Terni", "dataFine": new Date('10/06/2025'), "dataInizio": new Date('10/06/2025'), "denominazioneRTS": "RTS 1", "provinceCompetenza": ["TR"] }, { "codiceFiscale": "RM", "codiceOrdinante": "Roma", "dataFine": new Date('10/06/2025'), "dataInizio": new Date('10/06/2025'), "denominazioneRTS": "RTS 1", "provinceCompetenza": ["TR"] }, { "codiceFiscale": "MI", "codiceOrdinante": "Milano", "dataFine": new Date('10/06/2025'), "dataInizio": new Date('10/06/2025'), "denominazioneRTS": "RTS 1", "provinceCompetenza": ["TR"] } ]; //TODO // DatiDepositoDTO // DatiDepositoGiudiziarioDTO // DatiDepositoNoEsproprioDTO this.datiDeposito = {}; this.visibilityMask = {}; this.nextStep = new EventEmitter(); this.previousStep = new EventEmitter(); this.salvaBozza = new EventEmitter(); this.direction = "both-ways"; this.isFinal = false; } isImportoFormatoValidoOLD(valoreImporto) { return /^(?:[0-9]+|(?:[0-9]{1,3}\.?)+)(?:,[0-9]{1,2})?€?$/ .test(valoreImporto); 42; } currencyToNumber(s) { return Number(s.replace(/\./g, '').replace(',', '.') || undefined); } isImportoFormatoValido(valoreImporto) { return /^(?:0|[1-9](?:[0-9]{0,2}\.[0-9]{3}(?:\.[0-9]{3})*|[0-9]*))(?:,[0-9]{2,2})€?$/ .test(valoreImporto); } ngAfterViewInit() { this._ref.detectChanges(); } ngOnInit() { this.form = new FormGroup({ 'causale': new FormControl({ value: '', disabled: !this.visibilityMask.causale }, c => { if (!this.visibilityMask.causale) return {}; return String(c.value || '').length > 0 ? {} : { 'required': 'Il campo è obbligatorio.' }; }), 'importo': new FormControl({ value: '', disabled: !this.visibilityMask.importo }, c => { if (!this.visibilityMask.importo) return {}; // return this.isImportoFormatoValido(c.value) return this.isImportoFormatoValido(c.value) ? {} : { 'pattern': 'Formato non valido' }; }), 'rts-inoltro': new FormControl({ value: '', disabled: !this.visibilityMask.codiceRtsInoltro }, c => { if (!this.visibilityMask.codiceRtsInoltro) return {}; return String(c.value || '').length > 0 ? {} : { 'required': 'Il campo è obbligatorio.' }; }), 'nota': new FormControl({ value: '', disabled: !this.visibilityMask.nota }, c => { if (!this.visibilityMask.nota) return {}; // return String(c.value).trim().length > 0 // ? {} // : { 'required': 'Il campo è obbligatorio.' }; }) }); let valid = true; if (!this.datiDeposito) { this.initDatiDeposito(); valid = false; } this._rts = this.rst_mock; this.listaRts$ = of(this.rst_mock); this.rts$ = of(this.rst_mock); // this.listaRts$.subscribe( // (rts) => { // console.log('[listaRts$]', rts); // if (rts != null) { // this.rts$ = this.delegheService.getListRtsCodiceRegione(rts); // this.rts$.subscribe(_rts => { // this._rts = _rts; // //console.log("_rts" + JSON.stringify(this._rts)) // }); // } // } // ); this.form.controls['causale'].setValue(this.datiDeposito.causale); this.form.controls['importo'].setValue(this.datiDeposito.importo); this.form.controls['rts-inoltro'].setValue(this.datiDeposito.codiceRtsInoltro); this.form.controls['nota'].setValue(this.datiDeposito.nota); const changes$ = this.form.valueChanges.pipe(map(_ => { var _a; const dati = new DatiDepositoGiudiziarioDTO(); dati.causale = this.form.controls['causale'].value; if (this.form.controls['importo'].value != undefined) { dati.importo = this.currencyToNumber(this.form.controls['importo'].value); } dati.codiceRtsInoltro = this.form.controls['rts-inoltro'].value; if ((dati === null || dati === void 0 ? void 0 : dati.codiceRtsInoltro) && (this === null || this === void 0 ? void 0 : this._rts)) { dati.denominazioneRTS = (_a = this._rts.find(x => x.codiceFiscale == (dati === null || dati === void 0 ? void 0 : dati.codiceRtsInoltro))) === null || _a === void 0 ? void 0 : _a.denominazioneRTS; } dati.nota = this.form.controls['nota'].value; this.datiDeposito = dati; // console.log("[dati]", this.form); return ComponentOutputStatus.of(this.form.valid, this.datiDeposito); }), startWith(ComponentOutputStatus.of(valid, this.datiDeposito))); this.subscription = changes$.subscribe(newDati => console.log('[DatiDepositoComponent] datiSpecificiDeposito', newDati)); } forward($event) { this.nextStep.emit(this.datiDeposito); } backward($event) { this.previousStep.emit(this.datiDeposito); } onSalvaBozza($event) { this.salvaBozza.emit(this.datiDeposito); } complete($event) { } isFormValid() { return this.form.valid; } initDatiDeposito() { //TODO //this.datiDeposito = new DatiDepositoDTO() as T; this.datiDeposito = new DatiDepositoGiudiziarioDTO(); } ngOnDestroy() { if (this.subscription) { this.subscription.unsubscribe(); } } } DatiDeposito.decorators = [ { type: Component, args: [{ selector: 'lib-dati-deposito', template: "<div class=\"mt-3 mb-5\">\r\n\t\t<mat-expansion-panel class=\"panel\" [expanded]=\"true\">\r\n\t\t\t<mat-expansion-panel-header [collapsedHeight]=\"'48px'\" [expandedHeight]=\"'48px'\" class=\"custom-header\">\r\n\t\t\t\t<mat-panel-title>\r\n\t\t\t\t\t<h3 class=\"h5 mb-0\"><info-tip-label label=\"dati-deposito\"></info-tip-label></h3>\r\n\t\t\t\t</mat-panel-title>\r\n\t\t\t</mat-expansion-panel-header>\r\n\t\t\t<form [formGroup]=\"form\">\r\n\t\t\t\t<div class=\"collapse-body mt-2\">\r\n\t\t\t\t\t<div class=\"row\" *ngIf=\"visibilityMask.causale\">\r\n\t\t\t\t\t\t<div class=\"col-md-12\">\r\n\t\t\t\t\t\t\t<mat-form-field>\r\n\t\t\t\t\t\t\t\t<input matInput\r\n\t\t\t\t\t\t\t\t\tplaceholder=\"{{ 'required' | traduzione }}{{ 'dati-deposito-causale' | traduzione }}\"\r\n\t\t\t\t\t\t\t\t\tformControlName=\"causale\"\r\n\t\t\t\t\t\t\t\t\tmaxlength=\"127\"\r\n\t\t\t\t\t\t\t\t\t#testoCausale>\r\n\t\t\t\t\t\t\t\t<mat-error *ngIf=\"form.touched && form.controls['causale'].invalid\">\r\n\t\t\t\t\t\t\t\t\t{{ msg.produceMessage('required', form.controls['causale']) | traduzione }}\r\n\t\t\t\t\t\t\t\t</mat-error>\r\n\t\t\t\t\t\t\t\t<mat-hint *infoTip=\"'dati-deposito-causale'\"></mat-hint>\r\n\t\t\t\t\t\t\t\t<mat-hint align=\"end\">{{testoCausale.value.length}} / 127</mat-hint>\r\n\t\t\t\t\t\t\t</mat-form-field>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t\t<div class=\"row\">\r\n\t\t\t\t\t\t<div class=\"col-md-4\" *ngIf=\"visibilityMask.importo\">\r\n\t\t\t\t\t\t\t<mat-form-field>\r\n\t\t\t\t\t\t\t\t<input matInput\r\n\t\t\t\t\t\t\t\t\tplaceholder=\"{{'required' | traduzione }}{{'inserire-importo' | traduzione}}\"\r\n\t\t\t\t\t\t\t\t\tformControlName=\"importo\">\r\n\t\t\t\t\t\t\t\t\t<span matPrefix>&euro;</span>\r\n\t\t\t\t\t\t\t\t<mat-error *ngIf=\"form.touched && form.controls['importo'].invalid\">\r\n\t\t\t\t\t\t\t\t\t{{ msg.produceMessage('required', form.controls['importo']) | traduzione }}\r\n\t\t\t\t\t\t\t\t</mat-error>\r\n\t\t\t\t\t\t\t\t<mat-hint *infoTip=\"'inserire-importo'\"></mat-hint>\r\n\t\t\t\t\t\t\t</mat-form-field>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t<div class=\"col-md-4\" *ngIf=\"visibilityMask.codiceRtsInoltro\">\r\n\t\t\t\t\t\t\t<mat-form-field>\r\n\t\t\t\t\t\t\t\t<mat-label>{{ 'required' | traduzione }}{{ 'dati-deposito-rts-inoltro' | traduzione }}</mat-label>\r\n\t\t\t\t\t\t\t\t<mat-select placeholder=\"{{'seleziona' | traduzione}}\" formControlName=\"rts-inoltro\">\r\n\t\t\t\t\t\t\t\t\t<mat-option\r\n\t\t\t\t\t\t\t\t\t\t*ngFor=\"let rts of rts$ | async\"\r\n\t\t\t\t\t\t\t\t\t\t[value]=\"rts.codiceFiscale\"\r\n\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t{{ rts.denominazioneRTS }}\r\n\t\t\t\t\t\t\t\t\t</mat-option>\r\n\t\t\t\t\t\t\t\t\t<!-- <mat-option\r\n\t\t\t\t\t\t\t\t\t\t*ngFor=\"let rts of listaRts\"\r\n\t\t\t\t\t\t\t\t\t\t[value]=\"rts.codiceFiscale\"\r\n\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t{{ rts.codiceFiscale }}\r\n\t\t\t\t\t\t\t\t</mat-option> -->\r\n\t\t\t\t\t\t\t\t</mat-select>\r\n\t\t\t\t\t\t\t\t<mat-error *ngIf=\"form.controls['rts-inoltro'].invalid\">\r\n\t\t\t\t\t\t\t\t\t{{ msg.produceMessage('required', form.controls['rts-inoltro']) | traduzione }}\r\n\t\t\t\t\t\t\t\t</mat-error>\r\n\t\t\t\t\t\t\t\t<mat-hint *infoTip=\"'dati-deposito-rts-inoltro'\"></mat-hint>\r\n\t\t\t\t\t\t\t</mat-form-field>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t\t<div class=\"row\" *ngIf=\"visibilityMask.nota\">\r\n\t\t\t\t\t\t<div class=\"col-md-12\">\r\n\t\t\t\t\t\t\t<mat-form-field>\r\n\t\t\t\t\t\t\t\t<textarea \r\n\t\t\t\t\t\t\t\t matInput\r\n\t\t\t\t\t\t\t\t\tplaceholder=\"{{ 'dati-deposito-nota' | traduzione }}\"\r\n\t\t\t\t\t\t\t\t\tformControlName=\"nota\"\r\n\t\t\t\t\t\t\t\t\tmaxlength=\"511\"\r\n\t\t\t\t\t\t\t\t\t#testo>\r\n\t\t\t\t\t\t\t\t</textarea>\r\n\t\t\t\t\t\t\t\t<mat-error *ngIf=\"form.touched && form.controls['nota'].invalid\">\r\n\t\t\t\t\t\t\t\t\t{{ msg.produceMessage('required', form.controls['nota']) | traduzione }}\r\n\t\t\t\t\t\t\t\t</mat-error>\r\n\t\t\t\t\t\t\t\t<mat-hint *infoTip=\"'dati-deposito-nota'\"></mat-hint>\r\n\t\t\t\t\t\t\t\t<mat-hint align=\"end\">{{testo.value.length}} / 511</mat-hint>\r\n\t\t\t\t\t\t\t</mat-form-field>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</div>\r\n\t\t\t</form>\r\n\t\t</mat-expansion-panel>\r\n\t<lib-stepper-navigator\r\n\t\t[form]=\"form\"\r\n\t\t[direction]=\"direction\"\r\n\t\t[isFinal]=\"isFinal\"\r\n\t\t[isContainerValid]=\"isFormValid()\"\r\n\t\t(goForward)=\"forward($event)\"\r\n\t\t(goBackward)=\"backward($event)\"\r\n\t\t(salvaBozza)=\"onSalvaBozza($event)\"\r\n\t\t(complete)=\"complete($event)\"\r\n\t>\r\n\t</lib-stepper-navigator>\r\n</div>\r\n", styles: [".mat-card{border-radius:0!important;border-top:5px solid #0a2644}.divider{background-color:#737373;height:1px;width:100%}.mat-form-field-appearance-fill .mat-form-field-flex{background-color:#fff!important}.mat-select-value{max-width:100%;width:100%!important}"] },] } ]; DatiDeposito.ctorParameters = () => [ { type: MessageService }, { type: ChangeDetectorRef }, { type: DelegheService } ]; DatiDeposito.propDecorators = { datiDeposito: [{ type: Input }], visibilityMask: [{ type: Input }], listaRts$: [{ type: Input }], nextStep: [{ type: Output }], previousStep: [{ type: Output }], salvaBozza: [{ type: Output }] }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0aS1kZXBvc2l0by5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiQzovUHJvZ2V0dGkvREFHL3NvcmdlbnRpL2dpdGxhYi1zb2Z0d2FyZWZhY3RvcnkvY29tbW9uLWNvbXBvbmVudC1saWIvcHJvamVjdHMvcG9ydGFsLWNvbW1vbi1jb21wb25lbnQtbGliL3NyYy8iLCJzb3VyY2VzIjpbImxpYi9kZXBvc2l0aS9jb21wb25lbnRzL2RhdGktZGVwb3NpdG8vZGF0aS1kZXBvc2l0by5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFpQixpQkFBaUIsRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBcUIsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzVILE9BQU8sRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEQsT0FBTyxFQUFjLEVBQUUsRUFBZ0IsTUFBTSxNQUFNLENBQUM7QUFDcEQsT0FBTyxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNoRCxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQUV4RixPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSwrQ0FBK0MsQ0FBQztBQUN0RixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0saURBQWlELENBQUM7QUFDakYsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBZ0JoRSxNQUFNLE9BQU8sWUFBWTtJQXlGeEIsWUFDUyxHQUFtQixFQUNuQixJQUF1QixFQUN2QixjQUE4QjtRQUY5QixRQUFHLEdBQUgsR0FBRyxDQUFnQjtRQUNuQixTQUFJLEdBQUosSUFBSSxDQUFtQjtRQUN2QixtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUF6Ri9CLGFBQVEsR0FBVTtZQUN4QjtnQkFDQyxlQUFlLEVBQUUsSUFBSTtnQkFDckIsaUJBQWlCLEVBQUUsT0FBTztn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LENBQUMsRUFBRSxDQUNoRCxPQUFPLENBQUMsR0FBRyxDQUFDLCtDQUErQyxFQUFFLE9BQU8sQ0FBQyxDQUNyRSxDQUFDO0lBRUgsQ0FBQztJQUVELE9BQU8sQ0FBQyxNQUFXO1FBQ2xCLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUN2QyxDQUFDO0lBRUQsUUFBUSxDQUFDLE1BQVc7UUFDbkIsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQzNDLENBQUM7SUFFRCxZQUFZLENBQUMsTUFBVztRQUN2QixJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDekMsQ0FBQztJQUVELFFBQVEsQ0FBQyxNQUFXLElBQUksQ0FBQztJQUV6QixXQUFXO1FBQ1YsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQztJQUN4QixDQUFDO0lBRUQsZ0JBQWdCO1FBQ2YsTUFBTTtRQUNOLGlEQUFpRDtRQUNqRCxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksMEJBQTBCLEVBQU8sQ0FBQztJQUMzRCxDQUFDO0lBRUQsV0FBVztRQUNWLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRTtZQUN0QixJQUFJLENBQUMsWUFBWSxDQUFDLFdBQVcsRUFBRSxDQUFDO1NBQ2hDO0lBQ0YsQ0FBQzs7O1lBak9ELFNBQVMsU0FDVDtnQkFDQyxRQUFRLEVBQUUsbUJBQW1CO2dCQUMzQiwwaUpBQTZDOzthQUUvQzs7O1lBZE8sY0FBYztZQVJDLGlCQUFpQjtZQU9oQyxjQUFjOzs7MkJBb0RyQixLQUFLOzZCQUdMLEtBQUs7d0JBTUwsS0FBSzt1QkFHTCxNQUFNOzJCQUtOLE1BQU07eUJBS04sTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFmdGVyVmlld0luaXQsIENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uRGVzdHJveSwgT25Jbml0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRm9ybUNvbnRyb2wsIEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgb2YsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBtYXAsIHN0YXJ0V2l0aCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgRGF0aURlcG9zaXRvR2l1ZGl6aWFyaW9EVE8gfSBmcm9tICcuLi8uLi9tb2RlbHMvZGF0aS1kZXBvc2l0by1naXVkaXppYXJpby1kdG8nO1xyXG5pbXBvcnQgeyBSdHNEVE8gfSBmcm9tICcuLi8uLi9tb2RlbHMvcnRzLWR0byc7XHJcbmltcG9ydCB7IENvbXBvbmVudE91dHB1dFN0YXR1cyB9IGZyb20gJy4uLy4uL25vcm1hbGl6emF6aW9uZS9jb21wb25lbnQtb3V0cHV0LXN0YXR1cyc7XHJcbmltcG9ydCB7IERlbGVnaGVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZGVsZWdoZS1zZXJ2aWNlcy9kZWxlZ2hlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBNZXNzYWdlU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL21lc3NhZ2Uuc2VydmljZSc7XHJcblxyXG50eXBlIERhdGlEZXBvc2l0b0dlbmVyaWMgPSBrZXlvZiBEYXRpRGVwb3NpdG9HaXVkaXppYXJpb0RUTztcclxuLy8gVE9ETzogdXNhcmUgUmVjb3JkPCw+IHBlciBpIGRpdmVyc2kgdGlwaSBkaSBEYXRpRGVwb3NpdG9cclxuXHJcbmV4cG9ydCB0eXBlIERhdGlEZXBvc2l0b1Zpc2liaWxpdHlNYXNrID1cclxuXHR7IFtrIGluIERhdGlEZXBvc2l0b0dlbmVyaWNdOiBib29sZWFuXHJcblx0fTtcclxuXHJcbkBDb21wb25lbnQoXHJcblx0e1xyXG5cdFx0c2VsZWN0b3I6ICdsaWItZGF0aS1kZXBvc2l0bydcclxuXHRcdCwgdGVtcGxhdGVVcmw6ICcuL2RhdGktZGVwb3NpdG8uY29tcG9uZW50Lmh0bWwnXHJcblx0XHQsIHN0eWxlVXJsczogWycuL2RhdGktZGVwb3NpdG8uY29tcG9uZW50LmNzcyddXHJcblx0fVxyXG4pXHJcbmV4cG9ydCBjbGFzcyBEYXRpRGVwb3NpdG88VCBleHRlbmRzIERhdGlEZXBvc2l0b0dpdWRpemlhcmlvRFRPIHwgbnVsbD5cclxuXHRpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95LCBBZnRlclZpZXdJbml0IHtcclxuXHJcblx0XHRwdWJsaWMgcnN0X21vY2s6IGFueVtdID0gW1xyXG5cdFx0XHR7XHJcblx0XHRcdFx0XCJjb2RpY2VGaXNjYWxlXCI6IFwiVFJcIixcclxuXHRcdFx0XHRcImNvZGljZU9yZGluYW50ZVwiOiBcIlRlcm5pXCIsXHJcblx0XHRcdFx0XCJkYXRhRmluZVwiOiBuZXcgRGF0ZSgnMTAvMDYvMjAyNScpLFxyXG5cdFx0XHRcdFwiZGF0YUluaXppb1wiOiBuZXcgRGF0ZSgnMTAvMDYvMjAyNScpLFxyXG5cdFx0XHRcdFwiZGVub21pbmF6aW9uZVJUU1wiOiBcIlJUUyAxXCIsXHJcblx0XHRcdFx0XCJwcm92aW5jZUNvbXBldGVuemFcIjogW1wiVFJcIl1cclxuXHRcdFx0fSxcclxuXHRcdFx0e1xyXG5cdFx0XHRcdFwiY29kaWNlRmlzY2FsZVwiOiBcIlJNXCIsXHJcblx0XHRcdFx0XCJjb2RpY2VPcmRpbmFudGVcIjogXCJSb21hXCIsXHJcblx0XHRcdFx0XCJkYXRhRmluZVwiOiBuZXcgRGF0ZSgnMTAvMDYvMjAyNScpLFxyXG5cdFx0XHRcdFwiZGF0YUluaXppb1wiOiBuZXcgRGF0ZSgnMTAvMDYvMjAyNScpLFxyXG5cdFx0XHRcdFwiZGVub21pbmF6aW9uZVJUU1wiOiBcIlJUUyAxXCIsXHJcblx0XHRcdFx0XCJwcm92aW5jZUNvbXBldGVuemFcIjogW1wiVFJcIl1cclxuXHRcdFx0fSxcclxuXHRcdFx0e1xyXG5cdFx0XHRcdFwiY29kaWNlRmlzY2FsZVwiOiBcIk1JXCIsXHJcblx0XHRcdFx0XCJjb2RpY2VPcmRpbmFudGVcIjogXCJNaWxhbm9cIixcclxuXHRcdFx0XHRcImRhdGFGaW5lXCI6IG5ldyBEYXRlKCcxMC8wNi8yMDI1JyksXHJcblx0XHRcdFx0XCJkYXRhSW5pemlvXCI6IG5ldyBEYXRlKCcxMC8wNi8yMDI1JyksXHJcblx0XHRcdFx0XCJkZW5vbWluYXppb25lUlRTXCI6IFwiUlRTIDFcIixcclxuXHRcdFx0XHRcInByb3ZpbmNlQ29tcGV0ZW56YVwiOiBbXCJUUlwiXVxyXG5cdFx0XHR9XHJcblx0XVxyXG5cclxuXHQvL1RPRE9cclxuXHQvLyBEYXRpRGVwb3NpdG9EVE9cclxuXHQvLyBEYXRpRGVwb3NpdG9HaXVkaXppYXJpb0RUT1xyXG5cdC8vIERhdGlEZXBvc2l0b05vRXNwcm9wcmlvRFRPXHJcblxyXG5cdEBJbnB1dCgpIGRhdGlEZXBvc2l0bzogVCA9XHJcblx0XHR7fSBhcyBUO1xyXG5cclxuXHRASW5wdXQoKSB2aXNpYmlsaXR5TWFzazogRGF0aURlcG9zaXRvVmlzaWJpbGl0eU1hc2sgPVxyXG5cdFx0e30gYXMgRGF0aURlcG9zaXRvVmlzaWJpbGl0eU1hc2s7XHJcblxyXG5cdC8vIEBJbnB1dCgpXHJcblx0Ly8gbGlzdGFSdHMkOiBPYnNlcnZhYmxlPEFycmF5PFJ0c0RUTz4+O1xyXG5cclxuXHRASW5wdXQoKVxyXG5cdGxpc3RhUnRzJDogT2JzZXJ2YWJsZTxBcnJheTxzdHJpbmc+PjtcclxuXHJcblx0QE91dHB1dCgpXHJcblx0bmV4dFN0ZXA6IEV2ZW50RW1pdHRlcjxEYXRpRGVwb3NpdG9HaXVkaXppYXJpb0RUTz4gPSBuZXcgRXZlbnRFbWl0dGVyPFxyXG5cdFx0RGF0aURlcG9zaXRvR2l1ZGl6aWFyaW9EVE9cclxuXHQ+KCk7XHJcblxyXG5cdEBPdXRwdXQoKVxyXG5cdHByZXZpb3VzU3RlcDogRXZlbnRFbWl0dGVyPERhdGlEZXBvc2l0b0dpdWRpemlhcmlvRFRPPiA9IG5ldyBFdmVudEVtaXR0ZXI8XHJcblx0XHREYXRpRGVwb3NpdG9HaXVkaXppYXJpb0RUT1xyXG5cdD4oKTtcclxuXHJcblx0QE91dHB1dCgpXHJcblx0c2FsdmFCb3p6YTogRXZlbnRFbWl0dGVyPERhdGlEZXBvc2l0b0dpdWRpemlhcmlvRFRPPiA9IG5ldyBFdmVudEVtaXR0ZXI8XHJcblx0XHREYXRpRGVwb3NpdG9HaXVkaXppYXJpb0RUT1xyXG5cdD4oKTtcclxuXHJcblx0Ly8gVE9ET1xyXG5cdC8vIEBJbnB1dCgpXHJcblx0Ly8gcnRzJDogT2JzZXJ2YWJsZTxBcnJheTxUaXBvbG9naWNhRFRPPj47XHJcblxyXG5cdGZvcm06IEZvcm1Hcm91cDtcclxuXHRkaXJlY3Rpb246IHN0cmluZyA9IFwiYm90aC13YXlzXCI7XHJcblx0aXNGaW5hbDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cdHN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xyXG5cclxuXHRydHMkOiBPYnNlcnZhYmxlPEFycmF5PFJ0c0RUTz4+O1xyXG5cclxuXHRfcnRzOiBBcnJheTxSdHNEVE8+O1xyXG5cclxuXHRpc0ltcG9ydG9Gb3JtYXRvVmFsaWRvT0xEKHZhbG9yZUltcG9ydG8pIHtcclxuXHRcdHJldHVybiAvXig/OlswLTldK3woPzpbMC05XXsxLDN9XFwuPykrKSg/OixbMC05XXsxLDJ9KT/igqw/JC9cclxuXHRcdFx0LnRlc3QodmFsb3JlSW1wb3J0byk7NDJcclxuXHR9XHJcblx0cHJpdmF0ZSBjdXJyZW5jeVRvTnVtYmVyKHM6IHN0cmluZyk6IG51bWJlciB7XHJcblx0XHRyZXR1cm4gTnVtYmVyKHMucmVwbGFjZSgvXFwuL2csICcnKS5yZXBsYWNlKCcsJywgJy4nKSB8fCB1bmRlZmluZWQpO1xyXG5cdH1cclxuXHJcblx0aXNJbXBvcnRvRm9ybWF0b1ZhbGlkbyh2YWxvcmVJbXBvcnRvKSB7XHJcblx0XHRyZXR1cm4gL14oPzowfFsxLTldKD86WzAtOV17MCwyfVxcLlswLTldezN9KD86XFwuWzAtOV17M30pKnxbMC05XSopKSg/OixbMC05XXsyLDJ9KeKCrD8kL1xyXG5cdFx0XHQudGVzdCh2YWxvcmVJbXBvcnRvKTtcclxuXHR9XHJcblxyXG5cclxuXHRjb25zdHJ1Y3RvcihcclxuXHRcdHByaXZhdGUgbXNnOiBNZXNzYWdlU2VydmljZSxcclxuXHRcdHByaXZhdGUgX3JlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcblx0XHRwcml2YXRlIGRlbGVnaGVTZXJ2aWNlOiBEZWxlZ2hlU2VydmljZSxcclxuXHQpIHsgfVxyXG5cclxuXHRuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XHJcblx0XHR0aGlzLl9yZWYuZGV0ZWN0Q2hhbmdlcygpXHJcblx0fVxyXG5cclxuXHRuZ09uSW5pdCgpIHtcclxuXHJcblx0XHR0aGlzLmZvcm0gPSBuZXcgRm9ybUdyb3VwKFxyXG5cdFx0XHR7XHJcblx0XHRcdFx0J2NhdXNhbGUnOiBuZXcgRm9ybUNvbnRyb2woeyB2YWx1ZTogJycsIGRpc2FibGVkOiAhdGhpcy52aXNpYmlsaXR5TWFzay5jYXVzYWxlIH0sIGMgPT4ge1xyXG5cclxuXHRcdFx0XHRcdGlmICghdGhpcy52aXNpYmlsaXR5TWFzay5jYXVzYWxlKSByZXR1cm4ge307XHJcblxyXG5cdFx0XHRcdFx0cmV0dXJuIFN0cmluZyhjLnZhbHVlIHx8ICcnKS5sZW5ndGggPiAwXHJcblx0XHRcdFx0XHRcdD8ge31cclxuXHRcdFx0XHRcdFx0OiB7ICdyZXF1aXJlZCc6ICdJbCBjYW1wbyDDqCBvYmJsaWdhdG9yaW8uJyB9XHJcblx0XHRcdFx0fSlcclxuXHRcdFx0XHQsICdpbXBvcnRvJzogbmV3IEZvcm1Db250cm9sKHsgdmFsdWU6ICcnLCBkaXNhYmxlZDogIXRoaXMudmlzaWJpbGl0eU1hc2suaW1wb3J0byB9LCBjID0+IHtcclxuXHRcdFx0XHRcdGlmICghdGhpcy52aXNpYmlsaXR5TWFzay5pbXBvcnRvKSByZXR1cm4ge307XHJcblxyXG5cdFx0XHRcdFx0Ly8gcmV0dXJuIHRoaXMuaXNJbXBvcnRvRm9ybWF0b1ZhbGlkbyhjLnZhbHVlKVxyXG5cdFx0XHRcdFx0cmV0dXJuIHRoaXMuaXNJbXBvcnRvRm9ybWF0b1ZhbGlkbyhjLnZhbHVlKVxyXG5cdFx0XHRcdFx0XHQ/IHt9XHJcblx0XHRcdFx0XHRcdDogeyAncGF0dGVybic6ICdGb3JtYXRvIG5vbiB2YWxpZG8nIH07XHJcblx0XHRcdFx0fSlcclxuXHRcdFx0XHQsICdydHMtaW5vbHRybyc6IG5ldyBGb3JtQ29udHJvbCh7IHZhbHVlOiAnJywgZGlzYWJsZWQ6ICF0aGlzLnZpc2liaWxpdHlNYXNrLmNvZGljZVJ0c0lub2x0cm8gfSwgYyA9PiB7XHJcblx0XHRcdFx0XHRpZiAoIXRoaXMudmlzaWJpbGl0eU1hc2suY29kaWNlUnRzSW5vbHRybykgcmV0dXJuIHt9O1xyXG5cclxuXHRcdFx0XHRcdHJldHVybiBTdHJpbmcoYy52YWx1ZSB8fCAnJykubGVuZ3RoID4gMFxyXG5cdFx0XHRcdFx0XHQ/IHt9XHJcblx0XHRcdFx0XHRcdDogeyAncmVxdWlyZWQnOiAnSWwgY2FtcG8gw6ggb2JibGlnYXRvcmlvLicgfTtcclxuXHRcdFx0XHR9KVxyXG5cdFx0XHRcdCwgJ25vdGEnOiBuZXcgRm9ybUNvbnRyb2woeyB2YWx1ZTogJycsIGRpc2FibGVkOiAhdGhpcy52aXNpYmlsaXR5TWFzay5ub3RhIH0sIGMgPT4ge1xyXG5cdFx0XHRcdFx0aWYgKCF0aGlzLnZpc2liaWxpdHlNYXNrLm5vdGEpIHJldHVybiB7fTtcclxuXHJcblx0XHRcdFx0XHQvLyByZXR1cm4gU3RyaW5nKGMudmFsdWUpLnRyaW0oKS5sZW5ndGggPiAwXHJcblx0XHRcdFx0XHQvLyBcdD8ge31cclxuXHRcdFx0XHRcdC8vIFx0OiB7ICdyZXF1aXJlZCc6ICdJbCBjYW1wbyDDqCBvYmJsaWdhdG9yaW8uJyB9O1xyXG5cdFx0XHRcdH0pXHJcblx0XHRcdH1cclxuXHRcdCk7XHJcblxyXG5cdFx0bGV0IHZhbGlkOiBib29sZWFuID0gdHJ1ZTtcclxuXHJcblx0XHRpZiAoIXRoaXMuZGF0aURlcG9zaXRvKSB7XHJcblx0XHRcdHRoaXMuaW5pdERhdGlEZXBvc2l0bygpO1xyXG5cdFx0XHR2YWxpZCA9IGZhbHNlO1xyXG5cdFx0fVxyXG5cclxuXHRcdHRoaXMuX3J0cyA9IHRoaXMucnN0X21vY2s7XHJcblx0XHR0aGlzLmxpc3RhUnRzJCA9IG9mKHRoaXMucnN0X21vY2spO1xyXG5cdFx0dGhpcy5ydHMkID0gb2YodGhpcy5yc3RfbW9jayk7XHJcblx0XHQvLyB0aGlzLmxpc3RhUnRzJC5zdWJzY3JpYmUoXHJcblx0XHQvLyBcdChydHMpID0+IHtcclxuXHRcdC8vIFx0XHRjb25zb2xlLmxvZygnW2xpc3RhUnRzJF0nLCBydHMpO1xyXG5cdFx0Ly8gXHRcdGlmIChydHMgIT0gbnVsbCkge1xyXG5cdFx0Ly8gXHRcdFx0dGhpcy5ydHMkID0gdGhpcy5kZWxlZ2hlU2VydmljZS5nZXRMaXN0UnRzQ29kaWNlUmVnaW9uZShydHMpO1xyXG5cdFx0Ly8gXHRcdFx0dGhpcy5ydHMkLnN1YnNjcmliZShfcnRzID0+IHtcclxuXHRcdC8vIFx0XHRcdFx0dGhpcy5fcnRzID0gX3J0cztcclxuXHRcdC8vIFx0XHRcdFx0Ly9jb25zb2xlLmxvZyhcIl9ydHNcIiArIEpTT04uc3RyaW5naWZ5KHRoaXMuX3J0cykpXHJcblx0XHQvLyBcdFx0XHR9KTtcclxuXHRcdC8vIFx0XHR9XHJcblx0XHQvLyBcdH1cclxuXHRcdC8vICk7XHJcblxyXG5cdFx0dGhpcy5mb3JtLmNvbnRyb2xzWydjYXVzYWxlJ10uc2V0VmFsdWUodGhpcy5kYXRpRGVwb3NpdG8uY2F1c2FsZSk7XHJcblx0XHR0aGlzLmZvcm0uY29udHJvbHNbJ2ltcG9ydG8nXS5zZXRWYWx1ZSh0aGlzLmRhdGlEZXBvc2l0by5pbXBvcnRvKTtcclxuXHRcdHRoaXMuZm9ybS5jb250cm9sc1sncnRzLWlub2x0cm8nXS5zZXRWYWx1ZSh0aGlzLmRhdGlEZXBvc2l0by5jb2RpY2VSdHNJbm9sdHJvKTtcclxuXHRcdHRoaXMuZm9ybS5jb250cm9sc1snbm90YSddLnNldFZhbHVlKHRoaXMuZGF0aURlcG9zaXRvLm5vdGEpO1xyXG5cclxuXHRcdGNvbnN0IGNoYW5nZXMkID0gdGhpcy5mb3JtLnZhbHVlQ2hhbmdlcy5waXBlKFxyXG5cdFx0XHRtYXAoXyA9PiB7XHJcblx0XHRcdFx0Y29uc3QgZGF0aSA9IG5ldyBEYXRpRGVwb3NpdG9HaXVkaXppYXJpb0RUTygpIGFzIFQ7XHJcblx0XHRcdFx0ZGF0aS5jYXVzYWxlID0gdGhpcy5mb3JtLmNvbnRyb2xzWydjYXVzYWxlJ10udmFsdWU7XHJcblx0XHRcdFx0aWYodGhpcy5mb3JtLmNvbnRyb2xzWydpbXBvcnRvJ10udmFsdWUgIT0gdW5kZWZpbmVkKXtcclxuXHRcdFx0XHRcdGRhdGkuaW1wb3J0byA9IHRoaXMuY3VycmVuY3lUb051bWJlcih0aGlzLmZvcm0uY29udHJvbHNbJ2ltcG9ydG8nXS52YWx1ZSk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdGRhdGkuY29kaWNlUnRzSW5vbHRybyA9IHRoaXMuZm9ybS5jb250cm9sc1sncnRzLWlub2x0cm8nXS52YWx1ZTtcclxuXHRcdFx0XHRpZihkYXRpPy5jb2RpY2VSdHNJbm9sdHJvICYmIHRoaXM/Ll9ydHMpIHtcclxuXHRcdFx0XHRcdGRhdGkuZGVub21pbmF6aW9uZVJUUyA9IHRoaXMuX3J0cy5maW5kKHggPT4geC5jb2RpY2VGaXNjYWxlID09IGRhdGk/LmNvZGljZVJ0c0lub2x0cm8pPy5kZW5vbWluYXppb25lUlRTO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRkYXRpLm5vdGEgPSB0aGlzLmZvcm0uY29udHJvbHNbJ25vdGEnXS52YWx1ZTtcclxuXHRcdFx0XHR0aGlzLmRhdGlEZXBvc2l0byA9IGRhdGk7XHJcblx0XHRcdFx0Ly8gY29uc29sZS5sb2coXCJbZGF0aV1cIiwgdGhpcy5mb3JtKTtcclxuXHRcdFx0XHRyZXR1cm4gQ29tcG9uZW50T3V0cHV0U3RhdHVzLm9mKFxyXG5cdFx0XHRcdFx0dGhpcy5mb3JtLnZhbGlkLCB0aGlzLmRhdGlEZXBvc2l0byk7XHJcblx0XHRcdH0pLFxyXG5cdFx0XHRzdGFydFdpdGgoQ29tcG9uZW50T3V0cHV0U3RhdHVzLm9mKHZhbGlkLCB0aGlzLmRhdGlEZXBvc2l0bykpXHJcblx0XHQpO1xyXG5cclxuXHRcdHRoaXMuc3Vic2NyaXB0aW9uID0gY2hhbmdlcyQuc3Vic2NyaWJlKG5ld0RhdGkgPT5cclxuXHRcdFx0Y29uc29sZS5sb2coJ1tEYXRpRGVwb3NpdG9Db21wb25lbnRdIGRhdGlTcGVjaWZpY2lEZXBvc2l0bycsIG5ld0RhdGkpXHJcblx0XHQpO1xyXG5cclxuXHR9XHJcblxyXG5cdGZvcndhcmQoJGV2ZW50OiBhbnkpIHtcclxuXHRcdHRoaXMubmV4dFN0ZXAuZW1pdCh0aGlzLmRhdGlEZXBvc2l0byk7XHJcblx0fVxyXG5cclxuXHRiYWNrd2FyZCgkZXZlbnQ6IGFueSkge1xyXG5cdFx0dGhpcy5wcmV2aW91c1N0ZXAuZW1pdCh0aGlzLmRhdGlEZXBvc2l0byk7XHJcblx0fVxyXG5cclxuXHRvblNhbHZhQm96emEoJGV2ZW50OiBhbnkpIHtcclxuXHRcdHRoaXMuc2FsdmFCb3p6YS5lbWl0KHRoaXMuZGF0aURlcG9zaXRvKTtcclxuXHR9XHJcblxyXG5cdGNvbXBsZXRlKCRldmVudDogYW55KSB7IH1cclxuXHJcblx0aXNGb3JtVmFsaWQoKTogYm9vbGVhbiB7XHJcblx0XHRyZXR1cm4gdGhpcy5mb3JtLnZhbGlkO1xyXG5cdH1cclxuXHJcblx0aW5pdERhdGlEZXBvc2l0bygpIHtcclxuXHRcdC8vVE9ET1xyXG5cdFx0Ly90aGlzLmRhdGlEZXBvc2l0byA9IG5ldyBEYXRpRGVwb3NpdG9EVE8oKSBhcyBUO1xyXG5cdFx0dGhpcy5kYXRpRGVwb3NpdG8gPSBuZXcgRGF0aURlcG9zaXRvR2l1ZGl6aWFyaW9EVE8oKSBhcyBUO1xyXG5cdH1cclxuXHJcblx0bmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcblx0XHRpZiAodGhpcy5zdWJzY3JpcHRpb24pIHtcclxuXHRcdFx0dGhpcy5zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcclxuXHRcdH1cclxuXHR9XHJcbn1cclxuIl19