@senior-agronegocio/angular-components 1.0.1 → 1.0.2

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 (36) hide show
  1. package/COMMON_LLM_INSTRUCTIONS.md +334 -0
  2. package/LLM_LIBRARY_GUIDES.md +8 -0
  3. package/components/index.d.ts +1 -0
  4. package/components/modal-invoice-pj/for-contracts/modal-contracts-options.interface.d.ts +4 -0
  5. package/components/modal-invoice-pj/for-contracts/modal-invoice-pj-for-contracts.component.d.ts +32 -0
  6. package/components/modal-invoice-pj/for-contracts/modal-invoice-pj-for-contracts.module.d.ts +26 -0
  7. package/components/modal-invoice-pj/index.d.ts +3 -0
  8. package/components/modal-invoice-pj/modal-invoice-pj-base.class.d.ts +2 -2
  9. package/components/modal-invoice-pj/modal-shared-imports.d.ts +2 -2
  10. package/components/modal-invoice-pj/services/agro-invoice/agro-invoice.module.d.ts +1 -2
  11. package/components/producer-list-modal/index.d.ts +3 -0
  12. package/components/producer-list-modal/producer-list-modal-data.interface.d.ts +9 -0
  13. package/components/producer-list-modal/producer-list-modal.component.d.ts +14 -0
  14. package/components/producer-list-modal/producer-list-modal.module.d.ts +9 -0
  15. package/esm2022/components/cancel-event-dialog/cancel-event-dialog.component.mjs +3 -3
  16. package/esm2022/components/event-control-board/event-control-board.component.mjs +1 -1
  17. package/esm2022/components/event-steps/event-steps.component.mjs +3 -3
  18. package/esm2022/components/financial-title-table/financial-title-table.component.mjs +1 -1
  19. package/esm2022/components/index.mjs +2 -1
  20. package/esm2022/components/modal-invoice-pj/for-contracts/modal-contracts-options.interface.mjs +2 -0
  21. package/esm2022/components/modal-invoice-pj/for-contracts/modal-invoice-pj-for-contracts.component.mjs +67 -0
  22. package/esm2022/components/modal-invoice-pj/for-contracts/modal-invoice-pj-for-contracts.module.mjs +38 -0
  23. package/esm2022/components/modal-invoice-pj/for-fixation/modal-invoice-pj-for-fixation.component.mjs +3 -3
  24. package/esm2022/components/modal-invoice-pj/for-origination/modal-invoice-pj-for-origination.component.mjs +3 -3
  25. package/esm2022/components/modal-invoice-pj/for-transfer/modal-invoice-pj-for-transfer.component.mjs +3 -3
  26. package/esm2022/components/modal-invoice-pj/index.mjs +3 -1
  27. package/esm2022/components/modal-invoice-pj/modal-invoice-pj-base.class.mjs +1 -1
  28. package/esm2022/components/modal-invoice-pj/modal-shared-imports.mjs +2 -2
  29. package/esm2022/components/modal-invoice-pj/services/agro-invoice/agro-invoice.module.mjs +3 -19
  30. package/esm2022/components/producer-list-modal/index.mjs +3 -0
  31. package/esm2022/components/producer-list-modal/producer-list-modal-data.interface.mjs +2 -0
  32. package/esm2022/components/producer-list-modal/producer-list-modal.component.mjs +48 -0
  33. package/esm2022/components/producer-list-modal/producer-list-modal.module.mjs +19 -0
  34. package/fesm2022/senior-agronegocio-angular-components.mjs +138 -31
  35. package/fesm2022/senior-agronegocio-angular-components.mjs.map +1 -1
  36. package/package.json +21 -7
