@stiunb/unb-lib-components 18.0.24 → 18.0.26
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.
- package/README.md +27 -0
- package/esm2022/lib/unb-pessoa/unb-pessoa-email-form/unb-pessoa-email-list.mjs +1 -1
- package/esm2022/lib/unb-pessoa/unb-pessoa-form/unb-pessoa-form.component.mjs +77 -40
- package/esm2022/lib/unb-pessoa/unb-pessoa-models/unb-pessoa.model.mjs +1 -1
- package/esm2022/lib/unb-pessoa/unb-pessoa-pesquisar/unb-pessoa-pesquisar.component.mjs +132 -65
- package/esm2022/lib/unb-pessoa/unb-pessoa.service.mjs +4 -4
- package/esm2022/lib/unb-pessoa/unb-tipo-pessoa.enum.mjs +7 -7
- package/fesm2022/stiunb-unb-lib-components.mjs +198 -95
- package/fesm2022/stiunb-unb-lib-components.mjs.map +1 -1
- package/lib/unb-pessoa/unb-pessoa-form/unb-pessoa-form.component.d.ts +16 -7
- package/lib/unb-pessoa/unb-pessoa-models/unb-pessoa.model.d.ts +2 -2
- package/lib/unb-pessoa/unb-pessoa-pesquisar/unb-pessoa-pesquisar.component.d.ts +29 -10
- package/lib/unb-pessoa/unb-pessoa.service.d.ts +2 -2
- package/lib/unb-pessoa/unb-tipo-pessoa.enum.d.ts +4 -4
- package/package.json +2 -3
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { Component, EventEmitter, Input, Output } from '@angular/core';
|
|
2
|
-
import { UnbUtils } from '../../utils/unb-utils';
|
|
3
|
-
import { UnbPessoaModel } from '../unb-pessoa-models/unb-pessoa.model';
|
|
4
|
-
import { TipoPessoaEnum } from '../unb-tipo-pessoa.enum';
|
|
1
|
+
import { booleanAttribute, Component, EventEmitter, Input, Output } from '@angular/core';
|
|
5
2
|
import { forkJoin } from 'rxjs';
|
|
6
3
|
import { UnbTipoMensagemEnum } from '../../unb-mensagem/unb-mensagem.service';
|
|
4
|
+
import { UnbUtils } from '../../utils/unb-utils';
|
|
5
|
+
import { UnbPessoaModel } from '../unb-pessoa-models/unb-pessoa.model';
|
|
6
|
+
import { UnbTipoPessoaEnum } from '../unb-tipo-pessoa.enum';
|
|
7
7
|
import * as i0 from "@angular/core";
|
|
8
8
|
import * as i1 from "../unb-pessoa.service";
|
|
9
9
|
import * as i2 from "@angular/material/snack-bar";
|
|
@@ -25,18 +25,23 @@ export class UnbPessoaPesquisarComponent {
|
|
|
25
25
|
this.isLoading = false;
|
|
26
26
|
// Configuração da API. Exemplo SGI.unb.br/pessoa-api
|
|
27
27
|
this.backendURL = "";
|
|
28
|
+
// Flags de Pesquisa (com conversão automática de string para boolean)
|
|
28
29
|
this.pesquisarPorCPF = true;
|
|
29
30
|
this.pesquisarPorCNPJ = true;
|
|
30
|
-
this.pesquisarPorEstrangeiro =
|
|
31
|
+
this.pesquisarPorEstrangeiro = false;
|
|
32
|
+
// Configurações de UI e Comportamento
|
|
33
|
+
this.defaultTipoPessoa = UnbTipoPessoaEnum.FISICA;
|
|
31
34
|
this.campoPesquisaMaxWidth = '400px';
|
|
32
|
-
this.pessoaEmitted = new EventEmitter();
|
|
33
|
-
this.pessoa = new UnbPessoaModel();
|
|
34
35
|
this.mostrarPesquisa = true;
|
|
35
|
-
this.limparAposPesquisa = false;
|
|
36
|
-
|
|
37
|
-
this.
|
|
38
|
-
this.
|
|
39
|
-
|
|
36
|
+
this.limparAposPesquisa = false;
|
|
37
|
+
// Textos e Labels
|
|
38
|
+
this.label = "Digite o CPF/CNPJ ou Passaporte";
|
|
39
|
+
this.placeholder = "";
|
|
40
|
+
this.hint = "";
|
|
41
|
+
// Dados e Eventos
|
|
42
|
+
this.pessoa = new UnbPessoaModel();
|
|
43
|
+
this.pessoaEmitted = new EventEmitter();
|
|
44
|
+
this.isLoadingChange = new EventEmitter();
|
|
40
45
|
this.pessoaEncontrado = false;
|
|
41
46
|
this.listaTipoEndereco = [];
|
|
42
47
|
this.listaTipoTelefone = [];
|
|
@@ -44,13 +49,13 @@ export class UnbPessoaPesquisarComponent {
|
|
|
44
49
|
this.idMensagemService = "UnbPessoaPesquisar";
|
|
45
50
|
}
|
|
46
51
|
ngOnInit() {
|
|
47
|
-
|
|
48
|
-
|
|
52
|
+
// 1. Validação de Inicialização da API
|
|
53
|
+
if (!this.backendURL) {
|
|
54
|
+
this.handleErrorPrintConsole("[UnbPessoaPesquisarComponent] ERROR: backendURL está null.");
|
|
49
55
|
return;
|
|
50
56
|
}
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
}
|
|
57
|
+
this.pessoaService.setBackendUrl(this.backendURL);
|
|
58
|
+
// 2. Carregamento de Dados de Apoio
|
|
54
59
|
forkJoin({
|
|
55
60
|
tiposEnd: this.pessoaService.getTipoEndereco(),
|
|
56
61
|
tiposTel: this.pessoaService.getTipoTelefone(),
|
|
@@ -63,56 +68,76 @@ export class UnbPessoaPesquisarComponent {
|
|
|
63
68
|
},
|
|
64
69
|
error: (err) => {
|
|
65
70
|
this.handleError("Falha ao carregar dados de apoio. Recarregue a página.");
|
|
66
|
-
console.error("Erro no forkJoin
|
|
71
|
+
console.error("Erro no forkJoin:", err);
|
|
67
72
|
}
|
|
68
73
|
});
|
|
69
|
-
//
|
|
70
|
-
const opcoesAtivas = [this.pesquisarPorCPF, this.pesquisarPorCNPJ, this.pesquisarPorEstrangeiro].filter(
|
|
71
|
-
//
|
|
72
|
-
|
|
73
|
-
|
|
74
|
+
// 3. Definição da Lógica de Exibição e Tipo Padrão
|
|
75
|
+
const opcoesAtivas = [this.pesquisarPorCPF, this.pesquisarPorCNPJ, this.pesquisarPorEstrangeiro].filter(v => v).length;
|
|
76
|
+
// Só mostra o rádio se houver escolha real (mais de uma opção ativa)
|
|
77
|
+
this.mostrarTipoPessoa = opcoesAtivas > 1;
|
|
78
|
+
if (opcoesAtivas === 0) {
|
|
79
|
+
this.handleErrorPrintConsole("[UnbPessoaPesquisarComponent] ERROR: Nenhuma opção de pesquisa (CPF/CNPJ/Estrangeiro) está ativa.");
|
|
80
|
+
return;
|
|
81
|
+
}
|
|
82
|
+
// 4. Atribuição do Tipo Inicial (Ordem de prioridade: Valor padrão -> Opção Única -> CPF)
|
|
83
|
+
this.definirTipoPessoaInicial();
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Define qual tipo de pessoa estará selecionado ao carregar o componente
|
|
87
|
+
*/
|
|
88
|
+
definirTipoPessoaInicial() {
|
|
89
|
+
// Verifica se o padrão passado é permitido pelas flags de pesquisa
|
|
90
|
+
const padraoEhValido = (this.defaultTipoPessoa === UnbTipoPessoaEnum.FISICA && this.pesquisarPorCPF) ||
|
|
91
|
+
(this.defaultTipoPessoa === UnbTipoPessoaEnum.JURIDICA && this.pesquisarPorCNPJ) ||
|
|
92
|
+
(this.defaultTipoPessoa === UnbTipoPessoaEnum.ESTRANGEIRA && this.pesquisarPorEstrangeiro);
|
|
93
|
+
if (padraoEhValido) {
|
|
94
|
+
// Como o valor da string é igual ao valor do Enum, a atribuição é direta
|
|
95
|
+
this.pessoa.tipoPessoa = this.defaultTipoPessoa;
|
|
74
96
|
}
|
|
75
97
|
else {
|
|
76
|
-
|
|
98
|
+
if (this.defaultTipoPessoa) {
|
|
99
|
+
console.warn(`[UnbPessoaPesquisar] O valor defaultTipoPessoa='${this.defaultTipoPessoa}' é incompatível com as opções de pesquisa ativas. Selecionando a primeira disponível.`);
|
|
100
|
+
}
|
|
101
|
+
// Fallback para a primeira opção ativa
|
|
77
102
|
if (this.pesquisarPorCPF) {
|
|
78
|
-
this.pessoa.tipoPessoa =
|
|
103
|
+
this.pessoa.tipoPessoa = UnbTipoPessoaEnum.FISICA;
|
|
79
104
|
}
|
|
80
105
|
else if (this.pesquisarPorCNPJ) {
|
|
81
|
-
this.pessoa.tipoPessoa =
|
|
106
|
+
this.pessoa.tipoPessoa = UnbTipoPessoaEnum.JURIDICA;
|
|
82
107
|
}
|
|
83
108
|
else if (this.pesquisarPorEstrangeiro) {
|
|
84
|
-
this.pessoa.tipoPessoa =
|
|
85
|
-
}
|
|
86
|
-
else {
|
|
87
|
-
this.handleErrorPrintConsole("[UnbPessoaPesquisarComponent] ERROR: pesquisarPorCPF, pesquisarPorCNPJ e pesquisarPorEstrangeiro está falso. Marque pelo menos um como true");
|
|
88
|
-
return;
|
|
109
|
+
this.pessoa.tipoPessoa = UnbTipoPessoaEnum.ESTRANGEIRA;
|
|
89
110
|
}
|
|
90
111
|
}
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
112
|
+
}
|
|
113
|
+
onTipoPessoaChange() {
|
|
114
|
+
// Cria uma nova pessoa limpa com o tipo selecionado
|
|
115
|
+
const novaPessoa = new UnbPessoaModel();
|
|
116
|
+
novaPessoa.tipoPessoa = this.pessoa.tipoPessoa;
|
|
117
|
+
// Inicializa arrays vazios
|
|
118
|
+
novaPessoa.telefones = [];
|
|
119
|
+
novaPessoa.enderecos = [];
|
|
120
|
+
novaPessoa.emails = [];
|
|
121
|
+
// Substitui a pessoa atual
|
|
122
|
+
this.pessoa = novaPessoa;
|
|
123
|
+
// Emite a nova pessoa limpa para o componente pai (form)
|
|
124
|
+
this.pessoaEmitted.emit(this.pessoa);
|
|
101
125
|
}
|
|
102
126
|
pesquisar() {
|
|
103
127
|
if (this.validar() == false)
|
|
104
128
|
return;
|
|
105
129
|
this.isLoading = true;
|
|
130
|
+
this.isLoadingChange.emit(true);
|
|
106
131
|
let result;
|
|
107
|
-
if (this.pessoa.tipoPessoa ==
|
|
132
|
+
if (this.pessoa.tipoPessoa == UnbTipoPessoaEnum.FISICA) {
|
|
108
133
|
let cpf = this.pessoa.cpf.match(/\d/g)?.join(""); // remove caracteres
|
|
109
134
|
result = this.pessoaService.findByCpf(cpf);
|
|
110
135
|
}
|
|
111
|
-
else if (this.pessoa.tipoPessoa ==
|
|
136
|
+
else if (this.pessoa.tipoPessoa == UnbTipoPessoaEnum.JURIDICA) {
|
|
112
137
|
let cnpj = this.pessoa.cnpj.match(/\d/g)?.join(""); // remove caracteres
|
|
113
138
|
result = this.pessoaService.findByCnpj(cnpj);
|
|
114
139
|
}
|
|
115
|
-
else if (this.pessoa.tipoPessoa ==
|
|
140
|
+
else if (this.pessoa.tipoPessoa == UnbTipoPessoaEnum.ESTRANGEIRA) {
|
|
116
141
|
result = this.pessoaService.findByPassaporte(this.pessoa.passaporte);
|
|
117
142
|
}
|
|
118
143
|
if (result) {
|
|
@@ -127,7 +152,7 @@ export class UnbPessoaPesquisarComponent {
|
|
|
127
152
|
this.handleErrorPrintConsole("[UnbPessoaPesquisarComponent] ERROR: backendURL.url está null. Insira o parâmetro (backendURL) com o valor da URL do seu Backend!");
|
|
128
153
|
return false;
|
|
129
154
|
}
|
|
130
|
-
if (this.pessoa.tipoPessoa ==
|
|
155
|
+
if (this.pessoa.tipoPessoa == UnbTipoPessoaEnum.FISICA) {
|
|
131
156
|
if (this.pessoa.cpf == null || (this.pessoa.cpf != null && this.pessoa.cpf == "")) {
|
|
132
157
|
this.handleError("CPF é um campo obrigatório.");
|
|
133
158
|
return false;
|
|
@@ -137,7 +162,7 @@ export class UnbPessoaPesquisarComponent {
|
|
|
137
162
|
return false;
|
|
138
163
|
}
|
|
139
164
|
}
|
|
140
|
-
else if (this.pessoa.tipoPessoa ==
|
|
165
|
+
else if (this.pessoa.tipoPessoa == UnbTipoPessoaEnum.JURIDICA) {
|
|
141
166
|
if (this.pessoa.cnpj == null || (this.pessoa.cnpj != null && this.pessoa.cnpj == "")) {
|
|
142
167
|
this.handleError("CNPJ é um campo obrigatório");
|
|
143
168
|
return false;
|
|
@@ -147,7 +172,7 @@ export class UnbPessoaPesquisarComponent {
|
|
|
147
172
|
return false;
|
|
148
173
|
}
|
|
149
174
|
}
|
|
150
|
-
else if (this.pessoa.tipoPessoa ==
|
|
175
|
+
else if (this.pessoa.tipoPessoa == UnbTipoPessoaEnum.ESTRANGEIRA) {
|
|
151
176
|
if (this.pessoa.passaporte == null || (this.pessoa.passaporte != null && this.pessoa.passaporte == "")) {
|
|
152
177
|
this.handleError("Passaporte é um campo obrigatório");
|
|
153
178
|
return false;
|
|
@@ -162,9 +187,13 @@ export class UnbPessoaPesquisarComponent {
|
|
|
162
187
|
// Em unb-pessoa-pesquisar.component.ts
|
|
163
188
|
hadleResult(resultado) {
|
|
164
189
|
this.isLoading = false;
|
|
190
|
+
this.isLoadingChange.emit(false);
|
|
165
191
|
if (resultado) {
|
|
166
192
|
resultado.tipoPessoa = this.pessoa.tipoPessoa; // o backend nao retorna o tipo pessoa. entao tenho que atribuir antes
|
|
167
193
|
this.pessoa = resultado;
|
|
194
|
+
this.pessoa.enderecos = this.pessoa.enderecos || [];
|
|
195
|
+
this.pessoa.telefones = this.pessoa.telefones || [];
|
|
196
|
+
this.pessoa.emails = this.pessoa.emails || [];
|
|
168
197
|
// --- SEÇÃO DE LIMPEZA DE DADOS PRINCIPAIS (VOCÊ JÁ TINHA) ---
|
|
169
198
|
if (this.pessoa.sexo) {
|
|
170
199
|
if (this.pessoa.sexo.toUpperCase().trim() === 'FEMININO') {
|
|
@@ -239,21 +268,23 @@ export class UnbPessoaPesquisarComponent {
|
|
|
239
268
|
email.ordem = email.ordem || (i + 1);
|
|
240
269
|
});
|
|
241
270
|
}
|
|
242
|
-
if (this.pessoa.tipoPessoa ==
|
|
271
|
+
if (this.pessoa.tipoPessoa == UnbTipoPessoaEnum.FISICA) {
|
|
243
272
|
this.pessoa.cpf = UnbUtils.formataCpf(resultado.cpf);
|
|
244
273
|
}
|
|
245
|
-
else if (this.pessoa.tipoPessoa ==
|
|
274
|
+
else if (this.pessoa.tipoPessoa == UnbTipoPessoaEnum.JURIDICA) {
|
|
246
275
|
this.pessoa.cnpj = UnbUtils.formataCnpj(resultado.cnpj);
|
|
247
276
|
}
|
|
277
|
+
else if (this.pessoa.tipoPessoa == UnbTipoPessoaEnum.ESTRANGEIRA) {
|
|
278
|
+
}
|
|
248
279
|
}
|
|
249
280
|
else {
|
|
250
281
|
// se chegar aki eh pq nao encontrou... (lógica que já existe)
|
|
251
282
|
let novaPessoa = new UnbPessoaModel();
|
|
252
283
|
novaPessoa.tipoPessoa = this.pessoa.tipoPessoa;
|
|
253
|
-
if (this.pessoa.tipoPessoa ==
|
|
284
|
+
if (this.pessoa.tipoPessoa == UnbTipoPessoaEnum.FISICA) {
|
|
254
285
|
novaPessoa.cpf = this.pessoa.cpf;
|
|
255
286
|
}
|
|
256
|
-
else if (this.pessoa.tipoPessoa ==
|
|
287
|
+
else if (this.pessoa.tipoPessoa == UnbTipoPessoaEnum.JURIDICA) {
|
|
257
288
|
novaPessoa.cnpj = this.pessoa.cnpj;
|
|
258
289
|
}
|
|
259
290
|
else {
|
|
@@ -302,6 +333,7 @@ export class UnbPessoaPesquisarComponent {
|
|
|
302
333
|
}
|
|
303
334
|
handleError(erro) {
|
|
304
335
|
this.isLoading = false;
|
|
336
|
+
this.isLoadingChange.emit(false);
|
|
305
337
|
this.pessoaEncontrado = false;
|
|
306
338
|
let erroTratado;
|
|
307
339
|
// --- ADAPTER: Converte string para o Objeto Padrão ---
|
|
@@ -337,39 +369,74 @@ export class UnbPessoaPesquisarComponent {
|
|
|
337
369
|
});
|
|
338
370
|
}
|
|
339
371
|
tipoPessoaEnum() {
|
|
340
|
-
return
|
|
372
|
+
return UnbTipoPessoaEnum;
|
|
373
|
+
}
|
|
374
|
+
/**
|
|
375
|
+
* Formata o CPF enquanto o usuário digita
|
|
376
|
+
*/
|
|
377
|
+
formatarCpf(event) {
|
|
378
|
+
let valor = event.target.value.replace(/\D/g, ''); // Remove tudo que não é dígito
|
|
379
|
+
if (valor.length <= 11) {
|
|
380
|
+
// Aplica máscara: 000.000.000-00
|
|
381
|
+
valor = valor.replace(/(\d{3})(\d)/, '$1.$2');
|
|
382
|
+
valor = valor.replace(/(\d{3})(\d)/, '$1.$2');
|
|
383
|
+
valor = valor.replace(/(\d{3})(\d{1,2})$/, '$1-$2');
|
|
384
|
+
this.pessoa.cpf = valor;
|
|
385
|
+
}
|
|
386
|
+
}
|
|
387
|
+
/**
|
|
388
|
+
* Formata o CNPJ enquanto o usuário digita
|
|
389
|
+
*/
|
|
390
|
+
formatarCnpj(event) {
|
|
391
|
+
let valor = event.target.value.replace(/\D/g, ''); // Remove tudo que não é dígito
|
|
392
|
+
if (valor.length <= 14) {
|
|
393
|
+
// Aplica máscara: 00.000.000/0000-00
|
|
394
|
+
valor = valor.replace(/(\d{2})(\d)/, '$1.$2');
|
|
395
|
+
valor = valor.replace(/(\d{3})(\d)/, '$1.$2');
|
|
396
|
+
valor = valor.replace(/(\d{3})(\d)/, '$1/$2');
|
|
397
|
+
valor = valor.replace(/(\d{4})(\d{1,2})$/, '$1-$2');
|
|
398
|
+
this.pessoa.cnpj = valor;
|
|
399
|
+
}
|
|
341
400
|
}
|
|
342
401
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.2", ngImport: i0, type: UnbPessoaPesquisarComponent, deps: [{ token: i1.UnBPessoaService }, { token: i2.MatSnackBar }, { token: i3.UnbMensagemService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
343
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "
|
|
402
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "16.1.0", version: "18.1.2", type: UnbPessoaPesquisarComponent, selector: "lib-unb-pessoa-pesquisar", inputs: { backendURL: "backendURL", pesquisarPorCPF: ["pesquisarPorCPF", "pesquisarPorCPF", booleanAttribute], pesquisarPorCNPJ: ["pesquisarPorCNPJ", "pesquisarPorCNPJ", booleanAttribute], pesquisarPorEstrangeiro: ["pesquisarPorEstrangeiro", "pesquisarPorEstrangeiro", booleanAttribute], defaultTipoPessoa: "defaultTipoPessoa", campoPesquisaMaxWidth: "campoPesquisaMaxWidth", mostrarPesquisa: ["mostrarPesquisa", "mostrarPesquisa", booleanAttribute], limparAposPesquisa: ["limparAposPesquisa", "limparAposPesquisa", booleanAttribute], label: "label", placeholder: "placeholder", hint: "hint", pessoa: "pessoa" }, outputs: { pessoaEmitted: "pessoaEmitted", isLoadingChange: "isLoadingChange" }, ngImport: i0, template: "<form #pessoaForm=\"ngForm\" class=\"pesquisa-container\" [ngStyle]=\"{'--tamanho-maximo': campoPesquisaMaxWidth}\"\r\n (ngSubmit)=\"pesquisar()\">\r\n <div class=\"mensagem-container\" style=\"width: 100%;\">\r\n <unb-mensagem [identificador]=\"idMensagemService\" class=\"mensagem-form\"></unb-mensagem>\r\n </div>\r\n\r\n <div class=\"form-wrapper\">\r\n <div *ngIf=\"mostrarTipoPessoa\" class=\"radio-container\">\r\n <mat-radio-group aria-label=\"Tipo de Pessoa\" [(ngModel)]=\"pessoa.tipoPessoa\" #tipoPessoa=\"ngModel\"\r\n name=\"tipoPessoa\" (change)=\"onTipoPessoaChange()\">\r\n <mat-radio-button *ngIf=\"pesquisarPorCPF\" value=\"{{ tipoPessoaEnum().FISICA}}\">Pessoa F\u00EDsica</mat-radio-button>\r\n <mat-radio-button *ngIf=\"pesquisarPorCNPJ\" value=\"{{tipoPessoaEnum().JURIDICA}}\"> Pessoa\r\n Jur\u00EDdica</mat-radio-button>\r\n <mat-radio-button *ngIf=\"pesquisarPorEstrangeiro\"\r\n value=\"{{tipoPessoaEnum().ESTRANGEIRA}}\">Estrangeiro</mat-radio-button>\r\n </mat-radio-group>\r\n </div>\r\n\r\n <div class=\"break\"></div>\r\n\r\n <ng-container *ngIf=\"pessoa.tipoPessoa === tipoPessoaEnum().FISICA\">\r\n <mat-form-field appearance=\"outline\">\r\n <mat-label>CPF</mat-label>\r\n <input type=\"text\" matInput [(ngModel)]=\"pessoa.cpf\" name=\"cpf\" #cpf=\"ngModel\" required={{true}}\r\n (input)=\"formatarCpf($event)\" maxlength=\"14\" placeholder=\"000.000.000-00\" />\r\n <button matSuffix mat-icon-button type=\"button\" aria-label=\"Pesquisar\" [disabled]=\"isLoading\"\r\n (click)=\"pesquisar()\">\r\n <ng-container *ngIf=\"!isLoading; else loadingIcon\">\r\n <mat-icon>search</mat-icon>\r\n </ng-container>\r\n <ng-template #loadingIcon>\r\n <mat-progress-spinner [diameter]=\"20\" mode=\"indeterminate\" color=\"primary\" class=\"spinner-button\">\r\n </mat-progress-spinner>\r\n </ng-template>\r\n </button>\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>Passaporte</mat-label>\r\n <input type=\"text\" matInput [(ngModel)]=\"pessoa.passaporte\" name=\"passaporte\" required=\"true\" />\r\n <button matSuffix mat-icon-button type=\"button\" aria-label=\"Pesquisar\" (click)=\"pesquisar()\">\r\n <ng-container *ngIf=\"!isLoading; else loadingIcon\">\r\n <mat-icon>search</mat-icon>\r\n </ng-container>\r\n <ng-template #loadingIcon>\r\n <mat-progress-spinner [diameter]=\"20\" mode=\"indeterminate\" color=\"primary\" class=\"spinner-button\">\r\n </mat-progress-spinner>\r\n </ng-template>\r\n </button>\r\n </mat-form-field>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"pessoa.tipoPessoa === tipoPessoaEnum().JURIDICA\">\r\n <mat-form-field appearance=\"outline\">\r\n <mat-label>CNPJ</mat-label>\r\n <input type=\"text\" matInput [(ngModel)]=\"pessoa.cnpj\" name=\"cnpj\" required=\"true\"\r\n (input)=\"formatarCnpj($event)\" maxlength=\"18\" placeholder=\"00.000.000/0000-00\" />\r\n <button matSuffix mat-icon-button type=\"button\" aria-label=\"Pesquisar\" (click)=\"pesquisar()\">\r\n <ng-container *ngIf=\"!isLoading; else loadingIcon\">\r\n <mat-icon>search</mat-icon>\r\n </ng-container>\r\n <ng-template #loadingIcon>\r\n <mat-progress-spinner [diameter]=\"20\" mode=\"indeterminate\" color=\"primary\" class=\"spinner-button\">\r\n </mat-progress-spinner>\r\n </ng-template>\r\n </button>\r\n </mat-form-field>\r\n </ng-container>\r\n </div>\r\n</form>", styles: [".pesquisa-container{display:flex;flex-direction:column;align-items:flex-start}.form-wrapper{display:flex;flex-direction:column;width:100%;max-width:var(--tamanho-maximo);gap:5px}.mensagem-form{display:block;width:100%}\n"], dependencies: [{ kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { 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.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { 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.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "component", type: i8.UnbMensagemComponent, selector: "unb-mensagem", inputs: ["mensagem", "tipo", "identificador"] }, { kind: "component", type: i9.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i9.MatLabel, selector: "mat-label" }, { kind: "directive", type: i9.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "directive", type: i10.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: i11.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }, { kind: "directive", type: i12.MatRadioGroup, selector: "mat-radio-group", inputs: ["color", "name", "labelPosition", "value", "selected", "disabled", "required"], outputs: ["change"], exportAs: ["matRadioGroup"] }, { kind: "component", type: i12.MatRadioButton, selector: "mat-radio-button", inputs: ["id", "name", "aria-label", "aria-labelledby", "aria-describedby", "disableRipple", "tabIndex", "checked", "value", "labelPosition", "disabled", "required", "color"], outputs: ["change"], exportAs: ["matRadioButton"] }] }); }
|
|
344
403
|
}
|
|
345
404
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.2", ngImport: i0, type: UnbPessoaPesquisarComponent, decorators: [{
|
|
346
405
|
type: Component,
|
|
347
|
-
args: [{ selector: 'lib-unb-pessoa-pesquisar', standalone: false, template: "<form #pessoaForm=\"ngForm\" class=\"pesquisa-container\" [ngStyle]=\"{'--tamanho-maximo': campoPesquisaMaxWidth}\"
|
|
406
|
+
args: [{ selector: 'lib-unb-pessoa-pesquisar', standalone: false, template: "<form #pessoaForm=\"ngForm\" class=\"pesquisa-container\" [ngStyle]=\"{'--tamanho-maximo': campoPesquisaMaxWidth}\"\r\n (ngSubmit)=\"pesquisar()\">\r\n <div class=\"mensagem-container\" style=\"width: 100%;\">\r\n <unb-mensagem [identificador]=\"idMensagemService\" class=\"mensagem-form\"></unb-mensagem>\r\n </div>\r\n\r\n <div class=\"form-wrapper\">\r\n <div *ngIf=\"mostrarTipoPessoa\" class=\"radio-container\">\r\n <mat-radio-group aria-label=\"Tipo de Pessoa\" [(ngModel)]=\"pessoa.tipoPessoa\" #tipoPessoa=\"ngModel\"\r\n name=\"tipoPessoa\" (change)=\"onTipoPessoaChange()\">\r\n <mat-radio-button *ngIf=\"pesquisarPorCPF\" value=\"{{ tipoPessoaEnum().FISICA}}\">Pessoa F\u00EDsica</mat-radio-button>\r\n <mat-radio-button *ngIf=\"pesquisarPorCNPJ\" value=\"{{tipoPessoaEnum().JURIDICA}}\"> Pessoa\r\n Jur\u00EDdica</mat-radio-button>\r\n <mat-radio-button *ngIf=\"pesquisarPorEstrangeiro\"\r\n value=\"{{tipoPessoaEnum().ESTRANGEIRA}}\">Estrangeiro</mat-radio-button>\r\n </mat-radio-group>\r\n </div>\r\n\r\n <div class=\"break\"></div>\r\n\r\n <ng-container *ngIf=\"pessoa.tipoPessoa === tipoPessoaEnum().FISICA\">\r\n <mat-form-field appearance=\"outline\">\r\n <mat-label>CPF</mat-label>\r\n <input type=\"text\" matInput [(ngModel)]=\"pessoa.cpf\" name=\"cpf\" #cpf=\"ngModel\" required={{true}}\r\n (input)=\"formatarCpf($event)\" maxlength=\"14\" placeholder=\"000.000.000-00\" />\r\n <button matSuffix mat-icon-button type=\"button\" aria-label=\"Pesquisar\" [disabled]=\"isLoading\"\r\n (click)=\"pesquisar()\">\r\n <ng-container *ngIf=\"!isLoading; else loadingIcon\">\r\n <mat-icon>search</mat-icon>\r\n </ng-container>\r\n <ng-template #loadingIcon>\r\n <mat-progress-spinner [diameter]=\"20\" mode=\"indeterminate\" color=\"primary\" class=\"spinner-button\">\r\n </mat-progress-spinner>\r\n </ng-template>\r\n </button>\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>Passaporte</mat-label>\r\n <input type=\"text\" matInput [(ngModel)]=\"pessoa.passaporte\" name=\"passaporte\" required=\"true\" />\r\n <button matSuffix mat-icon-button type=\"button\" aria-label=\"Pesquisar\" (click)=\"pesquisar()\">\r\n <ng-container *ngIf=\"!isLoading; else loadingIcon\">\r\n <mat-icon>search</mat-icon>\r\n </ng-container>\r\n <ng-template #loadingIcon>\r\n <mat-progress-spinner [diameter]=\"20\" mode=\"indeterminate\" color=\"primary\" class=\"spinner-button\">\r\n </mat-progress-spinner>\r\n </ng-template>\r\n </button>\r\n </mat-form-field>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"pessoa.tipoPessoa === tipoPessoaEnum().JURIDICA\">\r\n <mat-form-field appearance=\"outline\">\r\n <mat-label>CNPJ</mat-label>\r\n <input type=\"text\" matInput [(ngModel)]=\"pessoa.cnpj\" name=\"cnpj\" required=\"true\"\r\n (input)=\"formatarCnpj($event)\" maxlength=\"18\" placeholder=\"00.000.000/0000-00\" />\r\n <button matSuffix mat-icon-button type=\"button\" aria-label=\"Pesquisar\" (click)=\"pesquisar()\">\r\n <ng-container *ngIf=\"!isLoading; else loadingIcon\">\r\n <mat-icon>search</mat-icon>\r\n </ng-container>\r\n <ng-template #loadingIcon>\r\n <mat-progress-spinner [diameter]=\"20\" mode=\"indeterminate\" color=\"primary\" class=\"spinner-button\">\r\n </mat-progress-spinner>\r\n </ng-template>\r\n </button>\r\n </mat-form-field>\r\n </ng-container>\r\n </div>\r\n</form>", styles: [".pesquisa-container{display:flex;flex-direction:column;align-items:flex-start}.form-wrapper{display:flex;flex-direction:column;width:100%;max-width:var(--tamanho-maximo);gap:5px}.mensagem-form{display:block;width:100%}\n"] }]
|
|
348
407
|
}], ctorParameters: () => [{ type: i1.UnBPessoaService }, { type: i2.MatSnackBar }, { type: i3.UnbMensagemService }], propDecorators: { backendURL: [{
|
|
349
|
-
type: Input
|
|
408
|
+
type: Input,
|
|
409
|
+
args: [{ required: true }]
|
|
350
410
|
}], pesquisarPorCPF: [{
|
|
351
|
-
type: Input
|
|
411
|
+
type: Input,
|
|
412
|
+
args: [{ transform: booleanAttribute }]
|
|
352
413
|
}], pesquisarPorCNPJ: [{
|
|
353
|
-
type: Input
|
|
414
|
+
type: Input,
|
|
415
|
+
args: [{ transform: booleanAttribute }]
|
|
354
416
|
}], pesquisarPorEstrangeiro: [{
|
|
355
|
-
type: Input
|
|
417
|
+
type: Input,
|
|
418
|
+
args: [{ transform: booleanAttribute }]
|
|
356
419
|
}], defaultTipoPessoa: [{
|
|
357
420
|
type: Input
|
|
358
421
|
}], campoPesquisaMaxWidth: [{
|
|
359
422
|
type: Input
|
|
360
|
-
}], pessoaEmitted: [{
|
|
361
|
-
type: Output
|
|
362
|
-
}], pessoa: [{
|
|
363
|
-
type: Input
|
|
364
423
|
}], mostrarPesquisa: [{
|
|
365
|
-
type: Input
|
|
424
|
+
type: Input,
|
|
425
|
+
args: [{ transform: booleanAttribute }]
|
|
366
426
|
}], limparAposPesquisa: [{
|
|
367
|
-
type: Input
|
|
427
|
+
type: Input,
|
|
428
|
+
args: [{ transform: booleanAttribute }]
|
|
368
429
|
}], label: [{
|
|
369
430
|
type: Input
|
|
370
431
|
}], placeholder: [{
|
|
371
432
|
type: Input
|
|
372
433
|
}], hint: [{
|
|
373
434
|
type: Input
|
|
435
|
+
}], pessoa: [{
|
|
436
|
+
type: Input
|
|
437
|
+
}], pessoaEmitted: [{
|
|
438
|
+
type: Output
|
|
439
|
+
}], isLoadingChange: [{
|
|
440
|
+
type: Output
|
|
374
441
|
}] } });
|
|
375
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidW5iLXBlc3NvYS1wZXNxdWlzYXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdW5iLWxpYi1jb21wb25lbnRzL3NyYy9saWIvdW5iLXBlc3NvYS91bmItcGVzc29hLXBlc3F1aXNhci91bmItcGVzc29hLXBlc3F1aXNhci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy91bmItbGliLWNvbXBvbmVudHMvc3JjL2xpYi91bmItcGVzc29hL3VuYi1wZXNzb2EtcGVzcXVpc2FyL3VuYi1wZXNzb2EtcGVzcXVpc2FyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFL0UsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ2pELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUV2RSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFJekQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNoQyxPQUFPLEVBQXNCLG1CQUFtQixFQUFFLE1BQU0seUNBQXlDLENBQUM7Ozs7Ozs7Ozs7Ozs7O0FBUWxHLE1BQU0sT0FBTywyQkFBMkI7SUFtQnRDLFlBQW9CLGFBQStCLEVBQVUsUUFBcUIsRUFBVSxZQUFnQztRQUF4RyxrQkFBYSxHQUFiLGFBQWEsQ0FBa0I7UUFBVSxhQUFRLEdBQVIsUUFBUSxDQUFhO1FBQVUsaUJBQVksR0FBWixZQUFZLENBQW9CO1FBbEI1SCxjQUFTLEdBQUcsS0FBSyxDQUFDO1FBRWxCLHFEQUFxRDtRQUM1QyxlQUFVLEdBQVcsRUFBRSxDQUFDO1FBQ3hCLG9CQUFlLEdBQUcsSUFBSSxDQUFDO1FBQ3ZCLHFCQUFn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S0FBSztnQkFDSSxhQUFhO3NCQUF0QixNQUFNO2dCQUVFLE1BQU07c0JBQWQsS0FBSztnQkFDRyxlQUFlO3NCQUF2QixLQUFLO2dCQUNHLGtCQUFrQjtzQkFBMUIsS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE1hdFNuYWNrQmFyIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc25hY2stYmFyJztcclxuaW1wb3J0IHsgVW5iVXRpbHMgfSBmcm9tICcuLi8uLi91dGlscy91bmItdXRpbHMnO1xyXG5pbXBvcnQgeyBVbmJQZXNzb2FNb2RlbCB9IGZyb20gJy4uL3VuYi1wZXNzb2EtbW9kZWxzL3VuYi1wZXNzb2EubW9kZWwnO1xyXG5pbXBvcnQgeyBVbmJQZXNzb2FFcnJvUGFkcmFvLCBVbkJQZXNzb2FTZXJ2aWNlIH0gZnJvbSAnLi4vdW5iLXBlc3NvYS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgVGlwb1Blc3NvYUVudW0gfSBmcm9tICcuLi91bmItdGlwby1wZXNzb2EuZW51bSc7XHJcbmltcG9ydCB7IFVuYlBlc3NvYUVuZGVyZWNvVGlwbyB9IGZyb20gJy4uL3VuYi1wZXNzb2EtbW9kZWxzL3VuYi1wZXNzb2EtZW5kZXJlY28ubW9kZWwnO1xyXG5pbXBvcnQgeyBVbmJQZXNzb2FUZWxlZm9uZVRpcG8gfSBmcm9tICcuLi91bmItcGVzc29hLW1vZGVscy91bmItcGVzc29hLXRlbGVmb25lLm1vZGVsJztcclxuaW1wb3J0IHsgVW5iUGVzc29hRW1haWxUaXBvIH0gZnJvbSAnLi4vdW5iLXBlc3NvYS1tb2RlbHMvdW5iLXBlc3NvYS1lbWFpbC5tb2RlbCc7XHJcbmltcG9ydCB7IGZvcmtKb2luIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IFVuYk1lbnNhZ2VtU2VydmljZSwgVW5iVGlwb01lbnNhZ2VtRW51bSB9IGZyb20gJy4uLy4uL3VuYi1tZW5zYWdlbS91bmItbWVuc2FnZW0uc2VydmljZSc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2xpYi11bmItcGVzc29hLXBlc3F1aXNhcicsXHJcbiAgc3RhbmRhbG9uZTogZmFsc2UsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3VuYi1wZXNzb2EtcGVzcXVpc2FyLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybDogJy4vdW5iLXBlc3NvYS1wZXNxdWlzYXIuY29tcG9uZW50LmNzcydcclxufSlcclxuZXhwb3J0IGNsYXNzIFVuYlBlc3NvYVBlc3F1aXNhckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgaXNMb2FkaW5nID0gZmFsc2U7XHJcblxyXG4gIC8vIENvbmZpZ3VyYcOnw6NvIGRhIEFQSS4gRXhlbXBsbyBTR0kudW5iLmJyL3Blc3NvYS1hcGlcclxuICBASW5wdXQoKSBiYWNrZW5kVVJMOiBzdHJpbmcgPSBcIlwiO1xyXG4gIEBJbnB1dCgpIHBlc3F1aXNhclBvckNQRiA9IHRydWU7XHJcbiAgQElucHV0KCkgcGVzcXVpc2FyUG9yQ05QSiA9IHRydWU7XHJcbiAgQElucHV0KCkgcGVzcXVpc2FyUG9yRXN0cmFuZ2Vpcm8gPSB0cnVlO1xyXG4gIEBJbnB1dCgpIGRlZmF1bHRUaXBvUGVzc29hITogVGlwb1Blc3NvYUVudW07XHJcbiAgQElucHV0KCkgY2FtcG9QZXNxdWlzYU1heFdpZHRoOiBzdHJpbmcgPSAnNDAwcHgnO1xyXG4gIEBPdXRwdXQoKSBwZXNzb2FFbWl0dGVkID0gbmV3IEV2ZW50RW1pdHRlcjxVbmJQZXNzb2FNb2RlbD4oKTtcclxuXHJcbiAgQElucHV0KCkgcGVzc29hID0gbmV3IFVuYlBlc3NvYU1vZGVsKCk7XHJcbiAgQElucHV0KCkgbW9zdHJhclBlc3F1aXNhOiBib29sZWFuID0gdHJ1ZTtcclxuICBASW5wdXQoKSBsaW1wYXJBcG9zUGVzcXVpc2E6IGJvb2xlYW4gPSBmYWxzZTsgIC8vIGluZGljYSBzZSBkZXZlIGxpbXBhciBvIGNwZiBhcG9zIHBlc3F1aXNhclxyXG4gIEBJbnB1dCgpIGxhYmVsID0gXCJEaWdpdGUgbyBDUEYvQ05QSiBvdSBQYXNzYXBvcnRlXCI7IC8vIGVoIG8gcXVlIG1vc3RyYSBubyB0b3BvIGRvIGNvbXBvbmVudGVcclxuICBASW5wdXQoKSBwbGFjZWhvbGRlciA9IFwiXCI7IC8vIGVoIG8gcXVlIG1vc3RyYSBjb21vIHBsYWNlaG9sZGVyIHRvcG8gZG8gY29tcG9uZW50ZVxyXG4gIEBJbnB1dCgpIGhpbnQgPSBcIlwiOyAvLyBkaWNhIHF1ZSBhcGFyZWNlIGRlYmFpeG8gZG8gY2FtcG9cclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBwZXNzb2FTZXJ2aWNlOiBVbkJQZXNzb2FTZXJ2aWNlLCBwcml2YXRlIHNuYWNrQmFyOiBNYXRTbmFja0JhciwgcHJpdmF0ZSBhbGVydFNlcnZpY2U6IFVuYk1lbnNhZ2VtU2VydmljZSkgeyB9XHJcblxyXG4gIC8vIHVzYWRvIHByYSBzYWJlciBzZSBtb3N0cmEgb3UgbmFvIG8gYm90YW8gZGUgaW5jbHVpciBwZXNzb2FcclxuICBwZXNzb2FFbmNvbnRyYWRvOiBCb29sZWFuIHwgbnVsbCA9IGZhbHNlO1xyXG4gIG1vc3RyYXJUaXBvUGVzc29hITogYm9vbGVhbjtcclxuXHJcbiAgbGlzdGFUaXBvRW5kZXJlY286IFVuYlBlc3NvYUVuZGVyZWNvVGlwb1tdID0gW107XHJcbiAgbGlzdGFUaXBvVGVsZWZvbmU6IFVuYlBlc3NvYVRlbGVmb25lVGlwb1tdID0gW107XHJcbiAgbGlzdGFUaXBvRW1haWw6IFVuYlBlc3NvYUVtYWlsVGlwb1tdID0gW107XHJcblxyXG4gIGlkTWVuc2FnZW1TZXJ2aWNlID0gXCJVbmJQZXNzb2FQZXNxdWlzYXJcIjtcclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5iYWNrZW5kVVJMID09IFwiXCIpIHtcclxuICAgICAgdGhpcy5oYW5kbGVFcnJvclByaW50Q29uc29sZShcIltVbmJQZXNzb2FQZXNxdWlzYXJDb21wb25lbnRdIEVSUk9SOiBhcGlQZXNzb2FDb25maWcudXJsIGVzdMOhIG51bGwuIEluc2lyYSBvIHBhcsOibWV0cm8gKGFwaVBlc3NvYUNvbmZpZykgY29tIG8gdmFsb3IgdsOhbGlkbyFcIilcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5wZXNzb2FTZXJ2aWNlLnNldEJhY2tlbmRVcmwodGhpcy5iYWNrZW5kVVJMKTtcclxuICAgIH1cclxuXHJcbiAgICBmb3JrSm9pbih7XHJcbiAgICAgIHRpcG9zRW5kOiB0aGlzLnBlc3NvYVNlcnZpY2UuZ2V0VGlwb0VuZGVyZWNvKCksXHJcbiAgICAgIHRpcG9zVGVsOiB0aGlzLnBlc3NvYVNlcnZpY2UuZ2V0VGlwb1RlbGVmb25lKCksXHJcbiAgICAgIHRpcG9zRW1haWw6IHRoaXMucGVzc29hU2VydmljZS5nZXRUaXBvRW1haWwoKVxyXG4gICAgfSkuc3Vic2NyaWJlKHtcclxuICAgICAgbmV4dDogKHsgdGlwb3NFbmQsIHRpcG9zVGVsLCB0aXBvc0VtYWlsIH0pID0+IHtcclxuICAgICAgICB0aGlzLmxpc3RhVGlwb0VuZGVyZWNvID0gdGlwb3NFbmQ7XHJcbiAgICAgICAgdGhpcy5saXN0YVRpcG9UZWxlZm9uZSA9IHRpcG9zVGVsO1xyXG4gICAgICAgIHRoaXMubGlzdGFUaXBvRW1haWwgPSB0aXBvc0VtYWlsO1xyXG4gICAgICB9LFxyXG4gICAgICBlcnJvcjogKGVycikgPT4ge1xyXG4gICAgICAgIHRoaXMuaGFuZGxlRXJyb3IoXCJGYWxoYSBhbyBjYXJyZWdhciBkYWRvcyBkZSBhcG9pby4gUmVjYXJyZWd1ZSBhIHDDoWdpbmEuXCIpO1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXCJFcnJvIG5vIGZvcmtKb2luIGRvIHBlc3F1aXNhcjpcIiwgZXJyKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgLy8gQ29udGEgcXVhbnRvcyBkb3MgaW5wdXRzIGVzdMOjbyBjb21vIHRydWVcclxuICAgIGNvbnN0IG9wY29lc0F0aXZhcyA9IFt0aGlzLnBlc3F1aXNhclBvckNQRiwgdGhpcy5wZXNxdWlzYXJQb3JDTlBKLCB0aGlzLnBlc3F1aXNhclBvckVzdHJhbmdlaXJvXS5maWx0ZXIob3AgPT4gb3ApLmxlbmd0aDtcclxuICAgIC8vIEV4aWJlIGEgb3BjYW8gZG8gdGlwbyBkZSBwZXNzb2EsIHNvbWVudGUgc2UgbWFpcyBkZSB1bSBlc3RpdmVyIHNlbGVjaW9uYWRvXHJcbiAgICBpZiAob3Bjb2VzQXRpdmFzID4gMSkge1xyXG4gICAgICB0aGlzLm1vc3RyYXJUaXBvUGVzc29hID0gb3Bjb2VzQXRpdmFzID4gMTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIC8vIGVudGFvIHRlbmhvIHF1ZSBtYXJjYXIgcXVhbCBmb2kgc2VsZWNpb25hZGFcclxuICAgICAgaWYgKHRoaXMucGVzcXVpc2FyUG9yQ1BGKSB7XHJcbiAgICAgICAgdGhpcy5wZXNzb2EudGlwb1Blc3NvYSA9IFRpcG9QZXNzb2FFbnVtLkZJU0lDQTtcclxuICAgICAgfSBlbHNlIGlmICh0aGlzLnBlc3F1aXNhclBvckNOUEopIHtcclxuICAgICAgICB0aGlzLnBlc3NvYS50aXBvUGVzc29hID0gVGlwb1Blc3NvYUVudW0uSlVSSURJQ0E7XHJcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5wZXNxdWlzYXJQb3JFc3RyYW5nZWlybykge1xyXG4gICAgICAgIHRoaXMucGVzc29hLnRpcG9QZXNzb2EgPSBUaXBvUGVzc29hRW51bS5FU1RSQU5HRUlSQTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLmhhbmRsZUVycm9yUHJpbnRDb25zb2xlKFwiW1VuYlBlc3NvYVBlc3F1aXNhckNvbXBvbmVudF0gRVJST1I6IHBlc3F1aXNhclBvckNQRiwgcGVzcXVpc2FyUG9yQ05QSiBlIHBlc3F1aXNhclBvckVzdHJhbmdlaXJvIGVzdMOhIGZhbHNvLiBNYXJxdWUgcGVsbyBtZW5vcyB1bSBjb21vIHRydWVcIilcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyBzZWxlY2lvbmEgbyByYWRpbyBidXR0b24gcGFkcmFvXHJcbiAgICBpZiAodGhpcy5kZWZhdWx0VGlwb1Blc3NvYSA9PSBUaXBvUGVzc29hRW51bS5GSVNJQ0EgJiYgdGhpcy5wZXNxdWlzYXJQb3JDUEYpIHtcclxuICAgICAgdGhpcy5wZXNzb2EudGlwb1Blc3NvYSA9IHRoaXMuZGVmYXVsdFRpcG9QZXNzb2E7XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuZGVmYXVsdFRpcG9QZXNzb2EgPT0gVGlwb1Blc3NvYUVudW0uSlVSSURJQ0EgJiYgdGhpcy5wZXNxdWlzYXJQb3JDTlBKKSB7XHJcbiAgICAgIHRoaXMucGVzc29hLnRpcG9QZXNzb2EgPSB0aGlzLmRlZmF1bHRUaXBvUGVzc29hO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLmRlZmF1bHRUaXBvUGVzc29hID09IFRpcG9QZXNzb2FFbnVtLkVTVFJBTkdFSVJBICYmIHRoaXMucGVzcXVpc2FyUG9yRXN0cmFuZ2Vpcm8pIHtcclxuICAgICAgdGhpcy5wZXNzb2EudGlwb1Blc3NvYSA9IHRoaXMuZGVmYXVsdFRpcG9QZXNzb2E7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwZXNxdWlzYXIoKSB7XHJcbiAgICBpZiAodGhpcy52YWxpZGFyKCkgPT0gZmFsc2UpIHJldHVybjtcclxuICAgIHRoaXMuaXNMb2FkaW5nID0gdHJ1ZTtcclxuICAgIGxldCByZXN1bHQ7XHJcbiAgICBpZiAodGhpcy5wZXNzb2EudGlwb1Blc3NvYSA9PSBUaXBvUGVzc29hRW51bS5GSVNJQ0EpIHtcclxuICAgICAgbGV0IGNwZiA9IHRoaXMucGVzc29hLmNwZi5tYXRjaCgvXFxkL2cpPy5qb2luKFwiXCIpOyAvLyByZW1vdmUgY2FyYWN0ZXJlcyBcclxuICAgICAgcmVzdWx0ID0gdGhpcy5wZXNzb2FTZXJ2aWNlLmZpbmRCeUNwZihjcGYpO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLnBlc3NvYS50aXBvUGVzc29hID09IFRpcG9QZXNzb2FFbnVtLkpVUklESUNBKSB7XHJcbiAgICAgIGxldCBjbnBqID0gdGhpcy5wZXNzb2EuY25wai5tYXRjaCgvXFxkL2cpPy5qb2luKFwiXCIpOyAvLyByZW1vdmUgY2FyYWN0ZXJlcyBcclxuICAgICAgcmVzdWx0ID0gdGhpcy5wZXNzb2FTZXJ2aWNlLmZpbmRCeUNucGooY25waik7XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMucGVzc29hLnRpcG9QZXNzb2EgPT0gVGlwb1Blc3NvYUVudW0uRVNUUkFOR0VJUkEpIHtcclxuICAgICAgcmVzdWx0ID0gdGhpcy5wZXNzb2FTZXJ2aWNlLmZpbmRCeVBhc3NhcG9ydGUodGhpcy5wZXNzb2EucGFzc2Fwb3J0ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHJlc3VsdCkge1xyXG4gICAgICByZXN1bHQuc3Vic2NyaWJlKHtcclxuICAgICAgICBuZXh0OiB0aGlzLmhhZGxlUmVzdWx0LmJpbmQodGhpcyksXHJcbiAgICAgICAgZXJyb3I6IHRoaXMuaGFuZGxlRXJyb3IuYmluZCh0aGlzKVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgfVxyXG5cclxuICB2YWxpZGFyKCk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKHRoaXMuYmFja2VuZFVSTCA9PSBcIlwiKSB7XHJcbiAgICAgIHRoaXMuaGFuZGxlRXJyb3JQcmludENvbnNvbGUoXCJbVW5iUGVzc29hUGVzcXVpc2FyQ29tcG9uZW50XSBFUlJPUjogYmFja2VuZFVSTC51cmwgZXN0w6EgbnVsbC4gSW5zaXJhIG8gcGFyw6JtZXRybyAoYmFja2VuZFVSTCkgY29tIG8gdmFsb3IgZGEgVVJMIGRvIHNldSBCYWNrZW5kIVwiKVxyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMucGVzc29hLnRpcG9QZXNzb2EgPT0gVGlwb1Blc3NvYUVudW0uRklTSUNBKSB7XHJcbiAgICAgIGlmICh0aGlzLnBlc3NvYS5jcGYgPT0gbnVsbCB8fCAodGhpcy5wZXNzb2EuY3BmICE9IG51bGwgJiYgdGhpcy5wZXNzb2EuY3BmID09IFwiXCIpKSB7XHJcbiAgICAgICAgdGhpcy5oYW5kbGVFcnJvcihcIkNQRiDDqSB1bSBjYW1wbyBvYnJpZ2F0w7NyaW8uXCIpXHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICB9IGVsc2UgaWYgKCFVbmJVdGlscy52YWxpZGFyQ1BGKHRoaXMucGVzc29hLmNwZikpIHtcclxuICAgICAgICB0aGlzLmhhbmRsZUVycm9yKFwiRGlnaXRlIHVtIHZhbG9yIHbDoWxpZG8gcGFyYSBvIENQRlwiKVxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIGlmICh0aGlzLnBlc3NvYS50aXBvUGVzc29hID09IFRpcG9QZXNzb2FFbnVtLkpVUklESUNBKSB7XHJcbiAgICAgIGlmICh0aGlzLnBlc3NvYS5jbnBqID09IG51bGwgfHwgKHRoaXMucGVzc29hLmNucGogIT0gbnVsbCAmJiB0aGlzLnBlc3NvYS5jbnBqID09IFwiXCIpKSB7XHJcbiAgICAgICAgdGhpcy5oYW5kbGVFcnJvcihcIkNOUEogw6kgdW0gY2FtcG8gb2JyaWdhdMOzcmlvXCIpXHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICB9IGVsc2UgaWYgKCFVbmJVdGlscy52YWxpZGFyQ05QSih0aGlzLnBlc3NvYS5jbnBqKSkge1xyXG4gICAgICAgIHRoaXMuaGFuZGxlRXJyb3IoXCJEaWdpdGUgdW0gdmFsb3IgdsOhbGlkbyBwYXJhIG8gQ05QSiFcIilcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSBpZiAodGhpcy5wZXNzb2EudGlwb1Blc3NvYSA9PSBUaXBvUGVzc29hRW51bS5FU1RSQU5HRUlSQSkge1xyXG4gICAgICBpZiAodGhpcy5wZXNzb2EucGFzc2Fwb3J0ZSA9PSBudWxsIHx8ICh0aGlzLnBlc3NvYS5wYXNzYXBvcnRlICE9IG51bGwgJiYgdGhpcy5wZXNzb2EucGFzc2Fwb3J0ZSA9PSBcIlwiKSkge1xyXG4gICAgICAgIHRoaXMuaGFuZGxlRXJyb3IoXCJQYXNzYXBvcnRlIMOpIHVtIGNhbXBvIG9icmlnYXTDs3Jpb1wiKVxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5oYW5kbGVFcnJvcihcIlNlbGVjaW9uZSB1bSB0aXBvIGRlIHBlc3NvYSFcIilcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH1cclxuXHJcbiAgLy8gRW0gdW5iLXBlc3NvYS1wZXNxdWlzYXIuY29tcG9uZW50LnRzXHJcbiAgaGFkbGVSZXN1bHQocmVzdWx0YWRvOiBVbmJQZXNzb2FNb2RlbCkge1xyXG4gICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcclxuXHJcbiAgICBpZiAocmVzdWx0YWRvKSB7XHJcbiAgICAgIHJlc3VsdGFkby50aXBvUGVzc29hID0gdGhpcy5wZXNzb2EudGlwb1Blc3NvYTsgLy8gbyBiYWNrZW5kIG5hbyByZXRvcm5hIG8gdGlwbyBwZXNzb2EuIGVudGFvIHRlbmhvIHF1ZSBhdHJpYnVpciBhbnRlc1xyXG4gICAgICB0aGlzLnBlc3NvYSA9IHJlc3VsdGFkbztcclxuXHJcbiAgICAgIC8vIC0tLSBTRcOHw4NPIERFIExJTVBFWkEgREUgREFET1MgUFJJTkNJUEFJUyAoVk9Dw4ogSsOBIFRJTkhBKSAtLS1cclxuICAgICAgaWYgKHRoaXMucGVzc29hLnNleG8pIHtcclxuICAgICAgICBpZiAodGhpcy5wZXNzb2Euc2V4by50b1VwcGVyQ2FzZSgpLnRyaW0oKSA9PT0gJ0ZFTUlOSU5PJykge1xyXG4gICAgICAgICAgdGhpcy5wZXNzb2EuY29kaWdvU2V4byA9IDI7XHJcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLnBlc3NvYS5zZXhvLnRvVXBwZXJDYXNlKCkudHJpbSgpID09PSAnTUFTQ1VMSU5PJykge1xyXG4gICAgICAgICAgdGhpcy5wZXNzb2EuY29kaWdvU2V4byA9IDE7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAodGhpcy5wZXNzb2EuZGF0YU5hc2NpbWVudG8pIHtcclxuICAgICAgICB0aGlzLnBlc3NvYS5kYXRhTmFzY2ltZW50byA9IHRoaXMucGFyc2VEYXRhKHRoaXMucGVzc29hLmRhdGFOYXNjaW1lbnRvKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKHRoaXMucGVzc29hLmVzdGFkb0NpdmlsKSB7XHJcbiAgICAgICAgdGhpcy5wZXNzb2EuY29kaWdvRXN0YWRvQ2l2aWwgPSB0aGlzLnBhcnNlQ29kaWdvKHRoaXMucGVzc29hLmVzdGFkb0NpdmlsKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKHRoaXMucGVzc29hLnBhaXNOYXNjaW1lbnRvKSB7XHJcbiAgICAgICAgdGhpcy5wZXNzb2EuY29kaWdvUGFpc05hc2NpbWVudG8gPSB0aGlzLnBhcnNlQ29kaWdvKHRoaXMucGVzc29hLnBhaXNOYXNjaW1lbnRvKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKHRoaXMucGVzc29hLmVzY29sYXJpZGFkZSkge1xyXG4gICAgICAgIHRoaXMucGVzc29hLmVzY29sYXJpZGFkZSA9IHRoaXMucGFyc2VDb2RpZ28odGhpcy5wZXNzb2EuZXNjb2xhcmlkYWRlKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gMS4gUHJvY2Vzc2EgRW5kZXJlw6dvc1xyXG4gICAgICAvLyBPIHBheWxvYWQgJ3NhbHZhcicgZXNwZXJhOiBvcmRlbUVuZGVyZWNvLCB0aXBvRW5kZXJlY29Db2RpZ28sIHBhaXNFbmRlcmVjb0NvZGlnbywgdWZFbmRlcmVjb1xyXG4gICAgICAvLyAxLiBQcm9jZXNzYSBFbmRlcmXDp29zXHJcbiAgICAgIGlmICh0aGlzLnBlc3NvYS5lbmRlcmVjb3MgJiYgdGhpcy5saXN0YVRpcG9FbmRlcmVjby5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgLy8gLS0tIENPUlJFw4fDg086IEFkaWNpb25hZG8gJ2knIGFvIGZvckVhY2ggLS0tXHJcbiAgICAgICAgdGhpcy5wZXNzb2EuZW5kZXJlY29zLmZvckVhY2goKGVuZCwgaSkgPT4ge1xyXG4gICAgICAgICAgLy8gVHJhZHV6IG8gJ3RpcG8nIChzdHJpbmcpIHBhcmEgJ3RpcG9FbmRlcmVjb0NvZGlnbycgKG51bWJlcilcclxuICAgICAgICAgIGlmICghZW5kLnRpcG9FbmRlcmVjb0NvZGlnbyAmJiBlbmQudGlwbykge1xyXG4gICAgICAgICAgICBjb25zdCB0aXBvRW5jb250cmFkbyA9IHRoaXMubGlzdGFUaXBvRW5kZXJlY28uZmluZCh0ID0+IHQuZGVub21pbmFjYW8/LnRvTG93ZXJDYXNlKCkgPT09IGVuZC50aXBvPy50b0xvd2VyQ2FzZSgpKTtcclxuICAgICAgICAgICAgaWYgKHRpcG9FbmNvbnRyYWRvKSBlbmQudGlwb0VuZGVyZWNvQ29kaWdvID0gdGlwb0VuY29udHJhZG8uY29kaWdvO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgLy8gVHJhZHV6ICdwYWlzJyAoc3RyaW5nICcyMiAtIEJSQVNJTCcpIHBhcmEgJ3BhaXNFbmRlcmVjb0NvZGlnbycgKG51bWJlcilcclxuICAgICAgICAgIGlmICghZW5kLnBhaXNFbmRlcmVjb0NvZGlnbyAmJiBlbmQucGFpcykge1xyXG4gICAgICAgICAgICBlbmQucGFpc0VuZGVyZWNvQ29kaWdvID0gdGhpcy5wYXJzZUNvZGlnbyhlbmQucGFpcyk7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgLy8gTWFwZWlhICdvcmRlbScgLT4gJ29yZGVtRW5kZXJlY28nIG91IHVzYSBvIMOtbmRpY2UgKGkgKyAxKVxyXG4gICAgICAgICAgLy8gTyBwYXlsb2FkIGRlIHNhbHZhciAobm8gZm9ybSkgZXNwZXJhICdvcmRlbUVuZGVyZWNvJ1xyXG4gICAgICAgICAgZW5kLm9yZGVtRW5kZXJlY28gPSBlbmQub3JkZW1FbmRlcmVjbyB8fCBlbmQub3JkZW0gfHwgKGkgKyAxKTtcclxuXHJcbiAgICAgICAgICAvLyBNYXBlaWEgJ3VmJyAtPiAndWZFbmRlcmVjbydcclxuICAgICAgICAgIGlmICghZW5kLnVmRW5kZXJlY28gJiYgZW5kLnVmKSB7XHJcbiAgICAgICAgICAgIGVuZC51ZkVuZGVyZWNvID0gZW5kLnVmO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyAyLiBQcm9jZXNzYSBUZWxlZm9uZXNcclxuICAgICAgaWYgKHRoaXMucGVzc29hLnRlbGVmb25lcyAmJiB0aGlzLmxpc3RhVGlwb1RlbGVmb25lLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAvLyAtLS0gQ09SUkXDh8ODTzogQWRpY2lvbmFkbyAnaScgYW8gZm9yRWFjaCAtLS1cclxuICAgICAgICB0aGlzLnBlc3NvYS50ZWxlZm9uZXMuZm9yRWFjaCgodGVsLCBpKSA9PiB7XHJcbiAgICAgICAgICBpZiAoIXRlbC50aXBvVGVsZWZvbmVDb2RpZ28gJiYgdGVsLnRpcG8pIHtcclxuICAgICAgICAgICAgY29uc3QgdGlwb0VuY29udHJhZG8gPSB0aGlzLmxpc3RhVGlwb1RlbGVmb25lLmZpbmQodCA9PiB0LmRlbm9taW5hY2FvPy50b0xvd2VyQ2FzZSgpID09PSB0ZWwudGlwbz8udG9Mb3dlckNhc2UoKSk7XHJcbiAgICAgICAgICAgIGlmICh0aXBvRW5jb250cmFkbykgdGVsLnRpcG9UZWxlZm9uZUNvZGlnbyA9IHRpcG9FbmNvbnRyYWRvLmNvZGlnbztcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAvLyAtLS0gQ09SUkXDh8ODTzogTMOzZ2ljYSBkYSBPcmRlbSAtLS1cclxuICAgICAgICAgIC8vIE8gcGF5bG9hZCBkZSBzYWx2YXIgKG5vIGZvcm0pIGzDqiAndGVsLm9yZGVtJ1xyXG4gICAgICAgICAgdGVsLm9yZGVtID0gdGVsLm9yZGVtIHx8IChpICsgMSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIDMuIFByb2Nlc3NhIEVtYWlsc1xyXG4gICAgICBpZiAodGhpcy5wZXNzb2EuZW1haWxzICYmIHRoaXMubGlzdGFUaXBvRW1haWwubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIC8vIC0tLSBDT1JSRcOHw4NPOiBBZGljaW9uYWRvICdpJyBhbyBmb3JFYWNoIC0tLVxyXG4gICAgICAgIHRoaXMucGVzc29hLmVtYWlscy5mb3JFYWNoKChlbWFpbCwgaSkgPT4ge1xyXG4gICAgICAgICAgaWYgKCFlbWFpbC50aXBvRW1haWxDb2RpZ28gJiYgZW1haWwudGlwbykge1xyXG4gICAgICAgICAgICBjb25zdCB0aXBvRW5jb250cmFkbyA9IHRoaXMubGlzdGFUaXBvRW1haWwuZmluZCh0ID0+IHQuZGVub21pbmFjYW8/LnRvTG93ZXJDYXNlKCkgPT09IGVtYWlsLnRpcG8/LnRvTG93ZXJDYXNlKCkpO1xyXG4gICAgICAgICAgICBpZiAodGlwb0VuY29udHJhZG8pIGVtYWlsLnRpcG9FbWFpbENvZGlnbyA9IHRpcG9FbmNvbnRyYWRvLmNvZGlnbztcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAvLyAtLS0gQ09SUkXDh8ODTzogTMOzZ2ljYSBkYSBPcmRlbSAtLS1cclxuICAgICAgICAgIC8vIE8gcGF5bG9hZCBkZSBzYWx2YXIgKG5vIGZvcm0pIGzDqiAnZW1haWwub3JkZW0nXHJcbiAgICAgICAgICBlbWFpbC5vcmRlbSA9IGVtYWlsLm9yZGVtIHx8IChpICsgMSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICh0aGlzLnBlc3NvYS50aXBvUGVzc29hID09IFRpcG9QZXNzb2FFbnVtLkZJU0lDQSkge1xyXG4gICAgICAgIHRoaXMucGVzc29hLmNwZiA9IFVuYlV0aWxzLmZvcm1hdGFDcGYocmVzdWx0YWRvLmNwZik7XHJcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5wZXNzb2EudGlwb1Blc3NvYSA9PSBUaXBvUGVzc29hRW51bS5KVVJJRElDQSkge1xyXG4gICAgICAgIHRoaXMucGVzc29hLmNucGogPSBVbmJVdGlscy5mb3JtYXRhQ25waihyZXN1bHRhZG8uY25waik7XHJcbiAgICAgIH1cclxuXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAvLyBzZSBjaGVnYXIgYWtpIGVoIHBxIG5hbyBlbmNvbnRyb3UuLi4gKGzDs2dpY2EgcXVlIGrDoSBleGlzdGUpXHJcbiAgICAgIGxldCBub3ZhUGVzc29hID0gbmV3IFVuYlBlc3NvYU1vZGVsKCk7XHJcbiAgICAgIG5vdmFQZXNzb2EudGlwb1Blc3NvYSA9IHRoaXMucGVzc29hLnRpcG9QZXNzb2E7XHJcbiAgICAgIGlmICh0aGlzLnBlc3NvYS50aXBvUGVzc29hID09IFRpcG9QZXNzb2FFbnVtLkZJU0lDQSkge1xyXG4gICAgICAgIG5vdmFQZXNzb2EuY3BmID0gdGhpcy5wZXNzb2EuY3BmO1xyXG4gICAgICB9IGVsc2UgaWYgKHRoaXMucGVzc29hLnRpcG9QZXNzb2EgPT0gVGlwb1Blc3NvYUVudW0uSlVSSURJQ0EpIHtcclxuICAgICAgICBub3ZhUGVzc29hLmNucGogPSB0aGlzLnBlc3NvYS5jbnBqO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIG5vdmFQZXNzb2EucGFzc2Fwb3J0ZSA9IHRoaXMucGVzc29hLnBhc3NhcG9ydGU7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMucGVzc29hID0gbm92YVBlc3NvYTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnBlc3NvYUVtaXR0ZWQuZW1pdCh0aGlzLnBlc3NvYSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHBhcnNlQ29kaWdvKHZhbG9yU3RyaW5nOiBhbnkpOiBudW1iZXIgfCBudWxsIHtcclxuICAgIGlmICh0eXBlb2YgdmFsb3JTdHJpbmcgPT09ICdudW1iZXInKSB7XHJcbiAgICAgIHJldHVybiB2YWxvclN0cmluZzsgLy8gSsOhIMOpIHVtIG7Dum1lcm9cclxuICAgIH1cclxuICAgIGlmICh0eXBlb2YgdmFsb3JTdHJpbmcgIT09ICdzdHJpbmcnIHx8ICF2YWxvclN0cmluZy5pbmNsdWRlcygnIC0gJykpIHtcclxuICAgICAgLy8gVGVudGEgY29udmVydGVyIGRpcmV0bywgY2FzbyBvIGJhY2tlbmQgbWFuZGUgc8OzIG8gbsO6bWVybyBjb21vIHN0cmluZ1xyXG4gICAgICBjb25zdCBudW0gPSBwYXJzZUludCh2YWxvclN0cmluZywgMTApO1xyXG4gICAgICByZXR1cm4gaXNOYU4obnVtKSA/IG51bGwgOiBudW07XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgcGFydGVzID0gdmFsb3JTdHJpbmcuc3BsaXQoJyAtICcpO1xyXG4gICAgY29uc3QgY29kaWdvID0gcGFyc2VJbnQocGFydGVzWzBdLnRyaW0oKSwgMTApO1xyXG4gICAgcmV0dXJuIGlzTmFOKGNvZGlnbykgPyBudWxsIDogY29kaWdvO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ29udmVydGUgdW1hIHN0cmluZyBubyBmb3JtYXRvICdkZC9NTS95eXl5JyBwYXJhIHVtIG9iamV0byBEYXRlLlxyXG4gICAqIFJldG9ybmEgbnVsbCBzZSBvIGZvcm1hdG8gZm9yIGludsOhbGlkby5cclxuICAgKi9cclxuICBwcml2YXRlIHBhcnNlRGF0YShkYXRhU3RyaW5nOiBhbnkpOiBEYXRlIHwgbnVsbCB7XHJcbiAgICBpZiAoZGF0YVN0cmluZyBpbnN0YW5jZW9mIERhdGUpIHtcclxuICAgICAgcmV0dXJuIGRhdGFTdHJpbmc7IC8vIErDoSDDqSB1bSBvYmpldG8gRGF0ZVxyXG4gICAgfVxyXG4gICAgaWYgKHR5cGVvZiBkYXRhU3RyaW5nICE9PSAnc3RyaW5nJyB8fCAhZGF0YVN0cmluZy5pbmNsdWRlcygnLycpKSB7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHBhcnRlcyA9IGRhdGFTdHJpbmcuc3BsaXQoJy8nKTsgLy8gW2RkLCBNTSwgeXl5eV1cclxuICAgIGlmIChwYXJ0ZXMubGVuZ3RoID09PSAzKSB7XHJcbiAgICAgIGNvbnN0IGRpYSA9IHBhcnNlSW50KHBhcnRlc1swXSwgMTApO1xyXG4gICAgICBjb25zdCBtZXMgPSBwYXJzZUludChwYXJ0ZXNbMV0sIDEwKSAtIDE7IC8vIE3DqnMgbm8gSlMgw6kgMC1pbmRleGFkb1xyXG4gICAgICBjb25zdCBhbm8gPSBwYXJzZUludChwYXJ0ZXNbMl0sIDEwKTtcclxuXHJcbiAgICAgIC8vIFZlcmlmaWNhIHNlIGEgZGF0YSDDqSB2w6FsaWRhXHJcbiAgICAgIGNvbnN0IGRhdGFPYmogPSBuZXcgRGF0ZShhbm8sIG1lcywgZGlhKTtcclxuICAgICAgaWYgKGRhdGFPYmouZ2V0RnVsbFllYXIoKSA9PT0gYW5vICYmIGRhdGFPYmouZ2V0TW9udGgoKSA9PT0gbWVzICYmIGRhdGFPYmouZ2V0RGF0ZSgpID09PSBkaWEpIHtcclxuICAgICAgICByZXR1cm4gZGF0YU9iajtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIG51bGw7IC8vIEZvcm1hdG8gaW52w6FsaWRvXHJcbiAgfVxyXG5cclxuaGFuZGxlRXJyb3IoZXJybzogVW5iUGVzc29hRXJyb1BhZHJhbyB8IHN0cmluZykge1xyXG4gICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcclxuICAgIHRoaXMucGVzc29hRW5jb250cmFkbyA9IGZhbHNlO1xyXG5cclxuICAgIGxldCBlcnJvVHJhdGFkbzogVW5iUGVzc29hRXJyb1BhZHJhbztcclxuXHJcbiAgICAvLyAtLS0gQURBUFRFUjogQ29udmVydGUgc3RyaW5nIHBhcmEgbyBPYmpldG8gUGFkcsOjbyAtLS1cclxuICAgIGlmICh0eXBlb2YgZXJybyA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgZXJyb1RyYXRhZG8gPSB7XHJcbiAgICAgICAgc3RhdHVzOiA0MDAsIC8vIEVycm8gZGUgdmFsaWRhw6fDo28gbG9jYWwgZ2VyYWxtZW50ZSDDqSA0MDBcclxuICAgICAgICBtZW5zYWdlbVNpbXBsZXM6IGVycm8sXHJcbiAgICAgICAgbWVuc2FnZW1IdG1sOiBgPHN0cm9uZz4ke2Vycm99PC9zdHJvbmc+YFxyXG4gICAgICB9O1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLy8gU2UgasOhIHZlaW8gZG8gU2VydmljZSAob3Ugw6kgdW0gb2JqZXRvIG1hbnVhbCksIHVzYSBkaXJldG9cclxuICAgICAgZXJyb1RyYXRhZG8gPSBlcnJvO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLSBMw5NHSUNBIERFIEVYSUJJw4fDg08gLS0tXHJcblxyXG4gICAgLy8gMS4gU25hY2tCYXIgKE1lbnNhZ2VtIGN1cnRhKVxyXG4gICAgaWYgKGVycm9UcmF0YWRvLm1lbnNhZ2VtU2ltcGxlcykge1xyXG4gICAgICB0aGlzLm9wZW5TbmFja0JhcihlcnJvVHJhdGFkby5tZW5zYWdlbVNpbXBsZXMpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIDIuIENvbXBvbmVudGUgZGUgTWVuc2FnZW0gKE1lbnNhZ2VtIEhUTUwpXHJcbiAgICBpZiAodGhpcy5hbGVydFNlcnZpY2UgJiYgZXJyb1RyYXRhZG8ubWVuc2FnZW1IdG1sKSB7XHJcbiAgICAgIC8vIFNlIHZvY8OqIHRpdmVyIGEgdmFyacOhdmVsIGlkTWVuc2FnZW1TZXJ2aWNlIGRlZmluaWRhIG5hIGNsYXNzZTpcclxuICAgICAgdGhpcy5hbGVydFNlcnZpY2Uuc2hvd01lc3NhZ2UoZXJyb1RyYXRhZG8ubWVuc2FnZW1IdG1sLCBVbmJUaXBvTWVuc2FnZW1FbnVtLkRBTkdFUiwgdGhpcy5pZE1lbnNhZ2VtU2VydmljZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBoYW5kbGVFcnJvclByaW50Q29uc29sZShlcnJvOiBhbnkpIHtcclxuICAgIGNvbnNvbGUubG9nKGVycm8pO1xyXG4gICAgdGhpcy5oYW5kbGVFcnJvcihlcnJvKTtcclxuICB9XHJcblxyXG4gIG9wZW5TbmFja0JhcihtZXNzYWdlOiBzdHJpbmcpIHtcclxuICAgIHRoaXMuc25hY2tCYXIub3BlbihtZXNzYWdlLCAneCcsIHtcclxuICAgICAgZHVyYXRpb246IDUwMDAsXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHRpcG9QZXNzb2FFbnVtKCkge1xyXG4gICAgcmV0dXJuIFRpcG9QZXNzb2FFbnVtO1xyXG4gIH1cclxufVxyXG4iLCI8Zm9ybSAjcGVzc29hRm9ybT1cIm5nRm9ybVwiIGNsYXNzPVwicGVzcXVpc2EtY29udGFpbmVyXCIgW25nU3R5bGVdPVwieyctLXRhbWFuaG8tbWF4aW1vJzogY2FtcG9QZXNxdWlzYU1heFdpZHRofVwiIChuZ1N1Ym1pdCk9XCJwZXNxdWlzYXIoKVwiPlxyXG4gIDxkaXYgY2xhc3M9XCJtZW5zYWdlbS1jb250YWluZXJcIiBzdHlsZT1cIndpZHRoOiAxMDAlO1wiPlxyXG4gICAgPHVuYi1tZW5zYWdlbSBbaWRlbnRpZmljYWRvcl09XCJpZE1lbnNhZ2VtU2VydmljZVwiIGNsYXNzPVwibWVuc2FnZW0tZm9ybVwiID48L3VuYi1tZW5zYWdlbT5cclxuICA8L2Rpdj5cclxuICBcclxuICA8ZGl2IGNsYXNzPVwiZm9ybS13cmFwcGVyXCI+XHJcbiAgICAgIDxkaXYgKm5nSWY9XCJtb3N0cmFyVGlwb1Blc3NvYVwiIGNsYXNzPVwicmFkaW8tY29udGFpbmVyXCI+XHJcbiAgICAgICAgICA8bWF0LXJhZGlvLWdyb3VwIGFyaWEtbGFiZWw9XCJUaXBvIGRlIFBlc3NvYVwiIFsobmdNb2RlbCldPVwicGVzc29hLnRpcG9QZXNzb2FcIiAjdGlwb1Blc3NvYT1cIm5nTW9kZWxcIiBuYW1lPVwidGlwb1Blc3NvYVwiPlxyXG4gICAgICAgICAgICAgIDxtYXQtcmFkaW8tYnV0dG9uICpuZ0lmPVwicGVzcXVpc2FyUG9yQ1BGXCIgICAgICAgICAgICB2YWx1ZT1cInt7IHRpcG9QZXNzb2FFbnVtKCkuRklTSUNBfX1cIj5QZXNzb2EgRsOtc2ljYTwvbWF0LXJhZGlvLWJ1dHRvbj5cclxuICAgICAgICAgICAgICA8bWF0LXJhZGlvLWJ1dHRvbiAqbmdJZj1cInBlc3F1aXNhclBvckNOUEpcIiAgICAgICAgICAgdmFsdWU9XCJ7e3RpcG9QZXNzb2FFbnVtKCkuSlVSSURJQ0F9fVwiPiBQZXNzb2EgSnVyw61kaWNhPC9tYXQtcmFkaW8tYnV0dG9uPlxyXG4gICAgICAgICAgICAgIDxtYXQtcmFkaW8tYnV0dG9uICpuZ0lmPVwicGVzcXVpc2FyUG9yRXN0cmFuZ2Vpcm9cIiAgICB2YWx1ZT1cInt7dGlwb1Blc3NvYUVudW0oKS5FU1RSQU5HRUlSQX19XCI+RXN0cmFuZ2Vpcm88L21hdC1yYWRpby1idXR0b24+XHJcbiAgICAgICAgICA8L21hdC1yYWRpby1ncm91cD5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgICA8ZGl2IGNsYXNzPVwiYnJlYWtcIj48L2Rpdj5cclxuICAgICAgXHJcbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJwZXNzb2EudGlwb1Blc3NvYSA9PT0gdGlwb1Blc3NvYUVudW0oKS5GSVNJQ0FcIj5cclxuICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT1cIm91dGxpbmVcIj5cclxuICAgICAgICAgIDxtYXQtbGFiZWw+Q1BGPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBtYXRJbnB1dCBbKG5nTW9kZWwpXT1cInBlc3NvYS5jcGZcIiBuYW1lPVwiY3BmXCIgI2NwZj1cIm5nTW9kZWxcIiByZXF1aXJlZD17e3RydWV9fS8+ICAgICAgICBcclxuICAgICAgICAgIDxidXR0b24gbWF0U3VmZml4IG1hdC1pY29uLWJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgYXJpYS1sYWJlbD1cIlBlc3F1aXNhclwiIFtkaXNhYmxlZF09XCJpc0xvYWRpbmdcIiAoY2xpY2spPVwicGVzcXVpc2FyKClcIj5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFpc0xvYWRpbmc7IGVsc2UgbG9hZGluZ0ljb25cIj5cclxuICAgICAgICAgICAgICA8bWF0LWljb24+c2VhcmNoPC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjbG9hZGluZ0ljb24+XHJcbiAgICAgICAgICAgICAgPG1hdC1wcm9ncmVzcy1zcGlubmVyXHJcbiAgICAgICAgICAgICAgICBbZGlhbWV0ZXJdPVwiMjBcIlxyXG4gICAgICAgICAgICAgICAgbW9kZT1cImluZGV0ZXJtaW5hdGVcIlxyXG4gICAgICAgICAgICAgICAgY29sb3I9XCJwcmltYXJ5XCJcclxuICAgICAgICAgICAgICAgIGNsYXNzPVwic3Bpbm5lci1idXR0b25cIj5cclxuICAgICAgICAgICAgICA8L21hdC1wcm9ncmVzcy1zcGlubmVyPlxyXG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwicGVzc29hLnRpcG9QZXNzb2EgPT09IHRpcG9QZXNzb2FFbnVtKCkuRVNUUkFOR0VJUkFcIj5cclxuICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT1cIm91dGxpbmVcIj5cclxuICAgICAgICAgIDxtYXQtbGFiZWw+UGFzc2Fwb3J0ZTwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgbWF0SW5wdXQgWyhuZ01vZGVsKV09XCJwZXNzb2EucGFzc2Fwb3J0ZVwiIG5hbWU9XCJwYXNzYXBvcnRlXCIgcmVxdWlyZWQ9XCJ0cnVlXCIgLz5cclxuICAgICAgICAgIDxidXR0b24gbWF0U3VmZml4IG1hdC1pY29uLWJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgYXJpYS1sYWJlbD1cIlBlc3F1aXNhclwiIChjbGljayk9XCJwZXNxdWlzYXIoKVwiPlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWlzTG9hZGluZzsgZWxzZSBsb2FkaW5nSWNvblwiPlxyXG4gICAgICAgICAgICAgIDxtYXQtaWNvbj5zZWFyY2g8L21hdC1pY29uPlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNsb2FkaW5nSWNvbj5cclxuICAgICAgICAgICAgICA8bWF0LXByb2dyZXNzLXNwaW5uZXJcclxuICAgICAgICAgICAgICAgIFtkaWFtZXRlcl09XCIyMFwiXHJcbiAgICAgICAgICAgICAgICBtb2RlPVwiaW5kZXRlcm1pbmF0ZVwiXHJcbiAgICAgICAgICAgICAgICBjb2xvcj1cInByaW1hcnlcIlxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJzcGlubmVyLWJ1dHRvblwiPlxyXG4gICAgICAgICAgICAgIDwvbWF0LXByb2dyZXNzLXNwaW5uZXI+XHJcbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInBlc3NvYS50aXBvUGVzc29hID09PSB0aXBvUGVzc29hRW51bSgpLkpVUklESUNBXCI+XHJcbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCI+XHJcbiAgICAgICAgICA8bWF0LWxhYmVsPkNOUEo8L21hdC1sYWJlbD5cclxuICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIG1hdElucHV0IFsobmdNb2RlbCldPVwicGVzc29hLmNucGpcIiBuYW1lPVwiY25walwiIHJlcXVpcmVkPVwidHJ1ZVwiIC8+XHJcbiAgICAgICAgICA8YnV0dG9uIG1hdFN1ZmZpeCBtYXQtaWNvbi1idXR0b24gdHlwZT1cImJ1dHRvblwiIGFyaWEtbGFiZWw9XCJQZXNxdWlzYXJcIiAoY2xpY2spPVwicGVzcXVpc2FyKClcIj5cclxuICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhaXNMb2FkaW5nOyBlbHNlIGxvYWRpbmdJY29uXCI+XHJcbiAgICAgICAgICAgICAgPG1hdC1pY29uPnNlYXJjaDwvbWF0LWljb24+XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgI2xvYWRpbmdJY29uPlxyXG4gICAgICAgICAgICAgIDxtYXQtcHJvZ3Jlc3Mtc3Bpbm5lclxyXG4gICAgICAgICAgICAgICAgW2RpYW1ldGVyXT1cIjIwXCJcclxuICAgICAgICAgICAgICAgIG1vZGU9XCJpbmRldGVybWluYXRlXCJcclxuICAgICAgICAgICAgICAgIGNvbG9yPVwicHJpbWFyeVwiXHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cInNwaW5uZXItYnV0dG9uXCI+XHJcbiAgICAgICAgICAgICAgPC9tYXQtcHJvZ3Jlc3Mtc3Bpbm5lcj5cclxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICA8L2Rpdj5cclxuPC9mb3JtPiJdfQ==
|
|
442
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidW5iLXBlc3NvYS1wZXNxdWlzYXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdW5iLWxpYi1jb21wb25lbnRzL3NyYy9saWIvdW5iLXBlc3NvYS91bmItcGVzc29hLXBlc3F1aXNhci91bmItcGVzc29hLXBlc3F1aXNhci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy91bmItbGliLWNvbXBvbmVudHMvc3JjL2xpYi91bmItcGVzc29hL3VuYi1wZXNzb2EtcGVzcXVpc2FyL3VuYi1wZXNzb2EtcGVzcXVpc2FyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBcUIsTUFBTSxFQUFpQixNQUFNLGVBQWUsQ0FBQztBQUUzSCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ2hDLE9BQU8sRUFBc0IsbUJBQW1CLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUNsRyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFJakQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBRXZFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDOzs7Ozs7Ozs7Ozs7OztBQVE1RCxNQUFNLE9BQU8sMkJBQTJCO0lBMkJ0QyxZQUFvQixhQUErQixFQUFVLFFBQXFCLEVBQVUsWUFBZ0M7UUFBeEcsa0JBQWEsR0FBYixhQUFhLENBQWtCO1FBQVUsYUFBUSxHQUFSLFFBQVEsQ0FBYTtRQUFVLGlCQUFZLEdBQVosWUFBWSxDQUFvQjtRQTFCNUgsY0FBUyxHQUFHLEtBQUssQ0FBQztRQUVsQixxREFBcUQ7UUFDMUIsZUFBVSxHQUFXLEVBQUUsQ0FBQztRQUVuRCxzRUFBc0U7UUFDOUIsb0JB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aEIsZ0JBQWdCLG1KQUtoQixnQkFBZ0Isb0VBQ2hCLGdCQUFnQiwwTENqQ3RDLDZ5SEF1RU87OzJGRHJETSwyQkFBMkI7a0JBTnZDLFNBQVM7K0JBQ0UsMEJBQTBCLGNBQ3hCLEtBQUs7Z0pBUVUsVUFBVTtzQkFBcEMsS0FBSzt1QkFBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUU7Z0JBR2UsZUFBZTtzQkFBdEQsS0FBSzt1QkFBQyxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRTtnQkFDRSxnQkFBZ0I7c0JBQXZELEtBQUs7dUJBQUMsRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUU7Z0JBQ0UsdUJBQXVCO3NCQUE5RCxLQUFLO3VCQUFDLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFO2dCQUc3QixpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBQ0cscUJBQXFCO3NCQUE3QixLQUFLO2dCQUNrQyxlQUFlO3NCQUF0RCxLQUFLO3VCQUFDLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFO2dCQUNFLGtCQUFrQjtzQkFBekQsS0FBSzt1QkFBQyxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRTtnQkFHN0IsS0FBSztzQkFBYixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUdHLE1BQU07c0JBQWQsS0FBSztnQkFDSSxhQUFhO3NCQUF0QixNQUFNO2dCQUNHLGVBQWU7c0JBQXhCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBib29sZWFuQXR0cmlidXRlLCBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uQ2hhbmdlcywgT25Jbml0LCBPdXRwdXQsIFNpbXBsZUNoYW5nZXMgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgTWF0U25hY2tCYXIgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zbmFjay1iYXInO1xyXG5pbXBvcnQgeyBmb3JrSm9pbiB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBVbmJNZW5zYWdlbVNlcnZpY2UsIFVuYlRpcG9NZW5zYWdlbUVudW0gfSBmcm9tICcuLi8uLi91bmItbWVuc2FnZW0vdW5iLW1lbnNhZ2VtLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBVbmJVdGlscyB9IGZyb20gJy4uLy4uL3V0aWxzL3VuYi11dGlscyc7XHJcbmltcG9ydCB7IFVuYlBlc3NvYUVtYWlsVGlwbyB9IGZyb20gJy4uL3VuYi1wZXNzb2EtbW9kZWxzL3VuYi1wZXNzb2EtZW1haWwubW9kZWwnO1xyXG5pbXBvcnQgeyBVbmJQZXNzb2FFbmRlcmVjb1RpcG8gfSBmcm9tICcuLi91bmItcGVzc29hLW1vZGVscy91bmItcGVzc29hLWVuZGVyZWNvLm1vZGVsJztcclxuaW1wb3J0IHsgVW5iUGVzc29hVGVsZWZvbmVUaXBvIH0gZnJvbSAnLi4vdW5iLXBlc3NvYS1tb2RlbHMvdW5iLXBlc3NvYS10ZWxlZm9uZS5tb2RlbCc7XHJcbmltcG9ydCB7IFVuYlBlc3NvYU1vZGVsIH0gZnJvbSAnLi4vdW5iLXBlc3NvYS1tb2RlbHMvdW5iLXBlc3NvYS5tb2RlbCc7XHJcbmltcG9ydCB7IFVuYlBlc3NvYUVycm9QYWRyYW8sIFVuQlBlc3NvYVNlcnZpY2UgfSBmcm9tICcuLi91bmItcGVzc29hLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBVbmJUaXBvUGVzc29hRW51bSB9IGZyb20gJy4uL3VuYi10aXBvLXBlc3NvYS5lbnVtJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnbGliLXVuYi1wZXNzb2EtcGVzcXVpc2FyJyxcclxuICBzdGFuZGFsb25lOiBmYWxzZSxcclxuICB0ZW1wbGF0ZVVybDogJy4vdW5iLXBlc3NvYS1wZXNxdWlzYXIuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsOiAnLi91bmItcGVzc29hLXBlc3F1aXNhci5jb21wb25lbnQuY3NzJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgVW5iUGVzc29hUGVzcXVpc2FyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuICBpc0xvYWRpbmcgPSBmYWxzZTtcclxuXHJcbiAgLy8gQ29uZmlndXJhw6fDo28gZGEgQVBJLiBFeGVtcGxvIFNHSS51bmIuYnIvcGVzc29hLWFwaVxyXG4gIEBJbnB1dCh7IHJlcXVpcmVkOiB0cnVlIH0pIGJhY2tlbmRVUkw6IHN0cmluZyA9IFwiXCI7XHJcblxyXG4gIC8vIEZsYWdzIGRlIFBlc3F1aXNhIChjb20gY29udmVyc8OjbyBhdXRvbcOhdGljYSBkZSBzdHJpbmcgcGFyYSBib29sZWFuKVxyXG4gIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSBwZXNxdWlzYXJQb3JDUEYgPSB0cnVlO1xyXG4gIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSBwZXNxdWlzYXJQb3JDTlBKID0gdHJ1ZTtcclxuICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgcGVzcXVpc2FyUG9yRXN0cmFuZ2Vpcm8gPSBmYWxzZTtcclxuXHJcbiAgLy8gQ29uZmlndXJhw6fDtWVzIGRlIFVJIGUgQ29tcG9ydGFtZW50b1xyXG4gIEBJbnB1dCgpIGRlZmF1bHRUaXBvUGVzc29hOiBVbmJUaXBvUGVzc29hRW51bSB8ICdGSVNJQ0EnIHwgJ0pVUklESUNBJyB8ICdFU1RSQU5HRUlSQScgPSBVbmJUaXBvUGVzc29hRW51bS5GSVNJQ0E7XHJcbiAgQElucHV0KCkgY2FtcG9QZXNxdWlzYU1heFdpZHRoOiBzdHJpbmcgPSAnNDAwcHgnO1xyXG4gIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSBtb3N0cmFyUGVzcXVpc2EgPSB0cnVlO1xyXG4gIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSBsaW1wYXJBcG9zUGVzcXVpc2EgPSBmYWxzZTtcclxuXHJcbiAgLy8gVGV4dG9zIGUgTGFiZWxzXHJcbiAgQElucHV0KCkgbGFiZWwgPSBcIkRpZ2l0ZSBvIENQRi9DTlBKIG91IFBhc3NhcG9ydGVcIjtcclxuICBASW5wdXQoKSBwbGFjZWhvbGRlciA9IFwiXCI7XHJcbiAgQElucHV0KCkgaGludCA9IFwiXCI7XHJcblxyXG4gIC8vIERhZG9zIGUgRXZlbnRvc1xyXG4gIEBJbnB1dCgpIHBlc3NvYSA9IG5ldyBVbmJQZXNzb2FNb2RlbCgpO1xyXG4gIEBPdXRwdXQoKSBwZXNzb2FFbWl0dGVkID0gbmV3IEV2ZW50RW1pdHRlcjxVbmJQZXNzb2FNb2RlbD4oKTtcclxuICBAT3V0cHV0KCkgaXNMb2FkaW5nQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHBlc3NvYVNlcnZpY2U6IFVuQlBlc3NvYVNlcnZpY2UsIHByaXZhdGUgc25hY2tCYXI6IE1hdFNuYWNrQmFyLCBwcml2YXRlIGFsZXJ0U2VydmljZTogVW5iTWVuc2FnZW1TZXJ2aWNlKSB7IH1cclxuXHJcbiAgcGVzc29hRW5jb250cmFkbzogQm9vbGVhbiB8IG51bGwgPSBmYWxzZTtcclxuICBtb3N0cmFyVGlwb1Blc3NvYSE6IGJvb2xlYW47XHJcbiAgbGlzdGFUaXBvRW5kZXJlY286IFVuYlBlc3NvYUVuZGVyZWNvVGlwb1tdID0gW107XHJcbiAgbGlzdGFUaXBvVGVsZWZvbmU6IFVuYlBlc3NvYVRlbGVmb25lVGlwb1tdID0gW107XHJcbiAgbGlzdGFUaXBvRW1haWw6IFVuYlBlc3NvYUVtYWlsVGlwb1tdID0gW107XHJcblxyXG4gIGlkTWVuc2FnZW1TZXJ2aWNlID0gXCJVbmJQZXNzb2FQZXNxdWlzYXJcIjtcclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICAvLyAxLiBWYWxpZGHDp8OjbyBkZSBJbmljaWFsaXphw6fDo28gZGEgQVBJXHJcbiAgICBpZiAoIXRoaXMuYmFja2VuZFVSTCkge1xyXG4gICAgICB0aGlzLmhhbmRsZUVycm9yUHJpbnRDb25zb2xlKFwiW1VuYlBlc3NvYVBlc3F1aXNhckNvbXBvbmVudF0gRVJST1I6IGJhY2tlbmRVUkwgZXN0w6EgbnVsbC5cIik7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRoaXMucGVzc29hU2VydmljZS5zZXRCYWNrZW5kVXJsKHRoaXMuYmFja2VuZFVSTCk7XHJcblxyXG4gICAgLy8gMi4gQ2FycmVnYW1lbnRvIGRlIERhZG9zIGRlIEFwb2lvXHJcbiAgICBmb3JrSm9pbih7XHJcbiAgICAgIHRpcG9zRW5kOiB0aGlzLnBlc3NvYVNlcnZpY2UuZ2V0VGlwb0VuZGVyZWNvKCksXHJcbiAgICAgIHRpcG9zVGVsOiB0aGlzLnBlc3NvYVNlcnZpY2UuZ2V0VGlwb1RlbGVmb25lKCksXHJcbiAgICAgIHRpcG9zRW1haWw6IHRoaXMucGVzc29hU2VydmljZS5nZXRUaXBvRW1haWwoKVxyXG4gICAgfSkuc3Vic2NyaWJlKHtcclxuICAgICAgbmV4dDogKHsgdGlwb3NFbmQsIHRpcG9zVGVsLCB0aXBvc0VtYWlsIH0pID0+IHtcclxuICAgICAgICB0aGlzLmxpc3RhVGlwb0VuZGVyZWNvID0gdGlwb3NFbmQ7XHJcbiAgICAgICAgdGhpcy5saXN0YVRpcG9UZWxlZm9uZSA9IHRpcG9zVGVsO1xyXG4gICAgICAgIHRoaXMubGlzdGFUaXBvRW1haWwgPSB0aXBvc0VtYWlsO1xyXG4gICAgICB9LFxyXG4gICAgICBlcnJvcjogKGVycikgPT4ge1xyXG4gICAgICAgIHRoaXMuaGFuZGxlRXJyb3IoXCJGYWxoYSBhbyBjYXJyZWdhciBkYWRvcyBkZSBhcG9pby4gUmVjYXJyZWd1ZSBhIHDDoWdpbmEuXCIpO1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXCJFcnJvIG5vIGZvcmtKb2luOlwiLCBlcnIpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICAvLyAzLiBEZWZpbmnDp8OjbyBkYSBMw7NnaWNhIGRlIEV4aWJpw6fDo28gZSBUaXBvIFBhZHLDo29cclxuICAgIGNvbnN0IG9wY29lc0F0aXZhcyA9IFt0aGlzLnBlc3F1aXNhclBvckNQRiwgdGhpcy5wZXNxdWlzYXJQb3JDTlBKLCB0aGlzLnBlc3F1aXNhclBvckVzdHJhbmdlaXJvXS5maWx0ZXIodiA9PiB2KS5sZW5ndGg7XHJcblxyXG4gICAgLy8gU8OzIG1vc3RyYSBvIHLDoWRpbyBzZSBob3V2ZXIgZXNjb2xoYSByZWFsIChtYWlzIGRlIHVtYSBvcMOnw6NvIGF0aXZhKVxyXG4gICAgdGhpcy5tb3N0cmFyVGlwb1Blc3NvYSA9IG9wY29lc0F0aXZhcyA+IDE7XHJcblxyXG4gICAgaWYgKG9wY29lc0F0aXZhcyA9PT0gMCkge1xyXG4gICAgICB0aGlzLmhhbmRsZUVycm9yUHJpbnRDb25zb2xlKFwiW1VuYlBlc3NvYVBlc3F1aXNhckNvbXBvbmVudF0gRVJST1I6IE5lbmh1bWEgb3DDp8OjbyBkZSBwZXNxdWlzYSAoQ1BGL0NOUEovRXN0cmFuZ2Vpcm8pIGVzdMOhIGF0aXZhLlwiKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIDQuIEF0cmlidWnDp8OjbyBkbyBUaXBvIEluaWNpYWwgKE9yZGVtIGRlIHByaW9yaWRhZGU6IFZhbG9yIHBhZHLDo28gLT4gT3DDp8OjbyDDmm5pY2EgLT4gQ1BGKVxyXG4gICAgdGhpcy5kZWZpbmlyVGlwb1Blc3NvYUluaWNpYWwoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIERlZmluZSBxdWFsIHRpcG8gZGUgcGVzc29hIGVzdGFyw6Egc2VsZWNpb25hZG8gYW8gY2FycmVnYXIgbyBjb21wb25lbnRlXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBkZWZpbmlyVGlwb1Blc3NvYUluaWNpYWwoKTogdm9pZCB7XHJcbiAgICAvLyBWZXJpZmljYSBzZSBvIHBhZHLDo28gcGFzc2FkbyDDqSBwZXJtaXRpZG8gcGVsYXMgZmxhZ3MgZGUgcGVzcXVpc2FcclxuICAgIGNvbnN0IHBhZHJhb0VoVmFsaWRvID1cclxuICAgICAgICAodGhpcy5kZWZhdWx0VGlwb1Blc3NvYSA9PT0gVW5iVGlwb1Blc3NvYUVudW0uRklTSUNBICYmIHRoaXMucGVzcXVpc2FyUG9yQ1BGKSB8fFxyXG4gICAgICAgICh0aGlzLmRlZmF1bHRUaXBvUGVzc29hID09PSBVbmJUaXBvUGVzc29hRW51bS5KVVJJRElDQSAmJiB0aGlzLnBlc3F1aXNhclBvckNOUEopIHx8XHJcbiAgICAgICAgKHRoaXMuZGVmYXVsdFRpcG9QZXNzb2EgPT09IFVuYlRpcG9QZXNzb2FFbnVtLkVTVFJBTkdFSVJBICYmIHRoaXMucGVzcXVpc2FyUG9yRXN0cmFuZ2Vpcm8pO1xyXG5cclxuICAgIGlmIChwYWRyYW9FaFZhbGlkbykge1xyXG4gICAgICAgIC8vIENvbW8gbyB2YWxvciBkYSBzdHJpbmcgw6kgaWd1YWwgYW8gdmFsb3IgZG8gRW51bSwgYSBhdHJpYnVpw6fDo28gw6kgZGlyZXRhXHJcbiAgICAgICAgdGhpcy5wZXNzb2EudGlwb1Blc3NvYSA9IHRoaXMuZGVmYXVsdFRpcG9QZXNzb2EgYXMgVW5iVGlwb1Blc3NvYUVudW07XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAgIGlmICh0aGlzLmRlZmF1bHRUaXBvUGVzc29hKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUud2FybihcclxuICAgICAgICAgICAgICAgIGBbVW5iUGVzc29hUGVzcXVpc2FyXSBPIHZhbG9yIGRlZmF1bHRUaXBvUGVzc29hPScke3RoaXMuZGVmYXVsdFRpcG9QZXNzb2F9JyDDqSBpbmNvbXBhdMOtdmVsIGNvbSBhcyBvcMOnw7VlcyBkZSBwZXNxdWlzYSBhdGl2YXMuIFNlbGVjaW9uYW5kbyBhIHByaW1laXJhIGRpc3BvbsOtdmVsLmBcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIEZhbGxiYWNrIHBhcmEgYSBwcmltZWlyYSBvcMOnw6NvIGF0aXZhXHJcbiAgICAgICAgaWYgKHRoaXMucGVzcXVpc2FyUG9yQ1BGKSB7XHJcbiAgICAgICAgICAgIHRoaXMucGVzc29hLnRpcG9QZXNzb2EgPSBVbmJUaXBvUGVzc29hRW51bS5GSVNJQ0E7XHJcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLnBlc3F1aXNhclBvckNOUEopIHtcclxuICAgICAgICAgICAgdGhpcy5wZXNzb2EudGlwb1Blc3NvYSA9IFVuYlRpcG9QZXNzb2FFbnVtLkpVUklESUNBO1xyXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5wZXNxdWlzYXJQb3JFc3RyYW5nZWlybykge1xyXG4gICAgICAgICAgICB0aGlzLnBlc3NvYS50aXBvUGVzc29hID0gVW5iVGlwb1Blc3NvYUVudW0uRVNUUkFOR0VJUkE7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25UaXBvUGVzc29hQ2hhbmdlKCkge1xyXG4gICAgLy8gQ3JpYSB1bWEgbm92YSBwZXNzb2EgbGltcGEgY29tIG8gdGlwbyBzZWxlY2lvbmFkb1xyXG4gICAgY29uc3Qgbm92YVBlc3NvYSA9IG5ldyBVbmJQZXNzb2FNb2RlbCgpO1xyXG4gICAgbm92YVBlc3NvYS50aXBvUGVzc29hID0gdGhpcy5wZXNzb2EudGlwb1Blc3NvYTtcclxuXHJcbiAgICAvLyBJbmljaWFsaXphIGFycmF5cyB2YXppb3NcclxuICAgIG5vdmFQZXNzb2EudGVsZWZvbmVzID0gW107XHJcbiAgICBub3ZhUGVzc29hLmVuZGVyZWNvcyA9IFtdO1xyXG4gICAgbm92YVBlc3NvYS5lbWFpbHMgPSBbXTtcclxuXHJcbiAgICAvLyBTdWJzdGl0dWkgYSBwZXNzb2EgYXR1YWxcclxuICAgIHRoaXMucGVzc29hID0gbm92YVBlc3NvYTtcclxuXHJcbiAgICAvLyBFbWl0ZSBhIG5vdmEgcGVzc29hIGxpbXBhIHBhcmEgbyBjb21wb25lbnRlIHBhaSAoZm9ybSlcclxuICAgIHRoaXMucGVzc29hRW1pdHRlZC5lbWl0KHRoaXMucGVzc29hKTtcclxuICB9XHJcblxyXG4gIHBlc3F1aXNhcigpIHtcclxuICAgIGlmICh0aGlzLnZhbGlkYXIoKSA9PSBmYWxzZSkgcmV0dXJuO1xyXG4gICAgdGhpcy5pc0xvYWRpbmcgPSB0cnVlO1xyXG4gICAgdGhpcy5pc0xvYWRpbmdDaGFuZ2UuZW1pdCh0cnVlKTtcclxuICAgIGxldCByZXN1bHQ7XHJcbiAgICBpZiAodGhpcy5wZXNzb2EudGlwb1Blc3NvYSA9PSBVbmJUaXBvUGVzc29hRW51bS5GSVNJQ0EpIHtcclxuICAgICAgbGV0IGNwZiA9IHRoaXMucGVzc29hLmNwZi5tYXRjaCgvXFxkL2cpPy5qb2luKFwiXCIpOyAvLyByZW1vdmUgY2FyYWN0ZXJlcyBcclxuICAgICAgcmVzdWx0ID0gdGhpcy5wZXNzb2FTZXJ2aWNlLmZpbmRCeUNwZihjcGYpO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLnBlc3NvYS50aXBvUGVzc29hID09IFVuYlRpcG9QZXNzb2FFbnVtLkpVUklESUNBKSB7XHJcbiAgICAgIGxldCBjbnBqID0gdGhpcy5wZXNzb2EuY25wai5tYXRjaCgvXFxkL2cpPy5qb2luKFwiXCIpOyAvLyByZW1vdmUgY2FyYWN0ZXJlcyBcclxuICAgICAgcmVzdWx0ID0gdGhpcy5wZXNzb2FTZXJ2aWNlLmZpbmRCeUNucGooY25waik7XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMucGVzc29hLnRpcG9QZXNzb2EgPT0gVW5iVGlwb1Blc3NvYUVudW0uRVNUUkFOR0VJUkEpIHtcclxuICAgICAgcmVzdWx0ID0gdGhpcy5wZXNzb2FTZXJ2aWNlLmZpbmRCeVBhc3NhcG9ydGUodGhpcy5wZXNzb2EucGFzc2Fwb3J0ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHJlc3VsdCkge1xyXG4gICAgICByZXN1bHQuc3Vic2NyaWJlKHtcclxuICAgICAgICBuZXh0OiB0aGlzLmhhZGxlUmVzdWx0LmJpbmQodGhpcyksXHJcbiAgICAgICAgZXJyb3I6IHRoaXMuaGFuZGxlRXJyb3IuYmluZCh0aGlzKVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgfVxyXG5cclxuICB2YWxpZGFyKCk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKHRoaXMuYmFja2VuZFVSTCA9PSBcIlwiKSB7XHJcbiAgICAgIHRoaXMuaGFuZGxlRXJyb3JQcmludENvbnNvbGUoXCJbVW5iUGVzc29hUGVzcXVpc2FyQ29tcG9uZW50XSBFUlJPUjogYmFja2VuZFVSTC51cmwgZXN0w6EgbnVsbC4gSW5zaXJhIG8gcGFyw6JtZXRybyAoYmFja2VuZFVSTCkgY29tIG8gdmFsb3IgZGEgVVJMIGRvIHNldSBCYWNrZW5kIVwiKVxyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMucGVzc29hLnRpcG9QZXNzb2EgPT0gVW5iVGlwb1Blc3NvYUVudW0uRklTSUNBKSB7XHJcbiAgICAgIGlmICh0aGlzLnBlc3NvYS5jcGYgPT0gbnVsbCB8fCAodGhpcy5wZXNzb2EuY3BmICE9IG51bGwgJiYgdGhpcy5wZXNzb2EuY3BmID09IFwiXCIpKSB7XHJcbiAgICAgICAgdGhpcy5oYW5kbGVFcnJvcihcIkNQRiDDqSB1bSBjYW1wbyBvYnJpZ2F0w7NyaW8uXCIpXHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICB9IGVsc2UgaWYgKCFVbmJVdGlscy52YWxpZGFyQ1BGKHRoaXMucGVzc29hLmNwZikpIHtcclxuICAgICAgICB0aGlzLmhhbmRsZUVycm9yKFwiRGlnaXRlIHVtIHZhbG9yIHbDoWxpZG8gcGFyYSBvIENQRlwiKVxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIGlmICh0aGlzLnBlc3NvYS50aXBvUGVzc29hID09IFVuYlRpcG9QZXNzb2FFbnVtLkpVUklESUNBKSB7XHJcbiAgICAgIGlmICh0aGlzLnBlc3NvYS5jbnBqID09IG51bGwgfHwgKHRoaXMucGVzc29hLmNucGogIT0gbnVsbCAmJiB0aGlzLnBlc3NvYS5jbnBqID09IFwiXCIpKSB7XHJcbiAgICAgICAgdGhpcy5oYW5kbGVFcnJvcihcIkNOUEogw6kgdW0gY2FtcG8gb2JyaWdhdMOzcmlvXCIpXHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICB9IGVsc2UgaWYgKCFVbmJVdGlscy52YWxpZGFyQ05QSih0aGlzLnBlc3NvYS5jbnBqKSkge1xyXG4gICAgICAgIHRoaXMuaGFuZGxlRXJyb3IoXCJEaWdpdGUgdW0gdmFsb3IgdsOhbGlkbyBwYXJhIG8gQ05QSiFcIilcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSBpZiAodGhpcy5wZXNzb2EudGlwb1Blc3NvYSA9PSBVbmJUaXBvUGVzc29hRW51bS5FU1RSQU5HRUlSQSkge1xyXG4gICAgICBpZiAodGhpcy5wZXNzb2EucGFzc2Fwb3J0ZSA9PSBudWxsIHx8ICh0aGlzLnBlc3NvYS5wYXNzYXBvcnRlICE9IG51bGwgJiYgdGhpcy5wZXNzb2EucGFzc2Fwb3J0ZSA9PSBcIlwiKSkge1xyXG4gICAgICAgIHRoaXMuaGFuZGxlRXJyb3IoXCJQYXNzYXBvcnRlIMOpIHVtIGNhbXBvIG9icmlnYXTDs3Jpb1wiKVxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5oYW5kbGVFcnJvcihcIlNlbGVjaW9uZSB1bSB0aXBvIGRlIHBlc3NvYSFcIilcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH1cclxuXHJcbiAgLy8gRW0gdW5iLXBlc3NvYS1wZXNxdWlzYXIuY29tcG9uZW50LnRzXHJcbiAgaGFkbGVSZXN1bHQocmVzdWx0YWRvOiBVbmJQZXNzb2FNb2RlbCkge1xyXG4gICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcclxuICAgIHRoaXMuaXNMb2FkaW5nQ2hhbmdlLmVtaXQoZmFsc2UpO1xyXG5cclxuICAgIGlmIChyZXN1bHRhZG8pIHtcclxuICAgICAgcmVzdWx0YWRvLnRpcG9QZXNzb2EgPSB0aGlzLnBlc3NvYS50aXBvUGVzc29hOyAvLyBvIGJhY2tlbmQgbmFvIHJldG9ybmEgbyB0aXBvIHBlc3NvYS4gZW50YW8gdGVuaG8gcXVlIGF0cmlidWlyIGFudGVzXHJcbiAgICAgIHRoaXMucGVzc29hID0gcmVzdWx0YWRvO1xyXG5cclxuICAgICAgdGhpcy5wZXNzb2EuZW5kZXJlY29zID0gdGhpcy5wZXNzb2EuZW5kZXJlY29zIHx8IFtdO1xyXG4gICAgICB0aGlzLnBlc3NvYS50ZWxlZm9uZXMgPSB0aGlzLnBlc3NvYS50ZWxlZm9uZXMgfHwgW107XHJcbiAgICAgIHRoaXMucGVzc29hLmVtYWlscyA9IHRoaXMucGVzc29hLmVtYWlscyB8fCBbXTtcclxuXHJcbiAgICAgIC8vIC0tLSBTRcOHw4NPIERFIExJTVBFWkEgREUgREFET1MgUFJJTkNJUEFJUyAoVk9Dw4ogSsOBIFRJTkhBKSAtLS1cclxuICAgICAgaWYgKHRoaXMucGVzc29hLnNleG8pIHtcclxuICAgICAgICBpZiAodGhpcy5wZXNzb2Euc2V4by50b1VwcGVyQ2FzZSgpLnRyaW0oKSA9PT0gJ0ZFTUlOSU5PJykge1xyXG4gICAgICAgICAgdGhpcy5wZXNzb2EuY29kaWdvU2V4byA9IDI7XHJcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLnBlc3NvYS5zZXhvLnRvVXBwZXJDYXNlKCkudHJpbSgpID09PSAnTUFTQ1VMSU5PJykge1xyXG4gICAgICAgICAgdGhpcy5wZXNzb2EuY29kaWdvU2V4byA9IDE7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAodGhpcy5wZXNzb2EuZGF0YU5hc2NpbWVudG8pIHtcclxuICAgICAgICB0aGlzLnBlc3NvYS5kYXRhTmFzY2ltZW50byA9IHRoaXMucGFyc2VEYXRhKHRoaXMucGVzc29hLmRhdGFOYXNjaW1lbnRvKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKHRoaXMucGVzc29hLmVzdGFkb0NpdmlsKSB7XHJcbiAgICAgICAgdGhpcy5wZXNzb2EuY29kaWdvRXN0YWRvQ2l2aWwgPSB0aGlzLnBhcnNlQ29kaWdvKHRoaXMucGVzc29hLmVzdGFkb0NpdmlsKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKHRoaXMucGVzc29hLnBhaXNOYXNjaW1lbnRvKSB7XHJcbiAgICAgICAgdGhpcy5wZXNzb2EuY29kaWdvUGFpc05hc2NpbWVudG8gPSB0aGlzLnBhcnNlQ29kaWdvKHRoaXMucGVzc29hLnBhaXNOYXNjaW1lbnRvKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKHRoaXMucGVzc29hLmVzY29sYXJpZGFkZSkge1xyXG4gICAgICAgIHRoaXMucGVzc29hLmVzY29sYXJpZGFkZSA9IHRoaXMucGFyc2VDb2RpZ28odGhpcy5wZXNzb2EuZXNjb2xhcmlkYWRlKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gMS4gUHJvY2Vzc2EgRW5kZXJlw6dvc1xyXG4gICAgICAvLyBPIHBheWxvYWQgJ3NhbHZhcicgZXNwZXJhOiBvcmRlbUVuZGVyZWNvLCB0aXBvRW5kZXJlY29Db2RpZ28sIHBhaXNFbmRlcmVjb0NvZGlnbywgdWZFbmRlcmVjb1xyXG4gICAgICAvLyAxLiBQcm9jZXNzYSBFbmRlcmXDp29zXHJcbiAgICAgIGlmICh0aGlzLnBlc3NvYS5lbmRlcmVjb3MgJiYgdGhpcy5saXN0YVRpcG9FbmRlcmVjby5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgLy8gLS0tIENPUlJFw4fDg086IEFkaWNpb25hZG8gJ2knIGFvIGZvckVhY2ggLS0tXHJcbiAgICAgICAgdGhpcy5wZXNzb2EuZW5kZXJlY29zLmZvckVhY2goKGVuZCwgaSkgPT4ge1xyXG4gICAgICAgICAgLy8gVHJhZHV6IG8gJ3RpcG8nIChzdHJpbmcpIHBhcmEgJ3RpcG9FbmRlcmVjb0NvZGlnbycgKG51bWJlcilcclxuICAgICAgICAgIGlmICghZW5kLnRpcG9FbmRlcmVjb0NvZGlnbyAmJiBlbmQudGlwbykge1xyXG4gICAgICAgICAgICBjb25zdCB0aXBvRW5jb250cmFkbyA9IHRoaXMubGlzdGFUaXBvRW5kZXJlY28uZmluZCh0ID0+IHQuZGVub21pbmFjYW8/LnRvTG93ZXJDYXNlKCkgPT09IGVuZC50aXBvPy50b0xvd2VyQ2FzZSgpKTtcclxuICAgICAgICAgICAgaWYgKHRpcG9FbmNvbnRyYWRvKSBlbmQudGlwb0VuZGVyZWNvQ29kaWdvID0gdGlwb0VuY29udHJhZG8uY29kaWdvO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgLy8gVHJhZHV6ICdwYWlzJyAoc3RyaW5nICcyMiAtIEJSQVNJTCcpIHBhcmEgJ3BhaXNFbmRlcmVjb0NvZGlnbycgKG51bWJlcilcclxuICAgICAgICAgIGlmICghZW5kLnBhaXNFbmRlcmVjb0NvZGlnbyAmJiBlbmQucGFpcykge1xyXG4gICAgICAgICAgICBlbmQucGFpc0VuZGVyZWNvQ29kaWdvID0gdGhpcy5wYXJzZUNvZGlnbyhlbmQucGFpcyk7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgLy8gTWFwZWlhICdvcmRlbScgLT4gJ29yZGVtRW5kZXJlY28nIG91IHVzYSBvIMOtbmRpY2UgKGkgKyAxKVxyXG4gICAgICAgICAgLy8gTyBwYXlsb2FkIGRlIHNhbHZhciAobm8gZm9ybSkgZXNwZXJhICdvcmRlbUVuZGVyZWNvJ1xyXG4gICAgICAgICAgZW5kLm9yZGVtRW5kZXJlY28gPSBlbmQub3JkZW1FbmRlcmVjbyB8fCBlbmQub3JkZW0gfHwgKGkgKyAxKTtcclxuXHJcbiAgICAgICAgICAvLyBNYXBlaWEgJ3VmJyAtPiAndWZFbmRlcmVjbydcclxuICAgICAgICAgIGlmICghZW5kLnVmRW5kZXJlY28gJiYgZW5kLnVmKSB7XHJcbiAgICAgICAgICAgIGVuZC51ZkVuZGVyZWNvID0gZW5kLnVmO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyAyLiBQcm9jZXNzYSBUZWxlZm9uZXNcclxuICAgICAgaWYgKHRoaXMucGVzc29hLnRlbGVmb25lcyAmJiB0aGlzLmxpc3RhVGlwb1RlbGVmb25lLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAvLyAtLS0gQ09SUkXDh8ODTzogQWRpY2lvbmFkbyAnaScgYW8gZm9yRWFjaCAtLS1cclxuICAgICAgICB0aGlzLnBlc3NvYS50ZWxlZm9uZXMuZm9yRWFjaCgodGVsLCBpKSA9PiB7XHJcbiAgICAgICAgICBpZiAoIXRlbC50aXBvVGVsZWZvbmVDb2RpZ28gJiYgdGVsLnRpcG8pIHtcclxuICAgICAgICAgICAgY29uc3QgdGlwb0VuY29udHJhZG8gPSB0aGlzLmxpc3RhVGlwb1RlbGVmb25lLmZpbmQodCA9PiB0LmRlbm9taW5hY2FvPy50b0xvd2VyQ2FzZSgpID09PSB0ZWwudGlwbz8udG9Mb3dlckNhc2UoKSk7XHJcbiAgICAgICAgICAgIGlmICh0aXBvRW5jb250cmFkbykgdGVsLnRpcG9UZWxlZm9uZUNvZGlnbyA9IHRpcG9FbmNvbnRyYWRvLmNvZGlnbztcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAvLyAtLS0gQ09SUkXDh8ODTzogTMOzZ2ljYSBkYSBPcmRlbSAtLS1cclxuICAgICAgICAgIC8vIE8gcGF5bG9hZCBkZSBzYWx2YXIgKG5vIGZvcm0pIGzDqiAndGVsLm9yZGVtJ1xyXG4gICAgICAgICAgdGVsLm9yZGVtID0gdGVsLm9yZGVtIHx8IChpICsgMSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIDMuIFByb2Nlc3NhIEVtYWlsc1xyXG4gICAgICBpZiAodGhpcy5wZXNzb2EuZW1haWxzICYmIHRoaXMubGlzdGFUaXBvRW1haWwubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIC8vIC0tLSBDT1JSRcOHw4NPOiBBZGljaW9uYWRvICdpJyBhbyBmb3JFYWNoIC0tLVxyXG4gICAgICAgIHRoaXMucGVzc29hLmVtYWlscy5mb3JFYWNoKChlbWFpbCwgaSkgPT4ge1xyXG4gICAgICAgICAgaWYgKCFlbWFpbC50aXBvRW1haWxDb2RpZ28gJiYgZW1haWwudGlwbykge1xyXG4gICAgICAgICAgICBjb25zdCB0aXBvRW5jb250cmFkbyA9IHRoaXMubGlzdGFUaXBvRW1haWwuZmluZCh0ID0+IHQuZGVub21pbmFjYW8/LnRvTG93ZXJDYXNlKCkgPT09IGVtYWlsLnRpcG8/LnRvTG93ZXJDYXNlKCkpO1xyXG4gICAgICAgICAgICBpZiAodGlwb0VuY29udHJhZG8pIGVtYWlsLnRpcG9FbWFpbENvZGlnbyA9IHRpcG9FbmNvbnRyYWRvLmNvZGlnbztcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAvLyAtLS0gQ09SUkXDh8ODTzogTMOzZ2ljYSBkYSBPcmRlbSAtLS1cclxuICAgICAgICAgIC8vIE8gcGF5bG9hZCBkZSBzYWx2YXIgKG5vIGZvcm0pIGzDqiAnZW1haWwub3JkZW0nXHJcbiAgICAgICAgICBlbWFpbC5vcmRlbSA9IGVtYWlsLm9yZGVtIHx8IChpICsgMSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICh0aGlzLnBlc3NvYS50aXBvUGVzc29hID09IFVuYlRpcG9QZXNzb2FFbnVtLkZJU0lDQSkge1xyXG4gICAgICAgIHRoaXMucGVzc29hLmNwZiA9IFVuYlV0aWxzLmZvcm1hdGFDcGYocmVzdWx0YWRvLmNwZik7XHJcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5wZXNzb2EudGlwb1Blc3NvYSA9PSBVbmJUaXBvUGVzc29hRW51bS5KVVJJRElDQSkge1xyXG4gICAgICAgIHRoaXMucGVzc29hLmNucGogPSBVbmJVdGlscy5mb3JtYXRhQ25waihyZXN1bHRhZG8uY25waik7XHJcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5wZXNzb2EudGlwb1Blc3NvYSA9PSBVbmJUaXBvUGVzc29hRW51bS5FU1RSQU5HRUlSQSkge1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAvLyBzZSBjaGVnYXIgYWtpIGVoIHBxIG5hbyBlbmNvbnRyb3UuLi4gKGzDs2dpY2EgcXVlIGrDoSBleGlzdGUpXHJcbiAgICAgIGxldCBub3ZhUGVzc29hID0gbmV3IFVuYlBlc3NvYU1vZGVsKCk7XHJcbiAgICAgIG5vdmFQZXNzb2EudGlwb1Blc3NvYSA9IHRoaXMucGVzc29hLnRpcG9QZXNzb2E7XHJcbiAgICAgIGlmICh0aGlzLnBlc3NvYS50aXBvUGVzc29hID09IFVuYlRpcG9QZXNzb2FFbnVtLkZJU0lDQSkge1xyXG4gICAgICAgIG5vdmFQZXNzb2EuY3BmID0gdGhpcy5wZXNzb2EuY3BmO1xyXG4gICAgICB9IGVsc2UgaWYgKHRoaXMucGVzc29hLnRpcG9QZXNzb2EgPT0gVW5iVGlwb1Blc3NvYUVudW0uSlVSSURJQ0EpIHtcclxuICAgICAgICBub3ZhUGVzc29hLmNucGogPSB0aGlzLnBlc3NvYS5jbnBqO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIG5vdmFQZXNzb2EucGFzc2Fwb3J0ZSA9IHRoaXMucGVzc29hLnBhc3NhcG9ydGU7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5wZXNzb2EgPSBub3ZhUGVzc29hO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMucGVzc29hRW1pdHRlZC5lbWl0KHRoaXMucGVzc29hKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcGFyc2VDb2RpZ28odmFsb3JTdHJpbmc6IGFueSk6IG51bWJlciB8IG51bGwge1xyXG4gICAgaWYgKHR5cGVvZiB2YWxvclN0cmluZyA9PT0gJ251bWJlcicpIHtcclxuICAgICAgcmV0dXJuIHZhbG9yU3RyaW5nOyAvLyBKw6Egw6kgdW0gbsO6bWVyb1xyXG4gICAgfVxyXG4gICAgaWYgKHR5cGVvZiB2YWxvclN0cmluZyAhPT0gJ3N0cmluZycgfHwgIXZhbG9yU3RyaW5nLmluY2x1ZGVzKCcgLSAnKSkge1xyXG4gICAgICAvLyBUZW50YSBjb252ZXJ0ZXIgZGlyZXRvLCBjYXNvIG8gYmFja2VuZCBtYW5kZSBzw7MgbyBuw7ptZXJvIGNvbW8gc3RyaW5nXHJcbiAgICAgIGNvbnN0IG51bSA9IHBhcnNlSW50KHZhbG9yU3RyaW5nLCAxMCk7XHJcbiAgICAgIHJldHVybiBpc05hTihudW0pID8gbnVsbCA6IG51bTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBwYXJ0ZXMgPSB2YWxvclN0cmluZy5zcGxpdCgnIC0gJyk7XHJcbiAgICBjb25zdCBjb2RpZ28gPSBwYXJzZUludChwYXJ0ZXNbMF0udHJpbSgpLCAxMCk7XHJcbiAgICByZXR1cm4gaXNOYU4oY29kaWdvKSA/IG51bGwgOiBjb2RpZ287XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDb252ZXJ0ZSB1bWEgc3RyaW5nIG5vIGZvcm1hdG8gJ2RkL01NL3l5eXknIHBhcmEgdW0gb2JqZXRvIERhdGUuXHJcbiAgICogUmV0b3JuYSBudWxsIHNlIG8gZm9ybWF0byBmb3IgaW52w6FsaWRvLlxyXG4gICAqL1xyXG4gIHByaXZhdGUgcGFyc2VEYXRhKGRhdGFTdHJpbmc6IGFueSk6IERhdGUgfCBudWxsIHtcclxuICAgIGlmIChkYXRhU3RyaW5nIGluc3RhbmNlb2YgRGF0ZSkge1xyXG4gICAgICByZXR1cm4gZGF0YVN0cmluZzsgLy8gSsOhIMOpIHVtIG9iamV0byBEYXRlXHJcbiAgICB9XHJcbiAgICBpZiAodHlwZW9mIGRhdGFTdHJpbmcgIT09ICdzdHJpbmcnIHx8ICFkYXRhU3RyaW5nLmluY2x1ZGVzKCcvJykpIHtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgcGFydGVzID0gZGF0YVN0cmluZy5zcGxpdCgnLycpOyAvLyBbZGQsIE1NLCB5eXl5XVxyXG4gICAgaWYgKHBhcnRlcy5sZW5ndGggPT09IDMpIHtcclxuICAgICAgY29uc3QgZGlhID0gcGFyc2VJbnQocGFydGVzWzBdLCAxMCk7XHJcbiAgICAgIGNvbnN0IG1lcyA9IHBhcnNlSW50KHBhcnRlc1sxXSwgMTApIC0gMTsgLy8gTcOqcyBubyBKUyDDqSAwLWluZGV4YWRvXHJcbiAgICAgIGNvbnN0IGFubyA9IHBhcnNlSW50KHBhcnRlc1syXSwgMTApO1xyXG5cclxuICAgICAgLy8gVmVyaWZpY2Egc2UgYSBkYXRhIMOpIHbDoWxpZGFcclxuICAgICAgY29uc3QgZGF0YU9iaiA9IG5ldyBEYXRlKGFubywgbWVzLCBkaWEpO1xyXG4gICAgICBpZiAoZGF0YU9iai5nZXRGdWxsWWVhcigpID09PSBhbm8gJiYgZGF0YU9iai5nZXRNb250aCgpID09PSBtZXMgJiYgZGF0YU9iai5nZXREYXRlKCkgPT09IGRpYSkge1xyXG4gICAgICAgIHJldHVybiBkYXRhT2JqO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbnVsbDsgLy8gRm9ybWF0byBpbnbDoWxpZG9cclxuICB9XHJcblxyXG4gIGhhbmRsZUVycm9yKGVycm86IFVuYlBlc3NvYUVycm9QYWRyYW8gfCBzdHJpbmcpIHtcclxuICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XHJcbiAgICB0aGlzLmlzTG9hZGluZ0NoYW5nZS5lbWl0KGZhbHNlKTtcclxuICAgIHRoaXMucGVzc29hRW5jb250cmFkbyA9IGZhbHNlO1xyXG5cclxuICAgIGxldCBlcnJvVHJhdGFkbzogVW5iUGVzc29hRXJyb1BhZHJhbztcclxuXHJcbiAgICAvLyAtLS0gQURBUFRFUjogQ29udmVydGUgc3RyaW5nIHBhcmEgbyBPYmpldG8gUGFkcsOjbyAtLS1cclxuICAgIGlmICh0eXBlb2YgZXJybyA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgZXJyb1RyYXRhZG8gPSB7XHJcbiAgICAgICAgc3RhdHVzOiA0MDAsIC8vIEVycm8gZGUgdmFsaWRhw6fDo28gbG9jYWwgZ2VyYWxtZW50ZSDDqSA0MDBcclxuICAgICAgICBtZW5zYWdlbVNpbXBsZXM6IGVycm8sXHJcbiAgICAgICAgbWVuc2FnZW1IdG1sOiBgPHN0cm9uZz4ke2Vycm99PC9zdHJvbmc+YFxyXG4gICAgICB9O1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLy8gU2UgasOhIHZlaW8gZG8gU2VydmljZSAob3Ugw6kgdW0gb2JqZXRvIG1hbnVhbCksIHVzYSBkaXJldG9cclxuICAgICAgZXJyb1RyYXRhZG8gPSBlcnJvO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLSBMw5NHSUNBIERFIEVYSUJJw4fDg08gLS0tXHJcblxyXG4gICAgLy8gMS4gU25hY2tCYXIgKE1lbnNhZ2VtIGN1cnRhKVxyXG4gICAgaWYgKGVycm9UcmF0YWRvLm1lbnNhZ2VtU2ltcGxlcykge1xyXG4gICAgICB0aGlzLm9wZW5TbmFja0JhcihlcnJvVHJhdGFkby5tZW5zYWdlbVNpbXBsZXMpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIDIuIENvbXBvbmVudGUgZGUgTWVuc2FnZW0gKE1lbnNhZ2VtIEhUTUwpXHJcbiAgICBpZiAodGhpcy5hbGVydFNlcnZpY2UgJiYgZXJyb1RyYXRhZG8ubWVuc2FnZW1IdG1sKSB7XHJcbiAgICAgIC8vIFNlIHZvY8OqIHRpdmVyIGEgdmFyacOhdmVsIGlkTWVuc2FnZW1TZXJ2aWNlIGRlZmluaWRhIG5hIGNsYXNzZTpcclxuICAgICAgdGhpcy5hbGVydFNlcnZpY2Uuc2hvd01lc3NhZ2UoZXJyb1RyYXRhZG8ubWVuc2FnZW1IdG1sLCBVbmJUaXBvTWVuc2FnZW1FbnVtLkRBTkdFUiwgdGhpcy5pZE1lbnNhZ2VtU2VydmljZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBoYW5kbGVFcnJvclByaW50Q29uc29sZShlcnJvOiBhbnkpIHtcclxuICAgIGNvbnNvbGUubG9nKGVycm8pO1xyXG4gICAgdGhpcy5oYW5kbGVFcnJvcihlcnJvKTtcclxuICB9XHJcblxyXG4gIG9wZW5TbmFja0JhcihtZXNzYWdlOiBzdHJpbmcpIHtcclxuICAgIHRoaXMuc25hY2tCYXIub3BlbihtZXNzYWdlLCAneCcsIHtcclxuICAgICAgZHVyYXRpb246IDUwMDAsXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHRpcG9QZXNzb2FFbnVtKCkge1xyXG4gICAgcmV0dXJuIFVuYlRpcG9QZXNzb2FFbnVtO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRm9ybWF0YSBvIENQRiBlbnF1YW50byBvIHVzdcOhcmlvIGRpZ2l0YVxyXG4gICAqL1xyXG4gIGZvcm1hdGFyQ3BmKGV2ZW50OiBhbnkpIHtcclxuICAgIGxldCB2YWxvciA9IGV2ZW50LnRhcmdldC52YWx1ZS5yZXBsYWNlKC9cXEQvZywgJycpOyAvLyBSZW1vdmUgdHVkbyBxdWUgbsOjbyDDqSBkw61naXRvXHJcblxyXG4gICAgaWYgKHZhbG9yLmxlbmd0aCA8PSAxMSkge1xyXG4gICAgICAvLyBBcGxpY2EgbcOhc2NhcmE6IDAwMC4wMDAuMDAwLTAwXHJcbiAgICAgIHZhbG9yID0gdmFsb3IucmVwbGFjZSgvKFxcZHszfSkoXFxkKS8sICckMS4kMicpO1xyXG4gICAgICB2YWxvciA9IHZhbG9yLnJlcGxhY2UoLyhcXGR7M30pKFxcZCkvLCAnJDEuJDInKTtcclxuICAgICAgdmFsb3IgPSB2YWxvci5yZXBsYWNlKC8oXFxkezN9KShcXGR7MSwyfSkkLywgJyQxLSQyJyk7XHJcbiAgICAgIHRoaXMucGVzc29hLmNwZiA9IHZhbG9yO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRm9ybWF0YSBvIENOUEogZW5xdWFudG8gbyB1c3XDoXJpbyBkaWdpdGFcclxuICAgKi9cclxuICBmb3JtYXRhckNucGooZXZlbnQ6IGFueSkge1xyXG4gICAgbGV0IHZhbG9yID0gZXZlbnQudGFyZ2V0LnZhbHVlLnJlcGxhY2UoL1xcRC9nLCAnJyk7IC8vIFJlbW92ZSB0dWRvIHF1ZSBuw6NvIMOpIGTDrWdpdG9cclxuXHJcbiAgICBpZiAodmFsb3IubGVuZ3RoIDw9IDE0KSB7XHJcbiAgICAgIC8vIEFwbGljYSBtw6FzY2FyYTogMDAuMDAwLjAwMC8wMDAwLTAwXHJcbiAgICAgIHZhbG9yID0gdmFsb3IucmVwbGFjZSgvKFxcZHsyfSkoXFxkKS8sICckMS4kMicpO1xyXG4gICAgICB2YWxvciA9IHZhbG9yLnJlcGxhY2UoLyhcXGR7M30pKFxcZCkvLCAnJDEuJDInKTtcclxuICAgICAgdmFsb3IgPSB2YWxvci5yZXBsYWNlKC8oXFxkezN9KShcXGQpLywgJyQxLyQyJyk7XHJcbiAgICAgIHZhbG9yID0gdmFsb3IucmVwbGFjZSgvKFxcZHs0fSkoXFxkezEsMn0pJC8sICckMS0kMicpO1xyXG4gICAgICB0aGlzLnBlc3NvYS5jbnBqID0gdmFsb3I7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuXHJcbn1cclxuIiwiPGZvcm0gI3Blc3NvYUZvcm09XCJuZ0Zvcm1cIiBjbGFzcz1cInBlc3F1aXNhLWNvbnRhaW5lclwiIFtuZ1N0eWxlXT1cInsnLS10YW1hbmhvLW1heGltbyc6IGNhbXBvUGVzcXVpc2FNYXhXaWR0aH1cIlxyXG4gIChuZ1N1Ym1pdCk9XCJwZXNxdWlzYXIoKVwiPlxyXG4gIDxkaXYgY2xhc3M9XCJtZW5zYWdlbS1jb250YWluZXJcIiBzdHlsZT1cIndpZHRoOiAxMDAlO1wiPlxyXG4gICAgPHVuYi1tZW5zYWdlbSBbaWRlbnRpZmljYWRvcl09XCJpZE1lbnNhZ2VtU2VydmljZVwiIGNsYXNzPVwibWVuc2FnZW0tZm9ybVwiPjwvdW5iLW1lbnNhZ2VtPlxyXG4gIDwvZGl2PlxyXG5cclxuICA8ZGl2IGNsYXNzPVwiZm9ybS13cmFwcGVyXCI+XHJcbiAgICA8ZGl2ICpuZ0lmPVwibW9zdHJhclRpcG9QZXNzb2FcIiBjbGFzcz1cInJhZGlvLWNvbnRhaW5lclwiPlxyXG4gICAgICA8bWF0LXJhZGlvLWdyb3VwIGFyaWEtbGFiZWw9XCJUaXBvIGRlIFBlc3NvYVwiIFsobmdNb2RlbCldPVwicGVzc29hLnRpcG9QZXNzb2FcIiAjdGlwb1Blc3NvYT1cIm5nTW9kZWxcIlxyXG4gICAgICAgIG5hbWU9XCJ0aXBvUGVzc29hXCIgKGNoYW5nZSk9XCJvblRpcG9QZXNzb2FDaGFuZ2UoKVwiPlxyXG4gICAgICAgIDxtYXQtcmFkaW8tYnV0dG9uICpuZ0lmPVwicGVzcXVpc2FyUG9yQ1BGXCIgdmFsdWU9XCJ7eyB0aXBvUGVzc29hRW51bSgpLkZJU0lDQX19XCI+UGVzc29hIEbDrXNpY2E8L21hdC1yYWRpby1idXR0b24+XHJcbiAgICAgICAgPG1hdC1yYWRpby1idXR0b24gKm5nSWY9XCJwZXNxdWlzYXJQb3JDTlBKXCIgdmFsdWU9XCJ7e3RpcG9QZXNzb2FFbnVtKCkuSlVSSURJQ0F9fVwiPiBQZXNzb2FcclxuICAgICAgICAgIEp1csOtZGljYTwvbWF0LXJhZGlvLWJ1dHRvbj5cclxuICAgICAgICA8bWF0LXJhZGlvLWJ1dHRvbiAqbmdJZj1cInBlc3F1aXNhclBvckVzdHJhbmdlaXJvXCJcclxuICAgICAgICAgIHZhbHVlPVwie3t0aXBvUGVzc29hRW51bSgpLkVTVFJBTkdFSVJBfX1cIj5Fc3RyYW5nZWlybzwvbWF0LXJhZGlvLWJ1dHRvbj5cclxuICAgICAgPC9tYXQtcmFkaW8tZ3JvdXA+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8ZGl2IGNsYXNzPVwiYnJlYWtcIj48L2Rpdj5cclxuXHJcbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwicGVzc29hLnRpcG9QZXNzb2EgPT09IHRpcG9QZXNzb2FFbnVtKCkuRklTSUNBXCI+XHJcbiAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwib3V0bGluZVwiPlxyXG4gICAgICAgIDxtYXQtbGFiZWw+Q1BGPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgbWF0SW5wdXQgWyhuZ01vZGVsKV09XCJwZXNzb2EuY3BmXCIgbmFtZT1cImNwZlwiICNjcGY9XCJuZ01vZGVsXCIgcmVxdWlyZWQ9e3t0cnVlfX1cclxuICAgICAgICAgIChpbnB1dCk9XCJmb3JtYXRhckNwZigkZXZlbnQpXCIgbWF4bGVuZ3RoPVwiMTRcIiBwbGFjZWhvbGRlcj1cIjAwMC4wMDAuMDAwLTAwXCIgLz5cclxuICAgICAgICA8YnV0dG9uIG1hdFN1ZmZpeCBtYXQtaWNvbi1idXR0b24gdHlwZT1cImJ1dHRvblwiIGFyaWEtbGFiZWw9XCJQZXNxdWlzYXJcIiBbZGlzYWJsZWRdPVwiaXNMb2FkaW5nXCJcclxuICAgICAgICAgIChjbGljayk9XCJwZXNxdWlzYXIoKVwiPlxyXG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFpc0xvYWRpbmc7IGVsc2UgbG9hZGluZ0ljb25cIj5cclxuICAgICAgICAgICAgPG1hdC1pY29uPnNlYXJjaDwvbWF0LWljb24+XHJcbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjbG9hZGluZ0ljb24+XHJcbiAgICAgICAgICAgIDxtYXQtcHJvZ3Jlc3Mtc3Bpbm5lciBbZGlhbWV0ZXJdPVwiMjBcIiBtb2RlPVwiaW5kZXRlcm1pbmF0ZVwiIGNvbG9yPVwicHJpbWFyeVwiIGNsYXNzPVwic3Bpbm5lci1idXR0b25cIj5cclxuICAgICAgICAgICAgPC9tYXQtcHJvZ3Jlc3Mtc3Bpbm5lcj5cclxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwicGVzc29hLnRpcG9QZXNzb2EgPT09IHRpcG9QZXNzb2FFbnVtKCkuRVNUUkFOR0VJUkFcIj5cclxuICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCI+XHJcbiAgICAgICAgPG1hdC1sYWJlbD5QYXNzYXBvcnRlPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgbWF0SW5wdXQgWyhuZ01vZGVsKV09XCJwZXNzb2EucGFzc2Fwb3J0ZVwiIG5hbWU9XCJwYXNzYXBvcnRlXCIgcmVxdWlyZWQ9XCJ0cnVlXCIgLz5cclxuICAgICAgICA8YnV0dG9uIG1hdFN1ZmZpeCBtYXQtaWNvbi1idXR0b24gdHlwZT1cImJ1dHRvblwiIGFyaWEtbGFiZWw9XCJQZXNxdWlzYXJcIiAoY2xpY2spPVwicGVzcXVpc2FyKClcIj5cclxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhaXNMb2FkaW5nOyBlbHNlIGxvYWRpbmdJY29uXCI+XHJcbiAgICAgICAgICAgIDxtYXQtaWNvbj5zZWFyY2g8L21hdC1pY29uPlxyXG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICA8bmctdGVtcGxhdGUgI2xvYWRpbmdJY29uPlxyXG4gICAgICAgICAgICA8bWF0LXByb2dyZXNzLXNwaW5uZXIgW2RpYW1ldGVyXT1cIjIwXCIgbW9kZT1cImluZGV0ZXJtaW5hdGVcIiBjb2xvcj1cInByaW1hcnlcIiBjbGFzcz1cInNwaW5uZXItYnV0dG9uXCI+XHJcbiAgICAgICAgICAgIDwvbWF0LXByb2dyZXNzLXNwaW5uZXI+XHJcbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInBlc3NvYS50aXBvUGVzc29hID09PSB0aXBvUGVzc29hRW51bSgpLkpVUklESUNBXCI+XHJcbiAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwib3V0bGluZVwiPlxyXG4gICAgICAgIDxtYXQtbGFiZWw+Q05QSjwvbWF0LWxhYmVsPlxyXG4gICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIG1hdElucHV0IFsobmdNb2RlbCldPVwicGVzc29hLmNucGpcIiBuYW1lPVwiY25walwiIHJlcXVpcmVkPVwidHJ1ZVwiXHJcbiAgICAgICAgICAoaW5wdXQpPVwiZm9ybWF0YXJDbnBqKCRldmVudClcIiBtYXhsZW5ndGg9XCIxOFwiIHBsYWNlaG9sZGVyPVwiMDAuMDAwLjAwMC8wMDAwLTAwXCIgLz5cclxuICAgICAgICA8YnV0dG9uIG1hdFN1ZmZpeCBtYXQtaWNvbi1idXR0b24gdHlwZT1cImJ1dHRvblwiIGFyaWEtbGFiZWw9XCJQZXNxdWlzYXJcIiAoY2xpY2spPVwicGVzcXVpc2FyKClcIj5cclxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhaXNMb2FkaW5nOyBlbHNlIGxvYWRpbmdJY29uXCI+XHJcbiAgICAgICAgICAgIDxtYXQtaWNvbj5zZWFyY2g8L21hdC1pY29uPlxyXG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICA8bmctdGVtcGxhdGUgI2xvYWRpbmdJY29uPlxyXG4gICAgICAgICAgICA8bWF0LXByb2dyZXNzLXNwaW5uZXIgW2RpYW1ldGVyXT1cIjIwXCIgbW9kZT1cImluZGV0ZXJtaW5hdGVcIiBjb2xvcj1cInByaW1hcnlcIiBjbGFzcz1cInNwaW5uZXItYnV0dG9uXCI+XHJcbiAgICAgICAgICAgIDwvbWF0LXByb2dyZXNzLXNwaW5uZXI+XHJcbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgPC9uZy1jb250YWluZXI+XHJcbiAgPC9kaXY+XHJcbjwvZm9ybT4iXX0=
|