tnx-shared 5.1.334 → 5.1.337

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.
@@ -4,7 +4,7 @@ import { Dialog } from 'tn-custom-primeng/dialog';
4
4
  import { ComponentContextService } from '../../app-context/component-context.service';
5
5
  import { ComponentBase } from '../../classes/base/component-base';
6
6
  import { SortDirs } from '../../classes/constants';
7
- import { CrudFormData, CrudFormSetting, CrudListData, CrudListSetting, DropdownControlSchema, RadioButtonListControlSchema, TextAlign } from '../../classes/form-schema';
7
+ import { CheckboxControlSchema, CrudFormData, CrudFormSetting, CrudListData, CrudListSetting, DropdownControlSchema, RadioButtonListControlSchema, TextAlign } from '../../classes/form-schema';
8
8
  import { DomService } from '../../services/dom.service';
9
9
  import { EntityMetadataService } from '../../services/entity-metadata.service';
10
10
  import { UserService } from '../../services/user.service';
@@ -16,6 +16,7 @@ export class SettingsComponent extends ComponentBase {
16
16
  this._userService = _userService;
17
17
  this.onCancel = new EventEmitter();
18
18
  this.onSave = new EventEmitter();
19
+ this.onDelete = new EventEmitter();
19
20
  this.model = new CrudFormData();
20
21
  this.setting = new CrudFormSetting();
21
22
  this.popupSize = { width: 1024, height: 550 };
@@ -29,6 +30,7 @@ export class SettingsComponent extends ComponentBase {
29
30
  sortField: this.parentSetting.columnSetting.sortField,
30
31
  sortDir: this.parentSetting.columnSetting.sortDir,
31
32
  groupField: this.parentSetting.columnSetting.groupField,
33
+ groupInClient: this.parentSetting.columnSetting.groupInClient,
32
34
  details: this.parentSetting.columnSetting.details
33
35
  };
34
36
  // this.model.activeEntityMetadata = false;
@@ -104,12 +106,18 @@ export class SettingsComponent extends ComponentBase {
104
106
  new DropdownControlSchema({
105
107
  field: 'groupField',
106
108
  label: this._translateService.instant('Nhóm theo'),
107
- mdWidth: 12,
109
+ mdWidth: 6,
108
110
  placeholder: 'Chọn cột',
109
111
  showClear: true,
110
112
  dataSource: groupDataSource,
111
113
  valueField: 'value',
112
114
  displayField: 'label',
115
+ }),
116
+ new CheckboxControlSchema({
117
+ field: 'groupInClient',
118
+ label: this._translateService.instant('Nhóm trên client'),
119
+ mdWidth: 6,
120
+ defaultValue: false
113
121
  })
114
122
  ];
115
123
  this.setting.schema.forEach(schema => {
@@ -134,6 +142,9 @@ export class SettingsComponent extends ComponentBase {
134
142
  saveSetting() {
135
143
  this.onSave.next(this.model.data);
136
144
  }
145
+ deleteSetting() {
146
+ this.onDelete.next();
147
+ }
137
148
  cancel() {
138
149
  this.onCancel.next(null);
139
150
  }
@@ -149,7 +160,7 @@ export class SettingsComponent extends ComponentBase {
149
160
  SettingsComponent.decorators = [
150
161
  { type: Component, args: [{
151
162
  selector: 'settings',
152
- template: "<tn-dialog #dialog [disabledButton]=\"model.submitting\" [closeOnEscape]=\"true\" [header]=\"popupHeader | translate\"\r\n [popupSize]=\"popupSize\" [visible]=\"true\" (onHide)=\"cancel()\" (visibleChange)=\"visibleChangedDialog($event)\"\r\n [styleClass]=\"'tn-form-dialog'\">\r\n <div style=\"height: 100%\">\r\n <crud-form #crudForm [context]=\"context\" [(data)]=\"model.data\" [setting]=\"setting\" [disableCaching]=\"true\">\r\n </crud-form>\r\n <div style=\"padding: 0.5rem;\">\r\n <div class=\"p-col-12\" *ngIf=\"parentSetting.cols\">\r\n <label for=\"configViewTable\" class=\"config-view-label\">C\u1EA5u h\u00ECnh hi\u1EC3n th\u1ECB</label>\r\n </div>\r\n <div class=\"p-col-12\" *ngIf=\"!parentSetting.cols\">\r\n <label for=\"configViewTable\" class=\"config-view-label\">Ch\u01B0a c\u00F3 thi\u1EBFt l\u1EADp c\u1ED9t cho trang\r\n n\u00E0y</label>\r\n </div>\r\n <div class=\"p-col-12\">\r\n <p-table [value]=\"model.data.details\" [columns]=\"columnSchemas\" [responsive]=\"true\"\r\n [reorderableColumns]=\"true\">\r\n <ng-template pTemplate=\"header\" let-columns let-rowData>\r\n <tr>\r\n <th *ngFor=\"let col of columnSchemas\" [style.width]=\"col.width\" style=\"text-align: center;\">\r\n {{col.header}}\r\n </th>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"body\" let-rowData let-ri=\"rowIndex\"\r\n let-columns=\"pageSetting.columnSettings\">\r\n <tr [pReorderableRow]=\"ri\">\r\n <td class=\"stt\" style=\"text-align:center\">{{ri+1}}</td>\r\n <td style=\"text-align:left\">\r\n <span class=\"p-column-title\">{{columnSchemas[1].header}}</span>\r\n {{rowData.columnName}}\r\n </td>\r\n <td style=\"text-align:center\">\r\n <span class=\"p-column-title\">{{columnSchemas[2].header}}</span>\r\n <p-checkbox [(ngModel)]=\"rowData.visible\" binary=\"true\">\r\n </p-checkbox>\r\n </td>\r\n <td style=\"text-align:center\">\r\n <span class=\"p-column-title\">{{columnSchemas[3].header}}</span>\r\n <p-dropdown appendTo=\"body\" [styleClass]=\"'full-width'\" [(ngModel)]=\"rowData.textAlign\"\r\n [options]=\"textAlignOptions\">\r\n </p-dropdown>\r\n </td>\r\n <td style=\"text-align:center\">\r\n <span class=\"p-column-title\">{{columnSchemas[4].header}}</span>\r\n <input [(ngModel)]=\"rowData.width\" pInputText style=\"width:100%\" autocomplete=\"off\"\r\n autocorrect=\"off\" autocapitalize=\"off\" spellcheck=\"false\" />\r\n </td>\r\n <td style=\"text-align:center\">\r\n <i class=\"fas fa-arrows-alt\"\r\n style=\"width:50px; cursor:pointer; padding: 8px; color: #555;\"\r\n pReorderableRowHandle></i>\r\n </td>\r\n </tr>\r\n </ng-template>\r\n </p-table>\r\n </div>\r\n </div>\r\n </div>\r\n <ng-template #footer>\r\n <button *ngIf=\"!parentSetting.hiddenSaveSetting\" type=\"button\" pButton class=\"p-button-text\" icon=\"pi pi-save\"\r\n [label]=\"'L\u01B0u' | translate\" (click)=\"saveSetting()\"></button>\r\n <button type=\"button\" pButton class=\"p-button-text p-button-secondary\" icon=\"pi pi-replay\"\r\n [label]=\"'FORM.CANCEL' | translate\" preventTab (click)=\"cancel()\"></button>\r\n </ng-template>\r\n</tn-dialog>",
163
+ template: "<tn-dialog #dialog [disabledButton]=\"model.submitting\" [closeOnEscape]=\"true\" [header]=\"popupHeader | translate\"\r\n [popupSize]=\"popupSize\" [visible]=\"true\" (onHide)=\"cancel()\" (visibleChange)=\"visibleChangedDialog($event)\"\r\n [styleClass]=\"'tn-form-dialog'\">\r\n <div style=\"height: 100%\">\r\n <crud-form #crudForm [context]=\"context\" [(data)]=\"model.data\" [setting]=\"setting\" [disableCaching]=\"true\">\r\n </crud-form>\r\n <div style=\"padding: 0.5rem;\">\r\n <div class=\"p-col-12\" *ngIf=\"parentSetting.cols\">\r\n <label for=\"configViewTable\" class=\"config-view-label\">C\u1EA5u h\u00ECnh hi\u1EC3n th\u1ECB</label>\r\n </div>\r\n <div class=\"p-col-12\" *ngIf=\"!parentSetting.cols\">\r\n <label for=\"configViewTable\" class=\"config-view-label\">Ch\u01B0a c\u00F3 thi\u1EBFt l\u1EADp c\u1ED9t cho trang\r\n n\u00E0y</label>\r\n </div>\r\n <div class=\"p-col-12\">\r\n <p-table [value]=\"model.data.details\" [columns]=\"columnSchemas\" [responsive]=\"true\"\r\n [reorderableColumns]=\"true\">\r\n <ng-template pTemplate=\"header\" let-columns let-rowData>\r\n <tr>\r\n <th *ngFor=\"let col of columnSchemas\" [style.width]=\"col.width\" style=\"text-align: center;\">\r\n {{col.header}}\r\n </th>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"body\" let-rowData let-ri=\"rowIndex\"\r\n let-columns=\"pageSetting.columnSettings\">\r\n <tr [pReorderableRow]=\"ri\">\r\n <td class=\"stt\" style=\"text-align:center\">{{ri+1}}</td>\r\n <td style=\"text-align:left\">\r\n <span class=\"p-column-title\">{{columnSchemas[1].header}}</span>\r\n {{rowData.columnName}}\r\n </td>\r\n <td style=\"text-align:center\">\r\n <span class=\"p-column-title\">{{columnSchemas[2].header}}</span>\r\n <p-checkbox [(ngModel)]=\"rowData.visible\" binary=\"true\">\r\n </p-checkbox>\r\n </td>\r\n <td style=\"text-align:center\">\r\n <span class=\"p-column-title\">{{columnSchemas[3].header}}</span>\r\n <p-dropdown appendTo=\"body\" [styleClass]=\"'full-width'\" [(ngModel)]=\"rowData.textAlign\"\r\n [options]=\"textAlignOptions\">\r\n </p-dropdown>\r\n </td>\r\n <td style=\"text-align:center\">\r\n <span class=\"p-column-title\">{{columnSchemas[4].header}}</span>\r\n <input [(ngModel)]=\"rowData.width\" pInputText style=\"width:100%\" autocomplete=\"off\"\r\n autocorrect=\"off\" autocapitalize=\"off\" spellcheck=\"false\" />\r\n </td>\r\n <td style=\"text-align:center\">\r\n <i class=\"fas fa-arrows-alt\"\r\n style=\"width:50px; cursor:pointer; padding: 8px; color: #555;\"\r\n pReorderableRowHandle></i>\r\n </td>\r\n </tr>\r\n </ng-template>\r\n </p-table>\r\n </div>\r\n </div>\r\n </div>\r\n <ng-template #footer>\r\n <ng-container *ngIf=\"!parentSetting.hiddenSaveSetting\">\r\n <button type=\"button\" pButton class=\"p-button-text\" icon=\"pi pi-save\" [label]=\"'L\u01B0u' | translate\"\r\n (click)=\"saveSetting()\"></button>\r\n <button type=\"button\" pButton class=\"p-button-text p-button-danger\" icon=\"pi pi-trash\"\r\n [label]=\"'B\u1ECF c\u1EA5u h\u00ECnh' | translate\" (click)=\"deleteSetting()\"></button>\r\n </ng-container>\r\n <button type=\"button\" pButton class=\"p-button-text p-button-secondary\" icon=\"pi pi-replay\"\r\n [label]=\"'FORM.CANCEL' | translate\" preventTab (click)=\"cancel()\"></button>\r\n </ng-template>\r\n</tn-dialog>",
153
164
  providers: [ComponentContextService],
154
165
  changeDetection: ChangeDetectionStrategy.Default,
155
166
  styles: [""]
@@ -167,6 +178,7 @@ SettingsComponent.propDecorators = {
167
178
  parentSetting: [{ type: Input }],
168
179
  entityMetadataService: [{ type: Input }],
169
180
  onCancel: [{ type: Output }],
170
- onSave: [{ type: Output }]
181
+ onSave: [{ type: Output }],
182
+ onDelete: [{ type: Output }]
171
183
  };
172
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2V0dGluZ3MuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Ii4uLy4uLy4uLy4uL3Byb2plY3RzL3RueC1zaGFyZWQvc3JjL2xpYi8iLCJzb3VyY2VzIjpbImNvbXBvbmVudHMvc2V0dGluZ3Mvc2V0dGluZ3MuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM3SCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDbEQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sNkNBQTZDLENBQUM7QUFDdEYsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ2xFLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNuRCxPQUFPLEVBQXVCLFlBQVksRUFBRSxlQUFlLEVBQUUsWUFBWSxFQUFFLGVBQWUsRUFBRSxxQkFBcUIsRUFBa0IsNEJBQTRCLEVBQUUsU0FBUyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDOU0sT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3hELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBQy9FLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQVMxRCxNQUFNLE9BQU8saUJBQWtCLFNBQVEsYUFBYTtJQXFCaEQsWUFDSSxTQUFtQixFQUNULGlCQUFtQyxFQUNuQyxXQUF1QixFQUN2QixZQUF5QjtRQUVuQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUM7UUFKUCxzQkFBaUIsR0FBakIsaUJBQWlCLENBQWtCO1FBQ25DLGdCQUFX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OztZQWpCMEQsUUFBUTtZQUMxRCxnQkFBZ0I7WUFNaEIsVUFBVTtZQUVWLFdBQVc7OztxQkFVZixTQUFTLFNBQUMsUUFBUSxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTswQkFFcEMsS0FBSzs0QkFDTCxLQUFLO29DQUVMLEtBQUs7dUJBRUwsTUFBTTtxQkFDTixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbmplY3RvciwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0LCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xyXG5pbXBvcnQgeyBEaWFsb2cgfSBmcm9tICd0bi1jdXN0b20tcHJpbWVuZy9kaWFsb2cnO1xyXG5pbXBvcnQgeyBDb21wb25lbnRDb250ZXh0U2VydmljZSB9IGZyb20gJy4uLy4uL2FwcC1jb250ZXh0L2NvbXBvbmVudC1jb250ZXh0LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBDb21wb25lbnRCYXNlIH0gZnJvbSAnLi4vLi4vY2xhc3Nlcy9iYXNlL2NvbXBvbmVudC1iYXNlJztcclxuaW1wb3J0IHsgU29ydERpcnMgfSBmcm9tICcuLi8uLi9jbGFzc2VzL2NvbnN0YW50cyc7XHJcbmltcG9ydCB7IENvbHVtblNldHRpbmdEZXRhaWwsIENydWRGb3JtRGF0YSwgQ3J1ZEZvcm1TZXR0aW5nLCBDcnVkTGlzdERhdGEsIENydWRMaXN0U2V0dGluZywgRHJvcGRvd25Db250cm9sU2NoZW1hLCBGb3JtU2NoZW1hQmFzZSwgUmFkaW9CdXR0b25MaXN0Q29udHJvbFNjaGVtYSwgVGV4dEFsaWduIH0gZnJvbSAnLi4vLi4vY2xhc3Nlcy9mb3JtLXNjaGVtYSc7XHJcbmltcG9ydCB7IERvbVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9kb20uc2VydmljZSc7XHJcbmltcG9ydCB7IEVudGl0eU1ldGFkYXRhU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2VudGl0eS1tZXRhZGF0YS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgVXNlclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy91c2VyLnNlcnZpY2UnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ3NldHRpbmdzJyxcclxuICAgIHRlbXBsYXRlVXJsOiAnLi9zZXR0aW5ncy5jb21wb25lbnQuaHRtbCcsXHJcbiAgICBzdHlsZVVybHM6IFsnLi9zZXR0aW5ncy5jb21wb25lbnQuc2NzcyddLFxyXG4gICAgcHJvdmlkZXJzOiBbQ29tcG9uZW50Q29udGV4dFNlcnZpY2VdLFxyXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5EZWZhdWx0XHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBTZXR0aW5nc0NvbXBvbmVudCBleHRlbmRzIENvbXBvbmVudEJhc2UgaW1wbGVtZW50cyBPbkluaXQge1xyXG4gICAgQFZpZXdDaGlsZCgnZGlhbG9nJywgeyBzdGF0aWM6IHRydWUgfSkgZGlhbG9nOiBEaWFsb2c7XHJcblxyXG4gICAgQElucHV0KCkgcGFyZW50TW9kZWw6IENydWRMaXN0RGF0YTtcclxuICAgIEBJbnB1dCgpIHBhcmVudFNldHRpbmc6IENydWRMaXN0U2V0dGluZztcclxuXHJcbiAgICBASW5wdXQoKSBlbnRpdHlNZXRhZGF0YVNlcnZpY2U6IEVudGl0eU1ldGFkYXRhU2VydmljZTtcclxuXHJcbiAgICBAT3V0cHV0KCkgb25DYW5jZWwgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICAgIEBPdXRwdXQoKSBvblNhdmUgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuXHJcbiAgICBtb2RlbDogQ3J1ZEZvcm1EYXRhID0gbmV3IENydWRGb3JtRGF0YSgpO1xyXG4gICAgc2V0dGluZzogQ3J1ZEZvcm1TZXR0aW5nID0gbmV3IENydWRGb3JtU2V0dGluZygpO1xyXG4gICAgY29udGV4dDogQ29tcG9uZW50Q29udGV4dFNlcnZpY2U7XHJcblxyXG4gICAgZm9ybVNjaGVtYTogRm9ybVNjaGVtYUJhc2VbXTtcclxuICAgIHBvcHVwU2l6ZSA9IHsgd2lkdGg6IDEwMjQsIGhlaWdodDogNTUwIH07XHJcbiAgICBwb3B1cEhlYWRlciA9ICdD4bqldSBow6xuaCc7XHJcbiAgICBjb2x1bW5TY2hlbWFzOiBhbnkgPSBbXTtcclxuICAgIHRleHRBbGlnbk9wdGlvbnM6IGFueSA9IFtdO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIF9pbmplY3RvcjogSW5qZWN0b3IsXHJcbiAgICAgICAgcHJvdGVjdGVkIF90cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGVTZXJ2aWNlLFxyXG4gICAgICAgIHByb3RlY3RlZCBfZG9tU2VydmljZTogRG9tU2VydmljZSxcclxuICAgICAgICBwcm90ZWN0ZWQgX3VzZXJTZXJ2aWNlOiBVc2VyU2VydmljZVxyXG4gICAgKSB7XHJcbiAgICAgICAgc3VwZXIoX2luamVjdG9yKTtcclxuICAgIH1cclxuICAgIG5nT25Jbml0KCkge1xyXG4gICAgICAgIGNvbnN0IHNvcnREYXRhU291cmNlID0gW10sIGdyb3VwRGF0YVNvdXJjZSA9IFtdO1xyXG4gICAgICAgIHRoaXMubW9kZWwuZGF0YSA9IHtcclxuICAgICAgICAgICAgc29ydEZpZWxkOiB0aGlzLnBhcmVudFNldHRpbmcuY29sdW1uU2V0dGluZy5zb3J0RmllbGQsXHJcbiAgICAgICAgICAgIHNvcnREaXI6IHRoaXMucGFyZW50U2V0dGluZy5jb2x1bW5TZXR0aW5nLnNvcnREaXIsXHJcbiAgICAgICAgICAgIGdyb3VwRmllbGQ6IHRoaXMucGFyZW50U2V0dGluZy5jb2x1bW5TZXR0aW5nLmdyb3VwRmllbGQsXHJcbiAgICAgICAgICAgIGRldGFpbHM6IHRoaXMucGFyZW50U2V0dGluZy5jb2x1bW5TZXR0aW5nLmRldGFpbHNcclxuICAgICAgICB9O1xyXG4gICAgICAgIC8vIHRoaXMubW9kZWwuYWN0aXZlRW50aXR5TWV0YWRhdGEgPSBmYWxzZTtcclxuICAgICAgICAvLyB0aGlzLm1vZGVsLmFjdGl2ZUVudGl0eVBlcm1pc3Npb24gPSBmYWxzZTtcclxuXHJcbiAgICAgICAgY29uc3QgdGVtcCA9IFtdO1xyXG4gICAgICAgIGlmICghdGhpcy5wYXJlbnRTZXR0aW5nLmNvbHMpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnBhcmVudFNldHRpbmcuY29scy5mb3JFYWNoKGVsZW1lbnQgPT4ge1xyXG4gICAgICAgICAgICBpZiAoZWxlbWVudC52aXNpYmxlKSB7XHJcbiAgICAgICAgICAgICAgICBncm91cERhdGFTb3VyY2UucHVzaCh7IHZhbHVlOiBlbGVtZW50LmZpZWxkLCBsYWJlbDogZWxlbWVudC5sYWJlbCB9KTtcclxuICAgICAgICAgICAgICAgIGlmIChlbGVtZW50LnNvcnQgPT09IHRydWUpIHtcclxuICAgICAgICAgICAgICAgICAgICBzb3J0RGF0YVNvdXJjZS5wdXNoKHsgdmFsdWU6IGVsZW1lbnQuZmllbGQsIGxhYmVsOiBlbGVtZW50LmxhYmVsIH0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKGVsZW1lbnQucmF3Q29sdW1uKSB7XHJcbiAgICAgICAgICAgICAgICBncm91cERhdGFTb3VyY2UucHVzaCh7IHZhbHVlOiBlbGVtZW50LmZpZWxkLCBsYWJlbDogZWxlbWVudC5sYWJlbCB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoIWVsZW1lbnQucmF3Q29sdW1uKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMubW9kZWwuZGF0YS5kZXRhaWxzLnNvbWUocSA9PiBxLmNvbHVtbkNvZGUgPT0gZWxlbWVudC5maWVsZCkpIHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgdmlzaWJsZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChlbGVtZW50LmJhc2VTZXJ2aWNlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlZkZpZWxkID0gdGhpcy5wYXJlbnRTZXR0aW5nLmNvbHMuZmluZChmID0+IGYuZmllbGQgPT0gJ3N0cicgKyBlbGVtZW50LmZpZWxkKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlZkZpZWxkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aXNpYmxlID0gcmVmRmllbGQudmlzaWJsZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpc2libGUgPSBlbGVtZW50LnZpc2libGUgPT09IHVuZGVmaW5lZCB8fCBlbGVtZW50LnZpc2libGUgPT09IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZpc2libGUgPSBlbGVtZW50LnZpc2libGUgPT09IHVuZGVmaW5lZCB8fCBlbGVtZW50LnZpc2libGUgPT09IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW0gPSA8Q29sdW1uU2V0dGluZ0RldGFpbD57XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbkNvZGU6IGVsZW1lbnQuZmllbGQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbk5hbWU6IGVsZW1lbnQubGFiZWwsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZpc2libGUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRleHRBbGlnbjogZWxlbWVudC50ZXh0QWxpZ24gPT09IHVuZGVmaW5lZCA/IFRleHRBbGlnbi5MZWZ0IDogZWxlbWVudC50ZXh0QWxpZ24sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiBlbGVtZW50LndpZHRoXHJcbiAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodmlzaWJsZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1vZGVsLmRhdGEuZGV0YWlscy5wdXNoKGl0ZW0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGVtcC5wdXNoKGl0ZW0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0ZW1wLmZvckVhY2goZWxlbWVudCA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMubW9kZWwuZGF0YS5kZXRhaWxzLnB1c2goZWxlbWVudCk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMuc2V0dGluZy5zY2hlbWEgPSA8Rm9ybVNjaGVtYUJhc2VbXT5bXHJcbiAgICAgICAgICAgIG5ldyBEcm9wZG93bkNvbnRyb2xTY2hlbWEoe1xyXG4gICAgICAgICAgICAgICAgZmllbGQ6ICdzb3J0RmllbGQnLFxyXG4gICAgICAgICAgICAgICAgbGFiZWw6IHRoaXMuX3RyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCgnU+G6r3AgeOG6v3AgdGhlbycpLFxyXG4gICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI6ICdDaOG7jW4gY+G7mXQnLFxyXG4gICAgICAgICAgICAgICAgc2hvd0NsZWFyOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgZGF0YVNvdXJjZTogc29ydERhdGFTb3VyY2UsXHJcbiAgICAgICAgICAgICAgICBtZFdpZHRoOiA2LFxyXG4gICAgICAgICAgICAgICAgdmFsdWVGaWVsZDogJ3ZhbHVlJyxcclxuICAgICAgICAgICAgICAgIGRpc3BsYXlGaWVsZDogJ2xhYmVsJyxcclxuICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgIG5ldyBSYWRpb0J1dHRvbkxpc3RDb250cm9sU2NoZW1hKHtcclxuICAgICAgICAgICAgICAgIGZpZWxkOiAnc29ydERpcicsXHJcbiAgICAgICAgICAgICAgICBsYWJlbDogJ0NoaeG7gXUgc+G6r3AgeOG6v3AnLFxyXG4gICAgICAgICAgICAgICAgbWRXaWR0aDogNixcclxuICAgICAgICAgICAgICAgIGRhdGFTb3VyY2U6IFt7IHZhbHVlOiBTb3J0RGlycy5Bc2MsIGxhYmVsOiAnVMSDbmcgZOG6p24nIH0sIHsgdmFsdWU6IFNvcnREaXJzLkRlc2MsIGxhYmVsOiAnR2nhuqNtIGThuqduJyB9XSxcclxuICAgICAgICAgICAgICAgIGRlZmF1bHRWYWx1ZTogU29ydERpcnMuQXNjLFxyXG4gICAgICAgICAgICAgICAgdmFsdWVGaWVsZDogJ3ZhbHVlJyxcclxuICAgICAgICAgICAgICAgIGRpc3BsYXlGaWVsZDogJ2xhYmVsJyxcclxuICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgIG5ldyBEcm9wZG93bkNvbnRyb2xTY2hlbWEoe1xyXG4gICAgICAgICAgICAgICAgZmllbGQ6ICdncm91cEZpZWxkJyxcclxuICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLl90cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoJ05ow7NtIHRoZW8nKSxcclxuICAgICAgICAgICAgICAgIG1kV2lkdGg6IDEyLFxyXG4gICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI6ICdDaOG7jW4gY+G7mXQnLFxyXG4gICAgICAgICAgICAgICAgc2hvd0NsZWFyOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgZGF0YVNvdXJjZTogZ3JvdXBEYXRhU291cmNlLFxyXG4gICAgICAgICAgICAgICAgdmFsdWVGaWVsZDogJ3ZhbHVlJyxcclxuICAgICAgICAgICAgICAgIGRpc3BsYXlGaWVsZDogJ2xhYmVsJyxcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICBdO1xyXG4gICAgICAgIHRoaXMuc2V0dGluZy5zY2hlbWEuZm9yRWFjaChzY2hlbWEgPT4ge1xyXG4gICAgICAgICAgICBpZiAoIXNjaGVtYS5mdWxsTGFiZWwpIHtcclxuICAgICAgICAgICAgICAgIHNjaGVtYS5mdWxsTGFiZWwgPSBzY2hlbWEubGFiZWw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLmNvbHVtblNjaGVtYXMgPSBbXHJcbiAgICAgICAgICAgIHsgaGVhZGVyOiAnU1RUJywgd2lkdGg6ICc3MHB4JyB9LFxyXG4gICAgICAgICAgICB7IGhlYWRlcjogJ1TDqm4gY+G7mXQnIH0sXHJcbiAgICAgICAgICAgIHsgaGVhZGVyOiAnSGnhu4NuIHRo4buLJywgd2lkdGg6ICc4MHB4JyB9LFxyXG4gICAgICAgICAgICB7IGhlYWRlcjogJ0PEg24gbOG7gScsIHdpZHRoOiAnMTMwcHgnIH0sXHJcbiAgICAgICAgICAgIHsgaGVhZGVyOiAnQ2hp4buBdSBy4buZbmcnLCB3aWR0aDogJzEwMHB4JyB9LFxyXG4gICAgICAgICAgICB7IGhlYWRlcjogJ1Ro4bupIHThu7EnLCB3aWR0aDogJzgwcHgnIH1cclxuICAgICAgICBdO1xyXG5cclxuICAgICAgICB0aGlzLnRleHRBbGlnbk9wdGlvbnMgPSBbXHJcbiAgICAgICAgICAgIHsgdmFsdWU6IFRleHRBbGlnbi5MZWZ0LCBsYWJlbDogJ0PEg24gdHLDoWknIH0sXHJcbiAgICAgICAgICAgIHsgdmFsdWU6IFRleHRBbGlnbi5DZW50ZXIsIGxhYmVsOiAnQ8SDbiBnaeG7r2EnIH0sXHJcbiAgICAgICAgICAgIHsgdmFsdWU6IFRleHRBbGlnbi5SaWdodCwgbGFiZWw6ICdDxINuIHBo4bqjaScgfVxyXG4gICAgICAgIF07XHJcbiAgICB9XHJcblxyXG4gICAgc2F2ZVNldHRpbmcoKSB7XHJcbiAgICAgICAgdGhpcy5vblNhdmUubmV4dCh0aGlzLm1vZGVsLmRhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIGNhbmNlbCgpIHtcclxuICAgICAgICB0aGlzLm9uQ2FuY2VsLm5leHQobnVsbCk7XHJcbiAgICB9XHJcblxyXG4gICAgdmlzaWJsZUNoYW5nZWREaWFsb2coZXZlbnQpIHtcclxuICAgICAgICBpZiAoIWV2ZW50KSB7XHJcbiAgICAgICAgICAgIHRoaXMuY2FuY2VsKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGdldEpzb24oKSB7XHJcbiAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKHRoaXMubW9kZWwpLmpvaW4oJywnKTtcclxuICAgIH1cclxufVxyXG4iXX0=
184
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2V0dGluZ3MuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Ii4uLy4uLy4uLy4uL3Byb2plY3RzL3RueC1zaGFyZWQvc3JjL2xpYi8iLCJzb3VyY2VzIjpbImNvbXBvbmVudHMvc2V0dGluZ3Mvc2V0dGluZ3MuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM3SCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDbEQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sNkNBQTZDLENBQUM7QUFDdEYsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ2xFLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNuRCxPQUFPLEVBQUUscUJBQXFCLEVBQXVCLFlBQVksRUFBRSxlQUFlLEVBQUUsWUFBWSxFQUFFLGVBQWUsRUFBRSxxQkFBcUIsRUFBa0IsNEJBQTRCLEVBQUUsU0FBUyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDck8sT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3hELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBQy9FLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQVMxRCxNQUFNLE9BQU8saUJBQWtCLFNBQVEsYUFBYTtJQXNCaEQsWUFDSSxTQUFtQixFQUNULGlCQUFtQyxFQUNuQyxXQUF1QixFQUN2QixZQUF5QjtRQUVuQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUM7UUFKUCxzQkFBaUIsR0FBakIsaUJBQWlCLENBQWtC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b0JBQW9CLENBQUMsS0FBSztRQUN0QixJQUFJLENBQUMsS0FBSyxFQUFFO1lBQ1IsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1NBQ2pCO0lBQ0wsQ0FBQztJQUVELE9BQU87UUFDSCxPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUM3QyxDQUFDOzs7WUFqTEosU0FBUyxTQUFDO2dCQUNQLFFBQVEsRUFBRSxVQUFVO2dCQUNwQix5akpBQXdDO2dCQUV4QyxTQUFTLEVBQUUsQ0FBQyx1QkFBdUIsQ0FBQztnQkFDcEMsZUFBZSxFQUFFLHVCQUF1QixDQUFDLE9BQU87O2FBQ25EOzs7WUFqQjBELFFBQVE7WUFDMUQsZ0JBQWdCO1lBTWhCLFVBQVU7WUFFVixXQUFXOzs7cUJBVWYsU0FBUyxTQUFDLFFBQVEsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7MEJBRXBDLEtBQUs7NEJBQ0wsS0FBSztvQ0FFTCxLQUFLO3VCQUVMLE1BQU07cUJBQ04sTUFBTTt1QkFDTixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbmplY3RvciwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0LCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xyXG5pbXBvcnQgeyBEaWFsb2cgfSBmcm9tICd0bi1jdXN0b20tcHJpbWVuZy9kaWFsb2cnO1xyXG5pbXBvcnQgeyBDb21wb25lbnRDb250ZXh0U2VydmljZSB9IGZyb20gJy4uLy4uL2FwcC1jb250ZXh0L2NvbXBvbmVudC1jb250ZXh0LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBDb21wb25lbnRCYXNlIH0gZnJvbSAnLi4vLi4vY2xhc3Nlcy9iYXNlL2NvbXBvbmVudC1iYXNlJztcclxuaW1wb3J0IHsgU29ydERpcnMgfSBmcm9tICcuLi8uLi9jbGFzc2VzL2NvbnN0YW50cyc7XHJcbmltcG9ydCB7IENoZWNrYm94Q29udHJvbFNjaGVtYSwgQ29sdW1uU2V0dGluZ0RldGFpbCwgQ3J1ZEZvcm1EYXRhLCBDcnVkRm9ybVNldHRpbmcsIENydWRMaXN0RGF0YSwgQ3J1ZExpc3RTZXR0aW5nLCBEcm9wZG93bkNvbnRyb2xTY2hlbWEsIEZvcm1TY2hlbWFCYXNlLCBSYWRpb0J1dHRvbkxpc3RDb250cm9sU2NoZW1hLCBUZXh0QWxpZ24gfSBmcm9tICcuLi8uLi9jbGFzc2VzL2Zvcm0tc2NoZW1hJztcclxuaW1wb3J0IHsgRG9tU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2RvbS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRW50aXR5TWV0YWRhdGFTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZW50aXR5LW1ldGFkYXRhLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBVc2VyU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3VzZXIuc2VydmljZSc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAnc2V0dGluZ3MnLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL3NldHRpbmdzLmNvbXBvbmVudC5odG1sJyxcclxuICAgIHN0eWxlVXJsczogWycuL3NldHRpbmdzLmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgICBwcm92aWRlcnM6IFtDb21wb25lbnRDb250ZXh0U2VydmljZV0sXHJcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LkRlZmF1bHRcclxufSlcclxuZXhwb3J0IGNsYXNzIFNldHRpbmdzQ29tcG9uZW50IGV4dGVuZHMgQ29tcG9uZW50QmFzZSBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgICBAVmlld0NoaWxkKCdkaWFsb2cnLCB7IHN0YXRpYzogdHJ1ZSB9KSBkaWFsb2c6IERpYWxvZztcclxuXHJcbiAgICBASW5wdXQoKSBwYXJlbnRNb2RlbDogQ3J1ZExpc3REYXRhO1xyXG4gICAgQElucHV0KCkgcGFyZW50U2V0dGluZzogQ3J1ZExpc3RTZXR0aW5nO1xyXG5cclxuICAgIEBJbnB1dCgpIGVudGl0eU1ldGFkYXRhU2VydmljZTogRW50aXR5TWV0YWRhdGFTZXJ2aWNlO1xyXG5cclxuICAgIEBPdXRwdXQoKSBvbkNhbmNlbCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gICAgQE91dHB1dCgpIG9uU2F2ZSA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gICAgQE91dHB1dCgpIG9uRGVsZXRlID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcblxyXG4gICAgbW9kZWw6IENydWRGb3JtRGF0YSA9IG5ldyBDcnVkRm9ybURhdGEoKTtcclxuICAgIHNldHRpbmc6IENydWRGb3JtU2V0dGluZyA9IG5ldyBDcnVkRm9ybVNldHRpbmcoKTtcclxuICAgIGNvbnRleHQ6IENvbXBvbmVudENvbnRleHRTZXJ2aWNlO1xyXG5cclxuICAgIGZvcm1TY2hlbWE6IEZvcm1TY2hlbWFCYXNlW107XHJcbiAgICBwb3B1cFNpemUgPSB7IHdpZHRoOiAxMDI0LCBoZWlnaHQ6IDU1MCB9O1xyXG4gICAgcG9wdXBIZWFkZXIgPSAnQ+G6pXUgaMOsbmgnO1xyXG4gICAgY29sdW1uU2NoZW1hczogYW55ID0gW107XHJcbiAgICB0ZXh0QWxpZ25PcHRpb25zOiBhbnkgPSBbXTtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBfaW5qZWN0b3I6IEluamVjdG9yLFxyXG4gICAgICAgIHByb3RlY3RlZCBfdHJhbnNsYXRlU2VydmljZTogVHJhbnNsYXRlU2VydmljZSxcclxuICAgICAgICBwcm90ZWN0ZWQgX2RvbVNlcnZpY2U6IERvbVNlcnZpY2UsXHJcbiAgICAgICAgcHJvdGVjdGVkIF91c2VyU2VydmljZTogVXNlclNlcnZpY2VcclxuICAgICkge1xyXG4gICAgICAgIHN1cGVyKF9pbmplY3Rvcik7XHJcbiAgICB9XHJcbiAgICBuZ09uSW5pdCgpIHtcclxuICAgICAgICBjb25zdCBzb3J0RGF0YVNvdXJjZSA9IFtdLCBncm91cERhdGFTb3VyY2UgPSBbXTtcclxuICAgICAgICB0aGlzLm1vZGVsLmRhdGEgPSB7XHJcbiAgICAgICAgICAgIHNvcnRGaWVsZDogdGhpcy5wYXJlbnRTZXR0aW5nLmNvbHVtblNldHRpbmcuc29ydEZpZWxkLFxyXG4gICAgICAgICAgICBzb3J0RGlyOiB0aGlzLnBhcmVudFNldHRpbmcuY29sdW1uU2V0dGluZy5zb3J0RGlyLFxyXG4gICAgICAgICAgICBncm91cEZpZWxkOiB0aGlzLnBhcmVudFNldHRpbmcuY29sdW1uU2V0dGluZy5ncm91cEZpZWxkLFxyXG4gICAgICAgICAgICBncm91cEluQ2xpZW50OiB0aGlzLnBhcmVudFNldHRpbmcuY29sdW1uU2V0dGluZy5ncm91cEluQ2xpZW50LFxyXG4gICAgICAgICAgICBkZXRhaWxzOiB0aGlzLnBhcmVudFNldHRpbmcuY29sdW1uU2V0dGluZy5kZXRhaWxzXHJcbiAgICAgICAgfTtcclxuICAgICAgICAvLyB0aGlzLm1vZGVsLmFjdGl2ZUVudGl0eU1ldGFkYXRhID0gZmFsc2U7XHJcbiAgICAgICAgLy8gdGhpcy5tb2RlbC5hY3RpdmVFbnRpdHlQZXJtaXNzaW9uID0gZmFsc2U7XHJcblxyXG4gICAgICAgIGNvbnN0IHRlbXAgPSBbXTtcclxuICAgICAgICBpZiAoIXRoaXMucGFyZW50U2V0dGluZy5jb2xzKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5wYXJlbnRTZXR0aW5nLmNvbHMuZm9yRWFjaChlbGVtZW50ID0+IHtcclxuICAgICAgICAgICAgaWYgKGVsZW1lbnQudmlzaWJsZSkge1xyXG4gICAgICAgICAgICAgICAgZ3JvdXBEYXRhU291cmNlLnB1c2goeyB2YWx1ZTogZWxlbWVudC5maWVsZCwgbGFiZWw6IGVsZW1lbnQubGFiZWwgfSk7XHJcbiAgICAgICAgICAgICAgICBpZiAoZWxlbWVudC5zb3J0ID09PSB0cnVlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc29ydERhdGFTb3VyY2UucHVzaCh7IHZhbHVlOiBlbGVtZW50LmZpZWxkLCBsYWJlbDogZWxlbWVudC5sYWJlbCB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmIChlbGVtZW50LnJhd0NvbHVtbikge1xyXG4gICAgICAgICAgICAgICAgZ3JvdXBEYXRhU291cmNlLnB1c2goeyB2YWx1ZTogZWxlbWVudC5maWVsZCwgbGFiZWw6IGVsZW1lbnQubGFiZWwgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKCFlbGVtZW50LnJhd0NvbHVtbikge1xyXG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLm1vZGVsLmRhdGEuZGV0YWlscy5zb21lKHEgPT4gcS5jb2x1bW5Db2RlID09IGVsZW1lbnQuZmllbGQpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHZpc2libGUgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoZWxlbWVudC5iYXNlU2VydmljZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByZWZGaWVsZCA9IHRoaXMucGFyZW50U2V0dGluZy5jb2xzLmZpbmQoZiA9PiBmLmZpZWxkID09ICdzdHInICsgZWxlbWVudC5maWVsZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWZGaWVsZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlzaWJsZSA9IHJlZkZpZWxkLnZpc2libGU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aXNpYmxlID0gZWxlbWVudC52aXNpYmxlID09PSB1bmRlZmluZWQgfHwgZWxlbWVudC52aXNpYmxlID09PSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2aXNpYmxlID0gZWxlbWVudC52aXNpYmxlID09PSB1bmRlZmluZWQgfHwgZWxlbWVudC52aXNpYmxlID09PSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBpdGVtID0gPENvbHVtblNldHRpbmdEZXRhaWw+e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5Db2RlOiBlbGVtZW50LmZpZWxkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5OYW1lOiBlbGVtZW50LmxhYmVsLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB2aXNpYmxlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXh0QWxpZ246IGVsZW1lbnQudGV4dEFsaWduID09PSB1bmRlZmluZWQgPyBUZXh0QWxpZ24uTGVmdCA6IGVsZW1lbnQudGV4dEFsaWduLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogZWxlbWVudC53aWR0aFxyXG4gICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHZpc2libGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tb2RlbC5kYXRhLmRldGFpbHMucHVzaChpdGVtKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRlbXAucHVzaChpdGVtKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGVtcC5mb3JFYWNoKGVsZW1lbnQgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLm1vZGVsLmRhdGEuZGV0YWlscy5wdXNoKGVsZW1lbnQpO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLnNldHRpbmcuc2NoZW1hID0gPEZvcm1TY2hlbWFCYXNlW10+W1xyXG4gICAgICAgICAgICBuZXcgRHJvcGRvd25Db250cm9sU2NoZW1hKHtcclxuICAgICAgICAgICAgICAgIGZpZWxkOiAnc29ydEZpZWxkJyxcclxuICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLl90cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoJ1Phuq9wIHjhur9wIHRoZW8nKSxcclxuICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyOiAnQ2jhu41uIGPhu5l0JyxcclxuICAgICAgICAgICAgICAgIHNob3dDbGVhcjogdHJ1ZSxcclxuICAgICAgICAgICAgICAgIGRhdGFTb3VyY2U6IHNvcnREYXRhU291cmNlLFxyXG4gICAgICAgICAgICAgICAgbWRXaWR0aDogNixcclxuICAgICAgICAgICAgICAgIHZhbHVlRmllbGQ6ICd2YWx1ZScsXHJcbiAgICAgICAgICAgICAgICBkaXNwbGF5RmllbGQ6ICdsYWJlbCcsXHJcbiAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICBuZXcgUmFkaW9CdXR0b25MaXN0Q29udHJvbFNjaGVtYSh7XHJcbiAgICAgICAgICAgICAgICBmaWVsZDogJ3NvcnREaXInLFxyXG4gICAgICAgICAgICAgICAgbGFiZWw6ICdDaGnhu4F1IHPhuq9wIHjhur9wJyxcclxuICAgICAgICAgICAgICAgIG1kV2lkdGg6IDYsXHJcbiAgICAgICAgICAgICAgICBkYXRhU291cmNlOiBbeyB2YWx1ZTogU29ydERpcnMuQXNjLCBsYWJlbDogJ1TEg25nIGThuqduJyB9LCB7IHZhbHVlOiBTb3J0RGlycy5EZXNjLCBsYWJlbDogJ0dp4bqjbSBk4bqnbicgfV0sXHJcbiAgICAgICAgICAgICAgICBkZWZhdWx0VmFsdWU6IFNvcnREaXJzLkFzYyxcclxuICAgICAgICAgICAgICAgIHZhbHVlRmllbGQ6ICd2YWx1ZScsXHJcbiAgICAgICAgICAgICAgICBkaXNwbGF5RmllbGQ6ICdsYWJlbCcsXHJcbiAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICBuZXcgRHJvcGRvd25Db250cm9sU2NoZW1hKHtcclxuICAgICAgICAgICAgICAgIGZpZWxkOiAnZ3JvdXBGaWVsZCcsXHJcbiAgICAgICAgICAgICAgICBsYWJlbDogdGhpcy5fdHJhbnNsYXRlU2VydmljZS5pbnN0YW50KCdOaMOzbSB0aGVvJyksXHJcbiAgICAgICAgICAgICAgICBtZFdpZHRoOiA2LFxyXG4gICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI6ICdDaOG7jW4gY+G7mXQnLFxyXG4gICAgICAgICAgICAgICAgc2hvd0NsZWFyOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgZGF0YVNvdXJjZTogZ3JvdXBEYXRhU291cmNlLFxyXG4gICAgICAgICAgICAgICAgdmFsdWVGaWVsZDogJ3ZhbHVlJyxcclxuICAgICAgICAgICAgICAgIGRpc3BsYXlGaWVsZDogJ2xhYmVsJyxcclxuICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgIG5ldyBDaGVja2JveENvbnRyb2xTY2hlbWEoe1xyXG4gICAgICAgICAgICAgICAgZmllbGQ6ICdncm91cEluQ2xpZW50JyxcclxuICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLl90cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoJ05ow7NtIHRyw6puIGNsaWVudCcpLFxyXG4gICAgICAgICAgICAgICAgbWRXaWR0aDogNixcclxuICAgICAgICAgICAgICAgIGRlZmF1bHRWYWx1ZTogZmFsc2VcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICBdO1xyXG4gICAgICAgIHRoaXMuc2V0dGluZy5zY2hlbWEuZm9yRWFjaChzY2hlbWEgPT4ge1xyXG4gICAgICAgICAgICBpZiAoIXNjaGVtYS5mdWxsTGFiZWwpIHtcclxuICAgICAgICAgICAgICAgIHNjaGVtYS5mdWxsTGFiZWwgPSBzY2hlbWEubGFiZWw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLmNvbHVtblNjaGVtYXMgPSBbXHJcbiAgICAgICAgICAgIHsgaGVhZGVyOiAnU1RUJywgd2lkdGg6ICc3MHB4JyB9LFxyXG4gICAgICAgICAgICB7IGhlYWRlcjogJ1TDqm4gY+G7mXQnIH0sXHJcbiAgICAgICAgICAgIHsgaGVhZGVyOiAnSGnhu4NuIHRo4buLJywgd2lkdGg6ICc4MHB4JyB9LFxyXG4gICAgICAgICAgICB7IGhlYWRlcjogJ0PEg24gbOG7gScsIHdpZHRoOiAnMTMwcHgnIH0sXHJcbiAgICAgICAgICAgIHsgaGVhZGVyOiAnQ2hp4buBdSBy4buZbmcnLCB3aWR0aDogJzEwMHB4JyB9LFxyXG4gICAgICAgICAgICB7IGhlYWRlcjogJ1Ro4bupIHThu7EnLCB3aWR0aDogJzgwcHgnIH1cclxuICAgICAgICBdO1xyXG5cclxuICAgICAgICB0aGlzLnRleHRBbGlnbk9wdGlvbnMgPSBbXHJcbiAgICAgICAgICAgIHsgdmFsdWU6IFRleHRBbGlnbi5MZWZ0LCBsYWJlbDogJ0PEg24gdHLDoWknIH0sXHJcbiAgICAgICAgICAgIHsgdmFsdWU6IFRleHRBbGlnbi5DZW50ZXIsIGxhYmVsOiAnQ8SDbiBnaeG7r2EnIH0sXHJcbiAgICAgICAgICAgIHsgdmFsdWU6IFRleHRBbGlnbi5SaWdodCwgbGFiZWw6ICdDxINuIHBo4bqjaScgfVxyXG4gICAgICAgIF07XHJcbiAgICB9XHJcblxyXG4gICAgc2F2ZVNldHRpbmcoKSB7XHJcbiAgICAgICAgdGhpcy5vblNhdmUubmV4dCh0aGlzLm1vZGVsLmRhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIGRlbGV0ZVNldHRpbmcoKSB7XHJcbiAgICAgICAgdGhpcy5vbkRlbGV0ZS5uZXh0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgY2FuY2VsKCkge1xyXG4gICAgICAgIHRoaXMub25DYW5jZWwubmV4dChudWxsKTtcclxuICAgIH1cclxuXHJcbiAgICB2aXNpYmxlQ2hhbmdlZERpYWxvZyhldmVudCkge1xyXG4gICAgICAgIGlmICghZXZlbnQpIHtcclxuICAgICAgICAgICAgdGhpcy5jYW5jZWwoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0SnNvbigpIHtcclxuICAgICAgICByZXR1cm4gT2JqZWN0LmtleXModGhpcy5tb2RlbCkuam9pbignLCcpO1xyXG4gICAgfVxyXG59XHJcbiJdfQ==