@seniorsistemas/yms-integration 1.42.1 → 1.44.0

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 (62) hide show
  1. package/bundles/seniorsistemas-yms-integration.umd.js +876 -388
  2. package/bundles/seniorsistemas-yms-integration.umd.js.map +1 -1
  3. package/bundles/seniorsistemas-yms-integration.umd.min.js +1 -1
  4. package/bundles/seniorsistemas-yms-integration.umd.min.js.map +1 -1
  5. package/esm2015/seniorsistemas-yms-integration.js +53 -51
  6. package/esm2015/src/sam-senior/core/entity-service.js +27 -12
  7. package/esm2015/src/wms/components/document-grid/document-grid.component.js +42 -358
  8. package/esm2015/src/wms/components/document-grid/document-grid.facade.js +380 -0
  9. package/esm2015/src/wms/components/document-grid/document-grid.module.js +19 -10
  10. package/esm2015/src/wms/components/document-grid/insert-key/insert-key.component.js +45 -44
  11. package/esm2015/src/wms/components/document-grid/register-document/register-document.component.js +28 -24
  12. package/esm2015/src/wms/components/document-grid/strategies/partner.strategy.js +48 -0
  13. package/esm2015/src/wms/components/document-grid/strategies/senior-connect.strategy.js +72 -0
  14. package/esm2015/src/wms/components/document-grid/strategies/senior-erp.strategy.js +56 -0
  15. package/esm2015/src/wms/components/document-grid/strategies/silt.strategy.js +80 -0
  16. package/esm2015/src/wms/components/document-grid/strategies/wis.strategy.js +68 -0
  17. package/esm2015/src/wms/components/document-grid/strategies/wms-integration-strategy.factory.js +31 -0
  18. package/esm2015/src/wms/components/document-grid/strategies/wms-integration-strategy.interface.js +7 -0
  19. package/esm2015/src/wms/components/utils/invoice-conditions.js +30 -9
  20. package/esm2015/src/wms/entities/document/document.service.js +11 -10
  21. package/esm2015/src/wms/entities/invoice-condition/invoice-condition.js +1 -1
  22. package/esm2015/src/wms/entities/wms-system/wms-system.js +2 -1
  23. package/esm5/seniorsistemas-yms-integration.js +53 -51
  24. package/esm5/src/sam-senior/core/entity-service.js +23 -8
  25. package/esm5/src/wms/components/document-grid/document-grid.component.js +47 -363
  26. package/esm5/src/wms/components/document-grid/document-grid.facade.js +397 -0
  27. package/esm5/src/wms/components/document-grid/document-grid.module.js +19 -10
  28. package/esm5/src/wms/components/document-grid/insert-key/insert-key.component.js +44 -43
  29. package/esm5/src/wms/components/document-grid/register-document/register-document.component.js +28 -24
  30. package/esm5/src/wms/components/document-grid/strategies/partner.strategy.js +52 -0
  31. package/esm5/src/wms/components/document-grid/strategies/senior-connect.strategy.js +76 -0
  32. package/esm5/src/wms/components/document-grid/strategies/senior-erp.strategy.js +60 -0
  33. package/esm5/src/wms/components/document-grid/strategies/silt.strategy.js +84 -0
  34. package/esm5/src/wms/components/document-grid/strategies/wis.strategy.js +72 -0
  35. package/esm5/src/wms/components/document-grid/strategies/wms-integration-strategy.factory.js +32 -0
  36. package/esm5/src/wms/components/document-grid/strategies/wms-integration-strategy.interface.js +7 -0
  37. package/esm5/src/wms/components/utils/invoice-conditions.js +30 -9
  38. package/esm5/src/wms/entities/document/document.service.js +11 -10
  39. package/esm5/src/wms/entities/invoice-condition/invoice-condition.js +1 -1
  40. package/esm5/src/wms/entities/wms-system/wms-system.js +2 -1
  41. package/fesm2015/seniorsistemas-yms-integration.js +783 -330
  42. package/fesm2015/seniorsistemas-yms-integration.js.map +1 -1
  43. package/fesm5/seniorsistemas-yms-integration.js +824 -338
  44. package/fesm5/seniorsistemas-yms-integration.js.map +1 -1
  45. package/package.json +4 -3
  46. package/seniorsistemas-yms-integration.d.ts +52 -50
  47. package/seniorsistemas-yms-integration.metadata.json +1 -1
  48. package/src/sam-senior/core/entity-service.d.ts +5 -0
  49. package/src/wms/components/document-grid/document-grid.component.d.ts +28 -77
  50. package/src/wms/components/document-grid/document-grid.facade.d.ts +96 -0
  51. package/src/wms/components/document-grid/insert-key/insert-key.component.d.ts +6 -8
  52. package/src/wms/components/document-grid/register-document/register-document.component.d.ts +5 -5
  53. package/src/wms/components/document-grid/strategies/partner.strategy.d.ts +17 -0
  54. package/src/wms/components/document-grid/strategies/senior-connect.strategy.d.ts +17 -0
  55. package/src/wms/components/document-grid/strategies/senior-erp.strategy.d.ts +17 -0
  56. package/src/wms/components/document-grid/strategies/silt.strategy.d.ts +17 -0
  57. package/src/wms/components/document-grid/strategies/wis.strategy.d.ts +17 -0
  58. package/src/wms/components/document-grid/strategies/wms-integration-strategy.factory.d.ts +8 -0
  59. package/src/wms/components/document-grid/strategies/wms-integration-strategy.interface.d.ts +53 -0
  60. package/src/wms/components/utils/invoice-conditions.d.ts +2 -2
  61. package/src/wms/entities/document/document.service.d.ts +9 -6
  62. package/src/wms/entities/wms-system/wms-system.d.ts +1 -0
