@stiunb/unb-lib-components 18.0.26 → 18.0.28

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (26) hide show
  1. package/README.md +1 -0
  2. package/esm2022/lib/services/unb-auth.service.mjs +4 -4
  3. package/esm2022/lib/unb-mensagem/unb-mensagem.component.mjs +4 -4
  4. package/esm2022/lib/unb-mensagem/unb-mensagem.module.mjs +5 -5
  5. package/esm2022/lib/unb-mensagem/unb-mensagem.service.mjs +4 -4
  6. package/esm2022/lib/unb-nav-bar/unb-nav-bar.component.mjs +4 -4
  7. package/esm2022/lib/unb-nav-bar/unb-nav-bar.module.mjs +5 -5
  8. package/esm2022/lib/unb-pessoa/unb-pessoa-email-form/unb-pessoa-email-form.mjs +4 -4
  9. package/esm2022/lib/unb-pessoa/unb-pessoa-email-form/unb-pessoa-email-list.mjs +4 -4
  10. package/esm2022/lib/unb-pessoa/unb-pessoa-endereco-form/unb-pessoa-endereco-form.mjs +11 -6
  11. package/esm2022/lib/unb-pessoa/unb-pessoa-endereco-form/unb-pessoa-endereco-list.mjs +4 -4
  12. package/esm2022/lib/unb-pessoa/unb-pessoa-form/unb-pessoa-form.component.mjs +5 -5
  13. package/esm2022/lib/unb-pessoa/unb-pessoa-pesquisar/unb-pessoa-pesquisar.component.mjs +4 -4
  14. package/esm2022/lib/unb-pessoa/unb-pessoa-telefone-form/unb-pessoa-telefone-form.mjs +4 -4
  15. package/esm2022/lib/unb-pessoa/unb-pessoa-telefone-form/unb-pessoa-telefone-list.mjs +4 -4
  16. package/esm2022/lib/unb-pessoa/unb-pessoa.module.mjs +5 -5
  17. package/esm2022/lib/unb-pessoa/unb-pessoa.service.mjs +69 -7
  18. package/esm2022/lib/unb-usuario/oidc-decoded-token.mjs +1 -1
  19. package/esm2022/lib/unb-usuario/oidc-user-data.mjs +1 -1
  20. package/esm2022/lib/unb-usuario/unb-usuario.component.mjs +4 -4
  21. package/esm2022/lib/unb-usuario/unb-usuario.module.mjs +5 -5
  22. package/fesm2022/stiunb-unb-lib-components.mjs +131 -65
  23. package/fesm2022/stiunb-unb-lib-components.mjs.map +1 -1
  24. package/lib/unb-pessoa/unb-pessoa-endereco-form/unb-pessoa-endereco-form.d.ts +5 -4
  25. package/lib/unb-pessoa/unb-pessoa.service.d.ts +7 -4
  26. package/package.json +1 -1
@@ -339,12 +339,12 @@ export class UnbPessoaFormComponent {
339
339
  default: return 'Documento';
340
340
  }
341
341
  }
342
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.2", ngImport: i0, type: UnbPessoaFormComponent, deps: [{ token: i1.UnBPessoaService }, { token: i2.MatSnackBar }, { token: i3.UnbMensagemService }], target: i0.ɵɵFactoryTarget.Component }); }
343
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "16.1.0", version: "18.1.2", type: UnbPessoaFormComponent, selector: "lib-unb-pessoa-form", inputs: { backendURL: "backendURL", pesquisarPorCPF: ["pesquisarPorCPF", "pesquisarPorCPF", booleanAttribute], pesquisarPorCNPJ: ["pesquisarPorCNPJ", "pesquisarPorCNPJ", booleanAttribute], pesquisarPorEstrangeiro: ["pesquisarPorEstrangeiro", "pesquisarPorEstrangeiro", booleanAttribute], defaultTipoPessoa: "defaultTipoPessoa", campoPesquisaMaxWidth: "campoPesquisaMaxWidth" }, outputs: { pessoaEmitted: "pessoaEmitted", isLoadingChange: "isLoadingChange" }, viewQueries: [{ propertyName: "pessoaForm", first: true, predicate: ["pessoaForm"], descendants: true }], ngImport: i0, template: "<mat-progress-bar *ngIf=\"isLoading\" mode=\"indeterminate\"></mat-progress-bar>\r\n\r\n<div class=\"form-container\" [class.disabled-wrapper]=\"isLoading\">\r\n <lib-unb-pessoa-pesquisar \r\n [backendURL]=\"backendURL\" \r\n [defaultTipoPessoa]=\"defaultTipoPessoa\"\r\n [pesquisarPorCNPJ]=\"pesquisarPorCNPJ\" \r\n [pesquisarPorCPF]=\"pesquisarPorCPF\"\r\n [pesquisarPorEstrangeiro]=\"pesquisarPorEstrangeiro\" \r\n [campoPesquisaMaxWidth]=\"campoPesquisaMaxWidth\"\r\n (pessoaEmitted)=\"pessoaRecebida($event)\">\r\n </lib-unb-pessoa-pesquisar>\r\n</div>\r\n\r\n<unb-mensagem [identificador]=\"idMensagemService\"></unb-mensagem>\r\n\r\n<!-- Label indicando que est\u00E1 incluindo nova pessoa -->\r\n<div *ngIf=\"documentoPesquisado\"\r\n class=\"status-banner\" \r\n [ngClass]=\"{\r\n 'status-inclusao': !pessoa.codigoPessoa,\r\n 'status-edicao': pessoa.codigoPessoa && !isReadonlyFromSiape,\r\n 'status-bloqueado': isReadonlyFromSiape\r\n }\">\r\n\r\n <mat-icon>\r\n {{ !pessoa.codigoPessoa ? 'person_add' : (isReadonlyFromSiape ? 'lock' : 'edit') }}\r\n </mat-icon>\r\n\r\n <span>\r\n <ng-container *ngIf=\"!pessoa.codigoPessoa\">Incluindo nova pessoa</ng-container>\r\n <ng-container *ngIf=\"pessoa.codigoPessoa && !isReadonlyFromSiape\">Editando pessoa</ng-container>\r\n <ng-container *ngIf=\"isReadonlyFromSiape\">Registro SIAPE (Visualiza\u00E7\u00E3o)</ng-container>\r\n\r\n com <strong>{{ getLabelDocumento() }} {{ documentoPesquisado }}</strong>\r\n </span>\r\n\r\n</div>\r\n\r\n\r\n<form #pessoaForm=\"ngForm\" [class.readonly]=\"isReadonlyFromSiape || isLoading\" class=\"form-container mt-2\"\r\n *ngIf=\"buscaRealizada\" (ngSubmit)=\"salvar(pessoaForm)\">\r\n\r\n <!-- Campos Pessoa F\u00EDsica e Estrangeira -->\r\n <ng-container\r\n *ngIf=\"pessoa.tipoPessoa == tipoPessoaEnum().FISICA || pessoa.tipoPessoa == tipoPessoaEnum().ESTRANGEIRA\">\r\n <mat-form-field class=\"form-25\" appearance=\"outline\">\r\n <mat-label>Nome</mat-label>\r\n <input type=\"text\" matInput [(ngModel)]=\"pessoa.nome\" name=\"nome\" #nome=\"ngModel\" required />\r\n </mat-form-field>\r\n\r\n <mat-form-field class=\"form-10\" appearance=\"outline\">\r\n <mat-label>Sexo</mat-label>\r\n <mat-select [(ngModel)]=\"pessoa.codigoSexo\" name=\"codigoSexo\" #codigoSexo=\"ngModel\" required>\r\n <mat-option [value]=\"1\">Masculino</mat-option>\r\n <mat-option [value]=\"2\">Feminino</mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n\r\n <mat-form-field class=\"form-15\" appearance=\"outline\">\r\n <mat-label>Data Nascimento</mat-label>\r\n <input matInput [matDatepicker]=\"dataNascimentoPicker\" [(ngModel)]=\"pessoa.dataNascimento\" name=\"dataNascimento\"\r\n #dataNascimento=\"ngModel\" required>\r\n <mat-datepicker-toggle matSuffix [for]=\"dataNascimentoPicker\"></mat-datepicker-toggle>\r\n <mat-datepicker #dataNascimentoPicker></mat-datepicker>\r\n </mat-form-field>\r\n\r\n <mat-form-field class=\"form-10\" appearance=\"outline\">\r\n <mat-label>Estado Civil</mat-label>\r\n <mat-select [(ngModel)]=\"pessoa.codigoEstadoCivil\" name=\"codigoEstadoCivil\" #codigoEstadoCivil=\"ngModel\">\r\n <mat-option *ngFor=\"let estado of estadosCivil | async\" [value]=\"estado.codigo\">\r\n {{ estado.denominacao }}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n\r\n <!--\r\n <mat-form-field class=\"form-15\" appearance=\"outline\">\r\n <mat-label>Naturalidade</mat-label>\r\n <mat-select [(ngModel)]=\"pessoa.naturalidade\" name=\"naturalidade\" #naturalidade=\"ngModel\" required>\r\n <mat-option *ngFor=\"let cidade of getListaEstados()\" [value]=\"cidade.codigo\">\r\n {{ cidade.descricao }}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n -->\r\n <mat-form-field class=\"form-10\" appearance=\"outline\">\r\n <mat-label>Pa\u00EDs Nascimento</mat-label>\r\n <mat-select [(ngModel)]=\"pessoa.codigoPaisNascimento\" name=\"codigoPaisNascimento\" #codigoPaisNascimento=\"ngModel\"\r\n required>\r\n <mat-option *ngFor=\"let paisNascimento of paises | async\" [value]=\"paisNascimento.codigo\">\r\n <span *ngIf=\"paisNascimento.denominacao === 'BRASIL'\">\uD83C\uDDE7\uD83C\uDDF7 <b>{{ paisNascimento.denominacao }}</b></span>\r\n <span *ngIf=\"paisNascimento.denominacao !== 'BRASIL'\">{{ paisNascimento.denominacao }}</span>\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n\r\n <mat-form-field class=\"form-10\" appearance=\"outline\" *ngIf=\"pessoa.codigoPaisNascimento == 22\"> <!-- 22 eh Brasil-->\r\n <mat-label>UF Nascimento</mat-label>\r\n <mat-select [(ngModel)]=\"pessoa.ufNascimento\" name=\"ufNascimento\" #ufNascimento=\"ngModel\" required>\r\n <mat-option *ngFor=\"let estado of getListaEstados()\" [value]=\"estado.identificador\">\r\n {{ estado.identificador }}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n\r\n <mat-form-field class=\"form-15\" appearance=\"outline\" *ngIf=\"pessoa.codigoPaisNascimento == 22\">\r\n <mat-label>Naturalidade</mat-label>\r\n <input type=\"text\" matInput [(ngModel)]=\"pessoa.naturalidade\" name=\"naturalidade\" #naturalidade=\"ngModel\"\r\n required />\r\n </mat-form-field>\r\n\r\n <mat-form-field class=\"form-10\" appearance=\"outline\">\r\n <mat-label>Escolaridade</mat-label>\r\n <mat-select [(ngModel)]=\"pessoa.escolaridade\" name=\"codigoEscolaridade\" #codigoEscolaridade=\"ngModel\" required>\r\n <mat-option *ngFor=\"let escolaridade of escolaridade | async\" [value]=\"escolaridade.codigo\">\r\n {{ escolaridade.denominacao }}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n\r\n <mat-form-field class=\"form-25\" appearance=\"outline\">\r\n <mat-label>Nome Social</mat-label>\r\n <input type=\"text\" matInput [(ngModel)]=\"pessoa.nomeSocial\" name=\"nomeSocial\" #nomeSocial=\"ngModel\" />\r\n </mat-form-field>\r\n\r\n <mat-form-field class=\"form-25\" appearance=\"outline\">\r\n <mat-label>Nome da M\u00E3e</mat-label>\r\n <input type=\"text\" matInput [(ngModel)]=\"pessoa.nomeMae\" name=\"nomeMae\" #nomeMae=\"ngModel\" required />\r\n </mat-form-field>\r\n\r\n <mat-form-field class=\"form-25\" appearance=\"outline\">\r\n <mat-label>Nome do Pai</mat-label>\r\n <input type=\"text\" matInput [(ngModel)]=\"pessoa.nomePai\" name=\"nomePai\" #nomePai=\"ngModel\" required />\r\n </mat-form-field>\r\n </ng-container>\r\n\r\n <!-- Campos Pessoa Jur\u00EDdica -->\r\n <ng-container *ngIf=\"pessoa.tipoPessoa === tipoPessoaEnum().JURIDICA\">\r\n <mat-form-field class=\"form-25\" appearance=\"outline\">\r\n <mat-label>Raz\u00E3o Social</mat-label>\r\n <input type=\"text\" matInput [(ngModel)]=\"pessoa.razaoSocial\" name=\"razaoSocial\" />\r\n </mat-form-field>\r\n <mat-form-field class=\"form-25\" appearance=\"outline\">\r\n <mat-label>Nome Fantasia</mat-label>\r\n <input type=\"text\" matInput [(ngModel)]=\"pessoa.nomeFantasia\" name=\"nomeFantasia\" />\r\n </mat-form-field>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"pessoa.tipoPessoa == tipoPessoaEnum().FISICA\">\r\n <b style=\"flex: 1 1 100%; margin-bottom: 10px;\">Documenta\u00E7\u00E3o</b>\r\n\r\n <mat-form-field class=\"form-25\" appearance=\"outline\">\r\n <mat-label>Identidade</mat-label>\r\n <input type=\"text\" matInput [(ngModel)]=\"pessoa.rg\" name=\"rg\" #rg=\"ngModel\" required />\r\n </mat-form-field>\r\n\r\n <mat-form-field class=\"form-25\" appearance=\"outline\">\r\n <mat-label>\u00D3rg\u00E3o Emissor</mat-label>\r\n <input type=\"text\" matInput [(ngModel)]=\"pessoa.rgOrgao\" name=\"rgOrgao\" #rgOrgao=\"ngModel\" required />\r\n </mat-form-field>\r\n\r\n <mat-form-field class=\"form-25\" appearance=\"outline\">\r\n <mat-label>Unidade Federativa</mat-label>\r\n <mat-select [(ngModel)]=\"pessoa.rgUf\" name=\"rgUf\" #rgUf=\"ngModel\" required>\r\n <mat-option *ngFor=\"let estado of getListaEstados()\" [value]=\"estado.identificador\">\r\n {{ estado.identificador }}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n\r\n <mat-form-field class=\"form-20\" appearance=\"outline\">\r\n <mat-label>Data de Emiss\u00E3o</mat-label>\r\n <input type=\"text\" matInput [(ngModel)]=\"pessoa.rgDataEmissao\" name=\"rgDataEmissao\" #rgDataEmissao=\"ngModel\" />\r\n </mat-form-field>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"pessoa.tipoPessoa == tipoPessoaEnum().ESTRANGEIRA \">\r\n <mat-form-field appearance=\"outline\">\r\n <mat-label>Data Chegada Brasil</mat-label>\r\n <input matInput [matDatepicker]=\"dataChegadaBrasilPicker\" [(ngModel)]=\"pessoa.dataChegadaBrasil\"\r\n name=\"dataChegadaBrasil\" #dataChegadaBrasil=\"ngModel\" required>\r\n <mat-datepicker-toggle matSuffix [for]=\"dataChegadaBrasilPicker\"></mat-datepicker-toggle>\r\n <mat-datepicker #dataChegadaBrasilPicker></mat-datepicker>\r\n </mat-form-field>\r\n\r\n <mat-form-field class=\"form-10\" appearance=\"outline\">\r\n <mat-label>Pa\u00EDs Passaporte</mat-label>\r\n <mat-select [(ngModel)]=\"pessoa.codigoPaisPassaporte\" name=\"codigoPaisPassaporte\" #codigoPaisPassaporte=\"ngModel\"\r\n required>\r\n <mat-option *ngFor=\"let paisNascimento of paises | async\" [value]=\"paisNascimento.codigo\">\r\n {{ paisNascimento.denominacao }}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n\r\n <mat-form-field appearance=\"outline\">\r\n <mat-label>N\u00FAmero Passaporte</mat-label>\r\n <input type=\"text\" matInput [(ngModel)]=\"pessoa.passaporte\" name=\"passaporte\" #passaporte=\"ngModel\" required />\r\n </mat-form-field>\r\n </ng-container>\r\n\r\n <lib-unb-pessoa-telefone-list style=\"flex: 1 1 100%;\" [backendURL]=\"backendURL\" [telefones]=\"pessoa.telefones\"\r\n (telefonesEmitted)=\"telefonesEmitted($event)\"></lib-unb-pessoa-telefone-list>\r\n\r\n <lib-unb-pessoa-endereco-list style=\"flex: 1 1 100%;\" [backendURL]=\"backendURL\" [enderecos]=\"pessoa.enderecos\"\r\n (enderecosEmitted)=\"enderecosEmitted($event)\"></lib-unb-pessoa-endereco-list>\r\n\r\n <lib-unb-pessoa-email-list style=\"flex: 1 1 100%;\" [backendURL]=\"backendURL\" [emails]=\"pessoa.emails\"\r\n (emailsEmitted)=\"emailsEmitted($event)\"></lib-unb-pessoa-email-list>\r\n\r\n <div *ngIf=\"isReadonlyFromSiape\" style=\"flex:1 1 100%; margin-bottom:10px;\">\r\n <mat-card>\r\n <mat-card-content>\r\n <strong>Servidor com matr\u00EDcula SIAPE deve ter seus dados autalizados pelo aplicativo do sougov</strong>\r\n </mat-card-content>\r\n </mat-card>\r\n </div>\r\n\r\n <mat-card-actions class=\"card-actions-buttons\" *ngIf=\"buscaRealizada\">\r\n <button mat-flat-button [disabled]=\"isLoading || isReadonlyFromSiape\" type=\"submit\" color=\"primary\">\r\n Salvar\r\n </button>\r\n </mat-card-actions>\r\n\r\n</form>", styles: [".card-actions-buttons{display:flex;gap:5px;flex-wrap:wrap}.form-container{display:flex;flex-wrap:wrap;column-gap:10px}:host{display:block}@media (max-width: 1000px){.form-container{flex-direction:column;gap:5px}}.break{flex-basis:100%;height:0}.form-5{flex:1 1 5%}.inline-table-container{display:flex;align-items:center;justify-content:space-between;padding:5px}@media (max-width: 600px){.form-5,.form-10,.form-15{flex:1 1 100%}}.form-10{flex:1 1 10%}.form-15{flex:1 1 15%}.form-20{flex:1 1 20%}.form-25{flex:1 1 25%}.form-30{flex:1 1 30%}.form-35{flex:1 1 35%}.form-40{flex:1 1 40%}.form-45{flex:1 1 45%}.form-50{flex:1 1 50%}.form-100{flex:1 1 100%;min-width:250px}.readonly{pointer-events:none;opacity:.6}.disabled-wrapper{pointer-events:none;opacity:.6;filter:grayscale(1)}.status-banner{display:flex;align-items:center;gap:8px;padding:10px 16px;margin:2px 0;border-radius:6px;font-size:14px;font-weight:500}.status-banner.status-inclusao{background-color:#e3f2fd;color:#1565c0;border:1px solid #bbdefb}.status-banner.status-edicao{background-color:#fff3e0;color:#ef6c00;border:1px solid #ffe0b2}.status-banner.status-bloqueado{background-color:#fce4ec;color:#c2185b;border:1px solid #f8bbd0}\n"], dependencies: [{ kind: "directive", type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i5.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i5.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i5.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i5.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: i6.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i7.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i8.UnbMensagemComponent, selector: "unb-mensagem", inputs: ["mensagem", "tipo", "identificador"] }, { kind: "component", type: i9.MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "directive", type: i9.MatCardActions, selector: "mat-card-actions", inputs: ["align"], exportAs: ["matCardActions"] }, { kind: "directive", type: i9.MatCardContent, selector: "mat-card-content" }, { kind: "component", type: i10.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i10.MatLabel, selector: "mat-label" }, { kind: "directive", type: i10.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "directive", type: i11.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i12.MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "component", type: i13.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "component", type: i14.MatProgressBar, selector: "mat-progress-bar", inputs: ["color", "value", "bufferValue", "mode"], outputs: ["animationEnd"], exportAs: ["matProgressBar"] }, { kind: "component", type: i15.MatDatepicker, selector: "mat-datepicker", exportAs: ["matDatepicker"] }, { kind: "directive", type: i15.MatDatepickerInput, selector: "input[matDatepicker]", inputs: ["matDatepicker", "min", "max", "matDatepickerFilter"], exportAs: ["matDatepickerInput"] }, { kind: "component", type: i15.MatDatepickerToggle, selector: "mat-datepicker-toggle", inputs: ["for", "tabIndex", "aria-label", "disabled", "disableRipple"], exportAs: ["matDatepickerToggle"] }, { kind: "component", type: i16.UnbPessoaPesquisarComponent, selector: "lib-unb-pessoa-pesquisar", inputs: ["backendURL", "pesquisarPorCPF", "pesquisarPorCNPJ", "pesquisarPorEstrangeiro", "defaultTipoPessoa", "campoPesquisaMaxWidth", "mostrarPesquisa", "limparAposPesquisa", "label", "placeholder", "hint", "pessoa"], outputs: ["pessoaEmitted", "isLoadingChange"] }, { kind: "component", type: i17.UnbPessoaTelefoneListComponent, selector: "lib-unb-pessoa-telefone-list", inputs: ["podeEditar", "telefones", "backendURL"], outputs: ["telefonesEmitted"] }, { kind: "component", type: i18.UnbPessoaenderecoListComponent, selector: "lib-unb-pessoa-endereco-list", inputs: ["podeEditar", "enderecos", "backendURL"], outputs: ["enderecosEmitted"] }, { kind: "component", type: i19.UnbPessoaEmailListComponent, selector: "lib-unb-pessoa-email-list", inputs: ["podeEditar", "emails", "backendURL"], outputs: ["emailsEmitted"] }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }] }); }
342
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: UnbPessoaFormComponent, deps: [{ token: i1.UnBPessoaService }, { token: i2.MatSnackBar }, { token: i3.UnbMensagemService }], target: i0.ɵɵFactoryTarget.Component }); }
343
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "16.1.0", version: "18.2.14", type: UnbPessoaFormComponent, selector: "lib-unb-pessoa-form", inputs: { backendURL: "backendURL", pesquisarPorCPF: ["pesquisarPorCPF", "pesquisarPorCPF", booleanAttribute], pesquisarPorCNPJ: ["pesquisarPorCNPJ", "pesquisarPorCNPJ", booleanAttribute], pesquisarPorEstrangeiro: ["pesquisarPorEstrangeiro", "pesquisarPorEstrangeiro", booleanAttribute], defaultTipoPessoa: "defaultTipoPessoa", campoPesquisaMaxWidth: "campoPesquisaMaxWidth" }, outputs: { pessoaEmitted: "pessoaEmitted", isLoadingChange: "isLoadingChange" }, viewQueries: [{ propertyName: "pessoaForm", first: true, predicate: ["pessoaForm"], descendants: true }], ngImport: i0, template: "<mat-progress-bar *ngIf=\"isLoading\" mode=\"indeterminate\"></mat-progress-bar>\r\n\r\n<div class=\"form-container\" [class.disabled-wrapper]=\"isLoading\">\r\n <lib-unb-pessoa-pesquisar \r\n [backendURL]=\"backendURL\" \r\n [defaultTipoPessoa]=\"defaultTipoPessoa\"\r\n [pesquisarPorCNPJ]=\"pesquisarPorCNPJ\" \r\n [pesquisarPorCPF]=\"pesquisarPorCPF\"\r\n [pesquisarPorEstrangeiro]=\"pesquisarPorEstrangeiro\" \r\n [campoPesquisaMaxWidth]=\"campoPesquisaMaxWidth\"\r\n (pessoaEmitted)=\"pessoaRecebida($event)\">\r\n </lib-unb-pessoa-pesquisar>\r\n</div>\r\n\r\n<unb-mensagem [identificador]=\"idMensagemService\"></unb-mensagem>\r\n\r\n<!-- Label indicando que est\u00E1 incluindo nova pessoa -->\r\n<div *ngIf=\"documentoPesquisado\"\r\n class=\"status-banner\" \r\n [ngClass]=\"{\r\n 'status-inclusao': !pessoa.codigoPessoa,\r\n 'status-edicao': pessoa.codigoPessoa && !isReadonlyFromSiape,\r\n 'status-bloqueado': isReadonlyFromSiape\r\n }\">\r\n\r\n <mat-icon>\r\n {{ !pessoa.codigoPessoa ? 'person_add' : (isReadonlyFromSiape ? 'lock' : 'edit') }}\r\n </mat-icon>\r\n\r\n <span>\r\n <ng-container *ngIf=\"!pessoa.codigoPessoa\">Incluindo nova pessoa</ng-container>\r\n <ng-container *ngIf=\"pessoa.codigoPessoa && !isReadonlyFromSiape\">Editando pessoa</ng-container>\r\n <ng-container *ngIf=\"isReadonlyFromSiape\">Registro SIAPE (Visualiza\u00E7\u00E3o)</ng-container>\r\n\r\n com <strong>{{ getLabelDocumento() }} {{ documentoPesquisado }}</strong>\r\n </span>\r\n\r\n</div>\r\n\r\n\r\n<form #pessoaForm=\"ngForm\" [class.readonly]=\"isReadonlyFromSiape || isLoading\" class=\"form-container mt-2\"\r\n *ngIf=\"buscaRealizada\" (ngSubmit)=\"salvar(pessoaForm)\">\r\n\r\n <!-- Campos Pessoa F\u00EDsica e Estrangeira -->\r\n <ng-container\r\n *ngIf=\"pessoa.tipoPessoa == tipoPessoaEnum().FISICA || pessoa.tipoPessoa == tipoPessoaEnum().ESTRANGEIRA\">\r\n <mat-form-field class=\"form-25\" appearance=\"outline\">\r\n <mat-label>Nome</mat-label>\r\n <input type=\"text\" matInput [(ngModel)]=\"pessoa.nome\" name=\"nome\" #nome=\"ngModel\" required />\r\n </mat-form-field>\r\n\r\n <mat-form-field class=\"form-10\" appearance=\"outline\">\r\n <mat-label>Sexo</mat-label>\r\n <mat-select [(ngModel)]=\"pessoa.codigoSexo\" name=\"codigoSexo\" #codigoSexo=\"ngModel\" required>\r\n <mat-option [value]=\"1\">Masculino</mat-option>\r\n <mat-option [value]=\"2\">Feminino</mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n\r\n <mat-form-field class=\"form-15\" appearance=\"outline\">\r\n <mat-label>Data Nascimento</mat-label>\r\n <input matInput [matDatepicker]=\"dataNascimentoPicker\" [(ngModel)]=\"pessoa.dataNascimento\" name=\"dataNascimento\"\r\n #dataNascimento=\"ngModel\" required>\r\n <mat-datepicker-toggle matSuffix [for]=\"dataNascimentoPicker\"></mat-datepicker-toggle>\r\n <mat-datepicker #dataNascimentoPicker></mat-datepicker>\r\n </mat-form-field>\r\n\r\n <mat-form-field class=\"form-10\" appearance=\"outline\">\r\n <mat-label>Estado Civil</mat-label>\r\n <mat-select [(ngModel)]=\"pessoa.codigoEstadoCivil\" name=\"codigoEstadoCivil\" #codigoEstadoCivil=\"ngModel\">\r\n <mat-option *ngFor=\"let estado of estadosCivil | async\" [value]=\"estado.codigo\">\r\n {{ estado.denominacao }}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n\r\n <!--\r\n <mat-form-field class=\"form-15\" appearance=\"outline\">\r\n <mat-label>Naturalidade</mat-label>\r\n <mat-select [(ngModel)]=\"pessoa.naturalidade\" name=\"naturalidade\" #naturalidade=\"ngModel\" required>\r\n <mat-option *ngFor=\"let cidade of getListaEstados()\" [value]=\"cidade.codigo\">\r\n {{ cidade.descricao }}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n -->\r\n <mat-form-field class=\"form-10\" appearance=\"outline\">\r\n <mat-label>Pa\u00EDs Nascimento</mat-label>\r\n <mat-select [(ngModel)]=\"pessoa.codigoPaisNascimento\" name=\"codigoPaisNascimento\" #codigoPaisNascimento=\"ngModel\"\r\n required>\r\n <mat-option *ngFor=\"let paisNascimento of paises | async\" [value]=\"paisNascimento.codigo\">\r\n <span *ngIf=\"paisNascimento.denominacao === 'BRASIL'\">\uD83C\uDDE7\uD83C\uDDF7 <b>{{ paisNascimento.denominacao }}</b></span>\r\n <span *ngIf=\"paisNascimento.denominacao !== 'BRASIL'\">{{ paisNascimento.denominacao }}</span>\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n\r\n <mat-form-field class=\"form-10\" appearance=\"outline\" *ngIf=\"pessoa.codigoPaisNascimento == 22\"> <!-- 22 eh Brasil-->\r\n <mat-label>UF Nascimento</mat-label>\r\n <mat-select [(ngModel)]=\"pessoa.ufNascimento\" name=\"ufNascimento\" #ufNascimento=\"ngModel\" required>\r\n <mat-option *ngFor=\"let estado of getListaEstados()\" [value]=\"estado.identificador\">\r\n {{ estado.identificador }}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n\r\n <mat-form-field class=\"form-15\" appearance=\"outline\" *ngIf=\"pessoa.codigoPaisNascimento == 22\">\r\n <mat-label>Naturalidade</mat-label>\r\n <input type=\"text\" matInput [(ngModel)]=\"pessoa.naturalidade\" name=\"naturalidade\" #naturalidade=\"ngModel\"\r\n required />\r\n </mat-form-field>\r\n\r\n <mat-form-field class=\"form-10\" appearance=\"outline\">\r\n <mat-label>Escolaridade</mat-label>\r\n <mat-select [(ngModel)]=\"pessoa.escolaridade\" name=\"codigoEscolaridade\" #codigoEscolaridade=\"ngModel\" required>\r\n <mat-option *ngFor=\"let escolaridade of escolaridade | async\" [value]=\"escolaridade.codigo\">\r\n {{ escolaridade.denominacao }}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n\r\n <mat-form-field class=\"form-25\" appearance=\"outline\">\r\n <mat-label>Nome Social</mat-label>\r\n <input type=\"text\" matInput [(ngModel)]=\"pessoa.nomeSocial\" name=\"nomeSocial\" #nomeSocial=\"ngModel\" />\r\n </mat-form-field>\r\n\r\n <mat-form-field class=\"form-25\" appearance=\"outline\">\r\n <mat-label>Nome da M\u00E3e</mat-label>\r\n <input type=\"text\" matInput [(ngModel)]=\"pessoa.nomeMae\" name=\"nomeMae\" #nomeMae=\"ngModel\" required />\r\n </mat-form-field>\r\n\r\n <mat-form-field class=\"form-25\" appearance=\"outline\">\r\n <mat-label>Nome do Pai</mat-label>\r\n <input type=\"text\" matInput [(ngModel)]=\"pessoa.nomePai\" name=\"nomePai\" #nomePai=\"ngModel\" required />\r\n </mat-form-field>\r\n </ng-container>\r\n\r\n <!-- Campos Pessoa Jur\u00EDdica -->\r\n <ng-container *ngIf=\"pessoa.tipoPessoa === tipoPessoaEnum().JURIDICA\">\r\n <mat-form-field class=\"form-25\" appearance=\"outline\">\r\n <mat-label>Raz\u00E3o Social</mat-label>\r\n <input type=\"text\" matInput [(ngModel)]=\"pessoa.razaoSocial\" name=\"razaoSocial\" />\r\n </mat-form-field>\r\n <mat-form-field class=\"form-25\" appearance=\"outline\">\r\n <mat-label>Nome Fantasia</mat-label>\r\n <input type=\"text\" matInput [(ngModel)]=\"pessoa.nomeFantasia\" name=\"nomeFantasia\" />\r\n </mat-form-field>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"pessoa.tipoPessoa == tipoPessoaEnum().FISICA\">\r\n <b style=\"flex: 1 1 100%; margin-bottom: 10px;\">Documenta\u00E7\u00E3o</b>\r\n\r\n <mat-form-field class=\"form-25\" appearance=\"outline\">\r\n <mat-label>Identidade</mat-label>\r\n <input type=\"text\" matInput [(ngModel)]=\"pessoa.rg\" name=\"rg\" #rg=\"ngModel\" required />\r\n </mat-form-field>\r\n\r\n <mat-form-field class=\"form-25\" appearance=\"outline\">\r\n <mat-label>\u00D3rg\u00E3o Emissor</mat-label>\r\n <input type=\"text\" matInput [(ngModel)]=\"pessoa.rgOrgao\" name=\"rgOrgao\" #rgOrgao=\"ngModel\" required />\r\n </mat-form-field>\r\n\r\n <mat-form-field class=\"form-25\" appearance=\"outline\">\r\n <mat-label>Unidade Federativa</mat-label>\r\n <mat-select [(ngModel)]=\"pessoa.rgUf\" name=\"rgUf\" #rgUf=\"ngModel\" required>\r\n <mat-option *ngFor=\"let estado of getListaEstados()\" [value]=\"estado.identificador\">\r\n {{ estado.identificador }}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n\r\n <mat-form-field class=\"form-20\" appearance=\"outline\">\r\n <mat-label>Data de Emiss\u00E3o</mat-label>\r\n <input type=\"text\" matInput [(ngModel)]=\"pessoa.rgDataEmissao\" name=\"rgDataEmissao\" #rgDataEmissao=\"ngModel\" />\r\n </mat-form-field>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"pessoa.tipoPessoa == tipoPessoaEnum().ESTRANGEIRA \">\r\n <mat-form-field appearance=\"outline\">\r\n <mat-label>Data Chegada Brasil</mat-label>\r\n <input matInput [matDatepicker]=\"dataChegadaBrasilPicker\" [(ngModel)]=\"pessoa.dataChegadaBrasil\"\r\n name=\"dataChegadaBrasil\" #dataChegadaBrasil=\"ngModel\" required>\r\n <mat-datepicker-toggle matSuffix [for]=\"dataChegadaBrasilPicker\"></mat-datepicker-toggle>\r\n <mat-datepicker #dataChegadaBrasilPicker></mat-datepicker>\r\n </mat-form-field>\r\n\r\n <mat-form-field class=\"form-10\" appearance=\"outline\">\r\n <mat-label>Pa\u00EDs Passaporte</mat-label>\r\n <mat-select [(ngModel)]=\"pessoa.codigoPaisPassaporte\" name=\"codigoPaisPassaporte\" #codigoPaisPassaporte=\"ngModel\"\r\n required>\r\n <mat-option *ngFor=\"let paisNascimento of paises | async\" [value]=\"paisNascimento.codigo\">\r\n {{ paisNascimento.denominacao }}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n\r\n <mat-form-field appearance=\"outline\">\r\n <mat-label>N\u00FAmero Passaporte</mat-label>\r\n <input type=\"text\" matInput [(ngModel)]=\"pessoa.passaporte\" name=\"passaporte\" #passaporte=\"ngModel\" required />\r\n </mat-form-field>\r\n </ng-container>\r\n\r\n <lib-unb-pessoa-telefone-list style=\"flex: 1 1 100%;\" [backendURL]=\"backendURL\" [telefones]=\"pessoa.telefones\"\r\n (telefonesEmitted)=\"telefonesEmitted($event)\"></lib-unb-pessoa-telefone-list>\r\n\r\n <lib-unb-pessoa-endereco-list style=\"flex: 1 1 100%;\" [backendURL]=\"backendURL\" [enderecos]=\"pessoa.enderecos\"\r\n (enderecosEmitted)=\"enderecosEmitted($event)\"></lib-unb-pessoa-endereco-list>\r\n\r\n <lib-unb-pessoa-email-list style=\"flex: 1 1 100%;\" [backendURL]=\"backendURL\" [emails]=\"pessoa.emails\"\r\n (emailsEmitted)=\"emailsEmitted($event)\"></lib-unb-pessoa-email-list>\r\n\r\n <div *ngIf=\"isReadonlyFromSiape\" style=\"flex:1 1 100%; margin-bottom:10px;\">\r\n <mat-card>\r\n <mat-card-content>\r\n <strong>Servidor com matr\u00EDcula SIAPE deve ter seus dados autalizados pelo aplicativo do sougov</strong>\r\n </mat-card-content>\r\n </mat-card>\r\n </div>\r\n\r\n <mat-card-actions class=\"card-actions-buttons\" *ngIf=\"buscaRealizada\">\r\n <button mat-flat-button [disabled]=\"isLoading || isReadonlyFromSiape\" type=\"submit\" color=\"primary\">\r\n Salvar\r\n </button>\r\n </mat-card-actions>\r\n\r\n</form>", styles: [".card-actions-buttons{display:flex;gap:5px;flex-wrap:wrap}.form-container{display:flex;flex-wrap:wrap;column-gap:10px}:host{display:block}@media (max-width: 1000px){.form-container{flex-direction:column;gap:5px}}.break{flex-basis:100%;height:0}.form-5{flex:1 1 5%}.inline-table-container{display:flex;align-items:center;justify-content:space-between;padding:5px}@media (max-width: 600px){.form-5,.form-10,.form-15{flex:1 1 100%}}.form-10{flex:1 1 10%}.form-15{flex:1 1 15%}.form-20{flex:1 1 20%}.form-25{flex:1 1 25%}.form-30{flex:1 1 30%}.form-35{flex:1 1 35%}.form-40{flex:1 1 40%}.form-45{flex:1 1 45%}.form-50{flex:1 1 50%}.form-100{flex:1 1 100%;min-width:250px}.readonly{pointer-events:none;opacity:.6}.disabled-wrapper{pointer-events:none;opacity:.6;filter:grayscale(1)}.status-banner{display:flex;align-items:center;gap:8px;padding:10px 16px;margin:2px 0;border-radius:6px;font-size:14px;font-weight:500;&.status-inclusao{background-color:#e3f2fd;color:#1565c0;border:1px solid #bbdefb}&.status-edicao{background-color:#fff3e0;color:#ef6c00;border:1px solid #ffe0b2}&.status-bloqueado{background-color:#fce4ec;color:#c2185b;border:1px solid #f8bbd0}}\n"], dependencies: [{ kind: "directive", type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i5.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i5.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i5.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i5.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: i6.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i7.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i8.UnbMensagemComponent, selector: "unb-mensagem", inputs: ["mensagem", "tipo", "identificador"] }, { kind: "component", type: i9.MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "directive", type: i9.MatCardActions, selector: "mat-card-actions", inputs: ["align"], exportAs: ["matCardActions"] }, { kind: "directive", type: i9.MatCardContent, selector: "mat-card-content" }, { kind: "component", type: i10.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i10.MatLabel, selector: "mat-label" }, { kind: "directive", type: i10.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "directive", type: i11.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i12.MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "component", type: i13.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "component", type: i14.MatProgressBar, selector: "mat-progress-bar", inputs: ["color", "value", "bufferValue", "mode"], outputs: ["animationEnd"], exportAs: ["matProgressBar"] }, { kind: "component", type: i15.MatDatepicker, selector: "mat-datepicker", exportAs: ["matDatepicker"] }, { kind: "directive", type: i15.MatDatepickerInput, selector: "input[matDatepicker]", inputs: ["matDatepicker", "min", "max", "matDatepickerFilter"], exportAs: ["matDatepickerInput"] }, { kind: "component", type: i15.MatDatepickerToggle, selector: "mat-datepicker-toggle", inputs: ["for", "tabIndex", "aria-label", "disabled", "disableRipple"], exportAs: ["matDatepickerToggle"] }, { kind: "component", type: i16.UnbPessoaPesquisarComponent, selector: "lib-unb-pessoa-pesquisar", inputs: ["backendURL", "pesquisarPorCPF", "pesquisarPorCNPJ", "pesquisarPorEstrangeiro", "defaultTipoPessoa", "campoPesquisaMaxWidth", "mostrarPesquisa", "limparAposPesquisa", "label", "placeholder", "hint", "pessoa"], outputs: ["pessoaEmitted", "isLoadingChange"] }, { kind: "component", type: i17.UnbPessoaTelefoneListComponent, selector: "lib-unb-pessoa-telefone-list", inputs: ["podeEditar", "telefones", "backendURL"], outputs: ["telefonesEmitted"] }, { kind: "component", type: i18.UnbPessoaenderecoListComponent, selector: "lib-unb-pessoa-endereco-list", inputs: ["podeEditar", "enderecos", "backendURL"], outputs: ["enderecosEmitted"] }, { kind: "component", type: i19.UnbPessoaEmailListComponent, selector: "lib-unb-pessoa-email-list", inputs: ["podeEditar", "emails", "backendURL"], outputs: ["emailsEmitted"] }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }] }); }
344
344
  }
