@stiunb/unb-lib-components 18.0.23 → 18.0.24

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 (25) hide show
  1. package/esm2022/lib/unb-mensagem/unb-mensagem.component.mjs +18 -26
  2. package/esm2022/lib/unb-mensagem/unb-mensagem.service.mjs +16 -21
  3. package/esm2022/lib/unb-pessoa/unb-pessoa-email-form/unb-pessoa-email-form.mjs +60 -29
  4. package/esm2022/lib/unb-pessoa/unb-pessoa-email-form/unb-pessoa-email-list.mjs +4 -4
  5. package/esm2022/lib/unb-pessoa/unb-pessoa-endereco-form/unb-pessoa-endereco-form.mjs +98 -67
  6. package/esm2022/lib/unb-pessoa/unb-pessoa-endereco-form/unb-pessoa-endereco-list.mjs +4 -4
  7. package/esm2022/lib/unb-pessoa/unb-pessoa-form/unb-pessoa-form.component.mjs +57 -73
  8. package/esm2022/lib/unb-pessoa/unb-pessoa-pesquisar/unb-pessoa-pesquisar.component.mjs +49 -36
  9. package/esm2022/lib/unb-pessoa/unb-pessoa-telefone-form/unb-pessoa-telefone-form.mjs +57 -29
  10. package/esm2022/lib/unb-pessoa/unb-pessoa-telefone-form/unb-pessoa-telefone-list.mjs +4 -4
  11. package/esm2022/lib/unb-pessoa/unb-pessoa.service.mjs +141 -45
  12. package/fesm2022/stiunb-unb-lib-components.mjs +467 -309
  13. package/fesm2022/stiunb-unb-lib-components.mjs.map +1 -1
  14. package/lib/unb-mensagem/unb-mensagem.component.d.ts +3 -17
  15. package/lib/unb-mensagem/unb-mensagem.service.d.ts +16 -18
  16. package/lib/unb-pessoa/unb-pessoa-email-form/unb-pessoa-email-form.d.ts +6 -2
  17. package/lib/unb-pessoa/unb-pessoa-email-form/unb-pessoa-email-list.d.ts +2 -5
  18. package/lib/unb-pessoa/unb-pessoa-endereco-form/unb-pessoa-endereco-form.d.ts +6 -3
  19. package/lib/unb-pessoa/unb-pessoa-endereco-form/unb-pessoa-endereco-list.d.ts +2 -5
  20. package/lib/unb-pessoa/unb-pessoa-form/unb-pessoa-form.component.d.ts +8 -8
  21. package/lib/unb-pessoa/unb-pessoa-pesquisar/unb-pessoa-pesquisar.component.d.ts +8 -8
  22. package/lib/unb-pessoa/unb-pessoa-telefone-form/unb-pessoa-telefone-form.d.ts +6 -4
  23. package/lib/unb-pessoa/unb-pessoa-telefone-form/unb-pessoa-telefone-list.d.ts +2 -5
  24. package/lib/unb-pessoa/unb-pessoa.service.d.ts +9 -13
  25. package/package.json +1 -1
@@ -16,7 +16,7 @@ export class UnbPessoaenderecoListComponent {
16
16
  this.dialog = dialog;
17
17
  this.podeEditar = true;
18
18
  this.enderecos = [];
19
- this.apiPessoaConfig = { url: '', token: '' };
19
+ this.backendURL = '';
20
20
  this.enderecosEmitted = new EventEmitter();
21
21
  }