@@ -0,0 +1,397 @@
1
+ import * as tslib_1 from "tslib";
2
+ import { Injectable } from "@angular/core";
3
+ import { TranslateService } from "@ngx-translate/core";
4
+ import { BehaviorSubject, Subject, forkJoin, throwError, } from "rxjs";
5
+ import { catchError, takeUntil } from "rxjs/operators";
6
+ import { UtilsMessageService } from "../../../utils/utils-message";
7
+ import { AgendaService, } from "../../entities/agenda/agenda.service";
8
+ import { DocumentService } from "../../entities/document/document.service";
9
+ import { WmsSystem } from "../../entities/wms-system/wms-system";
10
+ import { FormWmsService } from "../../form/form-wms.service";
11
+ import { IntegrationService, } from "../../entities/integration/integration.service";
12
+ import { getInvoiceConditions } from "../utils/invoice-conditions";
13
+ import { WmsIntegrationStrategyFactory } from "./strategies/wms-integration-strategy.factory";
14
+ var DocumentGridFacade = /** @class */ (function () {
15
+ function DocumentGridFacade(translate, documentService, integrationService, agendaService, utils, wmsService, strategyFactory) {
16
+ this.translate = translate;
17
+ this.documentService = documentService;
18
+ this.integrationService = integrationService;
19
+ this.agendaService = agendaService;
20
+ this.utils = utils;
21
+ this.wmsService = wmsService;
22
+ this.strategyFactory = strategyFactory;
23
+ this.ngUnsubscribe = new Subject();
24
+ this.summary = "yms.int.wms_saved_document_message_title";
25
+ this.currentStrategy = null;
26
+ // State subjects
27
+ this.stateSubject = new BehaviorSubject({
28
+ gridData: [],
29
+ selection: [],
30
+ gridColumns: [],
31
+ documentTotalRecords: 0,
32
+ loading: false,
33
+ disabled: true,
34
+ showInvoiceSearchModal: false,
35
+ showAddInvoiceModal: false,
36
+ edit: false,
37
+ processType: null,
38
+ wmsSystem: null,
39
+ isClienteExterno: false,
40
+ enableButtonIsClienteExterno: true,
41
+ });
42
+ this.state$ = this.stateSubject.asObservable();
43
+ this.invoiceConditions = getInvoiceConditions(this.translate);
44
+ }
45
+ Object.defineProperty(DocumentGridFacade.prototype, "state", {
46
+ // Getters para acesso direto ao estado atual
47
+ get: function () {
48
+ return this.stateSubject.getValue();
49
+ },
50
+ enumerable: true,
51
+ configurable: true
52
+ });
53
+ // Inicialização
54
+ DocumentGridFacade.prototype.init = function (agenda, wmsSystem) {
55
+ this.agenda = agenda;
56
+ this.updateState({ wmsSystem: wmsSystem });
57
+ this.verifyClienteExterno();
58
+ this.getProcessTypeByScheduling();
59
+ this.listDocuments(false);
60
+ this.loadSystemIntegration();
61
+ };
62
+ DocumentGridFacade.prototype.loadSystemIntegration = function () {
63
+ var _this = this;
64
+ this.wmsService.getSystemIntegration().subscribe(function (_a) {
65
+ var system = _a.system;
66
+ _this.updateState({ wmsSystem: system });
67
+ _this.updateStrategy(system);
68
+ if (_this.isWmsSeniorConnect()) {
69
+ _this.getYard();
70
+ _this.getSchedule();
71
+ }
72
+ });
73
+ };
74
+ DocumentGridFacade.prototype.updateStrategy = function (wmsSystem) {
75
+ this.currentStrategy = this.strategyFactory.getStrategy(wmsSystem);
76
+ this.updateGridColumns();
77
+ };
78
+ DocumentGridFacade.prototype.getYard = function () {
79
+ var _this = this;
80
+ this.documentService
81
+ .getYard(this.agenda.planta.id)
82
+ .pipe(catchError(function (err) { return throwError(err); }))
83
+ .subscribe(function (content) {
84
+ _this.yard = content;
85
+ });
86
+ };
87
+ DocumentGridFacade.prototype.getSchedule = function () {
88
+ var _this = this;
89
+ if (this.agenda.externalTenant && this.agenda.externalTenant.cnpj) {
90
+ this.schedule = this.agenda;
91
+ return;
92
+ }
93
+ this.agendaService
94
+ .get(this.agenda.id)
95
+ .pipe(catchError(function (err) { return throwError(err); }))
96
+ .subscribe(function (content) {
97
+ _this.schedule = content;
98
+ });
99
+ };
100
+ DocumentGridFacade.prototype.verifyClienteExterno = function () {
101
+ var _this = this;
102
+ this.agendaService
103
+ .isClienteExterno()
104
+ .subscribe(function (result) {
105
+ _this.updateState({ isClienteExterno: result.isClienteExterno });
106
+ _this.updateGridColumns();
107
+ _this.cantEditStatus();
108
+ });
109
+ };
110
+ DocumentGridFacade.prototype.getProcessTypeByScheduling = function () {
111
+ var _this = this;
112
+ this.integrationService
113
+ .getProcessTypeByScheduling(this.agenda.tipoAgendamento.id)
114
+ .subscribe(function (result) {
115
+ _this.updateState({ processType: result.processType });
116
+ });
117
+ };
118
+ DocumentGridFacade.prototype.cantEditStatus = function () {
119
+ var cantEditStatus = [
120
+ "CANCELADO",
121
+ "EM_EXECUCAO",
122
+ "CONCLUIDO",
123
+ "AGUARDANDO_POR_VALIDACAO",
124
+ ].includes(this.agenda.status.toString());
125
+ if (cantEditStatus) {
126
+ this.updateState({ enableButtonIsClienteExterno: false });
127
+ }
128
+ };
129
+ // Ações
130
+ DocumentGridFacade.prototype.openInvoiceKeyModal = function () {
131
+ this.updateState({
132
+ selection: [],
133
+ showInvoiceSearchModal: true,
134
+ });
135
+ };
136
+ DocumentGridFacade.prototype.openDocumentRegisterModal = function () {
137
+ this.updateState({
138
+ selection: [],
139
+ edit: true,
140
+ showAddInvoiceModal: true,
141
+ });
142
+ };
143
+ DocumentGridFacade.prototype.closeInvoiceSearchModal = function () {
144
+ this.updateState({ showInvoiceSearchModal: false });
145
+ };
146
+ DocumentGridFacade.prototype.closeAddInvoiceModal = function () {
147
+ this.updateState({ showAddInvoiceModal: false });
148
+ };
149
+ DocumentGridFacade.prototype.viewDocument = function () {
150
+ this.updateState({
151
+ showAddInvoiceModal: true,
152
+ edit: false,
153
+ });
154
+ return this.state.selection[0];
155
+ };
156
+ DocumentGridFacade.prototype.setSelection = function (selection) {
157
+ this.updateState({ selection: selection });
158
+ };
159
+ DocumentGridFacade.prototype.addToSelection = function (document) {
160
+ this.updateState({ selection: [document] });
161
+ };
162
+ DocumentGridFacade.prototype.setDisabled = function (disabled) {
163
+ this.updateState({ disabled: disabled });
164
+ };
165
+ DocumentGridFacade.prototype.setShowInvoiceSearchModal = function (visible) {
166
+ this.updateState({ showInvoiceSearchModal: visible });
167
+ };
168
+ DocumentGridFacade.prototype.setShowAddInvoiceModal = function (visible) {
169
+ this.updateState({ showAddInvoiceModal: visible });
170
+ };
171
+ DocumentGridFacade.prototype.onChangeDocument = function (document) {
172
+ if (!this.hasFilledValues(document)) {
173
+ this.utils.message("error", "yms.int.wms_save_error_register_document_message_title", "yms.int.wms_save_error_register_document_message_description");
174
+ return;
175
+ }
176
+ this.assignKeys(document);
177
+ var duplicateDocument = this.state.gridData.find(function (gridData) { return gridData.key === document.key; });
178
+ if (duplicateDocument) {
179
+ this.utils.message("error", "yms.int.wms_error_register_document_message_title", "yms.int.wms_error_register_document_message_description");
180
+ return;
181
+ }
182
+ var newGridData = tslib_1.__spread(this.state.gridData, [document]);
183
+ this.updateState({
184
+ gridData: newGridData,
185
+ disabled: false,
186
+ showAddInvoiceModal: false,
187
+ showInvoiceSearchModal: false,
188
+ });
189
+ this.utils.message("success", this.summary, "yms.int.wms_success_message_description");
190
+ };
191
+ DocumentGridFacade.prototype.assignKeys = function (document) {
192
+ if (document.id === undefined) {
193
+ if (this.agenda.id !== undefined) {
194
+ document.schedulingId = this.agenda.id;
195
+ }
196
+ if (document.key === undefined || document.key === null) {
197
+ document.key =
198
+ this.currentStrategy.updateDocumentKey(document) ||
199
+ document.invoiceKey;
200
+ }
201
+ }
202
+ };
203
+ DocumentGridFacade.prototype.hasFilledValues = function (document) {
204
+ var formValues = Object.values(document);
205
+ return formValues.some(function (value) { return value !== null && value !== ""; });
206
+ };
207
+ DocumentGridFacade.prototype.save = function () {
208
+ var _this = this;
209
+ var gridData = this.state.gridData;
210
+ if (gridData.length > 0) {
211
+ gridData.forEach(function (data) {
212
+ if (!data.id) {
213
+ if (!data.schedulingId) {
214
+ data.schedulingId = _this.agenda.id;
215
+ }
216
+ data.key = _this.updateKeyByWms(data);
217
+ _this.documentService.insert(data).subscribe(function () {
218
+ _this.sucessMessage();
219
+ });
220
+ _this.updateState({ disabled: true });
221
+ }
222
+ else {
223
+ _this.documentService.update(data.id, data).subscribe(function () {
224
+ _this.sucessMessage();
225
+ _this.updateState({ disabled: true });
226
+ });
227
+ }
228
+ });
229
+ this.listDocuments(false);
230
+ }
231
+ };
232
+ DocumentGridFacade.prototype.updateKeyByWms = function (data) {
233
+ return this.currentStrategy.updateDocumentKey(data) || data.invoiceKey;
234
+ };
235
+ DocumentGridFacade.prototype.deleteSelectedDocuments = function () {
236
+ var _this = this;
237
+ this.removeDocumentIfIdUndefined();
238
+ var selection = this.state.selection;
239
+ if (selection.length < 1) {
240
+ return;
241
+ }
242
+ forkJoin(selection.map(function (document) { return _this.documentService.delete(document.id); }))
243
+ .pipe(takeUntil(this.ngUnsubscribe))
244
+ .subscribe(function () {
245
+ _this.utils.message("success", "yms.patio.warn_deleted_message_title", "yms.patio.deleted_message_detail");
246
+ _this.listDocuments(true);
247
+ });
248
+ };
249
+ DocumentGridFacade.prototype.removeDocumentIfIdUndefined = function () {
250
+ var _a = this.state, selection = _a.selection, gridData = _a.gridData;
251
+ var newSelection = tslib_1.__spread(selection);
252
+ var newGridData = tslib_1.__spread(gridData);
253
+ selection.forEach(function (value, index) {
254
+ if (!value.id) {
255
+ var indexGridData = newGridData.findIndex(function (document) { return document.key === value.key; });
256
+ newGridData.splice(indexGridData, 1);
257
+ newSelection.splice(index, 1);
258
+ }
259
+ });
260
+ this.updateState({ gridData: newGridData, selection: newSelection });
261
+ };
262
+ DocumentGridFacade.prototype.notSavedDocuments = function () {
263
+ return this.state.gridData.some(function (document) { return !document.id; });
264
+ };
265
+ DocumentGridFacade.prototype.listDocuments = function (isDelete) {
266
+ var _this = this;
267
+ this.documentService
268
+ .list({
269
+ filterQuery: "schedulingId eq '" + this.agenda.id + "'",
270
+ size: 100,
271
+ })
272
+ .subscribe(function (contents) {
273
+ var newGridData = isDelete
274
+ ? _this.state.gridData.filter(function (item) { return !item.id; })
275
+ : [];
276
+ if (contents.totalElements > 0) {
277
+ newGridData = tslib_1.__spread(newGridData, contents.contents);
278
+ }
279
+ var documentTotalRecords = contents.totalElements > 0
280
+ ? contents.totalElements
281
+ : newGridData.length;
282
+ var hasElementWithoutId = newGridData.some(function (item) { return !item.id; });
283
+ _this.updateState({
284
+ gridData: newGridData,
285
+ disabled: !hasElementWithoutId,
286
+ loading: false,
287
+ selection: [],
288
+ documentTotalRecords: documentTotalRecords,
289
+ });
290
+ });
291
+ };
292
+ // Menu Actions
293
+ DocumentGridFacade.prototype.getActions = function () {
294
+ var _this = this;
295
+ return [
296
+ {
297
+ disabled: this.checkWmsSystemInvalid(),
298
+ label: this.translate.instant("yms.int.wms_search"),
299
+ command: function () { return _this.openInvoiceKeyModal(); },
300
+ icon: "fa fa-search",
301
+ },
302
+ {
303
+ disabled: this.checkWmsSystemInvalid(),
304
+ label: this.translate.instant("yms.int.wms_add_document_register"),
305
+ command: function () { return _this.openDocumentRegisterModal(); },
306
+ icon: "fas fa-pen-square",
307
+ },
308
+ ];
309
+ };
310
+ DocumentGridFacade.prototype.checkWmsSystemInvalid = function () {
311
+ var wmsSystem = this.state.wmsSystem;
312
+ return wmsSystem && wmsSystem === WmsSystem.NONE;
313
+ };
314
+ // Grid columns
315
+ DocumentGridFacade.prototype.updateGridColumns = function () {
316
+ var gridColumns = this.getGridColumns();
317
+ this.updateState({ gridColumns: gridColumns });
318
+ };
319
+ DocumentGridFacade.prototype.getGridColumns = function () {
320
+ if (!this.currentStrategy) {
321
+ return [];
322
+ }
323
+ return this.currentStrategy.getGridColumns(this.translate, this.state.isClienteExterno);
324
+ };
325
+ // WMS Type checks
326
+ DocumentGridFacade.prototype.isWmsSeniorConnect = function () {
327
+ return this.state.wmsSystem === WmsSystem.SENIOR_CONNECT;
328
+ };
329
+ DocumentGridFacade.prototype.isWmsWIS = function () {
330
+ return this.state.wmsSystem === WmsSystem.WIS;
331
+ };
332
+ DocumentGridFacade.prototype.isWmsSilt = function () {
333
+ return this.state.wmsSystem === WmsSystem.SENIOR;
334
+ };
335
+ DocumentGridFacade.prototype.isWmsPartner = function () {
336
+ return this.state.wmsSystem === WmsSystem.PARTNER;
337
+ };
338
+ // Validation
339
+ DocumentGridFacade.prototype.validateDocument = function (document) {
340
+ if (!this.currentStrategy) {
341
+ return true;
342
+ }
343
+ var result = this.currentStrategy.validateDocument(document, {
344
+ yard: this.yard,
345
+ schedule: this.schedule,
346
+ agenda: this.agenda,
347
+ });
348
+ if (!result.isValid && result.errorMessageKey) {
349
+ this.buildMessage(result.errorMessageKey);
350
+ }
351
+ return result.isValid;
352
+ };
353
+ // Invoice conditions
354
+ DocumentGridFacade.prototype.getFilteredInvoiceConditions = function (invoiceCondition) {
355
+ if (!this.currentStrategy) {
356
+ return this.invoiceConditions;
357
+ }
358
+ return this.currentStrategy.getFilteredInvoiceConditions(invoiceCondition, this.invoiceConditions);
359
+ };
360
+ DocumentGridFacade.prototype.supportsInvoiceCondition = function () {
361
+ return this.currentStrategy.supportsInvoiceCondition() || false;
362
+ };
363
+ // Helpers
364
+ DocumentGridFacade.prototype.getProp = function (obj, path) {
365
+ return path
366
+ .split(".")
367
+ .reduce(function (result, prop) {
368
+ return result[prop] === undefined ? "" : result[prop];
369
+ }, obj);
370
+ };
371
+ DocumentGridFacade.prototype.sucessMessage = function () {
372
+ this.utils.message("success", this.summary, "saved_message_content");
373
+ };
374
+ DocumentGridFacade.prototype.buildMessage = function (description) {
375
+ this.utils.message("warn", "yms.int.documento_invalido_warning_header", description);
376
+ };
377
+ DocumentGridFacade.prototype.updateState = function (partialState) {
378
+ this.stateSubject.next(tslib_1.__assign({}, this.state, partialState));
379
+ };
380
+ DocumentGridFacade.prototype.destroy = function () {
381
+ this.ngUnsubscribe.next();
382
+ this.ngUnsubscribe.complete();
383
+ };
384
+ DocumentGridFacade = tslib_1.__decorate([
385
+ Injectable(),
386
+ tslib_1.__metadata("design:paramtypes", [TranslateService,
387
+ DocumentService,
388
+ IntegrationService,
389
+ AgendaService,
390
+ UtilsMessageService,
391
+ FormWmsService,
392
+ WmsIntegrationStrategyFactory])
393
+ ], DocumentGridFacade);
394
+ return DocumentGridFacade;
395
+ }());
396
+ export { DocumentGridFacade };
397
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9jdW1lbnQtZ3JpZC5mYWNhZGUuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Ac2VuaW9yc2lzdGVtYXMveW1zLWludGVncmF0aW9uLyIsInNvdXJjZXMiOlsic3JjL3dtcy9jb21wb25lbnRzL2RvY3VtZW50LWdyaWQvZG9jdW1lbnQtZ3JpZC5mYWNhZGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFdkQsT0FBTyxFQUNMLGVBQWUsRUFFZixPQUFPLEVBQ1AsUUFBUSxFQUNSLFVBQVUsR0FDWCxNQUFNLE1BQU0sQ0FBQztBQUNkLE9BQU8sRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDdkQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDbkUsT0FBTyxFQUNMLGFBQWEsR0FFZCxNQUFNLHNDQUFzQyxDQUFDO0FBRTlDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUUzRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDakUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzdELE9BQU8sRUFFTCxrQkFBa0IsR0FFbkIsTUFBTSxnREFBZ0QsQ0FBQztBQUN4RCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUVuRSxPQUFPLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSwrQ0FBK0MsQ0FBQztBQW1COUY7SUFtQ0UsNEJBQ21CLFNBQTJCLEVBQzNCLGVBQWdDLEVBQ2hDLGtCQUFzQyxFQUN0QyxhQUE0QixFQUM1QixLQUEwQixFQUMxQixVQUEwQixFQUMxQixlQUE4QztRQU45QyxjQUFTLEdBQVQsU0FBUyxDQUFrQjtRQUMzQixvQkFBZSxHQUFmLGVB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LE9BQU8sQ0FDaEIsTUFBTSxFQUNOLDJDQUEyQyxFQUMzQyxXQUFXLENBQ1osQ0FBQztJQUNKLENBQUM7SUFFTyx3Q0FBVyxHQUFuQixVQUFvQixZQUF3QztRQUMxRCxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksc0JBQU0sSUFBSSxDQUFDLEtBQUssRUFBSyxZQUFZLEVBQUcsQ0FBQztJQUM3RCxDQUFDO0lBRUQsb0NBQU8sR0FBUDtRQUNFLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDMUIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUNoQyxDQUFDO0lBOWNVLGtCQUFrQjtRQUQ5QixVQUFVLEVBQUU7aURBcUNtQixnQkFBZ0I7WUFDVixlQUFlO1lBQ1osa0JBQWtCO1lBQ3ZCLGFBQWE7WUFDckIsbUJBQW1CO1lBQ2QsY0FBYztZQUNULDZCQUE2QjtPQTFDdEQsa0JBQWtCLENBK2M5QjtJQUFELHlCQUFDO0NBQUEsQUEvY0QsSUErY0M7U0EvY1ksa0JBQWtCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSBcIkBuZ3gtdHJhbnNsYXRlL2NvcmVcIjtcbmltcG9ydCB7IE1lbnVJdGVtIH0gZnJvbSBcInByaW1lbmcvYXBpXCI7XG5pbXBvcnQge1xuICBCZWhhdmlvclN1YmplY3QsXG4gIE9ic2VydmFibGUsXG4gIFN1YmplY3QsXG4gIGZvcmtKb2luLFxuICB0aHJvd0Vycm9yLFxufSBmcm9tIFwicnhqc1wiO1xuaW1wb3J0IHsgY2F0Y2hFcnJvciwgdGFrZVVudGlsIH0gZnJvbSBcInJ4anMvb3BlcmF0b3JzXCI7XG5pbXBvcnQgeyBVdGlsc01lc3NhZ2VTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uLy4uL3V0aWxzL3V0aWxzLW1lc3NhZ2VcIjtcbmltcG9ydCB7XG4gIEFnZW5kYVNlcnZpY2UsXG4gIElzQ2xpZW50ZUV4dGVybm8sXG59IGZyb20gXCIuLi8uLi9lbnRpdGllcy9hZ2VuZGEvYWdlbmRhLnNlcnZpY2VcIjtcbmltcG9ydCB7IERvY3VtZW50IH0gZnJvbSBcIi4uLy4uL2VudGl0aWVzL2RvY3VtZW50L2RvY3VtZW50XCI7XG5pbXBvcnQgeyBEb2N1bWVudFNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vZW50aXRpZXMvZG9jdW1lbnQvZG9jdW1lbnQuc2VydmljZVwiO1xuaW1wb3J0IHsgSW52b2ljZUNvbmRpdGlvbiB9IGZyb20gXCIuLi8uLi9lbnRpdGllcy9pbnZvaWNlLWNvbmRpdGlvbi9pbnZvaWNlLWNvbmRpdGlvblwiO1xuaW1wb3J0IHsgV21zU3lzdGVtIH0gZnJvbSBcIi4uLy4uL2VudGl0aWVzL3dtcy1zeXN0ZW0vd21zLXN5c3RlbVwiO1xuaW1wb3J0IHsgRm9ybVdtc1NlcnZpY2UgfSBmcm9tIFwiLi4vLi4vZm9ybS9mb3JtLXdtcy5zZXJ2aWNlXCI7XG5pbXBvcnQge1xuICBHZXRQcm9jZXNzVHlwZUJ5U2NoZWR1bGluZ091dHB1dCxcbiAgSW50ZWdyYXRpb25TZXJ2aWNlLFxuICBQcm9jZXNzVHlwZSxcbn0gZnJvbSBcIi4uLy4uL2VudGl0aWVzL2ludGVncmF0aW9uL2ludGVncmF0aW9uLnNlcnZpY2VcIjtcbmltcG9ydCB7IGdldEludm9pY2VDb25kaXRpb25zIH0gZnJvbSBcIi4uL3V0aWxzL2ludm9pY2UtY29uZGl0aW9uc1wiO1xuaW1wb3J0IHsgV21zSW50ZWdyYXRpb25TdHJhdGVneSB9IGZyb20gXCIuL3N0cmF0ZWdpZXMvd21zLWludGVncmF0aW9uLXN0cmF0ZWd5LmludGVyZmFjZVwiO1xuaW1wb3J0IHsgV21zSW50ZWdyYXRpb25TdHJhdGVneUZhY3RvcnkgfSBmcm9tIFwiLi9zdHJhdGVnaWVzL3dtcy1pbnRlZ3JhdGlvbi1zdHJhdGVneS5mYWN0b3J5XCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRG9jdW1lbnRHcmlkU3RhdGUge1xuICBncmlkRGF0YTogRG9jdW1lbnRbXTtcbiAgc2VsZWN0aW9uOiBEb2N1bWVudFtdO1xuICBncmlkQ29sdW1uczogYW55W107XG4gIGRvY3VtZW50VG90YWxSZWNvcmRzOiBudW1iZXI7XG4gIGxvYWRpbmc6IGJvb2xlYW47XG4gIGRpc2FibGVkOiBib29sZWFuO1xuICBzaG93SW52b2ljZVNlYXJjaE1vZGFsOiBib29sZWFuO1xuICBzaG93QWRkSW52b2ljZU1vZGFsOiBib29sZWFuO1xuICBlZGl0OiBib29sZWFuO1xuICBwcm9jZXNzVHlwZTogUHJvY2Vzc1R5cGU7XG4gIHdtc1N5c3RlbTogV21zU3lzdGVtO1xuICBpc0NsaWVudGVFeHRlcm5vOiBib29sZWFuO1xuICBlbmFibGVCdXR0b25Jc0NsaWVudGVFeHRlcm5vOiBib29sZWFuO1xufVxuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgRG9jdW1lbnRHcmlkRmFjYWRlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBuZ1Vuc3Vic2NyaWJlID0gbmV3IFN1YmplY3QoKTtcbiAgcHJpdmF0ZSByZWFkb25seSBzdW1tYXJ5ID0gXCJ5bXMuaW50Lndtc19zYXZlZF9kb2N1bWVudF9tZXNzYWdlX3RpdGxlXCI7XG5cbiAgcHJpdmF0ZSB5YXJkOiBhbnk7XG4gIHByaXZhdGUgc2NoZWR1bGU6IGFueTtcbiAgcHJpdmF0ZSBjdXJyZW50U3RyYXRlZ3k6IFdtc0ludGVncmF0aW9uU3RyYXRlZ3kgfCBudWxsID0gbnVsbDtcblxuICAvLyBTdGF0ZSBzdWJqZWN0c1xuICBwcml2YXRlIHJlYWRvbmx5IHN0YXRlU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8RG9jdW1lbnRHcmlkU3RhdGU+KHtcbiAgICBncmlkRGF0YTogW10sXG4gICAgc2VsZWN0aW9uOiBbXSxcbiAgICBncmlkQ29sdW1uczogW10sXG4gICAgZG9jdW1lbnRUb3RhbFJlY29yZHM6IDAsXG4gICAgbG9hZGluZzogZmFsc2UsXG4gICAgZGlzYWJsZWQ6IHRydWUsXG4gICAgc2hvd0ludm9pY2VTZWFyY2hNb2RhbDogZmFsc2UsXG4gICAgc2hvd0FkZEludm9pY2VNb2RhbDogZmFsc2UsXG4gICAgZWRpdDogZmFsc2UsXG4gICAgcHJvY2Vzc1R5cGU6IG51bGwsXG4gICAgd21zU3lzdGVtOiBudWxsLFxuICAgIGlzQ2xpZW50ZUV4dGVybm86IGZhbHNlLFxuICAgIGVuYWJsZUJ1dHRvbklzQ2xpZW50ZUV4dGVybm86IHRydWUsXG4gIH0pO1xuXG4gIHB1YmxpYyByZWFkb25seSBzdGF0ZSQgPSB0aGlzLnN0YXRlU3ViamVjdC5hc09ic2VydmFibGUoKTtcbiAgcHVibGljIHJlYWRvbmx5IGludm9pY2VDb25kaXRpb25zID0gZ2V0SW52b2ljZUNvbmRpdGlvbnModGhpcy50cmFuc2xhdGUpO1xuXG4gIHByaXZhdGUgYWdlbmRhOiBhbnk7XG5cbiAgLy8gR2V0dGVycyBwYXJhIGFjZXNzbyBkaXJldG8gYW8gZXN0YWRvIGF0dWFsXG4gIGdldCBzdGF0ZSgpOiBEb2N1bWVudEdyaWRTdGF0ZSB7XG4gICAgcmV0dXJuIHRoaXMuc3RhdGVTdWJqZWN0LmdldFZhbHVlKCk7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IHRyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGRvY3VtZW50U2VydmljZTogRG9jdW1lbnRTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgaW50ZWdyYXRpb25TZXJ2aWNlOiBJbnRlZ3JhdGlvblNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSBhZ2VuZGFTZXJ2aWNlOiBBZ2VuZGFTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgdXRpbHM6IFV0aWxzTWVzc2FnZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSB3bXNTZXJ2aWNlOiBGb3JtV21zU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHN0cmF0ZWd5RmFjdG9yeTogV21zSW50ZWdyYXRpb25TdHJhdGVneUZhY3RvcnlcbiAgKSB7fVxuXG4gIC8vIEluaWNpYWxpemHDp8Ojb1xuICBpbml0KGFnZW5kYTogYW55LCB3bXNTeXN0ZW06IFdtc1N5c3RlbSk6IHZvaWQge1xuICAgIHRoaXMuYWdlbmRhID0gYWdlbmRhO1xuICAgIHRoaXMudXBkYXRlU3RhdGUoeyB3bXNTeXN0ZW0gfSk7XG5cbiAgICB0aGlzLnZlcmlmeUNsaWVudGVFeHRlcm5vKCk7XG4gICAgdGhpcy5nZXRQcm9jZXNzVHlwZUJ5U2NoZWR1bGluZygpO1xuICAgIHRoaXMubGlzdERvY3VtZW50cyhmYWxzZSk7XG4gICAgdGhpcy5sb2FkU3lzdGVtSW50ZWdyYXRpb24oKTtcbiAgfVxuXG4gIHByaXZhdGUgbG9hZFN5c3RlbUludGVncmF0aW9uKCk6IHZvaWQge1xuICAgIHRoaXMud21zU2VydmljZS5nZXRTeXN0ZW1JbnRlZ3JhdGlvbigpLnN1YnNjcmliZSgoeyBzeXN0ZW0gfTogYW55KSA9PiB7XG4gICAgICB0aGlzLnVwZGF0ZVN0YXRlKHsgd21zU3lzdGVtOiBzeXN0ZW0gfSk7XG4gICAgICB0aGlzLnVwZGF0ZVN0cmF0ZWd5KHN5c3RlbSk7XG4gICAgICBpZiAodGhpcy5pc1dtc1NlbmlvckNvbm5lY3QoKSkge1xuICAgICAgICB0aGlzLmdldFlhcmQoKTtcbiAgICAgICAgdGhpcy5nZXRTY2hlZHVsZSgpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVTdHJhdGVneSh3bXNTeXN0ZW06IFdtc1N5c3RlbSk6IHZvaWQge1xuICAgIHRoaXMuY3VycmVudFN0cmF0ZWd5ID0gdGhpcy5zdHJhdGVneUZhY3RvcnkuZ2V0U3RyYXRlZ3kod21zU3lzdGVtKTtcbiAgICB0aGlzLnVwZGF0ZUdyaWRDb2x1bW5zKCk7XG4gIH1cblxuICBwcml2YXRlIGdldFlhcmQoKTogdm9pZCB7XG4gICAgdGhpcy5kb2N1bWVudFNlcnZpY2VcbiAgICAgIC5nZXRZYXJkKHRoaXMuYWdlbmRhLnBsYW50YS5pZClcbiAgICAgIC5waXBlKGNhdGNoRXJyb3IoKGVycikgPT4gdGhyb3dFcnJvcihlcnIpKSlcbiAgICAgIC5zdWJzY3JpYmUoKGNvbnRlbnQ6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLnlhcmQgPSBjb250ZW50O1xuICAgICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGdldFNjaGVkdWxlKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmFnZW5kYS5leHRlcm5hbFRlbmFudCAmJiB0aGlzLmFnZW5kYS5leHRlcm5hbFRlbmFudC5jbnBqKSB7XG4gICAgICB0aGlzLnNjaGVkdWxlID0gdGhpcy5hZ2VuZGE7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5hZ2VuZGFTZXJ2aWNlXG4gICAgICAuZ2V0KHRoaXMuYWdlbmRhLmlkKVxuICAgICAgLnBpcGUoY2F0Y2hFcnJvcigoZXJyKSA9PiB0aHJvd0Vycm9yKGVycikpKVxuICAgICAgLnN1YnNjcmliZSgoY29udGVudDogYW55KSA9PiB7XG4gICAgICAgIHRoaXMuc2NoZWR1bGUgPSBjb250ZW50O1xuICAgICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHZlcmlmeUNsaWVudGVFeHRlcm5vKCk6IHZvaWQge1xuICAgIHRoaXMuYWdlbmRhU2VydmljZVxuICAgICAgLmlzQ2xpZW50ZUV4dGVybm8oKVxuICAgICAgLnN1YnNjcmliZSgocmVzdWx0OiBJc0NsaWVudGVFeHRlcm5vKSA9PiB7XG4gICAgICAgIHRoaXMudXBkYXRlU3RhdGUoeyBpc0NsaWVudGVFeHRlcm5vOiByZXN1bHQuaXNDbGllbnRlRXh0ZXJubyB9KTtcbiAgICAgICAgdGhpcy51cGRhdGVHcmlkQ29sdW1ucygpO1xuICAgICAgICB0aGlzLmNhbnRFZGl0U3RhdHVzKCk7XG4gICAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0UHJvY2Vzc1R5cGVCeVNjaGVkdWxpbmcoKTogdm9pZCB7XG4gICAgdGhpcy5pbnRlZ3JhdGlvblNlcnZpY2VcbiAgICAgIC5nZXRQcm9jZXNzVHlwZUJ5U2NoZWR1bGluZyh0aGlzLmFnZW5kYS50aXBvQWdlbmRhbWVudG8uaWQpXG4gICAgICAuc3Vic2NyaWJlKChyZXN1bHQ6IEdldFByb2Nlc3NUeXBlQnlTY2hlZHVsaW5nT3V0cHV0KSA9PiB7XG4gICAgICAgIHRoaXMudXBkYXRlU3RhdGUoeyBwcm9jZXNzVHlwZTogcmVzdWx0LnByb2Nlc3NUeXBlIH0pO1xuICAgICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGNhbnRFZGl0U3RhdHVzKCk6IHZvaWQge1xuICAgIGNvbnN0IGNhbnRFZGl0U3RhdHVzID0gW1xuICAgICAgXCJDQU5DRUxBRE9cIixcbiAgICAgIFwiRU1fRVhFQ1VDQU9cIixcbiAgICAgIFwiQ09OQ0xVSURPXCIsXG4gICAgICBcIkFHVUFSREFORE9fUE9SX1ZBTElEQUNBT1wiLFxuICAgIF0uaW5jbHVkZXModGhpcy5hZ2VuZGEuc3RhdHVzLnRvU3RyaW5nKCkpO1xuXG4gICAgaWYgKGNhbnRFZGl0U3RhdHVzKSB7XG4gICAgICB0aGlzLnVwZGF0ZVN0YXRlKHsgZW5hYmxlQnV0dG9uSXNDbGllbnRlRXh0ZXJubzogZmFsc2UgfSk7XG4gICAgfVxuICB9XG5cbiAgLy8gQcOnw7Vlc1xuICBvcGVuSW52b2ljZUtleU1vZGFsKCk6IHZvaWQge1xuICAgIHRoaXMudXBkYXRlU3RhdGUoe1xuICAgICAgc2VsZWN0aW9uOiBbXSxcbiAgICAgIHNob3dJbnZvaWNlU2VhcmNoTW9kYWw6IHRydWUsXG4gICAgfSk7XG4gIH1cblxuICBvcGVuRG9jdW1lbnRSZWdpc3Rlck1vZGFsKCk6IHZvaWQge1xuICAgIHRoaXMudXBkYXRlU3RhdGUoe1xuICAgICAgc2VsZWN0aW9uOiBbXSxcbiAgICAgIGVkaXQ6IHRydWUsXG4gICAgICBzaG93QWRkSW52b2ljZU1vZGFsOiB0cnVlLFxuICAgIH0pO1xuICB9XG5cbiAgY2xvc2VJbnZvaWNlU2VhcmNoTW9kYWwoKTogdm9pZCB7XG4gICAgdGhpcy51cGRhdGVTdGF0ZSh7IHNob3dJbnZvaWNlU2VhcmNoTW9kYWw6IGZhbHNlIH0pO1xuICB9XG5cbiAgY2xvc2VBZGRJbnZvaWNlTW9kYWwoKTogdm9pZCB7XG4gICAgdGhpcy51cGRhdGVTdGF0ZSh7IHNob3dBZGRJbnZvaWNlTW9kYWw6IGZhbHNlIH0pO1xuICB9XG5cbiAgdmlld0RvY3VtZW50KCk6IERvY3VtZW50IHtcbiAgICB0aGlzLnVwZGF0ZVN0YXRlKHtcbiAgICAgIHNob3dBZGRJbnZvaWNlTW9kYWw6IHRydWUsXG4gICAgICBlZGl0OiBmYWxzZSxcbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcy5zdGF0ZS5zZWxlY3Rpb25bMF07XG4gIH1cblxuICBzZXRTZWxlY3Rpb24oc2VsZWN0aW9uOiBEb2N1bWVudFtdKTogdm9pZCB7XG4gICAgdGhpcy51cGRhdGVTdGF0ZSh7IHNlbGVjdGlvbiB9KTtcbiAgfVxuXG4gIGFkZFRvU2VsZWN0aW9uKGRvY3VtZW50OiBEb2N1bWVudCk6IHZvaWQge1xuICAgIHRoaXMudXBkYXRlU3RhdGUoeyBzZWxlY3Rpb246IFtkb2N1bWVudF0gfSk7XG4gIH1cblxuICBzZXREaXNhYmxlZChkaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMudXBkYXRlU3RhdGUoeyBkaXNhYmxlZCB9KTtcbiAgfVxuXG4gIHNldFNob3dJbnZvaWNlU2VhcmNoTW9kYWwodmlzaWJsZTogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMudXBkYXRlU3RhdGUoeyBzaG93SW52b2ljZVNlYXJjaE1vZGFsOiB2aXNpYmxlIH0pO1xuICB9XG5cbiAgc2V0U2hvd0FkZEludm9pY2VNb2RhbCh2aXNpYmxlOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy51cGRhdGVTdGF0ZSh7IHNob3dBZGRJbnZvaWNlTW9kYWw6IHZpc2libGUgfSk7XG4gIH1cblxuICBvbkNoYW5nZURvY3VtZW50KGRvY3VtZW50OiBEb2N1bWVudCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5oYXNGaWxsZWRWYWx1ZXMoZG9jdW1lbnQpKSB7XG4gICAgICB0aGlzLnV0aWxzLm1lc3NhZ2UoXG4gICAgICAgIFwiZXJyb3JcIixcbiAgICAgICAgXCJ5bXMuaW50Lndtc19zYXZlX2Vycm9yX3JlZ2lzdGVyX2RvY3VtZW50X21lc3NhZ2VfdGl0bGVcIixcbiAgICAgICAgXCJ5bXMuaW50Lndtc19zYXZlX2Vycm9yX3JlZ2lzdGVyX2RvY3VtZW50X21lc3NhZ2VfZGVzY3JpcHRpb25cIlxuICAgICAgKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmFzc2lnbktleXMoZG9jdW1lbnQpO1xuICAgIGNvbnN0IGR1cGxpY2F0ZURvY3VtZW50ID0gdGhpcy5zdGF0ZS5ncmlkRGF0YS5maW5kKFxuICAgICAgKGdyaWREYXRhKSA9PiBncmlkRGF0YS5rZXkgPT09IGRvY3VtZW50LmtleVxuICAgICk7XG5cbiAgICBpZiAoZHVwbGljYXRlRG9jdW1lbnQpIHtcbiAgICAgIHRoaXMudXRpbHMubWVzc2FnZShcbiAgICAgICAgXCJlcnJvclwiLFxuICAgICAgICBcInltcy5pbnQud21zX2Vycm9yX3JlZ2lzdGVyX2RvY3VtZW50X21lc3NhZ2VfdGl0bGVcIixcbiAgICAgICAgXCJ5bXMuaW50Lndtc19lcnJvcl9yZWdpc3Rlcl9kb2N1bWVudF9tZXNzYWdlX2Rlc2NyaXB0aW9uXCJcbiAgICAgICk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgbmV3R3JpZERhdGEgPSBbLi4udGhpcy5zdGF0ZS5ncmlkRGF0YSwgZG9jdW1lbnRdO1xuICAgIHRoaXMudXBkYXRlU3RhdGUoe1xuICAgICAgZ3JpZERhdGE6IG5ld0dyaWREYXRhLFxuICAgICAgZGlzYWJsZWQ6IGZhbHNlLFxuICAgICAgc2hvd0FkZEludm9pY2VNb2RhbDogZmFsc2UsXG4gICAgICBzaG93SW52b2ljZVNlYXJjaE1vZGFsOiBmYWxzZSxcbiAgICB9KTtcbiAgICB0aGlzLnV0aWxzLm1lc3NhZ2UoXG4gICAgICBcInN1Y2Nlc3NcIixcbiAgICAgIHRoaXMuc3VtbWFyeSxcbiAgICAgIFwieW1zLmludC53bXNfc3VjY2Vzc19tZXNzYWdlX2Rlc2NyaXB0aW9uXCJcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3NpZ25LZXlzKGRvY3VtZW50OiBEb2N1bWVudCk6IHZvaWQge1xuICAgIGlmIChkb2N1bWVudC5pZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAodGhpcy5hZ2VuZGEuaWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBkb2N1bWVudC5zY2hlZHVsaW5nSWQgPSB0aGlzLmFnZW5kYS5pZDtcbiAgICAgIH1cbiAgICAgIGlmIChkb2N1bWVudC5rZXkgPT09IHVuZGVmaW5lZCB8fCBkb2N1bWVudC5rZXkgPT09IG51bGwpIHtcbiAgICAgICAgZG9jdW1lbnQua2V5ID1cbiAgICAgICAgICB0aGlzLmN1cnJlbnRTdHJhdGVneS51cGRhdGVEb2N1bWVudEtleShkb2N1bWVudCkgfHxcbiAgICAgICAgICBkb2N1bWVudC5pbnZvaWNlS2V5O1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgaGFzRmlsbGVkVmFsdWVzKGRvY3VtZW50OiBEb2N1bWVudCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGZvcm1WYWx1ZXMgPSBPYmplY3QudmFsdWVzKGRvY3VtZW50KTtcbiAgICByZXR1cm4gZm9ybVZhbHVlcy5zb21lKCh2YWx1ZSkgPT4gdmFsdWUgIT09IG51bGwgJiYgdmFsdWUgIT09IFwiXCIpO1xuICB9XG5cbiAgc2F2ZSgpOiB2b2lkIHtcbiAgICBjb25zdCB7IGdyaWREYXRhIH0gPSB0aGlzLnN0YXRlO1xuXG4gICAgaWYgKGdyaWREYXRhLmxlbmd0aCA+IDApIHtcbiAgICAgIGdyaWREYXRhLmZvckVhY2goKGRhdGEpID0+IHtcbiAgICAgICAgaWYgKCFkYXRhLmlkKSB7XG4gICAgICAgICAgaWYgKCFkYXRhLnNjaGVkdWxpbmdJZCkge1xuICAgICAgICAgICAgZGF0YS5zY2hlZHVsaW5nSWQgPSB0aGlzLmFnZW5kYS5pZDtcbiAgICAgICAgICB9XG4gICAgICAgICAgZGF0YS5rZXkgPSB0aGlzLnVwZGF0ZUtleUJ5V21zKGRhdGEpO1xuICAgICAgICAgIHRoaXMuZG9jdW1lbnRTZXJ2aWNlLmluc2VydChkYXRhKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zdWNlc3NNZXNzYWdlKCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgdGhpcy51cGRhdGVTdGF0ZSh7IGRpc2FibGVkOiB0cnVlIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuZG9jdW1lbnRTZXJ2aWNlLnVwZGF0ZShkYXRhLmlkLCBkYXRhKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zdWNlc3NNZXNzYWdlKCk7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVN0YXRlKHsgZGlzYWJsZWQ6IHRydWUgfSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICB0aGlzLmxpc3REb2N1bWVudHMoZmFsc2UpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlS2V5QnlXbXMoZGF0YTogYW55KTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5jdXJyZW50U3RyYXRlZ3kudXBkYXRlRG9jdW1lbnRLZXkoZGF0YSkgfHwgZGF0YS5pbnZvaWNlS2V5O1xuICB9XG5cbiAgZGVsZXRlU2VsZWN0ZWREb2N1bWVudHMoKTogdm9pZCB7XG4gICAgdGhpcy5yZW1vdmVEb2N1bWVudElmSWRVbmRlZmluZWQoKTtcblxuICAgIGNvbnN0IHsgc2VsZWN0aW9uIH0gPSB0aGlzLnN0YXRlO1xuICAgIGlmIChzZWxlY3Rpb24ubGVuZ3RoIDwgMSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGZvcmtKb2luKFxuICAgICAgc2VsZWN0aW9uLm1hcCgoZG9jdW1lbnQpID0+IHRoaXMuZG9jdW1lbnRTZXJ2aWNlLmRlbGV0ZShkb2N1bWVudC5pZCkpXG4gICAgKVxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSkpXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgdGhpcy51dGlscy5tZXNzYWdlKFxuICAgICAgICAgIFwic3VjY2Vzc1wiLFxuICAgICAgICAgIFwieW1zLnBhdGlvLndhcm5fZGVsZXRlZF9tZXNzYWdlX3RpdGxlXCIsXG4gICAgICAgICAgXCJ5bXMucGF0aW8uZGVsZXRlZF9tZXNzYWdlX2RldGFpbFwiXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMubGlzdERvY3VtZW50cyh0cnVlKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSByZW1vdmVEb2N1bWVudElmSWRVbmRlZmluZWQoKTogdm9pZCB7XG4gICAgY29uc3QgeyBzZWxlY3Rpb24sIGdyaWREYXRhIH0gPSB0aGlzLnN0YXRlO1xuICAgIGNvbnN0IG5ld1NlbGVjdGlvbiA9IFsuLi5zZWxlY3Rpb25dO1xuICAgIGNvbnN0IG5ld0dyaWREYXRhID0gWy4uLmdyaWREYXRhXTtcblxuICAgIHNlbGVjdGlvbi5mb3JFYWNoKCh2YWx1ZSwgaW5kZXgpID0+IHtcbiAgICAgIGlmICghdmFsdWUuaWQpIHtcbiAgICAgICAgY29uc3QgaW5kZXhHcmlkRGF0YSA9IG5ld0dyaWREYXRhLmZpbmRJbmRleChcbiAgICAgICAgICAoZG9jdW1lbnQpID0+IGRvY3VtZW50LmtleSA9PT0gdmFsdWUua2V5XG4gICAgICAgICk7XG4gICAgICAgIG5ld0dyaWREYXRhLnNwbGljZShpbmRleEdyaWREYXRhLCAxKTtcbiAgICAgICAgbmV3U2VsZWN0aW9uLnNwbGljZShpbmRleCwgMSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICB0aGlzLnVwZGF0ZVN0YXRlKHsgZ3JpZERhdGE6IG5ld0dyaWREYXRhLCBzZWxlY3Rpb246IG5ld1NlbGVjdGlvbiB9KTtcbiAgfVxuXG4gIG5vdFNhdmVkRG9jdW1lbnRzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnN0YXRlLmdyaWREYXRhLnNvbWUoKGRvY3VtZW50KSA9PiAhZG9jdW1lbnQuaWQpO1xuICB9XG5cbiAgbGlzdERvY3VtZW50cyhpc0RlbGV0ZTogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuZG9jdW1lbnRTZXJ2aWNlXG4gICAgICAubGlzdCh7XG4gICAgICAgIGZpbHRlclF1ZXJ5OiBgc2NoZWR1bGluZ0lkIGVxICcke3RoaXMuYWdlbmRhLmlkfSdgLFxuICAgICAgICBzaXplOiAxMDAsXG4gICAgICB9KVxuICAgICAgLnN1YnNjcmliZSgoY29udGVudHM6IGFueSkgPT4ge1xuICAgICAgICBsZXQgbmV3R3JpZERhdGEgPSBpc0RlbGV0ZVxuICAgICAgICAgID8gdGhpcy5zdGF0ZS5ncmlkRGF0YS5maWx0ZXIoKGl0ZW0pID0+ICFpdGVtLmlkKVxuICAgICAgICAgIDogW107XG5cbiAgICAgICAgaWYgKGNvbnRlbnRzLnRvdGFsRWxlbWVudHMgPiAwKSB7XG4gICAgICAgICAgbmV3R3JpZERhdGEgPSBbLi4ubmV3R3JpZERhdGEsIC4uLmNvbnRlbnRzLmNvbnRlbnRzXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGRvY3VtZW50VG90YWxSZWNvcmRzID1cbiAgICAgICAgICBjb250ZW50cy50b3RhbEVsZW1lbnRzID4gMFxuICAgICAgICAgICAgPyBjb250ZW50cy50b3RhbEVsZW1lbnRzXG4gICAgICAgICAgICA6IG5ld0dyaWREYXRhLmxlbmd0aDtcblxuICAgICAgICBjb25zdCBoYXNFbGVtZW50V2l0aG91dElkID0gbmV3R3JpZERhdGEuc29tZSgoaXRlbSkgPT4gIWl0ZW0uaWQpO1xuXG4gICAgICAgIHRoaXMudXBkYXRlU3RhdGUoe1xuICAgICAgICAgIGdyaWREYXRhOiBuZXdHcmlkRGF0YSxcbiAgICAgICAgICBkaXNhYmxlZDogIWhhc0VsZW1lbnRXaXRob3V0SWQsXG4gICAgICAgICAgbG9hZGluZzogZmFsc2UsXG4gICAgICAgICAgc2VsZWN0aW9uOiBbXSxcbiAgICAgICAgICBkb2N1bWVudFRvdGFsUmVjb3JkcyxcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgfVxuXG4gIC8vIE1lbnUgQWN0aW9uc1xuICBnZXRBY3Rpb25zKCk6IE1lbnVJdGVtW10ge1xuICAgIHJldHVybiBbXG4gICAgICB7XG4gICAgICAgIGRpc2FibGVkOiB0aGlzLmNoZWNrV21zU3lzdGVtSW52YWxpZCgpLFxuICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcInltcy5pbnQud21zX3NlYXJjaFwiKSxcbiAgICAgICAgY29tbWFuZDogKCkgPT4gdGhpcy5vcGVuSW52b2ljZUtleU1vZGFsKCksXG4gICAgICAgIGljb246IFwiZmEgZmEtc2VhcmNoXCIsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBkaXNhYmxlZDogdGhpcy5jaGVja1dtc1N5c3RlbUludmFsaWQoKSxcbiAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJ5bXMuaW50Lndtc19hZGRfZG9jdW1lbnRfcmVnaXN0ZXJcIiksXG4gICAgICAgIGNvbW1hbmQ6ICgpID0+IHRoaXMub3BlbkRvY3VtZW50UmVnaXN0ZXJNb2RhbCgpLFxuICAgICAgICBpY29uOiBcImZhcyBmYS1wZW4tc3F1YXJlXCIsXG4gICAgICB9LFxuICAgIF07XG4gIH1cblxuICBjaGVja1dtc1N5c3RlbUludmFsaWQoKTogYm9vbGVhbiB7XG4gICAgY29uc3QgeyB3bXNTeXN0ZW0gfSA9IHRoaXMuc3RhdGU7XG4gICAgcmV0dXJuIHdtc1N5c3RlbSAmJiB3bXNTeXN0ZW0gPT09IFdtc1N5c3RlbS5OT05FO1xuICB9XG5cbiAgLy8gR3JpZCBjb2x1bW5zXG4gIHByaXZhdGUgdXBkYXRlR3JpZENvbHVtbnMoKTogdm9pZCB7XG4gICAgY29uc3QgZ3JpZENvbHVtbnMgPSB0aGlzLmdldEdyaWRDb2x1bW5zKCk7XG4gICAgdGhpcy51cGRhdGVTdGF0ZSh7IGdyaWRDb2x1bW5zIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRHcmlkQ29sdW1ucygpOiBhbnlbXSB7XG4gICAgaWYgKCF0aGlzLmN1cnJlbnRTdHJhdGVneSkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5jdXJyZW50U3RyYXRlZ3kuZ2V0R3JpZENvbHVtbnMoXG4gICAgICB0aGlzLnRyYW5zbGF0ZSxcbiAgICAgIHRoaXMuc3RhdGUuaXNDbGllbnRlRXh0ZXJub1xuICAgICk7XG4gIH1cblxuICAvLyBXTVMgVHlwZSBjaGVja3NcbiAgaXNXbXNTZW5pb3JDb25uZWN0KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnN0YXRlLndtc1N5c3RlbSA9PT0gV21zU3lzdGVtLlNFTklPUl9DT05ORUNUO1xuICB9XG5cbiAgaXNXbXNXSVMoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhdGUud21zU3lzdGVtID09PSBXbXNTeXN0ZW0uV0lTO1xuICB9XG5cbiAgaXNXbXNTaWx0KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnN0YXRlLndtc1N5c3RlbSA9PT0gV21zU3lzdGVtLlNFTklPUjtcbiAgfVxuXG4gIGlzV21zUGFydG5lcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5zdGF0ZS53bXNTeXN0ZW0gPT09IFdtc1N5c3RlbS5QQVJUTkVSO1xuICB9XG5cbiAgLy8gVmFsaWRhdGlvblxuICB2YWxpZGF0ZURvY3VtZW50KGRvY3VtZW50OiBhbnkpOiBib29sZWFuIHtcbiAgICBpZiAoIXRoaXMuY3VycmVudFN0cmF0ZWd5KSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBjb25zdCByZXN1bHQgPSB0aGlzLmN1cnJlbnRTdHJhdGVneS52YWxpZGF0ZURvY3VtZW50KGRvY3VtZW50LCB7XG4gICAgICB5YXJkOiB0aGlzLnlhcmQsXG4gICAgICBzY2hlZHVsZTogdGhpcy5zY2hlZHVsZSxcbiAgICAgIGFnZW5kYTogdGhpcy5hZ2VuZGEsXG4gICAgfSk7XG5cbiAgICBpZiAoIXJlc3VsdC5pc1ZhbGlkICYmIHJlc3VsdC5lcnJvck1lc3NhZ2VLZXkpIHtcbiAgICAgIHRoaXMuYnVpbGRNZXNzYWdlKHJlc3VsdC5lcnJvck1lc3NhZ2VLZXkpO1xuICAgIH1cblxuICAgIHJldHVybiByZXN1bHQuaXNWYWxpZDtcbiAgfVxuXG4gIC8vIEludm9pY2UgY29uZGl0aW9uc1xuICBnZXRGaWx0ZXJlZEludm9pY2VDb25kaXRpb25zKFxuICAgIGludm9pY2VDb25kaXRpb246IGFueVxuICApOiB7IGxhYmVsOiBzdHJpbmc7IHZhbHVlOiBJbnZvaWNlQ29uZGl0aW9uIHwgbnVsbCB9W10ge1xuICAgIGlmICghdGhpcy5jdXJyZW50U3RyYXRlZ3kpIHtcbiAgICAgIHJldHVybiB0aGlzLmludm9pY2VDb25kaXRpb25zO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5jdXJyZW50U3RyYXRlZ3kuZ2V0RmlsdGVyZWRJbnZvaWNlQ29uZGl0aW9ucyhcbiAgICAgIGludm9pY2VDb25kaXRpb24sXG4gICAgICB0aGlzLmludm9pY2VDb25kaXRpb25zXG4gICAgKTtcbiAgfVxuXG4gIHN1cHBvcnRzSW52b2ljZUNvbmRpdGlvbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5jdXJyZW50U3RyYXRlZ3kuc3VwcG9ydHNJbnZvaWNlQ29uZGl0aW9uKCkgfHwgZmFsc2U7XG4gIH1cblxuICAvLyBIZWxwZXJzXG4gIGdldFByb3Aob2JqOiBhbnksIHBhdGg6IHN0cmluZyk6IGFueSB7XG4gICAgcmV0dXJuIHBhdGhcbiAgICAgIC5zcGxpdChcIi5cIilcbiAgICAgIC5yZWR1Y2UoXG4gICAgICAgIChyZXN1bHQ6IGFueSwgcHJvcDogYW55KSA9PlxuICAgICAgICAgIHJlc3VsdFtwcm9wXSA9PT0gdW5kZWZpbmVkID8gXCJcIiA6IHJlc3VsdFtwcm9wXSxcbiAgICAgICAgb2JqXG4gICAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBzdWNlc3NNZXNzYWdlKCk6IHZvaWQge1xuICAgIHRoaXMudXRpbHMubWVzc2FnZShcInN1Y2Nlc3NcIiwgdGhpcy5zdW1tYXJ5LCBcInNhdmVkX21lc3NhZ2VfY29udGVudFwiKTtcbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRNZXNzYWdlKGRlc2NyaXB0aW9uOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLnV0aWxzLm1lc3NhZ2UoXG4gICAgICBcIndhcm5cIixcbiAgICAgIFwieW1zLmludC5kb2N1bWVudG9faW52YWxpZG9fd2FybmluZ19oZWFkZXJcIixcbiAgICAgIGRlc2NyaXB0aW9uXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlU3RhdGUocGFydGlhbFN0YXRlOiBQYXJ0aWFsPERvY3VtZW50R3JpZFN0YXRlPik6IHZvaWQge1xuICAgIHRoaXMuc3RhdGVTdWJqZWN0Lm5leHQoeyAuLi50aGlzLnN0YXRlLCAuLi5wYXJ0aWFsU3RhdGUgfSk7XG4gIH1cblxuICBkZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMubmdVbnN1YnNjcmliZS5uZXh0KCk7XG4gICAgdGhpcy5uZ1Vuc3Vic2NyaWJlLmNvbXBsZXRlKCk7XG4gIH1cbn1cbiJdfQ==
@@ -1,18 +1,21 @@
1
1
  import * as tslib_1 from "tslib";
