@infordata-web/portal-common-component-lib
Version:
This library was generated with [Angular CLI](https://github.com/angular/angular-cli) version 10.0.14.
130 lines • 26.8 kB
JavaScript
import { Component, ViewChild, Input, Output, EventEmitter } from '@angular/core';
import { FormGroupDirective, FormGroup, FormControl } from '@angular/forms';
import { MatTableDataSource } from '@angular/material/table';
import { Subject } from 'rxjs';
import { ComponentOutputStatus } from '../../normalizzazione/component-output-status';
import { DomicilioDTO } from '../../models/domicilio-dto';
import { ContattoDTO } from '../../models/contatto-dto';
import { SelectionModel } from '@angular/cdk/collections';
import { ComponentReducer } from '../../utils/component-reducer';
import { map, shareReplay, startWith, tap } from 'rxjs/operators';
import { MessageService } from '../../services/message.service';
export class DatiDomicilioComponent {
constructor(msg) {
this.msg = msg;
this.done = new EventEmitter();
this.displayedColumns = ['tipo', 'presso', 'indirizzo', 'preferito', 'seleziona'];
this.changesRecapito$ = new Subject();
this.validazioneDomicilio = false;
this.tipoToltip = "tipo";
this.pressoToltip = "presso";
this.indirizzoToltip = "indirizzo";
this.selezionaToltip = "seleziona";
this.preferitoToltip = "preferito";
}
ngOnInit() {
// console.log('[domicilio]', this.domicilio);
console.log('[domicili]', this.domicili);
this.form = new FormGroup({});
let valid = true;
if (!this.domicilio) {
this.initDomicilio();
valid = false;
}
this.dataSource = new MatTableDataSource(this.domicili);
this.selection = new SelectionModel(false, []);
this.initialSelection();
const domicilio = new FormControl({ value: this.domicilio.hasSelezionatoDomicilio, disabled: false });
this.form.addControl('domicilio', domicilio);
const selected = new FormControl({ value: '', disabled: false });
this.form.addControl('selected', selected);
this.checkDomicilio$ = domicilio.valueChanges.pipe(shareReplay())
.pipe(tap(checkDomicilio => {
if (checkDomicilio == false) {
this.selection.clear();
}
}), startWith(this.domicilio.idDomicilioSelezionato != null));
const changesCheckDomicilio$ = this.checkDomicilio$.pipe(map(checkDomicilio => ComponentOutputStatus.of(true, (domicilio) => {
domicilio.hasSelezionatoDomicilio = checkDomicilio;
if (checkDomicilio == false) {
domicilio.contatto.email = null;
domicilio.contatto.pec = null;
domicilio.contatto.telefono = null;
this.form.get('selected').setValue('');
}
})));
const changesDomicilio$ = this.selection.changed.pipe(tap((value) => {
// console.log("changesDomicilio$", value);
this.validazioneDomicilio = value.added.length > 0 ? false : true;
}), map(change => ComponentOutputStatus.of(true, domicilio => {
domicilio.idDomicilioSelezionato = change.added.length > 0 ? change.added[0].id : null;
})));
this.subscription = ComponentReducer.reducer3(changesCheckDomicilio$, changesDomicilio$, this.changesRecapito$, domicilio => {
return domicilio.hasSelezionatoDomicilio ?
domicilio.idDomicilioSelezionato != null : true;
}, ComponentOutputStatus.of(true, this.domicilio))
.subscribe(domicilio => {
// console.log('[DatiDomicilioComponent] status', status);
this.done.emit(domicilio);
});
this.form.setValidators(form => {
if (form.get('domicilio').value && !form.get('selected').value) {
this.validazioneDomicilio = true;
return { requiredDomicilio: true };
}
else {
return null;
}
//TODO
// return form.get('domicilio').value &&
// !form.get('selected').value ?
// // this.selection.isEmpty() ?
// // this.selection.selected.length === 1 ?
// { requiredDomicilio: true } : null;
});
}
initialSelection() {
if (this.domicilio.idDomicilioSelezionato) {
setTimeout(() => {
this.dataSource.data
.forEach(row => {
if (row.id == this.domicilio.idDomicilioSelezionato) {
this.selection.select(row);
this.validazioneDomicilio = false;
}
});
}, 0);
}
}
initDomicilio() {
this.domicilio = new DomicilioDTO();
this.domicilio.contatto = new ContattoDTO();
}
recapitiReady(recapitiStatus) {
// console.log('[recapitiReady]', recapitiStatus);
this.changesRecapito$.next(recapitiStatus.mapValue((contatto) => (dich) => (dich.contatto = contatto)));
}
ngOnDestroy() {
if (this.subscription != null) {
this.subscription.unsubscribe();
}
}
}
DatiDomicilioComponent.decorators = [
{ type: Component, args: [{
selector: 'lib-dati-domicilio',
template: "<mat-expansion-panel class=\"panel\" [expanded]=\"domicilio.hasSelezionatoDomicilio\">\r\n\t<mat-expansion-panel-header [collapsedHeight]=\"'48px'\" [expandedHeight]=\"'48px'\" class=\"custom-header\">\r\n\t\t<mat-panel-title>\r\n\t\t\t<!-- <h3>{{'domicilio' | traduzione}}</h3> -->\r\n\t\t\t<h3 class=\"mb-0 h5\"><info-tip-label label=\"domicilio\"></info-tip-label></h3>\r\n\t\t</mat-panel-title>\r\n\t</mat-expansion-panel-header>\r\n\t<form [formGroup]=\"form\">\r\n\t\t<div class=\"collapse-body mt-2\">\r\n\t\t\t<div class=\"row\">\r\n\t\t\t\t<section class=\"example-section col-md-2\">\r\n\t\t\t\t\t<mat-checkbox\r\n\t\t\t\t\t\tformControlName=\"domicilio\"\r\n\t\t\t\t\t\tclass=\"example-margin\">\r\n\t\t\t\t\t\t<!-- {{'seleziona-domicilio' | traduzione}} -->\r\n\t\t\t\t\t\t<info-tip-label label=\"seleziona-domicilio\"></info-tip-label>\r\n\t\t\t\t\t</mat-checkbox>\r\n\t\t\t\t</section>\r\n\t\t\t</div>\r\n\t\t</div>\r\n\t\t<ng-container *ngIf=\"checkDomicilio$ | async\">\r\n\r\n\t\t<h4 class=\"border-bottom font-weight-bold mt-4 h5\"><info-tip-label label=\"domicili-inseriti\"></info-tip-label></h4>\r\n <ng-container *ngIf=\"domicili?.length > 0; else noDomicili\">\r\n\t\t\t<mat-table [dataSource]=\"dataSource\" class=\"mat-elevation-z8 mt-3 border\">\r\n\r\n\t\t\t\t<!-- Tipo Column -->\r\n\t\t\t\t<ng-container matColumnDef=\"tipo\">\r\n\t\t\t\t\t<mat-header-cell *matHeaderCellDef> {{'tipo' | traduzione}} </mat-header-cell>\r\n\t\t\t\t\t<mat-cell *matCellDef=\"let element\"> {{element.tipoDomicilio.descrizione}} </mat-cell>\r\n\t\t\t\t\t<!-- <mat-hint *infoTip=\"tipoToltip\"></mat-hint> -->\r\n\t\t\t\t</ng-container>\r\n\r\n\t\t\t\t<!-- Presso Column -->\r\n\t\t\t\t<ng-container matColumnDef=\"presso\">\r\n\t\t\t\t\t<mat-header-cell *matHeaderCellDef> {{'presso' | traduzione}} </mat-header-cell>\r\n\t\t\t\t\t<mat-cell *matCellDef=\"let element\"> {{element.indirizzo.presso}} </mat-cell>\r\n\t\t\t\t\t<!-- <mat-hint *infoTip=\"pressoToltip\"></mat-hint> -->\r\n\t\t\t\t</ng-container>\r\n\r\n\t\t\t\t<!-- Indirizzo Column -->\r\n\t\t\t\t<ng-container matColumnDef=\"indirizzo\">\r\n\t\t\t\t\t<mat-header-cell *matHeaderCellDef> {{'indirizzo' | traduzione}} </mat-header-cell>\r\n\t\t\t\t\t<mat-cell *matCellDef=\"let element\">\r\n\t\t\t\t\t\t<span *ngIf=\"!element.indirizzo.estero\"> {{element.indirizzo.indirizzo}}\r\n\t\t\t\t\t\t\t{{element.indirizzo.civico}} {{element.indirizzo.cap}} -\r\n\t\t\t\t\t\t\t{{element.indirizzo.comune.denominazione}} {{element.indirizzo.provinciaLabel}}</span>\r\n\t\t\t\t\t\t<span *ngIf=\"element.indirizzo.estero\"> {{element.indirizzo.nazione.denominazione}} -\r\n\t\t\t\t\t\t\t{{element.indirizzo.indirizzo}} </span>\r\n\t\t\t\t\t</mat-cell>\r\n\t\t\t\t\t<!-- <mat-hint *infoTip=\"indirizzoToltip\"></mat-hint> -->\r\n\t\t\t\t</ng-container>\r\n\r\n\t\t\t\t<!-- Preferito Column -->\r\n\t\t\t\t<ng-container matColumnDef=\"preferito\">\r\n\t\t\t\t\t<mat-header-cell *matHeaderCellDef> {{'preferito' | traduzione}} </mat-header-cell>\r\n\t\t\t\t\t<mat-cell *matCellDef=\"let element\">\r\n\t\t\t\t\t\t<!-- <mat-checkbox class=\"example-margin\" [disabled]=\"true\">\r\n\t\t\t\t\t\t</mat-checkbox> -->\r\n\t\t\t\t\t\t<!-- <mat-checkbox *ngIf=\"!element.preferito\" class=\"example-margin\" [disabled]=\"true\">\r\n\t\t\t\t\t\t</mat-checkbox> -->\r\n\t\t\t\t\t\t<mat-checkbox *ngIf=\"element.preferito\" class=\"example-margin\" [checked]=\"true\"\r\n\t\t\t\t\t\t\t[disabled]=\"true\"></mat-checkbox>\r\n\t\t\t\t\t</mat-cell>\r\n\t\t\t\t\t<!-- <mat-hint *infoTip=\"preferitoToltip\"></mat-hint> -->\r\n\t\t\t\t</ng-container>\r\n\r\n\t\t\t\t<!-- Selezione Column -->\r\n\t\t\t\t<ng-container matColumnDef=\"seleziona\">\r\n\t\t\t\t\t<mat-header-cell *matHeaderCellDef> {{'seleziona' | traduzione}}\r\n\t\t\t\t\t \t<!-- <mat-checkbox (change)=\"$event ? masterToggle() : null\"\r\n\t\t\t\t\t\t\t\t\t[checked]=\"selection.hasValue() && isAllSelected()\"\r\n\t\t\t\t\t\t\t\t\t[indeterminate]=\"selection.hasValue() && !isAllSelected()\"\r\n\t\t\t\t\t\t\t\t\tformControlName=\"selected2\">\r\n\t\t\t\t\t\t</mat-checkbox> -->\r\n\t\t\t\t\t\t<!-- <mat-hint *infoTip=\"selezionaToltip\"></mat-hint> -->\r\n\t\t\t\t\t</mat-header-cell>\r\n\r\n\t\t\t\t\t<mat-cell *matCellDef=\"let row\">\r\n\t\t\t\t\t\t<mat-checkbox\r\n\t\t\t\t\t\t\t(click)=\"$event.stopPropagation()\"\r\n\t\t\t\t\t\t\t(change)=\"$event ? selection.toggle(row) : null\"\r\n\t\t\t\t\t\t\t[checked]=\"selection.isSelected(row)\"\r\n\t\t\t\t\t\t\tformControlName=\"selected\">\r\n\t\t\t\t\t\t</mat-checkbox>\r\n\t\t\t\t\t</mat-cell>\r\n\t\t\t\t</ng-container>\r\n\r\n\t\t\t\t<mat-header-row *matHeaderRowDef=\"displayedColumns\"></mat-header-row>\r\n\t\t\t\t<mat-row *matRowDef=\"let row; columns: displayedColumns;\"></mat-row>\r\n\r\n\t\t\t</mat-table>\r\n\t\t\t<div class=\"collapse-body mt-2\">\r\n\t\t\t\t<div class=\"col-md-12\">\r\n\t\t\t\t\t<mat-error *ngIf=\"validazioneDomicilio\">\r\n\t\t\t\t\t\t{{'validation-requiredDomicilio' | traduzione }}\r\n\t\t\t\t\t</mat-error>\r\n\t\t\t\t</div>\r\n\t\t\t</div>\r\n\t\t</ng-container>\r\n\t\t<ng-template #noDomicili>\r\n\t\t\t<div class=\"collapse-body mt-2\">\r\n\t\t\t\t<div class=\"col-md-12\">\r\n\t\t\t\t\t<mat-error >\r\n\t\t\t\t\t\t{{'no-domicili' | traduzione }}\r\n\t\t\t\t\t</mat-error>\r\n\t\t\t\t</div>\r\n\t\t\t</div>\r\n\t\t</ng-template>\r\n\r\n\t\t\t<div class=\"collapse-body mt-2\" *ngIf=\"(recapiti$ | async)\">\r\n\t\t\t\t<div class=\"row\">\r\n\t\t\t\t\t<div class=\"col-12\">\r\n\t\t\t\t\t\t<mat-card>\r\n\t\t\t\t\t\t\t<lib-contatti\r\n\t\t\t\t\t\t\t\t[contatti]=\"domicilio.contatto\"\r\n\t\t\t\t\t\t\t\t[recapiti$]=\"recapiti$\"\r\n\t\t\t\t\t\t\t\t(done)=\"recapitiReady($event)\"\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t</lib-contatti>\r\n\t\t\t\t\t\t</mat-card>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</div>\r\n\t\t\t</div>\r\n\r\n\t\t</ng-container>\r\n\t</form>\r\n</mat-expansion-panel>\r\n",
styles: [""]
},] }
];
DatiDomicilioComponent.ctorParameters = () => [
{ type: MessageService }
];
DatiDomicilioComponent.propDecorators = {
domicili: [{ type: Input }],
recapiti$: [{ type: Input }],
domicilio: [{ type: Input }],
done: [{ type: Output }],
formGroupDirective: [{ type: ViewChild, args: [FormGroupDirective,] }]
};
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0aS1kb21pY2lsaW8uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IkM6L1Byb2dldHRpL0RBRy9zb3JnZW50aS9naXRsYWItc29mdHdhcmVmYWN0b3J5L2NvbW1vbi1jb21wb25lbnQtbGliL3Byb2plY3RzL3BvcnRhbC1jb21tb24tY29tcG9uZW50LWxpYi9zcmMvIiwic291cmNlcyI6WyJsaWIvZGVwb3NpdGkvY29tbW9uLWNvbXBvbmVudC9kYXRpLWRvbWljaWxpby9kYXRpLWRvbWljaWxpby5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBVSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQWEsTUFBTSxlQUFlLENBQUM7QUFDckcsT0FBTyxFQUFFLGtCQUFrQixFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM1RSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUM3RCxPQUFPLEVBQWMsT0FBTyxFQUFnQixNQUFNLE1BQU0sQ0FBQztBQUN6RCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSwrQ0FBK0MsQ0FBQztBQUN0RixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDMUQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3hELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUNqRSxPQUFPLEVBQUUsR0FBRyxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDbEUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBU2hFLE1BQU0sT0FBTyxzQkFBc0I7SUFzQ2xDLFlBQW9CLEdBQW1CO1FBQW5CLFFBQUcsR0FBSCxHQUFHLENBQWdCO1FBMUJ2QyxTQUFJLEdBQXNELElBQUksWUFBWSxFQUF1QyxDQUFDO1FBSWxILHFCQUFnQixHQUFhLENBQUMsTUFBTSxFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLFdBQVcsQ0FBQyxDQUFDO1FBVXZGLHFCQUFnQixHQUFHLElBQUksT0FBTyxFQUUzQixDQUFDO1FBRUoseUJBQW9CLEdBQVksS0FBSyxDQUFDO1FBRXRDLGVBQVUsR0FBRyxNQUFNLENBQUM7UUFDcEIsaUJBQVksR0FBRyxRQUFRLENBQUM7UUFDeEIsb0JBQWUsR0FBRyxXQUFXLENBQUM7UUFDOUIsb0JBQWUsR0FBRyxXQUFXLENBQUM7UUFDOUIsb0JBQWUsR0FBRyxXQUFXLENBQUM7SUFFYSxDQUFDO0lBRTVDLFFBQVE7UUFFUCw4Q0FBOEM7UUFDOUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBRXpDLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDOUIsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDO1FBRWpCLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFO1lBQ3BCLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUNyQixLQUFLLEdBQUcsS0FBSyxDQUFDO1NBQ2Q7UUFFRCxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksa0JBQWtCLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3hELElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxjQUFjLENBQVksS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRTFELElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1FBRXhCLE1BQU0sU0FBUyxHQUFHLElBQUksV0FBVyxDQUFDLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsdUJBQXVCLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7UUFDdEcsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsV0FBVyxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBRTdDLE1BQU0sUUFBUSxHQUFHLElBQUksV0FBVyxDQUFDLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztRQUNqRSxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFVLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFFM0MsSUFBSSxDQUFDLGVBQWUsR0FBRyxTQUFTLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQzthQUMvRCxJQUFJLENBQ0osR0FBRyxDQUFDLGNBQWMsQ0FBQyxFQUFFO1lBQ3BCLElBQUksY0FBYyxJQUFJLEtBQUssRUFBRTtnQkFDNUIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsQ0FBQzthQUN2QjtRQUNGLENBQUMsQ0FBQyxFQUNGLFNBQVMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLHNCQUFzQixJQUFJLElBQUksQ0FBQyxDQUN4RCxDQUFDO1FBRUgsTUFBTSxzQkFBc0IsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FDdkQsR0FBRyxDQUFDLGNBQWMsQ0FBQyxFQUFFLENBQ3BCLHFCQUFxQixDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxTQUF1QixFQUFFLEVBQUU7WUFDMUQsU0FBUyxDQUFDLHVCQUF1QixHQUFHLGNBQWMsQ0FBQztZQUNuRCxJQUFJLGNBQWMsSUFBSSxLQUFLLEVBQUU7Z0JBQzVCLFNBQVMsQ0FBQyxRQUFRLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztnQkFDaEMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDO2dCQUM5QixTQUFTLENBQUMsUUFBUSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7Z0JBQ25DLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQzthQUN2QztRQUNGLENBQUMsQ0FDQSxDQUFDLENBQ0gsQ0FBQztRQUVGLE1BQU0saUJBQWlCLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUNwRCxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUNiLDJDQUEyQztZQUMzQyxJQUFJLENBQUMsb0JBQW9CLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztRQUNuRSxDQUFDLENBQUMsRUFDRixHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FDWixxQkFBcUIsQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxFQUFFO1lBQzFDLFNBQVMsQ0FBQyxzQkFBc0IsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFDeEYsQ0FBQyxDQUNBLENBQUMsQ0FDSCxDQUFDO1FBRUYsSUFBSSxDQUFDLFlBQVksR0FBRyxnQkFBZ0IsQ0FBQyxRQUFRLENBQzVDLHNCQUFzQixFQUN0QixpQkFBaUIsRUFDakIsSUFBSSxDQUFDLGdCQUFnQixFQUNyQixTQUFTLENBQUMsRUFBRTtZQUNYLE9BQU8sU0FBUyxDQUFDLHVCQUF1QixDQUFDLENBQUM7Z0JBQ3pDLFNBQVMsQ0FBQyxzQkFBc0IsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQTtRQUNqRCxDQUFDLEVBQ0QscUJBQXFCLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQzlDO2FBQ0MsU0FBUyxDQUFDLFNBQVMsQ0FBQyxFQUFFO1lBQ3RCLDBEQUEwRDtZQUMxRCxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQTtRQUMxQixDQUFDLENBQUMsQ0FBQztRQUVKLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxFQUFFO1lBRTlCLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLEtBQUssRUFBRTtnQkFDL0QsSUFBSSxDQUFDLG9CQUFvQixHQUFHLElBQUksQ0FBQztnQkFDakMsT0FBTyxFQUFFLGlCQUFpQixFQUFFLElBQUksRUFBRSxDQUFBO2FBQ2xDO2lCQUFNO2dCQUNOLE9BQU8sSUFBSSxDQUFBO2FBQ1g7WUFFRCxNQUFNO1lBQ04sd0NBQXdDO1lBQ3hDLGlDQUFpQztZQUNqQyxpQ0FBaUM7WUFDakMsNkNBQTZDO1lBQzdDLHVDQUF1QztRQUN4QyxDQUFDLENBQUMsQ0FBQztJQUNKLENBQUM7SUFFRCxnQkFBZ0I7UUFDZixJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsc0JBQXNCLEVBQUU7WUFDMUMsVUFBVSxDQUFDLEdBQUcsRUFBRTtnQkFDZixJQUFJLENBQUMsVUFBVSxDQUFDLElBQUk7cUJBQ2xCLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRTtvQkFDZCxJQUFJLEdBQUcsQ0FBQyxFQUFFLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxzQkFBc0IsRUFBRTt3QkFDcEQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7d0JBQzNCLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxLQUFLLENBQUM7cUJBQ2xDO2dCQUNGLENBQUMsQ0FBQyxDQUFDO1lBQ0wsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1NBQ047SUFDRixDQUFDO0lBRUQsYUFBYTtRQUNaLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUNwQyxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsR0FBRyxJQUFJLFdBQVcsRUFBRSxDQUFDO0lBQzdDLENBQUM7SUFFTSxhQUFhLENBQUMsY0FBa0Q7UUFDdEUsa0RBQWtEO1FBQ2xELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQ3pCLGNBQWMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBa0IsRUFBRSxFQUFFLENBQzVELENBQUMsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUMsQ0FDMUIsQ0FDRCxDQUFDO0lBQ0gsQ0FBQztJQUVELFdBQVc7UUFDVixJQUFJLElBQUksQ0FBQyxZQUFZLElBQUksSUFBSSxFQUFFO1lBQzlCLElBQUksQ0FBQyxZQUFZLENBQUMsV0FBVyxFQUFFLENBQUE7U0FDL0I7SUFDRixDQUFDOzs7WUExS0QsU0FBUyxTQUFDO2dCQUNWLFFBQVEsRUFBRSxvQkFBb0I7Z0JBQzlCLCt3TEFBOEM7O2FBRTlDOzs7WUFSUSxjQUFjOzs7dUJBYXJCLEtBQUs7d0JBRUwsS0FBSzt3QkFFTCxLQUFLO21CQUdMLE1BQU07aUNBV04sU0FBUyxTQUFDLGtCQUFrQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBWaWV3Q2hpbGQsIElucHV0LCBPdXRwdXQsIEV2ZW50RW1pdHRlciwgT25EZXN0cm95IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZvcm1Hcm91cERpcmVjdGl2ZSwgRm9ybUdyb3VwLCBGb3JtQ29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgTWF0VGFibGVEYXRhU291cmNlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvdGFibGUnO1xyXG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBTdWJqZWN0LCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgQ29tcG9uZW50T3V0cHV0U3RhdHVzIH0gZnJvbSAnLi4vLi4vbm9ybWFsaXp6YXppb25lL2NvbXBvbmVudC1vdXRwdXQtc3RhdHVzJztcclxuaW1wb3J0IHsgRG9taWNpbGlvRFRPIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2RvbWljaWxpby1kdG8nO1xyXG5pbXBvcnQgeyBDb250YXR0b0RUTyB9IGZyb20gJy4uLy4uL21vZGVscy9jb250YXR0by1kdG8nO1xyXG5pbXBvcnQgeyBTZWxlY3Rpb25Nb2RlbCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2xsZWN0aW9ucyc7XHJcbmltcG9ydCB7IENvbXBvbmVudFJlZHVjZXIgfSBmcm9tICcuLi8uLi91dGlscy9jb21wb25lbnQtcmVkdWNlcic7XHJcbmltcG9ydCB7IG1hcCwgc2hhcmVSZXBsYXksIHN0YXJ0V2l0aCwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBNZXNzYWdlU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL21lc3NhZ2Uuc2VydmljZSc7XHJcbmltcG9ydCB7IERvbWljaWxpbyB9IGZyb20gJy4uLy4uL21vZGVscy9wb3J0YWxlL2RvbWljaWxpbyc7XHJcbmltcG9ydCB7IFJlY2FwaXRvIH0gZnJvbSAnLi4vLi4vbW9kZWxzL3BvcnRhbGUvcmVjYXBpdG8nO1xyXG5cclxuQENvbXBvbmVudCh7XHJcblx0c2VsZWN0b3I6ICdsaWItZGF0aS1kb21pY2lsaW8nLFxyXG5cdHRlbXBsYXRlVXJsOiAnLi9kYXRpLWRvbWljaWxpby5jb21wb25lbnQuaHRtbCcsXHJcblx0c3R5bGVVcmxzOiBbJy4vZGF0aS1kb21pY2lsaW8uY29tcG9uZW50LmNzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBEYXRpRG9taWNpbGlvQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xyXG5cclxuXHRmb3JtOiBGb3JtR3JvdXA7XHJcblxyXG5cdEBJbnB1dCgpIGRvbWljaWxpOiBBcnJheTxEb21pY2lsaW8+O1xyXG5cclxuXHRASW5wdXQoKSByZWNhcGl0aSQ6IE9ic2VydmFibGU8QXJyYXk8UmVjYXBpdG8+PjtcclxuXHJcblx0QElucHV0KClcclxuXHRkb21pY2lsaW86IERvbWljaWxpb0RUTztcclxuXHJcblx0QE91dHB1dCgpXHJcblx0ZG9uZTogRXZlbnRFbWl0dGVyPENvbXBvbmVudE91dHB1dFN0YXR1czxEb21pY2lsaW9EVE8+PiA9IG5ldyBFdmVudEVtaXR0ZXI8Q29tcG9uZW50T3V0cHV0U3RhdHVzPERvbWljaWxpb0RUTz4+KCk7XHJcblxyXG5cdHN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xyXG5cclxuXHRkaXNwbGF5ZWRDb2x1bW5zOiBzdHJpbmdbXSA9IFsndGlwbycsICdwcmVzc28nLCAnaW5kaXJpenpvJywgJ3ByZWZlcml0bycsICdzZWxlemlvbmEnXTtcclxuXHJcblx0ZGF0YVNvdXJjZTogTWF0VGFibGVEYXRhU291cmNlPGFueT47XHJcblxyXG5cdHNlbGVjdGlvbjogU2VsZWN0aW9uTW9kZWw8RG9taWNpbGlvPjtcclxuXHJcblx0QFZpZXdDaGlsZChGb3JtR3JvdXBEaXJlY3RpdmUpIGZvcm1Hcm91cERpcmVjdGl2ZTogRm9ybUdyb3VwRGlyZWN0aXZlO1xyXG5cclxuXHRjaGVja0RvbWljaWxpbyQ6IE9ic2VydmFibGU8Qm9vbGVhbj47XHJcblxyXG5cdGNoYW5nZXNSZWNhcGl0byQgPSBuZXcgU3ViamVjdDxcclxuXHRcdENvbXBvbmVudE91dHB1dFN0YXR1czwodmFsdWU6IERvbWljaWxpb0RUTykgPT4gdm9pZD5cclxuXHQ+KCk7XHJcblxyXG5cdHZhbGlkYXppb25lRG9taWNpbGlvOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG5cdHRpcG9Ub2x0aXAgPSBcInRpcG9cIjtcclxuXHRwcmVzc29Ub2x0aXAgPSBcInByZXNzb1wiO1xyXG5cdGluZGlyaXp6b1RvbHRpcCA9IFwiaW5kaXJpenpvXCI7XHJcblx0c2VsZXppb25hVG9sdGlwID0gXCJzZWxlemlvbmFcIjtcclxuXHRwcmVmZXJpdG9Ub2x0aXAgPSBcInByZWZlcml0b1wiO1xyXG5cclxuXHRjb25zdHJ1Y3Rvcihwcml2YXRlIG1zZzogTWVzc2FnZVNlcnZpY2UpIHsgfVxyXG5cclxuXHRuZ09uSW5pdCgpOiB2b2lkIHtcclxuXHJcblx0XHQvLyBjb25zb2xlLmxvZygnW2RvbWljaWxpb10nLCB0aGlzLmRvbWljaWxpbyk7XHJcblx0XHRjb25zb2xlLmxvZygnW2RvbWljaWxpXScsIHRoaXMuZG9taWNpbGkpO1xyXG5cclxuXHRcdHRoaXMuZm9ybSA9IG5ldyBGb3JtR3JvdXAoe30pO1xyXG5cdFx0bGV0IHZhbGlkID0gdHJ1ZTtcclxuXHJcblx0XHRpZiAoIXRoaXMuZG9taWNpbGlvKSB7XHJcblx0XHRcdHRoaXMuaW5pdERvbWljaWxpbygpO1xyXG5cdFx0XHR2YWxpZCA9IGZhbHNlO1xyXG5cdFx0fVxyXG5cclxuXHRcdHRoaXMuZGF0YVNvdXJjZSA9IG5ldyBNYXRUYWJsZURhdGFTb3VyY2UodGhpcy5kb21pY2lsaSk7XHJcblx0XHR0aGlzLnNlbGVjdGlvbiA9IG5ldyBTZWxlY3Rpb25Nb2RlbDxEb21pY2lsaW8+KGZhbHNlLCBbXSk7XHJcblxyXG5cdFx0dGhpcy5pbml0aWFsU2VsZWN0aW9uKCk7XHJcblxyXG5cdFx0Y29uc3QgZG9taWNpbGlvID0gbmV3IEZvcm1Db250cm9sKHsgdmFsdWU6IHRoaXMuZG9taWNpbGlvLmhhc1NlbGV6aW9uYXRvRG9taWNpbGlvLCBkaXNhYmxlZDogZmFsc2UgfSk7XHJcblx0XHR0aGlzLmZvcm0uYWRkQ29udHJvbCgnZG9taWNpbGlvJywgZG9taWNpbGlvKTtcclxuXHJcblx0XHRjb25zdCBzZWxlY3RlZCA9IG5ldyBGb3JtQ29udHJvbCh7IHZhbHVlOiAnJywgZGlzYWJsZWQ6IGZhbHNlIH0pO1xyXG5cdFx0dGhpcy5mb3JtLmFkZENvbnRyb2woJ3NlbGVjdGVkJywgc2VsZWN0ZWQpO1xyXG5cclxuXHRcdHRoaXMuY2hlY2tEb21pY2lsaW8kID0gZG9taWNpbGlvLnZhbHVlQ2hhbmdlcy5waXBlKHNoYXJlUmVwbGF5KCkpXHJcblx0XHRcdC5waXBlKFxyXG5cdFx0XHRcdHRhcChjaGVja0RvbWljaWxpbyA9PiB7XHJcblx0XHRcdFx0XHRpZiAoY2hlY2tEb21pY2lsaW8gPT0gZmFsc2UpIHtcclxuXHRcdFx0XHRcdFx0dGhpcy5zZWxlY3Rpb24uY2xlYXIoKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9KSxcclxuXHRcdFx0XHRzdGFydFdpdGgodGhpcy5kb21pY2lsaW8uaWREb21pY2lsaW9TZWxlemlvbmF0byAhPSBudWxsKVxyXG5cdFx0XHQpO1xyXG5cclxuXHRcdGNvbnN0IGNoYW5nZXNDaGVja0RvbWljaWxpbyQgPSB0aGlzLmNoZWNrRG9taWNpbGlvJC5waXBlKFxyXG5cdFx0XHRtYXAoY2hlY2tEb21pY2lsaW8gPT5cclxuXHRcdFx0XHRDb21wb25lbnRPdXRwdXRTdGF0dXMub2YodHJ1ZSwgKGRvbWljaWxpbzogRG9taWNpbGlvRFRPKSA9PiB7XHJcblx0XHRcdFx0XHRkb21pY2lsaW8uaGFzU2VsZXppb25hdG9Eb21pY2lsaW8gPSBjaGVja0RvbWljaWxpbztcclxuXHRcdFx0XHRcdGlmIChjaGVja0RvbWljaWxpbyA9PSBmYWxzZSkge1xyXG5cdFx0XHRcdFx0XHRkb21pY2lsaW8uY29udGF0dG8uZW1haWwgPSBudWxsO1xyXG5cdFx0XHRcdFx0XHRkb21pY2lsaW8uY29udGF0dG8ucGVjID0gbnVsbDtcclxuXHRcdFx0XHRcdFx0ZG9taWNpbGlvLmNvbnRhdHRvLnRlbGVmb25vID0gbnVsbDtcclxuXHRcdFx0XHRcdFx0dGhpcy5mb3JtLmdldCgnc2VsZWN0ZWQnKS5zZXRWYWx1ZSgnJyk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdCkpXHJcblx0XHQpO1xyXG5cclxuXHRcdGNvbnN0IGNoYW5nZXNEb21pY2lsaW8kID0gdGhpcy5zZWxlY3Rpb24uY2hhbmdlZC5waXBlKFxyXG5cdFx0XHR0YXAoKHZhbHVlKSA9PiB7XHJcblx0XHRcdFx0Ly8gY29uc29sZS5sb2coXCJjaGFuZ2VzRG9taWNpbGlvJFwiLCB2YWx1ZSk7XHJcblx0XHRcdFx0dGhpcy52YWxpZGF6aW9uZURvbWljaWxpbyA9IHZhbHVlLmFkZGVkLmxlbmd0aCA+IDAgPyBmYWxzZSA6IHRydWU7XHJcblx0XHRcdH0pLFxyXG5cdFx0XHRtYXAoY2hhbmdlID0+XHJcblx0XHRcdFx0Q29tcG9uZW50T3V0cHV0U3RhdHVzLm9mKHRydWUsIGRvbWljaWxpbyA9PiB7XHJcblx0XHRcdFx0XHRkb21pY2lsaW8uaWREb21pY2lsaW9TZWxlemlvbmF0byA9IGNoYW5nZS5hZGRlZC5sZW5ndGggPiAwID8gY2hhbmdlLmFkZGVkWzBdLmlkIDogbnVsbDtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0KSlcclxuXHRcdCk7XHJcblxyXG5cdFx0dGhpcy5zdWJzY3JpcHRpb24gPSBDb21wb25lbnRSZWR1Y2VyLnJlZHVjZXIzKFxyXG5cdFx0XHRjaGFuZ2VzQ2hlY2tEb21pY2lsaW8kLFxyXG5cdFx0XHRjaGFuZ2VzRG9taWNpbGlvJCxcclxuXHRcdFx0dGhpcy5jaGFuZ2VzUmVjYXBpdG8kLFxyXG5cdFx0XHRkb21pY2lsaW8gPT4ge1xyXG5cdFx0XHRcdHJldHVybiBkb21pY2lsaW8uaGFzU2VsZXppb25hdG9Eb21pY2lsaW8gP1xyXG5cdFx0XHRcdFx0ZG9taWNpbGlvLmlkRG9taWNpbGlvU2VsZXppb25hdG8gIT0gbnVsbCA6IHRydWVcclxuXHRcdFx0fSxcclxuXHRcdFx0Q29tcG9uZW50T3V0cHV0U3RhdHVzLm9mKHRydWUsIHRoaXMuZG9taWNpbGlvKVxyXG5cdFx0KVxyXG5cdFx0XHQuc3Vic2NyaWJlKGRvbWljaWxpbyA9PiB7XHJcblx0XHRcdFx0Ly8gY29uc29sZS5sb2coJ1tEYXRpRG9taWNpbGlvQ29tcG9uZW50XSBzdGF0dXMnLCBzdGF0dXMpO1xyXG5cdFx0XHRcdHRoaXMuZG9uZS5lbWl0KGRvbWljaWxpbylcclxuXHRcdFx0fSk7XHJcblxyXG5cdFx0dGhpcy5mb3JtLnNldFZhbGlkYXRvcnMoZm9ybSA9PiB7XHJcblxyXG5cdFx0XHRpZiAoZm9ybS5nZXQoJ2RvbWljaWxpbycpLnZhbHVlICYmICFmb3JtLmdldCgnc2VsZWN0ZWQnKS52YWx1ZSkge1xyXG5cdFx0XHRcdHRoaXMudmFsaWRhemlvbmVEb21pY2lsaW8gPSB0cnVlO1xyXG5cdFx0XHRcdHJldHVybiB7IHJlcXVpcmVkRG9taWNpbGlvOiB0cnVlIH1cclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRyZXR1cm4gbnVsbFxyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHQvL1RPRE9cclxuXHRcdFx0Ly8gcmV0dXJuIGZvcm0uZ2V0KCdkb21pY2lsaW8nKS52YWx1ZSAmJlxyXG5cdFx0XHQvLyBcdCFmb3JtLmdldCgnc2VsZWN0ZWQnKS52YWx1ZSA/XHJcblx0XHRcdC8vIFx0Ly8gdGhpcy5zZWxlY3Rpb24uaXNFbXB0eSgpID9cclxuXHRcdFx0Ly8gXHQvLyB0aGlzLnNlbGVjdGlvbi5zZWxlY3RlZC5sZW5ndGggPT09IDEgP1xyXG5cdFx0XHQvLyBcdHsgcmVxdWlyZWREb21pY2lsaW86IHRydWUgfSA6IG51bGw7XHJcblx0XHR9KTtcclxuXHR9XHJcblxyXG5cdGluaXRpYWxTZWxlY3Rpb24oKSB7XHJcblx0XHRpZiAodGhpcy5kb21pY2lsaW8uaWREb21pY2lsaW9TZWxlemlvbmF0bykge1xyXG5cdFx0XHRzZXRUaW1lb3V0KCgpID0+IHtcclxuXHRcdFx0XHR0aGlzLmRhdGFTb3VyY2UuZGF0YVxyXG5cdFx0XHRcdFx0LmZvckVhY2gocm93ID0+IHtcclxuXHRcdFx0XHRcdFx0aWYgKHJvdy5pZCA9PSB0aGlzLmRvbWljaWxpby5pZERvbWljaWxpb1NlbGV6aW9uYXRvKSB7XHJcblx0XHRcdFx0XHRcdFx0dGhpcy5zZWxlY3Rpb24uc2VsZWN0KHJvdyk7XHJcblx0XHRcdFx0XHRcdFx0dGhpcy52YWxpZGF6aW9uZURvbWljaWxpbyA9IGZhbHNlO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9KTtcclxuXHRcdFx0fSwgMCk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRpbml0RG9taWNpbGlvKCkge1xyXG5cdFx0dGhpcy5kb21pY2lsaW8gPSBuZXcgRG9taWNpbGlvRFRPKCk7XHJcblx0XHR0aGlzLmRvbWljaWxpby5jb250YXR0byA9IG5ldyBDb250YXR0b0RUTygpO1xyXG5cdH1cclxuXHJcblx0cHVibGljIHJlY2FwaXRpUmVhZHkocmVjYXBpdGlTdGF0dXM6IENvbXBvbmVudE91dHB1dFN0YXR1czxDb250YXR0b0RUTz4pIHtcclxuXHRcdC8vIGNvbnNvbGUubG9nKCdbcmVjYXBpdGlSZWFkeV0nLCByZWNhcGl0aVN0YXR1cyk7XHJcblx0XHR0aGlzLmNoYW5nZXNSZWNhcGl0byQubmV4dChcclxuXHRcdFx0cmVjYXBpdGlTdGF0dXMubWFwVmFsdWUoKGNvbnRhdHRvKSA9PiAoZGljaDogRG9taWNpbGlvRFRPKSA9PlxyXG5cdFx0XHRcdChkaWNoLmNvbnRhdHRvID0gY29udGF0dG8pXHJcblx0XHRcdClcclxuXHRcdCk7XHJcblx0fVxyXG5cclxuXHRuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuXHRcdGlmICh0aGlzLnN1YnNjcmlwdGlvbiAhPSBudWxsKSB7XHJcblx0XHRcdHRoaXMuc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKClcclxuXHRcdH1cclxuXHR9XHJcbn1cclxuIl19