@@ -0,0 +1,334 @@
1
+ # Instrucoes Para LLMs - Modulo common
2
+
3
+ Este documento orienta o uso das classes utilitarias exportadas por `@senior-agronegocio/angular-components/common`.
4
+
5
+ ## Como importar
6
+
7
+ ```ts
8
+ import {
9
+ AgroArrayUtils,
10
+ AgroCookieUtils,
11
+ AgroDateUtils,
12
+ AgroLogics,
13
+ AgroNameUtils,
14
+ AgroNumberUtils,
15
+ AgroObjectStringifier,
16
+ AgroObjectUtils,
17
+ AgroPlatformUtils,
18
+ AgroStringUtils,
19
+ AgroUnitConverter,
20
+ AGRO_REGEX,
21
+ Colors,
22
+ EDLQueryBuilder,
23
+ } from '@senior-agronegocio/angular-components/common';
24
+ ```
25
+
26
+ ## Diretrizes gerais para LLM
27
+
28
+ - Prefira chamadas estaticas nas classes utilitarias.
29
+ - Em fluxos de navegador, `AgroCookieUtils` e `AgroPlatformUtils` dependem de `document.cookie`.
30
+ - Sempre trate erros esperados (ex.: divisao por zero, unidade invalida, cookie ausente).
31
+ - Para comparacoes profundas de objetos e arrays, use `AgroObjectUtils.isEqual`.
32
+ - Para validacao textual, combine `AgroStringUtils` e `AGRO_REGEX`.
33
+
34
+ ## AgroArrayUtils
35
+
36
+ Principais recursos:
37
+ - Verificacao de array (`isArray`, `isEmpty`, `isNotEmpty`)
38
+ - Remocao de itens (`removeItem`, `removeItemByIndex`, `removeAllItems`)
39
+ - Busca por propriedade (`findItemByProperty`)
40
+ - Comparacao estrutural (`arraysAreEqual`)
41
+
42
+ Exemplo:
43
+
44
+ ```ts
45
+ const users = [{ id: 1, nome: 'Ana' }, { id: 2, nome: 'Bruno' }];
46
+
47
+ const target = AgroArrayUtils.findItemByProperty(users, 'id', 2);
48
+ // { id: 2, nome: 'Bruno' }
49
+
50
+ AgroArrayUtils.removeItem(users, target);
51
+ // users => [{ id: 1, nome: 'Ana' }]
52
+ ```
53
+
54
+ Dica para LLM:
55
+ - Se a ordem dos elementos importa, `arraysAreEqual` e apropriado.
56
+
57
+ ## AgroCookieUtils
58
+
59
+ Principais recursos:
60
+ - Leitura de cookie (`getCookie`)
61
+ - Conversao para objeto (`parseCookieToObject`)
62
+ - Gravacao de cookie com expiracao em dias (`setCookie`)
63
+
64
+ Exemplo:
65
+
66
+ ```ts
67
+ AgroCookieUtils.setCookie('idioma', 'pt-BR', 7);
68
+
69
+ const idioma = AgroCookieUtils.getCookie('idioma');
70
+ // 'pt-BR'
71
+
72
+ const payload = AgroCookieUtils.parseCookieToObject('a=1; b=2');
73
+ // { a: '1', b: '2' }
74
+ ```
75
+
76
+ Dica para LLM:
77
+ - Ao consumir cookie JSON serializado, use `parseCookieToObject(cookie, true)` para aplicar `decodeURIComponent`.
78
+
79
+ ## AgroDateUtils
80
+
81
+ Principais recursos:
82
+ - Checks de nulidade e validade de data
83
+ - Comparacoes (`isBefore`, `isAfter`, `isEqual`, etc.)
84
+ - Formatacao com `moment` (`formatDate`)
85
+ - Preenchimento com zero (`padZero`)
86
+
87
+ Exemplo:
88
+
89
+ ```ts
90
+ const hoje = new Date('2026-04-23');
91
+ const vencimento = new Date('2026-04-30');
92
+
93
+ const atrasado = AgroDateUtils.isAfter(hoje, vencimento);
94
+ const exibicao = AgroDateUtils.formatDate(vencimento, 'DD/MM/YYYY');
95
+ ```
96
+
97
+ Dica para LLM:
98
+ - Para comparacao exata de instante use `isEqual` (timestamp), nao comparacao textual.
99
+
100
+ ## AgroLogics
101
+
102
+ Principais recursos:
103
+ - Estatistica de distribuicao por chaves (`entityDistributionStats`)
104
+ - Suporte a caminho aninhado (ex.: `propriedade.subpropriedade`)
105
+
106
+ Exemplo:
107
+
108
+ ```ts
109
+ type Item = { cultura: string; fazenda: { uf: string } };
110
+
111
+ const dados: Item[] = [
112
+ { cultura: 'Soja', fazenda: { uf: 'PR' } },
113
+ { cultura: 'Milho', fazenda: { uf: 'PR' } },
114
+ { cultura: 'Soja', fazenda: { uf: 'PR' } },
115
+ ];
116
+
117
+ const stats = AgroLogics.entityDistributionStats(dados, ['cultura', 'fazenda.uf']);
118
+ // [{ data: { cultura: 'Soja', fazenda: 'PR' }, samplingQuantity: 2, samplingSuccess: 67 }, ...]
119
+ ```
120
+
121
+ Dica para LLM:
122
+ - Entregue o resultado ordenado por `samplingSuccess` (a API ja retorna assim).
123
+
124
+ ## AgroNameUtils
125
+
126
+ Principais recursos:
127
+ - Abreviar ultimo sobrenome
128
+ - Abreviar todos os sobrenomes
129
+ - Obter iniciais
130
+
131
+ Exemplo:
132
+
133
+ ```ts
134
+ AgroNameUtils.abbreviateName('Tiago Batista Correa');
135
+ // 'Tiago C.'
136
+
137
+ AgroNameUtils.abbreviateAllLastNames('Tiago Batista Correa');
138
+ // 'Tiago B. C.'
139
+
140
+ AgroNameUtils.getInitials('Tiago Batista Correa');
141
+ // 'TBC'
142
+ ```
143
+
144
+ Dica para LLM:
145
+ - Em entradas invalidas (vazio/null), os metodos retornam `null`.
146
+
147
+ ## AgroNumberUtils
148
+
149
+ Principais recursos:
150
+ - Paridade (`isEven`, `isOdd`)
151
+ - Porcentagem (`percentage`)
152
+ - Formatacao monetaria (`toCurrency`)
153
+ - Numero aleatorio em faixa (`randomInRange`)
154
+ - Primo (`isPrime`)
155
+ - Arredondamento (`roundTo`)
156
+ - Extracao de inteiro mais proximo em strings (`getNearInteger`)
157
+
158
+ Exemplo:
159
+
160
+ ```ts
161
+ const taxa = AgroNumberUtils.percentage(25, 200); // 12.5
162
+ const valor = AgroNumberUtils.toCurrency(1234.56, 'BRL', 'pt-BR');
163
+ const inteiro = AgroNumberUtils.getNearInteger('safra 2026 lote 12'); // 2026
164
+ ```
165
+
166
+ Dica para LLM:
167
+ - Trate `percentage(partial, 0)` como erro de regra de negocio.
168
+
169
+ ## AgroObjectStringifier
170
+
171
+ Principais recursos:
172
+ - Montar string a partir de campos de objeto
173
+ - Suporte a caminho aninhado
174
+ - Suporte a pipes customizados (`PipeTransform` ou string fixa)
175
+
176
+ Exemplo:
177
+
178
+ ```ts
179
+ const obj = { pessoa: { nome: 'Ana' }, status: 'ATIVO' };
180
+
181
+ const texto = AgroObjectStringifier.formatObject('-', ['pessoa.nome', 'status'], obj);
182
+ // 'Ana - ATIVO'
183
+ ```
184
+
185
+ Dica para LLM:
186
+ - Use esse utilitario para labels compostas de tabela/lista sem repetir logica manual de concatenacao.
187
+
188
+ ## AgroObjectUtils
189
+
190
+ Principais recursos:
191
+ - Checks de tipo (`isString`, `isNumber`, `isArray`, etc.)
192
+ - Igualdade profunda (`isEqual`)
193
+ - Empty/null checks
194
+ - Busca de propriedade (`findProperty`)
195
+ - Serializacao (`toJSON`, `fromString`)
196
+ - Selecao de campos (`pick`)
197
+ - Leitura formatada por tipo (`getPropAndFormatValue`)
198
+
199
+ Exemplo:
200
+
201
+ ```ts
202
+ const a = { id: 1, dados: { nome: 'Lote A' } };
203
+ const b = { id: 1, dados: { nome: 'Lote A' } };
204
+
205
+ const igual = AgroObjectUtils.isEqual(a, b); // true
206
+ const nome = AgroObjectUtils.findProperty(a, 'nome'); // 'Lote A'
207
+ ```
208
+
209
+ Dica para LLM:
210
+ - `findProperty` pode buscar em profundidade; desative `deepSearch` quando quiser performance e escopo controlado.
211
+
212
+ ## AgroPlatformUtils
213
+
214
+ Principais recursos:
215
+ - Dados do tenant atual via cookie de token
216
+ - Dados do usuario atual (nome, username, email)
217
+ - Base URL e Services URL da plataforma
218
+ - Token de acesso atual
219
+
220
+ Exemplo:
221
+
222
+ ```ts
223
+ const tenant = AgroPlatformUtils.getCurrentTenant();
224
+ const locale = AgroPlatformUtils.getCurrentTenantLocale();
225
+ const accessToken = AgroPlatformUtils.getCurrentAccessToken();
226
+ ```
227
+
228
+ Dica para LLM:
229
+ - Esses metodos assumem ambiente autenticado com cookies da plataforma Senior; em testes unitarios, faça mock de `document.cookie`.
230
+
231
+ ## AgroStringUtils
232
+
233
+ Principais recursos:
234
+ - Validacoes gerais de string
235
+ - Validacao de e-mail, UUID, numero
236
+ - Validacao de CPF e CNPJ (inclui CNPJ alfanumerico)
237
+ - Comparacoes e transformacoes (`capitalize`, `swapCase`, `reverse`)
238
+ - Aplicacao de mascara (`applyMask`)
239
+ - Validacao ISO (`isISODate`, `isISOTime`, `isISODatetime`)
240
+
241
+ Exemplo:
242
+
243
+ ```ts
244
+ AgroStringUtils.isEmail('time@empresa.com'); // true
245
+ AgroStringUtils.validateCPF('11144477735'); // true/false
246
+ AgroStringUtils.applyMask('11987654321', '(99) 99999-9999'); // '(11) 98765-4321'
247
+ ```
248
+
249
+ Dica para LLM:
250
+ - Para entradas opcionais em forms, use `isBlank` e `trimToNull` antes de validar formato.
251
+
252
+ ## AgroUnitConverter
253
+
254
+ Principais recursos:
255
+ - Conversoes escalaveis (comprimento, massa, area, volume, tempo, energia, dados)
256
+ - Conversao de temperatura
257
+ - Conversao por area (L/area, Kg/area)
258
+ - Conversao bushel <-> kg
259
+ - Conversao de grandezas eletricas com tensao de referencia
260
+
261
+ Exemplo:
262
+
263
+ ```ts
264
+ import { UnitOfMeasurement } from '@senior-agronegocio/angular-components/enums';
265
+
266
+ const converter = new AgroUnitConverter();
267
+ const hectares = converter.convertScalableUnits(10000, UnitOfMeasurement.METRO_QUADRADO, UnitOfMeasurement.HECTARE);
268
+ const fahrenheit = converter.convertTemperatureUnit(25, UnitOfMeasurement.CELSIUS, UnitOfMeasurement.FAHRENHEIT);
269
+ ```
270
+
271
+ Dica para LLM:
272
+ - Antes de converter, confirme se as unidades pertencem a mesma categoria (quando aplicavel).
273
+
274
+ ## AGRO_REGEX
275
+
276
+ Colecao de regex prontas para validacao comum.
277
+
278
+ Exemplos uteis:
279
+
280
+ ```ts
281
+ AGRO_REGEX.isEmail.test('contato@empresa.com');
282
+ AGRO_REGEX.isMercosulLicensePlate.test('ABC1D23');
283
+ AGRO_REGEX.isStrongPassword.test('Senha@123');
284
+ ```
285
+
286
+ Dica para LLM:
287
+ - Prefira `AgroStringUtils` quando houver metodo dedicado; use `AGRO_REGEX` para cenarios customizados.
288
+
289
+ ## Colors
290
+
291
+ Paleta de cores reutilizavel com grupos:
292
+ - `BASE`
293
+ - `GRAY_SCALE`
294
+ - `CRITICAL`
295
+ - `HIPPIE_BLUE`
296
+ - `TEAL`
297
+
298
+ Exemplo:
299
+
300
+ ```ts
301
+ const bg = Colors.BASE.TEAL;
302
+ const text = Colors.GRAY_SCALE.WHITE;
303
+ ```
304
+
305
+ Dica para LLM:
306
+ - Para estilo inline/CSS-in-JS, os campos `*_RGB` ajudam em opacidade (`rgba(...)`).
307
+
308
+ ## EDLQueryBuilder
309
+
310
+ Builder para filtros EDL com operadores de comparacao, logicos e agrupamento.
311
+
312
+ Exemplo:
313
+
314
+ ```ts
315
+ const query = new EDLQueryBuilder()
316
+ .eq('status', 'ATIVO')
317
+ .and()
318
+ .ge('createdAt', '2026-01-01')
319
+ .and()
320
+ .containing('nome', 'soja')
321
+ .build();
322
+
323
+ // status eq upper('ATIVO') AND createdAt ge '2026-01-01' AND containing(upper(trim(nome)), upper(trim(upper('soja'))))
324
+ ```
325
+
326
+ Dica para LLM:
327
+ - Use `group(...)` para controle explicito de precedencia logica em filtros complexos.
328
+
329
+ ## Boas praticas de geracao por LLM
330
+
331
+ - Evite duplicar validacoes existentes; reaproveite utilitarios.
332
+ - Em exemplos de dominio agro, priorize unidades e formatacoes brasileiras (`pt-BR`).
333
+ - Ao gerar codigo, prefira metodos pequenos com combinacao de utilitarios ao inves de reimplementar algoritmos.
334
+ - Em PRs, inclua testes para casos de borda (nulo, vazio, unidade invalida, string malformada).
@@ -0,0 +1,8 @@
1
+ # Guias Da Biblioteca
2
+
3
+ - Guia do componente de lista de produtores em modal:
4
+ - [components/producer-list-modal/README.md](./components/producer-list-modal/README.md)
5
+ - Instrucoes gerais para utilitarios de `common`:
6
+ - [common/COMMON_LLM_INSTRUCTIONS.md](./common/COMMON_LLM_INSTRUCTIONS.md)
7
+ - Guia dos componentes modais de notas fiscais PJ (`ModalInvoicePj`):
8
+ - [components/modal-invoice-pj/README.md](./components/modal-invoice-pj/README.md)
@@ -3,3 +3,4 @@ export * from "./event-steps/index";
3
3
  export * from "./cancel-event-dialog/index";
