@alfresco/adf-process-services-cloud 8.1.0-15042271894 → 8.1.0-15043883503

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (96) hide show
  1. package/esm2022/lib/app/components/app-details-cloud/app-details-cloud.component.mjs +4 -4
  2. package/esm2022/lib/app/components/app-list-cloud/app-list-cloud.component.mjs +4 -4
  3. package/esm2022/lib/app/services/apps-process-cloud.service.mjs +4 -4
  4. package/esm2022/lib/common/date-range-filter/date-range-filter.component.mjs +4 -4
  5. package/esm2022/lib/common/date-range-filter/date-range-filter.service.mjs +4 -4
  6. package/esm2022/lib/form/components/cloud-form-rendering.service.mjs +4 -4
  7. package/esm2022/lib/form/components/form-cloud-custom-outcomes.component.mjs +4 -4
  8. package/esm2022/lib/form/components/form-cloud.component.mjs +4 -4
  9. package/esm2022/lib/form/components/form-definition-selector-cloud.component.mjs +4 -4
  10. package/esm2022/lib/form/components/spinner/form-spinner.component.mjs +4 -4
  11. package/esm2022/lib/form/components/widgets/attach-file/attach-file-cloud-widget.component.mjs +4 -4
  12. package/esm2022/lib/form/components/widgets/attach-file/file-properties-table/file-properties-table-cloud.component.mjs +4 -4
  13. package/esm2022/lib/form/components/widgets/data-table/data-table.widget.mjs +4 -4
  14. package/esm2022/lib/form/components/widgets/date/date-cloud.widget.mjs +4 -4
  15. package/esm2022/lib/form/components/widgets/display-external-property/display-external-property.widget.mjs +4 -4
  16. package/esm2022/lib/form/components/widgets/display-rich-text/display-rich-text.widget.mjs +4 -4
  17. package/esm2022/lib/form/components/widgets/dropdown/dropdown-cloud.widget.mjs +4 -4
  18. package/esm2022/lib/form/components/widgets/file-viewer/file-viewer.widget.mjs +4 -4
  19. package/esm2022/lib/form/components/widgets/group/group-cloud.widget.mjs +4 -4
  20. package/esm2022/lib/form/components/widgets/people/people-cloud.widget.mjs +4 -4
  21. package/esm2022/lib/form/components/widgets/properties-viewer/properties-viewer-wrapper/properties-viewer-wrapper.component.mjs +4 -4
  22. package/esm2022/lib/form/components/widgets/properties-viewer/properties-viewer.widget.mjs +4 -4
  23. package/esm2022/lib/form/components/widgets/radio-buttons/radio-buttons-cloud.widget.mjs +4 -4
  24. package/esm2022/lib/form/components/widgets/upload/upload-cloud.widget.mjs +4 -4
  25. package/esm2022/lib/form/form-cloud.module.mjs +5 -5
  26. package/esm2022/lib/form/services/content-cloud-node-selector.service.mjs +4 -4
  27. package/esm2022/lib/form/services/display-mode.service.mjs +4 -4
  28. package/esm2022/lib/form/services/form-cloud.service.mjs +4 -4
  29. package/esm2022/lib/form/services/form-definition-selector-cloud.service.mjs +4 -4
  30. package/esm2022/lib/form/services/form-utils.service.mjs +4 -4
  31. package/esm2022/lib/form/services/process-cloud-content.service.mjs +4 -4
  32. package/esm2022/lib/form/services/spinner/form-cloud-spinner.service.mjs +4 -4
  33. package/esm2022/lib/group/components/group-cloud.component.mjs +4 -4
  34. package/esm2022/lib/group/group-cloud.module.mjs +5 -5
  35. package/esm2022/lib/group/services/identity-group.service.mjs +4 -4
  36. package/esm2022/lib/people/components/people-cloud.component.mjs +4 -4
  37. package/esm2022/lib/people/people-cloud.module.mjs +5 -5
  38. package/esm2022/lib/people/services/identity-user.service.mjs +4 -4
  39. package/esm2022/lib/process/process-cloud.module.mjs +5 -5
  40. package/esm2022/lib/process/process-filters/components/edit-process-filter/edit-process-filter-cloud.component.mjs +4 -4
  41. package/esm2022/lib/process/process-filters/components/process-filter-dialog/process-filter-dialog-cloud.component.mjs +4 -4
  42. package/esm2022/lib/process/process-filters/components/process-filters/process-filters-cloud.component.mjs +4 -4
  43. package/esm2022/lib/process/process-filters/process-filters-cloud.module.mjs +5 -5
  44. package/esm2022/lib/process/process-filters/services/process-filter-cloud.service.mjs +4 -4
  45. package/esm2022/lib/process/process-header/components/process-header-cloud.component.mjs +4 -4
  46. package/esm2022/lib/process/process-header/process-header-cloud.module.mjs +5 -5
  47. package/esm2022/lib/process/process-list/components/process-list-cloud.component.mjs +4 -4
  48. package/esm2022/lib/process/process-list/process-list-cloud.module.mjs +5 -5
  49. package/esm2022/lib/process/process-list/services/process-list-cloud.service.mjs +4 -4
  50. package/esm2022/lib/process/process-list/services/process-task-list-cloud.service.mjs +4 -4
  51. package/esm2022/lib/process/services/process-cloud.service.mjs +4 -4
  52. package/esm2022/lib/process/start-process/components/start-process-cloud.component.mjs +4 -4
  53. package/esm2022/lib/process/start-process/services/start-process-cloud.service.mjs +4 -4
  54. package/esm2022/lib/process-services-cloud.module.mjs +5 -5
  55. package/esm2022/lib/rich-text-editor/rich-text-editor.component.mjs +4 -4
  56. package/esm2022/lib/rich-text-editor/rich-text-editor.module.mjs +5 -5
  57. package/esm2022/lib/screen/components/screen-cloud/screen-cloud.component.mjs +4 -4
  58. package/esm2022/lib/services/base-cloud.service.mjs +4 -4
  59. package/esm2022/lib/services/local-preference-cloud.service.mjs +4 -4
  60. package/esm2022/lib/services/notification-cloud.service.mjs +4 -4
  61. package/esm2022/lib/services/screen-rendering.service.mjs +4 -4
  62. package/esm2022/lib/services/user-preference-cloud.service.mjs +4 -4
  63. package/esm2022/lib/services/variable-mapper.sevice.mjs +4 -4
  64. package/esm2022/lib/services/web-socket.service.mjs +4 -4
  65. package/esm2022/lib/task/services/task-cloud.service.mjs +4 -4
  66. package/esm2022/lib/task/task-cloud.module.mjs +5 -5
  67. package/esm2022/lib/task/task-filters/components/base-task-filters-cloud.component.mjs +4 -4
  68. package/esm2022/lib/task/task-filters/components/edit-task-filters/base-edit-task-filter-cloud.component.mjs +4 -4
  69. package/esm2022/lib/task/task-filters/components/edit-task-filters/edit-service-task-filter/edit-service-task-filter-cloud.component.mjs +4 -4
  70. package/esm2022/lib/task/task-filters/components/edit-task-filters/edit-task-filter/edit-task-filter-cloud.component.mjs +5 -7
  71. package/esm2022/lib/task/task-filters/components/service-task-filters/service-task-filters-cloud.component.mjs +4 -4
  72. package/esm2022/lib/task/task-filters/components/task-assignment-filter/task-assignment-filter.component.mjs +4 -4
  73. package/esm2022/lib/task/task-filters/components/task-filter-dialog/task-filter-dialog-cloud.component.mjs +4 -4
  74. package/esm2022/lib/task/task-filters/components/task-filters/task-filters-cloud.component.mjs +4 -4
  75. package/esm2022/lib/task/task-filters/services/service-task-filter-cloud.service.mjs +4 -4
  76. package/esm2022/lib/task/task-filters/services/task-filter-cloud.service.mjs +4 -4
  77. package/esm2022/lib/task/task-filters/task-filters-cloud.module.mjs +5 -5
  78. package/esm2022/lib/task/task-form/components/task-form-cloud/task-form-cloud.component.mjs +4 -4
  79. package/esm2022/lib/task/task-form/components/user-task-cloud/complete-task/complete-task.directive.mjs +4 -4
  80. package/esm2022/lib/task/task-form/components/user-task-cloud/user-task-cloud.component.mjs +4 -4
  81. package/esm2022/lib/task/task-form/components/user-task-cloud-buttons/claim-task/claim-task-cloud.directive.mjs +4 -4
  82. package/esm2022/lib/task/task-form/components/user-task-cloud-buttons/unclaim-task/unclaim-task-cloud.directive.mjs +4 -4
  83. package/esm2022/lib/task/task-form/components/user-task-cloud-buttons/user-task-cloud-buttons.component.mjs +4 -4
  84. package/esm2022/lib/task/task-form/task-form.module.mjs +5 -5
  85. package/esm2022/lib/task/task-header/components/task-header-cloud.component.mjs +4 -4
  86. package/esm2022/lib/task/task-header/task-header-cloud.module.mjs +5 -5
  87. package/esm2022/lib/task/task-list/components/base-task-list-cloud.component.mjs +4 -4
  88. package/esm2022/lib/task/task-list/components/service-task-list/service-task-list-cloud.component.mjs +4 -4
  89. package/esm2022/lib/task/task-list/components/task-list/task-list-cloud.component.mjs +4 -4
  90. package/esm2022/lib/task/task-list/services/service-task-list-cloud.service.mjs +4 -4
  91. package/esm2022/lib/task/task-list/services/task-list-cloud.service.mjs +4 -4
  92. package/esm2022/lib/task/task-list/task-list-cloud.module.mjs +5 -5
  93. package/fesm2022/adf-process-services-cloud.mjs +296 -298
  94. package/fesm2022/adf-process-services-cloud.mjs.map +1 -1
  95. package/lib/common/date-range-filter/date-range-filter.service.d.ts +1 -1
  96. package/package.json +4 -4
@@ -748,10 +748,10 @@ export class EditProcessFilterCloudComponent {
748
748
  }
749
749
  ];
750
750
  }
751
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: EditProcessFilterCloudComponent, deps: [{ token: i1.FormBuilder }, { token: i2.MatDialog }, { token: i3.DateAdapter }, { token: i4.UserPreferencesService }, { token: i4.TranslationService }, { token: i5.ProcessFilterCloudService }, { token: i6.AppsProcessCloudService }, { token: i7.ProcessCloudService }], target: i0.ɵɵFactoryTarget.Component }); }
752
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.1.3", type: EditProcessFilterCloudComponent, isStandalone: true, selector: "adf-cloud-edit-process-filter", inputs: { appName: "appName", role: "role", id: "id", filterProperties: "filterProperties", sortProperties: "sortProperties", actions: "actions", environmentId: "environmentId", environmentList: "environmentList", showFilterActions: "showFilterActions", showTitle: "showTitle", showProcessFilterName: "showProcessFilterName", processFilter: "processFilter" }, outputs: { filterChange: "filterChange", action: "action" }, usesOnChanges: true, ngImport: i0, template: "<mat-accordion [hideToggle]=\"isLoading\" class=\"adf-edit-process-filter\">\n <mat-expansion-panel (afterExpand)=\"onExpand()\" (closed)=\"onClose()\">\n <mat-expansion-panel-header *ngIf=\"processFilter\" id=\"adf-edit-process-filter-expansion-header\" class=\"adf-edit-process-filter-header\">\n <ng-container *ngIf=\"!isLoading; else loadingTemplate\">\n <mat-panel-title *ngIf=\"showProcessFilterName\" id=\"adf-edit-process-filter-title-id\" class=\"adf-edit-process-filter-header__title\">\n {{processFilter.name | translate}}</mat-panel-title>\n <mat-panel-description class=\"adf-edit-process-filter-header__description\" id=\"adf-edit-process-filter-sub-title-id\">\n <span *ngIf=\"showTitle\"> {{ 'ADF_CLOUD_EDIT_PROCESS_FILTER.TITLE' | translate}}</span>\n <div *ngIf=\"showFilterActions\" class=\"adf-cloud-edit-process-filter-actions\">\n <ng-container *ngIf=\"toggleFilterActions\">\n <button *ngFor=\"let filterAction of processFilterActions\"\n mat-icon-button\n [title]=\"filterAction.tooltip | translate\"\n [attr.data-automation-id]=\"'adf-filter-action-' + filterAction.actionType\"\n [disabled]=\"isDisabledAction(filterAction)\"\n (click)=\"executeFilterActions($event, filterAction)\">\n <adf-icon [value]=\"filterAction.icon\" />\n </button>\n </ng-container>\n </div>\n </mat-panel-description>\n </ng-container>\n <ng-template #loadingTemplate>\n <div class=\"adf-cloud-edit-process-filter-loading-margin\">\n <mat-spinner [diameter]=\"30\" />\n </div>\n </ng-template>\n </mat-expansion-panel-header>\n <ng-container *ngIf=\"!isLoading\">\n <form [formGroup]=\"editProcessFilterForm\" *ngIf=\"editProcessFilterForm\" class=\"adf-edit-process-filter-content\">\n <div class=\"adf-edit-process-filter-form\">\n <ng-container *ngFor=\"let processFilterProperty of processFilterProperties; trackBy: filterTracker\">\n <mat-form-field [floatLabel]=\"'auto'\" *ngIf=\"processFilterProperty.type === 'select'\" [attr.data-automation-id]=\"processFilterProperty.key\">\n <mat-label class=\"adf-edit-process-filter-content__select-label\">{{processFilterProperty.label | translate}}</mat-label>\n <mat-select\n [formControlName]=\"processFilterProperty.key\"\n [attr.data-automation-id]=\"'adf-cloud-edit-process-property-' + processFilterProperty.key\">\n <mat-option\n *ngFor=\"let propertyOption of processFilterProperty.options\"\n [value]=\"propertyOption.value\"\n [attr.data-automation-id]=\"'adf-cloud-edit-process-property-options-' + processFilterProperty.key\"\n >{{ propertyOption.label | translate }}</mat-option>\n </mat-select>\n </mat-form-field>\n <mat-form-field [floatLabel]=\"'auto'\" *ngIf=\"processFilterProperty.type === 'multi-select'\" [attr.data-automation-id]=\"processFilterProperty.key\">\n <mat-label class=\"adf-edit-process-filter-content__select-label\">{{processFilterProperty.label | translate}}</mat-label>\n <mat-select\n [formControlName]=\"processFilterProperty.key\"\n [attr.data-automation-id]=\"'adf-cloud-edit-process-property-' + processFilterProperty.key\"\n [multiple]=\"true\">\n <mat-option *ngFor=\"let propertyOption of processFilterProperty.options\" [value]=\"propertyOption.value\" [attr.data-automation-id]=\"'adf-cloud-edit-process-property-options-' + processFilterProperty.key\">\n {{ propertyOption.label | translate }}\n </mat-option>\n </mat-select>\n </mat-form-field>\n <mat-form-field [floatLabel]=\"'auto'\" *ngIf=\"processFilterProperty.type === 'text'\" [attr.data-automation-id]=\"processFilterProperty.key\">\n <mat-label class=\"adf-edit-process-filter-content__text-label\">{{processFilterProperty.label | translate}}</mat-label>\n <input matInput\n [formControlName]=\"processFilterProperty.key\"\n type=\"text\"\n [attr.data-automation-id]=\"'adf-cloud-edit-process-property-' + processFilterProperty.key\"/>\n </mat-form-field>\n <mat-form-field [floatLabel]=\"'auto'\" *ngIf=\"processFilterProperty.type === 'number'\" [attr.data-automation-id]=\"processFilterProperty.key\">\n <input matInput\n [formControlName]=\"processFilterProperty.key\"\n type=\"number\" min=\"0\"\n placeholder=\"{{processFilterProperty.label | translate}}\"\n [attr.data-automation-id]=\"'adf-cloud-edit-process-property-' + processFilterProperty.key\"/>\n </mat-form-field>\n <mat-form-field [floatLabel]=\"'auto'\" *ngIf=\"processFilterProperty.type === 'date'\" [attr.data-automation-id]=\"processFilterProperty.key\">\n <mat-label>{{processFilterProperty.label | translate}}</mat-label>\n <input\n matInput\n [formControlName]=\"processFilterProperty.key\"\n (keyup)=\"onDateChanged($any($event).target.value, processFilterProperty)\"\n (dateChange)=\"onDateChanged($event.value, processFilterProperty)\"\n [matDatepicker]=\"dateController\"\n placeholder=\"{{processFilterProperty.label | translate}}\"\n [attr.data-automation-id]=\"'adf-cloud-edit-process-property-' + processFilterProperty.key\">\n <mat-datepicker-toggle\n matSuffix [for]=\"dateController\"\n [attr.data-automation-id]=\"'adf-cloud-edit-process-property-date-toggle-' + processFilterProperty.key\" />\n <mat-datepicker #dateController [attr.data-automation-id]=\"'adf-cloud-edit-process-property-date-picker-' + processFilterProperty.key\" />\n <div class=\"adf-edit-process-filter-date-error-container\">\n <div *ngIf=\"hasError(processFilterProperty)\">\n <div class=\"adf-error-text\">{{'ADF_CLOUD_EDIT_PROCESS_FILTER.ERROR.DATE' | translate}}</div>\n <mat-icon class=\"adf-error-icon\">warning</mat-icon>\n </div>\n </div>\n </mat-form-field>\n\n <adf-cloud-date-range-filter *ngIf=\"processFilterProperty.type === 'date-range'\"\n [processFilterProperty]=\"processFilterProperty\"\n [options]=\"processFilterProperty.dateFilterOptions\"\n (dateTypeChange)=\"onDateTypeChange($event, processFilterProperty)\"\n (dateChanged)=\"onDateRangeFilterChanged($event, processFilterProperty)\" />\n <adf-cloud-people\n *ngIf=\"processFilterProperty.type === 'people'\"\n [preSelectUsers]=\"initiatorOptions\"\n [title]=\"processFilterProperty.label\"\n [validate]=\"true\"\n [appName]=\"appName\"\n [mode]=\"processFilterProperty.selectionMode\"\n (changedUsers)=\"onChangedUser($event, processFilterProperty)\" />\n </ng-container>\n </div>\n </form>\n </ng-container>\n </mat-expansion-panel>\n</mat-accordion>\n", styles: [".adf-edit-process-filter-date-error-container{position:absolute;height:20px;margin-top:12px;width:100%}.adf-edit-process-filter-date-error-container>div{display:flex;flex-flow:row;justify-content:flex-start}.adf-edit-process-filter-date-error-container .adf-error-text{padding-right:8px;height:16px;font-size:var(--theme-caption-font-size);line-height:1.33;color:var(--theme-warn-color);width:auto}.adf-edit-process-filter-date-error-container .adf-error-icon{font-size:var(--theme-subheading-2-font-size);color:var(--theme-warn-color)}.adf-cloud-edit-process-filter-loading-margin{margin-left:calc((100% - 100px)/2);margin-right:calc((100% - 100px)/2)}.adf-edit-process-filter-form{flex-flow:row wrap;display:flex;max-width:100%;place-content:stretch flex-start;align-items:stretch}.adf-edit-process-filter-form :not(:last-child){margin-right:10px}.adf-edit-process-filter-form mat-form-field,.adf-edit-process-filter-form adf-cloud-people{flex:1 1 23%;max-width:23%}@media (max-width: 599.9px){.adf-edit-process-filter-form{flex-flow:column}.adf-edit-process-filter-form :not(:last-child){margin-bottom:10px;margin-right:0}}.adf-edit-process-filter-header{height:48px}.adf-edit-process-filter-header__title{color:var(--adf-theme-foreground-text-color)}.adf-edit-process-filter-header__description{color:var(--adf-theme-foreground-secondary-text-color);place-content:center space-between}.adf-edit-process-filter-content__text-label,.adf-edit-process-filter-content__select-label{color:var(--adf-theme-foreground-secondary-text-color)}\n"], dependencies: [{ kind: "component", type: IconComponent, selector: "adf-icon", inputs: ["color", "fontSet", "value"] }, { kind: "ngmodule", type: MatProgressSpinnerModule }, { kind: "component", type: i8.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i9.TranslatePipe, name: "translate" }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i10.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "directive", type: NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: MatExpansionModule }, { kind: "directive", type: i11.MatAccordion, selector: "mat-accordion", inputs: ["hideToggle", "displayMode", "togglePosition"], exportAs: ["matAccordion"] }, { kind: "component", type: i11.MatExpansionPanel, selector: "mat-expansion-panel", inputs: ["hideToggle", "togglePosition"], outputs: ["afterExpand", "afterCollapse"], exportAs: ["matExpansionPanel"] }, { kind: "component", type: i11.MatExpansionPanelHeader, selector: "mat-expansion-panel-header", inputs: ["expandedHeight", "collapsedHeight", "tabIndex"] }, { kind: "directive", type: i11.MatExpansionPanelTitle, selector: "mat-panel-title" }, { kind: "directive", type: i11.MatExpansionPanelDescription, selector: "mat-panel-description" }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i12.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i12.MatLabel, selector: "mat-label" }, { kind: "directive", type: i12.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "ngmodule", type: MatSelectModule }, { kind: "component", type: i13.MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "component", type: i3.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.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: i1.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.MinValidator, selector: "input[type=number][min][formControlName],input[type=number][min][formControl],input[type=number][min][ngModel]", inputs: ["min"] }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i14.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: "ngmodule", type: MatDatepickerModule }, { kind: "component", type: i15.MatDatepicker, selector: "mat-datepicker", exportAs: ["matDatepicker"] }, { kind: "directive", type: i15.MatDatepickerInput, selector: "input[matDatepicker]", inputs: ["matDatepicker", "min", "max", "matDatepickerFilter"], exportAs: ["matDatepickerInput"] }, { kind: "component", type: i15.MatDatepickerToggle, selector: "mat-datepicker-toggle", inputs: ["for", "tabIndex", "aria-label", "disabled", "disableRipple"], exportAs: ["matDatepickerToggle"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i16.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: DateRangeFilterComponent, selector: "adf-cloud-date-range-filter", inputs: ["processFilterProperty", "options"], outputs: ["dateChanged", "dateTypeChange"] }, { kind: "component", type: PeopleCloudComponent, selector: "adf-cloud-people", inputs: ["appName", "mode", "roles", "validate", "readOnly", "required", "preSelectUsers", "excludedUsers", "groupsRestriction", "userChipsCtrl", "searchUserCtrl", "title", "placeholder", "hideInputOnSingleSelection", "formFieldAppearance", "formFieldSubscriptSizing", "showErrors", "showFullNameOnHover"], outputs: ["selectUser", "removeUser", "changedUsers", "warning"] }], encapsulation: i0.ViewEncapsulation.None }); }
751
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: EditProcessFilterCloudComponent, deps: [{ token: i1.FormBuilder }, { token: i2.MatDialog }, { token: i3.DateAdapter }, { token: i4.UserPreferencesService }, { token: i4.TranslationService }, { token: i5.ProcessFilterCloudService }, { token: i6.AppsProcessCloudService }, { token: i7.ProcessCloudService }], target: i0.ɵɵFactoryTarget.Component }); }
752
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: EditProcessFilterCloudComponent, isStandalone: true, selector: "adf-cloud-edit-process-filter", inputs: { appName: "appName", role: "role", id: "id", filterProperties: "filterProperties", sortProperties: "sortProperties", actions: "actions", environmentId: "environmentId", environmentList: "environmentList", showFilterActions: "showFilterActions", showTitle: "showTitle", showProcessFilterName: "showProcessFilterName", processFilter: "processFilter" }, outputs: { filterChange: "filterChange", action: "action" }, usesOnChanges: true, ngImport: i0, template: "<mat-accordion [hideToggle]=\"isLoading\" class=\"adf-edit-process-filter\">\n <mat-expansion-panel (afterExpand)=\"onExpand()\" (closed)=\"onClose()\">\n <mat-expansion-panel-header *ngIf=\"processFilter\" id=\"adf-edit-process-filter-expansion-header\" class=\"adf-edit-process-filter-header\">\n <ng-container *ngIf=\"!isLoading; else loadingTemplate\">\n <mat-panel-title *ngIf=\"showProcessFilterName\" id=\"adf-edit-process-filter-title-id\" class=\"adf-edit-process-filter-header__title\">\n {{processFilter.name | translate}}</mat-panel-title>\n <mat-panel-description class=\"adf-edit-process-filter-header__description\" id=\"adf-edit-process-filter-sub-title-id\">\n <span *ngIf=\"showTitle\"> {{ 'ADF_CLOUD_EDIT_PROCESS_FILTER.TITLE' | translate}}</span>\n <div *ngIf=\"showFilterActions\" class=\"adf-cloud-edit-process-filter-actions\">\n <ng-container *ngIf=\"toggleFilterActions\">\n <button *ngFor=\"let filterAction of processFilterActions\"\n mat-icon-button\n [title]=\"filterAction.tooltip | translate\"\n [attr.data-automation-id]=\"'adf-filter-action-' + filterAction.actionType\"\n [disabled]=\"isDisabledAction(filterAction)\"\n (click)=\"executeFilterActions($event, filterAction)\">\n <adf-icon [value]=\"filterAction.icon\" />\n </button>\n </ng-container>\n </div>\n </mat-panel-description>\n </ng-container>\n <ng-template #loadingTemplate>\n <div class=\"adf-cloud-edit-process-filter-loading-margin\">\n <mat-spinner [diameter]=\"30\" />\n </div>\n </ng-template>\n </mat-expansion-panel-header>\n <ng-container *ngIf=\"!isLoading\">\n <form [formGroup]=\"editProcessFilterForm\" *ngIf=\"editProcessFilterForm\" class=\"adf-edit-process-filter-content\">\n <div class=\"adf-edit-process-filter-form\">\n <ng-container *ngFor=\"let processFilterProperty of processFilterProperties; trackBy: filterTracker\">\n <mat-form-field [floatLabel]=\"'auto'\" *ngIf=\"processFilterProperty.type === 'select'\" [attr.data-automation-id]=\"processFilterProperty.key\">\n <mat-label class=\"adf-edit-process-filter-content__select-label\">{{processFilterProperty.label | translate}}</mat-label>\n <mat-select\n [formControlName]=\"processFilterProperty.key\"\n [attr.data-automation-id]=\"'adf-cloud-edit-process-property-' + processFilterProperty.key\">\n <mat-option\n *ngFor=\"let propertyOption of processFilterProperty.options\"\n [value]=\"propertyOption.value\"\n [attr.data-automation-id]=\"'adf-cloud-edit-process-property-options-' + processFilterProperty.key\"\n >{{ propertyOption.label | translate }}</mat-option>\n </mat-select>\n </mat-form-field>\n <mat-form-field [floatLabel]=\"'auto'\" *ngIf=\"processFilterProperty.type === 'multi-select'\" [attr.data-automation-id]=\"processFilterProperty.key\">\n <mat-label class=\"adf-edit-process-filter-content__select-label\">{{processFilterProperty.label | translate}}</mat-label>\n <mat-select\n [formControlName]=\"processFilterProperty.key\"\n [attr.data-automation-id]=\"'adf-cloud-edit-process-property-' + processFilterProperty.key\"\n [multiple]=\"true\">\n <mat-option *ngFor=\"let propertyOption of processFilterProperty.options\" [value]=\"propertyOption.value\" [attr.data-automation-id]=\"'adf-cloud-edit-process-property-options-' + processFilterProperty.key\">\n {{ propertyOption.label | translate }}\n </mat-option>\n </mat-select>\n </mat-form-field>\n <mat-form-field [floatLabel]=\"'auto'\" *ngIf=\"processFilterProperty.type === 'text'\" [attr.data-automation-id]=\"processFilterProperty.key\">\n <mat-label class=\"adf-edit-process-filter-content__text-label\">{{processFilterProperty.label | translate}}</mat-label>\n <input matInput\n [formControlName]=\"processFilterProperty.key\"\n type=\"text\"\n [attr.data-automation-id]=\"'adf-cloud-edit-process-property-' + processFilterProperty.key\"/>\n </mat-form-field>\n <mat-form-field [floatLabel]=\"'auto'\" *ngIf=\"processFilterProperty.type === 'number'\" [attr.data-automation-id]=\"processFilterProperty.key\">\n <input matInput\n [formControlName]=\"processFilterProperty.key\"\n type=\"number\" min=\"0\"\n placeholder=\"{{processFilterProperty.label | translate}}\"\n [attr.data-automation-id]=\"'adf-cloud-edit-process-property-' + processFilterProperty.key\"/>\n </mat-form-field>\n <mat-form-field [floatLabel]=\"'auto'\" *ngIf=\"processFilterProperty.type === 'date'\" [attr.data-automation-id]=\"processFilterProperty.key\">\n <mat-label>{{processFilterProperty.label | translate}}</mat-label>\n <input\n matInput\n [formControlName]=\"processFilterProperty.key\"\n (keyup)=\"onDateChanged($any($event).target.value, processFilterProperty)\"\n (dateChange)=\"onDateChanged($event.value, processFilterProperty)\"\n [matDatepicker]=\"dateController\"\n placeholder=\"{{processFilterProperty.label | translate}}\"\n [attr.data-automation-id]=\"'adf-cloud-edit-process-property-' + processFilterProperty.key\">\n <mat-datepicker-toggle\n matSuffix [for]=\"dateController\"\n [attr.data-automation-id]=\"'adf-cloud-edit-process-property-date-toggle-' + processFilterProperty.key\" />\n <mat-datepicker #dateController [attr.data-automation-id]=\"'adf-cloud-edit-process-property-date-picker-' + processFilterProperty.key\" />\n <div class=\"adf-edit-process-filter-date-error-container\">\n <div *ngIf=\"hasError(processFilterProperty)\">\n <div class=\"adf-error-text\">{{'ADF_CLOUD_EDIT_PROCESS_FILTER.ERROR.DATE' | translate}}</div>\n <mat-icon class=\"adf-error-icon\">warning</mat-icon>\n </div>\n </div>\n </mat-form-field>\n\n <adf-cloud-date-range-filter *ngIf=\"processFilterProperty.type === 'date-range'\"\n [processFilterProperty]=\"processFilterProperty\"\n [options]=\"processFilterProperty.dateFilterOptions\"\n (dateTypeChange)=\"onDateTypeChange($event, processFilterProperty)\"\n (dateChanged)=\"onDateRangeFilterChanged($event, processFilterProperty)\" />\n <adf-cloud-people\n *ngIf=\"processFilterProperty.type === 'people'\"\n [preSelectUsers]=\"initiatorOptions\"\n [title]=\"processFilterProperty.label\"\n [validate]=\"true\"\n [appName]=\"appName\"\n [mode]=\"processFilterProperty.selectionMode\"\n (changedUsers)=\"onChangedUser($event, processFilterProperty)\" />\n </ng-container>\n </div>\n </form>\n </ng-container>\n </mat-expansion-panel>\n</mat-accordion>\n", styles: [".adf-edit-process-filter-date-error-container{position:absolute;height:20px;margin-top:12px;width:100%}.adf-edit-process-filter-date-error-container>div{display:flex;flex-flow:row;justify-content:flex-start}.adf-edit-process-filter-date-error-container .adf-error-text{padding-right:8px;height:16px;font-size:var(--theme-caption-font-size);line-height:1.33;color:var(--theme-warn-color);width:auto}.adf-edit-process-filter-date-error-container .adf-error-icon{font-size:var(--theme-subheading-2-font-size);color:var(--theme-warn-color)}.adf-cloud-edit-process-filter-loading-margin{margin-left:calc((100% - 100px)/2);margin-right:calc((100% - 100px)/2)}.adf-edit-process-filter-form{flex-flow:row wrap;display:flex;max-width:100%;place-content:stretch flex-start;align-items:stretch}.adf-edit-process-filter-form :not(:last-child){margin-right:10px}.adf-edit-process-filter-form mat-form-field,.adf-edit-process-filter-form adf-cloud-people{flex:1 1 23%;max-width:23%}@media (max-width: 599.9px){.adf-edit-process-filter-form{flex-flow:column}.adf-edit-process-filter-form :not(:last-child){margin-bottom:10px;margin-right:0}}.adf-edit-process-filter-header{height:48px}.adf-edit-process-filter-header__title{color:var(--adf-theme-foreground-text-color)}.adf-edit-process-filter-header__description{color:var(--adf-theme-foreground-secondary-text-color);place-content:center space-between}.adf-edit-process-filter-content__text-label,.adf-edit-process-filter-content__select-label{color:var(--adf-theme-foreground-secondary-text-color)}\n"], dependencies: [{ kind: "component", type: IconComponent, selector: "adf-icon", inputs: ["color", "fontSet", "value"] }, { kind: "ngmodule", type: MatProgressSpinnerModule }, { kind: "component", type: i8.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i9.TranslatePipe, name: "translate" }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i10.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "directive", type: NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: MatExpansionModule }, { kind: "directive", type: i11.MatAccordion, selector: "mat-accordion", inputs: ["hideToggle", "displayMode", "togglePosition"], exportAs: ["matAccordion"] }, { kind: "component", type: i11.MatExpansionPanel, selector: "mat-expansion-panel", inputs: ["hideToggle", "togglePosition"], outputs: ["afterExpand", "afterCollapse"], exportAs: ["matExpansionPanel"] }, { kind: "component", type: i11.MatExpansionPanelHeader, selector: "mat-expansion-panel-header", inputs: ["expandedHeight", "collapsedHeight", "tabIndex"] }, { kind: "directive", type: i11.MatExpansionPanelTitle, selector: "mat-panel-title" }, { kind: "directive", type: i11.MatExpansionPanelDescription, selector: "mat-panel-description" }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i12.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i12.MatLabel, selector: "mat-label" }, { kind: "directive", type: i12.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "ngmodule", type: MatSelectModule }, { kind: "component", type: i13.MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "component", type: i3.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.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: i1.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.MinValidator, selector: "input[type=number][min][formControlName],input[type=number][min][formControl],input[type=number][min][ngModel]", inputs: ["min"] }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i14.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: "ngmodule", type: MatDatepickerModule }, { kind: "component", type: i15.MatDatepicker, selector: "mat-datepicker", exportAs: ["matDatepicker"] }, { kind: "directive", type: i15.MatDatepickerInput, selector: "input[matDatepicker]", inputs: ["matDatepicker", "min", "max", "matDatepickerFilter"], exportAs: ["matDatepickerInput"] }, { kind: "component", type: i15.MatDatepickerToggle, selector: "mat-datepicker-toggle", inputs: ["for", "tabIndex", "aria-label", "disabled", "disableRipple"], exportAs: ["matDatepickerToggle"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i16.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: DateRangeFilterComponent, selector: "adf-cloud-date-range-filter", inputs: ["processFilterProperty", "options"], outputs: ["dateChanged", "dateTypeChange"] }, { kind: "component", type: PeopleCloudComponent, selector: "adf-cloud-people", inputs: ["appName", "mode", "roles", "validate", "readOnly", "required", "preSelectUsers", "excludedUsers", "groupsRestriction", "userChipsCtrl", "searchUserCtrl", "title", "placeholder", "hideInputOnSingleSelection", "formFieldAppearance", "formFieldSubscriptSizing", "showErrors", "showFullNameOnHover"], outputs: ["selectUser", "removeUser", "changedUsers", "warning"] }], encapsulation: i0.ViewEncapsulation.None }); }
753
753
  }