2
- import { DocumentGridComponent } from './document-grid.component';
2
+ import { DocumentGridComponent } from "./document-grid.component";
3
+ import { DocumentGridFacade } from "./document-grid.facade";
4
+ import { WmsIntegrationStrategyFactory } from "./strategies/wms-integration-strategy.factory";
3
5
  import { NgModule } from "@angular/core";
4
6
  import { CommonModule } from "@angular/common";
5
7
  import { TranslateModule } from "@ngx-translate/core";
6
- import { ButtonModule, EmptyStateModule } from "@seniorsistemas/angular-components";
7
- import { DropdownModule, PanelModule } from 'primeng/primeng';
8
+ import { ButtonModule, EmptyStateModule, } from "@seniorsistemas/angular-components";
9
+ import { ConfirmDialogModule, DropdownModule, PanelModule, } from "primeng/primeng";
10
+ import { ConfirmationService } from "primeng/api";
8
11
  import { TableModule } from "primeng/table";
9
- import { RegisterDocumentModule } from './register-document/register-document.module';
10
- import { InsertKeyModule } from './insert-key/insert-key.module';
12
+ import { RegisterDocumentModule } from "./register-document/register-document.module";
13
+ import { InsertKeyModule } from "./insert-key/insert-key.module";
11
14
  import { ButtonModule as PrimeButtonModule } from "primeng/button";