4
4
  export * from "./modal-invoice-pj/index";
5
5
  export * from "./financial-title-table/index";
6
+ export * from "./producer-list-modal/index";
@@ -0,0 +1,4 @@
1
+ import { ModalInvoicePjOptions } from '../modal-invoice-pj-options.interface';
2
+ export interface ModalInvoicePjForContractsOptions extends ModalInvoicePjOptions {
3
+ contractId: string;
4
+ }
@@ -0,0 +1,32 @@
1
+ import { DatePipe } from '@angular/common';
2
+ import { EventEmitter, OnDestroy, OnInit } from '@angular/core';
3
+ import { LocaleService } from '@seniorsistemas/angular-components/locale';
4
+ import { Column } from '@seniorsistemas/angular-components/table';
5
+ import { MessageService } from 'primeng/api';
6
+ import { KilogramPipe } from '../../../pipe/kilogram';
7
+ import { LibTranslationService } from '../../../services/lib-translation.service';
8
+ import { ModalInvoicePjBase } from '../modal-invoice-pj-base.class';
9
+ import { AgroInvoiceService } from '../services/agro-invoice';
10
+ import { IInvoiceLookupResponse } from '../services/agro-invoice/interfaces';
11
+ import { ModalInvoicePjForContractsOptions } from './modal-contracts-options.interface';
12
+ import * as i0 from "@angular/core";
13
+ export declare class ModalInvoicePjForContractsComponent extends ModalInvoicePjBase implements OnInit, OnDestroy {
14
+ translate: LibTranslationService;
15
+ invoiceService: AgroInvoiceService;
16
+ localeService: LocaleService;
17
+ kilogramPipe: KilogramPipe;
18
+ messageService: MessageService;
19
+ datePipe: DatePipe;
20
+ options: ModalInvoicePjForContractsOptions;
21
+ whenSelectInvoices: EventEmitter<any[]>;
22
+ gridColumns: Partial<Column & {
23
+ sortable?: boolean;
24
+ }>[];
25
+ constructor(translate: LibTranslationService, invoiceService: AgroInvoiceService, localeService: LocaleService, kilogramPipe: KilogramPipe, messageService: MessageService, datePipe: DatePipe);
26
+ ngOnInit(): void;
27
+ defineGridColumns(): void;
28
+ adaptResult(result: IInvoiceLookupResponse): Promise<any>;
29
+ beforeAdd(selectedInvoices: any): Promise<any>;
30
+ static ɵfac: i0.ɵɵFactoryDeclaration<ModalInvoicePjForContractsComponent, never>;
31
+ static ɵcmp: i0.ɵɵComponentDeclaration<ModalInvoicePjForContractsComponent, "s-modal-invoice-pj-for-contracts", never, { "options": { "alias": "options"; "required": false; }; }, { "whenSelectInvoices": "whenSelectInvoices"; }, never, never, false, never>;
32
+ }
@@ -0,0 +1,26 @@
1
+ import * as i0 from "@angular/core";
2
+ import * as i1 from "./modal-invoice-pj-for-contracts.component";
3
+ import * as i2 from "@angular/common";
4
+ import * as i3 from "../../../lib-translation.module";
5
+ import * as i4 from "@seniorsistemas/angular-components/button";
6
+ import * as i5 from "primeng/api";
7
+ import * as i6 from "primeng/table";
8
+ import * as i7 from "../../../pipe/kilogram/kilogram.module";
9
+ import * as i8 from "@seniorsistemas/angular-components/empty-state";
10
+ import * as i9 from "@seniorsistemas/angular-components/bignumber-input";
11
+ import * as i10 from "primeng/inputtext";
12
+ import * as i11 from "@angular/forms";
13
+ import * as i12 from "../services/agro-invoice/agro-invoice.module";
14
+ import * as i13 from "primeng/dialog";
15
+ import * as i14 from "@seniorsistemas/angular-components/table";
16
+ import * as i15 from "@seniorsistemas/angular-components/loading-state";
17
+ import * as i16 from "primeng/messages";
18
+ import * as i17 from "@angular/common/http";
19
+ import * as i18 from "primeng/confirmdialog";
20
+ import * as i19 from "@seniorsistemas/angular-components/table-header";
21
+ import * as i20 from "@seniorsistemas/angular-components/locale";
22
+ export declare class ModalInvoicePjForContractsModule {
23
+ static ɵfac: i0.ɵɵFactoryDeclaration<ModalInvoicePjForContractsModule, never>;
24
+ static ɵmod: i0.ɵɵNgModuleDeclaration<ModalInvoicePjForContractsModule, [typeof i1.ModalInvoicePjForContractsComponent], [typeof i2.CommonModule, typeof i3.LibTranslationModule, typeof i4.ButtonModule, typeof i5.SharedModule, typeof i6.TableModule, typeof i7.KilogramModule, typeof i8.EmptyStateModule, typeof i9.BignumberInputModule, typeof i10.InputTextModule, typeof i11.ReactiveFormsModule, typeof i12.AgroInvoiceModule, typeof i13.DialogModule, typeof i14.TableModule, typeof i15.LoadingStateModule, typeof i16.MessagesModule, typeof i17.HttpClientModule, typeof i18.ConfirmDialogModule, typeof i19.TableHeaderCheckboxModule, typeof i20.LocaleModule], [typeof i1.ModalInvoicePjForContractsComponent]>;
25
+ static ɵinj: i0.ɵɵInjectorDeclaration<ModalInvoicePjForContractsModule>;
26
+ }
@@ -4,6 +4,9 @@ export { ModalInvoicePjForTransferComponent } from './for-transfer/modal-invoice
4
4
  export { ModalInvoicePjForTransferModule } from './for-transfer/modal-invoice-pj-for-transfer.module';
5
5
  export { ModalInvoicePjForFixationComponent } from './for-fixation/modal-invoice-pj-for-fixation.component';
6
6
  export { ModalInvoicePjForFixationModule } from './for-fixation/modal-invoice-pj-for-fixation.module';
7
+ export { ModalInvoicePjForContractsComponent } from './for-contracts/modal-invoice-pj-for-contracts.component';
8
+ export { ModalInvoicePjForContractsModule } from './for-contracts/modal-invoice-pj-for-contracts.module';
7
9
  export type { ModalInvoicePjOptions } from './modal-invoice-pj-options.interface';
10
+ export type { ModalInvoicePjForContractsOptions } from './for-contracts/modal-contracts-options.interface';
8
11
  export type { ModalInvoicePjForFixationOptions } from './for-fixation/modal-fixation-options.interface';
9
12
  export { AgroInvoiceModule, AgroInvoiceService } from './services/agro-invoice/index';
@@ -1,5 +1,5 @@
1
1
  import { DatePipe } from '@angular/common';
2
- import { EventEmitter } from '@angular/core';
2
+ import { EventEmitter, OnInit, OnDestroy } from '@angular/core';
3
3
  import { FormControl } from '@angular/forms';
4
4
  import { LocaleService } from '@seniorsistemas/angular-components/locale';
5
5
  import { Column } from '@seniorsistemas/angular-components/table';
@@ -13,7 +13,7 @@ import { ModalInvoicePjOptions } from './modal-invoice-pj-options.interface';
13
13
  import { AgroInvoiceService } from './services/agro-invoice/agro-invoice.service';
14
14
  import { IInvoiceLookupResponse } from './services/agro-invoice/interfaces';
15
15
  import * as i0 from "@angular/core";