754
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: EditProcessFilterCloudComponent, decorators: [{
754
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: EditProcessFilterCloudComponent, decorators: [{
755
755
  type: Component,
756
756
  args: [{ selector: 'adf-cloud-edit-process-filter', standalone: true, imports: [
757
757
  IconComponent,
@@ -799,4 +799,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.3", ngImpor
799
799
  }], processFilter: [{
800
800
  type: Input
801
801
  }] } });
802
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWRpdC1wcm9jZXNzLWZpbHRlci1jbG91ZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWIvcHJvY2Vzcy1zZXJ2aWNlcy1jbG91ZC9zcmMvbGliL3Byb2Nlc3MvcHJvY2Vzcy1maWx0ZXJzL2NvbXBvbmVudHMvZWRpdC1wcm9jZXNzLWZpbHRlci9lZGl0LXByb2Nlc3MtZmlsdGVyLWNsb3VkLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYi9wcm9jZXNzLXNlcnZpY2VzLWNsb3VkL3NyYy9saWIvcHJvY2Vzcy9wcm9jZXNzLWZpbHRlcnMvY29tcG9uZW50cy9lZGl0LXByb2Nlc3MtZmlsdGVyL2VkaXQtcHJvY2Vzcy1maWx0ZXItY2xvdWQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQXFCLE1BQU0sRUFBaUIsaUJBQWlCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDaEosT0FBTyxFQUFtQixXQUFXLEVBQTBCLG1CQUFtQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0csT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3JELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRWhGLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLHFEQUFxRCxDQUFDO0FBQzlGLE9BQU8sRUFFSCx1QkFBdUIsRUFJMUIsTUFBTSx5Q0FBeUMsQ0FBQztBQUNqRCxPQUFPLEVBQUUsWUFBWSxFQUFF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c0JBREQsS0FBSztnQkFLTixnQkFBZ0I7c0JBRGYsS0FBSztnQkFLTixjQUFjO3NCQURiLEtBQUs7Z0JBS04sT0FBTztzQkFETixLQUFLO2dCQUtOLGFBQWE7c0JBRFosS0FBSztnQkFLTixlQUFlO3NCQURkLEtBQUs7Z0JBS04saUJBQWlCO3NCQURoQixLQUFLO2dCQUtOLFNBQVM7c0JBRFIsS0FBSztnQkFLTixxQkFBcUI7c0JBRHBCLEtBQUs7Z0JBS04sWUFBWTtzQkFEWCxNQUFNO2dCQUtQLE1BQU07c0JBREwsTUFBTTtnQkFZSCxhQUFhO3NCQURoQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiLyohXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IMKpIDIwMDUtMjAyNSBIeWxhbmQgU29mdHdhcmUsIEluYy4gYW5kIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG5pbXBvcnQgeyBDb21wb25lbnQsIERlc3Ryb3lSZWYsIEV2ZW50RW1pdHRlciwgaW5qZWN0LCBJbnB1dCwgT25DaGFuZ2VzLCBPbkluaXQsIE91dHB1dCwgU2ltcGxlQ2hhbmdlcywgVmlld0VuY2Fwc3VsYXRpb24gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFic3RyYWN0Q29udHJvbCwgRm9ybUJ1aWxkZXIsIEZvcm1Db250cm9sLCBGb3JtR3JvdXAsIFJlYWN0aXZlRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBEYXRlQWRhcHRlciB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2NvcmUnO1xuaW1wb3J0IHsgTWF0RGlhbG9nIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcbmltcG9ydCB7IGRlYm91bmNlVGltZSwgZmlsdGVyLCBmaW5hbGl6ZSwgc3dpdGNoTWFwLCB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEFwcHNQcm9jZXNzQ2xvdWRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vLi4vYXBwL3NlcnZpY2VzL2FwcHMtcHJvY2Vzcy1jbG91ZC5zZXJ2aWNlJztcbmltcG9ydCB7XG4gICAgUHJvY2Vzc0ZpbHRlckFjdGlvbixcbiAgICBQcm9jZXNzRmlsdGVyQ2xvdWRNb2RlbCxcbiAgICBQcm9jZXNzRmlsdGVyT3B0aW9ucyxcbiAgICBQcm9jZXNzRmlsdGVyUHJvcGVydGllcyxcbiAgICBQcm9jZXNzU29ydEZpbHRlclByb3BlcnR5XG59IGZyb20gJy4uLy4uL21vZGVscy9wcm9jZXNzLWZpbHRlci1jbG91ZC5tb2RlbCc7XG5pbXBvcnQgeyBEYXRlRm5zVXRpbHMsIEljb25Db21wb25lbnQsIFRyYW5zbGF0aW9uU2VydmljZSwgVXNlclByZWZlcmVuY2VzU2VydmljZSwgVXNlclByZWZlcmVuY2VWYWx1ZXMgfSBmcm9tICdAYWxmcmVzY28vYWRmLWNvcmUnO1xuaW1wb3J0IHsgUHJvY2Vzc0ZpbHRlckNsb3VkU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3Byb2Nlc3MtZmlsdGVyLWNsb3VkLnNlcnZpY2UnO1xuaW1wb3J0IHsgUHJvY2Vzc0ZpbHRlckRpYWxvZ0Nsb3VkQ29tcG9uZW50IH0gZnJvbSAnLi4vcHJvY2Vzcy1maWx0ZXItZGlhbG9nL3Byb2Nlc3MtZmlsdGVyLWRpYWxvZy1jbG91ZC5jb21wb25lbnQnO1xuaW1wb3J0IHsgUHJvY2Vzc0Nsb3VkU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL3Byb2Nlc3MtY2xvdWQuc2VydmljZSc7XG5pbXBvcnQgeyBEYXRlQ2xvdWRGaWx0ZXJUeXBlLCBEYXRlUmFuZ2VGaWx0ZXIgfSBmcm9tICcuLi8uLi8uLi8uLi9tb2RlbHMvZGF0ZS1jbG91ZC1maWx0ZXIubW9kZWwnO1xuaW1wb3J0IHsgSWRlbnRpdHlVc2VyTW9kZWwgfSBmcm9tICcuLi8uLi8uLi8uLi9wZW9wbGUvbW9kZWxzL2lkZW50aXR5LXVzZXIubW9kZWwnO1xuaW1wb3J0IHsgRW52aXJvbm1lbnQgfSBmcm9tICcuLi8uLi8uLi8uLi9jb21tb24vaW50ZXJmYWNlL2Vudmlyb25tZW50LmludGVyZmFjZSc7XG5pbXBvcnQgeyBlbmRPZkRheSwgaXNWYWxpZCwgc3RhcnRPZkRheSB9IGZyb20gJ2RhdGUtZm5zJztcbmltcG9ydCB7IHRha2VVbnRpbERlc3Ryb3llZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcbmltcG9ydCB7IE1hdFByb2dyZXNzU3Bpbm5lck1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3Byb2dyZXNzLXNwaW5uZXInO1xuaW1wb3J0IHsgVHJhbnNsYXRlTW9kdWxlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyBNYXRCdXR0b25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9idXR0b24nO1xuaW1wb3J0IHsgTmdGb3JPZiwgTmdJZiB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBNYXRFeHBhbnNpb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9leHBhbnNpb24nO1xuaW1wb3J0IHsgTWF0Rm9ybUZpZWxkTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZm9ybS1maWVsZCc7XG5pbXBvcnQgeyBNYXRTZWxlY3RNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zZWxlY3QnO1xuaW1wb3J0IHsgTWF0SW5wdXRNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pbnB1dCc7XG5pbXBvcnQgeyBNYXREYXRlcGlja2VyTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGF0ZXBpY2tlcic7XG5pbXBvcnQgeyBNYXRJY29uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaWNvbic7XG5pbXBvcnQgeyBEYXRlUmFuZ2VGaWx0ZXJDb21wb25lbnQgfSBmcm9tICcuLi8uLi8uLi8uLi9jb21tb24vZGF0ZS1yYW5nZS1maWx0ZXIvZGF0ZS1yYW5nZS1maWx0ZXIuY29tcG9uZW50JztcbmltcG9ydCB7IFBlb3BsZUNsb3VkQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vLi4vcGVvcGxlL2NvbXBvbmVudHMvcGVvcGxlLWNsb3VkLmNvbXBvbmVudCc7XG5cbmV4cG9ydCBjb25zdCBQUk9DRVNTX0ZJTFRFUl9BQ1RJT05fU0FWRSA9ICdzYXZlJztcbmV4cG9ydCBjb25zdCBQUk9DRVNTX0ZJTFRFUl9BQ1RJT05fU0FWRV9BUyA9ICdzYXZlQXMnO1xuZXhwb3J0IGNvbnN0IFBST0NFU1NfRklMVEVSX0FDVElPTl9ERUxFVEUgPSAnZGVsZXRlJztcbmV4cG9ydCBjb25zdCBQUk9DRVNTX0ZJTFRFUl9BQ1RJT05fU0FWRV9ERUZBVUxUID0gJ3NhdmVEZWZhdWx0RmlsdGVyJztcbmV4cG9ydCBjb25zdCBQUk9DRVNTX0ZJTFRFUl9BQ1RJT05fUkVTVE9SRSA9ICdyZXN0b3JlRGVmYXVsdEZpbHRlcic7XG5jb25zdCBERUZBVUxUX1BST0NFU1NfRklMVEVSX1BST1BFUlRJRVMgPSBbJ3N0YXR1cycsICdzb3J0JywgJ29yZGVyJywgJ2xhc3RNb2RpZmllZCddO1xuY29uc3QgREVGQVVMVF9TT1JUX1BST1BFUlRJRVMgPSBbJ2lkJywgJ25hbWUnLCAnc3RhdHVzJywgJ3N0YXJ0RGF0ZSddO1xuY29uc3QgREVGQVVMVF9BQ1RJT05TID0gWydzYXZlJywgJ3NhdmVBcycsICdkZWxldGUnXTtcblxuZXhwb3J0IGludGVyZmFjZSBEcm9wZG93bk9wdGlvbiB7XG4gICAgdmFsdWU6IHN0cmluZztcbiAgICBsYWJlbDogc3RyaW5nO1xufVxuXG5pbnRlcmZhY2UgUHJvY2Vzc0ZpbHRlckZvcm1Qcm9wcyB7XG4gICAgYXBwTmFtZT86IEZvcm1Db250cm9sPHN0cmluZz47XG4gICAgYXBwVmVyc2lvbj86IEZvcm1Db250cm9sPG51bWJlciB8IG51bWJlcltdPjtcbiAgICBwcm9jZXNzRGVmaW5pdGlvbk5hbWU/OiBGb3JtQ29udHJvbDxzdHJpbmc+O1xuICAgIGxhc3RNb2RpZmllZEZyb20/OiBGb3JtQ29udHJvbDxEYXRlPjtcbiAgICBsYXN0TW9kaWZpZWRUbz86IEZvcm1Db250cm9sPERhdGU+O1xuICAgIHN0YXR1cz86IEZvcm1Db250cm9sPHN0cmluZz47XG4gICAgb3JkZXI/OiBGb3JtQ29udHJvbDxzdHJpbmc+O1xuICAgIHNvcnQ/OiBGb3JtQ29udHJvbDxzdHJpbmc+O1xuICAgIGNvbXBsZXRlZERhdGVUeXBlPzogRm9ybUNvbnRyb2w8RGF0ZUNsb3VkRmlsdGVyVHlwZT47XG4gICAgW3g6IHN0cmluZ106IEZvcm1Db250cm9sPHVua25vd24+O1xufVxuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2FkZi1jbG91ZC1lZGl0LXByb2Nlc3MtZmlsdGVyJyxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIGltcG9ydHM6IFtcbiAgICAgICAgSWNvbkNvbXBvbmVudCxcbiAgICAgICAgTWF0UHJvZ3Jlc3NTcGlubmVyTW9kdWxlLFxuICAgICAgICBUcmFuc2xhdGVNb2R1bGUsXG4gICAgICAgIE1hdEJ1dHRvbk1vZHVsZSxcbiAgICAgICAgTmdGb3JPZixcbiAgICAgICAgTmdJZixcbiAgICAgICAgTWF0RXhwYW5zaW9uTW9kdWxlLFxuICAgICAgICBNYXRGb3JtRmllbGRNb2R1bGUsXG4gICAgICAgIE1hdFNlbGVjdE1vZHVsZSxcbiAgICAgICAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcbiAgICAgICAgTWF0SW5wdXRNb2R1bGUsXG4gICAgICAgIE1hdERhdGVwaWNrZXJNb2R1bGUsXG4gICAgICAgIE1hdEljb25Nb2R1bGUsXG4gICAgICAgIERhdGVSYW5nZUZpbHRlckNvbXBvbmVudCxcbiAgICAgICAgUGVvcGxlQ2xvdWRDb21wb25lbnRcbiAgICBdLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9lZGl0LXByb2Nlc3MtZmlsdGVyLWNsb3VkLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9lZGl0LXByb2Nlc3MtZmlsdGVyLWNsb3VkLmNvbXBvbmVudC5zY3NzJ10sXG4gICAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZVxufSlcbmV4cG9ydCBjbGFzcyBFZGl0UHJvY2Vzc0ZpbHRlckNsb3VkQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMge1xuICAgIC8qKiBUaGUgbmFtZSBvZiB0aGUgYXBwbGljYXRpb24uICovXG4gICAgQElucHV0KClcbiAgICBhcHBOYW1lOiBzdHJpbmcgPSAnJztcblxuICAgIC8qKiByb2xlcyB0byBmaWx0ZXIgdGhlIGFwcHMgKi9cbiAgICBASW5wdXQoKVxuICAgIHJvbGU6IHN0cmluZyA9ICcnO1xuXG4gICAgLyoqIElkIG9mIHRoZSBwcm9jZXNzIGluc3RhbmNlIGZpbHRlci4gKi9cbiAgICBASW5wdXQoKVxuICAgIGlkOiBzdHJpbmc7XG5cbiAgICAvKiogTGlzdCBvZiBwcm9jZXNzIGZpbHRlciBwcm9wZXJ0aWVzIHRvIGRpc3BsYXkgKi9cbiAgICBASW5wdXQoKVxuICAgIGZpbHRlclByb3BlcnRpZXMgPSBERUZBVUxUX1BST0NFU1NfRklMVEVSX1BST1BFUlRJRVM7XG5cbiAgICAvKiogTGlzdCBvZiBzb3J0IHByb3BlcnRpZXMgdG8gZGlzcGxheS4gKi9cbiAgICBASW5wdXQoKVxuICAgIHNvcnRQcm9wZXJ0aWVzID0gREVGQVVMVF9TT1JUX1BST1BFUlRJRVM7XG5cbiAgICAvKiogTGlzdCBvZiBzb3J0IGFjdGlvbnMuICovXG4gICAgQElucHV0KClcbiAgICBhY3Rpb25zID0gREVGQVVMVF9BQ1RJT05TO1xuXG4gICAgLyoqIEVudmlyb25tZW50IElEIG9mIHRoZSBhcHBsaWNhdGlvbi4gKi9cbiAgICBASW5wdXQoKVxuICAgIGVudmlyb25tZW50SWQ6IHN0cmluZztcblxuICAgIC8qKiBMaXN0IG9mIGVudmlyb25tZW50cy4gKi9cbiAgICBASW5wdXQoKVxuICAgIGVudmlyb25tZW50TGlzdDogRW52aXJvbm1lbnRbXSA9IFtdO1xuXG4gICAgLyoqIFRvZ2dsZXMgZWRpdGluZyBvZiBwcm9jZXNzIGZpbHRlciBhY3Rpb25zLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2hvd0ZpbHRlckFjdGlvbnMgPSB0cnVlO1xuXG4gICAgLyoqIFRvZ2dsZXMgZWRpdGluZyBvZiB0aGUgcHJvY2VzcyBmaWx0ZXIgdGl0bGUuICovXG4gICAgQElucHV0KClcbiAgICBzaG93VGl0bGUgPSB0cnVlO1xuXG4gICAgLyoqIFRvZ2dsZXMgdGhlIGFwcGVhcmFuY2Ugb2YgdGhlIHByb2Nlc3MgZmlsdGVyIG5hbWUgLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2hvd1Byb2Nlc3NGaWx0ZXJOYW1lID0gdHJ1ZTtcblxuICAgIC8qKiBFbWl0dGVkIHdoZW4gYSBwcm9jZXNzIGluc3RhbmNlIGZpbHRlciBwcm9wZXJ0eSBjaGFuZ2VzLiAqL1xuICAgIEBPdXRwdXQoKVxuICAgIGZpbHRlckNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8UHJvY2Vzc0ZpbHRlckNsb3VkTW9kZWw+KCk7XG5cbiAgICAvKiogRW1pdHRlZCB3aGVuIGEgZmlsdGVyIGFjdGlvbiBvY2N1cnMgaS5lIFNhdmUsIFNhdmVBcywgRGVsZXRlLiAqL1xuICAgIEBPdXRwdXQoKVxuICAgIGFjdGlvbiA9IG5ldyBFdmVudEVtaXR0ZXI8UHJvY2Vzc0ZpbHRlckFjdGlvbj4oKTtcblxuICAgIHByaXZhdGUgX2ZpbHRlcjogUHJvY2Vzc0ZpbHRlckNsb3VkTW9kZWw7XG4gICAgcHJvdGVjdGVkIGZpbHRlckhhc0JlZW5DaGFuZ2VkID0gZmFsc2U7XG5cbiAgICBnZXQgcHJvY2Vzc0ZpbHRlcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ZpbHRlcjtcbiAgICB9XG5cbiAgICAvKiogUHJvY2VzcyBmaWx0ZXIgKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCBwcm9jZXNzRmlsdGVyKHZhbHVlOiBQcm9jZXNzRmlsdGVyQ2xvdWRNb2RlbCkge1xuICAgICAgICBjb25zdCBpc0NoYW5nZWQgPSB0aGlzLmlzRmlsdGVyQ2hhbmdlZCh0aGlzLl9maWx0ZXIsIHZhbHVlKTtcblxuICAgICAgICB0aGlzLl9maWx0ZXIgPSB2YWx1ZTtcblxuICAgICAgICBpZiAodmFsdWU/LmFwcE5hbWUpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwTmFtZSA9IHZhbHVlLmFwcE5hbWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodmFsdWU/LmlkKSB7XG4gICAgICAgICAgICB0aGlzLmlkID0gdmFsdWUuaWQ7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodmFsdWU/LmVudmlyb25tZW50SWQpIHtcbiAgICAgICAgICAgIHRoaXMuZW52aXJvbm1lbnRJZCA9IHZhbHVlLmVudmlyb25tZW50SWQ7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnByb2Nlc3NGaWx0ZXJQcm9wZXJ0aWVzID0gdGhpcy5jcmVhdGVBbmRGaWx0ZXJQcm9wZXJ0aWVzKCk7XG4gICAgICAgIHRoaXMucHJvY2Vzc0ZpbHRlckFjdGlvbnMgPSB0aGlzLmNyZWF0ZUFuZEZpbHRlckFjdGlvbnMoKTtcbiAgICAgICAgdGhpcy5idWlsZEZvcm0odGhpcy5wcm9jZXNzRmlsdGVyUHJvcGVydGllcyk7XG5cbiAgICAgICAgaWYgKGlzQ2hhbmdlZCkge1xuICAgICAgICAgICAgdGhpcy5maWx0ZXJDaGFuZ2UuZW1pdCh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzdGF0dXM6IEFycmF5PERyb3Bkb3duT3B0aW9uPiA9IFtcbiAgICAgICAgeyB2YWx1ZTogJycsIGxhYmVsOiAnQURGX0NMT1VEX1BST0NFU1NfRklMVEVSUy5TVEFUVVMuQUxMJyB9LFxuICAgICAgICB7IHZhbHVlOiAnUlVOTklORycsIGxhYmVsOiAnQURGX0NMT1VEX1BST0NFU1NfRklMVEVSUy5TVEFUVVMuUlVOTklORycgfSxcbiAgICAgICAgeyB2YWx1ZTogJ1NVU1BFTkRFRCcsIGxhYmVsOiAnQURGX0NMT1VEX1BST0NFU1NfRklMVEVSUy5TVEFUVVMuU1VTUEVOREVEJyB9LFxuICAgICAgICB7IHZhbHVlOiAnQ0FOQ0VMTEVEJywgbGFiZWw6ICdBREZfQ0xPVURfUFJPQ0VTU19GSUxURVJTLlNUQVRVUy5DQU5DRUxMRUQnIH0sXG4gICAgICAgIHsgdmFsdWU6ICdDT01QTEVURUQnLCBsYWJlbDogJ0FERl9DTE9VRF9QUk9DRVNTX0ZJTFRFUlMuU1RBVFVTLkNPTVBMRVRFRCcgfVxuICAgIF07XG4gICAgZGlyZWN0aW9uczogQXJyYXk8RHJvcGRvd25PcHRpb24+ID0gW1xuICAgICAgICB7IHZhbHVlOiAnQVNDJywgbGFiZWw6ICdBREZfQ0xPVURfUFJPQ0VTU19GSUxURVJTLkRJUkVDVElPTi5BU0NFTkRJTkcnIH0sXG4gICAgICAgIHsgdmFsdWU6ICdERVNDJywgbGFiZWw6ICdBREZfQ0xPVURfUFJPQ0VTU19GSUxURVJTLkRJUkVDVElPTi5ERVNDRU5ESU5HJyB9XG4gICAgXTtcbiAgICBhY3Rpb25EaXNhYmxlZEZvckRlZmF1bHQgPSBbUFJPQ0VTU19GSUxURVJfQUNUSU9OX1NBVkUsIFBST0NFU1NfRklMVEVSX0FDVElPTl9ERUxFVEVdO1xuICAgIGFwcGxpY2F0aW9uTmFtZXM6IGFueVtdID0gW107XG4gICAgYWxsUHJvY2Vzc0RlZmluaXRpb25OYW1lc09wdGlvbjogRHJvcGRvd25PcHRpb24gPSB7XG4gICAgICAgIGxhYmVsOiAnQURGX0NMT1VEX1BST0NFU1NfRklMVEVSUy5TVEFUVVMuQUxMJyxcbiAgICAgICAgdmFsdWU6ICcnXG4gICAgfTtcbiAgICBwcm9jZXNzRGVmaW5pdGlvbk5hbWVzOiBhbnlbXSA9IFtdO1xuICAgIGVkaXRQcm9jZXNzRmlsdGVyRm9ybTogRm9ybUdyb3VwPFByb2Nlc3NGaWx0ZXJGb3JtUHJvcHM+O1xuICAgIHByb2Nlc3NGaWx0ZXJQcm9wZXJ0aWVzOiBQcm9jZXNzRmlsdGVyUHJvcGVydGllc1tdID0gW107XG4gICAgcHJvY2Vzc0ZpbHRlckFjdGlvbnM6IFByb2Nlc3NGaWx0ZXJBY3Rpb25bXSA9IFtdO1xuICAgIHRvZ2dsZUZpbHRlckFjdGlvbnM6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBhcHBWZXJzaW9uT3B0aW9uczogUHJvY2Vzc0ZpbHRlck9wdGlvbnNbXSA9IFtdO1xuICAgIGluaXRpYXRvck9wdGlvbnM6IElkZW50aXR5VXNlck1vZGVsW10gPSBbXTtcblxuICAgIGlzTG9hZGluZzogYm9vbGVhbiA9IGZhbHNlO1xuICAgIHByaXZhdGUgZmlsdGVyQ2hhbmdlU3ViOiBTdWJzY3JpcHRpb247XG5cbiAgICBwcml2YXRlIHJlYWRvbmx5IGRlc3Ryb3lSZWYgPSBpbmplY3QoRGVzdHJveVJlZik7XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSBmb3JtQnVpbGRlcjogRm9ybUJ1aWxkZXIsXG4gICAgICAgIHB1YmxpYyBkaWFsb2c6IE1hdERpYWxvZyxcbiAgICAgICAgcHJpdmF0ZSBkYXRlQWRhcHRlcjogRGF0ZUFkYXB0ZXI8RGF0ZT4sXG4gICAgICAgIHByaXZhdGUgdXNlclByZWZlcmVuY2VzU2VydmljZTogVXNlclByZWZlcmVuY2VzU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSB0cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGlvblNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgcHJvY2Vzc0ZpbHRlckNsb3VkU2VydmljZTogUHJvY2Vzc0ZpbHRlckNsb3VkU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBhcHBzUHJvY2Vzc0Nsb3VkU2VydmljZTogQXBwc1Byb2Nlc3NDbG91ZFNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgcHJvY2Vzc0Nsb3VkU2VydmljZTogUHJvY2Vzc0Nsb3VkU2VydmljZVxuICAgICkge31cblxuICAgIG5nT25Jbml0KCkge1xuICAgICAgICB0aGlzLnVzZXJQcmVmZXJlbmNlc1NlcnZpY2VcbiAgICAgICAgICAgIC5zZWxlY3QoVXNlclByZWZlcmVuY2VWYWx1ZXMuTG9jYWxlKVxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZikpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChsb2NhbGUpID0+IHRoaXMuZGF0ZUFkYXB0ZXIuc2V0TG9jYWxlKGxvY2FsZSkpO1xuICAgIH1cblxuICAgIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcbiAgICAgICAgY29uc3QgaWQgPSBjaGFuZ2VzWydpZCddO1xuICAgICAgICBpZiAoaWQgJiYgaWQuY3VycmVudFZhbHVlICE9PSBpZC5wcmV2aW91c1ZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLnJldHJpZXZlUHJvY2Vzc0ZpbHRlckFuZEJ1aWxkRm9ybSgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGZpbHRlclRyYWNrZXIoX2luZGV4OiBudW1iZXIsIGl0ZW06IFByb2Nlc3NGaWx0ZXJQcm9wZXJ0aWVzKSB7XG4gICAgICAgIHJldHVybiBpdGVtLmtleTtcbiAgICB9XG5cbiAgICBidWlsZEZvcm0ocHJvY2Vzc0ZpbHRlclByb3BlcnRpZXM6IFByb2Nlc3NGaWx0ZXJQcm9wZXJ0aWVzW10pIHtcbiAgICAgICAgdGhpcy5lZGl0UHJvY2Vzc0ZpbHRlckZvcm0gPSB0aGlzLmZvcm1CdWlsZGVyLmdyb3VwKHRoaXMuZ2V0Rm9ybUNvbnRyb2xzQ29uZmlnKHByb2Nlc3NGaWx0ZXJQcm9wZXJ0aWVzKSk7XG4gICAgICAgIHRoaXMub25GaWx0ZXJDaGFuZ2UoKTtcbiAgICB9XG5cbiAgICBnZXRGb3JtQ29udHJvbHNDb25maWcocHJvY2Vzc0ZpbHRlclByb3BlcnRpZXM6IFByb2Nlc3NGaWx0ZXJQcm9wZXJ0aWVzW10pOiBhbnkge1xuICAgICAgICBjb25zdCBwcm9wZXJ0aWVzID0gcHJvY2Vzc0ZpbHRlclByb3BlcnRpZXMubWFwKChwcm9wZXJ0eSkgPT4ge1xuICAgICAgICAgICAgaWYgKHByb3BlcnR5LmF0dHJpYnV0ZXMpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRBdHRyaWJ1dGVzQ29udHJvbENvbmZpZyhwcm9wZXJ0eSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiB7IFtwcm9wZXJ0eS5rZXldOiBwcm9wZXJ0eS52YWx1ZSB9O1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHByb3BlcnRpZXMucmVkdWNlKChyZXN1bHQsIGN1cnJlbnQpID0+IE9iamVjdC5hc3NpZ24ocmVzdWx0LCBjdXJyZW50KSwge30pO1xuICAgIH1cblxuICAgIGdldCBsYXN0TW9kaWZpZWRGcm9tKCk6IEFic3RyYWN0Q29udHJvbDxEYXRlPiB7XG4gICAgICAgIHJldHVybiB0aGlzLmVkaXRQcm9jZXNzRmlsdGVyRm9ybS5nZXQoJ2xhc3RNb2RpZmllZEZyb20nKTtcbiAgICB9XG5cbiAgICBnZXQgbGFzdE1vZGlmaWVkVG8oKTogQWJzdHJhY3RDb250cm9sPERhdGU+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZWRpdFByb2Nlc3NGaWx0ZXJGb3JtLmdldCgnbGFzdE1vZGlmaWVkVG8nKTtcbiAgICB9XG5cbiAgICBnZXQgY29tcGxldGVkRGF0ZVR5cGUoKTogQWJzdHJhY3RDb250cm9sPERhdGVDbG91ZEZpbHRlclR5cGU+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZWRpdFByb2Nlc3NGaWx0ZXJGb3JtLmdldCgnY29tcGxldGVkRGF0ZVR5cGUnKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldEF0dHJpYnV0ZXNDb250cm9sQ29uZmlnKHByb3BlcnR5OiBQcm9jZXNzRmlsdGVyUHJvcGVydGllcykge1xuICAgICAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyhwcm9wZXJ0eS5hdHRyaWJ1dGVzKS5yZWR1Y2UoKHJlc3VsdCwga2V5KSA9PiB7XG4gICAgICAgICAgICByZXN1bHRba2V5XSA9IHByb3BlcnR5LnZhbHVlW2tleV07XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9LCB7fSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRmV0Y2hlcyBwcm9jZXNzIGluc3RhbmNlIGZpbHRlciBieSBhcHBsaWNhdGlvbiBuYW1lIGFuZCBmaWx0ZXIgaWQgYW5kIGNyZWF0ZXMgZmlsdGVyIHByb3BlcnRpZXMsIGJ1aWxkIGZvcm1cbiAgICAgKi9cbiAgICByZXRyaWV2ZVByb2Nlc3NGaWx0ZXJBbmRCdWlsZEZvcm0oKSB7XG4gICAgICAgIHRoaXMuaXNMb2FkaW5nID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5wcm9jZXNzRmlsdGVyQ2xvdWRTZXJ2aWNlXG4gICAgICAgICAgICAuZ2V0RmlsdGVyQnlJZCh0aGlzLmFwcE5hbWUsIHRoaXMuaWQpXG4gICAgICAgICAgICAucGlwZShmaW5hbGl6ZSgoKSA9PiAodGhpcy5pc0xvYWRpbmcgPSBmYWxzZSkpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgocmVzcG9uc2UpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmZpbHRlckhhc0JlZW5DaGFuZ2VkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdGhpcy5wcm9jZXNzRmlsdGVyID0gbmV3IFByb2Nlc3NGaWx0ZXJDbG91ZE1vZGVsKE9iamVjdC5hc3NpZ24oe30sIHJlc3BvbnNlIHx8IHt9LCB0aGlzLnByb2Nlc3NGaWx0ZXIgfHwge30pKTtcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrIHByb2Nlc3MgaW5zdGFuY2UgZmlsdGVyIGNoYW5nZXNcbiAgICAgKi9cbiAgICBvbkZpbHRlckNoYW5nZSgpIHtcbiAgICAgICAgaWYgKHRoaXMuZmlsdGVyQ2hhbmdlU3ViKSB7XG4gICAgICAgICAgICB0aGlzLmZpbHRlckNoYW5nZVN1Yi51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgdGhpcy5maWx0ZXJDaGFuZ2VTdWIgPSBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5maWx0ZXJDaGFuZ2VTdWIgPSB0aGlzLmVkaXRQcm9jZXNzRmlsdGVyRm9ybS52YWx1ZUNoYW5nZXNcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIGRlYm91bmNlVGltZSg1MDApLFxuICAgICAgICAgICAgICAgIGZpbHRlcigoKSA9PiB0aGlzLmlzRm9ybVZhbGlkKCkpLFxuICAgICAgICAgICAgICAgIHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChmb3JtVmFsdWVzOiBQYXJ0aWFsPFByb2Nlc3NGaWx0ZXJDbG91ZE1vZGVsPikgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0TGFzdE1vZGlmaWVkRnJvbUZpbHRlcihmb3JtVmFsdWVzKTtcbiAgICAgICAgICAgICAgICB0aGlzLnNldExhc3RNb2RpZmllZFRvRmlsdGVyKGZvcm1WYWx1ZXMpO1xuXG4gICAgICAgICAgICAgICAgY29uc3QgbmV3VmFsdWUgPSBuZXcgUHJvY2Vzc0ZpbHRlckNsb3VkTW9kZWwoT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5wcm9jZXNzRmlsdGVyLCBmb3JtVmFsdWVzKSk7XG4gICAgICAgICAgICAgICAgY29uc3QgY2hhbmdlZCA9ICF0aGlzLmNvbXBhcmVGaWx0ZXJzKG5ld1ZhbHVlLCB0aGlzLnByb2Nlc3NGaWx0ZXIpO1xuICAgICAgICAgICAgICAgIHRoaXMuZmlsdGVySGFzQmVlbkNoYW5nZWQgPSBjaGFuZ2VkO1xuXG4gICAgICAgICAgICAgICAgaWYgKGNoYW5nZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZmlsdGVyID0gbmV3VmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZmlsdGVyQ2hhbmdlLmVtaXQobmV3VmFsdWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIGNyZWF0ZUFuZEZpbHRlclByb3BlcnRpZXMoKTogUHJvY2Vzc0ZpbHRlclByb3BlcnRpZXNbXSB7XG4gICAgICAgIHRoaXMuY2hlY2tNYW5kYXRvcnlGaWx0ZXJQcm9wZXJ0aWVzKCk7XG5cbiAgICAgICAgaWYgKHRoaXMuZmlsdGVyUHJvcGVydGllcy5pbmNsdWRlcygnYXBwTmFtZScpKSB7XG4gICAgICAgICAgICB0aGlzLmdldERlcGxveWVkQXBwbGljYXRpb25zKCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5maWx0ZXJQcm9wZXJ0aWVzLmluY2x1ZGVzKCdwcm9jZXNzRGVmaW5pdGlvbk5hbWUnKSkge1xuICAgICAgICAgICAgdGhpcy5nZXRQcm9jZXNzRGVmaW5pdGlvbnMoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmZpbHRlclByb3BlcnRpZXMuaW5jbHVkZXMoJ2FwcFZlcnNpb25NdWx0aXBsZScpKSB7XG4gICAgICAgICAgICB0aGlzLmdldEFwcFZlcnNpb25PcHRpb25zKCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5maWx0ZXJQcm9wZXJ0aWVzLmluY2x1ZGVzKCdpbml0aWF0b3InKSkge1xuICAgICAgICAgICAgdGhpcy5pbml0aWF0b3JPcHRpb25zID0gdGhpcy5wcm9jZXNzRmlsdGVyLmluaXRpYXRvclxuICAgICAgICAgICAgICAgID8gdGhpcy5wcm9jZXNzRmlsdGVyLmluaXRpYXRvci5zcGxpdCgnLCcpLm1hcCgodXNlcm5hbWUpID0+IE9iamVjdC5hc3NpZ24oe30sIHsgdXNlcm5hbWUgfSkpXG4gICAgICAgICAgICAgICAgOiBbXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGRlZmF1bHRQcm9wZXJ0aWVzID0gdGhpcy5jcmVhdGVQcm9jZXNzRmlsdGVyUHJvcGVydGllcyh0aGlzLnByb2Nlc3NGaWx0ZXIpO1xuICAgICAgICBsZXQgZmlsdGVyZWRQcm9wZXJ0aWVzID0gZGVmYXVsdFByb3BlcnRpZXMuZmlsdGVyKChmaWx0ZXJQcm9wZXJ0eSkgPT4gdGhpcy5pc1ZhbGlkUHJvcGVydHkodGhpcy5maWx0ZXJQcm9wZXJ0aWVzLCBmaWx0ZXJQcm9wZXJ0eS5rZXkpKTtcblxuICAgICAgICBpZiAoIXRoaXMuZmlsdGVyUHJvcGVydGllcy5pbmNsdWRlcygnc29ydCcpKSB7XG4gICAgICAgICAgICBmaWx0ZXJlZFByb3BlcnRpZXMgPSBmaWx0ZXJlZFByb3BlcnRpZXMuZmlsdGVyKChwcm9wZXJ0eSkgPT4gcHJvcGVydHkua2V5ICE9PSAnb3JkZXInKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmZpbHRlclByb3BlcnRpZXMuaW5jbHVkZXMoJ2xhc3RNb2RpZmllZCcpKSB7XG4gICAgICAgICAgICBmaWx0ZXJlZFByb3BlcnRpZXMgPSBbLi4uZmlsdGVyZWRQcm9wZXJ0aWVzLCAuLi50aGlzLmNyZWF0ZUxhc3RNb2RpZmllZFByb3BlcnR5KHRoaXMucHJvY2Vzc0ZpbHRlcildO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGZpbHRlcmVkUHJvcGVydGllcztcbiAgICB9XG5cbiAgICBjaGVja01hbmRhdG9yeUZpbHRlclByb3BlcnRpZXMoKSB7XG4gICAgICAgIGlmICh0aGlzLmZpbHRlclByb3BlcnRpZXMgPT09IHVuZGVmaW5lZCB8fCB0aGlzLmZpbHRlclByb3BlcnRpZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICB0aGlzLmZpbHRlclByb3BlcnRpZXMgPSBERUZBVUxUX1BST0NFU1NfRklMVEVSX1BST1BFUlRJRVM7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGlzVmFsaWRQcm9wZXJ0eShmaWx0ZXJQcm9wZXJ0aWVzOiBzdHJpbmdbXSwga2V5OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIGZpbHRlclByb3BlcnRpZXMgPyBmaWx0ZXJQcm9wZXJ0aWVzLmluZGV4T2Yoa2V5KSA+PSAwIDogdHJ1ZTtcbiAgICB9XG5cbiAgICBnZXQgY3JlYXRlU29ydFByb3BlcnRpZXMoKTogUHJvY2Vzc0ZpbHRlck9wdGlvbnNbXSB7XG4gICAgICAgIHRoaXMuY2hlY2tNYW5kYXRvcnlTb3J0UHJvcGVydGllcygpO1xuICAgICAgICBjb25zdCBkZWZhdWx0U29ydFByb3BlcnRpZXMgPSB0aGlzLmNyZWF0ZVByb2Nlc3NTb3J0UHJvcGVydGllcygpO1xuICAgICAgICByZXR1cm4gZGVmYXVsdFNvcnRQcm9wZXJ0aWVzLmZpbHRlcigoc29ydFByb3BlcnR5KSA9PiB0aGlzLmlzVmFsaWRQcm9wZXJ0eSh0aGlzLnNvcnRQcm9wZXJ0aWVzLCBzb3J0UHJvcGVydHkua2V5KSk7XG4gICAgfVxuXG4gICAgZ2V0QXBwVmVyc2lvbk9wdGlvbnMoKSB7XG4gICAgICAgIHRoaXMucHJvY2Vzc0Nsb3VkU2VydmljZS5nZXRBcHBsaWNhdGlvblZlcnNpb25zKHRoaXMuYXBwTmFtZSkuc3Vic2NyaWJlKChhcHBWZXJzaW9ucykgPT4ge1xuICAgICAgICAgICAgdGhpcy5hcHBWZXJzaW9uT3B0aW9ucy5sZW5ndGggPSAwO1xuICAgICAgICAgICAgYXBwVmVyc2lvbnMuZm9yRWFjaCgoYXBwVmVyc2lvbikgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuYXBwVmVyc2lvbk9wdGlvbnMucHVzaCh7IGxhYmVsOiBhcHBWZXJzaW9uLmVudHJ5LnZlcnNpb24sIHZhbHVlOiBhcHBWZXJzaW9uLmVudHJ5LnZlcnNpb24gfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgY2hlY2tNYW5kYXRvcnlTb3J0UHJvcGVydGllcygpIHtcbiAgICAgICAgaWYgKHRoaXMuc29ydFByb3BlcnRpZXMgPT09IHVuZGVmaW5lZCB8fCB0aGlzLnNvcnRQcm9wZXJ0aWVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgdGhpcy5zb3J0UHJvcGVydGllcyA9IERFRkFVTFRfU09SVF9QUk9QRVJUSUVTO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY3JlYXRlQW5kRmlsdGVyQWN0aW9ucygpIHtcbiAgICAgICAgdGhpcy5jaGVja01hbmRhdG9yeUFjdGlvbnMoKTtcbiAgICAgICAgY29uc3QgYWN0aW9ucyA9IHRoaXMuY3JlYXRlRmlsdGVyQWN0aW9ucygpO1xuICAgICAgICByZXR1cm4gYWN0aW9ucy5maWx0ZXIoKGFjdGlvbikgPT4gdGhpcy5pc1ZhbGlkQWN0aW9uKHRoaXMuYWN0aW9ucywgYWN0aW9uKSk7XG4gICAgfVxuXG4gICAgY2hlY2tNYW5kYXRvcnlBY3Rpb25zKCkge1xuICAgICAgICBpZiAodGhpcy5hY3Rpb25zID09PSB1bmRlZmluZWQgfHwgdGhpcy5hY3Rpb25zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgdGhpcy5hY3Rpb25zID0gREVGQVVMVF9BQ1RJT05TO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpc1ZhbGlkQWN0aW9uKGFjdGlvbnM6IHN0cmluZ1tdLCBhY3Rpb246IFByb2Nlc3NGaWx0ZXJBY3Rpb24pOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIGFjdGlvbnMgPyBhY3Rpb25zLmluZGV4T2YoYWN0aW9uLmFjdGlvblR5cGUpID49IDAgOiB0cnVlO1xuICAgIH1cblxuICAgIGlzRm9ybVZhbGlkKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5lZGl0UHJvY2Vzc0ZpbHRlckZvcm0udmFsaWQ7XG4gICAgfVxuXG4gICAgZ2V0UHJvcGVydHlDb250cm9sbGVyKHByb3BlcnR5OiBQcm9jZXNzRmlsdGVyUHJvcGVydGllcyk6IEFic3RyYWN0Q29udHJvbCB7XG4gICAgICAgIHJldHVybiB0aGlzLmVkaXRQcm9jZXNzRmlsdGVyRm9ybS5nZXQocHJvcGVydHkua2V5KTtcbiAgICB9XG5cbiAgICBvbkRhdGVDaGFuZ2VkKG5ld0RhdGVWYWx1ZTogRGF0ZSB8IHN0cmluZywgZGF0ZVByb3BlcnR5OiBQcm9jZXNzRmlsdGVyUHJvcGVydGllcykge1xuICAgICAgICBpZiAobmV3RGF0ZVZhbHVlKSB7XG4gICAgICAgICAgICBjb25zdCBjb250cm9sbGVyID0gdGhpcy5nZXRQcm9wZXJ0eUNvbnRyb2xsZXIoZGF0ZVByb3BlcnR5KTtcblxuICAgICAgICAgICAgbGV0IGRhdGUgPSBuZXdEYXRlVmFsdWU7XG5cbiAgICAgICAgICAgIGlmICh0eXBlb2YgbmV3RGF0ZVZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgIGRhdGUgPSBEYXRlRm5zVXRpbHMucGFyc2VEYXRlKG5ld0RhdGVWYWx1ZSwgJ2RkL01NL3l5eXknKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGlzVmFsaWQoZGF0ZSkpIHtcbiAgICAgICAgICAgICAgICBjb250cm9sbGVyLnNldFZhbHVlKGRhdGUpO1xuICAgICAgICAgICAgICAgIGNvbnRyb2xsZXIuc2V0RXJyb3JzKG51bGwpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb250cm9sbGVyLnNldFZhbHVlKGRhdGUpO1xuICAgICAgICAgICAgICAgIGNvbnRyb2xsZXIuc2V0RXJyb3JzKHsgaW52YWxpZDogdHJ1ZSB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uRGF0ZVR5cGVDaGFuZ2UoZGF0ZVR5cGU6IERhdGVDbG91ZEZpbHRlclR5cGUsIHByb3BlcnR5OiBQcm9jZXNzRmlsdGVyUHJvcGVydGllcykge1xuICAgICAgICB0aGlzLmVkaXRQcm9jZXNzRmlsdGVyRm9ybS5nZXQocHJvcGVydHkuYXR0cmlidXRlcy5kYXRlVHlwZSkuc2V0VmFsdWUoZGF0ZVR5cGUpO1xuICAgIH1cblxuICAgIG9uRGF0ZVJhbmdlRmlsdGVyQ2hhbmdlZChkYXRlUmFuZ2U6IERhdGVSYW5nZUZpbHRlciwgcHJvcGVydHk6IFByb2Nlc3NGaWx0ZXJQcm9wZXJ0aWVzKSB7XG4gICAgICAgIHRoaXMuZWRpdFByb2Nlc3NGaWx0ZXJGb3JtLmdldChwcm9wZXJ0eS5hdHRyaWJ1dGVzPy5mcm9tKS5zZXRWYWx1ZShkYXRlUmFuZ2Uuc3RhcnREYXRlID8gZGF0ZVJhbmdlLnN0YXJ0RGF0ZSA6IG51bGwpO1xuICAgICAgICB0aGlzLmVkaXRQcm9jZXNzRmlsdGVyRm9ybS5nZXQocHJvcGVydHkuYXR0cmlidXRlcz8udG8pLnNldFZhbHVlKGRhdGVSYW5nZS5lbmREYXRlID8gZGF0ZVJhbmdlLmVuZERhdGUgOiBudWxsKTtcbiAgICAgICAgdGhpcy5lZGl0UHJvY2Vzc0ZpbHRlckZvcm0uZ2V0KHByb3BlcnR5LmF0dHJpYnV0ZXMuZGF0ZVR5cGUpLnNldFZhbHVlKERhdGVDbG91ZEZpbHRlclR5cGUuUkFOR0UpO1xuICAgIH1cblxuICAgIG9uQ2hhbmdlZFVzZXIodXNlcnM6IElkZW50aXR5VXNlck1vZGVsW10sIHByb2Nlc3NQcm9wZXJ0eTogUHJvY2Vzc0ZpbHRlclByb3BlcnRpZXMpIHtcbiAgICAgICAgdGhpcy5nZXRQcm9wZXJ0eUNvbnRyb2xsZXIocHJvY2Vzc1Byb3BlcnR5KS5zZXRWYWx1ZSh1c2Vycy5tYXAoKHVzZXIpID0+IHVzZXIudXNlcm5hbWUpLmpvaW4oJywnKSk7XG4gICAgfVxuXG4gICAgaGFzRXJyb3IocHJvcGVydHk6IFByb2Nlc3NGaWx0ZXJQcm9wZXJ0aWVzKTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IGNvbnRyb2xsZXIgPSB0aGlzLmdldFByb3BlcnR5Q29udHJvbGxlcihwcm9wZXJ0eSk7XG4gICAgICAgIHJldHVybiAhIWNvbnRyb2xsZXIuZXJyb3JzPy5pbnZhbGlkO1xuICAgIH1cblxuICAgIGNvbXBhcmVGaWx0ZXJzKGVkaXRlZFF1ZXJ5OiBQcm9jZXNzRmlsdGVyQ2xvdWRNb2RlbCwgY3VycmVudFF1ZXJ5OiBQcm9jZXNzRmlsdGVyQ2xvdWRNb2RlbCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoZWRpdGVkUXVlcnkpLnRvTG93ZXJDYXNlKCkgPT09IEpTT04uc3RyaW5naWZ5KGN1cnJlbnRRdWVyeSkudG9Mb3dlckNhc2UoKTtcbiAgICB9XG5cbiAgICBnZXREZXBsb3llZEFwcGxpY2F0aW9ucygpIHtcbiAgICAgICAgdGhpcy5hcHBzUHJvY2Vzc0Nsb3VkU2VydmljZS5nZXREZXBsb3llZEFwcGxpY2F0aW9uc0J5U3RhdHVzKCdERVBMT1lFRCcsIHRoaXMucm9sZSkuc3Vic2NyaWJlKChhcHBsaWNhdGlvbnMpID0+IHtcbiAgICAgICAgICAgIGlmIChhcHBsaWNhdGlvbnMgJiYgYXBwbGljYXRpb25zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFwcGxpY2F0aW9uTmFtZXMubGVuZ3RoID0gMDtcbiAgICAgICAgICAgICAgICBhcHBsaWNhdGlvbnMubWFwKChhcHBsaWNhdGlvbikgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmFwcGxpY2F0aW9uTmFtZXMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogdGhpcy5hcHBzUHJvY2Vzc0Nsb3VkU2VydmljZS5nZXRBcHBsaWNhdGlvbkxhYmVsKGFwcGxpY2F0aW9uLCB0aGlzLmVudmlyb25tZW50TGlzdCksXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogYXBwbGljYXRpb24ubmFtZVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgZ2V0UHJvY2Vzc0RlZmluaXRpb25zKCkge1xuICAgICAgICB0aGlzLnByb2Nlc3NDbG91ZFNlcnZpY2UuZ2V0UHJvY2Vzc0RlZmluaXRpb25zKHRoaXMuYXBwTmFtZSkuc3Vic2NyaWJlKChwcm9jZXNzRGVmaW5pdGlvbnMpID0+IHtcbiAgICAgICAgICAgIGlmIChwcm9jZXNzRGVmaW5pdGlvbnMgJiYgcHJvY2Vzc0RlZmluaXRpb25zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICB0aGlzLnByb2Nlc3NEZWZpbml0aW9uTmFtZXMubGVuZ3RoID0gMDtcbiAgICAgICAgICAgICAgICB0aGlzLnByb2Nlc3NEZWZpbml0aW9uTmFtZXMucHVzaCh0aGlzLmFsbFByb2Nlc3NEZWZpbml0aW9uTmFtZXNPcHRpb24pO1xuICAgICAgICAgICAgICAgIHByb2Nlc3NEZWZpbml0aW9ucy5tYXAoKHByb2Nlc3NEZWZpbml0aW9uKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucHJvY2Vzc0RlZmluaXRpb25OYW1lcy5wdXNoKHsgbGFiZWw6IHByb2Nlc3NEZWZpbml0aW9uLm5hbWUsIHZhbHVlOiBwcm9jZXNzRGVmaW5pdGlvbi5uYW1lIH0pO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBleGVjdXRlRmlsdGVyQWN0aW9ucyhldmVudDogRXZlbnQsIGFjdGlvbjogUHJvY2Vzc0ZpbHRlckFjdGlvbik6IHZvaWQge1xuICAgICAgICBpZiAoYWN0aW9uLmFjdGlvblR5cGUgPT09IFBST0NFU1NfRklMVEVSX0FDVElPTl9TQVZFKSB7XG4gICAgICAgICAgICB0aGlzLnNhdmUoYWN0aW9uKTtcbiAgICAgICAgfSBlbHNlIGlmIChhY3Rpb24uYWN0aW9uVHlwZSA9PT0gUFJPQ0VTU19GSUxURVJfQUNUSU9OX1NBVkVfQVMpIHtcbiAgICAgICAgICAgIHRoaXMuc2F2ZUFzKGFjdGlvbik7XG4gICAgICAgIH0gZWxzZSBpZiAoYWN0aW9uLmFjdGlvblR5cGUgPT09IFBST0NFU1NfRklMVEVSX0FDVElPTl9ERUxFVEUpIHtcbiAgICAgICAgICAgIHRoaXMuZGVsZXRlKGFjdGlvbik7XG4gICAgICAgIH0gZWxzZSBpZiAoYWN0aW9uLmFjdGlvblR5cGUgPT09IFBST0NFU1NfRklMVEVSX0FDVElPTl9TQVZFX0RFRkFVTFQpIHtcbiAgICAgICAgICAgIHRoaXMuc2F2ZShhY3Rpb24pO1xuICAgICAgICB9IGVsc2UgaWYgKGFjdGlvbi5hY3Rpb25UeXBlID09PSBQUk9DRVNTX0ZJTFRFUl9BQ1RJT05fUkVTVE9SRSkge1xuICAgICAgICAgICAgdGhpcy5yZXNldChhY3Rpb24pO1xuICAgICAgICB9XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIH1cblxuICAgIHNhdmUoc2F2ZUFjdGlvbjogUHJvY2Vzc0ZpbHRlckFjdGlvbikge1xuICAgICAgICB0aGlzLnByb2Nlc3NGaWx0ZXJDbG91ZFNlcnZpY2UudXBkYXRlRmlsdGVyKHRoaXMucHJvY2Vzc0ZpbHRlcikuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIHNhdmVBY3Rpb24uZmlsdGVyID0gdGhpcy5wcm9jZXNzRmlsdGVyO1xuICAgICAgICAgICAgdGhpcy5maWx0ZXJIYXNCZWVuQ2hhbmdlZCA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5hY3Rpb24uZW1pdChzYXZlQWN0aW9uKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRGVsZXRlIGEgcHJvY2VzcyBpbnN0YW5jZSBmaWx0ZXJcbiAgICAgKlxuICAgICAqIEBwYXJhbSBkZWxldGVBY3Rpb24gZmlsdGVyIGFjdGlvblxuICAgICAqL1xuICAgIGRlbGV0ZShkZWxldGVBY3Rpb246IFByb2Nlc3NGaWx0ZXJBY3Rpb24pIHtcbiAgICAgICAgdGhpcy5wcm9jZXNzRmlsdGVyQ2xvdWRTZXJ2aWNlXG4gICAgICAgICAgICAuZGVsZXRlRmlsdGVyKHRoaXMucHJvY2Vzc0ZpbHRlcilcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIGZpbHRlcigoZmlsdGVycykgPT4ge1xuICAgICAgICAgICAgICAgICAgICBkZWxldGVBY3Rpb24uZmlsdGVyID0gdGhpcy5wcm9jZXNzRmlsdGVyO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmFjdGlvbi5lbWl0KGRlbGV0ZUFjdGlvbik7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmaWx0ZXJzLmxlbmd0aCA9PT0gMDtcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICBzd2l0Y2hNYXAoKCkgPT4gdGhpcy5yZXN0b3JlRGVmYXVsdFByb2Nlc3NGaWx0ZXJzKCkpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHt9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTYXZlIEFzIGEgcHJvY2VzcyBpbnN0YW5jZSBmaWx0ZXJcbiAgICAgKlxuICAgICAqIEBwYXJhbSBzYXZlQXNBY3Rpb24gZmlsdGVyIGFjdGlvblxuICAgICAqL1xuICAgIHNhdmVBcyhzYXZlQXNBY3Rpb246IFByb2Nlc3NGaWx0ZXJBY3Rpb24pIHtcbiAgICAgICAgY29uc3QgZGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3BlbihQcm9jZXNzRmlsdGVyRGlhbG9nQ2xvdWRDb21wb25lbnQsIHtcbiAgICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgICAgICBuYW1lOiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCh0aGlzLnByb2Nlc3NGaWx0ZXIubmFtZSlcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBoZWlnaHQ6ICdhdXRvJyxcbiAgICAgICAgICAgIG1pbldpZHRoOiAnMzAlJ1xuICAgICAgICB9KTtcbiAgICAgICAgZGlhbG9nUmVmLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcbiAgICAgICAgICAgIGlmIChyZXN1bHQgJiYgcmVzdWx0LmFjdGlvbiA9PT0gUHJvY2Vzc0ZpbHRlckRpYWxvZ0Nsb3VkQ29tcG9uZW50LkFDVElPTl9TQVZFKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZmlsdGVySWQgPSBNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zdWJzdHJpbmcoMiwgOSk7XG4gICAgICAgICAgICAgICAgY29uc3QgZmlsdGVyS2V5ID0gdGhpcy5nZXRTYW5pdGl6ZUZpbHRlck5hbWUocmVzdWx0Lm5hbWUpO1xuICAgICAgICAgICAgICAgIGNvbnN0IG5ld0ZpbHRlciA9IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogcmVzdWx0Lm5hbWUsXG4gICAgICAgICAgICAgICAgICAgIGljb246IHJlc3VsdC5pY29uLFxuICAgICAgICAgICAgICAgICAgICBpZDogZmlsdGVySWQsXG4gICAgICAgICAgICAgICAgICAgIGtleTogJ2N1c3RvbS0nICsgZmlsdGVyS2V5XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBjb25zdCByZXN1bHRGaWx0ZXI6IFByb2Nlc3NGaWx0ZXJDbG91ZE1vZGVsID0gT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5wcm9jZXNzRmlsdGVyLCBuZXdGaWx0ZXIpO1xuICAgICAgICAgICAgICAgIHRoaXMucHJvY2Vzc0ZpbHRlckNsb3VkU2VydmljZS5hZGRGaWx0ZXIocmVzdWx0RmlsdGVyKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBzYXZlQXNBY3Rpb24uZmlsdGVyID0gcmVzdWx0RmlsdGVyO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZpbHRlckhhc0JlZW5DaGFuZ2VkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWN0aW9uLmVtaXQoc2F2ZUFzQWN0aW9uKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmVzZXQocmVzZXRBY3Rpb246IFByb2Nlc3NGaWx0ZXJBY3Rpb24pIHtcbiAgICAgICAgdGhpcy5wcm9jZXNzRmlsdGVyQ2xvdWRTZXJ2aWNlXG4gICAgICAgICAgICAucmVzZXRQcm9jZXNzRmlsdGVyVG9EZWZhdWx0cyh0aGlzLmFwcE5hbWUsIHRoaXMucHJvY2Vzc0ZpbHRlcilcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIHRhcCgoZmlsdGVycykgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXNldEFjdGlvbi5maWx0ZXIgPSBmaWx0ZXJzLmZpbmQoKGRlZmF1bHRGaWx0ZXIpID0+IGRlZmF1bHRGaWx0ZXIubmFtZSA9PT0gdGhpcy5wcm9jZXNzRmlsdGVyLm5hbWUpIHx8IHRoaXMucHJvY2Vzc0ZpbHRlcjtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hY3Rpb24uZW1pdChyZXNldEFjdGlvbik7XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgc3dpdGNoTWFwKCgpID0+IHRoaXMucmVzdG9yZURlZmF1bHRQcm9jZXNzRmlsdGVycygpKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7fSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0IHNhbml0aXplZCBmaWx0ZXIgbmFtZVxuICAgICAqXG4gICAgICogQHBhcmFtIGZpbHRlck5hbWUgZmlsdGVyIG5hbWVcbiAgICAgKiBAcmV0dXJucyBzYW5pdGl6ZWQgZmlsdGVyIG5hbWVcbiAgICAgKi9cbiAgICBnZXRTYW5pdGl6ZUZpbHRlck5hbWUoZmlsdGVyTmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAgICAgY29uc3QgbmFtZVdpdGhIeXBoZW4gPSB0aGlzLnJlcGxhY2VTcGFjZVdpdGhIeXBoZW4oZmlsdGVyTmFtZS50cmltKCkpO1xuICAgICAgICByZXR1cm4gbmFtZVdpdGhIeXBoZW4udG9Mb3dlckNhc2UoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm4gbmFtZSB3aXRoIGh5cGhlblxuICAgICAqXG4gICAgICogQHBhcmFtIG5hbWUgbmFtZVxuICAgICAqIEByZXR1cm5zIHVwZGF0ZWQgdmFsdWVcbiAgICAgKi9cbiAgICByZXBsYWNlU3BhY2VXaXRoSHlwaGVuKG5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgICAgIGNvbnN0IHJlZ0V4dCA9IG5ldyBSZWdFeHAoJyAnLCAnZycpO1xuICAgICAgICByZXR1cm4gbmFtZS5yZXBsYWNlKHJlZ0V4dCwgJy0nKTtcbiAgICB9XG5cbiAgICByZXN0b3JlRGVmYXVsdFByb2Nlc3NGaWx0ZXJzKCk6IE9ic2VydmFibGU8UHJvY2Vzc0ZpbHRlckNsb3VkTW9kZWxbXT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5wcm9jZXNzRmlsdGVyQ2xvdWRTZXJ2aWNlLmdldFByb2Nlc3NGaWx0ZXJzKHRoaXMuYXBwTmFtZSk7XG4gICAgfVxuXG4gICAgb25FeHBhbmQoKSB7XG4gICAgICAgIHRoaXMudG9nZ2xlRmlsdGVyQWN0aW9ucyA9IHRydWU7XG4gICAgfVxuXG4gICAgb25DbG9zZSgpIHtcbiAgICAgICAgdGhpcy50b2dnbGVGaWx0ZXJBY3Rpb25zID0gZmFsc2U7XG4gICAgfVxuXG4gICAgaXNEaXNhYmxlZEFjdGlvbihhY3Rpb246IFByb2Nlc3NGaWx0ZXJBY3Rpb24pOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc0ZpbHRlckNsb3VkU2VydmljZS5pc0RlZmF1bHRGaWx0ZXIodGhpcy5wcm9jZXNzRmlsdGVyLm5hbWUpICYmIHRoaXMuYWN0aW9uRGlzYWJsZWRGb3JEZWZhdWx0LmluY2x1ZGVzKGFjdGlvbi5hY3Rpb25UeXBlKVxuICAgICAgICAgICAgPyB0cnVlXG4gICAgICAgICAgICA6IHRoaXMuaGFzRmlsdGVyQ2hhbmdlZChhY3Rpb24pO1xuICAgIH1cblxuICAgIGhhc0ZpbHRlckNoYW5nZWQoYWN0aW9uOiBQcm9jZXNzRmlsdGVyQWN0aW9uKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiBhY3Rpb24uYWN0aW9uVHlwZSA9PT0gUFJPQ0VTU19GSUxURVJfQUNUSU9OX1NBVkUgfHwgYWN0aW9uLmFjdGlvblR5cGUgPT09IFBST0NFU1NfRklMVEVSX0FDVElPTl9TQVZFX0FTXG4gICAgICAgICAgICA/ICF0aGlzLmZpbHRlckhhc0JlZW5DaGFuZ2VkXG4gICAgICAgICAgICA6IGZhbHNlO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2V0TGFzdE1vZGlmaWVkVG9GaWx0ZXIoZm9ybVZhbHVlczogUGFydGlhbDxQcm9jZXNzRmlsdGVyQ2xvdWRNb2RlbD4pIHtcbiAgICAgICAgaWYgKGlzVmFsaWQoZm9ybVZhbHVlcy5sYXN0TW9kaWZpZWRUbykpIHtcbiAgICAgICAgICAgIGZvcm1WYWx1ZXMubGFzdE1vZGlmaWVkVG8gPSBlbmRPZkRheShmb3JtVmFsdWVzLmxhc3RNb2RpZmllZFRvKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgc2V0TGFzdE1vZGlmaWVkRnJvbUZpbHRlcihmb3JtVmFsdWVzOiBQYXJ0aWFsPFByb2Nlc3NGaWx0ZXJDbG91ZE1vZGVsPikge1xuICAgICAgICBpZiAoaXNWYWxpZChmb3JtVmFsdWVzLmxhc3RNb2RpZmllZEZyb20pKSB7XG4gICAgICAgICAgICBmb3JtVmFsdWVzLmxhc3RNb2RpZmllZEZyb20gPSBzdGFydE9mRGF5KGZvcm1WYWx1ZXMubGFzdE1vZGlmaWVkRnJvbSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGNyZWF0ZUZpbHRlckFjdGlvbnMoKTogUHJvY2Vzc0ZpbHRlckFjdGlvbltdIHtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBhY3Rpb25UeXBlOiBQUk9DRVNTX0ZJTFRFUl9BQ1RJT05fU0FWRSxcbiAgICAgICAgICAgICAgICBpY29uOiAnYWRmOnNhdmUnLFxuICAgICAgICAgICAgICAgIHRvb2x0aXA6ICdBREZfQ0xPVURfRURJVF9QUk9DRVNTX0ZJTFRFUi5UT09MX1RJUC5TQVZFJ1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBhY3Rpb25UeXBlOiBQUk9DRVNTX0ZJTFRFUl9BQ1RJT05fU0FWRV9BUyxcbiAgICAgICAgICAgICAgICBpY29uOiAnYWRmOnNhdmUtYXMnLFxuICAgICAgICAgICAgICAgIHRvb2x0aXA6ICdBREZfQ0xPVURfRURJVF9QUk9DRVNTX0ZJTFRFUi5UT09MX1RJUC5TQVZFX0FTJ1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBhY3Rpb25UeXBlOiBQUk9DRVNTX0ZJTFRFUl9BQ1RJT05fREVMRVRFLFxuICAgICAgICAgICAgICAgIGljb246ICdkZWxldGUnLFxuICAgICAgICAgICAgICAgIHRvb2x0aXA6ICdBREZfQ0xPVURfRURJVF9QUk9DRVNTX0ZJTFRFUi5UT09MX1RJUC5ERUxFVEUnXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGFjdGlvblR5cGU6IFBST0NFU1NfRklMVEVSX0FDVElPTl9TQVZFX0RFRkFVTFQsXG4gICAgICAgICAgICAgICAgaWNvbjogJ2FkZjpzYXZlJyxcbiAgICAgICAgICAgICAgICB0b29sdGlwOiAnQURGX0NMT1VEX0VESVRfUFJPQ0VTU19GSUxURVIuVE9PTF9USVAuU0FWRSdcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYWN0aW9uVHlwZTogUFJPQ0VTU19GSUxURVJfQUNUSU9OX1JFU1RPUkUsXG4gICAgICAgICAgICAgICAgaWNvbjogJ3NldHRpbmdzX2JhY2t1cF9yZXN0b3JlJyxcbiAgICAgICAgICAgICAgICB0b29sdGlwOiAnQURGX0NMT1VEX0VESVRfUFJPQ0VTU19GSUxURVIuVE9PTF9USVAuUkVTVE9SRSdcbiAgICAgICAgICAgIH1cbiAgICAgICAgXTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNyZWF0ZUxhc3RNb2RpZmllZFByb3BlcnR5KGZpbHRlck1vZGVsOiBQcm9jZXNzRmlsdGVyQ2xvdWRNb2RlbCk6IFByb2Nlc3NGaWx0ZXJQcm9wZXJ0aWVzW10ge1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGxhYmVsOiAnQURGX0NMT1VEX0VESVRfUFJPQ0VTU19GSUxURVIuTEFCRUwuTEFTVF9NT0RJRklFRF9EQVRFX0ZPUk0nLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdkYXRlJyxcbiAgICAgICAgICAgICAgICBrZXk6ICdsYXN0TW9kaWZpZWRGcm9tJyxcbiAgICAgICAgICAgICAgICB2YWx1ZTogZmlsdGVyTW9kZWwubGFzdE1vZGlmaWVkRnJvbVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBsYWJlbDogJ0FERl9DTE9VRF9FRElUX1BST0NFU1NfRklMVEVSLkxBQkVMLkxBU1RfTU9ESUZJRURfVE8nLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdkYXRlJyxcbiAgICAgICAgICAgICAgICBrZXk6ICdsYXN0TW9kaWZpZWRUbycsXG4gICAgICAgICAgICAgICAgdmFsdWU6IGZpbHRlck1vZGVsLmxhc3RNb2RpZmllZFRvXG4gICAgICAgICAgICB9XG4gICAgICAgIF07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjcmVhdGVQcm9jZXNzU29ydFByb3BlcnRpZXMoKTogUHJvY2Vzc1NvcnRGaWx0ZXJQcm9wZXJ0eVtdIHtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBsYWJlbDogJ0FERl9DTE9VRF9FRElUX1BST0NFU1NfRklMVEVSLkxBQkVMLklEJyxcbiAgICAgICAgICAgICAgICBrZXk6ICdpZCcsXG4gICAgICAgICAgICAgICAgdmFsdWU6ICdpZCdcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbGFiZWw6ICdFbnZpcm9ubWVudElkJyxcbiAgICAgICAgICAgICAgICBrZXk6ICdlbnZpcm9ubWVudElkJyxcbiAgICAgICAgICAgICAgICB2YWx1ZTogJ2Vudmlyb25tZW50SWQnXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGxhYmVsOiAnQURGX0NMT1VEX0VESVRfUFJPQ0VTU19GSUxURVIuTEFCRUwuUFJPQ0VTU19OQU1FJyxcbiAgICAgICAgICAgICAgICBrZXk6ICduYW1lJyxcbiAgICAgICAgICAgICAgICB2YWx1ZTogJ25hbWUnXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGxhYmVsOiAnQURGX0NMT1VEX0VESVRfUFJPQ0VTU19GSUxURVIuTEFCRUwuU1RBUlRfREFURScsXG4gICAgICAgICAgICAgICAga2V5OiAnc3RhcnREYXRlJyxcbiAgICAgICAgICAgICAgICB2YWx1ZTogJ3N0YXJ0RGF0ZSdcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbGFiZWw6ICdBREZfQ0xPVURfRURJVF9QUk9DRVNTX0ZJTFRFUi5MQUJFTC5TVEFUVVMnLFxuICAgICAgICAgICAgICAgIGtleTogJ3N0YXR1cycsXG4gICAgICAgICAgICAgICAgdmFsdWU6ICdzdGF0dXMnXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGxhYmVsOiAnQURGX0NMT1VEX0VESVRfUFJPQ0VTU19GSUxURVIuTEFCRUwuU1RBUlRFRF9CWScsXG4gICAgICAgICAgICAgICAga2V5OiAnaW5pdGlhdG9yJyxcbiAgICAgICAgICAgICAgICB2YWx1ZTogJ2luaXRpYXRvcidcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbGFiZWw6ICdBREZfQ0xPVURfRURJVF9QUk9DRVNTX0ZJTFRFUi5MQUJFTC5BUFBfTkFNRScsXG4gICAgICAgICAgICAgICAga2V5OiAnYXBwTmFtZScsXG4gICAgICAgICAgICAgICAgdmFsdWU6ICdhcHBOYW1lJ1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBsYWJlbDogJ0FERl9DTE9VRF9FRElUX1BST0NFU1NfRklMVEVSLkxBQkVMLkFQUF9WRVJTSU9OJyxcbiAgICAgICAgICAgICAgICBrZXk6ICdhcHBWZXJzaW9uJyxcbiAgICAgICAgICAgICAgICB2YWx1ZTogJ2FwcFZlcnNpb24nXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGxhYmVsOiAnQURGX0NMT1VEX0VESVRfUFJPQ0VTU19GSUxURVIuTEFCRUwuTUFJTl9QUk9DRVNTX0lEJyxcbiAgICAgICAgICAgICAgICBrZXk6ICdwYXJlbnRJZCcsXG4gICAgICAgICAgICAgICAgdmFsdWU6ICdwYXJlbnRJZCdcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbGFiZWw6ICdBREZfQ0xPVURfRURJVF9QUk9DRVNTX0ZJTFRFUi5MQUJFTC5QUk9DRVNTX0lOU19JRCcsXG4gICAgICAgICAgICAgICAga2V5OiAncHJvY2Vzc0luc3RhbmNlSWQnLFxuICAgICAgICAgICAgICAgIHZhbHVlOiAncHJvY2Vzc0luc3RhbmNlSWQnXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGxhYmVsOiAnQURGX0NMT1VEX0VESVRfUFJPQ0VTU19GSUxURVIuTEFCRUwuUFJPQ0VTU19ERUZfSUQnLFxuICAgICAgICAgICAgICAgIGtleTogJ3Byb2Nlc3NEZWZpbml0aW9uSWQnLFxuICAgICAgICAgICAgICAgIHZhbHVlOiAncHJvY2Vzc0RlZmluaXRpb25JZCdcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbGFiZWw6ICdBREZfQ0xPVURfRURJVF9QUk9DRVNTX0ZJTFRFUi5MQUJFTC5QUk9DRVNTX0RFRl9OQU1FJyxcbiAgICAgICAgICAgICAgICBrZXk6ICdwcm9jZXNzRGVmaW5pdGlvbk5hbWUnLFxuICAgICAgICAgICAgICAgIHZhbHVlOiAncHJvY2Vzc0RlZmluaXRpb25OYW1lJ1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBsYWJlbDogJ0FERl9DTE9VRF9FRElUX1BST0NFU1NfRklMVEVSLkxBQkVMLlBST0NFU1NfREVGX0tFWScsXG4gICAgICAgICAgICAgICAga2V5OiAncHJvY2Vzc0RlZmluaXRpb25LZXknLFxuICAgICAgICAgICAgICAgIHZhbHVlOiAncHJvY2Vzc0RlZmluaXRpb25LZXknXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGxhYmVsOiAnQURGX0NMT1VEX0VESVRfUFJPQ0VTU19GSUxURVIuTEFCRUwuTEFTVF9NT0RJRklFRCcsXG4gICAgICAgICAgICAgICAga2V5OiAnbGFzdE1vZGlmaWVkJyxcbiAgICAgICAgICAgICAgICB2YWx1ZTogJ2xhc3RNb2RpZmllZCdcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbGFiZWw6ICdBREZfQ0xPVURfRURJVF9QUk9DRVNTX0ZJTFRFUi5MQUJFTC5CVVNJTkVTU19LRVknLFxuICAgICAgICAgICAgICAgIGtleTogJ2J1c2luZXNzS2V5JyxcbiAgICAgICAgICAgICAgICB2YWx1ZTogJ2J1c2luZXNzS2V5J1xuICAgICAgICAgICAgfVxuICAgICAgICBdO1xuICAgIH1cblxuICAgIHByaXZhdGUgaXNGaWx0ZXJDaGFuZ2VkKG9sZFZhbHVlOiBQcm9jZXNzRmlsdGVyQ2xvdWRNb2RlbCwgbmV3VmFsdWU6IFByb2Nlc3NGaWx0ZXJDbG91ZE1vZGVsKTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IG9sZEpzb24gPSBKU09OLnN0cmluZ2lmeSh0aGlzLnByb2Nlc3NGaWx0ZXJDbG91ZFNlcnZpY2Uud3JpdGVRdWVyeVBhcmFtcyhvbGRWYWx1ZSB8fCB7fSwgdGhpcy5maWx0ZXJQcm9wZXJ0aWVzKSk7XG4gICAgICAgIGNvbnN0IG5ld0pzb24gPSBKU09OLnN0cmluZ2lmeSh0aGlzLnByb2Nlc3NGaWx0ZXJDbG91ZFNlcnZpY2Uud3JpdGVRdWVyeVBhcmFtcyhuZXdWYWx1ZSB8fCB7fSwgdGhpcy5maWx0ZXJQcm9wZXJ0aWVzKSk7XG5cbiAgICAgICAgcmV0dXJuIG9sZEpzb24gIT09IG5ld0pzb247XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjcmVhdGVQcm9jZXNzRmlsdGVyUHJvcGVydGllcyhmaWx0ZXJNb2RlbDogUHJvY2Vzc0ZpbHRlckNsb3VkTW9kZWwpOiBQcm9jZXNzRmlsdGVyUHJvcGVydGllc1tdIHtcbiAgICAgICAgY29uc3QgYXBwVmVyc2lvbk11bHRpcGxlID0gW107XG5cbiAgICAgICAgaWYgKGZpbHRlck1vZGVsLmFwcFZlcnNpb24pIHtcbiAgICAgICAgICAgIGFwcFZlcnNpb25NdWx0aXBsZS5wdXNoKFxuICAgICAgICAgICAgICAgIEFycmF5LmlzQXJyYXkoZmlsdGVyTW9kZWwuYXBwVmVyc2lvbikgPyBmaWx0ZXJNb2RlbC5hcHBWZXJzaW9uLm1hcCgoZW50cnkpID0+IGVudHJ5LnRvU3RyaW5nKCkpIDogYCR7ZmlsdGVyTW9kZWwuYXBwVmVyc2lvbn1gXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBsYWJlbDogJ0FERl9DTE9VRF9FRElUX1BST0NFU1NfRklMVEVSLkxBQkVMLkFQUF9OQU1FJyxcbiAgICAgICAgICAgICAgICB0eXBlOiAnc2VsZWN0JyxcbiAgICAgICAgICAgICAgICBrZXk6ICdhcHBOYW1lJyxcbiAgICAgICAgICAgICAgICB2YWx1ZTogZmlsdGVyTW9kZWwuYXBwTmFtZSB8fCAnJyxcbiAgICAgICAgICAgICAgICBvcHRpb25zOiB0aGlzLmFwcGxpY2F0aW9uTmFtZXNcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbGFiZWw6ICdBREZfQ0xPVURfRURJVF9QUk9DRVNTX0ZJTFRFUi5MQUJFTC5BUFBfVkVSU0lPTicsXG4gICAgICAgICAgICAgICAgdHlwZTogJ251bWJlcicsXG4gICAgICAgICAgICAgICAga2V5OiAnYXBwVmVyc2lvbicsXG4gICAgICAgICAgICAgICAgdmFsdWU6IGZpbHRlck1vZGVsLmFwcFZlcnNpb25cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbGFiZWw6ICdBREZfQ0xPVURfRURJVF9QUk9DRVNTX0ZJTFRFUi5MQUJFTC5BUFBfVkVSU0lPTicsXG4gICAgICAgICAgICAgICAgdHlwZTogJ211bHRpLXNlbGVjdCcsXG4gICAgICAgICAgICAgICAga2V5OiAnYXBwVmVyc2lvbk11bHRpcGxlJyxcbiAgICAgICAgICAgICAgICB2YWx1ZTogYXBwVmVyc2lvbk11bHRpcGxlLFxuICAgICAgICAgICAgICAgIG9wdGlvbnM6IHRoaXMuYXBwVmVyc2lvbk9wdGlvbnNcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbGFiZWw6ICdBREZfQ0xPVURfRURJVF9QUk9DRVNTX0ZJTFRFUi5MQUJFTC5QUk9DRVNTX0lOU19JRCcsXG4gICAgICAgICAgICAgICAgdHlwZTogJ3RleHQnLFxuICAgICAgICAgICAgICAgIGtleTogJ3Byb2Nlc3NJbnN0YW5jZUlkJyxcbiAgICAgICAgICAgICAgICB2YWx1ZTogZmlsdGVyTW9kZWwucHJvY2Vzc0luc3RhbmNlSWQgfHwgJydcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbGFiZWw6ICdBREZfQ0xPVURfRURJVF9QUk9DRVNTX0ZJTFRFUi5MQUJFTC5NQUlOX1BST0NFU1NfSUQnLFxuICAgICAgICAgICAgICAgIHR5cGU6ICd0ZXh0JyxcbiAgICAgICAgICAgICAgICBrZXk6ICdwYXJlbnRJZCcsXG4gICAgICAgICAgICAgICAgdmFsdWU6IGZpbHRlck1vZGVsLnBhcmVudElkXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGxhYmVsOiAnQURGX0NMT1VEX0VESVRfUFJPQ0VTU19GSUxURVIuTEFCRUwuUFJPQ0VTU19OQU1FJyxcbiAgICAgICAgICAgICAgICB0eXBlOiAndGV4dCcsXG4gICAgICAgICAgICAgICAga2V5OiAncHJvY2Vzc05hbWUnLFxuICAgICAgICAgICAgICAgIHZhbHVlOiBmaWx0ZXJNb2RlbC5wcm9jZXNzTmFtZSB8fCAnJ1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBsYWJlbDogJ0FERl9DTE9VRF9FRElUX1BST0NFU1NfRklMVEVSLkxBQkVMLlBST0NFU1NfREVGX05BTUUnLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdzZWxlY3QnLFxuICAgICAgICAgICAgICAgIGtleTogJ3Byb2Nlc3NEZWZpbml0aW9uTmFtZScsXG4gICAgICAgICAgICAgICAgdmFsdWU6IGZpbHRlck1vZGVsLnByb2Nlc3NEZWZpbml0aW9uTmFtZSB8fCAnJyxcbiAgICAgICAgICAgICAgICBvcHRpb25zOiB0aGlzLnByb2Nlc3NEZWZpbml0aW9uTmFtZXNcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbGFiZWw6ICdBREZfQ0xPVURfRURJVF9QUk9DRVNTX0ZJTFRFUi5MQUJFTC5TVEFUVVMnLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdzZWxlY3QnLFxuICAgICAgICAgICAgICAgIGtleTogJ3N0YXR1cycsXG4gICAgICAgICAgICAgICAgdmFsdWU6IGZpbHRlck1vZGVsLnN0YXR1cyB8fCB0aGlzLnN0YXR1c1swXS52YWx1ZSxcbiAgICAgICAgICAgICAgICBvcHRpb25zOiB0aGlzLnN0YXR1c1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBsYWJlbDogJ0FERl9DTE9VRF9FRElUX1BST0NFU1NfRklMVEVSLkxBQkVMLlBST0NFU1NfREVGX0lEJyxcbiAgICAgICAgICAgICAgICB0eXBlOiAndGV4dCcsXG4gICAgICAgICAgICAgICAga2V5OiAncHJvY2Vzc0RlZmluaXRpb25JZCcsXG4gICAgICAgICAgICAgICAgdmFsdWU6IGZpbHRlck1vZGVsLnByb2Nlc3NEZWZpbml0aW9uSWQgfHwgJydcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbGFiZWw6ICdBREZfQ0xPVURfRURJVF9QUk9DRVNTX0ZJTFRFUi5MQUJFTC5QUk9DRVNTX0RFRl9LRVknLFxuICAgICAgICAgICAgICAgIHR5cGU6ICd0ZXh0JyxcbiAgICAgICAgICAgICAgICBrZXk6ICdwcm9jZXNzRGVmaW5pdGlvbktleScsXG4gICAgICAgICAgICAgICAgdmFsdWU6IGZpbHRlck1vZGVsLnByb2Nlc3NEZWZpbml0aW9uS2V5IHx8ICcnXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGxhYmVsOiAnQURGX0NMT1VEX0VESVRfUFJPQ0VTU19GSUxURVIuTEFCRUwuU09SVCcsXG4gICAgICAgICAgICAgICAgdHlwZTogJ3NlbGVjdCcsXG4gICAgICAgICAgICAgICAga2V5OiAnc29ydCcsXG4gICAgICAgICAgICAgICAgdmFsdWU6IGZpbHRlck1vZGVsLnNvcnQgfHwgdGhpcy5jcmVhdGVTb3J0UHJvcGVydGllc1swXS52YWx1ZSxcbiAgICAgICAgICAgICAgICBvcHRpb25zOiB0aGlzLmNyZWF0ZVNvcnRQcm9wZXJ0aWVzXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGxhYmVsOiAnQURGX0NMT1VEX0VESVRfUFJPQ0VTU19GSUxURVIuTEFCRUwuRElSRUNUSU9OJyxcbiAgICAgICAgICAgICAgICB0eXBlOiAnc2VsZWN0JyxcbiAgICAgICAgICAgICAgICBrZXk6ICdvcmRlcicsXG4gICAgICAgICAgICAgICAgdmFsdWU6IGZpbHRlck1vZGVsLm9yZGVyIHx8IHRoaXMuZGlyZWN0aW9uc1swXS52YWx1ZSxcbiAgICAgICAgICAgICAgICBvcHRpb25zOiB0aGlzLmRpcmVjdGlvbnNcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbGFiZWw6ICdBREZfQ0xPVURfRURJVF9QUk9DRVNTX0ZJTFRFUi5MQUJFTC5DT01QTEVURURfREFURScsXG4gICAgICAgICAgICAgICAgdHlwZTogJ2RhdGUnLFxuICAgICAgICAgICAgICAgIGtleTogJ2NvbXBsZXRlZERhdGUnLFxuICAgICAgICAgICAgICAgIHZhbHVlOiBmaWx0ZXJNb2RlbC5jb21wbGV0ZWREYXRlIHx8IGZhbHNlXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGxhYmVsOiAnQURGX0NMT1VEX0VESVRfUFJPQ0VTU19GSUxURVIuTEFCRUwuU1RBUlRFRF9CWScsXG4gICAgICAgICAgICAgICAgdHlwZTogJ3Blb3BsZScsXG4gICAgICAgICAgICAgICAga2V5OiAnaW5pdGlhdG9yJyxcbiAgICAgICAgICAgICAgICB2YWx1ZTogZmlsdGVyTW9kZWwuaW5pdGlhdG9yLFxuICAgICAgICAgICAgICAgIHNlbGVjdGlvbk1vZGU6ICdtdWx0aXBsZSdcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbGFiZWw6ICdBREZfQ0xPVURfRURJVF9QUk9DRVNTX0ZJTFRFUi5MQUJFTC5DT01QTEVURURfREFURScsXG4gICAgICAgICAgICAgICAgdHlwZTogJ2RhdGUtcmFuZ2UnLFxuICAgICAgICAgICAgICAgIGtleTogJ2NvbXBsZXRlZERhdGVSYW5nZScsXG4gICAgICAgICAgICAgICAgYXR0cmlidXRlczogeyBkYXRlVHlwZTogJ2NvbXBsZXRlZERhdGVUeXBlJywgZnJvbTogJ19jb21wbGV0ZWRGcm9tJywgdG86ICdfY29tcGxldGVkVG8nIH0sXG4gICAgICAgICAgICAgICAgdmFsdWU6IHtcbiAgICAgICAgICAgICAgICAgICAgY29tcGxldGVkRGF0ZVR5cGU6IGZpbHRlck1vZGVsLmNvbXBsZXRlZERhdGVUeXBlIHx8IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIF9jb21wbGV0ZWRGcm9tOiBmaWx0ZXJNb2RlbC5jb21wbGV0ZWRGcm9tIHx8IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIF9jb21wbGV0ZWRUbzogZmlsdGVyTW9kZWwuY29tcGxldGVkVG8gfHwgbnVsbFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbGFiZWw6ICdBREZfQ0xPVURfRURJVF9QUk9DRVNTX0ZJTFRFUi5MQUJFTC5TVEFSVEVEX0RBVEUnLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdkYXRlLXJhbmdlJyxcbiAgICAgICAgICAgICAgICBrZXk6ICdzdGFydGVkRGF0ZVJhbmdlJyxcbiAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzOiB7IGRhdGVUeXBlOiAnc3RhcnRlZERhdGVUeXBlJywgZnJvbTogJ19zdGFydEZyb20nLCB0bzogJ19zdGFydFRvJyB9LFxuICAgICAgICAgICAgICAgIHZhbHVlOiB7XG4gICAgICAgICAgICAgICAgICAgIHN0YXJ0ZWREYXRlVHlwZTogZmlsdGVyTW9kZWwuc3RhcnRlZERhdGVUeXBlIHx8IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIF9zdGFydEZyb206IGZpbHRlck1vZGVsLnN0YXJ0RnJvbSB8fCBudWxsLFxuICAgICAgICAgICAgICAgICAgICBfc3RhcnRUbzogZmlsdGVyTW9kZWwuc3RhcnRUbyB8fCBudWxsXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBsYWJlbDogJ0FERl9DTE9VRF9FRElUX1BST0NFU1NfRklMVEVSLkxBQkVMLlNVU1BFTkRFRF9EQVRFJyxcbiAgICAgICAgICAgICAgICB0eXBlOiAnZGF0ZS1yYW5nZScsXG4gICAgICAgICAgICAgICAga2V5OiAnc3VzcGVuZGVkRGF0ZVJhbmdlJyxcbiAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzOiB7IGRhdGVUeXBlOiAnc3VzcGVuZGVkRGF0ZVR5cGUnLCBmcm9tOiAnX3N1c3BlbmRlZEZyb20nLCB0bzogJ19zdXNwZW5kZWRUbycgfSxcbiAgICAgICAgICAgICAgICB2YWx1ZToge1xuICAgICAgICAgICAgICAgICAgICBzdXNwZW5kZWREYXRlVHlwZTogZmlsdGVyTW9kZWwuc3VzcGVuZGVkRGF0ZVR5cGUgfHwgbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgX3N1c3BlbmRlZEZyb206IGZpbHRlck1vZGVsLnN1c3BlbmRlZEZyb20gfHwgbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgX3N1c3BlbmRlZFRvOiBmaWx0ZXJNb2RlbC5zdXNwZW5kZWRUbyB8fCBudWxsXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICBdO1xuICAgIH1cbn1cbiIsIjxtYXQtYWNjb3JkaW9uIFtoaWRlVG9nZ2xlXT1cImlzTG9hZGluZ1wiIGNsYXNzPVwiYWRmLWVkaXQtcHJvY2Vzcy1maWx0ZXJcIj5cbiAgICA8bWF0LWV4cGFuc2lvbi1wYW5lbCAoYWZ0ZXJFeHBhbmQpPVwib25FeHBhbmQoKVwiIChjbG9zZWQpPVwib25DbG9zZSgpXCI+XG4gICAgICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlciAqbmdJZj1cInByb2Nlc3NGaWx0ZXJcIiBpZD1cImFkZi1lZGl0LXByb2Nlc3MtZmlsdGVyLWV4cGFuc2lvbi1oZWFkZXJcIiBjbGFzcz1cImFkZi1lZGl0LXByb2Nlc3MtZmlsdGVyLWhlYWRlclwiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFpc0xvYWRpbmc7IGVsc2UgbG9hZGluZ1RlbXBsYXRlXCI+XG4gICAgICAgICAgICAgICAgPG1hdC1wYW5lbC10aXRsZSAqbmdJZj1cInNob3dQcm9jZXNzRmlsdGVyTmFtZVwiIGlkPVwiYWRmLWVkaXQtcHJvY2Vzcy1maWx0ZXItdGl0bGUtaWRcIiBjbGFzcz1cImFkZi1lZGl0LXByb2Nlc3MtZmlsdGVyLWhlYWRlcl9fdGl0bGVcIj5cbiAgICAgICAgICAgICAgICAgICAge3twcm9jZXNzRmlsdGVyLm5hbWUgfCB0cmFuc2xhdGV9fTwvbWF0LXBhbmVsLXRpdGxlPlxuICAgICAgICAgICAgICAgIDxtYXQtcGFuZWwtZGVzY3JpcHRpb24gIGNsYXNzPVwiYWRmLWVkaXQtcHJvY2Vzcy1maWx0ZXItaGVhZGVyX19kZXNjcmlwdGlvblwiIGlkPVwiYWRmLWVkaXQtcHJvY2Vzcy1maWx0ZXItc3ViLXRpdGxlLWlkXCI+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwic2hvd1RpdGxlXCI+IHt7ICdBREZfQ0xPVURfRURJVF9QUk9DRVNTX0ZJTFRFUi5USVRMRScgfCB0cmFuc2xhdGV9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInNob3dGaWx0ZXJBY3Rpb25zXCIgY2xhc3M9XCJhZGYtY2xvdWQtZWRpdC1wcm9jZXNzLWZpbHRlci1hY3Rpb25zXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwidG9nZ2xlRmlsdGVyQWN0aW9uc1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gKm5nRm9yPVwibGV0IGZpbHRlckFjdGlvbiBvZiBwcm9jZXNzRmlsdGVyQWN0aW9uc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0aXRsZV09XCJmaWx0ZXJBY3Rpb24udG9vbHRpcCB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5kYXRhLWF1dG9tYXRpb24taWRdPVwiJ2FkZi1maWx0ZXItYWN0aW9uLScgKyBmaWx0ZXJBY3Rpb24uYWN0aW9uVHlwZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiaXNEaXNhYmxlZEFjdGlvbihmaWx0ZXJBY3Rpb24pXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJleGVjdXRlRmlsdGVyQWN0aW9ucygkZXZlbnQsIGZpbHRlckFjdGlvbilcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFkZi1pY29uIFt2YWx1ZV09XCJmaWx0ZXJBY3Rpb24uaWNvblwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9tYXQtcGFuZWwtZGVzY3JpcHRpb24+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjbG9hZGluZ1RlbXBsYXRlPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhZGYtY2xvdWQtZWRpdC1wcm9jZXNzLWZpbHRlci1sb2FkaW5nLW1hcmdpblwiPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LXNwaW5uZXIgW2RpYW1ldGVyXT1cIjMwXCIgLz5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvbWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhaXNMb2FkaW5nXCI+XG4gICAgICAgICAgICA8Zm9ybSBbZm9ybUdyb3VwXT1cImVkaXRQcm9jZXNzRmlsdGVyRm9ybVwiICpuZ0lmPVwiZWRpdFByb2Nlc3NGaWx0ZXJGb3JtXCIgY2xhc3M9XCJhZGYtZWRpdC1wcm9jZXNzLWZpbHRlci1jb250ZW50XCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFkZi1lZGl0LXByb2Nlc3MtZmlsdGVyLWZvcm1cIj5cbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgcHJvY2Vzc0ZpbHRlclByb3BlcnR5IG9mIHByb2Nlc3NGaWx0ZXJQcm9wZXJ0aWVzOyB0cmFja0J5OiBmaWx0ZXJUcmFja2VyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgW2Zsb2F0TGFiZWxdPVwiJ2F1dG8nXCIgKm5nSWY9XCJwcm9jZXNzRmlsdGVyUHJvcGVydHkudHlwZSA9PT0gJ3NlbGVjdCdcIiBbYXR0ci5kYXRhLWF1dG9tYXRpb24taWRdPVwicHJvY2Vzc0ZpbHRlclByb3BlcnR5LmtleVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWwgY2xhc3M9XCJhZGYtZWRpdC1wcm9jZXNzLWZpbHRlci1jb250ZW50X19zZWxlY3QtbGFiZWxcIj57e3Byb2Nlc3NGaWx0ZXJQcm9wZXJ0eS5sYWJlbCB8IHRyYW5zbGF0ZX19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1zZWxlY3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Zvcm1Db250cm9sTmFtZV09XCJwcm9jZXNzRmlsdGVyUHJvcGVydHkua2V5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuZGF0YS1hdXRvbWF0aW9uLWlkXT1cIidhZGYtY2xvdWQtZWRpdC1wcm9jZXNzLXByb3BlcnR5LScgKyBwcm9jZXNzRmlsdGVyUHJvcGVydHkua2V5XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgcHJvcGVydHlPcHRpb24gb2YgcHJvY2Vzc0ZpbHRlclByb3BlcnR5Lm9wdGlvbnNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cInByb3BlcnR5T3B0aW9uLnZhbHVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmRhdGEtYXV0b21hdGlvbi1pZF09XCInYWRmLWNsb3VkLWVkaXQtcHJvY2Vzcy1wcm9wZXJ0eS1vcHRpb25zLScgKyBwcm9jZXNzRmlsdGVyUHJvcGVydHkua2V5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPnt7IHByb3BlcnR5T3B0aW9uLmxhYmVsIHwgdHJhbnNsYXRlIH19PC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgW2Zsb2F0TGFiZWxdPVwiJ2F1dG8nXCIgKm5nSWY9XCJwcm9jZXNzRmlsdGVyUHJvcGVydHkudHlwZSA9PT0gJ211bHRpLXNlbGVjdCdcIiBbYXR0ci5kYXRhLWF1dG9tYXRpb24taWRdPVwicHJvY2Vzc0ZpbHRlclByb3BlcnR5LmtleVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWwgY2xhc3M9XCJhZGYtZWRpdC1wcm9jZXNzLWZpbHRlci1jb250ZW50X19zZWxlY3QtbGFiZWxcIj57e3Byb2Nlc3NGaWx0ZXJQcm9wZXJ0eS5sYWJlbCB8IHRyYW5zbGF0ZX19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1zZWxlY3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Zvcm1Db250cm9sTmFtZV09XCJwcm9jZXNzRmlsdGVyUHJvcGVydHkua2V5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuZGF0YS1hdXRvbWF0aW9uLWlkXT1cIidhZGYtY2xvdWQtZWRpdC1wcm9jZXNzLXByb3BlcnR5LScgKyBwcm9jZXNzRmlsdGVyUHJvcGVydHkua2V5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW211bHRpcGxlXT1cInRydWVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IHByb3BlcnR5T3B0aW9uIG9mIHByb2Nlc3NGaWx0ZXJQcm9wZXJ0eS5vcHRpb25zXCIgW3ZhbHVlXT1cInByb3BlcnR5T3B0aW9uLnZhbHVlXCIgW2F0dHIuZGF0YS1hdXRvbWF0aW9uLWlkXT1cIidhZGYtY2xvdWQtZWRpdC1wcm9jZXNzLXByb3BlcnR5LW9wdGlvbnMtJyArIHByb2Nlc3NGaWx0ZXJQcm9wZXJ0eS5rZXlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IHByb3BlcnR5T3B0aW9uLmxhYmVsIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIFtmbG9hdExhYmVsXT1cIidhdXRvJ1wiICpuZ0lmPVwicHJvY2Vzc0ZpbHRlclByb3BlcnR5LnR5cGUgPT09ICd0ZXh0J1wiIFthdHRyLmRhdGEtYXV0b21hdGlvbi1pZF09XCJwcm9jZXNzRmlsdGVyUHJvcGVydHkua2V5XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbCBjbGFzcz1cImFkZi1lZGl0LXByb2Nlc3MtZmlsdGVyLWNvbnRlbnRfX3RleHQtbGFiZWxcIj57e3Byb2Nlc3NGaWx0ZXJQcm9wZXJ0eS5sYWJlbCB8IHRyYW5zbGF0ZX19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmb3JtQ29udHJvbE5hbWVdPVwicHJvY2Vzc0ZpbHRlclByb3BlcnR5LmtleVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuZGF0YS1hdXRvbWF0aW9uLWlkXT1cIidhZGYtY2xvdWQtZWRpdC1wcm9jZXNzLXByb3BlcnR5LScgKyBwcm9jZXNzRmlsdGVyUHJvcGVydHkua2V5XCIvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBbZmxvYXRMYWJlbF09XCInYXV0bydcIiAqbmdJZj1cInByb2Nlc3NGaWx0ZXJQcm9wZXJ0eS50eXBlID09PSAnbnVtYmVyJ1wiIFthdHRyLmRhdGEtYXV0b21hdGlvbi1pZF09XCJwcm9jZXNzRmlsdGVyUHJvcGVydHkua2V5XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmb3JtQ29udHJvbE5hbWVdPVwicHJvY2Vzc0ZpbHRlclByb3BlcnR5LmtleVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJudW1iZXJcIiBtaW49XCIwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJ7e3Byb2Nlc3NGaWx0ZXJQcm9wZXJ0eS5sYWJlbCB8IHRyYW5zbGF0ZX19XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuZGF0YS1hdXRvbWF0aW9uLWlkXT1cIidhZGYtY2xvdWQtZWRpdC1wcm9jZXNzLXByb3BlcnR5LScgKyBwcm9jZXNzRmlsdGVyUHJvcGVydHkua2V5XCIvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBbZmxvYXRMYWJlbF09XCInYXV0bydcIiAqbmdJZj1cInByb2Nlc3NGaWx0ZXJQcm9wZXJ0eS50eXBlID09PSAnZGF0ZSdcIiBbYXR0ci5kYXRhLWF1dG9tYXRpb24taWRdPVwicHJvY2Vzc0ZpbHRlclByb3BlcnR5LmtleVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWw+e3twcm9jZXNzRmlsdGVyUHJvcGVydHkubGFiZWwgfCB0cmFuc2xhdGV9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRJbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cInByb2Nlc3NGaWx0ZXJQcm9wZXJ0eS5rZXlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoa2V5dXApPVwib25EYXRlQ2hhbmdlZCgkYW55KCRldmVudCkudGFyZ2V0LnZhbHVlLCBwcm9jZXNzRmlsdGVyUHJvcGVydHkpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGRhdGVDaGFuZ2UpPVwib25EYXRlQ2hhbmdlZCgkZXZlbnQudmFsdWUsIHByb2Nlc3NGaWx0ZXJQcm9wZXJ0eSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbWF0RGF0ZXBpY2tlcl09XCJkYXRlQ29udHJvbGxlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwie3twcm9jZXNzRmlsdGVyUHJvcGVydHkubGFiZWwgfCB0cmFuc2xhdGV9fVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmRhdGEtYXV0b21hdGlvbi1pZF09XCInYWRmLWNsb3VkLWVkaXQtcHJvY2Vzcy1wcm9wZXJ0eS0nICsgcHJvY2Vzc0ZpbHRlclByb3BlcnR5LmtleVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZGF0ZXBpY2tlci10b2dnbGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0U3VmZml4IFtmb3JdPVwiZGF0ZUNvbnRyb2xsZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmRhdGEtYXV0b21hdGlvbi1pZF09XCInYWRmLWNsb3VkLWVkaXQtcHJvY2Vzcy1wcm9wZXJ0eS1kYXRlLXRvZ2dsZS0nICsgcHJvY2Vzc0ZpbHRlclByb3BlcnR5LmtleVwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1kYXRlcGlja2VyICNkYXRlQ29udHJvbGxlciBbYXR0ci5kYXRhLWF1dG9tYXRpb24taWRdPVwiJ2FkZi1jbG91ZC1lZGl0LXByb2Nlc3MtcHJvcGVydHktZGF0ZS1waWNrZXItJyArIHByb2Nlc3NGaWx0ZXJQcm9wZXJ0eS5rZXlcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhZGYtZWRpdC1wcm9jZXNzLWZpbHRlci1kYXRlLWVycm9yLWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiaGFzRXJyb3IocHJvY2Vzc0ZpbHRlclByb3BlcnR5KVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFkZi1lcnJvci10ZXh0XCI+e3snQURGX0NMT1VEX0VESVRfUFJPQ0VTU19GSUxURVIuRVJST1IuREFURScgfCB0cmFuc2xhdGV9fTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwiYWRmLWVycm9yLWljb25cIj53YXJuaW5nPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICA8YWRmLWNsb3VkLWRhdGUtcmFuZ2UtZmlsdGVyICpuZ0lmPVwicHJvY2Vzc0ZpbHRlclByb3BlcnR5LnR5cGUgPT09ICdkYXRlLXJhbmdlJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Byb2Nlc3NGaWx0ZXJQcm9wZXJ0eV09XCJwcm9jZXNzRmlsdGVyUHJvcGVydHlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtvcHRpb25zXT1cInByb2Nlc3NGaWx0ZXJQcm9wZXJ0eS5kYXRlRmlsdGVyT3B0aW9uc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGRhdGVUeXBlQ2hhbmdlKT1cIm9uRGF0ZVR5cGVDaGFuZ2UoJGV2ZW50LCBwcm9jZXNzRmlsdGVyUHJvcGVydHkpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZGF0ZUNoYW5nZWQpPVwib25EYXRlUmFuZ2VGaWx0ZXJDaGFuZ2VkKCRldmVudCwgcHJvY2Vzc0ZpbHRlclByb3BlcnR5KVwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8YWRmLWNsb3VkLXBlb3BsZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwicHJvY2Vzc0ZpbHRlclByb3BlcnR5LnR5cGUgPT09ICdwZW9wbGUnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcHJlU2VsZWN0VXNlcnNdPVwiaW5pdGlhdG9yT3B0aW9uc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RpdGxlXT1cInByb2Nlc3NGaWx0ZXJQcm9wZXJ0eS5sYWJlbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbGlkYXRlXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthcHBOYW1lXT1cImFwcE5hbWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttb2RlXT1cInByb2Nlc3NGaWx0ZXJQcm9wZXJ0eS5zZWxlY3Rpb25Nb2RlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhbmdlZFVzZXJzKT1cIm9uQ2hhbmdlZFVzZXIoJGV2ZW50LCBwcm9jZXNzRmlsdGVyUHJvcGVydHkpXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Zvcm0+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvbWF0LWV4cGFuc2lvbi1wYW5lbD5cbjwvbWF0LWFjY29yZGlvbj5cbiJdfQ==
802
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWRpdC1wcm9jZXNzLWZpbHRlci1jbG91ZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWIvcHJvY2Vzcy1zZXJ2aWNlcy1jbG91ZC9zcmMvbGliL3Byb2Nlc3MvcHJvY2Vzcy1maWx0ZXJzL2NvbXBvbmVudHMvZWRpdC1wcm9jZXNzLWZpbHRlci9lZGl0LXByb2Nlc3MtZmlsdGVyLWNsb3VkLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYi9wcm9jZXNzLXNlcnZpY2VzLWNsb3VkL3NyYy9saWIvcHJvY2Vzcy9wcm9jZXNzLWZpbHRlcnMvY29tcG9uZW50cy9lZGl0LXByb2Nlc3MtZmlsdGVyL2VkaXQtcHJvY2Vzcy1maWx0ZXItY2xvdWQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQXFCLE1BQU0sRUFBaUIsaUJBQWlCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDaEosT0FBTyxFQUFtQixXQUFXLEVBQTBCLG1CQUFtQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0csT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3JELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRWhGLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLHFEQUFxRCxDQUFDO0FBQzlGLE9BQU8sRUFFSCx1QkFBdUIsRUFJMUIsTUFBTSx5Q0FBeUMsQ0FBQztBQUNqRCxPQUFPLEVBQUUsWUFBWSxFQUFF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c0JBREQsS0FBSztnQkFLTixnQkFBZ0I7c0JBRGYsS0FBSztnQkFLTixjQUFjO3NCQURiLEtBQUs7Z0JBS04sT0FBTztzQkFETixLQUFLO2dCQUtOLGFBQWE7c0JBRFosS0FBSztnQkFLTixlQUFlO3NCQURkLEtBQUs7Z0JBS04saUJBQWlCO3NCQURoQixLQUFLO2dCQUtOLFNBQVM7c0JBRFIsS0FBSztnQkFLTixxQkFBcUI7c0JBRHBCLEtBQUs7Z0JBS04sWUFBWTtzQkFEWCxNQUFNO2dCQUtQLE1BQU07c0JBREwsTUFBTTtnQkFZSCxhQUFhO3NCQURoQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiLyohXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IMKpIDIwMDUtMjAyNSBIeWxhbmQgU29mdHdhcmUsIEluYy4gYW5kIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG5pbXBvcnQgeyBDb21wb25lbnQsIERlc3Ryb3lSZWYsIEV2ZW50RW1pdHRlciwgaW5qZWN0LCBJbnB1dCwgT25DaGFuZ2VzLCBPbkluaXQsIE91dHB1dCwgU2ltcGxlQ2hhbmdlcywgVmlld0VuY2Fwc3VsYXRpb24gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFic3RyYWN0Q29udHJvbCwgRm9ybUJ1aWxkZXIsIEZvcm1Db250cm9sLCBGb3JtR3JvdXAsIFJlYWN0aXZlRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBEYXRlQWRhcHRlciB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2NvcmUnO1xuaW1wb3J0IHsgTWF0RGlhbG9nIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcbmltcG9ydCB7IGRlYm91bmNlVGltZSwgZmlsdGVyLCBmaW5hbGl6ZSwgc3dpdGNoTWFwLCB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEFwcHNQcm9jZXNzQ2xvdWRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vLi4vYXBwL3NlcnZpY2VzL2FwcHMtcHJvY2Vzcy1jbG91ZC5zZXJ2aWNlJztcbmltcG9ydCB7XG4gICAgUHJvY2Vzc0ZpbHRlckFjdGlvbixcbiAgICBQcm9jZXNzRmlsdGVyQ2xvdWRNb2RlbCxcbiAgICBQcm9jZXNzRmlsdGVyT3B0aW9ucyxcbiAgICBQcm9jZXNzRmlsdGVyUHJvcGVydGllcyxcbiAgICBQcm9jZXNzU29ydEZpbHRlclByb3BlcnR5XG59IGZyb20gJy4uLy4uL21vZGVscy9wcm9jZXNzLWZpbHRlci1jbG91ZC5tb2RlbCc7XG5pbXBvcnQgeyBEYXRlRm5zVXRpbHMsIEljb25Db21wb25lbnQsIFRyYW5zbGF0aW9uU2VydmljZSwgVXNlclByZWZlcmVuY2VzU2VydmljZSwgVXNlclByZWZlcmVuY2VWYWx1ZXMgfSBmcm9tICdAYWxmcmVzY28vYWRmLWNvcmUnO1xuaW1wb3J0IHsgUHJvY2Vzc0ZpbHRlckNsb3VkU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3Byb2Nlc3MtZmlsdGVyLWNsb3VkLnNlcnZpY2UnO1xuaW1wb3J0IHsgUHJvY2Vzc0ZpbHRlckRpYWxvZ0Nsb3VkQ29tcG9uZW50IH0gZnJvbSAnLi4vcHJvY2Vzcy1maWx0ZXItZGlhbG9nL3Byb2Nlc3MtZmlsdGVyLWRpYWxvZy1jbG91ZC5jb21wb25lbnQnO1xuaW1wb3J0IHsgUHJvY2Vzc0Nsb3VkU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL3Byb2Nlc3MtY2xvdWQuc2VydmljZSc7XG5pbXBvcnQgeyBEYXRlQ2xvdWRGaWx0ZXJUeXBlLCBEYXRlUmFuZ2VGaWx0ZXIgfSBmcm9tICcuLi8uLi8uLi8uLi9tb2RlbHMvZGF0ZS1jbG91ZC1maWx0ZXIubW9kZWwnO1xuaW1wb3J0IHsgSWRlbnRpdHlVc2VyTW9kZWwgfSBmcm9tICcuLi8uLi8uLi8uLi9wZW9wbGUvbW9kZWxzL2lkZW50aXR5LXVzZXIubW9kZWwnO1xuaW1wb3J0IHsgRW52aXJvbm1lbnQgfSBmcm9tICcuLi8uLi8uLi8uLi9jb21tb24vaW50ZXJmYWNlL2Vudmlyb25tZW50LmludGVyZmFjZSc7XG5pbXBvcnQgeyBlbmRPZkRheSwgaXNWYWxpZCwgc3RhcnRPZkRheSB9IGZyb20gJ2RhdGUtZm5zJztcbmltcG9ydCB7IHRha2VVbnRpbERlc3Ryb3llZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcbmltcG9ydCB7IE1hdFByb2dyZXNzU3Bpbm5lck1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3Byb2dyZXNzLXNwaW5uZXInO1xuaW1wb3J0IHsgVHJhbnNsYXRlTW9kdWxlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyBNYXRCdXR0b25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9idXR0b24nO1xuaW1wb3J0IHsgTmdGb3JPZiwgTmdJZiB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBNYXRFeHBhbnNpb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9leHBhbnNpb24nO1xuaW1wb3J0IHsgTWF0Rm9ybUZpZWxkTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZm9ybS1maWVsZCc7XG5pbXBvcnQgeyBNYXRTZWxlY3RNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zZWxlY3QnO1xuaW1wb3J0IHsgTWF0SW5wdXRNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pbnB1dCc7XG5pbXBvcnQgeyBNYXREYXRlcGlja2VyTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGF0ZXBpY2tlcic7XG5pbXBvcnQgeyBNYXRJY29uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaWNvbic7XG5pbXBvcnQgeyBEYXRlUmFuZ2VGaWx0ZXJDb21wb25lbnQgfSBmcm9tICcuLi8uLi8uLi8uLi9jb21tb24vZGF0ZS1yYW5nZS1maWx0ZXIvZGF0ZS1yYW5nZS1maWx0ZXIuY29tcG9uZW50JztcbmltcG9ydCB7IFBlb3BsZUNsb3VkQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vLi4vcGVvcGxlL2NvbXBvbmVudHMvcGVvcGxlLWNsb3VkLmNvbXBvbmVudCc7XG5cbmV4cG9ydCBjb25zdCBQUk9DRVNTX0ZJTFRFUl9BQ1RJT05fU0FWRSA9ICdzYXZlJztcbmV4cG9ydCBjb25zdCBQUk9DRVNTX0ZJTFRFUl9BQ1RJT05fU0FWRV9BUyA9ICdzYXZlQXMnO1xuZXhwb3J0IGNvbnN0IFBST0NFU1NfRklMVEVSX0FDVElPTl9ERUxFVEUgPSAnZGVsZXRlJztcbmV4cG9ydCBjb25zdCBQUk9DRVNTX0ZJTFRFUl9BQ1RJT05fU0FWRV9ERUZBVUxUID0gJ3NhdmVEZWZhdWx0RmlsdGVyJztcbmV4cG9ydCBjb25zdCBQUk9DRVNTX0ZJTFRFUl9BQ1RJT05fUkVTVE9SRSA9ICdyZXN0b3JlRGVmYXVsdEZpbHRlcic7XG5jb25zdCBERUZBVUxUX1BST0NFU1NfRklMVEVSX1BST1BFUlRJRVMgPSBbJ3N0YXR1cycsICdzb3J0JywgJ29yZGVyJywgJ2xhc3RNb2RpZmllZCddO1xuY29uc3QgREVGQVVMVF9TT1JUX1BST1BFUlRJRVMgPSBbJ2lkJywgJ25hbWUnLCAnc3RhdHVzJywgJ3N0YXJ0RGF0ZSddO1xuY29uc3QgREVGQVVMVF9BQ1RJT05TID0gWydzYXZlJywgJ3NhdmVBcycsICdkZWxldGUnXTtcblxuZXhwb3J0IGludGVyZmFjZSBEcm9wZG93bk9wdGlvbiB7XG4gICAgdmFsdWU6IHN0cmluZztcbiAgICBsYWJlbDogc3RyaW5nO1xufVxuXG5pbnRlcmZhY2UgUHJvY2Vzc0ZpbHRlckZvcm1Qcm9wcyB7XG4gICAgYXBwTmFtZT86IEZvcm1Db250cm9sPHN0cmluZz47XG4gICAgYXBwVmVyc2lvbj86IEZvcm1Db250cm9sPG51bWJlciB8IG51bWJlcltdPjtcbiAgICBwcm9jZXNzRGVmaW5pdGlvbk5hbWU/OiBGb3JtQ29udHJvbDxzdHJpbmc+O1xuICAgIGxhc3RNb2RpZmllZEZyb20/OiBGb3JtQ29udHJvbDxEYXRlPjtcbiAgICBsYXN0TW9kaWZpZWRUbz86IEZvcm1Db250cm9sPERhdGU+O1xuICAgIHN0YXR1cz86IEZvcm1Db250cm9sPHN0cmluZz47XG4gICAgb3JkZXI/OiBGb3JtQ29udHJvbDxzdHJpbmc+O1xuICAgIHNvcnQ/OiBGb3JtQ29udHJvbDxzdHJpbmc+O1xuICAgIGNvbXBsZXRlZERhdGVUeXBlPzogRm9ybUNvbnRyb2w8RGF0ZUNsb3VkRmlsdGVyVHlwZT47XG4gICAgW3g6IHN0cmluZ106IEZvcm1Db250cm9sPHVua25vd24+O1xufVxuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2FkZi1jbG91ZC1lZGl0LXByb2Nlc3MtZmlsdGVyJyxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIGltcG9ydHM6IFtcbiAgICAgICAgSWNvbkNvbXBvbmVudCxcbiAgICAgICAgTWF0UHJvZ3Jlc3NTcGlubmVyTW9kdWxlLFxuICAgICAgICBUcmFuc2xhdGVNb2R1bGUsXG4gICAgICAgIE1hdEJ1dHRvbk1vZHVsZSxcbiAgICAgICAgTmdGb3JPZixcbiAgICAgICAgTmdJZixcbiAgICAgICAgTWF0RXhwYW5zaW9uTW9kdWxlLFxuICAgICAgICBNYXRGb3JtRmllbGRNb2R1bGUsXG4gICAgICAgIE1hdFNlbGVjdE1vZHVsZSxcbiAgICAgICAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcbiAgICAgICAgTWF0SW5wdXRNb2R1bGUsXG4gICAgICAgIE1hdERhdGVwaWNrZXJNb2R1bGUsXG4gICAgICAgIE1hdEljb25Nb2R1bGUsXG4gICAgICAgIERhdGVSYW5nZUZpbHRlckNvbXBvbmVudCxcbiAgICAgICAgUGVvcGxlQ2xvdWRDb21wb25lbnRcbiAgICBdLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9lZGl0LXByb2Nlc3MtZmlsdGVyLWNsb3VkLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9lZGl0LXByb2Nlc3MtZmlsdGVyLWNsb3VkLmNvbXBvbmVudC5zY3NzJ10sXG4gICAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZVxufSlcbmV4cG9ydCBjbGFzcyBFZGl0UHJvY2Vzc0ZpbHRlckNsb3VkQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMge1xuICAgIC8qKiBUaGUgbmFtZSBvZiB0aGUgYXBwbGljYXRpb24uICovXG4gICAgQElucHV0KClcbiAgICBhcHBOYW1lOiBzdHJpbmcgPSAnJztcblxuICAgIC8qKiByb2xlcyB0byBmaWx0ZXIgdGhlIGFwcHMgKi9cbiAgICBASW5wdXQoKVxuICAgIHJvbGU6IHN0cmluZyA9ICcnO1xuXG4gICAgLyoqIElkIG9mIHRoZSBwcm9jZXNzIGluc3RhbmNlIGZpbHRlci4gKi9cbiAgICBASW5wdXQoKVxuICAgIGlkOiBzdHJpbmc7XG5cbiAgICAvKiogTGlzdCBvZiBwcm9jZXNzIGZpbHRlciBwcm9wZXJ0aWVzIHRvIGRpc3BsYXkgKi9cbiAgICBASW5wdXQoKVxuICAgIGZpbHRlclByb3BlcnRpZXMgPSBERUZBVUxUX1BST0NFU1NfRklMVEVSX1BST1BFUlRJRVM7XG5cbiAgICAvKiogTGlzdCBvZiBzb3J0IHByb3BlcnRpZXMgdG8gZGlzcGxheS4gKi9cbiAgICBASW5wdXQoKVxuICAgIHNvcnRQcm9wZXJ0aWVzID0gREVGQVVMVF9TT1JUX1BST1BFUlRJRVM7XG5cbiAgICAvKiogTGlzdCBvZiBzb3J0IGFjdGlvbnMuICovXG4gICAgQElucHV0KClcbiAgICBhY3Rpb25zID0gREVGQVVMVF9BQ1RJT05TO1xuXG4gICAgLyoqIEVudmlyb25tZW50IElEIG9mIHRoZSBhcHBsaWNhdGlvbi4gKi9cbiAgICBASW5wdXQoKVxuICAgIGVudmlyb25tZW50SWQ6IHN0cmluZztcblxuICAgIC8qKiBMaXN0IG9mIGVudmlyb25tZW50cy4gKi9cbiAgICBASW5wdXQoKVxuICAgIGVudmlyb25tZW50TGlzdDogRW52aXJvbm1lbnRbXSA9IFtdO1xuXG4gICAgLyoqIFRvZ2dsZXMgZWRpdGluZyBvZiBwcm9jZXNzIGZpbHRlciBhY3Rpb25zLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2hvd0ZpbHRlckFjdGlvbnMgPSB0cnVlO1xuXG4gICAgLyoqIFRvZ2dsZXMgZWRpdGluZyBvZiB0aGUgcHJvY2VzcyBmaWx0ZXIgdGl0bGUuICovXG4gICAgQElucHV0KClcbiAgICBzaG93VGl0bGUgPSB0cnVlO1xuXG4gICAgLyoqIFRvZ2dsZXMgdGhlIGFwcGVhcmFuY2Ugb2YgdGhlIHByb2Nlc3MgZmlsdGVyIG5hbWUgLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2hvd1Byb2Nlc3NGaWx0ZXJOYW1lID0gdHJ1ZTtcblxuICAgIC8qKiBFbWl0dGVkIHdoZW4gYSBwcm9jZXNzIGluc3RhbmNlIGZpbHRlciBwcm9wZXJ0eSBjaGFuZ2VzLiAqL1xuICAgIEBPdXRwdXQoKVxuICAgIGZpbHRlckNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8UHJvY2Vzc0ZpbHRlckNsb3VkTW9kZWw+KCk7XG5cbiAgICAvKiogRW1pdHRlZCB3aGVuIGEgZmlsdGVyIGFjdGlvbiBvY2N1cnMgaS5lIFNhdmUsIFNhdmVBcywgRGVsZXRlLiAqL1xuICAgIEBPdXRwdXQoKVxuICAgIGFjdGlvbiA9IG5ldyBFdmVudEVtaXR0ZXI8UHJvY2Vzc0ZpbHRlckFjdGlvbj4oKTtcblxuICAgIHByaXZhdGUgX2ZpbHRlcjogUHJvY2Vzc0ZpbHRlckNsb3VkTW9kZWw7XG4gICAgcHJvdGVjdGVkIGZpbHRlckhhc0JlZW5DaGFuZ2VkID0gZmFsc2U7XG5cbiAgICBnZXQgcHJvY2Vzc0ZpbHRlcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ZpbHRlcjtcbiAgICB9XG5cbiAgICAvKiogUHJvY2VzcyBmaWx0ZXIgKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCBwcm9jZXNzRmlsdGVyKHZhbHVlOiBQcm9jZXNzRmlsdGVyQ2xvdWRNb2RlbCkge1xuICAgICAgICBjb25zdCBpc0NoYW5nZWQgPSB0aGlzLmlzRmlsdGVyQ2hhbmdlZCh0aGlzLl9maWx0ZXIsIHZhbHVlKTtcblxuICAgICAgICB0aGlzLl9maWx0ZXIgPSB2YWx1ZTtcblxuICAgICAgICBpZiAodmFsdWU/LmFwcE5hbWUpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwTmFtZSA9IHZhbHVlLmFwcE5hbWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodmFsdWU/LmlkKSB7XG4gICAgICAgICAgICB0aGlzLmlkID0gdmFsdWUuaWQ7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodmFsdWU/LmVudmlyb25tZW50SWQpIHtcbiAgICAgICAgICAgIHRoaXMuZW52aXJvbm1lbnRJZCA9IHZhbHVlLmVudmlyb25tZW50SWQ7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnByb2Nlc3NGaWx0ZXJQcm9wZXJ0aWVzID0gdGhpcy5jcmVhdGVBbmRGaWx0ZXJQcm9wZXJ0aWVzKCk7XG4gICAgICAgIHRoaXMucHJvY2Vzc0ZpbHRlckFjdGlvbnMgPSB0aGlzLmNyZWF0ZUFuZEZpbHRlckFjdGlvbnMoKTtcbiAgICAgICAgdGhpcy5idWlsZEZvcm0odGhpcy5wcm9jZXNzRmlsdGVyUHJvcGVydGllcyk7XG5cbiAgICAgICAgaWYgKGlzQ2hhbmdlZCkge1xuICAgICAgICAgICAgdGhpcy5maWx0ZXJDaGFuZ2UuZW1pdCh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzdGF0dXM6IEFycmF5PERyb3Bkb3duT3B0aW9uPiA9IFtcbiAgICAgICAgeyB2YWx1ZTogJycsIGxhYmVsOiAnQURGX0NMT1VEX1BST0NFU1NfRklMVEVSUy5TVEFUVVMuQUxMJyB9LFxuICAgICAgICB7IHZhbHVlOiAnUlVOTklORycsIGxhYmVsOiAnQURGX0NMT1VEX1BST0NFU1NfRklMVEVSUy5TVEFUVVMuUlVOTklORycgfSxcbiAgICAgICAgeyB2YWx1ZTogJ1NVU1BFTkRFRCcsIGxhYmVsOiAnQURGX0NMT1VEX1BST0NFU1NfRklMVEVSUy5TVEFUVVMuU1VTUEVOREVEJyB9LFxuICAgICAgICB7IHZhbHVlOiAnQ0FOQ0VMTEVEJywgbGFiZWw6ICdBREZfQ0xPVURfUFJPQ0VTU19GSUxURVJTLlNUQVRVUy5DQU5DRUxMRUQnIH0sXG4gICAgICAgIHsgdmFsdWU6ICdDT01QTEVURUQnLCBsYWJlbDogJ0FERl9DTE9VRF9QUk9DRVNTX0ZJTFRFUlMuU1RBVFVTLkNPTVBMRVRFRCcgfVxuICAgIF07XG4gICAgZGlyZWN0aW9uczogQXJyYXk8RHJvcGRvd25PcHRpb24+ID0gW1xuICAgICAgICB7IHZhbHVlOiAnQVNDJywgbGFiZWw6ICdBREZfQ0xPVURfUFJPQ0VTU19GSUxURVJTLkRJUkVDVElPTi5BU0NFTkRJTkcnIH0sXG4gICAgICAgIHsgdmFsdWU6ICdERVNDJywgbGFiZWw6ICdBREZfQ0xPVURfUFJPQ0VTU19GSUxURVJTLkRJUkVDVElPTi5ERVNDRU5ESU5HJyB9XG4gICAgXTtcbiAgICBhY3Rpb25EaXNhYmxlZEZvckRlZmF1bHQgPSBbUFJPQ0VTU19GSUxURVJfQUNUSU9OX1NBVkUsIFBST0NFU1NfRklMVEVSX0FDVElPTl9ERUxFVEVdO1xuICAgIGFwcGxpY2F0aW9uTmFtZXM6IGFueVtdID0gW107XG4gICAgYWxsUHJvY2Vzc0RlZmluaXRpb25OYW1lc09wdGlvbjogRHJvcGRvd25PcHRpb24gPSB7XG4gICAgICAgIGxhYmVsOiAnQURGX0NMT1VEX1BST0NFU1NfRklMVEVSUy5TVEFUVVMuQUxMJyxcbiAgICAgICAgdmFsdWU6ICcnXG4gICAgfTtcbiAgICBwcm9jZXNzRGVmaW5pdGlvbk5hbWVzOiBhbnlbXSA9IFtdO1xuICAgIGVkaXRQcm9jZXNzRmlsdGVyRm9ybTogRm9ybUdyb3VwPFByb2Nlc3NGaWx0ZXJGb3JtUHJvcHM+O1xuICAgIHByb2Nlc3NGaWx0ZXJQcm9wZXJ0aWVzOiBQcm9jZXNzRmlsdGVyUHJvcGVydGllc1tdID0gW107XG4gICAgcHJvY2Vzc0ZpbHRlckFjdGlvbnM6IFByb2Nlc3NGaWx0ZXJBY3Rpb25bXSA9IFtdO1xuICAgIHRvZ2dsZUZpbHRlckFjdGlvbnM6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBhcHBWZXJzaW9uT3B0aW9uczogUHJvY2Vzc0ZpbHRlck9wdGlvbnNbXSA9IFtdO1xuICAgIGluaXRpYXRvck9wdGlvbnM6IElkZW50aXR5VXNlck1vZGVsW10gPSBbXTtcblxuICAgIGlzTG9hZGluZzogYm9vbGVhbiA9IGZhbHNlO1xuICAgIHByaXZhdGUgZmlsdGVyQ2hhbmdlU3ViOiBTdWJzY3JpcHRpb247XG5cbiAgICBwcml2YXRlIHJlYWRvbmx5IGRlc3Ryb3lSZWYgPSBpbmplY3QoRGVzdHJveVJlZik7XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSBmb3JtQnVpbGRlcjogRm9ybUJ1aWxkZXIsXG4gICAgICAgIHB1YmxpYyBkaWFsb2c6IE1hdERpYWxvZyxcbiAgICAgICAgcHJpdmF0ZSBkYXRlQWRhcHRlcjogRGF0ZUFkYXB0ZXI8RGF0ZT4sXG4gICAgICAgIHByaXZhdGUgdXNlclByZWZlcmVuY2VzU2VydmljZTogVXNlclByZWZlcmVuY2VzU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSB0cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGlvblNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgcHJvY2Vzc0ZpbHRlckNsb3VkU2VydmljZTogUHJvY2Vzc0ZpbHRlckNsb3VkU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBhcHBzUHJvY2Vzc0Nsb3VkU2VydmljZTogQXBwc1Byb2Nlc3NDbG91ZFNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgcHJvY2Vzc0Nsb3VkU2VydmljZTogUHJvY2Vzc0Nsb3VkU2VydmljZVxuICAgICkge31cblxuICAgIG5nT25Jbml0KCkge1xuICAgICAgICB0aGlzLnVzZXJQcmVmZXJlbmNlc1NlcnZpY2VcbiAgICAgICAgICAgIC5zZWxlY3QoVXNlclByZWZlcmVuY2VWYWx1ZXMuTG9jYWxlKVxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZikpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChsb2NhbGUpID0+IHRoaXMuZGF0ZUFkYXB0ZXIuc2V0TG9jYWxlKGxvY2FsZSkpO1xuICAgIH1cblxuICAgIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcbiAgICAgICAgY29uc3QgaWQgPSBjaGFuZ2VzWydpZCddO1xuICAgICAgICBpZiAoaWQgJiYgaWQuY3VycmVudFZhbHVlICE9PSBpZC5wcmV2aW91c1ZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLnJldHJpZXZlUHJvY2Vzc0ZpbHRlckFuZEJ1aWxkRm9ybSgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGZpbHRlclRyYWNrZXIoX2luZGV4OiBudW1iZXIsIGl0ZW06IFByb2Nlc3NGaWx0ZXJQcm9wZXJ0aWVzKSB7XG4gICAgICAgIHJldHVybiBpdGVtLmtleTtcbiAgICB9XG5cbiAgICBidWlsZEZvcm0ocHJvY2Vzc0ZpbHRlclByb3BlcnRpZXM6IFByb2Nlc3NGaWx0ZXJQcm9wZXJ0aWVzW10pIHtcbiAgICAgICAgdGhpcy5lZGl0UHJvY2Vzc0ZpbHRlckZvcm0gPSB0aGlzLmZvcm1CdWlsZGVyLmdyb3VwKHRoaXMuZ2V0Rm9ybUNvbnRyb2xzQ29uZmlnKHByb2Nlc3NGaWx0ZXJQcm9wZXJ0aWVzKSk7XG4gICAgICAgIHRoaXMub25GaWx0ZXJDaGFuZ2UoKTtcbiAgICB9XG5cbiAgICBnZXRGb3JtQ29udHJvbHNDb25maWcocHJvY2Vzc0ZpbHRlclByb3BlcnRpZXM6IFByb2Nlc3NGaWx0ZXJQcm9wZXJ0aWVzW10pOiBhbnkge1xuICAgICAgICBjb25zdCBwcm9wZXJ0aWVzID0gcHJvY2Vzc0ZpbHRlclByb3BlcnRpZXMubWFwKChwcm9wZXJ0eSkgPT4ge1xuICAgICAgICAgICAgaWYgKHByb3BlcnR5LmF0dHJpYnV0ZXMpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRBdHRyaWJ1dGVzQ29udHJvbENvbmZpZyhwcm9wZXJ0eSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiB7IFtwcm9wZXJ0eS5rZXldOiBwcm9wZXJ0eS52YWx1ZSB9O1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHByb3BlcnRpZXMucmVkdWNlKChyZXN1bHQsIGN1cnJlbnQpID0+IE9iamVjdC5hc3NpZ24ocmVzdWx0LCBjdXJyZW50KSwge30pO1xuICAgIH1cblxuICAgIGdldCBsYXN0TW9kaWZpZWRGcm9tKCk6IEFic3RyYWN0Q29udHJvbDxEYXRlPiB7XG4gICAgICAgIHJldHVybiB0aGlzLmVkaXRQcm9jZXNzRmlsdGVyRm9ybS5nZXQoJ2xhc3RNb2RpZmllZEZyb20nKTtcbiAgICB9XG5cbiAgICBnZXQgbGFzdE1vZGlmaWVkVG8oKTogQWJzdHJhY3RDb250cm9sPERhdGU+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZWRpdFByb2Nlc3NGaWx0ZXJGb3JtLmdldCgnbGFzdE1vZGlmaWVkVG8nKTtcbiAgICB9XG5cbiAgICBnZXQgY29tcGxldGVkRGF0ZVR5cGUoKTogQWJzdHJhY3RDb250cm9sPERhdGVDbG91ZEZpbHRlclR5cGU+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZWRpdFByb2Nlc3NGaWx0ZXJGb3JtLmdldCgnY29tcGxldGVkRGF0ZVR5cGUnKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldEF0dHJpYnV0ZXNDb250cm9sQ29uZmlnKHByb3BlcnR5OiBQcm9jZXNzRmlsdGVyUHJvcGVydGllcykge1xuICAgICAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyhwcm9wZXJ0eS5hdHRyaWJ1dGVzKS5yZWR1Y2UoKHJlc3VsdCwga2V5KSA9PiB7XG4gICAgICAgICAgICByZXN1bHRba2V5XSA9IHByb3BlcnR5LnZhbHVlW2tleV07XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9LCB7fSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRmV0Y2hlcyBwcm9jZXNzIGluc3RhbmNlIGZpbHRlciBieSBhcHBsaWNhdGlvbiBuYW1lIGFuZCBmaWx0ZXIgaWQgYW5kIGNyZWF0ZXMgZmlsdGVyIHByb3BlcnRpZXMsIGJ1aWxkIGZvcm1cbiAgICAgKi9cbiAgICByZXRyaWV2ZVByb2Nlc3NGaWx0ZXJBbmRCdWlsZEZvcm0oKSB7XG4gICAgICAgIHRoaXMuaXNMb2FkaW5nID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5wcm9jZXNzRmlsdGVyQ2xvdWRTZXJ2aWNlXG4gICAgICAgICAgICAuZ2V0RmlsdGVyQnlJZCh0aGlzLmFwcE5hbWUsIHRoaXMuaWQpXG4gICAgICAgICAgICAucGlwZShmaW5hbGl6ZSgoKSA9PiAodGhpcy5pc0xvYWRpbmcgPSBmYWxzZSkpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgocmVzcG9uc2UpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmZpbHRlckhhc0JlZW5DaGFuZ2VkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdGhpcy5wcm9jZXNzRmlsdGVyID0gbmV3IFByb2Nlc3NGaWx0ZXJDbG91ZE1vZGVsKE9iamVjdC5hc3NpZ24oe30sIHJlc3BvbnNlIHx8IHt9LCB0aGlzLnByb2Nlc3NGaWx0ZXIgfHwge30pKTtcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrIHByb2Nlc3MgaW5zdGFuY2UgZmlsdGVyIGNoYW5nZXNcbiAgICAgKi9cbiAgICBvbkZpbHRlckNoYW5nZSgpIHtcbiAgICAgICAgaWYgKHRoaXMuZmlsdGVyQ2hhbmdlU3ViKSB7XG4gICAgICAgICAgICB0aGlzLmZpbHRlckNoYW5nZVN1Yi51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgdGhpcy5maWx0ZXJDaGFuZ2VTdWIgPSBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5maWx0ZXJDaGFuZ2VTdWIgPSB0aGlzLmVkaXRQcm9jZXNzRmlsdGVyRm9ybS52YWx1ZUNoYW5nZXNcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIGRlYm91bmNlVGltZSg1MDApLFxuICAgICAgICAgICAgICAgIGZpbHRlcigoKSA9PiB0aGlzLmlzRm9ybVZhbGlkKCkpLFxuICAgICAgICAgICAgICAgIHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChmb3JtVmFsdWVzOiBQYXJ0aWFsPFByb2Nlc3NGaWx0ZXJDbG91ZE1vZGVsPikgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0TGFzdE1vZGlmaWVkRnJvbUZpbHRlcihmb3JtVmFsdWVzKTtcbiAgICAgICAgICAgICAgICB0aGlzLnNldExhc3RNb2RpZmllZFRvRmlsdGVyKGZvcm1WYWx1ZXMpO1xuXG4gICAgICAgICAgICAgICAgY29uc3QgbmV3VmFsdWUgPSBuZXcgUHJvY2Vzc0ZpbHRlckNsb3VkTW9kZWwoT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5wcm9jZXNzRmlsdGVyLCBmb3JtVmFsdWVzKSk7XG4gICAgICAgICAgICAgICAgY29uc3QgY2hhbmdlZCA9ICF0aGlzLmNvbXBhcmVGaWx0ZXJzKG5ld1ZhbHVlLCB0aGlzLnByb2Nlc3NGaWx0ZXIpO1xuICAgICAgICAgICAgICAgIHRoaXMuZmlsdGVySGFzQmVlbkNoYW5nZWQgPSBjaGFuZ2VkO1xuXG4gICAgICAgICAgICAgICAgaWYgKGNoYW5nZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZmlsdGVyID0gbmV3VmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZmlsdGVyQ2hhbmdlLmVtaXQobmV3VmFsdWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIGNyZWF0ZUFuZEZpbHRlclByb3BlcnRpZXMoKTogUHJvY2Vzc0ZpbHRlclByb3BlcnRpZXNbXSB7XG4gICAgICAgIHRoaXMuY2hlY2tNYW5kYXRvcnlGaWx0ZXJQcm9wZXJ0aWVzKCk7XG5cbiAgICAgICAgaWYgKHRoaXMuZmlsdGVyUHJvcGVydGllcy5pbmNsdWRlcygnYXBwTmFtZScpKSB7XG4gICAgICAgICAgICB0aGlzLmdldERlcGxveWVkQXBwbGljYXRpb25zKCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5maWx0ZXJQcm9wZXJ0aWVzLmluY2x1ZGVzKCdwcm9jZXNzRGVmaW5pdGlvbk5hbWUnKSkge1xuICAgICAgICAgICAgdGhpcy5nZXRQcm9jZXNzRGVmaW5pdGlvbnMoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmZpbHRlclByb3BlcnRpZXMuaW5jbHVkZXMoJ2FwcFZlcnNpb25NdWx0aXBsZScpKSB7XG4gICAgICAgICAgICB0aGlzLmdldEFwcFZlcnNpb25PcHRpb25zKCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5maWx0ZXJQcm9wZXJ0aWVzLmluY2x1ZGVzKCdpbml0aWF0b3InKSkge1xuICAgICAgICAgICAgdGhpcy5pbml0aWF0b3JPcHRpb25zID0gdGhpcy5wcm9jZXNzRmlsdGVyLmluaXRpYXRvclxuICAgICAgICAgICAgICAgID8gdGhpcy5wcm9jZXNzRmlsdGVyLmluaXRpYXRvci5zcGxpdCgnLCcpLm1hcCgodXNlcm5hbWUpID0+IE9iamVjdC5hc3NpZ24oe30sIHsgdXNlcm5hbWUgfSkpXG4gICAgICAgICAgICAgICAgOiBbXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGRlZmF1bHRQcm9wZXJ0aWVzID0gdGhpcy5jcmVhdGVQcm9jZXNzRmlsdGVyUHJvcGVydGllcyh0aGlzLnByb2Nlc3NGaWx0ZXIpO1xuICAgICAgICBsZXQgZmlsdGVyZWRQcm9wZXJ0aWVzID0gZGVmYXVsdFByb3BlcnRpZXMuZmlsdGVyKChmaWx0ZXJQcm9wZXJ0eSkgPT4gdGhpcy5pc1ZhbGlkUHJvcGVydHkodGhpcy5maWx0ZXJQcm9wZXJ0aWVzLCBmaWx0ZXJQcm9wZXJ0eS5rZXkpKTtcblxuICAgICAgICBpZiAoIXRoaXMuZmlsdGVyUHJvcGVydGllcy5pbmNsdWRlcygnc29ydCcpKSB7XG4gICAgICAgICAgICBmaWx0ZXJlZFByb3BlcnRpZXMgPSBmaWx0ZXJlZFByb3BlcnRpZXMuZmlsdGVyKChwcm9wZXJ0eSkgPT4gcHJvcGVydHkua2V5ICE9PSAnb3JkZXInKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmZpbHRlclByb3BlcnRpZXMuaW5jbHVkZXMoJ2xhc3RNb2RpZmllZCcpKSB7XG4gICAgICAgICAgICBmaWx0ZXJlZFByb3BlcnRpZXMgPSBbLi4uZmlsdGVyZWRQcm9wZXJ0aWVzLCAuLi50aGlzLmNyZWF0ZUxhc3RNb2RpZmllZFByb3BlcnR5KHRoaXMucHJvY2Vzc0ZpbHRlcildO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGZpbHRlcmVkUHJvcGVydGllcztcbiAgICB9XG5cbiAgICBjaGVja01hbmRhdG9yeUZpbHRlclByb3BlcnRpZXMoKSB7XG4gICAgICAgIGlmICh0aGlzLmZpbHRlclByb3BlcnRpZXMgPT09IHVuZGVmaW5lZCB8fCB0aGlzLmZpbHRlclByb3BlcnRpZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICB0aGlzLmZpbHRlclByb3BlcnRpZXMgPSBERUZBVUxUX1BST0NFU1NfRklMVEVSX1BST1BFUlRJRVM7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGlzVmFsaWRQcm9wZXJ0eShmaWx0ZXJQcm9wZXJ0aWVzOiBzdHJpbmdbXSwga2V5OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIGZpbHRlclByb3BlcnRpZXMgPyBmaWx0ZXJQcm9wZXJ0aWVzLmluZGV4T2Yoa2V5KSA+PSAwIDogdHJ1ZTtcbiAgICB9XG5cbiAgICBnZXQgY3JlYXRlU29ydFByb3BlcnRpZXMoKTogUHJvY2Vzc0ZpbHRlck9wdGlvbnNbXSB7XG4gICAgICAgIHRoaXMuY2hlY2tNYW5kYXRvcnlTb3J0UHJvcGVydGllcygpO1xuICAgICAgICBjb25zdCBkZWZhdWx0U29ydFByb3BlcnRpZXMgPSB0aGlzLmNyZWF0ZVByb2Nlc3NTb3J0UHJvcGVydGllcygpO1xuICAgICAgICByZXR1cm4gZGVmYXVsdFNvcnRQcm9wZXJ0aWVzLmZpbHRlcigoc29ydFByb3BlcnR5KSA9PiB0aGlzLmlzVmFsaWRQcm9wZXJ0eSh0aGlzLnNvcnRQcm9wZXJ0aWVzLCBzb3J0UHJvcGVydHkua2V5KSk7XG4gICAgfVxuXG4gICAgZ2V0QXBwVmVyc2lvbk9wdGlvbnMoKSB7XG4gICAgICAgIHRoaXMucHJvY2Vzc0Nsb3VkU2VydmljZS5nZXRBcHBsaWNhdGlvblZlcnNpb25zKHRoaXMuYXBwTmFtZSkuc3Vic2NyaWJlKChhcHBWZXJzaW9ucykgPT4ge1xuICAgICAgICAgICAgdGhpcy5hcHBWZXJzaW9uT3B0aW9ucy5sZW5ndGggPSAwO1xuICAgICAgICAgICAgYXBwVmVyc2lvbnMuZm9yRWFjaCgoYXBwVmVyc2lvbikgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuYXBwVmVyc2lvbk9wdGlvbnMucHVzaCh7IGxhYmVsOiBhcHBWZXJzaW9uLmVudHJ5LnZlcnNpb24sIHZhbHVlOiBhcHBWZXJzaW9uLmVudHJ5LnZlcnNpb24gfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgY2hlY2tNYW5kYXRvcnlTb3J0UHJvcGVydGllcygpIHtcbiAgICAgICAgaWYgKHRoaXMuc29ydFByb3BlcnRpZXMgPT09IHVuZGVmaW5lZCB8fCB0aGlzLnNvcnRQcm9wZXJ0aWVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgdGhpcy5zb3J0UHJvcGVydGllcyA9IERFRkFVTFRfU09SVF9QUk9QRVJUSUVTO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY3JlYXRlQW5kRmlsdGVyQWN0aW9ucygpIHtcbiAgICAgICAgdGhpcy5jaGVja01hbmRhdG9yeUFjdGlvbnMoKTtcbiAgICAgICAgY29uc3QgYWN0aW9ucyA9IHRoaXMuY3JlYXRlRmlsdGVyQWN0aW9ucygpO1xuICAgICAgICByZXR1cm4gYWN0aW9ucy5maWx0ZXIoKGFjdGlvbikgPT4gdGhpcy5pc1ZhbGlkQWN0aW9uKHRoaXMuYWN0aW9ucywgYWN0aW9uKSk7XG4gICAgfVxuXG4gICAgY2hlY2tNYW5kYXRvcnlBY3Rpb25zKCkge1xuICAgICAgICBpZiAodGhpcy5hY3Rpb25zID09PSB1bmRlZmluZWQgfHwgdGhpcy5hY3Rpb25zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgdGhpcy5hY3Rpb25zID0gREVGQVVMVF9BQ1RJT05TO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpc1ZhbGlkQWN0aW9uKGFjdGlvbnM6IHN0cmluZ1tdLCBhY3Rpb246IFByb2Nlc3NGaWx0ZXJBY3Rpb24pOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIGFjdGlvbnMgPyBhY3Rpb25zLmluZGV4T2YoYWN0aW9uLmFjdGlvblR5cGUpID49IDAgOiB0cnVlO1xuICAgIH1cblxuICAgIGlzRm9ybVZhbGlkKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5lZGl0UHJvY2Vzc0ZpbHRlckZvcm0udmFsaWQ7XG4gICAgfVxuXG4gICAgZ2V0UHJvcGVydHlDb250cm9sbGVyKHByb3BlcnR5OiBQcm9jZXNzRmlsdGVyUHJvcGVydGllcyk6IEFic3RyYWN0Q29udHJvbCB7XG4gICAgICAgIHJldHVybiB0aGlzLmVkaXRQcm9jZXNzRmlsdGVyRm9ybS5nZXQocHJvcGVydHkua2V5KTtcbiAgICB9XG5cbiAgICBvbkRhdGVDaGFuZ2VkKG5ld0RhdGVWYWx1ZTogRGF0ZSB8IHN0cmluZywgZGF0ZVByb3BlcnR5OiBQcm9jZXNzRmlsdGVyUHJvcGVydGllcykge1xuICAgICAgICBpZiAobmV3RGF0ZVZhbHVlKSB7XG4gICAgICAgICAgICBjb25zdCBjb250cm9sbGVyID0gdGhpcy5nZXRQcm9wZXJ0eUNvbnRyb2xsZXIoZGF0ZVByb3BlcnR5KTtcblxuICAgICAgICAgICAgbGV0IGRhdGUgPSBuZXdEYXRlVmFsdWU7XG5cbiAgICAgICAgICAgIGlmICh0eXBlb2YgbmV3RGF0ZVZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgIGRhdGUgPSBEYXRlRm5zVXRpbHMucGFyc2VEYXRlKG5ld0RhdGVWYWx1ZSwgJ2RkL01NL3l5eXknKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGlzVmFsaWQoZGF0ZSkpIHtcbiAgICAgICAgICAgICAgICBjb250cm9sbGVyLnNldFZhbHVlKGRhdGUpO1xuICAgICAgICAgICAgICAgIGNvbnRyb2xsZXIuc2V0RXJyb3JzKG51bGwpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb250cm9sbGVyLnNldFZhbHVlKGRhdGUpO1xuICAgICAgICAgICAgICAgIGNvbnRyb2xsZXIuc2V0RXJyb3JzKHsgaW52YWxpZDogdHJ1ZSB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uRGF0ZVR5cGVDaGFuZ2UoZGF0ZVR5cGU6IERhdGVDbG91ZEZpbHRlclR5cGUsIHByb3BlcnR5OiBQcm9jZXNzRmlsdGVyUHJvcGVydGllcykge1xuICAgICAgICB0aGlzLmVkaXRQcm9jZXNzRmlsdGVyRm9ybS5nZXQocHJvcGVydHkuYXR0cmlidXRlcy5kYXRlVHlwZSkuc2V0VmFsdWUoZGF0ZVR5cGUpO1xuICAgIH1cblxuICAgIG9uRGF0ZVJhbmdlRmlsdGVyQ2hhbmdlZChkYXRlUmFuZ2U6IERhdGVSYW5nZUZpbHRlciwgcHJvcGVydHk6IFByb2Nlc3NGaWx0ZXJQcm9wZXJ0aWVzKSB7XG4gICAgICAgIHRoaXMuZWRpdFByb2Nlc3NGaWx0ZXJGb3JtLmdldChwcm9wZXJ0eS5hdHRyaWJ1dGVzPy5mcm9tKS5zZXRWYWx1ZShkYXRlUmFuZ2Uuc3RhcnREYXRlID8gZGF0ZVJhbmdlLnN0YXJ0RGF0ZSA6IG51bGwpO1xuICAgICAgICB0aGlzLmVkaXRQcm9jZXNzRmlsdGVyRm9ybS5nZXQocHJvcGVydHkuYXR0cmlidXRlcz8udG8pLnNldFZhbHVlKGRhdGVSYW5nZS5lbmREYXRlID8gZGF0ZVJhbmdlLmVuZERhdGUgOiBudWxsKTtcbiAgICAgICAgdGhpcy5lZGl0UHJvY2Vzc0ZpbHRlckZvcm0uZ2V0KHByb3BlcnR5LmF0dHJpYnV0ZXMuZGF0ZVR5cGUpLnNldFZhbHVlKERhdGVDbG91ZEZpbHRlclR5cGUuUkFOR0UpO1xuICAgIH1cblxuICAgIG9uQ2hhbmdlZFVzZXIodXNlcnM6IElkZW50aXR5VXNlck1vZGVsW10sIHByb2Nlc3NQcm9wZXJ0eTogUHJvY2Vzc0ZpbHRlclByb3BlcnRpZXMpIHtcbiAgICAgICAgdGhpcy5nZXRQcm9wZXJ0eUNvbnRyb2xsZXIocHJvY2Vzc1Byb3BlcnR5KS5zZXRWYWx1ZSh1c2Vycy5tYXAoKHVzZXIpID0+IHVzZXIudXNlcm5hbWUpLmpvaW4oJywnKSk7XG4gICAgfVxuXG4gICAgaGFzRXJyb3IocHJvcGVydHk6IFByb2Nlc3NGaWx0ZXJQcm9wZXJ0aWVzKTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IGNvbnRyb2xsZXIgPSB0aGlzLmdldFByb3BlcnR5Q29udHJvbGxlcihwcm9wZXJ0eSk7XG4gICAgICAgIHJldHVybiAhIWNvbnRyb2xsZXIuZXJyb3JzPy5pbnZhbGlkO1xuICAgIH1cblxuICAgIGNvbXBhcmVGaWx0ZXJzKGVkaXRlZFF1ZXJ5OiBQcm9jZXNzRmlsdGVyQ2xvdWRNb2RlbCwgY3VycmVudFF1ZXJ5OiBQcm9jZXNzRmlsdGVyQ2xvdWRNb2RlbCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoZWRpdGVkUXVlcnkpLnRvTG93ZXJDYXNlKCkgPT09IEpTT04uc3RyaW5naWZ5KGN1cnJlbnRRdWVyeSkudG9Mb3dlckNhc2UoKTtcbiAgICB9XG5cbiAgICBnZXREZXBsb3llZEFwcGxpY2F0aW9ucygpIHtcbiAgICAgICAgdGhpcy5hcHBzUHJvY2Vzc0Nsb3VkU2VydmljZS5nZXREZXBsb3llZEFwcGxpY2F0aW9uc0J5U3RhdHVzKCdERVBMT1lFRCcsIHRoaXMucm9sZSkuc3Vic2NyaWJlKChhcHBsaWNhdGlvbnMpID0+IHtcbiAgICAgICAgICAgIGlmIChhcHBsaWNhdGlvbnMgJiYgYXBwbGljYXRpb25zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFwcGxpY2F0aW9uTmFtZXMubGVuZ3RoID0gMDtcbiAgICAgICAgICAgICAgICBhcHBsaWNhdGlvbnMubWFwKChhcHBsaWNhdGlvbikgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmFwcGxpY2F0aW9uTmFtZXMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogdGhpcy5hcHBzUHJvY2Vzc0Nsb3VkU2VydmljZS5nZXRBcHBsaWNhdGlvbkxhYmVsKGFwcGxpY2F0aW9uLCB0aGlzLmVudmlyb25tZW50TGlzdCksXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogYXBwbGljYXRpb24ubmFtZVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgZ2V0UHJvY2Vzc0RlZmluaXRpb25zKCkge1xuICAgICAgICB0aGlzLnByb2Nlc3NDbG91ZFNlcnZpY2UuZ2V0UHJvY2Vzc0RlZmluaXRpb25zKHRoaXMuYXBwTmFtZSkuc3Vic2NyaWJlKChwcm9jZXNzRGVmaW5pdGlvbnMpID0+IHtcbiAgICAgICAgICAgIGlmIChwcm9jZXNzRGVmaW5pdGlvbnMgJiYgcHJvY2Vzc0RlZmluaXRpb25zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICB0aGlzLnByb2Nlc3NEZWZpbml0aW9uTmFtZXMubGVuZ3RoID0gMDtcbiAgICAgICAgICAgICAgICB0aGlzLnByb2Nlc3NEZWZpbml0aW9uTmFtZXMucHVzaCh0aGlzLmFsbFByb2Nlc3NEZWZpbml0aW9uTmFtZXNPcHRpb24pO1xuICAgICAgICAgICAgICAgIHByb2Nlc3NEZWZpbml0aW9ucy5tYXAoKHByb2Nlc3NEZWZpbml0aW9uKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucHJvY2Vzc0RlZmluaXRpb25OYW1lcy5wdXNoKHsgbGFiZWw6IHByb2Nlc3NEZWZpbml0aW9uLm5hbWUsIHZhbHVlOiBwcm9jZXNzRGVmaW5pdGlvbi5uYW1lIH0pO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBleGVjdXRlRmlsdGVyQWN0aW9ucyhldmVudDogRXZlbnQsIGFjdGlvbjogUHJvY2Vzc0ZpbHRlckFjdGlvbik6IHZvaWQge1xuICAgICAgICBpZiAoYWN0aW9uLmFjdGlvblR5cGUgPT09IFBST0NFU1NfRklMVEVSX0FDVElPTl9TQVZFKSB7XG4gICAgICAgICAgICB0aGlzLnNhdmUoYWN0aW9uKTtcbiAgICAgICAgfSBlbHNlIGlmIChhY3Rpb24uYWN0aW9uVHlwZSA9PT0gUFJPQ0VTU19GSUxURVJfQUNUSU9OX1NBVkVfQVMpIHtcbiAgICAgICAgICAgIHRoaXMuc2F2ZUFzKGFjdGlvbik7XG4gICAgICAgIH0gZWxzZSBpZiAoYWN0aW9uLmFjdGlvblR5cGUgPT09IFBST0NFU1NfRklMVEVSX0FDVElPTl9ERUxFVEUpIHtcbiAgICAgICAgICAgIHRoaXMuZGVsZXRlKGFjdGlvbik7XG4gICAgICAgIH0gZWxzZSBpZiAoYWN0aW9uLmFjdGlvblR5cGUgPT09IFBST0NFU1NfRklMVEVSX0FDVElPTl9TQVZFX0RFRkFVTFQpIHtcbiAgICAgICAgICAgIHRoaXMuc2F2ZShhY3Rpb24pO1xuICAgICAgICB9IGVsc2UgaWYgKGFjdGlvbi5hY3Rpb25UeXBlID09PSBQUk9DRVNTX0ZJTFRFUl9BQ1RJT05fUkVTVE9SRSkge1xuICAgICAgICAgICAgdGhpcy5yZXNldChhY3Rpb24pO1xuICAgICAgICB9XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIH1cblxuICAgIHNhdmUoc2F2ZUFjdGlvbjogUHJvY2Vzc0ZpbHRlckFjdGlvbikge1xuICAgICAgICB0aGlzLnByb2Nlc3NGaWx0ZXJDbG91ZFNlcnZpY2UudXBkYXRlRmlsdGVyKHRoaXMucHJvY2Vzc0ZpbHRlcikuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIHNhdmVBY3Rpb24uZmlsdGVyID0gdGhpcy5wcm9jZXNzRmlsdGVyO1xuICAgICAgICAgICAgdGhpcy5maWx0ZXJIYXNCZWVuQ2hhbmdlZCA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5hY3Rpb24uZW1pdChzYXZlQWN0aW9uKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRGVsZXRlIGEgcHJvY2VzcyBpbnN0YW5jZSBmaWx0ZXJcbiAgICAgKlxuICAgICAqIEBwYXJhbSBkZWxldGVBY3Rpb24gZmlsdGVyIGFjdGlvblxuICAgICAqL1xuICAgIGRlbGV0ZShkZWxldGVBY3Rpb246IFByb2Nlc3NGaWx0ZXJBY3Rpb24pIHtcbiAgICAgICAgdGhpcy5wcm9jZXNzRmlsdGVyQ2xvdWRTZXJ2aWNlXG4gICAgICAgICAgICAuZGVsZXRlRmlsdGVyKHRoaXMucHJvY2Vzc0ZpbHRlcilcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIGZpbHRlcigoZmlsdGVycykgPT4ge1xuICAgICAgICAgICAgICAgICAgICBkZWxldGVBY3Rpb24uZmlsdGVyID0gdGhpcy5wcm9jZXNzRmlsdGVyO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmFjdGlvbi5lbWl0KGRlbGV0ZUFjdGlvbik7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmaWx0ZXJzLmxlbmd0aCA9PT0gMDtcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICBzd2l0Y2hNYXAoKCkgPT4gdGhpcy5yZXN0b3JlRGVmYXVsdFByb2Nlc3NGaWx0ZXJzKCkpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHt9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTYXZlIEFzIGEgcHJvY2VzcyBpbnN0YW5jZSBmaWx0ZXJcbiAgICAgKlxuICAgICAqIEBwYXJhbSBzYXZlQXNBY3Rpb24gZmlsdGVyIGFjdGlvblxuICAgICAqL1xuICAgIHNhdmVBcyhzYXZlQXNBY3Rpb246IFByb2Nlc3NGaWx0ZXJBY3Rpb24pIHtcbiAgICAgICAgY29uc3QgZGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3BlbihQcm9jZXNzRmlsdGVyRGlhbG9nQ2xvdWRDb21wb25lbnQsIHtcbiAgICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgICAgICBuYW1lOiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCh0aGlzLnByb2Nlc3NGaWx0ZXIubmFtZSlcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBoZWlnaHQ6ICdhdXRvJyxcbiAgICAgICAgICAgIG1pbldpZHRoOiAnMzAlJ1xuICAgICAgICB9KTtcbiAgICAgICAgZGlhbG9nUmVmLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcbiAgICAgICAgICAgIGlmIChyZXN1bHQgJiYgcmVzdWx0LmFjdGlvbiA9PT0gUHJvY2Vzc0ZpbHRlckRpYWxvZ0Nsb3VkQ29tcG9uZW50LkFDVElPTl9TQVZFKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZmlsdGVySWQgPSBNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zdWJzdHJpbmcoMiwgOSk7XG4gICAgICAgICAgICAgICAgY29uc3QgZmlsdGVyS2V5ID0gdGhpcy5nZXRTYW5pdGl6ZUZpbHRlck5hbWUocmVzdWx0Lm5hbWUpO1xuICAgICAgICAgICAgICAgIGNvbnN0IG5ld0ZpbHRlciA9IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogcmVzdWx0Lm5hbWUsXG4gICAgICAgICAgICAgICAgICAgIGljb246IHJlc3VsdC5pY29uLFxuICAgICAgICAgICAgICAgICAgICBpZDogZmlsdGVySWQsXG4gICAgICAgICAgICAgICAgICAgIGtleTogJ2N1c3RvbS0nICsgZmlsdGVyS2V5XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBjb25zdCByZXN1bHRGaWx0ZXI6IFByb2Nlc3NGaWx0ZXJDbG91ZE1vZGVsID0gT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5wcm9jZXNzRmlsdGVyLCBuZXdGaWx0ZXIpO1xuICAgICAgICAgICAgICAgIHRoaXMucHJvY2Vzc0ZpbHRlckNsb3VkU2VydmljZS5hZGRGaWx0ZXIocmVzdWx0RmlsdGVyKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBzYXZlQXNBY3Rpb24uZmlsdGVyID0gcmVzdWx0RmlsdGVyO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZpbHRlckhhc0JlZW5DaGFuZ2VkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWN0aW9uLmVtaXQoc2F2ZUFzQWN0aW9uKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmVzZXQocmVzZXRBY3Rpb246IFByb2Nlc3NGaWx0ZXJBY3Rpb24pIHtcbiAgICAgICAgdGhpcy5wcm9jZXNzRmlsdGVyQ2xvdWRTZXJ2aWNlXG4gICAgICAgICAgICAucmVzZXRQcm9jZXNzRmlsdGVyVG9EZWZhdWx0cyh0aGlzLmFwcE5hbWUsIHRoaXMucHJvY2Vzc0ZpbHRlcilcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIHRhcCgoZmlsdGVycykgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXNldEFjdGlvbi5maWx0ZXIgPSBmaWx0ZXJzLmZpbmQoKGRlZmF1bHRGaWx0ZXIpID0+IGRlZmF1bHRGaWx0ZXIubmFtZSA9PT0gdGhpcy5wcm9jZXNzRmlsdGVyLm5hbWUpIHx8IHRoaXMucHJvY2Vzc0ZpbHRlcjtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hY3Rpb24uZW1pdChyZXNldEFjdGlvbik7XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgc3dpdGNoTWFwKCgpID0+IHRoaXMucmVzdG9yZURlZmF1bHRQcm9jZXNzRmlsdGVycygpKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7fSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0IHNhbml0aXplZCBmaWx0ZXIgbmFtZVxuICAgICAqXG4gICAgICogQHBhcmFtIGZpbHRlck5hbWUgZmlsdGVyIG5hbWVcbiAgICAgKiBAcmV0dXJucyBzYW5pdGl6ZWQgZmlsdGVyIG5hbWVcbiAgICAgKi9cbiAgICBnZXRTYW5pdGl6ZUZpbHRlck5hbWUoZmlsdGVyTmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAgICAgY29uc3QgbmFtZVdpdGhIeXBoZW4gPSB0aGlzLnJlcGxhY2VTcGFjZVdpdGhIeXBoZW4oZmlsdGVyTmFtZS50cmltKCkpO1xuICAgICAgICByZXR1cm4gbmFtZVdpdGhIeXBoZW4udG9Mb3dlckNhc2UoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm4gbmFtZSB3aXRoIGh5cGhlblxuICAgICAqXG4gICAgICogQHBhcmFtIG5hbWUgbmFtZVxuICAgICAqIEByZXR1cm5zIHVwZGF0ZWQgdmFsdWVcbiAgICAgKi9cbiAgICByZXBsYWNlU3BhY2VXaXRoSHlwaGVuKG5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgICAgIGNvbnN0IHJlZ0V4dCA9IG5ldyBSZWdFeHAoJyAnLCAnZycpO1xuICAgICAgICByZXR1cm4gbmFtZS5yZXBsYWNlKHJlZ0V4dCwgJy0nKTtcbiAgICB9XG5cbiAgICByZXN0b3JlRGVmYXVsdFByb2Nlc3NGaWx0ZXJzKCk6IE9ic2VydmFibGU8UHJvY2Vzc0ZpbHRlckNsb3VkTW9kZWxbXT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5wcm9jZXNzRmlsdGVyQ2xvdWRTZXJ2aWNlLmdldFByb2Nlc3NGaWx0ZXJzKHRoaXMuYXBwTmFtZSk7XG4gICAgfVxuXG4gICAgb25FeHBhbmQoKSB7XG4gICAgICAgIHRoaXMudG9nZ2xlRmlsdGVyQWN0aW9ucyA9IHRydWU7XG4gICAgfVxuXG4gICAgb25DbG9zZSgpIHtcbiAgICAgICAgdGhpcy50b2dnbGVGaWx0ZXJBY3Rpb25zID0gZmFsc2U7XG4gICAgfVxuXG4gICAgaXNEaXNhYmxlZEFjdGlvbihhY3Rpb246IFByb2Nlc3NGaWx0ZXJBY3Rpb24pOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc0ZpbHRlckNsb3VkU2VydmljZS5pc0RlZmF1bHRGaWx0ZXIodGhpcy5wcm9jZXNzRmlsdGVyLm5hbWUpICYmIHRoaXMuYWN0aW9uRGlzYWJsZWRGb3JEZWZhdWx0LmluY2x1ZGVzKGFjdGlvbi5hY3Rpb25UeXBlKVxuICAgICAgICAgICAgPyB0cnVlXG4gICAgICAgICAgICA6IHRoaXMuaGFzRmlsdGVyQ2hhbmdlZChhY3Rpb24pO1xuICAgIH1cblxuICAgIGhhc0ZpbHRlckNoYW5nZWQoYWN0aW9uOiBQcm9jZXNzRmlsdGVyQWN0aW9uKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiBhY3Rpb24uYWN0aW9uVHlwZSA9PT0gUFJPQ0VTU19GSUxURVJfQUNUSU9OX1NBVkUgfHwgYWN0aW9uLmFjdGlvblR5cGUgPT09IFBST0NFU1NfRklMVEVSX0FDVElPTl9TQVZFX0FTXG4gICAgICAgICAgICA/ICF0aGlzLmZpbHRlckhhc0JlZW5DaGFuZ2VkXG4gICAgICAgICAgICA6IGZhbHNlO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2V0TGFzdE1vZGlmaWVkVG9GaWx0ZXIoZm9ybVZhbHVlczogUGFydGlhbDxQcm9jZXNzRmlsdGVyQ2xvdWRNb2RlbD4pIHtcbiAgICAgICAgaWYgKGlzVmFsaWQoZm9ybVZhbHVlcy5sYXN0TW9kaWZpZWRUbykpIHtcbiAgICAgICAgICAgIGZvcm1WYWx1ZXMubGFzdE1vZGlmaWVkVG8gPSBlbmRPZkRheShmb3JtVmFsdWVzLmxhc3RNb2RpZmllZFRvKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgc2V0TGFzdE1vZGlmaWVkRnJvbUZpbHRlcihmb3JtVmFsdWVzOiBQYXJ0aWFsPFByb2Nlc3NGaWx0ZXJDbG91ZE1vZGVsPikge1xuICAgICAgICBpZiAoaXNWYWxpZChmb3JtVmFsdWVzLmxhc3RNb2RpZmllZEZyb20pKSB7XG4gICAgICAgICAgICBmb3JtVmFsdWVzLmxhc3RNb2RpZmllZEZyb20gPSBzdGFydE9mRGF5KGZvcm1WYWx1ZXMubGFzdE1vZGlmaWVkRnJvbSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGNyZWF0ZUZpbHRlckFjdGlvbnMoKTogUHJvY2Vzc0ZpbHRlckFjdGlvbltdIHtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBhY3Rpb25UeXBlOiBQUk9DRVNTX0ZJTFRFUl9BQ1RJT05fU0FWRSxcbiAgICAgICAgICAgICAgICBpY29uOiAnYWRmOnNhdmUnLFxuICAgICAgICAgICAgICAgIHRvb2x0aXA6ICdBREZfQ0xPVURfRURJVF9QUk9DRVNTX0ZJTFRFUi5UT09MX1RJUC5TQVZFJ1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBhY3Rpb25UeXBlOiBQUk9DRVNTX0ZJTFRFUl9BQ1RJT05fU0FWRV9BUyxcbiAgICAgICAgICAgICAgICBpY29uOiAnYWRmOnNhdmUtYXMnLFxuICAgICAgICAgICAgICAgIHRvb2x0aXA6ICdBREZfQ0xPVURfRURJVF9QUk9DRVNTX0ZJTFRFUi5UT09MX1RJUC5TQVZFX0FTJ1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBhY3Rpb25UeXBlOiBQUk9DRVNTX0ZJTFRFUl9BQ1RJT05fREVMRVRFLFxuICAgICAgICAgICAgICAgIGljb246ICdkZWxldGUnLFxuICAgICAgICAgICAgICAgIHRvb2x0aXA6ICdBREZfQ0xPVURfRURJVF9QUk9DRVNTX0ZJTFRFUi5UT09MX1RJUC5ERUxFVEUnXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGFjdGlvblR5cGU6IFBST0NFU1NfRklMVEVSX0FDVElPTl9TQVZFX0RFRkFVTFQsXG4gICAgICAgICAgICAgICAgaWNvbjogJ2FkZjpzYXZlJyxcbiAgICAgICAgICAgICAgICB0b29sdGlwOiAnQURGX0NMT1VEX0VESVRfUFJPQ0VTU19GSUxURVIuVE9PTF9USVAuU0FWRSdcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYWN0aW9uVHlwZTogUFJPQ0VTU19GSUxURVJfQUNUSU9OX1JFU1RPUkUsXG4gICAgICAgICAgICAgICAgaWNvbjogJ3NldHRpbmdzX2JhY2t1cF9yZXN0b3JlJyxcbiAgICAgICAgICAgICAgICB0b29sdGlwOiAnQURGX0NMT1VEX0VESVRfUFJPQ0VTU19GSUxURVIuVE9PTF9USVAuUkVTVE9SRSdcbiAgICAgICAgICAgIH1cbiAgICAgICAgXTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNyZWF0ZUxhc3RNb2RpZmllZFByb3BlcnR5KGZpbHRlck1vZGVsOiBQcm9jZXNzRmlsdGVyQ2xvdWRNb2RlbCk6IFByb2Nlc3NGaWx0ZXJQcm9wZXJ0aWVzW10ge1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGxhYmVsOiAnQURGX0NMT1VEX0VESVRfUFJPQ0VTU19GSUxURVIuTEFCRUwuTEFTVF9NT0RJRklFRF9EQVRFX0ZPUk0nLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdkYXRlJyxcbiAgICAgICAgICAgICAgICBrZXk6ICdsYXN0TW9kaWZpZWRGcm9tJyxcbiAgICAgICAgICAgICAgICB2YWx1ZTogZmlsdGVyTW9kZWwubGFzdE1vZGlmaWVkRnJvbVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBsYWJlbDogJ0FERl9DTE9VRF9FRElUX1BST0NFU1NfRklMVEVSLkxBQkVMLkxBU1RfTU9ESUZJRURfVE8nLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdkYXRlJyxcbiAgICAgICAgICAgICAgICBrZXk6ICdsYXN0TW9kaWZpZWRUbycsXG4gICAgICAgICAgICAgICAgdmFsdWU6IGZpbHRlck1vZGVsLmxhc3RNb2RpZmllZFRvXG4gICAgICAgICAgICB9XG4gICAgICAgIF07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjcmVhdGVQcm9jZXNzU29ydFByb3BlcnRpZXMoKTogUHJvY2Vzc1NvcnRGaWx0ZXJQcm9wZXJ0eVtdIHtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBsYWJlbDogJ0FERl9DTE9VRF9FRElUX1BST0NFU1NfRklMVEVSLkxBQkVMLklEJyxcbiAgICAgICAgICAgICAgICBrZXk6ICdpZCcsXG4gICAgICAgICAgICAgICAgdmFsdWU6ICdpZCdcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbGFiZWw6ICdFbnZpcm9ubWVudElkJyxcbiAgICAgICAgICAgICAgICBrZXk6ICdlbnZpcm9ubWVudElkJyxcbiAgICAgICAgICAgICAgICB2YWx1ZTogJ2Vudmlyb25tZW50SWQnXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGxhYmVsOiAnQURGX0NMT1VEX0VESVRfUFJPQ0VTU19GSUxURVIuTEFCRUwuUFJPQ0VTU19OQU1FJyxcbiAgICAgICAgICAgICAgICBrZXk6ICduYW1lJyxcbiAgICAgICAgICAgICAgICB2YWx1ZTogJ25hbWUnXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGxhYmVsOiAnQURGX0NMT1VEX0VESVRfUFJPQ0VTU19GSUxURVIuTEFCRUwuU1RBUlRfREFURScsXG4gICAgICAgICAgICAgICAga2V5OiAnc3RhcnREYXRlJyxcbiAgICAgICAgICAgICAgICB2YWx1ZTogJ3N0YXJ0RGF0ZSdcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbGFiZWw6ICdBREZfQ0xPVURfRURJVF9QUk9DRVNTX0ZJTFRFUi5MQUJFTC5TVEFUVVMnLFxuICAgICAgICAgICAgICAgIGtleTogJ3N0YXR1cycsXG4gICAgICAgICAgICAgICAgdmFsdWU6ICdzdGF0dXMnXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGxhYmVsOiAnQURGX0NMT1VEX0VESVRfUFJPQ0VTU19GSUxURVIuTEFCRUwuU1RBUlRFRF9CWScsXG4gICAgICAgICAgICAgICAga2V5OiAnaW5pdGlhdG9yJyxcbiAgICAgICAgICAgICAgICB2YWx1ZTogJ2luaXRpYXRvcidcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbGFiZWw6ICdBREZfQ0xPVURfRURJVF9QUk9DRVNTX0ZJTFRFUi5MQUJFTC5BUFBfTkFNRScsXG4gICAgICAgICAgICAgICAga2V5OiAnYXBwTmFtZScsXG4gICAgICAgICAgICAgICAgdmFsdWU6ICdhcHBOYW1lJ1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBsYWJlbDogJ0FERl9DTE9VRF9FRElUX1BST0NFU1NfRklMVEVSLkxBQkVMLkFQUF9WRVJTSU9OJyxcbiAgICAgICAgICAgICAgICBrZXk6ICdhcHBWZXJzaW9uJyxcbiAgICAgICAgICAgICAgICB2YWx1ZTogJ2FwcFZlcnNpb24nXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGxhYmVsOiAnQURGX0NMT1VEX0VESVRfUFJPQ0VTU19GSUxURVIuTEFCRUwuTUFJTl9QUk9DRVNTX0lEJyxcbiAgICAgICAgICAgICAgICBrZXk6ICdwYXJlbnRJZCcsXG4gICAgICAgICAgICAgICAgdmFsdWU6ICdwYXJlbnRJZCdcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbGFiZWw6ICdBREZfQ0xPVURfRURJVF9QUk9DRVNTX0ZJTFRFUi5MQUJFTC5QUk9DRVNTX0lOU19JRCcsXG4gICAgICAgICAgICAgICAga2V5OiAncHJvY2Vzc0luc3RhbmNlSWQnLFxuICAgICAgICAgICAgICAgIHZhbHVlOiAncHJvY2Vzc0luc3RhbmNlSWQnXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGxhYmVsOiAnQURGX0NMT1VEX0VESVRfUFJPQ0VTU19GSUxURVIuTEFCRUwuUFJPQ0VTU19ERUZfSUQnLFxuICAgICAgICAgICAgICAgIGtleTogJ3Byb2Nlc3NEZWZpbml0aW9uSWQnLFxuICAgICAgICAgICAgICAgIHZhbHVlOiAncHJvY2Vzc0RlZmluaXRpb25JZCdcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbGFiZWw6ICdBREZfQ0xPVURfRURJVF9QUk9DRVNTX0ZJTFRFUi5MQUJFTC5QUk9DRVNTX0RFRl9OQU1FJyxcbiAgICAgICAgICAgICAgICBrZXk6ICdwcm9jZXNzRGVmaW5pdGlvbk5hbWUnLFxuICAgICAgICAgICAgICAgIHZhbHVlOiAncHJvY2Vzc0RlZmluaXRpb25OYW1lJ1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBsYWJlbDogJ0FERl9DTE9VRF9FRElUX1BST0NFU1NfRklMVEVSLkxBQkVMLlBST0NFU1NfREVGX0tFWScsXG4gICAgICAgICAgICAgICAga2V5OiAncHJvY2Vzc0RlZmluaXRpb25LZXknLFxuICAgICAgICAgICAgICAgIHZhbHVlOiAncHJvY2Vzc0RlZmluaXRpb25LZXknXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGxhYmVsOiAnQURGX0NMT1VEX0VESVRfUFJPQ0VTU19GSUxURVIuTEFCRUwuTEFTVF9NT0RJRklFRCcsXG4gICAgICAgICAgICAgICAga2V5OiAnbGFzdE1vZGlmaWVkJyxcbiAgICAgICAgICAgICAgICB2YWx1ZTogJ2xhc3RNb2RpZmllZCdcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbGFiZWw6ICdBREZfQ0xPVURfRURJVF9QUk9DRVNTX0ZJTFRFUi5MQUJFTC5CVVNJTkVTU19LRVknLFxuICAgICAgICAgICAgICAgIGtleTogJ2J1c2luZXNzS2V5JyxcbiAgICAgICAgICAgICAgICB2YWx1ZTogJ2J1c2luZXNzS2V5J1xuICAgICAgICAgICAgfVxuICAgICAgICBdO1xuICAgIH1cblxuICAgIHByaXZhdGUgaXNGaWx0ZXJDaGFuZ2VkKG9sZFZhbHVlOiBQcm9jZXNzRmlsdGVyQ2xvdWRNb2RlbCwgbmV3VmFsdWU6IFByb2Nlc3NGaWx0ZXJDbG91ZE1vZGVsKTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IG9sZEpzb24gPSBKU09OLnN0cmluZ2lmeSh0aGlzLnByb2Nlc3NGaWx0ZXJDbG91ZFNlcnZpY2Uud3JpdGVRdWVyeVBhcmFtcyhvbGRWYWx1ZSB8fCB7fSwgdGhpcy5maWx0ZXJQcm9wZXJ0aWVzKSk7XG4gICAgICAgIGNvbnN0IG5ld0pzb24gPSBKU09OLnN0cmluZ2lmeSh0aGlzLnByb2Nlc3NGaWx0ZXJDbG91ZFNlcnZpY2Uud3JpdGVRdWVyeVBhcmFtcyhuZXdWYWx1ZSB8fCB7fSwgdGhpcy5maWx0ZXJQcm9wZXJ0aWVzKSk7XG5cbiAgICAgICAgcmV0dXJuIG9sZEpzb24gIT09IG5ld0pzb247XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjcmVhdGVQcm9jZXNzRmlsdGVyUHJvcGVydGllcyhmaWx0ZXJNb2RlbDogUHJvY2Vzc0ZpbHRlckNsb3VkTW9kZWwpOiBQcm9jZXNzRmlsdGVyUHJvcGVydGllc1tdIHtcbiAgICAgICAgY29uc3QgYXBwVmVyc2lvbk11bHRpcGxlID0gW107XG5cbiAgICAgICAgaWYgKGZpbHRlck1vZGVsLmFwcFZlcnNpb24pIHtcbiAgICAgICAgICAgIGFwcFZlcnNpb25NdWx0aXBsZS5wdXNoKFxuICAgICAgICAgICAgICAgIEFycmF5LmlzQXJyYXkoZmlsdGVyTW9kZWwuYXBwVmVyc2lvbikgPyBmaWx0ZXJNb2RlbC5hcHBWZXJzaW9uLm1hcCgoZW50cnkpID0+IGVudHJ5LnRvU3RyaW5nKCkpIDogYCR7ZmlsdGVyTW9kZWwuYXBwVmVyc2lvbn1gXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBsYWJlbDogJ0FERl9DTE9VRF9FRElUX1BST0NFU1NfRklMVEVSLkxBQkVMLkFQUF9OQU1FJyxcbiAgICAgICAgICAgICAgICB0eXBlOiAnc2VsZWN0JyxcbiAgICAgICAgICAgICAgICBrZXk6ICdhcHBOYW1lJyxcbiAgICAgICAgICAgICAgICB2YWx1ZTogZmlsdGVyTW9kZWwuYXBwTmFtZSB8fCAnJyxcbiAgICAgICAgICAgICAgICBvcHRpb25zOiB0aGlzLmFwcGxpY2F0aW9uTmFtZXNcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbGFiZWw6ICdBREZfQ0xPVURfRURJVF9QUk9DRVNTX0ZJTFRFUi5MQUJFTC5BUFBfVkVSU0lPTicsXG4gICAgICAgICAgICAgICAgdHlwZTogJ251bWJlcicsXG4gICAgICAgICAgICAgICAga2V5OiAnYXBwVmVyc2lvbicsXG4gICAgICAgICAgICAgICAgdmFsdWU6IGZpbHRlck1vZGVsLmFwcFZlcnNpb25cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbGFiZWw6ICdBREZfQ0xPVURfRURJVF9QUk9DRVNTX0ZJTFRFUi5MQUJFTC5BUFBfVkVSU0lPTicsXG4gICAgICAgICAgICAgICAgdHlwZTogJ211bHRpLXNlbGVjdCcsXG4gICAgICAgICAgICAgICAga2V5OiAnYXBwVmVyc2lvbk11bHRpcGxlJyxcbiAgICAgICAgICAgICAgICB2YWx1ZTogYXBwVmVyc2lvbk11bHRpcGxlLFxuICAgICAgICAgICAgICAgIG9wdGlvbnM6IHRoaXMuYXBwVmVyc2lvbk9wdGlvbnNcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbGFiZWw6ICdBREZfQ0xPVURfRURJVF9QUk9DRVNTX0ZJTFRFUi5MQUJFTC5QUk9DRVNTX0lOU19JRCcsXG4gICAgICAgICAgICAgICAgdHlwZTogJ3RleHQnLFxuICAgICAgICAgICAgICAgIGtleTogJ3Byb2Nlc3NJbnN0YW5jZUlkJyxcbiAgICAgICAgICAgICAgICB2YWx1ZTogZmlsdGVyTW9kZWwucHJvY2Vzc0luc3RhbmNlSWQgfHwgJydcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbGFiZWw6ICdBREZfQ0xPVURfRURJVF9QUk9DRVNTX0ZJTFRFUi5MQUJFTC5NQUlOX1BST0NFU1NfSUQnLFxuICAgICAgICAgICAgICAgIHR5cGU6ICd0ZXh0JyxcbiAgICAgICAgICAgICAgICBrZXk6ICdwYXJlbnRJZCcsXG4gICAgICAgICAgICAgICAgdmFsdWU6IGZpbHRlck1vZGVsLnBhcmVudElkXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGxhYmVsOiAnQURGX0NMT1VEX0VESVRfUFJPQ0VTU19GSUxURVIuTEFCRUwuUFJPQ0VTU19OQU1FJyxcbiAgICAgICAgICAgICAgICB0eXBlOiAndGV4dCcsXG4gICAgICAgICAgICAgICAga2V5OiAncHJvY2Vzc05hbWUnLFxuICAgICAgICAgICAgICAgIHZhbHVlOiBmaWx0ZXJNb2RlbC5wcm9jZXNzTmFtZSB8fCAnJ1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBsYWJlbDogJ0FERl9DTE9VRF9FRElUX1BST0NFU1NfRklMVEVSLkxBQkVMLlBST0NFU1NfREVGX05BTUUnLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdzZWxlY3QnLFxuICAgICAgICAgICAgICAgIGtleTogJ3Byb2Nlc3NEZWZpbml0aW9uTmFtZScsXG4gICAgICAgICAgICAgICAgdmFsdWU6IGZpbHRlck1vZGVsLnByb2Nlc3NEZWZpbml0aW9uTmFtZSB8fCAnJyxcbiAgICAgICAgICAgICAgICBvcHRpb25zOiB0aGlzLnByb2Nlc3NEZWZpbml0aW9uTmFtZXNcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbGFiZWw6ICdBREZfQ0xPVURfRURJVF9QUk9DRVNTX0ZJTFRFUi5MQUJFTC5TVEFUVVMnLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdzZWxlY3QnLFxuICAgICAgICAgICAgICAgIGtleTogJ3N0YXR1cycsXG4gICAgICAgICAgICAgICAgdmFsdWU6IGZpbHRlck1vZGVsLnN0YXR1cyB8fCB0aGlzLnN0YXR1c1swXS52YWx1ZSxcbiAgICAgICAgICAgICAgICBvcHRpb25zOiB0aGlzLnN0YXR1c1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBsYWJlbDogJ0FERl9DTE9VRF9FRElUX1BST0NFU1NfRklMVEVSLkxBQkVMLlBST0NFU1NfREVGX0lEJyxcbiAgICAgICAgICAgICAgICB0eXBlOiAndGV4dCcsXG4gICAgICAgICAgICAgICAga2V5OiAncHJvY2Vzc0RlZmluaXRpb25JZCcsXG4gICAgICAgICAgICAgICAgdmFsdWU6IGZpbHRlck1vZGVsLnByb2Nlc3NEZWZpbml0aW9uSWQgfHwgJydcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbGFiZWw6ICdBREZfQ0xPVURfRURJVF9QUk9DRVNTX0ZJTFRFUi5MQUJFTC5QUk9DRVNTX0RFRl9LRVknLFxuICAgICAgICAgICAgICAgIHR5cGU6ICd0ZXh0JyxcbiAgICAgICAgICAgICAgICBrZXk6ICdwcm9jZXNzRGVmaW5pdGlvbktleScsXG4gICAgICAgICAgICAgICAgdmFsdWU6IGZpbHRlck1vZGVsLnByb2Nlc3NEZWZpbml0aW9uS2V5IHx8ICcnXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGxhYmVsOiAnQURGX0NMT1VEX0VESVRfUFJPQ0VTU19GSUxURVIuTEFCRUwuU09SVCcsXG4gICAgICAgICAgICAgICAgdHlwZTogJ3NlbGVjdCcsXG4gICAgICAgICAgICAgICAga2V5OiAnc29ydCcsXG4gICAgICAgICAgICAgICAgdmFsdWU6IGZpbHRlck1vZGVsLnNvcnQgfHwgdGhpcy5jcmVhdGVTb3J0UHJvcGVydGllc1swXS52YWx1ZSxcbiAgICAgICAgICAgICAgICBvcHRpb25zOiB0aGlzLmNyZWF0ZVNvcnRQcm9wZXJ0aWVzXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGxhYmVsOiAnQURGX0NMT1VEX0VESVRfUFJPQ0VTU19GSUxURVIuTEFCRUwuRElSRUNUSU9OJyxcbiAgICAgICAgICAgICAgICB0eXBlOiAnc2VsZWN0JyxcbiAgICAgICAgICAgICAgICBrZXk6ICdvcmRlcicsXG4gICAgICAgICAgICAgICAgdmFsdWU6IGZpbHRlck1vZGVsLm9yZGVyIHx8IHRoaXMuZGlyZWN0aW9uc1swXS52YWx1ZSxcbiAgICAgICAgICAgICAgICBvcHRpb25zOiB0aGlzLmRpcmVjdGlvbnNcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbGFiZWw6ICdBREZfQ0xPVURfRURJVF9QUk9DRVNTX0ZJTFRFUi5MQUJFTC5DT01QTEVURURfREFURScsXG4gICAgICAgICAgICAgICAgdHlwZTogJ2RhdGUnLFxuICAgICAgICAgICAgICAgIGtleTogJ2NvbXBsZXRlZERhdGUnLFxuICAgICAgICAgICAgICAgIHZhbHVlOiBmaWx0ZXJNb2RlbC5jb21wbGV0ZWREYXRlIHx8IGZhbHNlXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGxhYmVsOiAnQURGX0NMT1VEX0VESVRfUFJPQ0VTU19GSUxURVIuTEFCRUwuU1RBUlRFRF9CWScsXG4gICAgICAgICAgICAgICAgdHlwZTogJ3Blb3BsZScsXG4gICAgICAgICAgICAgICAga2V5OiAnaW5pdGlhdG9yJyxcbiAgICAgICAgICAgICAgICB2YWx1ZTogZmlsdGVyTW9kZWwuaW5pdGlhdG9yLFxuICAgICAgICAgICAgICAgIHNlbGVjdGlvbk1vZGU6ICdtdWx0aXBsZSdcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbGFiZWw6ICdBREZfQ0xPVURfRURJVF9QUk9DRVNTX0ZJTFRFUi5MQUJFTC5DT01QTEVURURfREFURScsXG4gICAgICAgICAgICAgICAgdHlwZTogJ2RhdGUtcmFuZ2UnLFxuICAgICAgICAgICAgICAgIGtleTogJ2NvbXBsZXRlZERhdGVSYW5nZScsXG4gICAgICAgICAgICAgICAgYXR0cmlidXRlczogeyBkYXRlVHlwZTogJ2NvbXBsZXRlZERhdGVUeXBlJywgZnJvbTogJ19jb21wbGV0ZWRGcm9tJywgdG86ICdfY29tcGxldGVkVG8nIH0sXG4gICAgICAgICAgICAgICAgdmFsdWU6IHtcbiAgICAgICAgICAgICAgICAgICAgY29tcGxldGVkRGF0ZVR5cGU6IGZpbHRlck1vZGVsLmNvbXBsZXRlZERhdGVUeXBlIHx8IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIF9jb21wbGV0ZWRGcm9tOiBmaWx0ZXJNb2RlbC5jb21wbGV0ZWRGcm9tIHx8IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIF9jb21wbGV0ZWRUbzogZmlsdGVyTW9kZWwuY29tcGxldGVkVG8gfHwgbnVsbFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbGFiZWw6ICdBREZfQ0xPVURfRURJVF9QUk9DRVNTX0ZJTFRFUi5MQUJFTC5TVEFSVEVEX0RBVEUnLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdkYXRlLXJhbmdlJyxcbiAgICAgICAgICAgICAgICBrZXk6ICdzdGFydGVkRGF0ZVJhbmdlJyxcbiAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzOiB7IGRhdGVUeXBlOiAnc3RhcnRlZERhdGVUeXBlJywgZnJvbTogJ19zdGFydEZyb20nLCB0bzogJ19zdGFydFRvJyB9LFxuICAgICAgICAgICAgICAgIHZhbHVlOiB7XG4gICAgICAgICAgICAgICAgICAgIHN0YXJ0ZWREYXRlVHlwZTogZmlsdGVyTW9kZWwuc3RhcnRlZERhdGVUeXBlIHx8IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIF9zdGFydEZyb206IGZpbHRlck1vZGVsLnN0YXJ0RnJvbSB8fCBudWxsLFxuICAgICAgICAgICAgICAgICAgICBfc3RhcnRUbzogZmlsdGVyTW9kZWwuc3RhcnRUbyB8fCBudWxsXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBsYWJlbDogJ0FERl9DTE9VRF9FRElUX1BST0NFU1NfRklMVEVSLkxBQkVMLlNVU1BFTkRFRF9EQVRFJyxcbiAgICAgICAgICAgICAgICB0eXBlOiAnZGF0ZS1yYW5nZScsXG4gICAgICAgICAgICAgICAga2V5OiAnc3VzcGVuZGVkRGF0ZVJhbmdlJyxcbiAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzOiB7IGRhdGVUeXBlOiAnc3VzcGVuZGVkRGF0ZVR5cGUnLCBmcm9tOiAnX3N1c3BlbmRlZEZyb20nLCB0bzogJ19zdXNwZW5kZWRUbycgfSxcbiAgICAgICAgICAgICAgICB2YWx1ZToge1xuICAgICAgICAgICAgICAgICAgICBzdXNwZW5kZWREYXRlVHlwZTogZmlsdGVyTW9kZWwuc3VzcGVuZGVkRGF0ZVR5cGUgfHwgbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgX3N1c3BlbmRlZEZyb206IGZpbHRlck1vZGVsLnN1c3BlbmRlZEZyb20gfHwgbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgX3N1c3BlbmRlZFRvOiBmaWx0ZXJNb2RlbC5zdXNwZW5kZWRUbyB8fCBudWxsXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICBdO1xuICAgIH1cbn1cbiIsIjxtYXQtYWNjb3JkaW9uIFtoaWRlVG9nZ2xlXT1cImlzTG9hZGluZ1wiIGNsYXNzPVwiYWRmLWVkaXQtcHJvY2Vzcy1maWx0ZXJcIj5cbiAgICA8bWF0LWV4cGFuc2lvbi1wYW5lbCAoYWZ0ZXJFeHBhbmQpPVwib25FeHBhbmQoKVwiIChjbG9zZWQpPVwib25DbG9zZSgpXCI+XG4gICAgICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlciAqbmdJZj1cInByb2Nlc3NGaWx0ZXJcIiBpZD1cImFkZi1lZGl0LXByb2Nlc3MtZmlsdGVyLWV4cGFuc2lvbi1oZWFkZXJcIiBjbGFzcz1cImFkZi1lZGl0LXByb2Nlc3MtZmlsdGVyLWhlYWRlclwiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFpc0xvYWRpbmc7IGVsc2UgbG9hZGluZ1RlbXBsYXRlXCI+XG4gICAgICAgICAgICAgICAgPG1hdC1wYW5lbC10aXRsZSAqbmdJZj1cInNob3dQcm9jZXNzRmlsdGVyTmFtZVwiIGlkPVwiYWRmLWVkaXQtcHJvY2Vzcy1maWx0ZXItdGl0bGUtaWRcIiBjbGFzcz1cImFkZi1lZGl0LXByb2Nlc3MtZmlsdGVyLWhlYWRlcl9fdGl0bGVcIj5cbiAgICAgICAgICAgICAgICAgICAge3twcm9jZXNzRmlsdGVyLm5hbWUgfCB0cmFuc2xhdGV9fTwvbWF0LXBhbmVsLXRpdGxlPlxuICAgICAgICAgICAgICAgIDxtYXQtcGFuZWwtZGVzY3JpcHRpb24gIGNsYXNzPVwiYWRmLWVkaXQtcHJvY2Vzcy1maWx0ZXItaGVhZGVyX19kZXNjcmlwdGlvblwiIGlkPVwiYWRmLWVkaXQtcHJvY2Vzcy1maWx0ZXItc3ViLXRpdGxlLWlkXCI+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwic2hvd1RpdGxlXCI+IHt7ICdBREZfQ0xPVURfRURJVF9QUk9DRVNTX0ZJTFRFUi5USVRMRScgfCB0cmFuc2xhdGV9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInNob3dGaWx0ZXJBY3Rpb25zXCIgY2xhc3M9XCJhZGYtY2xvdWQtZWRpdC1wcm9jZXNzLWZpbHRlci1hY3Rpb25zXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwidG9nZ2xlRmlsdGVyQWN0aW9uc1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gKm5nRm9yPVwibGV0IGZpbHRlckFjdGlvbiBvZiBwcm9jZXNzRmlsdGVyQWN0aW9uc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0aXRsZV09XCJmaWx0ZXJBY3Rpb24udG9vbHRpcCB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5kYXRhLWF1dG9tYXRpb24taWRdPVwiJ2FkZi1maWx0ZXItYWN0aW9uLScgKyBmaWx0ZXJBY3Rpb24uYWN0aW9uVHlwZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiaXNEaXNhYmxlZEFjdGlvbihmaWx0ZXJBY3Rpb24pXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJleGVjdXRlRmlsdGVyQWN0aW9ucygkZXZlbnQsIGZpbHRlckFjdGlvbilcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFkZi1pY29uIFt2YWx1ZV09XCJmaWx0ZXJBY3Rpb24uaWNvblwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9tYXQtcGFuZWwtZGVzY3JpcHRpb24+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjbG9hZGluZ1RlbXBsYXRlPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhZGYtY2xvdWQtZWRpdC1wcm9jZXNzLWZpbHRlci1sb2FkaW5nLW1hcmdpblwiPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LXNwaW5uZXIgW2RpYW1ldGVyXT1cIjMwXCIgLz5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvbWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhaXNMb2FkaW5nXCI+XG4gICAgICAgICAgICA8Zm9ybSBbZm9ybUdyb3VwXT1cImVkaXRQcm9jZXNzRmlsdGVyRm9ybVwiICpuZ0lmPVwiZWRpdFByb2Nlc3NGaWx0ZXJGb3JtXCIgY2xhc3M9XCJhZGYtZWRpdC1wcm9jZXNzLWZpbHRlci1jb250ZW50XCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFkZi1lZGl0LXByb2Nlc3MtZmlsdGVyLWZvcm1cIj5cbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgcHJvY2Vzc0ZpbHRlclByb3BlcnR5IG9mIHByb2Nlc3NGaWx0ZXJQcm9wZXJ0aWVzOyB0cmFja0J5OiBmaWx0ZXJUcmFja2VyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgW2Zsb2F0TGFiZWxdPVwiJ2F1dG8nXCIgKm5nSWY9XCJwcm9jZXNzRmlsdGVyUHJvcGVydHkudHlwZSA9PT0gJ3NlbGVjdCdcIiBbYXR0ci5kYXRhLWF1dG9tYXRpb24taWRdPVwicHJvY2Vzc0ZpbHRlclByb3BlcnR5LmtleVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWwgY2xhc3M9XCJhZGYtZWRpdC1wcm9jZXNzLWZpbHRlci1jb250ZW50X19zZWxlY3QtbGFiZWxcIj57e3Byb2Nlc3NGaWx0ZXJQcm9wZXJ0eS5sYWJlbCB8IHRyYW5zbGF0ZX19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1zZWxlY3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Zvcm1Db250cm9sTmFtZV09XCJwcm9jZXNzRmlsdGVyUHJvcGVydHkua2V5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuZGF0YS1hdXRvbWF0aW9uLWlkXT1cIidhZGYtY2xvdWQtZWRpdC1wcm9jZXNzLXByb3BlcnR5LScgKyBwcm9jZXNzRmlsdGVyUHJvcGVydHkua2V5XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgcHJvcGVydHlPcHRpb24gb2YgcHJvY2Vzc0ZpbHRlclByb3BlcnR5Lm9wdGlvbnNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cInByb3BlcnR5T3B0aW9uLnZhbHVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmRhdGEtYXV0b21hdGlvbi1pZF09XCInYWRmLWNsb3VkLWVkaXQtcHJvY2Vzcy1wcm9wZXJ0eS1vcHRpb25zLScgKyBwcm9jZXNzRmlsdGVyUHJvcGVydHkua2V5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPnt7IHByb3BlcnR5T3B0aW9uLmxhYmVsIHwgdHJhbnNsYXRlIH19PC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgW2Zsb2F0TGFiZWxdPVwiJ2F1dG8nXCIgKm5nSWY9XCJwcm9jZXNzRmlsdGVyUHJvcGVydHkudHlwZSA9PT0gJ211bHRpLXNlbGVjdCdcIiBbYXR0ci5kYXRhLWF1dG9tYXRpb24taWRdPVwicHJvY2Vzc0ZpbHRlclByb3BlcnR5LmtleVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWwgY2xhc3M9XCJhZGYtZWRpdC1wcm9jZXNzLWZpbHRlci1jb250ZW50X19zZWxlY3QtbGFiZWxcIj57e3Byb2Nlc3NGaWx0ZXJQcm9wZXJ0eS5sYWJlbCB8IHRyYW5zbGF0ZX19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1zZWxlY3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Zvcm1Db250cm9sTmFtZV09XCJwcm9jZXNzRmlsdGVyUHJvcGVydHkua2V5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuZGF0YS1hdXRvbWF0aW9uLWlkXT1cIidhZGYtY2xvdWQtZWRpdC1wcm9jZXNzLXByb3BlcnR5LScgKyBwcm9jZXNzRmlsdGVyUHJvcGVydHkua2V5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW211bHRpcGxlXT1cInRydWVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IHByb3BlcnR5T3B0aW9uIG9mIHByb2Nlc3NGaWx0ZXJQcm9wZXJ0eS5vcHRpb25zXCIgW3ZhbHVlXT1cInByb3BlcnR5T3B0aW9uLnZhbHVlXCIgW2F0dHIuZGF0YS1hdXRvbWF0aW9uLWlkXT1cIidhZGYtY2xvdWQtZWRpdC1wcm9jZXNzLXByb3BlcnR5LW9wdGlvbnMtJyArIHByb2Nlc3NGaWx0ZXJQcm9wZXJ0eS5rZXlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IHByb3BlcnR5T3B0aW9uLmxhYmVsIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIFtmbG9hdExhYmVsXT1cIidhdXRvJ1wiICpuZ0lmPVwicHJvY2Vzc0ZpbHRlclByb3BlcnR5LnR5cGUgPT09ICd0ZXh0J1wiIFthdHRyLmRhdGEtYXV0b21hdGlvbi1pZF09XCJwcm9jZXNzRmlsdGVyUHJvcGVydHkua2V5XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbCBjbGFzcz1cImFkZi1lZGl0LXByb2Nlc3MtZmlsdGVyLWNvbnRlbnRfX3RleHQtbGFiZWxcIj57e3Byb2Nlc3NGaWx0ZXJQcm9wZXJ0eS5sYWJlbCB8IHRyYW5zbGF0ZX19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmb3JtQ29udHJvbE5hbWVdPVwicHJvY2Vzc0ZpbHRlclByb3BlcnR5LmtleVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuZGF0YS1hdXRvbWF0aW9uLWlkXT1cIidhZGYtY2xvdWQtZWRpdC1wcm9jZXNzLXByb3BlcnR5LScgKyBwcm9jZXNzRmlsdGVyUHJvcGVydHkua2V5XCIvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBbZmxvYXRMYWJlbF09XCInYXV0bydcIiAqbmdJZj1cInByb2Nlc3NGaWx0ZXJQcm9wZXJ0eS50eXBlID09PSAnbnVtYmVyJ1wiIFthdHRyLmRhdGEtYXV0b21hdGlvbi1pZF09XCJwcm9jZXNzRmlsdGVyUHJvcGVydHkua2V5XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmb3JtQ29udHJvbE5hbWVdPVwicHJvY2Vzc0ZpbHRlclByb3BlcnR5LmtleVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJudW1iZXJcIiBtaW49XCIwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJ7e3Byb2Nlc3NGaWx0ZXJQcm9wZXJ0eS5sYWJlbCB8IHRyYW5zbGF0ZX19XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuZGF0YS1hdXRvbWF0aW9uLWlkXT1cIidhZGYtY2xvdWQtZWRpdC1wcm9jZXNzLXByb3BlcnR5LScgKyBwcm9jZXNzRmlsdGVyUHJvcGVydHkua2V5XCIvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBbZmxvYXRMYWJlbF09XCInYXV0bydcIiAqbmdJZj1cInByb2Nlc3NGaWx0ZXJQcm9wZXJ0eS50eXBlID09PSAnZGF0ZSdcIiBbYXR0ci5kYXRhLWF1dG9tYXRpb24taWRdPVwicHJvY2Vzc0ZpbHRlclByb3BlcnR5LmtleVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWw+e3twcm9jZXNzRmlsdGVyUHJvcGVydHkubGFiZWwgfCB0cmFuc2xhdGV9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRJbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cInByb2Nlc3NGaWx0ZXJQcm9wZXJ0eS5rZXlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoa2V5dXApPVwib25EYXRlQ2hhbmdlZCgkYW55KCRldmVudCkudGFyZ2V0LnZhbHVlLCBwcm9jZXNzRmlsdGVyUHJvcGVydHkpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGRhdGVDaGFuZ2UpPVwib25EYXRlQ2hhbmdlZCgkZXZlbnQudmFsdWUsIHByb2Nlc3NGaWx0ZXJQcm9wZXJ0eSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbWF0RGF0ZXBpY2tlcl09XCJkYXRlQ29udHJvbGxlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwie3twcm9jZXNzRmlsdGVyUHJvcGVydHkubGFiZWwgfCB0cmFuc2xhdGV9fVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmRhdGEtYXV0b21hdGlvbi1pZF09XCInYWRmLWNsb3VkLWVkaXQtcHJvY2Vzcy1wcm9wZXJ0eS0nICsgcHJvY2Vzc0ZpbHRlclByb3BlcnR5LmtleVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZGF0ZXBpY2tlci10b2dnbGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0U3VmZml4IFtmb3JdPVwiZGF0ZUNvbnRyb2xsZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmRhdGEtYXV0b21hdGlvbi1pZF09XCInYWRmLWNsb3VkLWVkaXQtcHJvY2Vzcy1wcm9wZXJ0eS1kYXRlLXRvZ2dsZS0nICsgcHJvY2Vzc0ZpbHRlclByb3BlcnR5LmtleVwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1kYXRlcGlja2VyICNkYXRlQ29udHJvbGxlciBbYXR0ci5kYXRhLWF1dG9tYXRpb24taWRdPVwiJ2FkZi1jbG91ZC1lZGl0LXByb2Nlc3MtcHJvcGVydHktZGF0ZS1waWNrZXItJyArIHByb2Nlc3NGaWx0ZXJQcm9wZXJ0eS5rZXlcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhZGYtZWRpdC1wcm9jZXNzLWZpbHRlci1kYXRlLWVycm9yLWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiaGFzRXJyb3IocHJvY2Vzc0ZpbHRlclByb3BlcnR5KVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFkZi1lcnJvci10ZXh0XCI+e3snQURGX0NMT1VEX0VESVRfUFJPQ0VTU19GSUxURVIuRVJST1IuREFURScgfCB0cmFuc2xhdGV9fTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwiYWRmLWVycm9yLWljb25cIj53YXJuaW5nPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICA8YWRmLWNsb3VkLWRhdGUtcmFuZ2UtZmlsdGVyICpuZ0lmPVwicHJvY2Vzc0ZpbHRlclByb3BlcnR5LnR5cGUgPT09ICdkYXRlLXJhbmdlJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Byb2Nlc3NGaWx0ZXJQcm9wZXJ0eV09XCJwcm9jZXNzRmlsdGVyUHJvcGVydHlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtvcHRpb25zXT1cInByb2Nlc3NGaWx0ZXJQcm9wZXJ0eS5kYXRlRmlsdGVyT3B0aW9uc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGRhdGVUeXBlQ2hhbmdlKT1cIm9uRGF0ZVR5cGVDaGFuZ2UoJGV2ZW50LCBwcm9jZXNzRmlsdGVyUHJvcGVydHkpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZGF0ZUNoYW5nZWQpPVwib25EYXRlUmFuZ2VGaWx0ZXJDaGFuZ2VkKCRldmVudCwgcHJvY2Vzc0ZpbHRlclByb3BlcnR5KVwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8YWRmLWNsb3VkLXBlb3BsZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwicHJvY2Vzc0ZpbHRlclByb3BlcnR5LnR5cGUgPT09ICdwZW9wbGUnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcHJlU2VsZWN0VXNlcnNdPVwiaW5pdGlhdG9yT3B0aW9uc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RpdGxlXT1cInByb2Nlc3NGaWx0ZXJQcm9wZXJ0eS5sYWJlbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbGlkYXRlXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthcHBOYW1lXT1cImFwcE5hbWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttb2RlXT1cInByb2Nlc3NGaWx0ZXJQcm9wZXJ0eS5zZWxlY3Rpb25Nb2RlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhbmdlZFVzZXJzKT1cIm9uQ2hhbmdlZFVzZXIoJGV2ZW50LCBwcm9jZXNzRmlsdGVyUHJvcGVydHkpXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Zvcm0+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvbWF0LWV4cGFuc2lvbi1wYW5lbD5cbjwvbWF0LWFjY29yZGlvbj5cbiJdfQ==