12
15
  import { ComponentsModule as LogisticaComponentsModule } from "@seniorsistemas/yms-components";
13
- import { FormsModule } from '@angular/forms';
16
+ import { FormsModule } from "@angular/forms";
14
17
  import { ExternalTenantService } from "../../entities/external-tenant/external-tenant.service";
15
- import { CpfCnpjFormatPipe } from '../../shared/cpf-cnpj-format.pipe';
18
+ import { CpfCnpjFormatPipe } from "../../shared/cpf-cnpj-format.pipe";
16
19
  var DocumentGridModule = /** @class */ (function () {
17
20
  function DocumentGridModule() {
18
21
  }
@@ -21,7 +24,12 @@ var DocumentGridModule = /** @class */ (function () {
21
24
  declarations: [DocumentGridComponent, CpfCnpjFormatPipe],
22
25
  entryComponents: [DocumentGridComponent],
23
26
  exports: [DocumentGridComponent, CpfCnpjFormatPipe],
24
- providers: [ExternalTenantService],
27
+ providers: [
28
+ ExternalTenantService,
29
+ DocumentGridFacade,
30
+ WmsIntegrationStrategyFactory,
31
+ ConfirmationService,
32
+ ],
25
33
  imports: [
26
34
  CommonModule,
27
35
  TranslateModule,
@@ -34,11 +42,12 @@ var DocumentGridModule = /** @class */ (function () {
34
42
  LogisticaComponentsModule,
35
43
  EmptyStateModule,
36
44
  DropdownModule,
37
- FormsModule
45
+ FormsModule,
46
+ ConfirmDialogModule,
38
47
  ],
39
48
  })
40
49
  ], DocumentGridModule);
41
50
  return DocumentGridModule;
42
51
  }());