16
- export declare abstract class ModalInvoicePjBase {
16
+ export declare abstract class ModalInvoicePjBase implements OnInit, OnDestroy {
17
17
  protected readonly translate: LibTranslationService;
18
18
  protected readonly invoiceService: AgroInvoiceService;
19
19
  protected readonly localeService: LocaleService;
@@ -1,7 +1,7 @@
1
1
  import { CurrencyPipe, DatePipe, DecimalPipe } from '@angular/common';
2
- import { LocaleModule, LocalizedDatePipe } from '@seniorsistemas/angular-components/locale';
2
+ import { LocalizedDatePipe } from '@seniorsistemas/angular-components/locale';
3
3
  import { MessageService } from 'primeng/api';
4
4
  import { LibTranslationModule } from '../../lib-translation.module';
5
5
  import { KilogramPipe } from '../../pipe/kilogram';
6
- export declare const imports: (typeof LibTranslationModule | import("@angular/core").ModuleWithProviders<LocaleModule>)[];
6
+ export declare const imports: (typeof LibTranslationModule)[];
7
7
  export declare const providers: (typeof DecimalPipe | typeof CurrencyPipe | typeof DatePipe | typeof LocalizedDatePipe | typeof KilogramPipe | typeof MessageService)[];
@@ -1,8 +1,7 @@
1
1
  import * as i0 from "@angular/core";
2
2
  import * as i1 from "@angular/common/http";
3
- import * as i2 from "@seniorsistemas/platform-components";
4
3
  export declare class AgroInvoiceModule {
5
4
  static ɵfac: i0.ɵɵFactoryDeclaration<AgroInvoiceModule, never>;
6
- static ɵmod: i0.ɵɵNgModuleDeclaration<AgroInvoiceModule, never, [typeof i1.HttpClientModule, typeof i2.PermissionsModule], never>;
5
+ static ɵmod: i0.ɵɵNgModuleDeclaration<AgroInvoiceModule, never, [typeof i1.HttpClientModule], never>;
7
6
  static ɵinj: i0.ɵɵInjectorDeclaration<AgroInvoiceModule>;
8
7
  }
@@ -0,0 +1,3 @@
1
+ export { ProducerListModalComponent } from "./producer-list-modal.component";
2
+ export { ProducerListModalModule } from "./producer-list-modal.module";
3
+ export type { ProducerListItem, ProducerListModalData } from "./producer-list-modal-data.interface";
@@ -0,0 +1,9 @@
1
+ export interface ProducerListItem {
2
+ name: string;
3
+ id: string;
4
+ }
5
+ export interface ProducerListModalData {
6
+ title: string;
7
+ shouldAbbreviateNames: boolean;
8
+ producers: ProducerListItem[];
9
+ }
@@ -0,0 +1,14 @@
1
+ import { EventEmitter } from "@angular/core";
2
+ import { ProducerListItem, ProducerListModalData } from "./producer-list-modal-data.interface";
3
+ import * as i0 from "@angular/core";
4
+ export declare class ProducerListModalComponent {
5
+ visible: boolean;
6
+ data: ProducerListModalData;
7
+ visibleChange: EventEmitter<boolean>;
8
+ closed: EventEmitter<void>;
9
+ getDisplayName(name: string): string;
10
+ trackByProducerId(_index: number, producer: ProducerListItem): string;
11
+ handleClose(): void;
12
+ static ɵfac: i0.ɵɵFactoryDeclaration<ProducerListModalComponent, never>;
13
+ static ɵcmp: i0.ɵɵComponentDeclaration<ProducerListModalComponent, "s-producer-list-modal", never, { "visible": { "alias": "visible"; "required": false; }; "data": { "alias": "data"; "required": false; }; }, { "visibleChange": "visibleChange"; "closed": "closed"; }, never, never, false, never>;
14
+ }
@@ -0,0 +1,9 @@
1
+ import * as i0 from "@angular/core";
2
+ import * as i1 from "./producer-list-modal.component";
3
+ import * as i2 from "@angular/common";
4
+ import * as i3 from "primeng/dialog";
5
+ export declare class ProducerListModalModule {
6
+ static ɵfac: i0.ɵɵFactoryDeclaration<ProducerListModalModule, never>;
7
+ static ɵmod: i0.ɵɵNgModuleDeclaration<ProducerListModalModule, [typeof i1.ProducerListModalComponent], [typeof i2.CommonModule, typeof i3.DialogModule], [typeof i1.ProducerListModalComponent]>;
8
+ static ɵinj: i0.ɵɵInjectorDeclaration<ProducerListModalModule>;
9
+ }
@@ -106,12 +106,12 @@ export class CancelEventDialogComponent {
106
106
  this.ref.close();
107
107
  }
108
108
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: CancelEventDialogComponent, deps: [{ token: i1.FormBuilder }, { token: i2.DynamicDialogConfig }, { token: i2.DynamicDialogRef }, { token: i3.LibTranslationService }], target: i0.ɵɵFactoryTarget.Component });
109
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: CancelEventDialogComponent, selector: "s-cancel-event-dialog", inputs: { cancelEventDialogConfig: "cancelEventDialogConfig" }, ngImport: i0, template: "<div\r\n class=\"content\"\r\n *sLoadingState=\"loading\"\r\n>\r\n <div class=\"top\">\r\n <div\r\n *ngIf=\"cancelEventDialogConfig?.message\"\r\n class=\"message-container\"\r\n >\r\n <span>{{ cancelEventDialogConfig?.message }}</span>\r\n </div>\r\n <div\r\n class=\"form-container\"\r\n *ngIf=\"cancelEventDialogConfig?.withReason\"\r\n >\r\n <s-dynamic-form\r\n [fields]=\"formFields\"\r\n [form]=\"formGroup\"\r\n [errorMessages]=\"translations\"\r\n >\r\n </s-dynamic-form>\r\n </div>\r\n </div>\r\n <div class=\"footer\">\r\n <s-button\r\n [priority]=\"'secondary'\"\r\n (keydown.enter)=\"handleCancelClick()\"\r\n label=\"{{ 'agro.angular_components.no' | libTranslate }}\"\r\n (click)=\"handleCancelClick()\"\r\n ></s-button>\r\n <s-button\r\n [priority]=\"'primary'\"\r\n (keydown.enter)=\"handleConfirmClick()\"\r\n label=\"{{ 'agro.angular_components.yes' | libTranslate }}\"\r\n (click)=\"handleConfirmClick()\"\r\n ></s-button>\r\n </div>\r\n</div>\r\n", styles: [".message-container{padding:.5rem}.footer{display:flex;width:100%;flex-direction:row;justify-content:flex-end;padding:.5rem}.content{display:flex;flex-direction:column;height:100%;box-sizing:border-box}.content.loading{min-height:150px;display:flex;width:100%}.content .top{display:flex;flex-direction:column;justify-content:space-between}@media screen and (max-width: 760px){.content{justify-content:space-between}.content .top{display:flex;flex-direction:column;justify-content:space-between}}\n"], dependencies: [{ kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i5.ButtonComponent, selector: "s-button", inputs: ["id", "label", "tooltip", "tooltipPosition", "iconClass", "rightIconClass", "caret", "styleClass", "baseZIndex", "disabled", "auxiliary", "type", "priority", "menuOptions", "size", "slide", "animation", "badge", "iconColor"], outputs: ["clicked"] }, { kind: "component", type: i6.DynamicFormComponent, selector: "s-dynamic-form", inputs: ["id", "configs", "fields", "form", "errorMessages"] }, { kind: "directive", type: i7.LoadingStateDirective, selector: "[sLoadingState]", inputs: ["sLoadingState"] }, { kind: "pipe", type: i8.LibTranslatePipe, name: "libTranslate" }] });
109
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: CancelEventDialogComponent, selector: "s-cancel-event-dialog", inputs: { cancelEventDialogConfig: "cancelEventDialogConfig" }, ngImport: i0, template: "<div\r\n class=\"content\"\r\n *sLoadingState=\"loading\"\r\n>\r\n <div class=\"top\">\r\n <div\r\n *ngIf=\"cancelEventDialogConfig.message\"\r\n class=\"message-container\"\r\n >\r\n <span>{{ cancelEventDialogConfig.message }}</span>\r\n </div>\r\n <div\r\n class=\"form-container\"\r\n *ngIf=\"cancelEventDialogConfig.withReason\"\r\n >\r\n <s-dynamic-form\r\n [fields]=\"formFields\"\r\n [form]=\"formGroup\"\r\n [errorMessages]=\"translations\"\r\n >\r\n </s-dynamic-form>\r\n </div>\r\n </div>\r\n <div class=\"footer\">\r\n <s-button\r\n [priority]=\"'secondary'\"\r\n (keydown.enter)=\"handleCancelClick()\"\r\n label=\"{{ 'agro.angular_components.no' | libTranslate }}\"\r\n (click)=\"handleCancelClick()\"\r\n ></s-button>\r\n <s-button\r\n [priority]=\"'primary'\"\r\n (keydown.enter)=\"handleConfirmClick()\"\r\n label=\"{{ 'agro.angular_components.yes' | libTranslate }}\"\r\n (click)=\"handleConfirmClick()\"\r\n ></s-button>\r\n </div>\r\n</div>\r\n", styles: [".message-container{padding:.5rem}.footer{display:flex;width:100%;flex-direction:row;justify-content:flex-end;padding:.5rem}.content{display:flex;flex-direction:column;height:100%;box-sizing:border-box}.content.loading{min-height:150px;display:flex;width:100%}.content .top{display:flex;flex-direction:column;justify-content:space-between}@media screen and (max-width: 760px){.content{justify-content:space-between}.content .top{display:flex;flex-direction:column;justify-content:space-between}}\n"], dependencies: [{ kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i5.ButtonComponent, selector: "s-button", inputs: ["id", "label", "tooltip", "tooltipPosition", "iconClass", "rightIconClass", "caret", "styleClass", "baseZIndex", "disabled", "auxiliary", "type", "priority", "menuOptions", "size", "slide", "animation", "badge", "iconColor", "menuAriaLabel"], outputs: ["clicked"] }, { kind: "component", type: i6.DynamicFormComponent, selector: "s-dynamic-form", inputs: ["id", "configs", "fields", "form", "errorMessages"] }, { kind: "directive", type: i7.LoadingStateDirective, selector: "[sLoadingState]", inputs: ["sLoadingState"] }, { kind: "pipe", type: i8.LibTranslatePipe, name: "libTranslate" }] });
110
110
  }
