@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 • 28.5 kB
JavaScript
import { ChangeDetectorRef, Component, EventEmitter, Input, Output } from '@angular/core';
import { FormControl, FormGroup } from '@angular/forms';
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;
//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.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>€</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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0aS1kZXBvc2l0by5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiRDovUHJvZ2V0dGkvREFHL3NvcmdlbnRpL2dpdGxhYi10ZXJuaS9jb21tb24tY29tcG9uZW50LWxpYi9wcm9qZWN0cy9wb3J0YWwtY29tbW9uLWNvbXBvbmVudC1saWIvc3JjLyIsInNvdXJjZXMiOlsibGliL2RlcG9zaXRpL2NvbXBvbmVudHMvZGF0aS1kZXBvc2l0by9kYXRpLWRlcG9zaXRvLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWlCLGlCQUFpQixFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFxQixNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDNUgsT0FBTyxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUV4RCxPQUFPLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2hELE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLDRDQUE0QyxDQUFDO0FBRXhGLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLCtDQUErQyxDQUFDO0FBQ3RGLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxpREFBaUQsQ0FBQztBQUNqRixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFnQmhFLE1BQU0sT0FBTyxZQUFZO0lBOER4QixZQUNTLEdBQW1CLEVBQ25CLElBQXVCLEVBQ3ZCLGNBQThCO1FBRjlCLFFBQUcsR0FBSCxHQUFHLENBQWdCO1FBQ25CLFNBQUksR0FBSixJQUFJLENBQW1CO1FBQ3ZCLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQTlEdkMsTUFBTTtRQUNOLGtCQUFrQjtRQUNsQiw2QkFBNkI7UUFDN0IsNkJBQTZCO1FBRXBCLGlCQUFZLEdBQ3BCLEVBQU8sQ0FBQztRQUVBLG1CQUFjLEdBQ3RCLEVBQWdDLENBQUM7UUFTbEMsYUFBUSxHQUE2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QztTQUNoQztJQUNGLENBQUM7OztZQW5NRCxTQUFTLFNBQ1Q7Z0JBQ0MsUUFBUSxFQUFFLG1CQUFtQjtnQkFDM0IsMGlKQUE2Qzs7YUFFL0M7OztZQWRPLGNBQWM7WUFSQyxpQkFBaUI7WUFPaEMsY0FBYzs7OzJCQXlCckIsS0FBSzs2QkFHTCxLQUFLO3dCQU1MLEtBQUs7dUJBR0wsTUFBTTsyQkFLTixNQUFNO3lCQUtOLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBZnRlclZpZXdJbml0LCBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkRlc3Ryb3ksIE9uSW5pdCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZvcm1Db250cm9sLCBGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IE9ic2VydmFibGUsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBtYXAsIHN0YXJ0V2l0aCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgRGF0aURlcG9zaXRvR2l1ZGl6aWFyaW9EVE8gfSBmcm9tICcuLi8uLi9tb2RlbHMvZGF0aS1kZXBvc2l0by1naXVkaXppYXJpby1kdG8nO1xyXG5pbXBvcnQgeyBSdHNEVE8gfSBmcm9tICcuLi8uLi9tb2RlbHMvcnRzLWR0byc7XHJcbmltcG9ydCB7IENvbXBvbmVudE91dHB1dFN0YXR1cyB9IGZyb20gJy4uLy4uL25vcm1hbGl6emF6aW9uZS9jb21wb25lbnQtb3V0cHV0LXN0YXR1cyc7XHJcbmltcG9ydCB7IERlbGVnaGVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZGVsZWdoZS1zZXJ2aWNlcy9kZWxlZ2hlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBNZXNzYWdlU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL21lc3NhZ2Uuc2VydmljZSc7XHJcblxyXG50eXBlIERhdGlEZXBvc2l0b0dlbmVyaWMgPSBrZXlvZiBEYXRpRGVwb3NpdG9HaXVkaXppYXJpb0RUTztcclxuLy8gVE9ETzogdXNhcmUgUmVjb3JkPCw+IHBlciBpIGRpdmVyc2kgdGlwaSBkaSBEYXRpRGVwb3NpdG9cclxuXHJcbmV4cG9ydCB0eXBlIERhdGlEZXBvc2l0b1Zpc2liaWxpdHlNYXNrID1cclxuXHR7IFtrIGluIERhdGlEZXBvc2l0b0dlbmVyaWNdOiBib29sZWFuXHJcblx0fTtcclxuXHJcbkBDb21wb25lbnQoXHJcblx0e1xyXG5cdFx0c2VsZWN0b3I6ICdsaWItZGF0aS1kZXBvc2l0bydcclxuXHRcdCwgdGVtcGxhdGVVcmw6ICcuL2RhdGktZGVwb3NpdG8uY29tcG9uZW50Lmh0bWwnXHJcblx0XHQsIHN0eWxlVXJsczogWycuL2RhdGktZGVwb3NpdG8uY29tcG9uZW50LmNzcyddXHJcblx0fVxyXG4pXHJcbmV4cG9ydCBjbGFzcyBEYXRpRGVwb3NpdG88VCBleHRlbmRzIERhdGlEZXBvc2l0b0dpdWRpemlhcmlvRFRPIHwgbnVsbD5cclxuXHRpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95LCBBZnRlclZpZXdJbml0IHtcclxuXHJcblx0Ly9UT0RPXHJcblx0Ly8gRGF0aURlcG9zaXRvRFRPXHJcblx0Ly8gRGF0aURlcG9zaXRvR2l1ZGl6aWFyaW9EVE9cclxuXHQvLyBEYXRpRGVwb3NpdG9Ob0VzcHJvcHJpb0RUT1xyXG5cclxuXHRASW5wdXQoKSBkYXRpRGVwb3NpdG86IFQgPVxyXG5cdFx0e30gYXMgVDtcclxuXHJcblx0QElucHV0KCkgdmlzaWJpbGl0eU1hc2s6IERhdGlEZXBvc2l0b1Zpc2liaWxpdHlNYXNrID1cclxuXHRcdHt9IGFzIERhdGlEZXBvc2l0b1Zpc2liaWxpdHlNYXNrO1xyXG5cclxuXHQvLyBASW5wdXQoKVxyXG5cdC8vIGxpc3RhUnRzJDogT2JzZXJ2YWJsZTxBcnJheTxSdHNEVE8+PjtcclxuXHJcblx0QElucHV0KClcclxuXHRsaXN0YVJ0cyQ6IE9ic2VydmFibGU8QXJyYXk8c3RyaW5nPj47XHJcblxyXG5cdEBPdXRwdXQoKVxyXG5cdG5leHRTdGVwOiBFdmVudEVtaXR0ZXI8RGF0aURlcG9zaXRvR2l1ZGl6aWFyaW9EVE8+ID0gbmV3IEV2ZW50RW1pdHRlcjxcclxuXHRcdERhdGlEZXBvc2l0b0dpdWRpemlhcmlvRFRPXHJcblx0PigpO1xyXG5cclxuXHRAT3V0cHV0KClcclxuXHRwcmV2aW91c1N0ZXA6IEV2ZW50RW1pdHRlcjxEYXRpRGVwb3NpdG9HaXVkaXppYXJpb0RUTz4gPSBuZXcgRXZlbnRFbWl0dGVyPFxyXG5cdFx0RGF0aURlcG9zaXRvR2l1ZGl6aWFyaW9EVE9cclxuXHQ+KCk7XHJcblxyXG5cdEBPdXRwdXQoKVxyXG5cdHNhbHZhQm96emE6IEV2ZW50RW1pdHRlcjxEYXRpRGVwb3NpdG9HaXVkaXppYXJpb0RUTz4gPSBuZXcgRXZlbnRFbWl0dGVyPFxyXG5cdFx0RGF0aURlcG9zaXRvR2l1ZGl6aWFyaW9EVE9cclxuXHQ+KCk7XHJcblxyXG5cdC8vIFRPRE9cclxuXHQvLyBASW5wdXQoKVxyXG5cdC8vIHJ0cyQ6IE9ic2VydmFibGU8QXJyYXk8VGlwb2xvZ2ljYURUTz4+O1xyXG5cclxuXHRmb3JtOiBGb3JtR3JvdXA7XHJcblx0ZGlyZWN0aW9uOiBzdHJpbmcgPSBcImJvdGgtd2F5c1wiO1xyXG5cdGlzRmluYWw6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHRzdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcclxuXHJcblx0cnRzJDogT2JzZXJ2YWJsZTxBcnJheTxSdHNEVE8+PjtcclxuXHJcblx0X3J0czogQXJyYXk8UnRzRFRPPjtcclxuXHJcblx0aXNJbXBvcnRvRm9ybWF0b1ZhbGlkb09MRCh2YWxvcmVJbXBvcnRvKSB7XHJcblx0XHRyZXR1cm4gL14oPzpbMC05XSt8KD86WzAtOV17MSwzfVxcLj8pKykoPzosWzAtOV17MSwyfSk/4oKsPyQvXHJcblx0XHRcdC50ZXN0KHZhbG9yZUltcG9ydG8pOzQyXHJcblx0fVxyXG5cdHByaXZhdGUgY3VycmVuY3lUb051bWJlcihzOiBzdHJpbmcpOiBudW1iZXIge1xyXG5cdFx0cmV0dXJuIE51bWJlcihzLnJlcGxhY2UoL1xcLi9nLCAnJykucmVwbGFjZSgnLCcsICcuJykgfHwgdW5kZWZpbmVkKTtcclxuXHR9XHJcblxyXG5cdGlzSW1wb3J0b0Zvcm1hdG9WYWxpZG8odmFsb3JlSW1wb3J0bykge1xyXG5cdFx0cmV0dXJuIC9eKD86MHxbMS05XSg/OlswLTldezAsMn1cXC5bMC05XXszfSg/OlxcLlswLTldezN9KSp8WzAtOV0qKSkoPzosWzAtOV17MiwyfSnigqw/JC9cclxuXHRcdFx0LnRlc3QodmFsb3JlSW1wb3J0byk7XHJcblx0fVxyXG5cclxuXHJcblx0Y29uc3RydWN0b3IoXHJcblx0XHRwcml2YXRlIG1zZzogTWVzc2FnZVNlcnZpY2UsXHJcblx0XHRwcml2YXRlIF9yZWY6IENoYW5nZURldGVjdG9yUmVmLFxyXG5cdFx0cHJpdmF0ZSBkZWxlZ2hlU2VydmljZTogRGVsZWdoZVNlcnZpY2UsXHJcblx0KSB7IH1cclxuXHJcblx0bmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xyXG5cdFx0dGhpcy5fcmVmLmRldGVjdENoYW5nZXMoKVxyXG5cdH1cclxuXHJcblx0bmdPbkluaXQoKSB7XHJcblxyXG5cdFx0dGhpcy5mb3JtID0gbmV3IEZvcm1Hcm91cChcclxuXHRcdFx0e1xyXG5cdFx0XHRcdCdjYXVzYWxlJzogbmV3IEZvcm1Db250cm9sKHsgdmFsdWU6ICcnLCBkaXNhYmxlZDogIXRoaXMudmlzaWJpbGl0eU1hc2suY2F1c2FsZSB9LCBjID0+IHtcclxuXHJcblx0XHRcdFx0XHRpZiAoIXRoaXMudmlzaWJpbGl0eU1hc2suY2F1c2FsZSkgcmV0dXJuIHt9O1xyXG5cclxuXHRcdFx0XHRcdHJldHVybiBTdHJpbmcoYy52YWx1ZSB8fCAnJykubGVuZ3RoID4gMFxyXG5cdFx0XHRcdFx0XHQ/IHt9XHJcblx0XHRcdFx0XHRcdDogeyAncmVxdWlyZWQnOiAnSWwgY2FtcG8gw6ggb2JibGlnYXRvcmlvLicgfVxyXG5cdFx0XHRcdH0pXHJcblx0XHRcdFx0LCAnaW1wb3J0byc6IG5ldyBGb3JtQ29udHJvbCh7IHZhbHVlOiAnJywgZGlzYWJsZWQ6ICF0aGlzLnZpc2liaWxpdHlNYXNrLmltcG9ydG8gfSwgYyA9PiB7XHJcblx0XHRcdFx0XHRpZiAoIXRoaXMudmlzaWJpbGl0eU1hc2suaW1wb3J0bykgcmV0dXJuIHt9O1xyXG5cclxuXHRcdFx0XHRcdC8vIHJldHVybiB0aGlzLmlzSW1wb3J0b0Zvcm1hdG9WYWxpZG8oYy52YWx1ZSlcclxuXHRcdFx0XHRcdHJldHVybiB0aGlzLmlzSW1wb3J0b0Zvcm1hdG9WYWxpZG8oYy52YWx1ZSlcdFx0XHRcdFx0XHJcblx0XHRcdFx0XHRcdD8ge31cclxuXHRcdFx0XHRcdFx0OiB7ICdwYXR0ZXJuJzogJ0Zvcm1hdG8gbm9uIHZhbGlkbycgfTtcclxuXHRcdFx0XHR9KVxyXG5cdFx0XHRcdCwgJ3J0cy1pbm9sdHJvJzogbmV3IEZvcm1Db250cm9sKHsgdmFsdWU6ICcnLCBkaXNhYmxlZDogIXRoaXMudmlzaWJpbGl0eU1hc2suY29kaWNlUnRzSW5vbHRybyB9LCBjID0+IHtcclxuXHRcdFx0XHRcdGlmICghdGhpcy52aXNpYmlsaXR5TWFzay5jb2RpY2VSdHNJbm9sdHJvKSByZXR1cm4ge307XHJcblxyXG5cdFx0XHRcdFx0cmV0dXJuIFN0cmluZyhjLnZhbHVlIHx8ICcnKS5sZW5ndGggPiAwXHJcblx0XHRcdFx0XHRcdD8ge31cclxuXHRcdFx0XHRcdFx0OiB7ICdyZXF1aXJlZCc6ICdJbCBjYW1wbyDDqCBvYmJsaWdhdG9yaW8uJyB9O1xyXG5cdFx0XHRcdH0pXHJcblx0XHRcdFx0LCAnbm90YSc6IG5ldyBGb3JtQ29udHJvbCh7IHZhbHVlOiAnJywgZGlzYWJsZWQ6ICF0aGlzLnZpc2liaWxpdHlNYXNrLm5vdGEgfSwgYyA9PiB7XHJcblx0XHRcdFx0XHRpZiAoIXRoaXMudmlzaWJpbGl0eU1hc2subm90YSkgcmV0dXJuIHt9O1xyXG5cclxuXHRcdFx0XHRcdC8vIHJldHVybiBTdHJpbmcoYy52YWx1ZSkudHJpbSgpLmxlbmd0aCA+IDBcclxuXHRcdFx0XHRcdC8vIFx0PyB7fVxyXG5cdFx0XHRcdFx0Ly8gXHQ6IHsgJ3JlcXVpcmVkJzogJ0lsIGNhbXBvIMOoIG9iYmxpZ2F0b3Jpby4nIH07XHJcblx0XHRcdFx0fSlcclxuXHRcdFx0fVxyXG5cdFx0KTtcclxuXHJcblx0XHRsZXQgdmFsaWQ6IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuXHRcdGlmICghdGhpcy5kYXRpRGVwb3NpdG8pIHtcclxuXHRcdFx0dGhpcy5pbml0RGF0aURlcG9zaXRvKCk7XHJcblx0XHRcdHZhbGlkID0gZmFsc2U7XHJcblx0XHR9XHJcblxyXG5cdFx0dGhpcy5saXN0YVJ0cyQuc3Vic2NyaWJlKFxyXG5cdFx0XHQocnRzKSA9PiB7XHJcblx0XHRcdFx0Y29uc29sZS5sb2coJ1tsaXN0YVJ0cyRdJywgcnRzKTtcclxuXHRcdFx0XHRpZiAocnRzICE9IG51bGwpIHtcclxuXHRcdFx0XHRcdHRoaXMucnRzJCA9IHRoaXMuZGVsZWdoZVNlcnZpY2UuZ2V0TGlzdFJ0c0NvZGljZVJlZ2lvbmUocnRzKTtcclxuXHRcdFx0XHRcdHRoaXMucnRzJC5zdWJzY3JpYmUoX3J0cyA9PiB7XHJcblx0XHRcdFx0XHRcdHRoaXMuX3J0cyA9IF9ydHM7XHJcblx0XHRcdFx0XHRcdC8vY29uc29sZS5sb2coXCJfcnRzXCIgKyBKU09OLnN0cmluZ2lmeSh0aGlzLl9ydHMpKVxyXG5cdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHQpO1xyXG5cclxuXHRcdHRoaXMuZm9ybS5jb250cm9sc1snY2F1c2FsZSddLnNldFZhbHVlKHRoaXMuZGF0aURlcG9zaXRvLmNhdXNhbGUpO1xyXG5cdFx0dGhpcy5mb3JtLmNvbnRyb2xzWydpbXBvcnRvJ10uc2V0VmFsdWUodGhpcy5kYXRpRGVwb3NpdG8uaW1wb3J0byk7XHJcblx0XHR0aGlzLmZvcm0uY29udHJvbHNbJ3J0cy1pbm9sdHJvJ10uc2V0VmFsdWUodGhpcy5kYXRpRGVwb3NpdG8uY29kaWNlUnRzSW5vbHRybyk7XHJcblx0XHR0aGlzLmZvcm0uY29udHJvbHNbJ25vdGEnXS5zZXRWYWx1ZSh0aGlzLmRhdGlEZXBvc2l0by5ub3RhKTtcclxuXHJcblx0XHRjb25zdCBjaGFuZ2VzJCA9IHRoaXMuZm9ybS52YWx1ZUNoYW5nZXMucGlwZShcclxuXHRcdFx0bWFwKF8gPT4ge1xyXG5cdFx0XHRcdGNvbnN0IGRhdGkgPSBuZXcgRGF0aURlcG9zaXRvR2l1ZGl6aWFyaW9EVE8oKSBhcyBUO1xyXG5cdFx0XHRcdGRhdGkuY2F1c2FsZSA9IHRoaXMuZm9ybS5jb250cm9sc1snY2F1c2FsZSddLnZhbHVlO1xyXG5cdFx0XHRcdGlmKHRoaXMuZm9ybS5jb250cm9sc1snaW1wb3J0byddLnZhbHVlICE9IHVuZGVmaW5lZCl7XHJcblx0XHRcdFx0XHRkYXRpLmltcG9ydG8gPSB0aGlzLmN1cnJlbmN5VG9OdW1iZXIodGhpcy5mb3JtLmNvbnRyb2xzWydpbXBvcnRvJ10udmFsdWUpO1xyXG5cdFx0XHRcdH1cdFx0XHRcdFxyXG5cdFx0XHRcdGRhdGkuY29kaWNlUnRzSW5vbHRybyA9IHRoaXMuZm9ybS5jb250cm9sc1sncnRzLWlub2x0cm8nXS52YWx1ZTtcclxuXHRcdFx0XHRpZihkYXRpPy5jb2RpY2VSdHNJbm9sdHJvICYmIHRoaXM/Ll9ydHMpIHtcclxuXHRcdFx0XHRcdGRhdGkuZGVub21pbmF6aW9uZVJUUyA9IHRoaXMuX3J0cy5maW5kKHggPT4geC5jb2RpY2VGaXNjYWxlID09IGRhdGk/LmNvZGljZVJ0c0lub2x0cm8pPy5kZW5vbWluYXppb25lUlRTO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRkYXRpLm5vdGEgPSB0aGlzLmZvcm0uY29udHJvbHNbJ25vdGEnXS52YWx1ZTtcclxuXHRcdFx0XHR0aGlzLmRhdGlEZXBvc2l0byA9IGRhdGk7XHJcblx0XHRcdFx0Ly8gY29uc29sZS5sb2coXCJbZGF0aV1cIiwgdGhpcy5mb3JtKTtcclxuXHRcdFx0XHRyZXR1cm4gQ29tcG9uZW50T3V0cHV0U3RhdHVzLm9mKFxyXG5cdFx0XHRcdFx0dGhpcy5mb3JtLnZhbGlkLCB0aGlzLmRhdGlEZXBvc2l0byk7XHJcblx0XHRcdH0pLFxyXG5cdFx0XHRzdGFydFdpdGgoQ29tcG9uZW50T3V0cHV0U3RhdHVzLm9mKHZhbGlkLCB0aGlzLmRhdGlEZXBvc2l0bykpXHJcblx0XHQpO1xyXG5cclxuXHRcdHRoaXMuc3Vic2NyaXB0aW9uID0gY2hhbmdlcyQuc3Vic2NyaWJlKG5ld0RhdGkgPT5cclxuXHRcdFx0Y29uc29sZS5sb2coJ1tEYXRpRGVwb3NpdG9Db21wb25lbnRdIGRhdGlTcGVjaWZpY2lEZXBvc2l0bycsIG5ld0RhdGkpXHJcblx0XHQpO1xyXG5cclxuXHR9XHJcblxyXG5cdGZvcndhcmQoJGV2ZW50OiBhbnkpIHtcclxuXHRcdHRoaXMubmV4dFN0ZXAuZW1pdCh0aGlzLmRhdGlEZXBvc2l0byk7XHJcblx0fVxyXG5cclxuXHRiYWNrd2FyZCgkZXZlbnQ6IGFueSkge1xyXG5cdFx0dGhpcy5wcmV2aW91c1N0ZXAuZW1pdCh0aGlzLmRhdGlEZXBvc2l0byk7XHJcblx0fVxyXG5cclxuXHRvblNhbHZhQm96emEoJGV2ZW50OiBhbnkpIHtcclxuXHRcdHRoaXMuc2FsdmFCb3p6YS5lbWl0KHRoaXMuZGF0aURlcG9zaXRvKTtcclxuXHR9XHJcblxyXG5cdGNvbXBsZXRlKCRldmVudDogYW55KSB7IH1cclxuXHJcblx0aXNGb3JtVmFsaWQoKTogYm9vbGVhbiB7XHJcblx0XHRyZXR1cm4gdGhpcy5mb3JtLnZhbGlkO1xyXG5cdH1cclxuXHJcblx0aW5pdERhdGlEZXBvc2l0bygpIHtcclxuXHRcdC8vVE9ET1xyXG5cdFx0Ly90aGlzLmRhdGlEZXBvc2l0byA9IG5ldyBEYXRpRGVwb3NpdG9EVE8oKSBhcyBUO1xyXG5cdFx0dGhpcy5kYXRpRGVwb3NpdG8gPSBuZXcgRGF0aURlcG9zaXRvR2l1ZGl6aWFyaW9EVE8oKSBhcyBUO1xyXG5cdH1cclxuXHJcblx0bmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcblx0XHRpZiAodGhpcy5zdWJzY3JpcHRpb24pIHtcclxuXHRcdFx0dGhpcy5zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcclxuXHRcdH1cclxuXHR9XHJcbn0iXX0=