@tsi-developpement/tsi-shared-ui 1.11.2 → 1.11.4
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/tsi-components/create-or-edit-entity-informations/create-or-edit-entity-informations.component.mjs +3 -3
- package/esm2022/lib/tsi-components/tsi-popup-text-viewer/tsi-popup-text-viewer.component.mjs +3 -5
- package/fesm2022/tsi-developpement-tsi-shared-ui.mjs +4 -6
- package/fesm2022/tsi-developpement-tsi-shared-ui.mjs.map +1 -1
- package/lib/providers/shared-ui-tsi.provider.d.ts +1 -1
- package/package.json +1 -1
|
@@ -316,10 +316,10 @@ export class CreateOrEditEntityInformationsComponent extends TsiFormComponentBas
|
|
|
316
316
|
return comparison[field] || '';
|
|
317
317
|
}
|
|
318
318
|
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 }, { token: i3.LayoutHelperService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
319
|
-
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_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 </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_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\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_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\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_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\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-6\">\r\n <div class=\"grid\">\r\n <Tsi-Label class=\"col-4\"\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-6\">\r\n <div class=\"grid\">\r\n <Tsi-Label class=\"col-4\"\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\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_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 class=\"col-6\">\r\n <div class=\"grid\">\r\n <Tsi-Label class=\"col-4\"\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 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_calendarStartDate'\"></Tsi-Label>\r\n <Tsi-Text-Box class=\"col-8\" [inputName]=\"'CalendarStartDate'\"\r\n [(inputField)]=\"entityWithRelations.entity.calendarStartDateColumn\">\r\n </Tsi-Text-Box>\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_calendarEndDate'\"></Tsi-Label>\r\n <Tsi-Text-Box class=\"col-8\" [inputName]=\"'CalenderEndDate'\"\r\n [(inputField)]=\"entityWithRelations.entity.calendarEndDateColumn\">\r\n </Tsi-Text-Box>\r\n </div>\r\n </div>\r\n <div class=\"col-6\">\r\n <div class=\"grid\">\r\n <Tsi-Label class=\"col-4\" [labelValue]=\"'administration_gestionEntityInformation_frequent'\"></Tsi-Label>\r\n <Tsi-Text-Box class=\"col-8\" [inputName]=\"'Frequent'\"\r\n [(inputField)]=\"entityWithRelations.entity.frequent\">\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_createFunctionalityCode'\"></Tsi-Label>\r\n <Tsi-Text-Box class=\"col-8\" [inputName]=\"'CreateFunctionalityCode'\"\r\n [(inputField)]=\"entityWithRelations.entity.createFunctionalityCode\">\r\n </Tsi-Text-Box>\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_readFunctionalityCode'\"></Tsi-Label>\r\n <Tsi-Text-Box class=\"col-8\" [inputName]=\"'ReadFunctionalityCode'\"\r\n [(inputField)]=\"entityWithRelations.entity.readFunctionalityCode\">\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_updateFunctionalityCode'\"></Tsi-Label>\r\n <Tsi-Text-Box class=\"col-8\" [inputName]=\"'UpdateFunctionalityCode'\"\r\n [(inputField)]=\"entityWithRelations.entity.updateFunctionalityCode\">\r\n </Tsi-Text-Box>\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_deleteFunctionalityCode'\"></Tsi-Label>\r\n <Tsi-Text-Box class=\"col-8\" [inputName]=\"'DeleteFunctionalityCode'\"\r\n [(inputField)]=\"entityWithRelations.entity.deleteFunctionalityCode\">\r\n </Tsi-Text-Box>\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_status_transition' | localize\">\r\n <div *ngIf=\"statusTransitionsInfo && statusTransitionsInfo.transitions && statusTransitionsInfo.transitions.length > 0; else noWorkflow\">\r\n <div class=\"workflow-header mb-3\">\r\n <span class=\"font-semibold\">{{'administration_workflow_businessClass' | localize}} : </span>\r\n <span>{{ statusTransitionsInfo.businessClass }}</span>\r\n </div>\r\n <p-table [value]=\"statusTransitionsInfo.transitions\"\r\n [styleClass]=\"'p-datatable-sm p-datatable-gridlines' + (stripedRows ? ' p-datatable-striped' : '')\">\r\n <ng-template pTemplate=\"header\">\r\n <tr>\r\n <th>{{'administration_workflow_fromStatus' | localize}}</th>\r\n <th>{{'administration_workflow_toStatus' | localize}}</th>\r\n <th>{{'administration_workflow_requiredAccessRights' | localize}}</th>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"body\" let-row>\r\n <tr>\r\n <td>\r\n <span class=\"workflow-status-badge from-status\">{{ row.fromStatus }}</span>\r\n </td>\r\n <td>\r\n <span class=\"workflow-status-badge to-status\">{{ row.toStatus }}</span>\r\n </td>\r\n <td>\r\n <div class=\"workflow-access-rights\">\r\n <span *ngFor=\"let right of row.requiredAccessRights\" class=\"workflow-access-chip\">{{ right }}</span>\r\n <span *ngIf=\"!row.requiredAccessRights || row.requiredAccessRights.length === 0\" class=\"text-secondary\">\u2014</span>\r\n </div>\r\n </td>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"emptymessage\">\r\n <tr>\r\n <td colspan=\"3\" class=\"text-center\">\r\n {{'administration_workflow_noTransitions' | localize}}\r\n </td>\r\n </tr>\r\n </ng-template>\r\n </p-table>\r\n </div>\r\n <ng-template #noWorkflow>\r\n <div class=\"workflow-empty-state text-center p-4\">\r\n <i class=\"pi pi-info-circle workflow-empty-icon\"></i>\r\n <p>{{'administration_workflow_noData' | localize}}</p>\r\n </div>\r\n </ng-template>\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' + (stripedRows ? ' p-datatable-striped' : '')\">\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\">\r\n {{'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' + (stripedRows ? ' p-datatable-striped' : '')\">\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\">\r\n {{'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' + (stripedRows ? ' p-datatable-striped' : '')\">\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\">\r\n {{'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\r\n }}</span>\r\n <span class=\"legend-item comparison-type-mismatch-legend\">{{ 'administration_properties_comparison_type' |\r\n localize }}</span>\r\n <span class=\"legend-item comparison-length-mismatch-legend\">{{ 'administration_properties_comparison_length' |\r\n 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()\" [showSaveAndCloseButton]=\"false\">\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}.workflow-header{padding:.75rem 1rem;background-color:#f8f9fa;border:1px solid #dee2e6;border-radius:6px}.workflow-status-badge{display:inline-block;padding:.25rem .75rem;border-radius:4px;font-size:.85rem;font-weight:600}.workflow-status-badge.from-status{background-color:#e3f2fd;color:#1565c0;border:1px solid #90caf9}.workflow-status-badge.to-status{background-color:#e8f5e9;color:#2e7d32;border:1px solid #a5d6a7}.workflow-access-rights{display:flex;flex-wrap:wrap;gap:.35rem;align-items:center}.workflow-access-chip{display:inline-block;padding:.15rem .5rem;background-color:#fff3e0;color:#e65100;border:1px solid #ffcc80;border-radius:12px;font-size:.78rem;font-weight:500}.workflow-empty-state{color:#6c757d}.workflow-empty-state .workflow-empty-icon{font-size:2.5rem;margin-bottom:.75rem;color:#adb5bd}.workflow-empty-state p{font-size:.95rem;margin:0}\n"], dependencies: [{ kind: "directive", type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.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: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i6.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "component", type: i7.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: i8.InputText, selector: "[pInputText]", inputs: ["variant"] }, { kind: "component", type: i9.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: i10.TabView, selector: "p-tabView", inputs: ["style", "styleClass", "controlClose", "scrollable", "activeIndex", "selectOnFocus", "nextButtonAriaLabel", "prevButtonAriaLabel", "autoHideButtons", "tabindex"], outputs: ["onChange", "onClose", "activeIndexChange"] }, { kind: "component", type: i10.TabPanel, selector: "p-tabPanel", inputs: ["closable", "headerStyle", "headerStyleClass", "cache", "tooltip", "tooltipPosition", "tooltipPositionStyle", "tooltipStyleClass", "selected", "disabled", "header", "leftIcon", "rightIcon"] }, { kind: "component", type: i11.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: i12.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: i13.EditableGridComponent, selector: "Tsi-Generic-Editable-Grid", inputs: ["selectedItems", "configuration", "key", "items", "saveEvent", "showGlobalSearch", "showAddButton", "showDeleteButton", "showEditButton", "showRowSummary", "scrollHeight", "sizingMode", "rowPerPage", "pageSize", "entityPrimaryKeyName", "columns", "gridData", "isTableLoading", "parent", "showSaveButton", "showActionColumn", "enableRowDisabling", "rowSummaryConfig", "showHaveSumary", "showRowSumary", "selectKeyOnly", "selectionMode", "showConsultButton", "editableGridBusinessClass", "orderColumn", "deleteLineButtonDisabled", "showDuplicateButton", "id"], outputs: ["refreshEventEmitter", "saveDataEventEmitter", "rowChangedEventEmitter", "selectedRowEventEmitter", "addedRowEventEmitter", "focusOutEventEmitter", "cellChanged", "rowDeletedEventEmitter", "selectedItemsChange", "onRowSelect", "focusOutRow", "onConsultClicked", "rowDuplicatedEventEmitter"] }, { kind: "component", type: i14.TsiSearchComboComponent, selector: "Tsi-Search-Combo", inputs: ["elementSourceUrl", "listSourceUrl", "listSourceParams", "id-field", "label-field", "multiple", "sort", "showClear", "reloadDataSource", "isFiltered", "selectedLabel", "maxWidth", "businessClass", "searchDebounceTime", "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: i15.TsiCheckboxComponent, selector: "Tsi-CheckBox", inputs: ["class", "isBinary", "checked", "tooltipText", "tooltipPosition"], outputs: ["inputFieldChange", "checkedChange"] }, { kind: "component", type: i16.TsiTextBoxComponent, selector: "Tsi-Text-Box", inputs: ["textBoxType", "autocomplete"], outputs: ["newItemEvent", "inputFieldChange"] }, { kind: "component", type: i17.TsiLabelComponent, selector: "Tsi-Label", inputs: ["labelValue", "styleClass", "infoText"] }, { kind: "component", type: i18.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", "showHeaderFilters", "showFilterButton", "selectAll", "checkedByField", "sortMode", "sizingMode", "searchOnInit"], outputs: ["summariesChange", "selectedItemsChange", "buttonColumnClicked", "searchFieldsValueChanged", "getAllPagedResultChanged"] }, { kind: "component", type: i19.TsiModalFooterComponent, selector: "Tsi-Modal-Footer", inputs: ["cancelDisabled", "saveDisabled", "cancelLabel", "saveLabel", "isConsult", "isDuplicate", "isOnlyCreate", "additionalButtonLabel", "additionalButtonIcon", "additionalButtonDisabled", "showAdditionalButton", "showSaveAndCloseButton", "mode"], outputs: ["onCancelClick", "onSaveClick", "onAdditionalButtonClick"] }, { kind: "component", type: i20.TsiModalHeaderComponent, selector: "Tsi-Modal-Header", inputs: ["inputTitle"], outputs: ["onCloseClick"] }, { kind: "component", type: i21.TsiFormComponent, selector: "tsi-form", inputs: ["class", "autocomplete", "optionalEndpoints", "disabled", "isLoading", "modalSize", "showManageWorkflowButton", "formEndpoint", "formName", "isReportingToolbarDisabled", "isCreateOnly", "statusInputDisabled"], outputs: ["onSave", "openWorkflow", "onSubmit", "onSubmitFormWorkflowConfiguration", "formRefChange", "onStatusChange"] }, { kind: "pipe", type: i22.LocalizePipe, name: "localize" }, { kind: "pipe", type: i23.ModalLabelPipe, name: "modalLabel" }] }); }
|
|
319
|
+
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_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 </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_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\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_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\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_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\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-6\">\r\n <div class=\"grid\">\r\n <Tsi-Label class=\"col-4\"\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-6\">\r\n <div class=\"grid\">\r\n <Tsi-Label class=\"col-4\"\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\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_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 class=\"col-6\">\r\n <div class=\"grid\">\r\n <Tsi-Label class=\"col-4\"\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 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_calendarStartDate'\"></Tsi-Label>\r\n <Tsi-Text-Box class=\"col-8\" [inputName]=\"'CalendarStartDate'\"\r\n [(inputField)]=\"entityWithRelations.entity.calendarStartDateColumn\">\r\n </Tsi-Text-Box>\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_calendarEndDate'\"></Tsi-Label>\r\n <Tsi-Text-Box class=\"col-8\" [inputName]=\"'CalenderEndDate'\"\r\n [(inputField)]=\"entityWithRelations.entity.calendarEndDateColumn\">\r\n </Tsi-Text-Box>\r\n </div>\r\n </div>\r\n <div class=\"col-6\">\r\n <div class=\"grid\">\r\n <Tsi-Label class=\"col-4\" [labelValue]=\"'administration_gestionEntityInformation_frequent'\"></Tsi-Label>\r\n <Tsi-Text-Box class=\"col-8\" [inputName]=\"'Frequent'\"\r\n [(inputField)]=\"entityWithRelations.entity.frequent\">\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_createFunctionalityCode'\"></Tsi-Label>\r\n <Tsi-Text-Box class=\"col-8\" [inputName]=\"'CreateFunctionalityCode'\"\r\n [(inputField)]=\"entityWithRelations.entity.createFunctionalityCode\">\r\n </Tsi-Text-Box>\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_readFunctionalityCode'\"></Tsi-Label>\r\n <Tsi-Text-Box class=\"col-8\" [inputName]=\"'ReadFunctionalityCode'\"\r\n [(inputField)]=\"entityWithRelations.entity.readFunctionalityCode\">\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_updateFunctionalityCode'\"></Tsi-Label>\r\n <Tsi-Text-Box class=\"col-8\" [inputName]=\"'UpdateFunctionalityCode'\"\r\n [(inputField)]=\"entityWithRelations.entity.updateFunctionalityCode\">\r\n </Tsi-Text-Box>\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_deleteFunctionalityCode'\"></Tsi-Label>\r\n <Tsi-Text-Box class=\"col-8\" [inputName]=\"'DeleteFunctionalityCode'\"\r\n [(inputField)]=\"entityWithRelations.entity.deleteFunctionalityCode\">\r\n </Tsi-Text-Box>\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_status_transition' | localize\">\r\n <div *ngIf=\"statusTransitionsInfo && statusTransitionsInfo.transitions && statusTransitionsInfo.transitions.length > 0; else noWorkflow\">\r\n <div class=\"workflow-header mb-3\">\r\n <span class=\"font-semibold\">{{'administration_workflow_businessClass' | localize}} : </span>\r\n <span>{{ statusTransitionsInfo.businessClass }}</span>\r\n </div>\r\n <p-table [value]=\"statusTransitionsInfo.transitions\"\r\n [styleClass]=\"'p-datatable-sm p-datatable-gridlines' + (stripedRows ? ' p-datatable-striped' : '')\">\r\n <ng-template pTemplate=\"header\">\r\n <tr>\r\n <th>{{'administration_workflow_fromStatus' | localize}}</th>\r\n <th>{{'administration_workflow_toStatus' | localize}}</th>\r\n <th>{{'administration_workflow_requiredAccessRights' | localize}}</th>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"body\" let-row>\r\n <tr>\r\n <td>\r\n <span class=\"workflow-status-badge from-status\">{{ row.fromStatus | localize }}</span>\r\n </td>\r\n <td>\r\n <span class=\"workflow-status-badge to-status\">{{ row.toStatus | localize }}</span>\r\n </td>\r\n <td>\r\n <div class=\"workflow-access-rights\">\r\n <span *ngFor=\"let right of row.requiredAccessRights\" class=\"workflow-access-chip\">{{ right }}</span>\r\n <span *ngIf=\"!row.requiredAccessRights || row.requiredAccessRights.length === 0\" class=\"text-secondary\">\u2014</span>\r\n </div>\r\n </td>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"emptymessage\">\r\n <tr>\r\n <td colspan=\"3\" class=\"text-center\">\r\n {{'administration_workflow_noTransitions' | localize}}\r\n </td>\r\n </tr>\r\n </ng-template>\r\n </p-table>\r\n </div>\r\n <ng-template #noWorkflow>\r\n <div class=\"workflow-empty-state text-center p-4\">\r\n <i class=\"pi pi-info-circle workflow-empty-icon\"></i>\r\n <p>{{'administration_workflow_noData' | localize}}</p>\r\n </div>\r\n </ng-template>\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' + (stripedRows ? ' p-datatable-striped' : '')\">\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\">\r\n {{'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' + (stripedRows ? ' p-datatable-striped' : '')\">\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\">\r\n {{'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' + (stripedRows ? ' p-datatable-striped' : '')\">\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\">\r\n {{'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\r\n }}</span>\r\n <span class=\"legend-item comparison-type-mismatch-legend\">{{ 'administration_properties_comparison_type' |\r\n localize }}</span>\r\n <span class=\"legend-item comparison-length-mismatch-legend\">{{ 'administration_properties_comparison_length' |\r\n 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()\" [showSaveAndCloseButton]=\"false\">\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}.workflow-header{padding:.75rem 1rem;background-color:#f8f9fa;border:1px solid #dee2e6;border-radius:6px}.workflow-status-badge{display:inline-block;padding:.25rem .75rem;border-radius:4px;font-size:.85rem;font-weight:600}.workflow-status-badge.from-status{background-color:#e3f2fd;color:#1565c0;border:1px solid #90caf9}.workflow-status-badge.to-status{background-color:#e8f5e9;color:#2e7d32;border:1px solid #a5d6a7}.workflow-access-rights{display:flex;flex-wrap:wrap;gap:.35rem;align-items:center}.workflow-access-chip{display:inline-block;padding:.15rem .5rem;background-color:#fff3e0;color:#e65100;border:1px solid #ffcc80;border-radius:12px;font-size:.78rem;font-weight:500}.workflow-empty-state{color:#6c757d}.workflow-empty-state .workflow-empty-icon{font-size:2.5rem;margin-bottom:.75rem;color:#adb5bd}.workflow-empty-state p{font-size:.95rem;margin:0}\n"], dependencies: [{ kind: "directive", type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.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: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i6.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "component", type: i7.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: i8.InputText, selector: "[pInputText]", inputs: ["variant"] }, { kind: "component", type: i9.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: i10.TabView, selector: "p-tabView", inputs: ["style", "styleClass", "controlClose", "scrollable", "activeIndex", "selectOnFocus", "nextButtonAriaLabel", "prevButtonAriaLabel", "autoHideButtons", "tabindex"], outputs: ["onChange", "onClose", "activeIndexChange"] }, { kind: "component", type: i10.TabPanel, selector: "p-tabPanel", inputs: ["closable", "headerStyle", "headerStyleClass", "cache", "tooltip", "tooltipPosition", "tooltipPositionStyle", "tooltipStyleClass", "selected", "disabled", "header", "leftIcon", "rightIcon"] }, { kind: "component", type: i11.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: i12.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: i13.EditableGridComponent, selector: "Tsi-Generic-Editable-Grid", inputs: ["selectedItems", "configuration", "key", "items", "saveEvent", "showGlobalSearch", "showAddButton", "showDeleteButton", "showEditButton", "showRowSummary", "scrollHeight", "sizingMode", "rowPerPage", "pageSize", "entityPrimaryKeyName", "columns", "gridData", "isTableLoading", "parent", "showSaveButton", "showActionColumn", "enableRowDisabling", "rowSummaryConfig", "showHaveSumary", "showRowSumary", "selectKeyOnly", "selectionMode", "showConsultButton", "editableGridBusinessClass", "orderColumn", "deleteLineButtonDisabled", "showDuplicateButton", "id"], outputs: ["refreshEventEmitter", "saveDataEventEmitter", "rowChangedEventEmitter", "selectedRowEventEmitter", "addedRowEventEmitter", "focusOutEventEmitter", "cellChanged", "rowDeletedEventEmitter", "selectedItemsChange", "onRowSelect", "focusOutRow", "onConsultClicked", "rowDuplicatedEventEmitter"] }, { kind: "component", type: i14.TsiSearchComboComponent, selector: "Tsi-Search-Combo", inputs: ["elementSourceUrl", "listSourceUrl", "listSourceParams", "id-field", "label-field", "multiple", "sort", "showClear", "reloadDataSource", "isFiltered", "selectedLabel", "maxWidth", "businessClass", "searchDebounceTime", "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: i15.TsiCheckboxComponent, selector: "Tsi-CheckBox", inputs: ["class", "isBinary", "checked", "tooltipText", "tooltipPosition"], outputs: ["inputFieldChange", "checkedChange"] }, { kind: "component", type: i16.TsiTextBoxComponent, selector: "Tsi-Text-Box", inputs: ["textBoxType", "autocomplete"], outputs: ["newItemEvent", "inputFieldChange"] }, { kind: "component", type: i17.TsiLabelComponent, selector: "Tsi-Label", inputs: ["labelValue", "styleClass", "infoText"] }, { kind: "component", type: i18.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", "showHeaderFilters", "showFilterButton", "selectAll", "checkedByField", "sortMode", "sizingMode", "searchOnInit"], outputs: ["summariesChange", "selectedItemsChange", "buttonColumnClicked", "searchFieldsValueChanged", "getAllPagedResultChanged"] }, { kind: "component", type: i19.TsiModalFooterComponent, selector: "Tsi-Modal-Footer", inputs: ["cancelDisabled", "saveDisabled", "cancelLabel", "saveLabel", "isConsult", "isDuplicate", "isOnlyCreate", "additionalButtonLabel", "additionalButtonIcon", "additionalButtonDisabled", "showAdditionalButton", "showSaveAndCloseButton", "mode"], outputs: ["onCancelClick", "onSaveClick", "onAdditionalButtonClick"] }, { kind: "component", type: i20.TsiModalHeaderComponent, selector: "Tsi-Modal-Header", inputs: ["inputTitle"], outputs: ["onCloseClick"] }, { kind: "component", type: i21.TsiFormComponent, selector: "tsi-form", inputs: ["class", "autocomplete", "optionalEndpoints", "disabled", "isLoading", "modalSize", "showManageWorkflowButton", "formEndpoint", "formName", "isReportingToolbarDisabled", "isCreateOnly", "statusInputDisabled"], outputs: ["onSave", "openWorkflow", "onSubmit", "onSubmitFormWorkflowConfiguration", "formRefChange", "onStatusChange"] }, { kind: "pipe", type: i22.LocalizePipe, name: "localize" }, { kind: "pipe", type: i23.ModalLabelPipe, name: "modalLabel" }] }); }
|
|
320
320
|
}
|
|
321
321
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: CreateOrEditEntityInformationsComponent, decorators: [{
|
|
322
322
|
type: Component,
|
|
323
|
-
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_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 </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_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\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_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\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_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\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-6\">\r\n <div class=\"grid\">\r\n <Tsi-Label class=\"col-4\"\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-6\">\r\n <div class=\"grid\">\r\n <Tsi-Label class=\"col-4\"\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\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_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 class=\"col-6\">\r\n <div class=\"grid\">\r\n <Tsi-Label class=\"col-4\"\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 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_calendarStartDate'\"></Tsi-Label>\r\n <Tsi-Text-Box class=\"col-8\" [inputName]=\"'CalendarStartDate'\"\r\n [(inputField)]=\"entityWithRelations.entity.calendarStartDateColumn\">\r\n </Tsi-Text-Box>\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_calendarEndDate'\"></Tsi-Label>\r\n <Tsi-Text-Box class=\"col-8\" [inputName]=\"'CalenderEndDate'\"\r\n [(inputField)]=\"entityWithRelations.entity.calendarEndDateColumn\">\r\n </Tsi-Text-Box>\r\n </div>\r\n </div>\r\n <div class=\"col-6\">\r\n <div class=\"grid\">\r\n <Tsi-Label class=\"col-4\" [labelValue]=\"'administration_gestionEntityInformation_frequent'\"></Tsi-Label>\r\n <Tsi-Text-Box class=\"col-8\" [inputName]=\"'Frequent'\"\r\n [(inputField)]=\"entityWithRelations.entity.frequent\">\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_createFunctionalityCode'\"></Tsi-Label>\r\n <Tsi-Text-Box class=\"col-8\" [inputName]=\"'CreateFunctionalityCode'\"\r\n [(inputField)]=\"entityWithRelations.entity.createFunctionalityCode\">\r\n </Tsi-Text-Box>\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_readFunctionalityCode'\"></Tsi-Label>\r\n <Tsi-Text-Box class=\"col-8\" [inputName]=\"'ReadFunctionalityCode'\"\r\n [(inputField)]=\"entityWithRelations.entity.readFunctionalityCode\">\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_updateFunctionalityCode'\"></Tsi-Label>\r\n <Tsi-Text-Box class=\"col-8\" [inputName]=\"'UpdateFunctionalityCode'\"\r\n [(inputField)]=\"entityWithRelations.entity.updateFunctionalityCode\">\r\n </Tsi-Text-Box>\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_deleteFunctionalityCode'\"></Tsi-Label>\r\n <Tsi-Text-Box class=\"col-8\" [inputName]=\"'DeleteFunctionalityCode'\"\r\n [(inputField)]=\"entityWithRelations.entity.deleteFunctionalityCode\">\r\n </Tsi-Text-Box>\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_status_transition' | localize\">\r\n <div *ngIf=\"statusTransitionsInfo && statusTransitionsInfo.transitions && statusTransitionsInfo.transitions.length > 0; else noWorkflow\">\r\n <div class=\"workflow-header mb-3\">\r\n <span class=\"font-semibold\">{{'administration_workflow_businessClass' | localize}} : </span>\r\n <span>{{ statusTransitionsInfo.businessClass }}</span>\r\n </div>\r\n <p-table [value]=\"statusTransitionsInfo.transitions\"\r\n [styleClass]=\"'p-datatable-sm p-datatable-gridlines' + (stripedRows ? ' p-datatable-striped' : '')\">\r\n <ng-template pTemplate=\"header\">\r\n <tr>\r\n <th>{{'administration_workflow_fromStatus' | localize}}</th>\r\n <th>{{'administration_workflow_toStatus' | localize}}</th>\r\n <th>{{'administration_workflow_requiredAccessRights' | localize}}</th>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"body\" let-row>\r\n <tr>\r\n <td>\r\n <span class=\"workflow-status-badge from-status\">{{ row.fromStatus }}</span>\r\n </td>\r\n <td>\r\n <span class=\"workflow-status-badge to-status\">{{ row.toStatus }}</span>\r\n </td>\r\n <td>\r\n <div class=\"workflow-access-rights\">\r\n <span *ngFor=\"let right of row.requiredAccessRights\" class=\"workflow-access-chip\">{{ right }}</span>\r\n <span *ngIf=\"!row.requiredAccessRights || row.requiredAccessRights.length === 0\" class=\"text-secondary\">\u2014</span>\r\n </div>\r\n </td>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"emptymessage\">\r\n <tr>\r\n <td colspan=\"3\" class=\"text-center\">\r\n {{'administration_workflow_noTransitions' | localize}}\r\n </td>\r\n </tr>\r\n </ng-template>\r\n </p-table>\r\n </div>\r\n <ng-template #noWorkflow>\r\n <div class=\"workflow-empty-state text-center p-4\">\r\n <i class=\"pi pi-info-circle workflow-empty-icon\"></i>\r\n <p>{{'administration_workflow_noData' | localize}}</p>\r\n </div>\r\n </ng-template>\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' + (stripedRows ? ' p-datatable-striped' : '')\">\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\">\r\n {{'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' + (stripedRows ? ' p-datatable-striped' : '')\">\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\">\r\n {{'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' + (stripedRows ? ' p-datatable-striped' : '')\">\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\">\r\n {{'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\r\n }}</span>\r\n <span class=\"legend-item comparison-type-mismatch-legend\">{{ 'administration_properties_comparison_type' |\r\n localize }}</span>\r\n <span class=\"legend-item comparison-length-mismatch-legend\">{{ 'administration_properties_comparison_length' |\r\n 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()\" [showSaveAndCloseButton]=\"false\">\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}.workflow-header{padding:.75rem 1rem;background-color:#f8f9fa;border:1px solid #dee2e6;border-radius:6px}.workflow-status-badge{display:inline-block;padding:.25rem .75rem;border-radius:4px;font-size:.85rem;font-weight:600}.workflow-status-badge.from-status{background-color:#e3f2fd;color:#1565c0;border:1px solid #90caf9}.workflow-status-badge.to-status{background-color:#e8f5e9;color:#2e7d32;border:1px solid #a5d6a7}.workflow-access-rights{display:flex;flex-wrap:wrap;gap:.35rem;align-items:center}.workflow-access-chip{display:inline-block;padding:.15rem .5rem;background-color:#fff3e0;color:#e65100;border:1px solid #ffcc80;border-radius:12px;font-size:.78rem;font-weight:500}.workflow-empty-state{color:#6c757d}.workflow-empty-state .workflow-empty-icon{font-size:2.5rem;margin-bottom:.75rem;color:#adb5bd}.workflow-empty-state p{font-size:.95rem;margin:0}\n"] }]
|
|
323
|
+
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_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 </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_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\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_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\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_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\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-6\">\r\n <div class=\"grid\">\r\n <Tsi-Label class=\"col-4\"\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-6\">\r\n <div class=\"grid\">\r\n <Tsi-Label class=\"col-4\"\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\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_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 class=\"col-6\">\r\n <div class=\"grid\">\r\n <Tsi-Label class=\"col-4\"\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 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_calendarStartDate'\"></Tsi-Label>\r\n <Tsi-Text-Box class=\"col-8\" [inputName]=\"'CalendarStartDate'\"\r\n [(inputField)]=\"entityWithRelations.entity.calendarStartDateColumn\">\r\n </Tsi-Text-Box>\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_calendarEndDate'\"></Tsi-Label>\r\n <Tsi-Text-Box class=\"col-8\" [inputName]=\"'CalenderEndDate'\"\r\n [(inputField)]=\"entityWithRelations.entity.calendarEndDateColumn\">\r\n </Tsi-Text-Box>\r\n </div>\r\n </div>\r\n <div class=\"col-6\">\r\n <div class=\"grid\">\r\n <Tsi-Label class=\"col-4\" [labelValue]=\"'administration_gestionEntityInformation_frequent'\"></Tsi-Label>\r\n <Tsi-Text-Box class=\"col-8\" [inputName]=\"'Frequent'\"\r\n [(inputField)]=\"entityWithRelations.entity.frequent\">\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_createFunctionalityCode'\"></Tsi-Label>\r\n <Tsi-Text-Box class=\"col-8\" [inputName]=\"'CreateFunctionalityCode'\"\r\n [(inputField)]=\"entityWithRelations.entity.createFunctionalityCode\">\r\n </Tsi-Text-Box>\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_readFunctionalityCode'\"></Tsi-Label>\r\n <Tsi-Text-Box class=\"col-8\" [inputName]=\"'ReadFunctionalityCode'\"\r\n [(inputField)]=\"entityWithRelations.entity.readFunctionalityCode\">\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_updateFunctionalityCode'\"></Tsi-Label>\r\n <Tsi-Text-Box class=\"col-8\" [inputName]=\"'UpdateFunctionalityCode'\"\r\n [(inputField)]=\"entityWithRelations.entity.updateFunctionalityCode\">\r\n </Tsi-Text-Box>\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_deleteFunctionalityCode'\"></Tsi-Label>\r\n <Tsi-Text-Box class=\"col-8\" [inputName]=\"'DeleteFunctionalityCode'\"\r\n [(inputField)]=\"entityWithRelations.entity.deleteFunctionalityCode\">\r\n </Tsi-Text-Box>\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_status_transition' | localize\">\r\n <div *ngIf=\"statusTransitionsInfo && statusTransitionsInfo.transitions && statusTransitionsInfo.transitions.length > 0; else noWorkflow\">\r\n <div class=\"workflow-header mb-3\">\r\n <span class=\"font-semibold\">{{'administration_workflow_businessClass' | localize}} : </span>\r\n <span>{{ statusTransitionsInfo.businessClass }}</span>\r\n </div>\r\n <p-table [value]=\"statusTransitionsInfo.transitions\"\r\n [styleClass]=\"'p-datatable-sm p-datatable-gridlines' + (stripedRows ? ' p-datatable-striped' : '')\">\r\n <ng-template pTemplate=\"header\">\r\n <tr>\r\n <th>{{'administration_workflow_fromStatus' | localize}}</th>\r\n <th>{{'administration_workflow_toStatus' | localize}}</th>\r\n <th>{{'administration_workflow_requiredAccessRights' | localize}}</th>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"body\" let-row>\r\n <tr>\r\n <td>\r\n <span class=\"workflow-status-badge from-status\">{{ row.fromStatus | localize }}</span>\r\n </td>\r\n <td>\r\n <span class=\"workflow-status-badge to-status\">{{ row.toStatus | localize }}</span>\r\n </td>\r\n <td>\r\n <div class=\"workflow-access-rights\">\r\n <span *ngFor=\"let right of row.requiredAccessRights\" class=\"workflow-access-chip\">{{ right }}</span>\r\n <span *ngIf=\"!row.requiredAccessRights || row.requiredAccessRights.length === 0\" class=\"text-secondary\">\u2014</span>\r\n </div>\r\n </td>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"emptymessage\">\r\n <tr>\r\n <td colspan=\"3\" class=\"text-center\">\r\n {{'administration_workflow_noTransitions' | localize}}\r\n </td>\r\n </tr>\r\n </ng-template>\r\n </p-table>\r\n </div>\r\n <ng-template #noWorkflow>\r\n <div class=\"workflow-empty-state text-center p-4\">\r\n <i class=\"pi pi-info-circle workflow-empty-icon\"></i>\r\n <p>{{'administration_workflow_noData' | localize}}</p>\r\n </div>\r\n </ng-template>\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' + (stripedRows ? ' p-datatable-striped' : '')\">\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\">\r\n {{'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' + (stripedRows ? ' p-datatable-striped' : '')\">\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\">\r\n {{'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' + (stripedRows ? ' p-datatable-striped' : '')\">\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\">\r\n {{'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\r\n }}</span>\r\n <span class=\"legend-item comparison-type-mismatch-legend\">{{ 'administration_properties_comparison_type' |\r\n localize }}</span>\r\n <span class=\"legend-item comparison-length-mismatch-legend\">{{ 'administration_properties_comparison_length' |\r\n 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()\" [showSaveAndCloseButton]=\"false\">\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}.workflow-header{padding:.75rem 1rem;background-color:#f8f9fa;border:1px solid #dee2e6;border-radius:6px}.workflow-status-badge{display:inline-block;padding:.25rem .75rem;border-radius:4px;font-size:.85rem;font-weight:600}.workflow-status-badge.from-status{background-color:#e3f2fd;color:#1565c0;border:1px solid #90caf9}.workflow-status-badge.to-status{background-color:#e8f5e9;color:#2e7d32;border:1px solid #a5d6a7}.workflow-access-rights{display:flex;flex-wrap:wrap;gap:.35rem;align-items:center}.workflow-access-chip{display:inline-block;padding:.15rem .5rem;background-color:#fff3e0;color:#e65100;border:1px solid #ffcc80;border-radius:12px;font-size:.78rem;font-weight:500}.workflow-empty-state{color:#6c757d}.workflow-empty-state .workflow-empty-icon{font-size:2.5rem;margin-bottom:.75rem;color:#adb5bd}.workflow-empty-state p{font-size:.95rem;margin:0}\n"] }]
|
|
324
324
|
}], ctorParameters: () => [{ type: i1.EntityConfigurationService }, { type: i1.ErrorResponseManagerService }, { type: i2.DynamicDialogRef }, { type: i2.DynamicDialogConfig }, { type: i1.TsiNotificationService }, { type: i1.TsiConfirmationService }, { type: i1.ApiExplorerService }, { type: i3.LayoutHelperService }] });
|
|
325
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLW9yLWVkaXQtZW50aXR5LWluZm9ybWF0aW9ucy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90c2ktc2hhcmVkLXVpL3NyYy9saWIvdHNpLWNvbXBvbmVudHMvY3JlYXRlLW9yLWVkaXQtZW50aXR5LWluZm9ybWF0aW9ucy9jcmVhdGUtb3ItZWRpdC1lbnRpdHktaW5mb3JtYXRpb25zLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RzaS1zaGFyZWQtdWkvc3JjL2xpYi90c2ktY29tcG9uZW50cy9jcmVhdGUtb3ItZWRpdC1lbnRpdHktaW5mb3JtYXRpb25zL2NyZWF0ZS1vci1lZGl0LWVudGl0eS1pbmZvcm1hdGlvbnMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUxQyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDMUQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDakUsT0FBTyxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFaEQsT0FBTyxFQUE4Qix1QkFBdUIsRUFBRSxvQ0FBb0MsRUFBa0MsTUFBTSxjQUFjLENBQUM7QUFHekosT0FBTyxFQUFFLDZCQUE2QixFQUFFLE1BQU0saUVBQWlFLENBQUM7QUFDaEgsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDdkQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLE1BQU0sQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQVNoQyxNQUFNLE9BQU8sdUNBQXdDLFNBQVEsNkJBQTZCO0lBZ0R4RixZQUNTLDBCQUFzRCxFQUNyRCw0QkFBeUQsRUFDakQsR0FBcUIsRUFDckIsTUFB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QyxDQUFDLENBQUMsSUFBSSxDQUFDLGVBQWU7Z0JBQ3hDLENBQUMsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUM7UUFDbEMsTUFBTSxVQUFVLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7UUFDbkQsSUFBSSxDQUFDLFVBQVU7WUFBRSxPQUFPLEVBQUUsQ0FBQztRQUMzQixPQUFPLFVBQVUsQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDakMsQ0FBQzsrR0F4VlUsdUNBQXVDO21HQUF2Qyx1Q0FBdUMsaUVBRnZDLENBQUMsR0FBRyxZQUFZLENBQUMsaURDcEI5Qix5cXVCQXFjVzs7NEZEL2FFLHVDQUF1QztrQkFObkQsU0FBUzsrQkFDRSx3Q0FBd0MsYUFHdkMsQ0FBQyxHQUFHLFlBQVksQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEtleVZhbHVlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgSHR0cEVycm9yUmVzcG9uc2UgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7IENvbXBvbmVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBEeW5hbWljRGlhbG9nQ29uZmlnLCBEeW5hbWljRGlhbG9nUmVmIH0gZnJvbSAncHJpbWVuZy9keW5hbWljZGlhbG9nJztcclxuaW1wb3J0IHsgYXBwUHJvdmlkZXJzIH0gZnJvbSAnLi4vLi4vY29uc3RzL2FwcC1wcm92aWRlcnMnO1xyXG5pbXBvcnQgeyBMb2NhbGl6YXRpb25LZXlzIH0gZnJvbSAnLi4vLi4vY29uc3RzL2xvY2FsaXphdGlvbi1rZXknO1xyXG5pbXBvcnQgeyBJbnB1dFR5cGVzLCBNb2RlcyB9IGZyb20gJy4uLy4uL2VudW1zJztcclxuaW1wb3J0IHsgR3JpZENvbHVtbiB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMnO1xyXG5pbXBvcnQgeyBFbnRpdHlDb2x1bW5EZXRhaWxSZXNwb25zZSwgRW50aXR5SW5mb1dpdGhSZWxhdGlvbnMsIFVwZGF0ZUVudGl0eUluZm9XaXRoUmVsYXRpb25zUmVxdWVzdCwgU3RhdHVzVHJhbnNpdGlvbnNJbmZvUmVzcG9uc2UgIH0gZnJvbSAnLi4vLi4vbW9kZWxzJztcclxuaW1wb3J0IHsgRW5kcG9pbnRJbmZvcyB9IGZyb20gJy4uLy4uL21vZGVscy9hcHBsaWNhdGlvbi9jb25maWd1cmF0aW9uL2VuZHBvaW50LWluZm9zJztcclxuaW1wb3J0IHsgQXBpRXhwbG9yZXJTZXJ2aWNlLCBFbnRpdHlDb25maWd1cmF0aW9uU2VydmljZSwgRXJyb3JSZXNwb25zZU1hbmFnZXJTZXJ2aWNlLCBUc2lDb25maXJtYXRpb25TZXJ2aWNlLCBUc2lOb3RpZmljYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMnO1xyXG5pbXBvcnQgeyBUc2lGb3JtQ29tcG9uZW50QmFzZUNvbXBvbmVudCB9IGZyb20gJy4uLy4uL3RzaS1iYXNlL2NvbXBvbmVudHMvdHNpLWZvcm0tYmFzZS90c2ktZm9ybS1iYXNlLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFR5cGVSZWdpc3RyeUhlbHBlciB9IGZyb20gJy4uLy4uL3RzaS1oZWxwZXJzJztcclxuaW1wb3J0IHsgZm9ya0pvaW4gfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgTGF5b3V0SGVscGVyU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2xheW91dC9sYXlvdXQtaGVscGVyLnNlcnZpY2UnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdhcHAtY3JlYXRlLW9yLWVkaXQtZW50aXR5LWluZm9ybWF0aW9ucycsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2NyZWF0ZS1vci1lZGl0LWVudGl0eS1pbmZvcm1hdGlvbnMuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsOiAnLi9jcmVhdGUtb3ItZWRpdC1lbnRpdHktaW5mb3JtYXRpb25zLmNvbXBvbmVudC5zY3NzJyxcclxuICBwcm92aWRlcnM6IFsuLi5hcHBQcm92aWRlcnNdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDcmVhdGVPckVkaXRFbnRpdHlJbmZvcm1hdGlvbnNDb21wb25lbnQgZXh0ZW5kcyBUc2lGb3JtQ29tcG9uZW50QmFzZUNvbXBvbmVudCB7XHJcbiAgZW50aXR5V2l0aFJlbGF0aW9uczogRW50aXR5SW5mb1dpdGhSZWxhdGlvbnMgPSBuZXcgRW50aXR5SW5mb1dpdGhSZWxhdGlvbnMoKTtcclxuICBrZXlDb2x1bW5PcHRpb25zOiBLZXlWYWx1ZTxzdHJpbmcsIHN0cmluZz5bXSA9IFtdO1xyXG4gIGVuZHBvaW50SW5mb3M6IEVuZHBvaW50SW5mb3NbXSA9IFtdO1xyXG4gIHN0YXR1c1RyYW5zaXRpb25zSW5mbzogU3RhdHVzVHJhbnNpdGlvbnNJbmZvUmVzcG9uc2UgIHwgbnVsbCA9IG51bGw7XHJcbiAgY29tcG9uZW50c09wdGlvbnM6IEtleVZhbHVlPHN0cmluZywgc3RyaW5nPltdID0gVHlwZVJlZ2lzdHJ5SGVscGVyLmdldEJ1c2luZXNzQ29tcG9uZW50TGlzdCgpO1xyXG5cclxuICB1aWQ/OiBzdHJpbmc7XHJcbiAgbW9kZWxDb2x1bW5zRGF0YTogRW50aXR5Q29sdW1uRGV0YWlsUmVzcG9uc2VbXSA9IFtdO1xyXG4gIGRiQ29sdW1uc0RhdGE6IEVudGl0eUNvbHVtbkRldGFpbFJlc3BvbnNlW10gPSBbXTtcclxuICBzcWxDb2x1bW5zRGF0YTogRW50aXR5Q29sdW1uRGV0YWlsUmVzcG9uc2VbXSA9IFtdO1xyXG5cclxuICBwcm9wZXJ0aWVzU2VhcmNoVGV4dDogc3RyaW5nID0gJyc7XHJcbiAgcHJvcGVydGllc0ZpcnN0OiBudW1iZXIgPSAwO1xyXG4gIHByb3BlcnRpZXNQYWdlU2l6ZTogbnVtYmVyID0gMTA7XHJcblxyXG4gIG1vZGVsQ29tcGFyaXNvbk1hcDogTWFwPHN0cmluZywgUmVjb3JkPHN0cmluZywgc3RyaW5nPj4gPSBuZXcgTWFwKCk7XHJcbiAgZGJDb21wYXJpc29uTWFwOiBNYXA8c3RyaW5nLCBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+PiA9IG5ldyBNYXAoKTtcclxuICBzcWxDb21wYXJpc29uTWFwOiBNYXA8c3RyaW5nLCBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+PiA9IG5ldyBNYXAoKTtcclxuXHJcbiAgcHJvcGVydGllc0dyaWRDb2x1bW5zOiBBcnJheTxHcmlkQ29sdW1uPiA9IFtcclxuICAgIHsgaGVhZGVyOiAnYWRtaW5pc3RyYXRpb25fcHJvcGVydGllc19uYW1lJywgZmllbGQ6ICduYW1lJyB9LFxyXG4gICAgeyBoZWFkZXI6ICdhZG1pbmlzdHJhdGlvbl9wcm9wZXJ0aWVzX3R5cGUnLCBmaWVsZDogJ3R5cGUnIH0sXHJcbiAgICB7IGhlYWRlcjogJ2FkbWluaXN0cmF0aW9uX3Byb3BlcnRpZXNfaXNOdWxsYWJsZScsIGZpZWxkOiAnaXNOdWxsYWJsZScsIHR5cGU6IElucHV0VHlwZXMuQ0hFQ0tCT1ggfSxcclxuICAgIHsgaGVhZGVyOiAnYWRtaW5pc3RyYXRpb25fcHJvcGVydGllc19tYXhMZW5ndGgnLCBmaWVsZDogJ21heExlbmd0aCcgfVxyXG4gIF07XHJcblxyXG4gIHBlcm1pc3Npb25zR3JpZENvbHVtbnM6IEFycmF5PEdyaWRDb2x1bW4+ID0gW1xyXG4gICAgeyBoZWFkZXI6ICdhZG1pbmlzdHJhdGlvbl9wZXJtaXNzaW9uc19odHRwTWV0aG9kJywgZmllbGQ6ICdodHRwTWV0aG9kJyB9LFxyXG4gICAgeyBoZWFkZXI6ICdhZG1pbmlzdHJhdGlvbl9wZXJtaXNzaW9uc19yb3V0ZScsIGZpZWxkOiAncm91dGUnIH0sXHJcbiAgICB7IGhlYWRlcjogJ2FkbWluaXN0cmF0aW9uX3Blcm1pc3Npb25zX2FjY2Vzc1JpZ2h0cycsIGZpZWxkOiAnYWNjZXNzUmlnaHRzJyB9LFxyXG4gICAgeyBoZWFkZXI6ICdhZG1pbmlzdHJhdGlvbl9wZXJtaXNzaW9uc19tZXRob2ROYW1lJywgZmllbGQ6ICdtZXRob2ROYW1lJyB9XHJcbiAgXTtcclxuXHJcbiAgd29ya2Zsb3dHcmlkQ29sdW1uczogQXJyYXk8R3JpZENvbHVtbj4gPSBbXHJcbiAgICB7IGhlYWRlcjogJ2FkbWluaXN0cmF0aW9uX3dvcmtmbG93X2Zyb21TdGF0dXMnLCBmaWVsZDogJ2Zyb21TdGF0dXMnIH0sXHJcbiAgICB7IGhlYWRlcjogJ2FkbWluaXN0cmF0aW9uX3dvcmtmbG93X3RvU3RhdHVzJywgZmllbGQ6ICd0b1N0YXR1cycgfSxcclxuICAgIHsgaGVhZGVyOiAnYWRtaW5pc3RyYXRpb25fd29ya2Zsb3dfcmVxdWlyZWRBY2Nlc3NSaWdodHMnLCBmaWVsZDogJ3JlcXVpcmVkQWNjZXNzUmlnaHRzJyB9XHJcbiAgXTtcclxuXHJcblxyXG4gIGVudGl0aWVzUmVsYXRpb25zQ29sdW1uczogQXJyYXk8R3JpZENvbHVtbj4gPSBbXHJcbiAgICB7IGhlYWRlcjogJ2FkbWluaXN0cmF0aW9uX2VudGl0eVJlbGF0aW9uc19lbnRpdHlGcm9tJywgZmllbGQ6ICdlbnRpdHlGcm9tJywgZGlzYWJsZWQ6IHRydWUgfSxcclxuICAgIHsgaGVhZGVyOiAnYWRtaW5pc3RyYXRpb25fZW50aXR5UmVsYXRpb25zX2VudGl0eVRvJywgZmllbGQ6ICdlbnRpdHlUbycgfSxcclxuICAgIHsgaGVhZGVyOiAnYWRtaW5pc3RyYXRpb25fZW50aXR5UmVsYXRpb25zX2xvZ0Nhc2NhZGUnLCBmaWVsZDogJ2xvZ0Nhc2NhZGUnLCB0eXBlOiBJbnB1dFR5cGVzLkNIRUNLQk9YIH0sXHJcbiAgICB7IGhlYWRlcjogJ2FkbWluaXN0cmF0aW9uX2VudGl0eVJlbGF0aW9uc19kdXBsaWNhdGVDYXNjYWRlJywgZmllbGQ6ICdkdXBsaWNhdGVDYXNjYWRlJywgdHlwZTogSW5wdXRUeXBlcy5DSEVDS0JPWCB9LFxyXG4gICAgeyBoZWFkZXI6ICdhZG1pbmlzdHJhdGlvbl9lbnRpdHlSZWxhdGlvbnNfZGVsZXRlQmVoYXZpb3VyJywgZmllbGQ6ICdkZWxldGVCZWhhdmlvdXInIH1cclxuICBdXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwdWJsaWMgX2VudGl0eUluZm9ybWF0aW9uc1NlcnZpY2U6IEVudGl0eUNvbmZpZ3VyYXRpb25TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfZXJyb3JSZXNwb25zZU1hbmFnZXJTZXJ2aWNlOiBFcnJvclJlc3BvbnNlTWFuYWdlclNlcnZpY2UsXHJcbiAgICBwdWJsaWMgb3ZlcnJpZGUgcmVmOiBEeW5hbWljRGlhbG9nUmVmLFxyXG4gICAgcHVibGljIG92ZXJyaWRlIGNvbmZpZzogRHluYW1pY0RpYWxvZ0NvbmZpZyxcclxuICAgIHByaXZhdGUgX25vdGlmaWNhdGlvblNlcnZpY2U6IFRzaU5vdGlmaWNhdGlvblNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9jb25maXJtYXRpb25TZXJ2aWNlOiBUc2lDb25maXJtYXRpb25TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfYXBpRXhwbG9yZXJTZXJ2aWNlOiBBcGlFeHBsb3JlclNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9zdHJpcGVkUm93c0xheW91dEhlbHBlclNlcnZpY2U6IExheW91dEhlbHBlclNlcnZpY2UpIHtcclxuICAgIHN1cGVyKHJlZiwgY29uZmlnKTtcclxuICB9XHJcblxyXG4gIGdldCBzdHJpcGVkUm93cygpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl9zdHJpcGVkUm93c0xheW91dEhlbHBlclNlcnZpY2UubGF5b3V0Q29uZmlndXJhdGlvbi5pc1N0cmlwZWRSb3dzRW5hYmxlZDtcclxuICB9XHJcblxyXG4gIGdldENvbG9ubmVzQnlDbGFzc05hbWVBc0tleVZhbHVlUGFpcihjbGFzc05hbWU/OiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGlmIChjbGFzc05hbWUpIHtcclxuICAgICAgdGhpcy5fZW50aXR5SW5mb3JtYXRpb25zU2VydmljZS5nZXRDb2xvbm5lc0J5Q2xhc3NOYW1lQXNLZXlWYWx1ZVBhaXIoY2xhc3NOYW1lKVxyXG4gICAgICAgIC5zdWJzY3JpYmUoY29sdW1ucyA9PiB7XHJcbiAgICAgICAgICB0aGlzLmtleUNvbHVtbk9wdGlvbnMgPSBjb2x1bW5zO1xyXG4gICAgICAgICAgdGhpcy5lbnRpdHlXaXRoUmVsYXRpb25zLnJlbGF0aW9ucy5tYXAoZXIgPT4gZXIuZW50aXR5RnJvbSA9IGNsYXNzTmFtZSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRQZXJtaXNzaW9uc0J5Q2xhc3NOYW1lKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuaWQpIHtcclxuICAgICAgdGhpcy5fYXBpRXhwbG9yZXJTZXJ2aWNlLmdldEVuZHBvaW50c0luZm9zKHRoaXMuaWQpLnN1YnNjcmliZSh7XHJcbiAgICAgICAgbmV4dDogKGVuZHBvaW50c0luZm9zKSA9PiB7XHJcbiAgICAgICAgICBpZiAoZW5kcG9pbnRzSW5mb3MgJiYgQXJyYXkuaXNBcnJheShlbmRwb2ludHNJbmZvcykgJiYgZW5kcG9pbnRzSW5mb3MubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICB0aGlzLmVuZHBvaW50SW5mb3MgPSBlbmRwb2ludHNJbmZvcztcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIGVycm9yOiAoZXJyb3IpID0+IHtcclxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGZldGNoaW5nIHBlcm1pc3Npb25zOicsIGVycm9yKTtcclxuICAgICAgICAgIHRoaXMuX2Vycm9yUmVzcG9uc2VNYW5hZ2VyU2VydmljZS5zaG93RXJyb3JNZXNzYWdlKGVycm9yKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0U3RhdHVzVHJhbnNpdGlvbnNJbmZvQnlDbGFzc05hbWUoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5pZCkge1xyXG4gICAgICB0aGlzLl9hcGlFeHBsb3JlclNlcnZpY2UuZ2V0U3RhdHVzVHJhbnNpdGlvbkluZm8odGhpcy5pZCkuc3Vic2NyaWJlKHtcclxuICAgICAgICBuZXh0OiAoc3RhdHVzVHJhbnNpdGlvbnNJbmZvKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnN0YXR1c1RyYW5zaXRpb25zSW5mbyA9IHN0YXR1c1RyYW5zaXRpb25zSW5mbyA/PyBudWxsO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZXJyb3I6IChlcnJvcikgPT4ge1xyXG4gICAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgZmV0Y2hpbmcgc3RhdHVzIHRyYW5zaXRpb25zIGluZm86JywgZXJyb3IpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvdmVycmlkZSBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHN1cGVyLm5nT25Jbml0KCk7XHJcbiAgICB0aGlzLmdldENvbG9ubmVzQnlDbGFzc05hbWVBc0tleVZhbHVlUGFpcih0aGlzLmlkKTtcclxuICAgIHRoaXMuZ2V0UGVybWlzc2lvbnNCeUNsYXNzTmFtZSgpO1xyXG4gICAgdGhpcy5nZXRTdGF0dXNUcmFuc2l0aW9uc0luZm9CeUNsYXNzTmFtZSgpO1xyXG4gICAgdGhpcy5nZXRQcm9wZXJ0aWVzRGF0YSgpO1xyXG4gICAgaWYgKFxyXG4gICAgICAodGhpcy5tb2RlID09PSBNb2Rlcy5lZGl0IHx8IHRoaXMubW9kZSA9PT0gTW9kZXMuZGVsZXRlIHx8IHRoaXMubW9kZSA9PT0gTW9kZXMuY29uc3VsdCkgJiZcclxuICAgICAgdGhpcy5pZCAhPT0gdW5kZWZpbmVkICYmXHJcbiAgICAgIHRoaXMuaWQgIT09IG51bGxcclxuICAgICkge1xyXG4gICAgICB0aGlzLmlzbG9hZGluZyA9IHRydWU7XHJcbiAgICAgIHRoaXMuX2VudGl0eUluZm9ybWF0aW9uc1NlcnZpY2UuZ2V0RW50aXR5SW5mb3JtYXRpb25zQW5kUmVsYXRpb25zKHRoaXMuaWQpLnN1YnNjcmliZSh7XHJcbiAgICAgICAgbmV4dDogKGRhdGEpID0+IHtcclxuICAgICAgICAgIHRoaXMuZW50aXR5V2l0aFJlbGF0aW9ucyA9IGRhdGE7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBlcnJvcjogKGVycm9yKSA9PiB7XHJcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBmZXRjaGluZyBlbnRpdHlJbmZvcm1hdGlvbjonLCBlcnJvcik7XHJcbiAgICAgICAgICB0aGlzLl9lcnJvclJlc3BvbnNlTWFuYWdlclNlcnZpY2Uuc2hvd0Vycm9yTWVzc2FnZShlcnJvcik7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBjb21wbGV0ZTogKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5pc2xvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb3ZlcnJpZGUgc2F2ZSgpOiB2b2lkIHtcclxuICAgIHN1cGVyLnNhdmUoKVxyXG4gICAgdGhpcy5zYXZpbmcgPSBmYWxzZTtcclxuICAgIHRoaXMuaXNsb2FkaW5nID0gdHJ1ZTtcclxuXHJcbiAgICBpZiAodGhpcy5tb2RlID09PSBNb2Rlcy5jcmVhdGUpIHtcclxuICAgICAgdGhpcy5fZW50aXR5SW5mb3JtYXRpb25zU2VydmljZS5jcmVhdGUodGhpcy5lbnRpdHlXaXRoUmVsYXRpb25zKS5zdWJzY3JpYmUoe1xyXG4gICAgICAgIG5leHQ6ICgpID0+IHtcclxuICAgICAgICAgIHRoaXMuX25vdGlmaWNhdGlvblNlcnZpY2UuaW5mbyh0aGlzLmwoTG9jYWxpemF0aW9uS2V5cy5zYXZlZFN1Y2Nlc3NmdWxseSkpO1xyXG4gICAgICAgICAgdGhpcy5oaWRlKHRydWUpO1xyXG4gICAgICAgICAgdGhpcy5vblNhdmUuZW1pdCgpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZXJyb3I6IChyZXNwb25zZTogSHR0cEVycm9yUmVzcG9uc2UpID0+IHtcclxuICAgICAgICAgIHRoaXMuc2F2aW5nID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLmlzbG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy5fZXJyb3JSZXNwb25zZU1hbmFnZXJTZXJ2aWNlLnNob3dFcnJvck1lc3NhZ2UocmVzcG9uc2UpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgY29tcGxldGU6ICgpID0+IHtcclxuICAgICAgICAgIHRoaXMuaXNsb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIGlmIChcclxuICAgICAgdGhpcy5tb2RlID09PSBNb2Rlcy5lZGl0XHJcbiAgICAgICYmIHRoaXMuZW50aXR5V2l0aFJlbGF0aW9uc1xyXG4gICAgICAmJiB0aGlzLmVudGl0eVdpdGhSZWxhdGlvbnMuZW50aXR5LmNsYXNzTmFtZVxyXG4gICAgKSB7XHJcbiAgICAgIGxldCB1cGRhdGVFbnRpdHlJbmZvV2l0aFJlbGF0aW9uc1JlcXVlc3QgPSBuZXcgVXBkYXRlRW50aXR5SW5mb1dpdGhSZWxhdGlvbnNSZXF1ZXN0KHRoaXMuaWQgPz8gJycsIHRoaXMuZW50aXR5V2l0aFJlbGF0aW9ucy5lbnRpdHksIHRoaXMuZW50aXR5V2l0aFJlbGF0aW9ucy5yZWxhdGlvbnMpO1xyXG4gICAgICB0aGlzLl9lbnRpdHlJbmZvcm1hdGlvbnNTZXJ2aWNlLnVwZGF0ZSh1cGRhdGVFbnRpdHlJbmZvV2l0aFJlbGF0aW9uc1JlcXVlc3QpLnN1YnNjcmliZSh7XHJcbiAgICAgICAgbmV4dDogKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5fbm90aWZpY2F0aW9uU2VydmljZS5pbmZvKHRoaXMubChMb2NhbGl6YXRpb25LZXlzLnVwZGF0ZWRTdWNjZXNzZnVsbHkpKTtcclxuICAgICAgICAgIHRoaXMuaGlkZSh0cnVlKTtcclxuICAgICAgICAgIHRoaXMub25TYXZlLmVtaXQoKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGVycm9yOiAocmVzcG9uc2U6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnNhdmluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy5pc2xvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMuX2Vycm9yUmVzcG9uc2VNYW5hZ2VyU2VydmljZS5zaG93RXJyb3JNZXNzYWdlKHJlc3BvbnNlKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGNvbXBsZXRlOiAoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmlzbG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAodGhpcy5tb2RlID09PSBNb2Rlcy5kZWxldGUpIHtcclxuICAgICAgdGhpcy5fY29uZmlybWF0aW9uU2VydmljZS5jb25maXJtKFxyXG4gICAgICAgIExvY2FsaXphdGlvbktleXMuY29uZmlybURlbGV0ZSxcclxuICAgICAgICB1bmRlZmluZWQsXHJcbiAgICAgICAgKHJlc3VsdDogYm9vbGVhbikgPT4ge1xyXG4gICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICByZXN1bHRcclxuICAgICAgICAgICAgJiYgdGhpcy5lbnRpdHlXaXRoUmVsYXRpb25zLmVudGl0eS5jbGFzc05hbWVcclxuICAgICAgICAgICkge1xyXG4gICAgICAgICAgICB0aGlzLl9lbnRpdHlJbmZvcm1hdGlvbnNTZXJ2aWNlLmRlbGV0ZSh0aGlzLmlkID8/ICcnKS5zdWJzY3JpYmUoe1xyXG4gICAgICAgICAgICAgIG5leHQ6ICgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX25vdGlmaWNhdGlvblNlcnZpY2Uuc3VjY2Vzcyh0aGlzLmwoTG9jYWxpemF0aW9uS2V5cy5kZWxldGVkU3VjY2Vzc2Z1bGx5KSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmhpZGUodHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm9uU2F2ZS5lbWl0KCk7XHJcbiAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICBlcnJvcjogKHJlc3BvbnNlOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fZXJyb3JSZXNwb25zZU1hbmFnZXJTZXJ2aWNlLnNob3dFcnJvck1lc3NhZ2UocmVzcG9uc2UpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zYXZpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIHRoaXMuaXNsb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICBjb21wbGV0ZTogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pc2xvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldFByb3BlcnRpZXNEYXRhKCk6IHZvaWQge1xyXG4gICAgdGhpcy5pc2xvYWRpbmcgPSB0cnVlO1xyXG4gICAgaWYgKHRoaXMuaWQpIHtcclxuICAgICAgZm9ya0pvaW4oe1xyXG4gICAgICAgIG1vZGVsQ29sdW1uczogdGhpcy5fZW50aXR5SW5mb3JtYXRpb25zU2VydmljZS5nZXRFbnRpdHljb2x1bW5zRnJvbU1vZGVscyh0aGlzLmlkKSxcclxuICAgICAgICBkYkNvbHVtbnM6IHRoaXMuX2VudGl0eUluZm9ybWF0aW9uc1NlcnZpY2UuZ2V0Q29sdW1uc0Zyb21Qcm9qZWN0RGF0YWJhc2UodGhpcy5pZCksXHJcbiAgICAgICAgc3FsQ29sdW1uczogdGhpcy5fZW50aXR5SW5mb3JtYXRpb25zU2VydmljZS5nZXRTcWxDb2x1bW5zKHRoaXMuaWQpXHJcbiAgICAgIH0pLnN1YnNjcmliZSh7XHJcbiAgICAgICAgbmV4dDogKHsgbW9kZWxDb2x1bW5zLCBkYkNvbHVtbnMsIHNxbENvbHVtbnMgfSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5tb2RlbENvbHVtbnNEYXRhID0gbW9kZWxDb2x1bW5zID8/IFtdO1xyXG4gICAgICAgICAgdGhpcy5kYkNvbHVtbnNEYXRhID0gZGJDb2x1bW5zID8/IFtdO1xyXG4gICAgICAgICAgdGhpcy5zcWxDb2x1bW5zRGF0YSA9IHNxbENvbHVtbnMgPz8gW107XHJcbiAgICAgICAgICB0aGlzLmNvbXB1dGVDb21wYXJpc29ucygpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgY29tcGxldGU6ICgpID0+IHtcclxuICAgICAgICAgIHRoaXMuaXNsb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBlcnJvcjogKGVycm9yKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmlzbG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgZmV0Y2hpbmcgcHJvcGVydGllcyBkYXRhOicsIGVycm9yKTtcclxuICAgICAgICAgIHRoaXMuX2Vycm9yUmVzcG9uc2VNYW5hZ2VyU2VydmljZS5zaG93RXJyb3JNZXNzYWdlKGVycm9yKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25BZGRSZWxhdGlvbigpOiB2b2lkIHtcclxuICAgIHRoaXMuZW50aXR5V2l0aFJlbGF0aW9ucy5yZWxhdGlvbnMubWFwKGVyID0+IGVyLmVudGl0eUZyb20gPSB0aGlzLmVudGl0eVdpdGhSZWxhdGlvbnMuZW50aXR5LmNsYXNzTmFtZSA/PyAnJyk7XHJcbiAgfVxyXG5cclxuXHJcbiAgcHJpdmF0ZSBmaWx0ZXJDb2x1bW5zKGRhdGE6IEVudGl0eUNvbHVtbkRldGFpbFJlc3BvbnNlW10pOiBFbnRpdHlDb2x1bW5EZXRhaWxSZXNwb25zZVtdIHtcclxuICAgIGlmICghdGhpcy5wcm9wZXJ0aWVzU2VhcmNoVGV4dCkgcmV0dXJuIGRhdGE7XHJcbiAgICBjb25zdCBzZWFyY2ggPSB0aGlzLnByb3BlcnRpZXNTZWFyY2hUZXh0LnRvTG93ZXJDYXNlKCk7XHJcbiAgICByZXR1cm4gZGF0YS5maWx0ZXIoY29sID0+XHJcbiAgICAgIGNvbC5uYW1lLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoc2VhcmNoKSB8fFxyXG4gICAgICBjb2wudHlwZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHNlYXJjaClcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBnZXQgZmlsdGVyZWRNb2RlbENvbHVtbnMoKTogRW50aXR5Q29sdW1uRGV0YWlsUmVzcG9uc2VbXSB7XHJcbiAgICByZXR1cm4gdGhpcy5maWx0ZXJDb2x1bW5zKHRoaXMubW9kZWxDb2x1bW5zRGF0YSk7XHJcbiAgfVxyXG5cclxuICBnZXQgZmlsdGVyZWREYkNvbHVtbnMoKTogRW50aXR5Q29sdW1uRGV0YWlsUmVzcG9uc2VbXSB7XHJcbiAgICByZXR1cm4gdGhpcy5maWx0ZXJDb2x1bW5zKHRoaXMuZGJDb2x1bW5zRGF0YSk7XHJcbiAgfVxyXG5cclxuICBnZXQgZmlsdGVyZWRTcWxDb2x1bW5zKCk6IEVudGl0eUNvbHVtbkRldGFpbFJlc3BvbnNlW10ge1xyXG4gICAgcmV0dXJuIHRoaXMuZmlsdGVyQ29sdW1ucyh0aGlzLnNxbENvbHVtbnNEYXRhKTtcclxuICB9XHJcblxyXG4gIGdldCBwcm9wZXJ0aWVzVG90YWxSZWNvcmRzKCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gTWF0aC5tYXgoXHJcbiAgICAgIHRoaXMuZmlsdGVyZWRNb2RlbENvbHVtbnMubGVuZ3RoLFxyXG4gICAgICB0aGlzLmZpbHRlcmVkRGJDb2x1bW5zLmxlbmd0aCxcclxuICAgICAgdGhpcy5maWx0ZXJlZFNxbENvbHVtbnMubGVuZ3RoXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgZ2V0IHBhZ2VkTW9kZWxDb2x1bW5zKCk6IEVudGl0eUNvbHVtbkRldGFpbFJlc3BvbnNlW10ge1xyXG4gICAgcmV0dXJuIHRoaXMuZmlsdGVyZWRNb2RlbENvbHVtbnMuc2xpY2UodGhpcy5wcm9wZXJ0aWVzRmlyc3QsIHRoaXMucHJvcGVydGllc0ZpcnN0ICsgdGhpcy5wcm9wZXJ0aWVzUGFnZVNpemUpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IHBhZ2VkRGJDb2x1bW5zKCk6IEVudGl0eUNvbHVtbkRldGFpbFJlc3BvbnNlW10ge1xyXG4gICAgcmV0dXJuIHRoaXMuZmlsdGVyZWREYkNvbHVtbnMuc2xpY2UodGhpcy5wcm9wZXJ0aWVzRmlyc3QsIHRoaXMucHJvcGVydGllc0ZpcnN0ICsgdGhpcy5wcm9wZXJ0aWVzUGFnZVNpemUpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IHBhZ2VkU3FsQ29sdW1ucygpOiBFbnRpdHlDb2x1bW5EZXRhaWxSZXNwb25zZVtdIHtcclxuICAgIHJldHVybiB0aGlzLmZpbHRlcmVkU3FsQ29sdW1ucy5zbGljZSh0aGlzLnByb3BlcnRpZXNGaXJzdCwgdGhpcy5wcm9wZXJ0aWVzRmlyc3QgKyB0aGlzLnByb3BlcnRpZXNQYWdlU2l6ZSk7XHJcbiAgfVxyXG5cclxuICBvblByb3BlcnRpZXNQYWdlQ2hhbmdlKGV2ZW50OiBhbnkpOiB2b2lkIHtcclxuICAgIHRoaXMucHJvcGVydGllc0ZpcnN0ID0gZXZlbnQuZmlyc3Q7XHJcbiAgICB0aGlzLnByb3BlcnRpZXNQYWdlU2l6ZSA9IGV2ZW50LnJvd3M7XHJcbiAgfVxyXG5cclxuICBvblByb3BlcnRpZXNTZWFyY2goKTogdm9pZCB7XHJcbiAgICB0aGlzLnByb3BlcnRpZXNGaXJzdCA9IDA7XHJcbiAgfVxyXG5cclxuICBjb21wdXRlQ29tcGFyaXNvbnMoKTogdm9pZCB7XHJcbiAgICBjb25zdCBtb2RlbE1hcCA9IG5ldyBNYXA8c3RyaW5nLCBFbnRpdHlDb2x1bW5EZXRhaWxSZXNwb25zZT4oKTtcclxuICAgIGNvbnN0IGRiTWFwID0gbmV3IE1hcDxzdHJpbmcsIEVudGl0eUNvbHVtbkRldGFpbFJlc3BvbnNlPigpO1xyXG4gICAgY29uc3Qgc3FsTWFwID0gbmV3IE1hcDxzdHJpbmcsIEVudGl0eUNvbHVtbkRldGFpbFJlc3BvbnNlPigpO1xyXG5cclxuICAgIHRoaXMubW9kZWxDb2x1bW5zRGF0YS5mb3JFYWNoKGNvbCA9PiBtb2RlbE1hcC5zZXQoY29sLm5hbWUudG9Mb3dlckNhc2UoKSwgY29sKSk7XHJcbiAgICB0aGlzLmRiQ29sdW1uc0RhdGEuZm9yRWFjaChjb2wgPT4gZGJNYXAuc2V0KGNvbC5uYW1lLnRvTG93ZXJDYXNlKCksIGNvbCkpO1xyXG4gICAgdGhpcy5zcWxDb2x1bW5zRGF0YS5mb3JFYWNoKGNvbCA9PiBzcWxNYXAuc2V0KGNvbC5uYW1lLnRvTG93ZXJDYXNlKCksIGNvbCkpO1xyXG5cclxuICAgIHRoaXMubW9kZWxDb21wYXJpc29uTWFwID0gdGhpcy5jb21wdXRlU291cmNlQ29tcGFyaXNvbih0aGlzLm1vZGVsQ29sdW1uc0RhdGEsIFtkYk1hcCwgc3FsTWFwXSk7XHJcbiAgICB0aGlzLmRiQ29tcGFyaXNvbk1hcCA9IHRoaXMuY29tcHV0ZVNvdXJjZUNvbXBhcmlzb24odGhpcy5kYkNvbHVtbnNEYXRhLCBbbW9kZWxNYXAsIHNxbE1hcF0pO1xyXG4gICAgdGhpcy5zcWxDb21wYXJpc29uTWFwID0gdGhpcy5jb21wdXRlU291cmNlQ29tcGFyaXNvbih0aGlzLnNxbENvbHVtbnNEYXRhLCBbbW9kZWxNYXAsIGRiTWFwXSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNvbXB1dGVTb3VyY2VDb21wYXJpc29uKFxyXG4gICAgc291cmNlRGF0YTogRW50aXR5Q29sdW1uRGV0YWlsUmVzcG9uc2VbXSxcclxuICAgIG90aGVyTWFwczogTWFwPHN0cmluZywgRW50aXR5Q29sdW1uRGV0YWlsUmVzcG9uc2U+W11cclxuICApOiBNYXA8c3RyaW5nLCBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+PiB7XHJcbiAgICBjb25zdCByZXN1bHQgPSBuZXcgTWFwPHN0cmluZywgUmVjb3JkPHN0cmluZywgc3RyaW5nPj4oKTtcclxuXHJcbiAgICBmb3IgKGNvbnN0IHJvdyBvZiBzb3VyY2VEYXRhKSB7XHJcbiAgICAgIGNvbnN0IGtleSA9IHJvdy5uYW1lLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgIGNvbnN0IGNsYXNzZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7IG5hbWU6ICcnLCB0eXBlOiAnJywgaXNOdWxsYWJsZTogJycsIG1heExlbmd0aDogJycgfTtcclxuXHJcbiAgICAgIGZvciAoY29uc3Qgb3RoZXJNYXAgb2Ygb3RoZXJNYXBzKSB7XHJcbiAgICAgICAgY29uc3Qgb3RoZXJSb3cgPSBvdGhlck1hcC5nZXQoa2V5KTtcclxuXHJcbiAgICAgICAgaWYgKCFvdGhlclJvdykge1xyXG4gICAgICAgICAgY2xhc3Nlc1snbmFtZSddID0gJ2NvbXBhcmlzb24tbWlzc2luZyc7XHJcbiAgICAgICAgICBjbGFzc2VzWyd0eXBlJ10gPSAnY29tcGFyaXNvbi1taXNzaW5nJztcclxuICAgICAgICAgIGNsYXNzZXNbJ2lzTnVsbGFibGUnXSA9ICdjb21wYXJpc29uLW1pc3NpbmcnO1xyXG4gICAgICAgICAgY2xhc3Nlc1snbWF4TGVuZ3RoJ10gPSAnY29tcGFyaXNvbi1taXNzaW5nJztcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKG90aGVyUm93LnR5cGUgIT09IHJvdy50eXBlICYmICFjbGFzc2VzWyd0eXBlJ10pIHtcclxuICAgICAgICAgIGNsYXNzZXNbJ3R5cGUnXSA9ICdjb21wYXJpc29uLXR5cGUtbWlzbWF0Y2gnO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKG90aGVyUm93Lm1heExlbmd0aCAhPT0gcm93Lm1heExlbmd0aCAmJiAhY2xhc3Nlc1snbWF4TGVuZ3RoJ10pIHtcclxuICAgICAgICAgIGNsYXNzZXNbJ21heExlbmd0aCddID0gJ2NvbXBhcmlzb24tbGVuZ3RoLW1pc21hdGNoJztcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJlc3VsdC5zZXQoa2V5LCBjbGFzc2VzKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG4gIH1cclxuXHJcbiAgZ2V0Q29tcGFyaXNvbkNsYXNzKHNvdXJjZTogJ21vZGVsJyB8ICdkYicgfCAnc3FsJywgcm93OiBFbnRpdHlDb2x1bW5EZXRhaWxSZXNwb25zZSwgZmllbGQ6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBjb25zdCBtYXAgPSBzb3VyY2UgPT09ICdtb2RlbCcgPyB0aGlzLm1vZGVsQ29tcGFyaXNvbk1hcFxyXG4gICAgICAgICAgICAgIDogc291cmNlID09PSAnZGInID8gdGhpcy5kYkNvbXBhcmlzb25NYXBcclxuICAgICAgICAgICAgICA6IHRoaXMuc3FsQ29tcGFyaXNvbk1hcDtcclxuICAgIGNvbnN0IGNvbXBhcmlzb24gPSBtYXAuZ2V0KHJvdy5uYW1lLnRvTG93ZXJDYXNlKCkpO1xyXG4gICAgaWYgKCFjb21wYXJpc29uKSByZXR1cm4gJyc7XHJcbiAgICByZXR1cm4gY29tcGFyaXNvbltmaWVsZF0gfHwgJyc7XHJcbiAgfVxyXG59IiwiPHRzaS1mb3JtIGNsYXNzPVwiZm9ybS1ob3Jpem9udGFsXCIgYXV0b2NvbXBsZXRlPVwib2ZmXCIgKG9uU3VibWl0KT1cInNhdmUoKVwiIFtpc0xvYWRpbmddPVwiaXNsb2FkaW5nXCI+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+XHJcbiAgICAgICAgICAgICAgICA8VHNpLUxhYmVsIGNsYXNzPVwiY29sLTRcIlxyXG4gICAgICAgICAgICAgICAgICBbbGFiZWxWYWx1ZV09XCInYWRtaW5pc3RyYXRpb25fZ2VzdGlvbkVudGl0eUluZm9ybWF0aW9uX2lzV29ya2Zsb3cnXCI+PC9Uc2ktTGFiZWw+XHJcbiAgICAgICAgICAgICAgICA8VHNpLUNoZWNrQm94IGNsYXNzPVwiY29sLThcIiBbaW5wdXROYW1lXT1cIidJc1dvcmtmbG93J1wiXHJcbiAgICAgICAgICAgICAgICAgIFsoaW5wdXRGaWVsZCldPVwiZW50aXR5V2l0aFJlbGF0aW9ucy5lbnRpdHkuaXNXb3JrZmxvd1wiPlxyXG4gICAgICAgICAgICAgICAgPC9Uc2ktQ2hlY2tCb3g+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZ3JpZFwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTZcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZ3JpZFwiPlxyXG4gICAgICAgICAgICAgICAgPFRzaS1MYWJlbCBjbGFzcz1cImNvbC00XCJcclxuICAgICAgICAgICAgICAgICAgW2xhYmVsVmFsdWVdPVwiJ2FkbWluaXN0cmF0aW9uX2dlc3Rpb25FbnRpdHlJbmZvcm1hdGlvbl9zdGF0dXNDb2x1bW5OYW1lJ1wiPjwvVHNpLUxhYmVsPlxyXG5cclxuICAgICAgICAgICAgICAgIDxUc2ktU2VhcmNoLUNvbWJvIGNsYXNzPVwiY29sLTZcIiBbZGF0YXNvdXJjZV09XCJrZXlDb2x1bW5PcHRpb25zXCJcclxuICAgICAgICAgICAgICAgICAgWyhiaW5kKV09XCJlbnRpdHlXaXRoUmVsYXRpb25zLmVudGl0eS5zdGF0dXNDb2x1bW5OYW1lXCIgaWQtZmllbGQ9XCJrZXlcIiBsYWJlbC1maWVsZD1cInZhbHVlXCJcclxuICAgICAgICAgICAgICAgICAgW3Nob3dDbGVhcl09XCJ0cnVlXCIgW2Rpc2FibGVkXT1cImlzRGVsZXRlTW9kZSgpIHx8IGlzQ29uc3VsdE1vZGUoKVwiPlxyXG4gICAgICAgICAgICAgICAgPC9Uc2ktU2VhcmNoLUNvbWJvPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTZcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZ3JpZFwiPlxyXG4gICAgICAgICAgICAgICAgPFRzaS1MYWJlbCBjbGFzcz1cImNvbC00XCJcclxuICAgICAgICAgICAgICAgICAgW2xhYmVsVmFsdWVdPVwiJ2FkbWluaXN0cmF0aW9uX2dlc3Rpb25FbnRpdHlJbmZvcm1hdGlvbl9zdGF0dXNFbnVtTmFtZSdcIj48L1RzaS1MYWJlbD5cclxuICAgICAgICAgICAgICAgIDxUc2ktVGV4dC1Cb3ggY2xhc3M9XCJjb2wtOFwiIFtpbnB1dE5hbWVdPVwiJ1N0YXR1c0VudW1OYW1lJ1wiXHJcbiAgICAgICAgICAgICAgICAgIFsoaW5wdXRGaWVsZCldPVwiZW50aXR5V2l0aFJlbGF0aW9ucy5lbnRpdHkuc3RhdHVzRW51bU5hbWVcIj5cclxuICAgICAgICAgICAgICAgIDwvVHNpLVRleHQtQm94PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJncmlkXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNlwiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJncmlkXCI+XHJcbiAgICAgICAgICAgICAgICA8VHNpLUxhYmVsIGNsYXNzPVwiY29sLTRcIlxyXG4gICAgICAgICAgICAgICAgICBbbGFiZWxWYWx1ZV09XCInYWRtaW5pc3RyYXRpb25fZ2VzdGlvbkVudGl0eUluZm9ybWF0aW9uX2RlZmF1bHRTdGF0dXMnXCI+PC9Uc2ktTGFiZWw+XHJcbiAgICAgICAgICAgICAgICA8VHNpLVRleHQtQm94IGNsYXNzPVwiY29sLThcIiBbaW5wdXROYW1lXT1cIidEZWZhdWx0U3RhdHVzJ1wiXHJcbiAgICAgICAgICAgICAgICAgIFsoaW5wdXRGaWVsZCldPVwiZW50aXR5V2l0aFJlbGF0aW9ucy5lbnRpdHkuZGVmYXVsdFN0YXR1c1wiPlxyXG4gICAgICAgICAgICAgICAgPC9Uc2ktVGV4dC1Cb3g+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC02XCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImdyaWRcIj5cclxuICAgICAgICAgICAgICAgIDxUc2ktTGFiZWwgY2xhc3M9XCJjb2wtNFwiXHJcbiAgICAgICAgICAgICAgICAgIFtsYWJlbFZhbHVlXT1cIidhZG1pbmlzdHJhdGlvbl9nZXN0aW9uRW50aXR5SW5mb3JtYXRpb25fYWR2YW5jZWRTZWFyY2hDb21wb25lbnQnXCI+PC9Uc2ktTGFiZWw+XHJcbiAgICAgICAgICAgICAgICA8VHNpLVNlYXJjaC1Db21ibyBjbGFzcz1cImNvbC04XCIgW2RhdGFzb3VyY2VdPVwiY29tcG9uZW50c09wdGlvbnNcIlxyXG4gICAgICAgICAgICAgICAgICBbKGJpbmQpXT1cImVudGl0eVdpdGhSZWxhdGlvbnMuZW50aXR5LmFkdmFuY2VkU2VhcmNoQ29tcG9uZW50XCIgaWQtZmllbGQ9XCJrZXlcIiBsYWJlbC1maWVsZD1cInZhbHVlXCJcclxuICAgICAgICAgICAgICAgICAgW3Nob3dDbGVhcl09XCJ0cnVlXCIgW2Rpc2FibGVkXT1cImlzRGVsZXRlTW9kZSgpIHx8IGlzQ29uc3VsdE1vZGUoKVwiPlxyXG4gICAgICAgICAgICAgICAgPC9Uc2ktU2VhcmNoLUNvbWJvPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJncmlkXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNlwiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJncmlkXCI+XHJcbiAgICAgICAgICAgICAgICA8VHNpLUxhYmVsIGNsYXNzPVwiY29sLTRcIlxyXG4gICAgICAgICAgICAgICAgICBbbGFiZWxWYWx1ZV09XCInYWRtaW5pc3RyYXRpb25fZ2VzdGlvbkVudGl0eUluZm9ybWF0aW9uX2NhcmRIZWFkZXJQaG90b0NvbHVtbidcIj48L1RzaS1MYWJlbD5cclxuXHJcbiAgICAgICAgICAgICAgICA8VHNpLVNlYXJjaC1Db21ibyBjbGFzcz1cImNvbC02XCIgW2RhdGFzb3VyY2VdPVwia2V5Q29sdW1uT3B0aW9uc1wiXHJcbiAgICAgICAgICAgICAgICAgIFsoYmluZCldPVwiZW50aXR5V2l0aFJlbGF0aW9ucy5lbnRpdHkuY2FyZEhlYWRlclBob3RvQ29sdW1uXCIgaWQtZmllbGQ9XCJrZXlcIiBsYWJlbC1maWVsZD1cInZhbHVlXCJcclxuICAgICAgICAgICAgICAgICAgW3Nob3dDbGVhcl09XCJ0cnVlXCIgW2Rpc2FibGVkXT1cImlzRGVsZXRlTW9kZSgpIHx8IGlzQ29uc3VsdE1vZGUoKVwiPlxyXG4gICAgICAgICAgICAgICAgPC9Uc2ktU2VhcmNoLUNvbWJvPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNlwiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJncmlkXCI+XHJcbiAgICAgICAgICAgICAgICA8VHNpLUxhYmVsIGNsYXNzPVwiY29sLTRcIlxyXG4gICAgICAgICAgICAgICAgICBbbGFiZWxWYWx1ZV09XCInYWRtaW5pc3RyYXRpb25fZ2VzdGlvbkVudGl0eUluZm9ybWF0aW9uX2NhcmRUaXRsZUNvbHVtbidcIj48L1RzaS1MYWJlbD5cclxuXHJcbiAgICAgICAgICAgICAgICA8VHNpLVNlYXJjaC1Db21ibyBjbGFzcz1cImNvbC02XCIgW2RhdGFzb3VyY2VdPVwia2V5Q29sdW1uT3B0aW9uc1wiXHJcbiAgICAgICAgICAgICAgICAgIFsoYmluZCldPVwiZW50aXR5V2l0aFJlbGF0aW9ucy5lbnRpdHkuY2FyZFRpdGxlQ29sdW1uXCIgaWQtZmllbGQ9XCJrZXlcIiBsYWJlbC1maWVsZD1cInZhbHVlXCJcclxuICAgICAgICAgICAgICAgICAgW3Nob3dDbGVhcl09XCJ0cnVlXCIgW2Rpc2FibGVkXT1cImlzRGVsZXRlTW9kZSgpIHx8IGlzQ29uc3VsdE1vZGUoKVwiPlxyXG4gICAgICAgICAgICAgICAgPC9Uc2ktU2VhcmNoLUNvbWJvPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJncmlkXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNlwiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJncmlkXCI+XHJcbiAgICAgICAgICAgICAgICA8VHNpLUxhYmVsIGNsYXNzPVwiY29sLTRcIlxyXG4gICAgICAgICAgICAgICAgICBbbGFiZWxWYWx1ZV09XCInYWRtaW5pc3RyYXRpb25fZ2VzdGlvbkVudGl0eUluZm9ybWF0aW9uX2NhcmRTdWJIZWFkZXJDb2x1bW4nXCI+PC9Uc2ktTGFiZWw+XHJcbiAgICAgICAgICAgICAgICA8VHNpLVNlYXJjaC1Db21ibyBjbGFzcz1cImNvbC02XCIgW2RhdGFzb3VyY2VdPVwia2V5Q29sdW1uT3B0aW9uc1wiXHJcbiAgICAgICAgICAgICAgICAgIFsoYmluZCldPVwiZW50aXR5V2l0aFJlbGF0aW9ucy5lbnRpdHkuY2FyZFN1YkhlYWRlckNvbHVtblwiIGlkLWZpZWxkPVwia2V5XCIgbGFiZWwtZmllbGQ9XCJ2YWx1ZVwiXHJcbiAgICAgICAgICAgICAgICAgIFtzaG93Q2xlYXJdPVwidHJ1ZVwiIFtkaXNhYmxlZF09XCJpc0RlbGV0ZU1vZGUoKSB8fCBpc0NvbnN1bHRNb2RlKClcIj5cclxuICAgICAgICAgICAgICAgIDwvVHNpLVNlYXJjaC1Db21ibz5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNlwiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJncmlkXCI+XHJcbiAgICAgICAgICAgICAgICA8VHNpLUxhYmVsIGNsYXNzPVwiY29sLTRcIlxyXG4gICAgICAgICAgICAgICAgICBbbGFiZWxWYWx1ZV09XCInYWRtaW5pc3RyYXRpb25fZ2VzdGlvbkVudGl0eUluZm9ybWF0aW9uX2NhcmREZXNjcmlwdGlvbkNvbHVtbidcIj48L1RzaS1MYWJlbD5cclxuICAgICAgICAgICAgICAgIDxUc2ktU2VhcmNoLUNvbWJvIGNsYXNzPVwiY29sLTZcIiBbZGF0YXNvdXJjZV09XCJrZXlDb2x1bW5PcHRpb25zXCJcclxuICAgICAgICAgICAgICAgICAgWyhiaW5kKV09XCJlbnRpdHlXaXRoUmVsYXRpb25zLmVudGl0eS5jYXJkRGVzY3JpcHRpb25Db2x1bW5cIiBpZC1maWVsZD1cImtleVwiIGxhYmVsLWZpZWxkPVwidmFsdWVcIlxyXG4gICAgICAgICAgICAgICAgICBbc2hvd0NsZWFyXT1cInRydWVcIiBbZGlzYWJsZWRdPVwiaXNEZWxldGVNb2RlKCkgfHwgaXNDb25zdWx0TW9kZSgpXCI+XHJcbiAgICAgICAgICAgICAgICA8L1RzaS1TZWFyY2gtQ29tYm8+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZ3JpZFwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTZcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZ3JpZFwiPlxyXG4gICAgICAgICAgICAgICAgPFRzaS1MYWJlbCBjbGFzcz1cImNvbC00XCJcclxuICAgICAgICAgICAgICAgICAgW2xhYmVsVmFsdWVdPVwiJ2FkbWluaXN0cmF0aW9uX2dlc3Rpb25FbnRpdHlJbmZvcm1hdGlvbl9jYWxlbmRhclN0YXJ0RGF0ZSdcIj48L1RzaS1MYWJlbD5cclxuICAgICAgICAgICAgICAgIDxUc2ktVGV4dC1Cb3ggY2xhc3M9XCJjb2wtOFwiIFtpbnB1dE5hbWVdPVwiJ0NhbGVuZGFyU3RhcnREYXRlJ1wiXHJcbiAgICAgICAgICAgICAgICAgIFsoaW5wdXRGaWVsZCldPVwiZW50aXR5V2l0aFJlbGF0aW9ucy5lbnRpdHkuY2FsZW5kYXJTdGFydERhdGVDb2x1bW5cIj5cclxuICAgICAgICAgICAgICAgIDwvVHNpLVRleHQtQm94PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC02XCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImdyaWRcIj5cclxuICAgICAgICAgICAgICAgIDxUc2ktTGFiZWwgY2xhc3M9XCJjb2wtNFwiXHJcbiAgICAgICAgICAgICAgICAgIFtsYWJlbFZhbHVlXT1cIidhZG1pbmlzdHJhdGlvbl9nZXN0aW9uRW50aXR5SW5mb3JtYXRpb25fY2FsZW5kYXJFbmREYXRlJ1wiPjwvVHNpLUxhYmVsPlxyXG4gICAgICAgICAgICAgICAgPFRzaS1UZXh0LUJveCBjbGFzcz1cImNvbC04XCIgW2lucHV0TmFtZV09XCInQ2FsZW5kZXJFbmREYXRlJ1wiXHJcbiAgICAgICAgICAgICAgICAgIFsoaW5wdXRGaWVsZCldPVwiZW50aXR5V2l0aFJlbGF0aW9ucy5lbnRpdHkuY2FsZW5kYXJFbmREYXRlQ29sdW1uXCI+XHJcbiAgICAgICAgICAgICAgICA8L1RzaS1UZXh0LUJveD5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNlwiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJncmlkXCI+XHJcbiAgICAgICAgICAgICAgICA8VHNpLUxhYmVsIGNsYXNzPVwiY29sLTRcIiBbbGFiZWxWYWx1ZV09XCInYWRtaW5pc3RyYXRpb25fZ2VzdGlvbkVudGl0eUluZm9ybWF0aW9uX2ZyZXF1ZW50J1wiPjwvVHNpLUxhYmVsPlxyXG4gICAgICAgICAgICAgICAgPFRzaS1UZXh0LUJveCBjbGFzcz1cImNvbC04XCIgW2lucHV0TmFtZV09XCInRnJlcXVlbnQnXCJcclxuICAgICAgICAgICAgICAgICAgWyhpbnB1dEZpZWxkKV09XCJlbnRpdHlXaXRoUmVsYXRpb25zLmVudGl0eS5mcmVxdWVudFwiPlxyXG4gICAgICAgICAgICAgICAgPC9Uc2ktVGV4dC1Cb3g+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZ3JpZFwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTZcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZ3JpZFwiPlxyXG4gICAgICAgICAgICAgICAgPFRzaS1MYWJlbCBjbGFzcz1cImNvbC00XCJcclxuICAgICAgICAgICAgICAgICAgW2xhYmVsVmFsdWVdPVwiJ2FkbWluaXN0cmF0aW9uX2dlc3Rpb25FbnRpdHlJbmZvcm1hdGlvbl9jcmVhdGVGdW5jdGlvbmFsaXR5Q29kZSdcIj48L1RzaS1MYWJlbD5cclxuICAgICAgICAgICAgICAgIDxUc2ktVGV4dC1Cb3ggY2xhc3M9XCJjb2wtOFwiIFtpbnB1dE5hbWVdPVwiJ0NyZWF0ZUZ1bmN0aW9uYWxpdHlDb2RlJ1wiXHJcbiAgICAgICAgICAgICAgICAgIFsoaW5wdXRGaWVsZCldPVwiZW50aXR5V2l0aFJlbGF0aW9ucy5lbnRpdHkuY3JlYXRlRnVuY3Rpb25hbGl0eUNvZGVcIj5cclxuICAgICAgICAgICAgICAgIDwvVHNpLVRleHQtQm94PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC02XCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImdyaWRcIj5cclxuICAgICAgICAgICAgICAgIDxUc2ktTGFiZWwgY2xhc3M9XCJjb2wtNFwiXHJcbiAgICAgICAgICAgICAgICAgIFtsYWJlbFZhbHVlXT1cIidhZG1pbmlzdHJhdGlvbl9nZXN0aW9uRW50aXR5SW5mb3JtYXRpb25fcmVhZEZ1bmN0aW9uYWxpdHlDb2RlJ1wiPjwvVHNpLUxhYmVsPlxyXG4gICAgICAgICAgICAgICAgPFRzaS1UZXh0LUJveCBjbGFzcz1cImNvbC04XCIgW2lucHV0TmFtZV09XCInUmVhZEZ1bmN0aW9uYWxpdHlDb2RlJ1wiXHJcbiAgICAgICAgICAgICAgICAgIFsoaW5wdXRGaWVsZCldPVwiZW50aXR5V2l0aFJlbGF0aW9ucy5lbnRpdHkucmVhZEZ1bmN0aW9uYWxpdHlDb2RlXCI+XHJcbiAgICAgICAgICAgICAgICA8L1RzaS1UZXh0LUJveD5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJncmlkXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNlwiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJncmlkXCI+XHJcbiAgICAgICAgICAgICAgICA8VHNpLUxhYmVsIGNsYXNzPVwiY29sLTRcIlxyXG4gICAgICAgICAgICAgICAgICBbbGFiZWxWYWx1ZV09XCInYWRtaW5pc3RyYXRpb25fZ2VzdGlvbkVudGl0eUluZm9ybWF0aW9uX3VwZGF0ZUZ1bmN0aW9uYWxpdHlDb2RlJ1wiPjwvVHNpLUxhYmVsPlxyXG4gICAgICAgICAgICAgICAgPFRzaS1UZXh0LUJveCBjbGFzcz1cImNvbC04XCIgW2lucHV0TmFtZV09XCInVXBkYXRlRnVuY3Rpb25hbGl0eUNvZGUnXCJcclxuICAgICAgICAgICAgICAgICAgWyhpbnB1dEZpZWxkKV09XCJlbnRpdHlXaXRoUmVsYXRpb25zLmVudGl0eS51cGRhdGVGdW5jdGlvbmFsaXR5Q29kZVwiPlxyXG4gICAgICAgICAgICAgICAgPC9Uc2ktVGV4dC1Cb3g+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTZcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZ3JpZFwiPlxyXG4gICAgICAgICAgICAgICAgPFRzaS1MYWJlbCBjbGFzcz1cImNvbC00XCJcclxuICAgICAgICAgICAgICAgICAgW2xhYmVsVmFsdWVdPVwiJ2FkbWluaXN0cmF0aW9uX2dlc3Rpb25FbnRpdHlJbmZvcm1hdGlvbl9kZWxldGVGdW5jdGlvbmFsaXR5Q29kZSdcIj48L1RzaS1MYWJlbD5cclxuICAgICAgICAgICAgICAgIDxUc2ktVGV4dC1Cb3ggY2xhc3M9XCJjb2wtOFwiIFtpbnB1dE5hbWVdPVwiJ0RlbGV0ZUZ1bmN0aW9uYWxpdHlDb2RlJ1wiXHJcbiAgICAgICAgICAgICAgICAgIFsoaW5wdXRGaWVsZCldPVwiZW50aXR5V2l0aFJlbGF0aW9ucy5lbnRpdHkuZGVsZXRlRnVuY3Rpb25hbGl0eUNvZGVcIj5cclxuICAgICAgICAgICAgICAgIDwvVHNpLVRleHQtQm94PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2ZpZWxkc2V0PlxyXG4gICAgPC9wLXRhYlBhbmVsPlxyXG4gICAgPHAtdGFiUGFuZWwgW2hlYWRlcl09XCInYWRtaW5pc3RyYXRpb25fdGFiX3JlbGF0aW9ucycgfCBsb2NhbGl6ZVwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiZ3JpZFwiPlxyXG4gICAgICAgIDxUc2ktR2VuZXJpYy1FZGl0YWJsZS1HcmlkIFtjb2x1bW5zXT1cImVudGl0aWVzUmVsYXRpb25zQ29sdW1uc1wiIFtncmlkRGF0YV09XCJlbnRpdHlXaXRoUmVsYXRpb25zLnJlbGF0aW9uc1wiXHJcbiAgICAgICAgICBbcGFyZW50XT1cInRoaXNcIiAoYWRkZWRSb3dFdmVudEVtaXR0ZXIpPVwib25BZGRSZWxhdGlvbigpXCIgW3Nob3dBZGRCdXR0b25dPVwiaXNFZGl0TW9kZSgpXCI+XHJcbiAgICAgICAgPC9Uc2ktR2VuZXJpYy1FZGl0YWJsZS1HcmlkPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvcC10YWJQYW5lbD5cclxuICAgIDxwLXRhYlBhbmVsIFtoZWFkZXJdPVwiJ2FkbWluaXN0cmF0aW9uX3RhYl9wZXJtaXNzaW9ucycgfCBsb2NhbGl6ZVwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiZ3JpZFwiPlxyXG4gICAgICAgIDx0c2ktdmlldy1ncmlkIFtoZWFkZXJdPVwiZW50aXR5V2l0aFJlbGF0aW9ucy5lbnRpdHkuY2xhc3NOYW1lID8/ICcnXCIgY2xhc3M9XCJjb2wtMTIgbWItM1wiXHJcbiAgICAgICAgICBbY29sdW1uc109XCJwZXJtaXNzaW9uc0dyaWRDb2x1bW5zXCIgW2dldERhdGFGcm9tQXBpXT1cImZhbHNlXCIgW2dyaWREYXRhXT1cImVuZHBvaW50SW5mb3NcIj5cclxuICAgICAgICA8L3RzaS12aWV3LWdyaWQ+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9wLXRhYlBhbmVsPlxyXG4gICAgPHAtdGFiUGFuZWwgW2hlYWRlcl09XCInYWRtaW5pc3RyYXRpb25fdGFiX3N0YXR1c190cmFuc2l0aW9uJyB8IGxvY2FsaXplXCI+XHJcbiAgICAgIDxkaXYgKm5nSWY9XCJzdGF0dXNUcmFuc2l0aW9uc0luZm8gJiYgc3RhdHVzVHJhbnNpdGlvbnNJbmZvLnRyYW5zaXRpb25zICYmIHN0YXR1c1RyYW5zaXRpb25zSW5mby50cmFuc2l0aW9ucy5sZW5ndGggPiAwOyBlbHNlIG5vV29ya2Zsb3dcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwid29ya2Zsb3ctaGVhZGVyIG1iLTNcIj5cclxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZm9udC1zZW1pYm9sZFwiPnt7J2FkbWluaXN0cmF0aW9uX3dvcmtmbG93X2J1c2luZXNzQ2xhc3MnIHwgbG9jYWxpemV9fSA6IDwvc3Bhbj5cclxuICAgICAgICAgIDxzcGFuPnt7IHN0YXR1c1RyYW5zaXRpb25zSW5mby5idXNpbmVzc0NsYXNzIH19PC9zcGFuPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxwLXRhYmxlIFt2YWx1ZV09XCJzdGF0dXNUcmFuc2l0aW9uc0luZm8udHJhbnNpdGlvbnNcIlxyXG4gICAgICAgICAgW3N0eWxlQ2xhc3NdPVwiJ3AtZGF0YXRhYmxlLXNtIHAtZGF0YXRhYmxlLWdyaWRsaW5lcycgKyAoc3RyaXBlZFJvd3MgPyAnIHAtZGF0YXRhYmxlLXN0cmlwZWQnIDogJycpXCI+XHJcbiAgICAgICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiaGVhZGVyXCI+XHJcbiAgICAgICAgICAgIDx0cj5cclxuICAgICAgICAgICAgICA8dGg+e3snYWRtaW5pc3RyYXRpb25fd29ya2Zsb3dfZnJvbVN0YXR1cycgfCBsb2NhbGl6ZX19PC90aD5cclxuICAgICAgICAgICAgICA8dGg+e3snYWRtaW5pc3RyYXRpb25fd29ya2Zsb3dfdG9TdGF0dXMnIHwgbG9jYWxpemV9fTwvdGg+XHJcbiAgICAgICAgICAgICAgPHRoPnt7J2FkbWluaXN0cmF0aW9uX3dvcmtmbG93X3JlcXVpcmVkQWNjZXNzUmlnaHRzJyB8IGxvY2FsaXplfX08L3RoPlxyXG4gICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJib2R5XCIgbGV0LXJvdz5cclxuICAgICAgICAgICAgPHRyPlxyXG4gICAgICAgICAgICAgIDx0ZD5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwid29ya2Zsb3ctc3RhdHVzLWJhZGdlIGZyb20tc3RhdHVzXCI+e3sgcm93LmZyb21TdGF0dXMgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICA8dGQ+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIndvcmtmbG93LXN0YXR1cy1iYWRnZSB0by1zdGF0dXNcIj57eyByb3cudG9TdGF0dXMgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICA8dGQ+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwid29ya2Zsb3ctYWNjZXNzLXJpZ2h0c1wiPlxyXG4gICAgICAgICAgICAgICAgICA8c3BhbiAqbmdGb3I9XCJsZXQgcmlnaHQgb2Ygcm93LnJlcXVpcmVkQWNjZXNzUmlnaHRzXCIgY2xhc3M9XCJ3b3JrZmxvdy1hY2Nlc3MtY2hpcFwiPnt7IHJpZ2h0IH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIiFyb3cucmVxdWlyZWRBY2Nlc3NSaWdodHMgfHwgcm93LnJlcXVpcmVkQWNjZXNzUmlnaHRzLmxlbmd0aCA9PT0gMFwiIGNsYXNzPVwidGV4dC1zZWNvbmRhcnlcIj7igJQ8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJlbXB0eW1lc3NhZ2VcIj5cclxuICAgICAgICAgICAgPHRyPlxyXG4gICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPVwiM1wiIGNsYXNzPVwidGV4dC1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgIHt7J2FkbWluaXN0cmF0aW9uX3dvcmtmbG93X25vVHJhbnNpdGlvbnMnIHwgbG9jYWxpemV9fVxyXG4gICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgIDwvcC10YWJsZT5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxuZy10ZW1wbGF0ZSAjbm9Xb3JrZmxvdz5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwid29ya2Zsb3ctZW1wdHktc3RhdGUgdGV4dC1jZW50ZXIgcC00XCI+XHJcbiAgICAgICAgICA8aSBjbGFzcz1cInBpIHBpLWluZm8tY2lyY2xlIHdvcmtmbG93LWVtcHR5LWljb25cIj48L2k+XHJcbiAgICAgICAgICA8cD57eydhZG1pbmlzdHJhdGlvbl93b3JrZmxvd19ub0RhdGEnIHwgbG9jYWxpemV9fTwvcD5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgIDwvcC10YWJQYW5lbD5cclxuICAgIDxwLXRhYlBhbmVsIFtoZWFkZXJdPVwiJ2FkbWluaXN0cmF0aW9uX3RhYl9wcm9wZXJ0aWVzJyB8IGxvY2FsaXplXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBnYXAtMiBtYi0zXCI+XHJcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJwLWlucHV0LWljb24tbGVmdFwiPlxyXG4gICAgICAgICAgPGkgY2xhc3M9XCJwaSBwaS1zZWFyY2hcIj48L2k+XHJcbiAgICAgICAgICA8aW5wdXQgcElucHV0VGV4dCB0eXBlPVwidGV4dFwiIFsobmdNb2RlbCldPVwicHJvcGVydGllc1NlYXJjaFRleHRcIiAobmdNb2RlbENoYW5nZSk9XCJvblByb3BlcnRpZXNTZWFyY2goKVwiXHJcbiAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCInYWRtaW5pc3RyYXRpb25fcHJvcGVydGllc19zZWFyY2hQbGFjZWhvbGRlcicgfCBsb2NhbGl6ZVwiIGNsYXNzPVwicC1pbnB1dHRleHQtc21cIiAvPlxyXG4gICAgICAgIDwvc3Bhbj5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgICA8ZGl2IGNsYXNzPVwicHJvcGVydGllcy1ncmlkLXNlY3Rpb24gbWItM1wiPlxyXG4gICAgICAgIDxoNCBjbGFzcz1cInByb3BlcnRpZXMtZ3JpZC10aXRsZVwiPnt7ICdhZG1pbmlzdHJhdGlvbl9wcm9wZXJ0aWVzX21vZGVsQ29sdW1uc190aXRsZScgfCBsb2NhbGl6ZSB9fTwvaDQ+XHJcbiAgICAgICAgPHAtdGFibGUgW3ZhbHVlXT1cInBhZ2VkTW9kZWxDb2x1bW5zXCIgW3N0eWxlQ2xhc3NdPVwiJ3AtZGF0YXRhYmxlLXNtIHAtZGF0YXRhYmxlLWdyaWRsaW5lcycgKyAoc3RyaXBlZFJvd3MgPyAnIHAtZGF0YXRhYmxlLXN0cmlwZWQnIDogJycpXCI+XHJcbiAgICAgICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiaGVhZGVyXCI+XHJcbiAgICAgICAgICAgIDx0cj5cclxuICAgICAgICAgICAgICA8dGggKm5nRm9yPVwibGV0IGNvbCBvZiBwcm9wZXJ0aWVzR3JpZENvbHVtbnNcIj57eyAoY29sLmhlYWRlciA/PyAnJykgfCBsb2NhbGl6ZSB9fTwvdGg+XHJcbiAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImJvZHlcIiBsZXQtcm93PlxyXG4gICAgICAgICAgICA8dHI+XHJcbiAgICAgICAgICAgICAgPHRkICpuZ0Zvcj1cImxldCBjb2wgb2YgcHJvcGVydGllc0dyaWRDb2x1bW5zXCIgW25nQ2xhc3NdPVwiZ2V0Q29tcGFyaXNvbkNsYXNzKCdtb2RlbCcsIHJvdywgY29sLmZpZWxkKVwiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJjb2wudHlwZSAhPT0gJ2NoZWNrQm94J1wiPnt7IHJvd1tjb2wuZmllbGRdIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPHAtY2hlY2tib3ggKm5nSWY9XCJjb2wudHlwZSA9PT0gJ2NoZWNrQm94J1wiIFtuZ01vZGVsXT1cInJvd1tjb2wuZmllbGRdXCIgW2Rpc2FibGVkXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICBbYmluYXJ5XT1cInRydWVcIj48L3AtY2hlY2tib3g+XHJcbiAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiZW1wdHltZXNzYWdlXCI+XHJcbiAgICAgICAgICAgIDx0cj5cclxuICAgICAgICAgICAgICA8dGQgW2F0dHIuY29sc3Bhbl09XCJwcm9wZXJ0aWVzR3JpZENvbHVtbnMubGVuZ3RoXCIgY2xhc3M9XCJ0ZXh0LWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAge3snYWRtaW5pc3RyYXRpb25fcHJvcGVydGllc19lbXB0eU1lc3NhZ2UnIHwgbG9jYWxpemV9fTwvdGQ+XHJcbiAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgIDwvcC10YWJsZT5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgICA8ZGl2IGNsYXNzPVwicHJvcGVydGllcy1ncmlkLXNlY3Rpb24gbWItM1wiPlxyXG4gICAgICAgIDxoNCBjbGFzcz1cInByb3BlcnRpZXMtZ3JpZC10aXRsZVwiPnt7ICdhZG1pbmlzdHJhdGlvbl9wcm9wZXJ0aWVzX3Byb2plY3REYkNvbHVtbnNfdGl0bGUnIHwgbG9jYWxpemUgfX08L2g0PlxyXG4gICAgICAgIDxwLXRhYmxlIFt2YWx1ZV09XCJwYWdlZERiQ29sdW1uc1wiIFtzdHlsZUNsYXNzXT1cIidwLWRhdGF0YWJsZS1zbSBwLWRhdGF0YWJsZS1ncmlkbGluZXMnICsgKHN0cmlwZWRSb3dzID8gJyBwLWRhdGF0YWJsZS1zdHJpcGVkJyA6ICcnKVwiPlxyXG4gICAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImhlYWRlclwiPlxyXG4gICAgICAgICAgICA8dHI+XHJcbiAgICAgICAgICAgICAgPHRoICpuZ0Zvcj1cImxldCBjb2wgb2YgcHJvcGVydGllc0dyaWRDb2x1bW5zXCI+e3sgKGNvbC5oZWFkZXIgPz8gJycpIHwgbG9jYWxpemUgfX08L3RoPlxyXG4gICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJib2R5XCIgbGV0LXJvdz5cclxuICAgICAgICAgICAgPHRyPlxyXG4gICAgICAgICAgICAgIDx0ZCAqbmdGb3I9XCJsZXQgY29sIG9mIHByb3BlcnRpZXNHcmlkQ29sdW1uc1wiIFtuZ0NsYXNzXT1cImdldENvbXBhcmlzb25DbGFzcygnZGInLCByb3csIGNvbC5maWVsZClcIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiY29sLnR5cGUgIT09ICdjaGVja0JveCdcIj57eyByb3dbY29sLmZpZWxkXSB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDxUc2ktQ2hlY2tCb3ggKm5nSWY9XCJjb2wudHlwZSA9PT0gJ2NoZWNrQm94J1wiIFtuZ01vZGVsXT1cInJvd1tjb2wuZmllbGRdXCJcclxuICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cInRydWVcIj48L1RzaS1DaGVja0JveD5cclxuICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJlbXB0eW1lc3NhZ2VcIj5cclxuICAgICAgICAgICAgPHRyPlxyXG4gICAgICAgICAgICAgIDx0ZCBbYXR0ci5jb2xzcGFuXT1cInByb3BlcnRpZXNHcmlkQ29sdW1ucy5sZW5ndGhcIiBjbGFzcz1cInRleHQtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICB7eydhZG1pbmlzdHJhdGlvbl9wcm9wZXJ0aWVzX2VtcHR5TWVzc2FnZScgfCBsb2NhbGl6ZX19PC90ZD5cclxuICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgPC9wLXRhYmxlPlxyXG4gICAgICA8L2Rpdj5cclxuXHJcbiAgICAgIDxkaXYgY2xhc3M9XCJwcm9wZXJ0aWVzLWdyaWQtc2VjdGlvbiBtYi0zXCI+XHJcbiAgICAgICAgPGg0IGNsYXNzPVwicHJvcGVydGllcy1ncmlkLXRpdGxlXCI+e3sgJ2FkbWluaXN0cmF0aW9uX3Byb3BlcnRpZXNfc3FsQ29sdW1uc190aXRsZScgfCBsb2NhbGl6ZSB9fTwvaDQ+XHJcbiAgICAgICAgPHAtdGFibGUgW3ZhbHVlXT1cInBhZ2VkU3FsQ29sdW1uc1wiIFtzdHlsZUNsYXNzXT1cIidwLWRhdGF0YWJsZS1zbSBwLWRhdGF0YWJsZS1ncmlkbGluZXMnICsgKHN0cmlwZWRSb3dzID8gJyBwLWRhdGF0YWJsZS1zdHJpcGVkJyA6ICcnKVwiPlxyXG4gICAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImhlYWRlclwiPlxyXG4gICAgICAgICAgICA8dHI+XHJcbiAgICAgICAgICAgICAgPHRoICpuZ0Zvcj1cImxldCBjb2wgb2YgcHJvcGVydGllc0dyaWRDb2x1bW5zXCI+e3sgKGNvbC5oZWFkZXIgPz8gJycpIHwgbG9jYWxpemUgfX08L3RoPlxyXG4gICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJib2R5XCIgbGV0LXJvdz5cclxuICAgICAgICAgICAgPHRyPlxyXG4gICAgICAgICAgICAgIDx0ZCAqbmdGb3I9XCJsZXQgY29sIG9mIHByb3BlcnRpZXNHcmlkQ29sdW1uc1wiIFtuZ0NsYXNzXT1cImdldENvbXBhcmlzb25DbGFzcygnc3FsJywgcm93LCBjb2wuZmllbGQpXCI+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImNvbC50eXBlICE9PSAnY2hlY2tCb3gnXCI+e3sgcm93W2NvbC5maWVsZF0gfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8cC1jaGVja2JveCAqbmdJZj1cImNvbC50eXBlID09PSAnY2hlY2tCb3gnXCIgW25nTW9kZWxdPVwicm93W2NvbC5maWVsZF1cIiBbZGlzYWJsZWRdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgIFtiaW5hcnldPVwidHJ1ZVwiPjwvcC1jaGVja2JveD5cclxuICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJlbXB0eW1lc3NhZ2VcIj5cclxuICAgICAgICAgICAgPHRyPlxyXG4gICAgICAgICAgICAgIDx0ZCBbYXR0ci5jb2xzcGFuXT1cInByb3BlcnRpZXNHcmlkQ29sdW1ucy5sZW5ndGhcIiBjbGFzcz1cInRleHQtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICB7eydhZG1pbmlzdHJhdGlvbl9wcm9wZXJ0aWVzX2VtcHR5TWVzc2FnZScgfCBsb2NhbGl6ZX19PC90ZD5cclxuICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgPC9wLXRhYmxlPlxyXG4gICAgICA8L2Rpdj5cclxuXHJcbiAgICAgIDxwLXBhZ2luYXRvciBbcm93c109XCJwcm9wZXJ0aWVzUGFnZVNpemVcIiBbdG90YWxSZWNvcmRzXT1cInByb3BlcnRpZXNUb3RhbFJlY29yZHNcIiBbZmlyc3RdPVwicHJvcGVydGllc0ZpcnN0XCJcclxuICAgICAgICAob25QYWdlQ2hhbmdlKT1cIm9uUHJvcGVydGllc1BhZ2VDaGFuZ2UoJGV2ZW50KVwiIFtyb3dzUGVyUGFnZU9wdGlvbnNdPVwiWzEwLCAyNSwgNTBdXCI+XHJcbiAgICAgIDwvcC1wYWdpbmF0b3I+XHJcblxyXG4gICAgICA8ZGl2IGNsYXNzPVwiY29tcGFyaXNvbi1sZWdlbmQgbXQtM1wiPlxyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwibGVnZW5kLWl0ZW0gY29tcGFyaXNvbi1taXNzaW5nLWxlZ2VuZFwiPnt7ICdhZG1pbmlzdHJhdGlvbl9wcm9wZXJ0aWVzX2NvbXBhcmlzb25fbWlzc2luZycgfCBsb2NhbGl6ZVxyXG4gICAgICAgICAgfX08L3NwYW4+XHJcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJsZWdlbmQtaXRlbSBjb21wYXJpc29uLXR5cGUtbWlzbWF0Y2gtbGVnZW5kXCI+e3sgJ2FkbWluaXN0cmF0aW9uX3Byb3BlcnRpZXNfY29tcGFyaXNvbl90eXBlJyB8XHJcbiAgICAgICAgICBsb2NhbGl6ZSB9fTwvc3Bhbj5cclxuICAgICAgICA8c3BhbiBjbGFzcz1cImxlZ2VuZC1pdGVtIGNvbXBhcmlzb24tbGVuZ3RoLW1pc21hdGNoLWxlZ2VuZFwiPnt7ICdhZG1pbmlzdHJhdGlvbl9wcm9wZXJ0aWVzX2NvbXBhcmlzb25fbGVuZ3RoJyB8XHJcbiAgICAgICAgICBsb2NhbGl6ZSB9fTwvc3Bhbj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L3AtdGFiUGFuZWw+XHJcbiAgPC9wLXRhYlZpZXc+XHJcblxyXG4gIDxUc2ktTW9kYWwtRm9vdGVyIFtpc0NvbnN1bHRdPVwiaXNDb25zdWx0TW9kZSgpXCIgW2NhbmNlbERpc2FibGVkXT1cInNhdmluZ1wiIFtzYXZlRGlzYWJsZWRdPVwiaXNTdWJtaXREaXNhYmxlZCgpXCJcclxuICAgIChvbkNhbmNlbENsaWNrKT1cImhpZGUoKVwiIFtzaG93U2F2ZUFuZENsb3NlQnV0dG9uXT1cImZhbHNlXCI+XHJcbiAgPC9Uc2ktTW9kYWwtRm9vdGVyPlxyXG48L3RzaS1mb3JtPiJdfQ==
|
|
325
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLW9yLWVkaXQtZW50aXR5LWluZm9ybWF0aW9ucy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90c2ktc2hhcmVkLXVpL3NyYy9saWIvdHNpLWNvbXBvbmVudHMvY3JlYXRlLW9yLWVkaXQtZW50aXR5LWluZm9ybWF0aW9ucy9jcmVhdGUtb3ItZWRpdC1lbnRpdHktaW5mb3JtYXRpb25zLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RzaS1zaGFyZWQtdWkvc3JjL2xpYi90c2ktY29tcG9uZW50cy9jcmVhdGUtb3ItZWRpdC1lbnRpdHktaW5mb3JtYXRpb25zL2NyZWF0ZS1vci1lZGl0LWVudGl0eS1pbmZvcm1hdGlvbnMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUxQyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDMUQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDakUsT0FBTyxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFaEQsT0FBTyxFQUE4Qix1QkFBdUIsRUFBRSxvQ0FBb0MsRUFBa0MsTUFBTSxjQUFjLENBQUM7QUFHekosT0FBTyxFQUFFLDZCQUE2QixFQUFFLE1BQU0saUVBQWlFLENBQUM7QUFDaEgsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDdkQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLE1BQU0sQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQVNoQyxNQUFNLE9BQU8sdUNBQXdDLFNBQVEsNkJBQTZCO0lBZ0R4RixZQUNTLDBCQUFzRCxFQUNyRCw0QkFBeUQsRUFDakQsR0FBcUIsRUFDckIsTUFB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QyxDQUFDLENBQUMsSUFBSSxDQUFDLGVBQWU7Z0JBQ3hDLENBQUMsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUM7UUFDbEMsTUFBTSxVQUFVLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7UUFDbkQsSUFBSSxDQUFDLFVBQVU7WUFBRSxPQUFPLEVBQUUsQ0FBQztRQUMzQixPQUFPLFVBQVUsQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDakMsQ0FBQzsrR0F4VlUsdUNBQXVDO21HQUF2Qyx1Q0FBdUMsaUVBRnZDLENBQUMsR0FBRyxZQUFZLENBQUMsaURDcEI5QiwrcnVCQXFjVzs7NEZEL2FFLHVDQUF1QztrQkFObkQsU0FBUzsrQkFDRSx3Q0FBd0MsYUFHdkMsQ0FBQyxHQUFHLFlBQVksQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEtleVZhbHVlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgSHR0cEVycm9yUmVzcG9uc2UgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7IENvbXBvbmVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBEeW5hbWljRGlhbG9nQ29uZmlnLCBEeW5hbWljRGlhbG9nUmVmIH0gZnJvbSAncHJpbWVuZy9keW5hbWljZGlhbG9nJztcclxuaW1wb3J0IHsgYXBwUHJvdmlkZXJzIH0gZnJvbSAnLi4vLi4vY29uc3RzL2FwcC1wcm92aWRlcnMnO1xyXG5pbXBvcnQgeyBMb2NhbGl6YXRpb25LZXlzIH0gZnJvbSAnLi4vLi4vY29uc3RzL2xvY2FsaXphdGlvbi1rZXknO1xyXG5pbXBvcnQgeyBJbnB1dFR5cGVzLCBNb2RlcyB9IGZyb20gJy4uLy4uL2VudW1zJztcclxuaW1wb3J0IHsgR3JpZENvbHVtbiB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMnO1xyXG5pbXBvcnQgeyBFbnRpdHlDb2x1bW5EZXRhaWxSZXNwb25zZSwgRW50aXR5SW5mb1dpdGhSZWxhdGlvbnMsIFVwZGF0ZUVudGl0eUluZm9XaXRoUmVsYXRpb25zUmVxdWVzdCwgU3RhdHVzVHJhbnNpdGlvbnNJbmZvUmVzcG9uc2UgIH0gZnJvbSAnLi4vLi4vbW9kZWxzJztcclxuaW1wb3J0IHsgRW5kcG9pbnRJbmZvcyB9IGZyb20gJy4uLy4uL21vZGVscy9hcHBsaWNhdGlvbi9jb25maWd1cmF0aW9uL2VuZHBvaW50LWluZm9zJztcclxuaW1wb3J0IHsgQXBpRXhwbG9yZXJTZXJ2aWNlLCBFbnRpdHlDb25maWd1cmF0aW9uU2VydmljZSwgRXJyb3JSZXNwb25zZU1hbmFnZXJTZXJ2aWNlLCBUc2lDb25maXJtYXRpb25TZXJ2aWNlLCBUc2lOb3RpZmljYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMnO1xyXG5pbXBvcnQgeyBUc2lGb3JtQ29tcG9uZW50QmFzZUNvbXBvbmVudCB9IGZyb20gJy4uLy4uL3RzaS1iYXNlL2NvbXBvbmVudHMvdHNpLWZvcm0tYmFzZS90c2ktZm9ybS1iYXNlLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFR5cGVSZWdpc3RyeUhlbHBlciB9IGZyb20gJy4uLy4uL3RzaS1oZWxwZXJzJztcclxuaW1wb3J0IHsgZm9ya0pvaW4gfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgTGF5b3V0SGVscGVyU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2xheW91dC9sYXlvdXQtaGVscGVyLnNlcnZpY2UnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdhcHAtY3JlYXRlLW9yLWVkaXQtZW50aXR5LWluZm9ybWF0aW9ucycsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2NyZWF0ZS1vci1lZGl0LWVudGl0eS1pbmZvcm1hdGlvbnMuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsOiAnLi9jcmVhdGUtb3ItZWRpdC1lbnRpdHktaW5mb3JtYXRpb25zLmNvbXBvbmVudC5zY3NzJyxcclxuICBwcm92aWRlcnM6IFsuLi5hcHBQcm92aWRlcnNdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDcmVhdGVPckVkaXRFbnRpdHlJbmZvcm1hdGlvbnNDb21wb25lbnQgZXh0ZW5kcyBUc2lGb3JtQ29tcG9uZW50QmFzZUNvbXBvbmVudCB7XHJcbiAgZW50aXR5V2l0aFJlbGF0aW9uczogRW50aXR5SW5mb1dpdGhSZWxhdGlvbnMgPSBuZXcgRW50aXR5SW5mb1dpdGhSZWxhdGlvbnMoKTtcclxuICBrZXlDb2x1bW5PcHRpb25zOiBLZXlWYWx1ZTxzdHJpbmcsIHN0cmluZz5bXSA9IFtdO1xyXG4gIGVuZHBvaW50SW5mb3M6IEVuZHBvaW50SW5mb3NbXSA9IFtdO1xyXG4gIHN0YXR1c1RyYW5zaXRpb25zSW5mbzogU3RhdHVzVHJhbnNpdGlvbnNJbmZvUmVzcG9uc2UgIHwgbnVsbCA9IG51bGw7XHJcbiAgY29tcG9uZW50c09wdGlvbnM6IEtleVZhbHVlPHN0cmluZywgc3RyaW5nPltdID0gVHlwZVJlZ2lzdHJ5SGVscGVyLmdldEJ1c2luZXNzQ29tcG9uZW50TGlzdCgpO1xyXG5cclxuICB1aWQ/OiBzdHJpbmc7XHJcbiAgbW9kZWxDb2x1bW5zRGF0YTogRW50aXR5Q29sdW1uRGV0YWlsUmVzcG9uc2VbXSA9IFtdO1xyXG4gIGRiQ29sdW1uc0RhdGE6IEVudGl0eUNvbHVtbkRldGFpbFJlc3BvbnNlW10gPSBbXTtcclxuICBzcWxDb2x1bW5zRGF0YTogRW50aXR5Q29sdW1uRGV0YWlsUmVzcG9uc2VbXSA9IFtdO1xyXG5cclxuICBwcm9wZXJ0aWVzU2VhcmNoVGV4dDogc3RyaW5nID0gJyc7XHJcbiAgcHJvcGVydGllc0ZpcnN0OiBudW1iZXIgPSAwO1xyXG4gIHByb3BlcnRpZXNQYWdlU2l6ZTogbnVtYmVyID0gMTA7XHJcblxyXG4gIG1vZGVsQ29tcGFyaXNvbk1hcDogTWFwPHN0cmluZywgUmVjb3JkPHN0cmluZywgc3RyaW5nPj4gPSBuZXcgTWFwKCk7XHJcbiAgZGJDb21wYXJpc29uTWFwOiBNYXA8c3RyaW5nLCBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+PiA9IG5ldyBNYXAoKTtcclxuICBzcWxDb21wYXJpc29uTWFwOiBNYXA8c3RyaW5nLCBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+PiA9IG5ldyBNYXAoKTtcclxuXHJcbiAgcHJvcGVydGllc0dyaWRDb2x1bW5zOiBBcnJheTxHcmlkQ29sdW1uPiA9IFtcclxuICAgIHsgaGVhZGVyOiAnYWRtaW5pc3RyYXRpb25fcHJvcGVydGllc19uYW1lJywgZmllbGQ6ICduYW1lJyB9LFxyXG4gICAgeyBoZWFkZXI6ICdhZG1pbmlzdHJhdGlvbl9wcm9wZXJ0aWVzX3R5cGUnLCBmaWVsZDogJ3R5cGUnIH0sXHJcbiAgICB7IGhlYWRlcjogJ2FkbWluaXN0cmF0aW9uX3Byb3BlcnRpZXNfaXNOdWxsYWJsZScsIGZpZWxkOiAnaXNOdWxsYWJsZScsIHR5cGU6IElucHV0VHlwZXMuQ0hFQ0tCT1ggfSxcclxuICAgIHsgaGVhZGVyOiAnYWRtaW5pc3RyYXRpb25fcHJvcGVydGllc19tYXhMZW5ndGgnLCBmaWVsZDogJ21heExlbmd0aCcgfVxyXG4gIF07XHJcblxyXG4gIHBlcm1pc3Npb25zR3JpZENvbHVtbnM6IEFycmF5PEdyaWRDb2x1bW4+ID0gW1xyXG4gICAgeyBoZWFkZXI6ICdhZG1pbmlzdHJhdGlvbl9wZXJtaXNzaW9uc19odHRwTWV0aG9kJywgZmllbGQ6ICdodHRwTWV0aG9kJyB9LFxyXG4gICAgeyBoZWFkZXI6ICdhZG1pbmlzdHJhdGlvbl9wZXJtaXNzaW9uc19yb3V0ZScsIGZpZWxkOiAncm91dGUnIH0sXHJcbiAgICB7IGhlYWRlcjogJ2FkbWluaXN0cmF0aW9uX3Blcm1pc3Npb25zX2FjY2Vzc1JpZ2h0cycsIGZpZWxkOiAnYWNjZXNzUmlnaHRzJyB9LFxyXG4gICAgeyBoZWFkZXI6ICdhZG1pbmlzdHJhdGlvbl9wZXJtaXNzaW9uc19tZXRob2ROYW1lJywgZmllbGQ6ICdtZXRob2ROYW1lJyB9XHJcbiAgXTtcclxuXHJcbiAgd29ya2Zsb3dHcmlkQ29sdW1uczogQXJyYXk8R3JpZENvbHVtbj4gPSBbXHJcbiAgICB7IGhlYWRlcjogJ2FkbWluaXN0cmF0aW9uX3dvcmtmbG93X2Zyb21TdGF0dXMnLCBmaWVsZDogJ2Zyb21TdGF0dXMnIH0sXHJcbiAgICB7IGhlYWRlcjogJ2FkbWluaXN0cmF0aW9uX3dvcmtmbG93X3RvU3RhdHVzJywgZmllbGQ6ICd0b1N0YXR1cycgfSxcclxuICAgIHsgaGVhZGVyOiAnYWRtaW5pc3RyYXRpb25fd29ya2Zsb3dfcmVxdWlyZWRBY2Nlc3NSaWdodHMnLCBmaWVsZDogJ3JlcXVpcmVkQWNjZXNzUmlnaHRzJyB9XHJcbiAgXTtcclxuXHJcblxyXG4gIGVudGl0aWVzUmVsYXRpb25zQ29sdW1uczogQXJyYXk8R3JpZENvbHVtbj4gPSBbXHJcbiAgICB7IGhlYWRlcjogJ2FkbWluaXN0cmF0aW9uX2VudGl0eVJlbGF0aW9uc19lbnRpdHlGcm9tJywgZmllbGQ6ICdlbnRpdHlGcm9tJywgZGlzYWJsZWQ6IHRydWUgfSxcclxuICAgIHsgaGVhZGVyOiAnYWRtaW5pc3RyYXRpb25fZW50aXR5UmVsYXRpb25zX2VudGl0eVRvJywgZmllbGQ6ICdlbnRpdHlUbycgfSxcclxuICAgIHsgaGVhZGVyOiAnYWRtaW5pc3RyYXRpb25fZW50aXR5UmVsYXRpb25zX2xvZ0Nhc2NhZGUnLCBmaWVsZDogJ2xvZ0Nhc2NhZGUnLCB0eXBlOiBJbnB1dFR5cGVzLkNIRUNLQk9YIH0sXHJcbiAgICB7IGhlYWRlcjogJ2FkbWluaXN0cmF0aW9uX2VudGl0eVJlbGF0aW9uc19kdXBsaWNhdGVDYXNjYWRlJywgZmllbGQ6ICdkdXBsaWNhdGVDYXNjYWRlJywgdHlwZTogSW5wdXRUeXBlcy5DSEVDS0JPWCB9LFxyXG4gICAgeyBoZWFkZXI6ICdhZG1pbmlzdHJhdGlvbl9lbnRpdHlSZWxhdGlvbnNfZGVsZXRlQmVoYXZpb3VyJywgZmllbGQ6ICdkZWxldGVCZWhhdmlvdXInIH1cclxuICBdXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwdWJsaWMgX2VudGl0eUluZm9ybWF0aW9uc1NlcnZpY2U6IEVudGl0eUNvbmZpZ3VyYXRpb25TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfZXJyb3JSZXNwb25zZU1hbmFnZXJTZXJ2aWNlOiBFcnJvclJlc3BvbnNlTWFuYWdlclNlcnZpY2UsXHJcbiAgICBwdWJsaWMgb3ZlcnJpZGUgcmVmOiBEeW5hbWljRGlhbG9nUmVmLFxyXG4gICAgcHVibGljIG92ZXJyaWRlIGNvbmZpZzogRHluYW1pY0RpYWxvZ0NvbmZpZyxcclxuICAgIHByaXZhdGUgX25vdGlmaWNhdGlvblNlcnZpY2U6IFRzaU5vdGlmaWNhdGlvblNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9jb25maXJtYXRpb25TZXJ2aWNlOiBUc2lDb25maXJtYXRpb25TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfYXBpRXhwbG9yZXJTZXJ2aWNlOiBBcGlFeHBsb3JlclNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9zdHJpcGVkUm93c0xheW91dEhlbHBlclNlcnZpY2U6IExheW91dEhlbHBlclNlcnZpY2UpIHtcclxuICAgIHN1cGVyKHJlZiwgY29uZmlnKTtcclxuICB9XHJcblxyXG4gIGdldCBzdHJpcGVkUm93cygpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl9zdHJpcGVkUm93c0xheW91dEhlbHBlclNlcnZpY2UubGF5b3V0Q29uZmlndXJhdGlvbi5pc1N0cmlwZWRSb3dzRW5hYmxlZDtcclxuICB9XHJcblxyXG4gIGdldENvbG9ubmVzQnlDbGFzc05hbWVBc0tleVZhbHVlUGFpcihjbGFzc05hbWU/OiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGlmIChjbGFzc05hbWUpIHtcclxuICAgICAgdGhpcy5fZW50aXR5SW5mb3JtYXRpb25zU2VydmljZS5nZXRDb2xvbm5lc0J5Q2xhc3NOYW1lQXNLZXlWYWx1ZVBhaXIoY2xhc3NOYW1lKVxyXG4gICAgICAgIC5zdWJzY3JpYmUoY29sdW1ucyA9PiB7XHJcbiAgICAgICAgICB0aGlzLmtleUNvbHVtbk9wdGlvbnMgPSBjb2x1bW5zO1xyXG4gICAgICAgICAgdGhpcy5lbnRpdHlXaXRoUmVsYXRpb25zLnJlbGF0aW9ucy5tYXAoZXIgPT4gZXIuZW50aXR5RnJvbSA9IGNsYXNzTmFtZSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRQZXJtaXNzaW9uc0J5Q2xhc3NOYW1lKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuaWQpIHtcclxuICAgICAgdGhpcy5fYXBpRXhwbG9yZXJTZXJ2aWNlLmdldEVuZHBvaW50c0luZm9zKHRoaXMuaWQpLnN1YnNjcmliZSh7XHJcbiAgICAgICAgbmV4dDogKGVuZHBvaW50c0luZm9zKSA9PiB7XHJcbiAgICAgICAgICBpZiAoZW5kcG9pbnRzSW5mb3MgJiYgQXJyYXkuaXNBcnJheShlbmRwb2ludHNJbmZvcykgJiYgZW5kcG9pbnRzSW5mb3MubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICB0aGlzLmVuZHBvaW50SW5mb3MgPSBlbmRwb2ludHNJbmZvcztcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIGVycm9yOiAoZXJyb3IpID0+IHtcclxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGZldGNoaW5nIHBlcm1pc3Npb25zOicsIGVycm9yKTtcclxuICAgICAgICAgIHRoaXMuX2Vycm9yUmVzcG9uc2VNYW5hZ2VyU2VydmljZS5zaG93RXJyb3JNZXNzYWdlKGVycm9yKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0U3RhdHVzVHJhbnNpdGlvbnNJbmZvQnlDbGFzc05hbWUoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5pZCkge1xyXG4gICAgICB0aGlzLl9hcGlFeHBsb3JlclNlcnZpY2UuZ2V0U3RhdHVzVHJhbnNpdGlvbkluZm8odGhpcy5pZCkuc3Vic2NyaWJlKHtcclxuICAgICAgICBuZXh0OiAoc3RhdHVzVHJhbnNpdGlvbnNJbmZvKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnN0YXR1c1RyYW5zaXRpb25zSW5mbyA9IHN0YXR1c1RyYW5zaXRpb25zSW5mbyA/PyBudWxsO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZXJyb3I6IChlcnJvcikgPT4ge1xyXG4gICAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgZmV0Y2hpbmcgc3RhdHVzIHRyYW5zaXRpb25zIGluZm86JywgZXJyb3IpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvdmVycmlkZSBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHN1cGVyLm5nT25Jbml0KCk7XHJcbiAgICB0aGlzLmdldENvbG9ubmVzQnlDbGFzc05hbWVBc0tleVZhbHVlUGFpcih0aGlzLmlkKTtcclxuICAgIHRoaXMuZ2V0UGVybWlzc2lvbnNCeUNsYXNzTmFtZSgpO1xyXG4gICAgdGhpcy5nZXRTdGF0dXNUcmFuc2l0aW9uc0luZm9CeUNsYXNzTmFtZSgpO1xyXG4gICAgdGhpcy5nZXRQcm9wZXJ0aWVzRGF0YSgpO1xyXG4gICAgaWYgKFxyXG4gICAgICAodGhpcy5tb2RlID09PSBNb2Rlcy5lZGl0IHx8IHRoaXMubW9kZSA9PT0gTW9kZXMuZGVsZXRlIHx8IHRoaXMubW9kZSA9PT0gTW9kZXMuY29uc3VsdCkgJiZcclxuICAgICAgdGhpcy5pZCAhPT0gdW5kZWZpbmVkICYmXHJcbiAgICAgIHRoaXMuaWQgIT09IG51bGxcclxuICAgICkge1xyXG4gICAgICB0aGlzLmlzbG9hZGluZyA9IHRydWU7XHJcbiAgICAgIHRoaXMuX2VudGl0eUluZm9ybWF0aW9uc1NlcnZpY2UuZ2V0RW50aXR5SW5mb3JtYXRpb25zQW5kUmVsYXRpb25zKHRoaXMuaWQpLnN1YnNjcmliZSh7XHJcbiAgICAgICAgbmV4dDogKGRhdGEpID0+IHtcclxuICAgICAgICAgIHRoaXMuZW50aXR5V2l0aFJlbGF0aW9ucyA9IGRhdGE7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBlcnJvcjogKGVycm9yKSA9PiB7XHJcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBmZXRjaGluZyBlbnRpdHlJbmZvcm1hdGlvbjonLCBlcnJvcik7XHJcbiAgICAgICAgICB0aGlzLl9lcnJvclJlc3BvbnNlTWFuYWdlclNlcnZpY2Uuc2hvd0Vycm9yTWVzc2FnZShlcnJvcik7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBjb21wbGV0ZTogKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5pc2xvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb3ZlcnJpZGUgc2F2ZSgpOiB2b2lkIHtcclxuICAgIHN1cGVyLnNhdmUoKVxyXG4gICAgdGhpcy5zYXZpbmcgPSBmYWxzZTtcclxuICAgIHRoaXMuaXNsb2FkaW5nID0gdHJ1ZTtcclxuXHJcbiAgICBpZiAodGhpcy5tb2RlID09PSBNb2Rlcy5jcmVhdGUpIHtcclxuICAgICAgdGhpcy5fZW50aXR5SW5mb3JtYXRpb25zU2VydmljZS5jcmVhdGUodGhpcy5lbnRpdHlXaXRoUmVsYXRpb25zKS5zdWJzY3JpYmUoe1xyXG4gICAgICAgIG5leHQ6ICgpID0+IHtcclxuICAgICAgICAgIHRoaXMuX25vdGlmaWNhdGlvblNlcnZpY2UuaW5mbyh0aGlzLmwoTG9jYWxpemF0aW9uS2V5cy5zYXZlZFN1Y2Nlc3NmdWxseSkpO1xyXG4gICAgICAgICAgdGhpcy5oaWRlKHRydWUpO1xyXG4gICAgICAgICAgdGhpcy5vblNhdmUuZW1pdCgpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZXJyb3I6IChyZXNwb25zZTogSHR0cEVycm9yUmVzcG9uc2UpID0+IHtcclxuICAgICAgICAgIHRoaXMuc2F2aW5nID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLmlzbG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy5fZXJyb3JSZXNwb25zZU1hbmFnZXJTZXJ2aWNlLnNob3dFcnJvck1lc3NhZ2UocmVzcG9uc2UpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgY29tcGxldGU6ICgpID0+IHtcclxuICAgICAgICAgIHRoaXMuaXNsb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIGlmIChcclxuICAgICAgdGhpcy5tb2RlID09PSBNb2Rlcy5lZGl0XHJcbiAgICAgICYmIHRoaXMuZW50aXR5V2l0aFJlbGF0aW9uc1xyXG4gICAgICAmJiB0aGlzLmVudGl0eVdpdGhSZWxhdGlvbnMuZW50aXR5LmNsYXNzTmFtZVxyXG4gICAgKSB7XHJcbiAgICAgIGxldCB1cGRhdGVFbnRpdHlJbmZvV2l0aFJlbGF0aW9uc1JlcXVlc3QgPSBuZXcgVXBkYXRlRW50aXR5SW5mb1dpdGhSZWxhdGlvbnNSZXF1ZXN0KHRoaXMuaWQgPz8gJycsIHRoaXMuZW50aXR5V2l0aFJlbGF0aW9ucy5lbnRpdHksIHRoaXMuZW50aXR5V2l0aFJlbGF0aW9ucy5yZWxhdGlvbnMpO1xyXG4gICAgICB0aGlzLl9lbnRpdHlJbmZvcm1hdGlvbnNTZXJ2aWNlLnVwZGF0ZSh1cGRhdGVFbnRpdHlJbmZvV2l0aFJlbGF0aW9uc1JlcXVlc3QpLnN1YnNjcmliZSh7XHJcbiAgICAgICAgbmV4dDogKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5fbm90aWZpY2F0aW9uU2VydmljZS5pbmZvKHRoaXMubChMb2NhbGl6YXRpb25LZXlzLnVwZGF0ZWRTdWNjZXNzZnVsbHkpKTtcclxuICAgICAgICAgIHRoaXMuaGlkZSh0cnVlKTtcclxuICAgICAgICAgIHRoaXMub25TYXZlLmVtaXQoKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGVycm9yOiAocmVzcG9uc2U6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnNhdmluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy5pc2xvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMuX2Vycm9yUmVzcG9uc2VNYW5hZ2VyU2VydmljZS5zaG93RXJyb3JNZXNzYWdlKHJlc3BvbnNlKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGNvbXBsZXRlOiAoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmlzbG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAodGhpcy5tb2RlID09PSBNb2Rlcy5kZWxldGUpIHtcclxuICAgICAgdGhpcy5fY29uZmlybWF0aW9uU2VydmljZS5jb25maXJtKFxyXG4gICAgICAgIExvY2FsaXphdGlvbktleXMuY29uZmlybURlbGV0ZSxcclxuICAgICAgICB1bmRlZmluZWQsXHJcbiAgICAgICAgKHJlc3VsdDogYm9vbGVhbikgPT4ge1xyXG4gICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICByZXN1bHRcclxuICAgICAgICAgICAgJiYgdGhpcy5lbnRpdHlXaXRoUmVsYXRpb25zLmVudGl0eS5jbGFzc05hbWVcclxuICAgICAgICAgICkge1xyXG4gICAgICAgICAgICB0aGlzLl9lbnRpdHlJbmZvcm1hdGlvbnNTZXJ2aWNlLmRlbGV0ZSh0aGlzLmlkID8/ICcnKS5zdWJzY3JpYmUoe1xyXG4gICAgICAgICAgICAgIG5leHQ6ICgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX25vdGlmaWNhdGlvblNlcnZpY2Uuc3VjY2Vzcyh0aGlzLmwoTG9jYWxpemF0aW9uS2V5cy5kZWxldGVkU3VjY2Vzc2Z1bGx5KSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmhpZGUodHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm9uU2F2ZS5lbWl0KCk7XHJcbiAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICBlcnJvcjogKHJlc3BvbnNlOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fZXJyb3JSZXNwb25zZU1hbmFnZXJTZXJ2aWNlLnNob3dFcnJvck1lc3NhZ2UocmVzcG9uc2UpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zYXZpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIHRoaXMuaXNsb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICBjb21wbGV0ZTogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pc2xvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldFByb3BlcnRpZXNEYXRhKCk6IHZvaWQge1xyXG4gICAgdGhpcy5pc2xvYWRpbmcgPSB0cnVlO1xyXG4gICAgaWYgKHRoaXMuaWQpIHtcclxuICAgICAgZm9ya0pvaW4oe1xyXG4gICAgICAgIG1vZGVsQ29sdW1uczogdGhpcy5fZW50aXR5SW5mb3JtYXRpb25zU2VydmljZS5nZXRFbnRpdHljb2x1bW5zRnJvbU1vZGVscyh0aGlzLmlkKSxcclxuICAgICAgICBkYkNvbHVtbnM6IHRoaXMuX2VudGl0eUluZm9ybWF0aW9uc1NlcnZpY2UuZ2V0Q29sdW1uc0Zyb21Qcm9qZWN0RGF0YWJhc2UodGhpcy5pZCksXHJcbiAgICAgICAgc3FsQ29sdW1uczogdGhpcy5fZW50aXR5SW5mb3JtYXRpb25zU2VydmljZS5nZXRTcWxDb2x1bW5zKHRoaXMuaWQpXHJcbiAgICAgIH0pLnN1YnNjcmliZSh7XHJcbiAgICAgICAgbmV4dDogKHsgbW9kZWxDb2x1bW5zLCBkYkNvbHVtbnMsIHNxbENvbHVtbnMgfSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5tb2RlbENvbHVtbnNEYXRhID0gbW9kZWxDb2x1bW5zID8/IFtdO1xyXG4gICAgICAgICAgdGhpcy5kYkNvbHVtbnNEYXRhID0gZGJDb2x1bW5zID8/IFtdO1xyXG4gICAgICAgICAgdGhpcy5zcWxDb2x1bW5zRGF0YSA9IHNxbENvbHVtbnMgPz8gW107XHJcbiAgICAgICAgICB0aGlzLmNvbXB1dGVDb21wYXJpc29ucygpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgY29tcGxldGU6ICgpID0+IHtcclxuICAgICAgICAgIHRoaXMuaXNsb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBlcnJvcjogKGVycm9yKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmlzbG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgZmV0Y2hpbmcgcHJvcGVydGllcyBkYXRhOicsIGVycm9yKTtcclxuICAgICAgICAgIHRoaXMuX2Vycm9yUmVzcG9uc2VNYW5hZ2VyU2VydmljZS5zaG93RXJyb3JNZXNzYWdlKGVycm9yKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25BZGRSZWxhdGlvbigpOiB2b2lkIHtcclxuICAgIHRoaXMuZW50aXR5V2l0aFJlbGF0aW9ucy5yZWxhdGlvbnMubWFwKGVyID0+IGVyLmVudGl0eUZyb20gPSB0aGlzLmVudGl0eVdpdGhSZWxhdGlvbnMuZW50aXR5LmNsYXNzTmFtZSA/PyAnJyk7XHJcbiAgfVxyXG5cclxuXHJcbiAgcHJpdmF0ZSBmaWx0ZXJDb2x1bW5zKGRhdGE6IEVudGl0eUNvbHVtbkRldGFpbFJlc3BvbnNlW10pOiBFbnRpdHlDb2x1bW5EZXRhaWxSZXNwb25zZVtdIHtcclxuICAgIGlmICghdGhpcy5wcm9wZXJ0aWVzU2VhcmNoVGV4dCkgcmV0dXJuIGRhdGE7XHJcbiAgICBjb25zdCBzZWFyY2ggPSB0aGlzLnByb3BlcnRpZXNTZWFyY2hUZXh0LnRvTG93ZXJDYXNlKCk7XHJcbiAgICByZXR1cm4gZGF0YS5maWx0ZXIoY29sID0+XHJcbiAgICAgIGNvbC5uYW1lLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoc2VhcmNoKSB8fFxyXG4gICAgICBjb2wudHlwZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHNlYXJjaClcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBnZXQgZmlsdGVyZWRNb2RlbENvbHVtbnMoKTogRW50aXR5Q29sdW1uRGV0YWlsUmVzcG9uc2VbXSB7XHJcbiAgICByZXR1cm4gdGhpcy5maWx0ZXJDb2x1bW5zKHRoaXMubW9kZWxDb2x1bW5zRGF0YSk7XHJcbiAgfVxyXG5cclxuICBnZXQgZmlsdGVyZWREYkNvbHVtbnMoKTogRW50aXR5Q29sdW1uRGV0YWlsUmVzcG9uc2VbXSB7XHJcbiAgICByZXR1cm4gdGhpcy5maWx0ZXJDb2x1bW5zKHRoaXMuZGJDb2x1bW5zRGF0YSk7XHJcbiAgfVxyXG5cclxuICBnZXQgZmlsdGVyZWRTcWxDb2x1bW5zKCk6IEVudGl0eUNvbHVtbkRldGFpbFJlc3BvbnNlW10ge1xyXG4gICAgcmV0dXJuIHRoaXMuZmlsdGVyQ29sdW1ucyh0aGlzLnNxbENvbHVtbnNEYXRhKTtcclxuICB9XHJcblxyXG4gIGdldCBwcm9wZXJ0aWVzVG90YWxSZWNvcmRzKCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gTWF0aC5tYXgoXHJcbiAgICAgIHRoaXMuZmlsdGVyZWRNb2RlbENvbHVtbnMubGVuZ3RoLFxyXG4gICAgICB0aGlzLmZpbHRlcmVkRGJDb2x1bW5zLmxlbmd0aCxcclxuICAgICAgdGhpcy5maWx0ZXJlZFNxbENvbHVtbnMubGVuZ3RoXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgZ2V0IHBhZ2VkTW9kZWxDb2x1bW5zKCk6IEVudGl0eUNvbHVtbkRldGFpbFJlc3BvbnNlW10ge1xyXG4gICAgcmV0dXJuIHRoaXMuZmlsdGVyZWRNb2RlbENvbHVtbnMuc2xpY2UodGhpcy5wcm9wZXJ0aWVzRmlyc3QsIHRoaXMucHJvcGVydGllc0ZpcnN0ICsgdGhpcy5wcm9wZXJ0aWVzUGFnZVNpemUpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IHBhZ2VkRGJDb2x1bW5zKCk6IEVudGl0eUNvbHVtbkRldGFpbFJlc3BvbnNlW10ge1xyXG4gICAgcmV0dXJuIHRoaXMuZmlsdGVyZWREYkNvbHVtbnMuc2xpY2UodGhpcy5wcm9wZXJ0aWVzRmlyc3QsIHRoaXMucHJvcGVydGllc0ZpcnN0ICsgdGhpcy5wcm9wZXJ0aWVzUGFnZVNpemUpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IHBhZ2VkU3FsQ29sdW1ucygpOiBFbnRpdHlDb2x1bW5EZXRhaWxSZXNwb25zZVtdIHtcclxuICAgIHJldHVybiB0aGlzLmZpbHRlcmVkU3FsQ29sdW1ucy5zbGljZSh0aGlzLnByb3BlcnRpZXNGaXJzdCwgdGhpcy5wcm9wZXJ0aWVzRmlyc3QgKyB0aGlzLnByb3BlcnRpZXNQYWdlU2l6ZSk7XHJcbiAgfVxyXG5cclxuICBvblByb3BlcnRpZXNQYWdlQ2hhbmdlKGV2ZW50OiBhbnkpOiB2b2lkIHtcclxuICAgIHRoaXMucHJvcGVydGllc0ZpcnN0ID0gZXZlbnQuZmlyc3Q7XHJcbiAgICB0aGlzLnByb3BlcnRpZXNQYWdlU2l6ZSA9IGV2ZW50LnJvd3M7XHJcbiAgfVxyXG5cclxuICBvblByb3BlcnRpZXNTZWFyY2goKTogdm9pZCB7XHJcbiAgICB0aGlzLnByb3BlcnRpZXNGaXJzdCA9IDA7XHJcbiAgfVxyXG5cclxuICBjb21wdXRlQ29tcGFyaXNvbnMoKTogdm9pZCB7XHJcbiAgICBjb25zdCBtb2RlbE1hcCA9IG5ldyBNYXA8c3RyaW5nLCBFbnRpdHlDb2x1bW5EZXRhaWxSZXNwb25zZT4oKTtcclxuICAgIGNvbnN0IGRiTWFwID0gbmV3IE1hcDxzdHJpbmcsIEVudGl0eUNvbHVtbkRldGFpbFJlc3BvbnNlPigpO1xyXG4gICAgY29uc3Qgc3FsTWFwID0gbmV3IE1hcDxzdHJpbmcsIEVudGl0eUNvbHVtbkRldGFpbFJlc3BvbnNlPigpO1xyXG5cclxuICAgIHRoaXMubW9kZWxDb2x1bW5zRGF0YS5mb3JFYWNoKGNvbCA9PiBtb2RlbE1hcC5zZXQoY29sLm5hbWUudG9Mb3dlckNhc2UoKSwgY29sKSk7XHJcbiAgICB0aGlzLmRiQ29sdW1uc0RhdGEuZm9yRWFjaChjb2wgPT4gZGJNYXAuc2V0KGNvbC5uYW1lLnRvTG93ZXJDYXNlKCksIGNvbCkpO1xyXG4gICAgdGhpcy5zcWxDb2x1bW5zRGF0YS5mb3JFYWNoKGNvbCA9PiBzcWxNYXAuc2V0KGNvbC5uYW1lLnRvTG93ZXJDYXNlKCksIGNvbCkpO1xyXG5cclxuICAgIHRoaXMubW9kZWxDb21wYXJpc29uTWFwID0gdGhpcy5jb21wdXRlU291cmNlQ29tcGFyaXNvbih0aGlzLm1vZGVsQ29sdW1uc0RhdGEsIFtkYk1hcCwgc3FsTWFwXSk7XHJcbiAgICB0aGlzLmRiQ29tcGFyaXNvbk1hcCA9IHRoaXMuY29tcHV0ZVNvdXJjZUNvbXBhcmlzb24odGhpcy5kYkNvbHVtbnNEYXRhLCBbbW9kZWxNYXAsIHNxbE1hcF0pO1xyXG4gICAgdGhpcy5zcWxDb21wYXJpc29uTWFwID0gdGhpcy5jb21wdXRlU291cmNlQ29tcGFyaXNvbih0aGlzLnNxbENvbHVtbnNEYXRhLCBbbW9kZWxNYXAsIGRiTWFwXSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNvbXB1dGVTb3VyY2VDb21wYXJpc29uKFxyXG4gICAgc291cmNlRGF0YTogRW50aXR5Q29sdW1uRGV0YWlsUmVzcG9uc2VbXSxcclxuICAgIG90aGVyTWFwczogTWFwPHN0cmluZywgRW50aXR5Q29sdW1uRGV0YWlsUmVzcG9uc2U+W11cclxuICApOiBNYXA8c3RyaW5nLCBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+PiB7XHJcbiAgICBjb25zdCByZXN1bHQgPSBuZXcgTWFwPHN0cmluZywgUmVjb3JkPHN0cmluZywgc3RyaW5nPj4oKTtcclxuXHJcbiAgICBmb3IgKGNvbnN0IHJvdyBvZiBzb3VyY2VEYXRhKSB7XHJcbiAgICAgIGNvbnN0IGtleSA9IHJvdy5uYW1lLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgIGNvbnN0IGNsYXNzZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7IG5hbWU6ICcnLCB0eXBlOiAnJywgaXNOdWxsYWJsZTogJycsIG1heExlbmd0aDogJycgfTtcclxuXHJcbiAgICAgIGZvciAoY29uc3Qgb3RoZXJNYXAgb2Ygb3RoZXJNYXBzKSB7XHJcbiAgICAgICAgY29uc3Qgb3RoZXJSb3cgPSBvdGhlck1hcC5nZXQoa2V5KTtcclxuXHJcbiAgICAgICAgaWYgKCFvdGhlclJvdykge1xyXG4gICAgICAgICAgY2xhc3Nlc1snbmFtZSddID0gJ2NvbXBhcmlzb24tbWlzc2luZyc7XHJcbiAgICAgICAgICBjbGFzc2VzWyd0eXBlJ10gPSAnY29tcGFyaXNvbi1taXNzaW5nJztcclxuICAgICAgICAgIGNsYXNzZXNbJ2lzTnVsbGFibGUnXSA9ICdjb21wYXJpc29uLW1pc3NpbmcnO1xyXG4gICAgICAgICAgY2xhc3Nlc1snbWF4TGVuZ3RoJ10gPSAnY29tcGFyaXNvbi1taXNzaW5nJztcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKG90aGVyUm93LnR5cGUgIT09IHJvdy50eXBlICYmICFjbGFzc2VzWyd0eXBlJ10pIHtcclxuICAgICAgICAgIGNsYXNzZXNbJ3R5cGUnXSA9ICdjb21wYXJpc29uLXR5cGUtbWlzbWF0Y2gnO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKG90aGVyUm93Lm1heExlbmd0aCAhPT0gcm93Lm1heExlbmd0aCAmJiAhY2xhc3Nlc1snbWF4TGVuZ3RoJ10pIHtcclxuICAgICAgICAgIGNsYXNzZXNbJ21heExlbmd0aCddID0gJ2NvbXBhcmlzb24tbGVuZ3RoLW1pc21hdGNoJztcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJlc3VsdC5zZXQoa2V5LCBjbGFzc2VzKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG4gIH1cclxuXHJcbiAgZ2V0Q29tcGFyaXNvbkNsYXNzKHNvdXJjZTogJ21vZGVsJyB8ICdkYicgfCAnc3FsJywgcm93OiBFbnRpdHlDb2x1bW5EZXRhaWxSZXNwb25zZSwgZmllbGQ6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBjb25zdCBtYXAgPSBzb3VyY2UgPT09ICdtb2RlbCcgPyB0aGlzLm1vZGVsQ29tcGFyaXNvbk1hcFxyXG4gICAgICAgICAgICAgIDogc291cmNlID09PSAnZGInID8gdGhpcy5kYkNvbXBhcmlzb25NYXBcclxuICAgICAgICAgICAgICA6IHRoaXMuc3FsQ29tcGFyaXNvbk1hcDtcclxuICAgIGNvbnN0IGNvbXBhcmlzb24gPSBtYXAuZ2V0KHJvdy5uYW1lLnRvTG93ZXJDYXNlKCkpO1xyXG4gICAgaWYgKCFjb21wYXJpc29uKSByZXR1cm4gJyc7XHJcbiAgICByZXR1cm4gY29tcGFyaXNvbltmaWVsZF0gfHwgJyc7XHJcbiAgfVxyXG59IiwiPHRzaS1mb3JtIGNsYXNzPVwiZm9ybS1ob3Jpem9udGFsXCIgYXV0b2NvbXBsZXRlPVwib2ZmXCIgKG9uU3VibWl0KT1cInNhdmUoKVwiIFtpc0xvYWRpbmddPVwiaXNsb2FkaW5nXCI+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+XHJcbiAgICAgICAgICAgICAgICA8VHNpLUxhYmVsIGNsYXNzPVwiY29sLTRcIlxyXG4gICAgICAgICAgICAgICAgICBbbGFiZWxWYWx1ZV09XCInYWRtaW5pc3RyYXRpb25fZ2VzdGlvbkVudGl0eUluZm9ybWF0aW9uX2lzV29ya2Zsb3cnXCI+PC9Uc2ktTGFiZWw+XHJcbiAgICAgICAgICAgICAgICA8VHNpLUNoZWNrQm94IGNsYXNzPVwiY29sLThcIiBbaW5wdXROYW1lXT1cIidJc1dvcmtmbG93J1wiXHJcbiAgICAgICAgICAgICAgICAgIFsoaW5wdXRGaWVsZCldPVwiZW50aXR5V2l0aFJlbGF0aW9ucy5lbnRpdHkuaXNXb3JrZmxvd1wiPlxyXG4gICAgICAgICAgICAgICAgPC9Uc2ktQ2hlY2tCb3g+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZ3JpZFwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTZcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZ3JpZFwiPlxyXG4gICAgICAgICAgICAgICAgPFRzaS1MYWJlbCBjbGFzcz1cImNvbC00XCJcclxuICAgICAgICAgICAgICAgICAgW2xhYmVsVmFsdWVdPVwiJ2FkbWluaXN0cmF0aW9uX2dlc3Rpb25FbnRpdHlJbmZvcm1hdGlvbl9zdGF0dXNDb2x1bW5OYW1lJ1wiPjwvVHNpLUxhYmVsPlxyXG5cclxuICAgICAgICAgICAgICAgIDxUc2ktU2VhcmNoLUNvbWJvIGNsYXNzPVwiY29sLTZcIiBbZGF0YXNvdXJjZV09XCJrZXlDb2x1bW5PcHRpb25zXCJcclxuICAgICAgICAgICAgICAgICAgWyhiaW5kKV09XCJlbnRpdHlXaXRoUmVsYXRpb25zLmVudGl0eS5zdGF0dXNDb2x1bW5OYW1lXCIgaWQtZmllbGQ9XCJrZXlcIiBsYWJlbC1maWVsZD1cInZhbHVlXCJcclxuICAgICAgICAgICAgICAgICAgW3Nob3dDbGVhcl09XCJ0cnVlXCIgW2Rpc2FibGVkXT1cImlzRGVsZXRlTW9kZSgpIHx8IGlzQ29uc3VsdE1vZGUoKVwiPlxyXG4gICAgICAgICAgICAgICAgPC9Uc2ktU2VhcmNoLUNvbWJvPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTZcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZ3JpZFwiPlxyXG4gICAgICAgICAgICAgICAgPFRzaS1MYWJlbCBjbGFzcz1cImNvbC00XCJcclxuICAgICAgICAgICAgICAgICAgW2xhYmVsVmFsdWVdPVwiJ2FkbWluaXN0cmF0aW9uX2dlc3Rpb25FbnRpdHlJbmZvcm1hdGlvbl9zdGF0dXNFbnVtTmFtZSdcIj48L1RzaS1MYWJlbD5cclxuICAgICAgICAgICAgICAgIDxUc2ktVGV4dC1Cb3ggY2xhc3M9XCJjb2wtOFwiIFtpbnB1dE5hbWVdPVwiJ1N0YXR1c0VudW1OYW1lJ1wiXHJcbiAgICAgICAgICAgICAgICAgIFsoaW5wdXRGaWVsZCldPVwiZW50aXR5V2l0aFJlbGF0aW9ucy5lbnRpdHkuc3RhdHVzRW51bU5hbWVcIj5cclxuICAgICAgICAgICAgICAgIDwvVHNpLVRleHQtQm94PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJncmlkXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNlwiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJncmlkXCI+XHJcbiAgICAgICAgICAgICAgICA8VHNpLUxhYmVsIGNsYXNzPVwiY29sLTRcIlxyXG4gICAgICAgICAgICAgICAgICBbbGFiZWxWYWx1ZV09XCInYWRtaW5pc3RyYXRpb25fZ2VzdGlvbkVudGl0eUluZm9ybWF0aW9uX2RlZmF1bHRTdGF0dXMnXCI+PC9Uc2ktTGFiZWw+XHJcbiAgICAgICAgICAgICAgICA8VHNpLVRleHQtQm94IGNsYXNzPVwiY29sLThcIiBbaW5wdXROYW1lXT1cIidEZWZhdWx0U3RhdHVzJ1wiXHJcbiAgICAgICAgICAgICAgICAgIFsoaW5wdXRGaWVsZCldPVwiZW50aXR5V2l0aFJlbGF0aW9ucy5lbnRpdHkuZGVmYXVsdFN0YXR1c1wiPlxyXG4gICAgICAgICAgICAgICAgPC9Uc2ktVGV4dC1Cb3g+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC02XCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImdyaWRcIj5cclxuICAgICAgICAgICAgICAgIDxUc2ktTGFiZWwgY2xhc3M9XCJjb2wtNFwiXHJcbiAgICAgICAgICAgICAgICAgIFtsYWJlbFZhbHVlXT1cIidhZG1pbmlzdHJhdGlvbl9nZXN0aW9uRW50aXR5SW5mb3JtYXRpb25fYWR2YW5jZWRTZWFyY2hDb21wb25lbnQnXCI+PC9Uc2ktTGFiZWw+XHJcbiAgICAgICAgICAgICAgICA8VHNpLVNlYXJjaC1Db21ibyBjbGFzcz1cImNvbC04XCIgW2RhdGFzb3VyY2VdPVwiY29tcG9uZW50c09wdGlvbnNcIlxyXG4gICAgICAgICAgICAgICAgICBbKGJpbmQpXT1cImVudGl0eVdpdGhSZWxhdGlvbnMuZW50aXR5LmFkdmFuY2VkU2VhcmNoQ29tcG9uZW50XCIgaWQtZmllbGQ9XCJrZXlcIiBsYWJlbC1maWVsZD1cInZhbHVlXCJcclxuICAgICAgICAgICAgICAgICAgW3Nob3dDbGVhcl09XCJ0cnVlXCIgW2Rpc2FibGVkXT1cImlzRGVsZXRlTW9kZSgpIHx8IGlzQ29uc3VsdE1vZGUoKVwiPlxyXG4gICAgICAgICAgICAgICAgPC9Uc2ktU2VhcmNoLUNvbWJvPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJncmlkXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNlwiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJncmlkXCI+XHJcbiAgICAgICAgICAgICAgICA8VHNpLUxhYmVsIGNsYXNzPVwiY29sLTRcIlxyXG4gICAgICAgICAgICAgICAgICBbbGFiZWxWYWx1ZV09XCInYWRtaW5pc3RyYXRpb25fZ2VzdGlvbkVudGl0eUluZm9ybWF0aW9uX2NhcmRIZWFkZXJQaG90b0NvbHVtbidcIj48L1RzaS1MYWJlbD5cclxuXHJcbiAgICAgICAgICAgICAgICA8VHNpLVNlYXJjaC1Db21ibyBjbGFzcz1cImNvbC02XCIgW2RhdGFzb3VyY2VdPVwia2V5Q29sdW1uT3B0aW9uc1wiXHJcbiAgICAgICAgICAgICAgICAgIFsoYmluZCldPVwiZW50aXR5V2l0aFJlbGF0aW9ucy5lbnRpdHkuY2FyZEhlYWRlclBob3RvQ29sdW1uXCIgaWQtZmllbGQ9XCJrZXlcIiBsYWJlbC1maWVsZD1cInZhbHVlXCJcclxuICAgICAgICAgICAgICAgICAgW3Nob3dDbGVhcl09XCJ0cnVlXCIgW2Rpc2FibGVkXT1cImlzRGVsZXRlTW9kZSgpIHx8IGlzQ29uc3VsdE1vZGUoKVwiPlxyXG4gICAgICAgICAgICAgICAgPC9Uc2ktU2VhcmNoLUNvbWJvPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNlwiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJncmlkXCI+XHJcbiAgICAgICAgICAgICAgICA8VHNpLUxhYmVsIGNsYXNzPVwiY29sLTRcIlxyXG4gICAgICAgICAgICAgICAgICBbbGFiZWxWYWx1ZV09XCInYWRtaW5pc3RyYXRpb25fZ2VzdGlvbkVudGl0eUluZm9ybWF0aW9uX2NhcmRUaXRsZUNvbHVtbidcIj48L1RzaS1MYWJlbD5cclxuXHJcbiAgICAgICAgICAgICAgICA8VHNpLVNlYXJjaC1Db21ibyBjbGFzcz1cImNvbC02XCIgW2RhdGFzb3VyY2VdPVwia2V5Q29sdW1uT3B0aW9uc1wiXHJcbiAgICAgICAgICAgICAgICAgIFsoYmluZCldPVwiZW50aXR5V2l0aFJlbGF0aW9ucy5lbnRpdHkuY2FyZFRpdGxlQ29sdW1uXCIgaWQtZmllbGQ9XCJrZXlcIiBsYWJlbC1maWVsZD1cInZhbHVlXCJcclxuICAgICAgICAgICAgICAgICAgW3Nob3dDbGVhcl09XCJ0cnVlXCIgW2Rpc2FibGVkXT1cImlzRGVsZXRlTW9kZSgpIHx8IGlzQ29uc3VsdE1vZGUoKVwiPlxyXG4gICAgICAgICAgICAgICAgPC9Uc2ktU2VhcmNoLUNvbWJvPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJncmlkXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNlwiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJncmlkXCI+XHJcbiAgICAgICAgICAgICAgICA8VHNpLUxhYmVsIGNsYXNzPVwiY29sLTRcIlxyXG4gICAgICAgICAgICAgICAgICBbbGFiZWxWYWx1ZV09XCInYWRtaW5pc3RyYXRpb25fZ2VzdGlvbkVudGl0eUluZm9ybWF0aW9uX2NhcmRTdWJIZWFkZXJDb2x1bW4nXCI+PC9Uc2ktTGFiZWw+XHJcbiAgICAgICAgICAgICAgICA8VHNpLVNlYXJjaC1Db21ibyBjbGFzcz1cImNvbC02XCIgW2RhdGFzb3VyY2VdPVwia2V5Q29sdW1uT3B0aW9uc1wiXHJcbiAgICAgICAgICAgICAgICAgIFsoYmluZCldPVwiZW50aXR5V2l0aFJlbGF0aW9ucy5lbnRpdHkuY2FyZFN1YkhlYWRlckNvbHVtblwiIGlkLWZpZWxkPVwia2V5XCIgbGFiZWwtZmllbGQ9XCJ2YWx1ZVwiXHJcbiAgICAgICAgICAgICAgICAgIFtzaG93Q2xlYXJdPVwidHJ1ZVwiIFtkaXNhYmxlZF09XCJpc0RlbGV0ZU1vZGUoKSB8fCBpc0NvbnN1bHRNb2RlKClcIj5cclxuICAgICAgICAgICAgICAgIDwvVHNpLVNlYXJjaC1Db21ibz5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNlwiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJncmlkXCI+XHJcbiAgICAgICAgICAgICAgICA8VHNpLUxhYmVsIGNsYXNzPVwiY29sLTRcIlxyXG4gICAgICAgICAgICAgICAgICBbbGFiZWxWYWx1ZV09XCInYWRtaW5pc3RyYXRpb25fZ2VzdGlvbkVudGl0eUluZm9ybWF0aW9uX2NhcmREZXNjcmlwdGlvbkNvbHVtbidcIj48L1RzaS1MYWJlbD5cclxuICAgICAgICAgICAgICAgIDxUc2ktU2VhcmNoLUNvbWJvIGNsYXNzPVwiY29sLTZcIiBbZGF0YXNvdXJjZV09XCJrZXlDb2x1bW5PcHRpb25zXCJcclxuICAgICAgICAgICAgICAgICAgWyhiaW5kKV09XCJlbnRpdHlXaXRoUmVsYXRpb25zLmVudGl0eS5jYXJkRGVzY3JpcHRpb25Db2x1bW5cIiBpZC1maWVsZD1cImtleVwiIGxhYmVsLWZpZWxkPVwidmFsdWVcIlxyXG4gICAgICAgICAgICAgICAgICBbc2hvd0NsZWFyXT1cInRydWVcIiBbZGlzYWJsZWRdPVwiaXNEZWxldGVNb2RlKCkgfHwgaXNDb25zdWx0TW9kZSgpXCI+XHJcbiAgICAgICAgICAgICAgICA8L1RzaS1TZWFyY2gtQ29tYm8+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZ3JpZFwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTZcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZ3JpZFwiPlxyXG4gICAgICAgICAgICAgICAgPFRzaS1MYWJlbCBjbGFzcz1cImNvbC00XCJcclxuICAgICAgICAgICAgICAgICAgW2xhYmVsVmFsdWVdPVwiJ2FkbWluaXN0cmF0aW9uX2dlc3Rpb25FbnRpdHlJbmZvcm1hdGlvbl9jYWxlbmRhclN0YXJ0RGF0ZSdcIj48L1RzaS1MYWJlbD5cclxuICAgICAgICAgICAgICAgIDxUc2ktVGV4dC1Cb3ggY2xhc3M9XCJjb2wtOFwiIFtpbnB1dE5hbWVdPVwiJ0NhbGVuZGFyU3RhcnREYXRlJ1wiXHJcbiAgICAgICAgICAgICAgICAgIFsoaW5wdXRGaWVsZCldPVwiZW50aXR5V2l0aFJlbGF0aW9ucy5lbnRpdHkuY2FsZW5kYXJTdGFydERhdGVDb2x1bW5cIj5cclxuICAgICAgICAgICAgICAgIDwvVHNpLVRleHQtQm94PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC02XCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImdyaWRcIj5cclxuICAgICAgICAgICAgICAgIDxUc2ktTGFiZWwgY2xhc3M9XCJjb2wtNFwiXHJcbiAgICAgICAgICAgICAgICAgIFtsYWJlbFZhbHVlXT1cIidhZG1pbmlzdHJhdGlvbl9nZXN0aW9uRW50aXR5SW5mb3JtYXRpb25fY2FsZW5kYXJFbmREYXRlJ1wiPjwvVHNpLUxhYmVsPlxyXG4gICAgICAgICAgICAgICAgPFRzaS1UZXh0LUJveCBjbGFzcz1cImNvbC04XCIgW2lucHV0TmFtZV09XCInQ2FsZW5kZXJFbmREYXRlJ1wiXHJcbiAgICAgICAgICAgICAgICAgIFsoaW5wdXRGaWVsZCldPVwiZW50aXR5V2l0aFJlbGF0aW9ucy5lbnRpdHkuY2FsZW5kYXJFbmREYXRlQ29sdW1uXCI+XHJcbiAgICAgICAgICAgICAgICA8L1RzaS1UZXh0LUJveD5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNlwiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJncmlkXCI+XHJcbiAgICAgICAgICAgICAgICA8VHNpLUxhYmVsIGNsYXNzPVwiY29sLTRcIiBbbGFiZWxWYWx1ZV09XCInYWRtaW5pc3RyYXRpb25fZ2VzdGlvbkVudGl0eUluZm9ybWF0aW9uX2ZyZXF1ZW50J1wiPjwvVHNpLUxhYmVsPlxyXG4gICAgICAgICAgICAgICAgPFRzaS1UZXh0LUJveCBjbGFzcz1cImNvbC04XCIgW2lucHV0TmFtZV09XCInRnJlcXVlbnQnXCJcclxuICAgICAgICAgICAgICAgICAgWyhpbnB1dEZpZWxkKV09XCJlbnRpdHlXaXRoUmVsYXRpb25zLmVudGl0eS5mcmVxdWVudFwiPlxyXG4gICAgICAgICAgICAgICAgPC9Uc2ktVGV4dC1Cb3g+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZ3JpZFwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTZcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZ3JpZFwiPlxyXG4gICAgICAgICAgICAgICAgPFRzaS1MYWJlbCBjbGFzcz1cImNvbC00XCJcclxuICAgICAgICAgICAgICAgICAgW2xhYmVsVmFsdWVdPVwiJ2FkbWluaXN0cmF0aW9uX2dlc3Rpb25FbnRpdHlJbmZvcm1hdGlvbl9jcmVhdGVGdW5jdGlvbmFsaXR5Q29kZSdcIj48L1RzaS1MYWJlbD5cclxuICAgICAgICAgICAgICAgIDxUc2ktVGV4dC1Cb3ggY2xhc3M9XCJjb2wtOFwiIFtpbnB1dE5hbWVdPVwiJ0NyZWF0ZUZ1bmN0aW9uYWxpdHlDb2RlJ1wiXHJcbiAgICAgICAgICAgICAgICAgIFsoaW5wdXRGaWVsZCldPVwiZW50aXR5V2l0aFJlbGF0aW9ucy5lbnRpdHkuY3JlYXRlRnVuY3Rpb25hbGl0eUNvZGVcIj5cclxuICAgICAgICAgICAgICAgIDwvVHNpLVRleHQtQm94PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC02XCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImdyaWRcIj5cclxuICAgICAgICAgICAgICAgIDxUc2ktTGFiZWwgY2xhc3M9XCJjb2wtNFwiXHJcbiAgICAgICAgICAgICAgICAgIFtsYWJlbFZhbHVlXT1cIidhZG1pbmlzdHJhdGlvbl9nZXN0aW9uRW50aXR5SW5mb3JtYXRpb25fcmVhZEZ1bmN0aW9uYWxpdHlDb2RlJ1wiPjwvVHNpLUxhYmVsPlxyXG4gICAgICAgICAgICAgICAgPFRzaS1UZXh0LUJveCBjbGFzcz1cImNvbC04XCIgW2lucHV0TmFtZV09XCInUmVhZEZ1bmN0aW9uYWxpdHlDb2RlJ1wiXHJcbiAgICAgICAgICAgICAgICAgIFsoaW5wdXRGaWVsZCldPVwiZW50aXR5V2l0aFJlbGF0aW9ucy5lbnRpdHkucmVhZEZ1bmN0aW9uYWxpdHlDb2RlXCI+XHJcbiAgICAgICAgICAgICAgICA8L1RzaS1UZXh0LUJveD5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJncmlkXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNlwiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJncmlkXCI+XHJcbiAgICAgICAgICAgICAgICA8VHNpLUxhYmVsIGNsYXNzPVwiY29sLTRcIlxyXG4gICAgICAgICAgICAgICAgICBbbGFiZWxWYWx1ZV09XCInYWRtaW5pc3RyYXRpb25fZ2VzdGlvbkVudGl0eUluZm9ybWF0aW9uX3VwZGF0ZUZ1bmN0aW9uYWxpdHlDb2RlJ1wiPjwvVHNpLUxhYmVsPlxyXG4gICAgICAgICAgICAgICAgPFRzaS1UZXh0LUJveCBjbGFzcz1cImNvbC04XCIgW2lucHV0TmFtZV09XCInVXBkYXRlRnVuY3Rpb25hbGl0eUNvZGUnXCJcclxuICAgICAgICAgICAgICAgICAgWyhpbnB1dEZpZWxkKV09XCJlbnRpdHlXaXRoUmVsYXRpb25zLmVudGl0eS51cGRhdGVGdW5jdGlvbmFsaXR5Q29kZVwiPlxyXG4gICAgICAgICAgICAgICAgPC9Uc2ktVGV4dC1Cb3g+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTZcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZ3JpZFwiPlxyXG4gICAgICAgICAgICAgICAgPFRzaS1MYWJlbCBjbGFzcz1cImNvbC00XCJcclxuICAgICAgICAgICAgICAgICAgW2xhYmVsVmFsdWVdPVwiJ2FkbWluaXN0cmF0aW9uX2dlc3Rpb25FbnRpdHlJbmZvcm1hdGlvbl9kZWxldGVGdW5jdGlvbmFsaXR5Q29kZSdcIj48L1RzaS1MYWJlbD5cclxuICAgICAgICAgICAgICAgIDxUc2ktVGV4dC1Cb3ggY2xhc3M9XCJjb2wtOFwiIFtpbnB1dE5hbWVdPVwiJ0RlbGV0ZUZ1bmN0aW9uYWxpdHlDb2RlJ1wiXHJcbiAgICAgICAgICAgICAgICAgIFsoaW5wdXRGaWVsZCldPVwiZW50aXR5V2l0aFJlbGF0aW9ucy5lbnRpdHkuZGVsZXRlRnVuY3Rpb25hbGl0eUNvZGVcIj5cclxuICAgICAgICAgICAgICAgIDwvVHNpLVRleHQtQm94PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2ZpZWxkc2V0PlxyXG4gICAgPC9wLXRhYlBhbmVsPlxyXG4gICAgPHAtdGFiUGFuZWwgW2hlYWRlcl09XCInYWRtaW5pc3RyYXRpb25fdGFiX3JlbGF0aW9ucycgfCBsb2NhbGl6ZVwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiZ3JpZFwiPlxyXG4gICAgICAgIDxUc2ktR2VuZXJpYy1FZGl0YWJsZS1HcmlkIFtjb2x1bW5zXT1cImVudGl0aWVzUmVsYXRpb25zQ29sdW1uc1wiIFtncmlkRGF0YV09XCJlbnRpdHlXaXRoUmVsYXRpb25zLnJlbGF0aW9uc1wiXHJcbiAgICAgICAgICBbcGFyZW50XT1cInRoaXNcIiAoYWRkZWRSb3dFdmVudEVtaXR0ZXIpPVwib25BZGRSZWxhdGlvbigpXCIgW3Nob3dBZGRCdXR0b25dPVwiaXNFZGl0TW9kZSgpXCI+XHJcbiAgICAgICAgPC9Uc2ktR2VuZXJpYy1FZGl0YWJsZS1HcmlkPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvcC10YWJQYW5lbD5cclxuICAgIDxwLXRhYlBhbmVsIFtoZWFkZXJdPVwiJ2FkbWluaXN0cmF0aW9uX3RhYl9wZXJtaXNzaW9ucycgfCBsb2NhbGl6ZVwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiZ3JpZFwiPlxyXG4gICAgICAgIDx0c2ktdmlldy1ncmlkIFtoZWFkZXJdPVwiZW50aXR5V2l0aFJlbGF0aW9ucy5lbnRpdHkuY2xhc3NOYW1lID8/ICcnXCIgY2xhc3M9XCJjb2wtMTIgbWItM1wiXHJcbiAgICAgICAgICBbY29sdW1uc109XCJwZXJtaXNzaW9uc0dyaWRDb2x1bW5zXCIgW2dldERhdGFGcm9tQXBpXT1cImZhbHNlXCIgW2dyaWREYXRhXT1cImVuZHBvaW50SW5mb3NcIj5cclxuICAgICAgICA8L3RzaS12aWV3LWdyaWQ+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9wLXRhYlBhbmVsPlxyXG4gICAgPHAtdGFiUGFuZWwgW2hlYWRlcl09XCInYWRtaW5pc3RyYXRpb25fdGFiX3N0YXR1c190cmFuc2l0aW9uJyB8IGxvY2FsaXplXCI+XHJcbiAgICAgIDxkaXYgKm5nSWY9XCJzdGF0dXNUcmFuc2l0aW9uc0luZm8gJiYgc3RhdHVzVHJhbnNpdGlvbnNJbmZvLnRyYW5zaXRpb25zICYmIHN0YXR1c1RyYW5zaXRpb25zSW5mby50cmFuc2l0aW9ucy5sZW5ndGggPiAwOyBlbHNlIG5vV29ya2Zsb3dcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwid29ya2Zsb3ctaGVhZGVyIG1iLTNcIj5cclxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZm9udC1zZW1pYm9sZFwiPnt7J2FkbWluaXN0cmF0aW9uX3dvcmtmbG93X2J1c2luZXNzQ2xhc3MnIHwgbG9jYWxpemV9fSA6IDwvc3Bhbj5cclxuICAgICAgICAgIDxzcGFuPnt7IHN0YXR1c1RyYW5zaXRpb25zSW5mby5idXNpbmVzc0NsYXNzIH19PC9zcGFuPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxwLXRhYmxlIFt2YWx1ZV09XCJzdGF0dXNUcmFuc2l0aW9uc0luZm8udHJhbnNpdGlvbnNcIlxyXG4gICAgICAgICAgW3N0eWxlQ2xhc3NdPVwiJ3AtZGF0YXRhYmxlLXNtIHAtZGF0YXRhYmxlLWdyaWRsaW5lcycgKyAoc3RyaXBlZFJvd3MgPyAnIHAtZGF0YXRhYmxlLXN0cmlwZWQnIDogJycpXCI+XHJcbiAgICAgICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiaGVhZGVyXCI+XHJcbiAgICAgICAgICAgIDx0cj5cclxuICAgICAgICAgICAgICA8dGg+e3snYWRtaW5pc3RyYXRpb25fd29ya2Zsb3dfZnJvbVN0YXR1cycgfCBsb2NhbGl6ZX19PC90aD5cclxuICAgICAgICAgICAgICA8dGg+e3snYWRtaW5pc3RyYXRpb25fd29ya2Zsb3dfdG9TdGF0dXMnIHwgbG9jYWxpemV9fTwvdGg+XHJcbiAgICAgICAgICAgICAgPHRoPnt7J2FkbWluaXN0cmF0aW9uX3dvcmtmbG93X3JlcXVpcmVkQWNjZXNzUmlnaHRzJyB8IGxvY2FsaXplfX08L3RoPlxyXG4gICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJib2R5XCIgbGV0LXJvdz5cclxuICAgICAgICAgICAgPHRyPlxyXG4gICAgICAgICAgICAgIDx0ZD5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwid29ya2Zsb3ctc3RhdHVzLWJhZGdlIGZyb20tc3RhdHVzXCI+e3sgcm93LmZyb21TdGF0dXMgfCBsb2NhbGl6ZSB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgIDx0ZD5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwid29ya2Zsb3ctc3RhdHVzLWJhZGdlIHRvLXN0YXR1c1wiPnt7IHJvdy50b1N0YXR1cyB8IGxvY2FsaXplIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgPHRkPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIndvcmtmbG93LWFjY2Vzcy1yaWdodHNcIj5cclxuICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nRm9yPVwibGV0IHJpZ2h0IG9mIHJvdy5yZXF1aXJlZEFjY2Vzc1JpZ2h0c1wiIGNsYXNzPVwid29ya2Zsb3ctYWNjZXNzLWNoaXBcIj57eyByaWdodCB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCIhcm93LnJlcXVpcmVkQWNjZXNzUmlnaHRzIHx8IHJvdy5yZXF1aXJlZEFjY2Vzc1JpZ2h0cy5sZW5ndGggPT09IDBcIiBjbGFzcz1cInRleHQtc2Vjb25kYXJ5XCI+4oCUPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiZW1wdHltZXNzYWdlXCI+XHJcbiAgICAgICAgICAgIDx0cj5cclxuICAgICAgICAgICAgICA8dGQgY29sc3Bhbj1cIjNcIiBjbGFzcz1cInRleHQtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICB7eydhZG1pbmlzdHJhdGlvbl93b3JrZmxvd19ub1RyYW5zaXRpb25zJyB8IGxvY2FsaXplfX1cclxuICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICA8L3AtdGFibGU+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8bmctdGVtcGxhdGUgI25vV29ya2Zsb3c+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cIndvcmtmbG93LWVtcHR5LXN0YXRlIHRleHQtY2VudGVyIHAtNFwiPlxyXG4gICAgICAgICAgPGkgY2xhc3M9XCJwaSBwaS1pbmZvLWNpcmNsZSB3b3JrZmxvdy1lbXB0eS1pY29uXCI+PC9pPlxyXG4gICAgICAgICAgPHA+e3snYWRtaW5pc3RyYXRpb25fd29ya2Zsb3dfbm9EYXRhJyB8IGxvY2FsaXplfX08L3A+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICA8L3AtdGFiUGFuZWw+XHJcbiAgICA8cC10YWJQYW5lbCBbaGVhZGVyXT1cIidhZG1pbmlzdHJhdGlvbl90YWJfcHJvcGVydGllcycgfCBsb2NhbGl6ZVwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTIgbWItM1wiPlxyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwicC1pbnB1dC1pY29uLWxlZnRcIj5cclxuICAgICAgICAgIDxpIGNsYXNzPVwicGkgcGktc2VhcmNoXCI+PC9pPlxyXG4gICAgICAgICAgPGlucHV0IHBJbnB1dFRleHQgdHlwZT1cInRleHRcIiBbKG5nTW9kZWwpXT1cInByb3BlcnRpZXNTZWFyY2hUZXh0XCIgKG5nTW9kZWxDaGFuZ2UpPVwib25Qcm9wZXJ0aWVzU2VhcmNoKClcIlxyXG4gICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ2FkbWluaXN0cmF0aW9uX3Byb3BlcnRpZXNfc2VhcmNoUGxhY2Vob2xkZXInIHwgbG9jYWxpemVcIiBjbGFzcz1cInAtaW5wdXR0ZXh0LXNtXCIgLz5cclxuICAgICAgICA8L3NwYW4+XHJcbiAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgPGRpdiBjbGFzcz1cInByb3BlcnRpZXMtZ3JpZC1zZWN0aW9uIG1iLTNcIj5cclxuICAgICAgICA8aDQgY2xhc3M9XCJwcm9wZXJ0aWVzLWdyaWQtdGl0bGVcIj57eyAnYWRtaW5pc3RyYXRpb25fcHJvcGVydGllc19tb2RlbENvbHVtbnNfdGl0bGUnIHwgbG9jYWxpemUgfX08L2g0PlxyXG4gICAgICAgIDxwLXRhYmxlIFt2YWx1ZV09XCJwYWdlZE1vZGVsQ29sdW1uc1wiIFtzdHlsZUNsYXNzXT1cIidwLWRhdGF0YWJsZS1zbSBwLWRhdGF0YWJsZS1ncmlkbGluZXMnICsgKHN0cmlwZWRSb3dzID8gJyBwLWRhdGF0YWJsZS1zdHJpcGVkJyA6ICcnKVwiPlxyXG4gICAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImhlYWRlclwiPlxyXG4gICAgICAgICAgICA8dHI+XHJcbiAgICAgICAgICAgICAgPHRoICpuZ0Zvcj1cImxldCBjb2wgb2YgcHJvcGVydGllc0dyaWRDb2x1bW5zXCI+e3sgKGNvbC5oZWFkZXIgPz8gJycpIHwgbG9jYWxpemUgfX08L3RoPlxyXG4gICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJib2R5XCIgbGV0LXJvdz5cclxuICAgICAgICAgICAgPHRyPlxyXG4gICAgICAgICAgICAgIDx0ZCAqbmdGb3I9XCJsZXQgY29sIG9mIHByb3BlcnRpZXNHcmlkQ29sdW1uc1wiIFtuZ0NsYXNzXT1cImdldENvbXBhcmlzb25DbGFzcygnbW9kZWwnLCByb3csIGNvbC5maWVsZClcIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiY29sLnR5cGUgIT09ICdjaGVja0JveCdcIj57eyByb3dbY29sLmZpZWxkXSB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDxwLWNoZWNrYm94ICpuZ0lmPVwiY29sLnR5cGUgPT09ICdjaGVja0JveCdcIiBbbmdNb2RlbF09XCJyb3dbY29sLmZpZWxkXVwiIFtkaXNhYmxlZF09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgW2JpbmFyeV09XCJ0cnVlXCI+PC9wLWNoZWNrYm94PlxyXG4gICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImVtcHR5bWVzc2FnZVwiPlxyXG4gICAgICAgICAgICA8dHI+XHJcbiAgICAgICAgICAgICAgPHRkIFthdHRyLmNvbHNwYW5dPVwicHJvcGVydGllc0dyaWRDb2x1bW5zLmxlbmd0aFwiIGNsYXNzPVwidGV4dC1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgIHt7J2FkbWluaXN0cmF0aW9uX3Byb3BlcnRpZXNfZW1wdHlNZXNzYWdlJyB8IGxvY2FsaXplfX08L3RkPlxyXG4gICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICA8L3AtdGFibGU+XHJcbiAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgPGRpdiBjbGFzcz1cInByb3BlcnRpZXMtZ3JpZC1zZWN0aW9uIG1iLTNcIj5cclxuICAgICAgICA8aDQgY2xhc3M9XCJwcm9wZXJ0aWVzLWdyaWQtdGl0bGVcIj57eyAnYWRtaW5pc3RyYXRpb25fcHJvcGVydGllc19wcm9qZWN0RGJDb2x1bW5zX3RpdGxlJyB8IGxvY2FsaXplIH19PC9oND5cclxuICAgICAgICA8cC10YWJsZSBbdmFsdWVdPVwicGFnZWREYkNvbHVtbnNcIiBbc3R5bGVDbGFzc109XCIncC1kYXRhdGFibGUtc20gcC1kYXRhdGFibGUtZ3JpZGxpbmVzJyArIChzdHJpcGVkUm93cyA/ICcgcC1kYXRhdGFibGUtc3RyaXBlZCcgOiAnJylcIj5cclxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJoZWFkZXJcIj5cclxuICAgICAgICAgICAgPHRyPlxyXG4gICAgICAgICAgICAgIDx0aCAqbmdGb3I9XCJsZXQgY29sIG9mIHByb3BlcnRpZXNHcmlkQ29sdW1uc1wiPnt7IChjb2wuaGVhZGVyID8/ICcnKSB8IGxvY2FsaXplIH19PC90aD5cclxuICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiYm9keVwiIGxldC1yb3c+XHJcbiAgICAgICAgICAgIDx0cj5cclxuICAgICAgICAgICAgICA8dGQgKm5nRm9yPVwibGV0IGNvbCBvZiBwcm9wZXJ0aWVzR3JpZENvbHVtbnNcIiBbbmdDbGFzc109XCJnZXRDb21wYXJpc29uQ2xhc3MoJ2RiJywgcm93LCBjb2wuZmllbGQpXCI+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImNvbC50eXBlICE9PSAnY2hlY2tCb3gnXCI+e3sgcm93W2NvbC5maWVsZF0gfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8VHNpLUNoZWNrQm94ICpuZ0lmPVwiY29sLnR5cGUgPT09ICdjaGVja0JveCdcIiBbbmdNb2RlbF09XCJyb3dbY29sLmZpZWxkXVwiXHJcbiAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJ0cnVlXCI+PC9Uc2ktQ2hlY2tCb3g+XHJcbiAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiZW1wdHltZXNzYWdlXCI+XHJcbiAgICAgICAgICAgIDx0cj5cclxuICAgICAgICAgICAgICA8dGQgW2F0dHIuY29sc3Bhbl09XCJwcm9wZXJ0aWVzR3JpZENvbHVtbnMubGVuZ3RoXCIgY2xhc3M9XCJ0ZXh0LWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAge3snYWRtaW5pc3RyYXRpb25fcHJvcGVydGllc19lbXB0eU1lc3NhZ2UnIHwgbG9jYWxpemV9fTwvdGQ+XHJcbiAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgIDwvcC10YWJsZT5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgICA8ZGl2IGNsYXNzPVwicHJvcGVydGllcy1ncmlkLXNlY3Rpb24gbWItM1wiPlxyXG4gICAgICAgIDxoNCBjbGFzcz1cInByb3BlcnRpZXMtZ3JpZC10aXRsZVwiPnt7ICdhZG1pbmlzdHJhdGlvbl9wcm9wZXJ0aWVzX3NxbENvbHVtbnNfdGl0bGUnIHwgbG9jYWxpemUgfX08L2g0PlxyXG4gICAgICAgIDxwLXRhYmxlIFt2YWx1ZV09XCJwYWdlZFNxbENvbHVtbnNcIiBbc3R5bGVDbGFzc109XCIncC1kYXRhdGFibGUtc20gcC1kYXRhdGFibGUtZ3JpZGxpbmVzJyArIChzdHJpcGVkUm93cyA/ICcgcC1kYXRhdGFibGUtc3RyaXBlZCcgOiAnJylcIj5cclxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJoZWFkZXJcIj5cclxuICAgICAgICAgICAgPHRyPlxyXG4gICAgICAgICAgICAgIDx0aCAqbmdGb3I9XCJsZXQgY29sIG9mIHByb3BlcnRpZXNHcmlkQ29sdW1uc1wiPnt7IChjb2wuaGVhZGVyID8/ICcnKSB8IGxvY2FsaXplIH19PC90aD5cclxuICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiYm9keVwiIGxldC1yb3c+XHJcbiAgICAgICAgICAgIDx0cj5cclxuICAgICAgICAgICAgICA8dGQgKm5nRm9yPVwibGV0IGNvbCBvZiBwcm9wZXJ0aWVzR3JpZENvbHVtbnNcIiBbbmdDbGFzc109XCJnZXRDb21wYXJpc29uQ2xhc3MoJ3NxbCcsIHJvdywgY29sLmZpZWxkKVwiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJjb2wudHlwZSAhPT0gJ2NoZWNrQm94J1wiPnt7IHJvd1tjb2wuZmllbGRdIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPHAtY2hlY2tib3ggKm5nSWY9XCJjb2wudHlwZSA9PT0gJ2NoZWNrQm94J1wiIFtuZ01vZGVsXT1cInJvd1tjb2wuZmllbGRdXCIgW2Rpc2FibGVkXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICBbYmluYXJ5XT1cInRydWVcIj48L3AtY2hlY2tib3g+XHJcbiAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiZW1wdHltZXNzYWdlXCI+XHJcbiAgICAgICAgICAgIDx0cj5cclxuICAgICAgICAgICAgICA8dGQgW2F0dHIuY29sc3Bhbl09XCJwcm9wZXJ0aWVzR3JpZENvbHVtbnMubGVuZ3RoXCIgY2xhc3M9XCJ0ZXh0LWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAge3snYWRtaW5pc3RyYXRpb25fcHJvcGVydGllc19lbXB0eU1lc3NhZ2UnIHwgbG9jYWxpemV9fTwvdGQ+XHJcbiAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgIDwvcC10YWJsZT5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgICA8cC1wYWdpbmF0b3IgW3Jvd3NdPVwicHJvcGVydGllc1BhZ2VTaXplXCIgW3RvdGFsUmVjb3Jkc109XCJwcm9wZXJ0aWVzVG90YWxSZWNvcmRzXCIgW2ZpcnN0XT1cInByb3BlcnRpZXNGaXJzdFwiXHJcbiAgICAgICAgKG9uUGFnZUNoYW5nZSk9XCJvblByb3BlcnRpZXNQYWdlQ2hhbmdlKCRldmVudClcIiBbcm93c1BlclBhZ2VPcHRpb25zXT1cIlsxMCwgMjUsIDUwXVwiPlxyXG4gICAgICA8L3AtcGFnaW5hdG9yPlxyXG5cclxuICAgICAgPGRpdiBjbGFzcz1cImNvbXBhcmlzb24tbGVnZW5kIG10LTNcIj5cclxuICAgICAgICA8c3BhbiBjbGFzcz1cImxlZ2VuZC1pdGVtIGNvbXBhcmlzb24tbWlzc2luZy1sZWdlbmRcIj57eyAnYWRtaW5pc3RyYXRpb25fcHJvcGVydGllc19jb21wYXJpc29uX21pc3NpbmcnIHwgbG9jYWxpemVcclxuICAgICAgICAgIH19PC9zcGFuPlxyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwibGVnZW5kLWl0ZW0gY29tcGFyaXNvbi10eXBlLW1pc21hdGNoLWxlZ2VuZFwiPnt7ICdhZG1pbmlzdHJhdGlvbl9wcm9wZXJ0aWVzX2NvbXBhcmlzb25fdHlwZScgfFxyXG4gICAgICAgICAgbG9jYWxpemUgfX08L3NwYW4+XHJcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJsZWdlbmQtaXRlbSBjb21wYXJpc29uLWxlbmd0aC1taXNtYXRjaC1sZWdlbmRcIj57eyAnYWRtaW5pc3RyYXRpb25fcHJvcGVydGllc19jb21wYXJpc29uX2xlbmd0aCcgfFxyXG4gICAgICAgICAgbG9jYWxpemUgfX08L3NwYW4+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9wLXRhYlBhbmVsPlxyXG4gIDwvcC10YWJWaWV3PlxyXG5cclxuICA8VHNpLU1vZGFsLUZvb3RlciBbaXNDb25zdWx0XT1cImlzQ29uc3VsdE1vZGUoKVwiIFtjYW5jZWxEaXNhYmxlZF09XCJzYXZpbmdcIiBbc2F2ZURpc2FibGVkXT1cImlzU3VibWl0RGlzYWJsZWQoKVwiXHJcbiAgICAob25DYW5jZWxDbGljayk9XCJoaWRlKClcIiBbc2hvd1NhdmVBbmRDbG9zZUJ1dHRvbl09XCJmYWxzZVwiPlxyXG4gIDwvVHNpLU1vZGFsLUZvb3Rlcj5cclxuPC90c2ktZm9ybT4iXX0=
|