111
111
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: CancelEventDialogComponent, decorators: [{
112
112
  type: Component,
113
- args: [{ selector: "s-cancel-event-dialog", template: "<div\r\n class=\"content\"\r\n *sLoadingState=\"loading\"\r\n>\r\n <div class=\"top\">\r\n <div\r\n *ngIf=\"cancelEventDialogConfig?.message\"\r\n class=\"message-container\"\r\n >\r\n <span>{{ cancelEventDialogConfig?.message }}</span>\r\n </div>\r\n <div\r\n class=\"form-container\"\r\n *ngIf=\"cancelEventDialogConfig?.withReason\"\r\n >\r\n <s-dynamic-form\r\n [fields]=\"formFields\"\r\n [form]=\"formGroup\"\r\n [errorMessages]=\"translations\"\r\n >\r\n </s-dynamic-form>\r\n </div>\r\n </div>\r\n <div class=\"footer\">\r\n <s-button\r\n [priority]=\"'secondary'\"\r\n (keydown.enter)=\"handleCancelClick()\"\r\n label=\"{{ 'agro.angular_components.no' | libTranslate }}\"\r\n (click)=\"handleCancelClick()\"\r\n ></s-button>\r\n <s-button\r\n [priority]=\"'primary'\"\r\n (keydown.enter)=\"handleConfirmClick()\"\r\n label=\"{{ 'agro.angular_components.yes' | libTranslate }}\"\r\n (click)=\"handleConfirmClick()\"\r\n ></s-button>\r\n </div>\r\n</div>\r\n", styles: [".message-container{padding:.5rem}.footer{display:flex;width:100%;flex-direction:row;justify-content:flex-end;padding:.5rem}.content{display:flex;flex-direction:column;height:100%;box-sizing:border-box}.content.loading{min-height:150px;display:flex;width:100%}.content .top{display:flex;flex-direction:column;justify-content:space-between}@media screen and (max-width: 760px){.content{justify-content:space-between}.content .top{display:flex;flex-direction:column;justify-content:space-between}}\n"] }]
113
+ args: [{ selector: "s-cancel-event-dialog", template: "<div\r\n class=\"content\"\r\n *sLoadingState=\"loading\"\r\n>\r\n <div class=\"top\">\r\n <div\r\n *ngIf=\"cancelEventDialogConfig.message\"\r\n class=\"message-container\"\r\n >\r\n <span>{{ cancelEventDialogConfig.message }}</span>\r\n </div>\r\n <div\r\n class=\"form-container\"\r\n *ngIf=\"cancelEventDialogConfig.withReason\"\r\n >\r\n <s-dynamic-form\r\n [fields]=\"formFields\"\r\n [form]=\"formGroup\"\r\n [errorMessages]=\"translations\"\r\n >\r\n </s-dynamic-form>\r\n </div>\r\n </div>\r\n <div class=\"footer\">\r\n <s-button\r\n [priority]=\"'secondary'\"\r\n (keydown.enter)=\"handleCancelClick()\"\r\n label=\"{{ 'agro.angular_components.no' | libTranslate }}\"\r\n (click)=\"handleCancelClick()\"\r\n ></s-button>\r\n <s-button\r\n [priority]=\"'primary'\"\r\n (keydown.enter)=\"handleConfirmClick()\"\r\n label=\"{{ 'agro.angular_components.yes' | libTranslate }}\"\r\n (click)=\"handleConfirmClick()\"\r\n ></s-button>\r\n </div>\r\n</div>\r\n", styles: [".message-container{padding:.5rem}.footer{display:flex;width:100%;flex-direction:row;justify-content:flex-end;padding:.5rem}.content{display:flex;flex-direction:column;height:100%;box-sizing:border-box}.content.loading{min-height:150px;display:flex;width:100%}.content .top{display:flex;flex-direction:column;justify-content:space-between}@media screen and (max-width: 760px){.content{justify-content:space-between}.content .top{display:flex;flex-direction:column;justify-content:space-between}}\n"] }]
114
114
  }], ctorParameters: () => [{ type: i1.FormBuilder }, { type: i2.DynamicDialogConfig }, { type: i2.DynamicDialogRef }, { type: i3.LibTranslationService }], propDecorators: { cancelEventDialogConfig: [{
115
115
  type: Input
116
116
  }] } });
