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.

246 lines 67.9 kB
import { Component, EventEmitter, Input, Output } from '@angular/core';
import { FormControl, FormGroup, Validators } from '@angular/forms';
import { Subscription } from 'rxjs';
import { getErrorMessage } from '../../utils/validators-messages.utils';
import { ibanValidator } from "ngx-iban";
import { ModalitaPagamentoService } from '../../services/modalita-pagamento.service';
import { take } from 'rxjs/operators';
export class BonificoExtraSepaComponent {
    constructor(modalitaPagamentoService) {
        this.modalitaPagamentoService = modalitaPagamentoService;
        this.viewSessoPF = false;
        this.validateExtraSepaPersonaFisicaEmitter = new EventEmitter();
        this.resetEstremiPersonaFisicaExtraSepaFormEmitter = new EventEmitter();
        this.bonificoExtraSepaReady = new EventEmitter();
        this.personaFisicaEmitter = new EventEmitter();
        this.setComuni = new EventEmitter();
        this.getCapOptions = new EventEmitter();
        this.resetIndirizzoForm = new EventEmitter();
        this.indirizzoEmitter = new EventEmitter();
        this.ibanValidators = [Validators.required, this.extraSepaCountriesValidator(), ibanValidator(), this.noSpacesValidator()];
        this.codiceContoValidators = [Validators.required, this.ValidateNotIban, Validators.maxLength(44)];
        this.subscription = new Subscription();
        this.getErrorMessage = getErrorMessage;
        this.sepaCountries = [{ "name": "Austria", "code": "AT", "iban": "AT493200056563289974" }, { "name": "Belgium", "code": "BE", "iban": "BE65561689528896" }, { "name": "Bulgaria", "code": "BG", "iban": "BG92TTBB94006559266188" }, { "name": "Cyprus", "code": "CY", "iban": "CY52665561416772369457864437" }, { "name": "Croatia", "code": "HR", "iban": "HR5523400098663266246" }, { "name": "Denmark", "code": "DK", "iban": "DK2550515918328528" }, { "name": "Estonia", "code": "EE", "iban": "EE591286653867491786" }, { "name": "Finland", "code": "FI", "iban": "FI8479486911788598" }, { "name": "France", "code": "FR", "iban": "FR8514508000707239488738J21" }, { "name": "Germany", "code": "DE", "iban": "DE14500105174185484177" }, { "name": "Greece", "code": "GR", "iban": "GR9201494491588141549531799" }, { "name": "Ireland", "code": "IE", "iban": "IE29AIBK93115212345678" }, { "name": "Italy", "code": "IT", "iban": "IT77R0300203280648419668253" }, { "name": "Latvia", "code": "LV", "iban": "LV80BANK0000435195001" }, { "name": "Lithuania", "code": "LT", "iban": "LT275168179993645428" }, { "name": "Luxembourg", "code": "LU", "iban": "LU350106814331716425" }, { "name": "Malta", "code": "MT", "iban": "MT54WLCI12377529685589454747835" }, { "name": "Netherlands", "code": "NL", "iban": "NL13INGB6755037397" }, { "name": "Poland", "code": "PL", "iban": "PL06109024023962236263666664" }, { "name": "Portugal", "code": "PT", "iban": "PT26003506516995234369482" }, { "name": "Czech Republic", "code": "CZ", "iban": "CZ1350515343291243261222" }, { "name": "Romania", "code": "RO", "iban": "RO64RZBR2335521926768262" }, { "name": "Slovakia", "code": "SK", "iban": "SK6053419589142643828262" }, { "name": "Slovenia", "code": "SI", "iban": "SI97975426678332786" }, { "name": "Spain", "code": "ES", "iban": "ES7231904977492569944158" }, { "name": "Sweden", "code": "SE", "iban": "SE4949996195749755572136" }, { "name": "Hungary", "code": "HU", "iban": "HU42117730161111101800000000" }, { "name": "Norway", "code": "NO", "iban": "NO9386011117947" }, { "name": "Liechtenstein", "code": "LI", "iban": "LI7008800683146527484" }, { "name": "Iceland", "code": "IS", "iban": "IS140159260076545510730339" }, { "name": "Switzerland", "code": "CH", "iban": "CH4789144623328263139" }, { "name": "United Kingdom", "code": "GB", "iban": "GB09BARC20040416289669" }, { "name": "Monaco", "code": "MC", "iban": "MC2112739000407179846124F08" }, { "name": "Andorra", "code": "AD", "iban": "AD5127638574262995775744" }, { "name": "San Marino", "code": "SM", "iban": "SM86U0322509800000000270100" }, { "name": "Holy See (Vatican City State)", "code": "VA", "iban": "VA59001123000012345678" }];
        // this.initExtraSepaForm();
    }
    ngOnInit() {
        this.initExtraSepaForm();
        this.subscription.add(this.extraSepaForm.controls['codiceContoPresent'].valueChanges.subscribe((codiceContoPresent) => {
            if (codiceContoPresent) {
                this.extraSepaForm.controls['iban'].setValidators([]);
                this.extraSepaForm.controls['iban'].patchValue(null);
                this.extraSepaForm.controls['iban'].updateValueAndValidity();
                this.extraSepaForm.controls['codiceConto'].setValidators(this.codiceContoValidators);
                this.extraSepaForm.controls['codiceConto'].updateValueAndValidity();
            }
            else {
                this.extraSepaForm.controls['codiceConto'].setValidators([]);
                this.extraSepaForm.controls['codiceConto'].patchValue(null);
                this.extraSepaForm.controls['codiceConto'].updateValueAndValidity();
                this.extraSepaForm.controls['iban'].setValidators(this.ibanValidators);
                this.extraSepaForm.controls['iban'].updateValueAndValidity();
            }
        }));
        this.subscription.add(this.extraSepaForm.controls['swiftBicPresent'].valueChanges.subscribe((swiftBicPresent) => {
            if (swiftBicPresent) {
                this.extraSepaForm.controls['swift'].setValidators([Validators.required, Validators.maxLength(11), Validators.minLength(8)]);
                this.extraSepaForm.controls['swift'].updateValueAndValidity();
                this.extraSepaForm.controls['nazione'].setValidators([]);
                this.extraSepaForm.controls['nazione'].patchValue(null);
                this.extraSepaForm.controls['nazione'].updateValueAndValidity();
                this.extraSepaForm.controls['citta'].setValidators([]);
                this.extraSepaForm.controls['citta'].patchValue(null);
                this.extraSepaForm.controls['citta'].updateValueAndValidity();
                this.extraSepaForm.controls['banca'].setValidators([]);
                this.extraSepaForm.controls['banca'].patchValue(null);
                this.extraSepaForm.controls['banca'].updateValueAndValidity();
                this.extraSepaForm.controls['indirizzo'].setValidators([]);
                this.extraSepaForm.controls['indirizzo'].patchValue(null);
                this.extraSepaForm.controls['indirizzo'].updateValueAndValidity();
                this.extraSepaForm.controls['zipCode'].setValidators([]);
                this.extraSepaForm.controls['zipCode'].patchValue(null);
                this.extraSepaForm.controls['zipCode'].updateValueAndValidity();
                this.extraSepaForm.controls['civico'].setValidators([]);
                this.extraSepaForm.controls['civico'].updateValueAndValidity();
                this.extraSepaForm.controls['civico'].patchValue(null);
            }
            else {
                this.extraSepaForm.controls['swift'].setValidators([]);
                this.extraSepaForm.controls['swift'].patchValue(null);
                this.extraSepaForm.controls['swift'].updateValueAndValidity();
                this.extraSepaForm.controls['nazione'].setValidators([Validators.required]);
                this.extraSepaForm.controls['nazione'].updateValueAndValidity();
                this.extraSepaForm.controls['citta'].setValidators([Validators.required]);
                this.extraSepaForm.controls['citta'].updateValueAndValidity();
                this.extraSepaForm.controls['banca'].setValidators([Validators.required]);
                this.extraSepaForm.controls['banca'].updateValueAndValidity();
                this.extraSepaForm.controls['indirizzo'].setValidators([Validators.required]);
                this.extraSepaForm.controls['indirizzo'].updateValueAndValidity();
                this.extraSepaForm.controls['zipCode'].setValidators([Validators.required]);
                this.extraSepaForm.controls['zipCode'].updateValueAndValidity();
                this.extraSepaForm.controls['civico'].setValidators([Validators.required]);
                this.extraSepaForm.controls['civico'].updateValueAndValidity();
            }
        }));
        this.extraSepaForm.valueChanges.subscribe(() => {
            // if (this.extraSepaForm.valid) {
            const bonificoExtraSepa = {
                swift: this.extraSepaForm.get('swift').value,
                codiceContoPresent: this.extraSepaForm.get('codiceContoPresent').value,
                codiceConto: this.extraSepaForm.get('codiceConto').value,
                iban: this.extraSepaForm.get('iban').value,
                delegato: this.extraSepaForm.get('existsDelegatoRiscossione').value,
                delegatoRiscossione: this.extraSepaForm.get('existsDelegatoRiscossione').value ? this.delegato : null,
                banca: this.extraSepaForm.get('banca').value,
                filiale: this.extraSepaForm.get('citta').value,
                indirizzo: this.extraSepaForm.get('indirizzo').value,
                swiftBicPresent: this.extraSepaForm.get('swiftBicPresent').value,
                nazione: this.extraSepaForm.get('nazione').value,
                zipCode: this.extraSepaForm.get('zipCode').value,
                codiceProvincia: 'EE',
                civico: this.extraSepaForm.get('civico').value,
                indirizzoDelegato: this.extraSepaForm.get('existsDelegatoRiscossione').value === true ? this.indirizzo : null
            };
            const isFormValid = this.extraSepaForm.valid;
            const isFormDelegatoValid = this.extraSepaForm.get('existsDelegatoRiscossione').value === true ? this.isDelegatoValid && this.isIndirizzoValid : true;
            const isValid = isFormValid && isFormDelegatoValid;
            this.bonificoExtraSepaReady.emit({ bonifico: bonificoExtraSepa, isValid });
            //}
        });
    }
    initExtraSepaForm() {
        var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;
        this.extraSepaForm = new FormGroup({
            existsDelegatoRiscossione: new FormControl(this.bonificoExtraSepa != null ? this.bonificoExtraSepa.delegato : false, [Validators.required]),
            swift: new FormControl((_a = this.bonificoExtraSepa) === null || _a === void 0 ? void 0 : _a.swift, [Validators.required, Validators.maxLength(11), Validators.minLength(8)]),
            banca: new FormControl((_b = this.bonificoExtraSepa) === null || _b === void 0 ? void 0 : _b.banca, [Validators.required]),
            indirizzo: new FormControl((_c = this.bonificoExtraSepa) === null || _c === void 0 ? void 0 : _c.indirizzo, [Validators.required]),
            codiceContoPresent: new FormControl(this.bonificoExtraSepa != null ? this.bonificoExtraSepa.codiceContoPresent : false, [Validators.required]),
            codiceConto: new FormControl((_d = this.bonificoExtraSepa) === null || _d === void 0 ? void 0 : _d.codiceConto, this.codiceContoValidators),
            iban: new FormControl((_e = this.bonificoExtraSepa) === null || _e === void 0 ? void 0 : _e.iban, this.ibanValidators),
            swiftBicPresent: new FormControl(((_f = this.bonificoExtraSepa) === null || _f === void 0 ? void 0 : _f.swift) ? true : false, [Validators.required]),
            nazione: new FormControl((_g = this.bonificoExtraSepa) === null || _g === void 0 ? void 0 : _g.nazione, [Validators.required]),
            citta: new FormControl((_h = this.bonificoExtraSepa) === null || _h === void 0 ? void 0 : _h.filiale, [Validators.required]),
            zipCode: new FormControl((_j = this.bonificoExtraSepa) === null || _j === void 0 ? void 0 : _j.zipCode, [Validators.required]),
            civico: new FormControl((_k = this.bonificoExtraSepa) === null || _k === void 0 ? void 0 : _k.civico, [Validators.required]),
        });
    }
    ngOnDestroy() {
        this.subscription.unsubscribe();
    }
    onValidateExtraSepaPersonaFisica() {
        this.validateExtraSepaPersonaFisicaEmitter.emit();
    }
    onExistsDelegatoRiscossioneChange(tipo) {
        if (!tipo.value) {
            this.isDelegatoValid = true;
            this.resetEstremiPersonaFisicaExtraSepaFormEmitter.emit();
            this.resetIndirizzoForm.emit();
        }
    }
    byCode(n1, n2) {
        return (n1 === null || n1 === void 0 ? void 0 : n1.codiceCatastale) == (n2 === null || n2 === void 0 ? void 0 : n2.codiceCatastale);
    }
    ValidateNotIban(control) {
        if (!control.value) {
            return null;
        }
        const ibanRegex = /^(?:(?:IT|SM)\d{2}[A-Z]\d{22}|CY\d{2}[A-Z]\d{23}|NL\d{2}[A-Z]{4}\d{10}|LV\d{2}[A-Z]{4}\d{13}|(?:BG|BH|GB|IE)\d{2}[A-Z]{4}\d{14}|GI\d{2}[A-Z]{4}\d{15}|RO\d{2}[A-Z]{4}\d{16}|KW\d{2}[A-Z]{4}\d{22}|MT\d{2}[A-Z]{4}\d{23}|NO\d{13}|(?:DK|FI|GL|FO)\d{16}|MK\d{17}|(?:AT|EE|KZ|LU|XK)\d{18}|(?:BA|HR|LI|CH|CR)\d{19}|(?:GE|DE|LT|ME|RS)\d{20}|IL\d{21}|(?:AD|CZ|ES|MD|SA)\d{22}|PT\d{23}|(?:BE|IS)\d{24}|(?:FR|MR|MC)\d{25}|(?:AL|DO|LB|PL)\d{26}|(?:AZ|HU)\d{27}|(?:GR|MU)\d{28})$/;
        if (ibanRegex.test(control.value.toString().trim())) {
            return { codiceContoSchouldNotBeIban: true };
        }
        return null;
    }
    extraSepaCountriesValidator() {
        return (form) => {
            const iban = form.value;
            if (!iban || (iban === null || iban === void 0 ? void 0 : iban.length) < 2) {
                return null;
            }
            const countryCode = iban.substring(0, 2);
            if (this.sepaCountries.some((element) => element.code === countryCode)) {
                return { ibanSepa: true };
            }
            return null;
        };
    }
    onDelegatoRiscossioneReady(event) {
        this.delegato = event.persona;
        this.isDelegatoValid = event.isValid;
        this.personaFisicaEmitter.emit({ persona: event.persona, isValid: event.isValid });
    }
    convertToUppercase(value) {
        if (this.extraSepaForm.controls['codiceContoPresent'].value) {
            this.extraSepaForm.get('codiceConto').setValue(value.toUpperCase());
        }
        else {
            this.extraSepaForm.get('iban').setValue(value.toUpperCase());
        }
    }
    noSpacesValidator() {
        return (control) => {
            const hasSpaces = /\s/.test(control.value);
            return hasSpaces ? { spacesIban: true } : null;
        };
    }
    getComuni(siglaProvincia) {
        if (siglaProvincia) {
            this.modalitaPagamentoService.getComuni$(siglaProvincia).pipe(take(1))
                .subscribe(comuni => {
                this.setComuni.emit(comuni);
                const comune = comuni.find(comuneItem => comuneItem.codiceCatastale === this.codiceCatastale);
                this.getCapOptions.emit(comune === null || comune === void 0 ? void 0 : comune.codiceIstat);
            });
        }
        else {
            this.setComuni.emit([]);
        }
    }
    onIndirizzoReady(event) {
        this.indirizzo = event.indirizzo;
        this.isIndirizzoValid = event.isValid;
        this.indirizzoEmitter.emit({ indirizzo: event.indirizzo, isValid: event.isValid });
    }
    getCap(codiceCatastale) {
        var _a;
        if (codiceCatastale) {
            this.codiceCatastale = codiceCatastale;
        }
        const comune = (_a = this.comuni) === null || _a === void 0 ? void 0 : _a.find(comuneItem => comuneItem.codiceCatastale === codiceCatastale);
        this.getCapOptions.emit(comune === null || comune === void 0 ? void 0 : comune.codiceIstat);
    }
}
BonificoExtraSepaComponent.decorators = [
    { type: Component, args: [{
                selector: 'lib-bonifico-extra-sepa',
                template: "<ng-container [formGroup]=\"extraSepaForm\" [ngxsForm]=\"extraSepaFormPath\">\r\n\t<div class=\"row\" *ngIf=\"viewDelegato\">\r\n\t\t<div class=\"col-md-8\">\r\n\t\t\t<label id=\"existsDelegatoRiscossioneLabel\">{{ \"exists-delegato-riscossione\" | traduzione }}</label>\r\n\t\t\t<mat-radio-group class=\"radio-group\"\r\n\t\t\t\t\t\t\t\t\t\t\t aria-labelledby=\"existsDelegatoRiscossioneLabel\"\r\n\t\t\t\t\t\t\t\t\t\t\t formControlName=\"existsDelegatoRiscossione\"\r\n\t\t\t\t\t\t\t\t\t\t\t (change)=\"onExistsDelegatoRiscossioneChange($event)\">\r\n\t\t\t\t<mat-radio-button class=\"radio-button pl-2\" [value]=\"true\">\r\n\t\t\t\t\t{{ \"si\" | traduzione }}\r\n\t\t\t\t</mat-radio-button>\r\n\r\n\t\t\t\t<mat-radio-button class=\"radio-button pl-2\" [value]=\"false\">\r\n\t\t\t\t\t{{ \"no\" | traduzione }}\r\n\t\t\t\t</mat-radio-button>\r\n\t\t\t</mat-radio-group>\r\n\t\t\t<br/><br/>\r\n\t\t\t<mat-hint *infoTip=\"'exists-delegato-riscossione'\"></mat-hint>\r\n\t\t</div>\r\n\t</div>\r\n\r\n\t<div *ngIf=\"extraSepaForm.controls['existsDelegatoRiscossione'].value\" class=\"row mt-3\">\r\n\t\t<div class=\"col-12\">\r\n\t\t\t<div class=\"row mt-4\">\r\n\t\t\t\t<div class=\"col-12\">\r\n\t\t\t\t\t<lib-estremi-persona-fisica [ngxsFormPath]=\"estremiPFExtraSepaFormPath\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t[province]=\"province\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t[nazioni]=\"nazioni\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t[isPersonaFisicaValid]=\"isPersonaFisicaExtraSepaValid\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t[personaFisica]=\"bonificoExtraSepa?.delegatoRiscossione\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t[viewSessoPF]=\"viewSessoPF\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t(validatePersonaFisicaEmitter)=\"onValidateExtraSepaPersonaFisica()\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t(personaFisicaEmitter)=\"onDelegatoRiscossioneReady($event)\">\r\n\t\t\t\t\t</lib-estremi-persona-fisica>\r\n\t\t\t\t</div>\r\n\t\t\t</div>\r\n\t\t\t<lib-dati-residenza [validateAndGetResidenza]=\"validateAndGetResidenza\"></lib-dati-residenza>\r\n\t\t\t<lib-indirizzo-pagamento [ngxsFormPath]=\"indirizzoVagliaFormPath\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t [nazioni]=\"nazioni\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t [province]=\"province\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t [comuni]=\"comuni\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t [capOptions]=\"capOptions\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t [indirizzo]=\"bonificoExtraSepa?.indirizzoDelegato\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t (selectedProvinciaEmitter)=\"getComuni($event)\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t (selectedComuneEmitter)=\"getCap($event)\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t (indirizzoEmitter)=\"onIndirizzoReady($event)\">\r\n\t\t\t\t>\r\n\t\t\t</lib-indirizzo-pagamento>\r\n\t\t</div>\r\n\t</div>\r\n\r\n\t<div class=\"row\" [ngClass]=\"viewDelegato ? 'mt-4': null\">\r\n\t\t<div class=\"col-md-8\">\r\n\t\t\t<label id=\"existsBicSwiftLabel\">{{ \"exists-bic-swift\" | traduzione }}</label>\r\n\t\t\t<mat-radio-group class=\"radio-group\"\r\n\t\t\t\t\t\t\t\t\t\t\t aria-labelledby=\"existsBicSwiftLabel\"\r\n\t\t\t\t\t\t\t\t\t\t\t formControlName=\"swiftBicPresent\">\r\n\t\t\t\t<mat-radio-button class=\"radio-button pl-2\" [value]=\"true\">\r\n\t\t\t\t\t{{ \"si\" | traduzione }}\r\n\t\t\t\t</mat-radio-button>\r\n\r\n\t\t\t\t<mat-radio-button class=\"radio-button pl-2\" [value]=\"false\">\r\n\t\t\t\t\t{{ \"no\" | traduzione }}\r\n\t\t\t\t</mat-radio-button>\r\n\t\t\t</mat-radio-group>\r\n\t\t</div>\r\n\t</div>\r\n\r\n\t<div *ngIf=\"extraSepaForm.controls['swiftBicPresent'].value; else noswiftBic\" class=\"row\">\r\n\t\t<div class=\"col-md-8\">\r\n\t\t\t<mat-form-field>\r\n\t\t\t\t<input matInput placeholder=\"{{ 'required' | traduzione }}{{ 'swift' | traduzione }}\" formControlName=\"swift\"/>\r\n\t\t\t\t<!-- <mat-error *ngIf=\"extraSepaForm.controls['swift'].invalid\">\r\n\t\t\t\t\t{{ getErrorMessage(extraSepaForm.controls['swift']) | traduzione }}\r\n\t\t\t\t</mat-error> -->\r\n\t\t\t\t<mat-error *ngIf=\"extraSepaForm.controls['swift']?.hasError('required')\">\r\n\t\t\t\t\t{{ 'validation-required'| traduzione }}\r\n\t\t\t\t</mat-error>\r\n\t\t\t\t<mat-error *ngIf=\"extraSepaForm.controls['swift']?.hasError('minlength')\">\r\n\t\t\t\t\t{{ 'validation-swift-min' | traduzione }}\r\n\t\t\t\t</mat-error>\r\n\t\t\t\t<mat-error *ngIf=\"extraSepaForm.controls['swift']?.hasError('maxlength')\">\r\n\t\t\t\t\t{{ 'validation-swift-max' | traduzione }}\r\n\t\t\t\t</mat-error>\r\n\t\t\t</mat-form-field>\r\n\t\t</div>\r\n\t</div>\r\n\r\n\t<ng-template #noswiftBic>\r\n\t\t<div class=\"row my-4 mt-4\">\r\n\t\t\t<div class=\"col-md-4\">\r\n\t\t\t\t<mat-form-field>\r\n\t\t\t\t\t<mat-label>{{ 'required' | traduzione }}{{ 'nazione' | traduzione }}</mat-label>\r\n\t\t\t\t\t<mat-select [placeholder]=\"'seleziona' | traduzione\" formControlName=\"nazione\" [compareWith]=\"byCode\">\r\n\t\t\t\t\t\t<mat-option *ngFor=\"let nazione of nazioni\" [value]=\"nazione\">\r\n\t\t\t\t\t\t\t{{ nazione.denominazione }}\r\n\t\t\t\t\t\t</mat-option>\r\n\t\t\t\t\t</mat-select>\r\n\t\t\t\t\t<mat-error *ngIf=\"extraSepaForm.controls['nazione'].invalid\">\r\n\t\t\t\t\t\t{{ 'obbligatorio' | traduzione }}\r\n\t\t\t\t\t</mat-error>\r\n\t\t\t\t</mat-form-field>\r\n\t\t\t</div>\r\n\t\t\t<div class=\"col-md-4\">\r\n\t\t\t\t<mat-form-field>\r\n\t\t\t\t\t<input matInput [maxlength]=\"70\" formControlName=\"banca\" placeholder=\"{{ 'required' | traduzione }}{{ 'banca' | traduzione }}\"/>\r\n\t\t\t\t\t<mat-error *ngIf=\"extraSepaForm.controls['banca'].invalid\">\r\n\t\t\t\t\t\t{{ getErrorMessage(extraSepaForm.controls['banca']) | traduzione }}\r\n\t\t\t\t\t</mat-error>\r\n\t\t\t\t</mat-form-field>\r\n\t\t\t</div>\r\n\t\t\t<div class=\"col-md-4\">\r\n\t\t\t\t<mat-form-field>\r\n\t\t\t\t\t<input matInput [maxlength]=\"35\" placeholder=\"{{ 'required' | traduzione }}{{ 'citta' | traduzione }}\" formControlName=\"citta\"/>\r\n\t\t\t\t\t<mat-error *ngIf=\"extraSepaForm.controls['citta'].invalid\">\r\n\t\t\t\t\t\t{{ getErrorMessage(extraSepaForm.controls['citta']) | traduzione }}\r\n\t\t\t\t\t</mat-error>\r\n\t\t\t\t</mat-form-field>\r\n\t\t\t</div>\r\n\t\t</div>\r\n\t\t<div class=\"row mt-4\">\r\n\t\t\t<div class=\"col-md-4\">\r\n\t\t\t\t<mat-form-field>\r\n\t\t\t\t\t<input matInput [maxlength]=\"70\" formControlName=\"indirizzo\" placeholder=\"{{ 'required' | traduzione }}{{ 'indirizzo' | traduzione }}\"/>\r\n\t\t\t\t\t<mat-error *ngIf=\"extraSepaForm.controls['indirizzo'].invalid\">\r\n\t\t\t\t\t\t{{ getErrorMessage(extraSepaForm.controls['indirizzo']) | traduzione }}\r\n\t\t\t\t\t</mat-error>\r\n\t\t\t\t</mat-form-field>\r\n\t\t\t</div>\r\n\t\t\t<div class=\"col-md-4\">\r\n\t\t\t\t<mat-form-field>\r\n\t\t\t\t\t<input matInput [maxlength]=\"16\" placeholder=\"{{ 'required' | traduzione }}{{ 'civico' | traduzione }}\" formControlName=\"civico\"/>\r\n\t\t\t\t\t<mat-error *ngIf=\"extraSepaForm.controls['civico'].invalid\">\r\n\t\t\t\t\t\t{{ getErrorMessage(extraSepaForm.controls['civico']) | traduzione }}\r\n\t\t\t\t\t</mat-error>\r\n\t\t\t\t</mat-form-field>\r\n\t\t\t</div>\r\n\t\t\t<div class=\"col-md-4\">\r\n\t\t\t\t<mat-form-field>\r\n\t\t\t\t\t<input matInput [maxlength]=\"16\" placeholder=\"{{ 'required' | traduzione }}{{ 'cap-estero' | traduzione }}\" formControlName=\"zipCode\"/>\r\n\t\t\t\t\t<mat-error *ngIf=\"extraSepaForm.controls['zipCode'].invalid\">\r\n\t\t\t\t\t\t{{ getErrorMessage(extraSepaForm.controls['zipCode']) | traduzione }}\r\n\t\t\t\t\t</mat-error>\r\n\t\t\t\t</mat-form-field>\r\n\t\t\t</div>\r\n\t\t</div>\r\n\t</ng-template>\r\n\r\n\t<div class=\"row mt-4\">\r\n\t\t<div class=\"col-md-8\">\r\n\t\t\t<mat-radio-group class=\"radio-group\" aria-labelledby=\"codiceContoPresentLabel\" formControlName=\"codiceContoPresent\">\r\n\t\t\t\t<mat-radio-button class=\"radio-button pl-2\" [value]=\"true\">\r\n\t\t\t\t\t{{ \"codice-conto\" | traduzione }}\r\n\t\t\t\t</mat-radio-button>\r\n\r\n\t\t\t\t<mat-radio-button class=\"radio-button pl-2\" [value]=\"false\">\r\n\t\t\t\t\t{{ \"codice-iban\" | traduzione }}\r\n\t\t\t\t</mat-radio-button>\r\n\t\t\t</mat-radio-group>\r\n\t\t</div>\r\n\t</div>\r\n\r\n\t<div class=\"row mt-4\">\r\n\t\t<div class=\"col-md-8\" *ngIf=\"extraSepaForm.controls['codiceContoPresent'].value; else iban\">\r\n\t\t\t<mat-form-field>\r\n\t\t\t\t<input matInput placeholder=\"{{ 'required' | traduzione }}{{ 'codice-conto' | traduzione }}\"\r\n\t\t\t\t\t\t\t formControlName=\"codiceConto\"\r\n\t\t\t\t\t\t\t (input)=\"convertToUppercase($event.target.value)\"/>\r\n\t\t\t\t<mat-error *ngIf=\"extraSepaForm.controls['codiceConto'].invalid\">\r\n\t\t\t\t\t{{ getErrorMessage(extraSepaForm.controls['codiceConto']) | traduzione }}\r\n\t\t\t\t</mat-error>\r\n\t\t\t</mat-form-field>\r\n\t\t</div>\r\n\r\n\t\t<ng-template #iban>\r\n\t\t\t<div class=\"col-md-8\">\r\n\t\t\t\t<mat-form-field>\r\n\t\t\t\t\t<input matInput placeholder=\"{{ 'required' | traduzione }}{{ 'codice-iban' | traduzione }}\"\r\n\t\t\t\t\t\t\t\t formControlName=\"iban\"\r\n\t\t\t\t\t\t\t\t (input)=\"convertToUppercase($event.target.value)\"/>\r\n\t\t\t\t\t<mat-error *ngIf=\"extraSepaForm.controls['iban'].invalid\">\r\n\t\t\t\t\t\t{{ getErrorMessage(extraSepaForm.controls['iban']) | traduzione }}\r\n\t\t\t\t\t</mat-error>\r\n\t\t\t\t</mat-form-field>\r\n\t\t\t</div>\r\n\t\t</ng-template>\r\n\t</div>\r\n</ng-container>\r\n",
                styles: [""]
            },] }
];
BonificoExtraSepaComponent.ctorParameters = () => [
    { type: ModalitaPagamentoService }
];
BonificoExtraSepaComponent.propDecorators = {
    viewDelegato: [{ type: Input }],
    bonificoExtraSepa: [{ type: Input }],
    isPersonaFisicaExtraSepaValid: [{ type: Input }],
    nazioni: [{ type: Input }],
    province: [{ type: Input }],
    comuni: [{ type: Input }],
    capOptions: [{ type: Input }],
    extraSepaFormPath: [{ type: Input }],
    estremiPFExtraSepaFormPath: [{ type: Input }],
    viewSessoPF: [{ type: Input }],
    validateAndGetResidenza: [{ type: Input }],
    indirizzoVagliaFormPath: [{ type: Input }],
    validateExtraSepaPersonaFisicaEmitter: [{ type: Output }],
    resetEstremiPersonaFisicaExtraSepaFormEmitter: [{ type: Output }],
    bonificoExtraSepaReady: [{ type: Output }],
    personaFisicaEmitter: [{ type: Output }],
    setComuni: [{ type: Output }],
    getCapOptions: [{ type: Output }],
    resetIndirizzoForm: [{ type: Output }],
    indirizzoEmitter: [{ type: Output }]
};
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm9uaWZpY28tZXh0cmEtc2VwYS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiQzovUHJvZ2V0dGkvREFHL3NvcmdlbnRpL2dpdGxhYi1zb2Z0d2FyZWZhY3RvcnkvY29tbW9uLWNvbXBvbmVudC1saWIvcHJvamVjdHMvcG9ydGFsLWNvbW1vbi1jb21wb25lbnQtbGliL3NyYy8iLCJzb3VyY2VzIjpbImxpYi9tb2RhbGl0YS1wYWdhbWVudG8vY29tcG9uZW50cy9ib25pZmljby1leHRyYS1zZXBhL2JvbmlmaWNvLWV4dHJhLXNlcGEuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDN0UsT0FBTyxFQUFrQixXQUFXLEVBQUUsU0FBUyxFQUFlLFVBQVUsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQ2hHLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFFbEMsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLHVDQUF1QyxDQUFDO0FBQ3RFLE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSxVQUFVLENBQUM7QUFFdkMsT0FBTyxFQUFDLHdCQUF3QixFQUFDLE1BQU0sMkNBQTJDLENBQUM7QUFDbkYsT0FBTyxFQUFDLElBQUksRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBT3BDLE1BQU0sT0FBTywwQkFBMEI7SUFzRnRDLFlBQW9CLHdCQUFrRDtRQUFsRCw2QkFBd0IsR0FBeEIsd0JBQXdCLENBQTBCO1FBeER0RSxnQkFBVyxHQUFZLEtBQUssQ0FBQztRQVM3QiwwQ0FBcUMsR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFDO1FBR2pFLGtEQUE2QyxHQUFHLElBQUksWUFBWSxFQUFRLENBQUM7UUFHekUsMkJBQXNCLEdBQUcsSUFBSSxZQUFZLEVBQTBELENBQUM7UUFHcEcseUJBQW9CLEdBQUcsSUFBSSxZQUFZLEVBQXlELENBQUM7UUFHakcsY0FBUyxHQUFHLElBQUksWUFBWSxFQUFpQixDQUFDO1FBRzlDLGtCQUFhLEdBQUcsSUFBSSxZQUFZLEVBQVUsQ0FBQztRQUczQyx1QkFBa0IsR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFDO1FBRzlDLHFCQUFnQixHQUFHLElBQUksWUFBWSxFQUFtRCxDQUFDO1FBSXZGLG1CQUFjLEdBQUcsQ0FBQyxVQUFVLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQywyQkFBMkIsRUFBRSxFQUFFLGFBQWEsRUFBRSxFQUFFLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDLENBQUM7UUFFdEgsMEJBQXFCLEdBQUcsQ0FBQyxVQUFVLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxlQUFlLEVBQUUsVUFBVSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBRXRGLGlCQUFZLEdBQWlCLElBQUksWUFBWSxFQUFFLENBQUM7UUFFeEQsb0JBQWUsR0FBRyxlQUFlLENBQUM7UUFFbEMsa0JBQWEsR0FBRyxDQUFDLEVBQUMsTUFBTSxFQUFDLFNBQVMsRUFBQyxNQUFNLEVBQUMsSUFBSSxFQUFDLE1BQU0sRUFBQyxzQkFBc0IsRUFBQyxFQUFDLEVBQUMsTUFBTSxFQUFDLFNBQVMsRUFBQyxNQUFNLEVBQUMsSUFBSSxFQUFDLE1BQU0sRUFBQyxrQkFBa0IsRUFBQyxFQUFDLEVBQUMsTUFBTSxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUMsSUFBSSxFQUFDLE1BQU0sRUFBQyx3QkFBd0IsRUFBQyxFQUFDLEVBQUMsTUFBTSxFQUFDLFFBQVEsRUFBQyxNQUFNLEVBQUMsSUFBSSxFQUFDLE1BQU0sRUFBQyw4QkFBOEIsRUFBQyxFQUFDLEVBQUMsTUFBTSxFQUFDLFNBQVMsRUFBQyxNQUFNLEVBQUMsSUFBSSxFQUFDLE1BQU0sRUFBQyx1QkFBdUIsRUFBQyxFQUFDLEVBQUMsTUFBTSxFQUFDLFNBQVMsRUFBQyxNQUFNLEVBQUMsSUFBSSxFQUFDLE1BQU0sRUFBQyxvQkFBb0IsRUFBQyxFQUFDLEVBQUMsTUFBTSxFQUFDLFNBQVMsRUFBQyxNQUFNLEVBQUMsSUFBSSxFQUFDLE1BQU0sRUFBQyxzQkFBc0IsRUFBQyxFQUFDLEVBQUMsTUFBTSxFQUFDLFNBQVMsRUFBQyxNQUFNLEVBQUMsSUFBSSxFQUFDLE1BQU0sRUFBQyxvQkFBb0IsRUFBQyxFQUFDLEVBQUMsTUFBTSxFQUFDLFFBQVEsRUFBQyxNQUFNLEVBQUMsSUFBSSxFQUFDLE1BQU0sRUFBQyw2QkFBNkIsRUFBQyxFQUFDLEVBQUMsTUFBTSxFQUFDLFNBQVMsRUFBQyxNQUFNLEVBQUMsSUFBSSxFQUFDLE1BQU0sRUFBQyx3QkFBd0IsRUFBQyxFQUFDLEVBQUMsTUFBTSxFQUFDLFFBQVEsRUFBQyxNQUFNLEVBQUMsSUFBSSxFQUFDLE1BQU0sRUFBQyw2QkFBNkIsRUFBQyxFQUFDLEVBQUMsTUFBTSxFQUFDLFNBQVMsRUFBQyxNQUFNLEVBQUMsSUFBSSxFQUFDLE1BQU0sRUFBQyx3QkFBd0IsRUFBQyxFQUFDLEVBQUMsTUFBTSxFQUFDLE9BQU8sRUFBQyxNQUFNLEVBQUMsSUFBSSxFQUFDLE1BQU0sRUFBQyw2QkFBNkIsRUFBQyxFQUFDLEVBQUMsTUFBTSxFQUFDLFFBQVEsRUFBQyxNQUFNLEVBQUMsSUFBSSxFQUFDLE1BQU0sRUFBQyx1QkFBdUIsRUFBQyxFQUFDLEVBQUMsTUFBTSxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsSUFBSSxFQUFDLE1BQU0sRUFBQyxzQkFBc0IsRUFBQyxFQUFDLEVBQUMsTUFBTSxFQUFDLFlBQVksRUFBQyxNQUFNLEVBQUMsSUFBSSxFQUFDLE1BQU0sRUFBQyxzQkFBc0IsRUFBQyxFQUFDLEVBQUMsTUFBTSxFQUFDLE9BQU8sRUFBQyxNQUFNLEVBQUMsSUFBSSxFQUFDLE1BQU0sRUFBQyxpQ0FBaUMsRUFBQyxFQUFDLEVBQUMsTUFBTSxFQUFDLGFBQWEsRUFBQyxNQUFNLEVBQUMsSUFBSSxFQUFDLE1BQU0sRUFBQyxvQkFBb0IsRUFBQyxFQUFDLEVBQUMsTUFBTSxFQUFDLFFBQVEsRUFBQyxNQUFNLEVBQUMsSUFBSSxFQUFDLE1BQU0sRUFBQyw4QkFBOEIsRUFBQyxFQUFDLEVBQUMsTUFBTSxFQUFDLFVBQVUsRUFBQyxNQUFNLEVBQUMsSUFBSSxFQUFDLE1BQU0sRUFBQywyQkFBMkIsRUFBQyxFQUFDLEVBQUMsTUFBTSxFQUFDLGdCQUFnQixFQUFDLE1BQU0sRUFBQyxJQUFJLEVBQUMsTUFBTSxFQUFDLDBCQUEwQixFQUFDLEVBQUMsRUFBQyxNQUFNLEVBQUMsU0FBUyxFQUFDLE1BQU0sRUFBQyxJQUFJLEVBQUMsTUFBTSxFQUFDLDBCQUEwQixFQUFDLEVBQUMsRUFBQyxNQUFNLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQyxJQUFJLEVBQUMsTUFBTSxFQUFDLDBCQUEwQixFQUFDLEVBQUMsRUFBQyxNQUFNLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQyxJQUFJLEVBQUMsTUFBTSxFQUFDLHFCQUFxQixFQUFDLEVBQUMsRUFBQyxNQUFNLEVBQUMsT0FBTyxFQUFDLE1BQU0sRUFBQyxJQUFJLEVBQUMsTUFBTSxFQUFDLDBCQUEwQixFQUFDLEVBQUMsRUFBQyxNQUFNLEVBQUMsUUFBUSxFQUFDLE1BQU0sRUFBQyxJQUFJLEVBQUMsTUFBTSxFQUFDLDBCQUEwQixFQUFDLEVBQUMsRUFBQyxNQUFNLEVBQUMsU0FBUyxFQUFDLE1BQU0sRUFBQyxJQUFJLEVBQUMsTUFBTSxFQUFDLDhCQUE4QixFQUFDLEVBQUMsRUFBQyxNQUFNLEVBQUMsUUFBUSxFQUFDLE1BQU0sRUFBQyxJQUFJLEVBQUMsTUFBTSxFQUFDLGlCQUFpQixFQUFDLEVBQUMsRUFBQyxNQUFNLEVBQUMsZUFBZSxFQUFDLE1BQU0sRUFBQyxJQUFJLEVBQUMsTUFBTSxFQUFDLHVCQUF1QixFQUFDLEVBQUMsRUFBQyxNQUFNLEVBQUMsU0FBUyxFQUFDLE1BQU0sRUFBQyxJQUFJLEVBQUMsTUFBTSxFQUFDLDRCQUE0QixFQUFDLEVBQUMsRUFBQyxNQUFNLEVBQUMsYUFBYSxFQUFDLE1BQU0sRUFBQyxJQUFJLEVBQUMsTUFBTSxFQUFDLHVCQUF1QixFQUFDLEVBQUMs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Q2pDLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDO1FBQ3RDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsRUFBRSxTQUFTLEVBQUUsS0FBSyxDQUFDLFNBQVMsRUFBRSxPQUFPLEVBQUUsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7SUFDcEYsQ0FBQztJQUVELE1BQU0sQ0FBQyxlQUF1Qjs7UUFDN0IsSUFBSSxlQUFlLEVBQUU7WUFDcEIsSUFBSSxDQUFDLGVBQWUsR0FBRyxlQUFlLENBQUM7U0FDdkM7UUFDRCxNQUFNLE1BQU0sU0FBRyxJQUFJLENBQUMsTUFBTSwwQ0FBRSxJQUFJLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsZUFBZSxLQUFLLGVBQWUsQ0FBQyxDQUFDO1FBQy9GLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLE1BQU0sYUFBTixNQUFNLHVCQUFOLE1BQU0sQ0FBRSxXQUFXLENBQUMsQ0FBQztJQUM5QyxDQUFDOzs7WUEvU0QsU0FBUyxTQUFDO2dCQUNWLFFBQVEsRUFBRSx5QkFBeUI7Z0JBQ25DLDRwU0FBbUQ7O2FBRW5EOzs7WUFQTyx3QkFBd0I7OzsyQkFVOUIsS0FBSztnQ0FHTCxLQUFLOzRDQUdMLEtBQUs7c0JBR0wsS0FBSzt1QkFHTCxLQUFLO3FCQUdMLEtBQUs7eUJBR0wsS0FBSztnQ0FHTCxLQUFLO3lDQUdMLEtBQUs7MEJBR0wsS0FBSztzQ0FHTCxLQUFLO3NDQUdMLEtBQUs7b0RBR0wsTUFBTTs0REFHTixNQUFNO3FDQUdOLE1BQU07bUNBR04sTUFBTTt3QkFHTixNQUFNOzRCQUdOLE1BQU07aUNBR04sTUFBTTsrQkFHTixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0fSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtBYnN0cmFjdENvbnRyb2wsIEZvcm1Db250cm9sLCBGb3JtR3JvdXAsIFZhbGlkYXRvckZuLCBWYWxpZGF0b3JzfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7U3Vic2NyaXB0aW9ufSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHtDb211bmVNb2RlbCwgRGF0aVBlcnNvbmFGaXNpY2FNb2RlbCwgSW5kaXJpenpvTW9kZWwsIExvY2FsaXRhTW9kZWwsIE5hemlvbmVNb2RlbCwgVmVyaWZpY2FQZlJlc3BvbnNlRFRPfSBmcm9tICcuLi8uLi9tb2RlbHMvZXN0cmVtaS1wZXJzb25hLWZpc2ljYS5tb2RlbCc7XHJcbmltcG9ydCB7Z2V0RXJyb3JNZXNzYWdlfSBmcm9tICcuLi8uLi91dGlscy92YWxpZGF0b3JzLW1lc3NhZ2VzLnV0aWxzJztcclxuaW1wb3J0IHtpYmFuVmFsaWRhdG9yfSBmcm9tIFwibmd4LWliYW5cIjtcclxuaW1wb3J0IHtCb25pZmljb0V4dHJhU2VwYU1vZGVsfSBmcm9tICcuLi8uLi9tb2RlbHMvYm9uaWZpY28tZXh0cmEtc2VwYS5tb2RlbCc7XHJcbmltcG9ydCB7TW9kYWxpdGFQYWdhbWVudG9TZXJ2aWNlfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9tb2RhbGl0YS1wYWdhbWVudG8uc2VydmljZSc7XHJcbmltcG9ydCB7dGFrZX0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcblx0c2VsZWN0b3I6ICdsaWItYm9uaWZpY28tZXh0cmEtc2VwYScsXHJcblx0dGVtcGxhdGVVcmw6ICcuL2JvbmlmaWNvLWV4dHJhLXNlcGEuY29tcG9uZW50Lmh0bWwnLFxyXG5cdHN0eWxlVXJsczogWycuL2JvbmlmaWNvLWV4dHJhLXNlcGEuY29tcG9uZW50LnNjc3MnXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIEJvbmlmaWNvRXh0cmFTZXBhQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuXHJcblx0QElucHV0KClcclxuXHR2aWV3RGVsZWdhdG86IGJvb2xlYW47XHJcblxyXG5cdEBJbnB1dCgpXHJcblx0Ym9uaWZpY29FeHRyYVNlcGE6IEJvbmlmaWNvRXh0cmFTZXBhTW9kZWw7XHJcblxyXG5cdEBJbnB1dCgpXHJcblx0aXNQZXJzb25hRmlzaWNhRXh0cmFTZXBhVmFsaWQ6IGJvb2xlYW47XHJcblxyXG5cdEBJbnB1dCgpXHJcblx0bmF6aW9uaTogTmF6aW9uZU1vZGVsW107XHJcblxyXG5cdEBJbnB1dCgpXHJcblx0cHJvdmluY2U6IExvY2FsaXRhTW9kZWxbXTtcclxuXHJcblx0QElucHV0KClcclxuXHRjb211bmk6IENvbXVuZU1vZGVsW107XHJcblxyXG5cdEBJbnB1dCgpXHJcblx0Y2FwT3B0aW9uczogc3RyaW5nW107XHJcblxyXG5cdEBJbnB1dCgpXHJcblx0ZXh0cmFTZXBhRm9ybVBhdGg6IHN0cmluZztcclxuXHJcblx0QElucHV0KClcclxuXHRlc3RyZW1pUEZFeHRyYVNlcGFGb3JtUGF0aDogc3RyaW5nO1xyXG5cclxuXHRASW5wdXQoKVxyXG5cdHZpZXdTZXNzb1BGOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG5cdEBJbnB1dCgpXHJcblx0dmFsaWRhdGVBbmRHZXRSZXNpZGVuemE6IFZlcmlmaWNhUGZSZXNwb25zZURUTztcclxuXHJcblx0QElucHV0KClcclxuXHRpbmRpcml6em9WYWdsaWFGb3JtUGF0aDogc3RyaW5nO1xyXG5cclxuXHRAT3V0cHV0KClcclxuXHR2YWxpZGF0ZUV4dHJhU2VwYVBlcnNvbmFGaXNpY2FFbWl0dGVyID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xyXG5cclxuXHRAT3V0cHV0KClcclxuXHRyZXNldEVzdHJlbWlQZXJzb25hRmlzaWNhRXh0cmFTZXBhRm9ybUVtaXR0ZXIgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XHJcblxyXG5cdEBPdXRwdXQoKVxyXG5cdGJvbmlmaWNvRXh0cmFTZXBhUmVhZHkgPSBuZXcgRXZlbnRFbWl0dGVyPHsgYm9uaWZpY286IEJvbmlmaWNvRXh0cmFTZXBhTW9kZWwsIGlzVmFsaWQ6IGJvb2xlYW4gfT4oKTtcclxuXHJcblx0QE91dHB1dCgpXHJcblx0cGVyc29uYUZpc2ljYUVtaXR0ZXIgPSBuZXcgRXZlbnRFbWl0dGVyPHsgcGVyc29uYTogRGF0aVBlcnNvbmFGaXNpY2FNb2RlbCwgaXNWYWxpZDogYm9vbGVhbiB9PigpO1xyXG5cclxuXHRAT3V0cHV0KClcclxuXHRzZXRDb211bmkgPSBuZXcgRXZlbnRFbWl0dGVyPENvbXVuZU1vZGVsW10+KCk7XHJcblxyXG5cdEBPdXRwdXQoKVxyXG5cdGdldENhcE9wdGlvbnMgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcclxuXHJcblx0QE91dHB1dCgpXHJcblx0cmVzZXRJbmRpcml6em9Gb3JtID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xyXG5cclxuXHRAT3V0cHV0KClcclxuXHRpbmRpcml6em9FbWl0dGVyID0gbmV3IEV2ZW50RW1pdHRlcjx7IGluZGlyaXp6bzogSW5kaXJpenpvTW9kZWwsIGlzVmFsaWQ6IGJvb2xlYW4gfT4oKTtcclxuXHJcblx0ZXh0cmFTZXBhRm9ybTogRm9ybUdyb3VwO1xyXG5cclxuXHRpYmFuVmFsaWRhdG9ycyA9IFtWYWxpZGF0b3JzLnJlcXVpcmVkLCB0aGlzLmV4dHJhU2VwYUNvdW50cmllc1ZhbGlkYXRvcigpLFx0aWJhblZhbGlkYXRvcigpLCB0aGlzLm5vU3BhY2VzVmFsaWRhdG9yKCldO1xyXG5cclxuXHRjb2RpY2VDb250b1ZhbGlkYXRvcnMgPSBbVmFsaWRhdG9ycy5yZXF1aXJlZCxcdHRoaXMuVmFsaWRhdGVOb3RJYmFuLCBWYWxpZGF0b3JzLm1heExlbmd0aCg0NCldO1xyXG5cclxuXHRwcml2YXRlIHN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uID0gbmV3IFN1YnNjcmlwdGlvbigpO1xyXG5cclxuXHRnZXRFcnJvck1lc3NhZ2UgPSBnZXRFcnJvck1lc3NhZ2U7XHJcblxyXG5cdHNlcGFDb3VudHJpZXMgPSBbe1wibmFtZVwiOlwiQXVzdHJpYVwiLFwiY29kZVwiOlwiQVRcIixcImliYW5cIjpcIkFUNDkzMjAwMDU2NTYzMjg5OTc0XCJ9LHtcIm5hbWVcIjpcIkJlbGdpdW1cIixcImNvZGVcIjpcIkJFXCIsXCJpYmFuXCI6XCJCRTY1NTYxNjg5NTI4ODk2XCJ9LHtcIm5hbWVcIjpcIkJ1bGdhcmlhXCIsXCJjb2RlXCI6XCJCR1wiLFwiaWJhblwiOlwiQkc5MlRUQkI5NDAwNjU1OTI2NjE4OFwifSx7XCJuYW1lXCI6XCJDeXBydXNcIixcImNvZGVcIjpcIkNZXCIsXCJpYmFuXCI6XCJDWTUyNjY1NTYxNDE2NzcyMzY5NDU3ODY0NDM3XCJ9LHtcIm5hbWVcIjpcIkNyb2F0aWFcIixcImNvZGVcIjpcIkhSXCIsXCJpYmFuXCI6XCJIUjU1MjM0MDAwOTg2NjMyNjYyNDZcIn0se1wibmFtZVwiOlwiRGVubWFya1wiLFwiY29kZVwiOlwiREtcIixcImliYW5cIjpcIkRLMjU1MDUxNTkxODMyODUyOFwifSx7XCJuYW1lXCI6XCJFc3RvbmlhXCIsXCJjb2RlXCI6XCJFRVwiLFwiaWJhblwiOlwiRUU1OTEyODY2NTM4Njc0OTE3ODZcIn0se1wibmFtZVwiOlwiRmlubGFuZFwiLFwiY29kZVwiOlwiRklcIixcImliYW5cIjpcIkZJODQ3OTQ4NjkxMTc4ODU5OFwifSx7XCJuYW1lXCI6XCJGcmFuY2VcIixcImNvZGVcIjpcIkZSXCIsXCJpYmFuXCI6XCJGUjg1MTQ1MDgwMDA3MDcyMzk0ODg3MzhKMjFcIn0se1wibmFtZVwiOlwiR2VybWFueVwiLFwiY29kZVwiOlwiREVcIixcImliYW5cIjpcIkRFMTQ1MDAxMDUxNzQxODU0ODQxNzdcIn0se1wibmFtZVwiOlwiR3JlZWNlXCIsXCJjb2RlXCI6XCJHUlwiLFwiaWJhblwiOlwiR1I5MjAxNDk0NDkxNTg4MTQxNTQ5NTMxNzk5XCJ9LHtcIm5hbWVcIjpcIklyZWxhbmRcIixcImNvZGVcIjpcIklFXCIsXCJpYmFuXCI6XCJJRTI5QUlCSzkzMTE1MjEyMzQ1Njc4XCJ9LHtcIm5hbWVcIjpcIkl0YWx5XCIsXCJjb2RlXCI6XCJJVFwiLFwiaWJhblwiOlwiSVQ3N1IwMzAwMjAzMjgwNjQ4NDE5NjY4MjUzXCJ9LHtcIm5hbWVcIjpcIkxhdHZpYVwiLFwiY29kZVwiOlwiTFZcIixcImliYW5cIjpcIkxWODBCQU5LMDAwMDQzNTE5NTAwMVwifSx7XCJuYW1lXCI6XCJMaXRodWFuaWFcIixcImNvZGVcIjpcIkxUXCIsXCJpYmFuXCI6XCJMVDI3NTE2ODE3OTk5MzY0NTQyOFwifSx7XCJuYW1lXCI6XCJMdXhlbWJvdXJnXCIsXCJjb2RlXCI6XCJMVVwiLFwiaWJhblwiOlwiTFUzNTAxMDY4MTQzMzE3MTY0MjVcIn0se1wibmFtZVwiOlwiTWFsdGFcIixcImNvZGVcIjpcIk1UXCIsXCJpYmFuXCI6XCJNVDU0V0xDSTEyMzc3NTI5Njg1NTg5NDU0NzQ3ODM1XCJ9LHtcIm5hbWVcIjpcIk5ldGhlcmxhbmRzXCIsXCJjb2RlXCI6XCJOTFwiLFwiaWJhblwiOlwiTkwxM0lOR0I2NzU1MDM3Mzk3XCJ9LHtcIm5hbWVcIjpcIlBvbGFuZFwiLFwiY29kZVwiOlwiUExcIixcImliYW5cIjpcIlBMMDYxMDkwMjQwMjM5NjIyMzYyNjM2NjY2NjRcIn0se1wibmFtZVwiOlwiUG9ydHVnYWxcIixcImNvZGVcIjpcIlBUXCIsXCJpYmFuXCI6XCJQVDI2MDAzNTA2NTE2OTk1MjM0MzY5NDgyXCJ9LHtcIm5hbWVcIjpcIkN6ZWNoIFJlcHVibGljXCIsXCJjb2RlXCI6XCJDWlwiLFwiaWJhblwiOlwiQ1oxMzUwNTE1MzQzMjkxMjQzMjYxMjIyXCJ9LHtcIm5hbWVcIjpcIlJvbWFuaWFcIixcImNvZGVcIjpcIlJPXCIsXCJpYmFuXCI6XCJSTzY0UlpCUjIzMzU1MjE5MjY3NjgyNjJcIn0se1wibmFtZVwiOlwiU2xvdmFraWFcIixcImNvZGVcIjpcIlNLXCIsXCJpYmFuXCI6XCJTSzYwNTM0MTk1ODkxNDI2NDM4MjgyNjJcIn0se1wibmFtZVwiOlwiU2xvdmVuaWFcIixcImNvZGVcIjpcIlNJXCIsXCJpYmFuXCI6XCJTSTk3OTc1NDI2Njc4MzMyNzg2XCJ9LHtcIm5hbWVcIjpcIlNwYWluXCIsXCJjb2RlXCI6XCJFU1wiLFwiaWJhblwiOlwiRVM3MjMxOTA0OTc3NDkyNTY5OTQ0MTU4XCJ9LHtcIm5hbWVcIjpcIlN3ZWRlblwiLFwiY29kZVwiOlwiU0VcIixcImliYW5cIjpcIlNFNDk0OTk5NjE5NTc0OTc1NTU3MjEzNlwifSx7XCJuYW1lXCI6XCJIdW5nYXJ5XCIsXCJjb2RlXCI6XCJIVVwiLFwiaWJhblwiOlwiSFU0MjExNzczMDE2MTExMTEwMTgwMDAwMDAwMFwifSx7XCJuYW1lXCI6XCJOb3J3YXlcIixcImNvZGVcIjpcIk5PXCIsXCJpYmFuXCI6XCJOTzkzODYwMTExMTc5NDdcIn0se1wibmFtZVwiOlwiTGllY2h0ZW5zdGVpblwiLFwiY29kZVwiOlwiTElcIixcImliYW5cIjpcIkxJNzAwODgwMDY4MzE0NjUyNzQ4NFwifSx7XCJuYW1lXCI6XCJJY2VsYW5kXCIsXCJjb2RlXCI6XCJJU1wiLFwiaWJhblwiOlwiSVMxNDAxNTkyNjAwNzY1NDU1MTA3MzAzMzlcIn0se1wibmFtZVwiOlwiU3dpdHplcmxhbmRcIixcImNvZGVcIjpcIkNIXCIsXCJpYmFuXCI6XCJDSDQ3ODkxNDQ2MjMzMjgyNjMxMzlcIn0se1wibmFtZVwiOlwiVW5pdGVkIEtpbmdkb21cIixcImNvZGVcIjpcIkdCXCIsXCJpYmFuXCI6XCJHQjA5QkFSQzIwMDQwNDE2Mjg5NjY5XCJ9LHtcIm5hbWVcIjpcIk1vbmFjb1wiLFwiY29kZVwiOlwiTUNcIixcImliYW5cIjpcIk1DMjExMjczOTAwMDQwNzE3OTg0NjEyNEYwOFwifSx7XCJuYW1lXCI6XCJBbmRvcnJhXCIsXCJjb2RlXCI6XCJBRFwiLFwiaWJhblwiOlwiQUQ1MTI3NjM4NTc0MjYyOTk1Nzc1NzQ0XCJ9LHtcIm5hbWVcIjpcIlNhbiBNYXJpbm9cIixcImNvZGVcIjpcIlNNXCIsXCJpYmFuXCI6XCJTTTg2VTAzMjI1MDk4MDAwMDAwMDAyNzAxMDBcIn0se1wibmFtZVwiOlwiSG9seSBTZWUgKFZhdGljYW4gQ2l0eSBTdGF0ZSlcIixcImNvZGVcIjpcIlZBXCIsXCJpYmFuXCI6XCJWQTU5MDAxMTIzMDAwMDEyMzQ1Njc4XCJ9XTtcclxuXHJcblx0ZGVsZWdhdG86IERhdGlQZXJzb25hRmlzaWNhTW9kZWw7XHJcblxyXG5cdGlzRGVsZWdhdG9WYWxpZDogYm9vbGVhbjtcclxuXHJcblx0aW5kaXJpenpvOiBJbmRpcml6em9Nb2RlbDtcclxuXHJcblx0aXNJbmRpcml6em9WYWxpZDogYm9vbGVhbjtcclxuXHJcblx0Y2FwOiBzdHJpbmdbXTtcclxuXHJcblx0Y29kaWNlQ2F0YXN0YWxlOiBzdHJpbmc7XHJcblxyXG5cdGNvbnN0cnVjdG9yKHByaXZhdGUgbW9kYWxpdGFQYWdhbWVudG9TZXJ2aWNlOiBNb2RhbGl0YVBhZ2FtZW50b1NlcnZpY2UpIHtcclxuXHRcdC8vIHRoaXMuaW5pdEV4dHJhU2VwYUZvcm0oKTtcclxuXHR9XHJcblxyXG5cdG5nT25Jbml0KCk6IHZvaWQge1xyXG5cdFx0dGhpcy5pbml0RXh0cmFTZXBhRm9ybSgpO1xyXG5cdFx0dGhpcy5zdWJzY3JpcHRpb24uYWRkKFxyXG5cdFx0XHR0aGlzLmV4dHJhU2VwYUZvcm0uY29udHJvbHNbJ2NvZGljZUNvbnRvUHJlc2VudCddLnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUoXHJcblx0XHRcdFx0KGNvZGljZUNvbnRvUHJlc2VudCkgPT4ge1xyXG5cdFx0XHRcdFx0aWYgKGNvZGljZUNvbnRvUHJlc2VudCkge1xyXG5cdFx0XHRcdFx0XHR0aGlzLmV4dHJhU2VwYUZvcm0uY29udHJvbHNbJ2liYW4nXS5zZXRWYWxpZGF0b3JzKFtdKTtcclxuXHRcdFx0XHRcdFx0dGhpcy5leHRyYVNlcGFGb3JtLmNvbnRyb2xzWydpYmFuJ10ucGF0Y2hWYWx1ZShudWxsKTtcclxuXHRcdFx0XHRcdFx0dGhpcy5leHRyYVNlcGFGb3JtLmNvbnRyb2xzWydpYmFuJ10udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG5cdFx0XHRcdFx0XHR0aGlzLmV4dHJhU2VwYUZvcm0uY29udHJvbHNbJ2NvZGljZUNvbnRvJ10uc2V0VmFsaWRhdG9ycyh0aGlzLmNvZGljZUNvbnRvVmFsaWRhdG9ycyk7XHJcblx0XHRcdFx0XHRcdHRoaXMuZXh0cmFTZXBhRm9ybS5jb250cm9sc1snY29kaWNlQ29udG8nXS51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XHJcblx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHR0aGlzLmV4dHJhU2VwYUZvcm0uY29udHJvbHNbJ2NvZGljZUNvbnRvJ10uc2V0VmFsaWRhdG9ycyhbXSk7XHJcblx0XHRcdFx0XHRcdHRoaXMuZXh0cmFTZXBhRm9ybS5jb250cm9sc1snY29kaWNlQ29udG8nXS5wYXRjaFZhbHVlKG51bGwpO1xyXG5cdFx0XHRcdFx0XHR0aGlzLmV4dHJhU2VwYUZvcm0uY29udHJvbHNbJ2NvZGljZUNvbnRvJ10udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG5cdFx0XHRcdFx0XHR0aGlzLmV4dHJhU2VwYUZvcm0uY29udHJvbHNbJ2liYW4nXS5zZXRWYWxpZGF0b3JzKHRoaXMuaWJhblZhbGlkYXRvcnMpO1xyXG5cdFx0XHRcdFx0XHR0aGlzLmV4dHJhU2VwYUZvcm0uY29udHJvbHNbJ2liYW4nXS51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHQpXHJcblx0XHQpO1xyXG5cclxuXHRcdHRoaXMuc3Vic2NyaXB0aW9uLmFkZChcclxuXHRcdFx0dGhpcy5leHRyYVNlcGFGb3JtLmNvbnRyb2xzWydzd2lmdEJpY1ByZXNlbnQnXS52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKFxyXG5cdFx0XHRcdChzd2lmdEJpY1ByZXNlbnQpID0+IHtcclxuXHRcdFx0XHRcdGlmIChzd2lmdEJpY1ByZXNlbnQpIHtcclxuXHRcdFx0XHRcdFx0dGhpcy5leHRyYVNlcGFGb3JtLmNvbnRyb2xzWydzd2lmdCddLnNldFZhbGlkYXRvcnMoW1ZhbGlkYXRvcnMucmVxdWlyZWQsXHRWYWxpZGF0b3JzLm1heExlbmd0aCgxMSksXHRWYWxpZGF0b3JzLm1pbkxlbmd0aCg4KV0pO1xyXG5cdFx0XHRcdFx0XHR0aGlzLmV4dHJhU2VwYUZvcm0uY29udHJvbHNbJ3N3aWZ0J10udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG5cdFx0XHRcdFx0XHR0aGlzLmV4dHJhU2VwYUZvcm0uY29udHJvbHNbJ25hemlvbmUnXS5zZXRWYWxpZGF0b3JzKFtdKTtcclxuXHRcdFx0XHRcdFx0dGhpcy5leHRyYVNlcGFGb3JtLmNvbnRyb2xzWyduYXppb25lJ10ucGF0Y2hWYWx1ZShudWxsKTtcclxuXHRcdFx0XHRcdFx0dGhpcy5leHRyYVNlcGFGb3JtLmNvbnRyb2xzWyduYXppb25lJ10udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG5cdFx0XHRcdFx0XHR0aGlzLmV4dHJhU2VwYUZvcm0uY29udHJvbHNbJ2NpdHRhJ10uc2V0VmFsaWRhdG9ycyhbXSk7XHJcblx0XHRcdFx0XHRcdHRoaXMuZXh0cmFTZXBhRm9ybS5jb250cm9sc1snY2l0dGEnXS5wYXRjaFZhbHVlKG51bGwpO1xyXG5cdFx0XHRcdFx0XHR0aGlzLmV4dHJhU2VwYUZvcm0uY29udHJvbHNbJ2NpdHRhJ10udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG5cdFx0XHRcdFx0XHR0aGlzLmV4dHJhU2VwYUZvcm0uY29udHJvbHNbJ2JhbmNhJ10uc2V0VmFsaWRhdG9ycyhbXSk7XHJcblx0XHRcdFx0XHRcdHRoaXMuZXh0cmFTZXBhRm9ybS5jb250cm9sc1snYmFuY2EnXS5wYXRjaFZhbHVlKG51bGwpO1xyXG5cdFx0XHRcdFx0XHR0aGlzLmV4dHJhU2VwYUZvcm0uY29udHJvbHNbJ2JhbmNhJ10udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG5cdFx0XHRcdFx0XHR0aGlzLmV4dHJhU2VwYUZvcm0uY29udHJvbHNbJ2luZGlyaXp6byddLnNldFZhbGlkYXRvcnMoW10pO1xyXG5cdFx0XHRcdFx0XHR0aGlzLmV4dHJhU2VwYUZvcm0uY29udHJvbHNbJ2luZGlyaXp6byddLnBhdGNoVmFsdWUobnVsbCk7XHJcblx0XHRcdFx0XHRcdHRoaXMuZXh0cmFTZXBhRm9ybS5jb250cm9sc1snaW5kaXJpenpvJ10udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG5cdFx0XHRcdFx0XHR0aGlzLmV4dHJhU2VwYUZvcm0uY29udHJvbHNbJ3ppcENvZGUnXS5zZXRWYWxpZGF0b3JzKFtdKTtcclxuXHRcdFx0XHRcdFx0dGhpcy5leHRyYVNlcGFGb3JtLmNvbnRyb2xzWyd6aXBDb2RlJ10ucGF0Y2hWYWx1ZShudWxsKTtcclxuXHRcdFx0XHRcdFx0dGhpcy5leHRyYVNlcGFGb3JtLmNvbnRyb2xzWyd6aXBDb2RlJ10udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG5cdFx0XHRcdFx0XHR0aGlzLmV4dHJhU2VwYUZvcm0uY29udHJvbHNbJ2NpdmljbyddLnNldFZhbGlkYXRvcnMoW10pO1xyXG5cdFx0XHRcdFx0XHR0aGlzLmV4dHJhU2VwYUZvcm0uY29udHJvbHNbJ2NpdmljbyddLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcclxuXHRcdFx0XHRcdFx0dGhpcy5leHRyYVNlcGFGb3JtLmNvbnRyb2xzWydjaXZpY28nXS5wYXRjaFZhbHVlKG51bGwpO1xyXG5cdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0dGhpcy5leHRyYVNlcGFGb3JtLmNvbnRyb2xzWydzd2lmdCddLnNldFZhbGlkYXRvcnMoW10pO1xyXG5cdFx0XHRcdFx0XHR0aGlzLmV4dHJhU2VwYUZvcm0uY29udHJvbHNbJ3N3aWZ0J10ucGF0Y2hWYWx1ZShudWxsKTtcclxuXHRcdFx0XHRcdFx0dGhpcy5leHRyYVNlcGFGb3JtLmNvbnRyb2xzWydzd2lmdCddLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcclxuXHRcdFx0XHRcdFx0dGhpcy5leHRyYVNlcGFGb3JtLmNvbnRyb2xzWyduYXppb25lJ10uc2V0VmFsaWRhdG9ycyhbVmFsaWRhdG9ycy5yZXF1aXJlZF0pO1xyXG5cdFx0XHRcdFx0XHR0aGlzLmV4dHJhU2VwYUZvcm0uY29udHJvbHNbJ25hemlvbmUnXS51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XHJcblx0XHRcdFx0XHRcdHRoaXMuZXh0cmFTZXBhRm9ybS5jb250cm9sc1snY2l0dGEnXS5zZXRWYWxpZGF0b3JzKFtWYWxpZGF0b3JzLnJlcXVpcmVkXSk7XHJcblx0XHRcdFx0XHRcdHRoaXMuZXh0cmFTZXBhRm9ybS5jb250cm9sc1snY2l0dGEnXS51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XHJcblx0XHRcdFx0XHRcdHRoaXMuZXh0cmFTZXBhRm9ybS5jb250cm9sc1snYmFuY2EnXS5zZXRWYWxpZGF0b3JzKFtWYWxpZGF0b3JzLnJlcXVpcmVkXSk7XHJcblx0XHRcdFx0XHRcdHRoaXMuZXh0cmFTZXBhRm9ybS5jb250cm9sc1snYmFuY2EnXS51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XHJcblx0XHRcdFx0XHRcdHRoaXMuZXh0cmFTZXBhRm9ybS5jb250cm9sc1snaW5kaXJpenpvJ10uc2V0VmFsaWRhdG9ycyhbVmFsaWRhdG9ycy5yZXF1aXJlZF0pO1xyXG5cdFx0XHRcdFx0XHR0aGlzLmV4dHJhU2VwYUZvcm0uY29udHJvbHNbJ2luZGlyaXp6byddLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcclxuXHRcdFx0XHRcdFx0dGhpcy5leHRyYVNlcGFGb3JtLmNvbnRyb2xzWyd6aXBDb2RlJ10uc2V0VmFsaWRhdG9ycyhbVmFsaWRhdG9ycy5yZXF1aXJlZF0pO1xyXG5cdFx0XHRcdFx0XHR0aGlzLmV4dHJhU2VwYUZvcm0uY29udHJvbHNbJ3ppcENvZGUnXS51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XHJcblx0XHRcdFx0XHRcdHRoaXMuZXh0cmFTZXBhRm9ybS5jb250cm9sc1snY2l2aWNvJ10uc2V0VmFsaWRhdG9ycyhbVmFsaWRhdG9ycy5yZXF1aXJlZF0pO1xyXG5cdFx0XHRcdFx0XHR0aGlzLmV4dHJhU2VwYUZvcm0uY29udHJvbHNbJ2NpdmljbyddLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdClcclxuXHRcdCk7XHJcblxyXG5cdFx0dGhpcy5leHRyYVNlcGFGb3JtLnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAvLyBpZiAodGhpcy5leHRyYVNlcGFGb3JtLnZhbGlkKSB7XHJcbiAgICAgICAgY29uc3QgYm9uaWZpY29FeHRyYVNlcGE6IEJvbmlmaWNvRXh0cmFTZXBhTW9kZWwgPSB7XHJcblx0XHRcdFx0XHRzd2lmdDogdGhpcy5leHRyYVNlcGFGb3JtLmdldCgnc3dpZnQnKS52YWx1ZSxcclxuXHRcdFx0XHRcdGNvZGljZUNvbnRvUHJlc2VudDogdGhpcy5leHRyYVNlcGFGb3JtLmdldCgnY29kaWNlQ29udG9QcmVzZW50JykudmFsdWUsXHJcblx0XHRcdFx0XHRjb2RpY2VDb250bzogdGhpcy5leHRyYVNlcGFGb3JtLmdldCgnY29kaWNlQ29udG8nKS52YWx1ZSxcclxuXHRcdFx0XHRcdGliYW46IHRoaXMuZXh0cmFTZXBhRm9ybS5nZXQoJ2liYW4nKS52YWx1ZSxcclxuXHRcdFx0XHRcdGRlbGVnYXRvOiB0aGlzLmV4dHJhU2VwYUZvcm0uZ2V0KCdleGlzdHNEZWxlZ2F0b1Jpc2Nvc3Npb25lJykudmFsdWUsXHJcblx0XHRcdFx0XHRkZWxlZ2F0b1Jpc2Nvc3Npb25lOiB0aGlzLmV4dHJhU2VwYUZvcm0uZ2V0KCdleGlzdHNEZWxlZ2F0b1Jpc2Nvc3Npb25lJykudmFsdWUgPyB0aGlzLmRlbGVnYXRvIDogbnVsbCxcclxuXHRcdFx0XHRcdGJhbmNhOiB0aGlzLmV4dHJhU2VwYUZvcm0uZ2V0KCdiYW5jYScpLnZhbHVlLFxyXG5cdFx0XHRcdFx0ZmlsaWFsZTogdGhpcy5leHRyYVNlcGFGb3JtLmdldCgnY2l0dGEnKS52YWx1ZSxcclxuXHRcdFx0XHRcdGluZGlyaXp6bzogdGhpcy5leHRyYVNlcGFGb3JtLmdldCgnaW5kaXJpenpvJykudmFsdWUsXHJcblx0XHRcdFx0XHRzd2lmdEJpY1ByZXNlbnQ6IHRoaXMuZXh0cmFTZXBhRm9ybS5nZXQoJ3N3aWZ0QmljUHJlc2VudCcpLnZhbHVlLFxyXG5cdFx0XHRcdFx0bmF6aW9uZTogdGhpcy5leHRyYVNlcGFGb3JtLmdldCgnbmF6aW9uZScpLnZhbHVlLFxyXG5cdFx0XHRcdFx0emlwQ29kZTogdGhpcy5leHRyYVNlcGFGb3JtLmdldCgnemlwQ29kZScpLnZhbHVlLFxyXG5cdFx0XHRcdFx0Y29kaWNlUHJvdmluY2lhOiAnRUUnLFxyXG5cdFx0XHRcdFx0Y2l2aWNvOiB0aGlzLmV4dHJhU2VwYUZvcm0uZ2V0KCdjaXZpY28nKS52YWx1ZSxcclxuXHRcdFx0XHRcdGluZGlyaXp6b0RlbGVnYXRvOiB0aGlzLmV4dHJhU2VwYUZvcm0uZ2V0KCdleGlzdHNEZWxlZ2F0b1Jpc2Nvc3Npb25lJykudmFsdWUgPT09IHRydWUgPyB0aGlzLmluZGlyaXp6byA6IG51bGxcclxuXHRcdFx0XHR9O1xyXG5cclxuXHRcdFx0XHRjb25zdCBpc0Zvcm1WYWxpZCA9IHRoaXMuZXh0cmFTZXBhRm9ybS52YWxpZDtcclxuXHRcdFx0XHRjb25zdCBpc0Zvcm1EZWxlZ2F0b1ZhbGlkID0gdGhpcy5leHRyYVNlcGFGb3JtLmdldCgnZXhpc3RzRGVsZWdhdG9SaXNjb3NzaW9uZScpLnZhbHVlID09PSB0cnVlID8gdGhpcy5pc0RlbGVnYXRvVmFsaWQgJiYgdGhpcy5pc0luZGlyaXp6b1ZhbGlkIDogdHJ1ZTtcclxuICAgICAgICBjb25zdCBpc1ZhbGlkID0gaXNGb3JtVmFsaWQgJiYgaXNGb3JtRGVsZWdhdG9WYWxpZDtcclxuXHJcbiAgICAgICAgdGhpcy5ib25pZmljb0V4dHJhU2VwYVJlYWR5LmVtaXQoeyBib25pZmljbzogYm9uaWZpY29FeHRyYVNlcGEsIGlzVmFsaWQgfSk7XHJcbiAgICAgICAvL31cclxuICAgIH0pO1xyXG5cdH1cclxuXHJcblx0aW5pdEV4dHJhU2VwYUZvcm0oKTogdm9pZCB7XHJcblx0XHR0aGlzLmV4dHJhU2VwYUZvcm0gPSBuZXcgRm9ybUdyb3VwKHtcclxuXHRcdFx0ZXhpc3RzRGVsZWdhdG9SaXNjb3NzaW9uZTogbmV3IEZvcm1Db250cm9sKHRoaXMuYm9uaWZpY29FeHRyYVNlcGEgIT0gbnVsbCA/IHRoaXMuYm9uaWZpY29FeHRyYVNlcGEuZGVsZWdhdG8gOiBmYWxzZSwgW1ZhbGlkYXRvcnMucmVxdWlyZWRdKSxcclxuXHRcdFx0c3dpZnQ6IG5ldyBGb3JtQ29udHJvbCh0aGlzLmJvbmlmaWNvRXh0cmFTZXBhPy5zd2lmdCwgW1ZhbGlkYXRvcnMucmVxdWlyZWQsXHRWYWxpZGF0b3JzLm1heExlbmd0aCgxMSksXHRWYWxpZGF0b3JzLm1pbkxlbmd0aCg4KV0pLFxyXG5cdFx0XHRiYW5jYTogbmV3IEZvcm1Db250cm9sKHRoaXMuYm9uaWZpY29FeHRyYVNlcGE/LmJhbmNhLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF0pLFxyXG5cdFx0XHRpbmRpcml6em86IG5ldyBGb3JtQ29udHJvbCh0aGlzLmJvbmlmaWNvRXh0cmFTZXBhPy5pbmRpcml6em8sIFtWYWxpZGF0b3JzLnJlcXVpcmVkXSksXHJcblx0XHRcdGNvZGljZUNvbnRvUHJlc2VudDogbmV3IEZvcm1Db250cm9sKHRoaXMuYm9uaWZpY29FeHRyYVNlcGEgIT0gbnVsbCA/IHRoaXMuYm9uaWZpY29FeHRyYVNlcGEuY29kaWNlQ29udG9QcmVzZW50IDogZmFsc2UsIFtWYWxpZGF0b3JzLnJlcXVpcmVkXSksXHJcblx0XHRcdGNvZGljZUNvbnRvOiBuZXcgRm9ybUNvbnRyb2wodGhpcy5ib25pZmljb0V4dHJhU2VwYT8uY29kaWNlQ29udG8sIHRoaXMuY29kaWNlQ29udG9WYWxpZGF0b3JzKSxcclxuXHRcdFx0aWJhbjogbmV3IEZvcm1Db250cm9sKHRoaXMuYm9uaWZpY29FeHRyYVNlcGE/LmliYW4sIHRoaXMuaWJhblZhbGlkYXRvcnMpLFxyXG5cdFx0XHRzd2lmdEJpY1ByZXNlbnQ6IG5ldyBGb3JtQ29udHJvbCh0aGlzLmJvbmlmaWNvRXh0cmFTZXBhPy5zd2lmdCA/IHRydWUgOiBmYWxzZSwgW1ZhbGlkYXRvcnMucmVxdWlyZWRdKSxcclxuXHRcdFx0bmF6aW9uZTogbmV3IEZvcm1Db250cm9sKHRoaXMuYm9uaWZpY29FeHRyYVNlcGE/Lm5hemlvbmUsIFtWYWxpZGF0b3JzLnJlcXVpcmVkXSksXHJcblx0XHRcdGNpdHRhOiBuZXcgRm9ybUNvbnRyb2wodGhpcy5ib25pZmljb0V4dHJhU2VwYT8uZmlsaWFsZSwgW1ZhbGlkYXRvcnMucmVxdWlyZWRdKSxcclxuXHRcdFx0emlwQ29kZTogbmV3IEZvcm1Db250cm9sKHRoaXMuYm9uaWZpY29FeHRyYVNlcGE/LnppcENvZGUsIFtWYWxpZGF0b3JzLnJlcXVpcmVkXSksXHJcblx0XHRcdGNpdmljbzogbmV3IEZvcm1Db250cm9sKHRoaXMuYm9uaWZpY29FeHRyYVNlcGE/LmNpdmljbywgW1ZhbGlkYXRvcnMucmVxdWlyZWRdKSxcclxuXHRcdH0pO1xyXG5cdH1cclxuXHJcblx0bmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcblx0XHR0aGlzLnN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xyXG5cdH1cclxuXHJcblx0b25WYWxpZGF0ZUV4dHJhU2VwYVBlcnNvbmFGaXNpY2EoKTogdm9pZCB7XHJcblx0XHR0aGlzLnZhbGlkYXRlRXh0cmFTZXBhUGVyc29uYUZpc2ljYUVtaXR0ZXIuZW1pdCgpO1xyXG5cdH1cclxuXHJcblx0b25FeGlzdHNEZWxlZ2F0b1Jpc2Nvc3Npb25lQ2hhbmdlKHRpcG8pOiB2b2lkIHtcclxuXHRcdGlmICghdGlwby52YWx1ZSkge1xyXG5cdFx0XHR0aGlzLmlzRGVsZWdhdG9WYWxpZCA9IHRydWU7XHJcblx0XHRcdHRoaXMucmVzZXRFc3RyZW1pUGVyc29uYUZpc2ljYUV4dHJhU2VwYUZvcm1FbWl0dGVyLmVtaXQoKTtcclxuXHRcdFx0dGhpcy5yZXNldEluZGlyaXp6b0Zvcm0uZW1pdCgpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0YnlDb2RlKG4xOiBOYXppb25lTW9kZWwsIG4yOiBOYXppb25lTW9kZWwpIHtcclxuXHRcdHJldHVybiBuMT8uY29kaWNlQ2F0YXN0YWxlID09IG4yPy5jb2RpY2VDYXRhc3RhbGU7XHJcblx0fVxyXG5cclxuXHRWYWxpZGF0ZU5vdEliYW4oY29udHJvbDogQWJzdHJhY3RDb250cm9sKSB7XHJcblx0XHRpZiAoIWNvbnRyb2wudmFsdWUpIHtcclxuXHRcdCAgcmV0dXJuIG51bGw7XHJcblx0XHR9XHJcblx0XHRjb25zdCBpYmFuUmVnZXggOiBSZWdFeHAgPSAvXig/Oig/OklUfFNNKVxcZHsyfVtBLVpdXFxkezIyfXxDWVxcZHsyfVtBLVpdXFxkezIzfXxOTFxcZHsyfVtBLVpdezR9XFxkezEwfXxMVlxcZHsyfVtBLVpdezR9XFxkezEzfXwoPzpCR3xCSHxHQnxJRSlcXGR7Mn1bQS1aXXs0fVxcZHsxNH18R0lcXGR7Mn1bQS1aXXs0fVxcZHsxNX18Uk9cXGR7Mn1bQS1aXXs0fVxcZHsxNn18S1dcXGR7Mn1bQS1aXXs0fVxcZHsyMn18TVRcXGR7Mn1bQS1aXXs0fVxcZHsyM318Tk9cXGR7MTN9fCg/OkRLfEZJfEdMfEZPKVxcZHsxNn18TUtcXGR7MTd9fCg/OkFUfEVFfEtafExVfFhLKVxcZHsxOH18KD86QkF8SFJ8TEl8Q0h8Q1IpXFxkezE5fXwoPzpHRXxERXxMVHxNRXxSUylcXGR7MjB9fElMXFxkezIxfXwoPzpBRHxDWnxFU3xNRHxTQSlcXGR7MjJ9fFBUXFxkezIzfXwoPzpCRXxJUylcXGR7MjR9fCg/OkZSfE1SfE1DKVxcZHsyNX18KD86QUx8RE98TEJ8UEwpXFxkezI2fXwoPzpBWnxIVSlcXGR7Mjd9fCg/OkdSfE1VKVxcZHsyOH0pJC87XHJcblxyXG5cdFx0aWYgKGliYW5SZWdleC50ZXN0KGNvbnRyb2wudmFsdWUudG9TdHJpbmcoKS50cmltKCkpKSB7XHJcblx0XHQgIHJldHVybiB7IGNvZGljZUNvbnRvU2Nob3VsZE5vdEJlSWJhbjogdHJ1ZSB9O1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiBudWxsO1xyXG5cdH1cclxuXHJcblx0ZXh0cmFTZXBhQ291bnRyaWVzVmFsaWRhdG9yKCk6IFZhbGlkYXRvckZuIHtcclxuXHRcdHJldHVybiAoZm9ybTogQWJzdHJhY3RDb250cm9sKSA9PiB7XHJcblx0XHRcdGNvbnN0IGliYW4gPSBmb3JtLnZhbHVlO1xyXG5cdFx0XHRpZiAoIWliYW4gfHwgaWJhbj8ubGVuZ3RoIDwgMikge1xyXG5cdFx0XHRcdHJldHVybiBudWxsO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRjb25zdCBjb3VudHJ5Q29kZTogc3RyaW5nID0gaWJhbi5zdWJzdHJpbmcoMCwgMik7XHJcblx0XHRcdGlmICh0aGlzLnNlcGFDb3VudHJpZXMuc29tZSgoZWxlbWVudCkgPT4gZWxlbWVudC5jb2RlID09PSBjb3VudHJ5Q29kZSkpIHtcclxuXHRcdFx0XHRyZXR1cm4geyBpYmFuU2VwYTogdHJ1ZSB9O1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRyZXR1cm4gbnVsbDtcclxuXHRcdH07XHJcblx0fVxyXG5cclxuXHRvbkRlbGVnYXRvUmlzY29zc2lvbmVSZWFkeShldmVudDogeyBwZXJzb25hOiBEYXRpUGVyc29uYUZpc2ljYU1vZGVsLCBpc1ZhbGlkOiBib29sZWFuIH0pe1xyXG5cdFx0dGhpcy5kZWxlZ2F0byA9IGV2ZW50LnBlcnNvbmE7XHJcblx0XHR0aGlzLmlzRGVsZWdhdG9WYWxpZCA9IGV2ZW50LmlzVmFsaWQ7XHJcblx0XHR0aGlzLnBlcnNvbmFGaXNpY2FFbWl0dGVyLmVtaXQoeyBwZXJzb25hOiBldmVudC5wZXJzb25hLCBpc1ZhbGlkOiBldmVudC5pc1ZhbGlkIH0pO1xyXG5cdH1cclxuXHJcblx0Y29udmVydFRvVXBwZXJjYXNlKHZhbHVlOiBzdHJpbmcpIHtcclxuXHRcdGlmKHRoaXMuZXh0cmFTZXBhRm9ybS5jb250cm9sc1snY29kaWNlQ29udG9QcmVzZW50J10udmFsdWUpe1xyXG5cdFx0XHR0aGlzLmV4dHJhU2VwYUZvcm0uZ2V0KCdjb2RpY2VDb250bycpLnNldFZhbHVlKHZhbHVlLnRvVXBwZXJDYXNlKCkpO1xyXG5cdFx0fWVsc2V7XHJcblx0XHRcdHRoaXMuZXh0cmFTZXBhRm9ybS5nZXQoJ2liYW4nKS5zZXRWYWx1ZSh2YWx1ZS50b1VwcGVyQ2FzZSgpKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdG5vU3BhY2VzVmFsaWRhdG9yKCk6IFZhbGlkYXRvckZuIHtcclxuXHRcdHJldHVybiAoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogeyBba2V5OiBzdHJpbmddOiBhbnkgfSB8IG51bGwgPT4ge1xyXG5cdFx0XHRjb25zdCBoYXNTcGFjZXMgPSAvXFxzLy50ZXN0KGNvbnRyb2wudmFsdWUpO1xyXG5cdFx0XHRyZXR1cm4gaGFzU3BhY2VzID8geyBzcGFjZXNJYmFuOiB0cnVlIH0gOiBudWxsO1xyXG5cdFx0fTtcclxuXHR9XHJcblxyXG5cdGdldENvbXVuaShzaWdsYVByb3ZpbmNpYTogc3RyaW5nKTogdm9pZCB7XHJcblx0XHRpZiAoc2lnbGFQcm92aW5jaWEpIHtcclxuXHRcdFx0dGhpcy5tb2RhbGl0YVBhZ2FtZW50b1NlcnZpY2UuZ2V0Q29tdW5pJChzaWdsYVByb3ZpbmNpYSkucGlwZSh0YWtlKDEpKVxyXG5cdFx0XHRcdC5zdWJzY3JpYmUoY29tdW5pID0+IHtcclxuXHRcdFx0XHRcdFx0dGhpcy5zZXRDb211bmkuZW1pdChjb211bmkpO1xyXG5cdFx0XHRcdFx0XHRjb25zdCBjb211bmUgPSBjb211bmkuZmluZChjb211bmVJdGVtID0+IGNvbXVuZUl0ZW0uY29kaWNlQ2F0YXN0YWxlID09PSB0aGlzLmNvZGljZUNhdGFzdGFsZSk7XHJcblx0XHRcdFx0XHRcdHRoaXMuZ2V0Q2FwT3B0aW9ucy5lbWl0KGNvbXVuZT8uY29kaWNlSXN0YXQpO1xyXG5cdFx0XHRcdH0pXHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHR0aGlzLnNldENvbXVuaS5lbWl0KFtdKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdG9uSW5kaXJpenpvUmVhZHkoZXZlbnQ6IHsgaW5kaXJpenpvOiBJbmRpcml6em9Nb2RlbCwgaXNWYWxpZDogYm9vbGVhbiB9KSB7XHJcblx0XHR0aGlzLmluZGlyaXp6byA9IGV2ZW50LmluZGlyaXp6bztcclxuXHRcdHRoaXMuaXNJbmRpcml6em9WYWxpZCA9IGV2ZW50LmlzVmFsaWQ7XHJcblx0XHR0aGlzLmluZGlyaXp6b0VtaXR0ZXIuZW1pdCh7IGluZGlyaXp6bzogZXZlbnQuaW5kaXJpenpvLCBpc1ZhbGlkOiBldmVudC5pc1ZhbGlkIH0pO1xyXG5cdH1cclxuXHJcblx0Z2V0Q2FwKGNvZGljZUNhdGFzdGFsZTogc3RyaW5nKTogdm9pZCB7XHJcblx0XHRpZiAoY29kaWNlQ2F0YXN0YWxlKSB7XHJcblx0XHRcdHRoaXMuY29kaWNlQ2F0YXN0YWxlID0gY29kaWNlQ2F0YXN0YWxlO1xyXG5cdFx0fVxyXG5cdFx0Y29uc3QgY29tdW5lID0gdGhpcy5jb211bmk/LmZpbmQoY29tdW5lSXRlbSA9PiBjb211bmVJdGVtLmNvZGljZUNhdGFzdGFsZSA9PT0gY29kaWNlQ2F0YXN0YWxlKTtcclxuXHRcdHRoaXMuZ2V0Q2FwT3B0aW9ucy5lbWl0KGNvbXVuZT8uY29kaWNlSXN0YXQpO1xyXG5cdH1cclxuXHJcbn1cclxuXHJcblxyXG4iXX0=