22
22
  ngOnInit() {
@@ -138,7 +138,7 @@ export class UnbPessoaenderecoListComponent {
138
138
  this.enderecos.sort((a, b) => (a.ordemEndereco ?? 0) - (b.ordemEndereco ?? 0)); //
139
139
  }
140
140
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.2", ngImport: i0, type: UnbPessoaenderecoListComponent, deps: [{ token: i1.MatSnackBar }, { token: i2.UnBPessoaService }, { token: i3.MatDialog }], target: i0.ɵɵFactoryTarget.Component }); }
141
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.1.2", type: UnbPessoaenderecoListComponent, selector: "lib-unb-pessoa-endereco-list", inputs: { podeEditar: "podeEditar", enderecos: "enderecos", apiPessoaConfig: "apiPessoaConfig" }, outputs: { enderecosEmitted: "enderecosEmitted" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"mes-container\">\r\n <div class=\"header-container\">\r\n <div class=\"mes-header\">\r\n <span class=\"titulo\">\r\n {{ enderecos?.length === 1 ? 'Endere\u00E7o Cadastrado' : 'Endere\u00E7os Cadastrados' }}\r\n </span>\r\n <span class=\"titulo\">({{ enderecos?.length || 0 }})</span>\r\n </div>\r\n\r\n <button type=\"button\" matTooltip=\"Novo Endere\u00E7o\" mat-flat-button color=\"primary\" (click)=\"openFormDialog(null)\">\r\n Cadastrar Novo Endere\u00E7o\r\n </button>\r\n </div>\r\n\r\n <!-- Exibe a tabela de despesas somente se houver despesas -->\r\n <table class=\"my-table\" *ngIf=\"enderecos && enderecos.length > 0\" cdkDropList\r\n (cdkDropListDropped)=\"moverLinha($event)\">\r\n <tr style=\"background-color: #e4e3e3cc;\">\r\n <th style=\"width: 5%; text-align: center;\">Ordem</th>\r\n <th>Logradouro</th>\r\n <th>Bairro</th>\r\n <th>CEP</th>\r\n <th>Tipo</th>\r\n <th style=\"width: 1%; text-align: center;\">A\u00E7\u00F5es</th>\r\n </tr>\r\n\r\n <tr *ngFor=\"let valor of enderecos; let i = index\" class=\"my-tr\" cdkDrag>\r\n <td style=\"width: 5%; text-align: center;\">\r\n <div class=\"drag-cell\" cdkDragHandle>\r\n <mat-icon>drag_indicator</mat-icon>\r\n <span>{{ i + 1 }}</span>\r\n </div>\r\n </td>\r\n <td>{{ valor.logradouro }}</td>\r\n <td>{{ valor.bairro }}</td>\r\n <td>{{ valor.cep }}</td>\r\n <td>{{ valor.tipo?.toUpperCase() }}</td>\r\n <td>\r\n <div class=\"actions-container\">\r\n <button type=\"button\" mat-icon-button aria-label=\"Salvar\" color=\"primary\" (click)=\"editar(valor)\">\r\n <mat-icon>edit</mat-icon>\r\n </button>\r\n <button type=\"button\" mat-icon-button aria-label=\"Deletar\" color=\"warn\" (click)=\"excluir(valor)\">\r\n <mat-icon>delete</mat-icon>\r\n </button>\r\n </div>\r\n </td>\r\n </tr>\r\n </table>\r\n</div>", styles: [".mes-container{padding:12px;margin-bottom:2px;border-radius:8px;box-shadow:0 2px 6px #0000001a;transition:background-color .3s ease,box-shadow .3s ease}.mes-container:nth-child(2n){background-color:#f9f9fc}.mes-container:nth-child(odd){background-color:#fff}.mes-container:hover{background-color:#f0f0f5;box-shadow:0 4px 8px #00000026}.header-container{display:flex;align-items:center;margin-bottom:2px}.header-container button{margin-left:auto}.mes-header{display:flex;align-items:center;gap:6px;font-size:1.2rem;font-weight:700;color:#333}.actions-container{display:flex;justify-content:flex-end;gap:4px}.my-table{width:100%;border-collapse:collapse;border-radius:8px;overflow:hidden;box-shadow:0 4px 8px #0000001a;font-family:Arial,sans-serif}.my-table th,.my-table td{padding:5px;text-align:left;border-bottom:1px solid #ddd}.my-table th{background-color:#005dbb7b;color:#fff;font-weight:700}.my-table tr{transition:background-color .3s ease}.my-table tr:hover{background-color:#f1f1f1}.my-table td{background-color:#fff}.my-table td button{transition:transform .2s ease}.my-table td button:hover{transform:scale(1.1)}.my-table td:last-child{text-align:center}.order-input{width:40px;text-align:center;border:1px solid #ccc;border-radius:4px;padding:2px}.order-input:focus{border-color:#1976d2;outline:none}.drag-cell{display:inline-flex;align-items:center;justify-content:center;gap:4px;cursor:grab;-webkit-user-select:none;user-select:none}.drag-cell mat-icon{font-size:18px;line-height:1;vertical-align:middle}.cdk-drag-preview{background:#fff;border-radius:6px;box-shadow:0 4px 12px #0003;display:table;border-collapse:collapse}.cdk-drag-placeholder{opacity:0;display:table-row}.cdk-drag-animating{transition:transform .2s cubic-bezier(0,0,.2,1)}table[cdkDropList] tr{border-bottom:1px solid #e0e0e0}table[cdkDropList] td{padding:8px}\n"], dependencies: [{ kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i6.CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep", "cdkDropListElementContainer"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { kind: "directive", type: i6.CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer", "cdkDragScale"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "directive", type: i6.CdkDragHandle, selector: "[cdkDragHandle]", inputs: ["cdkDragHandleDisabled"] }, { kind: "component", type: i7.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i7.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }] }); }
141
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.1.2", type: UnbPessoaenderecoListComponent, selector: "lib-unb-pessoa-endereco-list", inputs: { podeEditar: "podeEditar", enderecos: "enderecos", backendURL: "backendURL" }, outputs: { enderecosEmitted: "enderecosEmitted" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"mes-container\">\r\n <div class=\"header-container\">\r\n <div class=\"mes-header\">\r\n <span class=\"titulo\">\r\n {{ enderecos?.length === 1 ? 'Endere\u00E7o Cadastrado' : 'Endere\u00E7os Cadastrados' }}\r\n </span>\r\n <span class=\"titulo\">({{ enderecos?.length || 0 }})</span>\r\n </div>\r\n\r\n <button type=\"button\" matTooltip=\"Novo Endere\u00E7o\" mat-flat-button color=\"primary\" (click)=\"openFormDialog(null)\">\r\n Cadastrar Novo Endere\u00E7o\r\n </button>\r\n </div>\r\n\r\n <!-- Exibe a tabela de despesas somente se houver despesas -->\r\n <table class=\"my-table\" *ngIf=\"enderecos && enderecos.length > 0\" cdkDropList\r\n (cdkDropListDropped)=\"moverLinha($event)\">\r\n <tr style=\"background-color: #e4e3e3cc;\">\r\n <th style=\"width: 5%; text-align: center;\">Ordem</th>\r\n <th>Logradouro</th>\r\n <th>Bairro</th>\r\n <th>CEP</th>\r\n <th>Tipo</th>\r\n <th style=\"width: 1%; text-align: center;\">A\u00E7\u00F5es</th>\r\n </tr>\r\n\r\n <tr *ngFor=\"let valor of enderecos; let i = index\" class=\"my-tr\" cdkDrag>\r\n <td style=\"width: 5%; text-align: center;\">\r\n <div class=\"drag-cell\" cdkDragHandle>\r\n <mat-icon>drag_indicator</mat-icon>\r\n <span>{{ i + 1 }}</span>\r\n </div>\r\n </td>\r\n <td>{{ valor.logradouro }}</td>\r\n <td>{{ valor.bairro }}</td>\r\n <td>{{ valor.cep }}</td>\r\n <td>{{ valor.tipo?.toUpperCase() }}</td>\r\n <td>\r\n <div class=\"actions-container\">\r\n <button type=\"button\" mat-icon-button aria-label=\"Salvar\" color=\"primary\" (click)=\"editar(valor)\">\r\n <mat-icon>edit</mat-icon>\r\n </button>\r\n <button type=\"button\" mat-icon-button aria-label=\"Deletar\" color=\"warn\" (click)=\"excluir(valor)\">\r\n <mat-icon>delete</mat-icon>\r\n </button>\r\n </div>\r\n </td>\r\n </tr>\r\n </table>\r\n</div>", styles: [".mes-container{padding:12px;margin-bottom:2px;border-radius:8px;box-shadow:0 2px 6px #0000001a;transition:background-color .3s ease,box-shadow .3s ease}.mes-container:nth-child(2n){background-color:#f9f9fc}.mes-container:nth-child(odd){background-color:#fff}.mes-container:hover{background-color:#f0f0f5;box-shadow:0 4px 8px #00000026}.header-container{display:flex;align-items:center;margin-bottom:2px}.header-container button{margin-left:auto}.mes-header{display:flex;align-items:center;gap:6px;font-size:1.2rem;font-weight:700;color:#333}.actions-container{display:flex;justify-content:flex-end;gap:4px}.my-table{width:100%;border-collapse:collapse;border-radius:8px;overflow:hidden;box-shadow:0 4px 8px #0000001a;font-family:Arial,sans-serif}.my-table th,.my-table td{padding:5px;text-align:left;border-bottom:1px solid #ddd}.my-table th{background-color:#005dbb7b;color:#fff;font-weight:700}.my-table tr{transition:background-color .3s ease}.my-table tr:hover{background-color:#f1f1f1}.my-table td{background-color:#fff}.my-table td button{transition:transform .2s ease}.my-table td button:hover{transform:scale(1.1)}.my-table td:last-child{text-align:center}.order-input{width:40px;text-align:center;border:1px solid #ccc;border-radius:4px;padding:2px}.order-input:focus{border-color:#1976d2;outline:none}.drag-cell{display:inline-flex;align-items:center;justify-content:center;gap:4px;cursor:grab;-webkit-user-select:none;user-select:none}.drag-cell mat-icon{font-size:18px;line-height:1;vertical-align:middle}.cdk-drag-preview{background:#fff;border-radius:6px;box-shadow:0 4px 12px #0003;display:table;border-collapse:collapse}.cdk-drag-placeholder{opacity:0;display:table-row}.cdk-drag-animating{transition:transform .2s cubic-bezier(0,0,.2,1)}table[cdkDropList] tr{border-bottom:1px solid #e0e0e0}table[cdkDropList] td{padding:8px}\n"], dependencies: [{ kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i6.CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep", "cdkDropListElementContainer"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { kind: "directive", type: i6.CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer", "cdkDragScale"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "directive", type: i6.CdkDragHandle, selector: "[cdkDragHandle]", inputs: ["cdkDragHandleDisabled"] }, { kind: "component", type: i7.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i7.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }] }); }
142
142
  }
143
143
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.2", ngImport: i0, type: UnbPessoaenderecoListComponent, decorators: [{
144
144
  type: Component,
@@ -147,9 +147,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.2", ngImpor
147
147
  type: Input
148
148
  }], enderecos: [{
149
149
  type: Input
150
- }], apiPessoaConfig: [{
150
+ }], backendURL: [{
151
151
  type: Input
152
152
  }], enderecosEmitted: [{
153
153
  type: Output
154
154
  }] } });