345
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.2", ngImport: i0, type: UnbPessoaFormComponent, decorators: [{
345
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: UnbPessoaFormComponent, decorators: [{
346
346
  type: Component,
347
- args: [{ selector: 'lib-unb-pessoa-form', standalone: false, template: "<mat-progress-bar *ngIf=\"isLoading\" mode=\"indeterminate\"></mat-progress-bar>\r\n\r\n<div class=\"form-container\" [class.disabled-wrapper]=\"isLoading\">\r\n <lib-unb-pessoa-pesquisar \r\n [backendURL]=\"backendURL\" \r\n [defaultTipoPessoa]=\"defaultTipoPessoa\"\r\n [pesquisarPorCNPJ]=\"pesquisarPorCNPJ\" \r\n [pesquisarPorCPF]=\"pesquisarPorCPF\"\r\n [pesquisarPorEstrangeiro]=\"pesquisarPorEstrangeiro\" \r\n [campoPesquisaMaxWidth]=\"campoPesquisaMaxWidth\"\r\n (pessoaEmitted)=\"pessoaRecebida($event)\">\r\n </lib-unb-pessoa-pesquisar>\r\n</div>\r\n\r\n<unb-mensagem [identificador]=\"idMensagemService\"></unb-mensagem>\r\n\r\n<!-- Label indicando que est\u00E1 incluindo nova pessoa -->\r\n<div *ngIf=\"documentoPesquisado\"\r\n class=\"status-banner\" \r\n [ngClass]=\"{\r\n 'status-inclusao': !pessoa.codigoPessoa,\r\n 'status-edicao': pessoa.codigoPessoa && !isReadonlyFromSiape,\r\n 'status-bloqueado': isReadonlyFromSiape\r\n }\">\r\n\r\n <mat-icon>\r\n {{ !pessoa.codigoPessoa ? 'person_add' : (isReadonlyFromSiape ? 'lock' : 'edit') }}\r\n </mat-icon>\r\n\r\n <span>\r\n <ng-container *ngIf=\"!pessoa.codigoPessoa\">Incluindo nova pessoa</ng-container>\r\n <ng-container *ngIf=\"pessoa.codigoPessoa && !isReadonlyFromSiape\">Editando pessoa</ng-container>\r\n <ng-container *ngIf=\"isReadonlyFromSiape\">Registro SIAPE (Visualiza\u00E7\u00E3o)</ng-container>\r\n\r\n com <strong>{{ getLabelDocumento() }} {{ documentoPesquisado }}</strong>\r\n </span>\r\n\r\n</div>\r\n\r\n\r\n<form #pessoaForm=\"ngForm\" [class.readonly]=\"isReadonlyFromSiape || isLoading\" class=\"form-container mt-2\"\r\n *ngIf=\"buscaRealizada\" (ngSubmit)=\"salvar(pessoaForm)\">\r\n\r\n <!-- Campos Pessoa F\u00EDsica e Estrangeira -->\r\n <ng-container\r\n *ngIf=\"pessoa.tipoPessoa == tipoPessoaEnum().FISICA || pessoa.tipoPessoa == tipoPessoaEnum().ESTRANGEIRA\">\r\n <mat-form-field class=\"form-25\" appearance=\"outline\">\r\n <mat-label>Nome</mat-label>\r\n <input type=\"text\" matInput [(ngModel)]=\"pessoa.nome\" name=\"nome\" #nome=\"ngModel\" required />\r\n </mat-form-field>\r\n\r\n <mat-form-field class=\"form-10\" appearance=\"outline\">\r\n <mat-label>Sexo</mat-label>\r\n <mat-select [(ngModel)]=\"pessoa.codigoSexo\" name=\"codigoSexo\" #codigoSexo=\"ngModel\" required>\r\n <mat-option [value]=\"1\">Masculino</mat-option>\r\n <mat-option [value]=\"2\">Feminino</mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n\r\n <mat-form-field class=\"form-15\" appearance=\"outline\">\r\n <mat-label>Data Nascimento</mat-label>\r\n <input matInput [matDatepicker]=\"dataNascimentoPicker\" [(ngModel)]=\"pessoa.dataNascimento\" name=\"dataNascimento\"\r\n #dataNascimento=\"ngModel\" required>\r\n <mat-datepicker-toggle matSuffix [for]=\"dataNascimentoPicker\"></mat-datepicker-toggle>\r\n <mat-datepicker #dataNascimentoPicker></mat-datepicker>\r\n </mat-form-field>\r\n\r\n <mat-form-field class=\"form-10\" appearance=\"outline\">\r\n <mat-label>Estado Civil</mat-label>\r\n <mat-select [(ngModel)]=\"pessoa.codigoEstadoCivil\" name=\"codigoEstadoCivil\" #codigoEstadoCivil=\"ngModel\">\r\n <mat-option *ngFor=\"let estado of estadosCivil | async\" [value]=\"estado.codigo\">\r\n {{ estado.denominacao }}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n\r\n <!--\r\n <mat-form-field class=\"form-15\" appearance=\"outline\">\r\n <mat-label>Naturalidade</mat-label>\r\n <mat-select [(ngModel)]=\"pessoa.naturalidade\" name=\"naturalidade\" #naturalidade=\"ngModel\" required>\r\n <mat-option *ngFor=\"let cidade of getListaEstados()\" [value]=\"cidade.codigo\">\r\n {{ cidade.descricao }}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n -->\r\n <mat-form-field class=\"form-10\" appearance=\"outline\">\r\n <mat-label>Pa\u00EDs Nascimento</mat-label>\r\n <mat-select [(ngModel)]=\"pessoa.codigoPaisNascimento\" name=\"codigoPaisNascimento\" #codigoPaisNascimento=\"ngModel\"\r\n required>\r\n <mat-option *ngFor=\"let paisNascimento of paises | async\" [value]=\"paisNascimento.codigo\">\r\n <span *ngIf=\"paisNascimento.denominacao === 'BRASIL'\">\uD83C\uDDE7\uD83C\uDDF7 <b>{{ paisNascimento.denominacao }}</b></span>\r\n <span *ngIf=\"paisNascimento.denominacao !== 'BRASIL'\">{{ paisNascimento.denominacao }}</span>\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n\r\n <mat-form-field class=\"form-10\" appearance=\"outline\" *ngIf=\"pessoa.codigoPaisNascimento == 22\"> <!-- 22 eh Brasil-->\r\n <mat-label>UF Nascimento</mat-label>\r\n <mat-select [(ngModel)]=\"pessoa.ufNascimento\" name=\"ufNascimento\" #ufNascimento=\"ngModel\" required>\r\n <mat-option *ngFor=\"let estado of getListaEstados()\" [value]=\"estado.identificador\">\r\n {{ estado.identificador }}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n\r\n <mat-form-field class=\"form-15\" appearance=\"outline\" *ngIf=\"pessoa.codigoPaisNascimento == 22\">\r\n <mat-label>Naturalidade</mat-label>\r\n <input type=\"text\" matInput [(ngModel)]=\"pessoa.naturalidade\" name=\"naturalidade\" #naturalidade=\"ngModel\"\r\n required />\r\n </mat-form-field>\r\n\r\n <mat-form-field class=\"form-10\" appearance=\"outline\">\r\n <mat-label>Escolaridade</mat-label>\r\n <mat-select [(ngModel)]=\"pessoa.escolaridade\" name=\"codigoEscolaridade\" #codigoEscolaridade=\"ngModel\" required>\r\n <mat-option *ngFor=\"let escolaridade of escolaridade | async\" [value]=\"escolaridade.codigo\">\r\n {{ escolaridade.denominacao }}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n\r\n <mat-form-field class=\"form-25\" appearance=\"outline\">\r\n <mat-label>Nome Social</mat-label>\r\n <input type=\"text\" matInput [(ngModel)]=\"pessoa.nomeSocial\" name=\"nomeSocial\" #nomeSocial=\"ngModel\" />\r\n </mat-form-field>\r\n\r\n <mat-form-field class=\"form-25\" appearance=\"outline\">\r\n <mat-label>Nome da M\u00E3e</mat-label>\r\n <input type=\"text\" matInput [(ngModel)]=\"pessoa.nomeMae\" name=\"nomeMae\" #nomeMae=\"ngModel\" required />\r\n </mat-form-field>\r\n\r\n <mat-form-field class=\"form-25\" appearance=\"outline\">\r\n <mat-label>Nome do Pai</mat-label>\r\n <input type=\"text\" matInput [(ngModel)]=\"pessoa.nomePai\" name=\"nomePai\" #nomePai=\"ngModel\" required />\r\n </mat-form-field>\r\n </ng-container>\r\n\r\n <!-- Campos Pessoa Jur\u00EDdica -->\r\n <ng-container *ngIf=\"pessoa.tipoPessoa === tipoPessoaEnum().JURIDICA\">\r\n <mat-form-field class=\"form-25\" appearance=\"outline\">\r\n <mat-label>Raz\u00E3o Social</mat-label>\r\n <input type=\"text\" matInput [(ngModel)]=\"pessoa.razaoSocial\" name=\"razaoSocial\" />\r\n </mat-form-field>\r\n <mat-form-field class=\"form-25\" appearance=\"outline\">\r\n <mat-label>Nome Fantasia</mat-label>\r\n <input type=\"text\" matInput [(ngModel)]=\"pessoa.nomeFantasia\" name=\"nomeFantasia\" />\r\n </mat-form-field>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"pessoa.tipoPessoa == tipoPessoaEnum().FISICA\">\r\n <b style=\"flex: 1 1 100%; margin-bottom: 10px;\">Documenta\u00E7\u00E3o</b>\r\n\r\n <mat-form-field class=\"form-25\" appearance=\"outline\">\r\n <mat-label>Identidade</mat-label>\r\n <input type=\"text\" matInput [(ngModel)]=\"pessoa.rg\" name=\"rg\" #rg=\"ngModel\" required />\r\n </mat-form-field>\r\n\r\n <mat-form-field class=\"form-25\" appearance=\"outline\">\r\n <mat-label>\u00D3rg\u00E3o Emissor</mat-label>\r\n <input type=\"text\" matInput [(ngModel)]=\"pessoa.rgOrgao\" name=\"rgOrgao\" #rgOrgao=\"ngModel\" required />\r\n </mat-form-field>\r\n\r\n <mat-form-field class=\"form-25\" appearance=\"outline\">\r\n <mat-label>Unidade Federativa</mat-label>\r\n <mat-select [(ngModel)]=\"pessoa.rgUf\" name=\"rgUf\" #rgUf=\"ngModel\" required>\r\n <mat-option *ngFor=\"let estado of getListaEstados()\" [value]=\"estado.identificador\">\r\n {{ estado.identificador }}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n\r\n <mat-form-field class=\"form-20\" appearance=\"outline\">\r\n <mat-label>Data de Emiss\u00E3o</mat-label>\r\n <input type=\"text\" matInput [(ngModel)]=\"pessoa.rgDataEmissao\" name=\"rgDataEmissao\" #rgDataEmissao=\"ngModel\" />\r\n </mat-form-field>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"pessoa.tipoPessoa == tipoPessoaEnum().ESTRANGEIRA \">\r\n <mat-form-field appearance=\"outline\">\r\n <mat-label>Data Chegada Brasil</mat-label>\r\n <input matInput [matDatepicker]=\"dataChegadaBrasilPicker\" [(ngModel)]=\"pessoa.dataChegadaBrasil\"\r\n name=\"dataChegadaBrasil\" #dataChegadaBrasil=\"ngModel\" required>\r\n <mat-datepicker-toggle matSuffix [for]=\"dataChegadaBrasilPicker\"></mat-datepicker-toggle>\r\n <mat-datepicker #dataChegadaBrasilPicker></mat-datepicker>\r\n </mat-form-field>\r\n\r\n <mat-form-field class=\"form-10\" appearance=\"outline\">\r\n <mat-label>Pa\u00EDs Passaporte</mat-label>\r\n <mat-select [(ngModel)]=\"pessoa.codigoPaisPassaporte\" name=\"codigoPaisPassaporte\" #codigoPaisPassaporte=\"ngModel\"\r\n required>\r\n <mat-option *ngFor=\"let paisNascimento of paises | async\" [value]=\"paisNascimento.codigo\">\r\n {{ paisNascimento.denominacao }}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n\r\n <mat-form-field appearance=\"outline\">\r\n <mat-label>N\u00FAmero Passaporte</mat-label>\r\n <input type=\"text\" matInput [(ngModel)]=\"pessoa.passaporte\" name=\"passaporte\" #passaporte=\"ngModel\" required />\r\n </mat-form-field>\r\n </ng-container>\r\n\r\n <lib-unb-pessoa-telefone-list style=\"flex: 1 1 100%;\" [backendURL]=\"backendURL\" [telefones]=\"pessoa.telefones\"\r\n (telefonesEmitted)=\"telefonesEmitted($event)\"></lib-unb-pessoa-telefone-list>\r\n\r\n <lib-unb-pessoa-endereco-list style=\"flex: 1 1 100%;\" [backendURL]=\"backendURL\" [enderecos]=\"pessoa.enderecos\"\r\n (enderecosEmitted)=\"enderecosEmitted($event)\"></lib-unb-pessoa-endereco-list>\r\n\r\n <lib-unb-pessoa-email-list style=\"flex: 1 1 100%;\" [backendURL]=\"backendURL\" [emails]=\"pessoa.emails\"\r\n (emailsEmitted)=\"emailsEmitted($event)\"></lib-unb-pessoa-email-list>\r\n\r\n <div *ngIf=\"isReadonlyFromSiape\" style=\"flex:1 1 100%; margin-bottom:10px;\">\r\n <mat-card>\r\n <mat-card-content>\r\n <strong>Servidor com matr\u00EDcula SIAPE deve ter seus dados autalizados pelo aplicativo do sougov</strong>\r\n </mat-card-content>\r\n </mat-card>\r\n </div>\r\n\r\n <mat-card-actions class=\"card-actions-buttons\" *ngIf=\"buscaRealizada\">\r\n <button mat-flat-button [disabled]=\"isLoading || isReadonlyFromSiape\" type=\"submit\" color=\"primary\">\r\n Salvar\r\n </button>\r\n </mat-card-actions>\r\n\r\n</form>", styles: [".card-actions-buttons{display:flex;gap:5px;flex-wrap:wrap}.form-container{display:flex;flex-wrap:wrap;column-gap:10px}:host{display:block}@media (max-width: 1000px){.form-container{flex-direction:column;gap:5px}}.break{flex-basis:100%;height:0}.form-5{flex:1 1 5%}.inline-table-container{display:flex;align-items:center;justify-content:space-between;padding:5px}@media (max-width: 600px){.form-5,.form-10,.form-15{flex:1 1 100%}}.form-10{flex:1 1 10%}.form-15{flex:1 1 15%}.form-20{flex:1 1 20%}.form-25{flex:1 1 25%}.form-30{flex:1 1 30%}.form-35{flex:1 1 35%}.form-40{flex:1 1 40%}.form-45{flex:1 1 45%}.form-50{flex:1 1 50%}.form-100{flex:1 1 100%;min-width:250px}.readonly{pointer-events:none;opacity:.6}.disabled-wrapper{pointer-events:none;opacity:.6;filter:grayscale(1)}.status-banner{display:flex;align-items:center;gap:8px;padding:10px 16px;margin:2px 0;border-radius:6px;font-size:14px;font-weight:500}.status-banner.status-inclusao{background-color:#e3f2fd;color:#1565c0;border:1px solid #bbdefb}.status-banner.status-edicao{background-color:#fff3e0;color:#ef6c00;border:1px solid #ffe0b2}.status-banner.status-bloqueado{background-color:#fce4ec;color:#c2185b;border:1px solid #f8bbd0}\n"] }]
347
+ args: [{ selector: 'lib-unb-pessoa-form', standalone: false, template: "<mat-progress-bar *ngIf=\"isLoading\" mode=\"indeterminate\"></mat-progress-bar>\r\n\r\n<div class=\"form-container\" [class.disabled-wrapper]=\"isLoading\">\r\n <lib-unb-pessoa-pesquisar \r\n [backendURL]=\"backendURL\" \r\n [defaultTipoPessoa]=\"defaultTipoPessoa\"\r\n [pesquisarPorCNPJ]=\"pesquisarPorCNPJ\" \r\n [pesquisarPorCPF]=\"pesquisarPorCPF\"\r\n [pesquisarPorEstrangeiro]=\"pesquisarPorEstrangeiro\" \r\n [campoPesquisaMaxWidth]=\"campoPesquisaMaxWidth\"\r\n (pessoaEmitted)=\"pessoaRecebida($event)\">\r\n </lib-unb-pessoa-pesquisar>\r\n</div>\r\n\r\n<unb-mensagem [identificador]=\"idMensagemService\"></unb-mensagem>\r\n\r\n<!-- Label indicando que est\u00E1 incluindo nova pessoa -->\r\n<div *ngIf=\"documentoPesquisado\"\r\n class=\"status-banner\" \r\n [ngClass]=\"{\r\n 'status-inclusao': !pessoa.codigoPessoa,\r\n 'status-edicao': pessoa.codigoPessoa && !isReadonlyFromSiape,\r\n 'status-bloqueado': isReadonlyFromSiape\r\n }\">\r\n\r\n <mat-icon>\r\n {{ !pessoa.codigoPessoa ? 'person_add' : (isReadonlyFromSiape ? 'lock' : 'edit') }}\r\n </mat-icon>\r\n\r\n <span>\r\n <ng-container *ngIf=\"!pessoa.codigoPessoa\">Incluindo nova pessoa</ng-container>\r\n <ng-container *ngIf=\"pessoa.codigoPessoa && !isReadonlyFromSiape\">Editando pessoa</ng-container>\r\n <ng-container *ngIf=\"isReadonlyFromSiape\">Registro SIAPE (Visualiza\u00E7\u00E3o)</ng-container>\r\n\r\n com <strong>{{ getLabelDocumento() }} {{ documentoPesquisado }}</strong>\r\n </span>\r\n\r\n</div>\r\n\r\n\r\n<form #pessoaForm=\"ngForm\" [class.readonly]=\"isReadonlyFromSiape || isLoading\" class=\"form-container mt-2\"\r\n *ngIf=\"buscaRealizada\" (ngSubmit)=\"salvar(pessoaForm)\">\r\n\r\n <!-- Campos Pessoa F\u00EDsica e Estrangeira -->\r\n <ng-container\r\n *ngIf=\"pessoa.tipoPessoa == tipoPessoaEnum().FISICA || pessoa.tipoPessoa == tipoPessoaEnum().ESTRANGEIRA\">\r\n <mat-form-field class=\"form-25\" appearance=\"outline\">\r\n <mat-label>Nome</mat-label>\r\n <input type=\"text\" matInput [(ngModel)]=\"pessoa.nome\" name=\"nome\" #nome=\"ngModel\" required />\r\n </mat-form-field>\r\n\r\n <mat-form-field class=\"form-10\" appearance=\"outline\">\r\n <mat-label>Sexo</mat-label>\r\n <mat-select [(ngModel)]=\"pessoa.codigoSexo\" name=\"codigoSexo\" #codigoSexo=\"ngModel\" required>\r\n <mat-option [value]=\"1\">Masculino</mat-option>\r\n <mat-option [value]=\"2\">Feminino</mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n\r\n <mat-form-field class=\"form-15\" appearance=\"outline\">\r\n <mat-label>Data Nascimento</mat-label>\r\n <input matInput [matDatepicker]=\"dataNascimentoPicker\" [(ngModel)]=\"pessoa.dataNascimento\" name=\"dataNascimento\"\r\n #dataNascimento=\"ngModel\" required>\r\n <mat-datepicker-toggle matSuffix [for]=\"dataNascimentoPicker\"></mat-datepicker-toggle>\r\n <mat-datepicker #dataNascimentoPicker></mat-datepicker>\r\n </mat-form-field>\r\n\r\n <mat-form-field class=\"form-10\" appearance=\"outline\">\r\n <mat-label>Estado Civil</mat-label>\r\n <mat-select [(ngModel)]=\"pessoa.codigoEstadoCivil\" name=\"codigoEstadoCivil\" #codigoEstadoCivil=\"ngModel\">\r\n <mat-option *ngFor=\"let estado of estadosCivil | async\" [value]=\"estado.codigo\">\r\n {{ estado.denominacao }}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n\r\n <!--\r\n <mat-form-field class=\"form-15\" appearance=\"outline\">\r\n <mat-label>Naturalidade</mat-label>\r\n <mat-select [(ngModel)]=\"pessoa.naturalidade\" name=\"naturalidade\" #naturalidade=\"ngModel\" required>\r\n <mat-option *ngFor=\"let cidade of getListaEstados()\" [value]=\"cidade.codigo\">\r\n {{ cidade.descricao }}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n -->\r\n <mat-form-field class=\"form-10\" appearance=\"outline\">\r\n <mat-label>Pa\u00EDs Nascimento</mat-label>\r\n <mat-select [(ngModel)]=\"pessoa.codigoPaisNascimento\" name=\"codigoPaisNascimento\" #codigoPaisNascimento=\"ngModel\"\r\n required>\r\n <mat-option *ngFor=\"let paisNascimento of paises | async\" [value]=\"paisNascimento.codigo\">\r\n <span *ngIf=\"paisNascimento.denominacao === 'BRASIL'\">\uD83C\uDDE7\uD83C\uDDF7 <b>{{ paisNascimento.denominacao }}</b></span>\r\n <span *ngIf=\"paisNascimento.denominacao !== 'BRASIL'\">{{ paisNascimento.denominacao }}</span>\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n\r\n <mat-form-field class=\"form-10\" appearance=\"outline\" *ngIf=\"pessoa.codigoPaisNascimento == 22\"> <!-- 22 eh Brasil-->\r\n <mat-label>UF Nascimento</mat-label>\r\n <mat-select [(ngModel)]=\"pessoa.ufNascimento\" name=\"ufNascimento\" #ufNascimento=\"ngModel\" required>\r\n <mat-option *ngFor=\"let estado of getListaEstados()\" [value]=\"estado.identificador\">\r\n {{ estado.identificador }}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n\r\n <mat-form-field class=\"form-15\" appearance=\"outline\" *ngIf=\"pessoa.codigoPaisNascimento == 22\">\r\n <mat-label>Naturalidade</mat-label>\r\n <input type=\"text\" matInput [(ngModel)]=\"pessoa.naturalidade\" name=\"naturalidade\" #naturalidade=\"ngModel\"\r\n required />\r\n </mat-form-field>\r\n\r\n <mat-form-field class=\"form-10\" appearance=\"outline\">\r\n <mat-label>Escolaridade</mat-label>\r\n <mat-select [(ngModel)]=\"pessoa.escolaridade\" name=\"codigoEscolaridade\" #codigoEscolaridade=\"ngModel\" required>\r\n <mat-option *ngFor=\"let escolaridade of escolaridade | async\" [value]=\"escolaridade.codigo\">\r\n {{ escolaridade.denominacao }}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n\r\n <mat-form-field class=\"form-25\" appearance=\"outline\">\r\n <mat-label>Nome Social</mat-label>\r\n <input type=\"text\" matInput [(ngModel)]=\"pessoa.nomeSocial\" name=\"nomeSocial\" #nomeSocial=\"ngModel\" />\r\n </mat-form-field>\r\n\r\n <mat-form-field class=\"form-25\" appearance=\"outline\">\r\n <mat-label>Nome da M\u00E3e</mat-label>\r\n <input type=\"text\" matInput [(ngModel)]=\"pessoa.nomeMae\" name=\"nomeMae\" #nomeMae=\"ngModel\" required />\r\n </mat-form-field>\r\n\r\n <mat-form-field class=\"form-25\" appearance=\"outline\">\r\n <mat-label>Nome do Pai</mat-label>\r\n <input type=\"text\" matInput [(ngModel)]=\"pessoa.nomePai\" name=\"nomePai\" #nomePai=\"ngModel\" required />\r\n </mat-form-field>\r\n </ng-container>\r\n\r\n <!-- Campos Pessoa Jur\u00EDdica -->\r\n <ng-container *ngIf=\"pessoa.tipoPessoa === tipoPessoaEnum().JURIDICA\">\r\n <mat-form-field class=\"form-25\" appearance=\"outline\">\r\n <mat-label>Raz\u00E3o Social</mat-label>\r\n <input type=\"text\" matInput [(ngModel)]=\"pessoa.razaoSocial\" name=\"razaoSocial\" />\r\n </mat-form-field>\r\n <mat-form-field class=\"form-25\" appearance=\"outline\">\r\n <mat-label>Nome Fantasia</mat-label>\r\n <input type=\"text\" matInput [(ngModel)]=\"pessoa.nomeFantasia\" name=\"nomeFantasia\" />\r\n </mat-form-field>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"pessoa.tipoPessoa == tipoPessoaEnum().FISICA\">\r\n <b style=\"flex: 1 1 100%; margin-bottom: 10px;\">Documenta\u00E7\u00E3o</b>\r\n\r\n <mat-form-field class=\"form-25\" appearance=\"outline\">\r\n <mat-label>Identidade</mat-label>\r\n <input type=\"text\" matInput [(ngModel)]=\"pessoa.rg\" name=\"rg\" #rg=\"ngModel\" required />\r\n </mat-form-field>\r\n\r\n <mat-form-field class=\"form-25\" appearance=\"outline\">\r\n <mat-label>\u00D3rg\u00E3o Emissor</mat-label>\r\n <input type=\"text\" matInput [(ngModel)]=\"pessoa.rgOrgao\" name=\"rgOrgao\" #rgOrgao=\"ngModel\" required />\r\n </mat-form-field>\r\n\r\n <mat-form-field class=\"form-25\" appearance=\"outline\">\r\n <mat-label>Unidade Federativa</mat-label>\r\n <mat-select [(ngModel)]=\"pessoa.rgUf\" name=\"rgUf\" #rgUf=\"ngModel\" required>\r\n <mat-option *ngFor=\"let estado of getListaEstados()\" [value]=\"estado.identificador\">\r\n {{ estado.identificador }}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n\r\n <mat-form-field class=\"form-20\" appearance=\"outline\">\r\n <mat-label>Data de Emiss\u00E3o</mat-label>\r\n <input type=\"text\" matInput [(ngModel)]=\"pessoa.rgDataEmissao\" name=\"rgDataEmissao\" #rgDataEmissao=\"ngModel\" />\r\n </mat-form-field>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"pessoa.tipoPessoa == tipoPessoaEnum().ESTRANGEIRA \">\r\n <mat-form-field appearance=\"outline\">\r\n <mat-label>Data Chegada Brasil</mat-label>\r\n <input matInput [matDatepicker]=\"dataChegadaBrasilPicker\" [(ngModel)]=\"pessoa.dataChegadaBrasil\"\r\n name=\"dataChegadaBrasil\" #dataChegadaBrasil=\"ngModel\" required>\r\n <mat-datepicker-toggle matSuffix [for]=\"dataChegadaBrasilPicker\"></mat-datepicker-toggle>\r\n <mat-datepicker #dataChegadaBrasilPicker></mat-datepicker>\r\n </mat-form-field>\r\n\r\n <mat-form-field class=\"form-10\" appearance=\"outline\">\r\n <mat-label>Pa\u00EDs Passaporte</mat-label>\r\n <mat-select [(ngModel)]=\"pessoa.codigoPaisPassaporte\" name=\"codigoPaisPassaporte\" #codigoPaisPassaporte=\"ngModel\"\r\n required>\r\n <mat-option *ngFor=\"let paisNascimento of paises | async\" [value]=\"paisNascimento.codigo\">\r\n {{ paisNascimento.denominacao }}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n\r\n <mat-form-field appearance=\"outline\">\r\n <mat-label>N\u00FAmero Passaporte</mat-label>\r\n <input type=\"text\" matInput [(ngModel)]=\"pessoa.passaporte\" name=\"passaporte\" #passaporte=\"ngModel\" required />\r\n </mat-form-field>\r\n </ng-container>\r\n\r\n <lib-unb-pessoa-telefone-list style=\"flex: 1 1 100%;\" [backendURL]=\"backendURL\" [telefones]=\"pessoa.telefones\"\r\n (telefonesEmitted)=\"telefonesEmitted($event)\"></lib-unb-pessoa-telefone-list>\r\n\r\n <lib-unb-pessoa-endereco-list style=\"flex: 1 1 100%;\" [backendURL]=\"backendURL\" [enderecos]=\"pessoa.enderecos\"\r\n (enderecosEmitted)=\"enderecosEmitted($event)\"></lib-unb-pessoa-endereco-list>\r\n\r\n <lib-unb-pessoa-email-list style=\"flex: 1 1 100%;\" [backendURL]=\"backendURL\" [emails]=\"pessoa.emails\"\r\n (emailsEmitted)=\"emailsEmitted($event)\"></lib-unb-pessoa-email-list>\r\n\r\n <div *ngIf=\"isReadonlyFromSiape\" style=\"flex:1 1 100%; margin-bottom:10px;\">\r\n <mat-card>\r\n <mat-card-content>\r\n <strong>Servidor com matr\u00EDcula SIAPE deve ter seus dados autalizados pelo aplicativo do sougov</strong>\r\n </mat-card-content>\r\n </mat-card>\r\n </div>\r\n\r\n <mat-card-actions class=\"card-actions-buttons\" *ngIf=\"buscaRealizada\">\r\n <button mat-flat-button [disabled]=\"isLoading || isReadonlyFromSiape\" type=\"submit\" color=\"primary\">\r\n Salvar\r\n </button>\r\n </mat-card-actions>\r\n\r\n</form>", styles: [".card-actions-buttons{display:flex;gap:5px;flex-wrap:wrap}.form-container{display:flex;flex-wrap:wrap;column-gap:10px}:host{display:block}@media (max-width: 1000px){.form-container{flex-direction:column;gap:5px}}.break{flex-basis:100%;height:0}.form-5{flex:1 1 5%}.inline-table-container{display:flex;align-items:center;justify-content:space-between;padding:5px}@media (max-width: 600px){.form-5,.form-10,.form-15{flex:1 1 100%}}.form-10{flex:1 1 10%}.form-15{flex:1 1 15%}.form-20{flex:1 1 20%}.form-25{flex:1 1 25%}.form-30{flex:1 1 30%}.form-35{flex:1 1 35%}.form-40{flex:1 1 40%}.form-45{flex:1 1 45%}.form-50{flex:1 1 50%}.form-100{flex:1 1 100%;min-width:250px}.readonly{pointer-events:none;opacity:.6}.disabled-wrapper{pointer-events:none;opacity:.6;filter:grayscale(1)}.status-banner{display:flex;align-items:center;gap:8px;padding:10px 16px;margin:2px 0;border-radius:6px;font-size:14px;font-weight:500;&.status-inclusao{background-color:#e3f2fd;color:#1565c0;border:1px solid #bbdefb}&.status-edicao{background-color:#fff3e0;color:#ef6c00;border:1px solid #ffe0b2}&.status-bloqueado{background-color:#fce4ec;color:#c2185b;border:1px solid #f8bbd0}}\n"] }]
348
348
  }], ctorParameters: () => [{ type: i1.UnBPessoaService }, { type: i2.MatSnackBar }, { type: i3.UnbMensagemService }], propDecorators: { pessoaForm: [{
349
349
  type: ViewChild,
350
350
  args: ['pessoaForm']
@@ -369,4 +369,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.2", ngImpor
369
369
  }], isLoadingChange: [{
370
370
  type: Output
371
371
  }] } });