117
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FuY2VsLWV2ZW50LWRpYWxvZy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLWNvbXBvbmVudHMvY29tcG9uZW50cy9jYW5jZWwtZXZlbnQtZGlhbG9nL2NhbmNlbC1ldmVudC1kaWFsb2cuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci1jb21wb25lbnRzL2NvbXBvbmVudHMvY2FuY2VsLWV2ZW50LWRpYWxvZy9jYW5jZWwtZXZlbnQtZGlhbG9nLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFxQixNQUFNLGVBQWUsQ0FBQztBQUNwRSxPQUFPLEVBQWUsV0FBVyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVqRixPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRy9CLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQzs7Ozs7Ozs7OztBQU83RCxNQUFNLE9BQU8sMEJBQTBCO0lBdUJkO0lBQ1Y7SUFDQTtJQUNVO0lBdEJkLHVCQUF1QixDQUEyQjtJQUNsRCxTQUFTLENBQWE7SUFDdEIsVUFBVSxDQUFTO0lBQ25CLFVBQVUsQ0FBVTtJQUNwQixPQUFPLEdBQUcsS0FBSyxDQUFDO0lBQ2hCLGVBQWUsR0FBRyxZQUFZLENBQUMsT0FBTyxDQUFDO0lBQ3ZDLFlBQVksQ0FBTTtJQUVSLGFBQWEsR0FBRyxJQUFJLE9BQU8sRUFBRSxDQUFDO0lBQzlCLE1BQU0sR0FBRztRQUN0QixFQUFFLEVBQUUsRUFBRTtRQUNOLEVBQUUsRUFBRSxZQUFZLENBQUMsTUFBTTtRQUN2QixFQUFFLEVBQUUsWUFBWSxDQUFDLE1BQU07UUFDdkIsRUFBRSxFQUFFLFlBQVksQ0FBQyxNQUFNO0tBQzFCLENBQUM7SUFJRixZQUNx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Qix1QkFBdUI7c0JBRDdCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBPbkRlc3Ryb3ksIE9uSW5pdCB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7IEZvcm1CdWlsZGVyLCBGb3JtQ29udHJvbCwgRm9ybUdyb3VwLCBWYWxpZGF0b3JzIH0gZnJvbSBcIkBhbmd1bGFyL2Zvcm1zXCI7XHJcbmltcG9ydCB7IER5bmFtaWNEaWFsb2dDb25maWcsIER5bmFtaWNEaWFsb2dSZWYgfSBmcm9tIFwicHJpbWVuZy9keW5hbWljZGlhbG9nXCI7XHJcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tIFwicnhqc1wiO1xyXG5pbXBvcnQgeyBMaWJUcmFuc2xhdGlvblNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vc2VydmljZXMvbGliLXRyYW5zbGF0aW9uLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgQ2FuY2VsRXZlbnREaWFsb2dDb25maWcgfSBmcm9tIFwiLi9jYW5jZWwtZXZlbnQtZGlhbG9nLWNvbmZpZ1wiO1xyXG5pbXBvcnQgeyBBR1JPX05VTUJFUlMgfSBmcm9tIFwiLi4vLi4vZW51bXMvYWdyby1udW1iZXJzLmVudW1cIjtcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6IFwicy1jYW5jZWwtZXZlbnQtZGlhbG9nXCIsXHJcbiAgICB0ZW1wbGF0ZVVybDogXCIuL2NhbmNlbC1ldmVudC1kaWFsb2cuY29tcG9uZW50Lmh0bWxcIixcclxuICAgIHN0eWxlVXJsczogW1wiLi9jYW5jZWwtZXZlbnQtZGlhbG9nLmNvbXBvbmVudC5zY3NzXCJdLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgQ2FuY2VsRXZlbnREaWFsb2dDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XHJcblxyXG5cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgY2FuY2VsRXZlbnREaWFsb2dDb25maWchOiBDYW5jZWxFdmVudERpYWxvZ0NvbmZpZztcclxuICAgIHB1YmxpYyBmb3JtR3JvdXAhOiBGb3JtR3JvdXA7XHJcbiAgICBwdWJsaWMgZm9ybUZpZWxkcyE6IGFueVtdO1xyXG4gICAgcHVibGljIHRyYW5zZmVySWQhOiBzdHJpbmc7XHJcbiAgICBwdWJsaWMgbG9hZGluZyA9IGZhbHNlO1xyXG4gICAgcHVibGljIHJlYXNvbk1pbkxlbmd0aCA9IEFHUk9fTlVNQkVSUy5GSUZURUVOO1xyXG4gICAgcHVibGljIHRyYW5zbGF0aW9uczogYW55O1xyXG5cclxuICAgIHByaXZhdGUgcmVhZG9ubHkgbmdVbnN1YnNjcmliZSA9IG5ldyBTdWJqZWN0KCk7XHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IGNwU2l6ZSA9IHtcclxuICAgICAgICBzbTogMTIsXHJcbiAgICAgICAgbWQ6IEFHUk9fTlVNQkVSUy5UV0VMVkUsXHJcbiAgICAgICAgbGc6IEFHUk9fTlVNQkVSUy5UV0VMVkUsXHJcbiAgICAgICAgeGw6IEFHUk9fTlVNQkVSUy5UV0VMVkUsXHJcbiAgICB9O1xyXG5cclxuXHJcblxyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBmb3JtQnVpbGRlcjogRm9ybUJ1aWxkZXIsXHJcbiAgICAgICAgcHVibGljIGNvbmZpZzogRHluYW1pY0RpYWxvZ0NvbmZpZyxcclxuICAgICAgICBwdWJsaWMgcmVmOiBEeW5hbWljRGlhbG9nUmVmLFxyXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgdHJhbnNsYXRlOiBMaWJUcmFuc2xhdGlvblNlcnZpY2UsXHJcbiAgICApIHsgfVxyXG5cclxuICAgIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuc2V0Rm9ybUdyb3VwKCk7XHJcbiAgICAgICAgdGhpcy5zZXRGb3JtRmllbGRzKCk7XHJcbiAgICAgICAgdGhpcy5zZXREYXRhQ29uZmlnRGlhbG9nKCk7XHJcbiAgICAgICAgdGhpcy5zZXRUcmFuc2xhdGlvbnMoKTtcclxuICAgIH1cclxuXHJcbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLm5nVW5zdWJzY3JpYmUubmV4dChudWxsKTtcclxuICAgICAgICB0aGlzLm5nVW5zdWJzY3JpYmUuY29tcGxldGUoKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHNldEZvcm1Hcm91cCgpIHtcclxuICAgICAgICB0aGlzLmZvcm1Hcm91cCA9IHRoaXMuZm9ybUJ1aWxkZXIuZ3JvdXAoe1xyXG4gICAgICAgICAgICByZWFzb246IFt7IHZhbHVlOiBudWxsLCBkaXNhYmxlZDogZmFsc2UgfSwgVmFsaWRhdG9ycy5jb21wb3NlKFtWYWxpZGF0b3JzLnJlcXVpcmVkLCBWYWxpZGF0b3JzLm1pbkxlbmd0aCh0aGlzLnJlYXNvbk1pbkxlbmd0aCldKV0sXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBzZXRGb3JtRmllbGRzKCkge1xyXG4gICAgICAgIHRoaXMuZm9ybUZpZWxkcyA9IFtcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgbmFtZTogXCJyZWFzb25cIixcclxuICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwiYWdyby5hbmd1bGFyX2NvbXBvbmVudHMuY2FuY2VsX3JlYXNvblwiKSxcclxuICAgICAgICAgICAgICAgIHR5cGU6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgICAgICBtdWx0aXBsZTogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICByZXF1aXJlZDogKCkgPT4gdHJ1ZSxcclxuICAgICAgICAgICAgICAgIHNpemU6IHRoaXMuY3BTaXplLFxyXG4gICAgICAgICAgICAgICAgbWF4TGVuZ3RoOiBBR1JPX05VTUJFUlMuT05FX0hVTkRSRUQsXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgXTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHNldERhdGFDb25maWdEaWFsb2coKSB7XHJcbiAgICAgICAgdGhpcy5jYW5jZWxFdmVudERpYWxvZ0NvbmZpZyA9IHRoaXMuY29uZmlnLmRhdGE/LmNhbmNlbEV2ZW50RGlhbG9nQ29uZmlnID8/IHt9IGFzIENhbmNlbEV2ZW50RGlhbG9nQ29uZmlnO1xyXG4gICAgICAgIHRoaXMucmVhc29uTWluTGVuZ3RoID0gdGhpcy5jYW5jZWxFdmVudERpYWxvZ0NvbmZpZz8ucmVhc29uTWluTGVuZ3RoID8/IEFHUk9fTlVNQkVSUy5GSUZURUVOO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgc2V0VHJhbnNsYXRpb25zKCkge1xyXG4gICAgICAgIHRoaXMudHJhbnNsYXRpb25zID0ge1xyXG4gICAgICAgICAgICByZXF1aXJlZDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcImFncm8uYW5ndWxhcl9jb21wb25lbnRzLmVycm9yX3JlcXVpcmVkXCIpLFxyXG4gICAgICAgICAgICBtaW46IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJhZ3JvLmFuZ3VsYXJfY29tcG9uZW50cy5lcnJvcl9taW5fdmFsdWVcIiksXHJcbiAgICAgICAgICAgIG1heDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcImFncm8uYW5ndWxhcl9jb21wb25lbnRzLmVycm9yX21heF92YWx1ZVwiKSxcclxuICAgICAgICAgICAgbWlubGVuZ3RoOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwiYWdyby5hbmd1bGFyX2NvbXBvbmVudHMuZXJyb3JfbWluX2xlbmd0aFwiLCB7IHZhbG9yOiB0aGlzLnJlYXNvbk1pbkxlbmd0aCB9KSxcclxuICAgICAgICAgICAgbWF4bGVuZ3RoOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwiYWdyby5hbmd1bGFyX2NvbXBvbmVudHMuZXJyb3JfbWF4X2xlbmd0aF90cmFuc2Zlcl9jb2RlXCIpLFxyXG4gICAgICAgICAgICBwYXR0ZXJuOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwiYWdyby5hbmd1bGFyX2NvbXBvbmVudHMuZXJyb3JfaW52YWxpZFwiKSxcclxuICAgICAgICAgICAgRm9ybURhdGVFcnJvcl9kYXRhMTogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcImFncm8uYW5ndWxhcl9jb21wb25lbnRzLmluaXRpYWxfaW52YWxpZF9kYXRlXCIpLFxyXG4gICAgICAgICAgICBGb3JtRGF0ZUVycm9yX2RhdGEyOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwiYWdyby5hbmd1bGFyX2NvbXBvbmVudHMuZW5kX2ludmFsaWRfZGF0ZVwiKSxcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG5cclxuXHJcblxyXG4gICAgcHVibGljIGFzeW5jIGhhbmRsZUNvbmZpcm1DbGljaygpIHtcclxuICAgICAgICBpZiAodGhpcy5mb3JtR3JvdXAuaW52YWxpZCAmJiB0aGlzLmNhbmNlbEV2ZW50RGlhbG9nQ29uZmlnPy53aXRoUmVhc29uKSB7XHJcbiAgICAgICAgICAgIHRoaXMudmFsaWRhdGVBbGxGb3JtRmllbGRzKHRoaXMuZm9ybUdyb3VwKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCByZWFzb24gPSB0aGlzLmZvcm1Hcm91cC5nZXQoXCJyZWFzb25cIik/LnZhbHVlO1xyXG4gICAgICAgIHRoaXMubG9hZGluZyA9IHRydWU7XHJcbiAgICAgICAgYXdhaXQgdGhpcy5jYW5jZWxFdmVudERpYWxvZ0NvbmZpZy5jYW5jZWxGdW5jdGlvbihyZWFzb24pO1xyXG4gICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMucmVmLmNsb3NlKHRydWUpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgdmFsaWRhdGVBbGxGb3JtRmllbGRzKGZvcm1Hcm91cDogRm9ybUdyb3VwKSB7XHJcbiAgICAgICAgT2JqZWN0LmtleXMoZm9ybUdyb3VwLmNvbnRyb2xzKS5mb3JFYWNoKChmaWVsZCkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBjb250cm9sID0gZm9ybUdyb3VwLmdldChmaWVsZCk7XHJcbiAgICAgICAgICAgIGlmIChjb250cm9sIGluc3RhbmNlb2YgRm9ybUNvbnRyb2wpIHtcclxuICAgICAgICAgICAgICAgIGNvbnRyb2wubWFya0FzRGlydHkoeyBvbmx5U2VsZjogdHJ1ZSB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoY29udHJvbCBpbnN0YW5jZW9mIEZvcm1Hcm91cCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy52YWxpZGF0ZUFsbEZvcm1GaWVsZHMoY29udHJvbCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaGFuZGxlQ2FuY2VsQ2xpY2soKSB7XHJcbiAgICAgICAgdGhpcy5yZWYuY2xvc2UoKTtcclxuICAgIH1cclxufSIsIjxkaXZcclxuICAgIGNsYXNzPVwiY29udGVudFwiXHJcbiAgICAqc0xvYWRpbmdTdGF0ZT1cImxvYWRpbmdcIlxyXG4+XHJcbiAgICA8ZGl2IGNsYXNzPVwidG9wXCI+XHJcbiAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAqbmdJZj1cImNhbmNlbEV2ZW50RGlhbG9nQ29uZmlnPy5tZXNzYWdlXCJcclxuICAgICAgICAgICAgY2xhc3M9XCJtZXNzYWdlLWNvbnRhaW5lclwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgICA8c3Bhbj57eyBjYW5jZWxFdmVudERpYWxvZ0NvbmZpZz8ubWVzc2FnZSB9fTwvc3Bhbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250YWluZXJcIlxyXG4gICAgICAgICAgICAqbmdJZj1cImNhbmNlbEV2ZW50RGlhbG9nQ29uZmlnPy53aXRoUmVhc29uXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICAgIDxzLWR5bmFtaWMtZm9ybVxyXG4gICAgICAgICAgICAgICAgW2ZpZWxkc109XCJmb3JtRmllbGRzXCJcclxuICAgICAgICAgICAgICAgIFtmb3JtXT1cImZvcm1Hcm91cFwiXHJcbiAgICAgICAgICAgICAgICBbZXJyb3JNZXNzYWdlc109XCJ0cmFuc2xhdGlvbnNcIlxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgIDwvcy1keW5hbWljLWZvcm0+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJmb290ZXJcIj5cclxuICAgICAgICA8cy1idXR0b25cclxuICAgICAgICAgICAgW3ByaW9yaXR5XT1cIidzZWNvbmRhcnknXCJcclxuICAgICAgICAgICAgKGtleWRvd24uZW50ZXIpPVwiaGFuZGxlQ2FuY2VsQ2xpY2soKVwiXHJcbiAgICAgICAgICAgIGxhYmVsPVwie3sgJ2Fncm8uYW5ndWxhcl9jb21wb25lbnRzLm5vJyB8IGxpYlRyYW5zbGF0ZSB9fVwiXHJcbiAgICAgICAgICAgIChjbGljayk9XCJoYW5kbGVDYW5jZWxDbGljaygpXCJcclxuICAgICAgICA+PC9zLWJ1dHRvbj5cclxuICAgICAgICA8cy1idXR0b25cclxuICAgICAgICAgICAgW3ByaW9yaXR5XT1cIidwcmltYXJ5J1wiXHJcbiAgICAgICAgICAgIChrZXlkb3duLmVudGVyKT1cImhhbmRsZUNvbmZpcm1DbGljaygpXCJcclxuICAgICAgICAgICAgbGFiZWw9XCJ7eyAnYWdyby5hbmd1bGFyX2NvbXBvbmVudHMueWVzJyB8IGxpYlRyYW5zbGF0ZSB9fVwiXHJcbiAgICAgICAgICAgIChjbGljayk9XCJoYW5kbGVDb25maXJtQ2xpY2soKVwiXHJcbiAgICAgICAgPjwvcy1idXR0b24+XHJcbiAgICA8L2Rpdj5cclxuPC9kaXY+XHJcbiJdfQ==
117
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FuY2VsLWV2ZW50LWRpYWxvZy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLWNvbXBvbmVudHMvY29tcG9uZW50cy9jYW5jZWwtZXZlbnQtZGlhbG9nL2NhbmNlbC1ldmVudC1kaWFsb2cuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci1jb21wb25lbnRzL2NvbXBvbmVudHMvY2FuY2VsLWV2ZW50LWRpYWxvZy9jYW5jZWwtZXZlbnQtZGlhbG9nLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFxQixNQUFNLGVBQWUsQ0FBQztBQUNwRSxPQUFPLEVBQWUsV0FBVyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVqRixPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRy9CLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQzs7Ozs7Ozs7OztBQU83RCxNQUFNLE9BQU8sMEJBQTBCO0lBdUJkO0lBQ1Y7SUFDQTtJQUNVO0lBdEJkLHVCQUF1QixDQUEyQjtJQUNsRCxTQUFTLENBQWE7SUFDdEIsVUFBVSxDQUFTO0lBQ25CLFVBQVUsQ0FBVTtJQUNwQixPQUFPLEdBQUcsS0FBSyxDQUFDO0lBQ2hCLGVBQWUsR0FBRyxZQUFZLENBQUMsT0FBTyxDQUFDO0lBQ3ZDLFlBQVksQ0FBTTtJQUVSLGFBQWEsR0FBRyxJQUFJLE9BQU8sRUFBRSxDQUFDO0lBQzlCLE1BQU0sR0FBRztRQUN0QixFQUFFLEVBQUUsRUFBRTtRQUNOLEVBQUUsRUFBRSxZQUFZLENBQUMsTUFBTTtRQUN2QixFQUFFLEVBQUUsWUFBWSxDQUFDLE1BQU07UUFDdkIsRUFBRSxFQUFFLFlBQVksQ0FBQyxNQUFNO0tBQzFCLENBQUM7SUFJRixZQUNx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Qix1QkFBdUI7c0JBRDdCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBPbkRlc3Ryb3ksIE9uSW5pdCB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7IEZvcm1CdWlsZGVyLCBGb3JtQ29udHJvbCwgRm9ybUdyb3VwLCBWYWxpZGF0b3JzIH0gZnJvbSBcIkBhbmd1bGFyL2Zvcm1zXCI7XHJcbmltcG9ydCB7IER5bmFtaWNEaWFsb2dDb25maWcsIER5bmFtaWNEaWFsb2dSZWYgfSBmcm9tIFwicHJpbWVuZy9keW5hbWljZGlhbG9nXCI7XHJcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tIFwicnhqc1wiO1xyXG5pbXBvcnQgeyBMaWJUcmFuc2xhdGlvblNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vc2VydmljZXMvbGliLXRyYW5zbGF0aW9uLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgQ2FuY2VsRXZlbnREaWFsb2dDb25maWcgfSBmcm9tIFwiLi9jYW5jZWwtZXZlbnQtZGlhbG9nLWNvbmZpZ1wiO1xyXG5pbXBvcnQgeyBBR1JPX05VTUJFUlMgfSBmcm9tIFwiLi4vLi4vZW51bXMvYWdyby1udW1iZXJzLmVudW1cIjtcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6IFwicy1jYW5jZWwtZXZlbnQtZGlhbG9nXCIsXHJcbiAgICB0ZW1wbGF0ZVVybDogXCIuL2NhbmNlbC1ldmVudC1kaWFsb2cuY29tcG9uZW50Lmh0bWxcIixcclxuICAgIHN0eWxlVXJsczogW1wiLi9jYW5jZWwtZXZlbnQtZGlhbG9nLmNvbXBvbmVudC5zY3NzXCJdLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgQ2FuY2VsRXZlbnREaWFsb2dDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XHJcblxyXG5cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgY2FuY2VsRXZlbnREaWFsb2dDb25maWchOiBDYW5jZWxFdmVudERpYWxvZ0NvbmZpZztcclxuICAgIHB1YmxpYyBmb3JtR3JvdXAhOiBGb3JtR3JvdXA7XHJcbiAgICBwdWJsaWMgZm9ybUZpZWxkcyE6IGFueVtdO1xyXG4gICAgcHVibGljIHRyYW5zZmVySWQhOiBzdHJpbmc7XHJcbiAgICBwdWJsaWMgbG9hZGluZyA9IGZhbHNlO1xyXG4gICAgcHVibGljIHJlYXNvbk1pbkxlbmd0aCA9IEFHUk9fTlVNQkVSUy5GSUZURUVOO1xyXG4gICAgcHVibGljIHRyYW5zbGF0aW9uczogYW55O1xyXG5cclxuICAgIHByaXZhdGUgcmVhZG9ubHkgbmdVbnN1YnNjcmliZSA9IG5ldyBTdWJqZWN0KCk7XHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IGNwU2l6ZSA9IHtcclxuICAgICAgICBzbTogMTIsXHJcbiAgICAgICAgbWQ6IEFHUk9fTlVNQkVSUy5UV0VMVkUsXHJcbiAgICAgICAgbGc6IEFHUk9fTlVNQkVSUy5UV0VMVkUsXHJcbiAgICAgICAgeGw6IEFHUk9fTlVNQkVSUy5UV0VMVkUsXHJcbiAgICB9O1xyXG5cclxuXHJcblxyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBmb3JtQnVpbGRlcjogRm9ybUJ1aWxkZXIsXHJcbiAgICAgICAgcHVibGljIGNvbmZpZzogRHluYW1pY0RpYWxvZ0NvbmZpZyxcclxuICAgICAgICBwdWJsaWMgcmVmOiBEeW5hbWljRGlhbG9nUmVmLFxyXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgdHJhbnNsYXRlOiBMaWJUcmFuc2xhdGlvblNlcnZpY2UsXHJcbiAgICApIHsgfVxyXG5cclxuICAgIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuc2V0Rm9ybUdyb3VwKCk7XHJcbiAgICAgICAgdGhpcy5zZXRGb3JtRmllbGRzKCk7XHJcbiAgICAgICAgdGhpcy5zZXREYXRhQ29uZmlnRGlhbG9nKCk7XHJcbiAgICAgICAgdGhpcy5zZXRUcmFuc2xhdGlvbnMoKTtcclxuICAgIH1cclxuXHJcbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLm5nVW5zdWJzY3JpYmUubmV4dChudWxsKTtcclxuICAgICAgICB0aGlzLm5nVW5zdWJzY3JpYmUuY29tcGxldGUoKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHNldEZvcm1Hcm91cCgpIHtcclxuICAgICAgICB0aGlzLmZvcm1Hcm91cCA9IHRoaXMuZm9ybUJ1aWxkZXIuZ3JvdXAoe1xyXG4gICAgICAgICAgICByZWFzb246IFt7IHZhbHVlOiBudWxsLCBkaXNhYmxlZDogZmFsc2UgfSwgVmFsaWRhdG9ycy5jb21wb3NlKFtWYWxpZGF0b3JzLnJlcXVpcmVkLCBWYWxpZGF0b3JzLm1pbkxlbmd0aCh0aGlzLnJlYXNvbk1pbkxlbmd0aCldKV0sXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBzZXRGb3JtRmllbGRzKCkge1xyXG4gICAgICAgIHRoaXMuZm9ybUZpZWxkcyA9IFtcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgbmFtZTogXCJyZWFzb25cIixcclxuICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwiYWdyby5hbmd1bGFyX2NvbXBvbmVudHMuY2FuY2VsX3JlYXNvblwiKSxcclxuICAgICAgICAgICAgICAgIHR5cGU6IFwic3RyaW5nXCIsXHJcbiAgICAgICAgICAgICAgICBtdWx0aXBsZTogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICByZXF1aXJlZDogKCkgPT4gdHJ1ZSxcclxuICAgICAgICAgICAgICAgIHNpemU6IHRoaXMuY3BTaXplLFxyXG4gICAgICAgICAgICAgICAgbWF4TGVuZ3RoOiBBR1JPX05VTUJFUlMuT05FX0hVTkRSRUQsXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgXTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHNldERhdGFDb25maWdEaWFsb2coKSB7XHJcbiAgICAgICAgdGhpcy5jYW5jZWxFdmVudERpYWxvZ0NvbmZpZyA9IHRoaXMuY29uZmlnLmRhdGE/LmNhbmNlbEV2ZW50RGlhbG9nQ29uZmlnID8/IHt9IGFzIENhbmNlbEV2ZW50RGlhbG9nQ29uZmlnO1xyXG4gICAgICAgIHRoaXMucmVhc29uTWluTGVuZ3RoID0gdGhpcy5jYW5jZWxFdmVudERpYWxvZ0NvbmZpZz8ucmVhc29uTWluTGVuZ3RoID8/IEFHUk9fTlVNQkVSUy5GSUZURUVOO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgc2V0VHJhbnNsYXRpb25zKCkge1xyXG4gICAgICAgIHRoaXMudHJhbnNsYXRpb25zID0ge1xyXG4gICAgICAgICAgICByZXF1aXJlZDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcImFncm8uYW5ndWxhcl9jb21wb25lbnRzLmVycm9yX3JlcXVpcmVkXCIpLFxyXG4gICAgICAgICAgICBtaW46IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJhZ3JvLmFuZ3VsYXJfY29tcG9uZW50cy5lcnJvcl9taW5fdmFsdWVcIiksXHJcbiAgICAgICAgICAgIG1heDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcImFncm8uYW5ndWxhcl9jb21wb25lbnRzLmVycm9yX21heF92YWx1ZVwiKSxcclxuICAgICAgICAgICAgbWlubGVuZ3RoOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwiYWdyby5hbmd1bGFyX2NvbXBvbmVudHMuZXJyb3JfbWluX2xlbmd0aFwiLCB7IHZhbG9yOiB0aGlzLnJlYXNvbk1pbkxlbmd0aCB9KSxcclxuICAgICAgICAgICAgbWF4bGVuZ3RoOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwiYWdyby5hbmd1bGFyX2NvbXBvbmVudHMuZXJyb3JfbWF4X2xlbmd0aF90cmFuc2Zlcl9jb2RlXCIpLFxyXG4gICAgICAgICAgICBwYXR0ZXJuOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwiYWdyby5hbmd1bGFyX2NvbXBvbmVudHMuZXJyb3JfaW52YWxpZFwiKSxcclxuICAgICAgICAgICAgRm9ybURhdGVFcnJvcl9kYXRhMTogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcImFncm8uYW5ndWxhcl9jb21wb25lbnRzLmluaXRpYWxfaW52YWxpZF9kYXRlXCIpLFxyXG4gICAgICAgICAgICBGb3JtRGF0ZUVycm9yX2RhdGEyOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwiYWdyby5hbmd1bGFyX2NvbXBvbmVudHMuZW5kX2ludmFsaWRfZGF0ZVwiKSxcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG5cclxuXHJcblxyXG4gICAgcHVibGljIGFzeW5jIGhhbmRsZUNvbmZpcm1DbGljaygpIHtcclxuICAgICAgICBpZiAodGhpcy5mb3JtR3JvdXAuaW52YWxpZCAmJiB0aGlzLmNhbmNlbEV2ZW50RGlhbG9nQ29uZmlnPy53aXRoUmVhc29uKSB7XHJcbiAgICAgICAgICAgIHRoaXMudmFsaWRhdGVBbGxGb3JtRmllbGRzKHRoaXMuZm9ybUdyb3VwKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCByZWFzb24gPSB0aGlzLmZvcm1Hcm91cC5nZXQoXCJyZWFzb25cIik/LnZhbHVlO1xyXG4gICAgICAgIHRoaXMubG9hZGluZyA9IHRydWU7XHJcbiAgICAgICAgYXdhaXQgdGhpcy5jYW5jZWxFdmVudERpYWxvZ0NvbmZpZy5jYW5jZWxGdW5jdGlvbihyZWFzb24pO1xyXG4gICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMucmVmLmNsb3NlKHRydWUpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgdmFsaWRhdGVBbGxGb3JtRmllbGRzKGZvcm1Hcm91cDogRm9ybUdyb3VwKSB7XHJcbiAgICAgICAgT2JqZWN0LmtleXMoZm9ybUdyb3VwLmNvbnRyb2xzKS5mb3JFYWNoKChmaWVsZCkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBjb250cm9sID0gZm9ybUdyb3VwLmdldChmaWVsZCk7XHJcbiAgICAgICAgICAgIGlmIChjb250cm9sIGluc3RhbmNlb2YgRm9ybUNvbnRyb2wpIHtcclxuICAgICAgICAgICAgICAgIGNvbnRyb2wubWFya0FzRGlydHkoeyBvbmx5U2VsZjogdHJ1ZSB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoY29udHJvbCBpbnN0YW5jZW9mIEZvcm1Hcm91cCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy52YWxpZGF0ZUFsbEZvcm1GaWVsZHMoY29udHJvbCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaGFuZGxlQ2FuY2VsQ2xpY2soKSB7XHJcbiAgICAgICAgdGhpcy5yZWYuY2xvc2UoKTtcclxuICAgIH1cclxufSIsIjxkaXZcclxuICAgIGNsYXNzPVwiY29udGVudFwiXHJcbiAgICAqc0xvYWRpbmdTdGF0ZT1cImxvYWRpbmdcIlxyXG4+XHJcbiAgICA8ZGl2IGNsYXNzPVwidG9wXCI+XHJcbiAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAqbmdJZj1cImNhbmNlbEV2ZW50RGlhbG9nQ29uZmlnLm1lc3NhZ2VcIlxyXG4gICAgICAgICAgICBjbGFzcz1cIm1lc3NhZ2UtY29udGFpbmVyXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICAgIDxzcGFuPnt7IGNhbmNlbEV2ZW50RGlhbG9nQ29uZmlnLm1lc3NhZ2UgfX08L3NwYW4+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udGFpbmVyXCJcclxuICAgICAgICAgICAgKm5nSWY9XCJjYW5jZWxFdmVudERpYWxvZ0NvbmZpZy53aXRoUmVhc29uXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICAgIDxzLWR5bmFtaWMtZm9ybVxyXG4gICAgICAgICAgICAgICAgW2ZpZWxkc109XCJmb3JtRmllbGRzXCJcclxuICAgICAgICAgICAgICAgIFtmb3JtXT1cImZvcm1Hcm91cFwiXHJcbiAgICAgICAgICAgICAgICBbZXJyb3JNZXNzYWdlc109XCJ0cmFuc2xhdGlvbnNcIlxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgIDwvcy1keW5hbWljLWZvcm0+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJmb290ZXJcIj5cclxuICAgICAgICA8cy1idXR0b25cclxuICAgICAgICAgICAgW3ByaW9yaXR5XT1cIidzZWNvbmRhcnknXCJcclxuICAgICAgICAgICAgKGtleWRvd24uZW50ZXIpPVwiaGFuZGxlQ2FuY2VsQ2xpY2soKVwiXHJcbiAgICAgICAgICAgIGxhYmVsPVwie3sgJ2Fncm8uYW5ndWxhcl9jb21wb25lbnRzLm5vJyB8IGxpYlRyYW5zbGF0ZSB9fVwiXHJcbiAgICAgICAgICAgIChjbGljayk9XCJoYW5kbGVDYW5jZWxDbGljaygpXCJcclxuICAgICAgICA+PC9zLWJ1dHRvbj5cclxuICAgICAgICA8cy1idXR0b25cclxuICAgICAgICAgICAgW3ByaW9yaXR5XT1cIidwcmltYXJ5J1wiXHJcbiAgICAgICAgICAgIChrZXlkb3duLmVudGVyKT1cImhhbmRsZUNvbmZpcm1DbGljaygpXCJcclxuICAgICAgICAgICAgbGFiZWw9XCJ7eyAnYWdyby5hbmd1bGFyX2NvbXBvbmVudHMueWVzJyB8IGxpYlRyYW5zbGF0ZSB9fVwiXHJcbiAgICAgICAgICAgIChjbGljayk9XCJoYW5kbGVDb25maXJtQ2xpY2soKVwiXHJcbiAgICAgICAgPjwvcy1idXR0b24+XHJcbiAgICA8L2Rpdj5cclxuPC9kaXY+XHJcbiJdfQ==