155
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidW5iLXBlc3NvYS1lbmRlcmVjby1saXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdW5iLWxpYi1jb21wb25lbnRzL3NyYy9saWIvdW5iLXBlc3NvYS91bmItcGVzc29hLWVuZGVyZWNvLWZvcm0vdW5iLXBlc3NvYS1lbmRlcmVjby1saXN0LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdW5iLWxpYi1jb21wb25lbnRzL3NyYy9saWIvdW5iLXBlc3NvYS91bmItcGVzc29hLWVuZGVyZWNvLWZvcm0vdW5iLXBlc3NvYS1lbmRlcmVjby1saXN0Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBNEIsTUFBTSxlQUFlLENBQUM7QUFLekcsT0FBTyxFQUFFLDhCQUE4QixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDNUUsT0FBTyxFQUFlLGVBQWUsRUFBRSxNQUFNLHdCQUF3QixDQUFDOzs7Ozs7Ozs7QUFRdEUsTUFBTSxPQUFPLDhCQUE4QjtJQU16QyxZQUFvQixRQUFxQixFQUFVLE9BQXlCLEVBQVMsTUFBaUI7UUFBbEYsYUFBUSxHQUFSLFFBQVEsQ0FBYTtRQUFVLFlBQU8sR0FBUCxPQUFPLENBQWtCO1FBQVMsV0FBTSxHQUFOLE1BQU0sQ0FBVztRQUo3RixlQUFVLEdBQUcsSUFBSSxDQUFDO1FBQ2xCLGNBQVMsR0FBUSxFQUFFLENBQUM7UUFDcEIsb0JBQWUsR0FBbUMsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsQ0FBQztRQUN4RSxxQkFBZ0IsR0FBRyxJQUFJLFlBQVksRUFBdUIsQ0FBQztJQUdyRSxDQUFDO0lBRUQsUUFBUTtRQUNOLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDLENBQUMsMkVBQTJFO0lBQ3hHLENBQUM7SUFFRCw4REFBOEQ7SUFD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Q0FBQyxhQUFhLEdBQUcscUJBQXFCLEVBQUUsQ0FBQyxDQUFDLEVBQUU7WUFDcEQsZUFBZSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxFQUFFO1FBQ2pELENBQUMsQ0FBQyxDQUFDO1FBRUgsZ0NBQWdDO1FBQ2hDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsYUFBYSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLGFBQWEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRTtJQUNwRixDQUFDOzhHQWhKVSw4QkFBOEI7a0dBQTlCLDhCQUE4Qiw4T0NkM0MscXdFQWlETTs7MkZEbkNPLDhCQUE4QjtrQkFOMUMsU0FBUztpQ0FDSSxLQUFLLFlBQ1AsOEJBQThCO3VJQU0vQixVQUFVO3NCQUFsQixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csZUFBZTtzQkFBdkIsS0FBSztnQkFDSSxnQkFBZ0I7c0JBQXpCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0LCBPbkNoYW5nZXMsIFNpbXBsZUNoYW5nZXMgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgTWF0U25hY2tCYXIgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zbmFjay1iYXInO1xyXG5pbXBvcnQgeyBNYXREaWFsb2cgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xyXG5pbXBvcnQgeyBVbkJQZXNzb2FTZXJ2aWNlIH0gZnJvbSAnLi4vdW5iLXBlc3NvYS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgVW5iUGVzc29hRW5kZXJlY28gfSBmcm9tICcuLi91bmItcGVzc29hLW1vZGVscy91bmItcGVzc29hLWVuZGVyZWNvLm1vZGVsJztcclxuaW1wb3J0IHsgVW5iUGVzc29hRW5kZXJlY29Gb3JtQ29tcG9uZW50IH0gZnJvbSAnLi91bmItcGVzc29hLWVuZGVyZWNvLWZvcm0nO1xyXG5pbXBvcnQgeyBDZGtEcmFnRHJvcCwgbW92ZUl0ZW1JbkFycmF5IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2RyYWctZHJvcCc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzdGFuZGFsb25lOiBmYWxzZSxcclxuICBzZWxlY3RvcjogJ2xpYi11bmItcGVzc29hLWVuZGVyZWNvLWxpc3QnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi91bmItcGVzc29hLWVuZGVyZWNvLWxpc3QuaHRtbCcsXHJcbiAgc3R5bGVVcmw6ICcuL3VuYi1wZXNzb2EtZW5kZXJlY28tbGlzdC5jc3MnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBVbmJQZXNzb2FlbmRlcmVjb0xpc3RDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcyB7XHJcblxyXG4gIEBJbnB1dCgpIHBvZGVFZGl0YXIgPSB0cnVlO1xyXG4gIEBJbnB1dCgpIGVuZGVyZWNvczogYW55ID0gW107XHJcbiAgQElucHV0KCkgYXBpUGVzc29hQ29uZmlnOiB7IHVybDogc3RyaW5nOyB0b2tlbjogc3RyaW5nIH0gPSB7IHVybDogJycsIHRva2VuOiAnJyB9O1xyXG4gIEBPdXRwdXQoKSBlbmRlcmVjb3NFbWl0dGVkID0gbmV3IEV2ZW50RW1pdHRlcjxVbmJQZXNzb2FFbmRlcmVjb1tdPigpO1xyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgc25hY2tCYXI6IE1hdFNuYWNrQmFyLCBwcml2YXRlIHNlcnZpY2U6IFVuQlBlc3NvYVNlcnZpY2UsIHB1YmxpYyBkaWFsb2c6IE1hdERpYWxvZykge1xyXG5cclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5zb3J0QW5kQXNzaWduT3JkZXIoKTsgLy8gb3JnYW5pemEgYSBsaXN0YSBkZSBlbmRlcmVjb3MuIEFzIHZlemVzIHRlbSBvcmRlbSBkdXBsaWNhZGEgb3UgZmFsdGFuZG8uXHJcbiAgfVxyXG5cclxuICAvLyB0ZW0gcXVlIGZhemVyIGlzc28gcHEgbm8gb24gaW5pdCBldSBhaW5kYSBuYW8gdGVuaG8gYSBsaXN0YVxyXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcclxuICAgIC8vIFZlcmlmaWNhIHNlIGEgcHJvcHJpZWRhZGUgJ2VuZGVyZWNvcycgbXVkb3VcclxuICAgIGlmIChjaGFuZ2VzWydlbmRlcmVjb3MnXSAmJiB0aGlzLmVuZGVyZWNvcykge1xyXG4gICAgICAvLyBjaGFtYWRhIHF1YW5kbyBvcyBkYWRvcyByZWFsbWVudGUgY2hlZ2FyZW1cclxuICAgICAgdGhpcy5zb3J0QW5kQXNzaWduT3JkZXIoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGV4Y2x1aXIoZW5kZXJlY29QYXJhRXhjbHVpcjogVW5iUGVzc29hRW5kZXJlY28pIHtcclxuICAgIGlmIChlbmRlcmVjb1BhcmFFeGNsdWlyLmNvZGlnbykge1xyXG4gICAgICAvLyBTZSB0ZW0gY8OzZGlnbywgcmVtb3ZlIHBvciBlbGUgKG1haXMgc2VndXJvKVxyXG4gICAgICB0aGlzLmVuZGVyZWNvcyA9IHRoaXMuZW5kZXJlY29zLmZpbHRlcih0ID0+IHQuY29kaWdvICE9PSBlbmRlcmVjb1BhcmFFeGNsdWlyLmNvZGlnbyk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAvLyBTZSBuw6NvIHRlbSBjw7NkaWdvIChub3ZvIGl0ZW0pLCByZW1vdmUgcGVsYSBvcmRlbVxyXG4gICAgICB0aGlzLmVuZGVyZWNvcyA9IHRoaXMuZW5kZXJlY29zLmZpbHRlcih0ID0+IHQub3JkZW1FbmRlcmVjbyAhPT0gZW5kZXJlY29QYXJhRXhjbHVpci5vcmRlbUVuZGVyZWNvKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBDaGFtYSBmdW7Dp8OjbyBleGlzdGVudGUgcXVlIHJlLWNhbGN1bGEgYXMgb3JkZW5zIGUgZW1pdGUgYSBsaXN0YSBhdHVhbGl6YWRhXHJcbiAgICB0aGlzLmF0dWFsaXphck9yZGVtKCk7XHJcbiAgfVxyXG5cclxuICBlZGl0YXIoZW5kZXJlY286IFVuYlBlc3NvYUVuZGVyZWNvKSB7XHJcbiAgICB0aGlzLm9wZW5Gb3JtRGlhbG9nKGVuZGVyZWNvKTtcclxuICB9XHJcblxyXG4gIGF0dWFsaXphck9yZGVtKCkge1xyXG4gICAgdGhpcy5lbmRlcmVjb3MuZm9yRWFjaCgoZW5kZXJlY28sIGlkeCkgPT4ge1xyXG4gICAgICBlbmRlcmVjby5vcmRlbUVuZGVyZWNvID0gaWR4ICsgMTtcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuZW5kZXJlY29zRW1pdHRlZC5lbWl0KHRoaXMuZW5kZXJlY29zKTtcclxuICB9XHJcblxyXG4gIG9wZW5Gb3JtRGlhbG9nKGVuZGVyZWNvVG9FZGl0OiBhbnkpIHtcclxuICAgIGNvbnN0IGRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nLm9wZW4oVW5iUGVzc29hRW5kZXJlY29Gb3JtQ29tcG9uZW50LCB7XHJcbiAgICAgIHdpZHRoOiAnOTAwcHgnLFxyXG4gICAgICBkYXRhOiB7XHJcbiAgICAgICAgZW5kZXJlY286IGVuZGVyZWNvVG9FZGl0LCAvLyBFLW1haWwgYSBzZXIgZWRpdGFkbyBvdSB2YXppbyBwYXJhIG5vdm9cclxuICAgICAgICBlbmRlcmVjb3NMaXN0OiB0aGlzLmVuZGVyZWNvcyAvLyBBIHN1YSBsaXN0YSBDT01QTEVUQSBkZSBlLW1haWxzXHJcbiAgICAgIH0sXHJcbiAgICB9KTtcclxuXHJcbiAgICBkaWFsb2dSZWYuYWZ0ZXJDbG9zZWQoKS5zdWJzY3JpYmUocmVzdWx0ID0+IHtcclxuICAgICAgaWYgKCFyZXN1bHQpIHtcclxuICAgICAgICByZXR1cm47IC8vIFVzdcOhcmlvIGNsaWNvdSBlbSAnRmVjaGFyJyBvdSAnQ2FuY2VsYXInXHJcbiAgICAgIH1cclxuICAgICAgbGV0IGluZGV4ID0gLTE7XHJcblxyXG4gICAgICAvLyAxLiBUZW50YSBlbmNvbnRyYXIgcGVsbyAnY29kaWdvJyAocGFyYSBpdGVucyBxdWUgasOhIHZpZXJhbSBkbyBiYW5jbylcclxuICAgICAgaWYgKHJlc3VsdC5jb2RpZ28pIHtcclxuICAgICAgICBpbmRleCA9IHRoaXMuZW5kZXJlY29zLmZpbmRJbmRleCh0ID0+IHQuY29kaWdvID09PSByZXN1bHQuY29kaWdvKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gMi4gU2UgbsOjbyBhY2hvdSBwZWxvICdjb2RpZ28nLCB0ZW50YSBwZWxhICdvcmRlbScuXHJcbiAgICAgIGlmIChpbmRleCA9PT0gLTEgJiYgcmVzdWx0Lm9yZGVtRW5kZXJlY28pIHtcclxuICAgICAgICBpbmRleCA9IHRoaXMuZW5kZXJlY29zLmZpbmRJbmRleCh0ID0+IHQub3JkZW1FbmRlcmVjbyA9PT0gcmVzdWx0Lm9yZGVtRW5kZXJlY28pO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoaW5kZXggPiAtMSkge1xyXG4gICAgICAgIC8vIEVOQ09OVFJPVSAocGVsbyAnY29kaWdvJyBvdSBwZWxhICdvcmRlbScpOiBBdHVhbGl6YSBvIGl0ZW0gZXhpc3RlbnRlXHJcbiAgICAgICAgdGhpcy5lbmRlcmVjb3NbaW5kZXhdID0gcmVzdWx0O1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIC8vIE7Dg08gRU5DT05UUk9VOiDDiSB1bSBpdGVtIDEwMCUgbm92byAobsOjbyB1bWEgZWRpw6fDo28pIGFkaWNpb25hIG5vIGZpbVxyXG4gICAgICAgIHRoaXMuZW5kZXJlY29zLnB1c2gocmVzdWx0KTtcclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5lbmRlcmVjb3Muc29ydCgoYSwgYikgPT4gKGEub3JkZW1FbmRlcmVjbyA/PyAwKSAtIChiLm9yZGVtRW5kZXJlY28gPz8gMCkpOyAvL1xyXG4gICAgICB0aGlzLmVuZGVyZWNvc0VtaXR0ZWQuZW1pdChbLi4udGhpcy5lbmRlcmVjb3NdKTtcclxuXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIG1vdmVyTGluaGEoZXZlbnQ6IENka0RyYWdEcm9wPGFueVtdPikge1xyXG4gICAgbW92ZUl0ZW1JbkFycmF5KHRoaXMuZW5kZXJlY29zLCBldmVudC5wcmV2aW91c0luZGV4LCBldmVudC5jdXJyZW50SW5kZXgpO1xyXG4gICAgdGhpcy5hdHVhbGl6YXJPcmRlbSgpXHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNvcnRBbmRBc3NpZ25PcmRlcigpOiB2b2lkIHtcclxuICAgIC8vIDEuIENyaWUgdW1hIGPDs3BpYSBkYSBsaXN0YVxyXG4gICAgY29uc3QgdGVtcGVuZGVyZWNvcyA9IFsuLi50aGlzLmVuZGVyZWNvc107XHJcblxyXG4gICAgLy8gMi4gTWFwZWllIGFzIG9yZGVucyBleGlzdGVudGVzXHJcbiAgICBjb25zdCBvcmRlck1hcCA9IG5ldyBNYXA8bnVtYmVyLCBVbmJQZXNzb2FFbmRlcmVjb1tdPigpO1xyXG4gICAgY29uc3QgZW5kZXJlY29zV2l0aG91dE9yZGVyOiBVbmJQZXNzb2FFbmRlcmVjb1tdID0gW107XHJcblxyXG4gICAgdGVtcGVuZGVyZWNvcy5mb3JFYWNoKGVuZGVyZWNvID0+IHtcclxuICAgICAgLy8gQ09SUkXDh8ODTyBBUVVJOlxyXG4gICAgICBpZiAoZW5kZXJlY28ub3JkZW1FbmRlcmVjbyAhPT0gdW5kZWZpbmVkICYmIGVuZGVyZWNvLm9yZGVtRW5kZXJlY28gIT09IG51bGwpIHtcclxuICAgICAgICBpZiAoIW9yZGVyTWFwLmhhcyhlbmRlcmVjby5vcmRlbUVuZGVyZWNvKSkge1xyXG4gICAgICAgICAgb3JkZXJNYXAuc2V0KGVuZGVyZWNvLm9yZGVtRW5kZXJlY28sIFtdKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgb3JkZXJNYXAuZ2V0KGVuZGVyZWNvLm9yZGVtRW5kZXJlY28pPy5wdXNoKGVuZGVyZWNvKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBlbmRlcmVjb3NXaXRob3V0T3JkZXIucHVzaChlbmRlcmVjbyk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIC8vIDMuIC4uLiAoRnVuw6fDtWVzICdmaW5hbFVzZWRPcmRlcnMnLCAnbmV4dEF2YWlsYWJsZU9yZGVyJyBjb250aW51YW0gaWd1YWlzKSAuLi5cclxuICAgIGNvbnN0IGZpbmFsVXNlZE9yZGVycyA9IG5ldyBTZXQ8bnVtYmVyPigpO1xyXG4gICAgbGV0IG5leHRBdmFpbGFibGVPcmRlciA9IDA7XHJcbiAgICBjb25zdCBnZXROZXh0QXZhaWxhYmxlT3JkZXIgPSAoKSA9PiB7XHJcbiAgICAgIHdoaWxlIChmaW5hbFVzZWRPcmRlcnMuaGFzKG5leHRBdmFpbGFibGVPcmRlcikpIHtcclxuICAgICAgICBuZXh0QXZhaWxhYmxlT3JkZXIrKztcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gbmV4dEF2YWlsYWJsZU9yZGVyKys7XHJcbiAgICB9O1xyXG5cclxuICAgIC8vIDQuIFByb2Nlc3NlIGVuZGVyZWNvcyBjb20gb3JkZW0gZGVmaW5pZGE6XHJcbiAgICB0aGlzLmVuZGVyZWNvcy5mb3JFYWNoKGVuZGVyZWNvID0+IHtcclxuICAgICAgLy8gQ09SUkXDh8ODTyBBUVVJOlxyXG4gICAgICBpZiAoZW5kZXJlY28ub3JkZW1FbmRlcmVjbyAhPT0gdW5kZWZpbmVkICYmIGVuZGVyZWNvLm9yZGVtRW5kZXJlY28gIT09IG51bGwpIHtcclxuICAgICAgICBpZiAoIWZpbmFsVXNlZE9yZGVycy5oYXMoZW5kZXJlY28ub3JkZW1FbmRlcmVjbykpIHtcclxuICAgICAgICAgIGZpbmFsVXNlZE9yZGVycy5hZGQoZW5kZXJlY28ub3JkZW1FbmRlcmVjbyk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIC8vIER1cGxpY2F0YSwgYXRyaWJ1YSB1bWEgbm92YVxyXG4gICAgICAgICAgZW5kZXJlY28ub3JkZW1FbmRlcmVjbyA9IGdldE5leHRBdmFpbGFibGVPcmRlcigpO1xyXG4gICAgICAgICAgZmluYWxVc2VkT3JkZXJzLmFkZChlbmRlcmVjby5vcmRlbUVuZGVyZWNvKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIC8vIDUuIEF0cmlidWEgb3JkZW5zIHBhcmEgZW5kZXJlY29zIHF1ZSBuw6NvIHRpbmhhbSBvcmRlbVxyXG4gICAgZW5kZXJlY29zV2l0aG91dE9yZGVyLmZvckVhY2goZW5kZXJlY28gPT4ge1xyXG4gICAgICBlbmRlcmVjby5vcmRlbUVuZGVyZWNvID0gZ2V0TmV4dEF2YWlsYWJsZU9yZGVyKCk7IC8vXHJcbiAgICAgIGZpbmFsVXNlZE9yZGVycy5hZGQoZW5kZXJlY28ub3JkZW1FbmRlcmVjbyk7IC8vXHJcbiAgICB9KTtcclxuXHJcbiAgICAvLyA2LiBGaW5hbG1lbnRlLCBvcmRlbmUgYSBsaXN0YVxyXG4gICAgdGhpcy5lbmRlcmVjb3Muc29ydCgoYSwgYikgPT4gKGEub3JkZW1FbmRlcmVjbyA/PyAwKSAtIChiLm9yZGVtRW5kZXJlY28gPz8gMCkpOyAvL1xyXG4gIH1cclxuXHJcblxyXG59IiwiPGRpdiBjbGFzcz1cIm1lcy1jb250YWluZXJcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJoZWFkZXItY29udGFpbmVyXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cIm1lcy1oZWFkZXJcIj5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0aXR1bG9cIj5cclxuICAgICAgICAgICAgICAgIHt7IGVuZGVyZWNvcz8ubGVuZ3RoID09PSAxID8gJ0VuZGVyZcOnbyBDYWRhc3RyYWRvJyA6ICdFbmRlcmXDp29zIENhZGFzdHJhZG9zJyB9fVxyXG4gICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGl0dWxvXCI+KHt7IGVuZGVyZWNvcz8ubGVuZ3RoIHx8IDAgfX0pPC9zcGFuPlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBtYXRUb29sdGlwPVwiTm92byBFbmRlcmXDp29cIiBtYXQtZmxhdC1idXR0b24gY29sb3I9XCJwcmltYXJ5XCIgKGNsaWNrKT1cIm9wZW5Gb3JtRGlhbG9nKG51bGwpXCI+XHJcbiAgICAgICAgICAgIENhZGFzdHJhciBOb3ZvIEVuZGVyZcOnb1xyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPCEtLSBFeGliZSBhIHRhYmVsYSBkZSBkZXNwZXNhcyBzb21lbnRlIHNlIGhvdXZlciBkZXNwZXNhcyAtLT5cclxuICAgIDx0YWJsZSBjbGFzcz1cIm15LXRhYmxlXCIgKm5nSWY9XCJlbmRlcmVjb3MgJiYgZW5kZXJlY29zLmxlbmd0aCA+IDBcIiBjZGtEcm9wTGlzdFxyXG4gICAgICAgIChjZGtEcm9wTGlzdERyb3BwZWQpPVwibW92ZXJMaW5oYSgkZXZlbnQpXCI+XHJcbiAgICAgICAgPHRyIHN0eWxlPVwiYmFja2dyb3VuZC1jb2xvcjogI2U0ZTNlM2NjO1wiPlxyXG4gICAgICAgICAgICA8dGggc3R5bGU9XCJ3aWR0aDogNSU7IHRleHQtYWxpZ246IGNlbnRlcjtcIj5PcmRlbTwvdGg+XHJcbiAgICAgICAgICAgIDx0aD5Mb2dyYWRvdXJvPC90aD5cclxuICAgICAgICAgICAgPHRoPkJhaXJybzwvdGg+XHJcbiAgICAgICAgICAgIDx0aD5DRVA8L3RoPlxyXG4gICAgICAgICAgICA8dGg+VGlwbzwvdGg+XHJcbiAgICAgICAgICAgIDx0aCBzdHlsZT1cIndpZHRoOiAxJTsgdGV4dC1hbGlnbjogY2VudGVyO1wiPkHDp8O1ZXM8L3RoPlxyXG4gICAgICAgIDwvdHI+XHJcblxyXG4gICAgICAgIDx0ciAqbmdGb3I9XCJsZXQgdmFsb3Igb2YgZW5kZXJlY29zOyBsZXQgaSA9IGluZGV4XCIgY2xhc3M9XCJteS10clwiIGNka0RyYWc+XHJcbiAgICAgICAgICAgIDx0ZCBzdHlsZT1cIndpZHRoOiA1JTsgdGV4dC1hbGlnbjogY2VudGVyO1wiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRyYWctY2VsbFwiIGNka0RyYWdIYW5kbGU+XHJcbiAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uPmRyYWdfaW5kaWNhdG9yPC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgICAgICAgICA8c3Bhbj57eyBpICsgMSB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICA8dGQ+e3sgdmFsb3IubG9ncmFkb3VybyB9fTwvdGQ+XHJcbiAgICAgICAgICAgIDx0ZD57eyB2YWxvci5iYWlycm8gfX08L3RkPlxyXG4gICAgICAgICAgICA8dGQ+e3sgdmFsb3IuY2VwIH19PC90ZD5cclxuICAgICAgICAgICAgPHRkPnt7IHZhbG9yLnRpcG8/LnRvVXBwZXJDYXNlKCkgfX08L3RkPlxyXG4gICAgICAgICAgICA8dGQ+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWN0aW9ucy1jb250YWluZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBtYXQtaWNvbi1idXR0b24gYXJpYS1sYWJlbD1cIlNhbHZhclwiIGNvbG9yPVwicHJpbWFyeVwiIChjbGljayk9XCJlZGl0YXIodmFsb3IpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5lZGl0PC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBtYXQtaWNvbi1idXR0b24gYXJpYS1sYWJlbD1cIkRlbGV0YXJcIiBjb2xvcj1cIndhcm5cIiAoY2xpY2spPVwiZXhjbHVpcih2YWxvcilcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uPmRlbGV0ZTwvbWF0LWljb24+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICA8L3RyPlxyXG4gICAgPC90YWJsZT5cclxuPC9kaXY+Il19
155
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidW5iLXBlc3NvYS1lbmRlcmVjby1saXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdW5iLWxpYi1jb21wb25lbnRzL3NyYy9saWIvdW5iLXBlc3NvYS91bmItcGVzc29hLWVuZGVyZWNvLWZvcm0vdW5iLXBlc3NvYS1lbmRlcmVjby1saXN0LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdW5iLWxpYi1jb21wb25lbnRzL3NyYy9saWIvdW5iLXBlc3NvYS91bmItcGVzc29hLWVuZGVyZWNvLWZvcm0vdW5iLXBlc3NvYS1lbmRlcmVjby1saXN0Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBNEIsTUFBTSxlQUFlLENBQUM7QUFLekcsT0FBTyxFQUFFLDhCQUE4QixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDNUUsT0FBTyxFQUFlLGVBQWUsRUFBRSxNQUFNLHdCQUF3QixDQUFDOzs7Ozs7Ozs7QUFRdEUsTUFBTSxPQUFPLDhCQUE4QjtJQU16QyxZQUFvQixRQUFxQixFQUFVLE9BQXlCLEVBQVMsTUFBaUI7UUFBbEYsYUFBUSxHQUFSLFFBQVEsQ0FBYTtRQUFVLFlBQU8sR0FBUCxPQUFPLENBQWtCO1FBQVMsV0FBTSxHQUFOLE1BQU0sQ0FBVztRQUo3RixlQUFVLEdBQUcsSUFBSSxDQUFDO1FBQ2xCLGNBQVMsR0FBUSxFQUFFLENBQUM7UUFDcEIsZUFBVSxHQUFXLEVBQUUsQ0FBQztRQUN2QixxQkFBZ0IsR0FBRyxJQUFJLFlBQVksRUFBdUIsQ0FBQztJQUdyRSxDQUFDO0lBRUQsUUFBUTtRQUNOLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDLENBQUMsMkVBQTJFO0lBQ3hHLENBQUM7SUFFRCw4REFBOEQ7SUFDOUQsV0FBVyxDQUFDLE9BQXNCO1FBQ2hDLDhDQUE4QztRQUM5QyxJQUFJLE9BQU8sQ0FBQyxXQUFXLENBQUMsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDM0MsNkNBQTZDO1lBQzdDLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1FBQzVCLENBQUM7SUFDSCxDQUFDO0lBRUQsT0FBTyxDQUFDLG1CQUFzQztRQUM1QyxJQUFJLG1CQUFtQixDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQy9CLDhDQUE4QztZQUM5QyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sS0FBSyxtQkFBbUIsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN2RixDQUFDO2FBQU0sQ0FBQztZQUNOLG1EQUFtRDtZQUNuRCxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLGFBQWEsS0FBSyxtQkFBbUIsQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUNyRyxDQUFDO1FBRUQsNkVBQTZFO1FBQzdFLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztJQUN4QixDQUFDO0lBRUQsTUFBTSxDQUFDLFFBQTJCO1FBQ2hDLElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDaEMsQ0FBQztJQUVELGNBQWM7UUFDWixJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFFBQVEsRUFBRSxHQUFHLEVBQUUsRUFBRTtZQUN2QyxRQUFRLENBQUMsYUFBYSxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7UUFDbkMsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUM3QyxDQUFDO0lBRUQsY0FBYyxDQUFDLGNBQW1CO1FBQ2hDLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLDhCQUE4QixFQUFFO1lBQ2pFLEtBQUssRUFBRSxPQUFPO1lBQ2QsSUFBSSxFQUFFO2dCQUNKLFFBQVEsRUFBRSxjQUFjLEVBQUUsMENBQTBDO2dCQUNwRSxhQUFhLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxrQ0FBa0M7YUFDakU7U0FDRixDQUFDLENBQUM7UUFFSCxTQUFTLENBQUMsV0FBVyxFQUFFLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxFQUFFO1lBQ3pDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztnQkFDWixPQUFPLENBQUMsMkNBQTJDO1lBQ3JELENBQUM7WUFDRCxJQUFJLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQztZQUVmLHVFQUF1RTtZQUN2RSxJQUFJLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQztnQkFDbEIsS0FBSyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sS0FBSyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDcEUsQ0FBQztZQUVELHFEQUFxRDtZQUNyRCxJQUFJLEtBQUssS0FBSyxDQUFDLENBQUMsSUFBSSxNQUFNLENBQUMsYUFBYSxFQUFFLENBQUM7Z0JBQ3pDLEtBQUssR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxhQUFhLEtBQUssTUFBTSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1lBQ2xGLENBQUM7WUFFRCxJQUFJLEtBQUssR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO2dCQUNmLHVFQUF1RTtnQkFDdkUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRyxNQUFNLENBQUM7WUFDakMsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLHNFQUFzRTtnQkFDdEUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDOUIsQ0FBQztZQUVELElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsYUFBYSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLGFBQWEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUNsRixJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztRQUVsRCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxVQUFVLENBQUMsS0FBeUI7UUFDbEMsZUFBZSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLGFBQWEsRUFBRSxLQUFLLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDekUsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFBO0lBQ3ZCLENBQUM7SUFFTyxrQkFBa0I7UUFDeEIsNkJBQTZCO1FBQzdCLE1BQU0sYUFBYSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7UUFFMUMsaUNBQWlDO1FBQ2pDLE1BQU0sUUFBUSxHQUFHLElBQUksR0FBRyxFQUErQixDQUFDO1FBQ3hELE1BQU0scUJBQXFCLEdBQXdCLEVBQUUsQ0FBQztRQUV0RCxhQUFhLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxFQUFFO1lBQy9CLGlCQUFpQjtZQUNqQixJQUFJLFFBQVEsQ0FBQyxhQUFhLEtBQUssU0FBUyxJQUFJLFFBQVEsQ0FBQyxhQUFhLEtBQUssSUFBSSxFQUFFLENBQUM7Z0JBQzVFLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsRUFBRSxDQUFDO29CQUMxQyxRQUFRLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxhQUFhLEVBQUUsRUFBRSxDQUFDLENBQUM7Z0JBQzNDLENBQUM7Z0JBQ0QsUUFBUSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ3ZELENBQUM7aUJBQU0sQ0FBQztnQkFDTixxQkFBcUIsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDdkMsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO1FBRUgsZ0ZBQWdGO1FBQ2hGLE1BQU0sZUFBZSxHQUFHLElBQUksR0FBRyxFQUFVLENBQUM7UUFDMUMsSUFBSSxrQkFBa0IsR0FBRyxDQUFDLENBQUM7UUFDM0IsTUFBTSxxQkFBcUIsR0FBRyxHQUFHLEVBQUU7WUFDakMsT0FBTyxlQUFlLENBQUMsR0FBRyxDQUFDLGtCQUFrQixDQUFDLEVBQUUsQ0FBQztnQkFDL0Msa0JBQWtCLEVBQUUsQ0FBQztZQUN2QixDQUFDO1lBQ0QsT0FBTyxrQkFBa0IsRUFBRSxDQUFDO1FBQzlCLENBQUMsQ0FBQztRQUVGLDRDQUE0QztRQUM1QyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsRUFBRTtZQUNoQyxpQkFBaUI7WUFDakIsSUFBSSxRQUFRLENBQUMsYUFBYSxLQUFLLFNBQVMsSUFBSSxRQUFRLENBQUMsYUFBYSxLQUFLLElBQUksRUFBRSxDQUFDO2dCQUM1RSxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLEVBQUUsQ0FBQztvQkFDakQsZUFBZSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLENBQUM7Z0JBQzlDLENBQUM7cUJBQU0sQ0FBQztvQkFDTiw4QkFBOEI7b0JBQzlCLFFBQVEsQ0FBQyxhQUFhLEdBQUcscUJBQXFCLEVBQUUsQ0FBQztvQkFDakQsZUFBZSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLENBQUM7Z0JBQzlDLENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFFSCx3REFBd0Q7UUFDeEQscUJBQXFCLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxFQUFFO1lBQ3ZDLFFBQVEsQ0FBQyxhQUFhLEdBQUcscUJBQXFCLEVBQUUsQ0FBQyxDQUFDLEVBQUU7WUFDcEQsZUFBZSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxFQUFFO1FBQ2pELENBQUMsQ0FBQyxDQUFDO1FBRUgsZ0NBQWdDO1FBQ2hDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsYUFBYSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLGFBQWEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRTtJQUNwRixDQUFDOzhHQWhKVSw4QkFBOEI7a0dBQTlCLDhCQUE4QixvT0NkM0MscXdFQWlETTs7MkZEbkNPLDhCQUE4QjtrQkFOMUMsU0FBUztpQ0FDSSxLQUFLLFlBQ1AsOEJBQThCO3VJQU0vQixVQUFVO3NCQUFsQixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDSSxnQkFBZ0I7c0JBQXpCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0LCBPbkNoYW5nZXMsIFNpbXBsZUNoYW5nZXMgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgTWF0U25hY2tCYXIgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zbmFjay1iYXInO1xyXG5pbXBvcnQgeyBNYXREaWFsb2cgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xyXG5pbXBvcnQgeyBVbkJQZXNzb2FTZXJ2aWNlIH0gZnJvbSAnLi4vdW5iLXBlc3NvYS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgVW5iUGVzc29hRW5kZXJlY28gfSBmcm9tICcuLi91bmItcGVzc29hLW1vZGVscy91bmItcGVzc29hLWVuZGVyZWNvLm1vZGVsJztcclxuaW1wb3J0IHsgVW5iUGVzc29hRW5kZXJlY29Gb3JtQ29tcG9uZW50IH0gZnJvbSAnLi91bmItcGVzc29hLWVuZGVyZWNvLWZvcm0nO1xyXG5pbXBvcnQgeyBDZGtEcmFnRHJvcCwgbW92ZUl0ZW1JbkFycmF5IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2RyYWctZHJvcCc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzdGFuZGFsb25lOiBmYWxzZSxcclxuICBzZWxlY3RvcjogJ2xpYi11bmItcGVzc29hLWVuZGVyZWNvLWxpc3QnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi91bmItcGVzc29hLWVuZGVyZWNvLWxpc3QuaHRtbCcsXHJcbiAgc3R5bGVVcmw6ICcuL3VuYi1wZXNzb2EtZW5kZXJlY28tbGlzdC5jc3MnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBVbmJQZXNzb2FlbmRlcmVjb0xpc3RDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcyB7XHJcblxyXG4gIEBJbnB1dCgpIHBvZGVFZGl0YXIgPSB0cnVlO1xyXG4gIEBJbnB1dCgpIGVuZGVyZWNvczogYW55ID0gW107XHJcbiAgQElucHV0KCkgYmFja2VuZFVSTDogc3RyaW5nID0gJyc7XHJcbiAgQE91dHB1dCgpIGVuZGVyZWNvc0VtaXR0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPFVuYlBlc3NvYUVuZGVyZWNvW10+KCk7XHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBzbmFja0JhcjogTWF0U25hY2tCYXIsIHByaXZhdGUgc2VydmljZTogVW5CUGVzc29hU2VydmljZSwgcHVibGljIGRpYWxvZzogTWF0RGlhbG9nKSB7XHJcblxyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLnNvcnRBbmRBc3NpZ25PcmRlcigpOyAvLyBvcmdhbml6YSBhIGxpc3RhIGRlIGVuZGVyZWNvcy4gQXMgdmV6ZXMgdGVtIG9yZGVtIGR1cGxpY2FkYSBvdSBmYWx0YW5kby5cclxuICB9XHJcblxyXG4gIC8vIHRlbSBxdWUgZmF6ZXIgaXNzbyBwcSBubyBvbiBpbml0IGV1IGFpbmRhIG5hbyB0ZW5obyBhIGxpc3RhXHJcbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xyXG4gICAgLy8gVmVyaWZpY2Egc2UgYSBwcm9wcmllZGFkZSAnZW5kZXJlY29zJyBtdWRvdVxyXG4gICAgaWYgKGNoYW5nZXNbJ2VuZGVyZWNvcyddICYmIHRoaXMuZW5kZXJlY29zKSB7XHJcbiAgICAgIC8vIGNoYW1hZGEgcXVhbmRvIG9zIGRhZG9zIHJlYWxtZW50ZSBjaGVnYXJlbVxyXG4gICAgICB0aGlzLnNvcnRBbmRBc3NpZ25PcmRlcigpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZXhjbHVpcihlbmRlcmVjb1BhcmFFeGNsdWlyOiBVbmJQZXNzb2FFbmRlcmVjbykge1xyXG4gICAgaWYgKGVuZGVyZWNvUGFyYUV4Y2x1aXIuY29kaWdvKSB7XHJcbiAgICAgIC8vIFNlIHRlbSBjw7NkaWdvLCByZW1vdmUgcG9yIGVsZSAobWFpcyBzZWd1cm8pXHJcbiAgICAgIHRoaXMuZW5kZXJlY29zID0gdGhpcy5lbmRlcmVjb3MuZmlsdGVyKHQgPT4gdC5jb2RpZ28gIT09IGVuZGVyZWNvUGFyYUV4Y2x1aXIuY29kaWdvKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIC8vIFNlIG7Do28gdGVtIGPDs2RpZ28gKG5vdm8gaXRlbSksIHJlbW92ZSBwZWxhIG9yZGVtXHJcbiAgICAgIHRoaXMuZW5kZXJlY29zID0gdGhpcy5lbmRlcmVjb3MuZmlsdGVyKHQgPT4gdC5vcmRlbUVuZGVyZWNvICE9PSBlbmRlcmVjb1BhcmFFeGNsdWlyLm9yZGVtRW5kZXJlY28pO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIENoYW1hIGZ1bsOnw6NvIGV4aXN0ZW50ZSBxdWUgcmUtY2FsY3VsYSBhcyBvcmRlbnMgZSBlbWl0ZSBhIGxpc3RhIGF0dWFsaXphZGFcclxuICAgIHRoaXMuYXR1YWxpemFyT3JkZW0oKTtcclxuICB9XHJcblxyXG4gIGVkaXRhcihlbmRlcmVjbzogVW5iUGVzc29hRW5kZXJlY28pIHtcclxuICAgIHRoaXMub3BlbkZvcm1EaWFsb2coZW5kZXJlY28pO1xyXG4gIH1cclxuXHJcbiAgYXR1YWxpemFyT3JkZW0oKSB7XHJcbiAgICB0aGlzLmVuZGVyZWNvcy5mb3JFYWNoKChlbmRlcmVjbywgaWR4KSA9PiB7XHJcbiAgICAgIGVuZGVyZWNvLm9yZGVtRW5kZXJlY28gPSBpZHggKyAxO1xyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5lbmRlcmVjb3NFbWl0dGVkLmVtaXQodGhpcy5lbmRlcmVjb3MpO1xyXG4gIH1cclxuXHJcbiAgb3BlbkZvcm1EaWFsb2coZW5kZXJlY29Ub0VkaXQ6IGFueSkge1xyXG4gICAgY29uc3QgZGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3BlbihVbmJQZXNzb2FFbmRlcmVjb0Zvcm1Db21wb25lbnQsIHtcclxuICAgICAgd2lkdGg6ICc5MDBweCcsXHJcbiAgICAgIGRhdGE6IHtcclxuICAgICAgICBlbmRlcmVjbzogZW5kZXJlY29Ub0VkaXQsIC8vIEUtbWFpbCBhIHNlciBlZGl0YWRvIG91IHZhemlvIHBhcmEgbm92b1xyXG4gICAgICAgIGVuZGVyZWNvc0xpc3Q6IHRoaXMuZW5kZXJlY29zIC8vIEEgc3VhIGxpc3RhIENPTVBMRVRBIGRlIGUtbWFpbHNcclxuICAgICAgfSxcclxuICAgIH0pO1xyXG5cclxuICAgIGRpYWxvZ1JlZi5hZnRlckNsb3NlZCgpLnN1YnNjcmliZShyZXN1bHQgPT4ge1xyXG4gICAgICBpZiAoIXJlc3VsdCkge1xyXG4gICAgICAgIHJldHVybjsgLy8gVXN1w6FyaW8gY2xpY291IGVtICdGZWNoYXInIG91ICdDYW5jZWxhcidcclxuICAgICAgfVxyXG4gICAgICBsZXQgaW5kZXggPSAtMTtcclxuXHJcbiAgICAgIC8vIDEuIFRlbnRhIGVuY29udHJhciBwZWxvICdjb2RpZ28nIChwYXJhIGl0ZW5zIHF1ZSBqw6EgdmllcmFtIGRvIGJhbmNvKVxyXG4gICAgICBpZiAocmVzdWx0LmNvZGlnbykge1xyXG4gICAgICAgIGluZGV4ID0gdGhpcy5lbmRlcmVjb3MuZmluZEluZGV4KHQgPT4gdC5jb2RpZ28gPT09IHJlc3VsdC5jb2RpZ28pO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyAyLiBTZSBuw6NvIGFjaG91IHBlbG8gJ2NvZGlnbycsIHRlbnRhIHBlbGEgJ29yZGVtJy5cclxuICAgICAgaWYgKGluZGV4ID09PSAtMSAmJiByZXN1bHQub3JkZW1FbmRlcmVjbykge1xyXG4gICAgICAgIGluZGV4ID0gdGhpcy5lbmRlcmVjb3MuZmluZEluZGV4KHQgPT4gdC5vcmRlbUVuZGVyZWNvID09PSByZXN1bHQub3JkZW1FbmRlcmVjbyk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChpbmRleCA+IC0xKSB7XHJcbiAgICAgICAgLy8gRU5DT05UUk9VIChwZWxvICdjb2RpZ28nIG91IHBlbGEgJ29yZGVtJyk6IEF0dWFsaXphIG8gaXRlbSBleGlzdGVudGVcclxuICAgICAgICB0aGlzLmVuZGVyZWNvc1tpbmRleF0gPSByZXN1bHQ7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgLy8gTsODTyBFTkNPTlRST1U6IMOJIHVtIGl0ZW0gMTAwJSBub3ZvIChuw6NvIHVtYSBlZGnDp8OjbykgYWRpY2lvbmEgbm8gZmltXHJcbiAgICAgICAgdGhpcy5lbmRlcmVjb3MucHVzaChyZXN1bHQpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLmVuZGVyZWNvcy5zb3J0KChhLCBiKSA9PiAoYS5vcmRlbUVuZGVyZWNvID8/IDApIC0gKGIub3JkZW1FbmRlcmVjbyA/PyAwKSk7IC8vXHJcbiAgICAgIHRoaXMuZW5kZXJlY29zRW1pdHRlZC5lbWl0KFsuLi50aGlzLmVuZGVyZWNvc10pO1xyXG5cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgbW92ZXJMaW5oYShldmVudDogQ2RrRHJhZ0Ryb3A8YW55W10+KSB7XHJcbiAgICBtb3ZlSXRlbUluQXJyYXkodGhpcy5lbmRlcmVjb3MsIGV2ZW50LnByZXZpb3VzSW5kZXgsIGV2ZW50LmN1cnJlbnRJbmRleCk7XHJcbiAgICB0aGlzLmF0dWFsaXphck9yZGVtKClcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc29ydEFuZEFzc2lnbk9yZGVyKCk6IHZvaWQge1xyXG4gICAgLy8gMS4gQ3JpZSB1bWEgY8OzcGlhIGRhIGxpc3RhXHJcbiAgICBjb25zdCB0ZW1wZW5kZXJlY29zID0gWy4uLnRoaXMuZW5kZXJlY29zXTtcclxuXHJcbiAgICAvLyAyLiBNYXBlaWUgYXMgb3JkZW5zIGV4aXN0ZW50ZXNcclxuICAgIGNvbnN0IG9yZGVyTWFwID0gbmV3IE1hcDxudW1iZXIsIFVuYlBlc3NvYUVuZGVyZWNvW10+KCk7XHJcbiAgICBjb25zdCBlbmRlcmVjb3NXaXRob3V0T3JkZXI6IFVuYlBlc3NvYUVuZGVyZWNvW10gPSBbXTtcclxuXHJcbiAgICB0ZW1wZW5kZXJlY29zLmZvckVhY2goZW5kZXJlY28gPT4ge1xyXG4gICAgICAvLyBDT1JSRcOHw4NPIEFRVUk6XHJcbiAgICAgIGlmIChlbmRlcmVjby5vcmRlbUVuZGVyZWNvICE9PSB1bmRlZmluZWQgJiYgZW5kZXJlY28ub3JkZW1FbmRlcmVjbyAhPT0gbnVsbCkge1xyXG4gICAgICAgIGlmICghb3JkZXJNYXAuaGFzKGVuZGVyZWNvLm9yZGVtRW5kZXJlY28pKSB7XHJcbiAgICAgICAgICBvcmRlck1hcC5zZXQoZW5kZXJlY28ub3JkZW1FbmRlcmVjbywgW10pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBvcmRlck1hcC5nZXQoZW5kZXJlY28ub3JkZW1FbmRlcmVjbyk/LnB1c2goZW5kZXJlY28pO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGVuZGVyZWNvc1dpdGhvdXRPcmRlci5wdXNoKGVuZGVyZWNvKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgLy8gMy4gLi4uIChGdW7Dp8O1ZXMgJ2ZpbmFsVXNlZE9yZGVycycsICduZXh0QXZhaWxhYmxlT3JkZXInIGNvbnRpbnVhbSBpZ3VhaXMpIC4uLlxyXG4gICAgY29uc3QgZmluYWxVc2VkT3JkZXJzID0gbmV3IFNldDxudW1iZXI+KCk7XHJcbiAgICBsZXQgbmV4dEF2YWlsYWJsZU9yZGVyID0gMDtcclxuICAgIGNvbnN0IGdldE5leHRBdmFpbGFibGVPcmRlciA9ICgpID0+IHtcclxuICAgICAgd2hpbGUgKGZpbmFsVXNlZE9yZGVycy5oYXMobmV4dEF2YWlsYWJsZU9yZGVyKSkge1xyXG4gICAgICAgIG5leHRBdmFpbGFibGVPcmRlcisrO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBuZXh0QXZhaWxhYmxlT3JkZXIrKztcclxuICAgIH07XHJcblxyXG4gICAgLy8gNC4gUHJvY2Vzc2UgZW5kZXJlY29zIGNvbSBvcmRlbSBkZWZpbmlkYTpcclxuICAgIHRoaXMuZW5kZXJlY29zLmZvckVhY2goZW5kZXJlY28gPT4ge1xyXG4gICAgICAvLyBDT1JSRcOHw4NPIEFRVUk6XHJcbiAgICAgIGlmIChlbmRlcmVjby5vcmRlbUVuZGVyZWNvICE9PSB1bmRlZmluZWQgJiYgZW5kZXJlY28ub3JkZW1FbmRlcmVjbyAhPT0gbnVsbCkge1xyXG4gICAgICAgIGlmICghZmluYWxVc2VkT3JkZXJzLmhhcyhlbmRlcmVjby5vcmRlbUVuZGVyZWNvKSkge1xyXG4gICAgICAgICAgZmluYWxVc2VkT3JkZXJzLmFkZChlbmRlcmVjby5vcmRlbUVuZGVyZWNvKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgLy8gRHVwbGljYXRhLCBhdHJpYnVhIHVtYSBub3ZhXHJcbiAgICAgICAgICBlbmRlcmVjby5vcmRlbUVuZGVyZWNvID0gZ2V0TmV4dEF2YWlsYWJsZU9yZGVyKCk7XHJcbiAgICAgICAgICBmaW5hbFVzZWRPcmRlcnMuYWRkKGVuZGVyZWNvLm9yZGVtRW5kZXJlY28pO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgLy8gNS4gQXRyaWJ1YSBvcmRlbnMgcGFyYSBlbmRlcmVjb3MgcXVlIG7Do28gdGluaGFtIG9yZGVtXHJcbiAgICBlbmRlcmVjb3NXaXRob3V0T3JkZXIuZm9yRWFjaChlbmRlcmVjbyA9PiB7XHJcbiAgICAgIGVuZGVyZWNvLm9yZGVtRW5kZXJlY28gPSBnZXROZXh0QXZhaWxhYmxlT3JkZXIoKTsgLy9cclxuICAgICAgZmluYWxVc2VkT3JkZXJzLmFkZChlbmRlcmVjby5vcmRlbUVuZGVyZWNvKTsgLy9cclxuICAgIH0pO1xyXG5cclxuICAgIC8vIDYuIEZpbmFsbWVudGUsIG9yZGVuZSBhIGxpc3RhXHJcbiAgICB0aGlzLmVuZGVyZWNvcy5zb3J0KChhLCBiKSA9PiAoYS5vcmRlbUVuZGVyZWNvID8/IDApIC0gKGIub3JkZW1FbmRlcmVjbyA/PyAwKSk7IC8vXHJcbiAgfVxyXG5cclxuXHJcbn0iLCI8ZGl2IGNsYXNzPVwibWVzLWNvbnRhaW5lclwiPlxyXG4gICAgPGRpdiBjbGFzcz1cImhlYWRlci1jb250YWluZXJcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwibWVzLWhlYWRlclwiPlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRpdHVsb1wiPlxyXG4gICAgICAgICAgICAgICAge3sgZW5kZXJlY29zPy5sZW5ndGggPT09IDEgPyAnRW5kZXJlw6dvIENhZGFzdHJhZG8nIDogJ0VuZGVyZcOnb3MgQ2FkYXN0cmFkb3MnIH19XHJcbiAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0aXR1bG9cIj4oe3sgZW5kZXJlY29zPy5sZW5ndGggfHwgMCB9fSk8L3NwYW4+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIG1hdFRvb2x0aXA9XCJOb3ZvIEVuZGVyZcOnb1wiIG1hdC1mbGF0LWJ1dHRvbiBjb2xvcj1cInByaW1hcnlcIiAoY2xpY2spPVwib3BlbkZvcm1EaWFsb2cobnVsbClcIj5cclxuICAgICAgICAgICAgQ2FkYXN0cmFyIE5vdm8gRW5kZXJlw6dvXHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8IS0tIEV4aWJlIGEgdGFiZWxhIGRlIGRlc3Blc2FzIHNvbWVudGUgc2UgaG91dmVyIGRlc3Blc2FzIC0tPlxyXG4gICAgPHRhYmxlIGNsYXNzPVwibXktdGFibGVcIiAqbmdJZj1cImVuZGVyZWNvcyAmJiBlbmRlcmVjb3MubGVuZ3RoID4gMFwiIGNka0Ryb3BMaXN0XHJcbiAgICAgICAgKGNka0Ryb3BMaXN0RHJvcHBlZCk9XCJtb3ZlckxpbmhhKCRldmVudClcIj5cclxuICAgICAgICA8dHIgc3R5bGU9XCJiYWNrZ3JvdW5kLWNvbG9yOiAjZTRlM2UzY2M7XCI+XHJcbiAgICAgICAgICAgIDx0aCBzdHlsZT1cIndpZHRoOiA1JTsgdGV4dC1hbGlnbjogY2VudGVyO1wiPk9yZGVtPC90aD5cclxuICAgICAgICAgICAgPHRoPkxvZ3JhZG91cm88L3RoPlxyXG4gICAgICAgICAgICA8dGg+QmFpcnJvPC90aD5cclxuICAgICAgICAgICAgPHRoPkNFUDwvdGg+XHJcbiAgICAgICAgICAgIDx0aD5UaXBvPC90aD5cclxuICAgICAgICAgICAgPHRoIHN0eWxlPVwid2lkdGg6IDElOyB0ZXh0LWFsaWduOiBjZW50ZXI7XCI+QcOnw7VlczwvdGg+XHJcbiAgICAgICAgPC90cj5cclxuXHJcbiAgICAgICAgPHRyICpuZ0Zvcj1cImxldCB2YWxvciBvZiBlbmRlcmVjb3M7IGxldCBpID0gaW5kZXhcIiBjbGFzcz1cIm15LXRyXCIgY2RrRHJhZz5cclxuICAgICAgICAgICAgPHRkIHN0eWxlPVwid2lkdGg6IDUlOyB0ZXh0LWFsaWduOiBjZW50ZXI7XCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHJhZy1jZWxsXCIgY2RrRHJhZ0hhbmRsZT5cclxuICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24+ZHJhZ19pbmRpY2F0b3I8L21hdC1pY29uPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuPnt7IGkgKyAxIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgIDx0ZD57eyB2YWxvci5sb2dyYWRvdXJvIH19PC90ZD5cclxuICAgICAgICAgICAgPHRkPnt7IHZhbG9yLmJhaXJybyB9fTwvdGQ+XHJcbiAgICAgICAgICAgIDx0ZD57eyB2YWxvci5jZXAgfX08L3RkPlxyXG4gICAgICAgICAgICA8dGQ+e3sgdmFsb3IudGlwbz8udG9VcHBlckNhc2UoKSB9fTwvdGQ+XHJcbiAgICAgICAgICAgIDx0ZD5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhY3Rpb25zLWNvbnRhaW5lclwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIG1hdC1pY29uLWJ1dHRvbiBhcmlhLWxhYmVsPVwiU2FsdmFyXCIgY29sb3I9XCJwcmltYXJ5XCIgKGNsaWNrKT1cImVkaXRhcih2YWxvcilcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uPmVkaXQ8L21hdC1pY29uPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIG1hdC1pY29uLWJ1dHRvbiBhcmlhLWxhYmVsPVwiRGVsZXRhclwiIGNvbG9yPVwid2FyblwiIChjbGljayk9XCJleGNsdWlyKHZhbG9yKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24+ZGVsZXRlPC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgIDwvdHI+XHJcbiAgICA8L3RhYmxlPlxyXG48L2Rpdj4iXX0=