372
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidW5iLXBlc3NvYS1mb3JtLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3VuYi1saWItY29tcG9uZW50cy9zcmMvbGliL3VuYi1wZXNzb2EvdW5iLXBlc3NvYS1mb3JtL3VuYi1wZXNzb2EtZm9ybS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy91bmItbGliLWNvbXBvbmVudHMvc3JjL2xpYi91bmItcGVzc29hL3VuYi1wZXNzb2EtZm9ybS91bmItcGVzc29hLWZvcm0uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGdCQUFnQixFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFJNUcsT0FBTyxFQUFzQixtQkFBbUIsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBQ2xHLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sNkNBQTZDLENBQUM7QUFDN0UsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZ0RBQWdELENBQUM7QUFLbkYsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBRXZFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFRNUQsTUFBTSxPQUFPLHNCQUFzQjtJQStCakMsWUFBb0IsT0FBeUIsRUFBVSxRQUFxQixFQUFVLFlBQWdDO1FBQWxHLFlBQU8sR0FBUCxPQUFPLENBQWtCO1FBQVUsYUFBUSxHQUFSLFFBQVEsQ0FBYTtRQUFVLGlCQUFZLEdBQVosWUFBWSxDQUFvQjtRQTlCdEgsY0FBUyxHQUFZLEtBQUssQ0FBQztRQUMzQixtQkFBYyxHQUFZLEtBQUssQ0FB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LEVBQUU7Z0JBR2UsZUFBZTtzQkFBdEQsS0FBSzt1QkFBQyxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRTtnQkFDRSxnQkFBZ0I7c0JBQXZELEtBQUs7dUJBQUMsRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUU7Z0JBQ0UsdUJBQXVCO3NCQUE5RCxLQUFLO3VCQUFDLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFO2dCQUU3QixpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBQ0cscUJBQXFCO3NCQUE3QixLQUFLO2dCQUVJLGFBQWE7c0JBQXRCLE1BQU07Z0JBQ0csZUFBZTtzQkFBeEIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGJvb2xlYW5BdHRyaWJ1dGUsIENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25Jbml0LCBPdXRwdXQsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBOZ0Zvcm0gfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IE1hdFNuYWNrQmFyIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc25hY2stYmFyJztcclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBVbmJNZW5zYWdlbVNlcnZpY2UsIFVuYlRpcG9NZW5zYWdlbUVudW0gfSBmcm9tICcuLi8uLi91bmItbWVuc2FnZW0vdW5iLW1lbnNhZ2VtLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBsaXN0YUVzdGFkb3MgfSBmcm9tICcuLi9wZXNzb2EtdGFiZWxhcy1hcG9pbyc7XHJcbmltcG9ydCB7IFVuYlBlc3NvYUVtYWlsIH0gZnJvbSAnLi4vdW5iLXBlc3NvYS1tb2RlbHMvdW5iLXBlc3NvYS1lbWFpbC5tb2RlbCc7XHJcbmltcG9ydCB7IFVuYlBlc3NvYUVuZGVyZWNvIH0gZnJvbSAnLi4vdW5iLXBlc3NvYS1tb2RlbHMvdW5iLXBlc3NvYS1lbmRlcmVjby5tb2RlbCc7XHJcbmltcG9ydCB7IFVuYlBlc3NvYUVzY29sYXJpZGFkZSB9IGZyb20gJy4uL3VuYi1wZXNzb2EtbW9kZWxzL3VuYi1wZXNzb2EtZXNjb2xhcmlkYWRlLm1vZGVsJztcclxuaW1wb3J0IHsgVW5iUGVzc29hRXN0YWRvQ2l2aWwgfSBmcm9tICcuLi91bmItcGVzc29hLW1vZGVscy91bmItcGVzc29hLWVzdGFkby1jaXZpbC5tb2RlbCc7XHJcbmltcG9ydCB7IFVuYlBlc3NvYVBhaXMgfSBmcm9tICcuLi91bmItcGVzc29hLW1vZGVscy91bmItcGVzc29hLXBhaXMnO1xyXG5pbXBvcnQgeyBVbmJQZXNzb2FUZWxlZm9uZSB9IGZyb20gJy4uL3VuYi1wZXNzb2EtbW9kZWxzL3VuYi1wZXNzb2EtdGVsZWZvbmUubW9kZWwnO1xyXG5pbXBvcnQgeyBVbmJQZXNzb2FNb2RlbCB9IGZyb20gJy4uL3VuYi1wZXNzb2EtbW9kZWxzL3VuYi1wZXNzb2EubW9kZWwnO1xyXG5pbXBvcnQgeyBVbkJQZXNzb2FTZXJ2aWNlLCBVbmJQZXNzb2FFcnJvUGFkcmFvIH0gZnJvbSAnLi4vdW5iLXBlc3NvYS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgVW5iVGlwb1Blc3NvYUVudW0gfSBmcm9tICcuLi91bmItdGlwby1wZXNzb2EuZW51bSc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2xpYi11bmItcGVzc29hLWZvcm0nLFxyXG4gIHN0YW5kYWxvbmU6IGZhbHNlLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi91bmItcGVzc29hLWZvcm0uY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsOiAnLi91bmItcGVzc29hLWZvcm0uY29tcG9uZW50LmNzcydcclxufSlcclxuZXhwb3J0IGNsYXNzIFVuYlBlc3NvYUZvcm1Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG4gIGlzTG9hZGluZzogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGJ1c2NhUmVhbGl6YWRhOiBib29sZWFuID0gZmFsc2U7XHJcbiAgZW5kZXJlY28gPSBuZXcgVW5iUGVzc29hRW5kZXJlY28oKTtcclxuICBlbWFpbCA9IG5ldyBVbmJQZXNzb2FFbWFpbCgpO1xyXG5cclxuICB0aXBvc1Blc3NvYSA9IFVuYlRpcG9QZXNzb2FFbnVtO1xyXG5cclxuICBwZXNzb2E6IFVuYlBlc3NvYU1vZGVsID0gbmV3IFVuYlBlc3NvYU1vZGVsKCk7IC8vIGluaWNpYWxpemEgY29tIHBlc3NvYVxyXG4gIGRhZG9zU2Fsdm9zOiB7IFtrZXk6IHN0cmluZ106IGFueSB9ID0ge307IC8vIEFybWF6ZW5hIG9zIGRhZG9zIGFvIHRyb2NhciBkZSB0aXBvXHJcblxyXG4gIC8vIFF1YW5kbyB2ZXJkYWRlaXJvLCBvIGZvcm11bMOhcmlvIGUgYcOnw7VlcyBmaWNhbSBkZXNhYmlsaXRhZG9zIHBvcnF1ZSBvcyBkYWRvc1xyXG4gIC8vIGRldmVtIHNlciBhbHRlcmFkb3MgYXBlbmFzIHBlbG8gYXBwIFNvdUdvdiAobWF0cmljdWxhIFNJQVBFIHByZXNlbnRlKVxyXG4gIGlzUmVhZG9ubHlGcm9tU2lhcGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgQFZpZXdDaGlsZCgncGVzc29hRm9ybScpIHBlc3NvYUZvcm0hOiBOZ0Zvcm07XHJcblxyXG4vLyBNYW50ZW1vcyBvIHJlcXVpcmVkIHNlIGVzdGUgY29tcG9uZW50ZSB0YW1iw6ltIG7Do28gZnVuY2lvbmFyIHNlbSBhIFVSTFxyXG4gIEBJbnB1dCh7IHJlcXVpcmVkOiB0cnVlIH0pIGJhY2tlbmRVUkw6IHN0cmluZyA9IFwiXCI7XHJcbiAgXHJcbiAgLy8gVHJhbnNmb3JtYW1vcyBlbSBib29sZWFuQXR0cmlidXRlIHBhcmEgYWNlaXRhciBwZXNxdWlzYXJQb3JDUEY9XCJ0cnVlXCJcclxuICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgcGVzcXVpc2FyUG9yQ1BGID0gdHJ1ZTtcclxuICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgcGVzcXVpc2FyUG9yQ05QSiA9IHRydWU7XHJcbiAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIHBlc3F1aXNhclBvckVzdHJhbmdlaXJvID0gZmFsc2U7XHJcbiAgXHJcbiAgQElucHV0KCkgZGVmYXVsdFRpcG9QZXNzb2EhOiBVbmJUaXBvUGVzc29hRW51bSB8ICdGSVNJQ0EnIHwgJ0pVUklESUNBJyB8ICdFU1RSQU5HRUlSQSc7XHJcbiAgQElucHV0KCkgY2FtcG9QZXNxdWlzYU1heFdpZHRoOiBzdHJpbmcgPSAnNDAwcHgnO1xyXG5cclxuICBAT3V0cHV0KCkgcGVzc29hRW1pdHRlZCA9IG5ldyBFdmVudEVtaXR0ZXI8VW5iUGVzc29hTW9kZWw+KCk7XHJcbiAgQE91dHB1dCgpIGlzTG9hZGluZ0NoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBzZXJ2aWNlOiBVbkJQZXNzb2FTZXJ2aWNlLCBwcml2YXRlIHNuYWNrQmFyOiBNYXRTbmFja0JhciwgcHJpdmF0ZSBhbGVydFNlcnZpY2U6IFVuYk1lbnNhZ2VtU2VydmljZSkgeyB9XHJcblxyXG4gIC8vIHRhYmVsYXMgdHJhZGljaW9uYWlzIHF1ZSB2ZW0gZG8gYmFja2VuZFxyXG4gIGVzY29sYXJpZGFkZSE6IE9ic2VydmFibGU8VW5iUGVzc29hRXNjb2xhcmlkYWRlW10+O1xyXG4gIHBhaXNlcyE6IE9ic2VydmFibGU8VW5iUGVzc29hUGFpc1tdPjtcclxuICBlc3RhZG9zQ2l2aWwhOiBPYnNlcnZhYmxlPFVuYlBlc3NvYUVzdGFkb0NpdmlsW10+O1xyXG5cclxuICBpZE1lbnNhZ2VtU2VydmljZSA9IFwidW5iUGVzc29hRm9ybVwiO1xyXG5cclxuICAvLyBDb250cm9sYSBzZSBlc3TDoSBpbmNsdWluZG8gbm92YSBwZXNzb2Egb3UgZWRpdGFuZG8gZXhpc3RlbnRlXHJcbiAgZG9jdW1lbnRvUGVzcXVpc2Fkbzogc3RyaW5nID0gJyc7XHJcbiAgaW5jbHVpbmRvTm92YVBlc3NvYTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGVkaXRhbmRvUGVzc29hOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5hbGVydFNlcnZpY2UuaGlkZU1lc3NhZ2UodGhpcy5pZE1lbnNhZ2VtU2VydmljZSk7XHJcbiAgICBpZiAodGhpcy5iYWNrZW5kVVJMID09IFwiXCIpIHtcclxuICAgICAgdGhpcy5oYW5kbGVFcnJvclByaW50Q29uc29sZShcIltVbmJQZXNzb2FQZXNxdWlzYXJDb21wb25lbnRdIEVSUk9SOiBhcGlQZXNzb2FDb25maWcudXJsIGVzdMOhIG51bGwuIEluc2lyYSBvIHBhcsOibWV0cm8gKGFwaVBlc3NvYUNvbmZpZykgY29tIG8gdmFsb3IgdsOhbGlkbyFcIilcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5zZXJ2aWNlLnNldEJhY2tlbmRVcmwodGhpcy5iYWNrZW5kVVJMKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBhdGVuY2FvLCBvIHBlc3NvYVJlY2ViaWRhIHF1ZSBpbmljaWFsaXphIGVzc2UgY29tcG9uZW50ZVxyXG4gICAgdGhpcy5lc2NvbGFyaWRhZGUgPSB0aGlzLnNlcnZpY2UuZ2V0RXNjb2xhcmlkYWRlKCk7XHJcbiAgICB0aGlzLnBhaXNlcyA9IHRoaXMuc2VydmljZS5nZXRQYWlzZXMoKTtcclxuICAgIHRoaXMuZXN0YWRvc0NpdmlsID0gdGhpcy5zZXJ2aWNlLmdldEVzdGFkb0NpdmlsKCk7XHJcbiAgfVxyXG5cclxuICBwZXNzb2FSZWNlYmlkYShwZXNzb2FSZWNlYmlkYTogVW5iUGVzc29hTW9kZWwpIHtcclxuICAgIHRoaXMuYnVzY2FSZWFsaXphZGEgPSB0cnVlO1xyXG4gICAgdGhpcy5wZXNzb2EgPSBwZXNzb2FSZWNlYmlkYTtcclxuICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmhpZGVNZXNzYWdlKHRoaXMuaWRNZW5zYWdlbVNlcnZpY2UpO1xyXG5cclxuICAgIC8vIFJlc2V0YSBvIGZvcm11bMOhcmlvIHF1YW5kbyB1bWEgbm92YSBwZXNzb2Egw6kgcmVjZWJpZGFcclxuICAgIGlmICh0aGlzLnBlc3NvYUZvcm0pIHtcclxuICAgICAgdGhpcy5wZXNzb2FGb3JtLnJlc2V0Rm9ybSgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIGluaWNpYWxpemEgcHJhIG5hbyBxdWVicmFyXHJcbiAgICBpZiAoIXRoaXMucGVzc29hLmVuZGVyZWNvcykgdGhpcy5wZXNzb2EuZW5kZXJlY29zID0gW107XHJcbiAgICBpZiAoIXRoaXMucGVzc29hLmVtYWlscykgdGhpcy5wZXNzb2EuZW1haWxzID0gW107XHJcbiAgICBpZiAoIXRoaXMucGVzc29hLnRlbGVmb25lcykgdGhpcy5wZXNzb2EudGVsZWZvbmVzID0gW107XHJcblxyXG4gICAgLy8gMS4gVmVyaWZpY2Egc2Ugw6kgdW0gcmVnaXN0cm8gcXVlIGrDoSBleGlzdGUgbm8gYmFuY29cclxuICAgIGNvbnN0IGV4aXN0ZVJlZ2lzdHJvID0gISF0aGlzLnBlc3NvYT8uY29kaWdvUGVzc29hO1xyXG5cclxuICAgIC8vIDIuIFZlcmlmaWNhIHNlIMOpIGJsb3F1ZWFkbyBwZWxvIFNJQVBFIChTw7MgZmF6IHNlbnRpZG8gc2UgbyByZWdpc3RybyBleGlzdGlyKVxyXG4gICAgdGhpcy5pc1JlYWRvbmx5RnJvbVNpYXBlID0gZXhpc3RlUmVnaXN0cm8gJiYgISF0aGlzLnBlc3NvYT8ubWF0cmljdWxhU2lhcGU7XHJcblxyXG4gICAgLy8gMy4gRGVmaW5lIG8gZG9jdW1lbnRvICh1c2FuZG8gYXF1ZWxlIG1hcGEgbGltcG8pXHJcbiAgICBjb25zdCBkb2NNYXAgPSB7XHJcbiAgICAgIFtVbmJUaXBvUGVzc29hRW51bS5GSVNJQ0FdOiB0aGlzLnBlc3NvYS5jcGYsXHJcbiAgICAgIFtVbmJUaXBvUGVzc29hRW51bS5KVVJJRElDQV06IHRoaXMucGVzc29hLmNucGosXHJcbiAgICAgIFtVbmJUaXBvUGVzc29hRW51bS5FU1RSQU5HRUlSQV06IHRoaXMucGVzc29hLnBhc3NhcG9ydGVcclxuICAgIH07XHJcbiAgICB0aGlzLmRvY3VtZW50b1Blc3F1aXNhZG8gPSBkb2NNYXBbdGhpcy5wZXNzb2EudGlwb1Blc3NvYV0gfHwgJyc7XHJcblxyXG4gICAgLy8gNC4gKE9wY2lvbmFsKSBTbmFja2JhciBzZSBmb3IgU0lBUEVcclxuICAgIGlmICh0aGlzLmlzUmVhZG9ubHlGcm9tU2lhcGUpIHtcclxuICAgICAgdGhpcy5vcGVuU25hY2tCYXIoJ0RhZG9zIGltcG9ydGFkb3MgZG8gU0lBUEUgbsOjbyBwb2RlbSBzZXIgYWx0ZXJhZG9zLicpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2FsdmFyKGZvcm06IE5nRm9ybSkge1xyXG4gICAgdGhpcy5hbGVydFNlcnZpY2UuaGlkZU1lc3NhZ2UodGhpcy5pZE1lbnNhZ2VtU2VydmljZSk7XHJcblxyXG4gICAgLy8gU3VhcyB2YWxpZGHDp8O1ZXNcclxuICAgIGlmICghdGhpcy52YWxpZGFyKGZvcm0pKSByZXR1cm47XHJcblxyXG4gICAgdGhpcy5pc0xvYWRpbmcgPSB0cnVlO1xyXG4gICAgdGhpcy5pc0xvYWRpbmdDaGFuZ2UuZW1pdCh0cnVlKTtcclxuXHJcbiAgICBjb25zdCBwYXlsb2FkID0gdGhpcy5jb252ZXJ0UGVzc29hVG9QYXlsb2FkKHRoaXMucGVzc29hKTtcclxuXHJcbiAgICAvLyBPIHNlcnZpY2UgasOhIHRlbSBvIC5waXBlKGNhdGNoRXJyb3IpIGludGVybm8sIGVudMOjbyBvIGVycm8gY2hlZ2EgdHJhdGFkb1xyXG4gICAgdGhpcy5zZXJ2aWNlLnNhbHZhcihwYXlsb2FkLCB0aGlzLnBlc3NvYS50aXBvUGVzc29hKVxyXG4gICAgICAuc3Vic2NyaWJlKHtcclxuICAgICAgICBuZXh0OiAocmVzcG9zdGEpID0+IHtcclxuICAgICAgICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLmlzTG9hZGluZ0NoYW5nZS5lbWl0KGZhbHNlKTtcclxuICAgICAgICAgIC8vIE1lbnNhZ2VtIGRlIFN1Y2Vzc29cclxuICAgICAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLnNob3dNZXNzYWdlKFwiPHN0cm9uZz5SZWdpc3RybyBzYWx2byBjb20gc3VjZXNzbyE8L3N0cm9uZz5cIiwgVW5iVGlwb01lbnNhZ2VtRW51bS5TVUNDRVNTLCB0aGlzLmlkTWVuc2FnZW1TZXJ2aWNlKTtcclxuXHJcbiAgICAgICAgICAvLyBBdHVhbGl6YSBkYWRvcyByZXRvcm5hZG9zIChJRHMgZ2VyYWRvcylcclxuICAgICAgICAgIGlmIChyZXNwb3N0YSkge1xyXG4gICAgICAgICAgICB0aGlzLnBlc3NvYS5jb2RpZ29QZXNzb2EgPSByZXNwb3N0YS5jb2RpZ29QZXNzb2EgfHwgdGhpcy5wZXNzb2EuY29kaWdvUGVzc29hO1xyXG4gICAgICAgICAgICB0aGlzLnBlc3NvYS5pZFBlc3NvYSA9IHJlc3Bvc3RhLmlkUGVzc29hIHx8IHRoaXMucGVzc29hLmlkUGVzc29hO1xyXG4gICAgICAgICAgICB0aGlzLnBlc3NvYUVtaXR0ZWQuZW1pdCh0aGlzLnBlc3NvYSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBlcnJvcjogKGVycjogVW5iUGVzc29hRXJyb1BhZHJhbykgPT4ge1xyXG4gICAgICAgICAgLy8gQVFVSTogTyAnZXJyJyBqw6EgY2hlZ2EgbGltcG8gY29tIHsgbWVuc2FnZW1TaW1wbGVzLCBtZW5zYWdlbUh0bWwgfVxyXG4gICAgICAgICAgdGhpcy5oYW5kbGVFcnJvcihlcnIpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICB2YWxpZGFyKGZvcm06IE5nRm9ybSk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKCF0aGlzLnBlc3NvYSkge1xyXG4gICAgICB0aGlzLm9wZW5TbmFja0JhcihcIkVycm8gYW8gY2FycmVnYXIgb2JqZXRvIHBlc3NvYVwiKTtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChmb3JtLmludmFsaWQpIHtcclxuICAgICAgLy8gcGFyYSBxdWUgb3MgZXJyb3MgYXBhcmXDp2FtIG5hIHRlbGEgcGFyYSBvIHVzdcOhcmlvLlxyXG4gICAgICBmb3JtLmNvbnRyb2wubWFya0FsbEFzVG91Y2hlZCgpO1xyXG4gICAgICB0aGlzLm9wZW5TbmFja0JhcihcIlBvciBmYXZvciwgcHJlZW5jaGEgb3MgY2FtcG9zIG9icmlnYXTDs3Jpb3MuXCIpO1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMucGVzc29hLnRlbGVmb25lcyA9PSBudWxsIHx8ICh0aGlzLnBlc3NvYS50ZWxlZm9uZXMgIT0gbnVsbCAmJiB0aGlzLnBlc3NvYS50ZWxlZm9uZXMubGVuZ3RoID09IDApKSB7XHJcbiAgICAgIHRoaXMub3BlblNuYWNrQmFyKFwiQ2FkYXN0cmUgcGVsbyBtZW5vcyB1bSB0ZWxlZm9uZSBubyBib3TDo28gQ2FkYXN0cmFyIE5vdm8gVGVsZWZvbmVcIik7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5wZXNzb2EuZW5kZXJlY29zID09IG51bGwgfHwgKHRoaXMucGVzc29hLmVuZGVyZWNvcyAhPSBudWxsICYmIHRoaXMucGVzc29hLmVuZGVyZWNvcy5sZW5ndGggPT0gMCkpIHtcclxuICAgICAgdGhpcy5vcGVuU25hY2tCYXIoXCJDYWRhc3RyZSBwZWxvIG1lbm9zIHVtIGVuZGVyZcOnbyBubyBib3TDo28gQ2FkYXN0cmFyIE5vdm8gRW5kZXJlw6dvXCIpO1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMucGVzc29hLmVtYWlscyA9PSBudWxsIHx8ICh0aGlzLnBlc3NvYS5lbWFpbHMgIT0gbnVsbCAmJiB0aGlzLnBlc3NvYS5lbWFpbHMubGVuZ3RoID09IDApKSB7XHJcbiAgICAgIHRoaXMub3BlblNuYWNrQmFyKFwiQ2FkYXN0cmUgcGVsbyBtZW5vcyB1bSBlLW1haWwgbm8gYm90w6NvIENhZGFzdHJhciBOb3ZvIEVtYWlsXCIpO1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMucGVzc29hLnRpcG9QZXNzb2EgPT0gVW5iVGlwb1Blc3NvYUVudW0uRklTSUNBKSB7XHJcbiAgICAgIGlmICghdGhpcy5wZXNzb2Eubm9tZSB8fCAodGhpcy5wZXNzb2EgJiYgdGhpcy5wZXNzb2Eubm9tZSA9PSBcIlwiKSkge1xyXG4gICAgICAgIHRoaXMub3BlblNuYWNrQmFyKFwiTm9tZSDDqSB1bSBjYW1wbyBvYnJpZ2F0w7NyaW9cIik7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoIXRoaXMucGVzc29hLmRhdGFOYXNjaW1lbnRvKSB7XHJcbiAgICAgICAgdGhpcy5vcGVuU25hY2tCYXIoXCJEYXRhIGRlIE5hc2NpbWVudG8gw6kgdW0gY2FtcG8gb2JyaWdhdMOzcmlvXCIpO1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLnBlc3NvYS50aXBvUGVzc29hID09IFVuYlRpcG9QZXNzb2FFbnVtLkVTVFJBTkdFSVJBKSB7XHJcbiAgICAgIGlmICghdGhpcy5wZXNzb2Eubm9tZSB8fCAodGhpcy5wZXNzb2EgJiYgdGhpcy5wZXNzb2Eubm9tZSA9PSBcIlwiKSkge1xyXG4gICAgICAgIHRoaXMub3BlblNuYWNrQmFyKFwiTm9tZSDDqSB1bSBjYW1wbyBvYnJpZ2F0w7NyaW9cIik7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAodGhpcy5wZXNzb2EucGFzc2Fwb3J0ZSA9PSBudWxsIHx8ICh0aGlzLnBlc3NvYS5wYXNzYXBvcnRlICE9IG51bGwgJiYgdGhpcy5wZXNzb2EucGFzc2Fwb3J0ZSA9PSBcIlwiKSkge1xyXG4gICAgICAgIHRoaXMub3BlblNuYWNrQmFyKFwiUGFzc2Fwb3J0ZSDDqSB1bSBjYW1wbyBvYnJpZ2F0w7NyaW9cIik7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMucGVzc29hLnRpcG9QZXNzb2EgPT0gVW5iVGlwb1Blc3NvYUVudW0uSlVSSURJQ0EpIHtcclxuICAgICAgaWYgKHRoaXMucGVzc29hLmNucGogPT0gbnVsbCB8fCAodGhpcy5wZXNzb2EuY25waiAhPSBudWxsICYmIHRoaXMucGVzc29hLmNucGogPT0gXCJcIikpIHtcclxuICAgICAgICB0aGlzLm9wZW5TbmFja0JhcihcIkNOUEogw6kgdW0gY2FtcG8gb2JyaWdhdMOzcmlvXCIpO1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH1cclxuXHJcbiAgdGVsZWZvbmVzRW1pdHRlZCh0ZWxlZm9uZXM6IFVuYlBlc3NvYVRlbGVmb25lW10pIHtcclxuICAgIHRoaXMucGVzc29hLnRlbGVmb25lcyA9IHRlbGVmb25lcztcclxuICB9XHJcblxyXG4gIGVuZGVyZWNvc0VtaXR0ZWQoZW5kZXJlY29zOiBVbmJQZXNzb2FFbmRlcmVjb1tdKSB7XHJcbiAgICB0aGlzLnBlc3NvYS5lbmRlcmVjb3MgPSBlbmRlcmVjb3M7XHJcbiAgfVxyXG5cclxuICBlbWFpbHNFbWl0dGVkKGVtYWlsczogVW5iUGVzc29hRW1haWxbXSkge1xyXG4gICAgdGhpcy5wZXNzb2EuZW1haWxzID0gZW1haWxzO1xyXG4gIH1cclxuXHJcbiAgb3BlblNuYWNrQmFyKG1lc3NhZ2U6IHN0cmluZykge1xyXG4gICAgdGhpcy5zbmFja0Jhci5vcGVuKG1lc3NhZ2UsICd4Jywge1xyXG4gICAgICBkdXJhdGlvbjogNTAwMCxcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgdGlwb1Blc3NvYUVudW0oKSB7XHJcbiAgICByZXR1cm4gVW5iVGlwb1Blc3NvYUVudW07XHJcbiAgfVxyXG5cclxuICBnZXRMaXN0YUVzdGFkb3MoKSB7XHJcbiAgICByZXR1cm4gbGlzdGFFc3RhZG9zO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAqIENvbnZlcnRlIHVtYSBpbnN0w6JuY2lhIChvdSBvYmpldG8pIGRlIFVuYlBlc3NvYU1vZGVsIHBhcmEgbyBwYXlsb2FkIGVzcGVyYWRvIHBlbG8gYmFja2VuZC5cclxuICovXHJcbiAgcHJpdmF0ZSBjb252ZXJ0UGVzc29hVG9QYXlsb2FkKHBlc3NvYTogVW5iUGVzc29hTW9kZWwpOiBhbnkge1xyXG4gICAgaWYgKCFwZXNzb2EpIHJldHVybiBudWxsO1xyXG5cclxuICAgIC8vIC0tLSBNYXBlaWEgb3MgYXJyYXlzIC0tLVxyXG4gICAgY29uc3QgZW5kZXJlY29zUGF5bG9hZCA9IChwZXNzb2EuZW5kZXJlY29zIHx8IFtdKS5tYXAoKGVuZDogYW55KSA9PiAoe1xyXG4gICAgICBvcmRlbUVuZGVyZWNvOiBlbmQub3JkZW1FbmRlcmVjbyxcclxuICAgICAgdGlwb0VuZGVyZWNvQ29kaWdvOiBlbmQudGlwb0VuZGVyZWNvQ29kaWdvLFxyXG4gICAgICBtdW5pY2lwaW9Db2RpZ286IGVuZC5tdW5pY2lwaW9Db2RpZ28sXHJcbiAgICAgIHBhaXNFbmRlcmVjb0NvZGlnbzogZW5kLnBhaXNFbmRlcmVjb0NvZGlnbyxcclxuICAgICAgbG9ncmFkb3VybzogZW5kLmxvZ3JhZG91cm8sXHJcbiAgICAgIGNvbXBsZW1lbnRvOiBlbmQuY29tcGxlbWVudG8sXHJcbiAgICAgIGNlcDogZW5kLmNlcCxcclxuICAgICAgYmFpcnJvOiBlbmQuYmFpcnJvLFxyXG4gICAgICB1ZkVuZGVyZWNvOiBlbmQudWZFbmRlcmVjbyxcclxuICAgICAgY2FpeGFQb3N0YWw6IGVuZC5jYWl4YVBvc3RhbCxcclxuICAgICAgY29ycmVzcG9uZGVuY2lhOiBlbmQuY29ycmVzcG9uZGVuY2lhXHJcbiAgICB9KSk7XHJcblxyXG4gICAgY29uc3QgdGVsZWZvbmVzUGF5bG9hZCA9IChwZXNzb2EudGVsZWZvbmVzIHx8IFtdKS5tYXAoKHRlbDogYW55KSA9PiAoe1xyXG4gICAgICBvcmRlbVRlbGVmb25lOiB0ZWwub3JkZW0sXHJcbiAgICAgIHRpcG9UZWxlZm9uZUNvZGlnbzogdGVsLnRpcG9UZWxlZm9uZUNvZGlnbyxcclxuICAgICAgZGRpOiB0ZWwuZGRpLFxyXG4gICAgICBkZGQ6IHRlbC5kZGQsXHJcbiAgICAgIG51bWVyb1RlbGVmb25lOiB0ZWwubnVtZXJvLFxyXG4gICAgICByYW1hbDogdGVsLnJhbWFsLFxyXG4gICAgICBhdXRvcml6YVNNUzogdGVsLmF1dG9yaXphU01TXHJcbiAgICB9KSk7XHJcblxyXG4gICAgY29uc3QgZW1haWxzUGF5bG9hZCA9IChwZXNzb2EuZW1haWxzIHx8IFtdKS5tYXAoKGVtYWlsOiBhbnkpID0+ICh7XHJcbiAgICAgIHRpcG9FbWFpbENvZGlnbzogZW1haWwudGlwb0VtYWlsQ29kaWdvLFxyXG4gICAgICBvcmRlbUVtYWlsOiBlbWFpbC5vcmRlbSxcclxuICAgICAgZW1haWw6IGVtYWlsLmVtYWlsLFxyXG4gICAgICBhdXRvcml6YWNhbzogZW1haWwuYXV0b3JpemFjYW9cclxuICAgIH0pKTtcclxuXHJcbiAgICAvLyAtLS0gTW9udGEgbyBvYmpldG8gcHJpbmNpcGFsIC0tLVxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgaWRQZXNzb2E6IHBlc3NvYS5pZFBlc3NvYSxcclxuICAgICAgY29kaWdvUGVzc29hOiBwZXNzb2EuY29kaWdvUGVzc29hLFxyXG5cclxuICAgICAgbm9tZTogcGVzc29hLm5vbWUsXHJcbiAgICAgIG5vbWVTb2NpYWw6IHBlc3NvYS5ub21lU29jaWFsLFxyXG4gICAgICAvLyBBZGljaW9uYSBhIGNoYXZlICdjcGYnIGFvIG9iamV0byBTT01FTlRFIFNFIHBlc3NvYS5jcGYgZm9yIHRydXRoeVxyXG4gICAgICAuLi4ocGVzc29hLmNwZiAmJiB7IGNwZjogcGVzc29hLmNwZi5yZXBsYWNlKC9cXEQvZywgJycpIH0pLFxyXG4gICAgICBjb2RpZ29TZXhvOiBwZXNzb2EuY29kaWdvU2V4byxcclxuICAgICAgY29kaWdvRXN0YWRvQ2l2aWw6IHBlc3NvYS5jb2RpZ29Fc3RhZG9DaXZpbCxcclxuICAgICAgY29kaWdvRXNjb2xhcmlkYWRlOiBwZXNzb2EuZXNjb2xhcmlkYWRlLFxyXG4gICAgICAvLyBjb2RpZ29UaXBvU2FuZ3VpbmVvOiBwZXNzb2EudGlwb1Nhbmd1aW5lbyxcclxuICAgICAgbm9tZVBhaTogcGVzc29hLm5vbWVQYWksXHJcbiAgICAgIG5vbWVNYWU6IHBlc3NvYS5ub21lTWFlLFxyXG5cclxuICAgICAgZGF0YU5hc2NpbWVudG86IHRoaXMuZm9ybWF0YXJEYXRhUGFyYUJhY2tlbmQocGVzc29hLmRhdGFOYXNjaW1lbnRvKSxcclxuICAgICAgY29kaWdvUGFpc05hc2NpbWVudG86IHBlc3NvYS5jb2RpZ29QYWlzTmFzY2ltZW50byxcclxuICAgICAgdWZOYXNjaW1lbnRvOiBwZXNzb2EudWZOYXNjaW1lbnRvLFxyXG4gICAgICBuYXR1cmFsaWRhZGU6IHBlc3NvYS5uYXR1cmFsaWRhZGUsXHJcblxyXG4gICAgICByZzogcGVzc29hLnJnLFxyXG4gICAgICByZ09yZ2FvOiBwZXNzb2EucmdPcmdhbyxcclxuICAgICAgcmdVZjogcGVzc29hLnJnVWYsXHJcbiAgICAgIHJnRGF0YUVtaXNzYW86IHRoaXMuZm9ybWF0YXJEYXRhUGFyYUJhY2tlbmQocGVzc29hLnJnRGF0YUVtaXNzYW8pLFxyXG5cclxuICAgICAgbnVtZXJvVGl0dWxvRWxlaXRvcjogcGVzc29hLm51bWVyb1RpdHVsb0VsZWl0b3IsXHJcbiAgICAgIGRhdGFFbWlzc2FvVGl0dWxvRWxlaXRvcjogdGhpcy5mb3JtYXRhckRhdGFQYXJhQmFja2VuZChwZXNzb2EuZGF0YUVtaXNzYW9UaXR1bG9FbGVpdG9yKSxcclxuICAgICAgem9uYVRpdHVsb0VsZWl0b3I6IHBlc3NvYS56b25hVGl0dWxvRWxlaXRvcixcclxuICAgICAgc2VjYW9UaXR1bG9FbGVpdG9yOiBwZXNzb2Euc2VjYW9UaXR1bG9FbGVpdG9yLFxyXG4gICAgICB1ZlRpdHVsb0VsZWl0b3I6IHBlc3NvYS51ZlRpdHVsb0VsZWl0b3IsXHJcblxyXG4gICAgICBudW1lcm9SZXNlcnZpc3RhOiBwZXNzb2EubnVtZXJvUmVzZXJ2aXN0YSxcclxuICAgICAgc2VyaWVSZXNlcnZpc3RhOiBwZXNzb2Euc2VyaWVSZXNlcnZpc3RhLFxyXG4gICAgICBvcmdhb1Jlc2VydmlzdGE6IHBlc3NvYS5vcmdhb1Jlc2VydmlzdGEsXHJcblxyXG4gICAgICBudW1lcm9DYXJ0ZWlyYVRyYWJhbGhvOiBwZXNzb2EubnVtZXJvQ2FydGVpcmFUcmFiYWxobyxcclxuICAgICAgc2VyaWVDYXJ0ZWlyYVRyYWJhbGhvOiBwZXNzb2Euc2VyaWVDYXJ0ZWlyYVRyYWJhbGhvLFxyXG4gICAgICB1ZkNhcnRlaXJhVHJhYmFsaG86IHBlc3NvYS51ZkNhcnRlaXJhVHJhYmFsaG8sXHJcbiAgICAgIHBpc1Bhc2VwOiBwZXNzb2EucGlzUGFzZXAsXHJcblxyXG4gICAgICBudW1lcm9IYWJpbGl0YWNhbzogcGVzc29hLm51bWVyb0hhYmlsaXRhY2FvLFxyXG4gICAgICByZWdpc3Ryb0hhYmlsaXRhY2FvOiBwZXNzb2EucmVnaXN0cm9IYWJpbGl0YWNhbyxcclxuICAgICAgZGF0YUVtaXNzYW9IYWJpbGl0YWNhbzogdGhpcy5mb3JtYXRhckRhdGFQYXJhQmFja2VuZChwZXNzb2EuZGF0YUVtaXNzYW9IYWJpbGl0YWNhbyksXHJcbiAgICAgIGRhdGFWYWxpZGFkZUhhYmlsaXRhY2FvOiB0aGlzLmZvcm1hdGFyRGF0YVBhcmFCYWNrZW5kKHBlc3NvYS5kYXRhVmFsaWRhZGVIYWJpbGl0YWNhbyksXHJcbiAgICAgIGNhdGVnb3JpYUhhYmlsaXRhY2FvOiBwZXNzb2EuY2F0ZWdvcmlhSGFiaWxpdGFjYW8sXHJcbiAgICAgIGRlZmljaWVuY2lhRmlzaWNhSGFiaWxpdGFjYW86IHBlc3NvYS5kZWZpY2llbmNpYUZpc2ljYUhhYmlsaXRhY2FvLFxyXG4gICAgICBwcmltZWlyYUhhYmlsaXRhY2FvOiB0aGlzLmZvcm1hdGFyRGF0YVBhcmFCYWNrZW5kKHBlc3NvYS5wcmltZWlyYUhhYmlsaXRhY2FvKSxcclxuXHJcbiAgICAgIHBhc3NhcG9ydGU6IHBlc3NvYS5wYXNzYXBvcnRlLFxyXG4gICAgICBjb2RpZ29QYWlzUGFzc2Fwb3J0ZTogcGVzc29hLmNvZGlnb1BhaXNQYXNzYXBvcnRlLFxyXG4gICAgICAvLyBBZGljaW9uYSBhIGNoYXZlICdjbnBqJyBhbyBvYmpldG8gU09NRU5URSBTRSBwZXNzb2EuY25waiBmb3IgdHJ1dGh5XHJcbiAgICAgIC4uLihwZXNzb2EuY25waiAmJiB7IGNucGo6IHBlc3NvYS5jbnBqLnJlcGxhY2UoL1xcRC9nLCAnJykgfSksXHJcbiAgICAgIHJhemFvU29jaWFsOiBwZXNzb2EucmF6YW9Tb2NpYWwsXHJcbiAgICAgIG5vbWVGYW50YXNpYTogcGVzc29hLm5vbWVGYW50YXNpYSxcclxuICAgICAgc2lnbGE6IHBlc3NvYS5zaWdsYSxcclxuICAgICAgcGFnaW5hV2ViOiBwZXNzb2EucGFnaW5hV2ViLFxyXG5cclxuICAgICAgYXV0b0NhZGFzdHJvOiBwZXNzb2EuYXV0b0NhZGFzdHJvLFxyXG5cclxuICAgICAgZW5kZXJlY29zOiBlbmRlcmVjb3NQYXlsb2FkLFxyXG4gICAgICB0ZWxlZm9uZXM6IHRlbGVmb25lc1BheWxvYWQsXHJcbiAgICAgIGVtYWlsczogZW1haWxzUGF5bG9hZFxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEZvcm1hdGEgYSBkYXRhIG5vIHBhZHLDo28gREQvTU0vWVlZWSBwYXJhIG8gYmFja2VuZC5cclxuICAgKi9cclxuICBwcml2YXRlIGZvcm1hdGFyRGF0YVBhcmFCYWNrZW5kKGRhdGE6IGFueSk6IHN0cmluZyB8IG51bGwge1xyXG4gICAgaWYgKCFkYXRhKSByZXR1cm4gbnVsbDtcclxuICAgIGlmICh0eXBlb2YgZGF0YSA9PT0gJ3N0cmluZycgJiYgZGF0YS5pbmNsdWRlcygnLycpKSByZXR1cm4gZGF0YTtcclxuXHJcbiAgICB0cnkge1xyXG4gICAgICBjb25zdCBkID0gbmV3IERhdGUoZGF0YSk7XHJcbiAgICAgIGlmIChpc05hTihkLmdldFRpbWUoKSkpIHJldHVybiBudWxsO1xyXG5cclxuICAgICAgY29uc3QgZGlhID0gU3RyaW5nKGQuZ2V0RGF0ZSgpKS5wYWRTdGFydCgyLCAnMCcpO1xyXG4gICAgICBjb25zdCBtZXMgPSBTdHJpbmcoZC5nZXRNb250aCgpICsgMSkucGFkU3RhcnQoMiwgJzAnKTtcclxuICAgICAgY29uc3QgYW5vID0gZC5nZXRGdWxsWWVhcigpO1xyXG4gICAgICByZXR1cm4gYCR7ZGlhfS8ke21lc30vJHthbm99YDtcclxuICAgIH0gY2F0Y2gge1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGhhbmRsZUVycm9yUHJpbnRDb25zb2xlKGVycm86IGFueSkge1xyXG4gICAgY29uc29sZS5sb2coZXJybyk7XHJcbiAgICB0aGlzLmhhbmRsZUVycm9yKGVycm8pO1xyXG4gIH1cclxuXHJcbiAgaGFuZGxlRXJyb3IoZXJybzogVW5iUGVzc29hRXJyb1BhZHJhbykge1xyXG4gICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcclxuICAgIHRoaXMuaXNMb2FkaW5nQ2hhbmdlLmVtaXQoZmFsc2UpO1xyXG5cclxuICAgIC8vIDEuIE1vc3RyYSBhIG1lbnNhZ2VtIGN1cnRhL3NpbXBsZXMgbm8gU25hY2tCYXIgKEZ1bmRvIGRhIHRlbGEpXHJcbiAgICAvLyBFeDogXCJPIGZvcm11bMOhcmlvIHBvc3N1aSBlcnJvcyBkZSB2YWxpZGHDp8Ojby5cIiBvdSBcIlNlc3PDo28gZXhwaXJhZGEuXCJcclxuICAgIGlmIChlcnJvLm1lbnNhZ2VtU2ltcGxlcykge1xyXG4gICAgICB0aGlzLm9wZW5TbmFja0JhcihlcnJvLm1lbnNhZ2VtU2ltcGxlcyk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gMi4gTW9zdHJhIGEgbWVuc2FnZW0gZGV0YWxoYWRhIEhUTUwgbm8gY29tcG9uZW50ZSA8dW5iLW1lbnNhZ2VtPlxyXG4gICAgLy8gRXg6IExpc3RhIGNvbSA8dWw+PGxpPkNhbXBvIERhdGEgaW52w6FsaWRvLi4uPC9saT48L3VsPlxyXG4gICAgaWYgKHRoaXMuYWxlcnRTZXJ2aWNlICYmIGVycm8ubWVuc2FnZW1IdG1sKSB7XHJcbiAgICAgIC8vIFNlIG8gc2V1IGFsZXJ0U2VydmljZSBzdXBvcnRhciBJRCBkbyBjb21wb25lbnRlIGFsdm8sIHBhc3NlIGFxdWkuXHJcbiAgICAgIC8vIENhc28gY29udHLDoXJpbywgZWxlIG1vc3RyYSBubyBjb21wb25lbnRlIHBhZHLDo28uXHJcbiAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLnNob3dNZXNzYWdlKGVycm8ubWVuc2FnZW1IdG1sLCBVbmJUaXBvTWVuc2FnZW1FbnVtLkRBTkdFUiwgdGhpcy5pZE1lbnNhZ2VtU2VydmljZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRMYWJlbERvY3VtZW50bygpOiBzdHJpbmcge1xyXG4gICAgc3dpdGNoICh0aGlzLnBlc3NvYS50aXBvUGVzc29hKSB7XHJcbiAgICAgIGNhc2UgdGhpcy50aXBvUGVzc29hRW51bSgpLkZJU0lDQTogcmV0dXJuICdDUEYnO1xyXG4gICAgICBjYXNlIHRoaXMudGlwb1Blc3NvYUVudW0oKS5KVVJJRElDQTogcmV0dXJuICdDTlBKJztcclxuICAgICAgY2FzZSB0aGlzLnRpcG9QZXNzb2FFbnVtKCkuRVNUUkFOR0VJUkE6IHJldHVybiAnUGFzc2Fwb3J0ZSc7XHJcbiAgICAgIGRlZmF1bHQ6IHJldHVybiAnRG9jdW1lbnRvJztcclxuICAgIH1cclxuICB9XHJcblxyXG5cclxuXHJcbn1cclxuIiwiPG1hdC1wcm9ncmVzcy1iYXIgKm5nSWY9XCJpc0xvYWRpbmdcIiBtb2RlPVwiaW5kZXRlcm1pbmF0ZVwiPjwvbWF0LXByb2dyZXNzLWJhcj5cclxuXHJcbjxkaXYgY2xhc3M9XCJmb3JtLWNvbnRhaW5lclwiIFtjbGFzcy5kaXNhYmxlZC13cmFwcGVyXT1cImlzTG9hZGluZ1wiPlxyXG4gIDxsaWItdW5iLXBlc3NvYS1wZXNxdWlzYXIgXHJcbiAgICBbYmFja2VuZFVSTF09XCJiYWNrZW5kVVJMXCIgXHJcbiAgICBbZGVmYXVsdFRpcG9QZXNzb2FdPVwiZGVmYXVsdFRpcG9QZXNzb2FcIlxyXG4gICAgW3Blc3F1aXNhclBvckNOUEpdPVwicGVzcXVpc2FyUG9yQ05QSlwiIFxyXG4gICAgW3Blc3F1aXNhclBvckNQRl09XCJwZXNxdWlzYXJQb3JDUEZcIlxyXG4gICAgW3Blc3F1aXNhclBvckVzdHJhbmdlaXJvXT1cInBlc3F1aXNhclBvckVzdHJhbmdlaXJvXCIgXHJcbiAgICBbY2FtcG9QZXNxdWlzYU1heFdpZHRoXT1cImNhbXBvUGVzcXVpc2FNYXhXaWR0aFwiXHJcbiAgICAocGVzc29hRW1pdHRlZCk9XCJwZXNzb2FSZWNlYmlkYSgkZXZlbnQpXCI+XHJcbiAgPC9saWItdW5iLXBlc3NvYS1wZXNxdWlzYXI+XHJcbjwvZGl2PlxyXG5cclxuPHVuYi1tZW5zYWdlbSBbaWRlbnRpZmljYWRvcl09XCJpZE1lbnNhZ2VtU2VydmljZVwiPjwvdW5iLW1lbnNhZ2VtPlxyXG5cclxuPCEtLSBMYWJlbCBpbmRpY2FuZG8gcXVlIGVzdMOhIGluY2x1aW5kbyBub3ZhIHBlc3NvYSAtLT5cclxuPGRpdiAqbmdJZj1cImRvY3VtZW50b1Blc3F1aXNhZG9cIlxyXG4gICAgICBjbGFzcz1cInN0YXR1cy1iYW5uZXJcIiBcclxuICAgICAgW25nQ2xhc3NdPVwie1xyXG4gICAgICAgJ3N0YXR1cy1pbmNsdXNhbyc6ICFwZXNzb2EuY29kaWdvUGVzc29hLFxyXG4gICAgICAgJ3N0YXR1cy1lZGljYW8nOiBwZXNzb2EuY29kaWdvUGVzc29hICYmICFpc1JlYWRvbmx5RnJvbVNpYXBlLFxyXG4gICAgICAgJ3N0YXR1cy1ibG9xdWVhZG8nOiBpc1JlYWRvbmx5RnJvbVNpYXBlXHJcbiAgICAgfVwiPlxyXG5cclxuICA8bWF0LWljb24+XHJcbiAgICB7eyAhcGVzc29hLmNvZGlnb1Blc3NvYSA/ICdwZXJzb25fYWRkJyA6IChpc1JlYWRvbmx5RnJvbVNpYXBlID8gJ2xvY2snIDogJ2VkaXQnKSB9fVxyXG4gIDwvbWF0LWljb24+XHJcblxyXG4gIDxzcGFuPlxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFwZXNzb2EuY29kaWdvUGVzc29hXCI+SW5jbHVpbmRvIG5vdmEgcGVzc29hPC9uZy1jb250YWluZXI+XHJcbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwicGVzc29hLmNvZGlnb1Blc3NvYSAmJiAhaXNSZWFkb25seUZyb21TaWFwZVwiPkVkaXRhbmRvIHBlc3NvYTwvbmctY29udGFpbmVyPlxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImlzUmVhZG9ubHlGcm9tU2lhcGVcIj5SZWdpc3RybyBTSUFQRSAoVmlzdWFsaXphw6fDo28pPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgY29tIDxzdHJvbmc+e3sgZ2V0TGFiZWxEb2N1bWVudG8oKSB9fSB7eyBkb2N1bWVudG9QZXNxdWlzYWRvIH19PC9zdHJvbmc+XHJcbiAgPC9zcGFuPlxyXG5cclxuPC9kaXY+XHJcblxyXG5cclxuPGZvcm0gI3Blc3NvYUZvcm09XCJuZ0Zvcm1cIiBbY2xhc3MucmVhZG9ubHldPVwiaXNSZWFkb25seUZyb21TaWFwZSB8fCBpc0xvYWRpbmdcIiBjbGFzcz1cImZvcm0tY29udGFpbmVyIG10LTJcIlxyXG4gICpuZ0lmPVwiYnVzY2FSZWFsaXphZGFcIiAobmdTdWJtaXQpPVwic2FsdmFyKHBlc3NvYUZvcm0pXCI+XHJcblxyXG4gIDwhLS0gQ2FtcG9zIFBlc3NvYSBGw61zaWNhIGUgRXN0cmFuZ2VpcmEgIC0tPlxyXG4gIDxuZy1jb250YWluZXJcclxuICAgICpuZ0lmPVwicGVzc29hLnRpcG9QZXNzb2EgPT0gdGlwb1Blc3NvYUVudW0oKS5GSVNJQ0EgfHwgcGVzc29hLnRpcG9QZXNzb2EgPT0gdGlwb1Blc3NvYUVudW0oKS5FU1RSQU5HRUlSQVwiPlxyXG4gICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwiZm9ybS0yNVwiIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCI+XHJcbiAgICAgIDxtYXQtbGFiZWw+Tm9tZTwvbWF0LWxhYmVsPlxyXG4gICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBtYXRJbnB1dCBbKG5nTW9kZWwpXT1cInBlc3NvYS5ub21lXCIgbmFtZT1cIm5vbWVcIiAjbm9tZT1cIm5nTW9kZWxcIiByZXF1aXJlZCAvPlxyXG4gICAgPC9tYXQtZm9ybS1maWVsZD5cclxuXHJcbiAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJmb3JtLTEwXCIgYXBwZWFyYW5jZT1cIm91dGxpbmVcIj5cclxuICAgICAgPG1hdC1sYWJlbD5TZXhvPC9tYXQtbGFiZWw+XHJcbiAgICAgIDxtYXQtc2VsZWN0IFsobmdNb2RlbCldPVwicGVzc29hLmNvZGlnb1NleG9cIiBuYW1lPVwiY29kaWdvU2V4b1wiICNjb2RpZ29TZXhvPVwibmdNb2RlbFwiIHJlcXVpcmVkPlxyXG4gICAgICAgIDxtYXQtb3B0aW9uIFt2YWx1ZV09XCIxXCI+TWFzY3VsaW5vPC9tYXQtb3B0aW9uPlxyXG4gICAgICAgIDxtYXQtb3B0aW9uIFt2YWx1ZV09XCIyXCI+RmVtaW5pbm88L21hdC1vcHRpb24+XHJcbiAgICAgIDwvbWF0LXNlbGVjdD5cclxuICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcblxyXG4gICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwiZm9ybS0xNVwiIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCI+XHJcbiAgICAgIDxtYXQtbGFiZWw+RGF0YSBOYXNjaW1lbnRvPC9tYXQtbGFiZWw+XHJcbiAgICAgIDxpbnB1dCBtYXRJbnB1dCBbbWF0RGF0ZXBpY2tlcl09XCJkYXRhTmFzY2ltZW50b1BpY2tlclwiIFsobmdNb2RlbCldPVwicGVzc29hLmRhdGFOYXNjaW1lbnRvXCIgbmFtZT1cImRhdGFOYXNjaW1lbnRvXCJcclxuICAgICAgICAjZGF0YU5hc2NpbWVudG89XCJuZ01vZGVsXCIgcmVxdWlyZWQ+XHJcbiAgICAgIDxtYXQtZGF0ZXBpY2tlci10b2dnbGUgbWF0U3VmZml4IFtmb3JdPVwiZGF0YU5hc2NpbWVudG9QaWNrZXJcIj48L21hdC1kYXRlcGlja2VyLXRvZ2dsZT5cclxuICAgICAgPG1hdC1kYXRlcGlja2VyICNkYXRhTmFzY2ltZW50b1BpY2tlcj48L21hdC1kYXRlcGlja2VyPlxyXG4gICAgPC9tYXQtZm9ybS1maWVsZD5cclxuXHJcbiAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJmb3JtLTEwXCIgYXBwZWFyYW5jZT1cIm91dGxpbmVcIj5cclxuICAgICAgPG1hdC1sYWJlbD5Fc3RhZG8gQ2l2aWw8L21hdC1sYWJlbD5cclxuICAgICAgPG1hdC1zZWxlY3QgWyhuZ01vZGVsKV09XCJwZXNzb2EuY29kaWdvRXN0YWRvQ2l2aWxcIiBuYW1lPVwiY29kaWdvRXN0YWRvQ2l2aWxcIiAjY29kaWdvRXN0YWRvQ2l2aWw9XCJuZ01vZGVsXCI+XHJcbiAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IGVzdGFkbyBvZiBlc3RhZG9zQ2l2aWwgfCBhc3luY1wiIFt2YWx1ZV09XCJlc3RhZG8uY29kaWdvXCI+XHJcbiAgICAgICAgICB7eyBlc3RhZG8uZGVub21pbmFjYW8gfX1cclxuICAgICAgICA8L21hdC1vcHRpb24+XHJcbiAgICAgIDwvbWF0LXNlbGVjdD5cclxuICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcblxyXG4gICAgPCEtLVxyXG4gICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cImZvcm0tMTVcIiBhcHBlYXJhbmNlPVwib3V0bGluZVwiPlxyXG4gICAgICAgICAgPG1hdC1sYWJlbD5OYXR1cmFsaWRhZGU8L21hdC1sYWJlbD5cclxuICAgICAgICAgIDxtYXQtc2VsZWN0IFsobmdNb2RlbCldPVwicGVzc29hLm5hdHVyYWxpZGFkZVwiIG5hbWU9XCJuYXR1cmFsaWRhZGVcIiAjbmF0dXJhbGlkYWRlPVwibmdNb2RlbFwiIHJlcXVpcmVkPlxyXG4gICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9XCJsZXQgY2lkYWRlIG9mIGdldExpc3RhRXN0YWRvcygpXCIgW3ZhbHVlXT1cImNpZGFkZS5jb2RpZ29cIj5cclxuICAgICAgICAgICAgICB7eyBjaWRhZGUuZGVzY3JpY2FvIH19XHJcbiAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgIDwvbWF0LXNlbGVjdD5cclxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgIC0tPlxyXG4gICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwiZm9ybS0xMFwiIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCI+XHJcbiAgICAgIDxtYXQtbGFiZWw+UGHDrXMgTmFzY2ltZW50bzwvbWF0LWxhYmVsPlxyXG4gICAgICA8bWF0LXNlbGVjdCBbKG5nTW9kZWwpXT1cInBlc3NvYS5jb2RpZ29QYWlzTmFzY2ltZW50b1wiIG5hbWU9XCJjb2RpZ29QYWlzTmFzY2ltZW50b1wiICNjb2RpZ29QYWlzTmFzY2ltZW50bz1cIm5nTW9kZWxcIlxyXG4gICAgICAgIHJlcXVpcmVkPlxyXG4gICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj1cImxldCBwYWlzTmFzY2ltZW50byBvZiBwYWlzZXMgfCBhc3luY1wiIFt2YWx1ZV09XCJwYWlzTmFzY2ltZW50by5jb2RpZ29cIj5cclxuICAgICAgICAgIDxzcGFuICpuZ0lmPVwicGFpc05hc2NpbWVudG8uZGVub21pbmFjYW8gPT09ICdCUkFTSUwnXCI+8J+Hp/Cfh7cgPGI+e3sgcGFpc05hc2NpbWVudG8uZGVub21pbmFjYW8gfX08L2I+PC9zcGFuPlxyXG4gICAgICAgICAgPHNwYW4gKm5nSWY9XCJwYWlzTmFzY2ltZW50by5kZW5vbWluYWNhbyAhPT0gJ0JSQVNJTCdcIj57eyBwYWlzTmFzY2ltZW50by5kZW5vbWluYWNhbyB9fTwvc3Bhbj5cclxuICAgICAgICA8L21hdC1vcHRpb24+XHJcbiAgICAgIDwvbWF0LXNlbGVjdD5cclxuICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcblxyXG4gICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwiZm9ybS0xMFwiIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCIgKm5nSWY9XCJwZXNzb2EuY29kaWdvUGFpc05hc2NpbWVudG8gPT0gMjJcIj4gPCEtLSAyMiBlaCBCcmFzaWwtLT5cclxuICAgICAgPG1hdC1sYWJlbD5VRiBOYXNjaW1lbnRvPC9tYXQtbGFiZWw+XHJcbiAgICAgIDxtYXQtc2VsZWN0IFsobmdNb2RlbCldPVwicGVzc29hLnVmTmFzY2ltZW50b1wiIG5hbWU9XCJ1Zk5hc2NpbWVudG9cIiAjdWZOYXNjaW1lbnRvPVwibmdNb2RlbFwiIHJlcXVpcmVkPlxyXG4gICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj1cImxldCBlc3RhZG8gb2YgZ2V0TGlzdGFFc3RhZG9zKClcIiBbdmFsdWVdPVwiZXN0YWRvLmlkZW50aWZpY2Fkb3JcIj5cclxuICAgICAgICAgIHt7IGVzdGFkby5pZGVudGlmaWNhZG9yIH19XHJcbiAgICAgICAgPC9tYXQtb3B0aW9uPlxyXG4gICAgICA8L21hdC1zZWxlY3Q+XHJcbiAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG5cclxuICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cImZvcm0tMTVcIiBhcHBlYXJhbmNlPVwib3V0bGluZVwiICpuZ0lmPVwicGVzc29hLmNvZGlnb1BhaXNOYXNjaW1lbnRvID09IDIyXCI+XHJcbiAgICAgIDxtYXQtbGFiZWw+TmF0dXJhbGlkYWRlPC9tYXQtbGFiZWw+XHJcbiAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIG1hdElucHV0IFsobmdNb2RlbCldPVwicGVzc29hLm5hdHVyYWxpZGFkZVwiIG5hbWU9XCJuYXR1cmFsaWRhZGVcIiAjbmF0dXJhbGlkYWRlPVwibmdNb2RlbFwiXHJcbiAgICAgICAgcmVxdWlyZWQgLz5cclxuICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcblxyXG4gICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwiZm9ybS0xMFwiIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCI+XHJcbiAgICAgIDxtYXQtbGFiZWw+RXNjb2xhcmlkYWRlPC9tYXQtbGFiZWw+XHJcbiAgICAgIDxtYXQtc2VsZWN0IFsobmdNb2RlbCldPVwicGVzc29hLmVzY29sYXJpZGFkZVwiIG5hbWU9XCJjb2RpZ29Fc2NvbGFyaWRhZGVcIiAjY29kaWdvRXNjb2xhcmlkYWRlPVwibmdNb2RlbFwiIHJlcXVpcmVkPlxyXG4gICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj1cImxldCBlc2NvbGFyaWRhZGUgb2YgZXNjb2xhcmlkYWRlIHwgYXN5bmNcIiBbdmFsdWVdPVwiZXNjb2xhcmlkYWRlLmNvZGlnb1wiPlxyXG4gICAgICAgICAge3sgZXNjb2xhcmlkYWRlLmRlbm9taW5hY2FvIH19XHJcbiAgICAgICAgPC9tYXQtb3B0aW9uPlxyXG4gICAgICA8L21hdC1zZWxlY3Q+XHJcbiAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG5cclxuICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cImZvcm0tMjVcIiBhcHBlYXJhbmNlPVwib3V0bGluZVwiPlxyXG4gICAgICA8bWF0LWxhYmVsPk5vbWUgU29jaWFsPC9tYXQtbGFiZWw+XHJcbiAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIG1hdElucHV0IFsobmdNb2RlbCldPVwicGVzc29hLm5vbWVTb2NpYWxcIiBuYW1lPVwibm9tZVNvY2lhbFwiICNub21lU29jaWFsPVwibmdNb2RlbFwiIC8+XHJcbiAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG5cclxuICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cImZvcm0tMjVcIiBhcHBlYXJhbmNlPVwib3V0bGluZVwiPlxyXG4gICAgICA8bWF0LWxhYmVsPk5vbWUgZGEgTcOjZTwvbWF0LWxhYmVsPlxyXG4gICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBtYXRJbnB1dCBbKG5nTW9kZWwpXT1cInBlc3NvYS5ub21lTWFlXCIgbmFtZT1cIm5vbWVNYWVcIiAjbm9tZU1hZT1cIm5nTW9kZWxcIiByZXF1aXJlZCAvPlxyXG4gICAgPC9tYXQtZm9ybS1maWVsZD5cclxuXHJcbiAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJmb3JtLTI1XCIgYXBwZWFyYW5jZT1cIm91dGxpbmVcIj5cclxuICAgICAgPG1hdC1sYWJlbD5Ob21lIGRvIFBhaTwvbWF0LWxhYmVsPlxyXG4gICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBtYXRJbnB1dCBbKG5nTW9kZWwpXT1cInBlc3NvYS5ub21lUGFpXCIgbmFtZT1cIm5vbWVQYWlcIiAjbm9tZVBhaT1cIm5nTW9kZWxcIiByZXF1aXJlZCAvPlxyXG4gICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgPCEtLSBDYW1wb3MgUGVzc29hIEp1csOtZGljYSAtLT5cclxuICA8bmctY29udGFpbmVyICpuZ0lmPVwicGVzc29hLnRpcG9QZXNzb2EgPT09IHRpcG9QZXNzb2FFbnVtKCkuSlVSSURJQ0FcIj5cclxuICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cImZvcm0tMjVcIiBhcHBlYXJhbmNlPVwib3V0bGluZVwiPlxyXG4gICAgICA8bWF0LWxhYmVsPlJhesOjbyBTb2NpYWw8L21hdC1sYWJlbD5cclxuICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgbWF0SW5wdXQgWyhuZ01vZGVsKV09XCJwZXNzb2EucmF6YW9Tb2NpYWxcIiBuYW1lPVwicmF6YW9Tb2NpYWxcIiAvPlxyXG4gICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cImZvcm0tMjVcIiBhcHBlYXJhbmNlPVwib3V0bGluZVwiPlxyXG4gICAgICA8bWF0LWxhYmVsPk5vbWUgRmFudGFzaWE8L21hdC1sYWJlbD5cclxuICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgbWF0SW5wdXQgWyhuZ01vZGVsKV09XCJwZXNzb2Eubm9tZUZhbnRhc2lhXCIgbmFtZT1cIm5vbWVGYW50YXNpYVwiIC8+XHJcbiAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gIDwvbmctY29udGFpbmVyPlxyXG5cclxuICA8bmctY29udGFpbmVyICpuZ0lmPVwicGVzc29hLnRpcG9QZXNzb2EgPT0gdGlwb1Blc3NvYUVudW0oKS5GSVNJQ0FcIj5cclxuICAgIDxiIHN0eWxlPVwiZmxleDogMSAxIDEwMCU7IG1hcmdpbi1ib3R0b206IDEwcHg7XCI+RG9jdW1lbnRhw6fDo288L2I+XHJcblxyXG4gICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwiZm9ybS0yNVwiIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCI+XHJcbiAgICAgIDxtYXQtbGFiZWw+SWRlbnRpZGFkZTwvbWF0LWxhYmVsPlxyXG4gICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBtYXRJbnB1dCBbKG5nTW9kZWwpXT1cInBlc3NvYS5yZ1wiIG5hbWU9XCJyZ1wiICNyZz1cIm5nTW9kZWxcIiByZXF1aXJlZCAvPlxyXG4gICAgPC9tYXQtZm9ybS1maWVsZD5cclxuXHJcbiAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJmb3JtLTI1XCIgYXBwZWFyYW5jZT1cIm91dGxpbmVcIj5cclxuICAgICAgPG1hdC1sYWJlbD7Dk3Jnw6NvIEVtaXNzb3I8L21hdC1sYWJlbD5cclxuICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgbWF0SW5wdXQgWyhuZ01vZGVsKV09XCJwZXNzb2EucmdPcmdhb1wiIG5hbWU9XCJyZ09yZ2FvXCIgI3JnT3JnYW89XCJuZ01vZGVsXCIgcmVxdWlyZWQgLz5cclxuICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcblxyXG4gICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwiZm9ybS0yNVwiIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCI+XHJcbiAgICAgIDxtYXQtbGFiZWw+VW5pZGFkZSBGZWRlcmF0aXZhPC9tYXQtbGFiZWw+XHJcbiAgICAgIDxtYXQtc2VsZWN0IFsobmdNb2RlbCldPVwicGVzc29hLnJnVWZcIiBuYW1lPVwicmdVZlwiICNyZ1VmPVwibmdNb2RlbFwiIHJlcXVpcmVkPlxyXG4gICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj1cImxldCBlc3RhZG8gb2YgZ2V0TGlzdGFFc3RhZG9zKClcIiBbdmFsdWVdPVwiZXN0YWRvLmlkZW50aWZpY2Fkb3JcIj5cclxuICAgICAgICAgIHt7IGVzdGFkby5pZGVudGlmaWNhZG9yIH19XHJcbiAgICAgICAgPC9tYXQtb3B0aW9uPlxyXG4gICAgICA8L21hdC1zZWxlY3Q+XHJcbiAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG5cclxuICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cImZvcm0tMjBcIiBhcHBlYXJhbmNlPVwib3V0bGluZVwiPlxyXG4gICAgICA8bWF0LWxhYmVsPkRhdGEgZGUgRW1pc3PDo288L21hdC1sYWJlbD5cclxuICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgbWF0SW5wdXQgWyhuZ01vZGVsKV09XCJwZXNzb2EucmdEYXRhRW1pc3Nhb1wiIG5hbWU9XCJyZ0RhdGFFbWlzc2FvXCIgI3JnRGF0YUVtaXNzYW89XCJuZ01vZGVsXCIgLz5cclxuICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCJwZXNzb2EudGlwb1Blc3NvYSA9PSB0aXBvUGVzc29hRW51bSgpLkVTVFJBTkdFSVJBIFwiPlxyXG4gICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCI+XHJcbiAgICAgIDxtYXQtbGFiZWw+RGF0YSBDaGVnYWRhIEJyYXNpbDwvbWF0LWxhYmVsPlxyXG4gICAgICA8aW5wdXQgbWF0SW5wdXQgW21hdERhdGVwaWNrZXJdPVwiZGF0YUNoZWdhZGFCcmFzaWxQaWNrZXJcIiBbKG5nTW9kZWwpXT1cInBlc3NvYS5kYXRhQ2hlZ2FkYUJyYXNpbFwiXHJcbiAgICAgICAgbmFtZT1cImRhdGFDaGVnYWRhQnJhc2lsXCIgI2RhdGFDaGVnYWRhQnJhc2lsPVwibmdNb2RlbFwiIHJlcXVpcmVkPlxyXG4gICAgICA8bWF0LWRhdGVwaWNrZXItdG9nZ2xlIG1hdFN1ZmZpeCBbZm9yXT1cImRhdGFDaGVnYWRhQnJhc2lsUGlja2VyXCI+PC9tYXQtZGF0ZXBpY2tlci10b2dnbGU+XHJcbiAgICAgIDxtYXQtZGF0ZXBpY2tlciAjZGF0YUNoZWdhZGFCcmFzaWxQaWNrZXI+PC9tYXQtZGF0ZXBpY2tlcj5cclxuICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcblxyXG4gICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwiZm9ybS0xMFwiIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCI+XHJcbiAgICAgIDxtYXQtbGFiZWw+UGHDrXMgUGFzc2Fwb3J0ZTwvbWF0LWxhYmVsPlxyXG4gICAgICA8bWF0LXNlbGVjdCBbKG5nTW9kZWwpXT1cInBlc3NvYS5jb2RpZ29QYWlzUGFzc2Fwb3J0ZVwiIG5hbWU9XCJjb2RpZ29QYWlzUGFzc2Fwb3J0ZVwiICNjb2RpZ29QYWlzUGFzc2Fwb3J0ZT1cIm5nTW9kZWxcIlxyXG4gICAgICAgIHJlcXVpcmVkPlxyXG4gICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj1cImxldCBwYWlzTmFzY2ltZW50byBvZiBwYWlzZXMgfCBhc3luY1wiIFt2YWx1ZV09XCJwYWlzTmFzY2ltZW50by5jb2RpZ29cIj5cclxuICAgICAgICAgIHt7IHBhaXNOYXNjaW1lbnRvLmRlbm9taW5hY2FvIH19XHJcbiAgICAgICAgPC9tYXQtb3B0aW9uPlxyXG4gICAgICA8L21hdC1zZWxlY3Q+XHJcbiAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG5cclxuICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwib3V0bGluZVwiPlxyXG4gICAgICA8bWF0LWxhYmVsPk7Dum1lcm8gUGFzc2Fwb3J0ZTwvbWF0LWxhYmVsPlxyXG4gICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBtYXRJbnB1dCBbKG5nTW9kZWwpXT1cInBlc3NvYS5wYXNzYXBvcnRlXCIgbmFtZT1cInBhc3NhcG9ydGVcIiAjcGFzc2Fwb3J0ZT1cIm5nTW9kZWxcIiByZXF1aXJlZCAvPlxyXG4gICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgPGxpYi11bmItcGVzc29hLXRlbGVmb25lLWxpc3Qgc3R5bGU9XCJmbGV4OiAxIDEgMTAwJTtcIiBbYmFja2VuZFVSTF09XCJiYWNrZW5kVVJMXCIgW3RlbGVmb25lc109XCJwZXNzb2EudGVsZWZvbmVzXCJcclxuICAgICh0ZWxlZm9uZXNFbWl0dGVkKT1cInRlbGVmb25lc0VtaXR0ZWQoJGV2ZW50KVwiPjwvbGliLXVuYi1wZXNzb2EtdGVsZWZvbmUtbGlzdD5cclxuXHJcbiAgPGxpYi11bmItcGVzc29hLWVuZGVyZWNvLWxpc3Qgc3R5bGU9XCJmbGV4OiAxIDEgMTAwJTtcIiBbYmFja2VuZFVSTF09XCJiYWNrZW5kVVJMXCIgW2VuZGVyZWNvc109XCJwZXNzb2EuZW5kZXJlY29zXCJcclxuICAgIChlbmRlcmVjb3NFbWl0dGVkKT1cImVuZGVyZWNvc0VtaXR0ZWQoJGV2ZW50KVwiPjwvbGliLXVuYi1wZXNzb2EtZW5kZXJlY28tbGlzdD5cclxuXHJcbiAgPGxpYi11bmItcGVzc29hLWVtYWlsLWxpc3Qgc3R5bGU9XCJmbGV4OiAxIDEgMTAwJTtcIiBbYmFja2VuZFVSTF09XCJiYWNrZW5kVVJMXCIgW2VtYWlsc109XCJwZXNzb2EuZW1haWxzXCJcclxuICAgIChlbWFpbHNFbWl0dGVkKT1cImVtYWlsc0VtaXR0ZWQoJGV2ZW50KVwiPjwvbGliLXVuYi1wZXNzb2EtZW1haWwtbGlzdD5cclxuXHJcbiAgPGRpdiAqbmdJZj1cImlzUmVhZG9ubHlGcm9tU2lhcGVcIiBzdHlsZT1cImZsZXg6MSAxIDEwMCU7IG1hcmdpbi1ib3R0b206MTBweDtcIj5cclxuICAgIDxtYXQtY2FyZD5cclxuICAgICAgPG1hdC1jYXJkLWNvbnRlbnQ+XHJcbiAgICAgICAgPHN0cm9uZz5TZXJ2aWRvciBjb20gbWF0csOtY3VsYSBTSUFQRSBkZXZlIHRlciBzZXVzIGRhZG9zIGF1dGFsaXphZG9zIHBlbG8gYXBsaWNhdGl2byBkbyBzb3Vnb3Y8L3N0cm9uZz5cclxuICAgICAgPC9tYXQtY2FyZC1jb250ZW50PlxyXG4gICAgPC9tYXQtY2FyZD5cclxuICA8L2Rpdj5cclxuXHJcbiAgPG1hdC1jYXJkLWFjdGlvbnMgY2xhc3M9XCJjYXJkLWFjdGlvbnMtYnV0dG9uc1wiICpuZ0lmPVwiYnVzY2FSZWFsaXphZGFcIj5cclxuICAgIDxidXR0b24gbWF0LWZsYXQtYnV0dG9uIFtkaXNhYmxlZF09XCJpc0xvYWRpbmcgfHwgaXNSZWFkb25seUZyb21TaWFwZVwiIHR5cGU9XCJzdWJtaXRcIiBjb2xvcj1cInByaW1hcnlcIj5cclxuICAgICAgU2FsdmFyXHJcbiAgICA8L2J1dHRvbj5cclxuICA8L21hdC1jYXJkLWFjdGlvbnM+XHJcblxyXG48L2Zvcm0+Il19
372
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidW5iLXBlc3NvYS1mb3JtLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3VuYi1saWItY29tcG9uZW50cy9zcmMvbGliL3VuYi1wZXNzb2EvdW5iLXBlc3NvYS1mb3JtL3VuYi1wZXNzb2EtZm9ybS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy91bmItbGliLWNvbXBvbmVudHMvc3JjL2xpYi91bmItcGVzc29hL3VuYi1wZXNzb2EtZm9ybS91bmItcGVzc29hLWZvcm0uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGdCQUFnQixFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFJNUcsT0FBTyxFQUFzQixtQkFBbUIsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBQ2xHLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sNkNBQTZDLENBQUM7QUFDN0UsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZ0RBQWdELENBQUM7QUFLbkYsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBRXZFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFRNUQsTUFBTSxPQUFPLHNCQUFzQjtJQStCakMsWUFBb0IsT0FBeUIsRUFBVSxRQUFxQixFQUFVLFlBQWdDO1FBQWxHLFlBQU8sR0FBUCxPQUFPLENBQWtCO1FBQVUsYUFBUSxHQUFSLFFBQVEsQ0FBYTtRQUFVLGlCQUFZLEdBQVosWUFBWSxDQUFvQjtRQTlCdEgsY0FBUyxHQUFZLEtBQUssQ0FBQztRQUMzQixtQkFBYyxHQUFZLEtBQUssQ0FB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LEVBQUU7Z0JBR2UsZUFBZTtzQkFBdEQsS0FBSzt1QkFBQyxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRTtnQkFDRSxnQkFBZ0I7c0JBQXZELEtBQUs7dUJBQUMsRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUU7Z0JBQ0UsdUJBQXVCO3NCQUE5RCxLQUFLO3VCQUFDLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFO2dCQUU3QixpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBQ0cscUJBQXFCO3NCQUE3QixLQUFLO2dCQUVJLGFBQWE7c0JBQXRCLE1BQU07Z0JBQ0csZUFBZTtzQkFBeEIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGJvb2xlYW5BdHRyaWJ1dGUsIENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25Jbml0LCBPdXRwdXQsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBOZ0Zvcm0gfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IE1hdFNuYWNrQmFyIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc25hY2stYmFyJztcclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBVbmJNZW5zYWdlbVNlcnZpY2UsIFVuYlRpcG9NZW5zYWdlbUVudW0gfSBmcm9tICcuLi8uLi91bmItbWVuc2FnZW0vdW5iLW1lbnNhZ2VtLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBsaXN0YUVzdGFkb3MgfSBmcm9tICcuLi9wZXNzb2EtdGFiZWxhcy1hcG9pbyc7XHJcbmltcG9ydCB7IFVuYlBlc3NvYUVtYWlsIH0gZnJvbSAnLi4vdW5iLXBlc3NvYS1tb2RlbHMvdW5iLXBlc3NvYS1lbWFpbC5tb2RlbCc7XHJcbmltcG9ydCB7IFVuYlBlc3NvYUVuZGVyZWNvIH0gZnJvbSAnLi4vdW5iLXBlc3NvYS1tb2RlbHMvdW5iLXBlc3NvYS1lbmRlcmVjby5tb2RlbCc7XHJcbmltcG9ydCB7IFVuYlBlc3NvYUVzY29sYXJpZGFkZSB9IGZyb20gJy4uL3VuYi1wZXNzb2EtbW9kZWxzL3VuYi1wZXNzb2EtZXNjb2xhcmlkYWRlLm1vZGVsJztcclxuaW1wb3J0IHsgVW5iUGVzc29hRXN0YWRvQ2l2aWwgfSBmcm9tICcuLi91bmItcGVzc29hLW1vZGVscy91bmItcGVzc29hLWVzdGFkby1jaXZpbC5tb2RlbCc7XHJcbmltcG9ydCB7IFVuYlBlc3NvYVBhaXMgfSBmcm9tICcuLi91bmItcGVzc29hLW1vZGVscy91bmItcGVzc29hLXBhaXMnO1xyXG5pbXBvcnQgeyBVbmJQZXNzb2FUZWxlZm9uZSB9IGZyb20gJy4uL3VuYi1wZXNzb2EtbW9kZWxzL3VuYi1wZXNzb2EtdGVsZWZvbmUubW9kZWwnO1xyXG5pbXBvcnQgeyBVbmJQZXNzb2FNb2RlbCB9IGZyb20gJy4uL3VuYi1wZXNzb2EtbW9kZWxzL3VuYi1wZXNzb2EubW9kZWwnO1xyXG5pbXBvcnQgeyBVbkJQZXNzb2FTZXJ2aWNlLCBVbmJQZXNzb2FFcnJvUGFkcmFvIH0gZnJvbSAnLi4vdW5iLXBlc3NvYS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgVW5iVGlwb1Blc3NvYUVudW0gfSBmcm9tICcuLi91bmItdGlwby1wZXNzb2EuZW51bSc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2xpYi11bmItcGVzc29hLWZvcm0nLFxyXG4gIHN0YW5kYWxvbmU6IGZhbHNlLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi91bmItcGVzc29hLWZvcm0uY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsOiAnLi91bmItcGVzc29hLWZvcm0uY29tcG9uZW50LmNzcydcclxufSlcclxuZXhwb3J0IGNsYXNzIFVuYlBlc3NvYUZvcm1Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG4gIGlzTG9hZGluZzogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGJ1c2NhUmVhbGl6YWRhOiBib29sZWFuID0gZmFsc2U7XHJcbiAgZW5kZXJlY28gPSBuZXcgVW5iUGVzc29hRW5kZXJlY28oKTtcclxuICBlbWFpbCA9IG5ldyBVbmJQZXNzb2FFbWFpbCgpO1xyXG5cclxuICB0aXBvc1Blc3NvYSA9IFVuYlRpcG9QZXNzb2FFbnVtO1xyXG5cclxuICBwZXNzb2E6IFVuYlBlc3NvYU1vZGVsID0gbmV3IFVuYlBlc3NvYU1vZGVsKCk7IC8vIGluaWNpYWxpemEgY29tIHBlc3NvYVxyXG4gIGRhZG9zU2Fsdm9zOiB7IFtrZXk6IHN0cmluZ106IGFueSB9ID0ge307IC8vIEFybWF6ZW5hIG9zIGRhZG9zIGFvIHRyb2NhciBkZSB0aXBvXHJcblxyXG4gIC8vIFF1YW5kbyB2ZXJkYWRlaXJvLCBvIGZvcm11bMOhcmlvIGUgYcOnw7VlcyBmaWNhbSBkZXNhYmlsaXRhZG9zIHBvcnF1ZSBvcyBkYWRvc1xyXG4gIC8vIGRldmVtIHNlciBhbHRlcmFkb3MgYXBlbmFzIHBlbG8gYXBwIFNvdUdvdiAobWF0cmljdWxhIFNJQVBFIHByZXNlbnRlKVxyXG4gIGlzUmVhZG9ubHlGcm9tU2lhcGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgQFZpZXdDaGlsZCgncGVzc29hRm9ybScpIHBlc3NvYUZvcm0hOiBOZ0Zvcm07XHJcblxyXG4vLyBNYW50ZW1vcyBvIHJlcXVpcmVkIHNlIGVzdGUgY29tcG9uZW50ZSB0YW1iw6ltIG7Do28gZnVuY2lvbmFyIHNlbSBhIFVSTFxyXG4gIEBJbnB1dCh7IHJlcXVpcmVkOiB0cnVlIH0pIGJhY2tlbmRVUkw6IHN0cmluZyA9IFwiXCI7XHJcbiAgXHJcbiAgLy8gVHJhbnNmb3JtYW1vcyBlbSBib29sZWFuQXR0cmlidXRlIHBhcmEgYWNlaXRhciBwZXNxdWlzYXJQb3JDUEY9XCJ0cnVlXCJcclxuICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgcGVzcXVpc2FyUG9yQ1BGID0gdHJ1ZTtcclxuICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgcGVzcXVpc2FyUG9yQ05QSiA9IHRydWU7XHJcbiAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIHBlc3F1aXNhclBvckVzdHJhbmdlaXJvID0gZmFsc2U7XHJcbiAgXHJcbiAgQElucHV0KCkgZGVmYXVsdFRpcG9QZXNzb2EhOiBVbmJUaXBvUGVzc29hRW51bSB8ICdGSVNJQ0EnIHwgJ0pVUklESUNBJyB8ICdFU1RSQU5HRUlSQSc7XHJcbiAgQElucHV0KCkgY2FtcG9QZXNxdWlzYU1heFdpZHRoOiBzdHJpbmcgPSAnNDAwcHgnO1xyXG5cclxuICBAT3V0cHV0KCkgcGVzc29hRW1pdHRlZCA9IG5ldyBFdmVudEVtaXR0ZXI8VW5iUGVzc29hTW9kZWw+KCk7XHJcbiAgQE91dHB1dCgpIGlzTG9hZGluZ0NoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBzZXJ2aWNlOiBVbkJQZXNzb2FTZXJ2aWNlLCBwcml2YXRlIHNuYWNrQmFyOiBNYXRTbmFja0JhciwgcHJpdmF0ZSBhbGVydFNlcnZpY2U6IFVuYk1lbnNhZ2VtU2VydmljZSkgeyB9XHJcblxyXG4gIC8vIHRhYmVsYXMgdHJhZGljaW9uYWlzIHF1ZSB2ZW0gZG8gYmFja2VuZFxyXG4gIGVzY29sYXJpZGFkZSE6IE9ic2VydmFibGU8VW5iUGVzc29hRXNjb2xhcmlkYWRlW10+O1xyXG4gIHBhaXNlcyE6IE9ic2VydmFibGU8VW5iUGVzc29hUGFpc1tdPjtcclxuICBlc3RhZG9zQ2l2aWwhOiBPYnNlcnZhYmxlPFVuYlBlc3NvYUVzdGFkb0NpdmlsW10+O1xyXG5cclxuICBpZE1lbnNhZ2VtU2VydmljZSA9IFwidW5iUGVzc29hRm9ybVwiO1xyXG5cclxuICAvLyBDb250cm9sYSBzZSBlc3TDoSBpbmNsdWluZG8gbm92YSBwZXNzb2Egb3UgZWRpdGFuZG8gZXhpc3RlbnRlXHJcbiAgZG9jdW1lbnRvUGVzcXVpc2Fkbzogc3RyaW5nID0gJyc7XHJcbiAgaW5jbHVpbmRvTm92YVBlc3NvYTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGVkaXRhbmRvUGVzc29hOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5hbGVydFNlcnZpY2UuaGlkZU1lc3NhZ2UodGhpcy5pZE1lbnNhZ2VtU2VydmljZSk7XHJcbiAgICBpZiAodGhpcy5iYWNrZW5kVVJMID09IFwiXCIpIHtcclxuICAgICAgdGhpcy5oYW5kbGVFcnJvclByaW50Q29uc29sZShcIltVbmJQZXNzb2FQZXNxdWlzYXJDb21wb25lbnRdIEVSUk9SOiBhcGlQZXNzb2FDb25maWcudXJsIGVzdMOhIG51bGwuIEluc2lyYSBvIHBhcsOibWV0cm8gKGFwaVBlc3NvYUNvbmZpZykgY29tIG8gdmFsb3IgdsOhbGlkbyFcIilcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5zZXJ2aWNlLnNldEJhY2tlbmRVcmwodGhpcy5iYWNrZW5kVVJMKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBhdGVuY2FvLCBvIHBlc3NvYVJlY2ViaWRhIHF1ZSBpbmljaWFsaXphIGVzc2UgY29tcG9uZW50ZVxyXG4gICAgdGhpcy5lc2NvbGFyaWRhZGUgPSB0aGlzLnNlcnZpY2UuZ2V0RXNjb2xhcmlkYWRlKCk7XHJcbiAgICB0aGlzLnBhaXNlcyA9IHRoaXMuc2VydmljZS5nZXRQYWlzZXMoKTtcclxuICAgIHRoaXMuZXN0YWRvc0NpdmlsID0gdGhpcy5zZXJ2aWNlLmdldEVzdGFkb0NpdmlsKCk7XHJcbiAgfVxyXG5cclxuICBwZXNzb2FSZWNlYmlkYShwZXNzb2FSZWNlYmlkYTogVW5iUGVzc29hTW9kZWwpIHtcclxuICAgIHRoaXMuYnVzY2FSZWFsaXphZGEgPSB0cnVlO1xyXG4gICAgdGhpcy5wZXNzb2EgPSBwZXNzb2FSZWNlYmlkYTtcclxuICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmhpZGVNZXNzYWdlKHRoaXMuaWRNZW5zYWdlbVNlcnZpY2UpO1xyXG5cclxuICAgIC8vIFJlc2V0YSBvIGZvcm11bMOhcmlvIHF1YW5kbyB1bWEgbm92YSBwZXNzb2Egw6kgcmVjZWJpZGFcclxuICAgIGlmICh0aGlzLnBlc3NvYUZvcm0pIHtcclxuICAgICAgdGhpcy5wZXNzb2FGb3JtLnJlc2V0Rm9ybSgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIGluaWNpYWxpemEgcHJhIG5hbyBxdWVicmFyXHJcbiAgICBpZiAoIXRoaXMucGVzc29hLmVuZGVyZWNvcykgdGhpcy5wZXNzb2EuZW5kZXJlY29zID0gW107XHJcbiAgICBpZiAoIXRoaXMucGVzc29hLmVtYWlscykgdGhpcy5wZXNzb2EuZW1haWxzID0gW107XHJcbiAgICBpZiAoIXRoaXMucGVzc29hLnRlbGVmb25lcykgdGhpcy5wZXNzb2EudGVsZWZvbmVzID0gW107XHJcblxyXG4gICAgLy8gMS4gVmVyaWZpY2Egc2Ugw6kgdW0gcmVnaXN0cm8gcXVlIGrDoSBleGlzdGUgbm8gYmFuY29cclxuICAgIGNvbnN0IGV4aXN0ZVJlZ2lzdHJvID0gISF0aGlzLnBlc3NvYT8uY29kaWdvUGVzc29hO1xyXG5cclxuICAgIC8vIDIuIFZlcmlmaWNhIHNlIMOpIGJsb3F1ZWFkbyBwZWxvIFNJQVBFIChTw7MgZmF6IHNlbnRpZG8gc2UgbyByZWdpc3RybyBleGlzdGlyKVxyXG4gICAgdGhpcy5pc1JlYWRvbmx5RnJvbVNpYXBlID0gZXhpc3RlUmVnaXN0cm8gJiYgISF0aGlzLnBlc3NvYT8ubWF0cmljdWxhU2lhcGU7XHJcblxyXG4gICAgLy8gMy4gRGVmaW5lIG8gZG9jdW1lbnRvICh1c2FuZG8gYXF1ZWxlIG1hcGEgbGltcG8pXHJcbiAgICBjb25zdCBkb2NNYXAgPSB7XHJcbiAgICAgIFtVbmJUaXBvUGVzc29hRW51bS5GSVNJQ0FdOiB0aGlzLnBlc3NvYS5jcGYsXHJcbiAgICAgIFtVbmJUaXBvUGVzc29hRW51bS5KVVJJRElDQV06IHRoaXMucGVzc29hLmNucGosXHJcbiAgICAgIFtVbmJUaXBvUGVzc29hRW51bS5FU1RSQU5HRUlSQV06IHRoaXMucGVzc29hLnBhc3NhcG9ydGVcclxuICAgIH07XHJcbiAgICB0aGlzLmRvY3VtZW50b1Blc3F1aXNhZG8gPSBkb2NNYXBbdGhpcy5wZXNzb2EudGlwb1Blc3NvYV0gfHwgJyc7XHJcblxyXG4gICAgLy8gNC4gKE9wY2lvbmFsKSBTbmFja2JhciBzZSBmb3IgU0lBUEVcclxuICAgIGlmICh0aGlzLmlzUmVhZG9ubHlGcm9tU2lhcGUpIHtcclxuICAgICAgdGhpcy5vcGVuU25hY2tCYXIoJ0RhZG9zIGltcG9ydGFkb3MgZG8gU0lBUEUgbsOjbyBwb2RlbSBzZXIgYWx0ZXJhZG9zLicpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2FsdmFyKGZvcm06IE5nRm9ybSkge1xyXG4gICAgdGhpcy5hbGVydFNlcnZpY2UuaGlkZU1lc3NhZ2UodGhpcy5pZE1lbnNhZ2VtU2VydmljZSk7XHJcblxyXG4gICAgLy8gU3VhcyB2YWxpZGHDp8O1ZXNcclxuICAgIGlmICghdGhpcy52YWxpZGFyKGZvcm0pKSByZXR1cm47XHJcblxyXG4gICAgdGhpcy5pc0xvYWRpbmcgPSB0cnVlO1xyXG4gICAgdGhpcy5pc0xvYWRpbmdDaGFuZ2UuZW1pdCh0cnVlKTtcclxuXHJcbiAgICBjb25zdCBwYXlsb2FkID0gdGhpcy5jb252ZXJ0UGVzc29hVG9QYXlsb2FkKHRoaXMucGVzc29hKTtcclxuXHJcbiAgICAvLyBPIHNlcnZpY2UgasOhIHRlbSBvIC5waXBlKGNhdGNoRXJyb3IpIGludGVybm8sIGVudMOjbyBvIGVycm8gY2hlZ2EgdHJhdGFkb1xyXG4gICAgdGhpcy5zZXJ2aWNlLnNhbHZhcihwYXlsb2FkLCB0aGlzLnBlc3NvYS50aXBvUGVzc29hKVxyXG4gICAgICAuc3Vic2NyaWJlKHtcclxuICAgICAgICBuZXh0OiAocmVzcG9zdGEpID0+IHtcclxuICAgICAgICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLmlzTG9hZGluZ0NoYW5nZS5lbWl0KGZhbHNlKTtcclxuICAgICAgICAgIC8vIE1lbnNhZ2VtIGRlIFN1Y2Vzc29cclxuICAgICAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLnNob3dNZXNzYWdlKFwiPHN0cm9uZz5SZWdpc3RybyBzYWx2byBjb20gc3VjZXNzbyE8L3N0cm9uZz5cIiwgVW5iVGlwb01lbnNhZ2VtRW51bS5TVUNDRVNTLCB0aGlzLmlkTWVuc2FnZW1TZXJ2aWNlKTtcclxuXHJcbiAgICAgICAgICAvLyBBdHVhbGl6YSBkYWRvcyByZXRvcm5hZG9zIChJRHMgZ2VyYWRvcylcclxuICAgICAgICAgIGlmIChyZXNwb3N0YSkge1xyXG4gICAgICAgICAgICB0aGlzLnBlc3NvYS5jb2RpZ29QZXNzb2EgPSByZXNwb3N0YS5jb2RpZ29QZXNzb2EgfHwgdGhpcy5wZXNzb2EuY29kaWdvUGVzc29hO1xyXG4gICAgICAgICAgICB0aGlzLnBlc3NvYS5pZFBlc3NvYSA9IHJlc3Bvc3RhLmlkUGVzc29hIHx8IHRoaXMucGVzc29hLmlkUGVzc29hO1xyXG4gICAgICAgICAgICB0aGlzLnBlc3NvYUVtaXR0ZWQuZW1pdCh0aGlzLnBlc3NvYSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBlcnJvcjogKGVycjogVW5iUGVzc29hRXJyb1BhZHJhbykgPT4ge1xyXG4gICAgICAgICAgLy8gQVFVSTogTyAnZXJyJyBqw6EgY2hlZ2EgbGltcG8gY29tIHsgbWVuc2FnZW1TaW1wbGVzLCBtZW5zYWdlbUh0bWwgfVxyXG4gICAgICAgICAgdGhpcy5oYW5kbGVFcnJvcihlcnIpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICB2YWxpZGFyKGZvcm06IE5nRm9ybSk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKCF0aGlzLnBlc3NvYSkge1xyXG4gICAgICB0aGlzLm9wZW5TbmFja0JhcihcIkVycm8gYW8gY2FycmVnYXIgb2JqZXRvIHBlc3NvYVwiKTtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChmb3JtLmludmFsaWQpIHtcclxuICAgICAgLy8gcGFyYSBxdWUgb3MgZXJyb3MgYXBhcmXDp2FtIG5hIHRlbGEgcGFyYSBvIHVzdcOhcmlvLlxyXG4gICAgICBmb3JtLmNvbnRyb2wubWFya0FsbEFzVG91Y2hlZCgpO1xyXG4gICAgICB0aGlzLm9wZW5TbmFja0JhcihcIlBvciBmYXZvciwgcHJlZW5jaGEgb3MgY2FtcG9zIG9icmlnYXTDs3Jpb3MuXCIpO1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMucGVzc29hLnRlbGVmb25lcyA9PSBudWxsIHx8ICh0aGlzLnBlc3NvYS50ZWxlZm9uZXMgIT0gbnVsbCAmJiB0aGlzLnBlc3NvYS50ZWxlZm9uZXMubGVuZ3RoID09IDApKSB7XHJcbiAgICAgIHRoaXMub3BlblNuYWNrQmFyKFwiQ2FkYXN0cmUgcGVsbyBtZW5vcyB1bSB0ZWxlZm9uZSBubyBib3TDo28gQ2FkYXN0cmFyIE5vdm8gVGVsZWZvbmVcIik7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5wZXNzb2EuZW5kZXJlY29zID09IG51bGwgfHwgKHRoaXMucGVzc29hLmVuZGVyZWNvcyAhPSBudWxsICYmIHRoaXMucGVzc29hLmVuZGVyZWNvcy5sZW5ndGggPT0gMCkpIHtcclxuICAgICAgdGhpcy5vcGVuU25hY2tCYXIoXCJDYWRhc3RyZSBwZWxvIG1lbm9zIHVtIGVuZGVyZcOnbyBubyBib3TDo28gQ2FkYXN0cmFyIE5vdm8gRW5kZXJlw6dvXCIpO1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMucGVzc29hLmVtYWlscyA9PSBudWxsIHx8ICh0aGlzLnBlc3NvYS5lbWFpbHMgIT0gbnVsbCAmJiB0aGlzLnBlc3NvYS5lbWFpbHMubGVuZ3RoID09IDApKSB7XHJcbiAgICAgIHRoaXMub3BlblNuYWNrQmFyKFwiQ2FkYXN0cmUgcGVsbyBtZW5vcyB1bSBlLW1haWwgbm8gYm90w6NvIENhZGFzdHJhciBOb3ZvIEVtYWlsXCIpO1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMucGVzc29hLnRpcG9QZXNzb2EgPT0gVW5iVGlwb1Blc3NvYUVudW0uRklTSUNBKSB7XHJcbiAgICAgIGlmICghdGhpcy5wZXNzb2Eubm9tZSB8fCAodGhpcy5wZXNzb2EgJiYgdGhpcy5wZXNzb2Eubm9tZSA9PSBcIlwiKSkge1xyXG4gICAgICAgIHRoaXMub3BlblNuYWNrQmFyKFwiTm9tZSDDqSB1bSBjYW1wbyBvYnJpZ2F0w7NyaW9cIik7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoIXRoaXMucGVzc29hLmRhdGFOYXNjaW1lbnRvKSB7XHJcbiAgICAgICAgdGhpcy5vcGVuU25hY2tCYXIoXCJEYXRhIGRlIE5hc2NpbWVudG8gw6kgdW0gY2FtcG8gb2JyaWdhdMOzcmlvXCIpO1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLnBlc3NvYS50aXBvUGVzc29hID09IFVuYlRpcG9QZXNzb2FFbnVtLkVTVFJBTkdFSVJBKSB7XHJcbiAgICAgIGlmICghdGhpcy5wZXNzb2Eubm9tZSB8fCAodGhpcy5wZXNzb2EgJiYgdGhpcy5wZXNzb2Eubm9tZSA9PSBcIlwiKSkge1xyXG4gICAgICAgIHRoaXMub3BlblNuYWNrQmFyKFwiTm9tZSDDqSB1bSBjYW1wbyBvYnJpZ2F0w7NyaW9cIik7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAodGhpcy5wZXNzb2EucGFzc2Fwb3J0ZSA9PSBudWxsIHx8ICh0aGlzLnBlc3NvYS5wYXNzYXBvcnRlICE9IG51bGwgJiYgdGhpcy5wZXNzb2EucGFzc2Fwb3J0ZSA9PSBcIlwiKSkge1xyXG4gICAgICAgIHRoaXMub3BlblNuYWNrQmFyKFwiUGFzc2Fwb3J0ZSDDqSB1bSBjYW1wbyBvYnJpZ2F0w7NyaW9cIik7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMucGVzc29hLnRpcG9QZXNzb2EgPT0gVW5iVGlwb1Blc3NvYUVudW0uSlVSSURJQ0EpIHtcclxuICAgICAgaWYgKHRoaXMucGVzc29hLmNucGogPT0gbnVsbCB8fCAodGhpcy5wZXNzb2EuY25waiAhPSBudWxsICYmIHRoaXMucGVzc29hLmNucGogPT0gXCJcIikpIHtcclxuICAgICAgICB0aGlzLm9wZW5TbmFja0JhcihcIkNOUEogw6kgdW0gY2FtcG8gb2JyaWdhdMOzcmlvXCIpO1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH1cclxuXHJcbiAgdGVsZWZvbmVzRW1pdHRlZCh0ZWxlZm9uZXM6IFVuYlBlc3NvYVRlbGVmb25lW10pIHtcclxuICAgIHRoaXMucGVzc29hLnRlbGVmb25lcyA9IHRlbGVmb25lcztcclxuICB9XHJcblxyXG4gIGVuZGVyZWNvc0VtaXR0ZWQoZW5kZXJlY29zOiBVbmJQZXNzb2FFbmRlcmVjb1tdKSB7XHJcbiAgICB0aGlzLnBlc3NvYS5lbmRlcmVjb3MgPSBlbmRlcmVjb3M7XHJcbiAgfVxyXG5cclxuICBlbWFpbHNFbWl0dGVkKGVtYWlsczogVW5iUGVzc29hRW1haWxbXSkge1xyXG4gICAgdGhpcy5wZXNzb2EuZW1haWxzID0gZW1haWxzO1xyXG4gIH1cclxuXHJcbiAgb3BlblNuYWNrQmFyKG1lc3NhZ2U6IHN0cmluZykge1xyXG4gICAgdGhpcy5zbmFja0Jhci5vcGVuKG1lc3NhZ2UsICd4Jywge1xyXG4gICAgICBkdXJhdGlvbjogNTAwMCxcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgdGlwb1Blc3NvYUVudW0oKSB7XHJcbiAgICByZXR1cm4gVW5iVGlwb1Blc3NvYUVudW07XHJcbiAgfVxyXG5cclxuICBnZXRMaXN0YUVzdGFkb3MoKSB7XHJcbiAgICByZXR1cm4gbGlzdGFFc3RhZG9zO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAqIENvbnZlcnRlIHVtYSBpbnN0w6JuY2lhIChvdSBvYmpldG8pIGRlIFVuYlBlc3NvYU1vZGVsIHBhcmEgbyBwYXlsb2FkIGVzcGVyYWRvIHBlbG8gYmFja2VuZC5cclxuICovXHJcbiAgcHJpdmF0ZSBjb252ZXJ0UGVzc29hVG9QYXlsb2FkKHBlc3NvYTogVW5iUGVzc29hTW9kZWwpOiBhbnkge1xyXG4gICAgaWYgKCFwZXNzb2EpIHJldHVybiBudWxsO1xyXG5cclxuICAgIC8vIC0tLSBNYXBlaWEgb3MgYXJyYXlzIC0tLVxyXG4gICAgY29uc3QgZW5kZXJlY29zUGF5bG9hZCA9IChwZXNzb2EuZW5kZXJlY29zIHx8IFtdKS5tYXAoKGVuZDogYW55KSA9PiAoe1xyXG4gICAgICBvcmRlbUVuZGVyZWNvOiBlbmQub3JkZW1FbmRlcmVjbyxcclxuICAgICAgdGlwb0VuZGVyZWNvQ29kaWdvOiBlbmQudGlwb0VuZGVyZWNvQ29kaWdvLFxyXG4gICAgICBtdW5pY2lwaW9Db2RpZ286IGVuZC5tdW5pY2lwaW9Db2RpZ28sXHJcbiAgICAgIHBhaXNFbmRlcmVjb0NvZGlnbzogZW5kLnBhaXNFbmRlcmVjb0NvZGlnbyxcclxuICAgICAgbG9ncmFkb3VybzogZW5kLmxvZ3JhZG91cm8sXHJcbiAgICAgIGNvbXBsZW1lbnRvOiBlbmQuY29tcGxlbWVudG8sXHJcbiAgICAgIGNlcDogZW5kLmNlcCxcclxuICAgICAgYmFpcnJvOiBlbmQuYmFpcnJvLFxyXG4gICAgICB1ZkVuZGVyZWNvOiBlbmQudWZFbmRlcmVjbyxcclxuICAgICAgY2FpeGFQb3N0YWw6IGVuZC5jYWl4YVBvc3RhbCxcclxuICAgICAgY29ycmVzcG9uZGVuY2lhOiBlbmQuY29ycmVzcG9uZGVuY2lhXHJcbiAgICB9KSk7XHJcblxyXG4gICAgY29uc3QgdGVsZWZvbmVzUGF5bG9hZCA9IChwZXNzb2EudGVsZWZvbmVzIHx8IFtdKS5tYXAoKHRlbDogYW55KSA9PiAoe1xyXG4gICAgICBvcmRlbVRlbGVmb25lOiB0ZWwub3JkZW0sXHJcbiAgICAgIHRpcG9UZWxlZm9uZUNvZGlnbzogdGVsLnRpcG9UZWxlZm9uZUNvZGlnbyxcclxuICAgICAgZGRpOiB0ZWwuZGRpLFxyXG4gICAgICBkZGQ6IHRlbC5kZGQsXHJcbiAgICAgIG51bWVyb1RlbGVmb25lOiB0ZWwubnVtZXJvLFxyXG4gICAgICByYW1hbDogdGVsLnJhbWFsLFxyXG4gICAgICBhdXRvcml6YVNNUzogdGVsLmF1dG9yaXphU01TXHJcbiAgICB9KSk7XHJcblxyXG4gICAgY29uc3QgZW1haWxzUGF5bG9hZCA9IChwZXNzb2EuZW1haWxzIHx8IFtdKS5tYXAoKGVtYWlsOiBhbnkpID0+ICh7XHJcbiAgICAgIHRpcG9FbWFpbENvZGlnbzogZW1haWwudGlwb0VtYWlsQ29kaWdvLFxyXG4gICAgICBvcmRlbUVtYWlsOiBlbWFpbC5vcmRlbSxcclxuICAgICAgZW1haWw6IGVtYWlsLmVtYWlsLFxyXG4gICAgICBhdXRvcml6YWNhbzogZW1haWwuYXV0b3JpemFjYW9cclxuICAgIH0pKTtcclxuXHJcbiAgICAvLyAtLS0gTW9udGEgbyBvYmpldG8gcHJpbmNpcGFsIC0tLVxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgaWRQZXNzb2E6IHBlc3NvYS5pZFBlc3NvYSxcclxuICAgICAgY29kaWdvUGVzc29hOiBwZXNzb2EuY29kaWdvUGVzc29hLFxyXG5cclxuICAgICAgbm9tZTogcGVzc29hLm5vbWUsXHJcbiAgICAgIG5vbWVTb2NpYWw6IHBlc3NvYS5ub21lU29jaWFsLFxyXG4gICAgICAvLyBBZGljaW9uYSBhIGNoYXZlICdjcGYnIGFvIG9iamV0byBTT01FTlRFIFNFIHBlc3NvYS5jcGYgZm9yIHRydXRoeVxyXG4gICAgICAuLi4ocGVzc29hLmNwZiAmJiB7IGNwZjogcGVzc29hLmNwZi5yZXBsYWNlKC9cXEQvZywgJycpIH0pLFxyXG4gICAgICBjb2RpZ29TZXhvOiBwZXNzb2EuY29kaWdvU2V4byxcclxuICAgICAgY29kaWdvRXN0YWRvQ2l2aWw6IHBlc3NvYS5jb2RpZ29Fc3RhZG9DaXZpbCxcclxuICAgICAgY29kaWdvRXNjb2xhcmlkYWRlOiBwZXNzb2EuZXNjb2xhcmlkYWRlLFxyXG4gICAgICAvLyBjb2RpZ29UaXBvU2FuZ3VpbmVvOiBwZXNzb2EudGlwb1Nhbmd1aW5lbyxcclxuICAgICAgbm9tZVBhaTogcGVzc29hLm5vbWVQYWksXHJcbiAgICAgIG5vbWVNYWU6IHBlc3NvYS5ub21lTWFlLFxyXG5cclxuICAgICAgZGF0YU5hc2NpbWVudG86IHRoaXMuZm9ybWF0YXJEYXRhUGFyYUJhY2tlbmQocGVzc29hLmRhdGFOYXNjaW1lbnRvKSxcclxuICAgICAgY29kaWdvUGFpc05hc2NpbWVudG86IHBlc3NvYS5jb2RpZ29QYWlzTmFzY2ltZW50byxcclxuICAgICAgdWZOYXNjaW1lbnRvOiBwZXNzb2EudWZOYXNjaW1lbnRvLFxyXG4gICAgICBuYXR1cmFsaWRhZGU6IHBlc3NvYS5uYXR1cmFsaWRhZGUsXHJcblxyXG4gICAgICByZzogcGVzc29hLnJnLFxyXG4gICAgICByZ09yZ2FvOiBwZXNzb2EucmdPcmdhbyxcclxuICAgICAgcmdVZjogcGVzc29hLnJnVWYsXHJcbiAgICAgIHJnRGF0YUVtaXNzYW86IHRoaXMuZm9ybWF0YXJEYXRhUGFyYUJhY2tlbmQocGVzc29hLnJnRGF0YUVtaXNzYW8pLFxyXG5cclxuICAgICAgbnVtZXJvVGl0dWxvRWxlaXRvcjogcGVzc29hLm51bWVyb1RpdHVsb0VsZWl0b3IsXHJcbiAgICAgIGRhdGFFbWlzc2FvVGl0dWxvRWxlaXRvcjogdGhpcy5mb3JtYXRhckRhdGFQYXJhQmFja2VuZChwZXNzb2EuZGF0YUVtaXNzYW9UaXR1bG9FbGVpdG9yKSxcclxuICAgICAgem9uYVRpdHVsb0VsZWl0b3I6IHBlc3NvYS56b25hVGl0dWxvRWxlaXRvcixcclxuICAgICAgc2VjYW9UaXR1bG9FbGVpdG9yOiBwZXNzb2Euc2VjYW9UaXR1bG9FbGVpdG9yLFxyXG4gICAgICB1ZlRpdHVsb0VsZWl0b3I6IHBlc3NvYS51ZlRpdHVsb0VsZWl0b3IsXHJcblxyXG4gICAgICBudW1lcm9SZXNlcnZpc3RhOiBwZXNzb2EubnVtZXJvUmVzZXJ2aXN0YSxcclxuICAgICAgc2VyaWVSZXNlcnZpc3RhOiBwZXNzb2Euc2VyaWVSZXNlcnZpc3RhLFxyXG4gICAgICBvcmdhb1Jlc2VydmlzdGE6IHBlc3NvYS5vcmdhb1Jlc2VydmlzdGEsXHJcblxyXG4gICAgICBudW1lcm9DYXJ0ZWlyYVRyYWJhbGhvOiBwZXNzb2EubnVtZXJvQ2FydGVpcmFUcmFiYWxobyxcclxuICAgICAgc2VyaWVDYXJ0ZWlyYVRyYWJhbGhvOiBwZXNzb2Euc2VyaWVDYXJ0ZWlyYVRyYWJhbGhvLFxyXG4gICAgICB1ZkNhcnRlaXJhVHJhYmFsaG86IHBlc3NvYS51ZkNhcnRlaXJhVHJhYmFsaG8sXHJcbiAgICAgIHBpc1Bhc2VwOiBwZXNzb2EucGlzUGFzZXAsXHJcblxyXG4gICAgICBudW1lcm9IYWJpbGl0YWNhbzogcGVzc29hLm51bWVyb0hhYmlsaXRhY2FvLFxyXG4gICAgICByZWdpc3Ryb0hhYmlsaXRhY2FvOiBwZXNzb2EucmVnaXN0cm9IYWJpbGl0YWNhbyxcclxuICAgICAgZGF0YUVtaXNzYW9IYWJpbGl0YWNhbzogdGhpcy5mb3JtYXRhckRhdGFQYXJhQmFja2VuZChwZXNzb2EuZGF0YUVtaXNzYW9IYWJpbGl0YWNhbyksXHJcbiAgICAgIGRhdGFWYWxpZGFkZUhhYmlsaXRhY2FvOiB0aGlzLmZvcm1hdGFyRGF0YVBhcmFCYWNrZW5kKHBlc3NvYS5kYXRhVmFsaWRhZGVIYWJpbGl0YWNhbyksXHJcbiAgICAgIGNhdGVnb3JpYUhhYmlsaXRhY2FvOiBwZXNzb2EuY2F0ZWdvcmlhSGFiaWxpdGFjYW8sXHJcbiAgICAgIGRlZmljaWVuY2lhRmlzaWNhSGFiaWxpdGFjYW86IHBlc3NvYS5kZWZpY2llbmNpYUZpc2ljYUhhYmlsaXRhY2FvLFxyXG4gICAgICBwcmltZWlyYUhhYmlsaXRhY2FvOiB0aGlzLmZvcm1hdGFyRGF0YVBhcmFCYWNrZW5kKHBlc3NvYS5wcmltZWlyYUhhYmlsaXRhY2FvKSxcclxuXHJcbiAgICAgIHBhc3NhcG9ydGU6IHBlc3NvYS5wYXNzYXBvcnRlLFxyXG4gICAgICBjb2RpZ29QYWlzUGFzc2Fwb3J0ZTogcGVzc29hLmNvZGlnb1BhaXNQYXNzYXBvcnRlLFxyXG4gICAgICAvLyBBZGljaW9uYSBhIGNoYXZlICdjbnBqJyBhbyBvYmpldG8gU09NRU5URSBTRSBwZXNzb2EuY25waiBmb3IgdHJ1dGh5XHJcbiAgICAgIC4uLihwZXNzb2EuY25waiAmJiB7IGNucGo6IHBlc3NvYS5jbnBqLnJlcGxhY2UoL1xcRC9nLCAnJykgfSksXHJcbiAgICAgIHJhemFvU29jaWFsOiBwZXNzb2EucmF6YW9Tb2NpYWwsXHJcbiAgICAgIG5vbWVGYW50YXNpYTogcGVzc29hLm5vbWVGYW50YXNpYSxcclxuICAgICAgc2lnbGE6IHBlc3NvYS5zaWdsYSxcclxuICAgICAgcGFnaW5hV2ViOiBwZXNzb2EucGFnaW5hV2ViLFxyXG5cclxuICAgICAgYXV0b0NhZGFzdHJvOiBwZXNzb2EuYXV0b0NhZGFzdHJvLFxyXG5cclxuICAgICAgZW5kZXJlY29zOiBlbmRlcmVjb3NQYXlsb2FkLFxyXG4gICAgICB0ZWxlZm9uZXM6IHRlbGVmb25lc1BheWxvYWQsXHJcbiAgICAgIGVtYWlsczogZW1haWxzUGF5bG9hZFxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEZvcm1hdGEgYSBkYXRhIG5vIHBhZHLDo28gREQvTU0vWVlZWSBwYXJhIG8gYmFja2VuZC5cclxuICAgKi9cclxuICBwcml2YXRlIGZvcm1hdGFyRGF0YVBhcmFCYWNrZW5kKGRhdGE6IGFueSk6IHN0cmluZyB8IG51bGwge1xyXG4gICAgaWYgKCFkYXRhKSByZXR1cm4gbnVsbDtcclxuICAgIGlmICh0eXBlb2YgZGF0YSA9PT0gJ3N0cmluZycgJiYgZGF0YS5pbmNsdWRlcygnLycpKSByZXR1cm4gZGF0YTtcclxuXHJcbiAgICB0cnkge1xyXG4gICAgICBjb25zdCBkID0gbmV3IERhdGUoZGF0YSk7XHJcbiAgICAgIGlmIChpc05hTihkLmdldFRpbWUoKSkpIHJldHVybiBudWxsO1xyXG5cclxuICAgICAgY29uc3QgZGlhID0gU3RyaW5nKGQuZ2V0RGF0ZSgpKS5wYWRTdGFydCgyLCAnMCcpO1xyXG4gICAgICBjb25zdCBtZXMgPSBTdHJpbmcoZC5nZXRNb250aCgpICsgMSkucGFkU3RhcnQoMiwgJzAnKTtcclxuICAgICAgY29uc3QgYW5vID0gZC5nZXRGdWxsWWVhcigpO1xyXG4gICAgICByZXR1cm4gYCR7ZGlhfS8ke21lc30vJHthbm99YDtcclxuICAgIH0gY2F0Y2gge1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGhhbmRsZUVycm9yUHJpbnRDb25zb2xlKGVycm86IGFueSkge1xyXG4gICAgY29uc29sZS5sb2coZXJybyk7XHJcbiAgICB0aGlzLmhhbmRsZUVycm9yKGVycm8pO1xyXG4gIH1cclxuXHJcbiAgaGFuZGxlRXJyb3IoZXJybzogVW5iUGVzc29hRXJyb1BhZHJhbykge1xyXG4gICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcclxuICAgIHRoaXMuaXNMb2FkaW5nQ2hhbmdlLmVtaXQoZmFsc2UpO1xyXG5cclxuICAgIC8vIDEuIE1vc3RyYSBhIG1lbnNhZ2VtIGN1cnRhL3NpbXBsZXMgbm8gU25hY2tCYXIgKEZ1bmRvIGRhIHRlbGEpXHJcbiAgICAvLyBFeDogXCJPIGZvcm11bMOhcmlvIHBvc3N1aSBlcnJvcyBkZSB2YWxpZGHDp8Ojby5cIiBvdSBcIlNlc3PDo28gZXhwaXJhZGEuXCJcclxuICAgIGlmIChlcnJvLm1lbnNhZ2VtU2ltcGxlcykge1xyXG4gICAgICB0aGlzLm9wZW5TbmFja0JhcihlcnJvLm1lbnNhZ2VtU2ltcGxlcyk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gMi4gTW9zdHJhIGEgbWVuc2FnZW0gZGV0YWxoYWRhIEhUTUwgbm8gY29tcG9uZW50ZSA8dW5iLW1lbnNhZ2VtPlxyXG4gICAgLy8gRXg6IExpc3RhIGNvbSA8dWw+PGxpPkNhbXBvIERhdGEgaW52w6FsaWRvLi4uPC9saT48L3VsPlxyXG4gICAgaWYgKHRoaXMuYWxlcnRTZXJ2aWNlICYmIGVycm8ubWVuc2FnZW1IdG1sKSB7XHJcbiAgICAgIC8vIFNlIG8gc2V1IGFsZXJ0U2VydmljZSBzdXBvcnRhciBJRCBkbyBjb21wb25lbnRlIGFsdm8sIHBhc3NlIGFxdWkuXHJcbiAgICAgIC8vIENhc28gY29udHLDoXJpbywgZWxlIG1vc3RyYSBubyBjb21wb25lbnRlIHBhZHLDo28uXHJcbiAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLnNob3dNZXNzYWdlKGVycm8ubWVuc2FnZW1IdG1sLCBVbmJUaXBvTWVuc2FnZW1FbnVtLkRBTkdFUiwgdGhpcy5pZE1lbnNhZ2VtU2VydmljZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRMYWJlbERvY3VtZW50bygpOiBzdHJpbmcge1xyXG4gICAgc3dpdGNoICh0aGlzLnBlc3NvYS50aXBvUGVzc29hKSB7XHJcbiAgICAgIGNhc2UgdGhpcy50aXBvUGVzc29hRW51bSgpLkZJU0lDQTogcmV0dXJuICdDUEYnO1xyXG4gICAgICBjYXNlIHRoaXMudGlwb1Blc3NvYUVudW0oKS5KVVJJRElDQTogcmV0dXJuICdDTlBKJztcclxuICAgICAgY2FzZSB0aGlzLnRpcG9QZXNzb2FFbnVtKCkuRVNUUkFOR0VJUkE6IHJldHVybiAnUGFzc2Fwb3J0ZSc7XHJcbiAgICAgIGRlZmF1bHQ6IHJldHVybiAnRG9jdW1lbnRvJztcclxuICAgIH1cclxuICB9XHJcblxyXG5cclxuXHJcbn1cclxuIiwiPG1hdC1wcm9ncmVzcy1iYXIgKm5nSWY9XCJpc0xvYWRpbmdcIiBtb2RlPVwiaW5kZXRlcm1pbmF0ZVwiPjwvbWF0LXByb2dyZXNzLWJhcj5cclxuXHJcbjxkaXYgY2xhc3M9XCJmb3JtLWNvbnRhaW5lclwiIFtjbGFzcy5kaXNhYmxlZC13cmFwcGVyXT1cImlzTG9hZGluZ1wiPlxyXG4gIDxsaWItdW5iLXBlc3NvYS1wZXNxdWlzYXIgXHJcbiAgICBbYmFja2VuZFVSTF09XCJiYWNrZW5kVVJMXCIgXHJcbiAgICBbZGVmYXVsdFRpcG9QZXNzb2FdPVwiZGVmYXVsdFRpcG9QZXNzb2FcIlxyXG4gICAgW3Blc3F1aXNhclBvckNOUEpdPVwicGVzcXVpc2FyUG9yQ05QSlwiIFxyXG4gICAgW3Blc3F1aXNhclBvckNQRl09XCJwZXNxdWlzYXJQb3JDUEZcIlxyXG4gICAgW3Blc3F1aXNhclBvckVzdHJhbmdlaXJvXT1cInBlc3F1aXNhclBvckVzdHJhbmdlaXJvXCIgXHJcbiAgICBbY2FtcG9QZXNxdWlzYU1heFdpZHRoXT1cImNhbXBvUGVzcXVpc2FNYXhXaWR0aFwiXHJcbiAgICAocGVzc29hRW1pdHRlZCk9XCJwZXNzb2FSZWNlYmlkYSgkZXZlbnQpXCI+XHJcbiAgPC9saWItdW5iLXBlc3NvYS1wZXNxdWlzYXI+XHJcbjwvZGl2PlxyXG5cclxuPHVuYi1tZW5zYWdlbSBbaWRlbnRpZmljYWRvcl09XCJpZE1lbnNhZ2VtU2VydmljZVwiPjwvdW5iLW1lbnNhZ2VtPlxyXG5cclxuPCEtLSBMYWJlbCBpbmRpY2FuZG8gcXVlIGVzdMOhIGluY2x1aW5kbyBub3ZhIHBlc3NvYSAtLT5cclxuPGRpdiAqbmdJZj1cImRvY3VtZW50b1Blc3F1aXNhZG9cIlxyXG4gICAgICBjbGFzcz1cInN0YXR1cy1iYW5uZXJcIiBcclxuICAgICAgW25nQ2xhc3NdPVwie1xyXG4gICAgICAgJ3N0YXR1cy1pbmNsdXNhbyc6ICFwZXNzb2EuY29kaWdvUGVzc29hLFxyXG4gICAgICAgJ3N0YXR1cy1lZGljYW8nOiBwZXNzb2EuY29kaWdvUGVzc29hICYmICFpc1JlYWRvbmx5RnJvbVNpYXBlLFxyXG4gICAgICAgJ3N0YXR1cy1ibG9xdWVhZG8nOiBpc1JlYWRvbmx5RnJvbVNpYXBlXHJcbiAgICAgfVwiPlxyXG5cclxuICA8bWF0LWljb24+XHJcbiAgICB7eyAhcGVzc29hLmNvZGlnb1Blc3NvYSA/ICdwZXJzb25fYWRkJyA6IChpc1JlYWRvbmx5RnJvbVNpYXBlID8gJ2xvY2snIDogJ2VkaXQnKSB9fVxyXG4gIDwvbWF0LWljb24+XHJcblxyXG4gIDxzcGFuPlxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFwZXNzb2EuY29kaWdvUGVzc29hXCI+SW5jbHVpbmRvIG5vdmEgcGVzc29hPC9uZy1jb250YWluZXI+XHJcbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwicGVzc29hLmNvZGlnb1Blc3NvYSAmJiAhaXNSZWFkb25seUZyb21TaWFwZVwiPkVkaXRhbmRvIHBlc3NvYTwvbmctY29udGFpbmVyPlxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImlzUmVhZG9ubHlGcm9tU2lhcGVcIj5SZWdpc3RybyBTSUFQRSAoVmlzdWFsaXphw6fDo28pPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgY29tIDxzdHJvbmc+e3sgZ2V0TGFiZWxEb2N1bWVudG8oKSB9fSB7eyBkb2N1bWVudG9QZXNxdWlzYWRvIH19PC9zdHJvbmc+XHJcbiAgPC9zcGFuPlxyXG5cclxuPC9kaXY+XHJcblxyXG5cclxuPGZvcm0gI3Blc3NvYUZvcm09XCJuZ0Zvcm1cIiBbY2xhc3MucmVhZG9ubHldPVwiaXNSZWFkb25seUZyb21TaWFwZSB8fCBpc0xvYWRpbmdcIiBjbGFzcz1cImZvcm0tY29udGFpbmVyIG10LTJcIlxyXG4gICpuZ0lmPVwiYnVzY2FSZWFsaXphZGFcIiAobmdTdWJtaXQpPVwic2FsdmFyKHBlc3NvYUZvcm0pXCI+XHJcblxyXG4gIDwhLS0gQ2FtcG9zIFBlc3NvYSBGw61zaWNhIGUgRXN0cmFuZ2VpcmEgIC0tPlxyXG4gIDxuZy1jb250YWluZXJcclxuICAgICpuZ0lmPVwicGVzc29hLnRpcG9QZXNzb2EgPT0gdGlwb1Blc3NvYUVudW0oKS5GSVNJQ0EgfHwgcGVzc29hLnRpcG9QZXNzb2EgPT0gdGlwb1Blc3NvYUVudW0oKS5FU1RSQU5HRUlSQVwiPlxyXG4gICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwiZm9ybS0yNVwiIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCI+XHJcbiAgICAgIDxtYXQtbGFiZWw+Tm9tZTwvbWF0LWxhYmVsPlxyXG4gICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBtYXRJbnB1dCBbKG5nTW9kZWwpXT1cInBlc3NvYS5ub21lXCIgbmFtZT1cIm5vbWVcIiAjbm9tZT1cIm5nTW9kZWxcIiByZXF1aXJlZCAvPlxyXG4gICAgPC9tYXQtZm9ybS1maWVsZD5cclxuXHJcbiAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJmb3JtLTEwXCIgYXBwZWFyYW5jZT1cIm91dGxpbmVcIj5cclxuICAgICAgPG1hdC1sYWJlbD5TZXhvPC9tYXQtbGFiZWw+XHJcbiAgICAgIDxtYXQtc2VsZWN0IFsobmdNb2RlbCldPVwicGVzc29hLmNvZGlnb1NleG9cIiBuYW1lPVwiY29kaWdvU2V4b1wiICNjb2RpZ29TZXhvPVwibmdNb2RlbFwiIHJlcXVpcmVkPlxyXG4gICAgICAgIDxtYXQtb3B0aW9uIFt2YWx1ZV09XCIxXCI+TWFzY3VsaW5vPC9tYXQtb3B0aW9uPlxyXG4gICAgICAgIDxtYXQtb3B0aW9uIFt2YWx1ZV09XCIyXCI+RmVtaW5pbm88L21hdC1vcHRpb24+XHJcbiAgICAgIDwvbWF0LXNlbGVjdD5cclxuICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcblxyXG4gICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwiZm9ybS0xNVwiIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCI+XHJcbiAgICAgIDxtYXQtbGFiZWw+RGF0YSBOYXNjaW1lbnRvPC9tYXQtbGFiZWw+XHJcbiAgICAgIDxpbnB1dCBtYXRJbnB1dCBbbWF0RGF0ZXBpY2tlcl09XCJkYXRhTmFzY2ltZW50b1BpY2tlclwiIFsobmdNb2RlbCldPVwicGVzc29hLmRhdGFOYXNjaW1lbnRvXCIgbmFtZT1cImRhdGFOYXNjaW1lbnRvXCJcclxuICAgICAgICAjZGF0YU5hc2NpbWVudG89XCJuZ01vZGVsXCIgcmVxdWlyZWQ+XHJcbiAgICAgIDxtYXQtZGF0ZXBpY2tlci10b2dnbGUgbWF0U3VmZml4IFtmb3JdPVwiZGF0YU5hc2NpbWVudG9QaWNrZXJcIj48L21hdC1kYXRlcGlja2VyLXRvZ2dsZT5cclxuICAgICAgPG1hdC1kYXRlcGlja2VyICNkYXRhTmFzY2ltZW50b1BpY2tlcj48L21hdC1kYXRlcGlja2VyPlxyXG4gICAgPC9tYXQtZm9ybS1maWVsZD5cclxuXHJcbiAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJmb3JtLTEwXCIgYXBwZWFyYW5jZT1cIm91dGxpbmVcIj5cclxuICAgICAgPG1hdC1sYWJlbD5Fc3RhZG8gQ2l2aWw8L21hdC1sYWJlbD5cclxuICAgICAgPG1hdC1zZWxlY3QgWyhuZ01vZGVsKV09XCJwZXNzb2EuY29kaWdvRXN0YWRvQ2l2aWxcIiBuYW1lPVwiY29kaWdvRXN0YWRvQ2l2aWxcIiAjY29kaWdvRXN0YWRvQ2l2aWw9XCJuZ01vZGVsXCI+XHJcbiAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IGVzdGFkbyBvZiBlc3RhZG9zQ2l2aWwgfCBhc3luY1wiIFt2YWx1ZV09XCJlc3RhZG8uY29kaWdvXCI+XHJcbiAgICAgICAgICB7eyBlc3RhZG8uZGVub21pbmFjYW8gfX1cclxuICAgICAgICA8L21hdC1vcHRpb24+XHJcbiAgICAgIDwvbWF0LXNlbGVjdD5cclxuICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcblxyXG4gICAgPCEtLVxyXG4gICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cImZvcm0tMTVcIiBhcHBlYXJhbmNlPVwib3V0bGluZVwiPlxyXG4gICAgICAgICAgPG1hdC1sYWJlbD5OYXR1cmFsaWRhZGU8L21hdC1sYWJlbD5cclxuICAgICAgICAgIDxtYXQtc2VsZWN0IFsobmdNb2RlbCldPVwicGVzc29hLm5hdHVyYWxpZGFkZVwiIG5hbWU9XCJuYXR1cmFsaWRhZGVcIiAjbmF0dXJhbGlkYWRlPVwibmdNb2RlbFwiIHJlcXVpcmVkPlxyXG4gICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9XCJsZXQgY2lkYWRlIG9mIGdldExpc3RhRXN0YWRvcygpXCIgW3ZhbHVlXT1cImNpZGFkZS5jb2RpZ29cIj5cclxuICAgICAgICAgICAgICB7eyBjaWRhZGUuZGVzY3JpY2FvIH19XHJcbiAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgIDwvbWF0LXNlbGVjdD5cclxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgIC0tPlxyXG4gICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwiZm9ybS0xMFwiIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCI+XHJcbiAgICAgIDxtYXQtbGFiZWw+UGHDrXMgTmFzY2ltZW50bzwvbWF0LWxhYmVsPlxyXG4gICAgICA8bWF0LXNlbGVjdCBbKG5nTW9kZWwpXT1cInBlc3NvYS5jb2RpZ29QYWlzTmFzY2ltZW50b1wiIG5hbWU9XCJjb2RpZ29QYWlzTmFzY2ltZW50b1wiICNjb2RpZ29QYWlzTmFzY2ltZW50bz1cIm5nTW9kZWxcIlxyXG4gICAgICAgIHJlcXVpcmVkPlxyXG4gICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj1cImxldCBwYWlzTmFzY2ltZW50byBvZiBwYWlzZXMgfCBhc3luY1wiIFt2YWx1ZV09XCJwYWlzTmFzY2ltZW50by5jb2RpZ29cIj5cclxuICAgICAgICAgIDxzcGFuICpuZ0lmPVwicGFpc05hc2NpbWVudG8uZGVub21pbmFjYW8gPT09ICdCUkFTSUwnXCI+8J+Hp/Cfh7cgPGI+e3sgcGFpc05hc2NpbWVudG8uZGVub21pbmFjYW8gfX08L2I+PC9zcGFuPlxyXG4gICAgICAgICAgPHNwYW4gKm5nSWY9XCJwYWlzTmFzY2ltZW50by5kZW5vbWluYWNhbyAhPT0gJ0JSQVNJTCdcIj57eyBwYWlzTmFzY2ltZW50by5kZW5vbWluYWNhbyB9fTwvc3Bhbj5cclxuICAgICAgICA8L21hdC1vcHRpb24+XHJcbiAgICAgIDwvbWF0LXNlbGVjdD5cclxuICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcblxyXG4gICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwiZm9ybS0xMFwiIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCIgKm5nSWY9XCJwZXNzb2EuY29kaWdvUGFpc05hc2NpbWVudG8gPT0gMjJcIj4gPCEtLSAyMiBlaCBCcmFzaWwtLT5cclxuICAgICAgPG1hdC1sYWJlbD5VRiBOYXNjaW1lbnRvPC9tYXQtbGFiZWw+XHJcbiAgICAgIDxtYXQtc2VsZWN0IFsobmdNb2RlbCldPVwicGVzc29hLnVmTmFzY2ltZW50b1wiIG5hbWU9XCJ1Zk5hc2NpbWVudG9cIiAjdWZOYXNjaW1lbnRvPVwibmdNb2RlbFwiIHJlcXVpcmVkPlxyXG4gICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj1cImxldCBlc3RhZG8gb2YgZ2V0TGlzdGFFc3RhZG9zKClcIiBbdmFsdWVdPVwiZXN0YWRvLmlkZW50aWZpY2Fkb3JcIj5cclxuICAgICAgICAgIHt7IGVzdGFkby5pZGVudGlmaWNhZG9yIH19XHJcbiAgICAgICAgPC9tYXQtb3B0aW9uPlxyXG4gICAgICA8L21hdC1zZWxlY3Q+XHJcbiAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG5cclxuICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cImZvcm0tMTVcIiBhcHBlYXJhbmNlPVwib3V0bGluZVwiICpuZ0lmPVwicGVzc29hLmNvZGlnb1BhaXNOYXNjaW1lbnRvID09IDIyXCI+XHJcbiAgICAgIDxtYXQtbGFiZWw+TmF0dXJhbGlkYWRlPC9tYXQtbGFiZWw+XHJcbiAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIG1hdElucHV0IFsobmdNb2RlbCldPVwicGVzc29hLm5hdHVyYWxpZGFkZVwiIG5hbWU9XCJuYXR1cmFsaWRhZGVcIiAjbmF0dXJhbGlkYWRlPVwibmdNb2RlbFwiXHJcbiAgICAgICAgcmVxdWlyZWQgLz5cclxuICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcblxyXG4gICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwiZm9ybS0xMFwiIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCI+XHJcbiAgICAgIDxtYXQtbGFiZWw+RXNjb2xhcmlkYWRlPC9tYXQtbGFiZWw+XHJcbiAgICAgIDxtYXQtc2VsZWN0IFsobmdNb2RlbCldPVwicGVzc29hLmVzY29sYXJpZGFkZVwiIG5hbWU9XCJjb2RpZ29Fc2NvbGFyaWRhZGVcIiAjY29kaWdvRXNjb2xhcmlkYWRlPVwibmdNb2RlbFwiIHJlcXVpcmVkPlxyXG4gICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj1cImxldCBlc2NvbGFyaWRhZGUgb2YgZXNjb2xhcmlkYWRlIHwgYXN5bmNcIiBbdmFsdWVdPVwiZXNjb2xhcmlkYWRlLmNvZGlnb1wiPlxyXG4gICAgICAgICAge3sgZXNjb2xhcmlkYWRlLmRlbm9taW5hY2FvIH19XHJcbiAgICAgICAgPC9tYXQtb3B0aW9uPlxyXG4gICAgICA8L21hdC1zZWxlY3Q+XHJcbiAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG5cclxuICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cImZvcm0tMjVcIiBhcHBlYXJhbmNlPVwib3V0bGluZVwiPlxyXG4gICAgICA8bWF0LWxhYmVsPk5vbWUgU29jaWFsPC9tYXQtbGFiZWw+XHJcbiAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIG1hdElucHV0IFsobmdNb2RlbCldPVwicGVzc29hLm5vbWVTb2NpYWxcIiBuYW1lPVwibm9tZVNvY2lhbFwiICNub21lU29jaWFsPVwibmdNb2RlbFwiIC8+XHJcbiAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG5cclxuICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cImZvcm0tMjVcIiBhcHBlYXJhbmNlPVwib3V0bGluZVwiPlxyXG4gICAgICA8bWF0LWxhYmVsPk5vbWUgZGEgTcOjZTwvbWF0LWxhYmVsPlxyXG4gICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBtYXRJbnB1dCBbKG5nTW9kZWwpXT1cInBlc3NvYS5ub21lTWFlXCIgbmFtZT1cIm5vbWVNYWVcIiAjbm9tZU1hZT1cIm5nTW9kZWxcIiByZXF1aXJlZCAvPlxyXG4gICAgPC9tYXQtZm9ybS1maWVsZD5cclxuXHJcbiAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJmb3JtLTI1XCIgYXBwZWFyYW5jZT1cIm91dGxpbmVcIj5cclxuICAgICAgPG1hdC1sYWJlbD5Ob21lIGRvIFBhaTwvbWF0LWxhYmVsPlxyXG4gICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBtYXRJbnB1dCBbKG5nTW9kZWwpXT1cInBlc3NvYS5ub21lUGFpXCIgbmFtZT1cIm5vbWVQYWlcIiAjbm9tZVBhaT1cIm5nTW9kZWxcIiByZXF1aXJlZCAvPlxyXG4gICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgPCEtLSBDYW1wb3MgUGVzc29hIEp1csOtZGljYSAtLT5cclxuICA8bmctY29udGFpbmVyICpuZ0lmPVwicGVzc29hLnRpcG9QZXNzb2EgPT09IHRpcG9QZXNzb2FFbnVtKCkuSlVSSURJQ0FcIj5cclxuICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cImZvcm0tMjVcIiBhcHBlYXJhbmNlPVwib3V0bGluZVwiPlxyXG4gICAgICA8bWF0LWxhYmVsPlJhesOjbyBTb2NpYWw8L21hdC1sYWJlbD5cclxuICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgbWF0SW5wdXQgWyhuZ01vZGVsKV09XCJwZXNzb2EucmF6YW9Tb2NpYWxcIiBuYW1lPVwicmF6YW9Tb2NpYWxcIiAvPlxyXG4gICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cImZvcm0tMjVcIiBhcHBlYXJhbmNlPVwib3V0bGluZVwiPlxyXG4gICAgICA8bWF0LWxhYmVsPk5vbWUgRmFudGFzaWE8L21hdC1sYWJlbD5cclxuICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgbWF0SW5wdXQgWyhuZ01vZGVsKV09XCJwZXNzb2Eubm9tZUZhbnRhc2lhXCIgbmFtZT1cIm5vbWVGYW50YXNpYVwiIC8+XHJcbiAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gIDwvbmctY29udGFpbmVyPlxyXG5cclxuICA8bmctY29udGFpbmVyICpuZ0lmPVwicGVzc29hLnRpcG9QZXNzb2EgPT0gdGlwb1Blc3NvYUVudW0oKS5GSVNJQ0FcIj5cclxuICAgIDxiIHN0eWxlPVwiZmxleDogMSAxIDEwMCU7IG1hcmdpbi1ib3R0b206IDEwcHg7XCI+RG9jdW1lbnRhw6fDo288L2I+XHJcblxyXG4gICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwiZm9ybS0yNVwiIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCI+XHJcbiAgICAgIDxtYXQtbGFiZWw+SWRlbnRpZGFkZTwvbWF0LWxhYmVsPlxyXG4gICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBtYXRJbnB1dCBbKG5nTW9kZWwpXT1cInBlc3NvYS5yZ1wiIG5hbWU9XCJyZ1wiICNyZz1cIm5nTW9kZWxcIiByZXF1aXJlZCAvPlxyXG4gICAgPC9tYXQtZm9ybS1maWVsZD5cclxuXHJcbiAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJmb3JtLTI1XCIgYXBwZWFyYW5jZT1cIm91dGxpbmVcIj5cclxuICAgICAgPG1hdC1sYWJlbD7Dk3Jnw6NvIEVtaXNzb3I8L21hdC1sYWJlbD5cclxuICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgbWF0SW5wdXQgWyhuZ01vZGVsKV09XCJwZXNzb2EucmdPcmdhb1wiIG5hbWU9XCJyZ09yZ2FvXCIgI3JnT3JnYW89XCJuZ01vZGVsXCIgcmVxdWlyZWQgLz5cclxuICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcblxyXG4gICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwiZm9ybS0yNVwiIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCI+XHJcbiAgICAgIDxtYXQtbGFiZWw+VW5pZGFkZSBGZWRlcmF0aXZhPC9tYXQtbGFiZWw+XHJcbiAgICAgIDxtYXQtc2VsZWN0IFsobmdNb2RlbCldPVwicGVzc29hLnJnVWZcIiBuYW1lPVwicmdVZlwiICNyZ1VmPVwibmdNb2RlbFwiIHJlcXVpcmVkPlxyXG4gICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj1cImxldCBlc3RhZG8gb2YgZ2V0TGlzdGFFc3RhZG9zKClcIiBbdmFsdWVdPVwiZXN0YWRvLmlkZW50aWZpY2Fkb3JcIj5cclxuICAgICAgICAgIHt7IGVzdGFkby5pZGVudGlmaWNhZG9yIH19XHJcbiAgICAgICAgPC9tYXQtb3B0aW9uPlxyXG4gICAgICA8L21hdC1zZWxlY3Q+XHJcbiAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG5cclxuICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cImZvcm0tMjBcIiBhcHBlYXJhbmNlPVwib3V0bGluZVwiPlxyXG4gICAgICA8bWF0LWxhYmVsPkRhdGEgZGUgRW1pc3PDo288L21hdC1sYWJlbD5cclxuICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgbWF0SW5wdXQgWyhuZ01vZGVsKV09XCJwZXNzb2EucmdEYXRhRW1pc3Nhb1wiIG5hbWU9XCJyZ0RhdGFFbWlzc2FvXCIgI3JnRGF0YUVtaXNzYW89XCJuZ01vZGVsXCIgLz5cclxuICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCJwZXNzb2EudGlwb1Blc3NvYSA9PSB0aXBvUGVzc29hRW51bSgpLkVTVFJBTkdFSVJBIFwiPlxyXG4gICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCI+XHJcbiAgICAgIDxtYXQtbGFiZWw+RGF0YSBDaGVnYWRhIEJyYXNpbDwvbWF0LWxhYmVsPlxyXG4gICAgICA8aW5wdXQgbWF0SW5wdXQgW21hdERhdGVwaWNrZXJdPVwiZGF0YUNoZWdhZGFCcmFzaWxQaWNrZXJcIiBbKG5nTW9kZWwpXT1cInBlc3NvYS5kYXRhQ2hlZ2FkYUJyYXNpbFwiXHJcbiAgICAgICAgbmFtZT1cImRhdGFDaGVnYWRhQnJhc2lsXCIgI2RhdGFDaGVnYWRhQnJhc2lsPVwibmdNb2RlbFwiIHJlcXVpcmVkPlxyXG4gICAgICA8bWF0LWRhdGVwaWNrZXItdG9nZ2xlIG1hdFN1ZmZpeCBbZm9yXT1cImRhdGFDaGVnYWRhQnJhc2lsUGlja2VyXCI+PC9tYXQtZGF0ZXBpY2tlci10b2dnbGU+XHJcbiAgICAgIDxtYXQtZGF0ZXBpY2tlciAjZGF0YUNoZWdhZGFCcmFzaWxQaWNrZXI+PC9tYXQtZGF0ZXBpY2tlcj5cclxuICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcblxyXG4gICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwiZm9ybS0xMFwiIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCI+XHJcbiAgICAgIDxtYXQtbGFiZWw+UGHDrXMgUGFzc2Fwb3J0ZTwvbWF0LWxhYmVsPlxyXG4gICAgICA8bWF0LXNlbGVjdCBbKG5nTW9kZWwpXT1cInBlc3NvYS5jb2RpZ29QYWlzUGFzc2Fwb3J0ZVwiIG5hbWU9XCJjb2RpZ29QYWlzUGFzc2Fwb3J0ZVwiICNjb2RpZ29QYWlzUGFzc2Fwb3J0ZT1cIm5nTW9kZWxcIlxyXG4gICAgICAgIHJlcXVpcmVkPlxyXG4gICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj1cImxldCBwYWlzTmFzY2ltZW50byBvZiBwYWlzZXMgfCBhc3luY1wiIFt2YWx1ZV09XCJwYWlzTmFzY2ltZW50by5jb2RpZ29cIj5cclxuICAgICAgICAgIHt7IHBhaXNOYXNjaW1lbnRvLmRlbm9taW5hY2FvIH19XHJcbiAgICAgICAgPC9tYXQtb3B0aW9uPlxyXG4gICAgICA8L21hdC1zZWxlY3Q+XHJcbiAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG5cclxuICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwib3V0bGluZVwiPlxyXG4gICAgICA8bWF0LWxhYmVsPk7Dum1lcm8gUGFzc2Fwb3J0ZTwvbWF0LWxhYmVsPlxyXG4gICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBtYXRJbnB1dCBbKG5nTW9kZWwpXT1cInBlc3NvYS5wYXNzYXBvcnRlXCIgbmFtZT1cInBhc3NhcG9ydGVcIiAjcGFzc2Fwb3J0ZT1cIm5nTW9kZWxcIiByZXF1aXJlZCAvPlxyXG4gICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgPGxpYi11bmItcGVzc29hLXRlbGVmb25lLWxpc3Qgc3R5bGU9XCJmbGV4OiAxIDEgMTAwJTtcIiBbYmFja2VuZFVSTF09XCJiYWNrZW5kVVJMXCIgW3RlbGVmb25lc109XCJwZXNzb2EudGVsZWZvbmVzXCJcclxuICAgICh0ZWxlZm9uZXNFbWl0dGVkKT1cInRlbGVmb25lc0VtaXR0ZWQoJGV2ZW50KVwiPjwvbGliLXVuYi1wZXNzb2EtdGVsZWZvbmUtbGlzdD5cclxuXHJcbiAgPGxpYi11bmItcGVzc29hLWVuZGVyZWNvLWxpc3Qgc3R5bGU9XCJmbGV4OiAxIDEgMTAwJTtcIiBbYmFja2VuZFVSTF09XCJiYWNrZW5kVVJMXCIgW2VuZGVyZWNvc109XCJwZXNzb2EuZW5kZXJlY29zXCJcclxuICAgIChlbmRlcmVjb3NFbWl0dGVkKT1cImVuZGVyZWNvc0VtaXR0ZWQoJGV2ZW50KVwiPjwvbGliLXVuYi1wZXNzb2EtZW5kZXJlY28tbGlzdD5cclxuXHJcbiAgPGxpYi11bmItcGVzc29hLWVtYWlsLWxpc3Qgc3R5bGU9XCJmbGV4OiAxIDEgMTAwJTtcIiBbYmFja2VuZFVSTF09XCJiYWNrZW5kVVJMXCIgW2VtYWlsc109XCJwZXNzb2EuZW1haWxzXCJcclxuICAgIChlbWFpbHNFbWl0dGVkKT1cImVtYWlsc0VtaXR0ZWQoJGV2ZW50KVwiPjwvbGliLXVuYi1wZXNzb2EtZW1haWwtbGlzdD5cclxuXHJcbiAgPGRpdiAqbmdJZj1cImlzUmVhZG9ubHlGcm9tU2lhcGVcIiBzdHlsZT1cImZsZXg6MSAxIDEwMCU7IG1hcmdpbi1ib3R0b206MTBweDtcIj5cclxuICAgIDxtYXQtY2FyZD5cclxuICAgICAgPG1hdC1jYXJkLWNvbnRlbnQ+XHJcbiAgICAgICAgPHN0cm9uZz5TZXJ2aWRvciBjb20gbWF0csOtY3VsYSBTSUFQRSBkZXZlIHRlciBzZXVzIGRhZG9zIGF1dGFsaXphZG9zIHBlbG8gYXBsaWNhdGl2byBkbyBzb3Vnb3Y8L3N0cm9uZz5cclxuICAgICAgPC9tYXQtY2FyZC1jb250ZW50PlxyXG4gICAgPC9tYXQtY2FyZD5cclxuICA8L2Rpdj5cclxuXHJcbiAgPG1hdC1jYXJkLWFjdGlvbnMgY2xhc3M9XCJjYXJkLWFjdGlvbnMtYnV0dG9uc1wiICpuZ0lmPVwiYnVzY2FSZWFsaXphZGFcIj5cclxuICAgIDxidXR0b24gbWF0LWZsYXQtYnV0dG9uIFtkaXNhYmxlZF09XCJpc0xvYWRpbmcgfHwgaXNSZWFkb25seUZyb21TaWFwZVwiIHR5cGU9XCJzdWJtaXRcIiBjb2xvcj1cInByaW1hcnlcIj5cclxuICAgICAgU2FsdmFyXHJcbiAgICA8L2J1dHRvbj5cclxuICA8L21hdC1jYXJkLWFjdGlvbnM+XHJcblxyXG48L2Zvcm0+Il19