43
52
  export { DocumentGridModule };
44
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9jdW1lbnQtZ3JpZC5tb2R1bGUuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Ac2VuaW9yc2lzdGVtYXMveW1zLWludGVncmF0aW9uLyIsInNvdXJjZXMiOlsic3JjL3dtcy9jb21wb25lbnRzL2RvY3VtZW50LWdyaWQvZG9jdW1lbnQtZ3JpZC5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsWUFBWSxFQUFFLGdCQUFnQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDcEYsT0FBTyxFQUFFLGNBQWMsRUFBRSxXQUFXLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUM5RCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzVDLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDhDQUE4QyxDQUFDO0FBQ3RGLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNqRSxPQUFPLEVBQUUsWUFBWSxJQUFJLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDbkUsT0FBTyxFQUFFLGdCQUFnQixJQUFJLHlCQUF5QixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDL0YsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHdEQUF3RCxDQUFDO0FBQy9GLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBcUJ0RTtJQUFBO0lBQ0EsQ0FBQztJQURZLGtCQUFrQjtRQXBCOUIsUUFBUSxDQUFDO1lBQ04sWUFBWSxFQUFFLENBQUMscUJBQXFCLEVBQUUsaUJBQWlCLENBQUM7WUFDeEQsZUFBZSxFQUFFLENBQUMscUJBQXFCLENBQUM7WUFDeEMsT0FBTyxFQUFFLENBQUMscUJBQXFCLEVBQUUsaUJBQWlCLENBQUM7WUFDbkQsU0FBUyxFQUFFLENBQUMscUJBQXFCLENBQUM7WUFDbEMsT0FBTyxFQUFFO2dCQUNQLFlBQVk7Z0JBQ1osZUFBZTtnQkFDZixZQUFZO2dCQUNaLFdBQVc7Z0JBQ1gsV0FBVztnQkFDWCxzQkFBc0I7Z0JBQ3RCLGVBQWU7Z0JBQ2YsaUJBQWlCO2dCQUNqQix5QkFBeUI7Z0JBQ3pCLGdCQUFnQjtnQkFDaEIsY0FBYztnQkFDZCxXQUFXO2FBQ1o7U0FDSixDQUFDO09BQ1csa0JBQWtCLENBQzlCO0lBQUQseUJBQUM7Q0FBQSxBQURELElBQ0M7U0FEWSxrQkFBa0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEb2N1bWVudEdyaWRDb21wb25lbnQgfSBmcm9tICcuL2RvY3VtZW50LWdyaWQuY29tcG9uZW50JztcbmltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gXCJAYW5ndWxhci9jb21tb25cIjtcbmltcG9ydCB7IFRyYW5zbGF0ZU1vZHVsZSB9IGZyb20gXCJAbmd4LXRyYW5zbGF0ZS9jb3JlXCI7XG5pbXBvcnQgeyBCdXR0b25Nb2R1bGUsIEVtcHR5U3RhdGVNb2R1bGUgfSBmcm9tIFwiQHNlbmlvcnNpc3RlbWFzL2FuZ3VsYXItY29tcG9uZW50c1wiO1xuaW1wb3J0IHsgRHJvcGRvd25Nb2R1bGUsIFBhbmVsTW9kdWxlIH0gZnJvbSAncHJpbWVuZy9wcmltZW5nJztcbmltcG9ydCB7IFRhYmxlTW9kdWxlIH0gZnJvbSBcInByaW1lbmcvdGFibGVcIjtcbmltcG9ydCB7IFJlZ2lzdGVyRG9jdW1lbnRNb2R1bGUgfSBmcm9tICcuL3JlZ2lzdGVyLWRvY3VtZW50L3JlZ2lzdGVyLWRvY3VtZW50Lm1vZHVsZSc7XG5pbXBvcnQgeyBJbnNlcnRLZXlNb2R1bGUgfSBmcm9tICcuL2luc2VydC1rZXkvaW5zZXJ0LWtleS5tb2R1bGUnO1xuaW1wb3J0IHsgQnV0dG9uTW9kdWxlIGFzIFByaW1lQnV0dG9uTW9kdWxlIH0gZnJvbSBcInByaW1lbmcvYnV0dG9uXCI7XG5pbXBvcnQgeyBDb21wb25lbnRzTW9kdWxlIGFzIExvZ2lzdGljYUNvbXBvbmVudHNNb2R1bGUgfSBmcm9tIFwiQHNlbmlvcnNpc3RlbWFzL3ltcy1jb21wb25lbnRzXCI7XG5pbXBvcnQgeyBGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IEV4dGVybmFsVGVuYW50U2VydmljZSB9IGZyb20gXCIuLi8uLi9lbnRpdGllcy9leHRlcm5hbC10ZW5hbnQvZXh0ZXJuYWwtdGVuYW50LnNlcnZpY2VcIjtcbmltcG9ydCB7IENwZkNucGpGb3JtYXRQaXBlIH0gZnJvbSAnLi4vLi4vc2hhcmVkL2NwZi1jbnBqLWZvcm1hdC5waXBlJztcbkBOZ01vZHVsZSh7XG4gICAgZGVjbGFyYXRpb25zOiBbRG9jdW1lbnRHcmlkQ29tcG9uZW50LCBDcGZDbnBqRm9ybWF0UGlwZV0sXG4gICAgZW50cnlDb21wb25lbnRzOiBbRG9jdW1lbnRHcmlkQ29tcG9uZW50XSxcbiAgICBleHBvcnRzOiBbRG9jdW1lbnRHcmlkQ29tcG9uZW50LCBDcGZDbnBqRm9ybWF0UGlwZV0sXG4gICAgcHJvdmlkZXJzOiBbRXh0ZXJuYWxUZW5hbnRTZXJ2aWNlXSxcbiAgICBpbXBvcnRzOiBbXG4gICAgICBDb21tb25Nb2R1bGUsXG4gICAgICBUcmFuc2xhdGVNb2R1bGUsXG4gICAgICBCdXR0b25Nb2R1bGUsXG4gICAgICBQYW5lbE1vZHVsZSxcbiAgICAgIFRhYmxlTW9kdWxlLFxuICAgICAgUmVnaXN0ZXJEb2N1bWVudE1vZHVsZSxcbiAgICAgIEluc2VydEtleU1vZHVsZSxcbiAgICAgIFByaW1lQnV0dG9uTW9kdWxlLFxuICAgICAgTG9naXN0aWNhQ29tcG9uZW50c01vZHVsZSxcbiAgICAgIEVtcHR5U3RhdGVNb2R1bGUsXG4gICAgICBEcm9wZG93bk1vZHVsZSxcbiAgICAgIEZvcm1zTW9kdWxlXG4gICAgXSxcbn0pXG5leHBvcnQgY2xhc3MgRG9jdW1lbnRHcmlkTW9kdWxlIHtcbn1cbiJdfQ==
53
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9jdW1lbnQtZ3JpZC5tb2R1bGUuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Ac2VuaW9yc2lzdGVtYXMveW1zLWludGVncmF0aW9uLyIsInNvdXJjZXMiOlsic3JjL3dtcy9jb21wb25lbnRzL2RvY3VtZW50LWdyaWQvZG9jdW1lbnQtZ3JpZC5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzVELE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxNQUFNLCtDQUErQyxDQUFDO0FBQzlGLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN0RCxPQUFPLEVBQ0wsWUFBWSxFQUNaLGdCQUFnQixHQUNqQixNQUFNLG9DQUFvQyxDQUFDO0FBQzVDLE9BQU8sRUFDTCxtQkFBbUIsRUFDbkIsY0FBYyxFQUNkLFdBQVcsR0FDWixNQUFNLGlCQUFpQixDQUFDO0FBQ3pCLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUNsRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzVDLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDhDQUE4QyxDQUFDO0FBQ3RGLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNqRSxPQUFPLEVBQUUsWUFBWSxJQUFJLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDbkUsT0FBTyxFQUFFLGdCQUFnQixJQUFJLHlCQUF5QixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDL0YsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHdEQUF3RCxDQUFDO0FBQy9GLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBMkJ0RTtJQUFBO0lBQWlDLENBQUM7SUFBckIsa0JBQWtCO1FBMUI5QixRQUFRLENBQUM7WUFDUixZQUFZLEVBQUUsQ0FBQyxxQkFBcUIsRUFBRSxpQkFBaUIsQ0FBQztZQUN4RCxlQUFlLEVBQUUsQ0FBQyxxQkFBcUIsQ0FBQztZQUN4QyxPQUFPLEVBQUUsQ0FBQyxxQkFBcUIsRUFBRSxpQkFBaUIsQ0FBQztZQUNuRCxTQUFTLEVBQUU7Z0JBQ1QscUJBQXFCO2dCQUNyQixrQkFBa0I7Z0JBQ2xCLDZCQUE2QjtnQkFDN0IsbUJBQW1CO2FBQ3BCO1lBQ0QsT0FBTyxFQUFFO2dCQUNQLFlBQVk7Z0JBQ1osZUFBZTtnQkFDZixZQUFZO2dCQUNaLFdBQVc7Z0JBQ1gsV0FBVztnQkFDWCxzQkFBc0I7Z0JBQ3RCLGVBQWU7Z0JBQ2YsaUJBQWlCO2dCQUNqQix5QkFBeUI7Z0JBQ3pCLGdCQUFnQjtnQkFDaEIsY0FBYztnQkFDZCxXQUFXO2dCQUNYLG1CQUFtQjthQUNwQjtTQUNGLENBQUM7T0FDVyxrQkFBa0IsQ0FBRztJQUFELHlCQUFDO0NBQUEsQUFBbEMsSUFBa0M7U0FBckIsa0JBQWtCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRG9jdW1lbnRHcmlkQ29tcG9uZW50IH0gZnJvbSBcIi4vZG9jdW1lbnQtZ3JpZC5jb21wb25lbnRcIjtcbmltcG9ydCB7IERvY3VtZW50R3JpZEZhY2FkZSB9IGZyb20gXCIuL2RvY3VtZW50LWdyaWQuZmFjYWRlXCI7XG5pbXBvcnQgeyBXbXNJbnRlZ3JhdGlvblN0cmF0ZWd5RmFjdG9yeSB9IGZyb20gXCIuL3N0cmF0ZWdpZXMvd21zLWludGVncmF0aW9uLXN0cmF0ZWd5LmZhY3RvcnlcIjtcbmltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gXCJAYW5ndWxhci9jb21tb25cIjtcbmltcG9ydCB7IFRyYW5zbGF0ZU1vZHVsZSB9IGZyb20gXCJAbmd4LXRyYW5zbGF0ZS9jb3JlXCI7XG5pbXBvcnQge1xuICBCdXR0b25Nb2R1bGUsXG4gIEVtcHR5U3RhdGVNb2R1bGUsXG59IGZyb20gXCJAc2VuaW9yc2lzdGVtYXMvYW5ndWxhci1jb21wb25lbnRzXCI7XG5pbXBvcnQge1xuICBDb25maXJtRGlhbG9nTW9kdWxlLFxuICBEcm9wZG93bk1vZHVsZSxcbiAgUGFuZWxNb2R1bGUsXG59IGZyb20gXCJwcmltZW5nL3ByaW1lbmdcIjtcbmltcG9ydCB7IENvbmZpcm1hdGlvblNlcnZpY2UgfSBmcm9tIFwicHJpbWVuZy9hcGlcIjtcbmltcG9ydCB7IFRhYmxlTW9kdWxlIH0gZnJvbSBcInByaW1lbmcvdGFibGVcIjtcbmltcG9ydCB7IFJlZ2lzdGVyRG9jdW1lbnRNb2R1bGUgfSBmcm9tIFwiLi9yZWdpc3Rlci1kb2N1bWVudC9yZWdpc3Rlci1kb2N1bWVudC5tb2R1bGVcIjtcbmltcG9ydCB7IEluc2VydEtleU1vZHVsZSB9IGZyb20gXCIuL2luc2VydC1rZXkvaW5zZXJ0LWtleS5tb2R1bGVcIjtcbmltcG9ydCB7IEJ1dHRvbk1vZHVsZSBhcyBQcmltZUJ1dHRvbk1vZHVsZSB9IGZyb20gXCJwcmltZW5nL2J1dHRvblwiO1xuaW1wb3J0IHsgQ29tcG9uZW50c01vZHVsZSBhcyBMb2dpc3RpY2FDb21wb25lbnRzTW9kdWxlIH0gZnJvbSBcIkBzZW5pb3JzaXN0ZW1hcy95bXMtY29tcG9uZW50c1wiO1xuaW1wb3J0IHsgRm9ybXNNb2R1bGUgfSBmcm9tIFwiQGFuZ3VsYXIvZm9ybXNcIjtcbmltcG9ydCB7IEV4dGVybmFsVGVuYW50U2VydmljZSB9IGZyb20gXCIuLi8uLi9lbnRpdGllcy9leHRlcm5hbC10ZW5hbnQvZXh0ZXJuYWwtdGVuYW50LnNlcnZpY2VcIjtcbmltcG9ydCB7IENwZkNucGpGb3JtYXRQaXBlIH0gZnJvbSBcIi4uLy4uL3NoYXJlZC9jcGYtY25wai1mb3JtYXQucGlwZVwiO1xuQE5nTW9kdWxlKHtcbiAgZGVjbGFyYXRpb25zOiBbRG9jdW1lbnRHcmlkQ29tcG9uZW50LCBDcGZDbnBqRm9ybWF0UGlwZV0sXG4gIGVudHJ5Q29tcG9uZW50czogW0RvY3VtZW50R3JpZENvbXBvbmVudF0sXG4gIGV4cG9ydHM6IFtEb2N1bWVudEdyaWRDb21wb25lbnQsIENwZkNucGpGb3JtYXRQaXBlXSxcbiAgcHJvdmlkZXJzOiBbXG4gICAgRXh0ZXJuYWxUZW5hbnRTZXJ2aWNlLFxuICAgIERvY3VtZW50R3JpZEZhY2FkZSxcbiAgICBXbXNJbnRlZ3JhdGlvblN0cmF0ZWd5RmFjdG9yeSxcbiAgICBDb25maXJtYXRpb25TZXJ2aWNlLFxuICBdLFxuICBpbXBvcnRzOiBbXG4gICAgQ29tbW9uTW9kdWxlLFxuICAgIFRyYW5zbGF0ZU1vZHVsZSxcbiAgICBCdXR0b25Nb2R1bGUsXG4gICAgUGFuZWxNb2R1bGUsXG4gICAgVGFibGVNb2R1bGUsXG4gICAgUmVnaXN0ZXJEb2N1bWVudE1vZHVsZSxcbiAgICBJbnNlcnRLZXlNb2R1bGUsXG4gICAgUHJpbWVCdXR0b25Nb2R1bGUsXG4gICAgTG9naXN0aWNhQ29tcG9uZW50c01vZHVsZSxcbiAgICBFbXB0eVN0YXRlTW9kdWxlLFxuICAgIERyb3Bkb3duTW9kdWxlLFxuICAgIEZvcm1zTW9kdWxlLFxuICAgIENvbmZpcm1EaWFsb2dNb2R1bGUsXG4gIF0sXG59KVxuZXhwb3J0IGNsYXNzIERvY3VtZW50R3JpZE1vZHVsZSB7fVxuIl19