ng-configcat-publicapi-ui 4.2.0 → 4.2.2
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/_directives/input-display-normalizer.directive.mjs +4 -4
- package/esm2022/lib/_services/app-data-adapter.mjs +4 -4
- package/esm2022/lib/_services/comparison-value-list-helper.mjs +4 -4
- package/esm2022/lib/_services/form-generator.mjs +4 -4
- package/esm2022/lib/_services/messaging.service.mjs +4 -4
- package/esm2022/lib/_services/public-api.service.mjs +4 -4
- package/esm2022/lib/_services/setting-list-form-helper.mjs +4 -4
- package/esm2022/lib/_services/tracking.directive.mjs +4 -4
- package/esm2022/lib/ace-editor/ace-editor.component.mjs +4 -4
- package/esm2022/lib/authorization/authorization.component.mjs +4 -4
- package/esm2022/lib/base/base-select.component.mjs +4 -4
- package/esm2022/lib/base/base.component.mjs +4 -4
- package/esm2022/lib/configuration.mjs +4 -4
- package/esm2022/lib/dialogs/confirmation-dialog/confirmation-dialog.mjs +4 -4
- package/esm2022/lib/dialogs/delete-setting-dialog/delete-setting-dialog.component.mjs +4 -4
- package/esm2022/lib/dialogs/expand-dialog/expand-dialog.component.mjs +4 -4
- package/esm2022/lib/dialogs/info-dialog/info-dialog.mjs +4 -4
- package/esm2022/lib/dialogs/reason-dialog/reason-dialog.component.mjs +4 -4
- package/esm2022/lib/dialogs/reroute-dialog/reroute-dialog.mjs +4 -4
- package/esm2022/lib/dialogs/save-snackbar/save-snackbar.component.mjs +4 -4
- package/esm2022/lib/ng-configcat-publicapi-ui.module.mjs +5 -5
- package/esm2022/lib/selects/config-select/config-select.component.mjs +4 -4
- package/esm2022/lib/selects/environment-select/environment-select.component.mjs +4 -4
- package/esm2022/lib/selects/product-select/product-select.component.mjs +4 -4
- package/esm2022/lib/selects/setting-select/setting-select.component.mjs +4 -4
- package/esm2022/lib/setting-item/setting-item.component.mjs +4 -4
- package/esm2022/lib/setting-list/setting/rollout-percentage-items/rollout-percentage-items.component.mjs +4 -4
- package/esm2022/lib/setting-list/setting/rollout-rules/rollout-rules.component.mjs +4 -4
- package/esm2022/lib/setting-list/setting/setting.component.mjs +4 -4
- package/esm2022/lib/setting-list/setting/value/value.component.mjs +4 -4
- package/esm2022/lib/setting-list/setting-list.component.mjs +4 -4
- package/esm2022/lib/v2/feature-flag/date-time-picker/date-time-picker.component.mjs +4 -4
- package/esm2022/lib/v2/feature-flag/dependees-dialog/dependees-dialog.component.mjs +4 -4
- package/esm2022/lib/v2/feature-flag/evaluation-formula/evaluation-formula.component.mjs +4 -4
- package/esm2022/lib/v2/feature-flag/evaluation-formula/feature-flag-value/feature-flag-value.component.mjs +4 -4
- package/esm2022/lib/v2/feature-flag/evaluation-formula/popout-text-editor-dialog/popout-text-editor-dialog.component.mjs +4 -4
- package/esm2022/lib/v2/feature-flag/evaluation-formula/targeting-rule/conditions/condition-chip/condition-chip.component.mjs +4 -4
- package/esm2022/lib/v2/feature-flag/evaluation-formula/targeting-rule/conditions/conditions.component.mjs +4 -4
- package/esm2022/lib/v2/feature-flag/evaluation-formula/targeting-rule/conditions/prerequisite-flag-condition/prerequisite-flag-condition.component.mjs +4 -4
- package/esm2022/lib/v2/feature-flag/evaluation-formula/targeting-rule/conditions/segment-condition/segment-condition.component.mjs +4 -4
- package/esm2022/lib/v2/feature-flag/evaluation-formula/targeting-rule/conditions/user-condition/comparator-dialog/comparator-dialog.component.mjs +4 -4
- package/esm2022/lib/v2/feature-flag/evaluation-formula/targeting-rule/conditions/user-condition/popout-list-editor-dialog/popout-list-editor-dialog.component.mjs +4 -4
- package/esm2022/lib/v2/feature-flag/evaluation-formula/targeting-rule/conditions/user-condition/user-condition.component.mjs +4 -4
- package/esm2022/lib/v2/feature-flag/evaluation-formula/targeting-rule/percentage-options/percentage-options.component.mjs +4 -4
- package/esm2022/lib/v2/feature-flag/evaluation-formula/targeting-rule/targeting-rule.component.mjs +4 -4
- package/esm2022/lib/v2/feature-flag/feature-flag.component.mjs +4 -4
- package/esm2022/lib/v2/feature-flag/percentage-evaluation-attribute-dialog/percentage-evaluation-attribute-dialog.component.mjs +4 -4
- package/esm2022/lib/v2/feature-flag-item.component.mjs +4 -4
- package/fesm2022/ng-configcat-publicapi-ui.mjs +145 -145
- package/fesm2022/ng-configcat-publicapi-ui.mjs.map +1 -1
- package/package.json +4 -4
|
@@ -235,10 +235,10 @@ export class PopoutListEditorDialogComponent {
|
|
|
235
235
|
};
|
|
236
236
|
fileReader.readAsText(file);
|
|
237
237
|
}
|
|
238
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.
|
|
239
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.7", type: PopoutListEditorDialogComponent, selector: "app-popout-list-editor-dialog", viewQueries: [{ propertyName: "setPaginator", first: true, predicate: ["paginator"], descendants: true }], ngImport: i0, template: "<h2 mat-dialog-title>Advanced editor</h2>\n<div mat-dialog-content class=\"container\">\n\n <div class=\"tabs\">\n <mat-button-toggle-group [ngModel]=\"visualizationType\" (ngModelChange)=\"changeVisualizationType($event)\">\n <mat-button-toggle [value]=\"VisualizationType.Table\"\n [disabled]=\"visualizationType !== VisualizationType.Table && comparisonValueListParseResult?.error\"\n matTooltip=\"Can not switch between views while there are errors in the current view.\"\n [matTooltipDisabled]=\"visualizationType === VisualizationType.Table || !comparisonValueListParseResult?.error\">Table</mat-button-toggle>\n <mat-button-toggle [value]=\"VisualizationType.Json\"\n [disabled]=\"visualizationType !== VisualizationType.Json && comparisonValueListParseResult?.error\"\n matTooltip=\"Can not switch between views while there are errors in the current view.\"\n [matTooltipDisabled]=\"visualizationType === VisualizationType.Json || !comparisonValueListParseResult?.error\">JSON</mat-button-toggle>\n <mat-button-toggle [value]=\"VisualizationType.Csv\"\n [disabled]=\"visualizationType !== VisualizationType.Csv && comparisonValueListParseResult?.error\"\n matTooltip=\"Can not switch between views while there are errors in the current view.\"\n [matTooltipDisabled]=\"visualizationType === VisualizationType.Csv || !comparisonValueListParseResult?.error\">CSV\n with hints</mat-button-toggle>\n <mat-button-toggle [value]=\"VisualizationType.Csl\"\n [disabled]=\"(visualizationType !== VisualizationType.Csl && comparisonValueListParseResult?.error) || currentlyHasHints\"\n [matTooltip]=\"currentlyHasHints ? 'There are hints set to your values so the CSV without hints view is not available' : 'Can not switch between views while there are errors in the current view.'\"\n [matTooltipDisabled]=\"(visualizationType === VisualizationType.Csl || !comparisonValueListParseResult?.error) && !currentlyHasHints\">CSV\n without hints</mat-button-toggle>\n </mat-button-toggle-group>\n </div>\n\n <div [hidden]=\"visualizationType !== VisualizationType.Table\" class=\"table-format\">\n <p class=\"description\">\n Modify the items within the list of comparison values. The hint helps you label the value for easier\n reference.\n </p>\n <div class=\"controls\">\n <div>\n <mat-form-field class=\"filter\" appearance=\"outline\" class=\"small-form-field\" subscriptSizing=\"dynamic\">\n <mat-label>Filter</mat-label>\n <input matInput [(ngModel)]=\"filterValue\" (ngModelChange)=\"applyFilter()\"\n placeholder=\"Filter values and hints.\">\n </mat-form-field>\n </div>\n <div class=\"control-button-container\">\n <div class=\"add-btn-container\" matTooltip=\"Add item\"\n [matTooltipDisabled]=\"formGroup.controls.listValue.controls.length >= data.featureFlagLimitations.maxComparisonValueListLength\">\n <div [matTooltip]=\"'Maximum ' + data.featureFlagLimitations.maxComparisonValueListLength + ' items can be added.'\"\n [matTooltipDisabled]=\"formGroup.controls.listValue.controls.length < data.featureFlagLimitations.maxComparisonValueListLength\">\n <button (click)=\"add()\" mat-icon-button type=\"button\" *ngIf=\"!data.readOnly\" class=\"add-btn\"\n [disabled]=\"formGroup.controls.listValue.controls.length >= data.featureFlagLimitations.maxComparisonValueListLength\">\n <mat-icon>add_circle</mat-icon>\n </button>\n </div>\n </div>\n\n <button type=\"button\" mat-icon-button matTooltip=\"Remove all\" class=\"grey-button\" *ngIf=\"!data.readOnly\"\n (click)=\"removeAll()\"><mat-icon>delete_outline</mat-icon></button>\n </div>\n </div>\n <table mat-table [dataSource]=\"dataSource\">\n <ng-container matColumnDef=\"value\">\n <th mat-header-cell *matHeaderCellDef mat-sort-header> Comparison value </th>\n <td mat-cell *matCellDef=\"let row; let i = index\" class=\"row align-top small-form-field\">\n <div class=\"value-field\">\n <mat-form-field appearance=\"outline\" subscriptSizing=\"dynamic\">\n <input matInput [formControl]=\"row.controls.value\"\n *ngIf=\"(paginator.pageIndex * paginator.pageSize + i) === focusIndex\" focus />\n <input matInput [formControl]=\"row.controls.value\"\n *ngIf=\"(paginator.pageIndex * paginator.pageSize + i) !== focusIndex\" />\n <mat-error *ngIf=\"row.controls.value.invalid\">\n {{FormHelper.getErrorMessage(row.controls.value)}}\n </mat-error>\n </mat-form-field>\n </div>\n </td>\n </ng-container>\n\n <ng-container matColumnDef=\"hint\">\n <th mat-header-cell *matHeaderCellDef mat-sort-header> Hint </th>\n <td mat-cell *matCellDef=\"let row\" class=\"row align-top small-form-field\">\n <div class=\"value-field\">\n <mat-form-field appearance=\"outline\" subscriptSizing=\"dynamic\">\n <input matInput [formControl]=\"row.controls.hint\" />\n <mat-error *ngIf=\"row.controls.hint.invalid\">\n {{FormHelper.getErrorMessage(row.controls.hint)}}\n </mat-error>\n </mat-form-field>\n </div>\n </td>\n </ng-container>\n <ng-container matColumnDef=\"action\">\n <th mat-header-cell *matHeaderCellDef mat-sort-header></th>\n <td mat-cell *matCellDef=\"let row\" class=\"row align-top\">\n <button class=\"grey-button\" (click)=\"remove(row)\" mat-icon-button type=\"button\"\n matTooltip=\"Remove item\" *ngIf=\"!data.readOnly\">\n <mat-icon>delete_outline</mat-icon>\n </button>\n </td>\n </ng-container>\n <tr mat-header-row *matHeaderRowDef=\"displayedColumns\"></tr>\n <tr mat-row *matRowDef=\"let row; columns: displayedColumns;\">\n </tr>\n </table>\n <div class=\"small-form-field\">\n <mat-paginator #paginator showFirstLastButtons [pageSizeOptions]=\"[5, 10, 50, 100]\"></mat-paginator>\n </div>\n </div>\n\n <div *ngIf=\"visualizationType === VisualizationType.Json\" class=\"json-format\">\n <div class=\"actions\">\n <div>\n Modify the items via a JSON text.\n </div>\n <div *ngIf=\"!data.readOnly\">\n <input #fileInput hidden=\"true\" type=\"file\" onclick=\"this.value=null\" (change)=\"loadFile($event)\"\n accept=\".txt,.json\" />\n <button type=\"button\" mat-icon-button (click)=\"fileInput.click()\" class=\"grey-button\"\n matTooltip=\"Load from file (your values will be overwritten)\">\n <mat-icon>upload_file</mat-icon>\n </button>\n </div>\n </div>\n <div class=\"json-editor\">\n <app-ace-editor [(value)]=\"plainText\" (valueChange)=\"textValueChanged()\"\n [readOnly]=\"data.readOnly\"></app-ace-editor>\n </div>\n </div>\n\n <div *ngIf=\"visualizationType === VisualizationType.Csv\" class=\"csv-format\">\n <div class=\"actions\">\n <div>\n Modify the items via a CSV (values and hints) text.\n </div>\n <div *ngIf=\"!data.readOnly\">\n <input #fileInput hidden=\"true\" type=\"file\" onclick=\"this.value=null\" (change)=\"loadFile($event)\"\n accept=\".txt,.csv\" />\n <button type=\"button\" mat-icon-button (click)=\"fileInput.click()\" class=\"grey-button\"\n matTooltip=\"Load from file (your values will be overwritten)\">\n <mat-icon>upload_file</mat-icon>\n </button>\n </div>\n </div>\n <mat-form-field appearance=\"outline\" class=\"editor-container editor-clear\" subscriptSizing=\"dynamic\">\n <textarea matInput autofocus focus rows=\"17\" cdkTextareaAutosize cdkAutosizeMinRows=\"17\"\n cdkAutosizeMaxRows=\"17\" [(ngModel)]=\"plainText\" (ngModelChange)=\"textValueChanged()\" spellcheck=\"false\"\n [readonly]=\"data.readOnly\"></textarea>\n </mat-form-field>\n </div>\n\n <div *ngIf=\"visualizationType === VisualizationType.Csl\" class=\"csv-format\">\n <div class=\"actions\">\n <div>\n Modify the items via a CSV (values only) text.\n </div>\n <div *ngIf=\"!data.readOnly\">\n <input #fileInput hidden=\"true\" type=\"file\" onclick=\"this.value=null\" (change)=\"loadFile($event)\"\n accept=\".txt,.csv\" />\n <button type=\"button\" mat-icon-button (click)=\"fileInput.click()\" class=\"grey-button\"\n matTooltip=\"Load from file (your values will be overwritten)\">\n <mat-icon>upload_file</mat-icon>\n </button>\n </div>\n </div>\n\n <mat-form-field appearance=\"outline\" class=\"editor-container editor-clear\" subscriptSizing=\"dynamic\">\n <textarea matInput autofocus focus rows=\"17\" cdkTextareaAutosize cdkAutosizeMinRows=\"17\"\n cdkAutosizeMaxRows=\"17\" [(ngModel)]=\"plainText\" (ngModelChange)=\"textValueChanged()\" spellcheck=\"false\"\n [readonly]=\"data.readOnly\"></textarea>\n </mat-form-field>\n </div>\n\n <div *ngIf=\"visualizationType !== VisualizationType.Table && comparisonValueListParseResult\">\n <p *ngIf=\"!comparisonValueListParseResult.error && comparisonValueListParseResult.comparisonValueList.length\"\n class=\"small-chip-input\">\n Preview ({{comparisonValueListParseResult.comparisonValueList.length}} items)\n <mat-chip-set>\n <span *ngFor=\"let listValueItem of comparisonValueListParseResult.comparisonValueList | slice:0:10\"\n [matTooltip]=\"listValueItem.hint ? listValueItem.hint : 'No hint'\" class=\"chip-container\">\n <mat-chip-row>\n {{listValueItem.value}}\n </mat-chip-row>\n </span>\n <mat-chip-row *ngIf=\"comparisonValueListParseResult.comparisonValueList.length > 10\">\n {{comparisonValueListParseResult.comparisonValueList.length - 10}} remaining items...\n </mat-chip-row>\n </mat-chip-set>\n </p>\n <mat-error *ngIf=\"comparisonValueListParseResult.error\" class=\"error\">\n <mat-icon>warning</mat-icon>\n <span>Couldn't parse your values. Please check the format.</span>\n </mat-error>\n </div>\n <mat-error\n *ngIf=\"formGroup.controls.listValue.touched && formGroup.controls.listValue.invalid && formGroup.controls.listValue.errors\"\n class=\"error\">\n <mat-icon>warning</mat-icon>\n <span>{{FormHelper.getErrorMessage(formGroup.controls.listValue)}}</span>\n </mat-error>\n <mat-error\n *ngIf=\"!valueChanged && formGroup.controls.listValue.touched && formGroup.controls.listValue.invalid && !formGroup.controls.listValue.errors\"\n class=\"error\">\n <mat-icon>warning</mat-icon>\n <span>Invalid items. </span>\n <div>\n <button type=\"button\" mat-stroked-button color=\"primary\"\n *ngIf=\"visualizationType !== VisualizationType.Table || paginator?.getNumberOfPages() > 1\"\n (click)=\"focusInvalid()\" class=\"jump\">\n Jump to fix\n </button>\n </div>\n </mat-error>\n</div>\n<div mat-dialog-actions>\n <button *ngIf=\"!data.readOnly\" type=\"button\" mat-flat-button color=\"primary\" (click)=\"set()\">Set</button>\n <button *ngIf=\"!data.readOnly\" type=\"button\" mat-stroked-button (click)=\"close()\">Cancel</button>\n <button *ngIf=\"data.readOnly\" type=\"button\" mat-stroked-button color=\"primary\" (click)=\"close()\">Close</button>\n</div>", styles: [".mat-mdc-chip.mat-mdc-standard-chip{--mdc-chip-container-height: 24px}.container{width:100%}.container .tabs{padding:10px 0 5px}.container .table-format .mat-mdc-table{border-bottom-width:0px!important}.container .table-format .row{border-bottom-width:0}.container .table-format .row.align-top{vertical-align:top}.container .table-format .row.align-top button{margin-top:6px}.container .table-format .row .value-field{display:flex;flex-direction:row;padding:8px 0}.container .table-format .row .value-field mat-form-field{flex-grow:1}.container .table-format .controls{padding-top:5px;display:flex;justify-content:space-between}.container .table-format .controls .control-button-container{display:flex}.container .table-format .controls .control-button-container .add-btn-container .add-btn{color:#5c6bc0}.container .table-format .controls .control-button-container .add-btn-container .add-btn[disabled]{color:#99999981}.container .table-format .bulk-btn{margin-left:1rem}.container .jump{font-size:12px;margin-left:5px}.container .description{padding-bottom:5px}.container .actions{--mdc-text-button-container-height: 24px;--mdc-filled-button-container-height: 24px;--mdc-protected-button-container-height: 24px;--mdc-outlined-button-container-height: 24px;--mat-text-button-touch-target-display: none;--mat-filled-button-touch-target-display: none;--mat-protected-button-touch-target-display: none;--mat-outlined-button-touch-target-display: none;display:flex;align-items:center;justify-content:space-between;margin:5px 0}.container .json-format .json-editor{margin-bottom:10px;width:100%;height:282px}.container .csv-format mat-form-field{width:100%}.container .csv-format mat-form-field textarea{width:100%}.container .csv-format .warning{display:flex;align-items:center;border:1px solid rgba(255,0,0,.3);border-radius:5px;padding:1rem;margin-bottom:16px;background-color:#ff000080;color:#fff}.container .csv-format .warning span{margin-left:16px}.container mat-chip-row.invalid{background-color:red}.container .error{--mdc-text-button-container-height: 24px;--mdc-filled-button-container-height: 24px;--mdc-protected-button-container-height: 24px;--mdc-outlined-button-container-height: 24px;--mat-text-button-touch-target-display: none;--mat-filled-button-touch-target-display: none;--mat-protected-button-touch-target-display: none;--mat-outlined-button-touch-target-display: none;margin-top:16px;display:flex;align-items:center}.container .error span{margin-left:4px}.container .grey-button{color:#999}\n"], dependencies: [{ kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i4.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "component", type: i5.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i5.MatLabel, selector: "mat-label" }, { kind: "directive", type: i5.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "component", type: i6.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i6.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "directive", type: i7.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "directive", type: i8.CdkTextareaAutosize, selector: "textarea[cdkTextareaAutosize]", inputs: ["cdkAutosizeMinRows", "cdkAutosizeMaxRows", "cdkTextareaAutosize", "placeholder"], exportAs: ["cdkTextareaAutosize"] }, { kind: "component", type: i9.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i10.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "component", type: i11.MatChipRow, selector: "mat-chip-row, [mat-chip-row], mat-basic-chip-row, [mat-basic-chip-row]", inputs: ["editable"], outputs: ["edited"] }, { kind: "component", type: i11.MatChipSet, selector: "mat-chip-set", inputs: ["disabled", "role", "tabIndex"] }, { kind: "directive", type: i2.MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { kind: "directive", type: i2.MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }, { kind: "directive", type: i2.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { kind: "directive", type: i12.MatButtonToggleGroup, selector: "mat-button-toggle-group", inputs: ["appearance", "name", "vertical", "value", "multiple", "disabled", "disabledInteractive", "hideSingleSelectionIndicator", "hideMultipleSelectionIndicator"], outputs: ["valueChange", "change"], exportAs: ["matButtonToggleGroup"] }, { kind: "component", type: i12.MatButtonToggle, selector: "mat-button-toggle", inputs: ["aria-label", "aria-labelledby", "id", "name", "value", "tabIndex", "disableRipple", "appearance", "checked", "disabled", "disabledInteractive"], outputs: ["change"], exportAs: ["matButtonToggle"] }, { kind: "component", type: i13.MatPaginator, selector: "mat-paginator", inputs: ["color", "pageIndex", "length", "pageSize", "pageSizeOptions", "hidePageSize", "showFirstLastButtons", "selectConfig", "disabled"], outputs: ["page"], exportAs: ["matPaginator"] }, { kind: "component", type: i14.MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { kind: "directive", type: i14.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { kind: "directive", type: i14.MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { kind: "directive", type: i14.MatColumnDef, selector: "[matColumnDef]", inputs: ["matColumnDef"] }, { kind: "directive", type: i14.MatCellDef, selector: "[matCellDef]" }, { kind: "directive", type: i14.MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }, { kind: "directive", type: i14.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { kind: "directive", type: i14.MatCell, selector: "mat-cell, td[mat-cell]" }, { kind: "component", type: i14.MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { kind: "component", type: i14.MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }, { kind: "component", type: i15.AceEditorComponent, selector: "app-ace-editor", inputs: ["value", "readOnly"], outputs: ["valueChange", "onChange"] }, { kind: "pipe", type: i3.SlicePipe, name: "slice" }] }); }
|
|
238
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: PopoutListEditorDialogComponent, deps: [{ token: i1.FormGenerator }, { token: i2.MatDialogRef }, { token: i1.ComparisonValueListHelper }, { token: MAT_DIALOG_DATA }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
239
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: PopoutListEditorDialogComponent, selector: "app-popout-list-editor-dialog", viewQueries: [{ propertyName: "setPaginator", first: true, predicate: ["paginator"], descendants: true }], ngImport: i0, template: "<h2 mat-dialog-title>Advanced editor</h2>\n<div mat-dialog-content class=\"container\">\n\n <div class=\"tabs\">\n <mat-button-toggle-group [ngModel]=\"visualizationType\" (ngModelChange)=\"changeVisualizationType($event)\">\n <mat-button-toggle [value]=\"VisualizationType.Table\"\n [disabled]=\"visualizationType !== VisualizationType.Table && comparisonValueListParseResult?.error\"\n matTooltip=\"Can not switch between views while there are errors in the current view.\"\n [matTooltipDisabled]=\"visualizationType === VisualizationType.Table || !comparisonValueListParseResult?.error\">Table</mat-button-toggle>\n <mat-button-toggle [value]=\"VisualizationType.Json\"\n [disabled]=\"visualizationType !== VisualizationType.Json && comparisonValueListParseResult?.error\"\n matTooltip=\"Can not switch between views while there are errors in the current view.\"\n [matTooltipDisabled]=\"visualizationType === VisualizationType.Json || !comparisonValueListParseResult?.error\">JSON</mat-button-toggle>\n <mat-button-toggle [value]=\"VisualizationType.Csv\"\n [disabled]=\"visualizationType !== VisualizationType.Csv && comparisonValueListParseResult?.error\"\n matTooltip=\"Can not switch between views while there are errors in the current view.\"\n [matTooltipDisabled]=\"visualizationType === VisualizationType.Csv || !comparisonValueListParseResult?.error\">CSV\n with hints</mat-button-toggle>\n <mat-button-toggle [value]=\"VisualizationType.Csl\"\n [disabled]=\"(visualizationType !== VisualizationType.Csl && comparisonValueListParseResult?.error) || currentlyHasHints\"\n [matTooltip]=\"currentlyHasHints ? 'There are hints set to your values so the CSV without hints view is not available' : 'Can not switch between views while there are errors in the current view.'\"\n [matTooltipDisabled]=\"(visualizationType === VisualizationType.Csl || !comparisonValueListParseResult?.error) && !currentlyHasHints\">CSV\n without hints</mat-button-toggle>\n </mat-button-toggle-group>\n </div>\n\n <div [hidden]=\"visualizationType !== VisualizationType.Table\" class=\"table-format\">\n <p class=\"description\">\n Modify the items within the list of comparison values. The hint helps you label the value for easier\n reference.\n </p>\n <div class=\"controls\">\n <div>\n <mat-form-field class=\"filter\" appearance=\"outline\" class=\"small-form-field\" subscriptSizing=\"dynamic\">\n <mat-label>Filter</mat-label>\n <input matInput [(ngModel)]=\"filterValue\" (ngModelChange)=\"applyFilter()\"\n placeholder=\"Filter values and hints.\">\n </mat-form-field>\n </div>\n <div class=\"control-button-container\">\n <div class=\"add-btn-container\" matTooltip=\"Add item\"\n [matTooltipDisabled]=\"formGroup.controls.listValue.controls.length >= data.featureFlagLimitations.maxComparisonValueListLength\">\n <div [matTooltip]=\"'Maximum ' + data.featureFlagLimitations.maxComparisonValueListLength + ' items can be added.'\"\n [matTooltipDisabled]=\"formGroup.controls.listValue.controls.length < data.featureFlagLimitations.maxComparisonValueListLength\">\n <button (click)=\"add()\" mat-icon-button type=\"button\" *ngIf=\"!data.readOnly\" class=\"add-btn\"\n [disabled]=\"formGroup.controls.listValue.controls.length >= data.featureFlagLimitations.maxComparisonValueListLength\">\n <mat-icon>add_circle</mat-icon>\n </button>\n </div>\n </div>\n\n <button type=\"button\" mat-icon-button matTooltip=\"Remove all\" class=\"grey-button\" *ngIf=\"!data.readOnly\"\n (click)=\"removeAll()\"><mat-icon>delete_outline</mat-icon></button>\n </div>\n </div>\n <table mat-table [dataSource]=\"dataSource\">\n <ng-container matColumnDef=\"value\">\n <th mat-header-cell *matHeaderCellDef mat-sort-header> Comparison value </th>\n <td mat-cell *matCellDef=\"let row; let i = index\" class=\"row align-top small-form-field\">\n <div class=\"value-field\">\n <mat-form-field appearance=\"outline\" subscriptSizing=\"dynamic\">\n <input matInput [formControl]=\"row.controls.value\"\n *ngIf=\"(paginator.pageIndex * paginator.pageSize + i) === focusIndex\" focus />\n <input matInput [formControl]=\"row.controls.value\"\n *ngIf=\"(paginator.pageIndex * paginator.pageSize + i) !== focusIndex\" />\n <mat-error *ngIf=\"row.controls.value.invalid\">\n {{FormHelper.getErrorMessage(row.controls.value)}}\n </mat-error>\n </mat-form-field>\n </div>\n </td>\n </ng-container>\n\n <ng-container matColumnDef=\"hint\">\n <th mat-header-cell *matHeaderCellDef mat-sort-header> Hint </th>\n <td mat-cell *matCellDef=\"let row\" class=\"row align-top small-form-field\">\n <div class=\"value-field\">\n <mat-form-field appearance=\"outline\" subscriptSizing=\"dynamic\">\n <input matInput [formControl]=\"row.controls.hint\" />\n <mat-error *ngIf=\"row.controls.hint.invalid\">\n {{FormHelper.getErrorMessage(row.controls.hint)}}\n </mat-error>\n </mat-form-field>\n </div>\n </td>\n </ng-container>\n <ng-container matColumnDef=\"action\">\n <th mat-header-cell *matHeaderCellDef mat-sort-header></th>\n <td mat-cell *matCellDef=\"let row\" class=\"row align-top\">\n <button class=\"grey-button\" (click)=\"remove(row)\" mat-icon-button type=\"button\"\n matTooltip=\"Remove item\" *ngIf=\"!data.readOnly\">\n <mat-icon>delete_outline</mat-icon>\n </button>\n </td>\n </ng-container>\n <tr mat-header-row *matHeaderRowDef=\"displayedColumns\"></tr>\n <tr mat-row *matRowDef=\"let row; columns: displayedColumns;\">\n </tr>\n </table>\n <div class=\"small-form-field\">\n <mat-paginator #paginator showFirstLastButtons [pageSizeOptions]=\"[5, 10, 50, 100]\"></mat-paginator>\n </div>\n </div>\n\n <div *ngIf=\"visualizationType === VisualizationType.Json\" class=\"json-format\">\n <div class=\"actions\">\n <div>\n Modify the items via a JSON text.\n </div>\n <div *ngIf=\"!data.readOnly\">\n <input #fileInput hidden=\"true\" type=\"file\" onclick=\"this.value=null\" (change)=\"loadFile($event)\"\n accept=\".txt,.json\" />\n <button type=\"button\" mat-icon-button (click)=\"fileInput.click()\" class=\"grey-button\"\n matTooltip=\"Load from file (your values will be overwritten)\">\n <mat-icon>upload_file</mat-icon>\n </button>\n </div>\n </div>\n <div class=\"json-editor\">\n <app-ace-editor [(value)]=\"plainText\" (valueChange)=\"textValueChanged()\"\n [readOnly]=\"data.readOnly\"></app-ace-editor>\n </div>\n </div>\n\n <div *ngIf=\"visualizationType === VisualizationType.Csv\" class=\"csv-format\">\n <div class=\"actions\">\n <div>\n Modify the items via a CSV (values and hints) text.\n </div>\n <div *ngIf=\"!data.readOnly\">\n <input #fileInput hidden=\"true\" type=\"file\" onclick=\"this.value=null\" (change)=\"loadFile($event)\"\n accept=\".txt,.csv\" />\n <button type=\"button\" mat-icon-button (click)=\"fileInput.click()\" class=\"grey-button\"\n matTooltip=\"Load from file (your values will be overwritten)\">\n <mat-icon>upload_file</mat-icon>\n </button>\n </div>\n </div>\n <mat-form-field appearance=\"outline\" class=\"editor-container editor-clear\" subscriptSizing=\"dynamic\">\n <textarea matInput autofocus focus rows=\"17\" cdkTextareaAutosize cdkAutosizeMinRows=\"17\"\n cdkAutosizeMaxRows=\"17\" [(ngModel)]=\"plainText\" (ngModelChange)=\"textValueChanged()\" spellcheck=\"false\"\n [readonly]=\"data.readOnly\"></textarea>\n </mat-form-field>\n </div>\n\n <div *ngIf=\"visualizationType === VisualizationType.Csl\" class=\"csv-format\">\n <div class=\"actions\">\n <div>\n Modify the items via a CSV (values only) text.\n </div>\n <div *ngIf=\"!data.readOnly\">\n <input #fileInput hidden=\"true\" type=\"file\" onclick=\"this.value=null\" (change)=\"loadFile($event)\"\n accept=\".txt,.csv\" />\n <button type=\"button\" mat-icon-button (click)=\"fileInput.click()\" class=\"grey-button\"\n matTooltip=\"Load from file (your values will be overwritten)\">\n <mat-icon>upload_file</mat-icon>\n </button>\n </div>\n </div>\n\n <mat-form-field appearance=\"outline\" class=\"editor-container editor-clear\" subscriptSizing=\"dynamic\">\n <textarea matInput autofocus focus rows=\"17\" cdkTextareaAutosize cdkAutosizeMinRows=\"17\"\n cdkAutosizeMaxRows=\"17\" [(ngModel)]=\"plainText\" (ngModelChange)=\"textValueChanged()\" spellcheck=\"false\"\n [readonly]=\"data.readOnly\"></textarea>\n </mat-form-field>\n </div>\n\n <div *ngIf=\"visualizationType !== VisualizationType.Table && comparisonValueListParseResult\">\n <p *ngIf=\"!comparisonValueListParseResult.error && comparisonValueListParseResult.comparisonValueList.length\"\n class=\"small-chip-input\">\n Preview ({{comparisonValueListParseResult.comparisonValueList.length}} items)\n <mat-chip-set>\n <span *ngFor=\"let listValueItem of comparisonValueListParseResult.comparisonValueList | slice:0:10\"\n [matTooltip]=\"listValueItem.hint ? listValueItem.hint : 'No hint'\" class=\"chip-container\">\n <mat-chip-row>\n {{listValueItem.value}}\n </mat-chip-row>\n </span>\n <mat-chip-row *ngIf=\"comparisonValueListParseResult.comparisonValueList.length > 10\">\n {{comparisonValueListParseResult.comparisonValueList.length - 10}} remaining items...\n </mat-chip-row>\n </mat-chip-set>\n </p>\n <mat-error *ngIf=\"comparisonValueListParseResult.error\" class=\"error\">\n <mat-icon>warning</mat-icon>\n <span>Couldn't parse your values. Please check the format.</span>\n </mat-error>\n </div>\n <mat-error\n *ngIf=\"formGroup.controls.listValue.touched && formGroup.controls.listValue.invalid && formGroup.controls.listValue.errors\"\n class=\"error\">\n <mat-icon>warning</mat-icon>\n <span>{{FormHelper.getErrorMessage(formGroup.controls.listValue)}}</span>\n </mat-error>\n <mat-error\n *ngIf=\"!valueChanged && formGroup.controls.listValue.touched && formGroup.controls.listValue.invalid && !formGroup.controls.listValue.errors\"\n class=\"error\">\n <mat-icon>warning</mat-icon>\n <span>Invalid items. </span>\n <div>\n <button type=\"button\" mat-stroked-button color=\"primary\"\n *ngIf=\"visualizationType !== VisualizationType.Table || paginator?.getNumberOfPages() > 1\"\n (click)=\"focusInvalid()\" class=\"jump\">\n Jump to fix\n </button>\n </div>\n </mat-error>\n</div>\n<div mat-dialog-actions>\n <button *ngIf=\"!data.readOnly\" type=\"button\" mat-flat-button color=\"primary\" (click)=\"set()\">Set</button>\n <button *ngIf=\"!data.readOnly\" type=\"button\" mat-stroked-button (click)=\"close()\">Cancel</button>\n <button *ngIf=\"data.readOnly\" type=\"button\" mat-stroked-button color=\"primary\" (click)=\"close()\">Close</button>\n</div>", styles: [".mat-mdc-chip.mat-mdc-standard-chip{--mdc-chip-container-height: 24px}.container{width:100%}.container .tabs{padding:10px 0 5px}.container .table-format .mat-mdc-table{border-bottom-width:0px!important}.container .table-format .row{border-bottom-width:0}.container .table-format .row.align-top{vertical-align:top}.container .table-format .row.align-top button{margin-top:6px}.container .table-format .row .value-field{display:flex;flex-direction:row;padding:8px 0}.container .table-format .row .value-field mat-form-field{flex-grow:1}.container .table-format .controls{padding-top:5px;display:flex;justify-content:space-between}.container .table-format .controls .control-button-container{display:flex}.container .table-format .controls .control-button-container .add-btn-container .add-btn{color:#5c6bc0}.container .table-format .controls .control-button-container .add-btn-container .add-btn[disabled]{color:#99999981}.container .table-format .bulk-btn{margin-left:1rem}.container .jump{font-size:12px;margin-left:5px}.container .description{padding-bottom:5px}.container .actions{--mdc-text-button-container-height: 24px;--mdc-filled-button-container-height: 24px;--mdc-protected-button-container-height: 24px;--mdc-outlined-button-container-height: 24px;--mat-text-button-touch-target-display: none;--mat-filled-button-touch-target-display: none;--mat-protected-button-touch-target-display: none;--mat-outlined-button-touch-target-display: none;display:flex;align-items:center;justify-content:space-between;margin:5px 0}.container .json-format .json-editor{margin-bottom:10px;width:100%;height:282px}.container .csv-format mat-form-field{width:100%}.container .csv-format mat-form-field textarea{width:100%}.container .csv-format .warning{display:flex;align-items:center;border:1px solid rgba(255,0,0,.3);border-radius:5px;padding:1rem;margin-bottom:16px;background-color:#ff000080;color:#fff}.container .csv-format .warning span{margin-left:16px}.container mat-chip-row.invalid{background-color:red}.container .error{--mdc-text-button-container-height: 24px;--mdc-filled-button-container-height: 24px;--mdc-protected-button-container-height: 24px;--mdc-outlined-button-container-height: 24px;--mat-text-button-touch-target-display: none;--mat-filled-button-touch-target-display: none;--mat-protected-button-touch-target-display: none;--mat-outlined-button-touch-target-display: none;margin-top:16px;display:flex;align-items:center}.container .error span{margin-left:4px}.container .grey-button{color:#999}\n"], dependencies: [{ kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i4.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "component", type: i5.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i5.MatLabel, selector: "mat-label" }, { kind: "directive", type: i5.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "component", type: i6.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i6.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "directive", type: i7.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "directive", type: i8.CdkTextareaAutosize, selector: "textarea[cdkTextareaAutosize]", inputs: ["cdkAutosizeMinRows", "cdkAutosizeMaxRows", "cdkTextareaAutosize", "placeholder"], exportAs: ["cdkTextareaAutosize"] }, { kind: "component", type: i9.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i10.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "component", type: i11.MatChipRow, selector: "mat-chip-row, [mat-chip-row], mat-basic-chip-row, [mat-basic-chip-row]", inputs: ["editable"], outputs: ["edited"] }, { kind: "component", type: i11.MatChipSet, selector: "mat-chip-set", inputs: ["disabled", "role", "tabIndex"] }, { kind: "directive", type: i2.MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { kind: "directive", type: i2.MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }, { kind: "directive", type: i2.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { kind: "directive", type: i12.MatButtonToggleGroup, selector: "mat-button-toggle-group", inputs: ["appearance", "name", "vertical", "value", "multiple", "disabled", "disabledInteractive", "hideSingleSelectionIndicator", "hideMultipleSelectionIndicator"], outputs: ["valueChange", "change"], exportAs: ["matButtonToggleGroup"] }, { kind: "component", type: i12.MatButtonToggle, selector: "mat-button-toggle", inputs: ["aria-label", "aria-labelledby", "id", "name", "value", "tabIndex", "disableRipple", "appearance", "checked", "disabled", "disabledInteractive"], outputs: ["change"], exportAs: ["matButtonToggle"] }, { kind: "component", type: i13.MatPaginator, selector: "mat-paginator", inputs: ["color", "pageIndex", "length", "pageSize", "pageSizeOptions", "hidePageSize", "showFirstLastButtons", "selectConfig", "disabled"], outputs: ["page"], exportAs: ["matPaginator"] }, { kind: "component", type: i14.MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { kind: "directive", type: i14.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { kind: "directive", type: i14.MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { kind: "directive", type: i14.MatColumnDef, selector: "[matColumnDef]", inputs: ["matColumnDef"] }, { kind: "directive", type: i14.MatCellDef, selector: "[matCellDef]" }, { kind: "directive", type: i14.MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }, { kind: "directive", type: i14.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { kind: "directive", type: i14.MatCell, selector: "mat-cell, td[mat-cell]" }, { kind: "component", type: i14.MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { kind: "component", type: i14.MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }, { kind: "component", type: i15.AceEditorComponent, selector: "app-ace-editor", inputs: ["value", "readOnly"], outputs: ["valueChange", "onChange"] }, { kind: "pipe", type: i3.SlicePipe, name: "slice" }] }); }
|
|
240
240
|
}
|
|
241
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.
|
|
241
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: PopoutListEditorDialogComponent, decorators: [{
|
|
242
242
|
type: Component,
|
|
243
243
|
args: [{ selector: 'app-popout-list-editor-dialog', template: "<h2 mat-dialog-title>Advanced editor</h2>\n<div mat-dialog-content class=\"container\">\n\n <div class=\"tabs\">\n <mat-button-toggle-group [ngModel]=\"visualizationType\" (ngModelChange)=\"changeVisualizationType($event)\">\n <mat-button-toggle [value]=\"VisualizationType.Table\"\n [disabled]=\"visualizationType !== VisualizationType.Table && comparisonValueListParseResult?.error\"\n matTooltip=\"Can not switch between views while there are errors in the current view.\"\n [matTooltipDisabled]=\"visualizationType === VisualizationType.Table || !comparisonValueListParseResult?.error\">Table</mat-button-toggle>\n <mat-button-toggle [value]=\"VisualizationType.Json\"\n [disabled]=\"visualizationType !== VisualizationType.Json && comparisonValueListParseResult?.error\"\n matTooltip=\"Can not switch between views while there are errors in the current view.\"\n [matTooltipDisabled]=\"visualizationType === VisualizationType.Json || !comparisonValueListParseResult?.error\">JSON</mat-button-toggle>\n <mat-button-toggle [value]=\"VisualizationType.Csv\"\n [disabled]=\"visualizationType !== VisualizationType.Csv && comparisonValueListParseResult?.error\"\n matTooltip=\"Can not switch between views while there are errors in the current view.\"\n [matTooltipDisabled]=\"visualizationType === VisualizationType.Csv || !comparisonValueListParseResult?.error\">CSV\n with hints</mat-button-toggle>\n <mat-button-toggle [value]=\"VisualizationType.Csl\"\n [disabled]=\"(visualizationType !== VisualizationType.Csl && comparisonValueListParseResult?.error) || currentlyHasHints\"\n [matTooltip]=\"currentlyHasHints ? 'There are hints set to your values so the CSV without hints view is not available' : 'Can not switch between views while there are errors in the current view.'\"\n [matTooltipDisabled]=\"(visualizationType === VisualizationType.Csl || !comparisonValueListParseResult?.error) && !currentlyHasHints\">CSV\n without hints</mat-button-toggle>\n </mat-button-toggle-group>\n </div>\n\n <div [hidden]=\"visualizationType !== VisualizationType.Table\" class=\"table-format\">\n <p class=\"description\">\n Modify the items within the list of comparison values. The hint helps you label the value for easier\n reference.\n </p>\n <div class=\"controls\">\n <div>\n <mat-form-field class=\"filter\" appearance=\"outline\" class=\"small-form-field\" subscriptSizing=\"dynamic\">\n <mat-label>Filter</mat-label>\n <input matInput [(ngModel)]=\"filterValue\" (ngModelChange)=\"applyFilter()\"\n placeholder=\"Filter values and hints.\">\n </mat-form-field>\n </div>\n <div class=\"control-button-container\">\n <div class=\"add-btn-container\" matTooltip=\"Add item\"\n [matTooltipDisabled]=\"formGroup.controls.listValue.controls.length >= data.featureFlagLimitations.maxComparisonValueListLength\">\n <div [matTooltip]=\"'Maximum ' + data.featureFlagLimitations.maxComparisonValueListLength + ' items can be added.'\"\n [matTooltipDisabled]=\"formGroup.controls.listValue.controls.length < data.featureFlagLimitations.maxComparisonValueListLength\">\n <button (click)=\"add()\" mat-icon-button type=\"button\" *ngIf=\"!data.readOnly\" class=\"add-btn\"\n [disabled]=\"formGroup.controls.listValue.controls.length >= data.featureFlagLimitations.maxComparisonValueListLength\">\n <mat-icon>add_circle</mat-icon>\n </button>\n </div>\n </div>\n\n <button type=\"button\" mat-icon-button matTooltip=\"Remove all\" class=\"grey-button\" *ngIf=\"!data.readOnly\"\n (click)=\"removeAll()\"><mat-icon>delete_outline</mat-icon></button>\n </div>\n </div>\n <table mat-table [dataSource]=\"dataSource\">\n <ng-container matColumnDef=\"value\">\n <th mat-header-cell *matHeaderCellDef mat-sort-header> Comparison value </th>\n <td mat-cell *matCellDef=\"let row; let i = index\" class=\"row align-top small-form-field\">\n <div class=\"value-field\">\n <mat-form-field appearance=\"outline\" subscriptSizing=\"dynamic\">\n <input matInput [formControl]=\"row.controls.value\"\n *ngIf=\"(paginator.pageIndex * paginator.pageSize + i) === focusIndex\" focus />\n <input matInput [formControl]=\"row.controls.value\"\n *ngIf=\"(paginator.pageIndex * paginator.pageSize + i) !== focusIndex\" />\n <mat-error *ngIf=\"row.controls.value.invalid\">\n {{FormHelper.getErrorMessage(row.controls.value)}}\n </mat-error>\n </mat-form-field>\n </div>\n </td>\n </ng-container>\n\n <ng-container matColumnDef=\"hint\">\n <th mat-header-cell *matHeaderCellDef mat-sort-header> Hint </th>\n <td mat-cell *matCellDef=\"let row\" class=\"row align-top small-form-field\">\n <div class=\"value-field\">\n <mat-form-field appearance=\"outline\" subscriptSizing=\"dynamic\">\n <input matInput [formControl]=\"row.controls.hint\" />\n <mat-error *ngIf=\"row.controls.hint.invalid\">\n {{FormHelper.getErrorMessage(row.controls.hint)}}\n </mat-error>\n </mat-form-field>\n </div>\n </td>\n </ng-container>\n <ng-container matColumnDef=\"action\">\n <th mat-header-cell *matHeaderCellDef mat-sort-header></th>\n <td mat-cell *matCellDef=\"let row\" class=\"row align-top\">\n <button class=\"grey-button\" (click)=\"remove(row)\" mat-icon-button type=\"button\"\n matTooltip=\"Remove item\" *ngIf=\"!data.readOnly\">\n <mat-icon>delete_outline</mat-icon>\n </button>\n </td>\n </ng-container>\n <tr mat-header-row *matHeaderRowDef=\"displayedColumns\"></tr>\n <tr mat-row *matRowDef=\"let row; columns: displayedColumns;\">\n </tr>\n </table>\n <div class=\"small-form-field\">\n <mat-paginator #paginator showFirstLastButtons [pageSizeOptions]=\"[5, 10, 50, 100]\"></mat-paginator>\n </div>\n </div>\n\n <div *ngIf=\"visualizationType === VisualizationType.Json\" class=\"json-format\">\n <div class=\"actions\">\n <div>\n Modify the items via a JSON text.\n </div>\n <div *ngIf=\"!data.readOnly\">\n <input #fileInput hidden=\"true\" type=\"file\" onclick=\"this.value=null\" (change)=\"loadFile($event)\"\n accept=\".txt,.json\" />\n <button type=\"button\" mat-icon-button (click)=\"fileInput.click()\" class=\"grey-button\"\n matTooltip=\"Load from file (your values will be overwritten)\">\n <mat-icon>upload_file</mat-icon>\n </button>\n </div>\n </div>\n <div class=\"json-editor\">\n <app-ace-editor [(value)]=\"plainText\" (valueChange)=\"textValueChanged()\"\n [readOnly]=\"data.readOnly\"></app-ace-editor>\n </div>\n </div>\n\n <div *ngIf=\"visualizationType === VisualizationType.Csv\" class=\"csv-format\">\n <div class=\"actions\">\n <div>\n Modify the items via a CSV (values and hints) text.\n </div>\n <div *ngIf=\"!data.readOnly\">\n <input #fileInput hidden=\"true\" type=\"file\" onclick=\"this.value=null\" (change)=\"loadFile($event)\"\n accept=\".txt,.csv\" />\n <button type=\"button\" mat-icon-button (click)=\"fileInput.click()\" class=\"grey-button\"\n matTooltip=\"Load from file (your values will be overwritten)\">\n <mat-icon>upload_file</mat-icon>\n </button>\n </div>\n </div>\n <mat-form-field appearance=\"outline\" class=\"editor-container editor-clear\" subscriptSizing=\"dynamic\">\n <textarea matInput autofocus focus rows=\"17\" cdkTextareaAutosize cdkAutosizeMinRows=\"17\"\n cdkAutosizeMaxRows=\"17\" [(ngModel)]=\"plainText\" (ngModelChange)=\"textValueChanged()\" spellcheck=\"false\"\n [readonly]=\"data.readOnly\"></textarea>\n </mat-form-field>\n </div>\n\n <div *ngIf=\"visualizationType === VisualizationType.Csl\" class=\"csv-format\">\n <div class=\"actions\">\n <div>\n Modify the items via a CSV (values only) text.\n </div>\n <div *ngIf=\"!data.readOnly\">\n <input #fileInput hidden=\"true\" type=\"file\" onclick=\"this.value=null\" (change)=\"loadFile($event)\"\n accept=\".txt,.csv\" />\n <button type=\"button\" mat-icon-button (click)=\"fileInput.click()\" class=\"grey-button\"\n matTooltip=\"Load from file (your values will be overwritten)\">\n <mat-icon>upload_file</mat-icon>\n </button>\n </div>\n </div>\n\n <mat-form-field appearance=\"outline\" class=\"editor-container editor-clear\" subscriptSizing=\"dynamic\">\n <textarea matInput autofocus focus rows=\"17\" cdkTextareaAutosize cdkAutosizeMinRows=\"17\"\n cdkAutosizeMaxRows=\"17\" [(ngModel)]=\"plainText\" (ngModelChange)=\"textValueChanged()\" spellcheck=\"false\"\n [readonly]=\"data.readOnly\"></textarea>\n </mat-form-field>\n </div>\n\n <div *ngIf=\"visualizationType !== VisualizationType.Table && comparisonValueListParseResult\">\n <p *ngIf=\"!comparisonValueListParseResult.error && comparisonValueListParseResult.comparisonValueList.length\"\n class=\"small-chip-input\">\n Preview ({{comparisonValueListParseResult.comparisonValueList.length}} items)\n <mat-chip-set>\n <span *ngFor=\"let listValueItem of comparisonValueListParseResult.comparisonValueList | slice:0:10\"\n [matTooltip]=\"listValueItem.hint ? listValueItem.hint : 'No hint'\" class=\"chip-container\">\n <mat-chip-row>\n {{listValueItem.value}}\n </mat-chip-row>\n </span>\n <mat-chip-row *ngIf=\"comparisonValueListParseResult.comparisonValueList.length > 10\">\n {{comparisonValueListParseResult.comparisonValueList.length - 10}} remaining items...\n </mat-chip-row>\n </mat-chip-set>\n </p>\n <mat-error *ngIf=\"comparisonValueListParseResult.error\" class=\"error\">\n <mat-icon>warning</mat-icon>\n <span>Couldn't parse your values. Please check the format.</span>\n </mat-error>\n </div>\n <mat-error\n *ngIf=\"formGroup.controls.listValue.touched && formGroup.controls.listValue.invalid && formGroup.controls.listValue.errors\"\n class=\"error\">\n <mat-icon>warning</mat-icon>\n <span>{{FormHelper.getErrorMessage(formGroup.controls.listValue)}}</span>\n </mat-error>\n <mat-error\n *ngIf=\"!valueChanged && formGroup.controls.listValue.touched && formGroup.controls.listValue.invalid && !formGroup.controls.listValue.errors\"\n class=\"error\">\n <mat-icon>warning</mat-icon>\n <span>Invalid items. </span>\n <div>\n <button type=\"button\" mat-stroked-button color=\"primary\"\n *ngIf=\"visualizationType !== VisualizationType.Table || paginator?.getNumberOfPages() > 1\"\n (click)=\"focusInvalid()\" class=\"jump\">\n Jump to fix\n </button>\n </div>\n </mat-error>\n</div>\n<div mat-dialog-actions>\n <button *ngIf=\"!data.readOnly\" type=\"button\" mat-flat-button color=\"primary\" (click)=\"set()\">Set</button>\n <button *ngIf=\"!data.readOnly\" type=\"button\" mat-stroked-button (click)=\"close()\">Cancel</button>\n <button *ngIf=\"data.readOnly\" type=\"button\" mat-stroked-button color=\"primary\" (click)=\"close()\">Close</button>\n</div>", styles: [".mat-mdc-chip.mat-mdc-standard-chip{--mdc-chip-container-height: 24px}.container{width:100%}.container .tabs{padding:10px 0 5px}.container .table-format .mat-mdc-table{border-bottom-width:0px!important}.container .table-format .row{border-bottom-width:0}.container .table-format .row.align-top{vertical-align:top}.container .table-format .row.align-top button{margin-top:6px}.container .table-format .row .value-field{display:flex;flex-direction:row;padding:8px 0}.container .table-format .row .value-field mat-form-field{flex-grow:1}.container .table-format .controls{padding-top:5px;display:flex;justify-content:space-between}.container .table-format .controls .control-button-container{display:flex}.container .table-format .controls .control-button-container .add-btn-container .add-btn{color:#5c6bc0}.container .table-format .controls .control-button-container .add-btn-container .add-btn[disabled]{color:#99999981}.container .table-format .bulk-btn{margin-left:1rem}.container .jump{font-size:12px;margin-left:5px}.container .description{padding-bottom:5px}.container .actions{--mdc-text-button-container-height: 24px;--mdc-filled-button-container-height: 24px;--mdc-protected-button-container-height: 24px;--mdc-outlined-button-container-height: 24px;--mat-text-button-touch-target-display: none;--mat-filled-button-touch-target-display: none;--mat-protected-button-touch-target-display: none;--mat-outlined-button-touch-target-display: none;display:flex;align-items:center;justify-content:space-between;margin:5px 0}.container .json-format .json-editor{margin-bottom:10px;width:100%;height:282px}.container .csv-format mat-form-field{width:100%}.container .csv-format mat-form-field textarea{width:100%}.container .csv-format .warning{display:flex;align-items:center;border:1px solid rgba(255,0,0,.3);border-radius:5px;padding:1rem;margin-bottom:16px;background-color:#ff000080;color:#fff}.container .csv-format .warning span{margin-left:16px}.container mat-chip-row.invalid{background-color:red}.container .error{--mdc-text-button-container-height: 24px;--mdc-filled-button-container-height: 24px;--mdc-protected-button-container-height: 24px;--mdc-outlined-button-container-height: 24px;--mat-text-button-touch-target-display: none;--mat-filled-button-touch-target-display: none;--mat-protected-button-touch-target-display: none;--mat-outlined-button-touch-target-display: none;margin-top:16px;display:flex;align-items:center}.container .error span{margin-left:4px}.container .grey-button{color:#999}\n"] }]
|
|
244
244
|
}], ctorParameters: () => [{ type: i1.FormGenerator }, { type: i2.MatDialogRef }, { type: i1.ComparisonValueListHelper }, { type: undefined, decorators: [{
|
|
@@ -248,4 +248,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImpor
|
|
|
248
248
|
type: ViewChild,
|
|
249
249
|
args: ["paginator", { static: false }]
|
|
250
250
|
}] } });
|
|
251
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9wb3V0LWxpc3QtZWRpdG9yLWRpYWxvZy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1jb25maWdjYXQtcHVibGljYXBpLXVpL3NyYy9saWIvdjIvZmVhdHVyZS1mbGFnL2V2YWx1YXRpb24tZm9ybXVsYS90YXJnZXRpbmctcnVsZS9jb25kaXRpb25zL3VzZXItY29uZGl0aW9uL3BvcG91dC1saXN0LWVkaXRvci1kaWFsb2cvcG9wb3V0LWxpc3QtZWRpdG9yLWRpYWxvZy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1jb25maWdjYXQtcHVibGljYXBpLXVpL3NyYy9saWIvdjIvZmVhdHVyZS1mbGFnL2V2YWx1YXRpb24tZm9ybXVsYS90YXJnZXRpbmctcnVsZS9jb25kaXRpb25zL3VzZXItY29uZGl0aW9uL3BvcG91dC1saXN0LWVkaXRvci1kaWFsb2cvcG9wb3V0LWxpc3QtZWRpdG9yLWRpYWxvZy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWlCLFNBQVMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFVLFNBQVMsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFeEcsT0FBTyxFQUFnQixlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUV6RSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUU3RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNoRSxPQUFPLEVBQ0wsVUFBVSxFQUdYLE1BQU0sZ0NBQWdDLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBU3hDLElBQUssaUJBS0o7QUFMRCxXQUFLLGlCQUFpQjtJQUNwQiwyREFBUyxDQUFBO0lBQ1QseURBQVEsQ0FBQTtJQUNSLHVE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LENBQUMsQ0FBQyxDQUFDO1FBQ25DLE1BQU0sVUFBVSxHQUFHLElBQUksVUFBVSxFQUFFLENBQUM7UUFDcEMsVUFBVSxDQUFDLE1BQU0sR0FBRyxHQUFHLEVBQUU7WUFDdkIsSUFBSSxDQUFDLFNBQVMsR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQzlDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1FBQzFCLENBQUMsQ0FBQztRQUNGLFVBQVUsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDOUIsQ0FBQzs4R0FyUFUsK0JBQStCLG9IQThCaEMsZUFBZTtrR0E5QmQsK0JBQStCLGdMQ2hDNUMsb3paQW9OTTs7MkZEcExPLCtCQUErQjtrQkFMM0MsU0FBUzsrQkFDRSwrQkFBK0I7OzBCQWtDdEMsTUFBTTsyQkFBQyxlQUFlO3lDQVhzQixZQUFZO3NCQUExRCxTQUFTO3VCQUFDLFdBQVcsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBZnRlclZpZXdJbml0LCBDb21wb25lbnQsIERlc3Ryb3lSZWYsIEluamVjdCwgT25Jbml0LCBWaWV3Q2hpbGQsIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgTWF0RGlhbG9nUmVmLCBNQVRfRElBTE9HX0RBVEEgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xuaW1wb3J0IHsgTWF0UGFnaW5hdG9yIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvcGFnaW5hdG9yJztcbmltcG9ydCB7IE1hdFRhYmxlRGF0YVNvdXJjZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3RhYmxlJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgdGFrZVVudGlsRGVzdHJveWVkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuaW1wb3J0IHtcbiAgRm9ybUhlbHBlciwgSUZlYXR1cmVGbGFnTGltaXRhdGlvbnMsIENvbXBhcmlzb25WYWx1ZUZvcm0sIENvbXBhcmlzb25WYWx1ZUxpc3RGb3JtLFxuICBGb3JtR2VuZXJhdG9yLCBVc2VyQ29tcGFyYXRvciwgQ29tcGFyaXNvblZhbHVlTGlzdEhlbHBlciwgQ29tcGFyaXNvblZhbHVlTGlzdFBhcnNlUmVzdWx0LFxuICBJQ29tcGFyaXNvblZhbHVlTGlzdE1vZGVsXG59IGZyb20gJy4uLy4uLy4uLy4uLy4uLy4uLy4uL2Jvb3RzdHJhcCc7XG5cbmV4cG9ydCB0eXBlIFBvcG91dExpc3RFZGl0b3JEaWFsb2dEYXRhID0ge1xuICBjb21wYXJpc29uVmFsdWVMaXN0OiBJQ29tcGFyaXNvblZhbHVlTGlzdE1vZGVsW10sXG4gIGNvbXBhcmF0b3I6IFVzZXJDb21wYXJhdG9yLFxuICBmZWF0dXJlRmxhZ0xpbWl0YXRpb25zOiBJRmVhdHVyZUZsYWdMaW1pdGF0aW9uc1xuICByZWFkT25seTogYm9vbGVhblxufTtcblxuZW51bSBWaXN1YWxpemF0aW9uVHlwZSB7XG4gIFRhYmxlID0gMCxcbiAgSnNvbiA9IDEsXG4gIENzdiA9IDIsXG4gIENzbCA9IDNcbn1cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXBwLXBvcG91dC1saXN0LWVkaXRvci1kaWFsb2cnLFxuICB0ZW1wbGF0ZVVybDogJy4vcG9wb3V0LWxpc3QtZWRpdG9yLWRpYWxvZy5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3BvcG91dC1saXN0LWVkaXRvci1kaWFsb2cuY29tcG9uZW50LnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBQb3BvdXRMaXN0RWRpdG9yRGlhbG9nQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0IHtcbiAgZGVzdHJveVJlZiA9IGluamVjdChEZXN0cm95UmVmKTtcbiAgRm9ybUhlbHBlciA9IEZvcm1IZWxwZXI7XG4gIFZpc3VhbGl6YXRpb25UeXBlID0gVmlzdWFsaXphdGlvblR5cGU7XG5cbiAgZGF0YVNvdXJjZSA9IG5ldyBNYXRUYWJsZURhdGFTb3VyY2U8Rm9ybUdyb3VwPENvbXBhcmlzb25WYWx1ZUxpc3RGb3JtPj4oW10pO1xuICBwbGFpblRleHQgPSBcIlwiO1xuICBmb3JtR3JvdXA6IEZvcm1Hcm91cDxDb21wYXJpc29uVmFsdWVGb3JtPjtcbiAgZmlsdGVyVmFsdWUgPSAnJztcbiAgdmFsdWVDaGFuZ2VkID0gZmFsc2U7XG4gIGN1cnJlbnRseUhhc0hpbnRzID0gZmFsc2U7XG5cbiAgZGlzcGxheWVkQ29sdW1ucyA9IFsndmFsdWUnLCAnaGludCcsICdhY3Rpb24nXTtcbiAgdmlzdWFsaXphdGlvblR5cGUgPSBWaXN1YWxpemF0aW9uVHlwZS5UYWJsZTtcbiAgY29tcGFyaXNvblZhbHVlTGlzdFBhcnNlUmVzdWx0OiBDb21wYXJpc29uVmFsdWVMaXN0UGFyc2VSZXN1bHQ7XG4gIHZhbHVlQ2hhbmdlU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG4gIGZvY3VzSW5kZXggPSAwO1xuXG4gIHBhZ2luYXRvcjogTWF0UGFnaW5hdG9yO1xuICBAVmlld0NoaWxkKFwicGFnaW5hdG9yXCIsIHsgc3RhdGljOiBmYWxzZSB9KSBzZXQgc2V0UGFnaW5hdG9yKHBhZ2luYXRvcjogTWF0UGFnaW5hdG9yKSB7XG4gICAgdGhpcy5wYWdpbmF0b3IgPSBwYWdpbmF0b3I7XG4gICAgaWYgKHRoaXMuZGF0YVNvdXJjZSkge1xuICAgICAgdGhpcy5kYXRhU291cmNlLnBhZ2luYXRvciA9IHRoaXMucGFnaW5hdG9yO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgZm9ybUdlbmVyYXRvcjogRm9ybUdlbmVyYXRvcixcbiAgICBwdWJsaWMgZGlhbG9nUmVmOiBNYXREaWFsb2dSZWY8UG9wb3V0TGlzdEVkaXRvckRpYWxvZ0NvbXBvbmVudD4sXG4gICAgcHJpdmF0ZSBjb21wYXJpc29uVmFsdWVMaXN0SGVscGVyOiBDb21wYXJpc29uVmFsdWVMaXN0SGVscGVyLFxuICAgIEBJbmplY3QoTUFUX0RJQUxPR19EQVRBKSBwdWJsaWMgZGF0YTogUG9wb3V0TGlzdEVkaXRvckRpYWxvZ0RhdGEpIHsgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIGNvbnN0IGNvbXBhcmlzb25WYWx1ZUxpc3QgPSB0aGlzLmRhdGEuY29tcGFyaXNvblZhbHVlTGlzdDtcbiAgICBpZiAoIWNvbXBhcmlzb25WYWx1ZUxpc3QubGVuZ3RoKSB7XG4gICAgICBjb21wYXJpc29uVmFsdWVMaXN0LnB1c2goeyB2YWx1ZTogJycgfSk7XG4gICAgfVxuXG4gICAgdGhpcy5zZXRGb3JtR3JvdXAoY29tcGFyaXNvblZhbHVlTGlzdCk7XG4gIH1cblxuICBzZXRGb3JtR3JvdXAoY29tcGFyaXNvblZhbHVlTGlzdDogSUNvbXBhcmlzb25WYWx1ZUxpc3RNb2RlbFtdKSB7XG4gICAgdGhpcy5mb3JtR3JvdXAgPSB0aGlzLmZvcm1HZW5lcmF0b3IuZ2VuZXJhdGVDb21wYXJpc29uVmFsdWVGb3JtR3JvdXAoXG4gICAgICB7IGxpc3RWYWx1ZTogY29tcGFyaXNvblZhbHVlTGlzdCB9LFxuICAgICAgdGhpcy5kYXRhLmNvbXBhcmF0b3IsIHRoaXMuZGF0YS5yZWFkT25seSwgdGhpcy5kYXRhLmZlYXR1cmVGbGFnTGltaXRhdGlvbnMpO1xuXG4gICAgaWYgKHRoaXMuZm9ybUdyb3VwLmludmFsaWQpIHtcbiAgICAgIHRoaXMuZm9ybUdyb3VwLm1hcmtBbGxBc1RvdWNoZWQoKTtcbiAgICB9XG4gICAgaWYgKHRoaXMudmFsdWVDaGFuZ2VTdWJzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMudmFsdWVDaGFuZ2VTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gICAgdGhpcy5jaGVja0hhc0hpbnRzKCk7XG4gICAgdGhpcy52YWx1ZUNoYW5nZVN1YnNjcmlwdGlvbiA9IHRoaXMuZm9ybUdyb3VwLnZhbHVlQ2hhbmdlc1xuICAgICAgLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZikpXG4gICAgICAuc3Vic2NyaWJlKHsgbmV4dDogKCkgPT4gdGhpcy5jaGVja0hhc0hpbnRzKCkgfSk7XG4gIH1cblxuICBjaGVja0hhc0hpbnRzKCkge1xuICAgIHRoaXMuY3VycmVudGx5SGFzSGludHMgPSAhIXRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzLmxpc3RWYWx1ZS5jb250cm9scy5maW5kKHIgPT4gISFyLnZhbHVlLmhpbnQpO1xuICB9XG5cbiAgc2V0RGF0YVNvdXJjZSgpIHtcbiAgICBpZiAodGhpcy5kYXRhU291cmNlKSB7XG4gICAgICB0aGlzLmRhdGFTb3VyY2UuZGF0YSA9IHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzLmxpc3RWYWx1ZS5jb250cm9scztcbiAgICAgIGlmICh0aGlzLmRhdGFTb3VyY2UucGFnaW5hdG9yKSB7XG4gICAgICAgIHRoaXMuZGF0YVNvdXJjZS5wYWdpbmF0b3IubGVuZ3RoID0gdGhpcy5kYXRhU291cmNlLmRhdGEubGVuZ3RoO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmRhdGFTb3VyY2UgPSBuZXcgTWF0VGFibGVEYXRhU291cmNlKHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzLmxpc3RWYWx1ZS5jb250cm9scyk7XG4gICAgdGhpcy5kYXRhU291cmNlLnBhZ2luYXRvciA9IHRoaXMucGFnaW5hdG9yO1xuICAgIHRoaXMuZGF0YVNvdXJjZS5maWx0ZXJQcmVkaWNhdGUgPSAocm93LCBmaWx0ZXIpID0+IFtcbiAgICAgIC8vIFwiRmlsdGVyIGF1ZGl0IGxvZyBpdGVtcyBieSBhbnkgZGV0YWlsLlwiIC0+IFRoaXMgbGlzdCBzaG91bGQgYmUga2VwdCBpbiBzeW5jIHdpdGggdGhlIEhUTUwgdGVtcGxhdGUhXG4gICAgICByb3cuY29udHJvbHMudmFsdWUudmFsdWUsXG4gICAgICByb3cuY29udHJvbHMuaGludC52YWx1ZVxuICAgIF0uc29tZSh2ID0+IHY/LnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoZmlsdGVyKSk7XG4gICAgdGhpcy5mb2N1c0luZGV4ID0gMDtcbiAgfVxuXG4gIGFwcGx5RmlsdGVyKCkge1xuICAgIHRoaXMuZGF0YVNvdXJjZS5maWx0ZXIgPSAodGhpcy5maWx0ZXJWYWx1ZSA/PyBcIlwiKS50cmltKCkudG9Mb3dlckNhc2UoKTtcblxuICAgIGlmICh0aGlzLmRhdGFTb3VyY2UucGFnaW5hdG9yKSB7XG4gICAgICB0aGlzLmZvY3VzSW5kZXggPSAwO1xuICAgICAgdGhpcy5kYXRhU291cmNlLnBhZ2luYXRvci5maXJzdFBhZ2UoKTtcbiAgICB9XG4gIH1cblxuICBhZGQoKSB7XG4gICAgaWYgKHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzLmxpc3RWYWx1ZS5jb250cm9scy5sZW5ndGggPj0gdGhpcy5kYXRhLmZlYXR1cmVGbGFnTGltaXRhdGlvbnMubWF4Q29tcGFyaXNvblZhbHVlTGlzdExlbmd0aCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuZm9ybUdlbmVyYXRvci5hZGRDb21wYXJpc29uVmFsdWVMaXN0VmFsdWVJdGVtcyhcbiAgICAgIHRoaXMuZGF0YS5jb21wYXJhdG9yLFxuICAgICAgdGhpcy5mb3JtR3JvdXAuY29udHJvbHMubGlzdFZhbHVlLFxuICAgICAgW3sgdmFsdWU6ICcnIH1dLFxuICAgICAgdGhpcy5kYXRhLmZlYXR1cmVGbGFnTGltaXRhdGlvbnMpO1xuXG4gICAgdGhpcy5zZXREYXRhU291cmNlKCk7XG4gICAgdGhpcy5maWx0ZXJWYWx1ZSA9ICcnO1xuICAgIHRoaXMuYXBwbHlGaWx0ZXIoKTtcbiAgICB0aGlzLmZvY3VzSW5kZXggPSB0aGlzLmZvcm1Hcm91cC5jb250cm9scy5saXN0VmFsdWUuY29udHJvbHMubGVuZ3RoIC0gMTtcbiAgICB0aGlzLmRhdGFTb3VyY2UucGFnaW5hdG9yLmxhc3RQYWdlKCk7XG4gIH1cblxuICByZW1vdmUocm93OiBGb3JtR3JvdXA8Q29tcGFyaXNvblZhbHVlTGlzdEZvcm0+KSB7XG4gICAgY29uc3QgaW5kZXggPSB0aGlzLmZvcm1Hcm91cC5jb250cm9scy5saXN0VmFsdWUuY29udHJvbHMuZmluZEluZGV4KGMgPT4gYy5jb250cm9scy5pbmRleC52YWx1ZSA9PT0gcm93LmNvbnRyb2xzLmluZGV4LnZhbHVlKTtcbiAgICBpZiAoaW5kZXggPT09IC0xKSB7IHJldHVybjsgfVxuICAgIHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzLmxpc3RWYWx1ZS5jb250cm9scy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgIHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzLmxpc3RWYWx1ZS51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XG4gICAgdGhpcy5mb3JtR3JvdXAuY29udHJvbHMubGlzdFZhbHVlLm1hcmtBc1RvdWNoZWQoKTtcbiAgICB0aGlzLmZvcm1Hcm91cC5jb250cm9scy5saXN0VmFsdWUubWFya0FzRGlydHkoKTtcbiAgICB0aGlzLnNldERhdGFTb3VyY2UoKTtcbiAgfVxuXG4gIHNldCgpIHtcbiAgICBpZiAodGhpcy52aXN1YWxpemF0aW9uVHlwZSAhPT0gVmlzdWFsaXphdGlvblR5cGUuVGFibGUpIHtcbiAgICAgIGlmICh0aGlzLmNvbXBhcmlzb25WYWx1ZUxpc3RQYXJzZVJlc3VsdD8uZXJyb3IpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhpcy5zZXRGb3JtR3JvdXAodGhpcy5jb21wYXJpc29uVmFsdWVMaXN0UGFyc2VSZXN1bHQuY29tcGFyaXNvblZhbHVlTGlzdCk7XG4gICAgICB0aGlzLnNldERhdGFTb3VyY2UoKTtcbiAgICAgIHRoaXMudmFsdWVDaGFuZ2VkID0gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZm9ybUdyb3VwLmludmFsaWQpIHtcbiAgICAgIHRoaXMuZm9ybUdyb3VwLm1hcmtBbGxBc1RvdWNoZWQoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmRpYWxvZ1JlZi5jbG9zZSh7IGNvbXBhcmlzb25WYWx1ZUxpc3Q6IHRoaXMuZ2V0UmF3VmFsdWUoKSB9KTtcbiAgfVxuXG4gIGNsb3NlKCkge1xuICAgIHRoaXMuZGlhbG9nUmVmLmNsb3NlKCk7XG4gIH1cblxuICByZW1vdmVBbGwoKSB7XG4gICAgdGhpcy5zZXRGb3JtR3JvdXAoW10pO1xuICAgIHRoaXMuc2V0RGF0YVNvdXJjZSgpO1xuICAgIHRoaXMuZm9jdXNJbmRleCA9IDA7XG4gICAgdGhpcy5kYXRhU291cmNlLnBhZ2luYXRvci5maXJzdFBhZ2UoKTtcbiAgfVxuXG4gIGdldFJhd1ZhbHVlKCk6IElDb21wYXJpc29uVmFsdWVMaXN0TW9kZWxbXSB7XG4gICAgcmV0dXJuIHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzLmxpc3RWYWx1ZS52YWx1ZS5tYXAodiA9PiB7IHJldHVybiB7IHZhbHVlOiB2LnZhbHVlLCBoaW50OiB2LmhpbnQgPz8gJycgfSB9KTtcbiAgfVxuXG4gIGZvY3VzSW52YWxpZCgpIHtcbiAgICBpZiAodGhpcy52aXN1YWxpemF0aW9uVHlwZSAhPT0gVmlzdWFsaXphdGlvblR5cGUuVGFibGUpIHtcbiAgICAgIHRoaXMuY2hhbmdlVmlzdWFsaXphdGlvblR5cGUoVmlzdWFsaXphdGlvblR5cGUuVGFibGUpO1xuICAgIH1cbiAgICBjb25zdCBpbnZhbGlkSW5kZXggPSB0aGlzLmZvcm1Hcm91cC5jb250cm9scy5saXN0VmFsdWUuY29udHJvbHMuZmluZEluZGV4KGMgPT4gYy5pbnZhbGlkKTtcbiAgICBpZiAoaW52YWxpZEluZGV4ICE9PSAtMSkge1xuICAgICAgdGhpcy5mb3JtR3JvdXAubWFya0FsbEFzVG91Y2hlZCgpO1xuICAgICAgdGhpcy5maWx0ZXJWYWx1ZSA9ICcnO1xuICAgICAgdGhpcy5hcHBseUZpbHRlcigpO1xuICAgICAgdGhpcy5kYXRhU291cmNlLnBhZ2luYXRvci5sZW5ndGggPSB0aGlzLmRhdGFTb3VyY2UuZGF0YS5sZW5ndGg7XG4gICAgICBjb25zdCBwYWdlTnVtYmVyID0gTWF0aC5mbG9vcihpbnZhbGlkSW5kZXggLyB0aGlzLmRhdGFTb3VyY2UucGFnaW5hdG9yLnBhZ2VTaXplKTtcbiAgICAgIHRoaXMuZm9jdXNJbmRleCA9IGludmFsaWRJbmRleDtcbiAgICAgIHRoaXMuZGF0YVNvdXJjZS5wYWdpbmF0b3IucGFnZUluZGV4ID0gcGFnZU51bWJlcjtcbiAgICAgIHRoaXMucGFnaW5hdG9yLnBhZ2UubmV4dCh7XG4gICAgICAgIHBhZ2VJbmRleDogcGFnZU51bWJlcixcbiAgICAgICAgcGFnZVNpemU6IHRoaXMucGFnaW5hdG9yLnBhZ2VTaXplLFxuICAgICAgICBsZW5ndGg6IHRoaXMucGFnaW5hdG9yLmxlbmd0aFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgY2hhbmdlVmlzdWFsaXphdGlvblR5cGUodmlzdWFsaXphdGlvblR5cGU6IFZpc3VhbGl6YXRpb25UeXBlKSB7XG4gICAgaWYgKHRoaXMudmFsdWVDaGFuZ2VkICYmIHRoaXMudmlzdWFsaXphdGlvblR5cGUgIT09IFZpc3VhbGl6YXRpb25UeXBlLlRhYmxlKSB7XG4gICAgICBpZiAodGhpcy5jb21wYXJpc29uVmFsdWVMaXN0UGFyc2VSZXN1bHQuZXJyb3IpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnNldEZvcm1Hcm91cCh0aGlzLmNvbXBhcmlzb25WYWx1ZUxpc3RQYXJzZVJlc3VsdC5jb21wYXJpc29uVmFsdWVMaXN0KTtcbiAgICAgIHRoaXMuc2V0RGF0YVNvdXJjZSgpO1xuICAgIH1cblxuICAgIHRoaXMudmlzdWFsaXphdGlvblR5cGUgPSB2aXN1YWxpemF0aW9uVHlwZTtcbiAgICB0aGlzLnZhbHVlQ2hhbmdlZCA9IGZhbHNlO1xuXG4gICAgc3dpdGNoICh2aXN1YWxpemF0aW9uVHlwZSkge1xuICAgICAgY2FzZSBWaXN1YWxpemF0aW9uVHlwZS5Kc29uOlxuICAgICAgICB0aGlzLnBsYWluVGV4dCA9IHRoaXMuY29tcGFyaXNvblZhbHVlTGlzdEhlbHBlci5mb3JtYXRWYWx1ZXNBbmRIaW50QXNKc29uKHRoaXMuZ2V0UmF3VmFsdWUoKSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBWaXN1YWxpemF0aW9uVHlwZS5Dc3Y6XG4gICAgICAgIHRoaXMucGxhaW5UZXh0ID0gdGhpcy5jb21wYXJpc29uVmFsdWVMaXN0SGVscGVyLmZvcm1hdFZhbHVlc0FuZEhpbnRBc0Nzdih0aGlzLmdldFJhd1ZhbHVlKCkpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgVmlzdWFsaXphdGlvblR5cGUuQ3NsOlxuICAgICAgICB0aGlzLnBsYWluVGV4dCA9IHRoaXMuY29tcGFyaXNvblZhbHVlTGlzdEhlbHBlci5mb3JtYXRWYWx1ZXNBc0Nzdih0aGlzLmdldFJhd1ZhbHVlKCkpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgVmlzdWFsaXphdGlvblR5cGUuVGFibGU6XG4gICAgICAgIGlmICh0aGlzLmRhdGFTb3VyY2UucGFnaW5hdG9yKSB7XG4gICAgICAgICAgdGhpcy5mb2N1c0luZGV4ID0gMDtcbiAgICAgICAgICB0aGlzLmRhdGFTb3VyY2UucGFnaW5hdG9yLmZpcnN0UGFnZSgpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgICB0aGlzLnJlY2FsY3VsYXRlKCk7XG4gIH1cblxuICB0ZXh0VmFsdWVDaGFuZ2VkKCkge1xuICAgIHRoaXMudmFsdWVDaGFuZ2VkID0gdHJ1ZTtcbiAgICB0aGlzLnJlY2FsY3VsYXRlKCk7XG4gICAgaWYgKCF0aGlzLmNvbXBhcmlzb25WYWx1ZUxpc3RQYXJzZVJlc3VsdD8uZXJyb3IpIHtcbiAgICAgIHRoaXMuc2V0Rm9ybUdyb3VwKHRoaXMuY29tcGFyaXNvblZhbHVlTGlzdFBhcnNlUmVzdWx0LmNvbXBhcmlzb25WYWx1ZUxpc3QpO1xuICAgICAgdGhpcy5zZXREYXRhU291cmNlKCk7XG4gICAgfVxuICB9XG5cbiAgcmVjYWxjdWxhdGUoKSB7XG4gICAgc3dpdGNoICh0aGlzLnZpc3VhbGl6YXRpb25UeXBlKSB7XG4gICAgICBjYXNlIFZpc3VhbGl6YXRpb25UeXBlLkpzb246XG4gICAgICAgIHRoaXMuY29tcGFyaXNvblZhbHVlTGlzdFBhcnNlUmVzdWx0ID0gdGhpcy5jb21wYXJpc29uVmFsdWVMaXN0SGVscGVyLnBhcnNlVmFsdWVzQW5kSGludHNGcm9tSnNvbih0aGlzLnBsYWluVGV4dCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBWaXN1YWxpemF0aW9uVHlwZS5Dc3Y6XG4gICAgICAgIHRoaXMuY29tcGFyaXNvblZhbHVlTGlzdFBhcnNlUmVzdWx0ID0gdGhpcy5jb21wYXJpc29uVmFsdWVMaXN0SGVscGVyLnBhcnNlVmFsdWVzQW5kSGludHNGcm9tQ3N2KHRoaXMucGxhaW5UZXh0KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFZpc3VhbGl6YXRpb25UeXBlLkNzbDpcbiAgICAgICAgdGhpcy5jb21wYXJpc29uVmFsdWVMaXN0UGFyc2VSZXN1bHQgPSB0aGlzLmNvbXBhcmlzb25WYWx1ZUxpc3RIZWxwZXIucGFyc2VWYWx1ZXNGcm9tQ3N2KHRoaXMucGxhaW5UZXh0KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aGlzLmNvbXBhcmlzb25WYWx1ZUxpc3RQYXJzZVJlc3VsdCA9IHsgY29tcGFyaXNvblZhbHVlTGlzdDogW10gfTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGlmICh0aGlzLnZpc3VhbGl6YXRpb25UeXBlICE9PSBWaXN1YWxpemF0aW9uVHlwZS5UYWJsZSAmJiAhdGhpcy5jb21wYXJpc29uVmFsdWVMaXN0UGFyc2VSZXN1bHQuZXJyb3IpIHtcbiAgICAgIHRoaXMuY3VycmVudGx5SGFzSGludHMgPSAhIXRoaXMuY29tcGFyaXNvblZhbHVlTGlzdFBhcnNlUmVzdWx0LmNvbXBhcmlzb25WYWx1ZUxpc3QuZmluZChyID0+ICEhci5oaW50KTtcbiAgICB9IGVsc2UgaWYgKHRoaXMudmlzdWFsaXphdGlvblR5cGUgIT09IFZpc3VhbGl6YXRpb25UeXBlLlRhYmxlKSB7XG4gICAgICB0aGlzLmNoZWNrSGFzSGludHMoKTtcbiAgICB9XG4gIH1cblxuICBsb2FkRmlsZShldmVudCkge1xuICAgIGNvbnN0IGZpbGUgPSBldmVudC50YXJnZXQuZmlsZXNbMF07XG4gICAgY29uc3QgZmlsZVJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XG4gICAgZmlsZVJlYWRlci5vbmxvYWQgPSAoKSA9PiB7XG4gICAgICB0aGlzLnBsYWluVGV4dCA9IGZpbGVSZWFkZXIucmVzdWx0LnRvU3RyaW5nKCk7XG4gICAgICB0aGlzLnRleHRWYWx1ZUNoYW5nZWQoKTtcbiAgICB9O1xuICAgIGZpbGVSZWFkZXIucmVhZEFzVGV4dChmaWxlKTtcbiAgfVxufVxuIiwiPGgyIG1hdC1kaWFsb2ctdGl0bGU+QWR2YW5jZWQgZWRpdG9yPC9oMj5cbjxkaXYgbWF0LWRpYWxvZy1jb250ZW50IGNsYXNzPVwiY29udGFpbmVyXCI+XG5cbiAgICA8ZGl2IGNsYXNzPVwidGFic1wiPlxuICAgICAgICA8bWF0LWJ1dHRvbi10b2dnbGUtZ3JvdXAgW25nTW9kZWxdPVwidmlzdWFsaXphdGlvblR5cGVcIiAobmdNb2RlbENoYW5nZSk9XCJjaGFuZ2VWaXN1YWxpemF0aW9uVHlwZSgkZXZlbnQpXCI+XG4gICAgICAgICAgICA8bWF0LWJ1dHRvbi10b2dnbGUgW3ZhbHVlXT1cIlZpc3VhbGl6YXRpb25UeXBlLlRhYmxlXCJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwidmlzdWFsaXphdGlvblR5cGUgIT09IFZpc3VhbGl6YXRpb25UeXBlLlRhYmxlICYmIGNvbXBhcmlzb25WYWx1ZUxpc3RQYXJzZVJlc3VsdD8uZXJyb3JcIlxuICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9XCJDYW4gbm90IHN3aXRjaCBiZXR3ZWVuIHZpZXdzIHdoaWxlIHRoZXJlIGFyZSBlcnJvcnMgaW4gdGhlIGN1cnJlbnQgdmlldy5cIlxuICAgICAgICAgICAgICAgIFttYXRUb29sdGlwRGlzYWJsZWRdPVwidmlzdWFsaXphdGlvblR5cGUgPT09IFZpc3VhbGl6YXRpb25UeXBlLlRhYmxlIHx8ICFjb21wYXJpc29uVmFsdWVMaXN0UGFyc2VSZXN1bHQ/LmVycm9yXCI+VGFibGU8L21hdC1idXR0b24tdG9nZ2xlPlxuICAgICAgICAgICAgPG1hdC1idXR0b24tdG9nZ2xlIFt2YWx1ZV09XCJWaXN1YWxpemF0aW9uVHlwZS5Kc29uXCJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwidmlzdWFsaXphdGlvblR5cGUgIT09IFZpc3VhbGl6YXRpb25UeXBlLkpzb24gJiYgY29tcGFyaXNvblZhbHVlTGlzdFBhcnNlUmVzdWx0Py5lcnJvclwiXG4gICAgICAgICAgICAgICAgbWF0VG9vbHRpcD1cIkNhbiBub3Qgc3dpdGNoIGJldHdlZW4gdmlld3Mgd2hpbGUgdGhlcmUgYXJlIGVycm9ycyBpbiB0aGUgY3VycmVudCB2aWV3LlwiXG4gICAgICAgICAgICAgICAgW21hdFRvb2x0aXBEaXNhYmxlZF09XCJ2aXN1YWxpemF0aW9uVHlwZSA9PT0gVmlzdWFsaXphdGlvblR5cGUuSnNvbiB8fCAhY29tcGFyaXNvblZhbHVlTGlzdFBhcnNlUmVzdWx0Py5lcnJvclwiPkpTT048L21hdC1idXR0b24tdG9nZ2xlPlxuICAgICAgICAgICAgPG1hdC1idXR0b24tdG9nZ2xlIFt2YWx1ZV09XCJWaXN1YWxpemF0aW9uVHlwZS5Dc3ZcIlxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJ2aXN1YWxpemF0aW9uVHlwZSAhPT0gVmlzdWFsaXphdGlvblR5cGUuQ3N2ICYmIGNvbXBhcmlzb25WYWx1ZUxpc3RQYXJzZVJlc3VsdD8uZXJyb3JcIlxuICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9XCJDYW4gbm90IHN3aXRjaCBiZXR3ZWVuIHZpZXdzIHdoaWxlIHRoZXJlIGFyZSBlcnJvcnMgaW4gdGhlIGN1cnJlbnQgdmlldy5cIlxuICAgICAgICAgICAgICAgIFttYXRUb29sdGlwRGlzYWJsZWRdPVwidmlzdWFsaXphdGlvblR5cGUgPT09IFZpc3VhbGl6YXRpb25UeXBlLkNzdiB8fCAhY29tcGFyaXNvblZhbHVlTGlzdFBhcnNlUmVzdWx0Py5lcnJvclwiPkNTVlxuICAgICAgICAgICAgICAgIHdpdGggaGludHM8L21hdC1idXR0b24tdG9nZ2xlPlxuICAgICAgICAgICAgPG1hdC1idXR0b24tdG9nZ2xlIFt2YWx1ZV09XCJWaXN1YWxpemF0aW9uVHlwZS5Dc2xcIlxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCIodmlzdWFsaXphdGlvblR5cGUgIT09IFZpc3VhbGl6YXRpb25UeXBlLkNzbCAmJiBjb21wYXJpc29uVmFsdWVMaXN0UGFyc2VSZXN1bHQ/LmVycm9yKSB8fCBjdXJyZW50bHlIYXNIaW50c1wiXG4gICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPVwiY3VycmVudGx5SGFzSGludHMgPyAnVGhlcmUgYXJlIGhpbnRzIHNldCB0byB5b3VyIHZhbHVlcyBzbyB0aGUgQ1NWIHdpdGhvdXQgaGludHMgdmlldyBpcyBub3QgYXZhaWxhYmxlJyA6ICdDYW4gbm90IHN3aXRjaCBiZXR3ZWVuIHZpZXdzIHdoaWxlIHRoZXJlIGFyZSBlcnJvcnMgaW4gdGhlIGN1cnJlbnQgdmlldy4nXCJcbiAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcERpc2FibGVkXT1cIih2aXN1YWxpemF0aW9uVHlwZSA9PT0gVmlzdWFsaXphdGlvblR5cGUuQ3NsIHx8ICFjb21wYXJpc29uVmFsdWVMaXN0UGFyc2VSZXN1bHQ/LmVycm9yKSAmJiAhY3VycmVudGx5SGFzSGludHNcIj5DU1ZcbiAgICAgICAgICAgICAgICB3aXRob3V0IGhpbnRzPC9tYXQtYnV0dG9uLXRvZ2dsZT5cbiAgICAgICAgPC9tYXQtYnV0dG9uLXRvZ2dsZS1ncm91cD5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgW2hpZGRlbl09XCJ2aXN1YWxpemF0aW9uVHlwZSAhPT0gVmlzdWFsaXphdGlvblR5cGUuVGFibGVcIiBjbGFzcz1cInRhYmxlLWZvcm1hdFwiPlxuICAgICAgICA8cCBjbGFzcz1cImRlc2NyaXB0aW9uXCI+XG4gICAgICAgICAgICBNb2RpZnkgdGhlIGl0ZW1zIHdpdGhpbiB0aGUgbGlzdCBvZiBjb21wYXJpc29uIHZhbHVlcy4gVGhlIGhpbnQgaGVscHMgeW91IGxhYmVsIHRoZSB2YWx1ZSBmb3IgZWFzaWVyXG4gICAgICAgICAgICByZWZlcmVuY2UuXG4gICAgICAgIDwvcD5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRyb2xzXCI+XG4gICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cImZpbHRlclwiIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCIgY2xhc3M9XCJzbWFsbC1mb3JtLWZpZWxkXCIgc3Vic2NyaXB0U2l6aW5nPVwiZHluYW1pY1wiPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsPkZpbHRlcjwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgWyhuZ01vZGVsKV09XCJmaWx0ZXJWYWx1ZVwiIChuZ01vZGVsQ2hhbmdlKT1cImFwcGx5RmlsdGVyKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJGaWx0ZXIgdmFsdWVzIGFuZCBoaW50cy5cIj5cbiAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29udHJvbC1idXR0b24tY29udGFpbmVyXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFkZC1idG4tY29udGFpbmVyXCIgbWF0VG9vbHRpcD1cIkFkZCBpdGVtXCJcbiAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBEaXNhYmxlZF09XCJmb3JtR3JvdXAuY29udHJvbHMubGlzdFZhbHVlLmNvbnRyb2xzLmxlbmd0aCA+PSBkYXRhLmZlYXR1cmVGbGFnTGltaXRhdGlvbnMubWF4Q29tcGFyaXNvblZhbHVlTGlzdExlbmd0aFwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IFttYXRUb29sdGlwXT1cIidNYXhpbXVtICcgKyBkYXRhLmZlYXR1cmVGbGFnTGltaXRhdGlvbnMubWF4Q29tcGFyaXNvblZhbHVlTGlzdExlbmd0aCArICcgaXRlbXMgY2FuIGJlIGFkZGVkLidcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBEaXNhYmxlZF09XCJmb3JtR3JvdXAuY29udHJvbHMubGlzdFZhbHVlLmNvbnRyb2xzLmxlbmd0aCA8IGRhdGEuZmVhdHVyZUZsYWdMaW1pdGF0aW9ucy5tYXhDb21wYXJpc29uVmFsdWVMaXN0TGVuZ3RoXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIChjbGljayk9XCJhZGQoKVwiIG1hdC1pY29uLWJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgKm5nSWY9XCIhZGF0YS5yZWFkT25seVwiIGNsYXNzPVwiYWRkLWJ0blwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImZvcm1Hcm91cC5jb250cm9scy5saXN0VmFsdWUuY29udHJvbHMubGVuZ3RoID49IGRhdGEuZmVhdHVyZUZsYWdMaW1pdGF0aW9ucy5tYXhDb21wYXJpc29uVmFsdWVMaXN0TGVuZ3RoXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uPmFkZF9jaXJjbGU8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgbWF0LWljb24tYnV0dG9uIG1hdFRvb2x0aXA9XCJSZW1vdmUgYWxsXCIgY2xhc3M9XCJncmV5LWJ1dHRvblwiICpuZ0lmPVwiIWRhdGEucmVhZE9ubHlcIlxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwicmVtb3ZlQWxsKClcIj48bWF0LWljb24+ZGVsZXRlX291dGxpbmU8L21hdC1pY29uPjwvYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8dGFibGUgbWF0LXRhYmxlIFtkYXRhU291cmNlXT1cImRhdGFTb3VyY2VcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgbWF0Q29sdW1uRGVmPVwidmFsdWVcIj5cbiAgICAgICAgICAgICAgICA8dGggbWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmIG1hdC1zb3J0LWhlYWRlcj4gQ29tcGFyaXNvbiB2YWx1ZSA8L3RoPlxuICAgICAgICAgICAgICAgIDx0ZCBtYXQtY2VsbCAqbWF0Q2VsbERlZj1cImxldCByb3c7IGxldCBpID0gaW5kZXhcIiBjbGFzcz1cInJvdyBhbGlnbi10b3Agc21hbGwtZm9ybS1maWVsZFwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidmFsdWUtZmllbGRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwib3V0bGluZVwiIHN1YnNjcmlwdFNpemluZz1cImR5bmFtaWNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgW2Zvcm1Db250cm9sXT1cInJvdy5jb250cm9scy52YWx1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiKHBhZ2luYXRvci5wYWdlSW5kZXggKiBwYWdpbmF0b3IucGFnZVNpemUgKyBpKSA9PT0gZm9jdXNJbmRleFwiIGZvY3VzIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IFtmb3JtQ29udHJvbF09XCJyb3cuY29udHJvbHMudmFsdWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIihwYWdpbmF0b3IucGFnZUluZGV4ICogcGFnaW5hdG9yLnBhZ2VTaXplICsgaSkgIT09IGZvY3VzSW5kZXhcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9XCJyb3cuY29udHJvbHMudmFsdWUuaW52YWxpZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e0Zvcm1IZWxwZXIuZ2V0RXJyb3JNZXNzYWdlKHJvdy5jb250cm9scy52YWx1ZSl9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj1cImhpbnRcIj5cbiAgICAgICAgICAgICAgICA8dGggbWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmIG1hdC1zb3J0LWhlYWRlcj4gSGludCA8L3RoPlxuICAgICAgICAgICAgICAgIDx0ZCBtYXQtY2VsbCAqbWF0Q2VsbERlZj1cImxldCByb3dcIiBjbGFzcz1cInJvdyBhbGlnbi10b3Agc21hbGwtZm9ybS1maWVsZFwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidmFsdWUtZmllbGRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwib3V0bGluZVwiIHN1YnNjcmlwdFNpemluZz1cImR5bmFtaWNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgW2Zvcm1Db250cm9sXT1cInJvdy5jb250cm9scy5oaW50XCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPVwicm93LmNvbnRyb2xzLmhpbnQuaW52YWxpZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e0Zvcm1IZWxwZXIuZ2V0RXJyb3JNZXNzYWdlKHJvdy5jb250cm9scy5oaW50KX19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj1cImFjdGlvblwiPlxuICAgICAgICAgICAgICAgIDx0aCBtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWYgbWF0LXNvcnQtaGVhZGVyPjwvdGg+XG4gICAgICAgICAgICAgICAgPHRkIG1hdC1jZWxsICptYXRDZWxsRGVmPVwibGV0IHJvd1wiIGNsYXNzPVwicm93IGFsaWduLXRvcFwiPlxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiZ3JleS1idXR0b25cIiAoY2xpY2spPVwicmVtb3ZlKHJvdylcIiBtYXQtaWNvbi1idXR0b24gdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPVwiUmVtb3ZlIGl0ZW1cIiAqbmdJZj1cIiFkYXRhLnJlYWRPbmx5XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24+ZGVsZXRlX291dGxpbmU8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8dHIgbWF0LWhlYWRlci1yb3cgKm1hdEhlYWRlclJvd0RlZj1cImRpc3BsYXllZENvbHVtbnNcIj48L3RyPlxuICAgICAgICAgICAgPHRyIG1hdC1yb3cgKm1hdFJvd0RlZj1cImxldCByb3c7IGNvbHVtbnM6IGRpc3BsYXllZENvbHVtbnM7XCI+XG4gICAgICAgICAgICA8L3RyPlxuICAgICAgICA8L3RhYmxlPlxuICAgICAgICA8ZGl2IGNsYXNzPVwic21hbGwtZm9ybS1maWVsZFwiPlxuICAgICAgICAgICAgPG1hdC1wYWdpbmF0b3IgI3BhZ2luYXRvciBzaG93Rmlyc3RMYXN0QnV0dG9ucyBbcGFnZVNpemVPcHRpb25zXT1cIls1LCAxMCwgNTAsIDEwMF1cIj48L21hdC1wYWdpbmF0b3I+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiAqbmdJZj1cInZpc3VhbGl6YXRpb25UeXBlID09PSBWaXN1YWxpemF0aW9uVHlwZS5Kc29uXCIgY2xhc3M9XCJqc29uLWZvcm1hdFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiYWN0aW9uc1wiPlxuICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICBNb2RpZnkgdGhlIGl0ZW1zIHZpYSBhIEpTT04gdGV4dC5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cIiFkYXRhLnJlYWRPbmx5XCI+XG4gICAgICAgICAgICAgICAgPGlucHV0ICNmaWxlSW5wdXQgaGlkZGVuPVwidHJ1ZVwiIHR5cGU9XCJmaWxlXCIgb25jbGljaz1cInRoaXMudmFsdWU9bnVsbFwiIChjaGFuZ2UpPVwibG9hZEZpbGUoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgIGFjY2VwdD1cIi50eHQsLmpzb25cIiAvPlxuICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIG1hdC1pY29uLWJ1dHRvbiAoY2xpY2spPVwiZmlsZUlucHV0LmNsaWNrKClcIiBjbGFzcz1cImdyZXktYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD1cIkxvYWQgZnJvbSBmaWxlICh5b3VyIHZhbHVlcyB3aWxsIGJlIG92ZXJ3cml0dGVuKVwiPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24+dXBsb2FkX2ZpbGU8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwianNvbi1lZGl0b3JcIj5cbiAgICAgICAgICAgIDxhcHAtYWNlLWVkaXRvciBbKHZhbHVlKV09XCJwbGFpblRleHRcIiAodmFsdWVDaGFuZ2UpPVwidGV4dFZhbHVlQ2hhbmdlZCgpXCJcbiAgICAgICAgICAgICAgICBbcmVhZE9ubHldPVwiZGF0YS5yZWFkT25seVwiPjwvYXBwLWFjZS1lZGl0b3I+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiAqbmdJZj1cInZpc3VhbGl6YXRpb25UeXBlID09PSBWaXN1YWxpemF0aW9uVHlwZS5Dc3ZcIiBjbGFzcz1cImNzdi1mb3JtYXRcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImFjdGlvbnNcIj5cbiAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgTW9kaWZ5IHRoZSBpdGVtcyB2aWEgYSBDU1YgKHZhbHVlcyBhbmQgaGludHMpIHRleHQuXG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCIhZGF0YS5yZWFkT25seVwiPlxuICAgICAgICAgICAgICAgIDxpbnB1dCAjZmlsZUlucHV0IGhpZGRlbj1cInRydWVcIiB0eXBlPVwiZmlsZVwiIG9uY2xpY2s9XCJ0aGlzLnZhbHVlPW51bGxcIiAoY2hhbmdlKT1cImxvYWRGaWxlKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICBhY2NlcHQ9XCIudHh0LC5jc3ZcIiAvPlxuICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIG1hdC1pY29uLWJ1dHRvbiAoY2xpY2spPVwiZmlsZUlucHV0LmNsaWNrKClcIiBjbGFzcz1cImdyZXktYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD1cIkxvYWQgZnJvbSBmaWxlICh5b3VyIHZhbHVlcyB3aWxsIGJlIG92ZXJ3cml0dGVuKVwiPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24+dXBsb2FkX2ZpbGU8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT1cIm91dGxpbmVcIiBjbGFzcz1cImVkaXRvci1jb250YWluZXIgZWRpdG9yLWNsZWFyXCIgc3Vic2NyaXB0U2l6aW5nPVwiZHluYW1pY1wiPlxuICAgICAgICAgICAgPHRleHRhcmVhIG1hdElucHV0IGF1dG9mb2N1cyBmb2N1cyByb3dzPVwiMTdcIiBjZGtUZXh0YXJlYUF1dG9zaXplIGNka0F1dG9zaXplTWluUm93cz1cIjE3XCJcbiAgICAgICAgICAgICAgICBjZGtBdXRvc2l6ZU1heFJvd3M9XCIxN1wiIFsobmdNb2RlbCldPVwicGxhaW5UZXh0XCIgKG5nTW9kZWxDaGFuZ2UpPVwidGV4dFZhbHVlQ2hhbmdlZCgpXCIgc3BlbGxjaGVjaz1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICBbcmVhZG9ubHldPVwiZGF0YS5yZWFkT25seVwiPjwvdGV4dGFyZWE+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2ICpuZ0lmPVwidmlzdWFsaXphdGlvblR5cGUgPT09IFZpc3VhbGl6YXRpb25UeXBlLkNzbFwiIGNsYXNzPVwiY3N2LWZvcm1hdFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiYWN0aW9uc1wiPlxuICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICBNb2RpZnkgdGhlIGl0ZW1zIHZpYSBhIENTViAodmFsdWVzIG9ubHkpIHRleHQuXG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCIhZGF0YS5yZWFkT25seVwiPlxuICAgICAgICAgICAgICAgIDxpbnB1dCAjZmlsZUlucHV0IGhpZGRlbj1cInRydWVcIiB0eXBlPVwiZmlsZVwiIG9uY2xpY2s9XCJ0aGlzLnZhbHVlPW51bGxcIiAoY2hhbmdlKT1cImxvYWRGaWxlKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICBhY2NlcHQ9XCIudHh0LC5jc3ZcIiAvPlxuICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIG1hdC1pY29uLWJ1dHRvbiAoY2xpY2spPVwiZmlsZUlucHV0LmNsaWNrKClcIiBjbGFzcz1cImdyZXktYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD1cIkxvYWQgZnJvbSBmaWxlICh5b3VyIHZhbHVlcyB3aWxsIGJlIG92ZXJ3cml0dGVuKVwiPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24+dXBsb2FkX2ZpbGU8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwib3V0bGluZVwiIGNsYXNzPVwiZWRpdG9yLWNvbnRhaW5lciBlZGl0b3ItY2xlYXJcIiBzdWJzY3JpcHRTaXppbmc9XCJkeW5hbWljXCI+XG4gICAgICAgICAgICA8dGV4dGFyZWEgbWF0SW5wdXQgYXV0b2ZvY3VzIGZvY3VzIHJvd3M9XCIxN1wiIGNka1RleHRhcmVhQXV0b3NpemUgY2RrQXV0b3NpemVNaW5Sb3dzPVwiMTdcIlxuICAgICAgICAgICAgICAgIGNka0F1dG9zaXplTWF4Um93cz1cIjE3XCIgWyhuZ01vZGVsKV09XCJwbGFpblRleHRcIiAobmdNb2RlbENoYW5nZSk9XCJ0ZXh0VmFsdWVDaGFuZ2VkKClcIiBzcGVsbGNoZWNrPVwiZmFsc2VcIlxuICAgICAgICAgICAgICAgIFtyZWFkb25seV09XCJkYXRhLnJlYWRPbmx5XCI+PC90ZXh0YXJlYT5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgKm5nSWY9XCJ2aXN1YWxpemF0aW9uVHlwZSAhPT0gVmlzdWFsaXphdGlvblR5cGUuVGFibGUgJiYgY29tcGFyaXNvblZhbHVlTGlzdFBhcnNlUmVzdWx0XCI+XG4gICAgICAgIDxwICpuZ0lmPVwiIWNvbXBhcmlzb25WYWx1ZUxpc3RQYXJzZVJlc3VsdC5lcnJvciAmJiBjb21wYXJpc29uVmFsdWVMaXN0UGFyc2VSZXN1bHQuY29tcGFyaXNvblZhbHVlTGlzdC5sZW5ndGhcIlxuICAgICAgICAgICAgY2xhc3M9XCJzbWFsbC1jaGlwLWlucHV0XCI+XG4gICAgICAgICAgICBQcmV2aWV3ICh7e2NvbXBhcmlzb25WYWx1ZUxpc3RQYXJzZVJlc3VsdC5jb21wYXJpc29uVmFsdWVMaXN0Lmxlbmd0aH19IGl0ZW1zKVxuICAgICAgICAgICAgPG1hdC1jaGlwLXNldD5cbiAgICAgICAgICAgICAgICA8c3BhbiAqbmdGb3I9XCJsZXQgbGlzdFZhbHVlSXRlbSBvZiBjb21wYXJpc29uVmFsdWVMaXN0UGFyc2VSZXN1bHQuY29tcGFyaXNvblZhbHVlTGlzdCB8IHNsaWNlOjA6MTBcIlxuICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09XCJsaXN0VmFsdWVJdGVtLmhpbnQgPyBsaXN0VmFsdWVJdGVtLmhpbnQgOiAnTm8gaGludCdcIiBjbGFzcz1cImNoaXAtY29udGFpbmVyXCI+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtY2hpcC1yb3c+XG4gICAgICAgICAgICAgICAgICAgICAgICB7e2xpc3RWYWx1ZUl0ZW0udmFsdWV9fVxuICAgICAgICAgICAgICAgICAgICA8L21hdC1jaGlwLXJvdz5cbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgPG1hdC1jaGlwLXJvdyAqbmdJZj1cImNvbXBhcmlzb25WYWx1ZUxpc3RQYXJzZVJlc3VsdC5jb21wYXJpc29uVmFsdWVMaXN0Lmxlbmd0aCA+IDEwXCI+XG4gICAgICAgICAgICAgICAgICAgIHt7Y29tcGFyaXNvblZhbHVlTGlzdFBhcnNlUmVzdWx0LmNvbXBhcmlzb25WYWx1ZUxpc3QubGVuZ3RoIC0gMTB9fSByZW1haW5pbmcgaXRlbXMuLi5cbiAgICAgICAgICAgICAgICA8L21hdC1jaGlwLXJvdz5cbiAgICAgICAgICAgIDwvbWF0LWNoaXAtc2V0PlxuICAgICAgICA8L3A+XG4gICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9XCJjb21wYXJpc29uVmFsdWVMaXN0UGFyc2VSZXN1bHQuZXJyb3JcIiBjbGFzcz1cImVycm9yXCI+XG4gICAgICAgICAgICA8bWF0LWljb24+d2FybmluZzwvbWF0LWljb24+XG4gICAgICAgICAgICA8c3Bhbj5Db3VsZG4ndCBwYXJzZSB5b3VyIHZhbHVlcy4gUGxlYXNlIGNoZWNrIHRoZSBmb3JtYXQuPC9zcGFuPlxuICAgICAgICA8L21hdC1lcnJvcj5cbiAgICA8L2Rpdj5cbiAgICA8bWF0LWVycm9yXG4gICAgICAgICpuZ0lmPVwiZm9ybUdyb3VwLmNvbnRyb2xzLmxpc3RWYWx1ZS50b3VjaGVkICYmIGZvcm1Hcm91cC5jb250cm9scy5saXN0VmFsdWUuaW52YWxpZCAmJiBmb3JtR3JvdXAuY29udHJvbHMubGlzdFZhbHVlLmVycm9yc1wiXG4gICAgICAgIGNsYXNzPVwiZXJyb3JcIj5cbiAgICAgICAgPG1hdC1pY29uPndhcm5pbmc8L21hdC1pY29uPlxuICAgICAgICA8c3Bhbj57e0Zvcm1IZWxwZXIuZ2V0RXJyb3JNZXNzYWdlKGZvcm1Hcm91cC5jb250cm9scy5saXN0VmFsdWUpfX08L3NwYW4+XG4gICAgPC9tYXQtZXJyb3I+XG4gICAgPG1hdC1lcnJvclxuICAgICAgICAqbmdJZj1cIiF2YWx1ZUNoYW5nZWQgJiYgZm9ybUdyb3VwLmNvbnRyb2xzLmxpc3RWYWx1ZS50b3VjaGVkICYmIGZvcm1Hcm91cC5jb250cm9scy5saXN0VmFsdWUuaW52YWxpZCAmJiAhZm9ybUdyb3VwLmNvbnRyb2xzLmxpc3RWYWx1ZS5lcnJvcnNcIlxuICAgICAgICBjbGFzcz1cImVycm9yXCI+XG4gICAgICAgIDxtYXQtaWNvbj53YXJuaW5nPC9tYXQtaWNvbj5cbiAgICAgICAgPHNwYW4+SW52YWxpZCBpdGVtcy4mbmJzcDs8L3NwYW4+XG4gICAgICAgIDxkaXY+XG4gICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBtYXQtc3Ryb2tlZC1idXR0b24gY29sb3I9XCJwcmltYXJ5XCJcbiAgICAgICAgICAgICAgICAqbmdJZj1cInZpc3VhbGl6YXRpb25UeXBlICE9PSBWaXN1YWxpemF0aW9uVHlwZS5UYWJsZSB8fCBwYWdpbmF0b3I/LmdldE51bWJlck9mUGFnZXMoKSA+IDFcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJmb2N1c0ludmFsaWQoKVwiIGNsYXNzPVwianVtcFwiPlxuICAgICAgICAgICAgICAgIEp1bXAgdG8gZml4XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9tYXQtZXJyb3I+XG48L2Rpdj5cbjxkaXYgbWF0LWRpYWxvZy1hY3Rpb25zPlxuICAgIDxidXR0b24gKm5nSWY9XCIhZGF0YS5yZWFkT25seVwiIHR5cGU9XCJidXR0b25cIiBtYXQtZmxhdC1idXR0b24gY29sb3I9XCJwcmltYXJ5XCIgKGNsaWNrKT1cInNldCgpXCI+U2V0PC9idXR0b24+XG4gICAgPGJ1dHRvbiAqbmdJZj1cIiFkYXRhLnJlYWRPbmx5XCIgdHlwZT1cImJ1dHRvblwiIG1hdC1zdHJva2VkLWJ1dHRvbiAoY2xpY2spPVwiY2xvc2UoKVwiPkNhbmNlbDwvYnV0dG9uPlxuICAgIDxidXR0b24gKm5nSWY9XCJkYXRhLnJlYWRPbmx5XCIgdHlwZT1cImJ1dHRvblwiIG1hdC1zdHJva2VkLWJ1dHRvbiBjb2xvcj1cInByaW1hcnlcIiAoY2xpY2spPVwiY2xvc2UoKVwiPkNsb3NlPC9idXR0b24+XG48L2Rpdj4iXX0=
|
|
251
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9wb3V0LWxpc3QtZWRpdG9yLWRpYWxvZy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1jb25maWdjYXQtcHVibGljYXBpLXVpL3NyYy9saWIvdjIvZmVhdHVyZS1mbGFnL2V2YWx1YXRpb24tZm9ybXVsYS90YXJnZXRpbmctcnVsZS9jb25kaXRpb25zL3VzZXItY29uZGl0aW9uL3BvcG91dC1saXN0LWVkaXRvci1kaWFsb2cvcG9wb3V0LWxpc3QtZWRpdG9yLWRpYWxvZy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1jb25maWdjYXQtcHVibGljYXBpLXVpL3NyYy9saWIvdjIvZmVhdHVyZS1mbGFnL2V2YWx1YXRpb24tZm9ybXVsYS90YXJnZXRpbmctcnVsZS9jb25kaXRpb25zL3VzZXItY29uZGl0aW9uL3BvcG91dC1saXN0LWVkaXRvci1kaWFsb2cvcG9wb3V0LWxpc3QtZWRpdG9yLWRpYWxvZy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWlCLFNBQVMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFVLFNBQVMsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFeEcsT0FBTyxFQUFnQixlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUV6RSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUU3RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNoRSxPQUFPLEVBQ0wsVUFBVSxFQUdYLE1BQU0sZ0NBQWdDLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBU3hDLElBQUssaUJBS0o7QUFMRCxXQUFLLGlCQUFpQjtJQUNwQiwyREFBUyxDQUFBO0lBQ1QseURBQVEsQ0FBQTtJQUNSLHVE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LENBQUMsQ0FBQyxDQUFDO1FBQ25DLE1BQU0sVUFBVSxHQUFHLElBQUksVUFBVSxFQUFFLENBQUM7UUFDcEMsVUFBVSxDQUFDLE1BQU0sR0FBRyxHQUFHLEVBQUU7WUFDdkIsSUFBSSxDQUFDLFNBQVMsR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQzlDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1FBQzFCLENBQUMsQ0FBQztRQUNGLFVBQVUsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDOUIsQ0FBQzsrR0FyUFUsK0JBQStCLG9IQThCaEMsZUFBZTttR0E5QmQsK0JBQStCLGdMQ2hDNUMsb3paQW9OTTs7NEZEcExPLCtCQUErQjtrQkFMM0MsU0FBUzsrQkFDRSwrQkFBK0I7OzBCQWtDdEMsTUFBTTsyQkFBQyxlQUFlO3lDQVhzQixZQUFZO3NCQUExRCxTQUFTO3VCQUFDLFdBQVcsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBZnRlclZpZXdJbml0LCBDb21wb25lbnQsIERlc3Ryb3lSZWYsIEluamVjdCwgT25Jbml0LCBWaWV3Q2hpbGQsIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgTWF0RGlhbG9nUmVmLCBNQVRfRElBTE9HX0RBVEEgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xuaW1wb3J0IHsgTWF0UGFnaW5hdG9yIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvcGFnaW5hdG9yJztcbmltcG9ydCB7IE1hdFRhYmxlRGF0YVNvdXJjZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3RhYmxlJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgdGFrZVVudGlsRGVzdHJveWVkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuaW1wb3J0IHtcbiAgRm9ybUhlbHBlciwgSUZlYXR1cmVGbGFnTGltaXRhdGlvbnMsIENvbXBhcmlzb25WYWx1ZUZvcm0sIENvbXBhcmlzb25WYWx1ZUxpc3RGb3JtLFxuICBGb3JtR2VuZXJhdG9yLCBVc2VyQ29tcGFyYXRvciwgQ29tcGFyaXNvblZhbHVlTGlzdEhlbHBlciwgQ29tcGFyaXNvblZhbHVlTGlzdFBhcnNlUmVzdWx0LFxuICBJQ29tcGFyaXNvblZhbHVlTGlzdE1vZGVsXG59IGZyb20gJy4uLy4uLy4uLy4uLy4uLy4uLy4uL2Jvb3RzdHJhcCc7XG5cbmV4cG9ydCB0eXBlIFBvcG91dExpc3RFZGl0b3JEaWFsb2dEYXRhID0ge1xuICBjb21wYXJpc29uVmFsdWVMaXN0OiBJQ29tcGFyaXNvblZhbHVlTGlzdE1vZGVsW10sXG4gIGNvbXBhcmF0b3I6IFVzZXJDb21wYXJhdG9yLFxuICBmZWF0dXJlRmxhZ0xpbWl0YXRpb25zOiBJRmVhdHVyZUZsYWdMaW1pdGF0aW9uc1xuICByZWFkT25seTogYm9vbGVhblxufTtcblxuZW51bSBWaXN1YWxpemF0aW9uVHlwZSB7XG4gIFRhYmxlID0gMCxcbiAgSnNvbiA9IDEsXG4gIENzdiA9IDIsXG4gIENzbCA9IDNcbn1cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXBwLXBvcG91dC1saXN0LWVkaXRvci1kaWFsb2cnLFxuICB0ZW1wbGF0ZVVybDogJy4vcG9wb3V0LWxpc3QtZWRpdG9yLWRpYWxvZy5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3BvcG91dC1saXN0LWVkaXRvci1kaWFsb2cuY29tcG9uZW50LnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBQb3BvdXRMaXN0RWRpdG9yRGlhbG9nQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0IHtcbiAgZGVzdHJveVJlZiA9IGluamVjdChEZXN0cm95UmVmKTtcbiAgRm9ybUhlbHBlciA9IEZvcm1IZWxwZXI7XG4gIFZpc3VhbGl6YXRpb25UeXBlID0gVmlzdWFsaXphdGlvblR5cGU7XG5cbiAgZGF0YVNvdXJjZSA9IG5ldyBNYXRUYWJsZURhdGFTb3VyY2U8Rm9ybUdyb3VwPENvbXBhcmlzb25WYWx1ZUxpc3RGb3JtPj4oW10pO1xuICBwbGFpblRleHQgPSBcIlwiO1xuICBmb3JtR3JvdXA6IEZvcm1Hcm91cDxDb21wYXJpc29uVmFsdWVGb3JtPjtcbiAgZmlsdGVyVmFsdWUgPSAnJztcbiAgdmFsdWVDaGFuZ2VkID0gZmFsc2U7XG4gIGN1cnJlbnRseUhhc0hpbnRzID0gZmFsc2U7XG5cbiAgZGlzcGxheWVkQ29sdW1ucyA9IFsndmFsdWUnLCAnaGludCcsICdhY3Rpb24nXTtcbiAgdmlzdWFsaXphdGlvblR5cGUgPSBWaXN1YWxpemF0aW9uVHlwZS5UYWJsZTtcbiAgY29tcGFyaXNvblZhbHVlTGlzdFBhcnNlUmVzdWx0OiBDb21wYXJpc29uVmFsdWVMaXN0UGFyc2VSZXN1bHQ7XG4gIHZhbHVlQ2hhbmdlU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG4gIGZvY3VzSW5kZXggPSAwO1xuXG4gIHBhZ2luYXRvcjogTWF0UGFnaW5hdG9yO1xuICBAVmlld0NoaWxkKFwicGFnaW5hdG9yXCIsIHsgc3RhdGljOiBmYWxzZSB9KSBzZXQgc2V0UGFnaW5hdG9yKHBhZ2luYXRvcjogTWF0UGFnaW5hdG9yKSB7XG4gICAgdGhpcy5wYWdpbmF0b3IgPSBwYWdpbmF0b3I7XG4gICAgaWYgKHRoaXMuZGF0YVNvdXJjZSkge1xuICAgICAgdGhpcy5kYXRhU291cmNlLnBhZ2luYXRvciA9IHRoaXMucGFnaW5hdG9yO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgZm9ybUdlbmVyYXRvcjogRm9ybUdlbmVyYXRvcixcbiAgICBwdWJsaWMgZGlhbG9nUmVmOiBNYXREaWFsb2dSZWY8UG9wb3V0TGlzdEVkaXRvckRpYWxvZ0NvbXBvbmVudD4sXG4gICAgcHJpdmF0ZSBjb21wYXJpc29uVmFsdWVMaXN0SGVscGVyOiBDb21wYXJpc29uVmFsdWVMaXN0SGVscGVyLFxuICAgIEBJbmplY3QoTUFUX0RJQUxPR19EQVRBKSBwdWJsaWMgZGF0YTogUG9wb3V0TGlzdEVkaXRvckRpYWxvZ0RhdGEpIHsgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIGNvbnN0IGNvbXBhcmlzb25WYWx1ZUxpc3QgPSB0aGlzLmRhdGEuY29tcGFyaXNvblZhbHVlTGlzdDtcbiAgICBpZiAoIWNvbXBhcmlzb25WYWx1ZUxpc3QubGVuZ3RoKSB7XG4gICAgICBjb21wYXJpc29uVmFsdWVMaXN0LnB1c2goeyB2YWx1ZTogJycgfSk7XG4gICAgfVxuXG4gICAgdGhpcy5zZXRGb3JtR3JvdXAoY29tcGFyaXNvblZhbHVlTGlzdCk7XG4gIH1cblxuICBzZXRGb3JtR3JvdXAoY29tcGFyaXNvblZhbHVlTGlzdDogSUNvbXBhcmlzb25WYWx1ZUxpc3RNb2RlbFtdKSB7XG4gICAgdGhpcy5mb3JtR3JvdXAgPSB0aGlzLmZvcm1HZW5lcmF0b3IuZ2VuZXJhdGVDb21wYXJpc29uVmFsdWVGb3JtR3JvdXAoXG4gICAgICB7IGxpc3RWYWx1ZTogY29tcGFyaXNvblZhbHVlTGlzdCB9LFxuICAgICAgdGhpcy5kYXRhLmNvbXBhcmF0b3IsIHRoaXMuZGF0YS5yZWFkT25seSwgdGhpcy5kYXRhLmZlYXR1cmVGbGFnTGltaXRhdGlvbnMpO1xuXG4gICAgaWYgKHRoaXMuZm9ybUdyb3VwLmludmFsaWQpIHtcbiAgICAgIHRoaXMuZm9ybUdyb3VwLm1hcmtBbGxBc1RvdWNoZWQoKTtcbiAgICB9XG4gICAgaWYgKHRoaXMudmFsdWVDaGFuZ2VTdWJzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMudmFsdWVDaGFuZ2VTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gICAgdGhpcy5jaGVja0hhc0hpbnRzKCk7XG4gICAgdGhpcy52YWx1ZUNoYW5nZVN1YnNjcmlwdGlvbiA9IHRoaXMuZm9ybUdyb3VwLnZhbHVlQ2hhbmdlc1xuICAgICAgLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZikpXG4gICAgICAuc3Vic2NyaWJlKHsgbmV4dDogKCkgPT4gdGhpcy5jaGVja0hhc0hpbnRzKCkgfSk7XG4gIH1cblxuICBjaGVja0hhc0hpbnRzKCkge1xuICAgIHRoaXMuY3VycmVudGx5SGFzSGludHMgPSAhIXRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzLmxpc3RWYWx1ZS5jb250cm9scy5maW5kKHIgPT4gISFyLnZhbHVlLmhpbnQpO1xuICB9XG5cbiAgc2V0RGF0YVNvdXJjZSgpIHtcbiAgICBpZiAodGhpcy5kYXRhU291cmNlKSB7XG4gICAgICB0aGlzLmRhdGFTb3VyY2UuZGF0YSA9IHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzLmxpc3RWYWx1ZS5jb250cm9scztcbiAgICAgIGlmICh0aGlzLmRhdGFTb3VyY2UucGFnaW5hdG9yKSB7XG4gICAgICAgIHRoaXMuZGF0YVNvdXJjZS5wYWdpbmF0b3IubGVuZ3RoID0gdGhpcy5kYXRhU291cmNlLmRhdGEubGVuZ3RoO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmRhdGFTb3VyY2UgPSBuZXcgTWF0VGFibGVEYXRhU291cmNlKHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzLmxpc3RWYWx1ZS5jb250cm9scyk7XG4gICAgdGhpcy5kYXRhU291cmNlLnBhZ2luYXRvciA9IHRoaXMucGFnaW5hdG9yO1xuICAgIHRoaXMuZGF0YVNvdXJjZS5maWx0ZXJQcmVkaWNhdGUgPSAocm93LCBmaWx0ZXIpID0+IFtcbiAgICAgIC8vIFwiRmlsdGVyIGF1ZGl0IGxvZyBpdGVtcyBieSBhbnkgZGV0YWlsLlwiIC0+IFRoaXMgbGlzdCBzaG91bGQgYmUga2VwdCBpbiBzeW5jIHdpdGggdGhlIEhUTUwgdGVtcGxhdGUhXG4gICAgICByb3cuY29udHJvbHMudmFsdWUudmFsdWUsXG4gICAgICByb3cuY29udHJvbHMuaGludC52YWx1ZVxuICAgIF0uc29tZSh2ID0+IHY/LnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoZmlsdGVyKSk7XG4gICAgdGhpcy5mb2N1c0luZGV4ID0gMDtcbiAgfVxuXG4gIGFwcGx5RmlsdGVyKCkge1xuICAgIHRoaXMuZGF0YVNvdXJjZS5maWx0ZXIgPSAodGhpcy5maWx0ZXJWYWx1ZSA/PyBcIlwiKS50cmltKCkudG9Mb3dlckNhc2UoKTtcblxuICAgIGlmICh0aGlzLmRhdGFTb3VyY2UucGFnaW5hdG9yKSB7XG4gICAgICB0aGlzLmZvY3VzSW5kZXggPSAwO1xuICAgICAgdGhpcy5kYXRhU291cmNlLnBhZ2luYXRvci5maXJzdFBhZ2UoKTtcbiAgICB9XG4gIH1cblxuICBhZGQoKSB7XG4gICAgaWYgKHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzLmxpc3RWYWx1ZS5jb250cm9scy5sZW5ndGggPj0gdGhpcy5kYXRhLmZlYXR1cmVGbGFnTGltaXRhdGlvbnMubWF4Q29tcGFyaXNvblZhbHVlTGlzdExlbmd0aCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuZm9ybUdlbmVyYXRvci5hZGRDb21wYXJpc29uVmFsdWVMaXN0VmFsdWVJdGVtcyhcbiAgICAgIHRoaXMuZGF0YS5jb21wYXJhdG9yLFxuICAgICAgdGhpcy5mb3JtR3JvdXAuY29udHJvbHMubGlzdFZhbHVlLFxuICAgICAgW3sgdmFsdWU6ICcnIH1dLFxuICAgICAgdGhpcy5kYXRhLmZlYXR1cmVGbGFnTGltaXRhdGlvbnMpO1xuXG4gICAgdGhpcy5zZXREYXRhU291cmNlKCk7XG4gICAgdGhpcy5maWx0ZXJWYWx1ZSA9ICcnO1xuICAgIHRoaXMuYXBwbHlGaWx0ZXIoKTtcbiAgICB0aGlzLmZvY3VzSW5kZXggPSB0aGlzLmZvcm1Hcm91cC5jb250cm9scy5saXN0VmFsdWUuY29udHJvbHMubGVuZ3RoIC0gMTtcbiAgICB0aGlzLmRhdGFTb3VyY2UucGFnaW5hdG9yLmxhc3RQYWdlKCk7XG4gIH1cblxuICByZW1vdmUocm93OiBGb3JtR3JvdXA8Q29tcGFyaXNvblZhbHVlTGlzdEZvcm0+KSB7XG4gICAgY29uc3QgaW5kZXggPSB0aGlzLmZvcm1Hcm91cC5jb250cm9scy5saXN0VmFsdWUuY29udHJvbHMuZmluZEluZGV4KGMgPT4gYy5jb250cm9scy5pbmRleC52YWx1ZSA9PT0gcm93LmNvbnRyb2xzLmluZGV4LnZhbHVlKTtcbiAgICBpZiAoaW5kZXggPT09IC0xKSB7IHJldHVybjsgfVxuICAgIHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzLmxpc3RWYWx1ZS5jb250cm9scy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgIHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzLmxpc3RWYWx1ZS51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XG4gICAgdGhpcy5mb3JtR3JvdXAuY29udHJvbHMubGlzdFZhbHVlLm1hcmtBc1RvdWNoZWQoKTtcbiAgICB0aGlzLmZvcm1Hcm91cC5jb250cm9scy5saXN0VmFsdWUubWFya0FzRGlydHkoKTtcbiAgICB0aGlzLnNldERhdGFTb3VyY2UoKTtcbiAgfVxuXG4gIHNldCgpIHtcbiAgICBpZiAodGhpcy52aXN1YWxpemF0aW9uVHlwZSAhPT0gVmlzdWFsaXphdGlvblR5cGUuVGFibGUpIHtcbiAgICAgIGlmICh0aGlzLmNvbXBhcmlzb25WYWx1ZUxpc3RQYXJzZVJlc3VsdD8uZXJyb3IpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhpcy5zZXRGb3JtR3JvdXAodGhpcy5jb21wYXJpc29uVmFsdWVMaXN0UGFyc2VSZXN1bHQuY29tcGFyaXNvblZhbHVlTGlzdCk7XG4gICAgICB0aGlzLnNldERhdGFTb3VyY2UoKTtcbiAgICAgIHRoaXMudmFsdWVDaGFuZ2VkID0gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZm9ybUdyb3VwLmludmFsaWQpIHtcbiAgICAgIHRoaXMuZm9ybUdyb3VwLm1hcmtBbGxBc1RvdWNoZWQoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmRpYWxvZ1JlZi5jbG9zZSh7IGNvbXBhcmlzb25WYWx1ZUxpc3Q6IHRoaXMuZ2V0UmF3VmFsdWUoKSB9KTtcbiAgfVxuXG4gIGNsb3NlKCkge1xuICAgIHRoaXMuZGlhbG9nUmVmLmNsb3NlKCk7XG4gIH1cblxuICByZW1vdmVBbGwoKSB7XG4gICAgdGhpcy5zZXRGb3JtR3JvdXAoW10pO1xuICAgIHRoaXMuc2V0RGF0YVNvdXJjZSgpO1xuICAgIHRoaXMuZm9jdXNJbmRleCA9IDA7XG4gICAgdGhpcy5kYXRhU291cmNlLnBhZ2luYXRvci5maXJzdFBhZ2UoKTtcbiAgfVxuXG4gIGdldFJhd1ZhbHVlKCk6IElDb21wYXJpc29uVmFsdWVMaXN0TW9kZWxbXSB7XG4gICAgcmV0dXJuIHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzLmxpc3RWYWx1ZS52YWx1ZS5tYXAodiA9PiB7IHJldHVybiB7IHZhbHVlOiB2LnZhbHVlLCBoaW50OiB2LmhpbnQgPz8gJycgfSB9KTtcbiAgfVxuXG4gIGZvY3VzSW52YWxpZCgpIHtcbiAgICBpZiAodGhpcy52aXN1YWxpemF0aW9uVHlwZSAhPT0gVmlzdWFsaXphdGlvblR5cGUuVGFibGUpIHtcbiAgICAgIHRoaXMuY2hhbmdlVmlzdWFsaXphdGlvblR5cGUoVmlzdWFsaXphdGlvblR5cGUuVGFibGUpO1xuICAgIH1cbiAgICBjb25zdCBpbnZhbGlkSW5kZXggPSB0aGlzLmZvcm1Hcm91cC5jb250cm9scy5saXN0VmFsdWUuY29udHJvbHMuZmluZEluZGV4KGMgPT4gYy5pbnZhbGlkKTtcbiAgICBpZiAoaW52YWxpZEluZGV4ICE9PSAtMSkge1xuICAgICAgdGhpcy5mb3JtR3JvdXAubWFya0FsbEFzVG91Y2hlZCgpO1xuICAgICAgdGhpcy5maWx0ZXJWYWx1ZSA9ICcnO1xuICAgICAgdGhpcy5hcHBseUZpbHRlcigpO1xuICAgICAgdGhpcy5kYXRhU291cmNlLnBhZ2luYXRvci5sZW5ndGggPSB0aGlzLmRhdGFTb3VyY2UuZGF0YS5sZW5ndGg7XG4gICAgICBjb25zdCBwYWdlTnVtYmVyID0gTWF0aC5mbG9vcihpbnZhbGlkSW5kZXggLyB0aGlzLmRhdGFTb3VyY2UucGFnaW5hdG9yLnBhZ2VTaXplKTtcbiAgICAgIHRoaXMuZm9jdXNJbmRleCA9IGludmFsaWRJbmRleDtcbiAgICAgIHRoaXMuZGF0YVNvdXJjZS5wYWdpbmF0b3IucGFnZUluZGV4ID0gcGFnZU51bWJlcjtcbiAgICAgIHRoaXMucGFnaW5hdG9yLnBhZ2UubmV4dCh7XG4gICAgICAgIHBhZ2VJbmRleDogcGFnZU51bWJlcixcbiAgICAgICAgcGFnZVNpemU6IHRoaXMucGFnaW5hdG9yLnBhZ2VTaXplLFxuICAgICAgICBsZW5ndGg6IHRoaXMucGFnaW5hdG9yLmxlbmd0aFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgY2hhbmdlVmlzdWFsaXphdGlvblR5cGUodmlzdWFsaXphdGlvblR5cGU6IFZpc3VhbGl6YXRpb25UeXBlKSB7XG4gICAgaWYgKHRoaXMudmFsdWVDaGFuZ2VkICYmIHRoaXMudmlzdWFsaXphdGlvblR5cGUgIT09IFZpc3VhbGl6YXRpb25UeXBlLlRhYmxlKSB7XG4gICAgICBpZiAodGhpcy5jb21wYXJpc29uVmFsdWVMaXN0UGFyc2VSZXN1bHQuZXJyb3IpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnNldEZvcm1Hcm91cCh0aGlzLmNvbXBhcmlzb25WYWx1ZUxpc3RQYXJzZVJlc3VsdC5jb21wYXJpc29uVmFsdWVMaXN0KTtcbiAgICAgIHRoaXMuc2V0RGF0YVNvdXJjZSgpO1xuICAgIH1cblxuICAgIHRoaXMudmlzdWFsaXphdGlvblR5cGUgPSB2aXN1YWxpemF0aW9uVHlwZTtcbiAgICB0aGlzLnZhbHVlQ2hhbmdlZCA9IGZhbHNlO1xuXG4gICAgc3dpdGNoICh2aXN1YWxpemF0aW9uVHlwZSkge1xuICAgICAgY2FzZSBWaXN1YWxpemF0aW9uVHlwZS5Kc29uOlxuICAgICAgICB0aGlzLnBsYWluVGV4dCA9IHRoaXMuY29tcGFyaXNvblZhbHVlTGlzdEhlbHBlci5mb3JtYXRWYWx1ZXNBbmRIaW50QXNKc29uKHRoaXMuZ2V0UmF3VmFsdWUoKSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBWaXN1YWxpemF0aW9uVHlwZS5Dc3Y6XG4gICAgICAgIHRoaXMucGxhaW5UZXh0ID0gdGhpcy5jb21wYXJpc29uVmFsdWVMaXN0SGVscGVyLmZvcm1hdFZhbHVlc0FuZEhpbnRBc0Nzdih0aGlzLmdldFJhd1ZhbHVlKCkpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgVmlzdWFsaXphdGlvblR5cGUuQ3NsOlxuICAgICAgICB0aGlzLnBsYWluVGV4dCA9IHRoaXMuY29tcGFyaXNvblZhbHVlTGlzdEhlbHBlci5mb3JtYXRWYWx1ZXNBc0Nzdih0aGlzLmdldFJhd1ZhbHVlKCkpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgVmlzdWFsaXphdGlvblR5cGUuVGFibGU6XG4gICAgICAgIGlmICh0aGlzLmRhdGFTb3VyY2UucGFnaW5hdG9yKSB7XG4gICAgICAgICAgdGhpcy5mb2N1c0luZGV4ID0gMDtcbiAgICAgICAgICB0aGlzLmRhdGFTb3VyY2UucGFnaW5hdG9yLmZpcnN0UGFnZSgpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgICB0aGlzLnJlY2FsY3VsYXRlKCk7XG4gIH1cblxuICB0ZXh0VmFsdWVDaGFuZ2VkKCkge1xuICAgIHRoaXMudmFsdWVDaGFuZ2VkID0gdHJ1ZTtcbiAgICB0aGlzLnJlY2FsY3VsYXRlKCk7XG4gICAgaWYgKCF0aGlzLmNvbXBhcmlzb25WYWx1ZUxpc3RQYXJzZVJlc3VsdD8uZXJyb3IpIHtcbiAgICAgIHRoaXMuc2V0Rm9ybUdyb3VwKHRoaXMuY29tcGFyaXNvblZhbHVlTGlzdFBhcnNlUmVzdWx0LmNvbXBhcmlzb25WYWx1ZUxpc3QpO1xuICAgICAgdGhpcy5zZXREYXRhU291cmNlKCk7XG4gICAgfVxuICB9XG5cbiAgcmVjYWxjdWxhdGUoKSB7XG4gICAgc3dpdGNoICh0aGlzLnZpc3VhbGl6YXRpb25UeXBlKSB7XG4gICAgICBjYXNlIFZpc3VhbGl6YXRpb25UeXBlLkpzb246XG4gICAgICAgIHRoaXMuY29tcGFyaXNvblZhbHVlTGlzdFBhcnNlUmVzdWx0ID0gdGhpcy5jb21wYXJpc29uVmFsdWVMaXN0SGVscGVyLnBhcnNlVmFsdWVzQW5kSGludHNGcm9tSnNvbih0aGlzLnBsYWluVGV4dCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBWaXN1YWxpemF0aW9uVHlwZS5Dc3Y6XG4gICAgICAgIHRoaXMuY29tcGFyaXNvblZhbHVlTGlzdFBhcnNlUmVzdWx0ID0gdGhpcy5jb21wYXJpc29uVmFsdWVMaXN0SGVscGVyLnBhcnNlVmFsdWVzQW5kSGludHNGcm9tQ3N2KHRoaXMucGxhaW5UZXh0KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFZpc3VhbGl6YXRpb25UeXBlLkNzbDpcbiAgICAgICAgdGhpcy5jb21wYXJpc29uVmFsdWVMaXN0UGFyc2VSZXN1bHQgPSB0aGlzLmNvbXBhcmlzb25WYWx1ZUxpc3RIZWxwZXIucGFyc2VWYWx1ZXNGcm9tQ3N2KHRoaXMucGxhaW5UZXh0KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aGlzLmNvbXBhcmlzb25WYWx1ZUxpc3RQYXJzZVJlc3VsdCA9IHsgY29tcGFyaXNvblZhbHVlTGlzdDogW10gfTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGlmICh0aGlzLnZpc3VhbGl6YXRpb25UeXBlICE9PSBWaXN1YWxpemF0aW9uVHlwZS5UYWJsZSAmJiAhdGhpcy5jb21wYXJpc29uVmFsdWVMaXN0UGFyc2VSZXN1bHQuZXJyb3IpIHtcbiAgICAgIHRoaXMuY3VycmVudGx5SGFzSGludHMgPSAhIXRoaXMuY29tcGFyaXNvblZhbHVlTGlzdFBhcnNlUmVzdWx0LmNvbXBhcmlzb25WYWx1ZUxpc3QuZmluZChyID0+ICEhci5oaW50KTtcbiAgICB9IGVsc2UgaWYgKHRoaXMudmlzdWFsaXphdGlvblR5cGUgIT09IFZpc3VhbGl6YXRpb25UeXBlLlRhYmxlKSB7XG4gICAgICB0aGlzLmNoZWNrSGFzSGludHMoKTtcbiAgICB9XG4gIH1cblxuICBsb2FkRmlsZShldmVudCkge1xuICAgIGNvbnN0IGZpbGUgPSBldmVudC50YXJnZXQuZmlsZXNbMF07XG4gICAgY29uc3QgZmlsZVJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XG4gICAgZmlsZVJlYWRlci5vbmxvYWQgPSAoKSA9PiB7XG4gICAgICB0aGlzLnBsYWluVGV4dCA9IGZpbGVSZWFkZXIucmVzdWx0LnRvU3RyaW5nKCk7XG4gICAgICB0aGlzLnRleHRWYWx1ZUNoYW5nZWQoKTtcbiAgICB9O1xuICAgIGZpbGVSZWFkZXIucmVhZEFzVGV4dChmaWxlKTtcbiAgfVxufVxuIiwiPGgyIG1hdC1kaWFsb2ctdGl0bGU+QWR2YW5jZWQgZWRpdG9yPC9oMj5cbjxkaXYgbWF0LWRpYWxvZy1jb250ZW50IGNsYXNzPVwiY29udGFpbmVyXCI+XG5cbiAgICA8ZGl2IGNsYXNzPVwidGFic1wiPlxuICAgICAgICA8bWF0LWJ1dHRvbi10b2dnbGUtZ3JvdXAgW25nTW9kZWxdPVwidmlzdWFsaXphdGlvblR5cGVcIiAobmdNb2RlbENoYW5nZSk9XCJjaGFuZ2VWaXN1YWxpemF0aW9uVHlwZSgkZXZlbnQpXCI+XG4gICAgICAgICAgICA8bWF0LWJ1dHRvbi10b2dnbGUgW3ZhbHVlXT1cIlZpc3VhbGl6YXRpb25UeXBlLlRhYmxlXCJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwidmlzdWFsaXphdGlvblR5cGUgIT09IFZpc3VhbGl6YXRpb25UeXBlLlRhYmxlICYmIGNvbXBhcmlzb25WYWx1ZUxpc3RQYXJzZVJlc3VsdD8uZXJyb3JcIlxuICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9XCJDYW4gbm90IHN3aXRjaCBiZXR3ZWVuIHZpZXdzIHdoaWxlIHRoZXJlIGFyZSBlcnJvcnMgaW4gdGhlIGN1cnJlbnQgdmlldy5cIlxuICAgICAgICAgICAgICAgIFttYXRUb29sdGlwRGlzYWJsZWRdPVwidmlzdWFsaXphdGlvblR5cGUgPT09IFZpc3VhbGl6YXRpb25UeXBlLlRhYmxlIHx8ICFjb21wYXJpc29uVmFsdWVMaXN0UGFyc2VSZXN1bHQ/LmVycm9yXCI+VGFibGU8L21hdC1idXR0b24tdG9nZ2xlPlxuICAgICAgICAgICAgPG1hdC1idXR0b24tdG9nZ2xlIFt2YWx1ZV09XCJWaXN1YWxpemF0aW9uVHlwZS5Kc29uXCJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwidmlzdWFsaXphdGlvblR5cGUgIT09IFZpc3VhbGl6YXRpb25UeXBlLkpzb24gJiYgY29tcGFyaXNvblZhbHVlTGlzdFBhcnNlUmVzdWx0Py5lcnJvclwiXG4gICAgICAgICAgICAgICAgbWF0VG9vbHRpcD1cIkNhbiBub3Qgc3dpdGNoIGJldHdlZW4gdmlld3Mgd2hpbGUgdGhlcmUgYXJlIGVycm9ycyBpbiB0aGUgY3VycmVudCB2aWV3LlwiXG4gICAgICAgICAgICAgICAgW21hdFRvb2x0aXBEaXNhYmxlZF09XCJ2aXN1YWxpemF0aW9uVHlwZSA9PT0gVmlzdWFsaXphdGlvblR5cGUuSnNvbiB8fCAhY29tcGFyaXNvblZhbHVlTGlzdFBhcnNlUmVzdWx0Py5lcnJvclwiPkpTT048L21hdC1idXR0b24tdG9nZ2xlPlxuICAgICAgICAgICAgPG1hdC1idXR0b24tdG9nZ2xlIFt2YWx1ZV09XCJWaXN1YWxpemF0aW9uVHlwZS5Dc3ZcIlxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJ2aXN1YWxpemF0aW9uVHlwZSAhPT0gVmlzdWFsaXphdGlvblR5cGUuQ3N2ICYmIGNvbXBhcmlzb25WYWx1ZUxpc3RQYXJzZVJlc3VsdD8uZXJyb3JcIlxuICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9XCJDYW4gbm90IHN3aXRjaCBiZXR3ZWVuIHZpZXdzIHdoaWxlIHRoZXJlIGFyZSBlcnJvcnMgaW4gdGhlIGN1cnJlbnQgdmlldy5cIlxuICAgICAgICAgICAgICAgIFttYXRUb29sdGlwRGlzYWJsZWRdPVwidmlzdWFsaXphdGlvblR5cGUgPT09IFZpc3VhbGl6YXRpb25UeXBlLkNzdiB8fCAhY29tcGFyaXNvblZhbHVlTGlzdFBhcnNlUmVzdWx0Py5lcnJvclwiPkNTVlxuICAgICAgICAgICAgICAgIHdpdGggaGludHM8L21hdC1idXR0b24tdG9nZ2xlPlxuICAgICAgICAgICAgPG1hdC1idXR0b24tdG9nZ2xlIFt2YWx1ZV09XCJWaXN1YWxpemF0aW9uVHlwZS5Dc2xcIlxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCIodmlzdWFsaXphdGlvblR5cGUgIT09IFZpc3VhbGl6YXRpb25UeXBlLkNzbCAmJiBjb21wYXJpc29uVmFsdWVMaXN0UGFyc2VSZXN1bHQ/LmVycm9yKSB8fCBjdXJyZW50bHlIYXNIaW50c1wiXG4gICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPVwiY3VycmVudGx5SGFzSGludHMgPyAnVGhlcmUgYXJlIGhpbnRzIHNldCB0byB5b3VyIHZhbHVlcyBzbyB0aGUgQ1NWIHdpdGhvdXQgaGludHMgdmlldyBpcyBub3QgYXZhaWxhYmxlJyA6ICdDYW4gbm90IHN3aXRjaCBiZXR3ZWVuIHZpZXdzIHdoaWxlIHRoZXJlIGFyZSBlcnJvcnMgaW4gdGhlIGN1cnJlbnQgdmlldy4nXCJcbiAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcERpc2FibGVkXT1cIih2aXN1YWxpemF0aW9uVHlwZSA9PT0gVmlzdWFsaXphdGlvblR5cGUuQ3NsIHx8ICFjb21wYXJpc29uVmFsdWVMaXN0UGFyc2VSZXN1bHQ/LmVycm9yKSAmJiAhY3VycmVudGx5SGFzSGludHNcIj5DU1ZcbiAgICAgICAgICAgICAgICB3aXRob3V0IGhpbnRzPC9tYXQtYnV0dG9uLXRvZ2dsZT5cbiAgICAgICAgPC9tYXQtYnV0dG9uLXRvZ2dsZS1ncm91cD5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgW2hpZGRlbl09XCJ2aXN1YWxpemF0aW9uVHlwZSAhPT0gVmlzdWFsaXphdGlvblR5cGUuVGFibGVcIiBjbGFzcz1cInRhYmxlLWZvcm1hdFwiPlxuICAgICAgICA8cCBjbGFzcz1cImRlc2NyaXB0aW9uXCI+XG4gICAgICAgICAgICBNb2RpZnkgdGhlIGl0ZW1zIHdpdGhpbiB0aGUgbGlzdCBvZiBjb21wYXJpc29uIHZhbHVlcy4gVGhlIGhpbnQgaGVscHMgeW91IGxhYmVsIHRoZSB2YWx1ZSBmb3IgZWFzaWVyXG4gICAgICAgICAgICByZWZlcmVuY2UuXG4gICAgICAgIDwvcD5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRyb2xzXCI+XG4gICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cImZpbHRlclwiIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCIgY2xhc3M9XCJzbWFsbC1mb3JtLWZpZWxkXCIgc3Vic2NyaXB0U2l6aW5nPVwiZHluYW1pY1wiPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsPkZpbHRlcjwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgWyhuZ01vZGVsKV09XCJmaWx0ZXJWYWx1ZVwiIChuZ01vZGVsQ2hhbmdlKT1cImFwcGx5RmlsdGVyKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJGaWx0ZXIgdmFsdWVzIGFuZCBoaW50cy5cIj5cbiAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29udHJvbC1idXR0b24tY29udGFpbmVyXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFkZC1idG4tY29udGFpbmVyXCIgbWF0VG9vbHRpcD1cIkFkZCBpdGVtXCJcbiAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBEaXNhYmxlZF09XCJmb3JtR3JvdXAuY29udHJvbHMubGlzdFZhbHVlLmNvbnRyb2xzLmxlbmd0aCA+PSBkYXRhLmZlYXR1cmVGbGFnTGltaXRhdGlvbnMubWF4Q29tcGFyaXNvblZhbHVlTGlzdExlbmd0aFwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IFttYXRUb29sdGlwXT1cIidNYXhpbXVtICcgKyBkYXRhLmZlYXR1cmVGbGFnTGltaXRhdGlvbnMubWF4Q29tcGFyaXNvblZhbHVlTGlzdExlbmd0aCArICcgaXRlbXMgY2FuIGJlIGFkZGVkLidcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBEaXNhYmxlZF09XCJmb3JtR3JvdXAuY29udHJvbHMubGlzdFZhbHVlLmNvbnRyb2xzLmxlbmd0aCA8IGRhdGEuZmVhdHVyZUZsYWdMaW1pdGF0aW9ucy5tYXhDb21wYXJpc29uVmFsdWVMaXN0TGVuZ3RoXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIChjbGljayk9XCJhZGQoKVwiIG1hdC1pY29uLWJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgKm5nSWY9XCIhZGF0YS5yZWFkT25seVwiIGNsYXNzPVwiYWRkLWJ0blwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImZvcm1Hcm91cC5jb250cm9scy5saXN0VmFsdWUuY29udHJvbHMubGVuZ3RoID49IGRhdGEuZmVhdHVyZUZsYWdMaW1pdGF0aW9ucy5tYXhDb21wYXJpc29uVmFsdWVMaXN0TGVuZ3RoXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uPmFkZF9jaXJjbGU8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgbWF0LWljb24tYnV0dG9uIG1hdFRvb2x0aXA9XCJSZW1vdmUgYWxsXCIgY2xhc3M9XCJncmV5LWJ1dHRvblwiICpuZ0lmPVwiIWRhdGEucmVhZE9ubHlcIlxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwicmVtb3ZlQWxsKClcIj48bWF0LWljb24+ZGVsZXRlX291dGxpbmU8L21hdC1pY29uPjwvYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8dGFibGUgbWF0LXRhYmxlIFtkYXRhU291cmNlXT1cImRhdGFTb3VyY2VcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgbWF0Q29sdW1uRGVmPVwidmFsdWVcIj5cbiAgICAgICAgICAgICAgICA8dGggbWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmIG1hdC1zb3J0LWhlYWRlcj4gQ29tcGFyaXNvbiB2YWx1ZSA8L3RoPlxuICAgICAgICAgICAgICAgIDx0ZCBtYXQtY2VsbCAqbWF0Q2VsbERlZj1cImxldCByb3c7IGxldCBpID0gaW5kZXhcIiBjbGFzcz1cInJvdyBhbGlnbi10b3Agc21hbGwtZm9ybS1maWVsZFwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidmFsdWUtZmllbGRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwib3V0bGluZVwiIHN1YnNjcmlwdFNpemluZz1cImR5bmFtaWNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgW2Zvcm1Db250cm9sXT1cInJvdy5jb250cm9scy52YWx1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiKHBhZ2luYXRvci5wYWdlSW5kZXggKiBwYWdpbmF0b3IucGFnZVNpemUgKyBpKSA9PT0gZm9jdXNJbmRleFwiIGZvY3VzIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IFtmb3JtQ29udHJvbF09XCJyb3cuY29udHJvbHMudmFsdWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIihwYWdpbmF0b3IucGFnZUluZGV4ICogcGFnaW5hdG9yLnBhZ2VTaXplICsgaSkgIT09IGZvY3VzSW5kZXhcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9XCJyb3cuY29udHJvbHMudmFsdWUuaW52YWxpZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e0Zvcm1IZWxwZXIuZ2V0RXJyb3JNZXNzYWdlKHJvdy5jb250cm9scy52YWx1ZSl9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj1cImhpbnRcIj5cbiAgICAgICAgICAgICAgICA8dGggbWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmIG1hdC1zb3J0LWhlYWRlcj4gSGludCA8L3RoPlxuICAgICAgICAgICAgICAgIDx0ZCBtYXQtY2VsbCAqbWF0Q2VsbERlZj1cImxldCByb3dcIiBjbGFzcz1cInJvdyBhbGlnbi10b3Agc21hbGwtZm9ybS1maWVsZFwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidmFsdWUtZmllbGRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwib3V0bGluZVwiIHN1YnNjcmlwdFNpemluZz1cImR5bmFtaWNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgW2Zvcm1Db250cm9sXT1cInJvdy5jb250cm9scy5oaW50XCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPVwicm93LmNvbnRyb2xzLmhpbnQuaW52YWxpZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e0Zvcm1IZWxwZXIuZ2V0RXJyb3JNZXNzYWdlKHJvdy5jb250cm9scy5oaW50KX19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj1cImFjdGlvblwiPlxuICAgICAgICAgICAgICAgIDx0aCBtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWYgbWF0LXNvcnQtaGVhZGVyPjwvdGg+XG4gICAgICAgICAgICAgICAgPHRkIG1hdC1jZWxsICptYXRDZWxsRGVmPVwibGV0IHJvd1wiIGNsYXNzPVwicm93IGFsaWduLXRvcFwiPlxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiZ3JleS1idXR0b25cIiAoY2xpY2spPVwicmVtb3ZlKHJvdylcIiBtYXQtaWNvbi1idXR0b24gdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPVwiUmVtb3ZlIGl0ZW1cIiAqbmdJZj1cIiFkYXRhLnJlYWRPbmx5XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24+ZGVsZXRlX291dGxpbmU8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8dHIgbWF0LWhlYWRlci1yb3cgKm1hdEhlYWRlclJvd0RlZj1cImRpc3BsYXllZENvbHVtbnNcIj48L3RyPlxuICAgICAgICAgICAgPHRyIG1hdC1yb3cgKm1hdFJvd0RlZj1cImxldCByb3c7IGNvbHVtbnM6IGRpc3BsYXllZENvbHVtbnM7XCI+XG4gICAgICAgICAgICA8L3RyPlxuICAgICAgICA8L3RhYmxlPlxuICAgICAgICA8ZGl2IGNsYXNzPVwic21hbGwtZm9ybS1maWVsZFwiPlxuICAgICAgICAgICAgPG1hdC1wYWdpbmF0b3IgI3BhZ2luYXRvciBzaG93Rmlyc3RMYXN0QnV0dG9ucyBbcGFnZVNpemVPcHRpb25zXT1cIls1LCAxMCwgNTAsIDEwMF1cIj48L21hdC1wYWdpbmF0b3I+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiAqbmdJZj1cInZpc3VhbGl6YXRpb25UeXBlID09PSBWaXN1YWxpemF0aW9uVHlwZS5Kc29uXCIgY2xhc3M9XCJqc29uLWZvcm1hdFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiYWN0aW9uc1wiPlxuICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICBNb2RpZnkgdGhlIGl0ZW1zIHZpYSBhIEpTT04gdGV4dC5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cIiFkYXRhLnJlYWRPbmx5XCI+XG4gICAgICAgICAgICAgICAgPGlucHV0ICNmaWxlSW5wdXQgaGlkZGVuPVwidHJ1ZVwiIHR5cGU9XCJmaWxlXCIgb25jbGljaz1cInRoaXMudmFsdWU9bnVsbFwiIChjaGFuZ2UpPVwibG9hZEZpbGUoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgIGFjY2VwdD1cIi50eHQsLmpzb25cIiAvPlxuICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIG1hdC1pY29uLWJ1dHRvbiAoY2xpY2spPVwiZmlsZUlucHV0LmNsaWNrKClcIiBjbGFzcz1cImdyZXktYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD1cIkxvYWQgZnJvbSBmaWxlICh5b3VyIHZhbHVlcyB3aWxsIGJlIG92ZXJ3cml0dGVuKVwiPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24+dXBsb2FkX2ZpbGU8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwianNvbi1lZGl0b3JcIj5cbiAgICAgICAgICAgIDxhcHAtYWNlLWVkaXRvciBbKHZhbHVlKV09XCJwbGFpblRleHRcIiAodmFsdWVDaGFuZ2UpPVwidGV4dFZhbHVlQ2hhbmdlZCgpXCJcbiAgICAgICAgICAgICAgICBbcmVhZE9ubHldPVwiZGF0YS5yZWFkT25seVwiPjwvYXBwLWFjZS1lZGl0b3I+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiAqbmdJZj1cInZpc3VhbGl6YXRpb25UeXBlID09PSBWaXN1YWxpemF0aW9uVHlwZS5Dc3ZcIiBjbGFzcz1cImNzdi1mb3JtYXRcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImFjdGlvbnNcIj5cbiAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgTW9kaWZ5IHRoZSBpdGVtcyB2aWEgYSBDU1YgKHZhbHVlcyBhbmQgaGludHMpIHRleHQuXG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCIhZGF0YS5yZWFkT25seVwiPlxuICAgICAgICAgICAgICAgIDxpbnB1dCAjZmlsZUlucHV0IGhpZGRlbj1cInRydWVcIiB0eXBlPVwiZmlsZVwiIG9uY2xpY2s9XCJ0aGlzLnZhbHVlPW51bGxcIiAoY2hhbmdlKT1cImxvYWRGaWxlKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICBhY2NlcHQ9XCIudHh0LC5jc3ZcIiAvPlxuICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIG1hdC1pY29uLWJ1dHRvbiAoY2xpY2spPVwiZmlsZUlucHV0LmNsaWNrKClcIiBjbGFzcz1cImdyZXktYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD1cIkxvYWQgZnJvbSBmaWxlICh5b3VyIHZhbHVlcyB3aWxsIGJlIG92ZXJ3cml0dGVuKVwiPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24+dXBsb2FkX2ZpbGU8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT1cIm91dGxpbmVcIiBjbGFzcz1cImVkaXRvci1jb250YWluZXIgZWRpdG9yLWNsZWFyXCIgc3Vic2NyaXB0U2l6aW5nPVwiZHluYW1pY1wiPlxuICAgICAgICAgICAgPHRleHRhcmVhIG1hdElucHV0IGF1dG9mb2N1cyBmb2N1cyByb3dzPVwiMTdcIiBjZGtUZXh0YXJlYUF1dG9zaXplIGNka0F1dG9zaXplTWluUm93cz1cIjE3XCJcbiAgICAgICAgICAgICAgICBjZGtBdXRvc2l6ZU1heFJvd3M9XCIxN1wiIFsobmdNb2RlbCldPVwicGxhaW5UZXh0XCIgKG5nTW9kZWxDaGFuZ2UpPVwidGV4dFZhbHVlQ2hhbmdlZCgpXCIgc3BlbGxjaGVjaz1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICBbcmVhZG9ubHldPVwiZGF0YS5yZWFkT25seVwiPjwvdGV4dGFyZWE+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2ICpuZ0lmPVwidmlzdWFsaXphdGlvblR5cGUgPT09IFZpc3VhbGl6YXRpb25UeXBlLkNzbFwiIGNsYXNzPVwiY3N2LWZvcm1hdFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiYWN0aW9uc1wiPlxuICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICBNb2RpZnkgdGhlIGl0ZW1zIHZpYSBhIENTViAodmFsdWVzIG9ubHkpIHRleHQuXG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCIhZGF0YS5yZWFkT25seVwiPlxuICAgICAgICAgICAgICAgIDxpbnB1dCAjZmlsZUlucHV0IGhpZGRlbj1cInRydWVcIiB0eXBlPVwiZmlsZVwiIG9uY2xpY2s9XCJ0aGlzLnZhbHVlPW51bGxcIiAoY2hhbmdlKT1cImxvYWRGaWxlKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICBhY2NlcHQ9XCIudHh0LC5jc3ZcIiAvPlxuICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIG1hdC1pY29uLWJ1dHRvbiAoY2xpY2spPVwiZmlsZUlucHV0LmNsaWNrKClcIiBjbGFzcz1cImdyZXktYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD1cIkxvYWQgZnJvbSBmaWxlICh5b3VyIHZhbHVlcyB3aWxsIGJlIG92ZXJ3cml0dGVuKVwiPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24+dXBsb2FkX2ZpbGU8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwib3V0bGluZVwiIGNsYXNzPVwiZWRpdG9yLWNvbnRhaW5lciBlZGl0b3ItY2xlYXJcIiBzdWJzY3JpcHRTaXppbmc9XCJkeW5hbWljXCI+XG4gICAgICAgICAgICA8dGV4dGFyZWEgbWF0SW5wdXQgYXV0b2ZvY3VzIGZvY3VzIHJvd3M9XCIxN1wiIGNka1RleHRhcmVhQXV0b3NpemUgY2RrQXV0b3NpemVNaW5Sb3dzPVwiMTdcIlxuICAgICAgICAgICAgICAgIGNka0F1dG9zaXplTWF4Um93cz1cIjE3XCIgWyhuZ01vZGVsKV09XCJwbGFpblRleHRcIiAobmdNb2RlbENoYW5nZSk9XCJ0ZXh0VmFsdWVDaGFuZ2VkKClcIiBzcGVsbGNoZWNrPVwiZmFsc2VcIlxuICAgICAgICAgICAgICAgIFtyZWFkb25seV09XCJkYXRhLnJlYWRPbmx5XCI+PC90ZXh0YXJlYT5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgKm5nSWY9XCJ2aXN1YWxpemF0aW9uVHlwZSAhPT0gVmlzdWFsaXphdGlvblR5cGUuVGFibGUgJiYgY29tcGFyaXNvblZhbHVlTGlzdFBhcnNlUmVzdWx0XCI+XG4gICAgICAgIDxwICpuZ0lmPVwiIWNvbXBhcmlzb25WYWx1ZUxpc3RQYXJzZVJlc3VsdC5lcnJvciAmJiBjb21wYXJpc29uVmFsdWVMaXN0UGFyc2VSZXN1bHQuY29tcGFyaXNvblZhbHVlTGlzdC5sZW5ndGhcIlxuICAgICAgICAgICAgY2xhc3M9XCJzbWFsbC1jaGlwLWlucHV0XCI+XG4gICAgICAgICAgICBQcmV2aWV3ICh7e2NvbXBhcmlzb25WYWx1ZUxpc3RQYXJzZVJlc3VsdC5jb21wYXJpc29uVmFsdWVMaXN0Lmxlbmd0aH19IGl0ZW1zKVxuICAgICAgICAgICAgPG1hdC1jaGlwLXNldD5cbiAgICAgICAgICAgICAgICA8c3BhbiAqbmdGb3I9XCJsZXQgbGlzdFZhbHVlSXRlbSBvZiBjb21wYXJpc29uVmFsdWVMaXN0UGFyc2VSZXN1bHQuY29tcGFyaXNvblZhbHVlTGlzdCB8IHNsaWNlOjA6MTBcIlxuICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09XCJsaXN0VmFsdWVJdGVtLmhpbnQgPyBsaXN0VmFsdWVJdGVtLmhpbnQgOiAnTm8gaGludCdcIiBjbGFzcz1cImNoaXAtY29udGFpbmVyXCI+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtY2hpcC1yb3c+XG4gICAgICAgICAgICAgICAgICAgICAgICB7e2xpc3RWYWx1ZUl0ZW0udmFsdWV9fVxuICAgICAgICAgICAgICAgICAgICA8L21hdC1jaGlwLXJvdz5cbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgPG1hdC1jaGlwLXJvdyAqbmdJZj1cImNvbXBhcmlzb25WYWx1ZUxpc3RQYXJzZVJlc3VsdC5jb21wYXJpc29uVmFsdWVMaXN0Lmxlbmd0aCA+IDEwXCI+XG4gICAgICAgICAgICAgICAgICAgIHt7Y29tcGFyaXNvblZhbHVlTGlzdFBhcnNlUmVzdWx0LmNvbXBhcmlzb25WYWx1ZUxpc3QubGVuZ3RoIC0gMTB9fSByZW1haW5pbmcgaXRlbXMuLi5cbiAgICAgICAgICAgICAgICA8L21hdC1jaGlwLXJvdz5cbiAgICAgICAgICAgIDwvbWF0LWNoaXAtc2V0PlxuICAgICAgICA8L3A+XG4gICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9XCJjb21wYXJpc29uVmFsdWVMaXN0UGFyc2VSZXN1bHQuZXJyb3JcIiBjbGFzcz1cImVycm9yXCI+XG4gICAgICAgICAgICA8bWF0LWljb24+d2FybmluZzwvbWF0LWljb24+XG4gICAgICAgICAgICA8c3Bhbj5Db3VsZG4ndCBwYXJzZSB5b3VyIHZhbHVlcy4gUGxlYXNlIGNoZWNrIHRoZSBmb3JtYXQuPC9zcGFuPlxuICAgICAgICA8L21hdC1lcnJvcj5cbiAgICA8L2Rpdj5cbiAgICA8bWF0LWVycm9yXG4gICAgICAgICpuZ0lmPVwiZm9ybUdyb3VwLmNvbnRyb2xzLmxpc3RWYWx1ZS50b3VjaGVkICYmIGZvcm1Hcm91cC5jb250cm9scy5saXN0VmFsdWUuaW52YWxpZCAmJiBmb3JtR3JvdXAuY29udHJvbHMubGlzdFZhbHVlLmVycm9yc1wiXG4gICAgICAgIGNsYXNzPVwiZXJyb3JcIj5cbiAgICAgICAgPG1hdC1pY29uPndhcm5pbmc8L21hdC1pY29uPlxuICAgICAgICA8c3Bhbj57e0Zvcm1IZWxwZXIuZ2V0RXJyb3JNZXNzYWdlKGZvcm1Hcm91cC5jb250cm9scy5saXN0VmFsdWUpfX08L3NwYW4+XG4gICAgPC9tYXQtZXJyb3I+XG4gICAgPG1hdC1lcnJvclxuICAgICAgICAqbmdJZj1cIiF2YWx1ZUNoYW5nZWQgJiYgZm9ybUdyb3VwLmNvbnRyb2xzLmxpc3RWYWx1ZS50b3VjaGVkICYmIGZvcm1Hcm91cC5jb250cm9scy5saXN0VmFsdWUuaW52YWxpZCAmJiAhZm9ybUdyb3VwLmNvbnRyb2xzLmxpc3RWYWx1ZS5lcnJvcnNcIlxuICAgICAgICBjbGFzcz1cImVycm9yXCI+XG4gICAgICAgIDxtYXQtaWNvbj53YXJuaW5nPC9tYXQtaWNvbj5cbiAgICAgICAgPHNwYW4+SW52YWxpZCBpdGVtcy4mbmJzcDs8L3NwYW4+XG4gICAgICAgIDxkaXY+XG4gICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBtYXQtc3Ryb2tlZC1idXR0b24gY29sb3I9XCJwcmltYXJ5XCJcbiAgICAgICAgICAgICAgICAqbmdJZj1cInZpc3VhbGl6YXRpb25UeXBlICE9PSBWaXN1YWxpemF0aW9uVHlwZS5UYWJsZSB8fCBwYWdpbmF0b3I/LmdldE51bWJlck9mUGFnZXMoKSA+IDFcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJmb2N1c0ludmFsaWQoKVwiIGNsYXNzPVwianVtcFwiPlxuICAgICAgICAgICAgICAgIEp1bXAgdG8gZml4XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9tYXQtZXJyb3I+XG48L2Rpdj5cbjxkaXYgbWF0LWRpYWxvZy1hY3Rpb25zPlxuICAgIDxidXR0b24gKm5nSWY9XCIhZGF0YS5yZWFkT25seVwiIHR5cGU9XCJidXR0b25cIiBtYXQtZmxhdC1idXR0b24gY29sb3I9XCJwcmltYXJ5XCIgKGNsaWNrKT1cInNldCgpXCI+U2V0PC9idXR0b24+XG4gICAgPGJ1dHRvbiAqbmdJZj1cIiFkYXRhLnJlYWRPbmx5XCIgdHlwZT1cImJ1dHRvblwiIG1hdC1zdHJva2VkLWJ1dHRvbiAoY2xpY2spPVwiY2xvc2UoKVwiPkNhbmNlbDwvYnV0dG9uPlxuICAgIDxidXR0b24gKm5nSWY9XCJkYXRhLnJlYWRPbmx5XCIgdHlwZT1cImJ1dHRvblwiIG1hdC1zdHJva2VkLWJ1dHRvbiBjb2xvcj1cInByaW1hcnlcIiAoY2xpY2spPVwiY2xvc2UoKVwiPkNsb3NlPC9idXR0b24+XG48L2Rpdj4iXX0=
|