@tsi-developpement/tsi-shared-ui 1.7.38 → 1.7.39
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/end-points/endpoints.mjs +5 -1
- package/esm2022/lib/models/entity-info/entity-info.mjs +9 -1
- package/esm2022/lib/services/configuration/entity-configuration.service.mjs +7 -1
- package/esm2022/lib/tsi-components/create-or-edit-entity-informations/create-or-edit-entity-informations.component.mjs +126 -31
- package/fesm2022/tsi-developpement-tsi-shared-ui.mjs +126 -18
- package/fesm2022/tsi-developpement-tsi-shared-ui.mjs.map +1 -1
- package/lib/end-points/endpoints.d.ts +4 -0
- package/lib/models/entity-info/entity-info.d.ts +6 -0
- package/lib/services/configuration/entity-configuration.service.d.ts +4 -5
- package/lib/tsi-components/create-or-edit-entity-informations/create-or-edit-entity-informations.component.d.ts +23 -5
- package/lib/tsi-components/manage-reporting/add-report-popup/add-report-popup.component.d.ts +2 -0
- package/package.json +1 -1
|
@@ -11,19 +11,24 @@ import * as i1 from "../../services";
|
|
|
11
11
|
import * as i2 from "primeng/dynamicdialog";
|
|
12
12
|
import * as i3 from "@angular/common";
|
|
13
13
|
import * as i4 from "@angular/forms";
|
|
14
|
-
import * as i5 from "primeng/
|
|
15
|
-
import * as i6 from "primeng/
|
|
16
|
-
import * as i7 from "
|
|
17
|
-
import * as i8 from "
|
|
18
|
-
import * as i9 from "
|
|
19
|
-
import * as i10 from "
|
|
20
|
-
import * as i11 from "
|
|
21
|
-
import * as i12 from "../
|
|
22
|
-
import * as i13 from "../tsi-
|
|
23
|
-
import * as i14 from "../tsi-
|
|
24
|
-
import * as i15 from "../tsi-
|
|
25
|
-
import * as i16 from "
|
|
26
|
-
import * as i17 from "
|
|
14
|
+
import * as i5 from "primeng/api";
|
|
15
|
+
import * as i6 from "primeng/checkbox";
|
|
16
|
+
import * as i7 from "primeng/inputtext";
|
|
17
|
+
import * as i8 from "primeng/table";
|
|
18
|
+
import * as i9 from "primeng/tabview";
|
|
19
|
+
import * as i10 from "primeng/multiselect";
|
|
20
|
+
import * as i11 from "primeng/paginator";
|
|
21
|
+
import * as i12 from "../input-components/editable-grid/editable-grid.component";
|
|
22
|
+
import * as i13 from "../input-components/tsi-search-combo/tsi-search-combo.component";
|
|
23
|
+
import * as i14 from "../input-components/tsi-checkbox/tsi-checkbox.component";
|
|
24
|
+
import * as i15 from "../input-components/tsi-text-box/tsi-text-box.component";
|
|
25
|
+
import * as i16 from "../output-components/tsi-label/tsi-label.component";
|
|
26
|
+
import * as i17 from "../output-components/tsi-view-grid/tsi-view-grid.component";
|
|
27
|
+
import * as i18 from "../tsi-modal-footer/tsi-modal-footer.component";
|
|
28
|
+
import * as i19 from "../tsi-modal-header/tsi-modal-header.component";
|
|
29
|
+
import * as i20 from "../tsi-form/tsi-form.component";
|
|
30
|
+
import * as i21 from "../../pipes/localize.pipe";
|
|
31
|
+
import * as i22 from "../../pipes/modal-label.pipe";
|
|
27
32
|
export class CreateOrEditEntityInformationsComponent extends TsiFormComponentBaseComponent {
|
|
28
33
|
constructor(_entityInformationsService, _errorResponseManagerService, ref, config, _notificationService, _confirmationService, _apiExplorerService) {
|
|
29
34
|
super(ref, config);
|
|
@@ -38,10 +43,20 @@ export class CreateOrEditEntityInformationsComponent extends TsiFormComponentBas
|
|
|
38
43
|
this.keyColumnOptions = [];
|
|
39
44
|
this.endpointInfos = [];
|
|
40
45
|
this.componentsOptions = TypeRegistryHelper.getBusinessComponentList();
|
|
41
|
-
this.
|
|
46
|
+
this.modelColumnsData = [];
|
|
47
|
+
this.dbColumnsData = [];
|
|
48
|
+
this.sqlColumnsData = [];
|
|
49
|
+
this.propertiesSearchText = '';
|
|
50
|
+
this.propertiesFirst = 0;
|
|
51
|
+
this.propertiesPageSize = 10;
|
|
52
|
+
this.modelComparisonMap = new Map();
|
|
53
|
+
this.dbComparisonMap = new Map();
|
|
54
|
+
this.sqlComparisonMap = new Map();
|
|
42
55
|
this.propertiesGridColumns = [
|
|
43
|
-
{ header: '
|
|
44
|
-
{ header: '
|
|
56
|
+
{ header: 'administration_properties_name', field: 'name' },
|
|
57
|
+
{ header: 'administration_properties_type', field: 'type' },
|
|
58
|
+
{ header: 'administration_properties_isNullable', field: 'isNullable', type: InputTypes.CHECKBOX },
|
|
59
|
+
{ header: 'administration_properties_maxLength', field: 'maxLength' }
|
|
45
60
|
];
|
|
46
61
|
this.permissionsGridColumns = [
|
|
47
62
|
{ header: 'administration_permissions_httpMethod', field: 'httpMethod' },
|
|
@@ -169,24 +184,24 @@ export class CreateOrEditEntityInformationsComponent extends TsiFormComponentBas
|
|
|
169
184
|
}
|
|
170
185
|
}
|
|
171
186
|
getPropertiesData() {
|
|
187
|
+
this.isloading = true;
|
|
172
188
|
if (this.id) {
|
|
173
189
|
forkJoin({
|
|
174
|
-
|
|
190
|
+
modelColumns: this._entityInformationsService.getEntitycolumnsFromModels(this.id),
|
|
191
|
+
dbColumns: this._entityInformationsService.getColumnsFromProjectDatabase(this.id),
|
|
175
192
|
sqlColumns: this._entityInformationsService.getSqlColumns(this.id)
|
|
176
193
|
}).subscribe({
|
|
177
|
-
next: ({
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
this.
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
sqlColumn: sqlCols[i]?.value ?? ''
|
|
186
|
-
});
|
|
187
|
-
}
|
|
194
|
+
next: ({ modelColumns, dbColumns, sqlColumns }) => {
|
|
195
|
+
this.modelColumnsData = modelColumns ?? [];
|
|
196
|
+
this.dbColumnsData = dbColumns ?? [];
|
|
197
|
+
this.sqlColumnsData = sqlColumns ?? [];
|
|
198
|
+
this.computeComparisons();
|
|
199
|
+
},
|
|
200
|
+
complete: () => {
|
|
201
|
+
this.isloading = false;
|
|
188
202
|
},
|
|
189
203
|
error: (error) => {
|
|
204
|
+
this.isloading = false;
|
|
190
205
|
console.error('Error fetching properties data:', error);
|
|
191
206
|
this._errorResponseManagerService.showErrorMessage(error);
|
|
192
207
|
}
|
|
@@ -196,11 +211,91 @@ export class CreateOrEditEntityInformationsComponent extends TsiFormComponentBas
|
|
|
196
211
|
onAddRelation() {
|
|
197
212
|
this.entityWithRelations.relations.map(er => er.entityFrom = this.entityWithRelations.entity.className ?? '');
|
|
198
213
|
}
|
|
214
|
+
filterColumns(data) {
|
|
215
|
+
if (!this.propertiesSearchText)
|
|
216
|
+
return data;
|
|
217
|
+
const search = this.propertiesSearchText.toLowerCase();
|
|
218
|
+
return data.filter(col => col.name.toLowerCase().includes(search) ||
|
|
219
|
+
col.type.toLowerCase().includes(search));
|
|
220
|
+
}
|
|
221
|
+
get filteredModelColumns() {
|
|
222
|
+
return this.filterColumns(this.modelColumnsData);
|
|
223
|
+
}
|
|
224
|
+
get filteredDbColumns() {
|
|
225
|
+
return this.filterColumns(this.dbColumnsData);
|
|
226
|
+
}
|
|
227
|
+
get filteredSqlColumns() {
|
|
228
|
+
return this.filterColumns(this.sqlColumnsData);
|
|
229
|
+
}
|
|
230
|
+
get propertiesTotalRecords() {
|
|
231
|
+
return Math.max(this.filteredModelColumns.length, this.filteredDbColumns.length, this.filteredSqlColumns.length);
|
|
232
|
+
}
|
|
233
|
+
get pagedModelColumns() {
|
|
234
|
+
return this.filteredModelColumns.slice(this.propertiesFirst, this.propertiesFirst + this.propertiesPageSize);
|
|
235
|
+
}
|
|
236
|
+
get pagedDbColumns() {
|
|
237
|
+
return this.filteredDbColumns.slice(this.propertiesFirst, this.propertiesFirst + this.propertiesPageSize);
|
|
238
|
+
}
|
|
239
|
+
get pagedSqlColumns() {
|
|
240
|
+
return this.filteredSqlColumns.slice(this.propertiesFirst, this.propertiesFirst + this.propertiesPageSize);
|
|
241
|
+
}
|
|
242
|
+
onPropertiesPageChange(event) {
|
|
243
|
+
this.propertiesFirst = event.first;
|
|
244
|
+
this.propertiesPageSize = event.rows;
|
|
245
|
+
}
|
|
246
|
+
onPropertiesSearch() {
|
|
247
|
+
this.propertiesFirst = 0;
|
|
248
|
+
}
|
|
249
|
+
computeComparisons() {
|
|
250
|
+
const modelMap = new Map();
|
|
251
|
+
const dbMap = new Map();
|
|
252
|
+
const sqlMap = new Map();
|
|
253
|
+
this.modelColumnsData.forEach(col => modelMap.set(col.name.toLowerCase(), col));
|
|
254
|
+
this.dbColumnsData.forEach(col => dbMap.set(col.name.toLowerCase(), col));
|
|
255
|
+
this.sqlColumnsData.forEach(col => sqlMap.set(col.name.toLowerCase(), col));
|
|
256
|
+
this.modelComparisonMap = this.computeSourceComparison(this.modelColumnsData, [dbMap, sqlMap]);
|
|
257
|
+
this.dbComparisonMap = this.computeSourceComparison(this.dbColumnsData, [modelMap, sqlMap]);
|
|
258
|
+
this.sqlComparisonMap = this.computeSourceComparison(this.sqlColumnsData, [modelMap, dbMap]);
|
|
259
|
+
}
|
|
260
|
+
computeSourceComparison(sourceData, otherMaps) {
|
|
261
|
+
const result = new Map();
|
|
262
|
+
for (const row of sourceData) {
|
|
263
|
+
const key = row.name.toLowerCase();
|
|
264
|
+
const classes = { name: '', type: '', isNullable: '', maxLength: '' };
|
|
265
|
+
for (const otherMap of otherMaps) {
|
|
266
|
+
const otherRow = otherMap.get(key);
|
|
267
|
+
if (!otherRow) {
|
|
268
|
+
classes['name'] = 'comparison-missing';
|
|
269
|
+
classes['type'] = 'comparison-missing';
|
|
270
|
+
classes['isNullable'] = 'comparison-missing';
|
|
271
|
+
classes['maxLength'] = 'comparison-missing';
|
|
272
|
+
break;
|
|
273
|
+
}
|
|
274
|
+
if (otherRow.type !== row.type && !classes['type']) {
|
|
275
|
+
classes['type'] = 'comparison-type-mismatch';
|
|
276
|
+
}
|
|
277
|
+
if (otherRow.maxLength !== row.maxLength && !classes['maxLength']) {
|
|
278
|
+
classes['maxLength'] = 'comparison-length-mismatch';
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
result.set(key, classes);
|
|
282
|
+
}
|
|
283
|
+
return result;
|
|
284
|
+
}
|
|
285
|
+
getComparisonClass(source, row, field) {
|
|
286
|
+
const map = source === 'model' ? this.modelComparisonMap
|
|
287
|
+
: source === 'db' ? this.dbComparisonMap
|
|
288
|
+
: this.sqlComparisonMap;
|
|
289
|
+
const comparison = map.get(row.name.toLowerCase());
|
|
290
|
+
if (!comparison)
|
|
291
|
+
return '';
|
|
292
|
+
return comparison[field] || '';
|
|
293
|
+
}
|
|
199
294
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: CreateOrEditEntityInformationsComponent, deps: [{ token: i1.EntityConfigurationService }, { token: i1.ErrorResponseManagerService }, { token: i2.DynamicDialogRef }, { token: i2.DynamicDialogConfig }, { token: i1.TsiNotificationService }, { token: i1.TsiConfirmationService }, { token: i1.ApiExplorerService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
200
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: CreateOrEditEntityInformationsComponent, selector: "app-create-or-edit-entity-informations", providers: [...appProviders], usesInheritance: true, ngImport: i0, template: "<tsi-form class=\"form-horizontal\" autocomplete=\"off\" (onSubmit)=\"save()\" [isLoading]=\"isloading\">\r\n <Tsi-Modal-Header [inputTitle]=\"header | modalLabel : mode : 'administration_entityRelations_title' | localize\"\r\n (onCloseClick)=\"hide()\">\r\n </Tsi-Modal-Header>\r\n\r\n <div *ngIf=\"uid\" class=\"flex align-items-center gap-2 mb-2\">\r\n <span class=\"font-semibold\">{{'administration_gestionEntityInformation_uid' | localize}} :</span>\r\n <span>{{ uid }}</span>\r\n </div>\r\n\r\n <p-tabView>\r\n <p-tabPanel [header]=\"'administration_tab_entityInformation' | localize\">\r\n <fieldset [disabled]=\"isDeleteMode() || isConsultMode()\">\r\n <div class=\"modal-body\">\r\n <div class=\"grid\">\r\n <div class=\"col-6\">\r\n <div class=\"grid\">\r\n <Tsi-Label class=\"col-4\" [labelValue]=\"'administration_gestionEntityInformation_className'\"></Tsi-Label>\r\n <Tsi-Text-Box class=\"col-8\" [inputName]=\"'ClassName'\"\r\n [(inputField)]=\"entityWithRelations.entity.className\"\r\n (inputFieldChange)=\"getColonnesByClassNameAsKeyValuePair($event)\"\r\n [disabled]=\"isDeleteMode() || isConsultMode() || isEditMode()\">\r\n </Tsi-Text-Box>\r\n </div>\r\n </div>\r\n\r\n <div class=\"col-6\">\r\n <div class=\"grid\">\r\n <Tsi-Label class=\"col-4\" [labelValue]=\"'administration_gestionEntityInformation_formName'\"></Tsi-Label>\r\n <Tsi-Search-Combo class=\"col-8\" [datasource]=\"componentsOptions\"\r\n [(bind)]=\"entityWithRelations.entity.formName\" id-field=\"key\" label-field=\"value\" [showClear]=\"true\"\r\n [disabled]=\"isDeleteMode() || isConsultMode()\">\r\n </Tsi-Search-Combo>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"grid\">\r\n <div class=\"col-6\">\r\n <div class=\"grid\">\r\n <Tsi-Label class=\"col-4\"\r\n [labelValue]=\"'administration_gestionEntityInformation_listComponent'\"></Tsi-Label>\r\n <Tsi-Search-Combo class=\"col-8\" [datasource]=\"componentsOptions\"\r\n [(bind)]=\"entityWithRelations.entity.listComponent\" id-field=\"key\" label-field=\"value\"\r\n [showClear]=\"true\" [disabled]=\"isDeleteMode() || isConsultMode()\">\r\n </Tsi-Search-Combo>\r\n\r\n </div>\r\n </div>\r\n\r\n <div class=\"col-6\">\r\n <div class=\"grid\">\r\n <Tsi-Label class=\"col-4\" [labelValue]=\"'administration_gestionEntityInformation_logged'\"></Tsi-Label>\r\n <Tsi-CheckBox class=\"col-8\" [inputName]=\"'Logged'\" [(inputField)]=\"entityWithRelations.entity.logged\">\r\n </Tsi-CheckBox>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"grid\">\r\n <div class=\"col-6\">\r\n <div class=\"grid\">\r\n <Tsi-Label class=\"col-4\" [labelValue]=\"'administration_gestionEntityInformation_listRoute'\"></Tsi-Label>\r\n <Tsi-Text-Box class=\"col-8\" [inputName]=\"'ListRoute'\"\r\n [(inputField)]=\"entityWithRelations.entity.listRoute\">\r\n </Tsi-Text-Box>\r\n </div>\r\n </div>\r\n\r\n <div class=\"col-6\">\r\n <div class=\"grid\">\r\n <Tsi-Label class=\"col-4\" [labelValue]=\"'administration_gestionEntityInformation_formRoute'\"></Tsi-Label>\r\n <Tsi-Text-Box class=\"col-8\" [inputName]=\"'FormRoute'\"\r\n [(inputField)]=\"entityWithRelations.entity.formRoute\">\r\n </Tsi-Text-Box>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"grid\">\r\n <div class=\"col-6\">\r\n <div class=\"grid\">\r\n <Tsi-Label class=\"col-4\"\r\n [labelValue]=\"'administration_gestionEntityInformation_discriminatorPropertyName'\"></Tsi-Label>\r\n <Tsi-Text-Box class=\"col-8\" [inputName]=\"'DiscriminatorPropertyName'\"\r\n [(inputField)]=\"entityWithRelations.entity.discriminatorPropertyName\">\r\n </Tsi-Text-Box>\r\n </div>\r\n </div>\r\n\r\n <div class=\"col-6\">\r\n <div class=\"grid\">\r\n <Tsi-Label class=\"col-4\"\r\n [labelValue]=\"'administration_gestionEntityInformation_discriminatorClassName'\"></Tsi-Label>\r\n <Tsi-Text-Box class=\"col-8\" [inputName]=\"'DiscriminatorClassName'\"\r\n [(inputField)]=\"entityWithRelations.entity.discriminatorClassName\">\r\n </Tsi-Text-Box>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"grid\">\r\n <div class=\"col-6\">\r\n <div class=\"grid\">\r\n <Tsi-Label class=\"col-4\"\r\n [labelValue]=\"'administration_gestionEntityInformation_keyColumns'\"></Tsi-Label>\r\n <div class=\"col-8\">\r\n <p-multiSelect [options]=\"keyColumnOptions\" [(ngModel)]=\"entityWithRelations.entity.keyColumns\"\r\n optionValue=\"key\" optionLabel=\"value\" display=\"chip\" defaultLabel=\"Select columns\" [filter]=\"true\">\r\n </p-multiSelect>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"col-6\">\r\n <div class=\"grid\">\r\n <Tsi-Label class=\"col-4\"\r\n [labelValue]=\"'administration_gestionEntityInformation_statusColumnName'\"></Tsi-Label>\r\n \r\n <Tsi-Search-Combo class=\"col-6\" [datasource]=\"keyColumnOptions\"\r\n [(bind)]=\"entityWithRelations.entity.statusColumnName\" id-field=\"key\" label-field=\"value\"\r\n [showClear]=\"true\" [disabled]=\"isDeleteMode() || isConsultMode()\">\r\n </Tsi-Search-Combo>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"grid\">\r\n <div class=\"col-6\">\r\n <div class=\"grid\">\r\n <Tsi-Label class=\"col-4\"\r\n [labelValue]=\"'administration_gestionEntityInformation_isWorkflow'\"></Tsi-Label>\r\n <Tsi-CheckBox class=\"col-8\" [inputName]=\"'IsWorkflow'\"\r\n [(inputField)]=\"entityWithRelations.entity.isWorkflow\">\r\n </Tsi-CheckBox>\r\n </div>\r\n </div>\r\n\r\n <div class=\"col-6\">\r\n <div class=\"grid\">\r\n <Tsi-Label class=\"col-4\"\r\n [labelValue]=\"'administration_gestionEntityInformation_defaultStatus'\"></Tsi-Label>\r\n <Tsi-Text-Box class=\"col-8\" [inputName]=\"'DefaultStatus'\"\r\n [(inputField)]=\"entityWithRelations.entity.defaultStatus\">\r\n </Tsi-Text-Box>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"grid\">\r\n <div class=\"col-6\">\r\n <div class=\"grid\">\r\n <Tsi-Label class=\"col-4\"\r\n [labelValue]=\"'administration_gestionEntityInformation_statusEnumName'\"></Tsi-Label>\r\n <Tsi-Text-Box class=\"col-8\" [inputName]=\"'StatusEnumName'\"\r\n [(inputField)]=\"entityWithRelations.entity.statusEnumName\">\r\n </Tsi-Text-Box>\r\n </div>\r\n </div>\r\n\r\n <div class=\"col-6\">\r\n <div class=\"grid\">\r\n <Tsi-Label class=\"col-4\"\r\n [labelValue]=\"'administration_gestionEntityInformation_advancedSearchComponent'\"></Tsi-Label>\r\n <Tsi-Search-Combo class=\"col-8\" [datasource]=\"componentsOptions\"\r\n [(bind)]=\"entityWithRelations.entity.advancedSearchComponent\" id-field=\"key\" label-field=\"value\"\r\n [showClear]=\"true\" [disabled]=\"isDeleteMode() || isConsultMode()\">\r\n </Tsi-Search-Combo>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"grid\">\r\n <div class=\"col-4\">\r\n <div class=\"grid\">\r\n <Tsi-Label class=\"col-6\"\r\n [labelValue]=\"'administration_gestionEntityInformation_cardHeaderPhotoColumn'\"></Tsi-Label>\r\n\r\n <Tsi-Search-Combo class=\"col-6\" [datasource]=\"keyColumnOptions\"\r\n [(bind)]=\"entityWithRelations.entity.cardHeaderPhotoColumn\" id-field=\"key\" label-field=\"value\"\r\n [showClear]=\"true\" [disabled]=\"isDeleteMode() || isConsultMode()\">\r\n </Tsi-Search-Combo>\r\n </div>\r\n </div>\r\n\r\n <div class=\"col-4\">\r\n <div class=\"grid\">\r\n <Tsi-Label class=\"col-6\"\r\n [labelValue]=\"'administration_gestionEntityInformation_cardTitleColumn'\"></Tsi-Label>\r\n \r\n <Tsi-Search-Combo class=\"col-6\" [datasource]=\"keyColumnOptions\"\r\n [(bind)]=\"entityWithRelations.entity.cardTitleColumn\" id-field=\"key\" label-field=\"value\"\r\n [showClear]=\"true\" [disabled]=\"isDeleteMode() || isConsultMode()\">\r\n </Tsi-Search-Combo>\r\n </div>\r\n </div>\r\n <div class=\"col-4\">\r\n <div class=\"grid\">\r\n <Tsi-Label class=\"col-6\"\r\n [labelValue]=\"'administration_gestionEntityInformation_cardSubHeaderColumn'\"></Tsi-Label>\r\n <Tsi-Search-Combo class=\"col-6\" [datasource]=\"keyColumnOptions\"\r\n [(bind)]=\"entityWithRelations.entity.cardSubHeaderColumn\" id-field=\"key\" label-field=\"value\"\r\n [showClear]=\"true\" [disabled]=\"isDeleteMode() || isConsultMode()\">\r\n </Tsi-Search-Combo>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"grid\">\r\n <div class=\"col-12\">\r\n <div class=\"grid\">\r\n <Tsi-Label class=\"col-2\"\r\n [labelValue]=\"'administration_gestionEntityInformation_cardDescriptionColumn'\"></Tsi-Label>\r\n <Tsi-Search-Combo class=\"col-6\" [datasource]=\"keyColumnOptions\"\r\n [(bind)]=\"entityWithRelations.entity.cardDescriptionColumn\" id-field=\"key\" label-field=\"value\"\r\n [showClear]=\"true\" [disabled]=\"isDeleteMode() || isConsultMode()\">\r\n </Tsi-Search-Combo>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </fieldset>\r\n </p-tabPanel>\r\n <p-tabPanel [header]=\"'administration_tab_relations' | localize\">\r\n <div class=\"grid\">\r\n <Tsi-Generic-Editable-Grid [columns]=\"entitiesRelationsColumns\" [gridData]=\"entityWithRelations.relations\"\r\n [parent]=\"this\" (addedRowEventEmitter)=\"onAddRelation()\" [showAddButton]=\"isEditMode()\">\r\n </Tsi-Generic-Editable-Grid>\r\n </div>\r\n </p-tabPanel>\r\n <p-tabPanel [header]=\"'administration_tab_permissions' | localize\">\r\n <div class=\"grid\">\r\n <tsi-view-grid [header]=\"entityWithRelations.entity.className ?? ''\" class=\"col-12 mb-3\"\r\n [columns]=\"permissionsGridColumns\" [getDataFromApi]=\"false\" [gridData]=\"endpointInfos\">\r\n </tsi-view-grid>\r\n </div>\r\n </p-tabPanel>\r\n <p-tabPanel [header]=\"'administration_tab_properties' | localize\">\r\n <div class=\"grid\">\r\n <tsi-view-grid [header]=\"'administration_properties_title' | localize\" class=\"col-12 mb-3\"\r\n [columns]=\"propertiesGridColumns\" [getDataFromApi]=\"false\" [gridData]=\"propertiesData\">\r\n </tsi-view-grid>\r\n </div>\r\n </p-tabPanel>\r\n </p-tabView>\r\n \r\n <Tsi-Modal-Footer [isConsult]=\"isConsultMode()\" [cancelDisabled]=\"saving\" [saveDisabled]=\"isSubmitDisabled()\"\r\n (onCancelClick)=\"hide()\">\r\n </Tsi-Modal-Footer>\r\n</tsi-form>", styles: [""], dependencies: [{ kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i5.TabView, selector: "p-tabView", inputs: ["style", "styleClass", "controlClose", "scrollable", "activeIndex", "selectOnFocus", "nextButtonAriaLabel", "prevButtonAriaLabel", "autoHideButtons", "tabindex"], outputs: ["onChange", "onClose", "activeIndexChange"] }, { kind: "component", type: i5.TabPanel, selector: "p-tabPanel", inputs: ["closable", "headerStyle", "headerStyleClass", "cache", "tooltip", "tooltipPosition", "tooltipPositionStyle", "tooltipStyleClass", "selected", "disabled", "header", "leftIcon", "rightIcon"] }, { kind: "component", type: i6.MultiSelect, selector: "p-multiSelect", inputs: ["id", "ariaLabel", "style", "styleClass", "panelStyle", "panelStyleClass", "inputId", "disabled", "readonly", "group", "filter", "filterPlaceHolder", "filterLocale", "overlayVisible", "tabindex", "variant", "appendTo", "dataKey", "name", "ariaLabelledBy", "displaySelectedLabel", "maxSelectedLabels", "selectionLimit", "selectedItemsLabel", "showToggleAll", "emptyFilterMessage", "emptyMessage", "resetFilterOnHide", "dropdownIcon", "optionLabel", "optionValue", "optionDisabled", "optionGroupLabel", "optionGroupChildren", "showHeader", "filterBy", "scrollHeight", "lazy", "virtualScroll", "loading", "virtualScrollItemSize", "loadingIcon", "virtualScrollOptions", "overlayOptions", "ariaFilterLabel", "filterMatchMode", "tooltip", "tooltipPosition", "tooltipPositionStyle", "tooltipStyleClass", "autofocusFilter", "display", "autocomplete", "showClear", "autofocus", "autoZIndex", "baseZIndex", "showTransitionOptions", "hideTransitionOptions", "defaultLabel", "placeholder", "options", "filterValue", "itemSize", "selectAll", "focusOnHover", "filterFields", "selectOnFocus", "autoOptionFocus"], outputs: ["onChange", "onFilter", "onFocus", "onBlur", "onClick", "onClear", "onPanelShow", "onPanelHide", "onLazyLoad", "onRemove", "onSelectAllChange"] }, { kind: "component", type: i7.EditableGridComponent, selector: "Tsi-Generic-Editable-Grid", inputs: ["selectedItems", "configuration", "key", "items", "events", "showAddButton", "showDeleteButton", "showEditButton", "showRowSummary", "scrollHeight", "rowPerPage", "pageSize", "columns", "gridData", "isTableLoading", "parent", "showSaveButton", "showActionColumn", "enableRowDisabling", "rowSummaryConfig", "showHaveSumary", "showRowSumary", "selectKeyOnly", "selectionMode", "showConsultButton", "disabled", "editableGridBusinessClass", "orderColumn", "deleteLineButtonDisabled", "id"], outputs: ["itemsSave", "refreshEventEmitter", "saveDataEventEmitter", "rowChangedEventEmitter", "selectedRowEventEmitter", "addedRowEventEmitter", "focusOutEventEmitter", "cellChanged", "rowDeletedEventEmitter", "selectedItemsChange", "onRowSelect", "focusOutRow", "onConsultClicked"] }, { kind: "component", type: i8.TsiSearchComboComponent, selector: "Tsi-Search-Combo", inputs: ["elementSourceUrl", "listSourceUrl", "listSourceParams", "id-field", "label-field", "multiple", "sort", "showClear", "reloadDataSource", "isFiltered", "selectedLabel", "maxWidth", "businessClass", "comboType", "statusMetadata", "currentRowItem", "datasource", "bind", "maxSelectedLabels", "tooltipMaxDisplayedItems", "bindMode", "showSearchButton", "showAddButton", "showConsultButton", "showUpdateButton"], outputs: ["bindChange", "datasource-loaded", "init", "isLoaded", "selectedLabelChange", "onClick", "onSearchButtonClick", "selectionChange"] }, { kind: "component", type: i9.TsiCheckboxComponent, selector: "Tsi-CheckBox", inputs: ["class", "isBinary", "checked", "tooltipText", "tooltipPosition"], outputs: ["inputFieldChange", "checkedChange"] }, { kind: "component", type: i10.TsiTextBoxComponent, selector: "Tsi-Text-Box", inputs: ["textBoxType", "autocomplete"], outputs: ["newItemEvent", "inputFieldChange"] }, { kind: "component", type: i11.TsiLabelComponent, selector: "Tsi-Label", inputs: ["labelValue", "styleClass", "infoText"] }, { kind: "component", type: i12.TsiViewGridComponent, selector: "tsi-view-grid", inputs: ["columns", "gridConfiguration", "viewComponent", "crudService", "header", "modalSize", "showConsultButton", "showSearchField", "searchFields", "formEndpoint", "formName", "id", "showImportExportButton", "targetBusinessClass", "getDataFromApi", "gridData", "isSearchButtonDisabled", "selectKeyOnly", "selectionMode", "selectedItems", "key", "showGlobalSearch", "showExportButton", "showCalenderView", "calenderSchema", "showHeaderFilters", "showFilterButton", "selectAll", "checkedByField", "sortMode", "searchOnInit"], outputs: ["summariesChange", "selectedItemsChange", "buttonColumnClicked", "searchFieldsValueChanged", "getAllPagedResultChanged"] }, { kind: "component", type: i13.TsiModalFooterComponent, selector: "Tsi-Modal-Footer", inputs: ["cancelDisabled", "saveDisabled", "cancelLabel", "saveLabel", "isConsult", "isDuplicate", "isOnlyCreate", "additionalButtonLabel", "additionalButtonIcon", "additionalButtonDisabled", "showAdditionalButton"], outputs: ["onCancelClick", "onSaveClick", "onAdditionalButtonClick"] }, { kind: "component", type: i14.TsiModalHeaderComponent, selector: "Tsi-Modal-Header", inputs: ["inputTitle"], outputs: ["onCloseClick"] }, { kind: "component", type: i15.TsiFormComponent, selector: "tsi-form", inputs: ["class", "autocomplete", "optionalEndpoints", "disabled", "isLoading", "modalSize", "formEndpoint", "formName", "isReportingToolbarDisabled", "isCreateOnly"], outputs: ["onSave", "onSubmit", "onSubmitFormWorkflowConfiguration", "formRefChange", "onStatusChange"] }, { kind: "pipe", type: i16.LocalizePipe, name: "localize" }, { kind: "pipe", type: i17.ModalLabelPipe, name: "modalLabel" }] }); }
|
|
295
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: CreateOrEditEntityInformationsComponent, selector: "app-create-or-edit-entity-informations", providers: [...appProviders], usesInheritance: true, ngImport: i0, template: "<tsi-form class=\"form-horizontal\" autocomplete=\"off\" (onSubmit)=\"save()\" [isLoading]=\"isloading\">\r\n <Tsi-Modal-Header [inputTitle]=\"header | modalLabel : mode : 'administration_entityRelations_title' | localize\"\r\n (onCloseClick)=\"hide()\">\r\n </Tsi-Modal-Header>\r\n\r\n <div *ngIf=\"uid\" class=\"flex align-items-center gap-2 mb-2\">\r\n <span class=\"font-semibold\">{{'administration_gestionEntityInformation_uid' | localize}} :</span>\r\n <span>{{ uid }}</span>\r\n </div>\r\n\r\n <p-tabView>\r\n <p-tabPanel [header]=\"'administration_tab_entityInformation' | localize\">\r\n <fieldset [disabled]=\"isDeleteMode() || isConsultMode()\">\r\n <div class=\"modal-body\">\r\n <div class=\"grid\">\r\n <div class=\"col-6\">\r\n <div class=\"grid\">\r\n <Tsi-Label class=\"col-4\" [labelValue]=\"'administration_gestionEntityInformation_className'\"></Tsi-Label>\r\n <Tsi-Text-Box class=\"col-8\" [inputName]=\"'ClassName'\"\r\n [(inputField)]=\"entityWithRelations.entity.className\"\r\n (inputFieldChange)=\"getColonnesByClassNameAsKeyValuePair($event)\"\r\n [disabled]=\"isDeleteMode() || isConsultMode() || isEditMode()\">\r\n </Tsi-Text-Box>\r\n </div>\r\n </div>\r\n\r\n <div class=\"col-6\">\r\n <div class=\"grid\">\r\n <Tsi-Label class=\"col-4\" [labelValue]=\"'administration_gestionEntityInformation_formName'\"></Tsi-Label>\r\n <Tsi-Search-Combo class=\"col-8\" [datasource]=\"componentsOptions\"\r\n [(bind)]=\"entityWithRelations.entity.formName\" id-field=\"key\" label-field=\"value\" [showClear]=\"true\"\r\n [disabled]=\"isDeleteMode() || isConsultMode()\">\r\n </Tsi-Search-Combo>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"grid\">\r\n <div class=\"col-6\">\r\n <div class=\"grid\">\r\n <Tsi-Label class=\"col-4\"\r\n [labelValue]=\"'administration_gestionEntityInformation_listComponent'\"></Tsi-Label>\r\n <Tsi-Search-Combo class=\"col-8\" [datasource]=\"componentsOptions\"\r\n [(bind)]=\"entityWithRelations.entity.listComponent\" id-field=\"key\" label-field=\"value\"\r\n [showClear]=\"true\" [disabled]=\"isDeleteMode() || isConsultMode()\">\r\n </Tsi-Search-Combo>\r\n\r\n </div>\r\n </div>\r\n\r\n <div class=\"col-6\">\r\n <div class=\"grid\">\r\n <Tsi-Label class=\"col-4\" [labelValue]=\"'administration_gestionEntityInformation_logged'\"></Tsi-Label>\r\n <Tsi-CheckBox class=\"col-8\" [inputName]=\"'Logged'\" [(inputField)]=\"entityWithRelations.entity.logged\">\r\n </Tsi-CheckBox>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"grid\">\r\n <div class=\"col-6\">\r\n <div class=\"grid\">\r\n <Tsi-Label class=\"col-4\" [labelValue]=\"'administration_gestionEntityInformation_listRoute'\"></Tsi-Label>\r\n <Tsi-Text-Box class=\"col-8\" [inputName]=\"'ListRoute'\"\r\n [(inputField)]=\"entityWithRelations.entity.listRoute\">\r\n </Tsi-Text-Box>\r\n </div>\r\n </div>\r\n\r\n <div class=\"col-6\">\r\n <div class=\"grid\">\r\n <Tsi-Label class=\"col-4\" [labelValue]=\"'administration_gestionEntityInformation_formRoute'\"></Tsi-Label>\r\n <Tsi-Text-Box class=\"col-8\" [inputName]=\"'FormRoute'\"\r\n [(inputField)]=\"entityWithRelations.entity.formRoute\">\r\n </Tsi-Text-Box>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"grid\">\r\n <div class=\"col-6\">\r\n <div class=\"grid\">\r\n <Tsi-Label class=\"col-4\"\r\n [labelValue]=\"'administration_gestionEntityInformation_discriminatorPropertyName'\"></Tsi-Label>\r\n <Tsi-Text-Box class=\"col-8\" [inputName]=\"'DiscriminatorPropertyName'\"\r\n [(inputField)]=\"entityWithRelations.entity.discriminatorPropertyName\">\r\n </Tsi-Text-Box>\r\n </div>\r\n </div>\r\n\r\n <div class=\"col-6\">\r\n <div class=\"grid\">\r\n <Tsi-Label class=\"col-4\"\r\n [labelValue]=\"'administration_gestionEntityInformation_discriminatorClassName'\"></Tsi-Label>\r\n <Tsi-Text-Box class=\"col-8\" [inputName]=\"'DiscriminatorClassName'\"\r\n [(inputField)]=\"entityWithRelations.entity.discriminatorClassName\">\r\n </Tsi-Text-Box>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"grid\">\r\n <div class=\"col-6\">\r\n <div class=\"grid\">\r\n <Tsi-Label class=\"col-4\"\r\n [labelValue]=\"'administration_gestionEntityInformation_keyColumns'\"></Tsi-Label>\r\n <div class=\"col-8\">\r\n <p-multiSelect [options]=\"keyColumnOptions\" [(ngModel)]=\"entityWithRelations.entity.keyColumns\"\r\n optionValue=\"key\" optionLabel=\"value\" display=\"chip\" defaultLabel=\"Select columns\" [filter]=\"true\">\r\n </p-multiSelect>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"col-6\">\r\n <div class=\"grid\">\r\n <Tsi-Label class=\"col-4\"\r\n [labelValue]=\"'administration_gestionEntityInformation_statusColumnName'\"></Tsi-Label>\r\n\r\n <Tsi-Search-Combo class=\"col-6\" [datasource]=\"keyColumnOptions\"\r\n [(bind)]=\"entityWithRelations.entity.statusColumnName\" id-field=\"key\" label-field=\"value\"\r\n [showClear]=\"true\" [disabled]=\"isDeleteMode() || isConsultMode()\">\r\n </Tsi-Search-Combo>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"grid\">\r\n <div class=\"col-6\">\r\n <div class=\"grid\">\r\n <Tsi-Label class=\"col-4\"\r\n [labelValue]=\"'administration_gestionEntityInformation_isWorkflow'\"></Tsi-Label>\r\n <Tsi-CheckBox class=\"col-8\" [inputName]=\"'IsWorkflow'\"\r\n [(inputField)]=\"entityWithRelations.entity.isWorkflow\">\r\n </Tsi-CheckBox>\r\n </div>\r\n </div>\r\n\r\n <div class=\"col-6\">\r\n <div class=\"grid\">\r\n <Tsi-Label class=\"col-4\"\r\n [labelValue]=\"'administration_gestionEntityInformation_defaultStatus'\"></Tsi-Label>\r\n <Tsi-Text-Box class=\"col-8\" [inputName]=\"'DefaultStatus'\"\r\n [(inputField)]=\"entityWithRelations.entity.defaultStatus\">\r\n </Tsi-Text-Box>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"grid\">\r\n <div class=\"col-6\">\r\n <div class=\"grid\">\r\n <Tsi-Label class=\"col-4\"\r\n [labelValue]=\"'administration_gestionEntityInformation_statusEnumName'\"></Tsi-Label>\r\n <Tsi-Text-Box class=\"col-8\" [inputName]=\"'StatusEnumName'\"\r\n [(inputField)]=\"entityWithRelations.entity.statusEnumName\">\r\n </Tsi-Text-Box>\r\n </div>\r\n </div>\r\n\r\n <div class=\"col-6\">\r\n <div class=\"grid\">\r\n <Tsi-Label class=\"col-4\"\r\n [labelValue]=\"'administration_gestionEntityInformation_advancedSearchComponent'\"></Tsi-Label>\r\n <Tsi-Search-Combo class=\"col-8\" [datasource]=\"componentsOptions\"\r\n [(bind)]=\"entityWithRelations.entity.advancedSearchComponent\" id-field=\"key\" label-field=\"value\"\r\n [showClear]=\"true\" [disabled]=\"isDeleteMode() || isConsultMode()\">\r\n </Tsi-Search-Combo>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"grid\">\r\n <div class=\"col-4\">\r\n <div class=\"grid\">\r\n <Tsi-Label class=\"col-6\"\r\n [labelValue]=\"'administration_gestionEntityInformation_cardHeaderPhotoColumn'\"></Tsi-Label>\r\n\r\n <Tsi-Search-Combo class=\"col-6\" [datasource]=\"keyColumnOptions\"\r\n [(bind)]=\"entityWithRelations.entity.cardHeaderPhotoColumn\" id-field=\"key\" label-field=\"value\"\r\n [showClear]=\"true\" [disabled]=\"isDeleteMode() || isConsultMode()\">\r\n </Tsi-Search-Combo>\r\n </div>\r\n </div>\r\n\r\n <div class=\"col-4\">\r\n <div class=\"grid\">\r\n <Tsi-Label class=\"col-6\"\r\n [labelValue]=\"'administration_gestionEntityInformation_cardTitleColumn'\"></Tsi-Label>\r\n\r\n <Tsi-Search-Combo class=\"col-6\" [datasource]=\"keyColumnOptions\"\r\n [(bind)]=\"entityWithRelations.entity.cardTitleColumn\" id-field=\"key\" label-field=\"value\"\r\n [showClear]=\"true\" [disabled]=\"isDeleteMode() || isConsultMode()\">\r\n </Tsi-Search-Combo>\r\n </div>\r\n </div>\r\n <div class=\"col-4\">\r\n <div class=\"grid\">\r\n <Tsi-Label class=\"col-6\"\r\n [labelValue]=\"'administration_gestionEntityInformation_cardSubHeaderColumn'\"></Tsi-Label>\r\n <Tsi-Search-Combo class=\"col-6\" [datasource]=\"keyColumnOptions\"\r\n [(bind)]=\"entityWithRelations.entity.cardSubHeaderColumn\" id-field=\"key\" label-field=\"value\"\r\n [showClear]=\"true\" [disabled]=\"isDeleteMode() || isConsultMode()\">\r\n </Tsi-Search-Combo>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"grid\">\r\n <div class=\"col-12\">\r\n <div class=\"grid\">\r\n <Tsi-Label class=\"col-2\"\r\n [labelValue]=\"'administration_gestionEntityInformation_cardDescriptionColumn'\"></Tsi-Label>\r\n <Tsi-Search-Combo class=\"col-6\" [datasource]=\"keyColumnOptions\"\r\n [(bind)]=\"entityWithRelations.entity.cardDescriptionColumn\" id-field=\"key\" label-field=\"value\"\r\n [showClear]=\"true\" [disabled]=\"isDeleteMode() || isConsultMode()\">\r\n </Tsi-Search-Combo>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </fieldset>\r\n </p-tabPanel>\r\n <p-tabPanel [header]=\"'administration_tab_relations' | localize\">\r\n <div class=\"grid\">\r\n <Tsi-Generic-Editable-Grid [columns]=\"entitiesRelationsColumns\" [gridData]=\"entityWithRelations.relations\"\r\n [parent]=\"this\" (addedRowEventEmitter)=\"onAddRelation()\" [showAddButton]=\"isEditMode()\">\r\n </Tsi-Generic-Editable-Grid>\r\n </div>\r\n </p-tabPanel>\r\n <p-tabPanel [header]=\"'administration_tab_permissions' | localize\">\r\n <div class=\"grid\">\r\n <tsi-view-grid [header]=\"entityWithRelations.entity.className ?? ''\" class=\"col-12 mb-3\"\r\n [columns]=\"permissionsGridColumns\" [getDataFromApi]=\"false\" [gridData]=\"endpointInfos\">\r\n </tsi-view-grid>\r\n </div>\r\n </p-tabPanel>\r\n <p-tabPanel [header]=\"'administration_tab_properties' | localize\">\r\n <div class=\"flex align-items-center gap-2 mb-3\">\r\n <span class=\"p-input-icon-left\">\r\n <i class=\"pi pi-search\"></i>\r\n <input pInputText type=\"text\" [(ngModel)]=\"propertiesSearchText\" (ngModelChange)=\"onPropertiesSearch()\"\r\n [placeholder]=\"'administration_properties_searchPlaceholder' | localize\" class=\"p-inputtext-sm\" />\r\n </span>\r\n </div>\r\n\r\n <div class=\"properties-grid-section mb-3\">\r\n <h4 class=\"properties-grid-title\">{{ 'administration_properties_modelColumns_title' | localize }}</h4>\r\n <p-table [value]=\"pagedModelColumns\" styleClass=\"p-datatable-sm p-datatable-gridlines\">\r\n <ng-template pTemplate=\"header\">\r\n <tr>\r\n <th *ngFor=\"let col of propertiesGridColumns\">{{ (col.header ?? '') | localize }}</th>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"body\" let-row>\r\n <tr>\r\n <td *ngFor=\"let col of propertiesGridColumns\" [ngClass]=\"getComparisonClass('model', row, col.field)\">\r\n <span *ngIf=\"col.type !== 'checkBox'\">{{ row[col.field] }}</span>\r\n <p-checkbox *ngIf=\"col.type === 'checkBox'\" [ngModel]=\"row[col.field]\" [disabled]=\"true\"\r\n [binary]=\"true\"></p-checkbox>\r\n </td>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"emptymessage\">\r\n <tr>\r\n <td [attr.colspan]=\"propertiesGridColumns.length\" class=\"text-center\">{{'administration_properties_emptyMessage' | localize}}</td>\r\n </tr>\r\n </ng-template>\r\n </p-table>\r\n </div>\r\n\r\n <div class=\"properties-grid-section mb-3\">\r\n <h4 class=\"properties-grid-title\">{{ 'administration_properties_projectDbColumns_title' | localize }}</h4>\r\n <p-table [value]=\"pagedDbColumns\" styleClass=\"p-datatable-sm p-datatable-gridlines\">\r\n <ng-template pTemplate=\"header\">\r\n <tr>\r\n <th *ngFor=\"let col of propertiesGridColumns\">{{ (col.header ?? '') | localize }}</th>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"body\" let-row>\r\n <tr>\r\n <td *ngFor=\"let col of propertiesGridColumns\" [ngClass]=\"getComparisonClass('db', row, col.field)\">\r\n <span *ngIf=\"col.type !== 'checkBox'\">{{ row[col.field] }}</span>\r\n <Tsi-CheckBox *ngIf=\"col.type === 'checkBox'\" [ngModel]=\"row[col.field]\"\r\n [disabled]=\"true\"></Tsi-CheckBox>\r\n </td>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"emptymessage\">\r\n <tr>\r\n <td [attr.colspan]=\"propertiesGridColumns.length\" class=\"text-center\">{{'administration_properties_emptyMessage' | localize}}</td>\r\n </tr>\r\n </ng-template>\r\n </p-table>\r\n </div>\r\n\r\n <div class=\"properties-grid-section mb-3\">\r\n <h4 class=\"properties-grid-title\">{{ 'administration_properties_sqlColumns_title' | localize }}</h4>\r\n <p-table [value]=\"pagedSqlColumns\" styleClass=\"p-datatable-sm p-datatable-gridlines\">\r\n <ng-template pTemplate=\"header\">\r\n <tr>\r\n <th *ngFor=\"let col of propertiesGridColumns\">{{ (col.header ?? '') | localize }}</th>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"body\" let-row>\r\n <tr>\r\n <td *ngFor=\"let col of propertiesGridColumns\" [ngClass]=\"getComparisonClass('sql', row, col.field)\">\r\n <span *ngIf=\"col.type !== 'checkBox'\">{{ row[col.field] }}</span>\r\n <p-checkbox *ngIf=\"col.type === 'checkBox'\" [ngModel]=\"row[col.field]\" [disabled]=\"true\"\r\n [binary]=\"true\"></p-checkbox>\r\n </td>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"emptymessage\">\r\n <tr>\r\n <td [attr.colspan]=\"propertiesGridColumns.length\" class=\"text-center\">{{'administration_properties_emptyMessage' | localize}}</td>\r\n </tr>\r\n </ng-template>\r\n </p-table>\r\n </div>\r\n\r\n <p-paginator [rows]=\"propertiesPageSize\" [totalRecords]=\"propertiesTotalRecords\" [first]=\"propertiesFirst\"\r\n (onPageChange)=\"onPropertiesPageChange($event)\" [rowsPerPageOptions]=\"[10, 25, 50]\">\r\n </p-paginator>\r\n\r\n <div class=\"comparison-legend mt-3\">\r\n <span class=\"legend-item comparison-missing-legend\">{{ 'administration_properties_comparison_missing' | localize }}</span>\r\n <span class=\"legend-item comparison-type-mismatch-legend\">{{ 'administration_properties_comparison_type' | localize }}</span>\r\n <span class=\"legend-item comparison-length-mismatch-legend\">{{ 'administration_properties_comparison_length' | localize }}</span>\r\n </div>\r\n </p-tabPanel>\r\n </p-tabView>\r\n\r\n <Tsi-Modal-Footer [isConsult]=\"isConsultMode()\" [cancelDisabled]=\"saving\" [saveDisabled]=\"isSubmitDisabled()\"\r\n (onCancelClick)=\"hide()\">\r\n </Tsi-Modal-Footer>\r\n</tsi-form>", styles: [":host ::ng-deep .comparison-missing{background-color:#ef9a9a!important}:host ::ng-deep .comparison-type-mismatch{background-color:#ffcdd2!important}:host ::ng-deep .comparison-length-mismatch{background-color:#fff9c4!important}.properties-grid-section{border:1px solid #dee2e6;border-radius:6px;overflow:hidden}.properties-grid-title{margin:0;padding:.75rem 1rem;background-color:#f8f9fa;border-bottom:1px solid #dee2e6;font-size:.95rem;font-weight:600}.comparison-legend{display:flex;gap:1rem;flex-wrap:wrap}.comparison-legend .legend-item{padding:.25rem .75rem;border-radius:4px;font-size:.8rem}.comparison-legend .comparison-missing-legend{background-color:#ef9a9a}.comparison-legend .comparison-type-mismatch-legend{background-color:#ffcdd2}.comparison-legend .comparison-length-mismatch-legend{background-color:#fff9c4}\n"], dependencies: [{ kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i5.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "component", type: i6.Checkbox, selector: "p-checkbox", inputs: ["value", "name", "disabled", "binary", "label", "ariaLabelledBy", "ariaLabel", "tabindex", "inputId", "style", "styleClass", "labelStyleClass", "formControl", "checkboxIcon", "readonly", "required", "autofocus", "trueValue", "falseValue", "variant"], outputs: ["onChange", "onFocus", "onBlur"] }, { kind: "directive", type: i7.InputText, selector: "[pInputText]", inputs: ["variant"] }, { kind: "component", type: i8.Table, selector: "p-table", inputs: ["frozenColumns", "frozenValue", "style", "styleClass", "tableStyle", "tableStyleClass", "paginator", "pageLinks", "rowsPerPageOptions", "alwaysShowPaginator", "paginatorPosition", "paginatorStyleClass", "paginatorDropdownAppendTo", "paginatorDropdownScrollHeight", "currentPageReportTemplate", "showCurrentPageReport", "showJumpToPageDropdown", "showJumpToPageInput", "showFirstLastIcon", "showPageLinks", "defaultSortOrder", "sortMode", "resetPageOnSort", "selectionMode", "selectionPageOnly", "contextMenuSelection", "contextMenuSelectionMode", "dataKey", "metaKeySelection", "rowSelectable", "rowTrackBy", "lazy", "lazyLoadOnInit", "compareSelectionBy", "csvSeparator", "exportFilename", "filters", "globalFilterFields", "filterDelay", "filterLocale", "expandedRowKeys", "editingRowKeys", "rowExpandMode", "scrollable", "scrollDirection", "rowGroupMode", "scrollHeight", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "virtualScrollDelay", "frozenWidth", "responsive", "contextMenu", "resizableColumns", "columnResizeMode", "reorderableColumns", "loading", "loadingIcon", "showLoader", "rowHover", "customSort", "showInitialSortBadge", "autoLayout", "exportFunction", "exportHeader", "stateKey", "stateStorage", "editMode", "groupRowsBy", "groupRowsByOrder", "responsiveLayout", "breakpoint", "paginatorLocale", "value", "columns", "first", "rows", "totalRecords", "sortField", "sortOrder", "multiSortMeta", "selection", "selectAll", "virtualRowHeight"], outputs: ["contextMenuSelectionChange", "selectAllChange", "selectionChange", "onRowSelect", "onRowUnselect", "onPage", "onSort", "onFilter", "onLazyLoad", "onRowExpand", "onRowCollapse", "onContextMenuSelect", "onColResize", "onColReorder", "onRowReorder", "onEditInit", "onEditComplete", "onEditCancel", "onHeaderCheckboxToggle", "sortFunction", "firstChange", "rowsChange", "onStateSave", "onStateRestore"] }, { kind: "component", type: i9.TabView, selector: "p-tabView", inputs: ["style", "styleClass", "controlClose", "scrollable", "activeIndex", "selectOnFocus", "nextButtonAriaLabel", "prevButtonAriaLabel", "autoHideButtons", "tabindex"], outputs: ["onChange", "onClose", "activeIndexChange"] }, { kind: "component", type: i9.TabPanel, selector: "p-tabPanel", inputs: ["closable", "headerStyle", "headerStyleClass", "cache", "tooltip", "tooltipPosition", "tooltipPositionStyle", "tooltipStyleClass", "selected", "disabled", "header", "leftIcon", "rightIcon"] }, { kind: "component", type: i10.MultiSelect, selector: "p-multiSelect", inputs: ["id", "ariaLabel", "style", "styleClass", "panelStyle", "panelStyleClass", "inputId", "disabled", "readonly", "group", "filter", "filterPlaceHolder", "filterLocale", "overlayVisible", "tabindex", "variant", "appendTo", "dataKey", "name", "ariaLabelledBy", "displaySelectedLabel", "maxSelectedLabels", "selectionLimit", "selectedItemsLabel", "showToggleAll", "emptyFilterMessage", "emptyMessage", "resetFilterOnHide", "dropdownIcon", "optionLabel", "optionValue", "optionDisabled", "optionGroupLabel", "optionGroupChildren", "showHeader", "filterBy", "scrollHeight", "lazy", "virtualScroll", "loading", "virtualScrollItemSize", "loadingIcon", "virtualScrollOptions", "overlayOptions", "ariaFilterLabel", "filterMatchMode", "tooltip", "tooltipPosition", "tooltipPositionStyle", "tooltipStyleClass", "autofocusFilter", "display", "autocomplete", "showClear", "autofocus", "autoZIndex", "baseZIndex", "showTransitionOptions", "hideTransitionOptions", "defaultLabel", "placeholder", "options", "filterValue", "itemSize", "selectAll", "focusOnHover", "filterFields", "selectOnFocus", "autoOptionFocus"], outputs: ["onChange", "onFilter", "onFocus", "onBlur", "onClick", "onClear", "onPanelShow", "onPanelHide", "onLazyLoad", "onRemove", "onSelectAllChange"] }, { kind: "component", type: i11.Paginator, selector: "p-paginator", inputs: ["pageLinkSize", "style", "styleClass", "alwaysShow", "dropdownAppendTo", "templateLeft", "templateRight", "appendTo", "dropdownScrollHeight", "currentPageReportTemplate", "showCurrentPageReport", "showFirstLastIcon", "totalRecords", "rows", "rowsPerPageOptions", "showJumpToPageDropdown", "showJumpToPageInput", "jumpToPageItemTemplate", "showPageLinks", "locale", "dropdownItemTemplate", "first"], outputs: ["onPageChange"] }, { kind: "component", type: i12.EditableGridComponent, selector: "Tsi-Generic-Editable-Grid", inputs: ["selectedItems", "configuration", "key", "items", "events", "showAddButton", "showDeleteButton", "showEditButton", "showRowSummary", "scrollHeight", "rowPerPage", "pageSize", "columns", "gridData", "isTableLoading", "parent", "showSaveButton", "showActionColumn", "enableRowDisabling", "rowSummaryConfig", "showHaveSumary", "showRowSumary", "selectKeyOnly", "selectionMode", "showConsultButton", "disabled", "editableGridBusinessClass", "orderColumn", "deleteLineButtonDisabled", "id"], outputs: ["itemsSave", "refreshEventEmitter", "saveDataEventEmitter", "rowChangedEventEmitter", "selectedRowEventEmitter", "addedRowEventEmitter", "focusOutEventEmitter", "cellChanged", "rowDeletedEventEmitter", "selectedItemsChange", "onRowSelect", "focusOutRow", "onConsultClicked"] }, { kind: "component", type: i13.TsiSearchComboComponent, selector: "Tsi-Search-Combo", inputs: ["elementSourceUrl", "listSourceUrl", "listSourceParams", "id-field", "label-field", "multiple", "sort", "showClear", "reloadDataSource", "isFiltered", "selectedLabel", "maxWidth", "businessClass", "comboType", "statusMetadata", "currentRowItem", "datasource", "bind", "maxSelectedLabels", "tooltipMaxDisplayedItems", "bindMode", "showSearchButton", "showAddButton", "showConsultButton", "showUpdateButton"], outputs: ["bindChange", "datasource-loaded", "init", "isLoaded", "selectedLabelChange", "onClick", "onSearchButtonClick", "selectionChange"] }, { kind: "component", type: i14.TsiCheckboxComponent, selector: "Tsi-CheckBox", inputs: ["class", "isBinary", "checked", "tooltipText", "tooltipPosition"], outputs: ["inputFieldChange", "checkedChange"] }, { kind: "component", type: i15.TsiTextBoxComponent, selector: "Tsi-Text-Box", inputs: ["textBoxType", "autocomplete"], outputs: ["newItemEvent", "inputFieldChange"] }, { kind: "component", type: i16.TsiLabelComponent, selector: "Tsi-Label", inputs: ["labelValue", "styleClass", "infoText"] }, { kind: "component", type: i17.TsiViewGridComponent, selector: "tsi-view-grid", inputs: ["columns", "gridConfiguration", "viewComponent", "crudService", "header", "modalSize", "showConsultButton", "showSearchField", "searchFields", "formEndpoint", "formName", "id", "showImportExportButton", "targetBusinessClass", "getDataFromApi", "gridData", "isSearchButtonDisabled", "selectKeyOnly", "selectionMode", "selectedItems", "key", "showGlobalSearch", "showExportButton", "showCalenderView", "calenderSchema", "showHeaderFilters", "showFilterButton", "selectAll", "checkedByField", "sortMode", "searchOnInit"], outputs: ["summariesChange", "selectedItemsChange", "buttonColumnClicked", "searchFieldsValueChanged", "getAllPagedResultChanged"] }, { kind: "component", type: i18.TsiModalFooterComponent, selector: "Tsi-Modal-Footer", inputs: ["cancelDisabled", "saveDisabled", "cancelLabel", "saveLabel", "isConsult", "isDuplicate", "isOnlyCreate", "additionalButtonLabel", "additionalButtonIcon", "additionalButtonDisabled", "showAdditionalButton"], outputs: ["onCancelClick", "onSaveClick", "onAdditionalButtonClick"] }, { kind: "component", type: i19.TsiModalHeaderComponent, selector: "Tsi-Modal-Header", inputs: ["inputTitle"], outputs: ["onCloseClick"] }, { kind: "component", type: i20.TsiFormComponent, selector: "tsi-form", inputs: ["class", "autocomplete", "optionalEndpoints", "disabled", "isLoading", "modalSize", "formEndpoint", "formName", "isReportingToolbarDisabled", "isCreateOnly"], outputs: ["onSave", "onSubmit", "onSubmitFormWorkflowConfiguration", "formRefChange", "onStatusChange"] }, { kind: "pipe", type: i21.LocalizePipe, name: "localize" }, { kind: "pipe", type: i22.ModalLabelPipe, name: "modalLabel" }] }); }
|
|
201
296
|
}
|
|
202
297
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: CreateOrEditEntityInformationsComponent, decorators: [{
|
|
203
298
|
type: Component,
|
|
204
|
-
args: [{ selector: 'app-create-or-edit-entity-informations', providers: [...appProviders], template: "<tsi-form class=\"form-horizontal\" autocomplete=\"off\" (onSubmit)=\"save()\" [isLoading]=\"isloading\">\r\n <Tsi-Modal-Header [inputTitle]=\"header | modalLabel : mode : 'administration_entityRelations_title' | localize\"\r\n (onCloseClick)=\"hide()\">\r\n </Tsi-Modal-Header>\r\n\r\n <div *ngIf=\"uid\" class=\"flex align-items-center gap-2 mb-2\">\r\n <span class=\"font-semibold\">{{'administration_gestionEntityInformation_uid' | localize}} :</span>\r\n <span>{{ uid }}</span>\r\n </div>\r\n\r\n <p-tabView>\r\n <p-tabPanel [header]=\"'administration_tab_entityInformation' | localize\">\r\n <fieldset [disabled]=\"isDeleteMode() || isConsultMode()\">\r\n <div class=\"modal-body\">\r\n <div class=\"grid\">\r\n <div class=\"col-6\">\r\n <div class=\"grid\">\r\n <Tsi-Label class=\"col-4\" [labelValue]=\"'administration_gestionEntityInformation_className'\"></Tsi-Label>\r\n <Tsi-Text-Box class=\"col-8\" [inputName]=\"'ClassName'\"\r\n [(inputField)]=\"entityWithRelations.entity.className\"\r\n (inputFieldChange)=\"getColonnesByClassNameAsKeyValuePair($event)\"\r\n [disabled]=\"isDeleteMode() || isConsultMode() || isEditMode()\">\r\n </Tsi-Text-Box>\r\n </div>\r\n </div>\r\n\r\n <div class=\"col-6\">\r\n <div class=\"grid\">\r\n <Tsi-Label class=\"col-4\" [labelValue]=\"'administration_gestionEntityInformation_formName'\"></Tsi-Label>\r\n <Tsi-Search-Combo class=\"col-8\" [datasource]=\"componentsOptions\"\r\n [(bind)]=\"entityWithRelations.entity.formName\" id-field=\"key\" label-field=\"value\" [showClear]=\"true\"\r\n [disabled]=\"isDeleteMode() || isConsultMode()\">\r\n </Tsi-Search-Combo>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"grid\">\r\n <div class=\"col-6\">\r\n <div class=\"grid\">\r\n <Tsi-Label class=\"col-4\"\r\n [labelValue]=\"'administration_gestionEntityInformation_listComponent'\"></Tsi-Label>\r\n <Tsi-Search-Combo class=\"col-8\" [datasource]=\"componentsOptions\"\r\n [(bind)]=\"entityWithRelations.entity.listComponent\" id-field=\"key\" label-field=\"value\"\r\n [showClear]=\"true\" [disabled]=\"isDeleteMode() || isConsultMode()\">\r\n </Tsi-Search-Combo>\r\n\r\n </div>\r\n </div>\r\n\r\n <div class=\"col-6\">\r\n <div class=\"grid\">\r\n <Tsi-Label class=\"col-4\" [labelValue]=\"'administration_gestionEntityInformation_logged'\"></Tsi-Label>\r\n <Tsi-CheckBox class=\"col-8\" [inputName]=\"'Logged'\" [(inputField)]=\"entityWithRelations.entity.logged\">\r\n </Tsi-CheckBox>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"grid\">\r\n <div class=\"col-6\">\r\n <div class=\"grid\">\r\n <Tsi-Label class=\"col-4\" [labelValue]=\"'administration_gestionEntityInformation_listRoute'\"></Tsi-Label>\r\n <Tsi-Text-Box class=\"col-8\" [inputName]=\"'ListRoute'\"\r\n [(inputField)]=\"entityWithRelations.entity.listRoute\">\r\n </Tsi-Text-Box>\r\n </div>\r\n </div>\r\n\r\n <div class=\"col-6\">\r\n <div class=\"grid\">\r\n <Tsi-Label class=\"col-4\" [labelValue]=\"'administration_gestionEntityInformation_formRoute'\"></Tsi-Label>\r\n <Tsi-Text-Box class=\"col-8\" [inputName]=\"'FormRoute'\"\r\n [(inputField)]=\"entityWithRelations.entity.formRoute\">\r\n </Tsi-Text-Box>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"grid\">\r\n <div class=\"col-6\">\r\n <div class=\"grid\">\r\n <Tsi-Label class=\"col-4\"\r\n [labelValue]=\"'administration_gestionEntityInformation_discriminatorPropertyName'\"></Tsi-Label>\r\n <Tsi-Text-Box class=\"col-8\" [inputName]=\"'DiscriminatorPropertyName'\"\r\n [(inputField)]=\"entityWithRelations.entity.discriminatorPropertyName\">\r\n </Tsi-Text-Box>\r\n </div>\r\n </div>\r\n\r\n <div class=\"col-6\">\r\n <div class=\"grid\">\r\n <Tsi-Label class=\"col-4\"\r\n [labelValue]=\"'administration_gestionEntityInformation_discriminatorClassName'\"></Tsi-Label>\r\n <Tsi-Text-Box class=\"col-8\" [inputName]=\"'DiscriminatorClassName'\"\r\n [(inputField)]=\"entityWithRelations.entity.discriminatorClassName\">\r\n </Tsi-Text-Box>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"grid\">\r\n <div class=\"col-6\">\r\n <div class=\"grid\">\r\n <Tsi-Label class=\"col-4\"\r\n [labelValue]=\"'administration_gestionEntityInformation_keyColumns'\"></Tsi-Label>\r\n <div class=\"col-8\">\r\n <p-multiSelect [options]=\"keyColumnOptions\" [(ngModel)]=\"entityWithRelations.entity.keyColumns\"\r\n optionValue=\"key\" optionLabel=\"value\" display=\"chip\" defaultLabel=\"Select columns\" [filter]=\"true\">\r\n </p-multiSelect>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"col-6\">\r\n <div class=\"grid\">\r\n <Tsi-Label class=\"col-4\"\r\n [labelValue]=\"'administration_gestionEntityInformation_statusColumnName'\"></Tsi-Label>\r\n \r\n <Tsi-Search-Combo class=\"col-6\" [datasource]=\"keyColumnOptions\"\r\n [(bind)]=\"entityWithRelations.entity.statusColumnName\" id-field=\"key\" label-field=\"value\"\r\n [showClear]=\"true\" [disabled]=\"isDeleteMode() || isConsultMode()\">\r\n </Tsi-Search-Combo>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"grid\">\r\n <div class=\"col-6\">\r\n <div class=\"grid\">\r\n <Tsi-Label class=\"col-4\"\r\n [labelValue]=\"'administration_gestionEntityInformation_isWorkflow'\"></Tsi-Label>\r\n <Tsi-CheckBox class=\"col-8\" [inputName]=\"'IsWorkflow'\"\r\n [(inputField)]=\"entityWithRelations.entity.isWorkflow\">\r\n </Tsi-CheckBox>\r\n </div>\r\n </div>\r\n\r\n <div class=\"col-6\">\r\n <div class=\"grid\">\r\n <Tsi-Label class=\"col-4\"\r\n [labelValue]=\"'administration_gestionEntityInformation_defaultStatus'\"></Tsi-Label>\r\n <Tsi-Text-Box class=\"col-8\" [inputName]=\"'DefaultStatus'\"\r\n [(inputField)]=\"entityWithRelations.entity.defaultStatus\">\r\n </Tsi-Text-Box>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"grid\">\r\n <div class=\"col-6\">\r\n <div class=\"grid\">\r\n <Tsi-Label class=\"col-4\"\r\n [labelValue]=\"'administration_gestionEntityInformation_statusEnumName'\"></Tsi-Label>\r\n <Tsi-Text-Box class=\"col-8\" [inputName]=\"'StatusEnumName'\"\r\n [(inputField)]=\"entityWithRelations.entity.statusEnumName\">\r\n </Tsi-Text-Box>\r\n </div>\r\n </div>\r\n\r\n <div class=\"col-6\">\r\n <div class=\"grid\">\r\n <Tsi-Label class=\"col-4\"\r\n [labelValue]=\"'administration_gestionEntityInformation_advancedSearchComponent'\"></Tsi-Label>\r\n <Tsi-Search-Combo class=\"col-8\" [datasource]=\"componentsOptions\"\r\n [(bind)]=\"entityWithRelations.entity.advancedSearchComponent\" id-field=\"key\" label-field=\"value\"\r\n [showClear]=\"true\" [disabled]=\"isDeleteMode() || isConsultMode()\">\r\n </Tsi-Search-Combo>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"grid\">\r\n <div class=\"col-4\">\r\n <div class=\"grid\">\r\n <Tsi-Label class=\"col-6\"\r\n [labelValue]=\"'administration_gestionEntityInformation_cardHeaderPhotoColumn'\"></Tsi-Label>\r\n\r\n <Tsi-Search-Combo class=\"col-6\" [datasource]=\"keyColumnOptions\"\r\n [(bind)]=\"entityWithRelations.entity.cardHeaderPhotoColumn\" id-field=\"key\" label-field=\"value\"\r\n [showClear]=\"true\" [disabled]=\"isDeleteMode() || isConsultMode()\">\r\n </Tsi-Search-Combo>\r\n </div>\r\n </div>\r\n\r\n <div class=\"col-4\">\r\n <div class=\"grid\">\r\n <Tsi-Label class=\"col-6\"\r\n [labelValue]=\"'administration_gestionEntityInformation_cardTitleColumn'\"></Tsi-Label>\r\n \r\n <Tsi-Search-Combo class=\"col-6\" [datasource]=\"keyColumnOptions\"\r\n [(bind)]=\"entityWithRelations.entity.cardTitleColumn\" id-field=\"key\" label-field=\"value\"\r\n [showClear]=\"true\" [disabled]=\"isDeleteMode() || isConsultMode()\">\r\n </Tsi-Search-Combo>\r\n </div>\r\n </div>\r\n <div class=\"col-4\">\r\n <div class=\"grid\">\r\n <Tsi-Label class=\"col-6\"\r\n [labelValue]=\"'administration_gestionEntityInformation_cardSubHeaderColumn'\"></Tsi-Label>\r\n <Tsi-Search-Combo class=\"col-6\" [datasource]=\"keyColumnOptions\"\r\n [(bind)]=\"entityWithRelations.entity.cardSubHeaderColumn\" id-field=\"key\" label-field=\"value\"\r\n [showClear]=\"true\" [disabled]=\"isDeleteMode() || isConsultMode()\">\r\n </Tsi-Search-Combo>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"grid\">\r\n <div class=\"col-12\">\r\n <div class=\"grid\">\r\n <Tsi-Label class=\"col-2\"\r\n [labelValue]=\"'administration_gestionEntityInformation_cardDescriptionColumn'\"></Tsi-Label>\r\n <Tsi-Search-Combo class=\"col-6\" [datasource]=\"keyColumnOptions\"\r\n [(bind)]=\"entityWithRelations.entity.cardDescriptionColumn\" id-field=\"key\" label-field=\"value\"\r\n [showClear]=\"true\" [disabled]=\"isDeleteMode() || isConsultMode()\">\r\n </Tsi-Search-Combo>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </fieldset>\r\n </p-tabPanel>\r\n <p-tabPanel [header]=\"'administration_tab_relations' | localize\">\r\n <div class=\"grid\">\r\n <Tsi-Generic-Editable-Grid [columns]=\"entitiesRelationsColumns\" [gridData]=\"entityWithRelations.relations\"\r\n [parent]=\"this\" (addedRowEventEmitter)=\"onAddRelation()\" [showAddButton]=\"isEditMode()\">\r\n </Tsi-Generic-Editable-Grid>\r\n </div>\r\n </p-tabPanel>\r\n <p-tabPanel [header]=\"'administration_tab_permissions' | localize\">\r\n <div class=\"grid\">\r\n <tsi-view-grid [header]=\"entityWithRelations.entity.className ?? ''\" class=\"col-12 mb-3\"\r\n [columns]=\"permissionsGridColumns\" [getDataFromApi]=\"false\" [gridData]=\"endpointInfos\">\r\n </tsi-view-grid>\r\n </div>\r\n </p-tabPanel>\r\n <p-tabPanel [header]=\"'administration_tab_properties' | localize\">\r\n <div class=\"grid\">\r\n <tsi-view-grid [header]=\"'administration_properties_title' | localize\" class=\"col-12 mb-3\"\r\n [columns]=\"propertiesGridColumns\" [getDataFromApi]=\"false\" [gridData]=\"propertiesData\">\r\n </tsi-view-grid>\r\n </div>\r\n </p-tabPanel>\r\n </p-tabView>\r\n \r\n <Tsi-Modal-Footer [isConsult]=\"isConsultMode()\" [cancelDisabled]=\"saving\" [saveDisabled]=\"isSubmitDisabled()\"\r\n (onCancelClick)=\"hide()\">\r\n </Tsi-Modal-Footer>\r\n</tsi-form>" }]
|
|
299
|
+
args: [{ selector: 'app-create-or-edit-entity-informations', providers: [...appProviders], template: "<tsi-form class=\"form-horizontal\" autocomplete=\"off\" (onSubmit)=\"save()\" [isLoading]=\"isloading\">\r\n <Tsi-Modal-Header [inputTitle]=\"header | modalLabel : mode : 'administration_entityRelations_title' | localize\"\r\n (onCloseClick)=\"hide()\">\r\n </Tsi-Modal-Header>\r\n\r\n <div *ngIf=\"uid\" class=\"flex align-items-center gap-2 mb-2\">\r\n <span class=\"font-semibold\">{{'administration_gestionEntityInformation_uid' | localize}} :</span>\r\n <span>{{ uid }}</span>\r\n </div>\r\n\r\n <p-tabView>\r\n <p-tabPanel [header]=\"'administration_tab_entityInformation' | localize\">\r\n <fieldset [disabled]=\"isDeleteMode() || isConsultMode()\">\r\n <div class=\"modal-body\">\r\n <div class=\"grid\">\r\n <div class=\"col-6\">\r\n <div class=\"grid\">\r\n <Tsi-Label class=\"col-4\" [labelValue]=\"'administration_gestionEntityInformation_className'\"></Tsi-Label>\r\n <Tsi-Text-Box class=\"col-8\" [inputName]=\"'ClassName'\"\r\n [(inputField)]=\"entityWithRelations.entity.className\"\r\n (inputFieldChange)=\"getColonnesByClassNameAsKeyValuePair($event)\"\r\n [disabled]=\"isDeleteMode() || isConsultMode() || isEditMode()\">\r\n </Tsi-Text-Box>\r\n </div>\r\n </div>\r\n\r\n <div class=\"col-6\">\r\n <div class=\"grid\">\r\n <Tsi-Label class=\"col-4\" [labelValue]=\"'administration_gestionEntityInformation_formName'\"></Tsi-Label>\r\n <Tsi-Search-Combo class=\"col-8\" [datasource]=\"componentsOptions\"\r\n [(bind)]=\"entityWithRelations.entity.formName\" id-field=\"key\" label-field=\"value\" [showClear]=\"true\"\r\n [disabled]=\"isDeleteMode() || isConsultMode()\">\r\n </Tsi-Search-Combo>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"grid\">\r\n <div class=\"col-6\">\r\n <div class=\"grid\">\r\n <Tsi-Label class=\"col-4\"\r\n [labelValue]=\"'administration_gestionEntityInformation_listComponent'\"></Tsi-Label>\r\n <Tsi-Search-Combo class=\"col-8\" [datasource]=\"componentsOptions\"\r\n [(bind)]=\"entityWithRelations.entity.listComponent\" id-field=\"key\" label-field=\"value\"\r\n [showClear]=\"true\" [disabled]=\"isDeleteMode() || isConsultMode()\">\r\n </Tsi-Search-Combo>\r\n\r\n </div>\r\n </div>\r\n\r\n <div class=\"col-6\">\r\n <div class=\"grid\">\r\n <Tsi-Label class=\"col-4\" [labelValue]=\"'administration_gestionEntityInformation_logged'\"></Tsi-Label>\r\n <Tsi-CheckBox class=\"col-8\" [inputName]=\"'Logged'\" [(inputField)]=\"entityWithRelations.entity.logged\">\r\n </Tsi-CheckBox>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"grid\">\r\n <div class=\"col-6\">\r\n <div class=\"grid\">\r\n <Tsi-Label class=\"col-4\" [labelValue]=\"'administration_gestionEntityInformation_listRoute'\"></Tsi-Label>\r\n <Tsi-Text-Box class=\"col-8\" [inputName]=\"'ListRoute'\"\r\n [(inputField)]=\"entityWithRelations.entity.listRoute\">\r\n </Tsi-Text-Box>\r\n </div>\r\n </div>\r\n\r\n <div class=\"col-6\">\r\n <div class=\"grid\">\r\n <Tsi-Label class=\"col-4\" [labelValue]=\"'administration_gestionEntityInformation_formRoute'\"></Tsi-Label>\r\n <Tsi-Text-Box class=\"col-8\" [inputName]=\"'FormRoute'\"\r\n [(inputField)]=\"entityWithRelations.entity.formRoute\">\r\n </Tsi-Text-Box>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"grid\">\r\n <div class=\"col-6\">\r\n <div class=\"grid\">\r\n <Tsi-Label class=\"col-4\"\r\n [labelValue]=\"'administration_gestionEntityInformation_discriminatorPropertyName'\"></Tsi-Label>\r\n <Tsi-Text-Box class=\"col-8\" [inputName]=\"'DiscriminatorPropertyName'\"\r\n [(inputField)]=\"entityWithRelations.entity.discriminatorPropertyName\">\r\n </Tsi-Text-Box>\r\n </div>\r\n </div>\r\n\r\n <div class=\"col-6\">\r\n <div class=\"grid\">\r\n <Tsi-Label class=\"col-4\"\r\n [labelValue]=\"'administration_gestionEntityInformation_discriminatorClassName'\"></Tsi-Label>\r\n <Tsi-Text-Box class=\"col-8\" [inputName]=\"'DiscriminatorClassName'\"\r\n [(inputField)]=\"entityWithRelations.entity.discriminatorClassName\">\r\n </Tsi-Text-Box>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"grid\">\r\n <div class=\"col-6\">\r\n <div class=\"grid\">\r\n <Tsi-Label class=\"col-4\"\r\n [labelValue]=\"'administration_gestionEntityInformation_keyColumns'\"></Tsi-Label>\r\n <div class=\"col-8\">\r\n <p-multiSelect [options]=\"keyColumnOptions\" [(ngModel)]=\"entityWithRelations.entity.keyColumns\"\r\n optionValue=\"key\" optionLabel=\"value\" display=\"chip\" defaultLabel=\"Select columns\" [filter]=\"true\">\r\n </p-multiSelect>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"col-6\">\r\n <div class=\"grid\">\r\n <Tsi-Label class=\"col-4\"\r\n [labelValue]=\"'administration_gestionEntityInformation_statusColumnName'\"></Tsi-Label>\r\n\r\n <Tsi-Search-Combo class=\"col-6\" [datasource]=\"keyColumnOptions\"\r\n [(bind)]=\"entityWithRelations.entity.statusColumnName\" id-field=\"key\" label-field=\"value\"\r\n [showClear]=\"true\" [disabled]=\"isDeleteMode() || isConsultMode()\">\r\n </Tsi-Search-Combo>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"grid\">\r\n <div class=\"col-6\">\r\n <div class=\"grid\">\r\n <Tsi-Label class=\"col-4\"\r\n [labelValue]=\"'administration_gestionEntityInformation_isWorkflow'\"></Tsi-Label>\r\n <Tsi-CheckBox class=\"col-8\" [inputName]=\"'IsWorkflow'\"\r\n [(inputField)]=\"entityWithRelations.entity.isWorkflow\">\r\n </Tsi-CheckBox>\r\n </div>\r\n </div>\r\n\r\n <div class=\"col-6\">\r\n <div class=\"grid\">\r\n <Tsi-Label class=\"col-4\"\r\n [labelValue]=\"'administration_gestionEntityInformation_defaultStatus'\"></Tsi-Label>\r\n <Tsi-Text-Box class=\"col-8\" [inputName]=\"'DefaultStatus'\"\r\n [(inputField)]=\"entityWithRelations.entity.defaultStatus\">\r\n </Tsi-Text-Box>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"grid\">\r\n <div class=\"col-6\">\r\n <div class=\"grid\">\r\n <Tsi-Label class=\"col-4\"\r\n [labelValue]=\"'administration_gestionEntityInformation_statusEnumName'\"></Tsi-Label>\r\n <Tsi-Text-Box class=\"col-8\" [inputName]=\"'StatusEnumName'\"\r\n [(inputField)]=\"entityWithRelations.entity.statusEnumName\">\r\n </Tsi-Text-Box>\r\n </div>\r\n </div>\r\n\r\n <div class=\"col-6\">\r\n <div class=\"grid\">\r\n <Tsi-Label class=\"col-4\"\r\n [labelValue]=\"'administration_gestionEntityInformation_advancedSearchComponent'\"></Tsi-Label>\r\n <Tsi-Search-Combo class=\"col-8\" [datasource]=\"componentsOptions\"\r\n [(bind)]=\"entityWithRelations.entity.advancedSearchComponent\" id-field=\"key\" label-field=\"value\"\r\n [showClear]=\"true\" [disabled]=\"isDeleteMode() || isConsultMode()\">\r\n </Tsi-Search-Combo>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"grid\">\r\n <div class=\"col-4\">\r\n <div class=\"grid\">\r\n <Tsi-Label class=\"col-6\"\r\n [labelValue]=\"'administration_gestionEntityInformation_cardHeaderPhotoColumn'\"></Tsi-Label>\r\n\r\n <Tsi-Search-Combo class=\"col-6\" [datasource]=\"keyColumnOptions\"\r\n [(bind)]=\"entityWithRelations.entity.cardHeaderPhotoColumn\" id-field=\"key\" label-field=\"value\"\r\n [showClear]=\"true\" [disabled]=\"isDeleteMode() || isConsultMode()\">\r\n </Tsi-Search-Combo>\r\n </div>\r\n </div>\r\n\r\n <div class=\"col-4\">\r\n <div class=\"grid\">\r\n <Tsi-Label class=\"col-6\"\r\n [labelValue]=\"'administration_gestionEntityInformation_cardTitleColumn'\"></Tsi-Label>\r\n\r\n <Tsi-Search-Combo class=\"col-6\" [datasource]=\"keyColumnOptions\"\r\n [(bind)]=\"entityWithRelations.entity.cardTitleColumn\" id-field=\"key\" label-field=\"value\"\r\n [showClear]=\"true\" [disabled]=\"isDeleteMode() || isConsultMode()\">\r\n </Tsi-Search-Combo>\r\n </div>\r\n </div>\r\n <div class=\"col-4\">\r\n <div class=\"grid\">\r\n <Tsi-Label class=\"col-6\"\r\n [labelValue]=\"'administration_gestionEntityInformation_cardSubHeaderColumn'\"></Tsi-Label>\r\n <Tsi-Search-Combo class=\"col-6\" [datasource]=\"keyColumnOptions\"\r\n [(bind)]=\"entityWithRelations.entity.cardSubHeaderColumn\" id-field=\"key\" label-field=\"value\"\r\n [showClear]=\"true\" [disabled]=\"isDeleteMode() || isConsultMode()\">\r\n </Tsi-Search-Combo>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"grid\">\r\n <div class=\"col-12\">\r\n <div class=\"grid\">\r\n <Tsi-Label class=\"col-2\"\r\n [labelValue]=\"'administration_gestionEntityInformation_cardDescriptionColumn'\"></Tsi-Label>\r\n <Tsi-Search-Combo class=\"col-6\" [datasource]=\"keyColumnOptions\"\r\n [(bind)]=\"entityWithRelations.entity.cardDescriptionColumn\" id-field=\"key\" label-field=\"value\"\r\n [showClear]=\"true\" [disabled]=\"isDeleteMode() || isConsultMode()\">\r\n </Tsi-Search-Combo>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </fieldset>\r\n </p-tabPanel>\r\n <p-tabPanel [header]=\"'administration_tab_relations' | localize\">\r\n <div class=\"grid\">\r\n <Tsi-Generic-Editable-Grid [columns]=\"entitiesRelationsColumns\" [gridData]=\"entityWithRelations.relations\"\r\n [parent]=\"this\" (addedRowEventEmitter)=\"onAddRelation()\" [showAddButton]=\"isEditMode()\">\r\n </Tsi-Generic-Editable-Grid>\r\n </div>\r\n </p-tabPanel>\r\n <p-tabPanel [header]=\"'administration_tab_permissions' | localize\">\r\n <div class=\"grid\">\r\n <tsi-view-grid [header]=\"entityWithRelations.entity.className ?? ''\" class=\"col-12 mb-3\"\r\n [columns]=\"permissionsGridColumns\" [getDataFromApi]=\"false\" [gridData]=\"endpointInfos\">\r\n </tsi-view-grid>\r\n </div>\r\n </p-tabPanel>\r\n <p-tabPanel [header]=\"'administration_tab_properties' | localize\">\r\n <div class=\"flex align-items-center gap-2 mb-3\">\r\n <span class=\"p-input-icon-left\">\r\n <i class=\"pi pi-search\"></i>\r\n <input pInputText type=\"text\" [(ngModel)]=\"propertiesSearchText\" (ngModelChange)=\"onPropertiesSearch()\"\r\n [placeholder]=\"'administration_properties_searchPlaceholder' | localize\" class=\"p-inputtext-sm\" />\r\n </span>\r\n </div>\r\n\r\n <div class=\"properties-grid-section mb-3\">\r\n <h4 class=\"properties-grid-title\">{{ 'administration_properties_modelColumns_title' | localize }}</h4>\r\n <p-table [value]=\"pagedModelColumns\" styleClass=\"p-datatable-sm p-datatable-gridlines\">\r\n <ng-template pTemplate=\"header\">\r\n <tr>\r\n <th *ngFor=\"let col of propertiesGridColumns\">{{ (col.header ?? '') | localize }}</th>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"body\" let-row>\r\n <tr>\r\n <td *ngFor=\"let col of propertiesGridColumns\" [ngClass]=\"getComparisonClass('model', row, col.field)\">\r\n <span *ngIf=\"col.type !== 'checkBox'\">{{ row[col.field] }}</span>\r\n <p-checkbox *ngIf=\"col.type === 'checkBox'\" [ngModel]=\"row[col.field]\" [disabled]=\"true\"\r\n [binary]=\"true\"></p-checkbox>\r\n </td>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"emptymessage\">\r\n <tr>\r\n <td [attr.colspan]=\"propertiesGridColumns.length\" class=\"text-center\">{{'administration_properties_emptyMessage' | localize}}</td>\r\n </tr>\r\n </ng-template>\r\n </p-table>\r\n </div>\r\n\r\n <div class=\"properties-grid-section mb-3\">\r\n <h4 class=\"properties-grid-title\">{{ 'administration_properties_projectDbColumns_title' | localize }}</h4>\r\n <p-table [value]=\"pagedDbColumns\" styleClass=\"p-datatable-sm p-datatable-gridlines\">\r\n <ng-template pTemplate=\"header\">\r\n <tr>\r\n <th *ngFor=\"let col of propertiesGridColumns\">{{ (col.header ?? '') | localize }}</th>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"body\" let-row>\r\n <tr>\r\n <td *ngFor=\"let col of propertiesGridColumns\" [ngClass]=\"getComparisonClass('db', row, col.field)\">\r\n <span *ngIf=\"col.type !== 'checkBox'\">{{ row[col.field] }}</span>\r\n <Tsi-CheckBox *ngIf=\"col.type === 'checkBox'\" [ngModel]=\"row[col.field]\"\r\n [disabled]=\"true\"></Tsi-CheckBox>\r\n </td>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"emptymessage\">\r\n <tr>\r\n <td [attr.colspan]=\"propertiesGridColumns.length\" class=\"text-center\">{{'administration_properties_emptyMessage' | localize}}</td>\r\n </tr>\r\n </ng-template>\r\n </p-table>\r\n </div>\r\n\r\n <div class=\"properties-grid-section mb-3\">\r\n <h4 class=\"properties-grid-title\">{{ 'administration_properties_sqlColumns_title' | localize }}</h4>\r\n <p-table [value]=\"pagedSqlColumns\" styleClass=\"p-datatable-sm p-datatable-gridlines\">\r\n <ng-template pTemplate=\"header\">\r\n <tr>\r\n <th *ngFor=\"let col of propertiesGridColumns\">{{ (col.header ?? '') | localize }}</th>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"body\" let-row>\r\n <tr>\r\n <td *ngFor=\"let col of propertiesGridColumns\" [ngClass]=\"getComparisonClass('sql', row, col.field)\">\r\n <span *ngIf=\"col.type !== 'checkBox'\">{{ row[col.field] }}</span>\r\n <p-checkbox *ngIf=\"col.type === 'checkBox'\" [ngModel]=\"row[col.field]\" [disabled]=\"true\"\r\n [binary]=\"true\"></p-checkbox>\r\n </td>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"emptymessage\">\r\n <tr>\r\n <td [attr.colspan]=\"propertiesGridColumns.length\" class=\"text-center\">{{'administration_properties_emptyMessage' | localize}}</td>\r\n </tr>\r\n </ng-template>\r\n </p-table>\r\n </div>\r\n\r\n <p-paginator [rows]=\"propertiesPageSize\" [totalRecords]=\"propertiesTotalRecords\" [first]=\"propertiesFirst\"\r\n (onPageChange)=\"onPropertiesPageChange($event)\" [rowsPerPageOptions]=\"[10, 25, 50]\">\r\n </p-paginator>\r\n\r\n <div class=\"comparison-legend mt-3\">\r\n <span class=\"legend-item comparison-missing-legend\">{{ 'administration_properties_comparison_missing' | localize }}</span>\r\n <span class=\"legend-item comparison-type-mismatch-legend\">{{ 'administration_properties_comparison_type' | localize }}</span>\r\n <span class=\"legend-item comparison-length-mismatch-legend\">{{ 'administration_properties_comparison_length' | localize }}</span>\r\n </div>\r\n </p-tabPanel>\r\n </p-tabView>\r\n\r\n <Tsi-Modal-Footer [isConsult]=\"isConsultMode()\" [cancelDisabled]=\"saving\" [saveDisabled]=\"isSubmitDisabled()\"\r\n (onCancelClick)=\"hide()\">\r\n </Tsi-Modal-Footer>\r\n</tsi-form>", styles: [":host ::ng-deep .comparison-missing{background-color:#ef9a9a!important}:host ::ng-deep .comparison-type-mismatch{background-color:#ffcdd2!important}:host ::ng-deep .comparison-length-mismatch{background-color:#fff9c4!important}.properties-grid-section{border:1px solid #dee2e6;border-radius:6px;overflow:hidden}.properties-grid-title{margin:0;padding:.75rem 1rem;background-color:#f8f9fa;border-bottom:1px solid #dee2e6;font-size:.95rem;font-weight:600}.comparison-legend{display:flex;gap:1rem;flex-wrap:wrap}.comparison-legend .legend-item{padding:.25rem .75rem;border-radius:4px;font-size:.8rem}.comparison-legend .comparison-missing-legend{background-color:#ef9a9a}.comparison-legend .comparison-type-mismatch-legend{background-color:#ffcdd2}.comparison-legend .comparison-length-mismatch-legend{background-color:#fff9c4}\n"] }]
|
|
205
300
|
}], ctorParameters: () => [{ type: i1.EntityConfigurationService }, { type: i1.ErrorResponseManagerService }, { type: i2.DynamicDialogRef }, { type: i2.DynamicDialogConfig }, { type: i1.TsiNotificationService }, { type: i1.TsiConfirmationService }, { type: i1.ApiExplorerService }] });
|
|
206
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLW9yLWVkaXQtZW50aXR5LWluZm9ybWF0aW9ucy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90c2ktc2hhcmVkLXVpL3NyYy9saWIvdHNpLWNvbXBvbmVudHMvY3JlYXRlLW9yLWVkaXQtZW50aXR5LWluZm9ybWF0aW9ucy9jcmVhdGUtb3ItZWRpdC1lbnRpdHktaW5mb3JtYXRpb25zLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RzaS1zaGFyZWQtdWkvc3JjL2xpYi90c2ktY29tcG9uZW50cy9jcmVhdGUtb3ItZWRpdC1lbnRpdHktaW5mb3JtYXRpb25zL2NyZWF0ZS1vci1lZGl0LWVudGl0eS1pbmZvcm1hdGlvbnMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUxQyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDMUQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDakUsT0FBTyxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFaEQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLG9DQUFvQyxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBRzdGLE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxNQUFNLGlFQUFpRSxDQUFDO0FBQ2hILE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxNQUFNLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFRaEMsTUFBTSxPQUFPLHVDQUF3QyxTQUFRLDZCQUE2QjtJQTZCeEYsWUFDUywwQkFBc0QsRUFDckQsNEJBQXlELEVBQ2pELEdBQXFCLEVBQ3JCLE1BQTJCLEVBQ25D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QUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsTUFBTSxDQUFDLFNBQVMsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUNoSCxDQUFDOytHQXBNVSx1Q0FBdUM7bUdBQXZDLHVDQUF1QyxpRUFGdkMsQ0FBQyxHQUFHLFlBQVksQ0FBQyxpRENuQjlCLG16WUFrUFc7OzRGRDdORSx1Q0FBdUM7a0JBTm5ELFNBQVM7K0JBQ0Usd0NBQXdDLGFBR3ZDLENBQUMsR0FBRyxZQUFZLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBLZXlWYWx1ZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IEh0dHBFcnJvclJlc3BvbnNlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQgeyBDb21wb25lbnQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRHluYW1pY0RpYWxvZ0NvbmZpZywgRHluYW1pY0RpYWxvZ1JlZiB9IGZyb20gJ3ByaW1lbmcvZHluYW1pY2RpYWxvZyc7XHJcbmltcG9ydCB7IGFwcFByb3ZpZGVycyB9IGZyb20gJy4uLy4uL2NvbnN0cy9hcHAtcHJvdmlkZXJzJztcclxuaW1wb3J0IHsgTG9jYWxpemF0aW9uS2V5cyB9IGZyb20gJy4uLy4uL2NvbnN0cy9sb2NhbGl6YXRpb24ta2V5JztcclxuaW1wb3J0IHsgSW5wdXRUeXBlcywgTW9kZXMgfSBmcm9tICcuLi8uLi9lbnVtcyc7XHJcbmltcG9ydCB7IEdyaWRDb2x1bW4gfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzJztcclxuaW1wb3J0IHsgRW50aXR5SW5mb1dpdGhSZWxhdGlvbnMsIFVwZGF0ZUVudGl0eUluZm9XaXRoUmVsYXRpb25zUmVxdWVzdCB9IGZyb20gJy4uLy4uL21vZGVscyc7XHJcbmltcG9ydCB7IEVuZHBvaW50SW5mb3MgfSBmcm9tICcuLi8uLi9tb2RlbHMvYXBwbGljYXRpb24vY29uZmlndXJhdGlvbi9lbmRwb2ludC1pbmZvcyc7XHJcbmltcG9ydCB7IEFwaUV4cGxvcmVyU2VydmljZSwgRW50aXR5Q29uZmlndXJhdGlvblNlcnZpY2UsIEVycm9yUmVzcG9uc2VNYW5hZ2VyU2VydmljZSwgVHNpQ29uZmlybWF0aW9uU2VydmljZSwgVHNpTm90aWZpY2F0aW9uU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzJztcclxuaW1wb3J0IHsgVHNpRm9ybUNvbXBvbmVudEJhc2VDb21wb25lbnQgfSBmcm9tICcuLi8uLi90c2ktYmFzZS9jb21wb25lbnRzL3RzaS1mb3JtLWJhc2UvdHNpLWZvcm0tYmFzZS5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBUeXBlUmVnaXN0cnlIZWxwZXIgfSBmcm9tICcuLi8uLi90c2ktaGVscGVycyc7XHJcbmltcG9ydCB7IGZvcmtKb2luIH0gZnJvbSAncnhqcyc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2FwcC1jcmVhdGUtb3ItZWRpdC1lbnRpdHktaW5mb3JtYXRpb25zJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vY3JlYXRlLW9yLWVkaXQtZW50aXR5LWluZm9ybWF0aW9ucy5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmw6ICcuL2NyZWF0ZS1vci1lZGl0LWVudGl0eS1pbmZvcm1hdGlvbnMuY29tcG9uZW50LnNjc3MnLFxyXG4gIHByb3ZpZGVyczogWy4uLmFwcFByb3ZpZGVyc11cclxufSlcclxuZXhwb3J0IGNsYXNzIENyZWF0ZU9yRWRpdEVudGl0eUluZm9ybWF0aW9uc0NvbXBvbmVudCBleHRlbmRzIFRzaUZvcm1Db21wb25lbnRCYXNlQ29tcG9uZW50IHtcclxuICBlbnRpdHlXaXRoUmVsYXRpb25zOiBFbnRpdHlJbmZvV2l0aFJlbGF0aW9ucyA9IG5ldyBFbnRpdHlJbmZvV2l0aFJlbGF0aW9ucygpO1xyXG4gIGtleUNvbHVtbk9wdGlvbnM6IEtleVZhbHVlPHN0cmluZywgc3RyaW5nPltdID0gW107XHJcbiAgZW5kcG9pbnRJbmZvczogRW5kcG9pbnRJbmZvc1tdID0gW107XHJcbiAgY29tcG9uZW50c09wdGlvbnM6IEtleVZhbHVlPHN0cmluZywgc3RyaW5nPltdID0gVHlwZVJlZ2lzdHJ5SGVscGVyLmdldEJ1c2luZXNzQ29tcG9uZW50TGlzdCgpO1xyXG5cclxuICB1aWQ/OiBzdHJpbmc7XHJcbiAgcHJvcGVydGllc0RhdGE6IHsgZW50aXR5UHJvcGVydHk6IHN0cmluZywgc3FsQ29sdW1uOiBzdHJpbmcgfVtdID0gW107XHJcblxyXG4gIHByb3BlcnRpZXNHcmlkQ29sdW1uczogQXJyYXk8R3JpZENvbHVtbj4gPSBbXHJcbiAgICB7IGhlYWRlcjogJ2FkbWluaXN0cmF0aW9uX3Byb3BlcnRpZXNfZW50aXR5Q29sdW1uJywgZmllbGQ6ICdlbnRpdHlQcm9wZXJ0eScgfSxcclxuICAgIHsgaGVhZGVyOiAnYWRtaW5pc3RyYXRpb25fcHJvcGVydGllc19zcWxDb2x1bW4nLCBmaWVsZDogJ3NxbENvbHVtbicgfVxyXG4gIF07XHJcblxyXG4gIHBlcm1pc3Npb25zR3JpZENvbHVtbnM6IEFycmF5PEdyaWRDb2x1bW4+ID0gW1xyXG4gICAgeyBoZWFkZXI6ICdhZG1pbmlzdHJhdGlvbl9wZXJtaXNzaW9uc19odHRwTWV0aG9kJywgZmllbGQ6ICdodHRwTWV0aG9kJyB9LFxyXG4gICAgeyBoZWFkZXI6ICdhZG1pbmlzdHJhdGlvbl9wZXJtaXNzaW9uc19yb3V0ZScsIGZpZWxkOiAncm91dGUnIH0sXHJcbiAgICB7IGhlYWRlcjogJ2FkbWluaXN0cmF0aW9uX3Blcm1pc3Npb25zX2FjY2Vzc1JpZ2h0cycsIGZpZWxkOiAnYWNjZXNzUmlnaHRzJyB9LFxyXG4gICAgeyBoZWFkZXI6ICdhZG1pbmlzdHJhdGlvbl9wZXJtaXNzaW9uc19tZXRob2ROYW1lJywgZmllbGQ6ICdtZXRob2ROYW1lJyB9XHJcbiAgXTtcclxuXHJcblxyXG4gIGVudGl0aWVzUmVsYXRpb25zQ29sdW1uczogQXJyYXk8R3JpZENvbHVtbj4gPSBbXHJcbiAgICB7IGhlYWRlcjogJ2FkbWluaXN0cmF0aW9uX2VudGl0eVJlbGF0aW9uc19lbnRpdHlGcm9tJywgZmllbGQ6ICdlbnRpdHlGcm9tJywgZGlzYWJsZWQ6IHRydWUgfSxcclxuICAgIHsgaGVhZGVyOiAnYWRtaW5pc3RyYXRpb25fZW50aXR5UmVsYXRpb25zX2VudGl0eVRvJywgZmllbGQ6ICdlbnRpdHlUbycgfSxcclxuICAgIHsgaGVhZGVyOiAnYWRtaW5pc3RyYXRpb25fZW50aXR5UmVsYXRpb25zX2xvZ0Nhc2NhZGUnLCBmaWVsZDogJ2xvZ0Nhc2NhZGUnLCB0eXBlOiBJbnB1dFR5cGVzLkNIRUNLQk9YIH0sXHJcbiAgICB7IGhlYWRlcjogJ2FkbWluaXN0cmF0aW9uX2VudGl0eVJlbGF0aW9uc19kdXBsaWNhdGVDYXNjYWRlJywgZmllbGQ6ICdkdXBsaWNhdGVDYXNjYWRlJywgdHlwZTogSW5wdXRUeXBlcy5DSEVDS0JPWCB9LFxyXG4gICAgeyBoZWFkZXI6ICdhZG1pbmlzdHJhdGlvbl9lbnRpdHlSZWxhdGlvbnNfZGVsZXRlQmVoYXZpb3VyJywgZmllbGQ6ICdkZWxldGVCZWhhdmlvdXInIH1cclxuICBdXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwdWJsaWMgX2VudGl0eUluZm9ybWF0aW9uc1NlcnZpY2U6IEVudGl0eUNvbmZpZ3VyYXRpb25TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfZXJyb3JSZXNwb25zZU1hbmFnZXJTZXJ2aWNlOiBFcnJvclJlc3BvbnNlTWFuYWdlclNlcnZpY2UsXHJcbiAgICBwdWJsaWMgb3ZlcnJpZGUgcmVmOiBEeW5hbWljRGlhbG9nUmVmLFxyXG4gICAgcHVibGljIG92ZXJyaWRlIGNvbmZpZzogRHluYW1pY0RpYWxvZ0NvbmZpZyxcclxuICAgIHByaXZhdGUgX25vdGlmaWNhdGlvblNlcnZpY2U6IFRzaU5vdGlmaWNhdGlvblNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9jb25maXJtYXRpb25TZXJ2aWNlOiBUc2lDb25maXJtYXRpb25TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfYXBpRXhwbG9yZXJTZXJ2aWNlOiBBcGlFeHBsb3JlclNlcnZpY2UpIHtcclxuICAgIHN1cGVyKHJlZiwgY29uZmlnKTtcclxuICB9XHJcblxyXG4gIGdldENvbG9ubmVzQnlDbGFzc05hbWVBc0tleVZhbHVlUGFpcihjbGFzc05hbWU/OiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGlmIChjbGFzc05hbWUpIHtcclxuICAgICAgdGhpcy5fZW50aXR5SW5mb3JtYXRpb25zU2VydmljZS5nZXRDb2xvbm5lc0J5Q2xhc3NOYW1lQXNLZXlWYWx1ZVBhaXIoY2xhc3NOYW1lKVxyXG4gICAgICAgIC5zdWJzY3JpYmUoY29sdW1ucyA9PiB7XHJcbiAgICAgICAgICB0aGlzLmtleUNvbHVtbk9wdGlvbnMgPSBjb2x1bW5zO1xyXG4gICAgICAgICAgdGhpcy5lbnRpdHlXaXRoUmVsYXRpb25zLnJlbGF0aW9ucy5tYXAoZXIgPT4gZXIuZW50aXR5RnJvbSA9IGNsYXNzTmFtZSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIFxyXG4gIGdldFBlcm1pc3Npb25zQnlDbGFzc05hbWUoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5pZCkge1xyXG4gICAgICB0aGlzLl9hcGlFeHBsb3JlclNlcnZpY2UuZ2V0RW5kcG9pbnRzSW5mb3ModGhpcy5pZCkuc3Vic2NyaWJlKHtcclxuICAgICAgICBuZXh0OiAoZW5kcG9pbnRzSW5mb3MpID0+IHtcclxuICAgICAgICAgIGlmIChlbmRwb2ludHNJbmZvcyAmJiBBcnJheS5pc0FycmF5KGVuZHBvaW50c0luZm9zKSAmJiBlbmRwb2ludHNJbmZvcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZW5kcG9pbnRJbmZvcyA9IGVuZHBvaW50c0luZm9zO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZXJyb3I6IChlcnJvcikgPT4ge1xyXG4gICAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgZmV0Y2hpbmcgcGVybWlzc2lvbnM6JywgZXJyb3IpO1xyXG4gICAgICAgICAgdGhpcy5fZXJyb3JSZXNwb25zZU1hbmFnZXJTZXJ2aWNlLnNob3dFcnJvck1lc3NhZ2UoZXJyb3IpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvdmVycmlkZSBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHN1cGVyLm5nT25Jbml0KCk7XHJcbiAgICB0aGlzLmdldENvbG9ubmVzQnlDbGFzc05hbWVBc0tleVZhbHVlUGFpcih0aGlzLmlkKTtcclxuICAgIHRoaXMuZ2V0UGVybWlzc2lvbnNCeUNsYXNzTmFtZSgpO1xyXG4gICAgdGhpcy5nZXRQcm9wZXJ0aWVzRGF0YSgpO1xyXG4gICAgaWYgKFxyXG4gICAgICAodGhpcy5tb2RlID09PSBNb2Rlcy5lZGl0IHx8IHRoaXMubW9kZSA9PT0gTW9kZXMuZGVsZXRlIHx8IHRoaXMubW9kZSA9PT0gTW9kZXMuY29uc3VsdCkgJiZcclxuICAgICAgdGhpcy5pZCAhPT0gdW5kZWZpbmVkICYmXHJcbiAgICAgIHRoaXMuaWQgIT09IG51bGxcclxuICAgICkge1xyXG4gICAgICB0aGlzLmlzbG9hZGluZyA9IHRydWU7XHJcbiAgICAgIHRoaXMuX2VudGl0eUluZm9ybWF0aW9uc1NlcnZpY2UuZ2V0RW50aXR5SW5mb3JtYXRpb25zQW5kUmVsYXRpb25zKHRoaXMuaWQpLnN1YnNjcmliZSh7XHJcbiAgICAgICAgbmV4dDogKGRhdGEpID0+IHtcclxuICAgICAgICAgIHRoaXMuZW50aXR5V2l0aFJlbGF0aW9ucyA9IGRhdGE7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBlcnJvcjogKGVycm9yKSA9PiB7XHJcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBmZXRjaGluZyBlbnRpdHlJbmZvcm1hdGlvbjonLCBlcnJvcik7XHJcbiAgICAgICAgICB0aGlzLl9lcnJvclJlc3BvbnNlTWFuYWdlclNlcnZpY2Uuc2hvd0Vycm9yTWVzc2FnZShlcnJvcik7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBjb21wbGV0ZTogKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5pc2xvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb3ZlcnJpZGUgc2F2ZSgpOiB2b2lkIHtcclxuICAgIHN1cGVyLnNhdmUoKVxyXG4gICAgdGhpcy5zYXZpbmcgPSBmYWxzZTtcclxuICAgIHRoaXMuaXNsb2FkaW5nID0gdHJ1ZTtcclxuXHJcbiAgICBpZiAodGhpcy5tb2RlID09PSBNb2Rlcy5jcmVhdGUpIHtcclxuICAgICAgdGhpcy5fZW50aXR5SW5mb3JtYXRpb25zU2VydmljZS5jcmVhdGUodGhpcy5lbnRpdHlXaXRoUmVsYXRpb25zKS5zdWJzY3JpYmUoe1xyXG4gICAgICAgIG5leHQ6ICgpID0+IHtcclxuICAgICAgICAgIHRoaXMuX25vdGlmaWNhdGlvblNlcnZpY2UuaW5mbyh0aGlzLmwoTG9jYWxpemF0aW9uS2V5cy5zYXZlZFN1Y2Nlc3NmdWxseSkpO1xyXG4gICAgICAgICAgdGhpcy5oaWRlKHRydWUpO1xyXG4gICAgICAgICAgdGhpcy5vblNhdmUuZW1pdCgpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZXJyb3I6IChyZXNwb25zZTogSHR0cEVycm9yUmVzcG9uc2UpID0+IHtcclxuICAgICAgICAgIHRoaXMuc2F2aW5nID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLmlzbG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy5fZXJyb3JSZXNwb25zZU1hbmFnZXJTZXJ2aWNlLnNob3dFcnJvck1lc3NhZ2UocmVzcG9uc2UpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgY29tcGxldGU6ICgpID0+IHtcclxuICAgICAgICAgIHRoaXMuaXNsb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIGlmIChcclxuICAgICAgdGhpcy5tb2RlID09PSBNb2Rlcy5lZGl0XHJcbiAgICAgICYmIHRoaXMuZW50aXR5V2l0aFJlbGF0aW9uc1xyXG4gICAgICAmJiB0aGlzLmVudGl0eVdpdGhSZWxhdGlvbnMuZW50aXR5LmNsYXNzTmFtZVxyXG4gICAgKSB7XHJcbiAgICAgIGxldCB1cGRhdGVFbnRpdHlJbmZvV2l0aFJlbGF0aW9uc1JlcXVlc3QgPSBuZXcgVXBkYXRlRW50aXR5SW5mb1dpdGhSZWxhdGlvbnNSZXF1ZXN0KHRoaXMuaWQgPz8gJycsIHRoaXMuZW50aXR5V2l0aFJlbGF0aW9ucy5lbnRpdHksIHRoaXMuZW50aXR5V2l0aFJlbGF0aW9ucy5yZWxhdGlvbnMpO1xyXG4gICAgICB0aGlzLl9lbnRpdHlJbmZvcm1hdGlvbnNTZXJ2aWNlLnVwZGF0ZSh1cGRhdGVFbnRpdHlJbmZvV2l0aFJlbGF0aW9uc1JlcXVlc3QpLnN1YnNjcmliZSh7XHJcbiAgICAgICAgbmV4dDogKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5fbm90aWZpY2F0aW9uU2VydmljZS5pbmZvKHRoaXMubChMb2NhbGl6YXRpb25LZXlzLnVwZGF0ZWRTdWNjZXNzZnVsbHkpKTtcclxuICAgICAgICAgIHRoaXMuaGlkZSh0cnVlKTtcclxuICAgICAgICAgIHRoaXMub25TYXZlLmVtaXQoKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGVycm9yOiAocmVzcG9uc2U6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnNhdmluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy5pc2xvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMuX2Vycm9yUmVzcG9uc2VNYW5hZ2VyU2VydmljZS5zaG93RXJyb3JNZXNzYWdlKHJlc3BvbnNlKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGNvbXBsZXRlOiAoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmlzbG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAodGhpcy5tb2RlID09PSBNb2Rlcy5kZWxldGUpIHtcclxuICAgICAgdGhpcy5fY29uZmlybWF0aW9uU2VydmljZS5jb25maXJtKFxyXG4gICAgICAgIExvY2FsaXphdGlvbktleXMuY29uZmlybURlbGV0ZSxcclxuICAgICAgICB1bmRlZmluZWQsXHJcbiAgICAgICAgKHJlc3VsdDogYm9vbGVhbikgPT4ge1xyXG4gICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICByZXN1bHRcclxuICAgICAgICAgICAgJiYgdGhpcy5lbnRpdHlXaXRoUmVsYXRpb25zLmVudGl0eS5jbGFzc05hbWVcclxuICAgICAgICAgICkge1xyXG4gICAgICAgICAgICB0aGlzLl9lbnRpdHlJbmZvcm1hdGlvbnNTZXJ2aWNlLmRlbGV0ZSh0aGlzLmlkID8/ICcnKS5zdWJzY3JpYmUoe1xyXG4gICAgICAgICAgICAgIG5leHQ6ICgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX25vdGlmaWNhdGlvblNlcnZpY2Uuc3VjY2Vzcyh0aGlzLmwoTG9jYWxpemF0aW9uS2V5cy5kZWxldGVkU3VjY2Vzc2Z1bGx5KSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmhpZGUodHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm9uU2F2ZS5lbWl0KCk7XHJcbiAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICBlcnJvcjogKHJlc3BvbnNlOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fZXJyb3JSZXNwb25zZU1hbmFnZXJTZXJ2aWNlLnNob3dFcnJvck1lc3NhZ2UocmVzcG9uc2UpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zYXZpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIHRoaXMuaXNsb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICBjb21wbGV0ZTogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pc2xvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldFByb3BlcnRpZXNEYXRhKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuaWQpIHtcclxuICAgICAgZm9ya0pvaW4oe1xyXG4gICAgICAgIGVudGl0eUNvbHVtbnM6IHRoaXMuX2VudGl0eUluZm9ybWF0aW9uc1NlcnZpY2UuZ2V0RW50aXR5Q29sdW1ucyh0aGlzLmlkKSxcclxuICAgICAgICBzcWxDb2x1bW5zOiB0aGlzLl9lbnRpdHlJbmZvcm1hdGlvbnNTZXJ2aWNlLmdldFNxbENvbHVtbnModGhpcy5pZClcclxuICAgICAgfSkuc3Vic2NyaWJlKHtcclxuICAgICAgICBuZXh0OiAoeyBlbnRpdHlDb2x1bW5zLCBzcWxDb2x1bW5zIH0pID0+IHtcclxuICAgICAgICAgIGNvbnN0IGVudGl0eUNvbHMgPSBlbnRpdHlDb2x1bW5zID8/IFtdO1xyXG4gICAgICAgICAgY29uc3Qgc3FsQ29scyA9IHNxbENvbHVtbnMgPz8gW107XHJcbiAgICAgICAgICBjb25zdCBtYXhMZW5ndGggPSBNYXRoLm1heChlbnRpdHlDb2xzLmxlbmd0aCwgc3FsQ29scy5sZW5ndGgpO1xyXG4gICAgICAgICAgdGhpcy5wcm9wZXJ0aWVzRGF0YSA9IFtdO1xyXG4gICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtYXhMZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB0aGlzLnByb3BlcnRpZXNEYXRhLnB1c2goe1xyXG4gICAgICAgICAgICAgIGVudGl0eVByb3BlcnR5OiBlbnRpdHlDb2xzW2ldPy52YWx1ZSA/PyAnJyxcclxuICAgICAgICAgICAgICBzcWxDb2x1bW46IHNxbENvbHNbaV0/LnZhbHVlID8/ICcnXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZXJyb3I6IChlcnJvcikgPT4ge1xyXG4gICAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgZmV0Y2hpbmcgcHJvcGVydGllcyBkYXRhOicsIGVycm9yKTtcclxuICAgICAgICAgIHRoaXMuX2Vycm9yUmVzcG9uc2VNYW5hZ2VyU2VydmljZS5zaG93RXJyb3JNZXNzYWdlKGVycm9yKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25BZGRSZWxhdGlvbigpOiB2b2lkIHtcclxuICAgIHRoaXMuZW50aXR5V2l0aFJlbGF0aW9ucy5yZWxhdGlvbnMubWFwKGVyID0+IGVyLmVudGl0eUZyb20gPSB0aGlzLmVudGl0eVdpdGhSZWxhdGlvbnMuZW50aXR5LmNsYXNzTmFtZSA/PyAnJyk7XHJcbiAgfVxyXG59IiwiPHRzaS1mb3JtIGNsYXNzPVwiZm9ybS1ob3Jpem9udGFsXCIgYXV0b2NvbXBsZXRlPVwib2ZmXCIgKG9uU3VibWl0KT1cInNhdmUoKVwiIFtpc0xvYWRpbmddPVwiaXNsb2FkaW5nXCI+XHJcbiAgPFRzaS1Nb2RhbC1IZWFkZXIgW2lucHV0VGl0bGVdPVwiaGVhZGVyIHwgbW9kYWxMYWJlbCA6IG1vZGUgOiAnYWRtaW5pc3RyYXRpb25fZW50aXR5UmVsYXRpb25zX3RpdGxlJyB8IGxvY2FsaXplXCJcclxuICAgIChvbkNsb3NlQ2xpY2spPVwiaGlkZSgpXCI+XHJcbiAgPC9Uc2ktTW9kYWwtSGVhZGVyPlxyXG5cclxuICA8ZGl2ICpuZ0lmPVwidWlkXCIgY2xhc3M9XCJmbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBnYXAtMiBtYi0yXCI+XHJcbiAgICA8c3BhbiBjbGFzcz1cImZvbnQtc2VtaWJvbGRcIj57eydhZG1pbmlzdHJhdGlvbl9nZXN0aW9uRW50aXR5SW5mb3JtYXRpb25fdWlkJyB8IGxvY2FsaXplfX0gOjwvc3Bhbj5cclxuICAgIDxzcGFuPnt7IHVpZCB9fTwvc3Bhbj5cclxuICA8L2Rpdj5cclxuXHJcbiAgPHAtdGFiVmlldz5cclxuICAgIDxwLXRhYlBhbmVsIFtoZWFkZXJdPVwiJ2FkbWluaXN0cmF0aW9uX3RhYl9lbnRpdHlJbmZvcm1hdGlvbicgfCBsb2NhbGl6ZVwiPlxyXG4gICAgICA8ZmllbGRzZXQgW2Rpc2FibGVkXT1cImlzRGVsZXRlTW9kZSgpIHx8IGlzQ29uc3VsdE1vZGUoKVwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1ib2R5XCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZ3JpZFwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTZcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZ3JpZFwiPlxyXG4gICAgICAgICAgICAgICAgPFRzaS1MYWJlbCBjbGFzcz1cImNvbC00XCIgW2xhYmVsVmFsdWVdPVwiJ2FkbWluaXN0cmF0aW9uX2dlc3Rpb25FbnRpdHlJbmZvcm1hdGlvbl9jbGFzc05hbWUnXCI+PC9Uc2ktTGFiZWw+XHJcbiAgICAgICAgICAgICAgICA8VHNpLVRleHQtQm94IGNsYXNzPVwiY29sLThcIiBbaW5wdXROYW1lXT1cIidDbGFzc05hbWUnXCJcclxuICAgICAgICAgICAgICAgICAgWyhpbnB1dEZpZWxkKV09XCJlbnRpdHlXaXRoUmVsYXRpb25zLmVudGl0eS5jbGFzc05hbWVcIlxyXG4gICAgICAgICAgICAgICAgICAoaW5wdXRGaWVsZENoYW5nZSk9XCJnZXRDb2xvbm5lc0J5Q2xhc3NOYW1lQXNLZXlWYWx1ZVBhaXIoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJpc0RlbGV0ZU1vZGUoKSB8fCBpc0NvbnN1bHRNb2RlKCkgfHwgaXNFZGl0TW9kZSgpXCI+XHJcbiAgICAgICAgICAgICAgICA8L1RzaS1UZXh0LUJveD5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTZcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZ3JpZFwiPlxyXG4gICAgICAgICAgICAgICAgPFRzaS1MYWJlbCBjbGFzcz1cImNvbC00XCIgW2xhYmVsVmFsdWVdPVwiJ2FkbWluaXN0cmF0aW9uX2dlc3Rpb25FbnRpdHlJbmZvcm1hdGlvbl9mb3JtTmFtZSdcIj48L1RzaS1MYWJlbD5cclxuICAgICAgICAgICAgICAgIDxUc2ktU2VhcmNoLUNvbWJvIGNsYXNzPVwiY29sLThcIiBbZGF0YXNvdXJjZV09XCJjb21wb25lbnRzT3B0aW9uc1wiXHJcbiAgICAgICAgICAgICAgICAgIFsoYmluZCldPVwiZW50aXR5V2l0aFJlbGF0aW9ucy5lbnRpdHkuZm9ybU5hbWVcIiBpZC1maWVsZD1cImtleVwiIGxhYmVsLWZpZWxkPVwidmFsdWVcIiBbc2hvd0NsZWFyXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiaXNEZWxldGVNb2RlKCkgfHwgaXNDb25zdWx0TW9kZSgpXCI+XHJcbiAgICAgICAgICAgICAgICA8L1RzaS1TZWFyY2gtQ29tYm8+XHJcblxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImdyaWRcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC02XCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImdyaWRcIj5cclxuICAgICAgICAgICAgICAgIDxUc2ktTGFiZWwgY2xhc3M9XCJjb2wtNFwiXHJcbiAgICAgICAgICAgICAgICAgIFtsYWJlbFZhbHVlXT1cIidhZG1pbmlzdHJhdGlvbl9nZXN0aW9uRW50aXR5SW5mb3JtYXRpb25fbGlzdENvbXBvbmVudCdcIj48L1RzaS1MYWJlbD5cclxuICAgICAgICAgICAgICAgIDxUc2ktU2VhcmNoLUNvbWJvIGNsYXNzPVwiY29sLThcIiBbZGF0YXNvdXJjZV09XCJjb21wb25lbnRzT3B0aW9uc1wiXHJcbiAgICAgICAgICAgICAgICAgIFsoYmluZCldPVwiZW50aXR5V2l0aFJlbGF0aW9ucy5lbnRpdHkubGlzdENvbXBvbmVudFwiIGlkLWZpZWxkPVwia2V5XCIgbGFiZWwtZmllbGQ9XCJ2YWx1ZVwiXHJcbiAgICAgICAgICAgICAgICAgIFtzaG93Q2xlYXJdPVwidHJ1ZVwiIFtkaXNhYmxlZF09XCJpc0RlbGV0ZU1vZGUoKSB8fCBpc0NvbnN1bHRNb2RlKClcIj5cclxuICAgICAgICAgICAgICAgIDwvVHNpLVNlYXJjaC1Db21ibz5cclxuXHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC02XCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImdyaWRcIj5cclxuICAgICAgICAgICAgICAgIDxUc2ktTGFiZWwgY2xhc3M9XCJjb2wtNFwiIFtsYWJlbFZhbHVlXT1cIidhZG1pbmlzdHJhdGlvbl9nZXN0aW9uRW50aXR5SW5mb3JtYXRpb25fbG9nZ2VkJ1wiPjwvVHNpLUxhYmVsPlxyXG4gICAgICAgICAgICAgICAgPFRzaS1DaGVja0JveCBjbGFzcz1cImNvbC04XCIgW2lucHV0TmFtZV09XCInTG9nZ2VkJ1wiIFsoaW5wdXRGaWVsZCldPVwiZW50aXR5V2l0aFJlbGF0aW9ucy5lbnRpdHkubG9nZ2VkXCI+XHJcbiAgICAgICAgICAgICAgICA8L1RzaS1DaGVja0JveD5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJncmlkXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNlwiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJncmlkXCI+XHJcbiAgICAgICAgICAgICAgICA8VHNpLUxhYmVsIGNsYXNzPVwiY29sLTRcIiBbbGFiZWxWYWx1ZV09XCInYWRtaW5pc3RyYXRpb25fZ2VzdGlvbkVudGl0eUluZm9ybWF0aW9uX2xpc3RSb3V0ZSdcIj48L1RzaS1MYWJlbD5cclxuICAgICAgICAgICAgICAgIDxUc2ktVGV4dC1Cb3ggY2xhc3M9XCJjb2wtOFwiIFtpbnB1dE5hbWVdPVwiJ0xpc3RSb3V0ZSdcIlxyXG4gICAgICAgICAgICAgICAgICBbKGlucHV0RmllbGQpXT1cImVudGl0eVdpdGhSZWxhdGlvbnMuZW50aXR5Lmxpc3RSb3V0ZVwiPlxyXG4gICAgICAgICAgICAgICAgPC9Uc2ktVGV4dC1Cb3g+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC02XCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImdyaWRcIj5cclxuICAgICAgICAgICAgICAgIDxUc2ktTGFiZWwgY2xhc3M9XCJjb2wtNFwiIFtsYWJlbFZhbHVlXT1cIidhZG1pbmlzdHJhdGlvbl9nZXN0aW9uRW50aXR5SW5mb3JtYXRpb25fZm9ybVJvdXRlJ1wiPjwvVHNpLUxhYmVsPlxyXG4gICAgICAgICAgICAgICAgPFRzaS1UZXh0LUJveCBjbGFzcz1cImNvbC04XCIgW2lucHV0TmFtZV09XCInRm9ybVJvdXRlJ1wiXHJcbiAgICAgICAgICAgICAgICAgIFsoaW5wdXRGaWVsZCldPVwiZW50aXR5V2l0aFJlbGF0aW9ucy5lbnRpdHkuZm9ybVJvdXRlXCI+XHJcbiAgICAgICAgICAgICAgICA8L1RzaS1UZXh0LUJveD5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJncmlkXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNlwiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJncmlkXCI+XHJcbiAgICAgICAgICAgICAgICA8VHNpLUxhYmVsIGNsYXNzPVwiY29sLTRcIlxyXG4gICAgICAgICAgICAgICAgICBbbGFiZWxWYWx1ZV09XCInYWRtaW5pc3RyYXRpb25fZ2VzdGlvbkVudGl0eUluZm9ybWF0aW9uX2Rpc2NyaW1pbmF0b3JQcm9wZXJ0eU5hbWUnXCI+PC9Uc2ktTGFiZWw+XHJcbiAgICAgICAgICAgICAgICA8VHNpLVRleHQtQm94IGNsYXNzPVwiY29sLThcIiBbaW5wdXROYW1lXT1cIidEaXNjcmltaW5hdG9yUHJvcGVydHlOYW1lJ1wiXHJcbiAgICAgICAgICAgICAgICAgIFsoaW5wdXRGaWVsZCldPVwiZW50aXR5V2l0aFJlbGF0aW9ucy5lbnRpdHkuZGlzY3JpbWluYXRvclByb3BlcnR5TmFtZVwiPlxyXG4gICAgICAgICAgICAgICAgPC9Uc2ktVGV4dC1Cb3g+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC02XCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImdyaWRcIj5cclxuICAgICAgICAgICAgICAgIDxUc2ktTGFiZWwgY2xhc3M9XCJjb2wtNFwiXHJcbiAgICAgICAgICAgICAgICAgIFtsYWJlbFZhbHVlXT1cIidhZG1pbmlzdHJhdGlvbl9nZXN0aW9uRW50aXR5SW5mb3JtYXRpb25fZGlzY3JpbWluYXRvckNsYXNzTmFtZSdcIj48L1RzaS1MYWJlbD5cclxuICAgICAgICAgICAgICAgIDxUc2ktVGV4dC1Cb3ggY2xhc3M9XCJjb2wtOFwiIFtpbnB1dE5hbWVdPVwiJ0Rpc2NyaW1pbmF0b3JDbGFzc05hbWUnXCJcclxuICAgICAgICAgICAgICAgICAgWyhpbnB1dEZpZWxkKV09XCJlbnRpdHlXaXRoUmVsYXRpb25zLmVudGl0eS5kaXNjcmltaW5hdG9yQ2xhc3NOYW1lXCI+XHJcbiAgICAgICAgICAgICAgICA8L1RzaS1UZXh0LUJveD5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJncmlkXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNlwiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJncmlkXCI+XHJcbiAgICAgICAgICAgICAgICA8VHNpLUxhYmVsIGNsYXNzPVwiY29sLTRcIlxyXG4gICAgICAgICAgICAgICAgICBbbGFiZWxWYWx1ZV09XCInYWRtaW5pc3RyYXRpb25fZ2VzdGlvbkVudGl0eUluZm9ybWF0aW9uX2tleUNvbHVtbnMnXCI+PC9Uc2ktTGFiZWw+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLThcIj5cclxuICAgICAgICAgICAgICAgICAgPHAtbXVsdGlTZWxlY3QgW29wdGlvbnNdPVwia2V5Q29sdW1uT3B0aW9uc1wiIFsobmdNb2RlbCldPVwiZW50aXR5V2l0aFJlbGF0aW9ucy5lbnRpdHkua2V5Q29sdW1uc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9uVmFsdWU9XCJrZXlcIiBvcHRpb25MYWJlbD1cInZhbHVlXCIgZGlzcGxheT1cImNoaXBcIiBkZWZhdWx0TGFiZWw9XCJTZWxlY3QgY29sdW1uc1wiIFtmaWx0ZXJdPVwidHJ1ZVwiPlxyXG4gICAgICAgICAgICAgICAgICA8L3AtbXVsdGlTZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNlwiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJncmlkXCI+XHJcbiAgICAgICAgICAgICAgICA8VHNpLUxhYmVsIGNsYXNzPVwiY29sLTRcIlxyXG4gICAgICAgICAgICAgICAgICBbbGFiZWxWYWx1ZV09XCInYWRtaW5pc3RyYXRpb25fZ2VzdGlvbkVudGl0eUluZm9ybWF0aW9uX3N0YXR1c0NvbHVtbk5hbWUnXCI+PC9Uc2ktTGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgPFRzaS1TZWFyY2gtQ29tYm8gY2xhc3M9XCJjb2wtNlwiIFtkYXRhc291cmNlXT1cImtleUNvbHVtbk9wdGlvbnNcIlxyXG4gICAgICAgICAgICAgICAgICBbKGJpbmQpXT1cImVudGl0eVdpdGhSZWxhdGlvbnMuZW50aXR5LnN0YXR1c0NvbHVtbk5hbWVcIiBpZC1maWVsZD1cImtleVwiIGxhYmVsLWZpZWxkPVwidmFsdWVcIlxyXG4gICAgICAgICAgICAgICAgICBbc2hvd0NsZWFyXT1cInRydWVcIiBbZGlzYWJsZWRdPVwiaXNEZWxldGVNb2RlKCkgfHwgaXNDb25zdWx0TW9kZSgpXCI+XHJcbiAgICAgICAgICAgICAgICA8L1RzaS1TZWFyY2gtQ29tYm8+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZ3JpZFwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTZcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZ3JpZFwiPlxyXG4gICAgICAgICAgICAgICAgPFRzaS1MYWJlbCBjbGFzcz1cImNvbC00XCJcclxuICAgICAgICAgICAgICAgICAgW2xhYmVsVmFsdWVdPVwiJ2FkbWluaXN0cmF0aW9uX2dlc3Rpb25FbnRpdHlJbmZvcm1hdGlvbl9pc1dvcmtmbG93J1wiPjwvVHNpLUxhYmVsPlxyXG4gICAgICAgICAgICAgICAgPFRzaS1DaGVja0JveCBjbGFzcz1cImNvbC04XCIgW2lucHV0TmFtZV09XCInSXNXb3JrZmxvdydcIlxyXG4gICAgICAgICAgICAgICAgICBbKGlucHV0RmllbGQpXT1cImVudGl0eVdpdGhSZWxhdGlvbnMuZW50aXR5LmlzV29ya2Zsb3dcIj5cclxuICAgICAgICAgICAgICAgIDwvVHNpLUNoZWNrQm94PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNlwiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJncmlkXCI+XHJcbiAgICAgICAgICAgICAgICA8VHNpLUxhYmVsIGNsYXNzPVwiY29sLTRcIlxyXG4gICAgICAgICAgICAgICAgICBbbGFiZWxWYWx1ZV09XCInYWRtaW5pc3RyYXRpb25fZ2VzdGlvbkVudGl0eUluZm9ybWF0aW9uX2RlZmF1bHRTdGF0dXMnXCI+PC9Uc2ktTGFiZWw+XHJcbiAgICAgICAgICAgICAgICA8VHNpLVRleHQtQm94IGNsYXNzPVwiY29sLThcIiBbaW5wdXROYW1lXT1cIidEZWZhdWx0U3RhdHVzJ1wiXHJcbiAgICAgICAgICAgICAgICAgIFsoaW5wdXRGaWVsZCldPVwiZW50aXR5V2l0aFJlbGF0aW9ucy5lbnRpdHkuZGVmYXVsdFN0YXR1c1wiPlxyXG4gICAgICAgICAgICAgICAgPC9Uc2ktVGV4dC1Cb3g+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZ3JpZFwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTZcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZ3JpZFwiPlxyXG4gICAgICAgICAgICAgICAgPFRzaS1MYWJlbCBjbGFzcz1cImNvbC00XCJcclxuICAgICAgICAgICAgICAgICAgW2xhYmVsVmFsdWVdPVwiJ2FkbWluaXN0cmF0aW9uX2dlc3Rpb25FbnRpdHlJbmZvcm1hdGlvbl9zdGF0dXNFbnVtTmFtZSdcIj48L1RzaS1MYWJlbD5cclxuICAgICAgICAgICAgICAgIDxUc2ktVGV4dC1Cb3ggY2xhc3M9XCJjb2wtOFwiIFtpbnB1dE5hbWVdPVwiJ1N0YXR1c0VudW1OYW1lJ1wiXHJcbiAgICAgICAgICAgICAgICAgIFsoaW5wdXRGaWVsZCldPVwiZW50aXR5V2l0aFJlbGF0aW9ucy5lbnRpdHkuc3RhdHVzRW51bU5hbWVcIj5cclxuICAgICAgICAgICAgICAgIDwvVHNpLVRleHQtQm94PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNlwiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJncmlkXCI+XHJcbiAgICAgICAgICAgICAgICA8VHNpLUxhYmVsIGNsYXNzPVwiY29sLTRcIlxyXG4gICAgICAgICAgICAgICAgICBbbGFiZWxWYWx1ZV09XCInYWRtaW5pc3RyYXRpb25fZ2VzdGlvbkVudGl0eUluZm9ybWF0aW9uX2FkdmFuY2VkU2VhcmNoQ29tcG9uZW50J1wiPjwvVHNpLUxhYmVsPlxyXG4gICAgICAgICAgICAgICAgPFRzaS1TZWFyY2gtQ29tYm8gY2xhc3M9XCJjb2wtOFwiIFtkYXRhc291cmNlXT1cImNvbXBvbmVudHNPcHRpb25zXCJcclxuICAgICAgICAgICAgICAgICAgWyhiaW5kKV09XCJlbnRpdHlXaXRoUmVsYXRpb25zLmVudGl0eS5hZHZhbmNlZFNlYXJjaENvbXBvbmVudFwiIGlkLWZpZWxkPVwia2V5XCIgbGFiZWwtZmllbGQ9XCJ2YWx1ZVwiXHJcbiAgICAgICAgICAgICAgICAgIFtzaG93Q2xlYXJdPVwidHJ1ZVwiIFtkaXNhYmxlZF09XCJpc0RlbGV0ZU1vZGUoKSB8fCBpc0NvbnN1bHRNb2RlKClcIj5cclxuICAgICAgICAgICAgICAgIDwvVHNpLVNlYXJjaC1Db21ibz5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZ3JpZFwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTRcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZ3JpZFwiPlxyXG4gICAgICAgICAgICAgICAgPFRzaS1MYWJlbCBjbGFzcz1cImNvbC02XCJcclxuICAgICAgICAgICAgICAgICAgW2xhYmVsVmFsdWVdPVwiJ2FkbWluaXN0cmF0aW9uX2dlc3Rpb25FbnRpdHlJbmZvcm1hdGlvbl9jYXJkSGVhZGVyUGhvdG9Db2x1bW4nXCI+PC9Uc2ktTGFiZWw+XHJcblxyXG4gICAgICAgICAgICAgICAgPFRzaS1TZWFyY2gtQ29tYm8gY2xhc3M9XCJjb2wtNlwiIFtkYXRhc291cmNlXT1cImtleUNvbHVtbk9wdGlvbnNcIlxyXG4gICAgICAgICAgICAgICAgICBbKGJpbmQpXT1cImVudGl0eVdpdGhSZWxhdGlvbnMuZW50aXR5LmNhcmRIZWFkZXJQaG90b0NvbHVtblwiIGlkLWZpZWxkPVwia2V5XCIgbGFiZWwtZmllbGQ9XCJ2YWx1ZVwiXHJcbiAgICAgICAgICAgICAgICAgIFtzaG93Q2xlYXJdPVwidHJ1ZVwiIFtkaXNhYmxlZF09XCJpc0RlbGV0ZU1vZGUoKSB8fCBpc0NvbnN1bHRNb2RlKClcIj5cclxuICAgICAgICAgICAgICAgIDwvVHNpLVNlYXJjaC1Db21ibz5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTRcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZ3JpZFwiPlxyXG4gICAgICAgICAgICAgICAgPFRzaS1MYWJlbCBjbGFzcz1cImNvbC02XCJcclxuICAgICAgICAgICAgICAgICAgW2xhYmVsVmFsdWVdPVwiJ2FkbWluaXN0cmF0aW9uX2dlc3Rpb25FbnRpdHlJbmZvcm1hdGlvbl9jYXJkVGl0bGVDb2x1bW4nXCI+PC9Uc2ktTGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgPFRzaS1TZWFyY2gtQ29tYm8gY2xhc3M9XCJjb2wtNlwiIFtkYXRhc291cmNlXT1cImtleUNvbHVtbk9wdGlvbnNcIlxyXG4gICAgICAgICAgICAgICAgICBbKGJpbmQpXT1cImVudGl0eVdpdGhSZWxhdGlvbnMuZW50aXR5LmNhcmRUaXRsZUNvbHVtblwiIGlkLWZpZWxkPVwia2V5XCIgbGFiZWwtZmllbGQ9XCJ2YWx1ZVwiXHJcbiAgICAgICAgICAgICAgICAgIFtzaG93Q2xlYXJdPVwidHJ1ZVwiIFtkaXNhYmxlZF09XCJpc0RlbGV0ZU1vZGUoKSB8fCBpc0NvbnN1bHRNb2RlKClcIj5cclxuICAgICAgICAgICAgICAgIDwvVHNpLVNlYXJjaC1Db21ibz5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNFwiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJncmlkXCI+XHJcbiAgICAgICAgICAgICAgICA8VHNpLUxhYmVsIGNsYXNzPVwiY29sLTZcIlxyXG4gICAgICAgICAgICAgICAgICBbbGFiZWxWYWx1ZV09XCInYWRtaW5pc3RyYXRpb25fZ2VzdGlvbkVudGl0eUluZm9ybWF0aW9uX2NhcmRTdWJIZWFkZXJDb2x1bW4nXCI+PC9Uc2ktTGFiZWw+XHJcbiAgICAgICAgICAgICAgICA8VHNpLVNlYXJjaC1Db21ibyBjbGFzcz1cImNvbC02XCIgW2RhdGFzb3VyY2VdPVwia2V5Q29sdW1uT3B0aW9uc1wiXHJcbiAgICAgICAgICAgICAgICAgIFsoYmluZCldPVwiZW50aXR5V2l0aFJlbGF0aW9ucy5lbnRpdHkuY2FyZFN1YkhlYWRlckNvbHVtblwiIGlkLWZpZWxkPVwia2V5XCIgbGFiZWwtZmllbGQ9XCJ2YWx1ZVwiXHJcbiAgICAgICAgICAgICAgICAgIFtzaG93Q2xlYXJdPVwidHJ1ZVwiIFtkaXNhYmxlZF09XCJpc0RlbGV0ZU1vZGUoKSB8fCBpc0NvbnN1bHRNb2RlKClcIj5cclxuICAgICAgICAgICAgICAgIDwvVHNpLVNlYXJjaC1Db21ibz5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJncmlkXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTJcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZ3JpZFwiPlxyXG4gICAgICAgICAgICAgICAgPFRzaS1MYWJlbCBjbGFzcz1cImNvbC0yXCJcclxuICAgICAgICAgICAgICAgICAgW2xhYmVsVmFsdWVdPVwiJ2FkbWluaXN0cmF0aW9uX2dlc3Rpb25FbnRpdHlJbmZvcm1hdGlvbl9jYXJkRGVzY3JpcHRpb25Db2x1bW4nXCI+PC9Uc2ktTGFiZWw+XHJcbiAgICAgICAgICAgICAgICA8VHNpLVNlYXJjaC1Db21ibyBjbGFzcz1cImNvbC02XCIgW2RhdGFzb3VyY2VdPVwia2V5Q29sdW1uT3B0aW9uc1wiXHJcbiAgICAgICAgICAgICAgICAgIFsoYmluZCldPVwiZW50aXR5V2l0aFJlbGF0aW9ucy5lbnRpdHkuY2FyZERlc2NyaXB0aW9uQ29sdW1uXCIgaWQtZmllbGQ9XCJrZXlcIiBsYWJlbC1maWVsZD1cInZhbHVlXCJcclxuICAgICAgICAgICAgICAgICAgW3Nob3dDbGVhcl09XCJ0cnVlXCIgW2Rpc2FibGVkXT1cImlzRGVsZXRlTW9kZSgpIHx8IGlzQ29uc3VsdE1vZGUoKVwiPlxyXG4gICAgICAgICAgICAgICAgPC9Uc2ktU2VhcmNoLUNvbWJvPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2ZpZWxkc2V0PlxyXG4gICAgPC9wLXRhYlBhbmVsPlxyXG4gICAgPHAtdGFiUGFuZWwgW2hlYWRlcl09XCInYWRtaW5pc3RyYXRpb25fdGFiX3JlbGF0aW9ucycgfCBsb2NhbGl6ZVwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiZ3JpZFwiPlxyXG4gICAgICAgIDxUc2ktR2VuZXJpYy1FZGl0YWJsZS1HcmlkIFtjb2x1bW5zXT1cImVudGl0aWVzUmVsYXRpb25zQ29sdW1uc1wiIFtncmlkRGF0YV09XCJlbnRpdHlXaXRoUmVsYXRpb25zLnJlbGF0aW9uc1wiXHJcbiAgICAgICAgICBbcGFyZW50XT1cInRoaXNcIiAoYWRkZWRSb3dFdmVudEVtaXR0ZXIpPVwib25BZGRSZWxhdGlvbigpXCIgW3Nob3dBZGRCdXR0b25dPVwiaXNFZGl0TW9kZSgpXCI+XHJcbiAgICAgICAgPC9Uc2ktR2VuZXJpYy1FZGl0YWJsZS1HcmlkPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvcC10YWJQYW5lbD5cclxuICAgIDxwLXRhYlBhbmVsIFtoZWFkZXJdPVwiJ2FkbWluaXN0cmF0aW9uX3RhYl9wZXJtaXNzaW9ucycgfCBsb2NhbGl6ZVwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiZ3JpZFwiPlxyXG4gICAgICAgIDx0c2ktdmlldy1ncmlkIFtoZWFkZXJdPVwiZW50aXR5V2l0aFJlbGF0aW9ucy5lbnRpdHkuY2xhc3NOYW1lID8/ICcnXCIgY2xhc3M9XCJjb2wtMTIgbWItM1wiXHJcbiAgICAgICAgICBbY29sdW1uc109XCJwZXJtaXNzaW9uc0dyaWRDb2x1bW5zXCIgW2dldERhdGFGcm9tQXBpXT1cImZhbHNlXCIgW2dyaWREYXRhXT1cImVuZHBvaW50SW5mb3NcIj5cclxuICAgICAgICA8L3RzaS12aWV3LWdyaWQ+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9wLXRhYlBhbmVsPlxyXG4gICAgPHAtdGFiUGFuZWwgW2hlYWRlcl09XCInYWRtaW5pc3RyYXRpb25fdGFiX3Byb3BlcnRpZXMnIHwgbG9jYWxpemVcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cImdyaWRcIj5cclxuICAgICAgICA8dHNpLXZpZXctZ3JpZCBbaGVhZGVyXT1cIidhZG1pbmlzdHJhdGlvbl9wcm9wZXJ0aWVzX3RpdGxlJyB8IGxvY2FsaXplXCIgY2xhc3M9XCJjb2wtMTIgbWItM1wiXHJcbiAgICAgICAgICBbY29sdW1uc109XCJwcm9wZXJ0aWVzR3JpZENvbHVtbnNcIiBbZ2V0RGF0YUZyb21BcGldPVwiZmFsc2VcIiBbZ3JpZERhdGFdPVwicHJvcGVydGllc0RhdGFcIj5cclxuICAgICAgICA8L3RzaS12aWV3LWdyaWQ+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9wLXRhYlBhbmVsPlxyXG4gIDwvcC10YWJWaWV3PlxyXG4gIFxyXG4gIDxUc2ktTW9kYWwtRm9vdGVyIFtpc0NvbnN1bHRdPVwiaXNDb25zdWx0TW9kZSgpXCIgW2NhbmNlbERpc2FibGVkXT1cInNhdmluZ1wiIFtzYXZlRGlzYWJsZWRdPVwiaXNTdWJtaXREaXNhYmxlZCgpXCJcclxuICAgIChvbkNhbmNlbENsaWNrKT1cImhpZGUoKVwiPlxyXG4gIDwvVHNpLU1vZGFsLUZvb3Rlcj5cclxuPC90c2ktZm9ybT4iXX0=
|
|
301
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLW9yLWVkaXQtZW50aXR5LWluZm9ybWF0aW9ucy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90c2ktc2hhcmVkLXVpL3NyYy9saWIvdHNpLWNvbXBvbmVudHMvY3JlYXRlLW9yLWVkaXQtZW50aXR5LWluZm9ybWF0aW9ucy9jcmVhdGUtb3ItZWRpdC1lbnRpdHktaW5mb3JtYXRpb25zLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RzaS1zaGFyZWQtdWkvc3JjL2xpYi90c2ktY29tcG9uZW50cy9jcmVhdGUtb3ItZWRpdC1lbnRpdHktaW5mb3JtYXRpb25zL2NyZWF0ZS1vci1lZGl0LWVudGl0eS1pbmZvcm1hdGlvbnMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUxQyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDMUQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDakUsT0FBTyxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFaEQsT0FBTyxFQUE4Qix1QkFBdUIsRUFBRSxvQ0FBb0MsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUd6SCxPQUFPLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSxpRUFBaUUsQ0FBQztBQUNoSCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sTUFBTSxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFRaEMsTUFBTSxPQUFPLHVDQUF3QyxTQUFRLDZCQUE2QjtJQXlDeEYsWUFDUywwQkFBc0QsRUFDckQsNEJBQXlELEVBQ2pELEdBQXFCLEVBQ3JCLE1BQTJCLEVBQ25DLG9CQUE0QyxFQUM1QyxvQkFBNEMsRUFDNUMsbUJBQXVDO1FBQy9DLEtBQUssQ0FBQyxHQUFHLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFQWiwrQkFBMEIsR0FBMUIsMEJBQTBCLENBQTRCO1FBQ3JELGlDQUE0QixHQUE1Qiw0QkFBNEIsQ0FBNkI7UUFDakQsUUFBRyxHQUFILEdBQUcsQ0FBa0I7UUFDckIsV0FBTSxHQUFOLE1BQU0sQ0FBcUI7UUFDbkMseUJBQW9CLEdBQXBCLG9CQUFvQixDQUF3QjtRQUM1Qyx5QkFBb0IsR0FBcEIsb0JBQW9CLENBQXdCO1FBQzVDLHdCQUFtQixHQUFuQixtQkFBbUIsQ0FBb0I7UUEvQ2pELHdCQUFtQixHQUE0QixJQUFJLHVCQUF1QixFQUFFLENBQUM7UUFDN0UscUJBQWdCLEdBQStCLEVBQUUsQ0FBQztRQUNsRCxrQkFBYSxHQUFvQixFQUFFLENBQUM7UUFDcEMsc0JBQWlCLEdBQStCLGtCQUFrQixDQUFDLHdCQUF3QixFQUFFLENBQUM7UUFHOUYscUJBQWdCLEdBQWlDLEVBQUUsQ0FBQztRQUNwRCxrQkFBYSxHQUFpQyxFQUFFLENBQUM7UUFDakQsbUJBQWMsR0FBaUMsRUFBRSxDQUFDO1FBRWxELHlCQUFvQixHQUFXLEVBQUUsQ0FBQztRQUNsQyxvQkFBZSxHQUFXLENBQUMsQ0FBQztRQUM1Qix1QkFBa0IsR0FBVyxFQUFFLENBQUM7UUFFaEMsdUJBQWtCLEdBQXdDLElBQUksR0FBRyxFQUFFLENBQUM7UUFDcEUsb0JBQWUsR0FBd0MsSUFBSSxHQUFHLEVBQUUsQ0FBQztRQUNqRSxxQkFBZ0IsR0FBd0MsSUFBSSxHQUFHLEVBQUUsQ0FBQztRQUVsRSwwQkFBcUIsR0FBc0I7WUFDekMsRUFBRSxNQUFNLEVBQUUsZ0NBQWdDLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRTtZQUMzRCxFQUFFLE1BQU0sRUFBRSxnQ0FBZ0MsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFO1lBQzNELEVBQUUsTUFBTSxFQUFFLHNDQUFzQyxFQUFFLEtBQUssRUFBRSxZQUFZLEVBQUUsSUFBSSxFQUFFLFVBQVUsQ0FBQyxRQUFRLEVBQUU7WUFDbEcsRUFBRSxNQUFNLEVBQUUscUNBQXFDLEVBQUUsS0FBSyxFQUFFLFdBQVcsRUFBRTtTQUN0RSxDQUFDO1FBRUYsMkJBQXNCLEdBQXNCO1lBQzFDLEVBQUUsTUFBTSxFQUFFLHVDQUF1QyxFQUFFLEtBQUssRUFBRSxZQUFZLEVBQUU7WUFDeEUsRUFBRSxNQUFNLEVBQUUsa0NBQWtDLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRTtZQUM5RCxFQUFFLE1BQU0sRUFBRSx5Q0FBeUMsRUFBRSxLQUFLLEVBQUUsY0FBYyxFQUFFO1lBQzVFLEVBQUUsTUFBTSxFQUFFLHVDQUF1QyxFQUFFLEtBQUssRUFBRSxZQUFZLEVBQUU7U0FDekUsQ0FBQztRQUdGLDZCQUF3QixHQUFzQjtZQUM1QyxFQUFFLE1BQU0sRUFBRSwyQ0FBMkMsRUFBRSxLQUFLLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUU7WUFDNUYsRUFBRSxNQUFNLEVBQUUseUNBQXlDLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRTtZQUN4RSxFQUFFLE1BQU0sRUFBRSwyQ0FBMkMsRUFBRSxLQUFLLEVBQUUsWUFBWSxFQUFFLElBQUksRUFBRSxVQUFVLENBQUMsUUFBUSxFQUFFO1lBQ3ZHLEVBQUUsTUFBTSxFQUFFLGlEQUFpRCxFQUFFLEtBQUssRUFBRSxrQkFBa0IsRUFBRSxJQUFJLEVBQUUsVUFBVSxDQUFDLFFBQVEsRUFBRTtZQUNuSCxFQUFFLE1BQU0sRUFBRSxnREFBZ0QsRUFBRSxLQUFLLEVBQUUsaUJBQWlCLEVBQUU7U0FDdkYsQ0FBQTtJQVVELENBQUM7SUFFRCxvQ0FBb0MsQ0FBQyxTQUFrQjtRQUNyRCxJQUFJLFNBQVMsRUFBRSxDQUFDO1lBQ2QsSUFBSSxDQUFDLDBCQUEwQixDQUFDLG9DQUFvQyxDQUFDLFNBQVMsQ0FBQztpQkFDNUUsU0FBUyxDQUFDLE9BQU8sQ0FBQyxFQUFFO2dCQUNuQixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsT0FBTyxDQUFDO2dCQUNoQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxVQUFVLEdBQUcsU0FBUyxDQUFDLENBQUM7WUFDMUUsQ0FBQyxDQUFDLENBQUM7UUFDUCxDQUFDO0lBQ0gsQ0FBQztJQUVELHlCQUF5QjtRQUN2QixJQUFJLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQztZQUNaLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDO2dCQUM1RCxJQUFJLEVBQUUsQ0FBQyxjQUFjLEVBQUUsRUFBRTtvQkFDdkIsSUFBSSxjQUFjLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsSUFBSSxjQUFjLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO3dCQUNqRixJQUFJLENBQUMsYUFBYSxHQUFHLGNBQWMsQ0FBQztvQkFDdEMsQ0FBQztnQkFDSCxDQUFDO2dCQUNELEtBQUssRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFO29CQUNmLE9BQU8sQ0FBQyxLQUFLLENBQUMsNkJBQTZCLEVBQUUsS0FBSyxDQUFDLENBQUM7b0JBQ3BELElBQUksQ0FBQyw0QkFBNEIsQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDNUQsQ0FBQzthQUNGLENBQUMsQ0FBQztRQUNMLENBQUM7SUFDSCxDQUFDO0lBRVEsUUFBUTtRQUNmLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNqQixJQUFJLENBQUMsb0NBQW9DLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ25ELElBQUksQ0FBQyx5QkFBeUIsRUFBRSxDQUFDO1FBQ2pDLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1FBQ3pCLElBQ0UsQ0FBQyxJQUFJLENBQUMsSUFBSSxLQUFLLEtBQUssQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxLQUFLLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssS0FBSyxDQUFDLE9BQU8sQ0FBQztZQUN2RixJQUFJLENBQUMsRUFBRSxLQUFLLFNBQVM7WUFDckIsSUFBSSxDQUFDLEVBQUUsS0FBSyxJQUFJLEVBQ2hCLENBQUM7WUFDRCxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztZQUN0QixJQUFJLENBQUMsMEJBQTBCLENBQUMsaUNBQWlDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQztnQkFDbkYsSUFBSSxFQUFFLENBQUMsSUFBSSxFQUFFLEVBQUU7b0JBQ2IsSUFBSSxDQUFDLG1CQUFtQixHQUFHLElBQUksQ0FBQztnQkFDbEMsQ0FBQztnQkFDRCxLQUFLLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRTtvQkFDZixPQUFPLENBQUMsS0FBSyxDQUFDLG1DQUFtQyxFQUFFLEtBQUssQ0FBQyxDQUFDO29CQUMxRCxJQUFJLENBQUMsNEJBQTRCLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQzVELENBQUM7Z0JBQ0QsUUFBUSxFQUFFLEdBQUcsRUFBRTtvQkFDYixJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztnQkFDekIsQ0FBQzthQUNGLENBQUMsQ0FBQztRQUNMLENBQUM7SUFDSCxDQUFDO0lBRVEsSUFBSTtRQUNYLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQTtRQUNaLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO1FBQ3BCLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO1FBRXRCLElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDL0IsSUFBSSxDQUFDLDBCQUEwQixDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxTQUFTLENBQUM7Z0JBQ3pFLElBQUksRUFBRSxHQUFHLEVBQUU7b0JBQ1QsSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQztvQkFDM0UsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztvQkFDaEIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQztnQkFDckIsQ0FBQztnQkFDRCxLQUFLLEVBQUUsQ0FBQyxRQUEyQixFQUFFLEVBQUU7b0JBQ3JDLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO29CQUNwQixJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztvQkFDdkIsSUFBSSxDQUFDLDRCQUE0QixDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUMvRCxDQUFDO2dCQUNELFFBQVEsRUFBRSxHQUFHLEVBQUU7b0JBQ2IsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7Z0JBQ3pCLENBQUM7YUFDRixDQUFDLENBQUM7UUFDTCxDQUFDO2FBRUksSUFDSCxJQUFJLENBQUMsSUFBSSxLQUFLLEtBQUssQ0FBQyxJQUFJO2VBQ3JCLElBQUksQ0FBQyxtQkFBbUI7ZUFDeEIsSUFBSSxDQUFDLG1CQUFtQixDQUFDLE1BQU0sQ0FBQyxTQUFTLEVBQzVDLENBQUM7WUFDRCxJQUFJLG9DQUFvQyxHQUFHLElBQUksb0NBQW9DLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxFQUFFLEVBQUUsSUFBSSxDQUFDLG1CQUFtQixDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsbUJBQW1CLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDeEssSUFBSSxDQUFDLDBCQUEwQixDQUFDLE1BQU0sQ0FBQyxvQ0FBb0MsQ0FBQyxDQUFDLFNBQVMsQ0FBQztnQkFDckYsSUFBSSxFQUFFLEdBQUcsRUFBRTtvQkFDVCxJQUFJLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsZ0JBQWdCLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxDQUFDO29CQUM3RSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO29CQUNoQixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDO2dCQUNyQixDQUFDO2dCQUNELEtBQUssRUFBRSxDQUFDLFFBQTJCLEVBQUUsRUFBRTtvQkFDckMsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7b0JBQ3BCLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO29CQUN2QixJQUFJLENBQUMsNEJBQTRCLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLENBQUM7Z0JBQy9ELENBQUM7Z0JBQ0QsUUFBUSxFQUFFLEdBQUcsRUFBRTtvQkFDYixJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztnQkFDekIsQ0FBQzthQUNGLENBQUMsQ0FBQztRQUNMLENBQUM7YUFFSSxJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ3BDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxPQUFPLENBQy9CLGdCQUFnQixDQUFDLGFBQWEsRUFDOUIsU0FBUyxFQUNULENBQUMsTUFBZSxFQUFFLEVBQUU7Z0JBQ2xCLElBQ0UsTUFBTTt1QkFDSCxJQUFJLENBQUMsbUJBQW1CLENBQUMsTUFBTSxDQUFDLFNBQVMsRUFDNUMsQ0FBQztvQkFDRCxJQUFJLENBQUMsMEJBQTBCLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDO3dCQUM5RCxJQUFJLEVBQUUsR0FBRyxFQUFFOzRCQUNULElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLENBQUM7NEJBQ2hGLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7NEJBQ2hCLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUM7d0JBQ3JCLENBQUM7d0JBQ0QsS0FBSyxFQUFFLENBQUMsUUFBMkIsRUFBRSxFQUFFOzRCQUNyQyxJQUFJLENBQUMsNEJBQTRCLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLENBQUM7NEJBQzdELElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDOzRCQUNwQixJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQzt3QkFDekIsQ0FBQzt3QkFDRCxRQUFRLEVBQUUsR0FBRyxFQUFFOzRCQUNiLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO3dCQUN6QixDQUFDO3FCQUNGLENBQUMsQ0FBQztnQkFDTCxDQUFDO1lBQ0gsQ0FBQyxDQUNGLENBQUM7UUFDSixDQUFDO0lBQ0gsQ0FBQztJQUVELGlCQUFpQjtRQUNmLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO1FBQ3RCLElBQUksSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQ1osUUFBUSxDQUFDO2dCQUNQLFlBQVksRUFBRSxJQUFJLENBQUMsMEJBQTBCLENBQUMsMEJBQTBCLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztnQkFDakYsU0FBUyxFQUFFLElBQUksQ0FBQywwQkFBMEIsQ0FBQyw2QkFBNkIsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO2dCQUNqRixVQUFVLEVBQUUsSUFBSSxDQUFDLDBCQUEwQixDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO2FBQ25FLENBQUMsQ0FBQyxTQUFTLENBQUM7Z0JBQ1gsSUFBSSxFQUFFLENBQUMsRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxFQUFFLEVBQUU7b0JBQ2hELElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxZQUFZLElBQUksRUFBRSxDQUFDO29CQUMzQyxJQUFJLENBQUMsYUFBYSxHQUFHLFNBQVMsSUFBSSxFQUFFLENBQUM7b0JBQ3JDLElBQUksQ0FBQyxjQUFjLEdBQUcsVUFBVSxJQUFJLEVBQUUsQ0FBQztvQkFDdkMsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7Z0JBQzVCLENBQUM7Z0JBQ0QsUUFBUSxFQUFFLEdBQUcsRUFBRTtvQkFDYixJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztnQkFDekIsQ0FBQztnQkFDRCxLQUFLLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRTtvQkFDZixJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztvQkFDdkIsT0FBTyxDQUFDLEtBQUssQ0FBQyxpQ0FBaUMsRUFBRSxLQUFLLENBQUMsQ0FBQztvQkFDeEQsSUFBSSxDQUFDLDRCQUE0QixDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUM1RCxDQUFDO2FBQ0YsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztJQUNILENBQUM7SUFFRCxhQUFhO1FBQ1gsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxNQUFNLENBQUMsU0FBUyxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQ2hILENBQUM7SUFHTyxhQUFhLENBQUMsSUFBa0M7UUFDdEQsSUFBSSxDQUFDLElBQUksQ0FBQyxvQkFBb0I7WUFBRSxPQUFPLElBQUksQ0FBQztRQUM1QyxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDdkQsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQ3ZCLEdBQUcsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQztZQUN2QyxHQUFHLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FDeEMsQ0FBQztJQUNKLENBQUM7SUFFRCxJQUFJLG9CQUFvQjtRQUN0QixPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7SUFDbkQsQ0FBQztJQUVELElBQUksaUJBQWlCO1FBQ25CLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDaEQsQ0FBQztJQUVELElBQUksa0JBQWtCO1FBQ3BCLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7SUFDakQsQ0FBQztJQUVELElBQUksc0JBQXNCO1FBQ3hCLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FDYixJQUFJLENBQUMsb0JBQW9CLENBQUMsTUFBTSxFQUNoQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsTUFBTSxFQUM3QixJQUFJLENBQUMsa0JBQWtCLENBQUMsTUFBTSxDQUMvQixDQUFDO0lBQ0osQ0FBQztJQUVELElBQUksaUJBQWlCO1FBQ25CLE9BQU8sSUFBSSxDQUFDLG9CQUFvQixDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUM7SUFDL0csQ0FBQztJQUVELElBQUksY0FBYztRQUNoQixPQUFPLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRSxJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO0lBQzVHLENBQUM7SUFFRCxJQUFJLGVBQWU7UUFDakIsT0FBTyxJQUFJLENBQUMsa0JBQWtCLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUUsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQztJQUM3RyxDQUFDO0lBRUQsc0JBQXNCLENBQUMsS0FBVTtRQUMvQixJQUFJLENBQUMsZUFBZSxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUM7UUFDbkMsSUFBSSxDQUFDLGtCQUFrQixHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUM7SUFDdkMsQ0FBQztJQUVELGtCQUFrQjtRQUNoQixJQUFJLENBQUMsZUFBZSxHQUFHLENBQUMsQ0FBQztJQUMzQixDQUFDO0lBRUQsa0JBQWtCO1FBQ2hCLE1BQU0sUUFBUSxHQUFHLElBQUksR0FBRyxFQUFzQyxDQUFDO1FBQy9ELE1BQU0sS0FBSyxHQUFHLElBQUksR0FBRyxFQUFzQyxDQUFDO1FBQzVELE1BQU0sTUFBTSxHQUFHLElBQUksR0FBRyxFQUFzQyxDQUFDO1FBRTdELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUNoRixJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQzFFLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFFNUUsSUFBSSxDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQztRQUMvRixJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7UUFDNUYsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDL0YsQ0FBQztJQUVPLHVCQUF1QixDQUM3QixVQUF3QyxFQUN4QyxTQUFvRDtRQUVwRCxNQUFNLE1BQU0sR0FBRyxJQUFJLEdBQUcsRUFBa0MsQ0FBQztRQUV6RCxLQUFLLE1BQU0sR0FBRyxJQUFJLFVBQVUsRUFBRSxDQUFDO1lBQzdCLE1BQU0sR0FBRyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDbkMsTUFBTSxPQUFPLEdBQTJCLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLFVBQVUsRUFBRSxFQUFFLEVBQUUsU0FBUyxFQUFFLEVBQUUsRUFBRSxDQUFDO1lBRTlGLEtBQUssTUFBTSxRQUFRLElBQUksU0FBUyxFQUFFLENBQUM7Z0JBQ2pDLE1BQU0sUUFBUSxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBRW5DLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztvQkFDZCxPQUFPLENBQUMsTUFBTSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7b0JBQ3ZDLE9BQU8sQ0FBQyxNQUFNLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztvQkFDdkMsT0FBTyxDQUFDLFlBQVksQ0FBQyxHQUFHLG9CQUFvQixDQUFDO29CQUM3QyxPQUFPLENBQUMsV0FBVyxDQUFDLEdBQUcsb0JBQW9CLENBQUM7b0JBQzVDLE1BQU07Z0JBQ1IsQ0FBQztnQkFFRCxJQUFJLFFBQVEsQ0FBQyxJQUFJLEtBQUssR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO29CQUNuRCxPQUFPLENBQUMsTUFBTSxDQUFDLEdBQUcsMEJBQTBCLENBQUM7Z0JBQy9DLENBQUM7Z0JBRUQsSUFBSSxRQUFRLENBQUMsU0FBUyxLQUFLLEdBQUcsQ0FBQyxTQUFTLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQztvQkFDbEUsT0FBTyxDQUFDLFdBQVcsQ0FBQyxHQUFHLDRCQUE0QixDQUFDO2dCQUN0RCxDQUFDO1lBQ0gsQ0FBQztZQUVELE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQzNCLENBQUM7UUFFRCxPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDO0lBRUQsa0JBQWtCLENBQUMsTUFBOEIsRUFBRSxHQUErQixFQUFFLEtBQWE7UUFDL0YsTUFBTSxHQUFHLEdBQUcsTUFBTSxLQUFLLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGtCQUFrQjtZQUM5QyxDQUFDLENBQUMsTUFBTSxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGVBQWU7Z0JBQ3hDLENBQUMsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUM7UUFDbEMsTUFBTSxVQUFVLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7UUFDbkQsSUFBSSxDQUFDLFVBQVU7WUFBRSxPQUFPLEVBQUUsQ0FBQztRQUMzQixPQUFPLFVBQVUsQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDakMsQ0FBQzsrR0E5VFUsdUNBQXVDO21HQUF2Qyx1Q0FBdUMsaUVBRnZDLENBQUMsR0FBRyxZQUFZLENBQUMsaURDbkI5Qiw2Z2lCQXlVVzs7NEZEcFRFLHVDQUF1QztrQkFObkQsU0FBUzsrQkFDRSx3Q0FBd0MsYUFHdkMsQ0FBQyxHQUFHLFlBQVksQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEtleVZhbHVlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgSHR0cEVycm9yUmVzcG9uc2UgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7IENvbXBvbmVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBEeW5hbWljRGlhbG9nQ29uZmlnLCBEeW5hbWljRGlhbG9nUmVmIH0gZnJvbSAncHJpbWVuZy9keW5hbWljZGlhbG9nJztcclxuaW1wb3J0IHsgYXBwUHJvdmlkZXJzIH0gZnJvbSAnLi4vLi4vY29uc3RzL2FwcC1wcm92aWRlcnMnO1xyXG5pbXBvcnQgeyBMb2NhbGl6YXRpb25LZXlzIH0gZnJvbSAnLi4vLi4vY29uc3RzL2xvY2FsaXphdGlvbi1rZXknO1xyXG5pbXBvcnQgeyBJbnB1dFR5cGVzLCBNb2RlcyB9IGZyb20gJy4uLy4uL2VudW1zJztcclxuaW1wb3J0IHsgR3JpZENvbHVtbiB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMnO1xyXG5pbXBvcnQgeyBFbnRpdHlDb2x1bW5EZXRhaWxSZXNwb25zZSwgRW50aXR5SW5mb1dpdGhSZWxhdGlvbnMsIFVwZGF0ZUVudGl0eUluZm9XaXRoUmVsYXRpb25zUmVxdWVzdCB9IGZyb20gJy4uLy4uL21vZGVscyc7XHJcbmltcG9ydCB7IEVuZHBvaW50SW5mb3MgfSBmcm9tICcuLi8uLi9tb2RlbHMvYXBwbGljYXRpb24vY29uZmlndXJhdGlvbi9lbmRwb2ludC1pbmZvcyc7XHJcbmltcG9ydCB7IEFwaUV4cGxvcmVyU2VydmljZSwgRW50aXR5Q29uZmlndXJhdGlvblNlcnZpY2UsIEVycm9yUmVzcG9uc2VNYW5hZ2VyU2VydmljZSwgVHNpQ29uZmlybWF0aW9uU2VydmljZSwgVHNpTm90aWZpY2F0aW9uU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzJztcclxuaW1wb3J0IHsgVHNpRm9ybUNvbXBvbmVudEJhc2VDb21wb25lbnQgfSBmcm9tICcuLi8uLi90c2ktYmFzZS9jb21wb25lbnRzL3RzaS1mb3JtLWJhc2UvdHNpLWZvcm0tYmFzZS5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBUeXBlUmVnaXN0cnlIZWxwZXIgfSBmcm9tICcuLi8uLi90c2ktaGVscGVycyc7XHJcbmltcG9ydCB7IGZvcmtKb2luIH0gZnJvbSAncnhqcyc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2FwcC1jcmVhdGUtb3ItZWRpdC1lbnRpdHktaW5mb3JtYXRpb25zJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vY3JlYXRlLW9yLWVkaXQtZW50aXR5LWluZm9ybWF0aW9ucy5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmw6ICcuL2NyZWF0ZS1vci1lZGl0LWVudGl0eS1pbmZvcm1hdGlvbnMuY29tcG9uZW50LnNjc3MnLFxyXG4gIHByb3ZpZGVyczogWy4uLmFwcFByb3ZpZGVyc11cclxufSlcclxuZXhwb3J0IGNsYXNzIENyZWF0ZU9yRWRpdEVudGl0eUluZm9ybWF0aW9uc0NvbXBvbmVudCBleHRlbmRzIFRzaUZvcm1Db21wb25lbnRCYXNlQ29tcG9uZW50IHtcclxuICBlbnRpdHlXaXRoUmVsYXRpb25zOiBFbnRpdHlJbmZvV2l0aFJlbGF0aW9ucyA9IG5ldyBFbnRpdHlJbmZvV2l0aFJlbGF0aW9ucygpO1xyXG4gIGtleUNvbHVtbk9wdGlvbnM6IEtleVZhbHVlPHN0cmluZywgc3RyaW5nPltdID0gW107XHJcbiAgZW5kcG9pbnRJbmZvczogRW5kcG9pbnRJbmZvc1tdID0gW107XHJcbiAgY29tcG9uZW50c09wdGlvbnM6IEtleVZhbHVlPHN0cmluZywgc3RyaW5nPltdID0gVHlwZVJlZ2lzdHJ5SGVscGVyLmdldEJ1c2luZXNzQ29tcG9uZW50TGlzdCgpO1xyXG5cclxuICB1aWQ/OiBzdHJpbmc7XHJcbiAgbW9kZWxDb2x1bW5zRGF0YTogRW50aXR5Q29sdW1uRGV0YWlsUmVzcG9uc2VbXSA9IFtdO1xyXG4gIGRiQ29sdW1uc0RhdGE6IEVudGl0eUNvbHVtbkRldGFpbFJlc3BvbnNlW10gPSBbXTtcclxuICBzcWxDb2x1bW5zRGF0YTogRW50aXR5Q29sdW1uRGV0YWlsUmVzcG9uc2VbXSA9IFtdO1xyXG5cclxuICBwcm9wZXJ0aWVzU2VhcmNoVGV4dDogc3RyaW5nID0gJyc7XHJcbiAgcHJvcGVydGllc0ZpcnN0OiBudW1iZXIgPSAwO1xyXG4gIHByb3BlcnRpZXNQYWdlU2l6ZTogbnVtYmVyID0gMTA7XHJcblxyXG4gIG1vZGVsQ29tcGFyaXNvbk1hcDogTWFwPHN0cmluZywgUmVjb3JkPHN0cmluZywgc3RyaW5nPj4gPSBuZXcgTWFwKCk7XHJcbiAgZGJDb21wYXJpc29uTWFwOiBNYXA8c3RyaW5nLCBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+PiA9IG5ldyBNYXAoKTtcclxuICBzcWxDb21wYXJpc29uTWFwOiBNYXA8c3RyaW5nLCBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+PiA9IG5ldyBNYXAoKTtcclxuXHJcbiAgcHJvcGVydGllc0dyaWRDb2x1bW5zOiBBcnJheTxHcmlkQ29sdW1uPiA9IFtcclxuICAgIHsgaGVhZGVyOiAnYWRtaW5pc3RyYXRpb25fcHJvcGVydGllc19uYW1lJywgZmllbGQ6ICduYW1lJyB9LFxyXG4gICAgeyBoZWFkZXI6ICdhZG1pbmlzdHJhdGlvbl9wcm9wZXJ0aWVzX3R5cGUnLCBmaWVsZDogJ3R5cGUnIH0sXHJcbiAgICB7IGhlYWRlcjogJ2FkbWluaXN0cmF0aW9uX3Byb3BlcnRpZXNfaXNOdWxsYWJsZScsIGZpZWxkOiAnaXNOdWxsYWJsZScsIHR5cGU6IElucHV0VHlwZXMuQ0hFQ0tCT1ggfSxcclxuICAgIHsgaGVhZGVyOiAnYWRtaW5pc3RyYXRpb25fcHJvcGVydGllc19tYXhMZW5ndGgnLCBmaWVsZDogJ21heExlbmd0aCcgfVxyXG4gIF07XHJcblxyXG4gIHBlcm1pc3Npb25zR3JpZENvbHVtbnM6IEFycmF5PEdyaWRDb2x1bW4+ID0gW1xyXG4gICAgeyBoZWFkZXI6ICdhZG1pbmlzdHJhdGlvbl9wZXJtaXNzaW9uc19odHRwTWV0aG9kJywgZmllbGQ6ICdodHRwTWV0aG9kJyB9LFxyXG4gICAgeyBoZWFkZXI6ICdhZG1pbmlzdHJhdGlvbl9wZXJtaXNzaW9uc19yb3V0ZScsIGZpZWxkOiAncm91dGUnIH0sXHJcbiAgICB7IGhlYWRlcjogJ2FkbWluaXN0cmF0aW9uX3Blcm1pc3Npb25zX2FjY2Vzc1JpZ2h0cycsIGZpZWxkOiAnYWNjZXNzUmlnaHRzJyB9LFxyXG4gICAgeyBoZWFkZXI6ICdhZG1pbmlzdHJhdGlvbl9wZXJtaXNzaW9uc19tZXRob2ROYW1lJywgZmllbGQ6ICdtZXRob2ROYW1lJyB9XHJcbiAgXTtcclxuXHJcblxyXG4gIGVudGl0aWVzUmVsYXRpb25zQ29sdW1uczogQXJyYXk8R3JpZENvbHVtbj4gPSBbXHJcbiAgICB7IGhlYWRlcjogJ2FkbWluaXN0cmF0aW9uX2VudGl0eVJlbGF0aW9uc19lbnRpdHlGcm9tJywgZmllbGQ6ICdlbnRpdHlGcm9tJywgZGlzYWJsZWQ6IHRydWUgfSxcclxuICAgIHsgaGVhZGVyOiAnYWRtaW5pc3RyYXRpb25fZW50aXR5UmVsYXRpb25zX2VudGl0eVRvJywgZmllbGQ6ICdlbnRpdHlUbycgfSxcclxuICAgIHsgaGVhZGVyOiAnYWRtaW5pc3RyYXRpb25fZW50aXR5UmVsYXRpb25zX2xvZ0Nhc2NhZGUnLCBmaWVsZDogJ2xvZ0Nhc2NhZGUnLCB0eXBlOiBJbnB1dFR5cGVzLkNIRUNLQk9YIH0sXHJcbiAgICB7IGhlYWRlcjogJ2FkbWluaXN0cmF0aW9uX2VudGl0eVJlbGF0aW9uc19kdXBsaWNhdGVDYXNjYWRlJywgZmllbGQ6ICdkdXBsaWNhdGVDYXNjYWRlJywgdHlwZTogSW5wdXRUeXBlcy5DSEVDS0JPWCB9LFxyXG4gICAgeyBoZWFkZXI6ICdhZG1pbmlzdHJhdGlvbl9lbnRpdHlSZWxhdGlvbnNfZGVsZXRlQmVoYXZpb3VyJywgZmllbGQ6ICdkZWxldGVCZWhhdmlvdXInIH1cclxuICBdXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwdWJsaWMgX2VudGl0eUluZm9ybWF0aW9uc1NlcnZpY2U6IEVudGl0eUNvbmZpZ3VyYXRpb25TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfZXJyb3JSZXNwb25zZU1hbmFnZXJTZXJ2aWNlOiBFcnJvclJlc3BvbnNlTWFuYWdlclNlcnZpY2UsXHJcbiAgICBwdWJsaWMgb3ZlcnJpZGUgcmVmOiBEeW5hbWljRGlhbG9nUmVmLFxyXG4gICAgcHVibGljIG92ZXJyaWRlIGNvbmZpZzogRHluYW1pY0RpYWxvZ0NvbmZpZyxcclxuICAgIHByaXZhdGUgX25vdGlmaWNhdGlvblNlcnZpY2U6IFRzaU5vdGlmaWNhdGlvblNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9jb25maXJtYXRpb25TZXJ2aWNlOiBUc2lDb25maXJtYXRpb25TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfYXBpRXhwbG9yZXJTZXJ2aWNlOiBBcGlFeHBsb3JlclNlcnZpY2UpIHtcclxuICAgIHN1cGVyKHJlZiwgY29uZmlnKTtcclxuICB9XHJcblxyXG4gIGdldENvbG9ubmVzQnlDbGFzc05hbWVBc0tleVZhbHVlUGFpcihjbGFzc05hbWU/OiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGlmIChjbGFzc05hbWUpIHtcclxuICAgICAgdGhpcy5fZW50aXR5SW5mb3JtYXRpb25zU2VydmljZS5nZXRDb2xvbm5lc0J5Q2xhc3NOYW1lQXNLZXlWYWx1ZVBhaXIoY2xhc3NOYW1lKVxyXG4gICAgICAgIC5zdWJzY3JpYmUoY29sdW1ucyA9PiB7XHJcbiAgICAgICAgICB0aGlzLmtleUNvbHVtbk9wdGlvbnMgPSBjb2x1bW5zO1xyXG4gICAgICAgICAgdGhpcy5lbnRpdHlXaXRoUmVsYXRpb25zLnJlbGF0aW9ucy5tYXAoZXIgPT4gZXIuZW50aXR5RnJvbSA9IGNsYXNzTmFtZSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRQZXJtaXNzaW9uc0J5Q2xhc3NOYW1lKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuaWQpIHtcclxuICAgICAgdGhpcy5fYXBpRXhwbG9yZXJTZXJ2aWNlLmdldEVuZHBvaW50c0luZm9zKHRoaXMuaWQpLnN1YnNjcmliZSh7XHJcbiAgICAgICAgbmV4dDogKGVuZHBvaW50c0luZm9zKSA9PiB7XHJcbiAgICAgICAgICBpZiAoZW5kcG9pbnRzSW5mb3MgJiYgQXJyYXkuaXNBcnJheShlbmRwb2ludHNJbmZvcykgJiYgZW5kcG9pbnRzSW5mb3MubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICB0aGlzLmVuZHBvaW50SW5mb3MgPSBlbmRwb2ludHNJbmZvcztcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIGVycm9yOiAoZXJyb3IpID0+IHtcclxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGZldGNoaW5nIHBlcm1pc3Npb25zOicsIGVycm9yKTtcclxuICAgICAgICAgIHRoaXMuX2Vycm9yUmVzcG9uc2VNYW5hZ2VyU2VydmljZS5zaG93RXJyb3JNZXNzYWdlKGVycm9yKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb3ZlcnJpZGUgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICBzdXBlci5uZ09uSW5pdCgpO1xyXG4gICAgdGhpcy5nZXRDb2xvbm5lc0J5Q2xhc3NOYW1lQXNLZXlWYWx1ZVBhaXIodGhpcy5pZCk7XHJcbiAgICB0aGlzLmdldFBlcm1pc3Npb25zQnlDbGFzc05hbWUoKTtcclxuICAgIHRoaXMuZ2V0UHJvcGVydGllc0RhdGEoKTtcclxuICAgIGlmIChcclxuICAgICAgKHRoaXMubW9kZSA9PT0gTW9kZXMuZWRpdCB8fCB0aGlzLm1vZGUgPT09IE1vZGVzLmRlbGV0ZSB8fCB0aGlzLm1vZGUgPT09IE1vZGVzLmNvbnN1bHQpICYmXHJcbiAgICAgIHRoaXMuaWQgIT09IHVuZGVmaW5lZCAmJlxyXG4gICAgICB0aGlzLmlkICE9PSBudWxsXHJcbiAgICApIHtcclxuICAgICAgdGhpcy5pc2xvYWRpbmcgPSB0cnVlO1xyXG4gICAgICB0aGlzLl9lbnRpdHlJbmZvcm1hdGlvbnNTZXJ2aWNlLmdldEVudGl0eUluZm9ybWF0aW9uc0FuZFJlbGF0aW9ucyh0aGlzLmlkKS5zdWJzY3JpYmUoe1xyXG4gICAgICAgIG5leHQ6IChkYXRhKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmVudGl0eVdpdGhSZWxhdGlvbnMgPSBkYXRhO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZXJyb3I6IChlcnJvcikgPT4ge1xyXG4gICAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgZmV0Y2hpbmcgZW50aXR5SW5mb3JtYXRpb246JywgZXJyb3IpO1xyXG4gICAgICAgICAgdGhpcy5fZXJyb3JSZXNwb25zZU1hbmFnZXJTZXJ2aWNlLnNob3dFcnJvck1lc3NhZ2UoZXJyb3IpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgY29tcGxldGU6ICgpID0+IHtcclxuICAgICAgICAgIHRoaXMuaXNsb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG92ZXJyaWRlIHNhdmUoKTogdm9pZCB7XHJcbiAgICBzdXBlci5zYXZlKClcclxuICAgIHRoaXMuc2F2aW5nID0gZmFsc2U7XHJcbiAgICB0aGlzLmlzbG9hZGluZyA9IHRydWU7XHJcblxyXG4gICAgaWYgKHRoaXMubW9kZSA9PT0gTW9kZXMuY3JlYXRlKSB7XHJcbiAgICAgIHRoaXMuX2VudGl0eUluZm9ybWF0aW9uc1NlcnZpY2UuY3JlYXRlKHRoaXMuZW50aXR5V2l0aFJlbGF0aW9ucykuc3Vic2NyaWJlKHtcclxuICAgICAgICBuZXh0OiAoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLl9ub3RpZmljYXRpb25TZXJ2aWNlLmluZm8odGhpcy5sKExvY2FsaXphdGlvbktleXMuc2F2ZWRTdWNjZXNzZnVsbHkpKTtcclxuICAgICAgICAgIHRoaXMuaGlkZSh0cnVlKTtcclxuICAgICAgICAgIHRoaXMub25TYXZlLmVtaXQoKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGVycm9yOiAocmVzcG9uc2U6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnNhdmluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy5pc2xvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMuX2Vycm9yUmVzcG9uc2VNYW5hZ2VyU2VydmljZS5zaG93RXJyb3JNZXNzYWdlKHJlc3BvbnNlKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGNvbXBsZXRlOiAoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmlzbG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoXHJcbiAgICAgIHRoaXMubW9kZSA9PT0gTW9kZXMuZWRpdFxyXG4gICAgICAmJiB0aGlzLmVudGl0eVdpdGhSZWxhdGlvbnNcclxuICAgICAgJiYgdGhpcy5lbnRpdHlXaXRoUmVsYXRpb25zLmVudGl0eS5jbGFzc05hbWVcclxuICAgICkge1xyXG4gICAgICBsZXQgdXBkYXRlRW50aXR5SW5mb1dpdGhSZWxhdGlvbnNSZXF1ZXN0ID0gbmV3IFVwZGF0ZUVudGl0eUluZm9XaXRoUmVsYXRpb25zUmVxdWVzdCh0aGlzLmlkID8/ICcnLCB0aGlzLmVudGl0eVdpdGhSZWxhdGlvbnMuZW50aXR5LCB0aGlzLmVudGl0eVdpdGhSZWxhdGlvbnMucmVsYXRpb25zKTtcclxuICAgICAgdGhpcy5fZW50aXR5SW5mb3JtYXRpb25zU2VydmljZS51cGRhdGUodXBkYXRlRW50aXR5SW5mb1dpdGhSZWxhdGlvbnNSZXF1ZXN0KS5zdWJzY3JpYmUoe1xyXG4gICAgICAgIG5leHQ6ICgpID0+IHtcclxuICAgICAgICAgIHRoaXMuX25vdGlmaWNhdGlvblNlcnZpY2UuaW5mbyh0aGlzLmwoTG9jYWxpemF0aW9uS2V5cy51cGRhdGVkU3VjY2Vzc2Z1bGx5KSk7XHJcbiAgICAgICAgICB0aGlzLmhpZGUodHJ1ZSk7XHJcbiAgICAgICAgICB0aGlzLm9uU2F2ZS5lbWl0KCk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBlcnJvcjogKHJlc3BvbnNlOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5zYXZpbmcgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMuaXNsb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLl9lcnJvclJlc3BvbnNlTWFuYWdlclNlcnZpY2Uuc2hvd0Vycm9yTWVzc2FnZShyZXNwb25zZSk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBjb21wbGV0ZTogKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5pc2xvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKHRoaXMubW9kZSA9PT0gTW9kZXMuZGVsZXRlKSB7XHJcbiAgICAgIHRoaXMuX2NvbmZpcm1hdGlvblNlcnZpY2UuY29uZmlybShcclxuICAgICAgICBMb2NhbGl6YXRpb25LZXlzLmNvbmZpcm1EZWxldGUsXHJcbiAgICAgICAgdW5kZWZpbmVkLFxyXG4gICAgICAgIChyZXN1bHQ6IGJvb2xlYW4pID0+IHtcclxuICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgcmVzdWx0XHJcbiAgICAgICAgICAgICYmIHRoaXMuZW50aXR5V2l0aFJlbGF0aW9ucy5lbnRpdHkuY2xhc3NOYW1lXHJcbiAgICAgICAgICApIHtcclxuICAgICAgICAgICAgdGhpcy5fZW50aXR5SW5mb3JtYXRpb25zU2VydmljZS5kZWxldGUodGhpcy5pZCA/PyAnJykuc3Vic2NyaWJlKHtcclxuICAgICAgICAgICAgICBuZXh0OiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9ub3RpZmljYXRpb25TZXJ2aWNlLnN1Y2Nlc3ModGhpcy5sKExvY2FsaXphdGlvbktleXMuZGVsZXRlZFN1Y2Nlc3NmdWxseSkpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5oaWRlKHRydWUpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5vblNhdmUuZW1pdCgpO1xyXG4gICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgZXJyb3I6IChyZXNwb25zZTogSHR0cEVycm9yUmVzcG9uc2UpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX2Vycm9yUmVzcG9uc2VNYW5hZ2VyU2VydmljZS5zaG93RXJyb3JNZXNzYWdlKHJlc3BvbnNlKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2F2aW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzbG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgY29tcGxldGU6ICgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuaXNsb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRQcm9wZXJ0aWVzRGF0YSgpOiB2b2lkIHtcclxuICAgIHRoaXMuaXNsb2FkaW5nID0gdHJ1ZTtcclxuICAgIGlmICh0aGlzLmlkKSB7XHJcbiAgICAgIGZvcmtKb2luKHtcclxuICAgICAgICBtb2RlbENvbHVtbnM6IHRoaXMuX2VudGl0eUluZm9ybWF0aW9uc1NlcnZpY2UuZ2V0RW50aXR5Y29sdW1uc0Zyb21Nb2RlbHModGhpcy5pZCksXHJcbiAgICAgICAgZGJDb2x1bW5zOiB0aGlzLl9lbnRpdHlJbmZvcm1hdGlvbnNTZXJ2aWNlLmdldENvbHVtbnNGcm9tUHJvamVjdERhdGFiYXNlKHRoaXMuaWQpLFxyXG4gICAgICAgIHNxbENvbHVtbnM6IHRoaXMuX2VudGl0eUluZm9ybWF0aW9uc1NlcnZpY2UuZ2V0U3FsQ29sdW1ucyh0aGlzLmlkKVxyXG4gICAgICB9KS5zdWJzY3JpYmUoe1xyXG4gICAgICAgIG5leHQ6ICh7IG1vZGVsQ29sdW1ucywgZGJDb2x1bW5zLCBzcWxDb2x1bW5zIH0pID0+IHtcclxuICAgICAgICAgIHRoaXMubW9kZWxDb2x1bW5zRGF0YSA9IG1vZGVsQ29sdW1ucyA/PyBbXTtcclxuICAgICAgICAgIHRoaXMuZGJDb2x1bW5zRGF0YSA9IGRiQ29sdW1ucyA/PyBbXTtcclxuICAgICAgICAgIHRoaXMuc3FsQ29sdW1uc0RhdGEgPSBzcWxDb2x1bW5zID8/IFtdO1xyXG4gICAgICAgICAgdGhpcy5jb21wdXRlQ29tcGFyaXNvbnMoKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGNvbXBsZXRlOiAoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmlzbG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZXJyb3I6IChlcnJvcikgPT4ge1xyXG4gICAgICAgICAgdGhpcy5pc2xvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGZldGNoaW5nIHByb3BlcnRpZXMgZGF0YTonLCBlcnJvcik7XHJcbiAgICAgICAgICB0aGlzLl9lcnJvclJlc3BvbnNlTWFuYWdlclNlcnZpY2Uuc2hvd0Vycm9yTWVzc2FnZShlcnJvcik7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uQWRkUmVsYXRpb24oKTogdm9pZCB7XHJcbiAgICB0aGlzLmVudGl0eVdpdGhSZWxhdGlvbnMucmVsYXRpb25zLm1hcChlciA9PiBlci5lbnRpdHlGcm9tID0gdGhpcy5lbnRpdHlXaXRoUmVsYXRpb25zLmVudGl0eS5jbGFzc05hbWUgPz8gJycpO1xyXG4gIH1cclxuXHJcblxyXG4gIHByaXZhdGUgZmlsdGVyQ29sdW1ucyhkYXRhOiBFbnRpdHlDb2x1bW5EZXRhaWxSZXNwb25zZVtdKTogRW50aXR5Q29sdW1uRGV0YWlsUmVzcG9uc2VbXSB7XHJcbiAgICBpZiAoIXRoaXMucHJvcGVydGllc1NlYXJjaFRleHQpIHJldHVybiBkYXRhO1xyXG4gICAgY29uc3Qgc2VhcmNoID0gdGhpcy5wcm9wZXJ0aWVzU2VhcmNoVGV4dC50b0xvd2VyQ2FzZSgpO1xyXG4gICAgcmV0dXJuIGRhdGEuZmlsdGVyKGNvbCA9PlxyXG4gICAgICBjb2wubmFtZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHNlYXJjaCkgfHxcclxuICAgICAgY29sLnR5cGUudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhzZWFyY2gpXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGZpbHRlcmVkTW9kZWxDb2x1bW5zKCk6IEVudGl0eUNvbHVtbkRldGFpbFJlc3BvbnNlW10ge1xyXG4gICAgcmV0dXJuIHRoaXMuZmlsdGVyQ29sdW1ucyh0aGlzLm1vZGVsQ29sdW1uc0RhdGEpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGZpbHRlcmVkRGJDb2x1bW5zKCk6IEVudGl0eUNvbHVtbkRldGFpbFJlc3BvbnNlW10ge1xyXG4gICAgcmV0dXJuIHRoaXMuZmlsdGVyQ29sdW1ucyh0aGlzLmRiQ29sdW1uc0RhdGEpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGZpbHRlcmVkU3FsQ29sdW1ucygpOiBFbnRpdHlDb2x1bW5EZXRhaWxSZXNwb25zZVtdIHtcclxuICAgIHJldHVybiB0aGlzLmZpbHRlckNvbHVtbnModGhpcy5zcWxDb2x1bW5zRGF0YSk7XHJcbiAgfVxyXG5cclxuICBnZXQgcHJvcGVydGllc1RvdGFsUmVjb3JkcygpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIE1hdGgubWF4KFxyXG4gICAgICB0aGlzLmZpbHRlcmVkTW9kZWxDb2x1bW5zLmxlbmd0aCxcclxuICAgICAgdGhpcy5maWx0ZXJlZERiQ29sdW1ucy5sZW5ndGgsXHJcbiAgICAgIHRoaXMuZmlsdGVyZWRTcWxDb2x1bW5zLmxlbmd0aFxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIGdldCBwYWdlZE1vZGVsQ29sdW1ucygpOiBFbnRpdHlDb2x1bW5EZXRhaWxSZXNwb25zZVtdIHtcclxuICAgIHJldHVybiB0aGlzLmZpbHRlcmVkTW9kZWxDb2x1bW5zLnNsaWNlKHRoaXMucHJvcGVydGllc0ZpcnN0LCB0aGlzLnByb3BlcnRpZXNGaXJzdCArIHRoaXMucHJvcGVydGllc1BhZ2VTaXplKTtcclxuICB9XHJcblxyXG4gIGdldCBwYWdlZERiQ29sdW1ucygpOiBFbnRpdHlDb2x1bW5EZXRhaWxSZXNwb25zZVtdIHtcclxuICAgIHJldHVybiB0aGlzLmZpbHRlcmVkRGJDb2x1bW5zLnNsaWNlKHRoaXMucHJvcGVydGllc0ZpcnN0LCB0aGlzLnByb3BlcnRpZXNGaXJzdCArIHRoaXMucHJvcGVydGllc1BhZ2VTaXplKTtcclxuICB9XHJcblxyXG4gIGdldCBwYWdlZFNxbENvbHVtbnMoKTogRW50aXR5Q29sdW1uRGV0YWlsUmVzcG9uc2VbXSB7XHJcbiAgICByZXR1cm4gdGhpcy5maWx0ZXJlZFNxbENvbHVtbnMuc2xpY2UodGhpcy5wcm9wZXJ0aWVzRmlyc3QsIHRoaXMucHJvcGVydGllc0ZpcnN0ICsgdGhpcy5wcm9wZXJ0aWVzUGFnZVNpemUpO1xyXG4gIH1cclxuXHJcbiAgb25Qcm9wZXJ0aWVzUGFnZUNoYW5nZShldmVudDogYW55KTogdm9pZCB7XHJcbiAgICB0aGlzLnByb3BlcnRpZXNGaXJzdCA9IGV2ZW50LmZpcnN0O1xyXG4gICAgdGhpcy5wcm9wZXJ0aWVzUGFnZVNpemUgPSBldmVudC5yb3dzO1xyXG4gIH1cclxuXHJcbiAgb25Qcm9wZXJ0aWVzU2VhcmNoKCk6IHZvaWQge1xyXG4gICAgdGhpcy5wcm9wZXJ0aWVzRmlyc3QgPSAwO1xyXG4gIH1cclxuXHJcbiAgY29tcHV0ZUNvbXBhcmlzb25zKCk6IHZvaWQge1xyXG4gICAgY29uc3QgbW9kZWxNYXAgPSBuZXcgTWFwPHN0cmluZywgRW50aXR5Q29sdW1uRGV0YWlsUmVzcG9uc2U+KCk7XHJcbiAgICBjb25zdCBkYk1hcCA9IG5ldyBNYXA8c3RyaW5nLCBFbnRpdHlDb2x1bW5EZXRhaWxSZXNwb25zZT4oKTtcclxuICAgIGNvbnN0IHNxbE1hcCA9IG5ldyBNYXA8c3RyaW5nLCBFbnRpdHlDb2x1bW5EZXRhaWxSZXNwb25zZT4oKTtcclxuXHJcbiAgICB0aGlzLm1vZGVsQ29sdW1uc0RhdGEuZm9yRWFjaChjb2wgPT4gbW9kZWxNYXAuc2V0KGNvbC5uYW1lLnRvTG93ZXJDYXNlKCksIGNvbCkpO1xyXG4gICAgdGhpcy5kYkNvbHVtbnNEYXRhLmZvckVhY2goY29sID0+IGRiTWFwLnNldChjb2wubmFtZS50b0xvd2VyQ2FzZSgpLCBjb2wpKTtcclxuICAgIHRoaXMuc3FsQ29sdW1uc0RhdGEuZm9yRWFjaChjb2wgPT4gc3FsTWFwLnNldChjb2wubmFtZS50b0xvd2VyQ2FzZSgpLCBjb2wpKTtcclxuXHJcbiAgICB0aGlzLm1vZGVsQ29tcGFyaXNvbk1hcCA9IHRoaXMuY29tcHV0ZVNvdXJjZUNvbXBhcmlzb24odGhpcy5tb2RlbENvbHVtbnNEYXRhLCBbZGJNYXAsIHNxbE1hcF0pO1xyXG4gICAgdGhpcy5kYkNvbXBhcmlzb25NYXAgPSB0aGlzLmNvbXB1dGVTb3VyY2VDb21wYXJpc29uKHRoaXMuZGJDb2x1bW5zRGF0YSwgW21vZGVsTWFwLCBzcWxNYXBdKTtcclxuICAgIHRoaXMuc3FsQ29tcGFyaXNvbk1hcCA9IHRoaXMuY29tcHV0ZVNvdXJjZUNvbXBhcmlzb24odGhpcy5zcWxDb2x1bW5zRGF0YSwgW21vZGVsTWFwLCBkYk1hcF0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjb21wdXRlU291cmNlQ29tcGFyaXNvbihcclxuICAgIHNvdXJjZURhdGE6IEVudGl0eUNvbHVtbkRldGFpbFJlc3BvbnNlW10sXHJcbiAgICBvdGhlck1hcHM6IE1hcDxzdHJpbmcsIEVudGl0eUNvbHVtbkRldGFpbFJlc3BvbnNlPltdXHJcbiAgKTogTWFwPHN0cmluZywgUmVjb3JkPHN0cmluZywgc3RyaW5nPj4ge1xyXG4gICAgY29uc3QgcmVzdWx0ID0gbmV3IE1hcDxzdHJpbmcsIFJlY29yZDxzdHJpbmcsIHN0cmluZz4+KCk7XHJcblxyXG4gICAgZm9yIChjb25zdCByb3cgb2Ygc291cmNlRGF0YSkge1xyXG4gICAgICBjb25zdCBrZXkgPSByb3cubmFtZS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICBjb25zdCBjbGFzc2VzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0geyBuYW1lOiAnJywgdHlwZTogJycsIGlzTnVsbGFibGU6ICcnLCBtYXhMZW5ndGg6ICcnIH07XHJcblxyXG4gICAgICBmb3IgKGNvbnN0IG90aGVyTWFwIG9mIG90aGVyTWFwcykge1xyXG4gICAgICAgIGNvbnN0IG90aGVyUm93ID0gb3RoZXJNYXAuZ2V0KGtleSk7XHJcblxyXG4gICAgICAgIGlmICghb3RoZXJSb3cpIHtcclxuICAgICAgICAgIGNsYXNzZXNbJ25hbWUnXSA9ICdjb21wYXJpc29uLW1pc3NpbmcnO1xyXG4gICAgICAgICAgY2xhc3Nlc1sndHlwZSddID0gJ2NvbXBhcmlzb24tbWlzc2luZyc7XHJcbiAgICAgICAgICBjbGFzc2VzWydpc051bGxhYmxlJ10gPSAnY29tcGFyaXNvbi1taXNzaW5nJztcclxuICAgICAgICAgIGNsYXNzZXNbJ21heExlbmd0aCddID0gJ2NvbXBhcmlzb24tbWlzc2luZyc7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChvdGhlclJvdy50eXBlICE9PSByb3cudHlwZSAmJiAhY2xhc3Nlc1sndHlwZSddKSB7XHJcbiAgICAgICAgICBjbGFzc2VzWyd0eXBlJ10gPSAnY29tcGFyaXNvbi10eXBlLW1pc21hdGNoJztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChvdGhlclJvdy5tYXhMZW5ndGggIT09IHJvdy5tYXhMZW5ndGggJiYgIWNsYXNzZXNbJ21heExlbmd0aCddKSB7XHJcbiAgICAgICAgICBjbGFzc2VzWydtYXhMZW5ndGgnXSA9ICdjb21wYXJpc29uLWxlbmd0aC1taXNtYXRjaCc7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICByZXN1bHQuc2V0KGtleSwgY2xhc3Nlcyk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHJlc3VsdDtcclxuICB9XHJcblxyXG4gIGdldENvbXBhcmlzb25DbGFzcyhzb3VyY2U6ICdtb2RlbCcgfCAnZGInIHwgJ3NxbCcsIHJvdzogRW50aXR5Q29sdW1uRGV0YWlsUmVzcG9uc2UsIGZpZWxkOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgY29uc3QgbWFwID0gc291cmNlID09PSAnbW9kZWwnID8gdGhpcy5tb2RlbENvbXBhcmlzb25NYXBcclxuICAgICAgICAgICAgICA6IHNvdXJjZSA9PT0gJ2RiJyA/IHRoaXMuZGJDb21wYXJpc29uTWFwXHJcbiAgICAgICAgICAgICAgOiB0aGlzLnNxbENvbXBhcmlzb25NYXA7XHJcbiAgICBjb25zdCBjb21wYXJpc29uID0gbWFwLmdldChyb3cubmFtZS50b0xvd2VyQ2FzZSgpKTtcclxuICAgIGlmICghY29tcGFyaXNvbikgcmV0dXJuICcnO1xyXG4gICAgcmV0dXJuIGNvbXBhcmlzb25bZmllbGRdIHx8ICcnO1xyXG4gIH1cclxufSIsIjx0c2ktZm9ybSBjbGFzcz1cImZvcm0taG9yaXpvbnRhbFwiIGF1dG9jb21wbGV0ZT1cIm9mZlwiIChvblN1Ym1pdCk9XCJzYXZlKClcIiBbaXNMb2FkaW5nXT1cImlzbG9hZGluZ1wiPlxyXG4gIDxUc2ktTW9kYWwtSGVhZGVyIFtpbnB1dFRpdGxlXT1cImhlYWRlciB8IG1vZGFsTGFiZWwgOiBtb2RlIDogJ2FkbWluaXN0cmF0aW9uX2VudGl0eVJlbGF0aW9uc190aXRsZScgfCBsb2NhbGl6ZVwiXHJcbiAgICAob25DbG9zZUNsaWNrKT1cImhpZGUoKVwiPlxyXG4gIDwvVHNpLU1vZGFsLUhlYWRlcj5cclxuXHJcbiAgPGRpdiAqbmdJZj1cInVpZFwiIGNsYXNzPVwiZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTIgbWItMlwiPlxyXG4gICAgPHNwYW4gY2xhc3M9XCJmb250LXNlbWlib2xkXCI+e3snYWRtaW5pc3RyYXRpb25fZ2VzdGlvbkVudGl0eUluZm9ybWF0aW9uX3VpZCcgfCBsb2NhbGl6ZX19IDo8L3NwYW4+XHJcbiAgICA8c3Bhbj57eyB1aWQgfX08L3NwYW4+XHJcbiAgPC9kaXY+XHJcblxyXG4gIDxwLXRhYlZpZXc+XHJcbiAgICA8cC10YWJQYW5lbCBbaGVhZGVyXT1cIidhZG1pbmlzdHJhdGlvbl90YWJfZW50aXR5SW5mb3JtYXRpb24nIHwgbG9jYWxpemVcIj5cclxuICAgICAgPGZpZWxkc2V0IFtkaXNhYmxlZF09XCJpc0RlbGV0ZU1vZGUoKSB8fCBpc0NvbnN1bHRNb2RlKClcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtYm9keVwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImdyaWRcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC02XCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImdyaWRcIj5cclxuICAgICAgICAgICAgICAgIDxUc2ktTGFiZWwgY2xhc3M9XCJjb2wtNFwiIFtsYWJlbFZhbHVlXT1cIidhZG1pbmlzdHJhdGlvbl9nZXN0aW9uRW50aXR5SW5mb3JtYXRpb25fY2xhc3NOYW1lJ1wiPjwvVHNpLUxhYmVsPlxyXG4gICAgICAgICAgICAgICAgPFRzaS1UZXh0LUJveCBjbGFzcz1cImNvbC04XCIgW2lucHV0TmFtZV09XCInQ2xhc3NOYW1lJ1wiXHJcbiAgICAgICAgICAgICAgICAgIFsoaW5wdXRGaWVsZCldPVwiZW50aXR5V2l0aFJlbGF0aW9ucy5lbnRpdHkuY2xhc3NOYW1lXCJcclxuICAgICAgICAgICAgICAgICAgKGlucHV0RmllbGRDaGFuZ2UpPVwiZ2V0Q29sb25uZXNCeUNsYXNzTmFtZUFzS2V5VmFsdWVQYWlyKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiaXNEZWxldGVNb2RlKCkgfHwgaXNDb25zdWx0TW9kZSgpIHx8IGlzRWRpdE1vZGUoKVwiPlxyXG4gICAgICAgICAgICAgICAgPC9Uc2ktVGV4dC1Cb3g+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC02XCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImdyaWRcIj5cclxuICAgICAgICAgICAgICAgIDxUc2ktTGFiZWwgY2xhc3M9XCJjb2wtNFwiIFtsYWJlbFZhbHVlXT1cIidhZG1pbmlzdHJhdGlvbl9nZXN0aW9uRW50aXR5SW5mb3JtYXRpb25fZm9ybU5hbWUnXCI+PC9Uc2ktTGFiZWw+XHJcbiAgICAgICAgICAgICAgICA8VHNpLVNlYXJjaC1Db21ibyBjbGFzcz1cImNvbC04XCIgW2RhdGFzb3VyY2VdPVwiY29tcG9uZW50c09wdGlvbnNcIlxyXG4gICAgICAgICAgICAgICAgICBbKGJpbmQpXT1cImVudGl0eVdpdGhSZWxhdGlvbnMuZW50aXR5LmZvcm1OYW1lXCIgaWQtZmllbGQ9XCJrZXlcIiBsYWJlbC1maWVsZD1cInZhbHVlXCIgW3Nob3dDbGVhcl09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImlzRGVsZXRlTW9kZSgpIHx8IGlzQ29uc3VsdE1vZGUoKVwiPlxyXG4gICAgICAgICAgICAgICAgPC9Uc2ktU2VhcmNoLUNvbWJvPlxyXG5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJncmlkXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNlwiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJncmlkXCI+XHJcbiAgICAgICAgICAgICAgICA8VHNpLUxhYmVsIGNsYXNzPVwiY29sLTRcIlxyXG4gICAgICAgICAgICAgICAgICBbbGFiZWxWYWx1ZV09XCInYWRtaW5pc3RyYXRpb25fZ2VzdGlvbkVudGl0eUluZm9ybWF0aW9uX2xpc3RDb21wb25lbnQnXCI+PC9Uc2ktTGFiZWw+XHJcbiAgICAgICAgICAgICAgICA8VHNpLVNlYXJjaC1Db21ibyBjbGFzcz1cImNvbC04XCIgW2RhdGFzb3VyY2VdPVwiY29tcG9uZW50c09wdGlvbnNcIlxyXG4gICAgICAgICAgICAgICAgICBbKGJpbmQpXT1cImVudGl0eVdpdGhSZWxhdGlvbnMuZW50aXR5Lmxpc3RDb21wb25lbnRcIiBpZC1maWVsZD1cImtleVwiIGxhYmVsLWZpZWxkPVwidmFsdWVcIlxyXG4gICAgICAgICAgICAgICAgICBbc2hvd0NsZWFyXT1cInRydWVcIiBbZGlzYWJsZWRdPVwiaXNEZWxldGVNb2RlKCkgfHwgaXNDb25zdWx0TW9kZSgpXCI+XHJcbiAgICAgICAgICAgICAgICA8L1RzaS1TZWFyY2gtQ29tYm8+XHJcblxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNlwiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJncmlkXCI+XHJcbiAgICAgICAgICAgICAgICA8VHNpLUxhYmVsIGNsYXNzPVwiY29sLTRcIiBbbGFiZWxWYWx1ZV09XCInYWRtaW5pc3RyYXRpb25fZ2VzdGlvbkVudGl0eUluZm9ybWF0aW9uX2xvZ2dlZCdcIj48L1RzaS1MYWJlbD5cclxuICAgICAgICAgICAgICAgIDxUc2ktQ2hlY2tCb3ggY2xhc3M9XCJjb2wtOFwiIFtpbnB1dE5hbWVdPVwiJ0xvZ2dlZCdcIiBbKGlucHV0RmllbGQpXT1cImVudGl0eVdpdGhSZWxhdGlvbnMuZW50aXR5LmxvZ2dlZFwiPlxyXG4gICAgICAgICAgICAgICAgPC9Uc2ktQ2hlY2tCb3g+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZ3JpZFwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTZcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZ3JpZFwiPlxyXG4gICAgICAgICAgICAgICAgPFRzaS1MYWJlbCBjbGFzcz1cImNvbC00XCIgW2xhYmVsVmFsdWVdPVwiJ2FkbWluaXN0cmF0aW9uX2dlc3Rpb25FbnRpdHlJbmZvcm1hdGlvbl9saXN0Um91dGUnXCI+PC9Uc2ktTGFiZWw+XHJcbiAgICAgICAgICAgICAgICA8VHNpLVRleHQtQm94IGNsYXNzPVwiY29sLThcIiBbaW5wdXROYW1lXT1cIidMaXN0Um91dGUnXCJcclxuICAgICAgICAgICAgICAgICAgWyhpbnB1dEZpZWxkKV09XCJlbnRpdHlXaXRoUmVsYXRpb25zLmVudGl0eS5saXN0Um91dGVcIj5cclxuICAgICAgICAgICAgICAgIDwvVHNpLVRleHQtQm94PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNlwiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJncmlkXCI+XHJcbiAgICAgICAgICAgICAgICA8VHNpLUxhYmVsIGNsYXNzPVwiY29sLTRcIiBbbGFiZWxWYWx1ZV09XCInYWRtaW5pc3RyYXRpb25fZ2VzdGlvbkVudGl0eUluZm9ybWF0aW9uX2Zvcm1Sb3V0ZSdcIj48L1RzaS1MYWJlbD5cclxuICAgICAgICAgICAgICAgIDxUc2ktVGV4dC1Cb3ggY2xhc3M9XCJjb2wtOFwiIFtpbnB1dE5hbWVdPVwiJ0Zvcm1Sb3V0ZSdcIlxyXG4gICAgICAgICAgICAgICAgICBbKGlucHV0RmllbGQpXT1cImVudGl0eVdpdGhSZWxhdGlvbnMuZW50aXR5LmZvcm1Sb3V0ZVwiPlxyXG4gICAgICAgICAgICAgICAgPC9Uc2ktVGV4dC1Cb3g+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZ3JpZFwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTZcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZ3JpZFwiPlxyXG4gICAgICAgICAgICAgICAgPFRzaS1MYWJlbCBjbGFzcz1cImNvbC00XCJcclxuICAgICAgICAgICAgICAgICAgW2xhYmVsVmFsdWVdPVwiJ2FkbWluaXN0cmF0aW9uX2dlc3Rpb25FbnRpdHlJbmZvcm1hdGlvbl9kaXNjcmltaW5hdG9yUHJvcGVydHlOYW1lJ1wiPjwvVHNpLUxhYmVsPlxyXG4gICAgICAgICAgICAgICAgPFRzaS1UZXh0LUJveCBjbGFzcz1cImNvbC04XCIgW2lucHV0TmFtZV09XCInRGlzY3JpbWluYXRvclByb3BlcnR5TmFtZSdcIlxyXG4gICAgICAgICAgICAgICAgICBbKGlucHV0RmllbGQpXT1cImVudGl0eVdpdGhSZWxhdGlvbnMuZW50aXR5LmRpc2NyaW1pbmF0b3JQcm9wZXJ0eU5hbWVcIj5cclxuICAgICAgICAgICAgICAgIDwvVHNpLVRleHQtQm94PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNlwiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJncmlkXCI+XHJcbiAgICAgICAgICAgICAgICA8VHNpLUxhYmVsIGNsYXNzPVwiY29sLTRcIlxyXG4gICAgICAgICAgICAgICAgICBbbGFiZWxWYWx1ZV09XCInYWRtaW5pc3RyYXRpb25fZ2VzdGlvbkVudGl0eUluZm9ybWF0aW9uX2Rpc2NyaW1pbmF0b3JDbGFzc05hbWUnXCI+PC9Uc2ktTGFiZWw+XHJcbiAgICAgICAgICAgICAgICA8VHNpLVRleHQtQm94IGNsYXNzPVwiY29sLThcIiBbaW5wdXROYW1lXT1cIidEaXNjcmltaW5hdG9yQ2xhc3NOYW1lJ1wiXHJcbiAgICAgICAgICAgICAgICAgIFsoaW5wdXRGaWVsZCldPVwiZW50aXR5V2l0aFJlbGF0aW9ucy5lbnRpdHkuZGlzY3JpbWluYXRvckNsYXNzTmFtZVwiPlxyXG4gICAgICAgICAgICAgICAgPC9Uc2ktVGV4dC1Cb3g+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZ3JpZFwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTZcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZ3JpZFwiPlxyXG4gICAgICAgICAgICAgICAgPFRzaS1MYWJlbCBjbGFzcz1cImNvbC00XCJcclxuICAgICAgICAgICAgICAgICAgW2xhYmVsVmFsdWVdPVwiJ2FkbWluaXN0cmF0aW9uX2dlc3Rpb25FbnRpdHlJbmZvcm1hdGlvbl9rZXlDb2x1bW5zJ1wiPjwvVHNpLUxhYmVsPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC04XCI+XHJcbiAgICAgICAgICAgICAgICAgIDxwLW11bHRpU2VsZWN0IFtvcHRpb25zXT1cImtleUNvbHVtbk9wdGlvbnNcIiBbKG5nTW9kZWwpXT1cImVudGl0eVdpdGhSZWxhdGlvbnMuZW50aXR5LmtleUNvbHVtbnNcIlxyXG4gICAgICAgICAgICAgICAgICAgIG9wdGlvblZhbHVlPVwia2V5XCIgb3B0aW9uTGFiZWw9XCJ2YWx1ZVwiIGRpc3BsYXk9XCJjaGlwXCIgZGVmYXVsdExhYmVsPVwiU2VsZWN0IGNvbHVtbnNcIiBbZmlsdGVyXT1cInRydWVcIj5cclxuICAgICAgICAgICAgICAgICAgPC9wLW11bHRpU2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTZcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZ3JpZFwiPlxyXG4gICAgICAgICAgICAgICAgPFRzaS1MYWJlbCBjbGFzcz1cImNvbC00XCJcclxuICAgICAgICAgICAgICAgICAgW2xhYmVsVmFsdWVdPVwiJ2FkbWluaXN0cmF0aW9uX2dlc3Rpb25FbnRpdHlJbmZvcm1hdGlvbl9zdGF0dXNDb2x1bW5OYW1lJ1wiPjwvVHNpLUxhYmVsPlxyXG5cclxuICAgICAgICAgICAgICAgIDxUc2ktU2VhcmNoLUNvbWJvIGNsYXNzPVwiY29sLTZcIiBbZGF0YXNvdXJjZV09XCJrZXlDb2x1bW5PcHRpb25zXCJcclxuICAgICAgICAgICAgICAgICAgWyhiaW5kKV09XCJlbnRpdHlXaXRoUmVsYXRpb25zLmVudGl0eS5zdGF0dXNDb2x1bW5OYW1lXCIgaWQtZmllbGQ9XCJrZXlcIiBsYWJlbC1maWVsZD1cInZhbHVlXCJcclxuICAgICAgICAgICAgICAgICAgW3Nob3dDbGVhcl09XCJ0cnVlXCIgW2Rpc2FibGVkXT1cImlzRGVsZXRlTW9kZSgpIHx8IGlzQ29uc3VsdE1vZGUoKVwiPlxyXG4gICAgICAgICAgICAgICAgPC9Uc2ktU2VhcmNoLUNvbWJvPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImdyaWRcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC02XCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImdyaWRcIj5cclxuICAgICAgICAgICAgICAgIDxUc2ktTGFiZWwgY2xhc3M9XCJjb2wtNFwiXHJcbiAgICAgICAgICAgICAgICAgIFtsYWJlbFZhbHVlXT1cIidhZG1pbmlzdHJhdGlvbl9nZXN0aW9uRW50aXR5SW5mb3JtYXRpb25faXNXb3JrZmxvdydcIj48L1RzaS1MYWJlbD5cclxuICAgICAgICAgICAgICAgIDxUc2ktQ2hlY2tCb3ggY2xhc3M9XCJjb2wtOFwiIFtpbnB1dE5hbWVdPVwiJ0lzV29ya2Zsb3cnXCJcclxuICAgICAgICAgICAgICAgICAgWyhpbnB1dEZpZWxkKV09XCJlbnRpdHlXaXRoUmVsYXRpb25zLmVudGl0eS5pc1dvcmtmbG93XCI+XHJcbiAgICAgICAgICAgICAgICA8L1RzaS1DaGVja0JveD5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTZcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZ3JpZFwiPlxyXG4gICAgICAgICAgICAgICAgPFRzaS1MYWJlbCBjbGFzcz1cImNvbC00XCJcclxuICAgICAgICAgICAgICAgICAgW2xhYmVsVmFsdWVdPVwiJ2FkbWluaXN0cmF0aW9uX2dlc3Rpb25FbnRpdHlJbmZvcm1hdGlvbl9kZWZhdWx0U3RhdHVzJ1wiPjwvVHNpLUxhYmVsPlxyXG4gICAgICAgICAgICAgICAgPFRzaS1UZXh0LUJveCBjbGFzcz1cImNvbC04XCIgW2lucHV0TmFtZV09XCInRGVmYXVsdFN0YXR1cydcIlxyXG4gICAgICAgICAgICAgICAgICBbKGlucHV0RmllbGQpXT1cImVudGl0eVdpdGhSZWxhdGlvbnMuZW50aXR5LmRlZmF1bHRTdGF0dXNcIj5cclxuICAgICAgICAgICAgICAgIDwvVHNpLVRleHQtQm94PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImdyaWRcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC02XCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImdyaWRcIj5cclxuICAgICAgICAgICAgICAgIDxUc2ktTGFiZWwgY2xhc3M9XCJjb2wtNFwiXHJcbiAgICAgICAgICAgICAgICAgIFtsYWJlbFZhbHVlXT1cIidhZG1pbmlzdHJhdGlvbl9nZXN0aW9uRW50aXR5SW5mb3JtYXRpb25fc3RhdHVzRW51bU5hbWUnXCI+PC9Uc2ktTGFiZWw+XHJcbiAgICAgICAgICAgICAgICA8VHNpLVRleHQtQm94IGNsYXNzPVwiY29sLThcIiBbaW5wdXROYW1lXT1cIidTdGF0dXNFbnVtTmFtZSdcIlxyXG4gICAgICAgICAgICAgICAgICBbKGlucHV0RmllbGQpXT1cImVudGl0eVdpdGhSZWxhdGlvbnMuZW50aXR5LnN0YXR1c0VudW1OYW1lXCI+XHJcbiAgICAgICAgICAgICAgICA8L1RzaS1UZXh0LUJveD5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTZcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZ3JpZFwiPlxyXG4gICAgICAgICAgICAgICAgPFRzaS1MYWJlbCBjbGFzcz1cImNvbC00XCJcclxuICAgICAgICAgICAgICAgICAgW2xhYmVsVmFsdWVdPVwiJ2FkbWluaXN0cmF0aW9uX2dlc3Rpb25FbnRpdHlJbmZvcm1hdGlvbl9hZHZhbmNlZFNlYXJjaENvbXBvbmVudCdcIj48L1RzaS1MYWJlbD5cclxuICAgICAgICAgICAgICAgIDxUc2ktU2VhcmNoLUNvbWJvIGNsYXNzPVwiY29sLThcIiBbZGF0YXNvdXJjZV09XCJjb21wb25lbnRzT3B0aW9uc1wiXHJcbiAgICAgICAgICAgICAgICAgIFsoYmluZCldPVwiZW50aXR5V2l0aFJlbGF0aW9ucy5lbnRpdHkuYWR2YW5jZWRTZWFyY2hDb21wb25lbnRcIiBpZC1maWVsZD1cImtleVwiIGxhYmVsLWZpZWxkPVwidmFsdWVcIlxyXG4gICAgICAgICAgICAgICAgICBbc2hvd0NsZWFyXT1cInRydWVcIiBbZGlzYWJsZWRdPVwiaXNEZWxldGVNb2RlKCkgfHwgaXNDb25zdWx0TW9kZSgpXCI+XHJcbiAgICAgICAgICAgICAgICA8L1RzaS1TZWFyY2gtQ29tYm8+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImdyaWRcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC00XCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImdyaWRcIj5cclxuICAgICAgICAgICAgICAgIDxUc2ktTGFiZWwgY2xhc3M9XCJjb2wtNlwiXHJcbiAgICAgICAgICAgICAgICAgIFtsYWJlbFZhbHVlXT1cIidhZG1pbmlzdHJhdGlvbl9nZXN0aW9uRW50aXR5SW5mb3JtYXRpb25fY2FyZEhlYWRlclBob3RvQ29sdW1uJ1wiPjwvVHNpLUxhYmVsPlxyXG5cclxuICAgICAgICAgICAgICAgIDxUc2ktU2VhcmNoLUNvbWJvIGNsYXNzPVwiY29sLTZcIiBbZGF0YXNvdXJjZV09XCJrZXlDb2x1bW5PcHRpb25zXCJcclxuICAgICAgICAgICAgICAgICAgWyhiaW5kKV09XCJlbnRpdHlXaXRoUmVsYXRpb25zLmVudGl0eS5jYXJkSGVhZGVyUGhvdG9Db2x1bW5cIiBpZC1maWVsZD1cImtleVwiIGxhYmVsLWZpZWxkPVwidmFsdWVcIlxyXG4gICAgICAgICAgICAgICAgICBbc2hvd0NsZWFyXT1cInRydWVcIiBbZGlzYWJsZWRdPVwiaXNEZWxldGVNb2RlKCkgfHwgaXNDb25zdWx0TW9kZSgpXCI+XHJcbiAgICAgICAgICAgICAgICA8L1RzaS1TZWFyY2gtQ29tYm8+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC00XCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImdyaWRcIj5cclxuICAgICAgICAgICAgICAgIDxUc2ktTGFiZWwgY2xhc3M9XCJjb2wtNlwiXHJcbiAgICAgICAgICAgICAgICAgIFtsYWJlbFZhbHVlXT1cIidhZG1pbmlzdHJhdGlvbl9nZXN0aW9uRW50aXR5SW5mb3JtYXRpb25fY2FyZFRpdGxlQ29sdW1uJ1wiPjwvVHNpLUxhYmVsPlxyXG5cclxuICAgICAgICAgICAgICAgIDxUc2ktU2VhcmNoLUNvbWJvIGNsYXNzPVwiY29sLTZcIiBbZGF0YXNvdXJjZV09XCJrZXlDb2x1bW5PcHRpb25zXCJcclxuICAgICAgICAgICAgICAgICAgWyhiaW5kKV09XCJlbnRpdHlXaXRoUmVsYXRpb25zLmVudGl0eS5jYXJkVGl0bGVDb2x1bW5cIiBpZC1maWVsZD1cImtleVwiIGxhYmVsLWZpZWxkPVwidmFsdWVcIlxyXG4gICAgICAgICAgICAgICAgICBbc2hvd0NsZWFyXT1cInRydWVcIiBbZGlzYWJsZWRdPVwiaXNEZWxldGVNb2RlKCkgfHwgaXNDb25zdWx0TW9kZSgpXCI+XHJcbiAgICAgICAgICAgICAgICA8L1RzaS1TZWFyY2gtQ29tYm8+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTRcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZ3JpZFwiPlxyXG4gICAgICAgICAgICAgICAgPFRzaS1MYWJlbCBjbGFzcz1cImNvbC02XCJcclxuICAgICAgICAgICAgICAgICAgW2xhYmVsVmFsdWVdPVwiJ2FkbWluaXN0cmF0aW9uX2dlc3Rpb25FbnRpdHlJbmZvcm1hdGlvbl9jYXJkU3ViSGVhZGVyQ29sdW1uJ1wiPjwvVHNpLUxhYmVsPlxyXG4gICAgICAgICAgICAgICAgPFRzaS1TZWFyY2gtQ29tYm8gY2xhc3M9XCJjb2wtNlwiIFtkYXRhc291cmNlXT1cImtleUNvbHVtbk9wdGlvbnNcIlxyXG4gICAgICAgICAgICAgICAgICBbKGJpbmQpXT1cImVudGl0eVdpdGhSZWxhdGlvbnMuZW50aXR5LmNhcmRTdWJIZWFkZXJDb2x1bW5cIiBpZC1maWVsZD1cImtleVwiIGxhYmVsLWZpZWxkPVwidmFsdWVcIlxyXG4gICAgICAgICAgICAgICAgICBbc2hvd0NsZWFyXT1cInRydWVcIiBbZGlzYWJsZWRdPVwiaXNEZWxldGVNb2RlKCkgfHwgaXNDb25zdWx0TW9kZSgpXCI+XHJcbiAgICAgICAgICAgICAgICA8L1RzaS1TZWFyY2gtQ29tYm8+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZ3JpZFwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyXCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImdyaWRcIj5cclxuICAgICAgICAgICAgICAgIDxUc2ktTGFiZWwgY2xhc3M9XCJjb2wtMlwiXHJcbiAgICAgICAgICAgICAgICAgIFtsYWJlbFZhbHVlXT1cIidhZG1pbmlzdHJhdGlvbl9nZXN0aW9uRW50aXR5SW5mb3JtYXRpb25fY2FyZERlc2NyaXB0aW9uQ29sdW1uJ1wiPjwvVHNpLUxhYmVsPlxyXG4gICAgICAgICAgICAgICAgPFRzaS1TZWFyY2gtQ29tYm8gY2xhc3M9XCJjb2wtNlwiIFtkYXRhc291cmNlXT1cImtleUNvbHVtbk9wdGlvbnNcIlxyXG4gICAgICAgICAgICAgICAgICBbKGJpbmQpXT1cImVudGl0eVdpdGhSZWxhdGlvbnMuZW50aXR5LmNhcmREZXNjcmlwdGlvbkNvbHVtblwiIGlkLWZpZWxkPVwia2V5XCIgbGFiZWwtZmllbGQ9XCJ2YWx1ZVwiXHJcbiAgICAgICAgICAgICAgICAgIFtzaG93Q2xlYXJdPVwidHJ1ZVwiIFtkaXNhYmxlZF09XCJpc0RlbGV0ZU1vZGUoKSB8fCBpc0NvbnN1bHRNb2RlKClcIj5cclxuICAgICAgICAgICAgICAgIDwvVHNpLVNlYXJjaC1Db21ibz5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9maWVsZHNldD5cclxuICAgIDwvcC10YWJQYW5lbD5cclxuICAgIDxwLXRhYlBhbmVsIFtoZWFkZXJdPVwiJ2FkbWluaXN0cmF0aW9uX3RhYl9yZWxhdGlvbnMnIHwgbG9jYWxpemVcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cImdyaWRcIj5cclxuICAgICAgICA8VHNpLUdlbmVyaWMtRWRpdGFibGUtR3JpZCBbY29sdW1uc109XCJlbnRpdGllc1JlbGF0aW9uc0NvbHVtbnNcIiBbZ3JpZERhdGFdPVwiZW50aXR5V2l0aFJlbGF0aW9ucy5yZWxhdGlvbnNcIlxyXG4gICAgICAgICAgW3BhcmVudF09XCJ0aGlzXCIgKGFkZGVkUm93RXZlbnRFbWl0dGVyKT1cIm9uQWRkUmVsYXRpb24oKVwiIFtzaG93QWRkQnV0dG9uXT1cImlzRWRpdE1vZGUoKVwiPlxyXG4gICAgICAgIDwvVHNpLUdlbmVyaWMtRWRpdGFibGUtR3JpZD5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L3AtdGFiUGFuZWw+XHJcbiAgICA8cC10YWJQYW5lbCBbaGVhZGVyXT1cIidhZG1pbmlzdHJhdGlvbl90YWJfcGVybWlzc2lvbnMnIHwgbG9jYWxpemVcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cImdyaWRcIj5cclxuICAgICAgICA8dHNpLXZpZXctZ3JpZCBbaGVhZGVyXT1cImVudGl0eVdpdGhSZWxhdGlvbnMuZW50aXR5LmNsYXNzTmFtZSA/PyAnJ1wiIGNsYXNzPVwiY29sLTEyIG1iLTNcIlxyXG4gICAgICAgICAgW2NvbHVtbnNdPVwicGVybWlzc2lvbnNHcmlkQ29sdW1uc1wiIFtnZXREYXRhRnJvbUFwaV09XCJmYWxzZVwiIFtncmlkRGF0YV09XCJlbmRwb2ludEluZm9zXCI+XHJcbiAgICAgICAgPC90c2ktdmlldy1ncmlkPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvcC10YWJQYW5lbD5cclxuICAgIDxwLXRhYlBhbmVsIFtoZWFkZXJdPVwiJ2FkbWluaXN0cmF0aW9uX3RhYl9wcm9wZXJ0aWVzJyB8IGxvY2FsaXplXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBnYXAtMiBtYi0zXCI+XHJcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJwLWlucHV0LWljb24tbGVmdFwiPlxyXG4gICAgICAgICAgPGkgY2xhc3M9XCJwaSBwaS1zZWFyY2hcIj48L2k+XHJcbiAgICAgICAgICA8aW5wdXQgcElucHV0VGV4dCB0eXBlPVwidGV4dFwiIFsobmdNb2RlbCldPVwicHJvcGVydGllc1NlYXJjaFRleHRcIiAobmdNb2RlbENoYW5nZSk9XCJvblByb3BlcnRpZXNTZWFyY2goKVwiXHJcbiAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCInYWRtaW5pc3RyYXRpb25fcHJvcGVydGllc19zZWFyY2hQbGFjZWhvbGRlcicgfCBsb2NhbGl6ZVwiIGNsYXNzPVwicC1pbnB1dHRleHQtc21cIiAvPlxyXG4gICAgICAgIDwvc3Bhbj5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgICA8ZGl2IGNsYXNzPVwicHJvcGVydGllcy1ncmlkLXNlY3Rpb24gbWItM1wiPlxyXG4gICAgICAgIDxoNCBjbGFzcz1cInByb3BlcnRpZXMtZ3JpZC10aXRsZVwiPnt7ICdhZG1pbmlzdHJhdGlvbl9wcm9wZXJ0aWVzX21vZGVsQ29sdW1uc190aXRsZScgfCBsb2NhbGl6ZSB9fTwvaDQ+XHJcbiAgICAgICAgPHAtdGFibGUgW3ZhbHVlXT1cInBhZ2VkTW9kZWxDb2x1bW5zXCIgc3R5bGVDbGFzcz1cInAtZGF0YXRhYmxlLXNtIHAtZGF0YXRhYmxlLWdyaWRsaW5lc1wiPlxyXG4gICAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImhlYWRlclwiPlxyXG4gICAgICAgICAgICA8dHI+XHJcbiAgICAgICAgICAgICAgPHRoICpuZ0Zvcj1cImxldCBjb2wgb2YgcHJvcGVydGllc0dyaWRDb2x1bW5zXCI+e3sgKGNvbC5oZWFkZXIgPz8gJycpIHwgbG9jYWxpemUgfX08L3RoPlxyXG4gICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJib2R5XCIgbGV0LXJvdz5cclxuICAgICAgICAgICAgPHRyPlxyXG4gICAgICAgICAgICAgIDx0ZCAqbmdGb3I9XCJsZXQgY29sIG9mIHByb3BlcnRpZXNHcmlkQ29sdW1uc1wiIFtuZ0NsYXNzXT1cImdldENvbXBhcmlzb25DbGFzcygnbW9kZWwnLCByb3csIGNvbC5maWVsZClcIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiY29sLnR5cGUgIT09ICdjaGVja0JveCdcIj57eyByb3dbY29sLmZpZWxkXSB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDxwLWNoZWNrYm94ICpuZ0lmPVwiY29sLnR5cGUgPT09ICdjaGVja0JveCdcIiBbbmdNb2RlbF09XCJyb3dbY29sLmZpZWxkXVwiIFtkaXNhYmxlZF09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgW2JpbmFyeV09XCJ0cnVlXCI+PC9wLWNoZWNrYm94PlxyXG4gICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImVtcHR5bWVzc2FnZVwiPlxyXG4gICAgICAgICAgICA8dHI+XHJcbiAgICAgICAgICAgICAgPHRkIFthdHRyLmNvbHNwYW5dPVwicHJvcGVydGllc0dyaWRDb2x1bW5zLmxlbmd0aFwiIGNsYXNzPVwidGV4dC1jZW50ZXJcIj57eydhZG1pbmlzdHJhdGlvbl9wcm9wZXJ0aWVzX2VtcHR5TWVzc2FnZScgfCBsb2NhbGl6ZX19PC90ZD5cclxuICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgPC9wLXRhYmxlPlxyXG4gICAgICA8L2Rpdj5cclxuXHJcbiAgICAgIDxkaXYgY2xhc3M9XCJwcm9wZXJ0aWVzLWdyaWQtc2VjdGlvbiBtYi0zXCI+XHJcbiAgICAgICAgPGg0IGNsYXNzPVwicHJvcGVydGllcy1ncmlkLXRpdGxlXCI+e3sgJ2FkbWluaXN0cmF0aW9uX3Byb3BlcnRpZXNfcHJvamVjdERiQ29sdW1uc190aXRsZScgfCBsb2NhbGl6ZSB9fTwvaDQ+XHJcbiAgICAgICAgPHAtdGFibGUgW3ZhbHVlXT1cInBhZ2VkRGJDb2x1bW5zXCIgc3R5bGVDbGFzcz1cInAtZGF0YXRhYmxlLXNtIHAtZGF0YXRhYmxlLWdyaWRsaW5lc1wiPlxyXG4gICAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImhlYWRlclwiPlxyXG4gICAgICAgICAgICA8dHI+XHJcbiAgICAgICAgICAgICAgPHRoICpuZ0Zvcj1cImxldCBjb2wgb2YgcHJvcGVydGllc0dyaWRDb2x1bW5zXCI+e3sgKGNvbC5oZWFkZXIgPz8gJycpIHwgbG9jYWxpemUgfX08L3RoPlxyXG4gICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJib2R5XCIgbGV0LXJvdz5cclxuICAgICAgICAgICAgPHRyPlxyXG4gICAgICAgICAgICAgIDx0ZCAqbmdGb3I9XCJsZXQgY29sIG9mIHByb3BlcnRpZXNHcmlkQ29sdW1uc1wiIFtuZ0NsYXNzXT1cImdldENvbXBhcmlzb25DbGFzcygnZGInLCByb3csIGNvbC5maWVsZClcIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiY29sLnR5cGUgIT09ICdjaGVja0JveCdcIj57eyByb3dbY29sLmZpZWxkXSB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDxUc2ktQ2hlY2tCb3ggKm5nSWY9XCJjb2wudHlwZSA9PT0gJ2NoZWNrQm94J1wiIFtuZ01vZGVsXT1cInJvd1tjb2wuZmllbGRdXCJcclxuICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cInRydWVcIj48L1RzaS1DaGVja0JveD5cclxuICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJlbXB0eW1lc3NhZ2VcIj5cclxuICAgICAgICAgICAgPHRyPlxyXG4gICAgICAgICAgICAgIDx0ZCBbYXR0ci5jb2xzcGFuXT1cInByb3BlcnRpZXNHcmlkQ29sdW1ucy5sZW5ndGhcIiBjbGFzcz1cInRleHQtY2VudGVyXCI+e3snYWRtaW5pc3RyYXRpb25fcHJvcGVydGllc19lbXB0eU1lc3NhZ2UnIHwgbG9jYWxpemV9fTwvdGQ+XHJcbiAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgIDwvcC10YWJsZT5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgICA8ZGl2IGNsYXNzPVwicHJvcGVydGllcy1ncmlkLXNlY3Rpb24gbWItM1wiPlxyXG4gICAgICAgIDxoNCBjbGFzcz1cInByb3BlcnRpZXMtZ3JpZC10aXRsZVwiPnt7ICdhZG1pbmlzdHJhdGlvbl9wcm9wZXJ0aWVzX3NxbENvbHVtbnNfdGl0bGUnIHwgbG9jYWxpemUgfX08L2g0PlxyXG4gICAgICAgIDxwLXRhYmxlIFt2YWx1ZV09XCJwYWdlZFNxbENvbHVtbnNcIiBzdHlsZUNsYXNzPVwicC1kYXRhdGFibGUtc20gcC1kYXRhdGFibGUtZ3JpZGxpbmVzXCI+XHJcbiAgICAgICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiaGVhZGVyXCI+XHJcbiAgICAgICAgICAgIDx0cj5cclxuICAgICAgICAgICAgICA8dGggKm5nRm9yPVwibGV0IGNvbCBvZiBwcm9wZXJ0aWVzR3JpZENvbHVtbnNcIj57eyAoY29sLmhlYWRlciA/PyAnJykgfCBsb2NhbGl6ZSB9fTwvdGg+XHJcbiAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImJvZHlcIiBsZXQtcm93PlxyXG4gICAgICAgICAgICA8dHI+XHJcbiAgICAgICAgICAgICAgPHRkICpuZ0Zvcj1cImxldCBjb2wgb2YgcHJvcGVydGllc0dyaWRDb2x1bW5zXCIgW25nQ2xhc3NdPVwiZ2V0Q29tcGFyaXNvbkNsYXNzKCdzcWwnLCByb3csIGNvbC5maWVsZClcIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiY29sLnR5cGUgIT09ICdjaGVja0JveCdcIj57eyByb3dbY29sLmZpZWxkXSB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDxwLWNoZWNrYm94ICpuZ0lmPVwiY29sLnR5cGUgPT09ICdjaGVja0JveCdcIiBbbmdNb2RlbF09XCJyb3dbY29sLmZpZWxkXVwiIFtkaXNhYmxlZF09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgW2JpbmFyeV09XCJ0cnVlXCI+PC9wLWNoZWNrYm94PlxyXG4gICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImVtcHR5bWVzc2FnZVwiPlxyXG4gICAgICAgICAgICA8dHI+XHJcbiAgICAgICAgICAgICAgPHRkIFthdHRyLmNvbHNwYW5dPVwicHJvcGVydGllc0dyaWRDb2x1bW5zLmxlbmd0aFwiIGNsYXNzPVwidGV4dC1jZW50ZXJcIj57eydhZG1pbmlzdHJhdGlvbl9wcm9wZXJ0aWVzX2VtcHR5TWVzc2FnZScgfCBsb2NhbGl6ZX19PC90ZD5cclxuICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgPC9wLXRhYmxlPlxyXG4gICAgICA8L2Rpdj5cclxuXHJcbiAgICAgIDxwLXBhZ2luYXRvciBbcm93c109XCJwcm9wZXJ0aWVzUGFnZVNpemVcIiBbdG90YWxSZWNvcmRzXT1cInByb3BlcnRpZXNUb3RhbFJlY29yZHNcIiBbZmlyc3RdPVwicHJvcGVydGllc0ZpcnN0XCJcclxuICAgICAgICAob25QYWdlQ2hhbmdlKT1cIm9uUHJvcGVydGllc1BhZ2VDaGFuZ2UoJGV2ZW50KVwiIFtyb3dzUGVyUGFnZU9wdGlvbnNdPVwiWzEwLCAyNSwgNTBdXCI+XHJcbiAgICAgIDwvcC1wYWdpbmF0b3I+XHJcblxyXG4gICAgICA8ZGl2IGNsYXNzPVwiY29tcGFyaXNvbi1sZWdlbmQgbXQtM1wiPlxyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwibGVnZW5kLWl0ZW0gY29tcGFyaXNvbi1taXNzaW5nLWxlZ2VuZFwiPnt7ICdhZG1pbmlzdHJhdGlvbl9wcm9wZXJ0aWVzX2NvbXBhcmlzb25fbWlzc2luZycgfCBsb2NhbGl6ZSB9fTwvc3Bhbj5cclxuICAgICAgICA8c3BhbiBjbGFzcz1cImxlZ2VuZC1pdGVtIGNvbXBhcmlzb24tdHlwZS1taXNtYXRjaC1sZWdlbmRcIj57eyAnYWRtaW5pc3RyYXRpb25fcHJvcGVydGllc19jb21wYXJpc29uX3R5cGUnIHwgbG9jYWxpemUgfX08L3NwYW4+XHJcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJsZWdlbmQtaXRlbSBjb21wYXJpc29uLWxlbmd0aC1taXNtYXRjaC1sZWdlbmRcIj57eyAnYWRtaW5pc3RyYXRpb25fcHJvcGVydGllc19jb21wYXJpc29uX2xlbmd0aCcgfCBsb2NhbGl6ZSB9fTwvc3Bhbj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L3AtdGFiUGFuZWw+XHJcbiAgPC9wLXRhYlZpZXc+XHJcblxyXG4gIDxUc2ktTW9kYWwtRm9vdGVyIFtpc0NvbnN1bHRdPVwiaXNDb25zdWx0TW9kZSgpXCIgW2NhbmNlbERpc2FibGVkXT1cInNhdmluZ1wiIFtzYXZlRGlzYWJsZWRdPVwiaXNTdWJtaXREaXNhYmxlZCgpXCJcclxuICAgIChvbkNhbmNlbENsaWNrKT1cImhpZGUoKVwiPlxyXG4gIDwvVHNpLU1vZGFsLUZvb3Rlcj5cclxuPC90c2ktZm9ybT4iXX0=
|